Name: series-workflowpj4pc Phase: Succeeded StartedAt: 2026-08-01 19:47:38 +0000 UTC FinishedAt: 2026-08-01 23:49:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpj4pc[0] Phase: Succeeded StartedAt: 2026-08-01 19:47:38 +0000 UTC FinishedAt: 2026-08-01 20:03:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpj4pc[0].run-triage Phase: Succeeded StartedAt: 2026-08-01 19:47:38 +0000 UTC FinishedAt: 2026-08-01 20:03:03 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "4a0bd262df757b25fc4e2a53c947317c119ced4e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MAC80211", "CFG80211", "MAC80211_HWSIM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "4a0bd262df757b25fc4e2a53c947317c119ced4e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MAC80211", "CFG80211", "MAC80211_HWSIM" ], "series_id": "6c8d765f-7457-43c7-89aa-b020bd662634" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nl80211_new_key", "nl80211_del_key", "nl80211_get_key", "nl80211_set_station", "nl80211_new_station", "nl80211_associate", "ieee80211_key_link", "ieee80211_gtk_rekey_add", "ieee80211_put_cip_cap", "cfg80211_cigtk_supported", "cfg80211_valid_key_idx", "cfg80211_validate_key_settings" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIwOjAyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O0NGRzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExX0hXU0lNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmw4MDIxMV9uZXdfa2V5JiMzNDssCiAgICAmIzM0O25sODAyMTFfZGVsX2tleSYjMzQ7LAogICAgJiMzNDtubDgwMjExX2dldF9rZXkmIzM0OywKICAgICYjMzQ7bmw4MDIxMV9zZXRfc3RhdGlvbiYjMzQ7LAogICAgJiMzNDtubDgwMjExX25ld19zdGF0aW9uJiMzNDssCiAgICAmIzM0O25sODAyMTFfYXNzb2NpYXRlJiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9rZXlfbGluayYjMzQ7LAogICAgJiMzNDtpZWVlODAyMTFfZ3RrX3Jla2V5X2FkZCYjMzQ7LAogICAgJiMzNDtpZWVlODAyMTFfcHV0X2NpcF9jYXAmIzM0OywKICAgICYjMzQ7Y2ZnODAyMTFfY2lndGtfc3VwcG9ydGVkJiMzNDssCiAgICAmIzM0O2NmZzgwMjExX3ZhbGlkX2tleV9pZHgmIzM0OywKICAgICYjMzQ7Y2ZnODAyMTFfdmFsaWRhdGVfa2V5X3NldHRpbmdzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgdGhlIENvbnRyb2wgSW50ZWdyaXR5IFByb3RvY29sIChDSVApIGluIGNmZzgwMjExIGFuZCBtYWM4MDIxMSwgaW5jbHVkaW5nIGEgbmV3IGtleSB0eXBlIGBOTDgwMjExX0tFWVRZUEVfQ0lHVEtgIGFuZCBuZXcgbmV0bGluayBhdHRyaWJ1dGVzLiBJdCBtb2RpZmllcyBrZXkgaGFuZGxpbmcgbG9naWMgYWNyb3NzIHRoZSB3aXJlbGVzcyBzdGFjayBhbmQgdXBkYXRlcyBgbWFjODAyMTFfaHdzaW1gIHRvIGFkdmVydGlzZSBDSVAgc3VwcG9ydCwgbWFraW5nIGl0IHRlc3RhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgbmw4MDIxMSBuZXRsaW5rIGNvbW1hbmRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIwOjAyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZjliNGQ5ZDM1MmM3MDIyNTM5YzMwMmRkMDUxOGUyMjYwMzc1OWQyMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDEgMjA6MDI6MjUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jZmc4MDIxMS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jZmc4MDIxMS5jXG5pbmRleCBlY2RlOTExNTliNTQ2Li5kNGU5NDIzZmM1ZTRkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jZmc4MDIxMS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NmZzgwMjExLmNcbkBAIC0xMTI1LDEzICYjNDM7MTEyNSwxNSBAQCB2b2lkIGF0aDZrbF9jZmc4MDIxMV9jaF9zd2l0Y2hfbm90aWZ5KHN0cnVjdCBhdGg2a2xfdmlmICp2aWYsIGludCBmcmVxLFxuIH1cbiBcbiBzdGF0aWMgaW50IGF0aDZrbF9jZmc4MDIxMV9hZGRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4tXHRcdFx0XHQgICBpbnQgbGlua19pZCwgdTgga2V5X2luZGV4LCBib29sIHBhaXJ3aXNlLFxuJiM0MztcdFx0XHRcdCAgIGludCBsaW5rX2lkLCB1OCBrZXlfaW5kZXgsXG4mIzQzO1x0XHRcdFx0ICAgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsXG4gXHRcdFx0XHQgICBjb25zdCB1OCAqbWFjX2FkZHIsXG4gXHRcdFx0XHQgICBzdHJ1Y3Qga2V5X3BhcmFtcyAqcGFyYW1zKVxuIHtcbiBcdHN0cnVjdCBhdGg2a2wgKmFyID0gYXRoNmtsX3ByaXYod2Rldi1cdTAwM2VuZXRkZXYpO1xuIFx0c3RydWN0IGF0aDZrbF92aWYgKnZpZiA9IG5ldGRldl9wcml2KHdkZXYtXHUwMDNlbmV0ZGV2KTtcbiBcdHN0cnVjdCBhdGg2a2xfa2V5ICprZXkgPSBOVUxMO1xuJiM0MztcdGJvb2wgcGFpcndpc2UgPSB0eXBlID09IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRTtcbiBcdGludCBzZXFfbGVuO1xuIFx0dTgga2V5X3VzYWdlO1xuIFx0dTgga2V5X3R5cGU7XG5AQCAtMTI1MCw3ICYjNDM7MTI1Miw4IEBAIHN0YXRpYyBpbnQgYXRoNmtsX2NmZzgwMjExX2FkZF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RlXG4gfVxuIFxuIHN0YXRpYyBpbnQgYXRoNmtsX2NmZzgwMjExX2RlbF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldixcbi1cdFx0XHRcdCAgIGludCBsaW5rX2lkLCB1OCBrZXlfaW5kZXgsIGJvb2wgcGFpcndpc2UsXG4mIzQzO1x0XHRcdFx0ICAgaW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCxcbiYjNDM7XHRcdFx0XHQgICBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSxcbiBcdFx0XHRcdCAgIGNvbnN0IHU4ICptYWNfYWRkcilcbiB7XG4gXHRzdHJ1Y3QgYXRoNmtsICphciA9IGF0aDZrbF9wcml2KHdkZXYtXHUwMDNlbmV0ZGV2KTtcbkBAIC0xMjgwLDcgJiM0MzsxMjgzLDggQEAgc3RhdGljIGludCBhdGg2a2xfY2ZnODAyMTFfZGVsX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGVcbiB9XG4gXG4gc3RhdGljIGludCBhdGg2a2xfY2ZnODAyMTFfZ2V0X2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuLVx0XHRcdFx0ICAgaW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCwgYm9vbCBwYWlyd2lzZSxcbiYjNDM7XHRcdFx0XHQgICBpbnQgbGlua19pZCwgdTgga2V5X2luZGV4LFxuJiM0MztcdFx0XHRcdCAgIGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLFxuIFx0XHRcdFx0ICAgY29uc3QgdTggKm1hY19hZGRyLCB2b2lkICpjb29raWUsXG4gXHRcdFx0XHQgICB2b2lkICgqY2FsbGJhY2spICh2b2lkICpjb29raWUsXG4gXHRcdFx0XHRcdFx0ICAgICBzdHJ1Y3Qga2V5X3BhcmFtcyAqKSlcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvd2lsNjIxMC9jZmc4MDIxMS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3dpbDYyMTAvY2ZnODAyMTEuY1xuaW5kZXggNWYyYmQ5YTMxZmFmNi4uYzA5NzgzMWI3ZmFmMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC93aWw2MjEwL2NmZzgwMjExLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC93aWw2MjEwL2NmZzgwMjExLmNcbkBAIC0xNjIxLDExICYjNDM7MTYyMSwxMyBAQCBzdGF0aWMgdm9pZCB3aWxfZGVsX3J4X2tleSh1OCBrZXlfaW5kZXgsIGVudW0gd21pX2tleV91c2FnZSBrZXlfdXNhZ2UsXG4gXG4gc3RhdGljIGludCB3aWxfY2ZnODAyMTFfYWRkX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxuIFx0XHRcdFx0c3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwgaW50IGxpbmtfaWQsXG4tXHRcdFx0XHR1OCBrZXlfaW5kZXgsIGJvb2wgcGFpcndpc2UsXG4mIzQzO1x0XHRcdFx0dTgga2V5X2luZGV4LFxuJiM0MztcdFx0XHRcdGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLFxuIFx0XHRcdFx0Y29uc3QgdTggKm1hY19hZGRyLFxuIFx0XHRcdFx0c3RydWN0IGtleV9wYXJhbXMgKnBhcmFtcylcbiB7XG4gXHRpbnQgcmM7XG4mIzQzO1x0Ym9vbCBwYWlyd2lzZSA9IHR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFO1xuIFx0c3RydWN0IHdpbDYyMTBfcHJpdiAqd2lsID0gd2lwaHlfdG9fd2lsKHdpcGh5KTtcbiBcdHN0cnVjdCB3aWw2MjEwX3ZpZiAqdmlmID0gd2Rldl90b192aWYod2lsLCB3ZGV2KTtcbiBcdGVudW0gd21pX2tleV91c2FnZSBrZXlfdXNhZ2UgPSB3aWxfZGV0ZWN0X2tleV91c2FnZSh3ZGV2LCBwYWlyd2lzZSk7XG5AQCAtMTY5NiwxMiAmIzQzOzE2OTgsMTQgQEAgc3RhdGljIGludCB3aWxfY2ZnODAyMTFfYWRkX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxuIFxuIHN0YXRpYyBpbnQgd2lsX2NmZzgwMjExX2RlbF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSxcbiBcdFx0XHRcdHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsIGludCBsaW5rX2lkLFxuLVx0XHRcdFx0dTgga2V5X2luZGV4LCBib29sIHBhaXJ3aXNlLFxuJiM0MztcdFx0XHRcdHU4IGtleV9pbmRleCxcbiYjNDM7XHRcdFx0XHRlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSxcbiBcdFx0XHRcdGNvbnN0IHU4ICptYWNfYWRkcilcbiB7XG4gXHRzdHJ1Y3Qgd2lsNjIxMF9wcml2ICp3aWwgPSB3aXBoeV90b193aWwod2lwaHkpO1xuIFx0c3RydWN0IHdpbDYyMTBfdmlmICp2aWYgPSB3ZGV2X3RvX3ZpZih3aWwsIHdkZXYpO1xuLVx0ZW51bSB3bWlfa2V5X3VzYWdlIGtleV91c2FnZSA9IHdpbF9kZXRlY3Rfa2V5X3VzYWdlKHdkZXYsIHBhaXJ3aXNlKTtcbiYjNDM7XHRlbnVtIHdtaV9rZXlfdXNhZ2Uga2V5X3VzYWdlID1cbiYjNDM7XHRcdHdpbF9kZXRlY3Rfa2V5X3VzYWdlKHdkZXYsIHR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFKTtcbiBcdHN0cnVjdCB3aWxfc3RhX2luZm8gKmNzID0gd2lsX2ZpbmRfc3RhX2J5X2tleV91c2FnZSh3aWwsIHZpZi1cdTAwM2VtaWQsXG4gXHRcdFx0XHRcdFx0XHQgICAga2V5X3VzYWdlLFxuIFx0XHRcdFx0XHRcdFx0ICAgIG1hY19hZGRyKTtcbkBAIC0yMDcyLDcgJiM0MzsyMDc2LDggQEAgdm9pZCB3aWxfY2ZnODAyMTFfYXBfcmVjb3Zlcnkoc3RydWN0IHdpbDYyMTBfcHJpdiAqd2lsKVxuIFx0XHRrZXlfcGFyYW1zLnNlcV9sZW4gPSBJRUVFODAyMTFfR0NNUF9QTl9MRU47XG4gXHRcdHJjID0gd2lsX2NmZzgwMjExX2FkZF9rZXkod2lwaHksIHZpZl90b193ZGV2KHZpZiksIC0xLFxuIFx0XHRcdFx0XHQgIHZpZi1cdTAwM2VndGtfaW5kZXgsXG4tXHRcdFx0XHRcdCAgZmFsc2UsIE5VTEwsIFx1MDAyNmtleV9wYXJhbXMpO1xuJiM0MztcdFx0XHRcdFx0ICBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0UsXG4mIzQzO1x0XHRcdFx0XHQgIE5VTEwsIFx1MDAyNmtleV9wYXJhbXMpO1xuIFx0XHRpZiAocmMpXG4gXHRcdFx0d2lsX2Vycih3aWwsIFwmIzM0O3ZpZiAlZCByZWNvdmVyeSBhZGQga2V5IGZhaWxlZCAoJWQpXFxuXCYjMzQ7LFxuIFx0XHRcdFx0aSwgcmMpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmNcbmluZGV4IDZiMmMzNGUzYTc5NmMuLjc4NWZkNTdkN2M2Y2MgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmNcbkBAIC0yNzcwLDcgJiM0MzsyNzcwLDggQEAgYnJjbWZfY2ZnODAyMTFfY29uZmlnX2RlZmF1bHRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuIFxuIHN0YXRpYyBzMzJcbiBicmNtZl9jZmc4MDIxMV9kZWxfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4tXHRcdCAgICAgICBpbnQgbGlua19pZCwgdTgga2V5X2lkeCwgYm9vbCBwYWlyd2lzZSxcbiYjNDM7XHRcdCAgICAgICBpbnQgbGlua19pZCwgdTgga2V5X2lkeCxcbiYjNDM7XHRcdCAgICAgICBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSxcbiBcdFx0ICAgICAgIGNvbnN0IHU4ICptYWNfYWRkcilcbiB7XG4gXHRzdHJ1Y3QgYnJjbWZfaWYgKmlmcCA9IG5ldGRldl9wcml2KHdkZXYtXHUwMDNlbmV0ZGV2KTtcbkBAIC0yODA4LDcgJiM0MzsyODA5LDggQEAgYnJjbWZfY2ZnODAyMTFfZGVsX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuIFxuIHN0YXRpYyBzMzJcbiBicmNtZl9jZmc4MDIxMV9hZGRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4tXHRcdCAgICAgICBpbnQgbGlua19pZCwgdTgga2V5X2lkeCwgYm9vbCBwYWlyd2lzZSxcbiYjNDM7XHRcdCAgICAgICBpbnQgbGlua19pZCwgdTgga2V5X2lkeCxcbiYjNDM7XHRcdCAgICAgICBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSxcbiBcdFx0ICAgICAgIGNvbnN0IHU4ICptYWNfYWRkciwgc3RydWN0IGtleV9wYXJhbXMgKnBhcmFtcylcbiB7XG4gXHRzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfaW5mbyAqY2ZnID0gd2lwaHlfdG9fY2ZnKHdpcGh5KTtcbkBAIC0yODM0LDcgJiM0MzsyODM2LDcgQEAgYnJjbWZfY2ZnODAyMTFfYWRkX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuIFxuIFx0aWYgKHBhcmFtcy1cdTAwM2VrZXlfbGVuID09IDApXG4gXHRcdHJldHVybiBicmNtZl9jZmc4MDIxMV9kZWxfa2V5KHdpcGh5LCB3ZGV2LCAtMSwga2V5X2lkeCxcbi1cdFx0XHRcdFx0ICAgICAgcGFpcndpc2UsIG1hY19hZGRyKTtcbiYjNDM7XHRcdFx0XHRcdCAgICAgIHR5cGUsIG1hY19hZGRyKTtcbiBcbiBcdGlmIChwYXJhbXMtXHUwMDNla2V5X2xlbiBcdTAwM2Ugc2l6ZW9mKGtleS1cdTAwM2VkYXRhKSkge1xuIFx0XHRicGh5X2VycihkcnZyLCBcJiMzNDtUb28gbG9uZyBrZXkgbGVuZ3RoICgldSlcXG5cJiMzNDssIHBhcmFtcy1cdTAwM2VrZXlfbGVuKTtcbkBAIC0yOTMwLDcgJiM0MzsyOTMyLDggQEAgYnJjbWZfY2ZnODAyMTFfYWRkX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuIFxuIHN0YXRpYyBzMzJcbiBicmNtZl9jZmc4MDIxMV9nZXRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4tXHRcdCAgICAgICBpbnQgbGlua19pZCwgdTgga2V5X2lkeCwgYm9vbCBwYWlyd2lzZSxcbiYjNDM7XHRcdCAgICAgICBpbnQgbGlua19pZCwgdTgga2V5X2lkeCxcbiYjNDM7XHRcdCAgICAgICBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSxcbiBcdFx0ICAgICAgIGNvbnN0IHU4ICptYWNfYWRkciwgdm9pZCAqY29va2llLFxuIFx0XHQgICAgICAgdm9pZCAoKmNhbGxiYWNrKSh2b2lkICpjb29raWUsXG4gXHRcdFx0XHRcdHN0cnVjdCBrZXlfcGFyYW1zICpwYXJhbXMpKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL2QzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9kMy5jXG5pbmRleCA1NWY5YjgwOWU3NjRkLi42ZDhlZGUzMzZkNTliIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvZDMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvZDMuY1xuQEAgLTExMzgsNyAmIzQzOzExMzgsOCBAQCBpd2xfbWxkX2FkZF9tY2FzdF9yZWtleShzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxuIFx0XHRyZXR1cm47XG4gXG4gXHRrZXlfY29uZmlnID0gaWVlZTgwMjExX2d0a19yZWtleV9hZGQodmlmLCBrZXlfZGF0YS1cdTAwM2VpZCwga2V5X2RhdGEtXHUwMDNla2V5LFxuLVx0XHRcdFx0XHQgICAgIHNpemVvZihrZXlfZGF0YS1cdTAwM2VrZXkpLCBsaW5rX2lkKTtcbiYjNDM7XHRcdFx0XHRcdCAgICAgc2l6ZW9mKGtleV9kYXRhLVx1MDAzZWtleSksIGxpbmtfaWQsXG4mIzQzO1x0XHRcdFx0XHQgICAgIGZhbHNlKTtcbiBcdGlmIChJU19FUlIoa2V5X2NvbmZpZykpXG4gXHRcdHJldHVybjtcbiBcbkBAIC0xMjIwLDcgJiM0MzsxMjIxLDggQEAgc3RhdGljIHZvaWQgaXdsX21sZF9tbG9fcmVrZXkoc3RydWN0IGl3bF9tbGQgKm1sZCxcbiBcdFx0XHRcdCBtbG9fa2V5LVx1MDAzZWlkeCwgbGlua19pZCk7XG4gXG4gXHRcdGtleSA9IGllZWU4MDIxMV9ndGtfcmVrZXlfYWRkKHZpZiwgbWxvX2tleS1cdTAwM2VpZHgsIG1sb19rZXktXHUwMDNla2V5LFxuLVx0XHRcdFx0XHQgICAgICBzaXplb2YobWxvX2tleS1cdTAwM2VrZXkpLCBsaW5rX2lkKTtcbiYjNDM7XHRcdFx0XHRcdCAgICAgIHNpemVvZihtbG9fa2V5LVx1MDAzZWtleSksIGxpbmtfaWQsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBmYWxzZSk7XG4gXG4gXHRcdGlmIChJU19FUlIoa2V5KSlcbiBcdFx0XHRjb250aW51ZTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9kMy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vZDMuY1xuaW5kZXggNmIxMWZhMzJlYTVjNi4uYmQ1MmYyZWJkM2JhMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL2QzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL2QzLmNcbkBAIC0xODg3LDcgJiM0MzsxODg3LDggQEAgc3RhdGljIGJvb2wgaXdsX212bV9ndGtfcmVrZXkoc3RydWN0IGl3bF93b3dsYW5fc3RhdHVzX2RhdGEgKnN0YXR1cyxcbiBcbiBcdFx0a2V5ID0gaWVlZTgwMjExX2d0a19yZWtleV9hZGQodmlmLCBzdGF0dXMtXHUwMDNlZ3RrW2ldLmlkLFxuIFx0XHRcdFx0XHQgICAgICBzdGF0dXMtXHUwMDNlZ3RrW2ldLmtleSxcbi1cdFx0XHRcdFx0ICAgICAgc2l6ZW9mKHN0YXR1cy1cdTAwM2VndGtbaV0ua2V5KSwgLTEpO1xuJiM0MztcdFx0XHRcdFx0ICAgICAgc2l6ZW9mKHN0YXR1cy1cdTAwM2VndGtbaV0ua2V5KSwgLTEsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBmYWxzZSk7XG4gXHRcdGlmIChJU19FUlIoa2V5KSkge1xuIFx0XHRcdC8qIEZXIG1heSBzZW5kIGFsc28gdGhlIG9sZCBrZXlzICovXG4gXHRcdFx0aWYgKFBUUl9FUlIoa2V5KSA9PSAtRUFMUkVBRFkpXG5AQCAtMTkyMiw3ICYjNDM7MTkyMyw4IEBAIGl3bF9tdm1fZDNfaWd0a19iaWd0a19yZWtleV9hZGQoc3RydWN0IGl3bF93b3dsYW5fc3RhdHVzX2RhdGEgKnN0YXR1cyxcbiBcdFx0cmV0dXJuIHRydWU7XG4gXG4gXHRrZXlfY29uZmlnID0gaWVlZTgwMjExX2d0a19yZWtleV9hZGQodmlmLCBrZXlpZHgsIGtleV9kYXRhLVx1MDAzZWtleSxcbi1cdFx0XHRcdFx0ICAgICBzaXplb2Yoa2V5X2RhdGEtXHUwMDNla2V5KSwgLTEpO1xuJiM0MztcdFx0XHRcdFx0ICAgICBzaXplb2Yoa2V5X2RhdGEtXHUwMDNla2V5KSwgLTEsXG4mIzQzO1x0XHRcdFx0XHQgICAgIGZhbHNlKTtcbiBcdGlmIChJU19FUlIoa2V5X2NvbmZpZykpIHtcbiBcdFx0LyogRlcgbWF5IHNlbmQgYWxzbyB0aGUgb2xkIGtleXMgKi9cbiBcdFx0cmV0dXJuIFBUUl9FUlIoa2V5X2NvbmZpZykgPT0gLUVBTFJFQURZO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvY2ZnLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2NmZy5jXG5pbmRleCA3MmM5MmY3MjQ2OWRlLi5lMDE1Y2ZhMTk1MGMxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9jZmcuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9jZmcuY1xuQEAgLTE1MDgsNyAmIzQzOzE1MDgsOCBAQCBzdGF0aWMgaW50IGxic19jZmdfc2V0X2RlZmF1bHRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksXG4gXG4gXG4gc3RhdGljIGludCBsYnNfY2ZnX2FkZF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldixcbi1cdFx0XHQgICBpbnQgbGlua19pZCwgdTggaWR4LCBib29sIHBhaXJ3aXNlLFxuJiM0MztcdFx0XHQgICBpbnQgbGlua19pZCwgdTggaWR4LFxuJiM0MztcdFx0XHQgICBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSxcbiBcdFx0XHQgICBjb25zdCB1OCAqbWFjX2FkZHIsIHN0cnVjdCBrZXlfcGFyYW1zICpwYXJhbXMpXG4ge1xuIFx0c3RydWN0IGxic19wcml2YXRlICpwcml2ID0gd2lwaHlfcHJpdih3aXBoeSk7XG5AQCAtMTU2OSw3ICYjNDM7MTU3MCw4IEBAIHN0YXRpYyBpbnQgbGJzX2NmZ19hZGRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4gXG4gXG4gc3RhdGljIGludCBsYnNfY2ZnX2RlbF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldixcbi1cdFx0XHQgICBpbnQgbGlua19pZCwgdTgga2V5X2luZGV4LCBib29sIHBhaXJ3aXNlLFxuJiM0MztcdFx0XHQgICBpbnQgbGlua19pZCwgdTgga2V5X2luZGV4LFxuJiM0MztcdFx0XHQgICBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSxcbiBcdFx0XHQgICBjb25zdCB1OCAqbWFjX2FkZHIpXG4ge1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9jZmc4MDIxMS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L2NmZzgwMjExLmNcbmluZGV4IDhlYzJkMjJhOGMzM2EuLjA2MGMzNTFjZWNjMDYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvY2ZnODAyMTEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L2NmZzgwMjExLmNcbkBAIC0xNDIsMTIgJiM0MzsxNDIsMTQgQEAgc3RhdGljIHZvaWQgKm13aWZpZXhfY2ZnODAyMTFfZ2V0X2FkYXB0ZXIoc3RydWN0IHdpcGh5ICp3aXBoeSlcbiAgKi9cbiBzdGF0aWMgaW50XG4gbXdpZmlleF9jZmc4MDIxMV9kZWxfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4tXHRcdFx0IGludCBsaW5rX2lkLCB1OCBrZXlfaW5kZXgsIGJvb2wgcGFpcndpc2UsXG4mIzQzO1x0XHRcdCBpbnQgbGlua19pZCwgdTgga2V5X2luZGV4LFxuJiM0MztcdFx0XHRlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSxcbiBcdFx0XHQgY29uc3QgdTggKm1hY19hZGRyKVxuIHtcbiBcdHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYgPSBtd2lmaWV4X25ldGRldl9nZXRfcHJpdih3ZGV2LVx1MDAzZW5ldGRldik7XG4gXHRzdGF0aWMgY29uc3QgdTggYmNfbWFjW10gPSB7MHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZn07XG4tXHRjb25zdCB1OCAqcGVlcl9tYWMgPSBwYWlyd2lzZSA/IG1hY19hZGRyIDogYmNfbWFjO1xuJiM0MztcdGNvbnN0IHU4ICpwZWVyX21hYyA9XG4mIzQzO1x0XHQodHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0UpID8gbWFjX2FkZHIgOiBiY19tYWM7XG4gXG4gXHRpZiAobXdpZmlleF9zZXRfZW5jb2RlKHByaXYsIE5VTEwsIE5VTEwsIDAsIGtleV9pbmRleCwgcGVlcl9tYWMsIDEpKSB7XG4gXHRcdG13aWZpZXhfZGJnKHByaXYtXHUwMDNlYWRhcHRlciwgRVJST1IsIFwmIzM0O2RlbGV0aW5nIHRoZSBjcnlwdG8ga2V5c1xcblwmIzM0Oyk7XG5AQCAtNDgyLDEzICYjNDM7NDg0LDE1IEBAIG13aWZpZXhfY2ZnODAyMTFfc2V0X2RlZmF1bHRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gICovXG4gc3RhdGljIGludFxuIG13aWZpZXhfY2ZnODAyMTFfYWRkX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuLVx0XHRcdCBpbnQgbGlua19pZCwgdTgga2V5X2luZGV4LCBib29sIHBhaXJ3aXNlLFxuJiM0MztcdFx0XHQgaW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCxcbiYjNDM7XHRcdFx0IGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLFxuIFx0XHRcdCBjb25zdCB1OCAqbWFjX2FkZHIsIHN0cnVjdCBrZXlfcGFyYW1zICpwYXJhbXMpXG4ge1xuIFx0c3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiA9IG13aWZpZXhfbmV0ZGV2X2dldF9wcml2KHdkZXYtXHUwMDNlbmV0ZGV2KTtcbiBcdHN0cnVjdCBtd2lmaWV4X3dlcF9rZXkgKndlcF9rZXk7XG4gXHRzdGF0aWMgY29uc3QgdTggYmNfbWFjW10gPSB7MHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZn07XG4tXHRjb25zdCB1OCAqcGVlcl9tYWMgPSBwYWlyd2lzZSA/IG1hY19hZGRyIDogYmNfbWFjO1xuJiM0MztcdGNvbnN0IHU4ICpwZWVyX21hYyA9XG4mIzQzO1x0XHQodHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0UpID8gbWFjX2FkZHIgOiBiY19tYWM7XG4gXG4gXHRpZiAoR0VUX0JTU19ST0xFKHByaXYpID09IE1XSUZJRVhfQlNTX1JPTEVfVUFQIFx1MDAyNlx1MDAyNlxuIFx0ICAgIChwYXJhbXMtXHUwMDNlY2lwaGVyID09IFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDQwIHx8XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWljcm9jaGlwL3dpbGMxMDAwL2NmZzgwMjExLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9taWNyb2NoaXAvd2lsYzEwMDAvY2ZnODAyMTEuY1xuaW5kZXggNjY1NGZjZTRkZWQ4NC4uNzg1MGUwYTQ4MzkwNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21pY3JvY2hpcC93aWxjMTAwMC9jZmc4MDIxMS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9taWNyb2NoaXAvd2lsYzEwMDAvY2ZnODAyMTEuY1xuQEAgLTUzNSwxMCAmIzQzOzUzNSwxMyBAQCBzdGF0aWMgaW50IHdpbGNfd2ZpX2NmZ19jb3B5X3dwYV9pbmZvKHN0cnVjdCB3aWxjX3dmaV9rZXkgKmtleV9pbmZvLFxuIH1cbiBcbiBzdGF0aWMgaW50IGFkZF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwgaW50IGxpbmtfaWQsXG4tXHRcdCAgIHU4IGtleV9pbmRleCwgYm9vbCBwYWlyd2lzZSwgY29uc3QgdTggKm1hY19hZGRyLFxuJiM0MztcdFx0ICAgdTgga2V5X2luZGV4LFxuJiM0MztcdFx0ICAgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsXG4mIzQzO1x0XHQgICBjb25zdCB1OCAqbWFjX2FkZHIsXG4gXHRcdCAgIHN0cnVjdCBrZXlfcGFyYW1zICpwYXJhbXMpXG4gXG4ge1xuJiM0MztcdGJvb2wgcGFpcndpc2UgPSB0eXBlID09IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRTtcbiBcdGludCByZXQgPSAwLCBrZXlsZW4gPSBwYXJhbXMtXHUwMDNla2V5X2xlbjtcbiBcdGNvbnN0IHU4ICpyeF9taWMgPSBOVUxMO1xuIFx0Y29uc3QgdTggKnR4X21pYyA9IE5VTEw7XG5AQCAtNjQxLDkgJiM0Mzs2NDQsMTAgQEAgc3RhdGljIGludCBhZGRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsIGludCBsaW5rX2lkLFxuIFxuIHN0YXRpYyBpbnQgZGVsX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LCBpbnQgbGlua19pZCxcbiBcdFx0ICAgdTgga2V5X2luZGV4LFxuLVx0XHQgICBib29sIHBhaXJ3aXNlLFxuJiM0MztcdFx0ICAgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsXG4gXHRcdCAgIGNvbnN0IHU4ICptYWNfYWRkcilcbiB7XG4mIzQzO1x0Ym9vbCBwYWlyd2lzZSA9IHR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFO1xuIFx0c3RydWN0IHdpbGNfdmlmICp2aWYgPSBuZXRkZXZfcHJpdih3ZGV2LVx1MDAzZW5ldGRldik7XG4gXHRzdHJ1Y3Qgd2lsY19wcml2ICpwcml2ID0gXHUwMDI2dmlmLVx1MDAzZXByaXY7XG4gXG5AQCAtNjgxLDEwICYjNDM7Njg1LDExIEBAIHN0YXRpYyBpbnQgZGVsX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LCBpbnQgbGlua19pZCxcbiB9XG4gXG4gc3RhdGljIGludCBnZXRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsIGludCBsaW5rX2lkLFxuLVx0XHQgICB1OCBrZXlfaW5kZXgsIGJvb2wgcGFpcndpc2UsIGNvbnN0IHU4ICptYWNfYWRkcixcbi1cdFx0ICAgdm9pZCAqY29va2llLFxuJiM0MztcdFx0ICAgdTgga2V5X2luZGV4LCBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSxcbiYjNDM7XHRcdCAgIGNvbnN0IHU4ICptYWNfYWRkciwgdm9pZCAqY29va2llLFxuIFx0XHQgICB2b2lkICgqY2FsbGJhY2spKHZvaWQgKmNvb2tpZSwgc3RydWN0IGtleV9wYXJhbXMgKikpXG4ge1xuJiM0MztcdGJvb2wgcGFpcndpc2UgPSB0eXBlID09IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRTtcbiBcdHN0cnVjdCB3aWxjX3ZpZiAqdmlmID0gbmV0ZGV2X3ByaXYod2Rldi1cdTAwM2VuZXRkZXYpO1xuIFx0c3RydWN0IHdpbGNfcHJpdiAqcHJpdiA9IFx1MDAyNnZpZi1cdTAwM2Vwcml2O1xuIFx0c3RydWN0ICBrZXlfcGFyYW1zIGtleV9wYXJhbXM7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvY2ZnODAyMTEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL2NmZzgwMjExLmNcbmluZGV4IDRmOWUyMGY3MjgxMTQuLjA4YjZkYjE0NzQ1MmMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9jZmc4MDIxMS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9jZmc4MDIxMS5jXG5AQCAtOTksMTIgJiM0Mzs5OSwxNCBAQCBzdGF0aWMgdm9pZCAqbnhwd2lmaV9jZmc4MDIxMV9nZXRfYWRhcHRlcihzdHJ1Y3Qgd2lwaHkgKndpcGh5KVxuIC8qIGNmZzgwMjExIG9wZXJhdGlvbiBoYW5kbGVyIHRvIGRlbGV0ZSBhIG5ldHdvcmsga2V5LiAqL1xuIHN0YXRpYyBpbnRcbiBueHB3aWZpX2NmZzgwMjExX2RlbF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldixcbi1cdFx0XHQgaW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCwgYm9vbCBwYWlyd2lzZSxcbiYjNDM7XHRcdFx0IGludCBsaW5rX2lkLCB1OCBrZXlfaW5kZXgsXG4mIzQzO1x0XHRcdCBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSxcbiBcdFx0XHQgY29uc3QgdTggKm1hY19hZGRyKVxuIHtcbiBcdHN0cnVjdCBueHB3aWZpX3ByaXZhdGUgKnByaXYgPSBueHB3aWZpX25ldGRldl9nZXRfcHJpdih3ZGV2LVx1MDAzZW5ldGRldik7XG4gXHRzdGF0aWMgY29uc3QgdTggYmNfbWFjW10gPSB7MHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZn07XG4tXHRjb25zdCB1OCAqcGVlcl9tYWMgPSBwYWlyd2lzZSA/IG1hY19hZGRyIDogYmNfbWFjO1xuJiM0MztcdGNvbnN0IHU4ICpwZWVyX21hYyA9XG4mIzQzO1x0XHQodHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0UpID8gbWFjX2FkZHIgOiBiY19tYWM7XG4gXHRpbnQgcmV0O1xuIFxuIFx0cmV0ID0gbnhwd2lmaV9zZXRfZW5jb2RlKHByaXYsIE5VTEwsIE5VTEwsIDAsIGtleV9pbmRleCwgcGVlcl9tYWMsIDEpO1xuQEAgLTQyOCw3ICYjNDM7NDMwLDggQEAgbnhwd2lmaV9jZmc4MDIxMV9zZXRfZGVmYXVsdF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiAvKiBjZmc4MDIxMSBoYW5kbGVyIGZvciBhZGRpbmcgYW4gODAyLjExIGVuY3J5cHRpb24ga2V5LiAqL1xuIHN0YXRpYyBpbnRcbiBueHB3aWZpX2NmZzgwMjExX2FkZF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldixcbi1cdFx0XHQgaW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCwgYm9vbCBwYWlyd2lzZSxcbiYjNDM7XHRcdFx0IGludCBsaW5rX2lkLCB1OCBrZXlfaW5kZXgsXG4mIzQzO1x0XHRcdCBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSxcbiBcdFx0XHQgY29uc3QgdTggKm1hY19hZGRyLCBzdHJ1Y3Qga2V5X3BhcmFtcyAqcGFyYW1zKVxuIHtcbiBcdHN0cnVjdCBueHB3aWZpX3ByaXZhdGUgKnByaXYgPSBueHB3aWZpX25ldGRldl9nZXRfcHJpdih3ZGV2LVx1MDAzZW5ldGRldik7XG5AQCAtNDM4LDcgJiM0Mzs0NDEsNyBAQCBueHB3aWZpX2NmZzgwMjExX2FkZF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcbiBcdGludCByZXQ7XG4gXG4gXHRldGhfYnJvYWRjYXN0X2FkZHIoYmNfbWFjKTtcbi1cdHBlZXJfbWFjID0gcGFpcndpc2UgPyBtYWNfYWRkciA6IGJjX21hYztcbiYjNDM7XHRwZWVyX21hYyA9ICh0eXBlID09IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRSkgPyBtYWNfYWRkciA6IGJjX21hYztcbiBcbiBcdGlmIChHRVRfQlNTX1JPTEUocHJpdikgPT0gTlhQV0lGSV9CU1NfUk9MRV9VQVAgXHUwMDI2XHUwMDI2XG4gXHQgICAgKHBhcmFtcy1cdTAwM2VjaXBoZXIgPT0gV0xBTl9DSVBIRVJfU1VJVEVfV0VQNDAgfHxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9xdWFudGVubmEvcXRuZm1hYy9jZmc4MDIxMS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcXVhbnRlbm5hL3F0bmZtYWMvY2ZnODAyMTEuY1xuaW5kZXggOWU0NGM4NWQyMDUxYy4uMzg2MjUzNDIxNjlmZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3F1YW50ZW5uYS9xdG5mbWFjL2NmZzgwMjExLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3F1YW50ZW5uYS9xdG5mbWFjL2NmZzgwMjExLmNcbkBAIC01MzMsMTAgJiM0Mzs1MzMsMTIgQEAgcXRuZl9kdW1wX3N0YXRpb24oc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcbiB9XG4gXG4gc3RhdGljIGludCBxdG5mX2FkZF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldixcbi1cdFx0XHRpbnQgbGlua19pZCwgdTgga2V5X2luZGV4LCBib29sIHBhaXJ3aXNlLFxuJiM0MztcdFx0XHRpbnQgbGlua19pZCwgdTgga2V5X2luZGV4LFxuJiM0MztcdFx0XHRlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSxcbiBcdFx0XHRjb25zdCB1OCAqbWFjX2FkZHIsIHN0cnVjdCBrZXlfcGFyYW1zICpwYXJhbXMpXG4ge1xuIFx0c3RydWN0IHF0bmZfdmlmICp2aWYgPSBxdG5mX25ldGRldl9nZXRfcHJpdih3ZGV2LVx1MDAzZW5ldGRldik7XG4mIzQzO1x0Ym9vbCBwYWlyd2lzZSA9IHR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFO1xuIFx0aW50IHJldDtcbiBcbiBcdHJldCA9IHF0bmZfY21kX3NlbmRfYWRkX2tleSh2aWYsIGtleV9pbmRleCwgcGFpcndpc2UsIG1hY19hZGRyLCBwYXJhbXMpO1xuQEAgLTU0OSwxMCAmIzQzOzU1MSwxMiBAQCBzdGF0aWMgaW50IHF0bmZfYWRkX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuIH1cbiBcbiBzdGF0aWMgaW50IHF0bmZfZGVsX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuLVx0XHRcdGludCBsaW5rX2lkLCB1OCBrZXlfaW5kZXgsIGJvb2wgcGFpcndpc2UsXG4mIzQzO1x0XHRcdGludCBsaW5rX2lkLCB1OCBrZXlfaW5kZXgsXG4mIzQzO1x0XHRcdGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLFxuIFx0XHRcdGNvbnN0IHU4ICptYWNfYWRkcilcbiB7XG4gXHRzdHJ1Y3QgcXRuZl92aWYgKnZpZiA9IHF0bmZfbmV0ZGV2X2dldF9wcml2KHdkZXYtXHUwMDNlbmV0ZGV2KTtcbiYjNDM7XHRib29sIHBhaXJ3aXNlID0gdHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0U7XG4gXHRpbnQgcmV0O1xuIFxuIFx0cmV0ID0gcXRuZl9jbWRfc2VuZF9kZWxfa2V5KHZpZiwga2V5X2luZGV4LCBwYWlyd2lzZSwgbWFjX2FkZHIpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvd293LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg5L3dvdy5jXG5pbmRleCA4ZGFkZDhkZjRmYzY1Li5jOGUwMDIyMzhlY2IyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OS93b3cuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OS93b3cuY1xuQEAgLTY2OSwxMCAmIzQzOzY2OSwxMiBAQCBzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqcnR3ODlfd293X2d0a19yZWtleShzdHJ1Y3QgcnR3ODlfZGV2ICpydHdkZXYsXG4gXHRpZiAoaWVlZTgwMjExX3ZpZl9pc19tbGQod293X3ZpZikpXG4gXHRcdGtleSA9IGllZWU4MDIxMV9ndGtfcmVrZXlfYWRkKHdvd192aWYsIGtleWlkeCwgZ3RrLFxuIFx0XHRcdFx0XHQgICAgICBjaXBoZXJfaW5mby1cdTAwM2VsZW4sXG4tXHRcdFx0XHRcdCAgICAgIHJ0d3ZpZl9saW5rLVx1MDAzZWxpbmtfaWQpO1xuJiM0MztcdFx0XHRcdFx0ICAgICAgcnR3dmlmX2xpbmstXHUwMDNlbGlua19pZCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIGZhbHNlKTtcbiBcdGVsc2VcbiBcdFx0a2V5ID0gaWVlZTgwMjExX2d0a19yZWtleV9hZGQod293X3ZpZiwga2V5aWR4LCBndGssXG4tXHRcdFx0XHRcdCAgICAgIGNpcGhlcl9pbmZvLVx1MDAzZWxlbiwgLTEpO1xuJiM0MztcdFx0XHRcdFx0ICAgICAgY2lwaGVyX2luZm8tXHUwMDNlbGVuLCAtMSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIGZhbHNlKTtcbiBcbiBcdGtmcmVlKHJla2V5X2NvbmYpO1xuIFx0aWYgKElTX0VSUihrZXkpKSB7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uY1xuaW5kZXggMDJiNmQ4MWNjY2QxMS4uMWNjMzIyYWE4OThkZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uY1xuQEAgLTU2NjgsNiAmIzQzOzU2NjgsOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHdpcGh5X2lmdHlwZV9leHRfY2FwYWIgbWFjODAyMTFfaHdzaW1faWZ0eXBlc19leHRfY2FwYVtdID0ge1xuIFx0XHQuZW1sX2NhcGFiaWxpdGllcyA9IElFRUU4MDIxMV9FTUxfQ0FQX0VNTFNSX1NVUFAgfFxuIFx0XHRcdFx0ICAgIElFRUU4MDIxMV9FTUxfQ0FQX0VNTE1SX1NVUFBPUlQsXG4gXHRcdC5tbGRfY2FwYV9hbmRfb3BzID0gTUFDODAyMTFfSFdTSU1fTUxEX0NBUEFfT1BTLFxuJiM0MztcdFx0LyogQ0lQIHdvcmtzIGFzIGh3c2ltIGRvZXMgbm90IGhhdmUgY29udHJvbCBmcmFtZXMgKi9cbiYjNDM7XHRcdC5jaXBfc3VwcG9ydGVkID0gdHJ1ZSxcbiYjNDM7XHRcdC5jaXBfY2FwYWJpbGl0aWVzID0gMCxcbiBcdH0sXG4gfTtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2llZWU4MDIxMS5oIGIvaW5jbHVkZS9saW51eC9pZWVlODAyMTEuaFxuaW5kZXggMjZlNjc0MDM4ODY1NC4uMTZkNzhmZDYxYzIyMyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvaWVlZTgwMjExLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvaWVlZTgwMjExLmhcbkBAIC0xODI4LDYgJiM0MzsxODI4LDcgQEAgZW51bSBpZWVlODAyMTFfZWlkX2V4dCB7XG4gXHRXTEFOX0VJRF9FWFRfQkFORFdJRFRIX0lORElDQVRJT04gPSAxMzUsXG4gXHRXTEFOX0VJRF9FWFRfS05PV05fU1RBX0lERU5USUZDQVRJT04gPSAxMzYsXG4gXHRXTEFOX0VJRF9FWFRfTk9OX0FQX1NUQV9SRUdfQ09OID0gMTM3LFxuJiM0MztcdFdMQU5fRUlEX0VYVF9DSVBfQ0FQQSA9IDE1MCxcbiBcdFdMQU5fRUlEX0VYVF9VSFJfT1BFUiA9IDE1MSxcbiBcdFdMQU5fRUlEX0VYVF9VSFJfQ0FQQSA9IDE1MixcbiBcdFdMQU5fRUlEX0VYVF9NQUNQID0gMTUzLFxuQEAgLTI5MDAsNCAmIzQzOzI5MDEsMTYgQEAgc3RhdGljIGlubGluZSBib29sIGllZWU4MDIxMV9jaGVja190aW0oY29uc3Qgc3RydWN0IGllZWU4MDIxMV90aW1faWUgKnRpbSxcbiBcdFx0ICAgICBfX2llZWU4MDIxMV9jaGVja190aW0odGltLCB0aW1fbGVuLCBhaWQpO1xuIH1cbiBcbiYjNDM7LyogVGhlIE1JQyBwYWRkaW5nIHN1YmZpZWxkIGluIHRoZSBDSVAgY2FwYWJpbGl0aWVzICovXG4mIzQzOyNkZWZpbmUgV0xBTl9DSVBfQ0FQQV9NSUNfUEFERElOR1x0MHgwRlxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHN0cnVjdCBpZWVlODAyMTFfY2lwX2NhcCAtIENJUCBDYXBhYmlsaXRpZXMgZWxlbWVudFxuJiM0MzsgKlxuJiM0MzsgKiBAdjogVGhlIHZhbHVlIG9mIHRoZSBDb250cm9sIEludGVncml0eSBQcm90b2NvbCBDYXBhYmlsaXR5IGVsZW1lbnRcbiYjNDM7ICovXG4mIzQzO3N0cnVjdCBpZWVlODAyMTFfY2lwX2NhcCB7XG4mIzQzO1x0dTggdjtcbiYjNDM7fSBfX3BhY2tlZDtcbiYjNDM7XG4gI2VuZGlmIC8qIExJTlVYX0lFRUU4MDIxMV9IICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaCBiL2luY2x1ZGUvbmV0L2NmZzgwMjExLmhcbmluZGV4IGRjYmIwZTU1YzMyZWMuLmI1ZDk4YmEwNzIzOWIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9jZmc4MDIxMS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9jZmc4MDIxMS5oXG5AQCAtMTgyMSw2ICYjNDM7MTgyMSw4IEBAIHN0cnVjdCBzdGFfdHhwd3Ige1xuICAqIEBzMWdfY2FwYTogUzFHIGNhcGFiaWxpdGllcyBvZiBzdGF0aW9uXG4gICogQHVocl9jYXBhOiBVSFIgY2FwYWJpbGl0aWVzIG9mIHRoZSBzdGF0aW9uXG4gICogQHVocl9jYXBhX2xlbjogdGhlIGxlbmd0aCBvZiB0aGUgVUhSIGNhcGFiaWxpdGllc1xuJiM0MzsgKiBAY2lwX2NhcF9zZXQ6IElmIENJUCBjYXBhYmlsaXRpZXMgYXJlIHByZXNlbnQsIHJlcXVpcmVkIGZvciBDSVAgc3RhdGlvbnNcbiYjNDM7ICogQGNpcF9jYXA6IENJUCBjYXBhYmlsaXRpZXMgb2Ygc3RhdGlvblxuICAqL1xuIHN0cnVjdCBsaW5rX3N0YXRpb25fcGFyYW1ldGVycyB7XG4gXHRjb25zdCB1OCAqbWxkX21hYztcbkBAIC0xODQyLDYgJiM0MzsxODQ0LDggQEAgc3RydWN0IGxpbmtfc3RhdGlvbl9wYXJhbWV0ZXJzIHtcbiBcdGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfczFnX2NhcCAqczFnX2NhcGE7XG4gXHRjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3Vocl9jYXAgKnVocl9jYXBhO1xuIFx0dTggdWhyX2NhcGFfbGVuO1xuJiM0MztcdGJvb2wgY2lwX2NhcF9zZXQ7XG4mIzQzO1x0dTggY2lwX2NhcDtcbiB9O1xuIFxuIC8qKlxuQEAgLTM0MDIsNiAmIzQzOzM0MDYsNyBAQCBzdHJ1Y3QgY2ZnODAyMTFfbWxfcmVjb25mX3JlcSB7XG4gICpcdGZsYWcgaXMgbm90IHNldC5cbiAgKiBAQVNTT0NfUkVRX1NQUF9BTVNEVTogU1BQIEEtTVNEVXMgd2lsbCBiZSB1c2VkIG9uIHRoaXMgY29ubmVjdGlvbiAoaWYgYW55KVxuICAqIEBBU1NPQ19SRVFfRElTQUJMRV9VSFI6IERpc2FibGUgVUhSXG4mIzQzOyAqIEBBU1NPQ19SRVFfQ0lQOiBFbmFibGUgQ29udHJvbCBJbnRlZ3JpdHkgUHJvdG9jb2xcbiAgKi9cbiBlbnVtIGNmZzgwMjExX2Fzc29jX3JlcV9mbGFncyB7XG4gXHRBU1NPQ19SRVFfRElTQUJMRV9IVFx0XHRcdD0gQklUKDApLFxuQEAgLTM0MTMsNiAmIzQzOzM0MTgsNyBAQCBlbnVtIGNmZzgwMjExX2Fzc29jX3JlcV9mbGFncyB7XG4gXHRDT05ORUNUX1JFUV9NTE9fU1VQUE9SVFx0XHRcdD0gQklUKDYpLFxuIFx0QVNTT0NfUkVRX1NQUF9BTVNEVVx0XHRcdD0gQklUKDcpLFxuIFx0QVNTT0NfUkVRX0RJU0FCTEVfVUhSXHRcdFx0PSBCSVQoOCksXG4mIzQzO1x0QVNTT0NfUkVRX0NJUFx0XHRcdFx0PSBCSVQoOSksXG4gfTtcbiBcbiAvKipcbkBAIC01MzAwLDE0ICYjNDM7NTMwNiwxNyBAQCBzdHJ1Y3QgY2ZnODAyMTFfb3BzIHtcbiBcdFx0XHRcdCB1bnNpZ25lZCBpbnQgbGlua19pZCk7XG4gXG4gXHRpbnRcdCgqYWRkX2tleSkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldixcbi1cdFx0XHQgICBpbnQgbGlua19pZCwgdTgga2V5X2luZGV4LCBib29sIHBhaXJ3aXNlLFxuJiM0MztcdFx0XHQgICBpbnQgbGlua19pZCwgdTgga2V5X2luZGV4LFxuJiM0MztcdFx0XHQgICBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSxcbiBcdFx0XHQgICBjb25zdCB1OCAqbWFjX2FkZHIsIHN0cnVjdCBrZXlfcGFyYW1zICpwYXJhbXMpO1xuIFx0aW50XHQoKmdldF9rZXkpKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4tXHRcdFx0ICAgaW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCwgYm9vbCBwYWlyd2lzZSxcbiYjNDM7XHRcdFx0ICAgaW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCxcbiYjNDM7XHRcdFx0ICAgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsXG4gXHRcdFx0ICAgY29uc3QgdTggKm1hY19hZGRyLCB2b2lkICpjb29raWUsXG4gXHRcdFx0ICAgdm9pZCAoKmNhbGxiYWNrKSh2b2lkICpjb29raWUsIHN0cnVjdCBrZXlfcGFyYW1zKikpO1xuIFx0aW50XHQoKmRlbF9rZXkpKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4tXHRcdFx0ICAgaW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCwgYm9vbCBwYWlyd2lzZSxcbiYjNDM7XHRcdFx0ICAgaW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCxcbiYjNDM7XHRcdFx0ICAgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsXG4gXHRcdFx0ICAgY29uc3QgdTggKm1hY19hZGRyKTtcbiBcdGludFx0KCpzZXRfZGVmYXVsdF9rZXkpKHN0cnVjdCB3aXBoeSAqd2lwaHksXG4gXHRcdFx0XHQgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgbGlua19pZCxcbkBAIC02MDQxLDYgJiM0Mzs2MDUwLDggQEAgc3RydWN0IHdpcGh5X3ZlbmRvcl9jb21tYW5kIHtcbiAgKiBAZW1sX2NhcGFiaWxpdGllczogRU1MIGNhcGFiaWxpdGllcyAoZm9yIE1MTylcbiAgKiBAbWxkX2NhcGFfYW5kX29wczogTUxEIGNhcGFiaWxpdGllcyBhbmQgb3BlcmF0aW9ucyAoZm9yIE1MTylcbiAgKiBAZXh0X21sZF9jYXBhX2FuZF9vcHM6IEV4dGVuZGVkIE1MRCBjYXBhYmlsaXRpZXMgYW5kIG9wZXJhdGlvbnMgKGZvciBNTE8pXG4mIzQzOyAqIEBjaXBfc3VwcG9ydGVkOiBDSVAgaXMgc3VwcG9ydGVkIGFuZCB0aGUgY2FwYWJpbGl0aWVzIGFyZSB2YWxpZFxuJiM0MzsgKiBAY2lwX2NhcGFiaWxpdGllczogQ0lQIENhcGFiaWxpdGllcyBlbGVtZW50IGNvbnRhaW5pbmcgdGhlIE1JQyBwYWRkaW5nIGRlbGF5XG4gICovXG4gc3RydWN0IHdpcGh5X2lmdHlwZV9leHRfY2FwYWIge1xuIFx0ZW51bSBubDgwMjExX2lmdHlwZSBpZnR5cGU7XG5AQCAtNjA1MCw2ICYjNDM7NjA2MSw4IEBAIHN0cnVjdCB3aXBoeV9pZnR5cGVfZXh0X2NhcGFiIHtcbiBcdHUxNiBlbWxfY2FwYWJpbGl0aWVzO1xuIFx0dTE2IG1sZF9jYXBhX2FuZF9vcHM7XG4gXHR1MTYgZXh0X21sZF9jYXBhX2FuZF9vcHM7XG4mIzQzO1x0Ym9vbCBjaXBfc3VwcG9ydGVkO1xuJiM0MztcdHU4IGNpcF9jYXBhYmlsaXRpZXM7XG4gfTtcbiBcbiAvKipcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9tYWM4MDIxMS5oIGIvaW5jbHVkZS9uZXQvbWFjODAyMTEuaFxuaW5kZXggOWQxZmFjNmU4MDgyOS4uYWFlMTQwZmRjMmJiMSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L21hYzgwMjExLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L21hYzgwMjExLmhcbkBAIC0yMzk2LDYgJiM0MzsyMzk2LDggQEAgc3RhdGljIGlubGluZSBib29sIGxvY2tkZXBfdmlmX3dpcGh5X211dGV4X2hlbGQoc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZilcbiAgKlx0bnVtYmVyIGdlbmVyYXRpb24gb25seVxuICAqIEBJRUVFODAyMTFfS0VZX0ZMQUdfU1BQX0FNU0RVOiBTUFAgQS1NU0RVcyBjYW4gYmUgdXNlZCB3aXRoIHRoaXMga2V5XG4gICpcdChzZXQgYnkgbWFjODAyMTEgZnJvbSB0aGUgc3RhLVx1MDAzZXNwcF9hbXNkdSBmbGFnKVxuJiM0MzsgKiBASUVFRTgwMjExX0tFWV9GTEFHX0NJUDogVGhpcyBrZXkgaXMgdXNlZCBmb3IgdGhlIENvbnRyb2wgSW50ZWdyaXR5XG4mIzQzOyAqXHRQcm90b2NvbCwgYW5kIGlzIGVpdGhlciBhIHBhaXJ3aXNlIGtleSBvciBhIENJR1RLLlxuICAqL1xuIGVudW0gaWVlZTgwMjExX2tleV9mbGFncyB7XG4gXHRJRUVFODAyMTFfS0VZX0ZMQUdfR0VORVJBVEVfSVZfTUdNVFx0PSBCSVQoMCksXG5AQCAtMjQxMCw2ICYjNDM7MjQxMiw3IEBAIGVudW0gaWVlZTgwMjExX2tleV9mbGFncyB7XG4gXHRJRUVFODAyMTFfS0VZX0ZMQUdfTk9fQVVUT19UWFx0XHQ9IEJJVCg5KSxcbiBcdElFRUU4MDIxMV9LRVlfRkxBR19HRU5FUkFURV9NTUlFXHQ9IEJJVCgxMCksXG4gXHRJRUVFODAyMTFfS0VZX0ZMQUdfU1BQX0FNU0RVXHRcdD0gQklUKDExKSxcbiYjNDM7XHRJRUVFODAyMTFfS0VZX0ZMQUdfQ0lQXHRcdFx0PSBCSVQoMTIpLFxuIH07XG4gXG4gLyoqXG5AQCAtMjYzMCw2ICYjNDM7MjYzMyw4IEBAIHN0cnVjdCBpZWVlODAyMTFfc3RhX2FnZ3JlZ2F0ZXMge1xuICAqIEBlaHRfY2FwOiBFSFQgY2FwYWJpbGl0aWVzIG9mIHRoaXMgU1RBXG4gICogQHVocl9jYXA6IFVIUiBjYXBhYmlsaXRpZXMgb2YgdGhpcyBTVEFcbiAgKiBAczFnX2NhcDogUzFHIGNhcGFiaWxpdGllcyBvZiB0aGlzIFNUQVxuJiM0MzsgKiBAY2lwX21pY19wYWRkaW5nOiB0aGUgTUlDIHBhZGRpbmcgcmVxdWlyZWQgYnkgdGhlIFNUQSBhcyBkZWZpbmVkIGluIGl0c1xuJiM0MzsgKlx0Q0lQIENhcGFiaWxpdGllcyBlbGVtZW50XG4gICogQGFnZzogcGVyLWxpbmsgZGF0YSBmb3IgbXVsdGktbGluayBhZ2dyZWdhdGlvblxuICAqIEBiYW5kd2lkdGg6IGN1cnJlbnQgYmFuZHdpZHRoIHRoZSBzdGF0aW9uIGNhbiByZWNlaXZlIHdpdGguXG4gICpcdFRoaXMgaXMgdGhlIG1pbmltdW0gYmV0d2VlbiB0aGUgcGVlciYjMzk7cyBjYXBhYmlsaXRpZXMgYW5kIG91ciBvd25cbkBAIC0yNjU4LDYgJiM0MzsyNjYzLDcgQEAgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSB7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX3N0YV9laHRfY2FwIGVodF9jYXA7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX3N0YV91aHJfY2FwIHVocl9jYXA7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX3N0YV9zMWdfY2FwIHMxZ19jYXA7XG4mIzQzO1x0dTggY2lwX21pY19wYWRkaW5nO1xuIFxuIFx0c3RydWN0IGllZWU4MDIxMV9zdGFfYWdncmVnYXRlcyBhZ2c7XG4gXG5AQCAtMjcyMSw2ICYjNDM7MjcyNyw3IEBAIHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEge1xuICAqIEB2YWxpZF9saW5rczogYml0bWFwIG9mIHZhbGlkIGxpbmtzLCBvciAwIGZvciBub24tTUxPXG4gICogQHNwcF9hbXNkdTogaW5kaWNhdGVzIHdoZXRoZXIgdGhlIFNUQSB1c2VzIFNQUCBBLU1TRFUgb3Igbm90LlxuICAqIEBlcHBfcGVlcjogaW5kaWNhdGVzIHRoYXQgdGhlIHBlZXIgaXMgYW4gRVBQIHBlZXIuXG4mIzQzOyAqIEBjaXA6IGluZGljYXRlcyB3aGV0aGVyIHRoZSBTVEEgdXNlcyBjb250cm9sIGZyYW1lIHByb3RlY3Rpb24gb3Igbm90LlxuICAqIEBubWk6IEZvciBOREkgc3RhdGlvbnMsIHBvaW50ZXIgdG8gdGhlIE5NSSBzdGF0aW9uIG9mIHRoZSBwZWVyLlxuICAqIEBuYW5fc2NoZWQ6IE5BTiBwZWVyIHNjaGVkdWxlIGZvciB0aGlzIHN0YXRpb24uIFZhbGlkIG9ubHkgZm9yIE5NSSBzdGF0aW9ucy5cbiAgKiBAZXh0X21sZF9jYXBhX29wczogdGhlIE1MRCYjMzk7cyBleHRlbmRlZCBNTEQgY2FwYWJpbGl0aWVzIGFuZCBvcGVyYXRpb25zXG5AQCAtMjc0Miw2ICYjNDM7Mjc0OSw4IEBAIHN0cnVjdCBpZWVlODAyMTFfc3RhIHtcbiBcdHU4IG1heF9hbXNkdV9zdWJmcmFtZXM7XG4gXHR1MTYgZW1sX2NhcDtcbiBcbiYjNDM7XHRib29sIGNpcDtcbiYjNDM7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX3N0YV9hZ2dyZWdhdGVzICpjdXI7XG4gXG4gXHRib29sIHN1cHBvcnRfcDJwX3BzO1xuQEAgLTYyNzksNiAmIzQzOzYyODgsNyBAQCB2b2lkIGllZWU4MDIxMV9zZXRfa2V5X3J4X3NlcShzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXljb25mLFxuICAqIEBrZXlfbGVuOiB0aGUga2V5IGRhdGEuIE1pZ2h0IGJlIGJpZ2dlciB0aGFuIHRoZSBhY3R1YWwga2V5IGxlbmd0aCxcbiAgKlx0YnV0IG5vdCBzbWFsbGVyIChmb3IgdGhlIGRyaXZlciBjb252aW5lbmNlKVxuICAqIEBsaW5rX2lkOiB0aGUgbGluayBpZCBvZiB0aGUga2V5IG9yIC0xIGZvciBub24tTUxPXG4mIzQzOyAqIEBjaWd0azogd2hldGhlciB0aGlzIGlzIGEgQ0lHVEtcbiAgKlxuICAqIFdoZW4gR1RLIHJla2V5aW5nIHdhcyBkb25lIHdoaWxlIHRoZSBzeXN0ZW0gd2FzIHN1c3BlbmRlZCwgKGEpIG5ld1xuICAqIGtleShzKSB3aWxsIGJlIGF2YWlsYWJsZS4gVGhlc2Ugd2lsbCBiZSBuZWVkZWQgYnkgbWFjODAyMTEgZm9yIHByb3BlclxuQEAgLTYzMDUsNyAmIzQzOzYzMTUsNyBAQCB2b2lkIGllZWU4MDIxMV9zZXRfa2V5X3J4X3NlcShzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXljb25mLFxuIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKlxuIGllZWU4MDIxMV9ndGtfcmVrZXlfYWRkKHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXG4gXHRcdFx0dTggaWR4LCB1OCAqa2V5X2RhdGEsIHU4IGtleV9sZW4sXG4tXHRcdFx0aW50IGxpbmtfaWQpO1xuJiM0MztcdFx0XHRpbnQgbGlua19pZCwgYm9vbCBjaWd0ayk7XG4gXG4gLyoqXG4gICogaWVlZTgwMjExX2d0a19yZWtleV9ub3RpZnkgLSBub3RpZnkgdXNlcnNwYWNlIHN1cHBsaWNhbnQgb2YgcmVrZXlpbmdcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvbmw4MDIxMS5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L25sODAyMTEuaFxuaW5kZXggMDIwMzg3ZDc2NDEyMi4uM2U2ZTU5ZmI4ZTE3ZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9ubDgwMjExLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9ubDgwMjExLmhcbkBAIC0zMTg1LDYgJiM0MzszMTg1LDExIEBAIGVudW0gbmw4MDIxMV9jb21tYW5kcyB7XG4gICpcdFRoZSBhZ2dyZWdhdGVkIG1lc3NhZ2UgYWx3YXlzIHByZWNlZGVzIHRoZSBwZXItbGluayBtZXNzYWdlcyBmb3IgdGhlXG4gICpcdHNhbWUgc3RhdGlvbiB3aXRoaW4gYSBkdW1wIHNlcXVlbmNlLlxuICAqXG4mIzQzOyAqIEBOTDgwMjExX0FUVFJfQVNTT0NfQ0lQOiBFbmFibGUgQ29udHJvbCBJbnRlZ3JpdHkgUHJvdG9jb2wgZm9yIHRoZVxuJiM0MzsgKlx0YXNzb2NpYXRpb25cbiYjNDM7ICogQE5MODAyMTFfQVRUUl9DSVBfQ0FQQUJJTElUSUVTOiBUaGUgQ29udHJvbCBJbnRlZ3JpdHkgUHJvdG9jb2wgZm9yIHRoZVxuJiM0MzsgKlx0c3RhdGlvbi5cbiYjNDM7ICpcbiAgKiBATlVNX05MODAyMTFfQVRUUjogdG90YWwgbnVtYmVyIG9mIG5sODAyMTFfYXR0cnMgYXZhaWxhYmxlXG4gICogQE5MODAyMTFfQVRUUl9NQVg6IGhpZ2hlc3QgYXR0cmlidXRlIG51bWJlciBjdXJyZW50bHkgZGVmaW5lZFxuICAqIEBfX05MODAyMTFfQVRUUl9BRlRFUl9MQVNUOiBpbnRlcm5hbCB1c2VcbkBAIC0zMjgwLDYgJiM0MzszMjg1LDggQEAgZW51bSBubDgwMjExX2F0dHJzIHtcbiBcbiBcdE5MODAyMTFfQVRUUl9GUkVRX0ZJWEVELFxuIFxuJiM0MztcdE5MODAyMTFfQVRUUl9BU1NPQ19DSVAsXG4mIzQzO1x0Tkw4MDIxMV9BVFRSX0NJUF9DQVBBQklMSVRJRVMsXG4gXG4gXHROTDgwMjExX0FUVFJfV0lQSFlfUkVUUllfU0hPUlQsXG4gXHROTDgwMjExX0FUVFJfV0lQSFlfUkVUUllfTE9ORyxcbkBAIC0zOTM0LDYgJiM0MzszOTQxLDcgQEAgZW51bSBubDgwMjExX2lmdHlwZSB7XG4gICpcdHRoYXQgc3VwcG9ydCAlTkw4MDIxMV9GRUFUVVJFX0ZVTExfQVBfQ0xJRU5UX1NUQVRFIHRvIHRyYW5zaXRpb24gYVxuICAqXHRwcmV2aW91c2x5IGFkZGVkIHN0YXRpb24gaW50byBhc3NvY2lhdGVkIHN0YXRlXG4gICogQE5MODAyMTFfU1RBX0ZMQUdfU1BQX0FNU0RVOiBzdGF0aW9uIHN1cHBvcnRzIFNQUCBBLU1TRFVzXG4mIzQzOyAqIEBOTDgwMjExX1NUQV9GTEFHX0NJUDogc3RhdGlvbiBoYXMgQ29udHJvbCBJbnRlZ3JpdHkgUHJvdG9jb2wgKENJUCkgZW5hYmxlZFxuICAqIEBOTDgwMjExX1NUQV9GTEFHX01BWDogaGlnaGVzdCBzdGF0aW9uIGZsYWcgbnVtYmVyIGN1cnJlbnRseSBkZWZpbmVkXG4gICogQF9fTkw4MDIxMV9TVEFfRkxBR19BRlRFUl9MQVNUOiBpbnRlcm5hbCB1c2VcbiAgKi9cbkBAIC0zOTQ3LDYgJiM0MzszOTU1LDcgQEAgZW51bSBubDgwMjExX3N0YV9mbGFncyB7XG4gXHROTDgwMjExX1NUQV9GTEFHX1RETFNfUEVFUixcbiBcdE5MODAyMTFfU1RBX0ZMQUdfQVNTT0NJQVRFRCxcbiBcdE5MODAyMTFfU1RBX0ZMQUdfU1BQX0FNU0RVLFxuJiM0MztcdE5MODAyMTFfU1RBX0ZMQUdfQ0lQLFxuIFxuIFx0Lyoga2VlcCBsYXN0ICovXG4gXHRfX05MODAyMTFfU1RBX0ZMQUdfQUZURVJfTEFTVCxcbkBAIC01Nzc4LDEyICYjNDM7NTc4NywxNiBAQCBlbnVtIG5sODAyMTFfYXV0aF90eXBlIHtcbiAgKiBATkw4MDIxMV9LRVlUWVBFX0dST1VQOiBHcm91cCAoYnJvYWRjYXN0L211bHRpY2FzdCkga2V5XG4gICogQE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRTogUGFpcndpc2UgKHVuaWNhc3QvaW5kaXZpZHVhbCkga2V5XG4gICogQE5MODAyMTFfS0VZVFlQRV9QRUVSS0VZOiBQZWVyS2V5IChETFMpXG4mIzQzOyAqIEBOTDgwMjExX0tFWVRZUEVfQ0lHVEs6IENvbnRyb2wgSW50ZWdyaXR5IEdyb3VwIFRlbXBvcmFsIEtleVxuJiM0MzsgKlx0VGhlIGNpcGhlciBpcyBHTUFDLTI1NiBidXQgcGFzc2VkIGFzIEdDTVAtMjU2LFxuJiM0MzsgKlx0c2FtZSBhcyB0aGUgcGFpcndpc2Uga2V5IHdoZW4gdXNlZCBmb3IgQ0lQLlxuICAqIEBOVU1fTkw4MDIxMV9LRVlUWVBFUzogbnVtYmVyIG9mIGRlZmluZWQga2V5IHR5cGVzXG4gICovXG4gZW51bSBubDgwMjExX2tleV90eXBlIHtcbiBcdE5MODAyMTFfS0VZVFlQRV9HUk9VUCxcbiBcdE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRSxcbiBcdE5MODAyMTFfS0VZVFlQRV9QRUVSS0VZLFxuJiM0MztcdE5MODAyMTFfS0VZVFlQRV9DSUdUSyxcbiBcbiBcdE5VTV9OTDgwMjExX0tFWVRZUEVTXG4gfTtcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvY2ZnLmMgYi9uZXQvbWFjODAyMTEvY2ZnLmNcbmluZGV4IDBhOTI0N2JlMjZhZmEuLjNiZjgxNjI5Y2RlMzQgMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvY2ZnLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS9jZmcuY1xuQEAgLTYxMSwxMiAmIzQzOzYxMSwxNSBAQCBzdGF0aWMgaW50IGllZWU4MDIxMV9zZXRfdHgoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4gfVxuIFxuIHN0YXRpYyBpbnQgaWVlZTgwMjExX2FkZF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldixcbi1cdFx0XHQgICAgIGludCBsaW5rX2lkLCB1OCBrZXlfaWR4LCBib29sIHBhaXJ3aXNlLFxuJiM0MztcdFx0XHQgICAgIGludCBsaW5rX2lkLCB1OCBrZXlfaWR4LFxuJiM0MztcdFx0XHQgICAgIGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLFxuIFx0XHRcdCAgICAgY29uc3QgdTggKm1hY19hZGRyLCBzdHJ1Y3Qga2V5X3BhcmFtcyAqcGFyYW1zKVxuIHtcbiBcdHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX1dERVZfVE9fU1VCX0lGKHdkZXYpO1xuIFx0c3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbmsgPVxuIFx0XHRpZWVlODAyMTFfbGlua19vcl9kZWZsaW5rKHNkYXRhLCBsaW5rX2lkLCBmYWxzZSk7XG4mIzQzO1x0Ym9vbCBwYWlyd2lzZSA9IHR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFO1xuJiM0MztcdGJvb2wgY2lndGsgPSB0eXBlID09IE5MODAyMTFfS0VZVFlQRV9DSUdUSztcbiBcdHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtXHUwMDNlbG9jYWw7XG4gXHRzdHJ1Y3Qgc3RhX2luZm8gKnN0YSA9IE5VTEw7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5O1xuQEAgLTY2MCw2ICYjNDM7NjYzLDkgQEAgc3RhdGljIGludCBpZWVlODAyMTFfYWRkX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuIFx0XHRrZXktXHUwMDNlY29uZi5saW5rX2lkID0gLTE7XG4gXHR9IGVsc2Uge1xuIFx0XHRrZXktXHUwMDNlY29uZi5saW5rX2lkID0gbGluay1cdTAwM2VsaW5rX2lkO1xuJiM0MztcbiYjNDM7XHRcdGlmIChjaWd0aylcbiYjNDM7XHRcdFx0a2V5LVx1MDAzZWNvbmYuZmxhZ3MgfD0gSUVFRTgwMjExX0tFWV9GTEFHX0NJUDtcbiBcdH1cbiBcbiBcdGlmIChwYXJhbXMtXHUwMDNlbW9kZSA9PSBOTDgwMjExX0tFWV9OT19UWClcbkBAIC03MzcsMTAgJiM0Mzs3NDMsMTMgQEAgc3RhdGljIGludCBpZWVlODAyMTFfYWRkX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuIFxuIHN0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX2tleSAqXG4gaWVlZTgwMjExX2xvb2t1cF9rZXkoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGludCBsaW5rX2lkLFxuLVx0XHQgICAgIHU4IGtleV9pZHgsIGJvb2wgcGFpcndpc2UsIGNvbnN0IHU4ICptYWNfYWRkcilcbiYjNDM7XHRcdCAgICAgdTgga2V5X2lkeCwgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsXG4mIzQzO1x0XHQgICAgIGNvbnN0IHU4ICptYWNfYWRkcilcbiB7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCBfX21heWJlX3VudXNlZCA9IHNkYXRhLVx1MDAzZWxvY2FsO1xuIFx0c3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbmsgPSBcdTAwMjZzZGF0YS1cdTAwM2VkZWZsaW5rO1xuJiM0MztcdGJvb2wgcGFpcndpc2UgPSB0eXBlID09IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRTtcbiYjNDM7XHRib29sIGNpZ3RrID0gdHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfQ0lHVEs7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5O1xuIFxuIFx0aWYgKGxpbmtfaWQgXHUwMDNlPSAwKSB7XG5AQCAtNzcwLDcgJiM0Mzs3NzksMTEgQEAgaWVlZTgwMjExX2xvb2t1cF9rZXkoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGludCBsaW5rX2lkLFxuIFx0XHRcdHJldHVybiB3aXBoeV9kZXJlZmVyZW5jZShsb2NhbC1cdTAwM2Vody53aXBoeSxcbiBcdFx0XHRcdFx0XHQgc3RhLVx1MDAzZXB0a1trZXlfaWR4XSk7XG4gXG4tXHRcdGlmICghcGFpcndpc2UgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRpZiAoY2lndGsgXHUwMDI2XHUwMDI2IGtleV9pZHggXHUwMDNjIE5VTV9DVFJMX0tFWVMpXG4mIzQzO1x0XHRcdHJldHVybiB3aXBoeV9kZXJlZmVyZW5jZShsb2NhbC1cdTAwM2Vody53aXBoeSxcbiYjNDM7XHRcdFx0XHRcdFx0IGxpbmtfc3RhLVx1MDAzZWNpZ3RrW2tleV9pZHhdKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIXBhaXJ3aXNlIFx1MDAyNlx1MDAyNiAhY2lndGsgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICBrZXlfaWR4IFx1MDAzYyBOVU1fREVGQVVMVF9LRVlTICYjNDM7XG4gXHRcdFx0ICAgICAgTlVNX0RFRkFVTFRfTUdNVF9LRVlTICYjNDM7XG4gXHRcdFx0ICAgICAgTlVNX0RFRkFVTFRfQkVBQ09OX0tFWVMpXG5AQCAtNzgzLDYgJiM0Mzs3OTYsOSBAQCBpZWVlODAyMTFfbG9va3VwX2tleShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgaW50IGxpbmtfaWQsXG4gXHRpZiAocGFpcndpc2UgXHUwMDI2XHUwMDI2IGtleV9pZHggXHUwMDNjIE5VTV9ERUZBVUxUX0tFWVMpXG4gXHRcdHJldHVybiB3aXBoeV9kZXJlZmVyZW5jZShsb2NhbC1cdTAwM2Vody53aXBoeSwgc2RhdGEtXHUwMDNla2V5c1trZXlfaWR4XSk7XG4gXG4mIzQzO1x0aWYgKGNpZ3RrKVxuJiM0MztcdFx0cmV0dXJuIHdpcGh5X2RlcmVmZXJlbmNlKGxvY2FsLVx1MDAzZWh3LndpcGh5LCBsaW5rLVx1MDAzZWNpZ3RrW2tleV9pZHhdKTtcbiYjNDM7XG4gXHRrZXkgPSB3aXBoeV9kZXJlZmVyZW5jZShsb2NhbC1cdTAwM2Vody53aXBoeSwgbGluay1cdTAwM2VndGtba2V5X2lkeF0pO1xuIFx0aWYgKGtleSlcbiBcdFx0cmV0dXJuIGtleTtcbkBAIC03OTUsOCAmIzQzOzgxMSw4IEBAIGllZWU4MDIxMV9sb29rdXBfa2V5KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBpbnQgbGlua19pZCxcbiB9XG4gXG4gc3RhdGljIGludCBpZWVlODAyMTFfZGVsX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuLVx0XHRcdCAgICAgaW50IGxpbmtfaWQsIHU4IGtleV9pZHgsIGJvb2wgcGFpcndpc2UsXG4tXHRcdFx0ICAgICBjb25zdCB1OCAqbWFjX2FkZHIpXG4mIzQzO1x0XHRcdCAgICAgaW50IGxpbmtfaWQsIHU4IGtleV9pZHgsXG4mIzQzO1x0XHRcdCAgICAgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsIGNvbnN0IHU4ICptYWNfYWRkcilcbiB7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9XREVWX1RPX1NVQl9JRih3ZGV2KTtcbiBcdHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtXHUwMDNlbG9jYWw7XG5AQCAtODA0LDcgJiM0Mzs4MjAsNyBAQCBzdGF0aWMgaW50IGllZWU4MDIxMV9kZWxfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4gXG4gXHRsb2NrZGVwX2Fzc2VydF93aXBoeShsb2NhbC1cdTAwM2Vody53aXBoeSk7XG4gXG4tXHRrZXkgPSBpZWVlODAyMTFfbG9va3VwX2tleShzZGF0YSwgbGlua19pZCwga2V5X2lkeCwgcGFpcndpc2UsIG1hY19hZGRyKTtcbiYjNDM7XHRrZXkgPSBpZWVlODAyMTFfbG9va3VwX2tleShzZGF0YSwgbGlua19pZCwga2V5X2lkeCwgdHlwZSwgbWFjX2FkZHIpO1xuIFx0aWYgKCFrZXkpXG4gXHRcdHJldHVybiAtRU5PRU5UO1xuIFxuQEAgLTgxNCw3ICYjNDM7ODMwLDggQEAgc3RhdGljIGludCBpZWVlODAyMTFfZGVsX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuIH1cbiBcbiBzdGF0aWMgaW50IGllZWU4MDIxMV9nZXRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4tXHRcdFx0ICAgICBpbnQgbGlua19pZCwgdTgga2V5X2lkeCwgYm9vbCBwYWlyd2lzZSxcbiYjNDM7XHRcdFx0ICAgICBpbnQgbGlua19pZCwgdTgga2V5X2lkeCxcbiYjNDM7XHRcdFx0ICAgICBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSxcbiBcdFx0XHQgICAgIGNvbnN0IHU4ICptYWNfYWRkciwgdm9pZCAqY29va2llLFxuIFx0XHRcdCAgICAgdm9pZCAoKmNhbGxiYWNrKSh2b2lkICpjb29raWUsXG4gXHRcdFx0XHRcdCAgICAgIHN0cnVjdCBrZXlfcGFyYW1zICpwYXJhbXMpKVxuQEAgLTgzMyw3ICYjNDM7ODUwLDcgQEAgc3RhdGljIGludCBpZWVlODAyMTFfZ2V0X2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuIFxuLVx0a2V5ID0gaWVlZTgwMjExX2xvb2t1cF9rZXkoc2RhdGEsIGxpbmtfaWQsIGtleV9pZHgsIHBhaXJ3aXNlLCBtYWNfYWRkcik7XG4mIzQzO1x0a2V5ID0gaWVlZTgwMjExX2xvb2t1cF9rZXkoc2RhdGEsIGxpbmtfaWQsIGtleV9pZHgsIHR5cGUsIG1hY19hZGRyKTtcbiBcdGlmICgha2V5KVxuIFx0XHRnb3RvIG91dDtcbiBcbkBAIC0yMjg5LDYgJiM0MzsyMzA2LDggQEAgc3RhdGljIGludCBzdGFfbGlua19hcHBseV9wYXJhbWV0ZXJzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxuIFx0Y2FzZSBTVEFfTElOS19NT0RFX05FVzpcbiBcdFx0aWYgKCFwYXJhbXMtXHUwMDNlbGlua19tYWMpXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHRpZiAoc3RhLVx1MDAzZXN0YS5jaXAgXHUwMDI2XHUwMDI2ICFwYXJhbXMtXHUwMDNlY2lwX2NhcF9zZXQpXG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgU1RBX0xJTktfTU9ERV9MSU5LX01PRElGWTpcbiBcdFx0YnJlYWs7XG5AQCAtMjQxMSw2ICYjNDM7MjQzMCw5IEBAIHN0YXRpYyBpbnQgc3RhX2xpbmtfYXBwbHlfcGFyYW1ldGVycyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCxcbiBcdFx0aWVlZTgwMjExX3MxZ19jYXBfdG9fc3RhX3MxZ19jYXAoc2RhdGEsIHBhcmFtcy1cdTAwM2VzMWdfY2FwYSxcbiBcdFx0XHRcdFx0XHQgbGlua19zdGEpO1xuIFxuJiM0MztcdGlmIChwYXJhbXMtXHUwMDNlY2lwX2NhcF9zZXQpXG4mIzQzO1x0XHRsaW5rX3N0YS1cdTAwM2VwdWItXHUwMDNlY2lwX21pY19wYWRkaW5nID0gcGFyYW1zLVx1MDAzZWNpcF9jYXA7XG4mIzQzO1xuIFx0c3dpdGNoIChzZGF0YS1cdTAwM2V2aWYudHlwZSkge1xuIFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9OQU46XG4gXHRjYXNlIE5MODAyMTFfSUZUWVBFX05BTl9EQVRBOlxuQEAgLTI1NzMsNiAmIzQzOzI1OTUsOSBAQCBzdGF0aWMgaW50IHN0YV9hcHBseV9wYXJhbWV0ZXJzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxuIFx0aWYgKHBhcmFtcy1cdTAwM2VlbWxfY2FwX3ByZXNlbnQpXG4gXHRcdHN0YS1cdTAwM2VzdGEuZW1sX2NhcCA9IHBhcmFtcy1cdTAwM2VlbWxfY2FwO1xuIFxuJiM0MztcdGlmIChwYXJhbXMtXHUwMDNlc3RhX2ZsYWdzX3NldCBcdTAwMjYgQklUKE5MODAyMTFfU1RBX0ZMQUdfQ0lQKSlcbiYjNDM7XHRcdHN0YS1cdTAwM2VzdGEuY2lwID0gdHJ1ZTtcbiYjNDM7XG4gXHRyZXQgPSBzdGFfbGlua19hcHBseV9wYXJhbWV0ZXJzKGxvY2FsLCBzdGEsIFNUQV9MSU5LX01PREVfU1RBX01PRElGWSxcbiBcdFx0XHRcdFx0XHUwMDI2cGFyYW1zLVx1MDAzZWxpbmtfc3RhX3BhcmFtcyk7XG4gXHRpZiAocmV0KVxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oIGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmhcbmluZGV4IGExZWY4OGZlODQ2ZGQuLmZjODVmOGJmOTZlM2EgMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmhcbkBAIC00NzcsNiAmIzQzOzQ3Nyw3IEBAIHN0cnVjdCBpZWVlODAyMTFfbWdkX2Fzc29jX2RhdGEge1xuIFx0Ym9vbCBjb21lYmFjazsgLyogd2hldGhlciB0aGUgQVAgaGFzIHJlcXVlc3RlZCBhc3NvY2lhdGlvbiBjb21lYmFjayAqL1xuIFx0Ym9vbCBzMWc7XG4gXHRib29sIHNwcF9hbXNkdTtcbiYjNDM7XHRib29sIGNpcDtcbiBcbiBcdHM4IGFzc29jX2xpbmtfaWQ7XG4gXG5AQCAtMTEwNCw2ICYjNDM7MTEwNSw3IEBAIHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhIHtcbiBcdHN0cnVjdCBpZWVlODAyMTFfa2V5IF9fcmN1ICpndGtbTlVNX0RFRkFVTFRfS0VZUyAmIzQzO1xuIFx0XHRcdFx0XHROVU1fREVGQVVMVF9NR01UX0tFWVMgJiM0MztcbiBcdFx0XHRcdFx0TlVNX0RFRkFVTFRfQkVBQ09OX0tFWVNdO1xuJiM0MztcdHN0cnVjdCBpZWVlODAyMTFfa2V5IF9fcmN1ICpjaWd0a1tOVU1fQ1RSTF9LRVlTXTtcbiBcdHN0cnVjdCBpZWVlODAyMTFfa2V5IF9fcmN1ICpkZWZhdWx0X211bHRpY2FzdF9rZXk7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2tleSBfX3JjdSAqZGVmYXVsdF9tZ210X2tleTtcbiBcdHN0cnVjdCBpZWVlODAyMTFfa2V5IF9fcmN1ICpkZWZhdWx0X2JlYWNvbl9rZXk7XG5AQCAtMTg3MCw2ICYjNDM7MTg3Miw3IEBAIHN0cnVjdCBpZWVlODAyXzExX2VsZW1zIHtcbiBcdGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdHRsbV9lbGVtICp0dGxtW0lFRUU4MDIxMV9UVExNX01BWF9DTlRdO1xuIFx0Y29uc3Qgc3RydWN0IGllZWU4MDIxMV91aHJfY2FwICp1aHJfY2FwO1xuIFx0Y29uc3Qgc3RydWN0IGllZWU4MDIxMV91aHJfb3BlcmF0aW9uICp1aHJfb3BlcmF0aW9uO1xuJiM0MztcdGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfY2lwX2NhcCAqY2lwX2NhcDtcbiBcbiBcdC8qIG5vdCB0aGUgb3JkZXIgaW4gdGhlIHBzZCB2YWx1ZXMgaXMgcGVyIGVsZW1lbnQsIG5vdCBwZXIgY2hhbmRlZiAqL1xuIFx0c3RydWN0IGllZWU4MDIxMV9wYXJzZWRfdHBlIHRwZTtcbkBAIC0yNzc1LDYgJiM0MzsyNzc4LDggQEAgaW50IGllZWU4MDIxMV9wdXRfdWhyX2NhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdCAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQpO1xuIHZvaWQgaWVlZTgwMjExX3B1dF9yZWdfY29ubihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiBcdFx0XHQgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4mIzQzO2ludCBpZWVlODAyMTFfcHV0X2NpcF9jYXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiYjNDM7XHRcdFx0ICBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7XG4gXG4gLyogY2hhbm5lbCBtYW5hZ2VtZW50ICovXG4gYm9vbCBpZWVlODAyMTFfY2hhbmRlZl9odF9vcGVyKGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfaHRfb3BlcmF0aW9uICpodF9vcGVyLFxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9rZXkuYyBiL25ldC9tYWM4MDIxMS9rZXkuY1xuaW5kZXggZjQ1ZTc5MmFiZWRlNS4uNGM5Nzg4ZWMwYjc0ZiAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS9rZXkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL2tleS5jXG5AQCAtMjA1LDYgJiM0MzsyMDUsMTAgQEAgc3RhdGljIGludCBpZWVlODAyMTFfa2V5X2VuYWJsZV9od19hY2NlbChzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5KVxuIFx0XHRcdCAgc3RhID8gc3RhLVx1MDAzZXN0YS5hZGRyIDogYmNhc3RfYWRkciwgcmV0KTtcbiBcbiAgb3V0X3Vuc3VwcG9ydGVkOlxuJiM0MztcdC8qIENvbnRyb2wgSW50ZWdyaXR5IFByb3RvY29sIGNhbiBvbmx5IGJlIGRvbmUgaW4gaGFyZHdhcmUgKi9cbiYjNDM7XHRpZiAoa2V5LVx1MDAzZWNvbmYuZmxhZ3MgXHUwMDI2IElFRUU4MDIxMV9LRVlfRkxBR19DSVApXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4gXHRzd2l0Y2ggKGtleS1cdTAwM2Vjb25mLmNpcGhlcikge1xuIFx0Y2FzZSBXTEFOX0NJUEhFUl9TVUlURV9XRVA0MDpcbiBcdGNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfV0VQMTA0OlxuQEAgLTQ0MCwxMSAmIzQzOzQ0NCwxMyBAQCB2b2lkIGllZWU4MDIxMV9zZXRfZGVmYXVsdF9iZWFjb25fa2V5KHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rLFxuIHN0YXRpYyBpbnQgaWVlZTgwMjExX2tleV9yZXBsYWNlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0XHRcdFx0IHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rLFxuIFx0XHRcdFx0IHN0cnVjdCBzdGFfaW5mbyAqc3RhLFxuLVx0XHRcdFx0IGJvb2wgcGFpcndpc2UsXG4mIzQzO1x0XHRcdFx0IGVudW0gaWVlZTgwMjExX2tleV9mbGFncyBmbGFncyxcbiBcdFx0XHRcdCBzdHJ1Y3QgaWVlZTgwMjExX2tleSAqb2xkLFxuIFx0XHRcdFx0IHN0cnVjdCBpZWVlODAyMTFfa2V5ICpuZXcpXG4ge1xuIFx0c3RydWN0IGxpbmtfc3RhX2luZm8gKmxpbmtfc3RhID0gc3RhID8gXHUwMDI2c3RhLVx1MDAzZWRlZmxpbmsgOiBOVUxMO1xuJiM0MztcdGJvb2wgcGFpcndpc2UgPSBmbGFncyBcdTAwMjYgSUVFRTgwMjExX0tFWV9GTEFHX1BBSVJXSVNFO1xuJiM0MztcdGJvb2wgY2lwID0gZmxhZ3MgXHUwMDI2IElFRUU4MDIxMV9LRVlfRkxBR19DSVA7XG4gXHRpbnQgbGlua19pZDtcbiBcdGludCBpZHg7XG4gXHRpbnQgcmV0ID0gMDtcbkBAIC01MzUsNiAmIzQzOzU0MSw4IEBAIHN0YXRpYyBpbnQgaWVlZTgwMjExX2tleV9yZXBsYWNlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0XHRcdGlmIChuZXcgXHUwMDI2XHUwMDI2XG4gXHRcdFx0ICAgICEobmV3LVx1MDAzZWNvbmYuZmxhZ3MgXHUwMDI2IElFRUU4MDIxMV9LRVlfRkxBR19OT19BVVRPX1RYKSlcbiBcdFx0XHRcdF9pZWVlODAyMTFfc2V0X3R4X2tleShuZXcsIHRydWUpO1xuJiM0MztcdFx0fSBlbHNlIGlmIChjaXApIHtcbiYjNDM7XHRcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKGxpbmtfc3RhLVx1MDAzZWNpZ3RrW2lkeF0sIG5ldyk7XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKGxpbmtfc3RhLVx1MDAzZWd0a1tpZHhdLCBuZXcpO1xuIFx0XHR9XG5AQCAtNTY5LDYgJiM0Mzs1NzcsOCBAQCBzdGF0aWMgaW50IGllZWU4MDIxMV9rZXlfcmVwbGFjZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiBcbiBcdFx0aWYgKGlzX3dlcCB8fCBwYWlyd2lzZSlcbiBcdFx0XHRyY3VfYXNzaWduX3BvaW50ZXIoc2RhdGEtXHUwMDNla2V5c1tpZHhdLCBuZXcpO1xuJiM0MztcdFx0ZWxzZSBpZiAoY2lwKVxuJiM0MztcdFx0XHRyY3VfYXNzaWduX3BvaW50ZXIobGluay1cdTAwM2VjaWd0a1tpZHhdLCBuZXcpO1xuIFx0XHRlbHNlXG4gXHRcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKGxpbmstXHUwMDNlZ3RrW2lkeF0sIG5ldyk7XG4gXG5AQCAtODgzLDYgJiM0Mzs4OTMsMTAgQEAgaW50IGllZWU4MDIxMV9rZXlfbGluayhzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5LFxuIFx0XHRcdHJldCA9IC1FT1BOT1RTVVBQO1xuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHR9XG4mIzQzO1xuJiM0MztcdFx0LyogU2V0IENJUCBmbGFnIGlmIGVuYWJsZWQgZm9yIHRoZSBzdGF0aW9uICovXG4mIzQzO1x0XHRpZiAoc3RhLVx1MDAzZXN0YS5jaXApXG4mIzQzO1x0XHRcdGtleS1cdTAwM2Vjb25mLmZsYWdzIHw9IElFRUU4MDIxMV9LRVlfRkxBR19DSVA7XG4gXHR9IGVsc2UgaWYgKHN0YSkge1xuIFx0XHRzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGEgPSBcdTAwMjZzdGEtXHUwMDNlZGVmbGluaztcbiBcdFx0aW50IGxpbmtfaWQgPSBrZXktXHUwMDNlY29uZi5saW5rX2lkO1xuQEAgLTg5NiwxNSAmIzQzOzkxMCwyNSBAQCBpbnQgaWVlZTgwMjExX2tleV9saW5rKHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXksXG4gXHRcdFx0fVxuIFx0XHR9XG4gXG4tXHRcdG9sZF9rZXkgPSB3aXBoeV9kZXJlZmVyZW5jZShzZGF0YS1cdTAwM2Vsb2NhbC1cdTAwM2Vody53aXBoeSxcbi1cdFx0XHRcdFx0ICAgIGxpbmtfc3RhLVx1MDAzZWd0a1tpZHhdKTtcbi1cdH0gZWxzZSB7XG4tXHRcdGlmIChpZHggXHUwMDNjIE5VTV9ERUZBVUxUX0tFWVMpXG4mIzQzO1x0XHRpZiAoa2V5LVx1MDAzZWNvbmYuZmxhZ3MgXHUwMDI2IElFRUU4MDIxMV9LRVlfRkxBR19DSVApXG4gXHRcdFx0b2xkX2tleSA9IHdpcGh5X2RlcmVmZXJlbmNlKHNkYXRhLVx1MDAzZWxvY2FsLVx1MDAzZWh3LndpcGh5LFxuLVx0XHRcdFx0XHRcdCAgICBzZGF0YS1cdTAwM2VrZXlzW2lkeF0pO1xuLVx0XHRpZiAoIW9sZF9rZXkpXG4mIzQzO1x0XHRcdFx0XHRcdCAgICBsaW5rX3N0YS1cdTAwM2VjaWd0a1tpZHhdKTtcbiYjNDM7XHRcdGVsc2VcbiBcdFx0XHRvbGRfa2V5ID0gd2lwaHlfZGVyZWZlcmVuY2Uoc2RhdGEtXHUwMDNlbG9jYWwtXHUwMDNlaHcud2lwaHksXG4tXHRcdFx0XHRcdFx0ICAgIGxpbmstXHUwMDNlZ3RrW2lkeF0pO1xuJiM0MztcdFx0XHRcdFx0XHQgICAgbGlua19zdGEtXHUwMDNlZ3RrW2lkeF0pO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRpZiAoa2V5LVx1MDAzZWNvbmYuZmxhZ3MgXHUwMDI2IElFRUU4MDIxMV9LRVlfRkxBR19DSVApIHtcbiYjNDM7XHRcdFx0b2xkX2tleSA9IHdpcGh5X2RlcmVmZXJlbmNlKHNkYXRhLVx1MDAzZWxvY2FsLVx1MDAzZWh3LndpcGh5LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgbGluay1cdTAwM2VjaWd0a1tpZHhdKTtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdGlmIChpZHggXHUwMDNjIE5VTV9ERUZBVUxUX0tFWVMpXG4mIzQzO1x0XHRcdFx0b2xkX2tleSA9IHdpcGh5X2RlcmVmZXJlbmNlKHNkYXRhLVx1MDAzZWxvY2FsLVx1MDAzZWh3LndpcGh5LFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgICBzZGF0YS1cdTAwM2VrZXlzW2lkeF0pO1xuJiM0MztcbiYjNDM7XHRcdFx0aWYgKCFvbGRfa2V5KVxuJiM0MztcdFx0XHRcdG9sZF9rZXkgPSB3aXBoeV9kZXJlZmVyZW5jZShzZGF0YS1cdTAwM2Vsb2NhbC1cdTAwM2Vody53aXBoeSxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICAgbGluay1cdTAwM2VndGtbaWR4XSk7XG4mIzQzO1x0XHR9XG4gXHR9XG4gXG4gXHQvKiBOb24tcGFpcndpc2Uga2V5cyBtdXN0IGFsc28gbm90IHN3aXRjaCB0aGUgY2lwaGVyIG9uIHJla2V5ICovXG5AQCAtOTM4LDkgJiM0Mzs5NjIsMTcgQEAgaW50IGllZWU4MDIxMV9rZXlfbGluayhzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5LFxuIFx0aWYgKHN0YSBcdTAwMjZcdTAwMjYgc3RhLVx1MDAzZXN0YS5zcHBfYW1zZHUpXG4gXHRcdGtleS1cdTAwM2Vjb25mLmZsYWdzIHw9IElFRUU4MDIxMV9LRVlfRkxBR19TUFBfQU1TRFU7XG4gXG4mIzQzO1x0LyogQSBDSVAgcmVsYXRlZCBrZXkgbXVzdCBiZSBHQ01QLTI1NiAocmVhbGx5IEdNQUMtMjU2KSAqL1xuJiM0MztcdGlmICgoa2V5LVx1MDAzZWNvbmYuZmxhZ3MgXHUwMDI2IElFRUU4MDIxMV9LRVlfRkxBR19DSVApIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBrZXktXHUwMDNlY29uZi5jaXBoZXIgIT0gV0xBTl9DSVBIRVJfU1VJVEVfR0NNUF8yNTYpIHtcbiYjNDM7XHRcdHJldCA9IC1FSU5WQUw7XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0aW5jcmVtZW50X3RhaWxyb29tX25lZWRfY291bnQoc2RhdGEpO1xuIFxuLVx0cmV0ID0gaWVlZTgwMjExX2tleV9yZXBsYWNlKHNkYXRhLCBsaW5rLCBzdGEsIHBhaXJ3aXNlLCBvbGRfa2V5LCBrZXkpO1xuJiM0MztcdHJldCA9IGllZWU4MDIxMV9rZXlfcmVwbGFjZShzZGF0YSwgbGluaywgc3RhLCBrZXktXHUwMDNlY29uZi5mbGFncyxcbiYjNDM7XHRcdFx0XHQgICAgb2xkX2tleSwga2V5KTtcbiBcbiBcdGlmICghcmV0KSB7XG4gXHRcdGllZWU4MDIxMV9kZWJ1Z2ZzX2tleV9hZGQoa2V5KTtcbkBAIC05NjYsOCAmIzQzOzk5OCw3IEBAIHZvaWQgaWVlZTgwMjExX2tleV9mcmVlKHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXksIGJvb2wgZGVsYXlfdGFpbHJvb20pXG4gXHQgKi9cbiBcdGlmIChrZXktXHUwMDNlc2RhdGEpXG4gXHRcdGllZWU4MDIxMV9rZXlfcmVwbGFjZShrZXktXHUwMDNlc2RhdGEsIE5VTEwsIGtleS1cdTAwM2VzdGEsXG4tXHRcdFx0XHQgICAgICBrZXktXHUwMDNlY29uZi5mbGFncyBcdTAwMjYgSUVFRTgwMjExX0tFWV9GTEFHX1BBSVJXSVNFLFxuLVx0XHRcdFx0ICAgICAga2V5LCBOVUxMKTtcbiYjNDM7XHRcdFx0XHQgICAgICBrZXktXHUwMDNlY29uZi5mbGFncywga2V5LCBOVUxMKTtcbiBcdGllZWU4MDIxMV9rZXlfZGVzdHJveShrZXksIGRlbGF5X3RhaWxyb29tKTtcbiB9XG4gXG5AQCAtMTA5OCw4ICYjNDM7MTEyOSw3IEBAIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9mcmVlX2tleXNfaWZhY2Uoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoa2V5LCB0bXAsIFx1MDAyNnNkYXRhLVx1MDAzZWtleV9saXN0LCBsaXN0KSB7XG4gXHRcdGllZWU4MDIxMV9rZXlfcmVwbGFjZShrZXktXHUwMDNlc2RhdGEsIE5VTEwsIGtleS1cdTAwM2VzdGEsXG4tXHRcdFx0XHQgICAgICBrZXktXHUwMDNlY29uZi5mbGFncyBcdTAwMjYgSUVFRTgwMjExX0tFWV9GTEFHX1BBSVJXSVNFLFxuLVx0XHRcdFx0ICAgICAga2V5LCBOVUxMKTtcbiYjNDM7XHRcdFx0XHQgICAgICBrZXktXHUwMDNlY29uZi5mbGFncywga2V5LCBOVUxMKTtcbiBcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZrZXktXHUwMDNlbGlzdCwga2V5cyk7XG4gXHR9XG4gXG5AQCAtMTExOSw4ICYjNDM7MTE0OSw3IEBAIHZvaWQgaWVlZTgwMjExX3JlbW92ZV9saW5rX2tleXMoc3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbmssXG4gXHRcdGlmIChrZXktXHUwMDNlY29uZi5saW5rX2lkICE9IGxpbmstXHUwMDNlbGlua19pZClcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0aWVlZTgwMjExX2tleV9yZXBsYWNlKGtleS1cdTAwM2VzZGF0YSwgbGluaywga2V5LVx1MDAzZXN0YSxcbi1cdFx0XHRcdCAgICAgIGtleS1cdTAwM2Vjb25mLmZsYWdzIFx1MDAyNiBJRUVFODAyMTFfS0VZX0ZMQUdfUEFJUldJU0UsXG4tXHRcdFx0XHQgICAgICBrZXksIE5VTEwpO1xuJiM0MztcdFx0XHRcdCAgICAgIGtleS1cdTAwM2Vjb25mLmZsYWdzLCBrZXksIE5VTEwpO1xuIFx0XHRsaXN0X2FkZF90YWlsKFx1MDAyNmtleS1cdTAwM2VsaXN0LCBrZXlzKTtcbiBcdH1cbiB9XG5AQCAtMTE5Niw4ICYjNDM7MTIyNSwxNyBAQCB2b2lkIGllZWU4MDIxMV9mcmVlX3N0YV9rZXlzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxuIFx0XHRpZiAoIWtleSlcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0aWVlZTgwMjExX2tleV9yZXBsYWNlKGtleS1cdTAwM2VzZGF0YSwgTlVMTCwga2V5LVx1MDAzZXN0YSxcbi1cdFx0XHRcdCAgICAgIGtleS1cdTAwM2Vjb25mLmZsYWdzIFx1MDAyNiBJRUVFODAyMTFfS0VZX0ZMQUdfUEFJUldJU0UsXG4tXHRcdFx0XHQgICAgICBrZXksIE5VTEwpO1xuJiM0MztcdFx0XHRcdCAgICAgIGtleS1cdTAwM2Vjb25mLmZsYWdzLCBrZXksIE5VTEwpO1xuJiM0MztcdFx0X19pZWVlODAyMTFfa2V5X2Rlc3Ryb3koa2V5LCBrZXktXHUwMDNlc2RhdGEtXHUwMDNldmlmLnR5cGUgPT1cbiYjNDM7XHRcdFx0XHRcdE5MODAyMTFfSUZUWVBFX1NUQVRJT04pO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShzdGEtXHUwMDNlZGVmbGluay5jaWd0ayk7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRrZXkgPSB3aXBoeV9kZXJlZmVyZW5jZShsb2NhbC1cdTAwM2Vody53aXBoeSwgc3RhLVx1MDAzZWRlZmxpbmsuY2lndGtbaV0pO1xuJiM0MztcdFx0aWYgKCFrZXkpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0aWVlZTgwMjExX2tleV9yZXBsYWNlKGtleS1cdTAwM2VzZGF0YSwgTlVMTCwga2V5LVx1MDAzZXN0YSxcbiYjNDM7XHRcdFx0XHQgICAgICBrZXktXHUwMDNlY29uZi5mbGFncywga2V5LCBOVUxMKTtcbiBcdFx0X19pZWVlODAyMTFfa2V5X2Rlc3Ryb3koa2V5LCBrZXktXHUwMDNlc2RhdGEtXHUwMDNldmlmLnR5cGUgPT1cbiBcdFx0XHRcdFx0Tkw4MDIxMV9JRlRZUEVfU1RBVElPTik7XG4gXHR9XG5AQCAtMTIwNyw4ICYjNDM7MTI0NSw3IEBAIHZvaWQgaWVlZTgwMjExX2ZyZWVfc3RhX2tleXMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXG4gXHRcdGlmICgha2V5KVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRpZWVlODAyMTFfa2V5X3JlcGxhY2Uoa2V5LVx1MDAzZXNkYXRhLCBOVUxMLCBrZXktXHUwMDNlc3RhLFxuLVx0XHRcdFx0ICAgICAga2V5LVx1MDAzZWNvbmYuZmxhZ3MgXHUwMDI2IElFRUU4MDIxMV9LRVlfRkxBR19QQUlSV0lTRSxcbi1cdFx0XHRcdCAgICAgIGtleSwgTlVMTCk7XG4mIzQzO1x0XHRcdFx0ICAgICAga2V5LVx1MDAzZWNvbmYuZmxhZ3MsIGtleSwgTlVMTCk7XG4gXHRcdF9faWVlZTgwMjExX2tleV9kZXN0cm95KGtleSwga2V5LVx1MDAzZXNkYXRhLVx1MDAzZXZpZi50eXBlID09XG4gXHRcdFx0XHRcdE5MODAyMTFfSUZUWVBFX1NUQVRJT04pO1xuIFx0fVxuQEAgLTEzNjYsNyAmIzQzOzE0MDMsNyBAQCBFWFBPUlRfU1lNQk9MX0dQTChpZWVlODAyMTFfc2V0X2tleV9yeF9zZXEpO1xuIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKlxuIGllZWU4MDIxMV9ndGtfcmVrZXlfYWRkKHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXG4gXHRcdFx0dTggaWR4LCB1OCAqa2V5X2RhdGEsIHU4IGtleV9sZW4sXG4tXHRcdFx0aW50IGxpbmtfaWQpXG4mIzQzO1x0XHRcdGludCBsaW5rX2lkLCBib29sIGNpZ3RrKVxuIHtcbiBcdHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gdmlmX3RvX3NkYXRhKHZpZik7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLVx1MDAzZWxvY2FsO1xuQEAgLTEzOTAsMTAgJiM0MzsxNDI3LDIwIEBAIGllZWU4MDIxMV9ndGtfcmVrZXlfYWRkKHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXG4gXHRcdCAgICBOVU1fREVGQVVMVF9CRUFDT05fS0VZUykpXG4gXHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuIFxuLVx0cHJldl9rZXkgPSB3aXBoeV9kZXJlZmVyZW5jZShsb2NhbC1cdTAwM2Vody53aXBoeSxcbi1cdFx0XHRcdCAgICAgbGlua19kYXRhLVx1MDAzZWd0a1tpZHhdKTtcbiYjNDM7XHRpZiAoV0FSTl9PTihjaWd0ayBcdTAwMjZcdTAwMjYgaWR4IFx1MDAzZT0gTlVNX0NUUkxfS0VZUykpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGNpZ3RrKVxuJiM0MztcdFx0cHJldl9rZXkgPSB3aXBoeV9kZXJlZmVyZW5jZShsb2NhbC1cdTAwM2Vody53aXBoeSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgbGlua19kYXRhLVx1MDAzZWNpZ3RrW2lkeF0pO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHByZXZfa2V5ID0gd2lwaHlfZGVyZWZlcmVuY2UobG9jYWwtXHUwMDNlaHcud2lwaHksXG4mIzQzO1x0XHRcdFx0XHQgICAgIGxpbmtfZGF0YS1cdTAwM2VndGtbaWR4XSk7XG4gXHRpZiAoIXByZXZfa2V5KSB7XG4tXHRcdGlmIChpZHggXHUwMDNjIE5VTV9ERUZBVUxUX0tFWVMpIHtcbiYjNDM7XHRcdGlmIChjaWd0aykge1xuJiM0MztcdFx0XHRwcmV2X2tleSA9IHdpcGh5X2RlcmVmZXJlbmNlKGxvY2FsLVx1MDAzZWh3LndpcGh5LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgIGxpbmtfZGF0YS1cdTAwM2VjaWd0a1tpZHggXiAxXSk7XG4mIzQzO1x0XHR9IGVsc2UgaWYgKGlkeCBcdTAwM2MgTlVNX0RFRkFVTFRfS0VZUykge1xuIFx0XHRcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBOVU1fREVGQVVMVF9LRVlTOyBpJiM0MzsmIzQzOykge1xuIFx0XHRcdFx0aWYgKGkgPT0gaWR4KVxuIFx0XHRcdFx0XHRjb250aW51ZTtcbkBAIC0xNDI0LDYgJiM0MzsxNDcxLDkgQEAgaWVlZTgwMjExX2d0a19yZWtleV9hZGQoc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcbiBcdGlmIChzZGF0YS1cdTAwM2V1Lm1nZC5tZnAgIT0gSUVFRTgwMjExX01GUF9ESVNBQkxFRClcbiBcdFx0a2V5LVx1MDAzZWNvbmYuZmxhZ3MgfD0gSUVFRTgwMjExX0tFWV9GTEFHX1JYX01HTVQ7XG4gXG4mIzQzO1x0aWYgKHByZXZfa2V5LVx1MDAzZWNvbmYuZmxhZ3MgXHUwMDI2IElFRUU4MDIxMV9LRVlfRkxBR19DSVApXG4mIzQzO1x0XHRrZXktXHUwMDNlY29uZi5mbGFncyB8PSBJRUVFODAyMTFfS0VZX0ZMQUdfQ0lQO1xuJiM0MztcbiBcdGtleS1cdTAwM2Vjb25mLmxpbmtfaWQgPSBsaW5rX2RhdGEtXHUwMDNlbGlua19pZDtcbiBcbiBcdGVyciA9IGllZWU4MDIxMV9rZXlfbGluayhrZXksIGxpbmtfZGF0YSwgTlVMTCk7XG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2tleS5oIGIvbmV0L21hYzgwMjExL2tleS5oXG5pbmRleCA4MjZlNGU5Mzg3YzU1Li5jODU5OTI0OTNhZmQxIDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL2tleS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEva2V5LmhcbkBAIC0yLDcgJiM0MzsyLDcgQEBcbiAvKlxuICAqIENvcHlyaWdodCAyMDAyLTIwMDQsIEluc3RhbnQ4MDIgTmV0d29ya3MsIEluYy5cbiAgKiBDb3B5cmlnaHQgMjAwNSwgRGV2aWNlc2NhcGUgU29mdHdhcmUsIEluYy5cbi0gKiBDb3B5cmlnaHQgKEMpIDIwMTksIDIwMjItMjAyMyBJbnRlbCBDb3Jwb3JhdGlvblxuJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMTksIDIwMjItMjAyMywgMjAyNiBJbnRlbCBDb3Jwb3JhdGlvblxuICAqL1xuIFxuICNpZm5kZWYgSUVFRTgwMjExX0tFWV9IXG5AQCAtMTksNiAmIzQzOzE5LDcgQEBcbiAjZGVmaW5lIE5VTV9ERUZBVUxUX0tFWVMgNFxuICNkZWZpbmUgTlVNX0RFRkFVTFRfTUdNVF9LRVlTIDJcbiAjZGVmaW5lIE5VTV9ERUZBVUxUX0JFQUNPTl9LRVlTIDJcbiYjNDM7I2RlZmluZSBOVU1fQ1RSTF9LRVlTIDJcbiAjZGVmaW5lIElOVkFMSURfUFRLX0tFWUlEWCAyIC8qIEtleWlkeCBhbHdheXMgcG9pbnRpbmcgdG8gYSBOVUxMIGtleSBmb3IgUFRLICovXG4gXG4gc3RydWN0IGllZWU4MDIxMV9sb2NhbDtcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvbWxtZS5jIGIvbmV0L21hYzgwMjExL21sbWUuY1xuaW5kZXggZjUxMTY3ZjBmYzQ2ZC4uMzRkNzEzYzlhNjkxNCAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS9tbG1lLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS9tbG1lLmNcbkBAIC0yMzM3LDYgJiM0MzsyMzM3LDEwIEBAIGllZWU4MDIxMV9hZGRfbGlua19lbGVtcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiBcdFx0aWVlZTgwMjExX3B1dF9laHRfY2FwKHNrYiwgc2RhdGEsIHNiYW5kLFxuIFx0XHRcdFx0ICAgICAgXHUwMDI2YXNzb2NfZGF0YS1cdTAwM2VsaW5rW2xpbmtfaWRdLmNvbm4pO1xuIFxuJiM0MztcdC8qIEluc2VydCBDSVAgb25seSBvbiB0aGUgYXNzb2MgbGluayAoaXQgd2lsbCBiZSBpbmhlcml0ZWQpICovXG4mIzQzO1x0aWYgKGxpbmtfaWQgPT0gYXNzb2NfZGF0YS1cdTAwM2Vhc3NvY19saW5rX2lkIFx1MDAyNlx1MDAyNiBhc3NvY19kYXRhLVx1MDAzZWNpcClcbiYjNDM7XHRcdGllZWU4MDIxMV9wdXRfY2lwX2NhcChza2IsIHNkYXRhKTtcbiYjNDM7XG4gXHRpZiAoYXNzb2NfZGF0YS1cdTAwM2VsaW5rW2xpbmtfaWRdLmNvbm4ubW9kZSBcdTAwM2U9IElFRUU4MDIxMV9DT05OX01PREVfVUhSKVxuIFx0XHRpZWVlODAyMTFfcHV0X3Vocl9jYXAoc2tiLCBzZGF0YSwgc2JhbmQpO1xuIFxuQEAgLTI2MTMsNyAmIzQzOzI2MTcsOCBAQCBzdGF0aWMgaW50IGllZWU4MDIxMV9zZW5kX2Fzc29jKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKVxuIFx0ICAgICAgIGFzc29jX2RhdGEtXHUwMDNlaWVfbGVuICYjNDM7IC8qIGV4dHJhIElFcyAqL1xuIFx0ICAgICAgIChhc3NvY19kYXRhLVx1MDAzZWZpbHNfa2VrX2xlbiA/IDE2IC8qIEFFUy1TSVYgKi8gOiAwKSAmIzQzO1xuIFx0ICAgICAgIDkgLyogV01NICovICYjNDM7XG4tXHQgICAgICAgNCAvKiByZWd1bGF0b3J5IGNvbm5lY3Rpdml0eSwgaWYgNiBHSHogaXMgc3VwcG9ydGVkICovO1xuJiM0MztcdCAgICAgICA0IC8qIHJlZ3VsYXRvcnkgY29ubmVjdGl2aXR5LCBpZiA2IEdIeiBpcyBzdXBwb3J0ZWQgKi8gJiM0MztcbiYjNDM7XHQgICAgICAgKGFzc29jX2RhdGEtXHUwMDNlY2lwID8gNCAvKiBDSVAgY2FwYWJpbGl0aWVzICovIDogMCk7XG4gXG4gXHRmb3IgKGxpbmtfaWQgPSAwOyBsaW5rX2lkIFx1MDAzYyBJRUVFODAyMTFfTUxEX01BWF9OVU1fTElOS1M7IGxpbmtfaWQmIzQzOyYjNDM7KSB7XG4gXHRcdHN0cnVjdCBjZmc4MDIxMV9ic3MgKmNic3MgPSBhc3NvY19kYXRhLVx1MDAzZWxpbmtbbGlua19pZF0uYnNzO1xuQEAgLTYyNzQsNiAmIzQzOzYyNzksMTkgQEAgc3RhdGljIGJvb2wgaWVlZTgwMjExX2Fzc29jX2NvbmZpZ19saW5rKHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rLFxuIFx0XHQvKiBUT0RPOiBPUEVOOiB3aGF0IGhhcHBlbnMgaWYgQlNTIGNvbG9yIGRpc2FibGUgaXMgc2V0PyAqL1xuIFx0fVxuIFxuJiM0MztcdGlmIChhc3NvY19kYXRhLVx1MDAzZWNpcCkge1xuJiM0MztcdFx0aWYgKGVsZW1zLVx1MDAzZWNpcF9jYXApIHtcbiYjNDM7XHRcdFx0bGlua19zdGEtXHUwMDNlcHViLVx1MDAzZWNpcF9taWNfcGFkZGluZyA9XG4mIzQzO1x0XHRcdFx0dThfZ2V0X2JpdHMoZWxlbXMtXHUwMDNlY2lwX2NhcC1cdTAwM2V2LFxuJiM0MztcdFx0XHRcdFx0ICAgIFdMQU5fQ0lQX0NBUEFfTUlDX1BBRERJTkcpO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0c2RhdGFfaW5mbyhzZGF0YSxcbiYjNDM7XHRcdFx0XHQgICBcJiMzNDtDSVAgQ2FwYWJpbGl0aWVzIG5vdCBpbmNsdWRlZCBpbiBhc3NvY2lhdGlvbiByZXNwb25zZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdHJldCA9IGZhbHNlO1xuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuIFx0aWYgKGNic3MtXHUwMDNldHJhbnNtaXR0ZWRfYnNzKSB7XG4gXHRcdGJzc19jb25mLVx1MDAzZW5vbnRyYW5zbWl0dGVkID0gdHJ1ZTtcbiBcdFx0ZXRoZXJfYWRkcl9jb3B5KGJzc19jb25mLVx1MDAzZXRyYW5zbWl0dGVyX2Jzc2lkLFxuQEAgLTcwMDAsNiAmIzQzOzcwMTgsNyBAQCBzdGF0aWMgYm9vbCBpZWVlODAyMTFfYXNzb2Nfc3VjY2VzcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiBcdFx0Z290byBvdXRfZXJyO1xuIFxuIFx0c3RhLVx1MDAzZXN0YS5zcHBfYW1zZHUgPSBhc3NvY19kYXRhLVx1MDAzZXNwcF9hbXNkdTtcbiYjNDM7XHRzdGEtXHUwMDNlc3RhLmNpcCA9IGFzc29jX2RhdGEtXHUwMDNlY2lwO1xuIFxuIFx0aWYgKGllZWU4MDIxMV92aWZfaXNfbWxkKFx1MDAyNnNkYXRhLVx1MDAzZXZpZikpIHtcbiBcdFx0aWYgKCFlbGVtcy1cdTAwM2VtbF9iYXNpYylcbkBAIC0xMDUzOCw2ICYjNDM7MTA1NTcsNyBAQCBpbnQgaWVlZTgwMjExX21nZF9hc3NvYyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiBcdH1cbiBcbiBcdGFzc29jX2RhdGEtXHUwMDNlc3BwX2Ftc2R1ID0gcmVxLVx1MDAzZWZsYWdzIFx1MDAyNiBBU1NPQ19SRVFfU1BQX0FNU0RVO1xuJiM0MztcdGFzc29jX2RhdGEtXHUwMDNlY2lwID0gcmVxLVx1MDAzZWZsYWdzIFx1MDAyNiBBU1NPQ19SRVFfQ0lQO1xuIFxuIFx0aWYgKGlmbWdkLVx1MDAzZWF1dGhfZGF0YSBcdTAwMjZcdTAwMjYgIWlmbWdkLVx1MDAzZWF1dGhfZGF0YS1cdTAwM2Vkb25lKSB7XG4gXHRcdGVyciA9IC1FQlVTWTtcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvcGFyc2UuYyBiL25ldC9tYWM4MDIxMS9wYXJzZS5jXG5pbmRleCBjYjJiZTE2N2NkZTc5Li4zYjY2Y2E3ZDdhNWMyIDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL3BhcnNlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS9wYXJzZS5jXG5AQCAtMjA1LDYgJiM0MzsyMDUsMTAgQEAgaWVlZTgwMjExX3BhcnNlX2V4dGVuc2lvbl9lbGVtZW50KHUzMiAqY3JjLFxuIFx0XHRcdGVsZW1zLVx1MDAzZXR0bG1fbnVtJiM0MzsmIzQzOztcbiBcdFx0fVxuIFx0XHRicmVhaztcbiYjNDM7XHRjYXNlIFdMQU5fRUlEX0VYVF9DSVBfQ0FQQTpcbiYjNDM7XHRcdGlmIChsZW4gXHUwMDNlPSBzaXplb2YoKmVsZW1zLVx1MDAzZWNpcF9jYXApKVxuJiM0MztcdFx0XHRlbGVtcy1cdTAwM2VjaXBfY2FwID0gZGF0YTtcbiYjNDM7XHRcdGJyZWFrO1xuIFx0Y2FzZSBXTEFOX0VJRF9FWFRfVUhSX09QRVI6XG4gXHRcdGlmIChwYXJhbXMtXHUwMDNlbW9kZSBcdTAwM2MgSUVFRTgwMjExX0NPTk5fTU9ERV9VSFIpXG4gXHRcdFx0YnJlYWs7XG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3N0YV9pbmZvLmggYi9uZXQvbWFjODAyMTEvc3RhX2luZm8uaFxuaW5kZXggZWUwZDMyODc3YzViNC4uZjQwOWY2YTNhZmExZiAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS9zdGFfaW5mby5oXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvc3RhX2luZm8uaFxuQEAgLTQ4NSw2ICYjNDM7NDg1LDcgQEAgc3RydWN0IGllZWU4MDIxMV9mcmFnbWVudF9jYWNoZSB7XG4gICogQGxpbmtfaGFzaF9ub2RlOiBoYXNoIG5vZGUgZm9yIHJoYXNodGFibGVcbiAgKiBAc3RhOiBQb2ludHMgdG8gdGhlIFNUQSBpbmZvXG4gICogQGd0azogZ3JvdXAga2V5cyBuZWdvdGlhdGVkIHdpdGggdGhpcyBzdGF0aW9uLCBpZiBhbnlcbiYjNDM7ICogQGNpZ3RrOiBjb250cm9sIGludGVncml0eSBncm91cCBrZXlzIG5lZ290aWF0ZWQgd2l0aCB0aGlzIHN0YXRpb24sIGlmIGFueVxuICAqIEB0eF9zdGF0czogVFggc3RhdGlzdGljc1xuICAqIEB0eF9zdGF0cy5wYWNrZXRzOiAjIG9mIHBhY2tldHMgdHJhbnNtaXR0ZWRcbiAgKiBAdHhfc3RhdHMuYnl0ZXM6ICMgb2YgYnl0ZXMgaW4gYWxsIHBhY2tldHMgdHJhbnNtaXR0ZWRcbkBAIC01MzUsNiAmIzQzOzUzNiw3IEBAIHN0cnVjdCBsaW5rX3N0YV9pbmZvIHtcbiBcdHN0cnVjdCBpZWVlODAyMTFfa2V5IF9fcmN1ICpndGtbTlVNX0RFRkFVTFRfS0VZUyAmIzQzO1xuIFx0XHRcdFx0XHROVU1fREVGQVVMVF9NR01UX0tFWVMgJiM0MztcbiBcdFx0XHRcdFx0TlVNX0RFRkFVTFRfQkVBQ09OX0tFWVNdO1xuJiM0MztcdHN0cnVjdCBpZWVlODAyMTFfa2V5IF9fcmN1ICpjaWd0a1tOVU1fQ1RSTF9LRVlTXTtcbiBcdHN0cnVjdCBpZWVlODAyMTFfc3RhX3J4X3N0YXRzIF9fcGVyY3B1ICpwY3B1X3J4X3N0YXRzO1xuIFxuIFx0LyogVXBkYXRlZCBmcm9tIFJYIHBhdGggb25seSwgbm8gbG9ja2luZyByZXF1aXJlbWVudHMgKi9cbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvdXRpbC5jIGIvbmV0L21hYzgwMjExL3V0aWwuY1xuaW5kZXggYTk2MDc4YTZiZmEyOS4uODMwM2Y2MjRiN2Y2MiAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS91dGlsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS91dGlsLmNcbkBAIC00NjgwLDYgJiM0Mzs0NjgwLDI1IEBAIGludCBpZWVlODAyMTFfcHV0X3Vocl9jYXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7aW50IGllZWU4MDIxMV9wdXRfY2lwX2NhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuJiM0MztcdFx0XHQgIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHdpcGh5X2lmdHlwZV9leHRfY2FwYWIgKmlmdF9leHRfY2FwYSA9XG4mIzQzO1x0XHRjZmc4MDIxMV9nZXRfaWZ0eXBlX2V4dF9jYXBhKHNkYXRhLVx1MDAzZWxvY2FsLVx1MDAzZWh3LndpcGh5LFxuJiM0MztcdFx0XHRcdFx0ICAgICBpZWVlODAyMTFfdmlmX3R5cGVfcDJwKFx1MDAyNnNkYXRhLVx1MDAzZXZpZikpO1xuJiM0MztcdHU4IGNpcF9jYXBhYmlsaXRpZXMgPSBpZnRfZXh0X2NhcGEgPyBpZnRfZXh0X2NhcGEtXHUwMDNlY2lwX2NhcGFiaWxpdGllcyA6IDA7XG4mIzQzO1xuJiM0MztcdGlmIChza2JfdGFpbHJvb20oc2tiKSBcdTAwM2MgNClcbiYjNDM7XHRcdHJldHVybiAtRU5PQlVGUztcbiYjNDM7XG4mIzQzO1x0c2tiX3B1dF91OChza2IsIFdMQU5fRUlEX0VYVEVOU0lPTik7XG4mIzQzO1x0c2tiX3B1dF91OChza2IsIDIpO1xuJiM0MztcdHNrYl9wdXRfdTgoc2tiLCBXTEFOX0VJRF9FWFRfQ0lQX0NBUEEpO1xuJiM0MztcdHNrYl9wdXRfdTgoc2tiLCBjaXBfY2FwYWJpbGl0aWVzKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gY29uc3QgY2hhciAqaWVlZTgwMjExX2Nvbm5fbW9kZV9zdHIoZW51bSBpZWVlODAyMTFfY29ubl9tb2RlIG1vZGUpXG4ge1xuIFx0c3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBtb2Rlc1tdID0ge1xuZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9jb3JlLmggYi9uZXQvd2lyZWxlc3MvY29yZS5oXG5pbmRleCAxNWQ5ZjdlYjU4YjRkLi4zYjkwYWE4Y2M2YWNmIDEwMDY0NFxuLS0tIGEvbmV0L3dpcmVsZXNzL2NvcmUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3dpcmVsZXNzL2NvcmUuaFxuQEAgLTQ0MywxMyAmIzQzOzQ0MywxNiBAQCB2b2lkIGNmZzgwMjExX3NtZV9hYmFuZG9uX2Fzc29jKHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYpO1xuIFxuIC8qIGludGVybmFsIGhlbHBlcnMgKi9cbiBib29sIGNmZzgwMjExX3N1cHBvcnRlZF9jaXBoZXJfc3VpdGUoc3RydWN0IHdpcGh5ICp3aXBoeSwgdTMyIGNpcGhlcik7XG4mIzQzO2Jvb2wgY2ZnODAyMTFfY2lndGtfc3VwcG9ydGVkKHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4mIzQzO1x0XHRcdCAgICAgIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xuIGJvb2wgY2ZnODAyMTFfdmFsaWRfa2V5X2lkeChzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuLVx0XHRcdCAgICBpbnQga2V5X2lkeCwgYm9vbCBwYWlyd2lzZSxcbiYjNDM7XHRcdFx0ICAgIGludCBrZXlfaWR4LCBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSxcbiBcdFx0XHQgICAgY29uc3QgdTggKm1hY19hZGRyKTtcbiBpbnQgY2ZnODAyMTFfdmFsaWRhdGVfa2V5X3NldHRpbmdzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbiBcdFx0XHRcdCAgIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4gXHRcdFx0XHQgICBzdHJ1Y3Qga2V5X3BhcmFtcyAqcGFyYW1zLCBpbnQga2V5X2lkeCxcbi1cdFx0XHRcdCAgIGJvb2wgcGFpcndpc2UsIGNvbnN0IHU4ICptYWNfYWRkcik7XG4mIzQzO1x0XHRcdFx0ICAgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsXG4mIzQzO1x0XHRcdFx0ICAgY29uc3QgdTggKm1hY19hZGRyKTtcbiB2b2lkIF9fY2ZnODAyMTFfc2Nhbl9kb25lKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXBoeV93b3JrICp3ayk7XG4gdm9pZCBfX19jZmc4MDIxMV9zY2FuX2RvbmUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuIFx0XHRcdCAgIGJvb2wgc2VuZF9tZXNzYWdlKTtcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvaWJzcy5jIGIvbmV0L3dpcmVsZXNzL2lic3MuY1xuaW5kZXggYjFkNzQ4YmRiNTA0ZS4uNmFlNTYxZWQ3ZjM3ZiAxMDA2NDRcbi0tLSBhL25ldC93aXJlbGVzcy9pYnNzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC93aXJlbGVzcy9pYnNzLmNcbkBAIC0xNzIsNyAmIzQzOzE3Miw4IEBAIHZvaWQgY2ZnODAyMTFfY2xlYXJfaWJzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIG5vd2V4dClcbiBcdCAqL1xuIFx0aWYgKHJkZXYtXHUwMDNlb3BzLVx1MDAzZWRlbF9rZXkpXG4gXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDY7IGkmIzQzOyYjNDM7KVxuLVx0XHRcdHJkZXZfZGVsX2tleShyZGV2LCB3ZGV2LCAtMSwgaSwgZmFsc2UsIE5VTEwpO1xuJiM0MztcdFx0XHRyZGV2X2RlbF9rZXkocmRldiwgd2RldiwgLTEsIGksIE5MODAyMTFfS0VZVFlQRV9HUk9VUCxcbiYjNDM7XHRcdFx0XHQgICAgIE5VTEwpO1xuIFxuIFx0aWYgKHdkZXYtXHUwMDNldS5pYnNzLmN1cnJlbnRfYnNzKSB7XG4gXHRcdGNmZzgwMjExX3VuaG9sZF9ic3Mod2Rldi1cdTAwM2V1Lmlic3MuY3VycmVudF9ic3MpO1xuZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9ubDgwMjExLmMgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXG5pbmRleCA4YWRiZWY1ZjA0NDI1Li41NjY0OGY3ZDljN2ZlIDEwMDY0NFxuLS0tIGEvbmV0L3dpcmVsZXNzL25sODAyMTEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3dpcmVsZXNzL25sODAyMTEuY1xuQEAgLTEwOTYsNiAmIzQzOzEwOTYsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmw4MDIxMV9wb2xpY3lbTlVNX05MODAyMTFfQVRUUl0gPSB7XG4gXHRbTkw4MDIxMV9BVFRSX05QQ0FfUFVOQ1RfQklUTUFQXSA9XG4gXHRcdE5MQV9QT0xJQ1lfRlVMTF9SQU5HRShOTEFfVTMyLCBcdTAwMjZubDgwMjExX3B1bmN0X2JpdG1hcF9yYW5nZSksXG4gXHRbTkw4MDIxMV9BVFRSX1NUQV9EVU1QX0xJTktfU1RBVFNdID0geyAudHlwZSA9IE5MQV9GTEFHIH0sXG4mIzQzO1x0W05MODAyMTFfQVRUUl9BU1NPQ19DSVBdID0geyAudHlwZSA9IE5MQV9GTEFHIH0sXG4mIzQzO1x0W05MODAyMTFfQVRUUl9DSVBfQ0FQQUJJTElUSUVTXSA9IHsgLnR5cGUgPSBOTEFfVTggfSxcbiB9O1xuIFxuIC8qIHBvbGljeSBmb3IgdGhlIGtleSBhdHRyaWJ1dGVzICovXG5AQCAtMTc2MSw2ICYjNDM7MTc2MywxMSBAQCBzdGF0aWMgaW50IG5sODAyMTFfcGFyc2Vfa2V5KHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIHN0cnVjdCBrZXlfcGFyc2UgKmspXG4gXHRcdFx0XHRHRU5MX1NFVF9FUlJfTVNHKGluZm8sIFwmIzM0O2RlZiBrZXkgaWR4IG5vdCAwLTNcJiMzNDspO1xuIFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdFx0fVxuJiM0MztcdFx0fSBlbHNlIGlmIChrLVx1MDAzZXR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX0NJR1RLKSB7XG4mIzQzO1x0XHRcdGlmIChrLVx1MDAzZWlkeCBcdTAwM2MgMCB8fCBrLVx1MDAzZWlkeCBcdTAwM2UgMSkge1xuJiM0MztcdFx0XHRcdEdFTkxfU0VUX0VSUl9NU0coaW5mbywgXCYjMzQ7Q0lHVEsgaWR4IG5vdCAwLTFcJiMzNDspO1xuJiM0MztcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0XHR9XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0aWYgKGstXHUwMDNlaWR4IFx1MDAzYyAwIHx8IGstXHUwMDNlaWR4IFx1MDAzZSA3KSB7XG4gXHRcdFx0XHRHRU5MX1NFVF9FUlJfTVNHKGluZm8sIFwmIzM0O2tleSBpZHggbm90IDAtN1wmIzM0Oyk7XG5AQCAtMTgyNSw3ICYjNDM7MTgzMiw5IEBAIG5sODAyMTFfcGFyc2VfY29ubmtleXMoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuIFx0XHR9IGVsc2UgaWYgKHBhcnNlLmRlZm1nbXQpXG4gXHRcdFx0Z290byBlcnJvcjtcbiBcdFx0ZXJyID0gY2ZnODAyMTFfdmFsaWRhdGVfa2V5X3NldHRpbmdzKHJkZXYsIHdkZXYsIFx1MDAyNnBhcnNlLnAsXG4tXHRcdFx0XHRcdFx0ICAgICBwYXJzZS5pZHgsIGZhbHNlLCBOVUxMKTtcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICBwYXJzZS5pZHgsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgTkw4MDIxMV9LRVlUWVBFX0dST1VQLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgIE5VTEwpO1xuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdGdvdG8gZXJyb3I7XG4gXHRcdGlmIChwYXJzZS5wLmNpcGhlciAhPSBXTEFOX0NJUEhFUl9TVUlURV9XRVA0MCBcdTAwMjZcdTAwMjZcbkBAIC0zNjE1LDYgJiM0MzszNjI0LDExIEBAIHN0YXRpYyBpbnQgbmw4MDIxMV9zZW5kX3dpcGh5KHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbiBcdFx0XHRcdFx0XHROTDgwMjExX0FUVFJfRVhUX01MRF9DQVBBX0FORF9PUFMsXG4gXHRcdFx0XHRcdFx0Y2FwYWItXHUwMDNlZXh0X21sZF9jYXBhX2FuZF9vcHMpKVxuIFx0XHRcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiYjNDM7XHRcdFx0XHRpZiAoY2FwYWItXHUwMDNlY2lwX3N1cHBvcnRlZCBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0XHQgICAgbmxhX3B1dF91OChtc2csXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgTkw4MDIxMV9BVFRSX0NJUF9DQVBBQklMSVRJRVMsXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgY2FwYWItXHUwMDNlY2lwX2NhcGFiaWxpdGllcykpXG4mIzQzO1x0XHRcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiBcbiBcdFx0XHRcdG5sYV9uZXN0X2VuZChtc2csIG5lc3RlZF9leHRfY2FwYWIpO1xuIFx0XHRcdFx0aWYgKHN0YXRlLVx1MDAzZXNwbGl0KVxuQEAgLTUzNzEsNiAmIzQzOzUzODUsNyBAQCBzdGF0aWMgaW50IG5sODAyMTFfZ2V0X2tleShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0c3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGluZm8tXHUwMDNldXNlcl9wdHJbMV07XG4gXHR1OCBrZXlfaWR4ID0gMDtcbiBcdGNvbnN0IHU4ICptYWNfYWRkciA9IE5VTEw7XG4mIzQzO1x0ZW51bSBubDgwMjExX2tleV90eXBlIHR5cGU7XG4gXHRib29sIHBhaXJ3aXNlO1xuIFx0c3RydWN0IGdldF9rZXlfY29va2llIGNvb2tpZSA9IHtcbiBcdFx0LmVycm9yID0gMCxcbkBAIC01NDAzLDE5ICYjNDM7NTQxOCwyNCBAQCBzdGF0aWMgaW50IG5sODAyMTFfZ2V0X2tleShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0XHRtYWNfYWRkciA9IG5sYV9kYXRhKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX01BQ10pO1xuIFxuIFx0cGFpcndpc2UgPSAhIW1hY19hZGRyO1xuJiM0MztcdHR5cGUgPSBwYWlyd2lzZSA/IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRSA6IE5MODAyMTFfS0VZVFlQRV9HUk9VUDtcbiBcdGlmIChpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9LRVlfVFlQRV0pIHtcbi1cdFx0dTMyIGt0ID0gbmxhX2dldF91MzIoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfS0VZX1RZUEVdKTtcbiYjNDM7XHRcdHR5cGUgPSBubGFfZ2V0X3UzMihpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9LRVlfVFlQRV0pO1xuIFxuLVx0XHRpZiAoa3QgIT0gTkw4MDIxMV9LRVlUWVBFX0dST1VQIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAga3QgIT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFKVxuJiM0MztcdFx0aWYgKHR5cGUgIT0gTkw4MDIxMV9LRVlUWVBFX0dST1VQIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIHR5cGUgIT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIHR5cGUgIT0gTkw4MDIxMV9LRVlUWVBFX0NJR1RLKSB7XG4mIzQzO1x0XHRcdEdFTkxfU0VUX0VSUl9NU0coaW5mbywgXCYjMzQ7a2V5IHR5cGUgbm90IHBhaXJ3aXNlLCBncm91cCBvciBDSUdUS1wmIzM0Oyk7XG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHRcdHBhaXJ3aXNlID0ga3QgPT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdHBhaXJ3aXNlID0gdHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0U7XG4gXHR9XG4gXG4gXHRpZiAoIXJkZXYtXHUwMDNlb3BzLVx1MDAzZWdldF9rZXkpXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcbi1cdGlmICghY2ZnODAyMTFfdmFsaWRfa2V5X2lkeCh3ZGV2LCBrZXlfaWR4LCBwYWlyd2lzZSwgbWFjX2FkZHIpKVxuJiM0MztcdGlmICghY2ZnODAyMTFfdmFsaWRfa2V5X2lkeCh3ZGV2LCBrZXlfaWR4LCB0eXBlLCBtYWNfYWRkcikpXG4gXHRcdHJldHVybiAtRU5PRU5UO1xuIFxuIFx0bXNnID0gbmxtc2dfbmV3KE5MTVNHX0RFRkFVTFRfU0laRSwgR0ZQX0tFUk5FTCk7XG5AQCAtNTQ0NCw3ICYjNDM7NTQ2NCw3IEBAIHN0YXRpYyBpbnQgbmw4MDIxMV9nZXRfa2V5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGZyZWVfbXNnO1xuIFxuLVx0ZXJyID0gcmRldl9nZXRfa2V5KHJkZXYsIHdkZXYsIGxpbmtfaWQsIGtleV9pZHgsIHBhaXJ3aXNlLCBtYWNfYWRkcixcbiYjNDM7XHRlcnIgPSByZGV2X2dldF9rZXkocmRldiwgd2RldiwgbGlua19pZCwga2V5X2lkeCwgdHlwZSwgbWFjX2FkZHIsXG4gXHRcdFx0ICAgXHUwMDI2Y29va2llLCBnZXRfa2V5X2NhbGxiYWNrKTtcbiBcbiBcdGlmIChlcnIpXG5AQCAtNTYwMyw4ICYjNDM7NTYyMyw5IEBAIHN0YXRpYyBpbnQgbmw4MDIxMV9uZXdfa2V5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXG4gXHQvKiBmb3Igbm93ICovXG4gXHRpZiAoa2V5LnR5cGUgIT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFIFx1MDAyNlx1MDAyNlxuLVx0ICAgIGtleS50eXBlICE9IE5MODAyMTFfS0VZVFlQRV9HUk9VUCkge1xuLVx0XHRHRU5MX1NFVF9FUlJfTVNHKGluZm8sIFwmIzM0O2tleSB0eXBlIG5vdCBwYWlyd2lzZSBvciBncm91cFwmIzM0Oyk7XG4mIzQzO1x0ICAgIGtleS50eXBlICE9IE5MODAyMTFfS0VZVFlQRV9HUk9VUCBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAga2V5LnR5cGUgIT0gTkw4MDIxMV9LRVlUWVBFX0NJR1RLKSB7XG4mIzQzO1x0XHRHRU5MX1NFVF9FUlJfTVNHKGluZm8sIFwmIzM0O2tleSB0eXBlIG5vdCBwYWlyd2lzZSwgZ3JvdXAgb3IgQ0lHVEtcJiMzNDspO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbkBAIC01NjE2LDggJiM0Mzs1NjM3LDcgQEAgc3RhdGljIGludCBubDgwMjExX25ld19rZXkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFxuIFx0aWYgKGNmZzgwMjExX3ZhbGlkYXRlX2tleV9zZXR0aW5ncyhyZGV2LCB3ZGV2LCBcdTAwMjZrZXkucCwga2V5LmlkeCxcbi1cdFx0XHRcdFx0ICAga2V5LnR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFLFxuLVx0XHRcdFx0XHQgICBtYWNfYWRkcikpIHtcbiYjNDM7XHRcdFx0XHRcdCAgIGtleS50eXBlLCBtYWNfYWRkcikpIHtcbiBcdFx0R0VOTF9TRVRfRVJSX01TRyhpbmZvLCBcJiMzNDtrZXkgc2V0dGluZyB2YWxpZGF0aW9uIGZhaWxlZFwmIzM0Oyk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuQEAgLTU2MzEsOCAmIzQzOzU2NTEsNyBAQCBzdGF0aWMgaW50IG5sODAyMTFfbmV3X2tleShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0XHRcdFx0a2V5LnR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFKTtcbiBcbiBcdGlmICghZXJyKSB7XG4tXHRcdGVyciA9IHJkZXZfYWRkX2tleShyZGV2LCB3ZGV2LCBsaW5rX2lkLCBrZXkuaWR4LFxuLVx0XHRcdFx0ICAga2V5LnR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFLFxuJiM0MztcdFx0ZXJyID0gcmRldl9hZGRfa2V5KHJkZXYsIHdkZXYsIGxpbmtfaWQsIGtleS5pZHgsIGtleS50eXBlLFxuIFx0XHRcdFx0ICAgIG1hY19hZGRyLCBcdTAwMjZrZXkucCk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0R0VOTF9TRVRfRVJSX01TRyhpbmZvLCBcJiMzNDtrZXkgYWRkaXRpb24gZmFpbGVkXCYjMzQ7KTtcbkBAIC01NjY2LDEyICYjNDM7NTY4NSwxMyBAQCBzdGF0aWMgaW50IG5sODAyMTFfZGVsX2tleShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFxuIFx0LyogZm9yIG5vdyAqL1xuIFx0aWYgKGtleS50eXBlICE9IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRSBcdTAwMjZcdTAwMjZcbi1cdCAgICBrZXkudHlwZSAhPSBOTDgwMjExX0tFWVRZUEVfR1JPVVApXG4mIzQzO1x0ICAgIGtleS50eXBlICE9IE5MODAyMTFfS0VZVFlQRV9HUk9VUCBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAga2V5LnR5cGUgIT0gTkw4MDIxMV9LRVlUWVBFX0NJR1RLKSB7XG4mIzQzO1x0XHRHRU5MX1NFVF9FUlJfTVNHKGluZm8sIFwmIzM0O2tleSB0eXBlIG5vdCBwYWlyd2lzZSwgZ3JvdXAgb3IgQ0lHVEtcJiMzNDspO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4gXG4tXHRpZiAoIWNmZzgwMjExX3ZhbGlkX2tleV9pZHgod2Rldiwga2V5LmlkeCxcbi1cdFx0XHRcdCAgICBrZXkudHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0UsXG4tXHRcdFx0XHQgICAgbWFjX2FkZHIpKVxuJiM0MztcdGlmICghY2ZnODAyMTFfdmFsaWRfa2V5X2lkeCh3ZGV2LCBrZXkuaWR4LCBrZXkudHlwZSwgbWFjX2FkZHIpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdGlmICghcmRldi1cdTAwM2VvcHMtXHUwMDNlZGVsX2tleSlcbkBAIC01Njg1LDggJiM0Mzs1NzA1LDcgQEAgc3RhdGljIGludCBubDgwMjExX2RlbF9rZXkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcbiBcdGlmICghZXJyKVxuIFx0XHRlcnIgPSByZGV2X2RlbF9rZXkocmRldiwgd2RldiwgbGlua19pZCwga2V5LmlkeCxcbi1cdFx0XHRcdCAgIGtleS50eXBlID09IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRSxcbi1cdFx0XHRcdCAgIG1hY19hZGRyKTtcbiYjNDM7XHRcdFx0XHQgICBrZXkudHlwZSwgbWFjX2FkZHIpO1xuIFxuICNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxuIFx0aWYgKCFlcnIpIHtcbkBAIC04ODA1LDcgJiM0Mzs4ODI0LDcgQEAgaW50IGNmZzgwMjExX2NoZWNrX3N0YXRpb25fY2hhbmdlKHN0cnVjdCB3aXBoeSAqd2lwaHksXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0LyogV2hlbiB5b3UgcnVuIGludG8gdGhpcywgYWRqdXN0IHRoZSBjb2RlIGJlbG93IGZvciB0aGUgbmV3IGZsYWcgKi9cbi1cdEJVSUxEX0JVR19PTihOTDgwMjExX1NUQV9GTEFHX01BWCAhPSA4KTtcbiYjNDM7XHRCVUlMRF9CVUdfT04oTkw4MDIxMV9TVEFfRkxBR19NQVggIT0gOSk7XG4gXG4gXHRzd2l0Y2ggKHN0YXR5cGUpIHtcbiBcdGNhc2UgQ0ZHODAyMTFfU1RBX01FU0hfUEVFUl9LRVJORUw6XG5AQCAtODg5OSw3ICYjNDM7ODkxOCw4IEBAIGludCBjZmc4MDIxMV9jaGVja19zdGF0aW9uX2NoYW5nZShzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxuIFx0XHRcdFx0ICBCSVQoTkw4MDIxMV9TVEFfRkxBR19TSE9SVF9QUkVBTUJMRSkgfFxuIFx0XHRcdFx0ICBCSVQoTkw4MDIxMV9TVEFfRkxBR19XTUUpIHxcbiBcdFx0XHRcdCAgQklUKE5MODAyMTFfU1RBX0ZMQUdfTUZQKSB8XG4tXHRcdFx0XHQgIEJJVChOTDgwMjExX1NUQV9GTEFHX1NQUF9BTVNEVSkpKVxuJiM0MztcdFx0XHRcdCAgQklUKE5MODAyMTFfU1RBX0ZMQUdfU1BQX0FNU0RVKSB8XG4mIzQzO1x0XHRcdFx0ICBCSVQoTkw4MDIxMV9TVEFfRkxBR19DSVApKSlcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdFx0LyogYnV0IGF1dGhlbnRpY2F0ZWQvYXNzb2NpYXRlZCBvbmx5IGlmIGRyaXZlciBoYW5kbGVzIGl0ICovXG5AQCAtOTI3Niw2ICYjNDM7OTI5NiwyMiBAQCBzdGF0aWMgaW50IG5sODAyMTFfc2V0X3N0YXRpb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdFx0XHRubGFfZ2V0X3UxNihpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9FTUxfQ0FQQUJJTElUWV0pO1xuIFx0fVxuIFxuJiM0MztcdGlmIChwYXJhbXMuc3RhX2ZsYWdzX21hc2sgXHUwMDI2IEJJVChOTDgwMjExX1NUQV9GTEFHX0NJUCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHBhcmFtcy5zdGFfZmxhZ3Nfc2V0IFx1MDAyNiBCSVQoTkw4MDIxMV9TVEFfRkxBR19DSVApKSB7XG4mIzQzO1x0XHRpZiAoIWNmZzgwMjExX2NpZ3RrX3N1cHBvcnRlZCh3ZGV2LCBpbmZvKSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdFx0LyogQ0lQIGNhcGFiaWxpdGllcyBhcmUgcmVxdWlyZWQgaWYgQ0lQIGlzIGJlaW5nIGVuYWJsZWQgKi9cbiYjNDM7XHRcdGlmIChpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9DSVBfQ0FQQUJJTElUSUVTXSkge1xuJiM0MztcdFx0XHRwYXJhbXMubGlua19zdGFfcGFyYW1zLmNpcF9jYXBfc2V0ID0gdHJ1ZTtcbiYjNDM7XHRcdFx0cGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5jaXBfY2FwID1cbiYjNDM7XHRcdFx0XHRubGFfZ2V0X3U4KGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0NJUF9DQVBBQklMSVRJRVNdKTtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdEdFTkxfU0VUX0VSUl9NU0coaW5mbywgXCYjMzQ7Tm8gQ0lQIGNhcGFiaWxpdGllcyBwcm92aWRlZFwmIzM0Oyk7XG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4gXHRpZiAoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfQUlSVElNRV9XRUlHSFRdKVxuIFx0XHRwYXJhbXMuYWlydGltZV93ZWlnaHQgPVxuIFx0XHRcdG5sYV9nZXRfdTE2KGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0FJUlRJTUVfV0VJR0hUXSk7XG5AQCAtOTQ3NSw2ICYjNDM7OTUxMSwyMiBAQCBzdGF0aWMgaW50IG5sODAyMTFfbmV3X3N0YXRpb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdFx0XHRubGFfZ2V0X3UxNihpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9FTUxfQ0FQQUJJTElUWV0pO1xuIFx0fVxuIFxuJiM0MztcdGlmIChwYXJhbXMuc3RhX2ZsYWdzX21hc2sgXHUwMDI2IEJJVChOTDgwMjExX1NUQV9GTEFHX0NJUCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHBhcmFtcy5zdGFfZmxhZ3Nfc2V0IFx1MDAyNiBCSVQoTkw4MDIxMV9TVEFfRkxBR19DSVApKSB7XG4mIzQzO1x0XHRpZiAoIWNmZzgwMjExX2NpZ3RrX3N1cHBvcnRlZCh3ZGV2LCBpbmZvKSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdFx0LyogQ0lQIGNhcGFiaWxpdGllcyBhcmUgcmVxdWlyZWQgaWYgQ0lQIGlzIGVuYWJsZWQgKi9cbiYjNDM7XHRcdGlmIChpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9DSVBfQ0FQQUJJTElUSUVTXSkge1xuJiM0MztcdFx0XHRwYXJhbXMubGlua19zdGFfcGFyYW1zLmNpcF9jYXBfc2V0ID0gdHJ1ZTtcbiYjNDM7XHRcdFx0cGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5jaXBfY2FwID1cbiYjNDM7XHRcdFx0XHRubGFfZ2V0X3U4KGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0NJUF9DQVBBQklMSVRJRVNdKTtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdEdFTkxfU0VUX0VSUl9NU0coaW5mbywgXCYjMzQ7Tm8gQ0lQIGNhcGFiaWxpdGllcyBwcm92aWRlZFwmIzM0Oyk7XG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4gXHRpZiAoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfSEVfNkdIWl9DQVBBQklMSVRZXSlcbiBcdFx0cGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5oZV82Z2h6X2NhcGEgPVxuIFx0XHRcdG5sYV9kYXRhKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0hFXzZHSFpfQ0FQQUJJTElUWV0pO1xuQEAgLTk1NTIsNyAmIzQzOzk2MDQsNyBAQCBzdGF0aWMgaW50IG5sODAyMTFfbmV3X3N0YXRpb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHQvKiBXaGVuIHlvdSBydW4gaW50byB0aGlzLCBhZGp1c3QgdGhlIGNvZGUgYmVsb3cgZm9yIHRoZSBuZXcgZmxhZyAqL1xuLVx0QlVJTERfQlVHX09OKE5MODAyMTFfU1RBX0ZMQUdfTUFYICE9IDgpO1xuJiM0MztcdEJVSUxEX0JVR19PTihOTDgwMjExX1NUQV9GTEFHX01BWCAhPSA5KTtcbiBcbiBcdHN3aXRjaCAod2Rldi1cdTAwM2VpZnR5cGUpIHtcbiBcdGNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6XG5AQCAtOTU4MSw2ICYjNDM7OTYzMywxMCBAQCBzdGF0aWMgaW50IG5sODAyMTFfbmV3X3N0YXRpb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdFx0ICAgIHBhcmFtcy5zdGFfZmxhZ3NfbWFzayBcdTAwMjYgQklUKE5MODAyMTFfU1RBX0ZMQUdfU1BQX0FNU0RVKSlcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiYjNDM7XHRcdGlmIChwYXJhbXMuc3RhX2ZsYWdzX21hc2sgXHUwMDI2IEJJVChOTDgwMjExX1NUQV9GTEFHX0NJUCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgIWNmZzgwMjExX2NpZ3RrX3N1cHBvcnRlZCh3ZGV2LCBpbmZvKSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuIFx0XHQvKiBPbGRlciB1c2Vyc3BhY2UsIG9yIHVzZXJzcGFjZSB3YW50aW5nIHRvIGJlIGNvbXBhdGlibGUgd2l0aFxuIFx0XHQgKiAhTkw4MDIxMV9GRUFUVVJFX0ZVTExfQVBfQ0xJRU5UX1NUQVRFLCB3aWxsIG5vdCBzZXQgdGhlIGF1dGhcbiBcdFx0ICogYW5kIGFzc29jIGZsYWdzIGluIHRoZSBtYXNrLCBidXQgYXNzdW1lcyB0aGUgc3RhdGlvbiB3aWxsIGJlXG5AQCAtMTMzMDcsNiAmIzQzOzEzMzYzLDEzIEBAIHN0YXRpYyBpbnQgbmw4MDIxMV9hc3NvY2lhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdFx0cmVxLmZsYWdzIHw9IEFTU09DX1JFUV9TUFBfQU1TRFU7XG4gXHR9XG4gXG4mIzQzO1x0aWYgKG5sYV9nZXRfZmxhZyhpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9BU1NPQ19DSVBdKSkge1xuJiM0MztcdFx0aWYgKCFjZmc4MDIxMV9jaWd0a19zdXBwb3J0ZWQoZGV2LVx1MDAzZWllZWU4MDIxMV9wdHIsIGluZm8pKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0XHRyZXEuZmxhZ3MgfD0gQVNTT0NfUkVRX0NJUDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0cmVxLmxpbmtfaWQgPSBubDgwMjExX2xpbmtfaWRfb3JfaW52YWxpZChpbmZvLVx1MDAzZWF0dHJzKTtcbiBcbiBcdGlmIChpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9NTE9fTElOS1NdKSB7XG5AQCAtMTkxNzQsNiAmIzQzOzE5MjM3LDIzIEBAIG5sODAyMTFfYWRkX21vZF9saW5rX3N0YXRpb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyxcbiBcdFx0cGFyYW1zLmhlXzZnaHpfY2FwYSA9XG4gXHRcdFx0bmxhX2RhdGEoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfSEVfNkdIWl9DQVBBQklMSVRZXSk7XG4gXG4mIzQzO1x0aWYgKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0NJUF9DQVBBQklMSVRJRVNdKSB7XG4mIzQzO1x0XHRzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LVx1MDAzZWllZWU4MDIxMV9wdHI7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFjZmc4MDIxMV9jaWd0a19zdXBwb3J0ZWQod2RldiwgaW5mbykpXG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRcdHBhcmFtcy5jaXBfY2FwX3NldCA9IHRydWU7XG4mIzQzO1x0XHRwYXJhbXMuY2lwX2NhcCA9XG4mIzQzO1x0XHRcdG5sYV9nZXRfdTgoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfQ0lQX0NBUEFCSUxJVElFU10pO1xuJiM0MztcbiYjNDM7XHRcdC8qIE9ubHkgcGVybWl0IENJUCBjYXBhYmlsaXRpZXMgd2hlbiBhZGRpbmcgbGluayBzdGF0aW9ucyAqL1xuJiM0MztcdFx0aWYgKCFhZGQpIHtcbiYjNDM7XHRcdFx0R0VOTF9TRVRfRVJSX01TRyhpbmZvLCBcJiMzNDtDYW5ub3QgbW9kaWZ5IENJUCBjYXBhYmlsaXRpZXNcJiMzNDspO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuIFx0aWYgKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX09QTU9ERV9OT1RJRl0pIHtcbiBcdFx0cGFyYW1zLm9wbW9kZV9ub3RpZl91c2VkID0gdHJ1ZTtcbiBcdFx0cGFyYW1zLm9wbW9kZV9ub3RpZiA9XG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3JkZXYtb3BzLmggYi9uZXQvd2lyZWxlc3MvcmRldi1vcHMuaFxuaW5kZXggNmMzYmFkOGIyZDZmNi4uZDQ5MzNiYmJmMGU3ZSAxMDA2NDRcbi0tLSBhL25ldC93aXJlbGVzcy9yZGV2LW9wcy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvd2lyZWxlc3MvcmRldi1vcHMuaFxuQEAgLTc4LDQyICYjNDM7NzgsNDMgQEAgcmRldl9jaGFuZ2VfdmlydHVhbF9pbnRmKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbiBcbiBzdGF0aWMgaW5saW5lIGludCByZGV2X2FkZF9rZXkoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuIFx0XHRcdCAgICAgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LCBpbnQgbGlua19pZCxcbi1cdFx0XHQgICAgICAgdTgga2V5X2luZGV4LCBib29sIHBhaXJ3aXNlLCBjb25zdCB1OCAqbWFjX2FkZHIsXG4tXHRcdFx0ICAgICAgIHN0cnVjdCBrZXlfcGFyYW1zICpwYXJhbXMpXG4mIzQzO1x0XHRcdCAgICAgICB1OCBrZXlfaW5kZXgsIGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLFxuJiM0MztcdFx0XHQgICAgICAgY29uc3QgdTggKm1hY19hZGRyLCBzdHJ1Y3Qga2V5X3BhcmFtcyAqcGFyYW1zKVxuIHtcbiBcdGludCByZXQ7XG4tXHR0cmFjZV9yZGV2X2FkZF9rZXkoXHUwMDI2cmRldi1cdTAwM2V3aXBoeSwgd2RldiwgbGlua19pZCwga2V5X2luZGV4LCBwYWlyd2lzZSxcbiYjNDM7XHR0cmFjZV9yZGV2X2FkZF9rZXkoXHUwMDI2cmRldi1cdTAwM2V3aXBoeSwgd2RldiwgbGlua19pZCwga2V5X2luZGV4LCB0eXBlLFxuIFx0XHRcdCAgIG1hY19hZGRyLCBwYXJhbXMtXHUwMDNlbW9kZSk7XG4gXHRyZXQgPSByZGV2LVx1MDAzZW9wcy1cdTAwM2VhZGRfa2V5KFx1MDAyNnJkZXYtXHUwMDNld2lwaHksIHdkZXYsIGxpbmtfaWQsIGtleV9pbmRleCxcbi1cdFx0XHRcdCAgcGFpcndpc2UsIG1hY19hZGRyLCBwYXJhbXMpO1xuJiM0MztcdFx0XHRcdCAgdHlwZSwgbWFjX2FkZHIsIHBhcmFtcyk7XG4gXHR0cmFjZV9yZGV2X3JldHVybl9pbnQoXHUwMDI2cmRldi1cdTAwM2V3aXBoeSwgcmV0KTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgaW50XG4gcmRldl9nZXRfa2V5KHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldixcbi1cdCAgICAgaW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCwgYm9vbCBwYWlyd2lzZSwgY29uc3QgdTggKm1hY19hZGRyLFxuLVx0ICAgICB2b2lkICpjb29raWUsXG4mIzQzO1x0ICAgICBpbnQgbGlua19pZCwgdTgga2V5X2luZGV4LCBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSxcbiYjNDM7XHQgICAgIGNvbnN0IHU4ICptYWNfYWRkciwgdm9pZCAqY29va2llLFxuIFx0ICAgICB2b2lkICgqY2FsbGJhY2spKHZvaWQgKmNvb2tpZSwgc3RydWN0IGtleV9wYXJhbXMqKSlcbiB7XG4gXHRpbnQgcmV0O1xuLVx0dHJhY2VfcmRldl9nZXRfa2V5KFx1MDAyNnJkZXYtXHUwMDNld2lwaHksIHdkZXYsIGxpbmtfaWQsIGtleV9pbmRleCwgcGFpcndpc2UsXG4mIzQzO1x0dHJhY2VfcmRldl9nZXRfa2V5KFx1MDAyNnJkZXYtXHUwMDNld2lwaHksIHdkZXYsIGxpbmtfaWQsIGtleV9pbmRleCwgdHlwZSxcbiBcdFx0XHQgICBtYWNfYWRkcik7XG4gXHRyZXQgPSByZGV2LVx1MDAzZW9wcy1cdTAwM2VnZXRfa2V5KFx1MDAyNnJkZXYtXHUwMDNld2lwaHksIHdkZXYsIGxpbmtfaWQsIGtleV9pbmRleCxcbi1cdFx0XHRcdCAgcGFpcndpc2UsIG1hY19hZGRyLCBjb29raWUsIGNhbGxiYWNrKTtcbiYjNDM7XHRcdFx0XHQgdHlwZSwgbWFjX2FkZHIsIGNvb2tpZSwgY2FsbGJhY2spO1xuIFx0dHJhY2VfcmRldl9yZXR1cm5faW50KFx1MDAyNnJkZXYtXHUwMDNld2lwaHksIHJldCk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGludCByZGV2X2RlbF9rZXkoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuIFx0XHRcdCAgICAgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LCBpbnQgbGlua19pZCxcbi1cdFx0XHQgICAgICAgdTgga2V5X2luZGV4LCBib29sIHBhaXJ3aXNlLCBjb25zdCB1OCAqbWFjX2FkZHIpXG4mIzQzO1x0XHRcdCAgICAgICB1OCBrZXlfaW5kZXgsIGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLFxuJiM0MztcdFx0XHQgICAgICAgY29uc3QgdTggKm1hY19hZGRyKVxuIHtcbiBcdGludCByZXQ7XG4tXHR0cmFjZV9yZGV2X2RlbF9rZXkoXHUwMDI2cmRldi1cdTAwM2V3aXBoeSwgd2RldiwgbGlua19pZCwga2V5X2luZGV4LCBwYWlyd2lzZSxcbiYjNDM7XHR0cmFjZV9yZGV2X2RlbF9rZXkoXHUwMDI2cmRldi1cdTAwM2V3aXBoeSwgd2RldiwgbGlua19pZCwga2V5X2luZGV4LCB0eXBlLFxuIFx0XHRcdCAgIG1hY19hZGRyKTtcbiBcdHJldCA9IHJkZXYtXHUwMDNlb3BzLVx1MDAzZWRlbF9rZXkoXHUwMDI2cmRldi1cdTAwM2V3aXBoeSwgd2RldiwgbGlua19pZCwga2V5X2luZGV4LFxuLVx0XHRcdFx0ICBwYWlyd2lzZSwgbWFjX2FkZHIpO1xuJiM0MztcdFx0XHRcdCAgdHlwZSwgbWFjX2FkZHIpO1xuIFx0dHJhY2VfcmRldl9yZXR1cm5faW50KFx1MDAyNnJkZXYtXHUwMDNld2lwaHksIHJldCk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvc21lLmMgYi9uZXQvd2lyZWxlc3Mvc21lLmNcbmluZGV4IDJhNzE5YjVjNDg3ZTMuLjQ1OGY3MmQ4MzUxYWIgMTAwNjQ0XG4tLS0gYS9uZXQvd2lyZWxlc3Mvc21lLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC93aXJlbGVzcy9zbWUuY1xuQEAgLTEzODcsNyAmIzQzOzEzODcsMTUgQEAgdm9pZCBfX2NmZzgwMjExX2Rpc2Nvbm5lY3RlZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqaWUsXG4gXHRcdFx0ICAgIE5MODAyMTFfRVhUX0ZFQVRVUkVfQkVBQ09OX1BST1RFQ1RJT05fQ0xJRU5UKSlcbiBcdFx0XHRtYXhfa2V5X2lkeCA9IDc7XG4gXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjPSBtYXhfa2V5X2lkeDsgaSYjNDM7JiM0MzspXG4tXHRcdFx0cmRldl9kZWxfa2V5KHJkZXYsIHdkZXYsIC0xLCBpLCBmYWxzZSwgTlVMTCk7XG4mIzQzO1x0XHRcdHJkZXZfZGVsX2tleShyZGV2LCB3ZGV2LCAtMSwgaSwgTkw4MDIxMV9LRVlUWVBFX0dST1VQLFxuJiM0MztcdFx0XHRcdCAgICAgTlVMTCk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGNmZzgwMjExX2NpZ3RrX3N1cHBvcnRlZCh3ZGV2LCBOVUxMKSkge1xuJiM0MztcdFx0XHRyZGV2X2RlbF9rZXkocmRldiwgd2RldiwgLTEsIDAsIE5MODAyMTFfS0VZVFlQRV9DSUdUSyxcbiYjNDM7XHRcdFx0XHQgICAgIE5VTEwpO1xuJiM0MztcdFx0XHRyZGV2X2RlbF9rZXkocmRldiwgd2RldiwgLTEsIDEsIE5MODAyMTFfS0VZVFlQRV9DSUdUSyxcbiYjNDM7XHRcdFx0XHQgICAgIE5VTEwpO1xuJiM0MztcdFx0fVxuIFx0fVxuIFxuIFx0cmRldl9zZXRfcW9zX21hcChyZGV2LCBkZXYsIE5VTEwpO1xuZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy90cmFjZS5oIGIvbmV0L3dpcmVsZXNzL3RyYWNlLmhcbmluZGV4IDhjMmE5MWI4NWMzOTYuLmMyMTBjYTFlNDRlMmIgMTAwNjQ0XG4tLS0gYS9uZXQvd2lyZWxlc3MvdHJhY2UuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3dpcmVsZXNzL3RyYWNlLmhcbkBAIC01NTcsMTUgJiM0Mzs1NTcsMTUgQEAgVFJBQ0VfRVZFTlQocmRldl9jaGFuZ2VfdmlydHVhbF9pbnRmLFxuIFxuIERFQ0xBUkVfRVZFTlRfQ0xBU1Moa2V5X2hhbmRsZSxcbiBcdFRQX1BST1RPKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsIGludCBsaW5rX2lkLFxuLVx0XHQgdTgga2V5X2luZGV4LCBib29sIHBhaXJ3aXNlLCBjb25zdCB1OCAqbWFjX2FkZHIpLFxuLVx0VFBfQVJHUyh3aXBoeSwgd2RldiwgbGlua19pZCwga2V5X2luZGV4LCBwYWlyd2lzZSwgbWFjX2FkZHIpLFxuJiM0MztcdFx0IHU4IGtleV9pbmRleCwgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsIGNvbnN0IHU4ICptYWNfYWRkciksXG4mIzQzO1x0VFBfQVJHUyh3aXBoeSwgd2RldiwgbGlua19pZCwga2V5X2luZGV4LCB0eXBlLCBtYWNfYWRkciksXG4gXHRUUF9TVFJVQ1RfX2VudHJ5KFxuIFx0XHRXSVBIWV9FTlRSWVxuIFx0XHRXREVWX0VOVFJZXG4gXHRcdE1BQ19FTlRSWShtYWNfYWRkcilcbiBcdFx0X19maWVsZChpbnQsIGxpbmtfaWQpXG4gXHRcdF9fZmllbGQodTgsIGtleV9pbmRleClcbi1cdFx0X19maWVsZChib29sLCBwYWlyd2lzZSlcbiYjNDM7XHRcdF9fZmllbGQodTgsIHR5cGUpXG4gXHQpLFxuIFx0VFBfZmFzdF9hc3NpZ24oXG4gXHRcdFdJUEhZX0FTU0lHTjtcbkBAIC01NzMsMzggJiM0Mzs1NzMsNDAgQEAgREVDTEFSRV9FVkVOVF9DTEFTUyhrZXlfaGFuZGxlLFxuIFx0XHRNQUNfQVNTSUdOKG1hY19hZGRyLCBtYWNfYWRkcik7XG4gXHRcdF9fZW50cnktXHUwMDNlbGlua19pZCA9IGxpbmtfaWQ7XG4gXHRcdF9fZW50cnktXHUwMDNla2V5X2luZGV4ID0ga2V5X2luZGV4O1xuLVx0XHRfX2VudHJ5LVx1MDAzZXBhaXJ3aXNlID0gcGFpcndpc2U7XG4mIzQzO1x0XHRfX2VudHJ5LVx1MDAzZXR5cGUgPSB0eXBlO1xuIFx0KSxcbiBcdFRQX3ByaW50ayhXSVBIWV9QUl9GTVQgXCYjMzQ7LCBcJiMzNDsgV0RFVl9QUl9GTVQgXCYjMzQ7LCBsaW5rX2lkOiAlZCwgXCYjMzQ7XG4tXHRcdCAgXCYjMzQ7a2V5X2luZGV4OiAldSwgcGFpcndpc2U6ICVzLCBtYWMgYWRkcjogJXBNXCYjMzQ7LFxuJiM0MztcdFx0ICBcJiMzNDtrZXlfaW5kZXg6ICV1LCBwYWlyd2lzZTogJXMsIHR5cGU6ICVkLCBtYWMgYWRkcjogJXBNXCYjMzQ7LFxuIFx0XHQgIFdJUEhZX1BSX0FSRywgV0RFVl9QUl9BUkcsIF9fZW50cnktXHUwMDNlbGlua19pZCxcbi1cdFx0ICBfX2VudHJ5LVx1MDAzZWtleV9pbmRleCwgQk9PTF9UT19TVFIoX19lbnRyeS1cdTAwM2VwYWlyd2lzZSksXG4tXHRcdCAgX19lbnRyeS1cdTAwM2VtYWNfYWRkcilcbiYjNDM7XHRcdCAgX19lbnRyeS1cdTAwM2VrZXlfaW5kZXgsXG4mIzQzO1x0XHQgIEJPT0xfVE9fU1RSKF9fZW50cnktXHUwMDNldHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0UpLFxuJiM0MztcdFx0ICBfX2VudHJ5LVx1MDAzZXR5cGUsIF9fZW50cnktXHUwMDNlbWFjX2FkZHIpXG4gKTtcbiBcbiBERUZJTkVfRVZFTlQoa2V5X2hhbmRsZSwgcmRldl9nZXRfa2V5LFxuIFx0VFBfUFJPVE8oc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwgaW50IGxpbmtfaWQsXG4tXHRcdCB1OCBrZXlfaW5kZXgsIGJvb2wgcGFpcndpc2UsIGNvbnN0IHU4ICptYWNfYWRkciksXG4tXHRUUF9BUkdTKHdpcGh5LCB3ZGV2LCBsaW5rX2lkLCBrZXlfaW5kZXgsIHBhaXJ3aXNlLCBtYWNfYWRkcilcbiYjNDM7XHRcdCB1OCBrZXlfaW5kZXgsIGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLCBjb25zdCB1OCAqbWFjX2FkZHIpLFxuJiM0MztcdFRQX0FSR1Mod2lwaHksIHdkZXYsIGxpbmtfaWQsIGtleV9pbmRleCwgdHlwZSwgbWFjX2FkZHIpXG4gKTtcbiBcbiBERUZJTkVfRVZFTlQoa2V5X2hhbmRsZSwgcmRldl9kZWxfa2V5LFxuIFx0VFBfUFJPVE8oc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwgaW50IGxpbmtfaWQsXG4tXHRcdCB1OCBrZXlfaW5kZXgsIGJvb2wgcGFpcndpc2UsIGNvbnN0IHU4ICptYWNfYWRkciksXG4tXHRUUF9BUkdTKHdpcGh5LCB3ZGV2LCBsaW5rX2lkLCBrZXlfaW5kZXgsIHBhaXJ3aXNlLCBtYWNfYWRkcilcbiYjNDM7XHRcdCB1OCBrZXlfaW5kZXgsIGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLCBjb25zdCB1OCAqbWFjX2FkZHIpLFxuJiM0MztcdFRQX0FSR1Mod2lwaHksIHdkZXYsIGxpbmtfaWQsIGtleV9pbmRleCwgdHlwZSwgbWFjX2FkZHIpXG4gKTtcbiBcbiBUUkFDRV9FVkVOVChyZGV2X2FkZF9rZXksXG4gXHRUUF9QUk9UTyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LCBpbnQgbGlua19pZCxcbi1cdFx0IHU4IGtleV9pbmRleCwgYm9vbCBwYWlyd2lzZSwgY29uc3QgdTggKm1hY19hZGRyLCB1OCBtb2RlKSxcbi1cdFRQX0FSR1Mod2lwaHksIHdkZXYsIGxpbmtfaWQsIGtleV9pbmRleCwgcGFpcndpc2UsIG1hY19hZGRyLCBtb2RlKSxcbiYjNDM7XHRcdCB1OCBrZXlfaW5kZXgsIGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLCBjb25zdCB1OCAqbWFjX2FkZHIsXG4mIzQzO1x0XHQgdTggbW9kZSksXG4mIzQzO1x0VFBfQVJHUyh3aXBoeSwgd2RldiwgbGlua19pZCwga2V5X2luZGV4LCB0eXBlLCBtYWNfYWRkciwgbW9kZSksXG4gXHRUUF9TVFJVQ1RfX2VudHJ5KFxuIFx0XHRXSVBIWV9FTlRSWVxuIFx0XHRXREVWX0VOVFJZXG4gXHRcdE1BQ19FTlRSWShtYWNfYWRkcilcbiBcdFx0X19maWVsZChpbnQsIGxpbmtfaWQpXG4gXHRcdF9fZmllbGQodTgsIGtleV9pbmRleClcbi1cdFx0X19maWVsZChib29sLCBwYWlyd2lzZSlcbiYjNDM7XHRcdF9fZmllbGQodTgsIHR5cGUpXG4gXHRcdF9fZmllbGQodTgsIG1vZGUpXG4gXHQpLFxuIFx0VFBfZmFzdF9hc3NpZ24oXG5AQCAtNjEzLDE1ICYjNDM7NjE1LDE2IEBAIFRSQUNFX0VWRU5UKHJkZXZfYWRkX2tleSxcbiBcdFx0TUFDX0FTU0lHTihtYWNfYWRkciwgbWFjX2FkZHIpO1xuIFx0XHRfX2VudHJ5LVx1MDAzZWxpbmtfaWQgPSBsaW5rX2lkO1xuIFx0XHRfX2VudHJ5LVx1MDAzZWtleV9pbmRleCA9IGtleV9pbmRleDtcbi1cdFx0X19lbnRyeS1cdTAwM2VwYWlyd2lzZSA9IHBhaXJ3aXNlO1xuJiM0MztcdFx0X19lbnRyeS1cdTAwM2V0eXBlID0gdHlwZTtcbiBcdFx0X19lbnRyeS1cdTAwM2Vtb2RlID0gbW9kZTtcbiBcdCksXG4gXHRUUF9wcmludGsoV0lQSFlfUFJfRk1UIFwmIzM0OywgXCYjMzQ7IFdERVZfUFJfRk1UIFwmIzM0OywgbGlua19pZDogJWQsIFwmIzM0O1xuLVx0XHQgIFwmIzM0O2tleV9pbmRleDogJXUsIG1vZGU6ICV1LCBwYWlyd2lzZTogJXMsIFwmIzM0O1xuJiM0MztcdFx0ICBcJiMzNDtrZXlfaW5kZXg6ICV1LCBtb2RlOiAldSwgcGFpcndpc2U6ICVzLCB0eXBlOiAlZCwgXCYjMzQ7XG4gXHRcdCAgXCYjMzQ7bWFjIGFkZHI6ICVwTVwmIzM0OyxcbiBcdFx0ICBXSVBIWV9QUl9BUkcsIFdERVZfUFJfQVJHLCBfX2VudHJ5LVx1MDAzZWxpbmtfaWQsXG4gXHRcdCAgX19lbnRyeS1cdTAwM2VrZXlfaW5kZXgsIF9fZW50cnktXHUwMDNlbW9kZSxcbi1cdFx0ICBCT09MX1RPX1NUUihfX2VudHJ5LVx1MDAzZXBhaXJ3aXNlKSwgX19lbnRyeS1cdTAwM2VtYWNfYWRkcilcbiYjNDM7XHRcdCAgQk9PTF9UT19TVFIoX19lbnRyeS1cdTAwM2V0eXBlID09IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRSksXG4mIzQzO1x0XHQgIF9fZW50cnktXHUwMDNldHlwZSwgX19lbnRyeS1cdTAwM2VtYWNfYWRkcilcbiApO1xuIFxuIFRSQUNFX0VWRU5UKHJkZXZfc2V0X2RlZmF1bHRfa2V5LFxuZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy91dGlsLmMgYi9uZXQvd2lyZWxlc3MvdXRpbC5jXG5pbmRleCAzZTU4NGQwY2EzZTI2Li5kZDE2NmMzNTI5MTBmIDEwMDY0NFxuLS0tIGEvbmV0L3dpcmVsZXNzL3V0aWwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3dpcmVsZXNzL3V0aWwuY1xuQEAgLTI1OCw4ICYjNDM7MjU4LDI0IEBAIHN0YXRpYyBib29sIGNmZzgwMjExX2lndGtfY2lwaGVyX3N1cHBvcnRlZChzdHJ1Y3Qgd2lwaHkgKndpcGh5KVxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbiYjNDM7Ym9vbCBjZmc4MDIxMV9jaWd0a19zdXBwb3J0ZWQoc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcbiYjNDM7XHRcdFx0ICAgICAgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCB3aXBoeV9pZnR5cGVfZXh0X2NhcGFiICpleHRfY2FwYWIgPVxuJiM0MztcdFx0Y2ZnODAyMTFfZ2V0X2lmdHlwZV9leHRfY2FwYSh3ZGV2LVx1MDAzZXdpcGh5LCB3ZGV2LVx1MDAzZWlmdHlwZSk7XG4mIzQzO1xuJiM0MztcdGlmIChleHRfY2FwYWIgXHUwMDI2XHUwMDI2IGV4dF9jYXBhYi1cdTAwM2VjaXBfc3VwcG9ydGVkKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MztcdGlmIChpbmZvKVxuJiM0MztcdFx0R0VOTF9TRVRfRVJSX01TRyhpbmZvLFxuJiM0MztcdFx0XHRcdCBcJiMzNDtDb250cm9sIEludGVncml0eSBQcm90b2NvbCBub3Qgc3VwcG9ydGVkXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4mIzQzO1xuIGJvb2wgY2ZnODAyMTFfdmFsaWRfa2V5X2lkeChzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuLVx0XHRcdCAgICBpbnQga2V5X2lkeCwgYm9vbCBwYWlyd2lzZSxcbiYjNDM7XHRcdFx0ICAgIGludCBrZXlfaWR4LCBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSxcbiBcdFx0XHQgICAgY29uc3QgdTggKm1hY19hZGRyKVxuIHtcbiBcdGlmIChXQVJOX09OKCF3ZGV2KSlcbkBAIC0yNzIsMTMgJiM0MzsyODgsMjQgQEAgYm9vbCBjZmc4MDIxMV92YWxpZF9rZXlfaWR4KHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4gXHQgKiBDYW4mIzM5O3QgZGlmZmVyZW50aWF0ZSBjaXBoZXJzIGhlcmUgc28gYWxsb3cgMC4uMy5cbiBcdCAqIFBhaXJ3aXNlIGtleXMgbXVzdCBiZSBmb3IgYSBzdGF0aW9uIChNQUMgYWRkcmVzcyBnaXZlbikuXG4gXHQgKi9cbi1cdGlmIChwYWlyd2lzZSkge1xuJiM0MztcdGlmICh0eXBlID09IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRSkge1xuIFx0XHRpZiAoIW1hY19hZGRyKVxuIFx0XHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdFx0cmV0dXJuIGtleV9pZHggXHUwMDNjIDQ7XG4gXHR9XG4gXG4mIzQzO1x0LyogQ2hlY2sgdGhlIHdkZXYvaWZ0eXBlIHN1cHBvcnRzIENJR1RLICovXG4mIzQzO1x0aWYgKHR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX0NJR1RLKSB7XG4mIzQzO1x0XHRpZiAoIWNmZzgwMjExX2NpZ3RrX3N1cHBvcnRlZCh3ZGV2LCBOVUxMKSlcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRcdGlmIChrZXlfaWR4IFx1MDAzZT0gMilcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRcdC8qIGZhbGx0aHJvdWdoIGZvciBtYWNfYWRkciBjaGVja3MgKi9cbiYjNDM7XHR9XG4mIzQzO1xuIFx0LypcbiBcdCAqIEZvciBncm91cCBrZXlzLCBtYWNfYWRkcj09TlVMTCBtZWFucyBzZXR0aW5nIGEgZ3JvdXAga2V5XG4gXHQgKiBmb3IgVFgsIHdoaWNoIGlzIG9ubHkgc3VwcG9ydGVkIG9uIHNvbWUgaW50ZXJmYWNlIHR5cGVzLFxuQEAgLTM0Myw5ICYjNDM7MzcwLDEyIEBAIGJvb2wgY2ZnODAyMTFfdmFsaWRfa2V5X2lkeChzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuIGludCBjZmc4MDIxMV92YWxpZGF0ZV9rZXlfc2V0dGluZ3Moc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuIFx0XHRcdFx0ICAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcbiBcdFx0XHRcdCAgIHN0cnVjdCBrZXlfcGFyYW1zICpwYXJhbXMsIGludCBrZXlfaWR4LFxuLVx0XHRcdFx0ICAgYm9vbCBwYWlyd2lzZSwgY29uc3QgdTggKm1hY19hZGRyKVxuJiM0MztcdFx0XHRcdCAgIGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLFxuJiM0MztcdFx0XHRcdCAgIGNvbnN0IHU4ICptYWNfYWRkcilcbiB7XG4tXHRpZiAoIWNmZzgwMjExX3ZhbGlkX2tleV9pZHgod2Rldiwga2V5X2lkeCwgcGFpcndpc2UsIG1hY19hZGRyKSlcbiYjNDM7XHRib29sIHBhaXJ3aXNlID0gdHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0U7XG4mIzQzO1xuJiM0MztcdGlmICghY2ZnODAyMTFfdmFsaWRfa2V5X2lkeCh3ZGV2LCBrZXlfaWR4LCB0eXBlLCBtYWNfYWRkcikpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0c3dpdGNoIChwYXJhbXMtXHUwMDNlY2lwaGVyKSB7XG5AQCAtMTE3Miw3ICYjNDM7MTIwMiw3IEBAIHZvaWQgY2ZnODAyMTFfdXBsb2FkX2Nvbm5lY3Rfa2V5cyhzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2KVxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgNDsgaSYjNDM7JiM0MzspIHtcbiBcdFx0aWYgKCF3ZGV2LVx1MDAzZWNvbm5lY3Rfa2V5cy1cdTAwM2VwYXJhbXNbaV0uY2lwaGVyKVxuIFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRpZiAocmRldl9hZGRfa2V5KHJkZXYsIHdkZXYsIC0xLCBpLCBmYWxzZSwgTlVMTCxcbiYjNDM7XHRcdGlmIChyZGV2X2FkZF9rZXkocmRldiwgd2RldiwgLTEsIGksIE5MODAyMTFfS0VZVFlQRV9HUk9VUCwgTlVMTCxcbiBcdFx0XHRcdCBcdTAwMjZ3ZGV2LVx1MDAzZWNvbm5lY3Rfa2V5cy1cdTAwM2VwYXJhbXNbaV0pKSB7XG4gXHRcdFx0bmV0ZGV2X2VycihkZXYsIFwmIzM0O2ZhaWxlZCB0byBzZXQga2V5ICVkXFxuXCYjMzQ7LCBpKTtcbiBcdFx0XHRjb250aW51ZTtcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvd2V4dC1jb21wYXQuYyBiL25ldC93aXJlbGVzcy93ZXh0LWNvbXBhdC5jXG5pbmRleCBkNDViYzA4YzBkZTQ5Li5lYzIzODlmNmI4YjE4IDEwMDY0NFxuLS0tIGEvbmV0L3dpcmVsZXNzL3dleHQtY29tcGF0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC93aXJlbGVzcy93ZXh0LWNvbXBhdC5jXG5AQCAtNDAxLDYgJiM0Mzs0MDEsOCBAQCBzdGF0aWMgaW50IGNmZzgwMjExX3NldF9lbmNyeXB0aW9uKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbiBcdFx0XHRcdCAgIGludCBpZHgsIHN0cnVjdCBrZXlfcGFyYW1zICpwYXJhbXMpXG4ge1xuIFx0c3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi1cdTAwM2VpZWVlODAyMTFfcHRyO1xuJiM0MztcdGVudW0gbmw4MDIxMV9rZXlfdHlwZSBrZXlfdHlwZSA9XG4mIzQzO1x0XHRwYWlyd2lzZSA/IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRSA6IE5MODAyMTFfS0VZVFlQRV9HUk9VUDtcbiBcdGludCBlcnIsIGk7XG4gXHRib29sIHJlam9pbiA9IGZhbHNlO1xuIFxuQEAgLTQ1NCwxMSAmIzQzOzQ1NiwxMSBAQCBzdGF0aWMgaW50IGNmZzgwMjExX3NldF9lbmNyeXB0aW9uKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbiBcdFx0XHRcdHJlam9pbiA9IHRydWU7XG4gXHRcdFx0fVxuIFxuLVx0XHRcdGlmICghY2ZnODAyMTFfdmFsaWRfa2V5X2lkeCh3ZGV2LCBpZHgsIHBhaXJ3aXNlLCBhZGRyKSlcbiYjNDM7XHRcdFx0aWYgKCFjZmc4MDIxMV92YWxpZF9rZXlfaWR4KHdkZXYsIGlkeCwga2V5X3R5cGUsIGFkZHIpKVxuIFx0XHRcdFx0ZXJyID0gLUVOT0VOVDtcbiBcdFx0XHRlbHNlXG4tXHRcdFx0XHRlcnIgPSByZGV2X2RlbF9rZXkocmRldiwgd2RldiwgLTEsIGlkeCwgcGFpcndpc2UsXG4tXHRcdFx0XHRcdFx0ICAgYWRkcik7XG4mIzQzO1x0XHRcdFx0ZXJyID0gcmRldl9kZWxfa2V5KHJkZXYsIHdkZXYsIC0xLCBpZHgsXG4mIzQzO1x0XHRcdFx0XHRcdCAgIGtleV90eXBlLCBhZGRyKTtcbiBcdFx0fVxuIFx0XHR3ZGV2LVx1MDAzZXdleHQuY29ubmVjdC5wcml2YWN5ID0gZmFsc2U7XG4gXHRcdC8qXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjA6MDI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O0NGRzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExX0hXU0lNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmw4MDIxMV9uZXdfa2V5JiMzNDssCiAgICAmIzM0O25sODAyMTFfZGVsX2tleSYjMzQ7LAogICAgJiMzNDtubDgwMjExX2dldF9rZXkmIzM0OywKICAgICYjMzQ7bmw4MDIxMV9zZXRfc3RhdGlvbiYjMzQ7LAogICAgJiMzNDtubDgwMjExX25ld19zdGF0aW9uJiMzNDssCiAgICAmIzM0O25sODAyMTFfYXNzb2NpYXRlJiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9rZXlfbGluayYjMzQ7LAogICAgJiMzNDtpZWVlODAyMTFfZ3RrX3Jla2V5X2FkZCYjMzQ7LAogICAgJiMzNDtpZWVlODAyMTFfcHV0X2NpcF9jYXAmIzM0OywKICAgICYjMzQ7Y2ZnODAyMTFfY2lndGtfc3VwcG9ydGVkJiMzNDssCiAgICAmIzM0O2NmZzgwMjExX3ZhbGlkX2tleV9pZHgmIzM0OywKICAgICYjMzQ7Y2ZnODAyMTFfdmFsaWRhdGVfa2V5X3NldHRpbmdzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgdGhlIENvbnRyb2wgSW50ZWdyaXR5IFByb3RvY29sIChDSVApIGluIGNmZzgwMjExIGFuZCBtYWM4MDIxMSwgaW5jbHVkaW5nIGEgbmV3IGtleSB0eXBlIGBOTDgwMjExX0tFWVRZUEVfQ0lHVEtgIGFuZCBuZXcgbmV0bGluayBhdHRyaWJ1dGVzLiBJdCBtb2RpZmllcyBrZXkgaGFuZGxpbmcgbG9naWMgYWNyb3NzIHRoZSB3aXJlbGVzcyBzdGFjayBhbmQgdXBkYXRlcyBgbWFjODAyMTFfaHdzaW1gIHRvIGFkdmVydGlzZSBDSVAgc3VwcG9ydCwgbWFraW5nIGl0IHRlc3RhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgbmw4MDIxMSBuZXRsaW5rIGNvbW1hbmRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjliNGQ5ZDM1MmM3MDIyNTM5YzMwMmRkMDUxOGUyMjYwMzc1OWQyMApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDEgMjA6MDI6MjUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NmZzgwMjExLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NmZzgwMjExLmMKaW5kZXggZWNkZTkxMTU5YjU0Ni4uZDRlOTQyM2ZjNWU0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jZmc4MDIxMS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvY2ZnODAyMTEuYwpAQCAtMTEyNSwxMyAmIzQzOzExMjUsMTUgQEAgdm9pZCBhdGg2a2xfY2ZnODAyMTFfY2hfc3dpdGNoX25vdGlmeShzdHJ1Y3QgYXRoNmtsX3ZpZiAqdmlmLCBpbnQgZnJlcSwKIH0KIAogc3RhdGljIGludCBhdGg2a2xfY2ZnODAyMTFfYWRkX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LAotCQkJCSAgIGludCBsaW5rX2lkLCB1OCBrZXlfaW5kZXgsIGJvb2wgcGFpcndpc2UsCiYjNDM7CQkJCSAgIGludCBsaW5rX2lkLCB1OCBrZXlfaW5kZXgsCiYjNDM7CQkJCSAgIGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLAogCQkJCSAgIGNvbnN0IHU4ICptYWNfYWRkciwKIAkJCQkgICBzdHJ1Y3Qga2V5X3BhcmFtcyAqcGFyYW1zKQogewogCXN0cnVjdCBhdGg2a2wgKmFyID0gYXRoNmtsX3ByaXYod2Rldi0mZ3Q7bmV0ZGV2KTsKIAlzdHJ1Y3QgYXRoNmtsX3ZpZiAqdmlmID0gbmV0ZGV2X3ByaXYod2Rldi0mZ3Q7bmV0ZGV2KTsKIAlzdHJ1Y3QgYXRoNmtsX2tleSAqa2V5ID0gTlVMTDsKJiM0MzsJYm9vbCBwYWlyd2lzZSA9IHR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFOwogCWludCBzZXFfbGVuOwogCXU4IGtleV91c2FnZTsKIAl1OCBrZXlfdHlwZTsKQEAgLTEyNTAsNyAmIzQzOzEyNTIsOCBAQCBzdGF0aWMgaW50IGF0aDZrbF9jZmc4MDIxMV9hZGRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZQogfQogCiBzdGF0aWMgaW50IGF0aDZrbF9jZmc4MDIxMV9kZWxfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsCi0JCQkJICAgaW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCwgYm9vbCBwYWlyd2lzZSwKJiM0MzsJCQkJICAgaW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCwKJiM0MzsJCQkJICAgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsCiAJCQkJICAgY29uc3QgdTggKm1hY19hZGRyKQogewogCXN0cnVjdCBhdGg2a2wgKmFyID0gYXRoNmtsX3ByaXYod2Rldi0mZ3Q7bmV0ZGV2KTsKQEAgLTEyODAsNyAmIzQzOzEyODMsOCBAQCBzdGF0aWMgaW50IGF0aDZrbF9jZmc4MDIxMV9kZWxfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZQogfQogCiBzdGF0aWMgaW50IGF0aDZrbF9jZmc4MDIxMV9nZXRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsCi0JCQkJICAgaW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCwgYm9vbCBwYWlyd2lzZSwKJiM0MzsJCQkJICAgaW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCwKJiM0MzsJCQkJICAgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsCiAJCQkJICAgY29uc3QgdTggKm1hY19hZGRyLCB2b2lkICpjb29raWUsCiAJCQkJICAgdm9pZCAoKmNhbGxiYWNrKSAodm9pZCAqY29va2llLAogCQkJCQkJICAgICBzdHJ1Y3Qga2V5X3BhcmFtcyAqKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC93aWw2MjEwL2NmZzgwMjExLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvd2lsNjIxMC9jZmc4MDIxMS5jCmluZGV4IDVmMmJkOWEzMWZhZjYuLmMwOTc4MzFiN2ZhZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC93aWw2MjEwL2NmZzgwMjExLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3dpbDYyMTAvY2ZnODAyMTEuYwpAQCAtMTYyMSwxMSAmIzQzOzE2MjEsMTMgQEAgc3RhdGljIHZvaWQgd2lsX2RlbF9yeF9rZXkodTgga2V5X2luZGV4LCBlbnVtIHdtaV9rZXlfdXNhZ2Uga2V5X3VzYWdlLAogCiBzdGF0aWMgaW50IHdpbF9jZmc4MDIxMV9hZGRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksCiAJCQkJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwgaW50IGxpbmtfaWQsCi0JCQkJdTgga2V5X2luZGV4LCBib29sIHBhaXJ3aXNlLAomIzQzOwkJCQl1OCBrZXlfaW5kZXgsCiYjNDM7CQkJCWVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLAogCQkJCWNvbnN0IHU4ICptYWNfYWRkciwKIAkJCQlzdHJ1Y3Qga2V5X3BhcmFtcyAqcGFyYW1zKQogewogCWludCByYzsKJiM0MzsJYm9vbCBwYWlyd2lzZSA9IHR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFOwogCXN0cnVjdCB3aWw2MjEwX3ByaXYgKndpbCA9IHdpcGh5X3RvX3dpbCh3aXBoeSk7CiAJc3RydWN0IHdpbDYyMTBfdmlmICp2aWYgPSB3ZGV2X3RvX3ZpZih3aWwsIHdkZXYpOwogCWVudW0gd21pX2tleV91c2FnZSBrZXlfdXNhZ2UgPSB3aWxfZGV0ZWN0X2tleV91c2FnZSh3ZGV2LCBwYWlyd2lzZSk7CkBAIC0xNjk2LDEyICYjNDM7MTY5OCwxNCBAQCBzdGF0aWMgaW50IHdpbF9jZmc4MDIxMV9hZGRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksCiAKIHN0YXRpYyBpbnQgd2lsX2NmZzgwMjExX2RlbF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwKIAkJCQlzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LCBpbnQgbGlua19pZCwKLQkJCQl1OCBrZXlfaW5kZXgsIGJvb2wgcGFpcndpc2UsCiYjNDM7CQkJCXU4IGtleV9pbmRleCwKJiM0MzsJCQkJZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsCiAJCQkJY29uc3QgdTggKm1hY19hZGRyKQogewogCXN0cnVjdCB3aWw2MjEwX3ByaXYgKndpbCA9IHdpcGh5X3RvX3dpbCh3aXBoeSk7CiAJc3RydWN0IHdpbDYyMTBfdmlmICp2aWYgPSB3ZGV2X3RvX3ZpZih3aWwsIHdkZXYpOwotCWVudW0gd21pX2tleV91c2FnZSBrZXlfdXNhZ2UgPSB3aWxfZGV0ZWN0X2tleV91c2FnZSh3ZGV2LCBwYWlyd2lzZSk7CiYjNDM7CWVudW0gd21pX2tleV91c2FnZSBrZXlfdXNhZ2UgPQomIzQzOwkJd2lsX2RldGVjdF9rZXlfdXNhZ2Uod2RldiwgdHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0UpOwogCXN0cnVjdCB3aWxfc3RhX2luZm8gKmNzID0gd2lsX2ZpbmRfc3RhX2J5X2tleV91c2FnZSh3aWwsIHZpZi0mZ3Q7bWlkLAogCQkJCQkJCSAgICBrZXlfdXNhZ2UsCiAJCQkJCQkJICAgIG1hY19hZGRyKTsKQEAgLTIwNzIsNyAmIzQzOzIwNzYsOCBAQCB2b2lkIHdpbF9jZmc4MDIxMV9hcF9yZWNvdmVyeShzdHJ1Y3Qgd2lsNjIxMF9wcml2ICp3aWwpCiAJCWtleV9wYXJhbXMuc2VxX2xlbiA9IElFRUU4MDIxMV9HQ01QX1BOX0xFTjsKIAkJcmMgPSB3aWxfY2ZnODAyMTFfYWRkX2tleSh3aXBoeSwgdmlmX3RvX3dkZXYodmlmKSwgLTEsCiAJCQkJCSAgdmlmLSZndDtndGtfaW5kZXgsCi0JCQkJCSAgZmFsc2UsIE5VTEwsICZhbXA7a2V5X3BhcmFtcyk7CiYjNDM7CQkJCQkgIE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRSwKJiM0MzsJCQkJCSAgTlVMTCwgJmFtcDtrZXlfcGFyYW1zKTsKIAkJaWYgKHJjKQogCQkJd2lsX2Vycih3aWwsICYjMzQ7dmlmICVkIHJlY292ZXJ5IGFkZCBrZXkgZmFpbGVkICglZClcbiYjMzQ7LAogCQkJCWksIHJjKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMKaW5kZXggNmIyYzM0ZTNhNzk2Yy4uNzg1ZmQ1N2Q3YzZjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMKQEAgLTI3NzAsNyAmIzQzOzI3NzAsOCBAQCBicmNtZl9jZmc4MDIxMV9jb25maWdfZGVmYXVsdF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsCiAKIHN0YXRpYyBzMzIKIGJyY21mX2NmZzgwMjExX2RlbF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwKLQkJICAgICAgIGludCBsaW5rX2lkLCB1OCBrZXlfaWR4LCBib29sIHBhaXJ3aXNlLAomIzQzOwkJICAgICAgIGludCBsaW5rX2lkLCB1OCBrZXlfaWR4LAomIzQzOwkJICAgICAgIGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLAogCQkgICAgICAgY29uc3QgdTggKm1hY19hZGRyKQogewogCXN0cnVjdCBicmNtZl9pZiAqaWZwID0gbmV0ZGV2X3ByaXYod2Rldi0mZ3Q7bmV0ZGV2KTsKQEAgLTI4MDgsNyAmIzQzOzI4MDksOCBAQCBicmNtZl9jZmc4MDIxMV9kZWxfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsCiAKIHN0YXRpYyBzMzIKIGJyY21mX2NmZzgwMjExX2FkZF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwKLQkJICAgICAgIGludCBsaW5rX2lkLCB1OCBrZXlfaWR4LCBib29sIHBhaXJ3aXNlLAomIzQzOwkJICAgICAgIGludCBsaW5rX2lkLCB1OCBrZXlfaWR4LAomIzQzOwkJICAgICAgIGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLAogCQkgICAgICAgY29uc3QgdTggKm1hY19hZGRyLCBzdHJ1Y3Qga2V5X3BhcmFtcyAqcGFyYW1zKQogewogCXN0cnVjdCBicmNtZl9jZmc4MDIxMV9pbmZvICpjZmcgPSB3aXBoeV90b19jZmcod2lwaHkpOwpAQCAtMjgzNCw3ICYjNDM7MjgzNiw3IEBAIGJyY21mX2NmZzgwMjExX2FkZF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwKIAogCWlmIChwYXJhbXMtJmd0O2tleV9sZW4gPT0gMCkKIAkJcmV0dXJuIGJyY21mX2NmZzgwMjExX2RlbF9rZXkod2lwaHksIHdkZXYsIC0xLCBrZXlfaWR4LAotCQkJCQkgICAgICBwYWlyd2lzZSwgbWFjX2FkZHIpOwomIzQzOwkJCQkJICAgICAgdHlwZSwgbWFjX2FkZHIpOwogCiAJaWYgKHBhcmFtcy0mZ3Q7a2V5X2xlbiAmZ3Q7IHNpemVvZihrZXktJmd0O2RhdGEpKSB7CiAJCWJwaHlfZXJyKGRydnIsICYjMzQ7VG9vIGxvbmcga2V5IGxlbmd0aCAoJXUpXG4mIzM0OywgcGFyYW1zLSZndDtrZXlfbGVuKTsKQEAgLTI5MzAsNyAmIzQzOzI5MzIsOCBAQCBicmNtZl9jZmc4MDIxMV9hZGRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsCiAKIHN0YXRpYyBzMzIKIGJyY21mX2NmZzgwMjExX2dldF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwKLQkJICAgICAgIGludCBsaW5rX2lkLCB1OCBrZXlfaWR4LCBib29sIHBhaXJ3aXNlLAomIzQzOwkJICAgICAgIGludCBsaW5rX2lkLCB1OCBrZXlfaWR4LAomIzQzOwkJICAgICAgIGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLAogCQkgICAgICAgY29uc3QgdTggKm1hY19hZGRyLCB2b2lkICpjb29raWUsCiAJCSAgICAgICB2b2lkICgqY2FsbGJhY2spKHZvaWQgKmNvb2tpZSwKIAkJCQkJc3RydWN0IGtleV9wYXJhbXMgKnBhcmFtcykpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9kMy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvZDMuYwppbmRleCA1NWY5YjgwOWU3NjRkLi42ZDhlZGUzMzZkNTliIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9kMy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL2QzLmMKQEAgLTExMzgsNyAmIzQzOzExMzgsOCBAQCBpd2xfbWxkX2FkZF9tY2FzdF9yZWtleShzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAogCQlyZXR1cm47CiAKIAlrZXlfY29uZmlnID0gaWVlZTgwMjExX2d0a19yZWtleV9hZGQodmlmLCBrZXlfZGF0YS0mZ3Q7aWQsIGtleV9kYXRhLSZndDtrZXksCi0JCQkJCSAgICAgc2l6ZW9mKGtleV9kYXRhLSZndDtrZXkpLCBsaW5rX2lkKTsKJiM0MzsJCQkJCSAgICAgc2l6ZW9mKGtleV9kYXRhLSZndDtrZXkpLCBsaW5rX2lkLAomIzQzOwkJCQkJICAgICBmYWxzZSk7CiAJaWYgKElTX0VSUihrZXlfY29uZmlnKSkKIAkJcmV0dXJuOwogCkBAIC0xMjIwLDcgJiM0MzsxMjIxLDggQEAgc3RhdGljIHZvaWQgaXdsX21sZF9tbG9fcmVrZXkoc3RydWN0IGl3bF9tbGQgKm1sZCwKIAkJCQkgbWxvX2tleS0mZ3Q7aWR4LCBsaW5rX2lkKTsKIAogCQlrZXkgPSBpZWVlODAyMTFfZ3RrX3Jla2V5X2FkZCh2aWYsIG1sb19rZXktJmd0O2lkeCwgbWxvX2tleS0mZ3Q7a2V5LAotCQkJCQkgICAgICBzaXplb2YobWxvX2tleS0mZ3Q7a2V5KSwgbGlua19pZCk7CiYjNDM7CQkJCQkgICAgICBzaXplb2YobWxvX2tleS0mZ3Q7a2V5KSwgbGlua19pZCwKJiM0MzsJCQkJCSAgICAgIGZhbHNlKTsKIAogCQlpZiAoSVNfRVJSKGtleSkpCiAJCQljb250aW51ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL2QzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9kMy5jCmluZGV4IDZiMTFmYTMyZWE1YzYuLmJkNTJmMmViZDNiYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL2QzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vZDMuYwpAQCAtMTg4Nyw3ICYjNDM7MTg4Nyw4IEBAIHN0YXRpYyBib29sIGl3bF9tdm1fZ3RrX3Jla2V5KHN0cnVjdCBpd2xfd293bGFuX3N0YXR1c19kYXRhICpzdGF0dXMsCiAKIAkJa2V5ID0gaWVlZTgwMjExX2d0a19yZWtleV9hZGQodmlmLCBzdGF0dXMtJmd0O2d0a1tpXS5pZCwKIAkJCQkJICAgICAgc3RhdHVzLSZndDtndGtbaV0ua2V5LAotCQkJCQkgICAgICBzaXplb2Yoc3RhdHVzLSZndDtndGtbaV0ua2V5KSwgLTEpOwomIzQzOwkJCQkJICAgICAgc2l6ZW9mKHN0YXR1cy0mZ3Q7Z3RrW2ldLmtleSksIC0xLAomIzQzOwkJCQkJICAgICAgZmFsc2UpOwogCQlpZiAoSVNfRVJSKGtleSkpIHsKIAkJCS8qIEZXIG1heSBzZW5kIGFsc28gdGhlIG9sZCBrZXlzICovCiAJCQlpZiAoUFRSX0VSUihrZXkpID09IC1FQUxSRUFEWSkKQEAgLTE5MjIsNyAmIzQzOzE5MjMsOCBAQCBpd2xfbXZtX2QzX2lndGtfYmlndGtfcmVrZXlfYWRkKHN0cnVjdCBpd2xfd293bGFuX3N0YXR1c19kYXRhICpzdGF0dXMsCiAJCXJldHVybiB0cnVlOwogCiAJa2V5X2NvbmZpZyA9IGllZWU4MDIxMV9ndGtfcmVrZXlfYWRkKHZpZiwga2V5aWR4LCBrZXlfZGF0YS0mZ3Q7a2V5LAotCQkJCQkgICAgIHNpemVvZihrZXlfZGF0YS0mZ3Q7a2V5KSwgLTEpOwomIzQzOwkJCQkJICAgICBzaXplb2Yoa2V5X2RhdGEtJmd0O2tleSksIC0xLAomIzQzOwkJCQkJICAgICBmYWxzZSk7CiAJaWYgKElTX0VSUihrZXlfY29uZmlnKSkgewogCQkvKiBGVyBtYXkgc2VuZCBhbHNvIHRoZSBvbGQga2V5cyAqLwogCQlyZXR1cm4gUFRSX0VSUihrZXlfY29uZmlnKSA9PSAtRUFMUkVBRFk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2NmZy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9jZmcuYwppbmRleCA3MmM5MmY3MjQ2OWRlLi5lMDE1Y2ZhMTk1MGMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2NmZy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvY2ZnLmMKQEAgLTE1MDgsNyAmIzQzOzE1MDgsOCBAQCBzdGF0aWMgaW50IGxic19jZmdfc2V0X2RlZmF1bHRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksCiAKIAogc3RhdGljIGludCBsYnNfY2ZnX2FkZF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwKLQkJCSAgIGludCBsaW5rX2lkLCB1OCBpZHgsIGJvb2wgcGFpcndpc2UsCiYjNDM7CQkJICAgaW50IGxpbmtfaWQsIHU4IGlkeCwKJiM0MzsJCQkgICBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSwKIAkJCSAgIGNvbnN0IHU4ICptYWNfYWRkciwgc3RydWN0IGtleV9wYXJhbXMgKnBhcmFtcykKIHsKIAlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSB3aXBoeV9wcml2KHdpcGh5KTsKQEAgLTE1NjksNyAmIzQzOzE1NzAsOCBAQCBzdGF0aWMgaW50IGxic19jZmdfYWRkX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LAogCiAKIHN0YXRpYyBpbnQgbGJzX2NmZ19kZWxfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsCi0JCQkgICBpbnQgbGlua19pZCwgdTgga2V5X2luZGV4LCBib29sIHBhaXJ3aXNlLAomIzQzOwkJCSAgIGludCBsaW5rX2lkLCB1OCBrZXlfaW5kZXgsCiYjNDM7CQkJICAgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsCiAJCQkgICBjb25zdCB1OCAqbWFjX2FkZHIpCiB7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9jZmc4MDIxMS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L2NmZzgwMjExLmMKaW5kZXggOGVjMmQyMmE4YzMzYS4uMDYwYzM1MWNlY2MwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L2NmZzgwMjExLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L2NmZzgwMjExLmMKQEAgLTE0MiwxMiAmIzQzOzE0MiwxNCBAQCBzdGF0aWMgdm9pZCAqbXdpZmlleF9jZmc4MDIxMV9nZXRfYWRhcHRlcihzdHJ1Y3Qgd2lwaHkgKndpcGh5KQogICovCiBzdGF0aWMgaW50CiBtd2lmaWV4X2NmZzgwMjExX2RlbF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwKLQkJCSBpbnQgbGlua19pZCwgdTgga2V5X2luZGV4LCBib29sIHBhaXJ3aXNlLAomIzQzOwkJCSBpbnQgbGlua19pZCwgdTgga2V5X2luZGV4LAomIzQzOwkJCWVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLAogCQkJIGNvbnN0IHU4ICptYWNfYWRkcikKIHsKIAlzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2ID0gbXdpZmlleF9uZXRkZXZfZ2V0X3ByaXYod2Rldi0mZ3Q7bmV0ZGV2KTsKIAlzdGF0aWMgY29uc3QgdTggYmNfbWFjW10gPSB7MHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZn07Ci0JY29uc3QgdTggKnBlZXJfbWFjID0gcGFpcndpc2UgPyBtYWNfYWRkciA6IGJjX21hYzsKJiM0MzsJY29uc3QgdTggKnBlZXJfbWFjID0KJiM0MzsJCSh0eXBlID09IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRSkgPyBtYWNfYWRkciA6IGJjX21hYzsKIAogCWlmIChtd2lmaWV4X3NldF9lbmNvZGUocHJpdiwgTlVMTCwgTlVMTCwgMCwga2V5X2luZGV4LCBwZWVyX21hYywgMSkpIHsKIAkJbXdpZmlleF9kYmcocHJpdi0mZ3Q7YWRhcHRlciwgRVJST1IsICYjMzQ7ZGVsZXRpbmcgdGhlIGNyeXB0byBrZXlzXG4mIzM0Oyk7CkBAIC00ODIsMTMgJiM0Mzs0ODQsMTUgQEAgbXdpZmlleF9jZmc4MDIxMV9zZXRfZGVmYXVsdF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKICAqLwogc3RhdGljIGludAogbXdpZmlleF9jZmc4MDIxMV9hZGRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsCi0JCQkgaW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCwgYm9vbCBwYWlyd2lzZSwKJiM0MzsJCQkgaW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCwKJiM0MzsJCQkgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsCiAJCQkgY29uc3QgdTggKm1hY19hZGRyLCBzdHJ1Y3Qga2V5X3BhcmFtcyAqcGFyYW1zKQogewogCXN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYgPSBtd2lmaWV4X25ldGRldl9nZXRfcHJpdih3ZGV2LSZndDtuZXRkZXYpOwogCXN0cnVjdCBtd2lmaWV4X3dlcF9rZXkgKndlcF9rZXk7CiAJc3RhdGljIGNvbnN0IHU4IGJjX21hY1tdID0gezB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmZ9OwotCWNvbnN0IHU4ICpwZWVyX21hYyA9IHBhaXJ3aXNlID8gbWFjX2FkZHIgOiBiY19tYWM7CiYjNDM7CWNvbnN0IHU4ICpwZWVyX21hYyA9CiYjNDM7CQkodHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0UpID8gbWFjX2FkZHIgOiBiY19tYWM7CiAKIAlpZiAoR0VUX0JTU19ST0xFKHByaXYpID09IE1XSUZJRVhfQlNTX1JPTEVfVUFQICZhbXA7JmFtcDsKIAkgICAgKHBhcmFtcy0mZ3Q7Y2lwaGVyID09IFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDQwIHx8CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9taWNyb2NoaXAvd2lsYzEwMDAvY2ZnODAyMTEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21pY3JvY2hpcC93aWxjMTAwMC9jZmc4MDIxMS5jCmluZGV4IDY2NTRmY2U0ZGVkODQuLjc4NTBlMGE0ODM5MDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21pY3JvY2hpcC93aWxjMTAwMC9jZmc4MDIxMS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21pY3JvY2hpcC93aWxjMTAwMC9jZmc4MDIxMS5jCkBAIC01MzUsMTAgJiM0Mzs1MzUsMTMgQEAgc3RhdGljIGludCB3aWxjX3dmaV9jZmdfY29weV93cGFfaW5mbyhzdHJ1Y3Qgd2lsY193Zmlfa2V5ICprZXlfaW5mbywKIH0KIAogc3RhdGljIGludCBhZGRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsIGludCBsaW5rX2lkLAotCQkgICB1OCBrZXlfaW5kZXgsIGJvb2wgcGFpcndpc2UsIGNvbnN0IHU4ICptYWNfYWRkciwKJiM0MzsJCSAgIHU4IGtleV9pbmRleCwKJiM0MzsJCSAgIGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLAomIzQzOwkJICAgY29uc3QgdTggKm1hY19hZGRyLAogCQkgICBzdHJ1Y3Qga2V5X3BhcmFtcyAqcGFyYW1zKQogCiB7CiYjNDM7CWJvb2wgcGFpcndpc2UgPSB0eXBlID09IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRTsKIAlpbnQgcmV0ID0gMCwga2V5bGVuID0gcGFyYW1zLSZndDtrZXlfbGVuOwogCWNvbnN0IHU4ICpyeF9taWMgPSBOVUxMOwogCWNvbnN0IHU4ICp0eF9taWMgPSBOVUxMOwpAQCAtNjQxLDkgJiM0Mzs2NDQsMTAgQEAgc3RhdGljIGludCBhZGRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsIGludCBsaW5rX2lkLAogCiBzdGF0aWMgaW50IGRlbF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwgaW50IGxpbmtfaWQsCiAJCSAgIHU4IGtleV9pbmRleCwKLQkJICAgYm9vbCBwYWlyd2lzZSwKJiM0MzsJCSAgIGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLAogCQkgICBjb25zdCB1OCAqbWFjX2FkZHIpCiB7CiYjNDM7CWJvb2wgcGFpcndpc2UgPSB0eXBlID09IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRTsKIAlzdHJ1Y3Qgd2lsY192aWYgKnZpZiA9IG5ldGRldl9wcml2KHdkZXYtJmd0O25ldGRldik7CiAJc3RydWN0IHdpbGNfcHJpdiAqcHJpdiA9ICZhbXA7dmlmLSZndDtwcml2OwogCkBAIC02ODEsMTAgJiM0Mzs2ODUsMTEgQEAgc3RhdGljIGludCBkZWxfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsIGludCBsaW5rX2lkLAogfQogCiBzdGF0aWMgaW50IGdldF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwgaW50IGxpbmtfaWQsCi0JCSAgIHU4IGtleV9pbmRleCwgYm9vbCBwYWlyd2lzZSwgY29uc3QgdTggKm1hY19hZGRyLAotCQkgICB2b2lkICpjb29raWUsCiYjNDM7CQkgICB1OCBrZXlfaW5kZXgsIGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLAomIzQzOwkJICAgY29uc3QgdTggKm1hY19hZGRyLCB2b2lkICpjb29raWUsCiAJCSAgIHZvaWQgKCpjYWxsYmFjaykodm9pZCAqY29va2llLCBzdHJ1Y3Qga2V5X3BhcmFtcyAqKSkKIHsKJiM0MzsJYm9vbCBwYWlyd2lzZSA9IHR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFOwogCXN0cnVjdCB3aWxjX3ZpZiAqdmlmID0gbmV0ZGV2X3ByaXYod2Rldi0mZ3Q7bmV0ZGV2KTsKIAlzdHJ1Y3Qgd2lsY19wcml2ICpwcml2ID0gJmFtcDt2aWYtJmd0O3ByaXY7CiAJc3RydWN0ICBrZXlfcGFyYW1zIGtleV9wYXJhbXM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9jZmc4MDIxMS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvY2ZnODAyMTEuYwppbmRleCA0ZjllMjBmNzI4MTE0Li4wOGI2ZGIxNDc0NTJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9jZmc4MDIxMS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL2NmZzgwMjExLmMKQEAgLTk5LDEyICYjNDM7OTksMTQgQEAgc3RhdGljIHZvaWQgKm54cHdpZmlfY2ZnODAyMTFfZ2V0X2FkYXB0ZXIoc3RydWN0IHdpcGh5ICp3aXBoeSkKIC8qIGNmZzgwMjExIG9wZXJhdGlvbiBoYW5kbGVyIHRvIGRlbGV0ZSBhIG5ldHdvcmsga2V5LiAqLwogc3RhdGljIGludAogbnhwd2lmaV9jZmc4MDIxMV9kZWxfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsCi0JCQkgaW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCwgYm9vbCBwYWlyd2lzZSwKJiM0MzsJCQkgaW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCwKJiM0MzsJCQkgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsCiAJCQkgY29uc3QgdTggKm1hY19hZGRyKQogewogCXN0cnVjdCBueHB3aWZpX3ByaXZhdGUgKnByaXYgPSBueHB3aWZpX25ldGRldl9nZXRfcHJpdih3ZGV2LSZndDtuZXRkZXYpOwogCXN0YXRpYyBjb25zdCB1OCBiY19tYWNbXSA9IHsweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmfTsKLQljb25zdCB1OCAqcGVlcl9tYWMgPSBwYWlyd2lzZSA/IG1hY19hZGRyIDogYmNfbWFjOwomIzQzOwljb25zdCB1OCAqcGVlcl9tYWMgPQomIzQzOwkJKHR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFKSA/IG1hY19hZGRyIDogYmNfbWFjOwogCWludCByZXQ7CiAKIAlyZXQgPSBueHB3aWZpX3NldF9lbmNvZGUocHJpdiwgTlVMTCwgTlVMTCwgMCwga2V5X2luZGV4LCBwZWVyX21hYywgMSk7CkBAIC00MjgsNyAmIzQzOzQzMCw4IEBAIG54cHdpZmlfY2ZnODAyMTFfc2V0X2RlZmF1bHRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAvKiBjZmc4MDIxMSBoYW5kbGVyIGZvciBhZGRpbmcgYW4gODAyLjExIGVuY3J5cHRpb24ga2V5LiAqLwogc3RhdGljIGludAogbnhwd2lmaV9jZmc4MDIxMV9hZGRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsCi0JCQkgaW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCwgYm9vbCBwYWlyd2lzZSwKJiM0MzsJCQkgaW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCwKJiM0MzsJCQkgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsCiAJCQkgY29uc3QgdTggKm1hY19hZGRyLCBzdHJ1Y3Qga2V5X3BhcmFtcyAqcGFyYW1zKQogewogCXN0cnVjdCBueHB3aWZpX3ByaXZhdGUgKnByaXYgPSBueHB3aWZpX25ldGRldl9nZXRfcHJpdih3ZGV2LSZndDtuZXRkZXYpOwpAQCAtNDM4LDcgJiM0Mzs0NDEsNyBAQCBueHB3aWZpX2NmZzgwMjExX2FkZF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwKIAlpbnQgcmV0OwogCiAJZXRoX2Jyb2FkY2FzdF9hZGRyKGJjX21hYyk7Ci0JcGVlcl9tYWMgPSBwYWlyd2lzZSA/IG1hY19hZGRyIDogYmNfbWFjOwomIzQzOwlwZWVyX21hYyA9ICh0eXBlID09IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRSkgPyBtYWNfYWRkciA6IGJjX21hYzsKIAogCWlmIChHRVRfQlNTX1JPTEUocHJpdikgPT0gTlhQV0lGSV9CU1NfUk9MRV9VQVAgJmFtcDsmYW1wOwogCSAgICAocGFyYW1zLSZndDtjaXBoZXIgPT0gV0xBTl9DSVBIRVJfU1VJVEVfV0VQNDAgfHwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3F1YW50ZW5uYS9xdG5mbWFjL2NmZzgwMjExLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9xdWFudGVubmEvcXRuZm1hYy9jZmc4MDIxMS5jCmluZGV4IDllNDRjODVkMjA1MWMuLjM4NjI1MzQyMTY5ZmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3F1YW50ZW5uYS9xdG5mbWFjL2NmZzgwMjExLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcXVhbnRlbm5hL3F0bmZtYWMvY2ZnODAyMTEuYwpAQCAtNTMzLDEwICYjNDM7NTMzLDEyIEBAIHF0bmZfZHVtcF9zdGF0aW9uKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsCiB9CiAKIHN0YXRpYyBpbnQgcXRuZl9hZGRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsCi0JCQlpbnQgbGlua19pZCwgdTgga2V5X2luZGV4LCBib29sIHBhaXJ3aXNlLAomIzQzOwkJCWludCBsaW5rX2lkLCB1OCBrZXlfaW5kZXgsCiYjNDM7CQkJZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsCiAJCQljb25zdCB1OCAqbWFjX2FkZHIsIHN0cnVjdCBrZXlfcGFyYW1zICpwYXJhbXMpCiB7CiAJc3RydWN0IHF0bmZfdmlmICp2aWYgPSBxdG5mX25ldGRldl9nZXRfcHJpdih3ZGV2LSZndDtuZXRkZXYpOwomIzQzOwlib29sIHBhaXJ3aXNlID0gdHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0U7CiAJaW50IHJldDsKIAogCXJldCA9IHF0bmZfY21kX3NlbmRfYWRkX2tleSh2aWYsIGtleV9pbmRleCwgcGFpcndpc2UsIG1hY19hZGRyLCBwYXJhbXMpOwpAQCAtNTQ5LDEwICYjNDM7NTUxLDEyIEBAIHN0YXRpYyBpbnQgcXRuZl9hZGRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsCiB9CiAKIHN0YXRpYyBpbnQgcXRuZl9kZWxfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsCi0JCQlpbnQgbGlua19pZCwgdTgga2V5X2luZGV4LCBib29sIHBhaXJ3aXNlLAomIzQzOwkJCWludCBsaW5rX2lkLCB1OCBrZXlfaW5kZXgsCiYjNDM7CQkJZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsCiAJCQljb25zdCB1OCAqbWFjX2FkZHIpCiB7CiAJc3RydWN0IHF0bmZfdmlmICp2aWYgPSBxdG5mX25ldGRldl9nZXRfcHJpdih3ZGV2LSZndDtuZXRkZXYpOwomIzQzOwlib29sIHBhaXJ3aXNlID0gdHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0U7CiAJaW50IHJldDsKIAogCXJldCA9IHF0bmZfY21kX3NlbmRfZGVsX2tleSh2aWYsIGtleV9pbmRleCwgcGFpcndpc2UsIG1hY19hZGRyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvd293LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg5L3dvdy5jCmluZGV4IDhkYWRkOGRmNGZjNjUuLmM4ZTAwMjIzOGVjYjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvd293LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OS93b3cuYwpAQCAtNjY5LDEwICYjNDM7NjY5LDEyIEBAIHN0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICpydHc4OV93b3dfZ3RrX3Jla2V5KHN0cnVjdCBydHc4OV9kZXYgKnJ0d2RldiwKIAlpZiAoaWVlZTgwMjExX3ZpZl9pc19tbGQod293X3ZpZikpCiAJCWtleSA9IGllZWU4MDIxMV9ndGtfcmVrZXlfYWRkKHdvd192aWYsIGtleWlkeCwgZ3RrLAogCQkJCQkgICAgICBjaXBoZXJfaW5mby0mZ3Q7bGVuLAotCQkJCQkgICAgICBydHd2aWZfbGluay0mZ3Q7bGlua19pZCk7CiYjNDM7CQkJCQkgICAgICBydHd2aWZfbGluay0mZ3Q7bGlua19pZCwKJiM0MzsJCQkJCSAgICAgIGZhbHNlKTsKIAllbHNlCiAJCWtleSA9IGllZWU4MDIxMV9ndGtfcmVrZXlfYWRkKHdvd192aWYsIGtleWlkeCwgZ3RrLAotCQkJCQkgICAgICBjaXBoZXJfaW5mby0mZ3Q7bGVuLCAtMSk7CiYjNDM7CQkJCQkgICAgICBjaXBoZXJfaW5mby0mZ3Q7bGVuLCAtMSwKJiM0MzsJCQkJCSAgICAgIGZhbHNlKTsKIAogCWtmcmVlKHJla2V5X2NvbmYpOwogCWlmIChJU19FUlIoa2V5KSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYwppbmRleCAwMmI2ZDgxY2NjZDExLi4xY2MzMjJhYTg5OGRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYwpAQCAtNTY2OCw2ICYjNDM7NTY2OCw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgd2lwaHlfaWZ0eXBlX2V4dF9jYXBhYiBtYWM4MDIxMV9od3NpbV9pZnR5cGVzX2V4dF9jYXBhW10gPSB7CiAJCS5lbWxfY2FwYWJpbGl0aWVzID0gSUVFRTgwMjExX0VNTF9DQVBfRU1MU1JfU1VQUCB8CiAJCQkJICAgIElFRUU4MDIxMV9FTUxfQ0FQX0VNTE1SX1NVUFBPUlQsCiAJCS5tbGRfY2FwYV9hbmRfb3BzID0gTUFDODAyMTFfSFdTSU1fTUxEX0NBUEFfT1BTLAomIzQzOwkJLyogQ0lQIHdvcmtzIGFzIGh3c2ltIGRvZXMgbm90IGhhdmUgY29udHJvbCBmcmFtZXMgKi8KJiM0MzsJCS5jaXBfc3VwcG9ydGVkID0gdHJ1ZSwKJiM0MzsJCS5jaXBfY2FwYWJpbGl0aWVzID0gMCwKIAl9LAogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZWVlODAyMTEuaCBiL2luY2x1ZGUvbGludXgvaWVlZTgwMjExLmgKaW5kZXggMjZlNjc0MDM4ODY1NC4uMTZkNzhmZDYxYzIyMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZWVlODAyMTEuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2llZWU4MDIxMS5oCkBAIC0xODI4LDYgJiM0MzsxODI4LDcgQEAgZW51bSBpZWVlODAyMTFfZWlkX2V4dCB7CiAJV0xBTl9FSURfRVhUX0JBTkRXSURUSF9JTkRJQ0FUSU9OID0gMTM1LAogCVdMQU5fRUlEX0VYVF9LTk9XTl9TVEFfSURFTlRJRkNBVElPTiA9IDEzNiwKIAlXTEFOX0VJRF9FWFRfTk9OX0FQX1NUQV9SRUdfQ09OID0gMTM3LAomIzQzOwlXTEFOX0VJRF9FWFRfQ0lQX0NBUEEgPSAxNTAsCiAJV0xBTl9FSURfRVhUX1VIUl9PUEVSID0gMTUxLAogCVdMQU5fRUlEX0VYVF9VSFJfQ0FQQSA9IDE1MiwKIAlXTEFOX0VJRF9FWFRfTUFDUCA9IDE1MywKQEAgLTI5MDAsNCAmIzQzOzI5MDEsMTYgQEAgc3RhdGljIGlubGluZSBib29sIGllZWU4MDIxMV9jaGVja190aW0oY29uc3Qgc3RydWN0IGllZWU4MDIxMV90aW1faWUgKnRpbSwKIAkJICAgICBfX2llZWU4MDIxMV9jaGVja190aW0odGltLCB0aW1fbGVuLCBhaWQpOwogfQogCiYjNDM7LyogVGhlIE1JQyBwYWRkaW5nIHN1YmZpZWxkIGluIHRoZSBDSVAgY2FwYWJpbGl0aWVzICovCiYjNDM7I2RlZmluZSBXTEFOX0NJUF9DQVBBX01JQ19QQURESU5HCTB4MEYKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBzdHJ1Y3QgaWVlZTgwMjExX2NpcF9jYXAgLSBDSVAgQ2FwYWJpbGl0aWVzIGVsZW1lbnQKJiM0MzsgKgomIzQzOyAqIEB2OiBUaGUgdmFsdWUgb2YgdGhlIENvbnRyb2wgSW50ZWdyaXR5IFByb3RvY29sIENhcGFiaWxpdHkgZWxlbWVudAomIzQzOyAqLwomIzQzO3N0cnVjdCBpZWVlODAyMTFfY2lwX2NhcCB7CiYjNDM7CXU4IHY7CiYjNDM7fSBfX3BhY2tlZDsKJiM0MzsKICNlbmRpZiAvKiBMSU5VWF9JRUVFODAyMTFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaCBiL2luY2x1ZGUvbmV0L2NmZzgwMjExLmgKaW5kZXggZGNiYjBlNTVjMzJlYy4uYjVkOThiYTA3MjM5YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9jZmc4MDIxMS5oCkBAIC0xODIxLDYgJiM0MzsxODIxLDggQEAgc3RydWN0IHN0YV90eHB3ciB7CiAgKiBAczFnX2NhcGE6IFMxRyBjYXBhYmlsaXRpZXMgb2Ygc3RhdGlvbgogICogQHVocl9jYXBhOiBVSFIgY2FwYWJpbGl0aWVzIG9mIHRoZSBzdGF0aW9uCiAgKiBAdWhyX2NhcGFfbGVuOiB0aGUgbGVuZ3RoIG9mIHRoZSBVSFIgY2FwYWJpbGl0aWVzCiYjNDM7ICogQGNpcF9jYXBfc2V0OiBJZiBDSVAgY2FwYWJpbGl0aWVzIGFyZSBwcmVzZW50LCByZXF1aXJlZCBmb3IgQ0lQIHN0YXRpb25zCiYjNDM7ICogQGNpcF9jYXA6IENJUCBjYXBhYmlsaXRpZXMgb2Ygc3RhdGlvbgogICovCiBzdHJ1Y3QgbGlua19zdGF0aW9uX3BhcmFtZXRlcnMgewogCWNvbnN0IHU4ICptbGRfbWFjOwpAQCAtMTg0Miw2ICYjNDM7MTg0NCw4IEBAIHN0cnVjdCBsaW5rX3N0YXRpb25fcGFyYW1ldGVycyB7CiAJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9zMWdfY2FwICpzMWdfY2FwYTsKIAljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3Vocl9jYXAgKnVocl9jYXBhOwogCXU4IHVocl9jYXBhX2xlbjsKJiM0MzsJYm9vbCBjaXBfY2FwX3NldDsKJiM0MzsJdTggY2lwX2NhcDsKIH07CiAKIC8qKgpAQCAtMzQwMiw2ICYjNDM7MzQwNiw3IEBAIHN0cnVjdCBjZmc4MDIxMV9tbF9yZWNvbmZfcmVxIHsKICAqCWZsYWcgaXMgbm90IHNldC4KICAqIEBBU1NPQ19SRVFfU1BQX0FNU0RVOiBTUFAgQS1NU0RVcyB3aWxsIGJlIHVzZWQgb24gdGhpcyBjb25uZWN0aW9uIChpZiBhbnkpCiAgKiBAQVNTT0NfUkVRX0RJU0FCTEVfVUhSOiBEaXNhYmxlIFVIUgomIzQzOyAqIEBBU1NPQ19SRVFfQ0lQOiBFbmFibGUgQ29udHJvbCBJbnRlZ3JpdHkgUHJvdG9jb2wKICAqLwogZW51bSBjZmc4MDIxMV9hc3NvY19yZXFfZmxhZ3MgewogCUFTU09DX1JFUV9ESVNBQkxFX0hUCQkJPSBCSVQoMCksCkBAIC0zNDEzLDYgJiM0MzszNDE4LDcgQEAgZW51bSBjZmc4MDIxMV9hc3NvY19yZXFfZmxhZ3MgewogCUNPTk5FQ1RfUkVRX01MT19TVVBQT1JUCQkJPSBCSVQoNiksCiAJQVNTT0NfUkVRX1NQUF9BTVNEVQkJCT0gQklUKDcpLAogCUFTU09DX1JFUV9ESVNBQkxFX1VIUgkJCT0gQklUKDgpLAomIzQzOwlBU1NPQ19SRVFfQ0lQCQkJCT0gQklUKDkpLAogfTsKIAogLyoqCkBAIC01MzAwLDE0ICYjNDM7NTMwNiwxNyBAQCBzdHJ1Y3QgY2ZnODAyMTFfb3BzIHsKIAkJCQkgdW5zaWduZWQgaW50IGxpbmtfaWQpOwogCiAJaW50CSgqYWRkX2tleSkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwKLQkJCSAgIGludCBsaW5rX2lkLCB1OCBrZXlfaW5kZXgsIGJvb2wgcGFpcndpc2UsCiYjNDM7CQkJICAgaW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCwKJiM0MzsJCQkgICBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSwKIAkJCSAgIGNvbnN0IHU4ICptYWNfYWRkciwgc3RydWN0IGtleV9wYXJhbXMgKnBhcmFtcyk7CiAJaW50CSgqZ2V0X2tleSkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwKLQkJCSAgIGludCBsaW5rX2lkLCB1OCBrZXlfaW5kZXgsIGJvb2wgcGFpcndpc2UsCiYjNDM7CQkJICAgaW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCwKJiM0MzsJCQkgICBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSwKIAkJCSAgIGNvbnN0IHU4ICptYWNfYWRkciwgdm9pZCAqY29va2llLAogCQkJICAgdm9pZCAoKmNhbGxiYWNrKSh2b2lkICpjb29raWUsIHN0cnVjdCBrZXlfcGFyYW1zKikpOwogCWludAkoKmRlbF9rZXkpKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsCi0JCQkgICBpbnQgbGlua19pZCwgdTgga2V5X2luZGV4LCBib29sIHBhaXJ3aXNlLAomIzQzOwkJCSAgIGludCBsaW5rX2lkLCB1OCBrZXlfaW5kZXgsCiYjNDM7CQkJICAgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsCiAJCQkgICBjb25zdCB1OCAqbWFjX2FkZHIpOwogCWludAkoKnNldF9kZWZhdWx0X2tleSkoc3RydWN0IHdpcGh5ICp3aXBoeSwKIAkJCQkgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgbGlua19pZCwKQEAgLTYwNDEsNiAmIzQzOzYwNTAsOCBAQCBzdHJ1Y3Qgd2lwaHlfdmVuZG9yX2NvbW1hbmQgewogICogQGVtbF9jYXBhYmlsaXRpZXM6IEVNTCBjYXBhYmlsaXRpZXMgKGZvciBNTE8pCiAgKiBAbWxkX2NhcGFfYW5kX29wczogTUxEIGNhcGFiaWxpdGllcyBhbmQgb3BlcmF0aW9ucyAoZm9yIE1MTykKICAqIEBleHRfbWxkX2NhcGFfYW5kX29wczogRXh0ZW5kZWQgTUxEIGNhcGFiaWxpdGllcyBhbmQgb3BlcmF0aW9ucyAoZm9yIE1MTykKJiM0MzsgKiBAY2lwX3N1cHBvcnRlZDogQ0lQIGlzIHN1cHBvcnRlZCBhbmQgdGhlIGNhcGFiaWxpdGllcyBhcmUgdmFsaWQKJiM0MzsgKiBAY2lwX2NhcGFiaWxpdGllczogQ0lQIENhcGFiaWxpdGllcyBlbGVtZW50IGNvbnRhaW5pbmcgdGhlIE1JQyBwYWRkaW5nIGRlbGF5CiAgKi8KIHN0cnVjdCB3aXBoeV9pZnR5cGVfZXh0X2NhcGFiIHsKIAllbnVtIG5sODAyMTFfaWZ0eXBlIGlmdHlwZTsKQEAgLTYwNTAsNiAmIzQzOzYwNjEsOCBAQCBzdHJ1Y3Qgd2lwaHlfaWZ0eXBlX2V4dF9jYXBhYiB7CiAJdTE2IGVtbF9jYXBhYmlsaXRpZXM7CiAJdTE2IG1sZF9jYXBhX2FuZF9vcHM7CiAJdTE2IGV4dF9tbGRfY2FwYV9hbmRfb3BzOwomIzQzOwlib29sIGNpcF9zdXBwb3J0ZWQ7CiYjNDM7CXU4IGNpcF9jYXBhYmlsaXRpZXM7CiB9OwogCiAvKioKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L21hYzgwMjExLmggYi9pbmNsdWRlL25ldC9tYWM4MDIxMS5oCmluZGV4IDlkMWZhYzZlODA4MjkuLmFhZTE0MGZkYzJiYjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L21hYzgwMjExLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbWFjODAyMTEuaApAQCAtMjM5Niw2ICYjNDM7MjM5Niw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBsb2NrZGVwX3ZpZl93aXBoeV9tdXRleF9oZWxkKHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCiAgKgludW1iZXIgZ2VuZXJhdGlvbiBvbmx5CiAgKiBASUVFRTgwMjExX0tFWV9GTEFHX1NQUF9BTVNEVTogU1BQIEEtTVNEVXMgY2FuIGJlIHVzZWQgd2l0aCB0aGlzIGtleQogICoJKHNldCBieSBtYWM4MDIxMSBmcm9tIHRoZSBzdGEtJmd0O3NwcF9hbXNkdSBmbGFnKQomIzQzOyAqIEBJRUVFODAyMTFfS0VZX0ZMQUdfQ0lQOiBUaGlzIGtleSBpcyB1c2VkIGZvciB0aGUgQ29udHJvbCBJbnRlZ3JpdHkKJiM0MzsgKglQcm90b2NvbCwgYW5kIGlzIGVpdGhlciBhIHBhaXJ3aXNlIGtleSBvciBhIENJR1RLLgogICovCiBlbnVtIGllZWU4MDIxMV9rZXlfZmxhZ3MgewogCUlFRUU4MDIxMV9LRVlfRkxBR19HRU5FUkFURV9JVl9NR01UCT0gQklUKDApLApAQCAtMjQxMCw2ICYjNDM7MjQxMiw3IEBAIGVudW0gaWVlZTgwMjExX2tleV9mbGFncyB7CiAJSUVFRTgwMjExX0tFWV9GTEFHX05PX0FVVE9fVFgJCT0gQklUKDkpLAogCUlFRUU4MDIxMV9LRVlfRkxBR19HRU5FUkFURV9NTUlFCT0gQklUKDEwKSwKIAlJRUVFODAyMTFfS0VZX0ZMQUdfU1BQX0FNU0RVCQk9IEJJVCgxMSksCiYjNDM7CUlFRUU4MDIxMV9LRVlfRkxBR19DSVAJCQk9IEJJVCgxMiksCiB9OwogCiAvKioKQEAgLTI2MzAsNiAmIzQzOzI2MzMsOCBAQCBzdHJ1Y3QgaWVlZTgwMjExX3N0YV9hZ2dyZWdhdGVzIHsKICAqIEBlaHRfY2FwOiBFSFQgY2FwYWJpbGl0aWVzIG9mIHRoaXMgU1RBCiAgKiBAdWhyX2NhcDogVUhSIGNhcGFiaWxpdGllcyBvZiB0aGlzIFNUQQogICogQHMxZ19jYXA6IFMxRyBjYXBhYmlsaXRpZXMgb2YgdGhpcyBTVEEKJiM0MzsgKiBAY2lwX21pY19wYWRkaW5nOiB0aGUgTUlDIHBhZGRpbmcgcmVxdWlyZWQgYnkgdGhlIFNUQSBhcyBkZWZpbmVkIGluIGl0cwomIzQzOyAqCUNJUCBDYXBhYmlsaXRpZXMgZWxlbWVudAogICogQGFnZzogcGVyLWxpbmsgZGF0YSBmb3IgbXVsdGktbGluayBhZ2dyZWdhdGlvbgogICogQGJhbmR3aWR0aDogY3VycmVudCBiYW5kd2lkdGggdGhlIHN0YXRpb24gY2FuIHJlY2VpdmUgd2l0aC4KICAqCVRoaXMgaXMgdGhlIG1pbmltdW0gYmV0d2VlbiB0aGUgcGVlciYjMzk7cyBjYXBhYmlsaXRpZXMgYW5kIG91ciBvd24KQEAgLTI2NTgsNiAmIzQzOzI2NjMsNyBAQCBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N0YV9laHRfY2FwIGVodF9jYXA7CiAJc3RydWN0IGllZWU4MDIxMV9zdGFfdWhyX2NhcCB1aHJfY2FwOwogCXN0cnVjdCBpZWVlODAyMTFfc3RhX3MxZ19jYXAgczFnX2NhcDsKJiM0MzsJdTggY2lwX21pY19wYWRkaW5nOwogCiAJc3RydWN0IGllZWU4MDIxMV9zdGFfYWdncmVnYXRlcyBhZ2c7CiAKQEAgLTI3MjEsNiAmIzQzOzI3MjcsNyBAQCBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhIHsKICAqIEB2YWxpZF9saW5rczogYml0bWFwIG9mIHZhbGlkIGxpbmtzLCBvciAwIGZvciBub24tTUxPCiAgKiBAc3BwX2Ftc2R1OiBpbmRpY2F0ZXMgd2hldGhlciB0aGUgU1RBIHVzZXMgU1BQIEEtTVNEVSBvciBub3QuCiAgKiBAZXBwX3BlZXI6IGluZGljYXRlcyB0aGF0IHRoZSBwZWVyIGlzIGFuIEVQUCBwZWVyLgomIzQzOyAqIEBjaXA6IGluZGljYXRlcyB3aGV0aGVyIHRoZSBTVEEgdXNlcyBjb250cm9sIGZyYW1lIHByb3RlY3Rpb24gb3Igbm90LgogICogQG5taTogRm9yIE5ESSBzdGF0aW9ucywgcG9pbnRlciB0byB0aGUgTk1JIHN0YXRpb24gb2YgdGhlIHBlZXIuCiAgKiBAbmFuX3NjaGVkOiBOQU4gcGVlciBzY2hlZHVsZSBmb3IgdGhpcyBzdGF0aW9uLiBWYWxpZCBvbmx5IGZvciBOTUkgc3RhdGlvbnMuCiAgKiBAZXh0X21sZF9jYXBhX29wczogdGhlIE1MRCYjMzk7cyBleHRlbmRlZCBNTEQgY2FwYWJpbGl0aWVzIGFuZCBvcGVyYXRpb25zCkBAIC0yNzQyLDYgJiM0MzsyNzQ5LDggQEAgc3RydWN0IGllZWU4MDIxMV9zdGEgewogCXU4IG1heF9hbXNkdV9zdWJmcmFtZXM7CiAJdTE2IGVtbF9jYXA7CiAKJiM0MzsJYm9vbCBjaXA7CiYjNDM7CiAJc3RydWN0IGllZWU4MDIxMV9zdGFfYWdncmVnYXRlcyAqY3VyOwogCiAJYm9vbCBzdXBwb3J0X3AycF9wczsKQEAgLTYyNzksNiAmIzQzOzYyODgsNyBAQCB2b2lkIGllZWU4MDIxMV9zZXRfa2V5X3J4X3NlcShzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXljb25mLAogICogQGtleV9sZW46IHRoZSBrZXkgZGF0YS4gTWlnaHQgYmUgYmlnZ2VyIHRoYW4gdGhlIGFjdHVhbCBrZXkgbGVuZ3RoLAogICoJYnV0IG5vdCBzbWFsbGVyIChmb3IgdGhlIGRyaXZlciBjb252aW5lbmNlKQogICogQGxpbmtfaWQ6IHRoZSBsaW5rIGlkIG9mIHRoZSBrZXkgb3IgLTEgZm9yIG5vbi1NTE8KJiM0MzsgKiBAY2lndGs6IHdoZXRoZXIgdGhpcyBpcyBhIENJR1RLCiAgKgogICogV2hlbiBHVEsgcmVrZXlpbmcgd2FzIGRvbmUgd2hpbGUgdGhlIHN5c3RlbSB3YXMgc3VzcGVuZGVkLCAoYSkgbmV3CiAgKiBrZXkocykgd2lsbCBiZSBhdmFpbGFibGUuIFRoZXNlIHdpbGwgYmUgbmVlZGVkIGJ5IG1hYzgwMjExIGZvciBwcm9wZXIKQEAgLTYzMDUsNyAmIzQzOzYzMTUsNyBAQCB2b2lkIGllZWU4MDIxMV9zZXRfa2V5X3J4X3NlcShzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXljb25mLAogc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqCiBpZWVlODAyMTFfZ3RrX3Jla2V5X2FkZChzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAogCQkJdTggaWR4LCB1OCAqa2V5X2RhdGEsIHU4IGtleV9sZW4sCi0JCQlpbnQgbGlua19pZCk7CiYjNDM7CQkJaW50IGxpbmtfaWQsIGJvb2wgY2lndGspOwogCiAvKioKICAqIGllZWU4MDIxMV9ndGtfcmVrZXlfbm90aWZ5IC0gbm90aWZ5IHVzZXJzcGFjZSBzdXBwbGljYW50IG9mIHJla2V5aW5nCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvbmw4MDIxMS5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L25sODAyMTEuaAppbmRleCAwMjAzODdkNzY0MTIyLi4zZTZlNTlmYjhlMTdmIDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvbmw4MDIxMS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9ubDgwMjExLmgKQEAgLTMxODUsNiAmIzQzOzMxODUsMTEgQEAgZW51bSBubDgwMjExX2NvbW1hbmRzIHsKICAqCVRoZSBhZ2dyZWdhdGVkIG1lc3NhZ2UgYWx3YXlzIHByZWNlZGVzIHRoZSBwZXItbGluayBtZXNzYWdlcyBmb3IgdGhlCiAgKglzYW1lIHN0YXRpb24gd2l0aGluIGEgZHVtcCBzZXF1ZW5jZS4KICAqCiYjNDM7ICogQE5MODAyMTFfQVRUUl9BU1NPQ19DSVA6IEVuYWJsZSBDb250cm9sIEludGVncml0eSBQcm90b2NvbCBmb3IgdGhlCiYjNDM7ICoJYXNzb2NpYXRpb24KJiM0MzsgKiBATkw4MDIxMV9BVFRSX0NJUF9DQVBBQklMSVRJRVM6IFRoZSBDb250cm9sIEludGVncml0eSBQcm90b2NvbCBmb3IgdGhlCiYjNDM7ICoJc3RhdGlvbi4KJiM0MzsgKgogICogQE5VTV9OTDgwMjExX0FUVFI6IHRvdGFsIG51bWJlciBvZiBubDgwMjExX2F0dHJzIGF2YWlsYWJsZQogICogQE5MODAyMTFfQVRUUl9NQVg6IGhpZ2hlc3QgYXR0cmlidXRlIG51bWJlciBjdXJyZW50bHkgZGVmaW5lZAogICogQF9fTkw4MDIxMV9BVFRSX0FGVEVSX0xBU1Q6IGludGVybmFsIHVzZQpAQCAtMzI4MCw2ICYjNDM7MzI4NSw4IEBAIGVudW0gbmw4MDIxMV9hdHRycyB7CiAKIAlOTDgwMjExX0FUVFJfRlJFUV9GSVhFRCwKIAomIzQzOwlOTDgwMjExX0FUVFJfQVNTT0NfQ0lQLAomIzQzOwlOTDgwMjExX0FUVFJfQ0lQX0NBUEFCSUxJVElFUywKIAogCU5MODAyMTFfQVRUUl9XSVBIWV9SRVRSWV9TSE9SVCwKIAlOTDgwMjExX0FUVFJfV0lQSFlfUkVUUllfTE9ORywKQEAgLTM5MzQsNiAmIzQzOzM5NDEsNyBAQCBlbnVtIG5sODAyMTFfaWZ0eXBlIHsKICAqCXRoYXQgc3VwcG9ydCAlTkw4MDIxMV9GRUFUVVJFX0ZVTExfQVBfQ0xJRU5UX1NUQVRFIHRvIHRyYW5zaXRpb24gYQogICoJcHJldmlvdXNseSBhZGRlZCBzdGF0aW9uIGludG8gYXNzb2NpYXRlZCBzdGF0ZQogICogQE5MODAyMTFfU1RBX0ZMQUdfU1BQX0FNU0RVOiBzdGF0aW9uIHN1cHBvcnRzIFNQUCBBLU1TRFVzCiYjNDM7ICogQE5MODAyMTFfU1RBX0ZMQUdfQ0lQOiBzdGF0aW9uIGhhcyBDb250cm9sIEludGVncml0eSBQcm90b2NvbCAoQ0lQKSBlbmFibGVkCiAgKiBATkw4MDIxMV9TVEFfRkxBR19NQVg6IGhpZ2hlc3Qgc3RhdGlvbiBmbGFnIG51bWJlciBjdXJyZW50bHkgZGVmaW5lZAogICogQF9fTkw4MDIxMV9TVEFfRkxBR19BRlRFUl9MQVNUOiBpbnRlcm5hbCB1c2UKICAqLwpAQCAtMzk0Nyw2ICYjNDM7Mzk1NSw3IEBAIGVudW0gbmw4MDIxMV9zdGFfZmxhZ3MgewogCU5MODAyMTFfU1RBX0ZMQUdfVERMU19QRUVSLAogCU5MODAyMTFfU1RBX0ZMQUdfQVNTT0NJQVRFRCwKIAlOTDgwMjExX1NUQV9GTEFHX1NQUF9BTVNEVSwKJiM0MzsJTkw4MDIxMV9TVEFfRkxBR19DSVAsCiAKIAkvKiBrZWVwIGxhc3QgKi8KIAlfX05MODAyMTFfU1RBX0ZMQUdfQUZURVJfTEFTVCwKQEAgLTU3NzgsMTIgJiM0Mzs1Nzg3LDE2IEBAIGVudW0gbmw4MDIxMV9hdXRoX3R5cGUgewogICogQE5MODAyMTFfS0VZVFlQRV9HUk9VUDogR3JvdXAgKGJyb2FkY2FzdC9tdWx0aWNhc3QpIGtleQogICogQE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRTogUGFpcndpc2UgKHVuaWNhc3QvaW5kaXZpZHVhbCkga2V5CiAgKiBATkw4MDIxMV9LRVlUWVBFX1BFRVJLRVk6IFBlZXJLZXkgKERMUykKJiM0MzsgKiBATkw4MDIxMV9LRVlUWVBFX0NJR1RLOiBDb250cm9sIEludGVncml0eSBHcm91cCBUZW1wb3JhbCBLZXkKJiM0MzsgKglUaGUgY2lwaGVyIGlzIEdNQUMtMjU2IGJ1dCBwYXNzZWQgYXMgR0NNUC0yNTYsCiYjNDM7ICoJc2FtZSBhcyB0aGUgcGFpcndpc2Uga2V5IHdoZW4gdXNlZCBmb3IgQ0lQLgogICogQE5VTV9OTDgwMjExX0tFWVRZUEVTOiBudW1iZXIgb2YgZGVmaW5lZCBrZXkgdHlwZXMKICAqLwogZW51bSBubDgwMjExX2tleV90eXBlIHsKIAlOTDgwMjExX0tFWVRZUEVfR1JPVVAsCiAJTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFLAogCU5MODAyMTFfS0VZVFlQRV9QRUVSS0VZLAomIzQzOwlOTDgwMjExX0tFWVRZUEVfQ0lHVEssCiAKIAlOVU1fTkw4MDIxMV9LRVlUWVBFUwogfTsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9jZmcuYyBiL25ldC9tYWM4MDIxMS9jZmcuYwppbmRleCAwYTkyNDdiZTI2YWZhLi4zYmY4MTYyOWNkZTM0IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvY2ZnLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL2NmZy5jCkBAIC02MTEsMTIgJiM0Mzs2MTEsMTUgQEAgc3RhdGljIGludCBpZWVlODAyMTFfc2V0X3R4KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogfQogCiBzdGF0aWMgaW50IGllZWU4MDIxMV9hZGRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsCi0JCQkgICAgIGludCBsaW5rX2lkLCB1OCBrZXlfaWR4LCBib29sIHBhaXJ3aXNlLAomIzQzOwkJCSAgICAgaW50IGxpbmtfaWQsIHU4IGtleV9pZHgsCiYjNDM7CQkJICAgICBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSwKIAkJCSAgICAgY29uc3QgdTggKm1hY19hZGRyLCBzdHJ1Y3Qga2V5X3BhcmFtcyAqcGFyYW1zKQogewogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX1dERVZfVE9fU1VCX0lGKHdkZXYpOwogCXN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rID0KIAkJaWVlZTgwMjExX2xpbmtfb3JfZGVmbGluayhzZGF0YSwgbGlua19pZCwgZmFsc2UpOwomIzQzOwlib29sIHBhaXJ3aXNlID0gdHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0U7CiYjNDM7CWJvb2wgY2lndGsgPSB0eXBlID09IE5MODAyMTFfS0VZVFlQRV9DSUdUSzsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLSZndDtsb2NhbDsKIAlzdHJ1Y3Qgc3RhX2luZm8gKnN0YSA9IE5VTEw7CiAJc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleTsKQEAgLTY2MCw2ICYjNDM7NjYzLDkgQEAgc3RhdGljIGludCBpZWVlODAyMTFfYWRkX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LAogCQlrZXktJmd0O2NvbmYubGlua19pZCA9IC0xOwogCX0gZWxzZSB7CiAJCWtleS0mZ3Q7Y29uZi5saW5rX2lkID0gbGluay0mZ3Q7bGlua19pZDsKJiM0MzsKJiM0MzsJCWlmIChjaWd0aykKJiM0MzsJCQlrZXktJmd0O2NvbmYuZmxhZ3MgfD0gSUVFRTgwMjExX0tFWV9GTEFHX0NJUDsKIAl9CiAKIAlpZiAocGFyYW1zLSZndDttb2RlID09IE5MODAyMTFfS0VZX05PX1RYKQpAQCAtNzM3LDEwICYjNDM7NzQzLDEzIEBAIHN0YXRpYyBpbnQgaWVlZTgwMjExX2FkZF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwKIAogc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfa2V5ICoKIGllZWU4MDIxMV9sb29rdXBfa2V5KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBpbnQgbGlua19pZCwKLQkJICAgICB1OCBrZXlfaWR4LCBib29sIHBhaXJ3aXNlLCBjb25zdCB1OCAqbWFjX2FkZHIpCiYjNDM7CQkgICAgIHU4IGtleV9pZHgsIGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLAomIzQzOwkJICAgICBjb25zdCB1OCAqbWFjX2FkZHIpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgX19tYXliZV91bnVzZWQgPSBzZGF0YS0mZ3Q7bG9jYWw7CiAJc3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbmsgPSAmYW1wO3NkYXRhLSZndDtkZWZsaW5rOwomIzQzOwlib29sIHBhaXJ3aXNlID0gdHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0U7CiYjNDM7CWJvb2wgY2lndGsgPSB0eXBlID09IE5MODAyMTFfS0VZVFlQRV9DSUdUSzsKIAlzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5OwogCiAJaWYgKGxpbmtfaWQgJmd0Oz0gMCkgewpAQCAtNzcwLDcgJiM0Mzs3NzksMTEgQEAgaWVlZTgwMjExX2xvb2t1cF9rZXkoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGludCBsaW5rX2lkLAogCQkJcmV0dXJuIHdpcGh5X2RlcmVmZXJlbmNlKGxvY2FsLSZndDtody53aXBoeSwKIAkJCQkJCSBzdGEtJmd0O3B0a1trZXlfaWR4XSk7CiAKLQkJaWYgKCFwYWlyd2lzZSAmYW1wOyZhbXA7CiYjNDM7CQlpZiAoY2lndGsgJmFtcDsmYW1wOyBrZXlfaWR4ICZsdDsgTlVNX0NUUkxfS0VZUykKJiM0MzsJCQlyZXR1cm4gd2lwaHlfZGVyZWZlcmVuY2UobG9jYWwtJmd0O2h3LndpcGh5LAomIzQzOwkJCQkJCSBsaW5rX3N0YS0mZ3Q7Y2lndGtba2V5X2lkeF0pOwomIzQzOwomIzQzOwkJaWYgKCFwYWlyd2lzZSAmYW1wOyZhbXA7ICFjaWd0ayAmYW1wOyZhbXA7CiAJCSAgICBrZXlfaWR4ICZsdDsgTlVNX0RFRkFVTFRfS0VZUyAmIzQzOwogCQkJICAgICAgTlVNX0RFRkFVTFRfTUdNVF9LRVlTICYjNDM7CiAJCQkgICAgICBOVU1fREVGQVVMVF9CRUFDT05fS0VZUykKQEAgLTc4Myw2ICYjNDM7Nzk2LDkgQEAgaWVlZTgwMjExX2xvb2t1cF9rZXkoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGludCBsaW5rX2lkLAogCWlmIChwYWlyd2lzZSAmYW1wOyZhbXA7IGtleV9pZHggJmx0OyBOVU1fREVGQVVMVF9LRVlTKQogCQlyZXR1cm4gd2lwaHlfZGVyZWZlcmVuY2UobG9jYWwtJmd0O2h3LndpcGh5LCBzZGF0YS0mZ3Q7a2V5c1trZXlfaWR4XSk7CiAKJiM0MzsJaWYgKGNpZ3RrKQomIzQzOwkJcmV0dXJuIHdpcGh5X2RlcmVmZXJlbmNlKGxvY2FsLSZndDtody53aXBoeSwgbGluay0mZ3Q7Y2lndGtba2V5X2lkeF0pOwomIzQzOwogCWtleSA9IHdpcGh5X2RlcmVmZXJlbmNlKGxvY2FsLSZndDtody53aXBoeSwgbGluay0mZ3Q7Z3RrW2tleV9pZHhdKTsKIAlpZiAoa2V5KQogCQlyZXR1cm4ga2V5OwpAQCAtNzk1LDggJiM0Mzs4MTEsOCBAQCBpZWVlODAyMTFfbG9va3VwX2tleShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgaW50IGxpbmtfaWQsCiB9CiAKIHN0YXRpYyBpbnQgaWVlZTgwMjExX2RlbF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwKLQkJCSAgICAgaW50IGxpbmtfaWQsIHU4IGtleV9pZHgsIGJvb2wgcGFpcndpc2UsCi0JCQkgICAgIGNvbnN0IHU4ICptYWNfYWRkcikKJiM0MzsJCQkgICAgIGludCBsaW5rX2lkLCB1OCBrZXlfaWR4LAomIzQzOwkJCSAgICAgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsIGNvbnN0IHU4ICptYWNfYWRkcikKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9XREVWX1RPX1NVQl9JRih3ZGV2KTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLSZndDtsb2NhbDsKQEAgLTgwNCw3ICYjNDM7ODIwLDcgQEAgc3RhdGljIGludCBpZWVlODAyMTFfZGVsX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LAogCiAJbG9ja2RlcF9hc3NlcnRfd2lwaHkobG9jYWwtJmd0O2h3LndpcGh5KTsKIAotCWtleSA9IGllZWU4MDIxMV9sb29rdXBfa2V5KHNkYXRhLCBsaW5rX2lkLCBrZXlfaWR4LCBwYWlyd2lzZSwgbWFjX2FkZHIpOwomIzQzOwlrZXkgPSBpZWVlODAyMTFfbG9va3VwX2tleShzZGF0YSwgbGlua19pZCwga2V5X2lkeCwgdHlwZSwgbWFjX2FkZHIpOwogCWlmICgha2V5KQogCQlyZXR1cm4gLUVOT0VOVDsKIApAQCAtODE0LDcgJiM0Mzs4MzAsOCBAQCBzdGF0aWMgaW50IGllZWU4MDIxMV9kZWxfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsCiB9CiAKIHN0YXRpYyBpbnQgaWVlZTgwMjExX2dldF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwKLQkJCSAgICAgaW50IGxpbmtfaWQsIHU4IGtleV9pZHgsIGJvb2wgcGFpcndpc2UsCiYjNDM7CQkJICAgICBpbnQgbGlua19pZCwgdTgga2V5X2lkeCwKJiM0MzsJCQkgICAgIGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLAogCQkJICAgICBjb25zdCB1OCAqbWFjX2FkZHIsIHZvaWQgKmNvb2tpZSwKIAkJCSAgICAgdm9pZCAoKmNhbGxiYWNrKSh2b2lkICpjb29raWUsCiAJCQkJCSAgICAgIHN0cnVjdCBrZXlfcGFyYW1zICpwYXJhbXMpKQpAQCAtODMzLDcgJiM0Mzs4NTAsNyBAQCBzdGF0aWMgaW50IGllZWU4MDIxMV9nZXRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsCiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAKLQlrZXkgPSBpZWVlODAyMTFfbG9va3VwX2tleShzZGF0YSwgbGlua19pZCwga2V5X2lkeCwgcGFpcndpc2UsIG1hY19hZGRyKTsKJiM0MzsJa2V5ID0gaWVlZTgwMjExX2xvb2t1cF9rZXkoc2RhdGEsIGxpbmtfaWQsIGtleV9pZHgsIHR5cGUsIG1hY19hZGRyKTsKIAlpZiAoIWtleSkKIAkJZ290byBvdXQ7CiAKQEAgLTIyODksNiAmIzQzOzIzMDYsOCBAQCBzdGF0aWMgaW50IHN0YV9saW5rX2FwcGx5X3BhcmFtZXRlcnMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCiAJY2FzZSBTVEFfTElOS19NT0RFX05FVzoKIAkJaWYgKCFwYXJhbXMtJmd0O2xpbmtfbWFjKQogCQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQlpZiAoc3RhLSZndDtzdGEuY2lwICZhbXA7JmFtcDsgIXBhcmFtcy0mZ3Q7Y2lwX2NhcF9zZXQpCiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiAJCWJyZWFrOwogCWNhc2UgU1RBX0xJTktfTU9ERV9MSU5LX01PRElGWToKIAkJYnJlYWs7CkBAIC0yNDExLDYgJiM0MzsyNDMwLDkgQEAgc3RhdGljIGludCBzdGFfbGlua19hcHBseV9wYXJhbWV0ZXJzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAogCQlpZWVlODAyMTFfczFnX2NhcF90b19zdGFfczFnX2NhcChzZGF0YSwgcGFyYW1zLSZndDtzMWdfY2FwYSwKIAkJCQkJCSBsaW5rX3N0YSk7CiAKJiM0MzsJaWYgKHBhcmFtcy0mZ3Q7Y2lwX2NhcF9zZXQpCiYjNDM7CQlsaW5rX3N0YS0mZ3Q7cHViLSZndDtjaXBfbWljX3BhZGRpbmcgPSBwYXJhbXMtJmd0O2NpcF9jYXA7CiYjNDM7CiAJc3dpdGNoIChzZGF0YS0mZ3Q7dmlmLnR5cGUpIHsKIAljYXNlIE5MODAyMTFfSUZUWVBFX05BTjoKIAljYXNlIE5MODAyMTFfSUZUWVBFX05BTl9EQVRBOgpAQCAtMjU3Myw2ICYjNDM7MjU5NSw5IEBAIHN0YXRpYyBpbnQgc3RhX2FwcGx5X3BhcmFtZXRlcnMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCiAJaWYgKHBhcmFtcy0mZ3Q7ZW1sX2NhcF9wcmVzZW50KQogCQlzdGEtJmd0O3N0YS5lbWxfY2FwID0gcGFyYW1zLSZndDtlbWxfY2FwOwogCiYjNDM7CWlmIChwYXJhbXMtJmd0O3N0YV9mbGFnc19zZXQgJmFtcDsgQklUKE5MODAyMTFfU1RBX0ZMQUdfQ0lQKSkKJiM0MzsJCXN0YS0mZ3Q7c3RhLmNpcCA9IHRydWU7CiYjNDM7CiAJcmV0ID0gc3RhX2xpbmtfYXBwbHlfcGFyYW1ldGVycyhsb2NhbCwgc3RhLCBTVEFfTElOS19NT0RFX1NUQV9NT0RJRlksCiAJCQkJCSZhbXA7cGFyYW1zLSZndDtsaW5rX3N0YV9wYXJhbXMpOwogCWlmIChyZXQpCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaCBiL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oCmluZGV4IGExZWY4OGZlODQ2ZGQuLmZjODVmOGJmOTZlM2EgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oCkBAIC00NzcsNiAmIzQzOzQ3Nyw3IEBAIHN0cnVjdCBpZWVlODAyMTFfbWdkX2Fzc29jX2RhdGEgewogCWJvb2wgY29tZWJhY2s7IC8qIHdoZXRoZXIgdGhlIEFQIGhhcyByZXF1ZXN0ZWQgYXNzb2NpYXRpb24gY29tZWJhY2sgKi8KIAlib29sIHMxZzsKIAlib29sIHNwcF9hbXNkdTsKJiM0MzsJYm9vbCBjaXA7CiAKIAlzOCBhc3NvY19saW5rX2lkOwogCkBAIC0xMTA0LDYgJiM0MzsxMTA1LDcgQEAgc3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgewogCXN0cnVjdCBpZWVlODAyMTFfa2V5IF9fcmN1ICpndGtbTlVNX0RFRkFVTFRfS0VZUyAmIzQzOwogCQkJCQlOVU1fREVGQVVMVF9NR01UX0tFWVMgJiM0MzsKIAkJCQkJTlVNX0RFRkFVTFRfQkVBQ09OX0tFWVNdOwomIzQzOwlzdHJ1Y3QgaWVlZTgwMjExX2tleSBfX3JjdSAqY2lndGtbTlVNX0NUUkxfS0VZU107CiAJc3RydWN0IGllZWU4MDIxMV9rZXkgX19yY3UgKmRlZmF1bHRfbXVsdGljYXN0X2tleTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2tleSBfX3JjdSAqZGVmYXVsdF9tZ210X2tleTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2tleSBfX3JjdSAqZGVmYXVsdF9iZWFjb25fa2V5OwpAQCAtMTg3MCw2ICYjNDM7MTg3Miw3IEBAIHN0cnVjdCBpZWVlODAyXzExX2VsZW1zIHsKIAljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3R0bG1fZWxlbSAqdHRsbVtJRUVFODAyMTFfVFRMTV9NQVhfQ05UXTsKIAljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3Vocl9jYXAgKnVocl9jYXA7CiAJY29uc3Qgc3RydWN0IGllZWU4MDIxMV91aHJfb3BlcmF0aW9uICp1aHJfb3BlcmF0aW9uOwomIzQzOwljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2NpcF9jYXAgKmNpcF9jYXA7CiAKIAkvKiBub3QgdGhlIG9yZGVyIGluIHRoZSBwc2QgdmFsdWVzIGlzIHBlciBlbGVtZW50LCBub3QgcGVyIGNoYW5kZWYgKi8KIAlzdHJ1Y3QgaWVlZTgwMjExX3BhcnNlZF90cGUgdHBlOwpAQCAtMjc3NSw2ICYjNDM7Mjc3OCw4IEBAIGludCBpZWVlODAyMTFfcHV0X3Vocl9jYXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCSAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQpOwogdm9pZCBpZWVlODAyMTFfcHV0X3JlZ19jb25uKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQkJICAgIHN0cnVjdCBza19idWZmICpza2IpOwomIzQzO2ludCBpZWVlODAyMTFfcHV0X2NpcF9jYXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwKJiM0MzsJCQkgIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTsKIAogLyogY2hhbm5lbCBtYW5hZ2VtZW50ICovCiBib29sIGllZWU4MDIxMV9jaGFuZGVmX2h0X29wZXIoY29uc3Qgc3RydWN0IGllZWU4MDIxMV9odF9vcGVyYXRpb24gKmh0X29wZXIsCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEva2V5LmMgYi9uZXQvbWFjODAyMTEva2V5LmMKaW5kZXggZjQ1ZTc5MmFiZWRlNS4uNGM5Nzg4ZWMwYjc0ZiAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2tleS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS9rZXkuYwpAQCAtMjA1LDYgJiM0MzsyMDUsMTAgQEAgc3RhdGljIGludCBpZWVlODAyMTFfa2V5X2VuYWJsZV9od19hY2NlbChzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5KQogCQkJICBzdGEgPyBzdGEtJmd0O3N0YS5hZGRyIDogYmNhc3RfYWRkciwgcmV0KTsKIAogIG91dF91bnN1cHBvcnRlZDoKJiM0MzsJLyogQ29udHJvbCBJbnRlZ3JpdHkgUHJvdG9jb2wgY2FuIG9ubHkgYmUgZG9uZSBpbiBoYXJkd2FyZSAqLwomIzQzOwlpZiAoa2V5LSZndDtjb25mLmZsYWdzICZhbXA7IElFRUU4MDIxMV9LRVlfRkxBR19DSVApCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKIAlzd2l0Y2ggKGtleS0mZ3Q7Y29uZi5jaXBoZXIpIHsKIAljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDQwOgogCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfV0VQMTA0OgpAQCAtNDQwLDExICYjNDM7NDQ0LDEzIEBAIHZvaWQgaWVlZTgwMjExX3NldF9kZWZhdWx0X2JlYWNvbl9rZXkoc3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbmssCiBzdGF0aWMgaW50IGllZWU4MDIxMV9rZXlfcmVwbGFjZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJCQkgc3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbmssCiAJCQkJIHN0cnVjdCBzdGFfaW5mbyAqc3RhLAotCQkJCSBib29sIHBhaXJ3aXNlLAomIzQzOwkJCQkgZW51bSBpZWVlODAyMTFfa2V5X2ZsYWdzIGZsYWdzLAogCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX2tleSAqb2xkLAogCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX2tleSAqbmV3KQogewogCXN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YSA9IHN0YSA/ICZhbXA7c3RhLSZndDtkZWZsaW5rIDogTlVMTDsKJiM0MzsJYm9vbCBwYWlyd2lzZSA9IGZsYWdzICZhbXA7IElFRUU4MDIxMV9LRVlfRkxBR19QQUlSV0lTRTsKJiM0MzsJYm9vbCBjaXAgPSBmbGFncyAmYW1wOyBJRUVFODAyMTFfS0VZX0ZMQUdfQ0lQOwogCWludCBsaW5rX2lkOwogCWludCBpZHg7CiAJaW50IHJldCA9IDA7CkBAIC01MzUsNiAmIzQzOzU0MSw4IEBAIHN0YXRpYyBpbnQgaWVlZTgwMjExX2tleV9yZXBsYWNlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQkJaWYgKG5ldyAmYW1wOyZhbXA7CiAJCQkgICAgIShuZXctJmd0O2NvbmYuZmxhZ3MgJmFtcDsgSUVFRTgwMjExX0tFWV9GTEFHX05PX0FVVE9fVFgpKQogCQkJCV9pZWVlODAyMTFfc2V0X3R4X2tleShuZXcsIHRydWUpOwomIzQzOwkJfSBlbHNlIGlmIChjaXApIHsKJiM0MzsJCQlyY3VfYXNzaWduX3BvaW50ZXIobGlua19zdGEtJmd0O2NpZ3RrW2lkeF0sIG5ldyk7CiAJCX0gZWxzZSB7CiAJCQlyY3VfYXNzaWduX3BvaW50ZXIobGlua19zdGEtJmd0O2d0a1tpZHhdLCBuZXcpOwogCQl9CkBAIC01NjksNiAmIzQzOzU3Nyw4IEBAIHN0YXRpYyBpbnQgaWVlZTgwMjExX2tleV9yZXBsYWNlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCiAJCWlmIChpc193ZXAgfHwgcGFpcndpc2UpCiAJCQlyY3VfYXNzaWduX3BvaW50ZXIoc2RhdGEtJmd0O2tleXNbaWR4XSwgbmV3KTsKJiM0MzsJCWVsc2UgaWYgKGNpcCkKJiM0MzsJCQlyY3VfYXNzaWduX3BvaW50ZXIobGluay0mZ3Q7Y2lndGtbaWR4XSwgbmV3KTsKIAkJZWxzZQogCQkJcmN1X2Fzc2lnbl9wb2ludGVyKGxpbmstJmd0O2d0a1tpZHhdLCBuZXcpOwogCkBAIC04ODMsNiAmIzQzOzg5MywxMCBAQCBpbnQgaWVlZTgwMjExX2tleV9saW5rKHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXksCiAJCQlyZXQgPSAtRU9QTk9UU1VQUDsKIAkJCWdvdG8gb3V0OwogCQl9CiYjNDM7CiYjNDM7CQkvKiBTZXQgQ0lQIGZsYWcgaWYgZW5hYmxlZCBmb3IgdGhlIHN0YXRpb24gKi8KJiM0MzsJCWlmIChzdGEtJmd0O3N0YS5jaXApCiYjNDM7CQkJa2V5LSZndDtjb25mLmZsYWdzIHw9IElFRUU4MDIxMV9LRVlfRkxBR19DSVA7CiAJfSBlbHNlIGlmIChzdGEpIHsKIAkJc3RydWN0IGxpbmtfc3RhX2luZm8gKmxpbmtfc3RhID0gJmFtcDtzdGEtJmd0O2RlZmxpbms7CiAJCWludCBsaW5rX2lkID0ga2V5LSZndDtjb25mLmxpbmtfaWQ7CkBAIC04OTYsMTUgJiM0Mzs5MTAsMjUgQEAgaW50IGllZWU4MDIxMV9rZXlfbGluayhzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5LAogCQkJfQogCQl9CiAKLQkJb2xkX2tleSA9IHdpcGh5X2RlcmVmZXJlbmNlKHNkYXRhLSZndDtsb2NhbC0mZ3Q7aHcud2lwaHksCi0JCQkJCSAgICBsaW5rX3N0YS0mZ3Q7Z3RrW2lkeF0pOwotCX0gZWxzZSB7Ci0JCWlmIChpZHggJmx0OyBOVU1fREVGQVVMVF9LRVlTKQomIzQzOwkJaWYgKGtleS0mZ3Q7Y29uZi5mbGFncyAmYW1wOyBJRUVFODAyMTFfS0VZX0ZMQUdfQ0lQKQogCQkJb2xkX2tleSA9IHdpcGh5X2RlcmVmZXJlbmNlKHNkYXRhLSZndDtsb2NhbC0mZ3Q7aHcud2lwaHksCi0JCQkJCQkgICAgc2RhdGEtJmd0O2tleXNbaWR4XSk7Ci0JCWlmICghb2xkX2tleSkKJiM0MzsJCQkJCQkgICAgbGlua19zdGEtJmd0O2NpZ3RrW2lkeF0pOwomIzQzOwkJZWxzZQogCQkJb2xkX2tleSA9IHdpcGh5X2RlcmVmZXJlbmNlKHNkYXRhLSZndDtsb2NhbC0mZ3Q7aHcud2lwaHksCi0JCQkJCQkgICAgbGluay0mZ3Q7Z3RrW2lkeF0pOwomIzQzOwkJCQkJCSAgICBsaW5rX3N0YS0mZ3Q7Z3RrW2lkeF0pOwomIzQzOwl9IGVsc2UgewomIzQzOwkJaWYgKGtleS0mZ3Q7Y29uZi5mbGFncyAmYW1wOyBJRUVFODAyMTFfS0VZX0ZMQUdfQ0lQKSB7CiYjNDM7CQkJb2xkX2tleSA9IHdpcGh5X2RlcmVmZXJlbmNlKHNkYXRhLSZndDtsb2NhbC0mZ3Q7aHcud2lwaHksCiYjNDM7CQkJCQkJICAgIGxpbmstJmd0O2NpZ3RrW2lkeF0pOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlpZiAoaWR4ICZsdDsgTlVNX0RFRkFVTFRfS0VZUykKJiM0MzsJCQkJb2xkX2tleSA9IHdpcGh5X2RlcmVmZXJlbmNlKHNkYXRhLSZndDtsb2NhbC0mZ3Q7aHcud2lwaHksCiYjNDM7CQkJCQkJCSAgICBzZGF0YS0mZ3Q7a2V5c1tpZHhdKTsKJiM0MzsKJiM0MzsJCQlpZiAoIW9sZF9rZXkpCiYjNDM7CQkJCW9sZF9rZXkgPSB3aXBoeV9kZXJlZmVyZW5jZShzZGF0YS0mZ3Q7bG9jYWwtJmd0O2h3LndpcGh5LAomIzQzOwkJCQkJCQkgICAgbGluay0mZ3Q7Z3RrW2lkeF0pOwomIzQzOwkJfQogCX0KIAogCS8qIE5vbi1wYWlyd2lzZSBrZXlzIG11c3QgYWxzbyBub3Qgc3dpdGNoIHRoZSBjaXBoZXIgb24gcmVrZXkgKi8KQEAgLTkzOCw5ICYjNDM7OTYyLDE3IEBAIGludCBpZWVlODAyMTFfa2V5X2xpbmsoc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSwKIAlpZiAoc3RhICZhbXA7JmFtcDsgc3RhLSZndDtzdGEuc3BwX2Ftc2R1KQogCQlrZXktJmd0O2NvbmYuZmxhZ3MgfD0gSUVFRTgwMjExX0tFWV9GTEFHX1NQUF9BTVNEVTsKIAomIzQzOwkvKiBBIENJUCByZWxhdGVkIGtleSBtdXN0IGJlIEdDTVAtMjU2IChyZWFsbHkgR01BQy0yNTYpICovCiYjNDM7CWlmICgoa2V5LSZndDtjb25mLmZsYWdzICZhbXA7IElFRUU4MDIxMV9LRVlfRkxBR19DSVApICZhbXA7JmFtcDsKJiM0MzsJICAgIGtleS0mZ3Q7Y29uZi5jaXBoZXIgIT0gV0xBTl9DSVBIRVJfU1VJVEVfR0NNUF8yNTYpIHsKJiM0MzsJCXJldCA9IC1FSU5WQUw7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwogCWluY3JlbWVudF90YWlscm9vbV9uZWVkX2NvdW50KHNkYXRhKTsKIAotCXJldCA9IGllZWU4MDIxMV9rZXlfcmVwbGFjZShzZGF0YSwgbGluaywgc3RhLCBwYWlyd2lzZSwgb2xkX2tleSwga2V5KTsKJiM0MzsJcmV0ID0gaWVlZTgwMjExX2tleV9yZXBsYWNlKHNkYXRhLCBsaW5rLCBzdGEsIGtleS0mZ3Q7Y29uZi5mbGFncywKJiM0MzsJCQkJICAgIG9sZF9rZXksIGtleSk7CiAKIAlpZiAoIXJldCkgewogCQlpZWVlODAyMTFfZGVidWdmc19rZXlfYWRkKGtleSk7CkBAIC05NjYsOCAmIzQzOzk5OCw3IEBAIHZvaWQgaWVlZTgwMjExX2tleV9mcmVlKHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXksIGJvb2wgZGVsYXlfdGFpbHJvb20pCiAJICovCiAJaWYgKGtleS0mZ3Q7c2RhdGEpCiAJCWllZWU4MDIxMV9rZXlfcmVwbGFjZShrZXktJmd0O3NkYXRhLCBOVUxMLCBrZXktJmd0O3N0YSwKLQkJCQkgICAgICBrZXktJmd0O2NvbmYuZmxhZ3MgJmFtcDsgSUVFRTgwMjExX0tFWV9GTEFHX1BBSVJXSVNFLAotCQkJCSAgICAgIGtleSwgTlVMTCk7CiYjNDM7CQkJCSAgICAgIGtleS0mZ3Q7Y29uZi5mbGFncywga2V5LCBOVUxMKTsKIAlpZWVlODAyMTFfa2V5X2Rlc3Ryb3koa2V5LCBkZWxheV90YWlscm9vbSk7CiB9CiAKQEAgLTEwOTgsOCAmIzQzOzExMjksNyBAQCBzdGF0aWMgdm9pZCBpZWVlODAyMTFfZnJlZV9rZXlzX2lmYWNlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGtleSwgdG1wLCAmYW1wO3NkYXRhLSZndDtrZXlfbGlzdCwgbGlzdCkgewogCQlpZWVlODAyMTFfa2V5X3JlcGxhY2Uoa2V5LSZndDtzZGF0YSwgTlVMTCwga2V5LSZndDtzdGEsCi0JCQkJICAgICAga2V5LSZndDtjb25mLmZsYWdzICZhbXA7IElFRUU4MDIxMV9LRVlfRkxBR19QQUlSV0lTRSwKLQkJCQkgICAgICBrZXksIE5VTEwpOwomIzQzOwkJCQkgICAgICBrZXktJmd0O2NvbmYuZmxhZ3MsIGtleSwgTlVMTCk7CiAJCWxpc3RfYWRkX3RhaWwoJmFtcDtrZXktJmd0O2xpc3QsIGtleXMpOwogCX0KIApAQCAtMTExOSw4ICYjNDM7MTE0OSw3IEBAIHZvaWQgaWVlZTgwMjExX3JlbW92ZV9saW5rX2tleXMoc3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbmssCiAJCWlmIChrZXktJmd0O2NvbmYubGlua19pZCAhPSBsaW5rLSZndDtsaW5rX2lkKQogCQkJY29udGludWU7CiAJCWllZWU4MDIxMV9rZXlfcmVwbGFjZShrZXktJmd0O3NkYXRhLCBsaW5rLCBrZXktJmd0O3N0YSwKLQkJCQkgICAgICBrZXktJmd0O2NvbmYuZmxhZ3MgJmFtcDsgSUVFRTgwMjExX0tFWV9GTEFHX1BBSVJXSVNFLAotCQkJCSAgICAgIGtleSwgTlVMTCk7CiYjNDM7CQkJCSAgICAgIGtleS0mZ3Q7Y29uZi5mbGFncywga2V5LCBOVUxMKTsKIAkJbGlzdF9hZGRfdGFpbCgmYW1wO2tleS0mZ3Q7bGlzdCwga2V5cyk7CiAJfQogfQpAQCAtMTE5Niw4ICYjNDM7MTIyNSwxNyBAQCB2b2lkIGllZWU4MDIxMV9mcmVlX3N0YV9rZXlzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAogCQlpZiAoIWtleSkKIAkJCWNvbnRpbnVlOwogCQlpZWVlODAyMTFfa2V5X3JlcGxhY2Uoa2V5LSZndDtzZGF0YSwgTlVMTCwga2V5LSZndDtzdGEsCi0JCQkJICAgICAga2V5LSZndDtjb25mLmZsYWdzICZhbXA7IElFRUU4MDIxMV9LRVlfRkxBR19QQUlSV0lTRSwKLQkJCQkgICAgICBrZXksIE5VTEwpOwomIzQzOwkJCQkgICAgICBrZXktJmd0O2NvbmYuZmxhZ3MsIGtleSwgTlVMTCk7CiYjNDM7CQlfX2llZWU4MDIxMV9rZXlfZGVzdHJveShrZXksIGtleS0mZ3Q7c2RhdGEtJmd0O3ZpZi50eXBlID09CiYjNDM7CQkJCQlOTDgwMjExX0lGVFlQRV9TVEFUSU9OKTsKJiM0MzsJfQomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRShzdGEtJmd0O2RlZmxpbmsuY2lndGspOyBpJiM0MzsmIzQzOykgewomIzQzOwkJa2V5ID0gd2lwaHlfZGVyZWZlcmVuY2UobG9jYWwtJmd0O2h3LndpcGh5LCBzdGEtJmd0O2RlZmxpbmsuY2lndGtbaV0pOwomIzQzOwkJaWYgKCFrZXkpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CQlpZWVlODAyMTFfa2V5X3JlcGxhY2Uoa2V5LSZndDtzZGF0YSwgTlVMTCwga2V5LSZndDtzdGEsCiYjNDM7CQkJCSAgICAgIGtleS0mZ3Q7Y29uZi5mbGFncywga2V5LCBOVUxMKTsKIAkJX19pZWVlODAyMTFfa2V5X2Rlc3Ryb3koa2V5LCBrZXktJmd0O3NkYXRhLSZndDt2aWYudHlwZSA9PQogCQkJCQlOTDgwMjExX0lGVFlQRV9TVEFUSU9OKTsKIAl9CkBAIC0xMjA3LDggJiM0MzsxMjQ1LDcgQEAgdm9pZCBpZWVlODAyMTFfZnJlZV9zdGFfa2V5cyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKIAkJaWYgKCFrZXkpCiAJCQljb250aW51ZTsKIAkJaWVlZTgwMjExX2tleV9yZXBsYWNlKGtleS0mZ3Q7c2RhdGEsIE5VTEwsIGtleS0mZ3Q7c3RhLAotCQkJCSAgICAgIGtleS0mZ3Q7Y29uZi5mbGFncyAmYW1wOyBJRUVFODAyMTFfS0VZX0ZMQUdfUEFJUldJU0UsCi0JCQkJICAgICAga2V5LCBOVUxMKTsKJiM0MzsJCQkJICAgICAga2V5LSZndDtjb25mLmZsYWdzLCBrZXksIE5VTEwpOwogCQlfX2llZWU4MDIxMV9rZXlfZGVzdHJveShrZXksIGtleS0mZ3Q7c2RhdGEtJmd0O3ZpZi50eXBlID09CiAJCQkJCU5MODAyMTFfSUZUWVBFX1NUQVRJT04pOwogCX0KQEAgLTEzNjYsNyAmIzQzOzE0MDMsNyBAQCBFWFBPUlRfU1lNQk9MX0dQTChpZWVlODAyMTFfc2V0X2tleV9yeF9zZXEpOwogc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqCiBpZWVlODAyMTFfZ3RrX3Jla2V5X2FkZChzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAogCQkJdTggaWR4LCB1OCAqa2V5X2RhdGEsIHU4IGtleV9sZW4sCi0JCQlpbnQgbGlua19pZCkKJiM0MzsJCQlpbnQgbGlua19pZCwgYm9vbCBjaWd0aykKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IHZpZl90b19zZGF0YSh2aWYpOwogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtJmd0O2xvY2FsOwpAQCAtMTM5MCwxMCAmIzQzOzE0MjcsMjAgQEAgaWVlZTgwMjExX2d0a19yZWtleV9hZGQoc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKIAkJICAgIE5VTV9ERUZBVUxUX0JFQUNPTl9LRVlTKSkKIAkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiAKLQlwcmV2X2tleSA9IHdpcGh5X2RlcmVmZXJlbmNlKGxvY2FsLSZndDtody53aXBoeSwKLQkJCQkgICAgIGxpbmtfZGF0YS0mZ3Q7Z3RrW2lkeF0pOwomIzQzOwlpZiAoV0FSTl9PTihjaWd0ayAmYW1wOyZhbXA7IGlkeCAmZ3Q7PSBOVU1fQ1RSTF9LRVlTKSkKJiM0MzsJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwomIzQzOwomIzQzOwlpZiAoY2lndGspCiYjNDM7CQlwcmV2X2tleSA9IHdpcGh5X2RlcmVmZXJlbmNlKGxvY2FsLSZndDtody53aXBoeSwKJiM0MzsJCQkJCSAgICAgbGlua19kYXRhLSZndDtjaWd0a1tpZHhdKTsKJiM0MzsJZWxzZQomIzQzOwkJcHJldl9rZXkgPSB3aXBoeV9kZXJlZmVyZW5jZShsb2NhbC0mZ3Q7aHcud2lwaHksCiYjNDM7CQkJCQkgICAgIGxpbmtfZGF0YS0mZ3Q7Z3RrW2lkeF0pOwogCWlmICghcHJldl9rZXkpIHsKLQkJaWYgKGlkeCAmbHQ7IE5VTV9ERUZBVUxUX0tFWVMpIHsKJiM0MzsJCWlmIChjaWd0aykgewomIzQzOwkJCXByZXZfa2V5ID0gd2lwaHlfZGVyZWZlcmVuY2UobG9jYWwtJmd0O2h3LndpcGh5LAomIzQzOwkJCQkJCSAgICAgbGlua19kYXRhLSZndDtjaWd0a1tpZHggXiAxXSk7CiYjNDM7CQl9IGVsc2UgaWYgKGlkeCAmbHQ7IE5VTV9ERUZBVUxUX0tFWVMpIHsKIAkJCWZvciAoaW50IGkgPSAwOyBpICZsdDsgTlVNX0RFRkFVTFRfS0VZUzsgaSYjNDM7JiM0MzspIHsKIAkJCQlpZiAoaSA9PSBpZHgpCiAJCQkJCWNvbnRpbnVlOwpAQCAtMTQyNCw2ICYjNDM7MTQ3MSw5IEBAIGllZWU4MDIxMV9ndGtfcmVrZXlfYWRkKHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCiAJaWYgKHNkYXRhLSZndDt1Lm1nZC5tZnAgIT0gSUVFRTgwMjExX01GUF9ESVNBQkxFRCkKIAkJa2V5LSZndDtjb25mLmZsYWdzIHw9IElFRUU4MDIxMV9LRVlfRkxBR19SWF9NR01UOwogCiYjNDM7CWlmIChwcmV2X2tleS0mZ3Q7Y29uZi5mbGFncyAmYW1wOyBJRUVFODAyMTFfS0VZX0ZMQUdfQ0lQKQomIzQzOwkJa2V5LSZndDtjb25mLmZsYWdzIHw9IElFRUU4MDIxMV9LRVlfRkxBR19DSVA7CiYjNDM7CiAJa2V5LSZndDtjb25mLmxpbmtfaWQgPSBsaW5rX2RhdGEtJmd0O2xpbmtfaWQ7CiAKIAllcnIgPSBpZWVlODAyMTFfa2V5X2xpbmsoa2V5LCBsaW5rX2RhdGEsIE5VTEwpOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2tleS5oIGIvbmV0L21hYzgwMjExL2tleS5oCmluZGV4IDgyNmU0ZTkzODdjNTUuLmM4NTk5MjQ5M2FmZDEgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9rZXkuaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEva2V5LmgKQEAgLTIsNyAmIzQzOzIsNyBAQAogLyoKICAqIENvcHlyaWdodCAyMDAyLTIwMDQsIEluc3RhbnQ4MDIgTmV0d29ya3MsIEluYy4KICAqIENvcHlyaWdodCAyMDA1LCBEZXZpY2VzY2FwZSBTb2Z0d2FyZSwgSW5jLgotICogQ29weXJpZ2h0IChDKSAyMDE5LCAyMDIyLTIwMjMgSW50ZWwgQ29ycG9yYXRpb24KJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMTksIDIwMjItMjAyMywgMjAyNiBJbnRlbCBDb3Jwb3JhdGlvbgogICovCiAKICNpZm5kZWYgSUVFRTgwMjExX0tFWV9ICkBAIC0xOSw2ICYjNDM7MTksNyBAQAogI2RlZmluZSBOVU1fREVGQVVMVF9LRVlTIDQKICNkZWZpbmUgTlVNX0RFRkFVTFRfTUdNVF9LRVlTIDIKICNkZWZpbmUgTlVNX0RFRkFVTFRfQkVBQ09OX0tFWVMgMgomIzQzOyNkZWZpbmUgTlVNX0NUUkxfS0VZUyAyCiAjZGVmaW5lIElOVkFMSURfUFRLX0tFWUlEWCAyIC8qIEtleWlkeCBhbHdheXMgcG9pbnRpbmcgdG8gYSBOVUxMIGtleSBmb3IgUFRLICovCiAKIHN0cnVjdCBpZWVlODAyMTFfbG9jYWw7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvbWxtZS5jIGIvbmV0L21hYzgwMjExL21sbWUuYwppbmRleCBmNTExNjdmMGZjNDZkLi4zNGQ3MTNjOWE2OTE0IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvbWxtZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS9tbG1lLmMKQEAgLTIzMzcsNiAmIzQzOzIzMzcsMTAgQEAgaWVlZTgwMjExX2FkZF9saW5rX2VsZW1zKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQlpZWVlODAyMTFfcHV0X2VodF9jYXAoc2tiLCBzZGF0YSwgc2JhbmQsCiAJCQkJICAgICAgJmFtcDthc3NvY19kYXRhLSZndDtsaW5rW2xpbmtfaWRdLmNvbm4pOwogCiYjNDM7CS8qIEluc2VydCBDSVAgb25seSBvbiB0aGUgYXNzb2MgbGluayAoaXQgd2lsbCBiZSBpbmhlcml0ZWQpICovCiYjNDM7CWlmIChsaW5rX2lkID09IGFzc29jX2RhdGEtJmd0O2Fzc29jX2xpbmtfaWQgJmFtcDsmYW1wOyBhc3NvY19kYXRhLSZndDtjaXApCiYjNDM7CQlpZWVlODAyMTFfcHV0X2NpcF9jYXAoc2tiLCBzZGF0YSk7CiYjNDM7CiAJaWYgKGFzc29jX2RhdGEtJmd0O2xpbmtbbGlua19pZF0uY29ubi5tb2RlICZndDs9IElFRUU4MDIxMV9DT05OX01PREVfVUhSKQogCQlpZWVlODAyMTFfcHV0X3Vocl9jYXAoc2tiLCBzZGF0YSwgc2JhbmQpOwogCkBAIC0yNjEzLDcgJiM0MzsyNjE3LDggQEAgc3RhdGljIGludCBpZWVlODAyMTFfc2VuZF9hc3NvYyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKIAkgICAgICAgYXNzb2NfZGF0YS0mZ3Q7aWVfbGVuICYjNDM7IC8qIGV4dHJhIElFcyAqLwogCSAgICAgICAoYXNzb2NfZGF0YS0mZ3Q7Zmlsc19rZWtfbGVuID8gMTYgLyogQUVTLVNJViAqLyA6IDApICYjNDM7CiAJICAgICAgIDkgLyogV01NICovICYjNDM7Ci0JICAgICAgIDQgLyogcmVndWxhdG9yeSBjb25uZWN0aXZpdHksIGlmIDYgR0h6IGlzIHN1cHBvcnRlZCAqLzsKJiM0MzsJICAgICAgIDQgLyogcmVndWxhdG9yeSBjb25uZWN0aXZpdHksIGlmIDYgR0h6IGlzIHN1cHBvcnRlZCAqLyAmIzQzOwomIzQzOwkgICAgICAgKGFzc29jX2RhdGEtJmd0O2NpcCA/IDQgLyogQ0lQIGNhcGFiaWxpdGllcyAqLyA6IDApOwogCiAJZm9yIChsaW5rX2lkID0gMDsgbGlua19pZCAmbHQ7IElFRUU4MDIxMV9NTERfTUFYX05VTV9MSU5LUzsgbGlua19pZCYjNDM7JiM0MzspIHsKIAkJc3RydWN0IGNmZzgwMjExX2JzcyAqY2JzcyA9IGFzc29jX2RhdGEtJmd0O2xpbmtbbGlua19pZF0uYnNzOwpAQCAtNjI3NCw2ICYjNDM7NjI3OSwxOSBAQCBzdGF0aWMgYm9vbCBpZWVlODAyMTFfYXNzb2NfY29uZmlnX2xpbmsoc3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbmssCiAJCS8qIFRPRE86IE9QRU46IHdoYXQgaGFwcGVucyBpZiBCU1MgY29sb3IgZGlzYWJsZSBpcyBzZXQ/ICovCiAJfQogCiYjNDM7CWlmIChhc3NvY19kYXRhLSZndDtjaXApIHsKJiM0MzsJCWlmIChlbGVtcy0mZ3Q7Y2lwX2NhcCkgewomIzQzOwkJCWxpbmtfc3RhLSZndDtwdWItJmd0O2NpcF9taWNfcGFkZGluZyA9CiYjNDM7CQkJCXU4X2dldF9iaXRzKGVsZW1zLSZndDtjaXBfY2FwLSZndDt2LAomIzQzOwkJCQkJICAgIFdMQU5fQ0lQX0NBUEFfTUlDX1BBRERJTkcpOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlzZGF0YV9pbmZvKHNkYXRhLAomIzQzOwkJCQkgICAmIzM0O0NJUCBDYXBhYmlsaXRpZXMgbm90IGluY2x1ZGVkIGluIGFzc29jaWF0aW9uIHJlc3BvbnNlXG4mIzM0Oyk7CiYjNDM7CQkJcmV0ID0gZmFsc2U7CiYjNDM7CQkJZ290byBvdXQ7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKIAlpZiAoY2Jzcy0mZ3Q7dHJhbnNtaXR0ZWRfYnNzKSB7CiAJCWJzc19jb25mLSZndDtub250cmFuc21pdHRlZCA9IHRydWU7CiAJCWV0aGVyX2FkZHJfY29weShic3NfY29uZi0mZ3Q7dHJhbnNtaXR0ZXJfYnNzaWQsCkBAIC03MDAwLDYgJiM0Mzs3MDE4LDcgQEAgc3RhdGljIGJvb2wgaWVlZTgwMjExX2Fzc29jX3N1Y2Nlc3Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCWdvdG8gb3V0X2VycjsKIAogCXN0YS0mZ3Q7c3RhLnNwcF9hbXNkdSA9IGFzc29jX2RhdGEtJmd0O3NwcF9hbXNkdTsKJiM0MzsJc3RhLSZndDtzdGEuY2lwID0gYXNzb2NfZGF0YS0mZ3Q7Y2lwOwogCiAJaWYgKGllZWU4MDIxMV92aWZfaXNfbWxkKCZhbXA7c2RhdGEtJmd0O3ZpZikpIHsKIAkJaWYgKCFlbGVtcy0mZ3Q7bWxfYmFzaWMpCkBAIC0xMDUzOCw2ICYjNDM7MTA1NTcsNyBAQCBpbnQgaWVlZTgwMjExX21nZF9hc3NvYyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAl9CiAKIAlhc3NvY19kYXRhLSZndDtzcHBfYW1zZHUgPSByZXEtJmd0O2ZsYWdzICZhbXA7IEFTU09DX1JFUV9TUFBfQU1TRFU7CiYjNDM7CWFzc29jX2RhdGEtJmd0O2NpcCA9IHJlcS0mZ3Q7ZmxhZ3MgJmFtcDsgQVNTT0NfUkVRX0NJUDsKIAogCWlmIChpZm1nZC0mZ3Q7YXV0aF9kYXRhICZhbXA7JmFtcDsgIWlmbWdkLSZndDthdXRoX2RhdGEtJmd0O2RvbmUpIHsKIAkJZXJyID0gLUVCVVNZOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3BhcnNlLmMgYi9uZXQvbWFjODAyMTEvcGFyc2UuYwppbmRleCBjYjJiZTE2N2NkZTc5Li4zYjY2Y2E3ZDdhNWMyIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvcGFyc2UuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvcGFyc2UuYwpAQCAtMjA1LDYgJiM0MzsyMDUsMTAgQEAgaWVlZTgwMjExX3BhcnNlX2V4dGVuc2lvbl9lbGVtZW50KHUzMiAqY3JjLAogCQkJZWxlbXMtJmd0O3R0bG1fbnVtJiM0MzsmIzQzOzsKIAkJfQogCQlicmVhazsKJiM0MzsJY2FzZSBXTEFOX0VJRF9FWFRfQ0lQX0NBUEE6CiYjNDM7CQlpZiAobGVuICZndDs9IHNpemVvZigqZWxlbXMtJmd0O2NpcF9jYXApKQomIzQzOwkJCWVsZW1zLSZndDtjaXBfY2FwID0gZGF0YTsKJiM0MzsJCWJyZWFrOwogCWNhc2UgV0xBTl9FSURfRVhUX1VIUl9PUEVSOgogCQlpZiAocGFyYW1zLSZndDttb2RlICZsdDsgSUVFRTgwMjExX0NPTk5fTU9ERV9VSFIpCiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9zdGFfaW5mby5oIGIvbmV0L21hYzgwMjExL3N0YV9pbmZvLmgKaW5kZXggZWUwZDMyODc3YzViNC4uZjQwOWY2YTNhZmExZiAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3N0YV9pbmZvLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL3N0YV9pbmZvLmgKQEAgLTQ4NSw2ICYjNDM7NDg1LDcgQEAgc3RydWN0IGllZWU4MDIxMV9mcmFnbWVudF9jYWNoZSB7CiAgKiBAbGlua19oYXNoX25vZGU6IGhhc2ggbm9kZSBmb3Igcmhhc2h0YWJsZQogICogQHN0YTogUG9pbnRzIHRvIHRoZSBTVEEgaW5mbwogICogQGd0azogZ3JvdXAga2V5cyBuZWdvdGlhdGVkIHdpdGggdGhpcyBzdGF0aW9uLCBpZiBhbnkKJiM0MzsgKiBAY2lndGs6IGNvbnRyb2wgaW50ZWdyaXR5IGdyb3VwIGtleXMgbmVnb3RpYXRlZCB3aXRoIHRoaXMgc3RhdGlvbiwgaWYgYW55CiAgKiBAdHhfc3RhdHM6IFRYIHN0YXRpc3RpY3MKICAqIEB0eF9zdGF0cy5wYWNrZXRzOiAjIG9mIHBhY2tldHMgdHJhbnNtaXR0ZWQKICAqIEB0eF9zdGF0cy5ieXRlczogIyBvZiBieXRlcyBpbiBhbGwgcGFja2V0cyB0cmFuc21pdHRlZApAQCAtNTM1LDYgJiM0Mzs1MzYsNyBAQCBzdHJ1Y3QgbGlua19zdGFfaW5mbyB7CiAJc3RydWN0IGllZWU4MDIxMV9rZXkgX19yY3UgKmd0a1tOVU1fREVGQVVMVF9LRVlTICYjNDM7CiAJCQkJCU5VTV9ERUZBVUxUX01HTVRfS0VZUyAmIzQzOwogCQkJCQlOVU1fREVGQVVMVF9CRUFDT05fS0VZU107CiYjNDM7CXN0cnVjdCBpZWVlODAyMTFfa2V5IF9fcmN1ICpjaWd0a1tOVU1fQ1RSTF9LRVlTXTsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N0YV9yeF9zdGF0cyBfX3BlcmNwdSAqcGNwdV9yeF9zdGF0czsKIAogCS8qIFVwZGF0ZWQgZnJvbSBSWCBwYXRoIG9ubHksIG5vIGxvY2tpbmcgcmVxdWlyZW1lbnRzICovCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvdXRpbC5jIGIvbmV0L21hYzgwMjExL3V0aWwuYwppbmRleCBhOTYwNzhhNmJmYTI5Li44MzAzZjYyNGI3ZjYyIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvdXRpbC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS91dGlsLmMKQEAgLTQ2ODAsNiAmIzQzOzQ2ODAsMjUgQEAgaW50IGllZWU4MDIxMV9wdXRfdWhyX2NhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCXJldHVybiAwOwogfQogCiYjNDM7aW50IGllZWU4MDIxMV9wdXRfY2lwX2NhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAomIzQzOwkJCSAgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3Qgd2lwaHlfaWZ0eXBlX2V4dF9jYXBhYiAqaWZ0X2V4dF9jYXBhID0KJiM0MzsJCWNmZzgwMjExX2dldF9pZnR5cGVfZXh0X2NhcGEoc2RhdGEtJmd0O2xvY2FsLSZndDtody53aXBoeSwKJiM0MzsJCQkJCSAgICAgaWVlZTgwMjExX3ZpZl90eXBlX3AycCgmYW1wO3NkYXRhLSZndDt2aWYpKTsKJiM0MzsJdTggY2lwX2NhcGFiaWxpdGllcyA9IGlmdF9leHRfY2FwYSA/IGlmdF9leHRfY2FwYS0mZ3Q7Y2lwX2NhcGFiaWxpdGllcyA6IDA7CiYjNDM7CiYjNDM7CWlmIChza2JfdGFpbHJvb20oc2tiKSAmbHQ7IDQpCiYjNDM7CQlyZXR1cm4gLUVOT0JVRlM7CiYjNDM7CiYjNDM7CXNrYl9wdXRfdTgoc2tiLCBXTEFOX0VJRF9FWFRFTlNJT04pOwomIzQzOwlza2JfcHV0X3U4KHNrYiwgMik7CiYjNDM7CXNrYl9wdXRfdTgoc2tiLCBXTEFOX0VJRF9FWFRfQ0lQX0NBUEEpOwomIzQzOwlza2JfcHV0X3U4KHNrYiwgY2lwX2NhcGFiaWxpdGllcyk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIGNvbnN0IGNoYXIgKmllZWU4MDIxMV9jb25uX21vZGVfc3RyKGVudW0gaWVlZTgwMjExX2Nvbm5fbW9kZSBtb2RlKQogewogCXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgbW9kZXNbXSA9IHsKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9jb3JlLmggYi9uZXQvd2lyZWxlc3MvY29yZS5oCmluZGV4IDE1ZDlmN2ViNThiNGQuLjNiOTBhYThjYzZhY2YgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9jb3JlLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3dpcmVsZXNzL2NvcmUuaApAQCAtNDQzLDEzICYjNDM7NDQzLDE2IEBAIHZvaWQgY2ZnODAyMTFfc21lX2FiYW5kb25fYXNzb2Moc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldik7CiAKIC8qIGludGVybmFsIGhlbHBlcnMgKi8KIGJvb2wgY2ZnODAyMTFfc3VwcG9ydGVkX2NpcGhlcl9zdWl0ZShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCB1MzIgY2lwaGVyKTsKJiM0Mztib29sIGNmZzgwMjExX2NpZ3RrX3N1cHBvcnRlZChzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LAomIzQzOwkJCSAgICAgIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pOwogYm9vbCBjZmc4MDIxMV92YWxpZF9rZXlfaWR4KHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsCi0JCQkgICAgaW50IGtleV9pZHgsIGJvb2wgcGFpcndpc2UsCiYjNDM7CQkJICAgIGludCBrZXlfaWR4LCBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSwKIAkJCSAgICBjb25zdCB1OCAqbWFjX2FkZHIpOwogaW50IGNmZzgwMjExX3ZhbGlkYXRlX2tleV9zZXR0aW5ncyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCiAJCQkJICAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwKIAkJCQkgICBzdHJ1Y3Qga2V5X3BhcmFtcyAqcGFyYW1zLCBpbnQga2V5X2lkeCwKLQkJCQkgICBib29sIHBhaXJ3aXNlLCBjb25zdCB1OCAqbWFjX2FkZHIpOwomIzQzOwkJCQkgICBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSwKJiM0MzsJCQkJICAgY29uc3QgdTggKm1hY19hZGRyKTsKIHZvaWQgX19jZmc4MDIxMV9zY2FuX2RvbmUoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcGh5X3dvcmsgKndrKTsKIHZvaWQgX19fY2ZnODAyMTFfc2Nhbl9kb25lKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKIAkJCSAgIGJvb2wgc2VuZF9tZXNzYWdlKTsKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9pYnNzLmMgYi9uZXQvd2lyZWxlc3MvaWJzcy5jCmluZGV4IGIxZDc0OGJkYjUwNGUuLjZhZTU2MWVkN2YzN2YgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9pYnNzLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3dpcmVsZXNzL2lic3MuYwpAQCAtMTcyLDcgJiM0MzsxNzIsOCBAQCB2b2lkIGNmZzgwMjExX2NsZWFyX2lic3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBub3dleHQpCiAJICovCiAJaWYgKHJkZXYtJmd0O29wcy0mZ3Q7ZGVsX2tleSkKIAkJZm9yIChpID0gMDsgaSAmbHQ7IDY7IGkmIzQzOyYjNDM7KQotCQkJcmRldl9kZWxfa2V5KHJkZXYsIHdkZXYsIC0xLCBpLCBmYWxzZSwgTlVMTCk7CiYjNDM7CQkJcmRldl9kZWxfa2V5KHJkZXYsIHdkZXYsIC0xLCBpLCBOTDgwMjExX0tFWVRZUEVfR1JPVVAsCiYjNDM7CQkJCSAgICAgTlVMTCk7CiAKIAlpZiAod2Rldi0mZ3Q7dS5pYnNzLmN1cnJlbnRfYnNzKSB7CiAJCWNmZzgwMjExX3VuaG9sZF9ic3Mod2Rldi0mZ3Q7dS5pYnNzLmN1cnJlbnRfYnNzKTsKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9ubDgwMjExLmMgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jCmluZGV4IDhhZGJlZjVmMDQ0MjUuLjU2NjQ4ZjdkOWM3ZmUgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9ubDgwMjExLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3dpcmVsZXNzL25sODAyMTEuYwpAQCAtMTA5Niw2ICYjNDM7MTA5Niw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBubDgwMjExX3BvbGljeVtOVU1fTkw4MDIxMV9BVFRSXSA9IHsKIAlbTkw4MDIxMV9BVFRSX05QQ0FfUFVOQ1RfQklUTUFQXSA9CiAJCU5MQV9QT0xJQ1lfRlVMTF9SQU5HRShOTEFfVTMyLCAmYW1wO25sODAyMTFfcHVuY3RfYml0bWFwX3JhbmdlKSwKIAlbTkw4MDIxMV9BVFRSX1NUQV9EVU1QX0xJTktfU1RBVFNdID0geyAudHlwZSA9IE5MQV9GTEFHIH0sCiYjNDM7CVtOTDgwMjExX0FUVFJfQVNTT0NfQ0lQXSA9IHsgLnR5cGUgPSBOTEFfRkxBRyB9LAomIzQzOwlbTkw4MDIxMV9BVFRSX0NJUF9DQVBBQklMSVRJRVNdID0geyAudHlwZSA9IE5MQV9VOCB9LAogfTsKIAogLyogcG9saWN5IGZvciB0aGUga2V5IGF0dHJpYnV0ZXMgKi8KQEAgLTE3NjEsNiAmIzQzOzE3NjMsMTEgQEAgc3RhdGljIGludCBubDgwMjExX3BhcnNlX2tleShzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCBzdHJ1Y3Qga2V5X3BhcnNlICprKQogCQkJCUdFTkxfU0VUX0VSUl9NU0coaW5mbywgJiMzNDtkZWYga2V5IGlkeCBub3QgMC0zJiMzNDspOwogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJfQomIzQzOwkJfSBlbHNlIGlmIChrLSZndDt0eXBlID09IE5MODAyMTFfS0VZVFlQRV9DSUdUSykgewomIzQzOwkJCWlmIChrLSZndDtpZHggJmx0OyAwIHx8IGstJmd0O2lkeCAmZ3Q7IDEpIHsKJiM0MzsJCQkJR0VOTF9TRVRfRVJSX01TRyhpbmZvLCAmIzM0O0NJR1RLIGlkeCBub3QgMC0xJiMzNDspOwomIzQzOwkJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCQl9CiAJCX0gZWxzZSB7CiAJCQlpZiAoay0mZ3Q7aWR4ICZsdDsgMCB8fCBrLSZndDtpZHggJmd0OyA3KSB7CiAJCQkJR0VOTF9TRVRfRVJSX01TRyhpbmZvLCAmIzM0O2tleSBpZHggbm90IDAtNyYjMzQ7KTsKQEAgLTE4MjUsNyAmIzQzOzE4MzIsOSBAQCBubDgwMjExX3BhcnNlX2Nvbm5rZXlzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKIAkJfSBlbHNlIGlmIChwYXJzZS5kZWZtZ210KQogCQkJZ290byBlcnJvcjsKIAkJZXJyID0gY2ZnODAyMTFfdmFsaWRhdGVfa2V5X3NldHRpbmdzKHJkZXYsIHdkZXYsICZhbXA7cGFyc2UucCwKLQkJCQkJCSAgICAgcGFyc2UuaWR4LCBmYWxzZSwgTlVMTCk7CiYjNDM7CQkJCQkJICAgICBwYXJzZS5pZHgsCiYjNDM7CQkJCQkJICAgICBOTDgwMjExX0tFWVRZUEVfR1JPVVAsCiYjNDM7CQkJCQkJICAgICBOVUxMKTsKIAkJaWYgKGVycikKIAkJCWdvdG8gZXJyb3I7CiAJCWlmIChwYXJzZS5wLmNpcGhlciAhPSBXTEFOX0NJUEhFUl9TVUlURV9XRVA0MCAmYW1wOyZhbXA7CkBAIC0zNjE1LDYgJiM0MzszNjI0LDExIEBAIHN0YXRpYyBpbnQgbmw4MDIxMV9zZW5kX3dpcGh5KHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKIAkJCQkJCU5MODAyMTFfQVRUUl9FWFRfTUxEX0NBUEFfQU5EX09QUywKIAkJCQkJCWNhcGFiLSZndDtleHRfbWxkX2NhcGFfYW5kX29wcykpCiAJCQkJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwomIzQzOwkJCQlpZiAoY2FwYWItJmd0O2NpcF9zdXBwb3J0ZWQgJmFtcDsmYW1wOwomIzQzOwkJCQkgICAgbmxhX3B1dF91OChtc2csCiYjNDM7CQkJCQkgICAgICAgTkw4MDIxMV9BVFRSX0NJUF9DQVBBQklMSVRJRVMsCiYjNDM7CQkJCQkgICAgICAgY2FwYWItJmd0O2NpcF9jYXBhYmlsaXRpZXMpKQomIzQzOwkJCQkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiAKIAkJCQlubGFfbmVzdF9lbmQobXNnLCBuZXN0ZWRfZXh0X2NhcGFiKTsKIAkJCQlpZiAoc3RhdGUtJmd0O3NwbGl0KQpAQCAtNTM3MSw2ICYjNDM7NTM4NSw3IEBAIHN0YXRpYyBpbnQgbmw4MDIxMV9nZXRfa2V5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGluZm8tJmd0O3VzZXJfcHRyWzFdOwogCXU4IGtleV9pZHggPSAwOwogCWNvbnN0IHU4ICptYWNfYWRkciA9IE5VTEw7CiYjNDM7CWVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlOwogCWJvb2wgcGFpcndpc2U7CiAJc3RydWN0IGdldF9rZXlfY29va2llIGNvb2tpZSA9IHsKIAkJLmVycm9yID0gMCwKQEAgLTU0MDMsMTkgJiM0Mzs1NDE4LDI0IEBAIHN0YXRpYyBpbnQgbmw4MDIxMV9nZXRfa2V5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAJCW1hY19hZGRyID0gbmxhX2RhdGEoaW5mby0mZ3Q7YXR0cnNbTkw4MDIxMV9BVFRSX01BQ10pOwogCiAJcGFpcndpc2UgPSAhIW1hY19hZGRyOwomIzQzOwl0eXBlID0gcGFpcndpc2UgPyBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0UgOiBOTDgwMjExX0tFWVRZUEVfR1JPVVA7CiAJaWYgKGluZm8tJmd0O2F0dHJzW05MODAyMTFfQVRUUl9LRVlfVFlQRV0pIHsKLQkJdTMyIGt0ID0gbmxhX2dldF91MzIoaW5mby0mZ3Q7YXR0cnNbTkw4MDIxMV9BVFRSX0tFWV9UWVBFXSk7CiYjNDM7CQl0eXBlID0gbmxhX2dldF91MzIoaW5mby0mZ3Q7YXR0cnNbTkw4MDIxMV9BVFRSX0tFWV9UWVBFXSk7CiAKLQkJaWYgKGt0ICE9IE5MODAyMTFfS0VZVFlQRV9HUk9VUCAmYW1wOyZhbXA7Ci0JCSAgICBrdCAhPSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0UpCiYjNDM7CQlpZiAodHlwZSAhPSBOTDgwMjExX0tFWVRZUEVfR1JPVVAgJmFtcDsmYW1wOwomIzQzOwkJICAgIHR5cGUgIT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFICZhbXA7JmFtcDsKJiM0MzsJCSAgICB0eXBlICE9IE5MODAyMTFfS0VZVFlQRV9DSUdUSykgewomIzQzOwkJCUdFTkxfU0VUX0VSUl9NU0coaW5mbywgJiMzNDtrZXkgdHlwZSBub3QgcGFpcndpc2UsIGdyb3VwIG9yIENJR1RLJiMzNDspOwogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCXBhaXJ3aXNlID0ga3QgPT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFOwomIzQzOwkJfQomIzQzOwomIzQzOwkJcGFpcndpc2UgPSB0eXBlID09IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRTsKIAl9CiAKIAlpZiAoIXJkZXYtJmd0O29wcy0mZ3Q7Z2V0X2tleSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0JaWYgKCFjZmc4MDIxMV92YWxpZF9rZXlfaWR4KHdkZXYsIGtleV9pZHgsIHBhaXJ3aXNlLCBtYWNfYWRkcikpCiYjNDM7CWlmICghY2ZnODAyMTFfdmFsaWRfa2V5X2lkeCh3ZGV2LCBrZXlfaWR4LCB0eXBlLCBtYWNfYWRkcikpCiAJCXJldHVybiAtRU5PRU5UOwogCiAJbXNnID0gbmxtc2dfbmV3KE5MTVNHX0RFRkFVTFRfU0laRSwgR0ZQX0tFUk5FTCk7CkBAIC01NDQ0LDcgJiM0Mzs1NDY0LDcgQEAgc3RhdGljIGludCBubDgwMjExX2dldF9rZXkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAlpZiAoZXJyKQogCQlnb3RvIGZyZWVfbXNnOwogCi0JZXJyID0gcmRldl9nZXRfa2V5KHJkZXYsIHdkZXYsIGxpbmtfaWQsIGtleV9pZHgsIHBhaXJ3aXNlLCBtYWNfYWRkciwKJiM0MzsJZXJyID0gcmRldl9nZXRfa2V5KHJkZXYsIHdkZXYsIGxpbmtfaWQsIGtleV9pZHgsIHR5cGUsIG1hY19hZGRyLAogCQkJICAgJmFtcDtjb29raWUsIGdldF9rZXlfY2FsbGJhY2spOwogCiAJaWYgKGVycikKQEAgLTU2MDMsOCAmIzQzOzU2MjMsOSBAQCBzdGF0aWMgaW50IG5sODAyMTFfbmV3X2tleShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCiAJLyogZm9yIG5vdyAqLwogCWlmIChrZXkudHlwZSAhPSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0UgJmFtcDsmYW1wOwotCSAgICBrZXkudHlwZSAhPSBOTDgwMjExX0tFWVRZUEVfR1JPVVApIHsKLQkJR0VOTF9TRVRfRVJSX01TRyhpbmZvLCAmIzM0O2tleSB0eXBlIG5vdCBwYWlyd2lzZSBvciBncm91cCYjMzQ7KTsKJiM0MzsJICAgIGtleS50eXBlICE9IE5MODAyMTFfS0VZVFlQRV9HUk9VUCAmYW1wOyZhbXA7CiYjNDM7CSAgICBrZXkudHlwZSAhPSBOTDgwMjExX0tFWVRZUEVfQ0lHVEspIHsKJiM0MzsJCUdFTkxfU0VUX0VSUl9NU0coaW5mbywgJiMzNDtrZXkgdHlwZSBub3QgcGFpcndpc2UsIGdyb3VwIG9yIENJR1RLJiMzNDspOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTU2MTYsOCAmIzQzOzU2MzcsNyBAQCBzdGF0aWMgaW50IG5sODAyMTFfbmV3X2tleShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKIAlpZiAoY2ZnODAyMTFfdmFsaWRhdGVfa2V5X3NldHRpbmdzKHJkZXYsIHdkZXYsICZhbXA7a2V5LnAsIGtleS5pZHgsCi0JCQkJCSAgIGtleS50eXBlID09IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRSwKLQkJCQkJICAgbWFjX2FkZHIpKSB7CiYjNDM7CQkJCQkgICBrZXkudHlwZSwgbWFjX2FkZHIpKSB7CiAJCUdFTkxfU0VUX0VSUl9NU0coaW5mbywgJiMzNDtrZXkgc2V0dGluZyB2YWxpZGF0aW9uIGZhaWxlZCYjMzQ7KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtNTYzMSw4ICYjNDM7NTY1MSw3IEBAIHN0YXRpYyBpbnQgbmw4MDIxMV9uZXdfa2V5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAJCQkJa2V5LnR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFKTsKIAogCWlmICghZXJyKSB7Ci0JCWVyciA9IHJkZXZfYWRkX2tleShyZGV2LCB3ZGV2LCBsaW5rX2lkLCBrZXkuaWR4LAotCQkJCSAgIGtleS50eXBlID09IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRSwKJiM0MzsJCWVyciA9IHJkZXZfYWRkX2tleShyZGV2LCB3ZGV2LCBsaW5rX2lkLCBrZXkuaWR4LCBrZXkudHlwZSwKIAkJCQkgICAgbWFjX2FkZHIsICZhbXA7a2V5LnApOwogCQlpZiAoZXJyKQogCQkJR0VOTF9TRVRfRVJSX01TRyhpbmZvLCAmIzM0O2tleSBhZGRpdGlvbiBmYWlsZWQmIzM0Oyk7CkBAIC01NjY2LDEyICYjNDM7NTY4NSwxMyBAQCBzdGF0aWMgaW50IG5sODAyMTFfZGVsX2tleShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCiAJLyogZm9yIG5vdyAqLwogCWlmIChrZXkudHlwZSAhPSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0UgJmFtcDsmYW1wOwotCSAgICBrZXkudHlwZSAhPSBOTDgwMjExX0tFWVRZUEVfR1JPVVApCiYjNDM7CSAgICBrZXkudHlwZSAhPSBOTDgwMjExX0tFWVRZUEVfR1JPVVAgJmFtcDsmYW1wOwomIzQzOwkgICAga2V5LnR5cGUgIT0gTkw4MDIxMV9LRVlUWVBFX0NJR1RLKSB7CiYjNDM7CQlHRU5MX1NFVF9FUlJfTVNHKGluZm8sICYjMzQ7a2V5IHR5cGUgbm90IHBhaXJ3aXNlLCBncm91cCBvciBDSUdUSyYjMzQ7KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KIAotCWlmICghY2ZnODAyMTFfdmFsaWRfa2V5X2lkeCh3ZGV2LCBrZXkuaWR4LAotCQkJCSAgICBrZXkudHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0UsCi0JCQkJICAgIG1hY19hZGRyKSkKJiM0MzsJaWYgKCFjZmc4MDIxMV92YWxpZF9rZXlfaWR4KHdkZXYsIGtleS5pZHgsIGtleS50eXBlLCBtYWNfYWRkcikpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKCFyZGV2LSZndDtvcHMtJmd0O2RlbF9rZXkpCkBAIC01Njg1LDggJiM0Mzs1NzA1LDcgQEAgc3RhdGljIGludCBubDgwMjExX2RlbF9rZXkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAogCWlmICghZXJyKQogCQllcnIgPSByZGV2X2RlbF9rZXkocmRldiwgd2RldiwgbGlua19pZCwga2V5LmlkeCwKLQkJCQkgICBrZXkudHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0UsCi0JCQkJICAgbWFjX2FkZHIpOwomIzQzOwkJCQkgICBrZXkudHlwZSwgbWFjX2FkZHIpOwogCiAjaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFQKIAlpZiAoIWVycikgewpAQCAtODgwNSw3ICYjNDM7ODgyNCw3IEBAIGludCBjZmc4MDIxMV9jaGVja19zdGF0aW9uX2NoYW5nZShzdHJ1Y3Qgd2lwaHkgKndpcGh5LAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIFdoZW4geW91IHJ1biBpbnRvIHRoaXMsIGFkanVzdCB0aGUgY29kZSBiZWxvdyBmb3IgdGhlIG5ldyBmbGFnICovCi0JQlVJTERfQlVHX09OKE5MODAyMTFfU1RBX0ZMQUdfTUFYICE9IDgpOwomIzQzOwlCVUlMRF9CVUdfT04oTkw4MDIxMV9TVEFfRkxBR19NQVggIT0gOSk7CiAKIAlzd2l0Y2ggKHN0YXR5cGUpIHsKIAljYXNlIENGRzgwMjExX1NUQV9NRVNIX1BFRVJfS0VSTkVMOgpAQCAtODg5OSw3ICYjNDM7ODkxOCw4IEBAIGludCBjZmc4MDIxMV9jaGVja19zdGF0aW9uX2NoYW5nZShzdHJ1Y3Qgd2lwaHkgKndpcGh5LAogCQkJCSAgQklUKE5MODAyMTFfU1RBX0ZMQUdfU0hPUlRfUFJFQU1CTEUpIHwKIAkJCQkgIEJJVChOTDgwMjExX1NUQV9GTEFHX1dNRSkgfAogCQkJCSAgQklUKE5MODAyMTFfU1RBX0ZMQUdfTUZQKSB8Ci0JCQkJICBCSVQoTkw4MDIxMV9TVEFfRkxBR19TUFBfQU1TRFUpKSkKJiM0MzsJCQkJICBCSVQoTkw4MDIxMV9TVEFfRkxBR19TUFBfQU1TRFUpIHwKJiM0MzsJCQkJICBCSVQoTkw4MDIxMV9TVEFfRkxBR19DSVApKSkKIAkJCXJldHVybiAtRUlOVkFMOwogCiAJCS8qIGJ1dCBhdXRoZW50aWNhdGVkL2Fzc29jaWF0ZWQgb25seSBpZiBkcml2ZXIgaGFuZGxlcyBpdCAqLwpAQCAtOTI3Niw2ICYjNDM7OTI5NiwyMiBAQCBzdGF0aWMgaW50IG5sODAyMTFfc2V0X3N0YXRpb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAkJCW5sYV9nZXRfdTE2KGluZm8tJmd0O2F0dHJzW05MODAyMTFfQVRUUl9FTUxfQ0FQQUJJTElUWV0pOwogCX0KIAomIzQzOwlpZiAocGFyYW1zLnN0YV9mbGFnc19tYXNrICZhbXA7IEJJVChOTDgwMjExX1NUQV9GTEFHX0NJUCkgJmFtcDsmYW1wOwomIzQzOwkgICAgcGFyYW1zLnN0YV9mbGFnc19zZXQgJmFtcDsgQklUKE5MODAyMTFfU1RBX0ZMQUdfQ0lQKSkgewomIzQzOwkJaWYgKCFjZmc4MDIxMV9jaWd0a19zdXBwb3J0ZWQod2RldiwgaW5mbykpCiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CQkvKiBDSVAgY2FwYWJpbGl0aWVzIGFyZSByZXF1aXJlZCBpZiBDSVAgaXMgYmVpbmcgZW5hYmxlZCAqLwomIzQzOwkJaWYgKGluZm8tJmd0O2F0dHJzW05MODAyMTFfQVRUUl9DSVBfQ0FQQUJJTElUSUVTXSkgewomIzQzOwkJCXBhcmFtcy5saW5rX3N0YV9wYXJhbXMuY2lwX2NhcF9zZXQgPSB0cnVlOwomIzQzOwkJCXBhcmFtcy5saW5rX3N0YV9wYXJhbXMuY2lwX2NhcCA9CiYjNDM7CQkJCW5sYV9nZXRfdTgoaW5mby0mZ3Q7YXR0cnNbTkw4MDIxMV9BVFRSX0NJUF9DQVBBQklMSVRJRVNdKTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJR0VOTF9TRVRfRVJSX01TRyhpbmZvLCAmIzM0O05vIENJUCBjYXBhYmlsaXRpZXMgcHJvdmlkZWQmIzM0Oyk7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKIAlpZiAoaW5mby0mZ3Q7YXR0cnNbTkw4MDIxMV9BVFRSX0FJUlRJTUVfV0VJR0hUXSkKIAkJcGFyYW1zLmFpcnRpbWVfd2VpZ2h0ID0KIAkJCW5sYV9nZXRfdTE2KGluZm8tJmd0O2F0dHJzW05MODAyMTFfQVRUUl9BSVJUSU1FX1dFSUdIVF0pOwpAQCAtOTQ3NSw2ICYjNDM7OTUxMSwyMiBAQCBzdGF0aWMgaW50IG5sODAyMTFfbmV3X3N0YXRpb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAkJCW5sYV9nZXRfdTE2KGluZm8tJmd0O2F0dHJzW05MODAyMTFfQVRUUl9FTUxfQ0FQQUJJTElUWV0pOwogCX0KIAomIzQzOwlpZiAocGFyYW1zLnN0YV9mbGFnc19tYXNrICZhbXA7IEJJVChOTDgwMjExX1NUQV9GTEFHX0NJUCkgJmFtcDsmYW1wOwomIzQzOwkgICAgcGFyYW1zLnN0YV9mbGFnc19zZXQgJmFtcDsgQklUKE5MODAyMTFfU1RBX0ZMQUdfQ0lQKSkgewomIzQzOwkJaWYgKCFjZmc4MDIxMV9jaWd0a19zdXBwb3J0ZWQod2RldiwgaW5mbykpCiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CQkvKiBDSVAgY2FwYWJpbGl0aWVzIGFyZSByZXF1aXJlZCBpZiBDSVAgaXMgZW5hYmxlZCAqLwomIzQzOwkJaWYgKGluZm8tJmd0O2F0dHJzW05MODAyMTFfQVRUUl9DSVBfQ0FQQUJJTElUSUVTXSkgewomIzQzOwkJCXBhcmFtcy5saW5rX3N0YV9wYXJhbXMuY2lwX2NhcF9zZXQgPSB0cnVlOwomIzQzOwkJCXBhcmFtcy5saW5rX3N0YV9wYXJhbXMuY2lwX2NhcCA9CiYjNDM7CQkJCW5sYV9nZXRfdTgoaW5mby0mZ3Q7YXR0cnNbTkw4MDIxMV9BVFRSX0NJUF9DQVBBQklMSVRJRVNdKTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJR0VOTF9TRVRfRVJSX01TRyhpbmZvLCAmIzM0O05vIENJUCBjYXBhYmlsaXRpZXMgcHJvdmlkZWQmIzM0Oyk7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKIAlpZiAoaW5mby0mZ3Q7YXR0cnNbTkw4MDIxMV9BVFRSX0hFXzZHSFpfQ0FQQUJJTElUWV0pCiAJCXBhcmFtcy5saW5rX3N0YV9wYXJhbXMuaGVfNmdoel9jYXBhID0KIAkJCW5sYV9kYXRhKGluZm8tJmd0O2F0dHJzW05MODAyMTFfQVRUUl9IRV82R0haX0NBUEFCSUxJVFldKTsKQEAgLTk1NTIsNyAmIzQzOzk2MDQsNyBAQCBzdGF0aWMgaW50IG5sODAyMTFfbmV3X3N0YXRpb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBXaGVuIHlvdSBydW4gaW50byB0aGlzLCBhZGp1c3QgdGhlIGNvZGUgYmVsb3cgZm9yIHRoZSBuZXcgZmxhZyAqLwotCUJVSUxEX0JVR19PTihOTDgwMjExX1NUQV9GTEFHX01BWCAhPSA4KTsKJiM0MzsJQlVJTERfQlVHX09OKE5MODAyMTFfU1RBX0ZMQUdfTUFYICE9IDkpOwogCiAJc3dpdGNoICh3ZGV2LSZndDtpZnR5cGUpIHsKIAljYXNlIE5MODAyMTFfSUZUWVBFX0FQOgpAQCAtOTU4MSw2ICYjNDM7OTYzMywxMCBAQCBzdGF0aWMgaW50IG5sODAyMTFfbmV3X3N0YXRpb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAkJICAgIHBhcmFtcy5zdGFfZmxhZ3NfbWFzayAmYW1wOyBCSVQoTkw4MDIxMV9TVEFfRkxBR19TUFBfQU1TRFUpKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKJiM0MzsJCWlmIChwYXJhbXMuc3RhX2ZsYWdzX21hc2sgJmFtcDsgQklUKE5MODAyMTFfU1RBX0ZMQUdfQ0lQKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIWNmZzgwMjExX2NpZ3RrX3N1cHBvcnRlZCh3ZGV2LCBpbmZvKSkKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKIAkJLyogT2xkZXIgdXNlcnNwYWNlLCBvciB1c2Vyc3BhY2Ugd2FudGluZyB0byBiZSBjb21wYXRpYmxlIHdpdGgKIAkJICogIU5MODAyMTFfRkVBVFVSRV9GVUxMX0FQX0NMSUVOVF9TVEFURSwgd2lsbCBub3Qgc2V0IHRoZSBhdXRoCiAJCSAqIGFuZCBhc3NvYyBmbGFncyBpbiB0aGUgbWFzaywgYnV0IGFzc3VtZXMgdGhlIHN0YXRpb24gd2lsbCBiZQpAQCAtMTMzMDcsNiAmIzQzOzEzMzYzLDEzIEBAIHN0YXRpYyBpbnQgbmw4MDIxMV9hc3NvY2lhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAkJcmVxLmZsYWdzIHw9IEFTU09DX1JFUV9TUFBfQU1TRFU7CiAJfQogCiYjNDM7CWlmIChubGFfZ2V0X2ZsYWcoaW5mby0mZ3Q7YXR0cnNbTkw4MDIxMV9BVFRSX0FTU09DX0NJUF0pKSB7CiYjNDM7CQlpZiAoIWNmZzgwMjExX2NpZ3RrX3N1cHBvcnRlZChkZXYtJmd0O2llZWU4MDIxMV9wdHIsIGluZm8pKQomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwkJcmVxLmZsYWdzIHw9IEFTU09DX1JFUV9DSVA7CiYjNDM7CX0KJiM0MzsKIAlyZXEubGlua19pZCA9IG5sODAyMTFfbGlua19pZF9vcl9pbnZhbGlkKGluZm8tJmd0O2F0dHJzKTsKIAogCWlmIChpbmZvLSZndDthdHRyc1tOTDgwMjExX0FUVFJfTUxPX0xJTktTXSkgewpAQCAtMTkxNzQsNiAmIzQzOzE5MjM3LDIzIEBAIG5sODAyMTFfYWRkX21vZF9saW5rX3N0YXRpb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbywKIAkJcGFyYW1zLmhlXzZnaHpfY2FwYSA9CiAJCQlubGFfZGF0YShpbmZvLSZndDthdHRyc1tOTDgwMjExX0FUVFJfSEVfNkdIWl9DQVBBQklMSVRZXSk7CiAKJiM0MzsJaWYgKGluZm8tJmd0O2F0dHJzW05MODAyMTFfQVRUUl9DSVBfQ0FQQUJJTElUSUVTXSkgewomIzQzOwkJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi0mZ3Q7aWVlZTgwMjExX3B0cjsKJiM0MzsKJiM0MzsJCWlmICghY2ZnODAyMTFfY2lndGtfc3VwcG9ydGVkKHdkZXYsIGluZm8pKQomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwkJcGFyYW1zLmNpcF9jYXBfc2V0ID0gdHJ1ZTsKJiM0MzsJCXBhcmFtcy5jaXBfY2FwID0KJiM0MzsJCQlubGFfZ2V0X3U4KGluZm8tJmd0O2F0dHJzW05MODAyMTFfQVRUUl9DSVBfQ0FQQUJJTElUSUVTXSk7CiYjNDM7CiYjNDM7CQkvKiBPbmx5IHBlcm1pdCBDSVAgY2FwYWJpbGl0aWVzIHdoZW4gYWRkaW5nIGxpbmsgc3RhdGlvbnMgKi8KJiM0MzsJCWlmICghYWRkKSB7CiYjNDM7CQkJR0VOTF9TRVRfRVJSX01TRyhpbmZvLCAmIzM0O0Nhbm5vdCBtb2RpZnkgQ0lQIGNhcGFiaWxpdGllcyYjMzQ7KTsKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwogCWlmIChpbmZvLSZndDthdHRyc1tOTDgwMjExX0FUVFJfT1BNT0RFX05PVElGXSkgewogCQlwYXJhbXMub3Btb2RlX25vdGlmX3VzZWQgPSB0cnVlOwogCQlwYXJhbXMub3Btb2RlX25vdGlmID0KZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9yZGV2LW9wcy5oIGIvbmV0L3dpcmVsZXNzL3JkZXYtb3BzLmgKaW5kZXggNmMzYmFkOGIyZDZmNi4uZDQ5MzNiYmJmMGU3ZSAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL3JkZXYtb3BzLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3dpcmVsZXNzL3JkZXYtb3BzLmgKQEAgLTc4LDQyICYjNDM7NzgsNDMgQEAgcmRldl9jaGFuZ2VfdmlydHVhbF9pbnRmKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKIAogc3RhdGljIGlubGluZSBpbnQgcmRldl9hZGRfa2V5KHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKIAkJCSAgICAgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LCBpbnQgbGlua19pZCwKLQkJCSAgICAgICB1OCBrZXlfaW5kZXgsIGJvb2wgcGFpcndpc2UsIGNvbnN0IHU4ICptYWNfYWRkciwKLQkJCSAgICAgICBzdHJ1Y3Qga2V5X3BhcmFtcyAqcGFyYW1zKQomIzQzOwkJCSAgICAgICB1OCBrZXlfaW5kZXgsIGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLAomIzQzOwkJCSAgICAgICBjb25zdCB1OCAqbWFjX2FkZHIsIHN0cnVjdCBrZXlfcGFyYW1zICpwYXJhbXMpCiB7CiAJaW50IHJldDsKLQl0cmFjZV9yZGV2X2FkZF9rZXkoJmFtcDtyZGV2LSZndDt3aXBoeSwgd2RldiwgbGlua19pZCwga2V5X2luZGV4LCBwYWlyd2lzZSwKJiM0MzsJdHJhY2VfcmRldl9hZGRfa2V5KCZhbXA7cmRldi0mZ3Q7d2lwaHksIHdkZXYsIGxpbmtfaWQsIGtleV9pbmRleCwgdHlwZSwKIAkJCSAgIG1hY19hZGRyLCBwYXJhbXMtJmd0O21vZGUpOwogCXJldCA9IHJkZXYtJmd0O29wcy0mZ3Q7YWRkX2tleSgmYW1wO3JkZXYtJmd0O3dpcGh5LCB3ZGV2LCBsaW5rX2lkLCBrZXlfaW5kZXgsCi0JCQkJICBwYWlyd2lzZSwgbWFjX2FkZHIsIHBhcmFtcyk7CiYjNDM7CQkJCSAgdHlwZSwgbWFjX2FkZHIsIHBhcmFtcyk7CiAJdHJhY2VfcmRldl9yZXR1cm5faW50KCZhbXA7cmRldi0mZ3Q7d2lwaHksIHJldCk7CiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGlubGluZSBpbnQKIHJkZXZfZ2V0X2tleShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsCi0JICAgICBpbnQgbGlua19pZCwgdTgga2V5X2luZGV4LCBib29sIHBhaXJ3aXNlLCBjb25zdCB1OCAqbWFjX2FkZHIsCi0JICAgICB2b2lkICpjb29raWUsCiYjNDM7CSAgICAgaW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCwgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsCiYjNDM7CSAgICAgY29uc3QgdTggKm1hY19hZGRyLCB2b2lkICpjb29raWUsCiAJICAgICB2b2lkICgqY2FsbGJhY2spKHZvaWQgKmNvb2tpZSwgc3RydWN0IGtleV9wYXJhbXMqKSkKIHsKIAlpbnQgcmV0OwotCXRyYWNlX3JkZXZfZ2V0X2tleSgmYW1wO3JkZXYtJmd0O3dpcGh5LCB3ZGV2LCBsaW5rX2lkLCBrZXlfaW5kZXgsIHBhaXJ3aXNlLAomIzQzOwl0cmFjZV9yZGV2X2dldF9rZXkoJmFtcDtyZGV2LSZndDt3aXBoeSwgd2RldiwgbGlua19pZCwga2V5X2luZGV4LCB0eXBlLAogCQkJICAgbWFjX2FkZHIpOwogCXJldCA9IHJkZXYtJmd0O29wcy0mZ3Q7Z2V0X2tleSgmYW1wO3JkZXYtJmd0O3dpcGh5LCB3ZGV2LCBsaW5rX2lkLCBrZXlfaW5kZXgsCi0JCQkJICBwYWlyd2lzZSwgbWFjX2FkZHIsIGNvb2tpZSwgY2FsbGJhY2spOwomIzQzOwkJCQkgdHlwZSwgbWFjX2FkZHIsIGNvb2tpZSwgY2FsbGJhY2spOwogCXRyYWNlX3JkZXZfcmV0dXJuX2ludCgmYW1wO3JkZXYtJmd0O3dpcGh5LCByZXQpOwogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IHJkZXZfZGVsX2tleShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCiAJCQkgICAgICAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwgaW50IGxpbmtfaWQsCi0JCQkgICAgICAgdTgga2V5X2luZGV4LCBib29sIHBhaXJ3aXNlLCBjb25zdCB1OCAqbWFjX2FkZHIpCiYjNDM7CQkJICAgICAgIHU4IGtleV9pbmRleCwgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsCiYjNDM7CQkJICAgICAgIGNvbnN0IHU4ICptYWNfYWRkcikKIHsKIAlpbnQgcmV0OwotCXRyYWNlX3JkZXZfZGVsX2tleSgmYW1wO3JkZXYtJmd0O3dpcGh5LCB3ZGV2LCBsaW5rX2lkLCBrZXlfaW5kZXgsIHBhaXJ3aXNlLAomIzQzOwl0cmFjZV9yZGV2X2RlbF9rZXkoJmFtcDtyZGV2LSZndDt3aXBoeSwgd2RldiwgbGlua19pZCwga2V5X2luZGV4LCB0eXBlLAogCQkJICAgbWFjX2FkZHIpOwogCXJldCA9IHJkZXYtJmd0O29wcy0mZ3Q7ZGVsX2tleSgmYW1wO3JkZXYtJmd0O3dpcGh5LCB3ZGV2LCBsaW5rX2lkLCBrZXlfaW5kZXgsCi0JCQkJICBwYWlyd2lzZSwgbWFjX2FkZHIpOwomIzQzOwkJCQkgIHR5cGUsIG1hY19hZGRyKTsKIAl0cmFjZV9yZGV2X3JldHVybl9pbnQoJmFtcDtyZGV2LSZndDt3aXBoeSwgcmV0KTsKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3NtZS5jIGIvbmV0L3dpcmVsZXNzL3NtZS5jCmluZGV4IDJhNzE5YjVjNDg3ZTMuLjQ1OGY3MmQ4MzUxYWIgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9zbWUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvd2lyZWxlc3Mvc21lLmMKQEAgLTEzODcsNyAmIzQzOzEzODcsMTUgQEAgdm9pZCBfX2NmZzgwMjExX2Rpc2Nvbm5lY3RlZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqaWUsCiAJCQkgICAgTkw4MDIxMV9FWFRfRkVBVFVSRV9CRUFDT05fUFJPVEVDVElPTl9DTElFTlQpKQogCQkJbWF4X2tleV9pZHggPSA3OwogCQlmb3IgKGkgPSAwOyBpICZsdDs9IG1heF9rZXlfaWR4OyBpJiM0MzsmIzQzOykKLQkJCXJkZXZfZGVsX2tleShyZGV2LCB3ZGV2LCAtMSwgaSwgZmFsc2UsIE5VTEwpOwomIzQzOwkJCXJkZXZfZGVsX2tleShyZGV2LCB3ZGV2LCAtMSwgaSwgTkw4MDIxMV9LRVlUWVBFX0dST1VQLAomIzQzOwkJCQkgICAgIE5VTEwpOwomIzQzOwomIzQzOwkJaWYgKGNmZzgwMjExX2NpZ3RrX3N1cHBvcnRlZCh3ZGV2LCBOVUxMKSkgewomIzQzOwkJCXJkZXZfZGVsX2tleShyZGV2LCB3ZGV2LCAtMSwgMCwgTkw4MDIxMV9LRVlUWVBFX0NJR1RLLAomIzQzOwkJCQkgICAgIE5VTEwpOwomIzQzOwkJCXJkZXZfZGVsX2tleShyZGV2LCB3ZGV2LCAtMSwgMSwgTkw4MDIxMV9LRVlUWVBFX0NJR1RLLAomIzQzOwkJCQkgICAgIE5VTEwpOwomIzQzOwkJfQogCX0KIAogCXJkZXZfc2V0X3Fvc19tYXAocmRldiwgZGV2LCBOVUxMKTsKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy90cmFjZS5oIGIvbmV0L3dpcmVsZXNzL3RyYWNlLmgKaW5kZXggOGMyYTkxYjg1YzM5Ni4uYzIxMGNhMWU0NGUyYiAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL3RyYWNlLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3dpcmVsZXNzL3RyYWNlLmgKQEAgLTU1NywxNSAmIzQzOzU1NywxNSBAQCBUUkFDRV9FVkVOVChyZGV2X2NoYW5nZV92aXJ0dWFsX2ludGYsCiAKIERFQ0xBUkVfRVZFTlRfQ0xBU1Moa2V5X2hhbmRsZSwKIAlUUF9QUk9UTyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LCBpbnQgbGlua19pZCwKLQkJIHU4IGtleV9pbmRleCwgYm9vbCBwYWlyd2lzZSwgY29uc3QgdTggKm1hY19hZGRyKSwKLQlUUF9BUkdTKHdpcGh5LCB3ZGV2LCBsaW5rX2lkLCBrZXlfaW5kZXgsIHBhaXJ3aXNlLCBtYWNfYWRkciksCiYjNDM7CQkgdTgga2V5X2luZGV4LCBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSwgY29uc3QgdTggKm1hY19hZGRyKSwKJiM0MzsJVFBfQVJHUyh3aXBoeSwgd2RldiwgbGlua19pZCwga2V5X2luZGV4LCB0eXBlLCBtYWNfYWRkciksCiAJVFBfU1RSVUNUX19lbnRyeSgKIAkJV0lQSFlfRU5UUlkKIAkJV0RFVl9FTlRSWQogCQlNQUNfRU5UUlkobWFjX2FkZHIpCiAJCV9fZmllbGQoaW50LCBsaW5rX2lkKQogCQlfX2ZpZWxkKHU4LCBrZXlfaW5kZXgpCi0JCV9fZmllbGQoYm9vbCwgcGFpcndpc2UpCiYjNDM7CQlfX2ZpZWxkKHU4LCB0eXBlKQogCSksCiAJVFBfZmFzdF9hc3NpZ24oCiAJCVdJUEhZX0FTU0lHTjsKQEAgLTU3MywzOCAmIzQzOzU3Myw0MCBAQCBERUNMQVJFX0VWRU5UX0NMQVNTKGtleV9oYW5kbGUsCiAJCU1BQ19BU1NJR04obWFjX2FkZHIsIG1hY19hZGRyKTsKIAkJX19lbnRyeS0mZ3Q7bGlua19pZCA9IGxpbmtfaWQ7CiAJCV9fZW50cnktJmd0O2tleV9pbmRleCA9IGtleV9pbmRleDsKLQkJX19lbnRyeS0mZ3Q7cGFpcndpc2UgPSBwYWlyd2lzZTsKJiM0MzsJCV9fZW50cnktJmd0O3R5cGUgPSB0eXBlOwogCSksCiAJVFBfcHJpbnRrKFdJUEhZX1BSX0ZNVCAmIzM0OywgJiMzNDsgV0RFVl9QUl9GTVQgJiMzNDssIGxpbmtfaWQ6ICVkLCAmIzM0OwotCQkgICYjMzQ7a2V5X2luZGV4OiAldSwgcGFpcndpc2U6ICVzLCBtYWMgYWRkcjogJXBNJiMzNDssCiYjNDM7CQkgICYjMzQ7a2V5X2luZGV4OiAldSwgcGFpcndpc2U6ICVzLCB0eXBlOiAlZCwgbWFjIGFkZHI6ICVwTSYjMzQ7LAogCQkgIFdJUEhZX1BSX0FSRywgV0RFVl9QUl9BUkcsIF9fZW50cnktJmd0O2xpbmtfaWQsCi0JCSAgX19lbnRyeS0mZ3Q7a2V5X2luZGV4LCBCT09MX1RPX1NUUihfX2VudHJ5LSZndDtwYWlyd2lzZSksCi0JCSAgX19lbnRyeS0mZ3Q7bWFjX2FkZHIpCiYjNDM7CQkgIF9fZW50cnktJmd0O2tleV9pbmRleCwKJiM0MzsJCSAgQk9PTF9UT19TVFIoX19lbnRyeS0mZ3Q7dHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0UpLAomIzQzOwkJICBfX2VudHJ5LSZndDt0eXBlLCBfX2VudHJ5LSZndDttYWNfYWRkcikKICk7CiAKIERFRklORV9FVkVOVChrZXlfaGFuZGxlLCByZGV2X2dldF9rZXksCiAJVFBfUFJPVE8oc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwgaW50IGxpbmtfaWQsCi0JCSB1OCBrZXlfaW5kZXgsIGJvb2wgcGFpcndpc2UsIGNvbnN0IHU4ICptYWNfYWRkciksCi0JVFBfQVJHUyh3aXBoeSwgd2RldiwgbGlua19pZCwga2V5X2luZGV4LCBwYWlyd2lzZSwgbWFjX2FkZHIpCiYjNDM7CQkgdTgga2V5X2luZGV4LCBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSwgY29uc3QgdTggKm1hY19hZGRyKSwKJiM0MzsJVFBfQVJHUyh3aXBoeSwgd2RldiwgbGlua19pZCwga2V5X2luZGV4LCB0eXBlLCBtYWNfYWRkcikKICk7CiAKIERFRklORV9FVkVOVChrZXlfaGFuZGxlLCByZGV2X2RlbF9rZXksCiAJVFBfUFJPVE8oc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwgaW50IGxpbmtfaWQsCi0JCSB1OCBrZXlfaW5kZXgsIGJvb2wgcGFpcndpc2UsIGNvbnN0IHU4ICptYWNfYWRkciksCi0JVFBfQVJHUyh3aXBoeSwgd2RldiwgbGlua19pZCwga2V5X2luZGV4LCBwYWlyd2lzZSwgbWFjX2FkZHIpCiYjNDM7CQkgdTgga2V5X2luZGV4LCBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSwgY29uc3QgdTggKm1hY19hZGRyKSwKJiM0MzsJVFBfQVJHUyh3aXBoeSwgd2RldiwgbGlua19pZCwga2V5X2luZGV4LCB0eXBlLCBtYWNfYWRkcikKICk7CiAKIFRSQUNFX0VWRU5UKHJkZXZfYWRkX2tleSwKIAlUUF9QUk9UTyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LCBpbnQgbGlua19pZCwKLQkJIHU4IGtleV9pbmRleCwgYm9vbCBwYWlyd2lzZSwgY29uc3QgdTggKm1hY19hZGRyLCB1OCBtb2RlKSwKLQlUUF9BUkdTKHdpcGh5LCB3ZGV2LCBsaW5rX2lkLCBrZXlfaW5kZXgsIHBhaXJ3aXNlLCBtYWNfYWRkciwgbW9kZSksCiYjNDM7CQkgdTgga2V5X2luZGV4LCBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSwgY29uc3QgdTggKm1hY19hZGRyLAomIzQzOwkJIHU4IG1vZGUpLAomIzQzOwlUUF9BUkdTKHdpcGh5LCB3ZGV2LCBsaW5rX2lkLCBrZXlfaW5kZXgsIHR5cGUsIG1hY19hZGRyLCBtb2RlKSwKIAlUUF9TVFJVQ1RfX2VudHJ5KAogCQlXSVBIWV9FTlRSWQogCQlXREVWX0VOVFJZCiAJCU1BQ19FTlRSWShtYWNfYWRkcikKIAkJX19maWVsZChpbnQsIGxpbmtfaWQpCiAJCV9fZmllbGQodTgsIGtleV9pbmRleCkKLQkJX19maWVsZChib29sLCBwYWlyd2lzZSkKJiM0MzsJCV9fZmllbGQodTgsIHR5cGUpCiAJCV9fZmllbGQodTgsIG1vZGUpCiAJKSwKIAlUUF9mYXN0X2Fzc2lnbigKQEAgLTYxMywxNSAmIzQzOzYxNSwxNiBAQCBUUkFDRV9FVkVOVChyZGV2X2FkZF9rZXksCiAJCU1BQ19BU1NJR04obWFjX2FkZHIsIG1hY19hZGRyKTsKIAkJX19lbnRyeS0mZ3Q7bGlua19pZCA9IGxpbmtfaWQ7CiAJCV9fZW50cnktJmd0O2tleV9pbmRleCA9IGtleV9pbmRleDsKLQkJX19lbnRyeS0mZ3Q7cGFpcndpc2UgPSBwYWlyd2lzZTsKJiM0MzsJCV9fZW50cnktJmd0O3R5cGUgPSB0eXBlOwogCQlfX2VudHJ5LSZndDttb2RlID0gbW9kZTsKIAkpLAogCVRQX3ByaW50ayhXSVBIWV9QUl9GTVQgJiMzNDssICYjMzQ7IFdERVZfUFJfRk1UICYjMzQ7LCBsaW5rX2lkOiAlZCwgJiMzNDsKLQkJICAmIzM0O2tleV9pbmRleDogJXUsIG1vZGU6ICV1LCBwYWlyd2lzZTogJXMsICYjMzQ7CiYjNDM7CQkgICYjMzQ7a2V5X2luZGV4OiAldSwgbW9kZTogJXUsIHBhaXJ3aXNlOiAlcywgdHlwZTogJWQsICYjMzQ7CiAJCSAgJiMzNDttYWMgYWRkcjogJXBNJiMzNDssCiAJCSAgV0lQSFlfUFJfQVJHLCBXREVWX1BSX0FSRywgX19lbnRyeS0mZ3Q7bGlua19pZCwKIAkJICBfX2VudHJ5LSZndDtrZXlfaW5kZXgsIF9fZW50cnktJmd0O21vZGUsCi0JCSAgQk9PTF9UT19TVFIoX19lbnRyeS0mZ3Q7cGFpcndpc2UpLCBfX2VudHJ5LSZndDttYWNfYWRkcikKJiM0MzsJCSAgQk9PTF9UT19TVFIoX19lbnRyeS0mZ3Q7dHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0UpLAomIzQzOwkJICBfX2VudHJ5LSZndDt0eXBlLCBfX2VudHJ5LSZndDttYWNfYWRkcikKICk7CiAKIFRSQUNFX0VWRU5UKHJkZXZfc2V0X2RlZmF1bHRfa2V5LApkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3V0aWwuYyBiL25ldC93aXJlbGVzcy91dGlsLmMKaW5kZXggM2U1ODRkMGNhM2UyNi4uZGQxNjZjMzUyOTEwZiAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL3V0aWwuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvd2lyZWxlc3MvdXRpbC5jCkBAIC0yNTgsOCAmIzQzOzI1OCwyNCBAQCBzdGF0aWMgYm9vbCBjZmc4MDIxMV9pZ3RrX2NpcGhlcl9zdXBwb3J0ZWQoc3RydWN0IHdpcGh5ICp3aXBoeSkKIAlyZXR1cm4gZmFsc2U7CiB9CiAKJiM0Mztib29sIGNmZzgwMjExX2NpZ3RrX3N1cHBvcnRlZChzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LAomIzQzOwkJCSAgICAgIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3Qgd2lwaHlfaWZ0eXBlX2V4dF9jYXBhYiAqZXh0X2NhcGFiID0KJiM0MzsJCWNmZzgwMjExX2dldF9pZnR5cGVfZXh0X2NhcGEod2Rldi0mZ3Q7d2lwaHksIHdkZXYtJmd0O2lmdHlwZSk7CiYjNDM7CiYjNDM7CWlmIChleHRfY2FwYWIgJmFtcDsmYW1wOyBleHRfY2FwYWItJmd0O2NpcF9zdXBwb3J0ZWQpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsKJiM0MzsJaWYgKGluZm8pCiYjNDM7CQlHRU5MX1NFVF9FUlJfTVNHKGluZm8sCiYjNDM7CQkJCSAmIzM0O0NvbnRyb2wgSW50ZWdyaXR5IFByb3RvY29sIG5vdCBzdXBwb3J0ZWQmIzM0Oyk7CiYjNDM7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiBib29sIGNmZzgwMjExX3ZhbGlkX2tleV9pZHgoc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwKLQkJCSAgICBpbnQga2V5X2lkeCwgYm9vbCBwYWlyd2lzZSwKJiM0MzsJCQkgICAgaW50IGtleV9pZHgsIGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLAogCQkJICAgIGNvbnN0IHU4ICptYWNfYWRkcikKIHsKIAlpZiAoV0FSTl9PTighd2RldikpCkBAIC0yNzIsMTMgJiM0MzsyODgsMjQgQEAgYm9vbCBjZmc4MDIxMV92YWxpZF9rZXlfaWR4KHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsCiAJICogQ2FuJiMzOTt0IGRpZmZlcmVudGlhdGUgY2lwaGVycyBoZXJlIHNvIGFsbG93IDAuLjMuCiAJICogUGFpcndpc2Uga2V5cyBtdXN0IGJlIGZvciBhIHN0YXRpb24gKE1BQyBhZGRyZXNzIGdpdmVuKS4KIAkgKi8KLQlpZiAocGFpcndpc2UpIHsKJiM0MzsJaWYgKHR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFKSB7CiAJCWlmICghbWFjX2FkZHIpCiAJCQlyZXR1cm4gZmFsc2U7CiAKIAkJcmV0dXJuIGtleV9pZHggJmx0OyA0OwogCX0KIAomIzQzOwkvKiBDaGVjayB0aGUgd2Rldi9pZnR5cGUgc3VwcG9ydHMgQ0lHVEsgKi8KJiM0MzsJaWYgKHR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX0NJR1RLKSB7CiYjNDM7CQlpZiAoIWNmZzgwMjExX2NpZ3RrX3N1cHBvcnRlZCh3ZGV2LCBOVUxMKSkKJiM0MzsJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CQlpZiAoa2V5X2lkeCAmZ3Q7PSAyKQomIzQzOwkJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJCS8qIGZhbGx0aHJvdWdoIGZvciBtYWNfYWRkciBjaGVja3MgKi8KJiM0MzsJfQomIzQzOwogCS8qCiAJICogRm9yIGdyb3VwIGtleXMsIG1hY19hZGRyPT1OVUxMIG1lYW5zIHNldHRpbmcgYSBncm91cCBrZXkKIAkgKiBmb3IgVFgsIHdoaWNoIGlzIG9ubHkgc3VwcG9ydGVkIG9uIHNvbWUgaW50ZXJmYWNlIHR5cGVzLApAQCAtMzQzLDkgJiM0MzszNzAsMTIgQEAgYm9vbCBjZmc4MDIxMV92YWxpZF9rZXlfaWR4KHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsCiBpbnQgY2ZnODAyMTFfdmFsaWRhdGVfa2V5X3NldHRpbmdzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKIAkJCQkgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LAogCQkJCSAgIHN0cnVjdCBrZXlfcGFyYW1zICpwYXJhbXMsIGludCBrZXlfaWR4LAotCQkJCSAgIGJvb2wgcGFpcndpc2UsIGNvbnN0IHU4ICptYWNfYWRkcikKJiM0MzsJCQkJICAgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsCiYjNDM7CQkJCSAgIGNvbnN0IHU4ICptYWNfYWRkcikKIHsKLQlpZiAoIWNmZzgwMjExX3ZhbGlkX2tleV9pZHgod2Rldiwga2V5X2lkeCwgcGFpcndpc2UsIG1hY19hZGRyKSkKJiM0MzsJYm9vbCBwYWlyd2lzZSA9IHR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFOwomIzQzOwomIzQzOwlpZiAoIWNmZzgwMjExX3ZhbGlkX2tleV9pZHgod2Rldiwga2V5X2lkeCwgdHlwZSwgbWFjX2FkZHIpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXN3aXRjaCAocGFyYW1zLSZndDtjaXBoZXIpIHsKQEAgLTExNzIsNyAmIzQzOzEyMDIsNyBAQCB2b2lkIGNmZzgwMjExX3VwbG9hZF9jb25uZWN0X2tleXMoc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldikKIAlmb3IgKGkgPSAwOyBpICZsdDsgNDsgaSYjNDM7JiM0MzspIHsKIAkJaWYgKCF3ZGV2LSZndDtjb25uZWN0X2tleXMtJmd0O3BhcmFtc1tpXS5jaXBoZXIpCiAJCQljb250aW51ZTsKLQkJaWYgKHJkZXZfYWRkX2tleShyZGV2LCB3ZGV2LCAtMSwgaSwgZmFsc2UsIE5VTEwsCiYjNDM7CQlpZiAocmRldl9hZGRfa2V5KHJkZXYsIHdkZXYsIC0xLCBpLCBOTDgwMjExX0tFWVRZUEVfR1JPVVAsIE5VTEwsCiAJCQkJICZhbXA7d2Rldi0mZ3Q7Y29ubmVjdF9rZXlzLSZndDtwYXJhbXNbaV0pKSB7CiAJCQluZXRkZXZfZXJyKGRldiwgJiMzNDtmYWlsZWQgdG8gc2V0IGtleSAlZFxuJiMzNDssIGkpOwogCQkJY29udGludWU7CmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvd2V4dC1jb21wYXQuYyBiL25ldC93aXJlbGVzcy93ZXh0LWNvbXBhdC5jCmluZGV4IGQ0NWJjMDhjMGRlNDkuLmVjMjM4OWY2YjhiMTggMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy93ZXh0LWNvbXBhdC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC93aXJlbGVzcy93ZXh0LWNvbXBhdC5jCkBAIC00MDEsNiAmIzQzOzQwMSw4IEBAIHN0YXRpYyBpbnQgY2ZnODAyMTFfc2V0X2VuY3J5cHRpb24oc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAogCQkJCSAgIGludCBpZHgsIHN0cnVjdCBrZXlfcGFyYW1zICpwYXJhbXMpCiB7CiAJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi0mZ3Q7aWVlZTgwMjExX3B0cjsKJiM0MzsJZW51bSBubDgwMjExX2tleV90eXBlIGtleV90eXBlID0KJiM0MzsJCXBhaXJ3aXNlID8gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFIDogTkw4MDIxMV9LRVlUWVBFX0dST1VQOwogCWludCBlcnIsIGk7CiAJYm9vbCByZWpvaW4gPSBmYWxzZTsKIApAQCAtNDU0LDExICYjNDM7NDU2LDExIEBAIHN0YXRpYyBpbnQgY2ZnODAyMTFfc2V0X2VuY3J5cHRpb24oc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAogCQkJCXJlam9pbiA9IHRydWU7CiAJCQl9CiAKLQkJCWlmICghY2ZnODAyMTFfdmFsaWRfa2V5X2lkeCh3ZGV2LCBpZHgsIHBhaXJ3aXNlLCBhZGRyKSkKJiM0MzsJCQlpZiAoIWNmZzgwMjExX3ZhbGlkX2tleV9pZHgod2RldiwgaWR4LCBrZXlfdHlwZSwgYWRkcikpCiAJCQkJZXJyID0gLUVOT0VOVDsKIAkJCWVsc2UKLQkJCQllcnIgPSByZGV2X2RlbF9rZXkocmRldiwgd2RldiwgLTEsIGlkeCwgcGFpcndpc2UsCi0JCQkJCQkgICBhZGRyKTsKJiM0MzsJCQkJZXJyID0gcmRldl9kZWxfa2V5KHJkZXYsIHdkZXYsIC0xLCBpZHgsCiYjNDM7CQkJCQkJICAga2V5X3R5cGUsIGFkZHIpOwogCQl9CiAJCXdkZXYtJmd0O3dleHQuY29ubmVjdC5wcml2YWN5ID0gZmFsc2U7CiAJCS8qCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIwOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMjQ2CgkJCQkJCQlvdXRwdXQ6IDMzNgoJCQkJCQkJdGhvdWdodHM6IDI3MDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ0lQIFN1cHBvcnQgaW4gbWFjODAyMTEgYW5kIGNmZzgwMjExOiBGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgYWRkaW5nIHNpZ25pZmljYW50IG5ldyBmdW5jdGlvbmFsaXR5IGZvciBDb250cm9sIEludGVncml0eSBQcm90b2NvbCAoQ0lQKSBzdXBwb3J0IHdpdGhpbiB0aGUgd2lyZWxlc3Mgc3RhY2suIEkgc2VlIHRoZSBhZGRpdGlvbiBvZiBgTkw4MDIxMV9LRVlUWVBFX0NJR1RLYCwgYW5kIG1vZGlmaWNhdGlvbnMgdG8gYGNmZzgwMjExX29wc2AgdG8gYWNjb21tb2RhdGUgdGhlIG5ldyBDSVAga2V5IHR5cGUsIHdoaWNoIG5hdHVyYWxseSBhbHRlcnMgdGhlIGBhZGRfa2V5YCwgYGdldF9rZXlgLCBhbmQgYGRlbF9rZXlgIG9wZXJhdGlvbnMuIEkmIzM5O20gYWxzbyBub3RpY2luZyBuZXcgbmV0bGluayBhdHRyaWJ1dGVzIChgTkw4MDIxMV9BVFRSX0FTU09DX0NJUGAsIGBOTDgwMjExX0FUVFJfQ0lQX0NBUEFCSUxJVElFU2AsIGBOTDgwMjExX1NUQV9GTEFHX0NJUGApIGFuZCBtb2RpZmljYXRpb25zIHdpdGhpbiBgbWFjODAyMTFgIGl0c2VsZiB0byBwcm9jZXNzIENJUCBrZXlzLCBpbmNsdWRpbmcgdGhlIGludHJvZHVjdGlvbiBvZiBgSUVFRTgwMjExX0tFWV9GTEFHX0NJUGAsIGFuZCBoYW5kbGluZyB0aGUgYGNpZ3RrYCBhcnJheS4KCkEga2V5IGluZGljYXRvciBmb3IgZnV6emluZyBpcyB0aGUgaW50ZWdyYXRpb24gb2YgQ0lQIHN1cHBvcnQgaW50byBgbWFjODAyMTFfaHdzaW1gLiBUaGUgcGF0Y2ggZXhwbGljaXRseSBlbmFibGVzIGBtYWM4MDIxMV9od3NpbWAgdG8gdGVzdCB0aGlzIGZlYXR1cmUuIFRoaXMgbWVhbnMgSSBoYXZlIGEgcmVhZGlseSBhdmFpbGFibGUgZW52aXJvbm1lbnQgdG8gdmFsaWRhdGUgYW5kIGV4cGxvcmUgdGhlIGltcGxlbWVudGF0aW9uLgoKVGhlIGNoYW5nZXMgaW4gYG5sODAyMTEuY2AgdG8gaGFuZGxlIHRoZSBuZXcgYXR0cmlidXRlcyBhbmQga2V5IHR5cGVzLCBhbmQgdGhlIGFkanVzdG1lbnRzIGluIGBtYWM4MDIxMWAgdG8gcGFyc2UgYFdMQU5fRUlEX0VYVF9DSVBfQ0FQQWAgYXJlIGdvb2QgaW5kaWNhdGlvbnMgb2YgYXJlYXMgdGhhdCB3YXJyYW50IGF0dGVudGlvbi4gU28sIGdpdmVuIHRoZXNlIGZ1bmN0aW9uYWwgY2hhbmdlcywgdGhpcyBwYXRjaCBpcyBhYnNvbHV0ZWx5IHdvcnRoIGZ1enppbmcuCgpNeSBwcmltYXJ5IGZvY3VzIHBvaW50cyBmb3IgZnV6emluZyB3b3VsZCBiZSB0aGUgbmV0bGluayBlbnRyeSBwb2ludHMsIHRoZXNlIGFyZSB0aGUgZXhwb3NlZCBlbnRyeSBwb2ludHMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dDoKKiAgIGBubDgwMjExX25ld19rZXlgCiogICBgbmw4MDIxMV9kZWxfa2V5YAoqICAgYG5sODAyMTFfZ2V0X2tleWAKKiAgIGBubDgwMjExX3NldF9zdGF0aW9uYAoqICAgYG5sODAyMTFfbmV3X3N0YXRpb25gCiogICBgbmw4MDIxMV9hc3NvY2lhdGVgCgpUaGUga2VybmVsLWludGVybmFsIGVudHJ5IHBvaW50cyB0aGF0IHdvdWxkIGFsc28gYmUgaW50ZXJlc3RpbmcgaW5jbHVkZToKKiAgIGBpZWVlODAyMTFfa2V5X2xpbmtgCiogICBgaWVlZTgwMjExX2d0a19yZWtleV9hZGRgCiogICBgaWVlZTgwMjExX3B1dF9jaXBfY2FwYAoqICAgYGNmZzgwMjExX2NpZ3RrX3N1cHBvcnRlZGAKKiAgIGBjZmc4MDIxMV92YWxpZF9rZXlfaWR4YAoqICAgYGNmZzgwMjExX3ZhbGlkYXRlX2tleV9zZXR0aW5nc2AKCkluIHRlcm1zIG9mIGNvbmZpZ3VyYXRpb24sIEkmIzM5O2xsIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZSBgQ09ORklHX0NGRzgwMjExYCwgYENPTkZJR19NQUM4MDIxMWAgYW5kIGBDT05GSUdfTUFDODAyMTFfSFdTSU1gIGVuYWJsZWQsIHdoaWNoIGFyZSBzdGFuZGFyZCBmb3Igd2lyZWxlc3MgdGVzdGluZyBhbmQgZnV6emluZy4KClRoZSBjaGFuZ2VzIGluIGBtYWM4MDIxMV9od3NpbV9pZnR5cGVzX2V4dF9jYXBhYCB0byBhZGQgYGNpcF9zdXBwb3J0ZWQgPSB0cnVlYCBtYWtlcyBpdCBwZXJmZWN0IGZvciBsb2NhbCB0ZXN0aW5nIG9mIHRoaXMgbmV3IGZ1bmN0aW9uYWxpdHksIHNvIHRoYXQgd2lsbCBtYWtlIHZhbGlkYXRpb24gYSBsb3QgZWFzaWVyLiBBbGwgb2YgdGhpcyBzaG91bGQgYmUgZG9hYmxlLCBhbmQgaXQgbG9va3MgbGlrZSBhIGdvb2QgdGFyZ2V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIwOjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNQUM4MDIxMSYjMzQ7LAogICAgJiMzNDtDRkc4MDIxMSYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMV9IV1NJTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25sODAyMTFfbmV3X2tleSYjMzQ7LAogICAgJiMzNDtubDgwMjExX2RlbF9rZXkmIzM0OywKICAgICYjMzQ7bmw4MDIxMV9nZXRfa2V5JiMzNDssCiAgICAmIzM0O25sODAyMTFfc2V0X3N0YXRpb24mIzM0OywKICAgICYjMzQ7bmw4MDIxMV9uZXdfc3RhdGlvbiYjMzQ7LAogICAgJiMzNDtubDgwMjExX2Fzc29jaWF0ZSYjMzQ7LAogICAgJiMzNDtpZWVlODAyMTFfa2V5X2xpbmsmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX2d0a19yZWtleV9hZGQmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX3B1dF9jaXBfY2FwJiMzNDssCiAgICAmIzM0O2NmZzgwMjExX2NpZ3RrX3N1cHBvcnRlZCYjMzQ7LAogICAgJiMzNDtjZmc4MDIxMV92YWxpZF9rZXlfaWR4JiMzNDssCiAgICAmIzM0O2NmZzgwMjExX3ZhbGlkYXRlX2tleV9zZXR0aW5ncyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIHRoZSBDb250cm9sIEludGVncml0eSBQcm90b2NvbCAoQ0lQKSBpbiBjZmc4MDIxMSBhbmQgbWFjODAyMTEsIGluY2x1ZGluZyBhIG5ldyBrZXkgdHlwZSBgTkw4MDIxMV9LRVlUWVBFX0NJR1RLYCBhbmQgbmV3IG5ldGxpbmsgYXR0cmlidXRlcy4gSXQgbW9kaWZpZXMga2V5IGhhbmRsaW5nIGxvZ2ljIGFjcm9zcyB0aGUgd2lyZWxlc3Mgc3RhY2sgYW5kIHVwZGF0ZXMgYG1hYzgwMjExX2h3c2ltYCB0byBhZHZlcnRpc2UgQ0lQIHN1cHBvcnQsIG1ha2luZyBpdCB0ZXN0YWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRoZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgdmlhIHN0YW5kYXJkIG5sODAyMTEgbmV0bGluayBjb21tYW5kcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUFDODAyMTEmIzM0OywKICAgICYjMzQ7Q0ZHODAyMTEmIzM0OywKICAgICYjMzQ7TUFDODAyMTFfSFdTSU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtubDgwMjExX25ld19rZXkmIzM0OywKICAgICYjMzQ7bmw4MDIxMV9kZWxfa2V5JiMzNDssCiAgICAmIzM0O25sODAyMTFfZ2V0X2tleSYjMzQ7LAogICAgJiMzNDtubDgwMjExX3NldF9zdGF0aW9uJiMzNDssCiAgICAmIzM0O25sODAyMTFfbmV3X3N0YXRpb24mIzM0OywKICAgICYjMzQ7bmw4MDIxMV9hc3NvY2lhdGUmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX2tleV9saW5rJiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9ndGtfcmVrZXlfYWRkJiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9wdXRfY2lwX2NhcCYjMzQ7LAogICAgJiMzNDtjZmc4MDIxMV9jaWd0a19zdXBwb3J0ZWQmIzM0OywKICAgICYjMzQ7Y2ZnODAyMTFfdmFsaWRfa2V5X2lkeCYjMzQ7LAogICAgJiMzNDtjZmc4MDIxMV92YWxpZGF0ZV9rZXlfc2V0dGluZ3MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciB0aGUgQ29udHJvbCBJbnRlZ3JpdHkgUHJvdG9jb2wgKENJUCkgaW4gY2ZnODAyMTEgYW5kIG1hYzgwMjExLCBpbmNsdWRpbmcgYSBuZXcga2V5IHR5cGUgYE5MODAyMTFfS0VZVFlQRV9DSUdUS2AgYW5kIG5ldyBuZXRsaW5rIGF0dHJpYnV0ZXMuIEl0IG1vZGlmaWVzIGtleSBoYW5kbGluZyBsb2dpYyBhY3Jvc3MgdGhlIHdpcmVsZXNzIHN0YWNrIGFuZCB1cGRhdGVzIGBtYWM4MDIxMV9od3NpbWAgdG8gYWR2ZXJ0aXNlIENJUCBzdXBwb3J0LCBtYWtpbmcgaXQgdGVzdGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBUaGUgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBubDgwMjExIG5ldGxpbmsgY29tbWFuZHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMDowMjoyNi4wNzQzMTY5NloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1OTYyNTgxODgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1BQzgwMjExXCIsXG4gICAgXCJDRkc4MDIxMVwiLFxuICAgIFwiTUFDODAyMTFfSFdTSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJubDgwMjExX25ld19rZXlcIixcbiAgICBcIm5sODAyMTFfZGVsX2tleVwiLFxuICAgIFwibmw4MDIxMV9nZXRfa2V5XCIsXG4gICAgXCJubDgwMjExX3NldF9zdGF0aW9uXCIsXG4gICAgXCJubDgwMjExX25ld19zdGF0aW9uXCIsXG4gICAgXCJubDgwMjExX2Fzc29jaWF0ZVwiLFxuICAgIFwiaWVlZTgwMjExX2tleV9saW5rXCIsXG4gICAgXCJpZWVlODAyMTFfZ3RrX3Jla2V5X2FkZFwiLFxuICAgIFwiaWVlZTgwMjExX3B1dF9jaXBfY2FwXCIsXG4gICAgXCJjZmc4MDIxMV9jaWd0a19zdXBwb3J0ZWRcIixcbiAgICBcImNmZzgwMjExX3ZhbGlkX2tleV9pZHhcIixcbiAgICBcImNmZzgwMjExX3ZhbGlkYXRlX2tleV9zZXR0aW5nc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgdGhlIENvbnRyb2wgSW50ZWdyaXR5IFByb3RvY29sIChDSVApIGluIGNmZzgwMjExIGFuZCBtYWM4MDIxMSwgaW5jbHVkaW5nIGEgbmV3IGtleSB0eXBlIGBOTDgwMjExX0tFWVRZUEVfQ0lHVEtgIGFuZCBuZXcgbmV0bGluayBhdHRyaWJ1dGVzLiBJdCBtb2RpZmllcyBrZXkgaGFuZGxpbmcgbG9naWMgYWNyb3NzIHRoZSB3aXJlbGVzcyBzdGFjayBhbmQgdXBkYXRlcyBgbWFjODAyMTFfaHdzaW1gIHRvIGFkdmVydGlzZSBDSVAgc3VwcG9ydCwgbWFraW5nIGl0IHRlc3RhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgbmw4MDIxMSBuZXRsaW5rIGNvbW1hbmRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMDowMjoyNi4wNzQzMjM2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjE5OTA2MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmOWI0ZDlkMzUyYzcwMjI1MzljMzAyZGQwNTE4ZTIyNjAzNzU5ZDIwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgQXVnIDEgMjA6MDI6MjUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jZmc4MDIxMS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jZmc4MDIxMS5jXFxuaW5kZXggZWNkZTkxMTU5YjU0Ni4uZDRlOTQyM2ZjNWU0ZCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NmZzgwMjExLmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NmZzgwMjExLmNcXG5AQCAtMTEyNSwxMyArMTEyNSwxNSBAQCB2b2lkIGF0aDZrbF9jZmc4MDIxMV9jaF9zd2l0Y2hfbm90aWZ5KHN0cnVjdCBhdGg2a2xfdmlmICp2aWYsIGludCBmcmVxLFxcbiB9XFxuIFxcbiBzdGF0aWMgaW50IGF0aDZrbF9jZmc4MDIxMV9hZGRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxuLVxcdFxcdFxcdFxcdCAgIGludCBsaW5rX2lkLCB1OCBrZXlfaW5kZXgsIGJvb2wgcGFpcndpc2UsXFxuK1xcdFxcdFxcdFxcdCAgIGludCBsaW5rX2lkLCB1OCBrZXlfaW5kZXgsXFxuK1xcdFxcdFxcdFxcdCAgIGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLFxcbiBcXHRcXHRcXHRcXHQgICBjb25zdCB1OCAqbWFjX2FkZHIsXFxuIFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBrZXlfcGFyYW1zICpwYXJhbXMpXFxuIHtcXG4gXFx0c3RydWN0IGF0aDZrbCAqYXIgPSBhdGg2a2xfcHJpdih3ZGV2LVxcdTAwM2VuZXRkZXYpO1xcbiBcXHRzdHJ1Y3QgYXRoNmtsX3ZpZiAqdmlmID0gbmV0ZGV2X3ByaXYod2Rldi1cXHUwMDNlbmV0ZGV2KTtcXG4gXFx0c3RydWN0IGF0aDZrbF9rZXkgKmtleSA9IE5VTEw7XFxuK1xcdGJvb2wgcGFpcndpc2UgPSB0eXBlID09IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRTtcXG4gXFx0aW50IHNlcV9sZW47XFxuIFxcdHU4IGtleV91c2FnZTtcXG4gXFx0dTgga2V5X3R5cGU7XFxuQEAgLTEyNTAsNyArMTI1Miw4IEBAIHN0YXRpYyBpbnQgYXRoNmtsX2NmZzgwMjExX2FkZF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RlXFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgYXRoNmtsX2NmZzgwMjExX2RlbF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcXG4tXFx0XFx0XFx0XFx0ICAgaW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCwgYm9vbCBwYWlyd2lzZSxcXG4rXFx0XFx0XFx0XFx0ICAgaW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCxcXG4rXFx0XFx0XFx0XFx0ICAgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsXFxuIFxcdFxcdFxcdFxcdCAgIGNvbnN0IHU4ICptYWNfYWRkcilcXG4ge1xcbiBcXHRzdHJ1Y3QgYXRoNmtsICphciA9IGF0aDZrbF9wcml2KHdkZXYtXFx1MDAzZW5ldGRldik7XFxuQEAgLTEyODAsNyArMTI4Myw4IEBAIHN0YXRpYyBpbnQgYXRoNmtsX2NmZzgwMjExX2RlbF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RlXFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgYXRoNmtsX2NmZzgwMjExX2dldF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcXG4tXFx0XFx0XFx0XFx0ICAgaW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCwgYm9vbCBwYWlyd2lzZSxcXG4rXFx0XFx0XFx0XFx0ICAgaW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCxcXG4rXFx0XFx0XFx0XFx0ICAgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsXFxuIFxcdFxcdFxcdFxcdCAgIGNvbnN0IHU4ICptYWNfYWRkciwgdm9pZCAqY29va2llLFxcbiBcXHRcXHRcXHRcXHQgICB2b2lkICgqY2FsbGJhY2spICh2b2lkICpjb29raWUsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGtleV9wYXJhbXMgKikpXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC93aWw2MjEwL2NmZzgwMjExLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvd2lsNjIxMC9jZmc4MDIxMS5jXFxuaW5kZXggNWYyYmQ5YTMxZmFmNi4uYzA5NzgzMWI3ZmFmMyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvd2lsNjIxMC9jZmc4MDIxMS5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3dpbDYyMTAvY2ZnODAyMTEuY1xcbkBAIC0xNjIxLDExICsxNjIxLDEzIEBAIHN0YXRpYyB2b2lkIHdpbF9kZWxfcnhfa2V5KHU4IGtleV9pbmRleCwgZW51bSB3bWlfa2V5X3VzYWdlIGtleV91c2FnZSxcXG4gXFxuIHN0YXRpYyBpbnQgd2lsX2NmZzgwMjExX2FkZF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSxcXG4gXFx0XFx0XFx0XFx0c3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwgaW50IGxpbmtfaWQsXFxuLVxcdFxcdFxcdFxcdHU4IGtleV9pbmRleCwgYm9vbCBwYWlyd2lzZSxcXG4rXFx0XFx0XFx0XFx0dTgga2V5X2luZGV4LFxcbitcXHRcXHRcXHRcXHRlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSxcXG4gXFx0XFx0XFx0XFx0Y29uc3QgdTggKm1hY19hZGRyLFxcbiBcXHRcXHRcXHRcXHRzdHJ1Y3Qga2V5X3BhcmFtcyAqcGFyYW1zKVxcbiB7XFxuIFxcdGludCByYztcXG4rXFx0Ym9vbCBwYWlyd2lzZSA9IHR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFO1xcbiBcXHRzdHJ1Y3Qgd2lsNjIxMF9wcml2ICp3aWwgPSB3aXBoeV90b193aWwod2lwaHkpO1xcbiBcXHRzdHJ1Y3Qgd2lsNjIxMF92aWYgKnZpZiA9IHdkZXZfdG9fdmlmKHdpbCwgd2Rldik7XFxuIFxcdGVudW0gd21pX2tleV91c2FnZSBrZXlfdXNhZ2UgPSB3aWxfZGV0ZWN0X2tleV91c2FnZSh3ZGV2LCBwYWlyd2lzZSk7XFxuQEAgLTE2OTYsMTIgKzE2OTgsMTQgQEAgc3RhdGljIGludCB3aWxfY2ZnODAyMTFfYWRkX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxcbiBcXG4gc3RhdGljIGludCB3aWxfY2ZnODAyMTFfZGVsX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxcbiBcXHRcXHRcXHRcXHRzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LCBpbnQgbGlua19pZCxcXG4tXFx0XFx0XFx0XFx0dTgga2V5X2luZGV4LCBib29sIHBhaXJ3aXNlLFxcbitcXHRcXHRcXHRcXHR1OCBrZXlfaW5kZXgsXFxuK1xcdFxcdFxcdFxcdGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLFxcbiBcXHRcXHRcXHRcXHRjb25zdCB1OCAqbWFjX2FkZHIpXFxuIHtcXG4gXFx0c3RydWN0IHdpbDYyMTBfcHJpdiAqd2lsID0gd2lwaHlfdG9fd2lsKHdpcGh5KTtcXG4gXFx0c3RydWN0IHdpbDYyMTBfdmlmICp2aWYgPSB3ZGV2X3RvX3ZpZih3aWwsIHdkZXYpO1xcbi1cXHRlbnVtIHdtaV9rZXlfdXNhZ2Uga2V5X3VzYWdlID0gd2lsX2RldGVjdF9rZXlfdXNhZ2Uod2RldiwgcGFpcndpc2UpO1xcbitcXHRlbnVtIHdtaV9rZXlfdXNhZ2Uga2V5X3VzYWdlID1cXG4rXFx0XFx0d2lsX2RldGVjdF9rZXlfdXNhZ2Uod2RldiwgdHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0UpO1xcbiBcXHRzdHJ1Y3Qgd2lsX3N0YV9pbmZvICpjcyA9IHdpbF9maW5kX3N0YV9ieV9rZXlfdXNhZ2Uod2lsLCB2aWYtXFx1MDAzZW1pZCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIGtleV91c2FnZSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIG1hY19hZGRyKTtcXG5AQCAtMjA3Miw3ICsyMDc2LDggQEAgdm9pZCB3aWxfY2ZnODAyMTFfYXBfcmVjb3Zlcnkoc3RydWN0IHdpbDYyMTBfcHJpdiAqd2lsKVxcbiBcXHRcXHRrZXlfcGFyYW1zLnNlcV9sZW4gPSBJRUVFODAyMTFfR0NNUF9QTl9MRU47XFxuIFxcdFxcdHJjID0gd2lsX2NmZzgwMjExX2FkZF9rZXkod2lwaHksIHZpZl90b193ZGV2KHZpZiksIC0xLFxcbiBcXHRcXHRcXHRcXHRcXHQgIHZpZi1cXHUwMDNlZ3RrX2luZGV4LFxcbi1cXHRcXHRcXHRcXHRcXHQgIGZhbHNlLCBOVUxMLCBcXHUwMDI2a2V5X3BhcmFtcyk7XFxuK1xcdFxcdFxcdFxcdFxcdCAgTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFLFxcbitcXHRcXHRcXHRcXHRcXHQgIE5VTEwsIFxcdTAwMjZrZXlfcGFyYW1zKTtcXG4gXFx0XFx0aWYgKHJjKVxcbiBcXHRcXHRcXHR3aWxfZXJyKHdpbCwgXFxcInZpZiAlZCByZWNvdmVyeSBhZGQga2V5IGZhaWxlZCAoJWQpXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHRpLCByYyk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmNcXG5pbmRleCA2YjJjMzRlM2E3OTZjLi43ODVmZDU3ZDdjNmNjIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmNcXG5AQCAtMjc3MCw3ICsyNzcwLDggQEAgYnJjbWZfY2ZnODAyMTFfY29uZmlnX2RlZmF1bHRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbiBcXG4gc3RhdGljIHMzMlxcbiBicmNtZl9jZmc4MDIxMV9kZWxfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxuLVxcdFxcdCAgICAgICBpbnQgbGlua19pZCwgdTgga2V5X2lkeCwgYm9vbCBwYWlyd2lzZSxcXG4rXFx0XFx0ICAgICAgIGludCBsaW5rX2lkLCB1OCBrZXlfaWR4LFxcbitcXHRcXHQgICAgICAgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsXFxuIFxcdFxcdCAgICAgICBjb25zdCB1OCAqbWFjX2FkZHIpXFxuIHtcXG4gXFx0c3RydWN0IGJyY21mX2lmICppZnAgPSBuZXRkZXZfcHJpdih3ZGV2LVxcdTAwM2VuZXRkZXYpO1xcbkBAIC0yODA4LDcgKzI4MDksOCBAQCBicmNtZl9jZmc4MDIxMV9kZWxfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxuIFxcbiBzdGF0aWMgczMyXFxuIGJyY21mX2NmZzgwMjExX2FkZF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcXG4tXFx0XFx0ICAgICAgIGludCBsaW5rX2lkLCB1OCBrZXlfaWR4LCBib29sIHBhaXJ3aXNlLFxcbitcXHRcXHQgICAgICAgaW50IGxpbmtfaWQsIHU4IGtleV9pZHgsXFxuK1xcdFxcdCAgICAgICBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSxcXG4gXFx0XFx0ICAgICAgIGNvbnN0IHU4ICptYWNfYWRkciwgc3RydWN0IGtleV9wYXJhbXMgKnBhcmFtcylcXG4ge1xcbiBcXHRzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfaW5mbyAqY2ZnID0gd2lwaHlfdG9fY2ZnKHdpcGh5KTtcXG5AQCAtMjgzNCw3ICsyODM2LDcgQEAgYnJjbWZfY2ZnODAyMTFfYWRkX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxcbiBcXG4gXFx0aWYgKHBhcmFtcy1cXHUwMDNla2V5X2xlbiA9PSAwKVxcbiBcXHRcXHRyZXR1cm4gYnJjbWZfY2ZnODAyMTFfZGVsX2tleSh3aXBoeSwgd2RldiwgLTEsIGtleV9pZHgsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgIHBhaXJ3aXNlLCBtYWNfYWRkcik7XFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIHR5cGUsIG1hY19hZGRyKTtcXG4gXFxuIFxcdGlmIChwYXJhbXMtXFx1MDAzZWtleV9sZW4gXFx1MDAzZSBzaXplb2Yoa2V5LVxcdTAwM2VkYXRhKSkge1xcbiBcXHRcXHRicGh5X2VycihkcnZyLCBcXFwiVG9vIGxvbmcga2V5IGxlbmd0aCAoJXUpXFxcXG5cXFwiLCBwYXJhbXMtXFx1MDAzZWtleV9sZW4pO1xcbkBAIC0yOTMwLDcgKzI5MzIsOCBAQCBicmNtZl9jZmc4MDIxMV9hZGRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxuIFxcbiBzdGF0aWMgczMyXFxuIGJyY21mX2NmZzgwMjExX2dldF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcXG4tXFx0XFx0ICAgICAgIGludCBsaW5rX2lkLCB1OCBrZXlfaWR4LCBib29sIHBhaXJ3aXNlLFxcbitcXHRcXHQgICAgICAgaW50IGxpbmtfaWQsIHU4IGtleV9pZHgsXFxuK1xcdFxcdCAgICAgICBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSxcXG4gXFx0XFx0ICAgICAgIGNvbnN0IHU4ICptYWNfYWRkciwgdm9pZCAqY29va2llLFxcbiBcXHRcXHQgICAgICAgdm9pZCAoKmNhbGxiYWNrKSh2b2lkICpjb29raWUsXFxuIFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBrZXlfcGFyYW1zICpwYXJhbXMpKVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9kMy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvZDMuY1xcbmluZGV4IDU1ZjliODA5ZTc2NGQuLjZkOGVkZTMzNmQ1OWIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvZDMuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL2QzLmNcXG5AQCAtMTEzOCw3ICsxMTM4LDggQEAgaXdsX21sZF9hZGRfbWNhc3RfcmVrZXkoc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0a2V5X2NvbmZpZyA9IGllZWU4MDIxMV9ndGtfcmVrZXlfYWRkKHZpZiwga2V5X2RhdGEtXFx1MDAzZWlkLCBrZXlfZGF0YS1cXHUwMDNla2V5LFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgIHNpemVvZihrZXlfZGF0YS1cXHUwMDNla2V5KSwgbGlua19pZCk7XFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgc2l6ZW9mKGtleV9kYXRhLVxcdTAwM2VrZXkpLCBsaW5rX2lkLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIGZhbHNlKTtcXG4gXFx0aWYgKElTX0VSUihrZXlfY29uZmlnKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG5AQCAtMTIyMCw3ICsxMjIxLDggQEAgc3RhdGljIHZvaWQgaXdsX21sZF9tbG9fcmVrZXkoc3RydWN0IGl3bF9tbGQgKm1sZCxcXG4gXFx0XFx0XFx0XFx0IG1sb19rZXktXFx1MDAzZWlkeCwgbGlua19pZCk7XFxuIFxcbiBcXHRcXHRrZXkgPSBpZWVlODAyMTFfZ3RrX3Jla2V5X2FkZCh2aWYsIG1sb19rZXktXFx1MDAzZWlkeCwgbWxvX2tleS1cXHUwMDNla2V5LFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICBzaXplb2YobWxvX2tleS1cXHUwMDNla2V5KSwgbGlua19pZCk7XFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIHNpemVvZihtbG9fa2V5LVxcdTAwM2VrZXkpLCBsaW5rX2lkLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBmYWxzZSk7XFxuIFxcbiBcXHRcXHRpZiAoSVNfRVJSKGtleSkpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9kMy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vZDMuY1xcbmluZGV4IDZiMTFmYTMyZWE1YzYuLmJkNTJmMmViZDNiYTEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vZDMuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL2QzLmNcXG5AQCAtMTg4Nyw3ICsxODg3LDggQEAgc3RhdGljIGJvb2wgaXdsX212bV9ndGtfcmVrZXkoc3RydWN0IGl3bF93b3dsYW5fc3RhdHVzX2RhdGEgKnN0YXR1cyxcXG4gXFxuIFxcdFxcdGtleSA9IGllZWU4MDIxMV9ndGtfcmVrZXlfYWRkKHZpZiwgc3RhdHVzLVxcdTAwM2VndGtbaV0uaWQsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgIHN0YXR1cy1cXHUwMDNlZ3RrW2ldLmtleSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICAgc2l6ZW9mKHN0YXR1cy1cXHUwMDNlZ3RrW2ldLmtleSksIC0xKTtcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgc2l6ZW9mKHN0YXR1cy1cXHUwMDNlZ3RrW2ldLmtleSksIC0xLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBmYWxzZSk7XFxuIFxcdFxcdGlmIChJU19FUlIoa2V5KSkge1xcbiBcXHRcXHRcXHQvKiBGVyBtYXkgc2VuZCBhbHNvIHRoZSBvbGQga2V5cyAqL1xcbiBcXHRcXHRcXHRpZiAoUFRSX0VSUihrZXkpID09IC1FQUxSRUFEWSlcXG5AQCAtMTkyMiw3ICsxOTIzLDggQEAgaXdsX212bV9kM19pZ3RrX2JpZ3RrX3Jla2V5X2FkZChzdHJ1Y3QgaXdsX3dvd2xhbl9zdGF0dXNfZGF0YSAqc3RhdHVzLFxcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFxuIFxcdGtleV9jb25maWcgPSBpZWVlODAyMTFfZ3RrX3Jla2V5X2FkZCh2aWYsIGtleWlkeCwga2V5X2RhdGEtXFx1MDAzZWtleSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICBzaXplb2Yoa2V5X2RhdGEtXFx1MDAzZWtleSksIC0xKTtcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBzaXplb2Yoa2V5X2RhdGEtXFx1MDAzZWtleSksIC0xLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIGZhbHNlKTtcXG4gXFx0aWYgKElTX0VSUihrZXlfY29uZmlnKSkge1xcbiBcXHRcXHQvKiBGVyBtYXkgc2VuZCBhbHNvIHRoZSBvbGQga2V5cyAqL1xcbiBcXHRcXHRyZXR1cm4gUFRSX0VSUihrZXlfY29uZmlnKSA9PSAtRUFMUkVBRFk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvY2ZnLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2NmZy5jXFxuaW5kZXggNzJjOTJmNzI0NjlkZS4uZTAxNWNmYTE5NTBjMSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2NmZy5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9jZmcuY1xcbkBAIC0xNTA4LDcgKzE1MDgsOCBAQCBzdGF0aWMgaW50IGxic19jZmdfc2V0X2RlZmF1bHRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksXFxuIFxcbiBcXG4gc3RhdGljIGludCBsYnNfY2ZnX2FkZF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcXG4tXFx0XFx0XFx0ICAgaW50IGxpbmtfaWQsIHU4IGlkeCwgYm9vbCBwYWlyd2lzZSxcXG4rXFx0XFx0XFx0ICAgaW50IGxpbmtfaWQsIHU4IGlkeCxcXG4rXFx0XFx0XFx0ICAgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsXFxuIFxcdFxcdFxcdCAgIGNvbnN0IHU4ICptYWNfYWRkciwgc3RydWN0IGtleV9wYXJhbXMgKnBhcmFtcylcXG4ge1xcbiBcXHRzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSB3aXBoeV9wcml2KHdpcGh5KTtcXG5AQCAtMTU2OSw3ICsxNTcwLDggQEAgc3RhdGljIGludCBsYnNfY2ZnX2FkZF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcXG4gXFxuIFxcbiBzdGF0aWMgaW50IGxic19jZmdfZGVsX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxcbi1cXHRcXHRcXHQgICBpbnQgbGlua19pZCwgdTgga2V5X2luZGV4LCBib29sIHBhaXJ3aXNlLFxcbitcXHRcXHRcXHQgICBpbnQgbGlua19pZCwgdTgga2V5X2luZGV4LFxcbitcXHRcXHRcXHQgICBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSxcXG4gXFx0XFx0XFx0ICAgY29uc3QgdTggKm1hY19hZGRyKVxcbiB7XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvY2ZnODAyMTEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9jZmc4MDIxMS5jXFxuaW5kZXggOGVjMmQyMmE4YzMzYS4uMDYwYzM1MWNlY2MwNiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvY2ZnODAyMTEuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9jZmc4MDIxMS5jXFxuQEAgLTE0MiwxMiArMTQyLDE0IEBAIHN0YXRpYyB2b2lkICptd2lmaWV4X2NmZzgwMjExX2dldF9hZGFwdGVyKHN0cnVjdCB3aXBoeSAqd2lwaHkpXFxuICAqL1xcbiBzdGF0aWMgaW50XFxuIG13aWZpZXhfY2ZnODAyMTFfZGVsX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxcbi1cXHRcXHRcXHQgaW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCwgYm9vbCBwYWlyd2lzZSxcXG4rXFx0XFx0XFx0IGludCBsaW5rX2lkLCB1OCBrZXlfaW5kZXgsXFxuK1xcdFxcdFxcdGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLFxcbiBcXHRcXHRcXHQgY29uc3QgdTggKm1hY19hZGRyKVxcbiB7XFxuIFxcdHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYgPSBtd2lmaWV4X25ldGRldl9nZXRfcHJpdih3ZGV2LVxcdTAwM2VuZXRkZXYpO1xcbiBcXHRzdGF0aWMgY29uc3QgdTggYmNfbWFjW10gPSB7MHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZn07XFxuLVxcdGNvbnN0IHU4ICpwZWVyX21hYyA9IHBhaXJ3aXNlID8gbWFjX2FkZHIgOiBiY19tYWM7XFxuK1xcdGNvbnN0IHU4ICpwZWVyX21hYyA9XFxuK1xcdFxcdCh0eXBlID09IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRSkgPyBtYWNfYWRkciA6IGJjX21hYztcXG4gXFxuIFxcdGlmIChtd2lmaWV4X3NldF9lbmNvZGUocHJpdiwgTlVMTCwgTlVMTCwgMCwga2V5X2luZGV4LCBwZWVyX21hYywgMSkpIHtcXG4gXFx0XFx0bXdpZmlleF9kYmcocHJpdi1cXHUwMDNlYWRhcHRlciwgRVJST1IsIFxcXCJkZWxldGluZyB0aGUgY3J5cHRvIGtleXNcXFxcblxcXCIpO1xcbkBAIC00ODIsMTMgKzQ4NCwxNSBAQCBtd2lmaWV4X2NmZzgwMjExX3NldF9kZWZhdWx0X2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbiAgKi9cXG4gc3RhdGljIGludFxcbiBtd2lmaWV4X2NmZzgwMjExX2FkZF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcXG4tXFx0XFx0XFx0IGludCBsaW5rX2lkLCB1OCBrZXlfaW5kZXgsIGJvb2wgcGFpcndpc2UsXFxuK1xcdFxcdFxcdCBpbnQgbGlua19pZCwgdTgga2V5X2luZGV4LFxcbitcXHRcXHRcXHQgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsXFxuIFxcdFxcdFxcdCBjb25zdCB1OCAqbWFjX2FkZHIsIHN0cnVjdCBrZXlfcGFyYW1zICpwYXJhbXMpXFxuIHtcXG4gXFx0c3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiA9IG13aWZpZXhfbmV0ZGV2X2dldF9wcml2KHdkZXYtXFx1MDAzZW5ldGRldik7XFxuIFxcdHN0cnVjdCBtd2lmaWV4X3dlcF9rZXkgKndlcF9rZXk7XFxuIFxcdHN0YXRpYyBjb25zdCB1OCBiY19tYWNbXSA9IHsweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmfTtcXG4tXFx0Y29uc3QgdTggKnBlZXJfbWFjID0gcGFpcndpc2UgPyBtYWNfYWRkciA6IGJjX21hYztcXG4rXFx0Y29uc3QgdTggKnBlZXJfbWFjID1cXG4rXFx0XFx0KHR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFKSA/IG1hY19hZGRyIDogYmNfbWFjO1xcbiBcXG4gXFx0aWYgKEdFVF9CU1NfUk9MRShwcml2KSA9PSBNV0lGSUVYX0JTU19ST0xFX1VBUCBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgKHBhcmFtcy1cXHUwMDNlY2lwaGVyID09IFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDQwIHx8XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21pY3JvY2hpcC93aWxjMTAwMC9jZmc4MDIxMS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWljcm9jaGlwL3dpbGMxMDAwL2NmZzgwMjExLmNcXG5pbmRleCA2NjU0ZmNlNGRlZDg0Li43ODUwZTBhNDgzOTA3IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21pY3JvY2hpcC93aWxjMTAwMC9jZmc4MDIxMS5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWljcm9jaGlwL3dpbGMxMDAwL2NmZzgwMjExLmNcXG5AQCAtNTM1LDEwICs1MzUsMTMgQEAgc3RhdGljIGludCB3aWxjX3dmaV9jZmdfY29weV93cGFfaW5mbyhzdHJ1Y3Qgd2lsY193Zmlfa2V5ICprZXlfaW5mbyxcXG4gfVxcbiBcXG4gc3RhdGljIGludCBhZGRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsIGludCBsaW5rX2lkLFxcbi1cXHRcXHQgICB1OCBrZXlfaW5kZXgsIGJvb2wgcGFpcndpc2UsIGNvbnN0IHU4ICptYWNfYWRkcixcXG4rXFx0XFx0ICAgdTgga2V5X2luZGV4LFxcbitcXHRcXHQgICBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSxcXG4rXFx0XFx0ICAgY29uc3QgdTggKm1hY19hZGRyLFxcbiBcXHRcXHQgICBzdHJ1Y3Qga2V5X3BhcmFtcyAqcGFyYW1zKVxcbiBcXG4ge1xcbitcXHRib29sIHBhaXJ3aXNlID0gdHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0U7XFxuIFxcdGludCByZXQgPSAwLCBrZXlsZW4gPSBwYXJhbXMtXFx1MDAzZWtleV9sZW47XFxuIFxcdGNvbnN0IHU4ICpyeF9taWMgPSBOVUxMO1xcbiBcXHRjb25zdCB1OCAqdHhfbWljID0gTlVMTDtcXG5AQCAtNjQxLDkgKzY0NCwxMCBAQCBzdGF0aWMgaW50IGFkZF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwgaW50IGxpbmtfaWQsXFxuIFxcbiBzdGF0aWMgaW50IGRlbF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwgaW50IGxpbmtfaWQsXFxuIFxcdFxcdCAgIHU4IGtleV9pbmRleCxcXG4tXFx0XFx0ICAgYm9vbCBwYWlyd2lzZSxcXG4rXFx0XFx0ICAgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsXFxuIFxcdFxcdCAgIGNvbnN0IHU4ICptYWNfYWRkcilcXG4ge1xcbitcXHRib29sIHBhaXJ3aXNlID0gdHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0U7XFxuIFxcdHN0cnVjdCB3aWxjX3ZpZiAqdmlmID0gbmV0ZGV2X3ByaXYod2Rldi1cXHUwMDNlbmV0ZGV2KTtcXG4gXFx0c3RydWN0IHdpbGNfcHJpdiAqcHJpdiA9IFxcdTAwMjZ2aWYtXFx1MDAzZXByaXY7XFxuIFxcbkBAIC02ODEsMTAgKzY4NSwxMSBAQCBzdGF0aWMgaW50IGRlbF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwgaW50IGxpbmtfaWQsXFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgZ2V0X2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LCBpbnQgbGlua19pZCxcXG4tXFx0XFx0ICAgdTgga2V5X2luZGV4LCBib29sIHBhaXJ3aXNlLCBjb25zdCB1OCAqbWFjX2FkZHIsXFxuLVxcdFxcdCAgIHZvaWQgKmNvb2tpZSxcXG4rXFx0XFx0ICAgdTgga2V5X2luZGV4LCBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSxcXG4rXFx0XFx0ICAgY29uc3QgdTggKm1hY19hZGRyLCB2b2lkICpjb29raWUsXFxuIFxcdFxcdCAgIHZvaWQgKCpjYWxsYmFjaykodm9pZCAqY29va2llLCBzdHJ1Y3Qga2V5X3BhcmFtcyAqKSlcXG4ge1xcbitcXHRib29sIHBhaXJ3aXNlID0gdHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0U7XFxuIFxcdHN0cnVjdCB3aWxjX3ZpZiAqdmlmID0gbmV0ZGV2X3ByaXYod2Rldi1cXHUwMDNlbmV0ZGV2KTtcXG4gXFx0c3RydWN0IHdpbGNfcHJpdiAqcHJpdiA9IFxcdTAwMjZ2aWYtXFx1MDAzZXByaXY7XFxuIFxcdHN0cnVjdCAga2V5X3BhcmFtcyBrZXlfcGFyYW1zO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9jZmc4MDIxMS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvY2ZnODAyMTEuY1xcbmluZGV4IDRmOWUyMGY3MjgxMTQuLjA4YjZkYjE0NzQ1MmMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvY2ZnODAyMTEuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL2NmZzgwMjExLmNcXG5AQCAtOTksMTIgKzk5LDE0IEBAIHN0YXRpYyB2b2lkICpueHB3aWZpX2NmZzgwMjExX2dldF9hZGFwdGVyKHN0cnVjdCB3aXBoeSAqd2lwaHkpXFxuIC8qIGNmZzgwMjExIG9wZXJhdGlvbiBoYW5kbGVyIHRvIGRlbGV0ZSBhIG5ldHdvcmsga2V5LiAqL1xcbiBzdGF0aWMgaW50XFxuIG54cHdpZmlfY2ZnODAyMTFfZGVsX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxcbi1cXHRcXHRcXHQgaW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCwgYm9vbCBwYWlyd2lzZSxcXG4rXFx0XFx0XFx0IGludCBsaW5rX2lkLCB1OCBrZXlfaW5kZXgsXFxuK1xcdFxcdFxcdCBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSxcXG4gXFx0XFx0XFx0IGNvbnN0IHU4ICptYWNfYWRkcilcXG4ge1xcbiBcXHRzdHJ1Y3Qgbnhwd2lmaV9wcml2YXRlICpwcml2ID0gbnhwd2lmaV9uZXRkZXZfZ2V0X3ByaXYod2Rldi1cXHUwMDNlbmV0ZGV2KTtcXG4gXFx0c3RhdGljIGNvbnN0IHU4IGJjX21hY1tdID0gezB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmZ9O1xcbi1cXHRjb25zdCB1OCAqcGVlcl9tYWMgPSBwYWlyd2lzZSA/IG1hY19hZGRyIDogYmNfbWFjO1xcbitcXHRjb25zdCB1OCAqcGVlcl9tYWMgPVxcbitcXHRcXHQodHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0UpID8gbWFjX2FkZHIgOiBiY19tYWM7XFxuIFxcdGludCByZXQ7XFxuIFxcbiBcXHRyZXQgPSBueHB3aWZpX3NldF9lbmNvZGUocHJpdiwgTlVMTCwgTlVMTCwgMCwga2V5X2luZGV4LCBwZWVyX21hYywgMSk7XFxuQEAgLTQyOCw3ICs0MzAsOCBAQCBueHB3aWZpX2NmZzgwMjExX3NldF9kZWZhdWx0X2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbiAvKiBjZmc4MDIxMSBoYW5kbGVyIGZvciBhZGRpbmcgYW4gODAyLjExIGVuY3J5cHRpb24ga2V5LiAqL1xcbiBzdGF0aWMgaW50XFxuIG54cHdpZmlfY2ZnODAyMTFfYWRkX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxcbi1cXHRcXHRcXHQgaW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCwgYm9vbCBwYWlyd2lzZSxcXG4rXFx0XFx0XFx0IGludCBsaW5rX2lkLCB1OCBrZXlfaW5kZXgsXFxuK1xcdFxcdFxcdCBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSxcXG4gXFx0XFx0XFx0IGNvbnN0IHU4ICptYWNfYWRkciwgc3RydWN0IGtleV9wYXJhbXMgKnBhcmFtcylcXG4ge1xcbiBcXHRzdHJ1Y3Qgbnhwd2lmaV9wcml2YXRlICpwcml2ID0gbnhwd2lmaV9uZXRkZXZfZ2V0X3ByaXYod2Rldi1cXHUwMDNlbmV0ZGV2KTtcXG5AQCAtNDM4LDcgKzQ0MSw3IEBAIG54cHdpZmlfY2ZnODAyMTFfYWRkX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxcbiBcXHRpbnQgcmV0O1xcbiBcXG4gXFx0ZXRoX2Jyb2FkY2FzdF9hZGRyKGJjX21hYyk7XFxuLVxcdHBlZXJfbWFjID0gcGFpcndpc2UgPyBtYWNfYWRkciA6IGJjX21hYztcXG4rXFx0cGVlcl9tYWMgPSAodHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0UpID8gbWFjX2FkZHIgOiBiY19tYWM7XFxuIFxcbiBcXHRpZiAoR0VUX0JTU19ST0xFKHByaXYpID09IE5YUFdJRklfQlNTX1JPTEVfVUFQIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICAocGFyYW1zLVxcdTAwM2VjaXBoZXIgPT0gV0xBTl9DSVBIRVJfU1VJVEVfV0VQNDAgfHxcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcXVhbnRlbm5hL3F0bmZtYWMvY2ZnODAyMTEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3F1YW50ZW5uYS9xdG5mbWFjL2NmZzgwMjExLmNcXG5pbmRleCA5ZTQ0Yzg1ZDIwNTFjLi4zODYyNTM0MjE2OWZmIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3F1YW50ZW5uYS9xdG5mbWFjL2NmZzgwMjExLmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9xdWFudGVubmEvcXRuZm1hYy9jZmc4MDIxMS5jXFxuQEAgLTUzMywxMCArNTMzLDEyIEBAIHF0bmZfZHVtcF9zdGF0aW9uKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgcXRuZl9hZGRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxuLVxcdFxcdFxcdGludCBsaW5rX2lkLCB1OCBrZXlfaW5kZXgsIGJvb2wgcGFpcndpc2UsXFxuK1xcdFxcdFxcdGludCBsaW5rX2lkLCB1OCBrZXlfaW5kZXgsXFxuK1xcdFxcdFxcdGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLFxcbiBcXHRcXHRcXHRjb25zdCB1OCAqbWFjX2FkZHIsIHN0cnVjdCBrZXlfcGFyYW1zICpwYXJhbXMpXFxuIHtcXG4gXFx0c3RydWN0IHF0bmZfdmlmICp2aWYgPSBxdG5mX25ldGRldl9nZXRfcHJpdih3ZGV2LVxcdTAwM2VuZXRkZXYpO1xcbitcXHRib29sIHBhaXJ3aXNlID0gdHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0U7XFxuIFxcdGludCByZXQ7XFxuIFxcbiBcXHRyZXQgPSBxdG5mX2NtZF9zZW5kX2FkZF9rZXkodmlmLCBrZXlfaW5kZXgsIHBhaXJ3aXNlLCBtYWNfYWRkciwgcGFyYW1zKTtcXG5AQCAtNTQ5LDEwICs1NTEsMTIgQEAgc3RhdGljIGludCBxdG5mX2FkZF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcXG4gfVxcbiBcXG4gc3RhdGljIGludCBxdG5mX2RlbF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcXG4tXFx0XFx0XFx0aW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCwgYm9vbCBwYWlyd2lzZSxcXG4rXFx0XFx0XFx0aW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCxcXG4rXFx0XFx0XFx0ZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsXFxuIFxcdFxcdFxcdGNvbnN0IHU4ICptYWNfYWRkcilcXG4ge1xcbiBcXHRzdHJ1Y3QgcXRuZl92aWYgKnZpZiA9IHF0bmZfbmV0ZGV2X2dldF9wcml2KHdkZXYtXFx1MDAzZW5ldGRldik7XFxuK1xcdGJvb2wgcGFpcndpc2UgPSB0eXBlID09IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRTtcXG4gXFx0aW50IHJldDtcXG4gXFxuIFxcdHJldCA9IHF0bmZfY21kX3NlbmRfZGVsX2tleSh2aWYsIGtleV9pbmRleCwgcGFpcndpc2UsIG1hY19hZGRyKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OS93b3cuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvd293LmNcXG5pbmRleCA4ZGFkZDhkZjRmYzY1Li5jOGUwMDIyMzhlY2IyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvd293LmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg5L3dvdy5jXFxuQEAgLTY2OSwxMCArNjY5LDEyIEBAIHN0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICpydHc4OV93b3dfZ3RrX3Jla2V5KHN0cnVjdCBydHc4OV9kZXYgKnJ0d2RldixcXG4gXFx0aWYgKGllZWU4MDIxMV92aWZfaXNfbWxkKHdvd192aWYpKVxcbiBcXHRcXHRrZXkgPSBpZWVlODAyMTFfZ3RrX3Jla2V5X2FkZCh3b3dfdmlmLCBrZXlpZHgsIGd0ayxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgY2lwaGVyX2luZm8tXFx1MDAzZWxlbixcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICAgcnR3dmlmX2xpbmstXFx1MDAzZWxpbmtfaWQpO1xcbitcXHRcXHRcXHRcXHRcXHQgICAgICBydHd2aWZfbGluay1cXHUwMDNlbGlua19pZCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgZmFsc2UpO1xcbiBcXHRlbHNlXFxuIFxcdFxcdGtleSA9IGllZWU4MDIxMV9ndGtfcmVrZXlfYWRkKHdvd192aWYsIGtleWlkeCwgZ3RrLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICBjaXBoZXJfaW5mby1cXHUwMDNlbGVuLCAtMSk7XFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIGNpcGhlcl9pbmZvLVxcdTAwM2VsZW4sIC0xLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBmYWxzZSk7XFxuIFxcbiBcXHRrZnJlZShyZWtleV9jb25mKTtcXG4gXFx0aWYgKElTX0VSUihrZXkpKSB7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmNcXG5pbmRleCAwMmI2ZDgxY2NjZDExLi4xY2MzMjJhYTg5OGRkIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmNcXG5AQCAtNTY2OCw2ICs1NjY4LDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB3aXBoeV9pZnR5cGVfZXh0X2NhcGFiIG1hYzgwMjExX2h3c2ltX2lmdHlwZXNfZXh0X2NhcGFbXSA9IHtcXG4gXFx0XFx0LmVtbF9jYXBhYmlsaXRpZXMgPSBJRUVFODAyMTFfRU1MX0NBUF9FTUxTUl9TVVBQIHxcXG4gXFx0XFx0XFx0XFx0ICAgIElFRUU4MDIxMV9FTUxfQ0FQX0VNTE1SX1NVUFBPUlQsXFxuIFxcdFxcdC5tbGRfY2FwYV9hbmRfb3BzID0gTUFDODAyMTFfSFdTSU1fTUxEX0NBUEFfT1BTLFxcbitcXHRcXHQvKiBDSVAgd29ya3MgYXMgaHdzaW0gZG9lcyBub3QgaGF2ZSBjb250cm9sIGZyYW1lcyAqL1xcbitcXHRcXHQuY2lwX3N1cHBvcnRlZCA9IHRydWUsXFxuK1xcdFxcdC5jaXBfY2FwYWJpbGl0aWVzID0gMCxcXG4gXFx0fSxcXG4gfTtcXG4gXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWVlZTgwMjExLmggYi9pbmNsdWRlL2xpbnV4L2llZWU4MDIxMS5oXFxuaW5kZXggMjZlNjc0MDM4ODY1NC4uMTZkNzhmZDYxYzIyMyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2llZWU4MDIxMS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9pZWVlODAyMTEuaFxcbkBAIC0xODI4LDYgKzE4MjgsNyBAQCBlbnVtIGllZWU4MDIxMV9laWRfZXh0IHtcXG4gXFx0V0xBTl9FSURfRVhUX0JBTkRXSURUSF9JTkRJQ0FUSU9OID0gMTM1LFxcbiBcXHRXTEFOX0VJRF9FWFRfS05PV05fU1RBX0lERU5USUZDQVRJT04gPSAxMzYsXFxuIFxcdFdMQU5fRUlEX0VYVF9OT05fQVBfU1RBX1JFR19DT04gPSAxMzcsXFxuK1xcdFdMQU5fRUlEX0VYVF9DSVBfQ0FQQSA9IDE1MCxcXG4gXFx0V0xBTl9FSURfRVhUX1VIUl9PUEVSID0gMTUxLFxcbiBcXHRXTEFOX0VJRF9FWFRfVUhSX0NBUEEgPSAxNTIsXFxuIFxcdFdMQU5fRUlEX0VYVF9NQUNQID0gMTUzLFxcbkBAIC0yOTAwLDQgKzI5MDEsMTYgQEAgc3RhdGljIGlubGluZSBib29sIGllZWU4MDIxMV9jaGVja190aW0oY29uc3Qgc3RydWN0IGllZWU4MDIxMV90aW1faWUgKnRpbSxcXG4gXFx0XFx0ICAgICBfX2llZWU4MDIxMV9jaGVja190aW0odGltLCB0aW1fbGVuLCBhaWQpO1xcbiB9XFxuIFxcbisvKiBUaGUgTUlDIHBhZGRpbmcgc3ViZmllbGQgaW4gdGhlIENJUCBjYXBhYmlsaXRpZXMgKi9cXG4rI2RlZmluZSBXTEFOX0NJUF9DQVBBX01JQ19QQURESU5HXFx0MHgwRlxcbitcXG4rLyoqXFxuKyAqIHN0cnVjdCBpZWVlODAyMTFfY2lwX2NhcCAtIENJUCBDYXBhYmlsaXRpZXMgZWxlbWVudFxcbisgKlxcbisgKiBAdjogVGhlIHZhbHVlIG9mIHRoZSBDb250cm9sIEludGVncml0eSBQcm90b2NvbCBDYXBhYmlsaXR5IGVsZW1lbnRcXG4rICovXFxuK3N0cnVjdCBpZWVlODAyMTFfY2lwX2NhcCB7XFxuK1xcdHU4IHY7XFxuK30gX19wYWNrZWQ7XFxuK1xcbiAjZW5kaWYgLyogTElOVVhfSUVFRTgwMjExX0ggKi9cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaCBiL2luY2x1ZGUvbmV0L2NmZzgwMjExLmhcXG5pbmRleCBkY2JiMGU1NWMzMmVjLi5iNWQ5OGJhMDcyMzliIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L2NmZzgwMjExLmhcXG4rKysgYi9pbmNsdWRlL25ldC9jZmc4MDIxMS5oXFxuQEAgLTE4MjEsNiArMTgyMSw4IEBAIHN0cnVjdCBzdGFfdHhwd3Ige1xcbiAgKiBAczFnX2NhcGE6IFMxRyBjYXBhYmlsaXRpZXMgb2Ygc3RhdGlvblxcbiAgKiBAdWhyX2NhcGE6IFVIUiBjYXBhYmlsaXRpZXMgb2YgdGhlIHN0YXRpb25cXG4gICogQHVocl9jYXBhX2xlbjogdGhlIGxlbmd0aCBvZiB0aGUgVUhSIGNhcGFiaWxpdGllc1xcbisgKiBAY2lwX2NhcF9zZXQ6IElmIENJUCBjYXBhYmlsaXRpZXMgYXJlIHByZXNlbnQsIHJlcXVpcmVkIGZvciBDSVAgc3RhdGlvbnNcXG4rICogQGNpcF9jYXA6IENJUCBjYXBhYmlsaXRpZXMgb2Ygc3RhdGlvblxcbiAgKi9cXG4gc3RydWN0IGxpbmtfc3RhdGlvbl9wYXJhbWV0ZXJzIHtcXG4gXFx0Y29uc3QgdTggKm1sZF9tYWM7XFxuQEAgLTE4NDIsNiArMTg0NCw4IEBAIHN0cnVjdCBsaW5rX3N0YXRpb25fcGFyYW1ldGVycyB7XFxuIFxcdGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfczFnX2NhcCAqczFnX2NhcGE7XFxuIFxcdGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdWhyX2NhcCAqdWhyX2NhcGE7XFxuIFxcdHU4IHVocl9jYXBhX2xlbjtcXG4rXFx0Ym9vbCBjaXBfY2FwX3NldDtcXG4rXFx0dTggY2lwX2NhcDtcXG4gfTtcXG4gXFxuIC8qKlxcbkBAIC0zNDAyLDYgKzM0MDYsNyBAQCBzdHJ1Y3QgY2ZnODAyMTFfbWxfcmVjb25mX3JlcSB7XFxuICAqXFx0ZmxhZyBpcyBub3Qgc2V0LlxcbiAgKiBAQVNTT0NfUkVRX1NQUF9BTVNEVTogU1BQIEEtTVNEVXMgd2lsbCBiZSB1c2VkIG9uIHRoaXMgY29ubmVjdGlvbiAoaWYgYW55KVxcbiAgKiBAQVNTT0NfUkVRX0RJU0FCTEVfVUhSOiBEaXNhYmxlIFVIUlxcbisgKiBAQVNTT0NfUkVRX0NJUDogRW5hYmxlIENvbnRyb2wgSW50ZWdyaXR5IFByb3RvY29sXFxuICAqL1xcbiBlbnVtIGNmZzgwMjExX2Fzc29jX3JlcV9mbGFncyB7XFxuIFxcdEFTU09DX1JFUV9ESVNBQkxFX0hUXFx0XFx0XFx0PSBCSVQoMCksXFxuQEAgLTM0MTMsNiArMzQxOCw3IEBAIGVudW0gY2ZnODAyMTFfYXNzb2NfcmVxX2ZsYWdzIHtcXG4gXFx0Q09OTkVDVF9SRVFfTUxPX1NVUFBPUlRcXHRcXHRcXHQ9IEJJVCg2KSxcXG4gXFx0QVNTT0NfUkVRX1NQUF9BTVNEVVxcdFxcdFxcdD0gQklUKDcpLFxcbiBcXHRBU1NPQ19SRVFfRElTQUJMRV9VSFJcXHRcXHRcXHQ9IEJJVCg4KSxcXG4rXFx0QVNTT0NfUkVRX0NJUFxcdFxcdFxcdFxcdD0gQklUKDkpLFxcbiB9O1xcbiBcXG4gLyoqXFxuQEAgLTUzMDAsMTQgKzUzMDYsMTcgQEAgc3RydWN0IGNmZzgwMjExX29wcyB7XFxuIFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBpbnQgbGlua19pZCk7XFxuIFxcbiBcXHRpbnRcXHQoKmFkZF9rZXkpKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxuLVxcdFxcdFxcdCAgIGludCBsaW5rX2lkLCB1OCBrZXlfaW5kZXgsIGJvb2wgcGFpcndpc2UsXFxuK1xcdFxcdFxcdCAgIGludCBsaW5rX2lkLCB1OCBrZXlfaW5kZXgsXFxuK1xcdFxcdFxcdCAgIGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLFxcbiBcXHRcXHRcXHQgICBjb25zdCB1OCAqbWFjX2FkZHIsIHN0cnVjdCBrZXlfcGFyYW1zICpwYXJhbXMpO1xcbiBcXHRpbnRcXHQoKmdldF9rZXkpKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxuLVxcdFxcdFxcdCAgIGludCBsaW5rX2lkLCB1OCBrZXlfaW5kZXgsIGJvb2wgcGFpcndpc2UsXFxuK1xcdFxcdFxcdCAgIGludCBsaW5rX2lkLCB1OCBrZXlfaW5kZXgsXFxuK1xcdFxcdFxcdCAgIGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLFxcbiBcXHRcXHRcXHQgICBjb25zdCB1OCAqbWFjX2FkZHIsIHZvaWQgKmNvb2tpZSxcXG4gXFx0XFx0XFx0ICAgdm9pZCAoKmNhbGxiYWNrKSh2b2lkICpjb29raWUsIHN0cnVjdCBrZXlfcGFyYW1zKikpO1xcbiBcXHRpbnRcXHQoKmRlbF9rZXkpKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxuLVxcdFxcdFxcdCAgIGludCBsaW5rX2lkLCB1OCBrZXlfaW5kZXgsIGJvb2wgcGFpcndpc2UsXFxuK1xcdFxcdFxcdCAgIGludCBsaW5rX2lkLCB1OCBrZXlfaW5kZXgsXFxuK1xcdFxcdFxcdCAgIGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLFxcbiBcXHRcXHRcXHQgICBjb25zdCB1OCAqbWFjX2FkZHIpO1xcbiBcXHRpbnRcXHQoKnNldF9kZWZhdWx0X2tleSkoc3RydWN0IHdpcGh5ICp3aXBoeSxcXG4gXFx0XFx0XFx0XFx0ICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IGxpbmtfaWQsXFxuQEAgLTYwNDEsNiArNjA1MCw4IEBAIHN0cnVjdCB3aXBoeV92ZW5kb3JfY29tbWFuZCB7XFxuICAqIEBlbWxfY2FwYWJpbGl0aWVzOiBFTUwgY2FwYWJpbGl0aWVzIChmb3IgTUxPKVxcbiAgKiBAbWxkX2NhcGFfYW5kX29wczogTUxEIGNhcGFiaWxpdGllcyBhbmQgb3BlcmF0aW9ucyAoZm9yIE1MTylcXG4gICogQGV4dF9tbGRfY2FwYV9hbmRfb3BzOiBFeHRlbmRlZCBNTEQgY2FwYWJpbGl0aWVzIGFuZCBvcGVyYXRpb25zIChmb3IgTUxPKVxcbisgKiBAY2lwX3N1cHBvcnRlZDogQ0lQIGlzIHN1cHBvcnRlZCBhbmQgdGhlIGNhcGFiaWxpdGllcyBhcmUgdmFsaWRcXG4rICogQGNpcF9jYXBhYmlsaXRpZXM6IENJUCBDYXBhYmlsaXRpZXMgZWxlbWVudCBjb250YWluaW5nIHRoZSBNSUMgcGFkZGluZyBkZWxheVxcbiAgKi9cXG4gc3RydWN0IHdpcGh5X2lmdHlwZV9leHRfY2FwYWIge1xcbiBcXHRlbnVtIG5sODAyMTFfaWZ0eXBlIGlmdHlwZTtcXG5AQCAtNjA1MCw2ICs2MDYxLDggQEAgc3RydWN0IHdpcGh5X2lmdHlwZV9leHRfY2FwYWIge1xcbiBcXHR1MTYgZW1sX2NhcGFiaWxpdGllcztcXG4gXFx0dTE2IG1sZF9jYXBhX2FuZF9vcHM7XFxuIFxcdHUxNiBleHRfbWxkX2NhcGFfYW5kX29wcztcXG4rXFx0Ym9vbCBjaXBfc3VwcG9ydGVkO1xcbitcXHR1OCBjaXBfY2FwYWJpbGl0aWVzO1xcbiB9O1xcbiBcXG4gLyoqXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L21hYzgwMjExLmggYi9pbmNsdWRlL25ldC9tYWM4MDIxMS5oXFxuaW5kZXggOWQxZmFjNmU4MDgyOS4uYWFlMTQwZmRjMmJiMSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL25ldC9tYWM4MDIxMS5oXFxuKysrIGIvaW5jbHVkZS9uZXQvbWFjODAyMTEuaFxcbkBAIC0yMzk2LDYgKzIzOTYsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbG9ja2RlcF92aWZfd2lwaHlfbXV0ZXhfaGVsZChzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKVxcbiAgKlxcdG51bWJlciBnZW5lcmF0aW9uIG9ubHlcXG4gICogQElFRUU4MDIxMV9LRVlfRkxBR19TUFBfQU1TRFU6IFNQUCBBLU1TRFVzIGNhbiBiZSB1c2VkIHdpdGggdGhpcyBrZXlcXG4gICpcXHQoc2V0IGJ5IG1hYzgwMjExIGZyb20gdGhlIHN0YS1cXHUwMDNlc3BwX2Ftc2R1IGZsYWcpXFxuKyAqIEBJRUVFODAyMTFfS0VZX0ZMQUdfQ0lQOiBUaGlzIGtleSBpcyB1c2VkIGZvciB0aGUgQ29udHJvbCBJbnRlZ3JpdHlcXG4rICpcXHRQcm90b2NvbCwgYW5kIGlzIGVpdGhlciBhIHBhaXJ3aXNlIGtleSBvciBhIENJR1RLLlxcbiAgKi9cXG4gZW51bSBpZWVlODAyMTFfa2V5X2ZsYWdzIHtcXG4gXFx0SUVFRTgwMjExX0tFWV9GTEFHX0dFTkVSQVRFX0lWX01HTVRcXHQ9IEJJVCgwKSxcXG5AQCAtMjQxMCw2ICsyNDEyLDcgQEAgZW51bSBpZWVlODAyMTFfa2V5X2ZsYWdzIHtcXG4gXFx0SUVFRTgwMjExX0tFWV9GTEFHX05PX0FVVE9fVFhcXHRcXHQ9IEJJVCg5KSxcXG4gXFx0SUVFRTgwMjExX0tFWV9GTEFHX0dFTkVSQVRFX01NSUVcXHQ9IEJJVCgxMCksXFxuIFxcdElFRUU4MDIxMV9LRVlfRkxBR19TUFBfQU1TRFVcXHRcXHQ9IEJJVCgxMSksXFxuK1xcdElFRUU4MDIxMV9LRVlfRkxBR19DSVBcXHRcXHRcXHQ9IEJJVCgxMiksXFxuIH07XFxuIFxcbiAvKipcXG5AQCAtMjYzMCw2ICsyNjMzLDggQEAgc3RydWN0IGllZWU4MDIxMV9zdGFfYWdncmVnYXRlcyB7XFxuICAqIEBlaHRfY2FwOiBFSFQgY2FwYWJpbGl0aWVzIG9mIHRoaXMgU1RBXFxuICAqIEB1aHJfY2FwOiBVSFIgY2FwYWJpbGl0aWVzIG9mIHRoaXMgU1RBXFxuICAqIEBzMWdfY2FwOiBTMUcgY2FwYWJpbGl0aWVzIG9mIHRoaXMgU1RBXFxuKyAqIEBjaXBfbWljX3BhZGRpbmc6IHRoZSBNSUMgcGFkZGluZyByZXF1aXJlZCBieSB0aGUgU1RBIGFzIGRlZmluZWQgaW4gaXRzXFxuKyAqXFx0Q0lQIENhcGFiaWxpdGllcyBlbGVtZW50XFxuICAqIEBhZ2c6IHBlci1saW5rIGRhdGEgZm9yIG11bHRpLWxpbmsgYWdncmVnYXRpb25cXG4gICogQGJhbmR3aWR0aDogY3VycmVudCBiYW5kd2lkdGggdGhlIHN0YXRpb24gY2FuIHJlY2VpdmUgd2l0aC5cXG4gICpcXHRUaGlzIGlzIHRoZSBtaW5pbXVtIGJldHdlZW4gdGhlIHBlZXIncyBjYXBhYmlsaXRpZXMgYW5kIG91ciBvd25cXG5AQCAtMjY1OCw2ICsyNjYzLDcgQEAgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSB7XFxuIFxcdHN0cnVjdCBpZWVlODAyMTFfc3RhX2VodF9jYXAgZWh0X2NhcDtcXG4gXFx0c3RydWN0IGllZWU4MDIxMV9zdGFfdWhyX2NhcCB1aHJfY2FwO1xcbiBcXHRzdHJ1Y3QgaWVlZTgwMjExX3N0YV9zMWdfY2FwIHMxZ19jYXA7XFxuK1xcdHU4IGNpcF9taWNfcGFkZGluZztcXG4gXFxuIFxcdHN0cnVjdCBpZWVlODAyMTFfc3RhX2FnZ3JlZ2F0ZXMgYWdnO1xcbiBcXG5AQCAtMjcyMSw2ICsyNzI3LDcgQEAgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSB7XFxuICAqIEB2YWxpZF9saW5rczogYml0bWFwIG9mIHZhbGlkIGxpbmtzLCBvciAwIGZvciBub24tTUxPXFxuICAqIEBzcHBfYW1zZHU6IGluZGljYXRlcyB3aGV0aGVyIHRoZSBTVEEgdXNlcyBTUFAgQS1NU0RVIG9yIG5vdC5cXG4gICogQGVwcF9wZWVyOiBpbmRpY2F0ZXMgdGhhdCB0aGUgcGVlciBpcyBhbiBFUFAgcGVlci5cXG4rICogQGNpcDogaW5kaWNhdGVzIHdoZXRoZXIgdGhlIFNUQSB1c2VzIGNvbnRyb2wgZnJhbWUgcHJvdGVjdGlvbiBvciBub3QuXFxuICAqIEBubWk6IEZvciBOREkgc3RhdGlvbnMsIHBvaW50ZXIgdG8gdGhlIE5NSSBzdGF0aW9uIG9mIHRoZSBwZWVyLlxcbiAgKiBAbmFuX3NjaGVkOiBOQU4gcGVlciBzY2hlZHVsZSBmb3IgdGhpcyBzdGF0aW9uLiBWYWxpZCBvbmx5IGZvciBOTUkgc3RhdGlvbnMuXFxuICAqIEBleHRfbWxkX2NhcGFfb3BzOiB0aGUgTUxEJ3MgZXh0ZW5kZWQgTUxEIGNhcGFiaWxpdGllcyBhbmQgb3BlcmF0aW9uc1xcbkBAIC0yNzQyLDYgKzI3NDksOCBAQCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSB7XFxuIFxcdHU4IG1heF9hbXNkdV9zdWJmcmFtZXM7XFxuIFxcdHUxNiBlbWxfY2FwO1xcbiBcXG4rXFx0Ym9vbCBjaXA7XFxuK1xcbiBcXHRzdHJ1Y3QgaWVlZTgwMjExX3N0YV9hZ2dyZWdhdGVzICpjdXI7XFxuIFxcbiBcXHRib29sIHN1cHBvcnRfcDJwX3BzO1xcbkBAIC02Mjc5LDYgKzYyODgsNyBAQCB2b2lkIGllZWU4MDIxMV9zZXRfa2V5X3J4X3NlcShzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXljb25mLFxcbiAgKiBAa2V5X2xlbjogdGhlIGtleSBkYXRhLiBNaWdodCBiZSBiaWdnZXIgdGhhbiB0aGUgYWN0dWFsIGtleSBsZW5ndGgsXFxuICAqXFx0YnV0IG5vdCBzbWFsbGVyIChmb3IgdGhlIGRyaXZlciBjb252aW5lbmNlKVxcbiAgKiBAbGlua19pZDogdGhlIGxpbmsgaWQgb2YgdGhlIGtleSBvciAtMSBmb3Igbm9uLU1MT1xcbisgKiBAY2lndGs6IHdoZXRoZXIgdGhpcyBpcyBhIENJR1RLXFxuICAqXFxuICAqIFdoZW4gR1RLIHJla2V5aW5nIHdhcyBkb25lIHdoaWxlIHRoZSBzeXN0ZW0gd2FzIHN1c3BlbmRlZCwgKGEpIG5ld1xcbiAgKiBrZXkocykgd2lsbCBiZSBhdmFpbGFibGUuIFRoZXNlIHdpbGwgYmUgbmVlZGVkIGJ5IG1hYzgwMjExIGZvciBwcm9wZXJcXG5AQCAtNjMwNSw3ICs2MzE1LDcgQEAgdm9pZCBpZWVlODAyMTFfc2V0X2tleV9yeF9zZXEoc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5Y29uZixcXG4gc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqXFxuIGllZWU4MDIxMV9ndGtfcmVrZXlfYWRkKHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXFxuIFxcdFxcdFxcdHU4IGlkeCwgdTggKmtleV9kYXRhLCB1OCBrZXlfbGVuLFxcbi1cXHRcXHRcXHRpbnQgbGlua19pZCk7XFxuK1xcdFxcdFxcdGludCBsaW5rX2lkLCBib29sIGNpZ3RrKTtcXG4gXFxuIC8qKlxcbiAgKiBpZWVlODAyMTFfZ3RrX3Jla2V5X25vdGlmeSAtIG5vdGlmeSB1c2Vyc3BhY2Ugc3VwcGxpY2FudCBvZiByZWtleWluZ1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvbmw4MDIxMS5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L25sODAyMTEuaFxcbmluZGV4IDAyMDM4N2Q3NjQxMjIuLjNlNmU1OWZiOGUxN2YgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L25sODAyMTEuaFxcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9ubDgwMjExLmhcXG5AQCAtMzE4NSw2ICszMTg1LDExIEBAIGVudW0gbmw4MDIxMV9jb21tYW5kcyB7XFxuICAqXFx0VGhlIGFnZ3JlZ2F0ZWQgbWVzc2FnZSBhbHdheXMgcHJlY2VkZXMgdGhlIHBlci1saW5rIG1lc3NhZ2VzIGZvciB0aGVcXG4gICpcXHRzYW1lIHN0YXRpb24gd2l0aGluIGEgZHVtcCBzZXF1ZW5jZS5cXG4gICpcXG4rICogQE5MODAyMTFfQVRUUl9BU1NPQ19DSVA6IEVuYWJsZSBDb250cm9sIEludGVncml0eSBQcm90b2NvbCBmb3IgdGhlXFxuKyAqXFx0YXNzb2NpYXRpb25cXG4rICogQE5MODAyMTFfQVRUUl9DSVBfQ0FQQUJJTElUSUVTOiBUaGUgQ29udHJvbCBJbnRlZ3JpdHkgUHJvdG9jb2wgZm9yIHRoZVxcbisgKlxcdHN0YXRpb24uXFxuKyAqXFxuICAqIEBOVU1fTkw4MDIxMV9BVFRSOiB0b3RhbCBudW1iZXIgb2Ygbmw4MDIxMV9hdHRycyBhdmFpbGFibGVcXG4gICogQE5MODAyMTFfQVRUUl9NQVg6IGhpZ2hlc3QgYXR0cmlidXRlIG51bWJlciBjdXJyZW50bHkgZGVmaW5lZFxcbiAgKiBAX19OTDgwMjExX0FUVFJfQUZURVJfTEFTVDogaW50ZXJuYWwgdXNlXFxuQEAgLTMyODAsNiArMzI4NSw4IEBAIGVudW0gbmw4MDIxMV9hdHRycyB7XFxuIFxcbiBcXHROTDgwMjExX0FUVFJfRlJFUV9GSVhFRCxcXG4gXFxuK1xcdE5MODAyMTFfQVRUUl9BU1NPQ19DSVAsXFxuK1xcdE5MODAyMTFfQVRUUl9DSVBfQ0FQQUJJTElUSUVTLFxcbiBcXG4gXFx0Tkw4MDIxMV9BVFRSX1dJUEhZX1JFVFJZX1NIT1JULFxcbiBcXHROTDgwMjExX0FUVFJfV0lQSFlfUkVUUllfTE9ORyxcXG5AQCAtMzkzNCw2ICszOTQxLDcgQEAgZW51bSBubDgwMjExX2lmdHlwZSB7XFxuICAqXFx0dGhhdCBzdXBwb3J0ICVOTDgwMjExX0ZFQVRVUkVfRlVMTF9BUF9DTElFTlRfU1RBVEUgdG8gdHJhbnNpdGlvbiBhXFxuICAqXFx0cHJldmlvdXNseSBhZGRlZCBzdGF0aW9uIGludG8gYXNzb2NpYXRlZCBzdGF0ZVxcbiAgKiBATkw4MDIxMV9TVEFfRkxBR19TUFBfQU1TRFU6IHN0YXRpb24gc3VwcG9ydHMgU1BQIEEtTVNEVXNcXG4rICogQE5MODAyMTFfU1RBX0ZMQUdfQ0lQOiBzdGF0aW9uIGhhcyBDb250cm9sIEludGVncml0eSBQcm90b2NvbCAoQ0lQKSBlbmFibGVkXFxuICAqIEBOTDgwMjExX1NUQV9GTEFHX01BWDogaGlnaGVzdCBzdGF0aW9uIGZsYWcgbnVtYmVyIGN1cnJlbnRseSBkZWZpbmVkXFxuICAqIEBfX05MODAyMTFfU1RBX0ZMQUdfQUZURVJfTEFTVDogaW50ZXJuYWwgdXNlXFxuICAqL1xcbkBAIC0zOTQ3LDYgKzM5NTUsNyBAQCBlbnVtIG5sODAyMTFfc3RhX2ZsYWdzIHtcXG4gXFx0Tkw4MDIxMV9TVEFfRkxBR19URExTX1BFRVIsXFxuIFxcdE5MODAyMTFfU1RBX0ZMQUdfQVNTT0NJQVRFRCxcXG4gXFx0Tkw4MDIxMV9TVEFfRkxBR19TUFBfQU1TRFUsXFxuK1xcdE5MODAyMTFfU1RBX0ZMQUdfQ0lQLFxcbiBcXG4gXFx0Lyoga2VlcCBsYXN0ICovXFxuIFxcdF9fTkw4MDIxMV9TVEFfRkxBR19BRlRFUl9MQVNULFxcbkBAIC01Nzc4LDEyICs1Nzg3LDE2IEBAIGVudW0gbmw4MDIxMV9hdXRoX3R5cGUge1xcbiAgKiBATkw4MDIxMV9LRVlUWVBFX0dST1VQOiBHcm91cCAoYnJvYWRjYXN0L211bHRpY2FzdCkga2V5XFxuICAqIEBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0U6IFBhaXJ3aXNlICh1bmljYXN0L2luZGl2aWR1YWwpIGtleVxcbiAgKiBATkw4MDIxMV9LRVlUWVBFX1BFRVJLRVk6IFBlZXJLZXkgKERMUylcXG4rICogQE5MODAyMTFfS0VZVFlQRV9DSUdUSzogQ29udHJvbCBJbnRlZ3JpdHkgR3JvdXAgVGVtcG9yYWwgS2V5XFxuKyAqXFx0VGhlIGNpcGhlciBpcyBHTUFDLTI1NiBidXQgcGFzc2VkIGFzIEdDTVAtMjU2LFxcbisgKlxcdHNhbWUgYXMgdGhlIHBhaXJ3aXNlIGtleSB3aGVuIHVzZWQgZm9yIENJUC5cXG4gICogQE5VTV9OTDgwMjExX0tFWVRZUEVTOiBudW1iZXIgb2YgZGVmaW5lZCBrZXkgdHlwZXNcXG4gICovXFxuIGVudW0gbmw4MDIxMV9rZXlfdHlwZSB7XFxuIFxcdE5MODAyMTFfS0VZVFlQRV9HUk9VUCxcXG4gXFx0Tkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFLFxcbiBcXHROTDgwMjExX0tFWVRZUEVfUEVFUktFWSxcXG4rXFx0Tkw4MDIxMV9LRVlUWVBFX0NJR1RLLFxcbiBcXG4gXFx0TlVNX05MODAyMTFfS0VZVFlQRVNcXG4gfTtcXG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2NmZy5jIGIvbmV0L21hYzgwMjExL2NmZy5jXFxuaW5kZXggMGE5MjQ3YmUyNmFmYS4uM2JmODE2MjljZGUzNCAxMDA2NDRcXG4tLS0gYS9uZXQvbWFjODAyMTEvY2ZnLmNcXG4rKysgYi9uZXQvbWFjODAyMTEvY2ZnLmNcXG5AQCAtNjExLDEyICs2MTEsMTUgQEAgc3RhdGljIGludCBpZWVlODAyMTFfc2V0X3R4KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbiB9XFxuIFxcbiBzdGF0aWMgaW50IGllZWU4MDIxMV9hZGRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxuLVxcdFxcdFxcdCAgICAgaW50IGxpbmtfaWQsIHU4IGtleV9pZHgsIGJvb2wgcGFpcndpc2UsXFxuK1xcdFxcdFxcdCAgICAgaW50IGxpbmtfaWQsIHU4IGtleV9pZHgsXFxuK1xcdFxcdFxcdCAgICAgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsXFxuIFxcdFxcdFxcdCAgICAgY29uc3QgdTggKm1hY19hZGRyLCBzdHJ1Y3Qga2V5X3BhcmFtcyAqcGFyYW1zKVxcbiB7XFxuIFxcdHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX1dERVZfVE9fU1VCX0lGKHdkZXYpO1xcbiBcXHRzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfZGF0YSAqbGluayA9XFxuIFxcdFxcdGllZWU4MDIxMV9saW5rX29yX2RlZmxpbmsoc2RhdGEsIGxpbmtfaWQsIGZhbHNlKTtcXG4rXFx0Ym9vbCBwYWlyd2lzZSA9IHR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFO1xcbitcXHRib29sIGNpZ3RrID0gdHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfQ0lHVEs7XFxuIFxcdHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtXFx1MDAzZWxvY2FsO1xcbiBcXHRzdHJ1Y3Qgc3RhX2luZm8gKnN0YSA9IE5VTEw7XFxuIFxcdHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXk7XFxuQEAgLTY2MCw2ICs2NjMsOSBAQCBzdGF0aWMgaW50IGllZWU4MDIxMV9hZGRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxuIFxcdFxcdGtleS1cXHUwMDNlY29uZi5saW5rX2lkID0gLTE7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdGtleS1cXHUwMDNlY29uZi5saW5rX2lkID0gbGluay1cXHUwMDNlbGlua19pZDtcXG4rXFxuK1xcdFxcdGlmIChjaWd0aylcXG4rXFx0XFx0XFx0a2V5LVxcdTAwM2Vjb25mLmZsYWdzIHw9IElFRUU4MDIxMV9LRVlfRkxBR19DSVA7XFxuIFxcdH1cXG4gXFxuIFxcdGlmIChwYXJhbXMtXFx1MDAzZW1vZGUgPT0gTkw4MDIxMV9LRVlfTk9fVFgpXFxuQEAgLTczNywxMCArNzQzLDEzIEBAIHN0YXRpYyBpbnQgaWVlZTgwMjExX2FkZF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcXG4gXFxuIHN0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX2tleSAqXFxuIGllZWU4MDIxMV9sb29rdXBfa2V5KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBpbnQgbGlua19pZCxcXG4tXFx0XFx0ICAgICB1OCBrZXlfaWR4LCBib29sIHBhaXJ3aXNlLCBjb25zdCB1OCAqbWFjX2FkZHIpXFxuK1xcdFxcdCAgICAgdTgga2V5X2lkeCwgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsXFxuK1xcdFxcdCAgICAgY29uc3QgdTggKm1hY19hZGRyKVxcbiB7XFxuIFxcdHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsIF9fbWF5YmVfdW51c2VkID0gc2RhdGEtXFx1MDAzZWxvY2FsO1xcbiBcXHRzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfZGF0YSAqbGluayA9IFxcdTAwMjZzZGF0YS1cXHUwMDNlZGVmbGluaztcXG4rXFx0Ym9vbCBwYWlyd2lzZSA9IHR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFO1xcbitcXHRib29sIGNpZ3RrID0gdHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfQ0lHVEs7XFxuIFxcdHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXk7XFxuIFxcbiBcXHRpZiAobGlua19pZCBcXHUwMDNlPSAwKSB7XFxuQEAgLTc3MCw3ICs3NzksMTEgQEAgaWVlZTgwMjExX2xvb2t1cF9rZXkoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGludCBsaW5rX2lkLFxcbiBcXHRcXHRcXHRyZXR1cm4gd2lwaHlfZGVyZWZlcmVuY2UobG9jYWwtXFx1MDAzZWh3LndpcGh5LFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgc3RhLVxcdTAwM2VwdGtba2V5X2lkeF0pO1xcbiBcXG4tXFx0XFx0aWYgKCFwYWlyd2lzZSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRpZiAoY2lndGsgXFx1MDAyNlxcdTAwMjYga2V5X2lkeCBcXHUwMDNjIE5VTV9DVFJMX0tFWVMpXFxuK1xcdFxcdFxcdHJldHVybiB3aXBoeV9kZXJlZmVyZW5jZShsb2NhbC1cXHUwMDNlaHcud2lwaHksXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBsaW5rX3N0YS1cXHUwMDNlY2lndGtba2V5X2lkeF0pO1xcbitcXG4rXFx0XFx0aWYgKCFwYWlyd2lzZSBcXHUwMDI2XFx1MDAyNiAhY2lndGsgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgIGtleV9pZHggXFx1MDAzYyBOVU1fREVGQVVMVF9LRVlTICtcXG4gXFx0XFx0XFx0ICAgICAgTlVNX0RFRkFVTFRfTUdNVF9LRVlTICtcXG4gXFx0XFx0XFx0ICAgICAgTlVNX0RFRkFVTFRfQkVBQ09OX0tFWVMpXFxuQEAgLTc4Myw2ICs3OTYsOSBAQCBpZWVlODAyMTFfbG9va3VwX2tleShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgaW50IGxpbmtfaWQsXFxuIFxcdGlmIChwYWlyd2lzZSBcXHUwMDI2XFx1MDAyNiBrZXlfaWR4IFxcdTAwM2MgTlVNX0RFRkFVTFRfS0VZUylcXG4gXFx0XFx0cmV0dXJuIHdpcGh5X2RlcmVmZXJlbmNlKGxvY2FsLVxcdTAwM2Vody53aXBoeSwgc2RhdGEtXFx1MDAzZWtleXNba2V5X2lkeF0pO1xcbiBcXG4rXFx0aWYgKGNpZ3RrKVxcbitcXHRcXHRyZXR1cm4gd2lwaHlfZGVyZWZlcmVuY2UobG9jYWwtXFx1MDAzZWh3LndpcGh5LCBsaW5rLVxcdTAwM2VjaWd0a1trZXlfaWR4XSk7XFxuK1xcbiBcXHRrZXkgPSB3aXBoeV9kZXJlZmVyZW5jZShsb2NhbC1cXHUwMDNlaHcud2lwaHksIGxpbmstXFx1MDAzZWd0a1trZXlfaWR4XSk7XFxuIFxcdGlmIChrZXkpXFxuIFxcdFxcdHJldHVybiBrZXk7XFxuQEAgLTc5NSw4ICs4MTEsOCBAQCBpZWVlODAyMTFfbG9va3VwX2tleShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgaW50IGxpbmtfaWQsXFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgaWVlZTgwMjExX2RlbF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcXG4tXFx0XFx0XFx0ICAgICBpbnQgbGlua19pZCwgdTgga2V5X2lkeCwgYm9vbCBwYWlyd2lzZSxcXG4tXFx0XFx0XFx0ICAgICBjb25zdCB1OCAqbWFjX2FkZHIpXFxuK1xcdFxcdFxcdCAgICAgaW50IGxpbmtfaWQsIHU4IGtleV9pZHgsXFxuK1xcdFxcdFxcdCAgICAgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsIGNvbnN0IHU4ICptYWNfYWRkcilcXG4ge1xcbiBcXHRzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9XREVWX1RPX1NVQl9JRih3ZGV2KTtcXG4gXFx0c3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS1cXHUwMDNlbG9jYWw7XFxuQEAgLTgwNCw3ICs4MjAsNyBAQCBzdGF0aWMgaW50IGllZWU4MDIxMV9kZWxfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxuIFxcbiBcXHRsb2NrZGVwX2Fzc2VydF93aXBoeShsb2NhbC1cXHUwMDNlaHcud2lwaHkpO1xcbiBcXG4tXFx0a2V5ID0gaWVlZTgwMjExX2xvb2t1cF9rZXkoc2RhdGEsIGxpbmtfaWQsIGtleV9pZHgsIHBhaXJ3aXNlLCBtYWNfYWRkcik7XFxuK1xcdGtleSA9IGllZWU4MDIxMV9sb29rdXBfa2V5KHNkYXRhLCBsaW5rX2lkLCBrZXlfaWR4LCB0eXBlLCBtYWNfYWRkcik7XFxuIFxcdGlmICgha2V5KVxcbiBcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4gXFxuQEAgLTgxNCw3ICs4MzAsOCBAQCBzdGF0aWMgaW50IGllZWU4MDIxMV9kZWxfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgaWVlZTgwMjExX2dldF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcXG4tXFx0XFx0XFx0ICAgICBpbnQgbGlua19pZCwgdTgga2V5X2lkeCwgYm9vbCBwYWlyd2lzZSxcXG4rXFx0XFx0XFx0ICAgICBpbnQgbGlua19pZCwgdTgga2V5X2lkeCxcXG4rXFx0XFx0XFx0ICAgICBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSxcXG4gXFx0XFx0XFx0ICAgICBjb25zdCB1OCAqbWFjX2FkZHIsIHZvaWQgKmNvb2tpZSxcXG4gXFx0XFx0XFx0ICAgICB2b2lkICgqY2FsbGJhY2spKHZvaWQgKmNvb2tpZSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGtleV9wYXJhbXMgKnBhcmFtcykpXFxuQEAgLTgzMyw3ICs4NTAsNyBAQCBzdGF0aWMgaW50IGllZWU4MDIxMV9nZXRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxuIFxcbiBcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIFxcbi1cXHRrZXkgPSBpZWVlODAyMTFfbG9va3VwX2tleShzZGF0YSwgbGlua19pZCwga2V5X2lkeCwgcGFpcndpc2UsIG1hY19hZGRyKTtcXG4rXFx0a2V5ID0gaWVlZTgwMjExX2xvb2t1cF9rZXkoc2RhdGEsIGxpbmtfaWQsIGtleV9pZHgsIHR5cGUsIG1hY19hZGRyKTtcXG4gXFx0aWYgKCFrZXkpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG5AQCAtMjI4OSw2ICsyMzA2LDggQEAgc3RhdGljIGludCBzdGFfbGlua19hcHBseV9wYXJhbWV0ZXJzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxcbiBcXHRjYXNlIFNUQV9MSU5LX01PREVfTkVXOlxcbiBcXHRcXHRpZiAoIXBhcmFtcy1cXHUwMDNlbGlua19tYWMpXFxuIFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHRpZiAoc3RhLVxcdTAwM2VzdGEuY2lwIFxcdTAwMjZcXHUwMDI2ICFwYXJhbXMtXFx1MDAzZWNpcF9jYXBfc2V0KVxcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgU1RBX0xJTktfTU9ERV9MSU5LX01PRElGWTpcXG4gXFx0XFx0YnJlYWs7XFxuQEAgLTI0MTEsNiArMjQzMCw5IEBAIHN0YXRpYyBpbnQgc3RhX2xpbmtfYXBwbHlfcGFyYW1ldGVycyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCxcXG4gXFx0XFx0aWVlZTgwMjExX3MxZ19jYXBfdG9fc3RhX3MxZ19jYXAoc2RhdGEsIHBhcmFtcy1cXHUwMDNlczFnX2NhcGEsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCBsaW5rX3N0YSk7XFxuIFxcbitcXHRpZiAocGFyYW1zLVxcdTAwM2VjaXBfY2FwX3NldClcXG4rXFx0XFx0bGlua19zdGEtXFx1MDAzZXB1Yi1cXHUwMDNlY2lwX21pY19wYWRkaW5nID0gcGFyYW1zLVxcdTAwM2VjaXBfY2FwO1xcbitcXG4gXFx0c3dpdGNoIChzZGF0YS1cXHUwMDNldmlmLnR5cGUpIHtcXG4gXFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9OQU46XFxuIFxcdGNhc2UgTkw4MDIxMV9JRlRZUEVfTkFOX0RBVEE6XFxuQEAgLTI1NzMsNiArMjU5NSw5IEBAIHN0YXRpYyBpbnQgc3RhX2FwcGx5X3BhcmFtZXRlcnMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXFxuIFxcdGlmIChwYXJhbXMtXFx1MDAzZWVtbF9jYXBfcHJlc2VudClcXG4gXFx0XFx0c3RhLVxcdTAwM2VzdGEuZW1sX2NhcCA9IHBhcmFtcy1cXHUwMDNlZW1sX2NhcDtcXG4gXFxuK1xcdGlmIChwYXJhbXMtXFx1MDAzZXN0YV9mbGFnc19zZXQgXFx1MDAyNiBCSVQoTkw4MDIxMV9TVEFfRkxBR19DSVApKVxcbitcXHRcXHRzdGEtXFx1MDAzZXN0YS5jaXAgPSB0cnVlO1xcbitcXG4gXFx0cmV0ID0gc3RhX2xpbmtfYXBwbHlfcGFyYW1ldGVycyhsb2NhbCwgc3RhLCBTVEFfTElOS19NT0RFX1NUQV9NT0RJRlksXFxuIFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZwYXJhbXMtXFx1MDAzZWxpbmtfc3RhX3BhcmFtcyk7XFxuIFxcdGlmIChyZXQpXFxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oIGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmhcXG5pbmRleCBhMWVmODhmZTg0NmRkLi5mYzg1ZjhiZjk2ZTNhIDEwMDY0NFxcbi0tLSBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oXFxuKysrIGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmhcXG5AQCAtNDc3LDYgKzQ3Nyw3IEBAIHN0cnVjdCBpZWVlODAyMTFfbWdkX2Fzc29jX2RhdGEge1xcbiBcXHRib29sIGNvbWViYWNrOyAvKiB3aGV0aGVyIHRoZSBBUCBoYXMgcmVxdWVzdGVkIGFzc29jaWF0aW9uIGNvbWViYWNrICovXFxuIFxcdGJvb2wgczFnO1xcbiBcXHRib29sIHNwcF9hbXNkdTtcXG4rXFx0Ym9vbCBjaXA7XFxuIFxcbiBcXHRzOCBhc3NvY19saW5rX2lkO1xcbiBcXG5AQCAtMTEwNCw2ICsxMTA1LDcgQEAgc3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEge1xcbiBcXHRzdHJ1Y3QgaWVlZTgwMjExX2tleSBfX3JjdSAqZ3RrW05VTV9ERUZBVUxUX0tFWVMgK1xcbiBcXHRcXHRcXHRcXHRcXHROVU1fREVGQVVMVF9NR01UX0tFWVMgK1xcbiBcXHRcXHRcXHRcXHRcXHROVU1fREVGQVVMVF9CRUFDT05fS0VZU107XFxuK1xcdHN0cnVjdCBpZWVlODAyMTFfa2V5IF9fcmN1ICpjaWd0a1tOVU1fQ1RSTF9LRVlTXTtcXG4gXFx0c3RydWN0IGllZWU4MDIxMV9rZXkgX19yY3UgKmRlZmF1bHRfbXVsdGljYXN0X2tleTtcXG4gXFx0c3RydWN0IGllZWU4MDIxMV9rZXkgX19yY3UgKmRlZmF1bHRfbWdtdF9rZXk7XFxuIFxcdHN0cnVjdCBpZWVlODAyMTFfa2V5IF9fcmN1ICpkZWZhdWx0X2JlYWNvbl9rZXk7XFxuQEAgLTE4NzAsNiArMTg3Miw3IEBAIHN0cnVjdCBpZWVlODAyXzExX2VsZW1zIHtcXG4gXFx0Y29uc3Qgc3RydWN0IGllZWU4MDIxMV90dGxtX2VsZW0gKnR0bG1bSUVFRTgwMjExX1RUTE1fTUFYX0NOVF07XFxuIFxcdGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdWhyX2NhcCAqdWhyX2NhcDtcXG4gXFx0Y29uc3Qgc3RydWN0IGllZWU4MDIxMV91aHJfb3BlcmF0aW9uICp1aHJfb3BlcmF0aW9uO1xcbitcXHRjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2NpcF9jYXAgKmNpcF9jYXA7XFxuIFxcbiBcXHQvKiBub3QgdGhlIG9yZGVyIGluIHRoZSBwc2QgdmFsdWVzIGlzIHBlciBlbGVtZW50LCBub3QgcGVyIGNoYW5kZWYgKi9cXG4gXFx0c3RydWN0IGllZWU4MDIxMV9wYXJzZWRfdHBlIHRwZTtcXG5AQCAtMjc3NSw2ICsyNzc4LDggQEAgaW50IGllZWU4MDIxMV9wdXRfdWhyX2NhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kKTtcXG4gdm9pZCBpZWVlODAyMTFfcHV0X3JlZ19jb25uKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbiBcXHRcXHRcXHQgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuK2ludCBpZWVlODAyMTFfcHV0X2NpcF9jYXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4rXFx0XFx0XFx0ICBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7XFxuIFxcbiAvKiBjaGFubmVsIG1hbmFnZW1lbnQgKi9cXG4gYm9vbCBpZWVlODAyMTFfY2hhbmRlZl9odF9vcGVyKGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfaHRfb3BlcmF0aW9uICpodF9vcGVyLFxcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEva2V5LmMgYi9uZXQvbWFjODAyMTEva2V5LmNcXG5pbmRleCBmNDVlNzkyYWJlZGU1Li40Yzk3ODhlYzBiNzRmIDEwMDY0NFxcbi0tLSBhL25ldC9tYWM4MDIxMS9rZXkuY1xcbisrKyBiL25ldC9tYWM4MDIxMS9rZXkuY1xcbkBAIC0yMDUsNiArMjA1LDEwIEBAIHN0YXRpYyBpbnQgaWVlZTgwMjExX2tleV9lbmFibGVfaHdfYWNjZWwoc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSlcXG4gXFx0XFx0XFx0ICBzdGEgPyBzdGEtXFx1MDAzZXN0YS5hZGRyIDogYmNhc3RfYWRkciwgcmV0KTtcXG4gXFxuICBvdXRfdW5zdXBwb3J0ZWQ6XFxuK1xcdC8qIENvbnRyb2wgSW50ZWdyaXR5IFByb3RvY29sIGNhbiBvbmx5IGJlIGRvbmUgaW4gaGFyZHdhcmUgKi9cXG4rXFx0aWYgKGtleS1cXHUwMDNlY29uZi5mbGFncyBcXHUwMDI2IElFRUU4MDIxMV9LRVlfRkxBR19DSVApXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4gXFx0c3dpdGNoIChrZXktXFx1MDAzZWNvbmYuY2lwaGVyKSB7XFxuIFxcdGNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfV0VQNDA6XFxuIFxcdGNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfV0VQMTA0OlxcbkBAIC00NDAsMTEgKzQ0NCwxMyBAQCB2b2lkIGllZWU4MDIxMV9zZXRfZGVmYXVsdF9iZWFjb25fa2V5KHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rLFxcbiBzdGF0aWMgaW50IGllZWU4MDIxMV9rZXlfcmVwbGFjZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4gXFx0XFx0XFx0XFx0IHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rLFxcbiBcXHRcXHRcXHRcXHQgc3RydWN0IHN0YV9pbmZvICpzdGEsXFxuLVxcdFxcdFxcdFxcdCBib29sIHBhaXJ3aXNlLFxcbitcXHRcXHRcXHRcXHQgZW51bSBpZWVlODAyMTFfa2V5X2ZsYWdzIGZsYWdzLFxcbiBcXHRcXHRcXHRcXHQgc3RydWN0IGllZWU4MDIxMV9rZXkgKm9sZCxcXG4gXFx0XFx0XFx0XFx0IHN0cnVjdCBpZWVlODAyMTFfa2V5ICpuZXcpXFxuIHtcXG4gXFx0c3RydWN0IGxpbmtfc3RhX2luZm8gKmxpbmtfc3RhID0gc3RhID8gXFx1MDAyNnN0YS1cXHUwMDNlZGVmbGluayA6IE5VTEw7XFxuK1xcdGJvb2wgcGFpcndpc2UgPSBmbGFncyBcXHUwMDI2IElFRUU4MDIxMV9LRVlfRkxBR19QQUlSV0lTRTtcXG4rXFx0Ym9vbCBjaXAgPSBmbGFncyBcXHUwMDI2IElFRUU4MDIxMV9LRVlfRkxBR19DSVA7XFxuIFxcdGludCBsaW5rX2lkO1xcbiBcXHRpbnQgaWR4O1xcbiBcXHRpbnQgcmV0ID0gMDtcXG5AQCAtNTM1LDYgKzU0MSw4IEBAIHN0YXRpYyBpbnQgaWVlZTgwMjExX2tleV9yZXBsYWNlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbiBcXHRcXHRcXHRpZiAobmV3IFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdFxcdCAgICAhKG5ldy1cXHUwMDNlY29uZi5mbGFncyBcXHUwMDI2IElFRUU4MDIxMV9LRVlfRkxBR19OT19BVVRPX1RYKSlcXG4gXFx0XFx0XFx0XFx0X2llZWU4MDIxMV9zZXRfdHhfa2V5KG5ldywgdHJ1ZSk7XFxuK1xcdFxcdH0gZWxzZSBpZiAoY2lwKSB7XFxuK1xcdFxcdFxcdHJjdV9hc3NpZ25fcG9pbnRlcihsaW5rX3N0YS1cXHUwMDNlY2lndGtbaWR4XSwgbmV3KTtcXG4gXFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKGxpbmtfc3RhLVxcdTAwM2VndGtbaWR4XSwgbmV3KTtcXG4gXFx0XFx0fVxcbkBAIC01NjksNiArNTc3LDggQEAgc3RhdGljIGludCBpZWVlODAyMTFfa2V5X3JlcGxhY2Uoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuIFxcbiBcXHRcXHRpZiAoaXNfd2VwIHx8IHBhaXJ3aXNlKVxcbiBcXHRcXHRcXHRyY3VfYXNzaWduX3BvaW50ZXIoc2RhdGEtXFx1MDAzZWtleXNbaWR4XSwgbmV3KTtcXG4rXFx0XFx0ZWxzZSBpZiAoY2lwKVxcbitcXHRcXHRcXHRyY3VfYXNzaWduX3BvaW50ZXIobGluay1cXHUwMDNlY2lndGtbaWR4XSwgbmV3KTtcXG4gXFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRyY3VfYXNzaWduX3BvaW50ZXIobGluay1cXHUwMDNlZ3RrW2lkeF0sIG5ldyk7XFxuIFxcbkBAIC04ODMsNiArODkzLDEwIEBAIGludCBpZWVlODAyMTFfa2V5X2xpbmsoc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSxcXG4gXFx0XFx0XFx0cmV0ID0gLUVPUE5PVFNVUFA7XFxuIFxcdFxcdFxcdGdvdG8gb3V0O1xcbiBcXHRcXHR9XFxuK1xcbitcXHRcXHQvKiBTZXQgQ0lQIGZsYWcgaWYgZW5hYmxlZCBmb3IgdGhlIHN0YXRpb24gKi9cXG4rXFx0XFx0aWYgKHN0YS1cXHUwMDNlc3RhLmNpcClcXG4rXFx0XFx0XFx0a2V5LVxcdTAwM2Vjb25mLmZsYWdzIHw9IElFRUU4MDIxMV9LRVlfRkxBR19DSVA7XFxuIFxcdH0gZWxzZSBpZiAoc3RhKSB7XFxuIFxcdFxcdHN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YSA9IFxcdTAwMjZzdGEtXFx1MDAzZWRlZmxpbms7XFxuIFxcdFxcdGludCBsaW5rX2lkID0ga2V5LVxcdTAwM2Vjb25mLmxpbmtfaWQ7XFxuQEAgLTg5NiwxNSArOTEwLDI1IEBAIGludCBpZWVlODAyMTFfa2V5X2xpbmsoc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSxcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHR9XFxuIFxcbi1cXHRcXHRvbGRfa2V5ID0gd2lwaHlfZGVyZWZlcmVuY2Uoc2RhdGEtXFx1MDAzZWxvY2FsLVxcdTAwM2Vody53aXBoeSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgIGxpbmtfc3RhLVxcdTAwM2VndGtbaWR4XSk7XFxuLVxcdH0gZWxzZSB7XFxuLVxcdFxcdGlmIChpZHggXFx1MDAzYyBOVU1fREVGQVVMVF9LRVlTKVxcbitcXHRcXHRpZiAoa2V5LVxcdTAwM2Vjb25mLmZsYWdzIFxcdTAwMjYgSUVFRTgwMjExX0tFWV9GTEFHX0NJUClcXG4gXFx0XFx0XFx0b2xkX2tleSA9IHdpcGh5X2RlcmVmZXJlbmNlKHNkYXRhLVxcdTAwM2Vsb2NhbC1cXHUwMDNlaHcud2lwaHksXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICBzZGF0YS1cXHUwMDNla2V5c1tpZHhdKTtcXG4tXFx0XFx0aWYgKCFvbGRfa2V5KVxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgbGlua19zdGEtXFx1MDAzZWNpZ3RrW2lkeF0pO1xcbitcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdG9sZF9rZXkgPSB3aXBoeV9kZXJlZmVyZW5jZShzZGF0YS1cXHUwMDNlbG9jYWwtXFx1MDAzZWh3LndpcGh5LFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgbGluay1cXHUwMDNlZ3RrW2lkeF0pO1xcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgbGlua19zdGEtXFx1MDAzZWd0a1tpZHhdKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0aWYgKGtleS1cXHUwMDNlY29uZi5mbGFncyBcXHUwMDI2IElFRUU4MDIxMV9LRVlfRkxBR19DSVApIHtcXG4rXFx0XFx0XFx0b2xkX2tleSA9IHdpcGh5X2RlcmVmZXJlbmNlKHNkYXRhLVxcdTAwM2Vsb2NhbC1cXHUwMDNlaHcud2lwaHksXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBsaW5rLVxcdTAwM2VjaWd0a1tpZHhdKTtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0aWYgKGlkeCBcXHUwMDNjIE5VTV9ERUZBVUxUX0tFWVMpXFxuK1xcdFxcdFxcdFxcdG9sZF9rZXkgPSB3aXBoeV9kZXJlZmVyZW5jZShzZGF0YS1cXHUwMDNlbG9jYWwtXFx1MDAzZWh3LndpcGh5LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgc2RhdGEtXFx1MDAzZWtleXNbaWR4XSk7XFxuK1xcbitcXHRcXHRcXHRpZiAoIW9sZF9rZXkpXFxuK1xcdFxcdFxcdFxcdG9sZF9rZXkgPSB3aXBoeV9kZXJlZmVyZW5jZShzZGF0YS1cXHUwMDNlbG9jYWwtXFx1MDAzZWh3LndpcGh5LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgbGluay1cXHUwMDNlZ3RrW2lkeF0pO1xcbitcXHRcXHR9XFxuIFxcdH1cXG4gXFxuIFxcdC8qIE5vbi1wYWlyd2lzZSBrZXlzIG11c3QgYWxzbyBub3Qgc3dpdGNoIHRoZSBjaXBoZXIgb24gcmVrZXkgKi9cXG5AQCAtOTM4LDkgKzk2MiwxNyBAQCBpbnQgaWVlZTgwMjExX2tleV9saW5rKHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXksXFxuIFxcdGlmIChzdGEgXFx1MDAyNlxcdTAwMjYgc3RhLVxcdTAwM2VzdGEuc3BwX2Ftc2R1KVxcbiBcXHRcXHRrZXktXFx1MDAzZWNvbmYuZmxhZ3MgfD0gSUVFRTgwMjExX0tFWV9GTEFHX1NQUF9BTVNEVTtcXG4gXFxuK1xcdC8qIEEgQ0lQIHJlbGF0ZWQga2V5IG11c3QgYmUgR0NNUC0yNTYgKHJlYWxseSBHTUFDLTI1NikgKi9cXG4rXFx0aWYgKChrZXktXFx1MDAzZWNvbmYuZmxhZ3MgXFx1MDAyNiBJRUVFODAyMTFfS0VZX0ZMQUdfQ0lQKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAga2V5LVxcdTAwM2Vjb25mLmNpcGhlciAhPSBXTEFOX0NJUEhFUl9TVUlURV9HQ01QXzI1Nikge1xcbitcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4gXFx0aW5jcmVtZW50X3RhaWxyb29tX25lZWRfY291bnQoc2RhdGEpO1xcbiBcXG4tXFx0cmV0ID0gaWVlZTgwMjExX2tleV9yZXBsYWNlKHNkYXRhLCBsaW5rLCBzdGEsIHBhaXJ3aXNlLCBvbGRfa2V5LCBrZXkpO1xcbitcXHRyZXQgPSBpZWVlODAyMTFfa2V5X3JlcGxhY2Uoc2RhdGEsIGxpbmssIHN0YSwga2V5LVxcdTAwM2Vjb25mLmZsYWdzLFxcbitcXHRcXHRcXHRcXHQgICAgb2xkX2tleSwga2V5KTtcXG4gXFxuIFxcdGlmICghcmV0KSB7XFxuIFxcdFxcdGllZWU4MDIxMV9kZWJ1Z2ZzX2tleV9hZGQoa2V5KTtcXG5AQCAtOTY2LDggKzk5OCw3IEBAIHZvaWQgaWVlZTgwMjExX2tleV9mcmVlKHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXksIGJvb2wgZGVsYXlfdGFpbHJvb20pXFxuIFxcdCAqL1xcbiBcXHRpZiAoa2V5LVxcdTAwM2VzZGF0YSlcXG4gXFx0XFx0aWVlZTgwMjExX2tleV9yZXBsYWNlKGtleS1cXHUwMDNlc2RhdGEsIE5VTEwsIGtleS1cXHUwMDNlc3RhLFxcbi1cXHRcXHRcXHRcXHQgICAgICBrZXktXFx1MDAzZWNvbmYuZmxhZ3MgXFx1MDAyNiBJRUVFODAyMTFfS0VZX0ZMQUdfUEFJUldJU0UsXFxuLVxcdFxcdFxcdFxcdCAgICAgIGtleSwgTlVMTCk7XFxuK1xcdFxcdFxcdFxcdCAgICAgIGtleS1cXHUwMDNlY29uZi5mbGFncywga2V5LCBOVUxMKTtcXG4gXFx0aWVlZTgwMjExX2tleV9kZXN0cm95KGtleSwgZGVsYXlfdGFpbHJvb20pO1xcbiB9XFxuIFxcbkBAIC0xMDk4LDggKzExMjksNyBAQCBzdGF0aWMgdm9pZCBpZWVlODAyMTFfZnJlZV9rZXlzX2lmYWNlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbiBcXG4gXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGtleSwgdG1wLCBcXHUwMDI2c2RhdGEtXFx1MDAzZWtleV9saXN0LCBsaXN0KSB7XFxuIFxcdFxcdGllZWU4MDIxMV9rZXlfcmVwbGFjZShrZXktXFx1MDAzZXNkYXRhLCBOVUxMLCBrZXktXFx1MDAzZXN0YSxcXG4tXFx0XFx0XFx0XFx0ICAgICAga2V5LVxcdTAwM2Vjb25mLmZsYWdzIFxcdTAwMjYgSUVFRTgwMjExX0tFWV9GTEFHX1BBSVJXSVNFLFxcbi1cXHRcXHRcXHRcXHQgICAgICBrZXksIE5VTEwpO1xcbitcXHRcXHRcXHRcXHQgICAgICBrZXktXFx1MDAzZWNvbmYuZmxhZ3MsIGtleSwgTlVMTCk7XFxuIFxcdFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNmtleS1cXHUwMDNlbGlzdCwga2V5cyk7XFxuIFxcdH1cXG4gXFxuQEAgLTExMTksOCArMTE0OSw3IEBAIHZvaWQgaWVlZTgwMjExX3JlbW92ZV9saW5rX2tleXMoc3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbmssXFxuIFxcdFxcdGlmIChrZXktXFx1MDAzZWNvbmYubGlua19pZCAhPSBsaW5rLVxcdTAwM2VsaW5rX2lkKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0aWVlZTgwMjExX2tleV9yZXBsYWNlKGtleS1cXHUwMDNlc2RhdGEsIGxpbmssIGtleS1cXHUwMDNlc3RhLFxcbi1cXHRcXHRcXHRcXHQgICAgICBrZXktXFx1MDAzZWNvbmYuZmxhZ3MgXFx1MDAyNiBJRUVFODAyMTFfS0VZX0ZMQUdfUEFJUldJU0UsXFxuLVxcdFxcdFxcdFxcdCAgICAgIGtleSwgTlVMTCk7XFxuK1xcdFxcdFxcdFxcdCAgICAgIGtleS1cXHUwMDNlY29uZi5mbGFncywga2V5LCBOVUxMKTtcXG4gXFx0XFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2a2V5LVxcdTAwM2VsaXN0LCBrZXlzKTtcXG4gXFx0fVxcbiB9XFxuQEAgLTExOTYsOCArMTIyNSwxNyBAQCB2b2lkIGllZWU4MDIxMV9mcmVlX3N0YV9rZXlzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxcbiBcXHRcXHRpZiAoIWtleSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdGllZWU4MDIxMV9rZXlfcmVwbGFjZShrZXktXFx1MDAzZXNkYXRhLCBOVUxMLCBrZXktXFx1MDAzZXN0YSxcXG4tXFx0XFx0XFx0XFx0ICAgICAga2V5LVxcdTAwM2Vjb25mLmZsYWdzIFxcdTAwMjYgSUVFRTgwMjExX0tFWV9GTEFHX1BBSVJXSVNFLFxcbi1cXHRcXHRcXHRcXHQgICAgICBrZXksIE5VTEwpO1xcbitcXHRcXHRcXHRcXHQgICAgICBrZXktXFx1MDAzZWNvbmYuZmxhZ3MsIGtleSwgTlVMTCk7XFxuK1xcdFxcdF9faWVlZTgwMjExX2tleV9kZXN0cm95KGtleSwga2V5LVxcdTAwM2VzZGF0YS1cXHUwMDNldmlmLnR5cGUgPT1cXG4rXFx0XFx0XFx0XFx0XFx0Tkw4MDIxMV9JRlRZUEVfU1RBVElPTik7XFxuK1xcdH1cXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHN0YS1cXHUwMDNlZGVmbGluay5jaWd0ayk7IGkrKykge1xcbitcXHRcXHRrZXkgPSB3aXBoeV9kZXJlZmVyZW5jZShsb2NhbC1cXHUwMDNlaHcud2lwaHksIHN0YS1cXHUwMDNlZGVmbGluay5jaWd0a1tpXSk7XFxuK1xcdFxcdGlmICgha2V5KVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0aWVlZTgwMjExX2tleV9yZXBsYWNlKGtleS1cXHUwMDNlc2RhdGEsIE5VTEwsIGtleS1cXHUwMDNlc3RhLFxcbitcXHRcXHRcXHRcXHQgICAgICBrZXktXFx1MDAzZWNvbmYuZmxhZ3MsIGtleSwgTlVMTCk7XFxuIFxcdFxcdF9faWVlZTgwMjExX2tleV9kZXN0cm95KGtleSwga2V5LVxcdTAwM2VzZGF0YS1cXHUwMDNldmlmLnR5cGUgPT1cXG4gXFx0XFx0XFx0XFx0XFx0Tkw4MDIxMV9JRlRZUEVfU1RBVElPTik7XFxuIFxcdH1cXG5AQCAtMTIwNyw4ICsxMjQ1LDcgQEAgdm9pZCBpZWVlODAyMTFfZnJlZV9zdGFfa2V5cyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCxcXG4gXFx0XFx0aWYgKCFrZXkpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRpZWVlODAyMTFfa2V5X3JlcGxhY2Uoa2V5LVxcdTAwM2VzZGF0YSwgTlVMTCwga2V5LVxcdTAwM2VzdGEsXFxuLVxcdFxcdFxcdFxcdCAgICAgIGtleS1cXHUwMDNlY29uZi5mbGFncyBcXHUwMDI2IElFRUU4MDIxMV9LRVlfRkxBR19QQUlSV0lTRSxcXG4tXFx0XFx0XFx0XFx0ICAgICAga2V5LCBOVUxMKTtcXG4rXFx0XFx0XFx0XFx0ICAgICAga2V5LVxcdTAwM2Vjb25mLmZsYWdzLCBrZXksIE5VTEwpO1xcbiBcXHRcXHRfX2llZWU4MDIxMV9rZXlfZGVzdHJveShrZXksIGtleS1cXHUwMDNlc2RhdGEtXFx1MDAzZXZpZi50eXBlID09XFxuIFxcdFxcdFxcdFxcdFxcdE5MODAyMTFfSUZUWVBFX1NUQVRJT04pO1xcbiBcXHR9XFxuQEAgLTEzNjYsNyArMTQwMyw3IEBAIEVYUE9SVF9TWU1CT0xfR1BMKGllZWU4MDIxMV9zZXRfa2V5X3J4X3NlcSk7XFxuIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKlxcbiBpZWVlODAyMTFfZ3RrX3Jla2V5X2FkZChzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxcbiBcXHRcXHRcXHR1OCBpZHgsIHU4ICprZXlfZGF0YSwgdTgga2V5X2xlbixcXG4tXFx0XFx0XFx0aW50IGxpbmtfaWQpXFxuK1xcdFxcdFxcdGludCBsaW5rX2lkLCBib29sIGNpZ3RrKVxcbiB7XFxuIFxcdHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gdmlmX3RvX3NkYXRhKHZpZik7XFxuIFxcdHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtXFx1MDAzZWxvY2FsO1xcbkBAIC0xMzkwLDEwICsxNDI3LDIwIEBAIGllZWU4MDIxMV9ndGtfcmVrZXlfYWRkKHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXFxuIFxcdFxcdCAgICBOVU1fREVGQVVMVF9CRUFDT05fS0VZUykpXFxuIFxcdFxcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xcbiBcXG4tXFx0cHJldl9rZXkgPSB3aXBoeV9kZXJlZmVyZW5jZShsb2NhbC1cXHUwMDNlaHcud2lwaHksXFxuLVxcdFxcdFxcdFxcdCAgICAgbGlua19kYXRhLVxcdTAwM2VndGtbaWR4XSk7XFxuK1xcdGlmIChXQVJOX09OKGNpZ3RrIFxcdTAwMjZcXHUwMDI2IGlkeCBcXHUwMDNlPSBOVU1fQ1RSTF9LRVlTKSlcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XFxuK1xcbitcXHRpZiAoY2lndGspXFxuK1xcdFxcdHByZXZfa2V5ID0gd2lwaHlfZGVyZWZlcmVuY2UobG9jYWwtXFx1MDAzZWh3LndpcGh5LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIGxpbmtfZGF0YS1cXHUwMDNlY2lndGtbaWR4XSk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0cHJldl9rZXkgPSB3aXBoeV9kZXJlZmVyZW5jZShsb2NhbC1cXHUwMDNlaHcud2lwaHksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgbGlua19kYXRhLVxcdTAwM2VndGtbaWR4XSk7XFxuIFxcdGlmICghcHJldl9rZXkpIHtcXG4tXFx0XFx0aWYgKGlkeCBcXHUwMDNjIE5VTV9ERUZBVUxUX0tFWVMpIHtcXG4rXFx0XFx0aWYgKGNpZ3RrKSB7XFxuK1xcdFxcdFxcdHByZXZfa2V5ID0gd2lwaHlfZGVyZWZlcmVuY2UobG9jYWwtXFx1MDAzZWh3LndpcGh5LFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGxpbmtfZGF0YS1cXHUwMDNlY2lndGtbaWR4IF4gMV0pO1xcbitcXHRcXHR9IGVsc2UgaWYgKGlkeCBcXHUwMDNjIE5VTV9ERUZBVUxUX0tFWVMpIHtcXG4gXFx0XFx0XFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyBOVU1fREVGQVVMVF9LRVlTOyBpKyspIHtcXG4gXFx0XFx0XFx0XFx0aWYgKGkgPT0gaWR4KVxcbiBcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG5AQCAtMTQyNCw2ICsxNDcxLDkgQEAgaWVlZTgwMjExX2d0a19yZWtleV9hZGQoc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcXG4gXFx0aWYgKHNkYXRhLVxcdTAwM2V1Lm1nZC5tZnAgIT0gSUVFRTgwMjExX01GUF9ESVNBQkxFRClcXG4gXFx0XFx0a2V5LVxcdTAwM2Vjb25mLmZsYWdzIHw9IElFRUU4MDIxMV9LRVlfRkxBR19SWF9NR01UO1xcbiBcXG4rXFx0aWYgKHByZXZfa2V5LVxcdTAwM2Vjb25mLmZsYWdzIFxcdTAwMjYgSUVFRTgwMjExX0tFWV9GTEFHX0NJUClcXG4rXFx0XFx0a2V5LVxcdTAwM2Vjb25mLmZsYWdzIHw9IElFRUU4MDIxMV9LRVlfRkxBR19DSVA7XFxuK1xcbiBcXHRrZXktXFx1MDAzZWNvbmYubGlua19pZCA9IGxpbmtfZGF0YS1cXHUwMDNlbGlua19pZDtcXG4gXFxuIFxcdGVyciA9IGllZWU4MDIxMV9rZXlfbGluayhrZXksIGxpbmtfZGF0YSwgTlVMTCk7XFxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9rZXkuaCBiL25ldC9tYWM4MDIxMS9rZXkuaFxcbmluZGV4IDgyNmU0ZTkzODdjNTUuLmM4NTk5MjQ5M2FmZDEgMTAwNjQ0XFxuLS0tIGEvbmV0L21hYzgwMjExL2tleS5oXFxuKysrIGIvbmV0L21hYzgwMjExL2tleS5oXFxuQEAgLTIsNyArMiw3IEBAXFxuIC8qXFxuICAqIENvcHlyaWdodCAyMDAyLTIwMDQsIEluc3RhbnQ4MDIgTmV0d29ya3MsIEluYy5cXG4gICogQ29weXJpZ2h0IDIwMDUsIERldmljZXNjYXBlIFNvZnR3YXJlLCBJbmMuXFxuLSAqIENvcHlyaWdodCAoQykgMjAxOSwgMjAyMi0yMDIzIEludGVsIENvcnBvcmF0aW9uXFxuKyAqIENvcHlyaWdodCAoQykgMjAxOSwgMjAyMi0yMDIzLCAyMDI2IEludGVsIENvcnBvcmF0aW9uXFxuICAqL1xcbiBcXG4gI2lmbmRlZiBJRUVFODAyMTFfS0VZX0hcXG5AQCAtMTksNiArMTksNyBAQFxcbiAjZGVmaW5lIE5VTV9ERUZBVUxUX0tFWVMgNFxcbiAjZGVmaW5lIE5VTV9ERUZBVUxUX01HTVRfS0VZUyAyXFxuICNkZWZpbmUgTlVNX0RFRkFVTFRfQkVBQ09OX0tFWVMgMlxcbisjZGVmaW5lIE5VTV9DVFJMX0tFWVMgMlxcbiAjZGVmaW5lIElOVkFMSURfUFRLX0tFWUlEWCAyIC8qIEtleWlkeCBhbHdheXMgcG9pbnRpbmcgdG8gYSBOVUxMIGtleSBmb3IgUFRLICovXFxuIFxcbiBzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsO1xcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvbWxtZS5jIGIvbmV0L21hYzgwMjExL21sbWUuY1xcbmluZGV4IGY1MTE2N2YwZmM0NmQuLjM0ZDcxM2M5YTY5MTQgMTAwNjQ0XFxuLS0tIGEvbmV0L21hYzgwMjExL21sbWUuY1xcbisrKyBiL25ldC9tYWM4MDIxMS9tbG1lLmNcXG5AQCAtMjMzNyw2ICsyMzM3LDEwIEBAIGllZWU4MDIxMV9hZGRfbGlua19lbGVtcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4gXFx0XFx0aWVlZTgwMjExX3B1dF9laHRfY2FwKHNrYiwgc2RhdGEsIHNiYW5kLFxcbiBcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2YXNzb2NfZGF0YS1cXHUwMDNlbGlua1tsaW5rX2lkXS5jb25uKTtcXG4gXFxuK1xcdC8qIEluc2VydCBDSVAgb25seSBvbiB0aGUgYXNzb2MgbGluayAoaXQgd2lsbCBiZSBpbmhlcml0ZWQpICovXFxuK1xcdGlmIChsaW5rX2lkID09IGFzc29jX2RhdGEtXFx1MDAzZWFzc29jX2xpbmtfaWQgXFx1MDAyNlxcdTAwMjYgYXNzb2NfZGF0YS1cXHUwMDNlY2lwKVxcbitcXHRcXHRpZWVlODAyMTFfcHV0X2NpcF9jYXAoc2tiLCBzZGF0YSk7XFxuK1xcbiBcXHRpZiAoYXNzb2NfZGF0YS1cXHUwMDNlbGlua1tsaW5rX2lkXS5jb25uLm1vZGUgXFx1MDAzZT0gSUVFRTgwMjExX0NPTk5fTU9ERV9VSFIpXFxuIFxcdFxcdGllZWU4MDIxMV9wdXRfdWhyX2NhcChza2IsIHNkYXRhLCBzYmFuZCk7XFxuIFxcbkBAIC0yNjEzLDcgKzI2MTcsOCBAQCBzdGF0aWMgaW50IGllZWU4MDIxMV9zZW5kX2Fzc29jKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKVxcbiBcXHQgICAgICAgYXNzb2NfZGF0YS1cXHUwMDNlaWVfbGVuICsgLyogZXh0cmEgSUVzICovXFxuIFxcdCAgICAgICAoYXNzb2NfZGF0YS1cXHUwMDNlZmlsc19rZWtfbGVuID8gMTYgLyogQUVTLVNJViAqLyA6IDApICtcXG4gXFx0ICAgICAgIDkgLyogV01NICovICtcXG4tXFx0ICAgICAgIDQgLyogcmVndWxhdG9yeSBjb25uZWN0aXZpdHksIGlmIDYgR0h6IGlzIHN1cHBvcnRlZCAqLztcXG4rXFx0ICAgICAgIDQgLyogcmVndWxhdG9yeSBjb25uZWN0aXZpdHksIGlmIDYgR0h6IGlzIHN1cHBvcnRlZCAqLyArXFxuK1xcdCAgICAgICAoYXNzb2NfZGF0YS1cXHUwMDNlY2lwID8gNCAvKiBDSVAgY2FwYWJpbGl0aWVzICovIDogMCk7XFxuIFxcbiBcXHRmb3IgKGxpbmtfaWQgPSAwOyBsaW5rX2lkIFxcdTAwM2MgSUVFRTgwMjExX01MRF9NQVhfTlVNX0xJTktTOyBsaW5rX2lkKyspIHtcXG4gXFx0XFx0c3RydWN0IGNmZzgwMjExX2JzcyAqY2JzcyA9IGFzc29jX2RhdGEtXFx1MDAzZWxpbmtbbGlua19pZF0uYnNzO1xcbkBAIC02Mjc0LDYgKzYyNzksMTkgQEAgc3RhdGljIGJvb2wgaWVlZTgwMjExX2Fzc29jX2NvbmZpZ19saW5rKHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rLFxcbiBcXHRcXHQvKiBUT0RPOiBPUEVOOiB3aGF0IGhhcHBlbnMgaWYgQlNTIGNvbG9yIGRpc2FibGUgaXMgc2V0PyAqL1xcbiBcXHR9XFxuIFxcbitcXHRpZiAoYXNzb2NfZGF0YS1cXHUwMDNlY2lwKSB7XFxuK1xcdFxcdGlmIChlbGVtcy1cXHUwMDNlY2lwX2NhcCkge1xcbitcXHRcXHRcXHRsaW5rX3N0YS1cXHUwMDNlcHViLVxcdTAwM2VjaXBfbWljX3BhZGRpbmcgPVxcbitcXHRcXHRcXHRcXHR1OF9nZXRfYml0cyhlbGVtcy1cXHUwMDNlY2lwX2NhcC1cXHUwMDNldixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIFdMQU5fQ0lQX0NBUEFfTUlDX1BBRERJTkcpO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRzZGF0YV9pbmZvKHNkYXRhLFxcbitcXHRcXHRcXHRcXHQgICBcXFwiQ0lQIENhcGFiaWxpdGllcyBub3QgaW5jbHVkZWQgaW4gYXNzb2NpYXRpb24gcmVzcG9uc2VcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRyZXQgPSBmYWxzZTtcXG4rXFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4gXFx0aWYgKGNic3MtXFx1MDAzZXRyYW5zbWl0dGVkX2Jzcykge1xcbiBcXHRcXHRic3NfY29uZi1cXHUwMDNlbm9udHJhbnNtaXR0ZWQgPSB0cnVlO1xcbiBcXHRcXHRldGhlcl9hZGRyX2NvcHkoYnNzX2NvbmYtXFx1MDAzZXRyYW5zbWl0dGVyX2Jzc2lkLFxcbkBAIC03MDAwLDYgKzcwMTgsNyBAQCBzdGF0aWMgYm9vbCBpZWVlODAyMTFfYXNzb2Nfc3VjY2VzcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4gXFx0XFx0Z290byBvdXRfZXJyO1xcbiBcXG4gXFx0c3RhLVxcdTAwM2VzdGEuc3BwX2Ftc2R1ID0gYXNzb2NfZGF0YS1cXHUwMDNlc3BwX2Ftc2R1O1xcbitcXHRzdGEtXFx1MDAzZXN0YS5jaXAgPSBhc3NvY19kYXRhLVxcdTAwM2VjaXA7XFxuIFxcbiBcXHRpZiAoaWVlZTgwMjExX3ZpZl9pc19tbGQoXFx1MDAyNnNkYXRhLVxcdTAwM2V2aWYpKSB7XFxuIFxcdFxcdGlmICghZWxlbXMtXFx1MDAzZW1sX2Jhc2ljKVxcbkBAIC0xMDUzOCw2ICsxMDU1Nyw3IEBAIGludCBpZWVlODAyMTFfbWdkX2Fzc29jKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbiBcXHR9XFxuIFxcbiBcXHRhc3NvY19kYXRhLVxcdTAwM2VzcHBfYW1zZHUgPSByZXEtXFx1MDAzZWZsYWdzIFxcdTAwMjYgQVNTT0NfUkVRX1NQUF9BTVNEVTtcXG4rXFx0YXNzb2NfZGF0YS1cXHUwMDNlY2lwID0gcmVxLVxcdTAwM2VmbGFncyBcXHUwMDI2IEFTU09DX1JFUV9DSVA7XFxuIFxcbiBcXHRpZiAoaWZtZ2QtXFx1MDAzZWF1dGhfZGF0YSBcXHUwMDI2XFx1MDAyNiAhaWZtZ2QtXFx1MDAzZWF1dGhfZGF0YS1cXHUwMDNlZG9uZSkge1xcbiBcXHRcXHRlcnIgPSAtRUJVU1k7XFxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9wYXJzZS5jIGIvbmV0L21hYzgwMjExL3BhcnNlLmNcXG5pbmRleCBjYjJiZTE2N2NkZTc5Li4zYjY2Y2E3ZDdhNWMyIDEwMDY0NFxcbi0tLSBhL25ldC9tYWM4MDIxMS9wYXJzZS5jXFxuKysrIGIvbmV0L21hYzgwMjExL3BhcnNlLmNcXG5AQCAtMjA1LDYgKzIwNSwxMCBAQCBpZWVlODAyMTFfcGFyc2VfZXh0ZW5zaW9uX2VsZW1lbnQodTMyICpjcmMsXFxuIFxcdFxcdFxcdGVsZW1zLVxcdTAwM2V0dGxtX251bSsrO1xcbiBcXHRcXHR9XFxuIFxcdFxcdGJyZWFrO1xcbitcXHRjYXNlIFdMQU5fRUlEX0VYVF9DSVBfQ0FQQTpcXG4rXFx0XFx0aWYgKGxlbiBcXHUwMDNlPSBzaXplb2YoKmVsZW1zLVxcdTAwM2VjaXBfY2FwKSlcXG4rXFx0XFx0XFx0ZWxlbXMtXFx1MDAzZWNpcF9jYXAgPSBkYXRhO1xcbitcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBXTEFOX0VJRF9FWFRfVUhSX09QRVI6XFxuIFxcdFxcdGlmIChwYXJhbXMtXFx1MDAzZW1vZGUgXFx1MDAzYyBJRUVFODAyMTFfQ09OTl9NT0RFX1VIUilcXG4gXFx0XFx0XFx0YnJlYWs7XFxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9zdGFfaW5mby5oIGIvbmV0L21hYzgwMjExL3N0YV9pbmZvLmhcXG5pbmRleCBlZTBkMzI4NzdjNWI0Li5mNDA5ZjZhM2FmYTFmIDEwMDY0NFxcbi0tLSBhL25ldC9tYWM4MDIxMS9zdGFfaW5mby5oXFxuKysrIGIvbmV0L21hYzgwMjExL3N0YV9pbmZvLmhcXG5AQCAtNDg1LDYgKzQ4NSw3IEBAIHN0cnVjdCBpZWVlODAyMTFfZnJhZ21lbnRfY2FjaGUge1xcbiAgKiBAbGlua19oYXNoX25vZGU6IGhhc2ggbm9kZSBmb3Igcmhhc2h0YWJsZVxcbiAgKiBAc3RhOiBQb2ludHMgdG8gdGhlIFNUQSBpbmZvXFxuICAqIEBndGs6IGdyb3VwIGtleXMgbmVnb3RpYXRlZCB3aXRoIHRoaXMgc3RhdGlvbiwgaWYgYW55XFxuKyAqIEBjaWd0azogY29udHJvbCBpbnRlZ3JpdHkgZ3JvdXAga2V5cyBuZWdvdGlhdGVkIHdpdGggdGhpcyBzdGF0aW9uLCBpZiBhbnlcXG4gICogQHR4X3N0YXRzOiBUWCBzdGF0aXN0aWNzXFxuICAqIEB0eF9zdGF0cy5wYWNrZXRzOiAjIG9mIHBhY2tldHMgdHJhbnNtaXR0ZWRcXG4gICogQHR4X3N0YXRzLmJ5dGVzOiAjIG9mIGJ5dGVzIGluIGFsbCBwYWNrZXRzIHRyYW5zbWl0dGVkXFxuQEAgLTUzNSw2ICs1MzYsNyBAQCBzdHJ1Y3QgbGlua19zdGFfaW5mbyB7XFxuIFxcdHN0cnVjdCBpZWVlODAyMTFfa2V5IF9fcmN1ICpndGtbTlVNX0RFRkFVTFRfS0VZUyArXFxuIFxcdFxcdFxcdFxcdFxcdE5VTV9ERUZBVUxUX01HTVRfS0VZUyArXFxuIFxcdFxcdFxcdFxcdFxcdE5VTV9ERUZBVUxUX0JFQUNPTl9LRVlTXTtcXG4rXFx0c3RydWN0IGllZWU4MDIxMV9rZXkgX19yY3UgKmNpZ3RrW05VTV9DVFJMX0tFWVNdO1xcbiBcXHRzdHJ1Y3QgaWVlZTgwMjExX3N0YV9yeF9zdGF0cyBfX3BlcmNwdSAqcGNwdV9yeF9zdGF0cztcXG4gXFxuIFxcdC8qIFVwZGF0ZWQgZnJvbSBSWCBwYXRoIG9ubHksIG5vIGxvY2tpbmcgcmVxdWlyZW1lbnRzICovXFxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS91dGlsLmMgYi9uZXQvbWFjODAyMTEvdXRpbC5jXFxuaW5kZXggYTk2MDc4YTZiZmEyOS4uODMwM2Y2MjRiN2Y2MiAxMDA2NDRcXG4tLS0gYS9uZXQvbWFjODAyMTEvdXRpbC5jXFxuKysrIGIvbmV0L21hYzgwMjExL3V0aWwuY1xcbkBAIC00NjgwLDYgKzQ2ODAsMjUgQEAgaW50IGllZWU4MDIxMV9wdXRfdWhyX2NhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4raW50IGllZWU4MDIxMV9wdXRfY2lwX2NhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbitcXHRcXHRcXHQgIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCB3aXBoeV9pZnR5cGVfZXh0X2NhcGFiICppZnRfZXh0X2NhcGEgPVxcbitcXHRcXHRjZmc4MDIxMV9nZXRfaWZ0eXBlX2V4dF9jYXBhKHNkYXRhLVxcdTAwM2Vsb2NhbC1cXHUwMDNlaHcud2lwaHksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgaWVlZTgwMjExX3ZpZl90eXBlX3AycChcXHUwMDI2c2RhdGEtXFx1MDAzZXZpZikpO1xcbitcXHR1OCBjaXBfY2FwYWJpbGl0aWVzID0gaWZ0X2V4dF9jYXBhID8gaWZ0X2V4dF9jYXBhLVxcdTAwM2VjaXBfY2FwYWJpbGl0aWVzIDogMDtcXG4rXFxuK1xcdGlmIChza2JfdGFpbHJvb20oc2tiKSBcXHUwMDNjIDQpXFxuK1xcdFxcdHJldHVybiAtRU5PQlVGUztcXG4rXFxuK1xcdHNrYl9wdXRfdTgoc2tiLCBXTEFOX0VJRF9FWFRFTlNJT04pO1xcbitcXHRza2JfcHV0X3U4KHNrYiwgMik7XFxuK1xcdHNrYl9wdXRfdTgoc2tiLCBXTEFOX0VJRF9FWFRfQ0lQX0NBUEEpO1xcbitcXHRza2JfcHV0X3U4KHNrYiwgY2lwX2NhcGFiaWxpdGllcyk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gY29uc3QgY2hhciAqaWVlZTgwMjExX2Nvbm5fbW9kZV9zdHIoZW51bSBpZWVlODAyMTFfY29ubl9tb2RlIG1vZGUpXFxuIHtcXG4gXFx0c3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBtb2Rlc1tdID0ge1xcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvY29yZS5oIGIvbmV0L3dpcmVsZXNzL2NvcmUuaFxcbmluZGV4IDE1ZDlmN2ViNThiNGQuLjNiOTBhYThjYzZhY2YgMTAwNjQ0XFxuLS0tIGEvbmV0L3dpcmVsZXNzL2NvcmUuaFxcbisrKyBiL25ldC93aXJlbGVzcy9jb3JlLmhcXG5AQCAtNDQzLDEzICs0NDMsMTYgQEAgdm9pZCBjZmc4MDIxMV9zbWVfYWJhbmRvbl9hc3NvYyhzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2KTtcXG4gXFxuIC8qIGludGVybmFsIGhlbHBlcnMgKi9cXG4gYm9vbCBjZmc4MDIxMV9zdXBwb3J0ZWRfY2lwaGVyX3N1aXRlKHN0cnVjdCB3aXBoeSAqd2lwaHksIHUzMiBjaXBoZXIpO1xcbitib29sIGNmZzgwMjExX2NpZ3RrX3N1cHBvcnRlZChzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxcbitcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTtcXG4gYm9vbCBjZmc4MDIxMV92YWxpZF9rZXlfaWR4KHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxuLVxcdFxcdFxcdCAgICBpbnQga2V5X2lkeCwgYm9vbCBwYWlyd2lzZSxcXG4rXFx0XFx0XFx0ICAgIGludCBrZXlfaWR4LCBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSxcXG4gXFx0XFx0XFx0ICAgIGNvbnN0IHU4ICptYWNfYWRkcik7XFxuIGludCBjZmc4MDIxMV92YWxpZGF0ZV9rZXlfc2V0dGluZ3Moc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbiBcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxcbiBcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qga2V5X3BhcmFtcyAqcGFyYW1zLCBpbnQga2V5X2lkeCxcXG4tXFx0XFx0XFx0XFx0ICAgYm9vbCBwYWlyd2lzZSwgY29uc3QgdTggKm1hY19hZGRyKTtcXG4rXFx0XFx0XFx0XFx0ICAgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsXFxuK1xcdFxcdFxcdFxcdCAgIGNvbnN0IHU4ICptYWNfYWRkcik7XFxuIHZvaWQgX19jZmc4MDIxMV9zY2FuX2RvbmUoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcGh5X3dvcmsgKndrKTtcXG4gdm9pZCBfX19jZmc4MDIxMV9zY2FuX2RvbmUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbiBcXHRcXHRcXHQgICBib29sIHNlbmRfbWVzc2FnZSk7XFxuZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9pYnNzLmMgYi9uZXQvd2lyZWxlc3MvaWJzcy5jXFxuaW5kZXggYjFkNzQ4YmRiNTA0ZS4uNmFlNTYxZWQ3ZjM3ZiAxMDA2NDRcXG4tLS0gYS9uZXQvd2lyZWxlc3MvaWJzcy5jXFxuKysrIGIvbmV0L3dpcmVsZXNzL2lic3MuY1xcbkBAIC0xNzIsNyArMTcyLDggQEAgdm9pZCBjZmc4MDIxMV9jbGVhcl9pYnNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgbm93ZXh0KVxcbiBcXHQgKi9cXG4gXFx0aWYgKHJkZXYtXFx1MDAzZW9wcy1cXHUwMDNlZGVsX2tleSlcXG4gXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIDY7IGkrKylcXG4tXFx0XFx0XFx0cmRldl9kZWxfa2V5KHJkZXYsIHdkZXYsIC0xLCBpLCBmYWxzZSwgTlVMTCk7XFxuK1xcdFxcdFxcdHJkZXZfZGVsX2tleShyZGV2LCB3ZGV2LCAtMSwgaSwgTkw4MDIxMV9LRVlUWVBFX0dST1VQLFxcbitcXHRcXHRcXHRcXHQgICAgIE5VTEwpO1xcbiBcXG4gXFx0aWYgKHdkZXYtXFx1MDAzZXUuaWJzcy5jdXJyZW50X2Jzcykge1xcbiBcXHRcXHRjZmc4MDIxMV91bmhvbGRfYnNzKHdkZXYtXFx1MDAzZXUuaWJzcy5jdXJyZW50X2Jzcyk7XFxuZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9ubDgwMjExLmMgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXFxuaW5kZXggOGFkYmVmNWYwNDQyNS4uNTY2NDhmN2Q5YzdmZSAxMDA2NDRcXG4tLS0gYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXFxuKysrIGIvbmV0L3dpcmVsZXNzL25sODAyMTEuY1xcbkBAIC0xMDk2LDYgKzEwOTYsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmw4MDIxMV9wb2xpY3lbTlVNX05MODAyMTFfQVRUUl0gPSB7XFxuIFxcdFtOTDgwMjExX0FUVFJfTlBDQV9QVU5DVF9CSVRNQVBdID1cXG4gXFx0XFx0TkxBX1BPTElDWV9GVUxMX1JBTkdFKE5MQV9VMzIsIFxcdTAwMjZubDgwMjExX3B1bmN0X2JpdG1hcF9yYW5nZSksXFxuIFxcdFtOTDgwMjExX0FUVFJfU1RBX0RVTVBfTElOS19TVEFUU10gPSB7IC50eXBlID0gTkxBX0ZMQUcgfSxcXG4rXFx0W05MODAyMTFfQVRUUl9BU1NPQ19DSVBdID0geyAudHlwZSA9IE5MQV9GTEFHIH0sXFxuK1xcdFtOTDgwMjExX0FUVFJfQ0lQX0NBUEFCSUxJVElFU10gPSB7IC50eXBlID0gTkxBX1U4IH0sXFxuIH07XFxuIFxcbiAvKiBwb2xpY3kgZm9yIHRoZSBrZXkgYXR0cmlidXRlcyAqL1xcbkBAIC0xNzYxLDYgKzE3NjMsMTEgQEAgc3RhdGljIGludCBubDgwMjExX3BhcnNlX2tleShzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCBzdHJ1Y3Qga2V5X3BhcnNlICprKVxcbiBcXHRcXHRcXHRcXHRHRU5MX1NFVF9FUlJfTVNHKGluZm8sIFxcXCJkZWYga2V5IGlkeCBub3QgMC0zXFxcIik7XFxuIFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHRcXHRcXHR9XFxuK1xcdFxcdH0gZWxzZSBpZiAoay1cXHUwMDNldHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfQ0lHVEspIHtcXG4rXFx0XFx0XFx0aWYgKGstXFx1MDAzZWlkeCBcXHUwMDNjIDAgfHwgay1cXHUwMDNlaWR4IFxcdTAwM2UgMSkge1xcbitcXHRcXHRcXHRcXHRHRU5MX1NFVF9FUlJfTVNHKGluZm8sIFxcXCJDSUdUSyBpZHggbm90IDAtMVxcXCIpO1xcbitcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0XFx0fVxcbiBcXHRcXHR9IGVsc2Uge1xcbiBcXHRcXHRcXHRpZiAoay1cXHUwMDNlaWR4IFxcdTAwM2MgMCB8fCBrLVxcdTAwM2VpZHggXFx1MDAzZSA3KSB7XFxuIFxcdFxcdFxcdFxcdEdFTkxfU0VUX0VSUl9NU0coaW5mbywgXFxcImtleSBpZHggbm90IDAtN1xcXCIpO1xcbkBAIC0xODI1LDcgKzE4MzIsOSBAQCBubDgwMjExX3BhcnNlX2Nvbm5rZXlzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG4gXFx0XFx0fSBlbHNlIGlmIChwYXJzZS5kZWZtZ210KVxcbiBcXHRcXHRcXHRnb3RvIGVycm9yO1xcbiBcXHRcXHRlcnIgPSBjZmc4MDIxMV92YWxpZGF0ZV9rZXlfc2V0dGluZ3MocmRldiwgd2RldiwgXFx1MDAyNnBhcnNlLnAsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgcGFyc2UuaWR4LCBmYWxzZSwgTlVMTCk7XFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgcGFyc2UuaWR4LFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgIE5MODAyMTFfS0VZVFlQRV9HUk9VUCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBOVUxMKTtcXG4gXFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0Z290byBlcnJvcjtcXG4gXFx0XFx0aWYgKHBhcnNlLnAuY2lwaGVyICE9IFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDQwIFxcdTAwMjZcXHUwMDI2XFxuQEAgLTM2MTUsNiArMzYyNCwxMSBAQCBzdGF0aWMgaW50IG5sODAyMTFfc2VuZF93aXBoeShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdE5MODAyMTFfQVRUUl9FWFRfTUxEX0NBUEFfQU5EX09QUyxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0Y2FwYWItXFx1MDAzZWV4dF9tbGRfY2FwYV9hbmRfb3BzKSlcXG4gXFx0XFx0XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuK1xcdFxcdFxcdFxcdGlmIChjYXBhYi1cXHUwMDNlY2lwX3N1cHBvcnRlZCBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHRcXHQgICAgbmxhX3B1dF91OChtc2csXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBOTDgwMjExX0FUVFJfQ0lQX0NBUEFCSUxJVElFUyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIGNhcGFiLVxcdTAwM2VjaXBfY2FwYWJpbGl0aWVzKSlcXG4rXFx0XFx0XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuIFxcbiBcXHRcXHRcXHRcXHRubGFfbmVzdF9lbmQobXNnLCBuZXN0ZWRfZXh0X2NhcGFiKTtcXG4gXFx0XFx0XFx0XFx0aWYgKHN0YXRlLVxcdTAwM2VzcGxpdClcXG5AQCAtNTM3MSw2ICs1Mzg1LDcgQEAgc3RhdGljIGludCBubDgwMjExX2dldF9rZXkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4gXFx0c3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGluZm8tXFx1MDAzZXVzZXJfcHRyWzFdO1xcbiBcXHR1OCBrZXlfaWR4ID0gMDtcXG4gXFx0Y29uc3QgdTggKm1hY19hZGRyID0gTlVMTDtcXG4rXFx0ZW51bSBubDgwMjExX2tleV90eXBlIHR5cGU7XFxuIFxcdGJvb2wgcGFpcndpc2U7XFxuIFxcdHN0cnVjdCBnZXRfa2V5X2Nvb2tpZSBjb29raWUgPSB7XFxuIFxcdFxcdC5lcnJvciA9IDAsXFxuQEAgLTU0MDMsMTkgKzU0MTgsMjQgQEAgc3RhdGljIGludCBubDgwMjExX2dldF9rZXkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4gXFx0XFx0bWFjX2FkZHIgPSBubGFfZGF0YShpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfTUFDXSk7XFxuIFxcbiBcXHRwYWlyd2lzZSA9ICEhbWFjX2FkZHI7XFxuK1xcdHR5cGUgPSBwYWlyd2lzZSA/IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRSA6IE5MODAyMTFfS0VZVFlQRV9HUk9VUDtcXG4gXFx0aWYgKGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9LRVlfVFlQRV0pIHtcXG4tXFx0XFx0dTMyIGt0ID0gbmxhX2dldF91MzIoaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0tFWV9UWVBFXSk7XFxuK1xcdFxcdHR5cGUgPSBubGFfZ2V0X3UzMihpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfS0VZX1RZUEVdKTtcXG4gXFxuLVxcdFxcdGlmIChrdCAhPSBOTDgwMjExX0tFWVRZUEVfR1JPVVAgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0ICAgIGt0ICE9IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRSlcXG4rXFx0XFx0aWYgKHR5cGUgIT0gTkw4MDIxMV9LRVlUWVBFX0dST1VQIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICB0eXBlICE9IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgdHlwZSAhPSBOTDgwMjExX0tFWVRZUEVfQ0lHVEspIHtcXG4rXFx0XFx0XFx0R0VOTF9TRVRfRVJSX01TRyhpbmZvLCBcXFwia2V5IHR5cGUgbm90IHBhaXJ3aXNlLCBncm91cCBvciBDSUdUS1xcXCIpO1xcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tXFx0XFx0cGFpcndpc2UgPSBrdCA9PSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0U7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdHBhaXJ3aXNlID0gdHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0U7XFxuIFxcdH1cXG4gXFxuIFxcdGlmICghcmRldi1cXHUwMDNlb3BzLVxcdTAwM2VnZXRfa2V5KVxcbiBcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIFxcbi1cXHRpZiAoIWNmZzgwMjExX3ZhbGlkX2tleV9pZHgod2Rldiwga2V5X2lkeCwgcGFpcndpc2UsIG1hY19hZGRyKSlcXG4rXFx0aWYgKCFjZmc4MDIxMV92YWxpZF9rZXlfaWR4KHdkZXYsIGtleV9pZHgsIHR5cGUsIG1hY19hZGRyKSlcXG4gXFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuIFxcbiBcXHRtc2cgPSBubG1zZ19uZXcoTkxNU0dfREVGQVVMVF9TSVpFLCBHRlBfS0VSTkVMKTtcXG5AQCAtNTQ0NCw3ICs1NDY0LDcgQEAgc3RhdGljIGludCBubDgwMjExX2dldF9rZXkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0Z290byBmcmVlX21zZztcXG4gXFxuLVxcdGVyciA9IHJkZXZfZ2V0X2tleShyZGV2LCB3ZGV2LCBsaW5rX2lkLCBrZXlfaWR4LCBwYWlyd2lzZSwgbWFjX2FkZHIsXFxuK1xcdGVyciA9IHJkZXZfZ2V0X2tleShyZGV2LCB3ZGV2LCBsaW5rX2lkLCBrZXlfaWR4LCB0eXBlLCBtYWNfYWRkcixcXG4gXFx0XFx0XFx0ICAgXFx1MDAyNmNvb2tpZSwgZ2V0X2tleV9jYWxsYmFjayk7XFxuIFxcbiBcXHRpZiAoZXJyKVxcbkBAIC01NjAzLDggKzU2MjMsOSBAQCBzdGF0aWMgaW50IG5sODAyMTFfbmV3X2tleShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiBcXG4gXFx0LyogZm9yIG5vdyAqL1xcbiBcXHRpZiAoa2V5LnR5cGUgIT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICBrZXkudHlwZSAhPSBOTDgwMjExX0tFWVRZUEVfR1JPVVApIHtcXG4tXFx0XFx0R0VOTF9TRVRfRVJSX01TRyhpbmZvLCBcXFwia2V5IHR5cGUgbm90IHBhaXJ3aXNlIG9yIGdyb3VwXFxcIik7XFxuK1xcdCAgICBrZXkudHlwZSAhPSBOTDgwMjExX0tFWVRZUEVfR1JPVVAgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIGtleS50eXBlICE9IE5MODAyMTFfS0VZVFlQRV9DSUdUSykge1xcbitcXHRcXHRHRU5MX1NFVF9FUlJfTVNHKGluZm8sIFxcXCJrZXkgdHlwZSBub3QgcGFpcndpc2UsIGdyb3VwIG9yIENJR1RLXFxcIik7XFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHR9XFxuIFxcbkBAIC01NjE2LDggKzU2MzcsNyBAQCBzdGF0aWMgaW50IG5sODAyMTFfbmV3X2tleShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiBcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIFxcbiBcXHRpZiAoY2ZnODAyMTFfdmFsaWRhdGVfa2V5X3NldHRpbmdzKHJkZXYsIHdkZXYsIFxcdTAwMjZrZXkucCwga2V5LmlkeCxcXG4tXFx0XFx0XFx0XFx0XFx0ICAga2V5LnR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFLFxcbi1cXHRcXHRcXHRcXHRcXHQgICBtYWNfYWRkcikpIHtcXG4rXFx0XFx0XFx0XFx0XFx0ICAga2V5LnR5cGUsIG1hY19hZGRyKSkge1xcbiBcXHRcXHRHRU5MX1NFVF9FUlJfTVNHKGluZm8sIFxcXCJrZXkgc2V0dGluZyB2YWxpZGF0aW9uIGZhaWxlZFxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbkBAIC01NjMxLDggKzU2NTEsNyBAQCBzdGF0aWMgaW50IG5sODAyMTFfbmV3X2tleShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiBcXHRcXHRcXHRcXHRrZXkudHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0UpO1xcbiBcXG4gXFx0aWYgKCFlcnIpIHtcXG4tXFx0XFx0ZXJyID0gcmRldl9hZGRfa2V5KHJkZXYsIHdkZXYsIGxpbmtfaWQsIGtleS5pZHgsXFxuLVxcdFxcdFxcdFxcdCAgIGtleS50eXBlID09IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRSxcXG4rXFx0XFx0ZXJyID0gcmRldl9hZGRfa2V5KHJkZXYsIHdkZXYsIGxpbmtfaWQsIGtleS5pZHgsIGtleS50eXBlLFxcbiBcXHRcXHRcXHRcXHQgICAgbWFjX2FkZHIsIFxcdTAwMjZrZXkucCk7XFxuIFxcdFxcdGlmIChlcnIpXFxuIFxcdFxcdFxcdEdFTkxfU0VUX0VSUl9NU0coaW5mbywgXFxcImtleSBhZGRpdGlvbiBmYWlsZWRcXFwiKTtcXG5AQCAtNTY2NiwxMiArNTY4NSwxMyBAQCBzdGF0aWMgaW50IG5sODAyMTFfZGVsX2tleShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiBcXG4gXFx0LyogZm9yIG5vdyAqL1xcbiBcXHRpZiAoa2V5LnR5cGUgIT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICBrZXkudHlwZSAhPSBOTDgwMjExX0tFWVRZUEVfR1JPVVApXFxuK1xcdCAgICBrZXkudHlwZSAhPSBOTDgwMjExX0tFWVRZUEVfR1JPVVAgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIGtleS50eXBlICE9IE5MODAyMTFfS0VZVFlQRV9DSUdUSykge1xcbitcXHRcXHRHRU5MX1NFVF9FUlJfTVNHKGluZm8sIFxcXCJrZXkgdHlwZSBub3QgcGFpcndpc2UsIGdyb3VwIG9yIENJR1RLXFxcIik7XFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuIFxcbi1cXHRpZiAoIWNmZzgwMjExX3ZhbGlkX2tleV9pZHgod2Rldiwga2V5LmlkeCxcXG4tXFx0XFx0XFx0XFx0ICAgIGtleS50eXBlID09IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRSxcXG4tXFx0XFx0XFx0XFx0ICAgIG1hY19hZGRyKSlcXG4rXFx0aWYgKCFjZmc4MDIxMV92YWxpZF9rZXlfaWR4KHdkZXYsIGtleS5pZHgsIGtleS50eXBlLCBtYWNfYWRkcikpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4gXFx0aWYgKCFyZGV2LVxcdTAwM2VvcHMtXFx1MDAzZWRlbF9rZXkpXFxuQEAgLTU2ODUsOCArNTcwNSw3IEBAIHN0YXRpYyBpbnQgbmw4MDIxMV9kZWxfa2V5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIFxcbiBcXHRpZiAoIWVycilcXG4gXFx0XFx0ZXJyID0gcmRldl9kZWxfa2V5KHJkZXYsIHdkZXYsIGxpbmtfaWQsIGtleS5pZHgsXFxuLVxcdFxcdFxcdFxcdCAgIGtleS50eXBlID09IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRSxcXG4tXFx0XFx0XFx0XFx0ICAgbWFjX2FkZHIpO1xcbitcXHRcXHRcXHRcXHQgICBrZXkudHlwZSwgbWFjX2FkZHIpO1xcbiBcXG4gI2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXFxuIFxcdGlmICghZXJyKSB7XFxuQEAgLTg4MDUsNyArODgyNCw3IEBAIGludCBjZmc4MDIxMV9jaGVja19zdGF0aW9uX2NoYW5nZShzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuIFxcdC8qIFdoZW4geW91IHJ1biBpbnRvIHRoaXMsIGFkanVzdCB0aGUgY29kZSBiZWxvdyBmb3IgdGhlIG5ldyBmbGFnICovXFxuLVxcdEJVSUxEX0JVR19PTihOTDgwMjExX1NUQV9GTEFHX01BWCAhPSA4KTtcXG4rXFx0QlVJTERfQlVHX09OKE5MODAyMTFfU1RBX0ZMQUdfTUFYICE9IDkpO1xcbiBcXG4gXFx0c3dpdGNoIChzdGF0eXBlKSB7XFxuIFxcdGNhc2UgQ0ZHODAyMTFfU1RBX01FU0hfUEVFUl9LRVJORUw6XFxuQEAgLTg4OTksNyArODkxOCw4IEBAIGludCBjZmc4MDIxMV9jaGVja19zdGF0aW9uX2NoYW5nZShzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxcbiBcXHRcXHRcXHRcXHQgIEJJVChOTDgwMjExX1NUQV9GTEFHX1NIT1JUX1BSRUFNQkxFKSB8XFxuIFxcdFxcdFxcdFxcdCAgQklUKE5MODAyMTFfU1RBX0ZMQUdfV01FKSB8XFxuIFxcdFxcdFxcdFxcdCAgQklUKE5MODAyMTFfU1RBX0ZMQUdfTUZQKSB8XFxuLVxcdFxcdFxcdFxcdCAgQklUKE5MODAyMTFfU1RBX0ZMQUdfU1BQX0FNU0RVKSkpXFxuK1xcdFxcdFxcdFxcdCAgQklUKE5MODAyMTFfU1RBX0ZMQUdfU1BQX0FNU0RVKSB8XFxuK1xcdFxcdFxcdFxcdCAgQklUKE5MODAyMTFfU1RBX0ZMQUdfQ0lQKSkpXFxuIFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4gXFx0XFx0LyogYnV0IGF1dGhlbnRpY2F0ZWQvYXNzb2NpYXRlZCBvbmx5IGlmIGRyaXZlciBoYW5kbGVzIGl0ICovXFxuQEAgLTkyNzYsNiArOTI5NiwyMiBAQCBzdGF0aWMgaW50IG5sODAyMTFfc2V0X3N0YXRpb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4gXFx0XFx0XFx0bmxhX2dldF91MTYoaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0VNTF9DQVBBQklMSVRZXSk7XFxuIFxcdH1cXG4gXFxuK1xcdGlmIChwYXJhbXMuc3RhX2ZsYWdzX21hc2sgXFx1MDAyNiBCSVQoTkw4MDIxMV9TVEFfRkxBR19DSVApIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBwYXJhbXMuc3RhX2ZsYWdzX3NldCBcXHUwMDI2IEJJVChOTDgwMjExX1NUQV9GTEFHX0NJUCkpIHtcXG4rXFx0XFx0aWYgKCFjZmc4MDIxMV9jaWd0a19zdXBwb3J0ZWQod2RldiwgaW5mbykpXFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0XFx0LyogQ0lQIGNhcGFiaWxpdGllcyBhcmUgcmVxdWlyZWQgaWYgQ0lQIGlzIGJlaW5nIGVuYWJsZWQgKi9cXG4rXFx0XFx0aWYgKGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9DSVBfQ0FQQUJJTElUSUVTXSkge1xcbitcXHRcXHRcXHRwYXJhbXMubGlua19zdGFfcGFyYW1zLmNpcF9jYXBfc2V0ID0gdHJ1ZTtcXG4rXFx0XFx0XFx0cGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5jaXBfY2FwID1cXG4rXFx0XFx0XFx0XFx0bmxhX2dldF91OChpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfQ0lQX0NBUEFCSUxJVElFU10pO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRHRU5MX1NFVF9FUlJfTVNHKGluZm8sIFxcXCJObyBDSVAgY2FwYWJpbGl0aWVzIHByb3ZpZGVkXFxcIik7XFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuIFxcdGlmIChpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfQUlSVElNRV9XRUlHSFRdKVxcbiBcXHRcXHRwYXJhbXMuYWlydGltZV93ZWlnaHQgPVxcbiBcXHRcXHRcXHRubGFfZ2V0X3UxNihpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfQUlSVElNRV9XRUlHSFRdKTtcXG5AQCAtOTQ3NSw2ICs5NTExLDIyIEBAIHN0YXRpYyBpbnQgbmw4MDIxMV9uZXdfc3RhdGlvbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiBcXHRcXHRcXHRubGFfZ2V0X3UxNihpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfRU1MX0NBUEFCSUxJVFldKTtcXG4gXFx0fVxcbiBcXG4rXFx0aWYgKHBhcmFtcy5zdGFfZmxhZ3NfbWFzayBcXHUwMDI2IEJJVChOTDgwMjExX1NUQV9GTEFHX0NJUCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIHBhcmFtcy5zdGFfZmxhZ3Nfc2V0IFxcdTAwMjYgQklUKE5MODAyMTFfU1RBX0ZMQUdfQ0lQKSkge1xcbitcXHRcXHRpZiAoIWNmZzgwMjExX2NpZ3RrX3N1cHBvcnRlZCh3ZGV2LCBpbmZvKSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRcXHQvKiBDSVAgY2FwYWJpbGl0aWVzIGFyZSByZXF1aXJlZCBpZiBDSVAgaXMgZW5hYmxlZCAqL1xcbitcXHRcXHRpZiAoaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0NJUF9DQVBBQklMSVRJRVNdKSB7XFxuK1xcdFxcdFxcdHBhcmFtcy5saW5rX3N0YV9wYXJhbXMuY2lwX2NhcF9zZXQgPSB0cnVlO1xcbitcXHRcXHRcXHRwYXJhbXMubGlua19zdGFfcGFyYW1zLmNpcF9jYXAgPVxcbitcXHRcXHRcXHRcXHRubGFfZ2V0X3U4KGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9DSVBfQ0FQQUJJTElUSUVTXSk7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdEdFTkxfU0VUX0VSUl9NU0coaW5mbywgXFxcIk5vIENJUCBjYXBhYmlsaXRpZXMgcHJvdmlkZWRcXFwiKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4gXFx0aWYgKGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9IRV82R0haX0NBUEFCSUxJVFldKVxcbiBcXHRcXHRwYXJhbXMubGlua19zdGFfcGFyYW1zLmhlXzZnaHpfY2FwYSA9XFxuIFxcdFxcdFxcdG5sYV9kYXRhKGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9IRV82R0haX0NBUEFCSUxJVFldKTtcXG5AQCAtOTU1Miw3ICs5NjA0LDcgQEAgc3RhdGljIGludCBubDgwMjExX25ld19zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4gXFx0LyogV2hlbiB5b3UgcnVuIGludG8gdGhpcywgYWRqdXN0IHRoZSBjb2RlIGJlbG93IGZvciB0aGUgbmV3IGZsYWcgKi9cXG4tXFx0QlVJTERfQlVHX09OKE5MODAyMTFfU1RBX0ZMQUdfTUFYICE9IDgpO1xcbitcXHRCVUlMRF9CVUdfT04oTkw4MDIxMV9TVEFfRkxBR19NQVggIT0gOSk7XFxuIFxcbiBcXHRzd2l0Y2ggKHdkZXYtXFx1MDAzZWlmdHlwZSkge1xcbiBcXHRjYXNlIE5MODAyMTFfSUZUWVBFX0FQOlxcbkBAIC05NTgxLDYgKzk2MzMsMTAgQEAgc3RhdGljIGludCBubDgwMjExX25ld19zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIFxcdFxcdCAgICBwYXJhbXMuc3RhX2ZsYWdzX21hc2sgXFx1MDAyNiBCSVQoTkw4MDIxMV9TVEFfRkxBR19TUFBfQU1TRFUpKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuK1xcdFxcdGlmIChwYXJhbXMuc3RhX2ZsYWdzX21hc2sgXFx1MDAyNiBCSVQoTkw4MDIxMV9TVEFfRkxBR19DSVApIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAhY2ZnODAyMTFfY2lndGtfc3VwcG9ydGVkKHdkZXYsIGluZm8pKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuIFxcdFxcdC8qIE9sZGVyIHVzZXJzcGFjZSwgb3IgdXNlcnNwYWNlIHdhbnRpbmcgdG8gYmUgY29tcGF0aWJsZSB3aXRoXFxuIFxcdFxcdCAqICFOTDgwMjExX0ZFQVRVUkVfRlVMTF9BUF9DTElFTlRfU1RBVEUsIHdpbGwgbm90IHNldCB0aGUgYXV0aFxcbiBcXHRcXHQgKiBhbmQgYXNzb2MgZmxhZ3MgaW4gdGhlIG1hc2ssIGJ1dCBhc3N1bWVzIHRoZSBzdGF0aW9uIHdpbGwgYmVcXG5AQCAtMTMzMDcsNiArMTMzNjMsMTMgQEAgc3RhdGljIGludCBubDgwMjExX2Fzc29jaWF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiBcXHRcXHRyZXEuZmxhZ3MgfD0gQVNTT0NfUkVRX1NQUF9BTVNEVTtcXG4gXFx0fVxcbiBcXG4rXFx0aWYgKG5sYV9nZXRfZmxhZyhpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfQVNTT0NfQ0lQXSkpIHtcXG4rXFx0XFx0aWYgKCFjZmc4MDIxMV9jaWd0a19zdXBwb3J0ZWQoZGV2LVxcdTAwM2VpZWVlODAyMTFfcHRyLCBpbmZvKSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRcXHRyZXEuZmxhZ3MgfD0gQVNTT0NfUkVRX0NJUDtcXG4rXFx0fVxcbitcXG4gXFx0cmVxLmxpbmtfaWQgPSBubDgwMjExX2xpbmtfaWRfb3JfaW52YWxpZChpbmZvLVxcdTAwM2VhdHRycyk7XFxuIFxcbiBcXHRpZiAoaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX01MT19MSU5LU10pIHtcXG5AQCAtMTkxNzQsNiArMTkyMzcsMjMgQEAgbmw4MDIxMV9hZGRfbW9kX2xpbmtfc3RhdGlvbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxcbiBcXHRcXHRwYXJhbXMuaGVfNmdoel9jYXBhID1cXG4gXFx0XFx0XFx0bmxhX2RhdGEoaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0hFXzZHSFpfQ0FQQUJJTElUWV0pO1xcbiBcXG4rXFx0aWYgKGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9DSVBfQ0FQQUJJTElUSUVTXSkge1xcbitcXHRcXHRzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LVxcdTAwM2VpZWVlODAyMTFfcHRyO1xcbitcXG4rXFx0XFx0aWYgKCFjZmc4MDIxMV9jaWd0a19zdXBwb3J0ZWQod2RldiwgaW5mbykpXFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0XFx0cGFyYW1zLmNpcF9jYXBfc2V0ID0gdHJ1ZTtcXG4rXFx0XFx0cGFyYW1zLmNpcF9jYXAgPVxcbitcXHRcXHRcXHRubGFfZ2V0X3U4KGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9DSVBfQ0FQQUJJTElUSUVTXSk7XFxuK1xcbitcXHRcXHQvKiBPbmx5IHBlcm1pdCBDSVAgY2FwYWJpbGl0aWVzIHdoZW4gYWRkaW5nIGxpbmsgc3RhdGlvbnMgKi9cXG4rXFx0XFx0aWYgKCFhZGQpIHtcXG4rXFx0XFx0XFx0R0VOTF9TRVRfRVJSX01TRyhpbmZvLCBcXFwiQ2Fubm90IG1vZGlmeSBDSVAgY2FwYWJpbGl0aWVzXFxcIik7XFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuIFxcdGlmIChpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfT1BNT0RFX05PVElGXSkge1xcbiBcXHRcXHRwYXJhbXMub3Btb2RlX25vdGlmX3VzZWQgPSB0cnVlO1xcbiBcXHRcXHRwYXJhbXMub3Btb2RlX25vdGlmID1cXG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3JkZXYtb3BzLmggYi9uZXQvd2lyZWxlc3MvcmRldi1vcHMuaFxcbmluZGV4IDZjM2JhZDhiMmQ2ZjYuLmQ0OTMzYmJiZjBlN2UgMTAwNjQ0XFxuLS0tIGEvbmV0L3dpcmVsZXNzL3JkZXYtb3BzLmhcXG4rKysgYi9uZXQvd2lyZWxlc3MvcmRldi1vcHMuaFxcbkBAIC03OCw0MiArNzgsNDMgQEAgcmRldl9jaGFuZ2VfdmlydHVhbF9pbnRmKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG4gXFxuIHN0YXRpYyBpbmxpbmUgaW50IHJkZXZfYWRkX2tleShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxuIFxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LCBpbnQgbGlua19pZCxcXG4tXFx0XFx0XFx0ICAgICAgIHU4IGtleV9pbmRleCwgYm9vbCBwYWlyd2lzZSwgY29uc3QgdTggKm1hY19hZGRyLFxcbi1cXHRcXHRcXHQgICAgICAgc3RydWN0IGtleV9wYXJhbXMgKnBhcmFtcylcXG4rXFx0XFx0XFx0ICAgICAgIHU4IGtleV9pbmRleCwgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsXFxuK1xcdFxcdFxcdCAgICAgICBjb25zdCB1OCAqbWFjX2FkZHIsIHN0cnVjdCBrZXlfcGFyYW1zICpwYXJhbXMpXFxuIHtcXG4gXFx0aW50IHJldDtcXG4tXFx0dHJhY2VfcmRldl9hZGRfa2V5KFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeSwgd2RldiwgbGlua19pZCwga2V5X2luZGV4LCBwYWlyd2lzZSxcXG4rXFx0dHJhY2VfcmRldl9hZGRfa2V5KFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeSwgd2RldiwgbGlua19pZCwga2V5X2luZGV4LCB0eXBlLFxcbiBcXHRcXHRcXHQgICBtYWNfYWRkciwgcGFyYW1zLVxcdTAwM2Vtb2RlKTtcXG4gXFx0cmV0ID0gcmRldi1cXHUwMDNlb3BzLVxcdTAwM2VhZGRfa2V5KFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeSwgd2RldiwgbGlua19pZCwga2V5X2luZGV4LFxcbi1cXHRcXHRcXHRcXHQgIHBhaXJ3aXNlLCBtYWNfYWRkciwgcGFyYW1zKTtcXG4rXFx0XFx0XFx0XFx0ICB0eXBlLCBtYWNfYWRkciwgcGFyYW1zKTtcXG4gXFx0dHJhY2VfcmRldl9yZXR1cm5faW50KFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeSwgcmV0KTtcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4gc3RhdGljIGlubGluZSBpbnRcXG4gcmRldl9nZXRfa2V5KHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcXG4tXFx0ICAgICBpbnQgbGlua19pZCwgdTgga2V5X2luZGV4LCBib29sIHBhaXJ3aXNlLCBjb25zdCB1OCAqbWFjX2FkZHIsXFxuLVxcdCAgICAgdm9pZCAqY29va2llLFxcbitcXHQgICAgIGludCBsaW5rX2lkLCB1OCBrZXlfaW5kZXgsIGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLFxcbitcXHQgICAgIGNvbnN0IHU4ICptYWNfYWRkciwgdm9pZCAqY29va2llLFxcbiBcXHQgICAgIHZvaWQgKCpjYWxsYmFjaykodm9pZCAqY29va2llLCBzdHJ1Y3Qga2V5X3BhcmFtcyopKVxcbiB7XFxuIFxcdGludCByZXQ7XFxuLVxcdHRyYWNlX3JkZXZfZ2V0X2tleShcXHUwMDI2cmRldi1cXHUwMDNld2lwaHksIHdkZXYsIGxpbmtfaWQsIGtleV9pbmRleCwgcGFpcndpc2UsXFxuK1xcdHRyYWNlX3JkZXZfZ2V0X2tleShcXHUwMDI2cmRldi1cXHUwMDNld2lwaHksIHdkZXYsIGxpbmtfaWQsIGtleV9pbmRleCwgdHlwZSxcXG4gXFx0XFx0XFx0ICAgbWFjX2FkZHIpO1xcbiBcXHRyZXQgPSByZGV2LVxcdTAwM2VvcHMtXFx1MDAzZWdldF9rZXkoXFx1MDAyNnJkZXYtXFx1MDAzZXdpcGh5LCB3ZGV2LCBsaW5rX2lkLCBrZXlfaW5kZXgsXFxuLVxcdFxcdFxcdFxcdCAgcGFpcndpc2UsIG1hY19hZGRyLCBjb29raWUsIGNhbGxiYWNrKTtcXG4rXFx0XFx0XFx0XFx0IHR5cGUsIG1hY19hZGRyLCBjb29raWUsIGNhbGxiYWNrKTtcXG4gXFx0dHJhY2VfcmRldl9yZXR1cm5faW50KFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeSwgcmV0KTtcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4gc3RhdGljIGlubGluZSBpbnQgcmRldl9kZWxfa2V5KHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG4gXFx0XFx0XFx0ICAgICAgIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsIGludCBsaW5rX2lkLFxcbi1cXHRcXHRcXHQgICAgICAgdTgga2V5X2luZGV4LCBib29sIHBhaXJ3aXNlLCBjb25zdCB1OCAqbWFjX2FkZHIpXFxuK1xcdFxcdFxcdCAgICAgICB1OCBrZXlfaW5kZXgsIGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLFxcbitcXHRcXHRcXHQgICAgICAgY29uc3QgdTggKm1hY19hZGRyKVxcbiB7XFxuIFxcdGludCByZXQ7XFxuLVxcdHRyYWNlX3JkZXZfZGVsX2tleShcXHUwMDI2cmRldi1cXHUwMDNld2lwaHksIHdkZXYsIGxpbmtfaWQsIGtleV9pbmRleCwgcGFpcndpc2UsXFxuK1xcdHRyYWNlX3JkZXZfZGVsX2tleShcXHUwMDI2cmRldi1cXHUwMDNld2lwaHksIHdkZXYsIGxpbmtfaWQsIGtleV9pbmRleCwgdHlwZSxcXG4gXFx0XFx0XFx0ICAgbWFjX2FkZHIpO1xcbiBcXHRyZXQgPSByZGV2LVxcdTAwM2VvcHMtXFx1MDAzZWRlbF9rZXkoXFx1MDAyNnJkZXYtXFx1MDAzZXdpcGh5LCB3ZGV2LCBsaW5rX2lkLCBrZXlfaW5kZXgsXFxuLVxcdFxcdFxcdFxcdCAgcGFpcndpc2UsIG1hY19hZGRyKTtcXG4rXFx0XFx0XFx0XFx0ICB0eXBlLCBtYWNfYWRkcik7XFxuIFxcdHRyYWNlX3JkZXZfcmV0dXJuX2ludChcXHUwMDI2cmRldi1cXHUwMDNld2lwaHksIHJldCk7XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3NtZS5jIGIvbmV0L3dpcmVsZXNzL3NtZS5jXFxuaW5kZXggMmE3MTliNWM0ODdlMy4uNDU4ZjcyZDgzNTFhYiAxMDA2NDRcXG4tLS0gYS9uZXQvd2lyZWxlc3Mvc21lLmNcXG4rKysgYi9uZXQvd2lyZWxlc3Mvc21lLmNcXG5AQCAtMTM4Nyw3ICsxMzg3LDE1IEBAIHZvaWQgX19jZmc4MDIxMV9kaXNjb25uZWN0ZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmllLFxcbiBcXHRcXHRcXHQgICAgTkw4MDIxMV9FWFRfRkVBVFVSRV9CRUFDT05fUFJPVEVDVElPTl9DTElFTlQpKVxcbiBcXHRcXHRcXHRtYXhfa2V5X2lkeCA9IDc7XFxuIFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYz0gbWF4X2tleV9pZHg7IGkrKylcXG4tXFx0XFx0XFx0cmRldl9kZWxfa2V5KHJkZXYsIHdkZXYsIC0xLCBpLCBmYWxzZSwgTlVMTCk7XFxuK1xcdFxcdFxcdHJkZXZfZGVsX2tleShyZGV2LCB3ZGV2LCAtMSwgaSwgTkw4MDIxMV9LRVlUWVBFX0dST1VQLFxcbitcXHRcXHRcXHRcXHQgICAgIE5VTEwpO1xcbitcXG4rXFx0XFx0aWYgKGNmZzgwMjExX2NpZ3RrX3N1cHBvcnRlZCh3ZGV2LCBOVUxMKSkge1xcbitcXHRcXHRcXHRyZGV2X2RlbF9rZXkocmRldiwgd2RldiwgLTEsIDAsIE5MODAyMTFfS0VZVFlQRV9DSUdUSyxcXG4rXFx0XFx0XFx0XFx0ICAgICBOVUxMKTtcXG4rXFx0XFx0XFx0cmRldl9kZWxfa2V5KHJkZXYsIHdkZXYsIC0xLCAxLCBOTDgwMjExX0tFWVRZUEVfQ0lHVEssXFxuK1xcdFxcdFxcdFxcdCAgICAgTlVMTCk7XFxuK1xcdFxcdH1cXG4gXFx0fVxcbiBcXG4gXFx0cmRldl9zZXRfcW9zX21hcChyZGV2LCBkZXYsIE5VTEwpO1xcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvdHJhY2UuaCBiL25ldC93aXJlbGVzcy90cmFjZS5oXFxuaW5kZXggOGMyYTkxYjg1YzM5Ni4uYzIxMGNhMWU0NGUyYiAxMDA2NDRcXG4tLS0gYS9uZXQvd2lyZWxlc3MvdHJhY2UuaFxcbisrKyBiL25ldC93aXJlbGVzcy90cmFjZS5oXFxuQEAgLTU1NywxNSArNTU3LDE1IEBAIFRSQUNFX0VWRU5UKHJkZXZfY2hhbmdlX3ZpcnR1YWxfaW50ZixcXG4gXFxuIERFQ0xBUkVfRVZFTlRfQ0xBU1Moa2V5X2hhbmRsZSxcXG4gXFx0VFBfUFJPVE8oc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwgaW50IGxpbmtfaWQsXFxuLVxcdFxcdCB1OCBrZXlfaW5kZXgsIGJvb2wgcGFpcndpc2UsIGNvbnN0IHU4ICptYWNfYWRkciksXFxuLVxcdFRQX0FSR1Mod2lwaHksIHdkZXYsIGxpbmtfaWQsIGtleV9pbmRleCwgcGFpcndpc2UsIG1hY19hZGRyKSxcXG4rXFx0XFx0IHU4IGtleV9pbmRleCwgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsIGNvbnN0IHU4ICptYWNfYWRkciksXFxuK1xcdFRQX0FSR1Mod2lwaHksIHdkZXYsIGxpbmtfaWQsIGtleV9pbmRleCwgdHlwZSwgbWFjX2FkZHIpLFxcbiBcXHRUUF9TVFJVQ1RfX2VudHJ5KFxcbiBcXHRcXHRXSVBIWV9FTlRSWVxcbiBcXHRcXHRXREVWX0VOVFJZXFxuIFxcdFxcdE1BQ19FTlRSWShtYWNfYWRkcilcXG4gXFx0XFx0X19maWVsZChpbnQsIGxpbmtfaWQpXFxuIFxcdFxcdF9fZmllbGQodTgsIGtleV9pbmRleClcXG4tXFx0XFx0X19maWVsZChib29sLCBwYWlyd2lzZSlcXG4rXFx0XFx0X19maWVsZCh1OCwgdHlwZSlcXG4gXFx0KSxcXG4gXFx0VFBfZmFzdF9hc3NpZ24oXFxuIFxcdFxcdFdJUEhZX0FTU0lHTjtcXG5AQCAtNTczLDM4ICs1NzMsNDAgQEAgREVDTEFSRV9FVkVOVF9DTEFTUyhrZXlfaGFuZGxlLFxcbiBcXHRcXHRNQUNfQVNTSUdOKG1hY19hZGRyLCBtYWNfYWRkcik7XFxuIFxcdFxcdF9fZW50cnktXFx1MDAzZWxpbmtfaWQgPSBsaW5rX2lkO1xcbiBcXHRcXHRfX2VudHJ5LVxcdTAwM2VrZXlfaW5kZXggPSBrZXlfaW5kZXg7XFxuLVxcdFxcdF9fZW50cnktXFx1MDAzZXBhaXJ3aXNlID0gcGFpcndpc2U7XFxuK1xcdFxcdF9fZW50cnktXFx1MDAzZXR5cGUgPSB0eXBlO1xcbiBcXHQpLFxcbiBcXHRUUF9wcmludGsoV0lQSFlfUFJfRk1UIFxcXCIsIFxcXCIgV0RFVl9QUl9GTVQgXFxcIiwgbGlua19pZDogJWQsIFxcXCJcXG4tXFx0XFx0ICBcXFwia2V5X2luZGV4OiAldSwgcGFpcndpc2U6ICVzLCBtYWMgYWRkcjogJXBNXFxcIixcXG4rXFx0XFx0ICBcXFwia2V5X2luZGV4OiAldSwgcGFpcndpc2U6ICVzLCB0eXBlOiAlZCwgbWFjIGFkZHI6ICVwTVxcXCIsXFxuIFxcdFxcdCAgV0lQSFlfUFJfQVJHLCBXREVWX1BSX0FSRywgX19lbnRyeS1cXHUwMDNlbGlua19pZCxcXG4tXFx0XFx0ICBfX2VudHJ5LVxcdTAwM2VrZXlfaW5kZXgsIEJPT0xfVE9fU1RSKF9fZW50cnktXFx1MDAzZXBhaXJ3aXNlKSxcXG4tXFx0XFx0ICBfX2VudHJ5LVxcdTAwM2VtYWNfYWRkcilcXG4rXFx0XFx0ICBfX2VudHJ5LVxcdTAwM2VrZXlfaW5kZXgsXFxuK1xcdFxcdCAgQk9PTF9UT19TVFIoX19lbnRyeS1cXHUwMDNldHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0UpLFxcbitcXHRcXHQgIF9fZW50cnktXFx1MDAzZXR5cGUsIF9fZW50cnktXFx1MDAzZW1hY19hZGRyKVxcbiApO1xcbiBcXG4gREVGSU5FX0VWRU5UKGtleV9oYW5kbGUsIHJkZXZfZ2V0X2tleSxcXG4gXFx0VFBfUFJPVE8oc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwgaW50IGxpbmtfaWQsXFxuLVxcdFxcdCB1OCBrZXlfaW5kZXgsIGJvb2wgcGFpcndpc2UsIGNvbnN0IHU4ICptYWNfYWRkciksXFxuLVxcdFRQX0FSR1Mod2lwaHksIHdkZXYsIGxpbmtfaWQsIGtleV9pbmRleCwgcGFpcndpc2UsIG1hY19hZGRyKVxcbitcXHRcXHQgdTgga2V5X2luZGV4LCBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSwgY29uc3QgdTggKm1hY19hZGRyKSxcXG4rXFx0VFBfQVJHUyh3aXBoeSwgd2RldiwgbGlua19pZCwga2V5X2luZGV4LCB0eXBlLCBtYWNfYWRkcilcXG4gKTtcXG4gXFxuIERFRklORV9FVkVOVChrZXlfaGFuZGxlLCByZGV2X2RlbF9rZXksXFxuIFxcdFRQX1BST1RPKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsIGludCBsaW5rX2lkLFxcbi1cXHRcXHQgdTgga2V5X2luZGV4LCBib29sIHBhaXJ3aXNlLCBjb25zdCB1OCAqbWFjX2FkZHIpLFxcbi1cXHRUUF9BUkdTKHdpcGh5LCB3ZGV2LCBsaW5rX2lkLCBrZXlfaW5kZXgsIHBhaXJ3aXNlLCBtYWNfYWRkcilcXG4rXFx0XFx0IHU4IGtleV9pbmRleCwgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsIGNvbnN0IHU4ICptYWNfYWRkciksXFxuK1xcdFRQX0FSR1Mod2lwaHksIHdkZXYsIGxpbmtfaWQsIGtleV9pbmRleCwgdHlwZSwgbWFjX2FkZHIpXFxuICk7XFxuIFxcbiBUUkFDRV9FVkVOVChyZGV2X2FkZF9rZXksXFxuIFxcdFRQX1BST1RPKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsIGludCBsaW5rX2lkLFxcbi1cXHRcXHQgdTgga2V5X2luZGV4LCBib29sIHBhaXJ3aXNlLCBjb25zdCB1OCAqbWFjX2FkZHIsIHU4IG1vZGUpLFxcbi1cXHRUUF9BUkdTKHdpcGh5LCB3ZGV2LCBsaW5rX2lkLCBrZXlfaW5kZXgsIHBhaXJ3aXNlLCBtYWNfYWRkciwgbW9kZSksXFxuK1xcdFxcdCB1OCBrZXlfaW5kZXgsIGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLCBjb25zdCB1OCAqbWFjX2FkZHIsXFxuK1xcdFxcdCB1OCBtb2RlKSxcXG4rXFx0VFBfQVJHUyh3aXBoeSwgd2RldiwgbGlua19pZCwga2V5X2luZGV4LCB0eXBlLCBtYWNfYWRkciwgbW9kZSksXFxuIFxcdFRQX1NUUlVDVF9fZW50cnkoXFxuIFxcdFxcdFdJUEhZX0VOVFJZXFxuIFxcdFxcdFdERVZfRU5UUllcXG4gXFx0XFx0TUFDX0VOVFJZKG1hY19hZGRyKVxcbiBcXHRcXHRfX2ZpZWxkKGludCwgbGlua19pZClcXG4gXFx0XFx0X19maWVsZCh1OCwga2V5X2luZGV4KVxcbi1cXHRcXHRfX2ZpZWxkKGJvb2wsIHBhaXJ3aXNlKVxcbitcXHRcXHRfX2ZpZWxkKHU4LCB0eXBlKVxcbiBcXHRcXHRfX2ZpZWxkKHU4LCBtb2RlKVxcbiBcXHQpLFxcbiBcXHRUUF9mYXN0X2Fzc2lnbihcXG5AQCAtNjEzLDE1ICs2MTUsMTYgQEAgVFJBQ0VfRVZFTlQocmRldl9hZGRfa2V5LFxcbiBcXHRcXHRNQUNfQVNTSUdOKG1hY19hZGRyLCBtYWNfYWRkcik7XFxuIFxcdFxcdF9fZW50cnktXFx1MDAzZWxpbmtfaWQgPSBsaW5rX2lkO1xcbiBcXHRcXHRfX2VudHJ5LVxcdTAwM2VrZXlfaW5kZXggPSBrZXlfaW5kZXg7XFxuLVxcdFxcdF9fZW50cnktXFx1MDAzZXBhaXJ3aXNlID0gcGFpcndpc2U7XFxuK1xcdFxcdF9fZW50cnktXFx1MDAzZXR5cGUgPSB0eXBlO1xcbiBcXHRcXHRfX2VudHJ5LVxcdTAwM2Vtb2RlID0gbW9kZTtcXG4gXFx0KSxcXG4gXFx0VFBfcHJpbnRrKFdJUEhZX1BSX0ZNVCBcXFwiLCBcXFwiIFdERVZfUFJfRk1UIFxcXCIsIGxpbmtfaWQ6ICVkLCBcXFwiXFxuLVxcdFxcdCAgXFxcImtleV9pbmRleDogJXUsIG1vZGU6ICV1LCBwYWlyd2lzZTogJXMsIFxcXCJcXG4rXFx0XFx0ICBcXFwia2V5X2luZGV4OiAldSwgbW9kZTogJXUsIHBhaXJ3aXNlOiAlcywgdHlwZTogJWQsIFxcXCJcXG4gXFx0XFx0ICBcXFwibWFjIGFkZHI6ICVwTVxcXCIsXFxuIFxcdFxcdCAgV0lQSFlfUFJfQVJHLCBXREVWX1BSX0FSRywgX19lbnRyeS1cXHUwMDNlbGlua19pZCxcXG4gXFx0XFx0ICBfX2VudHJ5LVxcdTAwM2VrZXlfaW5kZXgsIF9fZW50cnktXFx1MDAzZW1vZGUsXFxuLVxcdFxcdCAgQk9PTF9UT19TVFIoX19lbnRyeS1cXHUwMDNlcGFpcndpc2UpLCBfX2VudHJ5LVxcdTAwM2VtYWNfYWRkcilcXG4rXFx0XFx0ICBCT09MX1RPX1NUUihfX2VudHJ5LVxcdTAwM2V0eXBlID09IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRSksXFxuK1xcdFxcdCAgX19lbnRyeS1cXHUwMDNldHlwZSwgX19lbnRyeS1cXHUwMDNlbWFjX2FkZHIpXFxuICk7XFxuIFxcbiBUUkFDRV9FVkVOVChyZGV2X3NldF9kZWZhdWx0X2tleSxcXG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3V0aWwuYyBiL25ldC93aXJlbGVzcy91dGlsLmNcXG5pbmRleCAzZTU4NGQwY2EzZTI2Li5kZDE2NmMzNTI5MTBmIDEwMDY0NFxcbi0tLSBhL25ldC93aXJlbGVzcy91dGlsLmNcXG4rKysgYi9uZXQvd2lyZWxlc3MvdXRpbC5jXFxuQEAgLTI1OCw4ICsyNTgsMjQgQEAgc3RhdGljIGJvb2wgY2ZnODAyMTFfaWd0a19jaXBoZXJfc3VwcG9ydGVkKHN0cnVjdCB3aXBoeSAqd2lwaHkpXFxuIFxcdHJldHVybiBmYWxzZTtcXG4gfVxcbiBcXG4rYm9vbCBjZmc4MDIxMV9jaWd0a19zdXBwb3J0ZWQoc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcXG4rXFx0XFx0XFx0ICAgICAgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3Qgd2lwaHlfaWZ0eXBlX2V4dF9jYXBhYiAqZXh0X2NhcGFiID1cXG4rXFx0XFx0Y2ZnODAyMTFfZ2V0X2lmdHlwZV9leHRfY2FwYSh3ZGV2LVxcdTAwM2V3aXBoeSwgd2Rldi1cXHUwMDNlaWZ0eXBlKTtcXG4rXFxuK1xcdGlmIChleHRfY2FwYWIgXFx1MDAyNlxcdTAwMjYgZXh0X2NhcGFiLVxcdTAwM2VjaXBfc3VwcG9ydGVkKVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFxuK1xcdGlmIChpbmZvKVxcbitcXHRcXHRHRU5MX1NFVF9FUlJfTVNHKGluZm8sXFxuK1xcdFxcdFxcdFxcdCBcXFwiQ29udHJvbCBJbnRlZ3JpdHkgUHJvdG9jb2wgbm90IHN1cHBvcnRlZFxcXCIpO1xcbitcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbiBib29sIGNmZzgwMjExX3ZhbGlkX2tleV9pZHgoc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcXG4tXFx0XFx0XFx0ICAgIGludCBrZXlfaWR4LCBib29sIHBhaXJ3aXNlLFxcbitcXHRcXHRcXHQgICAgaW50IGtleV9pZHgsIGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLFxcbiBcXHRcXHRcXHQgICAgY29uc3QgdTggKm1hY19hZGRyKVxcbiB7XFxuIFxcdGlmIChXQVJOX09OKCF3ZGV2KSlcXG5AQCAtMjcyLDEzICsyODgsMjQgQEAgYm9vbCBjZmc4MDIxMV92YWxpZF9rZXlfaWR4KHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxuIFxcdCAqIENhbid0IGRpZmZlcmVudGlhdGUgY2lwaGVycyBoZXJlIHNvIGFsbG93IDAuLjMuXFxuIFxcdCAqIFBhaXJ3aXNlIGtleXMgbXVzdCBiZSBmb3IgYSBzdGF0aW9uIChNQUMgYWRkcmVzcyBnaXZlbikuXFxuIFxcdCAqL1xcbi1cXHRpZiAocGFpcndpc2UpIHtcXG4rXFx0aWYgKHR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFKSB7XFxuIFxcdFxcdGlmICghbWFjX2FkZHIpXFxuIFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuIFxcdFxcdHJldHVybiBrZXlfaWR4IFxcdTAwM2MgNDtcXG4gXFx0fVxcbiBcXG4rXFx0LyogQ2hlY2sgdGhlIHdkZXYvaWZ0eXBlIHN1cHBvcnRzIENJR1RLICovXFxuK1xcdGlmICh0eXBlID09IE5MODAyMTFfS0VZVFlQRV9DSUdUSykge1xcbitcXHRcXHRpZiAoIWNmZzgwMjExX2NpZ3RrX3N1cHBvcnRlZCh3ZGV2LCBOVUxMKSlcXG4rXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0XFx0aWYgKGtleV9pZHggXFx1MDAzZT0gMilcXG4rXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0XFx0LyogZmFsbHRocm91Z2ggZm9yIG1hY19hZGRyIGNoZWNrcyAqL1xcbitcXHR9XFxuK1xcbiBcXHQvKlxcbiBcXHQgKiBGb3IgZ3JvdXAga2V5cywgbWFjX2FkZHI9PU5VTEwgbWVhbnMgc2V0dGluZyBhIGdyb3VwIGtleVxcbiBcXHQgKiBmb3IgVFgsIHdoaWNoIGlzIG9ubHkgc3VwcG9ydGVkIG9uIHNvbWUgaW50ZXJmYWNlIHR5cGVzLFxcbkBAIC0zNDMsOSArMzcwLDEyIEBAIGJvb2wgY2ZnODAyMTFfdmFsaWRfa2V5X2lkeChzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxcbiBpbnQgY2ZnODAyMTFfdmFsaWRhdGVfa2V5X3NldHRpbmdzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG4gXFx0XFx0XFx0XFx0ICAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcXG4gXFx0XFx0XFx0XFx0ICAgc3RydWN0IGtleV9wYXJhbXMgKnBhcmFtcywgaW50IGtleV9pZHgsXFxuLVxcdFxcdFxcdFxcdCAgIGJvb2wgcGFpcndpc2UsIGNvbnN0IHU4ICptYWNfYWRkcilcXG4rXFx0XFx0XFx0XFx0ICAgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsXFxuK1xcdFxcdFxcdFxcdCAgIGNvbnN0IHU4ICptYWNfYWRkcilcXG4ge1xcbi1cXHRpZiAoIWNmZzgwMjExX3ZhbGlkX2tleV9pZHgod2Rldiwga2V5X2lkeCwgcGFpcndpc2UsIG1hY19hZGRyKSlcXG4rXFx0Ym9vbCBwYWlyd2lzZSA9IHR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFO1xcbitcXG4rXFx0aWYgKCFjZmc4MDIxMV92YWxpZF9rZXlfaWR4KHdkZXYsIGtleV9pZHgsIHR5cGUsIG1hY19hZGRyKSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbiBcXHRzd2l0Y2ggKHBhcmFtcy1cXHUwMDNlY2lwaGVyKSB7XFxuQEAgLTExNzIsNyArMTIwMiw3IEBAIHZvaWQgY2ZnODAyMTFfdXBsb2FkX2Nvbm5lY3Rfa2V5cyhzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2KVxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgNDsgaSsrKSB7XFxuIFxcdFxcdGlmICghd2Rldi1cXHUwMDNlY29ubmVjdF9rZXlzLVxcdTAwM2VwYXJhbXNbaV0uY2lwaGVyKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0aWYgKHJkZXZfYWRkX2tleShyZGV2LCB3ZGV2LCAtMSwgaSwgZmFsc2UsIE5VTEwsXFxuK1xcdFxcdGlmIChyZGV2X2FkZF9rZXkocmRldiwgd2RldiwgLTEsIGksIE5MODAyMTFfS0VZVFlQRV9HUk9VUCwgTlVMTCxcXG4gXFx0XFx0XFx0XFx0IFxcdTAwMjZ3ZGV2LVxcdTAwM2Vjb25uZWN0X2tleXMtXFx1MDAzZXBhcmFtc1tpXSkpIHtcXG4gXFx0XFx0XFx0bmV0ZGV2X2VycihkZXYsIFxcXCJmYWlsZWQgdG8gc2V0IGtleSAlZFxcXFxuXFxcIiwgaSk7XFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvd2V4dC1jb21wYXQuYyBiL25ldC93aXJlbGVzcy93ZXh0LWNvbXBhdC5jXFxuaW5kZXggZDQ1YmMwOGMwZGU0OS4uZWMyMzg5ZjZiOGIxOCAxMDA2NDRcXG4tLS0gYS9uZXQvd2lyZWxlc3Mvd2V4dC1jb21wYXQuY1xcbisrKyBiL25ldC93aXJlbGVzcy93ZXh0LWNvbXBhdC5jXFxuQEAgLTQwMSw2ICs0MDEsOCBAQCBzdGF0aWMgaW50IGNmZzgwMjExX3NldF9lbmNyeXB0aW9uKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG4gXFx0XFx0XFx0XFx0ICAgaW50IGlkeCwgc3RydWN0IGtleV9wYXJhbXMgKnBhcmFtcylcXG4ge1xcbiBcXHRzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LVxcdTAwM2VpZWVlODAyMTFfcHRyO1xcbitcXHRlbnVtIG5sODAyMTFfa2V5X3R5cGUga2V5X3R5cGUgPVxcbitcXHRcXHRwYWlyd2lzZSA/IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRSA6IE5MODAyMTFfS0VZVFlQRV9HUk9VUDtcXG4gXFx0aW50IGVyciwgaTtcXG4gXFx0Ym9vbCByZWpvaW4gPSBmYWxzZTtcXG4gXFxuQEAgLTQ1NCwxMSArNDU2LDExIEBAIHN0YXRpYyBpbnQgY2ZnODAyMTFfc2V0X2VuY3J5cHRpb24oc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbiBcXHRcXHRcXHRcXHRyZWpvaW4gPSB0cnVlO1xcbiBcXHRcXHRcXHR9XFxuIFxcbi1cXHRcXHRcXHRpZiAoIWNmZzgwMjExX3ZhbGlkX2tleV9pZHgod2RldiwgaWR4LCBwYWlyd2lzZSwgYWRkcikpXFxuK1xcdFxcdFxcdGlmICghY2ZnODAyMTFfdmFsaWRfa2V5X2lkeCh3ZGV2LCBpZHgsIGtleV90eXBlLCBhZGRyKSlcXG4gXFx0XFx0XFx0XFx0ZXJyID0gLUVOT0VOVDtcXG4gXFx0XFx0XFx0ZWxzZVxcbi1cXHRcXHRcXHRcXHRlcnIgPSByZGV2X2RlbF9rZXkocmRldiwgd2RldiwgLTEsIGlkeCwgcGFpcndpc2UsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgIGFkZHIpO1xcbitcXHRcXHRcXHRcXHRlcnIgPSByZGV2X2RlbF9rZXkocmRldiwgd2RldiwgLTEsIGlkeCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAga2V5X3R5cGUsIGFkZHIpO1xcbiBcXHRcXHR9XFxuIFxcdFxcdHdkZXYtXFx1MDAzZXdleHQuY29ubmVjdC5wcml2YWN5ID0gZmFsc2U7XFxuIFxcdFxcdC8qXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIwOjAyOjI2LjY5NzU1Mjg0MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjI1MzM5MzI2ODQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1BQzgwMjExXCIsXG4gICAgXCJDRkc4MDIxMVwiLFxuICAgIFwiTUFDODAyMTFfSFdTSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJubDgwMjExX25ld19rZXlcIixcbiAgICBcIm5sODAyMTFfZGVsX2tleVwiLFxuICAgIFwibmw4MDIxMV9nZXRfa2V5XCIsXG4gICAgXCJubDgwMjExX3NldF9zdGF0aW9uXCIsXG4gICAgXCJubDgwMjExX25ld19zdGF0aW9uXCIsXG4gICAgXCJubDgwMjExX2Fzc29jaWF0ZVwiLFxuICAgIFwiaWVlZTgwMjExX2tleV9saW5rXCIsXG4gICAgXCJpZWVlODAyMTFfZ3RrX3Jla2V5X2FkZFwiLFxuICAgIFwiaWVlZTgwMjExX3B1dF9jaXBfY2FwXCIsXG4gICAgXCJjZmc4MDIxMV9jaWd0a19zdXBwb3J0ZWRcIixcbiAgICBcImNmZzgwMjExX3ZhbGlkX2tleV9pZHhcIixcbiAgICBcImNmZzgwMjExX3ZhbGlkYXRlX2tleV9zZXR0aW5nc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgdGhlIENvbnRyb2wgSW50ZWdyaXR5IFByb3RvY29sIChDSVApIGluIGNmZzgwMjExIGFuZCBtYWM4MDIxMSwgaW5jbHVkaW5nIGEgbmV3IGtleSB0eXBlIGBOTDgwMjExX0tFWVRZUEVfQ0lHVEtgIGFuZCBuZXcgbmV0bGluayBhdHRyaWJ1dGVzLiBJdCBtb2RpZmllcyBrZXkgaGFuZGxpbmcgbG9naWMgYWNyb3NzIHRoZSB3aXJlbGVzcyBzdGFjayBhbmQgdXBkYXRlcyBgbWFjODAyMTFfaHdzaW1gIHRvIGFkdmVydGlzZSBDSVAgc3VwcG9ydCwgbWFraW5nIGl0IHRlc3RhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgbmw4MDIxMSBuZXRsaW5rIGNvbW1hbmRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmOWI0ZDlkMzUyYzcwMjI1MzljMzAyZGQwNTE4ZTIyNjAzNzU5ZDIwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMSAyMDowMjoyNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvY2ZnODAyMTEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvY2ZnODAyMTEuY1xuaW5kZXggZWNkZTkxMTU5YjU0Ni4uZDRlOTQyM2ZjNWU0ZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvY2ZnODAyMTEuY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jZmc4MDIxMS5jXG5AQCAtMTEyNSwxMyArMTEyNSwxNSBAQCB2b2lkIGF0aDZrbF9jZmc4MDIxMV9jaF9zd2l0Y2hfbm90aWZ5KHN0cnVjdCBhdGg2a2xfdmlmICp2aWYsIGludCBmcmVxLFxuIH1cbiBcbiBzdGF0aWMgaW50IGF0aDZrbF9jZmc4MDIxMV9hZGRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4tXHRcdFx0XHQgICBpbnQgbGlua19pZCwgdTgga2V5X2luZGV4LCBib29sIHBhaXJ3aXNlLFxuK1x0XHRcdFx0ICAgaW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCxcbitcdFx0XHRcdCAgIGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLFxuIFx0XHRcdFx0ICAgY29uc3QgdTggKm1hY19hZGRyLFxuIFx0XHRcdFx0ICAgc3RydWN0IGtleV9wYXJhbXMgKnBhcmFtcylcbiB7XG4gXHRzdHJ1Y3QgYXRoNmtsICphciA9IGF0aDZrbF9wcml2KHdkZXYtXHUwMDNlbmV0ZGV2KTtcbiBcdHN0cnVjdCBhdGg2a2xfdmlmICp2aWYgPSBuZXRkZXZfcHJpdih3ZGV2LVx1MDAzZW5ldGRldik7XG4gXHRzdHJ1Y3QgYXRoNmtsX2tleSAqa2V5ID0gTlVMTDtcbitcdGJvb2wgcGFpcndpc2UgPSB0eXBlID09IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRTtcbiBcdGludCBzZXFfbGVuO1xuIFx0dTgga2V5X3VzYWdlO1xuIFx0dTgga2V5X3R5cGU7XG5AQCAtMTI1MCw3ICsxMjUyLDggQEAgc3RhdGljIGludCBhdGg2a2xfY2ZnODAyMTFfYWRkX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGVcbiB9XG4gXG4gc3RhdGljIGludCBhdGg2a2xfY2ZnODAyMTFfZGVsX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuLVx0XHRcdFx0ICAgaW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCwgYm9vbCBwYWlyd2lzZSxcbitcdFx0XHRcdCAgIGludCBsaW5rX2lkLCB1OCBrZXlfaW5kZXgsXG4rXHRcdFx0XHQgICBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSxcbiBcdFx0XHRcdCAgIGNvbnN0IHU4ICptYWNfYWRkcilcbiB7XG4gXHRzdHJ1Y3QgYXRoNmtsICphciA9IGF0aDZrbF9wcml2KHdkZXYtXHUwMDNlbmV0ZGV2KTtcbkBAIC0xMjgwLDcgKzEyODMsOCBAQCBzdGF0aWMgaW50IGF0aDZrbF9jZmc4MDIxMV9kZWxfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZVxuIH1cbiBcbiBzdGF0aWMgaW50IGF0aDZrbF9jZmc4MDIxMV9nZXRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4tXHRcdFx0XHQgICBpbnQgbGlua19pZCwgdTgga2V5X2luZGV4LCBib29sIHBhaXJ3aXNlLFxuK1x0XHRcdFx0ICAgaW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCxcbitcdFx0XHRcdCAgIGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLFxuIFx0XHRcdFx0ICAgY29uc3QgdTggKm1hY19hZGRyLCB2b2lkICpjb29raWUsXG4gXHRcdFx0XHQgICB2b2lkICgqY2FsbGJhY2spICh2b2lkICpjb29raWUsXG4gXHRcdFx0XHRcdFx0ICAgICBzdHJ1Y3Qga2V5X3BhcmFtcyAqKSlcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvd2lsNjIxMC9jZmc4MDIxMS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3dpbDYyMTAvY2ZnODAyMTEuY1xuaW5kZXggNWYyYmQ5YTMxZmFmNi4uYzA5NzgzMWI3ZmFmMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC93aWw2MjEwL2NmZzgwMjExLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC93aWw2MjEwL2NmZzgwMjExLmNcbkBAIC0xNjIxLDExICsxNjIxLDEzIEBAIHN0YXRpYyB2b2lkIHdpbF9kZWxfcnhfa2V5KHU4IGtleV9pbmRleCwgZW51bSB3bWlfa2V5X3VzYWdlIGtleV91c2FnZSxcbiBcbiBzdGF0aWMgaW50IHdpbF9jZmc4MDIxMV9hZGRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksXG4gXHRcdFx0XHRzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LCBpbnQgbGlua19pZCxcbi1cdFx0XHRcdHU4IGtleV9pbmRleCwgYm9vbCBwYWlyd2lzZSxcbitcdFx0XHRcdHU4IGtleV9pbmRleCxcbitcdFx0XHRcdGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLFxuIFx0XHRcdFx0Y29uc3QgdTggKm1hY19hZGRyLFxuIFx0XHRcdFx0c3RydWN0IGtleV9wYXJhbXMgKnBhcmFtcylcbiB7XG4gXHRpbnQgcmM7XG4rXHRib29sIHBhaXJ3aXNlID0gdHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0U7XG4gXHRzdHJ1Y3Qgd2lsNjIxMF9wcml2ICp3aWwgPSB3aXBoeV90b193aWwod2lwaHkpO1xuIFx0c3RydWN0IHdpbDYyMTBfdmlmICp2aWYgPSB3ZGV2X3RvX3ZpZih3aWwsIHdkZXYpO1xuIFx0ZW51bSB3bWlfa2V5X3VzYWdlIGtleV91c2FnZSA9IHdpbF9kZXRlY3Rfa2V5X3VzYWdlKHdkZXYsIHBhaXJ3aXNlKTtcbkBAIC0xNjk2LDEyICsxNjk4LDE0IEBAIHN0YXRpYyBpbnQgd2lsX2NmZzgwMjExX2FkZF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSxcbiBcbiBzdGF0aWMgaW50IHdpbF9jZmc4MDIxMV9kZWxfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksXG4gXHRcdFx0XHRzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LCBpbnQgbGlua19pZCxcbi1cdFx0XHRcdHU4IGtleV9pbmRleCwgYm9vbCBwYWlyd2lzZSxcbitcdFx0XHRcdHU4IGtleV9pbmRleCxcbitcdFx0XHRcdGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLFxuIFx0XHRcdFx0Y29uc3QgdTggKm1hY19hZGRyKVxuIHtcbiBcdHN0cnVjdCB3aWw2MjEwX3ByaXYgKndpbCA9IHdpcGh5X3RvX3dpbCh3aXBoeSk7XG4gXHRzdHJ1Y3Qgd2lsNjIxMF92aWYgKnZpZiA9IHdkZXZfdG9fdmlmKHdpbCwgd2Rldik7XG4tXHRlbnVtIHdtaV9rZXlfdXNhZ2Uga2V5X3VzYWdlID0gd2lsX2RldGVjdF9rZXlfdXNhZ2Uod2RldiwgcGFpcndpc2UpO1xuK1x0ZW51bSB3bWlfa2V5X3VzYWdlIGtleV91c2FnZSA9XG4rXHRcdHdpbF9kZXRlY3Rfa2V5X3VzYWdlKHdkZXYsIHR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFKTtcbiBcdHN0cnVjdCB3aWxfc3RhX2luZm8gKmNzID0gd2lsX2ZpbmRfc3RhX2J5X2tleV91c2FnZSh3aWwsIHZpZi1cdTAwM2VtaWQsXG4gXHRcdFx0XHRcdFx0XHQgICAga2V5X3VzYWdlLFxuIFx0XHRcdFx0XHRcdFx0ICAgIG1hY19hZGRyKTtcbkBAIC0yMDcyLDcgKzIwNzYsOCBAQCB2b2lkIHdpbF9jZmc4MDIxMV9hcF9yZWNvdmVyeShzdHJ1Y3Qgd2lsNjIxMF9wcml2ICp3aWwpXG4gXHRcdGtleV9wYXJhbXMuc2VxX2xlbiA9IElFRUU4MDIxMV9HQ01QX1BOX0xFTjtcbiBcdFx0cmMgPSB3aWxfY2ZnODAyMTFfYWRkX2tleSh3aXBoeSwgdmlmX3RvX3dkZXYodmlmKSwgLTEsXG4gXHRcdFx0XHRcdCAgdmlmLVx1MDAzZWd0a19pbmRleCxcbi1cdFx0XHRcdFx0ICBmYWxzZSwgTlVMTCwgXHUwMDI2a2V5X3BhcmFtcyk7XG4rXHRcdFx0XHRcdCAgTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFLFxuK1x0XHRcdFx0XHQgIE5VTEwsIFx1MDAyNmtleV9wYXJhbXMpO1xuIFx0XHRpZiAocmMpXG4gXHRcdFx0d2lsX2Vycih3aWwsIFwidmlmICVkIHJlY292ZXJ5IGFkZCBrZXkgZmFpbGVkICglZClcXG5cIixcbiBcdFx0XHRcdGksIHJjKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jXG5pbmRleCA2YjJjMzRlM2E3OTZjLi43ODVmZDU3ZDdjNmNjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jXG5AQCAtMjc3MCw3ICsyNzcwLDggQEAgYnJjbWZfY2ZnODAyMTFfY29uZmlnX2RlZmF1bHRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuIFxuIHN0YXRpYyBzMzJcbiBicmNtZl9jZmc4MDIxMV9kZWxfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4tXHRcdCAgICAgICBpbnQgbGlua19pZCwgdTgga2V5X2lkeCwgYm9vbCBwYWlyd2lzZSxcbitcdFx0ICAgICAgIGludCBsaW5rX2lkLCB1OCBrZXlfaWR4LFxuK1x0XHQgICAgICAgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsXG4gXHRcdCAgICAgICBjb25zdCB1OCAqbWFjX2FkZHIpXG4ge1xuIFx0c3RydWN0IGJyY21mX2lmICppZnAgPSBuZXRkZXZfcHJpdih3ZGV2LVx1MDAzZW5ldGRldik7XG5AQCAtMjgwOCw3ICsyODA5LDggQEAgYnJjbWZfY2ZnODAyMTFfZGVsX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuIFxuIHN0YXRpYyBzMzJcbiBicmNtZl9jZmc4MDIxMV9hZGRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4tXHRcdCAgICAgICBpbnQgbGlua19pZCwgdTgga2V5X2lkeCwgYm9vbCBwYWlyd2lzZSxcbitcdFx0ICAgICAgIGludCBsaW5rX2lkLCB1OCBrZXlfaWR4LFxuK1x0XHQgICAgICAgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsXG4gXHRcdCAgICAgICBjb25zdCB1OCAqbWFjX2FkZHIsIHN0cnVjdCBrZXlfcGFyYW1zICpwYXJhbXMpXG4ge1xuIFx0c3RydWN0IGJyY21mX2NmZzgwMjExX2luZm8gKmNmZyA9IHdpcGh5X3RvX2NmZyh3aXBoeSk7XG5AQCAtMjgzNCw3ICsyODM2LDcgQEAgYnJjbWZfY2ZnODAyMTFfYWRkX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuIFxuIFx0aWYgKHBhcmFtcy1cdTAwM2VrZXlfbGVuID09IDApXG4gXHRcdHJldHVybiBicmNtZl9jZmc4MDIxMV9kZWxfa2V5KHdpcGh5LCB3ZGV2LCAtMSwga2V5X2lkeCxcbi1cdFx0XHRcdFx0ICAgICAgcGFpcndpc2UsIG1hY19hZGRyKTtcbitcdFx0XHRcdFx0ICAgICAgdHlwZSwgbWFjX2FkZHIpO1xuIFxuIFx0aWYgKHBhcmFtcy1cdTAwM2VrZXlfbGVuIFx1MDAzZSBzaXplb2Yoa2V5LVx1MDAzZWRhdGEpKSB7XG4gXHRcdGJwaHlfZXJyKGRydnIsIFwiVG9vIGxvbmcga2V5IGxlbmd0aCAoJXUpXFxuXCIsIHBhcmFtcy1cdTAwM2VrZXlfbGVuKTtcbkBAIC0yOTMwLDcgKzI5MzIsOCBAQCBicmNtZl9jZmc4MDIxMV9hZGRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4gXG4gc3RhdGljIHMzMlxuIGJyY21mX2NmZzgwMjExX2dldF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldixcbi1cdFx0ICAgICAgIGludCBsaW5rX2lkLCB1OCBrZXlfaWR4LCBib29sIHBhaXJ3aXNlLFxuK1x0XHQgICAgICAgaW50IGxpbmtfaWQsIHU4IGtleV9pZHgsXG4rXHRcdCAgICAgICBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSxcbiBcdFx0ICAgICAgIGNvbnN0IHU4ICptYWNfYWRkciwgdm9pZCAqY29va2llLFxuIFx0XHQgICAgICAgdm9pZCAoKmNhbGxiYWNrKSh2b2lkICpjb29raWUsXG4gXHRcdFx0XHRcdHN0cnVjdCBrZXlfcGFyYW1zICpwYXJhbXMpKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL2QzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9kMy5jXG5pbmRleCA1NWY5YjgwOWU3NjRkLi42ZDhlZGUzMzZkNTliIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvZDMuY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvZDMuY1xuQEAgLTExMzgsNyArMTEzOCw4IEBAIGl3bF9tbGRfYWRkX21jYXN0X3Jla2V5KHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXG4gXHRcdHJldHVybjtcbiBcbiBcdGtleV9jb25maWcgPSBpZWVlODAyMTFfZ3RrX3Jla2V5X2FkZCh2aWYsIGtleV9kYXRhLVx1MDAzZWlkLCBrZXlfZGF0YS1cdTAwM2VrZXksXG4tXHRcdFx0XHRcdCAgICAgc2l6ZW9mKGtleV9kYXRhLVx1MDAzZWtleSksIGxpbmtfaWQpO1xuK1x0XHRcdFx0XHQgICAgIHNpemVvZihrZXlfZGF0YS1cdTAwM2VrZXkpLCBsaW5rX2lkLFxuK1x0XHRcdFx0XHQgICAgIGZhbHNlKTtcbiBcdGlmIChJU19FUlIoa2V5X2NvbmZpZykpXG4gXHRcdHJldHVybjtcbiBcbkBAIC0xMjIwLDcgKzEyMjEsOCBAQCBzdGF0aWMgdm9pZCBpd2xfbWxkX21sb19yZWtleShzdHJ1Y3QgaXdsX21sZCAqbWxkLFxuIFx0XHRcdFx0IG1sb19rZXktXHUwMDNlaWR4LCBsaW5rX2lkKTtcbiBcbiBcdFx0a2V5ID0gaWVlZTgwMjExX2d0a19yZWtleV9hZGQodmlmLCBtbG9fa2V5LVx1MDAzZWlkeCwgbWxvX2tleS1cdTAwM2VrZXksXG4tXHRcdFx0XHRcdCAgICAgIHNpemVvZihtbG9fa2V5LVx1MDAzZWtleSksIGxpbmtfaWQpO1xuK1x0XHRcdFx0XHQgICAgICBzaXplb2YobWxvX2tleS1cdTAwM2VrZXkpLCBsaW5rX2lkLFxuK1x0XHRcdFx0XHQgICAgICBmYWxzZSk7XG4gXG4gXHRcdGlmIChJU19FUlIoa2V5KSlcbiBcdFx0XHRjb250aW51ZTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9kMy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vZDMuY1xuaW5kZXggNmIxMWZhMzJlYTVjNi4uYmQ1MmYyZWJkM2JhMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL2QzLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL2QzLmNcbkBAIC0xODg3LDcgKzE4ODcsOCBAQCBzdGF0aWMgYm9vbCBpd2xfbXZtX2d0a19yZWtleShzdHJ1Y3QgaXdsX3dvd2xhbl9zdGF0dXNfZGF0YSAqc3RhdHVzLFxuIFxuIFx0XHRrZXkgPSBpZWVlODAyMTFfZ3RrX3Jla2V5X2FkZCh2aWYsIHN0YXR1cy1cdTAwM2VndGtbaV0uaWQsXG4gXHRcdFx0XHRcdCAgICAgIHN0YXR1cy1cdTAwM2VndGtbaV0ua2V5LFxuLVx0XHRcdFx0XHQgICAgICBzaXplb2Yoc3RhdHVzLVx1MDAzZWd0a1tpXS5rZXkpLCAtMSk7XG4rXHRcdFx0XHRcdCAgICAgIHNpemVvZihzdGF0dXMtXHUwMDNlZ3RrW2ldLmtleSksIC0xLFxuK1x0XHRcdFx0XHQgICAgICBmYWxzZSk7XG4gXHRcdGlmIChJU19FUlIoa2V5KSkge1xuIFx0XHRcdC8qIEZXIG1heSBzZW5kIGFsc28gdGhlIG9sZCBrZXlzICovXG4gXHRcdFx0aWYgKFBUUl9FUlIoa2V5KSA9PSAtRUFMUkVBRFkpXG5AQCAtMTkyMiw3ICsxOTIzLDggQEAgaXdsX212bV9kM19pZ3RrX2JpZ3RrX3Jla2V5X2FkZChzdHJ1Y3QgaXdsX3dvd2xhbl9zdGF0dXNfZGF0YSAqc3RhdHVzLFxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbiBcdGtleV9jb25maWcgPSBpZWVlODAyMTFfZ3RrX3Jla2V5X2FkZCh2aWYsIGtleWlkeCwga2V5X2RhdGEtXHUwMDNla2V5LFxuLVx0XHRcdFx0XHQgICAgIHNpemVvZihrZXlfZGF0YS1cdTAwM2VrZXkpLCAtMSk7XG4rXHRcdFx0XHRcdCAgICAgc2l6ZW9mKGtleV9kYXRhLVx1MDAzZWtleSksIC0xLFxuK1x0XHRcdFx0XHQgICAgIGZhbHNlKTtcbiBcdGlmIChJU19FUlIoa2V5X2NvbmZpZykpIHtcbiBcdFx0LyogRlcgbWF5IHNlbmQgYWxzbyB0aGUgb2xkIGtleXMgKi9cbiBcdFx0cmV0dXJuIFBUUl9FUlIoa2V5X2NvbmZpZykgPT0gLUVBTFJFQURZO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvY2ZnLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2NmZy5jXG5pbmRleCA3MmM5MmY3MjQ2OWRlLi5lMDE1Y2ZhMTk1MGMxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9jZmcuY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9jZmcuY1xuQEAgLTE1MDgsNyArMTUwOCw4IEBAIHN0YXRpYyBpbnQgbGJzX2NmZ19zZXRfZGVmYXVsdF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSxcbiBcbiBcbiBzdGF0aWMgaW50IGxic19jZmdfYWRkX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuLVx0XHRcdCAgIGludCBsaW5rX2lkLCB1OCBpZHgsIGJvb2wgcGFpcndpc2UsXG4rXHRcdFx0ICAgaW50IGxpbmtfaWQsIHU4IGlkeCxcbitcdFx0XHQgICBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSxcbiBcdFx0XHQgICBjb25zdCB1OCAqbWFjX2FkZHIsIHN0cnVjdCBrZXlfcGFyYW1zICpwYXJhbXMpXG4ge1xuIFx0c3RydWN0IGxic19wcml2YXRlICpwcml2ID0gd2lwaHlfcHJpdih3aXBoeSk7XG5AQCAtMTU2OSw3ICsxNTcwLDggQEAgc3RhdGljIGludCBsYnNfY2ZnX2FkZF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcbiBcbiBcbiBzdGF0aWMgaW50IGxic19jZmdfZGVsX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuLVx0XHRcdCAgIGludCBsaW5rX2lkLCB1OCBrZXlfaW5kZXgsIGJvb2wgcGFpcndpc2UsXG4rXHRcdFx0ICAgaW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCxcbitcdFx0XHQgICBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSxcbiBcdFx0XHQgICBjb25zdCB1OCAqbWFjX2FkZHIpXG4ge1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9jZmc4MDIxMS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L2NmZzgwMjExLmNcbmluZGV4IDhlYzJkMjJhOGMzM2EuLjA2MGMzNTFjZWNjMDYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvY2ZnODAyMTEuY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L2NmZzgwMjExLmNcbkBAIC0xNDIsMTIgKzE0MiwxNCBAQCBzdGF0aWMgdm9pZCAqbXdpZmlleF9jZmc4MDIxMV9nZXRfYWRhcHRlcihzdHJ1Y3Qgd2lwaHkgKndpcGh5KVxuICAqL1xuIHN0YXRpYyBpbnRcbiBtd2lmaWV4X2NmZzgwMjExX2RlbF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldixcbi1cdFx0XHQgaW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCwgYm9vbCBwYWlyd2lzZSxcbitcdFx0XHQgaW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCxcbitcdFx0XHRlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSxcbiBcdFx0XHQgY29uc3QgdTggKm1hY19hZGRyKVxuIHtcbiBcdHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYgPSBtd2lmaWV4X25ldGRldl9nZXRfcHJpdih3ZGV2LVx1MDAzZW5ldGRldik7XG4gXHRzdGF0aWMgY29uc3QgdTggYmNfbWFjW10gPSB7MHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZn07XG4tXHRjb25zdCB1OCAqcGVlcl9tYWMgPSBwYWlyd2lzZSA/IG1hY19hZGRyIDogYmNfbWFjO1xuK1x0Y29uc3QgdTggKnBlZXJfbWFjID1cbitcdFx0KHR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFKSA/IG1hY19hZGRyIDogYmNfbWFjO1xuIFxuIFx0aWYgKG13aWZpZXhfc2V0X2VuY29kZShwcml2LCBOVUxMLCBOVUxMLCAwLCBrZXlfaW5kZXgsIHBlZXJfbWFjLCAxKSkge1xuIFx0XHRtd2lmaWV4X2RiZyhwcml2LVx1MDAzZWFkYXB0ZXIsIEVSUk9SLCBcImRlbGV0aW5nIHRoZSBjcnlwdG8ga2V5c1xcblwiKTtcbkBAIC00ODIsMTMgKzQ4NCwxNSBAQCBtd2lmaWV4X2NmZzgwMjExX3NldF9kZWZhdWx0X2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuICAqL1xuIHN0YXRpYyBpbnRcbiBtd2lmaWV4X2NmZzgwMjExX2FkZF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldixcbi1cdFx0XHQgaW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCwgYm9vbCBwYWlyd2lzZSxcbitcdFx0XHQgaW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCxcbitcdFx0XHQgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsXG4gXHRcdFx0IGNvbnN0IHU4ICptYWNfYWRkciwgc3RydWN0IGtleV9wYXJhbXMgKnBhcmFtcylcbiB7XG4gXHRzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2ID0gbXdpZmlleF9uZXRkZXZfZ2V0X3ByaXYod2Rldi1cdTAwM2VuZXRkZXYpO1xuIFx0c3RydWN0IG13aWZpZXhfd2VwX2tleSAqd2VwX2tleTtcbiBcdHN0YXRpYyBjb25zdCB1OCBiY19tYWNbXSA9IHsweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmfTtcbi1cdGNvbnN0IHU4ICpwZWVyX21hYyA9IHBhaXJ3aXNlID8gbWFjX2FkZHIgOiBiY19tYWM7XG4rXHRjb25zdCB1OCAqcGVlcl9tYWMgPVxuK1x0XHQodHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0UpID8gbWFjX2FkZHIgOiBiY19tYWM7XG4gXG4gXHRpZiAoR0VUX0JTU19ST0xFKHByaXYpID09IE1XSUZJRVhfQlNTX1JPTEVfVUFQIFx1MDAyNlx1MDAyNlxuIFx0ICAgIChwYXJhbXMtXHUwMDNlY2lwaGVyID09IFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDQwIHx8XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWljcm9jaGlwL3dpbGMxMDAwL2NmZzgwMjExLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9taWNyb2NoaXAvd2lsYzEwMDAvY2ZnODAyMTEuY1xuaW5kZXggNjY1NGZjZTRkZWQ4NC4uNzg1MGUwYTQ4MzkwNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21pY3JvY2hpcC93aWxjMTAwMC9jZmc4MDIxMS5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9taWNyb2NoaXAvd2lsYzEwMDAvY2ZnODAyMTEuY1xuQEAgLTUzNSwxMCArNTM1LDEzIEBAIHN0YXRpYyBpbnQgd2lsY193ZmlfY2ZnX2NvcHlfd3BhX2luZm8oc3RydWN0IHdpbGNfd2ZpX2tleSAqa2V5X2luZm8sXG4gfVxuIFxuIHN0YXRpYyBpbnQgYWRkX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LCBpbnQgbGlua19pZCxcbi1cdFx0ICAgdTgga2V5X2luZGV4LCBib29sIHBhaXJ3aXNlLCBjb25zdCB1OCAqbWFjX2FkZHIsXG4rXHRcdCAgIHU4IGtleV9pbmRleCxcbitcdFx0ICAgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsXG4rXHRcdCAgIGNvbnN0IHU4ICptYWNfYWRkcixcbiBcdFx0ICAgc3RydWN0IGtleV9wYXJhbXMgKnBhcmFtcylcbiBcbiB7XG4rXHRib29sIHBhaXJ3aXNlID0gdHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0U7XG4gXHRpbnQgcmV0ID0gMCwga2V5bGVuID0gcGFyYW1zLVx1MDAzZWtleV9sZW47XG4gXHRjb25zdCB1OCAqcnhfbWljID0gTlVMTDtcbiBcdGNvbnN0IHU4ICp0eF9taWMgPSBOVUxMO1xuQEAgLTY0MSw5ICs2NDQsMTAgQEAgc3RhdGljIGludCBhZGRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsIGludCBsaW5rX2lkLFxuIFxuIHN0YXRpYyBpbnQgZGVsX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LCBpbnQgbGlua19pZCxcbiBcdFx0ICAgdTgga2V5X2luZGV4LFxuLVx0XHQgICBib29sIHBhaXJ3aXNlLFxuK1x0XHQgICBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSxcbiBcdFx0ICAgY29uc3QgdTggKm1hY19hZGRyKVxuIHtcbitcdGJvb2wgcGFpcndpc2UgPSB0eXBlID09IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRTtcbiBcdHN0cnVjdCB3aWxjX3ZpZiAqdmlmID0gbmV0ZGV2X3ByaXYod2Rldi1cdTAwM2VuZXRkZXYpO1xuIFx0c3RydWN0IHdpbGNfcHJpdiAqcHJpdiA9IFx1MDAyNnZpZi1cdTAwM2Vwcml2O1xuIFxuQEAgLTY4MSwxMCArNjg1LDExIEBAIHN0YXRpYyBpbnQgZGVsX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LCBpbnQgbGlua19pZCxcbiB9XG4gXG4gc3RhdGljIGludCBnZXRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsIGludCBsaW5rX2lkLFxuLVx0XHQgICB1OCBrZXlfaW5kZXgsIGJvb2wgcGFpcndpc2UsIGNvbnN0IHU4ICptYWNfYWRkcixcbi1cdFx0ICAgdm9pZCAqY29va2llLFxuK1x0XHQgICB1OCBrZXlfaW5kZXgsIGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLFxuK1x0XHQgICBjb25zdCB1OCAqbWFjX2FkZHIsIHZvaWQgKmNvb2tpZSxcbiBcdFx0ICAgdm9pZCAoKmNhbGxiYWNrKSh2b2lkICpjb29raWUsIHN0cnVjdCBrZXlfcGFyYW1zICopKVxuIHtcbitcdGJvb2wgcGFpcndpc2UgPSB0eXBlID09IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRTtcbiBcdHN0cnVjdCB3aWxjX3ZpZiAqdmlmID0gbmV0ZGV2X3ByaXYod2Rldi1cdTAwM2VuZXRkZXYpO1xuIFx0c3RydWN0IHdpbGNfcHJpdiAqcHJpdiA9IFx1MDAyNnZpZi1cdTAwM2Vwcml2O1xuIFx0c3RydWN0ICBrZXlfcGFyYW1zIGtleV9wYXJhbXM7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvY2ZnODAyMTEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL2NmZzgwMjExLmNcbmluZGV4IDRmOWUyMGY3MjgxMTQuLjA4YjZkYjE0NzQ1MmMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9jZmc4MDIxMS5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9jZmc4MDIxMS5jXG5AQCAtOTksMTIgKzk5LDE0IEBAIHN0YXRpYyB2b2lkICpueHB3aWZpX2NmZzgwMjExX2dldF9hZGFwdGVyKHN0cnVjdCB3aXBoeSAqd2lwaHkpXG4gLyogY2ZnODAyMTEgb3BlcmF0aW9uIGhhbmRsZXIgdG8gZGVsZXRlIGEgbmV0d29yayBrZXkuICovXG4gc3RhdGljIGludFxuIG54cHdpZmlfY2ZnODAyMTFfZGVsX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuLVx0XHRcdCBpbnQgbGlua19pZCwgdTgga2V5X2luZGV4LCBib29sIHBhaXJ3aXNlLFxuK1x0XHRcdCBpbnQgbGlua19pZCwgdTgga2V5X2luZGV4LFxuK1x0XHRcdCBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSxcbiBcdFx0XHQgY29uc3QgdTggKm1hY19hZGRyKVxuIHtcbiBcdHN0cnVjdCBueHB3aWZpX3ByaXZhdGUgKnByaXYgPSBueHB3aWZpX25ldGRldl9nZXRfcHJpdih3ZGV2LVx1MDAzZW5ldGRldik7XG4gXHRzdGF0aWMgY29uc3QgdTggYmNfbWFjW10gPSB7MHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZn07XG4tXHRjb25zdCB1OCAqcGVlcl9tYWMgPSBwYWlyd2lzZSA/IG1hY19hZGRyIDogYmNfbWFjO1xuK1x0Y29uc3QgdTggKnBlZXJfbWFjID1cbitcdFx0KHR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFKSA/IG1hY19hZGRyIDogYmNfbWFjO1xuIFx0aW50IHJldDtcbiBcbiBcdHJldCA9IG54cHdpZmlfc2V0X2VuY29kZShwcml2LCBOVUxMLCBOVUxMLCAwLCBrZXlfaW5kZXgsIHBlZXJfbWFjLCAxKTtcbkBAIC00MjgsNyArNDMwLDggQEAgbnhwd2lmaV9jZmc4MDIxMV9zZXRfZGVmYXVsdF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiAvKiBjZmc4MDIxMSBoYW5kbGVyIGZvciBhZGRpbmcgYW4gODAyLjExIGVuY3J5cHRpb24ga2V5LiAqL1xuIHN0YXRpYyBpbnRcbiBueHB3aWZpX2NmZzgwMjExX2FkZF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldixcbi1cdFx0XHQgaW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCwgYm9vbCBwYWlyd2lzZSxcbitcdFx0XHQgaW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCxcbitcdFx0XHQgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsXG4gXHRcdFx0IGNvbnN0IHU4ICptYWNfYWRkciwgc3RydWN0IGtleV9wYXJhbXMgKnBhcmFtcylcbiB7XG4gXHRzdHJ1Y3Qgbnhwd2lmaV9wcml2YXRlICpwcml2ID0gbnhwd2lmaV9uZXRkZXZfZ2V0X3ByaXYod2Rldi1cdTAwM2VuZXRkZXYpO1xuQEAgLTQzOCw3ICs0NDEsNyBAQCBueHB3aWZpX2NmZzgwMjExX2FkZF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcbiBcdGludCByZXQ7XG4gXG4gXHRldGhfYnJvYWRjYXN0X2FkZHIoYmNfbWFjKTtcbi1cdHBlZXJfbWFjID0gcGFpcndpc2UgPyBtYWNfYWRkciA6IGJjX21hYztcbitcdHBlZXJfbWFjID0gKHR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFKSA/IG1hY19hZGRyIDogYmNfbWFjO1xuIFxuIFx0aWYgKEdFVF9CU1NfUk9MRShwcml2KSA9PSBOWFBXSUZJX0JTU19ST0xFX1VBUCBcdTAwMjZcdTAwMjZcbiBcdCAgICAocGFyYW1zLVx1MDAzZWNpcGhlciA9PSBXTEFOX0NJUEhFUl9TVUlURV9XRVA0MCB8fFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3F1YW50ZW5uYS9xdG5mbWFjL2NmZzgwMjExLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9xdWFudGVubmEvcXRuZm1hYy9jZmc4MDIxMS5jXG5pbmRleCA5ZTQ0Yzg1ZDIwNTFjLi4zODYyNTM0MjE2OWZmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcXVhbnRlbm5hL3F0bmZtYWMvY2ZnODAyMTEuY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcXVhbnRlbm5hL3F0bmZtYWMvY2ZnODAyMTEuY1xuQEAgLTUzMywxMCArNTMzLDEyIEBAIHF0bmZfZHVtcF9zdGF0aW9uKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4gfVxuIFxuIHN0YXRpYyBpbnQgcXRuZl9hZGRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4tXHRcdFx0aW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCwgYm9vbCBwYWlyd2lzZSxcbitcdFx0XHRpbnQgbGlua19pZCwgdTgga2V5X2luZGV4LFxuK1x0XHRcdGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLFxuIFx0XHRcdGNvbnN0IHU4ICptYWNfYWRkciwgc3RydWN0IGtleV9wYXJhbXMgKnBhcmFtcylcbiB7XG4gXHRzdHJ1Y3QgcXRuZl92aWYgKnZpZiA9IHF0bmZfbmV0ZGV2X2dldF9wcml2KHdkZXYtXHUwMDNlbmV0ZGV2KTtcbitcdGJvb2wgcGFpcndpc2UgPSB0eXBlID09IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRTtcbiBcdGludCByZXQ7XG4gXG4gXHRyZXQgPSBxdG5mX2NtZF9zZW5kX2FkZF9rZXkodmlmLCBrZXlfaW5kZXgsIHBhaXJ3aXNlLCBtYWNfYWRkciwgcGFyYW1zKTtcbkBAIC01NDksMTAgKzU1MSwxMiBAQCBzdGF0aWMgaW50IHF0bmZfYWRkX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuIH1cbiBcbiBzdGF0aWMgaW50IHF0bmZfZGVsX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuLVx0XHRcdGludCBsaW5rX2lkLCB1OCBrZXlfaW5kZXgsIGJvb2wgcGFpcndpc2UsXG4rXHRcdFx0aW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCxcbitcdFx0XHRlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSxcbiBcdFx0XHRjb25zdCB1OCAqbWFjX2FkZHIpXG4ge1xuIFx0c3RydWN0IHF0bmZfdmlmICp2aWYgPSBxdG5mX25ldGRldl9nZXRfcHJpdih3ZGV2LVx1MDAzZW5ldGRldik7XG4rXHRib29sIHBhaXJ3aXNlID0gdHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0U7XG4gXHRpbnQgcmV0O1xuIFxuIFx0cmV0ID0gcXRuZl9jbWRfc2VuZF9kZWxfa2V5KHZpZiwga2V5X2luZGV4LCBwYWlyd2lzZSwgbWFjX2FkZHIpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvd293LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg5L3dvdy5jXG5pbmRleCA4ZGFkZDhkZjRmYzY1Li5jOGUwMDIyMzhlY2IyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OS93b3cuY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OS93b3cuY1xuQEAgLTY2OSwxMCArNjY5LDEyIEBAIHN0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICpydHc4OV93b3dfZ3RrX3Jla2V5KHN0cnVjdCBydHc4OV9kZXYgKnJ0d2RldixcbiBcdGlmIChpZWVlODAyMTFfdmlmX2lzX21sZCh3b3dfdmlmKSlcbiBcdFx0a2V5ID0gaWVlZTgwMjExX2d0a19yZWtleV9hZGQod293X3ZpZiwga2V5aWR4LCBndGssXG4gXHRcdFx0XHRcdCAgICAgIGNpcGhlcl9pbmZvLVx1MDAzZWxlbixcbi1cdFx0XHRcdFx0ICAgICAgcnR3dmlmX2xpbmstXHUwMDNlbGlua19pZCk7XG4rXHRcdFx0XHRcdCAgICAgIHJ0d3ZpZl9saW5rLVx1MDAzZWxpbmtfaWQsXG4rXHRcdFx0XHRcdCAgICAgIGZhbHNlKTtcbiBcdGVsc2VcbiBcdFx0a2V5ID0gaWVlZTgwMjExX2d0a19yZWtleV9hZGQod293X3ZpZiwga2V5aWR4LCBndGssXG4tXHRcdFx0XHRcdCAgICAgIGNpcGhlcl9pbmZvLVx1MDAzZWxlbiwgLTEpO1xuK1x0XHRcdFx0XHQgICAgICBjaXBoZXJfaW5mby1cdTAwM2VsZW4sIC0xLFxuK1x0XHRcdFx0XHQgICAgICBmYWxzZSk7XG4gXG4gXHRrZnJlZShyZWtleV9jb25mKTtcbiBcdGlmIChJU19FUlIoa2V5KSkge1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmNcbmluZGV4IDAyYjZkODFjY2NkMTEuLjFjYzMyMmFhODk4ZGQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmNcbkBAIC01NjY4LDYgKzU2NjgsOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHdpcGh5X2lmdHlwZV9leHRfY2FwYWIgbWFjODAyMTFfaHdzaW1faWZ0eXBlc19leHRfY2FwYVtdID0ge1xuIFx0XHQuZW1sX2NhcGFiaWxpdGllcyA9IElFRUU4MDIxMV9FTUxfQ0FQX0VNTFNSX1NVUFAgfFxuIFx0XHRcdFx0ICAgIElFRUU4MDIxMV9FTUxfQ0FQX0VNTE1SX1NVUFBPUlQsXG4gXHRcdC5tbGRfY2FwYV9hbmRfb3BzID0gTUFDODAyMTFfSFdTSU1fTUxEX0NBUEFfT1BTLFxuK1x0XHQvKiBDSVAgd29ya3MgYXMgaHdzaW0gZG9lcyBub3QgaGF2ZSBjb250cm9sIGZyYW1lcyAqL1xuK1x0XHQuY2lwX3N1cHBvcnRlZCA9IHRydWUsXG4rXHRcdC5jaXBfY2FwYWJpbGl0aWVzID0gMCxcbiBcdH0sXG4gfTtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2llZWU4MDIxMS5oIGIvaW5jbHVkZS9saW51eC9pZWVlODAyMTEuaFxuaW5kZXggMjZlNjc0MDM4ODY1NC4uMTZkNzhmZDYxYzIyMyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvaWVlZTgwMjExLmhcbisrKyBiL2luY2x1ZGUvbGludXgvaWVlZTgwMjExLmhcbkBAIC0xODI4LDYgKzE4MjgsNyBAQCBlbnVtIGllZWU4MDIxMV9laWRfZXh0IHtcbiBcdFdMQU5fRUlEX0VYVF9CQU5EV0lEVEhfSU5ESUNBVElPTiA9IDEzNSxcbiBcdFdMQU5fRUlEX0VYVF9LTk9XTl9TVEFfSURFTlRJRkNBVElPTiA9IDEzNixcbiBcdFdMQU5fRUlEX0VYVF9OT05fQVBfU1RBX1JFR19DT04gPSAxMzcsXG4rXHRXTEFOX0VJRF9FWFRfQ0lQX0NBUEEgPSAxNTAsXG4gXHRXTEFOX0VJRF9FWFRfVUhSX09QRVIgPSAxNTEsXG4gXHRXTEFOX0VJRF9FWFRfVUhSX0NBUEEgPSAxNTIsXG4gXHRXTEFOX0VJRF9FWFRfTUFDUCA9IDE1MyxcbkBAIC0yOTAwLDQgKzI5MDEsMTYgQEAgc3RhdGljIGlubGluZSBib29sIGllZWU4MDIxMV9jaGVja190aW0oY29uc3Qgc3RydWN0IGllZWU4MDIxMV90aW1faWUgKnRpbSxcbiBcdFx0ICAgICBfX2llZWU4MDIxMV9jaGVja190aW0odGltLCB0aW1fbGVuLCBhaWQpO1xuIH1cbiBcbisvKiBUaGUgTUlDIHBhZGRpbmcgc3ViZmllbGQgaW4gdGhlIENJUCBjYXBhYmlsaXRpZXMgKi9cbisjZGVmaW5lIFdMQU5fQ0lQX0NBUEFfTUlDX1BBRERJTkdcdDB4MEZcbitcbisvKipcbisgKiBzdHJ1Y3QgaWVlZTgwMjExX2NpcF9jYXAgLSBDSVAgQ2FwYWJpbGl0aWVzIGVsZW1lbnRcbisgKlxuKyAqIEB2OiBUaGUgdmFsdWUgb2YgdGhlIENvbnRyb2wgSW50ZWdyaXR5IFByb3RvY29sIENhcGFiaWxpdHkgZWxlbWVudFxuKyAqL1xuK3N0cnVjdCBpZWVlODAyMTFfY2lwX2NhcCB7XG4rXHR1OCB2O1xuK30gX19wYWNrZWQ7XG4rXG4gI2VuZGlmIC8qIExJTlVYX0lFRUU4MDIxMV9IICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaCBiL2luY2x1ZGUvbmV0L2NmZzgwMjExLmhcbmluZGV4IGRjYmIwZTU1YzMyZWMuLmI1ZDk4YmEwNzIzOWIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9jZmc4MDIxMS5oXG4rKysgYi9pbmNsdWRlL25ldC9jZmc4MDIxMS5oXG5AQCAtMTgyMSw2ICsxODIxLDggQEAgc3RydWN0IHN0YV90eHB3ciB7XG4gICogQHMxZ19jYXBhOiBTMUcgY2FwYWJpbGl0aWVzIG9mIHN0YXRpb25cbiAgKiBAdWhyX2NhcGE6IFVIUiBjYXBhYmlsaXRpZXMgb2YgdGhlIHN0YXRpb25cbiAgKiBAdWhyX2NhcGFfbGVuOiB0aGUgbGVuZ3RoIG9mIHRoZSBVSFIgY2FwYWJpbGl0aWVzXG4rICogQGNpcF9jYXBfc2V0OiBJZiBDSVAgY2FwYWJpbGl0aWVzIGFyZSBwcmVzZW50LCByZXF1aXJlZCBmb3IgQ0lQIHN0YXRpb25zXG4rICogQGNpcF9jYXA6IENJUCBjYXBhYmlsaXRpZXMgb2Ygc3RhdGlvblxuICAqL1xuIHN0cnVjdCBsaW5rX3N0YXRpb25fcGFyYW1ldGVycyB7XG4gXHRjb25zdCB1OCAqbWxkX21hYztcbkBAIC0xODQyLDYgKzE4NDQsOCBAQCBzdHJ1Y3QgbGlua19zdGF0aW9uX3BhcmFtZXRlcnMge1xuIFx0Y29uc3Qgc3RydWN0IGllZWU4MDIxMV9zMWdfY2FwICpzMWdfY2FwYTtcbiBcdGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdWhyX2NhcCAqdWhyX2NhcGE7XG4gXHR1OCB1aHJfY2FwYV9sZW47XG4rXHRib29sIGNpcF9jYXBfc2V0O1xuK1x0dTggY2lwX2NhcDtcbiB9O1xuIFxuIC8qKlxuQEAgLTM0MDIsNiArMzQwNiw3IEBAIHN0cnVjdCBjZmc4MDIxMV9tbF9yZWNvbmZfcmVxIHtcbiAgKlx0ZmxhZyBpcyBub3Qgc2V0LlxuICAqIEBBU1NPQ19SRVFfU1BQX0FNU0RVOiBTUFAgQS1NU0RVcyB3aWxsIGJlIHVzZWQgb24gdGhpcyBjb25uZWN0aW9uIChpZiBhbnkpXG4gICogQEFTU09DX1JFUV9ESVNBQkxFX1VIUjogRGlzYWJsZSBVSFJcbisgKiBAQVNTT0NfUkVRX0NJUDogRW5hYmxlIENvbnRyb2wgSW50ZWdyaXR5IFByb3RvY29sXG4gICovXG4gZW51bSBjZmc4MDIxMV9hc3NvY19yZXFfZmxhZ3Mge1xuIFx0QVNTT0NfUkVRX0RJU0FCTEVfSFRcdFx0XHQ9IEJJVCgwKSxcbkBAIC0zNDEzLDYgKzM0MTgsNyBAQCBlbnVtIGNmZzgwMjExX2Fzc29jX3JlcV9mbGFncyB7XG4gXHRDT05ORUNUX1JFUV9NTE9fU1VQUE9SVFx0XHRcdD0gQklUKDYpLFxuIFx0QVNTT0NfUkVRX1NQUF9BTVNEVVx0XHRcdD0gQklUKDcpLFxuIFx0QVNTT0NfUkVRX0RJU0FCTEVfVUhSXHRcdFx0PSBCSVQoOCksXG4rXHRBU1NPQ19SRVFfQ0lQXHRcdFx0XHQ9IEJJVCg5KSxcbiB9O1xuIFxuIC8qKlxuQEAgLTUzMDAsMTQgKzUzMDYsMTcgQEAgc3RydWN0IGNmZzgwMjExX29wcyB7XG4gXHRcdFx0XHQgdW5zaWduZWQgaW50IGxpbmtfaWQpO1xuIFxuIFx0aW50XHQoKmFkZF9rZXkpKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4tXHRcdFx0ICAgaW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCwgYm9vbCBwYWlyd2lzZSxcbitcdFx0XHQgICBpbnQgbGlua19pZCwgdTgga2V5X2luZGV4LFxuK1x0XHRcdCAgIGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLFxuIFx0XHRcdCAgIGNvbnN0IHU4ICptYWNfYWRkciwgc3RydWN0IGtleV9wYXJhbXMgKnBhcmFtcyk7XG4gXHRpbnRcdCgqZ2V0X2tleSkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldixcbi1cdFx0XHQgICBpbnQgbGlua19pZCwgdTgga2V5X2luZGV4LCBib29sIHBhaXJ3aXNlLFxuK1x0XHRcdCAgIGludCBsaW5rX2lkLCB1OCBrZXlfaW5kZXgsXG4rXHRcdFx0ICAgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsXG4gXHRcdFx0ICAgY29uc3QgdTggKm1hY19hZGRyLCB2b2lkICpjb29raWUsXG4gXHRcdFx0ICAgdm9pZCAoKmNhbGxiYWNrKSh2b2lkICpjb29raWUsIHN0cnVjdCBrZXlfcGFyYW1zKikpO1xuIFx0aW50XHQoKmRlbF9rZXkpKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4tXHRcdFx0ICAgaW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCwgYm9vbCBwYWlyd2lzZSxcbitcdFx0XHQgICBpbnQgbGlua19pZCwgdTgga2V5X2luZGV4LFxuK1x0XHRcdCAgIGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLFxuIFx0XHRcdCAgIGNvbnN0IHU4ICptYWNfYWRkcik7XG4gXHRpbnRcdCgqc2V0X2RlZmF1bHRfa2V5KShzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxuIFx0XHRcdFx0ICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IGxpbmtfaWQsXG5AQCAtNjA0MSw2ICs2MDUwLDggQEAgc3RydWN0IHdpcGh5X3ZlbmRvcl9jb21tYW5kIHtcbiAgKiBAZW1sX2NhcGFiaWxpdGllczogRU1MIGNhcGFiaWxpdGllcyAoZm9yIE1MTylcbiAgKiBAbWxkX2NhcGFfYW5kX29wczogTUxEIGNhcGFiaWxpdGllcyBhbmQgb3BlcmF0aW9ucyAoZm9yIE1MTylcbiAgKiBAZXh0X21sZF9jYXBhX2FuZF9vcHM6IEV4dGVuZGVkIE1MRCBjYXBhYmlsaXRpZXMgYW5kIG9wZXJhdGlvbnMgKGZvciBNTE8pXG4rICogQGNpcF9zdXBwb3J0ZWQ6IENJUCBpcyBzdXBwb3J0ZWQgYW5kIHRoZSBjYXBhYmlsaXRpZXMgYXJlIHZhbGlkXG4rICogQGNpcF9jYXBhYmlsaXRpZXM6IENJUCBDYXBhYmlsaXRpZXMgZWxlbWVudCBjb250YWluaW5nIHRoZSBNSUMgcGFkZGluZyBkZWxheVxuICAqL1xuIHN0cnVjdCB3aXBoeV9pZnR5cGVfZXh0X2NhcGFiIHtcbiBcdGVudW0gbmw4MDIxMV9pZnR5cGUgaWZ0eXBlO1xuQEAgLTYwNTAsNiArNjA2MSw4IEBAIHN0cnVjdCB3aXBoeV9pZnR5cGVfZXh0X2NhcGFiIHtcbiBcdHUxNiBlbWxfY2FwYWJpbGl0aWVzO1xuIFx0dTE2IG1sZF9jYXBhX2FuZF9vcHM7XG4gXHR1MTYgZXh0X21sZF9jYXBhX2FuZF9vcHM7XG4rXHRib29sIGNpcF9zdXBwb3J0ZWQ7XG4rXHR1OCBjaXBfY2FwYWJpbGl0aWVzO1xuIH07XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbWFjODAyMTEuaCBiL2luY2x1ZGUvbmV0L21hYzgwMjExLmhcbmluZGV4IDlkMWZhYzZlODA4MjkuLmFhZTE0MGZkYzJiYjEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9tYWM4MDIxMS5oXG4rKysgYi9pbmNsdWRlL25ldC9tYWM4MDIxMS5oXG5AQCAtMjM5Niw2ICsyMzk2LDggQEAgc3RhdGljIGlubGluZSBib29sIGxvY2tkZXBfdmlmX3dpcGh5X211dGV4X2hlbGQoc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZilcbiAgKlx0bnVtYmVyIGdlbmVyYXRpb24gb25seVxuICAqIEBJRUVFODAyMTFfS0VZX0ZMQUdfU1BQX0FNU0RVOiBTUFAgQS1NU0RVcyBjYW4gYmUgdXNlZCB3aXRoIHRoaXMga2V5XG4gICpcdChzZXQgYnkgbWFjODAyMTEgZnJvbSB0aGUgc3RhLVx1MDAzZXNwcF9hbXNkdSBmbGFnKVxuKyAqIEBJRUVFODAyMTFfS0VZX0ZMQUdfQ0lQOiBUaGlzIGtleSBpcyB1c2VkIGZvciB0aGUgQ29udHJvbCBJbnRlZ3JpdHlcbisgKlx0UHJvdG9jb2wsIGFuZCBpcyBlaXRoZXIgYSBwYWlyd2lzZSBrZXkgb3IgYSBDSUdUSy5cbiAgKi9cbiBlbnVtIGllZWU4MDIxMV9rZXlfZmxhZ3Mge1xuIFx0SUVFRTgwMjExX0tFWV9GTEFHX0dFTkVSQVRFX0lWX01HTVRcdD0gQklUKDApLFxuQEAgLTI0MTAsNiArMjQxMiw3IEBAIGVudW0gaWVlZTgwMjExX2tleV9mbGFncyB7XG4gXHRJRUVFODAyMTFfS0VZX0ZMQUdfTk9fQVVUT19UWFx0XHQ9IEJJVCg5KSxcbiBcdElFRUU4MDIxMV9LRVlfRkxBR19HRU5FUkFURV9NTUlFXHQ9IEJJVCgxMCksXG4gXHRJRUVFODAyMTFfS0VZX0ZMQUdfU1BQX0FNU0RVXHRcdD0gQklUKDExKSxcbitcdElFRUU4MDIxMV9LRVlfRkxBR19DSVBcdFx0XHQ9IEJJVCgxMiksXG4gfTtcbiBcbiAvKipcbkBAIC0yNjMwLDYgKzI2MzMsOCBAQCBzdHJ1Y3QgaWVlZTgwMjExX3N0YV9hZ2dyZWdhdGVzIHtcbiAgKiBAZWh0X2NhcDogRUhUIGNhcGFiaWxpdGllcyBvZiB0aGlzIFNUQVxuICAqIEB1aHJfY2FwOiBVSFIgY2FwYWJpbGl0aWVzIG9mIHRoaXMgU1RBXG4gICogQHMxZ19jYXA6IFMxRyBjYXBhYmlsaXRpZXMgb2YgdGhpcyBTVEFcbisgKiBAY2lwX21pY19wYWRkaW5nOiB0aGUgTUlDIHBhZGRpbmcgcmVxdWlyZWQgYnkgdGhlIFNUQSBhcyBkZWZpbmVkIGluIGl0c1xuKyAqXHRDSVAgQ2FwYWJpbGl0aWVzIGVsZW1lbnRcbiAgKiBAYWdnOiBwZXItbGluayBkYXRhIGZvciBtdWx0aS1saW5rIGFnZ3JlZ2F0aW9uXG4gICogQGJhbmR3aWR0aDogY3VycmVudCBiYW5kd2lkdGggdGhlIHN0YXRpb24gY2FuIHJlY2VpdmUgd2l0aC5cbiAgKlx0VGhpcyBpcyB0aGUgbWluaW11bSBiZXR3ZWVuIHRoZSBwZWVyJ3MgY2FwYWJpbGl0aWVzIGFuZCBvdXIgb3duXG5AQCAtMjY1OCw2ICsyNjYzLDcgQEAgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSB7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX3N0YV9laHRfY2FwIGVodF9jYXA7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX3N0YV91aHJfY2FwIHVocl9jYXA7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX3N0YV9zMWdfY2FwIHMxZ19jYXA7XG4rXHR1OCBjaXBfbWljX3BhZGRpbmc7XG4gXG4gXHRzdHJ1Y3QgaWVlZTgwMjExX3N0YV9hZ2dyZWdhdGVzIGFnZztcbiBcbkBAIC0yNzIxLDYgKzI3MjcsNyBAQCBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhIHtcbiAgKiBAdmFsaWRfbGlua3M6IGJpdG1hcCBvZiB2YWxpZCBsaW5rcywgb3IgMCBmb3Igbm9uLU1MT1xuICAqIEBzcHBfYW1zZHU6IGluZGljYXRlcyB3aGV0aGVyIHRoZSBTVEEgdXNlcyBTUFAgQS1NU0RVIG9yIG5vdC5cbiAgKiBAZXBwX3BlZXI6IGluZGljYXRlcyB0aGF0IHRoZSBwZWVyIGlzIGFuIEVQUCBwZWVyLlxuKyAqIEBjaXA6IGluZGljYXRlcyB3aGV0aGVyIHRoZSBTVEEgdXNlcyBjb250cm9sIGZyYW1lIHByb3RlY3Rpb24gb3Igbm90LlxuICAqIEBubWk6IEZvciBOREkgc3RhdGlvbnMsIHBvaW50ZXIgdG8gdGhlIE5NSSBzdGF0aW9uIG9mIHRoZSBwZWVyLlxuICAqIEBuYW5fc2NoZWQ6IE5BTiBwZWVyIHNjaGVkdWxlIGZvciB0aGlzIHN0YXRpb24uIFZhbGlkIG9ubHkgZm9yIE5NSSBzdGF0aW9ucy5cbiAgKiBAZXh0X21sZF9jYXBhX29wczogdGhlIE1MRCdzIGV4dGVuZGVkIE1MRCBjYXBhYmlsaXRpZXMgYW5kIG9wZXJhdGlvbnNcbkBAIC0yNzQyLDYgKzI3NDksOCBAQCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSB7XG4gXHR1OCBtYXhfYW1zZHVfc3ViZnJhbWVzO1xuIFx0dTE2IGVtbF9jYXA7XG4gXG4rXHRib29sIGNpcDtcbitcbiBcdHN0cnVjdCBpZWVlODAyMTFfc3RhX2FnZ3JlZ2F0ZXMgKmN1cjtcbiBcbiBcdGJvb2wgc3VwcG9ydF9wMnBfcHM7XG5AQCAtNjI3OSw2ICs2Mjg4LDcgQEAgdm9pZCBpZWVlODAyMTFfc2V0X2tleV9yeF9zZXEoc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5Y29uZixcbiAgKiBAa2V5X2xlbjogdGhlIGtleSBkYXRhLiBNaWdodCBiZSBiaWdnZXIgdGhhbiB0aGUgYWN0dWFsIGtleSBsZW5ndGgsXG4gICpcdGJ1dCBub3Qgc21hbGxlciAoZm9yIHRoZSBkcml2ZXIgY29udmluZW5jZSlcbiAgKiBAbGlua19pZDogdGhlIGxpbmsgaWQgb2YgdGhlIGtleSBvciAtMSBmb3Igbm9uLU1MT1xuKyAqIEBjaWd0azogd2hldGhlciB0aGlzIGlzIGEgQ0lHVEtcbiAgKlxuICAqIFdoZW4gR1RLIHJla2V5aW5nIHdhcyBkb25lIHdoaWxlIHRoZSBzeXN0ZW0gd2FzIHN1c3BlbmRlZCwgKGEpIG5ld1xuICAqIGtleShzKSB3aWxsIGJlIGF2YWlsYWJsZS4gVGhlc2Ugd2lsbCBiZSBuZWVkZWQgYnkgbWFjODAyMTEgZm9yIHByb3BlclxuQEAgLTYzMDUsNyArNjMxNSw3IEBAIHZvaWQgaWVlZTgwMjExX3NldF9rZXlfcnhfc2VxKHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleWNvbmYsXG4gc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqXG4gaWVlZTgwMjExX2d0a19yZWtleV9hZGQoc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcbiBcdFx0XHR1OCBpZHgsIHU4ICprZXlfZGF0YSwgdTgga2V5X2xlbixcbi1cdFx0XHRpbnQgbGlua19pZCk7XG4rXHRcdFx0aW50IGxpbmtfaWQsIGJvb2wgY2lndGspO1xuIFxuIC8qKlxuICAqIGllZWU4MDIxMV9ndGtfcmVrZXlfbm90aWZ5IC0gbm90aWZ5IHVzZXJzcGFjZSBzdXBwbGljYW50IG9mIHJla2V5aW5nXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L25sODAyMTEuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9ubDgwMjExLmhcbmluZGV4IDAyMDM4N2Q3NjQxMjIuLjNlNmU1OWZiOGUxN2YgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvbmw4MDIxMS5oXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvbmw4MDIxMS5oXG5AQCAtMzE4NSw2ICszMTg1LDExIEBAIGVudW0gbmw4MDIxMV9jb21tYW5kcyB7XG4gICpcdFRoZSBhZ2dyZWdhdGVkIG1lc3NhZ2UgYWx3YXlzIHByZWNlZGVzIHRoZSBwZXItbGluayBtZXNzYWdlcyBmb3IgdGhlXG4gICpcdHNhbWUgc3RhdGlvbiB3aXRoaW4gYSBkdW1wIHNlcXVlbmNlLlxuICAqXG4rICogQE5MODAyMTFfQVRUUl9BU1NPQ19DSVA6IEVuYWJsZSBDb250cm9sIEludGVncml0eSBQcm90b2NvbCBmb3IgdGhlXG4rICpcdGFzc29jaWF0aW9uXG4rICogQE5MODAyMTFfQVRUUl9DSVBfQ0FQQUJJTElUSUVTOiBUaGUgQ29udHJvbCBJbnRlZ3JpdHkgUHJvdG9jb2wgZm9yIHRoZVxuKyAqXHRzdGF0aW9uLlxuKyAqXG4gICogQE5VTV9OTDgwMjExX0FUVFI6IHRvdGFsIG51bWJlciBvZiBubDgwMjExX2F0dHJzIGF2YWlsYWJsZVxuICAqIEBOTDgwMjExX0FUVFJfTUFYOiBoaWdoZXN0IGF0dHJpYnV0ZSBudW1iZXIgY3VycmVudGx5IGRlZmluZWRcbiAgKiBAX19OTDgwMjExX0FUVFJfQUZURVJfTEFTVDogaW50ZXJuYWwgdXNlXG5AQCAtMzI4MCw2ICszMjg1LDggQEAgZW51bSBubDgwMjExX2F0dHJzIHtcbiBcbiBcdE5MODAyMTFfQVRUUl9GUkVRX0ZJWEVELFxuIFxuK1x0Tkw4MDIxMV9BVFRSX0FTU09DX0NJUCxcbitcdE5MODAyMTFfQVRUUl9DSVBfQ0FQQUJJTElUSUVTLFxuIFxuIFx0Tkw4MDIxMV9BVFRSX1dJUEhZX1JFVFJZX1NIT1JULFxuIFx0Tkw4MDIxMV9BVFRSX1dJUEhZX1JFVFJZX0xPTkcsXG5AQCAtMzkzNCw2ICszOTQxLDcgQEAgZW51bSBubDgwMjExX2lmdHlwZSB7XG4gICpcdHRoYXQgc3VwcG9ydCAlTkw4MDIxMV9GRUFUVVJFX0ZVTExfQVBfQ0xJRU5UX1NUQVRFIHRvIHRyYW5zaXRpb24gYVxuICAqXHRwcmV2aW91c2x5IGFkZGVkIHN0YXRpb24gaW50byBhc3NvY2lhdGVkIHN0YXRlXG4gICogQE5MODAyMTFfU1RBX0ZMQUdfU1BQX0FNU0RVOiBzdGF0aW9uIHN1cHBvcnRzIFNQUCBBLU1TRFVzXG4rICogQE5MODAyMTFfU1RBX0ZMQUdfQ0lQOiBzdGF0aW9uIGhhcyBDb250cm9sIEludGVncml0eSBQcm90b2NvbCAoQ0lQKSBlbmFibGVkXG4gICogQE5MODAyMTFfU1RBX0ZMQUdfTUFYOiBoaWdoZXN0IHN0YXRpb24gZmxhZyBudW1iZXIgY3VycmVudGx5IGRlZmluZWRcbiAgKiBAX19OTDgwMjExX1NUQV9GTEFHX0FGVEVSX0xBU1Q6IGludGVybmFsIHVzZVxuICAqL1xuQEAgLTM5NDcsNiArMzk1NSw3IEBAIGVudW0gbmw4MDIxMV9zdGFfZmxhZ3Mge1xuIFx0Tkw4MDIxMV9TVEFfRkxBR19URExTX1BFRVIsXG4gXHROTDgwMjExX1NUQV9GTEFHX0FTU09DSUFURUQsXG4gXHROTDgwMjExX1NUQV9GTEFHX1NQUF9BTVNEVSxcbitcdE5MODAyMTFfU1RBX0ZMQUdfQ0lQLFxuIFxuIFx0Lyoga2VlcCBsYXN0ICovXG4gXHRfX05MODAyMTFfU1RBX0ZMQUdfQUZURVJfTEFTVCxcbkBAIC01Nzc4LDEyICs1Nzg3LDE2IEBAIGVudW0gbmw4MDIxMV9hdXRoX3R5cGUge1xuICAqIEBOTDgwMjExX0tFWVRZUEVfR1JPVVA6IEdyb3VwIChicm9hZGNhc3QvbXVsdGljYXN0KSBrZXlcbiAgKiBATkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFOiBQYWlyd2lzZSAodW5pY2FzdC9pbmRpdmlkdWFsKSBrZXlcbiAgKiBATkw4MDIxMV9LRVlUWVBFX1BFRVJLRVk6IFBlZXJLZXkgKERMUylcbisgKiBATkw4MDIxMV9LRVlUWVBFX0NJR1RLOiBDb250cm9sIEludGVncml0eSBHcm91cCBUZW1wb3JhbCBLZXlcbisgKlx0VGhlIGNpcGhlciBpcyBHTUFDLTI1NiBidXQgcGFzc2VkIGFzIEdDTVAtMjU2LFxuKyAqXHRzYW1lIGFzIHRoZSBwYWlyd2lzZSBrZXkgd2hlbiB1c2VkIGZvciBDSVAuXG4gICogQE5VTV9OTDgwMjExX0tFWVRZUEVTOiBudW1iZXIgb2YgZGVmaW5lZCBrZXkgdHlwZXNcbiAgKi9cbiBlbnVtIG5sODAyMTFfa2V5X3R5cGUge1xuIFx0Tkw4MDIxMV9LRVlUWVBFX0dST1VQLFxuIFx0Tkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFLFxuIFx0Tkw4MDIxMV9LRVlUWVBFX1BFRVJLRVksXG4rXHROTDgwMjExX0tFWVRZUEVfQ0lHVEssXG4gXG4gXHROVU1fTkw4MDIxMV9LRVlUWVBFU1xuIH07XG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2NmZy5jIGIvbmV0L21hYzgwMjExL2NmZy5jXG5pbmRleCAwYTkyNDdiZTI2YWZhLi4zYmY4MTYyOWNkZTM0IDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL2NmZy5jXG4rKysgYi9uZXQvbWFjODAyMTEvY2ZnLmNcbkBAIC02MTEsMTIgKzYxMSwxNSBAQCBzdGF0aWMgaW50IGllZWU4MDIxMV9zZXRfdHgoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4gfVxuIFxuIHN0YXRpYyBpbnQgaWVlZTgwMjExX2FkZF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldixcbi1cdFx0XHQgICAgIGludCBsaW5rX2lkLCB1OCBrZXlfaWR4LCBib29sIHBhaXJ3aXNlLFxuK1x0XHRcdCAgICAgaW50IGxpbmtfaWQsIHU4IGtleV9pZHgsXG4rXHRcdFx0ICAgICBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSxcbiBcdFx0XHQgICAgIGNvbnN0IHU4ICptYWNfYWRkciwgc3RydWN0IGtleV9wYXJhbXMgKnBhcmFtcylcbiB7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9XREVWX1RPX1NVQl9JRih3ZGV2KTtcbiBcdHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rID1cbiBcdFx0aWVlZTgwMjExX2xpbmtfb3JfZGVmbGluayhzZGF0YSwgbGlua19pZCwgZmFsc2UpO1xuK1x0Ym9vbCBwYWlyd2lzZSA9IHR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFO1xuK1x0Ym9vbCBjaWd0ayA9IHR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX0NJR1RLO1xuIFx0c3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS1cdTAwM2Vsb2NhbDtcbiBcdHN0cnVjdCBzdGFfaW5mbyAqc3RhID0gTlVMTDtcbiBcdHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXk7XG5AQCAtNjYwLDYgKzY2Myw5IEBAIHN0YXRpYyBpbnQgaWVlZTgwMjExX2FkZF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcbiBcdFx0a2V5LVx1MDAzZWNvbmYubGlua19pZCA9IC0xO1xuIFx0fSBlbHNlIHtcbiBcdFx0a2V5LVx1MDAzZWNvbmYubGlua19pZCA9IGxpbmstXHUwMDNlbGlua19pZDtcbitcbitcdFx0aWYgKGNpZ3RrKVxuK1x0XHRcdGtleS1cdTAwM2Vjb25mLmZsYWdzIHw9IElFRUU4MDIxMV9LRVlfRkxBR19DSVA7XG4gXHR9XG4gXG4gXHRpZiAocGFyYW1zLVx1MDAzZW1vZGUgPT0gTkw4MDIxMV9LRVlfTk9fVFgpXG5AQCAtNzM3LDEwICs3NDMsMTMgQEAgc3RhdGljIGludCBpZWVlODAyMTFfYWRkX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuIFxuIHN0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX2tleSAqXG4gaWVlZTgwMjExX2xvb2t1cF9rZXkoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGludCBsaW5rX2lkLFxuLVx0XHQgICAgIHU4IGtleV9pZHgsIGJvb2wgcGFpcndpc2UsIGNvbnN0IHU4ICptYWNfYWRkcilcbitcdFx0ICAgICB1OCBrZXlfaWR4LCBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSxcbitcdFx0ICAgICBjb25zdCB1OCAqbWFjX2FkZHIpXG4ge1xuIFx0c3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgX19tYXliZV91bnVzZWQgPSBzZGF0YS1cdTAwM2Vsb2NhbDtcbiBcdHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rID0gXHUwMDI2c2RhdGEtXHUwMDNlZGVmbGluaztcbitcdGJvb2wgcGFpcndpc2UgPSB0eXBlID09IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRTtcbitcdGJvb2wgY2lndGsgPSB0eXBlID09IE5MODAyMTFfS0VZVFlQRV9DSUdUSztcbiBcdHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXk7XG4gXG4gXHRpZiAobGlua19pZCBcdTAwM2U9IDApIHtcbkBAIC03NzAsNyArNzc5LDExIEBAIGllZWU4MDIxMV9sb29rdXBfa2V5KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBpbnQgbGlua19pZCxcbiBcdFx0XHRyZXR1cm4gd2lwaHlfZGVyZWZlcmVuY2UobG9jYWwtXHUwMDNlaHcud2lwaHksXG4gXHRcdFx0XHRcdFx0IHN0YS1cdTAwM2VwdGtba2V5X2lkeF0pO1xuIFxuLVx0XHRpZiAoIXBhaXJ3aXNlIFx1MDAyNlx1MDAyNlxuK1x0XHRpZiAoY2lndGsgXHUwMDI2XHUwMDI2IGtleV9pZHggXHUwMDNjIE5VTV9DVFJMX0tFWVMpXG4rXHRcdFx0cmV0dXJuIHdpcGh5X2RlcmVmZXJlbmNlKGxvY2FsLVx1MDAzZWh3LndpcGh5LFxuK1x0XHRcdFx0XHRcdCBsaW5rX3N0YS1cdTAwM2VjaWd0a1trZXlfaWR4XSk7XG4rXG4rXHRcdGlmICghcGFpcndpc2UgXHUwMDI2XHUwMDI2ICFjaWd0ayBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIGtleV9pZHggXHUwMDNjIE5VTV9ERUZBVUxUX0tFWVMgK1xuIFx0XHRcdCAgICAgIE5VTV9ERUZBVUxUX01HTVRfS0VZUyArXG4gXHRcdFx0ICAgICAgTlVNX0RFRkFVTFRfQkVBQ09OX0tFWVMpXG5AQCAtNzgzLDYgKzc5Niw5IEBAIGllZWU4MDIxMV9sb29rdXBfa2V5KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBpbnQgbGlua19pZCxcbiBcdGlmIChwYWlyd2lzZSBcdTAwMjZcdTAwMjYga2V5X2lkeCBcdTAwM2MgTlVNX0RFRkFVTFRfS0VZUylcbiBcdFx0cmV0dXJuIHdpcGh5X2RlcmVmZXJlbmNlKGxvY2FsLVx1MDAzZWh3LndpcGh5LCBzZGF0YS1cdTAwM2VrZXlzW2tleV9pZHhdKTtcbiBcbitcdGlmIChjaWd0aylcbitcdFx0cmV0dXJuIHdpcGh5X2RlcmVmZXJlbmNlKGxvY2FsLVx1MDAzZWh3LndpcGh5LCBsaW5rLVx1MDAzZWNpZ3RrW2tleV9pZHhdKTtcbitcbiBcdGtleSA9IHdpcGh5X2RlcmVmZXJlbmNlKGxvY2FsLVx1MDAzZWh3LndpcGh5LCBsaW5rLVx1MDAzZWd0a1trZXlfaWR4XSk7XG4gXHRpZiAoa2V5KVxuIFx0XHRyZXR1cm4ga2V5O1xuQEAgLTc5NSw4ICs4MTEsOCBAQCBpZWVlODAyMTFfbG9va3VwX2tleShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgaW50IGxpbmtfaWQsXG4gfVxuIFxuIHN0YXRpYyBpbnQgaWVlZTgwMjExX2RlbF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldixcbi1cdFx0XHQgICAgIGludCBsaW5rX2lkLCB1OCBrZXlfaWR4LCBib29sIHBhaXJ3aXNlLFxuLVx0XHRcdCAgICAgY29uc3QgdTggKm1hY19hZGRyKVxuK1x0XHRcdCAgICAgaW50IGxpbmtfaWQsIHU4IGtleV9pZHgsXG4rXHRcdFx0ICAgICBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSwgY29uc3QgdTggKm1hY19hZGRyKVxuIHtcbiBcdHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX1dERVZfVE9fU1VCX0lGKHdkZXYpO1xuIFx0c3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS1cdTAwM2Vsb2NhbDtcbkBAIC04MDQsNyArODIwLDcgQEAgc3RhdGljIGludCBpZWVlODAyMTFfZGVsX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuIFxuIFx0bG9ja2RlcF9hc3NlcnRfd2lwaHkobG9jYWwtXHUwMDNlaHcud2lwaHkpO1xuIFxuLVx0a2V5ID0gaWVlZTgwMjExX2xvb2t1cF9rZXkoc2RhdGEsIGxpbmtfaWQsIGtleV9pZHgsIHBhaXJ3aXNlLCBtYWNfYWRkcik7XG4rXHRrZXkgPSBpZWVlODAyMTFfbG9va3VwX2tleShzZGF0YSwgbGlua19pZCwga2V5X2lkeCwgdHlwZSwgbWFjX2FkZHIpO1xuIFx0aWYgKCFrZXkpXG4gXHRcdHJldHVybiAtRU5PRU5UO1xuIFxuQEAgLTgxNCw3ICs4MzAsOCBAQCBzdGF0aWMgaW50IGllZWU4MDIxMV9kZWxfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4gfVxuIFxuIHN0YXRpYyBpbnQgaWVlZTgwMjExX2dldF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldixcbi1cdFx0XHQgICAgIGludCBsaW5rX2lkLCB1OCBrZXlfaWR4LCBib29sIHBhaXJ3aXNlLFxuK1x0XHRcdCAgICAgaW50IGxpbmtfaWQsIHU4IGtleV9pZHgsXG4rXHRcdFx0ICAgICBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSxcbiBcdFx0XHQgICAgIGNvbnN0IHU4ICptYWNfYWRkciwgdm9pZCAqY29va2llLFxuIFx0XHRcdCAgICAgdm9pZCAoKmNhbGxiYWNrKSh2b2lkICpjb29raWUsXG4gXHRcdFx0XHRcdCAgICAgIHN0cnVjdCBrZXlfcGFyYW1zICpwYXJhbXMpKVxuQEAgLTgzMyw3ICs4NTAsNyBAQCBzdGF0aWMgaW50IGllZWU4MDIxMV9nZXRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4gXG4tXHRrZXkgPSBpZWVlODAyMTFfbG9va3VwX2tleShzZGF0YSwgbGlua19pZCwga2V5X2lkeCwgcGFpcndpc2UsIG1hY19hZGRyKTtcbitcdGtleSA9IGllZWU4MDIxMV9sb29rdXBfa2V5KHNkYXRhLCBsaW5rX2lkLCBrZXlfaWR4LCB0eXBlLCBtYWNfYWRkcik7XG4gXHRpZiAoIWtleSlcbiBcdFx0Z290byBvdXQ7XG4gXG5AQCAtMjI4OSw2ICsyMzA2LDggQEAgc3RhdGljIGludCBzdGFfbGlua19hcHBseV9wYXJhbWV0ZXJzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxuIFx0Y2FzZSBTVEFfTElOS19NT0RFX05FVzpcbiBcdFx0aWYgKCFwYXJhbXMtXHUwMDNlbGlua19tYWMpXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdGlmIChzdGEtXHUwMDNlc3RhLmNpcCBcdTAwMjZcdTAwMjYgIXBhcmFtcy1cdTAwM2VjaXBfY2FwX3NldClcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIFNUQV9MSU5LX01PREVfTElOS19NT0RJRlk6XG4gXHRcdGJyZWFrO1xuQEAgLTI0MTEsNiArMjQzMCw5IEBAIHN0YXRpYyBpbnQgc3RhX2xpbmtfYXBwbHlfcGFyYW1ldGVycyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCxcbiBcdFx0aWVlZTgwMjExX3MxZ19jYXBfdG9fc3RhX3MxZ19jYXAoc2RhdGEsIHBhcmFtcy1cdTAwM2VzMWdfY2FwYSxcbiBcdFx0XHRcdFx0XHQgbGlua19zdGEpO1xuIFxuK1x0aWYgKHBhcmFtcy1cdTAwM2VjaXBfY2FwX3NldClcbitcdFx0bGlua19zdGEtXHUwMDNlcHViLVx1MDAzZWNpcF9taWNfcGFkZGluZyA9IHBhcmFtcy1cdTAwM2VjaXBfY2FwO1xuK1xuIFx0c3dpdGNoIChzZGF0YS1cdTAwM2V2aWYudHlwZSkge1xuIFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9OQU46XG4gXHRjYXNlIE5MODAyMTFfSUZUWVBFX05BTl9EQVRBOlxuQEAgLTI1NzMsNiArMjU5NSw5IEBAIHN0YXRpYyBpbnQgc3RhX2FwcGx5X3BhcmFtZXRlcnMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXG4gXHRpZiAocGFyYW1zLVx1MDAzZWVtbF9jYXBfcHJlc2VudClcbiBcdFx0c3RhLVx1MDAzZXN0YS5lbWxfY2FwID0gcGFyYW1zLVx1MDAzZWVtbF9jYXA7XG4gXG4rXHRpZiAocGFyYW1zLVx1MDAzZXN0YV9mbGFnc19zZXQgXHUwMDI2IEJJVChOTDgwMjExX1NUQV9GTEFHX0NJUCkpXG4rXHRcdHN0YS1cdTAwM2VzdGEuY2lwID0gdHJ1ZTtcbitcbiBcdHJldCA9IHN0YV9saW5rX2FwcGx5X3BhcmFtZXRlcnMobG9jYWwsIHN0YSwgU1RBX0xJTktfTU9ERV9TVEFfTU9ESUZZLFxuIFx0XHRcdFx0XHRcdTAwMjZwYXJhbXMtXHUwMDNlbGlua19zdGFfcGFyYW1zKTtcbiBcdGlmIChyZXQpXG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmggYi9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaFxuaW5kZXggYTFlZjg4ZmU4NDZkZC4uZmM4NWY4YmY5NmUzYSAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oXG4rKysgYi9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaFxuQEAgLTQ3Nyw2ICs0NzcsNyBAQCBzdHJ1Y3QgaWVlZTgwMjExX21nZF9hc3NvY19kYXRhIHtcbiBcdGJvb2wgY29tZWJhY2s7IC8qIHdoZXRoZXIgdGhlIEFQIGhhcyByZXF1ZXN0ZWQgYXNzb2NpYXRpb24gY29tZWJhY2sgKi9cbiBcdGJvb2wgczFnO1xuIFx0Ym9vbCBzcHBfYW1zZHU7XG4rXHRib29sIGNpcDtcbiBcbiBcdHM4IGFzc29jX2xpbmtfaWQ7XG4gXG5AQCAtMTEwNCw2ICsxMTA1LDcgQEAgc3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEge1xuIFx0c3RydWN0IGllZWU4MDIxMV9rZXkgX19yY3UgKmd0a1tOVU1fREVGQVVMVF9LRVlTICtcbiBcdFx0XHRcdFx0TlVNX0RFRkFVTFRfTUdNVF9LRVlTICtcbiBcdFx0XHRcdFx0TlVNX0RFRkFVTFRfQkVBQ09OX0tFWVNdO1xuK1x0c3RydWN0IGllZWU4MDIxMV9rZXkgX19yY3UgKmNpZ3RrW05VTV9DVFJMX0tFWVNdO1xuIFx0c3RydWN0IGllZWU4MDIxMV9rZXkgX19yY3UgKmRlZmF1bHRfbXVsdGljYXN0X2tleTtcbiBcdHN0cnVjdCBpZWVlODAyMTFfa2V5IF9fcmN1ICpkZWZhdWx0X21nbXRfa2V5O1xuIFx0c3RydWN0IGllZWU4MDIxMV9rZXkgX19yY3UgKmRlZmF1bHRfYmVhY29uX2tleTtcbkBAIC0xODcwLDYgKzE4NzIsNyBAQCBzdHJ1Y3QgaWVlZTgwMl8xMV9lbGVtcyB7XG4gXHRjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3R0bG1fZWxlbSAqdHRsbVtJRUVFODAyMTFfVFRMTV9NQVhfQ05UXTtcbiBcdGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdWhyX2NhcCAqdWhyX2NhcDtcbiBcdGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdWhyX29wZXJhdGlvbiAqdWhyX29wZXJhdGlvbjtcbitcdGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfY2lwX2NhcCAqY2lwX2NhcDtcbiBcbiBcdC8qIG5vdCB0aGUgb3JkZXIgaW4gdGhlIHBzZCB2YWx1ZXMgaXMgcGVyIGVsZW1lbnQsIG5vdCBwZXIgY2hhbmRlZiAqL1xuIFx0c3RydWN0IGllZWU4MDIxMV9wYXJzZWRfdHBlIHRwZTtcbkBAIC0yNzc1LDYgKzI3NzgsOCBAQCBpbnQgaWVlZTgwMjExX3B1dF91aHJfY2FwKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0ICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZCk7XG4gdm9pZCBpZWVlODAyMTFfcHV0X3JlZ19jb25uKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0XHRcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbitpbnQgaWVlZTgwMjExX3B1dF9jaXBfY2FwKHN0cnVjdCBza19idWZmICpza2IsXG4rXHRcdFx0ICBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7XG4gXG4gLyogY2hhbm5lbCBtYW5hZ2VtZW50ICovXG4gYm9vbCBpZWVlODAyMTFfY2hhbmRlZl9odF9vcGVyKGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfaHRfb3BlcmF0aW9uICpodF9vcGVyLFxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9rZXkuYyBiL25ldC9tYWM4MDIxMS9rZXkuY1xuaW5kZXggZjQ1ZTc5MmFiZWRlNS4uNGM5Nzg4ZWMwYjc0ZiAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS9rZXkuY1xuKysrIGIvbmV0L21hYzgwMjExL2tleS5jXG5AQCAtMjA1LDYgKzIwNSwxMCBAQCBzdGF0aWMgaW50IGllZWU4MDIxMV9rZXlfZW5hYmxlX2h3X2FjY2VsKHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXkpXG4gXHRcdFx0ICBzdGEgPyBzdGEtXHUwMDNlc3RhLmFkZHIgOiBiY2FzdF9hZGRyLCByZXQpO1xuIFxuICBvdXRfdW5zdXBwb3J0ZWQ6XG4rXHQvKiBDb250cm9sIEludGVncml0eSBQcm90b2NvbCBjYW4gb25seSBiZSBkb25lIGluIGhhcmR3YXJlICovXG4rXHRpZiAoa2V5LVx1MDAzZWNvbmYuZmxhZ3MgXHUwMDI2IElFRUU4MDIxMV9LRVlfRkxBR19DSVApXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuIFx0c3dpdGNoIChrZXktXHUwMDNlY29uZi5jaXBoZXIpIHtcbiBcdGNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfV0VQNDA6XG4gXHRjYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDEwNDpcbkBAIC00NDAsMTEgKzQ0NCwxMyBAQCB2b2lkIGllZWU4MDIxMV9zZXRfZGVmYXVsdF9iZWFjb25fa2V5KHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rLFxuIHN0YXRpYyBpbnQgaWVlZTgwMjExX2tleV9yZXBsYWNlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0XHRcdFx0IHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rLFxuIFx0XHRcdFx0IHN0cnVjdCBzdGFfaW5mbyAqc3RhLFxuLVx0XHRcdFx0IGJvb2wgcGFpcndpc2UsXG4rXHRcdFx0XHQgZW51bSBpZWVlODAyMTFfa2V5X2ZsYWdzIGZsYWdzLFxuIFx0XHRcdFx0IHN0cnVjdCBpZWVlODAyMTFfa2V5ICpvbGQsXG4gXHRcdFx0XHQgc3RydWN0IGllZWU4MDIxMV9rZXkgKm5ldylcbiB7XG4gXHRzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGEgPSBzdGEgPyBcdTAwMjZzdGEtXHUwMDNlZGVmbGluayA6IE5VTEw7XG4rXHRib29sIHBhaXJ3aXNlID0gZmxhZ3MgXHUwMDI2IElFRUU4MDIxMV9LRVlfRkxBR19QQUlSV0lTRTtcbitcdGJvb2wgY2lwID0gZmxhZ3MgXHUwMDI2IElFRUU4MDIxMV9LRVlfRkxBR19DSVA7XG4gXHRpbnQgbGlua19pZDtcbiBcdGludCBpZHg7XG4gXHRpbnQgcmV0ID0gMDtcbkBAIC01MzUsNiArNTQxLDggQEAgc3RhdGljIGludCBpZWVlODAyMTFfa2V5X3JlcGxhY2Uoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4gXHRcdFx0aWYgKG5ldyBcdTAwMjZcdTAwMjZcbiBcdFx0XHQgICAgIShuZXctXHUwMDNlY29uZi5mbGFncyBcdTAwMjYgSUVFRTgwMjExX0tFWV9GTEFHX05PX0FVVE9fVFgpKVxuIFx0XHRcdFx0X2llZWU4MDIxMV9zZXRfdHhfa2V5KG5ldywgdHJ1ZSk7XG4rXHRcdH0gZWxzZSBpZiAoY2lwKSB7XG4rXHRcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKGxpbmtfc3RhLVx1MDAzZWNpZ3RrW2lkeF0sIG5ldyk7XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKGxpbmtfc3RhLVx1MDAzZWd0a1tpZHhdLCBuZXcpO1xuIFx0XHR9XG5AQCAtNTY5LDYgKzU3Nyw4IEBAIHN0YXRpYyBpbnQgaWVlZTgwMjExX2tleV9yZXBsYWNlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFxuIFx0XHRpZiAoaXNfd2VwIHx8IHBhaXJ3aXNlKVxuIFx0XHRcdHJjdV9hc3NpZ25fcG9pbnRlcihzZGF0YS1cdTAwM2VrZXlzW2lkeF0sIG5ldyk7XG4rXHRcdGVsc2UgaWYgKGNpcClcbitcdFx0XHRyY3VfYXNzaWduX3BvaW50ZXIobGluay1cdTAwM2VjaWd0a1tpZHhdLCBuZXcpO1xuIFx0XHRlbHNlXG4gXHRcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKGxpbmstXHUwMDNlZ3RrW2lkeF0sIG5ldyk7XG4gXG5AQCAtODgzLDYgKzg5MywxMCBAQCBpbnQgaWVlZTgwMjExX2tleV9saW5rKHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXksXG4gXHRcdFx0cmV0ID0gLUVPUE5PVFNVUFA7XG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbitcbitcdFx0LyogU2V0IENJUCBmbGFnIGlmIGVuYWJsZWQgZm9yIHRoZSBzdGF0aW9uICovXG4rXHRcdGlmIChzdGEtXHUwMDNlc3RhLmNpcClcbitcdFx0XHRrZXktXHUwMDNlY29uZi5mbGFncyB8PSBJRUVFODAyMTFfS0VZX0ZMQUdfQ0lQO1xuIFx0fSBlbHNlIGlmIChzdGEpIHtcbiBcdFx0c3RydWN0IGxpbmtfc3RhX2luZm8gKmxpbmtfc3RhID0gXHUwMDI2c3RhLVx1MDAzZWRlZmxpbms7XG4gXHRcdGludCBsaW5rX2lkID0ga2V5LVx1MDAzZWNvbmYubGlua19pZDtcbkBAIC04OTYsMTUgKzkxMCwyNSBAQCBpbnQgaWVlZTgwMjExX2tleV9saW5rKHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXksXG4gXHRcdFx0fVxuIFx0XHR9XG4gXG4tXHRcdG9sZF9rZXkgPSB3aXBoeV9kZXJlZmVyZW5jZShzZGF0YS1cdTAwM2Vsb2NhbC1cdTAwM2Vody53aXBoeSxcbi1cdFx0XHRcdFx0ICAgIGxpbmtfc3RhLVx1MDAzZWd0a1tpZHhdKTtcbi1cdH0gZWxzZSB7XG4tXHRcdGlmIChpZHggXHUwMDNjIE5VTV9ERUZBVUxUX0tFWVMpXG4rXHRcdGlmIChrZXktXHUwMDNlY29uZi5mbGFncyBcdTAwMjYgSUVFRTgwMjExX0tFWV9GTEFHX0NJUClcbiBcdFx0XHRvbGRfa2V5ID0gd2lwaHlfZGVyZWZlcmVuY2Uoc2RhdGEtXHUwMDNlbG9jYWwtXHUwMDNlaHcud2lwaHksXG4tXHRcdFx0XHRcdFx0ICAgIHNkYXRhLVx1MDAzZWtleXNbaWR4XSk7XG4tXHRcdGlmICghb2xkX2tleSlcbitcdFx0XHRcdFx0XHQgICAgbGlua19zdGEtXHUwMDNlY2lndGtbaWR4XSk7XG4rXHRcdGVsc2VcbiBcdFx0XHRvbGRfa2V5ID0gd2lwaHlfZGVyZWZlcmVuY2Uoc2RhdGEtXHUwMDNlbG9jYWwtXHUwMDNlaHcud2lwaHksXG4tXHRcdFx0XHRcdFx0ICAgIGxpbmstXHUwMDNlZ3RrW2lkeF0pO1xuK1x0XHRcdFx0XHRcdCAgICBsaW5rX3N0YS1cdTAwM2VndGtbaWR4XSk7XG4rXHR9IGVsc2Uge1xuK1x0XHRpZiAoa2V5LVx1MDAzZWNvbmYuZmxhZ3MgXHUwMDI2IElFRUU4MDIxMV9LRVlfRkxBR19DSVApIHtcbitcdFx0XHRvbGRfa2V5ID0gd2lwaHlfZGVyZWZlcmVuY2Uoc2RhdGEtXHUwMDNlbG9jYWwtXHUwMDNlaHcud2lwaHksXG4rXHRcdFx0XHRcdFx0ICAgIGxpbmstXHUwMDNlY2lndGtbaWR4XSk7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0aWYgKGlkeCBcdTAwM2MgTlVNX0RFRkFVTFRfS0VZUylcbitcdFx0XHRcdG9sZF9rZXkgPSB3aXBoeV9kZXJlZmVyZW5jZShzZGF0YS1cdTAwM2Vsb2NhbC1cdTAwM2Vody53aXBoeSxcbitcdFx0XHRcdFx0XHRcdCAgICBzZGF0YS1cdTAwM2VrZXlzW2lkeF0pO1xuK1xuK1x0XHRcdGlmICghb2xkX2tleSlcbitcdFx0XHRcdG9sZF9rZXkgPSB3aXBoeV9kZXJlZmVyZW5jZShzZGF0YS1cdTAwM2Vsb2NhbC1cdTAwM2Vody53aXBoeSxcbitcdFx0XHRcdFx0XHRcdCAgICBsaW5rLVx1MDAzZWd0a1tpZHhdKTtcbitcdFx0fVxuIFx0fVxuIFxuIFx0LyogTm9uLXBhaXJ3aXNlIGtleXMgbXVzdCBhbHNvIG5vdCBzd2l0Y2ggdGhlIGNpcGhlciBvbiByZWtleSAqL1xuQEAgLTkzOCw5ICs5NjIsMTcgQEAgaW50IGllZWU4MDIxMV9rZXlfbGluayhzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5LFxuIFx0aWYgKHN0YSBcdTAwMjZcdTAwMjYgc3RhLVx1MDAzZXN0YS5zcHBfYW1zZHUpXG4gXHRcdGtleS1cdTAwM2Vjb25mLmZsYWdzIHw9IElFRUU4MDIxMV9LRVlfRkxBR19TUFBfQU1TRFU7XG4gXG4rXHQvKiBBIENJUCByZWxhdGVkIGtleSBtdXN0IGJlIEdDTVAtMjU2IChyZWFsbHkgR01BQy0yNTYpICovXG4rXHRpZiAoKGtleS1cdTAwM2Vjb25mLmZsYWdzIFx1MDAyNiBJRUVFODAyMTFfS0VZX0ZMQUdfQ0lQKSBcdTAwMjZcdTAwMjZcbitcdCAgICBrZXktXHUwMDNlY29uZi5jaXBoZXIgIT0gV0xBTl9DSVBIRVJfU1VJVEVfR0NNUF8yNTYpIHtcbitcdFx0cmV0ID0gLUVJTlZBTDtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4gXHRpbmNyZW1lbnRfdGFpbHJvb21fbmVlZF9jb3VudChzZGF0YSk7XG4gXG4tXHRyZXQgPSBpZWVlODAyMTFfa2V5X3JlcGxhY2Uoc2RhdGEsIGxpbmssIHN0YSwgcGFpcndpc2UsIG9sZF9rZXksIGtleSk7XG4rXHRyZXQgPSBpZWVlODAyMTFfa2V5X3JlcGxhY2Uoc2RhdGEsIGxpbmssIHN0YSwga2V5LVx1MDAzZWNvbmYuZmxhZ3MsXG4rXHRcdFx0XHQgICAgb2xkX2tleSwga2V5KTtcbiBcbiBcdGlmICghcmV0KSB7XG4gXHRcdGllZWU4MDIxMV9kZWJ1Z2ZzX2tleV9hZGQoa2V5KTtcbkBAIC05NjYsOCArOTk4LDcgQEAgdm9pZCBpZWVlODAyMTFfa2V5X2ZyZWUoc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSwgYm9vbCBkZWxheV90YWlscm9vbSlcbiBcdCAqL1xuIFx0aWYgKGtleS1cdTAwM2VzZGF0YSlcbiBcdFx0aWVlZTgwMjExX2tleV9yZXBsYWNlKGtleS1cdTAwM2VzZGF0YSwgTlVMTCwga2V5LVx1MDAzZXN0YSxcbi1cdFx0XHRcdCAgICAgIGtleS1cdTAwM2Vjb25mLmZsYWdzIFx1MDAyNiBJRUVFODAyMTFfS0VZX0ZMQUdfUEFJUldJU0UsXG4tXHRcdFx0XHQgICAgICBrZXksIE5VTEwpO1xuK1x0XHRcdFx0ICAgICAga2V5LVx1MDAzZWNvbmYuZmxhZ3MsIGtleSwgTlVMTCk7XG4gXHRpZWVlODAyMTFfa2V5X2Rlc3Ryb3koa2V5LCBkZWxheV90YWlscm9vbSk7XG4gfVxuIFxuQEAgLTEwOTgsOCArMTEyOSw3IEBAIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9mcmVlX2tleXNfaWZhY2Uoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoa2V5LCB0bXAsIFx1MDAyNnNkYXRhLVx1MDAzZWtleV9saXN0LCBsaXN0KSB7XG4gXHRcdGllZWU4MDIxMV9rZXlfcmVwbGFjZShrZXktXHUwMDNlc2RhdGEsIE5VTEwsIGtleS1cdTAwM2VzdGEsXG4tXHRcdFx0XHQgICAgICBrZXktXHUwMDNlY29uZi5mbGFncyBcdTAwMjYgSUVFRTgwMjExX0tFWV9GTEFHX1BBSVJXSVNFLFxuLVx0XHRcdFx0ICAgICAga2V5LCBOVUxMKTtcbitcdFx0XHRcdCAgICAgIGtleS1cdTAwM2Vjb25mLmZsYWdzLCBrZXksIE5VTEwpO1xuIFx0XHRsaXN0X2FkZF90YWlsKFx1MDAyNmtleS1cdTAwM2VsaXN0LCBrZXlzKTtcbiBcdH1cbiBcbkBAIC0xMTE5LDggKzExNDksNyBAQCB2b2lkIGllZWU4MDIxMV9yZW1vdmVfbGlua19rZXlzKHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rLFxuIFx0XHRpZiAoa2V5LVx1MDAzZWNvbmYubGlua19pZCAhPSBsaW5rLVx1MDAzZWxpbmtfaWQpXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdGllZWU4MDIxMV9rZXlfcmVwbGFjZShrZXktXHUwMDNlc2RhdGEsIGxpbmssIGtleS1cdTAwM2VzdGEsXG4tXHRcdFx0XHQgICAgICBrZXktXHUwMDNlY29uZi5mbGFncyBcdTAwMjYgSUVFRTgwMjExX0tFWV9GTEFHX1BBSVJXSVNFLFxuLVx0XHRcdFx0ICAgICAga2V5LCBOVUxMKTtcbitcdFx0XHRcdCAgICAgIGtleS1cdTAwM2Vjb25mLmZsYWdzLCBrZXksIE5VTEwpO1xuIFx0XHRsaXN0X2FkZF90YWlsKFx1MDAyNmtleS1cdTAwM2VsaXN0LCBrZXlzKTtcbiBcdH1cbiB9XG5AQCAtMTE5Niw4ICsxMjI1LDE3IEBAIHZvaWQgaWVlZTgwMjExX2ZyZWVfc3RhX2tleXMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXG4gXHRcdGlmICgha2V5KVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRpZWVlODAyMTFfa2V5X3JlcGxhY2Uoa2V5LVx1MDAzZXNkYXRhLCBOVUxMLCBrZXktXHUwMDNlc3RhLFxuLVx0XHRcdFx0ICAgICAga2V5LVx1MDAzZWNvbmYuZmxhZ3MgXHUwMDI2IElFRUU4MDIxMV9LRVlfRkxBR19QQUlSV0lTRSxcbi1cdFx0XHRcdCAgICAgIGtleSwgTlVMTCk7XG4rXHRcdFx0XHQgICAgICBrZXktXHUwMDNlY29uZi5mbGFncywga2V5LCBOVUxMKTtcbitcdFx0X19pZWVlODAyMTFfa2V5X2Rlc3Ryb3koa2V5LCBrZXktXHUwMDNlc2RhdGEtXHUwMDNldmlmLnR5cGUgPT1cbitcdFx0XHRcdFx0Tkw4MDIxMV9JRlRZUEVfU1RBVElPTik7XG4rXHR9XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHN0YS1cdTAwM2VkZWZsaW5rLmNpZ3RrKTsgaSsrKSB7XG4rXHRcdGtleSA9IHdpcGh5X2RlcmVmZXJlbmNlKGxvY2FsLVx1MDAzZWh3LndpcGh5LCBzdGEtXHUwMDNlZGVmbGluay5jaWd0a1tpXSk7XG4rXHRcdGlmICgha2V5KVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRpZWVlODAyMTFfa2V5X3JlcGxhY2Uoa2V5LVx1MDAzZXNkYXRhLCBOVUxMLCBrZXktXHUwMDNlc3RhLFxuK1x0XHRcdFx0ICAgICAga2V5LVx1MDAzZWNvbmYuZmxhZ3MsIGtleSwgTlVMTCk7XG4gXHRcdF9faWVlZTgwMjExX2tleV9kZXN0cm95KGtleSwga2V5LVx1MDAzZXNkYXRhLVx1MDAzZXZpZi50eXBlID09XG4gXHRcdFx0XHRcdE5MODAyMTFfSUZUWVBFX1NUQVRJT04pO1xuIFx0fVxuQEAgLTEyMDcsOCArMTI0NSw3IEBAIHZvaWQgaWVlZTgwMjExX2ZyZWVfc3RhX2tleXMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXG4gXHRcdGlmICgha2V5KVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRpZWVlODAyMTFfa2V5X3JlcGxhY2Uoa2V5LVx1MDAzZXNkYXRhLCBOVUxMLCBrZXktXHUwMDNlc3RhLFxuLVx0XHRcdFx0ICAgICAga2V5LVx1MDAzZWNvbmYuZmxhZ3MgXHUwMDI2IElFRUU4MDIxMV9LRVlfRkxBR19QQUlSV0lTRSxcbi1cdFx0XHRcdCAgICAgIGtleSwgTlVMTCk7XG4rXHRcdFx0XHQgICAgICBrZXktXHUwMDNlY29uZi5mbGFncywga2V5LCBOVUxMKTtcbiBcdFx0X19pZWVlODAyMTFfa2V5X2Rlc3Ryb3koa2V5LCBrZXktXHUwMDNlc2RhdGEtXHUwMDNldmlmLnR5cGUgPT1cbiBcdFx0XHRcdFx0Tkw4MDIxMV9JRlRZUEVfU1RBVElPTik7XG4gXHR9XG5AQCAtMTM2Niw3ICsxNDAzLDcgQEAgRVhQT1JUX1NZTUJPTF9HUEwoaWVlZTgwMjExX3NldF9rZXlfcnhfc2VxKTtcbiBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICpcbiBpZWVlODAyMTFfZ3RrX3Jla2V5X2FkZChzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxuIFx0XHRcdHU4IGlkeCwgdTggKmtleV9kYXRhLCB1OCBrZXlfbGVuLFxuLVx0XHRcdGludCBsaW5rX2lkKVxuK1x0XHRcdGludCBsaW5rX2lkLCBib29sIGNpZ3RrKVxuIHtcbiBcdHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gdmlmX3RvX3NkYXRhKHZpZik7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLVx1MDAzZWxvY2FsO1xuQEAgLTEzOTAsMTAgKzE0MjcsMjAgQEAgaWVlZTgwMjExX2d0a19yZWtleV9hZGQoc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcbiBcdFx0ICAgIE5VTV9ERUZBVUxUX0JFQUNPTl9LRVlTKSlcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4gXG4tXHRwcmV2X2tleSA9IHdpcGh5X2RlcmVmZXJlbmNlKGxvY2FsLVx1MDAzZWh3LndpcGh5LFxuLVx0XHRcdFx0ICAgICBsaW5rX2RhdGEtXHUwMDNlZ3RrW2lkeF0pO1xuK1x0aWYgKFdBUk5fT04oY2lndGsgXHUwMDI2XHUwMDI2IGlkeCBcdTAwM2U9IE5VTV9DVFJMX0tFWVMpKVxuK1x0XHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcbitcbitcdGlmIChjaWd0aylcbitcdFx0cHJldl9rZXkgPSB3aXBoeV9kZXJlZmVyZW5jZShsb2NhbC1cdTAwM2Vody53aXBoeSxcbitcdFx0XHRcdFx0ICAgICBsaW5rX2RhdGEtXHUwMDNlY2lndGtbaWR4XSk7XG4rXHRlbHNlXG4rXHRcdHByZXZfa2V5ID0gd2lwaHlfZGVyZWZlcmVuY2UobG9jYWwtXHUwMDNlaHcud2lwaHksXG4rXHRcdFx0XHRcdCAgICAgbGlua19kYXRhLVx1MDAzZWd0a1tpZHhdKTtcbiBcdGlmICghcHJldl9rZXkpIHtcbi1cdFx0aWYgKGlkeCBcdTAwM2MgTlVNX0RFRkFVTFRfS0VZUykge1xuK1x0XHRpZiAoY2lndGspIHtcbitcdFx0XHRwcmV2X2tleSA9IHdpcGh5X2RlcmVmZXJlbmNlKGxvY2FsLVx1MDAzZWh3LndpcGh5LFxuK1x0XHRcdFx0XHRcdCAgICAgbGlua19kYXRhLVx1MDAzZWNpZ3RrW2lkeCBeIDFdKTtcbitcdFx0fSBlbHNlIGlmIChpZHggXHUwMDNjIE5VTV9ERUZBVUxUX0tFWVMpIHtcbiBcdFx0XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgTlVNX0RFRkFVTFRfS0VZUzsgaSsrKSB7XG4gXHRcdFx0XHRpZiAoaSA9PSBpZHgpXG4gXHRcdFx0XHRcdGNvbnRpbnVlO1xuQEAgLTE0MjQsNiArMTQ3MSw5IEBAIGllZWU4MDIxMV9ndGtfcmVrZXlfYWRkKHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXG4gXHRpZiAoc2RhdGEtXHUwMDNldS5tZ2QubWZwICE9IElFRUU4MDIxMV9NRlBfRElTQUJMRUQpXG4gXHRcdGtleS1cdTAwM2Vjb25mLmZsYWdzIHw9IElFRUU4MDIxMV9LRVlfRkxBR19SWF9NR01UO1xuIFxuK1x0aWYgKHByZXZfa2V5LVx1MDAzZWNvbmYuZmxhZ3MgXHUwMDI2IElFRUU4MDIxMV9LRVlfRkxBR19DSVApXG4rXHRcdGtleS1cdTAwM2Vjb25mLmZsYWdzIHw9IElFRUU4MDIxMV9LRVlfRkxBR19DSVA7XG4rXG4gXHRrZXktXHUwMDNlY29uZi5saW5rX2lkID0gbGlua19kYXRhLVx1MDAzZWxpbmtfaWQ7XG4gXG4gXHRlcnIgPSBpZWVlODAyMTFfa2V5X2xpbmsoa2V5LCBsaW5rX2RhdGEsIE5VTEwpO1xuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9rZXkuaCBiL25ldC9tYWM4MDIxMS9rZXkuaFxuaW5kZXggODI2ZTRlOTM4N2M1NS4uYzg1OTkyNDkzYWZkMSAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS9rZXkuaFxuKysrIGIvbmV0L21hYzgwMjExL2tleS5oXG5AQCAtMiw3ICsyLDcgQEBcbiAvKlxuICAqIENvcHlyaWdodCAyMDAyLTIwMDQsIEluc3RhbnQ4MDIgTmV0d29ya3MsIEluYy5cbiAgKiBDb3B5cmlnaHQgMjAwNSwgRGV2aWNlc2NhcGUgU29mdHdhcmUsIEluYy5cbi0gKiBDb3B5cmlnaHQgKEMpIDIwMTksIDIwMjItMjAyMyBJbnRlbCBDb3Jwb3JhdGlvblxuKyAqIENvcHlyaWdodCAoQykgMjAxOSwgMjAyMi0yMDIzLCAyMDI2IEludGVsIENvcnBvcmF0aW9uXG4gICovXG4gXG4gI2lmbmRlZiBJRUVFODAyMTFfS0VZX0hcbkBAIC0xOSw2ICsxOSw3IEBAXG4gI2RlZmluZSBOVU1fREVGQVVMVF9LRVlTIDRcbiAjZGVmaW5lIE5VTV9ERUZBVUxUX01HTVRfS0VZUyAyXG4gI2RlZmluZSBOVU1fREVGQVVMVF9CRUFDT05fS0VZUyAyXG4rI2RlZmluZSBOVU1fQ1RSTF9LRVlTIDJcbiAjZGVmaW5lIElOVkFMSURfUFRLX0tFWUlEWCAyIC8qIEtleWlkeCBhbHdheXMgcG9pbnRpbmcgdG8gYSBOVUxMIGtleSBmb3IgUFRLICovXG4gXG4gc3RydWN0IGllZWU4MDIxMV9sb2NhbDtcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvbWxtZS5jIGIvbmV0L21hYzgwMjExL21sbWUuY1xuaW5kZXggZjUxMTY3ZjBmYzQ2ZC4uMzRkNzEzYzlhNjkxNCAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS9tbG1lLmNcbisrKyBiL25ldC9tYWM4MDIxMS9tbG1lLmNcbkBAIC0yMzM3LDYgKzIzMzcsMTAgQEAgaWVlZTgwMjExX2FkZF9saW5rX2VsZW1zKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0XHRpZWVlODAyMTFfcHV0X2VodF9jYXAoc2tiLCBzZGF0YSwgc2JhbmQsXG4gXHRcdFx0XHQgICAgICBcdTAwMjZhc3NvY19kYXRhLVx1MDAzZWxpbmtbbGlua19pZF0uY29ubik7XG4gXG4rXHQvKiBJbnNlcnQgQ0lQIG9ubHkgb24gdGhlIGFzc29jIGxpbmsgKGl0IHdpbGwgYmUgaW5oZXJpdGVkKSAqL1xuK1x0aWYgKGxpbmtfaWQgPT0gYXNzb2NfZGF0YS1cdTAwM2Vhc3NvY19saW5rX2lkIFx1MDAyNlx1MDAyNiBhc3NvY19kYXRhLVx1MDAzZWNpcClcbitcdFx0aWVlZTgwMjExX3B1dF9jaXBfY2FwKHNrYiwgc2RhdGEpO1xuK1xuIFx0aWYgKGFzc29jX2RhdGEtXHUwMDNlbGlua1tsaW5rX2lkXS5jb25uLm1vZGUgXHUwMDNlPSBJRUVFODAyMTFfQ09OTl9NT0RFX1VIUilcbiBcdFx0aWVlZTgwMjExX3B1dF91aHJfY2FwKHNrYiwgc2RhdGEsIHNiYW5kKTtcbiBcbkBAIC0yNjEzLDcgKzI2MTcsOCBAQCBzdGF0aWMgaW50IGllZWU4MDIxMV9zZW5kX2Fzc29jKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKVxuIFx0ICAgICAgIGFzc29jX2RhdGEtXHUwMDNlaWVfbGVuICsgLyogZXh0cmEgSUVzICovXG4gXHQgICAgICAgKGFzc29jX2RhdGEtXHUwMDNlZmlsc19rZWtfbGVuID8gMTYgLyogQUVTLVNJViAqLyA6IDApICtcbiBcdCAgICAgICA5IC8qIFdNTSAqLyArXG4tXHQgICAgICAgNCAvKiByZWd1bGF0b3J5IGNvbm5lY3Rpdml0eSwgaWYgNiBHSHogaXMgc3VwcG9ydGVkICovO1xuK1x0ICAgICAgIDQgLyogcmVndWxhdG9yeSBjb25uZWN0aXZpdHksIGlmIDYgR0h6IGlzIHN1cHBvcnRlZCAqLyArXG4rXHQgICAgICAgKGFzc29jX2RhdGEtXHUwMDNlY2lwID8gNCAvKiBDSVAgY2FwYWJpbGl0aWVzICovIDogMCk7XG4gXG4gXHRmb3IgKGxpbmtfaWQgPSAwOyBsaW5rX2lkIFx1MDAzYyBJRUVFODAyMTFfTUxEX01BWF9OVU1fTElOS1M7IGxpbmtfaWQrKykge1xuIFx0XHRzdHJ1Y3QgY2ZnODAyMTFfYnNzICpjYnNzID0gYXNzb2NfZGF0YS1cdTAwM2VsaW5rW2xpbmtfaWRdLmJzcztcbkBAIC02Mjc0LDYgKzYyNzksMTkgQEAgc3RhdGljIGJvb2wgaWVlZTgwMjExX2Fzc29jX2NvbmZpZ19saW5rKHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rLFxuIFx0XHQvKiBUT0RPOiBPUEVOOiB3aGF0IGhhcHBlbnMgaWYgQlNTIGNvbG9yIGRpc2FibGUgaXMgc2V0PyAqL1xuIFx0fVxuIFxuK1x0aWYgKGFzc29jX2RhdGEtXHUwMDNlY2lwKSB7XG4rXHRcdGlmIChlbGVtcy1cdTAwM2VjaXBfY2FwKSB7XG4rXHRcdFx0bGlua19zdGEtXHUwMDNlcHViLVx1MDAzZWNpcF9taWNfcGFkZGluZyA9XG4rXHRcdFx0XHR1OF9nZXRfYml0cyhlbGVtcy1cdTAwM2VjaXBfY2FwLVx1MDAzZXYsXG4rXHRcdFx0XHRcdCAgICBXTEFOX0NJUF9DQVBBX01JQ19QQURESU5HKTtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRzZGF0YV9pbmZvKHNkYXRhLFxuK1x0XHRcdFx0ICAgXCJDSVAgQ2FwYWJpbGl0aWVzIG5vdCBpbmNsdWRlZCBpbiBhc3NvY2lhdGlvbiByZXNwb25zZVxcblwiKTtcbitcdFx0XHRyZXQgPSBmYWxzZTtcbitcdFx0XHRnb3RvIG91dDtcbitcdFx0fVxuK1x0fVxuK1xuIFx0aWYgKGNic3MtXHUwMDNldHJhbnNtaXR0ZWRfYnNzKSB7XG4gXHRcdGJzc19jb25mLVx1MDAzZW5vbnRyYW5zbWl0dGVkID0gdHJ1ZTtcbiBcdFx0ZXRoZXJfYWRkcl9jb3B5KGJzc19jb25mLVx1MDAzZXRyYW5zbWl0dGVyX2Jzc2lkLFxuQEAgLTcwMDAsNiArNzAxOCw3IEBAIHN0YXRpYyBib29sIGllZWU4MDIxMV9hc3NvY19zdWNjZXNzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0XHRnb3RvIG91dF9lcnI7XG4gXG4gXHRzdGEtXHUwMDNlc3RhLnNwcF9hbXNkdSA9IGFzc29jX2RhdGEtXHUwMDNlc3BwX2Ftc2R1O1xuK1x0c3RhLVx1MDAzZXN0YS5jaXAgPSBhc3NvY19kYXRhLVx1MDAzZWNpcDtcbiBcbiBcdGlmIChpZWVlODAyMTFfdmlmX2lzX21sZChcdTAwMjZzZGF0YS1cdTAwM2V2aWYpKSB7XG4gXHRcdGlmICghZWxlbXMtXHUwMDNlbWxfYmFzaWMpXG5AQCAtMTA1MzgsNiArMTA1NTcsNyBAQCBpbnQgaWVlZTgwMjExX21nZF9hc3NvYyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiBcdH1cbiBcbiBcdGFzc29jX2RhdGEtXHUwMDNlc3BwX2Ftc2R1ID0gcmVxLVx1MDAzZWZsYWdzIFx1MDAyNiBBU1NPQ19SRVFfU1BQX0FNU0RVO1xuK1x0YXNzb2NfZGF0YS1cdTAwM2VjaXAgPSByZXEtXHUwMDNlZmxhZ3MgXHUwMDI2IEFTU09DX1JFUV9DSVA7XG4gXG4gXHRpZiAoaWZtZ2QtXHUwMDNlYXV0aF9kYXRhIFx1MDAyNlx1MDAyNiAhaWZtZ2QtXHUwMDNlYXV0aF9kYXRhLVx1MDAzZWRvbmUpIHtcbiBcdFx0ZXJyID0gLUVCVVNZO1xuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9wYXJzZS5jIGIvbmV0L21hYzgwMjExL3BhcnNlLmNcbmluZGV4IGNiMmJlMTY3Y2RlNzkuLjNiNjZjYTdkN2E1YzIgMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvcGFyc2UuY1xuKysrIGIvbmV0L21hYzgwMjExL3BhcnNlLmNcbkBAIC0yMDUsNiArMjA1LDEwIEBAIGllZWU4MDIxMV9wYXJzZV9leHRlbnNpb25fZWxlbWVudCh1MzIgKmNyYyxcbiBcdFx0XHRlbGVtcy1cdTAwM2V0dGxtX251bSsrO1xuIFx0XHR9XG4gXHRcdGJyZWFrO1xuK1x0Y2FzZSBXTEFOX0VJRF9FWFRfQ0lQX0NBUEE6XG4rXHRcdGlmIChsZW4gXHUwMDNlPSBzaXplb2YoKmVsZW1zLVx1MDAzZWNpcF9jYXApKVxuK1x0XHRcdGVsZW1zLVx1MDAzZWNpcF9jYXAgPSBkYXRhO1xuK1x0XHRicmVhaztcbiBcdGNhc2UgV0xBTl9FSURfRVhUX1VIUl9PUEVSOlxuIFx0XHRpZiAocGFyYW1zLVx1MDAzZW1vZGUgXHUwMDNjIElFRUU4MDIxMV9DT05OX01PREVfVUhSKVxuIFx0XHRcdGJyZWFrO1xuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9zdGFfaW5mby5oIGIvbmV0L21hYzgwMjExL3N0YV9pbmZvLmhcbmluZGV4IGVlMGQzMjg3N2M1YjQuLmY0MDlmNmEzYWZhMWYgMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvc3RhX2luZm8uaFxuKysrIGIvbmV0L21hYzgwMjExL3N0YV9pbmZvLmhcbkBAIC00ODUsNiArNDg1LDcgQEAgc3RydWN0IGllZWU4MDIxMV9mcmFnbWVudF9jYWNoZSB7XG4gICogQGxpbmtfaGFzaF9ub2RlOiBoYXNoIG5vZGUgZm9yIHJoYXNodGFibGVcbiAgKiBAc3RhOiBQb2ludHMgdG8gdGhlIFNUQSBpbmZvXG4gICogQGd0azogZ3JvdXAga2V5cyBuZWdvdGlhdGVkIHdpdGggdGhpcyBzdGF0aW9uLCBpZiBhbnlcbisgKiBAY2lndGs6IGNvbnRyb2wgaW50ZWdyaXR5IGdyb3VwIGtleXMgbmVnb3RpYXRlZCB3aXRoIHRoaXMgc3RhdGlvbiwgaWYgYW55XG4gICogQHR4X3N0YXRzOiBUWCBzdGF0aXN0aWNzXG4gICogQHR4X3N0YXRzLnBhY2tldHM6ICMgb2YgcGFja2V0cyB0cmFuc21pdHRlZFxuICAqIEB0eF9zdGF0cy5ieXRlczogIyBvZiBieXRlcyBpbiBhbGwgcGFja2V0cyB0cmFuc21pdHRlZFxuQEAgLTUzNSw2ICs1MzYsNyBAQCBzdHJ1Y3QgbGlua19zdGFfaW5mbyB7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2tleSBfX3JjdSAqZ3RrW05VTV9ERUZBVUxUX0tFWVMgK1xuIFx0XHRcdFx0XHROVU1fREVGQVVMVF9NR01UX0tFWVMgK1xuIFx0XHRcdFx0XHROVU1fREVGQVVMVF9CRUFDT05fS0VZU107XG4rXHRzdHJ1Y3QgaWVlZTgwMjExX2tleSBfX3JjdSAqY2lndGtbTlVNX0NUUkxfS0VZU107XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX3N0YV9yeF9zdGF0cyBfX3BlcmNwdSAqcGNwdV9yeF9zdGF0cztcbiBcbiBcdC8qIFVwZGF0ZWQgZnJvbSBSWCBwYXRoIG9ubHksIG5vIGxvY2tpbmcgcmVxdWlyZW1lbnRzICovXG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3V0aWwuYyBiL25ldC9tYWM4MDIxMS91dGlsLmNcbmluZGV4IGE5NjA3OGE2YmZhMjkuLjgzMDNmNjI0YjdmNjIgMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvdXRpbC5jXG4rKysgYi9uZXQvbWFjODAyMTEvdXRpbC5jXG5AQCAtNDY4MCw2ICs0NjgwLDI1IEBAIGludCBpZWVlODAyMTFfcHV0X3Vocl9jYXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHJldHVybiAwO1xuIH1cbiBcbitpbnQgaWVlZTgwMjExX3B1dF9jaXBfY2FwKHN0cnVjdCBza19idWZmICpza2IsXG4rXHRcdFx0ICBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcbit7XG4rXHRjb25zdCBzdHJ1Y3Qgd2lwaHlfaWZ0eXBlX2V4dF9jYXBhYiAqaWZ0X2V4dF9jYXBhID1cbitcdFx0Y2ZnODAyMTFfZ2V0X2lmdHlwZV9leHRfY2FwYShzZGF0YS1cdTAwM2Vsb2NhbC1cdTAwM2Vody53aXBoeSxcbitcdFx0XHRcdFx0ICAgICBpZWVlODAyMTFfdmlmX3R5cGVfcDJwKFx1MDAyNnNkYXRhLVx1MDAzZXZpZikpO1xuK1x0dTggY2lwX2NhcGFiaWxpdGllcyA9IGlmdF9leHRfY2FwYSA/IGlmdF9leHRfY2FwYS1cdTAwM2VjaXBfY2FwYWJpbGl0aWVzIDogMDtcbitcbitcdGlmIChza2JfdGFpbHJvb20oc2tiKSBcdTAwM2MgNClcbitcdFx0cmV0dXJuIC1FTk9CVUZTO1xuK1xuK1x0c2tiX3B1dF91OChza2IsIFdMQU5fRUlEX0VYVEVOU0lPTik7XG4rXHRza2JfcHV0X3U4KHNrYiwgMik7XG4rXHRza2JfcHV0X3U4KHNrYiwgV0xBTl9FSURfRVhUX0NJUF9DQVBBKTtcbitcdHNrYl9wdXRfdTgoc2tiLCBjaXBfY2FwYWJpbGl0aWVzKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbiBjb25zdCBjaGFyICppZWVlODAyMTFfY29ubl9tb2RlX3N0cihlbnVtIGllZWU4MDIxMV9jb25uX21vZGUgbW9kZSlcbiB7XG4gXHRzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG1vZGVzW10gPSB7XG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL2NvcmUuaCBiL25ldC93aXJlbGVzcy9jb3JlLmhcbmluZGV4IDE1ZDlmN2ViNThiNGQuLjNiOTBhYThjYzZhY2YgMTAwNjQ0XG4tLS0gYS9uZXQvd2lyZWxlc3MvY29yZS5oXG4rKysgYi9uZXQvd2lyZWxlc3MvY29yZS5oXG5AQCAtNDQzLDEzICs0NDMsMTYgQEAgdm9pZCBjZmc4MDIxMV9zbWVfYWJhbmRvbl9hc3NvYyhzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2KTtcbiBcbiAvKiBpbnRlcm5hbCBoZWxwZXJzICovXG4gYm9vbCBjZmc4MDIxMV9zdXBwb3J0ZWRfY2lwaGVyX3N1aXRlKHN0cnVjdCB3aXBoeSAqd2lwaHksIHUzMiBjaXBoZXIpO1xuK2Jvb2wgY2ZnODAyMTFfY2lndGtfc3VwcG9ydGVkKHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4rXHRcdFx0ICAgICAgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XG4gYm9vbCBjZmc4MDIxMV92YWxpZF9rZXlfaWR4KHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4tXHRcdFx0ICAgIGludCBrZXlfaWR4LCBib29sIHBhaXJ3aXNlLFxuK1x0XHRcdCAgICBpbnQga2V5X2lkeCwgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsXG4gXHRcdFx0ICAgIGNvbnN0IHU4ICptYWNfYWRkcik7XG4gaW50IGNmZzgwMjExX3ZhbGlkYXRlX2tleV9zZXR0aW5ncyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4gXHRcdFx0XHQgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuIFx0XHRcdFx0ICAgc3RydWN0IGtleV9wYXJhbXMgKnBhcmFtcywgaW50IGtleV9pZHgsXG4tXHRcdFx0XHQgICBib29sIHBhaXJ3aXNlLCBjb25zdCB1OCAqbWFjX2FkZHIpO1xuK1x0XHRcdFx0ICAgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsXG4rXHRcdFx0XHQgICBjb25zdCB1OCAqbWFjX2FkZHIpO1xuIHZvaWQgX19jZmc4MDIxMV9zY2FuX2RvbmUoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcGh5X3dvcmsgKndrKTtcbiB2b2lkIF9fX2NmZzgwMjExX3NjYW5fZG9uZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4gXHRcdFx0ICAgYm9vbCBzZW5kX21lc3NhZ2UpO1xuZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9pYnNzLmMgYi9uZXQvd2lyZWxlc3MvaWJzcy5jXG5pbmRleCBiMWQ3NDhiZGI1MDRlLi42YWU1NjFlZDdmMzdmIDEwMDY0NFxuLS0tIGEvbmV0L3dpcmVsZXNzL2lic3MuY1xuKysrIGIvbmV0L3dpcmVsZXNzL2lic3MuY1xuQEAgLTE3Miw3ICsxNzIsOCBAQCB2b2lkIGNmZzgwMjExX2NsZWFyX2lic3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBub3dleHQpXG4gXHQgKi9cbiBcdGlmIChyZGV2LVx1MDAzZW9wcy1cdTAwM2VkZWxfa2V5KVxuIFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyA2OyBpKyspXG4tXHRcdFx0cmRldl9kZWxfa2V5KHJkZXYsIHdkZXYsIC0xLCBpLCBmYWxzZSwgTlVMTCk7XG4rXHRcdFx0cmRldl9kZWxfa2V5KHJkZXYsIHdkZXYsIC0xLCBpLCBOTDgwMjExX0tFWVRZUEVfR1JPVVAsXG4rXHRcdFx0XHQgICAgIE5VTEwpO1xuIFxuIFx0aWYgKHdkZXYtXHUwMDNldS5pYnNzLmN1cnJlbnRfYnNzKSB7XG4gXHRcdGNmZzgwMjExX3VuaG9sZF9ic3Mod2Rldi1cdTAwM2V1Lmlic3MuY3VycmVudF9ic3MpO1xuZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9ubDgwMjExLmMgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXG5pbmRleCA4YWRiZWY1ZjA0NDI1Li41NjY0OGY3ZDljN2ZlIDEwMDY0NFxuLS0tIGEvbmV0L3dpcmVsZXNzL25sODAyMTEuY1xuKysrIGIvbmV0L3dpcmVsZXNzL25sODAyMTEuY1xuQEAgLTEwOTYsNiArMTA5Niw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBubDgwMjExX3BvbGljeVtOVU1fTkw4MDIxMV9BVFRSXSA9IHtcbiBcdFtOTDgwMjExX0FUVFJfTlBDQV9QVU5DVF9CSVRNQVBdID1cbiBcdFx0TkxBX1BPTElDWV9GVUxMX1JBTkdFKE5MQV9VMzIsIFx1MDAyNm5sODAyMTFfcHVuY3RfYml0bWFwX3JhbmdlKSxcbiBcdFtOTDgwMjExX0FUVFJfU1RBX0RVTVBfTElOS19TVEFUU10gPSB7IC50eXBlID0gTkxBX0ZMQUcgfSxcbitcdFtOTDgwMjExX0FUVFJfQVNTT0NfQ0lQXSA9IHsgLnR5cGUgPSBOTEFfRkxBRyB9LFxuK1x0W05MODAyMTFfQVRUUl9DSVBfQ0FQQUJJTElUSUVTXSA9IHsgLnR5cGUgPSBOTEFfVTggfSxcbiB9O1xuIFxuIC8qIHBvbGljeSBmb3IgdGhlIGtleSBhdHRyaWJ1dGVzICovXG5AQCAtMTc2MSw2ICsxNzYzLDExIEBAIHN0YXRpYyBpbnQgbmw4MDIxMV9wYXJzZV9rZXkoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgc3RydWN0IGtleV9wYXJzZSAqaylcbiBcdFx0XHRcdEdFTkxfU0VUX0VSUl9NU0coaW5mbywgXCJkZWYga2V5IGlkeCBub3QgMC0zXCIpO1xuIFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdFx0fVxuK1x0XHR9IGVsc2UgaWYgKGstXHUwMDNldHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfQ0lHVEspIHtcbitcdFx0XHRpZiAoay1cdTAwM2VpZHggXHUwMDNjIDAgfHwgay1cdTAwM2VpZHggXHUwMDNlIDEpIHtcbitcdFx0XHRcdEdFTkxfU0VUX0VSUl9NU0coaW5mbywgXCJDSUdUSyBpZHggbm90IDAtMVwiKTtcbitcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHRcdH1cbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHRpZiAoay1cdTAwM2VpZHggXHUwMDNjIDAgfHwgay1cdTAwM2VpZHggXHUwMDNlIDcpIHtcbiBcdFx0XHRcdEdFTkxfU0VUX0VSUl9NU0coaW5mbywgXCJrZXkgaWR4IG5vdCAwLTdcIik7XG5AQCAtMTgyNSw3ICsxODMyLDkgQEAgbmw4MDIxMV9wYXJzZV9jb25ua2V5cyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4gXHRcdH0gZWxzZSBpZiAocGFyc2UuZGVmbWdtdClcbiBcdFx0XHRnb3RvIGVycm9yO1xuIFx0XHRlcnIgPSBjZmc4MDIxMV92YWxpZGF0ZV9rZXlfc2V0dGluZ3MocmRldiwgd2RldiwgXHUwMDI2cGFyc2UucCxcbi1cdFx0XHRcdFx0XHQgICAgIHBhcnNlLmlkeCwgZmFsc2UsIE5VTEwpO1xuK1x0XHRcdFx0XHRcdCAgICAgcGFyc2UuaWR4LFxuK1x0XHRcdFx0XHRcdCAgICAgTkw4MDIxMV9LRVlUWVBFX0dST1VQLFxuK1x0XHRcdFx0XHRcdCAgICAgTlVMTCk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0Z290byBlcnJvcjtcbiBcdFx0aWYgKHBhcnNlLnAuY2lwaGVyICE9IFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDQwIFx1MDAyNlx1MDAyNlxuQEAgLTM2MTUsNiArMzYyNCwxMSBAQCBzdGF0aWMgaW50IG5sODAyMTFfc2VuZF93aXBoeShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4gXHRcdFx0XHRcdFx0Tkw4MDIxMV9BVFRSX0VYVF9NTERfQ0FQQV9BTkRfT1BTLFxuIFx0XHRcdFx0XHRcdGNhcGFiLVx1MDAzZWV4dF9tbGRfY2FwYV9hbmRfb3BzKSlcbiBcdFx0XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4rXHRcdFx0XHRpZiAoY2FwYWItXHUwMDNlY2lwX3N1cHBvcnRlZCBcdTAwMjZcdTAwMjZcbitcdFx0XHRcdCAgICBubGFfcHV0X3U4KG1zZyxcbitcdFx0XHRcdFx0ICAgICAgIE5MODAyMTFfQVRUUl9DSVBfQ0FQQUJJTElUSUVTLFxuK1x0XHRcdFx0XHQgICAgICAgY2FwYWItXHUwMDNlY2lwX2NhcGFiaWxpdGllcykpXG4rXHRcdFx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuIFxuIFx0XHRcdFx0bmxhX25lc3RfZW5kKG1zZywgbmVzdGVkX2V4dF9jYXBhYik7XG4gXHRcdFx0XHRpZiAoc3RhdGUtXHUwMDNlc3BsaXQpXG5AQCAtNTM3MSw2ICs1Mzg1LDcgQEAgc3RhdGljIGludCBubDgwMjExX2dldF9rZXkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBpbmZvLVx1MDAzZXVzZXJfcHRyWzFdO1xuIFx0dTgga2V5X2lkeCA9IDA7XG4gXHRjb25zdCB1OCAqbWFjX2FkZHIgPSBOVUxMO1xuK1x0ZW51bSBubDgwMjExX2tleV90eXBlIHR5cGU7XG4gXHRib29sIHBhaXJ3aXNlO1xuIFx0c3RydWN0IGdldF9rZXlfY29va2llIGNvb2tpZSA9IHtcbiBcdFx0LmVycm9yID0gMCxcbkBAIC01NDAzLDE5ICs1NDE4LDI0IEBAIHN0YXRpYyBpbnQgbmw4MDIxMV9nZXRfa2V5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRcdG1hY19hZGRyID0gbmxhX2RhdGEoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfTUFDXSk7XG4gXG4gXHRwYWlyd2lzZSA9ICEhbWFjX2FkZHI7XG4rXHR0eXBlID0gcGFpcndpc2UgPyBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0UgOiBOTDgwMjExX0tFWVRZUEVfR1JPVVA7XG4gXHRpZiAoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfS0VZX1RZUEVdKSB7XG4tXHRcdHUzMiBrdCA9IG5sYV9nZXRfdTMyKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0tFWV9UWVBFXSk7XG4rXHRcdHR5cGUgPSBubGFfZ2V0X3UzMihpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9LRVlfVFlQRV0pO1xuIFxuLVx0XHRpZiAoa3QgIT0gTkw4MDIxMV9LRVlUWVBFX0dST1VQIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAga3QgIT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFKVxuK1x0XHRpZiAodHlwZSAhPSBOTDgwMjExX0tFWVRZUEVfR1JPVVAgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICB0eXBlICE9IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIHR5cGUgIT0gTkw4MDIxMV9LRVlUWVBFX0NJR1RLKSB7XG4rXHRcdFx0R0VOTF9TRVRfRVJSX01TRyhpbmZvLCBcImtleSB0eXBlIG5vdCBwYWlyd2lzZSwgZ3JvdXAgb3IgQ0lHVEtcIik7XG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHRcdHBhaXJ3aXNlID0ga3QgPT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFO1xuK1x0XHR9XG4rXG4rXHRcdHBhaXJ3aXNlID0gdHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0U7XG4gXHR9XG4gXG4gXHRpZiAoIXJkZXYtXHUwMDNlb3BzLVx1MDAzZWdldF9rZXkpXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcbi1cdGlmICghY2ZnODAyMTFfdmFsaWRfa2V5X2lkeCh3ZGV2LCBrZXlfaWR4LCBwYWlyd2lzZSwgbWFjX2FkZHIpKVxuK1x0aWYgKCFjZmc4MDIxMV92YWxpZF9rZXlfaWR4KHdkZXYsIGtleV9pZHgsIHR5cGUsIG1hY19hZGRyKSlcbiBcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gXG4gXHRtc2cgPSBubG1zZ19uZXcoTkxNU0dfREVGQVVMVF9TSVpFLCBHRlBfS0VSTkVMKTtcbkBAIC01NDQ0LDcgKzU0NjQsNyBAQCBzdGF0aWMgaW50IG5sODAyMTFfZ2V0X2tleShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0aWYgKGVycilcbiBcdFx0Z290byBmcmVlX21zZztcbiBcbi1cdGVyciA9IHJkZXZfZ2V0X2tleShyZGV2LCB3ZGV2LCBsaW5rX2lkLCBrZXlfaWR4LCBwYWlyd2lzZSwgbWFjX2FkZHIsXG4rXHRlcnIgPSByZGV2X2dldF9rZXkocmRldiwgd2RldiwgbGlua19pZCwga2V5X2lkeCwgdHlwZSwgbWFjX2FkZHIsXG4gXHRcdFx0ICAgXHUwMDI2Y29va2llLCBnZXRfa2V5X2NhbGxiYWNrKTtcbiBcbiBcdGlmIChlcnIpXG5AQCAtNTYwMyw4ICs1NjIzLDkgQEAgc3RhdGljIGludCBubDgwMjExX25ld19rZXkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcbiBcdC8qIGZvciBub3cgKi9cbiBcdGlmIChrZXkudHlwZSAhPSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0UgXHUwMDI2XHUwMDI2XG4tXHQgICAga2V5LnR5cGUgIT0gTkw4MDIxMV9LRVlUWVBFX0dST1VQKSB7XG4tXHRcdEdFTkxfU0VUX0VSUl9NU0coaW5mbywgXCJrZXkgdHlwZSBub3QgcGFpcndpc2Ugb3IgZ3JvdXBcIik7XG4rXHQgICAga2V5LnR5cGUgIT0gTkw4MDIxMV9LRVlUWVBFX0dST1VQIFx1MDAyNlx1MDAyNlxuK1x0ICAgIGtleS50eXBlICE9IE5MODAyMTFfS0VZVFlQRV9DSUdUSykge1xuK1x0XHRHRU5MX1NFVF9FUlJfTVNHKGluZm8sIFwia2V5IHR5cGUgbm90IHBhaXJ3aXNlLCBncm91cCBvciBDSUdUS1wiKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG5AQCAtNTYxNiw4ICs1NjM3LDcgQEAgc3RhdGljIGludCBubDgwMjExX25ld19rZXkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFxuIFx0aWYgKGNmZzgwMjExX3ZhbGlkYXRlX2tleV9zZXR0aW5ncyhyZGV2LCB3ZGV2LCBcdTAwMjZrZXkucCwga2V5LmlkeCxcbi1cdFx0XHRcdFx0ICAga2V5LnR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFLFxuLVx0XHRcdFx0XHQgICBtYWNfYWRkcikpIHtcbitcdFx0XHRcdFx0ICAga2V5LnR5cGUsIG1hY19hZGRyKSkge1xuIFx0XHRHRU5MX1NFVF9FUlJfTVNHKGluZm8sIFwia2V5IHNldHRpbmcgdmFsaWRhdGlvbiBmYWlsZWRcIik7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuQEAgLTU2MzEsOCArNTY1MSw3IEBAIHN0YXRpYyBpbnQgbmw4MDIxMV9uZXdfa2V5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRcdFx0XHRrZXkudHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0UpO1xuIFxuIFx0aWYgKCFlcnIpIHtcbi1cdFx0ZXJyID0gcmRldl9hZGRfa2V5KHJkZXYsIHdkZXYsIGxpbmtfaWQsIGtleS5pZHgsXG4tXHRcdFx0XHQgICBrZXkudHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0UsXG4rXHRcdGVyciA9IHJkZXZfYWRkX2tleShyZGV2LCB3ZGV2LCBsaW5rX2lkLCBrZXkuaWR4LCBrZXkudHlwZSxcbiBcdFx0XHRcdCAgICBtYWNfYWRkciwgXHUwMDI2a2V5LnApO1xuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdEdFTkxfU0VUX0VSUl9NU0coaW5mbywgXCJrZXkgYWRkaXRpb24gZmFpbGVkXCIpO1xuQEAgLTU2NjYsMTIgKzU2ODUsMTMgQEAgc3RhdGljIGludCBubDgwMjExX2RlbF9rZXkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcbiBcdC8qIGZvciBub3cgKi9cbiBcdGlmIChrZXkudHlwZSAhPSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0UgXHUwMDI2XHUwMDI2XG4tXHQgICAga2V5LnR5cGUgIT0gTkw4MDIxMV9LRVlUWVBFX0dST1VQKVxuK1x0ICAgIGtleS50eXBlICE9IE5MODAyMTFfS0VZVFlQRV9HUk9VUCBcdTAwMjZcdTAwMjZcbitcdCAgICBrZXkudHlwZSAhPSBOTDgwMjExX0tFWVRZUEVfQ0lHVEspIHtcbitcdFx0R0VOTF9TRVRfRVJSX01TRyhpbmZvLCBcImtleSB0eXBlIG5vdCBwYWlyd2lzZSwgZ3JvdXAgb3IgQ0lHVEtcIik7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuIFxuLVx0aWYgKCFjZmc4MDIxMV92YWxpZF9rZXlfaWR4KHdkZXYsIGtleS5pZHgsXG4tXHRcdFx0XHQgICAga2V5LnR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFLFxuLVx0XHRcdFx0ICAgIG1hY19hZGRyKSlcbitcdGlmICghY2ZnODAyMTFfdmFsaWRfa2V5X2lkeCh3ZGV2LCBrZXkuaWR4LCBrZXkudHlwZSwgbWFjX2FkZHIpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdGlmICghcmRldi1cdTAwM2VvcHMtXHUwMDNlZGVsX2tleSlcbkBAIC01Njg1LDggKzU3MDUsNyBAQCBzdGF0aWMgaW50IG5sODAyMTFfZGVsX2tleShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFxuIFx0aWYgKCFlcnIpXG4gXHRcdGVyciA9IHJkZXZfZGVsX2tleShyZGV2LCB3ZGV2LCBsaW5rX2lkLCBrZXkuaWR4LFxuLVx0XHRcdFx0ICAga2V5LnR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFLFxuLVx0XHRcdFx0ICAgbWFjX2FkZHIpO1xuK1x0XHRcdFx0ICAga2V5LnR5cGUsIG1hY19hZGRyKTtcbiBcbiAjaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcbiBcdGlmICghZXJyKSB7XG5AQCAtODgwNSw3ICs4ODI0LDcgQEAgaW50IGNmZzgwMjExX2NoZWNrX3N0YXRpb25fY2hhbmdlKHN0cnVjdCB3aXBoeSAqd2lwaHksXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0LyogV2hlbiB5b3UgcnVuIGludG8gdGhpcywgYWRqdXN0IHRoZSBjb2RlIGJlbG93IGZvciB0aGUgbmV3IGZsYWcgKi9cbi1cdEJVSUxEX0JVR19PTihOTDgwMjExX1NUQV9GTEFHX01BWCAhPSA4KTtcbitcdEJVSUxEX0JVR19PTihOTDgwMjExX1NUQV9GTEFHX01BWCAhPSA5KTtcbiBcbiBcdHN3aXRjaCAoc3RhdHlwZSkge1xuIFx0Y2FzZSBDRkc4MDIxMV9TVEFfTUVTSF9QRUVSX0tFUk5FTDpcbkBAIC04ODk5LDcgKzg5MTgsOCBAQCBpbnQgY2ZnODAyMTFfY2hlY2tfc3RhdGlvbl9jaGFuZ2Uoc3RydWN0IHdpcGh5ICp3aXBoeSxcbiBcdFx0XHRcdCAgQklUKE5MODAyMTFfU1RBX0ZMQUdfU0hPUlRfUFJFQU1CTEUpIHxcbiBcdFx0XHRcdCAgQklUKE5MODAyMTFfU1RBX0ZMQUdfV01FKSB8XG4gXHRcdFx0XHQgIEJJVChOTDgwMjExX1NUQV9GTEFHX01GUCkgfFxuLVx0XHRcdFx0ICBCSVQoTkw4MDIxMV9TVEFfRkxBR19TUFBfQU1TRFUpKSlcbitcdFx0XHRcdCAgQklUKE5MODAyMTFfU1RBX0ZMQUdfU1BQX0FNU0RVKSB8XG4rXHRcdFx0XHQgIEJJVChOTDgwMjExX1NUQV9GTEFHX0NJUCkpKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0XHQvKiBidXQgYXV0aGVudGljYXRlZC9hc3NvY2lhdGVkIG9ubHkgaWYgZHJpdmVyIGhhbmRsZXMgaXQgKi9cbkBAIC05Mjc2LDYgKzkyOTYsMjIgQEAgc3RhdGljIGludCBubDgwMjExX3NldF9zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRcdFx0bmxhX2dldF91MTYoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfRU1MX0NBUEFCSUxJVFldKTtcbiBcdH1cbiBcbitcdGlmIChwYXJhbXMuc3RhX2ZsYWdzX21hc2sgXHUwMDI2IEJJVChOTDgwMjExX1NUQV9GTEFHX0NJUCkgXHUwMDI2XHUwMDI2XG4rXHQgICAgcGFyYW1zLnN0YV9mbGFnc19zZXQgXHUwMDI2IEJJVChOTDgwMjExX1NUQV9GTEFHX0NJUCkpIHtcbitcdFx0aWYgKCFjZmc4MDIxMV9jaWd0a19zdXBwb3J0ZWQod2RldiwgaW5mbykpXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRcdC8qIENJUCBjYXBhYmlsaXRpZXMgYXJlIHJlcXVpcmVkIGlmIENJUCBpcyBiZWluZyBlbmFibGVkICovXG4rXHRcdGlmIChpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9DSVBfQ0FQQUJJTElUSUVTXSkge1xuK1x0XHRcdHBhcmFtcy5saW5rX3N0YV9wYXJhbXMuY2lwX2NhcF9zZXQgPSB0cnVlO1xuK1x0XHRcdHBhcmFtcy5saW5rX3N0YV9wYXJhbXMuY2lwX2NhcCA9XG4rXHRcdFx0XHRubGFfZ2V0X3U4KGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0NJUF9DQVBBQklMSVRJRVNdKTtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRHRU5MX1NFVF9FUlJfTVNHKGluZm8sIFwiTm8gQ0lQIGNhcGFiaWxpdGllcyBwcm92aWRlZFwiKTtcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0fVxuK1x0fVxuK1xuIFx0aWYgKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0FJUlRJTUVfV0VJR0hUXSlcbiBcdFx0cGFyYW1zLmFpcnRpbWVfd2VpZ2h0ID1cbiBcdFx0XHRubGFfZ2V0X3UxNihpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9BSVJUSU1FX1dFSUdIVF0pO1xuQEAgLTk0NzUsNiArOTUxMSwyMiBAQCBzdGF0aWMgaW50IG5sODAyMTFfbmV3X3N0YXRpb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdFx0XHRubGFfZ2V0X3UxNihpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9FTUxfQ0FQQUJJTElUWV0pO1xuIFx0fVxuIFxuK1x0aWYgKHBhcmFtcy5zdGFfZmxhZ3NfbWFzayBcdTAwMjYgQklUKE5MODAyMTFfU1RBX0ZMQUdfQ0lQKSBcdTAwMjZcdTAwMjZcbitcdCAgICBwYXJhbXMuc3RhX2ZsYWdzX3NldCBcdTAwMjYgQklUKE5MODAyMTFfU1RBX0ZMQUdfQ0lQKSkge1xuK1x0XHRpZiAoIWNmZzgwMjExX2NpZ3RrX3N1cHBvcnRlZCh3ZGV2LCBpbmZvKSlcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdFx0LyogQ0lQIGNhcGFiaWxpdGllcyBhcmUgcmVxdWlyZWQgaWYgQ0lQIGlzIGVuYWJsZWQgKi9cbitcdFx0aWYgKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0NJUF9DQVBBQklMSVRJRVNdKSB7XG4rXHRcdFx0cGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5jaXBfY2FwX3NldCA9IHRydWU7XG4rXHRcdFx0cGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5jaXBfY2FwID1cbitcdFx0XHRcdG5sYV9nZXRfdTgoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfQ0lQX0NBUEFCSUxJVElFU10pO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdEdFTkxfU0VUX0VSUl9NU0coaW5mbywgXCJObyBDSVAgY2FwYWJpbGl0aWVzIHByb3ZpZGVkXCIpO1xuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHR9XG4rXHR9XG4rXG4gXHRpZiAoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfSEVfNkdIWl9DQVBBQklMSVRZXSlcbiBcdFx0cGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5oZV82Z2h6X2NhcGEgPVxuIFx0XHRcdG5sYV9kYXRhKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0hFXzZHSFpfQ0FQQUJJTElUWV0pO1xuQEAgLTk1NTIsNyArOTYwNCw3IEBAIHN0YXRpYyBpbnQgbmw4MDIxMV9uZXdfc3RhdGlvbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdC8qIFdoZW4geW91IHJ1biBpbnRvIHRoaXMsIGFkanVzdCB0aGUgY29kZSBiZWxvdyBmb3IgdGhlIG5ldyBmbGFnICovXG4tXHRCVUlMRF9CVUdfT04oTkw4MDIxMV9TVEFfRkxBR19NQVggIT0gOCk7XG4rXHRCVUlMRF9CVUdfT04oTkw4MDIxMV9TVEFfRkxBR19NQVggIT0gOSk7XG4gXG4gXHRzd2l0Y2ggKHdkZXYtXHUwMDNlaWZ0eXBlKSB7XG4gXHRjYXNlIE5MODAyMTFfSUZUWVBFX0FQOlxuQEAgLTk1ODEsNiArOTYzMywxMCBAQCBzdGF0aWMgaW50IG5sODAyMTFfbmV3X3N0YXRpb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdFx0ICAgIHBhcmFtcy5zdGFfZmxhZ3NfbWFzayBcdTAwMjYgQklUKE5MODAyMTFfU1RBX0ZMQUdfU1BQX0FNU0RVKSlcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbitcdFx0aWYgKHBhcmFtcy5zdGFfZmxhZ3NfbWFzayBcdTAwMjYgQklUKE5MODAyMTFfU1RBX0ZMQUdfQ0lQKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICFjZmc4MDIxMV9jaWd0a19zdXBwb3J0ZWQod2RldiwgaW5mbykpXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4gXHRcdC8qIE9sZGVyIHVzZXJzcGFjZSwgb3IgdXNlcnNwYWNlIHdhbnRpbmcgdG8gYmUgY29tcGF0aWJsZSB3aXRoXG4gXHRcdCAqICFOTDgwMjExX0ZFQVRVUkVfRlVMTF9BUF9DTElFTlRfU1RBVEUsIHdpbGwgbm90IHNldCB0aGUgYXV0aFxuIFx0XHQgKiBhbmQgYXNzb2MgZmxhZ3MgaW4gdGhlIG1hc2ssIGJ1dCBhc3N1bWVzIHRoZSBzdGF0aW9uIHdpbGwgYmVcbkBAIC0xMzMwNyw2ICsxMzM2MywxMyBAQCBzdGF0aWMgaW50IG5sODAyMTFfYXNzb2NpYXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRcdHJlcS5mbGFncyB8PSBBU1NPQ19SRVFfU1BQX0FNU0RVO1xuIFx0fVxuIFxuK1x0aWYgKG5sYV9nZXRfZmxhZyhpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9BU1NPQ19DSVBdKSkge1xuK1x0XHRpZiAoIWNmZzgwMjExX2NpZ3RrX3N1cHBvcnRlZChkZXYtXHUwMDNlaWVlZTgwMjExX3B0ciwgaW5mbykpXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRcdHJlcS5mbGFncyB8PSBBU1NPQ19SRVFfQ0lQO1xuK1x0fVxuK1xuIFx0cmVxLmxpbmtfaWQgPSBubDgwMjExX2xpbmtfaWRfb3JfaW52YWxpZChpbmZvLVx1MDAzZWF0dHJzKTtcbiBcbiBcdGlmIChpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9NTE9fTElOS1NdKSB7XG5AQCAtMTkxNzQsNiArMTkyMzcsMjMgQEAgbmw4MDIxMV9hZGRfbW9kX2xpbmtfc3RhdGlvbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxuIFx0XHRwYXJhbXMuaGVfNmdoel9jYXBhID1cbiBcdFx0XHRubGFfZGF0YShpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9IRV82R0haX0NBUEFCSUxJVFldKTtcbiBcbitcdGlmIChpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9DSVBfQ0FQQUJJTElUSUVTXSkge1xuK1x0XHRzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LVx1MDAzZWllZWU4MDIxMV9wdHI7XG4rXG4rXHRcdGlmICghY2ZnODAyMTFfY2lndGtfc3VwcG9ydGVkKHdkZXYsIGluZm8pKVxuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0XHRwYXJhbXMuY2lwX2NhcF9zZXQgPSB0cnVlO1xuK1x0XHRwYXJhbXMuY2lwX2NhcCA9XG4rXHRcdFx0bmxhX2dldF91OChpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9DSVBfQ0FQQUJJTElUSUVTXSk7XG4rXG4rXHRcdC8qIE9ubHkgcGVybWl0IENJUCBjYXBhYmlsaXRpZXMgd2hlbiBhZGRpbmcgbGluayBzdGF0aW9ucyAqL1xuK1x0XHRpZiAoIWFkZCkge1xuK1x0XHRcdEdFTkxfU0VUX0VSUl9NU0coaW5mbywgXCJDYW5ub3QgbW9kaWZ5IENJUCBjYXBhYmlsaXRpZXNcIik7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbitcdH1cbitcbiBcdGlmIChpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9PUE1PREVfTk9USUZdKSB7XG4gXHRcdHBhcmFtcy5vcG1vZGVfbm90aWZfdXNlZCA9IHRydWU7XG4gXHRcdHBhcmFtcy5vcG1vZGVfbm90aWYgPVxuZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9yZGV2LW9wcy5oIGIvbmV0L3dpcmVsZXNzL3JkZXYtb3BzLmhcbmluZGV4IDZjM2JhZDhiMmQ2ZjYuLmQ0OTMzYmJiZjBlN2UgMTAwNjQ0XG4tLS0gYS9uZXQvd2lyZWxlc3MvcmRldi1vcHMuaFxuKysrIGIvbmV0L3dpcmVsZXNzL3JkZXYtb3BzLmhcbkBAIC03OCw0MiArNzgsNDMgQEAgcmRldl9jaGFuZ2VfdmlydHVhbF9pbnRmKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbiBcbiBzdGF0aWMgaW5saW5lIGludCByZGV2X2FkZF9rZXkoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuIFx0XHRcdCAgICAgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LCBpbnQgbGlua19pZCxcbi1cdFx0XHQgICAgICAgdTgga2V5X2luZGV4LCBib29sIHBhaXJ3aXNlLCBjb25zdCB1OCAqbWFjX2FkZHIsXG4tXHRcdFx0ICAgICAgIHN0cnVjdCBrZXlfcGFyYW1zICpwYXJhbXMpXG4rXHRcdFx0ICAgICAgIHU4IGtleV9pbmRleCwgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsXG4rXHRcdFx0ICAgICAgIGNvbnN0IHU4ICptYWNfYWRkciwgc3RydWN0IGtleV9wYXJhbXMgKnBhcmFtcylcbiB7XG4gXHRpbnQgcmV0O1xuLVx0dHJhY2VfcmRldl9hZGRfa2V5KFx1MDAyNnJkZXYtXHUwMDNld2lwaHksIHdkZXYsIGxpbmtfaWQsIGtleV9pbmRleCwgcGFpcndpc2UsXG4rXHR0cmFjZV9yZGV2X2FkZF9rZXkoXHUwMDI2cmRldi1cdTAwM2V3aXBoeSwgd2RldiwgbGlua19pZCwga2V5X2luZGV4LCB0eXBlLFxuIFx0XHRcdCAgIG1hY19hZGRyLCBwYXJhbXMtXHUwMDNlbW9kZSk7XG4gXHRyZXQgPSByZGV2LVx1MDAzZW9wcy1cdTAwM2VhZGRfa2V5KFx1MDAyNnJkZXYtXHUwMDNld2lwaHksIHdkZXYsIGxpbmtfaWQsIGtleV9pbmRleCxcbi1cdFx0XHRcdCAgcGFpcndpc2UsIG1hY19hZGRyLCBwYXJhbXMpO1xuK1x0XHRcdFx0ICB0eXBlLCBtYWNfYWRkciwgcGFyYW1zKTtcbiBcdHRyYWNlX3JkZXZfcmV0dXJuX2ludChcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LCByZXQpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIGlubGluZSBpbnRcbiByZGV2X2dldF9rZXkoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuLVx0ICAgICBpbnQgbGlua19pZCwgdTgga2V5X2luZGV4LCBib29sIHBhaXJ3aXNlLCBjb25zdCB1OCAqbWFjX2FkZHIsXG4tXHQgICAgIHZvaWQgKmNvb2tpZSxcbitcdCAgICAgaW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCwgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsXG4rXHQgICAgIGNvbnN0IHU4ICptYWNfYWRkciwgdm9pZCAqY29va2llLFxuIFx0ICAgICB2b2lkICgqY2FsbGJhY2spKHZvaWQgKmNvb2tpZSwgc3RydWN0IGtleV9wYXJhbXMqKSlcbiB7XG4gXHRpbnQgcmV0O1xuLVx0dHJhY2VfcmRldl9nZXRfa2V5KFx1MDAyNnJkZXYtXHUwMDNld2lwaHksIHdkZXYsIGxpbmtfaWQsIGtleV9pbmRleCwgcGFpcndpc2UsXG4rXHR0cmFjZV9yZGV2X2dldF9rZXkoXHUwMDI2cmRldi1cdTAwM2V3aXBoeSwgd2RldiwgbGlua19pZCwga2V5X2luZGV4LCB0eXBlLFxuIFx0XHRcdCAgIG1hY19hZGRyKTtcbiBcdHJldCA9IHJkZXYtXHUwMDNlb3BzLVx1MDAzZWdldF9rZXkoXHUwMDI2cmRldi1cdTAwM2V3aXBoeSwgd2RldiwgbGlua19pZCwga2V5X2luZGV4LFxuLVx0XHRcdFx0ICBwYWlyd2lzZSwgbWFjX2FkZHIsIGNvb2tpZSwgY2FsbGJhY2spO1xuK1x0XHRcdFx0IHR5cGUsIG1hY19hZGRyLCBjb29raWUsIGNhbGxiYWNrKTtcbiBcdHRyYWNlX3JkZXZfcmV0dXJuX2ludChcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LCByZXQpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIGlubGluZSBpbnQgcmRldl9kZWxfa2V5KHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbiBcdFx0XHQgICAgICAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwgaW50IGxpbmtfaWQsXG4tXHRcdFx0ICAgICAgIHU4IGtleV9pbmRleCwgYm9vbCBwYWlyd2lzZSwgY29uc3QgdTggKm1hY19hZGRyKVxuK1x0XHRcdCAgICAgICB1OCBrZXlfaW5kZXgsIGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLFxuK1x0XHRcdCAgICAgICBjb25zdCB1OCAqbWFjX2FkZHIpXG4ge1xuIFx0aW50IHJldDtcbi1cdHRyYWNlX3JkZXZfZGVsX2tleShcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LCB3ZGV2LCBsaW5rX2lkLCBrZXlfaW5kZXgsIHBhaXJ3aXNlLFxuK1x0dHJhY2VfcmRldl9kZWxfa2V5KFx1MDAyNnJkZXYtXHUwMDNld2lwaHksIHdkZXYsIGxpbmtfaWQsIGtleV9pbmRleCwgdHlwZSxcbiBcdFx0XHQgICBtYWNfYWRkcik7XG4gXHRyZXQgPSByZGV2LVx1MDAzZW9wcy1cdTAwM2VkZWxfa2V5KFx1MDAyNnJkZXYtXHUwMDNld2lwaHksIHdkZXYsIGxpbmtfaWQsIGtleV9pbmRleCxcbi1cdFx0XHRcdCAgcGFpcndpc2UsIG1hY19hZGRyKTtcbitcdFx0XHRcdCAgdHlwZSwgbWFjX2FkZHIpO1xuIFx0dHJhY2VfcmRldl9yZXR1cm5faW50KFx1MDAyNnJkZXYtXHUwMDNld2lwaHksIHJldCk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvc21lLmMgYi9uZXQvd2lyZWxlc3Mvc21lLmNcbmluZGV4IDJhNzE5YjVjNDg3ZTMuLjQ1OGY3MmQ4MzUxYWIgMTAwNjQ0XG4tLS0gYS9uZXQvd2lyZWxlc3Mvc21lLmNcbisrKyBiL25ldC93aXJlbGVzcy9zbWUuY1xuQEAgLTEzODcsNyArMTM4NywxNSBAQCB2b2lkIF9fY2ZnODAyMTFfZGlzY29ubmVjdGVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICppZSxcbiBcdFx0XHQgICAgTkw4MDIxMV9FWFRfRkVBVFVSRV9CRUFDT05fUFJPVEVDVElPTl9DTElFTlQpKVxuIFx0XHRcdG1heF9rZXlfaWR4ID0gNztcbiBcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2M9IG1heF9rZXlfaWR4OyBpKyspXG4tXHRcdFx0cmRldl9kZWxfa2V5KHJkZXYsIHdkZXYsIC0xLCBpLCBmYWxzZSwgTlVMTCk7XG4rXHRcdFx0cmRldl9kZWxfa2V5KHJkZXYsIHdkZXYsIC0xLCBpLCBOTDgwMjExX0tFWVRZUEVfR1JPVVAsXG4rXHRcdFx0XHQgICAgIE5VTEwpO1xuK1xuK1x0XHRpZiAoY2ZnODAyMTFfY2lndGtfc3VwcG9ydGVkKHdkZXYsIE5VTEwpKSB7XG4rXHRcdFx0cmRldl9kZWxfa2V5KHJkZXYsIHdkZXYsIC0xLCAwLCBOTDgwMjExX0tFWVRZUEVfQ0lHVEssXG4rXHRcdFx0XHQgICAgIE5VTEwpO1xuK1x0XHRcdHJkZXZfZGVsX2tleShyZGV2LCB3ZGV2LCAtMSwgMSwgTkw4MDIxMV9LRVlUWVBFX0NJR1RLLFxuK1x0XHRcdFx0ICAgICBOVUxMKTtcbitcdFx0fVxuIFx0fVxuIFxuIFx0cmRldl9zZXRfcW9zX21hcChyZGV2LCBkZXYsIE5VTEwpO1xuZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy90cmFjZS5oIGIvbmV0L3dpcmVsZXNzL3RyYWNlLmhcbmluZGV4IDhjMmE5MWI4NWMzOTYuLmMyMTBjYTFlNDRlMmIgMTAwNjQ0XG4tLS0gYS9uZXQvd2lyZWxlc3MvdHJhY2UuaFxuKysrIGIvbmV0L3dpcmVsZXNzL3RyYWNlLmhcbkBAIC01NTcsMTUgKzU1NywxNSBAQCBUUkFDRV9FVkVOVChyZGV2X2NoYW5nZV92aXJ0dWFsX2ludGYsXG4gXG4gREVDTEFSRV9FVkVOVF9DTEFTUyhrZXlfaGFuZGxlLFxuIFx0VFBfUFJPVE8oc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwgaW50IGxpbmtfaWQsXG4tXHRcdCB1OCBrZXlfaW5kZXgsIGJvb2wgcGFpcndpc2UsIGNvbnN0IHU4ICptYWNfYWRkciksXG4tXHRUUF9BUkdTKHdpcGh5LCB3ZGV2LCBsaW5rX2lkLCBrZXlfaW5kZXgsIHBhaXJ3aXNlLCBtYWNfYWRkciksXG4rXHRcdCB1OCBrZXlfaW5kZXgsIGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLCBjb25zdCB1OCAqbWFjX2FkZHIpLFxuK1x0VFBfQVJHUyh3aXBoeSwgd2RldiwgbGlua19pZCwga2V5X2luZGV4LCB0eXBlLCBtYWNfYWRkciksXG4gXHRUUF9TVFJVQ1RfX2VudHJ5KFxuIFx0XHRXSVBIWV9FTlRSWVxuIFx0XHRXREVWX0VOVFJZXG4gXHRcdE1BQ19FTlRSWShtYWNfYWRkcilcbiBcdFx0X19maWVsZChpbnQsIGxpbmtfaWQpXG4gXHRcdF9fZmllbGQodTgsIGtleV9pbmRleClcbi1cdFx0X19maWVsZChib29sLCBwYWlyd2lzZSlcbitcdFx0X19maWVsZCh1OCwgdHlwZSlcbiBcdCksXG4gXHRUUF9mYXN0X2Fzc2lnbihcbiBcdFx0V0lQSFlfQVNTSUdOO1xuQEAgLTU3MywzOCArNTczLDQwIEBAIERFQ0xBUkVfRVZFTlRfQ0xBU1Moa2V5X2hhbmRsZSxcbiBcdFx0TUFDX0FTU0lHTihtYWNfYWRkciwgbWFjX2FkZHIpO1xuIFx0XHRfX2VudHJ5LVx1MDAzZWxpbmtfaWQgPSBsaW5rX2lkO1xuIFx0XHRfX2VudHJ5LVx1MDAzZWtleV9pbmRleCA9IGtleV9pbmRleDtcbi1cdFx0X19lbnRyeS1cdTAwM2VwYWlyd2lzZSA9IHBhaXJ3aXNlO1xuK1x0XHRfX2VudHJ5LVx1MDAzZXR5cGUgPSB0eXBlO1xuIFx0KSxcbiBcdFRQX3ByaW50ayhXSVBIWV9QUl9GTVQgXCIsIFwiIFdERVZfUFJfRk1UIFwiLCBsaW5rX2lkOiAlZCwgXCJcbi1cdFx0ICBcImtleV9pbmRleDogJXUsIHBhaXJ3aXNlOiAlcywgbWFjIGFkZHI6ICVwTVwiLFxuK1x0XHQgIFwia2V5X2luZGV4OiAldSwgcGFpcndpc2U6ICVzLCB0eXBlOiAlZCwgbWFjIGFkZHI6ICVwTVwiLFxuIFx0XHQgIFdJUEhZX1BSX0FSRywgV0RFVl9QUl9BUkcsIF9fZW50cnktXHUwMDNlbGlua19pZCxcbi1cdFx0ICBfX2VudHJ5LVx1MDAzZWtleV9pbmRleCwgQk9PTF9UT19TVFIoX19lbnRyeS1cdTAwM2VwYWlyd2lzZSksXG4tXHRcdCAgX19lbnRyeS1cdTAwM2VtYWNfYWRkcilcbitcdFx0ICBfX2VudHJ5LVx1MDAzZWtleV9pbmRleCxcbitcdFx0ICBCT09MX1RPX1NUUihfX2VudHJ5LVx1MDAzZXR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFKSxcbitcdFx0ICBfX2VudHJ5LVx1MDAzZXR5cGUsIF9fZW50cnktXHUwMDNlbWFjX2FkZHIpXG4gKTtcbiBcbiBERUZJTkVfRVZFTlQoa2V5X2hhbmRsZSwgcmRldl9nZXRfa2V5LFxuIFx0VFBfUFJPVE8oc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwgaW50IGxpbmtfaWQsXG4tXHRcdCB1OCBrZXlfaW5kZXgsIGJvb2wgcGFpcndpc2UsIGNvbnN0IHU4ICptYWNfYWRkciksXG4tXHRUUF9BUkdTKHdpcGh5LCB3ZGV2LCBsaW5rX2lkLCBrZXlfaW5kZXgsIHBhaXJ3aXNlLCBtYWNfYWRkcilcbitcdFx0IHU4IGtleV9pbmRleCwgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsIGNvbnN0IHU4ICptYWNfYWRkciksXG4rXHRUUF9BUkdTKHdpcGh5LCB3ZGV2LCBsaW5rX2lkLCBrZXlfaW5kZXgsIHR5cGUsIG1hY19hZGRyKVxuICk7XG4gXG4gREVGSU5FX0VWRU5UKGtleV9oYW5kbGUsIHJkZXZfZGVsX2tleSxcbiBcdFRQX1BST1RPKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsIGludCBsaW5rX2lkLFxuLVx0XHQgdTgga2V5X2luZGV4LCBib29sIHBhaXJ3aXNlLCBjb25zdCB1OCAqbWFjX2FkZHIpLFxuLVx0VFBfQVJHUyh3aXBoeSwgd2RldiwgbGlua19pZCwga2V5X2luZGV4LCBwYWlyd2lzZSwgbWFjX2FkZHIpXG4rXHRcdCB1OCBrZXlfaW5kZXgsIGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLCBjb25zdCB1OCAqbWFjX2FkZHIpLFxuK1x0VFBfQVJHUyh3aXBoeSwgd2RldiwgbGlua19pZCwga2V5X2luZGV4LCB0eXBlLCBtYWNfYWRkcilcbiApO1xuIFxuIFRSQUNFX0VWRU5UKHJkZXZfYWRkX2tleSxcbiBcdFRQX1BST1RPKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsIGludCBsaW5rX2lkLFxuLVx0XHQgdTgga2V5X2luZGV4LCBib29sIHBhaXJ3aXNlLCBjb25zdCB1OCAqbWFjX2FkZHIsIHU4IG1vZGUpLFxuLVx0VFBfQVJHUyh3aXBoeSwgd2RldiwgbGlua19pZCwga2V5X2luZGV4LCBwYWlyd2lzZSwgbWFjX2FkZHIsIG1vZGUpLFxuK1x0XHQgdTgga2V5X2luZGV4LCBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSwgY29uc3QgdTggKm1hY19hZGRyLFxuK1x0XHQgdTggbW9kZSksXG4rXHRUUF9BUkdTKHdpcGh5LCB3ZGV2LCBsaW5rX2lkLCBrZXlfaW5kZXgsIHR5cGUsIG1hY19hZGRyLCBtb2RlKSxcbiBcdFRQX1NUUlVDVF9fZW50cnkoXG4gXHRcdFdJUEhZX0VOVFJZXG4gXHRcdFdERVZfRU5UUllcbiBcdFx0TUFDX0VOVFJZKG1hY19hZGRyKVxuIFx0XHRfX2ZpZWxkKGludCwgbGlua19pZClcbiBcdFx0X19maWVsZCh1OCwga2V5X2luZGV4KVxuLVx0XHRfX2ZpZWxkKGJvb2wsIHBhaXJ3aXNlKVxuK1x0XHRfX2ZpZWxkKHU4LCB0eXBlKVxuIFx0XHRfX2ZpZWxkKHU4LCBtb2RlKVxuIFx0KSxcbiBcdFRQX2Zhc3RfYXNzaWduKFxuQEAgLTYxMywxNSArNjE1LDE2IEBAIFRSQUNFX0VWRU5UKHJkZXZfYWRkX2tleSxcbiBcdFx0TUFDX0FTU0lHTihtYWNfYWRkciwgbWFjX2FkZHIpO1xuIFx0XHRfX2VudHJ5LVx1MDAzZWxpbmtfaWQgPSBsaW5rX2lkO1xuIFx0XHRfX2VudHJ5LVx1MDAzZWtleV9pbmRleCA9IGtleV9pbmRleDtcbi1cdFx0X19lbnRyeS1cdTAwM2VwYWlyd2lzZSA9IHBhaXJ3aXNlO1xuK1x0XHRfX2VudHJ5LVx1MDAzZXR5cGUgPSB0eXBlO1xuIFx0XHRfX2VudHJ5LVx1MDAzZW1vZGUgPSBtb2RlO1xuIFx0KSxcbiBcdFRQX3ByaW50ayhXSVBIWV9QUl9GTVQgXCIsIFwiIFdERVZfUFJfRk1UIFwiLCBsaW5rX2lkOiAlZCwgXCJcbi1cdFx0ICBcImtleV9pbmRleDogJXUsIG1vZGU6ICV1LCBwYWlyd2lzZTogJXMsIFwiXG4rXHRcdCAgXCJrZXlfaW5kZXg6ICV1LCBtb2RlOiAldSwgcGFpcndpc2U6ICVzLCB0eXBlOiAlZCwgXCJcbiBcdFx0ICBcIm1hYyBhZGRyOiAlcE1cIixcbiBcdFx0ICBXSVBIWV9QUl9BUkcsIFdERVZfUFJfQVJHLCBfX2VudHJ5LVx1MDAzZWxpbmtfaWQsXG4gXHRcdCAgX19lbnRyeS1cdTAwM2VrZXlfaW5kZXgsIF9fZW50cnktXHUwMDNlbW9kZSxcbi1cdFx0ICBCT09MX1RPX1NUUihfX2VudHJ5LVx1MDAzZXBhaXJ3aXNlKSwgX19lbnRyeS1cdTAwM2VtYWNfYWRkcilcbitcdFx0ICBCT09MX1RPX1NUUihfX2VudHJ5LVx1MDAzZXR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFKSxcbitcdFx0ICBfX2VudHJ5LVx1MDAzZXR5cGUsIF9fZW50cnktXHUwMDNlbWFjX2FkZHIpXG4gKTtcbiBcbiBUUkFDRV9FVkVOVChyZGV2X3NldF9kZWZhdWx0X2tleSxcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvdXRpbC5jIGIvbmV0L3dpcmVsZXNzL3V0aWwuY1xuaW5kZXggM2U1ODRkMGNhM2UyNi4uZGQxNjZjMzUyOTEwZiAxMDA2NDRcbi0tLSBhL25ldC93aXJlbGVzcy91dGlsLmNcbisrKyBiL25ldC93aXJlbGVzcy91dGlsLmNcbkBAIC0yNTgsOCArMjU4LDI0IEBAIHN0YXRpYyBib29sIGNmZzgwMjExX2lndGtfY2lwaGVyX3N1cHBvcnRlZChzdHJ1Y3Qgd2lwaHkgKndpcGh5KVxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbitib29sIGNmZzgwMjExX2NpZ3RrX3N1cHBvcnRlZChzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuK1x0XHRcdCAgICAgIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4re1xuK1x0Y29uc3Qgc3RydWN0IHdpcGh5X2lmdHlwZV9leHRfY2FwYWIgKmV4dF9jYXBhYiA9XG4rXHRcdGNmZzgwMjExX2dldF9pZnR5cGVfZXh0X2NhcGEod2Rldi1cdTAwM2V3aXBoeSwgd2Rldi1cdTAwM2VpZnR5cGUpO1xuK1xuK1x0aWYgKGV4dF9jYXBhYiBcdTAwMjZcdTAwMjYgZXh0X2NhcGFiLVx1MDAzZWNpcF9zdXBwb3J0ZWQpXG4rXHRcdHJldHVybiB0cnVlO1xuK1xuK1x0aWYgKGluZm8pXG4rXHRcdEdFTkxfU0VUX0VSUl9NU0coaW5mbyxcbitcdFx0XHRcdCBcIkNvbnRyb2wgSW50ZWdyaXR5IFByb3RvY29sIG5vdCBzdXBwb3J0ZWRcIik7XG4rXG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuIGJvb2wgY2ZnODAyMTFfdmFsaWRfa2V5X2lkeChzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuLVx0XHRcdCAgICBpbnQga2V5X2lkeCwgYm9vbCBwYWlyd2lzZSxcbitcdFx0XHQgICAgaW50IGtleV9pZHgsIGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLFxuIFx0XHRcdCAgICBjb25zdCB1OCAqbWFjX2FkZHIpXG4ge1xuIFx0aWYgKFdBUk5fT04oIXdkZXYpKVxuQEAgLTI3MiwxMyArMjg4LDI0IEBAIGJvb2wgY2ZnODAyMTFfdmFsaWRfa2V5X2lkeChzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuIFx0ICogQ2FuJ3QgZGlmZmVyZW50aWF0ZSBjaXBoZXJzIGhlcmUgc28gYWxsb3cgMC4uMy5cbiBcdCAqIFBhaXJ3aXNlIGtleXMgbXVzdCBiZSBmb3IgYSBzdGF0aW9uIChNQUMgYWRkcmVzcyBnaXZlbikuXG4gXHQgKi9cbi1cdGlmIChwYWlyd2lzZSkge1xuK1x0aWYgKHR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFKSB7XG4gXHRcdGlmICghbWFjX2FkZHIpXG4gXHRcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0XHRyZXR1cm4ga2V5X2lkeCBcdTAwM2MgNDtcbiBcdH1cbiBcbitcdC8qIENoZWNrIHRoZSB3ZGV2L2lmdHlwZSBzdXBwb3J0cyBDSUdUSyAqL1xuK1x0aWYgKHR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX0NJR1RLKSB7XG4rXHRcdGlmICghY2ZnODAyMTFfY2lndGtfc3VwcG9ydGVkKHdkZXYsIE5VTEwpKVxuK1x0XHRcdHJldHVybiBmYWxzZTtcbitcbitcdFx0aWYgKGtleV9pZHggXHUwMDNlPSAyKVxuK1x0XHRcdHJldHVybiBmYWxzZTtcbitcbitcdFx0LyogZmFsbHRocm91Z2ggZm9yIG1hY19hZGRyIGNoZWNrcyAqL1xuK1x0fVxuK1xuIFx0LypcbiBcdCAqIEZvciBncm91cCBrZXlzLCBtYWNfYWRkcj09TlVMTCBtZWFucyBzZXR0aW5nIGEgZ3JvdXAga2V5XG4gXHQgKiBmb3IgVFgsIHdoaWNoIGlzIG9ubHkgc3VwcG9ydGVkIG9uIHNvbWUgaW50ZXJmYWNlIHR5cGVzLFxuQEAgLTM0Myw5ICszNzAsMTIgQEAgYm9vbCBjZmc4MDIxMV92YWxpZF9rZXlfaWR4KHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4gaW50IGNmZzgwMjExX3ZhbGlkYXRlX2tleV9zZXR0aW5ncyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4gXHRcdFx0XHQgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuIFx0XHRcdFx0ICAgc3RydWN0IGtleV9wYXJhbXMgKnBhcmFtcywgaW50IGtleV9pZHgsXG4tXHRcdFx0XHQgICBib29sIHBhaXJ3aXNlLCBjb25zdCB1OCAqbWFjX2FkZHIpXG4rXHRcdFx0XHQgICBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSxcbitcdFx0XHRcdCAgIGNvbnN0IHU4ICptYWNfYWRkcilcbiB7XG4tXHRpZiAoIWNmZzgwMjExX3ZhbGlkX2tleV9pZHgod2Rldiwga2V5X2lkeCwgcGFpcndpc2UsIG1hY19hZGRyKSlcbitcdGJvb2wgcGFpcndpc2UgPSB0eXBlID09IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRTtcbitcbitcdGlmICghY2ZnODAyMTFfdmFsaWRfa2V5X2lkeCh3ZGV2LCBrZXlfaWR4LCB0eXBlLCBtYWNfYWRkcikpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0c3dpdGNoIChwYXJhbXMtXHUwMDNlY2lwaGVyKSB7XG5AQCAtMTE3Miw3ICsxMjAyLDcgQEAgdm9pZCBjZmc4MDIxMV91cGxvYWRfY29ubmVjdF9rZXlzKHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYpXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyA0OyBpKyspIHtcbiBcdFx0aWYgKCF3ZGV2LVx1MDAzZWNvbm5lY3Rfa2V5cy1cdTAwM2VwYXJhbXNbaV0uY2lwaGVyKVxuIFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRpZiAocmRldl9hZGRfa2V5KHJkZXYsIHdkZXYsIC0xLCBpLCBmYWxzZSwgTlVMTCxcbitcdFx0aWYgKHJkZXZfYWRkX2tleShyZGV2LCB3ZGV2LCAtMSwgaSwgTkw4MDIxMV9LRVlUWVBFX0dST1VQLCBOVUxMLFxuIFx0XHRcdFx0IFx1MDAyNndkZXYtXHUwMDNlY29ubmVjdF9rZXlzLVx1MDAzZXBhcmFtc1tpXSkpIHtcbiBcdFx0XHRuZXRkZXZfZXJyKGRldiwgXCJmYWlsZWQgdG8gc2V0IGtleSAlZFxcblwiLCBpKTtcbiBcdFx0XHRjb250aW51ZTtcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvd2V4dC1jb21wYXQuYyBiL25ldC93aXJlbGVzcy93ZXh0LWNvbXBhdC5jXG5pbmRleCBkNDViYzA4YzBkZTQ5Li5lYzIzODlmNmI4YjE4IDEwMDY0NFxuLS0tIGEvbmV0L3dpcmVsZXNzL3dleHQtY29tcGF0LmNcbisrKyBiL25ldC93aXJlbGVzcy93ZXh0LWNvbXBhdC5jXG5AQCAtNDAxLDYgKzQwMSw4IEBAIHN0YXRpYyBpbnQgY2ZnODAyMTFfc2V0X2VuY3J5cHRpb24oc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuIFx0XHRcdFx0ICAgaW50IGlkeCwgc3RydWN0IGtleV9wYXJhbXMgKnBhcmFtcylcbiB7XG4gXHRzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LVx1MDAzZWllZWU4MDIxMV9wdHI7XG4rXHRlbnVtIG5sODAyMTFfa2V5X3R5cGUga2V5X3R5cGUgPVxuK1x0XHRwYWlyd2lzZSA/IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRSA6IE5MODAyMTFfS0VZVFlQRV9HUk9VUDtcbiBcdGludCBlcnIsIGk7XG4gXHRib29sIHJlam9pbiA9IGZhbHNlO1xuIFxuQEAgLTQ1NCwxMSArNDU2LDExIEBAIHN0YXRpYyBpbnQgY2ZnODAyMTFfc2V0X2VuY3J5cHRpb24oc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuIFx0XHRcdFx0cmVqb2luID0gdHJ1ZTtcbiBcdFx0XHR9XG4gXG4tXHRcdFx0aWYgKCFjZmc4MDIxMV92YWxpZF9rZXlfaWR4KHdkZXYsIGlkeCwgcGFpcndpc2UsIGFkZHIpKVxuK1x0XHRcdGlmICghY2ZnODAyMTFfdmFsaWRfa2V5X2lkeCh3ZGV2LCBpZHgsIGtleV90eXBlLCBhZGRyKSlcbiBcdFx0XHRcdGVyciA9IC1FTk9FTlQ7XG4gXHRcdFx0ZWxzZVxuLVx0XHRcdFx0ZXJyID0gcmRldl9kZWxfa2V5KHJkZXYsIHdkZXYsIC0xLCBpZHgsIHBhaXJ3aXNlLFxuLVx0XHRcdFx0XHRcdCAgIGFkZHIpO1xuK1x0XHRcdFx0ZXJyID0gcmRldl9kZWxfa2V5KHJkZXYsIHdkZXYsIC0xLCBpZHgsXG4rXHRcdFx0XHRcdFx0ICAga2V5X3R5cGUsIGFkZHIpO1xuIFx0XHR9XG4gXHRcdHdkZXYtXHUwMDNld2V4dC5jb25uZWN0LnByaXZhY3kgPSBmYWxzZTtcbiBcdFx0LypcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIwOjAyOjI2LjY5NzU1NjYzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjUyMDcyMDQxOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ0lQIFN1cHBvcnQgaW4gbWFjODAyMTEgYW5kIGNmZzgwMjExOiBGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBkZWZpbml0ZWx5IGFkZGluZyBzaWduaWZpY2FudCBuZXcgZnVuY3Rpb25hbGl0eSBmb3IgQ29udHJvbCBJbnRlZ3JpdHkgUHJvdG9jb2wgKENJUCkgc3VwcG9ydCB3aXRoaW4gdGhlIHdpcmVsZXNzIHN0YWNrLiBJIHNlZSB0aGUgYWRkaXRpb24gb2YgYE5MODAyMTFfS0VZVFlQRV9DSUdUS2AsIGFuZCBtb2RpZmljYXRpb25zIHRvIGBjZmc4MDIxMV9vcHNgIHRvIGFjY29tbW9kYXRlIHRoZSBuZXcgQ0lQIGtleSB0eXBlLCB3aGljaCBuYXR1cmFsbHkgYWx0ZXJzIHRoZSBgYWRkX2tleWAsIGBnZXRfa2V5YCwgYW5kIGBkZWxfa2V5YCBvcGVyYXRpb25zLiBJJ20gYWxzbyBub3RpY2luZyBuZXcgbmV0bGluayBhdHRyaWJ1dGVzIChgTkw4MDIxMV9BVFRSX0FTU09DX0NJUGAsIGBOTDgwMjExX0FUVFJfQ0lQX0NBUEFCSUxJVElFU2AsIGBOTDgwMjExX1NUQV9GTEFHX0NJUGApIGFuZCBtb2RpZmljYXRpb25zIHdpdGhpbiBgbWFjODAyMTFgIGl0c2VsZiB0byBwcm9jZXNzIENJUCBrZXlzLCBpbmNsdWRpbmcgdGhlIGludHJvZHVjdGlvbiBvZiBgSUVFRTgwMjExX0tFWV9GTEFHX0NJUGAsIGFuZCBoYW5kbGluZyB0aGUgYGNpZ3RrYCBhcnJheS5cblxuQSBrZXkgaW5kaWNhdG9yIGZvciBmdXp6aW5nIGlzIHRoZSBpbnRlZ3JhdGlvbiBvZiBDSVAgc3VwcG9ydCBpbnRvIGBtYWM4MDIxMV9od3NpbWAuIFRoZSBwYXRjaCBleHBsaWNpdGx5IGVuYWJsZXMgYG1hYzgwMjExX2h3c2ltYCB0byB0ZXN0IHRoaXMgZmVhdHVyZS4gVGhpcyBtZWFucyBJIGhhdmUgYSByZWFkaWx5IGF2YWlsYWJsZSBlbnZpcm9ubWVudCB0byB2YWxpZGF0ZSBhbmQgZXhwbG9yZSB0aGUgaW1wbGVtZW50YXRpb24uXG5cblRoZSBjaGFuZ2VzIGluIGBubDgwMjExLmNgIHRvIGhhbmRsZSB0aGUgbmV3IGF0dHJpYnV0ZXMgYW5kIGtleSB0eXBlcywgYW5kIHRoZSBhZGp1c3RtZW50cyBpbiBgbWFjODAyMTFgIHRvIHBhcnNlIGBXTEFOX0VJRF9FWFRfQ0lQX0NBUEFgIGFyZSBnb29kIGluZGljYXRpb25zIG9mIGFyZWFzIHRoYXQgd2FycmFudCBhdHRlbnRpb24uIFNvLCBnaXZlbiB0aGVzZSBmdW5jdGlvbmFsIGNoYW5nZXMsIHRoaXMgcGF0Y2ggaXMgYWJzb2x1dGVseSB3b3J0aCBmdXp6aW5nLlxuXG5NeSBwcmltYXJ5IGZvY3VzIHBvaW50cyBmb3IgZnV6emluZyB3b3VsZCBiZSB0aGUgbmV0bGluayBlbnRyeSBwb2ludHMsIHRoZXNlIGFyZSB0aGUgZXhwb3NlZCBlbnRyeSBwb2ludHMuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0OlxuKiAgIGBubDgwMjExX25ld19rZXlgXG4qICAgYG5sODAyMTFfZGVsX2tleWBcbiogICBgbmw4MDIxMV9nZXRfa2V5YFxuKiAgIGBubDgwMjExX3NldF9zdGF0aW9uYFxuKiAgIGBubDgwMjExX25ld19zdGF0aW9uYFxuKiAgIGBubDgwMjExX2Fzc29jaWF0ZWBcblxuVGhlIGtlcm5lbC1pbnRlcm5hbCBlbnRyeSBwb2ludHMgdGhhdCB3b3VsZCBhbHNvIGJlIGludGVyZXN0aW5nIGluY2x1ZGU6XG4qICAgYGllZWU4MDIxMV9rZXlfbGlua2BcbiogICBgaWVlZTgwMjExX2d0a19yZWtleV9hZGRgXG4qICAgYGllZWU4MDIxMV9wdXRfY2lwX2NhcGBcbiogICBgY2ZnODAyMTFfY2lndGtfc3VwcG9ydGVkYFxuKiAgIGBjZmc4MDIxMV92YWxpZF9rZXlfaWR4YFxuKiAgIGBjZmc4MDIxMV92YWxpZGF0ZV9rZXlfc2V0dGluZ3NgXG5cbkluIHRlcm1zIG9mIGNvbmZpZ3VyYXRpb24sIEknbGwgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIGBDT05GSUdfQ0ZHODAyMTFgLCBgQ09ORklHX01BQzgwMjExYCBhbmQgYENPTkZJR19NQUM4MDIxMV9IV1NJTWAgZW5hYmxlZCwgd2hpY2ggYXJlIHN0YW5kYXJkIGZvciB3aXJlbGVzcyB0ZXN0aW5nIGFuZCBmdXp6aW5nLlxuXG5UaGUgY2hhbmdlcyBpbiBgbWFjODAyMTFfaHdzaW1faWZ0eXBlc19leHRfY2FwYWAgdG8gYWRkIGBjaXBfc3VwcG9ydGVkID0gdHJ1ZWAgbWFrZXMgaXQgcGVyZmVjdCBmb3IgbG9jYWwgdGVzdGluZyBvZiB0aGlzIG5ldyBmdW5jdGlvbmFsaXR5LCBzbyB0aGF0IHdpbGwgbWFrZSB2YWxpZGF0aW9uIGEgbG90IGVhc2llci4gQWxsIG9mIHRoaXMgc2hvdWxkIGJlIGRvYWJsZSwgYW5kIGl0IGxvb2tzIGxpa2UgYSBnb29kIHRhcmdldC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIyNDYsIk91dHB1dFRva2VucyI6MzM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcwNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIwOjAyOjUxLjkwNDc2MzI4NFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMyMTEyMzA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNQUM4MDIxMVwiLFxuICAgIFwiQ0ZHODAyMTFcIixcbiAgICBcIk1BQzgwMjExX0hXU0lNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmw4MDIxMV9uZXdfa2V5XCIsXG4gICAgXCJubDgwMjExX2RlbF9rZXlcIixcbiAgICBcIm5sODAyMTFfZ2V0X2tleVwiLFxuICAgIFwibmw4MDIxMV9zZXRfc3RhdGlvblwiLFxuICAgIFwibmw4MDIxMV9uZXdfc3RhdGlvblwiLFxuICAgIFwibmw4MDIxMV9hc3NvY2lhdGVcIixcbiAgICBcImllZWU4MDIxMV9rZXlfbGlua1wiLFxuICAgIFwiaWVlZTgwMjExX2d0a19yZWtleV9hZGRcIixcbiAgICBcImllZWU4MDIxMV9wdXRfY2lwX2NhcFwiLFxuICAgIFwiY2ZnODAyMTFfY2lndGtfc3VwcG9ydGVkXCIsXG4gICAgXCJjZmc4MDIxMV92YWxpZF9rZXlfaWR4XCIsXG4gICAgXCJjZmc4MDIxMV92YWxpZGF0ZV9rZXlfc2V0dGluZ3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIHRoZSBDb250cm9sIEludGVncml0eSBQcm90b2NvbCAoQ0lQKSBpbiBjZmc4MDIxMSBhbmQgbWFjODAyMTEsIGluY2x1ZGluZyBhIG5ldyBrZXkgdHlwZSBgTkw4MDIxMV9LRVlUWVBFX0NJR1RLYCBhbmQgbmV3IG5ldGxpbmsgYXR0cmlidXRlcy4gSXQgbW9kaWZpZXMga2V5IGhhbmRsaW5nIGxvZ2ljIGFjcm9zcyB0aGUgd2lyZWxlc3Mgc3RhY2sgYW5kIHVwZGF0ZXMgYG1hYzgwMjExX2h3c2ltYCB0byBhZHZlcnRpc2UgQ0lQIHN1cHBvcnQsIG1ha2luZyBpdCB0ZXN0YWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRoZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgdmlhIHN0YW5kYXJkIG5sODAyMTEgbmV0bGluayBjb21tYW5kcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNQUM4MDIxMVwiLFxuICAgIFwiQ0ZHODAyMTFcIixcbiAgICBcIk1BQzgwMjExX0hXU0lNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmw4MDIxMV9uZXdfa2V5XCIsXG4gICAgXCJubDgwMjExX2RlbF9rZXlcIixcbiAgICBcIm5sODAyMTFfZ2V0X2tleVwiLFxuICAgIFwibmw4MDIxMV9zZXRfc3RhdGlvblwiLFxuICAgIFwibmw4MDIxMV9uZXdfc3RhdGlvblwiLFxuICAgIFwibmw4MDIxMV9hc3NvY2lhdGVcIixcbiAgICBcImllZWU4MDIxMV9rZXlfbGlua1wiLFxuICAgIFwiaWVlZTgwMjExX2d0a19yZWtleV9hZGRcIixcbiAgICBcImllZWU4MDIxMV9wdXRfY2lwX2NhcFwiLFxuICAgIFwiY2ZnODAyMTFfY2lndGtfc3VwcG9ydGVkXCIsXG4gICAgXCJjZmc4MDIxMV92YWxpZF9rZXlfaWR4XCIsXG4gICAgXCJjZmc4MDIxMV92YWxpZGF0ZV9rZXlfc2V0dGluZ3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIHRoZSBDb250cm9sIEludGVncml0eSBQcm90b2NvbCAoQ0lQKSBpbiBjZmc4MDIxMSBhbmQgbWFjODAyMTEsIGluY2x1ZGluZyBhIG5ldyBrZXkgdHlwZSBgTkw4MDIxMV9LRVlUWVBFX0NJR1RLYCBhbmQgbmV3IG5ldGxpbmsgYXR0cmlidXRlcy4gSXQgbW9kaWZpZXMga2V5IGhhbmRsaW5nIGxvZ2ljIGFjcm9zcyB0aGUgd2lyZWxlc3Mgc3RhY2sgYW5kIHVwZGF0ZXMgYG1hYzgwMjExX2h3c2ltYCB0byBhZHZlcnRpc2UgQ0lQIHN1cHBvcnQsIG1ha2luZyBpdCB0ZXN0YWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRoZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgdmlhIHN0YW5kYXJkIG5sODAyMTEgbmV0bGluayBjb21tYW5kcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowpj4pc[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-01 19:47:38 +0000 UTC FinishedAt: 2026-08-01 20:02:53 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "4a0bd262df757b25fc4e2a53c947317c119ced4e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MAC80211", "CFG80211", "MAC80211_HWSIM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "4a0bd262df757b25fc4e2a53c947317c119ced4e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MAC80211", "CFG80211", "MAC80211_HWSIM" ], "series_id": "6c8d765f-7457-43c7-89aa-b020bd662634" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nl80211_new_key", "nl80211_del_key", "nl80211_get_key", "nl80211_set_station", "nl80211_new_station", "nl80211_associate", "ieee80211_key_link", "ieee80211_gtk_rekey_add", "ieee80211_put_cip_cap", "cfg80211_cigtk_supported", "cfg80211_valid_key_idx", "cfg80211_validate_key_settings" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIwOjAyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O0NGRzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExX0hXU0lNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmw4MDIxMV9uZXdfa2V5JiMzNDssCiAgICAmIzM0O25sODAyMTFfZGVsX2tleSYjMzQ7LAogICAgJiMzNDtubDgwMjExX2dldF9rZXkmIzM0OywKICAgICYjMzQ7bmw4MDIxMV9zZXRfc3RhdGlvbiYjMzQ7LAogICAgJiMzNDtubDgwMjExX25ld19zdGF0aW9uJiMzNDssCiAgICAmIzM0O25sODAyMTFfYXNzb2NpYXRlJiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9rZXlfbGluayYjMzQ7LAogICAgJiMzNDtpZWVlODAyMTFfZ3RrX3Jla2V5X2FkZCYjMzQ7LAogICAgJiMzNDtpZWVlODAyMTFfcHV0X2NpcF9jYXAmIzM0OywKICAgICYjMzQ7Y2ZnODAyMTFfY2lndGtfc3VwcG9ydGVkJiMzNDssCiAgICAmIzM0O2NmZzgwMjExX3ZhbGlkX2tleV9pZHgmIzM0OywKICAgICYjMzQ7Y2ZnODAyMTFfdmFsaWRhdGVfa2V5X3NldHRpbmdzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgdGhlIENvbnRyb2wgSW50ZWdyaXR5IFByb3RvY29sIChDSVApIGluIGNmZzgwMjExIGFuZCBtYWM4MDIxMSwgaW5jbHVkaW5nIGEgbmV3IGtleSB0eXBlIGBOTDgwMjExX0tFWVRZUEVfQ0lHVEtgIGFuZCBuZXcgbmV0bGluayBhdHRyaWJ1dGVzLiBJdCBtb2RpZmllcyBrZXkgaGFuZGxpbmcgbG9naWMgYWNyb3NzIHRoZSB3aXJlbGVzcyBzdGFjayBhbmQgdXBkYXRlcyBgbWFjODAyMTFfaHdzaW1gIHRvIGFkdmVydGlzZSBDSVAgc3VwcG9ydCwgbWFraW5nIGl0IHRlc3RhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgbmw4MDIxMSBuZXRsaW5rIGNvbW1hbmRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIwOjAyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZjliNGQ5ZDM1MmM3MDIyNTM5YzMwMmRkMDUxOGUyMjYwMzc1OWQyMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDEgMjA6MDI6MjUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jZmc4MDIxMS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jZmc4MDIxMS5jXG5pbmRleCBlY2RlOTExNTliNTQ2Li5kNGU5NDIzZmM1ZTRkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jZmc4MDIxMS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NmZzgwMjExLmNcbkBAIC0xMTI1LDEzICYjNDM7MTEyNSwxNSBAQCB2b2lkIGF0aDZrbF9jZmc4MDIxMV9jaF9zd2l0Y2hfbm90aWZ5KHN0cnVjdCBhdGg2a2xfdmlmICp2aWYsIGludCBmcmVxLFxuIH1cbiBcbiBzdGF0aWMgaW50IGF0aDZrbF9jZmc4MDIxMV9hZGRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4tXHRcdFx0XHQgICBpbnQgbGlua19pZCwgdTgga2V5X2luZGV4LCBib29sIHBhaXJ3aXNlLFxuJiM0MztcdFx0XHRcdCAgIGludCBsaW5rX2lkLCB1OCBrZXlfaW5kZXgsXG4mIzQzO1x0XHRcdFx0ICAgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsXG4gXHRcdFx0XHQgICBjb25zdCB1OCAqbWFjX2FkZHIsXG4gXHRcdFx0XHQgICBzdHJ1Y3Qga2V5X3BhcmFtcyAqcGFyYW1zKVxuIHtcbiBcdHN0cnVjdCBhdGg2a2wgKmFyID0gYXRoNmtsX3ByaXYod2Rldi1cdTAwM2VuZXRkZXYpO1xuIFx0c3RydWN0IGF0aDZrbF92aWYgKnZpZiA9IG5ldGRldl9wcml2KHdkZXYtXHUwMDNlbmV0ZGV2KTtcbiBcdHN0cnVjdCBhdGg2a2xfa2V5ICprZXkgPSBOVUxMO1xuJiM0MztcdGJvb2wgcGFpcndpc2UgPSB0eXBlID09IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRTtcbiBcdGludCBzZXFfbGVuO1xuIFx0dTgga2V5X3VzYWdlO1xuIFx0dTgga2V5X3R5cGU7XG5AQCAtMTI1MCw3ICYjNDM7MTI1Miw4IEBAIHN0YXRpYyBpbnQgYXRoNmtsX2NmZzgwMjExX2FkZF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RlXG4gfVxuIFxuIHN0YXRpYyBpbnQgYXRoNmtsX2NmZzgwMjExX2RlbF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldixcbi1cdFx0XHRcdCAgIGludCBsaW5rX2lkLCB1OCBrZXlfaW5kZXgsIGJvb2wgcGFpcndpc2UsXG4mIzQzO1x0XHRcdFx0ICAgaW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCxcbiYjNDM7XHRcdFx0XHQgICBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSxcbiBcdFx0XHRcdCAgIGNvbnN0IHU4ICptYWNfYWRkcilcbiB7XG4gXHRzdHJ1Y3QgYXRoNmtsICphciA9IGF0aDZrbF9wcml2KHdkZXYtXHUwMDNlbmV0ZGV2KTtcbkBAIC0xMjgwLDcgJiM0MzsxMjgzLDggQEAgc3RhdGljIGludCBhdGg2a2xfY2ZnODAyMTFfZGVsX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGVcbiB9XG4gXG4gc3RhdGljIGludCBhdGg2a2xfY2ZnODAyMTFfZ2V0X2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuLVx0XHRcdFx0ICAgaW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCwgYm9vbCBwYWlyd2lzZSxcbiYjNDM7XHRcdFx0XHQgICBpbnQgbGlua19pZCwgdTgga2V5X2luZGV4LFxuJiM0MztcdFx0XHRcdCAgIGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLFxuIFx0XHRcdFx0ICAgY29uc3QgdTggKm1hY19hZGRyLCB2b2lkICpjb29raWUsXG4gXHRcdFx0XHQgICB2b2lkICgqY2FsbGJhY2spICh2b2lkICpjb29raWUsXG4gXHRcdFx0XHRcdFx0ICAgICBzdHJ1Y3Qga2V5X3BhcmFtcyAqKSlcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvd2lsNjIxMC9jZmc4MDIxMS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3dpbDYyMTAvY2ZnODAyMTEuY1xuaW5kZXggNWYyYmQ5YTMxZmFmNi4uYzA5NzgzMWI3ZmFmMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC93aWw2MjEwL2NmZzgwMjExLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC93aWw2MjEwL2NmZzgwMjExLmNcbkBAIC0xNjIxLDExICYjNDM7MTYyMSwxMyBAQCBzdGF0aWMgdm9pZCB3aWxfZGVsX3J4X2tleSh1OCBrZXlfaW5kZXgsIGVudW0gd21pX2tleV91c2FnZSBrZXlfdXNhZ2UsXG4gXG4gc3RhdGljIGludCB3aWxfY2ZnODAyMTFfYWRkX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxuIFx0XHRcdFx0c3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwgaW50IGxpbmtfaWQsXG4tXHRcdFx0XHR1OCBrZXlfaW5kZXgsIGJvb2wgcGFpcndpc2UsXG4mIzQzO1x0XHRcdFx0dTgga2V5X2luZGV4LFxuJiM0MztcdFx0XHRcdGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLFxuIFx0XHRcdFx0Y29uc3QgdTggKm1hY19hZGRyLFxuIFx0XHRcdFx0c3RydWN0IGtleV9wYXJhbXMgKnBhcmFtcylcbiB7XG4gXHRpbnQgcmM7XG4mIzQzO1x0Ym9vbCBwYWlyd2lzZSA9IHR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFO1xuIFx0c3RydWN0IHdpbDYyMTBfcHJpdiAqd2lsID0gd2lwaHlfdG9fd2lsKHdpcGh5KTtcbiBcdHN0cnVjdCB3aWw2MjEwX3ZpZiAqdmlmID0gd2Rldl90b192aWYod2lsLCB3ZGV2KTtcbiBcdGVudW0gd21pX2tleV91c2FnZSBrZXlfdXNhZ2UgPSB3aWxfZGV0ZWN0X2tleV91c2FnZSh3ZGV2LCBwYWlyd2lzZSk7XG5AQCAtMTY5NiwxMiAmIzQzOzE2OTgsMTQgQEAgc3RhdGljIGludCB3aWxfY2ZnODAyMTFfYWRkX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxuIFxuIHN0YXRpYyBpbnQgd2lsX2NmZzgwMjExX2RlbF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSxcbiBcdFx0XHRcdHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsIGludCBsaW5rX2lkLFxuLVx0XHRcdFx0dTgga2V5X2luZGV4LCBib29sIHBhaXJ3aXNlLFxuJiM0MztcdFx0XHRcdHU4IGtleV9pbmRleCxcbiYjNDM7XHRcdFx0XHRlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSxcbiBcdFx0XHRcdGNvbnN0IHU4ICptYWNfYWRkcilcbiB7XG4gXHRzdHJ1Y3Qgd2lsNjIxMF9wcml2ICp3aWwgPSB3aXBoeV90b193aWwod2lwaHkpO1xuIFx0c3RydWN0IHdpbDYyMTBfdmlmICp2aWYgPSB3ZGV2X3RvX3ZpZih3aWwsIHdkZXYpO1xuLVx0ZW51bSB3bWlfa2V5X3VzYWdlIGtleV91c2FnZSA9IHdpbF9kZXRlY3Rfa2V5X3VzYWdlKHdkZXYsIHBhaXJ3aXNlKTtcbiYjNDM7XHRlbnVtIHdtaV9rZXlfdXNhZ2Uga2V5X3VzYWdlID1cbiYjNDM7XHRcdHdpbF9kZXRlY3Rfa2V5X3VzYWdlKHdkZXYsIHR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFKTtcbiBcdHN0cnVjdCB3aWxfc3RhX2luZm8gKmNzID0gd2lsX2ZpbmRfc3RhX2J5X2tleV91c2FnZSh3aWwsIHZpZi1cdTAwM2VtaWQsXG4gXHRcdFx0XHRcdFx0XHQgICAga2V5X3VzYWdlLFxuIFx0XHRcdFx0XHRcdFx0ICAgIG1hY19hZGRyKTtcbkBAIC0yMDcyLDcgJiM0MzsyMDc2LDggQEAgdm9pZCB3aWxfY2ZnODAyMTFfYXBfcmVjb3Zlcnkoc3RydWN0IHdpbDYyMTBfcHJpdiAqd2lsKVxuIFx0XHRrZXlfcGFyYW1zLnNlcV9sZW4gPSBJRUVFODAyMTFfR0NNUF9QTl9MRU47XG4gXHRcdHJjID0gd2lsX2NmZzgwMjExX2FkZF9rZXkod2lwaHksIHZpZl90b193ZGV2KHZpZiksIC0xLFxuIFx0XHRcdFx0XHQgIHZpZi1cdTAwM2VndGtfaW5kZXgsXG4tXHRcdFx0XHRcdCAgZmFsc2UsIE5VTEwsIFx1MDAyNmtleV9wYXJhbXMpO1xuJiM0MztcdFx0XHRcdFx0ICBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0UsXG4mIzQzO1x0XHRcdFx0XHQgIE5VTEwsIFx1MDAyNmtleV9wYXJhbXMpO1xuIFx0XHRpZiAocmMpXG4gXHRcdFx0d2lsX2Vycih3aWwsIFwmIzM0O3ZpZiAlZCByZWNvdmVyeSBhZGQga2V5IGZhaWxlZCAoJWQpXFxuXCYjMzQ7LFxuIFx0XHRcdFx0aSwgcmMpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmNcbmluZGV4IDZiMmMzNGUzYTc5NmMuLjc4NWZkNTdkN2M2Y2MgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmNcbkBAIC0yNzcwLDcgJiM0MzsyNzcwLDggQEAgYnJjbWZfY2ZnODAyMTFfY29uZmlnX2RlZmF1bHRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuIFxuIHN0YXRpYyBzMzJcbiBicmNtZl9jZmc4MDIxMV9kZWxfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4tXHRcdCAgICAgICBpbnQgbGlua19pZCwgdTgga2V5X2lkeCwgYm9vbCBwYWlyd2lzZSxcbiYjNDM7XHRcdCAgICAgICBpbnQgbGlua19pZCwgdTgga2V5X2lkeCxcbiYjNDM7XHRcdCAgICAgICBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSxcbiBcdFx0ICAgICAgIGNvbnN0IHU4ICptYWNfYWRkcilcbiB7XG4gXHRzdHJ1Y3QgYnJjbWZfaWYgKmlmcCA9IG5ldGRldl9wcml2KHdkZXYtXHUwMDNlbmV0ZGV2KTtcbkBAIC0yODA4LDcgJiM0MzsyODA5LDggQEAgYnJjbWZfY2ZnODAyMTFfZGVsX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuIFxuIHN0YXRpYyBzMzJcbiBicmNtZl9jZmc4MDIxMV9hZGRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4tXHRcdCAgICAgICBpbnQgbGlua19pZCwgdTgga2V5X2lkeCwgYm9vbCBwYWlyd2lzZSxcbiYjNDM7XHRcdCAgICAgICBpbnQgbGlua19pZCwgdTgga2V5X2lkeCxcbiYjNDM7XHRcdCAgICAgICBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSxcbiBcdFx0ICAgICAgIGNvbnN0IHU4ICptYWNfYWRkciwgc3RydWN0IGtleV9wYXJhbXMgKnBhcmFtcylcbiB7XG4gXHRzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfaW5mbyAqY2ZnID0gd2lwaHlfdG9fY2ZnKHdpcGh5KTtcbkBAIC0yODM0LDcgJiM0MzsyODM2LDcgQEAgYnJjbWZfY2ZnODAyMTFfYWRkX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuIFxuIFx0aWYgKHBhcmFtcy1cdTAwM2VrZXlfbGVuID09IDApXG4gXHRcdHJldHVybiBicmNtZl9jZmc4MDIxMV9kZWxfa2V5KHdpcGh5LCB3ZGV2LCAtMSwga2V5X2lkeCxcbi1cdFx0XHRcdFx0ICAgICAgcGFpcndpc2UsIG1hY19hZGRyKTtcbiYjNDM7XHRcdFx0XHRcdCAgICAgIHR5cGUsIG1hY19hZGRyKTtcbiBcbiBcdGlmIChwYXJhbXMtXHUwMDNla2V5X2xlbiBcdTAwM2Ugc2l6ZW9mKGtleS1cdTAwM2VkYXRhKSkge1xuIFx0XHRicGh5X2VycihkcnZyLCBcJiMzNDtUb28gbG9uZyBrZXkgbGVuZ3RoICgldSlcXG5cJiMzNDssIHBhcmFtcy1cdTAwM2VrZXlfbGVuKTtcbkBAIC0yOTMwLDcgJiM0MzsyOTMyLDggQEAgYnJjbWZfY2ZnODAyMTFfYWRkX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuIFxuIHN0YXRpYyBzMzJcbiBicmNtZl9jZmc4MDIxMV9nZXRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4tXHRcdCAgICAgICBpbnQgbGlua19pZCwgdTgga2V5X2lkeCwgYm9vbCBwYWlyd2lzZSxcbiYjNDM7XHRcdCAgICAgICBpbnQgbGlua19pZCwgdTgga2V5X2lkeCxcbiYjNDM7XHRcdCAgICAgICBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSxcbiBcdFx0ICAgICAgIGNvbnN0IHU4ICptYWNfYWRkciwgdm9pZCAqY29va2llLFxuIFx0XHQgICAgICAgdm9pZCAoKmNhbGxiYWNrKSh2b2lkICpjb29raWUsXG4gXHRcdFx0XHRcdHN0cnVjdCBrZXlfcGFyYW1zICpwYXJhbXMpKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL2QzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9kMy5jXG5pbmRleCA1NWY5YjgwOWU3NjRkLi42ZDhlZGUzMzZkNTliIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvZDMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvZDMuY1xuQEAgLTExMzgsNyAmIzQzOzExMzgsOCBAQCBpd2xfbWxkX2FkZF9tY2FzdF9yZWtleShzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxuIFx0XHRyZXR1cm47XG4gXG4gXHRrZXlfY29uZmlnID0gaWVlZTgwMjExX2d0a19yZWtleV9hZGQodmlmLCBrZXlfZGF0YS1cdTAwM2VpZCwga2V5X2RhdGEtXHUwMDNla2V5LFxuLVx0XHRcdFx0XHQgICAgIHNpemVvZihrZXlfZGF0YS1cdTAwM2VrZXkpLCBsaW5rX2lkKTtcbiYjNDM7XHRcdFx0XHRcdCAgICAgc2l6ZW9mKGtleV9kYXRhLVx1MDAzZWtleSksIGxpbmtfaWQsXG4mIzQzO1x0XHRcdFx0XHQgICAgIGZhbHNlKTtcbiBcdGlmIChJU19FUlIoa2V5X2NvbmZpZykpXG4gXHRcdHJldHVybjtcbiBcbkBAIC0xMjIwLDcgJiM0MzsxMjIxLDggQEAgc3RhdGljIHZvaWQgaXdsX21sZF9tbG9fcmVrZXkoc3RydWN0IGl3bF9tbGQgKm1sZCxcbiBcdFx0XHRcdCBtbG9fa2V5LVx1MDAzZWlkeCwgbGlua19pZCk7XG4gXG4gXHRcdGtleSA9IGllZWU4MDIxMV9ndGtfcmVrZXlfYWRkKHZpZiwgbWxvX2tleS1cdTAwM2VpZHgsIG1sb19rZXktXHUwMDNla2V5LFxuLVx0XHRcdFx0XHQgICAgICBzaXplb2YobWxvX2tleS1cdTAwM2VrZXkpLCBsaW5rX2lkKTtcbiYjNDM7XHRcdFx0XHRcdCAgICAgIHNpemVvZihtbG9fa2V5LVx1MDAzZWtleSksIGxpbmtfaWQsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBmYWxzZSk7XG4gXG4gXHRcdGlmIChJU19FUlIoa2V5KSlcbiBcdFx0XHRjb250aW51ZTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9kMy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vZDMuY1xuaW5kZXggNmIxMWZhMzJlYTVjNi4uYmQ1MmYyZWJkM2JhMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL2QzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL2QzLmNcbkBAIC0xODg3LDcgJiM0MzsxODg3LDggQEAgc3RhdGljIGJvb2wgaXdsX212bV9ndGtfcmVrZXkoc3RydWN0IGl3bF93b3dsYW5fc3RhdHVzX2RhdGEgKnN0YXR1cyxcbiBcbiBcdFx0a2V5ID0gaWVlZTgwMjExX2d0a19yZWtleV9hZGQodmlmLCBzdGF0dXMtXHUwMDNlZ3RrW2ldLmlkLFxuIFx0XHRcdFx0XHQgICAgICBzdGF0dXMtXHUwMDNlZ3RrW2ldLmtleSxcbi1cdFx0XHRcdFx0ICAgICAgc2l6ZW9mKHN0YXR1cy1cdTAwM2VndGtbaV0ua2V5KSwgLTEpO1xuJiM0MztcdFx0XHRcdFx0ICAgICAgc2l6ZW9mKHN0YXR1cy1cdTAwM2VndGtbaV0ua2V5KSwgLTEsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBmYWxzZSk7XG4gXHRcdGlmIChJU19FUlIoa2V5KSkge1xuIFx0XHRcdC8qIEZXIG1heSBzZW5kIGFsc28gdGhlIG9sZCBrZXlzICovXG4gXHRcdFx0aWYgKFBUUl9FUlIoa2V5KSA9PSAtRUFMUkVBRFkpXG5AQCAtMTkyMiw3ICYjNDM7MTkyMyw4IEBAIGl3bF9tdm1fZDNfaWd0a19iaWd0a19yZWtleV9hZGQoc3RydWN0IGl3bF93b3dsYW5fc3RhdHVzX2RhdGEgKnN0YXR1cyxcbiBcdFx0cmV0dXJuIHRydWU7XG4gXG4gXHRrZXlfY29uZmlnID0gaWVlZTgwMjExX2d0a19yZWtleV9hZGQodmlmLCBrZXlpZHgsIGtleV9kYXRhLVx1MDAzZWtleSxcbi1cdFx0XHRcdFx0ICAgICBzaXplb2Yoa2V5X2RhdGEtXHUwMDNla2V5KSwgLTEpO1xuJiM0MztcdFx0XHRcdFx0ICAgICBzaXplb2Yoa2V5X2RhdGEtXHUwMDNla2V5KSwgLTEsXG4mIzQzO1x0XHRcdFx0XHQgICAgIGZhbHNlKTtcbiBcdGlmIChJU19FUlIoa2V5X2NvbmZpZykpIHtcbiBcdFx0LyogRlcgbWF5IHNlbmQgYWxzbyB0aGUgb2xkIGtleXMgKi9cbiBcdFx0cmV0dXJuIFBUUl9FUlIoa2V5X2NvbmZpZykgPT0gLUVBTFJFQURZO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvY2ZnLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2NmZy5jXG5pbmRleCA3MmM5MmY3MjQ2OWRlLi5lMDE1Y2ZhMTk1MGMxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9jZmcuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9jZmcuY1xuQEAgLTE1MDgsNyAmIzQzOzE1MDgsOCBAQCBzdGF0aWMgaW50IGxic19jZmdfc2V0X2RlZmF1bHRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksXG4gXG4gXG4gc3RhdGljIGludCBsYnNfY2ZnX2FkZF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldixcbi1cdFx0XHQgICBpbnQgbGlua19pZCwgdTggaWR4LCBib29sIHBhaXJ3aXNlLFxuJiM0MztcdFx0XHQgICBpbnQgbGlua19pZCwgdTggaWR4LFxuJiM0MztcdFx0XHQgICBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSxcbiBcdFx0XHQgICBjb25zdCB1OCAqbWFjX2FkZHIsIHN0cnVjdCBrZXlfcGFyYW1zICpwYXJhbXMpXG4ge1xuIFx0c3RydWN0IGxic19wcml2YXRlICpwcml2ID0gd2lwaHlfcHJpdih3aXBoeSk7XG5AQCAtMTU2OSw3ICYjNDM7MTU3MCw4IEBAIHN0YXRpYyBpbnQgbGJzX2NmZ19hZGRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4gXG4gXG4gc3RhdGljIGludCBsYnNfY2ZnX2RlbF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldixcbi1cdFx0XHQgICBpbnQgbGlua19pZCwgdTgga2V5X2luZGV4LCBib29sIHBhaXJ3aXNlLFxuJiM0MztcdFx0XHQgICBpbnQgbGlua19pZCwgdTgga2V5X2luZGV4LFxuJiM0MztcdFx0XHQgICBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSxcbiBcdFx0XHQgICBjb25zdCB1OCAqbWFjX2FkZHIpXG4ge1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9jZmc4MDIxMS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L2NmZzgwMjExLmNcbmluZGV4IDhlYzJkMjJhOGMzM2EuLjA2MGMzNTFjZWNjMDYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvY2ZnODAyMTEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L2NmZzgwMjExLmNcbkBAIC0xNDIsMTIgJiM0MzsxNDIsMTQgQEAgc3RhdGljIHZvaWQgKm13aWZpZXhfY2ZnODAyMTFfZ2V0X2FkYXB0ZXIoc3RydWN0IHdpcGh5ICp3aXBoeSlcbiAgKi9cbiBzdGF0aWMgaW50XG4gbXdpZmlleF9jZmc4MDIxMV9kZWxfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4tXHRcdFx0IGludCBsaW5rX2lkLCB1OCBrZXlfaW5kZXgsIGJvb2wgcGFpcndpc2UsXG4mIzQzO1x0XHRcdCBpbnQgbGlua19pZCwgdTgga2V5X2luZGV4LFxuJiM0MztcdFx0XHRlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSxcbiBcdFx0XHQgY29uc3QgdTggKm1hY19hZGRyKVxuIHtcbiBcdHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYgPSBtd2lmaWV4X25ldGRldl9nZXRfcHJpdih3ZGV2LVx1MDAzZW5ldGRldik7XG4gXHRzdGF0aWMgY29uc3QgdTggYmNfbWFjW10gPSB7MHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZn07XG4tXHRjb25zdCB1OCAqcGVlcl9tYWMgPSBwYWlyd2lzZSA/IG1hY19hZGRyIDogYmNfbWFjO1xuJiM0MztcdGNvbnN0IHU4ICpwZWVyX21hYyA9XG4mIzQzO1x0XHQodHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0UpID8gbWFjX2FkZHIgOiBiY19tYWM7XG4gXG4gXHRpZiAobXdpZmlleF9zZXRfZW5jb2RlKHByaXYsIE5VTEwsIE5VTEwsIDAsIGtleV9pbmRleCwgcGVlcl9tYWMsIDEpKSB7XG4gXHRcdG13aWZpZXhfZGJnKHByaXYtXHUwMDNlYWRhcHRlciwgRVJST1IsIFwmIzM0O2RlbGV0aW5nIHRoZSBjcnlwdG8ga2V5c1xcblwmIzM0Oyk7XG5AQCAtNDgyLDEzICYjNDM7NDg0LDE1IEBAIG13aWZpZXhfY2ZnODAyMTFfc2V0X2RlZmF1bHRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gICovXG4gc3RhdGljIGludFxuIG13aWZpZXhfY2ZnODAyMTFfYWRkX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuLVx0XHRcdCBpbnQgbGlua19pZCwgdTgga2V5X2luZGV4LCBib29sIHBhaXJ3aXNlLFxuJiM0MztcdFx0XHQgaW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCxcbiYjNDM7XHRcdFx0IGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLFxuIFx0XHRcdCBjb25zdCB1OCAqbWFjX2FkZHIsIHN0cnVjdCBrZXlfcGFyYW1zICpwYXJhbXMpXG4ge1xuIFx0c3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiA9IG13aWZpZXhfbmV0ZGV2X2dldF9wcml2KHdkZXYtXHUwMDNlbmV0ZGV2KTtcbiBcdHN0cnVjdCBtd2lmaWV4X3dlcF9rZXkgKndlcF9rZXk7XG4gXHRzdGF0aWMgY29uc3QgdTggYmNfbWFjW10gPSB7MHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZn07XG4tXHRjb25zdCB1OCAqcGVlcl9tYWMgPSBwYWlyd2lzZSA/IG1hY19hZGRyIDogYmNfbWFjO1xuJiM0MztcdGNvbnN0IHU4ICpwZWVyX21hYyA9XG4mIzQzO1x0XHQodHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0UpID8gbWFjX2FkZHIgOiBiY19tYWM7XG4gXG4gXHRpZiAoR0VUX0JTU19ST0xFKHByaXYpID09IE1XSUZJRVhfQlNTX1JPTEVfVUFQIFx1MDAyNlx1MDAyNlxuIFx0ICAgIChwYXJhbXMtXHUwMDNlY2lwaGVyID09IFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDQwIHx8XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWljcm9jaGlwL3dpbGMxMDAwL2NmZzgwMjExLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9taWNyb2NoaXAvd2lsYzEwMDAvY2ZnODAyMTEuY1xuaW5kZXggNjY1NGZjZTRkZWQ4NC4uNzg1MGUwYTQ4MzkwNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21pY3JvY2hpcC93aWxjMTAwMC9jZmc4MDIxMS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9taWNyb2NoaXAvd2lsYzEwMDAvY2ZnODAyMTEuY1xuQEAgLTUzNSwxMCAmIzQzOzUzNSwxMyBAQCBzdGF0aWMgaW50IHdpbGNfd2ZpX2NmZ19jb3B5X3dwYV9pbmZvKHN0cnVjdCB3aWxjX3dmaV9rZXkgKmtleV9pbmZvLFxuIH1cbiBcbiBzdGF0aWMgaW50IGFkZF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwgaW50IGxpbmtfaWQsXG4tXHRcdCAgIHU4IGtleV9pbmRleCwgYm9vbCBwYWlyd2lzZSwgY29uc3QgdTggKm1hY19hZGRyLFxuJiM0MztcdFx0ICAgdTgga2V5X2luZGV4LFxuJiM0MztcdFx0ICAgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsXG4mIzQzO1x0XHQgICBjb25zdCB1OCAqbWFjX2FkZHIsXG4gXHRcdCAgIHN0cnVjdCBrZXlfcGFyYW1zICpwYXJhbXMpXG4gXG4ge1xuJiM0MztcdGJvb2wgcGFpcndpc2UgPSB0eXBlID09IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRTtcbiBcdGludCByZXQgPSAwLCBrZXlsZW4gPSBwYXJhbXMtXHUwMDNla2V5X2xlbjtcbiBcdGNvbnN0IHU4ICpyeF9taWMgPSBOVUxMO1xuIFx0Y29uc3QgdTggKnR4X21pYyA9IE5VTEw7XG5AQCAtNjQxLDkgJiM0Mzs2NDQsMTAgQEAgc3RhdGljIGludCBhZGRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsIGludCBsaW5rX2lkLFxuIFxuIHN0YXRpYyBpbnQgZGVsX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LCBpbnQgbGlua19pZCxcbiBcdFx0ICAgdTgga2V5X2luZGV4LFxuLVx0XHQgICBib29sIHBhaXJ3aXNlLFxuJiM0MztcdFx0ICAgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsXG4gXHRcdCAgIGNvbnN0IHU4ICptYWNfYWRkcilcbiB7XG4mIzQzO1x0Ym9vbCBwYWlyd2lzZSA9IHR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFO1xuIFx0c3RydWN0IHdpbGNfdmlmICp2aWYgPSBuZXRkZXZfcHJpdih3ZGV2LVx1MDAzZW5ldGRldik7XG4gXHRzdHJ1Y3Qgd2lsY19wcml2ICpwcml2ID0gXHUwMDI2dmlmLVx1MDAzZXByaXY7XG4gXG5AQCAtNjgxLDEwICYjNDM7Njg1LDExIEBAIHN0YXRpYyBpbnQgZGVsX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LCBpbnQgbGlua19pZCxcbiB9XG4gXG4gc3RhdGljIGludCBnZXRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsIGludCBsaW5rX2lkLFxuLVx0XHQgICB1OCBrZXlfaW5kZXgsIGJvb2wgcGFpcndpc2UsIGNvbnN0IHU4ICptYWNfYWRkcixcbi1cdFx0ICAgdm9pZCAqY29va2llLFxuJiM0MztcdFx0ICAgdTgga2V5X2luZGV4LCBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSxcbiYjNDM7XHRcdCAgIGNvbnN0IHU4ICptYWNfYWRkciwgdm9pZCAqY29va2llLFxuIFx0XHQgICB2b2lkICgqY2FsbGJhY2spKHZvaWQgKmNvb2tpZSwgc3RydWN0IGtleV9wYXJhbXMgKikpXG4ge1xuJiM0MztcdGJvb2wgcGFpcndpc2UgPSB0eXBlID09IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRTtcbiBcdHN0cnVjdCB3aWxjX3ZpZiAqdmlmID0gbmV0ZGV2X3ByaXYod2Rldi1cdTAwM2VuZXRkZXYpO1xuIFx0c3RydWN0IHdpbGNfcHJpdiAqcHJpdiA9IFx1MDAyNnZpZi1cdTAwM2Vwcml2O1xuIFx0c3RydWN0ICBrZXlfcGFyYW1zIGtleV9wYXJhbXM7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvY2ZnODAyMTEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL2NmZzgwMjExLmNcbmluZGV4IDRmOWUyMGY3MjgxMTQuLjA4YjZkYjE0NzQ1MmMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9jZmc4MDIxMS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9jZmc4MDIxMS5jXG5AQCAtOTksMTIgJiM0Mzs5OSwxNCBAQCBzdGF0aWMgdm9pZCAqbnhwd2lmaV9jZmc4MDIxMV9nZXRfYWRhcHRlcihzdHJ1Y3Qgd2lwaHkgKndpcGh5KVxuIC8qIGNmZzgwMjExIG9wZXJhdGlvbiBoYW5kbGVyIHRvIGRlbGV0ZSBhIG5ldHdvcmsga2V5LiAqL1xuIHN0YXRpYyBpbnRcbiBueHB3aWZpX2NmZzgwMjExX2RlbF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldixcbi1cdFx0XHQgaW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCwgYm9vbCBwYWlyd2lzZSxcbiYjNDM7XHRcdFx0IGludCBsaW5rX2lkLCB1OCBrZXlfaW5kZXgsXG4mIzQzO1x0XHRcdCBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSxcbiBcdFx0XHQgY29uc3QgdTggKm1hY19hZGRyKVxuIHtcbiBcdHN0cnVjdCBueHB3aWZpX3ByaXZhdGUgKnByaXYgPSBueHB3aWZpX25ldGRldl9nZXRfcHJpdih3ZGV2LVx1MDAzZW5ldGRldik7XG4gXHRzdGF0aWMgY29uc3QgdTggYmNfbWFjW10gPSB7MHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZn07XG4tXHRjb25zdCB1OCAqcGVlcl9tYWMgPSBwYWlyd2lzZSA/IG1hY19hZGRyIDogYmNfbWFjO1xuJiM0MztcdGNvbnN0IHU4ICpwZWVyX21hYyA9XG4mIzQzO1x0XHQodHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0UpID8gbWFjX2FkZHIgOiBiY19tYWM7XG4gXHRpbnQgcmV0O1xuIFxuIFx0cmV0ID0gbnhwd2lmaV9zZXRfZW5jb2RlKHByaXYsIE5VTEwsIE5VTEwsIDAsIGtleV9pbmRleCwgcGVlcl9tYWMsIDEpO1xuQEAgLTQyOCw3ICYjNDM7NDMwLDggQEAgbnhwd2lmaV9jZmc4MDIxMV9zZXRfZGVmYXVsdF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiAvKiBjZmc4MDIxMSBoYW5kbGVyIGZvciBhZGRpbmcgYW4gODAyLjExIGVuY3J5cHRpb24ga2V5LiAqL1xuIHN0YXRpYyBpbnRcbiBueHB3aWZpX2NmZzgwMjExX2FkZF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldixcbi1cdFx0XHQgaW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCwgYm9vbCBwYWlyd2lzZSxcbiYjNDM7XHRcdFx0IGludCBsaW5rX2lkLCB1OCBrZXlfaW5kZXgsXG4mIzQzO1x0XHRcdCBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSxcbiBcdFx0XHQgY29uc3QgdTggKm1hY19hZGRyLCBzdHJ1Y3Qga2V5X3BhcmFtcyAqcGFyYW1zKVxuIHtcbiBcdHN0cnVjdCBueHB3aWZpX3ByaXZhdGUgKnByaXYgPSBueHB3aWZpX25ldGRldl9nZXRfcHJpdih3ZGV2LVx1MDAzZW5ldGRldik7XG5AQCAtNDM4LDcgJiM0Mzs0NDEsNyBAQCBueHB3aWZpX2NmZzgwMjExX2FkZF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcbiBcdGludCByZXQ7XG4gXG4gXHRldGhfYnJvYWRjYXN0X2FkZHIoYmNfbWFjKTtcbi1cdHBlZXJfbWFjID0gcGFpcndpc2UgPyBtYWNfYWRkciA6IGJjX21hYztcbiYjNDM7XHRwZWVyX21hYyA9ICh0eXBlID09IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRSkgPyBtYWNfYWRkciA6IGJjX21hYztcbiBcbiBcdGlmIChHRVRfQlNTX1JPTEUocHJpdikgPT0gTlhQV0lGSV9CU1NfUk9MRV9VQVAgXHUwMDI2XHUwMDI2XG4gXHQgICAgKHBhcmFtcy1cdTAwM2VjaXBoZXIgPT0gV0xBTl9DSVBIRVJfU1VJVEVfV0VQNDAgfHxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9xdWFudGVubmEvcXRuZm1hYy9jZmc4MDIxMS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcXVhbnRlbm5hL3F0bmZtYWMvY2ZnODAyMTEuY1xuaW5kZXggOWU0NGM4NWQyMDUxYy4uMzg2MjUzNDIxNjlmZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3F1YW50ZW5uYS9xdG5mbWFjL2NmZzgwMjExLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3F1YW50ZW5uYS9xdG5mbWFjL2NmZzgwMjExLmNcbkBAIC01MzMsMTAgJiM0Mzs1MzMsMTIgQEAgcXRuZl9kdW1wX3N0YXRpb24oc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcbiB9XG4gXG4gc3RhdGljIGludCBxdG5mX2FkZF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldixcbi1cdFx0XHRpbnQgbGlua19pZCwgdTgga2V5X2luZGV4LCBib29sIHBhaXJ3aXNlLFxuJiM0MztcdFx0XHRpbnQgbGlua19pZCwgdTgga2V5X2luZGV4LFxuJiM0MztcdFx0XHRlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSxcbiBcdFx0XHRjb25zdCB1OCAqbWFjX2FkZHIsIHN0cnVjdCBrZXlfcGFyYW1zICpwYXJhbXMpXG4ge1xuIFx0c3RydWN0IHF0bmZfdmlmICp2aWYgPSBxdG5mX25ldGRldl9nZXRfcHJpdih3ZGV2LVx1MDAzZW5ldGRldik7XG4mIzQzO1x0Ym9vbCBwYWlyd2lzZSA9IHR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFO1xuIFx0aW50IHJldDtcbiBcbiBcdHJldCA9IHF0bmZfY21kX3NlbmRfYWRkX2tleSh2aWYsIGtleV9pbmRleCwgcGFpcndpc2UsIG1hY19hZGRyLCBwYXJhbXMpO1xuQEAgLTU0OSwxMCAmIzQzOzU1MSwxMiBAQCBzdGF0aWMgaW50IHF0bmZfYWRkX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuIH1cbiBcbiBzdGF0aWMgaW50IHF0bmZfZGVsX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuLVx0XHRcdGludCBsaW5rX2lkLCB1OCBrZXlfaW5kZXgsIGJvb2wgcGFpcndpc2UsXG4mIzQzO1x0XHRcdGludCBsaW5rX2lkLCB1OCBrZXlfaW5kZXgsXG4mIzQzO1x0XHRcdGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLFxuIFx0XHRcdGNvbnN0IHU4ICptYWNfYWRkcilcbiB7XG4gXHRzdHJ1Y3QgcXRuZl92aWYgKnZpZiA9IHF0bmZfbmV0ZGV2X2dldF9wcml2KHdkZXYtXHUwMDNlbmV0ZGV2KTtcbiYjNDM7XHRib29sIHBhaXJ3aXNlID0gdHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0U7XG4gXHRpbnQgcmV0O1xuIFxuIFx0cmV0ID0gcXRuZl9jbWRfc2VuZF9kZWxfa2V5KHZpZiwga2V5X2luZGV4LCBwYWlyd2lzZSwgbWFjX2FkZHIpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvd293LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg5L3dvdy5jXG5pbmRleCA4ZGFkZDhkZjRmYzY1Li5jOGUwMDIyMzhlY2IyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OS93b3cuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OS93b3cuY1xuQEAgLTY2OSwxMCAmIzQzOzY2OSwxMiBAQCBzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqcnR3ODlfd293X2d0a19yZWtleShzdHJ1Y3QgcnR3ODlfZGV2ICpydHdkZXYsXG4gXHRpZiAoaWVlZTgwMjExX3ZpZl9pc19tbGQod293X3ZpZikpXG4gXHRcdGtleSA9IGllZWU4MDIxMV9ndGtfcmVrZXlfYWRkKHdvd192aWYsIGtleWlkeCwgZ3RrLFxuIFx0XHRcdFx0XHQgICAgICBjaXBoZXJfaW5mby1cdTAwM2VsZW4sXG4tXHRcdFx0XHRcdCAgICAgIHJ0d3ZpZl9saW5rLVx1MDAzZWxpbmtfaWQpO1xuJiM0MztcdFx0XHRcdFx0ICAgICAgcnR3dmlmX2xpbmstXHUwMDNlbGlua19pZCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIGZhbHNlKTtcbiBcdGVsc2VcbiBcdFx0a2V5ID0gaWVlZTgwMjExX2d0a19yZWtleV9hZGQod293X3ZpZiwga2V5aWR4LCBndGssXG4tXHRcdFx0XHRcdCAgICAgIGNpcGhlcl9pbmZvLVx1MDAzZWxlbiwgLTEpO1xuJiM0MztcdFx0XHRcdFx0ICAgICAgY2lwaGVyX2luZm8tXHUwMDNlbGVuLCAtMSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIGZhbHNlKTtcbiBcbiBcdGtmcmVlKHJla2V5X2NvbmYpO1xuIFx0aWYgKElTX0VSUihrZXkpKSB7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uY1xuaW5kZXggMDJiNmQ4MWNjY2QxMS4uMWNjMzIyYWE4OThkZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uY1xuQEAgLTU2NjgsNiAmIzQzOzU2NjgsOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHdpcGh5X2lmdHlwZV9leHRfY2FwYWIgbWFjODAyMTFfaHdzaW1faWZ0eXBlc19leHRfY2FwYVtdID0ge1xuIFx0XHQuZW1sX2NhcGFiaWxpdGllcyA9IElFRUU4MDIxMV9FTUxfQ0FQX0VNTFNSX1NVUFAgfFxuIFx0XHRcdFx0ICAgIElFRUU4MDIxMV9FTUxfQ0FQX0VNTE1SX1NVUFBPUlQsXG4gXHRcdC5tbGRfY2FwYV9hbmRfb3BzID0gTUFDODAyMTFfSFdTSU1fTUxEX0NBUEFfT1BTLFxuJiM0MztcdFx0LyogQ0lQIHdvcmtzIGFzIGh3c2ltIGRvZXMgbm90IGhhdmUgY29udHJvbCBmcmFtZXMgKi9cbiYjNDM7XHRcdC5jaXBfc3VwcG9ydGVkID0gdHJ1ZSxcbiYjNDM7XHRcdC5jaXBfY2FwYWJpbGl0aWVzID0gMCxcbiBcdH0sXG4gfTtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2llZWU4MDIxMS5oIGIvaW5jbHVkZS9saW51eC9pZWVlODAyMTEuaFxuaW5kZXggMjZlNjc0MDM4ODY1NC4uMTZkNzhmZDYxYzIyMyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvaWVlZTgwMjExLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvaWVlZTgwMjExLmhcbkBAIC0xODI4LDYgJiM0MzsxODI4LDcgQEAgZW51bSBpZWVlODAyMTFfZWlkX2V4dCB7XG4gXHRXTEFOX0VJRF9FWFRfQkFORFdJRFRIX0lORElDQVRJT04gPSAxMzUsXG4gXHRXTEFOX0VJRF9FWFRfS05PV05fU1RBX0lERU5USUZDQVRJT04gPSAxMzYsXG4gXHRXTEFOX0VJRF9FWFRfTk9OX0FQX1NUQV9SRUdfQ09OID0gMTM3LFxuJiM0MztcdFdMQU5fRUlEX0VYVF9DSVBfQ0FQQSA9IDE1MCxcbiBcdFdMQU5fRUlEX0VYVF9VSFJfT1BFUiA9IDE1MSxcbiBcdFdMQU5fRUlEX0VYVF9VSFJfQ0FQQSA9IDE1MixcbiBcdFdMQU5fRUlEX0VYVF9NQUNQID0gMTUzLFxuQEAgLTI5MDAsNCAmIzQzOzI5MDEsMTYgQEAgc3RhdGljIGlubGluZSBib29sIGllZWU4MDIxMV9jaGVja190aW0oY29uc3Qgc3RydWN0IGllZWU4MDIxMV90aW1faWUgKnRpbSxcbiBcdFx0ICAgICBfX2llZWU4MDIxMV9jaGVja190aW0odGltLCB0aW1fbGVuLCBhaWQpO1xuIH1cbiBcbiYjNDM7LyogVGhlIE1JQyBwYWRkaW5nIHN1YmZpZWxkIGluIHRoZSBDSVAgY2FwYWJpbGl0aWVzICovXG4mIzQzOyNkZWZpbmUgV0xBTl9DSVBfQ0FQQV9NSUNfUEFERElOR1x0MHgwRlxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHN0cnVjdCBpZWVlODAyMTFfY2lwX2NhcCAtIENJUCBDYXBhYmlsaXRpZXMgZWxlbWVudFxuJiM0MzsgKlxuJiM0MzsgKiBAdjogVGhlIHZhbHVlIG9mIHRoZSBDb250cm9sIEludGVncml0eSBQcm90b2NvbCBDYXBhYmlsaXR5IGVsZW1lbnRcbiYjNDM7ICovXG4mIzQzO3N0cnVjdCBpZWVlODAyMTFfY2lwX2NhcCB7XG4mIzQzO1x0dTggdjtcbiYjNDM7fSBfX3BhY2tlZDtcbiYjNDM7XG4gI2VuZGlmIC8qIExJTlVYX0lFRUU4MDIxMV9IICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaCBiL2luY2x1ZGUvbmV0L2NmZzgwMjExLmhcbmluZGV4IGRjYmIwZTU1YzMyZWMuLmI1ZDk4YmEwNzIzOWIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9jZmc4MDIxMS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9jZmc4MDIxMS5oXG5AQCAtMTgyMSw2ICYjNDM7MTgyMSw4IEBAIHN0cnVjdCBzdGFfdHhwd3Ige1xuICAqIEBzMWdfY2FwYTogUzFHIGNhcGFiaWxpdGllcyBvZiBzdGF0aW9uXG4gICogQHVocl9jYXBhOiBVSFIgY2FwYWJpbGl0aWVzIG9mIHRoZSBzdGF0aW9uXG4gICogQHVocl9jYXBhX2xlbjogdGhlIGxlbmd0aCBvZiB0aGUgVUhSIGNhcGFiaWxpdGllc1xuJiM0MzsgKiBAY2lwX2NhcF9zZXQ6IElmIENJUCBjYXBhYmlsaXRpZXMgYXJlIHByZXNlbnQsIHJlcXVpcmVkIGZvciBDSVAgc3RhdGlvbnNcbiYjNDM7ICogQGNpcF9jYXA6IENJUCBjYXBhYmlsaXRpZXMgb2Ygc3RhdGlvblxuICAqL1xuIHN0cnVjdCBsaW5rX3N0YXRpb25fcGFyYW1ldGVycyB7XG4gXHRjb25zdCB1OCAqbWxkX21hYztcbkBAIC0xODQyLDYgJiM0MzsxODQ0LDggQEAgc3RydWN0IGxpbmtfc3RhdGlvbl9wYXJhbWV0ZXJzIHtcbiBcdGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfczFnX2NhcCAqczFnX2NhcGE7XG4gXHRjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3Vocl9jYXAgKnVocl9jYXBhO1xuIFx0dTggdWhyX2NhcGFfbGVuO1xuJiM0MztcdGJvb2wgY2lwX2NhcF9zZXQ7XG4mIzQzO1x0dTggY2lwX2NhcDtcbiB9O1xuIFxuIC8qKlxuQEAgLTM0MDIsNiAmIzQzOzM0MDYsNyBAQCBzdHJ1Y3QgY2ZnODAyMTFfbWxfcmVjb25mX3JlcSB7XG4gICpcdGZsYWcgaXMgbm90IHNldC5cbiAgKiBAQVNTT0NfUkVRX1NQUF9BTVNEVTogU1BQIEEtTVNEVXMgd2lsbCBiZSB1c2VkIG9uIHRoaXMgY29ubmVjdGlvbiAoaWYgYW55KVxuICAqIEBBU1NPQ19SRVFfRElTQUJMRV9VSFI6IERpc2FibGUgVUhSXG4mIzQzOyAqIEBBU1NPQ19SRVFfQ0lQOiBFbmFibGUgQ29udHJvbCBJbnRlZ3JpdHkgUHJvdG9jb2xcbiAgKi9cbiBlbnVtIGNmZzgwMjExX2Fzc29jX3JlcV9mbGFncyB7XG4gXHRBU1NPQ19SRVFfRElTQUJMRV9IVFx0XHRcdD0gQklUKDApLFxuQEAgLTM0MTMsNiAmIzQzOzM0MTgsNyBAQCBlbnVtIGNmZzgwMjExX2Fzc29jX3JlcV9mbGFncyB7XG4gXHRDT05ORUNUX1JFUV9NTE9fU1VQUE9SVFx0XHRcdD0gQklUKDYpLFxuIFx0QVNTT0NfUkVRX1NQUF9BTVNEVVx0XHRcdD0gQklUKDcpLFxuIFx0QVNTT0NfUkVRX0RJU0FCTEVfVUhSXHRcdFx0PSBCSVQoOCksXG4mIzQzO1x0QVNTT0NfUkVRX0NJUFx0XHRcdFx0PSBCSVQoOSksXG4gfTtcbiBcbiAvKipcbkBAIC01MzAwLDE0ICYjNDM7NTMwNiwxNyBAQCBzdHJ1Y3QgY2ZnODAyMTFfb3BzIHtcbiBcdFx0XHRcdCB1bnNpZ25lZCBpbnQgbGlua19pZCk7XG4gXG4gXHRpbnRcdCgqYWRkX2tleSkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldixcbi1cdFx0XHQgICBpbnQgbGlua19pZCwgdTgga2V5X2luZGV4LCBib29sIHBhaXJ3aXNlLFxuJiM0MztcdFx0XHQgICBpbnQgbGlua19pZCwgdTgga2V5X2luZGV4LFxuJiM0MztcdFx0XHQgICBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSxcbiBcdFx0XHQgICBjb25zdCB1OCAqbWFjX2FkZHIsIHN0cnVjdCBrZXlfcGFyYW1zICpwYXJhbXMpO1xuIFx0aW50XHQoKmdldF9rZXkpKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4tXHRcdFx0ICAgaW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCwgYm9vbCBwYWlyd2lzZSxcbiYjNDM7XHRcdFx0ICAgaW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCxcbiYjNDM7XHRcdFx0ICAgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsXG4gXHRcdFx0ICAgY29uc3QgdTggKm1hY19hZGRyLCB2b2lkICpjb29raWUsXG4gXHRcdFx0ICAgdm9pZCAoKmNhbGxiYWNrKSh2b2lkICpjb29raWUsIHN0cnVjdCBrZXlfcGFyYW1zKikpO1xuIFx0aW50XHQoKmRlbF9rZXkpKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4tXHRcdFx0ICAgaW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCwgYm9vbCBwYWlyd2lzZSxcbiYjNDM7XHRcdFx0ICAgaW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCxcbiYjNDM7XHRcdFx0ICAgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsXG4gXHRcdFx0ICAgY29uc3QgdTggKm1hY19hZGRyKTtcbiBcdGludFx0KCpzZXRfZGVmYXVsdF9rZXkpKHN0cnVjdCB3aXBoeSAqd2lwaHksXG4gXHRcdFx0XHQgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgbGlua19pZCxcbkBAIC02MDQxLDYgJiM0Mzs2MDUwLDggQEAgc3RydWN0IHdpcGh5X3ZlbmRvcl9jb21tYW5kIHtcbiAgKiBAZW1sX2NhcGFiaWxpdGllczogRU1MIGNhcGFiaWxpdGllcyAoZm9yIE1MTylcbiAgKiBAbWxkX2NhcGFfYW5kX29wczogTUxEIGNhcGFiaWxpdGllcyBhbmQgb3BlcmF0aW9ucyAoZm9yIE1MTylcbiAgKiBAZXh0X21sZF9jYXBhX2FuZF9vcHM6IEV4dGVuZGVkIE1MRCBjYXBhYmlsaXRpZXMgYW5kIG9wZXJhdGlvbnMgKGZvciBNTE8pXG4mIzQzOyAqIEBjaXBfc3VwcG9ydGVkOiBDSVAgaXMgc3VwcG9ydGVkIGFuZCB0aGUgY2FwYWJpbGl0aWVzIGFyZSB2YWxpZFxuJiM0MzsgKiBAY2lwX2NhcGFiaWxpdGllczogQ0lQIENhcGFiaWxpdGllcyBlbGVtZW50IGNvbnRhaW5pbmcgdGhlIE1JQyBwYWRkaW5nIGRlbGF5XG4gICovXG4gc3RydWN0IHdpcGh5X2lmdHlwZV9leHRfY2FwYWIge1xuIFx0ZW51bSBubDgwMjExX2lmdHlwZSBpZnR5cGU7XG5AQCAtNjA1MCw2ICYjNDM7NjA2MSw4IEBAIHN0cnVjdCB3aXBoeV9pZnR5cGVfZXh0X2NhcGFiIHtcbiBcdHUxNiBlbWxfY2FwYWJpbGl0aWVzO1xuIFx0dTE2IG1sZF9jYXBhX2FuZF9vcHM7XG4gXHR1MTYgZXh0X21sZF9jYXBhX2FuZF9vcHM7XG4mIzQzO1x0Ym9vbCBjaXBfc3VwcG9ydGVkO1xuJiM0MztcdHU4IGNpcF9jYXBhYmlsaXRpZXM7XG4gfTtcbiBcbiAvKipcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9tYWM4MDIxMS5oIGIvaW5jbHVkZS9uZXQvbWFjODAyMTEuaFxuaW5kZXggOWQxZmFjNmU4MDgyOS4uYWFlMTQwZmRjMmJiMSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L21hYzgwMjExLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L21hYzgwMjExLmhcbkBAIC0yMzk2LDYgJiM0MzsyMzk2LDggQEAgc3RhdGljIGlubGluZSBib29sIGxvY2tkZXBfdmlmX3dpcGh5X211dGV4X2hlbGQoc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZilcbiAgKlx0bnVtYmVyIGdlbmVyYXRpb24gb25seVxuICAqIEBJRUVFODAyMTFfS0VZX0ZMQUdfU1BQX0FNU0RVOiBTUFAgQS1NU0RVcyBjYW4gYmUgdXNlZCB3aXRoIHRoaXMga2V5XG4gICpcdChzZXQgYnkgbWFjODAyMTEgZnJvbSB0aGUgc3RhLVx1MDAzZXNwcF9hbXNkdSBmbGFnKVxuJiM0MzsgKiBASUVFRTgwMjExX0tFWV9GTEFHX0NJUDogVGhpcyBrZXkgaXMgdXNlZCBmb3IgdGhlIENvbnRyb2wgSW50ZWdyaXR5XG4mIzQzOyAqXHRQcm90b2NvbCwgYW5kIGlzIGVpdGhlciBhIHBhaXJ3aXNlIGtleSBvciBhIENJR1RLLlxuICAqL1xuIGVudW0gaWVlZTgwMjExX2tleV9mbGFncyB7XG4gXHRJRUVFODAyMTFfS0VZX0ZMQUdfR0VORVJBVEVfSVZfTUdNVFx0PSBCSVQoMCksXG5AQCAtMjQxMCw2ICYjNDM7MjQxMiw3IEBAIGVudW0gaWVlZTgwMjExX2tleV9mbGFncyB7XG4gXHRJRUVFODAyMTFfS0VZX0ZMQUdfTk9fQVVUT19UWFx0XHQ9IEJJVCg5KSxcbiBcdElFRUU4MDIxMV9LRVlfRkxBR19HRU5FUkFURV9NTUlFXHQ9IEJJVCgxMCksXG4gXHRJRUVFODAyMTFfS0VZX0ZMQUdfU1BQX0FNU0RVXHRcdD0gQklUKDExKSxcbiYjNDM7XHRJRUVFODAyMTFfS0VZX0ZMQUdfQ0lQXHRcdFx0PSBCSVQoMTIpLFxuIH07XG4gXG4gLyoqXG5AQCAtMjYzMCw2ICYjNDM7MjYzMyw4IEBAIHN0cnVjdCBpZWVlODAyMTFfc3RhX2FnZ3JlZ2F0ZXMge1xuICAqIEBlaHRfY2FwOiBFSFQgY2FwYWJpbGl0aWVzIG9mIHRoaXMgU1RBXG4gICogQHVocl9jYXA6IFVIUiBjYXBhYmlsaXRpZXMgb2YgdGhpcyBTVEFcbiAgKiBAczFnX2NhcDogUzFHIGNhcGFiaWxpdGllcyBvZiB0aGlzIFNUQVxuJiM0MzsgKiBAY2lwX21pY19wYWRkaW5nOiB0aGUgTUlDIHBhZGRpbmcgcmVxdWlyZWQgYnkgdGhlIFNUQSBhcyBkZWZpbmVkIGluIGl0c1xuJiM0MzsgKlx0Q0lQIENhcGFiaWxpdGllcyBlbGVtZW50XG4gICogQGFnZzogcGVyLWxpbmsgZGF0YSBmb3IgbXVsdGktbGluayBhZ2dyZWdhdGlvblxuICAqIEBiYW5kd2lkdGg6IGN1cnJlbnQgYmFuZHdpZHRoIHRoZSBzdGF0aW9uIGNhbiByZWNlaXZlIHdpdGguXG4gICpcdFRoaXMgaXMgdGhlIG1pbmltdW0gYmV0d2VlbiB0aGUgcGVlciYjMzk7cyBjYXBhYmlsaXRpZXMgYW5kIG91ciBvd25cbkBAIC0yNjU4LDYgJiM0MzsyNjYzLDcgQEAgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSB7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX3N0YV9laHRfY2FwIGVodF9jYXA7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX3N0YV91aHJfY2FwIHVocl9jYXA7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX3N0YV9zMWdfY2FwIHMxZ19jYXA7XG4mIzQzO1x0dTggY2lwX21pY19wYWRkaW5nO1xuIFxuIFx0c3RydWN0IGllZWU4MDIxMV9zdGFfYWdncmVnYXRlcyBhZ2c7XG4gXG5AQCAtMjcyMSw2ICYjNDM7MjcyNyw3IEBAIHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEge1xuICAqIEB2YWxpZF9saW5rczogYml0bWFwIG9mIHZhbGlkIGxpbmtzLCBvciAwIGZvciBub24tTUxPXG4gICogQHNwcF9hbXNkdTogaW5kaWNhdGVzIHdoZXRoZXIgdGhlIFNUQSB1c2VzIFNQUCBBLU1TRFUgb3Igbm90LlxuICAqIEBlcHBfcGVlcjogaW5kaWNhdGVzIHRoYXQgdGhlIHBlZXIgaXMgYW4gRVBQIHBlZXIuXG4mIzQzOyAqIEBjaXA6IGluZGljYXRlcyB3aGV0aGVyIHRoZSBTVEEgdXNlcyBjb250cm9sIGZyYW1lIHByb3RlY3Rpb24gb3Igbm90LlxuICAqIEBubWk6IEZvciBOREkgc3RhdGlvbnMsIHBvaW50ZXIgdG8gdGhlIE5NSSBzdGF0aW9uIG9mIHRoZSBwZWVyLlxuICAqIEBuYW5fc2NoZWQ6IE5BTiBwZWVyIHNjaGVkdWxlIGZvciB0aGlzIHN0YXRpb24uIFZhbGlkIG9ubHkgZm9yIE5NSSBzdGF0aW9ucy5cbiAgKiBAZXh0X21sZF9jYXBhX29wczogdGhlIE1MRCYjMzk7cyBleHRlbmRlZCBNTEQgY2FwYWJpbGl0aWVzIGFuZCBvcGVyYXRpb25zXG5AQCAtMjc0Miw2ICYjNDM7Mjc0OSw4IEBAIHN0cnVjdCBpZWVlODAyMTFfc3RhIHtcbiBcdHU4IG1heF9hbXNkdV9zdWJmcmFtZXM7XG4gXHR1MTYgZW1sX2NhcDtcbiBcbiYjNDM7XHRib29sIGNpcDtcbiYjNDM7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX3N0YV9hZ2dyZWdhdGVzICpjdXI7XG4gXG4gXHRib29sIHN1cHBvcnRfcDJwX3BzO1xuQEAgLTYyNzksNiAmIzQzOzYyODgsNyBAQCB2b2lkIGllZWU4MDIxMV9zZXRfa2V5X3J4X3NlcShzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXljb25mLFxuICAqIEBrZXlfbGVuOiB0aGUga2V5IGRhdGEuIE1pZ2h0IGJlIGJpZ2dlciB0aGFuIHRoZSBhY3R1YWwga2V5IGxlbmd0aCxcbiAgKlx0YnV0IG5vdCBzbWFsbGVyIChmb3IgdGhlIGRyaXZlciBjb252aW5lbmNlKVxuICAqIEBsaW5rX2lkOiB0aGUgbGluayBpZCBvZiB0aGUga2V5IG9yIC0xIGZvciBub24tTUxPXG4mIzQzOyAqIEBjaWd0azogd2hldGhlciB0aGlzIGlzIGEgQ0lHVEtcbiAgKlxuICAqIFdoZW4gR1RLIHJla2V5aW5nIHdhcyBkb25lIHdoaWxlIHRoZSBzeXN0ZW0gd2FzIHN1c3BlbmRlZCwgKGEpIG5ld1xuICAqIGtleShzKSB3aWxsIGJlIGF2YWlsYWJsZS4gVGhlc2Ugd2lsbCBiZSBuZWVkZWQgYnkgbWFjODAyMTEgZm9yIHByb3BlclxuQEAgLTYzMDUsNyAmIzQzOzYzMTUsNyBAQCB2b2lkIGllZWU4MDIxMV9zZXRfa2V5X3J4X3NlcShzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXljb25mLFxuIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKlxuIGllZWU4MDIxMV9ndGtfcmVrZXlfYWRkKHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXG4gXHRcdFx0dTggaWR4LCB1OCAqa2V5X2RhdGEsIHU4IGtleV9sZW4sXG4tXHRcdFx0aW50IGxpbmtfaWQpO1xuJiM0MztcdFx0XHRpbnQgbGlua19pZCwgYm9vbCBjaWd0ayk7XG4gXG4gLyoqXG4gICogaWVlZTgwMjExX2d0a19yZWtleV9ub3RpZnkgLSBub3RpZnkgdXNlcnNwYWNlIHN1cHBsaWNhbnQgb2YgcmVrZXlpbmdcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvbmw4MDIxMS5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L25sODAyMTEuaFxuaW5kZXggMDIwMzg3ZDc2NDEyMi4uM2U2ZTU5ZmI4ZTE3ZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9ubDgwMjExLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9ubDgwMjExLmhcbkBAIC0zMTg1LDYgJiM0MzszMTg1LDExIEBAIGVudW0gbmw4MDIxMV9jb21tYW5kcyB7XG4gICpcdFRoZSBhZ2dyZWdhdGVkIG1lc3NhZ2UgYWx3YXlzIHByZWNlZGVzIHRoZSBwZXItbGluayBtZXNzYWdlcyBmb3IgdGhlXG4gICpcdHNhbWUgc3RhdGlvbiB3aXRoaW4gYSBkdW1wIHNlcXVlbmNlLlxuICAqXG4mIzQzOyAqIEBOTDgwMjExX0FUVFJfQVNTT0NfQ0lQOiBFbmFibGUgQ29udHJvbCBJbnRlZ3JpdHkgUHJvdG9jb2wgZm9yIHRoZVxuJiM0MzsgKlx0YXNzb2NpYXRpb25cbiYjNDM7ICogQE5MODAyMTFfQVRUUl9DSVBfQ0FQQUJJTElUSUVTOiBUaGUgQ29udHJvbCBJbnRlZ3JpdHkgUHJvdG9jb2wgZm9yIHRoZVxuJiM0MzsgKlx0c3RhdGlvbi5cbiYjNDM7ICpcbiAgKiBATlVNX05MODAyMTFfQVRUUjogdG90YWwgbnVtYmVyIG9mIG5sODAyMTFfYXR0cnMgYXZhaWxhYmxlXG4gICogQE5MODAyMTFfQVRUUl9NQVg6IGhpZ2hlc3QgYXR0cmlidXRlIG51bWJlciBjdXJyZW50bHkgZGVmaW5lZFxuICAqIEBfX05MODAyMTFfQVRUUl9BRlRFUl9MQVNUOiBpbnRlcm5hbCB1c2VcbkBAIC0zMjgwLDYgJiM0MzszMjg1LDggQEAgZW51bSBubDgwMjExX2F0dHJzIHtcbiBcbiBcdE5MODAyMTFfQVRUUl9GUkVRX0ZJWEVELFxuIFxuJiM0MztcdE5MODAyMTFfQVRUUl9BU1NPQ19DSVAsXG4mIzQzO1x0Tkw4MDIxMV9BVFRSX0NJUF9DQVBBQklMSVRJRVMsXG4gXG4gXHROTDgwMjExX0FUVFJfV0lQSFlfUkVUUllfU0hPUlQsXG4gXHROTDgwMjExX0FUVFJfV0lQSFlfUkVUUllfTE9ORyxcbkBAIC0zOTM0LDYgJiM0MzszOTQxLDcgQEAgZW51bSBubDgwMjExX2lmdHlwZSB7XG4gICpcdHRoYXQgc3VwcG9ydCAlTkw4MDIxMV9GRUFUVVJFX0ZVTExfQVBfQ0xJRU5UX1NUQVRFIHRvIHRyYW5zaXRpb24gYVxuICAqXHRwcmV2aW91c2x5IGFkZGVkIHN0YXRpb24gaW50byBhc3NvY2lhdGVkIHN0YXRlXG4gICogQE5MODAyMTFfU1RBX0ZMQUdfU1BQX0FNU0RVOiBzdGF0aW9uIHN1cHBvcnRzIFNQUCBBLU1TRFVzXG4mIzQzOyAqIEBOTDgwMjExX1NUQV9GTEFHX0NJUDogc3RhdGlvbiBoYXMgQ29udHJvbCBJbnRlZ3JpdHkgUHJvdG9jb2wgKENJUCkgZW5hYmxlZFxuICAqIEBOTDgwMjExX1NUQV9GTEFHX01BWDogaGlnaGVzdCBzdGF0aW9uIGZsYWcgbnVtYmVyIGN1cnJlbnRseSBkZWZpbmVkXG4gICogQF9fTkw4MDIxMV9TVEFfRkxBR19BRlRFUl9MQVNUOiBpbnRlcm5hbCB1c2VcbiAgKi9cbkBAIC0zOTQ3LDYgJiM0MzszOTU1LDcgQEAgZW51bSBubDgwMjExX3N0YV9mbGFncyB7XG4gXHROTDgwMjExX1NUQV9GTEFHX1RETFNfUEVFUixcbiBcdE5MODAyMTFfU1RBX0ZMQUdfQVNTT0NJQVRFRCxcbiBcdE5MODAyMTFfU1RBX0ZMQUdfU1BQX0FNU0RVLFxuJiM0MztcdE5MODAyMTFfU1RBX0ZMQUdfQ0lQLFxuIFxuIFx0Lyoga2VlcCBsYXN0ICovXG4gXHRfX05MODAyMTFfU1RBX0ZMQUdfQUZURVJfTEFTVCxcbkBAIC01Nzc4LDEyICYjNDM7NTc4NywxNiBAQCBlbnVtIG5sODAyMTFfYXV0aF90eXBlIHtcbiAgKiBATkw4MDIxMV9LRVlUWVBFX0dST1VQOiBHcm91cCAoYnJvYWRjYXN0L211bHRpY2FzdCkga2V5XG4gICogQE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRTogUGFpcndpc2UgKHVuaWNhc3QvaW5kaXZpZHVhbCkga2V5XG4gICogQE5MODAyMTFfS0VZVFlQRV9QRUVSS0VZOiBQZWVyS2V5IChETFMpXG4mIzQzOyAqIEBOTDgwMjExX0tFWVRZUEVfQ0lHVEs6IENvbnRyb2wgSW50ZWdyaXR5IEdyb3VwIFRlbXBvcmFsIEtleVxuJiM0MzsgKlx0VGhlIGNpcGhlciBpcyBHTUFDLTI1NiBidXQgcGFzc2VkIGFzIEdDTVAtMjU2LFxuJiM0MzsgKlx0c2FtZSBhcyB0aGUgcGFpcndpc2Uga2V5IHdoZW4gdXNlZCBmb3IgQ0lQLlxuICAqIEBOVU1fTkw4MDIxMV9LRVlUWVBFUzogbnVtYmVyIG9mIGRlZmluZWQga2V5IHR5cGVzXG4gICovXG4gZW51bSBubDgwMjExX2tleV90eXBlIHtcbiBcdE5MODAyMTFfS0VZVFlQRV9HUk9VUCxcbiBcdE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRSxcbiBcdE5MODAyMTFfS0VZVFlQRV9QRUVSS0VZLFxuJiM0MztcdE5MODAyMTFfS0VZVFlQRV9DSUdUSyxcbiBcbiBcdE5VTV9OTDgwMjExX0tFWVRZUEVTXG4gfTtcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvY2ZnLmMgYi9uZXQvbWFjODAyMTEvY2ZnLmNcbmluZGV4IDBhOTI0N2JlMjZhZmEuLjNiZjgxNjI5Y2RlMzQgMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvY2ZnLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS9jZmcuY1xuQEAgLTYxMSwxMiAmIzQzOzYxMSwxNSBAQCBzdGF0aWMgaW50IGllZWU4MDIxMV9zZXRfdHgoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4gfVxuIFxuIHN0YXRpYyBpbnQgaWVlZTgwMjExX2FkZF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldixcbi1cdFx0XHQgICAgIGludCBsaW5rX2lkLCB1OCBrZXlfaWR4LCBib29sIHBhaXJ3aXNlLFxuJiM0MztcdFx0XHQgICAgIGludCBsaW5rX2lkLCB1OCBrZXlfaWR4LFxuJiM0MztcdFx0XHQgICAgIGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLFxuIFx0XHRcdCAgICAgY29uc3QgdTggKm1hY19hZGRyLCBzdHJ1Y3Qga2V5X3BhcmFtcyAqcGFyYW1zKVxuIHtcbiBcdHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX1dERVZfVE9fU1VCX0lGKHdkZXYpO1xuIFx0c3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbmsgPVxuIFx0XHRpZWVlODAyMTFfbGlua19vcl9kZWZsaW5rKHNkYXRhLCBsaW5rX2lkLCBmYWxzZSk7XG4mIzQzO1x0Ym9vbCBwYWlyd2lzZSA9IHR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFO1xuJiM0MztcdGJvb2wgY2lndGsgPSB0eXBlID09IE5MODAyMTFfS0VZVFlQRV9DSUdUSztcbiBcdHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtXHUwMDNlbG9jYWw7XG4gXHRzdHJ1Y3Qgc3RhX2luZm8gKnN0YSA9IE5VTEw7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5O1xuQEAgLTY2MCw2ICYjNDM7NjYzLDkgQEAgc3RhdGljIGludCBpZWVlODAyMTFfYWRkX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuIFx0XHRrZXktXHUwMDNlY29uZi5saW5rX2lkID0gLTE7XG4gXHR9IGVsc2Uge1xuIFx0XHRrZXktXHUwMDNlY29uZi5saW5rX2lkID0gbGluay1cdTAwM2VsaW5rX2lkO1xuJiM0MztcbiYjNDM7XHRcdGlmIChjaWd0aylcbiYjNDM7XHRcdFx0a2V5LVx1MDAzZWNvbmYuZmxhZ3MgfD0gSUVFRTgwMjExX0tFWV9GTEFHX0NJUDtcbiBcdH1cbiBcbiBcdGlmIChwYXJhbXMtXHUwMDNlbW9kZSA9PSBOTDgwMjExX0tFWV9OT19UWClcbkBAIC03MzcsMTAgJiM0Mzs3NDMsMTMgQEAgc3RhdGljIGludCBpZWVlODAyMTFfYWRkX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuIFxuIHN0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX2tleSAqXG4gaWVlZTgwMjExX2xvb2t1cF9rZXkoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGludCBsaW5rX2lkLFxuLVx0XHQgICAgIHU4IGtleV9pZHgsIGJvb2wgcGFpcndpc2UsIGNvbnN0IHU4ICptYWNfYWRkcilcbiYjNDM7XHRcdCAgICAgdTgga2V5X2lkeCwgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsXG4mIzQzO1x0XHQgICAgIGNvbnN0IHU4ICptYWNfYWRkcilcbiB7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCBfX21heWJlX3VudXNlZCA9IHNkYXRhLVx1MDAzZWxvY2FsO1xuIFx0c3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbmsgPSBcdTAwMjZzZGF0YS1cdTAwM2VkZWZsaW5rO1xuJiM0MztcdGJvb2wgcGFpcndpc2UgPSB0eXBlID09IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRTtcbiYjNDM7XHRib29sIGNpZ3RrID0gdHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfQ0lHVEs7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5O1xuIFxuIFx0aWYgKGxpbmtfaWQgXHUwMDNlPSAwKSB7XG5AQCAtNzcwLDcgJiM0Mzs3NzksMTEgQEAgaWVlZTgwMjExX2xvb2t1cF9rZXkoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGludCBsaW5rX2lkLFxuIFx0XHRcdHJldHVybiB3aXBoeV9kZXJlZmVyZW5jZShsb2NhbC1cdTAwM2Vody53aXBoeSxcbiBcdFx0XHRcdFx0XHQgc3RhLVx1MDAzZXB0a1trZXlfaWR4XSk7XG4gXG4tXHRcdGlmICghcGFpcndpc2UgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRpZiAoY2lndGsgXHUwMDI2XHUwMDI2IGtleV9pZHggXHUwMDNjIE5VTV9DVFJMX0tFWVMpXG4mIzQzO1x0XHRcdHJldHVybiB3aXBoeV9kZXJlZmVyZW5jZShsb2NhbC1cdTAwM2Vody53aXBoeSxcbiYjNDM7XHRcdFx0XHRcdFx0IGxpbmtfc3RhLVx1MDAzZWNpZ3RrW2tleV9pZHhdKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIXBhaXJ3aXNlIFx1MDAyNlx1MDAyNiAhY2lndGsgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICBrZXlfaWR4IFx1MDAzYyBOVU1fREVGQVVMVF9LRVlTICYjNDM7XG4gXHRcdFx0ICAgICAgTlVNX0RFRkFVTFRfTUdNVF9LRVlTICYjNDM7XG4gXHRcdFx0ICAgICAgTlVNX0RFRkFVTFRfQkVBQ09OX0tFWVMpXG5AQCAtNzgzLDYgJiM0Mzs3OTYsOSBAQCBpZWVlODAyMTFfbG9va3VwX2tleShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgaW50IGxpbmtfaWQsXG4gXHRpZiAocGFpcndpc2UgXHUwMDI2XHUwMDI2IGtleV9pZHggXHUwMDNjIE5VTV9ERUZBVUxUX0tFWVMpXG4gXHRcdHJldHVybiB3aXBoeV9kZXJlZmVyZW5jZShsb2NhbC1cdTAwM2Vody53aXBoeSwgc2RhdGEtXHUwMDNla2V5c1trZXlfaWR4XSk7XG4gXG4mIzQzO1x0aWYgKGNpZ3RrKVxuJiM0MztcdFx0cmV0dXJuIHdpcGh5X2RlcmVmZXJlbmNlKGxvY2FsLVx1MDAzZWh3LndpcGh5LCBsaW5rLVx1MDAzZWNpZ3RrW2tleV9pZHhdKTtcbiYjNDM7XG4gXHRrZXkgPSB3aXBoeV9kZXJlZmVyZW5jZShsb2NhbC1cdTAwM2Vody53aXBoeSwgbGluay1cdTAwM2VndGtba2V5X2lkeF0pO1xuIFx0aWYgKGtleSlcbiBcdFx0cmV0dXJuIGtleTtcbkBAIC03OTUsOCAmIzQzOzgxMSw4IEBAIGllZWU4MDIxMV9sb29rdXBfa2V5KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBpbnQgbGlua19pZCxcbiB9XG4gXG4gc3RhdGljIGludCBpZWVlODAyMTFfZGVsX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuLVx0XHRcdCAgICAgaW50IGxpbmtfaWQsIHU4IGtleV9pZHgsIGJvb2wgcGFpcndpc2UsXG4tXHRcdFx0ICAgICBjb25zdCB1OCAqbWFjX2FkZHIpXG4mIzQzO1x0XHRcdCAgICAgaW50IGxpbmtfaWQsIHU4IGtleV9pZHgsXG4mIzQzO1x0XHRcdCAgICAgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsIGNvbnN0IHU4ICptYWNfYWRkcilcbiB7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9XREVWX1RPX1NVQl9JRih3ZGV2KTtcbiBcdHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtXHUwMDNlbG9jYWw7XG5AQCAtODA0LDcgJiM0Mzs4MjAsNyBAQCBzdGF0aWMgaW50IGllZWU4MDIxMV9kZWxfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4gXG4gXHRsb2NrZGVwX2Fzc2VydF93aXBoeShsb2NhbC1cdTAwM2Vody53aXBoeSk7XG4gXG4tXHRrZXkgPSBpZWVlODAyMTFfbG9va3VwX2tleShzZGF0YSwgbGlua19pZCwga2V5X2lkeCwgcGFpcndpc2UsIG1hY19hZGRyKTtcbiYjNDM7XHRrZXkgPSBpZWVlODAyMTFfbG9va3VwX2tleShzZGF0YSwgbGlua19pZCwga2V5X2lkeCwgdHlwZSwgbWFjX2FkZHIpO1xuIFx0aWYgKCFrZXkpXG4gXHRcdHJldHVybiAtRU5PRU5UO1xuIFxuQEAgLTgxNCw3ICYjNDM7ODMwLDggQEAgc3RhdGljIGludCBpZWVlODAyMTFfZGVsX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuIH1cbiBcbiBzdGF0aWMgaW50IGllZWU4MDIxMV9nZXRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4tXHRcdFx0ICAgICBpbnQgbGlua19pZCwgdTgga2V5X2lkeCwgYm9vbCBwYWlyd2lzZSxcbiYjNDM7XHRcdFx0ICAgICBpbnQgbGlua19pZCwgdTgga2V5X2lkeCxcbiYjNDM7XHRcdFx0ICAgICBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSxcbiBcdFx0XHQgICAgIGNvbnN0IHU4ICptYWNfYWRkciwgdm9pZCAqY29va2llLFxuIFx0XHRcdCAgICAgdm9pZCAoKmNhbGxiYWNrKSh2b2lkICpjb29raWUsXG4gXHRcdFx0XHRcdCAgICAgIHN0cnVjdCBrZXlfcGFyYW1zICpwYXJhbXMpKVxuQEAgLTgzMyw3ICYjNDM7ODUwLDcgQEAgc3RhdGljIGludCBpZWVlODAyMTFfZ2V0X2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuIFxuLVx0a2V5ID0gaWVlZTgwMjExX2xvb2t1cF9rZXkoc2RhdGEsIGxpbmtfaWQsIGtleV9pZHgsIHBhaXJ3aXNlLCBtYWNfYWRkcik7XG4mIzQzO1x0a2V5ID0gaWVlZTgwMjExX2xvb2t1cF9rZXkoc2RhdGEsIGxpbmtfaWQsIGtleV9pZHgsIHR5cGUsIG1hY19hZGRyKTtcbiBcdGlmICgha2V5KVxuIFx0XHRnb3RvIG91dDtcbiBcbkBAIC0yMjg5LDYgJiM0MzsyMzA2LDggQEAgc3RhdGljIGludCBzdGFfbGlua19hcHBseV9wYXJhbWV0ZXJzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxuIFx0Y2FzZSBTVEFfTElOS19NT0RFX05FVzpcbiBcdFx0aWYgKCFwYXJhbXMtXHUwMDNlbGlua19tYWMpXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHRpZiAoc3RhLVx1MDAzZXN0YS5jaXAgXHUwMDI2XHUwMDI2ICFwYXJhbXMtXHUwMDNlY2lwX2NhcF9zZXQpXG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgU1RBX0xJTktfTU9ERV9MSU5LX01PRElGWTpcbiBcdFx0YnJlYWs7XG5AQCAtMjQxMSw2ICYjNDM7MjQzMCw5IEBAIHN0YXRpYyBpbnQgc3RhX2xpbmtfYXBwbHlfcGFyYW1ldGVycyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCxcbiBcdFx0aWVlZTgwMjExX3MxZ19jYXBfdG9fc3RhX3MxZ19jYXAoc2RhdGEsIHBhcmFtcy1cdTAwM2VzMWdfY2FwYSxcbiBcdFx0XHRcdFx0XHQgbGlua19zdGEpO1xuIFxuJiM0MztcdGlmIChwYXJhbXMtXHUwMDNlY2lwX2NhcF9zZXQpXG4mIzQzO1x0XHRsaW5rX3N0YS1cdTAwM2VwdWItXHUwMDNlY2lwX21pY19wYWRkaW5nID0gcGFyYW1zLVx1MDAzZWNpcF9jYXA7XG4mIzQzO1xuIFx0c3dpdGNoIChzZGF0YS1cdTAwM2V2aWYudHlwZSkge1xuIFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9OQU46XG4gXHRjYXNlIE5MODAyMTFfSUZUWVBFX05BTl9EQVRBOlxuQEAgLTI1NzMsNiAmIzQzOzI1OTUsOSBAQCBzdGF0aWMgaW50IHN0YV9hcHBseV9wYXJhbWV0ZXJzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxuIFx0aWYgKHBhcmFtcy1cdTAwM2VlbWxfY2FwX3ByZXNlbnQpXG4gXHRcdHN0YS1cdTAwM2VzdGEuZW1sX2NhcCA9IHBhcmFtcy1cdTAwM2VlbWxfY2FwO1xuIFxuJiM0MztcdGlmIChwYXJhbXMtXHUwMDNlc3RhX2ZsYWdzX3NldCBcdTAwMjYgQklUKE5MODAyMTFfU1RBX0ZMQUdfQ0lQKSlcbiYjNDM7XHRcdHN0YS1cdTAwM2VzdGEuY2lwID0gdHJ1ZTtcbiYjNDM7XG4gXHRyZXQgPSBzdGFfbGlua19hcHBseV9wYXJhbWV0ZXJzKGxvY2FsLCBzdGEsIFNUQV9MSU5LX01PREVfU1RBX01PRElGWSxcbiBcdFx0XHRcdFx0XHUwMDI2cGFyYW1zLVx1MDAzZWxpbmtfc3RhX3BhcmFtcyk7XG4gXHRpZiAocmV0KVxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oIGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmhcbmluZGV4IGExZWY4OGZlODQ2ZGQuLmZjODVmOGJmOTZlM2EgMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmhcbkBAIC00NzcsNiAmIzQzOzQ3Nyw3IEBAIHN0cnVjdCBpZWVlODAyMTFfbWdkX2Fzc29jX2RhdGEge1xuIFx0Ym9vbCBjb21lYmFjazsgLyogd2hldGhlciB0aGUgQVAgaGFzIHJlcXVlc3RlZCBhc3NvY2lhdGlvbiBjb21lYmFjayAqL1xuIFx0Ym9vbCBzMWc7XG4gXHRib29sIHNwcF9hbXNkdTtcbiYjNDM7XHRib29sIGNpcDtcbiBcbiBcdHM4IGFzc29jX2xpbmtfaWQ7XG4gXG5AQCAtMTEwNCw2ICYjNDM7MTEwNSw3IEBAIHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhIHtcbiBcdHN0cnVjdCBpZWVlODAyMTFfa2V5IF9fcmN1ICpndGtbTlVNX0RFRkFVTFRfS0VZUyAmIzQzO1xuIFx0XHRcdFx0XHROVU1fREVGQVVMVF9NR01UX0tFWVMgJiM0MztcbiBcdFx0XHRcdFx0TlVNX0RFRkFVTFRfQkVBQ09OX0tFWVNdO1xuJiM0MztcdHN0cnVjdCBpZWVlODAyMTFfa2V5IF9fcmN1ICpjaWd0a1tOVU1fQ1RSTF9LRVlTXTtcbiBcdHN0cnVjdCBpZWVlODAyMTFfa2V5IF9fcmN1ICpkZWZhdWx0X211bHRpY2FzdF9rZXk7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2tleSBfX3JjdSAqZGVmYXVsdF9tZ210X2tleTtcbiBcdHN0cnVjdCBpZWVlODAyMTFfa2V5IF9fcmN1ICpkZWZhdWx0X2JlYWNvbl9rZXk7XG5AQCAtMTg3MCw2ICYjNDM7MTg3Miw3IEBAIHN0cnVjdCBpZWVlODAyXzExX2VsZW1zIHtcbiBcdGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdHRsbV9lbGVtICp0dGxtW0lFRUU4MDIxMV9UVExNX01BWF9DTlRdO1xuIFx0Y29uc3Qgc3RydWN0IGllZWU4MDIxMV91aHJfY2FwICp1aHJfY2FwO1xuIFx0Y29uc3Qgc3RydWN0IGllZWU4MDIxMV91aHJfb3BlcmF0aW9uICp1aHJfb3BlcmF0aW9uO1xuJiM0MztcdGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfY2lwX2NhcCAqY2lwX2NhcDtcbiBcbiBcdC8qIG5vdCB0aGUgb3JkZXIgaW4gdGhlIHBzZCB2YWx1ZXMgaXMgcGVyIGVsZW1lbnQsIG5vdCBwZXIgY2hhbmRlZiAqL1xuIFx0c3RydWN0IGllZWU4MDIxMV9wYXJzZWRfdHBlIHRwZTtcbkBAIC0yNzc1LDYgJiM0MzsyNzc4LDggQEAgaW50IGllZWU4MDIxMV9wdXRfdWhyX2NhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdCAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQpO1xuIHZvaWQgaWVlZTgwMjExX3B1dF9yZWdfY29ubihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiBcdFx0XHQgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4mIzQzO2ludCBpZWVlODAyMTFfcHV0X2NpcF9jYXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiYjNDM7XHRcdFx0ICBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7XG4gXG4gLyogY2hhbm5lbCBtYW5hZ2VtZW50ICovXG4gYm9vbCBpZWVlODAyMTFfY2hhbmRlZl9odF9vcGVyKGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfaHRfb3BlcmF0aW9uICpodF9vcGVyLFxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9rZXkuYyBiL25ldC9tYWM4MDIxMS9rZXkuY1xuaW5kZXggZjQ1ZTc5MmFiZWRlNS4uNGM5Nzg4ZWMwYjc0ZiAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS9rZXkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL2tleS5jXG5AQCAtMjA1LDYgJiM0MzsyMDUsMTAgQEAgc3RhdGljIGludCBpZWVlODAyMTFfa2V5X2VuYWJsZV9od19hY2NlbChzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5KVxuIFx0XHRcdCAgc3RhID8gc3RhLVx1MDAzZXN0YS5hZGRyIDogYmNhc3RfYWRkciwgcmV0KTtcbiBcbiAgb3V0X3Vuc3VwcG9ydGVkOlxuJiM0MztcdC8qIENvbnRyb2wgSW50ZWdyaXR5IFByb3RvY29sIGNhbiBvbmx5IGJlIGRvbmUgaW4gaGFyZHdhcmUgKi9cbiYjNDM7XHRpZiAoa2V5LVx1MDAzZWNvbmYuZmxhZ3MgXHUwMDI2IElFRUU4MDIxMV9LRVlfRkxBR19DSVApXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4gXHRzd2l0Y2ggKGtleS1cdTAwM2Vjb25mLmNpcGhlcikge1xuIFx0Y2FzZSBXTEFOX0NJUEhFUl9TVUlURV9XRVA0MDpcbiBcdGNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfV0VQMTA0OlxuQEAgLTQ0MCwxMSAmIzQzOzQ0NCwxMyBAQCB2b2lkIGllZWU4MDIxMV9zZXRfZGVmYXVsdF9iZWFjb25fa2V5KHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rLFxuIHN0YXRpYyBpbnQgaWVlZTgwMjExX2tleV9yZXBsYWNlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0XHRcdFx0IHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rLFxuIFx0XHRcdFx0IHN0cnVjdCBzdGFfaW5mbyAqc3RhLFxuLVx0XHRcdFx0IGJvb2wgcGFpcndpc2UsXG4mIzQzO1x0XHRcdFx0IGVudW0gaWVlZTgwMjExX2tleV9mbGFncyBmbGFncyxcbiBcdFx0XHRcdCBzdHJ1Y3QgaWVlZTgwMjExX2tleSAqb2xkLFxuIFx0XHRcdFx0IHN0cnVjdCBpZWVlODAyMTFfa2V5ICpuZXcpXG4ge1xuIFx0c3RydWN0IGxpbmtfc3RhX2luZm8gKmxpbmtfc3RhID0gc3RhID8gXHUwMDI2c3RhLVx1MDAzZWRlZmxpbmsgOiBOVUxMO1xuJiM0MztcdGJvb2wgcGFpcndpc2UgPSBmbGFncyBcdTAwMjYgSUVFRTgwMjExX0tFWV9GTEFHX1BBSVJXSVNFO1xuJiM0MztcdGJvb2wgY2lwID0gZmxhZ3MgXHUwMDI2IElFRUU4MDIxMV9LRVlfRkxBR19DSVA7XG4gXHRpbnQgbGlua19pZDtcbiBcdGludCBpZHg7XG4gXHRpbnQgcmV0ID0gMDtcbkBAIC01MzUsNiAmIzQzOzU0MSw4IEBAIHN0YXRpYyBpbnQgaWVlZTgwMjExX2tleV9yZXBsYWNlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0XHRcdGlmIChuZXcgXHUwMDI2XHUwMDI2XG4gXHRcdFx0ICAgICEobmV3LVx1MDAzZWNvbmYuZmxhZ3MgXHUwMDI2IElFRUU4MDIxMV9LRVlfRkxBR19OT19BVVRPX1RYKSlcbiBcdFx0XHRcdF9pZWVlODAyMTFfc2V0X3R4X2tleShuZXcsIHRydWUpO1xuJiM0MztcdFx0fSBlbHNlIGlmIChjaXApIHtcbiYjNDM7XHRcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKGxpbmtfc3RhLVx1MDAzZWNpZ3RrW2lkeF0sIG5ldyk7XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKGxpbmtfc3RhLVx1MDAzZWd0a1tpZHhdLCBuZXcpO1xuIFx0XHR9XG5AQCAtNTY5LDYgJiM0Mzs1NzcsOCBAQCBzdGF0aWMgaW50IGllZWU4MDIxMV9rZXlfcmVwbGFjZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiBcbiBcdFx0aWYgKGlzX3dlcCB8fCBwYWlyd2lzZSlcbiBcdFx0XHRyY3VfYXNzaWduX3BvaW50ZXIoc2RhdGEtXHUwMDNla2V5c1tpZHhdLCBuZXcpO1xuJiM0MztcdFx0ZWxzZSBpZiAoY2lwKVxuJiM0MztcdFx0XHRyY3VfYXNzaWduX3BvaW50ZXIobGluay1cdTAwM2VjaWd0a1tpZHhdLCBuZXcpO1xuIFx0XHRlbHNlXG4gXHRcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKGxpbmstXHUwMDNlZ3RrW2lkeF0sIG5ldyk7XG4gXG5AQCAtODgzLDYgJiM0Mzs4OTMsMTAgQEAgaW50IGllZWU4MDIxMV9rZXlfbGluayhzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5LFxuIFx0XHRcdHJldCA9IC1FT1BOT1RTVVBQO1xuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHR9XG4mIzQzO1xuJiM0MztcdFx0LyogU2V0IENJUCBmbGFnIGlmIGVuYWJsZWQgZm9yIHRoZSBzdGF0aW9uICovXG4mIzQzO1x0XHRpZiAoc3RhLVx1MDAzZXN0YS5jaXApXG4mIzQzO1x0XHRcdGtleS1cdTAwM2Vjb25mLmZsYWdzIHw9IElFRUU4MDIxMV9LRVlfRkxBR19DSVA7XG4gXHR9IGVsc2UgaWYgKHN0YSkge1xuIFx0XHRzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGEgPSBcdTAwMjZzdGEtXHUwMDNlZGVmbGluaztcbiBcdFx0aW50IGxpbmtfaWQgPSBrZXktXHUwMDNlY29uZi5saW5rX2lkO1xuQEAgLTg5NiwxNSAmIzQzOzkxMCwyNSBAQCBpbnQgaWVlZTgwMjExX2tleV9saW5rKHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXksXG4gXHRcdFx0fVxuIFx0XHR9XG4gXG4tXHRcdG9sZF9rZXkgPSB3aXBoeV9kZXJlZmVyZW5jZShzZGF0YS1cdTAwM2Vsb2NhbC1cdTAwM2Vody53aXBoeSxcbi1cdFx0XHRcdFx0ICAgIGxpbmtfc3RhLVx1MDAzZWd0a1tpZHhdKTtcbi1cdH0gZWxzZSB7XG4tXHRcdGlmIChpZHggXHUwMDNjIE5VTV9ERUZBVUxUX0tFWVMpXG4mIzQzO1x0XHRpZiAoa2V5LVx1MDAzZWNvbmYuZmxhZ3MgXHUwMDI2IElFRUU4MDIxMV9LRVlfRkxBR19DSVApXG4gXHRcdFx0b2xkX2tleSA9IHdpcGh5X2RlcmVmZXJlbmNlKHNkYXRhLVx1MDAzZWxvY2FsLVx1MDAzZWh3LndpcGh5LFxuLVx0XHRcdFx0XHRcdCAgICBzZGF0YS1cdTAwM2VrZXlzW2lkeF0pO1xuLVx0XHRpZiAoIW9sZF9rZXkpXG4mIzQzO1x0XHRcdFx0XHRcdCAgICBsaW5rX3N0YS1cdTAwM2VjaWd0a1tpZHhdKTtcbiYjNDM7XHRcdGVsc2VcbiBcdFx0XHRvbGRfa2V5ID0gd2lwaHlfZGVyZWZlcmVuY2Uoc2RhdGEtXHUwMDNlbG9jYWwtXHUwMDNlaHcud2lwaHksXG4tXHRcdFx0XHRcdFx0ICAgIGxpbmstXHUwMDNlZ3RrW2lkeF0pO1xuJiM0MztcdFx0XHRcdFx0XHQgICAgbGlua19zdGEtXHUwMDNlZ3RrW2lkeF0pO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRpZiAoa2V5LVx1MDAzZWNvbmYuZmxhZ3MgXHUwMDI2IElFRUU4MDIxMV9LRVlfRkxBR19DSVApIHtcbiYjNDM7XHRcdFx0b2xkX2tleSA9IHdpcGh5X2RlcmVmZXJlbmNlKHNkYXRhLVx1MDAzZWxvY2FsLVx1MDAzZWh3LndpcGh5LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgbGluay1cdTAwM2VjaWd0a1tpZHhdKTtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdGlmIChpZHggXHUwMDNjIE5VTV9ERUZBVUxUX0tFWVMpXG4mIzQzO1x0XHRcdFx0b2xkX2tleSA9IHdpcGh5X2RlcmVmZXJlbmNlKHNkYXRhLVx1MDAzZWxvY2FsLVx1MDAzZWh3LndpcGh5LFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgICBzZGF0YS1cdTAwM2VrZXlzW2lkeF0pO1xuJiM0MztcbiYjNDM7XHRcdFx0aWYgKCFvbGRfa2V5KVxuJiM0MztcdFx0XHRcdG9sZF9rZXkgPSB3aXBoeV9kZXJlZmVyZW5jZShzZGF0YS1cdTAwM2Vsb2NhbC1cdTAwM2Vody53aXBoeSxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICAgbGluay1cdTAwM2VndGtbaWR4XSk7XG4mIzQzO1x0XHR9XG4gXHR9XG4gXG4gXHQvKiBOb24tcGFpcndpc2Uga2V5cyBtdXN0IGFsc28gbm90IHN3aXRjaCB0aGUgY2lwaGVyIG9uIHJla2V5ICovXG5AQCAtOTM4LDkgJiM0Mzs5NjIsMTcgQEAgaW50IGllZWU4MDIxMV9rZXlfbGluayhzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5LFxuIFx0aWYgKHN0YSBcdTAwMjZcdTAwMjYgc3RhLVx1MDAzZXN0YS5zcHBfYW1zZHUpXG4gXHRcdGtleS1cdTAwM2Vjb25mLmZsYWdzIHw9IElFRUU4MDIxMV9LRVlfRkxBR19TUFBfQU1TRFU7XG4gXG4mIzQzO1x0LyogQSBDSVAgcmVsYXRlZCBrZXkgbXVzdCBiZSBHQ01QLTI1NiAocmVhbGx5IEdNQUMtMjU2KSAqL1xuJiM0MztcdGlmICgoa2V5LVx1MDAzZWNvbmYuZmxhZ3MgXHUwMDI2IElFRUU4MDIxMV9LRVlfRkxBR19DSVApIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBrZXktXHUwMDNlY29uZi5jaXBoZXIgIT0gV0xBTl9DSVBIRVJfU1VJVEVfR0NNUF8yNTYpIHtcbiYjNDM7XHRcdHJldCA9IC1FSU5WQUw7XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0aW5jcmVtZW50X3RhaWxyb29tX25lZWRfY291bnQoc2RhdGEpO1xuIFxuLVx0cmV0ID0gaWVlZTgwMjExX2tleV9yZXBsYWNlKHNkYXRhLCBsaW5rLCBzdGEsIHBhaXJ3aXNlLCBvbGRfa2V5LCBrZXkpO1xuJiM0MztcdHJldCA9IGllZWU4MDIxMV9rZXlfcmVwbGFjZShzZGF0YSwgbGluaywgc3RhLCBrZXktXHUwMDNlY29uZi5mbGFncyxcbiYjNDM7XHRcdFx0XHQgICAgb2xkX2tleSwga2V5KTtcbiBcbiBcdGlmICghcmV0KSB7XG4gXHRcdGllZWU4MDIxMV9kZWJ1Z2ZzX2tleV9hZGQoa2V5KTtcbkBAIC05NjYsOCAmIzQzOzk5OCw3IEBAIHZvaWQgaWVlZTgwMjExX2tleV9mcmVlKHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXksIGJvb2wgZGVsYXlfdGFpbHJvb20pXG4gXHQgKi9cbiBcdGlmIChrZXktXHUwMDNlc2RhdGEpXG4gXHRcdGllZWU4MDIxMV9rZXlfcmVwbGFjZShrZXktXHUwMDNlc2RhdGEsIE5VTEwsIGtleS1cdTAwM2VzdGEsXG4tXHRcdFx0XHQgICAgICBrZXktXHUwMDNlY29uZi5mbGFncyBcdTAwMjYgSUVFRTgwMjExX0tFWV9GTEFHX1BBSVJXSVNFLFxuLVx0XHRcdFx0ICAgICAga2V5LCBOVUxMKTtcbiYjNDM7XHRcdFx0XHQgICAgICBrZXktXHUwMDNlY29uZi5mbGFncywga2V5LCBOVUxMKTtcbiBcdGllZWU4MDIxMV9rZXlfZGVzdHJveShrZXksIGRlbGF5X3RhaWxyb29tKTtcbiB9XG4gXG5AQCAtMTA5OCw4ICYjNDM7MTEyOSw3IEBAIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9mcmVlX2tleXNfaWZhY2Uoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoa2V5LCB0bXAsIFx1MDAyNnNkYXRhLVx1MDAzZWtleV9saXN0LCBsaXN0KSB7XG4gXHRcdGllZWU4MDIxMV9rZXlfcmVwbGFjZShrZXktXHUwMDNlc2RhdGEsIE5VTEwsIGtleS1cdTAwM2VzdGEsXG4tXHRcdFx0XHQgICAgICBrZXktXHUwMDNlY29uZi5mbGFncyBcdTAwMjYgSUVFRTgwMjExX0tFWV9GTEFHX1BBSVJXSVNFLFxuLVx0XHRcdFx0ICAgICAga2V5LCBOVUxMKTtcbiYjNDM7XHRcdFx0XHQgICAgICBrZXktXHUwMDNlY29uZi5mbGFncywga2V5LCBOVUxMKTtcbiBcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZrZXktXHUwMDNlbGlzdCwga2V5cyk7XG4gXHR9XG4gXG5AQCAtMTExOSw4ICYjNDM7MTE0OSw3IEBAIHZvaWQgaWVlZTgwMjExX3JlbW92ZV9saW5rX2tleXMoc3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbmssXG4gXHRcdGlmIChrZXktXHUwMDNlY29uZi5saW5rX2lkICE9IGxpbmstXHUwMDNlbGlua19pZClcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0aWVlZTgwMjExX2tleV9yZXBsYWNlKGtleS1cdTAwM2VzZGF0YSwgbGluaywga2V5LVx1MDAzZXN0YSxcbi1cdFx0XHRcdCAgICAgIGtleS1cdTAwM2Vjb25mLmZsYWdzIFx1MDAyNiBJRUVFODAyMTFfS0VZX0ZMQUdfUEFJUldJU0UsXG4tXHRcdFx0XHQgICAgICBrZXksIE5VTEwpO1xuJiM0MztcdFx0XHRcdCAgICAgIGtleS1cdTAwM2Vjb25mLmZsYWdzLCBrZXksIE5VTEwpO1xuIFx0XHRsaXN0X2FkZF90YWlsKFx1MDAyNmtleS1cdTAwM2VsaXN0LCBrZXlzKTtcbiBcdH1cbiB9XG5AQCAtMTE5Niw4ICYjNDM7MTIyNSwxNyBAQCB2b2lkIGllZWU4MDIxMV9mcmVlX3N0YV9rZXlzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxuIFx0XHRpZiAoIWtleSlcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0aWVlZTgwMjExX2tleV9yZXBsYWNlKGtleS1cdTAwM2VzZGF0YSwgTlVMTCwga2V5LVx1MDAzZXN0YSxcbi1cdFx0XHRcdCAgICAgIGtleS1cdTAwM2Vjb25mLmZsYWdzIFx1MDAyNiBJRUVFODAyMTFfS0VZX0ZMQUdfUEFJUldJU0UsXG4tXHRcdFx0XHQgICAgICBrZXksIE5VTEwpO1xuJiM0MztcdFx0XHRcdCAgICAgIGtleS1cdTAwM2Vjb25mLmZsYWdzLCBrZXksIE5VTEwpO1xuJiM0MztcdFx0X19pZWVlODAyMTFfa2V5X2Rlc3Ryb3koa2V5LCBrZXktXHUwMDNlc2RhdGEtXHUwMDNldmlmLnR5cGUgPT1cbiYjNDM7XHRcdFx0XHRcdE5MODAyMTFfSUZUWVBFX1NUQVRJT04pO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShzdGEtXHUwMDNlZGVmbGluay5jaWd0ayk7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRrZXkgPSB3aXBoeV9kZXJlZmVyZW5jZShsb2NhbC1cdTAwM2Vody53aXBoeSwgc3RhLVx1MDAzZWRlZmxpbmsuY2lndGtbaV0pO1xuJiM0MztcdFx0aWYgKCFrZXkpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0aWVlZTgwMjExX2tleV9yZXBsYWNlKGtleS1cdTAwM2VzZGF0YSwgTlVMTCwga2V5LVx1MDAzZXN0YSxcbiYjNDM7XHRcdFx0XHQgICAgICBrZXktXHUwMDNlY29uZi5mbGFncywga2V5LCBOVUxMKTtcbiBcdFx0X19pZWVlODAyMTFfa2V5X2Rlc3Ryb3koa2V5LCBrZXktXHUwMDNlc2RhdGEtXHUwMDNldmlmLnR5cGUgPT1cbiBcdFx0XHRcdFx0Tkw4MDIxMV9JRlRZUEVfU1RBVElPTik7XG4gXHR9XG5AQCAtMTIwNyw4ICYjNDM7MTI0NSw3IEBAIHZvaWQgaWVlZTgwMjExX2ZyZWVfc3RhX2tleXMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXG4gXHRcdGlmICgha2V5KVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRpZWVlODAyMTFfa2V5X3JlcGxhY2Uoa2V5LVx1MDAzZXNkYXRhLCBOVUxMLCBrZXktXHUwMDNlc3RhLFxuLVx0XHRcdFx0ICAgICAga2V5LVx1MDAzZWNvbmYuZmxhZ3MgXHUwMDI2IElFRUU4MDIxMV9LRVlfRkxBR19QQUlSV0lTRSxcbi1cdFx0XHRcdCAgICAgIGtleSwgTlVMTCk7XG4mIzQzO1x0XHRcdFx0ICAgICAga2V5LVx1MDAzZWNvbmYuZmxhZ3MsIGtleSwgTlVMTCk7XG4gXHRcdF9faWVlZTgwMjExX2tleV9kZXN0cm95KGtleSwga2V5LVx1MDAzZXNkYXRhLVx1MDAzZXZpZi50eXBlID09XG4gXHRcdFx0XHRcdE5MODAyMTFfSUZUWVBFX1NUQVRJT04pO1xuIFx0fVxuQEAgLTEzNjYsNyAmIzQzOzE0MDMsNyBAQCBFWFBPUlRfU1lNQk9MX0dQTChpZWVlODAyMTFfc2V0X2tleV9yeF9zZXEpO1xuIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKlxuIGllZWU4MDIxMV9ndGtfcmVrZXlfYWRkKHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXG4gXHRcdFx0dTggaWR4LCB1OCAqa2V5X2RhdGEsIHU4IGtleV9sZW4sXG4tXHRcdFx0aW50IGxpbmtfaWQpXG4mIzQzO1x0XHRcdGludCBsaW5rX2lkLCBib29sIGNpZ3RrKVxuIHtcbiBcdHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gdmlmX3RvX3NkYXRhKHZpZik7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLVx1MDAzZWxvY2FsO1xuQEAgLTEzOTAsMTAgJiM0MzsxNDI3LDIwIEBAIGllZWU4MDIxMV9ndGtfcmVrZXlfYWRkKHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXG4gXHRcdCAgICBOVU1fREVGQVVMVF9CRUFDT05fS0VZUykpXG4gXHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuIFxuLVx0cHJldl9rZXkgPSB3aXBoeV9kZXJlZmVyZW5jZShsb2NhbC1cdTAwM2Vody53aXBoeSxcbi1cdFx0XHRcdCAgICAgbGlua19kYXRhLVx1MDAzZWd0a1tpZHhdKTtcbiYjNDM7XHRpZiAoV0FSTl9PTihjaWd0ayBcdTAwMjZcdTAwMjYgaWR4IFx1MDAzZT0gTlVNX0NUUkxfS0VZUykpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGNpZ3RrKVxuJiM0MztcdFx0cHJldl9rZXkgPSB3aXBoeV9kZXJlZmVyZW5jZShsb2NhbC1cdTAwM2Vody53aXBoeSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgbGlua19kYXRhLVx1MDAzZWNpZ3RrW2lkeF0pO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHByZXZfa2V5ID0gd2lwaHlfZGVyZWZlcmVuY2UobG9jYWwtXHUwMDNlaHcud2lwaHksXG4mIzQzO1x0XHRcdFx0XHQgICAgIGxpbmtfZGF0YS1cdTAwM2VndGtbaWR4XSk7XG4gXHRpZiAoIXByZXZfa2V5KSB7XG4tXHRcdGlmIChpZHggXHUwMDNjIE5VTV9ERUZBVUxUX0tFWVMpIHtcbiYjNDM7XHRcdGlmIChjaWd0aykge1xuJiM0MztcdFx0XHRwcmV2X2tleSA9IHdpcGh5X2RlcmVmZXJlbmNlKGxvY2FsLVx1MDAzZWh3LndpcGh5LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgIGxpbmtfZGF0YS1cdTAwM2VjaWd0a1tpZHggXiAxXSk7XG4mIzQzO1x0XHR9IGVsc2UgaWYgKGlkeCBcdTAwM2MgTlVNX0RFRkFVTFRfS0VZUykge1xuIFx0XHRcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBOVU1fREVGQVVMVF9LRVlTOyBpJiM0MzsmIzQzOykge1xuIFx0XHRcdFx0aWYgKGkgPT0gaWR4KVxuIFx0XHRcdFx0XHRjb250aW51ZTtcbkBAIC0xNDI0LDYgJiM0MzsxNDcxLDkgQEAgaWVlZTgwMjExX2d0a19yZWtleV9hZGQoc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcbiBcdGlmIChzZGF0YS1cdTAwM2V1Lm1nZC5tZnAgIT0gSUVFRTgwMjExX01GUF9ESVNBQkxFRClcbiBcdFx0a2V5LVx1MDAzZWNvbmYuZmxhZ3MgfD0gSUVFRTgwMjExX0tFWV9GTEFHX1JYX01HTVQ7XG4gXG4mIzQzO1x0aWYgKHByZXZfa2V5LVx1MDAzZWNvbmYuZmxhZ3MgXHUwMDI2IElFRUU4MDIxMV9LRVlfRkxBR19DSVApXG4mIzQzO1x0XHRrZXktXHUwMDNlY29uZi5mbGFncyB8PSBJRUVFODAyMTFfS0VZX0ZMQUdfQ0lQO1xuJiM0MztcbiBcdGtleS1cdTAwM2Vjb25mLmxpbmtfaWQgPSBsaW5rX2RhdGEtXHUwMDNlbGlua19pZDtcbiBcbiBcdGVyciA9IGllZWU4MDIxMV9rZXlfbGluayhrZXksIGxpbmtfZGF0YSwgTlVMTCk7XG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2tleS5oIGIvbmV0L21hYzgwMjExL2tleS5oXG5pbmRleCA4MjZlNGU5Mzg3YzU1Li5jODU5OTI0OTNhZmQxIDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL2tleS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEva2V5LmhcbkBAIC0yLDcgJiM0MzsyLDcgQEBcbiAvKlxuICAqIENvcHlyaWdodCAyMDAyLTIwMDQsIEluc3RhbnQ4MDIgTmV0d29ya3MsIEluYy5cbiAgKiBDb3B5cmlnaHQgMjAwNSwgRGV2aWNlc2NhcGUgU29mdHdhcmUsIEluYy5cbi0gKiBDb3B5cmlnaHQgKEMpIDIwMTksIDIwMjItMjAyMyBJbnRlbCBDb3Jwb3JhdGlvblxuJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMTksIDIwMjItMjAyMywgMjAyNiBJbnRlbCBDb3Jwb3JhdGlvblxuICAqL1xuIFxuICNpZm5kZWYgSUVFRTgwMjExX0tFWV9IXG5AQCAtMTksNiAmIzQzOzE5LDcgQEBcbiAjZGVmaW5lIE5VTV9ERUZBVUxUX0tFWVMgNFxuICNkZWZpbmUgTlVNX0RFRkFVTFRfTUdNVF9LRVlTIDJcbiAjZGVmaW5lIE5VTV9ERUZBVUxUX0JFQUNPTl9LRVlTIDJcbiYjNDM7I2RlZmluZSBOVU1fQ1RSTF9LRVlTIDJcbiAjZGVmaW5lIElOVkFMSURfUFRLX0tFWUlEWCAyIC8qIEtleWlkeCBhbHdheXMgcG9pbnRpbmcgdG8gYSBOVUxMIGtleSBmb3IgUFRLICovXG4gXG4gc3RydWN0IGllZWU4MDIxMV9sb2NhbDtcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvbWxtZS5jIGIvbmV0L21hYzgwMjExL21sbWUuY1xuaW5kZXggZjUxMTY3ZjBmYzQ2ZC4uMzRkNzEzYzlhNjkxNCAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS9tbG1lLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS9tbG1lLmNcbkBAIC0yMzM3LDYgJiM0MzsyMzM3LDEwIEBAIGllZWU4MDIxMV9hZGRfbGlua19lbGVtcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiBcdFx0aWVlZTgwMjExX3B1dF9laHRfY2FwKHNrYiwgc2RhdGEsIHNiYW5kLFxuIFx0XHRcdFx0ICAgICAgXHUwMDI2YXNzb2NfZGF0YS1cdTAwM2VsaW5rW2xpbmtfaWRdLmNvbm4pO1xuIFxuJiM0MztcdC8qIEluc2VydCBDSVAgb25seSBvbiB0aGUgYXNzb2MgbGluayAoaXQgd2lsbCBiZSBpbmhlcml0ZWQpICovXG4mIzQzO1x0aWYgKGxpbmtfaWQgPT0gYXNzb2NfZGF0YS1cdTAwM2Vhc3NvY19saW5rX2lkIFx1MDAyNlx1MDAyNiBhc3NvY19kYXRhLVx1MDAzZWNpcClcbiYjNDM7XHRcdGllZWU4MDIxMV9wdXRfY2lwX2NhcChza2IsIHNkYXRhKTtcbiYjNDM7XG4gXHRpZiAoYXNzb2NfZGF0YS1cdTAwM2VsaW5rW2xpbmtfaWRdLmNvbm4ubW9kZSBcdTAwM2U9IElFRUU4MDIxMV9DT05OX01PREVfVUhSKVxuIFx0XHRpZWVlODAyMTFfcHV0X3Vocl9jYXAoc2tiLCBzZGF0YSwgc2JhbmQpO1xuIFxuQEAgLTI2MTMsNyAmIzQzOzI2MTcsOCBAQCBzdGF0aWMgaW50IGllZWU4MDIxMV9zZW5kX2Fzc29jKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKVxuIFx0ICAgICAgIGFzc29jX2RhdGEtXHUwMDNlaWVfbGVuICYjNDM7IC8qIGV4dHJhIElFcyAqL1xuIFx0ICAgICAgIChhc3NvY19kYXRhLVx1MDAzZWZpbHNfa2VrX2xlbiA/IDE2IC8qIEFFUy1TSVYgKi8gOiAwKSAmIzQzO1xuIFx0ICAgICAgIDkgLyogV01NICovICYjNDM7XG4tXHQgICAgICAgNCAvKiByZWd1bGF0b3J5IGNvbm5lY3Rpdml0eSwgaWYgNiBHSHogaXMgc3VwcG9ydGVkICovO1xuJiM0MztcdCAgICAgICA0IC8qIHJlZ3VsYXRvcnkgY29ubmVjdGl2aXR5LCBpZiA2IEdIeiBpcyBzdXBwb3J0ZWQgKi8gJiM0MztcbiYjNDM7XHQgICAgICAgKGFzc29jX2RhdGEtXHUwMDNlY2lwID8gNCAvKiBDSVAgY2FwYWJpbGl0aWVzICovIDogMCk7XG4gXG4gXHRmb3IgKGxpbmtfaWQgPSAwOyBsaW5rX2lkIFx1MDAzYyBJRUVFODAyMTFfTUxEX01BWF9OVU1fTElOS1M7IGxpbmtfaWQmIzQzOyYjNDM7KSB7XG4gXHRcdHN0cnVjdCBjZmc4MDIxMV9ic3MgKmNic3MgPSBhc3NvY19kYXRhLVx1MDAzZWxpbmtbbGlua19pZF0uYnNzO1xuQEAgLTYyNzQsNiAmIzQzOzYyNzksMTkgQEAgc3RhdGljIGJvb2wgaWVlZTgwMjExX2Fzc29jX2NvbmZpZ19saW5rKHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rLFxuIFx0XHQvKiBUT0RPOiBPUEVOOiB3aGF0IGhhcHBlbnMgaWYgQlNTIGNvbG9yIGRpc2FibGUgaXMgc2V0PyAqL1xuIFx0fVxuIFxuJiM0MztcdGlmIChhc3NvY19kYXRhLVx1MDAzZWNpcCkge1xuJiM0MztcdFx0aWYgKGVsZW1zLVx1MDAzZWNpcF9jYXApIHtcbiYjNDM7XHRcdFx0bGlua19zdGEtXHUwMDNlcHViLVx1MDAzZWNpcF9taWNfcGFkZGluZyA9XG4mIzQzO1x0XHRcdFx0dThfZ2V0X2JpdHMoZWxlbXMtXHUwMDNlY2lwX2NhcC1cdTAwM2V2LFxuJiM0MztcdFx0XHRcdFx0ICAgIFdMQU5fQ0lQX0NBUEFfTUlDX1BBRERJTkcpO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0c2RhdGFfaW5mbyhzZGF0YSxcbiYjNDM7XHRcdFx0XHQgICBcJiMzNDtDSVAgQ2FwYWJpbGl0aWVzIG5vdCBpbmNsdWRlZCBpbiBhc3NvY2lhdGlvbiByZXNwb25zZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdHJldCA9IGZhbHNlO1xuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuIFx0aWYgKGNic3MtXHUwMDNldHJhbnNtaXR0ZWRfYnNzKSB7XG4gXHRcdGJzc19jb25mLVx1MDAzZW5vbnRyYW5zbWl0dGVkID0gdHJ1ZTtcbiBcdFx0ZXRoZXJfYWRkcl9jb3B5KGJzc19jb25mLVx1MDAzZXRyYW5zbWl0dGVyX2Jzc2lkLFxuQEAgLTcwMDAsNiAmIzQzOzcwMTgsNyBAQCBzdGF0aWMgYm9vbCBpZWVlODAyMTFfYXNzb2Nfc3VjY2VzcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiBcdFx0Z290byBvdXRfZXJyO1xuIFxuIFx0c3RhLVx1MDAzZXN0YS5zcHBfYW1zZHUgPSBhc3NvY19kYXRhLVx1MDAzZXNwcF9hbXNkdTtcbiYjNDM7XHRzdGEtXHUwMDNlc3RhLmNpcCA9IGFzc29jX2RhdGEtXHUwMDNlY2lwO1xuIFxuIFx0aWYgKGllZWU4MDIxMV92aWZfaXNfbWxkKFx1MDAyNnNkYXRhLVx1MDAzZXZpZikpIHtcbiBcdFx0aWYgKCFlbGVtcy1cdTAwM2VtbF9iYXNpYylcbkBAIC0xMDUzOCw2ICYjNDM7MTA1NTcsNyBAQCBpbnQgaWVlZTgwMjExX21nZF9hc3NvYyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiBcdH1cbiBcbiBcdGFzc29jX2RhdGEtXHUwMDNlc3BwX2Ftc2R1ID0gcmVxLVx1MDAzZWZsYWdzIFx1MDAyNiBBU1NPQ19SRVFfU1BQX0FNU0RVO1xuJiM0MztcdGFzc29jX2RhdGEtXHUwMDNlY2lwID0gcmVxLVx1MDAzZWZsYWdzIFx1MDAyNiBBU1NPQ19SRVFfQ0lQO1xuIFxuIFx0aWYgKGlmbWdkLVx1MDAzZWF1dGhfZGF0YSBcdTAwMjZcdTAwMjYgIWlmbWdkLVx1MDAzZWF1dGhfZGF0YS1cdTAwM2Vkb25lKSB7XG4gXHRcdGVyciA9IC1FQlVTWTtcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvcGFyc2UuYyBiL25ldC9tYWM4MDIxMS9wYXJzZS5jXG5pbmRleCBjYjJiZTE2N2NkZTc5Li4zYjY2Y2E3ZDdhNWMyIDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL3BhcnNlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS9wYXJzZS5jXG5AQCAtMjA1LDYgJiM0MzsyMDUsMTAgQEAgaWVlZTgwMjExX3BhcnNlX2V4dGVuc2lvbl9lbGVtZW50KHUzMiAqY3JjLFxuIFx0XHRcdGVsZW1zLVx1MDAzZXR0bG1fbnVtJiM0MzsmIzQzOztcbiBcdFx0fVxuIFx0XHRicmVhaztcbiYjNDM7XHRjYXNlIFdMQU5fRUlEX0VYVF9DSVBfQ0FQQTpcbiYjNDM7XHRcdGlmIChsZW4gXHUwMDNlPSBzaXplb2YoKmVsZW1zLVx1MDAzZWNpcF9jYXApKVxuJiM0MztcdFx0XHRlbGVtcy1cdTAwM2VjaXBfY2FwID0gZGF0YTtcbiYjNDM7XHRcdGJyZWFrO1xuIFx0Y2FzZSBXTEFOX0VJRF9FWFRfVUhSX09QRVI6XG4gXHRcdGlmIChwYXJhbXMtXHUwMDNlbW9kZSBcdTAwM2MgSUVFRTgwMjExX0NPTk5fTU9ERV9VSFIpXG4gXHRcdFx0YnJlYWs7XG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3N0YV9pbmZvLmggYi9uZXQvbWFjODAyMTEvc3RhX2luZm8uaFxuaW5kZXggZWUwZDMyODc3YzViNC4uZjQwOWY2YTNhZmExZiAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS9zdGFfaW5mby5oXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvc3RhX2luZm8uaFxuQEAgLTQ4NSw2ICYjNDM7NDg1LDcgQEAgc3RydWN0IGllZWU4MDIxMV9mcmFnbWVudF9jYWNoZSB7XG4gICogQGxpbmtfaGFzaF9ub2RlOiBoYXNoIG5vZGUgZm9yIHJoYXNodGFibGVcbiAgKiBAc3RhOiBQb2ludHMgdG8gdGhlIFNUQSBpbmZvXG4gICogQGd0azogZ3JvdXAga2V5cyBuZWdvdGlhdGVkIHdpdGggdGhpcyBzdGF0aW9uLCBpZiBhbnlcbiYjNDM7ICogQGNpZ3RrOiBjb250cm9sIGludGVncml0eSBncm91cCBrZXlzIG5lZ290aWF0ZWQgd2l0aCB0aGlzIHN0YXRpb24sIGlmIGFueVxuICAqIEB0eF9zdGF0czogVFggc3RhdGlzdGljc1xuICAqIEB0eF9zdGF0cy5wYWNrZXRzOiAjIG9mIHBhY2tldHMgdHJhbnNtaXR0ZWRcbiAgKiBAdHhfc3RhdHMuYnl0ZXM6ICMgb2YgYnl0ZXMgaW4gYWxsIHBhY2tldHMgdHJhbnNtaXR0ZWRcbkBAIC01MzUsNiAmIzQzOzUzNiw3IEBAIHN0cnVjdCBsaW5rX3N0YV9pbmZvIHtcbiBcdHN0cnVjdCBpZWVlODAyMTFfa2V5IF9fcmN1ICpndGtbTlVNX0RFRkFVTFRfS0VZUyAmIzQzO1xuIFx0XHRcdFx0XHROVU1fREVGQVVMVF9NR01UX0tFWVMgJiM0MztcbiBcdFx0XHRcdFx0TlVNX0RFRkFVTFRfQkVBQ09OX0tFWVNdO1xuJiM0MztcdHN0cnVjdCBpZWVlODAyMTFfa2V5IF9fcmN1ICpjaWd0a1tOVU1fQ1RSTF9LRVlTXTtcbiBcdHN0cnVjdCBpZWVlODAyMTFfc3RhX3J4X3N0YXRzIF9fcGVyY3B1ICpwY3B1X3J4X3N0YXRzO1xuIFxuIFx0LyogVXBkYXRlZCBmcm9tIFJYIHBhdGggb25seSwgbm8gbG9ja2luZyByZXF1aXJlbWVudHMgKi9cbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvdXRpbC5jIGIvbmV0L21hYzgwMjExL3V0aWwuY1xuaW5kZXggYTk2MDc4YTZiZmEyOS4uODMwM2Y2MjRiN2Y2MiAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS91dGlsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS91dGlsLmNcbkBAIC00NjgwLDYgJiM0Mzs0NjgwLDI1IEBAIGludCBpZWVlODAyMTFfcHV0X3Vocl9jYXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7aW50IGllZWU4MDIxMV9wdXRfY2lwX2NhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuJiM0MztcdFx0XHQgIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHdpcGh5X2lmdHlwZV9leHRfY2FwYWIgKmlmdF9leHRfY2FwYSA9XG4mIzQzO1x0XHRjZmc4MDIxMV9nZXRfaWZ0eXBlX2V4dF9jYXBhKHNkYXRhLVx1MDAzZWxvY2FsLVx1MDAzZWh3LndpcGh5LFxuJiM0MztcdFx0XHRcdFx0ICAgICBpZWVlODAyMTFfdmlmX3R5cGVfcDJwKFx1MDAyNnNkYXRhLVx1MDAzZXZpZikpO1xuJiM0MztcdHU4IGNpcF9jYXBhYmlsaXRpZXMgPSBpZnRfZXh0X2NhcGEgPyBpZnRfZXh0X2NhcGEtXHUwMDNlY2lwX2NhcGFiaWxpdGllcyA6IDA7XG4mIzQzO1xuJiM0MztcdGlmIChza2JfdGFpbHJvb20oc2tiKSBcdTAwM2MgNClcbiYjNDM7XHRcdHJldHVybiAtRU5PQlVGUztcbiYjNDM7XG4mIzQzO1x0c2tiX3B1dF91OChza2IsIFdMQU5fRUlEX0VYVEVOU0lPTik7XG4mIzQzO1x0c2tiX3B1dF91OChza2IsIDIpO1xuJiM0MztcdHNrYl9wdXRfdTgoc2tiLCBXTEFOX0VJRF9FWFRfQ0lQX0NBUEEpO1xuJiM0MztcdHNrYl9wdXRfdTgoc2tiLCBjaXBfY2FwYWJpbGl0aWVzKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gY29uc3QgY2hhciAqaWVlZTgwMjExX2Nvbm5fbW9kZV9zdHIoZW51bSBpZWVlODAyMTFfY29ubl9tb2RlIG1vZGUpXG4ge1xuIFx0c3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBtb2Rlc1tdID0ge1xuZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9jb3JlLmggYi9uZXQvd2lyZWxlc3MvY29yZS5oXG5pbmRleCAxNWQ5ZjdlYjU4YjRkLi4zYjkwYWE4Y2M2YWNmIDEwMDY0NFxuLS0tIGEvbmV0L3dpcmVsZXNzL2NvcmUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3dpcmVsZXNzL2NvcmUuaFxuQEAgLTQ0MywxMyAmIzQzOzQ0MywxNiBAQCB2b2lkIGNmZzgwMjExX3NtZV9hYmFuZG9uX2Fzc29jKHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYpO1xuIFxuIC8qIGludGVybmFsIGhlbHBlcnMgKi9cbiBib29sIGNmZzgwMjExX3N1cHBvcnRlZF9jaXBoZXJfc3VpdGUoc3RydWN0IHdpcGh5ICp3aXBoeSwgdTMyIGNpcGhlcik7XG4mIzQzO2Jvb2wgY2ZnODAyMTFfY2lndGtfc3VwcG9ydGVkKHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4mIzQzO1x0XHRcdCAgICAgIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xuIGJvb2wgY2ZnODAyMTFfdmFsaWRfa2V5X2lkeChzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuLVx0XHRcdCAgICBpbnQga2V5X2lkeCwgYm9vbCBwYWlyd2lzZSxcbiYjNDM7XHRcdFx0ICAgIGludCBrZXlfaWR4LCBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSxcbiBcdFx0XHQgICAgY29uc3QgdTggKm1hY19hZGRyKTtcbiBpbnQgY2ZnODAyMTFfdmFsaWRhdGVfa2V5X3NldHRpbmdzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbiBcdFx0XHRcdCAgIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4gXHRcdFx0XHQgICBzdHJ1Y3Qga2V5X3BhcmFtcyAqcGFyYW1zLCBpbnQga2V5X2lkeCxcbi1cdFx0XHRcdCAgIGJvb2wgcGFpcndpc2UsIGNvbnN0IHU4ICptYWNfYWRkcik7XG4mIzQzO1x0XHRcdFx0ICAgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsXG4mIzQzO1x0XHRcdFx0ICAgY29uc3QgdTggKm1hY19hZGRyKTtcbiB2b2lkIF9fY2ZnODAyMTFfc2Nhbl9kb25lKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXBoeV93b3JrICp3ayk7XG4gdm9pZCBfX19jZmc4MDIxMV9zY2FuX2RvbmUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuIFx0XHRcdCAgIGJvb2wgc2VuZF9tZXNzYWdlKTtcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvaWJzcy5jIGIvbmV0L3dpcmVsZXNzL2lic3MuY1xuaW5kZXggYjFkNzQ4YmRiNTA0ZS4uNmFlNTYxZWQ3ZjM3ZiAxMDA2NDRcbi0tLSBhL25ldC93aXJlbGVzcy9pYnNzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC93aXJlbGVzcy9pYnNzLmNcbkBAIC0xNzIsNyAmIzQzOzE3Miw4IEBAIHZvaWQgY2ZnODAyMTFfY2xlYXJfaWJzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIG5vd2V4dClcbiBcdCAqL1xuIFx0aWYgKHJkZXYtXHUwMDNlb3BzLVx1MDAzZWRlbF9rZXkpXG4gXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDY7IGkmIzQzOyYjNDM7KVxuLVx0XHRcdHJkZXZfZGVsX2tleShyZGV2LCB3ZGV2LCAtMSwgaSwgZmFsc2UsIE5VTEwpO1xuJiM0MztcdFx0XHRyZGV2X2RlbF9rZXkocmRldiwgd2RldiwgLTEsIGksIE5MODAyMTFfS0VZVFlQRV9HUk9VUCxcbiYjNDM7XHRcdFx0XHQgICAgIE5VTEwpO1xuIFxuIFx0aWYgKHdkZXYtXHUwMDNldS5pYnNzLmN1cnJlbnRfYnNzKSB7XG4gXHRcdGNmZzgwMjExX3VuaG9sZF9ic3Mod2Rldi1cdTAwM2V1Lmlic3MuY3VycmVudF9ic3MpO1xuZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9ubDgwMjExLmMgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXG5pbmRleCA4YWRiZWY1ZjA0NDI1Li41NjY0OGY3ZDljN2ZlIDEwMDY0NFxuLS0tIGEvbmV0L3dpcmVsZXNzL25sODAyMTEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3dpcmVsZXNzL25sODAyMTEuY1xuQEAgLTEwOTYsNiAmIzQzOzEwOTYsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmw4MDIxMV9wb2xpY3lbTlVNX05MODAyMTFfQVRUUl0gPSB7XG4gXHRbTkw4MDIxMV9BVFRSX05QQ0FfUFVOQ1RfQklUTUFQXSA9XG4gXHRcdE5MQV9QT0xJQ1lfRlVMTF9SQU5HRShOTEFfVTMyLCBcdTAwMjZubDgwMjExX3B1bmN0X2JpdG1hcF9yYW5nZSksXG4gXHRbTkw4MDIxMV9BVFRSX1NUQV9EVU1QX0xJTktfU1RBVFNdID0geyAudHlwZSA9IE5MQV9GTEFHIH0sXG4mIzQzO1x0W05MODAyMTFfQVRUUl9BU1NPQ19DSVBdID0geyAudHlwZSA9IE5MQV9GTEFHIH0sXG4mIzQzO1x0W05MODAyMTFfQVRUUl9DSVBfQ0FQQUJJTElUSUVTXSA9IHsgLnR5cGUgPSBOTEFfVTggfSxcbiB9O1xuIFxuIC8qIHBvbGljeSBmb3IgdGhlIGtleSBhdHRyaWJ1dGVzICovXG5AQCAtMTc2MSw2ICYjNDM7MTc2MywxMSBAQCBzdGF0aWMgaW50IG5sODAyMTFfcGFyc2Vfa2V5KHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIHN0cnVjdCBrZXlfcGFyc2UgKmspXG4gXHRcdFx0XHRHRU5MX1NFVF9FUlJfTVNHKGluZm8sIFwmIzM0O2RlZiBrZXkgaWR4IG5vdCAwLTNcJiMzNDspO1xuIFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdFx0fVxuJiM0MztcdFx0fSBlbHNlIGlmIChrLVx1MDAzZXR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX0NJR1RLKSB7XG4mIzQzO1x0XHRcdGlmIChrLVx1MDAzZWlkeCBcdTAwM2MgMCB8fCBrLVx1MDAzZWlkeCBcdTAwM2UgMSkge1xuJiM0MztcdFx0XHRcdEdFTkxfU0VUX0VSUl9NU0coaW5mbywgXCYjMzQ7Q0lHVEsgaWR4IG5vdCAwLTFcJiMzNDspO1xuJiM0MztcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0XHR9XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0aWYgKGstXHUwMDNlaWR4IFx1MDAzYyAwIHx8IGstXHUwMDNlaWR4IFx1MDAzZSA3KSB7XG4gXHRcdFx0XHRHRU5MX1NFVF9FUlJfTVNHKGluZm8sIFwmIzM0O2tleSBpZHggbm90IDAtN1wmIzM0Oyk7XG5AQCAtMTgyNSw3ICYjNDM7MTgzMiw5IEBAIG5sODAyMTFfcGFyc2VfY29ubmtleXMoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuIFx0XHR9IGVsc2UgaWYgKHBhcnNlLmRlZm1nbXQpXG4gXHRcdFx0Z290byBlcnJvcjtcbiBcdFx0ZXJyID0gY2ZnODAyMTFfdmFsaWRhdGVfa2V5X3NldHRpbmdzKHJkZXYsIHdkZXYsIFx1MDAyNnBhcnNlLnAsXG4tXHRcdFx0XHRcdFx0ICAgICBwYXJzZS5pZHgsIGZhbHNlLCBOVUxMKTtcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICBwYXJzZS5pZHgsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgTkw4MDIxMV9LRVlUWVBFX0dST1VQLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgIE5VTEwpO1xuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdGdvdG8gZXJyb3I7XG4gXHRcdGlmIChwYXJzZS5wLmNpcGhlciAhPSBXTEFOX0NJUEhFUl9TVUlURV9XRVA0MCBcdTAwMjZcdTAwMjZcbkBAIC0zNjE1LDYgJiM0MzszNjI0LDExIEBAIHN0YXRpYyBpbnQgbmw4MDIxMV9zZW5kX3dpcGh5KHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbiBcdFx0XHRcdFx0XHROTDgwMjExX0FUVFJfRVhUX01MRF9DQVBBX0FORF9PUFMsXG4gXHRcdFx0XHRcdFx0Y2FwYWItXHUwMDNlZXh0X21sZF9jYXBhX2FuZF9vcHMpKVxuIFx0XHRcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiYjNDM7XHRcdFx0XHRpZiAoY2FwYWItXHUwMDNlY2lwX3N1cHBvcnRlZCBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0XHQgICAgbmxhX3B1dF91OChtc2csXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgTkw4MDIxMV9BVFRSX0NJUF9DQVBBQklMSVRJRVMsXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgY2FwYWItXHUwMDNlY2lwX2NhcGFiaWxpdGllcykpXG4mIzQzO1x0XHRcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiBcbiBcdFx0XHRcdG5sYV9uZXN0X2VuZChtc2csIG5lc3RlZF9leHRfY2FwYWIpO1xuIFx0XHRcdFx0aWYgKHN0YXRlLVx1MDAzZXNwbGl0KVxuQEAgLTUzNzEsNiAmIzQzOzUzODUsNyBAQCBzdGF0aWMgaW50IG5sODAyMTFfZ2V0X2tleShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0c3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGluZm8tXHUwMDNldXNlcl9wdHJbMV07XG4gXHR1OCBrZXlfaWR4ID0gMDtcbiBcdGNvbnN0IHU4ICptYWNfYWRkciA9IE5VTEw7XG4mIzQzO1x0ZW51bSBubDgwMjExX2tleV90eXBlIHR5cGU7XG4gXHRib29sIHBhaXJ3aXNlO1xuIFx0c3RydWN0IGdldF9rZXlfY29va2llIGNvb2tpZSA9IHtcbiBcdFx0LmVycm9yID0gMCxcbkBAIC01NDAzLDE5ICYjNDM7NTQxOCwyNCBAQCBzdGF0aWMgaW50IG5sODAyMTFfZ2V0X2tleShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0XHRtYWNfYWRkciA9IG5sYV9kYXRhKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX01BQ10pO1xuIFxuIFx0cGFpcndpc2UgPSAhIW1hY19hZGRyO1xuJiM0MztcdHR5cGUgPSBwYWlyd2lzZSA/IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRSA6IE5MODAyMTFfS0VZVFlQRV9HUk9VUDtcbiBcdGlmIChpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9LRVlfVFlQRV0pIHtcbi1cdFx0dTMyIGt0ID0gbmxhX2dldF91MzIoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfS0VZX1RZUEVdKTtcbiYjNDM7XHRcdHR5cGUgPSBubGFfZ2V0X3UzMihpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9LRVlfVFlQRV0pO1xuIFxuLVx0XHRpZiAoa3QgIT0gTkw4MDIxMV9LRVlUWVBFX0dST1VQIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAga3QgIT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFKVxuJiM0MztcdFx0aWYgKHR5cGUgIT0gTkw4MDIxMV9LRVlUWVBFX0dST1VQIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIHR5cGUgIT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIHR5cGUgIT0gTkw4MDIxMV9LRVlUWVBFX0NJR1RLKSB7XG4mIzQzO1x0XHRcdEdFTkxfU0VUX0VSUl9NU0coaW5mbywgXCYjMzQ7a2V5IHR5cGUgbm90IHBhaXJ3aXNlLCBncm91cCBvciBDSUdUS1wmIzM0Oyk7XG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHRcdHBhaXJ3aXNlID0ga3QgPT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdHBhaXJ3aXNlID0gdHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0U7XG4gXHR9XG4gXG4gXHRpZiAoIXJkZXYtXHUwMDNlb3BzLVx1MDAzZWdldF9rZXkpXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcbi1cdGlmICghY2ZnODAyMTFfdmFsaWRfa2V5X2lkeCh3ZGV2LCBrZXlfaWR4LCBwYWlyd2lzZSwgbWFjX2FkZHIpKVxuJiM0MztcdGlmICghY2ZnODAyMTFfdmFsaWRfa2V5X2lkeCh3ZGV2LCBrZXlfaWR4LCB0eXBlLCBtYWNfYWRkcikpXG4gXHRcdHJldHVybiAtRU5PRU5UO1xuIFxuIFx0bXNnID0gbmxtc2dfbmV3KE5MTVNHX0RFRkFVTFRfU0laRSwgR0ZQX0tFUk5FTCk7XG5AQCAtNTQ0NCw3ICYjNDM7NTQ2NCw3IEBAIHN0YXRpYyBpbnQgbmw4MDIxMV9nZXRfa2V5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGZyZWVfbXNnO1xuIFxuLVx0ZXJyID0gcmRldl9nZXRfa2V5KHJkZXYsIHdkZXYsIGxpbmtfaWQsIGtleV9pZHgsIHBhaXJ3aXNlLCBtYWNfYWRkcixcbiYjNDM7XHRlcnIgPSByZGV2X2dldF9rZXkocmRldiwgd2RldiwgbGlua19pZCwga2V5X2lkeCwgdHlwZSwgbWFjX2FkZHIsXG4gXHRcdFx0ICAgXHUwMDI2Y29va2llLCBnZXRfa2V5X2NhbGxiYWNrKTtcbiBcbiBcdGlmIChlcnIpXG5AQCAtNTYwMyw4ICYjNDM7NTYyMyw5IEBAIHN0YXRpYyBpbnQgbmw4MDIxMV9uZXdfa2V5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXG4gXHQvKiBmb3Igbm93ICovXG4gXHRpZiAoa2V5LnR5cGUgIT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFIFx1MDAyNlx1MDAyNlxuLVx0ICAgIGtleS50eXBlICE9IE5MODAyMTFfS0VZVFlQRV9HUk9VUCkge1xuLVx0XHRHRU5MX1NFVF9FUlJfTVNHKGluZm8sIFwmIzM0O2tleSB0eXBlIG5vdCBwYWlyd2lzZSBvciBncm91cFwmIzM0Oyk7XG4mIzQzO1x0ICAgIGtleS50eXBlICE9IE5MODAyMTFfS0VZVFlQRV9HUk9VUCBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAga2V5LnR5cGUgIT0gTkw4MDIxMV9LRVlUWVBFX0NJR1RLKSB7XG4mIzQzO1x0XHRHRU5MX1NFVF9FUlJfTVNHKGluZm8sIFwmIzM0O2tleSB0eXBlIG5vdCBwYWlyd2lzZSwgZ3JvdXAgb3IgQ0lHVEtcJiMzNDspO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbkBAIC01NjE2LDggJiM0Mzs1NjM3LDcgQEAgc3RhdGljIGludCBubDgwMjExX25ld19rZXkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFxuIFx0aWYgKGNmZzgwMjExX3ZhbGlkYXRlX2tleV9zZXR0aW5ncyhyZGV2LCB3ZGV2LCBcdTAwMjZrZXkucCwga2V5LmlkeCxcbi1cdFx0XHRcdFx0ICAga2V5LnR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFLFxuLVx0XHRcdFx0XHQgICBtYWNfYWRkcikpIHtcbiYjNDM7XHRcdFx0XHRcdCAgIGtleS50eXBlLCBtYWNfYWRkcikpIHtcbiBcdFx0R0VOTF9TRVRfRVJSX01TRyhpbmZvLCBcJiMzNDtrZXkgc2V0dGluZyB2YWxpZGF0aW9uIGZhaWxlZFwmIzM0Oyk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuQEAgLTU2MzEsOCAmIzQzOzU2NTEsNyBAQCBzdGF0aWMgaW50IG5sODAyMTFfbmV3X2tleShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0XHRcdFx0a2V5LnR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFKTtcbiBcbiBcdGlmICghZXJyKSB7XG4tXHRcdGVyciA9IHJkZXZfYWRkX2tleShyZGV2LCB3ZGV2LCBsaW5rX2lkLCBrZXkuaWR4LFxuLVx0XHRcdFx0ICAga2V5LnR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFLFxuJiM0MztcdFx0ZXJyID0gcmRldl9hZGRfa2V5KHJkZXYsIHdkZXYsIGxpbmtfaWQsIGtleS5pZHgsIGtleS50eXBlLFxuIFx0XHRcdFx0ICAgIG1hY19hZGRyLCBcdTAwMjZrZXkucCk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0R0VOTF9TRVRfRVJSX01TRyhpbmZvLCBcJiMzNDtrZXkgYWRkaXRpb24gZmFpbGVkXCYjMzQ7KTtcbkBAIC01NjY2LDEyICYjNDM7NTY4NSwxMyBAQCBzdGF0aWMgaW50IG5sODAyMTFfZGVsX2tleShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFxuIFx0LyogZm9yIG5vdyAqL1xuIFx0aWYgKGtleS50eXBlICE9IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRSBcdTAwMjZcdTAwMjZcbi1cdCAgICBrZXkudHlwZSAhPSBOTDgwMjExX0tFWVRZUEVfR1JPVVApXG4mIzQzO1x0ICAgIGtleS50eXBlICE9IE5MODAyMTFfS0VZVFlQRV9HUk9VUCBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAga2V5LnR5cGUgIT0gTkw4MDIxMV9LRVlUWVBFX0NJR1RLKSB7XG4mIzQzO1x0XHRHRU5MX1NFVF9FUlJfTVNHKGluZm8sIFwmIzM0O2tleSB0eXBlIG5vdCBwYWlyd2lzZSwgZ3JvdXAgb3IgQ0lHVEtcJiMzNDspO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4gXG4tXHRpZiAoIWNmZzgwMjExX3ZhbGlkX2tleV9pZHgod2Rldiwga2V5LmlkeCxcbi1cdFx0XHRcdCAgICBrZXkudHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0UsXG4tXHRcdFx0XHQgICAgbWFjX2FkZHIpKVxuJiM0MztcdGlmICghY2ZnODAyMTFfdmFsaWRfa2V5X2lkeCh3ZGV2LCBrZXkuaWR4LCBrZXkudHlwZSwgbWFjX2FkZHIpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdGlmICghcmRldi1cdTAwM2VvcHMtXHUwMDNlZGVsX2tleSlcbkBAIC01Njg1LDggJiM0Mzs1NzA1LDcgQEAgc3RhdGljIGludCBubDgwMjExX2RlbF9rZXkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcbiBcdGlmICghZXJyKVxuIFx0XHRlcnIgPSByZGV2X2RlbF9rZXkocmRldiwgd2RldiwgbGlua19pZCwga2V5LmlkeCxcbi1cdFx0XHRcdCAgIGtleS50eXBlID09IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRSxcbi1cdFx0XHRcdCAgIG1hY19hZGRyKTtcbiYjNDM7XHRcdFx0XHQgICBrZXkudHlwZSwgbWFjX2FkZHIpO1xuIFxuICNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVFxuIFx0aWYgKCFlcnIpIHtcbkBAIC04ODA1LDcgJiM0Mzs4ODI0LDcgQEAgaW50IGNmZzgwMjExX2NoZWNrX3N0YXRpb25fY2hhbmdlKHN0cnVjdCB3aXBoeSAqd2lwaHksXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0LyogV2hlbiB5b3UgcnVuIGludG8gdGhpcywgYWRqdXN0IHRoZSBjb2RlIGJlbG93IGZvciB0aGUgbmV3IGZsYWcgKi9cbi1cdEJVSUxEX0JVR19PTihOTDgwMjExX1NUQV9GTEFHX01BWCAhPSA4KTtcbiYjNDM7XHRCVUlMRF9CVUdfT04oTkw4MDIxMV9TVEFfRkxBR19NQVggIT0gOSk7XG4gXG4gXHRzd2l0Y2ggKHN0YXR5cGUpIHtcbiBcdGNhc2UgQ0ZHODAyMTFfU1RBX01FU0hfUEVFUl9LRVJORUw6XG5AQCAtODg5OSw3ICYjNDM7ODkxOCw4IEBAIGludCBjZmc4MDIxMV9jaGVja19zdGF0aW9uX2NoYW5nZShzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxuIFx0XHRcdFx0ICBCSVQoTkw4MDIxMV9TVEFfRkxBR19TSE9SVF9QUkVBTUJMRSkgfFxuIFx0XHRcdFx0ICBCSVQoTkw4MDIxMV9TVEFfRkxBR19XTUUpIHxcbiBcdFx0XHRcdCAgQklUKE5MODAyMTFfU1RBX0ZMQUdfTUZQKSB8XG4tXHRcdFx0XHQgIEJJVChOTDgwMjExX1NUQV9GTEFHX1NQUF9BTVNEVSkpKVxuJiM0MztcdFx0XHRcdCAgQklUKE5MODAyMTFfU1RBX0ZMQUdfU1BQX0FNU0RVKSB8XG4mIzQzO1x0XHRcdFx0ICBCSVQoTkw4MDIxMV9TVEFfRkxBR19DSVApKSlcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdFx0LyogYnV0IGF1dGhlbnRpY2F0ZWQvYXNzb2NpYXRlZCBvbmx5IGlmIGRyaXZlciBoYW5kbGVzIGl0ICovXG5AQCAtOTI3Niw2ICYjNDM7OTI5NiwyMiBAQCBzdGF0aWMgaW50IG5sODAyMTFfc2V0X3N0YXRpb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdFx0XHRubGFfZ2V0X3UxNihpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9FTUxfQ0FQQUJJTElUWV0pO1xuIFx0fVxuIFxuJiM0MztcdGlmIChwYXJhbXMuc3RhX2ZsYWdzX21hc2sgXHUwMDI2IEJJVChOTDgwMjExX1NUQV9GTEFHX0NJUCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHBhcmFtcy5zdGFfZmxhZ3Nfc2V0IFx1MDAyNiBCSVQoTkw4MDIxMV9TVEFfRkxBR19DSVApKSB7XG4mIzQzO1x0XHRpZiAoIWNmZzgwMjExX2NpZ3RrX3N1cHBvcnRlZCh3ZGV2LCBpbmZvKSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdFx0LyogQ0lQIGNhcGFiaWxpdGllcyBhcmUgcmVxdWlyZWQgaWYgQ0lQIGlzIGJlaW5nIGVuYWJsZWQgKi9cbiYjNDM7XHRcdGlmIChpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9DSVBfQ0FQQUJJTElUSUVTXSkge1xuJiM0MztcdFx0XHRwYXJhbXMubGlua19zdGFfcGFyYW1zLmNpcF9jYXBfc2V0ID0gdHJ1ZTtcbiYjNDM7XHRcdFx0cGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5jaXBfY2FwID1cbiYjNDM7XHRcdFx0XHRubGFfZ2V0X3U4KGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0NJUF9DQVBBQklMSVRJRVNdKTtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdEdFTkxfU0VUX0VSUl9NU0coaW5mbywgXCYjMzQ7Tm8gQ0lQIGNhcGFiaWxpdGllcyBwcm92aWRlZFwmIzM0Oyk7XG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4gXHRpZiAoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfQUlSVElNRV9XRUlHSFRdKVxuIFx0XHRwYXJhbXMuYWlydGltZV93ZWlnaHQgPVxuIFx0XHRcdG5sYV9nZXRfdTE2KGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0FJUlRJTUVfV0VJR0hUXSk7XG5AQCAtOTQ3NSw2ICYjNDM7OTUxMSwyMiBAQCBzdGF0aWMgaW50IG5sODAyMTFfbmV3X3N0YXRpb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdFx0XHRubGFfZ2V0X3UxNihpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9FTUxfQ0FQQUJJTElUWV0pO1xuIFx0fVxuIFxuJiM0MztcdGlmIChwYXJhbXMuc3RhX2ZsYWdzX21hc2sgXHUwMDI2IEJJVChOTDgwMjExX1NUQV9GTEFHX0NJUCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHBhcmFtcy5zdGFfZmxhZ3Nfc2V0IFx1MDAyNiBCSVQoTkw4MDIxMV9TVEFfRkxBR19DSVApKSB7XG4mIzQzO1x0XHRpZiAoIWNmZzgwMjExX2NpZ3RrX3N1cHBvcnRlZCh3ZGV2LCBpbmZvKSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdFx0LyogQ0lQIGNhcGFiaWxpdGllcyBhcmUgcmVxdWlyZWQgaWYgQ0lQIGlzIGVuYWJsZWQgKi9cbiYjNDM7XHRcdGlmIChpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9DSVBfQ0FQQUJJTElUSUVTXSkge1xuJiM0MztcdFx0XHRwYXJhbXMubGlua19zdGFfcGFyYW1zLmNpcF9jYXBfc2V0ID0gdHJ1ZTtcbiYjNDM7XHRcdFx0cGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5jaXBfY2FwID1cbiYjNDM7XHRcdFx0XHRubGFfZ2V0X3U4KGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0NJUF9DQVBBQklMSVRJRVNdKTtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdEdFTkxfU0VUX0VSUl9NU0coaW5mbywgXCYjMzQ7Tm8gQ0lQIGNhcGFiaWxpdGllcyBwcm92aWRlZFwmIzM0Oyk7XG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4gXHRpZiAoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfSEVfNkdIWl9DQVBBQklMSVRZXSlcbiBcdFx0cGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5oZV82Z2h6X2NhcGEgPVxuIFx0XHRcdG5sYV9kYXRhKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0hFXzZHSFpfQ0FQQUJJTElUWV0pO1xuQEAgLTk1NTIsNyAmIzQzOzk2MDQsNyBAQCBzdGF0aWMgaW50IG5sODAyMTFfbmV3X3N0YXRpb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHQvKiBXaGVuIHlvdSBydW4gaW50byB0aGlzLCBhZGp1c3QgdGhlIGNvZGUgYmVsb3cgZm9yIHRoZSBuZXcgZmxhZyAqL1xuLVx0QlVJTERfQlVHX09OKE5MODAyMTFfU1RBX0ZMQUdfTUFYICE9IDgpO1xuJiM0MztcdEJVSUxEX0JVR19PTihOTDgwMjExX1NUQV9GTEFHX01BWCAhPSA5KTtcbiBcbiBcdHN3aXRjaCAod2Rldi1cdTAwM2VpZnR5cGUpIHtcbiBcdGNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6XG5AQCAtOTU4MSw2ICYjNDM7OTYzMywxMCBAQCBzdGF0aWMgaW50IG5sODAyMTFfbmV3X3N0YXRpb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdFx0ICAgIHBhcmFtcy5zdGFfZmxhZ3NfbWFzayBcdTAwMjYgQklUKE5MODAyMTFfU1RBX0ZMQUdfU1BQX0FNU0RVKSlcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiYjNDM7XHRcdGlmIChwYXJhbXMuc3RhX2ZsYWdzX21hc2sgXHUwMDI2IEJJVChOTDgwMjExX1NUQV9GTEFHX0NJUCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgIWNmZzgwMjExX2NpZ3RrX3N1cHBvcnRlZCh3ZGV2LCBpbmZvKSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuIFx0XHQvKiBPbGRlciB1c2Vyc3BhY2UsIG9yIHVzZXJzcGFjZSB3YW50aW5nIHRvIGJlIGNvbXBhdGlibGUgd2l0aFxuIFx0XHQgKiAhTkw4MDIxMV9GRUFUVVJFX0ZVTExfQVBfQ0xJRU5UX1NUQVRFLCB3aWxsIG5vdCBzZXQgdGhlIGF1dGhcbiBcdFx0ICogYW5kIGFzc29jIGZsYWdzIGluIHRoZSBtYXNrLCBidXQgYXNzdW1lcyB0aGUgc3RhdGlvbiB3aWxsIGJlXG5AQCAtMTMzMDcsNiAmIzQzOzEzMzYzLDEzIEBAIHN0YXRpYyBpbnQgbmw4MDIxMV9hc3NvY2lhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdFx0cmVxLmZsYWdzIHw9IEFTU09DX1JFUV9TUFBfQU1TRFU7XG4gXHR9XG4gXG4mIzQzO1x0aWYgKG5sYV9nZXRfZmxhZyhpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9BU1NPQ19DSVBdKSkge1xuJiM0MztcdFx0aWYgKCFjZmc4MDIxMV9jaWd0a19zdXBwb3J0ZWQoZGV2LVx1MDAzZWllZWU4MDIxMV9wdHIsIGluZm8pKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0XHRyZXEuZmxhZ3MgfD0gQVNTT0NfUkVRX0NJUDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0cmVxLmxpbmtfaWQgPSBubDgwMjExX2xpbmtfaWRfb3JfaW52YWxpZChpbmZvLVx1MDAzZWF0dHJzKTtcbiBcbiBcdGlmIChpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9NTE9fTElOS1NdKSB7XG5AQCAtMTkxNzQsNiAmIzQzOzE5MjM3LDIzIEBAIG5sODAyMTFfYWRkX21vZF9saW5rX3N0YXRpb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyxcbiBcdFx0cGFyYW1zLmhlXzZnaHpfY2FwYSA9XG4gXHRcdFx0bmxhX2RhdGEoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfSEVfNkdIWl9DQVBBQklMSVRZXSk7XG4gXG4mIzQzO1x0aWYgKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0NJUF9DQVBBQklMSVRJRVNdKSB7XG4mIzQzO1x0XHRzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LVx1MDAzZWllZWU4MDIxMV9wdHI7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFjZmc4MDIxMV9jaWd0a19zdXBwb3J0ZWQod2RldiwgaW5mbykpXG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRcdHBhcmFtcy5jaXBfY2FwX3NldCA9IHRydWU7XG4mIzQzO1x0XHRwYXJhbXMuY2lwX2NhcCA9XG4mIzQzO1x0XHRcdG5sYV9nZXRfdTgoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfQ0lQX0NBUEFCSUxJVElFU10pO1xuJiM0MztcbiYjNDM7XHRcdC8qIE9ubHkgcGVybWl0IENJUCBjYXBhYmlsaXRpZXMgd2hlbiBhZGRpbmcgbGluayBzdGF0aW9ucyAqL1xuJiM0MztcdFx0aWYgKCFhZGQpIHtcbiYjNDM7XHRcdFx0R0VOTF9TRVRfRVJSX01TRyhpbmZvLCBcJiMzNDtDYW5ub3QgbW9kaWZ5IENJUCBjYXBhYmlsaXRpZXNcJiMzNDspO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuIFx0aWYgKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX09QTU9ERV9OT1RJRl0pIHtcbiBcdFx0cGFyYW1zLm9wbW9kZV9ub3RpZl91c2VkID0gdHJ1ZTtcbiBcdFx0cGFyYW1zLm9wbW9kZV9ub3RpZiA9XG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3JkZXYtb3BzLmggYi9uZXQvd2lyZWxlc3MvcmRldi1vcHMuaFxuaW5kZXggNmMzYmFkOGIyZDZmNi4uZDQ5MzNiYmJmMGU3ZSAxMDA2NDRcbi0tLSBhL25ldC93aXJlbGVzcy9yZGV2LW9wcy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvd2lyZWxlc3MvcmRldi1vcHMuaFxuQEAgLTc4LDQyICYjNDM7NzgsNDMgQEAgcmRldl9jaGFuZ2VfdmlydHVhbF9pbnRmKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbiBcbiBzdGF0aWMgaW5saW5lIGludCByZGV2X2FkZF9rZXkoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuIFx0XHRcdCAgICAgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LCBpbnQgbGlua19pZCxcbi1cdFx0XHQgICAgICAgdTgga2V5X2luZGV4LCBib29sIHBhaXJ3aXNlLCBjb25zdCB1OCAqbWFjX2FkZHIsXG4tXHRcdFx0ICAgICAgIHN0cnVjdCBrZXlfcGFyYW1zICpwYXJhbXMpXG4mIzQzO1x0XHRcdCAgICAgICB1OCBrZXlfaW5kZXgsIGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLFxuJiM0MztcdFx0XHQgICAgICAgY29uc3QgdTggKm1hY19hZGRyLCBzdHJ1Y3Qga2V5X3BhcmFtcyAqcGFyYW1zKVxuIHtcbiBcdGludCByZXQ7XG4tXHR0cmFjZV9yZGV2X2FkZF9rZXkoXHUwMDI2cmRldi1cdTAwM2V3aXBoeSwgd2RldiwgbGlua19pZCwga2V5X2luZGV4LCBwYWlyd2lzZSxcbiYjNDM7XHR0cmFjZV9yZGV2X2FkZF9rZXkoXHUwMDI2cmRldi1cdTAwM2V3aXBoeSwgd2RldiwgbGlua19pZCwga2V5X2luZGV4LCB0eXBlLFxuIFx0XHRcdCAgIG1hY19hZGRyLCBwYXJhbXMtXHUwMDNlbW9kZSk7XG4gXHRyZXQgPSByZGV2LVx1MDAzZW9wcy1cdTAwM2VhZGRfa2V5KFx1MDAyNnJkZXYtXHUwMDNld2lwaHksIHdkZXYsIGxpbmtfaWQsIGtleV9pbmRleCxcbi1cdFx0XHRcdCAgcGFpcndpc2UsIG1hY19hZGRyLCBwYXJhbXMpO1xuJiM0MztcdFx0XHRcdCAgdHlwZSwgbWFjX2FkZHIsIHBhcmFtcyk7XG4gXHR0cmFjZV9yZGV2X3JldHVybl9pbnQoXHUwMDI2cmRldi1cdTAwM2V3aXBoeSwgcmV0KTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgaW50XG4gcmRldl9nZXRfa2V5KHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldixcbi1cdCAgICAgaW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCwgYm9vbCBwYWlyd2lzZSwgY29uc3QgdTggKm1hY19hZGRyLFxuLVx0ICAgICB2b2lkICpjb29raWUsXG4mIzQzO1x0ICAgICBpbnQgbGlua19pZCwgdTgga2V5X2luZGV4LCBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSxcbiYjNDM7XHQgICAgIGNvbnN0IHU4ICptYWNfYWRkciwgdm9pZCAqY29va2llLFxuIFx0ICAgICB2b2lkICgqY2FsbGJhY2spKHZvaWQgKmNvb2tpZSwgc3RydWN0IGtleV9wYXJhbXMqKSlcbiB7XG4gXHRpbnQgcmV0O1xuLVx0dHJhY2VfcmRldl9nZXRfa2V5KFx1MDAyNnJkZXYtXHUwMDNld2lwaHksIHdkZXYsIGxpbmtfaWQsIGtleV9pbmRleCwgcGFpcndpc2UsXG4mIzQzO1x0dHJhY2VfcmRldl9nZXRfa2V5KFx1MDAyNnJkZXYtXHUwMDNld2lwaHksIHdkZXYsIGxpbmtfaWQsIGtleV9pbmRleCwgdHlwZSxcbiBcdFx0XHQgICBtYWNfYWRkcik7XG4gXHRyZXQgPSByZGV2LVx1MDAzZW9wcy1cdTAwM2VnZXRfa2V5KFx1MDAyNnJkZXYtXHUwMDNld2lwaHksIHdkZXYsIGxpbmtfaWQsIGtleV9pbmRleCxcbi1cdFx0XHRcdCAgcGFpcndpc2UsIG1hY19hZGRyLCBjb29raWUsIGNhbGxiYWNrKTtcbiYjNDM7XHRcdFx0XHQgdHlwZSwgbWFjX2FkZHIsIGNvb2tpZSwgY2FsbGJhY2spO1xuIFx0dHJhY2VfcmRldl9yZXR1cm5faW50KFx1MDAyNnJkZXYtXHUwMDNld2lwaHksIHJldCk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGludCByZGV2X2RlbF9rZXkoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuIFx0XHRcdCAgICAgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LCBpbnQgbGlua19pZCxcbi1cdFx0XHQgICAgICAgdTgga2V5X2luZGV4LCBib29sIHBhaXJ3aXNlLCBjb25zdCB1OCAqbWFjX2FkZHIpXG4mIzQzO1x0XHRcdCAgICAgICB1OCBrZXlfaW5kZXgsIGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLFxuJiM0MztcdFx0XHQgICAgICAgY29uc3QgdTggKm1hY19hZGRyKVxuIHtcbiBcdGludCByZXQ7XG4tXHR0cmFjZV9yZGV2X2RlbF9rZXkoXHUwMDI2cmRldi1cdTAwM2V3aXBoeSwgd2RldiwgbGlua19pZCwga2V5X2luZGV4LCBwYWlyd2lzZSxcbiYjNDM7XHR0cmFjZV9yZGV2X2RlbF9rZXkoXHUwMDI2cmRldi1cdTAwM2V3aXBoeSwgd2RldiwgbGlua19pZCwga2V5X2luZGV4LCB0eXBlLFxuIFx0XHRcdCAgIG1hY19hZGRyKTtcbiBcdHJldCA9IHJkZXYtXHUwMDNlb3BzLVx1MDAzZWRlbF9rZXkoXHUwMDI2cmRldi1cdTAwM2V3aXBoeSwgd2RldiwgbGlua19pZCwga2V5X2luZGV4LFxuLVx0XHRcdFx0ICBwYWlyd2lzZSwgbWFjX2FkZHIpO1xuJiM0MztcdFx0XHRcdCAgdHlwZSwgbWFjX2FkZHIpO1xuIFx0dHJhY2VfcmRldl9yZXR1cm5faW50KFx1MDAyNnJkZXYtXHUwMDNld2lwaHksIHJldCk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvc21lLmMgYi9uZXQvd2lyZWxlc3Mvc21lLmNcbmluZGV4IDJhNzE5YjVjNDg3ZTMuLjQ1OGY3MmQ4MzUxYWIgMTAwNjQ0XG4tLS0gYS9uZXQvd2lyZWxlc3Mvc21lLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC93aXJlbGVzcy9zbWUuY1xuQEAgLTEzODcsNyAmIzQzOzEzODcsMTUgQEAgdm9pZCBfX2NmZzgwMjExX2Rpc2Nvbm5lY3RlZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqaWUsXG4gXHRcdFx0ICAgIE5MODAyMTFfRVhUX0ZFQVRVUkVfQkVBQ09OX1BST1RFQ1RJT05fQ0xJRU5UKSlcbiBcdFx0XHRtYXhfa2V5X2lkeCA9IDc7XG4gXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjPSBtYXhfa2V5X2lkeDsgaSYjNDM7JiM0MzspXG4tXHRcdFx0cmRldl9kZWxfa2V5KHJkZXYsIHdkZXYsIC0xLCBpLCBmYWxzZSwgTlVMTCk7XG4mIzQzO1x0XHRcdHJkZXZfZGVsX2tleShyZGV2LCB3ZGV2LCAtMSwgaSwgTkw4MDIxMV9LRVlUWVBFX0dST1VQLFxuJiM0MztcdFx0XHRcdCAgICAgTlVMTCk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGNmZzgwMjExX2NpZ3RrX3N1cHBvcnRlZCh3ZGV2LCBOVUxMKSkge1xuJiM0MztcdFx0XHRyZGV2X2RlbF9rZXkocmRldiwgd2RldiwgLTEsIDAsIE5MODAyMTFfS0VZVFlQRV9DSUdUSyxcbiYjNDM7XHRcdFx0XHQgICAgIE5VTEwpO1xuJiM0MztcdFx0XHRyZGV2X2RlbF9rZXkocmRldiwgd2RldiwgLTEsIDEsIE5MODAyMTFfS0VZVFlQRV9DSUdUSyxcbiYjNDM7XHRcdFx0XHQgICAgIE5VTEwpO1xuJiM0MztcdFx0fVxuIFx0fVxuIFxuIFx0cmRldl9zZXRfcW9zX21hcChyZGV2LCBkZXYsIE5VTEwpO1xuZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy90cmFjZS5oIGIvbmV0L3dpcmVsZXNzL3RyYWNlLmhcbmluZGV4IDhjMmE5MWI4NWMzOTYuLmMyMTBjYTFlNDRlMmIgMTAwNjQ0XG4tLS0gYS9uZXQvd2lyZWxlc3MvdHJhY2UuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3dpcmVsZXNzL3RyYWNlLmhcbkBAIC01NTcsMTUgJiM0Mzs1NTcsMTUgQEAgVFJBQ0VfRVZFTlQocmRldl9jaGFuZ2VfdmlydHVhbF9pbnRmLFxuIFxuIERFQ0xBUkVfRVZFTlRfQ0xBU1Moa2V5X2hhbmRsZSxcbiBcdFRQX1BST1RPKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsIGludCBsaW5rX2lkLFxuLVx0XHQgdTgga2V5X2luZGV4LCBib29sIHBhaXJ3aXNlLCBjb25zdCB1OCAqbWFjX2FkZHIpLFxuLVx0VFBfQVJHUyh3aXBoeSwgd2RldiwgbGlua19pZCwga2V5X2luZGV4LCBwYWlyd2lzZSwgbWFjX2FkZHIpLFxuJiM0MztcdFx0IHU4IGtleV9pbmRleCwgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsIGNvbnN0IHU4ICptYWNfYWRkciksXG4mIzQzO1x0VFBfQVJHUyh3aXBoeSwgd2RldiwgbGlua19pZCwga2V5X2luZGV4LCB0eXBlLCBtYWNfYWRkciksXG4gXHRUUF9TVFJVQ1RfX2VudHJ5KFxuIFx0XHRXSVBIWV9FTlRSWVxuIFx0XHRXREVWX0VOVFJZXG4gXHRcdE1BQ19FTlRSWShtYWNfYWRkcilcbiBcdFx0X19maWVsZChpbnQsIGxpbmtfaWQpXG4gXHRcdF9fZmllbGQodTgsIGtleV9pbmRleClcbi1cdFx0X19maWVsZChib29sLCBwYWlyd2lzZSlcbiYjNDM7XHRcdF9fZmllbGQodTgsIHR5cGUpXG4gXHQpLFxuIFx0VFBfZmFzdF9hc3NpZ24oXG4gXHRcdFdJUEhZX0FTU0lHTjtcbkBAIC01NzMsMzggJiM0Mzs1NzMsNDAgQEAgREVDTEFSRV9FVkVOVF9DTEFTUyhrZXlfaGFuZGxlLFxuIFx0XHRNQUNfQVNTSUdOKG1hY19hZGRyLCBtYWNfYWRkcik7XG4gXHRcdF9fZW50cnktXHUwMDNlbGlua19pZCA9IGxpbmtfaWQ7XG4gXHRcdF9fZW50cnktXHUwMDNla2V5X2luZGV4ID0ga2V5X2luZGV4O1xuLVx0XHRfX2VudHJ5LVx1MDAzZXBhaXJ3aXNlID0gcGFpcndpc2U7XG4mIzQzO1x0XHRfX2VudHJ5LVx1MDAzZXR5cGUgPSB0eXBlO1xuIFx0KSxcbiBcdFRQX3ByaW50ayhXSVBIWV9QUl9GTVQgXCYjMzQ7LCBcJiMzNDsgV0RFVl9QUl9GTVQgXCYjMzQ7LCBsaW5rX2lkOiAlZCwgXCYjMzQ7XG4tXHRcdCAgXCYjMzQ7a2V5X2luZGV4OiAldSwgcGFpcndpc2U6ICVzLCBtYWMgYWRkcjogJXBNXCYjMzQ7LFxuJiM0MztcdFx0ICBcJiMzNDtrZXlfaW5kZXg6ICV1LCBwYWlyd2lzZTogJXMsIHR5cGU6ICVkLCBtYWMgYWRkcjogJXBNXCYjMzQ7LFxuIFx0XHQgIFdJUEhZX1BSX0FSRywgV0RFVl9QUl9BUkcsIF9fZW50cnktXHUwMDNlbGlua19pZCxcbi1cdFx0ICBfX2VudHJ5LVx1MDAzZWtleV9pbmRleCwgQk9PTF9UT19TVFIoX19lbnRyeS1cdTAwM2VwYWlyd2lzZSksXG4tXHRcdCAgX19lbnRyeS1cdTAwM2VtYWNfYWRkcilcbiYjNDM7XHRcdCAgX19lbnRyeS1cdTAwM2VrZXlfaW5kZXgsXG4mIzQzO1x0XHQgIEJPT0xfVE9fU1RSKF9fZW50cnktXHUwMDNldHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0UpLFxuJiM0MztcdFx0ICBfX2VudHJ5LVx1MDAzZXR5cGUsIF9fZW50cnktXHUwMDNlbWFjX2FkZHIpXG4gKTtcbiBcbiBERUZJTkVfRVZFTlQoa2V5X2hhbmRsZSwgcmRldl9nZXRfa2V5LFxuIFx0VFBfUFJPVE8oc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwgaW50IGxpbmtfaWQsXG4tXHRcdCB1OCBrZXlfaW5kZXgsIGJvb2wgcGFpcndpc2UsIGNvbnN0IHU4ICptYWNfYWRkciksXG4tXHRUUF9BUkdTKHdpcGh5LCB3ZGV2LCBsaW5rX2lkLCBrZXlfaW5kZXgsIHBhaXJ3aXNlLCBtYWNfYWRkcilcbiYjNDM7XHRcdCB1OCBrZXlfaW5kZXgsIGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLCBjb25zdCB1OCAqbWFjX2FkZHIpLFxuJiM0MztcdFRQX0FSR1Mod2lwaHksIHdkZXYsIGxpbmtfaWQsIGtleV9pbmRleCwgdHlwZSwgbWFjX2FkZHIpXG4gKTtcbiBcbiBERUZJTkVfRVZFTlQoa2V5X2hhbmRsZSwgcmRldl9kZWxfa2V5LFxuIFx0VFBfUFJPVE8oc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwgaW50IGxpbmtfaWQsXG4tXHRcdCB1OCBrZXlfaW5kZXgsIGJvb2wgcGFpcndpc2UsIGNvbnN0IHU4ICptYWNfYWRkciksXG4tXHRUUF9BUkdTKHdpcGh5LCB3ZGV2LCBsaW5rX2lkLCBrZXlfaW5kZXgsIHBhaXJ3aXNlLCBtYWNfYWRkcilcbiYjNDM7XHRcdCB1OCBrZXlfaW5kZXgsIGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLCBjb25zdCB1OCAqbWFjX2FkZHIpLFxuJiM0MztcdFRQX0FSR1Mod2lwaHksIHdkZXYsIGxpbmtfaWQsIGtleV9pbmRleCwgdHlwZSwgbWFjX2FkZHIpXG4gKTtcbiBcbiBUUkFDRV9FVkVOVChyZGV2X2FkZF9rZXksXG4gXHRUUF9QUk9UTyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LCBpbnQgbGlua19pZCxcbi1cdFx0IHU4IGtleV9pbmRleCwgYm9vbCBwYWlyd2lzZSwgY29uc3QgdTggKm1hY19hZGRyLCB1OCBtb2RlKSxcbi1cdFRQX0FSR1Mod2lwaHksIHdkZXYsIGxpbmtfaWQsIGtleV9pbmRleCwgcGFpcndpc2UsIG1hY19hZGRyLCBtb2RlKSxcbiYjNDM7XHRcdCB1OCBrZXlfaW5kZXgsIGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLCBjb25zdCB1OCAqbWFjX2FkZHIsXG4mIzQzO1x0XHQgdTggbW9kZSksXG4mIzQzO1x0VFBfQVJHUyh3aXBoeSwgd2RldiwgbGlua19pZCwga2V5X2luZGV4LCB0eXBlLCBtYWNfYWRkciwgbW9kZSksXG4gXHRUUF9TVFJVQ1RfX2VudHJ5KFxuIFx0XHRXSVBIWV9FTlRSWVxuIFx0XHRXREVWX0VOVFJZXG4gXHRcdE1BQ19FTlRSWShtYWNfYWRkcilcbiBcdFx0X19maWVsZChpbnQsIGxpbmtfaWQpXG4gXHRcdF9fZmllbGQodTgsIGtleV9pbmRleClcbi1cdFx0X19maWVsZChib29sLCBwYWlyd2lzZSlcbiYjNDM7XHRcdF9fZmllbGQodTgsIHR5cGUpXG4gXHRcdF9fZmllbGQodTgsIG1vZGUpXG4gXHQpLFxuIFx0VFBfZmFzdF9hc3NpZ24oXG5AQCAtNjEzLDE1ICYjNDM7NjE1LDE2IEBAIFRSQUNFX0VWRU5UKHJkZXZfYWRkX2tleSxcbiBcdFx0TUFDX0FTU0lHTihtYWNfYWRkciwgbWFjX2FkZHIpO1xuIFx0XHRfX2VudHJ5LVx1MDAzZWxpbmtfaWQgPSBsaW5rX2lkO1xuIFx0XHRfX2VudHJ5LVx1MDAzZWtleV9pbmRleCA9IGtleV9pbmRleDtcbi1cdFx0X19lbnRyeS1cdTAwM2VwYWlyd2lzZSA9IHBhaXJ3aXNlO1xuJiM0MztcdFx0X19lbnRyeS1cdTAwM2V0eXBlID0gdHlwZTtcbiBcdFx0X19lbnRyeS1cdTAwM2Vtb2RlID0gbW9kZTtcbiBcdCksXG4gXHRUUF9wcmludGsoV0lQSFlfUFJfRk1UIFwmIzM0OywgXCYjMzQ7IFdERVZfUFJfRk1UIFwmIzM0OywgbGlua19pZDogJWQsIFwmIzM0O1xuLVx0XHQgIFwmIzM0O2tleV9pbmRleDogJXUsIG1vZGU6ICV1LCBwYWlyd2lzZTogJXMsIFwmIzM0O1xuJiM0MztcdFx0ICBcJiMzNDtrZXlfaW5kZXg6ICV1LCBtb2RlOiAldSwgcGFpcndpc2U6ICVzLCB0eXBlOiAlZCwgXCYjMzQ7XG4gXHRcdCAgXCYjMzQ7bWFjIGFkZHI6ICVwTVwmIzM0OyxcbiBcdFx0ICBXSVBIWV9QUl9BUkcsIFdERVZfUFJfQVJHLCBfX2VudHJ5LVx1MDAzZWxpbmtfaWQsXG4gXHRcdCAgX19lbnRyeS1cdTAwM2VrZXlfaW5kZXgsIF9fZW50cnktXHUwMDNlbW9kZSxcbi1cdFx0ICBCT09MX1RPX1NUUihfX2VudHJ5LVx1MDAzZXBhaXJ3aXNlKSwgX19lbnRyeS1cdTAwM2VtYWNfYWRkcilcbiYjNDM7XHRcdCAgQk9PTF9UT19TVFIoX19lbnRyeS1cdTAwM2V0eXBlID09IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRSksXG4mIzQzO1x0XHQgIF9fZW50cnktXHUwMDNldHlwZSwgX19lbnRyeS1cdTAwM2VtYWNfYWRkcilcbiApO1xuIFxuIFRSQUNFX0VWRU5UKHJkZXZfc2V0X2RlZmF1bHRfa2V5LFxuZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy91dGlsLmMgYi9uZXQvd2lyZWxlc3MvdXRpbC5jXG5pbmRleCAzZTU4NGQwY2EzZTI2Li5kZDE2NmMzNTI5MTBmIDEwMDY0NFxuLS0tIGEvbmV0L3dpcmVsZXNzL3V0aWwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3dpcmVsZXNzL3V0aWwuY1xuQEAgLTI1OCw4ICYjNDM7MjU4LDI0IEBAIHN0YXRpYyBib29sIGNmZzgwMjExX2lndGtfY2lwaGVyX3N1cHBvcnRlZChzdHJ1Y3Qgd2lwaHkgKndpcGh5KVxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbiYjNDM7Ym9vbCBjZmc4MDIxMV9jaWd0a19zdXBwb3J0ZWQoc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcbiYjNDM7XHRcdFx0ICAgICAgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCB3aXBoeV9pZnR5cGVfZXh0X2NhcGFiICpleHRfY2FwYWIgPVxuJiM0MztcdFx0Y2ZnODAyMTFfZ2V0X2lmdHlwZV9leHRfY2FwYSh3ZGV2LVx1MDAzZXdpcGh5LCB3ZGV2LVx1MDAzZWlmdHlwZSk7XG4mIzQzO1xuJiM0MztcdGlmIChleHRfY2FwYWIgXHUwMDI2XHUwMDI2IGV4dF9jYXBhYi1cdTAwM2VjaXBfc3VwcG9ydGVkKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MztcdGlmIChpbmZvKVxuJiM0MztcdFx0R0VOTF9TRVRfRVJSX01TRyhpbmZvLFxuJiM0MztcdFx0XHRcdCBcJiMzNDtDb250cm9sIEludGVncml0eSBQcm90b2NvbCBub3Qgc3VwcG9ydGVkXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4mIzQzO1xuIGJvb2wgY2ZnODAyMTFfdmFsaWRfa2V5X2lkeChzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuLVx0XHRcdCAgICBpbnQga2V5X2lkeCwgYm9vbCBwYWlyd2lzZSxcbiYjNDM7XHRcdFx0ICAgIGludCBrZXlfaWR4LCBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSxcbiBcdFx0XHQgICAgY29uc3QgdTggKm1hY19hZGRyKVxuIHtcbiBcdGlmIChXQVJOX09OKCF3ZGV2KSlcbkBAIC0yNzIsMTMgJiM0MzsyODgsMjQgQEAgYm9vbCBjZmc4MDIxMV92YWxpZF9rZXlfaWR4KHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4gXHQgKiBDYW4mIzM5O3QgZGlmZmVyZW50aWF0ZSBjaXBoZXJzIGhlcmUgc28gYWxsb3cgMC4uMy5cbiBcdCAqIFBhaXJ3aXNlIGtleXMgbXVzdCBiZSBmb3IgYSBzdGF0aW9uIChNQUMgYWRkcmVzcyBnaXZlbikuXG4gXHQgKi9cbi1cdGlmIChwYWlyd2lzZSkge1xuJiM0MztcdGlmICh0eXBlID09IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRSkge1xuIFx0XHRpZiAoIW1hY19hZGRyKVxuIFx0XHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdFx0cmV0dXJuIGtleV9pZHggXHUwMDNjIDQ7XG4gXHR9XG4gXG4mIzQzO1x0LyogQ2hlY2sgdGhlIHdkZXYvaWZ0eXBlIHN1cHBvcnRzIENJR1RLICovXG4mIzQzO1x0aWYgKHR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX0NJR1RLKSB7XG4mIzQzO1x0XHRpZiAoIWNmZzgwMjExX2NpZ3RrX3N1cHBvcnRlZCh3ZGV2LCBOVUxMKSlcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRcdGlmIChrZXlfaWR4IFx1MDAzZT0gMilcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRcdC8qIGZhbGx0aHJvdWdoIGZvciBtYWNfYWRkciBjaGVja3MgKi9cbiYjNDM7XHR9XG4mIzQzO1xuIFx0LypcbiBcdCAqIEZvciBncm91cCBrZXlzLCBtYWNfYWRkcj09TlVMTCBtZWFucyBzZXR0aW5nIGEgZ3JvdXAga2V5XG4gXHQgKiBmb3IgVFgsIHdoaWNoIGlzIG9ubHkgc3VwcG9ydGVkIG9uIHNvbWUgaW50ZXJmYWNlIHR5cGVzLFxuQEAgLTM0Myw5ICYjNDM7MzcwLDEyIEBAIGJvb2wgY2ZnODAyMTFfdmFsaWRfa2V5X2lkeChzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuIGludCBjZmc4MDIxMV92YWxpZGF0ZV9rZXlfc2V0dGluZ3Moc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuIFx0XHRcdFx0ICAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcbiBcdFx0XHRcdCAgIHN0cnVjdCBrZXlfcGFyYW1zICpwYXJhbXMsIGludCBrZXlfaWR4LFxuLVx0XHRcdFx0ICAgYm9vbCBwYWlyd2lzZSwgY29uc3QgdTggKm1hY19hZGRyKVxuJiM0MztcdFx0XHRcdCAgIGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLFxuJiM0MztcdFx0XHRcdCAgIGNvbnN0IHU4ICptYWNfYWRkcilcbiB7XG4tXHRpZiAoIWNmZzgwMjExX3ZhbGlkX2tleV9pZHgod2Rldiwga2V5X2lkeCwgcGFpcndpc2UsIG1hY19hZGRyKSlcbiYjNDM7XHRib29sIHBhaXJ3aXNlID0gdHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0U7XG4mIzQzO1xuJiM0MztcdGlmICghY2ZnODAyMTFfdmFsaWRfa2V5X2lkeCh3ZGV2LCBrZXlfaWR4LCB0eXBlLCBtYWNfYWRkcikpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0c3dpdGNoIChwYXJhbXMtXHUwMDNlY2lwaGVyKSB7XG5AQCAtMTE3Miw3ICYjNDM7MTIwMiw3IEBAIHZvaWQgY2ZnODAyMTFfdXBsb2FkX2Nvbm5lY3Rfa2V5cyhzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2KVxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgNDsgaSYjNDM7JiM0MzspIHtcbiBcdFx0aWYgKCF3ZGV2LVx1MDAzZWNvbm5lY3Rfa2V5cy1cdTAwM2VwYXJhbXNbaV0uY2lwaGVyKVxuIFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRpZiAocmRldl9hZGRfa2V5KHJkZXYsIHdkZXYsIC0xLCBpLCBmYWxzZSwgTlVMTCxcbiYjNDM7XHRcdGlmIChyZGV2X2FkZF9rZXkocmRldiwgd2RldiwgLTEsIGksIE5MODAyMTFfS0VZVFlQRV9HUk9VUCwgTlVMTCxcbiBcdFx0XHRcdCBcdTAwMjZ3ZGV2LVx1MDAzZWNvbm5lY3Rfa2V5cy1cdTAwM2VwYXJhbXNbaV0pKSB7XG4gXHRcdFx0bmV0ZGV2X2VycihkZXYsIFwmIzM0O2ZhaWxlZCB0byBzZXQga2V5ICVkXFxuXCYjMzQ7LCBpKTtcbiBcdFx0XHRjb250aW51ZTtcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvd2V4dC1jb21wYXQuYyBiL25ldC93aXJlbGVzcy93ZXh0LWNvbXBhdC5jXG5pbmRleCBkNDViYzA4YzBkZTQ5Li5lYzIzODlmNmI4YjE4IDEwMDY0NFxuLS0tIGEvbmV0L3dpcmVsZXNzL3dleHQtY29tcGF0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC93aXJlbGVzcy93ZXh0LWNvbXBhdC5jXG5AQCAtNDAxLDYgJiM0Mzs0MDEsOCBAQCBzdGF0aWMgaW50IGNmZzgwMjExX3NldF9lbmNyeXB0aW9uKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbiBcdFx0XHRcdCAgIGludCBpZHgsIHN0cnVjdCBrZXlfcGFyYW1zICpwYXJhbXMpXG4ge1xuIFx0c3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi1cdTAwM2VpZWVlODAyMTFfcHRyO1xuJiM0MztcdGVudW0gbmw4MDIxMV9rZXlfdHlwZSBrZXlfdHlwZSA9XG4mIzQzO1x0XHRwYWlyd2lzZSA/IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRSA6IE5MODAyMTFfS0VZVFlQRV9HUk9VUDtcbiBcdGludCBlcnIsIGk7XG4gXHRib29sIHJlam9pbiA9IGZhbHNlO1xuIFxuQEAgLTQ1NCwxMSAmIzQzOzQ1NiwxMSBAQCBzdGF0aWMgaW50IGNmZzgwMjExX3NldF9lbmNyeXB0aW9uKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbiBcdFx0XHRcdHJlam9pbiA9IHRydWU7XG4gXHRcdFx0fVxuIFxuLVx0XHRcdGlmICghY2ZnODAyMTFfdmFsaWRfa2V5X2lkeCh3ZGV2LCBpZHgsIHBhaXJ3aXNlLCBhZGRyKSlcbiYjNDM7XHRcdFx0aWYgKCFjZmc4MDIxMV92YWxpZF9rZXlfaWR4KHdkZXYsIGlkeCwga2V5X3R5cGUsIGFkZHIpKVxuIFx0XHRcdFx0ZXJyID0gLUVOT0VOVDtcbiBcdFx0XHRlbHNlXG4tXHRcdFx0XHRlcnIgPSByZGV2X2RlbF9rZXkocmRldiwgd2RldiwgLTEsIGlkeCwgcGFpcndpc2UsXG4tXHRcdFx0XHRcdFx0ICAgYWRkcik7XG4mIzQzO1x0XHRcdFx0ZXJyID0gcmRldl9kZWxfa2V5KHJkZXYsIHdkZXYsIC0xLCBpZHgsXG4mIzQzO1x0XHRcdFx0XHRcdCAgIGtleV90eXBlLCBhZGRyKTtcbiBcdFx0fVxuIFx0XHR3ZGV2LVx1MDAzZXdleHQuY29ubmVjdC5wcml2YWN5ID0gZmFsc2U7XG4gXHRcdC8qXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjA6MDI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O0NGRzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExX0hXU0lNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmw4MDIxMV9uZXdfa2V5JiMzNDssCiAgICAmIzM0O25sODAyMTFfZGVsX2tleSYjMzQ7LAogICAgJiMzNDtubDgwMjExX2dldF9rZXkmIzM0OywKICAgICYjMzQ7bmw4MDIxMV9zZXRfc3RhdGlvbiYjMzQ7LAogICAgJiMzNDtubDgwMjExX25ld19zdGF0aW9uJiMzNDssCiAgICAmIzM0O25sODAyMTFfYXNzb2NpYXRlJiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9rZXlfbGluayYjMzQ7LAogICAgJiMzNDtpZWVlODAyMTFfZ3RrX3Jla2V5X2FkZCYjMzQ7LAogICAgJiMzNDtpZWVlODAyMTFfcHV0X2NpcF9jYXAmIzM0OywKICAgICYjMzQ7Y2ZnODAyMTFfY2lndGtfc3VwcG9ydGVkJiMzNDssCiAgICAmIzM0O2NmZzgwMjExX3ZhbGlkX2tleV9pZHgmIzM0OywKICAgICYjMzQ7Y2ZnODAyMTFfdmFsaWRhdGVfa2V5X3NldHRpbmdzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgdGhlIENvbnRyb2wgSW50ZWdyaXR5IFByb3RvY29sIChDSVApIGluIGNmZzgwMjExIGFuZCBtYWM4MDIxMSwgaW5jbHVkaW5nIGEgbmV3IGtleSB0eXBlIGBOTDgwMjExX0tFWVRZUEVfQ0lHVEtgIGFuZCBuZXcgbmV0bGluayBhdHRyaWJ1dGVzLiBJdCBtb2RpZmllcyBrZXkgaGFuZGxpbmcgbG9naWMgYWNyb3NzIHRoZSB3aXJlbGVzcyBzdGFjayBhbmQgdXBkYXRlcyBgbWFjODAyMTFfaHdzaW1gIHRvIGFkdmVydGlzZSBDSVAgc3VwcG9ydCwgbWFraW5nIGl0IHRlc3RhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgbmw4MDIxMSBuZXRsaW5rIGNvbW1hbmRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjliNGQ5ZDM1MmM3MDIyNTM5YzMwMmRkMDUxOGUyMjYwMzc1OWQyMApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDEgMjA6MDI6MjUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NmZzgwMjExLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NmZzgwMjExLmMKaW5kZXggZWNkZTkxMTU5YjU0Ni4uZDRlOTQyM2ZjNWU0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jZmc4MDIxMS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvY2ZnODAyMTEuYwpAQCAtMTEyNSwxMyAmIzQzOzExMjUsMTUgQEAgdm9pZCBhdGg2a2xfY2ZnODAyMTFfY2hfc3dpdGNoX25vdGlmeShzdHJ1Y3QgYXRoNmtsX3ZpZiAqdmlmLCBpbnQgZnJlcSwKIH0KIAogc3RhdGljIGludCBhdGg2a2xfY2ZnODAyMTFfYWRkX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LAotCQkJCSAgIGludCBsaW5rX2lkLCB1OCBrZXlfaW5kZXgsIGJvb2wgcGFpcndpc2UsCiYjNDM7CQkJCSAgIGludCBsaW5rX2lkLCB1OCBrZXlfaW5kZXgsCiYjNDM7CQkJCSAgIGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLAogCQkJCSAgIGNvbnN0IHU4ICptYWNfYWRkciwKIAkJCQkgICBzdHJ1Y3Qga2V5X3BhcmFtcyAqcGFyYW1zKQogewogCXN0cnVjdCBhdGg2a2wgKmFyID0gYXRoNmtsX3ByaXYod2Rldi0mZ3Q7bmV0ZGV2KTsKIAlzdHJ1Y3QgYXRoNmtsX3ZpZiAqdmlmID0gbmV0ZGV2X3ByaXYod2Rldi0mZ3Q7bmV0ZGV2KTsKIAlzdHJ1Y3QgYXRoNmtsX2tleSAqa2V5ID0gTlVMTDsKJiM0MzsJYm9vbCBwYWlyd2lzZSA9IHR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFOwogCWludCBzZXFfbGVuOwogCXU4IGtleV91c2FnZTsKIAl1OCBrZXlfdHlwZTsKQEAgLTEyNTAsNyAmIzQzOzEyNTIsOCBAQCBzdGF0aWMgaW50IGF0aDZrbF9jZmc4MDIxMV9hZGRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZQogfQogCiBzdGF0aWMgaW50IGF0aDZrbF9jZmc4MDIxMV9kZWxfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsCi0JCQkJICAgaW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCwgYm9vbCBwYWlyd2lzZSwKJiM0MzsJCQkJICAgaW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCwKJiM0MzsJCQkJICAgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsCiAJCQkJICAgY29uc3QgdTggKm1hY19hZGRyKQogewogCXN0cnVjdCBhdGg2a2wgKmFyID0gYXRoNmtsX3ByaXYod2Rldi0mZ3Q7bmV0ZGV2KTsKQEAgLTEyODAsNyAmIzQzOzEyODMsOCBAQCBzdGF0aWMgaW50IGF0aDZrbF9jZmc4MDIxMV9kZWxfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZQogfQogCiBzdGF0aWMgaW50IGF0aDZrbF9jZmc4MDIxMV9nZXRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsCi0JCQkJICAgaW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCwgYm9vbCBwYWlyd2lzZSwKJiM0MzsJCQkJICAgaW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCwKJiM0MzsJCQkJICAgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsCiAJCQkJICAgY29uc3QgdTggKm1hY19hZGRyLCB2b2lkICpjb29raWUsCiAJCQkJICAgdm9pZCAoKmNhbGxiYWNrKSAodm9pZCAqY29va2llLAogCQkJCQkJICAgICBzdHJ1Y3Qga2V5X3BhcmFtcyAqKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC93aWw2MjEwL2NmZzgwMjExLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvd2lsNjIxMC9jZmc4MDIxMS5jCmluZGV4IDVmMmJkOWEzMWZhZjYuLmMwOTc4MzFiN2ZhZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC93aWw2MjEwL2NmZzgwMjExLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3dpbDYyMTAvY2ZnODAyMTEuYwpAQCAtMTYyMSwxMSAmIzQzOzE2MjEsMTMgQEAgc3RhdGljIHZvaWQgd2lsX2RlbF9yeF9rZXkodTgga2V5X2luZGV4LCBlbnVtIHdtaV9rZXlfdXNhZ2Uga2V5X3VzYWdlLAogCiBzdGF0aWMgaW50IHdpbF9jZmc4MDIxMV9hZGRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksCiAJCQkJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwgaW50IGxpbmtfaWQsCi0JCQkJdTgga2V5X2luZGV4LCBib29sIHBhaXJ3aXNlLAomIzQzOwkJCQl1OCBrZXlfaW5kZXgsCiYjNDM7CQkJCWVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLAogCQkJCWNvbnN0IHU4ICptYWNfYWRkciwKIAkJCQlzdHJ1Y3Qga2V5X3BhcmFtcyAqcGFyYW1zKQogewogCWludCByYzsKJiM0MzsJYm9vbCBwYWlyd2lzZSA9IHR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFOwogCXN0cnVjdCB3aWw2MjEwX3ByaXYgKndpbCA9IHdpcGh5X3RvX3dpbCh3aXBoeSk7CiAJc3RydWN0IHdpbDYyMTBfdmlmICp2aWYgPSB3ZGV2X3RvX3ZpZih3aWwsIHdkZXYpOwogCWVudW0gd21pX2tleV91c2FnZSBrZXlfdXNhZ2UgPSB3aWxfZGV0ZWN0X2tleV91c2FnZSh3ZGV2LCBwYWlyd2lzZSk7CkBAIC0xNjk2LDEyICYjNDM7MTY5OCwxNCBAQCBzdGF0aWMgaW50IHdpbF9jZmc4MDIxMV9hZGRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksCiAKIHN0YXRpYyBpbnQgd2lsX2NmZzgwMjExX2RlbF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwKIAkJCQlzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LCBpbnQgbGlua19pZCwKLQkJCQl1OCBrZXlfaW5kZXgsIGJvb2wgcGFpcndpc2UsCiYjNDM7CQkJCXU4IGtleV9pbmRleCwKJiM0MzsJCQkJZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsCiAJCQkJY29uc3QgdTggKm1hY19hZGRyKQogewogCXN0cnVjdCB3aWw2MjEwX3ByaXYgKndpbCA9IHdpcGh5X3RvX3dpbCh3aXBoeSk7CiAJc3RydWN0IHdpbDYyMTBfdmlmICp2aWYgPSB3ZGV2X3RvX3ZpZih3aWwsIHdkZXYpOwotCWVudW0gd21pX2tleV91c2FnZSBrZXlfdXNhZ2UgPSB3aWxfZGV0ZWN0X2tleV91c2FnZSh3ZGV2LCBwYWlyd2lzZSk7CiYjNDM7CWVudW0gd21pX2tleV91c2FnZSBrZXlfdXNhZ2UgPQomIzQzOwkJd2lsX2RldGVjdF9rZXlfdXNhZ2Uod2RldiwgdHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0UpOwogCXN0cnVjdCB3aWxfc3RhX2luZm8gKmNzID0gd2lsX2ZpbmRfc3RhX2J5X2tleV91c2FnZSh3aWwsIHZpZi0mZ3Q7bWlkLAogCQkJCQkJCSAgICBrZXlfdXNhZ2UsCiAJCQkJCQkJICAgIG1hY19hZGRyKTsKQEAgLTIwNzIsNyAmIzQzOzIwNzYsOCBAQCB2b2lkIHdpbF9jZmc4MDIxMV9hcF9yZWNvdmVyeShzdHJ1Y3Qgd2lsNjIxMF9wcml2ICp3aWwpCiAJCWtleV9wYXJhbXMuc2VxX2xlbiA9IElFRUU4MDIxMV9HQ01QX1BOX0xFTjsKIAkJcmMgPSB3aWxfY2ZnODAyMTFfYWRkX2tleSh3aXBoeSwgdmlmX3RvX3dkZXYodmlmKSwgLTEsCiAJCQkJCSAgdmlmLSZndDtndGtfaW5kZXgsCi0JCQkJCSAgZmFsc2UsIE5VTEwsICZhbXA7a2V5X3BhcmFtcyk7CiYjNDM7CQkJCQkgIE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRSwKJiM0MzsJCQkJCSAgTlVMTCwgJmFtcDtrZXlfcGFyYW1zKTsKIAkJaWYgKHJjKQogCQkJd2lsX2Vycih3aWwsICYjMzQ7dmlmICVkIHJlY292ZXJ5IGFkZCBrZXkgZmFpbGVkICglZClcbiYjMzQ7LAogCQkJCWksIHJjKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMKaW5kZXggNmIyYzM0ZTNhNzk2Yy4uNzg1ZmQ1N2Q3YzZjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMKQEAgLTI3NzAsNyAmIzQzOzI3NzAsOCBAQCBicmNtZl9jZmc4MDIxMV9jb25maWdfZGVmYXVsdF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsCiAKIHN0YXRpYyBzMzIKIGJyY21mX2NmZzgwMjExX2RlbF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwKLQkJICAgICAgIGludCBsaW5rX2lkLCB1OCBrZXlfaWR4LCBib29sIHBhaXJ3aXNlLAomIzQzOwkJICAgICAgIGludCBsaW5rX2lkLCB1OCBrZXlfaWR4LAomIzQzOwkJICAgICAgIGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLAogCQkgICAgICAgY29uc3QgdTggKm1hY19hZGRyKQogewogCXN0cnVjdCBicmNtZl9pZiAqaWZwID0gbmV0ZGV2X3ByaXYod2Rldi0mZ3Q7bmV0ZGV2KTsKQEAgLTI4MDgsNyAmIzQzOzI4MDksOCBAQCBicmNtZl9jZmc4MDIxMV9kZWxfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsCiAKIHN0YXRpYyBzMzIKIGJyY21mX2NmZzgwMjExX2FkZF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwKLQkJICAgICAgIGludCBsaW5rX2lkLCB1OCBrZXlfaWR4LCBib29sIHBhaXJ3aXNlLAomIzQzOwkJICAgICAgIGludCBsaW5rX2lkLCB1OCBrZXlfaWR4LAomIzQzOwkJICAgICAgIGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLAogCQkgICAgICAgY29uc3QgdTggKm1hY19hZGRyLCBzdHJ1Y3Qga2V5X3BhcmFtcyAqcGFyYW1zKQogewogCXN0cnVjdCBicmNtZl9jZmc4MDIxMV9pbmZvICpjZmcgPSB3aXBoeV90b19jZmcod2lwaHkpOwpAQCAtMjgzNCw3ICYjNDM7MjgzNiw3IEBAIGJyY21mX2NmZzgwMjExX2FkZF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwKIAogCWlmIChwYXJhbXMtJmd0O2tleV9sZW4gPT0gMCkKIAkJcmV0dXJuIGJyY21mX2NmZzgwMjExX2RlbF9rZXkod2lwaHksIHdkZXYsIC0xLCBrZXlfaWR4LAotCQkJCQkgICAgICBwYWlyd2lzZSwgbWFjX2FkZHIpOwomIzQzOwkJCQkJICAgICAgdHlwZSwgbWFjX2FkZHIpOwogCiAJaWYgKHBhcmFtcy0mZ3Q7a2V5X2xlbiAmZ3Q7IHNpemVvZihrZXktJmd0O2RhdGEpKSB7CiAJCWJwaHlfZXJyKGRydnIsICYjMzQ7VG9vIGxvbmcga2V5IGxlbmd0aCAoJXUpXG4mIzM0OywgcGFyYW1zLSZndDtrZXlfbGVuKTsKQEAgLTI5MzAsNyAmIzQzOzI5MzIsOCBAQCBicmNtZl9jZmc4MDIxMV9hZGRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsCiAKIHN0YXRpYyBzMzIKIGJyY21mX2NmZzgwMjExX2dldF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwKLQkJICAgICAgIGludCBsaW5rX2lkLCB1OCBrZXlfaWR4LCBib29sIHBhaXJ3aXNlLAomIzQzOwkJICAgICAgIGludCBsaW5rX2lkLCB1OCBrZXlfaWR4LAomIzQzOwkJICAgICAgIGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLAogCQkgICAgICAgY29uc3QgdTggKm1hY19hZGRyLCB2b2lkICpjb29raWUsCiAJCSAgICAgICB2b2lkICgqY2FsbGJhY2spKHZvaWQgKmNvb2tpZSwKIAkJCQkJc3RydWN0IGtleV9wYXJhbXMgKnBhcmFtcykpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9kMy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvZDMuYwppbmRleCA1NWY5YjgwOWU3NjRkLi42ZDhlZGUzMzZkNTliIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9kMy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL2QzLmMKQEAgLTExMzgsNyAmIzQzOzExMzgsOCBAQCBpd2xfbWxkX2FkZF9tY2FzdF9yZWtleShzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAogCQlyZXR1cm47CiAKIAlrZXlfY29uZmlnID0gaWVlZTgwMjExX2d0a19yZWtleV9hZGQodmlmLCBrZXlfZGF0YS0mZ3Q7aWQsIGtleV9kYXRhLSZndDtrZXksCi0JCQkJCSAgICAgc2l6ZW9mKGtleV9kYXRhLSZndDtrZXkpLCBsaW5rX2lkKTsKJiM0MzsJCQkJCSAgICAgc2l6ZW9mKGtleV9kYXRhLSZndDtrZXkpLCBsaW5rX2lkLAomIzQzOwkJCQkJICAgICBmYWxzZSk7CiAJaWYgKElTX0VSUihrZXlfY29uZmlnKSkKIAkJcmV0dXJuOwogCkBAIC0xMjIwLDcgJiM0MzsxMjIxLDggQEAgc3RhdGljIHZvaWQgaXdsX21sZF9tbG9fcmVrZXkoc3RydWN0IGl3bF9tbGQgKm1sZCwKIAkJCQkgbWxvX2tleS0mZ3Q7aWR4LCBsaW5rX2lkKTsKIAogCQlrZXkgPSBpZWVlODAyMTFfZ3RrX3Jla2V5X2FkZCh2aWYsIG1sb19rZXktJmd0O2lkeCwgbWxvX2tleS0mZ3Q7a2V5LAotCQkJCQkgICAgICBzaXplb2YobWxvX2tleS0mZ3Q7a2V5KSwgbGlua19pZCk7CiYjNDM7CQkJCQkgICAgICBzaXplb2YobWxvX2tleS0mZ3Q7a2V5KSwgbGlua19pZCwKJiM0MzsJCQkJCSAgICAgIGZhbHNlKTsKIAogCQlpZiAoSVNfRVJSKGtleSkpCiAJCQljb250aW51ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL2QzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9kMy5jCmluZGV4IDZiMTFmYTMyZWE1YzYuLmJkNTJmMmViZDNiYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL2QzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vZDMuYwpAQCAtMTg4Nyw3ICYjNDM7MTg4Nyw4IEBAIHN0YXRpYyBib29sIGl3bF9tdm1fZ3RrX3Jla2V5KHN0cnVjdCBpd2xfd293bGFuX3N0YXR1c19kYXRhICpzdGF0dXMsCiAKIAkJa2V5ID0gaWVlZTgwMjExX2d0a19yZWtleV9hZGQodmlmLCBzdGF0dXMtJmd0O2d0a1tpXS5pZCwKIAkJCQkJICAgICAgc3RhdHVzLSZndDtndGtbaV0ua2V5LAotCQkJCQkgICAgICBzaXplb2Yoc3RhdHVzLSZndDtndGtbaV0ua2V5KSwgLTEpOwomIzQzOwkJCQkJICAgICAgc2l6ZW9mKHN0YXR1cy0mZ3Q7Z3RrW2ldLmtleSksIC0xLAomIzQzOwkJCQkJICAgICAgZmFsc2UpOwogCQlpZiAoSVNfRVJSKGtleSkpIHsKIAkJCS8qIEZXIG1heSBzZW5kIGFsc28gdGhlIG9sZCBrZXlzICovCiAJCQlpZiAoUFRSX0VSUihrZXkpID09IC1FQUxSRUFEWSkKQEAgLTE5MjIsNyAmIzQzOzE5MjMsOCBAQCBpd2xfbXZtX2QzX2lndGtfYmlndGtfcmVrZXlfYWRkKHN0cnVjdCBpd2xfd293bGFuX3N0YXR1c19kYXRhICpzdGF0dXMsCiAJCXJldHVybiB0cnVlOwogCiAJa2V5X2NvbmZpZyA9IGllZWU4MDIxMV9ndGtfcmVrZXlfYWRkKHZpZiwga2V5aWR4LCBrZXlfZGF0YS0mZ3Q7a2V5LAotCQkJCQkgICAgIHNpemVvZihrZXlfZGF0YS0mZ3Q7a2V5KSwgLTEpOwomIzQzOwkJCQkJICAgICBzaXplb2Yoa2V5X2RhdGEtJmd0O2tleSksIC0xLAomIzQzOwkJCQkJICAgICBmYWxzZSk7CiAJaWYgKElTX0VSUihrZXlfY29uZmlnKSkgewogCQkvKiBGVyBtYXkgc2VuZCBhbHNvIHRoZSBvbGQga2V5cyAqLwogCQlyZXR1cm4gUFRSX0VSUihrZXlfY29uZmlnKSA9PSAtRUFMUkVBRFk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2NmZy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9jZmcuYwppbmRleCA3MmM5MmY3MjQ2OWRlLi5lMDE1Y2ZhMTk1MGMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2NmZy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvY2ZnLmMKQEAgLTE1MDgsNyAmIzQzOzE1MDgsOCBAQCBzdGF0aWMgaW50IGxic19jZmdfc2V0X2RlZmF1bHRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksCiAKIAogc3RhdGljIGludCBsYnNfY2ZnX2FkZF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwKLQkJCSAgIGludCBsaW5rX2lkLCB1OCBpZHgsIGJvb2wgcGFpcndpc2UsCiYjNDM7CQkJICAgaW50IGxpbmtfaWQsIHU4IGlkeCwKJiM0MzsJCQkgICBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSwKIAkJCSAgIGNvbnN0IHU4ICptYWNfYWRkciwgc3RydWN0IGtleV9wYXJhbXMgKnBhcmFtcykKIHsKIAlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSB3aXBoeV9wcml2KHdpcGh5KTsKQEAgLTE1NjksNyAmIzQzOzE1NzAsOCBAQCBzdGF0aWMgaW50IGxic19jZmdfYWRkX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LAogCiAKIHN0YXRpYyBpbnQgbGJzX2NmZ19kZWxfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsCi0JCQkgICBpbnQgbGlua19pZCwgdTgga2V5X2luZGV4LCBib29sIHBhaXJ3aXNlLAomIzQzOwkJCSAgIGludCBsaW5rX2lkLCB1OCBrZXlfaW5kZXgsCiYjNDM7CQkJICAgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsCiAJCQkgICBjb25zdCB1OCAqbWFjX2FkZHIpCiB7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9jZmc4MDIxMS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L2NmZzgwMjExLmMKaW5kZXggOGVjMmQyMmE4YzMzYS4uMDYwYzM1MWNlY2MwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L2NmZzgwMjExLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L2NmZzgwMjExLmMKQEAgLTE0MiwxMiAmIzQzOzE0MiwxNCBAQCBzdGF0aWMgdm9pZCAqbXdpZmlleF9jZmc4MDIxMV9nZXRfYWRhcHRlcihzdHJ1Y3Qgd2lwaHkgKndpcGh5KQogICovCiBzdGF0aWMgaW50CiBtd2lmaWV4X2NmZzgwMjExX2RlbF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwKLQkJCSBpbnQgbGlua19pZCwgdTgga2V5X2luZGV4LCBib29sIHBhaXJ3aXNlLAomIzQzOwkJCSBpbnQgbGlua19pZCwgdTgga2V5X2luZGV4LAomIzQzOwkJCWVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLAogCQkJIGNvbnN0IHU4ICptYWNfYWRkcikKIHsKIAlzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2ID0gbXdpZmlleF9uZXRkZXZfZ2V0X3ByaXYod2Rldi0mZ3Q7bmV0ZGV2KTsKIAlzdGF0aWMgY29uc3QgdTggYmNfbWFjW10gPSB7MHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZn07Ci0JY29uc3QgdTggKnBlZXJfbWFjID0gcGFpcndpc2UgPyBtYWNfYWRkciA6IGJjX21hYzsKJiM0MzsJY29uc3QgdTggKnBlZXJfbWFjID0KJiM0MzsJCSh0eXBlID09IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRSkgPyBtYWNfYWRkciA6IGJjX21hYzsKIAogCWlmIChtd2lmaWV4X3NldF9lbmNvZGUocHJpdiwgTlVMTCwgTlVMTCwgMCwga2V5X2luZGV4LCBwZWVyX21hYywgMSkpIHsKIAkJbXdpZmlleF9kYmcocHJpdi0mZ3Q7YWRhcHRlciwgRVJST1IsICYjMzQ7ZGVsZXRpbmcgdGhlIGNyeXB0byBrZXlzXG4mIzM0Oyk7CkBAIC00ODIsMTMgJiM0Mzs0ODQsMTUgQEAgbXdpZmlleF9jZmc4MDIxMV9zZXRfZGVmYXVsdF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKICAqLwogc3RhdGljIGludAogbXdpZmlleF9jZmc4MDIxMV9hZGRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsCi0JCQkgaW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCwgYm9vbCBwYWlyd2lzZSwKJiM0MzsJCQkgaW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCwKJiM0MzsJCQkgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsCiAJCQkgY29uc3QgdTggKm1hY19hZGRyLCBzdHJ1Y3Qga2V5X3BhcmFtcyAqcGFyYW1zKQogewogCXN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYgPSBtd2lmaWV4X25ldGRldl9nZXRfcHJpdih3ZGV2LSZndDtuZXRkZXYpOwogCXN0cnVjdCBtd2lmaWV4X3dlcF9rZXkgKndlcF9rZXk7CiAJc3RhdGljIGNvbnN0IHU4IGJjX21hY1tdID0gezB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmZ9OwotCWNvbnN0IHU4ICpwZWVyX21hYyA9IHBhaXJ3aXNlID8gbWFjX2FkZHIgOiBiY19tYWM7CiYjNDM7CWNvbnN0IHU4ICpwZWVyX21hYyA9CiYjNDM7CQkodHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0UpID8gbWFjX2FkZHIgOiBiY19tYWM7CiAKIAlpZiAoR0VUX0JTU19ST0xFKHByaXYpID09IE1XSUZJRVhfQlNTX1JPTEVfVUFQICZhbXA7JmFtcDsKIAkgICAgKHBhcmFtcy0mZ3Q7Y2lwaGVyID09IFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDQwIHx8CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9taWNyb2NoaXAvd2lsYzEwMDAvY2ZnODAyMTEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21pY3JvY2hpcC93aWxjMTAwMC9jZmc4MDIxMS5jCmluZGV4IDY2NTRmY2U0ZGVkODQuLjc4NTBlMGE0ODM5MDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21pY3JvY2hpcC93aWxjMTAwMC9jZmc4MDIxMS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21pY3JvY2hpcC93aWxjMTAwMC9jZmc4MDIxMS5jCkBAIC01MzUsMTAgJiM0Mzs1MzUsMTMgQEAgc3RhdGljIGludCB3aWxjX3dmaV9jZmdfY29weV93cGFfaW5mbyhzdHJ1Y3Qgd2lsY193Zmlfa2V5ICprZXlfaW5mbywKIH0KIAogc3RhdGljIGludCBhZGRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsIGludCBsaW5rX2lkLAotCQkgICB1OCBrZXlfaW5kZXgsIGJvb2wgcGFpcndpc2UsIGNvbnN0IHU4ICptYWNfYWRkciwKJiM0MzsJCSAgIHU4IGtleV9pbmRleCwKJiM0MzsJCSAgIGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLAomIzQzOwkJICAgY29uc3QgdTggKm1hY19hZGRyLAogCQkgICBzdHJ1Y3Qga2V5X3BhcmFtcyAqcGFyYW1zKQogCiB7CiYjNDM7CWJvb2wgcGFpcndpc2UgPSB0eXBlID09IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRTsKIAlpbnQgcmV0ID0gMCwga2V5bGVuID0gcGFyYW1zLSZndDtrZXlfbGVuOwogCWNvbnN0IHU4ICpyeF9taWMgPSBOVUxMOwogCWNvbnN0IHU4ICp0eF9taWMgPSBOVUxMOwpAQCAtNjQxLDkgJiM0Mzs2NDQsMTAgQEAgc3RhdGljIGludCBhZGRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsIGludCBsaW5rX2lkLAogCiBzdGF0aWMgaW50IGRlbF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwgaW50IGxpbmtfaWQsCiAJCSAgIHU4IGtleV9pbmRleCwKLQkJICAgYm9vbCBwYWlyd2lzZSwKJiM0MzsJCSAgIGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLAogCQkgICBjb25zdCB1OCAqbWFjX2FkZHIpCiB7CiYjNDM7CWJvb2wgcGFpcndpc2UgPSB0eXBlID09IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRTsKIAlzdHJ1Y3Qgd2lsY192aWYgKnZpZiA9IG5ldGRldl9wcml2KHdkZXYtJmd0O25ldGRldik7CiAJc3RydWN0IHdpbGNfcHJpdiAqcHJpdiA9ICZhbXA7dmlmLSZndDtwcml2OwogCkBAIC02ODEsMTAgJiM0Mzs2ODUsMTEgQEAgc3RhdGljIGludCBkZWxfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsIGludCBsaW5rX2lkLAogfQogCiBzdGF0aWMgaW50IGdldF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwgaW50IGxpbmtfaWQsCi0JCSAgIHU4IGtleV9pbmRleCwgYm9vbCBwYWlyd2lzZSwgY29uc3QgdTggKm1hY19hZGRyLAotCQkgICB2b2lkICpjb29raWUsCiYjNDM7CQkgICB1OCBrZXlfaW5kZXgsIGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLAomIzQzOwkJICAgY29uc3QgdTggKm1hY19hZGRyLCB2b2lkICpjb29raWUsCiAJCSAgIHZvaWQgKCpjYWxsYmFjaykodm9pZCAqY29va2llLCBzdHJ1Y3Qga2V5X3BhcmFtcyAqKSkKIHsKJiM0MzsJYm9vbCBwYWlyd2lzZSA9IHR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFOwogCXN0cnVjdCB3aWxjX3ZpZiAqdmlmID0gbmV0ZGV2X3ByaXYod2Rldi0mZ3Q7bmV0ZGV2KTsKIAlzdHJ1Y3Qgd2lsY19wcml2ICpwcml2ID0gJmFtcDt2aWYtJmd0O3ByaXY7CiAJc3RydWN0ICBrZXlfcGFyYW1zIGtleV9wYXJhbXM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9jZmc4MDIxMS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvY2ZnODAyMTEuYwppbmRleCA0ZjllMjBmNzI4MTE0Li4wOGI2ZGIxNDc0NTJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9jZmc4MDIxMS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL2NmZzgwMjExLmMKQEAgLTk5LDEyICYjNDM7OTksMTQgQEAgc3RhdGljIHZvaWQgKm54cHdpZmlfY2ZnODAyMTFfZ2V0X2FkYXB0ZXIoc3RydWN0IHdpcGh5ICp3aXBoeSkKIC8qIGNmZzgwMjExIG9wZXJhdGlvbiBoYW5kbGVyIHRvIGRlbGV0ZSBhIG5ldHdvcmsga2V5LiAqLwogc3RhdGljIGludAogbnhwd2lmaV9jZmc4MDIxMV9kZWxfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsCi0JCQkgaW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCwgYm9vbCBwYWlyd2lzZSwKJiM0MzsJCQkgaW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCwKJiM0MzsJCQkgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsCiAJCQkgY29uc3QgdTggKm1hY19hZGRyKQogewogCXN0cnVjdCBueHB3aWZpX3ByaXZhdGUgKnByaXYgPSBueHB3aWZpX25ldGRldl9nZXRfcHJpdih3ZGV2LSZndDtuZXRkZXYpOwogCXN0YXRpYyBjb25zdCB1OCBiY19tYWNbXSA9IHsweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmfTsKLQljb25zdCB1OCAqcGVlcl9tYWMgPSBwYWlyd2lzZSA/IG1hY19hZGRyIDogYmNfbWFjOwomIzQzOwljb25zdCB1OCAqcGVlcl9tYWMgPQomIzQzOwkJKHR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFKSA/IG1hY19hZGRyIDogYmNfbWFjOwogCWludCByZXQ7CiAKIAlyZXQgPSBueHB3aWZpX3NldF9lbmNvZGUocHJpdiwgTlVMTCwgTlVMTCwgMCwga2V5X2luZGV4LCBwZWVyX21hYywgMSk7CkBAIC00MjgsNyAmIzQzOzQzMCw4IEBAIG54cHdpZmlfY2ZnODAyMTFfc2V0X2RlZmF1bHRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAvKiBjZmc4MDIxMSBoYW5kbGVyIGZvciBhZGRpbmcgYW4gODAyLjExIGVuY3J5cHRpb24ga2V5LiAqLwogc3RhdGljIGludAogbnhwd2lmaV9jZmc4MDIxMV9hZGRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsCi0JCQkgaW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCwgYm9vbCBwYWlyd2lzZSwKJiM0MzsJCQkgaW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCwKJiM0MzsJCQkgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsCiAJCQkgY29uc3QgdTggKm1hY19hZGRyLCBzdHJ1Y3Qga2V5X3BhcmFtcyAqcGFyYW1zKQogewogCXN0cnVjdCBueHB3aWZpX3ByaXZhdGUgKnByaXYgPSBueHB3aWZpX25ldGRldl9nZXRfcHJpdih3ZGV2LSZndDtuZXRkZXYpOwpAQCAtNDM4LDcgJiM0Mzs0NDEsNyBAQCBueHB3aWZpX2NmZzgwMjExX2FkZF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwKIAlpbnQgcmV0OwogCiAJZXRoX2Jyb2FkY2FzdF9hZGRyKGJjX21hYyk7Ci0JcGVlcl9tYWMgPSBwYWlyd2lzZSA/IG1hY19hZGRyIDogYmNfbWFjOwomIzQzOwlwZWVyX21hYyA9ICh0eXBlID09IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRSkgPyBtYWNfYWRkciA6IGJjX21hYzsKIAogCWlmIChHRVRfQlNTX1JPTEUocHJpdikgPT0gTlhQV0lGSV9CU1NfUk9MRV9VQVAgJmFtcDsmYW1wOwogCSAgICAocGFyYW1zLSZndDtjaXBoZXIgPT0gV0xBTl9DSVBIRVJfU1VJVEVfV0VQNDAgfHwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3F1YW50ZW5uYS9xdG5mbWFjL2NmZzgwMjExLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9xdWFudGVubmEvcXRuZm1hYy9jZmc4MDIxMS5jCmluZGV4IDllNDRjODVkMjA1MWMuLjM4NjI1MzQyMTY5ZmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3F1YW50ZW5uYS9xdG5mbWFjL2NmZzgwMjExLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcXVhbnRlbm5hL3F0bmZtYWMvY2ZnODAyMTEuYwpAQCAtNTMzLDEwICYjNDM7NTMzLDEyIEBAIHF0bmZfZHVtcF9zdGF0aW9uKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsCiB9CiAKIHN0YXRpYyBpbnQgcXRuZl9hZGRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsCi0JCQlpbnQgbGlua19pZCwgdTgga2V5X2luZGV4LCBib29sIHBhaXJ3aXNlLAomIzQzOwkJCWludCBsaW5rX2lkLCB1OCBrZXlfaW5kZXgsCiYjNDM7CQkJZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsCiAJCQljb25zdCB1OCAqbWFjX2FkZHIsIHN0cnVjdCBrZXlfcGFyYW1zICpwYXJhbXMpCiB7CiAJc3RydWN0IHF0bmZfdmlmICp2aWYgPSBxdG5mX25ldGRldl9nZXRfcHJpdih3ZGV2LSZndDtuZXRkZXYpOwomIzQzOwlib29sIHBhaXJ3aXNlID0gdHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0U7CiAJaW50IHJldDsKIAogCXJldCA9IHF0bmZfY21kX3NlbmRfYWRkX2tleSh2aWYsIGtleV9pbmRleCwgcGFpcndpc2UsIG1hY19hZGRyLCBwYXJhbXMpOwpAQCAtNTQ5LDEwICYjNDM7NTUxLDEyIEBAIHN0YXRpYyBpbnQgcXRuZl9hZGRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsCiB9CiAKIHN0YXRpYyBpbnQgcXRuZl9kZWxfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsCi0JCQlpbnQgbGlua19pZCwgdTgga2V5X2luZGV4LCBib29sIHBhaXJ3aXNlLAomIzQzOwkJCWludCBsaW5rX2lkLCB1OCBrZXlfaW5kZXgsCiYjNDM7CQkJZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsCiAJCQljb25zdCB1OCAqbWFjX2FkZHIpCiB7CiAJc3RydWN0IHF0bmZfdmlmICp2aWYgPSBxdG5mX25ldGRldl9nZXRfcHJpdih3ZGV2LSZndDtuZXRkZXYpOwomIzQzOwlib29sIHBhaXJ3aXNlID0gdHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0U7CiAJaW50IHJldDsKIAogCXJldCA9IHF0bmZfY21kX3NlbmRfZGVsX2tleSh2aWYsIGtleV9pbmRleCwgcGFpcndpc2UsIG1hY19hZGRyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvd293LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg5L3dvdy5jCmluZGV4IDhkYWRkOGRmNGZjNjUuLmM4ZTAwMjIzOGVjYjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvd293LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OS93b3cuYwpAQCAtNjY5LDEwICYjNDM7NjY5LDEyIEBAIHN0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICpydHc4OV93b3dfZ3RrX3Jla2V5KHN0cnVjdCBydHc4OV9kZXYgKnJ0d2RldiwKIAlpZiAoaWVlZTgwMjExX3ZpZl9pc19tbGQod293X3ZpZikpCiAJCWtleSA9IGllZWU4MDIxMV9ndGtfcmVrZXlfYWRkKHdvd192aWYsIGtleWlkeCwgZ3RrLAogCQkJCQkgICAgICBjaXBoZXJfaW5mby0mZ3Q7bGVuLAotCQkJCQkgICAgICBydHd2aWZfbGluay0mZ3Q7bGlua19pZCk7CiYjNDM7CQkJCQkgICAgICBydHd2aWZfbGluay0mZ3Q7bGlua19pZCwKJiM0MzsJCQkJCSAgICAgIGZhbHNlKTsKIAllbHNlCiAJCWtleSA9IGllZWU4MDIxMV9ndGtfcmVrZXlfYWRkKHdvd192aWYsIGtleWlkeCwgZ3RrLAotCQkJCQkgICAgICBjaXBoZXJfaW5mby0mZ3Q7bGVuLCAtMSk7CiYjNDM7CQkJCQkgICAgICBjaXBoZXJfaW5mby0mZ3Q7bGVuLCAtMSwKJiM0MzsJCQkJCSAgICAgIGZhbHNlKTsKIAogCWtmcmVlKHJla2V5X2NvbmYpOwogCWlmIChJU19FUlIoa2V5KSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYwppbmRleCAwMmI2ZDgxY2NjZDExLi4xY2MzMjJhYTg5OGRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYwpAQCAtNTY2OCw2ICYjNDM7NTY2OCw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgd2lwaHlfaWZ0eXBlX2V4dF9jYXBhYiBtYWM4MDIxMV9od3NpbV9pZnR5cGVzX2V4dF9jYXBhW10gPSB7CiAJCS5lbWxfY2FwYWJpbGl0aWVzID0gSUVFRTgwMjExX0VNTF9DQVBfRU1MU1JfU1VQUCB8CiAJCQkJICAgIElFRUU4MDIxMV9FTUxfQ0FQX0VNTE1SX1NVUFBPUlQsCiAJCS5tbGRfY2FwYV9hbmRfb3BzID0gTUFDODAyMTFfSFdTSU1fTUxEX0NBUEFfT1BTLAomIzQzOwkJLyogQ0lQIHdvcmtzIGFzIGh3c2ltIGRvZXMgbm90IGhhdmUgY29udHJvbCBmcmFtZXMgKi8KJiM0MzsJCS5jaXBfc3VwcG9ydGVkID0gdHJ1ZSwKJiM0MzsJCS5jaXBfY2FwYWJpbGl0aWVzID0gMCwKIAl9LAogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZWVlODAyMTEuaCBiL2luY2x1ZGUvbGludXgvaWVlZTgwMjExLmgKaW5kZXggMjZlNjc0MDM4ODY1NC4uMTZkNzhmZDYxYzIyMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZWVlODAyMTEuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2llZWU4MDIxMS5oCkBAIC0xODI4LDYgJiM0MzsxODI4LDcgQEAgZW51bSBpZWVlODAyMTFfZWlkX2V4dCB7CiAJV0xBTl9FSURfRVhUX0JBTkRXSURUSF9JTkRJQ0FUSU9OID0gMTM1LAogCVdMQU5fRUlEX0VYVF9LTk9XTl9TVEFfSURFTlRJRkNBVElPTiA9IDEzNiwKIAlXTEFOX0VJRF9FWFRfTk9OX0FQX1NUQV9SRUdfQ09OID0gMTM3LAomIzQzOwlXTEFOX0VJRF9FWFRfQ0lQX0NBUEEgPSAxNTAsCiAJV0xBTl9FSURfRVhUX1VIUl9PUEVSID0gMTUxLAogCVdMQU5fRUlEX0VYVF9VSFJfQ0FQQSA9IDE1MiwKIAlXTEFOX0VJRF9FWFRfTUFDUCA9IDE1MywKQEAgLTI5MDAsNCAmIzQzOzI5MDEsMTYgQEAgc3RhdGljIGlubGluZSBib29sIGllZWU4MDIxMV9jaGVja190aW0oY29uc3Qgc3RydWN0IGllZWU4MDIxMV90aW1faWUgKnRpbSwKIAkJICAgICBfX2llZWU4MDIxMV9jaGVja190aW0odGltLCB0aW1fbGVuLCBhaWQpOwogfQogCiYjNDM7LyogVGhlIE1JQyBwYWRkaW5nIHN1YmZpZWxkIGluIHRoZSBDSVAgY2FwYWJpbGl0aWVzICovCiYjNDM7I2RlZmluZSBXTEFOX0NJUF9DQVBBX01JQ19QQURESU5HCTB4MEYKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBzdHJ1Y3QgaWVlZTgwMjExX2NpcF9jYXAgLSBDSVAgQ2FwYWJpbGl0aWVzIGVsZW1lbnQKJiM0MzsgKgomIzQzOyAqIEB2OiBUaGUgdmFsdWUgb2YgdGhlIENvbnRyb2wgSW50ZWdyaXR5IFByb3RvY29sIENhcGFiaWxpdHkgZWxlbWVudAomIzQzOyAqLwomIzQzO3N0cnVjdCBpZWVlODAyMTFfY2lwX2NhcCB7CiYjNDM7CXU4IHY7CiYjNDM7fSBfX3BhY2tlZDsKJiM0MzsKICNlbmRpZiAvKiBMSU5VWF9JRUVFODAyMTFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaCBiL2luY2x1ZGUvbmV0L2NmZzgwMjExLmgKaW5kZXggZGNiYjBlNTVjMzJlYy4uYjVkOThiYTA3MjM5YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9jZmc4MDIxMS5oCkBAIC0xODIxLDYgJiM0MzsxODIxLDggQEAgc3RydWN0IHN0YV90eHB3ciB7CiAgKiBAczFnX2NhcGE6IFMxRyBjYXBhYmlsaXRpZXMgb2Ygc3RhdGlvbgogICogQHVocl9jYXBhOiBVSFIgY2FwYWJpbGl0aWVzIG9mIHRoZSBzdGF0aW9uCiAgKiBAdWhyX2NhcGFfbGVuOiB0aGUgbGVuZ3RoIG9mIHRoZSBVSFIgY2FwYWJpbGl0aWVzCiYjNDM7ICogQGNpcF9jYXBfc2V0OiBJZiBDSVAgY2FwYWJpbGl0aWVzIGFyZSBwcmVzZW50LCByZXF1aXJlZCBmb3IgQ0lQIHN0YXRpb25zCiYjNDM7ICogQGNpcF9jYXA6IENJUCBjYXBhYmlsaXRpZXMgb2Ygc3RhdGlvbgogICovCiBzdHJ1Y3QgbGlua19zdGF0aW9uX3BhcmFtZXRlcnMgewogCWNvbnN0IHU4ICptbGRfbWFjOwpAQCAtMTg0Miw2ICYjNDM7MTg0NCw4IEBAIHN0cnVjdCBsaW5rX3N0YXRpb25fcGFyYW1ldGVycyB7CiAJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9zMWdfY2FwICpzMWdfY2FwYTsKIAljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3Vocl9jYXAgKnVocl9jYXBhOwogCXU4IHVocl9jYXBhX2xlbjsKJiM0MzsJYm9vbCBjaXBfY2FwX3NldDsKJiM0MzsJdTggY2lwX2NhcDsKIH07CiAKIC8qKgpAQCAtMzQwMiw2ICYjNDM7MzQwNiw3IEBAIHN0cnVjdCBjZmc4MDIxMV9tbF9yZWNvbmZfcmVxIHsKICAqCWZsYWcgaXMgbm90IHNldC4KICAqIEBBU1NPQ19SRVFfU1BQX0FNU0RVOiBTUFAgQS1NU0RVcyB3aWxsIGJlIHVzZWQgb24gdGhpcyBjb25uZWN0aW9uIChpZiBhbnkpCiAgKiBAQVNTT0NfUkVRX0RJU0FCTEVfVUhSOiBEaXNhYmxlIFVIUgomIzQzOyAqIEBBU1NPQ19SRVFfQ0lQOiBFbmFibGUgQ29udHJvbCBJbnRlZ3JpdHkgUHJvdG9jb2wKICAqLwogZW51bSBjZmc4MDIxMV9hc3NvY19yZXFfZmxhZ3MgewogCUFTU09DX1JFUV9ESVNBQkxFX0hUCQkJPSBCSVQoMCksCkBAIC0zNDEzLDYgJiM0MzszNDE4LDcgQEAgZW51bSBjZmc4MDIxMV9hc3NvY19yZXFfZmxhZ3MgewogCUNPTk5FQ1RfUkVRX01MT19TVVBQT1JUCQkJPSBCSVQoNiksCiAJQVNTT0NfUkVRX1NQUF9BTVNEVQkJCT0gQklUKDcpLAogCUFTU09DX1JFUV9ESVNBQkxFX1VIUgkJCT0gQklUKDgpLAomIzQzOwlBU1NPQ19SRVFfQ0lQCQkJCT0gQklUKDkpLAogfTsKIAogLyoqCkBAIC01MzAwLDE0ICYjNDM7NTMwNiwxNyBAQCBzdHJ1Y3QgY2ZnODAyMTFfb3BzIHsKIAkJCQkgdW5zaWduZWQgaW50IGxpbmtfaWQpOwogCiAJaW50CSgqYWRkX2tleSkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwKLQkJCSAgIGludCBsaW5rX2lkLCB1OCBrZXlfaW5kZXgsIGJvb2wgcGFpcndpc2UsCiYjNDM7CQkJICAgaW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCwKJiM0MzsJCQkgICBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSwKIAkJCSAgIGNvbnN0IHU4ICptYWNfYWRkciwgc3RydWN0IGtleV9wYXJhbXMgKnBhcmFtcyk7CiAJaW50CSgqZ2V0X2tleSkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwKLQkJCSAgIGludCBsaW5rX2lkLCB1OCBrZXlfaW5kZXgsIGJvb2wgcGFpcndpc2UsCiYjNDM7CQkJICAgaW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCwKJiM0MzsJCQkgICBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSwKIAkJCSAgIGNvbnN0IHU4ICptYWNfYWRkciwgdm9pZCAqY29va2llLAogCQkJICAgdm9pZCAoKmNhbGxiYWNrKSh2b2lkICpjb29raWUsIHN0cnVjdCBrZXlfcGFyYW1zKikpOwogCWludAkoKmRlbF9rZXkpKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsCi0JCQkgICBpbnQgbGlua19pZCwgdTgga2V5X2luZGV4LCBib29sIHBhaXJ3aXNlLAomIzQzOwkJCSAgIGludCBsaW5rX2lkLCB1OCBrZXlfaW5kZXgsCiYjNDM7CQkJICAgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsCiAJCQkgICBjb25zdCB1OCAqbWFjX2FkZHIpOwogCWludAkoKnNldF9kZWZhdWx0X2tleSkoc3RydWN0IHdpcGh5ICp3aXBoeSwKIAkJCQkgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgbGlua19pZCwKQEAgLTYwNDEsNiAmIzQzOzYwNTAsOCBAQCBzdHJ1Y3Qgd2lwaHlfdmVuZG9yX2NvbW1hbmQgewogICogQGVtbF9jYXBhYmlsaXRpZXM6IEVNTCBjYXBhYmlsaXRpZXMgKGZvciBNTE8pCiAgKiBAbWxkX2NhcGFfYW5kX29wczogTUxEIGNhcGFiaWxpdGllcyBhbmQgb3BlcmF0aW9ucyAoZm9yIE1MTykKICAqIEBleHRfbWxkX2NhcGFfYW5kX29wczogRXh0ZW5kZWQgTUxEIGNhcGFiaWxpdGllcyBhbmQgb3BlcmF0aW9ucyAoZm9yIE1MTykKJiM0MzsgKiBAY2lwX3N1cHBvcnRlZDogQ0lQIGlzIHN1cHBvcnRlZCBhbmQgdGhlIGNhcGFiaWxpdGllcyBhcmUgdmFsaWQKJiM0MzsgKiBAY2lwX2NhcGFiaWxpdGllczogQ0lQIENhcGFiaWxpdGllcyBlbGVtZW50IGNvbnRhaW5pbmcgdGhlIE1JQyBwYWRkaW5nIGRlbGF5CiAgKi8KIHN0cnVjdCB3aXBoeV9pZnR5cGVfZXh0X2NhcGFiIHsKIAllbnVtIG5sODAyMTFfaWZ0eXBlIGlmdHlwZTsKQEAgLTYwNTAsNiAmIzQzOzYwNjEsOCBAQCBzdHJ1Y3Qgd2lwaHlfaWZ0eXBlX2V4dF9jYXBhYiB7CiAJdTE2IGVtbF9jYXBhYmlsaXRpZXM7CiAJdTE2IG1sZF9jYXBhX2FuZF9vcHM7CiAJdTE2IGV4dF9tbGRfY2FwYV9hbmRfb3BzOwomIzQzOwlib29sIGNpcF9zdXBwb3J0ZWQ7CiYjNDM7CXU4IGNpcF9jYXBhYmlsaXRpZXM7CiB9OwogCiAvKioKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L21hYzgwMjExLmggYi9pbmNsdWRlL25ldC9tYWM4MDIxMS5oCmluZGV4IDlkMWZhYzZlODA4MjkuLmFhZTE0MGZkYzJiYjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L21hYzgwMjExLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbWFjODAyMTEuaApAQCAtMjM5Niw2ICYjNDM7MjM5Niw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBsb2NrZGVwX3ZpZl93aXBoeV9tdXRleF9oZWxkKHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCiAgKgludW1iZXIgZ2VuZXJhdGlvbiBvbmx5CiAgKiBASUVFRTgwMjExX0tFWV9GTEFHX1NQUF9BTVNEVTogU1BQIEEtTVNEVXMgY2FuIGJlIHVzZWQgd2l0aCB0aGlzIGtleQogICoJKHNldCBieSBtYWM4MDIxMSBmcm9tIHRoZSBzdGEtJmd0O3NwcF9hbXNkdSBmbGFnKQomIzQzOyAqIEBJRUVFODAyMTFfS0VZX0ZMQUdfQ0lQOiBUaGlzIGtleSBpcyB1c2VkIGZvciB0aGUgQ29udHJvbCBJbnRlZ3JpdHkKJiM0MzsgKglQcm90b2NvbCwgYW5kIGlzIGVpdGhlciBhIHBhaXJ3aXNlIGtleSBvciBhIENJR1RLLgogICovCiBlbnVtIGllZWU4MDIxMV9rZXlfZmxhZ3MgewogCUlFRUU4MDIxMV9LRVlfRkxBR19HRU5FUkFURV9JVl9NR01UCT0gQklUKDApLApAQCAtMjQxMCw2ICYjNDM7MjQxMiw3IEBAIGVudW0gaWVlZTgwMjExX2tleV9mbGFncyB7CiAJSUVFRTgwMjExX0tFWV9GTEFHX05PX0FVVE9fVFgJCT0gQklUKDkpLAogCUlFRUU4MDIxMV9LRVlfRkxBR19HRU5FUkFURV9NTUlFCT0gQklUKDEwKSwKIAlJRUVFODAyMTFfS0VZX0ZMQUdfU1BQX0FNU0RVCQk9IEJJVCgxMSksCiYjNDM7CUlFRUU4MDIxMV9LRVlfRkxBR19DSVAJCQk9IEJJVCgxMiksCiB9OwogCiAvKioKQEAgLTI2MzAsNiAmIzQzOzI2MzMsOCBAQCBzdHJ1Y3QgaWVlZTgwMjExX3N0YV9hZ2dyZWdhdGVzIHsKICAqIEBlaHRfY2FwOiBFSFQgY2FwYWJpbGl0aWVzIG9mIHRoaXMgU1RBCiAgKiBAdWhyX2NhcDogVUhSIGNhcGFiaWxpdGllcyBvZiB0aGlzIFNUQQogICogQHMxZ19jYXA6IFMxRyBjYXBhYmlsaXRpZXMgb2YgdGhpcyBTVEEKJiM0MzsgKiBAY2lwX21pY19wYWRkaW5nOiB0aGUgTUlDIHBhZGRpbmcgcmVxdWlyZWQgYnkgdGhlIFNUQSBhcyBkZWZpbmVkIGluIGl0cwomIzQzOyAqCUNJUCBDYXBhYmlsaXRpZXMgZWxlbWVudAogICogQGFnZzogcGVyLWxpbmsgZGF0YSBmb3IgbXVsdGktbGluayBhZ2dyZWdhdGlvbgogICogQGJhbmR3aWR0aDogY3VycmVudCBiYW5kd2lkdGggdGhlIHN0YXRpb24gY2FuIHJlY2VpdmUgd2l0aC4KICAqCVRoaXMgaXMgdGhlIG1pbmltdW0gYmV0d2VlbiB0aGUgcGVlciYjMzk7cyBjYXBhYmlsaXRpZXMgYW5kIG91ciBvd24KQEAgLTI2NTgsNiAmIzQzOzI2NjMsNyBAQCBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N0YV9laHRfY2FwIGVodF9jYXA7CiAJc3RydWN0IGllZWU4MDIxMV9zdGFfdWhyX2NhcCB1aHJfY2FwOwogCXN0cnVjdCBpZWVlODAyMTFfc3RhX3MxZ19jYXAgczFnX2NhcDsKJiM0MzsJdTggY2lwX21pY19wYWRkaW5nOwogCiAJc3RydWN0IGllZWU4MDIxMV9zdGFfYWdncmVnYXRlcyBhZ2c7CiAKQEAgLTI3MjEsNiAmIzQzOzI3MjcsNyBAQCBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhIHsKICAqIEB2YWxpZF9saW5rczogYml0bWFwIG9mIHZhbGlkIGxpbmtzLCBvciAwIGZvciBub24tTUxPCiAgKiBAc3BwX2Ftc2R1OiBpbmRpY2F0ZXMgd2hldGhlciB0aGUgU1RBIHVzZXMgU1BQIEEtTVNEVSBvciBub3QuCiAgKiBAZXBwX3BlZXI6IGluZGljYXRlcyB0aGF0IHRoZSBwZWVyIGlzIGFuIEVQUCBwZWVyLgomIzQzOyAqIEBjaXA6IGluZGljYXRlcyB3aGV0aGVyIHRoZSBTVEEgdXNlcyBjb250cm9sIGZyYW1lIHByb3RlY3Rpb24gb3Igbm90LgogICogQG5taTogRm9yIE5ESSBzdGF0aW9ucywgcG9pbnRlciB0byB0aGUgTk1JIHN0YXRpb24gb2YgdGhlIHBlZXIuCiAgKiBAbmFuX3NjaGVkOiBOQU4gcGVlciBzY2hlZHVsZSBmb3IgdGhpcyBzdGF0aW9uLiBWYWxpZCBvbmx5IGZvciBOTUkgc3RhdGlvbnMuCiAgKiBAZXh0X21sZF9jYXBhX29wczogdGhlIE1MRCYjMzk7cyBleHRlbmRlZCBNTEQgY2FwYWJpbGl0aWVzIGFuZCBvcGVyYXRpb25zCkBAIC0yNzQyLDYgJiM0MzsyNzQ5LDggQEAgc3RydWN0IGllZWU4MDIxMV9zdGEgewogCXU4IG1heF9hbXNkdV9zdWJmcmFtZXM7CiAJdTE2IGVtbF9jYXA7CiAKJiM0MzsJYm9vbCBjaXA7CiYjNDM7CiAJc3RydWN0IGllZWU4MDIxMV9zdGFfYWdncmVnYXRlcyAqY3VyOwogCiAJYm9vbCBzdXBwb3J0X3AycF9wczsKQEAgLTYyNzksNiAmIzQzOzYyODgsNyBAQCB2b2lkIGllZWU4MDIxMV9zZXRfa2V5X3J4X3NlcShzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXljb25mLAogICogQGtleV9sZW46IHRoZSBrZXkgZGF0YS4gTWlnaHQgYmUgYmlnZ2VyIHRoYW4gdGhlIGFjdHVhbCBrZXkgbGVuZ3RoLAogICoJYnV0IG5vdCBzbWFsbGVyIChmb3IgdGhlIGRyaXZlciBjb252aW5lbmNlKQogICogQGxpbmtfaWQ6IHRoZSBsaW5rIGlkIG9mIHRoZSBrZXkgb3IgLTEgZm9yIG5vbi1NTE8KJiM0MzsgKiBAY2lndGs6IHdoZXRoZXIgdGhpcyBpcyBhIENJR1RLCiAgKgogICogV2hlbiBHVEsgcmVrZXlpbmcgd2FzIGRvbmUgd2hpbGUgdGhlIHN5c3RlbSB3YXMgc3VzcGVuZGVkLCAoYSkgbmV3CiAgKiBrZXkocykgd2lsbCBiZSBhdmFpbGFibGUuIFRoZXNlIHdpbGwgYmUgbmVlZGVkIGJ5IG1hYzgwMjExIGZvciBwcm9wZXIKQEAgLTYzMDUsNyAmIzQzOzYzMTUsNyBAQCB2b2lkIGllZWU4MDIxMV9zZXRfa2V5X3J4X3NlcShzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXljb25mLAogc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqCiBpZWVlODAyMTFfZ3RrX3Jla2V5X2FkZChzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAogCQkJdTggaWR4LCB1OCAqa2V5X2RhdGEsIHU4IGtleV9sZW4sCi0JCQlpbnQgbGlua19pZCk7CiYjNDM7CQkJaW50IGxpbmtfaWQsIGJvb2wgY2lndGspOwogCiAvKioKICAqIGllZWU4MDIxMV9ndGtfcmVrZXlfbm90aWZ5IC0gbm90aWZ5IHVzZXJzcGFjZSBzdXBwbGljYW50IG9mIHJla2V5aW5nCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvbmw4MDIxMS5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L25sODAyMTEuaAppbmRleCAwMjAzODdkNzY0MTIyLi4zZTZlNTlmYjhlMTdmIDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvbmw4MDIxMS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9ubDgwMjExLmgKQEAgLTMxODUsNiAmIzQzOzMxODUsMTEgQEAgZW51bSBubDgwMjExX2NvbW1hbmRzIHsKICAqCVRoZSBhZ2dyZWdhdGVkIG1lc3NhZ2UgYWx3YXlzIHByZWNlZGVzIHRoZSBwZXItbGluayBtZXNzYWdlcyBmb3IgdGhlCiAgKglzYW1lIHN0YXRpb24gd2l0aGluIGEgZHVtcCBzZXF1ZW5jZS4KICAqCiYjNDM7ICogQE5MODAyMTFfQVRUUl9BU1NPQ19DSVA6IEVuYWJsZSBDb250cm9sIEludGVncml0eSBQcm90b2NvbCBmb3IgdGhlCiYjNDM7ICoJYXNzb2NpYXRpb24KJiM0MzsgKiBATkw4MDIxMV9BVFRSX0NJUF9DQVBBQklMSVRJRVM6IFRoZSBDb250cm9sIEludGVncml0eSBQcm90b2NvbCBmb3IgdGhlCiYjNDM7ICoJc3RhdGlvbi4KJiM0MzsgKgogICogQE5VTV9OTDgwMjExX0FUVFI6IHRvdGFsIG51bWJlciBvZiBubDgwMjExX2F0dHJzIGF2YWlsYWJsZQogICogQE5MODAyMTFfQVRUUl9NQVg6IGhpZ2hlc3QgYXR0cmlidXRlIG51bWJlciBjdXJyZW50bHkgZGVmaW5lZAogICogQF9fTkw4MDIxMV9BVFRSX0FGVEVSX0xBU1Q6IGludGVybmFsIHVzZQpAQCAtMzI4MCw2ICYjNDM7MzI4NSw4IEBAIGVudW0gbmw4MDIxMV9hdHRycyB7CiAKIAlOTDgwMjExX0FUVFJfRlJFUV9GSVhFRCwKIAomIzQzOwlOTDgwMjExX0FUVFJfQVNTT0NfQ0lQLAomIzQzOwlOTDgwMjExX0FUVFJfQ0lQX0NBUEFCSUxJVElFUywKIAogCU5MODAyMTFfQVRUUl9XSVBIWV9SRVRSWV9TSE9SVCwKIAlOTDgwMjExX0FUVFJfV0lQSFlfUkVUUllfTE9ORywKQEAgLTM5MzQsNiAmIzQzOzM5NDEsNyBAQCBlbnVtIG5sODAyMTFfaWZ0eXBlIHsKICAqCXRoYXQgc3VwcG9ydCAlTkw4MDIxMV9GRUFUVVJFX0ZVTExfQVBfQ0xJRU5UX1NUQVRFIHRvIHRyYW5zaXRpb24gYQogICoJcHJldmlvdXNseSBhZGRlZCBzdGF0aW9uIGludG8gYXNzb2NpYXRlZCBzdGF0ZQogICogQE5MODAyMTFfU1RBX0ZMQUdfU1BQX0FNU0RVOiBzdGF0aW9uIHN1cHBvcnRzIFNQUCBBLU1TRFVzCiYjNDM7ICogQE5MODAyMTFfU1RBX0ZMQUdfQ0lQOiBzdGF0aW9uIGhhcyBDb250cm9sIEludGVncml0eSBQcm90b2NvbCAoQ0lQKSBlbmFibGVkCiAgKiBATkw4MDIxMV9TVEFfRkxBR19NQVg6IGhpZ2hlc3Qgc3RhdGlvbiBmbGFnIG51bWJlciBjdXJyZW50bHkgZGVmaW5lZAogICogQF9fTkw4MDIxMV9TVEFfRkxBR19BRlRFUl9MQVNUOiBpbnRlcm5hbCB1c2UKICAqLwpAQCAtMzk0Nyw2ICYjNDM7Mzk1NSw3IEBAIGVudW0gbmw4MDIxMV9zdGFfZmxhZ3MgewogCU5MODAyMTFfU1RBX0ZMQUdfVERMU19QRUVSLAogCU5MODAyMTFfU1RBX0ZMQUdfQVNTT0NJQVRFRCwKIAlOTDgwMjExX1NUQV9GTEFHX1NQUF9BTVNEVSwKJiM0MzsJTkw4MDIxMV9TVEFfRkxBR19DSVAsCiAKIAkvKiBrZWVwIGxhc3QgKi8KIAlfX05MODAyMTFfU1RBX0ZMQUdfQUZURVJfTEFTVCwKQEAgLTU3NzgsMTIgJiM0Mzs1Nzg3LDE2IEBAIGVudW0gbmw4MDIxMV9hdXRoX3R5cGUgewogICogQE5MODAyMTFfS0VZVFlQRV9HUk9VUDogR3JvdXAgKGJyb2FkY2FzdC9tdWx0aWNhc3QpIGtleQogICogQE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRTogUGFpcndpc2UgKHVuaWNhc3QvaW5kaXZpZHVhbCkga2V5CiAgKiBATkw4MDIxMV9LRVlUWVBFX1BFRVJLRVk6IFBlZXJLZXkgKERMUykKJiM0MzsgKiBATkw4MDIxMV9LRVlUWVBFX0NJR1RLOiBDb250cm9sIEludGVncml0eSBHcm91cCBUZW1wb3JhbCBLZXkKJiM0MzsgKglUaGUgY2lwaGVyIGlzIEdNQUMtMjU2IGJ1dCBwYXNzZWQgYXMgR0NNUC0yNTYsCiYjNDM7ICoJc2FtZSBhcyB0aGUgcGFpcndpc2Uga2V5IHdoZW4gdXNlZCBmb3IgQ0lQLgogICogQE5VTV9OTDgwMjExX0tFWVRZUEVTOiBudW1iZXIgb2YgZGVmaW5lZCBrZXkgdHlwZXMKICAqLwogZW51bSBubDgwMjExX2tleV90eXBlIHsKIAlOTDgwMjExX0tFWVRZUEVfR1JPVVAsCiAJTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFLAogCU5MODAyMTFfS0VZVFlQRV9QRUVSS0VZLAomIzQzOwlOTDgwMjExX0tFWVRZUEVfQ0lHVEssCiAKIAlOVU1fTkw4MDIxMV9LRVlUWVBFUwogfTsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9jZmcuYyBiL25ldC9tYWM4MDIxMS9jZmcuYwppbmRleCAwYTkyNDdiZTI2YWZhLi4zYmY4MTYyOWNkZTM0IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvY2ZnLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL2NmZy5jCkBAIC02MTEsMTIgJiM0Mzs2MTEsMTUgQEAgc3RhdGljIGludCBpZWVlODAyMTFfc2V0X3R4KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogfQogCiBzdGF0aWMgaW50IGllZWU4MDIxMV9hZGRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsCi0JCQkgICAgIGludCBsaW5rX2lkLCB1OCBrZXlfaWR4LCBib29sIHBhaXJ3aXNlLAomIzQzOwkJCSAgICAgaW50IGxpbmtfaWQsIHU4IGtleV9pZHgsCiYjNDM7CQkJICAgICBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSwKIAkJCSAgICAgY29uc3QgdTggKm1hY19hZGRyLCBzdHJ1Y3Qga2V5X3BhcmFtcyAqcGFyYW1zKQogewogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX1dERVZfVE9fU1VCX0lGKHdkZXYpOwogCXN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rID0KIAkJaWVlZTgwMjExX2xpbmtfb3JfZGVmbGluayhzZGF0YSwgbGlua19pZCwgZmFsc2UpOwomIzQzOwlib29sIHBhaXJ3aXNlID0gdHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0U7CiYjNDM7CWJvb2wgY2lndGsgPSB0eXBlID09IE5MODAyMTFfS0VZVFlQRV9DSUdUSzsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLSZndDtsb2NhbDsKIAlzdHJ1Y3Qgc3RhX2luZm8gKnN0YSA9IE5VTEw7CiAJc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleTsKQEAgLTY2MCw2ICYjNDM7NjYzLDkgQEAgc3RhdGljIGludCBpZWVlODAyMTFfYWRkX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LAogCQlrZXktJmd0O2NvbmYubGlua19pZCA9IC0xOwogCX0gZWxzZSB7CiAJCWtleS0mZ3Q7Y29uZi5saW5rX2lkID0gbGluay0mZ3Q7bGlua19pZDsKJiM0MzsKJiM0MzsJCWlmIChjaWd0aykKJiM0MzsJCQlrZXktJmd0O2NvbmYuZmxhZ3MgfD0gSUVFRTgwMjExX0tFWV9GTEFHX0NJUDsKIAl9CiAKIAlpZiAocGFyYW1zLSZndDttb2RlID09IE5MODAyMTFfS0VZX05PX1RYKQpAQCAtNzM3LDEwICYjNDM7NzQzLDEzIEBAIHN0YXRpYyBpbnQgaWVlZTgwMjExX2FkZF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwKIAogc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfa2V5ICoKIGllZWU4MDIxMV9sb29rdXBfa2V5KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBpbnQgbGlua19pZCwKLQkJICAgICB1OCBrZXlfaWR4LCBib29sIHBhaXJ3aXNlLCBjb25zdCB1OCAqbWFjX2FkZHIpCiYjNDM7CQkgICAgIHU4IGtleV9pZHgsIGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLAomIzQzOwkJICAgICBjb25zdCB1OCAqbWFjX2FkZHIpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgX19tYXliZV91bnVzZWQgPSBzZGF0YS0mZ3Q7bG9jYWw7CiAJc3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbmsgPSAmYW1wO3NkYXRhLSZndDtkZWZsaW5rOwomIzQzOwlib29sIHBhaXJ3aXNlID0gdHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0U7CiYjNDM7CWJvb2wgY2lndGsgPSB0eXBlID09IE5MODAyMTFfS0VZVFlQRV9DSUdUSzsKIAlzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5OwogCiAJaWYgKGxpbmtfaWQgJmd0Oz0gMCkgewpAQCAtNzcwLDcgJiM0Mzs3NzksMTEgQEAgaWVlZTgwMjExX2xvb2t1cF9rZXkoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGludCBsaW5rX2lkLAogCQkJcmV0dXJuIHdpcGh5X2RlcmVmZXJlbmNlKGxvY2FsLSZndDtody53aXBoeSwKIAkJCQkJCSBzdGEtJmd0O3B0a1trZXlfaWR4XSk7CiAKLQkJaWYgKCFwYWlyd2lzZSAmYW1wOyZhbXA7CiYjNDM7CQlpZiAoY2lndGsgJmFtcDsmYW1wOyBrZXlfaWR4ICZsdDsgTlVNX0NUUkxfS0VZUykKJiM0MzsJCQlyZXR1cm4gd2lwaHlfZGVyZWZlcmVuY2UobG9jYWwtJmd0O2h3LndpcGh5LAomIzQzOwkJCQkJCSBsaW5rX3N0YS0mZ3Q7Y2lndGtba2V5X2lkeF0pOwomIzQzOwomIzQzOwkJaWYgKCFwYWlyd2lzZSAmYW1wOyZhbXA7ICFjaWd0ayAmYW1wOyZhbXA7CiAJCSAgICBrZXlfaWR4ICZsdDsgTlVNX0RFRkFVTFRfS0VZUyAmIzQzOwogCQkJICAgICAgTlVNX0RFRkFVTFRfTUdNVF9LRVlTICYjNDM7CiAJCQkgICAgICBOVU1fREVGQVVMVF9CRUFDT05fS0VZUykKQEAgLTc4Myw2ICYjNDM7Nzk2LDkgQEAgaWVlZTgwMjExX2xvb2t1cF9rZXkoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGludCBsaW5rX2lkLAogCWlmIChwYWlyd2lzZSAmYW1wOyZhbXA7IGtleV9pZHggJmx0OyBOVU1fREVGQVVMVF9LRVlTKQogCQlyZXR1cm4gd2lwaHlfZGVyZWZlcmVuY2UobG9jYWwtJmd0O2h3LndpcGh5LCBzZGF0YS0mZ3Q7a2V5c1trZXlfaWR4XSk7CiAKJiM0MzsJaWYgKGNpZ3RrKQomIzQzOwkJcmV0dXJuIHdpcGh5X2RlcmVmZXJlbmNlKGxvY2FsLSZndDtody53aXBoeSwgbGluay0mZ3Q7Y2lndGtba2V5X2lkeF0pOwomIzQzOwogCWtleSA9IHdpcGh5X2RlcmVmZXJlbmNlKGxvY2FsLSZndDtody53aXBoeSwgbGluay0mZ3Q7Z3RrW2tleV9pZHhdKTsKIAlpZiAoa2V5KQogCQlyZXR1cm4ga2V5OwpAQCAtNzk1LDggJiM0Mzs4MTEsOCBAQCBpZWVlODAyMTFfbG9va3VwX2tleShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgaW50IGxpbmtfaWQsCiB9CiAKIHN0YXRpYyBpbnQgaWVlZTgwMjExX2RlbF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwKLQkJCSAgICAgaW50IGxpbmtfaWQsIHU4IGtleV9pZHgsIGJvb2wgcGFpcndpc2UsCi0JCQkgICAgIGNvbnN0IHU4ICptYWNfYWRkcikKJiM0MzsJCQkgICAgIGludCBsaW5rX2lkLCB1OCBrZXlfaWR4LAomIzQzOwkJCSAgICAgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsIGNvbnN0IHU4ICptYWNfYWRkcikKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9XREVWX1RPX1NVQl9JRih3ZGV2KTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLSZndDtsb2NhbDsKQEAgLTgwNCw3ICYjNDM7ODIwLDcgQEAgc3RhdGljIGludCBpZWVlODAyMTFfZGVsX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LAogCiAJbG9ja2RlcF9hc3NlcnRfd2lwaHkobG9jYWwtJmd0O2h3LndpcGh5KTsKIAotCWtleSA9IGllZWU4MDIxMV9sb29rdXBfa2V5KHNkYXRhLCBsaW5rX2lkLCBrZXlfaWR4LCBwYWlyd2lzZSwgbWFjX2FkZHIpOwomIzQzOwlrZXkgPSBpZWVlODAyMTFfbG9va3VwX2tleShzZGF0YSwgbGlua19pZCwga2V5X2lkeCwgdHlwZSwgbWFjX2FkZHIpOwogCWlmICgha2V5KQogCQlyZXR1cm4gLUVOT0VOVDsKIApAQCAtODE0LDcgJiM0Mzs4MzAsOCBAQCBzdGF0aWMgaW50IGllZWU4MDIxMV9kZWxfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsCiB9CiAKIHN0YXRpYyBpbnQgaWVlZTgwMjExX2dldF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwKLQkJCSAgICAgaW50IGxpbmtfaWQsIHU4IGtleV9pZHgsIGJvb2wgcGFpcndpc2UsCiYjNDM7CQkJICAgICBpbnQgbGlua19pZCwgdTgga2V5X2lkeCwKJiM0MzsJCQkgICAgIGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLAogCQkJICAgICBjb25zdCB1OCAqbWFjX2FkZHIsIHZvaWQgKmNvb2tpZSwKIAkJCSAgICAgdm9pZCAoKmNhbGxiYWNrKSh2b2lkICpjb29raWUsCiAJCQkJCSAgICAgIHN0cnVjdCBrZXlfcGFyYW1zICpwYXJhbXMpKQpAQCAtODMzLDcgJiM0Mzs4NTAsNyBAQCBzdGF0aWMgaW50IGllZWU4MDIxMV9nZXRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsCiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAKLQlrZXkgPSBpZWVlODAyMTFfbG9va3VwX2tleShzZGF0YSwgbGlua19pZCwga2V5X2lkeCwgcGFpcndpc2UsIG1hY19hZGRyKTsKJiM0MzsJa2V5ID0gaWVlZTgwMjExX2xvb2t1cF9rZXkoc2RhdGEsIGxpbmtfaWQsIGtleV9pZHgsIHR5cGUsIG1hY19hZGRyKTsKIAlpZiAoIWtleSkKIAkJZ290byBvdXQ7CiAKQEAgLTIyODksNiAmIzQzOzIzMDYsOCBAQCBzdGF0aWMgaW50IHN0YV9saW5rX2FwcGx5X3BhcmFtZXRlcnMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCiAJY2FzZSBTVEFfTElOS19NT0RFX05FVzoKIAkJaWYgKCFwYXJhbXMtJmd0O2xpbmtfbWFjKQogCQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQlpZiAoc3RhLSZndDtzdGEuY2lwICZhbXA7JmFtcDsgIXBhcmFtcy0mZ3Q7Y2lwX2NhcF9zZXQpCiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiAJCWJyZWFrOwogCWNhc2UgU1RBX0xJTktfTU9ERV9MSU5LX01PRElGWToKIAkJYnJlYWs7CkBAIC0yNDExLDYgJiM0MzsyNDMwLDkgQEAgc3RhdGljIGludCBzdGFfbGlua19hcHBseV9wYXJhbWV0ZXJzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAogCQlpZWVlODAyMTFfczFnX2NhcF90b19zdGFfczFnX2NhcChzZGF0YSwgcGFyYW1zLSZndDtzMWdfY2FwYSwKIAkJCQkJCSBsaW5rX3N0YSk7CiAKJiM0MzsJaWYgKHBhcmFtcy0mZ3Q7Y2lwX2NhcF9zZXQpCiYjNDM7CQlsaW5rX3N0YS0mZ3Q7cHViLSZndDtjaXBfbWljX3BhZGRpbmcgPSBwYXJhbXMtJmd0O2NpcF9jYXA7CiYjNDM7CiAJc3dpdGNoIChzZGF0YS0mZ3Q7dmlmLnR5cGUpIHsKIAljYXNlIE5MODAyMTFfSUZUWVBFX05BTjoKIAljYXNlIE5MODAyMTFfSUZUWVBFX05BTl9EQVRBOgpAQCAtMjU3Myw2ICYjNDM7MjU5NSw5IEBAIHN0YXRpYyBpbnQgc3RhX2FwcGx5X3BhcmFtZXRlcnMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCiAJaWYgKHBhcmFtcy0mZ3Q7ZW1sX2NhcF9wcmVzZW50KQogCQlzdGEtJmd0O3N0YS5lbWxfY2FwID0gcGFyYW1zLSZndDtlbWxfY2FwOwogCiYjNDM7CWlmIChwYXJhbXMtJmd0O3N0YV9mbGFnc19zZXQgJmFtcDsgQklUKE5MODAyMTFfU1RBX0ZMQUdfQ0lQKSkKJiM0MzsJCXN0YS0mZ3Q7c3RhLmNpcCA9IHRydWU7CiYjNDM7CiAJcmV0ID0gc3RhX2xpbmtfYXBwbHlfcGFyYW1ldGVycyhsb2NhbCwgc3RhLCBTVEFfTElOS19NT0RFX1NUQV9NT0RJRlksCiAJCQkJCSZhbXA7cGFyYW1zLSZndDtsaW5rX3N0YV9wYXJhbXMpOwogCWlmIChyZXQpCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaCBiL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oCmluZGV4IGExZWY4OGZlODQ2ZGQuLmZjODVmOGJmOTZlM2EgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oCkBAIC00NzcsNiAmIzQzOzQ3Nyw3IEBAIHN0cnVjdCBpZWVlODAyMTFfbWdkX2Fzc29jX2RhdGEgewogCWJvb2wgY29tZWJhY2s7IC8qIHdoZXRoZXIgdGhlIEFQIGhhcyByZXF1ZXN0ZWQgYXNzb2NpYXRpb24gY29tZWJhY2sgKi8KIAlib29sIHMxZzsKIAlib29sIHNwcF9hbXNkdTsKJiM0MzsJYm9vbCBjaXA7CiAKIAlzOCBhc3NvY19saW5rX2lkOwogCkBAIC0xMTA0LDYgJiM0MzsxMTA1LDcgQEAgc3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgewogCXN0cnVjdCBpZWVlODAyMTFfa2V5IF9fcmN1ICpndGtbTlVNX0RFRkFVTFRfS0VZUyAmIzQzOwogCQkJCQlOVU1fREVGQVVMVF9NR01UX0tFWVMgJiM0MzsKIAkJCQkJTlVNX0RFRkFVTFRfQkVBQ09OX0tFWVNdOwomIzQzOwlzdHJ1Y3QgaWVlZTgwMjExX2tleSBfX3JjdSAqY2lndGtbTlVNX0NUUkxfS0VZU107CiAJc3RydWN0IGllZWU4MDIxMV9rZXkgX19yY3UgKmRlZmF1bHRfbXVsdGljYXN0X2tleTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2tleSBfX3JjdSAqZGVmYXVsdF9tZ210X2tleTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2tleSBfX3JjdSAqZGVmYXVsdF9iZWFjb25fa2V5OwpAQCAtMTg3MCw2ICYjNDM7MTg3Miw3IEBAIHN0cnVjdCBpZWVlODAyXzExX2VsZW1zIHsKIAljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3R0bG1fZWxlbSAqdHRsbVtJRUVFODAyMTFfVFRMTV9NQVhfQ05UXTsKIAljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3Vocl9jYXAgKnVocl9jYXA7CiAJY29uc3Qgc3RydWN0IGllZWU4MDIxMV91aHJfb3BlcmF0aW9uICp1aHJfb3BlcmF0aW9uOwomIzQzOwljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2NpcF9jYXAgKmNpcF9jYXA7CiAKIAkvKiBub3QgdGhlIG9yZGVyIGluIHRoZSBwc2QgdmFsdWVzIGlzIHBlciBlbGVtZW50LCBub3QgcGVyIGNoYW5kZWYgKi8KIAlzdHJ1Y3QgaWVlZTgwMjExX3BhcnNlZF90cGUgdHBlOwpAQCAtMjc3NSw2ICYjNDM7Mjc3OCw4IEBAIGludCBpZWVlODAyMTFfcHV0X3Vocl9jYXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCSAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQpOwogdm9pZCBpZWVlODAyMTFfcHV0X3JlZ19jb25uKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQkJICAgIHN0cnVjdCBza19idWZmICpza2IpOwomIzQzO2ludCBpZWVlODAyMTFfcHV0X2NpcF9jYXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwKJiM0MzsJCQkgIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTsKIAogLyogY2hhbm5lbCBtYW5hZ2VtZW50ICovCiBib29sIGllZWU4MDIxMV9jaGFuZGVmX2h0X29wZXIoY29uc3Qgc3RydWN0IGllZWU4MDIxMV9odF9vcGVyYXRpb24gKmh0X29wZXIsCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEva2V5LmMgYi9uZXQvbWFjODAyMTEva2V5LmMKaW5kZXggZjQ1ZTc5MmFiZWRlNS4uNGM5Nzg4ZWMwYjc0ZiAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2tleS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS9rZXkuYwpAQCAtMjA1LDYgJiM0MzsyMDUsMTAgQEAgc3RhdGljIGludCBpZWVlODAyMTFfa2V5X2VuYWJsZV9od19hY2NlbChzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5KQogCQkJICBzdGEgPyBzdGEtJmd0O3N0YS5hZGRyIDogYmNhc3RfYWRkciwgcmV0KTsKIAogIG91dF91bnN1cHBvcnRlZDoKJiM0MzsJLyogQ29udHJvbCBJbnRlZ3JpdHkgUHJvdG9jb2wgY2FuIG9ubHkgYmUgZG9uZSBpbiBoYXJkd2FyZSAqLwomIzQzOwlpZiAoa2V5LSZndDtjb25mLmZsYWdzICZhbXA7IElFRUU4MDIxMV9LRVlfRkxBR19DSVApCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKIAlzd2l0Y2ggKGtleS0mZ3Q7Y29uZi5jaXBoZXIpIHsKIAljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDQwOgogCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfV0VQMTA0OgpAQCAtNDQwLDExICYjNDM7NDQ0LDEzIEBAIHZvaWQgaWVlZTgwMjExX3NldF9kZWZhdWx0X2JlYWNvbl9rZXkoc3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbmssCiBzdGF0aWMgaW50IGllZWU4MDIxMV9rZXlfcmVwbGFjZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJCQkgc3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbmssCiAJCQkJIHN0cnVjdCBzdGFfaW5mbyAqc3RhLAotCQkJCSBib29sIHBhaXJ3aXNlLAomIzQzOwkJCQkgZW51bSBpZWVlODAyMTFfa2V5X2ZsYWdzIGZsYWdzLAogCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX2tleSAqb2xkLAogCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX2tleSAqbmV3KQogewogCXN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YSA9IHN0YSA/ICZhbXA7c3RhLSZndDtkZWZsaW5rIDogTlVMTDsKJiM0MzsJYm9vbCBwYWlyd2lzZSA9IGZsYWdzICZhbXA7IElFRUU4MDIxMV9LRVlfRkxBR19QQUlSV0lTRTsKJiM0MzsJYm9vbCBjaXAgPSBmbGFncyAmYW1wOyBJRUVFODAyMTFfS0VZX0ZMQUdfQ0lQOwogCWludCBsaW5rX2lkOwogCWludCBpZHg7CiAJaW50IHJldCA9IDA7CkBAIC01MzUsNiAmIzQzOzU0MSw4IEBAIHN0YXRpYyBpbnQgaWVlZTgwMjExX2tleV9yZXBsYWNlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQkJaWYgKG5ldyAmYW1wOyZhbXA7CiAJCQkgICAgIShuZXctJmd0O2NvbmYuZmxhZ3MgJmFtcDsgSUVFRTgwMjExX0tFWV9GTEFHX05PX0FVVE9fVFgpKQogCQkJCV9pZWVlODAyMTFfc2V0X3R4X2tleShuZXcsIHRydWUpOwomIzQzOwkJfSBlbHNlIGlmIChjaXApIHsKJiM0MzsJCQlyY3VfYXNzaWduX3BvaW50ZXIobGlua19zdGEtJmd0O2NpZ3RrW2lkeF0sIG5ldyk7CiAJCX0gZWxzZSB7CiAJCQlyY3VfYXNzaWduX3BvaW50ZXIobGlua19zdGEtJmd0O2d0a1tpZHhdLCBuZXcpOwogCQl9CkBAIC01NjksNiAmIzQzOzU3Nyw4IEBAIHN0YXRpYyBpbnQgaWVlZTgwMjExX2tleV9yZXBsYWNlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCiAJCWlmIChpc193ZXAgfHwgcGFpcndpc2UpCiAJCQlyY3VfYXNzaWduX3BvaW50ZXIoc2RhdGEtJmd0O2tleXNbaWR4XSwgbmV3KTsKJiM0MzsJCWVsc2UgaWYgKGNpcCkKJiM0MzsJCQlyY3VfYXNzaWduX3BvaW50ZXIobGluay0mZ3Q7Y2lndGtbaWR4XSwgbmV3KTsKIAkJZWxzZQogCQkJcmN1X2Fzc2lnbl9wb2ludGVyKGxpbmstJmd0O2d0a1tpZHhdLCBuZXcpOwogCkBAIC04ODMsNiAmIzQzOzg5MywxMCBAQCBpbnQgaWVlZTgwMjExX2tleV9saW5rKHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXksCiAJCQlyZXQgPSAtRU9QTk9UU1VQUDsKIAkJCWdvdG8gb3V0OwogCQl9CiYjNDM7CiYjNDM7CQkvKiBTZXQgQ0lQIGZsYWcgaWYgZW5hYmxlZCBmb3IgdGhlIHN0YXRpb24gKi8KJiM0MzsJCWlmIChzdGEtJmd0O3N0YS5jaXApCiYjNDM7CQkJa2V5LSZndDtjb25mLmZsYWdzIHw9IElFRUU4MDIxMV9LRVlfRkxBR19DSVA7CiAJfSBlbHNlIGlmIChzdGEpIHsKIAkJc3RydWN0IGxpbmtfc3RhX2luZm8gKmxpbmtfc3RhID0gJmFtcDtzdGEtJmd0O2RlZmxpbms7CiAJCWludCBsaW5rX2lkID0ga2V5LSZndDtjb25mLmxpbmtfaWQ7CkBAIC04OTYsMTUgJiM0Mzs5MTAsMjUgQEAgaW50IGllZWU4MDIxMV9rZXlfbGluayhzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5LAogCQkJfQogCQl9CiAKLQkJb2xkX2tleSA9IHdpcGh5X2RlcmVmZXJlbmNlKHNkYXRhLSZndDtsb2NhbC0mZ3Q7aHcud2lwaHksCi0JCQkJCSAgICBsaW5rX3N0YS0mZ3Q7Z3RrW2lkeF0pOwotCX0gZWxzZSB7Ci0JCWlmIChpZHggJmx0OyBOVU1fREVGQVVMVF9LRVlTKQomIzQzOwkJaWYgKGtleS0mZ3Q7Y29uZi5mbGFncyAmYW1wOyBJRUVFODAyMTFfS0VZX0ZMQUdfQ0lQKQogCQkJb2xkX2tleSA9IHdpcGh5X2RlcmVmZXJlbmNlKHNkYXRhLSZndDtsb2NhbC0mZ3Q7aHcud2lwaHksCi0JCQkJCQkgICAgc2RhdGEtJmd0O2tleXNbaWR4XSk7Ci0JCWlmICghb2xkX2tleSkKJiM0MzsJCQkJCQkgICAgbGlua19zdGEtJmd0O2NpZ3RrW2lkeF0pOwomIzQzOwkJZWxzZQogCQkJb2xkX2tleSA9IHdpcGh5X2RlcmVmZXJlbmNlKHNkYXRhLSZndDtsb2NhbC0mZ3Q7aHcud2lwaHksCi0JCQkJCQkgICAgbGluay0mZ3Q7Z3RrW2lkeF0pOwomIzQzOwkJCQkJCSAgICBsaW5rX3N0YS0mZ3Q7Z3RrW2lkeF0pOwomIzQzOwl9IGVsc2UgewomIzQzOwkJaWYgKGtleS0mZ3Q7Y29uZi5mbGFncyAmYW1wOyBJRUVFODAyMTFfS0VZX0ZMQUdfQ0lQKSB7CiYjNDM7CQkJb2xkX2tleSA9IHdpcGh5X2RlcmVmZXJlbmNlKHNkYXRhLSZndDtsb2NhbC0mZ3Q7aHcud2lwaHksCiYjNDM7CQkJCQkJICAgIGxpbmstJmd0O2NpZ3RrW2lkeF0pOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlpZiAoaWR4ICZsdDsgTlVNX0RFRkFVTFRfS0VZUykKJiM0MzsJCQkJb2xkX2tleSA9IHdpcGh5X2RlcmVmZXJlbmNlKHNkYXRhLSZndDtsb2NhbC0mZ3Q7aHcud2lwaHksCiYjNDM7CQkJCQkJCSAgICBzZGF0YS0mZ3Q7a2V5c1tpZHhdKTsKJiM0MzsKJiM0MzsJCQlpZiAoIW9sZF9rZXkpCiYjNDM7CQkJCW9sZF9rZXkgPSB3aXBoeV9kZXJlZmVyZW5jZShzZGF0YS0mZ3Q7bG9jYWwtJmd0O2h3LndpcGh5LAomIzQzOwkJCQkJCQkgICAgbGluay0mZ3Q7Z3RrW2lkeF0pOwomIzQzOwkJfQogCX0KIAogCS8qIE5vbi1wYWlyd2lzZSBrZXlzIG11c3QgYWxzbyBub3Qgc3dpdGNoIHRoZSBjaXBoZXIgb24gcmVrZXkgKi8KQEAgLTkzOCw5ICYjNDM7OTYyLDE3IEBAIGludCBpZWVlODAyMTFfa2V5X2xpbmsoc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSwKIAlpZiAoc3RhICZhbXA7JmFtcDsgc3RhLSZndDtzdGEuc3BwX2Ftc2R1KQogCQlrZXktJmd0O2NvbmYuZmxhZ3MgfD0gSUVFRTgwMjExX0tFWV9GTEFHX1NQUF9BTVNEVTsKIAomIzQzOwkvKiBBIENJUCByZWxhdGVkIGtleSBtdXN0IGJlIEdDTVAtMjU2IChyZWFsbHkgR01BQy0yNTYpICovCiYjNDM7CWlmICgoa2V5LSZndDtjb25mLmZsYWdzICZhbXA7IElFRUU4MDIxMV9LRVlfRkxBR19DSVApICZhbXA7JmFtcDsKJiM0MzsJICAgIGtleS0mZ3Q7Y29uZi5jaXBoZXIgIT0gV0xBTl9DSVBIRVJfU1VJVEVfR0NNUF8yNTYpIHsKJiM0MzsJCXJldCA9IC1FSU5WQUw7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwogCWluY3JlbWVudF90YWlscm9vbV9uZWVkX2NvdW50KHNkYXRhKTsKIAotCXJldCA9IGllZWU4MDIxMV9rZXlfcmVwbGFjZShzZGF0YSwgbGluaywgc3RhLCBwYWlyd2lzZSwgb2xkX2tleSwga2V5KTsKJiM0MzsJcmV0ID0gaWVlZTgwMjExX2tleV9yZXBsYWNlKHNkYXRhLCBsaW5rLCBzdGEsIGtleS0mZ3Q7Y29uZi5mbGFncywKJiM0MzsJCQkJICAgIG9sZF9rZXksIGtleSk7CiAKIAlpZiAoIXJldCkgewogCQlpZWVlODAyMTFfZGVidWdmc19rZXlfYWRkKGtleSk7CkBAIC05NjYsOCAmIzQzOzk5OCw3IEBAIHZvaWQgaWVlZTgwMjExX2tleV9mcmVlKHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXksIGJvb2wgZGVsYXlfdGFpbHJvb20pCiAJICovCiAJaWYgKGtleS0mZ3Q7c2RhdGEpCiAJCWllZWU4MDIxMV9rZXlfcmVwbGFjZShrZXktJmd0O3NkYXRhLCBOVUxMLCBrZXktJmd0O3N0YSwKLQkJCQkgICAgICBrZXktJmd0O2NvbmYuZmxhZ3MgJmFtcDsgSUVFRTgwMjExX0tFWV9GTEFHX1BBSVJXSVNFLAotCQkJCSAgICAgIGtleSwgTlVMTCk7CiYjNDM7CQkJCSAgICAgIGtleS0mZ3Q7Y29uZi5mbGFncywga2V5LCBOVUxMKTsKIAlpZWVlODAyMTFfa2V5X2Rlc3Ryb3koa2V5LCBkZWxheV90YWlscm9vbSk7CiB9CiAKQEAgLTEwOTgsOCAmIzQzOzExMjksNyBAQCBzdGF0aWMgdm9pZCBpZWVlODAyMTFfZnJlZV9rZXlzX2lmYWNlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGtleSwgdG1wLCAmYW1wO3NkYXRhLSZndDtrZXlfbGlzdCwgbGlzdCkgewogCQlpZWVlODAyMTFfa2V5X3JlcGxhY2Uoa2V5LSZndDtzZGF0YSwgTlVMTCwga2V5LSZndDtzdGEsCi0JCQkJICAgICAga2V5LSZndDtjb25mLmZsYWdzICZhbXA7IElFRUU4MDIxMV9LRVlfRkxBR19QQUlSV0lTRSwKLQkJCQkgICAgICBrZXksIE5VTEwpOwomIzQzOwkJCQkgICAgICBrZXktJmd0O2NvbmYuZmxhZ3MsIGtleSwgTlVMTCk7CiAJCWxpc3RfYWRkX3RhaWwoJmFtcDtrZXktJmd0O2xpc3QsIGtleXMpOwogCX0KIApAQCAtMTExOSw4ICYjNDM7MTE0OSw3IEBAIHZvaWQgaWVlZTgwMjExX3JlbW92ZV9saW5rX2tleXMoc3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbmssCiAJCWlmIChrZXktJmd0O2NvbmYubGlua19pZCAhPSBsaW5rLSZndDtsaW5rX2lkKQogCQkJY29udGludWU7CiAJCWllZWU4MDIxMV9rZXlfcmVwbGFjZShrZXktJmd0O3NkYXRhLCBsaW5rLCBrZXktJmd0O3N0YSwKLQkJCQkgICAgICBrZXktJmd0O2NvbmYuZmxhZ3MgJmFtcDsgSUVFRTgwMjExX0tFWV9GTEFHX1BBSVJXSVNFLAotCQkJCSAgICAgIGtleSwgTlVMTCk7CiYjNDM7CQkJCSAgICAgIGtleS0mZ3Q7Y29uZi5mbGFncywga2V5LCBOVUxMKTsKIAkJbGlzdF9hZGRfdGFpbCgmYW1wO2tleS0mZ3Q7bGlzdCwga2V5cyk7CiAJfQogfQpAQCAtMTE5Niw4ICYjNDM7MTIyNSwxNyBAQCB2b2lkIGllZWU4MDIxMV9mcmVlX3N0YV9rZXlzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAogCQlpZiAoIWtleSkKIAkJCWNvbnRpbnVlOwogCQlpZWVlODAyMTFfa2V5X3JlcGxhY2Uoa2V5LSZndDtzZGF0YSwgTlVMTCwga2V5LSZndDtzdGEsCi0JCQkJICAgICAga2V5LSZndDtjb25mLmZsYWdzICZhbXA7IElFRUU4MDIxMV9LRVlfRkxBR19QQUlSV0lTRSwKLQkJCQkgICAgICBrZXksIE5VTEwpOwomIzQzOwkJCQkgICAgICBrZXktJmd0O2NvbmYuZmxhZ3MsIGtleSwgTlVMTCk7CiYjNDM7CQlfX2llZWU4MDIxMV9rZXlfZGVzdHJveShrZXksIGtleS0mZ3Q7c2RhdGEtJmd0O3ZpZi50eXBlID09CiYjNDM7CQkJCQlOTDgwMjExX0lGVFlQRV9TVEFUSU9OKTsKJiM0MzsJfQomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRShzdGEtJmd0O2RlZmxpbmsuY2lndGspOyBpJiM0MzsmIzQzOykgewomIzQzOwkJa2V5ID0gd2lwaHlfZGVyZWZlcmVuY2UobG9jYWwtJmd0O2h3LndpcGh5LCBzdGEtJmd0O2RlZmxpbmsuY2lndGtbaV0pOwomIzQzOwkJaWYgKCFrZXkpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CQlpZWVlODAyMTFfa2V5X3JlcGxhY2Uoa2V5LSZndDtzZGF0YSwgTlVMTCwga2V5LSZndDtzdGEsCiYjNDM7CQkJCSAgICAgIGtleS0mZ3Q7Y29uZi5mbGFncywga2V5LCBOVUxMKTsKIAkJX19pZWVlODAyMTFfa2V5X2Rlc3Ryb3koa2V5LCBrZXktJmd0O3NkYXRhLSZndDt2aWYudHlwZSA9PQogCQkJCQlOTDgwMjExX0lGVFlQRV9TVEFUSU9OKTsKIAl9CkBAIC0xMjA3LDggJiM0MzsxMjQ1LDcgQEAgdm9pZCBpZWVlODAyMTFfZnJlZV9zdGFfa2V5cyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKIAkJaWYgKCFrZXkpCiAJCQljb250aW51ZTsKIAkJaWVlZTgwMjExX2tleV9yZXBsYWNlKGtleS0mZ3Q7c2RhdGEsIE5VTEwsIGtleS0mZ3Q7c3RhLAotCQkJCSAgICAgIGtleS0mZ3Q7Y29uZi5mbGFncyAmYW1wOyBJRUVFODAyMTFfS0VZX0ZMQUdfUEFJUldJU0UsCi0JCQkJICAgICAga2V5LCBOVUxMKTsKJiM0MzsJCQkJICAgICAga2V5LSZndDtjb25mLmZsYWdzLCBrZXksIE5VTEwpOwogCQlfX2llZWU4MDIxMV9rZXlfZGVzdHJveShrZXksIGtleS0mZ3Q7c2RhdGEtJmd0O3ZpZi50eXBlID09CiAJCQkJCU5MODAyMTFfSUZUWVBFX1NUQVRJT04pOwogCX0KQEAgLTEzNjYsNyAmIzQzOzE0MDMsNyBAQCBFWFBPUlRfU1lNQk9MX0dQTChpZWVlODAyMTFfc2V0X2tleV9yeF9zZXEpOwogc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqCiBpZWVlODAyMTFfZ3RrX3Jla2V5X2FkZChzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAogCQkJdTggaWR4LCB1OCAqa2V5X2RhdGEsIHU4IGtleV9sZW4sCi0JCQlpbnQgbGlua19pZCkKJiM0MzsJCQlpbnQgbGlua19pZCwgYm9vbCBjaWd0aykKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IHZpZl90b19zZGF0YSh2aWYpOwogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtJmd0O2xvY2FsOwpAQCAtMTM5MCwxMCAmIzQzOzE0MjcsMjAgQEAgaWVlZTgwMjExX2d0a19yZWtleV9hZGQoc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKIAkJICAgIE5VTV9ERUZBVUxUX0JFQUNPTl9LRVlTKSkKIAkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiAKLQlwcmV2X2tleSA9IHdpcGh5X2RlcmVmZXJlbmNlKGxvY2FsLSZndDtody53aXBoeSwKLQkJCQkgICAgIGxpbmtfZGF0YS0mZ3Q7Z3RrW2lkeF0pOwomIzQzOwlpZiAoV0FSTl9PTihjaWd0ayAmYW1wOyZhbXA7IGlkeCAmZ3Q7PSBOVU1fQ1RSTF9LRVlTKSkKJiM0MzsJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwomIzQzOwomIzQzOwlpZiAoY2lndGspCiYjNDM7CQlwcmV2X2tleSA9IHdpcGh5X2RlcmVmZXJlbmNlKGxvY2FsLSZndDtody53aXBoeSwKJiM0MzsJCQkJCSAgICAgbGlua19kYXRhLSZndDtjaWd0a1tpZHhdKTsKJiM0MzsJZWxzZQomIzQzOwkJcHJldl9rZXkgPSB3aXBoeV9kZXJlZmVyZW5jZShsb2NhbC0mZ3Q7aHcud2lwaHksCiYjNDM7CQkJCQkgICAgIGxpbmtfZGF0YS0mZ3Q7Z3RrW2lkeF0pOwogCWlmICghcHJldl9rZXkpIHsKLQkJaWYgKGlkeCAmbHQ7IE5VTV9ERUZBVUxUX0tFWVMpIHsKJiM0MzsJCWlmIChjaWd0aykgewomIzQzOwkJCXByZXZfa2V5ID0gd2lwaHlfZGVyZWZlcmVuY2UobG9jYWwtJmd0O2h3LndpcGh5LAomIzQzOwkJCQkJCSAgICAgbGlua19kYXRhLSZndDtjaWd0a1tpZHggXiAxXSk7CiYjNDM7CQl9IGVsc2UgaWYgKGlkeCAmbHQ7IE5VTV9ERUZBVUxUX0tFWVMpIHsKIAkJCWZvciAoaW50IGkgPSAwOyBpICZsdDsgTlVNX0RFRkFVTFRfS0VZUzsgaSYjNDM7JiM0MzspIHsKIAkJCQlpZiAoaSA9PSBpZHgpCiAJCQkJCWNvbnRpbnVlOwpAQCAtMTQyNCw2ICYjNDM7MTQ3MSw5IEBAIGllZWU4MDIxMV9ndGtfcmVrZXlfYWRkKHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCiAJaWYgKHNkYXRhLSZndDt1Lm1nZC5tZnAgIT0gSUVFRTgwMjExX01GUF9ESVNBQkxFRCkKIAkJa2V5LSZndDtjb25mLmZsYWdzIHw9IElFRUU4MDIxMV9LRVlfRkxBR19SWF9NR01UOwogCiYjNDM7CWlmIChwcmV2X2tleS0mZ3Q7Y29uZi5mbGFncyAmYW1wOyBJRUVFODAyMTFfS0VZX0ZMQUdfQ0lQKQomIzQzOwkJa2V5LSZndDtjb25mLmZsYWdzIHw9IElFRUU4MDIxMV9LRVlfRkxBR19DSVA7CiYjNDM7CiAJa2V5LSZndDtjb25mLmxpbmtfaWQgPSBsaW5rX2RhdGEtJmd0O2xpbmtfaWQ7CiAKIAllcnIgPSBpZWVlODAyMTFfa2V5X2xpbmsoa2V5LCBsaW5rX2RhdGEsIE5VTEwpOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2tleS5oIGIvbmV0L21hYzgwMjExL2tleS5oCmluZGV4IDgyNmU0ZTkzODdjNTUuLmM4NTk5MjQ5M2FmZDEgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9rZXkuaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEva2V5LmgKQEAgLTIsNyAmIzQzOzIsNyBAQAogLyoKICAqIENvcHlyaWdodCAyMDAyLTIwMDQsIEluc3RhbnQ4MDIgTmV0d29ya3MsIEluYy4KICAqIENvcHlyaWdodCAyMDA1LCBEZXZpY2VzY2FwZSBTb2Z0d2FyZSwgSW5jLgotICogQ29weXJpZ2h0IChDKSAyMDE5LCAyMDIyLTIwMjMgSW50ZWwgQ29ycG9yYXRpb24KJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMTksIDIwMjItMjAyMywgMjAyNiBJbnRlbCBDb3Jwb3JhdGlvbgogICovCiAKICNpZm5kZWYgSUVFRTgwMjExX0tFWV9ICkBAIC0xOSw2ICYjNDM7MTksNyBAQAogI2RlZmluZSBOVU1fREVGQVVMVF9LRVlTIDQKICNkZWZpbmUgTlVNX0RFRkFVTFRfTUdNVF9LRVlTIDIKICNkZWZpbmUgTlVNX0RFRkFVTFRfQkVBQ09OX0tFWVMgMgomIzQzOyNkZWZpbmUgTlVNX0NUUkxfS0VZUyAyCiAjZGVmaW5lIElOVkFMSURfUFRLX0tFWUlEWCAyIC8qIEtleWlkeCBhbHdheXMgcG9pbnRpbmcgdG8gYSBOVUxMIGtleSBmb3IgUFRLICovCiAKIHN0cnVjdCBpZWVlODAyMTFfbG9jYWw7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvbWxtZS5jIGIvbmV0L21hYzgwMjExL21sbWUuYwppbmRleCBmNTExNjdmMGZjNDZkLi4zNGQ3MTNjOWE2OTE0IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvbWxtZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS9tbG1lLmMKQEAgLTIzMzcsNiAmIzQzOzIzMzcsMTAgQEAgaWVlZTgwMjExX2FkZF9saW5rX2VsZW1zKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQlpZWVlODAyMTFfcHV0X2VodF9jYXAoc2tiLCBzZGF0YSwgc2JhbmQsCiAJCQkJICAgICAgJmFtcDthc3NvY19kYXRhLSZndDtsaW5rW2xpbmtfaWRdLmNvbm4pOwogCiYjNDM7CS8qIEluc2VydCBDSVAgb25seSBvbiB0aGUgYXNzb2MgbGluayAoaXQgd2lsbCBiZSBpbmhlcml0ZWQpICovCiYjNDM7CWlmIChsaW5rX2lkID09IGFzc29jX2RhdGEtJmd0O2Fzc29jX2xpbmtfaWQgJmFtcDsmYW1wOyBhc3NvY19kYXRhLSZndDtjaXApCiYjNDM7CQlpZWVlODAyMTFfcHV0X2NpcF9jYXAoc2tiLCBzZGF0YSk7CiYjNDM7CiAJaWYgKGFzc29jX2RhdGEtJmd0O2xpbmtbbGlua19pZF0uY29ubi5tb2RlICZndDs9IElFRUU4MDIxMV9DT05OX01PREVfVUhSKQogCQlpZWVlODAyMTFfcHV0X3Vocl9jYXAoc2tiLCBzZGF0YSwgc2JhbmQpOwogCkBAIC0yNjEzLDcgJiM0MzsyNjE3LDggQEAgc3RhdGljIGludCBpZWVlODAyMTFfc2VuZF9hc3NvYyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKIAkgICAgICAgYXNzb2NfZGF0YS0mZ3Q7aWVfbGVuICYjNDM7IC8qIGV4dHJhIElFcyAqLwogCSAgICAgICAoYXNzb2NfZGF0YS0mZ3Q7Zmlsc19rZWtfbGVuID8gMTYgLyogQUVTLVNJViAqLyA6IDApICYjNDM7CiAJICAgICAgIDkgLyogV01NICovICYjNDM7Ci0JICAgICAgIDQgLyogcmVndWxhdG9yeSBjb25uZWN0aXZpdHksIGlmIDYgR0h6IGlzIHN1cHBvcnRlZCAqLzsKJiM0MzsJICAgICAgIDQgLyogcmVndWxhdG9yeSBjb25uZWN0aXZpdHksIGlmIDYgR0h6IGlzIHN1cHBvcnRlZCAqLyAmIzQzOwomIzQzOwkgICAgICAgKGFzc29jX2RhdGEtJmd0O2NpcCA/IDQgLyogQ0lQIGNhcGFiaWxpdGllcyAqLyA6IDApOwogCiAJZm9yIChsaW5rX2lkID0gMDsgbGlua19pZCAmbHQ7IElFRUU4MDIxMV9NTERfTUFYX05VTV9MSU5LUzsgbGlua19pZCYjNDM7JiM0MzspIHsKIAkJc3RydWN0IGNmZzgwMjExX2JzcyAqY2JzcyA9IGFzc29jX2RhdGEtJmd0O2xpbmtbbGlua19pZF0uYnNzOwpAQCAtNjI3NCw2ICYjNDM7NjI3OSwxOSBAQCBzdGF0aWMgYm9vbCBpZWVlODAyMTFfYXNzb2NfY29uZmlnX2xpbmsoc3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbmssCiAJCS8qIFRPRE86IE9QRU46IHdoYXQgaGFwcGVucyBpZiBCU1MgY29sb3IgZGlzYWJsZSBpcyBzZXQ/ICovCiAJfQogCiYjNDM7CWlmIChhc3NvY19kYXRhLSZndDtjaXApIHsKJiM0MzsJCWlmIChlbGVtcy0mZ3Q7Y2lwX2NhcCkgewomIzQzOwkJCWxpbmtfc3RhLSZndDtwdWItJmd0O2NpcF9taWNfcGFkZGluZyA9CiYjNDM7CQkJCXU4X2dldF9iaXRzKGVsZW1zLSZndDtjaXBfY2FwLSZndDt2LAomIzQzOwkJCQkJICAgIFdMQU5fQ0lQX0NBUEFfTUlDX1BBRERJTkcpOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlzZGF0YV9pbmZvKHNkYXRhLAomIzQzOwkJCQkgICAmIzM0O0NJUCBDYXBhYmlsaXRpZXMgbm90IGluY2x1ZGVkIGluIGFzc29jaWF0aW9uIHJlc3BvbnNlXG4mIzM0Oyk7CiYjNDM7CQkJcmV0ID0gZmFsc2U7CiYjNDM7CQkJZ290byBvdXQ7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKIAlpZiAoY2Jzcy0mZ3Q7dHJhbnNtaXR0ZWRfYnNzKSB7CiAJCWJzc19jb25mLSZndDtub250cmFuc21pdHRlZCA9IHRydWU7CiAJCWV0aGVyX2FkZHJfY29weShic3NfY29uZi0mZ3Q7dHJhbnNtaXR0ZXJfYnNzaWQsCkBAIC03MDAwLDYgJiM0Mzs3MDE4LDcgQEAgc3RhdGljIGJvb2wgaWVlZTgwMjExX2Fzc29jX3N1Y2Nlc3Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCWdvdG8gb3V0X2VycjsKIAogCXN0YS0mZ3Q7c3RhLnNwcF9hbXNkdSA9IGFzc29jX2RhdGEtJmd0O3NwcF9hbXNkdTsKJiM0MzsJc3RhLSZndDtzdGEuY2lwID0gYXNzb2NfZGF0YS0mZ3Q7Y2lwOwogCiAJaWYgKGllZWU4MDIxMV92aWZfaXNfbWxkKCZhbXA7c2RhdGEtJmd0O3ZpZikpIHsKIAkJaWYgKCFlbGVtcy0mZ3Q7bWxfYmFzaWMpCkBAIC0xMDUzOCw2ICYjNDM7MTA1NTcsNyBAQCBpbnQgaWVlZTgwMjExX21nZF9hc3NvYyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAl9CiAKIAlhc3NvY19kYXRhLSZndDtzcHBfYW1zZHUgPSByZXEtJmd0O2ZsYWdzICZhbXA7IEFTU09DX1JFUV9TUFBfQU1TRFU7CiYjNDM7CWFzc29jX2RhdGEtJmd0O2NpcCA9IHJlcS0mZ3Q7ZmxhZ3MgJmFtcDsgQVNTT0NfUkVRX0NJUDsKIAogCWlmIChpZm1nZC0mZ3Q7YXV0aF9kYXRhICZhbXA7JmFtcDsgIWlmbWdkLSZndDthdXRoX2RhdGEtJmd0O2RvbmUpIHsKIAkJZXJyID0gLUVCVVNZOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3BhcnNlLmMgYi9uZXQvbWFjODAyMTEvcGFyc2UuYwppbmRleCBjYjJiZTE2N2NkZTc5Li4zYjY2Y2E3ZDdhNWMyIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvcGFyc2UuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvcGFyc2UuYwpAQCAtMjA1LDYgJiM0MzsyMDUsMTAgQEAgaWVlZTgwMjExX3BhcnNlX2V4dGVuc2lvbl9lbGVtZW50KHUzMiAqY3JjLAogCQkJZWxlbXMtJmd0O3R0bG1fbnVtJiM0MzsmIzQzOzsKIAkJfQogCQlicmVhazsKJiM0MzsJY2FzZSBXTEFOX0VJRF9FWFRfQ0lQX0NBUEE6CiYjNDM7CQlpZiAobGVuICZndDs9IHNpemVvZigqZWxlbXMtJmd0O2NpcF9jYXApKQomIzQzOwkJCWVsZW1zLSZndDtjaXBfY2FwID0gZGF0YTsKJiM0MzsJCWJyZWFrOwogCWNhc2UgV0xBTl9FSURfRVhUX1VIUl9PUEVSOgogCQlpZiAocGFyYW1zLSZndDttb2RlICZsdDsgSUVFRTgwMjExX0NPTk5fTU9ERV9VSFIpCiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9zdGFfaW5mby5oIGIvbmV0L21hYzgwMjExL3N0YV9pbmZvLmgKaW5kZXggZWUwZDMyODc3YzViNC4uZjQwOWY2YTNhZmExZiAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3N0YV9pbmZvLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL3N0YV9pbmZvLmgKQEAgLTQ4NSw2ICYjNDM7NDg1LDcgQEAgc3RydWN0IGllZWU4MDIxMV9mcmFnbWVudF9jYWNoZSB7CiAgKiBAbGlua19oYXNoX25vZGU6IGhhc2ggbm9kZSBmb3Igcmhhc2h0YWJsZQogICogQHN0YTogUG9pbnRzIHRvIHRoZSBTVEEgaW5mbwogICogQGd0azogZ3JvdXAga2V5cyBuZWdvdGlhdGVkIHdpdGggdGhpcyBzdGF0aW9uLCBpZiBhbnkKJiM0MzsgKiBAY2lndGs6IGNvbnRyb2wgaW50ZWdyaXR5IGdyb3VwIGtleXMgbmVnb3RpYXRlZCB3aXRoIHRoaXMgc3RhdGlvbiwgaWYgYW55CiAgKiBAdHhfc3RhdHM6IFRYIHN0YXRpc3RpY3MKICAqIEB0eF9zdGF0cy5wYWNrZXRzOiAjIG9mIHBhY2tldHMgdHJhbnNtaXR0ZWQKICAqIEB0eF9zdGF0cy5ieXRlczogIyBvZiBieXRlcyBpbiBhbGwgcGFja2V0cyB0cmFuc21pdHRlZApAQCAtNTM1LDYgJiM0Mzs1MzYsNyBAQCBzdHJ1Y3QgbGlua19zdGFfaW5mbyB7CiAJc3RydWN0IGllZWU4MDIxMV9rZXkgX19yY3UgKmd0a1tOVU1fREVGQVVMVF9LRVlTICYjNDM7CiAJCQkJCU5VTV9ERUZBVUxUX01HTVRfS0VZUyAmIzQzOwogCQkJCQlOVU1fREVGQVVMVF9CRUFDT05fS0VZU107CiYjNDM7CXN0cnVjdCBpZWVlODAyMTFfa2V5IF9fcmN1ICpjaWd0a1tOVU1fQ1RSTF9LRVlTXTsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N0YV9yeF9zdGF0cyBfX3BlcmNwdSAqcGNwdV9yeF9zdGF0czsKIAogCS8qIFVwZGF0ZWQgZnJvbSBSWCBwYXRoIG9ubHksIG5vIGxvY2tpbmcgcmVxdWlyZW1lbnRzICovCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvdXRpbC5jIGIvbmV0L21hYzgwMjExL3V0aWwuYwppbmRleCBhOTYwNzhhNmJmYTI5Li44MzAzZjYyNGI3ZjYyIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvdXRpbC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS91dGlsLmMKQEAgLTQ2ODAsNiAmIzQzOzQ2ODAsMjUgQEAgaW50IGllZWU4MDIxMV9wdXRfdWhyX2NhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCXJldHVybiAwOwogfQogCiYjNDM7aW50IGllZWU4MDIxMV9wdXRfY2lwX2NhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAomIzQzOwkJCSAgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3Qgd2lwaHlfaWZ0eXBlX2V4dF9jYXBhYiAqaWZ0X2V4dF9jYXBhID0KJiM0MzsJCWNmZzgwMjExX2dldF9pZnR5cGVfZXh0X2NhcGEoc2RhdGEtJmd0O2xvY2FsLSZndDtody53aXBoeSwKJiM0MzsJCQkJCSAgICAgaWVlZTgwMjExX3ZpZl90eXBlX3AycCgmYW1wO3NkYXRhLSZndDt2aWYpKTsKJiM0MzsJdTggY2lwX2NhcGFiaWxpdGllcyA9IGlmdF9leHRfY2FwYSA/IGlmdF9leHRfY2FwYS0mZ3Q7Y2lwX2NhcGFiaWxpdGllcyA6IDA7CiYjNDM7CiYjNDM7CWlmIChza2JfdGFpbHJvb20oc2tiKSAmbHQ7IDQpCiYjNDM7CQlyZXR1cm4gLUVOT0JVRlM7CiYjNDM7CiYjNDM7CXNrYl9wdXRfdTgoc2tiLCBXTEFOX0VJRF9FWFRFTlNJT04pOwomIzQzOwlza2JfcHV0X3U4KHNrYiwgMik7CiYjNDM7CXNrYl9wdXRfdTgoc2tiLCBXTEFOX0VJRF9FWFRfQ0lQX0NBUEEpOwomIzQzOwlza2JfcHV0X3U4KHNrYiwgY2lwX2NhcGFiaWxpdGllcyk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIGNvbnN0IGNoYXIgKmllZWU4MDIxMV9jb25uX21vZGVfc3RyKGVudW0gaWVlZTgwMjExX2Nvbm5fbW9kZSBtb2RlKQogewogCXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgbW9kZXNbXSA9IHsKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9jb3JlLmggYi9uZXQvd2lyZWxlc3MvY29yZS5oCmluZGV4IDE1ZDlmN2ViNThiNGQuLjNiOTBhYThjYzZhY2YgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9jb3JlLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3dpcmVsZXNzL2NvcmUuaApAQCAtNDQzLDEzICYjNDM7NDQzLDE2IEBAIHZvaWQgY2ZnODAyMTFfc21lX2FiYW5kb25fYXNzb2Moc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldik7CiAKIC8qIGludGVybmFsIGhlbHBlcnMgKi8KIGJvb2wgY2ZnODAyMTFfc3VwcG9ydGVkX2NpcGhlcl9zdWl0ZShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCB1MzIgY2lwaGVyKTsKJiM0Mztib29sIGNmZzgwMjExX2NpZ3RrX3N1cHBvcnRlZChzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LAomIzQzOwkJCSAgICAgIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pOwogYm9vbCBjZmc4MDIxMV92YWxpZF9rZXlfaWR4KHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsCi0JCQkgICAgaW50IGtleV9pZHgsIGJvb2wgcGFpcndpc2UsCiYjNDM7CQkJICAgIGludCBrZXlfaWR4LCBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSwKIAkJCSAgICBjb25zdCB1OCAqbWFjX2FkZHIpOwogaW50IGNmZzgwMjExX3ZhbGlkYXRlX2tleV9zZXR0aW5ncyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCiAJCQkJICAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwKIAkJCQkgICBzdHJ1Y3Qga2V5X3BhcmFtcyAqcGFyYW1zLCBpbnQga2V5X2lkeCwKLQkJCQkgICBib29sIHBhaXJ3aXNlLCBjb25zdCB1OCAqbWFjX2FkZHIpOwomIzQzOwkJCQkgICBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSwKJiM0MzsJCQkJICAgY29uc3QgdTggKm1hY19hZGRyKTsKIHZvaWQgX19jZmc4MDIxMV9zY2FuX2RvbmUoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcGh5X3dvcmsgKndrKTsKIHZvaWQgX19fY2ZnODAyMTFfc2Nhbl9kb25lKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKIAkJCSAgIGJvb2wgc2VuZF9tZXNzYWdlKTsKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9pYnNzLmMgYi9uZXQvd2lyZWxlc3MvaWJzcy5jCmluZGV4IGIxZDc0OGJkYjUwNGUuLjZhZTU2MWVkN2YzN2YgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9pYnNzLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3dpcmVsZXNzL2lic3MuYwpAQCAtMTcyLDcgJiM0MzsxNzIsOCBAQCB2b2lkIGNmZzgwMjExX2NsZWFyX2lic3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBub3dleHQpCiAJICovCiAJaWYgKHJkZXYtJmd0O29wcy0mZ3Q7ZGVsX2tleSkKIAkJZm9yIChpID0gMDsgaSAmbHQ7IDY7IGkmIzQzOyYjNDM7KQotCQkJcmRldl9kZWxfa2V5KHJkZXYsIHdkZXYsIC0xLCBpLCBmYWxzZSwgTlVMTCk7CiYjNDM7CQkJcmRldl9kZWxfa2V5KHJkZXYsIHdkZXYsIC0xLCBpLCBOTDgwMjExX0tFWVRZUEVfR1JPVVAsCiYjNDM7CQkJCSAgICAgTlVMTCk7CiAKIAlpZiAod2Rldi0mZ3Q7dS5pYnNzLmN1cnJlbnRfYnNzKSB7CiAJCWNmZzgwMjExX3VuaG9sZF9ic3Mod2Rldi0mZ3Q7dS5pYnNzLmN1cnJlbnRfYnNzKTsKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9ubDgwMjExLmMgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jCmluZGV4IDhhZGJlZjVmMDQ0MjUuLjU2NjQ4ZjdkOWM3ZmUgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9ubDgwMjExLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3dpcmVsZXNzL25sODAyMTEuYwpAQCAtMTA5Niw2ICYjNDM7MTA5Niw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBubDgwMjExX3BvbGljeVtOVU1fTkw4MDIxMV9BVFRSXSA9IHsKIAlbTkw4MDIxMV9BVFRSX05QQ0FfUFVOQ1RfQklUTUFQXSA9CiAJCU5MQV9QT0xJQ1lfRlVMTF9SQU5HRShOTEFfVTMyLCAmYW1wO25sODAyMTFfcHVuY3RfYml0bWFwX3JhbmdlKSwKIAlbTkw4MDIxMV9BVFRSX1NUQV9EVU1QX0xJTktfU1RBVFNdID0geyAudHlwZSA9IE5MQV9GTEFHIH0sCiYjNDM7CVtOTDgwMjExX0FUVFJfQVNTT0NfQ0lQXSA9IHsgLnR5cGUgPSBOTEFfRkxBRyB9LAomIzQzOwlbTkw4MDIxMV9BVFRSX0NJUF9DQVBBQklMSVRJRVNdID0geyAudHlwZSA9IE5MQV9VOCB9LAogfTsKIAogLyogcG9saWN5IGZvciB0aGUga2V5IGF0dHJpYnV0ZXMgKi8KQEAgLTE3NjEsNiAmIzQzOzE3NjMsMTEgQEAgc3RhdGljIGludCBubDgwMjExX3BhcnNlX2tleShzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCBzdHJ1Y3Qga2V5X3BhcnNlICprKQogCQkJCUdFTkxfU0VUX0VSUl9NU0coaW5mbywgJiMzNDtkZWYga2V5IGlkeCBub3QgMC0zJiMzNDspOwogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJfQomIzQzOwkJfSBlbHNlIGlmIChrLSZndDt0eXBlID09IE5MODAyMTFfS0VZVFlQRV9DSUdUSykgewomIzQzOwkJCWlmIChrLSZndDtpZHggJmx0OyAwIHx8IGstJmd0O2lkeCAmZ3Q7IDEpIHsKJiM0MzsJCQkJR0VOTF9TRVRfRVJSX01TRyhpbmZvLCAmIzM0O0NJR1RLIGlkeCBub3QgMC0xJiMzNDspOwomIzQzOwkJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCQl9CiAJCX0gZWxzZSB7CiAJCQlpZiAoay0mZ3Q7aWR4ICZsdDsgMCB8fCBrLSZndDtpZHggJmd0OyA3KSB7CiAJCQkJR0VOTF9TRVRfRVJSX01TRyhpbmZvLCAmIzM0O2tleSBpZHggbm90IDAtNyYjMzQ7KTsKQEAgLTE4MjUsNyAmIzQzOzE4MzIsOSBAQCBubDgwMjExX3BhcnNlX2Nvbm5rZXlzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKIAkJfSBlbHNlIGlmIChwYXJzZS5kZWZtZ210KQogCQkJZ290byBlcnJvcjsKIAkJZXJyID0gY2ZnODAyMTFfdmFsaWRhdGVfa2V5X3NldHRpbmdzKHJkZXYsIHdkZXYsICZhbXA7cGFyc2UucCwKLQkJCQkJCSAgICAgcGFyc2UuaWR4LCBmYWxzZSwgTlVMTCk7CiYjNDM7CQkJCQkJICAgICBwYXJzZS5pZHgsCiYjNDM7CQkJCQkJICAgICBOTDgwMjExX0tFWVRZUEVfR1JPVVAsCiYjNDM7CQkJCQkJICAgICBOVUxMKTsKIAkJaWYgKGVycikKIAkJCWdvdG8gZXJyb3I7CiAJCWlmIChwYXJzZS5wLmNpcGhlciAhPSBXTEFOX0NJUEhFUl9TVUlURV9XRVA0MCAmYW1wOyZhbXA7CkBAIC0zNjE1LDYgJiM0MzszNjI0LDExIEBAIHN0YXRpYyBpbnQgbmw4MDIxMV9zZW5kX3dpcGh5KHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKIAkJCQkJCU5MODAyMTFfQVRUUl9FWFRfTUxEX0NBUEFfQU5EX09QUywKIAkJCQkJCWNhcGFiLSZndDtleHRfbWxkX2NhcGFfYW5kX29wcykpCiAJCQkJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwomIzQzOwkJCQlpZiAoY2FwYWItJmd0O2NpcF9zdXBwb3J0ZWQgJmFtcDsmYW1wOwomIzQzOwkJCQkgICAgbmxhX3B1dF91OChtc2csCiYjNDM7CQkJCQkgICAgICAgTkw4MDIxMV9BVFRSX0NJUF9DQVBBQklMSVRJRVMsCiYjNDM7CQkJCQkgICAgICAgY2FwYWItJmd0O2NpcF9jYXBhYmlsaXRpZXMpKQomIzQzOwkJCQkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiAKIAkJCQlubGFfbmVzdF9lbmQobXNnLCBuZXN0ZWRfZXh0X2NhcGFiKTsKIAkJCQlpZiAoc3RhdGUtJmd0O3NwbGl0KQpAQCAtNTM3MSw2ICYjNDM7NTM4NSw3IEBAIHN0YXRpYyBpbnQgbmw4MDIxMV9nZXRfa2V5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGluZm8tJmd0O3VzZXJfcHRyWzFdOwogCXU4IGtleV9pZHggPSAwOwogCWNvbnN0IHU4ICptYWNfYWRkciA9IE5VTEw7CiYjNDM7CWVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlOwogCWJvb2wgcGFpcndpc2U7CiAJc3RydWN0IGdldF9rZXlfY29va2llIGNvb2tpZSA9IHsKIAkJLmVycm9yID0gMCwKQEAgLTU0MDMsMTkgJiM0Mzs1NDE4LDI0IEBAIHN0YXRpYyBpbnQgbmw4MDIxMV9nZXRfa2V5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAJCW1hY19hZGRyID0gbmxhX2RhdGEoaW5mby0mZ3Q7YXR0cnNbTkw4MDIxMV9BVFRSX01BQ10pOwogCiAJcGFpcndpc2UgPSAhIW1hY19hZGRyOwomIzQzOwl0eXBlID0gcGFpcndpc2UgPyBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0UgOiBOTDgwMjExX0tFWVRZUEVfR1JPVVA7CiAJaWYgKGluZm8tJmd0O2F0dHJzW05MODAyMTFfQVRUUl9LRVlfVFlQRV0pIHsKLQkJdTMyIGt0ID0gbmxhX2dldF91MzIoaW5mby0mZ3Q7YXR0cnNbTkw4MDIxMV9BVFRSX0tFWV9UWVBFXSk7CiYjNDM7CQl0eXBlID0gbmxhX2dldF91MzIoaW5mby0mZ3Q7YXR0cnNbTkw4MDIxMV9BVFRSX0tFWV9UWVBFXSk7CiAKLQkJaWYgKGt0ICE9IE5MODAyMTFfS0VZVFlQRV9HUk9VUCAmYW1wOyZhbXA7Ci0JCSAgICBrdCAhPSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0UpCiYjNDM7CQlpZiAodHlwZSAhPSBOTDgwMjExX0tFWVRZUEVfR1JPVVAgJmFtcDsmYW1wOwomIzQzOwkJICAgIHR5cGUgIT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFICZhbXA7JmFtcDsKJiM0MzsJCSAgICB0eXBlICE9IE5MODAyMTFfS0VZVFlQRV9DSUdUSykgewomIzQzOwkJCUdFTkxfU0VUX0VSUl9NU0coaW5mbywgJiMzNDtrZXkgdHlwZSBub3QgcGFpcndpc2UsIGdyb3VwIG9yIENJR1RLJiMzNDspOwogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCXBhaXJ3aXNlID0ga3QgPT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFOwomIzQzOwkJfQomIzQzOwomIzQzOwkJcGFpcndpc2UgPSB0eXBlID09IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRTsKIAl9CiAKIAlpZiAoIXJkZXYtJmd0O29wcy0mZ3Q7Z2V0X2tleSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0JaWYgKCFjZmc4MDIxMV92YWxpZF9rZXlfaWR4KHdkZXYsIGtleV9pZHgsIHBhaXJ3aXNlLCBtYWNfYWRkcikpCiYjNDM7CWlmICghY2ZnODAyMTFfdmFsaWRfa2V5X2lkeCh3ZGV2LCBrZXlfaWR4LCB0eXBlLCBtYWNfYWRkcikpCiAJCXJldHVybiAtRU5PRU5UOwogCiAJbXNnID0gbmxtc2dfbmV3KE5MTVNHX0RFRkFVTFRfU0laRSwgR0ZQX0tFUk5FTCk7CkBAIC01NDQ0LDcgJiM0Mzs1NDY0LDcgQEAgc3RhdGljIGludCBubDgwMjExX2dldF9rZXkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAlpZiAoZXJyKQogCQlnb3RvIGZyZWVfbXNnOwogCi0JZXJyID0gcmRldl9nZXRfa2V5KHJkZXYsIHdkZXYsIGxpbmtfaWQsIGtleV9pZHgsIHBhaXJ3aXNlLCBtYWNfYWRkciwKJiM0MzsJZXJyID0gcmRldl9nZXRfa2V5KHJkZXYsIHdkZXYsIGxpbmtfaWQsIGtleV9pZHgsIHR5cGUsIG1hY19hZGRyLAogCQkJICAgJmFtcDtjb29raWUsIGdldF9rZXlfY2FsbGJhY2spOwogCiAJaWYgKGVycikKQEAgLTU2MDMsOCAmIzQzOzU2MjMsOSBAQCBzdGF0aWMgaW50IG5sODAyMTFfbmV3X2tleShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCiAJLyogZm9yIG5vdyAqLwogCWlmIChrZXkudHlwZSAhPSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0UgJmFtcDsmYW1wOwotCSAgICBrZXkudHlwZSAhPSBOTDgwMjExX0tFWVRZUEVfR1JPVVApIHsKLQkJR0VOTF9TRVRfRVJSX01TRyhpbmZvLCAmIzM0O2tleSB0eXBlIG5vdCBwYWlyd2lzZSBvciBncm91cCYjMzQ7KTsKJiM0MzsJICAgIGtleS50eXBlICE9IE5MODAyMTFfS0VZVFlQRV9HUk9VUCAmYW1wOyZhbXA7CiYjNDM7CSAgICBrZXkudHlwZSAhPSBOTDgwMjExX0tFWVRZUEVfQ0lHVEspIHsKJiM0MzsJCUdFTkxfU0VUX0VSUl9NU0coaW5mbywgJiMzNDtrZXkgdHlwZSBub3QgcGFpcndpc2UsIGdyb3VwIG9yIENJR1RLJiMzNDspOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTU2MTYsOCAmIzQzOzU2MzcsNyBAQCBzdGF0aWMgaW50IG5sODAyMTFfbmV3X2tleShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKIAlpZiAoY2ZnODAyMTFfdmFsaWRhdGVfa2V5X3NldHRpbmdzKHJkZXYsIHdkZXYsICZhbXA7a2V5LnAsIGtleS5pZHgsCi0JCQkJCSAgIGtleS50eXBlID09IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRSwKLQkJCQkJICAgbWFjX2FkZHIpKSB7CiYjNDM7CQkJCQkgICBrZXkudHlwZSwgbWFjX2FkZHIpKSB7CiAJCUdFTkxfU0VUX0VSUl9NU0coaW5mbywgJiMzNDtrZXkgc2V0dGluZyB2YWxpZGF0aW9uIGZhaWxlZCYjMzQ7KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtNTYzMSw4ICYjNDM7NTY1MSw3IEBAIHN0YXRpYyBpbnQgbmw4MDIxMV9uZXdfa2V5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAJCQkJa2V5LnR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFKTsKIAogCWlmICghZXJyKSB7Ci0JCWVyciA9IHJkZXZfYWRkX2tleShyZGV2LCB3ZGV2LCBsaW5rX2lkLCBrZXkuaWR4LAotCQkJCSAgIGtleS50eXBlID09IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRSwKJiM0MzsJCWVyciA9IHJkZXZfYWRkX2tleShyZGV2LCB3ZGV2LCBsaW5rX2lkLCBrZXkuaWR4LCBrZXkudHlwZSwKIAkJCQkgICAgbWFjX2FkZHIsICZhbXA7a2V5LnApOwogCQlpZiAoZXJyKQogCQkJR0VOTF9TRVRfRVJSX01TRyhpbmZvLCAmIzM0O2tleSBhZGRpdGlvbiBmYWlsZWQmIzM0Oyk7CkBAIC01NjY2LDEyICYjNDM7NTY4NSwxMyBAQCBzdGF0aWMgaW50IG5sODAyMTFfZGVsX2tleShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCiAJLyogZm9yIG5vdyAqLwogCWlmIChrZXkudHlwZSAhPSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0UgJmFtcDsmYW1wOwotCSAgICBrZXkudHlwZSAhPSBOTDgwMjExX0tFWVRZUEVfR1JPVVApCiYjNDM7CSAgICBrZXkudHlwZSAhPSBOTDgwMjExX0tFWVRZUEVfR1JPVVAgJmFtcDsmYW1wOwomIzQzOwkgICAga2V5LnR5cGUgIT0gTkw4MDIxMV9LRVlUWVBFX0NJR1RLKSB7CiYjNDM7CQlHRU5MX1NFVF9FUlJfTVNHKGluZm8sICYjMzQ7a2V5IHR5cGUgbm90IHBhaXJ3aXNlLCBncm91cCBvciBDSUdUSyYjMzQ7KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KIAotCWlmICghY2ZnODAyMTFfdmFsaWRfa2V5X2lkeCh3ZGV2LCBrZXkuaWR4LAotCQkJCSAgICBrZXkudHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0UsCi0JCQkJICAgIG1hY19hZGRyKSkKJiM0MzsJaWYgKCFjZmc4MDIxMV92YWxpZF9rZXlfaWR4KHdkZXYsIGtleS5pZHgsIGtleS50eXBlLCBtYWNfYWRkcikpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKCFyZGV2LSZndDtvcHMtJmd0O2RlbF9rZXkpCkBAIC01Njg1LDggJiM0Mzs1NzA1LDcgQEAgc3RhdGljIGludCBubDgwMjExX2RlbF9rZXkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAogCWlmICghZXJyKQogCQllcnIgPSByZGV2X2RlbF9rZXkocmRldiwgd2RldiwgbGlua19pZCwga2V5LmlkeCwKLQkJCQkgICBrZXkudHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0UsCi0JCQkJICAgbWFjX2FkZHIpOwomIzQzOwkJCQkgICBrZXkudHlwZSwgbWFjX2FkZHIpOwogCiAjaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFQKIAlpZiAoIWVycikgewpAQCAtODgwNSw3ICYjNDM7ODgyNCw3IEBAIGludCBjZmc4MDIxMV9jaGVja19zdGF0aW9uX2NoYW5nZShzdHJ1Y3Qgd2lwaHkgKndpcGh5LAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIFdoZW4geW91IHJ1biBpbnRvIHRoaXMsIGFkanVzdCB0aGUgY29kZSBiZWxvdyBmb3IgdGhlIG5ldyBmbGFnICovCi0JQlVJTERfQlVHX09OKE5MODAyMTFfU1RBX0ZMQUdfTUFYICE9IDgpOwomIzQzOwlCVUlMRF9CVUdfT04oTkw4MDIxMV9TVEFfRkxBR19NQVggIT0gOSk7CiAKIAlzd2l0Y2ggKHN0YXR5cGUpIHsKIAljYXNlIENGRzgwMjExX1NUQV9NRVNIX1BFRVJfS0VSTkVMOgpAQCAtODg5OSw3ICYjNDM7ODkxOCw4IEBAIGludCBjZmc4MDIxMV9jaGVja19zdGF0aW9uX2NoYW5nZShzdHJ1Y3Qgd2lwaHkgKndpcGh5LAogCQkJCSAgQklUKE5MODAyMTFfU1RBX0ZMQUdfU0hPUlRfUFJFQU1CTEUpIHwKIAkJCQkgIEJJVChOTDgwMjExX1NUQV9GTEFHX1dNRSkgfAogCQkJCSAgQklUKE5MODAyMTFfU1RBX0ZMQUdfTUZQKSB8Ci0JCQkJICBCSVQoTkw4MDIxMV9TVEFfRkxBR19TUFBfQU1TRFUpKSkKJiM0MzsJCQkJICBCSVQoTkw4MDIxMV9TVEFfRkxBR19TUFBfQU1TRFUpIHwKJiM0MzsJCQkJICBCSVQoTkw4MDIxMV9TVEFfRkxBR19DSVApKSkKIAkJCXJldHVybiAtRUlOVkFMOwogCiAJCS8qIGJ1dCBhdXRoZW50aWNhdGVkL2Fzc29jaWF0ZWQgb25seSBpZiBkcml2ZXIgaGFuZGxlcyBpdCAqLwpAQCAtOTI3Niw2ICYjNDM7OTI5NiwyMiBAQCBzdGF0aWMgaW50IG5sODAyMTFfc2V0X3N0YXRpb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAkJCW5sYV9nZXRfdTE2KGluZm8tJmd0O2F0dHJzW05MODAyMTFfQVRUUl9FTUxfQ0FQQUJJTElUWV0pOwogCX0KIAomIzQzOwlpZiAocGFyYW1zLnN0YV9mbGFnc19tYXNrICZhbXA7IEJJVChOTDgwMjExX1NUQV9GTEFHX0NJUCkgJmFtcDsmYW1wOwomIzQzOwkgICAgcGFyYW1zLnN0YV9mbGFnc19zZXQgJmFtcDsgQklUKE5MODAyMTFfU1RBX0ZMQUdfQ0lQKSkgewomIzQzOwkJaWYgKCFjZmc4MDIxMV9jaWd0a19zdXBwb3J0ZWQod2RldiwgaW5mbykpCiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CQkvKiBDSVAgY2FwYWJpbGl0aWVzIGFyZSByZXF1aXJlZCBpZiBDSVAgaXMgYmVpbmcgZW5hYmxlZCAqLwomIzQzOwkJaWYgKGluZm8tJmd0O2F0dHJzW05MODAyMTFfQVRUUl9DSVBfQ0FQQUJJTElUSUVTXSkgewomIzQzOwkJCXBhcmFtcy5saW5rX3N0YV9wYXJhbXMuY2lwX2NhcF9zZXQgPSB0cnVlOwomIzQzOwkJCXBhcmFtcy5saW5rX3N0YV9wYXJhbXMuY2lwX2NhcCA9CiYjNDM7CQkJCW5sYV9nZXRfdTgoaW5mby0mZ3Q7YXR0cnNbTkw4MDIxMV9BVFRSX0NJUF9DQVBBQklMSVRJRVNdKTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJR0VOTF9TRVRfRVJSX01TRyhpbmZvLCAmIzM0O05vIENJUCBjYXBhYmlsaXRpZXMgcHJvdmlkZWQmIzM0Oyk7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKIAlpZiAoaW5mby0mZ3Q7YXR0cnNbTkw4MDIxMV9BVFRSX0FJUlRJTUVfV0VJR0hUXSkKIAkJcGFyYW1zLmFpcnRpbWVfd2VpZ2h0ID0KIAkJCW5sYV9nZXRfdTE2KGluZm8tJmd0O2F0dHJzW05MODAyMTFfQVRUUl9BSVJUSU1FX1dFSUdIVF0pOwpAQCAtOTQ3NSw2ICYjNDM7OTUxMSwyMiBAQCBzdGF0aWMgaW50IG5sODAyMTFfbmV3X3N0YXRpb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAkJCW5sYV9nZXRfdTE2KGluZm8tJmd0O2F0dHJzW05MODAyMTFfQVRUUl9FTUxfQ0FQQUJJTElUWV0pOwogCX0KIAomIzQzOwlpZiAocGFyYW1zLnN0YV9mbGFnc19tYXNrICZhbXA7IEJJVChOTDgwMjExX1NUQV9GTEFHX0NJUCkgJmFtcDsmYW1wOwomIzQzOwkgICAgcGFyYW1zLnN0YV9mbGFnc19zZXQgJmFtcDsgQklUKE5MODAyMTFfU1RBX0ZMQUdfQ0lQKSkgewomIzQzOwkJaWYgKCFjZmc4MDIxMV9jaWd0a19zdXBwb3J0ZWQod2RldiwgaW5mbykpCiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CQkvKiBDSVAgY2FwYWJpbGl0aWVzIGFyZSByZXF1aXJlZCBpZiBDSVAgaXMgZW5hYmxlZCAqLwomIzQzOwkJaWYgKGluZm8tJmd0O2F0dHJzW05MODAyMTFfQVRUUl9DSVBfQ0FQQUJJTElUSUVTXSkgewomIzQzOwkJCXBhcmFtcy5saW5rX3N0YV9wYXJhbXMuY2lwX2NhcF9zZXQgPSB0cnVlOwomIzQzOwkJCXBhcmFtcy5saW5rX3N0YV9wYXJhbXMuY2lwX2NhcCA9CiYjNDM7CQkJCW5sYV9nZXRfdTgoaW5mby0mZ3Q7YXR0cnNbTkw4MDIxMV9BVFRSX0NJUF9DQVBBQklMSVRJRVNdKTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJR0VOTF9TRVRfRVJSX01TRyhpbmZvLCAmIzM0O05vIENJUCBjYXBhYmlsaXRpZXMgcHJvdmlkZWQmIzM0Oyk7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKIAlpZiAoaW5mby0mZ3Q7YXR0cnNbTkw4MDIxMV9BVFRSX0hFXzZHSFpfQ0FQQUJJTElUWV0pCiAJCXBhcmFtcy5saW5rX3N0YV9wYXJhbXMuaGVfNmdoel9jYXBhID0KIAkJCW5sYV9kYXRhKGluZm8tJmd0O2F0dHJzW05MODAyMTFfQVRUUl9IRV82R0haX0NBUEFCSUxJVFldKTsKQEAgLTk1NTIsNyAmIzQzOzk2MDQsNyBAQCBzdGF0aWMgaW50IG5sODAyMTFfbmV3X3N0YXRpb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBXaGVuIHlvdSBydW4gaW50byB0aGlzLCBhZGp1c3QgdGhlIGNvZGUgYmVsb3cgZm9yIHRoZSBuZXcgZmxhZyAqLwotCUJVSUxEX0JVR19PTihOTDgwMjExX1NUQV9GTEFHX01BWCAhPSA4KTsKJiM0MzsJQlVJTERfQlVHX09OKE5MODAyMTFfU1RBX0ZMQUdfTUFYICE9IDkpOwogCiAJc3dpdGNoICh3ZGV2LSZndDtpZnR5cGUpIHsKIAljYXNlIE5MODAyMTFfSUZUWVBFX0FQOgpAQCAtOTU4MSw2ICYjNDM7OTYzMywxMCBAQCBzdGF0aWMgaW50IG5sODAyMTFfbmV3X3N0YXRpb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAkJICAgIHBhcmFtcy5zdGFfZmxhZ3NfbWFzayAmYW1wOyBCSVQoTkw4MDIxMV9TVEFfRkxBR19TUFBfQU1TRFUpKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKJiM0MzsJCWlmIChwYXJhbXMuc3RhX2ZsYWdzX21hc2sgJmFtcDsgQklUKE5MODAyMTFfU1RBX0ZMQUdfQ0lQKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIWNmZzgwMjExX2NpZ3RrX3N1cHBvcnRlZCh3ZGV2LCBpbmZvKSkKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKIAkJLyogT2xkZXIgdXNlcnNwYWNlLCBvciB1c2Vyc3BhY2Ugd2FudGluZyB0byBiZSBjb21wYXRpYmxlIHdpdGgKIAkJICogIU5MODAyMTFfRkVBVFVSRV9GVUxMX0FQX0NMSUVOVF9TVEFURSwgd2lsbCBub3Qgc2V0IHRoZSBhdXRoCiAJCSAqIGFuZCBhc3NvYyBmbGFncyBpbiB0aGUgbWFzaywgYnV0IGFzc3VtZXMgdGhlIHN0YXRpb24gd2lsbCBiZQpAQCAtMTMzMDcsNiAmIzQzOzEzMzYzLDEzIEBAIHN0YXRpYyBpbnQgbmw4MDIxMV9hc3NvY2lhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAkJcmVxLmZsYWdzIHw9IEFTU09DX1JFUV9TUFBfQU1TRFU7CiAJfQogCiYjNDM7CWlmIChubGFfZ2V0X2ZsYWcoaW5mby0mZ3Q7YXR0cnNbTkw4MDIxMV9BVFRSX0FTU09DX0NJUF0pKSB7CiYjNDM7CQlpZiAoIWNmZzgwMjExX2NpZ3RrX3N1cHBvcnRlZChkZXYtJmd0O2llZWU4MDIxMV9wdHIsIGluZm8pKQomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwkJcmVxLmZsYWdzIHw9IEFTU09DX1JFUV9DSVA7CiYjNDM7CX0KJiM0MzsKIAlyZXEubGlua19pZCA9IG5sODAyMTFfbGlua19pZF9vcl9pbnZhbGlkKGluZm8tJmd0O2F0dHJzKTsKIAogCWlmIChpbmZvLSZndDthdHRyc1tOTDgwMjExX0FUVFJfTUxPX0xJTktTXSkgewpAQCAtMTkxNzQsNiAmIzQzOzE5MjM3LDIzIEBAIG5sODAyMTFfYWRkX21vZF9saW5rX3N0YXRpb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbywKIAkJcGFyYW1zLmhlXzZnaHpfY2FwYSA9CiAJCQlubGFfZGF0YShpbmZvLSZndDthdHRyc1tOTDgwMjExX0FUVFJfSEVfNkdIWl9DQVBBQklMSVRZXSk7CiAKJiM0MzsJaWYgKGluZm8tJmd0O2F0dHJzW05MODAyMTFfQVRUUl9DSVBfQ0FQQUJJTElUSUVTXSkgewomIzQzOwkJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi0mZ3Q7aWVlZTgwMjExX3B0cjsKJiM0MzsKJiM0MzsJCWlmICghY2ZnODAyMTFfY2lndGtfc3VwcG9ydGVkKHdkZXYsIGluZm8pKQomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwkJcGFyYW1zLmNpcF9jYXBfc2V0ID0gdHJ1ZTsKJiM0MzsJCXBhcmFtcy5jaXBfY2FwID0KJiM0MzsJCQlubGFfZ2V0X3U4KGluZm8tJmd0O2F0dHJzW05MODAyMTFfQVRUUl9DSVBfQ0FQQUJJTElUSUVTXSk7CiYjNDM7CiYjNDM7CQkvKiBPbmx5IHBlcm1pdCBDSVAgY2FwYWJpbGl0aWVzIHdoZW4gYWRkaW5nIGxpbmsgc3RhdGlvbnMgKi8KJiM0MzsJCWlmICghYWRkKSB7CiYjNDM7CQkJR0VOTF9TRVRfRVJSX01TRyhpbmZvLCAmIzM0O0Nhbm5vdCBtb2RpZnkgQ0lQIGNhcGFiaWxpdGllcyYjMzQ7KTsKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwogCWlmIChpbmZvLSZndDthdHRyc1tOTDgwMjExX0FUVFJfT1BNT0RFX05PVElGXSkgewogCQlwYXJhbXMub3Btb2RlX25vdGlmX3VzZWQgPSB0cnVlOwogCQlwYXJhbXMub3Btb2RlX25vdGlmID0KZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9yZGV2LW9wcy5oIGIvbmV0L3dpcmVsZXNzL3JkZXYtb3BzLmgKaW5kZXggNmMzYmFkOGIyZDZmNi4uZDQ5MzNiYmJmMGU3ZSAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL3JkZXYtb3BzLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3dpcmVsZXNzL3JkZXYtb3BzLmgKQEAgLTc4LDQyICYjNDM7NzgsNDMgQEAgcmRldl9jaGFuZ2VfdmlydHVhbF9pbnRmKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKIAogc3RhdGljIGlubGluZSBpbnQgcmRldl9hZGRfa2V5KHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKIAkJCSAgICAgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LCBpbnQgbGlua19pZCwKLQkJCSAgICAgICB1OCBrZXlfaW5kZXgsIGJvb2wgcGFpcndpc2UsIGNvbnN0IHU4ICptYWNfYWRkciwKLQkJCSAgICAgICBzdHJ1Y3Qga2V5X3BhcmFtcyAqcGFyYW1zKQomIzQzOwkJCSAgICAgICB1OCBrZXlfaW5kZXgsIGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLAomIzQzOwkJCSAgICAgICBjb25zdCB1OCAqbWFjX2FkZHIsIHN0cnVjdCBrZXlfcGFyYW1zICpwYXJhbXMpCiB7CiAJaW50IHJldDsKLQl0cmFjZV9yZGV2X2FkZF9rZXkoJmFtcDtyZGV2LSZndDt3aXBoeSwgd2RldiwgbGlua19pZCwga2V5X2luZGV4LCBwYWlyd2lzZSwKJiM0MzsJdHJhY2VfcmRldl9hZGRfa2V5KCZhbXA7cmRldi0mZ3Q7d2lwaHksIHdkZXYsIGxpbmtfaWQsIGtleV9pbmRleCwgdHlwZSwKIAkJCSAgIG1hY19hZGRyLCBwYXJhbXMtJmd0O21vZGUpOwogCXJldCA9IHJkZXYtJmd0O29wcy0mZ3Q7YWRkX2tleSgmYW1wO3JkZXYtJmd0O3dpcGh5LCB3ZGV2LCBsaW5rX2lkLCBrZXlfaW5kZXgsCi0JCQkJICBwYWlyd2lzZSwgbWFjX2FkZHIsIHBhcmFtcyk7CiYjNDM7CQkJCSAgdHlwZSwgbWFjX2FkZHIsIHBhcmFtcyk7CiAJdHJhY2VfcmRldl9yZXR1cm5faW50KCZhbXA7cmRldi0mZ3Q7d2lwaHksIHJldCk7CiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGlubGluZSBpbnQKIHJkZXZfZ2V0X2tleShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsCi0JICAgICBpbnQgbGlua19pZCwgdTgga2V5X2luZGV4LCBib29sIHBhaXJ3aXNlLCBjb25zdCB1OCAqbWFjX2FkZHIsCi0JICAgICB2b2lkICpjb29raWUsCiYjNDM7CSAgICAgaW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCwgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsCiYjNDM7CSAgICAgY29uc3QgdTggKm1hY19hZGRyLCB2b2lkICpjb29raWUsCiAJICAgICB2b2lkICgqY2FsbGJhY2spKHZvaWQgKmNvb2tpZSwgc3RydWN0IGtleV9wYXJhbXMqKSkKIHsKIAlpbnQgcmV0OwotCXRyYWNlX3JkZXZfZ2V0X2tleSgmYW1wO3JkZXYtJmd0O3dpcGh5LCB3ZGV2LCBsaW5rX2lkLCBrZXlfaW5kZXgsIHBhaXJ3aXNlLAomIzQzOwl0cmFjZV9yZGV2X2dldF9rZXkoJmFtcDtyZGV2LSZndDt3aXBoeSwgd2RldiwgbGlua19pZCwga2V5X2luZGV4LCB0eXBlLAogCQkJICAgbWFjX2FkZHIpOwogCXJldCA9IHJkZXYtJmd0O29wcy0mZ3Q7Z2V0X2tleSgmYW1wO3JkZXYtJmd0O3dpcGh5LCB3ZGV2LCBsaW5rX2lkLCBrZXlfaW5kZXgsCi0JCQkJICBwYWlyd2lzZSwgbWFjX2FkZHIsIGNvb2tpZSwgY2FsbGJhY2spOwomIzQzOwkJCQkgdHlwZSwgbWFjX2FkZHIsIGNvb2tpZSwgY2FsbGJhY2spOwogCXRyYWNlX3JkZXZfcmV0dXJuX2ludCgmYW1wO3JkZXYtJmd0O3dpcGh5LCByZXQpOwogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IHJkZXZfZGVsX2tleShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCiAJCQkgICAgICAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwgaW50IGxpbmtfaWQsCi0JCQkgICAgICAgdTgga2V5X2luZGV4LCBib29sIHBhaXJ3aXNlLCBjb25zdCB1OCAqbWFjX2FkZHIpCiYjNDM7CQkJICAgICAgIHU4IGtleV9pbmRleCwgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsCiYjNDM7CQkJICAgICAgIGNvbnN0IHU4ICptYWNfYWRkcikKIHsKIAlpbnQgcmV0OwotCXRyYWNlX3JkZXZfZGVsX2tleSgmYW1wO3JkZXYtJmd0O3dpcGh5LCB3ZGV2LCBsaW5rX2lkLCBrZXlfaW5kZXgsIHBhaXJ3aXNlLAomIzQzOwl0cmFjZV9yZGV2X2RlbF9rZXkoJmFtcDtyZGV2LSZndDt3aXBoeSwgd2RldiwgbGlua19pZCwga2V5X2luZGV4LCB0eXBlLAogCQkJICAgbWFjX2FkZHIpOwogCXJldCA9IHJkZXYtJmd0O29wcy0mZ3Q7ZGVsX2tleSgmYW1wO3JkZXYtJmd0O3dpcGh5LCB3ZGV2LCBsaW5rX2lkLCBrZXlfaW5kZXgsCi0JCQkJICBwYWlyd2lzZSwgbWFjX2FkZHIpOwomIzQzOwkJCQkgIHR5cGUsIG1hY19hZGRyKTsKIAl0cmFjZV9yZGV2X3JldHVybl9pbnQoJmFtcDtyZGV2LSZndDt3aXBoeSwgcmV0KTsKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3NtZS5jIGIvbmV0L3dpcmVsZXNzL3NtZS5jCmluZGV4IDJhNzE5YjVjNDg3ZTMuLjQ1OGY3MmQ4MzUxYWIgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9zbWUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvd2lyZWxlc3Mvc21lLmMKQEAgLTEzODcsNyAmIzQzOzEzODcsMTUgQEAgdm9pZCBfX2NmZzgwMjExX2Rpc2Nvbm5lY3RlZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqaWUsCiAJCQkgICAgTkw4MDIxMV9FWFRfRkVBVFVSRV9CRUFDT05fUFJPVEVDVElPTl9DTElFTlQpKQogCQkJbWF4X2tleV9pZHggPSA3OwogCQlmb3IgKGkgPSAwOyBpICZsdDs9IG1heF9rZXlfaWR4OyBpJiM0MzsmIzQzOykKLQkJCXJkZXZfZGVsX2tleShyZGV2LCB3ZGV2LCAtMSwgaSwgZmFsc2UsIE5VTEwpOwomIzQzOwkJCXJkZXZfZGVsX2tleShyZGV2LCB3ZGV2LCAtMSwgaSwgTkw4MDIxMV9LRVlUWVBFX0dST1VQLAomIzQzOwkJCQkgICAgIE5VTEwpOwomIzQzOwomIzQzOwkJaWYgKGNmZzgwMjExX2NpZ3RrX3N1cHBvcnRlZCh3ZGV2LCBOVUxMKSkgewomIzQzOwkJCXJkZXZfZGVsX2tleShyZGV2LCB3ZGV2LCAtMSwgMCwgTkw4MDIxMV9LRVlUWVBFX0NJR1RLLAomIzQzOwkJCQkgICAgIE5VTEwpOwomIzQzOwkJCXJkZXZfZGVsX2tleShyZGV2LCB3ZGV2LCAtMSwgMSwgTkw4MDIxMV9LRVlUWVBFX0NJR1RLLAomIzQzOwkJCQkgICAgIE5VTEwpOwomIzQzOwkJfQogCX0KIAogCXJkZXZfc2V0X3Fvc19tYXAocmRldiwgZGV2LCBOVUxMKTsKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy90cmFjZS5oIGIvbmV0L3dpcmVsZXNzL3RyYWNlLmgKaW5kZXggOGMyYTkxYjg1YzM5Ni4uYzIxMGNhMWU0NGUyYiAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL3RyYWNlLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3dpcmVsZXNzL3RyYWNlLmgKQEAgLTU1NywxNSAmIzQzOzU1NywxNSBAQCBUUkFDRV9FVkVOVChyZGV2X2NoYW5nZV92aXJ0dWFsX2ludGYsCiAKIERFQ0xBUkVfRVZFTlRfQ0xBU1Moa2V5X2hhbmRsZSwKIAlUUF9QUk9UTyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LCBpbnQgbGlua19pZCwKLQkJIHU4IGtleV9pbmRleCwgYm9vbCBwYWlyd2lzZSwgY29uc3QgdTggKm1hY19hZGRyKSwKLQlUUF9BUkdTKHdpcGh5LCB3ZGV2LCBsaW5rX2lkLCBrZXlfaW5kZXgsIHBhaXJ3aXNlLCBtYWNfYWRkciksCiYjNDM7CQkgdTgga2V5X2luZGV4LCBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSwgY29uc3QgdTggKm1hY19hZGRyKSwKJiM0MzsJVFBfQVJHUyh3aXBoeSwgd2RldiwgbGlua19pZCwga2V5X2luZGV4LCB0eXBlLCBtYWNfYWRkciksCiAJVFBfU1RSVUNUX19lbnRyeSgKIAkJV0lQSFlfRU5UUlkKIAkJV0RFVl9FTlRSWQogCQlNQUNfRU5UUlkobWFjX2FkZHIpCiAJCV9fZmllbGQoaW50LCBsaW5rX2lkKQogCQlfX2ZpZWxkKHU4LCBrZXlfaW5kZXgpCi0JCV9fZmllbGQoYm9vbCwgcGFpcndpc2UpCiYjNDM7CQlfX2ZpZWxkKHU4LCB0eXBlKQogCSksCiAJVFBfZmFzdF9hc3NpZ24oCiAJCVdJUEhZX0FTU0lHTjsKQEAgLTU3MywzOCAmIzQzOzU3Myw0MCBAQCBERUNMQVJFX0VWRU5UX0NMQVNTKGtleV9oYW5kbGUsCiAJCU1BQ19BU1NJR04obWFjX2FkZHIsIG1hY19hZGRyKTsKIAkJX19lbnRyeS0mZ3Q7bGlua19pZCA9IGxpbmtfaWQ7CiAJCV9fZW50cnktJmd0O2tleV9pbmRleCA9IGtleV9pbmRleDsKLQkJX19lbnRyeS0mZ3Q7cGFpcndpc2UgPSBwYWlyd2lzZTsKJiM0MzsJCV9fZW50cnktJmd0O3R5cGUgPSB0eXBlOwogCSksCiAJVFBfcHJpbnRrKFdJUEhZX1BSX0ZNVCAmIzM0OywgJiMzNDsgV0RFVl9QUl9GTVQgJiMzNDssIGxpbmtfaWQ6ICVkLCAmIzM0OwotCQkgICYjMzQ7a2V5X2luZGV4OiAldSwgcGFpcndpc2U6ICVzLCBtYWMgYWRkcjogJXBNJiMzNDssCiYjNDM7CQkgICYjMzQ7a2V5X2luZGV4OiAldSwgcGFpcndpc2U6ICVzLCB0eXBlOiAlZCwgbWFjIGFkZHI6ICVwTSYjMzQ7LAogCQkgIFdJUEhZX1BSX0FSRywgV0RFVl9QUl9BUkcsIF9fZW50cnktJmd0O2xpbmtfaWQsCi0JCSAgX19lbnRyeS0mZ3Q7a2V5X2luZGV4LCBCT09MX1RPX1NUUihfX2VudHJ5LSZndDtwYWlyd2lzZSksCi0JCSAgX19lbnRyeS0mZ3Q7bWFjX2FkZHIpCiYjNDM7CQkgIF9fZW50cnktJmd0O2tleV9pbmRleCwKJiM0MzsJCSAgQk9PTF9UT19TVFIoX19lbnRyeS0mZ3Q7dHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0UpLAomIzQzOwkJICBfX2VudHJ5LSZndDt0eXBlLCBfX2VudHJ5LSZndDttYWNfYWRkcikKICk7CiAKIERFRklORV9FVkVOVChrZXlfaGFuZGxlLCByZGV2X2dldF9rZXksCiAJVFBfUFJPVE8oc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwgaW50IGxpbmtfaWQsCi0JCSB1OCBrZXlfaW5kZXgsIGJvb2wgcGFpcndpc2UsIGNvbnN0IHU4ICptYWNfYWRkciksCi0JVFBfQVJHUyh3aXBoeSwgd2RldiwgbGlua19pZCwga2V5X2luZGV4LCBwYWlyd2lzZSwgbWFjX2FkZHIpCiYjNDM7CQkgdTgga2V5X2luZGV4LCBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSwgY29uc3QgdTggKm1hY19hZGRyKSwKJiM0MzsJVFBfQVJHUyh3aXBoeSwgd2RldiwgbGlua19pZCwga2V5X2luZGV4LCB0eXBlLCBtYWNfYWRkcikKICk7CiAKIERFRklORV9FVkVOVChrZXlfaGFuZGxlLCByZGV2X2RlbF9rZXksCiAJVFBfUFJPVE8oc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwgaW50IGxpbmtfaWQsCi0JCSB1OCBrZXlfaW5kZXgsIGJvb2wgcGFpcndpc2UsIGNvbnN0IHU4ICptYWNfYWRkciksCi0JVFBfQVJHUyh3aXBoeSwgd2RldiwgbGlua19pZCwga2V5X2luZGV4LCBwYWlyd2lzZSwgbWFjX2FkZHIpCiYjNDM7CQkgdTgga2V5X2luZGV4LCBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSwgY29uc3QgdTggKm1hY19hZGRyKSwKJiM0MzsJVFBfQVJHUyh3aXBoeSwgd2RldiwgbGlua19pZCwga2V5X2luZGV4LCB0eXBlLCBtYWNfYWRkcikKICk7CiAKIFRSQUNFX0VWRU5UKHJkZXZfYWRkX2tleSwKIAlUUF9QUk9UTyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LCBpbnQgbGlua19pZCwKLQkJIHU4IGtleV9pbmRleCwgYm9vbCBwYWlyd2lzZSwgY29uc3QgdTggKm1hY19hZGRyLCB1OCBtb2RlKSwKLQlUUF9BUkdTKHdpcGh5LCB3ZGV2LCBsaW5rX2lkLCBrZXlfaW5kZXgsIHBhaXJ3aXNlLCBtYWNfYWRkciwgbW9kZSksCiYjNDM7CQkgdTgga2V5X2luZGV4LCBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSwgY29uc3QgdTggKm1hY19hZGRyLAomIzQzOwkJIHU4IG1vZGUpLAomIzQzOwlUUF9BUkdTKHdpcGh5LCB3ZGV2LCBsaW5rX2lkLCBrZXlfaW5kZXgsIHR5cGUsIG1hY19hZGRyLCBtb2RlKSwKIAlUUF9TVFJVQ1RfX2VudHJ5KAogCQlXSVBIWV9FTlRSWQogCQlXREVWX0VOVFJZCiAJCU1BQ19FTlRSWShtYWNfYWRkcikKIAkJX19maWVsZChpbnQsIGxpbmtfaWQpCiAJCV9fZmllbGQodTgsIGtleV9pbmRleCkKLQkJX19maWVsZChib29sLCBwYWlyd2lzZSkKJiM0MzsJCV9fZmllbGQodTgsIHR5cGUpCiAJCV9fZmllbGQodTgsIG1vZGUpCiAJKSwKIAlUUF9mYXN0X2Fzc2lnbigKQEAgLTYxMywxNSAmIzQzOzYxNSwxNiBAQCBUUkFDRV9FVkVOVChyZGV2X2FkZF9rZXksCiAJCU1BQ19BU1NJR04obWFjX2FkZHIsIG1hY19hZGRyKTsKIAkJX19lbnRyeS0mZ3Q7bGlua19pZCA9IGxpbmtfaWQ7CiAJCV9fZW50cnktJmd0O2tleV9pbmRleCA9IGtleV9pbmRleDsKLQkJX19lbnRyeS0mZ3Q7cGFpcndpc2UgPSBwYWlyd2lzZTsKJiM0MzsJCV9fZW50cnktJmd0O3R5cGUgPSB0eXBlOwogCQlfX2VudHJ5LSZndDttb2RlID0gbW9kZTsKIAkpLAogCVRQX3ByaW50ayhXSVBIWV9QUl9GTVQgJiMzNDssICYjMzQ7IFdERVZfUFJfRk1UICYjMzQ7LCBsaW5rX2lkOiAlZCwgJiMzNDsKLQkJICAmIzM0O2tleV9pbmRleDogJXUsIG1vZGU6ICV1LCBwYWlyd2lzZTogJXMsICYjMzQ7CiYjNDM7CQkgICYjMzQ7a2V5X2luZGV4OiAldSwgbW9kZTogJXUsIHBhaXJ3aXNlOiAlcywgdHlwZTogJWQsICYjMzQ7CiAJCSAgJiMzNDttYWMgYWRkcjogJXBNJiMzNDssCiAJCSAgV0lQSFlfUFJfQVJHLCBXREVWX1BSX0FSRywgX19lbnRyeS0mZ3Q7bGlua19pZCwKIAkJICBfX2VudHJ5LSZndDtrZXlfaW5kZXgsIF9fZW50cnktJmd0O21vZGUsCi0JCSAgQk9PTF9UT19TVFIoX19lbnRyeS0mZ3Q7cGFpcndpc2UpLCBfX2VudHJ5LSZndDttYWNfYWRkcikKJiM0MzsJCSAgQk9PTF9UT19TVFIoX19lbnRyeS0mZ3Q7dHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0UpLAomIzQzOwkJICBfX2VudHJ5LSZndDt0eXBlLCBfX2VudHJ5LSZndDttYWNfYWRkcikKICk7CiAKIFRSQUNFX0VWRU5UKHJkZXZfc2V0X2RlZmF1bHRfa2V5LApkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3V0aWwuYyBiL25ldC93aXJlbGVzcy91dGlsLmMKaW5kZXggM2U1ODRkMGNhM2UyNi4uZGQxNjZjMzUyOTEwZiAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL3V0aWwuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvd2lyZWxlc3MvdXRpbC5jCkBAIC0yNTgsOCAmIzQzOzI1OCwyNCBAQCBzdGF0aWMgYm9vbCBjZmc4MDIxMV9pZ3RrX2NpcGhlcl9zdXBwb3J0ZWQoc3RydWN0IHdpcGh5ICp3aXBoeSkKIAlyZXR1cm4gZmFsc2U7CiB9CiAKJiM0Mztib29sIGNmZzgwMjExX2NpZ3RrX3N1cHBvcnRlZChzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LAomIzQzOwkJCSAgICAgIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3Qgd2lwaHlfaWZ0eXBlX2V4dF9jYXBhYiAqZXh0X2NhcGFiID0KJiM0MzsJCWNmZzgwMjExX2dldF9pZnR5cGVfZXh0X2NhcGEod2Rldi0mZ3Q7d2lwaHksIHdkZXYtJmd0O2lmdHlwZSk7CiYjNDM7CiYjNDM7CWlmIChleHRfY2FwYWIgJmFtcDsmYW1wOyBleHRfY2FwYWItJmd0O2NpcF9zdXBwb3J0ZWQpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsKJiM0MzsJaWYgKGluZm8pCiYjNDM7CQlHRU5MX1NFVF9FUlJfTVNHKGluZm8sCiYjNDM7CQkJCSAmIzM0O0NvbnRyb2wgSW50ZWdyaXR5IFByb3RvY29sIG5vdCBzdXBwb3J0ZWQmIzM0Oyk7CiYjNDM7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiBib29sIGNmZzgwMjExX3ZhbGlkX2tleV9pZHgoc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwKLQkJCSAgICBpbnQga2V5X2lkeCwgYm9vbCBwYWlyd2lzZSwKJiM0MzsJCQkgICAgaW50IGtleV9pZHgsIGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLAogCQkJICAgIGNvbnN0IHU4ICptYWNfYWRkcikKIHsKIAlpZiAoV0FSTl9PTighd2RldikpCkBAIC0yNzIsMTMgJiM0MzsyODgsMjQgQEAgYm9vbCBjZmc4MDIxMV92YWxpZF9rZXlfaWR4KHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsCiAJICogQ2FuJiMzOTt0IGRpZmZlcmVudGlhdGUgY2lwaGVycyBoZXJlIHNvIGFsbG93IDAuLjMuCiAJICogUGFpcndpc2Uga2V5cyBtdXN0IGJlIGZvciBhIHN0YXRpb24gKE1BQyBhZGRyZXNzIGdpdmVuKS4KIAkgKi8KLQlpZiAocGFpcndpc2UpIHsKJiM0MzsJaWYgKHR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFKSB7CiAJCWlmICghbWFjX2FkZHIpCiAJCQlyZXR1cm4gZmFsc2U7CiAKIAkJcmV0dXJuIGtleV9pZHggJmx0OyA0OwogCX0KIAomIzQzOwkvKiBDaGVjayB0aGUgd2Rldi9pZnR5cGUgc3VwcG9ydHMgQ0lHVEsgKi8KJiM0MzsJaWYgKHR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX0NJR1RLKSB7CiYjNDM7CQlpZiAoIWNmZzgwMjExX2NpZ3RrX3N1cHBvcnRlZCh3ZGV2LCBOVUxMKSkKJiM0MzsJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CQlpZiAoa2V5X2lkeCAmZ3Q7PSAyKQomIzQzOwkJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJCS8qIGZhbGx0aHJvdWdoIGZvciBtYWNfYWRkciBjaGVja3MgKi8KJiM0MzsJfQomIzQzOwogCS8qCiAJICogRm9yIGdyb3VwIGtleXMsIG1hY19hZGRyPT1OVUxMIG1lYW5zIHNldHRpbmcgYSBncm91cCBrZXkKIAkgKiBmb3IgVFgsIHdoaWNoIGlzIG9ubHkgc3VwcG9ydGVkIG9uIHNvbWUgaW50ZXJmYWNlIHR5cGVzLApAQCAtMzQzLDkgJiM0MzszNzAsMTIgQEAgYm9vbCBjZmc4MDIxMV92YWxpZF9rZXlfaWR4KHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsCiBpbnQgY2ZnODAyMTFfdmFsaWRhdGVfa2V5X3NldHRpbmdzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKIAkJCQkgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LAogCQkJCSAgIHN0cnVjdCBrZXlfcGFyYW1zICpwYXJhbXMsIGludCBrZXlfaWR4LAotCQkJCSAgIGJvb2wgcGFpcndpc2UsIGNvbnN0IHU4ICptYWNfYWRkcikKJiM0MzsJCQkJICAgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsCiYjNDM7CQkJCSAgIGNvbnN0IHU4ICptYWNfYWRkcikKIHsKLQlpZiAoIWNmZzgwMjExX3ZhbGlkX2tleV9pZHgod2Rldiwga2V5X2lkeCwgcGFpcndpc2UsIG1hY19hZGRyKSkKJiM0MzsJYm9vbCBwYWlyd2lzZSA9IHR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFOwomIzQzOwomIzQzOwlpZiAoIWNmZzgwMjExX3ZhbGlkX2tleV9pZHgod2Rldiwga2V5X2lkeCwgdHlwZSwgbWFjX2FkZHIpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXN3aXRjaCAocGFyYW1zLSZndDtjaXBoZXIpIHsKQEAgLTExNzIsNyAmIzQzOzEyMDIsNyBAQCB2b2lkIGNmZzgwMjExX3VwbG9hZF9jb25uZWN0X2tleXMoc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldikKIAlmb3IgKGkgPSAwOyBpICZsdDsgNDsgaSYjNDM7JiM0MzspIHsKIAkJaWYgKCF3ZGV2LSZndDtjb25uZWN0X2tleXMtJmd0O3BhcmFtc1tpXS5jaXBoZXIpCiAJCQljb250aW51ZTsKLQkJaWYgKHJkZXZfYWRkX2tleShyZGV2LCB3ZGV2LCAtMSwgaSwgZmFsc2UsIE5VTEwsCiYjNDM7CQlpZiAocmRldl9hZGRfa2V5KHJkZXYsIHdkZXYsIC0xLCBpLCBOTDgwMjExX0tFWVRZUEVfR1JPVVAsIE5VTEwsCiAJCQkJICZhbXA7d2Rldi0mZ3Q7Y29ubmVjdF9rZXlzLSZndDtwYXJhbXNbaV0pKSB7CiAJCQluZXRkZXZfZXJyKGRldiwgJiMzNDtmYWlsZWQgdG8gc2V0IGtleSAlZFxuJiMzNDssIGkpOwogCQkJY29udGludWU7CmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvd2V4dC1jb21wYXQuYyBiL25ldC93aXJlbGVzcy93ZXh0LWNvbXBhdC5jCmluZGV4IGQ0NWJjMDhjMGRlNDkuLmVjMjM4OWY2YjhiMTggMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy93ZXh0LWNvbXBhdC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC93aXJlbGVzcy93ZXh0LWNvbXBhdC5jCkBAIC00MDEsNiAmIzQzOzQwMSw4IEBAIHN0YXRpYyBpbnQgY2ZnODAyMTFfc2V0X2VuY3J5cHRpb24oc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAogCQkJCSAgIGludCBpZHgsIHN0cnVjdCBrZXlfcGFyYW1zICpwYXJhbXMpCiB7CiAJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi0mZ3Q7aWVlZTgwMjExX3B0cjsKJiM0MzsJZW51bSBubDgwMjExX2tleV90eXBlIGtleV90eXBlID0KJiM0MzsJCXBhaXJ3aXNlID8gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFIDogTkw4MDIxMV9LRVlUWVBFX0dST1VQOwogCWludCBlcnIsIGk7CiAJYm9vbCByZWpvaW4gPSBmYWxzZTsKIApAQCAtNDU0LDExICYjNDM7NDU2LDExIEBAIHN0YXRpYyBpbnQgY2ZnODAyMTFfc2V0X2VuY3J5cHRpb24oc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAogCQkJCXJlam9pbiA9IHRydWU7CiAJCQl9CiAKLQkJCWlmICghY2ZnODAyMTFfdmFsaWRfa2V5X2lkeCh3ZGV2LCBpZHgsIHBhaXJ3aXNlLCBhZGRyKSkKJiM0MzsJCQlpZiAoIWNmZzgwMjExX3ZhbGlkX2tleV9pZHgod2RldiwgaWR4LCBrZXlfdHlwZSwgYWRkcikpCiAJCQkJZXJyID0gLUVOT0VOVDsKIAkJCWVsc2UKLQkJCQllcnIgPSByZGV2X2RlbF9rZXkocmRldiwgd2RldiwgLTEsIGlkeCwgcGFpcndpc2UsCi0JCQkJCQkgICBhZGRyKTsKJiM0MzsJCQkJZXJyID0gcmRldl9kZWxfa2V5KHJkZXYsIHdkZXYsIC0xLCBpZHgsCiYjNDM7CQkJCQkJICAga2V5X3R5cGUsIGFkZHIpOwogCQl9CiAJCXdkZXYtJmd0O3dleHQuY29ubmVjdC5wcml2YWN5ID0gZmFsc2U7CiAJCS8qCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIwOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMjQ2CgkJCQkJCQlvdXRwdXQ6IDMzNgoJCQkJCQkJdGhvdWdodHM6IDI3MDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ0lQIFN1cHBvcnQgaW4gbWFjODAyMTEgYW5kIGNmZzgwMjExOiBGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgYWRkaW5nIHNpZ25pZmljYW50IG5ldyBmdW5jdGlvbmFsaXR5IGZvciBDb250cm9sIEludGVncml0eSBQcm90b2NvbCAoQ0lQKSBzdXBwb3J0IHdpdGhpbiB0aGUgd2lyZWxlc3Mgc3RhY2suIEkgc2VlIHRoZSBhZGRpdGlvbiBvZiBgTkw4MDIxMV9LRVlUWVBFX0NJR1RLYCwgYW5kIG1vZGlmaWNhdGlvbnMgdG8gYGNmZzgwMjExX29wc2AgdG8gYWNjb21tb2RhdGUgdGhlIG5ldyBDSVAga2V5IHR5cGUsIHdoaWNoIG5hdHVyYWxseSBhbHRlcnMgdGhlIGBhZGRfa2V5YCwgYGdldF9rZXlgLCBhbmQgYGRlbF9rZXlgIG9wZXJhdGlvbnMuIEkmIzM5O20gYWxzbyBub3RpY2luZyBuZXcgbmV0bGluayBhdHRyaWJ1dGVzIChgTkw4MDIxMV9BVFRSX0FTU09DX0NJUGAsIGBOTDgwMjExX0FUVFJfQ0lQX0NBUEFCSUxJVElFU2AsIGBOTDgwMjExX1NUQV9GTEFHX0NJUGApIGFuZCBtb2RpZmljYXRpb25zIHdpdGhpbiBgbWFjODAyMTFgIGl0c2VsZiB0byBwcm9jZXNzIENJUCBrZXlzLCBpbmNsdWRpbmcgdGhlIGludHJvZHVjdGlvbiBvZiBgSUVFRTgwMjExX0tFWV9GTEFHX0NJUGAsIGFuZCBoYW5kbGluZyB0aGUgYGNpZ3RrYCBhcnJheS4KCkEga2V5IGluZGljYXRvciBmb3IgZnV6emluZyBpcyB0aGUgaW50ZWdyYXRpb24gb2YgQ0lQIHN1cHBvcnQgaW50byBgbWFjODAyMTFfaHdzaW1gLiBUaGUgcGF0Y2ggZXhwbGljaXRseSBlbmFibGVzIGBtYWM4MDIxMV9od3NpbWAgdG8gdGVzdCB0aGlzIGZlYXR1cmUuIFRoaXMgbWVhbnMgSSBoYXZlIGEgcmVhZGlseSBhdmFpbGFibGUgZW52aXJvbm1lbnQgdG8gdmFsaWRhdGUgYW5kIGV4cGxvcmUgdGhlIGltcGxlbWVudGF0aW9uLgoKVGhlIGNoYW5nZXMgaW4gYG5sODAyMTEuY2AgdG8gaGFuZGxlIHRoZSBuZXcgYXR0cmlidXRlcyBhbmQga2V5IHR5cGVzLCBhbmQgdGhlIGFkanVzdG1lbnRzIGluIGBtYWM4MDIxMWAgdG8gcGFyc2UgYFdMQU5fRUlEX0VYVF9DSVBfQ0FQQWAgYXJlIGdvb2QgaW5kaWNhdGlvbnMgb2YgYXJlYXMgdGhhdCB3YXJyYW50IGF0dGVudGlvbi4gU28sIGdpdmVuIHRoZXNlIGZ1bmN0aW9uYWwgY2hhbmdlcywgdGhpcyBwYXRjaCBpcyBhYnNvbHV0ZWx5IHdvcnRoIGZ1enppbmcuCgpNeSBwcmltYXJ5IGZvY3VzIHBvaW50cyBmb3IgZnV6emluZyB3b3VsZCBiZSB0aGUgbmV0bGluayBlbnRyeSBwb2ludHMsIHRoZXNlIGFyZSB0aGUgZXhwb3NlZCBlbnRyeSBwb2ludHMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dDoKKiAgIGBubDgwMjExX25ld19rZXlgCiogICBgbmw4MDIxMV9kZWxfa2V5YAoqICAgYG5sODAyMTFfZ2V0X2tleWAKKiAgIGBubDgwMjExX3NldF9zdGF0aW9uYAoqICAgYG5sODAyMTFfbmV3X3N0YXRpb25gCiogICBgbmw4MDIxMV9hc3NvY2lhdGVgCgpUaGUga2VybmVsLWludGVybmFsIGVudHJ5IHBvaW50cyB0aGF0IHdvdWxkIGFsc28gYmUgaW50ZXJlc3RpbmcgaW5jbHVkZToKKiAgIGBpZWVlODAyMTFfa2V5X2xpbmtgCiogICBgaWVlZTgwMjExX2d0a19yZWtleV9hZGRgCiogICBgaWVlZTgwMjExX3B1dF9jaXBfY2FwYAoqICAgYGNmZzgwMjExX2NpZ3RrX3N1cHBvcnRlZGAKKiAgIGBjZmc4MDIxMV92YWxpZF9rZXlfaWR4YAoqICAgYGNmZzgwMjExX3ZhbGlkYXRlX2tleV9zZXR0aW5nc2AKCkluIHRlcm1zIG9mIGNvbmZpZ3VyYXRpb24sIEkmIzM5O2xsIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZSBgQ09ORklHX0NGRzgwMjExYCwgYENPTkZJR19NQUM4MDIxMWAgYW5kIGBDT05GSUdfTUFDODAyMTFfSFdTSU1gIGVuYWJsZWQsIHdoaWNoIGFyZSBzdGFuZGFyZCBmb3Igd2lyZWxlc3MgdGVzdGluZyBhbmQgZnV6emluZy4KClRoZSBjaGFuZ2VzIGluIGBtYWM4MDIxMV9od3NpbV9pZnR5cGVzX2V4dF9jYXBhYCB0byBhZGQgYGNpcF9zdXBwb3J0ZWQgPSB0cnVlYCBtYWtlcyBpdCBwZXJmZWN0IGZvciBsb2NhbCB0ZXN0aW5nIG9mIHRoaXMgbmV3IGZ1bmN0aW9uYWxpdHksIHNvIHRoYXQgd2lsbCBtYWtlIHZhbGlkYXRpb24gYSBsb3QgZWFzaWVyLiBBbGwgb2YgdGhpcyBzaG91bGQgYmUgZG9hYmxlLCBhbmQgaXQgbG9va3MgbGlrZSBhIGdvb2QgdGFyZ2V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIwOjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNQUM4MDIxMSYjMzQ7LAogICAgJiMzNDtDRkc4MDIxMSYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMV9IV1NJTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25sODAyMTFfbmV3X2tleSYjMzQ7LAogICAgJiMzNDtubDgwMjExX2RlbF9rZXkmIzM0OywKICAgICYjMzQ7bmw4MDIxMV9nZXRfa2V5JiMzNDssCiAgICAmIzM0O25sODAyMTFfc2V0X3N0YXRpb24mIzM0OywKICAgICYjMzQ7bmw4MDIxMV9uZXdfc3RhdGlvbiYjMzQ7LAogICAgJiMzNDtubDgwMjExX2Fzc29jaWF0ZSYjMzQ7LAogICAgJiMzNDtpZWVlODAyMTFfa2V5X2xpbmsmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX2d0a19yZWtleV9hZGQmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX3B1dF9jaXBfY2FwJiMzNDssCiAgICAmIzM0O2NmZzgwMjExX2NpZ3RrX3N1cHBvcnRlZCYjMzQ7LAogICAgJiMzNDtjZmc4MDIxMV92YWxpZF9rZXlfaWR4JiMzNDssCiAgICAmIzM0O2NmZzgwMjExX3ZhbGlkYXRlX2tleV9zZXR0aW5ncyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIHRoZSBDb250cm9sIEludGVncml0eSBQcm90b2NvbCAoQ0lQKSBpbiBjZmc4MDIxMSBhbmQgbWFjODAyMTEsIGluY2x1ZGluZyBhIG5ldyBrZXkgdHlwZSBgTkw4MDIxMV9LRVlUWVBFX0NJR1RLYCBhbmQgbmV3IG5ldGxpbmsgYXR0cmlidXRlcy4gSXQgbW9kaWZpZXMga2V5IGhhbmRsaW5nIGxvZ2ljIGFjcm9zcyB0aGUgd2lyZWxlc3Mgc3RhY2sgYW5kIHVwZGF0ZXMgYG1hYzgwMjExX2h3c2ltYCB0byBhZHZlcnRpc2UgQ0lQIHN1cHBvcnQsIG1ha2luZyBpdCB0ZXN0YWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRoZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgdmlhIHN0YW5kYXJkIG5sODAyMTEgbmV0bGluayBjb21tYW5kcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUFDODAyMTEmIzM0OywKICAgICYjMzQ7Q0ZHODAyMTEmIzM0OywKICAgICYjMzQ7TUFDODAyMTFfSFdTSU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtubDgwMjExX25ld19rZXkmIzM0OywKICAgICYjMzQ7bmw4MDIxMV9kZWxfa2V5JiMzNDssCiAgICAmIzM0O25sODAyMTFfZ2V0X2tleSYjMzQ7LAogICAgJiMzNDtubDgwMjExX3NldF9zdGF0aW9uJiMzNDssCiAgICAmIzM0O25sODAyMTFfbmV3X3N0YXRpb24mIzM0OywKICAgICYjMzQ7bmw4MDIxMV9hc3NvY2lhdGUmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX2tleV9saW5rJiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9ndGtfcmVrZXlfYWRkJiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9wdXRfY2lwX2NhcCYjMzQ7LAogICAgJiMzNDtjZmc4MDIxMV9jaWd0a19zdXBwb3J0ZWQmIzM0OywKICAgICYjMzQ7Y2ZnODAyMTFfdmFsaWRfa2V5X2lkeCYjMzQ7LAogICAgJiMzNDtjZmc4MDIxMV92YWxpZGF0ZV9rZXlfc2V0dGluZ3MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciB0aGUgQ29udHJvbCBJbnRlZ3JpdHkgUHJvdG9jb2wgKENJUCkgaW4gY2ZnODAyMTEgYW5kIG1hYzgwMjExLCBpbmNsdWRpbmcgYSBuZXcga2V5IHR5cGUgYE5MODAyMTFfS0VZVFlQRV9DSUdUS2AgYW5kIG5ldyBuZXRsaW5rIGF0dHJpYnV0ZXMuIEl0IG1vZGlmaWVzIGtleSBoYW5kbGluZyBsb2dpYyBhY3Jvc3MgdGhlIHdpcmVsZXNzIHN0YWNrIGFuZCB1cGRhdGVzIGBtYWM4MDIxMV9od3NpbWAgdG8gYWR2ZXJ0aXNlIENJUCBzdXBwb3J0LCBtYWtpbmcgaXQgdGVzdGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBUaGUgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBubDgwMjExIG5ldGxpbmsgY29tbWFuZHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMDowMjoyNi4wNzQzMTY5NloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1OTYyNTgxODgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1BQzgwMjExXCIsXG4gICAgXCJDRkc4MDIxMVwiLFxuICAgIFwiTUFDODAyMTFfSFdTSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJubDgwMjExX25ld19rZXlcIixcbiAgICBcIm5sODAyMTFfZGVsX2tleVwiLFxuICAgIFwibmw4MDIxMV9nZXRfa2V5XCIsXG4gICAgXCJubDgwMjExX3NldF9zdGF0aW9uXCIsXG4gICAgXCJubDgwMjExX25ld19zdGF0aW9uXCIsXG4gICAgXCJubDgwMjExX2Fzc29jaWF0ZVwiLFxuICAgIFwiaWVlZTgwMjExX2tleV9saW5rXCIsXG4gICAgXCJpZWVlODAyMTFfZ3RrX3Jla2V5X2FkZFwiLFxuICAgIFwiaWVlZTgwMjExX3B1dF9jaXBfY2FwXCIsXG4gICAgXCJjZmc4MDIxMV9jaWd0a19zdXBwb3J0ZWRcIixcbiAgICBcImNmZzgwMjExX3ZhbGlkX2tleV9pZHhcIixcbiAgICBcImNmZzgwMjExX3ZhbGlkYXRlX2tleV9zZXR0aW5nc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgdGhlIENvbnRyb2wgSW50ZWdyaXR5IFByb3RvY29sIChDSVApIGluIGNmZzgwMjExIGFuZCBtYWM4MDIxMSwgaW5jbHVkaW5nIGEgbmV3IGtleSB0eXBlIGBOTDgwMjExX0tFWVRZUEVfQ0lHVEtgIGFuZCBuZXcgbmV0bGluayBhdHRyaWJ1dGVzLiBJdCBtb2RpZmllcyBrZXkgaGFuZGxpbmcgbG9naWMgYWNyb3NzIHRoZSB3aXJlbGVzcyBzdGFjayBhbmQgdXBkYXRlcyBgbWFjODAyMTFfaHdzaW1gIHRvIGFkdmVydGlzZSBDSVAgc3VwcG9ydCwgbWFraW5nIGl0IHRlc3RhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgbmw4MDIxMSBuZXRsaW5rIGNvbW1hbmRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMDowMjoyNi4wNzQzMjM2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjE5OTA2MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmOWI0ZDlkMzUyYzcwMjI1MzljMzAyZGQwNTE4ZTIyNjAzNzU5ZDIwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgQXVnIDEgMjA6MDI6MjUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jZmc4MDIxMS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jZmc4MDIxMS5jXFxuaW5kZXggZWNkZTkxMTU5YjU0Ni4uZDRlOTQyM2ZjNWU0ZCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NmZzgwMjExLmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NmZzgwMjExLmNcXG5AQCAtMTEyNSwxMyArMTEyNSwxNSBAQCB2b2lkIGF0aDZrbF9jZmc4MDIxMV9jaF9zd2l0Y2hfbm90aWZ5KHN0cnVjdCBhdGg2a2xfdmlmICp2aWYsIGludCBmcmVxLFxcbiB9XFxuIFxcbiBzdGF0aWMgaW50IGF0aDZrbF9jZmc4MDIxMV9hZGRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxuLVxcdFxcdFxcdFxcdCAgIGludCBsaW5rX2lkLCB1OCBrZXlfaW5kZXgsIGJvb2wgcGFpcndpc2UsXFxuK1xcdFxcdFxcdFxcdCAgIGludCBsaW5rX2lkLCB1OCBrZXlfaW5kZXgsXFxuK1xcdFxcdFxcdFxcdCAgIGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLFxcbiBcXHRcXHRcXHRcXHQgICBjb25zdCB1OCAqbWFjX2FkZHIsXFxuIFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBrZXlfcGFyYW1zICpwYXJhbXMpXFxuIHtcXG4gXFx0c3RydWN0IGF0aDZrbCAqYXIgPSBhdGg2a2xfcHJpdih3ZGV2LVxcdTAwM2VuZXRkZXYpO1xcbiBcXHRzdHJ1Y3QgYXRoNmtsX3ZpZiAqdmlmID0gbmV0ZGV2X3ByaXYod2Rldi1cXHUwMDNlbmV0ZGV2KTtcXG4gXFx0c3RydWN0IGF0aDZrbF9rZXkgKmtleSA9IE5VTEw7XFxuK1xcdGJvb2wgcGFpcndpc2UgPSB0eXBlID09IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRTtcXG4gXFx0aW50IHNlcV9sZW47XFxuIFxcdHU4IGtleV91c2FnZTtcXG4gXFx0dTgga2V5X3R5cGU7XFxuQEAgLTEyNTAsNyArMTI1Miw4IEBAIHN0YXRpYyBpbnQgYXRoNmtsX2NmZzgwMjExX2FkZF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RlXFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgYXRoNmtsX2NmZzgwMjExX2RlbF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcXG4tXFx0XFx0XFx0XFx0ICAgaW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCwgYm9vbCBwYWlyd2lzZSxcXG4rXFx0XFx0XFx0XFx0ICAgaW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCxcXG4rXFx0XFx0XFx0XFx0ICAgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsXFxuIFxcdFxcdFxcdFxcdCAgIGNvbnN0IHU4ICptYWNfYWRkcilcXG4ge1xcbiBcXHRzdHJ1Y3QgYXRoNmtsICphciA9IGF0aDZrbF9wcml2KHdkZXYtXFx1MDAzZW5ldGRldik7XFxuQEAgLTEyODAsNyArMTI4Myw4IEBAIHN0YXRpYyBpbnQgYXRoNmtsX2NmZzgwMjExX2RlbF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RlXFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgYXRoNmtsX2NmZzgwMjExX2dldF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcXG4tXFx0XFx0XFx0XFx0ICAgaW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCwgYm9vbCBwYWlyd2lzZSxcXG4rXFx0XFx0XFx0XFx0ICAgaW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCxcXG4rXFx0XFx0XFx0XFx0ICAgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsXFxuIFxcdFxcdFxcdFxcdCAgIGNvbnN0IHU4ICptYWNfYWRkciwgdm9pZCAqY29va2llLFxcbiBcXHRcXHRcXHRcXHQgICB2b2lkICgqY2FsbGJhY2spICh2b2lkICpjb29raWUsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGtleV9wYXJhbXMgKikpXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC93aWw2MjEwL2NmZzgwMjExLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvd2lsNjIxMC9jZmc4MDIxMS5jXFxuaW5kZXggNWYyYmQ5YTMxZmFmNi4uYzA5NzgzMWI3ZmFmMyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvd2lsNjIxMC9jZmc4MDIxMS5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3dpbDYyMTAvY2ZnODAyMTEuY1xcbkBAIC0xNjIxLDExICsxNjIxLDEzIEBAIHN0YXRpYyB2b2lkIHdpbF9kZWxfcnhfa2V5KHU4IGtleV9pbmRleCwgZW51bSB3bWlfa2V5X3VzYWdlIGtleV91c2FnZSxcXG4gXFxuIHN0YXRpYyBpbnQgd2lsX2NmZzgwMjExX2FkZF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSxcXG4gXFx0XFx0XFx0XFx0c3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwgaW50IGxpbmtfaWQsXFxuLVxcdFxcdFxcdFxcdHU4IGtleV9pbmRleCwgYm9vbCBwYWlyd2lzZSxcXG4rXFx0XFx0XFx0XFx0dTgga2V5X2luZGV4LFxcbitcXHRcXHRcXHRcXHRlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSxcXG4gXFx0XFx0XFx0XFx0Y29uc3QgdTggKm1hY19hZGRyLFxcbiBcXHRcXHRcXHRcXHRzdHJ1Y3Qga2V5X3BhcmFtcyAqcGFyYW1zKVxcbiB7XFxuIFxcdGludCByYztcXG4rXFx0Ym9vbCBwYWlyd2lzZSA9IHR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFO1xcbiBcXHRzdHJ1Y3Qgd2lsNjIxMF9wcml2ICp3aWwgPSB3aXBoeV90b193aWwod2lwaHkpO1xcbiBcXHRzdHJ1Y3Qgd2lsNjIxMF92aWYgKnZpZiA9IHdkZXZfdG9fdmlmKHdpbCwgd2Rldik7XFxuIFxcdGVudW0gd21pX2tleV91c2FnZSBrZXlfdXNhZ2UgPSB3aWxfZGV0ZWN0X2tleV91c2FnZSh3ZGV2LCBwYWlyd2lzZSk7XFxuQEAgLTE2OTYsMTIgKzE2OTgsMTQgQEAgc3RhdGljIGludCB3aWxfY2ZnODAyMTFfYWRkX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxcbiBcXG4gc3RhdGljIGludCB3aWxfY2ZnODAyMTFfZGVsX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxcbiBcXHRcXHRcXHRcXHRzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LCBpbnQgbGlua19pZCxcXG4tXFx0XFx0XFx0XFx0dTgga2V5X2luZGV4LCBib29sIHBhaXJ3aXNlLFxcbitcXHRcXHRcXHRcXHR1OCBrZXlfaW5kZXgsXFxuK1xcdFxcdFxcdFxcdGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLFxcbiBcXHRcXHRcXHRcXHRjb25zdCB1OCAqbWFjX2FkZHIpXFxuIHtcXG4gXFx0c3RydWN0IHdpbDYyMTBfcHJpdiAqd2lsID0gd2lwaHlfdG9fd2lsKHdpcGh5KTtcXG4gXFx0c3RydWN0IHdpbDYyMTBfdmlmICp2aWYgPSB3ZGV2X3RvX3ZpZih3aWwsIHdkZXYpO1xcbi1cXHRlbnVtIHdtaV9rZXlfdXNhZ2Uga2V5X3VzYWdlID0gd2lsX2RldGVjdF9rZXlfdXNhZ2Uod2RldiwgcGFpcndpc2UpO1xcbitcXHRlbnVtIHdtaV9rZXlfdXNhZ2Uga2V5X3VzYWdlID1cXG4rXFx0XFx0d2lsX2RldGVjdF9rZXlfdXNhZ2Uod2RldiwgdHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0UpO1xcbiBcXHRzdHJ1Y3Qgd2lsX3N0YV9pbmZvICpjcyA9IHdpbF9maW5kX3N0YV9ieV9rZXlfdXNhZ2Uod2lsLCB2aWYtXFx1MDAzZW1pZCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIGtleV91c2FnZSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIG1hY19hZGRyKTtcXG5AQCAtMjA3Miw3ICsyMDc2LDggQEAgdm9pZCB3aWxfY2ZnODAyMTFfYXBfcmVjb3Zlcnkoc3RydWN0IHdpbDYyMTBfcHJpdiAqd2lsKVxcbiBcXHRcXHRrZXlfcGFyYW1zLnNlcV9sZW4gPSBJRUVFODAyMTFfR0NNUF9QTl9MRU47XFxuIFxcdFxcdHJjID0gd2lsX2NmZzgwMjExX2FkZF9rZXkod2lwaHksIHZpZl90b193ZGV2KHZpZiksIC0xLFxcbiBcXHRcXHRcXHRcXHRcXHQgIHZpZi1cXHUwMDNlZ3RrX2luZGV4LFxcbi1cXHRcXHRcXHRcXHRcXHQgIGZhbHNlLCBOVUxMLCBcXHUwMDI2a2V5X3BhcmFtcyk7XFxuK1xcdFxcdFxcdFxcdFxcdCAgTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFLFxcbitcXHRcXHRcXHRcXHRcXHQgIE5VTEwsIFxcdTAwMjZrZXlfcGFyYW1zKTtcXG4gXFx0XFx0aWYgKHJjKVxcbiBcXHRcXHRcXHR3aWxfZXJyKHdpbCwgXFxcInZpZiAlZCByZWNvdmVyeSBhZGQga2V5IGZhaWxlZCAoJWQpXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHRpLCByYyk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmNcXG5pbmRleCA2YjJjMzRlM2E3OTZjLi43ODVmZDU3ZDdjNmNjIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmNcXG5AQCAtMjc3MCw3ICsyNzcwLDggQEAgYnJjbWZfY2ZnODAyMTFfY29uZmlnX2RlZmF1bHRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbiBcXG4gc3RhdGljIHMzMlxcbiBicmNtZl9jZmc4MDIxMV9kZWxfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxuLVxcdFxcdCAgICAgICBpbnQgbGlua19pZCwgdTgga2V5X2lkeCwgYm9vbCBwYWlyd2lzZSxcXG4rXFx0XFx0ICAgICAgIGludCBsaW5rX2lkLCB1OCBrZXlfaWR4LFxcbitcXHRcXHQgICAgICAgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsXFxuIFxcdFxcdCAgICAgICBjb25zdCB1OCAqbWFjX2FkZHIpXFxuIHtcXG4gXFx0c3RydWN0IGJyY21mX2lmICppZnAgPSBuZXRkZXZfcHJpdih3ZGV2LVxcdTAwM2VuZXRkZXYpO1xcbkBAIC0yODA4LDcgKzI4MDksOCBAQCBicmNtZl9jZmc4MDIxMV9kZWxfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxuIFxcbiBzdGF0aWMgczMyXFxuIGJyY21mX2NmZzgwMjExX2FkZF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcXG4tXFx0XFx0ICAgICAgIGludCBsaW5rX2lkLCB1OCBrZXlfaWR4LCBib29sIHBhaXJ3aXNlLFxcbitcXHRcXHQgICAgICAgaW50IGxpbmtfaWQsIHU4IGtleV9pZHgsXFxuK1xcdFxcdCAgICAgICBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSxcXG4gXFx0XFx0ICAgICAgIGNvbnN0IHU4ICptYWNfYWRkciwgc3RydWN0IGtleV9wYXJhbXMgKnBhcmFtcylcXG4ge1xcbiBcXHRzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfaW5mbyAqY2ZnID0gd2lwaHlfdG9fY2ZnKHdpcGh5KTtcXG5AQCAtMjgzNCw3ICsyODM2LDcgQEAgYnJjbWZfY2ZnODAyMTFfYWRkX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxcbiBcXG4gXFx0aWYgKHBhcmFtcy1cXHUwMDNla2V5X2xlbiA9PSAwKVxcbiBcXHRcXHRyZXR1cm4gYnJjbWZfY2ZnODAyMTFfZGVsX2tleSh3aXBoeSwgd2RldiwgLTEsIGtleV9pZHgsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgIHBhaXJ3aXNlLCBtYWNfYWRkcik7XFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIHR5cGUsIG1hY19hZGRyKTtcXG4gXFxuIFxcdGlmIChwYXJhbXMtXFx1MDAzZWtleV9sZW4gXFx1MDAzZSBzaXplb2Yoa2V5LVxcdTAwM2VkYXRhKSkge1xcbiBcXHRcXHRicGh5X2VycihkcnZyLCBcXFwiVG9vIGxvbmcga2V5IGxlbmd0aCAoJXUpXFxcXG5cXFwiLCBwYXJhbXMtXFx1MDAzZWtleV9sZW4pO1xcbkBAIC0yOTMwLDcgKzI5MzIsOCBAQCBicmNtZl9jZmc4MDIxMV9hZGRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxuIFxcbiBzdGF0aWMgczMyXFxuIGJyY21mX2NmZzgwMjExX2dldF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcXG4tXFx0XFx0ICAgICAgIGludCBsaW5rX2lkLCB1OCBrZXlfaWR4LCBib29sIHBhaXJ3aXNlLFxcbitcXHRcXHQgICAgICAgaW50IGxpbmtfaWQsIHU4IGtleV9pZHgsXFxuK1xcdFxcdCAgICAgICBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSxcXG4gXFx0XFx0ICAgICAgIGNvbnN0IHU4ICptYWNfYWRkciwgdm9pZCAqY29va2llLFxcbiBcXHRcXHQgICAgICAgdm9pZCAoKmNhbGxiYWNrKSh2b2lkICpjb29raWUsXFxuIFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBrZXlfcGFyYW1zICpwYXJhbXMpKVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9kMy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvZDMuY1xcbmluZGV4IDU1ZjliODA5ZTc2NGQuLjZkOGVkZTMzNmQ1OWIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvZDMuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL2QzLmNcXG5AQCAtMTEzOCw3ICsxMTM4LDggQEAgaXdsX21sZF9hZGRfbWNhc3RfcmVrZXkoc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0a2V5X2NvbmZpZyA9IGllZWU4MDIxMV9ndGtfcmVrZXlfYWRkKHZpZiwga2V5X2RhdGEtXFx1MDAzZWlkLCBrZXlfZGF0YS1cXHUwMDNla2V5LFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgIHNpemVvZihrZXlfZGF0YS1cXHUwMDNla2V5KSwgbGlua19pZCk7XFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgc2l6ZW9mKGtleV9kYXRhLVxcdTAwM2VrZXkpLCBsaW5rX2lkLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIGZhbHNlKTtcXG4gXFx0aWYgKElTX0VSUihrZXlfY29uZmlnKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG5AQCAtMTIyMCw3ICsxMjIxLDggQEAgc3RhdGljIHZvaWQgaXdsX21sZF9tbG9fcmVrZXkoc3RydWN0IGl3bF9tbGQgKm1sZCxcXG4gXFx0XFx0XFx0XFx0IG1sb19rZXktXFx1MDAzZWlkeCwgbGlua19pZCk7XFxuIFxcbiBcXHRcXHRrZXkgPSBpZWVlODAyMTFfZ3RrX3Jla2V5X2FkZCh2aWYsIG1sb19rZXktXFx1MDAzZWlkeCwgbWxvX2tleS1cXHUwMDNla2V5LFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICBzaXplb2YobWxvX2tleS1cXHUwMDNla2V5KSwgbGlua19pZCk7XFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIHNpemVvZihtbG9fa2V5LVxcdTAwM2VrZXkpLCBsaW5rX2lkLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBmYWxzZSk7XFxuIFxcbiBcXHRcXHRpZiAoSVNfRVJSKGtleSkpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9kMy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vZDMuY1xcbmluZGV4IDZiMTFmYTMyZWE1YzYuLmJkNTJmMmViZDNiYTEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vZDMuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL2QzLmNcXG5AQCAtMTg4Nyw3ICsxODg3LDggQEAgc3RhdGljIGJvb2wgaXdsX212bV9ndGtfcmVrZXkoc3RydWN0IGl3bF93b3dsYW5fc3RhdHVzX2RhdGEgKnN0YXR1cyxcXG4gXFxuIFxcdFxcdGtleSA9IGllZWU4MDIxMV9ndGtfcmVrZXlfYWRkKHZpZiwgc3RhdHVzLVxcdTAwM2VndGtbaV0uaWQsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgIHN0YXR1cy1cXHUwMDNlZ3RrW2ldLmtleSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICAgc2l6ZW9mKHN0YXR1cy1cXHUwMDNlZ3RrW2ldLmtleSksIC0xKTtcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgc2l6ZW9mKHN0YXR1cy1cXHUwMDNlZ3RrW2ldLmtleSksIC0xLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBmYWxzZSk7XFxuIFxcdFxcdGlmIChJU19FUlIoa2V5KSkge1xcbiBcXHRcXHRcXHQvKiBGVyBtYXkgc2VuZCBhbHNvIHRoZSBvbGQga2V5cyAqL1xcbiBcXHRcXHRcXHRpZiAoUFRSX0VSUihrZXkpID09IC1FQUxSRUFEWSlcXG5AQCAtMTkyMiw3ICsxOTIzLDggQEAgaXdsX212bV9kM19pZ3RrX2JpZ3RrX3Jla2V5X2FkZChzdHJ1Y3QgaXdsX3dvd2xhbl9zdGF0dXNfZGF0YSAqc3RhdHVzLFxcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFxuIFxcdGtleV9jb25maWcgPSBpZWVlODAyMTFfZ3RrX3Jla2V5X2FkZCh2aWYsIGtleWlkeCwga2V5X2RhdGEtXFx1MDAzZWtleSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICBzaXplb2Yoa2V5X2RhdGEtXFx1MDAzZWtleSksIC0xKTtcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBzaXplb2Yoa2V5X2RhdGEtXFx1MDAzZWtleSksIC0xLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIGZhbHNlKTtcXG4gXFx0aWYgKElTX0VSUihrZXlfY29uZmlnKSkge1xcbiBcXHRcXHQvKiBGVyBtYXkgc2VuZCBhbHNvIHRoZSBvbGQga2V5cyAqL1xcbiBcXHRcXHRyZXR1cm4gUFRSX0VSUihrZXlfY29uZmlnKSA9PSAtRUFMUkVBRFk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvY2ZnLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2NmZy5jXFxuaW5kZXggNzJjOTJmNzI0NjlkZS4uZTAxNWNmYTE5NTBjMSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2NmZy5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9jZmcuY1xcbkBAIC0xNTA4LDcgKzE1MDgsOCBAQCBzdGF0aWMgaW50IGxic19jZmdfc2V0X2RlZmF1bHRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksXFxuIFxcbiBcXG4gc3RhdGljIGludCBsYnNfY2ZnX2FkZF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcXG4tXFx0XFx0XFx0ICAgaW50IGxpbmtfaWQsIHU4IGlkeCwgYm9vbCBwYWlyd2lzZSxcXG4rXFx0XFx0XFx0ICAgaW50IGxpbmtfaWQsIHU4IGlkeCxcXG4rXFx0XFx0XFx0ICAgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsXFxuIFxcdFxcdFxcdCAgIGNvbnN0IHU4ICptYWNfYWRkciwgc3RydWN0IGtleV9wYXJhbXMgKnBhcmFtcylcXG4ge1xcbiBcXHRzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSB3aXBoeV9wcml2KHdpcGh5KTtcXG5AQCAtMTU2OSw3ICsxNTcwLDggQEAgc3RhdGljIGludCBsYnNfY2ZnX2FkZF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcXG4gXFxuIFxcbiBzdGF0aWMgaW50IGxic19jZmdfZGVsX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxcbi1cXHRcXHRcXHQgICBpbnQgbGlua19pZCwgdTgga2V5X2luZGV4LCBib29sIHBhaXJ3aXNlLFxcbitcXHRcXHRcXHQgICBpbnQgbGlua19pZCwgdTgga2V5X2luZGV4LFxcbitcXHRcXHRcXHQgICBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSxcXG4gXFx0XFx0XFx0ICAgY29uc3QgdTggKm1hY19hZGRyKVxcbiB7XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvY2ZnODAyMTEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9jZmc4MDIxMS5jXFxuaW5kZXggOGVjMmQyMmE4YzMzYS4uMDYwYzM1MWNlY2MwNiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvY2ZnODAyMTEuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9jZmc4MDIxMS5jXFxuQEAgLTE0MiwxMiArMTQyLDE0IEBAIHN0YXRpYyB2b2lkICptd2lmaWV4X2NmZzgwMjExX2dldF9hZGFwdGVyKHN0cnVjdCB3aXBoeSAqd2lwaHkpXFxuICAqL1xcbiBzdGF0aWMgaW50XFxuIG13aWZpZXhfY2ZnODAyMTFfZGVsX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxcbi1cXHRcXHRcXHQgaW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCwgYm9vbCBwYWlyd2lzZSxcXG4rXFx0XFx0XFx0IGludCBsaW5rX2lkLCB1OCBrZXlfaW5kZXgsXFxuK1xcdFxcdFxcdGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLFxcbiBcXHRcXHRcXHQgY29uc3QgdTggKm1hY19hZGRyKVxcbiB7XFxuIFxcdHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYgPSBtd2lmaWV4X25ldGRldl9nZXRfcHJpdih3ZGV2LVxcdTAwM2VuZXRkZXYpO1xcbiBcXHRzdGF0aWMgY29uc3QgdTggYmNfbWFjW10gPSB7MHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZn07XFxuLVxcdGNvbnN0IHU4ICpwZWVyX21hYyA9IHBhaXJ3aXNlID8gbWFjX2FkZHIgOiBiY19tYWM7XFxuK1xcdGNvbnN0IHU4ICpwZWVyX21hYyA9XFxuK1xcdFxcdCh0eXBlID09IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRSkgPyBtYWNfYWRkciA6IGJjX21hYztcXG4gXFxuIFxcdGlmIChtd2lmaWV4X3NldF9lbmNvZGUocHJpdiwgTlVMTCwgTlVMTCwgMCwga2V5X2luZGV4LCBwZWVyX21hYywgMSkpIHtcXG4gXFx0XFx0bXdpZmlleF9kYmcocHJpdi1cXHUwMDNlYWRhcHRlciwgRVJST1IsIFxcXCJkZWxldGluZyB0aGUgY3J5cHRvIGtleXNcXFxcblxcXCIpO1xcbkBAIC00ODIsMTMgKzQ4NCwxNSBAQCBtd2lmaWV4X2NmZzgwMjExX3NldF9kZWZhdWx0X2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbiAgKi9cXG4gc3RhdGljIGludFxcbiBtd2lmaWV4X2NmZzgwMjExX2FkZF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcXG4tXFx0XFx0XFx0IGludCBsaW5rX2lkLCB1OCBrZXlfaW5kZXgsIGJvb2wgcGFpcndpc2UsXFxuK1xcdFxcdFxcdCBpbnQgbGlua19pZCwgdTgga2V5X2luZGV4LFxcbitcXHRcXHRcXHQgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsXFxuIFxcdFxcdFxcdCBjb25zdCB1OCAqbWFjX2FkZHIsIHN0cnVjdCBrZXlfcGFyYW1zICpwYXJhbXMpXFxuIHtcXG4gXFx0c3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiA9IG13aWZpZXhfbmV0ZGV2X2dldF9wcml2KHdkZXYtXFx1MDAzZW5ldGRldik7XFxuIFxcdHN0cnVjdCBtd2lmaWV4X3dlcF9rZXkgKndlcF9rZXk7XFxuIFxcdHN0YXRpYyBjb25zdCB1OCBiY19tYWNbXSA9IHsweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmfTtcXG4tXFx0Y29uc3QgdTggKnBlZXJfbWFjID0gcGFpcndpc2UgPyBtYWNfYWRkciA6IGJjX21hYztcXG4rXFx0Y29uc3QgdTggKnBlZXJfbWFjID1cXG4rXFx0XFx0KHR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFKSA/IG1hY19hZGRyIDogYmNfbWFjO1xcbiBcXG4gXFx0aWYgKEdFVF9CU1NfUk9MRShwcml2KSA9PSBNV0lGSUVYX0JTU19ST0xFX1VBUCBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgKHBhcmFtcy1cXHUwMDNlY2lwaGVyID09IFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDQwIHx8XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21pY3JvY2hpcC93aWxjMTAwMC9jZmc4MDIxMS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWljcm9jaGlwL3dpbGMxMDAwL2NmZzgwMjExLmNcXG5pbmRleCA2NjU0ZmNlNGRlZDg0Li43ODUwZTBhNDgzOTA3IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21pY3JvY2hpcC93aWxjMTAwMC9jZmc4MDIxMS5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWljcm9jaGlwL3dpbGMxMDAwL2NmZzgwMjExLmNcXG5AQCAtNTM1LDEwICs1MzUsMTMgQEAgc3RhdGljIGludCB3aWxjX3dmaV9jZmdfY29weV93cGFfaW5mbyhzdHJ1Y3Qgd2lsY193Zmlfa2V5ICprZXlfaW5mbyxcXG4gfVxcbiBcXG4gc3RhdGljIGludCBhZGRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsIGludCBsaW5rX2lkLFxcbi1cXHRcXHQgICB1OCBrZXlfaW5kZXgsIGJvb2wgcGFpcndpc2UsIGNvbnN0IHU4ICptYWNfYWRkcixcXG4rXFx0XFx0ICAgdTgga2V5X2luZGV4LFxcbitcXHRcXHQgICBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSxcXG4rXFx0XFx0ICAgY29uc3QgdTggKm1hY19hZGRyLFxcbiBcXHRcXHQgICBzdHJ1Y3Qga2V5X3BhcmFtcyAqcGFyYW1zKVxcbiBcXG4ge1xcbitcXHRib29sIHBhaXJ3aXNlID0gdHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0U7XFxuIFxcdGludCByZXQgPSAwLCBrZXlsZW4gPSBwYXJhbXMtXFx1MDAzZWtleV9sZW47XFxuIFxcdGNvbnN0IHU4ICpyeF9taWMgPSBOVUxMO1xcbiBcXHRjb25zdCB1OCAqdHhfbWljID0gTlVMTDtcXG5AQCAtNjQxLDkgKzY0NCwxMCBAQCBzdGF0aWMgaW50IGFkZF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwgaW50IGxpbmtfaWQsXFxuIFxcbiBzdGF0aWMgaW50IGRlbF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwgaW50IGxpbmtfaWQsXFxuIFxcdFxcdCAgIHU4IGtleV9pbmRleCxcXG4tXFx0XFx0ICAgYm9vbCBwYWlyd2lzZSxcXG4rXFx0XFx0ICAgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsXFxuIFxcdFxcdCAgIGNvbnN0IHU4ICptYWNfYWRkcilcXG4ge1xcbitcXHRib29sIHBhaXJ3aXNlID0gdHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0U7XFxuIFxcdHN0cnVjdCB3aWxjX3ZpZiAqdmlmID0gbmV0ZGV2X3ByaXYod2Rldi1cXHUwMDNlbmV0ZGV2KTtcXG4gXFx0c3RydWN0IHdpbGNfcHJpdiAqcHJpdiA9IFxcdTAwMjZ2aWYtXFx1MDAzZXByaXY7XFxuIFxcbkBAIC02ODEsMTAgKzY4NSwxMSBAQCBzdGF0aWMgaW50IGRlbF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwgaW50IGxpbmtfaWQsXFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgZ2V0X2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LCBpbnQgbGlua19pZCxcXG4tXFx0XFx0ICAgdTgga2V5X2luZGV4LCBib29sIHBhaXJ3aXNlLCBjb25zdCB1OCAqbWFjX2FkZHIsXFxuLVxcdFxcdCAgIHZvaWQgKmNvb2tpZSxcXG4rXFx0XFx0ICAgdTgga2V5X2luZGV4LCBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSxcXG4rXFx0XFx0ICAgY29uc3QgdTggKm1hY19hZGRyLCB2b2lkICpjb29raWUsXFxuIFxcdFxcdCAgIHZvaWQgKCpjYWxsYmFjaykodm9pZCAqY29va2llLCBzdHJ1Y3Qga2V5X3BhcmFtcyAqKSlcXG4ge1xcbitcXHRib29sIHBhaXJ3aXNlID0gdHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0U7XFxuIFxcdHN0cnVjdCB3aWxjX3ZpZiAqdmlmID0gbmV0ZGV2X3ByaXYod2Rldi1cXHUwMDNlbmV0ZGV2KTtcXG4gXFx0c3RydWN0IHdpbGNfcHJpdiAqcHJpdiA9IFxcdTAwMjZ2aWYtXFx1MDAzZXByaXY7XFxuIFxcdHN0cnVjdCAga2V5X3BhcmFtcyBrZXlfcGFyYW1zO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9jZmc4MDIxMS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvY2ZnODAyMTEuY1xcbmluZGV4IDRmOWUyMGY3MjgxMTQuLjA4YjZkYjE0NzQ1MmMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvY2ZnODAyMTEuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL2NmZzgwMjExLmNcXG5AQCAtOTksMTIgKzk5LDE0IEBAIHN0YXRpYyB2b2lkICpueHB3aWZpX2NmZzgwMjExX2dldF9hZGFwdGVyKHN0cnVjdCB3aXBoeSAqd2lwaHkpXFxuIC8qIGNmZzgwMjExIG9wZXJhdGlvbiBoYW5kbGVyIHRvIGRlbGV0ZSBhIG5ldHdvcmsga2V5LiAqL1xcbiBzdGF0aWMgaW50XFxuIG54cHdpZmlfY2ZnODAyMTFfZGVsX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxcbi1cXHRcXHRcXHQgaW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCwgYm9vbCBwYWlyd2lzZSxcXG4rXFx0XFx0XFx0IGludCBsaW5rX2lkLCB1OCBrZXlfaW5kZXgsXFxuK1xcdFxcdFxcdCBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSxcXG4gXFx0XFx0XFx0IGNvbnN0IHU4ICptYWNfYWRkcilcXG4ge1xcbiBcXHRzdHJ1Y3Qgbnhwd2lmaV9wcml2YXRlICpwcml2ID0gbnhwd2lmaV9uZXRkZXZfZ2V0X3ByaXYod2Rldi1cXHUwMDNlbmV0ZGV2KTtcXG4gXFx0c3RhdGljIGNvbnN0IHU4IGJjX21hY1tdID0gezB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmZ9O1xcbi1cXHRjb25zdCB1OCAqcGVlcl9tYWMgPSBwYWlyd2lzZSA/IG1hY19hZGRyIDogYmNfbWFjO1xcbitcXHRjb25zdCB1OCAqcGVlcl9tYWMgPVxcbitcXHRcXHQodHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0UpID8gbWFjX2FkZHIgOiBiY19tYWM7XFxuIFxcdGludCByZXQ7XFxuIFxcbiBcXHRyZXQgPSBueHB3aWZpX3NldF9lbmNvZGUocHJpdiwgTlVMTCwgTlVMTCwgMCwga2V5X2luZGV4LCBwZWVyX21hYywgMSk7XFxuQEAgLTQyOCw3ICs0MzAsOCBAQCBueHB3aWZpX2NmZzgwMjExX3NldF9kZWZhdWx0X2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbiAvKiBjZmc4MDIxMSBoYW5kbGVyIGZvciBhZGRpbmcgYW4gODAyLjExIGVuY3J5cHRpb24ga2V5LiAqL1xcbiBzdGF0aWMgaW50XFxuIG54cHdpZmlfY2ZnODAyMTFfYWRkX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxcbi1cXHRcXHRcXHQgaW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCwgYm9vbCBwYWlyd2lzZSxcXG4rXFx0XFx0XFx0IGludCBsaW5rX2lkLCB1OCBrZXlfaW5kZXgsXFxuK1xcdFxcdFxcdCBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSxcXG4gXFx0XFx0XFx0IGNvbnN0IHU4ICptYWNfYWRkciwgc3RydWN0IGtleV9wYXJhbXMgKnBhcmFtcylcXG4ge1xcbiBcXHRzdHJ1Y3Qgbnhwd2lmaV9wcml2YXRlICpwcml2ID0gbnhwd2lmaV9uZXRkZXZfZ2V0X3ByaXYod2Rldi1cXHUwMDNlbmV0ZGV2KTtcXG5AQCAtNDM4LDcgKzQ0MSw3IEBAIG54cHdpZmlfY2ZnODAyMTFfYWRkX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxcbiBcXHRpbnQgcmV0O1xcbiBcXG4gXFx0ZXRoX2Jyb2FkY2FzdF9hZGRyKGJjX21hYyk7XFxuLVxcdHBlZXJfbWFjID0gcGFpcndpc2UgPyBtYWNfYWRkciA6IGJjX21hYztcXG4rXFx0cGVlcl9tYWMgPSAodHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0UpID8gbWFjX2FkZHIgOiBiY19tYWM7XFxuIFxcbiBcXHRpZiAoR0VUX0JTU19ST0xFKHByaXYpID09IE5YUFdJRklfQlNTX1JPTEVfVUFQIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICAocGFyYW1zLVxcdTAwM2VjaXBoZXIgPT0gV0xBTl9DSVBIRVJfU1VJVEVfV0VQNDAgfHxcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcXVhbnRlbm5hL3F0bmZtYWMvY2ZnODAyMTEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3F1YW50ZW5uYS9xdG5mbWFjL2NmZzgwMjExLmNcXG5pbmRleCA5ZTQ0Yzg1ZDIwNTFjLi4zODYyNTM0MjE2OWZmIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3F1YW50ZW5uYS9xdG5mbWFjL2NmZzgwMjExLmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9xdWFudGVubmEvcXRuZm1hYy9jZmc4MDIxMS5jXFxuQEAgLTUzMywxMCArNTMzLDEyIEBAIHF0bmZfZHVtcF9zdGF0aW9uKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgcXRuZl9hZGRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxuLVxcdFxcdFxcdGludCBsaW5rX2lkLCB1OCBrZXlfaW5kZXgsIGJvb2wgcGFpcndpc2UsXFxuK1xcdFxcdFxcdGludCBsaW5rX2lkLCB1OCBrZXlfaW5kZXgsXFxuK1xcdFxcdFxcdGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLFxcbiBcXHRcXHRcXHRjb25zdCB1OCAqbWFjX2FkZHIsIHN0cnVjdCBrZXlfcGFyYW1zICpwYXJhbXMpXFxuIHtcXG4gXFx0c3RydWN0IHF0bmZfdmlmICp2aWYgPSBxdG5mX25ldGRldl9nZXRfcHJpdih3ZGV2LVxcdTAwM2VuZXRkZXYpO1xcbitcXHRib29sIHBhaXJ3aXNlID0gdHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0U7XFxuIFxcdGludCByZXQ7XFxuIFxcbiBcXHRyZXQgPSBxdG5mX2NtZF9zZW5kX2FkZF9rZXkodmlmLCBrZXlfaW5kZXgsIHBhaXJ3aXNlLCBtYWNfYWRkciwgcGFyYW1zKTtcXG5AQCAtNTQ5LDEwICs1NTEsMTIgQEAgc3RhdGljIGludCBxdG5mX2FkZF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcXG4gfVxcbiBcXG4gc3RhdGljIGludCBxdG5mX2RlbF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcXG4tXFx0XFx0XFx0aW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCwgYm9vbCBwYWlyd2lzZSxcXG4rXFx0XFx0XFx0aW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCxcXG4rXFx0XFx0XFx0ZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsXFxuIFxcdFxcdFxcdGNvbnN0IHU4ICptYWNfYWRkcilcXG4ge1xcbiBcXHRzdHJ1Y3QgcXRuZl92aWYgKnZpZiA9IHF0bmZfbmV0ZGV2X2dldF9wcml2KHdkZXYtXFx1MDAzZW5ldGRldik7XFxuK1xcdGJvb2wgcGFpcndpc2UgPSB0eXBlID09IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRTtcXG4gXFx0aW50IHJldDtcXG4gXFxuIFxcdHJldCA9IHF0bmZfY21kX3NlbmRfZGVsX2tleSh2aWYsIGtleV9pbmRleCwgcGFpcndpc2UsIG1hY19hZGRyKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OS93b3cuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvd293LmNcXG5pbmRleCA4ZGFkZDhkZjRmYzY1Li5jOGUwMDIyMzhlY2IyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvd293LmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg5L3dvdy5jXFxuQEAgLTY2OSwxMCArNjY5LDEyIEBAIHN0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICpydHc4OV93b3dfZ3RrX3Jla2V5KHN0cnVjdCBydHc4OV9kZXYgKnJ0d2RldixcXG4gXFx0aWYgKGllZWU4MDIxMV92aWZfaXNfbWxkKHdvd192aWYpKVxcbiBcXHRcXHRrZXkgPSBpZWVlODAyMTFfZ3RrX3Jla2V5X2FkZCh3b3dfdmlmLCBrZXlpZHgsIGd0ayxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgY2lwaGVyX2luZm8tXFx1MDAzZWxlbixcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICAgcnR3dmlmX2xpbmstXFx1MDAzZWxpbmtfaWQpO1xcbitcXHRcXHRcXHRcXHRcXHQgICAgICBydHd2aWZfbGluay1cXHUwMDNlbGlua19pZCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgZmFsc2UpO1xcbiBcXHRlbHNlXFxuIFxcdFxcdGtleSA9IGllZWU4MDIxMV9ndGtfcmVrZXlfYWRkKHdvd192aWYsIGtleWlkeCwgZ3RrLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICBjaXBoZXJfaW5mby1cXHUwMDNlbGVuLCAtMSk7XFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIGNpcGhlcl9pbmZvLVxcdTAwM2VsZW4sIC0xLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBmYWxzZSk7XFxuIFxcbiBcXHRrZnJlZShyZWtleV9jb25mKTtcXG4gXFx0aWYgKElTX0VSUihrZXkpKSB7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmNcXG5pbmRleCAwMmI2ZDgxY2NjZDExLi4xY2MzMjJhYTg5OGRkIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmNcXG5AQCAtNTY2OCw2ICs1NjY4LDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB3aXBoeV9pZnR5cGVfZXh0X2NhcGFiIG1hYzgwMjExX2h3c2ltX2lmdHlwZXNfZXh0X2NhcGFbXSA9IHtcXG4gXFx0XFx0LmVtbF9jYXBhYmlsaXRpZXMgPSBJRUVFODAyMTFfRU1MX0NBUF9FTUxTUl9TVVBQIHxcXG4gXFx0XFx0XFx0XFx0ICAgIElFRUU4MDIxMV9FTUxfQ0FQX0VNTE1SX1NVUFBPUlQsXFxuIFxcdFxcdC5tbGRfY2FwYV9hbmRfb3BzID0gTUFDODAyMTFfSFdTSU1fTUxEX0NBUEFfT1BTLFxcbitcXHRcXHQvKiBDSVAgd29ya3MgYXMgaHdzaW0gZG9lcyBub3QgaGF2ZSBjb250cm9sIGZyYW1lcyAqL1xcbitcXHRcXHQuY2lwX3N1cHBvcnRlZCA9IHRydWUsXFxuK1xcdFxcdC5jaXBfY2FwYWJpbGl0aWVzID0gMCxcXG4gXFx0fSxcXG4gfTtcXG4gXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWVlZTgwMjExLmggYi9pbmNsdWRlL2xpbnV4L2llZWU4MDIxMS5oXFxuaW5kZXggMjZlNjc0MDM4ODY1NC4uMTZkNzhmZDYxYzIyMyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2llZWU4MDIxMS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9pZWVlODAyMTEuaFxcbkBAIC0xODI4LDYgKzE4MjgsNyBAQCBlbnVtIGllZWU4MDIxMV9laWRfZXh0IHtcXG4gXFx0V0xBTl9FSURfRVhUX0JBTkRXSURUSF9JTkRJQ0FUSU9OID0gMTM1LFxcbiBcXHRXTEFOX0VJRF9FWFRfS05PV05fU1RBX0lERU5USUZDQVRJT04gPSAxMzYsXFxuIFxcdFdMQU5fRUlEX0VYVF9OT05fQVBfU1RBX1JFR19DT04gPSAxMzcsXFxuK1xcdFdMQU5fRUlEX0VYVF9DSVBfQ0FQQSA9IDE1MCxcXG4gXFx0V0xBTl9FSURfRVhUX1VIUl9PUEVSID0gMTUxLFxcbiBcXHRXTEFOX0VJRF9FWFRfVUhSX0NBUEEgPSAxNTIsXFxuIFxcdFdMQU5fRUlEX0VYVF9NQUNQID0gMTUzLFxcbkBAIC0yOTAwLDQgKzI5MDEsMTYgQEAgc3RhdGljIGlubGluZSBib29sIGllZWU4MDIxMV9jaGVja190aW0oY29uc3Qgc3RydWN0IGllZWU4MDIxMV90aW1faWUgKnRpbSxcXG4gXFx0XFx0ICAgICBfX2llZWU4MDIxMV9jaGVja190aW0odGltLCB0aW1fbGVuLCBhaWQpO1xcbiB9XFxuIFxcbisvKiBUaGUgTUlDIHBhZGRpbmcgc3ViZmllbGQgaW4gdGhlIENJUCBjYXBhYmlsaXRpZXMgKi9cXG4rI2RlZmluZSBXTEFOX0NJUF9DQVBBX01JQ19QQURESU5HXFx0MHgwRlxcbitcXG4rLyoqXFxuKyAqIHN0cnVjdCBpZWVlODAyMTFfY2lwX2NhcCAtIENJUCBDYXBhYmlsaXRpZXMgZWxlbWVudFxcbisgKlxcbisgKiBAdjogVGhlIHZhbHVlIG9mIHRoZSBDb250cm9sIEludGVncml0eSBQcm90b2NvbCBDYXBhYmlsaXR5IGVsZW1lbnRcXG4rICovXFxuK3N0cnVjdCBpZWVlODAyMTFfY2lwX2NhcCB7XFxuK1xcdHU4IHY7XFxuK30gX19wYWNrZWQ7XFxuK1xcbiAjZW5kaWYgLyogTElOVVhfSUVFRTgwMjExX0ggKi9cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaCBiL2luY2x1ZGUvbmV0L2NmZzgwMjExLmhcXG5pbmRleCBkY2JiMGU1NWMzMmVjLi5iNWQ5OGJhMDcyMzliIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L2NmZzgwMjExLmhcXG4rKysgYi9pbmNsdWRlL25ldC9jZmc4MDIxMS5oXFxuQEAgLTE4MjEsNiArMTgyMSw4IEBAIHN0cnVjdCBzdGFfdHhwd3Ige1xcbiAgKiBAczFnX2NhcGE6IFMxRyBjYXBhYmlsaXRpZXMgb2Ygc3RhdGlvblxcbiAgKiBAdWhyX2NhcGE6IFVIUiBjYXBhYmlsaXRpZXMgb2YgdGhlIHN0YXRpb25cXG4gICogQHVocl9jYXBhX2xlbjogdGhlIGxlbmd0aCBvZiB0aGUgVUhSIGNhcGFiaWxpdGllc1xcbisgKiBAY2lwX2NhcF9zZXQ6IElmIENJUCBjYXBhYmlsaXRpZXMgYXJlIHByZXNlbnQsIHJlcXVpcmVkIGZvciBDSVAgc3RhdGlvbnNcXG4rICogQGNpcF9jYXA6IENJUCBjYXBhYmlsaXRpZXMgb2Ygc3RhdGlvblxcbiAgKi9cXG4gc3RydWN0IGxpbmtfc3RhdGlvbl9wYXJhbWV0ZXJzIHtcXG4gXFx0Y29uc3QgdTggKm1sZF9tYWM7XFxuQEAgLTE4NDIsNiArMTg0NCw4IEBAIHN0cnVjdCBsaW5rX3N0YXRpb25fcGFyYW1ldGVycyB7XFxuIFxcdGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfczFnX2NhcCAqczFnX2NhcGE7XFxuIFxcdGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdWhyX2NhcCAqdWhyX2NhcGE7XFxuIFxcdHU4IHVocl9jYXBhX2xlbjtcXG4rXFx0Ym9vbCBjaXBfY2FwX3NldDtcXG4rXFx0dTggY2lwX2NhcDtcXG4gfTtcXG4gXFxuIC8qKlxcbkBAIC0zNDAyLDYgKzM0MDYsNyBAQCBzdHJ1Y3QgY2ZnODAyMTFfbWxfcmVjb25mX3JlcSB7XFxuICAqXFx0ZmxhZyBpcyBub3Qgc2V0LlxcbiAgKiBAQVNTT0NfUkVRX1NQUF9BTVNEVTogU1BQIEEtTVNEVXMgd2lsbCBiZSB1c2VkIG9uIHRoaXMgY29ubmVjdGlvbiAoaWYgYW55KVxcbiAgKiBAQVNTT0NfUkVRX0RJU0FCTEVfVUhSOiBEaXNhYmxlIFVIUlxcbisgKiBAQVNTT0NfUkVRX0NJUDogRW5hYmxlIENvbnRyb2wgSW50ZWdyaXR5IFByb3RvY29sXFxuICAqL1xcbiBlbnVtIGNmZzgwMjExX2Fzc29jX3JlcV9mbGFncyB7XFxuIFxcdEFTU09DX1JFUV9ESVNBQkxFX0hUXFx0XFx0XFx0PSBCSVQoMCksXFxuQEAgLTM0MTMsNiArMzQxOCw3IEBAIGVudW0gY2ZnODAyMTFfYXNzb2NfcmVxX2ZsYWdzIHtcXG4gXFx0Q09OTkVDVF9SRVFfTUxPX1NVUFBPUlRcXHRcXHRcXHQ9IEJJVCg2KSxcXG4gXFx0QVNTT0NfUkVRX1NQUF9BTVNEVVxcdFxcdFxcdD0gQklUKDcpLFxcbiBcXHRBU1NPQ19SRVFfRElTQUJMRV9VSFJcXHRcXHRcXHQ9IEJJVCg4KSxcXG4rXFx0QVNTT0NfUkVRX0NJUFxcdFxcdFxcdFxcdD0gQklUKDkpLFxcbiB9O1xcbiBcXG4gLyoqXFxuQEAgLTUzMDAsMTQgKzUzMDYsMTcgQEAgc3RydWN0IGNmZzgwMjExX29wcyB7XFxuIFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBpbnQgbGlua19pZCk7XFxuIFxcbiBcXHRpbnRcXHQoKmFkZF9rZXkpKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxuLVxcdFxcdFxcdCAgIGludCBsaW5rX2lkLCB1OCBrZXlfaW5kZXgsIGJvb2wgcGFpcndpc2UsXFxuK1xcdFxcdFxcdCAgIGludCBsaW5rX2lkLCB1OCBrZXlfaW5kZXgsXFxuK1xcdFxcdFxcdCAgIGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLFxcbiBcXHRcXHRcXHQgICBjb25zdCB1OCAqbWFjX2FkZHIsIHN0cnVjdCBrZXlfcGFyYW1zICpwYXJhbXMpO1xcbiBcXHRpbnRcXHQoKmdldF9rZXkpKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxuLVxcdFxcdFxcdCAgIGludCBsaW5rX2lkLCB1OCBrZXlfaW5kZXgsIGJvb2wgcGFpcndpc2UsXFxuK1xcdFxcdFxcdCAgIGludCBsaW5rX2lkLCB1OCBrZXlfaW5kZXgsXFxuK1xcdFxcdFxcdCAgIGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLFxcbiBcXHRcXHRcXHQgICBjb25zdCB1OCAqbWFjX2FkZHIsIHZvaWQgKmNvb2tpZSxcXG4gXFx0XFx0XFx0ICAgdm9pZCAoKmNhbGxiYWNrKSh2b2lkICpjb29raWUsIHN0cnVjdCBrZXlfcGFyYW1zKikpO1xcbiBcXHRpbnRcXHQoKmRlbF9rZXkpKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxuLVxcdFxcdFxcdCAgIGludCBsaW5rX2lkLCB1OCBrZXlfaW5kZXgsIGJvb2wgcGFpcndpc2UsXFxuK1xcdFxcdFxcdCAgIGludCBsaW5rX2lkLCB1OCBrZXlfaW5kZXgsXFxuK1xcdFxcdFxcdCAgIGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLFxcbiBcXHRcXHRcXHQgICBjb25zdCB1OCAqbWFjX2FkZHIpO1xcbiBcXHRpbnRcXHQoKnNldF9kZWZhdWx0X2tleSkoc3RydWN0IHdpcGh5ICp3aXBoeSxcXG4gXFx0XFx0XFx0XFx0ICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IGxpbmtfaWQsXFxuQEAgLTYwNDEsNiArNjA1MCw4IEBAIHN0cnVjdCB3aXBoeV92ZW5kb3JfY29tbWFuZCB7XFxuICAqIEBlbWxfY2FwYWJpbGl0aWVzOiBFTUwgY2FwYWJpbGl0aWVzIChmb3IgTUxPKVxcbiAgKiBAbWxkX2NhcGFfYW5kX29wczogTUxEIGNhcGFiaWxpdGllcyBhbmQgb3BlcmF0aW9ucyAoZm9yIE1MTylcXG4gICogQGV4dF9tbGRfY2FwYV9hbmRfb3BzOiBFeHRlbmRlZCBNTEQgY2FwYWJpbGl0aWVzIGFuZCBvcGVyYXRpb25zIChmb3IgTUxPKVxcbisgKiBAY2lwX3N1cHBvcnRlZDogQ0lQIGlzIHN1cHBvcnRlZCBhbmQgdGhlIGNhcGFiaWxpdGllcyBhcmUgdmFsaWRcXG4rICogQGNpcF9jYXBhYmlsaXRpZXM6IENJUCBDYXBhYmlsaXRpZXMgZWxlbWVudCBjb250YWluaW5nIHRoZSBNSUMgcGFkZGluZyBkZWxheVxcbiAgKi9cXG4gc3RydWN0IHdpcGh5X2lmdHlwZV9leHRfY2FwYWIge1xcbiBcXHRlbnVtIG5sODAyMTFfaWZ0eXBlIGlmdHlwZTtcXG5AQCAtNjA1MCw2ICs2MDYxLDggQEAgc3RydWN0IHdpcGh5X2lmdHlwZV9leHRfY2FwYWIge1xcbiBcXHR1MTYgZW1sX2NhcGFiaWxpdGllcztcXG4gXFx0dTE2IG1sZF9jYXBhX2FuZF9vcHM7XFxuIFxcdHUxNiBleHRfbWxkX2NhcGFfYW5kX29wcztcXG4rXFx0Ym9vbCBjaXBfc3VwcG9ydGVkO1xcbitcXHR1OCBjaXBfY2FwYWJpbGl0aWVzO1xcbiB9O1xcbiBcXG4gLyoqXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L21hYzgwMjExLmggYi9pbmNsdWRlL25ldC9tYWM4MDIxMS5oXFxuaW5kZXggOWQxZmFjNmU4MDgyOS4uYWFlMTQwZmRjMmJiMSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL25ldC9tYWM4MDIxMS5oXFxuKysrIGIvaW5jbHVkZS9uZXQvbWFjODAyMTEuaFxcbkBAIC0yMzk2LDYgKzIzOTYsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbG9ja2RlcF92aWZfd2lwaHlfbXV0ZXhfaGVsZChzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKVxcbiAgKlxcdG51bWJlciBnZW5lcmF0aW9uIG9ubHlcXG4gICogQElFRUU4MDIxMV9LRVlfRkxBR19TUFBfQU1TRFU6IFNQUCBBLU1TRFVzIGNhbiBiZSB1c2VkIHdpdGggdGhpcyBrZXlcXG4gICpcXHQoc2V0IGJ5IG1hYzgwMjExIGZyb20gdGhlIHN0YS1cXHUwMDNlc3BwX2Ftc2R1IGZsYWcpXFxuKyAqIEBJRUVFODAyMTFfS0VZX0ZMQUdfQ0lQOiBUaGlzIGtleSBpcyB1c2VkIGZvciB0aGUgQ29udHJvbCBJbnRlZ3JpdHlcXG4rICpcXHRQcm90b2NvbCwgYW5kIGlzIGVpdGhlciBhIHBhaXJ3aXNlIGtleSBvciBhIENJR1RLLlxcbiAgKi9cXG4gZW51bSBpZWVlODAyMTFfa2V5X2ZsYWdzIHtcXG4gXFx0SUVFRTgwMjExX0tFWV9GTEFHX0dFTkVSQVRFX0lWX01HTVRcXHQ9IEJJVCgwKSxcXG5AQCAtMjQxMCw2ICsyNDEyLDcgQEAgZW51bSBpZWVlODAyMTFfa2V5X2ZsYWdzIHtcXG4gXFx0SUVFRTgwMjExX0tFWV9GTEFHX05PX0FVVE9fVFhcXHRcXHQ9IEJJVCg5KSxcXG4gXFx0SUVFRTgwMjExX0tFWV9GTEFHX0dFTkVSQVRFX01NSUVcXHQ9IEJJVCgxMCksXFxuIFxcdElFRUU4MDIxMV9LRVlfRkxBR19TUFBfQU1TRFVcXHRcXHQ9IEJJVCgxMSksXFxuK1xcdElFRUU4MDIxMV9LRVlfRkxBR19DSVBcXHRcXHRcXHQ9IEJJVCgxMiksXFxuIH07XFxuIFxcbiAvKipcXG5AQCAtMjYzMCw2ICsyNjMzLDggQEAgc3RydWN0IGllZWU4MDIxMV9zdGFfYWdncmVnYXRlcyB7XFxuICAqIEBlaHRfY2FwOiBFSFQgY2FwYWJpbGl0aWVzIG9mIHRoaXMgU1RBXFxuICAqIEB1aHJfY2FwOiBVSFIgY2FwYWJpbGl0aWVzIG9mIHRoaXMgU1RBXFxuICAqIEBzMWdfY2FwOiBTMUcgY2FwYWJpbGl0aWVzIG9mIHRoaXMgU1RBXFxuKyAqIEBjaXBfbWljX3BhZGRpbmc6IHRoZSBNSUMgcGFkZGluZyByZXF1aXJlZCBieSB0aGUgU1RBIGFzIGRlZmluZWQgaW4gaXRzXFxuKyAqXFx0Q0lQIENhcGFiaWxpdGllcyBlbGVtZW50XFxuICAqIEBhZ2c6IHBlci1saW5rIGRhdGEgZm9yIG11bHRpLWxpbmsgYWdncmVnYXRpb25cXG4gICogQGJhbmR3aWR0aDogY3VycmVudCBiYW5kd2lkdGggdGhlIHN0YXRpb24gY2FuIHJlY2VpdmUgd2l0aC5cXG4gICpcXHRUaGlzIGlzIHRoZSBtaW5pbXVtIGJldHdlZW4gdGhlIHBlZXIncyBjYXBhYmlsaXRpZXMgYW5kIG91ciBvd25cXG5AQCAtMjY1OCw2ICsyNjYzLDcgQEAgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSB7XFxuIFxcdHN0cnVjdCBpZWVlODAyMTFfc3RhX2VodF9jYXAgZWh0X2NhcDtcXG4gXFx0c3RydWN0IGllZWU4MDIxMV9zdGFfdWhyX2NhcCB1aHJfY2FwO1xcbiBcXHRzdHJ1Y3QgaWVlZTgwMjExX3N0YV9zMWdfY2FwIHMxZ19jYXA7XFxuK1xcdHU4IGNpcF9taWNfcGFkZGluZztcXG4gXFxuIFxcdHN0cnVjdCBpZWVlODAyMTFfc3RhX2FnZ3JlZ2F0ZXMgYWdnO1xcbiBcXG5AQCAtMjcyMSw2ICsyNzI3LDcgQEAgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSB7XFxuICAqIEB2YWxpZF9saW5rczogYml0bWFwIG9mIHZhbGlkIGxpbmtzLCBvciAwIGZvciBub24tTUxPXFxuICAqIEBzcHBfYW1zZHU6IGluZGljYXRlcyB3aGV0aGVyIHRoZSBTVEEgdXNlcyBTUFAgQS1NU0RVIG9yIG5vdC5cXG4gICogQGVwcF9wZWVyOiBpbmRpY2F0ZXMgdGhhdCB0aGUgcGVlciBpcyBhbiBFUFAgcGVlci5cXG4rICogQGNpcDogaW5kaWNhdGVzIHdoZXRoZXIgdGhlIFNUQSB1c2VzIGNvbnRyb2wgZnJhbWUgcHJvdGVjdGlvbiBvciBub3QuXFxuICAqIEBubWk6IEZvciBOREkgc3RhdGlvbnMsIHBvaW50ZXIgdG8gdGhlIE5NSSBzdGF0aW9uIG9mIHRoZSBwZWVyLlxcbiAgKiBAbmFuX3NjaGVkOiBOQU4gcGVlciBzY2hlZHVsZSBmb3IgdGhpcyBzdGF0aW9uLiBWYWxpZCBvbmx5IGZvciBOTUkgc3RhdGlvbnMuXFxuICAqIEBleHRfbWxkX2NhcGFfb3BzOiB0aGUgTUxEJ3MgZXh0ZW5kZWQgTUxEIGNhcGFiaWxpdGllcyBhbmQgb3BlcmF0aW9uc1xcbkBAIC0yNzQyLDYgKzI3NDksOCBAQCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSB7XFxuIFxcdHU4IG1heF9hbXNkdV9zdWJmcmFtZXM7XFxuIFxcdHUxNiBlbWxfY2FwO1xcbiBcXG4rXFx0Ym9vbCBjaXA7XFxuK1xcbiBcXHRzdHJ1Y3QgaWVlZTgwMjExX3N0YV9hZ2dyZWdhdGVzICpjdXI7XFxuIFxcbiBcXHRib29sIHN1cHBvcnRfcDJwX3BzO1xcbkBAIC02Mjc5LDYgKzYyODgsNyBAQCB2b2lkIGllZWU4MDIxMV9zZXRfa2V5X3J4X3NlcShzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXljb25mLFxcbiAgKiBAa2V5X2xlbjogdGhlIGtleSBkYXRhLiBNaWdodCBiZSBiaWdnZXIgdGhhbiB0aGUgYWN0dWFsIGtleSBsZW5ndGgsXFxuICAqXFx0YnV0IG5vdCBzbWFsbGVyIChmb3IgdGhlIGRyaXZlciBjb252aW5lbmNlKVxcbiAgKiBAbGlua19pZDogdGhlIGxpbmsgaWQgb2YgdGhlIGtleSBvciAtMSBmb3Igbm9uLU1MT1xcbisgKiBAY2lndGs6IHdoZXRoZXIgdGhpcyBpcyBhIENJR1RLXFxuICAqXFxuICAqIFdoZW4gR1RLIHJla2V5aW5nIHdhcyBkb25lIHdoaWxlIHRoZSBzeXN0ZW0gd2FzIHN1c3BlbmRlZCwgKGEpIG5ld1xcbiAgKiBrZXkocykgd2lsbCBiZSBhdmFpbGFibGUuIFRoZXNlIHdpbGwgYmUgbmVlZGVkIGJ5IG1hYzgwMjExIGZvciBwcm9wZXJcXG5AQCAtNjMwNSw3ICs2MzE1LDcgQEAgdm9pZCBpZWVlODAyMTFfc2V0X2tleV9yeF9zZXEoc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5Y29uZixcXG4gc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqXFxuIGllZWU4MDIxMV9ndGtfcmVrZXlfYWRkKHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXFxuIFxcdFxcdFxcdHU4IGlkeCwgdTggKmtleV9kYXRhLCB1OCBrZXlfbGVuLFxcbi1cXHRcXHRcXHRpbnQgbGlua19pZCk7XFxuK1xcdFxcdFxcdGludCBsaW5rX2lkLCBib29sIGNpZ3RrKTtcXG4gXFxuIC8qKlxcbiAgKiBpZWVlODAyMTFfZ3RrX3Jla2V5X25vdGlmeSAtIG5vdGlmeSB1c2Vyc3BhY2Ugc3VwcGxpY2FudCBvZiByZWtleWluZ1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvbmw4MDIxMS5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L25sODAyMTEuaFxcbmluZGV4IDAyMDM4N2Q3NjQxMjIuLjNlNmU1OWZiOGUxN2YgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L25sODAyMTEuaFxcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9ubDgwMjExLmhcXG5AQCAtMzE4NSw2ICszMTg1LDExIEBAIGVudW0gbmw4MDIxMV9jb21tYW5kcyB7XFxuICAqXFx0VGhlIGFnZ3JlZ2F0ZWQgbWVzc2FnZSBhbHdheXMgcHJlY2VkZXMgdGhlIHBlci1saW5rIG1lc3NhZ2VzIGZvciB0aGVcXG4gICpcXHRzYW1lIHN0YXRpb24gd2l0aGluIGEgZHVtcCBzZXF1ZW5jZS5cXG4gICpcXG4rICogQE5MODAyMTFfQVRUUl9BU1NPQ19DSVA6IEVuYWJsZSBDb250cm9sIEludGVncml0eSBQcm90b2NvbCBmb3IgdGhlXFxuKyAqXFx0YXNzb2NpYXRpb25cXG4rICogQE5MODAyMTFfQVRUUl9DSVBfQ0FQQUJJTElUSUVTOiBUaGUgQ29udHJvbCBJbnRlZ3JpdHkgUHJvdG9jb2wgZm9yIHRoZVxcbisgKlxcdHN0YXRpb24uXFxuKyAqXFxuICAqIEBOVU1fTkw4MDIxMV9BVFRSOiB0b3RhbCBudW1iZXIgb2Ygbmw4MDIxMV9hdHRycyBhdmFpbGFibGVcXG4gICogQE5MODAyMTFfQVRUUl9NQVg6IGhpZ2hlc3QgYXR0cmlidXRlIG51bWJlciBjdXJyZW50bHkgZGVmaW5lZFxcbiAgKiBAX19OTDgwMjExX0FUVFJfQUZURVJfTEFTVDogaW50ZXJuYWwgdXNlXFxuQEAgLTMyODAsNiArMzI4NSw4IEBAIGVudW0gbmw4MDIxMV9hdHRycyB7XFxuIFxcbiBcXHROTDgwMjExX0FUVFJfRlJFUV9GSVhFRCxcXG4gXFxuK1xcdE5MODAyMTFfQVRUUl9BU1NPQ19DSVAsXFxuK1xcdE5MODAyMTFfQVRUUl9DSVBfQ0FQQUJJTElUSUVTLFxcbiBcXG4gXFx0Tkw4MDIxMV9BVFRSX1dJUEhZX1JFVFJZX1NIT1JULFxcbiBcXHROTDgwMjExX0FUVFJfV0lQSFlfUkVUUllfTE9ORyxcXG5AQCAtMzkzNCw2ICszOTQxLDcgQEAgZW51bSBubDgwMjExX2lmdHlwZSB7XFxuICAqXFx0dGhhdCBzdXBwb3J0ICVOTDgwMjExX0ZFQVRVUkVfRlVMTF9BUF9DTElFTlRfU1RBVEUgdG8gdHJhbnNpdGlvbiBhXFxuICAqXFx0cHJldmlvdXNseSBhZGRlZCBzdGF0aW9uIGludG8gYXNzb2NpYXRlZCBzdGF0ZVxcbiAgKiBATkw4MDIxMV9TVEFfRkxBR19TUFBfQU1TRFU6IHN0YXRpb24gc3VwcG9ydHMgU1BQIEEtTVNEVXNcXG4rICogQE5MODAyMTFfU1RBX0ZMQUdfQ0lQOiBzdGF0aW9uIGhhcyBDb250cm9sIEludGVncml0eSBQcm90b2NvbCAoQ0lQKSBlbmFibGVkXFxuICAqIEBOTDgwMjExX1NUQV9GTEFHX01BWDogaGlnaGVzdCBzdGF0aW9uIGZsYWcgbnVtYmVyIGN1cnJlbnRseSBkZWZpbmVkXFxuICAqIEBfX05MODAyMTFfU1RBX0ZMQUdfQUZURVJfTEFTVDogaW50ZXJuYWwgdXNlXFxuICAqL1xcbkBAIC0zOTQ3LDYgKzM5NTUsNyBAQCBlbnVtIG5sODAyMTFfc3RhX2ZsYWdzIHtcXG4gXFx0Tkw4MDIxMV9TVEFfRkxBR19URExTX1BFRVIsXFxuIFxcdE5MODAyMTFfU1RBX0ZMQUdfQVNTT0NJQVRFRCxcXG4gXFx0Tkw4MDIxMV9TVEFfRkxBR19TUFBfQU1TRFUsXFxuK1xcdE5MODAyMTFfU1RBX0ZMQUdfQ0lQLFxcbiBcXG4gXFx0Lyoga2VlcCBsYXN0ICovXFxuIFxcdF9fTkw4MDIxMV9TVEFfRkxBR19BRlRFUl9MQVNULFxcbkBAIC01Nzc4LDEyICs1Nzg3LDE2IEBAIGVudW0gbmw4MDIxMV9hdXRoX3R5cGUge1xcbiAgKiBATkw4MDIxMV9LRVlUWVBFX0dST1VQOiBHcm91cCAoYnJvYWRjYXN0L211bHRpY2FzdCkga2V5XFxuICAqIEBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0U6IFBhaXJ3aXNlICh1bmljYXN0L2luZGl2aWR1YWwpIGtleVxcbiAgKiBATkw4MDIxMV9LRVlUWVBFX1BFRVJLRVk6IFBlZXJLZXkgKERMUylcXG4rICogQE5MODAyMTFfS0VZVFlQRV9DSUdUSzogQ29udHJvbCBJbnRlZ3JpdHkgR3JvdXAgVGVtcG9yYWwgS2V5XFxuKyAqXFx0VGhlIGNpcGhlciBpcyBHTUFDLTI1NiBidXQgcGFzc2VkIGFzIEdDTVAtMjU2LFxcbisgKlxcdHNhbWUgYXMgdGhlIHBhaXJ3aXNlIGtleSB3aGVuIHVzZWQgZm9yIENJUC5cXG4gICogQE5VTV9OTDgwMjExX0tFWVRZUEVTOiBudW1iZXIgb2YgZGVmaW5lZCBrZXkgdHlwZXNcXG4gICovXFxuIGVudW0gbmw4MDIxMV9rZXlfdHlwZSB7XFxuIFxcdE5MODAyMTFfS0VZVFlQRV9HUk9VUCxcXG4gXFx0Tkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFLFxcbiBcXHROTDgwMjExX0tFWVRZUEVfUEVFUktFWSxcXG4rXFx0Tkw4MDIxMV9LRVlUWVBFX0NJR1RLLFxcbiBcXG4gXFx0TlVNX05MODAyMTFfS0VZVFlQRVNcXG4gfTtcXG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2NmZy5jIGIvbmV0L21hYzgwMjExL2NmZy5jXFxuaW5kZXggMGE5MjQ3YmUyNmFmYS4uM2JmODE2MjljZGUzNCAxMDA2NDRcXG4tLS0gYS9uZXQvbWFjODAyMTEvY2ZnLmNcXG4rKysgYi9uZXQvbWFjODAyMTEvY2ZnLmNcXG5AQCAtNjExLDEyICs2MTEsMTUgQEAgc3RhdGljIGludCBpZWVlODAyMTFfc2V0X3R4KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbiB9XFxuIFxcbiBzdGF0aWMgaW50IGllZWU4MDIxMV9hZGRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxuLVxcdFxcdFxcdCAgICAgaW50IGxpbmtfaWQsIHU4IGtleV9pZHgsIGJvb2wgcGFpcndpc2UsXFxuK1xcdFxcdFxcdCAgICAgaW50IGxpbmtfaWQsIHU4IGtleV9pZHgsXFxuK1xcdFxcdFxcdCAgICAgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsXFxuIFxcdFxcdFxcdCAgICAgY29uc3QgdTggKm1hY19hZGRyLCBzdHJ1Y3Qga2V5X3BhcmFtcyAqcGFyYW1zKVxcbiB7XFxuIFxcdHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX1dERVZfVE9fU1VCX0lGKHdkZXYpO1xcbiBcXHRzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfZGF0YSAqbGluayA9XFxuIFxcdFxcdGllZWU4MDIxMV9saW5rX29yX2RlZmxpbmsoc2RhdGEsIGxpbmtfaWQsIGZhbHNlKTtcXG4rXFx0Ym9vbCBwYWlyd2lzZSA9IHR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFO1xcbitcXHRib29sIGNpZ3RrID0gdHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfQ0lHVEs7XFxuIFxcdHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtXFx1MDAzZWxvY2FsO1xcbiBcXHRzdHJ1Y3Qgc3RhX2luZm8gKnN0YSA9IE5VTEw7XFxuIFxcdHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXk7XFxuQEAgLTY2MCw2ICs2NjMsOSBAQCBzdGF0aWMgaW50IGllZWU4MDIxMV9hZGRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxuIFxcdFxcdGtleS1cXHUwMDNlY29uZi5saW5rX2lkID0gLTE7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdGtleS1cXHUwMDNlY29uZi5saW5rX2lkID0gbGluay1cXHUwMDNlbGlua19pZDtcXG4rXFxuK1xcdFxcdGlmIChjaWd0aylcXG4rXFx0XFx0XFx0a2V5LVxcdTAwM2Vjb25mLmZsYWdzIHw9IElFRUU4MDIxMV9LRVlfRkxBR19DSVA7XFxuIFxcdH1cXG4gXFxuIFxcdGlmIChwYXJhbXMtXFx1MDAzZW1vZGUgPT0gTkw4MDIxMV9LRVlfTk9fVFgpXFxuQEAgLTczNywxMCArNzQzLDEzIEBAIHN0YXRpYyBpbnQgaWVlZTgwMjExX2FkZF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcXG4gXFxuIHN0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX2tleSAqXFxuIGllZWU4MDIxMV9sb29rdXBfa2V5KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBpbnQgbGlua19pZCxcXG4tXFx0XFx0ICAgICB1OCBrZXlfaWR4LCBib29sIHBhaXJ3aXNlLCBjb25zdCB1OCAqbWFjX2FkZHIpXFxuK1xcdFxcdCAgICAgdTgga2V5X2lkeCwgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsXFxuK1xcdFxcdCAgICAgY29uc3QgdTggKm1hY19hZGRyKVxcbiB7XFxuIFxcdHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsIF9fbWF5YmVfdW51c2VkID0gc2RhdGEtXFx1MDAzZWxvY2FsO1xcbiBcXHRzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfZGF0YSAqbGluayA9IFxcdTAwMjZzZGF0YS1cXHUwMDNlZGVmbGluaztcXG4rXFx0Ym9vbCBwYWlyd2lzZSA9IHR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFO1xcbitcXHRib29sIGNpZ3RrID0gdHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfQ0lHVEs7XFxuIFxcdHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXk7XFxuIFxcbiBcXHRpZiAobGlua19pZCBcXHUwMDNlPSAwKSB7XFxuQEAgLTc3MCw3ICs3NzksMTEgQEAgaWVlZTgwMjExX2xvb2t1cF9rZXkoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGludCBsaW5rX2lkLFxcbiBcXHRcXHRcXHRyZXR1cm4gd2lwaHlfZGVyZWZlcmVuY2UobG9jYWwtXFx1MDAzZWh3LndpcGh5LFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgc3RhLVxcdTAwM2VwdGtba2V5X2lkeF0pO1xcbiBcXG4tXFx0XFx0aWYgKCFwYWlyd2lzZSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRpZiAoY2lndGsgXFx1MDAyNlxcdTAwMjYga2V5X2lkeCBcXHUwMDNjIE5VTV9DVFJMX0tFWVMpXFxuK1xcdFxcdFxcdHJldHVybiB3aXBoeV9kZXJlZmVyZW5jZShsb2NhbC1cXHUwMDNlaHcud2lwaHksXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBsaW5rX3N0YS1cXHUwMDNlY2lndGtba2V5X2lkeF0pO1xcbitcXG4rXFx0XFx0aWYgKCFwYWlyd2lzZSBcXHUwMDI2XFx1MDAyNiAhY2lndGsgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgIGtleV9pZHggXFx1MDAzYyBOVU1fREVGQVVMVF9LRVlTICtcXG4gXFx0XFx0XFx0ICAgICAgTlVNX0RFRkFVTFRfTUdNVF9LRVlTICtcXG4gXFx0XFx0XFx0ICAgICAgTlVNX0RFRkFVTFRfQkVBQ09OX0tFWVMpXFxuQEAgLTc4Myw2ICs3OTYsOSBAQCBpZWVlODAyMTFfbG9va3VwX2tleShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgaW50IGxpbmtfaWQsXFxuIFxcdGlmIChwYWlyd2lzZSBcXHUwMDI2XFx1MDAyNiBrZXlfaWR4IFxcdTAwM2MgTlVNX0RFRkFVTFRfS0VZUylcXG4gXFx0XFx0cmV0dXJuIHdpcGh5X2RlcmVmZXJlbmNlKGxvY2FsLVxcdTAwM2Vody53aXBoeSwgc2RhdGEtXFx1MDAzZWtleXNba2V5X2lkeF0pO1xcbiBcXG4rXFx0aWYgKGNpZ3RrKVxcbitcXHRcXHRyZXR1cm4gd2lwaHlfZGVyZWZlcmVuY2UobG9jYWwtXFx1MDAzZWh3LndpcGh5LCBsaW5rLVxcdTAwM2VjaWd0a1trZXlfaWR4XSk7XFxuK1xcbiBcXHRrZXkgPSB3aXBoeV9kZXJlZmVyZW5jZShsb2NhbC1cXHUwMDNlaHcud2lwaHksIGxpbmstXFx1MDAzZWd0a1trZXlfaWR4XSk7XFxuIFxcdGlmIChrZXkpXFxuIFxcdFxcdHJldHVybiBrZXk7XFxuQEAgLTc5NSw4ICs4MTEsOCBAQCBpZWVlODAyMTFfbG9va3VwX2tleShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgaW50IGxpbmtfaWQsXFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgaWVlZTgwMjExX2RlbF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcXG4tXFx0XFx0XFx0ICAgICBpbnQgbGlua19pZCwgdTgga2V5X2lkeCwgYm9vbCBwYWlyd2lzZSxcXG4tXFx0XFx0XFx0ICAgICBjb25zdCB1OCAqbWFjX2FkZHIpXFxuK1xcdFxcdFxcdCAgICAgaW50IGxpbmtfaWQsIHU4IGtleV9pZHgsXFxuK1xcdFxcdFxcdCAgICAgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsIGNvbnN0IHU4ICptYWNfYWRkcilcXG4ge1xcbiBcXHRzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9XREVWX1RPX1NVQl9JRih3ZGV2KTtcXG4gXFx0c3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS1cXHUwMDNlbG9jYWw7XFxuQEAgLTgwNCw3ICs4MjAsNyBAQCBzdGF0aWMgaW50IGllZWU4MDIxMV9kZWxfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxuIFxcbiBcXHRsb2NrZGVwX2Fzc2VydF93aXBoeShsb2NhbC1cXHUwMDNlaHcud2lwaHkpO1xcbiBcXG4tXFx0a2V5ID0gaWVlZTgwMjExX2xvb2t1cF9rZXkoc2RhdGEsIGxpbmtfaWQsIGtleV9pZHgsIHBhaXJ3aXNlLCBtYWNfYWRkcik7XFxuK1xcdGtleSA9IGllZWU4MDIxMV9sb29rdXBfa2V5KHNkYXRhLCBsaW5rX2lkLCBrZXlfaWR4LCB0eXBlLCBtYWNfYWRkcik7XFxuIFxcdGlmICgha2V5KVxcbiBcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4gXFxuQEAgLTgxNCw3ICs4MzAsOCBAQCBzdGF0aWMgaW50IGllZWU4MDIxMV9kZWxfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgaWVlZTgwMjExX2dldF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcXG4tXFx0XFx0XFx0ICAgICBpbnQgbGlua19pZCwgdTgga2V5X2lkeCwgYm9vbCBwYWlyd2lzZSxcXG4rXFx0XFx0XFx0ICAgICBpbnQgbGlua19pZCwgdTgga2V5X2lkeCxcXG4rXFx0XFx0XFx0ICAgICBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSxcXG4gXFx0XFx0XFx0ICAgICBjb25zdCB1OCAqbWFjX2FkZHIsIHZvaWQgKmNvb2tpZSxcXG4gXFx0XFx0XFx0ICAgICB2b2lkICgqY2FsbGJhY2spKHZvaWQgKmNvb2tpZSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGtleV9wYXJhbXMgKnBhcmFtcykpXFxuQEAgLTgzMyw3ICs4NTAsNyBAQCBzdGF0aWMgaW50IGllZWU4MDIxMV9nZXRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxuIFxcbiBcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIFxcbi1cXHRrZXkgPSBpZWVlODAyMTFfbG9va3VwX2tleShzZGF0YSwgbGlua19pZCwga2V5X2lkeCwgcGFpcndpc2UsIG1hY19hZGRyKTtcXG4rXFx0a2V5ID0gaWVlZTgwMjExX2xvb2t1cF9rZXkoc2RhdGEsIGxpbmtfaWQsIGtleV9pZHgsIHR5cGUsIG1hY19hZGRyKTtcXG4gXFx0aWYgKCFrZXkpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG5AQCAtMjI4OSw2ICsyMzA2LDggQEAgc3RhdGljIGludCBzdGFfbGlua19hcHBseV9wYXJhbWV0ZXJzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxcbiBcXHRjYXNlIFNUQV9MSU5LX01PREVfTkVXOlxcbiBcXHRcXHRpZiAoIXBhcmFtcy1cXHUwMDNlbGlua19tYWMpXFxuIFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHRpZiAoc3RhLVxcdTAwM2VzdGEuY2lwIFxcdTAwMjZcXHUwMDI2ICFwYXJhbXMtXFx1MDAzZWNpcF9jYXBfc2V0KVxcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgU1RBX0xJTktfTU9ERV9MSU5LX01PRElGWTpcXG4gXFx0XFx0YnJlYWs7XFxuQEAgLTI0MTEsNiArMjQzMCw5IEBAIHN0YXRpYyBpbnQgc3RhX2xpbmtfYXBwbHlfcGFyYW1ldGVycyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCxcXG4gXFx0XFx0aWVlZTgwMjExX3MxZ19jYXBfdG9fc3RhX3MxZ19jYXAoc2RhdGEsIHBhcmFtcy1cXHUwMDNlczFnX2NhcGEsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCBsaW5rX3N0YSk7XFxuIFxcbitcXHRpZiAocGFyYW1zLVxcdTAwM2VjaXBfY2FwX3NldClcXG4rXFx0XFx0bGlua19zdGEtXFx1MDAzZXB1Yi1cXHUwMDNlY2lwX21pY19wYWRkaW5nID0gcGFyYW1zLVxcdTAwM2VjaXBfY2FwO1xcbitcXG4gXFx0c3dpdGNoIChzZGF0YS1cXHUwMDNldmlmLnR5cGUpIHtcXG4gXFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9OQU46XFxuIFxcdGNhc2UgTkw4MDIxMV9JRlRZUEVfTkFOX0RBVEE6XFxuQEAgLTI1NzMsNiArMjU5NSw5IEBAIHN0YXRpYyBpbnQgc3RhX2FwcGx5X3BhcmFtZXRlcnMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXFxuIFxcdGlmIChwYXJhbXMtXFx1MDAzZWVtbF9jYXBfcHJlc2VudClcXG4gXFx0XFx0c3RhLVxcdTAwM2VzdGEuZW1sX2NhcCA9IHBhcmFtcy1cXHUwMDNlZW1sX2NhcDtcXG4gXFxuK1xcdGlmIChwYXJhbXMtXFx1MDAzZXN0YV9mbGFnc19zZXQgXFx1MDAyNiBCSVQoTkw4MDIxMV9TVEFfRkxBR19DSVApKVxcbitcXHRcXHRzdGEtXFx1MDAzZXN0YS5jaXAgPSB0cnVlO1xcbitcXG4gXFx0cmV0ID0gc3RhX2xpbmtfYXBwbHlfcGFyYW1ldGVycyhsb2NhbCwgc3RhLCBTVEFfTElOS19NT0RFX1NUQV9NT0RJRlksXFxuIFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZwYXJhbXMtXFx1MDAzZWxpbmtfc3RhX3BhcmFtcyk7XFxuIFxcdGlmIChyZXQpXFxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oIGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmhcXG5pbmRleCBhMWVmODhmZTg0NmRkLi5mYzg1ZjhiZjk2ZTNhIDEwMDY0NFxcbi0tLSBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oXFxuKysrIGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmhcXG5AQCAtNDc3LDYgKzQ3Nyw3IEBAIHN0cnVjdCBpZWVlODAyMTFfbWdkX2Fzc29jX2RhdGEge1xcbiBcXHRib29sIGNvbWViYWNrOyAvKiB3aGV0aGVyIHRoZSBBUCBoYXMgcmVxdWVzdGVkIGFzc29jaWF0aW9uIGNvbWViYWNrICovXFxuIFxcdGJvb2wgczFnO1xcbiBcXHRib29sIHNwcF9hbXNkdTtcXG4rXFx0Ym9vbCBjaXA7XFxuIFxcbiBcXHRzOCBhc3NvY19saW5rX2lkO1xcbiBcXG5AQCAtMTEwNCw2ICsxMTA1LDcgQEAgc3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEge1xcbiBcXHRzdHJ1Y3QgaWVlZTgwMjExX2tleSBfX3JjdSAqZ3RrW05VTV9ERUZBVUxUX0tFWVMgK1xcbiBcXHRcXHRcXHRcXHRcXHROVU1fREVGQVVMVF9NR01UX0tFWVMgK1xcbiBcXHRcXHRcXHRcXHRcXHROVU1fREVGQVVMVF9CRUFDT05fS0VZU107XFxuK1xcdHN0cnVjdCBpZWVlODAyMTFfa2V5IF9fcmN1ICpjaWd0a1tOVU1fQ1RSTF9LRVlTXTtcXG4gXFx0c3RydWN0IGllZWU4MDIxMV9rZXkgX19yY3UgKmRlZmF1bHRfbXVsdGljYXN0X2tleTtcXG4gXFx0c3RydWN0IGllZWU4MDIxMV9rZXkgX19yY3UgKmRlZmF1bHRfbWdtdF9rZXk7XFxuIFxcdHN0cnVjdCBpZWVlODAyMTFfa2V5IF9fcmN1ICpkZWZhdWx0X2JlYWNvbl9rZXk7XFxuQEAgLTE4NzAsNiArMTg3Miw3IEBAIHN0cnVjdCBpZWVlODAyXzExX2VsZW1zIHtcXG4gXFx0Y29uc3Qgc3RydWN0IGllZWU4MDIxMV90dGxtX2VsZW0gKnR0bG1bSUVFRTgwMjExX1RUTE1fTUFYX0NOVF07XFxuIFxcdGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdWhyX2NhcCAqdWhyX2NhcDtcXG4gXFx0Y29uc3Qgc3RydWN0IGllZWU4MDIxMV91aHJfb3BlcmF0aW9uICp1aHJfb3BlcmF0aW9uO1xcbitcXHRjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2NpcF9jYXAgKmNpcF9jYXA7XFxuIFxcbiBcXHQvKiBub3QgdGhlIG9yZGVyIGluIHRoZSBwc2QgdmFsdWVzIGlzIHBlciBlbGVtZW50LCBub3QgcGVyIGNoYW5kZWYgKi9cXG4gXFx0c3RydWN0IGllZWU4MDIxMV9wYXJzZWRfdHBlIHRwZTtcXG5AQCAtMjc3NSw2ICsyNzc4LDggQEAgaW50IGllZWU4MDIxMV9wdXRfdWhyX2NhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kKTtcXG4gdm9pZCBpZWVlODAyMTFfcHV0X3JlZ19jb25uKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbiBcXHRcXHRcXHQgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuK2ludCBpZWVlODAyMTFfcHV0X2NpcF9jYXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4rXFx0XFx0XFx0ICBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7XFxuIFxcbiAvKiBjaGFubmVsIG1hbmFnZW1lbnQgKi9cXG4gYm9vbCBpZWVlODAyMTFfY2hhbmRlZl9odF9vcGVyKGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfaHRfb3BlcmF0aW9uICpodF9vcGVyLFxcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEva2V5LmMgYi9uZXQvbWFjODAyMTEva2V5LmNcXG5pbmRleCBmNDVlNzkyYWJlZGU1Li40Yzk3ODhlYzBiNzRmIDEwMDY0NFxcbi0tLSBhL25ldC9tYWM4MDIxMS9rZXkuY1xcbisrKyBiL25ldC9tYWM4MDIxMS9rZXkuY1xcbkBAIC0yMDUsNiArMjA1LDEwIEBAIHN0YXRpYyBpbnQgaWVlZTgwMjExX2tleV9lbmFibGVfaHdfYWNjZWwoc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSlcXG4gXFx0XFx0XFx0ICBzdGEgPyBzdGEtXFx1MDAzZXN0YS5hZGRyIDogYmNhc3RfYWRkciwgcmV0KTtcXG4gXFxuICBvdXRfdW5zdXBwb3J0ZWQ6XFxuK1xcdC8qIENvbnRyb2wgSW50ZWdyaXR5IFByb3RvY29sIGNhbiBvbmx5IGJlIGRvbmUgaW4gaGFyZHdhcmUgKi9cXG4rXFx0aWYgKGtleS1cXHUwMDNlY29uZi5mbGFncyBcXHUwMDI2IElFRUU4MDIxMV9LRVlfRkxBR19DSVApXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4gXFx0c3dpdGNoIChrZXktXFx1MDAzZWNvbmYuY2lwaGVyKSB7XFxuIFxcdGNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfV0VQNDA6XFxuIFxcdGNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfV0VQMTA0OlxcbkBAIC00NDAsMTEgKzQ0NCwxMyBAQCB2b2lkIGllZWU4MDIxMV9zZXRfZGVmYXVsdF9iZWFjb25fa2V5KHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rLFxcbiBzdGF0aWMgaW50IGllZWU4MDIxMV9rZXlfcmVwbGFjZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4gXFx0XFx0XFx0XFx0IHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rLFxcbiBcXHRcXHRcXHRcXHQgc3RydWN0IHN0YV9pbmZvICpzdGEsXFxuLVxcdFxcdFxcdFxcdCBib29sIHBhaXJ3aXNlLFxcbitcXHRcXHRcXHRcXHQgZW51bSBpZWVlODAyMTFfa2V5X2ZsYWdzIGZsYWdzLFxcbiBcXHRcXHRcXHRcXHQgc3RydWN0IGllZWU4MDIxMV9rZXkgKm9sZCxcXG4gXFx0XFx0XFx0XFx0IHN0cnVjdCBpZWVlODAyMTFfa2V5ICpuZXcpXFxuIHtcXG4gXFx0c3RydWN0IGxpbmtfc3RhX2luZm8gKmxpbmtfc3RhID0gc3RhID8gXFx1MDAyNnN0YS1cXHUwMDNlZGVmbGluayA6IE5VTEw7XFxuK1xcdGJvb2wgcGFpcndpc2UgPSBmbGFncyBcXHUwMDI2IElFRUU4MDIxMV9LRVlfRkxBR19QQUlSV0lTRTtcXG4rXFx0Ym9vbCBjaXAgPSBmbGFncyBcXHUwMDI2IElFRUU4MDIxMV9LRVlfRkxBR19DSVA7XFxuIFxcdGludCBsaW5rX2lkO1xcbiBcXHRpbnQgaWR4O1xcbiBcXHRpbnQgcmV0ID0gMDtcXG5AQCAtNTM1LDYgKzU0MSw4IEBAIHN0YXRpYyBpbnQgaWVlZTgwMjExX2tleV9yZXBsYWNlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbiBcXHRcXHRcXHRpZiAobmV3IFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdFxcdCAgICAhKG5ldy1cXHUwMDNlY29uZi5mbGFncyBcXHUwMDI2IElFRUU4MDIxMV9LRVlfRkxBR19OT19BVVRPX1RYKSlcXG4gXFx0XFx0XFx0XFx0X2llZWU4MDIxMV9zZXRfdHhfa2V5KG5ldywgdHJ1ZSk7XFxuK1xcdFxcdH0gZWxzZSBpZiAoY2lwKSB7XFxuK1xcdFxcdFxcdHJjdV9hc3NpZ25fcG9pbnRlcihsaW5rX3N0YS1cXHUwMDNlY2lndGtbaWR4XSwgbmV3KTtcXG4gXFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKGxpbmtfc3RhLVxcdTAwM2VndGtbaWR4XSwgbmV3KTtcXG4gXFx0XFx0fVxcbkBAIC01NjksNiArNTc3LDggQEAgc3RhdGljIGludCBpZWVlODAyMTFfa2V5X3JlcGxhY2Uoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuIFxcbiBcXHRcXHRpZiAoaXNfd2VwIHx8IHBhaXJ3aXNlKVxcbiBcXHRcXHRcXHRyY3VfYXNzaWduX3BvaW50ZXIoc2RhdGEtXFx1MDAzZWtleXNbaWR4XSwgbmV3KTtcXG4rXFx0XFx0ZWxzZSBpZiAoY2lwKVxcbitcXHRcXHRcXHRyY3VfYXNzaWduX3BvaW50ZXIobGluay1cXHUwMDNlY2lndGtbaWR4XSwgbmV3KTtcXG4gXFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRyY3VfYXNzaWduX3BvaW50ZXIobGluay1cXHUwMDNlZ3RrW2lkeF0sIG5ldyk7XFxuIFxcbkBAIC04ODMsNiArODkzLDEwIEBAIGludCBpZWVlODAyMTFfa2V5X2xpbmsoc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSxcXG4gXFx0XFx0XFx0cmV0ID0gLUVPUE5PVFNVUFA7XFxuIFxcdFxcdFxcdGdvdG8gb3V0O1xcbiBcXHRcXHR9XFxuK1xcbitcXHRcXHQvKiBTZXQgQ0lQIGZsYWcgaWYgZW5hYmxlZCBmb3IgdGhlIHN0YXRpb24gKi9cXG4rXFx0XFx0aWYgKHN0YS1cXHUwMDNlc3RhLmNpcClcXG4rXFx0XFx0XFx0a2V5LVxcdTAwM2Vjb25mLmZsYWdzIHw9IElFRUU4MDIxMV9LRVlfRkxBR19DSVA7XFxuIFxcdH0gZWxzZSBpZiAoc3RhKSB7XFxuIFxcdFxcdHN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YSA9IFxcdTAwMjZzdGEtXFx1MDAzZWRlZmxpbms7XFxuIFxcdFxcdGludCBsaW5rX2lkID0ga2V5LVxcdTAwM2Vjb25mLmxpbmtfaWQ7XFxuQEAgLTg5NiwxNSArOTEwLDI1IEBAIGludCBpZWVlODAyMTFfa2V5X2xpbmsoc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSxcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHR9XFxuIFxcbi1cXHRcXHRvbGRfa2V5ID0gd2lwaHlfZGVyZWZlcmVuY2Uoc2RhdGEtXFx1MDAzZWxvY2FsLVxcdTAwM2Vody53aXBoeSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgIGxpbmtfc3RhLVxcdTAwM2VndGtbaWR4XSk7XFxuLVxcdH0gZWxzZSB7XFxuLVxcdFxcdGlmIChpZHggXFx1MDAzYyBOVU1fREVGQVVMVF9LRVlTKVxcbitcXHRcXHRpZiAoa2V5LVxcdTAwM2Vjb25mLmZsYWdzIFxcdTAwMjYgSUVFRTgwMjExX0tFWV9GTEFHX0NJUClcXG4gXFx0XFx0XFx0b2xkX2tleSA9IHdpcGh5X2RlcmVmZXJlbmNlKHNkYXRhLVxcdTAwM2Vsb2NhbC1cXHUwMDNlaHcud2lwaHksXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICBzZGF0YS1cXHUwMDNla2V5c1tpZHhdKTtcXG4tXFx0XFx0aWYgKCFvbGRfa2V5KVxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgbGlua19zdGEtXFx1MDAzZWNpZ3RrW2lkeF0pO1xcbitcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdG9sZF9rZXkgPSB3aXBoeV9kZXJlZmVyZW5jZShzZGF0YS1cXHUwMDNlbG9jYWwtXFx1MDAzZWh3LndpcGh5LFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgbGluay1cXHUwMDNlZ3RrW2lkeF0pO1xcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgbGlua19zdGEtXFx1MDAzZWd0a1tpZHhdKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0aWYgKGtleS1cXHUwMDNlY29uZi5mbGFncyBcXHUwMDI2IElFRUU4MDIxMV9LRVlfRkxBR19DSVApIHtcXG4rXFx0XFx0XFx0b2xkX2tleSA9IHdpcGh5X2RlcmVmZXJlbmNlKHNkYXRhLVxcdTAwM2Vsb2NhbC1cXHUwMDNlaHcud2lwaHksXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBsaW5rLVxcdTAwM2VjaWd0a1tpZHhdKTtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0aWYgKGlkeCBcXHUwMDNjIE5VTV9ERUZBVUxUX0tFWVMpXFxuK1xcdFxcdFxcdFxcdG9sZF9rZXkgPSB3aXBoeV9kZXJlZmVyZW5jZShzZGF0YS1cXHUwMDNlbG9jYWwtXFx1MDAzZWh3LndpcGh5LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgc2RhdGEtXFx1MDAzZWtleXNbaWR4XSk7XFxuK1xcbitcXHRcXHRcXHRpZiAoIW9sZF9rZXkpXFxuK1xcdFxcdFxcdFxcdG9sZF9rZXkgPSB3aXBoeV9kZXJlZmVyZW5jZShzZGF0YS1cXHUwMDNlbG9jYWwtXFx1MDAzZWh3LndpcGh5LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgbGluay1cXHUwMDNlZ3RrW2lkeF0pO1xcbitcXHRcXHR9XFxuIFxcdH1cXG4gXFxuIFxcdC8qIE5vbi1wYWlyd2lzZSBrZXlzIG11c3QgYWxzbyBub3Qgc3dpdGNoIHRoZSBjaXBoZXIgb24gcmVrZXkgKi9cXG5AQCAtOTM4LDkgKzk2MiwxNyBAQCBpbnQgaWVlZTgwMjExX2tleV9saW5rKHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXksXFxuIFxcdGlmIChzdGEgXFx1MDAyNlxcdTAwMjYgc3RhLVxcdTAwM2VzdGEuc3BwX2Ftc2R1KVxcbiBcXHRcXHRrZXktXFx1MDAzZWNvbmYuZmxhZ3MgfD0gSUVFRTgwMjExX0tFWV9GTEFHX1NQUF9BTVNEVTtcXG4gXFxuK1xcdC8qIEEgQ0lQIHJlbGF0ZWQga2V5IG11c3QgYmUgR0NNUC0yNTYgKHJlYWxseSBHTUFDLTI1NikgKi9cXG4rXFx0aWYgKChrZXktXFx1MDAzZWNvbmYuZmxhZ3MgXFx1MDAyNiBJRUVFODAyMTFfS0VZX0ZMQUdfQ0lQKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAga2V5LVxcdTAwM2Vjb25mLmNpcGhlciAhPSBXTEFOX0NJUEhFUl9TVUlURV9HQ01QXzI1Nikge1xcbitcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4gXFx0aW5jcmVtZW50X3RhaWxyb29tX25lZWRfY291bnQoc2RhdGEpO1xcbiBcXG4tXFx0cmV0ID0gaWVlZTgwMjExX2tleV9yZXBsYWNlKHNkYXRhLCBsaW5rLCBzdGEsIHBhaXJ3aXNlLCBvbGRfa2V5LCBrZXkpO1xcbitcXHRyZXQgPSBpZWVlODAyMTFfa2V5X3JlcGxhY2Uoc2RhdGEsIGxpbmssIHN0YSwga2V5LVxcdTAwM2Vjb25mLmZsYWdzLFxcbitcXHRcXHRcXHRcXHQgICAgb2xkX2tleSwga2V5KTtcXG4gXFxuIFxcdGlmICghcmV0KSB7XFxuIFxcdFxcdGllZWU4MDIxMV9kZWJ1Z2ZzX2tleV9hZGQoa2V5KTtcXG5AQCAtOTY2LDggKzk5OCw3IEBAIHZvaWQgaWVlZTgwMjExX2tleV9mcmVlKHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXksIGJvb2wgZGVsYXlfdGFpbHJvb20pXFxuIFxcdCAqL1xcbiBcXHRpZiAoa2V5LVxcdTAwM2VzZGF0YSlcXG4gXFx0XFx0aWVlZTgwMjExX2tleV9yZXBsYWNlKGtleS1cXHUwMDNlc2RhdGEsIE5VTEwsIGtleS1cXHUwMDNlc3RhLFxcbi1cXHRcXHRcXHRcXHQgICAgICBrZXktXFx1MDAzZWNvbmYuZmxhZ3MgXFx1MDAyNiBJRUVFODAyMTFfS0VZX0ZMQUdfUEFJUldJU0UsXFxuLVxcdFxcdFxcdFxcdCAgICAgIGtleSwgTlVMTCk7XFxuK1xcdFxcdFxcdFxcdCAgICAgIGtleS1cXHUwMDNlY29uZi5mbGFncywga2V5LCBOVUxMKTtcXG4gXFx0aWVlZTgwMjExX2tleV9kZXN0cm95KGtleSwgZGVsYXlfdGFpbHJvb20pO1xcbiB9XFxuIFxcbkBAIC0xMDk4LDggKzExMjksNyBAQCBzdGF0aWMgdm9pZCBpZWVlODAyMTFfZnJlZV9rZXlzX2lmYWNlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbiBcXG4gXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGtleSwgdG1wLCBcXHUwMDI2c2RhdGEtXFx1MDAzZWtleV9saXN0LCBsaXN0KSB7XFxuIFxcdFxcdGllZWU4MDIxMV9rZXlfcmVwbGFjZShrZXktXFx1MDAzZXNkYXRhLCBOVUxMLCBrZXktXFx1MDAzZXN0YSxcXG4tXFx0XFx0XFx0XFx0ICAgICAga2V5LVxcdTAwM2Vjb25mLmZsYWdzIFxcdTAwMjYgSUVFRTgwMjExX0tFWV9GTEFHX1BBSVJXSVNFLFxcbi1cXHRcXHRcXHRcXHQgICAgICBrZXksIE5VTEwpO1xcbitcXHRcXHRcXHRcXHQgICAgICBrZXktXFx1MDAzZWNvbmYuZmxhZ3MsIGtleSwgTlVMTCk7XFxuIFxcdFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNmtleS1cXHUwMDNlbGlzdCwga2V5cyk7XFxuIFxcdH1cXG4gXFxuQEAgLTExMTksOCArMTE0OSw3IEBAIHZvaWQgaWVlZTgwMjExX3JlbW92ZV9saW5rX2tleXMoc3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbmssXFxuIFxcdFxcdGlmIChrZXktXFx1MDAzZWNvbmYubGlua19pZCAhPSBsaW5rLVxcdTAwM2VsaW5rX2lkKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0aWVlZTgwMjExX2tleV9yZXBsYWNlKGtleS1cXHUwMDNlc2RhdGEsIGxpbmssIGtleS1cXHUwMDNlc3RhLFxcbi1cXHRcXHRcXHRcXHQgICAgICBrZXktXFx1MDAzZWNvbmYuZmxhZ3MgXFx1MDAyNiBJRUVFODAyMTFfS0VZX0ZMQUdfUEFJUldJU0UsXFxuLVxcdFxcdFxcdFxcdCAgICAgIGtleSwgTlVMTCk7XFxuK1xcdFxcdFxcdFxcdCAgICAgIGtleS1cXHUwMDNlY29uZi5mbGFncywga2V5LCBOVUxMKTtcXG4gXFx0XFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2a2V5LVxcdTAwM2VsaXN0LCBrZXlzKTtcXG4gXFx0fVxcbiB9XFxuQEAgLTExOTYsOCArMTIyNSwxNyBAQCB2b2lkIGllZWU4MDIxMV9mcmVlX3N0YV9rZXlzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxcbiBcXHRcXHRpZiAoIWtleSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdGllZWU4MDIxMV9rZXlfcmVwbGFjZShrZXktXFx1MDAzZXNkYXRhLCBOVUxMLCBrZXktXFx1MDAzZXN0YSxcXG4tXFx0XFx0XFx0XFx0ICAgICAga2V5LVxcdTAwM2Vjb25mLmZsYWdzIFxcdTAwMjYgSUVFRTgwMjExX0tFWV9GTEFHX1BBSVJXSVNFLFxcbi1cXHRcXHRcXHRcXHQgICAgICBrZXksIE5VTEwpO1xcbitcXHRcXHRcXHRcXHQgICAgICBrZXktXFx1MDAzZWNvbmYuZmxhZ3MsIGtleSwgTlVMTCk7XFxuK1xcdFxcdF9faWVlZTgwMjExX2tleV9kZXN0cm95KGtleSwga2V5LVxcdTAwM2VzZGF0YS1cXHUwMDNldmlmLnR5cGUgPT1cXG4rXFx0XFx0XFx0XFx0XFx0Tkw4MDIxMV9JRlRZUEVfU1RBVElPTik7XFxuK1xcdH1cXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHN0YS1cXHUwMDNlZGVmbGluay5jaWd0ayk7IGkrKykge1xcbitcXHRcXHRrZXkgPSB3aXBoeV9kZXJlZmVyZW5jZShsb2NhbC1cXHUwMDNlaHcud2lwaHksIHN0YS1cXHUwMDNlZGVmbGluay5jaWd0a1tpXSk7XFxuK1xcdFxcdGlmICgha2V5KVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0aWVlZTgwMjExX2tleV9yZXBsYWNlKGtleS1cXHUwMDNlc2RhdGEsIE5VTEwsIGtleS1cXHUwMDNlc3RhLFxcbitcXHRcXHRcXHRcXHQgICAgICBrZXktXFx1MDAzZWNvbmYuZmxhZ3MsIGtleSwgTlVMTCk7XFxuIFxcdFxcdF9faWVlZTgwMjExX2tleV9kZXN0cm95KGtleSwga2V5LVxcdTAwM2VzZGF0YS1cXHUwMDNldmlmLnR5cGUgPT1cXG4gXFx0XFx0XFx0XFx0XFx0Tkw4MDIxMV9JRlRZUEVfU1RBVElPTik7XFxuIFxcdH1cXG5AQCAtMTIwNyw4ICsxMjQ1LDcgQEAgdm9pZCBpZWVlODAyMTFfZnJlZV9zdGFfa2V5cyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCxcXG4gXFx0XFx0aWYgKCFrZXkpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRpZWVlODAyMTFfa2V5X3JlcGxhY2Uoa2V5LVxcdTAwM2VzZGF0YSwgTlVMTCwga2V5LVxcdTAwM2VzdGEsXFxuLVxcdFxcdFxcdFxcdCAgICAgIGtleS1cXHUwMDNlY29uZi5mbGFncyBcXHUwMDI2IElFRUU4MDIxMV9LRVlfRkxBR19QQUlSV0lTRSxcXG4tXFx0XFx0XFx0XFx0ICAgICAga2V5LCBOVUxMKTtcXG4rXFx0XFx0XFx0XFx0ICAgICAga2V5LVxcdTAwM2Vjb25mLmZsYWdzLCBrZXksIE5VTEwpO1xcbiBcXHRcXHRfX2llZWU4MDIxMV9rZXlfZGVzdHJveShrZXksIGtleS1cXHUwMDNlc2RhdGEtXFx1MDAzZXZpZi50eXBlID09XFxuIFxcdFxcdFxcdFxcdFxcdE5MODAyMTFfSUZUWVBFX1NUQVRJT04pO1xcbiBcXHR9XFxuQEAgLTEzNjYsNyArMTQwMyw3IEBAIEVYUE9SVF9TWU1CT0xfR1BMKGllZWU4MDIxMV9zZXRfa2V5X3J4X3NlcSk7XFxuIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKlxcbiBpZWVlODAyMTFfZ3RrX3Jla2V5X2FkZChzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxcbiBcXHRcXHRcXHR1OCBpZHgsIHU4ICprZXlfZGF0YSwgdTgga2V5X2xlbixcXG4tXFx0XFx0XFx0aW50IGxpbmtfaWQpXFxuK1xcdFxcdFxcdGludCBsaW5rX2lkLCBib29sIGNpZ3RrKVxcbiB7XFxuIFxcdHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gdmlmX3RvX3NkYXRhKHZpZik7XFxuIFxcdHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtXFx1MDAzZWxvY2FsO1xcbkBAIC0xMzkwLDEwICsxNDI3LDIwIEBAIGllZWU4MDIxMV9ndGtfcmVrZXlfYWRkKHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXFxuIFxcdFxcdCAgICBOVU1fREVGQVVMVF9CRUFDT05fS0VZUykpXFxuIFxcdFxcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xcbiBcXG4tXFx0cHJldl9rZXkgPSB3aXBoeV9kZXJlZmVyZW5jZShsb2NhbC1cXHUwMDNlaHcud2lwaHksXFxuLVxcdFxcdFxcdFxcdCAgICAgbGlua19kYXRhLVxcdTAwM2VndGtbaWR4XSk7XFxuK1xcdGlmIChXQVJOX09OKGNpZ3RrIFxcdTAwMjZcXHUwMDI2IGlkeCBcXHUwMDNlPSBOVU1fQ1RSTF9LRVlTKSlcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XFxuK1xcbitcXHRpZiAoY2lndGspXFxuK1xcdFxcdHByZXZfa2V5ID0gd2lwaHlfZGVyZWZlcmVuY2UobG9jYWwtXFx1MDAzZWh3LndpcGh5LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIGxpbmtfZGF0YS1cXHUwMDNlY2lndGtbaWR4XSk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0cHJldl9rZXkgPSB3aXBoeV9kZXJlZmVyZW5jZShsb2NhbC1cXHUwMDNlaHcud2lwaHksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgbGlua19kYXRhLVxcdTAwM2VndGtbaWR4XSk7XFxuIFxcdGlmICghcHJldl9rZXkpIHtcXG4tXFx0XFx0aWYgKGlkeCBcXHUwMDNjIE5VTV9ERUZBVUxUX0tFWVMpIHtcXG4rXFx0XFx0aWYgKGNpZ3RrKSB7XFxuK1xcdFxcdFxcdHByZXZfa2V5ID0gd2lwaHlfZGVyZWZlcmVuY2UobG9jYWwtXFx1MDAzZWh3LndpcGh5LFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGxpbmtfZGF0YS1cXHUwMDNlY2lndGtbaWR4IF4gMV0pO1xcbitcXHRcXHR9IGVsc2UgaWYgKGlkeCBcXHUwMDNjIE5VTV9ERUZBVUxUX0tFWVMpIHtcXG4gXFx0XFx0XFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyBOVU1fREVGQVVMVF9LRVlTOyBpKyspIHtcXG4gXFx0XFx0XFx0XFx0aWYgKGkgPT0gaWR4KVxcbiBcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG5AQCAtMTQyNCw2ICsxNDcxLDkgQEAgaWVlZTgwMjExX2d0a19yZWtleV9hZGQoc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcXG4gXFx0aWYgKHNkYXRhLVxcdTAwM2V1Lm1nZC5tZnAgIT0gSUVFRTgwMjExX01GUF9ESVNBQkxFRClcXG4gXFx0XFx0a2V5LVxcdTAwM2Vjb25mLmZsYWdzIHw9IElFRUU4MDIxMV9LRVlfRkxBR19SWF9NR01UO1xcbiBcXG4rXFx0aWYgKHByZXZfa2V5LVxcdTAwM2Vjb25mLmZsYWdzIFxcdTAwMjYgSUVFRTgwMjExX0tFWV9GTEFHX0NJUClcXG4rXFx0XFx0a2V5LVxcdTAwM2Vjb25mLmZsYWdzIHw9IElFRUU4MDIxMV9LRVlfRkxBR19DSVA7XFxuK1xcbiBcXHRrZXktXFx1MDAzZWNvbmYubGlua19pZCA9IGxpbmtfZGF0YS1cXHUwMDNlbGlua19pZDtcXG4gXFxuIFxcdGVyciA9IGllZWU4MDIxMV9rZXlfbGluayhrZXksIGxpbmtfZGF0YSwgTlVMTCk7XFxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9rZXkuaCBiL25ldC9tYWM4MDIxMS9rZXkuaFxcbmluZGV4IDgyNmU0ZTkzODdjNTUuLmM4NTk5MjQ5M2FmZDEgMTAwNjQ0XFxuLS0tIGEvbmV0L21hYzgwMjExL2tleS5oXFxuKysrIGIvbmV0L21hYzgwMjExL2tleS5oXFxuQEAgLTIsNyArMiw3IEBAXFxuIC8qXFxuICAqIENvcHlyaWdodCAyMDAyLTIwMDQsIEluc3RhbnQ4MDIgTmV0d29ya3MsIEluYy5cXG4gICogQ29weXJpZ2h0IDIwMDUsIERldmljZXNjYXBlIFNvZnR3YXJlLCBJbmMuXFxuLSAqIENvcHlyaWdodCAoQykgMjAxOSwgMjAyMi0yMDIzIEludGVsIENvcnBvcmF0aW9uXFxuKyAqIENvcHlyaWdodCAoQykgMjAxOSwgMjAyMi0yMDIzLCAyMDI2IEludGVsIENvcnBvcmF0aW9uXFxuICAqL1xcbiBcXG4gI2lmbmRlZiBJRUVFODAyMTFfS0VZX0hcXG5AQCAtMTksNiArMTksNyBAQFxcbiAjZGVmaW5lIE5VTV9ERUZBVUxUX0tFWVMgNFxcbiAjZGVmaW5lIE5VTV9ERUZBVUxUX01HTVRfS0VZUyAyXFxuICNkZWZpbmUgTlVNX0RFRkFVTFRfQkVBQ09OX0tFWVMgMlxcbisjZGVmaW5lIE5VTV9DVFJMX0tFWVMgMlxcbiAjZGVmaW5lIElOVkFMSURfUFRLX0tFWUlEWCAyIC8qIEtleWlkeCBhbHdheXMgcG9pbnRpbmcgdG8gYSBOVUxMIGtleSBmb3IgUFRLICovXFxuIFxcbiBzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsO1xcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvbWxtZS5jIGIvbmV0L21hYzgwMjExL21sbWUuY1xcbmluZGV4IGY1MTE2N2YwZmM0NmQuLjM0ZDcxM2M5YTY5MTQgMTAwNjQ0XFxuLS0tIGEvbmV0L21hYzgwMjExL21sbWUuY1xcbisrKyBiL25ldC9tYWM4MDIxMS9tbG1lLmNcXG5AQCAtMjMzNyw2ICsyMzM3LDEwIEBAIGllZWU4MDIxMV9hZGRfbGlua19lbGVtcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4gXFx0XFx0aWVlZTgwMjExX3B1dF9laHRfY2FwKHNrYiwgc2RhdGEsIHNiYW5kLFxcbiBcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2YXNzb2NfZGF0YS1cXHUwMDNlbGlua1tsaW5rX2lkXS5jb25uKTtcXG4gXFxuK1xcdC8qIEluc2VydCBDSVAgb25seSBvbiB0aGUgYXNzb2MgbGluayAoaXQgd2lsbCBiZSBpbmhlcml0ZWQpICovXFxuK1xcdGlmIChsaW5rX2lkID09IGFzc29jX2RhdGEtXFx1MDAzZWFzc29jX2xpbmtfaWQgXFx1MDAyNlxcdTAwMjYgYXNzb2NfZGF0YS1cXHUwMDNlY2lwKVxcbitcXHRcXHRpZWVlODAyMTFfcHV0X2NpcF9jYXAoc2tiLCBzZGF0YSk7XFxuK1xcbiBcXHRpZiAoYXNzb2NfZGF0YS1cXHUwMDNlbGlua1tsaW5rX2lkXS5jb25uLm1vZGUgXFx1MDAzZT0gSUVFRTgwMjExX0NPTk5fTU9ERV9VSFIpXFxuIFxcdFxcdGllZWU4MDIxMV9wdXRfdWhyX2NhcChza2IsIHNkYXRhLCBzYmFuZCk7XFxuIFxcbkBAIC0yNjEzLDcgKzI2MTcsOCBAQCBzdGF0aWMgaW50IGllZWU4MDIxMV9zZW5kX2Fzc29jKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKVxcbiBcXHQgICAgICAgYXNzb2NfZGF0YS1cXHUwMDNlaWVfbGVuICsgLyogZXh0cmEgSUVzICovXFxuIFxcdCAgICAgICAoYXNzb2NfZGF0YS1cXHUwMDNlZmlsc19rZWtfbGVuID8gMTYgLyogQUVTLVNJViAqLyA6IDApICtcXG4gXFx0ICAgICAgIDkgLyogV01NICovICtcXG4tXFx0ICAgICAgIDQgLyogcmVndWxhdG9yeSBjb25uZWN0aXZpdHksIGlmIDYgR0h6IGlzIHN1cHBvcnRlZCAqLztcXG4rXFx0ICAgICAgIDQgLyogcmVndWxhdG9yeSBjb25uZWN0aXZpdHksIGlmIDYgR0h6IGlzIHN1cHBvcnRlZCAqLyArXFxuK1xcdCAgICAgICAoYXNzb2NfZGF0YS1cXHUwMDNlY2lwID8gNCAvKiBDSVAgY2FwYWJpbGl0aWVzICovIDogMCk7XFxuIFxcbiBcXHRmb3IgKGxpbmtfaWQgPSAwOyBsaW5rX2lkIFxcdTAwM2MgSUVFRTgwMjExX01MRF9NQVhfTlVNX0xJTktTOyBsaW5rX2lkKyspIHtcXG4gXFx0XFx0c3RydWN0IGNmZzgwMjExX2JzcyAqY2JzcyA9IGFzc29jX2RhdGEtXFx1MDAzZWxpbmtbbGlua19pZF0uYnNzO1xcbkBAIC02Mjc0LDYgKzYyNzksMTkgQEAgc3RhdGljIGJvb2wgaWVlZTgwMjExX2Fzc29jX2NvbmZpZ19saW5rKHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rLFxcbiBcXHRcXHQvKiBUT0RPOiBPUEVOOiB3aGF0IGhhcHBlbnMgaWYgQlNTIGNvbG9yIGRpc2FibGUgaXMgc2V0PyAqL1xcbiBcXHR9XFxuIFxcbitcXHRpZiAoYXNzb2NfZGF0YS1cXHUwMDNlY2lwKSB7XFxuK1xcdFxcdGlmIChlbGVtcy1cXHUwMDNlY2lwX2NhcCkge1xcbitcXHRcXHRcXHRsaW5rX3N0YS1cXHUwMDNlcHViLVxcdTAwM2VjaXBfbWljX3BhZGRpbmcgPVxcbitcXHRcXHRcXHRcXHR1OF9nZXRfYml0cyhlbGVtcy1cXHUwMDNlY2lwX2NhcC1cXHUwMDNldixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIFdMQU5fQ0lQX0NBUEFfTUlDX1BBRERJTkcpO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRzZGF0YV9pbmZvKHNkYXRhLFxcbitcXHRcXHRcXHRcXHQgICBcXFwiQ0lQIENhcGFiaWxpdGllcyBub3QgaW5jbHVkZWQgaW4gYXNzb2NpYXRpb24gcmVzcG9uc2VcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRyZXQgPSBmYWxzZTtcXG4rXFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4gXFx0aWYgKGNic3MtXFx1MDAzZXRyYW5zbWl0dGVkX2Jzcykge1xcbiBcXHRcXHRic3NfY29uZi1cXHUwMDNlbm9udHJhbnNtaXR0ZWQgPSB0cnVlO1xcbiBcXHRcXHRldGhlcl9hZGRyX2NvcHkoYnNzX2NvbmYtXFx1MDAzZXRyYW5zbWl0dGVyX2Jzc2lkLFxcbkBAIC03MDAwLDYgKzcwMTgsNyBAQCBzdGF0aWMgYm9vbCBpZWVlODAyMTFfYXNzb2Nfc3VjY2VzcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4gXFx0XFx0Z290byBvdXRfZXJyO1xcbiBcXG4gXFx0c3RhLVxcdTAwM2VzdGEuc3BwX2Ftc2R1ID0gYXNzb2NfZGF0YS1cXHUwMDNlc3BwX2Ftc2R1O1xcbitcXHRzdGEtXFx1MDAzZXN0YS5jaXAgPSBhc3NvY19kYXRhLVxcdTAwM2VjaXA7XFxuIFxcbiBcXHRpZiAoaWVlZTgwMjExX3ZpZl9pc19tbGQoXFx1MDAyNnNkYXRhLVxcdTAwM2V2aWYpKSB7XFxuIFxcdFxcdGlmICghZWxlbXMtXFx1MDAzZW1sX2Jhc2ljKVxcbkBAIC0xMDUzOCw2ICsxMDU1Nyw3IEBAIGludCBpZWVlODAyMTFfbWdkX2Fzc29jKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbiBcXHR9XFxuIFxcbiBcXHRhc3NvY19kYXRhLVxcdTAwM2VzcHBfYW1zZHUgPSByZXEtXFx1MDAzZWZsYWdzIFxcdTAwMjYgQVNTT0NfUkVRX1NQUF9BTVNEVTtcXG4rXFx0YXNzb2NfZGF0YS1cXHUwMDNlY2lwID0gcmVxLVxcdTAwM2VmbGFncyBcXHUwMDI2IEFTU09DX1JFUV9DSVA7XFxuIFxcbiBcXHRpZiAoaWZtZ2QtXFx1MDAzZWF1dGhfZGF0YSBcXHUwMDI2XFx1MDAyNiAhaWZtZ2QtXFx1MDAzZWF1dGhfZGF0YS1cXHUwMDNlZG9uZSkge1xcbiBcXHRcXHRlcnIgPSAtRUJVU1k7XFxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9wYXJzZS5jIGIvbmV0L21hYzgwMjExL3BhcnNlLmNcXG5pbmRleCBjYjJiZTE2N2NkZTc5Li4zYjY2Y2E3ZDdhNWMyIDEwMDY0NFxcbi0tLSBhL25ldC9tYWM4MDIxMS9wYXJzZS5jXFxuKysrIGIvbmV0L21hYzgwMjExL3BhcnNlLmNcXG5AQCAtMjA1LDYgKzIwNSwxMCBAQCBpZWVlODAyMTFfcGFyc2VfZXh0ZW5zaW9uX2VsZW1lbnQodTMyICpjcmMsXFxuIFxcdFxcdFxcdGVsZW1zLVxcdTAwM2V0dGxtX251bSsrO1xcbiBcXHRcXHR9XFxuIFxcdFxcdGJyZWFrO1xcbitcXHRjYXNlIFdMQU5fRUlEX0VYVF9DSVBfQ0FQQTpcXG4rXFx0XFx0aWYgKGxlbiBcXHUwMDNlPSBzaXplb2YoKmVsZW1zLVxcdTAwM2VjaXBfY2FwKSlcXG4rXFx0XFx0XFx0ZWxlbXMtXFx1MDAzZWNpcF9jYXAgPSBkYXRhO1xcbitcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBXTEFOX0VJRF9FWFRfVUhSX09QRVI6XFxuIFxcdFxcdGlmIChwYXJhbXMtXFx1MDAzZW1vZGUgXFx1MDAzYyBJRUVFODAyMTFfQ09OTl9NT0RFX1VIUilcXG4gXFx0XFx0XFx0YnJlYWs7XFxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9zdGFfaW5mby5oIGIvbmV0L21hYzgwMjExL3N0YV9pbmZvLmhcXG5pbmRleCBlZTBkMzI4NzdjNWI0Li5mNDA5ZjZhM2FmYTFmIDEwMDY0NFxcbi0tLSBhL25ldC9tYWM4MDIxMS9zdGFfaW5mby5oXFxuKysrIGIvbmV0L21hYzgwMjExL3N0YV9pbmZvLmhcXG5AQCAtNDg1LDYgKzQ4NSw3IEBAIHN0cnVjdCBpZWVlODAyMTFfZnJhZ21lbnRfY2FjaGUge1xcbiAgKiBAbGlua19oYXNoX25vZGU6IGhhc2ggbm9kZSBmb3Igcmhhc2h0YWJsZVxcbiAgKiBAc3RhOiBQb2ludHMgdG8gdGhlIFNUQSBpbmZvXFxuICAqIEBndGs6IGdyb3VwIGtleXMgbmVnb3RpYXRlZCB3aXRoIHRoaXMgc3RhdGlvbiwgaWYgYW55XFxuKyAqIEBjaWd0azogY29udHJvbCBpbnRlZ3JpdHkgZ3JvdXAga2V5cyBuZWdvdGlhdGVkIHdpdGggdGhpcyBzdGF0aW9uLCBpZiBhbnlcXG4gICogQHR4X3N0YXRzOiBUWCBzdGF0aXN0aWNzXFxuICAqIEB0eF9zdGF0cy5wYWNrZXRzOiAjIG9mIHBhY2tldHMgdHJhbnNtaXR0ZWRcXG4gICogQHR4X3N0YXRzLmJ5dGVzOiAjIG9mIGJ5dGVzIGluIGFsbCBwYWNrZXRzIHRyYW5zbWl0dGVkXFxuQEAgLTUzNSw2ICs1MzYsNyBAQCBzdHJ1Y3QgbGlua19zdGFfaW5mbyB7XFxuIFxcdHN0cnVjdCBpZWVlODAyMTFfa2V5IF9fcmN1ICpndGtbTlVNX0RFRkFVTFRfS0VZUyArXFxuIFxcdFxcdFxcdFxcdFxcdE5VTV9ERUZBVUxUX01HTVRfS0VZUyArXFxuIFxcdFxcdFxcdFxcdFxcdE5VTV9ERUZBVUxUX0JFQUNPTl9LRVlTXTtcXG4rXFx0c3RydWN0IGllZWU4MDIxMV9rZXkgX19yY3UgKmNpZ3RrW05VTV9DVFJMX0tFWVNdO1xcbiBcXHRzdHJ1Y3QgaWVlZTgwMjExX3N0YV9yeF9zdGF0cyBfX3BlcmNwdSAqcGNwdV9yeF9zdGF0cztcXG4gXFxuIFxcdC8qIFVwZGF0ZWQgZnJvbSBSWCBwYXRoIG9ubHksIG5vIGxvY2tpbmcgcmVxdWlyZW1lbnRzICovXFxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS91dGlsLmMgYi9uZXQvbWFjODAyMTEvdXRpbC5jXFxuaW5kZXggYTk2MDc4YTZiZmEyOS4uODMwM2Y2MjRiN2Y2MiAxMDA2NDRcXG4tLS0gYS9uZXQvbWFjODAyMTEvdXRpbC5jXFxuKysrIGIvbmV0L21hYzgwMjExL3V0aWwuY1xcbkBAIC00NjgwLDYgKzQ2ODAsMjUgQEAgaW50IGllZWU4MDIxMV9wdXRfdWhyX2NhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4raW50IGllZWU4MDIxMV9wdXRfY2lwX2NhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbitcXHRcXHRcXHQgIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCB3aXBoeV9pZnR5cGVfZXh0X2NhcGFiICppZnRfZXh0X2NhcGEgPVxcbitcXHRcXHRjZmc4MDIxMV9nZXRfaWZ0eXBlX2V4dF9jYXBhKHNkYXRhLVxcdTAwM2Vsb2NhbC1cXHUwMDNlaHcud2lwaHksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgaWVlZTgwMjExX3ZpZl90eXBlX3AycChcXHUwMDI2c2RhdGEtXFx1MDAzZXZpZikpO1xcbitcXHR1OCBjaXBfY2FwYWJpbGl0aWVzID0gaWZ0X2V4dF9jYXBhID8gaWZ0X2V4dF9jYXBhLVxcdTAwM2VjaXBfY2FwYWJpbGl0aWVzIDogMDtcXG4rXFxuK1xcdGlmIChza2JfdGFpbHJvb20oc2tiKSBcXHUwMDNjIDQpXFxuK1xcdFxcdHJldHVybiAtRU5PQlVGUztcXG4rXFxuK1xcdHNrYl9wdXRfdTgoc2tiLCBXTEFOX0VJRF9FWFRFTlNJT04pO1xcbitcXHRza2JfcHV0X3U4KHNrYiwgMik7XFxuK1xcdHNrYl9wdXRfdTgoc2tiLCBXTEFOX0VJRF9FWFRfQ0lQX0NBUEEpO1xcbitcXHRza2JfcHV0X3U4KHNrYiwgY2lwX2NhcGFiaWxpdGllcyk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gY29uc3QgY2hhciAqaWVlZTgwMjExX2Nvbm5fbW9kZV9zdHIoZW51bSBpZWVlODAyMTFfY29ubl9tb2RlIG1vZGUpXFxuIHtcXG4gXFx0c3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBtb2Rlc1tdID0ge1xcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvY29yZS5oIGIvbmV0L3dpcmVsZXNzL2NvcmUuaFxcbmluZGV4IDE1ZDlmN2ViNThiNGQuLjNiOTBhYThjYzZhY2YgMTAwNjQ0XFxuLS0tIGEvbmV0L3dpcmVsZXNzL2NvcmUuaFxcbisrKyBiL25ldC93aXJlbGVzcy9jb3JlLmhcXG5AQCAtNDQzLDEzICs0NDMsMTYgQEAgdm9pZCBjZmc4MDIxMV9zbWVfYWJhbmRvbl9hc3NvYyhzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2KTtcXG4gXFxuIC8qIGludGVybmFsIGhlbHBlcnMgKi9cXG4gYm9vbCBjZmc4MDIxMV9zdXBwb3J0ZWRfY2lwaGVyX3N1aXRlKHN0cnVjdCB3aXBoeSAqd2lwaHksIHUzMiBjaXBoZXIpO1xcbitib29sIGNmZzgwMjExX2NpZ3RrX3N1cHBvcnRlZChzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxcbitcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTtcXG4gYm9vbCBjZmc4MDIxMV92YWxpZF9rZXlfaWR4KHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxuLVxcdFxcdFxcdCAgICBpbnQga2V5X2lkeCwgYm9vbCBwYWlyd2lzZSxcXG4rXFx0XFx0XFx0ICAgIGludCBrZXlfaWR4LCBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSxcXG4gXFx0XFx0XFx0ICAgIGNvbnN0IHU4ICptYWNfYWRkcik7XFxuIGludCBjZmc4MDIxMV92YWxpZGF0ZV9rZXlfc2V0dGluZ3Moc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbiBcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxcbiBcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qga2V5X3BhcmFtcyAqcGFyYW1zLCBpbnQga2V5X2lkeCxcXG4tXFx0XFx0XFx0XFx0ICAgYm9vbCBwYWlyd2lzZSwgY29uc3QgdTggKm1hY19hZGRyKTtcXG4rXFx0XFx0XFx0XFx0ICAgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsXFxuK1xcdFxcdFxcdFxcdCAgIGNvbnN0IHU4ICptYWNfYWRkcik7XFxuIHZvaWQgX19jZmc4MDIxMV9zY2FuX2RvbmUoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcGh5X3dvcmsgKndrKTtcXG4gdm9pZCBfX19jZmc4MDIxMV9zY2FuX2RvbmUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbiBcXHRcXHRcXHQgICBib29sIHNlbmRfbWVzc2FnZSk7XFxuZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9pYnNzLmMgYi9uZXQvd2lyZWxlc3MvaWJzcy5jXFxuaW5kZXggYjFkNzQ4YmRiNTA0ZS4uNmFlNTYxZWQ3ZjM3ZiAxMDA2NDRcXG4tLS0gYS9uZXQvd2lyZWxlc3MvaWJzcy5jXFxuKysrIGIvbmV0L3dpcmVsZXNzL2lic3MuY1xcbkBAIC0xNzIsNyArMTcyLDggQEAgdm9pZCBjZmc4MDIxMV9jbGVhcl9pYnNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgbm93ZXh0KVxcbiBcXHQgKi9cXG4gXFx0aWYgKHJkZXYtXFx1MDAzZW9wcy1cXHUwMDNlZGVsX2tleSlcXG4gXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIDY7IGkrKylcXG4tXFx0XFx0XFx0cmRldl9kZWxfa2V5KHJkZXYsIHdkZXYsIC0xLCBpLCBmYWxzZSwgTlVMTCk7XFxuK1xcdFxcdFxcdHJkZXZfZGVsX2tleShyZGV2LCB3ZGV2LCAtMSwgaSwgTkw4MDIxMV9LRVlUWVBFX0dST1VQLFxcbitcXHRcXHRcXHRcXHQgICAgIE5VTEwpO1xcbiBcXG4gXFx0aWYgKHdkZXYtXFx1MDAzZXUuaWJzcy5jdXJyZW50X2Jzcykge1xcbiBcXHRcXHRjZmc4MDIxMV91bmhvbGRfYnNzKHdkZXYtXFx1MDAzZXUuaWJzcy5jdXJyZW50X2Jzcyk7XFxuZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9ubDgwMjExLmMgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXFxuaW5kZXggOGFkYmVmNWYwNDQyNS4uNTY2NDhmN2Q5YzdmZSAxMDA2NDRcXG4tLS0gYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXFxuKysrIGIvbmV0L3dpcmVsZXNzL25sODAyMTEuY1xcbkBAIC0xMDk2LDYgKzEwOTYsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmw4MDIxMV9wb2xpY3lbTlVNX05MODAyMTFfQVRUUl0gPSB7XFxuIFxcdFtOTDgwMjExX0FUVFJfTlBDQV9QVU5DVF9CSVRNQVBdID1cXG4gXFx0XFx0TkxBX1BPTElDWV9GVUxMX1JBTkdFKE5MQV9VMzIsIFxcdTAwMjZubDgwMjExX3B1bmN0X2JpdG1hcF9yYW5nZSksXFxuIFxcdFtOTDgwMjExX0FUVFJfU1RBX0RVTVBfTElOS19TVEFUU10gPSB7IC50eXBlID0gTkxBX0ZMQUcgfSxcXG4rXFx0W05MODAyMTFfQVRUUl9BU1NPQ19DSVBdID0geyAudHlwZSA9IE5MQV9GTEFHIH0sXFxuK1xcdFtOTDgwMjExX0FUVFJfQ0lQX0NBUEFCSUxJVElFU10gPSB7IC50eXBlID0gTkxBX1U4IH0sXFxuIH07XFxuIFxcbiAvKiBwb2xpY3kgZm9yIHRoZSBrZXkgYXR0cmlidXRlcyAqL1xcbkBAIC0xNzYxLDYgKzE3NjMsMTEgQEAgc3RhdGljIGludCBubDgwMjExX3BhcnNlX2tleShzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCBzdHJ1Y3Qga2V5X3BhcnNlICprKVxcbiBcXHRcXHRcXHRcXHRHRU5MX1NFVF9FUlJfTVNHKGluZm8sIFxcXCJkZWYga2V5IGlkeCBub3QgMC0zXFxcIik7XFxuIFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHRcXHRcXHR9XFxuK1xcdFxcdH0gZWxzZSBpZiAoay1cXHUwMDNldHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfQ0lHVEspIHtcXG4rXFx0XFx0XFx0aWYgKGstXFx1MDAzZWlkeCBcXHUwMDNjIDAgfHwgay1cXHUwMDNlaWR4IFxcdTAwM2UgMSkge1xcbitcXHRcXHRcXHRcXHRHRU5MX1NFVF9FUlJfTVNHKGluZm8sIFxcXCJDSUdUSyBpZHggbm90IDAtMVxcXCIpO1xcbitcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0XFx0fVxcbiBcXHRcXHR9IGVsc2Uge1xcbiBcXHRcXHRcXHRpZiAoay1cXHUwMDNlaWR4IFxcdTAwM2MgMCB8fCBrLVxcdTAwM2VpZHggXFx1MDAzZSA3KSB7XFxuIFxcdFxcdFxcdFxcdEdFTkxfU0VUX0VSUl9NU0coaW5mbywgXFxcImtleSBpZHggbm90IDAtN1xcXCIpO1xcbkBAIC0xODI1LDcgKzE4MzIsOSBAQCBubDgwMjExX3BhcnNlX2Nvbm5rZXlzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG4gXFx0XFx0fSBlbHNlIGlmIChwYXJzZS5kZWZtZ210KVxcbiBcXHRcXHRcXHRnb3RvIGVycm9yO1xcbiBcXHRcXHRlcnIgPSBjZmc4MDIxMV92YWxpZGF0ZV9rZXlfc2V0dGluZ3MocmRldiwgd2RldiwgXFx1MDAyNnBhcnNlLnAsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgcGFyc2UuaWR4LCBmYWxzZSwgTlVMTCk7XFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgcGFyc2UuaWR4LFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgIE5MODAyMTFfS0VZVFlQRV9HUk9VUCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBOVUxMKTtcXG4gXFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0Z290byBlcnJvcjtcXG4gXFx0XFx0aWYgKHBhcnNlLnAuY2lwaGVyICE9IFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDQwIFxcdTAwMjZcXHUwMDI2XFxuQEAgLTM2MTUsNiArMzYyNCwxMSBAQCBzdGF0aWMgaW50IG5sODAyMTFfc2VuZF93aXBoeShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdE5MODAyMTFfQVRUUl9FWFRfTUxEX0NBUEFfQU5EX09QUyxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0Y2FwYWItXFx1MDAzZWV4dF9tbGRfY2FwYV9hbmRfb3BzKSlcXG4gXFx0XFx0XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuK1xcdFxcdFxcdFxcdGlmIChjYXBhYi1cXHUwMDNlY2lwX3N1cHBvcnRlZCBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHRcXHQgICAgbmxhX3B1dF91OChtc2csXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBOTDgwMjExX0FUVFJfQ0lQX0NBUEFCSUxJVElFUyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIGNhcGFiLVxcdTAwM2VjaXBfY2FwYWJpbGl0aWVzKSlcXG4rXFx0XFx0XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuIFxcbiBcXHRcXHRcXHRcXHRubGFfbmVzdF9lbmQobXNnLCBuZXN0ZWRfZXh0X2NhcGFiKTtcXG4gXFx0XFx0XFx0XFx0aWYgKHN0YXRlLVxcdTAwM2VzcGxpdClcXG5AQCAtNTM3MSw2ICs1Mzg1LDcgQEAgc3RhdGljIGludCBubDgwMjExX2dldF9rZXkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4gXFx0c3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGluZm8tXFx1MDAzZXVzZXJfcHRyWzFdO1xcbiBcXHR1OCBrZXlfaWR4ID0gMDtcXG4gXFx0Y29uc3QgdTggKm1hY19hZGRyID0gTlVMTDtcXG4rXFx0ZW51bSBubDgwMjExX2tleV90eXBlIHR5cGU7XFxuIFxcdGJvb2wgcGFpcndpc2U7XFxuIFxcdHN0cnVjdCBnZXRfa2V5X2Nvb2tpZSBjb29raWUgPSB7XFxuIFxcdFxcdC5lcnJvciA9IDAsXFxuQEAgLTU0MDMsMTkgKzU0MTgsMjQgQEAgc3RhdGljIGludCBubDgwMjExX2dldF9rZXkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4gXFx0XFx0bWFjX2FkZHIgPSBubGFfZGF0YShpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfTUFDXSk7XFxuIFxcbiBcXHRwYWlyd2lzZSA9ICEhbWFjX2FkZHI7XFxuK1xcdHR5cGUgPSBwYWlyd2lzZSA/IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRSA6IE5MODAyMTFfS0VZVFlQRV9HUk9VUDtcXG4gXFx0aWYgKGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9LRVlfVFlQRV0pIHtcXG4tXFx0XFx0dTMyIGt0ID0gbmxhX2dldF91MzIoaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0tFWV9UWVBFXSk7XFxuK1xcdFxcdHR5cGUgPSBubGFfZ2V0X3UzMihpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfS0VZX1RZUEVdKTtcXG4gXFxuLVxcdFxcdGlmIChrdCAhPSBOTDgwMjExX0tFWVRZUEVfR1JPVVAgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0ICAgIGt0ICE9IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRSlcXG4rXFx0XFx0aWYgKHR5cGUgIT0gTkw4MDIxMV9LRVlUWVBFX0dST1VQIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICB0eXBlICE9IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgdHlwZSAhPSBOTDgwMjExX0tFWVRZUEVfQ0lHVEspIHtcXG4rXFx0XFx0XFx0R0VOTF9TRVRfRVJSX01TRyhpbmZvLCBcXFwia2V5IHR5cGUgbm90IHBhaXJ3aXNlLCBncm91cCBvciBDSUdUS1xcXCIpO1xcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tXFx0XFx0cGFpcndpc2UgPSBrdCA9PSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0U7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdHBhaXJ3aXNlID0gdHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0U7XFxuIFxcdH1cXG4gXFxuIFxcdGlmICghcmRldi1cXHUwMDNlb3BzLVxcdTAwM2VnZXRfa2V5KVxcbiBcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIFxcbi1cXHRpZiAoIWNmZzgwMjExX3ZhbGlkX2tleV9pZHgod2Rldiwga2V5X2lkeCwgcGFpcndpc2UsIG1hY19hZGRyKSlcXG4rXFx0aWYgKCFjZmc4MDIxMV92YWxpZF9rZXlfaWR4KHdkZXYsIGtleV9pZHgsIHR5cGUsIG1hY19hZGRyKSlcXG4gXFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuIFxcbiBcXHRtc2cgPSBubG1zZ19uZXcoTkxNU0dfREVGQVVMVF9TSVpFLCBHRlBfS0VSTkVMKTtcXG5AQCAtNTQ0NCw3ICs1NDY0LDcgQEAgc3RhdGljIGludCBubDgwMjExX2dldF9rZXkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0Z290byBmcmVlX21zZztcXG4gXFxuLVxcdGVyciA9IHJkZXZfZ2V0X2tleShyZGV2LCB3ZGV2LCBsaW5rX2lkLCBrZXlfaWR4LCBwYWlyd2lzZSwgbWFjX2FkZHIsXFxuK1xcdGVyciA9IHJkZXZfZ2V0X2tleShyZGV2LCB3ZGV2LCBsaW5rX2lkLCBrZXlfaWR4LCB0eXBlLCBtYWNfYWRkcixcXG4gXFx0XFx0XFx0ICAgXFx1MDAyNmNvb2tpZSwgZ2V0X2tleV9jYWxsYmFjayk7XFxuIFxcbiBcXHRpZiAoZXJyKVxcbkBAIC01NjAzLDggKzU2MjMsOSBAQCBzdGF0aWMgaW50IG5sODAyMTFfbmV3X2tleShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiBcXG4gXFx0LyogZm9yIG5vdyAqL1xcbiBcXHRpZiAoa2V5LnR5cGUgIT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICBrZXkudHlwZSAhPSBOTDgwMjExX0tFWVRZUEVfR1JPVVApIHtcXG4tXFx0XFx0R0VOTF9TRVRfRVJSX01TRyhpbmZvLCBcXFwia2V5IHR5cGUgbm90IHBhaXJ3aXNlIG9yIGdyb3VwXFxcIik7XFxuK1xcdCAgICBrZXkudHlwZSAhPSBOTDgwMjExX0tFWVRZUEVfR1JPVVAgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIGtleS50eXBlICE9IE5MODAyMTFfS0VZVFlQRV9DSUdUSykge1xcbitcXHRcXHRHRU5MX1NFVF9FUlJfTVNHKGluZm8sIFxcXCJrZXkgdHlwZSBub3QgcGFpcndpc2UsIGdyb3VwIG9yIENJR1RLXFxcIik7XFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHR9XFxuIFxcbkBAIC01NjE2LDggKzU2MzcsNyBAQCBzdGF0aWMgaW50IG5sODAyMTFfbmV3X2tleShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiBcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIFxcbiBcXHRpZiAoY2ZnODAyMTFfdmFsaWRhdGVfa2V5X3NldHRpbmdzKHJkZXYsIHdkZXYsIFxcdTAwMjZrZXkucCwga2V5LmlkeCxcXG4tXFx0XFx0XFx0XFx0XFx0ICAga2V5LnR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFLFxcbi1cXHRcXHRcXHRcXHRcXHQgICBtYWNfYWRkcikpIHtcXG4rXFx0XFx0XFx0XFx0XFx0ICAga2V5LnR5cGUsIG1hY19hZGRyKSkge1xcbiBcXHRcXHRHRU5MX1NFVF9FUlJfTVNHKGluZm8sIFxcXCJrZXkgc2V0dGluZyB2YWxpZGF0aW9uIGZhaWxlZFxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbkBAIC01NjMxLDggKzU2NTEsNyBAQCBzdGF0aWMgaW50IG5sODAyMTFfbmV3X2tleShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiBcXHRcXHRcXHRcXHRrZXkudHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0UpO1xcbiBcXG4gXFx0aWYgKCFlcnIpIHtcXG4tXFx0XFx0ZXJyID0gcmRldl9hZGRfa2V5KHJkZXYsIHdkZXYsIGxpbmtfaWQsIGtleS5pZHgsXFxuLVxcdFxcdFxcdFxcdCAgIGtleS50eXBlID09IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRSxcXG4rXFx0XFx0ZXJyID0gcmRldl9hZGRfa2V5KHJkZXYsIHdkZXYsIGxpbmtfaWQsIGtleS5pZHgsIGtleS50eXBlLFxcbiBcXHRcXHRcXHRcXHQgICAgbWFjX2FkZHIsIFxcdTAwMjZrZXkucCk7XFxuIFxcdFxcdGlmIChlcnIpXFxuIFxcdFxcdFxcdEdFTkxfU0VUX0VSUl9NU0coaW5mbywgXFxcImtleSBhZGRpdGlvbiBmYWlsZWRcXFwiKTtcXG5AQCAtNTY2NiwxMiArNTY4NSwxMyBAQCBzdGF0aWMgaW50IG5sODAyMTFfZGVsX2tleShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiBcXG4gXFx0LyogZm9yIG5vdyAqL1xcbiBcXHRpZiAoa2V5LnR5cGUgIT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICBrZXkudHlwZSAhPSBOTDgwMjExX0tFWVRZUEVfR1JPVVApXFxuK1xcdCAgICBrZXkudHlwZSAhPSBOTDgwMjExX0tFWVRZUEVfR1JPVVAgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIGtleS50eXBlICE9IE5MODAyMTFfS0VZVFlQRV9DSUdUSykge1xcbitcXHRcXHRHRU5MX1NFVF9FUlJfTVNHKGluZm8sIFxcXCJrZXkgdHlwZSBub3QgcGFpcndpc2UsIGdyb3VwIG9yIENJR1RLXFxcIik7XFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuIFxcbi1cXHRpZiAoIWNmZzgwMjExX3ZhbGlkX2tleV9pZHgod2Rldiwga2V5LmlkeCxcXG4tXFx0XFx0XFx0XFx0ICAgIGtleS50eXBlID09IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRSxcXG4tXFx0XFx0XFx0XFx0ICAgIG1hY19hZGRyKSlcXG4rXFx0aWYgKCFjZmc4MDIxMV92YWxpZF9rZXlfaWR4KHdkZXYsIGtleS5pZHgsIGtleS50eXBlLCBtYWNfYWRkcikpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4gXFx0aWYgKCFyZGV2LVxcdTAwM2VvcHMtXFx1MDAzZWRlbF9rZXkpXFxuQEAgLTU2ODUsOCArNTcwNSw3IEBAIHN0YXRpYyBpbnQgbmw4MDIxMV9kZWxfa2V5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIFxcbiBcXHRpZiAoIWVycilcXG4gXFx0XFx0ZXJyID0gcmRldl9kZWxfa2V5KHJkZXYsIHdkZXYsIGxpbmtfaWQsIGtleS5pZHgsXFxuLVxcdFxcdFxcdFxcdCAgIGtleS50eXBlID09IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRSxcXG4tXFx0XFx0XFx0XFx0ICAgbWFjX2FkZHIpO1xcbitcXHRcXHRcXHRcXHQgICBrZXkudHlwZSwgbWFjX2FkZHIpO1xcbiBcXG4gI2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUXFxuIFxcdGlmICghZXJyKSB7XFxuQEAgLTg4MDUsNyArODgyNCw3IEBAIGludCBjZmc4MDIxMV9jaGVja19zdGF0aW9uX2NoYW5nZShzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuIFxcdC8qIFdoZW4geW91IHJ1biBpbnRvIHRoaXMsIGFkanVzdCB0aGUgY29kZSBiZWxvdyBmb3IgdGhlIG5ldyBmbGFnICovXFxuLVxcdEJVSUxEX0JVR19PTihOTDgwMjExX1NUQV9GTEFHX01BWCAhPSA4KTtcXG4rXFx0QlVJTERfQlVHX09OKE5MODAyMTFfU1RBX0ZMQUdfTUFYICE9IDkpO1xcbiBcXG4gXFx0c3dpdGNoIChzdGF0eXBlKSB7XFxuIFxcdGNhc2UgQ0ZHODAyMTFfU1RBX01FU0hfUEVFUl9LRVJORUw6XFxuQEAgLTg4OTksNyArODkxOCw4IEBAIGludCBjZmc4MDIxMV9jaGVja19zdGF0aW9uX2NoYW5nZShzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxcbiBcXHRcXHRcXHRcXHQgIEJJVChOTDgwMjExX1NUQV9GTEFHX1NIT1JUX1BSRUFNQkxFKSB8XFxuIFxcdFxcdFxcdFxcdCAgQklUKE5MODAyMTFfU1RBX0ZMQUdfV01FKSB8XFxuIFxcdFxcdFxcdFxcdCAgQklUKE5MODAyMTFfU1RBX0ZMQUdfTUZQKSB8XFxuLVxcdFxcdFxcdFxcdCAgQklUKE5MODAyMTFfU1RBX0ZMQUdfU1BQX0FNU0RVKSkpXFxuK1xcdFxcdFxcdFxcdCAgQklUKE5MODAyMTFfU1RBX0ZMQUdfU1BQX0FNU0RVKSB8XFxuK1xcdFxcdFxcdFxcdCAgQklUKE5MODAyMTFfU1RBX0ZMQUdfQ0lQKSkpXFxuIFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4gXFx0XFx0LyogYnV0IGF1dGhlbnRpY2F0ZWQvYXNzb2NpYXRlZCBvbmx5IGlmIGRyaXZlciBoYW5kbGVzIGl0ICovXFxuQEAgLTkyNzYsNiArOTI5NiwyMiBAQCBzdGF0aWMgaW50IG5sODAyMTFfc2V0X3N0YXRpb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4gXFx0XFx0XFx0bmxhX2dldF91MTYoaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0VNTF9DQVBBQklMSVRZXSk7XFxuIFxcdH1cXG4gXFxuK1xcdGlmIChwYXJhbXMuc3RhX2ZsYWdzX21hc2sgXFx1MDAyNiBCSVQoTkw4MDIxMV9TVEFfRkxBR19DSVApIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBwYXJhbXMuc3RhX2ZsYWdzX3NldCBcXHUwMDI2IEJJVChOTDgwMjExX1NUQV9GTEFHX0NJUCkpIHtcXG4rXFx0XFx0aWYgKCFjZmc4MDIxMV9jaWd0a19zdXBwb3J0ZWQod2RldiwgaW5mbykpXFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0XFx0LyogQ0lQIGNhcGFiaWxpdGllcyBhcmUgcmVxdWlyZWQgaWYgQ0lQIGlzIGJlaW5nIGVuYWJsZWQgKi9cXG4rXFx0XFx0aWYgKGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9DSVBfQ0FQQUJJTElUSUVTXSkge1xcbitcXHRcXHRcXHRwYXJhbXMubGlua19zdGFfcGFyYW1zLmNpcF9jYXBfc2V0ID0gdHJ1ZTtcXG4rXFx0XFx0XFx0cGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5jaXBfY2FwID1cXG4rXFx0XFx0XFx0XFx0bmxhX2dldF91OChpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfQ0lQX0NBUEFCSUxJVElFU10pO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRHRU5MX1NFVF9FUlJfTVNHKGluZm8sIFxcXCJObyBDSVAgY2FwYWJpbGl0aWVzIHByb3ZpZGVkXFxcIik7XFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuIFxcdGlmIChpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfQUlSVElNRV9XRUlHSFRdKVxcbiBcXHRcXHRwYXJhbXMuYWlydGltZV93ZWlnaHQgPVxcbiBcXHRcXHRcXHRubGFfZ2V0X3UxNihpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfQUlSVElNRV9XRUlHSFRdKTtcXG5AQCAtOTQ3NSw2ICs5NTExLDIyIEBAIHN0YXRpYyBpbnQgbmw4MDIxMV9uZXdfc3RhdGlvbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiBcXHRcXHRcXHRubGFfZ2V0X3UxNihpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfRU1MX0NBUEFCSUxJVFldKTtcXG4gXFx0fVxcbiBcXG4rXFx0aWYgKHBhcmFtcy5zdGFfZmxhZ3NfbWFzayBcXHUwMDI2IEJJVChOTDgwMjExX1NUQV9GTEFHX0NJUCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIHBhcmFtcy5zdGFfZmxhZ3Nfc2V0IFxcdTAwMjYgQklUKE5MODAyMTFfU1RBX0ZMQUdfQ0lQKSkge1xcbitcXHRcXHRpZiAoIWNmZzgwMjExX2NpZ3RrX3N1cHBvcnRlZCh3ZGV2LCBpbmZvKSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRcXHQvKiBDSVAgY2FwYWJpbGl0aWVzIGFyZSByZXF1aXJlZCBpZiBDSVAgaXMgZW5hYmxlZCAqL1xcbitcXHRcXHRpZiAoaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0NJUF9DQVBBQklMSVRJRVNdKSB7XFxuK1xcdFxcdFxcdHBhcmFtcy5saW5rX3N0YV9wYXJhbXMuY2lwX2NhcF9zZXQgPSB0cnVlO1xcbitcXHRcXHRcXHRwYXJhbXMubGlua19zdGFfcGFyYW1zLmNpcF9jYXAgPVxcbitcXHRcXHRcXHRcXHRubGFfZ2V0X3U4KGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9DSVBfQ0FQQUJJTElUSUVTXSk7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdEdFTkxfU0VUX0VSUl9NU0coaW5mbywgXFxcIk5vIENJUCBjYXBhYmlsaXRpZXMgcHJvdmlkZWRcXFwiKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4gXFx0aWYgKGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9IRV82R0haX0NBUEFCSUxJVFldKVxcbiBcXHRcXHRwYXJhbXMubGlua19zdGFfcGFyYW1zLmhlXzZnaHpfY2FwYSA9XFxuIFxcdFxcdFxcdG5sYV9kYXRhKGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9IRV82R0haX0NBUEFCSUxJVFldKTtcXG5AQCAtOTU1Miw3ICs5NjA0LDcgQEAgc3RhdGljIGludCBubDgwMjExX25ld19zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4gXFx0LyogV2hlbiB5b3UgcnVuIGludG8gdGhpcywgYWRqdXN0IHRoZSBjb2RlIGJlbG93IGZvciB0aGUgbmV3IGZsYWcgKi9cXG4tXFx0QlVJTERfQlVHX09OKE5MODAyMTFfU1RBX0ZMQUdfTUFYICE9IDgpO1xcbitcXHRCVUlMRF9CVUdfT04oTkw4MDIxMV9TVEFfRkxBR19NQVggIT0gOSk7XFxuIFxcbiBcXHRzd2l0Y2ggKHdkZXYtXFx1MDAzZWlmdHlwZSkge1xcbiBcXHRjYXNlIE5MODAyMTFfSUZUWVBFX0FQOlxcbkBAIC05NTgxLDYgKzk2MzMsMTAgQEAgc3RhdGljIGludCBubDgwMjExX25ld19zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIFxcdFxcdCAgICBwYXJhbXMuc3RhX2ZsYWdzX21hc2sgXFx1MDAyNiBCSVQoTkw4MDIxMV9TVEFfRkxBR19TUFBfQU1TRFUpKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuK1xcdFxcdGlmIChwYXJhbXMuc3RhX2ZsYWdzX21hc2sgXFx1MDAyNiBCSVQoTkw4MDIxMV9TVEFfRkxBR19DSVApIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAhY2ZnODAyMTFfY2lndGtfc3VwcG9ydGVkKHdkZXYsIGluZm8pKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuIFxcdFxcdC8qIE9sZGVyIHVzZXJzcGFjZSwgb3IgdXNlcnNwYWNlIHdhbnRpbmcgdG8gYmUgY29tcGF0aWJsZSB3aXRoXFxuIFxcdFxcdCAqICFOTDgwMjExX0ZFQVRVUkVfRlVMTF9BUF9DTElFTlRfU1RBVEUsIHdpbGwgbm90IHNldCB0aGUgYXV0aFxcbiBcXHRcXHQgKiBhbmQgYXNzb2MgZmxhZ3MgaW4gdGhlIG1hc2ssIGJ1dCBhc3N1bWVzIHRoZSBzdGF0aW9uIHdpbGwgYmVcXG5AQCAtMTMzMDcsNiArMTMzNjMsMTMgQEAgc3RhdGljIGludCBubDgwMjExX2Fzc29jaWF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiBcXHRcXHRyZXEuZmxhZ3MgfD0gQVNTT0NfUkVRX1NQUF9BTVNEVTtcXG4gXFx0fVxcbiBcXG4rXFx0aWYgKG5sYV9nZXRfZmxhZyhpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfQVNTT0NfQ0lQXSkpIHtcXG4rXFx0XFx0aWYgKCFjZmc4MDIxMV9jaWd0a19zdXBwb3J0ZWQoZGV2LVxcdTAwM2VpZWVlODAyMTFfcHRyLCBpbmZvKSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRcXHRyZXEuZmxhZ3MgfD0gQVNTT0NfUkVRX0NJUDtcXG4rXFx0fVxcbitcXG4gXFx0cmVxLmxpbmtfaWQgPSBubDgwMjExX2xpbmtfaWRfb3JfaW52YWxpZChpbmZvLVxcdTAwM2VhdHRycyk7XFxuIFxcbiBcXHRpZiAoaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX01MT19MSU5LU10pIHtcXG5AQCAtMTkxNzQsNiArMTkyMzcsMjMgQEAgbmw4MDIxMV9hZGRfbW9kX2xpbmtfc3RhdGlvbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxcbiBcXHRcXHRwYXJhbXMuaGVfNmdoel9jYXBhID1cXG4gXFx0XFx0XFx0bmxhX2RhdGEoaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0hFXzZHSFpfQ0FQQUJJTElUWV0pO1xcbiBcXG4rXFx0aWYgKGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9DSVBfQ0FQQUJJTElUSUVTXSkge1xcbitcXHRcXHRzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LVxcdTAwM2VpZWVlODAyMTFfcHRyO1xcbitcXG4rXFx0XFx0aWYgKCFjZmc4MDIxMV9jaWd0a19zdXBwb3J0ZWQod2RldiwgaW5mbykpXFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0XFx0cGFyYW1zLmNpcF9jYXBfc2V0ID0gdHJ1ZTtcXG4rXFx0XFx0cGFyYW1zLmNpcF9jYXAgPVxcbitcXHRcXHRcXHRubGFfZ2V0X3U4KGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9DSVBfQ0FQQUJJTElUSUVTXSk7XFxuK1xcbitcXHRcXHQvKiBPbmx5IHBlcm1pdCBDSVAgY2FwYWJpbGl0aWVzIHdoZW4gYWRkaW5nIGxpbmsgc3RhdGlvbnMgKi9cXG4rXFx0XFx0aWYgKCFhZGQpIHtcXG4rXFx0XFx0XFx0R0VOTF9TRVRfRVJSX01TRyhpbmZvLCBcXFwiQ2Fubm90IG1vZGlmeSBDSVAgY2FwYWJpbGl0aWVzXFxcIik7XFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuIFxcdGlmIChpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfT1BNT0RFX05PVElGXSkge1xcbiBcXHRcXHRwYXJhbXMub3Btb2RlX25vdGlmX3VzZWQgPSB0cnVlO1xcbiBcXHRcXHRwYXJhbXMub3Btb2RlX25vdGlmID1cXG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3JkZXYtb3BzLmggYi9uZXQvd2lyZWxlc3MvcmRldi1vcHMuaFxcbmluZGV4IDZjM2JhZDhiMmQ2ZjYuLmQ0OTMzYmJiZjBlN2UgMTAwNjQ0XFxuLS0tIGEvbmV0L3dpcmVsZXNzL3JkZXYtb3BzLmhcXG4rKysgYi9uZXQvd2lyZWxlc3MvcmRldi1vcHMuaFxcbkBAIC03OCw0MiArNzgsNDMgQEAgcmRldl9jaGFuZ2VfdmlydHVhbF9pbnRmKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG4gXFxuIHN0YXRpYyBpbmxpbmUgaW50IHJkZXZfYWRkX2tleShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxuIFxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LCBpbnQgbGlua19pZCxcXG4tXFx0XFx0XFx0ICAgICAgIHU4IGtleV9pbmRleCwgYm9vbCBwYWlyd2lzZSwgY29uc3QgdTggKm1hY19hZGRyLFxcbi1cXHRcXHRcXHQgICAgICAgc3RydWN0IGtleV9wYXJhbXMgKnBhcmFtcylcXG4rXFx0XFx0XFx0ICAgICAgIHU4IGtleV9pbmRleCwgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsXFxuK1xcdFxcdFxcdCAgICAgICBjb25zdCB1OCAqbWFjX2FkZHIsIHN0cnVjdCBrZXlfcGFyYW1zICpwYXJhbXMpXFxuIHtcXG4gXFx0aW50IHJldDtcXG4tXFx0dHJhY2VfcmRldl9hZGRfa2V5KFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeSwgd2RldiwgbGlua19pZCwga2V5X2luZGV4LCBwYWlyd2lzZSxcXG4rXFx0dHJhY2VfcmRldl9hZGRfa2V5KFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeSwgd2RldiwgbGlua19pZCwga2V5X2luZGV4LCB0eXBlLFxcbiBcXHRcXHRcXHQgICBtYWNfYWRkciwgcGFyYW1zLVxcdTAwM2Vtb2RlKTtcXG4gXFx0cmV0ID0gcmRldi1cXHUwMDNlb3BzLVxcdTAwM2VhZGRfa2V5KFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeSwgd2RldiwgbGlua19pZCwga2V5X2luZGV4LFxcbi1cXHRcXHRcXHRcXHQgIHBhaXJ3aXNlLCBtYWNfYWRkciwgcGFyYW1zKTtcXG4rXFx0XFx0XFx0XFx0ICB0eXBlLCBtYWNfYWRkciwgcGFyYW1zKTtcXG4gXFx0dHJhY2VfcmRldl9yZXR1cm5faW50KFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeSwgcmV0KTtcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4gc3RhdGljIGlubGluZSBpbnRcXG4gcmRldl9nZXRfa2V5KHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcXG4tXFx0ICAgICBpbnQgbGlua19pZCwgdTgga2V5X2luZGV4LCBib29sIHBhaXJ3aXNlLCBjb25zdCB1OCAqbWFjX2FkZHIsXFxuLVxcdCAgICAgdm9pZCAqY29va2llLFxcbitcXHQgICAgIGludCBsaW5rX2lkLCB1OCBrZXlfaW5kZXgsIGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLFxcbitcXHQgICAgIGNvbnN0IHU4ICptYWNfYWRkciwgdm9pZCAqY29va2llLFxcbiBcXHQgICAgIHZvaWQgKCpjYWxsYmFjaykodm9pZCAqY29va2llLCBzdHJ1Y3Qga2V5X3BhcmFtcyopKVxcbiB7XFxuIFxcdGludCByZXQ7XFxuLVxcdHRyYWNlX3JkZXZfZ2V0X2tleShcXHUwMDI2cmRldi1cXHUwMDNld2lwaHksIHdkZXYsIGxpbmtfaWQsIGtleV9pbmRleCwgcGFpcndpc2UsXFxuK1xcdHRyYWNlX3JkZXZfZ2V0X2tleShcXHUwMDI2cmRldi1cXHUwMDNld2lwaHksIHdkZXYsIGxpbmtfaWQsIGtleV9pbmRleCwgdHlwZSxcXG4gXFx0XFx0XFx0ICAgbWFjX2FkZHIpO1xcbiBcXHRyZXQgPSByZGV2LVxcdTAwM2VvcHMtXFx1MDAzZWdldF9rZXkoXFx1MDAyNnJkZXYtXFx1MDAzZXdpcGh5LCB3ZGV2LCBsaW5rX2lkLCBrZXlfaW5kZXgsXFxuLVxcdFxcdFxcdFxcdCAgcGFpcndpc2UsIG1hY19hZGRyLCBjb29raWUsIGNhbGxiYWNrKTtcXG4rXFx0XFx0XFx0XFx0IHR5cGUsIG1hY19hZGRyLCBjb29raWUsIGNhbGxiYWNrKTtcXG4gXFx0dHJhY2VfcmRldl9yZXR1cm5faW50KFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeSwgcmV0KTtcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4gc3RhdGljIGlubGluZSBpbnQgcmRldl9kZWxfa2V5KHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG4gXFx0XFx0XFx0ICAgICAgIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsIGludCBsaW5rX2lkLFxcbi1cXHRcXHRcXHQgICAgICAgdTgga2V5X2luZGV4LCBib29sIHBhaXJ3aXNlLCBjb25zdCB1OCAqbWFjX2FkZHIpXFxuK1xcdFxcdFxcdCAgICAgICB1OCBrZXlfaW5kZXgsIGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLFxcbitcXHRcXHRcXHQgICAgICAgY29uc3QgdTggKm1hY19hZGRyKVxcbiB7XFxuIFxcdGludCByZXQ7XFxuLVxcdHRyYWNlX3JkZXZfZGVsX2tleShcXHUwMDI2cmRldi1cXHUwMDNld2lwaHksIHdkZXYsIGxpbmtfaWQsIGtleV9pbmRleCwgcGFpcndpc2UsXFxuK1xcdHRyYWNlX3JkZXZfZGVsX2tleShcXHUwMDI2cmRldi1cXHUwMDNld2lwaHksIHdkZXYsIGxpbmtfaWQsIGtleV9pbmRleCwgdHlwZSxcXG4gXFx0XFx0XFx0ICAgbWFjX2FkZHIpO1xcbiBcXHRyZXQgPSByZGV2LVxcdTAwM2VvcHMtXFx1MDAzZWRlbF9rZXkoXFx1MDAyNnJkZXYtXFx1MDAzZXdpcGh5LCB3ZGV2LCBsaW5rX2lkLCBrZXlfaW5kZXgsXFxuLVxcdFxcdFxcdFxcdCAgcGFpcndpc2UsIG1hY19hZGRyKTtcXG4rXFx0XFx0XFx0XFx0ICB0eXBlLCBtYWNfYWRkcik7XFxuIFxcdHRyYWNlX3JkZXZfcmV0dXJuX2ludChcXHUwMDI2cmRldi1cXHUwMDNld2lwaHksIHJldCk7XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3NtZS5jIGIvbmV0L3dpcmVsZXNzL3NtZS5jXFxuaW5kZXggMmE3MTliNWM0ODdlMy4uNDU4ZjcyZDgzNTFhYiAxMDA2NDRcXG4tLS0gYS9uZXQvd2lyZWxlc3Mvc21lLmNcXG4rKysgYi9uZXQvd2lyZWxlc3Mvc21lLmNcXG5AQCAtMTM4Nyw3ICsxMzg3LDE1IEBAIHZvaWQgX19jZmc4MDIxMV9kaXNjb25uZWN0ZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmllLFxcbiBcXHRcXHRcXHQgICAgTkw4MDIxMV9FWFRfRkVBVFVSRV9CRUFDT05fUFJPVEVDVElPTl9DTElFTlQpKVxcbiBcXHRcXHRcXHRtYXhfa2V5X2lkeCA9IDc7XFxuIFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYz0gbWF4X2tleV9pZHg7IGkrKylcXG4tXFx0XFx0XFx0cmRldl9kZWxfa2V5KHJkZXYsIHdkZXYsIC0xLCBpLCBmYWxzZSwgTlVMTCk7XFxuK1xcdFxcdFxcdHJkZXZfZGVsX2tleShyZGV2LCB3ZGV2LCAtMSwgaSwgTkw4MDIxMV9LRVlUWVBFX0dST1VQLFxcbitcXHRcXHRcXHRcXHQgICAgIE5VTEwpO1xcbitcXG4rXFx0XFx0aWYgKGNmZzgwMjExX2NpZ3RrX3N1cHBvcnRlZCh3ZGV2LCBOVUxMKSkge1xcbitcXHRcXHRcXHRyZGV2X2RlbF9rZXkocmRldiwgd2RldiwgLTEsIDAsIE5MODAyMTFfS0VZVFlQRV9DSUdUSyxcXG4rXFx0XFx0XFx0XFx0ICAgICBOVUxMKTtcXG4rXFx0XFx0XFx0cmRldl9kZWxfa2V5KHJkZXYsIHdkZXYsIC0xLCAxLCBOTDgwMjExX0tFWVRZUEVfQ0lHVEssXFxuK1xcdFxcdFxcdFxcdCAgICAgTlVMTCk7XFxuK1xcdFxcdH1cXG4gXFx0fVxcbiBcXG4gXFx0cmRldl9zZXRfcW9zX21hcChyZGV2LCBkZXYsIE5VTEwpO1xcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvdHJhY2UuaCBiL25ldC93aXJlbGVzcy90cmFjZS5oXFxuaW5kZXggOGMyYTkxYjg1YzM5Ni4uYzIxMGNhMWU0NGUyYiAxMDA2NDRcXG4tLS0gYS9uZXQvd2lyZWxlc3MvdHJhY2UuaFxcbisrKyBiL25ldC93aXJlbGVzcy90cmFjZS5oXFxuQEAgLTU1NywxNSArNTU3LDE1IEBAIFRSQUNFX0VWRU5UKHJkZXZfY2hhbmdlX3ZpcnR1YWxfaW50ZixcXG4gXFxuIERFQ0xBUkVfRVZFTlRfQ0xBU1Moa2V5X2hhbmRsZSxcXG4gXFx0VFBfUFJPVE8oc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwgaW50IGxpbmtfaWQsXFxuLVxcdFxcdCB1OCBrZXlfaW5kZXgsIGJvb2wgcGFpcndpc2UsIGNvbnN0IHU4ICptYWNfYWRkciksXFxuLVxcdFRQX0FSR1Mod2lwaHksIHdkZXYsIGxpbmtfaWQsIGtleV9pbmRleCwgcGFpcndpc2UsIG1hY19hZGRyKSxcXG4rXFx0XFx0IHU4IGtleV9pbmRleCwgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsIGNvbnN0IHU4ICptYWNfYWRkciksXFxuK1xcdFRQX0FSR1Mod2lwaHksIHdkZXYsIGxpbmtfaWQsIGtleV9pbmRleCwgdHlwZSwgbWFjX2FkZHIpLFxcbiBcXHRUUF9TVFJVQ1RfX2VudHJ5KFxcbiBcXHRcXHRXSVBIWV9FTlRSWVxcbiBcXHRcXHRXREVWX0VOVFJZXFxuIFxcdFxcdE1BQ19FTlRSWShtYWNfYWRkcilcXG4gXFx0XFx0X19maWVsZChpbnQsIGxpbmtfaWQpXFxuIFxcdFxcdF9fZmllbGQodTgsIGtleV9pbmRleClcXG4tXFx0XFx0X19maWVsZChib29sLCBwYWlyd2lzZSlcXG4rXFx0XFx0X19maWVsZCh1OCwgdHlwZSlcXG4gXFx0KSxcXG4gXFx0VFBfZmFzdF9hc3NpZ24oXFxuIFxcdFxcdFdJUEhZX0FTU0lHTjtcXG5AQCAtNTczLDM4ICs1NzMsNDAgQEAgREVDTEFSRV9FVkVOVF9DTEFTUyhrZXlfaGFuZGxlLFxcbiBcXHRcXHRNQUNfQVNTSUdOKG1hY19hZGRyLCBtYWNfYWRkcik7XFxuIFxcdFxcdF9fZW50cnktXFx1MDAzZWxpbmtfaWQgPSBsaW5rX2lkO1xcbiBcXHRcXHRfX2VudHJ5LVxcdTAwM2VrZXlfaW5kZXggPSBrZXlfaW5kZXg7XFxuLVxcdFxcdF9fZW50cnktXFx1MDAzZXBhaXJ3aXNlID0gcGFpcndpc2U7XFxuK1xcdFxcdF9fZW50cnktXFx1MDAzZXR5cGUgPSB0eXBlO1xcbiBcXHQpLFxcbiBcXHRUUF9wcmludGsoV0lQSFlfUFJfRk1UIFxcXCIsIFxcXCIgV0RFVl9QUl9GTVQgXFxcIiwgbGlua19pZDogJWQsIFxcXCJcXG4tXFx0XFx0ICBcXFwia2V5X2luZGV4OiAldSwgcGFpcndpc2U6ICVzLCBtYWMgYWRkcjogJXBNXFxcIixcXG4rXFx0XFx0ICBcXFwia2V5X2luZGV4OiAldSwgcGFpcndpc2U6ICVzLCB0eXBlOiAlZCwgbWFjIGFkZHI6ICVwTVxcXCIsXFxuIFxcdFxcdCAgV0lQSFlfUFJfQVJHLCBXREVWX1BSX0FSRywgX19lbnRyeS1cXHUwMDNlbGlua19pZCxcXG4tXFx0XFx0ICBfX2VudHJ5LVxcdTAwM2VrZXlfaW5kZXgsIEJPT0xfVE9fU1RSKF9fZW50cnktXFx1MDAzZXBhaXJ3aXNlKSxcXG4tXFx0XFx0ICBfX2VudHJ5LVxcdTAwM2VtYWNfYWRkcilcXG4rXFx0XFx0ICBfX2VudHJ5LVxcdTAwM2VrZXlfaW5kZXgsXFxuK1xcdFxcdCAgQk9PTF9UT19TVFIoX19lbnRyeS1cXHUwMDNldHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0UpLFxcbitcXHRcXHQgIF9fZW50cnktXFx1MDAzZXR5cGUsIF9fZW50cnktXFx1MDAzZW1hY19hZGRyKVxcbiApO1xcbiBcXG4gREVGSU5FX0VWRU5UKGtleV9oYW5kbGUsIHJkZXZfZ2V0X2tleSxcXG4gXFx0VFBfUFJPVE8oc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwgaW50IGxpbmtfaWQsXFxuLVxcdFxcdCB1OCBrZXlfaW5kZXgsIGJvb2wgcGFpcndpc2UsIGNvbnN0IHU4ICptYWNfYWRkciksXFxuLVxcdFRQX0FSR1Mod2lwaHksIHdkZXYsIGxpbmtfaWQsIGtleV9pbmRleCwgcGFpcndpc2UsIG1hY19hZGRyKVxcbitcXHRcXHQgdTgga2V5X2luZGV4LCBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSwgY29uc3QgdTggKm1hY19hZGRyKSxcXG4rXFx0VFBfQVJHUyh3aXBoeSwgd2RldiwgbGlua19pZCwga2V5X2luZGV4LCB0eXBlLCBtYWNfYWRkcilcXG4gKTtcXG4gXFxuIERFRklORV9FVkVOVChrZXlfaGFuZGxlLCByZGV2X2RlbF9rZXksXFxuIFxcdFRQX1BST1RPKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsIGludCBsaW5rX2lkLFxcbi1cXHRcXHQgdTgga2V5X2luZGV4LCBib29sIHBhaXJ3aXNlLCBjb25zdCB1OCAqbWFjX2FkZHIpLFxcbi1cXHRUUF9BUkdTKHdpcGh5LCB3ZGV2LCBsaW5rX2lkLCBrZXlfaW5kZXgsIHBhaXJ3aXNlLCBtYWNfYWRkcilcXG4rXFx0XFx0IHU4IGtleV9pbmRleCwgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsIGNvbnN0IHU4ICptYWNfYWRkciksXFxuK1xcdFRQX0FSR1Mod2lwaHksIHdkZXYsIGxpbmtfaWQsIGtleV9pbmRleCwgdHlwZSwgbWFjX2FkZHIpXFxuICk7XFxuIFxcbiBUUkFDRV9FVkVOVChyZGV2X2FkZF9rZXksXFxuIFxcdFRQX1BST1RPKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsIGludCBsaW5rX2lkLFxcbi1cXHRcXHQgdTgga2V5X2luZGV4LCBib29sIHBhaXJ3aXNlLCBjb25zdCB1OCAqbWFjX2FkZHIsIHU4IG1vZGUpLFxcbi1cXHRUUF9BUkdTKHdpcGh5LCB3ZGV2LCBsaW5rX2lkLCBrZXlfaW5kZXgsIHBhaXJ3aXNlLCBtYWNfYWRkciwgbW9kZSksXFxuK1xcdFxcdCB1OCBrZXlfaW5kZXgsIGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLCBjb25zdCB1OCAqbWFjX2FkZHIsXFxuK1xcdFxcdCB1OCBtb2RlKSxcXG4rXFx0VFBfQVJHUyh3aXBoeSwgd2RldiwgbGlua19pZCwga2V5X2luZGV4LCB0eXBlLCBtYWNfYWRkciwgbW9kZSksXFxuIFxcdFRQX1NUUlVDVF9fZW50cnkoXFxuIFxcdFxcdFdJUEhZX0VOVFJZXFxuIFxcdFxcdFdERVZfRU5UUllcXG4gXFx0XFx0TUFDX0VOVFJZKG1hY19hZGRyKVxcbiBcXHRcXHRfX2ZpZWxkKGludCwgbGlua19pZClcXG4gXFx0XFx0X19maWVsZCh1OCwga2V5X2luZGV4KVxcbi1cXHRcXHRfX2ZpZWxkKGJvb2wsIHBhaXJ3aXNlKVxcbitcXHRcXHRfX2ZpZWxkKHU4LCB0eXBlKVxcbiBcXHRcXHRfX2ZpZWxkKHU4LCBtb2RlKVxcbiBcXHQpLFxcbiBcXHRUUF9mYXN0X2Fzc2lnbihcXG5AQCAtNjEzLDE1ICs2MTUsMTYgQEAgVFJBQ0VfRVZFTlQocmRldl9hZGRfa2V5LFxcbiBcXHRcXHRNQUNfQVNTSUdOKG1hY19hZGRyLCBtYWNfYWRkcik7XFxuIFxcdFxcdF9fZW50cnktXFx1MDAzZWxpbmtfaWQgPSBsaW5rX2lkO1xcbiBcXHRcXHRfX2VudHJ5LVxcdTAwM2VrZXlfaW5kZXggPSBrZXlfaW5kZXg7XFxuLVxcdFxcdF9fZW50cnktXFx1MDAzZXBhaXJ3aXNlID0gcGFpcndpc2U7XFxuK1xcdFxcdF9fZW50cnktXFx1MDAzZXR5cGUgPSB0eXBlO1xcbiBcXHRcXHRfX2VudHJ5LVxcdTAwM2Vtb2RlID0gbW9kZTtcXG4gXFx0KSxcXG4gXFx0VFBfcHJpbnRrKFdJUEhZX1BSX0ZNVCBcXFwiLCBcXFwiIFdERVZfUFJfRk1UIFxcXCIsIGxpbmtfaWQ6ICVkLCBcXFwiXFxuLVxcdFxcdCAgXFxcImtleV9pbmRleDogJXUsIG1vZGU6ICV1LCBwYWlyd2lzZTogJXMsIFxcXCJcXG4rXFx0XFx0ICBcXFwia2V5X2luZGV4OiAldSwgbW9kZTogJXUsIHBhaXJ3aXNlOiAlcywgdHlwZTogJWQsIFxcXCJcXG4gXFx0XFx0ICBcXFwibWFjIGFkZHI6ICVwTVxcXCIsXFxuIFxcdFxcdCAgV0lQSFlfUFJfQVJHLCBXREVWX1BSX0FSRywgX19lbnRyeS1cXHUwMDNlbGlua19pZCxcXG4gXFx0XFx0ICBfX2VudHJ5LVxcdTAwM2VrZXlfaW5kZXgsIF9fZW50cnktXFx1MDAzZW1vZGUsXFxuLVxcdFxcdCAgQk9PTF9UT19TVFIoX19lbnRyeS1cXHUwMDNlcGFpcndpc2UpLCBfX2VudHJ5LVxcdTAwM2VtYWNfYWRkcilcXG4rXFx0XFx0ICBCT09MX1RPX1NUUihfX2VudHJ5LVxcdTAwM2V0eXBlID09IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRSksXFxuK1xcdFxcdCAgX19lbnRyeS1cXHUwMDNldHlwZSwgX19lbnRyeS1cXHUwMDNlbWFjX2FkZHIpXFxuICk7XFxuIFxcbiBUUkFDRV9FVkVOVChyZGV2X3NldF9kZWZhdWx0X2tleSxcXG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3V0aWwuYyBiL25ldC93aXJlbGVzcy91dGlsLmNcXG5pbmRleCAzZTU4NGQwY2EzZTI2Li5kZDE2NmMzNTI5MTBmIDEwMDY0NFxcbi0tLSBhL25ldC93aXJlbGVzcy91dGlsLmNcXG4rKysgYi9uZXQvd2lyZWxlc3MvdXRpbC5jXFxuQEAgLTI1OCw4ICsyNTgsMjQgQEAgc3RhdGljIGJvb2wgY2ZnODAyMTFfaWd0a19jaXBoZXJfc3VwcG9ydGVkKHN0cnVjdCB3aXBoeSAqd2lwaHkpXFxuIFxcdHJldHVybiBmYWxzZTtcXG4gfVxcbiBcXG4rYm9vbCBjZmc4MDIxMV9jaWd0a19zdXBwb3J0ZWQoc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcXG4rXFx0XFx0XFx0ICAgICAgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3Qgd2lwaHlfaWZ0eXBlX2V4dF9jYXBhYiAqZXh0X2NhcGFiID1cXG4rXFx0XFx0Y2ZnODAyMTFfZ2V0X2lmdHlwZV9leHRfY2FwYSh3ZGV2LVxcdTAwM2V3aXBoeSwgd2Rldi1cXHUwMDNlaWZ0eXBlKTtcXG4rXFxuK1xcdGlmIChleHRfY2FwYWIgXFx1MDAyNlxcdTAwMjYgZXh0X2NhcGFiLVxcdTAwM2VjaXBfc3VwcG9ydGVkKVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFxuK1xcdGlmIChpbmZvKVxcbitcXHRcXHRHRU5MX1NFVF9FUlJfTVNHKGluZm8sXFxuK1xcdFxcdFxcdFxcdCBcXFwiQ29udHJvbCBJbnRlZ3JpdHkgUHJvdG9jb2wgbm90IHN1cHBvcnRlZFxcXCIpO1xcbitcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbiBib29sIGNmZzgwMjExX3ZhbGlkX2tleV9pZHgoc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcXG4tXFx0XFx0XFx0ICAgIGludCBrZXlfaWR4LCBib29sIHBhaXJ3aXNlLFxcbitcXHRcXHRcXHQgICAgaW50IGtleV9pZHgsIGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLFxcbiBcXHRcXHRcXHQgICAgY29uc3QgdTggKm1hY19hZGRyKVxcbiB7XFxuIFxcdGlmIChXQVJOX09OKCF3ZGV2KSlcXG5AQCAtMjcyLDEzICsyODgsMjQgQEAgYm9vbCBjZmc4MDIxMV92YWxpZF9rZXlfaWR4KHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxuIFxcdCAqIENhbid0IGRpZmZlcmVudGlhdGUgY2lwaGVycyBoZXJlIHNvIGFsbG93IDAuLjMuXFxuIFxcdCAqIFBhaXJ3aXNlIGtleXMgbXVzdCBiZSBmb3IgYSBzdGF0aW9uIChNQUMgYWRkcmVzcyBnaXZlbikuXFxuIFxcdCAqL1xcbi1cXHRpZiAocGFpcndpc2UpIHtcXG4rXFx0aWYgKHR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFKSB7XFxuIFxcdFxcdGlmICghbWFjX2FkZHIpXFxuIFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuIFxcdFxcdHJldHVybiBrZXlfaWR4IFxcdTAwM2MgNDtcXG4gXFx0fVxcbiBcXG4rXFx0LyogQ2hlY2sgdGhlIHdkZXYvaWZ0eXBlIHN1cHBvcnRzIENJR1RLICovXFxuK1xcdGlmICh0eXBlID09IE5MODAyMTFfS0VZVFlQRV9DSUdUSykge1xcbitcXHRcXHRpZiAoIWNmZzgwMjExX2NpZ3RrX3N1cHBvcnRlZCh3ZGV2LCBOVUxMKSlcXG4rXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0XFx0aWYgKGtleV9pZHggXFx1MDAzZT0gMilcXG4rXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0XFx0LyogZmFsbHRocm91Z2ggZm9yIG1hY19hZGRyIGNoZWNrcyAqL1xcbitcXHR9XFxuK1xcbiBcXHQvKlxcbiBcXHQgKiBGb3IgZ3JvdXAga2V5cywgbWFjX2FkZHI9PU5VTEwgbWVhbnMgc2V0dGluZyBhIGdyb3VwIGtleVxcbiBcXHQgKiBmb3IgVFgsIHdoaWNoIGlzIG9ubHkgc3VwcG9ydGVkIG9uIHNvbWUgaW50ZXJmYWNlIHR5cGVzLFxcbkBAIC0zNDMsOSArMzcwLDEyIEBAIGJvb2wgY2ZnODAyMTFfdmFsaWRfa2V5X2lkeChzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxcbiBpbnQgY2ZnODAyMTFfdmFsaWRhdGVfa2V5X3NldHRpbmdzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG4gXFx0XFx0XFx0XFx0ICAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcXG4gXFx0XFx0XFx0XFx0ICAgc3RydWN0IGtleV9wYXJhbXMgKnBhcmFtcywgaW50IGtleV9pZHgsXFxuLVxcdFxcdFxcdFxcdCAgIGJvb2wgcGFpcndpc2UsIGNvbnN0IHU4ICptYWNfYWRkcilcXG4rXFx0XFx0XFx0XFx0ICAgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsXFxuK1xcdFxcdFxcdFxcdCAgIGNvbnN0IHU4ICptYWNfYWRkcilcXG4ge1xcbi1cXHRpZiAoIWNmZzgwMjExX3ZhbGlkX2tleV9pZHgod2Rldiwga2V5X2lkeCwgcGFpcndpc2UsIG1hY19hZGRyKSlcXG4rXFx0Ym9vbCBwYWlyd2lzZSA9IHR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFO1xcbitcXG4rXFx0aWYgKCFjZmc4MDIxMV92YWxpZF9rZXlfaWR4KHdkZXYsIGtleV9pZHgsIHR5cGUsIG1hY19hZGRyKSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbiBcXHRzd2l0Y2ggKHBhcmFtcy1cXHUwMDNlY2lwaGVyKSB7XFxuQEAgLTExNzIsNyArMTIwMiw3IEBAIHZvaWQgY2ZnODAyMTFfdXBsb2FkX2Nvbm5lY3Rfa2V5cyhzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2KVxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgNDsgaSsrKSB7XFxuIFxcdFxcdGlmICghd2Rldi1cXHUwMDNlY29ubmVjdF9rZXlzLVxcdTAwM2VwYXJhbXNbaV0uY2lwaGVyKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0aWYgKHJkZXZfYWRkX2tleShyZGV2LCB3ZGV2LCAtMSwgaSwgZmFsc2UsIE5VTEwsXFxuK1xcdFxcdGlmIChyZGV2X2FkZF9rZXkocmRldiwgd2RldiwgLTEsIGksIE5MODAyMTFfS0VZVFlQRV9HUk9VUCwgTlVMTCxcXG4gXFx0XFx0XFx0XFx0IFxcdTAwMjZ3ZGV2LVxcdTAwM2Vjb25uZWN0X2tleXMtXFx1MDAzZXBhcmFtc1tpXSkpIHtcXG4gXFx0XFx0XFx0bmV0ZGV2X2VycihkZXYsIFxcXCJmYWlsZWQgdG8gc2V0IGtleSAlZFxcXFxuXFxcIiwgaSk7XFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvd2V4dC1jb21wYXQuYyBiL25ldC93aXJlbGVzcy93ZXh0LWNvbXBhdC5jXFxuaW5kZXggZDQ1YmMwOGMwZGU0OS4uZWMyMzg5ZjZiOGIxOCAxMDA2NDRcXG4tLS0gYS9uZXQvd2lyZWxlc3Mvd2V4dC1jb21wYXQuY1xcbisrKyBiL25ldC93aXJlbGVzcy93ZXh0LWNvbXBhdC5jXFxuQEAgLTQwMSw2ICs0MDEsOCBAQCBzdGF0aWMgaW50IGNmZzgwMjExX3NldF9lbmNyeXB0aW9uKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG4gXFx0XFx0XFx0XFx0ICAgaW50IGlkeCwgc3RydWN0IGtleV9wYXJhbXMgKnBhcmFtcylcXG4ge1xcbiBcXHRzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LVxcdTAwM2VpZWVlODAyMTFfcHRyO1xcbitcXHRlbnVtIG5sODAyMTFfa2V5X3R5cGUga2V5X3R5cGUgPVxcbitcXHRcXHRwYWlyd2lzZSA/IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRSA6IE5MODAyMTFfS0VZVFlQRV9HUk9VUDtcXG4gXFx0aW50IGVyciwgaTtcXG4gXFx0Ym9vbCByZWpvaW4gPSBmYWxzZTtcXG4gXFxuQEAgLTQ1NCwxMSArNDU2LDExIEBAIHN0YXRpYyBpbnQgY2ZnODAyMTFfc2V0X2VuY3J5cHRpb24oc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbiBcXHRcXHRcXHRcXHRyZWpvaW4gPSB0cnVlO1xcbiBcXHRcXHRcXHR9XFxuIFxcbi1cXHRcXHRcXHRpZiAoIWNmZzgwMjExX3ZhbGlkX2tleV9pZHgod2RldiwgaWR4LCBwYWlyd2lzZSwgYWRkcikpXFxuK1xcdFxcdFxcdGlmICghY2ZnODAyMTFfdmFsaWRfa2V5X2lkeCh3ZGV2LCBpZHgsIGtleV90eXBlLCBhZGRyKSlcXG4gXFx0XFx0XFx0XFx0ZXJyID0gLUVOT0VOVDtcXG4gXFx0XFx0XFx0ZWxzZVxcbi1cXHRcXHRcXHRcXHRlcnIgPSByZGV2X2RlbF9rZXkocmRldiwgd2RldiwgLTEsIGlkeCwgcGFpcndpc2UsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgIGFkZHIpO1xcbitcXHRcXHRcXHRcXHRlcnIgPSByZGV2X2RlbF9rZXkocmRldiwgd2RldiwgLTEsIGlkeCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAga2V5X3R5cGUsIGFkZHIpO1xcbiBcXHRcXHR9XFxuIFxcdFxcdHdkZXYtXFx1MDAzZXdleHQuY29ubmVjdC5wcml2YWN5ID0gZmFsc2U7XFxuIFxcdFxcdC8qXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIwOjAyOjI2LjY5NzU1Mjg0MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjI1MzM5MzI2ODQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1BQzgwMjExXCIsXG4gICAgXCJDRkc4MDIxMVwiLFxuICAgIFwiTUFDODAyMTFfSFdTSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJubDgwMjExX25ld19rZXlcIixcbiAgICBcIm5sODAyMTFfZGVsX2tleVwiLFxuICAgIFwibmw4MDIxMV9nZXRfa2V5XCIsXG4gICAgXCJubDgwMjExX3NldF9zdGF0aW9uXCIsXG4gICAgXCJubDgwMjExX25ld19zdGF0aW9uXCIsXG4gICAgXCJubDgwMjExX2Fzc29jaWF0ZVwiLFxuICAgIFwiaWVlZTgwMjExX2tleV9saW5rXCIsXG4gICAgXCJpZWVlODAyMTFfZ3RrX3Jla2V5X2FkZFwiLFxuICAgIFwiaWVlZTgwMjExX3B1dF9jaXBfY2FwXCIsXG4gICAgXCJjZmc4MDIxMV9jaWd0a19zdXBwb3J0ZWRcIixcbiAgICBcImNmZzgwMjExX3ZhbGlkX2tleV9pZHhcIixcbiAgICBcImNmZzgwMjExX3ZhbGlkYXRlX2tleV9zZXR0aW5nc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgdGhlIENvbnRyb2wgSW50ZWdyaXR5IFByb3RvY29sIChDSVApIGluIGNmZzgwMjExIGFuZCBtYWM4MDIxMSwgaW5jbHVkaW5nIGEgbmV3IGtleSB0eXBlIGBOTDgwMjExX0tFWVRZUEVfQ0lHVEtgIGFuZCBuZXcgbmV0bGluayBhdHRyaWJ1dGVzLiBJdCBtb2RpZmllcyBrZXkgaGFuZGxpbmcgbG9naWMgYWNyb3NzIHRoZSB3aXJlbGVzcyBzdGFjayBhbmQgdXBkYXRlcyBgbWFjODAyMTFfaHdzaW1gIHRvIGFkdmVydGlzZSBDSVAgc3VwcG9ydCwgbWFraW5nIGl0IHRlc3RhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgbmw4MDIxMSBuZXRsaW5rIGNvbW1hbmRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmOWI0ZDlkMzUyYzcwMjI1MzljMzAyZGQwNTE4ZTIyNjAzNzU5ZDIwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMSAyMDowMjoyNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvY2ZnODAyMTEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvY2ZnODAyMTEuY1xuaW5kZXggZWNkZTkxMTU5YjU0Ni4uZDRlOTQyM2ZjNWU0ZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvY2ZnODAyMTEuY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jZmc4MDIxMS5jXG5AQCAtMTEyNSwxMyArMTEyNSwxNSBAQCB2b2lkIGF0aDZrbF9jZmc4MDIxMV9jaF9zd2l0Y2hfbm90aWZ5KHN0cnVjdCBhdGg2a2xfdmlmICp2aWYsIGludCBmcmVxLFxuIH1cbiBcbiBzdGF0aWMgaW50IGF0aDZrbF9jZmc4MDIxMV9hZGRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4tXHRcdFx0XHQgICBpbnQgbGlua19pZCwgdTgga2V5X2luZGV4LCBib29sIHBhaXJ3aXNlLFxuK1x0XHRcdFx0ICAgaW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCxcbitcdFx0XHRcdCAgIGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLFxuIFx0XHRcdFx0ICAgY29uc3QgdTggKm1hY19hZGRyLFxuIFx0XHRcdFx0ICAgc3RydWN0IGtleV9wYXJhbXMgKnBhcmFtcylcbiB7XG4gXHRzdHJ1Y3QgYXRoNmtsICphciA9IGF0aDZrbF9wcml2KHdkZXYtXHUwMDNlbmV0ZGV2KTtcbiBcdHN0cnVjdCBhdGg2a2xfdmlmICp2aWYgPSBuZXRkZXZfcHJpdih3ZGV2LVx1MDAzZW5ldGRldik7XG4gXHRzdHJ1Y3QgYXRoNmtsX2tleSAqa2V5ID0gTlVMTDtcbitcdGJvb2wgcGFpcndpc2UgPSB0eXBlID09IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRTtcbiBcdGludCBzZXFfbGVuO1xuIFx0dTgga2V5X3VzYWdlO1xuIFx0dTgga2V5X3R5cGU7XG5AQCAtMTI1MCw3ICsxMjUyLDggQEAgc3RhdGljIGludCBhdGg2a2xfY2ZnODAyMTFfYWRkX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGVcbiB9XG4gXG4gc3RhdGljIGludCBhdGg2a2xfY2ZnODAyMTFfZGVsX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuLVx0XHRcdFx0ICAgaW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCwgYm9vbCBwYWlyd2lzZSxcbitcdFx0XHRcdCAgIGludCBsaW5rX2lkLCB1OCBrZXlfaW5kZXgsXG4rXHRcdFx0XHQgICBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSxcbiBcdFx0XHRcdCAgIGNvbnN0IHU4ICptYWNfYWRkcilcbiB7XG4gXHRzdHJ1Y3QgYXRoNmtsICphciA9IGF0aDZrbF9wcml2KHdkZXYtXHUwMDNlbmV0ZGV2KTtcbkBAIC0xMjgwLDcgKzEyODMsOCBAQCBzdGF0aWMgaW50IGF0aDZrbF9jZmc4MDIxMV9kZWxfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZVxuIH1cbiBcbiBzdGF0aWMgaW50IGF0aDZrbF9jZmc4MDIxMV9nZXRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4tXHRcdFx0XHQgICBpbnQgbGlua19pZCwgdTgga2V5X2luZGV4LCBib29sIHBhaXJ3aXNlLFxuK1x0XHRcdFx0ICAgaW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCxcbitcdFx0XHRcdCAgIGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLFxuIFx0XHRcdFx0ICAgY29uc3QgdTggKm1hY19hZGRyLCB2b2lkICpjb29raWUsXG4gXHRcdFx0XHQgICB2b2lkICgqY2FsbGJhY2spICh2b2lkICpjb29raWUsXG4gXHRcdFx0XHRcdFx0ICAgICBzdHJ1Y3Qga2V5X3BhcmFtcyAqKSlcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvd2lsNjIxMC9jZmc4MDIxMS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3dpbDYyMTAvY2ZnODAyMTEuY1xuaW5kZXggNWYyYmQ5YTMxZmFmNi4uYzA5NzgzMWI3ZmFmMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC93aWw2MjEwL2NmZzgwMjExLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC93aWw2MjEwL2NmZzgwMjExLmNcbkBAIC0xNjIxLDExICsxNjIxLDEzIEBAIHN0YXRpYyB2b2lkIHdpbF9kZWxfcnhfa2V5KHU4IGtleV9pbmRleCwgZW51bSB3bWlfa2V5X3VzYWdlIGtleV91c2FnZSxcbiBcbiBzdGF0aWMgaW50IHdpbF9jZmc4MDIxMV9hZGRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksXG4gXHRcdFx0XHRzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LCBpbnQgbGlua19pZCxcbi1cdFx0XHRcdHU4IGtleV9pbmRleCwgYm9vbCBwYWlyd2lzZSxcbitcdFx0XHRcdHU4IGtleV9pbmRleCxcbitcdFx0XHRcdGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLFxuIFx0XHRcdFx0Y29uc3QgdTggKm1hY19hZGRyLFxuIFx0XHRcdFx0c3RydWN0IGtleV9wYXJhbXMgKnBhcmFtcylcbiB7XG4gXHRpbnQgcmM7XG4rXHRib29sIHBhaXJ3aXNlID0gdHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0U7XG4gXHRzdHJ1Y3Qgd2lsNjIxMF9wcml2ICp3aWwgPSB3aXBoeV90b193aWwod2lwaHkpO1xuIFx0c3RydWN0IHdpbDYyMTBfdmlmICp2aWYgPSB3ZGV2X3RvX3ZpZih3aWwsIHdkZXYpO1xuIFx0ZW51bSB3bWlfa2V5X3VzYWdlIGtleV91c2FnZSA9IHdpbF9kZXRlY3Rfa2V5X3VzYWdlKHdkZXYsIHBhaXJ3aXNlKTtcbkBAIC0xNjk2LDEyICsxNjk4LDE0IEBAIHN0YXRpYyBpbnQgd2lsX2NmZzgwMjExX2FkZF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSxcbiBcbiBzdGF0aWMgaW50IHdpbF9jZmc4MDIxMV9kZWxfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksXG4gXHRcdFx0XHRzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LCBpbnQgbGlua19pZCxcbi1cdFx0XHRcdHU4IGtleV9pbmRleCwgYm9vbCBwYWlyd2lzZSxcbitcdFx0XHRcdHU4IGtleV9pbmRleCxcbitcdFx0XHRcdGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLFxuIFx0XHRcdFx0Y29uc3QgdTggKm1hY19hZGRyKVxuIHtcbiBcdHN0cnVjdCB3aWw2MjEwX3ByaXYgKndpbCA9IHdpcGh5X3RvX3dpbCh3aXBoeSk7XG4gXHRzdHJ1Y3Qgd2lsNjIxMF92aWYgKnZpZiA9IHdkZXZfdG9fdmlmKHdpbCwgd2Rldik7XG4tXHRlbnVtIHdtaV9rZXlfdXNhZ2Uga2V5X3VzYWdlID0gd2lsX2RldGVjdF9rZXlfdXNhZ2Uod2RldiwgcGFpcndpc2UpO1xuK1x0ZW51bSB3bWlfa2V5X3VzYWdlIGtleV91c2FnZSA9XG4rXHRcdHdpbF9kZXRlY3Rfa2V5X3VzYWdlKHdkZXYsIHR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFKTtcbiBcdHN0cnVjdCB3aWxfc3RhX2luZm8gKmNzID0gd2lsX2ZpbmRfc3RhX2J5X2tleV91c2FnZSh3aWwsIHZpZi1cdTAwM2VtaWQsXG4gXHRcdFx0XHRcdFx0XHQgICAga2V5X3VzYWdlLFxuIFx0XHRcdFx0XHRcdFx0ICAgIG1hY19hZGRyKTtcbkBAIC0yMDcyLDcgKzIwNzYsOCBAQCB2b2lkIHdpbF9jZmc4MDIxMV9hcF9yZWNvdmVyeShzdHJ1Y3Qgd2lsNjIxMF9wcml2ICp3aWwpXG4gXHRcdGtleV9wYXJhbXMuc2VxX2xlbiA9IElFRUU4MDIxMV9HQ01QX1BOX0xFTjtcbiBcdFx0cmMgPSB3aWxfY2ZnODAyMTFfYWRkX2tleSh3aXBoeSwgdmlmX3RvX3dkZXYodmlmKSwgLTEsXG4gXHRcdFx0XHRcdCAgdmlmLVx1MDAzZWd0a19pbmRleCxcbi1cdFx0XHRcdFx0ICBmYWxzZSwgTlVMTCwgXHUwMDI2a2V5X3BhcmFtcyk7XG4rXHRcdFx0XHRcdCAgTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFLFxuK1x0XHRcdFx0XHQgIE5VTEwsIFx1MDAyNmtleV9wYXJhbXMpO1xuIFx0XHRpZiAocmMpXG4gXHRcdFx0d2lsX2Vycih3aWwsIFwidmlmICVkIHJlY292ZXJ5IGFkZCBrZXkgZmFpbGVkICglZClcXG5cIixcbiBcdFx0XHRcdGksIHJjKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jXG5pbmRleCA2YjJjMzRlM2E3OTZjLi43ODVmZDU3ZDdjNmNjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jXG5AQCAtMjc3MCw3ICsyNzcwLDggQEAgYnJjbWZfY2ZnODAyMTFfY29uZmlnX2RlZmF1bHRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuIFxuIHN0YXRpYyBzMzJcbiBicmNtZl9jZmc4MDIxMV9kZWxfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4tXHRcdCAgICAgICBpbnQgbGlua19pZCwgdTgga2V5X2lkeCwgYm9vbCBwYWlyd2lzZSxcbitcdFx0ICAgICAgIGludCBsaW5rX2lkLCB1OCBrZXlfaWR4LFxuK1x0XHQgICAgICAgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsXG4gXHRcdCAgICAgICBjb25zdCB1OCAqbWFjX2FkZHIpXG4ge1xuIFx0c3RydWN0IGJyY21mX2lmICppZnAgPSBuZXRkZXZfcHJpdih3ZGV2LVx1MDAzZW5ldGRldik7XG5AQCAtMjgwOCw3ICsyODA5LDggQEAgYnJjbWZfY2ZnODAyMTFfZGVsX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuIFxuIHN0YXRpYyBzMzJcbiBicmNtZl9jZmc4MDIxMV9hZGRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4tXHRcdCAgICAgICBpbnQgbGlua19pZCwgdTgga2V5X2lkeCwgYm9vbCBwYWlyd2lzZSxcbitcdFx0ICAgICAgIGludCBsaW5rX2lkLCB1OCBrZXlfaWR4LFxuK1x0XHQgICAgICAgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsXG4gXHRcdCAgICAgICBjb25zdCB1OCAqbWFjX2FkZHIsIHN0cnVjdCBrZXlfcGFyYW1zICpwYXJhbXMpXG4ge1xuIFx0c3RydWN0IGJyY21mX2NmZzgwMjExX2luZm8gKmNmZyA9IHdpcGh5X3RvX2NmZyh3aXBoeSk7XG5AQCAtMjgzNCw3ICsyODM2LDcgQEAgYnJjbWZfY2ZnODAyMTFfYWRkX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuIFxuIFx0aWYgKHBhcmFtcy1cdTAwM2VrZXlfbGVuID09IDApXG4gXHRcdHJldHVybiBicmNtZl9jZmc4MDIxMV9kZWxfa2V5KHdpcGh5LCB3ZGV2LCAtMSwga2V5X2lkeCxcbi1cdFx0XHRcdFx0ICAgICAgcGFpcndpc2UsIG1hY19hZGRyKTtcbitcdFx0XHRcdFx0ICAgICAgdHlwZSwgbWFjX2FkZHIpO1xuIFxuIFx0aWYgKHBhcmFtcy1cdTAwM2VrZXlfbGVuIFx1MDAzZSBzaXplb2Yoa2V5LVx1MDAzZWRhdGEpKSB7XG4gXHRcdGJwaHlfZXJyKGRydnIsIFwiVG9vIGxvbmcga2V5IGxlbmd0aCAoJXUpXFxuXCIsIHBhcmFtcy1cdTAwM2VrZXlfbGVuKTtcbkBAIC0yOTMwLDcgKzI5MzIsOCBAQCBicmNtZl9jZmc4MDIxMV9hZGRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4gXG4gc3RhdGljIHMzMlxuIGJyY21mX2NmZzgwMjExX2dldF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldixcbi1cdFx0ICAgICAgIGludCBsaW5rX2lkLCB1OCBrZXlfaWR4LCBib29sIHBhaXJ3aXNlLFxuK1x0XHQgICAgICAgaW50IGxpbmtfaWQsIHU4IGtleV9pZHgsXG4rXHRcdCAgICAgICBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSxcbiBcdFx0ICAgICAgIGNvbnN0IHU4ICptYWNfYWRkciwgdm9pZCAqY29va2llLFxuIFx0XHQgICAgICAgdm9pZCAoKmNhbGxiYWNrKSh2b2lkICpjb29raWUsXG4gXHRcdFx0XHRcdHN0cnVjdCBrZXlfcGFyYW1zICpwYXJhbXMpKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL2QzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9kMy5jXG5pbmRleCA1NWY5YjgwOWU3NjRkLi42ZDhlZGUzMzZkNTliIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvZDMuY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvZDMuY1xuQEAgLTExMzgsNyArMTEzOCw4IEBAIGl3bF9tbGRfYWRkX21jYXN0X3Jla2V5KHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXG4gXHRcdHJldHVybjtcbiBcbiBcdGtleV9jb25maWcgPSBpZWVlODAyMTFfZ3RrX3Jla2V5X2FkZCh2aWYsIGtleV9kYXRhLVx1MDAzZWlkLCBrZXlfZGF0YS1cdTAwM2VrZXksXG4tXHRcdFx0XHRcdCAgICAgc2l6ZW9mKGtleV9kYXRhLVx1MDAzZWtleSksIGxpbmtfaWQpO1xuK1x0XHRcdFx0XHQgICAgIHNpemVvZihrZXlfZGF0YS1cdTAwM2VrZXkpLCBsaW5rX2lkLFxuK1x0XHRcdFx0XHQgICAgIGZhbHNlKTtcbiBcdGlmIChJU19FUlIoa2V5X2NvbmZpZykpXG4gXHRcdHJldHVybjtcbiBcbkBAIC0xMjIwLDcgKzEyMjEsOCBAQCBzdGF0aWMgdm9pZCBpd2xfbWxkX21sb19yZWtleShzdHJ1Y3QgaXdsX21sZCAqbWxkLFxuIFx0XHRcdFx0IG1sb19rZXktXHUwMDNlaWR4LCBsaW5rX2lkKTtcbiBcbiBcdFx0a2V5ID0gaWVlZTgwMjExX2d0a19yZWtleV9hZGQodmlmLCBtbG9fa2V5LVx1MDAzZWlkeCwgbWxvX2tleS1cdTAwM2VrZXksXG4tXHRcdFx0XHRcdCAgICAgIHNpemVvZihtbG9fa2V5LVx1MDAzZWtleSksIGxpbmtfaWQpO1xuK1x0XHRcdFx0XHQgICAgICBzaXplb2YobWxvX2tleS1cdTAwM2VrZXkpLCBsaW5rX2lkLFxuK1x0XHRcdFx0XHQgICAgICBmYWxzZSk7XG4gXG4gXHRcdGlmIChJU19FUlIoa2V5KSlcbiBcdFx0XHRjb250aW51ZTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9kMy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vZDMuY1xuaW5kZXggNmIxMWZhMzJlYTVjNi4uYmQ1MmYyZWJkM2JhMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL2QzLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL2QzLmNcbkBAIC0xODg3LDcgKzE4ODcsOCBAQCBzdGF0aWMgYm9vbCBpd2xfbXZtX2d0a19yZWtleShzdHJ1Y3QgaXdsX3dvd2xhbl9zdGF0dXNfZGF0YSAqc3RhdHVzLFxuIFxuIFx0XHRrZXkgPSBpZWVlODAyMTFfZ3RrX3Jla2V5X2FkZCh2aWYsIHN0YXR1cy1cdTAwM2VndGtbaV0uaWQsXG4gXHRcdFx0XHRcdCAgICAgIHN0YXR1cy1cdTAwM2VndGtbaV0ua2V5LFxuLVx0XHRcdFx0XHQgICAgICBzaXplb2Yoc3RhdHVzLVx1MDAzZWd0a1tpXS5rZXkpLCAtMSk7XG4rXHRcdFx0XHRcdCAgICAgIHNpemVvZihzdGF0dXMtXHUwMDNlZ3RrW2ldLmtleSksIC0xLFxuK1x0XHRcdFx0XHQgICAgICBmYWxzZSk7XG4gXHRcdGlmIChJU19FUlIoa2V5KSkge1xuIFx0XHRcdC8qIEZXIG1heSBzZW5kIGFsc28gdGhlIG9sZCBrZXlzICovXG4gXHRcdFx0aWYgKFBUUl9FUlIoa2V5KSA9PSAtRUFMUkVBRFkpXG5AQCAtMTkyMiw3ICsxOTIzLDggQEAgaXdsX212bV9kM19pZ3RrX2JpZ3RrX3Jla2V5X2FkZChzdHJ1Y3QgaXdsX3dvd2xhbl9zdGF0dXNfZGF0YSAqc3RhdHVzLFxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbiBcdGtleV9jb25maWcgPSBpZWVlODAyMTFfZ3RrX3Jla2V5X2FkZCh2aWYsIGtleWlkeCwga2V5X2RhdGEtXHUwMDNla2V5LFxuLVx0XHRcdFx0XHQgICAgIHNpemVvZihrZXlfZGF0YS1cdTAwM2VrZXkpLCAtMSk7XG4rXHRcdFx0XHRcdCAgICAgc2l6ZW9mKGtleV9kYXRhLVx1MDAzZWtleSksIC0xLFxuK1x0XHRcdFx0XHQgICAgIGZhbHNlKTtcbiBcdGlmIChJU19FUlIoa2V5X2NvbmZpZykpIHtcbiBcdFx0LyogRlcgbWF5IHNlbmQgYWxzbyB0aGUgb2xkIGtleXMgKi9cbiBcdFx0cmV0dXJuIFBUUl9FUlIoa2V5X2NvbmZpZykgPT0gLUVBTFJFQURZO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvY2ZnLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2NmZy5jXG5pbmRleCA3MmM5MmY3MjQ2OWRlLi5lMDE1Y2ZhMTk1MGMxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9jZmcuY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9jZmcuY1xuQEAgLTE1MDgsNyArMTUwOCw4IEBAIHN0YXRpYyBpbnQgbGJzX2NmZ19zZXRfZGVmYXVsdF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSxcbiBcbiBcbiBzdGF0aWMgaW50IGxic19jZmdfYWRkX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuLVx0XHRcdCAgIGludCBsaW5rX2lkLCB1OCBpZHgsIGJvb2wgcGFpcndpc2UsXG4rXHRcdFx0ICAgaW50IGxpbmtfaWQsIHU4IGlkeCxcbitcdFx0XHQgICBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSxcbiBcdFx0XHQgICBjb25zdCB1OCAqbWFjX2FkZHIsIHN0cnVjdCBrZXlfcGFyYW1zICpwYXJhbXMpXG4ge1xuIFx0c3RydWN0IGxic19wcml2YXRlICpwcml2ID0gd2lwaHlfcHJpdih3aXBoeSk7XG5AQCAtMTU2OSw3ICsxNTcwLDggQEAgc3RhdGljIGludCBsYnNfY2ZnX2FkZF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcbiBcbiBcbiBzdGF0aWMgaW50IGxic19jZmdfZGVsX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuLVx0XHRcdCAgIGludCBsaW5rX2lkLCB1OCBrZXlfaW5kZXgsIGJvb2wgcGFpcndpc2UsXG4rXHRcdFx0ICAgaW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCxcbitcdFx0XHQgICBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSxcbiBcdFx0XHQgICBjb25zdCB1OCAqbWFjX2FkZHIpXG4ge1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9jZmc4MDIxMS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L2NmZzgwMjExLmNcbmluZGV4IDhlYzJkMjJhOGMzM2EuLjA2MGMzNTFjZWNjMDYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvY2ZnODAyMTEuY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L2NmZzgwMjExLmNcbkBAIC0xNDIsMTIgKzE0MiwxNCBAQCBzdGF0aWMgdm9pZCAqbXdpZmlleF9jZmc4MDIxMV9nZXRfYWRhcHRlcihzdHJ1Y3Qgd2lwaHkgKndpcGh5KVxuICAqL1xuIHN0YXRpYyBpbnRcbiBtd2lmaWV4X2NmZzgwMjExX2RlbF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldixcbi1cdFx0XHQgaW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCwgYm9vbCBwYWlyd2lzZSxcbitcdFx0XHQgaW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCxcbitcdFx0XHRlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSxcbiBcdFx0XHQgY29uc3QgdTggKm1hY19hZGRyKVxuIHtcbiBcdHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYgPSBtd2lmaWV4X25ldGRldl9nZXRfcHJpdih3ZGV2LVx1MDAzZW5ldGRldik7XG4gXHRzdGF0aWMgY29uc3QgdTggYmNfbWFjW10gPSB7MHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZn07XG4tXHRjb25zdCB1OCAqcGVlcl9tYWMgPSBwYWlyd2lzZSA/IG1hY19hZGRyIDogYmNfbWFjO1xuK1x0Y29uc3QgdTggKnBlZXJfbWFjID1cbitcdFx0KHR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFKSA/IG1hY19hZGRyIDogYmNfbWFjO1xuIFxuIFx0aWYgKG13aWZpZXhfc2V0X2VuY29kZShwcml2LCBOVUxMLCBOVUxMLCAwLCBrZXlfaW5kZXgsIHBlZXJfbWFjLCAxKSkge1xuIFx0XHRtd2lmaWV4X2RiZyhwcml2LVx1MDAzZWFkYXB0ZXIsIEVSUk9SLCBcImRlbGV0aW5nIHRoZSBjcnlwdG8ga2V5c1xcblwiKTtcbkBAIC00ODIsMTMgKzQ4NCwxNSBAQCBtd2lmaWV4X2NmZzgwMjExX3NldF9kZWZhdWx0X2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuICAqL1xuIHN0YXRpYyBpbnRcbiBtd2lmaWV4X2NmZzgwMjExX2FkZF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldixcbi1cdFx0XHQgaW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCwgYm9vbCBwYWlyd2lzZSxcbitcdFx0XHQgaW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCxcbitcdFx0XHQgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsXG4gXHRcdFx0IGNvbnN0IHU4ICptYWNfYWRkciwgc3RydWN0IGtleV9wYXJhbXMgKnBhcmFtcylcbiB7XG4gXHRzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2ID0gbXdpZmlleF9uZXRkZXZfZ2V0X3ByaXYod2Rldi1cdTAwM2VuZXRkZXYpO1xuIFx0c3RydWN0IG13aWZpZXhfd2VwX2tleSAqd2VwX2tleTtcbiBcdHN0YXRpYyBjb25zdCB1OCBiY19tYWNbXSA9IHsweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmfTtcbi1cdGNvbnN0IHU4ICpwZWVyX21hYyA9IHBhaXJ3aXNlID8gbWFjX2FkZHIgOiBiY19tYWM7XG4rXHRjb25zdCB1OCAqcGVlcl9tYWMgPVxuK1x0XHQodHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0UpID8gbWFjX2FkZHIgOiBiY19tYWM7XG4gXG4gXHRpZiAoR0VUX0JTU19ST0xFKHByaXYpID09IE1XSUZJRVhfQlNTX1JPTEVfVUFQIFx1MDAyNlx1MDAyNlxuIFx0ICAgIChwYXJhbXMtXHUwMDNlY2lwaGVyID09IFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDQwIHx8XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWljcm9jaGlwL3dpbGMxMDAwL2NmZzgwMjExLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9taWNyb2NoaXAvd2lsYzEwMDAvY2ZnODAyMTEuY1xuaW5kZXggNjY1NGZjZTRkZWQ4NC4uNzg1MGUwYTQ4MzkwNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21pY3JvY2hpcC93aWxjMTAwMC9jZmc4MDIxMS5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9taWNyb2NoaXAvd2lsYzEwMDAvY2ZnODAyMTEuY1xuQEAgLTUzNSwxMCArNTM1LDEzIEBAIHN0YXRpYyBpbnQgd2lsY193ZmlfY2ZnX2NvcHlfd3BhX2luZm8oc3RydWN0IHdpbGNfd2ZpX2tleSAqa2V5X2luZm8sXG4gfVxuIFxuIHN0YXRpYyBpbnQgYWRkX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LCBpbnQgbGlua19pZCxcbi1cdFx0ICAgdTgga2V5X2luZGV4LCBib29sIHBhaXJ3aXNlLCBjb25zdCB1OCAqbWFjX2FkZHIsXG4rXHRcdCAgIHU4IGtleV9pbmRleCxcbitcdFx0ICAgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsXG4rXHRcdCAgIGNvbnN0IHU4ICptYWNfYWRkcixcbiBcdFx0ICAgc3RydWN0IGtleV9wYXJhbXMgKnBhcmFtcylcbiBcbiB7XG4rXHRib29sIHBhaXJ3aXNlID0gdHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0U7XG4gXHRpbnQgcmV0ID0gMCwga2V5bGVuID0gcGFyYW1zLVx1MDAzZWtleV9sZW47XG4gXHRjb25zdCB1OCAqcnhfbWljID0gTlVMTDtcbiBcdGNvbnN0IHU4ICp0eF9taWMgPSBOVUxMO1xuQEAgLTY0MSw5ICs2NDQsMTAgQEAgc3RhdGljIGludCBhZGRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsIGludCBsaW5rX2lkLFxuIFxuIHN0YXRpYyBpbnQgZGVsX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LCBpbnQgbGlua19pZCxcbiBcdFx0ICAgdTgga2V5X2luZGV4LFxuLVx0XHQgICBib29sIHBhaXJ3aXNlLFxuK1x0XHQgICBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSxcbiBcdFx0ICAgY29uc3QgdTggKm1hY19hZGRyKVxuIHtcbitcdGJvb2wgcGFpcndpc2UgPSB0eXBlID09IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRTtcbiBcdHN0cnVjdCB3aWxjX3ZpZiAqdmlmID0gbmV0ZGV2X3ByaXYod2Rldi1cdTAwM2VuZXRkZXYpO1xuIFx0c3RydWN0IHdpbGNfcHJpdiAqcHJpdiA9IFx1MDAyNnZpZi1cdTAwM2Vwcml2O1xuIFxuQEAgLTY4MSwxMCArNjg1LDExIEBAIHN0YXRpYyBpbnQgZGVsX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LCBpbnQgbGlua19pZCxcbiB9XG4gXG4gc3RhdGljIGludCBnZXRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsIGludCBsaW5rX2lkLFxuLVx0XHQgICB1OCBrZXlfaW5kZXgsIGJvb2wgcGFpcndpc2UsIGNvbnN0IHU4ICptYWNfYWRkcixcbi1cdFx0ICAgdm9pZCAqY29va2llLFxuK1x0XHQgICB1OCBrZXlfaW5kZXgsIGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLFxuK1x0XHQgICBjb25zdCB1OCAqbWFjX2FkZHIsIHZvaWQgKmNvb2tpZSxcbiBcdFx0ICAgdm9pZCAoKmNhbGxiYWNrKSh2b2lkICpjb29raWUsIHN0cnVjdCBrZXlfcGFyYW1zICopKVxuIHtcbitcdGJvb2wgcGFpcndpc2UgPSB0eXBlID09IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRTtcbiBcdHN0cnVjdCB3aWxjX3ZpZiAqdmlmID0gbmV0ZGV2X3ByaXYod2Rldi1cdTAwM2VuZXRkZXYpO1xuIFx0c3RydWN0IHdpbGNfcHJpdiAqcHJpdiA9IFx1MDAyNnZpZi1cdTAwM2Vwcml2O1xuIFx0c3RydWN0ICBrZXlfcGFyYW1zIGtleV9wYXJhbXM7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvY2ZnODAyMTEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL2NmZzgwMjExLmNcbmluZGV4IDRmOWUyMGY3MjgxMTQuLjA4YjZkYjE0NzQ1MmMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9jZmc4MDIxMS5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9jZmc4MDIxMS5jXG5AQCAtOTksMTIgKzk5LDE0IEBAIHN0YXRpYyB2b2lkICpueHB3aWZpX2NmZzgwMjExX2dldF9hZGFwdGVyKHN0cnVjdCB3aXBoeSAqd2lwaHkpXG4gLyogY2ZnODAyMTEgb3BlcmF0aW9uIGhhbmRsZXIgdG8gZGVsZXRlIGEgbmV0d29yayBrZXkuICovXG4gc3RhdGljIGludFxuIG54cHdpZmlfY2ZnODAyMTFfZGVsX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuLVx0XHRcdCBpbnQgbGlua19pZCwgdTgga2V5X2luZGV4LCBib29sIHBhaXJ3aXNlLFxuK1x0XHRcdCBpbnQgbGlua19pZCwgdTgga2V5X2luZGV4LFxuK1x0XHRcdCBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSxcbiBcdFx0XHQgY29uc3QgdTggKm1hY19hZGRyKVxuIHtcbiBcdHN0cnVjdCBueHB3aWZpX3ByaXZhdGUgKnByaXYgPSBueHB3aWZpX25ldGRldl9nZXRfcHJpdih3ZGV2LVx1MDAzZW5ldGRldik7XG4gXHRzdGF0aWMgY29uc3QgdTggYmNfbWFjW10gPSB7MHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZn07XG4tXHRjb25zdCB1OCAqcGVlcl9tYWMgPSBwYWlyd2lzZSA/IG1hY19hZGRyIDogYmNfbWFjO1xuK1x0Y29uc3QgdTggKnBlZXJfbWFjID1cbitcdFx0KHR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFKSA/IG1hY19hZGRyIDogYmNfbWFjO1xuIFx0aW50IHJldDtcbiBcbiBcdHJldCA9IG54cHdpZmlfc2V0X2VuY29kZShwcml2LCBOVUxMLCBOVUxMLCAwLCBrZXlfaW5kZXgsIHBlZXJfbWFjLCAxKTtcbkBAIC00MjgsNyArNDMwLDggQEAgbnhwd2lmaV9jZmc4MDIxMV9zZXRfZGVmYXVsdF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiAvKiBjZmc4MDIxMSBoYW5kbGVyIGZvciBhZGRpbmcgYW4gODAyLjExIGVuY3J5cHRpb24ga2V5LiAqL1xuIHN0YXRpYyBpbnRcbiBueHB3aWZpX2NmZzgwMjExX2FkZF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldixcbi1cdFx0XHQgaW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCwgYm9vbCBwYWlyd2lzZSxcbitcdFx0XHQgaW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCxcbitcdFx0XHQgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsXG4gXHRcdFx0IGNvbnN0IHU4ICptYWNfYWRkciwgc3RydWN0IGtleV9wYXJhbXMgKnBhcmFtcylcbiB7XG4gXHRzdHJ1Y3Qgbnhwd2lmaV9wcml2YXRlICpwcml2ID0gbnhwd2lmaV9uZXRkZXZfZ2V0X3ByaXYod2Rldi1cdTAwM2VuZXRkZXYpO1xuQEAgLTQzOCw3ICs0NDEsNyBAQCBueHB3aWZpX2NmZzgwMjExX2FkZF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcbiBcdGludCByZXQ7XG4gXG4gXHRldGhfYnJvYWRjYXN0X2FkZHIoYmNfbWFjKTtcbi1cdHBlZXJfbWFjID0gcGFpcndpc2UgPyBtYWNfYWRkciA6IGJjX21hYztcbitcdHBlZXJfbWFjID0gKHR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFKSA/IG1hY19hZGRyIDogYmNfbWFjO1xuIFxuIFx0aWYgKEdFVF9CU1NfUk9MRShwcml2KSA9PSBOWFBXSUZJX0JTU19ST0xFX1VBUCBcdTAwMjZcdTAwMjZcbiBcdCAgICAocGFyYW1zLVx1MDAzZWNpcGhlciA9PSBXTEFOX0NJUEhFUl9TVUlURV9XRVA0MCB8fFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3F1YW50ZW5uYS9xdG5mbWFjL2NmZzgwMjExLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9xdWFudGVubmEvcXRuZm1hYy9jZmc4MDIxMS5jXG5pbmRleCA5ZTQ0Yzg1ZDIwNTFjLi4zODYyNTM0MjE2OWZmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcXVhbnRlbm5hL3F0bmZtYWMvY2ZnODAyMTEuY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcXVhbnRlbm5hL3F0bmZtYWMvY2ZnODAyMTEuY1xuQEAgLTUzMywxMCArNTMzLDEyIEBAIHF0bmZfZHVtcF9zdGF0aW9uKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4gfVxuIFxuIHN0YXRpYyBpbnQgcXRuZl9hZGRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4tXHRcdFx0aW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCwgYm9vbCBwYWlyd2lzZSxcbitcdFx0XHRpbnQgbGlua19pZCwgdTgga2V5X2luZGV4LFxuK1x0XHRcdGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLFxuIFx0XHRcdGNvbnN0IHU4ICptYWNfYWRkciwgc3RydWN0IGtleV9wYXJhbXMgKnBhcmFtcylcbiB7XG4gXHRzdHJ1Y3QgcXRuZl92aWYgKnZpZiA9IHF0bmZfbmV0ZGV2X2dldF9wcml2KHdkZXYtXHUwMDNlbmV0ZGV2KTtcbitcdGJvb2wgcGFpcndpc2UgPSB0eXBlID09IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRTtcbiBcdGludCByZXQ7XG4gXG4gXHRyZXQgPSBxdG5mX2NtZF9zZW5kX2FkZF9rZXkodmlmLCBrZXlfaW5kZXgsIHBhaXJ3aXNlLCBtYWNfYWRkciwgcGFyYW1zKTtcbkBAIC01NDksMTAgKzU1MSwxMiBAQCBzdGF0aWMgaW50IHF0bmZfYWRkX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuIH1cbiBcbiBzdGF0aWMgaW50IHF0bmZfZGVsX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuLVx0XHRcdGludCBsaW5rX2lkLCB1OCBrZXlfaW5kZXgsIGJvb2wgcGFpcndpc2UsXG4rXHRcdFx0aW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCxcbitcdFx0XHRlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSxcbiBcdFx0XHRjb25zdCB1OCAqbWFjX2FkZHIpXG4ge1xuIFx0c3RydWN0IHF0bmZfdmlmICp2aWYgPSBxdG5mX25ldGRldl9nZXRfcHJpdih3ZGV2LVx1MDAzZW5ldGRldik7XG4rXHRib29sIHBhaXJ3aXNlID0gdHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0U7XG4gXHRpbnQgcmV0O1xuIFxuIFx0cmV0ID0gcXRuZl9jbWRfc2VuZF9kZWxfa2V5KHZpZiwga2V5X2luZGV4LCBwYWlyd2lzZSwgbWFjX2FkZHIpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvd293LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg5L3dvdy5jXG5pbmRleCA4ZGFkZDhkZjRmYzY1Li5jOGUwMDIyMzhlY2IyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OS93b3cuY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OS93b3cuY1xuQEAgLTY2OSwxMCArNjY5LDEyIEBAIHN0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICpydHc4OV93b3dfZ3RrX3Jla2V5KHN0cnVjdCBydHc4OV9kZXYgKnJ0d2RldixcbiBcdGlmIChpZWVlODAyMTFfdmlmX2lzX21sZCh3b3dfdmlmKSlcbiBcdFx0a2V5ID0gaWVlZTgwMjExX2d0a19yZWtleV9hZGQod293X3ZpZiwga2V5aWR4LCBndGssXG4gXHRcdFx0XHRcdCAgICAgIGNpcGhlcl9pbmZvLVx1MDAzZWxlbixcbi1cdFx0XHRcdFx0ICAgICAgcnR3dmlmX2xpbmstXHUwMDNlbGlua19pZCk7XG4rXHRcdFx0XHRcdCAgICAgIHJ0d3ZpZl9saW5rLVx1MDAzZWxpbmtfaWQsXG4rXHRcdFx0XHRcdCAgICAgIGZhbHNlKTtcbiBcdGVsc2VcbiBcdFx0a2V5ID0gaWVlZTgwMjExX2d0a19yZWtleV9hZGQod293X3ZpZiwga2V5aWR4LCBndGssXG4tXHRcdFx0XHRcdCAgICAgIGNpcGhlcl9pbmZvLVx1MDAzZWxlbiwgLTEpO1xuK1x0XHRcdFx0XHQgICAgICBjaXBoZXJfaW5mby1cdTAwM2VsZW4sIC0xLFxuK1x0XHRcdFx0XHQgICAgICBmYWxzZSk7XG4gXG4gXHRrZnJlZShyZWtleV9jb25mKTtcbiBcdGlmIChJU19FUlIoa2V5KSkge1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmNcbmluZGV4IDAyYjZkODFjY2NkMTEuLjFjYzMyMmFhODk4ZGQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmNcbkBAIC01NjY4LDYgKzU2NjgsOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHdpcGh5X2lmdHlwZV9leHRfY2FwYWIgbWFjODAyMTFfaHdzaW1faWZ0eXBlc19leHRfY2FwYVtdID0ge1xuIFx0XHQuZW1sX2NhcGFiaWxpdGllcyA9IElFRUU4MDIxMV9FTUxfQ0FQX0VNTFNSX1NVUFAgfFxuIFx0XHRcdFx0ICAgIElFRUU4MDIxMV9FTUxfQ0FQX0VNTE1SX1NVUFBPUlQsXG4gXHRcdC5tbGRfY2FwYV9hbmRfb3BzID0gTUFDODAyMTFfSFdTSU1fTUxEX0NBUEFfT1BTLFxuK1x0XHQvKiBDSVAgd29ya3MgYXMgaHdzaW0gZG9lcyBub3QgaGF2ZSBjb250cm9sIGZyYW1lcyAqL1xuK1x0XHQuY2lwX3N1cHBvcnRlZCA9IHRydWUsXG4rXHRcdC5jaXBfY2FwYWJpbGl0aWVzID0gMCxcbiBcdH0sXG4gfTtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2llZWU4MDIxMS5oIGIvaW5jbHVkZS9saW51eC9pZWVlODAyMTEuaFxuaW5kZXggMjZlNjc0MDM4ODY1NC4uMTZkNzhmZDYxYzIyMyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvaWVlZTgwMjExLmhcbisrKyBiL2luY2x1ZGUvbGludXgvaWVlZTgwMjExLmhcbkBAIC0xODI4LDYgKzE4MjgsNyBAQCBlbnVtIGllZWU4MDIxMV9laWRfZXh0IHtcbiBcdFdMQU5fRUlEX0VYVF9CQU5EV0lEVEhfSU5ESUNBVElPTiA9IDEzNSxcbiBcdFdMQU5fRUlEX0VYVF9LTk9XTl9TVEFfSURFTlRJRkNBVElPTiA9IDEzNixcbiBcdFdMQU5fRUlEX0VYVF9OT05fQVBfU1RBX1JFR19DT04gPSAxMzcsXG4rXHRXTEFOX0VJRF9FWFRfQ0lQX0NBUEEgPSAxNTAsXG4gXHRXTEFOX0VJRF9FWFRfVUhSX09QRVIgPSAxNTEsXG4gXHRXTEFOX0VJRF9FWFRfVUhSX0NBUEEgPSAxNTIsXG4gXHRXTEFOX0VJRF9FWFRfTUFDUCA9IDE1MyxcbkBAIC0yOTAwLDQgKzI5MDEsMTYgQEAgc3RhdGljIGlubGluZSBib29sIGllZWU4MDIxMV9jaGVja190aW0oY29uc3Qgc3RydWN0IGllZWU4MDIxMV90aW1faWUgKnRpbSxcbiBcdFx0ICAgICBfX2llZWU4MDIxMV9jaGVja190aW0odGltLCB0aW1fbGVuLCBhaWQpO1xuIH1cbiBcbisvKiBUaGUgTUlDIHBhZGRpbmcgc3ViZmllbGQgaW4gdGhlIENJUCBjYXBhYmlsaXRpZXMgKi9cbisjZGVmaW5lIFdMQU5fQ0lQX0NBUEFfTUlDX1BBRERJTkdcdDB4MEZcbitcbisvKipcbisgKiBzdHJ1Y3QgaWVlZTgwMjExX2NpcF9jYXAgLSBDSVAgQ2FwYWJpbGl0aWVzIGVsZW1lbnRcbisgKlxuKyAqIEB2OiBUaGUgdmFsdWUgb2YgdGhlIENvbnRyb2wgSW50ZWdyaXR5IFByb3RvY29sIENhcGFiaWxpdHkgZWxlbWVudFxuKyAqL1xuK3N0cnVjdCBpZWVlODAyMTFfY2lwX2NhcCB7XG4rXHR1OCB2O1xuK30gX19wYWNrZWQ7XG4rXG4gI2VuZGlmIC8qIExJTlVYX0lFRUU4MDIxMV9IICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaCBiL2luY2x1ZGUvbmV0L2NmZzgwMjExLmhcbmluZGV4IGRjYmIwZTU1YzMyZWMuLmI1ZDk4YmEwNzIzOWIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9jZmc4MDIxMS5oXG4rKysgYi9pbmNsdWRlL25ldC9jZmc4MDIxMS5oXG5AQCAtMTgyMSw2ICsxODIxLDggQEAgc3RydWN0IHN0YV90eHB3ciB7XG4gICogQHMxZ19jYXBhOiBTMUcgY2FwYWJpbGl0aWVzIG9mIHN0YXRpb25cbiAgKiBAdWhyX2NhcGE6IFVIUiBjYXBhYmlsaXRpZXMgb2YgdGhlIHN0YXRpb25cbiAgKiBAdWhyX2NhcGFfbGVuOiB0aGUgbGVuZ3RoIG9mIHRoZSBVSFIgY2FwYWJpbGl0aWVzXG4rICogQGNpcF9jYXBfc2V0OiBJZiBDSVAgY2FwYWJpbGl0aWVzIGFyZSBwcmVzZW50LCByZXF1aXJlZCBmb3IgQ0lQIHN0YXRpb25zXG4rICogQGNpcF9jYXA6IENJUCBjYXBhYmlsaXRpZXMgb2Ygc3RhdGlvblxuICAqL1xuIHN0cnVjdCBsaW5rX3N0YXRpb25fcGFyYW1ldGVycyB7XG4gXHRjb25zdCB1OCAqbWxkX21hYztcbkBAIC0xODQyLDYgKzE4NDQsOCBAQCBzdHJ1Y3QgbGlua19zdGF0aW9uX3BhcmFtZXRlcnMge1xuIFx0Y29uc3Qgc3RydWN0IGllZWU4MDIxMV9zMWdfY2FwICpzMWdfY2FwYTtcbiBcdGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdWhyX2NhcCAqdWhyX2NhcGE7XG4gXHR1OCB1aHJfY2FwYV9sZW47XG4rXHRib29sIGNpcF9jYXBfc2V0O1xuK1x0dTggY2lwX2NhcDtcbiB9O1xuIFxuIC8qKlxuQEAgLTM0MDIsNiArMzQwNiw3IEBAIHN0cnVjdCBjZmc4MDIxMV9tbF9yZWNvbmZfcmVxIHtcbiAgKlx0ZmxhZyBpcyBub3Qgc2V0LlxuICAqIEBBU1NPQ19SRVFfU1BQX0FNU0RVOiBTUFAgQS1NU0RVcyB3aWxsIGJlIHVzZWQgb24gdGhpcyBjb25uZWN0aW9uIChpZiBhbnkpXG4gICogQEFTU09DX1JFUV9ESVNBQkxFX1VIUjogRGlzYWJsZSBVSFJcbisgKiBAQVNTT0NfUkVRX0NJUDogRW5hYmxlIENvbnRyb2wgSW50ZWdyaXR5IFByb3RvY29sXG4gICovXG4gZW51bSBjZmc4MDIxMV9hc3NvY19yZXFfZmxhZ3Mge1xuIFx0QVNTT0NfUkVRX0RJU0FCTEVfSFRcdFx0XHQ9IEJJVCgwKSxcbkBAIC0zNDEzLDYgKzM0MTgsNyBAQCBlbnVtIGNmZzgwMjExX2Fzc29jX3JlcV9mbGFncyB7XG4gXHRDT05ORUNUX1JFUV9NTE9fU1VQUE9SVFx0XHRcdD0gQklUKDYpLFxuIFx0QVNTT0NfUkVRX1NQUF9BTVNEVVx0XHRcdD0gQklUKDcpLFxuIFx0QVNTT0NfUkVRX0RJU0FCTEVfVUhSXHRcdFx0PSBCSVQoOCksXG4rXHRBU1NPQ19SRVFfQ0lQXHRcdFx0XHQ9IEJJVCg5KSxcbiB9O1xuIFxuIC8qKlxuQEAgLTUzMDAsMTQgKzUzMDYsMTcgQEAgc3RydWN0IGNmZzgwMjExX29wcyB7XG4gXHRcdFx0XHQgdW5zaWduZWQgaW50IGxpbmtfaWQpO1xuIFxuIFx0aW50XHQoKmFkZF9rZXkpKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4tXHRcdFx0ICAgaW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCwgYm9vbCBwYWlyd2lzZSxcbitcdFx0XHQgICBpbnQgbGlua19pZCwgdTgga2V5X2luZGV4LFxuK1x0XHRcdCAgIGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLFxuIFx0XHRcdCAgIGNvbnN0IHU4ICptYWNfYWRkciwgc3RydWN0IGtleV9wYXJhbXMgKnBhcmFtcyk7XG4gXHRpbnRcdCgqZ2V0X2tleSkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldixcbi1cdFx0XHQgICBpbnQgbGlua19pZCwgdTgga2V5X2luZGV4LCBib29sIHBhaXJ3aXNlLFxuK1x0XHRcdCAgIGludCBsaW5rX2lkLCB1OCBrZXlfaW5kZXgsXG4rXHRcdFx0ICAgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsXG4gXHRcdFx0ICAgY29uc3QgdTggKm1hY19hZGRyLCB2b2lkICpjb29raWUsXG4gXHRcdFx0ICAgdm9pZCAoKmNhbGxiYWNrKSh2b2lkICpjb29raWUsIHN0cnVjdCBrZXlfcGFyYW1zKikpO1xuIFx0aW50XHQoKmRlbF9rZXkpKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4tXHRcdFx0ICAgaW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCwgYm9vbCBwYWlyd2lzZSxcbitcdFx0XHQgICBpbnQgbGlua19pZCwgdTgga2V5X2luZGV4LFxuK1x0XHRcdCAgIGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLFxuIFx0XHRcdCAgIGNvbnN0IHU4ICptYWNfYWRkcik7XG4gXHRpbnRcdCgqc2V0X2RlZmF1bHRfa2V5KShzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxuIFx0XHRcdFx0ICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IGxpbmtfaWQsXG5AQCAtNjA0MSw2ICs2MDUwLDggQEAgc3RydWN0IHdpcGh5X3ZlbmRvcl9jb21tYW5kIHtcbiAgKiBAZW1sX2NhcGFiaWxpdGllczogRU1MIGNhcGFiaWxpdGllcyAoZm9yIE1MTylcbiAgKiBAbWxkX2NhcGFfYW5kX29wczogTUxEIGNhcGFiaWxpdGllcyBhbmQgb3BlcmF0aW9ucyAoZm9yIE1MTylcbiAgKiBAZXh0X21sZF9jYXBhX2FuZF9vcHM6IEV4dGVuZGVkIE1MRCBjYXBhYmlsaXRpZXMgYW5kIG9wZXJhdGlvbnMgKGZvciBNTE8pXG4rICogQGNpcF9zdXBwb3J0ZWQ6IENJUCBpcyBzdXBwb3J0ZWQgYW5kIHRoZSBjYXBhYmlsaXRpZXMgYXJlIHZhbGlkXG4rICogQGNpcF9jYXBhYmlsaXRpZXM6IENJUCBDYXBhYmlsaXRpZXMgZWxlbWVudCBjb250YWluaW5nIHRoZSBNSUMgcGFkZGluZyBkZWxheVxuICAqL1xuIHN0cnVjdCB3aXBoeV9pZnR5cGVfZXh0X2NhcGFiIHtcbiBcdGVudW0gbmw4MDIxMV9pZnR5cGUgaWZ0eXBlO1xuQEAgLTYwNTAsNiArNjA2MSw4IEBAIHN0cnVjdCB3aXBoeV9pZnR5cGVfZXh0X2NhcGFiIHtcbiBcdHUxNiBlbWxfY2FwYWJpbGl0aWVzO1xuIFx0dTE2IG1sZF9jYXBhX2FuZF9vcHM7XG4gXHR1MTYgZXh0X21sZF9jYXBhX2FuZF9vcHM7XG4rXHRib29sIGNpcF9zdXBwb3J0ZWQ7XG4rXHR1OCBjaXBfY2FwYWJpbGl0aWVzO1xuIH07XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbWFjODAyMTEuaCBiL2luY2x1ZGUvbmV0L21hYzgwMjExLmhcbmluZGV4IDlkMWZhYzZlODA4MjkuLmFhZTE0MGZkYzJiYjEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9tYWM4MDIxMS5oXG4rKysgYi9pbmNsdWRlL25ldC9tYWM4MDIxMS5oXG5AQCAtMjM5Niw2ICsyMzk2LDggQEAgc3RhdGljIGlubGluZSBib29sIGxvY2tkZXBfdmlmX3dpcGh5X211dGV4X2hlbGQoc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZilcbiAgKlx0bnVtYmVyIGdlbmVyYXRpb24gb25seVxuICAqIEBJRUVFODAyMTFfS0VZX0ZMQUdfU1BQX0FNU0RVOiBTUFAgQS1NU0RVcyBjYW4gYmUgdXNlZCB3aXRoIHRoaXMga2V5XG4gICpcdChzZXQgYnkgbWFjODAyMTEgZnJvbSB0aGUgc3RhLVx1MDAzZXNwcF9hbXNkdSBmbGFnKVxuKyAqIEBJRUVFODAyMTFfS0VZX0ZMQUdfQ0lQOiBUaGlzIGtleSBpcyB1c2VkIGZvciB0aGUgQ29udHJvbCBJbnRlZ3JpdHlcbisgKlx0UHJvdG9jb2wsIGFuZCBpcyBlaXRoZXIgYSBwYWlyd2lzZSBrZXkgb3IgYSBDSUdUSy5cbiAgKi9cbiBlbnVtIGllZWU4MDIxMV9rZXlfZmxhZ3Mge1xuIFx0SUVFRTgwMjExX0tFWV9GTEFHX0dFTkVSQVRFX0lWX01HTVRcdD0gQklUKDApLFxuQEAgLTI0MTAsNiArMjQxMiw3IEBAIGVudW0gaWVlZTgwMjExX2tleV9mbGFncyB7XG4gXHRJRUVFODAyMTFfS0VZX0ZMQUdfTk9fQVVUT19UWFx0XHQ9IEJJVCg5KSxcbiBcdElFRUU4MDIxMV9LRVlfRkxBR19HRU5FUkFURV9NTUlFXHQ9IEJJVCgxMCksXG4gXHRJRUVFODAyMTFfS0VZX0ZMQUdfU1BQX0FNU0RVXHRcdD0gQklUKDExKSxcbitcdElFRUU4MDIxMV9LRVlfRkxBR19DSVBcdFx0XHQ9IEJJVCgxMiksXG4gfTtcbiBcbiAvKipcbkBAIC0yNjMwLDYgKzI2MzMsOCBAQCBzdHJ1Y3QgaWVlZTgwMjExX3N0YV9hZ2dyZWdhdGVzIHtcbiAgKiBAZWh0X2NhcDogRUhUIGNhcGFiaWxpdGllcyBvZiB0aGlzIFNUQVxuICAqIEB1aHJfY2FwOiBVSFIgY2FwYWJpbGl0aWVzIG9mIHRoaXMgU1RBXG4gICogQHMxZ19jYXA6IFMxRyBjYXBhYmlsaXRpZXMgb2YgdGhpcyBTVEFcbisgKiBAY2lwX21pY19wYWRkaW5nOiB0aGUgTUlDIHBhZGRpbmcgcmVxdWlyZWQgYnkgdGhlIFNUQSBhcyBkZWZpbmVkIGluIGl0c1xuKyAqXHRDSVAgQ2FwYWJpbGl0aWVzIGVsZW1lbnRcbiAgKiBAYWdnOiBwZXItbGluayBkYXRhIGZvciBtdWx0aS1saW5rIGFnZ3JlZ2F0aW9uXG4gICogQGJhbmR3aWR0aDogY3VycmVudCBiYW5kd2lkdGggdGhlIHN0YXRpb24gY2FuIHJlY2VpdmUgd2l0aC5cbiAgKlx0VGhpcyBpcyB0aGUgbWluaW11bSBiZXR3ZWVuIHRoZSBwZWVyJ3MgY2FwYWJpbGl0aWVzIGFuZCBvdXIgb3duXG5AQCAtMjY1OCw2ICsyNjYzLDcgQEAgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSB7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX3N0YV9laHRfY2FwIGVodF9jYXA7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX3N0YV91aHJfY2FwIHVocl9jYXA7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX3N0YV9zMWdfY2FwIHMxZ19jYXA7XG4rXHR1OCBjaXBfbWljX3BhZGRpbmc7XG4gXG4gXHRzdHJ1Y3QgaWVlZTgwMjExX3N0YV9hZ2dyZWdhdGVzIGFnZztcbiBcbkBAIC0yNzIxLDYgKzI3MjcsNyBAQCBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhIHtcbiAgKiBAdmFsaWRfbGlua3M6IGJpdG1hcCBvZiB2YWxpZCBsaW5rcywgb3IgMCBmb3Igbm9uLU1MT1xuICAqIEBzcHBfYW1zZHU6IGluZGljYXRlcyB3aGV0aGVyIHRoZSBTVEEgdXNlcyBTUFAgQS1NU0RVIG9yIG5vdC5cbiAgKiBAZXBwX3BlZXI6IGluZGljYXRlcyB0aGF0IHRoZSBwZWVyIGlzIGFuIEVQUCBwZWVyLlxuKyAqIEBjaXA6IGluZGljYXRlcyB3aGV0aGVyIHRoZSBTVEEgdXNlcyBjb250cm9sIGZyYW1lIHByb3RlY3Rpb24gb3Igbm90LlxuICAqIEBubWk6IEZvciBOREkgc3RhdGlvbnMsIHBvaW50ZXIgdG8gdGhlIE5NSSBzdGF0aW9uIG9mIHRoZSBwZWVyLlxuICAqIEBuYW5fc2NoZWQ6IE5BTiBwZWVyIHNjaGVkdWxlIGZvciB0aGlzIHN0YXRpb24uIFZhbGlkIG9ubHkgZm9yIE5NSSBzdGF0aW9ucy5cbiAgKiBAZXh0X21sZF9jYXBhX29wczogdGhlIE1MRCdzIGV4dGVuZGVkIE1MRCBjYXBhYmlsaXRpZXMgYW5kIG9wZXJhdGlvbnNcbkBAIC0yNzQyLDYgKzI3NDksOCBAQCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSB7XG4gXHR1OCBtYXhfYW1zZHVfc3ViZnJhbWVzO1xuIFx0dTE2IGVtbF9jYXA7XG4gXG4rXHRib29sIGNpcDtcbitcbiBcdHN0cnVjdCBpZWVlODAyMTFfc3RhX2FnZ3JlZ2F0ZXMgKmN1cjtcbiBcbiBcdGJvb2wgc3VwcG9ydF9wMnBfcHM7XG5AQCAtNjI3OSw2ICs2Mjg4LDcgQEAgdm9pZCBpZWVlODAyMTFfc2V0X2tleV9yeF9zZXEoc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5Y29uZixcbiAgKiBAa2V5X2xlbjogdGhlIGtleSBkYXRhLiBNaWdodCBiZSBiaWdnZXIgdGhhbiB0aGUgYWN0dWFsIGtleSBsZW5ndGgsXG4gICpcdGJ1dCBub3Qgc21hbGxlciAoZm9yIHRoZSBkcml2ZXIgY29udmluZW5jZSlcbiAgKiBAbGlua19pZDogdGhlIGxpbmsgaWQgb2YgdGhlIGtleSBvciAtMSBmb3Igbm9uLU1MT1xuKyAqIEBjaWd0azogd2hldGhlciB0aGlzIGlzIGEgQ0lHVEtcbiAgKlxuICAqIFdoZW4gR1RLIHJla2V5aW5nIHdhcyBkb25lIHdoaWxlIHRoZSBzeXN0ZW0gd2FzIHN1c3BlbmRlZCwgKGEpIG5ld1xuICAqIGtleShzKSB3aWxsIGJlIGF2YWlsYWJsZS4gVGhlc2Ugd2lsbCBiZSBuZWVkZWQgYnkgbWFjODAyMTEgZm9yIHByb3BlclxuQEAgLTYzMDUsNyArNjMxNSw3IEBAIHZvaWQgaWVlZTgwMjExX3NldF9rZXlfcnhfc2VxKHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleWNvbmYsXG4gc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqXG4gaWVlZTgwMjExX2d0a19yZWtleV9hZGQoc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcbiBcdFx0XHR1OCBpZHgsIHU4ICprZXlfZGF0YSwgdTgga2V5X2xlbixcbi1cdFx0XHRpbnQgbGlua19pZCk7XG4rXHRcdFx0aW50IGxpbmtfaWQsIGJvb2wgY2lndGspO1xuIFxuIC8qKlxuICAqIGllZWU4MDIxMV9ndGtfcmVrZXlfbm90aWZ5IC0gbm90aWZ5IHVzZXJzcGFjZSBzdXBwbGljYW50IG9mIHJla2V5aW5nXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L25sODAyMTEuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9ubDgwMjExLmhcbmluZGV4IDAyMDM4N2Q3NjQxMjIuLjNlNmU1OWZiOGUxN2YgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvbmw4MDIxMS5oXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvbmw4MDIxMS5oXG5AQCAtMzE4NSw2ICszMTg1LDExIEBAIGVudW0gbmw4MDIxMV9jb21tYW5kcyB7XG4gICpcdFRoZSBhZ2dyZWdhdGVkIG1lc3NhZ2UgYWx3YXlzIHByZWNlZGVzIHRoZSBwZXItbGluayBtZXNzYWdlcyBmb3IgdGhlXG4gICpcdHNhbWUgc3RhdGlvbiB3aXRoaW4gYSBkdW1wIHNlcXVlbmNlLlxuICAqXG4rICogQE5MODAyMTFfQVRUUl9BU1NPQ19DSVA6IEVuYWJsZSBDb250cm9sIEludGVncml0eSBQcm90b2NvbCBmb3IgdGhlXG4rICpcdGFzc29jaWF0aW9uXG4rICogQE5MODAyMTFfQVRUUl9DSVBfQ0FQQUJJTElUSUVTOiBUaGUgQ29udHJvbCBJbnRlZ3JpdHkgUHJvdG9jb2wgZm9yIHRoZVxuKyAqXHRzdGF0aW9uLlxuKyAqXG4gICogQE5VTV9OTDgwMjExX0FUVFI6IHRvdGFsIG51bWJlciBvZiBubDgwMjExX2F0dHJzIGF2YWlsYWJsZVxuICAqIEBOTDgwMjExX0FUVFJfTUFYOiBoaWdoZXN0IGF0dHJpYnV0ZSBudW1iZXIgY3VycmVudGx5IGRlZmluZWRcbiAgKiBAX19OTDgwMjExX0FUVFJfQUZURVJfTEFTVDogaW50ZXJuYWwgdXNlXG5AQCAtMzI4MCw2ICszMjg1LDggQEAgZW51bSBubDgwMjExX2F0dHJzIHtcbiBcbiBcdE5MODAyMTFfQVRUUl9GUkVRX0ZJWEVELFxuIFxuK1x0Tkw4MDIxMV9BVFRSX0FTU09DX0NJUCxcbitcdE5MODAyMTFfQVRUUl9DSVBfQ0FQQUJJTElUSUVTLFxuIFxuIFx0Tkw4MDIxMV9BVFRSX1dJUEhZX1JFVFJZX1NIT1JULFxuIFx0Tkw4MDIxMV9BVFRSX1dJUEhZX1JFVFJZX0xPTkcsXG5AQCAtMzkzNCw2ICszOTQxLDcgQEAgZW51bSBubDgwMjExX2lmdHlwZSB7XG4gICpcdHRoYXQgc3VwcG9ydCAlTkw4MDIxMV9GRUFUVVJFX0ZVTExfQVBfQ0xJRU5UX1NUQVRFIHRvIHRyYW5zaXRpb24gYVxuICAqXHRwcmV2aW91c2x5IGFkZGVkIHN0YXRpb24gaW50byBhc3NvY2lhdGVkIHN0YXRlXG4gICogQE5MODAyMTFfU1RBX0ZMQUdfU1BQX0FNU0RVOiBzdGF0aW9uIHN1cHBvcnRzIFNQUCBBLU1TRFVzXG4rICogQE5MODAyMTFfU1RBX0ZMQUdfQ0lQOiBzdGF0aW9uIGhhcyBDb250cm9sIEludGVncml0eSBQcm90b2NvbCAoQ0lQKSBlbmFibGVkXG4gICogQE5MODAyMTFfU1RBX0ZMQUdfTUFYOiBoaWdoZXN0IHN0YXRpb24gZmxhZyBudW1iZXIgY3VycmVudGx5IGRlZmluZWRcbiAgKiBAX19OTDgwMjExX1NUQV9GTEFHX0FGVEVSX0xBU1Q6IGludGVybmFsIHVzZVxuICAqL1xuQEAgLTM5NDcsNiArMzk1NSw3IEBAIGVudW0gbmw4MDIxMV9zdGFfZmxhZ3Mge1xuIFx0Tkw4MDIxMV9TVEFfRkxBR19URExTX1BFRVIsXG4gXHROTDgwMjExX1NUQV9GTEFHX0FTU09DSUFURUQsXG4gXHROTDgwMjExX1NUQV9GTEFHX1NQUF9BTVNEVSxcbitcdE5MODAyMTFfU1RBX0ZMQUdfQ0lQLFxuIFxuIFx0Lyoga2VlcCBsYXN0ICovXG4gXHRfX05MODAyMTFfU1RBX0ZMQUdfQUZURVJfTEFTVCxcbkBAIC01Nzc4LDEyICs1Nzg3LDE2IEBAIGVudW0gbmw4MDIxMV9hdXRoX3R5cGUge1xuICAqIEBOTDgwMjExX0tFWVRZUEVfR1JPVVA6IEdyb3VwIChicm9hZGNhc3QvbXVsdGljYXN0KSBrZXlcbiAgKiBATkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFOiBQYWlyd2lzZSAodW5pY2FzdC9pbmRpdmlkdWFsKSBrZXlcbiAgKiBATkw4MDIxMV9LRVlUWVBFX1BFRVJLRVk6IFBlZXJLZXkgKERMUylcbisgKiBATkw4MDIxMV9LRVlUWVBFX0NJR1RLOiBDb250cm9sIEludGVncml0eSBHcm91cCBUZW1wb3JhbCBLZXlcbisgKlx0VGhlIGNpcGhlciBpcyBHTUFDLTI1NiBidXQgcGFzc2VkIGFzIEdDTVAtMjU2LFxuKyAqXHRzYW1lIGFzIHRoZSBwYWlyd2lzZSBrZXkgd2hlbiB1c2VkIGZvciBDSVAuXG4gICogQE5VTV9OTDgwMjExX0tFWVRZUEVTOiBudW1iZXIgb2YgZGVmaW5lZCBrZXkgdHlwZXNcbiAgKi9cbiBlbnVtIG5sODAyMTFfa2V5X3R5cGUge1xuIFx0Tkw4MDIxMV9LRVlUWVBFX0dST1VQLFxuIFx0Tkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFLFxuIFx0Tkw4MDIxMV9LRVlUWVBFX1BFRVJLRVksXG4rXHROTDgwMjExX0tFWVRZUEVfQ0lHVEssXG4gXG4gXHROVU1fTkw4MDIxMV9LRVlUWVBFU1xuIH07XG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2NmZy5jIGIvbmV0L21hYzgwMjExL2NmZy5jXG5pbmRleCAwYTkyNDdiZTI2YWZhLi4zYmY4MTYyOWNkZTM0IDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL2NmZy5jXG4rKysgYi9uZXQvbWFjODAyMTEvY2ZnLmNcbkBAIC02MTEsMTIgKzYxMSwxNSBAQCBzdGF0aWMgaW50IGllZWU4MDIxMV9zZXRfdHgoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4gfVxuIFxuIHN0YXRpYyBpbnQgaWVlZTgwMjExX2FkZF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldixcbi1cdFx0XHQgICAgIGludCBsaW5rX2lkLCB1OCBrZXlfaWR4LCBib29sIHBhaXJ3aXNlLFxuK1x0XHRcdCAgICAgaW50IGxpbmtfaWQsIHU4IGtleV9pZHgsXG4rXHRcdFx0ICAgICBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSxcbiBcdFx0XHQgICAgIGNvbnN0IHU4ICptYWNfYWRkciwgc3RydWN0IGtleV9wYXJhbXMgKnBhcmFtcylcbiB7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9XREVWX1RPX1NVQl9JRih3ZGV2KTtcbiBcdHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rID1cbiBcdFx0aWVlZTgwMjExX2xpbmtfb3JfZGVmbGluayhzZGF0YSwgbGlua19pZCwgZmFsc2UpO1xuK1x0Ym9vbCBwYWlyd2lzZSA9IHR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFO1xuK1x0Ym9vbCBjaWd0ayA9IHR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX0NJR1RLO1xuIFx0c3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS1cdTAwM2Vsb2NhbDtcbiBcdHN0cnVjdCBzdGFfaW5mbyAqc3RhID0gTlVMTDtcbiBcdHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXk7XG5AQCAtNjYwLDYgKzY2Myw5IEBAIHN0YXRpYyBpbnQgaWVlZTgwMjExX2FkZF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcbiBcdFx0a2V5LVx1MDAzZWNvbmYubGlua19pZCA9IC0xO1xuIFx0fSBlbHNlIHtcbiBcdFx0a2V5LVx1MDAzZWNvbmYubGlua19pZCA9IGxpbmstXHUwMDNlbGlua19pZDtcbitcbitcdFx0aWYgKGNpZ3RrKVxuK1x0XHRcdGtleS1cdTAwM2Vjb25mLmZsYWdzIHw9IElFRUU4MDIxMV9LRVlfRkxBR19DSVA7XG4gXHR9XG4gXG4gXHRpZiAocGFyYW1zLVx1MDAzZW1vZGUgPT0gTkw4MDIxMV9LRVlfTk9fVFgpXG5AQCAtNzM3LDEwICs3NDMsMTMgQEAgc3RhdGljIGludCBpZWVlODAyMTFfYWRkX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuIFxuIHN0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX2tleSAqXG4gaWVlZTgwMjExX2xvb2t1cF9rZXkoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGludCBsaW5rX2lkLFxuLVx0XHQgICAgIHU4IGtleV9pZHgsIGJvb2wgcGFpcndpc2UsIGNvbnN0IHU4ICptYWNfYWRkcilcbitcdFx0ICAgICB1OCBrZXlfaWR4LCBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSxcbitcdFx0ICAgICBjb25zdCB1OCAqbWFjX2FkZHIpXG4ge1xuIFx0c3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgX19tYXliZV91bnVzZWQgPSBzZGF0YS1cdTAwM2Vsb2NhbDtcbiBcdHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rID0gXHUwMDI2c2RhdGEtXHUwMDNlZGVmbGluaztcbitcdGJvb2wgcGFpcndpc2UgPSB0eXBlID09IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRTtcbitcdGJvb2wgY2lndGsgPSB0eXBlID09IE5MODAyMTFfS0VZVFlQRV9DSUdUSztcbiBcdHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXk7XG4gXG4gXHRpZiAobGlua19pZCBcdTAwM2U9IDApIHtcbkBAIC03NzAsNyArNzc5LDExIEBAIGllZWU4MDIxMV9sb29rdXBfa2V5KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBpbnQgbGlua19pZCxcbiBcdFx0XHRyZXR1cm4gd2lwaHlfZGVyZWZlcmVuY2UobG9jYWwtXHUwMDNlaHcud2lwaHksXG4gXHRcdFx0XHRcdFx0IHN0YS1cdTAwM2VwdGtba2V5X2lkeF0pO1xuIFxuLVx0XHRpZiAoIXBhaXJ3aXNlIFx1MDAyNlx1MDAyNlxuK1x0XHRpZiAoY2lndGsgXHUwMDI2XHUwMDI2IGtleV9pZHggXHUwMDNjIE5VTV9DVFJMX0tFWVMpXG4rXHRcdFx0cmV0dXJuIHdpcGh5X2RlcmVmZXJlbmNlKGxvY2FsLVx1MDAzZWh3LndpcGh5LFxuK1x0XHRcdFx0XHRcdCBsaW5rX3N0YS1cdTAwM2VjaWd0a1trZXlfaWR4XSk7XG4rXG4rXHRcdGlmICghcGFpcndpc2UgXHUwMDI2XHUwMDI2ICFjaWd0ayBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIGtleV9pZHggXHUwMDNjIE5VTV9ERUZBVUxUX0tFWVMgK1xuIFx0XHRcdCAgICAgIE5VTV9ERUZBVUxUX01HTVRfS0VZUyArXG4gXHRcdFx0ICAgICAgTlVNX0RFRkFVTFRfQkVBQ09OX0tFWVMpXG5AQCAtNzgzLDYgKzc5Niw5IEBAIGllZWU4MDIxMV9sb29rdXBfa2V5KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBpbnQgbGlua19pZCxcbiBcdGlmIChwYWlyd2lzZSBcdTAwMjZcdTAwMjYga2V5X2lkeCBcdTAwM2MgTlVNX0RFRkFVTFRfS0VZUylcbiBcdFx0cmV0dXJuIHdpcGh5X2RlcmVmZXJlbmNlKGxvY2FsLVx1MDAzZWh3LndpcGh5LCBzZGF0YS1cdTAwM2VrZXlzW2tleV9pZHhdKTtcbiBcbitcdGlmIChjaWd0aylcbitcdFx0cmV0dXJuIHdpcGh5X2RlcmVmZXJlbmNlKGxvY2FsLVx1MDAzZWh3LndpcGh5LCBsaW5rLVx1MDAzZWNpZ3RrW2tleV9pZHhdKTtcbitcbiBcdGtleSA9IHdpcGh5X2RlcmVmZXJlbmNlKGxvY2FsLVx1MDAzZWh3LndpcGh5LCBsaW5rLVx1MDAzZWd0a1trZXlfaWR4XSk7XG4gXHRpZiAoa2V5KVxuIFx0XHRyZXR1cm4ga2V5O1xuQEAgLTc5NSw4ICs4MTEsOCBAQCBpZWVlODAyMTFfbG9va3VwX2tleShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgaW50IGxpbmtfaWQsXG4gfVxuIFxuIHN0YXRpYyBpbnQgaWVlZTgwMjExX2RlbF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldixcbi1cdFx0XHQgICAgIGludCBsaW5rX2lkLCB1OCBrZXlfaWR4LCBib29sIHBhaXJ3aXNlLFxuLVx0XHRcdCAgICAgY29uc3QgdTggKm1hY19hZGRyKVxuK1x0XHRcdCAgICAgaW50IGxpbmtfaWQsIHU4IGtleV9pZHgsXG4rXHRcdFx0ICAgICBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSwgY29uc3QgdTggKm1hY19hZGRyKVxuIHtcbiBcdHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX1dERVZfVE9fU1VCX0lGKHdkZXYpO1xuIFx0c3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS1cdTAwM2Vsb2NhbDtcbkBAIC04MDQsNyArODIwLDcgQEAgc3RhdGljIGludCBpZWVlODAyMTFfZGVsX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuIFxuIFx0bG9ja2RlcF9hc3NlcnRfd2lwaHkobG9jYWwtXHUwMDNlaHcud2lwaHkpO1xuIFxuLVx0a2V5ID0gaWVlZTgwMjExX2xvb2t1cF9rZXkoc2RhdGEsIGxpbmtfaWQsIGtleV9pZHgsIHBhaXJ3aXNlLCBtYWNfYWRkcik7XG4rXHRrZXkgPSBpZWVlODAyMTFfbG9va3VwX2tleShzZGF0YSwgbGlua19pZCwga2V5X2lkeCwgdHlwZSwgbWFjX2FkZHIpO1xuIFx0aWYgKCFrZXkpXG4gXHRcdHJldHVybiAtRU5PRU5UO1xuIFxuQEAgLTgxNCw3ICs4MzAsOCBAQCBzdGF0aWMgaW50IGllZWU4MDIxMV9kZWxfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4gfVxuIFxuIHN0YXRpYyBpbnQgaWVlZTgwMjExX2dldF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldixcbi1cdFx0XHQgICAgIGludCBsaW5rX2lkLCB1OCBrZXlfaWR4LCBib29sIHBhaXJ3aXNlLFxuK1x0XHRcdCAgICAgaW50IGxpbmtfaWQsIHU4IGtleV9pZHgsXG4rXHRcdFx0ICAgICBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSxcbiBcdFx0XHQgICAgIGNvbnN0IHU4ICptYWNfYWRkciwgdm9pZCAqY29va2llLFxuIFx0XHRcdCAgICAgdm9pZCAoKmNhbGxiYWNrKSh2b2lkICpjb29raWUsXG4gXHRcdFx0XHRcdCAgICAgIHN0cnVjdCBrZXlfcGFyYW1zICpwYXJhbXMpKVxuQEAgLTgzMyw3ICs4NTAsNyBAQCBzdGF0aWMgaW50IGllZWU4MDIxMV9nZXRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4gXG4tXHRrZXkgPSBpZWVlODAyMTFfbG9va3VwX2tleShzZGF0YSwgbGlua19pZCwga2V5X2lkeCwgcGFpcndpc2UsIG1hY19hZGRyKTtcbitcdGtleSA9IGllZWU4MDIxMV9sb29rdXBfa2V5KHNkYXRhLCBsaW5rX2lkLCBrZXlfaWR4LCB0eXBlLCBtYWNfYWRkcik7XG4gXHRpZiAoIWtleSlcbiBcdFx0Z290byBvdXQ7XG4gXG5AQCAtMjI4OSw2ICsyMzA2LDggQEAgc3RhdGljIGludCBzdGFfbGlua19hcHBseV9wYXJhbWV0ZXJzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxuIFx0Y2FzZSBTVEFfTElOS19NT0RFX05FVzpcbiBcdFx0aWYgKCFwYXJhbXMtXHUwMDNlbGlua19tYWMpXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdGlmIChzdGEtXHUwMDNlc3RhLmNpcCBcdTAwMjZcdTAwMjYgIXBhcmFtcy1cdTAwM2VjaXBfY2FwX3NldClcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIFNUQV9MSU5LX01PREVfTElOS19NT0RJRlk6XG4gXHRcdGJyZWFrO1xuQEAgLTI0MTEsNiArMjQzMCw5IEBAIHN0YXRpYyBpbnQgc3RhX2xpbmtfYXBwbHlfcGFyYW1ldGVycyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCxcbiBcdFx0aWVlZTgwMjExX3MxZ19jYXBfdG9fc3RhX3MxZ19jYXAoc2RhdGEsIHBhcmFtcy1cdTAwM2VzMWdfY2FwYSxcbiBcdFx0XHRcdFx0XHQgbGlua19zdGEpO1xuIFxuK1x0aWYgKHBhcmFtcy1cdTAwM2VjaXBfY2FwX3NldClcbitcdFx0bGlua19zdGEtXHUwMDNlcHViLVx1MDAzZWNpcF9taWNfcGFkZGluZyA9IHBhcmFtcy1cdTAwM2VjaXBfY2FwO1xuK1xuIFx0c3dpdGNoIChzZGF0YS1cdTAwM2V2aWYudHlwZSkge1xuIFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9OQU46XG4gXHRjYXNlIE5MODAyMTFfSUZUWVBFX05BTl9EQVRBOlxuQEAgLTI1NzMsNiArMjU5NSw5IEBAIHN0YXRpYyBpbnQgc3RhX2FwcGx5X3BhcmFtZXRlcnMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXG4gXHRpZiAocGFyYW1zLVx1MDAzZWVtbF9jYXBfcHJlc2VudClcbiBcdFx0c3RhLVx1MDAzZXN0YS5lbWxfY2FwID0gcGFyYW1zLVx1MDAzZWVtbF9jYXA7XG4gXG4rXHRpZiAocGFyYW1zLVx1MDAzZXN0YV9mbGFnc19zZXQgXHUwMDI2IEJJVChOTDgwMjExX1NUQV9GTEFHX0NJUCkpXG4rXHRcdHN0YS1cdTAwM2VzdGEuY2lwID0gdHJ1ZTtcbitcbiBcdHJldCA9IHN0YV9saW5rX2FwcGx5X3BhcmFtZXRlcnMobG9jYWwsIHN0YSwgU1RBX0xJTktfTU9ERV9TVEFfTU9ESUZZLFxuIFx0XHRcdFx0XHRcdTAwMjZwYXJhbXMtXHUwMDNlbGlua19zdGFfcGFyYW1zKTtcbiBcdGlmIChyZXQpXG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmggYi9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaFxuaW5kZXggYTFlZjg4ZmU4NDZkZC4uZmM4NWY4YmY5NmUzYSAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oXG4rKysgYi9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaFxuQEAgLTQ3Nyw2ICs0NzcsNyBAQCBzdHJ1Y3QgaWVlZTgwMjExX21nZF9hc3NvY19kYXRhIHtcbiBcdGJvb2wgY29tZWJhY2s7IC8qIHdoZXRoZXIgdGhlIEFQIGhhcyByZXF1ZXN0ZWQgYXNzb2NpYXRpb24gY29tZWJhY2sgKi9cbiBcdGJvb2wgczFnO1xuIFx0Ym9vbCBzcHBfYW1zZHU7XG4rXHRib29sIGNpcDtcbiBcbiBcdHM4IGFzc29jX2xpbmtfaWQ7XG4gXG5AQCAtMTEwNCw2ICsxMTA1LDcgQEAgc3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEge1xuIFx0c3RydWN0IGllZWU4MDIxMV9rZXkgX19yY3UgKmd0a1tOVU1fREVGQVVMVF9LRVlTICtcbiBcdFx0XHRcdFx0TlVNX0RFRkFVTFRfTUdNVF9LRVlTICtcbiBcdFx0XHRcdFx0TlVNX0RFRkFVTFRfQkVBQ09OX0tFWVNdO1xuK1x0c3RydWN0IGllZWU4MDIxMV9rZXkgX19yY3UgKmNpZ3RrW05VTV9DVFJMX0tFWVNdO1xuIFx0c3RydWN0IGllZWU4MDIxMV9rZXkgX19yY3UgKmRlZmF1bHRfbXVsdGljYXN0X2tleTtcbiBcdHN0cnVjdCBpZWVlODAyMTFfa2V5IF9fcmN1ICpkZWZhdWx0X21nbXRfa2V5O1xuIFx0c3RydWN0IGllZWU4MDIxMV9rZXkgX19yY3UgKmRlZmF1bHRfYmVhY29uX2tleTtcbkBAIC0xODcwLDYgKzE4NzIsNyBAQCBzdHJ1Y3QgaWVlZTgwMl8xMV9lbGVtcyB7XG4gXHRjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3R0bG1fZWxlbSAqdHRsbVtJRUVFODAyMTFfVFRMTV9NQVhfQ05UXTtcbiBcdGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdWhyX2NhcCAqdWhyX2NhcDtcbiBcdGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdWhyX29wZXJhdGlvbiAqdWhyX29wZXJhdGlvbjtcbitcdGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfY2lwX2NhcCAqY2lwX2NhcDtcbiBcbiBcdC8qIG5vdCB0aGUgb3JkZXIgaW4gdGhlIHBzZCB2YWx1ZXMgaXMgcGVyIGVsZW1lbnQsIG5vdCBwZXIgY2hhbmRlZiAqL1xuIFx0c3RydWN0IGllZWU4MDIxMV9wYXJzZWRfdHBlIHRwZTtcbkBAIC0yNzc1LDYgKzI3NzgsOCBAQCBpbnQgaWVlZTgwMjExX3B1dF91aHJfY2FwKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0ICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZCk7XG4gdm9pZCBpZWVlODAyMTFfcHV0X3JlZ19jb25uKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0XHRcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbitpbnQgaWVlZTgwMjExX3B1dF9jaXBfY2FwKHN0cnVjdCBza19idWZmICpza2IsXG4rXHRcdFx0ICBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7XG4gXG4gLyogY2hhbm5lbCBtYW5hZ2VtZW50ICovXG4gYm9vbCBpZWVlODAyMTFfY2hhbmRlZl9odF9vcGVyKGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfaHRfb3BlcmF0aW9uICpodF9vcGVyLFxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9rZXkuYyBiL25ldC9tYWM4MDIxMS9rZXkuY1xuaW5kZXggZjQ1ZTc5MmFiZWRlNS4uNGM5Nzg4ZWMwYjc0ZiAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS9rZXkuY1xuKysrIGIvbmV0L21hYzgwMjExL2tleS5jXG5AQCAtMjA1LDYgKzIwNSwxMCBAQCBzdGF0aWMgaW50IGllZWU4MDIxMV9rZXlfZW5hYmxlX2h3X2FjY2VsKHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXkpXG4gXHRcdFx0ICBzdGEgPyBzdGEtXHUwMDNlc3RhLmFkZHIgOiBiY2FzdF9hZGRyLCByZXQpO1xuIFxuICBvdXRfdW5zdXBwb3J0ZWQ6XG4rXHQvKiBDb250cm9sIEludGVncml0eSBQcm90b2NvbCBjYW4gb25seSBiZSBkb25lIGluIGhhcmR3YXJlICovXG4rXHRpZiAoa2V5LVx1MDAzZWNvbmYuZmxhZ3MgXHUwMDI2IElFRUU4MDIxMV9LRVlfRkxBR19DSVApXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuIFx0c3dpdGNoIChrZXktXHUwMDNlY29uZi5jaXBoZXIpIHtcbiBcdGNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfV0VQNDA6XG4gXHRjYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDEwNDpcbkBAIC00NDAsMTEgKzQ0NCwxMyBAQCB2b2lkIGllZWU4MDIxMV9zZXRfZGVmYXVsdF9iZWFjb25fa2V5KHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rLFxuIHN0YXRpYyBpbnQgaWVlZTgwMjExX2tleV9yZXBsYWNlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0XHRcdFx0IHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rLFxuIFx0XHRcdFx0IHN0cnVjdCBzdGFfaW5mbyAqc3RhLFxuLVx0XHRcdFx0IGJvb2wgcGFpcndpc2UsXG4rXHRcdFx0XHQgZW51bSBpZWVlODAyMTFfa2V5X2ZsYWdzIGZsYWdzLFxuIFx0XHRcdFx0IHN0cnVjdCBpZWVlODAyMTFfa2V5ICpvbGQsXG4gXHRcdFx0XHQgc3RydWN0IGllZWU4MDIxMV9rZXkgKm5ldylcbiB7XG4gXHRzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGEgPSBzdGEgPyBcdTAwMjZzdGEtXHUwMDNlZGVmbGluayA6IE5VTEw7XG4rXHRib29sIHBhaXJ3aXNlID0gZmxhZ3MgXHUwMDI2IElFRUU4MDIxMV9LRVlfRkxBR19QQUlSV0lTRTtcbitcdGJvb2wgY2lwID0gZmxhZ3MgXHUwMDI2IElFRUU4MDIxMV9LRVlfRkxBR19DSVA7XG4gXHRpbnQgbGlua19pZDtcbiBcdGludCBpZHg7XG4gXHRpbnQgcmV0ID0gMDtcbkBAIC01MzUsNiArNTQxLDggQEAgc3RhdGljIGludCBpZWVlODAyMTFfa2V5X3JlcGxhY2Uoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4gXHRcdFx0aWYgKG5ldyBcdTAwMjZcdTAwMjZcbiBcdFx0XHQgICAgIShuZXctXHUwMDNlY29uZi5mbGFncyBcdTAwMjYgSUVFRTgwMjExX0tFWV9GTEFHX05PX0FVVE9fVFgpKVxuIFx0XHRcdFx0X2llZWU4MDIxMV9zZXRfdHhfa2V5KG5ldywgdHJ1ZSk7XG4rXHRcdH0gZWxzZSBpZiAoY2lwKSB7XG4rXHRcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKGxpbmtfc3RhLVx1MDAzZWNpZ3RrW2lkeF0sIG5ldyk7XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKGxpbmtfc3RhLVx1MDAzZWd0a1tpZHhdLCBuZXcpO1xuIFx0XHR9XG5AQCAtNTY5LDYgKzU3Nyw4IEBAIHN0YXRpYyBpbnQgaWVlZTgwMjExX2tleV9yZXBsYWNlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFxuIFx0XHRpZiAoaXNfd2VwIHx8IHBhaXJ3aXNlKVxuIFx0XHRcdHJjdV9hc3NpZ25fcG9pbnRlcihzZGF0YS1cdTAwM2VrZXlzW2lkeF0sIG5ldyk7XG4rXHRcdGVsc2UgaWYgKGNpcClcbitcdFx0XHRyY3VfYXNzaWduX3BvaW50ZXIobGluay1cdTAwM2VjaWd0a1tpZHhdLCBuZXcpO1xuIFx0XHRlbHNlXG4gXHRcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKGxpbmstXHUwMDNlZ3RrW2lkeF0sIG5ldyk7XG4gXG5AQCAtODgzLDYgKzg5MywxMCBAQCBpbnQgaWVlZTgwMjExX2tleV9saW5rKHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXksXG4gXHRcdFx0cmV0ID0gLUVPUE5PVFNVUFA7XG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbitcbitcdFx0LyogU2V0IENJUCBmbGFnIGlmIGVuYWJsZWQgZm9yIHRoZSBzdGF0aW9uICovXG4rXHRcdGlmIChzdGEtXHUwMDNlc3RhLmNpcClcbitcdFx0XHRrZXktXHUwMDNlY29uZi5mbGFncyB8PSBJRUVFODAyMTFfS0VZX0ZMQUdfQ0lQO1xuIFx0fSBlbHNlIGlmIChzdGEpIHtcbiBcdFx0c3RydWN0IGxpbmtfc3RhX2luZm8gKmxpbmtfc3RhID0gXHUwMDI2c3RhLVx1MDAzZWRlZmxpbms7XG4gXHRcdGludCBsaW5rX2lkID0ga2V5LVx1MDAzZWNvbmYubGlua19pZDtcbkBAIC04OTYsMTUgKzkxMCwyNSBAQCBpbnQgaWVlZTgwMjExX2tleV9saW5rKHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXksXG4gXHRcdFx0fVxuIFx0XHR9XG4gXG4tXHRcdG9sZF9rZXkgPSB3aXBoeV9kZXJlZmVyZW5jZShzZGF0YS1cdTAwM2Vsb2NhbC1cdTAwM2Vody53aXBoeSxcbi1cdFx0XHRcdFx0ICAgIGxpbmtfc3RhLVx1MDAzZWd0a1tpZHhdKTtcbi1cdH0gZWxzZSB7XG4tXHRcdGlmIChpZHggXHUwMDNjIE5VTV9ERUZBVUxUX0tFWVMpXG4rXHRcdGlmIChrZXktXHUwMDNlY29uZi5mbGFncyBcdTAwMjYgSUVFRTgwMjExX0tFWV9GTEFHX0NJUClcbiBcdFx0XHRvbGRfa2V5ID0gd2lwaHlfZGVyZWZlcmVuY2Uoc2RhdGEtXHUwMDNlbG9jYWwtXHUwMDNlaHcud2lwaHksXG4tXHRcdFx0XHRcdFx0ICAgIHNkYXRhLVx1MDAzZWtleXNbaWR4XSk7XG4tXHRcdGlmICghb2xkX2tleSlcbitcdFx0XHRcdFx0XHQgICAgbGlua19zdGEtXHUwMDNlY2lndGtbaWR4XSk7XG4rXHRcdGVsc2VcbiBcdFx0XHRvbGRfa2V5ID0gd2lwaHlfZGVyZWZlcmVuY2Uoc2RhdGEtXHUwMDNlbG9jYWwtXHUwMDNlaHcud2lwaHksXG4tXHRcdFx0XHRcdFx0ICAgIGxpbmstXHUwMDNlZ3RrW2lkeF0pO1xuK1x0XHRcdFx0XHRcdCAgICBsaW5rX3N0YS1cdTAwM2VndGtbaWR4XSk7XG4rXHR9IGVsc2Uge1xuK1x0XHRpZiAoa2V5LVx1MDAzZWNvbmYuZmxhZ3MgXHUwMDI2IElFRUU4MDIxMV9LRVlfRkxBR19DSVApIHtcbitcdFx0XHRvbGRfa2V5ID0gd2lwaHlfZGVyZWZlcmVuY2Uoc2RhdGEtXHUwMDNlbG9jYWwtXHUwMDNlaHcud2lwaHksXG4rXHRcdFx0XHRcdFx0ICAgIGxpbmstXHUwMDNlY2lndGtbaWR4XSk7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0aWYgKGlkeCBcdTAwM2MgTlVNX0RFRkFVTFRfS0VZUylcbitcdFx0XHRcdG9sZF9rZXkgPSB3aXBoeV9kZXJlZmVyZW5jZShzZGF0YS1cdTAwM2Vsb2NhbC1cdTAwM2Vody53aXBoeSxcbitcdFx0XHRcdFx0XHRcdCAgICBzZGF0YS1cdTAwM2VrZXlzW2lkeF0pO1xuK1xuK1x0XHRcdGlmICghb2xkX2tleSlcbitcdFx0XHRcdG9sZF9rZXkgPSB3aXBoeV9kZXJlZmVyZW5jZShzZGF0YS1cdTAwM2Vsb2NhbC1cdTAwM2Vody53aXBoeSxcbitcdFx0XHRcdFx0XHRcdCAgICBsaW5rLVx1MDAzZWd0a1tpZHhdKTtcbitcdFx0fVxuIFx0fVxuIFxuIFx0LyogTm9uLXBhaXJ3aXNlIGtleXMgbXVzdCBhbHNvIG5vdCBzd2l0Y2ggdGhlIGNpcGhlciBvbiByZWtleSAqL1xuQEAgLTkzOCw5ICs5NjIsMTcgQEAgaW50IGllZWU4MDIxMV9rZXlfbGluayhzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5LFxuIFx0aWYgKHN0YSBcdTAwMjZcdTAwMjYgc3RhLVx1MDAzZXN0YS5zcHBfYW1zZHUpXG4gXHRcdGtleS1cdTAwM2Vjb25mLmZsYWdzIHw9IElFRUU4MDIxMV9LRVlfRkxBR19TUFBfQU1TRFU7XG4gXG4rXHQvKiBBIENJUCByZWxhdGVkIGtleSBtdXN0IGJlIEdDTVAtMjU2IChyZWFsbHkgR01BQy0yNTYpICovXG4rXHRpZiAoKGtleS1cdTAwM2Vjb25mLmZsYWdzIFx1MDAyNiBJRUVFODAyMTFfS0VZX0ZMQUdfQ0lQKSBcdTAwMjZcdTAwMjZcbitcdCAgICBrZXktXHUwMDNlY29uZi5jaXBoZXIgIT0gV0xBTl9DSVBIRVJfU1VJVEVfR0NNUF8yNTYpIHtcbitcdFx0cmV0ID0gLUVJTlZBTDtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4gXHRpbmNyZW1lbnRfdGFpbHJvb21fbmVlZF9jb3VudChzZGF0YSk7XG4gXG4tXHRyZXQgPSBpZWVlODAyMTFfa2V5X3JlcGxhY2Uoc2RhdGEsIGxpbmssIHN0YSwgcGFpcndpc2UsIG9sZF9rZXksIGtleSk7XG4rXHRyZXQgPSBpZWVlODAyMTFfa2V5X3JlcGxhY2Uoc2RhdGEsIGxpbmssIHN0YSwga2V5LVx1MDAzZWNvbmYuZmxhZ3MsXG4rXHRcdFx0XHQgICAgb2xkX2tleSwga2V5KTtcbiBcbiBcdGlmICghcmV0KSB7XG4gXHRcdGllZWU4MDIxMV9kZWJ1Z2ZzX2tleV9hZGQoa2V5KTtcbkBAIC05NjYsOCArOTk4LDcgQEAgdm9pZCBpZWVlODAyMTFfa2V5X2ZyZWUoc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSwgYm9vbCBkZWxheV90YWlscm9vbSlcbiBcdCAqL1xuIFx0aWYgKGtleS1cdTAwM2VzZGF0YSlcbiBcdFx0aWVlZTgwMjExX2tleV9yZXBsYWNlKGtleS1cdTAwM2VzZGF0YSwgTlVMTCwga2V5LVx1MDAzZXN0YSxcbi1cdFx0XHRcdCAgICAgIGtleS1cdTAwM2Vjb25mLmZsYWdzIFx1MDAyNiBJRUVFODAyMTFfS0VZX0ZMQUdfUEFJUldJU0UsXG4tXHRcdFx0XHQgICAgICBrZXksIE5VTEwpO1xuK1x0XHRcdFx0ICAgICAga2V5LVx1MDAzZWNvbmYuZmxhZ3MsIGtleSwgTlVMTCk7XG4gXHRpZWVlODAyMTFfa2V5X2Rlc3Ryb3koa2V5LCBkZWxheV90YWlscm9vbSk7XG4gfVxuIFxuQEAgLTEwOTgsOCArMTEyOSw3IEBAIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9mcmVlX2tleXNfaWZhY2Uoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoa2V5LCB0bXAsIFx1MDAyNnNkYXRhLVx1MDAzZWtleV9saXN0LCBsaXN0KSB7XG4gXHRcdGllZWU4MDIxMV9rZXlfcmVwbGFjZShrZXktXHUwMDNlc2RhdGEsIE5VTEwsIGtleS1cdTAwM2VzdGEsXG4tXHRcdFx0XHQgICAgICBrZXktXHUwMDNlY29uZi5mbGFncyBcdTAwMjYgSUVFRTgwMjExX0tFWV9GTEFHX1BBSVJXSVNFLFxuLVx0XHRcdFx0ICAgICAga2V5LCBOVUxMKTtcbitcdFx0XHRcdCAgICAgIGtleS1cdTAwM2Vjb25mLmZsYWdzLCBrZXksIE5VTEwpO1xuIFx0XHRsaXN0X2FkZF90YWlsKFx1MDAyNmtleS1cdTAwM2VsaXN0LCBrZXlzKTtcbiBcdH1cbiBcbkBAIC0xMTE5LDggKzExNDksNyBAQCB2b2lkIGllZWU4MDIxMV9yZW1vdmVfbGlua19rZXlzKHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rLFxuIFx0XHRpZiAoa2V5LVx1MDAzZWNvbmYubGlua19pZCAhPSBsaW5rLVx1MDAzZWxpbmtfaWQpXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdGllZWU4MDIxMV9rZXlfcmVwbGFjZShrZXktXHUwMDNlc2RhdGEsIGxpbmssIGtleS1cdTAwM2VzdGEsXG4tXHRcdFx0XHQgICAgICBrZXktXHUwMDNlY29uZi5mbGFncyBcdTAwMjYgSUVFRTgwMjExX0tFWV9GTEFHX1BBSVJXSVNFLFxuLVx0XHRcdFx0ICAgICAga2V5LCBOVUxMKTtcbitcdFx0XHRcdCAgICAgIGtleS1cdTAwM2Vjb25mLmZsYWdzLCBrZXksIE5VTEwpO1xuIFx0XHRsaXN0X2FkZF90YWlsKFx1MDAyNmtleS1cdTAwM2VsaXN0LCBrZXlzKTtcbiBcdH1cbiB9XG5AQCAtMTE5Niw4ICsxMjI1LDE3IEBAIHZvaWQgaWVlZTgwMjExX2ZyZWVfc3RhX2tleXMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXG4gXHRcdGlmICgha2V5KVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRpZWVlODAyMTFfa2V5X3JlcGxhY2Uoa2V5LVx1MDAzZXNkYXRhLCBOVUxMLCBrZXktXHUwMDNlc3RhLFxuLVx0XHRcdFx0ICAgICAga2V5LVx1MDAzZWNvbmYuZmxhZ3MgXHUwMDI2IElFRUU4MDIxMV9LRVlfRkxBR19QQUlSV0lTRSxcbi1cdFx0XHRcdCAgICAgIGtleSwgTlVMTCk7XG4rXHRcdFx0XHQgICAgICBrZXktXHUwMDNlY29uZi5mbGFncywga2V5LCBOVUxMKTtcbitcdFx0X19pZWVlODAyMTFfa2V5X2Rlc3Ryb3koa2V5LCBrZXktXHUwMDNlc2RhdGEtXHUwMDNldmlmLnR5cGUgPT1cbitcdFx0XHRcdFx0Tkw4MDIxMV9JRlRZUEVfU1RBVElPTik7XG4rXHR9XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHN0YS1cdTAwM2VkZWZsaW5rLmNpZ3RrKTsgaSsrKSB7XG4rXHRcdGtleSA9IHdpcGh5X2RlcmVmZXJlbmNlKGxvY2FsLVx1MDAzZWh3LndpcGh5LCBzdGEtXHUwMDNlZGVmbGluay5jaWd0a1tpXSk7XG4rXHRcdGlmICgha2V5KVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRpZWVlODAyMTFfa2V5X3JlcGxhY2Uoa2V5LVx1MDAzZXNkYXRhLCBOVUxMLCBrZXktXHUwMDNlc3RhLFxuK1x0XHRcdFx0ICAgICAga2V5LVx1MDAzZWNvbmYuZmxhZ3MsIGtleSwgTlVMTCk7XG4gXHRcdF9faWVlZTgwMjExX2tleV9kZXN0cm95KGtleSwga2V5LVx1MDAzZXNkYXRhLVx1MDAzZXZpZi50eXBlID09XG4gXHRcdFx0XHRcdE5MODAyMTFfSUZUWVBFX1NUQVRJT04pO1xuIFx0fVxuQEAgLTEyMDcsOCArMTI0NSw3IEBAIHZvaWQgaWVlZTgwMjExX2ZyZWVfc3RhX2tleXMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXG4gXHRcdGlmICgha2V5KVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRpZWVlODAyMTFfa2V5X3JlcGxhY2Uoa2V5LVx1MDAzZXNkYXRhLCBOVUxMLCBrZXktXHUwMDNlc3RhLFxuLVx0XHRcdFx0ICAgICAga2V5LVx1MDAzZWNvbmYuZmxhZ3MgXHUwMDI2IElFRUU4MDIxMV9LRVlfRkxBR19QQUlSV0lTRSxcbi1cdFx0XHRcdCAgICAgIGtleSwgTlVMTCk7XG4rXHRcdFx0XHQgICAgICBrZXktXHUwMDNlY29uZi5mbGFncywga2V5LCBOVUxMKTtcbiBcdFx0X19pZWVlODAyMTFfa2V5X2Rlc3Ryb3koa2V5LCBrZXktXHUwMDNlc2RhdGEtXHUwMDNldmlmLnR5cGUgPT1cbiBcdFx0XHRcdFx0Tkw4MDIxMV9JRlRZUEVfU1RBVElPTik7XG4gXHR9XG5AQCAtMTM2Niw3ICsxNDAzLDcgQEAgRVhQT1JUX1NZTUJPTF9HUEwoaWVlZTgwMjExX3NldF9rZXlfcnhfc2VxKTtcbiBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICpcbiBpZWVlODAyMTFfZ3RrX3Jla2V5X2FkZChzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxuIFx0XHRcdHU4IGlkeCwgdTggKmtleV9kYXRhLCB1OCBrZXlfbGVuLFxuLVx0XHRcdGludCBsaW5rX2lkKVxuK1x0XHRcdGludCBsaW5rX2lkLCBib29sIGNpZ3RrKVxuIHtcbiBcdHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gdmlmX3RvX3NkYXRhKHZpZik7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLVx1MDAzZWxvY2FsO1xuQEAgLTEzOTAsMTAgKzE0MjcsMjAgQEAgaWVlZTgwMjExX2d0a19yZWtleV9hZGQoc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcbiBcdFx0ICAgIE5VTV9ERUZBVUxUX0JFQUNPTl9LRVlTKSlcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4gXG4tXHRwcmV2X2tleSA9IHdpcGh5X2RlcmVmZXJlbmNlKGxvY2FsLVx1MDAzZWh3LndpcGh5LFxuLVx0XHRcdFx0ICAgICBsaW5rX2RhdGEtXHUwMDNlZ3RrW2lkeF0pO1xuK1x0aWYgKFdBUk5fT04oY2lndGsgXHUwMDI2XHUwMDI2IGlkeCBcdTAwM2U9IE5VTV9DVFJMX0tFWVMpKVxuK1x0XHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcbitcbitcdGlmIChjaWd0aylcbitcdFx0cHJldl9rZXkgPSB3aXBoeV9kZXJlZmVyZW5jZShsb2NhbC1cdTAwM2Vody53aXBoeSxcbitcdFx0XHRcdFx0ICAgICBsaW5rX2RhdGEtXHUwMDNlY2lndGtbaWR4XSk7XG4rXHRlbHNlXG4rXHRcdHByZXZfa2V5ID0gd2lwaHlfZGVyZWZlcmVuY2UobG9jYWwtXHUwMDNlaHcud2lwaHksXG4rXHRcdFx0XHRcdCAgICAgbGlua19kYXRhLVx1MDAzZWd0a1tpZHhdKTtcbiBcdGlmICghcHJldl9rZXkpIHtcbi1cdFx0aWYgKGlkeCBcdTAwM2MgTlVNX0RFRkFVTFRfS0VZUykge1xuK1x0XHRpZiAoY2lndGspIHtcbitcdFx0XHRwcmV2X2tleSA9IHdpcGh5X2RlcmVmZXJlbmNlKGxvY2FsLVx1MDAzZWh3LndpcGh5LFxuK1x0XHRcdFx0XHRcdCAgICAgbGlua19kYXRhLVx1MDAzZWNpZ3RrW2lkeCBeIDFdKTtcbitcdFx0fSBlbHNlIGlmIChpZHggXHUwMDNjIE5VTV9ERUZBVUxUX0tFWVMpIHtcbiBcdFx0XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgTlVNX0RFRkFVTFRfS0VZUzsgaSsrKSB7XG4gXHRcdFx0XHRpZiAoaSA9PSBpZHgpXG4gXHRcdFx0XHRcdGNvbnRpbnVlO1xuQEAgLTE0MjQsNiArMTQ3MSw5IEBAIGllZWU4MDIxMV9ndGtfcmVrZXlfYWRkKHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXG4gXHRpZiAoc2RhdGEtXHUwMDNldS5tZ2QubWZwICE9IElFRUU4MDIxMV9NRlBfRElTQUJMRUQpXG4gXHRcdGtleS1cdTAwM2Vjb25mLmZsYWdzIHw9IElFRUU4MDIxMV9LRVlfRkxBR19SWF9NR01UO1xuIFxuK1x0aWYgKHByZXZfa2V5LVx1MDAzZWNvbmYuZmxhZ3MgXHUwMDI2IElFRUU4MDIxMV9LRVlfRkxBR19DSVApXG4rXHRcdGtleS1cdTAwM2Vjb25mLmZsYWdzIHw9IElFRUU4MDIxMV9LRVlfRkxBR19DSVA7XG4rXG4gXHRrZXktXHUwMDNlY29uZi5saW5rX2lkID0gbGlua19kYXRhLVx1MDAzZWxpbmtfaWQ7XG4gXG4gXHRlcnIgPSBpZWVlODAyMTFfa2V5X2xpbmsoa2V5LCBsaW5rX2RhdGEsIE5VTEwpO1xuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9rZXkuaCBiL25ldC9tYWM4MDIxMS9rZXkuaFxuaW5kZXggODI2ZTRlOTM4N2M1NS4uYzg1OTkyNDkzYWZkMSAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS9rZXkuaFxuKysrIGIvbmV0L21hYzgwMjExL2tleS5oXG5AQCAtMiw3ICsyLDcgQEBcbiAvKlxuICAqIENvcHlyaWdodCAyMDAyLTIwMDQsIEluc3RhbnQ4MDIgTmV0d29ya3MsIEluYy5cbiAgKiBDb3B5cmlnaHQgMjAwNSwgRGV2aWNlc2NhcGUgU29mdHdhcmUsIEluYy5cbi0gKiBDb3B5cmlnaHQgKEMpIDIwMTksIDIwMjItMjAyMyBJbnRlbCBDb3Jwb3JhdGlvblxuKyAqIENvcHlyaWdodCAoQykgMjAxOSwgMjAyMi0yMDIzLCAyMDI2IEludGVsIENvcnBvcmF0aW9uXG4gICovXG4gXG4gI2lmbmRlZiBJRUVFODAyMTFfS0VZX0hcbkBAIC0xOSw2ICsxOSw3IEBAXG4gI2RlZmluZSBOVU1fREVGQVVMVF9LRVlTIDRcbiAjZGVmaW5lIE5VTV9ERUZBVUxUX01HTVRfS0VZUyAyXG4gI2RlZmluZSBOVU1fREVGQVVMVF9CRUFDT05fS0VZUyAyXG4rI2RlZmluZSBOVU1fQ1RSTF9LRVlTIDJcbiAjZGVmaW5lIElOVkFMSURfUFRLX0tFWUlEWCAyIC8qIEtleWlkeCBhbHdheXMgcG9pbnRpbmcgdG8gYSBOVUxMIGtleSBmb3IgUFRLICovXG4gXG4gc3RydWN0IGllZWU4MDIxMV9sb2NhbDtcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvbWxtZS5jIGIvbmV0L21hYzgwMjExL21sbWUuY1xuaW5kZXggZjUxMTY3ZjBmYzQ2ZC4uMzRkNzEzYzlhNjkxNCAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS9tbG1lLmNcbisrKyBiL25ldC9tYWM4MDIxMS9tbG1lLmNcbkBAIC0yMzM3LDYgKzIzMzcsMTAgQEAgaWVlZTgwMjExX2FkZF9saW5rX2VsZW1zKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0XHRpZWVlODAyMTFfcHV0X2VodF9jYXAoc2tiLCBzZGF0YSwgc2JhbmQsXG4gXHRcdFx0XHQgICAgICBcdTAwMjZhc3NvY19kYXRhLVx1MDAzZWxpbmtbbGlua19pZF0uY29ubik7XG4gXG4rXHQvKiBJbnNlcnQgQ0lQIG9ubHkgb24gdGhlIGFzc29jIGxpbmsgKGl0IHdpbGwgYmUgaW5oZXJpdGVkKSAqL1xuK1x0aWYgKGxpbmtfaWQgPT0gYXNzb2NfZGF0YS1cdTAwM2Vhc3NvY19saW5rX2lkIFx1MDAyNlx1MDAyNiBhc3NvY19kYXRhLVx1MDAzZWNpcClcbitcdFx0aWVlZTgwMjExX3B1dF9jaXBfY2FwKHNrYiwgc2RhdGEpO1xuK1xuIFx0aWYgKGFzc29jX2RhdGEtXHUwMDNlbGlua1tsaW5rX2lkXS5jb25uLm1vZGUgXHUwMDNlPSBJRUVFODAyMTFfQ09OTl9NT0RFX1VIUilcbiBcdFx0aWVlZTgwMjExX3B1dF91aHJfY2FwKHNrYiwgc2RhdGEsIHNiYW5kKTtcbiBcbkBAIC0yNjEzLDcgKzI2MTcsOCBAQCBzdGF0aWMgaW50IGllZWU4MDIxMV9zZW5kX2Fzc29jKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKVxuIFx0ICAgICAgIGFzc29jX2RhdGEtXHUwMDNlaWVfbGVuICsgLyogZXh0cmEgSUVzICovXG4gXHQgICAgICAgKGFzc29jX2RhdGEtXHUwMDNlZmlsc19rZWtfbGVuID8gMTYgLyogQUVTLVNJViAqLyA6IDApICtcbiBcdCAgICAgICA5IC8qIFdNTSAqLyArXG4tXHQgICAgICAgNCAvKiByZWd1bGF0b3J5IGNvbm5lY3Rpdml0eSwgaWYgNiBHSHogaXMgc3VwcG9ydGVkICovO1xuK1x0ICAgICAgIDQgLyogcmVndWxhdG9yeSBjb25uZWN0aXZpdHksIGlmIDYgR0h6IGlzIHN1cHBvcnRlZCAqLyArXG4rXHQgICAgICAgKGFzc29jX2RhdGEtXHUwMDNlY2lwID8gNCAvKiBDSVAgY2FwYWJpbGl0aWVzICovIDogMCk7XG4gXG4gXHRmb3IgKGxpbmtfaWQgPSAwOyBsaW5rX2lkIFx1MDAzYyBJRUVFODAyMTFfTUxEX01BWF9OVU1fTElOS1M7IGxpbmtfaWQrKykge1xuIFx0XHRzdHJ1Y3QgY2ZnODAyMTFfYnNzICpjYnNzID0gYXNzb2NfZGF0YS1cdTAwM2VsaW5rW2xpbmtfaWRdLmJzcztcbkBAIC02Mjc0LDYgKzYyNzksMTkgQEAgc3RhdGljIGJvb2wgaWVlZTgwMjExX2Fzc29jX2NvbmZpZ19saW5rKHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rLFxuIFx0XHQvKiBUT0RPOiBPUEVOOiB3aGF0IGhhcHBlbnMgaWYgQlNTIGNvbG9yIGRpc2FibGUgaXMgc2V0PyAqL1xuIFx0fVxuIFxuK1x0aWYgKGFzc29jX2RhdGEtXHUwMDNlY2lwKSB7XG4rXHRcdGlmIChlbGVtcy1cdTAwM2VjaXBfY2FwKSB7XG4rXHRcdFx0bGlua19zdGEtXHUwMDNlcHViLVx1MDAzZWNpcF9taWNfcGFkZGluZyA9XG4rXHRcdFx0XHR1OF9nZXRfYml0cyhlbGVtcy1cdTAwM2VjaXBfY2FwLVx1MDAzZXYsXG4rXHRcdFx0XHRcdCAgICBXTEFOX0NJUF9DQVBBX01JQ19QQURESU5HKTtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRzZGF0YV9pbmZvKHNkYXRhLFxuK1x0XHRcdFx0ICAgXCJDSVAgQ2FwYWJpbGl0aWVzIG5vdCBpbmNsdWRlZCBpbiBhc3NvY2lhdGlvbiByZXNwb25zZVxcblwiKTtcbitcdFx0XHRyZXQgPSBmYWxzZTtcbitcdFx0XHRnb3RvIG91dDtcbitcdFx0fVxuK1x0fVxuK1xuIFx0aWYgKGNic3MtXHUwMDNldHJhbnNtaXR0ZWRfYnNzKSB7XG4gXHRcdGJzc19jb25mLVx1MDAzZW5vbnRyYW5zbWl0dGVkID0gdHJ1ZTtcbiBcdFx0ZXRoZXJfYWRkcl9jb3B5KGJzc19jb25mLVx1MDAzZXRyYW5zbWl0dGVyX2Jzc2lkLFxuQEAgLTcwMDAsNiArNzAxOCw3IEBAIHN0YXRpYyBib29sIGllZWU4MDIxMV9hc3NvY19zdWNjZXNzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0XHRnb3RvIG91dF9lcnI7XG4gXG4gXHRzdGEtXHUwMDNlc3RhLnNwcF9hbXNkdSA9IGFzc29jX2RhdGEtXHUwMDNlc3BwX2Ftc2R1O1xuK1x0c3RhLVx1MDAzZXN0YS5jaXAgPSBhc3NvY19kYXRhLVx1MDAzZWNpcDtcbiBcbiBcdGlmIChpZWVlODAyMTFfdmlmX2lzX21sZChcdTAwMjZzZGF0YS1cdTAwM2V2aWYpKSB7XG4gXHRcdGlmICghZWxlbXMtXHUwMDNlbWxfYmFzaWMpXG5AQCAtMTA1MzgsNiArMTA1NTcsNyBAQCBpbnQgaWVlZTgwMjExX21nZF9hc3NvYyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiBcdH1cbiBcbiBcdGFzc29jX2RhdGEtXHUwMDNlc3BwX2Ftc2R1ID0gcmVxLVx1MDAzZWZsYWdzIFx1MDAyNiBBU1NPQ19SRVFfU1BQX0FNU0RVO1xuK1x0YXNzb2NfZGF0YS1cdTAwM2VjaXAgPSByZXEtXHUwMDNlZmxhZ3MgXHUwMDI2IEFTU09DX1JFUV9DSVA7XG4gXG4gXHRpZiAoaWZtZ2QtXHUwMDNlYXV0aF9kYXRhIFx1MDAyNlx1MDAyNiAhaWZtZ2QtXHUwMDNlYXV0aF9kYXRhLVx1MDAzZWRvbmUpIHtcbiBcdFx0ZXJyID0gLUVCVVNZO1xuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9wYXJzZS5jIGIvbmV0L21hYzgwMjExL3BhcnNlLmNcbmluZGV4IGNiMmJlMTY3Y2RlNzkuLjNiNjZjYTdkN2E1YzIgMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvcGFyc2UuY1xuKysrIGIvbmV0L21hYzgwMjExL3BhcnNlLmNcbkBAIC0yMDUsNiArMjA1LDEwIEBAIGllZWU4MDIxMV9wYXJzZV9leHRlbnNpb25fZWxlbWVudCh1MzIgKmNyYyxcbiBcdFx0XHRlbGVtcy1cdTAwM2V0dGxtX251bSsrO1xuIFx0XHR9XG4gXHRcdGJyZWFrO1xuK1x0Y2FzZSBXTEFOX0VJRF9FWFRfQ0lQX0NBUEE6XG4rXHRcdGlmIChsZW4gXHUwMDNlPSBzaXplb2YoKmVsZW1zLVx1MDAzZWNpcF9jYXApKVxuK1x0XHRcdGVsZW1zLVx1MDAzZWNpcF9jYXAgPSBkYXRhO1xuK1x0XHRicmVhaztcbiBcdGNhc2UgV0xBTl9FSURfRVhUX1VIUl9PUEVSOlxuIFx0XHRpZiAocGFyYW1zLVx1MDAzZW1vZGUgXHUwMDNjIElFRUU4MDIxMV9DT05OX01PREVfVUhSKVxuIFx0XHRcdGJyZWFrO1xuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9zdGFfaW5mby5oIGIvbmV0L21hYzgwMjExL3N0YV9pbmZvLmhcbmluZGV4IGVlMGQzMjg3N2M1YjQuLmY0MDlmNmEzYWZhMWYgMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvc3RhX2luZm8uaFxuKysrIGIvbmV0L21hYzgwMjExL3N0YV9pbmZvLmhcbkBAIC00ODUsNiArNDg1LDcgQEAgc3RydWN0IGllZWU4MDIxMV9mcmFnbWVudF9jYWNoZSB7XG4gICogQGxpbmtfaGFzaF9ub2RlOiBoYXNoIG5vZGUgZm9yIHJoYXNodGFibGVcbiAgKiBAc3RhOiBQb2ludHMgdG8gdGhlIFNUQSBpbmZvXG4gICogQGd0azogZ3JvdXAga2V5cyBuZWdvdGlhdGVkIHdpdGggdGhpcyBzdGF0aW9uLCBpZiBhbnlcbisgKiBAY2lndGs6IGNvbnRyb2wgaW50ZWdyaXR5IGdyb3VwIGtleXMgbmVnb3RpYXRlZCB3aXRoIHRoaXMgc3RhdGlvbiwgaWYgYW55XG4gICogQHR4X3N0YXRzOiBUWCBzdGF0aXN0aWNzXG4gICogQHR4X3N0YXRzLnBhY2tldHM6ICMgb2YgcGFja2V0cyB0cmFuc21pdHRlZFxuICAqIEB0eF9zdGF0cy5ieXRlczogIyBvZiBieXRlcyBpbiBhbGwgcGFja2V0cyB0cmFuc21pdHRlZFxuQEAgLTUzNSw2ICs1MzYsNyBAQCBzdHJ1Y3QgbGlua19zdGFfaW5mbyB7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2tleSBfX3JjdSAqZ3RrW05VTV9ERUZBVUxUX0tFWVMgK1xuIFx0XHRcdFx0XHROVU1fREVGQVVMVF9NR01UX0tFWVMgK1xuIFx0XHRcdFx0XHROVU1fREVGQVVMVF9CRUFDT05fS0VZU107XG4rXHRzdHJ1Y3QgaWVlZTgwMjExX2tleSBfX3JjdSAqY2lndGtbTlVNX0NUUkxfS0VZU107XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX3N0YV9yeF9zdGF0cyBfX3BlcmNwdSAqcGNwdV9yeF9zdGF0cztcbiBcbiBcdC8qIFVwZGF0ZWQgZnJvbSBSWCBwYXRoIG9ubHksIG5vIGxvY2tpbmcgcmVxdWlyZW1lbnRzICovXG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3V0aWwuYyBiL25ldC9tYWM4MDIxMS91dGlsLmNcbmluZGV4IGE5NjA3OGE2YmZhMjkuLjgzMDNmNjI0YjdmNjIgMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvdXRpbC5jXG4rKysgYi9uZXQvbWFjODAyMTEvdXRpbC5jXG5AQCAtNDY4MCw2ICs0NjgwLDI1IEBAIGludCBpZWVlODAyMTFfcHV0X3Vocl9jYXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHJldHVybiAwO1xuIH1cbiBcbitpbnQgaWVlZTgwMjExX3B1dF9jaXBfY2FwKHN0cnVjdCBza19idWZmICpza2IsXG4rXHRcdFx0ICBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcbit7XG4rXHRjb25zdCBzdHJ1Y3Qgd2lwaHlfaWZ0eXBlX2V4dF9jYXBhYiAqaWZ0X2V4dF9jYXBhID1cbitcdFx0Y2ZnODAyMTFfZ2V0X2lmdHlwZV9leHRfY2FwYShzZGF0YS1cdTAwM2Vsb2NhbC1cdTAwM2Vody53aXBoeSxcbitcdFx0XHRcdFx0ICAgICBpZWVlODAyMTFfdmlmX3R5cGVfcDJwKFx1MDAyNnNkYXRhLVx1MDAzZXZpZikpO1xuK1x0dTggY2lwX2NhcGFiaWxpdGllcyA9IGlmdF9leHRfY2FwYSA/IGlmdF9leHRfY2FwYS1cdTAwM2VjaXBfY2FwYWJpbGl0aWVzIDogMDtcbitcbitcdGlmIChza2JfdGFpbHJvb20oc2tiKSBcdTAwM2MgNClcbitcdFx0cmV0dXJuIC1FTk9CVUZTO1xuK1xuK1x0c2tiX3B1dF91OChza2IsIFdMQU5fRUlEX0VYVEVOU0lPTik7XG4rXHRza2JfcHV0X3U4KHNrYiwgMik7XG4rXHRza2JfcHV0X3U4KHNrYiwgV0xBTl9FSURfRVhUX0NJUF9DQVBBKTtcbitcdHNrYl9wdXRfdTgoc2tiLCBjaXBfY2FwYWJpbGl0aWVzKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbiBjb25zdCBjaGFyICppZWVlODAyMTFfY29ubl9tb2RlX3N0cihlbnVtIGllZWU4MDIxMV9jb25uX21vZGUgbW9kZSlcbiB7XG4gXHRzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG1vZGVzW10gPSB7XG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL2NvcmUuaCBiL25ldC93aXJlbGVzcy9jb3JlLmhcbmluZGV4IDE1ZDlmN2ViNThiNGQuLjNiOTBhYThjYzZhY2YgMTAwNjQ0XG4tLS0gYS9uZXQvd2lyZWxlc3MvY29yZS5oXG4rKysgYi9uZXQvd2lyZWxlc3MvY29yZS5oXG5AQCAtNDQzLDEzICs0NDMsMTYgQEAgdm9pZCBjZmc4MDIxMV9zbWVfYWJhbmRvbl9hc3NvYyhzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2KTtcbiBcbiAvKiBpbnRlcm5hbCBoZWxwZXJzICovXG4gYm9vbCBjZmc4MDIxMV9zdXBwb3J0ZWRfY2lwaGVyX3N1aXRlKHN0cnVjdCB3aXBoeSAqd2lwaHksIHUzMiBjaXBoZXIpO1xuK2Jvb2wgY2ZnODAyMTFfY2lndGtfc3VwcG9ydGVkKHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4rXHRcdFx0ICAgICAgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XG4gYm9vbCBjZmc4MDIxMV92YWxpZF9rZXlfaWR4KHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4tXHRcdFx0ICAgIGludCBrZXlfaWR4LCBib29sIHBhaXJ3aXNlLFxuK1x0XHRcdCAgICBpbnQga2V5X2lkeCwgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsXG4gXHRcdFx0ICAgIGNvbnN0IHU4ICptYWNfYWRkcik7XG4gaW50IGNmZzgwMjExX3ZhbGlkYXRlX2tleV9zZXR0aW5ncyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4gXHRcdFx0XHQgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuIFx0XHRcdFx0ICAgc3RydWN0IGtleV9wYXJhbXMgKnBhcmFtcywgaW50IGtleV9pZHgsXG4tXHRcdFx0XHQgICBib29sIHBhaXJ3aXNlLCBjb25zdCB1OCAqbWFjX2FkZHIpO1xuK1x0XHRcdFx0ICAgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsXG4rXHRcdFx0XHQgICBjb25zdCB1OCAqbWFjX2FkZHIpO1xuIHZvaWQgX19jZmc4MDIxMV9zY2FuX2RvbmUoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcGh5X3dvcmsgKndrKTtcbiB2b2lkIF9fX2NmZzgwMjExX3NjYW5fZG9uZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4gXHRcdFx0ICAgYm9vbCBzZW5kX21lc3NhZ2UpO1xuZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9pYnNzLmMgYi9uZXQvd2lyZWxlc3MvaWJzcy5jXG5pbmRleCBiMWQ3NDhiZGI1MDRlLi42YWU1NjFlZDdmMzdmIDEwMDY0NFxuLS0tIGEvbmV0L3dpcmVsZXNzL2lic3MuY1xuKysrIGIvbmV0L3dpcmVsZXNzL2lic3MuY1xuQEAgLTE3Miw3ICsxNzIsOCBAQCB2b2lkIGNmZzgwMjExX2NsZWFyX2lic3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBub3dleHQpXG4gXHQgKi9cbiBcdGlmIChyZGV2LVx1MDAzZW9wcy1cdTAwM2VkZWxfa2V5KVxuIFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyA2OyBpKyspXG4tXHRcdFx0cmRldl9kZWxfa2V5KHJkZXYsIHdkZXYsIC0xLCBpLCBmYWxzZSwgTlVMTCk7XG4rXHRcdFx0cmRldl9kZWxfa2V5KHJkZXYsIHdkZXYsIC0xLCBpLCBOTDgwMjExX0tFWVRZUEVfR1JPVVAsXG4rXHRcdFx0XHQgICAgIE5VTEwpO1xuIFxuIFx0aWYgKHdkZXYtXHUwMDNldS5pYnNzLmN1cnJlbnRfYnNzKSB7XG4gXHRcdGNmZzgwMjExX3VuaG9sZF9ic3Mod2Rldi1cdTAwM2V1Lmlic3MuY3VycmVudF9ic3MpO1xuZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9ubDgwMjExLmMgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXG5pbmRleCA4YWRiZWY1ZjA0NDI1Li41NjY0OGY3ZDljN2ZlIDEwMDY0NFxuLS0tIGEvbmV0L3dpcmVsZXNzL25sODAyMTEuY1xuKysrIGIvbmV0L3dpcmVsZXNzL25sODAyMTEuY1xuQEAgLTEwOTYsNiArMTA5Niw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBubDgwMjExX3BvbGljeVtOVU1fTkw4MDIxMV9BVFRSXSA9IHtcbiBcdFtOTDgwMjExX0FUVFJfTlBDQV9QVU5DVF9CSVRNQVBdID1cbiBcdFx0TkxBX1BPTElDWV9GVUxMX1JBTkdFKE5MQV9VMzIsIFx1MDAyNm5sODAyMTFfcHVuY3RfYml0bWFwX3JhbmdlKSxcbiBcdFtOTDgwMjExX0FUVFJfU1RBX0RVTVBfTElOS19TVEFUU10gPSB7IC50eXBlID0gTkxBX0ZMQUcgfSxcbitcdFtOTDgwMjExX0FUVFJfQVNTT0NfQ0lQXSA9IHsgLnR5cGUgPSBOTEFfRkxBRyB9LFxuK1x0W05MODAyMTFfQVRUUl9DSVBfQ0FQQUJJTElUSUVTXSA9IHsgLnR5cGUgPSBOTEFfVTggfSxcbiB9O1xuIFxuIC8qIHBvbGljeSBmb3IgdGhlIGtleSBhdHRyaWJ1dGVzICovXG5AQCAtMTc2MSw2ICsxNzYzLDExIEBAIHN0YXRpYyBpbnQgbmw4MDIxMV9wYXJzZV9rZXkoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgc3RydWN0IGtleV9wYXJzZSAqaylcbiBcdFx0XHRcdEdFTkxfU0VUX0VSUl9NU0coaW5mbywgXCJkZWYga2V5IGlkeCBub3QgMC0zXCIpO1xuIFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdFx0fVxuK1x0XHR9IGVsc2UgaWYgKGstXHUwMDNldHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfQ0lHVEspIHtcbitcdFx0XHRpZiAoay1cdTAwM2VpZHggXHUwMDNjIDAgfHwgay1cdTAwM2VpZHggXHUwMDNlIDEpIHtcbitcdFx0XHRcdEdFTkxfU0VUX0VSUl9NU0coaW5mbywgXCJDSUdUSyBpZHggbm90IDAtMVwiKTtcbitcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHRcdH1cbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHRpZiAoay1cdTAwM2VpZHggXHUwMDNjIDAgfHwgay1cdTAwM2VpZHggXHUwMDNlIDcpIHtcbiBcdFx0XHRcdEdFTkxfU0VUX0VSUl9NU0coaW5mbywgXCJrZXkgaWR4IG5vdCAwLTdcIik7XG5AQCAtMTgyNSw3ICsxODMyLDkgQEAgbmw4MDIxMV9wYXJzZV9jb25ua2V5cyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4gXHRcdH0gZWxzZSBpZiAocGFyc2UuZGVmbWdtdClcbiBcdFx0XHRnb3RvIGVycm9yO1xuIFx0XHRlcnIgPSBjZmc4MDIxMV92YWxpZGF0ZV9rZXlfc2V0dGluZ3MocmRldiwgd2RldiwgXHUwMDI2cGFyc2UucCxcbi1cdFx0XHRcdFx0XHQgICAgIHBhcnNlLmlkeCwgZmFsc2UsIE5VTEwpO1xuK1x0XHRcdFx0XHRcdCAgICAgcGFyc2UuaWR4LFxuK1x0XHRcdFx0XHRcdCAgICAgTkw4MDIxMV9LRVlUWVBFX0dST1VQLFxuK1x0XHRcdFx0XHRcdCAgICAgTlVMTCk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0Z290byBlcnJvcjtcbiBcdFx0aWYgKHBhcnNlLnAuY2lwaGVyICE9IFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDQwIFx1MDAyNlx1MDAyNlxuQEAgLTM2MTUsNiArMzYyNCwxMSBAQCBzdGF0aWMgaW50IG5sODAyMTFfc2VuZF93aXBoeShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4gXHRcdFx0XHRcdFx0Tkw4MDIxMV9BVFRSX0VYVF9NTERfQ0FQQV9BTkRfT1BTLFxuIFx0XHRcdFx0XHRcdGNhcGFiLVx1MDAzZWV4dF9tbGRfY2FwYV9hbmRfb3BzKSlcbiBcdFx0XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4rXHRcdFx0XHRpZiAoY2FwYWItXHUwMDNlY2lwX3N1cHBvcnRlZCBcdTAwMjZcdTAwMjZcbitcdFx0XHRcdCAgICBubGFfcHV0X3U4KG1zZyxcbitcdFx0XHRcdFx0ICAgICAgIE5MODAyMTFfQVRUUl9DSVBfQ0FQQUJJTElUSUVTLFxuK1x0XHRcdFx0XHQgICAgICAgY2FwYWItXHUwMDNlY2lwX2NhcGFiaWxpdGllcykpXG4rXHRcdFx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuIFxuIFx0XHRcdFx0bmxhX25lc3RfZW5kKG1zZywgbmVzdGVkX2V4dF9jYXBhYik7XG4gXHRcdFx0XHRpZiAoc3RhdGUtXHUwMDNlc3BsaXQpXG5AQCAtNTM3MSw2ICs1Mzg1LDcgQEAgc3RhdGljIGludCBubDgwMjExX2dldF9rZXkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBpbmZvLVx1MDAzZXVzZXJfcHRyWzFdO1xuIFx0dTgga2V5X2lkeCA9IDA7XG4gXHRjb25zdCB1OCAqbWFjX2FkZHIgPSBOVUxMO1xuK1x0ZW51bSBubDgwMjExX2tleV90eXBlIHR5cGU7XG4gXHRib29sIHBhaXJ3aXNlO1xuIFx0c3RydWN0IGdldF9rZXlfY29va2llIGNvb2tpZSA9IHtcbiBcdFx0LmVycm9yID0gMCxcbkBAIC01NDAzLDE5ICs1NDE4LDI0IEBAIHN0YXRpYyBpbnQgbmw4MDIxMV9nZXRfa2V5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRcdG1hY19hZGRyID0gbmxhX2RhdGEoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfTUFDXSk7XG4gXG4gXHRwYWlyd2lzZSA9ICEhbWFjX2FkZHI7XG4rXHR0eXBlID0gcGFpcndpc2UgPyBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0UgOiBOTDgwMjExX0tFWVRZUEVfR1JPVVA7XG4gXHRpZiAoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfS0VZX1RZUEVdKSB7XG4tXHRcdHUzMiBrdCA9IG5sYV9nZXRfdTMyKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0tFWV9UWVBFXSk7XG4rXHRcdHR5cGUgPSBubGFfZ2V0X3UzMihpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9LRVlfVFlQRV0pO1xuIFxuLVx0XHRpZiAoa3QgIT0gTkw4MDIxMV9LRVlUWVBFX0dST1VQIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAga3QgIT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFKVxuK1x0XHRpZiAodHlwZSAhPSBOTDgwMjExX0tFWVRZUEVfR1JPVVAgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICB0eXBlICE9IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIHR5cGUgIT0gTkw4MDIxMV9LRVlUWVBFX0NJR1RLKSB7XG4rXHRcdFx0R0VOTF9TRVRfRVJSX01TRyhpbmZvLCBcImtleSB0eXBlIG5vdCBwYWlyd2lzZSwgZ3JvdXAgb3IgQ0lHVEtcIik7XG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHRcdHBhaXJ3aXNlID0ga3QgPT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFO1xuK1x0XHR9XG4rXG4rXHRcdHBhaXJ3aXNlID0gdHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0U7XG4gXHR9XG4gXG4gXHRpZiAoIXJkZXYtXHUwMDNlb3BzLVx1MDAzZWdldF9rZXkpXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcbi1cdGlmICghY2ZnODAyMTFfdmFsaWRfa2V5X2lkeCh3ZGV2LCBrZXlfaWR4LCBwYWlyd2lzZSwgbWFjX2FkZHIpKVxuK1x0aWYgKCFjZmc4MDIxMV92YWxpZF9rZXlfaWR4KHdkZXYsIGtleV9pZHgsIHR5cGUsIG1hY19hZGRyKSlcbiBcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gXG4gXHRtc2cgPSBubG1zZ19uZXcoTkxNU0dfREVGQVVMVF9TSVpFLCBHRlBfS0VSTkVMKTtcbkBAIC01NDQ0LDcgKzU0NjQsNyBAQCBzdGF0aWMgaW50IG5sODAyMTFfZ2V0X2tleShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0aWYgKGVycilcbiBcdFx0Z290byBmcmVlX21zZztcbiBcbi1cdGVyciA9IHJkZXZfZ2V0X2tleShyZGV2LCB3ZGV2LCBsaW5rX2lkLCBrZXlfaWR4LCBwYWlyd2lzZSwgbWFjX2FkZHIsXG4rXHRlcnIgPSByZGV2X2dldF9rZXkocmRldiwgd2RldiwgbGlua19pZCwga2V5X2lkeCwgdHlwZSwgbWFjX2FkZHIsXG4gXHRcdFx0ICAgXHUwMDI2Y29va2llLCBnZXRfa2V5X2NhbGxiYWNrKTtcbiBcbiBcdGlmIChlcnIpXG5AQCAtNTYwMyw4ICs1NjIzLDkgQEAgc3RhdGljIGludCBubDgwMjExX25ld19rZXkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcbiBcdC8qIGZvciBub3cgKi9cbiBcdGlmIChrZXkudHlwZSAhPSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0UgXHUwMDI2XHUwMDI2XG4tXHQgICAga2V5LnR5cGUgIT0gTkw4MDIxMV9LRVlUWVBFX0dST1VQKSB7XG4tXHRcdEdFTkxfU0VUX0VSUl9NU0coaW5mbywgXCJrZXkgdHlwZSBub3QgcGFpcndpc2Ugb3IgZ3JvdXBcIik7XG4rXHQgICAga2V5LnR5cGUgIT0gTkw4MDIxMV9LRVlUWVBFX0dST1VQIFx1MDAyNlx1MDAyNlxuK1x0ICAgIGtleS50eXBlICE9IE5MODAyMTFfS0VZVFlQRV9DSUdUSykge1xuK1x0XHRHRU5MX1NFVF9FUlJfTVNHKGluZm8sIFwia2V5IHR5cGUgbm90IHBhaXJ3aXNlLCBncm91cCBvciBDSUdUS1wiKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG5AQCAtNTYxNiw4ICs1NjM3LDcgQEAgc3RhdGljIGludCBubDgwMjExX25ld19rZXkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFxuIFx0aWYgKGNmZzgwMjExX3ZhbGlkYXRlX2tleV9zZXR0aW5ncyhyZGV2LCB3ZGV2LCBcdTAwMjZrZXkucCwga2V5LmlkeCxcbi1cdFx0XHRcdFx0ICAga2V5LnR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFLFxuLVx0XHRcdFx0XHQgICBtYWNfYWRkcikpIHtcbitcdFx0XHRcdFx0ICAga2V5LnR5cGUsIG1hY19hZGRyKSkge1xuIFx0XHRHRU5MX1NFVF9FUlJfTVNHKGluZm8sIFwia2V5IHNldHRpbmcgdmFsaWRhdGlvbiBmYWlsZWRcIik7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuQEAgLTU2MzEsOCArNTY1MSw3IEBAIHN0YXRpYyBpbnQgbmw4MDIxMV9uZXdfa2V5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRcdFx0XHRrZXkudHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0UpO1xuIFxuIFx0aWYgKCFlcnIpIHtcbi1cdFx0ZXJyID0gcmRldl9hZGRfa2V5KHJkZXYsIHdkZXYsIGxpbmtfaWQsIGtleS5pZHgsXG4tXHRcdFx0XHQgICBrZXkudHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0UsXG4rXHRcdGVyciA9IHJkZXZfYWRkX2tleShyZGV2LCB3ZGV2LCBsaW5rX2lkLCBrZXkuaWR4LCBrZXkudHlwZSxcbiBcdFx0XHRcdCAgICBtYWNfYWRkciwgXHUwMDI2a2V5LnApO1xuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdEdFTkxfU0VUX0VSUl9NU0coaW5mbywgXCJrZXkgYWRkaXRpb24gZmFpbGVkXCIpO1xuQEAgLTU2NjYsMTIgKzU2ODUsMTMgQEAgc3RhdGljIGludCBubDgwMjExX2RlbF9rZXkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcbiBcdC8qIGZvciBub3cgKi9cbiBcdGlmIChrZXkudHlwZSAhPSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0UgXHUwMDI2XHUwMDI2XG4tXHQgICAga2V5LnR5cGUgIT0gTkw4MDIxMV9LRVlUWVBFX0dST1VQKVxuK1x0ICAgIGtleS50eXBlICE9IE5MODAyMTFfS0VZVFlQRV9HUk9VUCBcdTAwMjZcdTAwMjZcbitcdCAgICBrZXkudHlwZSAhPSBOTDgwMjExX0tFWVRZUEVfQ0lHVEspIHtcbitcdFx0R0VOTF9TRVRfRVJSX01TRyhpbmZvLCBcImtleSB0eXBlIG5vdCBwYWlyd2lzZSwgZ3JvdXAgb3IgQ0lHVEtcIik7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuIFxuLVx0aWYgKCFjZmc4MDIxMV92YWxpZF9rZXlfaWR4KHdkZXYsIGtleS5pZHgsXG4tXHRcdFx0XHQgICAga2V5LnR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFLFxuLVx0XHRcdFx0ICAgIG1hY19hZGRyKSlcbitcdGlmICghY2ZnODAyMTFfdmFsaWRfa2V5X2lkeCh3ZGV2LCBrZXkuaWR4LCBrZXkudHlwZSwgbWFjX2FkZHIpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdGlmICghcmRldi1cdTAwM2VvcHMtXHUwMDNlZGVsX2tleSlcbkBAIC01Njg1LDggKzU3MDUsNyBAQCBzdGF0aWMgaW50IG5sODAyMTFfZGVsX2tleShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFxuIFx0aWYgKCFlcnIpXG4gXHRcdGVyciA9IHJkZXZfZGVsX2tleShyZGV2LCB3ZGV2LCBsaW5rX2lkLCBrZXkuaWR4LFxuLVx0XHRcdFx0ICAga2V5LnR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFLFxuLVx0XHRcdFx0ICAgbWFjX2FkZHIpO1xuK1x0XHRcdFx0ICAga2V5LnR5cGUsIG1hY19hZGRyKTtcbiBcbiAjaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFRcbiBcdGlmICghZXJyKSB7XG5AQCAtODgwNSw3ICs4ODI0LDcgQEAgaW50IGNmZzgwMjExX2NoZWNrX3N0YXRpb25fY2hhbmdlKHN0cnVjdCB3aXBoeSAqd2lwaHksXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0LyogV2hlbiB5b3UgcnVuIGludG8gdGhpcywgYWRqdXN0IHRoZSBjb2RlIGJlbG93IGZvciB0aGUgbmV3IGZsYWcgKi9cbi1cdEJVSUxEX0JVR19PTihOTDgwMjExX1NUQV9GTEFHX01BWCAhPSA4KTtcbitcdEJVSUxEX0JVR19PTihOTDgwMjExX1NUQV9GTEFHX01BWCAhPSA5KTtcbiBcbiBcdHN3aXRjaCAoc3RhdHlwZSkge1xuIFx0Y2FzZSBDRkc4MDIxMV9TVEFfTUVTSF9QRUVSX0tFUk5FTDpcbkBAIC04ODk5LDcgKzg5MTgsOCBAQCBpbnQgY2ZnODAyMTFfY2hlY2tfc3RhdGlvbl9jaGFuZ2Uoc3RydWN0IHdpcGh5ICp3aXBoeSxcbiBcdFx0XHRcdCAgQklUKE5MODAyMTFfU1RBX0ZMQUdfU0hPUlRfUFJFQU1CTEUpIHxcbiBcdFx0XHRcdCAgQklUKE5MODAyMTFfU1RBX0ZMQUdfV01FKSB8XG4gXHRcdFx0XHQgIEJJVChOTDgwMjExX1NUQV9GTEFHX01GUCkgfFxuLVx0XHRcdFx0ICBCSVQoTkw4MDIxMV9TVEFfRkxBR19TUFBfQU1TRFUpKSlcbitcdFx0XHRcdCAgQklUKE5MODAyMTFfU1RBX0ZMQUdfU1BQX0FNU0RVKSB8XG4rXHRcdFx0XHQgIEJJVChOTDgwMjExX1NUQV9GTEFHX0NJUCkpKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0XHQvKiBidXQgYXV0aGVudGljYXRlZC9hc3NvY2lhdGVkIG9ubHkgaWYgZHJpdmVyIGhhbmRsZXMgaXQgKi9cbkBAIC05Mjc2LDYgKzkyOTYsMjIgQEAgc3RhdGljIGludCBubDgwMjExX3NldF9zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRcdFx0bmxhX2dldF91MTYoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfRU1MX0NBUEFCSUxJVFldKTtcbiBcdH1cbiBcbitcdGlmIChwYXJhbXMuc3RhX2ZsYWdzX21hc2sgXHUwMDI2IEJJVChOTDgwMjExX1NUQV9GTEFHX0NJUCkgXHUwMDI2XHUwMDI2XG4rXHQgICAgcGFyYW1zLnN0YV9mbGFnc19zZXQgXHUwMDI2IEJJVChOTDgwMjExX1NUQV9GTEFHX0NJUCkpIHtcbitcdFx0aWYgKCFjZmc4MDIxMV9jaWd0a19zdXBwb3J0ZWQod2RldiwgaW5mbykpXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRcdC8qIENJUCBjYXBhYmlsaXRpZXMgYXJlIHJlcXVpcmVkIGlmIENJUCBpcyBiZWluZyBlbmFibGVkICovXG4rXHRcdGlmIChpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9DSVBfQ0FQQUJJTElUSUVTXSkge1xuK1x0XHRcdHBhcmFtcy5saW5rX3N0YV9wYXJhbXMuY2lwX2NhcF9zZXQgPSB0cnVlO1xuK1x0XHRcdHBhcmFtcy5saW5rX3N0YV9wYXJhbXMuY2lwX2NhcCA9XG4rXHRcdFx0XHRubGFfZ2V0X3U4KGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0NJUF9DQVBBQklMSVRJRVNdKTtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRHRU5MX1NFVF9FUlJfTVNHKGluZm8sIFwiTm8gQ0lQIGNhcGFiaWxpdGllcyBwcm92aWRlZFwiKTtcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0fVxuK1x0fVxuK1xuIFx0aWYgKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0FJUlRJTUVfV0VJR0hUXSlcbiBcdFx0cGFyYW1zLmFpcnRpbWVfd2VpZ2h0ID1cbiBcdFx0XHRubGFfZ2V0X3UxNihpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9BSVJUSU1FX1dFSUdIVF0pO1xuQEAgLTk0NzUsNiArOTUxMSwyMiBAQCBzdGF0aWMgaW50IG5sODAyMTFfbmV3X3N0YXRpb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdFx0XHRubGFfZ2V0X3UxNihpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9FTUxfQ0FQQUJJTElUWV0pO1xuIFx0fVxuIFxuK1x0aWYgKHBhcmFtcy5zdGFfZmxhZ3NfbWFzayBcdTAwMjYgQklUKE5MODAyMTFfU1RBX0ZMQUdfQ0lQKSBcdTAwMjZcdTAwMjZcbitcdCAgICBwYXJhbXMuc3RhX2ZsYWdzX3NldCBcdTAwMjYgQklUKE5MODAyMTFfU1RBX0ZMQUdfQ0lQKSkge1xuK1x0XHRpZiAoIWNmZzgwMjExX2NpZ3RrX3N1cHBvcnRlZCh3ZGV2LCBpbmZvKSlcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdFx0LyogQ0lQIGNhcGFiaWxpdGllcyBhcmUgcmVxdWlyZWQgaWYgQ0lQIGlzIGVuYWJsZWQgKi9cbitcdFx0aWYgKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0NJUF9DQVBBQklMSVRJRVNdKSB7XG4rXHRcdFx0cGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5jaXBfY2FwX3NldCA9IHRydWU7XG4rXHRcdFx0cGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5jaXBfY2FwID1cbitcdFx0XHRcdG5sYV9nZXRfdTgoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfQ0lQX0NBUEFCSUxJVElFU10pO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdEdFTkxfU0VUX0VSUl9NU0coaW5mbywgXCJObyBDSVAgY2FwYWJpbGl0aWVzIHByb3ZpZGVkXCIpO1xuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHR9XG4rXHR9XG4rXG4gXHRpZiAoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfSEVfNkdIWl9DQVBBQklMSVRZXSlcbiBcdFx0cGFyYW1zLmxpbmtfc3RhX3BhcmFtcy5oZV82Z2h6X2NhcGEgPVxuIFx0XHRcdG5sYV9kYXRhKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0hFXzZHSFpfQ0FQQUJJTElUWV0pO1xuQEAgLTk1NTIsNyArOTYwNCw3IEBAIHN0YXRpYyBpbnQgbmw4MDIxMV9uZXdfc3RhdGlvbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdC8qIFdoZW4geW91IHJ1biBpbnRvIHRoaXMsIGFkanVzdCB0aGUgY29kZSBiZWxvdyBmb3IgdGhlIG5ldyBmbGFnICovXG4tXHRCVUlMRF9CVUdfT04oTkw4MDIxMV9TVEFfRkxBR19NQVggIT0gOCk7XG4rXHRCVUlMRF9CVUdfT04oTkw4MDIxMV9TVEFfRkxBR19NQVggIT0gOSk7XG4gXG4gXHRzd2l0Y2ggKHdkZXYtXHUwMDNlaWZ0eXBlKSB7XG4gXHRjYXNlIE5MODAyMTFfSUZUWVBFX0FQOlxuQEAgLTk1ODEsNiArOTYzMywxMCBAQCBzdGF0aWMgaW50IG5sODAyMTFfbmV3X3N0YXRpb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdFx0ICAgIHBhcmFtcy5zdGFfZmxhZ3NfbWFzayBcdTAwMjYgQklUKE5MODAyMTFfU1RBX0ZMQUdfU1BQX0FNU0RVKSlcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbitcdFx0aWYgKHBhcmFtcy5zdGFfZmxhZ3NfbWFzayBcdTAwMjYgQklUKE5MODAyMTFfU1RBX0ZMQUdfQ0lQKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICFjZmc4MDIxMV9jaWd0a19zdXBwb3J0ZWQod2RldiwgaW5mbykpXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4gXHRcdC8qIE9sZGVyIHVzZXJzcGFjZSwgb3IgdXNlcnNwYWNlIHdhbnRpbmcgdG8gYmUgY29tcGF0aWJsZSB3aXRoXG4gXHRcdCAqICFOTDgwMjExX0ZFQVRVUkVfRlVMTF9BUF9DTElFTlRfU1RBVEUsIHdpbGwgbm90IHNldCB0aGUgYXV0aFxuIFx0XHQgKiBhbmQgYXNzb2MgZmxhZ3MgaW4gdGhlIG1hc2ssIGJ1dCBhc3N1bWVzIHRoZSBzdGF0aW9uIHdpbGwgYmVcbkBAIC0xMzMwNyw2ICsxMzM2MywxMyBAQCBzdGF0aWMgaW50IG5sODAyMTFfYXNzb2NpYXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRcdHJlcS5mbGFncyB8PSBBU1NPQ19SRVFfU1BQX0FNU0RVO1xuIFx0fVxuIFxuK1x0aWYgKG5sYV9nZXRfZmxhZyhpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9BU1NPQ19DSVBdKSkge1xuK1x0XHRpZiAoIWNmZzgwMjExX2NpZ3RrX3N1cHBvcnRlZChkZXYtXHUwMDNlaWVlZTgwMjExX3B0ciwgaW5mbykpXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRcdHJlcS5mbGFncyB8PSBBU1NPQ19SRVFfQ0lQO1xuK1x0fVxuK1xuIFx0cmVxLmxpbmtfaWQgPSBubDgwMjExX2xpbmtfaWRfb3JfaW52YWxpZChpbmZvLVx1MDAzZWF0dHJzKTtcbiBcbiBcdGlmIChpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9NTE9fTElOS1NdKSB7XG5AQCAtMTkxNzQsNiArMTkyMzcsMjMgQEAgbmw4MDIxMV9hZGRfbW9kX2xpbmtfc3RhdGlvbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxuIFx0XHRwYXJhbXMuaGVfNmdoel9jYXBhID1cbiBcdFx0XHRubGFfZGF0YShpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9IRV82R0haX0NBUEFCSUxJVFldKTtcbiBcbitcdGlmIChpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9DSVBfQ0FQQUJJTElUSUVTXSkge1xuK1x0XHRzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LVx1MDAzZWllZWU4MDIxMV9wdHI7XG4rXG4rXHRcdGlmICghY2ZnODAyMTFfY2lndGtfc3VwcG9ydGVkKHdkZXYsIGluZm8pKVxuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0XHRwYXJhbXMuY2lwX2NhcF9zZXQgPSB0cnVlO1xuK1x0XHRwYXJhbXMuY2lwX2NhcCA9XG4rXHRcdFx0bmxhX2dldF91OChpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9DSVBfQ0FQQUJJTElUSUVTXSk7XG4rXG4rXHRcdC8qIE9ubHkgcGVybWl0IENJUCBjYXBhYmlsaXRpZXMgd2hlbiBhZGRpbmcgbGluayBzdGF0aW9ucyAqL1xuK1x0XHRpZiAoIWFkZCkge1xuK1x0XHRcdEdFTkxfU0VUX0VSUl9NU0coaW5mbywgXCJDYW5ub3QgbW9kaWZ5IENJUCBjYXBhYmlsaXRpZXNcIik7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbitcdH1cbitcbiBcdGlmIChpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9PUE1PREVfTk9USUZdKSB7XG4gXHRcdHBhcmFtcy5vcG1vZGVfbm90aWZfdXNlZCA9IHRydWU7XG4gXHRcdHBhcmFtcy5vcG1vZGVfbm90aWYgPVxuZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9yZGV2LW9wcy5oIGIvbmV0L3dpcmVsZXNzL3JkZXYtb3BzLmhcbmluZGV4IDZjM2JhZDhiMmQ2ZjYuLmQ0OTMzYmJiZjBlN2UgMTAwNjQ0XG4tLS0gYS9uZXQvd2lyZWxlc3MvcmRldi1vcHMuaFxuKysrIGIvbmV0L3dpcmVsZXNzL3JkZXYtb3BzLmhcbkBAIC03OCw0MiArNzgsNDMgQEAgcmRldl9jaGFuZ2VfdmlydHVhbF9pbnRmKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbiBcbiBzdGF0aWMgaW5saW5lIGludCByZGV2X2FkZF9rZXkoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuIFx0XHRcdCAgICAgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LCBpbnQgbGlua19pZCxcbi1cdFx0XHQgICAgICAgdTgga2V5X2luZGV4LCBib29sIHBhaXJ3aXNlLCBjb25zdCB1OCAqbWFjX2FkZHIsXG4tXHRcdFx0ICAgICAgIHN0cnVjdCBrZXlfcGFyYW1zICpwYXJhbXMpXG4rXHRcdFx0ICAgICAgIHU4IGtleV9pbmRleCwgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsXG4rXHRcdFx0ICAgICAgIGNvbnN0IHU4ICptYWNfYWRkciwgc3RydWN0IGtleV9wYXJhbXMgKnBhcmFtcylcbiB7XG4gXHRpbnQgcmV0O1xuLVx0dHJhY2VfcmRldl9hZGRfa2V5KFx1MDAyNnJkZXYtXHUwMDNld2lwaHksIHdkZXYsIGxpbmtfaWQsIGtleV9pbmRleCwgcGFpcndpc2UsXG4rXHR0cmFjZV9yZGV2X2FkZF9rZXkoXHUwMDI2cmRldi1cdTAwM2V3aXBoeSwgd2RldiwgbGlua19pZCwga2V5X2luZGV4LCB0eXBlLFxuIFx0XHRcdCAgIG1hY19hZGRyLCBwYXJhbXMtXHUwMDNlbW9kZSk7XG4gXHRyZXQgPSByZGV2LVx1MDAzZW9wcy1cdTAwM2VhZGRfa2V5KFx1MDAyNnJkZXYtXHUwMDNld2lwaHksIHdkZXYsIGxpbmtfaWQsIGtleV9pbmRleCxcbi1cdFx0XHRcdCAgcGFpcndpc2UsIG1hY19hZGRyLCBwYXJhbXMpO1xuK1x0XHRcdFx0ICB0eXBlLCBtYWNfYWRkciwgcGFyYW1zKTtcbiBcdHRyYWNlX3JkZXZfcmV0dXJuX2ludChcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LCByZXQpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIGlubGluZSBpbnRcbiByZGV2X2dldF9rZXkoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuLVx0ICAgICBpbnQgbGlua19pZCwgdTgga2V5X2luZGV4LCBib29sIHBhaXJ3aXNlLCBjb25zdCB1OCAqbWFjX2FkZHIsXG4tXHQgICAgIHZvaWQgKmNvb2tpZSxcbitcdCAgICAgaW50IGxpbmtfaWQsIHU4IGtleV9pbmRleCwgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsXG4rXHQgICAgIGNvbnN0IHU4ICptYWNfYWRkciwgdm9pZCAqY29va2llLFxuIFx0ICAgICB2b2lkICgqY2FsbGJhY2spKHZvaWQgKmNvb2tpZSwgc3RydWN0IGtleV9wYXJhbXMqKSlcbiB7XG4gXHRpbnQgcmV0O1xuLVx0dHJhY2VfcmRldl9nZXRfa2V5KFx1MDAyNnJkZXYtXHUwMDNld2lwaHksIHdkZXYsIGxpbmtfaWQsIGtleV9pbmRleCwgcGFpcndpc2UsXG4rXHR0cmFjZV9yZGV2X2dldF9rZXkoXHUwMDI2cmRldi1cdTAwM2V3aXBoeSwgd2RldiwgbGlua19pZCwga2V5X2luZGV4LCB0eXBlLFxuIFx0XHRcdCAgIG1hY19hZGRyKTtcbiBcdHJldCA9IHJkZXYtXHUwMDNlb3BzLVx1MDAzZWdldF9rZXkoXHUwMDI2cmRldi1cdTAwM2V3aXBoeSwgd2RldiwgbGlua19pZCwga2V5X2luZGV4LFxuLVx0XHRcdFx0ICBwYWlyd2lzZSwgbWFjX2FkZHIsIGNvb2tpZSwgY2FsbGJhY2spO1xuK1x0XHRcdFx0IHR5cGUsIG1hY19hZGRyLCBjb29raWUsIGNhbGxiYWNrKTtcbiBcdHRyYWNlX3JkZXZfcmV0dXJuX2ludChcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LCByZXQpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIGlubGluZSBpbnQgcmRldl9kZWxfa2V5KHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbiBcdFx0XHQgICAgICAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwgaW50IGxpbmtfaWQsXG4tXHRcdFx0ICAgICAgIHU4IGtleV9pbmRleCwgYm9vbCBwYWlyd2lzZSwgY29uc3QgdTggKm1hY19hZGRyKVxuK1x0XHRcdCAgICAgICB1OCBrZXlfaW5kZXgsIGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLFxuK1x0XHRcdCAgICAgICBjb25zdCB1OCAqbWFjX2FkZHIpXG4ge1xuIFx0aW50IHJldDtcbi1cdHRyYWNlX3JkZXZfZGVsX2tleShcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LCB3ZGV2LCBsaW5rX2lkLCBrZXlfaW5kZXgsIHBhaXJ3aXNlLFxuK1x0dHJhY2VfcmRldl9kZWxfa2V5KFx1MDAyNnJkZXYtXHUwMDNld2lwaHksIHdkZXYsIGxpbmtfaWQsIGtleV9pbmRleCwgdHlwZSxcbiBcdFx0XHQgICBtYWNfYWRkcik7XG4gXHRyZXQgPSByZGV2LVx1MDAzZW9wcy1cdTAwM2VkZWxfa2V5KFx1MDAyNnJkZXYtXHUwMDNld2lwaHksIHdkZXYsIGxpbmtfaWQsIGtleV9pbmRleCxcbi1cdFx0XHRcdCAgcGFpcndpc2UsIG1hY19hZGRyKTtcbitcdFx0XHRcdCAgdHlwZSwgbWFjX2FkZHIpO1xuIFx0dHJhY2VfcmRldl9yZXR1cm5faW50KFx1MDAyNnJkZXYtXHUwMDNld2lwaHksIHJldCk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvc21lLmMgYi9uZXQvd2lyZWxlc3Mvc21lLmNcbmluZGV4IDJhNzE5YjVjNDg3ZTMuLjQ1OGY3MmQ4MzUxYWIgMTAwNjQ0XG4tLS0gYS9uZXQvd2lyZWxlc3Mvc21lLmNcbisrKyBiL25ldC93aXJlbGVzcy9zbWUuY1xuQEAgLTEzODcsNyArMTM4NywxNSBAQCB2b2lkIF9fY2ZnODAyMTFfZGlzY29ubmVjdGVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICppZSxcbiBcdFx0XHQgICAgTkw4MDIxMV9FWFRfRkVBVFVSRV9CRUFDT05fUFJPVEVDVElPTl9DTElFTlQpKVxuIFx0XHRcdG1heF9rZXlfaWR4ID0gNztcbiBcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2M9IG1heF9rZXlfaWR4OyBpKyspXG4tXHRcdFx0cmRldl9kZWxfa2V5KHJkZXYsIHdkZXYsIC0xLCBpLCBmYWxzZSwgTlVMTCk7XG4rXHRcdFx0cmRldl9kZWxfa2V5KHJkZXYsIHdkZXYsIC0xLCBpLCBOTDgwMjExX0tFWVRZUEVfR1JPVVAsXG4rXHRcdFx0XHQgICAgIE5VTEwpO1xuK1xuK1x0XHRpZiAoY2ZnODAyMTFfY2lndGtfc3VwcG9ydGVkKHdkZXYsIE5VTEwpKSB7XG4rXHRcdFx0cmRldl9kZWxfa2V5KHJkZXYsIHdkZXYsIC0xLCAwLCBOTDgwMjExX0tFWVRZUEVfQ0lHVEssXG4rXHRcdFx0XHQgICAgIE5VTEwpO1xuK1x0XHRcdHJkZXZfZGVsX2tleShyZGV2LCB3ZGV2LCAtMSwgMSwgTkw4MDIxMV9LRVlUWVBFX0NJR1RLLFxuK1x0XHRcdFx0ICAgICBOVUxMKTtcbitcdFx0fVxuIFx0fVxuIFxuIFx0cmRldl9zZXRfcW9zX21hcChyZGV2LCBkZXYsIE5VTEwpO1xuZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy90cmFjZS5oIGIvbmV0L3dpcmVsZXNzL3RyYWNlLmhcbmluZGV4IDhjMmE5MWI4NWMzOTYuLmMyMTBjYTFlNDRlMmIgMTAwNjQ0XG4tLS0gYS9uZXQvd2lyZWxlc3MvdHJhY2UuaFxuKysrIGIvbmV0L3dpcmVsZXNzL3RyYWNlLmhcbkBAIC01NTcsMTUgKzU1NywxNSBAQCBUUkFDRV9FVkVOVChyZGV2X2NoYW5nZV92aXJ0dWFsX2ludGYsXG4gXG4gREVDTEFSRV9FVkVOVF9DTEFTUyhrZXlfaGFuZGxlLFxuIFx0VFBfUFJPVE8oc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwgaW50IGxpbmtfaWQsXG4tXHRcdCB1OCBrZXlfaW5kZXgsIGJvb2wgcGFpcndpc2UsIGNvbnN0IHU4ICptYWNfYWRkciksXG4tXHRUUF9BUkdTKHdpcGh5LCB3ZGV2LCBsaW5rX2lkLCBrZXlfaW5kZXgsIHBhaXJ3aXNlLCBtYWNfYWRkciksXG4rXHRcdCB1OCBrZXlfaW5kZXgsIGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLCBjb25zdCB1OCAqbWFjX2FkZHIpLFxuK1x0VFBfQVJHUyh3aXBoeSwgd2RldiwgbGlua19pZCwga2V5X2luZGV4LCB0eXBlLCBtYWNfYWRkciksXG4gXHRUUF9TVFJVQ1RfX2VudHJ5KFxuIFx0XHRXSVBIWV9FTlRSWVxuIFx0XHRXREVWX0VOVFJZXG4gXHRcdE1BQ19FTlRSWShtYWNfYWRkcilcbiBcdFx0X19maWVsZChpbnQsIGxpbmtfaWQpXG4gXHRcdF9fZmllbGQodTgsIGtleV9pbmRleClcbi1cdFx0X19maWVsZChib29sLCBwYWlyd2lzZSlcbitcdFx0X19maWVsZCh1OCwgdHlwZSlcbiBcdCksXG4gXHRUUF9mYXN0X2Fzc2lnbihcbiBcdFx0V0lQSFlfQVNTSUdOO1xuQEAgLTU3MywzOCArNTczLDQwIEBAIERFQ0xBUkVfRVZFTlRfQ0xBU1Moa2V5X2hhbmRsZSxcbiBcdFx0TUFDX0FTU0lHTihtYWNfYWRkciwgbWFjX2FkZHIpO1xuIFx0XHRfX2VudHJ5LVx1MDAzZWxpbmtfaWQgPSBsaW5rX2lkO1xuIFx0XHRfX2VudHJ5LVx1MDAzZWtleV9pbmRleCA9IGtleV9pbmRleDtcbi1cdFx0X19lbnRyeS1cdTAwM2VwYWlyd2lzZSA9IHBhaXJ3aXNlO1xuK1x0XHRfX2VudHJ5LVx1MDAzZXR5cGUgPSB0eXBlO1xuIFx0KSxcbiBcdFRQX3ByaW50ayhXSVBIWV9QUl9GTVQgXCIsIFwiIFdERVZfUFJfRk1UIFwiLCBsaW5rX2lkOiAlZCwgXCJcbi1cdFx0ICBcImtleV9pbmRleDogJXUsIHBhaXJ3aXNlOiAlcywgbWFjIGFkZHI6ICVwTVwiLFxuK1x0XHQgIFwia2V5X2luZGV4OiAldSwgcGFpcndpc2U6ICVzLCB0eXBlOiAlZCwgbWFjIGFkZHI6ICVwTVwiLFxuIFx0XHQgIFdJUEhZX1BSX0FSRywgV0RFVl9QUl9BUkcsIF9fZW50cnktXHUwMDNlbGlua19pZCxcbi1cdFx0ICBfX2VudHJ5LVx1MDAzZWtleV9pbmRleCwgQk9PTF9UT19TVFIoX19lbnRyeS1cdTAwM2VwYWlyd2lzZSksXG4tXHRcdCAgX19lbnRyeS1cdTAwM2VtYWNfYWRkcilcbitcdFx0ICBfX2VudHJ5LVx1MDAzZWtleV9pbmRleCxcbitcdFx0ICBCT09MX1RPX1NUUihfX2VudHJ5LVx1MDAzZXR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFKSxcbitcdFx0ICBfX2VudHJ5LVx1MDAzZXR5cGUsIF9fZW50cnktXHUwMDNlbWFjX2FkZHIpXG4gKTtcbiBcbiBERUZJTkVfRVZFTlQoa2V5X2hhbmRsZSwgcmRldl9nZXRfa2V5LFxuIFx0VFBfUFJPVE8oc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwgaW50IGxpbmtfaWQsXG4tXHRcdCB1OCBrZXlfaW5kZXgsIGJvb2wgcGFpcndpc2UsIGNvbnN0IHU4ICptYWNfYWRkciksXG4tXHRUUF9BUkdTKHdpcGh5LCB3ZGV2LCBsaW5rX2lkLCBrZXlfaW5kZXgsIHBhaXJ3aXNlLCBtYWNfYWRkcilcbitcdFx0IHU4IGtleV9pbmRleCwgZW51bSBubDgwMjExX2tleV90eXBlIHR5cGUsIGNvbnN0IHU4ICptYWNfYWRkciksXG4rXHRUUF9BUkdTKHdpcGh5LCB3ZGV2LCBsaW5rX2lkLCBrZXlfaW5kZXgsIHR5cGUsIG1hY19hZGRyKVxuICk7XG4gXG4gREVGSU5FX0VWRU5UKGtleV9oYW5kbGUsIHJkZXZfZGVsX2tleSxcbiBcdFRQX1BST1RPKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsIGludCBsaW5rX2lkLFxuLVx0XHQgdTgga2V5X2luZGV4LCBib29sIHBhaXJ3aXNlLCBjb25zdCB1OCAqbWFjX2FkZHIpLFxuLVx0VFBfQVJHUyh3aXBoeSwgd2RldiwgbGlua19pZCwga2V5X2luZGV4LCBwYWlyd2lzZSwgbWFjX2FkZHIpXG4rXHRcdCB1OCBrZXlfaW5kZXgsIGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLCBjb25zdCB1OCAqbWFjX2FkZHIpLFxuK1x0VFBfQVJHUyh3aXBoeSwgd2RldiwgbGlua19pZCwga2V5X2luZGV4LCB0eXBlLCBtYWNfYWRkcilcbiApO1xuIFxuIFRSQUNFX0VWRU5UKHJkZXZfYWRkX2tleSxcbiBcdFRQX1BST1RPKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsIGludCBsaW5rX2lkLFxuLVx0XHQgdTgga2V5X2luZGV4LCBib29sIHBhaXJ3aXNlLCBjb25zdCB1OCAqbWFjX2FkZHIsIHU4IG1vZGUpLFxuLVx0VFBfQVJHUyh3aXBoeSwgd2RldiwgbGlua19pZCwga2V5X2luZGV4LCBwYWlyd2lzZSwgbWFjX2FkZHIsIG1vZGUpLFxuK1x0XHQgdTgga2V5X2luZGV4LCBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSwgY29uc3QgdTggKm1hY19hZGRyLFxuK1x0XHQgdTggbW9kZSksXG4rXHRUUF9BUkdTKHdpcGh5LCB3ZGV2LCBsaW5rX2lkLCBrZXlfaW5kZXgsIHR5cGUsIG1hY19hZGRyLCBtb2RlKSxcbiBcdFRQX1NUUlVDVF9fZW50cnkoXG4gXHRcdFdJUEhZX0VOVFJZXG4gXHRcdFdERVZfRU5UUllcbiBcdFx0TUFDX0VOVFJZKG1hY19hZGRyKVxuIFx0XHRfX2ZpZWxkKGludCwgbGlua19pZClcbiBcdFx0X19maWVsZCh1OCwga2V5X2luZGV4KVxuLVx0XHRfX2ZpZWxkKGJvb2wsIHBhaXJ3aXNlKVxuK1x0XHRfX2ZpZWxkKHU4LCB0eXBlKVxuIFx0XHRfX2ZpZWxkKHU4LCBtb2RlKVxuIFx0KSxcbiBcdFRQX2Zhc3RfYXNzaWduKFxuQEAgLTYxMywxNSArNjE1LDE2IEBAIFRSQUNFX0VWRU5UKHJkZXZfYWRkX2tleSxcbiBcdFx0TUFDX0FTU0lHTihtYWNfYWRkciwgbWFjX2FkZHIpO1xuIFx0XHRfX2VudHJ5LVx1MDAzZWxpbmtfaWQgPSBsaW5rX2lkO1xuIFx0XHRfX2VudHJ5LVx1MDAzZWtleV9pbmRleCA9IGtleV9pbmRleDtcbi1cdFx0X19lbnRyeS1cdTAwM2VwYWlyd2lzZSA9IHBhaXJ3aXNlO1xuK1x0XHRfX2VudHJ5LVx1MDAzZXR5cGUgPSB0eXBlO1xuIFx0XHRfX2VudHJ5LVx1MDAzZW1vZGUgPSBtb2RlO1xuIFx0KSxcbiBcdFRQX3ByaW50ayhXSVBIWV9QUl9GTVQgXCIsIFwiIFdERVZfUFJfRk1UIFwiLCBsaW5rX2lkOiAlZCwgXCJcbi1cdFx0ICBcImtleV9pbmRleDogJXUsIG1vZGU6ICV1LCBwYWlyd2lzZTogJXMsIFwiXG4rXHRcdCAgXCJrZXlfaW5kZXg6ICV1LCBtb2RlOiAldSwgcGFpcndpc2U6ICVzLCB0eXBlOiAlZCwgXCJcbiBcdFx0ICBcIm1hYyBhZGRyOiAlcE1cIixcbiBcdFx0ICBXSVBIWV9QUl9BUkcsIFdERVZfUFJfQVJHLCBfX2VudHJ5LVx1MDAzZWxpbmtfaWQsXG4gXHRcdCAgX19lbnRyeS1cdTAwM2VrZXlfaW5kZXgsIF9fZW50cnktXHUwMDNlbW9kZSxcbi1cdFx0ICBCT09MX1RPX1NUUihfX2VudHJ5LVx1MDAzZXBhaXJ3aXNlKSwgX19lbnRyeS1cdTAwM2VtYWNfYWRkcilcbitcdFx0ICBCT09MX1RPX1NUUihfX2VudHJ5LVx1MDAzZXR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFKSxcbitcdFx0ICBfX2VudHJ5LVx1MDAzZXR5cGUsIF9fZW50cnktXHUwMDNlbWFjX2FkZHIpXG4gKTtcbiBcbiBUUkFDRV9FVkVOVChyZGV2X3NldF9kZWZhdWx0X2tleSxcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvdXRpbC5jIGIvbmV0L3dpcmVsZXNzL3V0aWwuY1xuaW5kZXggM2U1ODRkMGNhM2UyNi4uZGQxNjZjMzUyOTEwZiAxMDA2NDRcbi0tLSBhL25ldC93aXJlbGVzcy91dGlsLmNcbisrKyBiL25ldC93aXJlbGVzcy91dGlsLmNcbkBAIC0yNTgsOCArMjU4LDI0IEBAIHN0YXRpYyBib29sIGNmZzgwMjExX2lndGtfY2lwaGVyX3N1cHBvcnRlZChzdHJ1Y3Qgd2lwaHkgKndpcGh5KVxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbitib29sIGNmZzgwMjExX2NpZ3RrX3N1cHBvcnRlZChzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuK1x0XHRcdCAgICAgIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4re1xuK1x0Y29uc3Qgc3RydWN0IHdpcGh5X2lmdHlwZV9leHRfY2FwYWIgKmV4dF9jYXBhYiA9XG4rXHRcdGNmZzgwMjExX2dldF9pZnR5cGVfZXh0X2NhcGEod2Rldi1cdTAwM2V3aXBoeSwgd2Rldi1cdTAwM2VpZnR5cGUpO1xuK1xuK1x0aWYgKGV4dF9jYXBhYiBcdTAwMjZcdTAwMjYgZXh0X2NhcGFiLVx1MDAzZWNpcF9zdXBwb3J0ZWQpXG4rXHRcdHJldHVybiB0cnVlO1xuK1xuK1x0aWYgKGluZm8pXG4rXHRcdEdFTkxfU0VUX0VSUl9NU0coaW5mbyxcbitcdFx0XHRcdCBcIkNvbnRyb2wgSW50ZWdyaXR5IFByb3RvY29sIG5vdCBzdXBwb3J0ZWRcIik7XG4rXG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuIGJvb2wgY2ZnODAyMTFfdmFsaWRfa2V5X2lkeChzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuLVx0XHRcdCAgICBpbnQga2V5X2lkeCwgYm9vbCBwYWlyd2lzZSxcbitcdFx0XHQgICAgaW50IGtleV9pZHgsIGVudW0gbmw4MDIxMV9rZXlfdHlwZSB0eXBlLFxuIFx0XHRcdCAgICBjb25zdCB1OCAqbWFjX2FkZHIpXG4ge1xuIFx0aWYgKFdBUk5fT04oIXdkZXYpKVxuQEAgLTI3MiwxMyArMjg4LDI0IEBAIGJvb2wgY2ZnODAyMTFfdmFsaWRfa2V5X2lkeChzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuIFx0ICogQ2FuJ3QgZGlmZmVyZW50aWF0ZSBjaXBoZXJzIGhlcmUgc28gYWxsb3cgMC4uMy5cbiBcdCAqIFBhaXJ3aXNlIGtleXMgbXVzdCBiZSBmb3IgYSBzdGF0aW9uIChNQUMgYWRkcmVzcyBnaXZlbikuXG4gXHQgKi9cbi1cdGlmIChwYWlyd2lzZSkge1xuK1x0aWYgKHR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFKSB7XG4gXHRcdGlmICghbWFjX2FkZHIpXG4gXHRcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0XHRyZXR1cm4ga2V5X2lkeCBcdTAwM2MgNDtcbiBcdH1cbiBcbitcdC8qIENoZWNrIHRoZSB3ZGV2L2lmdHlwZSBzdXBwb3J0cyBDSUdUSyAqL1xuK1x0aWYgKHR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX0NJR1RLKSB7XG4rXHRcdGlmICghY2ZnODAyMTFfY2lndGtfc3VwcG9ydGVkKHdkZXYsIE5VTEwpKVxuK1x0XHRcdHJldHVybiBmYWxzZTtcbitcbitcdFx0aWYgKGtleV9pZHggXHUwMDNlPSAyKVxuK1x0XHRcdHJldHVybiBmYWxzZTtcbitcbitcdFx0LyogZmFsbHRocm91Z2ggZm9yIG1hY19hZGRyIGNoZWNrcyAqL1xuK1x0fVxuK1xuIFx0LypcbiBcdCAqIEZvciBncm91cCBrZXlzLCBtYWNfYWRkcj09TlVMTCBtZWFucyBzZXR0aW5nIGEgZ3JvdXAga2V5XG4gXHQgKiBmb3IgVFgsIHdoaWNoIGlzIG9ubHkgc3VwcG9ydGVkIG9uIHNvbWUgaW50ZXJmYWNlIHR5cGVzLFxuQEAgLTM0Myw5ICszNzAsMTIgQEAgYm9vbCBjZmc4MDIxMV92YWxpZF9rZXlfaWR4KHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4gaW50IGNmZzgwMjExX3ZhbGlkYXRlX2tleV9zZXR0aW5ncyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4gXHRcdFx0XHQgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuIFx0XHRcdFx0ICAgc3RydWN0IGtleV9wYXJhbXMgKnBhcmFtcywgaW50IGtleV9pZHgsXG4tXHRcdFx0XHQgICBib29sIHBhaXJ3aXNlLCBjb25zdCB1OCAqbWFjX2FkZHIpXG4rXHRcdFx0XHQgICBlbnVtIG5sODAyMTFfa2V5X3R5cGUgdHlwZSxcbitcdFx0XHRcdCAgIGNvbnN0IHU4ICptYWNfYWRkcilcbiB7XG4tXHRpZiAoIWNmZzgwMjExX3ZhbGlkX2tleV9pZHgod2Rldiwga2V5X2lkeCwgcGFpcndpc2UsIG1hY19hZGRyKSlcbitcdGJvb2wgcGFpcndpc2UgPSB0eXBlID09IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRTtcbitcbitcdGlmICghY2ZnODAyMTFfdmFsaWRfa2V5X2lkeCh3ZGV2LCBrZXlfaWR4LCB0eXBlLCBtYWNfYWRkcikpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0c3dpdGNoIChwYXJhbXMtXHUwMDNlY2lwaGVyKSB7XG5AQCAtMTE3Miw3ICsxMjAyLDcgQEAgdm9pZCBjZmc4MDIxMV91cGxvYWRfY29ubmVjdF9rZXlzKHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYpXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyA0OyBpKyspIHtcbiBcdFx0aWYgKCF3ZGV2LVx1MDAzZWNvbm5lY3Rfa2V5cy1cdTAwM2VwYXJhbXNbaV0uY2lwaGVyKVxuIFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRpZiAocmRldl9hZGRfa2V5KHJkZXYsIHdkZXYsIC0xLCBpLCBmYWxzZSwgTlVMTCxcbitcdFx0aWYgKHJkZXZfYWRkX2tleShyZGV2LCB3ZGV2LCAtMSwgaSwgTkw4MDIxMV9LRVlUWVBFX0dST1VQLCBOVUxMLFxuIFx0XHRcdFx0IFx1MDAyNndkZXYtXHUwMDNlY29ubmVjdF9rZXlzLVx1MDAzZXBhcmFtc1tpXSkpIHtcbiBcdFx0XHRuZXRkZXZfZXJyKGRldiwgXCJmYWlsZWQgdG8gc2V0IGtleSAlZFxcblwiLCBpKTtcbiBcdFx0XHRjb250aW51ZTtcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvd2V4dC1jb21wYXQuYyBiL25ldC93aXJlbGVzcy93ZXh0LWNvbXBhdC5jXG5pbmRleCBkNDViYzA4YzBkZTQ5Li5lYzIzODlmNmI4YjE4IDEwMDY0NFxuLS0tIGEvbmV0L3dpcmVsZXNzL3dleHQtY29tcGF0LmNcbisrKyBiL25ldC93aXJlbGVzcy93ZXh0LWNvbXBhdC5jXG5AQCAtNDAxLDYgKzQwMSw4IEBAIHN0YXRpYyBpbnQgY2ZnODAyMTFfc2V0X2VuY3J5cHRpb24oc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuIFx0XHRcdFx0ICAgaW50IGlkeCwgc3RydWN0IGtleV9wYXJhbXMgKnBhcmFtcylcbiB7XG4gXHRzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LVx1MDAzZWllZWU4MDIxMV9wdHI7XG4rXHRlbnVtIG5sODAyMTFfa2V5X3R5cGUga2V5X3R5cGUgPVxuK1x0XHRwYWlyd2lzZSA/IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRSA6IE5MODAyMTFfS0VZVFlQRV9HUk9VUDtcbiBcdGludCBlcnIsIGk7XG4gXHRib29sIHJlam9pbiA9IGZhbHNlO1xuIFxuQEAgLTQ1NCwxMSArNDU2LDExIEBAIHN0YXRpYyBpbnQgY2ZnODAyMTFfc2V0X2VuY3J5cHRpb24oc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuIFx0XHRcdFx0cmVqb2luID0gdHJ1ZTtcbiBcdFx0XHR9XG4gXG4tXHRcdFx0aWYgKCFjZmc4MDIxMV92YWxpZF9rZXlfaWR4KHdkZXYsIGlkeCwgcGFpcndpc2UsIGFkZHIpKVxuK1x0XHRcdGlmICghY2ZnODAyMTFfdmFsaWRfa2V5X2lkeCh3ZGV2LCBpZHgsIGtleV90eXBlLCBhZGRyKSlcbiBcdFx0XHRcdGVyciA9IC1FTk9FTlQ7XG4gXHRcdFx0ZWxzZVxuLVx0XHRcdFx0ZXJyID0gcmRldl9kZWxfa2V5KHJkZXYsIHdkZXYsIC0xLCBpZHgsIHBhaXJ3aXNlLFxuLVx0XHRcdFx0XHRcdCAgIGFkZHIpO1xuK1x0XHRcdFx0ZXJyID0gcmRldl9kZWxfa2V5KHJkZXYsIHdkZXYsIC0xLCBpZHgsXG4rXHRcdFx0XHRcdFx0ICAga2V5X3R5cGUsIGFkZHIpO1xuIFx0XHR9XG4gXHRcdHdkZXYtXHUwMDNld2V4dC5jb25uZWN0LnByaXZhY3kgPSBmYWxzZTtcbiBcdFx0LypcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIwOjAyOjI2LjY5NzU1NjYzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjUyMDcyMDQxOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ0lQIFN1cHBvcnQgaW4gbWFjODAyMTEgYW5kIGNmZzgwMjExOiBGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBkZWZpbml0ZWx5IGFkZGluZyBzaWduaWZpY2FudCBuZXcgZnVuY3Rpb25hbGl0eSBmb3IgQ29udHJvbCBJbnRlZ3JpdHkgUHJvdG9jb2wgKENJUCkgc3VwcG9ydCB3aXRoaW4gdGhlIHdpcmVsZXNzIHN0YWNrLiBJIHNlZSB0aGUgYWRkaXRpb24gb2YgYE5MODAyMTFfS0VZVFlQRV9DSUdUS2AsIGFuZCBtb2RpZmljYXRpb25zIHRvIGBjZmc4MDIxMV9vcHNgIHRvIGFjY29tbW9kYXRlIHRoZSBuZXcgQ0lQIGtleSB0eXBlLCB3aGljaCBuYXR1cmFsbHkgYWx0ZXJzIHRoZSBgYWRkX2tleWAsIGBnZXRfa2V5YCwgYW5kIGBkZWxfa2V5YCBvcGVyYXRpb25zLiBJJ20gYWxzbyBub3RpY2luZyBuZXcgbmV0bGluayBhdHRyaWJ1dGVzIChgTkw4MDIxMV9BVFRSX0FTU09DX0NJUGAsIGBOTDgwMjExX0FUVFJfQ0lQX0NBUEFCSUxJVElFU2AsIGBOTDgwMjExX1NUQV9GTEFHX0NJUGApIGFuZCBtb2RpZmljYXRpb25zIHdpdGhpbiBgbWFjODAyMTFgIGl0c2VsZiB0byBwcm9jZXNzIENJUCBrZXlzLCBpbmNsdWRpbmcgdGhlIGludHJvZHVjdGlvbiBvZiBgSUVFRTgwMjExX0tFWV9GTEFHX0NJUGAsIGFuZCBoYW5kbGluZyB0aGUgYGNpZ3RrYCBhcnJheS5cblxuQSBrZXkgaW5kaWNhdG9yIGZvciBmdXp6aW5nIGlzIHRoZSBpbnRlZ3JhdGlvbiBvZiBDSVAgc3VwcG9ydCBpbnRvIGBtYWM4MDIxMV9od3NpbWAuIFRoZSBwYXRjaCBleHBsaWNpdGx5IGVuYWJsZXMgYG1hYzgwMjExX2h3c2ltYCB0byB0ZXN0IHRoaXMgZmVhdHVyZS4gVGhpcyBtZWFucyBJIGhhdmUgYSByZWFkaWx5IGF2YWlsYWJsZSBlbnZpcm9ubWVudCB0byB2YWxpZGF0ZSBhbmQgZXhwbG9yZSB0aGUgaW1wbGVtZW50YXRpb24uXG5cblRoZSBjaGFuZ2VzIGluIGBubDgwMjExLmNgIHRvIGhhbmRsZSB0aGUgbmV3IGF0dHJpYnV0ZXMgYW5kIGtleSB0eXBlcywgYW5kIHRoZSBhZGp1c3RtZW50cyBpbiBgbWFjODAyMTFgIHRvIHBhcnNlIGBXTEFOX0VJRF9FWFRfQ0lQX0NBUEFgIGFyZSBnb29kIGluZGljYXRpb25zIG9mIGFyZWFzIHRoYXQgd2FycmFudCBhdHRlbnRpb24uIFNvLCBnaXZlbiB0aGVzZSBmdW5jdGlvbmFsIGNoYW5nZXMsIHRoaXMgcGF0Y2ggaXMgYWJzb2x1dGVseSB3b3J0aCBmdXp6aW5nLlxuXG5NeSBwcmltYXJ5IGZvY3VzIHBvaW50cyBmb3IgZnV6emluZyB3b3VsZCBiZSB0aGUgbmV0bGluayBlbnRyeSBwb2ludHMsIHRoZXNlIGFyZSB0aGUgZXhwb3NlZCBlbnRyeSBwb2ludHMuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0OlxuKiAgIGBubDgwMjExX25ld19rZXlgXG4qICAgYG5sODAyMTFfZGVsX2tleWBcbiogICBgbmw4MDIxMV9nZXRfa2V5YFxuKiAgIGBubDgwMjExX3NldF9zdGF0aW9uYFxuKiAgIGBubDgwMjExX25ld19zdGF0aW9uYFxuKiAgIGBubDgwMjExX2Fzc29jaWF0ZWBcblxuVGhlIGtlcm5lbC1pbnRlcm5hbCBlbnRyeSBwb2ludHMgdGhhdCB3b3VsZCBhbHNvIGJlIGludGVyZXN0aW5nIGluY2x1ZGU6XG4qICAgYGllZWU4MDIxMV9rZXlfbGlua2BcbiogICBgaWVlZTgwMjExX2d0a19yZWtleV9hZGRgXG4qICAgYGllZWU4MDIxMV9wdXRfY2lwX2NhcGBcbiogICBgY2ZnODAyMTFfY2lndGtfc3VwcG9ydGVkYFxuKiAgIGBjZmc4MDIxMV92YWxpZF9rZXlfaWR4YFxuKiAgIGBjZmc4MDIxMV92YWxpZGF0ZV9rZXlfc2V0dGluZ3NgXG5cbkluIHRlcm1zIG9mIGNvbmZpZ3VyYXRpb24sIEknbGwgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIGBDT05GSUdfQ0ZHODAyMTFgLCBgQ09ORklHX01BQzgwMjExYCBhbmQgYENPTkZJR19NQUM4MDIxMV9IV1NJTWAgZW5hYmxlZCwgd2hpY2ggYXJlIHN0YW5kYXJkIGZvciB3aXJlbGVzcyB0ZXN0aW5nIGFuZCBmdXp6aW5nLlxuXG5UaGUgY2hhbmdlcyBpbiBgbWFjODAyMTFfaHdzaW1faWZ0eXBlc19leHRfY2FwYWAgdG8gYWRkIGBjaXBfc3VwcG9ydGVkID0gdHJ1ZWAgbWFrZXMgaXQgcGVyZmVjdCBmb3IgbG9jYWwgdGVzdGluZyBvZiB0aGlzIG5ldyBmdW5jdGlvbmFsaXR5LCBzbyB0aGF0IHdpbGwgbWFrZSB2YWxpZGF0aW9uIGEgbG90IGVhc2llci4gQWxsIG9mIHRoaXMgc2hvdWxkIGJlIGRvYWJsZSwgYW5kIGl0IGxvb2tzIGxpa2UgYSBnb29kIHRhcmdldC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIyNDYsIk91dHB1dFRva2VucyI6MzM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcwNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIwOjAyOjUxLjkwNDc2MzI4NFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMyMTEyMzA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNQUM4MDIxMVwiLFxuICAgIFwiQ0ZHODAyMTFcIixcbiAgICBcIk1BQzgwMjExX0hXU0lNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmw4MDIxMV9uZXdfa2V5XCIsXG4gICAgXCJubDgwMjExX2RlbF9rZXlcIixcbiAgICBcIm5sODAyMTFfZ2V0X2tleVwiLFxuICAgIFwibmw4MDIxMV9zZXRfc3RhdGlvblwiLFxuICAgIFwibmw4MDIxMV9uZXdfc3RhdGlvblwiLFxuICAgIFwibmw4MDIxMV9hc3NvY2lhdGVcIixcbiAgICBcImllZWU4MDIxMV9rZXlfbGlua1wiLFxuICAgIFwiaWVlZTgwMjExX2d0a19yZWtleV9hZGRcIixcbiAgICBcImllZWU4MDIxMV9wdXRfY2lwX2NhcFwiLFxuICAgIFwiY2ZnODAyMTFfY2lndGtfc3VwcG9ydGVkXCIsXG4gICAgXCJjZmc4MDIxMV92YWxpZF9rZXlfaWR4XCIsXG4gICAgXCJjZmc4MDIxMV92YWxpZGF0ZV9rZXlfc2V0dGluZ3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIHRoZSBDb250cm9sIEludGVncml0eSBQcm90b2NvbCAoQ0lQKSBpbiBjZmc4MDIxMSBhbmQgbWFjODAyMTEsIGluY2x1ZGluZyBhIG5ldyBrZXkgdHlwZSBgTkw4MDIxMV9LRVlUWVBFX0NJR1RLYCBhbmQgbmV3IG5ldGxpbmsgYXR0cmlidXRlcy4gSXQgbW9kaWZpZXMga2V5IGhhbmRsaW5nIGxvZ2ljIGFjcm9zcyB0aGUgd2lyZWxlc3Mgc3RhY2sgYW5kIHVwZGF0ZXMgYG1hYzgwMjExX2h3c2ltYCB0byBhZHZlcnRpc2UgQ0lQIHN1cHBvcnQsIG1ha2luZyBpdCB0ZXN0YWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRoZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgdmlhIHN0YW5kYXJkIG5sODAyMTEgbmV0bGluayBjb21tYW5kcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNQUM4MDIxMVwiLFxuICAgIFwiQ0ZHODAyMTFcIixcbiAgICBcIk1BQzgwMjExX0hXU0lNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmw4MDIxMV9uZXdfa2V5XCIsXG4gICAgXCJubDgwMjExX2RlbF9rZXlcIixcbiAgICBcIm5sODAyMTFfZ2V0X2tleVwiLFxuICAgIFwibmw4MDIxMV9zZXRfc3RhdGlvblwiLFxuICAgIFwibmw4MDIxMV9uZXdfc3RhdGlvblwiLFxuICAgIFwibmw4MDIxMV9hc3NvY2lhdGVcIixcbiAgICBcImllZWU4MDIxMV9rZXlfbGlua1wiLFxuICAgIFwiaWVlZTgwMjExX2d0a19yZWtleV9hZGRcIixcbiAgICBcImllZWU4MDIxMV9wdXRfY2lwX2NhcFwiLFxuICAgIFwiY2ZnODAyMTFfY2lndGtfc3VwcG9ydGVkXCIsXG4gICAgXCJjZmc4MDIxMV92YWxpZF9rZXlfaWR4XCIsXG4gICAgXCJjZmc4MDIxMV92YWxpZGF0ZV9rZXlfc2V0dGluZ3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIHRoZSBDb250cm9sIEludGVncml0eSBQcm90b2NvbCAoQ0lQKSBpbiBjZmc4MDIxMSBhbmQgbWFjODAyMTEsIGluY2x1ZGluZyBhIG5ldyBrZXkgdHlwZSBgTkw4MDIxMV9LRVlUWVBFX0NJR1RLYCBhbmQgbmV3IG5ldGxpbmsgYXR0cmlidXRlcy4gSXQgbW9kaWZpZXMga2V5IGhhbmRsaW5nIGxvZ2ljIGFjcm9zcyB0aGUgd2lyZWxlc3Mgc3RhY2sgYW5kIHVwZGF0ZXMgYG1hYzgwMjExX2h3c2ltYCB0byBhZHZlcnRpc2UgQ0lQIHN1cHBvcnQsIG1ha2luZyBpdCB0ZXN0YWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRoZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgdmlhIHN0YW5kYXJkIG5sODAyMTEgbmV0bGluayBjb21tYW5kcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowpj4pc[1] Phase: Succeeded StartedAt: 2026-08-01 20:03:03 +0000 UTC FinishedAt: 2026-08-01 20:03:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpj4pc[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-01 20:03:03 +0000 UTC FinishedAt: 2026-08-01 20:03:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpj4pc[2] Phase: Succeeded StartedAt: 2026-08-01 20:03:03 +0000 UTC FinishedAt: 2026-08-01 23:49:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpj4pc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_new_key","nl80211_del_key","nl80211_get_key","nl80211_set_station","nl80211_new_station","nl80211_associate","ieee80211_key_link","ieee80211_gtk_rekey_add","ieee80211_put_cip_cap","cfg80211_cigtk_supported","cfg80211_valid_key_idx","cfg80211_validate_key_settings"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"6c8d765f-7457-43c7-89aa-b020bd662634","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-01 20:03:03 +0000 UTC FinishedAt: 2026-08-01 23:49:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_new_key","nl80211_del_key","nl80211_get_key","nl80211_set_station","nl80211_new_station","nl80211_associate","ieee80211_key_link","ieee80211_gtk_rekey_add","ieee80211_put_cip_cap","cfg80211_cigtk_supported","cfg80211_valid_key_idx","cfg80211_validate_key_settings"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"6c8d765f-7457-43c7-89aa-b020bd662634","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowpj4pc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_new_key","nl80211_del_key","nl80211_get_key","nl80211_set_station","nl80211_new_station","nl80211_associate","ieee80211_key_link","ieee80211_gtk_rekey_add","ieee80211_put_cip_cap","cfg80211_cigtk_supported","cfg80211_valid_key_idx","cfg80211_validate_key_settings"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"6c8d765f-7457-43c7-89aa-b020bd662634","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-01 20:03:03 +0000 UTC FinishedAt: 2026-08-01 20:03:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpj4pc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_new_key","nl80211_del_key","nl80211_get_key","nl80211_set_station","nl80211_new_station","nl80211_associate","ieee80211_key_link","ieee80211_gtk_rekey_add","ieee80211_put_cip_cap","cfg80211_cigtk_supported","cfg80211_valid_key_idx","cfg80211_validate_key_settings"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"6c8d765f-7457-43c7-89aa-b020bd662634","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-01 20:03:03 +0000 UTC FinishedAt: 2026-08-01 20:03:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowpj4pc/series-workflowpj4pc-convert-artifact-519643823/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpj4pc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_new_key","nl80211_del_key","nl80211_get_key","nl80211_set_station","nl80211_new_station","nl80211_associate","ieee80211_key_link","ieee80211_gtk_rekey_add","ieee80211_put_cip_cap","cfg80211_cigtk_supported","cfg80211_valid_key_idx","cfg80211_validate_key_settings"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"6c8d765f-7457-43c7-89aa-b020bd662634","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-01 20:03:14 +0000 UTC FinishedAt: 2026-08-01 20:22:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpj4pc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_new_key","nl80211_del_key","nl80211_get_key","nl80211_set_station","nl80211_new_station","nl80211_associate","ieee80211_key_link","ieee80211_gtk_rekey_add","ieee80211_put_cip_cap","cfg80211_cigtk_supported","cfg80211_valid_key_idx","cfg80211_validate_key_settings"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"6c8d765f-7457-43c7-89aa-b020bd662634","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-01 20:03:14 +0000 UTC FinishedAt: 2026-08-01 20:22:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*878648fd-ff3d-482f-9597-04bec418b079,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowpj4pc/series-workflowpj4pc-convert-artifact-519643823/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "692f0bdc-3e8f-42ad-aa4e-42af854c5ae9", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowpj4pc/series-workflowpj4pc-build-action-3240536181/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpj4pc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_new_key","nl80211_del_key","nl80211_get_key","nl80211_set_station","nl80211_new_station","nl80211_associate","ieee80211_key_link","ieee80211_gtk_rekey_add","ieee80211_put_cip_cap","cfg80211_cigtk_supported","cfg80211_valid_key_idx","cfg80211_validate_key_settings"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"6c8d765f-7457-43c7-89aa-b020bd662634","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-01 20:03:14 +0000 UTC FinishedAt: 2026-08-01 20:22:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*878648fd-ff3d-482f-9597-04bec418b079,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowpj4pc/series-workflowpj4pc-convert-artifact-519643823/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "692f0bdc-3e8f-42ad-aa4e-42af854c5ae9", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowpj4pc/series-workflowpj4pc-build-action-3240536181/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpj4pc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_new_key","nl80211_del_key","nl80211_get_key","nl80211_set_station","nl80211_new_station","nl80211_associate","ieee80211_key_link","ieee80211_gtk_rekey_add","ieee80211_put_cip_cap","cfg80211_cigtk_supported","cfg80211_valid_key_idx","cfg80211_validate_key_settings"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"6c8d765f-7457-43c7-89aa-b020bd662634","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-01 20:22:42 +0000 UTC FinishedAt: 2026-08-01 20:22:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpj4pc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_new_key","nl80211_del_key","nl80211_get_key","nl80211_set_station","nl80211_new_station","nl80211_associate","ieee80211_key_link","ieee80211_gtk_rekey_add","ieee80211_put_cip_cap","cfg80211_cigtk_supported","cfg80211_valid_key_idx","cfg80211_validate_key_settings"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"6c8d765f-7457-43c7-89aa-b020bd662634","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-01 20:22:42 +0000 UTC FinishedAt: 2026-08-01 20:22:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpj4pc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_new_key","nl80211_del_key","nl80211_get_key","nl80211_set_station","nl80211_new_station","nl80211_associate","ieee80211_key_link","ieee80211_gtk_rekey_add","ieee80211_put_cip_cap","cfg80211_cigtk_supported","cfg80211_valid_key_idx","cfg80211_validate_key_settings"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"6c8d765f-7457-43c7-89aa-b020bd662634","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-01 20:22:42 +0000 UTC FinishedAt: 2026-08-01 20:22:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpj4pc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_new_key","nl80211_del_key","nl80211_get_key","nl80211_set_station","nl80211_new_station","nl80211_associate","ieee80211_key_link","ieee80211_gtk_rekey_add","ieee80211_put_cip_cap","cfg80211_cigtk_supported","cfg80211_valid_key_idx","cfg80211_validate_key_settings"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"6c8d765f-7457-43c7-89aa-b020bd662634","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-01 20:22:42 +0000 UTC FinishedAt: 2026-08-01 20:22:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"6c8d765f-7457-43c7-89aa-b020bd662634","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowpj4pc/series-workflowpj4pc-convert-artifact-302183678/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpj4pc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_new_key","nl80211_del_key","nl80211_get_key","nl80211_set_station","nl80211_new_station","nl80211_associate","ieee80211_key_link","ieee80211_gtk_rekey_add","ieee80211_put_cip_cap","cfg80211_cigtk_supported","cfg80211_valid_key_idx","cfg80211_validate_key_settings"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"6c8d765f-7457-43c7-89aa-b020bd662634","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-01 20:22:52 +0000 UTC FinishedAt: 2026-08-01 20:25:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpj4pc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_new_key","nl80211_del_key","nl80211_get_key","nl80211_set_station","nl80211_new_station","nl80211_associate","ieee80211_key_link","ieee80211_gtk_rekey_add","ieee80211_put_cip_cap","cfg80211_cigtk_supported","cfg80211_valid_key_idx","cfg80211_validate_key_settings"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"6c8d765f-7457-43c7-89aa-b020bd662634","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-01 20:22:52 +0000 UTC FinishedAt: 2026-08-01 20:25:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*692f0bdc-3e8f-42ad-aa4e-42af854c5ae9,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowpj4pc/series-workflowpj4pc-build-action-3240536181/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },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-workflowpj4pc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_new_key","nl80211_del_key","nl80211_get_key","nl80211_set_station","nl80211_new_station","nl80211_associate","ieee80211_key_link","ieee80211_gtk_rekey_add","ieee80211_put_cip_cap","cfg80211_cigtk_supported","cfg80211_valid_key_idx","cfg80211_validate_key_settings"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"6c8d765f-7457-43c7-89aa-b020bd662634","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-01 20:25:11 +0000 UTC FinishedAt: 2026-08-01 20:25:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpj4pc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_new_key","nl80211_del_key","nl80211_get_key","nl80211_set_station","nl80211_new_station","nl80211_associate","ieee80211_key_link","ieee80211_gtk_rekey_add","ieee80211_put_cip_cap","cfg80211_cigtk_supported","cfg80211_valid_key_idx","cfg80211_validate_key_settings"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"6c8d765f-7457-43c7-89aa-b020bd662634","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-01 20:25:11 +0000 UTC FinishedAt: 2026-08-01 20:25:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpj4pc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_new_key","nl80211_del_key","nl80211_get_key","nl80211_set_station","nl80211_new_station","nl80211_associate","ieee80211_key_link","ieee80211_gtk_rekey_add","ieee80211_put_cip_cap","cfg80211_cigtk_supported","cfg80211_valid_key_idx","cfg80211_validate_key_settings"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"6c8d765f-7457-43c7-89aa-b020bd662634","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-01 20:25:11 +0000 UTC FinishedAt: 2026-08-01 20:44:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpj4pc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_new_key","nl80211_del_key","nl80211_get_key","nl80211_set_station","nl80211_new_station","nl80211_associate","ieee80211_key_link","ieee80211_gtk_rekey_add","ieee80211_put_cip_cap","cfg80211_cigtk_supported","cfg80211_valid_key_idx","cfg80211_validate_key_settings"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"6c8d765f-7457-43c7-89aa-b020bd662634","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-01 20:25:11 +0000 UTC FinishedAt: 2026-08-01 20:44:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*878648fd-ff3d-482f-9597-04bec418b079,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowpj4pc/series-workflowpj4pc-convert-artifact-302183678/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "6591518a-7b2f-4986-b7e4-7fed629c4562", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowpj4pc/series-workflowpj4pc-build-action-3396976978/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpj4pc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_new_key","nl80211_del_key","nl80211_get_key","nl80211_set_station","nl80211_new_station","nl80211_associate","ieee80211_key_link","ieee80211_gtk_rekey_add","ieee80211_put_cip_cap","cfg80211_cigtk_supported","cfg80211_valid_key_idx","cfg80211_validate_key_settings"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"6c8d765f-7457-43c7-89aa-b020bd662634","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-01 20:25:11 +0000 UTC FinishedAt: 2026-08-01 20:44:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*878648fd-ff3d-482f-9597-04bec418b079,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowpj4pc/series-workflowpj4pc-convert-artifact-302183678/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "6591518a-7b2f-4986-b7e4-7fed629c4562", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowpj4pc/series-workflowpj4pc-build-action-3396976978/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpj4pc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_new_key","nl80211_del_key","nl80211_get_key","nl80211_set_station","nl80211_new_station","nl80211_associate","ieee80211_key_link","ieee80211_gtk_rekey_add","ieee80211_put_cip_cap","cfg80211_cigtk_supported","cfg80211_valid_key_idx","cfg80211_validate_key_settings"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"6c8d765f-7457-43c7-89aa-b020bd662634","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-01 20:44:33 +0000 UTC FinishedAt: 2026-08-01 20:44:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpj4pc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_new_key","nl80211_del_key","nl80211_get_key","nl80211_set_station","nl80211_new_station","nl80211_associate","ieee80211_key_link","ieee80211_gtk_rekey_add","ieee80211_put_cip_cap","cfg80211_cigtk_supported","cfg80211_valid_key_idx","cfg80211_validate_key_settings"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"6c8d765f-7457-43c7-89aa-b020bd662634","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-01 20:44:33 +0000 UTC FinishedAt: 2026-08-01 20:44:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpj4pc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_new_key","nl80211_del_key","nl80211_get_key","nl80211_set_station","nl80211_new_station","nl80211_associate","ieee80211_key_link","ieee80211_gtk_rekey_add","ieee80211_put_cip_cap","cfg80211_cigtk_supported","cfg80211_valid_key_idx","cfg80211_validate_key_settings"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"6c8d765f-7457-43c7-89aa-b020bd662634","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-01 20:44:33 +0000 UTC FinishedAt: 2026-08-01 20:46:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpj4pc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_new_key","nl80211_del_key","nl80211_get_key","nl80211_set_station","nl80211_new_station","nl80211_associate","ieee80211_key_link","ieee80211_gtk_rekey_add","ieee80211_put_cip_cap","cfg80211_cigtk_supported","cfg80211_valid_key_idx","cfg80211_validate_key_settings"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"6c8d765f-7457-43c7-89aa-b020bd662634","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-01 20:44:33 +0000 UTC FinishedAt: 2026-08-01 20:46:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6591518a-7b2f-4986-b7e4-7fed629c4562,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowpj4pc/series-workflowpj4pc-build-action-3396976978/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },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-workflowpj4pc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_new_key","nl80211_del_key","nl80211_get_key","nl80211_set_station","nl80211_new_station","nl80211_associate","ieee80211_key_link","ieee80211_gtk_rekey_add","ieee80211_put_cip_cap","cfg80211_cigtk_supported","cfg80211_valid_key_idx","cfg80211_validate_key_settings"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"6c8d765f-7457-43c7-89aa-b020bd662634","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-01 20:46:37 +0000 UTC FinishedAt: 2026-08-01 20:46:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpj4pc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_new_key","nl80211_del_key","nl80211_get_key","nl80211_set_station","nl80211_new_station","nl80211_associate","ieee80211_key_link","ieee80211_gtk_rekey_add","ieee80211_put_cip_cap","cfg80211_cigtk_supported","cfg80211_valid_key_idx","cfg80211_validate_key_settings"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"6c8d765f-7457-43c7-89aa-b020bd662634","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-01 20:46:38 +0000 UTC FinishedAt: 2026-08-01 23:49:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpj4pc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_new_key","nl80211_del_key","nl80211_get_key","nl80211_set_station","nl80211_new_station","nl80211_associate","ieee80211_key_link","ieee80211_gtk_rekey_add","ieee80211_put_cip_cap","cfg80211_cigtk_supported","cfg80211_valid_key_idx","cfg80211_validate_key_settings"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"6c8d765f-7457-43c7-89aa-b020bd662634","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-01 20:46:38 +0000 UTC FinishedAt: 2026-08-01 20:46:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpj4pc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_new_key","nl80211_del_key","nl80211_get_key","nl80211_set_station","nl80211_new_station","nl80211_associate","ieee80211_key_link","ieee80211_gtk_rekey_add","ieee80211_put_cip_cap","cfg80211_cigtk_supported","cfg80211_valid_key_idx","cfg80211_validate_key_settings"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"6c8d765f-7457-43c7-89aa-b020bd662634","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-01 20:46:41 +0000 UTC FinishedAt: 2026-08-01 23:49:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_new_key","nl80211_del_key","nl80211_get_key","nl80211_set_station","nl80211_new_station","nl80211_associate","ieee80211_key_link","ieee80211_gtk_rekey_add","ieee80211_put_cip_cap","cfg80211_cigtk_supported","cfg80211_valid_key_idx","cfg80211_validate_key_settings"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*692f0bdc-3e8f-42ad-aa4e-42af854c5ae9,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6591518a-7b2f-4986-b7e4-7fed629c4562,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowpj4pc/series-workflowpj4pc-build-action-3240536181/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowpj4pc/series-workflowpj4pc-build-action-3396976978/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowpj4pc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_new_key","nl80211_del_key","nl80211_get_key","nl80211_set_station","nl80211_new_station","nl80211_associate","ieee80211_key_link","ieee80211_gtk_rekey_add","ieee80211_put_cip_cap","cfg80211_cigtk_supported","cfg80211_valid_key_idx","cfg80211_validate_key_settings"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"6c8d765f-7457-43c7-89aa-b020bd662634","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-01 20:46:41 +0000 UTC FinishedAt: 2026-08-01 20:47:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpj4pc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_new_key","nl80211_del_key","nl80211_get_key","nl80211_set_station","nl80211_new_station","nl80211_associate","ieee80211_key_link","ieee80211_gtk_rekey_add","ieee80211_put_cip_cap","cfg80211_cigtk_supported","cfg80211_valid_key_idx","cfg80211_validate_key_settings"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"6c8d765f-7457-43c7-89aa-b020bd662634","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-01 20:46:41 +0000 UTC FinishedAt: 2026-08-01 20:47:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_new_key","nl80211_del_key","nl80211_get_key","nl80211_set_station","nl80211_new_station","nl80211_associate","ieee80211_key_link","ieee80211_gtk_rekey_add","ieee80211_put_cip_cap","cfg80211_cigtk_supported","cfg80211_valid_key_idx","cfg80211_validate_key_settings"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowpj4pc/series-workflowpj4pc-convert-artifact-2892446723/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpj4pc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_new_key","nl80211_del_key","nl80211_get_key","nl80211_set_station","nl80211_new_station","nl80211_associate","ieee80211_key_link","ieee80211_gtk_rekey_add","ieee80211_put_cip_cap","cfg80211_cigtk_supported","cfg80211_valid_key_idx","cfg80211_validate_key_settings"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"6c8d765f-7457-43c7-89aa-b020bd662634","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-01 20:46:41 +0000 UTC FinishedAt: 2026-08-01 20:46:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpj4pc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_new_key","nl80211_del_key","nl80211_get_key","nl80211_set_station","nl80211_new_station","nl80211_associate","ieee80211_key_link","ieee80211_gtk_rekey_add","ieee80211_put_cip_cap","cfg80211_cigtk_supported","cfg80211_valid_key_idx","cfg80211_validate_key_settings"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"6c8d765f-7457-43c7-89aa-b020bd662634","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-01 20:47:22 +0000 UTC FinishedAt: 2026-08-01 23:49:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpj4pc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_new_key","nl80211_del_key","nl80211_get_key","nl80211_set_station","nl80211_new_station","nl80211_associate","ieee80211_key_link","ieee80211_gtk_rekey_add","ieee80211_put_cip_cap","cfg80211_cigtk_supported","cfg80211_valid_key_idx","cfg80211_validate_key_settings"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"6c8d765f-7457-43c7-89aa-b020bd662634","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-01 20:47:22 +0000 UTC FinishedAt: 2026-08-01 23:49:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*692f0bdc-3e8f-42ad-aa4e-42af854c5ae9,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6591518a-7b2f-4986-b7e4-7fed629c4562,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowpj4pc/series-workflowpj4pc-build-action-3240536181/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowpj4pc/series-workflowpj4pc-build-action-3396976978/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowpj4pc/series-workflowpj4pc-convert-artifact-2892446723/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}