Name: series-workflowwrw57 Phase: Succeeded StartedAt: 2026-07-16 00:17:27 +0000 UTC FinishedAt: 2026-07-16 05:09:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrw57[0] Phase: Succeeded StartedAt: 2026-07-16 00:17:27 +0000 UTC FinishedAt: 2026-07-16 00:48:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrw57[0].run-triage Phase: Succeeded StartedAt: 2026-07-16 00:17:27 +0000 UTC FinishedAt: 2026-07-16 00:48:22 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "ac798f757d6475dc6fee2ec899980d6740714596", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CFG80211", "CFG80211_WEXT", "MAC80211_HWSIM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "ac798f757d6475dc6fee2ec899980d6740714596", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CFG80211", "CFG80211_WEXT", "MAC80211_HWSIM" ], "series_id": "3d212928-3684-44c3-bda8-e48d52315bb3" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nl80211_get_key", "nl80211_del_key", "cfg80211_valid_key_idx", "cfg80211_validate_key_settings", "cfg80211_set_encryption" ], "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+CgkJCTx0ZD4yMDI2LzA3LzE2IDAwOjQ3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NGRzgwMjExJiMzNDssCiAgICAmIzM0O0NGRzgwMjExX1dFWFQmIzM0OywKICAgICYjMzQ7TUFDODAyMTFfSFdTSU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtubDgwMjExX2dldF9rZXkmIzM0OywKICAgICYjMzQ7bmw4MDIxMV9kZWxfa2V5JiMzNDssCiAgICAmIzM0O2NmZzgwMjExX3ZhbGlkX2tleV9pZHgmIzM0OywKICAgICYjMzQ7Y2ZnODAyMTFfdmFsaWRhdGVfa2V5X3NldHRpbmdzJiMzNDssCiAgICAmIzM0O2NmZzgwMjExX3NldF9lbmNyeXB0aW9uJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2dpYyBmb3IgdmFsaWRhdGluZyBrZXkgaW5kaWNlcyBpbiB0aGUgY2ZnODAyMTEgc3Vic3lzdGVtLCBhZGRpbmcgaW50ZXJmYWNlIHR5cGUtc3BlY2lmaWMgY2hlY2tzIGFuZCBjaGFuZ2luZyB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlIHRvIHRha2UgYHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXZgLiBUaGlzIGFmZmVjdHMgbmV0bGluayAobmw4MDIxMSkgYW5kIHdpcmVsZXNzIGV4dGVuc2lvbnMgKHdleHQpIHBhdGhzIGZvciBnZXR0aW5nLCBkZWxldGluZywgYW5kIHNldHRpbmcga2V5cy4gVGhlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UsIG1ha2luZyB0aGVtIHN1aXRhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDAwOjQ3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZjViZDFkNmI5OWZjMzBjMDdiOTQwZDA0NWZkNzQzMzNmMTc3YmVkNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDE2IDAwOjQ3OjM3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9jb3JlLmggYi9uZXQvd2lyZWxlc3MvY29yZS5oXG5pbmRleCBkZjQ3ZWQ2MjA4YTUwZC4uMzk5MDM3NTE0OTQzZDkgMTAwNjQ0XG4tLS0gYS9uZXQvd2lyZWxlc3MvY29yZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvd2lyZWxlc3MvY29yZS5oXG5AQCAtNDQzLDggJiM0Mzs0NDMsOSBAQCB2b2lkIGNmZzgwMjExX3NtZV9hYmFuZG9uX2Fzc29jKHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYpO1xuIFxuIC8qIGludGVybmFsIGhlbHBlcnMgKi9cbiBib29sIGNmZzgwMjExX3N1cHBvcnRlZF9jaXBoZXJfc3VpdGUoc3RydWN0IHdpcGh5ICp3aXBoeSwgdTMyIGNpcGhlcik7XG4tYm9vbCBjZmc4MDIxMV92YWxpZF9rZXlfaWR4KHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbi1cdFx0XHQgICAgaW50IGtleV9pZHgsIGJvb2wgcGFpcndpc2UpO1xuJiM0Mztib29sIGNmZzgwMjExX3ZhbGlkX2tleV9pZHgoc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcbiYjNDM7XHRcdFx0ICAgIGludCBrZXlfaWR4LCBib29sIHBhaXJ3aXNlLFxuJiM0MztcdFx0XHQgICAgY29uc3QgdTggKm1hY19hZGRyKTtcbiBpbnQgY2ZnODAyMTFfdmFsaWRhdGVfa2V5X3NldHRpbmdzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbiBcdFx0XHRcdCAgIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4gXHRcdFx0XHQgICBzdHJ1Y3Qga2V5X3BhcmFtcyAqcGFyYW1zLCBpbnQga2V5X2lkeCxcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jIGIvbmV0L3dpcmVsZXNzL25sODAyMTEuY1xuaW5kZXggMjQyMDcxYWQxMGQ2YzkuLjk5YTFjMDE3NGJkYmYyIDEwMDY0NFxuLS0tIGEvbmV0L3dpcmVsZXNzL25sODAyMTEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3dpcmVsZXNzL25sODAyMTEuY1xuQEAgLTU0MDksNyAmIzQzOzU0MDksNyBAQCBzdGF0aWMgaW50IG5sODAyMTFfZ2V0X2tleShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0aWYgKCFyZGV2LVx1MDAzZW9wcy1cdTAwM2VnZXRfa2V5KVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXG4tXHRpZiAoIXBhaXJ3aXNlIFx1MDAyNlx1MDAyNiBtYWNfYWRkciBcdTAwMjZcdTAwMjYgIShyZGV2LVx1MDAzZXdpcGh5LmZsYWdzIFx1MDAyNiBXSVBIWV9GTEFHX0lCU1NfUlNOKSlcbiYjNDM7XHRpZiAoIWNmZzgwMjExX3ZhbGlkX2tleV9pZHgod2Rldiwga2V5X2lkeCwgcGFpcndpc2UsIG1hY19hZGRyKSlcbiBcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gXG4gXHRtc2cgPSBubG1zZ19uZXcoTkxNU0dfREVGQVVMVF9TSVpFLCBHRlBfS0VSTkVMKTtcbkBAIC01NjYzLDggJiM0Mzs1NjYzLDkgQEAgc3RhdGljIGludCBubDgwMjExX2RlbF9rZXkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdCAgICBrZXkudHlwZSAhPSBOTDgwMjExX0tFWVRZUEVfR1JPVVApXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0aWYgKCFjZmc4MDIxMV92YWxpZF9rZXlfaWR4KHJkZXYsIGtleS5pZHgsXG4tXHRcdFx0XHQgICAga2V5LnR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFKSlcbiYjNDM7XHRpZiAoIWNmZzgwMjExX3ZhbGlkX2tleV9pZHgod2Rldiwga2V5LmlkeCxcbiYjNDM7XHRcdFx0XHQgICAga2V5LnR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFLFxuJiM0MztcdFx0XHRcdCAgICBtYWNfYWRkcikpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0aWYgKCFyZGV2LVx1MDAzZW9wcy1cdTAwM2VkZWxfa2V5KVxuQEAgLTU2NzIsMTAgJiM0Mzs1NjczLDYgQEAgc3RhdGljIGludCBubDgwMjExX2RlbF9rZXkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcbiBcdGVyciA9IG5sODAyMTFfa2V5X2FsbG93ZWQod2Rldik7XG4gXG4tXHRpZiAoa2V5LnR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX0dST1VQIFx1MDAyNlx1MDAyNiBtYWNfYWRkciBcdTAwMjZcdTAwMjZcbi1cdCAgICAhKHJkZXYtXHUwMDNld2lwaHkuZmxhZ3MgXHUwMDI2IFdJUEhZX0ZMQUdfSUJTU19SU04pKVxuLVx0XHRlcnIgPSAtRU5PRU5UO1xuLVxuIFx0aWYgKCFlcnIpXG4gXHRcdGVyciA9IG5sODAyMTFfdmFsaWRhdGVfa2V5X2xpbmtfaWQoaW5mbywgd2RldiwgbGlua19pZCxcbiBcdFx0XHRcdGtleS50eXBlID09IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRSk7XG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3V0aWwuYyBiL25ldC93aXJlbGVzcy91dGlsLmNcbmluZGV4IDI0NTI3YmYzMjFiMmExLi4zZTU4NGQwY2EzZTI2NiAxMDA2NDRcbi0tLSBhL25ldC93aXJlbGVzcy91dGlsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC93aXJlbGVzcy91dGlsLmNcbkBAIC0yNDEsMTAgJiM0MzsyNDEsOCBAQCBib29sIGNmZzgwMjExX3N1cHBvcnRlZF9jaXBoZXJfc3VpdGUoc3RydWN0IHdpcGh5ICp3aXBoeSwgdTMyIGNpcGhlcilcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4tc3RhdGljIGJvb2xcbi1jZmc4MDIxMV9pZ3RrX2NpcGhlcl9zdXBwb3J0ZWQoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2KVxuJiM0MztzdGF0aWMgYm9vbCBjZmc4MDIxMV9pZ3RrX2NpcGhlcl9zdXBwb3J0ZWQoc3RydWN0IHdpcGh5ICp3aXBoeSlcbiB7XG4tXHRzdHJ1Y3Qgd2lwaHkgKndpcGh5ID0gXHUwMDI2cmRldi1cdTAwM2V3aXBoeTtcbiBcdGludCBpO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd2lwaHktXHUwMDNlbl9jaXBoZXJfc3VpdGVzOyBpJiM0MzsmIzQzOykge1xuQEAgLTI2MCwyNyAmIzQzOzI1OCw4NiBAQCBjZmc4MDIxMV9pZ3RrX2NpcGhlcl9zdXBwb3J0ZWQoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2KVxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbi1ib29sIGNmZzgwMjExX3ZhbGlkX2tleV9pZHgoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuLVx0XHRcdCAgICBpbnQga2V5X2lkeCwgYm9vbCBwYWlyd2lzZSlcbiYjNDM7Ym9vbCBjZmc4MDIxMV92YWxpZF9rZXlfaWR4KHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4mIzQzO1x0XHRcdCAgICBpbnQga2V5X2lkeCwgYm9vbCBwYWlyd2lzZSxcbiYjNDM7XHRcdFx0ICAgIGNvbnN0IHU4ICptYWNfYWRkcilcbiB7XG4tXHRpbnQgbWF4X2tleV9pZHg7XG4tXG4tXHRpZiAocGFpcndpc2UpXG4tXHRcdG1heF9rZXlfaWR4ID0gMztcbi1cdGVsc2UgaWYgKHdpcGh5X2V4dF9mZWF0dXJlX2lzc2V0KFx1MDAyNnJkZXYtXHUwMDNld2lwaHksXG4tXHRcdFx0XHRcdCBOTDgwMjExX0VYVF9GRUFUVVJFX0JFQUNPTl9QUk9URUNUSU9OKSB8fFxuLVx0XHQgd2lwaHlfZXh0X2ZlYXR1cmVfaXNzZXQoXHUwMDI2cmRldi1cdTAwM2V3aXBoeSxcbi1cdFx0XHRcdFx0IE5MODAyMTFfRVhUX0ZFQVRVUkVfQkVBQ09OX1BST1RFQ1RJT05fQ0xJRU5UKSlcbi1cdFx0bWF4X2tleV9pZHggPSA3O1xuLVx0ZWxzZSBpZiAoY2ZnODAyMTFfaWd0a19jaXBoZXJfc3VwcG9ydGVkKHJkZXYpKVxuLVx0XHRtYXhfa2V5X2lkeCA9IDU7XG4tXHRlbHNlXG4tXHRcdG1heF9rZXlfaWR4ID0gMztcbiYjNDM7XHRpZiAoV0FSTl9PTighd2RldikpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4gXG4tXHRpZiAoa2V5X2lkeCBcdTAwM2MgMCB8fCBrZXlfaWR4IFx1MDAzZSBtYXhfa2V5X2lkeClcbiYjNDM7XHRpZiAoa2V5X2lkeCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0cmV0dXJuIHRydWU7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBDYW4mIzM5O3QgZGlmZmVyZW50aWF0ZSBjaXBoZXJzIGhlcmUgc28gYWxsb3cgMC4uMy5cbiYjNDM7XHQgKiBQYWlyd2lzZSBrZXlzIG11c3QgYmUgZm9yIGEgc3RhdGlvbiAoTUFDIGFkZHJlc3MgZ2l2ZW4pLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChwYWlyd2lzZSkge1xuJiM0MztcdFx0aWYgKCFtYWNfYWRkcilcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRcdHJldHVybiBrZXlfaWR4IFx1MDAzYyA0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBGb3IgZ3JvdXAga2V5cywgbWFjX2FkZHI9PU5VTEwgbWVhbnMgc2V0dGluZyBhIGdyb3VwIGtleVxuJiM0MztcdCAqIGZvciBUWCwgd2hpY2ggaXMgb25seSBzdXBwb3J0ZWQgb24gc29tZSBpbnRlcmZhY2UgdHlwZXMsXG4mIzQzO1x0ICogZXhjZXB0IGZvciBTVEFUSU9OL1AyUF9DTElFTlQsIHdoZXJlIGl0JiMzOTtzIHNldHRpbmcgdGhlIFJYXG4mIzQzO1x0ICoga2V5IHdpdGggdGhlIGN1cnJlbnQgQVAgKGZvciBsZWdhY3kgcmVhc29ucy4pXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBBcGFydCBmcm9tIHRoYXQgZXhjZXB0aW9uLCBhIG5vbi1OVUxMIG1hY19hZGRyIG1lYW5zIFJYXG4mIzQzO1x0ICoga2V5IGJlaW5nIHNldC5cbiYjNDM7XHQgKi9cbiYjNDM7XG4mIzQzO1x0c3dpdGNoICh3ZGV2LVx1MDAzZWlmdHlwZSkge1xuJiM0MztcdGNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6XG4mIzQzO1x0XHRpZiAoISh3ZGV2LVx1MDAzZXdpcGh5LVx1MDAzZWZsYWdzIFx1MDAyNiBXSVBIWV9GTEFHX0lCU1NfUlNOKSlcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdFx0ZmFsbHRocm91Z2g7XG4mIzQzO1x0Y2FzZSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UOlxuJiM0MztcdFx0Lyogbm8gc3VwcG9ydCBmb3IgSUdUSy9CSUdUSyAoeWV0PykgKi9cbiYjNDM7XHRcdHJldHVybiBrZXlfaWR4IFx1MDAzYyA0O1xuJiM0MztcdGNhc2UgTkw4MDIxMV9JRlRZUEVfTkFOX0RBVEE6XG4mIzQzO1x0XHQvKiB0aGVzZSBhbHdheXMgbmVlZCB0byBzdXBwb3J0IHBlci1TVEEgR1RLICovXG4mIzQzO1x0XHRyZXR1cm4ga2V5X2lkeCBcdTAwM2MgNDtcbiYjNDM7XHRjYXNlIE5MODAyMTFfSUZUWVBFX05BTjpcbiYjNDM7XHRcdC8qIG5vIGRhdGEgKi9cbiYjNDM7XHRcdGlmIChrZXlfaWR4IFx1MDAzYyA0KVxuJiM0MztcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0XHQvKiBOQU4gcmV1c2VkIHRoaXMgZmxhZyAqL1xuJiM0MztcdFx0aWYgKHdpcGh5X2V4dF9mZWF0dXJlX2lzc2V0KHdkZXYtXHUwMDNld2lwaHksXG4mIzQzO1x0XHRcdFx0XHQgICAgTkw4MDIxMV9FWFRfRkVBVFVSRV9CRUFDT05fUFJPVEVDVElPTikpXG4mIzQzO1x0XHRcdHJldHVybiBrZXlfaWR4IFx1MDAzYz0gNztcbiYjNDM7XHRcdHJldHVybiBrZXlfaWR4IFx1MDAzYz0gNTtcbiYjNDM7XHRjYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046XG4mIzQzO1x0Y2FzZSBOTDgwMjExX0lGVFlQRV9QMlBfQ0xJRU5UOlxuJiM0MztcdFx0Lyogc2VlIG5vdGUgYWJvdXQgZXhjZXB0aW9uIGFib3ZlICovXG4mIzQzO1x0XHRpZiAobWFjX2FkZHIpXG4mIzQzO1x0XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRcdC8qIEJJR1RLIHN1cHBvcnQgaW1wbGllcyBJR1RLIHN1cHBvcnQgKi9cbiYjNDM7XHRcdGlmICh3aXBoeV9leHRfZmVhdHVyZV9pc3NldCh3ZGV2LVx1MDAzZXdpcGh5LFxuJiM0MztcdFx0XHRcdFx0ICAgIE5MODAyMTFfRVhUX0ZFQVRVUkVfQkVBQ09OX1BST1RFQ1RJT05fQ0xJRU5UKSlcbiYjNDM7XHRcdFx0cmV0dXJuIGtleV9pZHggXHUwMDNjPSA3O1xuJiM0MztcdFx0ZmFsbHRocm91Z2g7XG4mIzQzO1x0Y2FzZSBOTDgwMjExX0lGVFlQRV9BUDpcbiYjNDM7XHRjYXNlIE5MODAyMTFfSUZUWVBFX1AyUF9HTzpcbiYjNDM7XHRcdC8qIG5vIFJYIHdpdGggW0JdSUdUSyAqL1xuJiM0MztcdFx0aWYgKG1hY19hZGRyKVxuJiM0MztcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0XHRpZiAod2lwaHlfZXh0X2ZlYXR1cmVfaXNzZXQod2Rldi1cdTAwM2V3aXBoeSxcbiYjNDM7XHRcdFx0XHRcdCAgICBOTDgwMjExX0VYVF9GRUFUVVJFX0JFQUNPTl9QUk9URUNUSU9OKSlcbiYjNDM7XHRcdFx0cmV0dXJuIGtleV9pZHggXHUwMDNjPSA3O1xuJiM0MztcdFx0ZmFsbHRocm91Z2g7XG4mIzQzO1x0Y2FzZSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOOlxuJiM0MztcdFx0Lyogbm8gUlggd2l0aCBHVEsgKi9cbiYjNDM7XHRcdGlmIChtYWNfYWRkcilcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdFx0aWYgKGNmZzgwMjExX2lndGtfY2lwaGVyX3N1cHBvcnRlZCh3ZGV2LVx1MDAzZXdpcGh5KSlcbiYjNDM7XHRcdFx0cmV0dXJuIGtleV9pZHggXHUwMDNjPSA1O1xuJiM0MztcdFx0cmV0dXJuIGtleV9pZHggXHUwMDNjPSAzO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0fVxuIH1cbiBcbiBpbnQgY2ZnODAyMTFfdmFsaWRhdGVfa2V5X3NldHRpbmdzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbkBAIC0yODgsMTMgJiM0MzszNDUsNyBAQCBpbnQgY2ZnODAyMTFfdmFsaWRhdGVfa2V5X3NldHRpbmdzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbiBcdFx0XHRcdCAgIHN0cnVjdCBrZXlfcGFyYW1zICpwYXJhbXMsIGludCBrZXlfaWR4LFxuIFx0XHRcdFx0ICAgYm9vbCBwYWlyd2lzZSwgY29uc3QgdTggKm1hY19hZGRyKVxuIHtcbi1cdGlmICghY2ZnODAyMTFfdmFsaWRfa2V5X2lkeChyZGV2LCBrZXlfaWR4LCBwYWlyd2lzZSkpXG4tXHRcdHJldHVybiAtRUlOVkFMO1xuLVxuLVx0aWYgKCFwYWlyd2lzZSBcdTAwMjZcdTAwMjYgbWFjX2FkZHIgXHUwMDI2XHUwMDI2ICEocmRldi1cdTAwM2V3aXBoeS5mbGFncyBcdTAwMjYgV0lQSFlfRkxBR19JQlNTX1JTTikpXG4tXHRcdHJldHVybiAtRUlOVkFMO1xuLVxuLVx0aWYgKHBhaXJ3aXNlIFx1MDAyNlx1MDAyNiAhbWFjX2FkZHIpXG4mIzQzO1x0aWYgKCFjZmc4MDIxMV92YWxpZF9rZXlfaWR4KHdkZXYsIGtleV9pZHgsIHBhaXJ3aXNlLCBtYWNfYWRkcikpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0c3dpdGNoIChwYXJhbXMtXHUwMDNlY2lwaGVyKSB7XG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3dleHQtY29tcGF0LmMgYi9uZXQvd2lyZWxlc3Mvd2V4dC1jb21wYXQuY1xuaW5kZXggNWRiZjNlZjRiMjU3ZTIuLmQ0NWJjMDhjMGRlNDk3IDEwMDY0NFxuLS0tIGEvbmV0L3dpcmVsZXNzL3dleHQtY29tcGF0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC93aXJlbGVzcy93ZXh0LWNvbXBhdC5jXG5AQCAtNDU0LDggJiM0Mzs0NTQsNyBAQCBzdGF0aWMgaW50IGNmZzgwMjExX3NldF9lbmNyeXB0aW9uKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbiBcdFx0XHRcdHJlam9pbiA9IHRydWU7XG4gXHRcdFx0fVxuIFxuLVx0XHRcdGlmICghcGFpcndpc2UgXHUwMDI2XHUwMDI2IGFkZHIgXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICAgICEocmRldi1cdTAwM2V3aXBoeS5mbGFncyBcdTAwMjYgV0lQSFlfRkxBR19JQlNTX1JTTikpXG4mIzQzO1x0XHRcdGlmICghY2ZnODAyMTFfdmFsaWRfa2V5X2lkeCh3ZGV2LCBpZHgsIHBhaXJ3aXNlLCBhZGRyKSlcbiBcdFx0XHRcdGVyciA9IC1FTk9FTlQ7XG4gXHRcdFx0ZWxzZVxuIFx0XHRcdFx0ZXJyID0gcmRldl9kZWxfa2V5KHJkZXYsIHdkZXYsIC0xLCBpZHgsIHBhaXJ3aXNlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDAwOjQ3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NGRzgwMjExJiMzNDssCiAgICAmIzM0O0NGRzgwMjExX1dFWFQmIzM0OywKICAgICYjMzQ7TUFDODAyMTFfSFdTSU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtubDgwMjExX2dldF9rZXkmIzM0OywKICAgICYjMzQ7bmw4MDIxMV9kZWxfa2V5JiMzNDssCiAgICAmIzM0O2NmZzgwMjExX3ZhbGlkX2tleV9pZHgmIzM0OywKICAgICYjMzQ7Y2ZnODAyMTFfdmFsaWRhdGVfa2V5X3NldHRpbmdzJiMzNDssCiAgICAmIzM0O2NmZzgwMjExX3NldF9lbmNyeXB0aW9uJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2dpYyBmb3IgdmFsaWRhdGluZyBrZXkgaW5kaWNlcyBpbiB0aGUgY2ZnODAyMTEgc3Vic3lzdGVtLCBhZGRpbmcgaW50ZXJmYWNlIHR5cGUtc3BlY2lmaWMgY2hlY2tzIGFuZCBjaGFuZ2luZyB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlIHRvIHRha2UgYHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXZgLiBUaGlzIGFmZmVjdHMgbmV0bGluayAobmw4MDIxMSkgYW5kIHdpcmVsZXNzIGV4dGVuc2lvbnMgKHdleHQpIHBhdGhzIGZvciBnZXR0aW5nLCBkZWxldGluZywgYW5kIHNldHRpbmcga2V5cy4gVGhlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UsIG1ha2luZyB0aGVtIHN1aXRhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmNWJkMWQ2Yjk5ZmMzMGMwN2I5NDBkMDQ1ZmQ3NDMzM2YxNzdiZWQ2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBKdWwgMTYgMDA6NDc6MzcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvY29yZS5oIGIvbmV0L3dpcmVsZXNzL2NvcmUuaAppbmRleCBkZjQ3ZWQ2MjA4YTUwZC4uMzk5MDM3NTE0OTQzZDkgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9jb3JlLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3dpcmVsZXNzL2NvcmUuaApAQCAtNDQzLDggJiM0Mzs0NDMsOSBAQCB2b2lkIGNmZzgwMjExX3NtZV9hYmFuZG9uX2Fzc29jKHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYpOwogCiAvKiBpbnRlcm5hbCBoZWxwZXJzICovCiBib29sIGNmZzgwMjExX3N1cHBvcnRlZF9jaXBoZXJfc3VpdGUoc3RydWN0IHdpcGh5ICp3aXBoeSwgdTMyIGNpcGhlcik7Ci1ib29sIGNmZzgwMjExX3ZhbGlkX2tleV9pZHgoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAotCQkJICAgIGludCBrZXlfaWR4LCBib29sIHBhaXJ3aXNlKTsKJiM0Mztib29sIGNmZzgwMjExX3ZhbGlkX2tleV9pZHgoc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwKJiM0MzsJCQkgICAgaW50IGtleV9pZHgsIGJvb2wgcGFpcndpc2UsCiYjNDM7CQkJICAgIGNvbnN0IHU4ICptYWNfYWRkcik7CiBpbnQgY2ZnODAyMTFfdmFsaWRhdGVfa2V5X3NldHRpbmdzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKIAkJCQkgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LAogCQkJCSAgIHN0cnVjdCBrZXlfcGFyYW1zICpwYXJhbXMsIGludCBrZXlfaWR4LApkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL25sODAyMTEuYyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmMKaW5kZXggMjQyMDcxYWQxMGQ2YzkuLjk5YTFjMDE3NGJkYmYyIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmMKQEAgLTU0MDksNyAmIzQzOzU0MDksNyBAQCBzdGF0aWMgaW50IG5sODAyMTFfZ2V0X2tleShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCWlmICghcmRldi0mZ3Q7b3BzLSZndDtnZXRfa2V5KQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKLQlpZiAoIXBhaXJ3aXNlICZhbXA7JmFtcDsgbWFjX2FkZHIgJmFtcDsmYW1wOyAhKHJkZXYtJmd0O3dpcGh5LmZsYWdzICZhbXA7IFdJUEhZX0ZMQUdfSUJTU19SU04pKQomIzQzOwlpZiAoIWNmZzgwMjExX3ZhbGlkX2tleV9pZHgod2Rldiwga2V5X2lkeCwgcGFpcndpc2UsIG1hY19hZGRyKSkKIAkJcmV0dXJuIC1FTk9FTlQ7CiAKIAltc2cgPSBubG1zZ19uZXcoTkxNU0dfREVGQVVMVF9TSVpFLCBHRlBfS0VSTkVMKTsKQEAgLTU2NjMsOCAmIzQzOzU2NjMsOSBAQCBzdGF0aWMgaW50IG5sODAyMTFfZGVsX2tleShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCSAgICBrZXkudHlwZSAhPSBOTDgwMjExX0tFWVRZUEVfR1JPVVApCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKCFjZmc4MDIxMV92YWxpZF9rZXlfaWR4KHJkZXYsIGtleS5pZHgsCi0JCQkJICAgIGtleS50eXBlID09IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRSkpCiYjNDM7CWlmICghY2ZnODAyMTFfdmFsaWRfa2V5X2lkeCh3ZGV2LCBrZXkuaWR4LAomIzQzOwkJCQkgICAga2V5LnR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFLAomIzQzOwkJCQkgICAgbWFjX2FkZHIpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmICghcmRldi0mZ3Q7b3BzLSZndDtkZWxfa2V5KQpAQCAtNTY3MiwxMCAmIzQzOzU2NzMsNiBAQCBzdGF0aWMgaW50IG5sODAyMTFfZGVsX2tleShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCiAJZXJyID0gbmw4MDIxMV9rZXlfYWxsb3dlZCh3ZGV2KTsKIAotCWlmIChrZXkudHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfR1JPVVAgJmFtcDsmYW1wOyBtYWNfYWRkciAmYW1wOyZhbXA7Ci0JICAgICEocmRldi0mZ3Q7d2lwaHkuZmxhZ3MgJmFtcDsgV0lQSFlfRkxBR19JQlNTX1JTTikpCi0JCWVyciA9IC1FTk9FTlQ7Ci0KIAlpZiAoIWVycikKIAkJZXJyID0gbmw4MDIxMV92YWxpZGF0ZV9rZXlfbGlua19pZChpbmZvLCB3ZGV2LCBsaW5rX2lkLAogCQkJCWtleS50eXBlID09IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRSk7CmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvdXRpbC5jIGIvbmV0L3dpcmVsZXNzL3V0aWwuYwppbmRleCAyNDUyN2JmMzIxYjJhMS4uM2U1ODRkMGNhM2UyNjYgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy91dGlsLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3dpcmVsZXNzL3V0aWwuYwpAQCAtMjQxLDEwICYjNDM7MjQxLDggQEAgYm9vbCBjZmc4MDIxMV9zdXBwb3J0ZWRfY2lwaGVyX3N1aXRlKHN0cnVjdCB3aXBoeSAqd2lwaHksIHUzMiBjaXBoZXIpCiAJcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgYm9vbAotY2ZnODAyMTFfaWd0a19jaXBoZXJfc3VwcG9ydGVkKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldikKJiM0MztzdGF0aWMgYm9vbCBjZmc4MDIxMV9pZ3RrX2NpcGhlcl9zdXBwb3J0ZWQoc3RydWN0IHdpcGh5ICp3aXBoeSkKIHsKLQlzdHJ1Y3Qgd2lwaHkgKndpcGh5ID0gJmFtcDtyZGV2LSZndDt3aXBoeTsKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgJmx0OyB3aXBoeS0mZ3Q7bl9jaXBoZXJfc3VpdGVzOyBpJiM0MzsmIzQzOykgewpAQCAtMjYwLDI3ICYjNDM7MjU4LDg2IEBAIGNmZzgwMjExX2lndGtfY2lwaGVyX3N1cHBvcnRlZChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYpCiAJcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIGNmZzgwMjExX3ZhbGlkX2tleV9pZHgoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAotCQkJICAgIGludCBrZXlfaWR4LCBib29sIHBhaXJ3aXNlKQomIzQzO2Jvb2wgY2ZnODAyMTFfdmFsaWRfa2V5X2lkeChzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LAomIzQzOwkJCSAgICBpbnQga2V5X2lkeCwgYm9vbCBwYWlyd2lzZSwKJiM0MzsJCQkgICAgY29uc3QgdTggKm1hY19hZGRyKQogewotCWludCBtYXhfa2V5X2lkeDsKLQotCWlmIChwYWlyd2lzZSkKLQkJbWF4X2tleV9pZHggPSAzOwotCWVsc2UgaWYgKHdpcGh5X2V4dF9mZWF0dXJlX2lzc2V0KCZhbXA7cmRldi0mZ3Q7d2lwaHksCi0JCQkJCSBOTDgwMjExX0VYVF9GRUFUVVJFX0JFQUNPTl9QUk9URUNUSU9OKSB8fAotCQkgd2lwaHlfZXh0X2ZlYXR1cmVfaXNzZXQoJmFtcDtyZGV2LSZndDt3aXBoeSwKLQkJCQkJIE5MODAyMTFfRVhUX0ZFQVRVUkVfQkVBQ09OX1BST1RFQ1RJT05fQ0xJRU5UKSkKLQkJbWF4X2tleV9pZHggPSA3OwotCWVsc2UgaWYgKGNmZzgwMjExX2lndGtfY2lwaGVyX3N1cHBvcnRlZChyZGV2KSkKLQkJbWF4X2tleV9pZHggPSA1OwotCWVsc2UKLQkJbWF4X2tleV9pZHggPSAzOwomIzQzOwlpZiAoV0FSTl9PTighd2RldikpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiAKLQlpZiAoa2V5X2lkeCAmbHQ7IDAgfHwga2V5X2lkeCAmZ3Q7IG1heF9rZXlfaWR4KQomIzQzOwlpZiAoa2V5X2lkeCAmbHQ7IDApCiAJCXJldHVybiBmYWxzZTsKIAotCXJldHVybiB0cnVlOwomIzQzOwkvKgomIzQzOwkgKiBDYW4mIzM5O3QgZGlmZmVyZW50aWF0ZSBjaXBoZXJzIGhlcmUgc28gYWxsb3cgMC4uMy4KJiM0MzsJICogUGFpcndpc2Uga2V5cyBtdXN0IGJlIGZvciBhIHN0YXRpb24gKE1BQyBhZGRyZXNzIGdpdmVuKS4KJiM0MzsJICovCiYjNDM7CWlmIChwYWlyd2lzZSkgewomIzQzOwkJaWYgKCFtYWNfYWRkcikKJiM0MzsJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CQlyZXR1cm4ga2V5X2lkeCAmbHQ7IDQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogRm9yIGdyb3VwIGtleXMsIG1hY19hZGRyPT1OVUxMIG1lYW5zIHNldHRpbmcgYSBncm91cCBrZXkKJiM0MzsJICogZm9yIFRYLCB3aGljaCBpcyBvbmx5IHN1cHBvcnRlZCBvbiBzb21lIGludGVyZmFjZSB0eXBlcywKJiM0MzsJICogZXhjZXB0IGZvciBTVEFUSU9OL1AyUF9DTElFTlQsIHdoZXJlIGl0JiMzOTtzIHNldHRpbmcgdGhlIFJYCiYjNDM7CSAqIGtleSB3aXRoIHRoZSBjdXJyZW50IEFQIChmb3IgbGVnYWN5IHJlYXNvbnMuKQomIzQzOwkgKgomIzQzOwkgKiBBcGFydCBmcm9tIHRoYXQgZXhjZXB0aW9uLCBhIG5vbi1OVUxMIG1hY19hZGRyIG1lYW5zIFJYCiYjNDM7CSAqIGtleSBiZWluZyBzZXQuCiYjNDM7CSAqLwomIzQzOwomIzQzOwlzd2l0Y2ggKHdkZXYtJmd0O2lmdHlwZSkgewomIzQzOwljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgomIzQzOwkJaWYgKCEod2Rldi0mZ3Q7d2lwaHktJmd0O2ZsYWdzICZhbXA7IFdJUEhZX0ZMQUdfSUJTU19SU04pKQomIzQzOwkJCXJldHVybiBmYWxzZTsKJiM0MzsJCWZhbGx0aHJvdWdoOwomIzQzOwljYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6CiYjNDM7CQkvKiBubyBzdXBwb3J0IGZvciBJR1RLL0JJR1RLICh5ZXQ/KSAqLwomIzQzOwkJcmV0dXJuIGtleV9pZHggJmx0OyA0OwomIzQzOwljYXNlIE5MODAyMTFfSUZUWVBFX05BTl9EQVRBOgomIzQzOwkJLyogdGhlc2UgYWx3YXlzIG5lZWQgdG8gc3VwcG9ydCBwZXItU1RBIEdUSyAqLwomIzQzOwkJcmV0dXJuIGtleV9pZHggJmx0OyA0OwomIzQzOwljYXNlIE5MODAyMTFfSUZUWVBFX05BTjoKJiM0MzsJCS8qIG5vIGRhdGEgKi8KJiM0MzsJCWlmIChrZXlfaWR4ICZsdDsgNCkKJiM0MzsJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CQkvKiBOQU4gcmV1c2VkIHRoaXMgZmxhZyAqLwomIzQzOwkJaWYgKHdpcGh5X2V4dF9mZWF0dXJlX2lzc2V0KHdkZXYtJmd0O3dpcGh5LAomIzQzOwkJCQkJICAgIE5MODAyMTFfRVhUX0ZFQVRVUkVfQkVBQ09OX1BST1RFQ1RJT04pKQomIzQzOwkJCXJldHVybiBrZXlfaWR4ICZsdDs9IDc7CiYjNDM7CQlyZXR1cm4ga2V5X2lkeCAmbHQ7PSA1OwomIzQzOwljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CiYjNDM7CWNhc2UgTkw4MDIxMV9JRlRZUEVfUDJQX0NMSUVOVDoKJiM0MzsJCS8qIHNlZSBub3RlIGFib3V0IGV4Y2VwdGlvbiBhYm92ZSAqLwomIzQzOwkJaWYgKG1hY19hZGRyKQomIzQzOwkJCXJldHVybiBmYWxzZTsKJiM0MzsJCS8qIEJJR1RLIHN1cHBvcnQgaW1wbGllcyBJR1RLIHN1cHBvcnQgKi8KJiM0MzsJCWlmICh3aXBoeV9leHRfZmVhdHVyZV9pc3NldCh3ZGV2LSZndDt3aXBoeSwKJiM0MzsJCQkJCSAgICBOTDgwMjExX0VYVF9GRUFUVVJFX0JFQUNPTl9QUk9URUNUSU9OX0NMSUVOVCkpCiYjNDM7CQkJcmV0dXJuIGtleV9pZHggJmx0Oz0gNzsKJiM0MzsJCWZhbGx0aHJvdWdoOwomIzQzOwljYXNlIE5MODAyMTFfSUZUWVBFX0FQOgomIzQzOwljYXNlIE5MODAyMTFfSUZUWVBFX1AyUF9HTzoKJiM0MzsJCS8qIG5vIFJYIHdpdGggW0JdSUdUSyAqLwomIzQzOwkJaWYgKG1hY19hZGRyKQomIzQzOwkJCXJldHVybiBmYWxzZTsKJiM0MzsJCWlmICh3aXBoeV9leHRfZmVhdHVyZV9pc3NldCh3ZGV2LSZndDt3aXBoeSwKJiM0MzsJCQkJCSAgICBOTDgwMjExX0VYVF9GRUFUVVJFX0JFQUNPTl9QUk9URUNUSU9OKSkKJiM0MzsJCQlyZXR1cm4ga2V5X2lkeCAmbHQ7PSA3OwomIzQzOwkJZmFsbHRocm91Z2g7CiYjNDM7CWNhc2UgTkw4MDIxMV9JRlRZUEVfQVBfVkxBTjoKJiM0MzsJCS8qIG5vIFJYIHdpdGggR1RLICovCiYjNDM7CQlpZiAobWFjX2FkZHIpCiYjNDM7CQkJcmV0dXJuIGZhbHNlOwomIzQzOwkJaWYgKGNmZzgwMjExX2lndGtfY2lwaGVyX3N1cHBvcnRlZCh3ZGV2LSZndDt3aXBoeSkpCiYjNDM7CQkJcmV0dXJuIGtleV9pZHggJmx0Oz0gNTsKJiM0MzsJCXJldHVybiBrZXlfaWR4ICZsdDs9IDM7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CX0KIH0KIAogaW50IGNmZzgwMjExX3ZhbGlkYXRlX2tleV9zZXR0aW5ncyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCkBAIC0yODgsMTMgJiM0MzszNDUsNyBAQCBpbnQgY2ZnODAyMTFfdmFsaWRhdGVfa2V5X3NldHRpbmdzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKIAkJCQkgICBzdHJ1Y3Qga2V5X3BhcmFtcyAqcGFyYW1zLCBpbnQga2V5X2lkeCwKIAkJCQkgICBib29sIHBhaXJ3aXNlLCBjb25zdCB1OCAqbWFjX2FkZHIpCiB7Ci0JaWYgKCFjZmc4MDIxMV92YWxpZF9rZXlfaWR4KHJkZXYsIGtleV9pZHgsIHBhaXJ3aXNlKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoIXBhaXJ3aXNlICZhbXA7JmFtcDsgbWFjX2FkZHIgJmFtcDsmYW1wOyAhKHJkZXYtJmd0O3dpcGh5LmZsYWdzICZhbXA7IFdJUEhZX0ZMQUdfSUJTU19SU04pKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChwYWlyd2lzZSAmYW1wOyZhbXA7ICFtYWNfYWRkcikKJiM0MzsJaWYgKCFjZmc4MDIxMV92YWxpZF9rZXlfaWR4KHdkZXYsIGtleV9pZHgsIHBhaXJ3aXNlLCBtYWNfYWRkcikpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJc3dpdGNoIChwYXJhbXMtJmd0O2NpcGhlcikgewpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3dleHQtY29tcGF0LmMgYi9uZXQvd2lyZWxlc3Mvd2V4dC1jb21wYXQuYwppbmRleCA1ZGJmM2VmNGIyNTdlMi4uZDQ1YmMwOGMwZGU0OTcgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy93ZXh0LWNvbXBhdC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC93aXJlbGVzcy93ZXh0LWNvbXBhdC5jCkBAIC00NTQsOCAmIzQzOzQ1NCw3IEBAIHN0YXRpYyBpbnQgY2ZnODAyMTFfc2V0X2VuY3J5cHRpb24oc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAogCQkJCXJlam9pbiA9IHRydWU7CiAJCQl9CiAKLQkJCWlmICghcGFpcndpc2UgJmFtcDsmYW1wOyBhZGRyICZhbXA7JmFtcDsKLQkJCSAgICAhKHJkZXYtJmd0O3dpcGh5LmZsYWdzICZhbXA7IFdJUEhZX0ZMQUdfSUJTU19SU04pKQomIzQzOwkJCWlmICghY2ZnODAyMTFfdmFsaWRfa2V5X2lkeCh3ZGV2LCBpZHgsIHBhaXJ3aXNlLCBhZGRyKSkKIAkJCQllcnIgPSAtRU5PRU5UOwogCQkJZWxzZQogCQkJCWVyciA9IHJkZXZfZGVsX2tleShyZGV2LCB3ZGV2LCAtMSwgaWR4LCBwYWlyd2lzZSwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDA6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDUzNwoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDMyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFBsYW4gZm9yIE1BQzgwMjExIEtleSBNYW5hZ2VtZW50KioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCBhIHBhdGNoIGhlcmUgdGhhdCYjMzk7cyBwb2tpbmcgYXJvdW5kIGluIGBuZXQvd2lyZWxlc3NgLiBMb29rcyBsaWtlIGl0JiMzOTtzIG1ha2luZyBzb21lIHNpZ25pZmljYW50IGNoYW5nZXMgdG8gdGhlIGtleSBtYW5hZ2VtZW50IGNvZGUsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBjZmc4MDIxMWAgYW5kIGBtYWM4MDIxMWAgc3Vic3lzdGVtcy4gVGhpcyBtb2RpZmljYXRpb24gb2YgYGNmZzgwMjExX3ZhbGlkX2tleV9pZHhgIGlzIHdoYXQgY2F1Z2h0IG15IGV5ZS4gIEl0JiMzOTtzIG5vdyB0YWtpbmcgYSBgd2lyZWxlc3NfZGV2YCBhbmQgTUFDIGFkZHJlc3MsIGluc3RlYWQgb2YgdGhlIHJlZ2lzdGVyZWQgZGV2aWNlLCB3aGljaCBmZWVscyBsaWtlIGEgZnVuZGFtZW50YWwgc2hpZnQgYW5kIGRlZmluaXRlbHkgd2FycmFudHMgYSBjbG9zZXIgbG9vay4gVGhlIGFkZGVkIGNoZWNrcyBiYXNlZCBvbiBgd2Rldi0mZ3Q7aWZ0eXBlYCBhcmUgYWxzbyBpbnRlcmVzdGluZy4gVGhpcyBjb2RlIGlzIGNsZWFybHkgcmVhY2hhYmxlIHRocm91Z2ggYm90aCBuZXRsaW5rIChubDgwMjExKSBhbmQgdGhlIFdFWFQgY29tcGF0aWJpbGl0eSBsYXllciwgbWFraW5nIGl0IGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLgoKTXkgcHJpbWFyeSBnb2FsIG5vdyBpcyB0byBpZGVudGlmeSB0aGUgbW9zdCBjcml0aWNhbCBmdW5jdGlvbnMgdG8gZm9jdXMgdGhlIGZ1enppbmcgZWZmb3J0cy4gIEZyb20gd2hhdCBJIGNhbiB0ZWxsIGZyb20gdGhlIGRpZmYsIHRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIHRoYXQgbmVlZCB0aGUgbW9zdCBhdHRlbnRpb246IGBubDgwMjExX2dldF9rZXlgLCBgbmw4MDIxMV9kZWxfa2V5YCwgYGNmZzgwMjExX3ZhbGlkX2tleV9pZHhgLCBgY2ZnODAyMTFfdmFsaWRhdGVfa2V5X3NldHRpbmdzYCwgYW5kIGBjZmc4MDIxMV9zZXRfZW5jcnlwdGlvbmAuIFRoZXNlIHNlZW0gdG8gYmUgdGhlIGNvcmUgZW50cnkgcG9pbnRzLCBhbmQgZ2l2ZW4gdGhlIGNoYW5nZXMsIHRoZXkmIzM5O3JlIGxpa2VseSB3aGVyZSB3ZSBjYW4gaW50cm9kdWNlIHNvbWUgaW50ZXJlc3RpbmcgYW5kIHBlcmhhcHMgdW5leHBlY3RlZCBpbnB1dHMuCgpCZWZvcmUgSSBnZXQgdG9vIGRlZXAgaW50byB0aGUgZnV6emluZyBzdHJhdGVneSBpdHNlbGYsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7dmUgZ290IHRoZSBuZWNlc3Nhcnkga2VybmVsIGNvbmZpZ3VyYXRpb25zIGluIHBsYWNlLiAgSSYjMzk7bSBhc3N1bWluZyBgbmV0L3dpcmVsZXNzYCBpcyBidWlsdCB3aXRoIGBDT05GSUdfQ0ZHODAyMTFgIGFuZCBgQ09ORklHX01BQzgwMjExYCwgYnV0IEkmIzM5O2xsIGRvdWJsZS1jaGVjayB0aG9zZSBjb25maWdzLiAgQ2FuJiMzOTt0IGFmZm9yZCB0byB3YXN0ZSB0aW1lIG9uIGZ1enppbmcgY29kZSB0aGF0IGlzbiYjMzk7dCBhY3R1YWxseSBjb21waWxlZCBpbiEgIE9uY2UgSSBjb25maXJtIHRoZSBjb25maWdzLCBJIGNhbiBtb3ZlIG9uIHRvIHRoZSBmdXp6aW5nIHNldHVwIGFuZCBpZGVudGlmeWluZyBlZmZlY3RpdmUgdGVzdCBjYXNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwMDo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjZmc4MDIxMV92YWxpZF9rZXlfaWR4JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9jb3JlLmg9NDQ1PWJvb2wgY2ZnODAyMTFfc3VwcG9ydGVkX2NpcGhlcl9zdWl0ZShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCB1MzIgY2lwaGVyKTtcbm5ldC93aXJlbGVzcy9jb3JlLmg6NDQ2OmJvb2wgY2ZnODAyMTFfdmFsaWRfa2V5X2lkeChzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxubmV0L3dpcmVsZXNzL2NvcmUuaC00NDctXHRcdFx0ICAgIGludCBrZXlfaWR4LCBib29sIHBhaXJ3aXNlLFxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9NTM2MT1zdGF0aWMgaW50IG5sODAyMTFfZ2V0X2tleShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNTQxMS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6NTQxMjpcdGlmICghY2ZnODAyMTFfdmFsaWRfa2V5X2lkeCh3ZGV2LCBrZXlfaWR4LCBwYWlyd2lzZSwgbWFjX2FkZHIpKVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy01NDEzLVx0XHRyZXR1cm4gLUVOT0VOVDtcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTU2Mzg9c3RhdGljIGludCBubDgwMjExX2RlbF9rZXkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTU2NjUtXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjU2NjY6XHRpZiAoIWNmZzgwMjExX3ZhbGlkX2tleV9pZHgod2Rldiwga2V5LmlkeCxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNTY2Ny1cdFx0XHRcdCAgICBrZXkudHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0UsXG4tLVxubmV0L3dpcmVsZXNzL3V0aWwuYz0yNDQ9c3RhdGljIGJvb2wgY2ZnODAyMTFfaWd0a19jaXBoZXJfc3VwcG9ydGVkKHN0cnVjdCB3aXBoeSAqd2lwaHkpXG4tLVxubmV0L3dpcmVsZXNzL3V0aWwuYy0yNjAtXG5uZXQvd2lyZWxlc3MvdXRpbC5jOjI2MTpib29sIGNmZzgwMjExX3ZhbGlkX2tleV9pZHgoc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldixcbm5ldC93aXJlbGVzcy91dGlsLmMtMjYyLVx0XHRcdCAgICBpbnQga2V5X2lkeCwgYm9vbCBwYWlyd2lzZSxcbi0tXG5uZXQvd2lyZWxlc3MvdXRpbC5jPTM0Mz1pbnQgY2ZnODAyMTFfdmFsaWRhdGVfa2V5X3NldHRpbmdzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbi0tXG5uZXQvd2lyZWxlc3MvdXRpbC5jLTM0Ny17XG5uZXQvd2lyZWxlc3MvdXRpbC5jOjM0ODpcdGlmICghY2ZnODAyMTFfdmFsaWRfa2V5X2lkeCh3ZGV2LCBrZXlfaWR4LCBwYWlyd2lzZSwgbWFjX2FkZHIpKVxubmV0L3dpcmVsZXNzL3V0aWwuYy0zNDktXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbm5ldC93aXJlbGVzcy93ZXh0LWNvbXBhdC5jPTM5OD1zdGF0aWMgaW50IGNmZzgwMjExX3NldF9lbmNyeXB0aW9uKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbi0tXG5uZXQvd2lyZWxlc3Mvd2V4dC1jb21wYXQuYy00NTYtXG5uZXQvd2lyZWxlc3Mvd2V4dC1jb21wYXQuYzo0NTc6XHRcdFx0aWYgKCFjZmc4MDIxMV92YWxpZF9rZXlfaWR4KHdkZXYsIGlkeCwgcGFpcndpc2UsIGFkZHIpKVxubmV0L3dpcmVsZXNzL3dleHQtY29tcGF0LmMtNDU4LVx0XHRcdFx0ZXJyID0gLUVOT0VOVDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwMDo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MDg2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogOTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLZXkgTWFuYWdlbWVudCBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGZ1bmN0aW9uczogYG5sODAyMTFfZ2V0X2tleWAsIGBubDgwMjExX2RlbF9rZXlgLCBgY2ZnODAyMTFfdmFsaWRfa2V5X2lkeGAsIGBjZmc4MDIxMV92YWxpZGF0ZV9rZXlfc2V0dGluZ3NgLCBhbmQgYGNmZzgwMjExX3NldF9lbmNyeXB0aW9uYC4gVGhleSYjMzk7cmUgYWxsIG9idmlvdXNseSByZWxhdGVkIHRvIGtleSBtYW5hZ2VtZW50IHdpdGhpbiB0aGUgd2lyZWxlc3MgbmV0d29ya2luZyBzdGFjay4gYG5sODAyMTFfZ2V0X2tleWAgYW5kIGBubDgwMjExX2RlbF9rZXlgIHN1Z2dlc3QgaW50ZXJhY3Rpb24gd2l0aCB0aGUgbmV0bGluayBpbnRlcmZhY2UsIHdoaWNoIGlzIHN0YW5kYXJkIGZvciBjb250cm9sIHBsYW5lIG9wZXJhdGlvbnMgaW4gbW9kZXJuIExpbnV4IG5ldHdvcmtpbmcuIEkmIzM5O20gZ3Vlc3NpbmcgdGhleSBoYW5kbGUgcmV0cmlldmluZyBhbmQgZGVsZXRpbmcgY3J5cHRvZ3JhcGhpYyBrZXlzIGFzc29jaWF0ZWQgd2l0aCB3aXJlbGVzcyBpbnRlcmZhY2VzLiBUaGUgb3RoZXIgdGhyZWUgbG9vayBsaWtlIHRoZXkmIzM5O3JlIHZhbGlkYXRpb24gYW5kIGNvbmZpZ3VyYXRpb24gcm91dGluZXMgd2l0aGluIHRoZSBgY2ZnODAyMTFgIGZyYW1ld29yay4gYGNmZzgwMjExX3ZhbGlkX2tleV9pZHhgIGlzIHByb2JhYmx5IGFib3V0IGNoZWNraW5nIHRoZSB2YWxpZGl0eSBvZiBhIGdpdmVuIGtleSBpbmRleCwgd2hpY2ggaXMgcHJldHR5IGZ1bmRhbWVudGFsIHRvIGVuc3VyZSBhZ2FpbnN0IGJ1ZmZlciBvdmVyZmxvd3Mgb3Igb3RoZXIgc2VjdXJpdHkgaXNzdWVzIHdoZW4gYWNjZXNzaW5nIGtleXMuIGBjZmc4MDIxMV92YWxpZGF0ZV9rZXlfc2V0dGluZ3NgIHNlZW1zIHRvIGhhbmRsZSB2YWxpZGF0aW9uIG9mIGtleSBzZXR0aW5ncyBsaWtlIGxlbmd0aCwgYWxnb3JpdGhtLCBldGMuLCBlbnN1cmluZyB0aGF0IHRoZXkmIzM5O3JlIGNvbXBhdGlibGUgd2l0aCB0aGUgaGFyZHdhcmUgYW5kIHRoZSBjb25maWd1cmVkIHNlY3VyaXR5IHBvbGljeS4gRmluYWxseSwgYGNmZzgwMjExX3NldF9lbmNyeXB0aW9uYCBpcyBhIG5vLWJyYWluZXIsIGl0JiMzOTtzIGFib3V0IGFjdHVhbGx5IGFwcGx5aW5nIHRoZSBlbmNyeXB0aW9uIHNldHRpbmdzLgoKVG8gZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZXNlIGZpdCB0b2dldGhlciBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgdGhleSBoYXZlLCBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgdGhlIEtjb25maWcgZm9yIHRoZSBgbmV0L3dpcmVsZXNzYCBzZWN0aW9uLiBUaGF0IHNob3VsZCBzaG93IG1lIHRoZSByZWxldmFudCBjb21waWxlLXRpbWUgb3B0aW9ucyBhbmQgdGhlaXIgZGVwZW5kZW5jaWVzLCB3aGljaCB3aWxsIGdpdmUgbWUgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgZW5hYmxlZCBhbmQgdXNlZCB3aXRoaW4gdGhlIGJyb2FkZXIgY29udGV4dCBvZiB0aGUgd2lyZWxlc3Mgc3RhY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDA6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XmNvbmZpZyBDRkc4MDIxMSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9LY29uZmlnPTE0PWNvbmZpZyBXRVhUX1BSSVZcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNi1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjE3OmNvbmZpZyBDRkc4MDIxMVxubmV0L3dpcmVsZXNzL0tjb25maWctMTgtXHR0cmlzdGF0ZSBcJiMzNDtjZmc4MDIxMSAtIHdpcmVsZXNzIGNvbmZpZ3VyYXRpb24gQVBJXCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWc9Mzg9Y29uZmlnIE5MODAyMTFfVEVTVE1PREVcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy01MS1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjUyOmNvbmZpZyBDRkc4MDIxMV9ERVZFTE9QRVJfV0FSTklOR1Ncbm5ldC93aXJlbGVzcy9LY29uZmlnLTUzLVx0Ym9vbCBcJiMzNDtlbmFibGUgZGV2ZWxvcGVyIHdhcm5pbmdzXCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctNjctXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo2ODpjb25maWcgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy02OS1cdGJvb2wgXCYjMzQ7Y2ZnODAyMTEgY2VydGlmaWNhdGlvbiBvbnVzXCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctODgtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo4OTpjb25maWcgQ0ZHODAyMTFfUkVRVUlSRV9TSUdORURfUkVHREJcbm5ldC93aXJlbGVzcy9LY29uZmlnLTkwLVx0Ym9vbCBcJiMzNDtyZXF1aXJlIHJlZ2RiIHNpZ25hdHVyZVwmIzM0OyBpZiBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy05OC1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjk5OmNvbmZpZyBDRkc4MDIxMV9VU0VfS0VSTkVMX1JFR0RCX0tFWVNcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEwMC1cdGJvb2wgXCYjMzQ7YWxsb3cgcmVnZGIga2V5cyBzaGlwcGVkIHdpdGggdGhlIGtlcm5lbFwmIzM0OyBpZiBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMTAtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxMTE6Y29uZmlnIENGRzgwMjExX0VYVFJBX1JFR0RCX0tFWURJUlxubmV0L3dpcmVsZXNzL0tjb25maWctMTEyLVx0c3RyaW5nIFwmIzM0O2FkZGl0aW9uYWwgcmVnZGIga2V5IGRpcmVjdG9yeVwmIzM0OyBpZiBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMjEtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxMjI6Y29uZmlnIENGRzgwMjExX1JFR19DRUxMVUxBUl9ISU5UU1xubmV0L3dpcmVsZXNzL0tjb25maWctMTIzLVx0Ym9vbCBcJiMzNDtjZmc4MDIxMSByZWd1bGF0b3J5IHN1cHBvcnQgZm9yIGNlbGx1bGFyIGJhc2Ugc3RhdGlvbiBoaW50c1wmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTEzNC1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjEzNTpjb25maWcgQ0ZHODAyMTFfUkVHX1JFTEFYX05PX0lSXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMzYtXHRib29sIFwmIzM0O2NmZzgwMjExIHN1cHBvcnQgZm9yIE5PX0lSIHJlbGF4YXRpb25cJiMzNDtcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNTgtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxNTk6Y29uZmlnIENGRzgwMjExX0RFRkFVTFRfUFNcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE2MC1cdGJvb2wgXCYjMzQ7ZW5hYmxlIHBvd2Vyc2F2ZSBieSBkZWZhdWx0XCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTY4LVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTY5OmNvbmZpZyBDRkc4MDIxMV9ERUJVR0ZTXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNzAtXHRib29sIFwmIzM0O2NmZzgwMjExIERlYnVnRlMgZW50cmllc1wmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTE3Ni1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjE3Nzpjb25maWcgQ0ZHODAyMTFfQ1JEQV9TVVBQT1JUXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNzgtXHRib29sIFwmIzM0O3N1cHBvcnQgQ1JEQVwmIzM0OyBpZiBFWFBFUlRcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xODYtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxODc6Y29uZmlnIENGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE4OC1cdGJvb2wgXCYjMzQ7Y2ZnODAyMTEgd2lyZWxlc3MgZXh0ZW5zaW9ucyBjb21wYXRpYmlsaXR5XCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTkzLVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTk0OmNvbmZpZyBDRkc4MDIxMV9LVU5JVF9URVNUXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xOTUtXHR0cmlzdGF0ZSBcJiMzNDtLVW5pdCB0ZXN0cyBmb3IgY2ZnODAyMTFcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDAwOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1MDUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBuZWNlc3Nhcnkga2VybmVsIGNvbmZpZ3VyYXRpb25zIGZvciB0aGlzIHRlc3Rpbmcgc2V0dXAuIE15IHByaW1hcnkgZm9jdXMgaXMgb24gYENGRzgwMjExYCBhbmQgYENGRzgwMjExX1dFWFRgLiBUaGVzZSBzZWVtIHRvIGJlIHRoZSBtb3N0IGRpcmVjdCBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBJJiMzOTttIHRhcmdldGluZy4gSSBhbHNvIHRoaW5rIEkgbWlnaHQgbmVlZCB0byBlbmFibGUgYE1BQzgwMjExYCB0byBmdWxseSB1dGlsaXplIHRoZSBDRkc4MDIxMSB3aXJlbGVzcyBzdGFjayBmb3IgYWN0dWFsIHRlc3RpbmcuIExldCYjMzk7cyBub3QgZm9yZ2V0IHRoZSBuZXQvd2lyZWxlc3MgZGlyZWN0b3J5LCB3aGljaCwgZnJvbSBteSB1bmRlcnN0YW5kaW5nLCBvbmx5IG5lZWRzIGBDRkc4MDIxMWAuIE5vdywgaG9sZCBvbiwgSSBzaG91bGQgYWxzbyBpbmNsdWRlIGBNQUM4MDIxMV9IV1NJTWAuIFRoaXMgbG9va3MgbGlrZSB0aGUgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgY29tcG9uZW50IGZvciBtYWM4MDIxMSwgYW5kIHRoYXQgd291bGQgYmUgaW5jcmVkaWJseSB1c2VmdWwgZm9yIGZ1enppbmchIFNvLCBJJiMzOTtsbCBnbyB3aXRoIGBDRkc4MDIxMWAsIGBDRkc4MDIxMV9XRVhUYCwgYE1BQzgwMjExYCwgYW5kIGBNQUM4MDIxMV9IV1NJTWAuIEFuZCBqdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nLCBJIG5lZWQgdG8gdGFrZSBhIHF1aWNrIGxvb2sgYXQgdGhlIGBuZXQvd2lyZWxlc3MvTWFrZWZpbGVgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDAwOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHRvYmotJChDT05GSUdfQ0ZHODAyMTEpICYjNDM7PSBjZmc4MDIxMS5vXG4gICAzOlx0b2JqLXkgJiM0Mzs9IHRlc3RzL1xuICAgNDpcdFxuICAgNTpcdG9iai0kKENPTkZJR19XRVhUX0NPUkUpICYjNDM7PSB3ZXh0LWNvcmUub1xuICAgNjpcdG9iai0kKENPTkZJR19XRVhUX1BST0MpICYjNDM7PSB3ZXh0LXByb2Mub1xuICAgNzpcdG9iai0kKENPTkZJR19XRVhUX1BSSVYpICYjNDM7PSB3ZXh0LXByaXYub1xuICAgODpcdFxuICAgOTpcdGNmZzgwMjExLXkgJiM0Mzs9IGNvcmUubyBzeXNmcy5vIHJhZGlvdGFwLm8gdXRpbC5vIHJlZy5vIHNjYW4ubyBubDgwMjExLm9cbiAgMTA6XHRjZmc4MDIxMS15ICYjNDM7PSBtbG1lLm8gaWJzcy5vIHNtZS5vIGNoYW4ubyBldGh0b29sLm8gbWVzaC5vIGFwLm8gdHJhY2UubyBvY2Iub1xuICAxMTpcdGNmZzgwMjExLXkgJiM0Mzs9IG1pY2hhZWwtbWljLm8gcG1zci5vXG4gIDEyOlx0Y2ZnODAyMTEtJChDT05GSUdfT0YpICYjNDM7PSBvZi5vXG4gIDEzOlx0Y2ZnODAyMTEtJChDT05GSUdfQ0ZHODAyMTFfREVCVUdGUykgJiM0Mzs9IGRlYnVnZnMub1xuICAxNDpcdGNmZzgwMjExLSQoQ09ORklHX0NGRzgwMjExX1dFWFQpICYjNDM7PSB3ZXh0LWNvbXBhdC5vIHdleHQtc21lLm9cbiAgMTU6XHRcbiAgMTY6XHRDRkxBR1NfdHJhY2UubyA6PSAtSSQoc3JjKVxuICAxNzpcdFxuICAxODpcdGNmZzgwMjExLSQoQ09ORklHX0NGRzgwMjExX1VTRV9LRVJORUxfUkVHREJfS0VZUykgJiM0Mzs9IHNoaXBwZWQtY2VydHMub1xuICAxOTpcdGlmbmVxICgkKENPTkZJR19DRkc4MDIxMV9FWFRSQV9SRUdEQl9LRVlESVIpLClcbiAgMjA6XHRjZmc4MDIxMS15ICYjNDM7PSBleHRyYS1jZXJ0cy5vXG4gIDIxOlx0ZW5kaWZcbiAgMjI6XHRcbiAgMjM6XHQkKG9iaikvc2hpcHBlZC1jZXJ0cy5jOiAkKHNvcnQgJCh3aWxkY2FyZCAkKHNyYykvY2VydHMvKi5oZXgpKVxuICAyNDpcdFx0QCQoa2VjaG8pIFwmIzM0OyAgR0VOICAgICAkQFwmIzM0O1xuICAyNTpcdFx0JChRKShlY2hvICYjMzk7I2luY2x1ZGUgXCYjMzQ7cmVnLmhcJiMzNDsmIzM5OzsgXFxcbiAgMjY6XHRcdCAgZWNobyAmIzM5O2NvbnN0IHU4IHNoaXBwZWRfcmVnZGJfY2VydHNbXSA9IHsmIzM5OzsgXFxcbiAgMjc6XHRcdCAgZWNobyB8IGNhdCAtICReIDsgXFxcbiAgMjg6XHRcdCAgZWNobyAmIzM5O307JiMzOTs7IFxcXG4gIDI5Olx0XHQgIGVjaG8gJiMzOTt1bnNpZ25lZCBpbnQgc2hpcHBlZF9yZWdkYl9jZXJ0c19sZW4gPSBzaXplb2Yoc2hpcHBlZF9yZWdkYl9jZXJ0cyk7JiMzOTs7IFxcXG4gIDMwOlx0XHQgKSBcdTAwM2UgJEBcbiAgMzE6XHRcbiAgMzI6XHQkKG9iaikvZXh0cmEtY2VydHMuYzogJChDT05GSUdfQ0ZHODAyMTFfRVhUUkFfUkVHREJfS0VZRElSKSBcXFxuICAzMzpcdFx0XHQgICAgICAkKHNvcnQgJCh3aWxkY2FyZCAkKENPTkZJR19DRkc4MDIxMV9FWFRSQV9SRUdEQl9LRVlESVIpLyoueDUwOSkpXG4gIDM0Olx0XHRAJChrZWNobykgXCYjMzQ7ICBHRU4gICAgICRAXCYjMzQ7XG4gIDM1Olx0XHQkKFEpKHNldCAtZTsgXFxcbiAgMzY6XHRcdCAgYWxsZj1cJiMzNDtcJiMzNDs7IFxcXG4gIDM3Olx0XHQgIGZvciBmIGluICReIDsgZG8gXFxcbiAgMzg6XHRcdCAgICAgIHRlc3QgLWYgJCRmIHx8IGNvbnRpbnVlO1xcXG4gIDM5Olx0XHQgICAgICAjIHNpbWlsYXIgdG8gaGV4ZHVtcCAtdiAtZSAmIzM5OzEvMSBcJiMzNDsweCUuMngsXCYjMzQ7IFwmIzM0O1xcblwmIzM0OyYjMzk7IFxcXG4gIDQwOlx0XHQgICAgICB0aGlzZj0kJChvZCAtQW4gLXYgLXR4MSBcdTAwM2MgJCRmIHwgXFxcbiAgNDE6XHRcdCAgICAgICAgICAgICAgICAgICBzZWQgLWUgJiMzOTtzLyAvXFxuL2cmIzM5OyB8IFxcXG4gIDQyOlx0XHQgICAgICAgICAgICAgICAgICAgc2VkIC1lICYjMzk7cy9eWzAtOWEtZl1cXCYjNDM7JCQvXFwwLzt0O2QmIzM5OyB8IFxcXG4gIDQzOlx0XHQgICAgICAgICAgICAgICAgICAgc2VkIC1lICYjMzk7cy9eLzB4LztzLyQkLywvJiMzOTspOyBcXFxuICA0NDpcdFx0ICAgICAgIyBmaWxlIHNob3VsZCBub3QgYmUgZW1wdHkgLSBtYXliZSBjb21tYW5kIHN1YnN0aXR1dGlvbiBmYWlsZWQ/IFxcXG4gIDQ1Olx0XHQgICAgICB0ZXN0ICEgLXogXCYjMzQ7JCR0aGlzZlwmIzM0OztcXFxuICA0NjpcdFx0ICAgICAgYWxsZj0kJGFsbGYkJHRoaXNmO1xcXG4gIDQ3Olx0XHQgIGRvbmU7IFxcXG4gIDQ4Olx0XHQgICggXFxcbiAgNDk6XHRcdCAgICAgIGVjaG8gJiMzOTsjaW5jbHVkZSBcJiMzNDtyZWcuaFwmIzM0OyYjMzk7OyBcXFxuICA1MDpcdFx0ICAgICAgZWNobyAmIzM5O2NvbnN0IHU4IGV4dHJhX3JlZ2RiX2NlcnRzW10gPSB7JiMzOTs7IFxcXG4gIDUxOlx0XHQgICAgICBlY2hvIFwmIzM0OyQkYWxsZlwmIzM0OzsgXFxcbiAgNTI6XHRcdCAgICAgIGVjaG8gJiMzOTt9OyYjMzk7OyBcXFxuICA1MzpcdFx0ICAgICAgZWNobyAmIzM5O3Vuc2lnbmVkIGludCBleHRyYV9yZWdkYl9jZXJ0c19sZW4gPSBzaXplb2YoZXh0cmFfcmVnZGJfY2VydHMpOyYjMzk7OyBcXFxuICA1NDpcdFx0ICApIFx1MDAzZSAkQClcbiAgNTU6XHRcbiAgNTY6XHRjbGVhbi1maWxlcyAmIzQzOz0gc2hpcHBlZC1jZXJ0cy5jIGV4dHJhLWNlcnRzLmNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwMDo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MTIwCgkJCQkJCQlvdXRwdXQ6IDIyMQoJCQkJCQkJdGhvdWdodHM6IDU5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLZXkgRnVuY3Rpb25hbGl0eSBpbiBjZmc4MDIxMSBmb3IgRnV6emluZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBmb2N1cyBpcyBvbiB0aGUga2V5IG1hbmFnZW1lbnQgd2l0aGluIGBjZmc4MDIxMWAgYW5kIGhvdyB0aGUgcHJvcG9zZWQgY2hhbmdlcyBpbXBhY3QgZnV6emluZy4gRmlyc3QsIEkgbmVlZCB0byBrbm93IHdoaWNoIGNvbmZpZ3VyYXRpb25zIGFyZSByZWxldmFudDogYENPTkZJR19DRkc4MDIxMWAgYW5kIGBDT05GSUdfQ0ZHODAyMTFfV0VYVGAgYXJlIHRoZSBvYnZpb3VzIG9uZXMsIGFuZCBJJiMzOTtsbCBrZWVwIGBDT05GSUdfTUFDODAyMTFfSFdTSU1gIGluIG1pbmQgZm9yIHBvdGVudGlhbCBoYXJkd2FyZSBzaW11bGF0aW9uIGR1cmluZyB0ZXN0aW5nLgoKTm93LCB0aGUgZnVuY3Rpb25zLiBJJiMzOTt2ZSBwaW5wb2ludGVkIGEgZmV3IGtleSBwbGF5ZXJzOiBgbmw4MDIxMV9nZXRfa2V5YCwgYG5sODAyMTFfZGVsX2tleWAsIGBjZmc4MDIxMV92YWxpZF9rZXlfaWR4YCwgYGNmZzgwMjExX3ZhbGlkYXRlX2tleV9zZXR0aW5nc2AsIGFuZCBgY2ZnODAyMTFfc2V0X2VuY3J5cHRpb25gLiBUaW1lIHRvIGRpZyBpbnRvIHRoZXNlLgoKT2theSwgbGV0JiMzOTtzIHNlZS4uLiBgY2ZnODAyMTFfdmFsaWRfa2V5X2lkeGAgaXMgZGVmaW5lZCBpbiBib3RoIGBuZXQvd2lyZWxlc3MvY29yZS5oYCBhbmQgYG5ldC93aXJlbGVzcy91dGlsLmNgLCBhbmQgaXQmIzM5O3Mgbm90IHN0YXRpYy4gR29vZC4gYG5sODAyMTFfZ2V0X2tleWAgYW5kIGBubDgwMjExX2RlbF9rZXlgIGFyZSBzdGF0aWMgYW5kIHJlc2lkZSBpbiBgbmV0L3dpcmVsZXNzL25sODAyMTEuY2AsIGFuZCBgY2ZnODAyMTFfc2V0X2VuY3J5cHRpb25gIGlzIHN0YXRpYyBpbiBgbmV0L3dpcmVsZXNzL3dleHQtY29tcGF0LmNgLgoKQSBxdWljayBjaGVjayBjb25maXJtcyB0aGF0IGBjZmc4MDIxMV92YWxpZGF0ZV9rZXlfc2V0dGluZ3NgIGlzbiYjMzk7dCBzdGF0aWMuIEFscmlnaHQsIGxldCYjMzk7cyBrZWVwIGFuIGV5ZSBvdXQgZm9yIG90aGVyIGZ1bmN0aW9ucy4gQmFzZWQgb24gdGhlIGFuYWx5c2lzLCBgY2ZnODAyMTFfdmFsaWRfa2V5X2lkeGAgc3RhbmRzIG91dCBhcyB0aGUgbW9zdCBzaWduaWZpY2FudCBvbmUgaGVyZS4KCk5vdywgcmVhY2hhYmlsaXR5LiBgbmw4MDIxMV9nZXRfa2V5YCBhbmQgYG5sODAyMTFfZGVsX2tleWAgYXJlIGRlZmluaXRlbHkgcmVhY2hhYmxlIHZpYSBuZXRsaW5rLiBgY2ZnODAyMTFfc2V0X2VuY3J5cHRpb25gIGlzIGFjY2Vzc2libGUgdGhyb3VnaCB3aXJlbGVzcyBleHRlbnNpb25zICh3ZXh0KS4gR3JlYXQsIGFsbCB0aGUgZnVuY3Rpb25zIEkmIzM5O20gdGFyZ2V0aW5nIGFyZSByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlLCB3aGljaCBpcyBjcml0aWNhbCBmb3IgZWZmZWN0aXZlIGZ1enppbmcuCgpNeSByZWFzb25pbmcgaXMgdGhpczogdGhlIHBhdGNoIGZ1bmRhbWVudGFsbHkgYWx0ZXJzIGhvdyBrZXkgaW5kaWNlcyBhcmUgdmFsaWRhdGVkIHdpdGhpbiBgY2ZnODAyMTFgLiBUaGlzIGluY2x1ZGVzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgaW50ZXJmYWNlLXNwZWNpZmljIGNoZWNrcyBhbmQgdGhlIG1vZGlmaWNhdGlvbiBvZiB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlIHRvIHRha2UgYSBgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldmAuIFRoZXNlIGNoYW5nZXMgaGF2ZSBhIGRpcmVjdCBpbXBhY3Qgb24gdGhlIG5ldGxpbmsgKG5sODAyMTEpIGFuZCB3aXJlbGVzcyBleHRlbnNpb25zICh3ZXh0KSBwYXRocyB1c2VkIGZvciByZXRyaWV2aW5nLCBkZWxldGluZywgYW5kIHNldHRpbmcga2V5cy4gVGhlIGZhY3QgdGhhdCB0aGUgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSBtYWtlcyB0aGVtIGlkZWFsIGZvciBmdXp6aW5nLgoKSSYjMzk7bSByZWFkeSB0byBwcm9jZWVkIHdpdGggdGhlc2UgZnVuY3Rpb25zIGZvciB0ZXN0aW5nLiBMZXQmIzM5O3MgZ2V0IHRob3NlIHJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDAwOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDRkc4MDIxMSYjMzQ7LAogICAgJiMzNDtDRkc4MDIxMV9XRVhUJiMzNDssCiAgICAmIzM0O01BQzgwMjExX0hXU0lNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmw4MDIxMV9nZXRfa2V5JiMzNDssCiAgICAmIzM0O25sODAyMTFfZGVsX2tleSYjMzQ7LAogICAgJiMzNDtjZmc4MDIxMV92YWxpZF9rZXlfaWR4JiMzNDssCiAgICAmIzM0O2NmZzgwMjExX3ZhbGlkYXRlX2tleV9zZXR0aW5ncyYjMzQ7LAogICAgJiMzNDtjZmc4MDIxMV9zZXRfZW5jcnlwdGlvbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9naWMgZm9yIHZhbGlkYXRpbmcga2V5IGluZGljZXMgaW4gdGhlIGNmZzgwMjExIHN1YnN5c3RlbSwgYWRkaW5nIGludGVyZmFjZSB0eXBlLXNwZWNpZmljIGNoZWNrcyBhbmQgY2hhbmdpbmcgdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZSB0byB0YWtlIGBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2YC4gVGhpcyBhZmZlY3RzIG5ldGxpbmsgKG5sODAyMTEpIGFuZCB3aXJlbGVzcyBleHRlbnNpb25zICh3ZXh0KSBwYXRocyBmb3IgZ2V0dGluZywgZGVsZXRpbmcsIGFuZCBzZXR0aW5nIGtleXMuIFRoZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlLCBtYWtpbmcgdGhlbSBzdWl0YWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0ZHODAyMTEmIzM0OywKICAgICYjMzQ7Q0ZHODAyMTFfV0VYVCYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMV9IV1NJTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25sODAyMTFfZ2V0X2tleSYjMzQ7LAogICAgJiMzNDtubDgwMjExX2RlbF9rZXkmIzM0OywKICAgICYjMzQ7Y2ZnODAyMTFfdmFsaWRfa2V5X2lkeCYjMzQ7LAogICAgJiMzNDtjZmc4MDIxMV92YWxpZGF0ZV9rZXlfc2V0dGluZ3MmIzM0OywKICAgICYjMzQ7Y2ZnODAyMTFfc2V0X2VuY3J5cHRpb24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvZ2ljIGZvciB2YWxpZGF0aW5nIGtleSBpbmRpY2VzIGluIHRoZSBjZmc4MDIxMSBzdWJzeXN0ZW0sIGFkZGluZyBpbnRlcmZhY2UgdHlwZS1zcGVjaWZpYyBjaGVja3MgYW5kIGNoYW5naW5nIHRoZSBmdW5jdGlvbiBzaWduYXR1cmUgdG8gdGFrZSBgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldmAuIFRoaXMgYWZmZWN0cyBuZXRsaW5rIChubDgwMjExKSBhbmQgd2lyZWxlc3MgZXh0ZW5zaW9ucyAod2V4dCkgcGF0aHMgZm9yIGdldHRpbmcsIGRlbGV0aW5nLCBhbmQgc2V0dGluZyBrZXlzLiBUaGUgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSwgbWFraW5nIHRoZW0gc3VpdGFibGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMDo0NzozOS40ODA0NTYxMTZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDg5ODEwNjUwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDRkc4MDIxMVwiLFxuICAgIFwiQ0ZHODAyMTFfV0VYVFwiLFxuICAgIFwiTUFDODAyMTFfSFdTSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJubDgwMjExX2dldF9rZXlcIixcbiAgICBcIm5sODAyMTFfZGVsX2tleVwiLFxuICAgIFwiY2ZnODAyMTFfdmFsaWRfa2V5X2lkeFwiLFxuICAgIFwiY2ZnODAyMTFfdmFsaWRhdGVfa2V5X3NldHRpbmdzXCIsXG4gICAgXCJjZmc4MDIxMV9zZXRfZW5jcnlwdGlvblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2dpYyBmb3IgdmFsaWRhdGluZyBrZXkgaW5kaWNlcyBpbiB0aGUgY2ZnODAyMTEgc3Vic3lzdGVtLCBhZGRpbmcgaW50ZXJmYWNlIHR5cGUtc3BlY2lmaWMgY2hlY2tzIGFuZCBjaGFuZ2luZyB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlIHRvIHRha2UgYHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXZgLiBUaGlzIGFmZmVjdHMgbmV0bGluayAobmw4MDIxMSkgYW5kIHdpcmVsZXNzIGV4dGVuc2lvbnMgKHdleHQpIHBhdGhzIGZvciBnZXR0aW5nLCBkZWxldGluZywgYW5kIHNldHRpbmcga2V5cy4gVGhlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UsIG1ha2luZyB0aGVtIHN1aXRhYmxlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMDo0NzozOS40ODA0NzE4NzZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5MDQ1ODc4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGY1YmQxZDZiOTlmYzMwYzA3Yjk0MGQwNDVmZDc0MzMzZjE3N2JlZDZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdWwgMTYgMDA6NDc6MzcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL2NvcmUuaCBiL25ldC93aXJlbGVzcy9jb3JlLmhcXG5pbmRleCBkZjQ3ZWQ2MjA4YTUwZC4uMzk5MDM3NTE0OTQzZDkgMTAwNjQ0XFxuLS0tIGEvbmV0L3dpcmVsZXNzL2NvcmUuaFxcbisrKyBiL25ldC93aXJlbGVzcy9jb3JlLmhcXG5AQCAtNDQzLDggKzQ0Myw5IEBAIHZvaWQgY2ZnODAyMTFfc21lX2FiYW5kb25fYXNzb2Moc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldik7XFxuIFxcbiAvKiBpbnRlcm5hbCBoZWxwZXJzICovXFxuIGJvb2wgY2ZnODAyMTFfc3VwcG9ydGVkX2NpcGhlcl9zdWl0ZShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCB1MzIgY2lwaGVyKTtcXG4tYm9vbCBjZmc4MDIxMV92YWxpZF9rZXlfaWR4KHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG4tXFx0XFx0XFx0ICAgIGludCBrZXlfaWR4LCBib29sIHBhaXJ3aXNlKTtcXG4rYm9vbCBjZmc4MDIxMV92YWxpZF9rZXlfaWR4KHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxuK1xcdFxcdFxcdCAgICBpbnQga2V5X2lkeCwgYm9vbCBwYWlyd2lzZSxcXG4rXFx0XFx0XFx0ICAgIGNvbnN0IHU4ICptYWNfYWRkcik7XFxuIGludCBjZmc4MDIxMV92YWxpZGF0ZV9rZXlfc2V0dGluZ3Moc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbiBcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxcbiBcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qga2V5X3BhcmFtcyAqcGFyYW1zLCBpbnQga2V5X2lkeCxcXG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL25sODAyMTEuYyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmNcXG5pbmRleCAyNDIwNzFhZDEwZDZjOS4uOTlhMWMwMTc0YmRiZjIgMTAwNjQ0XFxuLS0tIGEvbmV0L3dpcmVsZXNzL25sODAyMTEuY1xcbisrKyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmNcXG5AQCAtNTQwOSw3ICs1NDA5LDcgQEAgc3RhdGljIGludCBubDgwMjExX2dldF9rZXkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4gXFx0aWYgKCFyZGV2LVxcdTAwM2VvcHMtXFx1MDAzZWdldF9rZXkpXFxuIFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gXFxuLVxcdGlmICghcGFpcndpc2UgXFx1MDAyNlxcdTAwMjYgbWFjX2FkZHIgXFx1MDAyNlxcdTAwMjYgIShyZGV2LVxcdTAwM2V3aXBoeS5mbGFncyBcXHUwMDI2IFdJUEhZX0ZMQUdfSUJTU19SU04pKVxcbitcXHRpZiAoIWNmZzgwMjExX3ZhbGlkX2tleV9pZHgod2Rldiwga2V5X2lkeCwgcGFpcndpc2UsIG1hY19hZGRyKSlcXG4gXFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuIFxcbiBcXHRtc2cgPSBubG1zZ19uZXcoTkxNU0dfREVGQVVMVF9TSVpFLCBHRlBfS0VSTkVMKTtcXG5AQCAtNTY2Myw4ICs1NjYzLDkgQEAgc3RhdGljIGludCBubDgwMjExX2RlbF9rZXkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4gXFx0ICAgIGtleS50eXBlICE9IE5MODAyMTFfS0VZVFlQRV9HUk9VUClcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbi1cXHRpZiAoIWNmZzgwMjExX3ZhbGlkX2tleV9pZHgocmRldiwga2V5LmlkeCxcXG4tXFx0XFx0XFx0XFx0ICAgIGtleS50eXBlID09IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRSkpXFxuK1xcdGlmICghY2ZnODAyMTFfdmFsaWRfa2V5X2lkeCh3ZGV2LCBrZXkuaWR4LFxcbitcXHRcXHRcXHRcXHQgICAga2V5LnR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFLFxcbitcXHRcXHRcXHRcXHQgICAgbWFjX2FkZHIpKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuIFxcdGlmICghcmRldi1cXHUwMDNlb3BzLVxcdTAwM2VkZWxfa2V5KVxcbkBAIC01NjcyLDEwICs1NjczLDYgQEAgc3RhdGljIGludCBubDgwMjExX2RlbF9rZXkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4gXFxuIFxcdGVyciA9IG5sODAyMTFfa2V5X2FsbG93ZWQod2Rldik7XFxuIFxcbi1cXHRpZiAoa2V5LnR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX0dST1VQIFxcdTAwMjZcXHUwMDI2IG1hY19hZGRyIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICAhKHJkZXYtXFx1MDAzZXdpcGh5LmZsYWdzIFxcdTAwMjYgV0lQSFlfRkxBR19JQlNTX1JTTikpXFxuLVxcdFxcdGVyciA9IC1FTk9FTlQ7XFxuLVxcbiBcXHRpZiAoIWVycilcXG4gXFx0XFx0ZXJyID0gbmw4MDIxMV92YWxpZGF0ZV9rZXlfbGlua19pZChpbmZvLCB3ZGV2LCBsaW5rX2lkLFxcbiBcXHRcXHRcXHRcXHRrZXkudHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0UpO1xcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvdXRpbC5jIGIvbmV0L3dpcmVsZXNzL3V0aWwuY1xcbmluZGV4IDI0NTI3YmYzMjFiMmExLi4zZTU4NGQwY2EzZTI2NiAxMDA2NDRcXG4tLS0gYS9uZXQvd2lyZWxlc3MvdXRpbC5jXFxuKysrIGIvbmV0L3dpcmVsZXNzL3V0aWwuY1xcbkBAIC0yNDEsMTAgKzI0MSw4IEBAIGJvb2wgY2ZnODAyMTFfc3VwcG9ydGVkX2NpcGhlcl9zdWl0ZShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCB1MzIgY2lwaGVyKVxcbiBcXHRyZXR1cm4gZmFsc2U7XFxuIH1cXG4gXFxuLXN0YXRpYyBib29sXFxuLWNmZzgwMjExX2lndGtfY2lwaGVyX3N1cHBvcnRlZChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYpXFxuK3N0YXRpYyBib29sIGNmZzgwMjExX2lndGtfY2lwaGVyX3N1cHBvcnRlZChzdHJ1Y3Qgd2lwaHkgKndpcGh5KVxcbiB7XFxuLVxcdHN0cnVjdCB3aXBoeSAqd2lwaHkgPSBcXHUwMDI2cmRldi1cXHUwMDNld2lwaHk7XFxuIFxcdGludCBpO1xcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHdpcGh5LVxcdTAwM2VuX2NpcGhlcl9zdWl0ZXM7IGkrKykge1xcbkBAIC0yNjAsMjcgKzI1OCw4NiBAQCBjZmc4MDIxMV9pZ3RrX2NpcGhlcl9zdXBwb3J0ZWQoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2KVxcbiBcXHRyZXR1cm4gZmFsc2U7XFxuIH1cXG4gXFxuLWJvb2wgY2ZnODAyMTFfdmFsaWRfa2V5X2lkeChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxuLVxcdFxcdFxcdCAgICBpbnQga2V5X2lkeCwgYm9vbCBwYWlyd2lzZSlcXG4rYm9vbCBjZmc4MDIxMV92YWxpZF9rZXlfaWR4KHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxuK1xcdFxcdFxcdCAgICBpbnQga2V5X2lkeCwgYm9vbCBwYWlyd2lzZSxcXG4rXFx0XFx0XFx0ICAgIGNvbnN0IHU4ICptYWNfYWRkcilcXG4ge1xcbi1cXHRpbnQgbWF4X2tleV9pZHg7XFxuLVxcbi1cXHRpZiAocGFpcndpc2UpXFxuLVxcdFxcdG1heF9rZXlfaWR4ID0gMztcXG4tXFx0ZWxzZSBpZiAod2lwaHlfZXh0X2ZlYXR1cmVfaXNzZXQoXFx1MDAyNnJkZXYtXFx1MDAzZXdpcGh5LFxcbi1cXHRcXHRcXHRcXHRcXHQgTkw4MDIxMV9FWFRfRkVBVFVSRV9CRUFDT05fUFJPVEVDVElPTikgfHxcXG4tXFx0XFx0IHdpcGh5X2V4dF9mZWF0dXJlX2lzc2V0KFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeSxcXG4tXFx0XFx0XFx0XFx0XFx0IE5MODAyMTFfRVhUX0ZFQVRVUkVfQkVBQ09OX1BST1RFQ1RJT05fQ0xJRU5UKSlcXG4tXFx0XFx0bWF4X2tleV9pZHggPSA3O1xcbi1cXHRlbHNlIGlmIChjZmc4MDIxMV9pZ3RrX2NpcGhlcl9zdXBwb3J0ZWQocmRldikpXFxuLVxcdFxcdG1heF9rZXlfaWR4ID0gNTtcXG4tXFx0ZWxzZVxcbi1cXHRcXHRtYXhfa2V5X2lkeCA9IDM7XFxuK1xcdGlmIChXQVJOX09OKCF3ZGV2KSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4tXFx0aWYgKGtleV9pZHggXFx1MDAzYyAwIHx8IGtleV9pZHggXFx1MDAzZSBtYXhfa2V5X2lkeClcXG4rXFx0aWYgKGtleV9pZHggXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbi1cXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0LypcXG4rXFx0ICogQ2FuJ3QgZGlmZmVyZW50aWF0ZSBjaXBoZXJzIGhlcmUgc28gYWxsb3cgMC4uMy5cXG4rXFx0ICogUGFpcndpc2Uga2V5cyBtdXN0IGJlIGZvciBhIHN0YXRpb24gKE1BQyBhZGRyZXNzIGdpdmVuKS5cXG4rXFx0ICovXFxuK1xcdGlmIChwYWlyd2lzZSkge1xcbitcXHRcXHRpZiAoIW1hY19hZGRyKVxcbitcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRcXHRyZXR1cm4ga2V5X2lkeCBcXHUwMDNjIDQ7XFxuK1xcdH1cXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEZvciBncm91cCBrZXlzLCBtYWNfYWRkcj09TlVMTCBtZWFucyBzZXR0aW5nIGEgZ3JvdXAga2V5XFxuK1xcdCAqIGZvciBUWCwgd2hpY2ggaXMgb25seSBzdXBwb3J0ZWQgb24gc29tZSBpbnRlcmZhY2UgdHlwZXMsXFxuK1xcdCAqIGV4Y2VwdCBmb3IgU1RBVElPTi9QMlBfQ0xJRU5ULCB3aGVyZSBpdCdzIHNldHRpbmcgdGhlIFJYXFxuK1xcdCAqIGtleSB3aXRoIHRoZSBjdXJyZW50IEFQIChmb3IgbGVnYWN5IHJlYXNvbnMuKVxcbitcXHQgKlxcbitcXHQgKiBBcGFydCBmcm9tIHRoYXQgZXhjZXB0aW9uLCBhIG5vbi1OVUxMIG1hY19hZGRyIG1lYW5zIFJYXFxuK1xcdCAqIGtleSBiZWluZyBzZXQuXFxuK1xcdCAqL1xcbitcXG4rXFx0c3dpdGNoICh3ZGV2LVxcdTAwM2VpZnR5cGUpIHtcXG4rXFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzpcXG4rXFx0XFx0aWYgKCEod2Rldi1cXHUwMDNld2lwaHktXFx1MDAzZWZsYWdzIFxcdTAwMjYgV0lQSFlfRkxBR19JQlNTX1JTTikpXFxuK1xcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0XFx0ZmFsbHRocm91Z2g7XFxuK1xcdGNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDpcXG4rXFx0XFx0Lyogbm8gc3VwcG9ydCBmb3IgSUdUSy9CSUdUSyAoeWV0PykgKi9cXG4rXFx0XFx0cmV0dXJuIGtleV9pZHggXFx1MDAzYyA0O1xcbitcXHRjYXNlIE5MODAyMTFfSUZUWVBFX05BTl9EQVRBOlxcbitcXHRcXHQvKiB0aGVzZSBhbHdheXMgbmVlZCB0byBzdXBwb3J0IHBlci1TVEEgR1RLICovXFxuK1xcdFxcdHJldHVybiBrZXlfaWR4IFxcdTAwM2MgNDtcXG4rXFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9OQU46XFxuK1xcdFxcdC8qIG5vIGRhdGEgKi9cXG4rXFx0XFx0aWYgKGtleV9pZHggXFx1MDAzYyA0KVxcbitcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdFxcdC8qIE5BTiByZXVzZWQgdGhpcyBmbGFnICovXFxuK1xcdFxcdGlmICh3aXBoeV9leHRfZmVhdHVyZV9pc3NldCh3ZGV2LVxcdTAwM2V3aXBoeSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIE5MODAyMTFfRVhUX0ZFQVRVUkVfQkVBQ09OX1BST1RFQ1RJT04pKVxcbitcXHRcXHRcXHRyZXR1cm4ga2V5X2lkeCBcXHUwMDNjPSA3O1xcbitcXHRcXHRyZXR1cm4ga2V5X2lkeCBcXHUwMDNjPSA1O1xcbitcXHRjYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046XFxuK1xcdGNhc2UgTkw4MDIxMV9JRlRZUEVfUDJQX0NMSUVOVDpcXG4rXFx0XFx0Lyogc2VlIG5vdGUgYWJvdXQgZXhjZXB0aW9uIGFib3ZlICovXFxuK1xcdFxcdGlmIChtYWNfYWRkcilcXG4rXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRcXHQvKiBCSUdUSyBzdXBwb3J0IGltcGxpZXMgSUdUSyBzdXBwb3J0ICovXFxuK1xcdFxcdGlmICh3aXBoeV9leHRfZmVhdHVyZV9pc3NldCh3ZGV2LVxcdTAwM2V3aXBoeSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIE5MODAyMTFfRVhUX0ZFQVRVUkVfQkVBQ09OX1BST1RFQ1RJT05fQ0xJRU5UKSlcXG4rXFx0XFx0XFx0cmV0dXJuIGtleV9pZHggXFx1MDAzYz0gNztcXG4rXFx0XFx0ZmFsbHRocm91Z2g7XFxuK1xcdGNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6XFxuK1xcdGNhc2UgTkw4MDIxMV9JRlRZUEVfUDJQX0dPOlxcbitcXHRcXHQvKiBubyBSWCB3aXRoIFtCXUlHVEsgKi9cXG4rXFx0XFx0aWYgKG1hY19hZGRyKVxcbitcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdFxcdGlmICh3aXBoeV9leHRfZmVhdHVyZV9pc3NldCh3ZGV2LVxcdTAwM2V3aXBoeSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIE5MODAyMTFfRVhUX0ZFQVRVUkVfQkVBQ09OX1BST1RFQ1RJT04pKVxcbitcXHRcXHRcXHRyZXR1cm4ga2V5X2lkeCBcXHUwMDNjPSA3O1xcbitcXHRcXHRmYWxsdGhyb3VnaDtcXG4rXFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOOlxcbitcXHRcXHQvKiBubyBSWCB3aXRoIEdUSyAqL1xcbitcXHRcXHRpZiAobWFjX2FkZHIpXFxuK1xcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0XFx0aWYgKGNmZzgwMjExX2lndGtfY2lwaGVyX3N1cHBvcnRlZCh3ZGV2LVxcdTAwM2V3aXBoeSkpXFxuK1xcdFxcdFxcdHJldHVybiBrZXlfaWR4IFxcdTAwM2M9IDU7XFxuK1xcdFxcdHJldHVybiBrZXlfaWR4IFxcdTAwM2M9IDM7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0fVxcbiB9XFxuIFxcbiBpbnQgY2ZnODAyMTFfdmFsaWRhdGVfa2V5X3NldHRpbmdzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG5AQCAtMjg4LDEzICszNDUsNyBAQCBpbnQgY2ZnODAyMTFfdmFsaWRhdGVfa2V5X3NldHRpbmdzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG4gXFx0XFx0XFx0XFx0ICAgc3RydWN0IGtleV9wYXJhbXMgKnBhcmFtcywgaW50IGtleV9pZHgsXFxuIFxcdFxcdFxcdFxcdCAgIGJvb2wgcGFpcndpc2UsIGNvbnN0IHU4ICptYWNfYWRkcilcXG4ge1xcbi1cXHRpZiAoIWNmZzgwMjExX3ZhbGlkX2tleV9pZHgocmRldiwga2V5X2lkeCwgcGFpcndpc2UpKVxcbi1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tXFxuLVxcdGlmICghcGFpcndpc2UgXFx1MDAyNlxcdTAwMjYgbWFjX2FkZHIgXFx1MDAyNlxcdTAwMjYgIShyZGV2LVxcdTAwM2V3aXBoeS5mbGFncyBcXHUwMDI2IFdJUEhZX0ZMQUdfSUJTU19SU04pKVxcbi1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tXFxuLVxcdGlmIChwYWlyd2lzZSBcXHUwMDI2XFx1MDAyNiAhbWFjX2FkZHIpXFxuK1xcdGlmICghY2ZnODAyMTFfdmFsaWRfa2V5X2lkeCh3ZGV2LCBrZXlfaWR4LCBwYWlyd2lzZSwgbWFjX2FkZHIpKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuIFxcdHN3aXRjaCAocGFyYW1zLVxcdTAwM2VjaXBoZXIpIHtcXG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3dleHQtY29tcGF0LmMgYi9uZXQvd2lyZWxlc3Mvd2V4dC1jb21wYXQuY1xcbmluZGV4IDVkYmYzZWY0YjI1N2UyLi5kNDViYzA4YzBkZTQ5NyAxMDA2NDRcXG4tLS0gYS9uZXQvd2lyZWxlc3Mvd2V4dC1jb21wYXQuY1xcbisrKyBiL25ldC93aXJlbGVzcy93ZXh0LWNvbXBhdC5jXFxuQEAgLTQ1NCw4ICs0NTQsNyBAQCBzdGF0aWMgaW50IGNmZzgwMjExX3NldF9lbmNyeXB0aW9uKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG4gXFx0XFx0XFx0XFx0cmVqb2luID0gdHJ1ZTtcXG4gXFx0XFx0XFx0fVxcbiBcXG4tXFx0XFx0XFx0aWYgKCFwYWlyd2lzZSBcXHUwMDI2XFx1MDAyNiBhZGRyIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdFxcdCAgICAhKHJkZXYtXFx1MDAzZXdpcGh5LmZsYWdzIFxcdTAwMjYgV0lQSFlfRkxBR19JQlNTX1JTTikpXFxuK1xcdFxcdFxcdGlmICghY2ZnODAyMTFfdmFsaWRfa2V5X2lkeCh3ZGV2LCBpZHgsIHBhaXJ3aXNlLCBhZGRyKSlcXG4gXFx0XFx0XFx0XFx0ZXJyID0gLUVOT0VOVDtcXG4gXFx0XFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRcXHRlcnIgPSByZGV2X2RlbF9rZXkocmRldiwgd2RldiwgLTEsIGlkeCwgcGFpcndpc2UsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDAwOjQ3OjQwLjM3MjE4NDIyNloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzAwMDYzNjM1MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0ZHODAyMTFcIixcbiAgICBcIkNGRzgwMjExX1dFWFRcIixcbiAgICBcIk1BQzgwMjExX0hXU0lNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmw4MDIxMV9nZXRfa2V5XCIsXG4gICAgXCJubDgwMjExX2RlbF9rZXlcIixcbiAgICBcImNmZzgwMjExX3ZhbGlkX2tleV9pZHhcIixcbiAgICBcImNmZzgwMjExX3ZhbGlkYXRlX2tleV9zZXR0aW5nc1wiLFxuICAgIFwiY2ZnODAyMTFfc2V0X2VuY3J5cHRpb25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9naWMgZm9yIHZhbGlkYXRpbmcga2V5IGluZGljZXMgaW4gdGhlIGNmZzgwMjExIHN1YnN5c3RlbSwgYWRkaW5nIGludGVyZmFjZSB0eXBlLXNwZWNpZmljIGNoZWNrcyBhbmQgY2hhbmdpbmcgdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZSB0byB0YWtlIGBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2YC4gVGhpcyBhZmZlY3RzIG5ldGxpbmsgKG5sODAyMTEpIGFuZCB3aXJlbGVzcyBleHRlbnNpb25zICh3ZXh0KSBwYXRocyBmb3IgZ2V0dGluZywgZGVsZXRpbmcsIGFuZCBzZXR0aW5nIGtleXMuIFRoZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlLCBtYWtpbmcgdGhlbSBzdWl0YWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmNWJkMWQ2Yjk5ZmMzMGMwN2I5NDBkMDQ1ZmQ3NDMzM2YxNzdiZWQ2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMTYgMDA6NDc6MzcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvY29yZS5oIGIvbmV0L3dpcmVsZXNzL2NvcmUuaFxuaW5kZXggZGY0N2VkNjIwOGE1MGQuLjM5OTAzNzUxNDk0M2Q5IDEwMDY0NFxuLS0tIGEvbmV0L3dpcmVsZXNzL2NvcmUuaFxuKysrIGIvbmV0L3dpcmVsZXNzL2NvcmUuaFxuQEAgLTQ0Myw4ICs0NDMsOSBAQCB2b2lkIGNmZzgwMjExX3NtZV9hYmFuZG9uX2Fzc29jKHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYpO1xuIFxuIC8qIGludGVybmFsIGhlbHBlcnMgKi9cbiBib29sIGNmZzgwMjExX3N1cHBvcnRlZF9jaXBoZXJfc3VpdGUoc3RydWN0IHdpcGh5ICp3aXBoeSwgdTMyIGNpcGhlcik7XG4tYm9vbCBjZmc4MDIxMV92YWxpZF9rZXlfaWR4KHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbi1cdFx0XHQgICAgaW50IGtleV9pZHgsIGJvb2wgcGFpcndpc2UpO1xuK2Jvb2wgY2ZnODAyMTFfdmFsaWRfa2V5X2lkeChzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuK1x0XHRcdCAgICBpbnQga2V5X2lkeCwgYm9vbCBwYWlyd2lzZSxcbitcdFx0XHQgICAgY29uc3QgdTggKm1hY19hZGRyKTtcbiBpbnQgY2ZnODAyMTFfdmFsaWRhdGVfa2V5X3NldHRpbmdzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbiBcdFx0XHRcdCAgIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4gXHRcdFx0XHQgICBzdHJ1Y3Qga2V5X3BhcmFtcyAqcGFyYW1zLCBpbnQga2V5X2lkeCxcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jIGIvbmV0L3dpcmVsZXNzL25sODAyMTEuY1xuaW5kZXggMjQyMDcxYWQxMGQ2YzkuLjk5YTFjMDE3NGJkYmYyIDEwMDY0NFxuLS0tIGEvbmV0L3dpcmVsZXNzL25sODAyMTEuY1xuKysrIGIvbmV0L3dpcmVsZXNzL25sODAyMTEuY1xuQEAgLTU0MDksNyArNTQwOSw3IEBAIHN0YXRpYyBpbnQgbmw4MDIxMV9nZXRfa2V5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRpZiAoIXJkZXYtXHUwMDNlb3BzLVx1MDAzZWdldF9rZXkpXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcbi1cdGlmICghcGFpcndpc2UgXHUwMDI2XHUwMDI2IG1hY19hZGRyIFx1MDAyNlx1MDAyNiAhKHJkZXYtXHUwMDNld2lwaHkuZmxhZ3MgXHUwMDI2IFdJUEhZX0ZMQUdfSUJTU19SU04pKVxuK1x0aWYgKCFjZmc4MDIxMV92YWxpZF9rZXlfaWR4KHdkZXYsIGtleV9pZHgsIHBhaXJ3aXNlLCBtYWNfYWRkcikpXG4gXHRcdHJldHVybiAtRU5PRU5UO1xuIFxuIFx0bXNnID0gbmxtc2dfbmV3KE5MTVNHX0RFRkFVTFRfU0laRSwgR0ZQX0tFUk5FTCk7XG5AQCAtNTY2Myw4ICs1NjYzLDkgQEAgc3RhdGljIGludCBubDgwMjExX2RlbF9rZXkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdCAgICBrZXkudHlwZSAhPSBOTDgwMjExX0tFWVRZUEVfR1JPVVApXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0aWYgKCFjZmc4MDIxMV92YWxpZF9rZXlfaWR4KHJkZXYsIGtleS5pZHgsXG4tXHRcdFx0XHQgICAga2V5LnR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFKSlcbitcdGlmICghY2ZnODAyMTFfdmFsaWRfa2V5X2lkeCh3ZGV2LCBrZXkuaWR4LFxuK1x0XHRcdFx0ICAgIGtleS50eXBlID09IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRSxcbitcdFx0XHRcdCAgICBtYWNfYWRkcikpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0aWYgKCFyZGV2LVx1MDAzZW9wcy1cdTAwM2VkZWxfa2V5KVxuQEAgLTU2NzIsMTAgKzU2NzMsNiBAQCBzdGF0aWMgaW50IG5sODAyMTFfZGVsX2tleShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFxuIFx0ZXJyID0gbmw4MDIxMV9rZXlfYWxsb3dlZCh3ZGV2KTtcbiBcbi1cdGlmIChrZXkudHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfR1JPVVAgXHUwMDI2XHUwMDI2IG1hY19hZGRyIFx1MDAyNlx1MDAyNlxuLVx0ICAgICEocmRldi1cdTAwM2V3aXBoeS5mbGFncyBcdTAwMjYgV0lQSFlfRkxBR19JQlNTX1JTTikpXG4tXHRcdGVyciA9IC1FTk9FTlQ7XG4tXG4gXHRpZiAoIWVycilcbiBcdFx0ZXJyID0gbmw4MDIxMV92YWxpZGF0ZV9rZXlfbGlua19pZChpbmZvLCB3ZGV2LCBsaW5rX2lkLFxuIFx0XHRcdFx0a2V5LnR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFKTtcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvdXRpbC5jIGIvbmV0L3dpcmVsZXNzL3V0aWwuY1xuaW5kZXggMjQ1MjdiZjMyMWIyYTEuLjNlNTg0ZDBjYTNlMjY2IDEwMDY0NFxuLS0tIGEvbmV0L3dpcmVsZXNzL3V0aWwuY1xuKysrIGIvbmV0L3dpcmVsZXNzL3V0aWwuY1xuQEAgLTI0MSwxMCArMjQxLDggQEAgYm9vbCBjZmc4MDIxMV9zdXBwb3J0ZWRfY2lwaGVyX3N1aXRlKHN0cnVjdCB3aXBoeSAqd2lwaHksIHUzMiBjaXBoZXIpXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuLXN0YXRpYyBib29sXG4tY2ZnODAyMTFfaWd0a19jaXBoZXJfc3VwcG9ydGVkKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldilcbitzdGF0aWMgYm9vbCBjZmc4MDIxMV9pZ3RrX2NpcGhlcl9zdXBwb3J0ZWQoc3RydWN0IHdpcGh5ICp3aXBoeSlcbiB7XG4tXHRzdHJ1Y3Qgd2lwaHkgKndpcGh5ID0gXHUwMDI2cmRldi1cdTAwM2V3aXBoeTtcbiBcdGludCBpO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd2lwaHktXHUwMDNlbl9jaXBoZXJfc3VpdGVzOyBpKyspIHtcbkBAIC0yNjAsMjcgKzI1OCw4NiBAQCBjZmc4MDIxMV9pZ3RrX2NpcGhlcl9zdXBwb3J0ZWQoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2KVxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbi1ib29sIGNmZzgwMjExX3ZhbGlkX2tleV9pZHgoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuLVx0XHRcdCAgICBpbnQga2V5X2lkeCwgYm9vbCBwYWlyd2lzZSlcbitib29sIGNmZzgwMjExX3ZhbGlkX2tleV9pZHgoc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcbitcdFx0XHQgICAgaW50IGtleV9pZHgsIGJvb2wgcGFpcndpc2UsXG4rXHRcdFx0ICAgIGNvbnN0IHU4ICptYWNfYWRkcilcbiB7XG4tXHRpbnQgbWF4X2tleV9pZHg7XG4tXG4tXHRpZiAocGFpcndpc2UpXG4tXHRcdG1heF9rZXlfaWR4ID0gMztcbi1cdGVsc2UgaWYgKHdpcGh5X2V4dF9mZWF0dXJlX2lzc2V0KFx1MDAyNnJkZXYtXHUwMDNld2lwaHksXG4tXHRcdFx0XHRcdCBOTDgwMjExX0VYVF9GRUFUVVJFX0JFQUNPTl9QUk9URUNUSU9OKSB8fFxuLVx0XHQgd2lwaHlfZXh0X2ZlYXR1cmVfaXNzZXQoXHUwMDI2cmRldi1cdTAwM2V3aXBoeSxcbi1cdFx0XHRcdFx0IE5MODAyMTFfRVhUX0ZFQVRVUkVfQkVBQ09OX1BST1RFQ1RJT05fQ0xJRU5UKSlcbi1cdFx0bWF4X2tleV9pZHggPSA3O1xuLVx0ZWxzZSBpZiAoY2ZnODAyMTFfaWd0a19jaXBoZXJfc3VwcG9ydGVkKHJkZXYpKVxuLVx0XHRtYXhfa2V5X2lkeCA9IDU7XG4tXHRlbHNlXG4tXHRcdG1heF9rZXlfaWR4ID0gMztcbitcdGlmIChXQVJOX09OKCF3ZGV2KSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0aWYgKGtleV9pZHggXHUwMDNjIDAgfHwga2V5X2lkeCBcdTAwM2UgbWF4X2tleV9pZHgpXG4rXHRpZiAoa2V5X2lkeCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0cmV0dXJuIHRydWU7XG4rXHQvKlxuK1x0ICogQ2FuJ3QgZGlmZmVyZW50aWF0ZSBjaXBoZXJzIGhlcmUgc28gYWxsb3cgMC4uMy5cbitcdCAqIFBhaXJ3aXNlIGtleXMgbXVzdCBiZSBmb3IgYSBzdGF0aW9uIChNQUMgYWRkcmVzcyBnaXZlbikuXG4rXHQgKi9cbitcdGlmIChwYWlyd2lzZSkge1xuK1x0XHRpZiAoIW1hY19hZGRyKVxuK1x0XHRcdHJldHVybiBmYWxzZTtcbitcbitcdFx0cmV0dXJuIGtleV9pZHggXHUwMDNjIDQ7XG4rXHR9XG4rXG4rXHQvKlxuK1x0ICogRm9yIGdyb3VwIGtleXMsIG1hY19hZGRyPT1OVUxMIG1lYW5zIHNldHRpbmcgYSBncm91cCBrZXlcbitcdCAqIGZvciBUWCwgd2hpY2ggaXMgb25seSBzdXBwb3J0ZWQgb24gc29tZSBpbnRlcmZhY2UgdHlwZXMsXG4rXHQgKiBleGNlcHQgZm9yIFNUQVRJT04vUDJQX0NMSUVOVCwgd2hlcmUgaXQncyBzZXR0aW5nIHRoZSBSWFxuK1x0ICoga2V5IHdpdGggdGhlIGN1cnJlbnQgQVAgKGZvciBsZWdhY3kgcmVhc29ucy4pXG4rXHQgKlxuK1x0ICogQXBhcnQgZnJvbSB0aGF0IGV4Y2VwdGlvbiwgYSBub24tTlVMTCBtYWNfYWRkciBtZWFucyBSWFxuK1x0ICoga2V5IGJlaW5nIHNldC5cbitcdCAqL1xuK1xuK1x0c3dpdGNoICh3ZGV2LVx1MDAzZWlmdHlwZSkge1xuK1x0Y2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzpcbitcdFx0aWYgKCEod2Rldi1cdTAwM2V3aXBoeS1cdTAwM2VmbGFncyBcdTAwMjYgV0lQSFlfRkxBR19JQlNTX1JTTikpXG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1x0XHRmYWxsdGhyb3VnaDtcbitcdGNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDpcbitcdFx0Lyogbm8gc3VwcG9ydCBmb3IgSUdUSy9CSUdUSyAoeWV0PykgKi9cbitcdFx0cmV0dXJuIGtleV9pZHggXHUwMDNjIDQ7XG4rXHRjYXNlIE5MODAyMTFfSUZUWVBFX05BTl9EQVRBOlxuK1x0XHQvKiB0aGVzZSBhbHdheXMgbmVlZCB0byBzdXBwb3J0IHBlci1TVEEgR1RLICovXG4rXHRcdHJldHVybiBrZXlfaWR4IFx1MDAzYyA0O1xuK1x0Y2FzZSBOTDgwMjExX0lGVFlQRV9OQU46XG4rXHRcdC8qIG5vIGRhdGEgKi9cbitcdFx0aWYgKGtleV9pZHggXHUwMDNjIDQpXG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1x0XHQvKiBOQU4gcmV1c2VkIHRoaXMgZmxhZyAqL1xuK1x0XHRpZiAod2lwaHlfZXh0X2ZlYXR1cmVfaXNzZXQod2Rldi1cdTAwM2V3aXBoeSxcbitcdFx0XHRcdFx0ICAgIE5MODAyMTFfRVhUX0ZFQVRVUkVfQkVBQ09OX1BST1RFQ1RJT04pKVxuK1x0XHRcdHJldHVybiBrZXlfaWR4IFx1MDAzYz0gNztcbitcdFx0cmV0dXJuIGtleV9pZHggXHUwMDNjPSA1O1xuK1x0Y2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOlxuK1x0Y2FzZSBOTDgwMjExX0lGVFlQRV9QMlBfQ0xJRU5UOlxuK1x0XHQvKiBzZWUgbm90ZSBhYm91dCBleGNlcHRpb24gYWJvdmUgKi9cbitcdFx0aWYgKG1hY19hZGRyKVxuK1x0XHRcdHJldHVybiBmYWxzZTtcbitcdFx0LyogQklHVEsgc3VwcG9ydCBpbXBsaWVzIElHVEsgc3VwcG9ydCAqL1xuK1x0XHRpZiAod2lwaHlfZXh0X2ZlYXR1cmVfaXNzZXQod2Rldi1cdTAwM2V3aXBoeSxcbitcdFx0XHRcdFx0ICAgIE5MODAyMTFfRVhUX0ZFQVRVUkVfQkVBQ09OX1BST1RFQ1RJT05fQ0xJRU5UKSlcbitcdFx0XHRyZXR1cm4ga2V5X2lkeCBcdTAwM2M9IDc7XG4rXHRcdGZhbGx0aHJvdWdoO1xuK1x0Y2FzZSBOTDgwMjExX0lGVFlQRV9BUDpcbitcdGNhc2UgTkw4MDIxMV9JRlRZUEVfUDJQX0dPOlxuK1x0XHQvKiBubyBSWCB3aXRoIFtCXUlHVEsgKi9cbitcdFx0aWYgKG1hY19hZGRyKVxuK1x0XHRcdHJldHVybiBmYWxzZTtcbitcdFx0aWYgKHdpcGh5X2V4dF9mZWF0dXJlX2lzc2V0KHdkZXYtXHUwMDNld2lwaHksXG4rXHRcdFx0XHRcdCAgICBOTDgwMjExX0VYVF9GRUFUVVJFX0JFQUNPTl9QUk9URUNUSU9OKSlcbitcdFx0XHRyZXR1cm4ga2V5X2lkeCBcdTAwM2M9IDc7XG4rXHRcdGZhbGx0aHJvdWdoO1xuK1x0Y2FzZSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOOlxuK1x0XHQvKiBubyBSWCB3aXRoIEdUSyAqL1xuK1x0XHRpZiAobWFjX2FkZHIpXG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1x0XHRpZiAoY2ZnODAyMTFfaWd0a19jaXBoZXJfc3VwcG9ydGVkKHdkZXYtXHUwMDNld2lwaHkpKVxuK1x0XHRcdHJldHVybiBrZXlfaWR4IFx1MDAzYz0gNTtcbitcdFx0cmV0dXJuIGtleV9pZHggXHUwMDNjPSAzO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0fVxuIH1cbiBcbiBpbnQgY2ZnODAyMTFfdmFsaWRhdGVfa2V5X3NldHRpbmdzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbkBAIC0yODgsMTMgKzM0NSw3IEBAIGludCBjZmc4MDIxMV92YWxpZGF0ZV9rZXlfc2V0dGluZ3Moc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuIFx0XHRcdFx0ICAgc3RydWN0IGtleV9wYXJhbXMgKnBhcmFtcywgaW50IGtleV9pZHgsXG4gXHRcdFx0XHQgICBib29sIHBhaXJ3aXNlLCBjb25zdCB1OCAqbWFjX2FkZHIpXG4ge1xuLVx0aWYgKCFjZmc4MDIxMV92YWxpZF9rZXlfaWR4KHJkZXYsIGtleV9pZHgsIHBhaXJ3aXNlKSlcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tXG4tXHRpZiAoIXBhaXJ3aXNlIFx1MDAyNlx1MDAyNiBtYWNfYWRkciBcdTAwMjZcdTAwMjYgIShyZGV2LVx1MDAzZXdpcGh5LmZsYWdzIFx1MDAyNiBXSVBIWV9GTEFHX0lCU1NfUlNOKSlcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tXG4tXHRpZiAocGFpcndpc2UgXHUwMDI2XHUwMDI2ICFtYWNfYWRkcilcbitcdGlmICghY2ZnODAyMTFfdmFsaWRfa2V5X2lkeCh3ZGV2LCBrZXlfaWR4LCBwYWlyd2lzZSwgbWFjX2FkZHIpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdHN3aXRjaCAocGFyYW1zLVx1MDAzZWNpcGhlcikge1xuZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy93ZXh0LWNvbXBhdC5jIGIvbmV0L3dpcmVsZXNzL3dleHQtY29tcGF0LmNcbmluZGV4IDVkYmYzZWY0YjI1N2UyLi5kNDViYzA4YzBkZTQ5NyAxMDA2NDRcbi0tLSBhL25ldC93aXJlbGVzcy93ZXh0LWNvbXBhdC5jXG4rKysgYi9uZXQvd2lyZWxlc3Mvd2V4dC1jb21wYXQuY1xuQEAgLTQ1NCw4ICs0NTQsNyBAQCBzdGF0aWMgaW50IGNmZzgwMjExX3NldF9lbmNyeXB0aW9uKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbiBcdFx0XHRcdHJlam9pbiA9IHRydWU7XG4gXHRcdFx0fVxuIFxuLVx0XHRcdGlmICghcGFpcndpc2UgXHUwMDI2XHUwMDI2IGFkZHIgXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICAgICEocmRldi1cdTAwM2V3aXBoeS5mbGFncyBcdTAwMjYgV0lQSFlfRkxBR19JQlNTX1JTTikpXG4rXHRcdFx0aWYgKCFjZmc4MDIxMV92YWxpZF9rZXlfaWR4KHdkZXYsIGlkeCwgcGFpcndpc2UsIGFkZHIpKVxuIFx0XHRcdFx0ZXJyID0gLUVOT0VOVDtcbiBcdFx0XHRlbHNlXG4gXHRcdFx0XHRlcnIgPSByZGV2X2RlbF9rZXkocmRldiwgd2RldiwgLTEsIGlkeCwgcGFpcndpc2UsXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMDo0Nzo0MC4zNzIxOTc2OTdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTg2MzExNjc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgUGxhbiBmb3IgTUFDODAyMTEgS2V5IE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCBhIHBhdGNoIGhlcmUgdGhhdCdzIHBva2luZyBhcm91bmQgaW4gYG5ldC93aXJlbGVzc2AuIExvb2tzIGxpa2UgaXQncyBtYWtpbmcgc29tZSBzaWduaWZpY2FudCBjaGFuZ2VzIHRvIHRoZSBrZXkgbWFuYWdlbWVudCBjb2RlLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgY2ZnODAyMTFgIGFuZCBgbWFjODAyMTFgIHN1YnN5c3RlbXMuIFRoaXMgbW9kaWZpY2F0aW9uIG9mIGBjZmc4MDIxMV92YWxpZF9rZXlfaWR4YCBpcyB3aGF0IGNhdWdodCBteSBleWUuICBJdCdzIG5vdyB0YWtpbmcgYSBgd2lyZWxlc3NfZGV2YCBhbmQgTUFDIGFkZHJlc3MsIGluc3RlYWQgb2YgdGhlIHJlZ2lzdGVyZWQgZGV2aWNlLCB3aGljaCBmZWVscyBsaWtlIGEgZnVuZGFtZW50YWwgc2hpZnQgYW5kIGRlZmluaXRlbHkgd2FycmFudHMgYSBjbG9zZXIgbG9vay4gVGhlIGFkZGVkIGNoZWNrcyBiYXNlZCBvbiBgd2Rldi1cdTAwM2VpZnR5cGVgIGFyZSBhbHNvIGludGVyZXN0aW5nLiBUaGlzIGNvZGUgaXMgY2xlYXJseSByZWFjaGFibGUgdGhyb3VnaCBib3RoIG5ldGxpbmsgKG5sODAyMTEpIGFuZCB0aGUgV0VYVCBjb21wYXRpYmlsaXR5IGxheWVyLCBtYWtpbmcgaXQgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuXG5cbk15IHByaW1hcnkgZ29hbCBub3cgaXMgdG8gaWRlbnRpZnkgdGhlIG1vc3QgY3JpdGljYWwgZnVuY3Rpb25zIHRvIGZvY3VzIHRoZSBmdXp6aW5nIGVmZm9ydHMuICBGcm9tIHdoYXQgSSBjYW4gdGVsbCBmcm9tIHRoZSBkaWZmLCB0aGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyB0aGF0IG5lZWQgdGhlIG1vc3QgYXR0ZW50aW9uOiBgbmw4MDIxMV9nZXRfa2V5YCwgYG5sODAyMTFfZGVsX2tleWAsIGBjZmc4MDIxMV92YWxpZF9rZXlfaWR4YCwgYGNmZzgwMjExX3ZhbGlkYXRlX2tleV9zZXR0aW5nc2AsIGFuZCBgY2ZnODAyMTFfc2V0X2VuY3J5cHRpb25gLiBUaGVzZSBzZWVtIHRvIGJlIHRoZSBjb3JlIGVudHJ5IHBvaW50cywgYW5kIGdpdmVuIHRoZSBjaGFuZ2VzLCB0aGV5J3JlIGxpa2VseSB3aGVyZSB3ZSBjYW4gaW50cm9kdWNlIHNvbWUgaW50ZXJlc3RpbmcgYW5kIHBlcmhhcHMgdW5leHBlY3RlZCBpbnB1dHMuXG5cbkJlZm9yZSBJIGdldCB0b28gZGVlcCBpbnRvIHRoZSBmdXp6aW5nIHN0cmF0ZWd5IGl0c2VsZiwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ3ZlIGdvdCB0aGUgbmVjZXNzYXJ5IGtlcm5lbCBjb25maWd1cmF0aW9ucyBpbiBwbGFjZS4gIEknbSBhc3N1bWluZyBgbmV0L3dpcmVsZXNzYCBpcyBidWlsdCB3aXRoIGBDT05GSUdfQ0ZHODAyMTFgIGFuZCBgQ09ORklHX01BQzgwMjExYCwgYnV0IEknbGwgZG91YmxlLWNoZWNrIHRob3NlIGNvbmZpZ3MuICBDYW4ndCBhZmZvcmQgdG8gd2FzdGUgdGltZSBvbiBmdXp6aW5nIGNvZGUgdGhhdCBpc24ndCBhY3R1YWxseSBjb21waWxlZCBpbiEgIE9uY2UgSSBjb25maXJtIHRoZSBjb25maWdzLCBJIGNhbiBtb3ZlIG9uIHRvIHRoZSBmdXp6aW5nIHNldHVwIGFuZCBpZGVudGlmeWluZyBlZmZlY3RpdmUgdGVzdCBjYXNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDUzNywiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyOSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDAwOjQ3OjQ2LjM1ODUxMjMwNloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTI5NTA0OTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNmZzgwMjExX3ZhbGlkX2tleV9pZHhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3dpcmVsZXNzL2NvcmUuaD00NDU9Ym9vbCBjZmc4MDIxMV9zdXBwb3J0ZWRfY2lwaGVyX3N1aXRlKHN0cnVjdCB3aXBoeSAqd2lwaHksIHUzMiBjaXBoZXIpO1xcbm5ldC93aXJlbGVzcy9jb3JlLmg6NDQ2OmJvb2wgY2ZnODAyMTFfdmFsaWRfa2V5X2lkeChzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxcbm5ldC93aXJlbGVzcy9jb3JlLmgtNDQ3LVxcdFxcdFxcdCAgICBpbnQga2V5X2lkeCwgYm9vbCBwYWlyd2lzZSxcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9NTM2MT1zdGF0aWMgaW50IG5sODAyMTFfZ2V0X2tleShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy01NDExLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6NTQxMjpcXHRpZiAoIWNmZzgwMjExX3ZhbGlkX2tleV9pZHgod2Rldiwga2V5X2lkeCwgcGFpcndpc2UsIG1hY19hZGRyKSlcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTU0MTMtXFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTU2Mzg9c3RhdGljIGludCBubDgwMjExX2RlbF9rZXkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNTY2NS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjU2NjY6XFx0aWYgKCFjZmc4MDIxMV92YWxpZF9rZXlfaWR4KHdkZXYsIGtleS5pZHgsXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy01NjY3LVxcdFxcdFxcdFxcdCAgICBrZXkudHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0UsXFxuLS1cXG5uZXQvd2lyZWxlc3MvdXRpbC5jPTI0ND1zdGF0aWMgYm9vbCBjZmc4MDIxMV9pZ3RrX2NpcGhlcl9zdXBwb3J0ZWQoc3RydWN0IHdpcGh5ICp3aXBoeSlcXG4tLVxcbm5ldC93aXJlbGVzcy91dGlsLmMtMjYwLVxcbm5ldC93aXJlbGVzcy91dGlsLmM6MjYxOmJvb2wgY2ZnODAyMTFfdmFsaWRfa2V5X2lkeChzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxcbm5ldC93aXJlbGVzcy91dGlsLmMtMjYyLVxcdFxcdFxcdCAgICBpbnQga2V5X2lkeCwgYm9vbCBwYWlyd2lzZSxcXG4tLVxcbm5ldC93aXJlbGVzcy91dGlsLmM9MzQzPWludCBjZmc4MDIxMV92YWxpZGF0ZV9rZXlfc2V0dGluZ3Moc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbi0tXFxubmV0L3dpcmVsZXNzL3V0aWwuYy0zNDcte1xcbm5ldC93aXJlbGVzcy91dGlsLmM6MzQ4OlxcdGlmICghY2ZnODAyMTFfdmFsaWRfa2V5X2lkeCh3ZGV2LCBrZXlfaWR4LCBwYWlyd2lzZSwgbWFjX2FkZHIpKVxcbm5ldC93aXJlbGVzcy91dGlsLmMtMzQ5LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxubmV0L3dpcmVsZXNzL3dleHQtY29tcGF0LmM9Mzk4PXN0YXRpYyBpbnQgY2ZnODAyMTFfc2V0X2VuY3J5cHRpb24oc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbi0tXFxubmV0L3dpcmVsZXNzL3dleHQtY29tcGF0LmMtNDU2LVxcbm5ldC93aXJlbGVzcy93ZXh0LWNvbXBhdC5jOjQ1NzpcXHRcXHRcXHRpZiAoIWNmZzgwMjExX3ZhbGlkX2tleV9pZHgod2RldiwgaWR4LCBwYWlyd2lzZSwgYWRkcikpXFxubmV0L3dpcmVsZXNzL3dleHQtY29tcGF0LmMtNDU4LVxcdFxcdFxcdFxcdGVyciA9IC1FTk9FTlQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDAwOjQ3OjUyLjI4ODAyOTAxNloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3ODA2Nzc3NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLZXkgTWFuYWdlbWVudCBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBmdW5jdGlvbnM6IGBubDgwMjExX2dldF9rZXlgLCBgbmw4MDIxMV9kZWxfa2V5YCwgYGNmZzgwMjExX3ZhbGlkX2tleV9pZHhgLCBgY2ZnODAyMTFfdmFsaWRhdGVfa2V5X3NldHRpbmdzYCwgYW5kIGBjZmc4MDIxMV9zZXRfZW5jcnlwdGlvbmAuIFRoZXkncmUgYWxsIG9idmlvdXNseSByZWxhdGVkIHRvIGtleSBtYW5hZ2VtZW50IHdpdGhpbiB0aGUgd2lyZWxlc3MgbmV0d29ya2luZyBzdGFjay4gYG5sODAyMTFfZ2V0X2tleWAgYW5kIGBubDgwMjExX2RlbF9rZXlgIHN1Z2dlc3QgaW50ZXJhY3Rpb24gd2l0aCB0aGUgbmV0bGluayBpbnRlcmZhY2UsIHdoaWNoIGlzIHN0YW5kYXJkIGZvciBjb250cm9sIHBsYW5lIG9wZXJhdGlvbnMgaW4gbW9kZXJuIExpbnV4IG5ldHdvcmtpbmcuIEknbSBndWVzc2luZyB0aGV5IGhhbmRsZSByZXRyaWV2aW5nIGFuZCBkZWxldGluZyBjcnlwdG9ncmFwaGljIGtleXMgYXNzb2NpYXRlZCB3aXRoIHdpcmVsZXNzIGludGVyZmFjZXMuIFRoZSBvdGhlciB0aHJlZSBsb29rIGxpa2UgdGhleSdyZSB2YWxpZGF0aW9uIGFuZCBjb25maWd1cmF0aW9uIHJvdXRpbmVzIHdpdGhpbiB0aGUgYGNmZzgwMjExYCBmcmFtZXdvcmsuIGBjZmc4MDIxMV92YWxpZF9rZXlfaWR4YCBpcyBwcm9iYWJseSBhYm91dCBjaGVja2luZyB0aGUgdmFsaWRpdHkgb2YgYSBnaXZlbiBrZXkgaW5kZXgsIHdoaWNoIGlzIHByZXR0eSBmdW5kYW1lbnRhbCB0byBlbnN1cmUgYWdhaW5zdCBidWZmZXIgb3ZlcmZsb3dzIG9yIG90aGVyIHNlY3VyaXR5IGlzc3VlcyB3aGVuIGFjY2Vzc2luZyBrZXlzLiBgY2ZnODAyMTFfdmFsaWRhdGVfa2V5X3NldHRpbmdzYCBzZWVtcyB0byBoYW5kbGUgdmFsaWRhdGlvbiBvZiBrZXkgc2V0dGluZ3MgbGlrZSBsZW5ndGgsIGFsZ29yaXRobSwgZXRjLiwgZW5zdXJpbmcgdGhhdCB0aGV5J3JlIGNvbXBhdGlibGUgd2l0aCB0aGUgaGFyZHdhcmUgYW5kIHRoZSBjb25maWd1cmVkIHNlY3VyaXR5IHBvbGljeS4gRmluYWxseSwgYGNmZzgwMjExX3NldF9lbmNyeXB0aW9uYCBpcyBhIG5vLWJyYWluZXIsIGl0J3MgYWJvdXQgYWN0dWFsbHkgYXBwbHlpbmcgdGhlIGVuY3J5cHRpb24gc2V0dGluZ3MuXG5cblRvIGdldCBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGVzZSBmaXQgdG9nZXRoZXIgYW5kIHdoYXQgZGVwZW5kZW5jaWVzIHRoZXkgaGF2ZSwgSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgdGhlIEtjb25maWcgZm9yIHRoZSBgbmV0L3dpcmVsZXNzYCBzZWN0aW9uLiBUaGF0IHNob3VsZCBzaG93IG1lIHRoZSByZWxldmFudCBjb21waWxlLXRpbWUgb3B0aW9ucyBhbmQgdGhlaXIgZGVwZW5kZW5jaWVzLCB3aGljaCB3aWxsIGdpdmUgbWUgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgZW5hYmxlZCBhbmQgdXNlZCB3aXRoaW4gdGhlIGJyb2FkZXIgY29udGV4dCBvZiB0aGUgd2lyZWxlc3Mgc3RhY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwODYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMDo0Nzo1Ni4wNjg3MDkwNjRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc3MTE5NTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5jb25maWcgQ0ZHODAyMTFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3dpcmVsZXNzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3dpcmVsZXNzL0tjb25maWc9MTQ9Y29uZmlnIFdFWFRfUFJJVlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTYtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTc6Y29uZmlnIENGRzgwMjExXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTgtXFx0dHJpc3RhdGUgXFxcImNmZzgwMjExIC0gd2lyZWxlc3MgY29uZmlndXJhdGlvbiBBUElcXFwiXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZz0zOD1jb25maWcgTkw4MDIxMV9URVNUTU9ERVxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctNTEtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6NTI6Y29uZmlnIENGRzgwMjExX0RFVkVMT1BFUl9XQVJOSU5HU1xcbm5ldC93aXJlbGVzcy9LY29uZmlnLTUzLVxcdGJvb2wgXFxcImVuYWJsZSBkZXZlbG9wZXIgd2FybmluZ3NcXFwiXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy02Ny1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo2ODpjb25maWcgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXFxubmV0L3dpcmVsZXNzL0tjb25maWctNjktXFx0Ym9vbCBcXFwiY2ZnODAyMTEgY2VydGlmaWNhdGlvbiBvbnVzXFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctODgtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6ODk6Y29uZmlnIENGRzgwMjExX1JFUVVJUkVfU0lHTkVEX1JFR0RCXFxubmV0L3dpcmVsZXNzL0tjb25maWctOTAtXFx0Ym9vbCBcXFwicmVxdWlyZSByZWdkYiBzaWduYXR1cmVcXFwiIGlmIENGRzgwMjExX0NFUlRJRklDQVRJT05fT05VU1xcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctOTgtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6OTk6Y29uZmlnIENGRzgwMjExX1VTRV9LRVJORUxfUkVHREJfS0VZU1xcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEwMC1cXHRib29sIFxcXCJhbGxvdyByZWdkYiBrZXlzIHNoaXBwZWQgd2l0aCB0aGUga2VybmVsXFxcIiBpZiBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTExMC1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxMTE6Y29uZmlnIENGRzgwMjExX0VYVFJBX1JFR0RCX0tFWURJUlxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTExMi1cXHRzdHJpbmcgXFxcImFkZGl0aW9uYWwgcmVnZGIga2V5IGRpcmVjdG9yeVxcXCIgaWYgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMjEtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTIyOmNvbmZpZyBDRkc4MDIxMV9SRUdfQ0VMTFVMQVJfSElOVFNcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMjMtXFx0Ym9vbCBcXFwiY2ZnODAyMTEgcmVndWxhdG9yeSBzdXBwb3J0IGZvciBjZWxsdWxhciBiYXNlIHN0YXRpb24gaGludHNcXFwiXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMzQtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTM1OmNvbmZpZyBDRkc4MDIxMV9SRUdfUkVMQVhfTk9fSVJcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMzYtXFx0Ym9vbCBcXFwiY2ZnODAyMTEgc3VwcG9ydCBmb3IgTk9fSVIgcmVsYXhhdGlvblxcXCJcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE1OC1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxNTk6Y29uZmlnIENGRzgwMjExX0RFRkFVTFRfUFNcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNjAtXFx0Ym9vbCBcXFwiZW5hYmxlIHBvd2Vyc2F2ZSBieSBkZWZhdWx0XFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTY4LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjE2OTpjb25maWcgQ0ZHODAyMTFfREVCVUdGU1xcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE3MC1cXHRib29sIFxcXCJjZmc4MDIxMSBEZWJ1Z0ZTIGVudHJpZXNcXFwiXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNzYtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTc3OmNvbmZpZyBDRkc4MDIxMV9DUkRBX1NVUFBPUlRcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNzgtXFx0Ym9vbCBcXFwic3VwcG9ydCBDUkRBXFxcIiBpZiBFWFBFUlRcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE4Ni1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxODc6Y29uZmlnIENGRzgwMjExX1dFWFRcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xODgtXFx0Ym9vbCBcXFwiY2ZnODAyMTEgd2lyZWxlc3MgZXh0ZW5zaW9ucyBjb21wYXRpYmlsaXR5XFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTkzLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjE5NDpjb25maWcgQ0ZHODAyMTFfS1VOSVRfVEVTVFxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE5NS1cXHR0cmlzdGF0ZSBcXFwiS1VuaXQgdGVzdHMgZm9yIGNmZzgwMjExXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDAwOjQ3OjU2Ljg0NTg0NDM4N1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNzkyMTcxNzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGUgbmVjZXNzYXJ5IGtlcm5lbCBjb25maWd1cmF0aW9ucyBmb3IgdGhpcyB0ZXN0aW5nIHNldHVwLiBNeSBwcmltYXJ5IGZvY3VzIGlzIG9uIGBDRkc4MDIxMWAgYW5kIGBDRkc4MDIxMV9XRVhUYC4gVGhlc2Ugc2VlbSB0byBiZSB0aGUgbW9zdCBkaXJlY3Qgb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgSSdtIHRhcmdldGluZy4gSSBhbHNvIHRoaW5rIEkgbWlnaHQgbmVlZCB0byBlbmFibGUgYE1BQzgwMjExYCB0byBmdWxseSB1dGlsaXplIHRoZSBDRkc4MDIxMSB3aXJlbGVzcyBzdGFjayBmb3IgYWN0dWFsIHRlc3RpbmcuIExldCdzIG5vdCBmb3JnZXQgdGhlIG5ldC93aXJlbGVzcyBkaXJlY3RvcnksIHdoaWNoLCBmcm9tIG15IHVuZGVyc3RhbmRpbmcsIG9ubHkgbmVlZHMgYENGRzgwMjExYC4gTm93LCBob2xkIG9uLCBJIHNob3VsZCBhbHNvIGluY2x1ZGUgYE1BQzgwMjExX0hXU0lNYC4gVGhpcyBsb29rcyBsaWtlIHRoZSBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSBjb21wb25lbnQgZm9yIG1hYzgwMjExLCBhbmQgdGhhdCB3b3VsZCBiZSBpbmNyZWRpYmx5IHVzZWZ1bCBmb3IgZnV6emluZyEgU28sIEknbGwgZ28gd2l0aCBgQ0ZHODAyMTFgLCBgQ0ZHODAyMTFfV0VYVGAsIGBNQUM4MDIxMWAsIGFuZCBgTUFDODAyMTFfSFdTSU1gLiBBbmQganVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nLCBJIG5lZWQgdG8gdGFrZSBhIHF1aWNrIGxvb2sgYXQgdGhlIGBuZXQvd2lyZWxlc3MvTWFrZWZpbGVgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTA1LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDAwOjQ4OjAxLjEyNTA2NDk0M1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODAxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvd2lyZWxlc3MvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0b2JqLSQoQ09ORklHX0NGRzgwMjExKSArPSBjZmc4MDIxMS5vXFxuICAgMzpcXHRvYmoteSArPSB0ZXN0cy9cXG4gICA0OlxcdFxcbiAgIDU6XFx0b2JqLSQoQ09ORklHX1dFWFRfQ09SRSkgKz0gd2V4dC1jb3JlLm9cXG4gICA2OlxcdG9iai0kKENPTkZJR19XRVhUX1BST0MpICs9IHdleHQtcHJvYy5vXFxuICAgNzpcXHRvYmotJChDT05GSUdfV0VYVF9QUklWKSArPSB3ZXh0LXByaXYub1xcbiAgIDg6XFx0XFxuICAgOTpcXHRjZmc4MDIxMS15ICs9IGNvcmUubyBzeXNmcy5vIHJhZGlvdGFwLm8gdXRpbC5vIHJlZy5vIHNjYW4ubyBubDgwMjExLm9cXG4gIDEwOlxcdGNmZzgwMjExLXkgKz0gbWxtZS5vIGlic3MubyBzbWUubyBjaGFuLm8gZXRodG9vbC5vIG1lc2gubyBhcC5vIHRyYWNlLm8gb2NiLm9cXG4gIDExOlxcdGNmZzgwMjExLXkgKz0gbWljaGFlbC1taWMubyBwbXNyLm9cXG4gIDEyOlxcdGNmZzgwMjExLSQoQ09ORklHX09GKSArPSBvZi5vXFxuICAxMzpcXHRjZmc4MDIxMS0kKENPTkZJR19DRkc4MDIxMV9ERUJVR0ZTKSArPSBkZWJ1Z2ZzLm9cXG4gIDE0OlxcdGNmZzgwMjExLSQoQ09ORklHX0NGRzgwMjExX1dFWFQpICs9IHdleHQtY29tcGF0Lm8gd2V4dC1zbWUub1xcbiAgMTU6XFx0XFxuICAxNjpcXHRDRkxBR1NfdHJhY2UubyA6PSAtSSQoc3JjKVxcbiAgMTc6XFx0XFxuICAxODpcXHRjZmc4MDIxMS0kKENPTkZJR19DRkc4MDIxMV9VU0VfS0VSTkVMX1JFR0RCX0tFWVMpICs9IHNoaXBwZWQtY2VydHMub1xcbiAgMTk6XFx0aWZuZXEgKCQoQ09ORklHX0NGRzgwMjExX0VYVFJBX1JFR0RCX0tFWURJUiksKVxcbiAgMjA6XFx0Y2ZnODAyMTEteSArPSBleHRyYS1jZXJ0cy5vXFxuICAyMTpcXHRlbmRpZlxcbiAgMjI6XFx0XFxuICAyMzpcXHQkKG9iaikvc2hpcHBlZC1jZXJ0cy5jOiAkKHNvcnQgJCh3aWxkY2FyZCAkKHNyYykvY2VydHMvKi5oZXgpKVxcbiAgMjQ6XFx0XFx0QCQoa2VjaG8pIFxcXCIgIEdFTiAgICAgJEBcXFwiXFxuICAyNTpcXHRcXHQkKFEpKGVjaG8gJyNpbmNsdWRlIFxcXCJyZWcuaFxcXCInOyBcXFxcXFxuICAyNjpcXHRcXHQgIGVjaG8gJ2NvbnN0IHU4IHNoaXBwZWRfcmVnZGJfY2VydHNbXSA9IHsnOyBcXFxcXFxuICAyNzpcXHRcXHQgIGVjaG8gfCBjYXQgLSAkXiA7IFxcXFxcXG4gIDI4OlxcdFxcdCAgZWNobyAnfTsnOyBcXFxcXFxuICAyOTpcXHRcXHQgIGVjaG8gJ3Vuc2lnbmVkIGludCBzaGlwcGVkX3JlZ2RiX2NlcnRzX2xlbiA9IHNpemVvZihzaGlwcGVkX3JlZ2RiX2NlcnRzKTsnOyBcXFxcXFxuICAzMDpcXHRcXHQgKSBcXHUwMDNlICRAXFxuICAzMTpcXHRcXG4gIDMyOlxcdCQob2JqKS9leHRyYS1jZXJ0cy5jOiAkKENPTkZJR19DRkc4MDIxMV9FWFRSQV9SRUdEQl9LRVlESVIpIFxcXFxcXG4gIDMzOlxcdFxcdFxcdCAgICAgICQoc29ydCAkKHdpbGRjYXJkICQoQ09ORklHX0NGRzgwMjExX0VYVFJBX1JFR0RCX0tFWURJUikvKi54NTA5KSlcXG4gIDM0OlxcdFxcdEAkKGtlY2hvKSBcXFwiICBHRU4gICAgICRAXFxcIlxcbiAgMzU6XFx0XFx0JChRKShzZXQgLWU7IFxcXFxcXG4gIDM2OlxcdFxcdCAgYWxsZj1cXFwiXFxcIjsgXFxcXFxcbiAgMzc6XFx0XFx0ICBmb3IgZiBpbiAkXiA7IGRvIFxcXFxcXG4gIDM4OlxcdFxcdCAgICAgIHRlc3QgLWYgJCRmIHx8IGNvbnRpbnVlO1xcXFxcXG4gIDM5OlxcdFxcdCAgICAgICMgc2ltaWxhciB0byBoZXhkdW1wIC12IC1lICcxLzEgXFxcIjB4JS4yeCxcXFwiIFxcXCJcXFxcblxcXCInIFxcXFxcXG4gIDQwOlxcdFxcdCAgICAgIHRoaXNmPSQkKG9kIC1BbiAtdiAtdHgxIFxcdTAwM2MgJCRmIHwgXFxcXFxcbiAgNDE6XFx0XFx0ICAgICAgICAgICAgICAgICAgIHNlZCAtZSAncy8gL1xcXFxuL2cnIHwgXFxcXFxcbiAgNDI6XFx0XFx0ICAgICAgICAgICAgICAgICAgIHNlZCAtZSAncy9eWzAtOWEtZl1cXFxcKyQkL1xcXFwwLzt0O2QnIHwgXFxcXFxcbiAgNDM6XFx0XFx0ICAgICAgICAgICAgICAgICAgIHNlZCAtZSAncy9eLzB4LztzLyQkLywvJyk7IFxcXFxcXG4gIDQ0OlxcdFxcdCAgICAgICMgZmlsZSBzaG91bGQgbm90IGJlIGVtcHR5IC0gbWF5YmUgY29tbWFuZCBzdWJzdGl0dXRpb24gZmFpbGVkPyBcXFxcXFxuICA0NTpcXHRcXHQgICAgICB0ZXN0ICEgLXogXFxcIiQkdGhpc2ZcXFwiO1xcXFxcXG4gIDQ2OlxcdFxcdCAgICAgIGFsbGY9JCRhbGxmJCR0aGlzZjtcXFxcXFxuICA0NzpcXHRcXHQgIGRvbmU7IFxcXFxcXG4gIDQ4OlxcdFxcdCAgKCBcXFxcXFxuICA0OTpcXHRcXHQgICAgICBlY2hvICcjaW5jbHVkZSBcXFwicmVnLmhcXFwiJzsgXFxcXFxcbiAgNTA6XFx0XFx0ICAgICAgZWNobyAnY29uc3QgdTggZXh0cmFfcmVnZGJfY2VydHNbXSA9IHsnOyBcXFxcXFxuICA1MTpcXHRcXHQgICAgICBlY2hvIFxcXCIkJGFsbGZcXFwiOyBcXFxcXFxuICA1MjpcXHRcXHQgICAgICBlY2hvICd9Oyc7IFxcXFxcXG4gIDUzOlxcdFxcdCAgICAgIGVjaG8gJ3Vuc2lnbmVkIGludCBleHRyYV9yZWdkYl9jZXJ0c19sZW4gPSBzaXplb2YoZXh0cmFfcmVnZGJfY2VydHMpOyc7IFxcXFxcXG4gIDU0OlxcdFxcdCAgKSBcXHUwMDNlICRAKVxcbiAgNTU6XFx0XFxuICA1NjpcXHRjbGVhbi1maWxlcyArPSBzaGlwcGVkLWNlcnRzLmMgZXh0cmEtY2VydHMuY1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMDo0ODowMS4xMjUyMjc4NzNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4OTg1MTczNjQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktleSBGdW5jdGlvbmFsaXR5IGluIGNmZzgwMjExIGZvciBGdXp6aW5nKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBmb2N1cyBpcyBvbiB0aGUga2V5IG1hbmFnZW1lbnQgd2l0aGluIGBjZmc4MDIxMWAgYW5kIGhvdyB0aGUgcHJvcG9zZWQgY2hhbmdlcyBpbXBhY3QgZnV6emluZy4gRmlyc3QsIEkgbmVlZCB0byBrbm93IHdoaWNoIGNvbmZpZ3VyYXRpb25zIGFyZSByZWxldmFudDogYENPTkZJR19DRkc4MDIxMWAgYW5kIGBDT05GSUdfQ0ZHODAyMTFfV0VYVGAgYXJlIHRoZSBvYnZpb3VzIG9uZXMsIGFuZCBJJ2xsIGtlZXAgYENPTkZJR19NQUM4MDIxMV9IV1NJTWAgaW4gbWluZCBmb3IgcG90ZW50aWFsIGhhcmR3YXJlIHNpbXVsYXRpb24gZHVyaW5nIHRlc3RpbmcuXG5cbk5vdywgdGhlIGZ1bmN0aW9ucy4gSSd2ZSBwaW5wb2ludGVkIGEgZmV3IGtleSBwbGF5ZXJzOiBgbmw4MDIxMV9nZXRfa2V5YCwgYG5sODAyMTFfZGVsX2tleWAsIGBjZmc4MDIxMV92YWxpZF9rZXlfaWR4YCwgYGNmZzgwMjExX3ZhbGlkYXRlX2tleV9zZXR0aW5nc2AsIGFuZCBgY2ZnODAyMTFfc2V0X2VuY3J5cHRpb25gLiBUaW1lIHRvIGRpZyBpbnRvIHRoZXNlLlxuXG5Pa2F5LCBsZXQncyBzZWUuLi4gYGNmZzgwMjExX3ZhbGlkX2tleV9pZHhgIGlzIGRlZmluZWQgaW4gYm90aCBgbmV0L3dpcmVsZXNzL2NvcmUuaGAgYW5kIGBuZXQvd2lyZWxlc3MvdXRpbC5jYCwgYW5kIGl0J3Mgbm90IHN0YXRpYy4gR29vZC4gYG5sODAyMTFfZ2V0X2tleWAgYW5kIGBubDgwMjExX2RlbF9rZXlgIGFyZSBzdGF0aWMgYW5kIHJlc2lkZSBpbiBgbmV0L3dpcmVsZXNzL25sODAyMTEuY2AsIGFuZCBgY2ZnODAyMTFfc2V0X2VuY3J5cHRpb25gIGlzIHN0YXRpYyBpbiBgbmV0L3dpcmVsZXNzL3dleHQtY29tcGF0LmNgLlxuXG5BIHF1aWNrIGNoZWNrIGNvbmZpcm1zIHRoYXQgYGNmZzgwMjExX3ZhbGlkYXRlX2tleV9zZXR0aW5nc2AgaXNuJ3Qgc3RhdGljLiBBbHJpZ2h0LCBsZXQncyBrZWVwIGFuIGV5ZSBvdXQgZm9yIG90aGVyIGZ1bmN0aW9ucy4gQmFzZWQgb24gdGhlIGFuYWx5c2lzLCBgY2ZnODAyMTFfdmFsaWRfa2V5X2lkeGAgc3RhbmRzIG91dCBhcyB0aGUgbW9zdCBzaWduaWZpY2FudCBvbmUgaGVyZS5cblxuTm93LCByZWFjaGFiaWxpdHkuIGBubDgwMjExX2dldF9rZXlgIGFuZCBgbmw4MDIxMV9kZWxfa2V5YCBhcmUgZGVmaW5pdGVseSByZWFjaGFibGUgdmlhIG5ldGxpbmsuIGBjZmc4MDIxMV9zZXRfZW5jcnlwdGlvbmAgaXMgYWNjZXNzaWJsZSB0aHJvdWdoIHdpcmVsZXNzIGV4dGVuc2lvbnMgKHdleHQpLiBHcmVhdCwgYWxsIHRoZSBmdW5jdGlvbnMgSSdtIHRhcmdldGluZyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSwgd2hpY2ggaXMgY3JpdGljYWwgZm9yIGVmZmVjdGl2ZSBmdXp6aW5nLlxuXG5NeSByZWFzb25pbmcgaXMgdGhpczogdGhlIHBhdGNoIGZ1bmRhbWVudGFsbHkgYWx0ZXJzIGhvdyBrZXkgaW5kaWNlcyBhcmUgdmFsaWRhdGVkIHdpdGhpbiBgY2ZnODAyMTFgLiBUaGlzIGluY2x1ZGVzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgaW50ZXJmYWNlLXNwZWNpZmljIGNoZWNrcyBhbmQgdGhlIG1vZGlmaWNhdGlvbiBvZiB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlIHRvIHRha2UgYSBgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldmAuIFRoZXNlIGNoYW5nZXMgaGF2ZSBhIGRpcmVjdCBpbXBhY3Qgb24gdGhlIG5ldGxpbmsgKG5sODAyMTEpIGFuZCB3aXJlbGVzcyBleHRlbnNpb25zICh3ZXh0KSBwYXRocyB1c2VkIGZvciByZXRyaWV2aW5nLCBkZWxldGluZywgYW5kIHNldHRpbmcga2V5cy4gVGhlIGZhY3QgdGhhdCB0aGUgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSBtYWtlcyB0aGVtIGlkZWFsIGZvciBmdXp6aW5nLlxuXG5JJ20gcmVhZHkgdG8gcHJvY2VlZCB3aXRoIHRoZXNlIGZ1bmN0aW9ucyBmb3IgdGVzdGluZy4gTGV0J3MgZ2V0IHRob3NlIHJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxMjAsIk91dHB1dFRva2VucyI6MjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTk4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDA6NDg6MTAuMTEwNDA0NjY3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY4MTM0Mzg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDRkc4MDIxMVwiLFxuICAgIFwiQ0ZHODAyMTFfV0VYVFwiLFxuICAgIFwiTUFDODAyMTFfSFdTSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJubDgwMjExX2dldF9rZXlcIixcbiAgICBcIm5sODAyMTFfZGVsX2tleVwiLFxuICAgIFwiY2ZnODAyMTFfdmFsaWRfa2V5X2lkeFwiLFxuICAgIFwiY2ZnODAyMTFfdmFsaWRhdGVfa2V5X3NldHRpbmdzXCIsXG4gICAgXCJjZmc4MDIxMV9zZXRfZW5jcnlwdGlvblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2dpYyBmb3IgdmFsaWRhdGluZyBrZXkgaW5kaWNlcyBpbiB0aGUgY2ZnODAyMTEgc3Vic3lzdGVtLCBhZGRpbmcgaW50ZXJmYWNlIHR5cGUtc3BlY2lmaWMgY2hlY2tzIGFuZCBjaGFuZ2luZyB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlIHRvIHRha2UgYHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXZgLiBUaGlzIGFmZmVjdHMgbmV0bGluayAobmw4MDIxMSkgYW5kIHdpcmVsZXNzIGV4dGVuc2lvbnMgKHdleHQpIHBhdGhzIGZvciBnZXR0aW5nLCBkZWxldGluZywgYW5kIHNldHRpbmcga2V5cy4gVGhlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UsIG1ha2luZyB0aGVtIHN1aXRhYmxlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNGRzgwMjExXCIsXG4gICAgXCJDRkc4MDIxMV9XRVhUXCIsXG4gICAgXCJNQUM4MDIxMV9IV1NJTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5sODAyMTFfZ2V0X2tleVwiLFxuICAgIFwibmw4MDIxMV9kZWxfa2V5XCIsXG4gICAgXCJjZmc4MDIxMV92YWxpZF9rZXlfaWR4XCIsXG4gICAgXCJjZmc4MDIxMV92YWxpZGF0ZV9rZXlfc2V0dGluZ3NcIixcbiAgICBcImNmZzgwMjExX3NldF9lbmNyeXB0aW9uXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvZ2ljIGZvciB2YWxpZGF0aW5nIGtleSBpbmRpY2VzIGluIHRoZSBjZmc4MDIxMSBzdWJzeXN0ZW0sIGFkZGluZyBpbnRlcmZhY2UgdHlwZS1zcGVjaWZpYyBjaGVja3MgYW5kIGNoYW5naW5nIHRoZSBmdW5jdGlvbiBzaWduYXR1cmUgdG8gdGFrZSBgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldmAuIFRoaXMgYWZmZWN0cyBuZXRsaW5rIChubDgwMjExKSBhbmQgd2lyZWxlc3MgZXh0ZW5zaW9ucyAod2V4dCkgcGF0aHMgZm9yIGdldHRpbmcsIGRlbGV0aW5nLCBhbmQgc2V0dGluZyBrZXlzLiBUaGUgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSwgbWFraW5nIHRoZW0gc3VpdGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowwrw57[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-16 00:17:27 +0000 UTC FinishedAt: 2026-07-16 00:48:11 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "ac798f757d6475dc6fee2ec899980d6740714596", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CFG80211", "CFG80211_WEXT", "MAC80211_HWSIM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "ac798f757d6475dc6fee2ec899980d6740714596", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CFG80211", "CFG80211_WEXT", "MAC80211_HWSIM" ], "series_id": "3d212928-3684-44c3-bda8-e48d52315bb3" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nl80211_get_key", "nl80211_del_key", "cfg80211_valid_key_idx", "cfg80211_validate_key_settings", "cfg80211_set_encryption" ], "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+CgkJCTx0ZD4yMDI2LzA3LzE2IDAwOjQ3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NGRzgwMjExJiMzNDssCiAgICAmIzM0O0NGRzgwMjExX1dFWFQmIzM0OywKICAgICYjMzQ7TUFDODAyMTFfSFdTSU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtubDgwMjExX2dldF9rZXkmIzM0OywKICAgICYjMzQ7bmw4MDIxMV9kZWxfa2V5JiMzNDssCiAgICAmIzM0O2NmZzgwMjExX3ZhbGlkX2tleV9pZHgmIzM0OywKICAgICYjMzQ7Y2ZnODAyMTFfdmFsaWRhdGVfa2V5X3NldHRpbmdzJiMzNDssCiAgICAmIzM0O2NmZzgwMjExX3NldF9lbmNyeXB0aW9uJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2dpYyBmb3IgdmFsaWRhdGluZyBrZXkgaW5kaWNlcyBpbiB0aGUgY2ZnODAyMTEgc3Vic3lzdGVtLCBhZGRpbmcgaW50ZXJmYWNlIHR5cGUtc3BlY2lmaWMgY2hlY2tzIGFuZCBjaGFuZ2luZyB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlIHRvIHRha2UgYHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXZgLiBUaGlzIGFmZmVjdHMgbmV0bGluayAobmw4MDIxMSkgYW5kIHdpcmVsZXNzIGV4dGVuc2lvbnMgKHdleHQpIHBhdGhzIGZvciBnZXR0aW5nLCBkZWxldGluZywgYW5kIHNldHRpbmcga2V5cy4gVGhlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UsIG1ha2luZyB0aGVtIHN1aXRhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDAwOjQ3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZjViZDFkNmI5OWZjMzBjMDdiOTQwZDA0NWZkNzQzMzNmMTc3YmVkNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDE2IDAwOjQ3OjM3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9jb3JlLmggYi9uZXQvd2lyZWxlc3MvY29yZS5oXG5pbmRleCBkZjQ3ZWQ2MjA4YTUwZC4uMzk5MDM3NTE0OTQzZDkgMTAwNjQ0XG4tLS0gYS9uZXQvd2lyZWxlc3MvY29yZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvd2lyZWxlc3MvY29yZS5oXG5AQCAtNDQzLDggJiM0Mzs0NDMsOSBAQCB2b2lkIGNmZzgwMjExX3NtZV9hYmFuZG9uX2Fzc29jKHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYpO1xuIFxuIC8qIGludGVybmFsIGhlbHBlcnMgKi9cbiBib29sIGNmZzgwMjExX3N1cHBvcnRlZF9jaXBoZXJfc3VpdGUoc3RydWN0IHdpcGh5ICp3aXBoeSwgdTMyIGNpcGhlcik7XG4tYm9vbCBjZmc4MDIxMV92YWxpZF9rZXlfaWR4KHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbi1cdFx0XHQgICAgaW50IGtleV9pZHgsIGJvb2wgcGFpcndpc2UpO1xuJiM0Mztib29sIGNmZzgwMjExX3ZhbGlkX2tleV9pZHgoc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcbiYjNDM7XHRcdFx0ICAgIGludCBrZXlfaWR4LCBib29sIHBhaXJ3aXNlLFxuJiM0MztcdFx0XHQgICAgY29uc3QgdTggKm1hY19hZGRyKTtcbiBpbnQgY2ZnODAyMTFfdmFsaWRhdGVfa2V5X3NldHRpbmdzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbiBcdFx0XHRcdCAgIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4gXHRcdFx0XHQgICBzdHJ1Y3Qga2V5X3BhcmFtcyAqcGFyYW1zLCBpbnQga2V5X2lkeCxcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jIGIvbmV0L3dpcmVsZXNzL25sODAyMTEuY1xuaW5kZXggMjQyMDcxYWQxMGQ2YzkuLjk5YTFjMDE3NGJkYmYyIDEwMDY0NFxuLS0tIGEvbmV0L3dpcmVsZXNzL25sODAyMTEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3dpcmVsZXNzL25sODAyMTEuY1xuQEAgLTU0MDksNyAmIzQzOzU0MDksNyBAQCBzdGF0aWMgaW50IG5sODAyMTFfZ2V0X2tleShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0aWYgKCFyZGV2LVx1MDAzZW9wcy1cdTAwM2VnZXRfa2V5KVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXG4tXHRpZiAoIXBhaXJ3aXNlIFx1MDAyNlx1MDAyNiBtYWNfYWRkciBcdTAwMjZcdTAwMjYgIShyZGV2LVx1MDAzZXdpcGh5LmZsYWdzIFx1MDAyNiBXSVBIWV9GTEFHX0lCU1NfUlNOKSlcbiYjNDM7XHRpZiAoIWNmZzgwMjExX3ZhbGlkX2tleV9pZHgod2Rldiwga2V5X2lkeCwgcGFpcndpc2UsIG1hY19hZGRyKSlcbiBcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gXG4gXHRtc2cgPSBubG1zZ19uZXcoTkxNU0dfREVGQVVMVF9TSVpFLCBHRlBfS0VSTkVMKTtcbkBAIC01NjYzLDggJiM0Mzs1NjYzLDkgQEAgc3RhdGljIGludCBubDgwMjExX2RlbF9rZXkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdCAgICBrZXkudHlwZSAhPSBOTDgwMjExX0tFWVRZUEVfR1JPVVApXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0aWYgKCFjZmc4MDIxMV92YWxpZF9rZXlfaWR4KHJkZXYsIGtleS5pZHgsXG4tXHRcdFx0XHQgICAga2V5LnR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFKSlcbiYjNDM7XHRpZiAoIWNmZzgwMjExX3ZhbGlkX2tleV9pZHgod2Rldiwga2V5LmlkeCxcbiYjNDM7XHRcdFx0XHQgICAga2V5LnR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFLFxuJiM0MztcdFx0XHRcdCAgICBtYWNfYWRkcikpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0aWYgKCFyZGV2LVx1MDAzZW9wcy1cdTAwM2VkZWxfa2V5KVxuQEAgLTU2NzIsMTAgJiM0Mzs1NjczLDYgQEAgc3RhdGljIGludCBubDgwMjExX2RlbF9rZXkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcbiBcdGVyciA9IG5sODAyMTFfa2V5X2FsbG93ZWQod2Rldik7XG4gXG4tXHRpZiAoa2V5LnR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX0dST1VQIFx1MDAyNlx1MDAyNiBtYWNfYWRkciBcdTAwMjZcdTAwMjZcbi1cdCAgICAhKHJkZXYtXHUwMDNld2lwaHkuZmxhZ3MgXHUwMDI2IFdJUEhZX0ZMQUdfSUJTU19SU04pKVxuLVx0XHRlcnIgPSAtRU5PRU5UO1xuLVxuIFx0aWYgKCFlcnIpXG4gXHRcdGVyciA9IG5sODAyMTFfdmFsaWRhdGVfa2V5X2xpbmtfaWQoaW5mbywgd2RldiwgbGlua19pZCxcbiBcdFx0XHRcdGtleS50eXBlID09IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRSk7XG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3V0aWwuYyBiL25ldC93aXJlbGVzcy91dGlsLmNcbmluZGV4IDI0NTI3YmYzMjFiMmExLi4zZTU4NGQwY2EzZTI2NiAxMDA2NDRcbi0tLSBhL25ldC93aXJlbGVzcy91dGlsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC93aXJlbGVzcy91dGlsLmNcbkBAIC0yNDEsMTAgJiM0MzsyNDEsOCBAQCBib29sIGNmZzgwMjExX3N1cHBvcnRlZF9jaXBoZXJfc3VpdGUoc3RydWN0IHdpcGh5ICp3aXBoeSwgdTMyIGNpcGhlcilcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4tc3RhdGljIGJvb2xcbi1jZmc4MDIxMV9pZ3RrX2NpcGhlcl9zdXBwb3J0ZWQoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2KVxuJiM0MztzdGF0aWMgYm9vbCBjZmc4MDIxMV9pZ3RrX2NpcGhlcl9zdXBwb3J0ZWQoc3RydWN0IHdpcGh5ICp3aXBoeSlcbiB7XG4tXHRzdHJ1Y3Qgd2lwaHkgKndpcGh5ID0gXHUwMDI2cmRldi1cdTAwM2V3aXBoeTtcbiBcdGludCBpO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd2lwaHktXHUwMDNlbl9jaXBoZXJfc3VpdGVzOyBpJiM0MzsmIzQzOykge1xuQEAgLTI2MCwyNyAmIzQzOzI1OCw4NiBAQCBjZmc4MDIxMV9pZ3RrX2NpcGhlcl9zdXBwb3J0ZWQoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2KVxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbi1ib29sIGNmZzgwMjExX3ZhbGlkX2tleV9pZHgoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuLVx0XHRcdCAgICBpbnQga2V5X2lkeCwgYm9vbCBwYWlyd2lzZSlcbiYjNDM7Ym9vbCBjZmc4MDIxMV92YWxpZF9rZXlfaWR4KHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4mIzQzO1x0XHRcdCAgICBpbnQga2V5X2lkeCwgYm9vbCBwYWlyd2lzZSxcbiYjNDM7XHRcdFx0ICAgIGNvbnN0IHU4ICptYWNfYWRkcilcbiB7XG4tXHRpbnQgbWF4X2tleV9pZHg7XG4tXG4tXHRpZiAocGFpcndpc2UpXG4tXHRcdG1heF9rZXlfaWR4ID0gMztcbi1cdGVsc2UgaWYgKHdpcGh5X2V4dF9mZWF0dXJlX2lzc2V0KFx1MDAyNnJkZXYtXHUwMDNld2lwaHksXG4tXHRcdFx0XHRcdCBOTDgwMjExX0VYVF9GRUFUVVJFX0JFQUNPTl9QUk9URUNUSU9OKSB8fFxuLVx0XHQgd2lwaHlfZXh0X2ZlYXR1cmVfaXNzZXQoXHUwMDI2cmRldi1cdTAwM2V3aXBoeSxcbi1cdFx0XHRcdFx0IE5MODAyMTFfRVhUX0ZFQVRVUkVfQkVBQ09OX1BST1RFQ1RJT05fQ0xJRU5UKSlcbi1cdFx0bWF4X2tleV9pZHggPSA3O1xuLVx0ZWxzZSBpZiAoY2ZnODAyMTFfaWd0a19jaXBoZXJfc3VwcG9ydGVkKHJkZXYpKVxuLVx0XHRtYXhfa2V5X2lkeCA9IDU7XG4tXHRlbHNlXG4tXHRcdG1heF9rZXlfaWR4ID0gMztcbiYjNDM7XHRpZiAoV0FSTl9PTighd2RldikpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4gXG4tXHRpZiAoa2V5X2lkeCBcdTAwM2MgMCB8fCBrZXlfaWR4IFx1MDAzZSBtYXhfa2V5X2lkeClcbiYjNDM7XHRpZiAoa2V5X2lkeCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0cmV0dXJuIHRydWU7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBDYW4mIzM5O3QgZGlmZmVyZW50aWF0ZSBjaXBoZXJzIGhlcmUgc28gYWxsb3cgMC4uMy5cbiYjNDM7XHQgKiBQYWlyd2lzZSBrZXlzIG11c3QgYmUgZm9yIGEgc3RhdGlvbiAoTUFDIGFkZHJlc3MgZ2l2ZW4pLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChwYWlyd2lzZSkge1xuJiM0MztcdFx0aWYgKCFtYWNfYWRkcilcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRcdHJldHVybiBrZXlfaWR4IFx1MDAzYyA0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBGb3IgZ3JvdXAga2V5cywgbWFjX2FkZHI9PU5VTEwgbWVhbnMgc2V0dGluZyBhIGdyb3VwIGtleVxuJiM0MztcdCAqIGZvciBUWCwgd2hpY2ggaXMgb25seSBzdXBwb3J0ZWQgb24gc29tZSBpbnRlcmZhY2UgdHlwZXMsXG4mIzQzO1x0ICogZXhjZXB0IGZvciBTVEFUSU9OL1AyUF9DTElFTlQsIHdoZXJlIGl0JiMzOTtzIHNldHRpbmcgdGhlIFJYXG4mIzQzO1x0ICoga2V5IHdpdGggdGhlIGN1cnJlbnQgQVAgKGZvciBsZWdhY3kgcmVhc29ucy4pXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBBcGFydCBmcm9tIHRoYXQgZXhjZXB0aW9uLCBhIG5vbi1OVUxMIG1hY19hZGRyIG1lYW5zIFJYXG4mIzQzO1x0ICoga2V5IGJlaW5nIHNldC5cbiYjNDM7XHQgKi9cbiYjNDM7XG4mIzQzO1x0c3dpdGNoICh3ZGV2LVx1MDAzZWlmdHlwZSkge1xuJiM0MztcdGNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6XG4mIzQzO1x0XHRpZiAoISh3ZGV2LVx1MDAzZXdpcGh5LVx1MDAzZWZsYWdzIFx1MDAyNiBXSVBIWV9GTEFHX0lCU1NfUlNOKSlcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdFx0ZmFsbHRocm91Z2g7XG4mIzQzO1x0Y2FzZSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UOlxuJiM0MztcdFx0Lyogbm8gc3VwcG9ydCBmb3IgSUdUSy9CSUdUSyAoeWV0PykgKi9cbiYjNDM7XHRcdHJldHVybiBrZXlfaWR4IFx1MDAzYyA0O1xuJiM0MztcdGNhc2UgTkw4MDIxMV9JRlRZUEVfTkFOX0RBVEE6XG4mIzQzO1x0XHQvKiB0aGVzZSBhbHdheXMgbmVlZCB0byBzdXBwb3J0IHBlci1TVEEgR1RLICovXG4mIzQzO1x0XHRyZXR1cm4ga2V5X2lkeCBcdTAwM2MgNDtcbiYjNDM7XHRjYXNlIE5MODAyMTFfSUZUWVBFX05BTjpcbiYjNDM7XHRcdC8qIG5vIGRhdGEgKi9cbiYjNDM7XHRcdGlmIChrZXlfaWR4IFx1MDAzYyA0KVxuJiM0MztcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0XHQvKiBOQU4gcmV1c2VkIHRoaXMgZmxhZyAqL1xuJiM0MztcdFx0aWYgKHdpcGh5X2V4dF9mZWF0dXJlX2lzc2V0KHdkZXYtXHUwMDNld2lwaHksXG4mIzQzO1x0XHRcdFx0XHQgICAgTkw4MDIxMV9FWFRfRkVBVFVSRV9CRUFDT05fUFJPVEVDVElPTikpXG4mIzQzO1x0XHRcdHJldHVybiBrZXlfaWR4IFx1MDAzYz0gNztcbiYjNDM7XHRcdHJldHVybiBrZXlfaWR4IFx1MDAzYz0gNTtcbiYjNDM7XHRjYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046XG4mIzQzO1x0Y2FzZSBOTDgwMjExX0lGVFlQRV9QMlBfQ0xJRU5UOlxuJiM0MztcdFx0Lyogc2VlIG5vdGUgYWJvdXQgZXhjZXB0aW9uIGFib3ZlICovXG4mIzQzO1x0XHRpZiAobWFjX2FkZHIpXG4mIzQzO1x0XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRcdC8qIEJJR1RLIHN1cHBvcnQgaW1wbGllcyBJR1RLIHN1cHBvcnQgKi9cbiYjNDM7XHRcdGlmICh3aXBoeV9leHRfZmVhdHVyZV9pc3NldCh3ZGV2LVx1MDAzZXdpcGh5LFxuJiM0MztcdFx0XHRcdFx0ICAgIE5MODAyMTFfRVhUX0ZFQVRVUkVfQkVBQ09OX1BST1RFQ1RJT05fQ0xJRU5UKSlcbiYjNDM7XHRcdFx0cmV0dXJuIGtleV9pZHggXHUwMDNjPSA3O1xuJiM0MztcdFx0ZmFsbHRocm91Z2g7XG4mIzQzO1x0Y2FzZSBOTDgwMjExX0lGVFlQRV9BUDpcbiYjNDM7XHRjYXNlIE5MODAyMTFfSUZUWVBFX1AyUF9HTzpcbiYjNDM7XHRcdC8qIG5vIFJYIHdpdGggW0JdSUdUSyAqL1xuJiM0MztcdFx0aWYgKG1hY19hZGRyKVxuJiM0MztcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0XHRpZiAod2lwaHlfZXh0X2ZlYXR1cmVfaXNzZXQod2Rldi1cdTAwM2V3aXBoeSxcbiYjNDM7XHRcdFx0XHRcdCAgICBOTDgwMjExX0VYVF9GRUFUVVJFX0JFQUNPTl9QUk9URUNUSU9OKSlcbiYjNDM7XHRcdFx0cmV0dXJuIGtleV9pZHggXHUwMDNjPSA3O1xuJiM0MztcdFx0ZmFsbHRocm91Z2g7XG4mIzQzO1x0Y2FzZSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOOlxuJiM0MztcdFx0Lyogbm8gUlggd2l0aCBHVEsgKi9cbiYjNDM7XHRcdGlmIChtYWNfYWRkcilcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdFx0aWYgKGNmZzgwMjExX2lndGtfY2lwaGVyX3N1cHBvcnRlZCh3ZGV2LVx1MDAzZXdpcGh5KSlcbiYjNDM7XHRcdFx0cmV0dXJuIGtleV9pZHggXHUwMDNjPSA1O1xuJiM0MztcdFx0cmV0dXJuIGtleV9pZHggXHUwMDNjPSAzO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0fVxuIH1cbiBcbiBpbnQgY2ZnODAyMTFfdmFsaWRhdGVfa2V5X3NldHRpbmdzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbkBAIC0yODgsMTMgJiM0MzszNDUsNyBAQCBpbnQgY2ZnODAyMTFfdmFsaWRhdGVfa2V5X3NldHRpbmdzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbiBcdFx0XHRcdCAgIHN0cnVjdCBrZXlfcGFyYW1zICpwYXJhbXMsIGludCBrZXlfaWR4LFxuIFx0XHRcdFx0ICAgYm9vbCBwYWlyd2lzZSwgY29uc3QgdTggKm1hY19hZGRyKVxuIHtcbi1cdGlmICghY2ZnODAyMTFfdmFsaWRfa2V5X2lkeChyZGV2LCBrZXlfaWR4LCBwYWlyd2lzZSkpXG4tXHRcdHJldHVybiAtRUlOVkFMO1xuLVxuLVx0aWYgKCFwYWlyd2lzZSBcdTAwMjZcdTAwMjYgbWFjX2FkZHIgXHUwMDI2XHUwMDI2ICEocmRldi1cdTAwM2V3aXBoeS5mbGFncyBcdTAwMjYgV0lQSFlfRkxBR19JQlNTX1JTTikpXG4tXHRcdHJldHVybiAtRUlOVkFMO1xuLVxuLVx0aWYgKHBhaXJ3aXNlIFx1MDAyNlx1MDAyNiAhbWFjX2FkZHIpXG4mIzQzO1x0aWYgKCFjZmc4MDIxMV92YWxpZF9rZXlfaWR4KHdkZXYsIGtleV9pZHgsIHBhaXJ3aXNlLCBtYWNfYWRkcikpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0c3dpdGNoIChwYXJhbXMtXHUwMDNlY2lwaGVyKSB7XG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3dleHQtY29tcGF0LmMgYi9uZXQvd2lyZWxlc3Mvd2V4dC1jb21wYXQuY1xuaW5kZXggNWRiZjNlZjRiMjU3ZTIuLmQ0NWJjMDhjMGRlNDk3IDEwMDY0NFxuLS0tIGEvbmV0L3dpcmVsZXNzL3dleHQtY29tcGF0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC93aXJlbGVzcy93ZXh0LWNvbXBhdC5jXG5AQCAtNDU0LDggJiM0Mzs0NTQsNyBAQCBzdGF0aWMgaW50IGNmZzgwMjExX3NldF9lbmNyeXB0aW9uKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbiBcdFx0XHRcdHJlam9pbiA9IHRydWU7XG4gXHRcdFx0fVxuIFxuLVx0XHRcdGlmICghcGFpcndpc2UgXHUwMDI2XHUwMDI2IGFkZHIgXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICAgICEocmRldi1cdTAwM2V3aXBoeS5mbGFncyBcdTAwMjYgV0lQSFlfRkxBR19JQlNTX1JTTikpXG4mIzQzO1x0XHRcdGlmICghY2ZnODAyMTFfdmFsaWRfa2V5X2lkeCh3ZGV2LCBpZHgsIHBhaXJ3aXNlLCBhZGRyKSlcbiBcdFx0XHRcdGVyciA9IC1FTk9FTlQ7XG4gXHRcdFx0ZWxzZVxuIFx0XHRcdFx0ZXJyID0gcmRldl9kZWxfa2V5KHJkZXYsIHdkZXYsIC0xLCBpZHgsIHBhaXJ3aXNlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDAwOjQ3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NGRzgwMjExJiMzNDssCiAgICAmIzM0O0NGRzgwMjExX1dFWFQmIzM0OywKICAgICYjMzQ7TUFDODAyMTFfSFdTSU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtubDgwMjExX2dldF9rZXkmIzM0OywKICAgICYjMzQ7bmw4MDIxMV9kZWxfa2V5JiMzNDssCiAgICAmIzM0O2NmZzgwMjExX3ZhbGlkX2tleV9pZHgmIzM0OywKICAgICYjMzQ7Y2ZnODAyMTFfdmFsaWRhdGVfa2V5X3NldHRpbmdzJiMzNDssCiAgICAmIzM0O2NmZzgwMjExX3NldF9lbmNyeXB0aW9uJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2dpYyBmb3IgdmFsaWRhdGluZyBrZXkgaW5kaWNlcyBpbiB0aGUgY2ZnODAyMTEgc3Vic3lzdGVtLCBhZGRpbmcgaW50ZXJmYWNlIHR5cGUtc3BlY2lmaWMgY2hlY2tzIGFuZCBjaGFuZ2luZyB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlIHRvIHRha2UgYHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXZgLiBUaGlzIGFmZmVjdHMgbmV0bGluayAobmw4MDIxMSkgYW5kIHdpcmVsZXNzIGV4dGVuc2lvbnMgKHdleHQpIHBhdGhzIGZvciBnZXR0aW5nLCBkZWxldGluZywgYW5kIHNldHRpbmcga2V5cy4gVGhlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UsIG1ha2luZyB0aGVtIHN1aXRhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmNWJkMWQ2Yjk5ZmMzMGMwN2I5NDBkMDQ1ZmQ3NDMzM2YxNzdiZWQ2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBKdWwgMTYgMDA6NDc6MzcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvY29yZS5oIGIvbmV0L3dpcmVsZXNzL2NvcmUuaAppbmRleCBkZjQ3ZWQ2MjA4YTUwZC4uMzk5MDM3NTE0OTQzZDkgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9jb3JlLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3dpcmVsZXNzL2NvcmUuaApAQCAtNDQzLDggJiM0Mzs0NDMsOSBAQCB2b2lkIGNmZzgwMjExX3NtZV9hYmFuZG9uX2Fzc29jKHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYpOwogCiAvKiBpbnRlcm5hbCBoZWxwZXJzICovCiBib29sIGNmZzgwMjExX3N1cHBvcnRlZF9jaXBoZXJfc3VpdGUoc3RydWN0IHdpcGh5ICp3aXBoeSwgdTMyIGNpcGhlcik7Ci1ib29sIGNmZzgwMjExX3ZhbGlkX2tleV9pZHgoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAotCQkJICAgIGludCBrZXlfaWR4LCBib29sIHBhaXJ3aXNlKTsKJiM0Mztib29sIGNmZzgwMjExX3ZhbGlkX2tleV9pZHgoc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwKJiM0MzsJCQkgICAgaW50IGtleV9pZHgsIGJvb2wgcGFpcndpc2UsCiYjNDM7CQkJICAgIGNvbnN0IHU4ICptYWNfYWRkcik7CiBpbnQgY2ZnODAyMTFfdmFsaWRhdGVfa2V5X3NldHRpbmdzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKIAkJCQkgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LAogCQkJCSAgIHN0cnVjdCBrZXlfcGFyYW1zICpwYXJhbXMsIGludCBrZXlfaWR4LApkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL25sODAyMTEuYyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmMKaW5kZXggMjQyMDcxYWQxMGQ2YzkuLjk5YTFjMDE3NGJkYmYyIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmMKQEAgLTU0MDksNyAmIzQzOzU0MDksNyBAQCBzdGF0aWMgaW50IG5sODAyMTFfZ2V0X2tleShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCWlmICghcmRldi0mZ3Q7b3BzLSZndDtnZXRfa2V5KQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKLQlpZiAoIXBhaXJ3aXNlICZhbXA7JmFtcDsgbWFjX2FkZHIgJmFtcDsmYW1wOyAhKHJkZXYtJmd0O3dpcGh5LmZsYWdzICZhbXA7IFdJUEhZX0ZMQUdfSUJTU19SU04pKQomIzQzOwlpZiAoIWNmZzgwMjExX3ZhbGlkX2tleV9pZHgod2Rldiwga2V5X2lkeCwgcGFpcndpc2UsIG1hY19hZGRyKSkKIAkJcmV0dXJuIC1FTk9FTlQ7CiAKIAltc2cgPSBubG1zZ19uZXcoTkxNU0dfREVGQVVMVF9TSVpFLCBHRlBfS0VSTkVMKTsKQEAgLTU2NjMsOCAmIzQzOzU2NjMsOSBAQCBzdGF0aWMgaW50IG5sODAyMTFfZGVsX2tleShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCSAgICBrZXkudHlwZSAhPSBOTDgwMjExX0tFWVRZUEVfR1JPVVApCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKCFjZmc4MDIxMV92YWxpZF9rZXlfaWR4KHJkZXYsIGtleS5pZHgsCi0JCQkJICAgIGtleS50eXBlID09IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRSkpCiYjNDM7CWlmICghY2ZnODAyMTFfdmFsaWRfa2V5X2lkeCh3ZGV2LCBrZXkuaWR4LAomIzQzOwkJCQkgICAga2V5LnR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFLAomIzQzOwkJCQkgICAgbWFjX2FkZHIpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmICghcmRldi0mZ3Q7b3BzLSZndDtkZWxfa2V5KQpAQCAtNTY3MiwxMCAmIzQzOzU2NzMsNiBAQCBzdGF0aWMgaW50IG5sODAyMTFfZGVsX2tleShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCiAJZXJyID0gbmw4MDIxMV9rZXlfYWxsb3dlZCh3ZGV2KTsKIAotCWlmIChrZXkudHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfR1JPVVAgJmFtcDsmYW1wOyBtYWNfYWRkciAmYW1wOyZhbXA7Ci0JICAgICEocmRldi0mZ3Q7d2lwaHkuZmxhZ3MgJmFtcDsgV0lQSFlfRkxBR19JQlNTX1JTTikpCi0JCWVyciA9IC1FTk9FTlQ7Ci0KIAlpZiAoIWVycikKIAkJZXJyID0gbmw4MDIxMV92YWxpZGF0ZV9rZXlfbGlua19pZChpbmZvLCB3ZGV2LCBsaW5rX2lkLAogCQkJCWtleS50eXBlID09IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRSk7CmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvdXRpbC5jIGIvbmV0L3dpcmVsZXNzL3V0aWwuYwppbmRleCAyNDUyN2JmMzIxYjJhMS4uM2U1ODRkMGNhM2UyNjYgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy91dGlsLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3dpcmVsZXNzL3V0aWwuYwpAQCAtMjQxLDEwICYjNDM7MjQxLDggQEAgYm9vbCBjZmc4MDIxMV9zdXBwb3J0ZWRfY2lwaGVyX3N1aXRlKHN0cnVjdCB3aXBoeSAqd2lwaHksIHUzMiBjaXBoZXIpCiAJcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgYm9vbAotY2ZnODAyMTFfaWd0a19jaXBoZXJfc3VwcG9ydGVkKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldikKJiM0MztzdGF0aWMgYm9vbCBjZmc4MDIxMV9pZ3RrX2NpcGhlcl9zdXBwb3J0ZWQoc3RydWN0IHdpcGh5ICp3aXBoeSkKIHsKLQlzdHJ1Y3Qgd2lwaHkgKndpcGh5ID0gJmFtcDtyZGV2LSZndDt3aXBoeTsKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgJmx0OyB3aXBoeS0mZ3Q7bl9jaXBoZXJfc3VpdGVzOyBpJiM0MzsmIzQzOykgewpAQCAtMjYwLDI3ICYjNDM7MjU4LDg2IEBAIGNmZzgwMjExX2lndGtfY2lwaGVyX3N1cHBvcnRlZChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYpCiAJcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIGNmZzgwMjExX3ZhbGlkX2tleV9pZHgoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAotCQkJICAgIGludCBrZXlfaWR4LCBib29sIHBhaXJ3aXNlKQomIzQzO2Jvb2wgY2ZnODAyMTFfdmFsaWRfa2V5X2lkeChzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LAomIzQzOwkJCSAgICBpbnQga2V5X2lkeCwgYm9vbCBwYWlyd2lzZSwKJiM0MzsJCQkgICAgY29uc3QgdTggKm1hY19hZGRyKQogewotCWludCBtYXhfa2V5X2lkeDsKLQotCWlmIChwYWlyd2lzZSkKLQkJbWF4X2tleV9pZHggPSAzOwotCWVsc2UgaWYgKHdpcGh5X2V4dF9mZWF0dXJlX2lzc2V0KCZhbXA7cmRldi0mZ3Q7d2lwaHksCi0JCQkJCSBOTDgwMjExX0VYVF9GRUFUVVJFX0JFQUNPTl9QUk9URUNUSU9OKSB8fAotCQkgd2lwaHlfZXh0X2ZlYXR1cmVfaXNzZXQoJmFtcDtyZGV2LSZndDt3aXBoeSwKLQkJCQkJIE5MODAyMTFfRVhUX0ZFQVRVUkVfQkVBQ09OX1BST1RFQ1RJT05fQ0xJRU5UKSkKLQkJbWF4X2tleV9pZHggPSA3OwotCWVsc2UgaWYgKGNmZzgwMjExX2lndGtfY2lwaGVyX3N1cHBvcnRlZChyZGV2KSkKLQkJbWF4X2tleV9pZHggPSA1OwotCWVsc2UKLQkJbWF4X2tleV9pZHggPSAzOwomIzQzOwlpZiAoV0FSTl9PTighd2RldikpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiAKLQlpZiAoa2V5X2lkeCAmbHQ7IDAgfHwga2V5X2lkeCAmZ3Q7IG1heF9rZXlfaWR4KQomIzQzOwlpZiAoa2V5X2lkeCAmbHQ7IDApCiAJCXJldHVybiBmYWxzZTsKIAotCXJldHVybiB0cnVlOwomIzQzOwkvKgomIzQzOwkgKiBDYW4mIzM5O3QgZGlmZmVyZW50aWF0ZSBjaXBoZXJzIGhlcmUgc28gYWxsb3cgMC4uMy4KJiM0MzsJICogUGFpcndpc2Uga2V5cyBtdXN0IGJlIGZvciBhIHN0YXRpb24gKE1BQyBhZGRyZXNzIGdpdmVuKS4KJiM0MzsJICovCiYjNDM7CWlmIChwYWlyd2lzZSkgewomIzQzOwkJaWYgKCFtYWNfYWRkcikKJiM0MzsJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CQlyZXR1cm4ga2V5X2lkeCAmbHQ7IDQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogRm9yIGdyb3VwIGtleXMsIG1hY19hZGRyPT1OVUxMIG1lYW5zIHNldHRpbmcgYSBncm91cCBrZXkKJiM0MzsJICogZm9yIFRYLCB3aGljaCBpcyBvbmx5IHN1cHBvcnRlZCBvbiBzb21lIGludGVyZmFjZSB0eXBlcywKJiM0MzsJICogZXhjZXB0IGZvciBTVEFUSU9OL1AyUF9DTElFTlQsIHdoZXJlIGl0JiMzOTtzIHNldHRpbmcgdGhlIFJYCiYjNDM7CSAqIGtleSB3aXRoIHRoZSBjdXJyZW50IEFQIChmb3IgbGVnYWN5IHJlYXNvbnMuKQomIzQzOwkgKgomIzQzOwkgKiBBcGFydCBmcm9tIHRoYXQgZXhjZXB0aW9uLCBhIG5vbi1OVUxMIG1hY19hZGRyIG1lYW5zIFJYCiYjNDM7CSAqIGtleSBiZWluZyBzZXQuCiYjNDM7CSAqLwomIzQzOwomIzQzOwlzd2l0Y2ggKHdkZXYtJmd0O2lmdHlwZSkgewomIzQzOwljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgomIzQzOwkJaWYgKCEod2Rldi0mZ3Q7d2lwaHktJmd0O2ZsYWdzICZhbXA7IFdJUEhZX0ZMQUdfSUJTU19SU04pKQomIzQzOwkJCXJldHVybiBmYWxzZTsKJiM0MzsJCWZhbGx0aHJvdWdoOwomIzQzOwljYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6CiYjNDM7CQkvKiBubyBzdXBwb3J0IGZvciBJR1RLL0JJR1RLICh5ZXQ/KSAqLwomIzQzOwkJcmV0dXJuIGtleV9pZHggJmx0OyA0OwomIzQzOwljYXNlIE5MODAyMTFfSUZUWVBFX05BTl9EQVRBOgomIzQzOwkJLyogdGhlc2UgYWx3YXlzIG5lZWQgdG8gc3VwcG9ydCBwZXItU1RBIEdUSyAqLwomIzQzOwkJcmV0dXJuIGtleV9pZHggJmx0OyA0OwomIzQzOwljYXNlIE5MODAyMTFfSUZUWVBFX05BTjoKJiM0MzsJCS8qIG5vIGRhdGEgKi8KJiM0MzsJCWlmIChrZXlfaWR4ICZsdDsgNCkKJiM0MzsJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CQkvKiBOQU4gcmV1c2VkIHRoaXMgZmxhZyAqLwomIzQzOwkJaWYgKHdpcGh5X2V4dF9mZWF0dXJlX2lzc2V0KHdkZXYtJmd0O3dpcGh5LAomIzQzOwkJCQkJICAgIE5MODAyMTFfRVhUX0ZFQVRVUkVfQkVBQ09OX1BST1RFQ1RJT04pKQomIzQzOwkJCXJldHVybiBrZXlfaWR4ICZsdDs9IDc7CiYjNDM7CQlyZXR1cm4ga2V5X2lkeCAmbHQ7PSA1OwomIzQzOwljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CiYjNDM7CWNhc2UgTkw4MDIxMV9JRlRZUEVfUDJQX0NMSUVOVDoKJiM0MzsJCS8qIHNlZSBub3RlIGFib3V0IGV4Y2VwdGlvbiBhYm92ZSAqLwomIzQzOwkJaWYgKG1hY19hZGRyKQomIzQzOwkJCXJldHVybiBmYWxzZTsKJiM0MzsJCS8qIEJJR1RLIHN1cHBvcnQgaW1wbGllcyBJR1RLIHN1cHBvcnQgKi8KJiM0MzsJCWlmICh3aXBoeV9leHRfZmVhdHVyZV9pc3NldCh3ZGV2LSZndDt3aXBoeSwKJiM0MzsJCQkJCSAgICBOTDgwMjExX0VYVF9GRUFUVVJFX0JFQUNPTl9QUk9URUNUSU9OX0NMSUVOVCkpCiYjNDM7CQkJcmV0dXJuIGtleV9pZHggJmx0Oz0gNzsKJiM0MzsJCWZhbGx0aHJvdWdoOwomIzQzOwljYXNlIE5MODAyMTFfSUZUWVBFX0FQOgomIzQzOwljYXNlIE5MODAyMTFfSUZUWVBFX1AyUF9HTzoKJiM0MzsJCS8qIG5vIFJYIHdpdGggW0JdSUdUSyAqLwomIzQzOwkJaWYgKG1hY19hZGRyKQomIzQzOwkJCXJldHVybiBmYWxzZTsKJiM0MzsJCWlmICh3aXBoeV9leHRfZmVhdHVyZV9pc3NldCh3ZGV2LSZndDt3aXBoeSwKJiM0MzsJCQkJCSAgICBOTDgwMjExX0VYVF9GRUFUVVJFX0JFQUNPTl9QUk9URUNUSU9OKSkKJiM0MzsJCQlyZXR1cm4ga2V5X2lkeCAmbHQ7PSA3OwomIzQzOwkJZmFsbHRocm91Z2g7CiYjNDM7CWNhc2UgTkw4MDIxMV9JRlRZUEVfQVBfVkxBTjoKJiM0MzsJCS8qIG5vIFJYIHdpdGggR1RLICovCiYjNDM7CQlpZiAobWFjX2FkZHIpCiYjNDM7CQkJcmV0dXJuIGZhbHNlOwomIzQzOwkJaWYgKGNmZzgwMjExX2lndGtfY2lwaGVyX3N1cHBvcnRlZCh3ZGV2LSZndDt3aXBoeSkpCiYjNDM7CQkJcmV0dXJuIGtleV9pZHggJmx0Oz0gNTsKJiM0MzsJCXJldHVybiBrZXlfaWR4ICZsdDs9IDM7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CX0KIH0KIAogaW50IGNmZzgwMjExX3ZhbGlkYXRlX2tleV9zZXR0aW5ncyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCkBAIC0yODgsMTMgJiM0MzszNDUsNyBAQCBpbnQgY2ZnODAyMTFfdmFsaWRhdGVfa2V5X3NldHRpbmdzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKIAkJCQkgICBzdHJ1Y3Qga2V5X3BhcmFtcyAqcGFyYW1zLCBpbnQga2V5X2lkeCwKIAkJCQkgICBib29sIHBhaXJ3aXNlLCBjb25zdCB1OCAqbWFjX2FkZHIpCiB7Ci0JaWYgKCFjZmc4MDIxMV92YWxpZF9rZXlfaWR4KHJkZXYsIGtleV9pZHgsIHBhaXJ3aXNlKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoIXBhaXJ3aXNlICZhbXA7JmFtcDsgbWFjX2FkZHIgJmFtcDsmYW1wOyAhKHJkZXYtJmd0O3dpcGh5LmZsYWdzICZhbXA7IFdJUEhZX0ZMQUdfSUJTU19SU04pKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChwYWlyd2lzZSAmYW1wOyZhbXA7ICFtYWNfYWRkcikKJiM0MzsJaWYgKCFjZmc4MDIxMV92YWxpZF9rZXlfaWR4KHdkZXYsIGtleV9pZHgsIHBhaXJ3aXNlLCBtYWNfYWRkcikpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJc3dpdGNoIChwYXJhbXMtJmd0O2NpcGhlcikgewpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3dleHQtY29tcGF0LmMgYi9uZXQvd2lyZWxlc3Mvd2V4dC1jb21wYXQuYwppbmRleCA1ZGJmM2VmNGIyNTdlMi4uZDQ1YmMwOGMwZGU0OTcgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy93ZXh0LWNvbXBhdC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC93aXJlbGVzcy93ZXh0LWNvbXBhdC5jCkBAIC00NTQsOCAmIzQzOzQ1NCw3IEBAIHN0YXRpYyBpbnQgY2ZnODAyMTFfc2V0X2VuY3J5cHRpb24oc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAogCQkJCXJlam9pbiA9IHRydWU7CiAJCQl9CiAKLQkJCWlmICghcGFpcndpc2UgJmFtcDsmYW1wOyBhZGRyICZhbXA7JmFtcDsKLQkJCSAgICAhKHJkZXYtJmd0O3dpcGh5LmZsYWdzICZhbXA7IFdJUEhZX0ZMQUdfSUJTU19SU04pKQomIzQzOwkJCWlmICghY2ZnODAyMTFfdmFsaWRfa2V5X2lkeCh3ZGV2LCBpZHgsIHBhaXJ3aXNlLCBhZGRyKSkKIAkJCQllcnIgPSAtRU5PRU5UOwogCQkJZWxzZQogCQkJCWVyciA9IHJkZXZfZGVsX2tleShyZGV2LCB3ZGV2LCAtMSwgaWR4LCBwYWlyd2lzZSwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDA6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDUzNwoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDMyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFBsYW4gZm9yIE1BQzgwMjExIEtleSBNYW5hZ2VtZW50KioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCBhIHBhdGNoIGhlcmUgdGhhdCYjMzk7cyBwb2tpbmcgYXJvdW5kIGluIGBuZXQvd2lyZWxlc3NgLiBMb29rcyBsaWtlIGl0JiMzOTtzIG1ha2luZyBzb21lIHNpZ25pZmljYW50IGNoYW5nZXMgdG8gdGhlIGtleSBtYW5hZ2VtZW50IGNvZGUsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBjZmc4MDIxMWAgYW5kIGBtYWM4MDIxMWAgc3Vic3lzdGVtcy4gVGhpcyBtb2RpZmljYXRpb24gb2YgYGNmZzgwMjExX3ZhbGlkX2tleV9pZHhgIGlzIHdoYXQgY2F1Z2h0IG15IGV5ZS4gIEl0JiMzOTtzIG5vdyB0YWtpbmcgYSBgd2lyZWxlc3NfZGV2YCBhbmQgTUFDIGFkZHJlc3MsIGluc3RlYWQgb2YgdGhlIHJlZ2lzdGVyZWQgZGV2aWNlLCB3aGljaCBmZWVscyBsaWtlIGEgZnVuZGFtZW50YWwgc2hpZnQgYW5kIGRlZmluaXRlbHkgd2FycmFudHMgYSBjbG9zZXIgbG9vay4gVGhlIGFkZGVkIGNoZWNrcyBiYXNlZCBvbiBgd2Rldi0mZ3Q7aWZ0eXBlYCBhcmUgYWxzbyBpbnRlcmVzdGluZy4gVGhpcyBjb2RlIGlzIGNsZWFybHkgcmVhY2hhYmxlIHRocm91Z2ggYm90aCBuZXRsaW5rIChubDgwMjExKSBhbmQgdGhlIFdFWFQgY29tcGF0aWJpbGl0eSBsYXllciwgbWFraW5nIGl0IGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLgoKTXkgcHJpbWFyeSBnb2FsIG5vdyBpcyB0byBpZGVudGlmeSB0aGUgbW9zdCBjcml0aWNhbCBmdW5jdGlvbnMgdG8gZm9jdXMgdGhlIGZ1enppbmcgZWZmb3J0cy4gIEZyb20gd2hhdCBJIGNhbiB0ZWxsIGZyb20gdGhlIGRpZmYsIHRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIHRoYXQgbmVlZCB0aGUgbW9zdCBhdHRlbnRpb246IGBubDgwMjExX2dldF9rZXlgLCBgbmw4MDIxMV9kZWxfa2V5YCwgYGNmZzgwMjExX3ZhbGlkX2tleV9pZHhgLCBgY2ZnODAyMTFfdmFsaWRhdGVfa2V5X3NldHRpbmdzYCwgYW5kIGBjZmc4MDIxMV9zZXRfZW5jcnlwdGlvbmAuIFRoZXNlIHNlZW0gdG8gYmUgdGhlIGNvcmUgZW50cnkgcG9pbnRzLCBhbmQgZ2l2ZW4gdGhlIGNoYW5nZXMsIHRoZXkmIzM5O3JlIGxpa2VseSB3aGVyZSB3ZSBjYW4gaW50cm9kdWNlIHNvbWUgaW50ZXJlc3RpbmcgYW5kIHBlcmhhcHMgdW5leHBlY3RlZCBpbnB1dHMuCgpCZWZvcmUgSSBnZXQgdG9vIGRlZXAgaW50byB0aGUgZnV6emluZyBzdHJhdGVneSBpdHNlbGYsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7dmUgZ290IHRoZSBuZWNlc3Nhcnkga2VybmVsIGNvbmZpZ3VyYXRpb25zIGluIHBsYWNlLiAgSSYjMzk7bSBhc3N1bWluZyBgbmV0L3dpcmVsZXNzYCBpcyBidWlsdCB3aXRoIGBDT05GSUdfQ0ZHODAyMTFgIGFuZCBgQ09ORklHX01BQzgwMjExYCwgYnV0IEkmIzM5O2xsIGRvdWJsZS1jaGVjayB0aG9zZSBjb25maWdzLiAgQ2FuJiMzOTt0IGFmZm9yZCB0byB3YXN0ZSB0aW1lIG9uIGZ1enppbmcgY29kZSB0aGF0IGlzbiYjMzk7dCBhY3R1YWxseSBjb21waWxlZCBpbiEgIE9uY2UgSSBjb25maXJtIHRoZSBjb25maWdzLCBJIGNhbiBtb3ZlIG9uIHRvIHRoZSBmdXp6aW5nIHNldHVwIGFuZCBpZGVudGlmeWluZyBlZmZlY3RpdmUgdGVzdCBjYXNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwMDo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjZmc4MDIxMV92YWxpZF9rZXlfaWR4JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9jb3JlLmg9NDQ1PWJvb2wgY2ZnODAyMTFfc3VwcG9ydGVkX2NpcGhlcl9zdWl0ZShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCB1MzIgY2lwaGVyKTtcbm5ldC93aXJlbGVzcy9jb3JlLmg6NDQ2OmJvb2wgY2ZnODAyMTFfdmFsaWRfa2V5X2lkeChzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxubmV0L3dpcmVsZXNzL2NvcmUuaC00NDctXHRcdFx0ICAgIGludCBrZXlfaWR4LCBib29sIHBhaXJ3aXNlLFxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9NTM2MT1zdGF0aWMgaW50IG5sODAyMTFfZ2V0X2tleShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNTQxMS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6NTQxMjpcdGlmICghY2ZnODAyMTFfdmFsaWRfa2V5X2lkeCh3ZGV2LCBrZXlfaWR4LCBwYWlyd2lzZSwgbWFjX2FkZHIpKVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy01NDEzLVx0XHRyZXR1cm4gLUVOT0VOVDtcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTU2Mzg9c3RhdGljIGludCBubDgwMjExX2RlbF9rZXkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTU2NjUtXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjU2NjY6XHRpZiAoIWNmZzgwMjExX3ZhbGlkX2tleV9pZHgod2Rldiwga2V5LmlkeCxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNTY2Ny1cdFx0XHRcdCAgICBrZXkudHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0UsXG4tLVxubmV0L3dpcmVsZXNzL3V0aWwuYz0yNDQ9c3RhdGljIGJvb2wgY2ZnODAyMTFfaWd0a19jaXBoZXJfc3VwcG9ydGVkKHN0cnVjdCB3aXBoeSAqd2lwaHkpXG4tLVxubmV0L3dpcmVsZXNzL3V0aWwuYy0yNjAtXG5uZXQvd2lyZWxlc3MvdXRpbC5jOjI2MTpib29sIGNmZzgwMjExX3ZhbGlkX2tleV9pZHgoc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldixcbm5ldC93aXJlbGVzcy91dGlsLmMtMjYyLVx0XHRcdCAgICBpbnQga2V5X2lkeCwgYm9vbCBwYWlyd2lzZSxcbi0tXG5uZXQvd2lyZWxlc3MvdXRpbC5jPTM0Mz1pbnQgY2ZnODAyMTFfdmFsaWRhdGVfa2V5X3NldHRpbmdzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbi0tXG5uZXQvd2lyZWxlc3MvdXRpbC5jLTM0Ny17XG5uZXQvd2lyZWxlc3MvdXRpbC5jOjM0ODpcdGlmICghY2ZnODAyMTFfdmFsaWRfa2V5X2lkeCh3ZGV2LCBrZXlfaWR4LCBwYWlyd2lzZSwgbWFjX2FkZHIpKVxubmV0L3dpcmVsZXNzL3V0aWwuYy0zNDktXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbm5ldC93aXJlbGVzcy93ZXh0LWNvbXBhdC5jPTM5OD1zdGF0aWMgaW50IGNmZzgwMjExX3NldF9lbmNyeXB0aW9uKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbi0tXG5uZXQvd2lyZWxlc3Mvd2V4dC1jb21wYXQuYy00NTYtXG5uZXQvd2lyZWxlc3Mvd2V4dC1jb21wYXQuYzo0NTc6XHRcdFx0aWYgKCFjZmc4MDIxMV92YWxpZF9rZXlfaWR4KHdkZXYsIGlkeCwgcGFpcndpc2UsIGFkZHIpKVxubmV0L3dpcmVsZXNzL3dleHQtY29tcGF0LmMtNDU4LVx0XHRcdFx0ZXJyID0gLUVOT0VOVDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwMDo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MDg2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogOTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLZXkgTWFuYWdlbWVudCBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGZ1bmN0aW9uczogYG5sODAyMTFfZ2V0X2tleWAsIGBubDgwMjExX2RlbF9rZXlgLCBgY2ZnODAyMTFfdmFsaWRfa2V5X2lkeGAsIGBjZmc4MDIxMV92YWxpZGF0ZV9rZXlfc2V0dGluZ3NgLCBhbmQgYGNmZzgwMjExX3NldF9lbmNyeXB0aW9uYC4gVGhleSYjMzk7cmUgYWxsIG9idmlvdXNseSByZWxhdGVkIHRvIGtleSBtYW5hZ2VtZW50IHdpdGhpbiB0aGUgd2lyZWxlc3MgbmV0d29ya2luZyBzdGFjay4gYG5sODAyMTFfZ2V0X2tleWAgYW5kIGBubDgwMjExX2RlbF9rZXlgIHN1Z2dlc3QgaW50ZXJhY3Rpb24gd2l0aCB0aGUgbmV0bGluayBpbnRlcmZhY2UsIHdoaWNoIGlzIHN0YW5kYXJkIGZvciBjb250cm9sIHBsYW5lIG9wZXJhdGlvbnMgaW4gbW9kZXJuIExpbnV4IG5ldHdvcmtpbmcuIEkmIzM5O20gZ3Vlc3NpbmcgdGhleSBoYW5kbGUgcmV0cmlldmluZyBhbmQgZGVsZXRpbmcgY3J5cHRvZ3JhcGhpYyBrZXlzIGFzc29jaWF0ZWQgd2l0aCB3aXJlbGVzcyBpbnRlcmZhY2VzLiBUaGUgb3RoZXIgdGhyZWUgbG9vayBsaWtlIHRoZXkmIzM5O3JlIHZhbGlkYXRpb24gYW5kIGNvbmZpZ3VyYXRpb24gcm91dGluZXMgd2l0aGluIHRoZSBgY2ZnODAyMTFgIGZyYW1ld29yay4gYGNmZzgwMjExX3ZhbGlkX2tleV9pZHhgIGlzIHByb2JhYmx5IGFib3V0IGNoZWNraW5nIHRoZSB2YWxpZGl0eSBvZiBhIGdpdmVuIGtleSBpbmRleCwgd2hpY2ggaXMgcHJldHR5IGZ1bmRhbWVudGFsIHRvIGVuc3VyZSBhZ2FpbnN0IGJ1ZmZlciBvdmVyZmxvd3Mgb3Igb3RoZXIgc2VjdXJpdHkgaXNzdWVzIHdoZW4gYWNjZXNzaW5nIGtleXMuIGBjZmc4MDIxMV92YWxpZGF0ZV9rZXlfc2V0dGluZ3NgIHNlZW1zIHRvIGhhbmRsZSB2YWxpZGF0aW9uIG9mIGtleSBzZXR0aW5ncyBsaWtlIGxlbmd0aCwgYWxnb3JpdGhtLCBldGMuLCBlbnN1cmluZyB0aGF0IHRoZXkmIzM5O3JlIGNvbXBhdGlibGUgd2l0aCB0aGUgaGFyZHdhcmUgYW5kIHRoZSBjb25maWd1cmVkIHNlY3VyaXR5IHBvbGljeS4gRmluYWxseSwgYGNmZzgwMjExX3NldF9lbmNyeXB0aW9uYCBpcyBhIG5vLWJyYWluZXIsIGl0JiMzOTtzIGFib3V0IGFjdHVhbGx5IGFwcGx5aW5nIHRoZSBlbmNyeXB0aW9uIHNldHRpbmdzLgoKVG8gZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZXNlIGZpdCB0b2dldGhlciBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgdGhleSBoYXZlLCBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgdGhlIEtjb25maWcgZm9yIHRoZSBgbmV0L3dpcmVsZXNzYCBzZWN0aW9uLiBUaGF0IHNob3VsZCBzaG93IG1lIHRoZSByZWxldmFudCBjb21waWxlLXRpbWUgb3B0aW9ucyBhbmQgdGhlaXIgZGVwZW5kZW5jaWVzLCB3aGljaCB3aWxsIGdpdmUgbWUgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgZW5hYmxlZCBhbmQgdXNlZCB3aXRoaW4gdGhlIGJyb2FkZXIgY29udGV4dCBvZiB0aGUgd2lyZWxlc3Mgc3RhY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDA6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XmNvbmZpZyBDRkc4MDIxMSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9LY29uZmlnPTE0PWNvbmZpZyBXRVhUX1BSSVZcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNi1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjE3OmNvbmZpZyBDRkc4MDIxMVxubmV0L3dpcmVsZXNzL0tjb25maWctMTgtXHR0cmlzdGF0ZSBcJiMzNDtjZmc4MDIxMSAtIHdpcmVsZXNzIGNvbmZpZ3VyYXRpb24gQVBJXCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWc9Mzg9Y29uZmlnIE5MODAyMTFfVEVTVE1PREVcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy01MS1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjUyOmNvbmZpZyBDRkc4MDIxMV9ERVZFTE9QRVJfV0FSTklOR1Ncbm5ldC93aXJlbGVzcy9LY29uZmlnLTUzLVx0Ym9vbCBcJiMzNDtlbmFibGUgZGV2ZWxvcGVyIHdhcm5pbmdzXCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctNjctXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo2ODpjb25maWcgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy02OS1cdGJvb2wgXCYjMzQ7Y2ZnODAyMTEgY2VydGlmaWNhdGlvbiBvbnVzXCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctODgtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo4OTpjb25maWcgQ0ZHODAyMTFfUkVRVUlSRV9TSUdORURfUkVHREJcbm5ldC93aXJlbGVzcy9LY29uZmlnLTkwLVx0Ym9vbCBcJiMzNDtyZXF1aXJlIHJlZ2RiIHNpZ25hdHVyZVwmIzM0OyBpZiBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy05OC1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjk5OmNvbmZpZyBDRkc4MDIxMV9VU0VfS0VSTkVMX1JFR0RCX0tFWVNcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEwMC1cdGJvb2wgXCYjMzQ7YWxsb3cgcmVnZGIga2V5cyBzaGlwcGVkIHdpdGggdGhlIGtlcm5lbFwmIzM0OyBpZiBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMTAtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxMTE6Y29uZmlnIENGRzgwMjExX0VYVFJBX1JFR0RCX0tFWURJUlxubmV0L3dpcmVsZXNzL0tjb25maWctMTEyLVx0c3RyaW5nIFwmIzM0O2FkZGl0aW9uYWwgcmVnZGIga2V5IGRpcmVjdG9yeVwmIzM0OyBpZiBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMjEtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxMjI6Y29uZmlnIENGRzgwMjExX1JFR19DRUxMVUxBUl9ISU5UU1xubmV0L3dpcmVsZXNzL0tjb25maWctMTIzLVx0Ym9vbCBcJiMzNDtjZmc4MDIxMSByZWd1bGF0b3J5IHN1cHBvcnQgZm9yIGNlbGx1bGFyIGJhc2Ugc3RhdGlvbiBoaW50c1wmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTEzNC1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjEzNTpjb25maWcgQ0ZHODAyMTFfUkVHX1JFTEFYX05PX0lSXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMzYtXHRib29sIFwmIzM0O2NmZzgwMjExIHN1cHBvcnQgZm9yIE5PX0lSIHJlbGF4YXRpb25cJiMzNDtcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNTgtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxNTk6Y29uZmlnIENGRzgwMjExX0RFRkFVTFRfUFNcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE2MC1cdGJvb2wgXCYjMzQ7ZW5hYmxlIHBvd2Vyc2F2ZSBieSBkZWZhdWx0XCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTY4LVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTY5OmNvbmZpZyBDRkc4MDIxMV9ERUJVR0ZTXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNzAtXHRib29sIFwmIzM0O2NmZzgwMjExIERlYnVnRlMgZW50cmllc1wmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTE3Ni1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjE3Nzpjb25maWcgQ0ZHODAyMTFfQ1JEQV9TVVBQT1JUXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNzgtXHRib29sIFwmIzM0O3N1cHBvcnQgQ1JEQVwmIzM0OyBpZiBFWFBFUlRcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xODYtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxODc6Y29uZmlnIENGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE4OC1cdGJvb2wgXCYjMzQ7Y2ZnODAyMTEgd2lyZWxlc3MgZXh0ZW5zaW9ucyBjb21wYXRpYmlsaXR5XCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTkzLVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTk0OmNvbmZpZyBDRkc4MDIxMV9LVU5JVF9URVNUXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xOTUtXHR0cmlzdGF0ZSBcJiMzNDtLVW5pdCB0ZXN0cyBmb3IgY2ZnODAyMTFcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDAwOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1MDUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBuZWNlc3Nhcnkga2VybmVsIGNvbmZpZ3VyYXRpb25zIGZvciB0aGlzIHRlc3Rpbmcgc2V0dXAuIE15IHByaW1hcnkgZm9jdXMgaXMgb24gYENGRzgwMjExYCBhbmQgYENGRzgwMjExX1dFWFRgLiBUaGVzZSBzZWVtIHRvIGJlIHRoZSBtb3N0IGRpcmVjdCBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBJJiMzOTttIHRhcmdldGluZy4gSSBhbHNvIHRoaW5rIEkgbWlnaHQgbmVlZCB0byBlbmFibGUgYE1BQzgwMjExYCB0byBmdWxseSB1dGlsaXplIHRoZSBDRkc4MDIxMSB3aXJlbGVzcyBzdGFjayBmb3IgYWN0dWFsIHRlc3RpbmcuIExldCYjMzk7cyBub3QgZm9yZ2V0IHRoZSBuZXQvd2lyZWxlc3MgZGlyZWN0b3J5LCB3aGljaCwgZnJvbSBteSB1bmRlcnN0YW5kaW5nLCBvbmx5IG5lZWRzIGBDRkc4MDIxMWAuIE5vdywgaG9sZCBvbiwgSSBzaG91bGQgYWxzbyBpbmNsdWRlIGBNQUM4MDIxMV9IV1NJTWAuIFRoaXMgbG9va3MgbGlrZSB0aGUgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgY29tcG9uZW50IGZvciBtYWM4MDIxMSwgYW5kIHRoYXQgd291bGQgYmUgaW5jcmVkaWJseSB1c2VmdWwgZm9yIGZ1enppbmchIFNvLCBJJiMzOTtsbCBnbyB3aXRoIGBDRkc4MDIxMWAsIGBDRkc4MDIxMV9XRVhUYCwgYE1BQzgwMjExYCwgYW5kIGBNQUM4MDIxMV9IV1NJTWAuIEFuZCBqdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nLCBJIG5lZWQgdG8gdGFrZSBhIHF1aWNrIGxvb2sgYXQgdGhlIGBuZXQvd2lyZWxlc3MvTWFrZWZpbGVgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDAwOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHRvYmotJChDT05GSUdfQ0ZHODAyMTEpICYjNDM7PSBjZmc4MDIxMS5vXG4gICAzOlx0b2JqLXkgJiM0Mzs9IHRlc3RzL1xuICAgNDpcdFxuICAgNTpcdG9iai0kKENPTkZJR19XRVhUX0NPUkUpICYjNDM7PSB3ZXh0LWNvcmUub1xuICAgNjpcdG9iai0kKENPTkZJR19XRVhUX1BST0MpICYjNDM7PSB3ZXh0LXByb2Mub1xuICAgNzpcdG9iai0kKENPTkZJR19XRVhUX1BSSVYpICYjNDM7PSB3ZXh0LXByaXYub1xuICAgODpcdFxuICAgOTpcdGNmZzgwMjExLXkgJiM0Mzs9IGNvcmUubyBzeXNmcy5vIHJhZGlvdGFwLm8gdXRpbC5vIHJlZy5vIHNjYW4ubyBubDgwMjExLm9cbiAgMTA6XHRjZmc4MDIxMS15ICYjNDM7PSBtbG1lLm8gaWJzcy5vIHNtZS5vIGNoYW4ubyBldGh0b29sLm8gbWVzaC5vIGFwLm8gdHJhY2UubyBvY2Iub1xuICAxMTpcdGNmZzgwMjExLXkgJiM0Mzs9IG1pY2hhZWwtbWljLm8gcG1zci5vXG4gIDEyOlx0Y2ZnODAyMTEtJChDT05GSUdfT0YpICYjNDM7PSBvZi5vXG4gIDEzOlx0Y2ZnODAyMTEtJChDT05GSUdfQ0ZHODAyMTFfREVCVUdGUykgJiM0Mzs9IGRlYnVnZnMub1xuICAxNDpcdGNmZzgwMjExLSQoQ09ORklHX0NGRzgwMjExX1dFWFQpICYjNDM7PSB3ZXh0LWNvbXBhdC5vIHdleHQtc21lLm9cbiAgMTU6XHRcbiAgMTY6XHRDRkxBR1NfdHJhY2UubyA6PSAtSSQoc3JjKVxuICAxNzpcdFxuICAxODpcdGNmZzgwMjExLSQoQ09ORklHX0NGRzgwMjExX1VTRV9LRVJORUxfUkVHREJfS0VZUykgJiM0Mzs9IHNoaXBwZWQtY2VydHMub1xuICAxOTpcdGlmbmVxICgkKENPTkZJR19DRkc4MDIxMV9FWFRSQV9SRUdEQl9LRVlESVIpLClcbiAgMjA6XHRjZmc4MDIxMS15ICYjNDM7PSBleHRyYS1jZXJ0cy5vXG4gIDIxOlx0ZW5kaWZcbiAgMjI6XHRcbiAgMjM6XHQkKG9iaikvc2hpcHBlZC1jZXJ0cy5jOiAkKHNvcnQgJCh3aWxkY2FyZCAkKHNyYykvY2VydHMvKi5oZXgpKVxuICAyNDpcdFx0QCQoa2VjaG8pIFwmIzM0OyAgR0VOICAgICAkQFwmIzM0O1xuICAyNTpcdFx0JChRKShlY2hvICYjMzk7I2luY2x1ZGUgXCYjMzQ7cmVnLmhcJiMzNDsmIzM5OzsgXFxcbiAgMjY6XHRcdCAgZWNobyAmIzM5O2NvbnN0IHU4IHNoaXBwZWRfcmVnZGJfY2VydHNbXSA9IHsmIzM5OzsgXFxcbiAgMjc6XHRcdCAgZWNobyB8IGNhdCAtICReIDsgXFxcbiAgMjg6XHRcdCAgZWNobyAmIzM5O307JiMzOTs7IFxcXG4gIDI5Olx0XHQgIGVjaG8gJiMzOTt1bnNpZ25lZCBpbnQgc2hpcHBlZF9yZWdkYl9jZXJ0c19sZW4gPSBzaXplb2Yoc2hpcHBlZF9yZWdkYl9jZXJ0cyk7JiMzOTs7IFxcXG4gIDMwOlx0XHQgKSBcdTAwM2UgJEBcbiAgMzE6XHRcbiAgMzI6XHQkKG9iaikvZXh0cmEtY2VydHMuYzogJChDT05GSUdfQ0ZHODAyMTFfRVhUUkFfUkVHREJfS0VZRElSKSBcXFxuICAzMzpcdFx0XHQgICAgICAkKHNvcnQgJCh3aWxkY2FyZCAkKENPTkZJR19DRkc4MDIxMV9FWFRSQV9SRUdEQl9LRVlESVIpLyoueDUwOSkpXG4gIDM0Olx0XHRAJChrZWNobykgXCYjMzQ7ICBHRU4gICAgICRAXCYjMzQ7XG4gIDM1Olx0XHQkKFEpKHNldCAtZTsgXFxcbiAgMzY6XHRcdCAgYWxsZj1cJiMzNDtcJiMzNDs7IFxcXG4gIDM3Olx0XHQgIGZvciBmIGluICReIDsgZG8gXFxcbiAgMzg6XHRcdCAgICAgIHRlc3QgLWYgJCRmIHx8IGNvbnRpbnVlO1xcXG4gIDM5Olx0XHQgICAgICAjIHNpbWlsYXIgdG8gaGV4ZHVtcCAtdiAtZSAmIzM5OzEvMSBcJiMzNDsweCUuMngsXCYjMzQ7IFwmIzM0O1xcblwmIzM0OyYjMzk7IFxcXG4gIDQwOlx0XHQgICAgICB0aGlzZj0kJChvZCAtQW4gLXYgLXR4MSBcdTAwM2MgJCRmIHwgXFxcbiAgNDE6XHRcdCAgICAgICAgICAgICAgICAgICBzZWQgLWUgJiMzOTtzLyAvXFxuL2cmIzM5OyB8IFxcXG4gIDQyOlx0XHQgICAgICAgICAgICAgICAgICAgc2VkIC1lICYjMzk7cy9eWzAtOWEtZl1cXCYjNDM7JCQvXFwwLzt0O2QmIzM5OyB8IFxcXG4gIDQzOlx0XHQgICAgICAgICAgICAgICAgICAgc2VkIC1lICYjMzk7cy9eLzB4LztzLyQkLywvJiMzOTspOyBcXFxuICA0NDpcdFx0ICAgICAgIyBmaWxlIHNob3VsZCBub3QgYmUgZW1wdHkgLSBtYXliZSBjb21tYW5kIHN1YnN0aXR1dGlvbiBmYWlsZWQ/IFxcXG4gIDQ1Olx0XHQgICAgICB0ZXN0ICEgLXogXCYjMzQ7JCR0aGlzZlwmIzM0OztcXFxuICA0NjpcdFx0ICAgICAgYWxsZj0kJGFsbGYkJHRoaXNmO1xcXG4gIDQ3Olx0XHQgIGRvbmU7IFxcXG4gIDQ4Olx0XHQgICggXFxcbiAgNDk6XHRcdCAgICAgIGVjaG8gJiMzOTsjaW5jbHVkZSBcJiMzNDtyZWcuaFwmIzM0OyYjMzk7OyBcXFxuICA1MDpcdFx0ICAgICAgZWNobyAmIzM5O2NvbnN0IHU4IGV4dHJhX3JlZ2RiX2NlcnRzW10gPSB7JiMzOTs7IFxcXG4gIDUxOlx0XHQgICAgICBlY2hvIFwmIzM0OyQkYWxsZlwmIzM0OzsgXFxcbiAgNTI6XHRcdCAgICAgIGVjaG8gJiMzOTt9OyYjMzk7OyBcXFxuICA1MzpcdFx0ICAgICAgZWNobyAmIzM5O3Vuc2lnbmVkIGludCBleHRyYV9yZWdkYl9jZXJ0c19sZW4gPSBzaXplb2YoZXh0cmFfcmVnZGJfY2VydHMpOyYjMzk7OyBcXFxuICA1NDpcdFx0ICApIFx1MDAzZSAkQClcbiAgNTU6XHRcbiAgNTY6XHRjbGVhbi1maWxlcyAmIzQzOz0gc2hpcHBlZC1jZXJ0cy5jIGV4dHJhLWNlcnRzLmNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwMDo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MTIwCgkJCQkJCQlvdXRwdXQ6IDIyMQoJCQkJCQkJdGhvdWdodHM6IDU5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLZXkgRnVuY3Rpb25hbGl0eSBpbiBjZmc4MDIxMSBmb3IgRnV6emluZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBmb2N1cyBpcyBvbiB0aGUga2V5IG1hbmFnZW1lbnQgd2l0aGluIGBjZmc4MDIxMWAgYW5kIGhvdyB0aGUgcHJvcG9zZWQgY2hhbmdlcyBpbXBhY3QgZnV6emluZy4gRmlyc3QsIEkgbmVlZCB0byBrbm93IHdoaWNoIGNvbmZpZ3VyYXRpb25zIGFyZSByZWxldmFudDogYENPTkZJR19DRkc4MDIxMWAgYW5kIGBDT05GSUdfQ0ZHODAyMTFfV0VYVGAgYXJlIHRoZSBvYnZpb3VzIG9uZXMsIGFuZCBJJiMzOTtsbCBrZWVwIGBDT05GSUdfTUFDODAyMTFfSFdTSU1gIGluIG1pbmQgZm9yIHBvdGVudGlhbCBoYXJkd2FyZSBzaW11bGF0aW9uIGR1cmluZyB0ZXN0aW5nLgoKTm93LCB0aGUgZnVuY3Rpb25zLiBJJiMzOTt2ZSBwaW5wb2ludGVkIGEgZmV3IGtleSBwbGF5ZXJzOiBgbmw4MDIxMV9nZXRfa2V5YCwgYG5sODAyMTFfZGVsX2tleWAsIGBjZmc4MDIxMV92YWxpZF9rZXlfaWR4YCwgYGNmZzgwMjExX3ZhbGlkYXRlX2tleV9zZXR0aW5nc2AsIGFuZCBgY2ZnODAyMTFfc2V0X2VuY3J5cHRpb25gLiBUaW1lIHRvIGRpZyBpbnRvIHRoZXNlLgoKT2theSwgbGV0JiMzOTtzIHNlZS4uLiBgY2ZnODAyMTFfdmFsaWRfa2V5X2lkeGAgaXMgZGVmaW5lZCBpbiBib3RoIGBuZXQvd2lyZWxlc3MvY29yZS5oYCBhbmQgYG5ldC93aXJlbGVzcy91dGlsLmNgLCBhbmQgaXQmIzM5O3Mgbm90IHN0YXRpYy4gR29vZC4gYG5sODAyMTFfZ2V0X2tleWAgYW5kIGBubDgwMjExX2RlbF9rZXlgIGFyZSBzdGF0aWMgYW5kIHJlc2lkZSBpbiBgbmV0L3dpcmVsZXNzL25sODAyMTEuY2AsIGFuZCBgY2ZnODAyMTFfc2V0X2VuY3J5cHRpb25gIGlzIHN0YXRpYyBpbiBgbmV0L3dpcmVsZXNzL3dleHQtY29tcGF0LmNgLgoKQSBxdWljayBjaGVjayBjb25maXJtcyB0aGF0IGBjZmc4MDIxMV92YWxpZGF0ZV9rZXlfc2V0dGluZ3NgIGlzbiYjMzk7dCBzdGF0aWMuIEFscmlnaHQsIGxldCYjMzk7cyBrZWVwIGFuIGV5ZSBvdXQgZm9yIG90aGVyIGZ1bmN0aW9ucy4gQmFzZWQgb24gdGhlIGFuYWx5c2lzLCBgY2ZnODAyMTFfdmFsaWRfa2V5X2lkeGAgc3RhbmRzIG91dCBhcyB0aGUgbW9zdCBzaWduaWZpY2FudCBvbmUgaGVyZS4KCk5vdywgcmVhY2hhYmlsaXR5LiBgbmw4MDIxMV9nZXRfa2V5YCBhbmQgYG5sODAyMTFfZGVsX2tleWAgYXJlIGRlZmluaXRlbHkgcmVhY2hhYmxlIHZpYSBuZXRsaW5rLiBgY2ZnODAyMTFfc2V0X2VuY3J5cHRpb25gIGlzIGFjY2Vzc2libGUgdGhyb3VnaCB3aXJlbGVzcyBleHRlbnNpb25zICh3ZXh0KS4gR3JlYXQsIGFsbCB0aGUgZnVuY3Rpb25zIEkmIzM5O20gdGFyZ2V0aW5nIGFyZSByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlLCB3aGljaCBpcyBjcml0aWNhbCBmb3IgZWZmZWN0aXZlIGZ1enppbmcuCgpNeSByZWFzb25pbmcgaXMgdGhpczogdGhlIHBhdGNoIGZ1bmRhbWVudGFsbHkgYWx0ZXJzIGhvdyBrZXkgaW5kaWNlcyBhcmUgdmFsaWRhdGVkIHdpdGhpbiBgY2ZnODAyMTFgLiBUaGlzIGluY2x1ZGVzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgaW50ZXJmYWNlLXNwZWNpZmljIGNoZWNrcyBhbmQgdGhlIG1vZGlmaWNhdGlvbiBvZiB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlIHRvIHRha2UgYSBgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldmAuIFRoZXNlIGNoYW5nZXMgaGF2ZSBhIGRpcmVjdCBpbXBhY3Qgb24gdGhlIG5ldGxpbmsgKG5sODAyMTEpIGFuZCB3aXJlbGVzcyBleHRlbnNpb25zICh3ZXh0KSBwYXRocyB1c2VkIGZvciByZXRyaWV2aW5nLCBkZWxldGluZywgYW5kIHNldHRpbmcga2V5cy4gVGhlIGZhY3QgdGhhdCB0aGUgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSBtYWtlcyB0aGVtIGlkZWFsIGZvciBmdXp6aW5nLgoKSSYjMzk7bSByZWFkeSB0byBwcm9jZWVkIHdpdGggdGhlc2UgZnVuY3Rpb25zIGZvciB0ZXN0aW5nLiBMZXQmIzM5O3MgZ2V0IHRob3NlIHJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDAwOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDRkc4MDIxMSYjMzQ7LAogICAgJiMzNDtDRkc4MDIxMV9XRVhUJiMzNDssCiAgICAmIzM0O01BQzgwMjExX0hXU0lNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmw4MDIxMV9nZXRfa2V5JiMzNDssCiAgICAmIzM0O25sODAyMTFfZGVsX2tleSYjMzQ7LAogICAgJiMzNDtjZmc4MDIxMV92YWxpZF9rZXlfaWR4JiMzNDssCiAgICAmIzM0O2NmZzgwMjExX3ZhbGlkYXRlX2tleV9zZXR0aW5ncyYjMzQ7LAogICAgJiMzNDtjZmc4MDIxMV9zZXRfZW5jcnlwdGlvbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9naWMgZm9yIHZhbGlkYXRpbmcga2V5IGluZGljZXMgaW4gdGhlIGNmZzgwMjExIHN1YnN5c3RlbSwgYWRkaW5nIGludGVyZmFjZSB0eXBlLXNwZWNpZmljIGNoZWNrcyBhbmQgY2hhbmdpbmcgdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZSB0byB0YWtlIGBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2YC4gVGhpcyBhZmZlY3RzIG5ldGxpbmsgKG5sODAyMTEpIGFuZCB3aXJlbGVzcyBleHRlbnNpb25zICh3ZXh0KSBwYXRocyBmb3IgZ2V0dGluZywgZGVsZXRpbmcsIGFuZCBzZXR0aW5nIGtleXMuIFRoZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlLCBtYWtpbmcgdGhlbSBzdWl0YWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0ZHODAyMTEmIzM0OywKICAgICYjMzQ7Q0ZHODAyMTFfV0VYVCYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMV9IV1NJTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25sODAyMTFfZ2V0X2tleSYjMzQ7LAogICAgJiMzNDtubDgwMjExX2RlbF9rZXkmIzM0OywKICAgICYjMzQ7Y2ZnODAyMTFfdmFsaWRfa2V5X2lkeCYjMzQ7LAogICAgJiMzNDtjZmc4MDIxMV92YWxpZGF0ZV9rZXlfc2V0dGluZ3MmIzM0OywKICAgICYjMzQ7Y2ZnODAyMTFfc2V0X2VuY3J5cHRpb24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvZ2ljIGZvciB2YWxpZGF0aW5nIGtleSBpbmRpY2VzIGluIHRoZSBjZmc4MDIxMSBzdWJzeXN0ZW0sIGFkZGluZyBpbnRlcmZhY2UgdHlwZS1zcGVjaWZpYyBjaGVja3MgYW5kIGNoYW5naW5nIHRoZSBmdW5jdGlvbiBzaWduYXR1cmUgdG8gdGFrZSBgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldmAuIFRoaXMgYWZmZWN0cyBuZXRsaW5rIChubDgwMjExKSBhbmQgd2lyZWxlc3MgZXh0ZW5zaW9ucyAod2V4dCkgcGF0aHMgZm9yIGdldHRpbmcsIGRlbGV0aW5nLCBhbmQgc2V0dGluZyBrZXlzLiBUaGUgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSwgbWFraW5nIHRoZW0gc3VpdGFibGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMDo0NzozOS40ODA0NTYxMTZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDg5ODEwNjUwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDRkc4MDIxMVwiLFxuICAgIFwiQ0ZHODAyMTFfV0VYVFwiLFxuICAgIFwiTUFDODAyMTFfSFdTSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJubDgwMjExX2dldF9rZXlcIixcbiAgICBcIm5sODAyMTFfZGVsX2tleVwiLFxuICAgIFwiY2ZnODAyMTFfdmFsaWRfa2V5X2lkeFwiLFxuICAgIFwiY2ZnODAyMTFfdmFsaWRhdGVfa2V5X3NldHRpbmdzXCIsXG4gICAgXCJjZmc4MDIxMV9zZXRfZW5jcnlwdGlvblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2dpYyBmb3IgdmFsaWRhdGluZyBrZXkgaW5kaWNlcyBpbiB0aGUgY2ZnODAyMTEgc3Vic3lzdGVtLCBhZGRpbmcgaW50ZXJmYWNlIHR5cGUtc3BlY2lmaWMgY2hlY2tzIGFuZCBjaGFuZ2luZyB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlIHRvIHRha2UgYHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXZgLiBUaGlzIGFmZmVjdHMgbmV0bGluayAobmw4MDIxMSkgYW5kIHdpcmVsZXNzIGV4dGVuc2lvbnMgKHdleHQpIHBhdGhzIGZvciBnZXR0aW5nLCBkZWxldGluZywgYW5kIHNldHRpbmcga2V5cy4gVGhlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UsIG1ha2luZyB0aGVtIHN1aXRhYmxlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMDo0NzozOS40ODA0NzE4NzZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5MDQ1ODc4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGY1YmQxZDZiOTlmYzMwYzA3Yjk0MGQwNDVmZDc0MzMzZjE3N2JlZDZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdWwgMTYgMDA6NDc6MzcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL2NvcmUuaCBiL25ldC93aXJlbGVzcy9jb3JlLmhcXG5pbmRleCBkZjQ3ZWQ2MjA4YTUwZC4uMzk5MDM3NTE0OTQzZDkgMTAwNjQ0XFxuLS0tIGEvbmV0L3dpcmVsZXNzL2NvcmUuaFxcbisrKyBiL25ldC93aXJlbGVzcy9jb3JlLmhcXG5AQCAtNDQzLDggKzQ0Myw5IEBAIHZvaWQgY2ZnODAyMTFfc21lX2FiYW5kb25fYXNzb2Moc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldik7XFxuIFxcbiAvKiBpbnRlcm5hbCBoZWxwZXJzICovXFxuIGJvb2wgY2ZnODAyMTFfc3VwcG9ydGVkX2NpcGhlcl9zdWl0ZShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCB1MzIgY2lwaGVyKTtcXG4tYm9vbCBjZmc4MDIxMV92YWxpZF9rZXlfaWR4KHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG4tXFx0XFx0XFx0ICAgIGludCBrZXlfaWR4LCBib29sIHBhaXJ3aXNlKTtcXG4rYm9vbCBjZmc4MDIxMV92YWxpZF9rZXlfaWR4KHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxuK1xcdFxcdFxcdCAgICBpbnQga2V5X2lkeCwgYm9vbCBwYWlyd2lzZSxcXG4rXFx0XFx0XFx0ICAgIGNvbnN0IHU4ICptYWNfYWRkcik7XFxuIGludCBjZmc4MDIxMV92YWxpZGF0ZV9rZXlfc2V0dGluZ3Moc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbiBcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxcbiBcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qga2V5X3BhcmFtcyAqcGFyYW1zLCBpbnQga2V5X2lkeCxcXG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL25sODAyMTEuYyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmNcXG5pbmRleCAyNDIwNzFhZDEwZDZjOS4uOTlhMWMwMTc0YmRiZjIgMTAwNjQ0XFxuLS0tIGEvbmV0L3dpcmVsZXNzL25sODAyMTEuY1xcbisrKyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmNcXG5AQCAtNTQwOSw3ICs1NDA5LDcgQEAgc3RhdGljIGludCBubDgwMjExX2dldF9rZXkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4gXFx0aWYgKCFyZGV2LVxcdTAwM2VvcHMtXFx1MDAzZWdldF9rZXkpXFxuIFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gXFxuLVxcdGlmICghcGFpcndpc2UgXFx1MDAyNlxcdTAwMjYgbWFjX2FkZHIgXFx1MDAyNlxcdTAwMjYgIShyZGV2LVxcdTAwM2V3aXBoeS5mbGFncyBcXHUwMDI2IFdJUEhZX0ZMQUdfSUJTU19SU04pKVxcbitcXHRpZiAoIWNmZzgwMjExX3ZhbGlkX2tleV9pZHgod2Rldiwga2V5X2lkeCwgcGFpcndpc2UsIG1hY19hZGRyKSlcXG4gXFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuIFxcbiBcXHRtc2cgPSBubG1zZ19uZXcoTkxNU0dfREVGQVVMVF9TSVpFLCBHRlBfS0VSTkVMKTtcXG5AQCAtNTY2Myw4ICs1NjYzLDkgQEAgc3RhdGljIGludCBubDgwMjExX2RlbF9rZXkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4gXFx0ICAgIGtleS50eXBlICE9IE5MODAyMTFfS0VZVFlQRV9HUk9VUClcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbi1cXHRpZiAoIWNmZzgwMjExX3ZhbGlkX2tleV9pZHgocmRldiwga2V5LmlkeCxcXG4tXFx0XFx0XFx0XFx0ICAgIGtleS50eXBlID09IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRSkpXFxuK1xcdGlmICghY2ZnODAyMTFfdmFsaWRfa2V5X2lkeCh3ZGV2LCBrZXkuaWR4LFxcbitcXHRcXHRcXHRcXHQgICAga2V5LnR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFLFxcbitcXHRcXHRcXHRcXHQgICAgbWFjX2FkZHIpKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuIFxcdGlmICghcmRldi1cXHUwMDNlb3BzLVxcdTAwM2VkZWxfa2V5KVxcbkBAIC01NjcyLDEwICs1NjczLDYgQEAgc3RhdGljIGludCBubDgwMjExX2RlbF9rZXkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4gXFxuIFxcdGVyciA9IG5sODAyMTFfa2V5X2FsbG93ZWQod2Rldik7XFxuIFxcbi1cXHRpZiAoa2V5LnR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX0dST1VQIFxcdTAwMjZcXHUwMDI2IG1hY19hZGRyIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICAhKHJkZXYtXFx1MDAzZXdpcGh5LmZsYWdzIFxcdTAwMjYgV0lQSFlfRkxBR19JQlNTX1JTTikpXFxuLVxcdFxcdGVyciA9IC1FTk9FTlQ7XFxuLVxcbiBcXHRpZiAoIWVycilcXG4gXFx0XFx0ZXJyID0gbmw4MDIxMV92YWxpZGF0ZV9rZXlfbGlua19pZChpbmZvLCB3ZGV2LCBsaW5rX2lkLFxcbiBcXHRcXHRcXHRcXHRrZXkudHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0UpO1xcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvdXRpbC5jIGIvbmV0L3dpcmVsZXNzL3V0aWwuY1xcbmluZGV4IDI0NTI3YmYzMjFiMmExLi4zZTU4NGQwY2EzZTI2NiAxMDA2NDRcXG4tLS0gYS9uZXQvd2lyZWxlc3MvdXRpbC5jXFxuKysrIGIvbmV0L3dpcmVsZXNzL3V0aWwuY1xcbkBAIC0yNDEsMTAgKzI0MSw4IEBAIGJvb2wgY2ZnODAyMTFfc3VwcG9ydGVkX2NpcGhlcl9zdWl0ZShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCB1MzIgY2lwaGVyKVxcbiBcXHRyZXR1cm4gZmFsc2U7XFxuIH1cXG4gXFxuLXN0YXRpYyBib29sXFxuLWNmZzgwMjExX2lndGtfY2lwaGVyX3N1cHBvcnRlZChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYpXFxuK3N0YXRpYyBib29sIGNmZzgwMjExX2lndGtfY2lwaGVyX3N1cHBvcnRlZChzdHJ1Y3Qgd2lwaHkgKndpcGh5KVxcbiB7XFxuLVxcdHN0cnVjdCB3aXBoeSAqd2lwaHkgPSBcXHUwMDI2cmRldi1cXHUwMDNld2lwaHk7XFxuIFxcdGludCBpO1xcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHdpcGh5LVxcdTAwM2VuX2NpcGhlcl9zdWl0ZXM7IGkrKykge1xcbkBAIC0yNjAsMjcgKzI1OCw4NiBAQCBjZmc4MDIxMV9pZ3RrX2NpcGhlcl9zdXBwb3J0ZWQoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2KVxcbiBcXHRyZXR1cm4gZmFsc2U7XFxuIH1cXG4gXFxuLWJvb2wgY2ZnODAyMTFfdmFsaWRfa2V5X2lkeChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxuLVxcdFxcdFxcdCAgICBpbnQga2V5X2lkeCwgYm9vbCBwYWlyd2lzZSlcXG4rYm9vbCBjZmc4MDIxMV92YWxpZF9rZXlfaWR4KHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxuK1xcdFxcdFxcdCAgICBpbnQga2V5X2lkeCwgYm9vbCBwYWlyd2lzZSxcXG4rXFx0XFx0XFx0ICAgIGNvbnN0IHU4ICptYWNfYWRkcilcXG4ge1xcbi1cXHRpbnQgbWF4X2tleV9pZHg7XFxuLVxcbi1cXHRpZiAocGFpcndpc2UpXFxuLVxcdFxcdG1heF9rZXlfaWR4ID0gMztcXG4tXFx0ZWxzZSBpZiAod2lwaHlfZXh0X2ZlYXR1cmVfaXNzZXQoXFx1MDAyNnJkZXYtXFx1MDAzZXdpcGh5LFxcbi1cXHRcXHRcXHRcXHRcXHQgTkw4MDIxMV9FWFRfRkVBVFVSRV9CRUFDT05fUFJPVEVDVElPTikgfHxcXG4tXFx0XFx0IHdpcGh5X2V4dF9mZWF0dXJlX2lzc2V0KFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeSxcXG4tXFx0XFx0XFx0XFx0XFx0IE5MODAyMTFfRVhUX0ZFQVRVUkVfQkVBQ09OX1BST1RFQ1RJT05fQ0xJRU5UKSlcXG4tXFx0XFx0bWF4X2tleV9pZHggPSA3O1xcbi1cXHRlbHNlIGlmIChjZmc4MDIxMV9pZ3RrX2NpcGhlcl9zdXBwb3J0ZWQocmRldikpXFxuLVxcdFxcdG1heF9rZXlfaWR4ID0gNTtcXG4tXFx0ZWxzZVxcbi1cXHRcXHRtYXhfa2V5X2lkeCA9IDM7XFxuK1xcdGlmIChXQVJOX09OKCF3ZGV2KSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4tXFx0aWYgKGtleV9pZHggXFx1MDAzYyAwIHx8IGtleV9pZHggXFx1MDAzZSBtYXhfa2V5X2lkeClcXG4rXFx0aWYgKGtleV9pZHggXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbi1cXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0LypcXG4rXFx0ICogQ2FuJ3QgZGlmZmVyZW50aWF0ZSBjaXBoZXJzIGhlcmUgc28gYWxsb3cgMC4uMy5cXG4rXFx0ICogUGFpcndpc2Uga2V5cyBtdXN0IGJlIGZvciBhIHN0YXRpb24gKE1BQyBhZGRyZXNzIGdpdmVuKS5cXG4rXFx0ICovXFxuK1xcdGlmIChwYWlyd2lzZSkge1xcbitcXHRcXHRpZiAoIW1hY19hZGRyKVxcbitcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRcXHRyZXR1cm4ga2V5X2lkeCBcXHUwMDNjIDQ7XFxuK1xcdH1cXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEZvciBncm91cCBrZXlzLCBtYWNfYWRkcj09TlVMTCBtZWFucyBzZXR0aW5nIGEgZ3JvdXAga2V5XFxuK1xcdCAqIGZvciBUWCwgd2hpY2ggaXMgb25seSBzdXBwb3J0ZWQgb24gc29tZSBpbnRlcmZhY2UgdHlwZXMsXFxuK1xcdCAqIGV4Y2VwdCBmb3IgU1RBVElPTi9QMlBfQ0xJRU5ULCB3aGVyZSBpdCdzIHNldHRpbmcgdGhlIFJYXFxuK1xcdCAqIGtleSB3aXRoIHRoZSBjdXJyZW50IEFQIChmb3IgbGVnYWN5IHJlYXNvbnMuKVxcbitcXHQgKlxcbitcXHQgKiBBcGFydCBmcm9tIHRoYXQgZXhjZXB0aW9uLCBhIG5vbi1OVUxMIG1hY19hZGRyIG1lYW5zIFJYXFxuK1xcdCAqIGtleSBiZWluZyBzZXQuXFxuK1xcdCAqL1xcbitcXG4rXFx0c3dpdGNoICh3ZGV2LVxcdTAwM2VpZnR5cGUpIHtcXG4rXFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzpcXG4rXFx0XFx0aWYgKCEod2Rldi1cXHUwMDNld2lwaHktXFx1MDAzZWZsYWdzIFxcdTAwMjYgV0lQSFlfRkxBR19JQlNTX1JTTikpXFxuK1xcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0XFx0ZmFsbHRocm91Z2g7XFxuK1xcdGNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDpcXG4rXFx0XFx0Lyogbm8gc3VwcG9ydCBmb3IgSUdUSy9CSUdUSyAoeWV0PykgKi9cXG4rXFx0XFx0cmV0dXJuIGtleV9pZHggXFx1MDAzYyA0O1xcbitcXHRjYXNlIE5MODAyMTFfSUZUWVBFX05BTl9EQVRBOlxcbitcXHRcXHQvKiB0aGVzZSBhbHdheXMgbmVlZCB0byBzdXBwb3J0IHBlci1TVEEgR1RLICovXFxuK1xcdFxcdHJldHVybiBrZXlfaWR4IFxcdTAwM2MgNDtcXG4rXFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9OQU46XFxuK1xcdFxcdC8qIG5vIGRhdGEgKi9cXG4rXFx0XFx0aWYgKGtleV9pZHggXFx1MDAzYyA0KVxcbitcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdFxcdC8qIE5BTiByZXVzZWQgdGhpcyBmbGFnICovXFxuK1xcdFxcdGlmICh3aXBoeV9leHRfZmVhdHVyZV9pc3NldCh3ZGV2LVxcdTAwM2V3aXBoeSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIE5MODAyMTFfRVhUX0ZFQVRVUkVfQkVBQ09OX1BST1RFQ1RJT04pKVxcbitcXHRcXHRcXHRyZXR1cm4ga2V5X2lkeCBcXHUwMDNjPSA3O1xcbitcXHRcXHRyZXR1cm4ga2V5X2lkeCBcXHUwMDNjPSA1O1xcbitcXHRjYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046XFxuK1xcdGNhc2UgTkw4MDIxMV9JRlRZUEVfUDJQX0NMSUVOVDpcXG4rXFx0XFx0Lyogc2VlIG5vdGUgYWJvdXQgZXhjZXB0aW9uIGFib3ZlICovXFxuK1xcdFxcdGlmIChtYWNfYWRkcilcXG4rXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRcXHQvKiBCSUdUSyBzdXBwb3J0IGltcGxpZXMgSUdUSyBzdXBwb3J0ICovXFxuK1xcdFxcdGlmICh3aXBoeV9leHRfZmVhdHVyZV9pc3NldCh3ZGV2LVxcdTAwM2V3aXBoeSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIE5MODAyMTFfRVhUX0ZFQVRVUkVfQkVBQ09OX1BST1RFQ1RJT05fQ0xJRU5UKSlcXG4rXFx0XFx0XFx0cmV0dXJuIGtleV9pZHggXFx1MDAzYz0gNztcXG4rXFx0XFx0ZmFsbHRocm91Z2g7XFxuK1xcdGNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6XFxuK1xcdGNhc2UgTkw4MDIxMV9JRlRZUEVfUDJQX0dPOlxcbitcXHRcXHQvKiBubyBSWCB3aXRoIFtCXUlHVEsgKi9cXG4rXFx0XFx0aWYgKG1hY19hZGRyKVxcbitcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdFxcdGlmICh3aXBoeV9leHRfZmVhdHVyZV9pc3NldCh3ZGV2LVxcdTAwM2V3aXBoeSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIE5MODAyMTFfRVhUX0ZFQVRVUkVfQkVBQ09OX1BST1RFQ1RJT04pKVxcbitcXHRcXHRcXHRyZXR1cm4ga2V5X2lkeCBcXHUwMDNjPSA3O1xcbitcXHRcXHRmYWxsdGhyb3VnaDtcXG4rXFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOOlxcbitcXHRcXHQvKiBubyBSWCB3aXRoIEdUSyAqL1xcbitcXHRcXHRpZiAobWFjX2FkZHIpXFxuK1xcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0XFx0aWYgKGNmZzgwMjExX2lndGtfY2lwaGVyX3N1cHBvcnRlZCh3ZGV2LVxcdTAwM2V3aXBoeSkpXFxuK1xcdFxcdFxcdHJldHVybiBrZXlfaWR4IFxcdTAwM2M9IDU7XFxuK1xcdFxcdHJldHVybiBrZXlfaWR4IFxcdTAwM2M9IDM7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0fVxcbiB9XFxuIFxcbiBpbnQgY2ZnODAyMTFfdmFsaWRhdGVfa2V5X3NldHRpbmdzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG5AQCAtMjg4LDEzICszNDUsNyBAQCBpbnQgY2ZnODAyMTFfdmFsaWRhdGVfa2V5X3NldHRpbmdzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG4gXFx0XFx0XFx0XFx0ICAgc3RydWN0IGtleV9wYXJhbXMgKnBhcmFtcywgaW50IGtleV9pZHgsXFxuIFxcdFxcdFxcdFxcdCAgIGJvb2wgcGFpcndpc2UsIGNvbnN0IHU4ICptYWNfYWRkcilcXG4ge1xcbi1cXHRpZiAoIWNmZzgwMjExX3ZhbGlkX2tleV9pZHgocmRldiwga2V5X2lkeCwgcGFpcndpc2UpKVxcbi1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tXFxuLVxcdGlmICghcGFpcndpc2UgXFx1MDAyNlxcdTAwMjYgbWFjX2FkZHIgXFx1MDAyNlxcdTAwMjYgIShyZGV2LVxcdTAwM2V3aXBoeS5mbGFncyBcXHUwMDI2IFdJUEhZX0ZMQUdfSUJTU19SU04pKVxcbi1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tXFxuLVxcdGlmIChwYWlyd2lzZSBcXHUwMDI2XFx1MDAyNiAhbWFjX2FkZHIpXFxuK1xcdGlmICghY2ZnODAyMTFfdmFsaWRfa2V5X2lkeCh3ZGV2LCBrZXlfaWR4LCBwYWlyd2lzZSwgbWFjX2FkZHIpKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuIFxcdHN3aXRjaCAocGFyYW1zLVxcdTAwM2VjaXBoZXIpIHtcXG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3dleHQtY29tcGF0LmMgYi9uZXQvd2lyZWxlc3Mvd2V4dC1jb21wYXQuY1xcbmluZGV4IDVkYmYzZWY0YjI1N2UyLi5kNDViYzA4YzBkZTQ5NyAxMDA2NDRcXG4tLS0gYS9uZXQvd2lyZWxlc3Mvd2V4dC1jb21wYXQuY1xcbisrKyBiL25ldC93aXJlbGVzcy93ZXh0LWNvbXBhdC5jXFxuQEAgLTQ1NCw4ICs0NTQsNyBAQCBzdGF0aWMgaW50IGNmZzgwMjExX3NldF9lbmNyeXB0aW9uKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG4gXFx0XFx0XFx0XFx0cmVqb2luID0gdHJ1ZTtcXG4gXFx0XFx0XFx0fVxcbiBcXG4tXFx0XFx0XFx0aWYgKCFwYWlyd2lzZSBcXHUwMDI2XFx1MDAyNiBhZGRyIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdFxcdCAgICAhKHJkZXYtXFx1MDAzZXdpcGh5LmZsYWdzIFxcdTAwMjYgV0lQSFlfRkxBR19JQlNTX1JTTikpXFxuK1xcdFxcdFxcdGlmICghY2ZnODAyMTFfdmFsaWRfa2V5X2lkeCh3ZGV2LCBpZHgsIHBhaXJ3aXNlLCBhZGRyKSlcXG4gXFx0XFx0XFx0XFx0ZXJyID0gLUVOT0VOVDtcXG4gXFx0XFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRcXHRlcnIgPSByZGV2X2RlbF9rZXkocmRldiwgd2RldiwgLTEsIGlkeCwgcGFpcndpc2UsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDAwOjQ3OjQwLjM3MjE4NDIyNloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzAwMDYzNjM1MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0ZHODAyMTFcIixcbiAgICBcIkNGRzgwMjExX1dFWFRcIixcbiAgICBcIk1BQzgwMjExX0hXU0lNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmw4MDIxMV9nZXRfa2V5XCIsXG4gICAgXCJubDgwMjExX2RlbF9rZXlcIixcbiAgICBcImNmZzgwMjExX3ZhbGlkX2tleV9pZHhcIixcbiAgICBcImNmZzgwMjExX3ZhbGlkYXRlX2tleV9zZXR0aW5nc1wiLFxuICAgIFwiY2ZnODAyMTFfc2V0X2VuY3J5cHRpb25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9naWMgZm9yIHZhbGlkYXRpbmcga2V5IGluZGljZXMgaW4gdGhlIGNmZzgwMjExIHN1YnN5c3RlbSwgYWRkaW5nIGludGVyZmFjZSB0eXBlLXNwZWNpZmljIGNoZWNrcyBhbmQgY2hhbmdpbmcgdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZSB0byB0YWtlIGBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2YC4gVGhpcyBhZmZlY3RzIG5ldGxpbmsgKG5sODAyMTEpIGFuZCB3aXJlbGVzcyBleHRlbnNpb25zICh3ZXh0KSBwYXRocyBmb3IgZ2V0dGluZywgZGVsZXRpbmcsIGFuZCBzZXR0aW5nIGtleXMuIFRoZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlLCBtYWtpbmcgdGhlbSBzdWl0YWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmNWJkMWQ2Yjk5ZmMzMGMwN2I5NDBkMDQ1ZmQ3NDMzM2YxNzdiZWQ2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMTYgMDA6NDc6MzcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvY29yZS5oIGIvbmV0L3dpcmVsZXNzL2NvcmUuaFxuaW5kZXggZGY0N2VkNjIwOGE1MGQuLjM5OTAzNzUxNDk0M2Q5IDEwMDY0NFxuLS0tIGEvbmV0L3dpcmVsZXNzL2NvcmUuaFxuKysrIGIvbmV0L3dpcmVsZXNzL2NvcmUuaFxuQEAgLTQ0Myw4ICs0NDMsOSBAQCB2b2lkIGNmZzgwMjExX3NtZV9hYmFuZG9uX2Fzc29jKHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYpO1xuIFxuIC8qIGludGVybmFsIGhlbHBlcnMgKi9cbiBib29sIGNmZzgwMjExX3N1cHBvcnRlZF9jaXBoZXJfc3VpdGUoc3RydWN0IHdpcGh5ICp3aXBoeSwgdTMyIGNpcGhlcik7XG4tYm9vbCBjZmc4MDIxMV92YWxpZF9rZXlfaWR4KHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbi1cdFx0XHQgICAgaW50IGtleV9pZHgsIGJvb2wgcGFpcndpc2UpO1xuK2Jvb2wgY2ZnODAyMTFfdmFsaWRfa2V5X2lkeChzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuK1x0XHRcdCAgICBpbnQga2V5X2lkeCwgYm9vbCBwYWlyd2lzZSxcbitcdFx0XHQgICAgY29uc3QgdTggKm1hY19hZGRyKTtcbiBpbnQgY2ZnODAyMTFfdmFsaWRhdGVfa2V5X3NldHRpbmdzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbiBcdFx0XHRcdCAgIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4gXHRcdFx0XHQgICBzdHJ1Y3Qga2V5X3BhcmFtcyAqcGFyYW1zLCBpbnQga2V5X2lkeCxcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jIGIvbmV0L3dpcmVsZXNzL25sODAyMTEuY1xuaW5kZXggMjQyMDcxYWQxMGQ2YzkuLjk5YTFjMDE3NGJkYmYyIDEwMDY0NFxuLS0tIGEvbmV0L3dpcmVsZXNzL25sODAyMTEuY1xuKysrIGIvbmV0L3dpcmVsZXNzL25sODAyMTEuY1xuQEAgLTU0MDksNyArNTQwOSw3IEBAIHN0YXRpYyBpbnQgbmw4MDIxMV9nZXRfa2V5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRpZiAoIXJkZXYtXHUwMDNlb3BzLVx1MDAzZWdldF9rZXkpXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcbi1cdGlmICghcGFpcndpc2UgXHUwMDI2XHUwMDI2IG1hY19hZGRyIFx1MDAyNlx1MDAyNiAhKHJkZXYtXHUwMDNld2lwaHkuZmxhZ3MgXHUwMDI2IFdJUEhZX0ZMQUdfSUJTU19SU04pKVxuK1x0aWYgKCFjZmc4MDIxMV92YWxpZF9rZXlfaWR4KHdkZXYsIGtleV9pZHgsIHBhaXJ3aXNlLCBtYWNfYWRkcikpXG4gXHRcdHJldHVybiAtRU5PRU5UO1xuIFxuIFx0bXNnID0gbmxtc2dfbmV3KE5MTVNHX0RFRkFVTFRfU0laRSwgR0ZQX0tFUk5FTCk7XG5AQCAtNTY2Myw4ICs1NjYzLDkgQEAgc3RhdGljIGludCBubDgwMjExX2RlbF9rZXkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdCAgICBrZXkudHlwZSAhPSBOTDgwMjExX0tFWVRZUEVfR1JPVVApXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0aWYgKCFjZmc4MDIxMV92YWxpZF9rZXlfaWR4KHJkZXYsIGtleS5pZHgsXG4tXHRcdFx0XHQgICAga2V5LnR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFKSlcbitcdGlmICghY2ZnODAyMTFfdmFsaWRfa2V5X2lkeCh3ZGV2LCBrZXkuaWR4LFxuK1x0XHRcdFx0ICAgIGtleS50eXBlID09IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRSxcbitcdFx0XHRcdCAgICBtYWNfYWRkcikpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0aWYgKCFyZGV2LVx1MDAzZW9wcy1cdTAwM2VkZWxfa2V5KVxuQEAgLTU2NzIsMTAgKzU2NzMsNiBAQCBzdGF0aWMgaW50IG5sODAyMTFfZGVsX2tleShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFxuIFx0ZXJyID0gbmw4MDIxMV9rZXlfYWxsb3dlZCh3ZGV2KTtcbiBcbi1cdGlmIChrZXkudHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfR1JPVVAgXHUwMDI2XHUwMDI2IG1hY19hZGRyIFx1MDAyNlx1MDAyNlxuLVx0ICAgICEocmRldi1cdTAwM2V3aXBoeS5mbGFncyBcdTAwMjYgV0lQSFlfRkxBR19JQlNTX1JTTikpXG4tXHRcdGVyciA9IC1FTk9FTlQ7XG4tXG4gXHRpZiAoIWVycilcbiBcdFx0ZXJyID0gbmw4MDIxMV92YWxpZGF0ZV9rZXlfbGlua19pZChpbmZvLCB3ZGV2LCBsaW5rX2lkLFxuIFx0XHRcdFx0a2V5LnR5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFKTtcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvdXRpbC5jIGIvbmV0L3dpcmVsZXNzL3V0aWwuY1xuaW5kZXggMjQ1MjdiZjMyMWIyYTEuLjNlNTg0ZDBjYTNlMjY2IDEwMDY0NFxuLS0tIGEvbmV0L3dpcmVsZXNzL3V0aWwuY1xuKysrIGIvbmV0L3dpcmVsZXNzL3V0aWwuY1xuQEAgLTI0MSwxMCArMjQxLDggQEAgYm9vbCBjZmc4MDIxMV9zdXBwb3J0ZWRfY2lwaGVyX3N1aXRlKHN0cnVjdCB3aXBoeSAqd2lwaHksIHUzMiBjaXBoZXIpXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuLXN0YXRpYyBib29sXG4tY2ZnODAyMTFfaWd0a19jaXBoZXJfc3VwcG9ydGVkKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldilcbitzdGF0aWMgYm9vbCBjZmc4MDIxMV9pZ3RrX2NpcGhlcl9zdXBwb3J0ZWQoc3RydWN0IHdpcGh5ICp3aXBoeSlcbiB7XG4tXHRzdHJ1Y3Qgd2lwaHkgKndpcGh5ID0gXHUwMDI2cmRldi1cdTAwM2V3aXBoeTtcbiBcdGludCBpO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd2lwaHktXHUwMDNlbl9jaXBoZXJfc3VpdGVzOyBpKyspIHtcbkBAIC0yNjAsMjcgKzI1OCw4NiBAQCBjZmc4MDIxMV9pZ3RrX2NpcGhlcl9zdXBwb3J0ZWQoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2KVxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbi1ib29sIGNmZzgwMjExX3ZhbGlkX2tleV9pZHgoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuLVx0XHRcdCAgICBpbnQga2V5X2lkeCwgYm9vbCBwYWlyd2lzZSlcbitib29sIGNmZzgwMjExX3ZhbGlkX2tleV9pZHgoc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcbitcdFx0XHQgICAgaW50IGtleV9pZHgsIGJvb2wgcGFpcndpc2UsXG4rXHRcdFx0ICAgIGNvbnN0IHU4ICptYWNfYWRkcilcbiB7XG4tXHRpbnQgbWF4X2tleV9pZHg7XG4tXG4tXHRpZiAocGFpcndpc2UpXG4tXHRcdG1heF9rZXlfaWR4ID0gMztcbi1cdGVsc2UgaWYgKHdpcGh5X2V4dF9mZWF0dXJlX2lzc2V0KFx1MDAyNnJkZXYtXHUwMDNld2lwaHksXG4tXHRcdFx0XHRcdCBOTDgwMjExX0VYVF9GRUFUVVJFX0JFQUNPTl9QUk9URUNUSU9OKSB8fFxuLVx0XHQgd2lwaHlfZXh0X2ZlYXR1cmVfaXNzZXQoXHUwMDI2cmRldi1cdTAwM2V3aXBoeSxcbi1cdFx0XHRcdFx0IE5MODAyMTFfRVhUX0ZFQVRVUkVfQkVBQ09OX1BST1RFQ1RJT05fQ0xJRU5UKSlcbi1cdFx0bWF4X2tleV9pZHggPSA3O1xuLVx0ZWxzZSBpZiAoY2ZnODAyMTFfaWd0a19jaXBoZXJfc3VwcG9ydGVkKHJkZXYpKVxuLVx0XHRtYXhfa2V5X2lkeCA9IDU7XG4tXHRlbHNlXG4tXHRcdG1heF9rZXlfaWR4ID0gMztcbitcdGlmIChXQVJOX09OKCF3ZGV2KSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0aWYgKGtleV9pZHggXHUwMDNjIDAgfHwga2V5X2lkeCBcdTAwM2UgbWF4X2tleV9pZHgpXG4rXHRpZiAoa2V5X2lkeCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0cmV0dXJuIHRydWU7XG4rXHQvKlxuK1x0ICogQ2FuJ3QgZGlmZmVyZW50aWF0ZSBjaXBoZXJzIGhlcmUgc28gYWxsb3cgMC4uMy5cbitcdCAqIFBhaXJ3aXNlIGtleXMgbXVzdCBiZSBmb3IgYSBzdGF0aW9uIChNQUMgYWRkcmVzcyBnaXZlbikuXG4rXHQgKi9cbitcdGlmIChwYWlyd2lzZSkge1xuK1x0XHRpZiAoIW1hY19hZGRyKVxuK1x0XHRcdHJldHVybiBmYWxzZTtcbitcbitcdFx0cmV0dXJuIGtleV9pZHggXHUwMDNjIDQ7XG4rXHR9XG4rXG4rXHQvKlxuK1x0ICogRm9yIGdyb3VwIGtleXMsIG1hY19hZGRyPT1OVUxMIG1lYW5zIHNldHRpbmcgYSBncm91cCBrZXlcbitcdCAqIGZvciBUWCwgd2hpY2ggaXMgb25seSBzdXBwb3J0ZWQgb24gc29tZSBpbnRlcmZhY2UgdHlwZXMsXG4rXHQgKiBleGNlcHQgZm9yIFNUQVRJT04vUDJQX0NMSUVOVCwgd2hlcmUgaXQncyBzZXR0aW5nIHRoZSBSWFxuK1x0ICoga2V5IHdpdGggdGhlIGN1cnJlbnQgQVAgKGZvciBsZWdhY3kgcmVhc29ucy4pXG4rXHQgKlxuK1x0ICogQXBhcnQgZnJvbSB0aGF0IGV4Y2VwdGlvbiwgYSBub24tTlVMTCBtYWNfYWRkciBtZWFucyBSWFxuK1x0ICoga2V5IGJlaW5nIHNldC5cbitcdCAqL1xuK1xuK1x0c3dpdGNoICh3ZGV2LVx1MDAzZWlmdHlwZSkge1xuK1x0Y2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzpcbitcdFx0aWYgKCEod2Rldi1cdTAwM2V3aXBoeS1cdTAwM2VmbGFncyBcdTAwMjYgV0lQSFlfRkxBR19JQlNTX1JTTikpXG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1x0XHRmYWxsdGhyb3VnaDtcbitcdGNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDpcbitcdFx0Lyogbm8gc3VwcG9ydCBmb3IgSUdUSy9CSUdUSyAoeWV0PykgKi9cbitcdFx0cmV0dXJuIGtleV9pZHggXHUwMDNjIDQ7XG4rXHRjYXNlIE5MODAyMTFfSUZUWVBFX05BTl9EQVRBOlxuK1x0XHQvKiB0aGVzZSBhbHdheXMgbmVlZCB0byBzdXBwb3J0IHBlci1TVEEgR1RLICovXG4rXHRcdHJldHVybiBrZXlfaWR4IFx1MDAzYyA0O1xuK1x0Y2FzZSBOTDgwMjExX0lGVFlQRV9OQU46XG4rXHRcdC8qIG5vIGRhdGEgKi9cbitcdFx0aWYgKGtleV9pZHggXHUwMDNjIDQpXG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1x0XHQvKiBOQU4gcmV1c2VkIHRoaXMgZmxhZyAqL1xuK1x0XHRpZiAod2lwaHlfZXh0X2ZlYXR1cmVfaXNzZXQod2Rldi1cdTAwM2V3aXBoeSxcbitcdFx0XHRcdFx0ICAgIE5MODAyMTFfRVhUX0ZFQVRVUkVfQkVBQ09OX1BST1RFQ1RJT04pKVxuK1x0XHRcdHJldHVybiBrZXlfaWR4IFx1MDAzYz0gNztcbitcdFx0cmV0dXJuIGtleV9pZHggXHUwMDNjPSA1O1xuK1x0Y2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOlxuK1x0Y2FzZSBOTDgwMjExX0lGVFlQRV9QMlBfQ0xJRU5UOlxuK1x0XHQvKiBzZWUgbm90ZSBhYm91dCBleGNlcHRpb24gYWJvdmUgKi9cbitcdFx0aWYgKG1hY19hZGRyKVxuK1x0XHRcdHJldHVybiBmYWxzZTtcbitcdFx0LyogQklHVEsgc3VwcG9ydCBpbXBsaWVzIElHVEsgc3VwcG9ydCAqL1xuK1x0XHRpZiAod2lwaHlfZXh0X2ZlYXR1cmVfaXNzZXQod2Rldi1cdTAwM2V3aXBoeSxcbitcdFx0XHRcdFx0ICAgIE5MODAyMTFfRVhUX0ZFQVRVUkVfQkVBQ09OX1BST1RFQ1RJT05fQ0xJRU5UKSlcbitcdFx0XHRyZXR1cm4ga2V5X2lkeCBcdTAwM2M9IDc7XG4rXHRcdGZhbGx0aHJvdWdoO1xuK1x0Y2FzZSBOTDgwMjExX0lGVFlQRV9BUDpcbitcdGNhc2UgTkw4MDIxMV9JRlRZUEVfUDJQX0dPOlxuK1x0XHQvKiBubyBSWCB3aXRoIFtCXUlHVEsgKi9cbitcdFx0aWYgKG1hY19hZGRyKVxuK1x0XHRcdHJldHVybiBmYWxzZTtcbitcdFx0aWYgKHdpcGh5X2V4dF9mZWF0dXJlX2lzc2V0KHdkZXYtXHUwMDNld2lwaHksXG4rXHRcdFx0XHRcdCAgICBOTDgwMjExX0VYVF9GRUFUVVJFX0JFQUNPTl9QUk9URUNUSU9OKSlcbitcdFx0XHRyZXR1cm4ga2V5X2lkeCBcdTAwM2M9IDc7XG4rXHRcdGZhbGx0aHJvdWdoO1xuK1x0Y2FzZSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOOlxuK1x0XHQvKiBubyBSWCB3aXRoIEdUSyAqL1xuK1x0XHRpZiAobWFjX2FkZHIpXG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1x0XHRpZiAoY2ZnODAyMTFfaWd0a19jaXBoZXJfc3VwcG9ydGVkKHdkZXYtXHUwMDNld2lwaHkpKVxuK1x0XHRcdHJldHVybiBrZXlfaWR4IFx1MDAzYz0gNTtcbitcdFx0cmV0dXJuIGtleV9pZHggXHUwMDNjPSAzO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0fVxuIH1cbiBcbiBpbnQgY2ZnODAyMTFfdmFsaWRhdGVfa2V5X3NldHRpbmdzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbkBAIC0yODgsMTMgKzM0NSw3IEBAIGludCBjZmc4MDIxMV92YWxpZGF0ZV9rZXlfc2V0dGluZ3Moc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuIFx0XHRcdFx0ICAgc3RydWN0IGtleV9wYXJhbXMgKnBhcmFtcywgaW50IGtleV9pZHgsXG4gXHRcdFx0XHQgICBib29sIHBhaXJ3aXNlLCBjb25zdCB1OCAqbWFjX2FkZHIpXG4ge1xuLVx0aWYgKCFjZmc4MDIxMV92YWxpZF9rZXlfaWR4KHJkZXYsIGtleV9pZHgsIHBhaXJ3aXNlKSlcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tXG4tXHRpZiAoIXBhaXJ3aXNlIFx1MDAyNlx1MDAyNiBtYWNfYWRkciBcdTAwMjZcdTAwMjYgIShyZGV2LVx1MDAzZXdpcGh5LmZsYWdzIFx1MDAyNiBXSVBIWV9GTEFHX0lCU1NfUlNOKSlcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tXG4tXHRpZiAocGFpcndpc2UgXHUwMDI2XHUwMDI2ICFtYWNfYWRkcilcbitcdGlmICghY2ZnODAyMTFfdmFsaWRfa2V5X2lkeCh3ZGV2LCBrZXlfaWR4LCBwYWlyd2lzZSwgbWFjX2FkZHIpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdHN3aXRjaCAocGFyYW1zLVx1MDAzZWNpcGhlcikge1xuZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy93ZXh0LWNvbXBhdC5jIGIvbmV0L3dpcmVsZXNzL3dleHQtY29tcGF0LmNcbmluZGV4IDVkYmYzZWY0YjI1N2UyLi5kNDViYzA4YzBkZTQ5NyAxMDA2NDRcbi0tLSBhL25ldC93aXJlbGVzcy93ZXh0LWNvbXBhdC5jXG4rKysgYi9uZXQvd2lyZWxlc3Mvd2V4dC1jb21wYXQuY1xuQEAgLTQ1NCw4ICs0NTQsNyBAQCBzdGF0aWMgaW50IGNmZzgwMjExX3NldF9lbmNyeXB0aW9uKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbiBcdFx0XHRcdHJlam9pbiA9IHRydWU7XG4gXHRcdFx0fVxuIFxuLVx0XHRcdGlmICghcGFpcndpc2UgXHUwMDI2XHUwMDI2IGFkZHIgXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICAgICEocmRldi1cdTAwM2V3aXBoeS5mbGFncyBcdTAwMjYgV0lQSFlfRkxBR19JQlNTX1JTTikpXG4rXHRcdFx0aWYgKCFjZmc4MDIxMV92YWxpZF9rZXlfaWR4KHdkZXYsIGlkeCwgcGFpcndpc2UsIGFkZHIpKVxuIFx0XHRcdFx0ZXJyID0gLUVOT0VOVDtcbiBcdFx0XHRlbHNlXG4gXHRcdFx0XHRlcnIgPSByZGV2X2RlbF9rZXkocmRldiwgd2RldiwgLTEsIGlkeCwgcGFpcndpc2UsXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMDo0Nzo0MC4zNzIxOTc2OTdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTg2MzExNjc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgUGxhbiBmb3IgTUFDODAyMTEgS2V5IE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCBhIHBhdGNoIGhlcmUgdGhhdCdzIHBva2luZyBhcm91bmQgaW4gYG5ldC93aXJlbGVzc2AuIExvb2tzIGxpa2UgaXQncyBtYWtpbmcgc29tZSBzaWduaWZpY2FudCBjaGFuZ2VzIHRvIHRoZSBrZXkgbWFuYWdlbWVudCBjb2RlLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgY2ZnODAyMTFgIGFuZCBgbWFjODAyMTFgIHN1YnN5c3RlbXMuIFRoaXMgbW9kaWZpY2F0aW9uIG9mIGBjZmc4MDIxMV92YWxpZF9rZXlfaWR4YCBpcyB3aGF0IGNhdWdodCBteSBleWUuICBJdCdzIG5vdyB0YWtpbmcgYSBgd2lyZWxlc3NfZGV2YCBhbmQgTUFDIGFkZHJlc3MsIGluc3RlYWQgb2YgdGhlIHJlZ2lzdGVyZWQgZGV2aWNlLCB3aGljaCBmZWVscyBsaWtlIGEgZnVuZGFtZW50YWwgc2hpZnQgYW5kIGRlZmluaXRlbHkgd2FycmFudHMgYSBjbG9zZXIgbG9vay4gVGhlIGFkZGVkIGNoZWNrcyBiYXNlZCBvbiBgd2Rldi1cdTAwM2VpZnR5cGVgIGFyZSBhbHNvIGludGVyZXN0aW5nLiBUaGlzIGNvZGUgaXMgY2xlYXJseSByZWFjaGFibGUgdGhyb3VnaCBib3RoIG5ldGxpbmsgKG5sODAyMTEpIGFuZCB0aGUgV0VYVCBjb21wYXRpYmlsaXR5IGxheWVyLCBtYWtpbmcgaXQgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuXG5cbk15IHByaW1hcnkgZ29hbCBub3cgaXMgdG8gaWRlbnRpZnkgdGhlIG1vc3QgY3JpdGljYWwgZnVuY3Rpb25zIHRvIGZvY3VzIHRoZSBmdXp6aW5nIGVmZm9ydHMuICBGcm9tIHdoYXQgSSBjYW4gdGVsbCBmcm9tIHRoZSBkaWZmLCB0aGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyB0aGF0IG5lZWQgdGhlIG1vc3QgYXR0ZW50aW9uOiBgbmw4MDIxMV9nZXRfa2V5YCwgYG5sODAyMTFfZGVsX2tleWAsIGBjZmc4MDIxMV92YWxpZF9rZXlfaWR4YCwgYGNmZzgwMjExX3ZhbGlkYXRlX2tleV9zZXR0aW5nc2AsIGFuZCBgY2ZnODAyMTFfc2V0X2VuY3J5cHRpb25gLiBUaGVzZSBzZWVtIHRvIGJlIHRoZSBjb3JlIGVudHJ5IHBvaW50cywgYW5kIGdpdmVuIHRoZSBjaGFuZ2VzLCB0aGV5J3JlIGxpa2VseSB3aGVyZSB3ZSBjYW4gaW50cm9kdWNlIHNvbWUgaW50ZXJlc3RpbmcgYW5kIHBlcmhhcHMgdW5leHBlY3RlZCBpbnB1dHMuXG5cbkJlZm9yZSBJIGdldCB0b28gZGVlcCBpbnRvIHRoZSBmdXp6aW5nIHN0cmF0ZWd5IGl0c2VsZiwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ3ZlIGdvdCB0aGUgbmVjZXNzYXJ5IGtlcm5lbCBjb25maWd1cmF0aW9ucyBpbiBwbGFjZS4gIEknbSBhc3N1bWluZyBgbmV0L3dpcmVsZXNzYCBpcyBidWlsdCB3aXRoIGBDT05GSUdfQ0ZHODAyMTFgIGFuZCBgQ09ORklHX01BQzgwMjExYCwgYnV0IEknbGwgZG91YmxlLWNoZWNrIHRob3NlIGNvbmZpZ3MuICBDYW4ndCBhZmZvcmQgdG8gd2FzdGUgdGltZSBvbiBmdXp6aW5nIGNvZGUgdGhhdCBpc24ndCBhY3R1YWxseSBjb21waWxlZCBpbiEgIE9uY2UgSSBjb25maXJtIHRoZSBjb25maWdzLCBJIGNhbiBtb3ZlIG9uIHRvIHRoZSBmdXp6aW5nIHNldHVwIGFuZCBpZGVudGlmeWluZyBlZmZlY3RpdmUgdGVzdCBjYXNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDUzNywiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyOSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDAwOjQ3OjQ2LjM1ODUxMjMwNloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTI5NTA0OTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNmZzgwMjExX3ZhbGlkX2tleV9pZHhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3dpcmVsZXNzL2NvcmUuaD00NDU9Ym9vbCBjZmc4MDIxMV9zdXBwb3J0ZWRfY2lwaGVyX3N1aXRlKHN0cnVjdCB3aXBoeSAqd2lwaHksIHUzMiBjaXBoZXIpO1xcbm5ldC93aXJlbGVzcy9jb3JlLmg6NDQ2OmJvb2wgY2ZnODAyMTFfdmFsaWRfa2V5X2lkeChzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxcbm5ldC93aXJlbGVzcy9jb3JlLmgtNDQ3LVxcdFxcdFxcdCAgICBpbnQga2V5X2lkeCwgYm9vbCBwYWlyd2lzZSxcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9NTM2MT1zdGF0aWMgaW50IG5sODAyMTFfZ2V0X2tleShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy01NDExLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6NTQxMjpcXHRpZiAoIWNmZzgwMjExX3ZhbGlkX2tleV9pZHgod2Rldiwga2V5X2lkeCwgcGFpcndpc2UsIG1hY19hZGRyKSlcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTU0MTMtXFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTU2Mzg9c3RhdGljIGludCBubDgwMjExX2RlbF9rZXkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNTY2NS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjU2NjY6XFx0aWYgKCFjZmc4MDIxMV92YWxpZF9rZXlfaWR4KHdkZXYsIGtleS5pZHgsXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy01NjY3LVxcdFxcdFxcdFxcdCAgICBrZXkudHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0UsXFxuLS1cXG5uZXQvd2lyZWxlc3MvdXRpbC5jPTI0ND1zdGF0aWMgYm9vbCBjZmc4MDIxMV9pZ3RrX2NpcGhlcl9zdXBwb3J0ZWQoc3RydWN0IHdpcGh5ICp3aXBoeSlcXG4tLVxcbm5ldC93aXJlbGVzcy91dGlsLmMtMjYwLVxcbm5ldC93aXJlbGVzcy91dGlsLmM6MjYxOmJvb2wgY2ZnODAyMTFfdmFsaWRfa2V5X2lkeChzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxcbm5ldC93aXJlbGVzcy91dGlsLmMtMjYyLVxcdFxcdFxcdCAgICBpbnQga2V5X2lkeCwgYm9vbCBwYWlyd2lzZSxcXG4tLVxcbm5ldC93aXJlbGVzcy91dGlsLmM9MzQzPWludCBjZmc4MDIxMV92YWxpZGF0ZV9rZXlfc2V0dGluZ3Moc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbi0tXFxubmV0L3dpcmVsZXNzL3V0aWwuYy0zNDcte1xcbm5ldC93aXJlbGVzcy91dGlsLmM6MzQ4OlxcdGlmICghY2ZnODAyMTFfdmFsaWRfa2V5X2lkeCh3ZGV2LCBrZXlfaWR4LCBwYWlyd2lzZSwgbWFjX2FkZHIpKVxcbm5ldC93aXJlbGVzcy91dGlsLmMtMzQ5LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxubmV0L3dpcmVsZXNzL3dleHQtY29tcGF0LmM9Mzk4PXN0YXRpYyBpbnQgY2ZnODAyMTFfc2V0X2VuY3J5cHRpb24oc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbi0tXFxubmV0L3dpcmVsZXNzL3dleHQtY29tcGF0LmMtNDU2LVxcbm5ldC93aXJlbGVzcy93ZXh0LWNvbXBhdC5jOjQ1NzpcXHRcXHRcXHRpZiAoIWNmZzgwMjExX3ZhbGlkX2tleV9pZHgod2RldiwgaWR4LCBwYWlyd2lzZSwgYWRkcikpXFxubmV0L3dpcmVsZXNzL3dleHQtY29tcGF0LmMtNDU4LVxcdFxcdFxcdFxcdGVyciA9IC1FTk9FTlQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDAwOjQ3OjUyLjI4ODAyOTAxNloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3ODA2Nzc3NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLZXkgTWFuYWdlbWVudCBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBmdW5jdGlvbnM6IGBubDgwMjExX2dldF9rZXlgLCBgbmw4MDIxMV9kZWxfa2V5YCwgYGNmZzgwMjExX3ZhbGlkX2tleV9pZHhgLCBgY2ZnODAyMTFfdmFsaWRhdGVfa2V5X3NldHRpbmdzYCwgYW5kIGBjZmc4MDIxMV9zZXRfZW5jcnlwdGlvbmAuIFRoZXkncmUgYWxsIG9idmlvdXNseSByZWxhdGVkIHRvIGtleSBtYW5hZ2VtZW50IHdpdGhpbiB0aGUgd2lyZWxlc3MgbmV0d29ya2luZyBzdGFjay4gYG5sODAyMTFfZ2V0X2tleWAgYW5kIGBubDgwMjExX2RlbF9rZXlgIHN1Z2dlc3QgaW50ZXJhY3Rpb24gd2l0aCB0aGUgbmV0bGluayBpbnRlcmZhY2UsIHdoaWNoIGlzIHN0YW5kYXJkIGZvciBjb250cm9sIHBsYW5lIG9wZXJhdGlvbnMgaW4gbW9kZXJuIExpbnV4IG5ldHdvcmtpbmcuIEknbSBndWVzc2luZyB0aGV5IGhhbmRsZSByZXRyaWV2aW5nIGFuZCBkZWxldGluZyBjcnlwdG9ncmFwaGljIGtleXMgYXNzb2NpYXRlZCB3aXRoIHdpcmVsZXNzIGludGVyZmFjZXMuIFRoZSBvdGhlciB0aHJlZSBsb29rIGxpa2UgdGhleSdyZSB2YWxpZGF0aW9uIGFuZCBjb25maWd1cmF0aW9uIHJvdXRpbmVzIHdpdGhpbiB0aGUgYGNmZzgwMjExYCBmcmFtZXdvcmsuIGBjZmc4MDIxMV92YWxpZF9rZXlfaWR4YCBpcyBwcm9iYWJseSBhYm91dCBjaGVja2luZyB0aGUgdmFsaWRpdHkgb2YgYSBnaXZlbiBrZXkgaW5kZXgsIHdoaWNoIGlzIHByZXR0eSBmdW5kYW1lbnRhbCB0byBlbnN1cmUgYWdhaW5zdCBidWZmZXIgb3ZlcmZsb3dzIG9yIG90aGVyIHNlY3VyaXR5IGlzc3VlcyB3aGVuIGFjY2Vzc2luZyBrZXlzLiBgY2ZnODAyMTFfdmFsaWRhdGVfa2V5X3NldHRpbmdzYCBzZWVtcyB0byBoYW5kbGUgdmFsaWRhdGlvbiBvZiBrZXkgc2V0dGluZ3MgbGlrZSBsZW5ndGgsIGFsZ29yaXRobSwgZXRjLiwgZW5zdXJpbmcgdGhhdCB0aGV5J3JlIGNvbXBhdGlibGUgd2l0aCB0aGUgaGFyZHdhcmUgYW5kIHRoZSBjb25maWd1cmVkIHNlY3VyaXR5IHBvbGljeS4gRmluYWxseSwgYGNmZzgwMjExX3NldF9lbmNyeXB0aW9uYCBpcyBhIG5vLWJyYWluZXIsIGl0J3MgYWJvdXQgYWN0dWFsbHkgYXBwbHlpbmcgdGhlIGVuY3J5cHRpb24gc2V0dGluZ3MuXG5cblRvIGdldCBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGVzZSBmaXQgdG9nZXRoZXIgYW5kIHdoYXQgZGVwZW5kZW5jaWVzIHRoZXkgaGF2ZSwgSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgdGhlIEtjb25maWcgZm9yIHRoZSBgbmV0L3dpcmVsZXNzYCBzZWN0aW9uLiBUaGF0IHNob3VsZCBzaG93IG1lIHRoZSByZWxldmFudCBjb21waWxlLXRpbWUgb3B0aW9ucyBhbmQgdGhlaXIgZGVwZW5kZW5jaWVzLCB3aGljaCB3aWxsIGdpdmUgbWUgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgZW5hYmxlZCBhbmQgdXNlZCB3aXRoaW4gdGhlIGJyb2FkZXIgY29udGV4dCBvZiB0aGUgd2lyZWxlc3Mgc3RhY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwODYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMDo0Nzo1Ni4wNjg3MDkwNjRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc3MTE5NTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5jb25maWcgQ0ZHODAyMTFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3dpcmVsZXNzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3dpcmVsZXNzL0tjb25maWc9MTQ9Y29uZmlnIFdFWFRfUFJJVlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTYtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTc6Y29uZmlnIENGRzgwMjExXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTgtXFx0dHJpc3RhdGUgXFxcImNmZzgwMjExIC0gd2lyZWxlc3MgY29uZmlndXJhdGlvbiBBUElcXFwiXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZz0zOD1jb25maWcgTkw4MDIxMV9URVNUTU9ERVxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctNTEtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6NTI6Y29uZmlnIENGRzgwMjExX0RFVkVMT1BFUl9XQVJOSU5HU1xcbm5ldC93aXJlbGVzcy9LY29uZmlnLTUzLVxcdGJvb2wgXFxcImVuYWJsZSBkZXZlbG9wZXIgd2FybmluZ3NcXFwiXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy02Ny1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo2ODpjb25maWcgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXFxubmV0L3dpcmVsZXNzL0tjb25maWctNjktXFx0Ym9vbCBcXFwiY2ZnODAyMTEgY2VydGlmaWNhdGlvbiBvbnVzXFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctODgtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6ODk6Y29uZmlnIENGRzgwMjExX1JFUVVJUkVfU0lHTkVEX1JFR0RCXFxubmV0L3dpcmVsZXNzL0tjb25maWctOTAtXFx0Ym9vbCBcXFwicmVxdWlyZSByZWdkYiBzaWduYXR1cmVcXFwiIGlmIENGRzgwMjExX0NFUlRJRklDQVRJT05fT05VU1xcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctOTgtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6OTk6Y29uZmlnIENGRzgwMjExX1VTRV9LRVJORUxfUkVHREJfS0VZU1xcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEwMC1cXHRib29sIFxcXCJhbGxvdyByZWdkYiBrZXlzIHNoaXBwZWQgd2l0aCB0aGUga2VybmVsXFxcIiBpZiBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTExMC1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxMTE6Y29uZmlnIENGRzgwMjExX0VYVFJBX1JFR0RCX0tFWURJUlxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTExMi1cXHRzdHJpbmcgXFxcImFkZGl0aW9uYWwgcmVnZGIga2V5IGRpcmVjdG9yeVxcXCIgaWYgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMjEtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTIyOmNvbmZpZyBDRkc4MDIxMV9SRUdfQ0VMTFVMQVJfSElOVFNcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMjMtXFx0Ym9vbCBcXFwiY2ZnODAyMTEgcmVndWxhdG9yeSBzdXBwb3J0IGZvciBjZWxsdWxhciBiYXNlIHN0YXRpb24gaGludHNcXFwiXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMzQtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTM1OmNvbmZpZyBDRkc4MDIxMV9SRUdfUkVMQVhfTk9fSVJcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMzYtXFx0Ym9vbCBcXFwiY2ZnODAyMTEgc3VwcG9ydCBmb3IgTk9fSVIgcmVsYXhhdGlvblxcXCJcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE1OC1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxNTk6Y29uZmlnIENGRzgwMjExX0RFRkFVTFRfUFNcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNjAtXFx0Ym9vbCBcXFwiZW5hYmxlIHBvd2Vyc2F2ZSBieSBkZWZhdWx0XFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTY4LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjE2OTpjb25maWcgQ0ZHODAyMTFfREVCVUdGU1xcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE3MC1cXHRib29sIFxcXCJjZmc4MDIxMSBEZWJ1Z0ZTIGVudHJpZXNcXFwiXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNzYtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTc3OmNvbmZpZyBDRkc4MDIxMV9DUkRBX1NVUFBPUlRcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNzgtXFx0Ym9vbCBcXFwic3VwcG9ydCBDUkRBXFxcIiBpZiBFWFBFUlRcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE4Ni1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxODc6Y29uZmlnIENGRzgwMjExX1dFWFRcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xODgtXFx0Ym9vbCBcXFwiY2ZnODAyMTEgd2lyZWxlc3MgZXh0ZW5zaW9ucyBjb21wYXRpYmlsaXR5XFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTkzLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjE5NDpjb25maWcgQ0ZHODAyMTFfS1VOSVRfVEVTVFxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE5NS1cXHR0cmlzdGF0ZSBcXFwiS1VuaXQgdGVzdHMgZm9yIGNmZzgwMjExXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDAwOjQ3OjU2Ljg0NTg0NDM4N1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNzkyMTcxNzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGUgbmVjZXNzYXJ5IGtlcm5lbCBjb25maWd1cmF0aW9ucyBmb3IgdGhpcyB0ZXN0aW5nIHNldHVwLiBNeSBwcmltYXJ5IGZvY3VzIGlzIG9uIGBDRkc4MDIxMWAgYW5kIGBDRkc4MDIxMV9XRVhUYC4gVGhlc2Ugc2VlbSB0byBiZSB0aGUgbW9zdCBkaXJlY3Qgb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgSSdtIHRhcmdldGluZy4gSSBhbHNvIHRoaW5rIEkgbWlnaHQgbmVlZCB0byBlbmFibGUgYE1BQzgwMjExYCB0byBmdWxseSB1dGlsaXplIHRoZSBDRkc4MDIxMSB3aXJlbGVzcyBzdGFjayBmb3IgYWN0dWFsIHRlc3RpbmcuIExldCdzIG5vdCBmb3JnZXQgdGhlIG5ldC93aXJlbGVzcyBkaXJlY3RvcnksIHdoaWNoLCBmcm9tIG15IHVuZGVyc3RhbmRpbmcsIG9ubHkgbmVlZHMgYENGRzgwMjExYC4gTm93LCBob2xkIG9uLCBJIHNob3VsZCBhbHNvIGluY2x1ZGUgYE1BQzgwMjExX0hXU0lNYC4gVGhpcyBsb29rcyBsaWtlIHRoZSBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSBjb21wb25lbnQgZm9yIG1hYzgwMjExLCBhbmQgdGhhdCB3b3VsZCBiZSBpbmNyZWRpYmx5IHVzZWZ1bCBmb3IgZnV6emluZyEgU28sIEknbGwgZ28gd2l0aCBgQ0ZHODAyMTFgLCBgQ0ZHODAyMTFfV0VYVGAsIGBNQUM4MDIxMWAsIGFuZCBgTUFDODAyMTFfSFdTSU1gLiBBbmQganVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nLCBJIG5lZWQgdG8gdGFrZSBhIHF1aWNrIGxvb2sgYXQgdGhlIGBuZXQvd2lyZWxlc3MvTWFrZWZpbGVgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTA1LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDAwOjQ4OjAxLjEyNTA2NDk0M1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODAxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvd2lyZWxlc3MvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0b2JqLSQoQ09ORklHX0NGRzgwMjExKSArPSBjZmc4MDIxMS5vXFxuICAgMzpcXHRvYmoteSArPSB0ZXN0cy9cXG4gICA0OlxcdFxcbiAgIDU6XFx0b2JqLSQoQ09ORklHX1dFWFRfQ09SRSkgKz0gd2V4dC1jb3JlLm9cXG4gICA2OlxcdG9iai0kKENPTkZJR19XRVhUX1BST0MpICs9IHdleHQtcHJvYy5vXFxuICAgNzpcXHRvYmotJChDT05GSUdfV0VYVF9QUklWKSArPSB3ZXh0LXByaXYub1xcbiAgIDg6XFx0XFxuICAgOTpcXHRjZmc4MDIxMS15ICs9IGNvcmUubyBzeXNmcy5vIHJhZGlvdGFwLm8gdXRpbC5vIHJlZy5vIHNjYW4ubyBubDgwMjExLm9cXG4gIDEwOlxcdGNmZzgwMjExLXkgKz0gbWxtZS5vIGlic3MubyBzbWUubyBjaGFuLm8gZXRodG9vbC5vIG1lc2gubyBhcC5vIHRyYWNlLm8gb2NiLm9cXG4gIDExOlxcdGNmZzgwMjExLXkgKz0gbWljaGFlbC1taWMubyBwbXNyLm9cXG4gIDEyOlxcdGNmZzgwMjExLSQoQ09ORklHX09GKSArPSBvZi5vXFxuICAxMzpcXHRjZmc4MDIxMS0kKENPTkZJR19DRkc4MDIxMV9ERUJVR0ZTKSArPSBkZWJ1Z2ZzLm9cXG4gIDE0OlxcdGNmZzgwMjExLSQoQ09ORklHX0NGRzgwMjExX1dFWFQpICs9IHdleHQtY29tcGF0Lm8gd2V4dC1zbWUub1xcbiAgMTU6XFx0XFxuICAxNjpcXHRDRkxBR1NfdHJhY2UubyA6PSAtSSQoc3JjKVxcbiAgMTc6XFx0XFxuICAxODpcXHRjZmc4MDIxMS0kKENPTkZJR19DRkc4MDIxMV9VU0VfS0VSTkVMX1JFR0RCX0tFWVMpICs9IHNoaXBwZWQtY2VydHMub1xcbiAgMTk6XFx0aWZuZXEgKCQoQ09ORklHX0NGRzgwMjExX0VYVFJBX1JFR0RCX0tFWURJUiksKVxcbiAgMjA6XFx0Y2ZnODAyMTEteSArPSBleHRyYS1jZXJ0cy5vXFxuICAyMTpcXHRlbmRpZlxcbiAgMjI6XFx0XFxuICAyMzpcXHQkKG9iaikvc2hpcHBlZC1jZXJ0cy5jOiAkKHNvcnQgJCh3aWxkY2FyZCAkKHNyYykvY2VydHMvKi5oZXgpKVxcbiAgMjQ6XFx0XFx0QCQoa2VjaG8pIFxcXCIgIEdFTiAgICAgJEBcXFwiXFxuICAyNTpcXHRcXHQkKFEpKGVjaG8gJyNpbmNsdWRlIFxcXCJyZWcuaFxcXCInOyBcXFxcXFxuICAyNjpcXHRcXHQgIGVjaG8gJ2NvbnN0IHU4IHNoaXBwZWRfcmVnZGJfY2VydHNbXSA9IHsnOyBcXFxcXFxuICAyNzpcXHRcXHQgIGVjaG8gfCBjYXQgLSAkXiA7IFxcXFxcXG4gIDI4OlxcdFxcdCAgZWNobyAnfTsnOyBcXFxcXFxuICAyOTpcXHRcXHQgIGVjaG8gJ3Vuc2lnbmVkIGludCBzaGlwcGVkX3JlZ2RiX2NlcnRzX2xlbiA9IHNpemVvZihzaGlwcGVkX3JlZ2RiX2NlcnRzKTsnOyBcXFxcXFxuICAzMDpcXHRcXHQgKSBcXHUwMDNlICRAXFxuICAzMTpcXHRcXG4gIDMyOlxcdCQob2JqKS9leHRyYS1jZXJ0cy5jOiAkKENPTkZJR19DRkc4MDIxMV9FWFRSQV9SRUdEQl9LRVlESVIpIFxcXFxcXG4gIDMzOlxcdFxcdFxcdCAgICAgICQoc29ydCAkKHdpbGRjYXJkICQoQ09ORklHX0NGRzgwMjExX0VYVFJBX1JFR0RCX0tFWURJUikvKi54NTA5KSlcXG4gIDM0OlxcdFxcdEAkKGtlY2hvKSBcXFwiICBHRU4gICAgICRAXFxcIlxcbiAgMzU6XFx0XFx0JChRKShzZXQgLWU7IFxcXFxcXG4gIDM2OlxcdFxcdCAgYWxsZj1cXFwiXFxcIjsgXFxcXFxcbiAgMzc6XFx0XFx0ICBmb3IgZiBpbiAkXiA7IGRvIFxcXFxcXG4gIDM4OlxcdFxcdCAgICAgIHRlc3QgLWYgJCRmIHx8IGNvbnRpbnVlO1xcXFxcXG4gIDM5OlxcdFxcdCAgICAgICMgc2ltaWxhciB0byBoZXhkdW1wIC12IC1lICcxLzEgXFxcIjB4JS4yeCxcXFwiIFxcXCJcXFxcblxcXCInIFxcXFxcXG4gIDQwOlxcdFxcdCAgICAgIHRoaXNmPSQkKG9kIC1BbiAtdiAtdHgxIFxcdTAwM2MgJCRmIHwgXFxcXFxcbiAgNDE6XFx0XFx0ICAgICAgICAgICAgICAgICAgIHNlZCAtZSAncy8gL1xcXFxuL2cnIHwgXFxcXFxcbiAgNDI6XFx0XFx0ICAgICAgICAgICAgICAgICAgIHNlZCAtZSAncy9eWzAtOWEtZl1cXFxcKyQkL1xcXFwwLzt0O2QnIHwgXFxcXFxcbiAgNDM6XFx0XFx0ICAgICAgICAgICAgICAgICAgIHNlZCAtZSAncy9eLzB4LztzLyQkLywvJyk7IFxcXFxcXG4gIDQ0OlxcdFxcdCAgICAgICMgZmlsZSBzaG91bGQgbm90IGJlIGVtcHR5IC0gbWF5YmUgY29tbWFuZCBzdWJzdGl0dXRpb24gZmFpbGVkPyBcXFxcXFxuICA0NTpcXHRcXHQgICAgICB0ZXN0ICEgLXogXFxcIiQkdGhpc2ZcXFwiO1xcXFxcXG4gIDQ2OlxcdFxcdCAgICAgIGFsbGY9JCRhbGxmJCR0aGlzZjtcXFxcXFxuICA0NzpcXHRcXHQgIGRvbmU7IFxcXFxcXG4gIDQ4OlxcdFxcdCAgKCBcXFxcXFxuICA0OTpcXHRcXHQgICAgICBlY2hvICcjaW5jbHVkZSBcXFwicmVnLmhcXFwiJzsgXFxcXFxcbiAgNTA6XFx0XFx0ICAgICAgZWNobyAnY29uc3QgdTggZXh0cmFfcmVnZGJfY2VydHNbXSA9IHsnOyBcXFxcXFxuICA1MTpcXHRcXHQgICAgICBlY2hvIFxcXCIkJGFsbGZcXFwiOyBcXFxcXFxuICA1MjpcXHRcXHQgICAgICBlY2hvICd9Oyc7IFxcXFxcXG4gIDUzOlxcdFxcdCAgICAgIGVjaG8gJ3Vuc2lnbmVkIGludCBleHRyYV9yZWdkYl9jZXJ0c19sZW4gPSBzaXplb2YoZXh0cmFfcmVnZGJfY2VydHMpOyc7IFxcXFxcXG4gIDU0OlxcdFxcdCAgKSBcXHUwMDNlICRAKVxcbiAgNTU6XFx0XFxuICA1NjpcXHRjbGVhbi1maWxlcyArPSBzaGlwcGVkLWNlcnRzLmMgZXh0cmEtY2VydHMuY1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMDo0ODowMS4xMjUyMjc4NzNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4OTg1MTczNjQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktleSBGdW5jdGlvbmFsaXR5IGluIGNmZzgwMjExIGZvciBGdXp6aW5nKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBmb2N1cyBpcyBvbiB0aGUga2V5IG1hbmFnZW1lbnQgd2l0aGluIGBjZmc4MDIxMWAgYW5kIGhvdyB0aGUgcHJvcG9zZWQgY2hhbmdlcyBpbXBhY3QgZnV6emluZy4gRmlyc3QsIEkgbmVlZCB0byBrbm93IHdoaWNoIGNvbmZpZ3VyYXRpb25zIGFyZSByZWxldmFudDogYENPTkZJR19DRkc4MDIxMWAgYW5kIGBDT05GSUdfQ0ZHODAyMTFfV0VYVGAgYXJlIHRoZSBvYnZpb3VzIG9uZXMsIGFuZCBJJ2xsIGtlZXAgYENPTkZJR19NQUM4MDIxMV9IV1NJTWAgaW4gbWluZCBmb3IgcG90ZW50aWFsIGhhcmR3YXJlIHNpbXVsYXRpb24gZHVyaW5nIHRlc3RpbmcuXG5cbk5vdywgdGhlIGZ1bmN0aW9ucy4gSSd2ZSBwaW5wb2ludGVkIGEgZmV3IGtleSBwbGF5ZXJzOiBgbmw4MDIxMV9nZXRfa2V5YCwgYG5sODAyMTFfZGVsX2tleWAsIGBjZmc4MDIxMV92YWxpZF9rZXlfaWR4YCwgYGNmZzgwMjExX3ZhbGlkYXRlX2tleV9zZXR0aW5nc2AsIGFuZCBgY2ZnODAyMTFfc2V0X2VuY3J5cHRpb25gLiBUaW1lIHRvIGRpZyBpbnRvIHRoZXNlLlxuXG5Pa2F5LCBsZXQncyBzZWUuLi4gYGNmZzgwMjExX3ZhbGlkX2tleV9pZHhgIGlzIGRlZmluZWQgaW4gYm90aCBgbmV0L3dpcmVsZXNzL2NvcmUuaGAgYW5kIGBuZXQvd2lyZWxlc3MvdXRpbC5jYCwgYW5kIGl0J3Mgbm90IHN0YXRpYy4gR29vZC4gYG5sODAyMTFfZ2V0X2tleWAgYW5kIGBubDgwMjExX2RlbF9rZXlgIGFyZSBzdGF0aWMgYW5kIHJlc2lkZSBpbiBgbmV0L3dpcmVsZXNzL25sODAyMTEuY2AsIGFuZCBgY2ZnODAyMTFfc2V0X2VuY3J5cHRpb25gIGlzIHN0YXRpYyBpbiBgbmV0L3dpcmVsZXNzL3dleHQtY29tcGF0LmNgLlxuXG5BIHF1aWNrIGNoZWNrIGNvbmZpcm1zIHRoYXQgYGNmZzgwMjExX3ZhbGlkYXRlX2tleV9zZXR0aW5nc2AgaXNuJ3Qgc3RhdGljLiBBbHJpZ2h0LCBsZXQncyBrZWVwIGFuIGV5ZSBvdXQgZm9yIG90aGVyIGZ1bmN0aW9ucy4gQmFzZWQgb24gdGhlIGFuYWx5c2lzLCBgY2ZnODAyMTFfdmFsaWRfa2V5X2lkeGAgc3RhbmRzIG91dCBhcyB0aGUgbW9zdCBzaWduaWZpY2FudCBvbmUgaGVyZS5cblxuTm93LCByZWFjaGFiaWxpdHkuIGBubDgwMjExX2dldF9rZXlgIGFuZCBgbmw4MDIxMV9kZWxfa2V5YCBhcmUgZGVmaW5pdGVseSByZWFjaGFibGUgdmlhIG5ldGxpbmsuIGBjZmc4MDIxMV9zZXRfZW5jcnlwdGlvbmAgaXMgYWNjZXNzaWJsZSB0aHJvdWdoIHdpcmVsZXNzIGV4dGVuc2lvbnMgKHdleHQpLiBHcmVhdCwgYWxsIHRoZSBmdW5jdGlvbnMgSSdtIHRhcmdldGluZyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSwgd2hpY2ggaXMgY3JpdGljYWwgZm9yIGVmZmVjdGl2ZSBmdXp6aW5nLlxuXG5NeSByZWFzb25pbmcgaXMgdGhpczogdGhlIHBhdGNoIGZ1bmRhbWVudGFsbHkgYWx0ZXJzIGhvdyBrZXkgaW5kaWNlcyBhcmUgdmFsaWRhdGVkIHdpdGhpbiBgY2ZnODAyMTFgLiBUaGlzIGluY2x1ZGVzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgaW50ZXJmYWNlLXNwZWNpZmljIGNoZWNrcyBhbmQgdGhlIG1vZGlmaWNhdGlvbiBvZiB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlIHRvIHRha2UgYSBgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldmAuIFRoZXNlIGNoYW5nZXMgaGF2ZSBhIGRpcmVjdCBpbXBhY3Qgb24gdGhlIG5ldGxpbmsgKG5sODAyMTEpIGFuZCB3aXJlbGVzcyBleHRlbnNpb25zICh3ZXh0KSBwYXRocyB1c2VkIGZvciByZXRyaWV2aW5nLCBkZWxldGluZywgYW5kIHNldHRpbmcga2V5cy4gVGhlIGZhY3QgdGhhdCB0aGUgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSBtYWtlcyB0aGVtIGlkZWFsIGZvciBmdXp6aW5nLlxuXG5JJ20gcmVhZHkgdG8gcHJvY2VlZCB3aXRoIHRoZXNlIGZ1bmN0aW9ucyBmb3IgdGVzdGluZy4gTGV0J3MgZ2V0IHRob3NlIHJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxMjAsIk91dHB1dFRva2VucyI6MjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTk4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDA6NDg6MTAuMTEwNDA0NjY3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY4MTM0Mzg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDRkc4MDIxMVwiLFxuICAgIFwiQ0ZHODAyMTFfV0VYVFwiLFxuICAgIFwiTUFDODAyMTFfSFdTSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJubDgwMjExX2dldF9rZXlcIixcbiAgICBcIm5sODAyMTFfZGVsX2tleVwiLFxuICAgIFwiY2ZnODAyMTFfdmFsaWRfa2V5X2lkeFwiLFxuICAgIFwiY2ZnODAyMTFfdmFsaWRhdGVfa2V5X3NldHRpbmdzXCIsXG4gICAgXCJjZmc4MDIxMV9zZXRfZW5jcnlwdGlvblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2dpYyBmb3IgdmFsaWRhdGluZyBrZXkgaW5kaWNlcyBpbiB0aGUgY2ZnODAyMTEgc3Vic3lzdGVtLCBhZGRpbmcgaW50ZXJmYWNlIHR5cGUtc3BlY2lmaWMgY2hlY2tzIGFuZCBjaGFuZ2luZyB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlIHRvIHRha2UgYHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXZgLiBUaGlzIGFmZmVjdHMgbmV0bGluayAobmw4MDIxMSkgYW5kIHdpcmVsZXNzIGV4dGVuc2lvbnMgKHdleHQpIHBhdGhzIGZvciBnZXR0aW5nLCBkZWxldGluZywgYW5kIHNldHRpbmcga2V5cy4gVGhlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UsIG1ha2luZyB0aGVtIHN1aXRhYmxlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNGRzgwMjExXCIsXG4gICAgXCJDRkc4MDIxMV9XRVhUXCIsXG4gICAgXCJNQUM4MDIxMV9IV1NJTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5sODAyMTFfZ2V0X2tleVwiLFxuICAgIFwibmw4MDIxMV9kZWxfa2V5XCIsXG4gICAgXCJjZmc4MDIxMV92YWxpZF9rZXlfaWR4XCIsXG4gICAgXCJjZmc4MDIxMV92YWxpZGF0ZV9rZXlfc2V0dGluZ3NcIixcbiAgICBcImNmZzgwMjExX3NldF9lbmNyeXB0aW9uXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvZ2ljIGZvciB2YWxpZGF0aW5nIGtleSBpbmRpY2VzIGluIHRoZSBjZmc4MDIxMSBzdWJzeXN0ZW0sIGFkZGluZyBpbnRlcmZhY2UgdHlwZS1zcGVjaWZpYyBjaGVja3MgYW5kIGNoYW5naW5nIHRoZSBmdW5jdGlvbiBzaWduYXR1cmUgdG8gdGFrZSBgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldmAuIFRoaXMgYWZmZWN0cyBuZXRsaW5rIChubDgwMjExKSBhbmQgd2lyZWxlc3MgZXh0ZW5zaW9ucyAod2V4dCkgcGF0aHMgZm9yIGdldHRpbmcsIGRlbGV0aW5nLCBhbmQgc2V0dGluZyBrZXlzLiBUaGUgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSwgbWFraW5nIHRoZW0gc3VpdGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowwrw57[1] Phase: Succeeded StartedAt: 2026-07-16 00:48:22 +0000 UTC FinishedAt: 2026-07-16 00:48:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrw57[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-16 00:48:22 +0000 UTC FinishedAt: 2026-07-16 00:48:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrw57[2] Phase: Succeeded StartedAt: 2026-07-16 00:48:22 +0000 UTC FinishedAt: 2026-07-16 05:09:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrw57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac798f757d6475dc6fee2ec899980d6740714596","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_get_key","nl80211_del_key","cfg80211_valid_key_idx","cfg80211_validate_key_settings","cfg80211_set_encryption"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac798f757d6475dc6fee2ec899980d6740714596","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"3d212928-3684-44c3-bda8-e48d52315bb3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-16 00:48:22 +0000 UTC FinishedAt: 2026-07-16 05:09:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"ac798f757d6475dc6fee2ec899980d6740714596","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_get_key","nl80211_del_key","cfg80211_valid_key_idx","cfg80211_validate_key_settings","cfg80211_set_encryption"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"ac798f757d6475dc6fee2ec899980d6740714596","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"3d212928-3684-44c3-bda8-e48d52315bb3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowwrw57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac798f757d6475dc6fee2ec899980d6740714596","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_get_key","nl80211_del_key","cfg80211_valid_key_idx","cfg80211_validate_key_settings","cfg80211_set_encryption"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac798f757d6475dc6fee2ec899980d6740714596","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"3d212928-3684-44c3-bda8-e48d52315bb3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-16 00:48:22 +0000 UTC FinishedAt: 2026-07-16 00:48:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrw57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac798f757d6475dc6fee2ec899980d6740714596","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_get_key","nl80211_del_key","cfg80211_valid_key_idx","cfg80211_validate_key_settings","cfg80211_set_encryption"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac798f757d6475dc6fee2ec899980d6740714596","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"3d212928-3684-44c3-bda8-e48d52315bb3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-16 00:48:22 +0000 UTC FinishedAt: 2026-07-16 00:48:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ac798f757d6475dc6fee2ec899980d6740714596","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowwrw57/series-workflowwrw57-convert-artifact-4052956444/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwrw57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac798f757d6475dc6fee2ec899980d6740714596","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_get_key","nl80211_del_key","cfg80211_valid_key_idx","cfg80211_validate_key_settings","cfg80211_set_encryption"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac798f757d6475dc6fee2ec899980d6740714596","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"3d212928-3684-44c3-bda8-e48d52315bb3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-16 00:48:33 +0000 UTC FinishedAt: 2026-07-16 01:28:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrw57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac798f757d6475dc6fee2ec899980d6740714596","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_get_key","nl80211_del_key","cfg80211_valid_key_idx","cfg80211_validate_key_settings","cfg80211_set_encryption"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac798f757d6475dc6fee2ec899980d6740714596","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"3d212928-3684-44c3-bda8-e48d52315bb3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-16 00:48:33 +0000 UTC FinishedAt: 2026-07-16 01:28:02 +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:*eb1e5662-b729-4769-ab8c-0fefc7f097eb,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-workflowwrw57/series-workflowwrw57-convert-artifact-4052956444/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": "96b38891-fcd5-4403-a241-3f3a5c58b699", "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-workflowwrw57/series-workflowwrw57-build-action-1883102026/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwrw57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac798f757d6475dc6fee2ec899980d6740714596","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_get_key","nl80211_del_key","cfg80211_valid_key_idx","cfg80211_validate_key_settings","cfg80211_set_encryption"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac798f757d6475dc6fee2ec899980d6740714596","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"3d212928-3684-44c3-bda8-e48d52315bb3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-16 00:48:33 +0000 UTC FinishedAt: 2026-07-16 01:27:52 +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:*eb1e5662-b729-4769-ab8c-0fefc7f097eb,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-workflowwrw57/series-workflowwrw57-convert-artifact-4052956444/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": "96b38891-fcd5-4403-a241-3f3a5c58b699", "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-workflowwrw57/series-workflowwrw57-build-action-1883102026/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwrw57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac798f757d6475dc6fee2ec899980d6740714596","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_get_key","nl80211_del_key","cfg80211_valid_key_idx","cfg80211_validate_key_settings","cfg80211_set_encryption"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac798f757d6475dc6fee2ec899980d6740714596","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"3d212928-3684-44c3-bda8-e48d52315bb3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-16 01:28:02 +0000 UTC FinishedAt: 2026-07-16 01:28:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrw57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac798f757d6475dc6fee2ec899980d6740714596","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_get_key","nl80211_del_key","cfg80211_valid_key_idx","cfg80211_validate_key_settings","cfg80211_set_encryption"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac798f757d6475dc6fee2ec899980d6740714596","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"3d212928-3684-44c3-bda8-e48d52315bb3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-16 01:28:02 +0000 UTC FinishedAt: 2026-07-16 01:28:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrw57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac798f757d6475dc6fee2ec899980d6740714596","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_get_key","nl80211_del_key","cfg80211_valid_key_idx","cfg80211_validate_key_settings","cfg80211_set_encryption"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac798f757d6475dc6fee2ec899980d6740714596","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"3d212928-3684-44c3-bda8-e48d52315bb3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-16 01:28:02 +0000 UTC FinishedAt: 2026-07-16 01:28:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrw57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac798f757d6475dc6fee2ec899980d6740714596","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_get_key","nl80211_del_key","cfg80211_valid_key_idx","cfg80211_validate_key_settings","cfg80211_set_encryption"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac798f757d6475dc6fee2ec899980d6740714596","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"3d212928-3684-44c3-bda8-e48d52315bb3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-16 01:28:02 +0000 UTC FinishedAt: 2026-07-16 01:28:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ac798f757d6475dc6fee2ec899980d6740714596","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"3d212928-3684-44c3-bda8-e48d52315bb3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowwrw57/series-workflowwrw57-convert-artifact-975642203/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwrw57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac798f757d6475dc6fee2ec899980d6740714596","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_get_key","nl80211_del_key","cfg80211_valid_key_idx","cfg80211_validate_key_settings","cfg80211_set_encryption"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac798f757d6475dc6fee2ec899980d6740714596","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"3d212928-3684-44c3-bda8-e48d52315bb3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-16 01:28:22 +0000 UTC FinishedAt: 2026-07-16 01:30:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrw57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac798f757d6475dc6fee2ec899980d6740714596","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_get_key","nl80211_del_key","cfg80211_valid_key_idx","cfg80211_validate_key_settings","cfg80211_set_encryption"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac798f757d6475dc6fee2ec899980d6740714596","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"3d212928-3684-44c3-bda8-e48d52315bb3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-16 01:28:22 +0000 UTC FinishedAt: 2026-07-16 01:30:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*96b38891-fcd5-4403-a241-3f3a5c58b699,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-workflowwrw57/series-workflowwrw57-build-action-1883102026/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-workflowwrw57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac798f757d6475dc6fee2ec899980d6740714596","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_get_key","nl80211_del_key","cfg80211_valid_key_idx","cfg80211_validate_key_settings","cfg80211_set_encryption"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac798f757d6475dc6fee2ec899980d6740714596","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"3d212928-3684-44c3-bda8-e48d52315bb3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-16 01:30:36 +0000 UTC FinishedAt: 2026-07-16 01:30:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrw57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac798f757d6475dc6fee2ec899980d6740714596","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_get_key","nl80211_del_key","cfg80211_valid_key_idx","cfg80211_validate_key_settings","cfg80211_set_encryption"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac798f757d6475dc6fee2ec899980d6740714596","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"3d212928-3684-44c3-bda8-e48d52315bb3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-16 01:30:36 +0000 UTC FinishedAt: 2026-07-16 01:30:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrw57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac798f757d6475dc6fee2ec899980d6740714596","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_get_key","nl80211_del_key","cfg80211_valid_key_idx","cfg80211_validate_key_settings","cfg80211_set_encryption"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac798f757d6475dc6fee2ec899980d6740714596","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"3d212928-3684-44c3-bda8-e48d52315bb3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-16 01:30:36 +0000 UTC FinishedAt: 2026-07-16 02:04:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrw57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac798f757d6475dc6fee2ec899980d6740714596","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_get_key","nl80211_del_key","cfg80211_valid_key_idx","cfg80211_validate_key_settings","cfg80211_set_encryption"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac798f757d6475dc6fee2ec899980d6740714596","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"3d212928-3684-44c3-bda8-e48d52315bb3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-16 01:30:36 +0000 UTC FinishedAt: 2026-07-16 02:04:54 +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:*eb1e5662-b729-4769-ab8c-0fefc7f097eb,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-workflowwrw57/series-workflowwrw57-convert-artifact-975642203/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": "db2a8a22-f96e-46cf-ad04-e379bac0b333", "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-workflowwrw57/series-workflowwrw57-build-action-1012581631/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwrw57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac798f757d6475dc6fee2ec899980d6740714596","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_get_key","nl80211_del_key","cfg80211_valid_key_idx","cfg80211_validate_key_settings","cfg80211_set_encryption"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac798f757d6475dc6fee2ec899980d6740714596","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"3d212928-3684-44c3-bda8-e48d52315bb3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-16 01:30:36 +0000 UTC FinishedAt: 2026-07-16 02:04:44 +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:*eb1e5662-b729-4769-ab8c-0fefc7f097eb,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-workflowwrw57/series-workflowwrw57-convert-artifact-975642203/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": "db2a8a22-f96e-46cf-ad04-e379bac0b333", "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-workflowwrw57/series-workflowwrw57-build-action-1012581631/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwrw57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac798f757d6475dc6fee2ec899980d6740714596","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_get_key","nl80211_del_key","cfg80211_valid_key_idx","cfg80211_validate_key_settings","cfg80211_set_encryption"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac798f757d6475dc6fee2ec899980d6740714596","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"3d212928-3684-44c3-bda8-e48d52315bb3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-16 02:04:54 +0000 UTC FinishedAt: 2026-07-16 02:04:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrw57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac798f757d6475dc6fee2ec899980d6740714596","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_get_key","nl80211_del_key","cfg80211_valid_key_idx","cfg80211_validate_key_settings","cfg80211_set_encryption"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac798f757d6475dc6fee2ec899980d6740714596","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"3d212928-3684-44c3-bda8-e48d52315bb3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-16 02:04:54 +0000 UTC FinishedAt: 2026-07-16 02:04:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrw57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac798f757d6475dc6fee2ec899980d6740714596","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_get_key","nl80211_del_key","cfg80211_valid_key_idx","cfg80211_validate_key_settings","cfg80211_set_encryption"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac798f757d6475dc6fee2ec899980d6740714596","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"3d212928-3684-44c3-bda8-e48d52315bb3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-16 02:04:54 +0000 UTC FinishedAt: 2026-07-16 02:07:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrw57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac798f757d6475dc6fee2ec899980d6740714596","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_get_key","nl80211_del_key","cfg80211_valid_key_idx","cfg80211_validate_key_settings","cfg80211_set_encryption"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac798f757d6475dc6fee2ec899980d6740714596","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"3d212928-3684-44c3-bda8-e48d52315bb3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-16 02:04:54 +0000 UTC FinishedAt: 2026-07-16 02:06:57 +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:*db2a8a22-f96e-46cf-ad04-e379bac0b333,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-workflowwrw57/series-workflowwrw57-build-action-1012581631/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-workflowwrw57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac798f757d6475dc6fee2ec899980d6740714596","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_get_key","nl80211_del_key","cfg80211_valid_key_idx","cfg80211_validate_key_settings","cfg80211_set_encryption"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac798f757d6475dc6fee2ec899980d6740714596","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"3d212928-3684-44c3-bda8-e48d52315bb3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-16 02:07:07 +0000 UTC FinishedAt: 2026-07-16 05:09:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrw57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac798f757d6475dc6fee2ec899980d6740714596","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_get_key","nl80211_del_key","cfg80211_valid_key_idx","cfg80211_validate_key_settings","cfg80211_set_encryption"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac798f757d6475dc6fee2ec899980d6740714596","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"3d212928-3684-44c3-bda8-e48d52315bb3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-16 02:07:07 +0000 UTC FinishedAt: 2026-07-16 05:09:37 +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_get_key","nl80211_del_key","cfg80211_valid_key_idx","cfg80211_validate_key_settings","cfg80211_set_encryption"],"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:*96b38891-fcd5-4403-a241-3f3a5c58b699,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*db2a8a22-f96e-46cf-ad04-e379bac0b333,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-workflowwrw57/series-workflowwrw57-build-action-1883102026/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-workflowwrw57/series-workflowwrw57-build-action-1012581631/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowwrw57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac798f757d6475dc6fee2ec899980d6740714596","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_get_key","nl80211_del_key","cfg80211_valid_key_idx","cfg80211_validate_key_settings","cfg80211_set_encryption"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac798f757d6475dc6fee2ec899980d6740714596","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"3d212928-3684-44c3-bda8-e48d52315bb3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-16 02:07:07 +0000 UTC FinishedAt: 2026-07-16 02:07:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrw57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac798f757d6475dc6fee2ec899980d6740714596","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_get_key","nl80211_del_key","cfg80211_valid_key_idx","cfg80211_validate_key_settings","cfg80211_set_encryption"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac798f757d6475dc6fee2ec899980d6740714596","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"3d212928-3684-44c3-bda8-e48d52315bb3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-16 02:07:07 +0000 UTC FinishedAt: 2026-07-16 02:07:13 +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_get_key","nl80211_del_key","cfg80211_valid_key_idx","cfg80211_validate_key_settings","cfg80211_set_encryption"],"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-workflowwrw57/series-workflowwrw57-convert-artifact-318625108/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwrw57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac798f757d6475dc6fee2ec899980d6740714596","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_get_key","nl80211_del_key","cfg80211_valid_key_idx","cfg80211_validate_key_settings","cfg80211_set_encryption"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac798f757d6475dc6fee2ec899980d6740714596","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"3d212928-3684-44c3-bda8-e48d52315bb3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-16 02:07:07 +0000 UTC FinishedAt: 2026-07-16 02:07:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrw57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac798f757d6475dc6fee2ec899980d6740714596","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_get_key","nl80211_del_key","cfg80211_valid_key_idx","cfg80211_validate_key_settings","cfg80211_set_encryption"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac798f757d6475dc6fee2ec899980d6740714596","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"3d212928-3684-44c3-bda8-e48d52315bb3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-16 02:07:07 +0000 UTC FinishedAt: 2026-07-16 02:07:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrw57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac798f757d6475dc6fee2ec899980d6740714596","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_get_key","nl80211_del_key","cfg80211_valid_key_idx","cfg80211_validate_key_settings","cfg80211_set_encryption"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac798f757d6475dc6fee2ec899980d6740714596","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"3d212928-3684-44c3-bda8-e48d52315bb3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-16 02:07:07 +0000 UTC FinishedAt: 2026-07-16 02:07:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrw57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac798f757d6475dc6fee2ec899980d6740714596","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_get_key","nl80211_del_key","cfg80211_valid_key_idx","cfg80211_validate_key_settings","cfg80211_set_encryption"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac798f757d6475dc6fee2ec899980d6740714596","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"3d212928-3684-44c3-bda8-e48d52315bb3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-16 02:07:17 +0000 UTC FinishedAt: 2026-07-16 05:09:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrw57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac798f757d6475dc6fee2ec899980d6740714596","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_get_key","nl80211_del_key","cfg80211_valid_key_idx","cfg80211_validate_key_settings","cfg80211_set_encryption"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac798f757d6475dc6fee2ec899980d6740714596","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","CFG80211_WEXT","MAC80211_HWSIM"],"series_id":"3d212928-3684-44c3-bda8-e48d52315bb3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-16 02:07:17 +0000 UTC FinishedAt: 2026-07-16 05:09:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*96b38891-fcd5-4403-a241-3f3a5c58b699,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*db2a8a22-f96e-46cf-ad04-e379bac0b333,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-workflowwrw57/series-workflowwrw57-build-action-1883102026/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-workflowwrw57/series-workflowwrw57-build-action-1012581631/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-workflowwrw57/series-workflowwrw57-convert-artifact-318625108/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,}