Name: series-workflowwrkrc Phase: Succeeded StartedAt: 2026-08-21 15:54:32 +0000 UTC FinishedAt: 2026-08-21 19:39:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrkrc[0] Phase: Succeeded StartedAt: 2026-08-21 15:54:32 +0000 UTC FinishedAt: 2026-08-21 15:58:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrkrc[0].run-triage Phase: Succeeded StartedAt: 2026-08-21 15:54:32 +0000 UTC FinishedAt: 2026-08-21 15:58:40 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "746fc0787f616da418ffc04a110296fe95d53491", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TCP_AO", "NET_VRF" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "746fc0787f616da418ffc04a110296fe95d53491", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TCP_AO", "NET_VRF" ], "series_id": "2ff8e8bf-62ad-42b5-bf62-fb8a5bbb8a6c" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "tcp_parse_ao", "tcp_v4_parse_ao", "tcp_v6_parse_ao" ], "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+CgkJCTx0ZD4yMDI2LzA4LzIxIDE1OjU2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RDUF9BTyYjMzQ7LAogICAgJiMzNDtORVRfVlJGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGNwX3BhcnNlX2FvJiMzNDssCiAgICAmIzM0O3RjcF92NF9wYXJzZV9hbyYjMzQ7LAogICAgJiMzNDt0Y3BfdjZfcGFyc2VfYW8mIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyBpbiBgdGNwX2FvX2RlbF9jbWRgIHdoZXJlIHRoZSBgbDNpbmRleGAgdmFyaWFibGUgd2FzIG5vdCBiZWluZyBwb3B1bGF0ZWQgZnJvbSB0aGUgdXNlci1wcm92aWRlZCBgY21kLmlmaW5kZXhgIHdoZW4gdGhlIGBUQ1BfQU9fS0VZRl9JRklOREVYYCBmbGFnIHdhcyBzZXQuIFRoZSBgY21kYCBzdHJ1Y3R1cmUgaXMgc2FmZWx5IGNvcGllZCBmcm9tIHVzZXJzcGFjZSB1c2luZyBgY29weV9zdHJ1Y3RfZnJvbV9zb2NrcHRyYCwgd2hpY2ggZ3VhcmFudGVlcyB0aGF0IHRoZSBzdHJ1Y3R1cmUgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgKHplcm8tcGFkZGVkIGlmIHRoZSB1c2Vyc3BhY2Ugc3RydWN0dXJlIGlzIHNtYWxsZXIpLiBUaGUgcGF0Y2ggb25seSBhZGRzIGEgY29uZGl0aW9uYWwgYXNzaWdubWVudCBvZiBhbiBpbnRlZ2VyIHZhcmlhYmxlIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gVENQLUFPIHNldHNvY2tvcHQgaGFuZGxpbmcgd2hlcmUgYGNtZC5pZmluZGV4YCB3YXMgbm90IGFzc2lnbmVkIHRvIGBsM2luZGV4YCB3aGVuIGRlbGV0aW5nIGEga2V5LCBwcmV2ZW50aW5nIGRlbGV0aW9uIG9mIGludGVyZmFjZS1zY29wZWQga2V5cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxNTo1NjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDExMTdjOWZkZjhiYzA3MjRjMjAxN2IyZDU4OTcyY2NmOTc5YzMzM2FcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAyMSAxNTo1Njo0MCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfYW8uYyBiL25ldC9pcHY0L3RjcF9hby5jXG5pbmRleCA1MDk0MjY3NDQ3YWVlLi4yNjg2NDYyMWU2ZGVmIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvdGNwX2FvLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcF9hby5jXG5AQCAtMTgzNCw2ICYjNDM7MTgzNCw5IEBAIHN0YXRpYyBpbnQgdGNwX2FvX2RlbF9jbWQoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBzaG9ydCBpbnQgZmFtaWx5LFxuIFx0aWYgKGNtZC5pZmluZGV4IFx1MDAyNlx1MDAyNiAhKGNtZC5rZXlmbGFncyBcdTAwMjYgVENQX0FPX0tFWUZfSUZJTkRFWCkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuJiM0MztcdGlmIChjbWQua2V5ZmxhZ3MgXHUwMDI2IFRDUF9BT19LRVlGX0lGSU5ERVgpXG4mIzQzO1x0XHRsM2luZGV4ID0gY21kLmlmaW5kZXg7XG4mIzQzO1xuIFx0YW9faW5mbyA9IHNldHNvY2tvcHRfYW9faW5mbyhzayk7XG4gXHRpZiAoSVNfRVJSKGFvX2luZm8pKVxuIFx0XHRyZXR1cm4gUFRSX0VSUihhb19pbmZvKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2tleS1tYW5hZ2VtZW50LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2tleS1tYW5hZ2VtZW50LmNcbmluZGV4IGQ4NmJiMzgwYjc5ZjcuLjFlMDFlODA1ZGJhNzIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2tleS1tYW5hZ2VtZW50LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8va2V5LW1hbmFnZW1lbnQuY1xuQEAgLTYzLDcgJiM0Mzs2Myw4IEBAIHN0YXRpYyBpbnQgcHJlcGFyZV9sc2sodW5pb24gdGNwX2FkZHIgKmFkZHIsIHVpbnQ4X3Qgc25kaWQsIHVpbnQ4X3QgcmN2aWQpXG4gXHRyZXR1cm4gc2s7XG4gfVxuIFxuLXN0YXRpYyBpbnQgdGVzdF9kZWxfa2V5KGludCBzaywgdWludDhfdCBzbmRpZCwgdWludDhfdCByY3ZpZCwgYm9vbCBhc3luYyxcbiYjNDM7c3RhdGljIGludCB0ZXN0X2RlbF9rZXkoaW50IHNrLCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkLCBpbnQgaWZpbmRleCxcbiYjNDM7XHRcdFx0Ym9vbCBhc3luYyxcbiBcdFx0XHRpbnQgY3VycmVudF9rZXksIGludCBybmV4dF9rZXkpXG4ge1xuIFx0c3RydWN0IHRjcF9hb19pbmZvX29wdCBhb19pbmZvID0ge307XG5AQCAtNzYsNiAmIzQzOzc3LDEwIEBAIHN0YXRpYyBpbnQgdGVzdF9kZWxfa2V5KGludCBzaywgdWludDhfdCBzbmRpZCwgdWludDhfdCByY3ZpZCwgYm9vbCBhc3luYyxcbiBcdGRlbC5wcmVmaXggPSBERUZBVUxUX1RFU1RfUFJFRklYO1xuIFx0ZGVsLnNuZGlkID0gc25kaWQ7XG4gXHRkZWwucmN2aWQgPSByY3ZpZDtcbiYjNDM7XHRpZiAoaWZpbmRleCkge1xuJiM0MztcdFx0ZGVsLmtleWZsYWdzID0gVENQX0FPX0tFWUZfSUZJTkRFWDtcbiYjNDM7XHRcdGRlbC5pZmluZGV4ID0gaWZpbmRleDtcbiYjNDM7XHR9XG4gXG4gXHRpZiAoY3VycmVudF9rZXkgXHUwMDNlPSAwKSB7XG4gXHRcdGRlbC5zZXRfY3VycmVudCA9IDE7XG5AQCAtOTUsNyAmIzQzOzEwMCw4IEBAIHN0YXRpYyBpbnQgdGVzdF9kZWxfa2V5KGludCBzaywgdWludDhfdCBzbmRpZCwgdWludDhfdCByY3ZpZCwgYm9vbCBhc3luYyxcbiBcbiBcdHRjcF9hZGRyX3RvX3NvY2thZGRyX2luKFx1MDAyNnNvY2thZGRyLCBcdTAwMjZ0aGlzX2lwX2Rlc3QsIDApO1xuIFx0ZXJyID0gdGVzdF9nZXRfb25lX2FvKHNrLCBcdTAwMjZrZXksIFx1MDAyNnNvY2thZGRyLCBzaXplb2Yoc29ja2FkZHIpLFxuLVx0XHRcdCAgICAgIERFRkFVTFRfVEVTVF9QUkVGSVgsIHNuZGlkLCByY3ZpZCk7XG4mIzQzO1x0XHRcdCAgICAgIERFRkFVTFRfVEVTVF9QUkVGSVgsIHNuZGlkLCByY3ZpZCxcbiYjNDM7XHRcdFx0ICAgICAgZGVsLmtleWZsYWdzLCBkZWwuaWZpbmRleCk7XG4gXHRpZiAoIWVycilcbiBcdFx0cmV0dXJuIC1FRVhJU1Q7XG4gXHRpZiAoZXJyICE9IC1FMkJJRylcbkBAIC0xMTIsMTIgJiM0MzsxMTgsMTIgQEAgc3RhdGljIGludCB0ZXN0X2RlbF9rZXkoaW50IHNrLCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkLCBib29sIGFzeW5jLFxuIH1cbiBcbiBzdGF0aWMgdm9pZCB0cnlfZGVsZXRlX2tleShjaGFyICp0c3RfbmFtZSwgaW50IHNrLCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkLFxuLVx0XHRcdCAgIGJvb2wgYXN5bmMsIGludCBjdXJyZW50X2tleSwgaW50IHJuZXh0X2tleSxcbiYjNDM7XHRcdFx0ICAgaW50IGlmaW5kZXgsIGJvb2wgYXN5bmMsIGludCBjdXJyZW50X2tleSwgaW50IHJuZXh0X2tleSxcbiBcdFx0XHQgICBmYXVsdF90IGluailcbiB7XG4gXHRpbnQgZXJyO1xuIFxuLVx0ZXJyID0gdGVzdF9kZWxfa2V5KHNrLCBzbmRpZCwgcmN2aWQsIGFzeW5jLCBjdXJyZW50X2tleSwgcm5leHRfa2V5KTtcbiYjNDM7XHRlcnIgPSB0ZXN0X2RlbF9rZXkoc2ssIHNuZGlkLCByY3ZpZCwgaWZpbmRleCwgYXN5bmMsIGN1cnJlbnRfa2V5LCBybmV4dF9rZXkpO1xuIFx0aWYgKChlcnIgPT0gLUVCVVNZIFx1MDAyNlx1MDAyNiBmYXVsdChCVVNZKSkgfHwgKGVyciA9PSAtRUlOVkFMIFx1MDAyNlx1MDAyNiBmYXVsdChDVVJSTkVYVCkpKSB7XG4gXHRcdHRlc3Rfb2soXCYjMzQ7JXM6IGtleSBkZWxldGlvbiB3YXMgcHJldmVudGVkXCYjMzQ7LCB0c3RfbmFtZSk7XG4gXHRcdHJldHVybjtcbkBAIC0yMzYsMTUgJiM0MzsyNDIsMTUgQEAgc3RhdGljIHZvaWQgY2hlY2tfY2xvc2VkX3NvY2tldCh2b2lkKVxuIFx0aW50IHNrO1xuIFxuIFx0c2sgPSBwcmVwYXJlX3NrKFx1MDAyNnRoaXNfaXBfZGVzdCwgMjAwLCAyMDApO1xuLVx0dHJ5X2RlbGV0ZV9rZXkoXCYjMzQ7Y2xvc2VkIHNvY2tldCwgZGVsZXRlIGEga2V5XCYjMzQ7LCBzaywgMjAwLCAyMDAsIDAsIC0xLCAtMSwgMCk7XG4tXHR0cnlfZGVsZXRlX2tleShcJiMzNDtjbG9zZWQgc29ja2V0LCBkZWxldGUgYWxsIGtleXNcJiMzNDssIHNrLCAxMDAsIDEwMCwgMCwgLTEsIC0xLCAwKTtcbiYjNDM7XHR0cnlfZGVsZXRlX2tleShcJiMzNDtjbG9zZWQgc29ja2V0LCBkZWxldGUgYSBrZXlcJiMzNDssIHNrLCAyMDAsIDIwMCwgMCwgMCwgLTEsIC0xLCAwKTtcbiYjNDM7XHR0cnlfZGVsZXRlX2tleShcJiMzNDtjbG9zZWQgc29ja2V0LCBkZWxldGUgYWxsIGtleXNcJiMzNDssIHNrLCAxMDAsIDEwMCwgMCwgMCwgLTEsIC0xLCAwKTtcbiBcdGNsb3NlKHNrKTtcbiBcbiBcdHNrID0gcHJlcGFyZV9zayhcdTAwMjZ0aGlzX2lwX2Rlc3QsIDIwMCwgMjAwKTtcbiBcdGlmICh0ZXN0X3NldF9rZXkoc2ssIDEwMCwgMjAwKSlcbiBcdFx0dGVzdF9lcnJvcihcJiMzNDtmYWlsZWQgdG8gc2V0IGN1cnJlbnQvcm5leHQga2V5c1wmIzM0Oyk7XG4tXHR0cnlfZGVsZXRlX2tleShcJiMzNDtjbG9zZWQgc29ja2V0LCBkZWxldGUgY3VycmVudCBrZXlcJiMzNDssIHNrLCAxMDAsIDEwMCwgMCwgLTEsIC0xLCBGQVVMVF9CVVNZKTtcbi1cdHRyeV9kZWxldGVfa2V5KFwmIzM0O2Nsb3NlZCBzb2NrZXQsIGRlbGV0ZSBybmV4dCBrZXlcJiMzNDssIHNrLCAyMDAsIDIwMCwgMCwgLTEsIC0xLCBGQVVMVF9CVVNZKTtcbiYjNDM7XHR0cnlfZGVsZXRlX2tleShcJiMzNDtjbG9zZWQgc29ja2V0LCBkZWxldGUgY3VycmVudCBrZXlcJiMzNDssIHNrLCAxMDAsIDEwMCwgMCwgMCwgLTEsIC0xLCBGQVVMVF9CVVNZKTtcbiYjNDM7XHR0cnlfZGVsZXRlX2tleShcJiMzNDtjbG9zZWQgc29ja2V0LCBkZWxldGUgcm5leHQga2V5XCYjMzQ7LCBzaywgMjAwLCAyMDAsIDAsIDAsIC0xLCAtMSwgRkFVTFRfQlVTWSk7XG4gXHRjbG9zZShzayk7XG4gXG4gXHRzayA9IHByZXBhcmVfc2soXHUwMDI2dGhpc19pcF9kZXN0LCAyMDAsIDIwMCk7XG5AQCAtMjU0LDEwICYjNDM7MjYwLDEyIEBAIHN0YXRpYyB2b2lkIGNoZWNrX2Nsb3NlZF9zb2NrZXQodm9pZClcbiBcdGlmICh0ZXN0X2FkZF9rZXkoc2ssIFwmIzM0O0dsb3J5IHRvIFVrcmFpbmUhXCYjMzQ7LCB0aGlzX2lwX2Rlc3QsXG4gXHRcdFx0IERFRkFVTFRfVEVTVF9QUkVGSVgsIDEyLCAxMykpXG4gXHRcdHRlc3RfZXJyb3IoXCYjMzQ7dGVzdF9hZGRfa2V5KClcJiMzNDspO1xuLVx0dHJ5X2RlbGV0ZV9rZXkoXCYjMzQ7Y2xvc2VkIHNvY2tldCwgZGVsZXRlIGEga2V5ICYjNDM7IHNldCBjdXJyZW50L3JuZXh0XCYjMzQ7LCBzaywgMTAwLCAxMDAsIDAsIDEwLCAxMywgMCk7XG4tXHR0cnlfZGVsZXRlX2tleShcJiMzNDtjbG9zZWQgc29ja2V0LCBmb3JjZS1kZWxldGUgY3VycmVudCBrZXlcJiMzNDssIHNrLCAxMCwgMTEsIDAsIDIwMCwgLTEsIDApO1xuLVx0dHJ5X2RlbGV0ZV9rZXkoXCYjMzQ7Y2xvc2VkIHNvY2tldCwgZm9yY2UtZGVsZXRlIHJuZXh0IGtleVwmIzM0Oywgc2ssIDEyLCAxMywgMCwgLTEsIDIwMCwgMCk7XG4tXHR0cnlfZGVsZXRlX2tleShcJiMzNDtjbG9zZWQgc29ja2V0LCBkZWxldGUgY3VycmVudCYjNDM7cm5leHQga2V5XCYjMzQ7LCBzaywgMjAwLCAyMDAsIDAsIC0xLCAtMSwgRkFVTFRfQlVTWSk7XG4mIzQzO1x0dHJ5X2RlbGV0ZV9rZXkoXCYjMzQ7Y2xvc2VkIHNvY2tldCwgZGVsZXRlIGEga2V5ICYjNDM7IHNldCBjdXJyZW50L3JuZXh0XCYjMzQ7LCBzayxcbiYjNDM7XHRcdCAgICAgICAxMDAsIDEwMCwgMCwgMCwgMTAsIDEzLCAwKTtcbiYjNDM7XHR0cnlfZGVsZXRlX2tleShcJiMzNDtjbG9zZWQgc29ja2V0LCBmb3JjZS1kZWxldGUgY3VycmVudCBrZXlcJiMzNDssIHNrLCAxMCwgMTEsIDAsIDAsIDIwMCwgLTEsIDApO1xuJiM0MztcdHRyeV9kZWxldGVfa2V5KFwmIzM0O2Nsb3NlZCBzb2NrZXQsIGZvcmNlLWRlbGV0ZSBybmV4dCBrZXlcJiMzNDssIHNrLCAxMiwgMTMsIDAsIDAsIC0xLCAyMDAsIDApO1xuJiM0MztcdHRyeV9kZWxldGVfa2V5KFwmIzM0O2Nsb3NlZCBzb2NrZXQsIGRlbGV0ZSBjdXJyZW50JiM0MztybmV4dCBrZXlcJiMzNDssIHNrLFxuJiM0MztcdFx0ICAgICAgIDIwMCwgMjAwLCAwLCAwLCAtMSwgLTEsIEZBVUxUX0JVU1kpO1xuIFx0Y2xvc2Uoc2spO1xuIFxuIFx0c2sgPSBwcmVwYXJlX3NrKFx1MDAyNnRoaXNfaXBfZGVzdCwgMjAwLCAyMDApO1xuQEAgLTI3Miw2ICYjNDM7MjgwLDE4IEBAIHN0YXRpYyB2b2lkIGNoZWNrX2Nsb3NlZF9zb2NrZXQodm9pZClcbiBcdFx0XHRcdCAgdGhpc19pcF9kZXN0LCBERUZBVUxUX1RFU1RfUFJFRklYLFxuIFx0XHRcdFx0ICBmYWxzZSwgdHJ1ZSwgMjAsIDEwLCAwKTtcbiBcdGNsb3NlKHNrKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFzaG91bGRfc2tpcF90ZXN0KFwmIzM0O2Nsb3NlZCBzb2NrZXQsIGFkZCAmIzQzOyBkZWxldGUgVlJGLXNjb3BlZCBrZXlcJiMzNDssXG4mIzQzO1x0XHRcdCAgICAgIEtDT05GSUdfTkVUX1ZSRikpIHtcbiYjNDM7XHRcdHNrID0gcHJlcGFyZV9zayhcdTAwMjZ0aGlzX2lwX2Rlc3QsIDIwMCwgMjAwKTtcbiYjNDM7XHRcdGlmICh0ZXN0X2FkZF9rZXlfdnJmKHNrLCBTRUNPTkRfUEFTU1dPUkQsIFRDUF9BT19LRVlGX0lGSU5ERVgsXG4mIzQzO1x0XHRcdFx0ICAgICB0aGlzX2lwX2Rlc3QsIERFRkFVTFRfVEVTVF9QUkVGSVgsXG4mIzQzO1x0XHRcdFx0ICAgICB0ZXN0X3ZyZl9pZmluZGV4LCAyMDEsIDIwMSkpXG4mIzQzO1x0XHRcdHRlc3RfZXJyb3IoXCYjMzQ7dGVzdF9hZGRfa2V5X3ZyZigpXCYjMzQ7KTtcbiYjNDM7XHRcdHRyeV9kZWxldGVfa2V5KFwmIzM0O2Nsb3NlZCBzb2NrZXQsIGFkZCAmIzQzOyBkZWxldGUgVlJGLXNjb3BlZCBrZXlcJiMzNDssIHNrLCAyMDEsIDIwMSxcbiYjNDM7XHRcdFx0ICAgICAgIHRlc3RfdnJmX2lmaW5kZXgsIDAsIC0xLCAtMSwgMCk7XG4mIzQzO1x0XHRjbG9zZShzayk7XG4mIzQzO1x0fVxuIH1cbiBcbiBzdGF0aWMgdm9pZCBhc3NlcnRfbm9fY3VycmVudF9ybmV4dChjb25zdCBjaGFyICp0c3RfbXNnLCBpbnQgc2spXG5AQCAtMzIyLDggJiM0MzszNDIsOCBAQCBzdGF0aWMgdm9pZCBjaGVja19saXN0ZW5fc29ja2V0KHZvaWQpXG4gXHRpbnQgc2ssIGVycjtcbiBcbiBcdHNrID0gcHJlcGFyZV9sc2soXHUwMDI2dGhpc19pcF9kZXN0LCAyMDAsIDIwMCk7XG4tXHR0cnlfZGVsZXRlX2tleShcJiMzNDtsaXN0ZW4gc29ja2V0LCBkZWxldGUgYSBrZXlcJiMzNDssIHNrLCAyMDAsIDIwMCwgMCwgLTEsIC0xLCAwKTtcbi1cdHRyeV9kZWxldGVfa2V5KFwmIzM0O2xpc3RlbiBzb2NrZXQsIGRlbGV0ZSBhbGwga2V5c1wmIzM0Oywgc2ssIDEwMCwgMTAwLCAwLCAtMSwgLTEsIDApO1xuJiM0MztcdHRyeV9kZWxldGVfa2V5KFwmIzM0O2xpc3RlbiBzb2NrZXQsIGRlbGV0ZSBhIGtleVwmIzM0Oywgc2ssIDIwMCwgMjAwLCAwLCAwLCAtMSwgLTEsIDApO1xuJiM0MztcdHRyeV9kZWxldGVfa2V5KFwmIzM0O2xpc3RlbiBzb2NrZXQsIGRlbGV0ZSBhbGwga2V5c1wmIzM0Oywgc2ssIDEwMCwgMTAwLCAwLCAwLCAtMSwgLTEsIDApO1xuIFx0Y2xvc2Uoc2spO1xuIFxuIFx0c2sgPSBwcmVwYXJlX2xzayhcdTAwMjZ0aGlzX2lwX2Rlc3QsIDIwMCwgMjAwKTtcbkBAIC0zNDUsOCAmIzQzOzM2NSwxMCBAQCBzdGF0aWMgdm9pZCBjaGVja19saXN0ZW5fc29ja2V0KHZvaWQpXG4gXHRpZiAobGlzdGVuKHNrLCAxMCkpXG4gXHRcdHRlc3RfZXJyb3IoXCYjMzQ7bGlzdGVuKClcJiMzNDspO1xuIFx0YXNzZXJ0X25vX2N1cnJlbnRfcm5leHQoXCYjMzQ7bGlzdGVuKCkgYWZ0ZXIgY3VycmVudC9ybmV4dCBrZXlzIHNldFwmIzM0Oywgc2spO1xuLVx0dHJ5X2RlbGV0ZV9rZXkoXCYjMzQ7bGlzdGVuIHNvY2tldCwgZGVsZXRlIGN1cnJlbnQga2V5IGZyb20gYmVmb3JlIGxpc3RlbigpXCYjMzQ7LCBzaywgMTAwLCAxMDAsIDAsIC0xLCAtMSwgRkFVTFRfRklYTUUpO1xuLVx0dHJ5X2RlbGV0ZV9rZXkoXCYjMzQ7bGlzdGVuIHNvY2tldCwgZGVsZXRlIHJuZXh0IGtleSBmcm9tIGJlZm9yZSBsaXN0ZW4oKVwmIzM0Oywgc2ssIDIwMCwgMjAwLCAwLCAtMSwgLTEsIEZBVUxUX0ZJWE1FKTtcbiYjNDM7XHR0cnlfZGVsZXRlX2tleShcJiMzNDtsaXN0ZW4gc29ja2V0LCBkZWxldGUgY3VycmVudCBrZXkgZnJvbSBiZWZvcmUgbGlzdGVuKClcJiMzNDssIHNrLFxuJiM0MztcdFx0ICAgICAgIDEwMCwgMTAwLCAwLCAwLCAtMSwgLTEsIEZBVUxUX0ZJWE1FKTtcbiYjNDM7XHR0cnlfZGVsZXRlX2tleShcJiMzNDtsaXN0ZW4gc29ja2V0LCBkZWxldGUgcm5leHQga2V5IGZyb20gYmVmb3JlIGxpc3RlbigpXCYjMzQ7LCBzayxcbiYjNDM7XHRcdCAgICAgICAyMDAsIDIwMCwgMCwgMCwgLTEsIC0xLCBGQVVMVF9GSVhNRSk7XG4gXHRjbG9zZShzayk7XG4gXG4gXHRhc3NlcnRfbm9fdGNwX3JlcGFpcigpO1xuQEAgLTM1OSwxMyAmIzQzOzM4MSwxMyBAQCBzdGF0aWMgdm9pZCBjaGVja19saXN0ZW5fc29ja2V0KHZvaWQpXG4gXHRcdFx0IERFRkFVTFRfVEVTVF9QUkVGSVgsIDEyLCAxMykpXG4gXHRcdHRlc3RfZXJyb3IoXCYjMzQ7dGVzdF9hZGRfa2V5KClcJiMzNDspO1xuIFx0dHJ5X2RlbGV0ZV9rZXkoXCYjMzQ7bGlzdGVuIHNvY2tldCwgZGVsZXRlIGEga2V5ICYjNDM7IHNldCBjdXJyZW50L3JuZXh0XCYjMzQ7LCBzayxcbi1cdFx0ICAgICAgIDEwMCwgMTAwLCAwLCAxMCwgMTMsIEZBVUxUX0NVUlJORVhUKTtcbiYjNDM7XHRcdCAgICAgICAxMDAsIDEwMCwgMCwgMCwgMTAsIDEzLCBGQVVMVF9DVVJSTkVYVCk7XG4gXHR0cnlfZGVsZXRlX2tleShcJiMzNDtsaXN0ZW4gc29ja2V0LCBmb3JjZS1kZWxldGUgY3VycmVudCBrZXlcJiMzNDssIHNrLFxuLVx0XHQgICAgICAgMTAsIDExLCAwLCAyMDAsIC0xLCBGQVVMVF9DVVJSTkVYVCk7XG4mIzQzO1x0XHQgICAgICAgMTAsIDExLCAwLCAwLCAyMDAsIC0xLCBGQVVMVF9DVVJSTkVYVCk7XG4gXHR0cnlfZGVsZXRlX2tleShcJiMzNDtsaXN0ZW4gc29ja2V0LCBmb3JjZS1kZWxldGUgcm5leHQga2V5XCYjMzQ7LCBzayxcbi1cdFx0ICAgICAgIDEyLCAxMywgMCwgLTEsIDIwMCwgRkFVTFRfQ1VSUk5FWFQpO1xuJiM0MztcdFx0ICAgICAgIDEyLCAxMywgMCwgMCwgLTEsIDIwMCwgRkFVTFRfQ1VSUk5FWFQpO1xuIFx0dHJ5X2RlbGV0ZV9rZXkoXCYjMzQ7bGlzdGVuIHNvY2tldCwgZGVsZXRlIGEga2V5XCYjMzQ7LCBzayxcbi1cdFx0ICAgICAgIDIwMCwgMjAwLCAwLCAtMSwgLTEsIDApO1xuJiM0MztcdFx0ICAgICAgIDIwMCwgMjAwLCAwLCAwLCAtMSwgLTEsIDApO1xuIFx0Y2xvc2Uoc2spO1xuIFxuIFx0c2sgPSBwcmVwYXJlX2xzayhcdTAwMjZ0aGlzX2lwX2Rlc3QsIDIwMCwgMjAwKTtcbkBAIC0xMTMxLDcgJiM0MzsxMTUzLDYgQEAgc3RhdGljIHZvaWQgY2hlY2tfZXN0YWJsaXNoZWRfc29ja2V0KHZvaWQpXG4ge1xuIFx0dW5zaWduZWQgaW50IHBvcnQgPSB0ZXN0X3NlcnZlcl9wb3J0O1xuIFxuLVx0c2V0dXBfdnJmcygpO1xuIFx0dHJ5X2NsaWVudF9ydW4oXCYjMzQ7Y2xpZW50OiBDaGVjayBjdXJyZW50L3JuZXh0IGtleXMgdW5zZXQgYmVmb3JlIGNvbm5lY3QoKVwmIzM0OyxcbiBcdFx0ICAgICAgIHBvcnQmIzQzOyYjNDM7LCAyMCwgLTEsIC0xKTtcbiBcdHRyeV9jbGllbnRfcnVuKFwmIzM0O2NsaWVudDogQ2hlY2sgY3VycmVudC9ybmV4dCBrZXlzIHNldCBiZWZvcmUgY29ubmVjdCgpXCYjMzQ7LFxuQEAgLTExNTAsNiAmIzQzOzExNzEsNyBAQCBzdGF0aWMgdm9pZCAqY2xpZW50X2ZuKHZvaWQgKmFyZylcbiB7XG4gXHRpZiAoaW5ldF9wdG9uKFRFU1RfRkFNSUxZLCBURVNUX1dST05HX0lQLCBcdTAwMjZ3cm9uZ19hZGRyKSAhPSAxKVxuIFx0XHR0ZXN0X2Vycm9yKFwmIzM0O0NhbiYjMzk7dCBjb252ZXJ0IGlwIGFkZHJlc3MgJXNcJiMzNDssIFRFU1RfV1JPTkdfSVApO1xuJiM0MztcdHNldHVwX3ZyZnMoKTtcbiBcdGNoZWNrX2Nsb3NlZF9zb2NrZXQoKTtcbiBcdGNoZWNrX2xpc3Rlbl9zb2NrZXQoKTtcbiBcdGNoZWNrX2VzdGFibGlzaGVkX3NvY2tldCgpO1xuQEAgLTExNTgsNiAmIzQzOzExODAsNiBAQCBzdGF0aWMgdm9pZCAqY2xpZW50X2ZuKHZvaWQgKmFyZylcbiBcbiBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIHtcbi1cdHRlc3RfaW5pdCgxMjEsIHNlcnZlcl9mbiwgY2xpZW50X2ZuKTtcbiYjNDM7XHR0ZXN0X2luaXQoMTIyLCBzZXJ2ZXJfZm4sIGNsaWVudF9mbik7XG4gXHRyZXR1cm4gMDtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvYW9saWIuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vbGliL2FvbGliLmhcbmluZGV4IGViYjI4OTljMTJmZTAuLjUzYmUxNzQ0MjM3ZWUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9hb2xpYi5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9hb2xpYi5oXG5AQCAtNDA0LDcgJiM0Mzs0MDQsOCBAQCBzdGF0aWMgaW5saW5lIGludCB0ZXN0X3ByZXBhcmVfZGVmX2tleShzdHJ1Y3QgdGNwX2FvX2FkZCAqYW8sXG4gXG4gZXh0ZXJuIGludCB0ZXN0X2dldF9vbmVfYW8oaW50IHNrLCBzdHJ1Y3QgdGNwX2FvX2dldHNvY2tvcHQgKm91dCxcbiBcdFx0XHQgICB2b2lkICphZGRyLCBzaXplX3QgYWRkcl9zeixcbi1cdFx0XHQgICB1aW50OF90IHByZWZpeCwgdWludDhfdCBzbmRpZCwgdWludDhfdCByY3ZpZCk7XG4mIzQzO1x0XHRcdCAgIHVpbnQ4X3QgcHJlZml4LCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkLFxuJiM0MztcdFx0XHQgICB1aW50OF90IGtleWZsYWdzLCBpbnQgaWZpbmRleCk7XG4gZXh0ZXJuIGludCB0ZXN0X2dldF9hb19pbmZvKGludCBzaywgc3RydWN0IHRjcF9hb19pbmZvX29wdCAqb3V0KTtcbiBleHRlcm4gaW50IHRlc3Rfc2V0X2FvX2luZm8oaW50IHNrLCBzdHJ1Y3QgdGNwX2FvX2luZm9fb3B0ICppbik7XG4gZXh0ZXJuIGludCB0ZXN0X2NtcF9nZXRzb2Nrb3B0X3NldHNvY2tvcHQoY29uc3Qgc3RydWN0IHRjcF9hb19hZGQgKmEsXG5AQCAtNDE4LDcgJiM0Mzs0MTksOCBAQCBzdGF0aWMgaW5saW5lIGludCB0ZXN0X3ZlcmlmeV9zb2NrZXRfa2V5KGludCBzaywgc3RydWN0IHRjcF9hb19hZGQgKmtleSlcbiBcdGludCBlcnI7XG4gXG4gXHRlcnIgPSB0ZXN0X2dldF9vbmVfYW8oc2ssIFx1MDAyNmtleTIsIFx1MDAyNmtleS1cdTAwM2VhZGRyLCBzaXplb2Yoa2V5LVx1MDAzZWFkZHIpLFxuLVx0XHRcdCAgICAgIGtleS1cdTAwM2VwcmVmaXgsIGtleS1cdTAwM2VzbmRpZCwga2V5LVx1MDAzZXJjdmlkKTtcbiYjNDM7XHRcdFx0ICAgICAga2V5LVx1MDAzZXByZWZpeCwga2V5LVx1MDAzZXNuZGlkLCBrZXktXHUwMDNlcmN2aWQsXG4mIzQzO1x0XHRcdCAgICAgIGtleS1cdTAwM2VrZXlmbGFncywga2V5LVx1MDAzZWlmaW5kZXgpO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9zb2NrLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9zb2NrLmNcbmluZGV4IGVmOGU5MDMxZDQ3YTMuLjJlN2IwNmExYTE1NjcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9zb2NrLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vbGliL3NvY2suY1xuQEAgLTI1Miw3ICYjNDM7MjUyLDcgQEAgc3RhdGljIGludCB0ZXN0X2dldF9hb19rZXlzX25yKGludCBzaylcbiBcbiBpbnQgdGVzdF9nZXRfb25lX2FvKGludCBzaywgc3RydWN0IHRjcF9hb19nZXRzb2Nrb3B0ICpvdXQsXG4gXHRcdHZvaWQgKmFkZHIsIHNpemVfdCBhZGRyX3N6LCB1aW50OF90IHByZWZpeCxcbi1cdFx0dWludDhfdCBzbmRpZCwgdWludDhfdCByY3ZpZClcbiYjNDM7XHRcdHVpbnQ4X3Qgc25kaWQsIHVpbnQ4X3QgcmN2aWQsIHVpbnQ4X3Qga2V5ZmxhZ3MsIGludCBpZmluZGV4KVxuIHtcbiBcdHN0cnVjdCB0Y3BfYW9fZ2V0c29ja29wdCB0bXAgPSB7fTtcbiBcdHNvY2tsZW5fdCB0bXBfc3ogPSBzaXplb2YodG1wKTtcbkBAIC0yNjIsNiAmIzQzOzI2Miw4IEBAIGludCB0ZXN0X2dldF9vbmVfYW8oaW50IHNrLCBzdHJ1Y3QgdGNwX2FvX2dldHNvY2tvcHQgKm91dCxcbiBcdHRtcC5wcmVmaXggPSBwcmVmaXg7XG4gXHR0bXAuc25kaWQgID0gc25kaWQ7XG4gXHR0bXAucmN2aWQgID0gcmN2aWQ7XG4mIzQzO1x0dG1wLmtleWZsYWdzID0ga2V5ZmxhZ3M7XG4mIzQzO1x0dG1wLmlmaW5kZXggPSBpZmluZGV4O1xuIFx0dG1wLm5rZXlzICA9IDE7XG4gXG4gXHRyZXQgPSBnZXRzb2Nrb3B0KHNrLCBJUFBST1RPX1RDUCwgVENQX0FPX0dFVF9LRVlTLCBcdTAwMjZ0bXAsIFx1MDAyNnRtcF9zeik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTU6NTY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RDUF9BTyYjMzQ7LAogICAgJiMzNDtORVRfVlJGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGNwX3BhcnNlX2FvJiMzNDssCiAgICAmIzM0O3RjcF92NF9wYXJzZV9hbyYjMzQ7LAogICAgJiMzNDt0Y3BfdjZfcGFyc2VfYW8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gVENQLUFPIHNldHNvY2tvcHQgaGFuZGxpbmcgd2hlcmUgYGNtZC5pZmluZGV4YCB3YXMgbm90IGFzc2lnbmVkIHRvIGBsM2luZGV4YCB3aGVuIGRlbGV0aW5nIGEga2V5LCBwcmV2ZW50aW5nIGRlbGV0aW9uIG9mIGludGVyZmFjZS1zY29wZWQga2V5cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDExMTdjOWZkZjhiYzA3MjRjMjAxN2IyZDU4OTcyY2NmOTc5YzMzM2EKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyAyMSAxNTo1Njo0MCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9hby5jIGIvbmV0L2lwdjQvdGNwX2FvLmMKaW5kZXggNTA5NDI2NzQ0N2FlZS4uMjY4NjQ2MjFlNmRlZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2FvLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvdGNwX2FvLmMKQEAgLTE4MzQsNiAmIzQzOzE4MzQsOSBAQCBzdGF0aWMgaW50IHRjcF9hb19kZWxfY21kKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgc2hvcnQgaW50IGZhbWlseSwKIAlpZiAoY21kLmlmaW5kZXggJmFtcDsmYW1wOyAhKGNtZC5rZXlmbGFncyAmYW1wOyBUQ1BfQU9fS0VZRl9JRklOREVYKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKJiM0MzsJaWYgKGNtZC5rZXlmbGFncyAmYW1wOyBUQ1BfQU9fS0VZRl9JRklOREVYKQomIzQzOwkJbDNpbmRleCA9IGNtZC5pZmluZGV4OwomIzQzOwogCWFvX2luZm8gPSBzZXRzb2Nrb3B0X2FvX2luZm8oc2spOwogCWlmIChJU19FUlIoYW9faW5mbykpCiAJCXJldHVybiBQVFJfRVJSKGFvX2luZm8pOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9rZXktbWFuYWdlbWVudC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9rZXktbWFuYWdlbWVudC5jCmluZGV4IGQ4NmJiMzgwYjc5ZjcuLjFlMDFlODA1ZGJhNzIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8va2V5LW1hbmFnZW1lbnQuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2tleS1tYW5hZ2VtZW50LmMKQEAgLTYzLDcgJiM0Mzs2Myw4IEBAIHN0YXRpYyBpbnQgcHJlcGFyZV9sc2sodW5pb24gdGNwX2FkZHIgKmFkZHIsIHVpbnQ4X3Qgc25kaWQsIHVpbnQ4X3QgcmN2aWQpCiAJcmV0dXJuIHNrOwogfQogCi1zdGF0aWMgaW50IHRlc3RfZGVsX2tleShpbnQgc2ssIHVpbnQ4X3Qgc25kaWQsIHVpbnQ4X3QgcmN2aWQsIGJvb2wgYXN5bmMsCiYjNDM7c3RhdGljIGludCB0ZXN0X2RlbF9rZXkoaW50IHNrLCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkLCBpbnQgaWZpbmRleCwKJiM0MzsJCQlib29sIGFzeW5jLAogCQkJaW50IGN1cnJlbnRfa2V5LCBpbnQgcm5leHRfa2V5KQogewogCXN0cnVjdCB0Y3BfYW9faW5mb19vcHQgYW9faW5mbyA9IHt9OwpAQCAtNzYsNiAmIzQzOzc3LDEwIEBAIHN0YXRpYyBpbnQgdGVzdF9kZWxfa2V5KGludCBzaywgdWludDhfdCBzbmRpZCwgdWludDhfdCByY3ZpZCwgYm9vbCBhc3luYywKIAlkZWwucHJlZml4ID0gREVGQVVMVF9URVNUX1BSRUZJWDsKIAlkZWwuc25kaWQgPSBzbmRpZDsKIAlkZWwucmN2aWQgPSByY3ZpZDsKJiM0MzsJaWYgKGlmaW5kZXgpIHsKJiM0MzsJCWRlbC5rZXlmbGFncyA9IFRDUF9BT19LRVlGX0lGSU5ERVg7CiYjNDM7CQlkZWwuaWZpbmRleCA9IGlmaW5kZXg7CiYjNDM7CX0KIAogCWlmIChjdXJyZW50X2tleSAmZ3Q7PSAwKSB7CiAJCWRlbC5zZXRfY3VycmVudCA9IDE7CkBAIC05NSw3ICYjNDM7MTAwLDggQEAgc3RhdGljIGludCB0ZXN0X2RlbF9rZXkoaW50IHNrLCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkLCBib29sIGFzeW5jLAogCiAJdGNwX2FkZHJfdG9fc29ja2FkZHJfaW4oJmFtcDtzb2NrYWRkciwgJmFtcDt0aGlzX2lwX2Rlc3QsIDApOwogCWVyciA9IHRlc3RfZ2V0X29uZV9hbyhzaywgJmFtcDtrZXksICZhbXA7c29ja2FkZHIsIHNpemVvZihzb2NrYWRkciksCi0JCQkgICAgICBERUZBVUxUX1RFU1RfUFJFRklYLCBzbmRpZCwgcmN2aWQpOwomIzQzOwkJCSAgICAgIERFRkFVTFRfVEVTVF9QUkVGSVgsIHNuZGlkLCByY3ZpZCwKJiM0MzsJCQkgICAgICBkZWwua2V5ZmxhZ3MsIGRlbC5pZmluZGV4KTsKIAlpZiAoIWVycikKIAkJcmV0dXJuIC1FRVhJU1Q7CiAJaWYgKGVyciAhPSAtRTJCSUcpCkBAIC0xMTIsMTIgJiM0MzsxMTgsMTIgQEAgc3RhdGljIGludCB0ZXN0X2RlbF9rZXkoaW50IHNrLCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkLCBib29sIGFzeW5jLAogfQogCiBzdGF0aWMgdm9pZCB0cnlfZGVsZXRlX2tleShjaGFyICp0c3RfbmFtZSwgaW50IHNrLCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkLAotCQkJICAgYm9vbCBhc3luYywgaW50IGN1cnJlbnRfa2V5LCBpbnQgcm5leHRfa2V5LAomIzQzOwkJCSAgIGludCBpZmluZGV4LCBib29sIGFzeW5jLCBpbnQgY3VycmVudF9rZXksIGludCBybmV4dF9rZXksCiAJCQkgICBmYXVsdF90IGluaikKIHsKIAlpbnQgZXJyOwogCi0JZXJyID0gdGVzdF9kZWxfa2V5KHNrLCBzbmRpZCwgcmN2aWQsIGFzeW5jLCBjdXJyZW50X2tleSwgcm5leHRfa2V5KTsKJiM0MzsJZXJyID0gdGVzdF9kZWxfa2V5KHNrLCBzbmRpZCwgcmN2aWQsIGlmaW5kZXgsIGFzeW5jLCBjdXJyZW50X2tleSwgcm5leHRfa2V5KTsKIAlpZiAoKGVyciA9PSAtRUJVU1kgJmFtcDsmYW1wOyBmYXVsdChCVVNZKSkgfHwgKGVyciA9PSAtRUlOVkFMICZhbXA7JmFtcDsgZmF1bHQoQ1VSUk5FWFQpKSkgewogCQl0ZXN0X29rKCYjMzQ7JXM6IGtleSBkZWxldGlvbiB3YXMgcHJldmVudGVkJiMzNDssIHRzdF9uYW1lKTsKIAkJcmV0dXJuOwpAQCAtMjM2LDE1ICYjNDM7MjQyLDE1IEBAIHN0YXRpYyB2b2lkIGNoZWNrX2Nsb3NlZF9zb2NrZXQodm9pZCkKIAlpbnQgc2s7CiAKIAlzayA9IHByZXBhcmVfc2soJmFtcDt0aGlzX2lwX2Rlc3QsIDIwMCwgMjAwKTsKLQl0cnlfZGVsZXRlX2tleSgmIzM0O2Nsb3NlZCBzb2NrZXQsIGRlbGV0ZSBhIGtleSYjMzQ7LCBzaywgMjAwLCAyMDAsIDAsIC0xLCAtMSwgMCk7Ci0JdHJ5X2RlbGV0ZV9rZXkoJiMzNDtjbG9zZWQgc29ja2V0LCBkZWxldGUgYWxsIGtleXMmIzM0Oywgc2ssIDEwMCwgMTAwLCAwLCAtMSwgLTEsIDApOwomIzQzOwl0cnlfZGVsZXRlX2tleSgmIzM0O2Nsb3NlZCBzb2NrZXQsIGRlbGV0ZSBhIGtleSYjMzQ7LCBzaywgMjAwLCAyMDAsIDAsIDAsIC0xLCAtMSwgMCk7CiYjNDM7CXRyeV9kZWxldGVfa2V5KCYjMzQ7Y2xvc2VkIHNvY2tldCwgZGVsZXRlIGFsbCBrZXlzJiMzNDssIHNrLCAxMDAsIDEwMCwgMCwgMCwgLTEsIC0xLCAwKTsKIAljbG9zZShzayk7CiAKIAlzayA9IHByZXBhcmVfc2soJmFtcDt0aGlzX2lwX2Rlc3QsIDIwMCwgMjAwKTsKIAlpZiAodGVzdF9zZXRfa2V5KHNrLCAxMDAsIDIwMCkpCiAJCXRlc3RfZXJyb3IoJiMzNDtmYWlsZWQgdG8gc2V0IGN1cnJlbnQvcm5leHQga2V5cyYjMzQ7KTsKLQl0cnlfZGVsZXRlX2tleSgmIzM0O2Nsb3NlZCBzb2NrZXQsIGRlbGV0ZSBjdXJyZW50IGtleSYjMzQ7LCBzaywgMTAwLCAxMDAsIDAsIC0xLCAtMSwgRkFVTFRfQlVTWSk7Ci0JdHJ5X2RlbGV0ZV9rZXkoJiMzNDtjbG9zZWQgc29ja2V0LCBkZWxldGUgcm5leHQga2V5JiMzNDssIHNrLCAyMDAsIDIwMCwgMCwgLTEsIC0xLCBGQVVMVF9CVVNZKTsKJiM0MzsJdHJ5X2RlbGV0ZV9rZXkoJiMzNDtjbG9zZWQgc29ja2V0LCBkZWxldGUgY3VycmVudCBrZXkmIzM0Oywgc2ssIDEwMCwgMTAwLCAwLCAwLCAtMSwgLTEsIEZBVUxUX0JVU1kpOwomIzQzOwl0cnlfZGVsZXRlX2tleSgmIzM0O2Nsb3NlZCBzb2NrZXQsIGRlbGV0ZSBybmV4dCBrZXkmIzM0Oywgc2ssIDIwMCwgMjAwLCAwLCAwLCAtMSwgLTEsIEZBVUxUX0JVU1kpOwogCWNsb3NlKHNrKTsKIAogCXNrID0gcHJlcGFyZV9zaygmYW1wO3RoaXNfaXBfZGVzdCwgMjAwLCAyMDApOwpAQCAtMjU0LDEwICYjNDM7MjYwLDEyIEBAIHN0YXRpYyB2b2lkIGNoZWNrX2Nsb3NlZF9zb2NrZXQodm9pZCkKIAlpZiAodGVzdF9hZGRfa2V5KHNrLCAmIzM0O0dsb3J5IHRvIFVrcmFpbmUhJiMzNDssIHRoaXNfaXBfZGVzdCwKIAkJCSBERUZBVUxUX1RFU1RfUFJFRklYLCAxMiwgMTMpKQogCQl0ZXN0X2Vycm9yKCYjMzQ7dGVzdF9hZGRfa2V5KCkmIzM0Oyk7Ci0JdHJ5X2RlbGV0ZV9rZXkoJiMzNDtjbG9zZWQgc29ja2V0LCBkZWxldGUgYSBrZXkgJiM0Mzsgc2V0IGN1cnJlbnQvcm5leHQmIzM0Oywgc2ssIDEwMCwgMTAwLCAwLCAxMCwgMTMsIDApOwotCXRyeV9kZWxldGVfa2V5KCYjMzQ7Y2xvc2VkIHNvY2tldCwgZm9yY2UtZGVsZXRlIGN1cnJlbnQga2V5JiMzNDssIHNrLCAxMCwgMTEsIDAsIDIwMCwgLTEsIDApOwotCXRyeV9kZWxldGVfa2V5KCYjMzQ7Y2xvc2VkIHNvY2tldCwgZm9yY2UtZGVsZXRlIHJuZXh0IGtleSYjMzQ7LCBzaywgMTIsIDEzLCAwLCAtMSwgMjAwLCAwKTsKLQl0cnlfZGVsZXRlX2tleSgmIzM0O2Nsb3NlZCBzb2NrZXQsIGRlbGV0ZSBjdXJyZW50JiM0MztybmV4dCBrZXkmIzM0Oywgc2ssIDIwMCwgMjAwLCAwLCAtMSwgLTEsIEZBVUxUX0JVU1kpOwomIzQzOwl0cnlfZGVsZXRlX2tleSgmIzM0O2Nsb3NlZCBzb2NrZXQsIGRlbGV0ZSBhIGtleSAmIzQzOyBzZXQgY3VycmVudC9ybmV4dCYjMzQ7LCBzaywKJiM0MzsJCSAgICAgICAxMDAsIDEwMCwgMCwgMCwgMTAsIDEzLCAwKTsKJiM0MzsJdHJ5X2RlbGV0ZV9rZXkoJiMzNDtjbG9zZWQgc29ja2V0LCBmb3JjZS1kZWxldGUgY3VycmVudCBrZXkmIzM0Oywgc2ssIDEwLCAxMSwgMCwgMCwgMjAwLCAtMSwgMCk7CiYjNDM7CXRyeV9kZWxldGVfa2V5KCYjMzQ7Y2xvc2VkIHNvY2tldCwgZm9yY2UtZGVsZXRlIHJuZXh0IGtleSYjMzQ7LCBzaywgMTIsIDEzLCAwLCAwLCAtMSwgMjAwLCAwKTsKJiM0MzsJdHJ5X2RlbGV0ZV9rZXkoJiMzNDtjbG9zZWQgc29ja2V0LCBkZWxldGUgY3VycmVudCYjNDM7cm5leHQga2V5JiMzNDssIHNrLAomIzQzOwkJICAgICAgIDIwMCwgMjAwLCAwLCAwLCAtMSwgLTEsIEZBVUxUX0JVU1kpOwogCWNsb3NlKHNrKTsKIAogCXNrID0gcHJlcGFyZV9zaygmYW1wO3RoaXNfaXBfZGVzdCwgMjAwLCAyMDApOwpAQCAtMjcyLDYgJiM0MzsyODAsMTggQEAgc3RhdGljIHZvaWQgY2hlY2tfY2xvc2VkX3NvY2tldCh2b2lkKQogCQkJCSAgdGhpc19pcF9kZXN0LCBERUZBVUxUX1RFU1RfUFJFRklYLAogCQkJCSAgZmFsc2UsIHRydWUsIDIwLCAxMCwgMCk7CiAJY2xvc2Uoc2spOwomIzQzOwomIzQzOwlpZiAoIXNob3VsZF9za2lwX3Rlc3QoJiMzNDtjbG9zZWQgc29ja2V0LCBhZGQgJiM0MzsgZGVsZXRlIFZSRi1zY29wZWQga2V5JiMzNDssCiYjNDM7CQkJICAgICAgS0NPTkZJR19ORVRfVlJGKSkgewomIzQzOwkJc2sgPSBwcmVwYXJlX3NrKCZhbXA7dGhpc19pcF9kZXN0LCAyMDAsIDIwMCk7CiYjNDM7CQlpZiAodGVzdF9hZGRfa2V5X3ZyZihzaywgU0VDT05EX1BBU1NXT1JELCBUQ1BfQU9fS0VZRl9JRklOREVYLAomIzQzOwkJCQkgICAgIHRoaXNfaXBfZGVzdCwgREVGQVVMVF9URVNUX1BSRUZJWCwKJiM0MzsJCQkJICAgICB0ZXN0X3ZyZl9pZmluZGV4LCAyMDEsIDIwMSkpCiYjNDM7CQkJdGVzdF9lcnJvcigmIzM0O3Rlc3RfYWRkX2tleV92cmYoKSYjMzQ7KTsKJiM0MzsJCXRyeV9kZWxldGVfa2V5KCYjMzQ7Y2xvc2VkIHNvY2tldCwgYWRkICYjNDM7IGRlbGV0ZSBWUkYtc2NvcGVkIGtleSYjMzQ7LCBzaywgMjAxLCAyMDEsCiYjNDM7CQkJICAgICAgIHRlc3RfdnJmX2lmaW5kZXgsIDAsIC0xLCAtMSwgMCk7CiYjNDM7CQljbG9zZShzayk7CiYjNDM7CX0KIH0KIAogc3RhdGljIHZvaWQgYXNzZXJ0X25vX2N1cnJlbnRfcm5leHQoY29uc3QgY2hhciAqdHN0X21zZywgaW50IHNrKQpAQCAtMzIyLDggJiM0MzszNDIsOCBAQCBzdGF0aWMgdm9pZCBjaGVja19saXN0ZW5fc29ja2V0KHZvaWQpCiAJaW50IHNrLCBlcnI7CiAKIAlzayA9IHByZXBhcmVfbHNrKCZhbXA7dGhpc19pcF9kZXN0LCAyMDAsIDIwMCk7Ci0JdHJ5X2RlbGV0ZV9rZXkoJiMzNDtsaXN0ZW4gc29ja2V0LCBkZWxldGUgYSBrZXkmIzM0Oywgc2ssIDIwMCwgMjAwLCAwLCAtMSwgLTEsIDApOwotCXRyeV9kZWxldGVfa2V5KCYjMzQ7bGlzdGVuIHNvY2tldCwgZGVsZXRlIGFsbCBrZXlzJiMzNDssIHNrLCAxMDAsIDEwMCwgMCwgLTEsIC0xLCAwKTsKJiM0MzsJdHJ5X2RlbGV0ZV9rZXkoJiMzNDtsaXN0ZW4gc29ja2V0LCBkZWxldGUgYSBrZXkmIzM0Oywgc2ssIDIwMCwgMjAwLCAwLCAwLCAtMSwgLTEsIDApOwomIzQzOwl0cnlfZGVsZXRlX2tleSgmIzM0O2xpc3RlbiBzb2NrZXQsIGRlbGV0ZSBhbGwga2V5cyYjMzQ7LCBzaywgMTAwLCAxMDAsIDAsIDAsIC0xLCAtMSwgMCk7CiAJY2xvc2Uoc2spOwogCiAJc2sgPSBwcmVwYXJlX2xzaygmYW1wO3RoaXNfaXBfZGVzdCwgMjAwLCAyMDApOwpAQCAtMzQ1LDggJiM0MzszNjUsMTAgQEAgc3RhdGljIHZvaWQgY2hlY2tfbGlzdGVuX3NvY2tldCh2b2lkKQogCWlmIChsaXN0ZW4oc2ssIDEwKSkKIAkJdGVzdF9lcnJvcigmIzM0O2xpc3RlbigpJiMzNDspOwogCWFzc2VydF9ub19jdXJyZW50X3JuZXh0KCYjMzQ7bGlzdGVuKCkgYWZ0ZXIgY3VycmVudC9ybmV4dCBrZXlzIHNldCYjMzQ7LCBzayk7Ci0JdHJ5X2RlbGV0ZV9rZXkoJiMzNDtsaXN0ZW4gc29ja2V0LCBkZWxldGUgY3VycmVudCBrZXkgZnJvbSBiZWZvcmUgbGlzdGVuKCkmIzM0Oywgc2ssIDEwMCwgMTAwLCAwLCAtMSwgLTEsIEZBVUxUX0ZJWE1FKTsKLQl0cnlfZGVsZXRlX2tleSgmIzM0O2xpc3RlbiBzb2NrZXQsIGRlbGV0ZSBybmV4dCBrZXkgZnJvbSBiZWZvcmUgbGlzdGVuKCkmIzM0Oywgc2ssIDIwMCwgMjAwLCAwLCAtMSwgLTEsIEZBVUxUX0ZJWE1FKTsKJiM0MzsJdHJ5X2RlbGV0ZV9rZXkoJiMzNDtsaXN0ZW4gc29ja2V0LCBkZWxldGUgY3VycmVudCBrZXkgZnJvbSBiZWZvcmUgbGlzdGVuKCkmIzM0Oywgc2ssCiYjNDM7CQkgICAgICAgMTAwLCAxMDAsIDAsIDAsIC0xLCAtMSwgRkFVTFRfRklYTUUpOwomIzQzOwl0cnlfZGVsZXRlX2tleSgmIzM0O2xpc3RlbiBzb2NrZXQsIGRlbGV0ZSBybmV4dCBrZXkgZnJvbSBiZWZvcmUgbGlzdGVuKCkmIzM0Oywgc2ssCiYjNDM7CQkgICAgICAgMjAwLCAyMDAsIDAsIDAsIC0xLCAtMSwgRkFVTFRfRklYTUUpOwogCWNsb3NlKHNrKTsKIAogCWFzc2VydF9ub190Y3BfcmVwYWlyKCk7CkBAIC0zNTksMTMgJiM0MzszODEsMTMgQEAgc3RhdGljIHZvaWQgY2hlY2tfbGlzdGVuX3NvY2tldCh2b2lkKQogCQkJIERFRkFVTFRfVEVTVF9QUkVGSVgsIDEyLCAxMykpCiAJCXRlc3RfZXJyb3IoJiMzNDt0ZXN0X2FkZF9rZXkoKSYjMzQ7KTsKIAl0cnlfZGVsZXRlX2tleSgmIzM0O2xpc3RlbiBzb2NrZXQsIGRlbGV0ZSBhIGtleSAmIzQzOyBzZXQgY3VycmVudC9ybmV4dCYjMzQ7LCBzaywKLQkJICAgICAgIDEwMCwgMTAwLCAwLCAxMCwgMTMsIEZBVUxUX0NVUlJORVhUKTsKJiM0MzsJCSAgICAgICAxMDAsIDEwMCwgMCwgMCwgMTAsIDEzLCBGQVVMVF9DVVJSTkVYVCk7CiAJdHJ5X2RlbGV0ZV9rZXkoJiMzNDtsaXN0ZW4gc29ja2V0LCBmb3JjZS1kZWxldGUgY3VycmVudCBrZXkmIzM0Oywgc2ssCi0JCSAgICAgICAxMCwgMTEsIDAsIDIwMCwgLTEsIEZBVUxUX0NVUlJORVhUKTsKJiM0MzsJCSAgICAgICAxMCwgMTEsIDAsIDAsIDIwMCwgLTEsIEZBVUxUX0NVUlJORVhUKTsKIAl0cnlfZGVsZXRlX2tleSgmIzM0O2xpc3RlbiBzb2NrZXQsIGZvcmNlLWRlbGV0ZSBybmV4dCBrZXkmIzM0Oywgc2ssCi0JCSAgICAgICAxMiwgMTMsIDAsIC0xLCAyMDAsIEZBVUxUX0NVUlJORVhUKTsKJiM0MzsJCSAgICAgICAxMiwgMTMsIDAsIDAsIC0xLCAyMDAsIEZBVUxUX0NVUlJORVhUKTsKIAl0cnlfZGVsZXRlX2tleSgmIzM0O2xpc3RlbiBzb2NrZXQsIGRlbGV0ZSBhIGtleSYjMzQ7LCBzaywKLQkJICAgICAgIDIwMCwgMjAwLCAwLCAtMSwgLTEsIDApOwomIzQzOwkJICAgICAgIDIwMCwgMjAwLCAwLCAwLCAtMSwgLTEsIDApOwogCWNsb3NlKHNrKTsKIAogCXNrID0gcHJlcGFyZV9sc2soJmFtcDt0aGlzX2lwX2Rlc3QsIDIwMCwgMjAwKTsKQEAgLTExMzEsNyAmIzQzOzExNTMsNiBAQCBzdGF0aWMgdm9pZCBjaGVja19lc3RhYmxpc2hlZF9zb2NrZXQodm9pZCkKIHsKIAl1bnNpZ25lZCBpbnQgcG9ydCA9IHRlc3Rfc2VydmVyX3BvcnQ7CiAKLQlzZXR1cF92cmZzKCk7CiAJdHJ5X2NsaWVudF9ydW4oJiMzNDtjbGllbnQ6IENoZWNrIGN1cnJlbnQvcm5leHQga2V5cyB1bnNldCBiZWZvcmUgY29ubmVjdCgpJiMzNDssCiAJCSAgICAgICBwb3J0JiM0MzsmIzQzOywgMjAsIC0xLCAtMSk7CiAJdHJ5X2NsaWVudF9ydW4oJiMzNDtjbGllbnQ6IENoZWNrIGN1cnJlbnQvcm5leHQga2V5cyBzZXQgYmVmb3JlIGNvbm5lY3QoKSYjMzQ7LApAQCAtMTE1MCw2ICYjNDM7MTE3MSw3IEBAIHN0YXRpYyB2b2lkICpjbGllbnRfZm4odm9pZCAqYXJnKQogewogCWlmIChpbmV0X3B0b24oVEVTVF9GQU1JTFksIFRFU1RfV1JPTkdfSVAsICZhbXA7d3JvbmdfYWRkcikgIT0gMSkKIAkJdGVzdF9lcnJvcigmIzM0O0NhbiYjMzk7dCBjb252ZXJ0IGlwIGFkZHJlc3MgJXMmIzM0OywgVEVTVF9XUk9OR19JUCk7CiYjNDM7CXNldHVwX3ZyZnMoKTsKIAljaGVja19jbG9zZWRfc29ja2V0KCk7CiAJY2hlY2tfbGlzdGVuX3NvY2tldCgpOwogCWNoZWNrX2VzdGFibGlzaGVkX3NvY2tldCgpOwpAQCAtMTE1OCw2ICYjNDM7MTE4MCw2IEBAIHN0YXRpYyB2b2lkICpjbGllbnRfZm4odm9pZCAqYXJnKQogCiBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogewotCXRlc3RfaW5pdCgxMjEsIHNlcnZlcl9mbiwgY2xpZW50X2ZuKTsKJiM0MzsJdGVzdF9pbml0KDEyMiwgc2VydmVyX2ZuLCBjbGllbnRfZm4pOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvYW9saWIuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vbGliL2FvbGliLmgKaW5kZXggZWJiMjg5OWMxMmZlMC4uNTNiZTE3NDQyMzdlZSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvYW9saWIuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9hb2xpYi5oCkBAIC00MDQsNyAmIzQzOzQwNCw4IEBAIHN0YXRpYyBpbmxpbmUgaW50IHRlc3RfcHJlcGFyZV9kZWZfa2V5KHN0cnVjdCB0Y3BfYW9fYWRkICphbywKIAogZXh0ZXJuIGludCB0ZXN0X2dldF9vbmVfYW8oaW50IHNrLCBzdHJ1Y3QgdGNwX2FvX2dldHNvY2tvcHQgKm91dCwKIAkJCSAgIHZvaWQgKmFkZHIsIHNpemVfdCBhZGRyX3N6LAotCQkJICAgdWludDhfdCBwcmVmaXgsIHVpbnQ4X3Qgc25kaWQsIHVpbnQ4X3QgcmN2aWQpOwomIzQzOwkJCSAgIHVpbnQ4X3QgcHJlZml4LCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkLAomIzQzOwkJCSAgIHVpbnQ4X3Qga2V5ZmxhZ3MsIGludCBpZmluZGV4KTsKIGV4dGVybiBpbnQgdGVzdF9nZXRfYW9faW5mbyhpbnQgc2ssIHN0cnVjdCB0Y3BfYW9faW5mb19vcHQgKm91dCk7CiBleHRlcm4gaW50IHRlc3Rfc2V0X2FvX2luZm8oaW50IHNrLCBzdHJ1Y3QgdGNwX2FvX2luZm9fb3B0ICppbik7CiBleHRlcm4gaW50IHRlc3RfY21wX2dldHNvY2tvcHRfc2V0c29ja29wdChjb25zdCBzdHJ1Y3QgdGNwX2FvX2FkZCAqYSwKQEAgLTQxOCw3ICYjNDM7NDE5LDggQEAgc3RhdGljIGlubGluZSBpbnQgdGVzdF92ZXJpZnlfc29ja2V0X2tleShpbnQgc2ssIHN0cnVjdCB0Y3BfYW9fYWRkICprZXkpCiAJaW50IGVycjsKIAogCWVyciA9IHRlc3RfZ2V0X29uZV9hbyhzaywgJmFtcDtrZXkyLCAmYW1wO2tleS0mZ3Q7YWRkciwgc2l6ZW9mKGtleS0mZ3Q7YWRkciksCi0JCQkgICAgICBrZXktJmd0O3ByZWZpeCwga2V5LSZndDtzbmRpZCwga2V5LSZndDtyY3ZpZCk7CiYjNDM7CQkJICAgICAga2V5LSZndDtwcmVmaXgsIGtleS0mZ3Q7c25kaWQsIGtleS0mZ3Q7cmN2aWQsCiYjNDM7CQkJICAgICAga2V5LSZndDtrZXlmbGFncywga2V5LSZndDtpZmluZGV4KTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9zb2NrLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9zb2NrLmMKaW5kZXggZWY4ZTkwMzFkNDdhMy4uMmU3YjA2YTFhMTU2NyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvc29jay5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vbGliL3NvY2suYwpAQCAtMjUyLDcgJiM0MzsyNTIsNyBAQCBzdGF0aWMgaW50IHRlc3RfZ2V0X2FvX2tleXNfbnIoaW50IHNrKQogCiBpbnQgdGVzdF9nZXRfb25lX2FvKGludCBzaywgc3RydWN0IHRjcF9hb19nZXRzb2Nrb3B0ICpvdXQsCiAJCXZvaWQgKmFkZHIsIHNpemVfdCBhZGRyX3N6LCB1aW50OF90IHByZWZpeCwKLQkJdWludDhfdCBzbmRpZCwgdWludDhfdCByY3ZpZCkKJiM0MzsJCXVpbnQ4X3Qgc25kaWQsIHVpbnQ4X3QgcmN2aWQsIHVpbnQ4X3Qga2V5ZmxhZ3MsIGludCBpZmluZGV4KQogewogCXN0cnVjdCB0Y3BfYW9fZ2V0c29ja29wdCB0bXAgPSB7fTsKIAlzb2NrbGVuX3QgdG1wX3N6ID0gc2l6ZW9mKHRtcCk7CkBAIC0yNjIsNiAmIzQzOzI2Miw4IEBAIGludCB0ZXN0X2dldF9vbmVfYW8oaW50IHNrLCBzdHJ1Y3QgdGNwX2FvX2dldHNvY2tvcHQgKm91dCwKIAl0bXAucHJlZml4ID0gcHJlZml4OwogCXRtcC5zbmRpZCAgPSBzbmRpZDsKIAl0bXAucmN2aWQgID0gcmN2aWQ7CiYjNDM7CXRtcC5rZXlmbGFncyA9IGtleWZsYWdzOwomIzQzOwl0bXAuaWZpbmRleCA9IGlmaW5kZXg7CiAJdG1wLm5rZXlzICA9IDE7CiAKIAlyZXQgPSBnZXRzb2Nrb3B0KHNrLCBJUFBST1RPX1RDUCwgVENQX0FPX0dFVF9LRVlTLCAmYW1wO3RtcCwgJmFtcDt0bXBfc3opOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxNTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2Mzk1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVENQLUFPIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoLiBJdCBzZWVtcyB3ZSBoYXZlIGEgbW9kaWZpY2F0aW9uIHRvIGBuZXQvaXB2NC90Y3BfYW8uY2AsIGFsb25nIHdpdGggc29tZSBhY2NvbXBhbnlpbmcgc2VsZnRlc3RzLCB3aGljaCBpcyBzdGFuZGFyZCBwcm9jZWR1cmUuIFRoaXMgYXJlYSBjb25jZXJucyB0aGUgVENQIEF1dGhlbnRpY2F0aW9uIE9wdGlvbiwgb3IgVENQLUFPLCB3aGljaCBpcyBhIGtleSBwYXJ0IG9mIHNlY3VyaW5nIFRDUCBjb25uZWN0aW9ucy4KCkxldCYjMzk7cyBkaXNzZWN0IHRoZSBjb3JlIGNoYW5nZSBpbiBgdGNwX2FvX2RlbF9jbWRgLiBJdCYjMzk7cyBzdHJhaWdodGZvcndhcmQ6IGEgbmV3IGNvbmRpdGlvbmFsIGFzc2lnbm1lbnQgaXMgaW50cm9kdWNlZC4gU3BlY2lmaWNhbGx5LCB0aGUgY29kZSBub3cgaW5jbHVkZXM6CgpgYGBjCglpZiAoY21kLmtleWZsYWdzICZhbXA7IFRDUF9BT19LRVlGX0lGSU5ERVgpCgkJbDNpbmRleCA9IGNtZC5pZmluZGV4OwpgYGAKCkVzc2VudGlhbGx5LCBpZiB0aGUgYFRDUF9BT19LRVlGX0lGSU5ERVhgIGZsYWcgaXMgc2V0IHdpdGhpbiBgY21kLmtleWZsYWdzYCwgdGhlbiB0aGUgdmFyaWFibGUgYGwzaW5kZXhgIGdldHMgYXNzaWduZWQgdGhlIHZhbHVlIG9mIGBjbWQuaWZpbmRleGAuIFRoaXMgcG9pbnRzIHRvd2FyZHMgYXNzb2NpYXRpbmcgYSBzcGVjaWZpYyBMYXllciAzIGludGVyZmFjZSBpbmRleCB3aXRoIHRoZSBBTyBjb25maWd1cmF0aW9uIGR1cmluZyBkZWxldGlvbi4gVGhlIHVzZSBvZiBiaXR3aXNlIEFORCBvcGVyYXRpb24gc3VnZ2VzdHMgdGhhdCBga2V5ZmxhZ3NgIGlzIHByb2JhYmx5IGEgYml0bWFzaywgYWxsb3dpbmcgbXVsdGlwbGUgZmxhZ3MgdG8gYmUgc2V0IGF0IG9uY2UuIFRoaXMgYWxpZ25zIHdpdGggaG93IHRoZXNlIHR5cGVzIG9mIG9wdGlvbnMgYXJlIHVzdWFsbHkgaGFuZGxlZCBpbiB0aGUga2VybmVsLgoKSSBuZWVkIHRvIGNvbmZpcm0gcHJlY2lzZWx5IHdoYXQgYGwzaW5kZXhgIHJlcHJlc2VudHMgaW4gdGhpcyBjb250ZXh0LiBJcyBpdCB0aGUgaW50ZXJmYWNlIGluZGV4IGJlaW5nIHVzZWQgYnkgdGhlIEFPIGNvbmZpZ3VyYXRpb24gb3Igc29tZXRoaW5nIGVsc2UuIEkmIzM5O2xsIG5lZWQgdG8gZm9sbG93IHRoZSB1c2Ugb2YgYGwzaW5kZXhgIGZ1cnRoZXIgd2l0aGluIGB0Y3BfYW8uY2AgKGFuZCBwb3RlbnRpYWxseSBvdGhlciBmaWxlcykgdG8gZnVsbHkgZ3Jhc3AgdGhlIHJhbWlmaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuIEl0JiMzOTtzIGxpa2VseSByZWxhdGVkIHRvIGhvdyB0aGUgQU8gaXMgYXBwbGllZCB0byBhIHNwZWNpZmljIG5ldHdvcmsgaW50ZXJmYWNlLiBUaGlzIHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIGFuZCBwb3NzaWJseSBuZWNlc3NhcnkgYWRkaXRpb24gdG8gc3VwcG9ydCBmaW5lLWdyYWluZWQgY29udHJvbCBvdmVyIFRDUC1BTy4gVGhlIHNlbGZ0ZXN0cyBzaG91bGQgcHJvdmlkZSBjcnVjaWFsIGluc2lnaHRzIGludG8gdGhlIGludGVuZGVkIGJlaGF2aW9yIGFuZCBwb3RlbnRpYWwgZWRnZSBjYXNlcy4gSSYjMzk7bGwgbmVlZCB0byBnbyB0aHJvdWdoIHRoZW0gdGhvcm91Z2hseSB0byBlbnN1cmUgdGhpcyBpcyBzb3VuZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxNTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y3BfYW9fZGVsX2NtZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9hby5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9hby5jPTk5MD10Y3BfaW5ib3VuZF9hb19oYXNoKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC90Y3BfYW8uYy0xMDU1LVx0XHRcdGlmIChrZXkpXG5uZXQvaXB2NC90Y3BfYW8uYzoxMDU2Olx0XHRcdFx0LyogcGFpcnMgd2l0aCB0Y3BfYW9fZGVsX2NtZCAqL1xubmV0L2lwdjQvdGNwX2FvLmMtMTA1Ny1cdFx0XHRcdFdSSVRFX09OQ0UoaW5mby1cdTAwM2VjdXJyZW50X2tleSwga2V5KTtcbi0tXG5uZXQvaXB2NC90Y3BfYW8uYy0xMDY4LVx0ICogLSByZXF1ZXN0IHNvY2tldHMgd291bGQgcmFjZSBvbiB0aG9zZSBrZXkgcG9pbnRlcnNcbm5ldC9pcHY0L3RjcF9hby5jOjEwNjk6XHQgKiAtIHRjcF9hb19kZWxfY21kKCkgYWxsb3dzIGFzeW5jIGtleSByZW1vdmFsXG5uZXQvaXB2NC90Y3BfYW8uYy0xMDcwLVx0ICovXG4tLVxubmV0L2lwdjQvdGNwX2FvLmM9MTc0Nj1zdGF0aWMgaW50IHRjcF9hb19kZWxldGVfa2V5KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRjcF9hb19pbmZvICphb19pbmZvLFxuLS1cbm5ldC9pcHY0L3RjcF9hby5jLTE3OTktI2RlZmluZSBUQ1BfQU9fREVMX0tFWUZfQUxMIChUQ1BfQU9fS0VZRl9JRklOREVYKVxubmV0L2lwdjQvdGNwX2FvLmM6MTgwMDpzdGF0aWMgaW50IHRjcF9hb19kZWxfY21kKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgc2hvcnQgaW50IGZhbWlseSxcbm5ldC9pcHY0L3RjcF9hby5jLTE4MDEtXHRcdFx0ICBzb2NrcHRyX3Qgb3B0dmFsLCBpbnQgb3B0bGVuKVxuLS1cbm5ldC9pcHY0L3RjcF9hby5jPTIwMzg9aW50IHRjcF9wYXJzZV9hbyhzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHVuc2lnbmVkIHNob3J0IGludCBmYW1pbHksXG4tLVxubmV0L2lwdjQvdGNwX2FvLmMtMjA0Ny1cdGNhc2UgVENQX0FPX0RFTF9LRVk6XG5uZXQvaXB2NC90Y3BfYW8uYzoyMDQ4Olx0XHRyZXR1cm4gdGNwX2FvX2RlbF9jbWQoc2ssIGZhbWlseSwgb3B0dmFsLCBvcHRsZW4pO1xubmV0L2lwdjQvdGNwX2FvLmMtMjA0OS1cdGNhc2UgVENQX0FPX0lORk86XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTU6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzYxMgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDEwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFRDUCBBdXRoZW50aWNhdGlvbiBPcHRpb24gKFRDUC1BTykgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGludG8gdGhlIFRDUC1BTyBmdW5jdGlvbmFsaXR5LCBzcGVjaWZpY2FsbHkgaG93IGtleSBkZWxldGlvbiBpcyBoYW5kbGVkLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhlIGB0Y3BfYW9fZGVsX2NtZGAgZnVuY3Rpb24gaXMgdGhlIG9uZSByZXNwb25zaWJsZSBmb3IgdGhlIGFjdHVhbCBkZWxldGlvbiBvZiBrZXlzLiBUaGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGZyb20gYHRjcF9wYXJzZV9hb2Agd2hlbiB0aGUgYFRDUF9BT19ERUxfS0VZYCBvcHRpb24gaXMgcmVjZWl2ZWQuCgpOb3csIHdoZXJlIGRvZXMgYHRjcF9wYXJzZV9hb2AgZml0IGludG8gYWxsIHRoaXM/IEFoLCByaWdodCwgdGhhdCYjMzk7cyBjYWxsZWQgZnJvbSBgZG9fdGNwX3NldHNvY2tvcHRgLiBBbmQgYGRvX3RjcF9zZXRzb2Nrb3B0YCBzZWVtcyB0byBiZSB0aGUgY2VudHJhbCBwb2ludCBmb3IgaGFuZGxpbmcgYWxsIHRoZSB2YXJpb3VzIFRDUC1BTyBvcGVyYXRpb25zIOKAkyBhZGRpbmcsIGRlbGV0aW5nLCBnZXR0aW5nIGluZm9ybWF0aW9uLCBhbmQgc28gb24uIFdlIHNlZSB0aGF0IGB0Y3BfcGFyc2VfYW9gIGlzIGluZGVlZCBjYWxsZWQgZm9yIGFsbCBvZiB0aG9zZTogYFRDUF9BT19BRERfS0VZYCwgYFRDUF9BT19ERUxfS0VZYCwgYFRDUF9BT19JTkZPYCwgYW5kIHByb2JhYmx5IG90aGVycyB0b28uCgpUaGVyZWZvcmUsIHRoZSBvYnZpb3VzIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIGB0Y3BfcGFyc2VfYW9gIGFuZCBgZG9fdGNwX3NldHNvY2tvcHRgIG1vcmUgY2xvc2VseSB0byBncmFzcCB0aGUgb3ZlcmFsbCB3b3JrZmxvdyBhbmQgaG93IHRoaXMga2V5IGRlbGV0aW9uIGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBUQ1AtQU8gY29uZmlndXJhdGlvbiBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDE1OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNwX3BhcnNlX2FvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDE1OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwMjAKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlOgoKKipJbnZlc3RpZ2F0aW5nIGB0Y3BfcGFyc2VfYW9gKioKCk9rYXksIHNvIEkgc2VlIGB0Y3BfcGFyc2VfYW9gIGlzIHR1Y2tlZCBhd2F5IGluIGBuZXQvaXB2NC90Y3BfYW8uY2AuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIGJ1dCBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSAqdXNlZCouIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayB0aGUgY2FsbCBncmFwaCB0byBzZWUgd2hlcmUgdGhlIGZ1bmN0aW9uIGlzIGJlaW5nIGludm9rZWQuIFVuZGVyc3RhbmRpbmcgaXRzIGNhbGwgc2l0ZXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHBpY3R1cmUgb2YgaXRzIGZ1bmN0aW9uIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBvdmVyYWxsIG5ldHdvcmsgc3RhY2suIFRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgaXRzIHJvbGUuIEtub3dpbmcgdGhlIGNvbnRleHQgb2YgaXRzIGNhbGxzIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIGl0cyBwdXJwb3NlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDE1OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF9wYXJzZV9hbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC90Y3BfYW8uaD0xOTY9aW50IHRjcF9hb19oYXNoX3NrYih1bnNpZ25lZCBzaG9ydCBpbnQgZmFtaWx5LFxuLS1cbmluY2x1ZGUvbmV0L3RjcF9hby5oLTE5OS1cdFx0ICAgIGNvbnN0IHU4ICp0a2V5LCBpbnQgaGFzaF9vZmZzZXQsIHUzMiBzbmUpO1xuaW5jbHVkZS9uZXQvdGNwX2FvLmg6MjAwOmludCB0Y3BfcGFyc2VfYW8oc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCB1bnNpZ25lZCBzaG9ydCBpbnQgZmFtaWx5LFxuaW5jbHVkZS9uZXQvdGNwX2FvLmgtMjAxLVx0XHQgc29ja3B0cl90IG9wdHZhbCwgaW50IG9wdGxlbik7XG4tLVxubmV0L2lwdjQvdGNwX2FvLmM9MTk0OT1zdGF0aWMgaW50IHRjcF9hb19pbmZvX2NtZChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIHNob3J0IGludCBmYW1pbHksXG4tLVxubmV0L2lwdjQvdGNwX2FvLmMtMjAzNy1cbm5ldC9pcHY0L3RjcF9hby5jOjIwMzg6aW50IHRjcF9wYXJzZV9hbyhzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHVuc2lnbmVkIHNob3J0IGludCBmYW1pbHksXG5uZXQvaXB2NC90Y3BfYW8uYy0yMDM5LVx0XHQgc29ja3B0cl90IG9wdHZhbCwgaW50IG9wdGxlbilcbi0tXG5uZXQvaXB2NC90Y3BfYW8uYz0yMDU3PWludCB0Y3BfdjRfcGFyc2VfYW8oc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCBzb2NrcHRyX3Qgb3B0dmFsLCBpbnQgb3B0bGVuKVxubmV0L2lwdjQvdGNwX2FvLmMtMjA1OC17XG5uZXQvaXB2NC90Y3BfYW8uYzoyMDU5Olx0cmV0dXJuIHRjcF9wYXJzZV9hbyhzaywgY21kLCBBRl9JTkVULCBvcHR2YWwsIG9wdGxlbik7XG5uZXQvaXB2NC90Y3BfYW8uYy0yMDYwLX1cbi0tXG5uZXQvaXB2Ni90Y3BfYW8uYz0xMjc9aW50IHRjcF92Nl9wYXJzZV9hbyhzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsXG4tLVxubmV0L2lwdjYvdGNwX2FvLmMtMTI5LXtcbm5ldC9pcHY2L3RjcF9hby5jOjEzMDpcdHJldHVybiB0Y3BfcGFyc2VfYW8oc2ssIGNtZCwgQUZfSU5FVDYsIG9wdHZhbCwgb3B0bGVuKTtcbm5ldC9pcHY2L3RjcF9hby5jLTEzMS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTU6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODcwMwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHN1bW1hcnk6CgoqKkRpZ2dpbmcgaW50byB0aGUgYHRjcF9wYXJzZV9hb2AgZnVuY3Rpb25zKioKClJpZ2h0LCBzbyBgdGNwX3Y0X3BhcnNlX2FvYCBhbmQgYHRjcF92Nl9wYXJzZV9hb2AuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJdCYjMzk7cyBhbHdheXMgYSBnb29kIHByYWN0aWNlLCBhbmQgYSBmaXJzdCBzdGVwIGluIGFuYWx5c2lzLCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGdyYXBoIG9mIHRoZXNlIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGVzZSBzcGVjaWZpYyBmdW5jdGlvbnMgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dHMgaW4gd2hpY2ggdGhleSYjMzk7cmUgYmVpbmcgaW52b2tlZC4gS25vd2luZyB0aGUgY2FsbGluZyBmdW5jdGlvbnMgZ2l2ZXMgaW1tZWRpYXRlIGNvbnRleHQsIGFuZCBsZXRzIG1lIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyB0cmlnZ2VyaW5nIHRoZXNlIHBhcnNpbmcgcm91dGluZXMuIFRoaXMgaXMgZ29pbmcgdG8gYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlIGhlcmUuIExldCYjMzk7cyBzZWUgd2hlcmUgdGhleSYjMzk7cmUgYmVpbmcgKmNhbGxlZCogZnJvbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTU6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNwX3Y0X3BhcnNlX2FvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3RjcF9hby5oPTIzMD1pbnQgdGNwX2FvX3ByZXBhcmVfcmVzZXQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmluY2x1ZGUvbmV0L3RjcF9hby5oLTIzNS0vKiBpcHY0IHNwZWNpZmljIGZ1bmN0aW9ucyAqL1xuaW5jbHVkZS9uZXQvdGNwX2FvLmg6MjM2OmludCB0Y3BfdjRfcGFyc2VfYW8oc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCBzb2NrcHRyX3Qgb3B0dmFsLCBpbnQgb3B0bGVuKTtcbmluY2x1ZGUvbmV0L3RjcF9hby5oLTIzNy1zdHJ1Y3QgdGNwX2FvX2tleSAqdGNwX3Y0X2FvX2xvb2t1cChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICphZGRyX3NrLFxuLS1cbm5ldC9pcHY0L3RjcF9hby5jPTIwMzg9aW50IHRjcF9wYXJzZV9hbyhzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHVuc2lnbmVkIHNob3J0IGludCBmYW1pbHksXG4tLVxubmV0L2lwdjQvdGNwX2FvLmMtMjA1Ni1cbm5ldC9pcHY0L3RjcF9hby5jOjIwNTc6aW50IHRjcF92NF9wYXJzZV9hbyhzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHNvY2twdHJfdCBvcHR2YWwsIGludCBvcHRsZW4pXG5uZXQvaXB2NC90Y3BfYW8uYy0yMDU4LXtcbi0tXG5uZXQvaXB2NC90Y3BfaXB2NC5jPTIzNzE9c3RhdGljIGNvbnN0IHN0cnVjdCB0Y3Bfc29ja19hZl9vcHMgdGNwX3NvY2tfaXB2NF9zcGVjaWZpYyA9IHtcbi0tXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTIzNzktXHQuY2FsY19hb19oYXNoXHRcdD0gdGNwX3Y0X2FvX2hhc2hfc2tiLFxubmV0L2lwdjQvdGNwX2lwdjQuYzoyMzgwOlx0LmFvX3BhcnNlXHRcdD0gdGNwX3Y0X3BhcnNlX2FvLFxubmV0L2lwdjQvdGNwX2lwdjQuYy0yMzgxLVx0LmFvX2NhbGNfa2V5X3NrXHRcdD0gdGNwX3Y0X2FvX2NhbGNfa2V5X3NrLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxNTo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MzYyCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipOYXZpZ2F0aW5nIHRoZSBUQ1AgU29ja2V0IE9wZXJhdGlvbnMqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGEgcGllY2Ugb2YgY29kZSByZWxhdGVkIHRvIFRDUCBzb2NrZXQgb3BlcmF0aW9ucyDigJMgc3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBzb21ldGhpbmcgd2l0aGluIHRoZSBgdGNwX3NvY2tfYWZfb3BzYCBzdHJ1Y3R1cmUuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBkaWcgaW50byB0aGUgYWRkcmVzcyBmYW1pbHktc3BlY2lmaWMgcGFyc2luZyBmdW5jdGlvbnMuIEdpdmVuIHRoYXQgY29udGV4dCwgSSYjMzk7bSBwcmV0dHkgc3VyZSBgYW9fcGFyc2VgIGlzIHRoZSByZWxldmFudCBmdW5jdGlvbiB0byBpbnZlc3RpZ2F0ZS4gSXQmIzM5O3MgYWxtb3N0IGNlcnRhaW5seSBmb3VuZCB3aXRoaW4gYG5ldC9pcHY0L3RjcC5jYCwgd2hpY2ggaXMgdGhlIHR5cGljYWwgbG9jYXRpb24gZm9yIElQdjQgVENQIGhhbmRsaW5nIHdpdGhpbiB0aGUga2VybmVsLiBMZXQgbWUgcHVsbCB0aGF0IHVwIGFuZCBzZWUgd2hhdCB3ZSYjMzk7cmUgd29ya2luZyB3aXRoLiBJIGV4cGVjdCBpdCB0byBkZWFsIHdpdGggYW55IGFkZHJlc3MtcmVsYXRlZCBwYXJzaW5nIGFuZCBoYW5kbGluZy4gVGhpcyBpcyBwcm9iYWJseSB0aGUgZW50cnkgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHNvY2tldCYjMzk7cyBiZWhhdmlvciBpbiBxdWVzdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTU6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YW9fcGFyc2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3AuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3AuYz0zODM4PWludCBkb190Y3Bfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4tLVxubmV0L2lwdjQvdGNwLmMtNDA3OS1cdFx0aWYgKCgxIFx1MDAzY1x1MDAzYyBzay1cdTAwM2Vza19zdGF0ZSkgXHUwMDI2IChUQ1BGX0xJU1RFTiB8IFRDUEZfQ0xPU0UpKVxubmV0L2lwdjQvdGNwLmM6NDA4MDpcdFx0XHRnb3RvIGFvX3BhcnNlO1xubmV0L2lwdjQvdGNwLmMtNDA4MS1cdFx0aWYgKHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQodGNwX3NrKHNrKS1cdTAwM2Vhb19pbmZvLFxubmV0L2lwdjQvdGNwLmMtNDA4Mi1cdFx0XHRcdFx0ICAgICAgbG9ja2RlcF9zb2NrX2lzX2hlbGQoc2spKSlcbm5ldC9pcHY0L3RjcC5jOjQwODM6XHRcdFx0Z290byBhb19wYXJzZTtcbm5ldC9pcHY0L3RjcC5jLTQwODQtXHRcdGlmICh0cC1cdTAwM2VyZXBhaXIpXG5uZXQvaXB2NC90Y3AuYzo0MDg1Olx0XHRcdGdvdG8gYW9fcGFyc2U7XG5uZXQvaXB2NC90Y3AuYy00MDg2LVx0XHRlcnIgPSAtRUlTQ09OTjtcbm5ldC9pcHY0L3RjcC5jLTQwODctXHRcdGJyZWFrO1xubmV0L2lwdjQvdGNwLmM6NDA4ODphb19wYXJzZTpcbm5ldC9pcHY0L3RjcC5jOjQwODk6XHRcdGVyciA9IHRwLVx1MDAzZWFmX3NwZWNpZmljLVx1MDAzZWFvX3BhcnNlKHNrLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7XG5uZXQvaXB2NC90Y3AuYy00MDkwLVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTU6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTk2MgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDEzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRDUC1BTzogQSBXb3J0aHdoaWxlIEVuZGVhdm9yKioKCk9rYXksIHNvIEkgc2VlIHRoaXMgcGF0Y2ggYW5kIGl0JiMzOTtzIGRlYWxpbmcgd2l0aCBgc2V0c29ja29wdGAgYW5kIFRDUC1BTywgc3BlY2lmaWNhbGx5LCBpdCBpbnZvbHZlcyBgc2V0c29ja29wdCguLi4sIElQUFJPVE9fVENQLCBUQ1BfQU9fREVMX0tFWSwgLi4uKWAg4oCTIHRoYXQmIzM5O3MgYWNjZXNzaWJsZSwgd2hpY2ggcGlxdWVzIG15IGludGVyZXN0IGltbWVkaWF0ZWx5LiBUaGlzIHBhdGNoIGFkZHJlc3NlcyBhIGJ1ZyB3aGVyZSBgY21kLmlmaW5kZXhgIHdhc24mIzM5O3QgYmVpbmcgY29ycmVjdGx5IGFzc2lnbmVkIHRvIGBsM2luZGV4YCB3aGVuIGBUQ1BfQU9fS0VZRl9JRklOREVYYCB3YXMgZmxhZ2dlZCBpbiBgY21kLmtleWZsYWdzYC4gRnVuY3Rpb25hbGx5LCB0aGlzIGlzIGEgY2hhbmdlIHRvIGhvdyBUQ1AtQU8gaXMgaGFuZGxlZCB3aXRoaW4gYHNldHNvY2tvcHRgLiBUQ1AtQU8gaXRzZWxmIGlzIGEgY29yZSBuZXR3b3JraW5nIGZlYXR1cmUsIG5vIGRvdWJ0LiBUaGUgcXVlc3Rpb24gaXM6IGlzIHRoaXMgZnV6emFibGU/IEFic29sdXRlbHkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gYSByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvbXBvbmVudC4gVGhlIHBvdGVudGlhbCBpbXBhY3QgaXMgc2lnbmlmaWNhbnQsIGFuZCB0aGUgYXR0YWNrIHN1cmZhY2UgaXMgYWNjZXNzaWJsZS4gTm93LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhc3NvY2lhdGVkIHdpdGggVENQLUFPIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIHBvdGVudGlhbCB2ZWN0b3JzIGZvciBmdXp6aW5nLiBUaGlzIGlzIGRlZmluaXRlbHkgd29ydGggYSBjbG9zZXIgbG9vay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTU6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFRDUF9BTyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZz03Mjk9Y29uZmlnIERFRkFVTFRfVENQX0NPTkdcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTc0My1cbm5ldC9pcHY0L0tjb25maWc6NzQ0OmNvbmZpZyBUQ1BfQU9cbm5ldC9pcHY0L0tjb25maWctNzQ1LVx0Ym9vbCBcJiMzNDtUQ1A6IEF1dGhlbnRpY2F0aW9uIE9wdGlvbiAoUkZDNTkyNSlcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTU6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0NDEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBxdWljayBydW5kb3duIG9mIHdoYXQgSSYjMzk7bSB0aGlua2luZyBhYm91dCByZWxhdGVkIHRvIHRoaXMgVENQIGFuYWx5c2lzOgoKKipUQ1BfQU8gQ29uZmlndXJhdGlvbiBFeGFtaW5hdGlvbioqCgpSaWdodCwgc28gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBgVENQX0FPYCBhcyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24g4oCTIHRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gZGlnIGludG8gaG93IHRoaXMgaXMgaW1wbGVtZW50ZWQuIE15IGluaXRpYWwgZm9jdXMgaXMgZ29pbmcgdG8gYmUgb24gYSBjb3VwbGUgb2Yga2V5IHN5bWJvbHM6IGB0Y3BfYW9fZGVsX2NtZGAgYW5kIGB0Y3BfcGFyc2VfYW9gLiBUaGV5IHNlZW0gbGlrZSBsb2dpY2FsIHBsYWNlcyB0byBzdGFydCBwb2tpbmcgYXJvdW5kIHRvIHVuZGVyc3RhbmQgaG93IEFPIChBdXRoZW50aWNhdGVkIE9wdGlvbnMsIEkmIzM5O20gZ3Vlc3Npbmc/KSBpcyBoYW5kbGVkLgoKT2theSwgYHRjcF9hb19kZWxfY21kYCBpcyBzdGF0aWMsIHdoaWNoIGlzIGZpbmUsIGJ1dCBub3QgaWRlYWwgZm9yIGRlZXBlciBpbnRyb3NwZWN0aW9uLiBOb3csIGB0Y3BfcGFyc2VfYW9gIGlzIHRoZSBpbnRlcmVzdGluZyBvbmU7IGl0JiMzOTtzICpub3QqIHN0YXRpYywgc28gSSBjYW4gcHJvYmFibHkgZ2V0IGF0IG1vcmUgZGV0YWlscyBhYm91dCBob3cgaXQmIzM5O3MgdXNlZC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBpdHMgZnVuY3Rpb24gc2lnbmF0dXJlIHRvIHNlZSB3aGF0IHRoZSBpbnB1dHMgYXJlLCB3aGF0IGl0IHJldHVybnMsIGFuZCBnZXQgYW4gaWRlYSBvZiB3aGVyZSB0byBnbyBuZXh0LiBVbmRlcnN0YW5kaW5nIHRoYXQgc2lnbmF0dXJlIHdpbGwgcmVhbGx5IGhlbHAgbWUgemVybyBpbiBvbiB3aGVyZSB0aGUgcmVsZXZhbnQgY29kZSBwYXRocyBhcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDE1OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCB0Y3BfcGFyc2VfYW8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3BfYW8uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3BfYW8uYz0xOTQ5PXN0YXRpYyBpbnQgdGNwX2FvX2luZm9fY21kKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgc2hvcnQgaW50IGZhbWlseSxcbi0tXG5uZXQvaXB2NC90Y3BfYW8uYy0yMDM3LVxubmV0L2lwdjQvdGNwX2FvLmM6MjAzODppbnQgdGNwX3BhcnNlX2FvKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgdW5zaWduZWQgc2hvcnQgaW50IGZhbWlseSxcbm5ldC9pcHY0L3RjcF9hby5jLTIwMzktXHRcdCBzb2NrcHRyX3Qgb3B0dmFsLCBpbnQgb3B0bGVuKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxNTo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDkyMwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHF1aWNrIHJ1bmRvd24gb2Ygd2hhdCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHJlbGF0ZWQgdG8gdGhpcyBUQ1AgcGFyc2luZyBjb2RlLCBrZWVwaW5nIGluIG1pbmQgbXkgZXhwZXJ0aXNlOgoKKipUQ1AgU3ltYm9sIEFuYWx5c2lzIC0gRm9jdXMgb24gQU8gRnVuY3Rpb25zKioKClJpZ2h0LCBzbyBgdGNwX3BhcnNlX2FvYCBzZWVtcyBsaWtlIGEgc29saWQgY2FuZGlkYXRlIGZvciBhIGtleSBzeW1ib2wsIGEgZ29vZCBmb2NhbCBwb2ludCBmb3IgYW5hbHlzaXMgaW4gdGhpcyBhcmVhIG9mIHRoZSBjb2RlLiBCdXQsIGdpdmVuIHRoYXQgd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgVENQLCBJIHNob3VsZCBhbHNvIGNvbnNpZGVyIGl0cyBJUHY0IGFuZCBJUHY2IHZhcmlhbnRzLCB3aGljaCB3b3VsZCBiZSBgdGNwX3Y0X3BhcnNlX2FvYCBhbmQgYHRjcF92Nl9wYXJzZV9hb2AuIFRob3NlIGFyZSBkZWZpbml0ZWx5IHdvcnRoIGludmVzdGlnYXRpbmcgYXMgd2VsbC4KCk5vdywgSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBhZG1pbmlzdHJhdGl2ZSBjb21tYW5kcy4gSSB3YW50IHRvIHNlZSBpZiBgdGNwX2FvX2RlbF9jbWRgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBZZXAsIGl0IGlzLiBUaGF0IGluZm9ybWF0aW9uIGlzIGdvaW5nIHRvIGNvbWUgaW4gaGFuZHkgbGF0ZXIuIEdvb2QsIHRoYXQmIzM5O3Mgb25lIGxlc3MgdmFyaWFibGUgdG8gd29ycnkgYWJvdXQuCgpOb3csIGxldCYjMzk7cyBzZWUgd2hhdCBvdGhlciByZWxhdGVkIGZ1bmN0aW9ucyBhcmUgaW4gcGxheS4gSSYjMzk7bGwgbmVlZCB0byBleHBhbmQgbXkgc2VhcmNoIHRvIGlkZW50aWZ5IGFueSBvdGhlciByZWxldmFudCBmdW5jdGlvbnMgYXJvdW5kIHRoZXNlIHRvIGdldCBhIGZ1bGwgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTU6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNwX2FvX2RlbF9jbWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3BfYW8uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3BfYW8uYz05OTA9dGNwX2luYm91bmRfYW9faGFzaChzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvdGNwX2FvLmMtMTA1NS1cdFx0XHRpZiAoa2V5KVxubmV0L2lwdjQvdGNwX2FvLmM6MTA1NjpcdFx0XHRcdC8qIHBhaXJzIHdpdGggdGNwX2FvX2RlbF9jbWQgKi9cbm5ldC9pcHY0L3RjcF9hby5jLTEwNTctXHRcdFx0XHRXUklURV9PTkNFKGluZm8tXHUwMDNlY3VycmVudF9rZXksIGtleSk7XG4tLVxubmV0L2lwdjQvdGNwX2FvLmMtMTA2OC1cdCAqIC0gcmVxdWVzdCBzb2NrZXRzIHdvdWxkIHJhY2Ugb24gdGhvc2Uga2V5IHBvaW50ZXJzXG5uZXQvaXB2NC90Y3BfYW8uYzoxMDY5Olx0ICogLSB0Y3BfYW9fZGVsX2NtZCgpIGFsbG93cyBhc3luYyBrZXkgcmVtb3ZhbFxubmV0L2lwdjQvdGNwX2FvLmMtMTA3MC1cdCAqL1xuLS1cbm5ldC9pcHY0L3RjcF9hby5jPTE3NDY9c3RhdGljIGludCB0Y3BfYW9fZGVsZXRlX2tleShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0Y3BfYW9faW5mbyAqYW9faW5mbyxcbi0tXG5uZXQvaXB2NC90Y3BfYW8uYy0xNzk5LSNkZWZpbmUgVENQX0FPX0RFTF9LRVlGX0FMTCAoVENQX0FPX0tFWUZfSUZJTkRFWClcbm5ldC9pcHY0L3RjcF9hby5jOjE4MDA6c3RhdGljIGludCB0Y3BfYW9fZGVsX2NtZChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIHNob3J0IGludCBmYW1pbHksXG5uZXQvaXB2NC90Y3BfYW8uYy0xODAxLVx0XHRcdCAgc29ja3B0cl90IG9wdHZhbCwgaW50IG9wdGxlbilcbi0tXG5uZXQvaXB2NC90Y3BfYW8uYz0yMDM4PWludCB0Y3BfcGFyc2VfYW8oc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCB1bnNpZ25lZCBzaG9ydCBpbnQgZmFtaWx5LFxuLS1cbm5ldC9pcHY0L3RjcF9hby5jLTIwNDctXHRjYXNlIFRDUF9BT19ERUxfS0VZOlxubmV0L2lwdjQvdGNwX2FvLmM6MjA0ODpcdFx0cmV0dXJuIHRjcF9hb19kZWxfY21kKHNrLCBmYW1pbHksIG9wdHZhbCwgb3B0bGVuKTtcbm5ldC9pcHY0L3RjcF9hby5jLTIwNDktXHRjYXNlIFRDUF9BT19JTkZPOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxNTo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTc2NQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IFBsYW4gZm9yIFBhcnNpbmcgVENQIEF1dGhlbnRpY2F0aW9uIE9wdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBnb2luZyB0byBhZGQgdGhlIGZ1bmN0aW9ucyBgdGNwX3BhcnNlX2FvYCwgYHRjcF92NF9wYXJzZV9hb2AsIGFuZCBgdGNwX3Y2X3BhcnNlX2FvYCB0byB0aGUgYEZvY3VzU3ltYm9sc2AgbGlzdC4gVGhpcyBpcyBhIGNyaXRpY2FsIHN0ZXAgaW4gZ2V0dGluZyBteSBhdXRoZW50aWNhdGlvbiBvcHRpb24gcGFyc2luZyB3b3JraW5nIGNvcnJlY3RseSwgYW5kIEkgd2FudCB0byBiZSBzdXJlIGl0JiMzOTtzIGFjY2Vzc2libGUgYW5kIHRyYWNrZWQgcHJvcGVybHkuIE5vdywgYmVmb3JlIEkgZ2V0IHRvbyBmYXIsIEkgbmVlZCB0byB2ZXJpZnkgd2hhdCwgaWYgYW55dGhpbmcsIHRoaXMgYFRDUF9BT2AgZmVhdHVyZSByZWxpZXMgb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIuIEdvdHRhIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBvdmVybG9va2luZyBzb21ldGhpbmcgZnVuZGFtZW50YWwuIFRoaXMgaW5pdGlhbCBkZXBlbmRlbmN5IGNoZWNrIGlzIGtleSB0byBhdm9pZGluZyBoZWFkYWNoZXMgZG93biB0aGUgbGluZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTU6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFRDUF9BTyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZz03Mjk9Y29uZmlnIERFRkFVTFRfVENQX0NPTkdcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTc0My1cbm5ldC9pcHY0L0tjb25maWc6NzQ0OmNvbmZpZyBUQ1BfQU9cbm5ldC9pcHY0L0tjb25maWctNzQ1LVx0Ym9vbCBcJiMzNDtUQ1A6IEF1dGhlbnRpY2F0aW9uIE9wdGlvbiAoUkZDNTkyNSlcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTU6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIwODUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSByZWFkaW5nIGFuZCBwcm9jZXNzaW5nIHRoZSBgbmV0L2lwdjQvS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYGNvbmZpZyBUQ1BfQU9gIHNldHRpbmc6CgoqKkFuYWx5emluZyB0aGUgS2NvbmZpZyBmb3IgVENQX0FPKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBLY29uZmlnIGZpbGUsIGZvY3VzaW5nIG9uIHRoZSBgVENQX0FPYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcywgZGVmYXVsdCBzZXR0aW5ncywgYW5kIHdoZXJlIGl0IGZpdHMgaW4gdGhlIGJyb2FkZXIgbmV0d29yayBzdGFjayBjb25maWd1cmF0aW9uLiBGaXJzdCwgSSB3YW50IHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgZGVwZW5kZW5jaWVzIOKAkyBkb2VzIGl0IHJlbHkgb24gb3RoZXIgZmVhdHVyZXMgYmVpbmcgZW5hYmxlZCwgbGlrZSBJUHNlYyBvciBzcGVjaWZpYyBjcnlwdG9ncmFwaGljIG1vZHVsZXM/IEFyZSB0aGVyZSBhbnkgYXNzb2NpYXRlZCBzeW1ib2xzIHRoYXQgd291bGQgaW5mbHVlbmNlIHdoZXRoZXIgdGhpcyBnZXRzIGJ1aWx0PyBUaGUgYEtjb25maWdgIGZpbGVzIGdlbmVyYWxseSBtYXAgZGlyZWN0bHkgdG8gY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgSSBjYW4gZW5hYmxlL2Rpc2FibGUsIHNvIEkmIzM5O20gc2Nhbm5pbmcgZm9yIGNsdWVzIGFib3V0IGhvdyB0aGUgbWFpbnRhaW5lcnMgZGVzaWduZWQgdGhpcy4gSSYjMzk7bSBhbHNvIGxvb2tpbmcgZm9yIGFueSBjb21tZW50cyBvciBkb2N1bWVudGF0aW9uIHdpdGhpbiB0aGUgZmlsZSBpdHNlbGYuIFRob3NlIGtpbmRzIG9mIGNsdWVzIGFyZSBnb2luZyB0byB0ZWxsIG1lIHdoYXQgdGhlIGRlc2lnbiBpbnRlbnRpb25zIGFyZS4gSXMgdGhpcyBvcHRpb24gZXhwZXJpbWVudGFsLCBtYXR1cmUsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxNTo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDc0MDpcdFx0ZGVmYXVsdCBcJiMzNDtjZGdcJiMzNDsgaWYgREVGQVVMVF9DREdcbiA3NDE6XHRcdGRlZmF1bHQgXCYjMzQ7YmJyXCYjMzQ7IGlmIERFRkFVTFRfQkJSXG4gNzQyOlx0XHRkZWZhdWx0IFwmIzM0O2N1YmljXCYjMzQ7XG4gNzQzOlx0XG4gNzQ0Olx0Y29uZmlnIFRDUF9BT1xuIDc0NTpcdFx0Ym9vbCBcJiMzNDtUQ1A6IEF1dGhlbnRpY2F0aW9uIE9wdGlvbiAoUkZDNTkyNSlcJiMzNDtcbiA3NDY6XHRcdHNlbGVjdCBDUllQVE9fTElCX0FFU19DQkNfTUFDU1xuIDc0NzpcdFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMVxuIDc0ODpcdFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMjU2XG4gNzQ5Olx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9VVElMU1xuIDc1MDpcdFx0ZGVwZW5kcyBvbiA2NEJJVCAjIHNlcS1udW1iZXIgZXh0ZW5zaW9uIG5lZWRzIFdSSVRFX09OQ0UodTY0KVxuIDc1MTpcdFx0aGVscFxuIDc1MjpcdFx0ICBUQ1AtQU8gc3BlY2lmaWVzIHRoZSB1c2Ugb2Ygc3Ryb25nZXIgTWVzc2FnZSBBdXRoZW50aWNhdGlvbiBDb2RlcyAoTUFDcyksXG4gNzUzOlx0XHQgIHByb3RlY3RzIGFnYWluc3QgcmVwbGF5cyBmb3IgbG9uZy1saXZlZCBUQ1AgY29ubmVjdGlvbnMsIGFuZFxuIDc1NDpcdFx0ICBwcm92aWRlcyBtb3JlIGRldGFpbHMgb24gdGhlIGFzc29jaWF0aW9uIG9mIHNlY3VyaXR5IHdpdGggVENQXG4gNzU1Olx0XHQgIGNvbm5lY3Rpb25zIHRoYW4gVENQIE1ENSAoU2VlIFJGQzU5MjUpXG4gNzU2Olx0XG4gNzU3Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gNzU4Olx0XG4gNzU5Olx0Y29uZmlnIFRDUF9NRDVTSUdcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTU6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI2NzQKCQkJCQkJCW91dHB1dDogMTI1CgkJCQkJCQl0aG91Z2h0czogMzk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFRDUC1BTyBDb25maWd1cmF0aW9uIGFuZCBUZXN0IFN0cmF0ZWd5KioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY29udGluZ2VudCBvbiBgNjRCSVRgLCB3aGljaCBpcyBleHBlY3RlZC4gVGhlIGNvcmUgcmVxdWlyZW1lbnQgaGVyZSBpcyBgVENQX0FPYCwgYW5kIHRoYXQmIzM5O3MgdGhlIG9ubHkgaW1tZWRpYXRlIGNvbmZpZ3VyYXRpb24gbmVlZGVkLCB3aGljaCBpcyBnb29kLgoKTGV0JiMzOTtzIGRvIGEgcXVpY2sgZG91YmxlLWNoZWNrIGZvciBhbnl0aGluZyBlbHNlIGx1cmtpbmcgYXJvdW5kLiBUaGUgc2VsZnRlc3QgaGludHMgYXQgYEtDT05GSUdfTkVUX1ZSRmAsIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIFZSRiBpcyByZWxldmFudCB0byBzcGVjaWZpY2FsbHkgdGVzdCB0aGlzIG5ldyBmdW5jdGlvbmFsaXR5LgoKTG9va2luZyBhdCB0aGUgY29kZSBkaWZmOgpgYGBjCiAJaWYgKGNtZC5pZmluZGV4ICZhbXA7JmFtcDsgIShjbWQua2V5ZmxhZ3MgJmFtcDsgVENQX0FPX0tFWUZfSUZJTkRFWCkpCiAJCXJldHVybiAtRUlOVkFMOwogCiYjNDM7CWlmIChjbWQua2V5ZmxhZ3MgJmFtcDsgVENQX0FPX0tFWUZfSUZJTkRFWCkKJiM0MzsJCWwzaW5kZXggPSBjbWQuaWZpbmRleDsKJiM0MzsKIAlhb19pbmZvID0gc2V0c29ja29wdF9hb19pbmZvKHNrKTsKIGBgYApJdCBzZWVtcyB0aGF0IGBjbWQuaWZpbmRleGAgaXMgdXNlZCB0byBhc3NpZ24gYSB2YWx1ZSB0byBgbDNpbmRleGAuIEFuZCBgbDNpbmRleGAgaXMgdXNlZCBpbiB0aGUga2V5IG1hdGNoaW5nLiBWUkYgY2VydGFpbmx5ICp1c2VzKiBgbDNpbmRleGAuIEhvd2V2ZXIsIGBpZmluZGV4YCBjYW4gYmUgKmFueSogaW50ZXJmYWNlIGluZGV4LCBub3QganVzdCBWUkYuIEJ1dCwgYE5FVF9WUkZgIG1pZ2h0IHN0aWxsIGJlIHVzZWZ1bCB0byBlbmFibGUgdGVzdGluZyBWUkYtc2NvcGVkIGtleXMgaWYgdGhvc2UgYXJlIG9mIGNvbmNlcm4sIHNvIGxldCYjMzk7cyBhZGQgYE5FVF9WUkZgIHRvIGBFbmFibGVDb25maWdzYCBhcyBhIHByZWNhdXRpb24uCgpJIHNob3VsZCBhbHNvIHF1aWNrbHkgZXhhbWluZSBgdGNwX2FvX2RlbGV0ZV9rZXlgLCBqdXN0IGluIGNhc2UsIGJ1dCBpdCBsb29rcyBsaWtlIGEgc3RhdGljIGZ1bmN0aW9uLgoKTGV0IG1lIHN1bW1hcml6ZSBteSBmaW5kaW5ncywgaW4gdGhlIHR5cGljYWwgd2F5OgoqICAgYFdvcnRoRnV6emluZ2A6IFRydWUg4oCTIFRoaXMgbG9va3MgbGlrZSBpdCYjMzk7cyBhZGRyZXNzaW5nIGEgY29yZSBuZXR3b3JraW5nIGJ1Zy4KKiAgIGBGb2N1c1N5bWJvbHNgOiBgdGNwX3BhcnNlX2FvYCwgYHRjcF92NF9wYXJzZV9hb2AsIGB0Y3BfdjZfcGFyc2VfYW9gIOKAkyBTZWVtcyByaWdodC4gVGhvc2UgYXJlIHdoZXJlIHdlIGFyZSBwcm9jZXNzaW5nIHRoZSBvcHRpb24uCiogICBgRW5hYmxlQ29uZmlnc2A6IGBUQ1BfQU9gLCBgTkVUX1ZSRmAg4oCTIFdlJiMzOTtyZSBzdGFydGluZyB3aXRoIGBUQ1BfQU9gLCB3aXRoIGBORVRfVlJGYCBlbmFibGVkIHRvIGV4cGFuZCB0ZXN0aW5nIFZSRi1zY29wZWQga2V5cy4KKiAgIGBSZWFzb25pbmdgOiBUaGUgcGF0Y2ggaGFzIGEgYnVnLWZpeCBmb3Igc2V0c29ja29wdCBpbiBUQ1AtQU8sIGRlYWxpbmcgd2l0aCB0aGUgYXNzaWdubWVudCBvZiBgY21kLmlmaW5kZXhgIHRvIGBsM2luZGV4YCB3aGVuIGRlbGV0aW5nIGEga2V5IGFuZCBmaXhlcyBhIHByb2JsZW0gd2l0aCBkZWxldGluZyBpbnRlcmZhY2Utc2NvcGVkIGtleXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JraW5nIGFyZWEsIHNvIHNob3VsZCBiZSB3b3J0aCBvdXIgYXR0ZW50aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxNTo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VENQX0FPJiMzNDssCiAgICAmIzM0O05FVF9WUkYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Y3BfcGFyc2VfYW8mIzM0OywKICAgICYjMzQ7dGNwX3Y0X3BhcnNlX2FvJiMzNDssCiAgICAmIzM0O3RjcF92Nl9wYXJzZV9hbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBUQ1AtQU8gc2V0c29ja29wdCBoYW5kbGluZyB3aGVyZSBgY21kLmlmaW5kZXhgIHdhcyBub3QgYXNzaWduZWQgdG8gYGwzaW5kZXhgIHdoZW4gZGVsZXRpbmcgYSBrZXksIHByZXZlbnRpbmcgZGVsZXRpb24gb2YgaW50ZXJmYWNlLXNjb3BlZCBrZXlzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUQ1BfQU8mIzM0OywKICAgICYjMzQ7TkVUX1ZSRiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjcF9wYXJzZV9hbyYjMzQ7LAogICAgJiMzNDt0Y3BfdjRfcGFyc2VfYW8mIzM0OywKICAgICYjMzQ7dGNwX3Y2X3BhcnNlX2FvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIFRDUC1BTyBzZXRzb2Nrb3B0IGhhbmRsaW5nIHdoZXJlIGBjbWQuaWZpbmRleGAgd2FzIG5vdCBhc3NpZ25lZCB0byBgbDNpbmRleGAgd2hlbiBkZWxldGluZyBhIGtleSwgcHJldmVudGluZyBkZWxldGlvbiBvZiBpbnRlcmZhY2Utc2NvcGVkIGtleXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDE1OjU3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTU6NTc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgaW4gYHRjcF9hb19kZWxfY21kYCB3aGVyZSB0aGUgYGwzaW5kZXhgIHZhcmlhYmxlIHdhcyBub3QgYmVpbmcgcG9wdWxhdGVkIGZyb20gdGhlIHVzZXItcHJvdmlkZWQgYGNtZC5pZmluZGV4YCB3aGVuIHRoZSBgVENQX0FPX0tFWUZfSUZJTkRFWGAgZmxhZyB3YXMgc2V0LiBUaGUgYGNtZGAgc3RydWN0dXJlIGlzIHNhZmVseSBjb3BpZWQgZnJvbSB1c2Vyc3BhY2UgdXNpbmcgYGNvcHlfc3RydWN0X2Zyb21fc29ja3B0cmAsIHdoaWNoIGd1YXJhbnRlZXMgdGhhdCB0aGUgc3RydWN0dXJlIGlzIGZ1bGx5IGluaXRpYWxpemVkICh6ZXJvLXBhZGRlZCBpZiB0aGUgdXNlcnNwYWNlIHN0cnVjdHVyZSBpcyBzbWFsbGVyKS4gVGhlIHBhdGNoIG9ubHkgYWRkcyBhIGNvbmRpdGlvbmFsIGFzc2lnbm1lbnQgb2YgYW4gaW50ZWdlciB2YXJpYWJsZSBhbmQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2Vyc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDExMTdjOWZkZjhiYzA3MjRjMjAxN2IyZDU4OTcyY2NmOTc5YzMzM2EKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyAyMSAxNTo1Njo0MCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9hby5jIGIvbmV0L2lwdjQvdGNwX2FvLmMKaW5kZXggNTA5NDI2NzQ0N2FlZS4uMjY4NjQ2MjFlNmRlZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2FvLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvdGNwX2FvLmMKQEAgLTE4MzQsNiAmIzQzOzE4MzQsOSBAQCBzdGF0aWMgaW50IHRjcF9hb19kZWxfY21kKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgc2hvcnQgaW50IGZhbWlseSwKIAlpZiAoY21kLmlmaW5kZXggJmFtcDsmYW1wOyAhKGNtZC5rZXlmbGFncyAmYW1wOyBUQ1BfQU9fS0VZRl9JRklOREVYKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKJiM0MzsJaWYgKGNtZC5rZXlmbGFncyAmYW1wOyBUQ1BfQU9fS0VZRl9JRklOREVYKQomIzQzOwkJbDNpbmRleCA9IGNtZC5pZmluZGV4OwomIzQzOwogCWFvX2luZm8gPSBzZXRzb2Nrb3B0X2FvX2luZm8oc2spOwogCWlmIChJU19FUlIoYW9faW5mbykpCiAJCXJldHVybiBQVFJfRVJSKGFvX2luZm8pOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9rZXktbWFuYWdlbWVudC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9rZXktbWFuYWdlbWVudC5jCmluZGV4IGQ4NmJiMzgwYjc5ZjcuLjFlMDFlODA1ZGJhNzIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8va2V5LW1hbmFnZW1lbnQuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2tleS1tYW5hZ2VtZW50LmMKQEAgLTYzLDcgJiM0Mzs2Myw4IEBAIHN0YXRpYyBpbnQgcHJlcGFyZV9sc2sodW5pb24gdGNwX2FkZHIgKmFkZHIsIHVpbnQ4X3Qgc25kaWQsIHVpbnQ4X3QgcmN2aWQpCiAJcmV0dXJuIHNrOwogfQogCi1zdGF0aWMgaW50IHRlc3RfZGVsX2tleShpbnQgc2ssIHVpbnQ4X3Qgc25kaWQsIHVpbnQ4X3QgcmN2aWQsIGJvb2wgYXN5bmMsCiYjNDM7c3RhdGljIGludCB0ZXN0X2RlbF9rZXkoaW50IHNrLCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkLCBpbnQgaWZpbmRleCwKJiM0MzsJCQlib29sIGFzeW5jLAogCQkJaW50IGN1cnJlbnRfa2V5LCBpbnQgcm5leHRfa2V5KQogewogCXN0cnVjdCB0Y3BfYW9faW5mb19vcHQgYW9faW5mbyA9IHt9OwpAQCAtNzYsNiAmIzQzOzc3LDEwIEBAIHN0YXRpYyBpbnQgdGVzdF9kZWxfa2V5KGludCBzaywgdWludDhfdCBzbmRpZCwgdWludDhfdCByY3ZpZCwgYm9vbCBhc3luYywKIAlkZWwucHJlZml4ID0gREVGQVVMVF9URVNUX1BSRUZJWDsKIAlkZWwuc25kaWQgPSBzbmRpZDsKIAlkZWwucmN2aWQgPSByY3ZpZDsKJiM0MzsJaWYgKGlmaW5kZXgpIHsKJiM0MzsJCWRlbC5rZXlmbGFncyA9IFRDUF9BT19LRVlGX0lGSU5ERVg7CiYjNDM7CQlkZWwuaWZpbmRleCA9IGlmaW5kZXg7CiYjNDM7CX0KIAogCWlmIChjdXJyZW50X2tleSAmZ3Q7PSAwKSB7CiAJCWRlbC5zZXRfY3VycmVudCA9IDE7CkBAIC05NSw3ICYjNDM7MTAwLDggQEAgc3RhdGljIGludCB0ZXN0X2RlbF9rZXkoaW50IHNrLCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkLCBib29sIGFzeW5jLAogCiAJdGNwX2FkZHJfdG9fc29ja2FkZHJfaW4oJmFtcDtzb2NrYWRkciwgJmFtcDt0aGlzX2lwX2Rlc3QsIDApOwogCWVyciA9IHRlc3RfZ2V0X29uZV9hbyhzaywgJmFtcDtrZXksICZhbXA7c29ja2FkZHIsIHNpemVvZihzb2NrYWRkciksCi0JCQkgICAgICBERUZBVUxUX1RFU1RfUFJFRklYLCBzbmRpZCwgcmN2aWQpOwomIzQzOwkJCSAgICAgIERFRkFVTFRfVEVTVF9QUkVGSVgsIHNuZGlkLCByY3ZpZCwKJiM0MzsJCQkgICAgICBkZWwua2V5ZmxhZ3MsIGRlbC5pZmluZGV4KTsKIAlpZiAoIWVycikKIAkJcmV0dXJuIC1FRVhJU1Q7CiAJaWYgKGVyciAhPSAtRTJCSUcpCkBAIC0xMTIsMTIgJiM0MzsxMTgsMTIgQEAgc3RhdGljIGludCB0ZXN0X2RlbF9rZXkoaW50IHNrLCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkLCBib29sIGFzeW5jLAogfQogCiBzdGF0aWMgdm9pZCB0cnlfZGVsZXRlX2tleShjaGFyICp0c3RfbmFtZSwgaW50IHNrLCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkLAotCQkJICAgYm9vbCBhc3luYywgaW50IGN1cnJlbnRfa2V5LCBpbnQgcm5leHRfa2V5LAomIzQzOwkJCSAgIGludCBpZmluZGV4LCBib29sIGFzeW5jLCBpbnQgY3VycmVudF9rZXksIGludCBybmV4dF9rZXksCiAJCQkgICBmYXVsdF90IGluaikKIHsKIAlpbnQgZXJyOwogCi0JZXJyID0gdGVzdF9kZWxfa2V5KHNrLCBzbmRpZCwgcmN2aWQsIGFzeW5jLCBjdXJyZW50X2tleSwgcm5leHRfa2V5KTsKJiM0MzsJZXJyID0gdGVzdF9kZWxfa2V5KHNrLCBzbmRpZCwgcmN2aWQsIGlmaW5kZXgsIGFzeW5jLCBjdXJyZW50X2tleSwgcm5leHRfa2V5KTsKIAlpZiAoKGVyciA9PSAtRUJVU1kgJmFtcDsmYW1wOyBmYXVsdChCVVNZKSkgfHwgKGVyciA9PSAtRUlOVkFMICZhbXA7JmFtcDsgZmF1bHQoQ1VSUk5FWFQpKSkgewogCQl0ZXN0X29rKCYjMzQ7JXM6IGtleSBkZWxldGlvbiB3YXMgcHJldmVudGVkJiMzNDssIHRzdF9uYW1lKTsKIAkJcmV0dXJuOwpAQCAtMjM2LDE1ICYjNDM7MjQyLDE1IEBAIHN0YXRpYyB2b2lkIGNoZWNrX2Nsb3NlZF9zb2NrZXQodm9pZCkKIAlpbnQgc2s7CiAKIAlzayA9IHByZXBhcmVfc2soJmFtcDt0aGlzX2lwX2Rlc3QsIDIwMCwgMjAwKTsKLQl0cnlfZGVsZXRlX2tleSgmIzM0O2Nsb3NlZCBzb2NrZXQsIGRlbGV0ZSBhIGtleSYjMzQ7LCBzaywgMjAwLCAyMDAsIDAsIC0xLCAtMSwgMCk7Ci0JdHJ5X2RlbGV0ZV9rZXkoJiMzNDtjbG9zZWQgc29ja2V0LCBkZWxldGUgYWxsIGtleXMmIzM0Oywgc2ssIDEwMCwgMTAwLCAwLCAtMSwgLTEsIDApOwomIzQzOwl0cnlfZGVsZXRlX2tleSgmIzM0O2Nsb3NlZCBzb2NrZXQsIGRlbGV0ZSBhIGtleSYjMzQ7LCBzaywgMjAwLCAyMDAsIDAsIDAsIC0xLCAtMSwgMCk7CiYjNDM7CXRyeV9kZWxldGVfa2V5KCYjMzQ7Y2xvc2VkIHNvY2tldCwgZGVsZXRlIGFsbCBrZXlzJiMzNDssIHNrLCAxMDAsIDEwMCwgMCwgMCwgLTEsIC0xLCAwKTsKIAljbG9zZShzayk7CiAKIAlzayA9IHByZXBhcmVfc2soJmFtcDt0aGlzX2lwX2Rlc3QsIDIwMCwgMjAwKTsKIAlpZiAodGVzdF9zZXRfa2V5KHNrLCAxMDAsIDIwMCkpCiAJCXRlc3RfZXJyb3IoJiMzNDtmYWlsZWQgdG8gc2V0IGN1cnJlbnQvcm5leHQga2V5cyYjMzQ7KTsKLQl0cnlfZGVsZXRlX2tleSgmIzM0O2Nsb3NlZCBzb2NrZXQsIGRlbGV0ZSBjdXJyZW50IGtleSYjMzQ7LCBzaywgMTAwLCAxMDAsIDAsIC0xLCAtMSwgRkFVTFRfQlVTWSk7Ci0JdHJ5X2RlbGV0ZV9rZXkoJiMzNDtjbG9zZWQgc29ja2V0LCBkZWxldGUgcm5leHQga2V5JiMzNDssIHNrLCAyMDAsIDIwMCwgMCwgLTEsIC0xLCBGQVVMVF9CVVNZKTsKJiM0MzsJdHJ5X2RlbGV0ZV9rZXkoJiMzNDtjbG9zZWQgc29ja2V0LCBkZWxldGUgY3VycmVudCBrZXkmIzM0Oywgc2ssIDEwMCwgMTAwLCAwLCAwLCAtMSwgLTEsIEZBVUxUX0JVU1kpOwomIzQzOwl0cnlfZGVsZXRlX2tleSgmIzM0O2Nsb3NlZCBzb2NrZXQsIGRlbGV0ZSBybmV4dCBrZXkmIzM0Oywgc2ssIDIwMCwgMjAwLCAwLCAwLCAtMSwgLTEsIEZBVUxUX0JVU1kpOwogCWNsb3NlKHNrKTsKIAogCXNrID0gcHJlcGFyZV9zaygmYW1wO3RoaXNfaXBfZGVzdCwgMjAwLCAyMDApOwpAQCAtMjU0LDEwICYjNDM7MjYwLDEyIEBAIHN0YXRpYyB2b2lkIGNoZWNrX2Nsb3NlZF9zb2NrZXQodm9pZCkKIAlpZiAodGVzdF9hZGRfa2V5KHNrLCAmIzM0O0dsb3J5IHRvIFVrcmFpbmUhJiMzNDssIHRoaXNfaXBfZGVzdCwKIAkJCSBERUZBVUxUX1RFU1RfUFJFRklYLCAxMiwgMTMpKQogCQl0ZXN0X2Vycm9yKCYjMzQ7dGVzdF9hZGRfa2V5KCkmIzM0Oyk7Ci0JdHJ5X2RlbGV0ZV9rZXkoJiMzNDtjbG9zZWQgc29ja2V0LCBkZWxldGUgYSBrZXkgJiM0Mzsgc2V0IGN1cnJlbnQvcm5leHQmIzM0Oywgc2ssIDEwMCwgMTAwLCAwLCAxMCwgMTMsIDApOwotCXRyeV9kZWxldGVfa2V5KCYjMzQ7Y2xvc2VkIHNvY2tldCwgZm9yY2UtZGVsZXRlIGN1cnJlbnQga2V5JiMzNDssIHNrLCAxMCwgMTEsIDAsIDIwMCwgLTEsIDApOwotCXRyeV9kZWxldGVfa2V5KCYjMzQ7Y2xvc2VkIHNvY2tldCwgZm9yY2UtZGVsZXRlIHJuZXh0IGtleSYjMzQ7LCBzaywgMTIsIDEzLCAwLCAtMSwgMjAwLCAwKTsKLQl0cnlfZGVsZXRlX2tleSgmIzM0O2Nsb3NlZCBzb2NrZXQsIGRlbGV0ZSBjdXJyZW50JiM0MztybmV4dCBrZXkmIzM0Oywgc2ssIDIwMCwgMjAwLCAwLCAtMSwgLTEsIEZBVUxUX0JVU1kpOwomIzQzOwl0cnlfZGVsZXRlX2tleSgmIzM0O2Nsb3NlZCBzb2NrZXQsIGRlbGV0ZSBhIGtleSAmIzQzOyBzZXQgY3VycmVudC9ybmV4dCYjMzQ7LCBzaywKJiM0MzsJCSAgICAgICAxMDAsIDEwMCwgMCwgMCwgMTAsIDEzLCAwKTsKJiM0MzsJdHJ5X2RlbGV0ZV9rZXkoJiMzNDtjbG9zZWQgc29ja2V0LCBmb3JjZS1kZWxldGUgY3VycmVudCBrZXkmIzM0Oywgc2ssIDEwLCAxMSwgMCwgMCwgMjAwLCAtMSwgMCk7CiYjNDM7CXRyeV9kZWxldGVfa2V5KCYjMzQ7Y2xvc2VkIHNvY2tldCwgZm9yY2UtZGVsZXRlIHJuZXh0IGtleSYjMzQ7LCBzaywgMTIsIDEzLCAwLCAwLCAtMSwgMjAwLCAwKTsKJiM0MzsJdHJ5X2RlbGV0ZV9rZXkoJiMzNDtjbG9zZWQgc29ja2V0LCBkZWxldGUgY3VycmVudCYjNDM7cm5leHQga2V5JiMzNDssIHNrLAomIzQzOwkJICAgICAgIDIwMCwgMjAwLCAwLCAwLCAtMSwgLTEsIEZBVUxUX0JVU1kpOwogCWNsb3NlKHNrKTsKIAogCXNrID0gcHJlcGFyZV9zaygmYW1wO3RoaXNfaXBfZGVzdCwgMjAwLCAyMDApOwpAQCAtMjcyLDYgJiM0MzsyODAsMTggQEAgc3RhdGljIHZvaWQgY2hlY2tfY2xvc2VkX3NvY2tldCh2b2lkKQogCQkJCSAgdGhpc19pcF9kZXN0LCBERUZBVUxUX1RFU1RfUFJFRklYLAogCQkJCSAgZmFsc2UsIHRydWUsIDIwLCAxMCwgMCk7CiAJY2xvc2Uoc2spOwomIzQzOwomIzQzOwlpZiAoIXNob3VsZF9za2lwX3Rlc3QoJiMzNDtjbG9zZWQgc29ja2V0LCBhZGQgJiM0MzsgZGVsZXRlIFZSRi1zY29wZWQga2V5JiMzNDssCiYjNDM7CQkJICAgICAgS0NPTkZJR19ORVRfVlJGKSkgewomIzQzOwkJc2sgPSBwcmVwYXJlX3NrKCZhbXA7dGhpc19pcF9kZXN0LCAyMDAsIDIwMCk7CiYjNDM7CQlpZiAodGVzdF9hZGRfa2V5X3ZyZihzaywgU0VDT05EX1BBU1NXT1JELCBUQ1BfQU9fS0VZRl9JRklOREVYLAomIzQzOwkJCQkgICAgIHRoaXNfaXBfZGVzdCwgREVGQVVMVF9URVNUX1BSRUZJWCwKJiM0MzsJCQkJICAgICB0ZXN0X3ZyZl9pZmluZGV4LCAyMDEsIDIwMSkpCiYjNDM7CQkJdGVzdF9lcnJvcigmIzM0O3Rlc3RfYWRkX2tleV92cmYoKSYjMzQ7KTsKJiM0MzsJCXRyeV9kZWxldGVfa2V5KCYjMzQ7Y2xvc2VkIHNvY2tldCwgYWRkICYjNDM7IGRlbGV0ZSBWUkYtc2NvcGVkIGtleSYjMzQ7LCBzaywgMjAxLCAyMDEsCiYjNDM7CQkJICAgICAgIHRlc3RfdnJmX2lmaW5kZXgsIDAsIC0xLCAtMSwgMCk7CiYjNDM7CQljbG9zZShzayk7CiYjNDM7CX0KIH0KIAogc3RhdGljIHZvaWQgYXNzZXJ0X25vX2N1cnJlbnRfcm5leHQoY29uc3QgY2hhciAqdHN0X21zZywgaW50IHNrKQpAQCAtMzIyLDggJiM0MzszNDIsOCBAQCBzdGF0aWMgdm9pZCBjaGVja19saXN0ZW5fc29ja2V0KHZvaWQpCiAJaW50IHNrLCBlcnI7CiAKIAlzayA9IHByZXBhcmVfbHNrKCZhbXA7dGhpc19pcF9kZXN0LCAyMDAsIDIwMCk7Ci0JdHJ5X2RlbGV0ZV9rZXkoJiMzNDtsaXN0ZW4gc29ja2V0LCBkZWxldGUgYSBrZXkmIzM0Oywgc2ssIDIwMCwgMjAwLCAwLCAtMSwgLTEsIDApOwotCXRyeV9kZWxldGVfa2V5KCYjMzQ7bGlzdGVuIHNvY2tldCwgZGVsZXRlIGFsbCBrZXlzJiMzNDssIHNrLCAxMDAsIDEwMCwgMCwgLTEsIC0xLCAwKTsKJiM0MzsJdHJ5X2RlbGV0ZV9rZXkoJiMzNDtsaXN0ZW4gc29ja2V0LCBkZWxldGUgYSBrZXkmIzM0Oywgc2ssIDIwMCwgMjAwLCAwLCAwLCAtMSwgLTEsIDApOwomIzQzOwl0cnlfZGVsZXRlX2tleSgmIzM0O2xpc3RlbiBzb2NrZXQsIGRlbGV0ZSBhbGwga2V5cyYjMzQ7LCBzaywgMTAwLCAxMDAsIDAsIDAsIC0xLCAtMSwgMCk7CiAJY2xvc2Uoc2spOwogCiAJc2sgPSBwcmVwYXJlX2xzaygmYW1wO3RoaXNfaXBfZGVzdCwgMjAwLCAyMDApOwpAQCAtMzQ1LDggJiM0MzszNjUsMTAgQEAgc3RhdGljIHZvaWQgY2hlY2tfbGlzdGVuX3NvY2tldCh2b2lkKQogCWlmIChsaXN0ZW4oc2ssIDEwKSkKIAkJdGVzdF9lcnJvcigmIzM0O2xpc3RlbigpJiMzNDspOwogCWFzc2VydF9ub19jdXJyZW50X3JuZXh0KCYjMzQ7bGlzdGVuKCkgYWZ0ZXIgY3VycmVudC9ybmV4dCBrZXlzIHNldCYjMzQ7LCBzayk7Ci0JdHJ5X2RlbGV0ZV9rZXkoJiMzNDtsaXN0ZW4gc29ja2V0LCBkZWxldGUgY3VycmVudCBrZXkgZnJvbSBiZWZvcmUgbGlzdGVuKCkmIzM0Oywgc2ssIDEwMCwgMTAwLCAwLCAtMSwgLTEsIEZBVUxUX0ZJWE1FKTsKLQl0cnlfZGVsZXRlX2tleSgmIzM0O2xpc3RlbiBzb2NrZXQsIGRlbGV0ZSBybmV4dCBrZXkgZnJvbSBiZWZvcmUgbGlzdGVuKCkmIzM0Oywgc2ssIDIwMCwgMjAwLCAwLCAtMSwgLTEsIEZBVUxUX0ZJWE1FKTsKJiM0MzsJdHJ5X2RlbGV0ZV9rZXkoJiMzNDtsaXN0ZW4gc29ja2V0LCBkZWxldGUgY3VycmVudCBrZXkgZnJvbSBiZWZvcmUgbGlzdGVuKCkmIzM0Oywgc2ssCiYjNDM7CQkgICAgICAgMTAwLCAxMDAsIDAsIDAsIC0xLCAtMSwgRkFVTFRfRklYTUUpOwomIzQzOwl0cnlfZGVsZXRlX2tleSgmIzM0O2xpc3RlbiBzb2NrZXQsIGRlbGV0ZSBybmV4dCBrZXkgZnJvbSBiZWZvcmUgbGlzdGVuKCkmIzM0Oywgc2ssCiYjNDM7CQkgICAgICAgMjAwLCAyMDAsIDAsIDAsIC0xLCAtMSwgRkFVTFRfRklYTUUpOwogCWNsb3NlKHNrKTsKIAogCWFzc2VydF9ub190Y3BfcmVwYWlyKCk7CkBAIC0zNTksMTMgJiM0MzszODEsMTMgQEAgc3RhdGljIHZvaWQgY2hlY2tfbGlzdGVuX3NvY2tldCh2b2lkKQogCQkJIERFRkFVTFRfVEVTVF9QUkVGSVgsIDEyLCAxMykpCiAJCXRlc3RfZXJyb3IoJiMzNDt0ZXN0X2FkZF9rZXkoKSYjMzQ7KTsKIAl0cnlfZGVsZXRlX2tleSgmIzM0O2xpc3RlbiBzb2NrZXQsIGRlbGV0ZSBhIGtleSAmIzQzOyBzZXQgY3VycmVudC9ybmV4dCYjMzQ7LCBzaywKLQkJICAgICAgIDEwMCwgMTAwLCAwLCAxMCwgMTMsIEZBVUxUX0NVUlJORVhUKTsKJiM0MzsJCSAgICAgICAxMDAsIDEwMCwgMCwgMCwgMTAsIDEzLCBGQVVMVF9DVVJSTkVYVCk7CiAJdHJ5X2RlbGV0ZV9rZXkoJiMzNDtsaXN0ZW4gc29ja2V0LCBmb3JjZS1kZWxldGUgY3VycmVudCBrZXkmIzM0Oywgc2ssCi0JCSAgICAgICAxMCwgMTEsIDAsIDIwMCwgLTEsIEZBVUxUX0NVUlJORVhUKTsKJiM0MzsJCSAgICAgICAxMCwgMTEsIDAsIDAsIDIwMCwgLTEsIEZBVUxUX0NVUlJORVhUKTsKIAl0cnlfZGVsZXRlX2tleSgmIzM0O2xpc3RlbiBzb2NrZXQsIGZvcmNlLWRlbGV0ZSBybmV4dCBrZXkmIzM0Oywgc2ssCi0JCSAgICAgICAxMiwgMTMsIDAsIC0xLCAyMDAsIEZBVUxUX0NVUlJORVhUKTsKJiM0MzsJCSAgICAgICAxMiwgMTMsIDAsIDAsIC0xLCAyMDAsIEZBVUxUX0NVUlJORVhUKTsKIAl0cnlfZGVsZXRlX2tleSgmIzM0O2xpc3RlbiBzb2NrZXQsIGRlbGV0ZSBhIGtleSYjMzQ7LCBzaywKLQkJICAgICAgIDIwMCwgMjAwLCAwLCAtMSwgLTEsIDApOwomIzQzOwkJICAgICAgIDIwMCwgMjAwLCAwLCAwLCAtMSwgLTEsIDApOwogCWNsb3NlKHNrKTsKIAogCXNrID0gcHJlcGFyZV9sc2soJmFtcDt0aGlzX2lwX2Rlc3QsIDIwMCwgMjAwKTsKQEAgLTExMzEsNyAmIzQzOzExNTMsNiBAQCBzdGF0aWMgdm9pZCBjaGVja19lc3RhYmxpc2hlZF9zb2NrZXQodm9pZCkKIHsKIAl1bnNpZ25lZCBpbnQgcG9ydCA9IHRlc3Rfc2VydmVyX3BvcnQ7CiAKLQlzZXR1cF92cmZzKCk7CiAJdHJ5X2NsaWVudF9ydW4oJiMzNDtjbGllbnQ6IENoZWNrIGN1cnJlbnQvcm5leHQga2V5cyB1bnNldCBiZWZvcmUgY29ubmVjdCgpJiMzNDssCiAJCSAgICAgICBwb3J0JiM0MzsmIzQzOywgMjAsIC0xLCAtMSk7CiAJdHJ5X2NsaWVudF9ydW4oJiMzNDtjbGllbnQ6IENoZWNrIGN1cnJlbnQvcm5leHQga2V5cyBzZXQgYmVmb3JlIGNvbm5lY3QoKSYjMzQ7LApAQCAtMTE1MCw2ICYjNDM7MTE3MSw3IEBAIHN0YXRpYyB2b2lkICpjbGllbnRfZm4odm9pZCAqYXJnKQogewogCWlmIChpbmV0X3B0b24oVEVTVF9GQU1JTFksIFRFU1RfV1JPTkdfSVAsICZhbXA7d3JvbmdfYWRkcikgIT0gMSkKIAkJdGVzdF9lcnJvcigmIzM0O0NhbiYjMzk7dCBjb252ZXJ0IGlwIGFkZHJlc3MgJXMmIzM0OywgVEVTVF9XUk9OR19JUCk7CiYjNDM7CXNldHVwX3ZyZnMoKTsKIAljaGVja19jbG9zZWRfc29ja2V0KCk7CiAJY2hlY2tfbGlzdGVuX3NvY2tldCgpOwogCWNoZWNrX2VzdGFibGlzaGVkX3NvY2tldCgpOwpAQCAtMTE1OCw2ICYjNDM7MTE4MCw2IEBAIHN0YXRpYyB2b2lkICpjbGllbnRfZm4odm9pZCAqYXJnKQogCiBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogewotCXRlc3RfaW5pdCgxMjEsIHNlcnZlcl9mbiwgY2xpZW50X2ZuKTsKJiM0MzsJdGVzdF9pbml0KDEyMiwgc2VydmVyX2ZuLCBjbGllbnRfZm4pOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvYW9saWIuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vbGliL2FvbGliLmgKaW5kZXggZWJiMjg5OWMxMmZlMC4uNTNiZTE3NDQyMzdlZSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvYW9saWIuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9hb2xpYi5oCkBAIC00MDQsNyAmIzQzOzQwNCw4IEBAIHN0YXRpYyBpbmxpbmUgaW50IHRlc3RfcHJlcGFyZV9kZWZfa2V5KHN0cnVjdCB0Y3BfYW9fYWRkICphbywKIAogZXh0ZXJuIGludCB0ZXN0X2dldF9vbmVfYW8oaW50IHNrLCBzdHJ1Y3QgdGNwX2FvX2dldHNvY2tvcHQgKm91dCwKIAkJCSAgIHZvaWQgKmFkZHIsIHNpemVfdCBhZGRyX3N6LAotCQkJICAgdWludDhfdCBwcmVmaXgsIHVpbnQ4X3Qgc25kaWQsIHVpbnQ4X3QgcmN2aWQpOwomIzQzOwkJCSAgIHVpbnQ4X3QgcHJlZml4LCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkLAomIzQzOwkJCSAgIHVpbnQ4X3Qga2V5ZmxhZ3MsIGludCBpZmluZGV4KTsKIGV4dGVybiBpbnQgdGVzdF9nZXRfYW9faW5mbyhpbnQgc2ssIHN0cnVjdCB0Y3BfYW9faW5mb19vcHQgKm91dCk7CiBleHRlcm4gaW50IHRlc3Rfc2V0X2FvX2luZm8oaW50IHNrLCBzdHJ1Y3QgdGNwX2FvX2luZm9fb3B0ICppbik7CiBleHRlcm4gaW50IHRlc3RfY21wX2dldHNvY2tvcHRfc2V0c29ja29wdChjb25zdCBzdHJ1Y3QgdGNwX2FvX2FkZCAqYSwKQEAgLTQxOCw3ICYjNDM7NDE5LDggQEAgc3RhdGljIGlubGluZSBpbnQgdGVzdF92ZXJpZnlfc29ja2V0X2tleShpbnQgc2ssIHN0cnVjdCB0Y3BfYW9fYWRkICprZXkpCiAJaW50IGVycjsKIAogCWVyciA9IHRlc3RfZ2V0X29uZV9hbyhzaywgJmFtcDtrZXkyLCAmYW1wO2tleS0mZ3Q7YWRkciwgc2l6ZW9mKGtleS0mZ3Q7YWRkciksCi0JCQkgICAgICBrZXktJmd0O3ByZWZpeCwga2V5LSZndDtzbmRpZCwga2V5LSZndDtyY3ZpZCk7CiYjNDM7CQkJICAgICAga2V5LSZndDtwcmVmaXgsIGtleS0mZ3Q7c25kaWQsIGtleS0mZ3Q7cmN2aWQsCiYjNDM7CQkJICAgICAga2V5LSZndDtrZXlmbGFncywga2V5LSZndDtpZmluZGV4KTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9zb2NrLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9zb2NrLmMKaW5kZXggZWY4ZTkwMzFkNDdhMy4uMmU3YjA2YTFhMTU2NyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvc29jay5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vbGliL3NvY2suYwpAQCAtMjUyLDcgJiM0MzsyNTIsNyBAQCBzdGF0aWMgaW50IHRlc3RfZ2V0X2FvX2tleXNfbnIoaW50IHNrKQogCiBpbnQgdGVzdF9nZXRfb25lX2FvKGludCBzaywgc3RydWN0IHRjcF9hb19nZXRzb2Nrb3B0ICpvdXQsCiAJCXZvaWQgKmFkZHIsIHNpemVfdCBhZGRyX3N6LCB1aW50OF90IHByZWZpeCwKLQkJdWludDhfdCBzbmRpZCwgdWludDhfdCByY3ZpZCkKJiM0MzsJCXVpbnQ4X3Qgc25kaWQsIHVpbnQ4X3QgcmN2aWQsIHVpbnQ4X3Qga2V5ZmxhZ3MsIGludCBpZmluZGV4KQogewogCXN0cnVjdCB0Y3BfYW9fZ2V0c29ja29wdCB0bXAgPSB7fTsKIAlzb2NrbGVuX3QgdG1wX3N6ID0gc2l6ZW9mKHRtcCk7CkBAIC0yNjIsNiAmIzQzOzI2Miw4IEBAIGludCB0ZXN0X2dldF9vbmVfYW8oaW50IHNrLCBzdHJ1Y3QgdGNwX2FvX2dldHNvY2tvcHQgKm91dCwKIAl0bXAucHJlZml4ID0gcHJlZml4OwogCXRtcC5zbmRpZCAgPSBzbmRpZDsKIAl0bXAucmN2aWQgID0gcmN2aWQ7CiYjNDM7CXRtcC5rZXlmbGFncyA9IGtleWZsYWdzOwomIzQzOwl0bXAuaWZpbmRleCA9IGlmaW5kZXg7CiAJdG1wLm5rZXlzICA9IDE7CiAKIAlyZXQgPSBnZXRzb2Nrb3B0KHNrLCBJUFBST1RPX1RDUCwgVENQX0FPX0dFVF9LRVlTLCAmYW1wO3RtcCwgJmFtcDt0bXBfc3opOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTU6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjM5MgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBGdXp6aW5nIFNlc3Npb24gSnVzdGlmaWNhdGlvbioqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGxhbmRlZC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7RG9lcyB0aGlzIHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBydW4/JiMzNDsgSXQgbW9kaWZpZXMgYG5ldC9pcHY0L3RjcF9hby5jYCBhbmQgYSBmZXcgc2VsZnRlc3RzLCB3aGljaCBpcyBhIGtleSBpbmRpY2F0b3IuIExldCYjMzk7cyBkaWcgaW4uCgpUaGUgZGlmZiBpbiBgbmV0L2lwdjQvdGNwX2FvLmNgIGlzIHByZXR0eSBjb25jaXNlLiBIbW0sIGl0IHNlZW1zIHRvIGFkZCBhIGNoZWNrIGZvciBgVENQX0FPX0tFWUZfSUZJTkRFWGAgYW5kIGFzc2lnbnMgYGNtZC5pZmluZGV4YCB0byBhIG5ldyB2YXJpYWJsZSBgbDNpbmRleGAuIFJpZ2h0LCB0aGlzIGBjbWRgIHZhcmlhYmxlLi4uIHdoZXJlIGRvZXMgdGhhdCBjb21lIGZyb20/IEl0JiMzOTtzIGFsbW9zdCBjZXJ0YWlubHkgYSBzdHJ1Y3QgYmVpbmcgcGFzc2VkIGluIGZyb20gdXNlcnNwYWNlIHZpYSBgc2V0c29ja29wdGAuIEkgc2hvdWxkIGNoZWNrIHRoZSBkZWZpbml0aW9uIGFuZCB1c2FnZSBvZiBgdGNwX2FvX2RlbF9jbWRgIHdpdGhpbiB0aGUgc2FtZSBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQmIzM5O3MgYmVpbmcgcGFzc2VkIGluIGFuZCBob3cgdGhpcyBuZXcgYGlmYCBzdGF0ZW1lbnQgaW50ZXJhY3RzIHdpdGggdGhlIGV4aXN0aW5nIGxvZ2ljLCB0byBnZXQgYSBoYW5kbGUgb24gcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gTGV0JiMzOTtzIHNlZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxNTo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y3BfYW9fZGVsX2NtZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9hby5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9hby5jPTk5MD10Y3BfaW5ib3VuZF9hb19oYXNoKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC90Y3BfYW8uYy0xMDU1LVx0XHRcdGlmIChrZXkpXG5uZXQvaXB2NC90Y3BfYW8uYzoxMDU2Olx0XHRcdFx0LyogcGFpcnMgd2l0aCB0Y3BfYW9fZGVsX2NtZCAqL1xubmV0L2lwdjQvdGNwX2FvLmMtMTA1Ny1cdFx0XHRcdFdSSVRFX09OQ0UoaW5mby1cdTAwM2VjdXJyZW50X2tleSwga2V5KTtcbi0tXG5uZXQvaXB2NC90Y3BfYW8uYy0xMDY4LVx0ICogLSByZXF1ZXN0IHNvY2tldHMgd291bGQgcmFjZSBvbiB0aG9zZSBrZXkgcG9pbnRlcnNcbm5ldC9pcHY0L3RjcF9hby5jOjEwNjk6XHQgKiAtIHRjcF9hb19kZWxfY21kKCkgYWxsb3dzIGFzeW5jIGtleSByZW1vdmFsXG5uZXQvaXB2NC90Y3BfYW8uYy0xMDcwLVx0ICovXG4tLVxubmV0L2lwdjQvdGNwX2FvLmM9MTc0Nj1zdGF0aWMgaW50IHRjcF9hb19kZWxldGVfa2V5KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRjcF9hb19pbmZvICphb19pbmZvLFxuLS1cbm5ldC9pcHY0L3RjcF9hby5jLTE3OTktI2RlZmluZSBUQ1BfQU9fREVMX0tFWUZfQUxMIChUQ1BfQU9fS0VZRl9JRklOREVYKVxubmV0L2lwdjQvdGNwX2FvLmM6MTgwMDpzdGF0aWMgaW50IHRjcF9hb19kZWxfY21kKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgc2hvcnQgaW50IGZhbWlseSxcbm5ldC9pcHY0L3RjcF9hby5jLTE4MDEtXHRcdFx0ICBzb2NrcHRyX3Qgb3B0dmFsLCBpbnQgb3B0bGVuKVxuLS1cbm5ldC9pcHY0L3RjcF9hby5jPTIwMzg9aW50IHRjcF9wYXJzZV9hbyhzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHVuc2lnbmVkIHNob3J0IGludCBmYW1pbHksXG4tLVxubmV0L2lwdjQvdGNwX2FvLmMtMjA0Ny1cdGNhc2UgVENQX0FPX0RFTF9LRVk6XG5uZXQvaXB2NC90Y3BfYW8uYzoyMDQ4Olx0XHRyZXR1cm4gdGNwX2FvX2RlbF9jbWQoc2ssIGZhbWlseSwgb3B0dmFsLCBvcHRsZW4pO1xubmV0L2lwdjQvdGNwX2FvLmMtMjA0OS1cdGNhc2UgVENQX0FPX0lORk86XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDE1OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0NDEKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgYHRjcF9hb19kZWxfY21kYCBGdW5jdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBndXRzIG9mIHRoZSBUQ1AgQXV0aGVudGljYXRpb24gT3B0aW9uIChUQ1AgQU8pIGltcGxlbWVudGF0aW9uLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBgdGNwX2FvX2RlbF9jbWRgIGZ1bmN0aW9uIHdpdGhpbiBgbmV0L2lwdjQvdGNwX2FvLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgVENQIEFPIGtleXMgYXJlIHJlbW92ZWQgb3IgaW52YWxpZGF0ZWQsIGFzIHRoaXMgaXMgY3J1Y2lhbCBmb3Igc2VjdXJpdHkgYW5kIHNlc3Npb24gbWFuYWdlbWVudC4gSSYjMzk7bSBhc3N1bWluZyB0aGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyB0aGUgZGVsZXRpb24gb3IgaW52YWxpZGF0aW9uIG9mIGF1dGhlbnRpY2F0aW9uIGtleXMgYXNzb2NpYXRlZCB3aXRoIGEgVENQIGNvbm5lY3Rpb24uIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGtleSBtYW5hZ2VtZW50IHN0cnVjdHVyZXMsIHdoYXQgbG9ja2luZyBtZWNoYW5pc21zIGl0IGVtcGxveXMgdG8gZW5zdXJlIHRocmVhZCBzYWZldHkgKGxpa2VseSBzcGlubG9ja3Mgb3IgcmVhZC93cml0ZSBsb2NrcywgZ2l2ZW4gaXRzIHBvdGVudGlhbCBmb3IgY29uY3VycmVudCBhY2Nlc3MpLCBhbmQgaG93IGl0IGNsZWFucyB1cCBhbnkgYXNzb2NpYXRlZCByZXNvdXJjZXMuIEFyZSB0aGVyZSBhbnkgcmVmZXJlbmNlIGNvdW50cyBpbnZvbHZlZD8gV2hhdCBoYXBwZW5zIGlmIHRoZSBrZXkgZGVsZXRpb24gZmFpbHMgZm9yIHNvbWUgcmVhc29uPyBEb2VzIHRoaXMgdHJpZ2dlciBhbnkgZXJyb3IgY2FsbGJhY2tzIG9yIGxvZ2dpbmc/IEkmIzM5O2xsIGFsc28gYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcywgbGlrZSByYWNlIGNvbmRpdGlvbnMgb3IgbWVtb3J5IGxlYWtzLCBhc3NvY2lhdGVkIHdpdGggdGhlIGRlbGV0aW9uIHByb2Nlc3MgaXRzZWxmLiBUaGlzIGZ1bmN0aW9uIGlzIGNyaXRpY2FsIGZvciBtYWludGFpbmluZyB0aGUgaW50ZWdyaXR5IGFuZCBzZWN1cml0eSBvZiB0aGUgQU8gc3lzdGVtLCBzbyBhIHRob3JvdWdoIHVuZGVyc3RhbmRpbmcgaXMgYWJzb2x1dGVseSBlc3NlbnRpYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDE1OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX2FvLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNzk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE3OTU6XHRcdGhsaXN0X2FkZF9oZWFkX3JjdShcdTAwMjZrZXktXHUwMDNlbm9kZSwgXHUwMDI2YW9faW5mby1cdTAwM2VoZWFkKTtcbjE3OTY6XHRcdHJldHVybiBlcnI7XG4xNzk3Olx0fVxuMTc5ODpcdFxuMTc5OTpcdCNkZWZpbmUgVENQX0FPX0RFTF9LRVlGX0FMTCAoVENQX0FPX0tFWUZfSUZJTkRFWClcbjE4MDA6XHRzdGF0aWMgaW50IHRjcF9hb19kZWxfY21kKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgc2hvcnQgaW50IGZhbWlseSxcbjE4MDE6XHRcdFx0XHQgIHNvY2twdHJfdCBvcHR2YWwsIGludCBvcHRsZW4pXG4xODAyOlx0e1xuMTgwMzpcdFx0c3RydWN0IHRjcF9hb19rZXkgKmtleSwgKm5ld19jdXJyZW50ID0gTlVMTCwgKm5ld19ybmV4dCA9IE5VTEw7XG4xODA0Olx0XHRpbnQgZXJyLCBhZGRyX2xlbiwgbDNpbmRleCA9IDA7XG4xODA1Olx0XHRzdHJ1Y3QgdGNwX2FvX2luZm8gKmFvX2luZm87XG4xODA2Olx0XHR1bmlvbiB0Y3BfYW9fYWRkciAqYWRkcjtcbjE4MDc6XHRcdHN0cnVjdCB0Y3BfYW9fZGVsIGNtZDtcbjE4MDg6XHRcdF9fdTggcHJlZml4O1xuMTgwOTpcdFx0dTE2IHBvcnQ7XG4xODEwOlx0XG4xODExOlx0XHRpZiAob3B0bGVuIFx1MDAzYyBzaXplb2YoY21kKSlcbjE4MTI6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xODEzOlx0XG4xODE0Olx0XHRlcnIgPSBjb3B5X3N0cnVjdF9mcm9tX3NvY2twdHIoXHUwMDI2Y21kLCBzaXplb2YoY21kKSwgb3B0dmFsLCBvcHRsZW4pO1xuMTgxNTpcdFx0aWYgKGVycilcbjE4MTY6XHRcdFx0cmV0dXJuIGVycjtcbjE4MTc6XHRcbjE4MTg6XHRcdGlmIChjbWQucmVzZXJ2ZWQgIT0gMCB8fCBjbWQucmVzZXJ2ZWQyICE9IDApXG4xODE5Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTgyMDpcdFxuMTgyMTpcdFx0aWYgKGNtZC5zZXRfY3VycmVudCB8fCBjbWQuc2V0X3JuZXh0KSB7XG4xODIyOlx0XHRcdGlmICghdGNwX2FvX2Nhbl9zZXRfY3VycmVudF9ybmV4dChzaykpXG4xODIzOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xODI0Olx0XHR9XG4xODI1Olx0XG4xODI2Olx0XHRpZiAoY21kLmtleWZsYWdzIFx1MDAyNiB+VENQX0FPX0RFTF9LRVlGX0FMTClcbjE4Mjc6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xODI4Olx0XG4xODI5Olx0XHQvKiBObyBzYW5pdHkgY2hlY2sgZm9yIFRDUF9BT19LRVlGX0lGSU5ERVggYXMgaWYgYSBWUkZcbjE4MzA6XHRcdCAqIHdhcyBkZXN0cm95ZWQsIHRoZXJlIHN0aWxsIHNob3VsZCBiZSBhIHdheSB0byBkZWxldGUga2V5cyxcbjE4MzE6XHRcdCAqIHRoYXQgd2VyZSBib3VuZCB0byB0aGF0IGwzaW50Zi4gU28sIGZhaWwgbGF0ZSBhdCBsb29rdXAgc3RhZ2VcbjE4MzI6XHRcdCAqIGlmIHRoZXJlIGlzIG5vIGtleSBmb3IgdGhhdCBpZmluZGV4LlxuMTgzMzpcdFx0ICovXG4xODM0Olx0XHRpZiAoY21kLmlmaW5kZXggXHUwMDI2XHUwMDI2ICEoY21kLmtleWZsYWdzIFx1MDAyNiBUQ1BfQU9fS0VZRl9JRklOREVYKSlcbjE4MzU6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xODM2Olx0XG4xODM3Olx0XHRpZiAoY21kLmtleWZsYWdzIFx1MDAyNiBUQ1BfQU9fS0VZRl9JRklOREVYKVxuMTgzODpcdFx0XHRsM2luZGV4ID0gY21kLmlmaW5kZXg7XG4xODM5Olx0XG4xODQwOlx0XHRhb19pbmZvID0gc2V0c29ja29wdF9hb19pbmZvKHNrKTtcbjE4NDE6XHRcdGlmIChJU19FUlIoYW9faW5mbykpXG4xODQyOlx0XHRcdHJldHVybiBQVFJfRVJSKGFvX2luZm8pO1xuMTg0MzpcdFx0aWYgKCFhb19pbmZvKVxuMTg0NDpcdFx0XHRyZXR1cm4gLUVOT0VOVDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTU6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODU3MAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE4NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFRDUCBBTyBLZXkgRmxhZyBMb2dpYyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBJIHNlZSB0aGV5JiMzOTt2ZSBhZGRlZCBhIGNoZWNrOiBgaWYgKGNtZC5rZXlmbGFncyAmYW1wOyBUQ1BfQU9fS0VZRl9JRklOREVYKWAuIEl0IHNlZW1zIGxpa2UgdGhleSYjMzk7cmUgbG9va2luZyBmb3IgYSBzcGVjaWZpYyBmbGFnLCBgVENQX0FPX0tFWUZfSUZJTkRFWGAsIHdpdGhpbiBhIGBrZXlmbGFnc2AgZmllbGQgb2YgYSBzdHJ1Y3R1cmUgY2FsbGVkIGBjbWRgLiBSaWdodCwgYGNtZGAgaXMgcG9wdWxhdGVkIGJ5IGBjb3B5X3N0cnVjdF9mcm9tX3NvY2twdHIoJmFtcDtjbWQsIHNpemVvZihjbWQpLCBvcHR2YWwsIG9wdGxlbik7YC4gSSByZW1lbWJlciB0aGlzIGZ1bmN0aW9uLiBJdCBjb3BpZXMgZGF0YSBmcm9tIHVzZXIgc3BhY2UuIEl0IGhhbmRsZXMgY2FzZXMgd2hlcmUgdGhlIHVzZXItcHJvdmlkZWQgc3RydWN0dXJlIGlzIGVpdGhlciBzbWFsbGVyIG9yIGxhcmdlciB0aGFuIHRoZSBrZXJuZWwmIzM5O3MgZGVmaW5pdGlvbi4gWmVyby1wYWRkaW5nIGluIHRoZSBmaXJzdCBjYXNlLCB6ZXJvLWNoZWNraW5nIHRoZSBleHRyYSBieXRlcyBpbiB0aGUgc2Vjb25kLiBTbywgYXNzdW1pbmcgdGhlIHVzZXIgc3BhY2Ugc3RydWN0IGlzIHdlbGwtZm9ybWVkLCBgY21kYCBpcyBmdWxseSBpbml0aWFsaXplZCwgd2hpY2ggaXMgY3J1Y2lhbC4KCk5vdywgYGwzaW5kZXhgIGlzIGEgbG9jYWwgdmFyaWFibGUsIGluaXRpYWxpemVkIHRvIHplcm86IGBpbnQgZXJyLCBhZGRyX2xlbiwgbDNpbmRleCA9IDA7YC4gT2theSwgYW5kIHRoZW4gbGF0ZXIgb24sIHRoZXkgdXNlIGBsM2luZGV4YCBpbiBgdGNwX2FvX2RlbF9jbWRgLiBUaGF0JiMzOTtzIHRoZSBrZXkuIFdoZXJlIGRvZXMgdGhpcyB2YWx1ZSBhY3R1YWxseSBnZXQgKnVzZWQqPyBJIG5lZWQgdG8gdHJhY2UgdGhpcyB2YXJpYWJsZS4gTGV0JiMzOTtzIGRpZyBkZWVwZXIgYW5kIHNlZSBleGFjdGx5IGhvdyBgbDNpbmRleGAgaXMgZW1wbG95ZWQgZG93biB0aGUgbGluZS4gSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9uIG9mIHRoaXMgZmxhZyBhbmQgaG93IGl0JiMzOTtzIGluZmx1ZW5jaW5nIHRoZSBuZXR3b3JrIHN0YWNrIGJlaGF2aW9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxNTo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9hby5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTg0NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxODQ1Olx0XG4xODQ2Olx0XHQvKiBGb3Igc29ja2V0cyBpbiBUQ1BfQ0xPU0VEIGl0JiMzOTtzIHBvc3NpYmxlIHNldCBrZXlzIHRoYXQgYXJlbiYjMzk7dFxuMTg0NzpcdFx0ICogbWF0Y2hpbmcgdGhlIGZ1dHVyZSBwZWVyIChhZGRyZXNzL1ZSRi9ldGMpLFxuMTg0ODpcdFx0ICogdGNwX2FvX2Nvbm5lY3RfaW5pdCgpIHdpbGwgY2hvb3NlIGEgY29ycmVjdCBtYXRjaGluZyBNS1RcbjE4NDk6XHRcdCAqIGlmIHRoZXJlJiMzOTtzIGFueS5cbjE4NTA6XHRcdCAqL1xuMTg1MTpcdFx0aWYgKGNtZC5zZXRfY3VycmVudCkge1xuMTg1MjpcdFx0XHRuZXdfY3VycmVudCA9IHRjcF9hb19lc3RhYmxpc2hlZF9rZXkoc2ssIGFvX2luZm8sIGNtZC5jdXJyZW50X2tleSwgLTEpO1xuMTg1MzpcdFx0XHRpZiAoIW5ld19jdXJyZW50KVxuMTg1NDpcdFx0XHRcdHJldHVybiAtRU5PRU5UO1xuMTg1NTpcdFx0fVxuMTg1NjpcdFx0aWYgKGNtZC5zZXRfcm5leHQpIHtcbjE4NTc6XHRcdFx0bmV3X3JuZXh0ID0gdGNwX2FvX2VzdGFibGlzaGVkX2tleShzaywgYW9faW5mbywgLTEsIGNtZC5ybmV4dCk7XG4xODU4Olx0XHRcdGlmICghbmV3X3JuZXh0KVxuMTg1OTpcdFx0XHRcdHJldHVybiAtRU5PRU5UO1xuMTg2MDpcdFx0fVxuMTg2MTpcdFx0aWYgKGNtZC5kZWxfYXN5bmMgXHUwMDI2XHUwMDI2IHNrLVx1MDAzZXNrX3N0YXRlICE9IFRDUF9MSVNURU4pXG4xODYyOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTg2MzpcdFxuMTg2NDpcdFx0aWYgKGZhbWlseSA9PSBBRl9JTkVUKSB7XG4xODY1Olx0XHRcdHN0cnVjdCBzb2NrYWRkcl9pbiAqc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKVx1MDAyNmNtZC5hZGRyO1xuMTg2NjpcdFxuMTg2NzpcdFx0XHRhZGRyID0gKHVuaW9uIHRjcF9hb19hZGRyICopXHUwMDI2c2luLVx1MDAzZXNpbl9hZGRyO1xuMTg2ODpcdFx0XHRhZGRyX2xlbiA9IHNpemVvZihzdHJ1Y3QgaW5fYWRkcik7XG4xODY5Olx0XHRcdHBvcnQgPSBudG9ocyhzaW4tXHUwMDNlc2luX3BvcnQpO1xuMTg3MDpcdFx0fSBlbHNlIHtcbjE4NzE6XHRcdFx0c3RydWN0IHNvY2thZGRyX2luNiAqc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopXHUwMDI2Y21kLmFkZHI7XG4xODcyOlx0XHRcdHN0cnVjdCBpbjZfYWRkciAqYWRkcjYgPSBcdTAwMjZzaW42LVx1MDAzZXNpbjZfYWRkcjtcbjE4NzM6XHRcbjE4NzQ6XHRcdFx0aWYgKGlwdjZfYWRkcl92NG1hcHBlZChhZGRyNikpIHtcbjE4NzU6XHRcdFx0XHRhZGRyID0gKHVuaW9uIHRjcF9hb19hZGRyICopXHUwMDI2YWRkcjYtXHUwMDNlczZfYWRkcjMyWzNdO1xuMTg3NjpcdFx0XHRcdGFkZHJfbGVuID0gc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKTtcbjE4Nzc6XHRcdFx0XHRmYW1pbHkgPSBBRl9JTkVUO1xuMTg3ODpcdFx0XHR9IGVsc2Uge1xuMTg3OTpcdFx0XHRcdGFkZHIgPSAodW5pb24gdGNwX2FvX2FkZHIgKilhZGRyNjtcbjE4ODA6XHRcdFx0XHRhZGRyX2xlbiA9IHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpO1xuMTg4MTpcdFx0XHR9XG4xODgyOlx0XHRcdHBvcnQgPSBudG9ocyhzaW42LVx1MDAzZXNpbjZfcG9ydCk7XG4xODgzOlx0XHR9XG4xODg0Olx0XHRwcmVmaXggPSBjbWQucHJlZml4O1xuMTg4NTpcdFxuMTg4NjpcdFx0LyogQ3VycmVudGx5IG1hdGNoaW5nIGlzIG5vdCBwZXJmb3JtZWQgb24gcG9ydCAob3IgcG9ydCByYW5nZXMpICovXG4xODg3Olx0XHRpZiAocG9ydCAhPSAwKVxuMTg4ODpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE4ODk6XHRcbjE4OTA6XHRcdC8qIFdlIGNvdWxkIGNob29zZSByYW5kb20gcHJlc2VudCBrZXkgaGVyZSBmb3IgY3VycmVudC9ybmV4dFxuMTg5MTpcdFx0ICogYnV0IHRoYXQmIzM5O3MgbGVzcyBwcmVkaWN0YWJsZS4gTGV0JiMzOTtzIGJlIHN0cmljdCBhbmQgZG9uJiMzOTt0XG4xODkyOlx0XHQgKiBhbGxvdyByZW1vdmluZyBhIGtleSB0aGF0JiMzOTtzIGluIHVzZS4gUkZDNTkyNSBkb2VzbiYjMzk7dFxuMTg5MzpcdFx0ICogc3BlY2lmeSBob3ctdG8gY29vcmRpbmF0ZSBrZXkgcmVtb3ZhbCwgYnV0IHNheXM6XG4xODk0Olx0XHQgKiBcJiMzNDtJdCBpcyBwcmVzdW1lZCB0aGF0IGFuIE1LVCBhZmZlY3RpbmcgYSBwYXJ0aWN1bGFyXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDE1OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5NTIKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBJJiMzOTttIHJlYWR5IHRvIGRlbHZlIGludG8gdGhpcyB0ZXh0LiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdC4gSSYjMzk7bGwgYXBwcm9hY2ggaXQgd2l0aCBteSB1c3VhbCBjcml0aWNhbCBleWUsIGNvbnNpZGVyaW5nIGFsbCB0aGUgaW1wbGljYXRpb25zIGFuZCBudWFuY2VzLiBJJiMzOTttIHByZXBhcmVkIHRvIGRpc3NlY3QgdGhlIGFyZ3VtZW50cywgZXZhbHVhdGUgdGhlIGV2aWRlbmNlLCBhbmQgc3ludGhlc2l6ZSB0aGUgaW5mb3JtYXRpb24gaW50byBhIGNvaGVzaXZlIHVuZGVyc3RhbmRpbmcuIExldCYjMzk7cyBnZXQgdG8gaXQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDE1OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX2FvLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4OTU6XHRcdCAqIGNvbm5lY3Rpb24gY2Fubm90IGJlIGRlc3Ryb3llZCBkdXJpbmcgYW4gYWN0aXZlIGNvbm5lY3Rpb25cJiMzNDtcbjE4OTY6XHRcdCAqL1xuMTg5NzpcdFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGtleSwgXHUwMDI2YW9faW5mby1cdTAwM2VoZWFkLCBub2RlLFxuMTg5ODpcdFx0XHRcdFx0IGxvY2tkZXBfc29ja19pc19oZWxkKHNrKSkge1xuMTg5OTpcdFx0XHRpZiAoY21kLnNuZGlkICE9IGtleS1cdTAwM2VzbmRpZCB8fFxuMTkwMDpcdFx0XHQgICAgY21kLnJjdmlkICE9IGtleS1cdTAwM2VyY3ZpZClcbjE5MDE6XHRcdFx0XHRjb250aW51ZTtcbjE5MDI6XHRcbjE5MDM6XHRcdFx0aWYgKGZhbWlseSAhPSBrZXktXHUwMDNlZmFtaWx5IHx8XG4xOTA0Olx0XHRcdCAgICBwcmVmaXggIT0ga2V5LVx1MDAzZXByZWZpeGxlbiB8fFxuMTkwNTpcdFx0XHQgICAgbWVtY21wKGFkZHIsIFx1MDAyNmtleS1cdTAwM2VhZGRyLCBhZGRyX2xlbikpXG4xOTA2Olx0XHRcdFx0Y29udGludWU7XG4xOTA3Olx0XG4xOTA4Olx0XHRcdGlmICgoY21kLmtleWZsYWdzIFx1MDAyNiBUQ1BfQU9fS0VZRl9JRklOREVYKSAhPVxuMTkwOTpcdFx0XHQgICAgKGtleS1cdTAwM2VrZXlmbGFncyBcdTAwMjYgVENQX0FPX0tFWUZfSUZJTkRFWCkpXG4xOTEwOlx0XHRcdFx0Y29udGludWU7XG4xOTExOlx0XG4xOTEyOlx0XHRcdGlmIChrZXktXHUwMDNlbDNpbmRleCAhPSBsM2luZGV4KVxuMTkxMzpcdFx0XHRcdGNvbnRpbnVlO1xuMTkxNDpcdFxuMTkxNTpcdFx0XHRpZiAoa2V5ID09IG5ld19jdXJyZW50IHx8IGtleSA9PSBuZXdfcm5leHQpXG4xOTE2Olx0XHRcdFx0Y29udGludWU7XG4xOTE3Olx0XG4xOTE4Olx0XHRcdHJldHVybiB0Y3BfYW9fZGVsZXRlX2tleShzaywgYW9faW5mbywgY21kLmRlbF9hc3luYywga2V5LFxuMTkxOTpcdFx0XHRcdFx0XHQgbmV3X2N1cnJlbnQsIG5ld19ybmV4dCk7XG4xOTIwOlx0XHR9XG4xOTIxOlx0XHRyZXR1cm4gLUVOT0VOVDtcbjE5MjI6XHR9XG4xOTIzOlx0XG4xOTI0Olx0LyogY21kLmFvX3JlcXVpcmVkIG1ha2VzIGEgc29ja2V0IFRDUC1BTyBvbmx5LlxuMTkyNTpcdCAqIERvbiYjMzk7dCBhbGxvdyBhbnkgbWQ1IGtleXMgZm9yIGFueSBsM2ludGYgb24gdGhlIHNvY2tldCB0b2dldGhlciB3aXRoIGl0LlxuMTkyNjpcdCAqIFJlc3RyaWN0aW5nIGl0IGVhcmx5IGluIHNldHNvY2tvcHQoKSByZW1vdmVzIGEgY2hlY2sgZm9yXG4xOTI3Olx0ICogYW9faW5mby1cdTAwM2Vhb19yZXF1aXJlZCBvbiBpbmJvdW5kIHRjcCBzZWdtZW50IGZhc3QtcGF0aC5cbjE5Mjg6XHQgKi9cbjE5Mjk6XHRzdGF0aWMgaW50IHRjcF9hb19yZXF1aXJlZF92ZXJpZnkoc3RydWN0IHNvY2sgKnNrKVxuMTkzMDpcdHtcbjE5MzE6XHQjaWZkZWYgQ09ORklHX1RDUF9NRDVTSUdcbjE5MzI6XHRcdGNvbnN0IHN0cnVjdCB0Y3BfbWQ1c2lnX2luZm8gKm1kNXNpZztcbjE5MzM6XHRcbjE5MzQ6XHRcdGlmICghc3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZ0Y3BfbWQ1X25lZWRlZC5rZXkpKVxuMTkzNTpcdFx0XHRyZXR1cm4gMDtcbjE5MzY6XHRcbjE5Mzc6XHRcdG1kNXNpZyA9IHJjdV9kZXJlZmVyZW5jZV9jaGVjayh0Y3Bfc2soc2spLVx1MDAzZW1kNXNpZ19pbmZvLFxuMTkzODpcdFx0XHRcdFx0ICAgICAgIGxvY2tkZXBfc29ja19pc19oZWxkKHNrKSk7XG4xOTM5Olx0XHRpZiAoIW1kNXNpZylcbjE5NDA6XHRcdFx0cmV0dXJuIDA7XG4xOTQxOlx0XG4xOTQyOlx0XHRpZiAocmN1X2RlcmVmZXJlbmNlX2NoZWNrKGhsaXN0X2ZpcnN0X3JjdShcdTAwMjZtZDVzaWctXHUwMDNlaGVhZCksXG4xOTQzOlx0XHRcdFx0XHQgIGxvY2tkZXBfc29ja19pc19oZWxkKHNrKSkpXG4xOTQ0Olx0XHRcdHJldHVybiAxO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxNTo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDg1NQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDc5OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgVENQX0FPX0RFTF9LRVkgTG9naWMgQnVnIEZpeCoqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIHRoZSBjb3JlIGNoYW5nZSBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBpdCBmaXhlcyBhIGxvZ2ljIGVycm9yIGluIGhvdyBgbDNpbmRleGAgaXMgaGFuZGxlZCB3aXRoaW4gdGhlIGBUQ1BfQU9fREVMX0tFWWAgc2V0c29ja29wdC4gUHJldmlvdXNseSwgYGwzaW5kZXhgIHdhcyBpbml0aWFsaXplZCB0byB6ZXJvIGFuZCBuZXZlciBhY3R1YWxseSB1cGRhdGVkIHdpdGggdGhlIHZhbHVlIG9mIGBjbWQuaWZpbmRleGAsIGV2ZW4gaWYgdGhlIGBUQ1BfQU9fS0VZRl9JRklOREVYYCBmbGFnIHdhcyBzZXQuIFRoZSBjb2RlIHdvdWxkIHRoZW4gY29tcGFyZSBhIGtleSYjMzk7cyBga2V5LSZndDtsM2luZGV4YCB3aXRoIHRoaXMgY29uc3RhbnQgemVybywgd2hpY2ggaXMgY2xlYXJseSBub3Qgd2hhdCB3YXMgaW50ZW5kZWQgd2hlbiBhIHNwZWNpZmljIGludGVyZmFjZSBpbmRleCB3YXMgcHJvdmlkZWQuCgpUaGUgZml4IGludHJvZHVjZXMgYSBjb25kaXRpb25hbCBhc3NpZ25tZW50OiBgaWYgKGNtZC5rZXlmbGFncyAmYW1wOyBUQ1BfQU9fS0VZRl9JRklOREVYKSBsM2luZGV4ID0gY21kLmlmaW5kZXg7YC4gIFRoaXMgZW5zdXJlcyB0aGF0IHdoZW4gdGhlIGBUQ1BfQU9fS0VZRl9JRklOREVYYCBmbGFnIGlzIHNldCwgYGwzaW5kZXhgIGlzIG5vdyBjb3JyZWN0bHkgc2V0IHRvIHRoZSB1c2VyLXByb3ZpZGVkIGludGVyZmFjZSBpbmRleCwgYXMgZXhwZWN0ZWQuCgpJ4oCZdmUgcmV2aWV3ZWQgdGhlIGNvZGUuIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQsIGJlY2F1c2UgYGNtZGAgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgYnkgYGNvcHlfc3RydWN0X2Zyb21fc29ja3B0cmAuICBgbDNpbmRleGAgaXMgaW5pdGlhbGl6ZWQgdG8gMCBhbmQgdGhlbiBwb3NzaWJseSB1cGRhdGVkLiBObyBpbmZvcm1hdGlvbiBsZWFrYWdlIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzIGlzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaC4KCkkgYWxzbyBzZWUgYSByZWxhdGVkIGNoYW5nZSBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvc29jay5jYCB3aXRoaW4gdGhlIGB0ZXN0X2dldF9vbmVfYW9gIGZ1bmN0aW9uLiBUaGlzIHNlbGZ0ZXN0IGNvZGUgaGFzIGJlZW4gdXBkYXRlZCB0byBzZXQgdGhlIGBrZXlmbGFnc2AgYW5kIGBpZmluZGV4YCB2YWx1ZXMgZm9yIHRoZSB0ZXN0IHRvIGVuc3VyZSB0aGF0IHRoZSBjb3JyZWN0IGxvZ2ljIGlzIG5vdyB0ZXN0ZWQsIGFuZCBpdCYjMzk7cyBpc29sYXRlZCB0byB0aGUgdGVzdGluZyBoYXJuZXNzLgoKR2l2ZW4gdGhlc2UgY29uc2lkZXJhdGlvbnMsIEkgZG9uJiMzOTt0IHNlZSBhbnkgbmVlZCBmb3IgS01TQU4gdG8gYmUgaW52b2x2ZWQgaGVyZS4gVGhlIGJ1ZyBpcyBwdXJlbHkgYSBsb2dpYyBlcnJvciwgYW5kIHRoZSBmaXggZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIHZ1bG5lcmFiaWxpdGllcy4gS0FTQU4gaXMgYWxzbyBsaWtlbHkgdW5uZWNlc3NhcnkgZ2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgYnVnLiBTdGFuZGFyZCB0ZXN0aW5nIG1ldGhvZHMgc2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8gdmFsaWRhdGUgdGhlIGZpeC4gVGhlIGBjb3B5X3N0cnVjdF9mcm9tX3NvY2twdHJgIGZ1bmN0aW9uIG1ha2VzIGl0IGhpZ2hseSB1bmxpa2VseSB0aGF0IHVzZXJzcGFjZSBpcyBwcm92aWRpbmcgZ2FyYmFnZSBkYXRhLgoKRXNzZW50aWFsbHksIHRoaXMgaXMgYSBjbGVhbiwgdGFyZ2V0ZWQgbG9naWMgZml4IHRoYXQgbWFrZXMgdGhlIGBUQ1BfQU9fREVMX0tFWWAgZnVuY3Rpb25hbGl0eSBiZWhhdmUgYXMgaW50ZW5kZWQgd2hlbiBkZWFsaW5nIHdpdGggaW50ZXJmYWNlLXNwZWNpZmljIGtleXMuIEkmIzM5O20gc2F0aXNmaWVkIHRoYXQgdGhpcyBjaGFuZ2UgaXMgc2FmZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTU6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29weV9zdHJ1Y3RfZnJvbV9zb2NrcHRyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zb2NrcHRyLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zb2NrcHRyLmg9Nzc9c3RhdGljIGlubGluZSBpbnQgY29weV9zYWZlX2Zyb21fc29ja3B0cih2b2lkICpkc3QsIHNpemVfdCBrc2l6ZSxcbi0tXG5pbmNsdWRlL2xpbnV4L3NvY2twdHIuaC04Ni1cbmluY2x1ZGUvbGludXgvc29ja3B0ci5oOjg3OnN0YXRpYyBpbmxpbmUgaW50IGNvcHlfc3RydWN0X2Zyb21fc29ja3B0cih2b2lkICpkc3QsIHNpemVfdCBrc2l6ZSxcbmluY2x1ZGUvbGludXgvc29ja3B0ci5oLTg4LVx0XHRzb2NrcHRyX3Qgc3JjLCBzaXplX3QgdXNpemUpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDE1OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMzE2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIGBjb3B5X3N0cnVjdF9mcm9tX3NvY2twdHJgOgoKKipEaXNzZWN0aW5nIGBjb3B5X3N0cnVjdF9mcm9tX3NvY2twdHJgKioKCkFscmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBJJiMzOTttIGRvaW5nIGlzIGdldHRpbmcgbXlzZWxmIGZhbWlsaWFyIHdpdGggYGNvcHlfc3RydWN0X2Zyb21fc29ja3B0cmAuIFRoYXQgbmFtZSBhbG9uZSBnaXZlcyBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgY2FuIGltbWVkaWF0ZWx5IGluZmVyIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBpbnZvbHZlZCBpbiwgdW5zdXJwcmlzaW5nbHksIGNvcHlpbmcgYSBzdHJ1Y3R1cmUgZnJvbSBhIHNvY2tldCBwb2ludGVyLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbnRleHQuIFdoYXQga2luZCBvZiBzb2NrZXQ/IFdoYXQmIzM5O3MgdGhlIHNvdXJjZSBzdHJ1Y3R1cmU/IFdoYXQmIzM5O3MgdGhlIGRlc3RpbmF0aW9uPyBBcmUgdGhlcmUgYW55IGRhdGEgY29udmVyc2lvbnMgaGFwcGVuaW5nPyBBbnkgbWVtb3J5IGFsbG9jYXRpb24gY29uc2lkZXJhdGlvbnM/IEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBpc3N1ZXMgcmVsYXRlZCB0byBzb2NrZXQgY29tbXVuaWNhdGlvbiwgYW5kIG1lbW9yeSBzYWZldHkuIE9mZiB0aGUgdG9wIG9mIG15IGhlYWQsIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQ6IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIGJvdW5kYXJ5IGNvbmRpdGlvbnMsIGFuZCBlcnJvciBoYW5kbGluZy4gSSYjMzk7bGwgc3RhcnQgYnkgbG9va2luZyBhdCBob3cgdGhlIGZ1bmN0aW9uIGhhbmRsZXMgZGlmZmVyZW50IHNvY2tldCB0eXBlcywgZGF0YSBzaXplcywgYW5kIHBvdGVudGlhbCBlcnJvcnMgZHVyaW5nIHRoZSBkYXRhIHRyYW5zZmVyLiBJJiMzOTtsbCBiZSBzY3J1dGluaXppbmcgdGhlIHJldHVybiB2YWx1ZSBhcyB3ZWxsLiBXaGF0IGRvZXMgaXQgc2lnbmlmeSBpbiB0ZXJtcyBvZiBzdWNjZXNzIG9yIGZhaWx1cmU/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDE1OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zb2NrcHRyLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDgwOlx0XHRpZiAob3B0bGVuIFx1MDAzYyBrc2l6ZSlcbiAgODE6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gIDgyOlx0XHRpZiAoY29weV9mcm9tX3NvY2twdHIoZHN0LCBvcHR2YWwsIGtzaXplKSlcbiAgODM6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gIDg0Olx0XHRyZXR1cm4gMDtcbiAgODU6XHR9XG4gIDg2Olx0XG4gIDg3Olx0c3RhdGljIGlubGluZSBpbnQgY29weV9zdHJ1Y3RfZnJvbV9zb2NrcHRyKHZvaWQgKmRzdCwgc2l6ZV90IGtzaXplLFxuICA4ODpcdFx0XHRzb2NrcHRyX3Qgc3JjLCBzaXplX3QgdXNpemUpXG4gIDg5Olx0e1xuICA5MDpcdFx0aWYgKCFzb2NrcHRyX2lzX2tlcm5lbChzcmMpKVxuICA5MTpcdFx0XHRyZXR1cm4gY29weV9zdHJ1Y3RfZnJvbV91c2VyKGRzdCwga3NpemUsIHNyYy51c2VyLCB1c2l6ZSk7XG4gIDkyOlx0XG4gIDkzOlx0XHRyZXR1cm4gY29weV9zdHJ1Y3RfZnJvbV9ib3VuY2VfYnVmZmVyKGRzdCwga3NpemUsIHNyYy5rZXJuZWwsIHVzaXplKTtcbiAgOTQ6XHR9XG4gIDk1Olx0XG4gIDk2Olx0c3RhdGljIGlubGluZSBpbnQgY29weV90b19zb2NrcHRyX29mZnNldChzb2NrcHRyX3QgZHN0LCBzaXplX3Qgb2Zmc2V0LFxuICA5NzpcdFx0XHRjb25zdCB2b2lkICpzcmMsIHNpemVfdCBzaXplKVxuICA5ODpcdHtcbiAgOTk6XHRcdGlmICghc29ja3B0cl9pc19rZXJuZWwoZHN0KSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTU6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI5MDAKCQkJCQkJCW91dHB1dDogMTY4CgkJCQkJCQl0aG91Z2h0czogMTM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGNhcmVmdWxseSByZXZpZXdlZCB0aGlzIHBhdGNoLiBUaGUga2V5IHRoaW5nIEkmIzM5O20gc2VlaW5nIGlzIHRoYXQgYm90aCBgY29weV9zdHJ1Y3RfZnJvbV91c2VyYCBhbmQgYGNvcHlfc3RydWN0X2Zyb21fYm91bmNlX2J1ZmZlcmAgZW5zdXJlIHRoYXQgdGhlIHRhcmdldCBidWZmZXIgaXMgKmFsd2F5cyogaW5pdGlhbGl6ZWQuIFRoaXMgbWVhbnMsIGltcG9ydGFudGx5LCB0aGF0IHRoZSBgY21kYCBzdHJ1Y3R1cmUgaXMgZ3VhcmFudGVlZCB0byBiZSBmdWxseSBpbml0aWFsaXplZCwgZXZlbiBpZiB0aGUgdXNlci1zdXBwbGllZCBkYXRhIGlzIHNtYWxsZXIgdGhhbiB0aGUgdGFyZ2V0IGJ1ZmZlciBzaXplLCBhcyB0aGUgc3RydWN0dXJlIHdpbGwgYmUgemVyby1wYWRkZWQuIFRoZXJlZm9yZSwgSSBjYW4gY29uZmlkZW50bHkgc2F5IHRoaXMgcGF0Y2ggaXNuJiMzOTt0IGludHJvZHVjaW5nIGFueSBuZXcgaW5zdGFuY2VzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCB3aGljaCBpcyBhIGNyaXRpY2FsIGNvbmNlcm4gdG8gZmxhZy4KCkVzc2VudGlhbGx5LCB0aGlzIGlzIGEgY2xlYW4gbG9naWMgYnVnIGZpeC4gVGhlIGNvcmUgb2YgdGhlIHByb2JsZW0gaXMgdGhhdCBgbDNpbmRleGAgd2FzbiYjMzk7dCBiZWluZyBjb3JyZWN0bHkgcG9wdWxhdGVkIHdpdGggdGhlIHZhbHVlIGZyb20gYGNtZC5pZmluZGV4YCB3aGVuIHRoZSBgVENQX0FPX0tFWUZfSUZJTkRFWGAgZmxhZyB3YXMgYWN0aXZlIHdpdGhpbiBgY21kLmtleWZsYWdzYC4gVGhhdCYjMzk7cyB0aGUgY3J1eCBvZiBpdC4KCkdpdmVuIHRoaXMgYW5hbHlzaXMsIEkmIzM5O20gZ29pbmcgdG8gc2V0IGBOZWVkc0tNU0FOPWZhbHNlYCBvbiB0aGlzLiBJJiMzOTtsbCBpbmNsdWRlIGEgY2xlYXIgZXhwbGFuYXRpb24sIGxpa2VseSBhbG9uZyB0aGUgbGluZXMgb2YgJiMzNDtUaGlzIHBhdGNoIGFkZHJlc3NlcyBhIGxvZ2ljIGVycm9yIHdoZXJlIGBsM2luZGV4YCB3YXMgbm90IGNvcnJlY3RseSBzZXQgYmFzZWQgb24gYGNtZC5pZmluZGV4YCB3aGVuIGEgc3BlY2lmaWMga2V5IGZsYWcgd2FzIGVuYWJsZWQuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGluc3RhbmNlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBhcyB0aGUgZGVzdGluYXRpb24gYnVmZmVyIGlzIGd1YXJhbnRlZWQgdG8gYmUgaW5pdGlhbGl6ZWQuJiMzNDsgVGhhdCBzaG91bGQgYmUgc3VmZmljaWVudCBmb3IgdGhlIHJldmlld2VyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxNTo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyBpbiBgdGNwX2FvX2RlbF9jbWRgIHdoZXJlIHRoZSBgbDNpbmRleGAgdmFyaWFibGUgd2FzIG5vdCBiZWluZyBwb3B1bGF0ZWQgZnJvbSB0aGUgdXNlci1wcm92aWRlZCBgY21kLmlmaW5kZXhgIHdoZW4gdGhlIGBUQ1BfQU9fS0VZRl9JRklOREVYYCBmbGFnIHdhcyBzZXQuIFRoZSBgY21kYCBzdHJ1Y3R1cmUgaXMgc2FmZWx5IGNvcGllZCBmcm9tIHVzZXJzcGFjZSB1c2luZyBgY29weV9zdHJ1Y3RfZnJvbV9zb2NrcHRyYCwgd2hpY2ggZ3VhcmFudGVlcyB0aGF0IHRoZSBzdHJ1Y3R1cmUgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgKHplcm8tcGFkZGVkIGlmIHRoZSB1c2Vyc3BhY2Ugc3RydWN0dXJlIGlzIHNtYWxsZXIpLiBUaGUgcGF0Y2ggb25seSBhZGRzIGEgY29uZGl0aW9uYWwgYXNzaWdubWVudCBvZiBhbiBpbnRlZ2VyIHZhcmlhYmxlIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIGluIGB0Y3BfYW9fZGVsX2NtZGAgd2hlcmUgdGhlIGBsM2luZGV4YCB2YXJpYWJsZSB3YXMgbm90IGJlaW5nIHBvcHVsYXRlZCBmcm9tIHRoZSB1c2VyLXByb3ZpZGVkIGBjbWQuaWZpbmRleGAgd2hlbiB0aGUgYFRDUF9BT19LRVlGX0lGSU5ERVhgIGZsYWcgd2FzIHNldC4gVGhlIGBjbWRgIHN0cnVjdHVyZSBpcyBzYWZlbHkgY29waWVkIGZyb20gdXNlcnNwYWNlIHVzaW5nIGBjb3B5X3N0cnVjdF9mcm9tX3NvY2twdHJgLCB3aGljaCBndWFyYW50ZWVzIHRoYXQgdGhlIHN0cnVjdHVyZSBpcyBmdWxseSBpbml0aWFsaXplZCAoemVyby1wYWRkZWQgaWYgdGhlIHVzZXJzcGFjZSBzdHJ1Y3R1cmUgaXMgc21hbGxlcikuIFRoZSBwYXRjaCBvbmx5IGFkZHMgYSBjb25kaXRpb25hbCBhc3NpZ25tZW50IG9mIGFuIGludGVnZXIgdmFyaWFibGUgYW5kIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNTo1Njo0MS4yMzUzMTc4NzFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDg0MTg4ODk5NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVENQX0FPXCIsXG4gICAgXCJORVRfVlJGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNwX3BhcnNlX2FvXCIsXG4gICAgXCJ0Y3BfdjRfcGFyc2VfYW9cIixcbiAgICBcInRjcF92Nl9wYXJzZV9hb1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgaW4gYHRjcF9hb19kZWxfY21kYCB3aGVyZSB0aGUgYGwzaW5kZXhgIHZhcmlhYmxlIHdhcyBub3QgYmVpbmcgcG9wdWxhdGVkIGZyb20gdGhlIHVzZXItcHJvdmlkZWQgYGNtZC5pZmluZGV4YCB3aGVuIHRoZSBgVENQX0FPX0tFWUZfSUZJTkRFWGAgZmxhZyB3YXMgc2V0LiBUaGUgYGNtZGAgc3RydWN0dXJlIGlzIHNhZmVseSBjb3BpZWQgZnJvbSB1c2Vyc3BhY2UgdXNpbmcgYGNvcHlfc3RydWN0X2Zyb21fc29ja3B0cmAsIHdoaWNoIGd1YXJhbnRlZXMgdGhhdCB0aGUgc3RydWN0dXJlIGlzIGZ1bGx5IGluaXRpYWxpemVkICh6ZXJvLXBhZGRlZCBpZiB0aGUgdXNlcnNwYWNlIHN0cnVjdHVyZSBpcyBzbWFsbGVyKS4gVGhlIHBhdGNoIG9ubHkgYWRkcyBhIGNvbmRpdGlvbmFsIGFzc2lnbm1lbnQgb2YgYW4gaW50ZWdlciB2YXJpYWJsZSBhbmQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2Vyc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gVENQLUFPIHNldHNvY2tvcHQgaGFuZGxpbmcgd2hlcmUgYGNtZC5pZmluZGV4YCB3YXMgbm90IGFzc2lnbmVkIHRvIGBsM2luZGV4YCB3aGVuIGRlbGV0aW5nIGEga2V5LCBwcmV2ZW50aW5nIGRlbGV0aW9uIG9mIGludGVyZmFjZS1zY29wZWQga2V5cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTU6NTY6NDEuMjM1MzIzNTUxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Nzk3NTM0NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxMTE3YzlmZGY4YmMwNzI0YzIwMTdiMmQ1ODk3MmNjZjk3OWMzMzNhXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgQXVnIDIxIDE1OjU2OjQwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9hby5jIGIvbmV0L2lwdjQvdGNwX2FvLmNcXG5pbmRleCA1MDk0MjY3NDQ3YWVlLi4yNjg2NDYyMWU2ZGVmIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY0L3RjcF9hby5jXFxuKysrIGIvbmV0L2lwdjQvdGNwX2FvLmNcXG5AQCAtMTgzNCw2ICsxODM0LDkgQEAgc3RhdGljIGludCB0Y3BfYW9fZGVsX2NtZChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIHNob3J0IGludCBmYW1pbHksXFxuIFxcdGlmIChjbWQuaWZpbmRleCBcXHUwMDI2XFx1MDAyNiAhKGNtZC5rZXlmbGFncyBcXHUwMDI2IFRDUF9BT19LRVlGX0lGSU5ERVgpKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuK1xcdGlmIChjbWQua2V5ZmxhZ3MgXFx1MDAyNiBUQ1BfQU9fS0VZRl9JRklOREVYKVxcbitcXHRcXHRsM2luZGV4ID0gY21kLmlmaW5kZXg7XFxuK1xcbiBcXHRhb19pbmZvID0gc2V0c29ja29wdF9hb19pbmZvKHNrKTtcXG4gXFx0aWYgKElTX0VSUihhb19pbmZvKSlcXG4gXFx0XFx0cmV0dXJuIFBUUl9FUlIoYW9faW5mbyk7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8va2V5LW1hbmFnZW1lbnQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8va2V5LW1hbmFnZW1lbnQuY1xcbmluZGV4IGQ4NmJiMzgwYjc5ZjcuLjFlMDFlODA1ZGJhNzIgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9rZXktbWFuYWdlbWVudC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9rZXktbWFuYWdlbWVudC5jXFxuQEAgLTYzLDcgKzYzLDggQEAgc3RhdGljIGludCBwcmVwYXJlX2xzayh1bmlvbiB0Y3BfYWRkciAqYWRkciwgdWludDhfdCBzbmRpZCwgdWludDhfdCByY3ZpZClcXG4gXFx0cmV0dXJuIHNrO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IHRlc3RfZGVsX2tleShpbnQgc2ssIHVpbnQ4X3Qgc25kaWQsIHVpbnQ4X3QgcmN2aWQsIGJvb2wgYXN5bmMsXFxuK3N0YXRpYyBpbnQgdGVzdF9kZWxfa2V5KGludCBzaywgdWludDhfdCBzbmRpZCwgdWludDhfdCByY3ZpZCwgaW50IGlmaW5kZXgsXFxuK1xcdFxcdFxcdGJvb2wgYXN5bmMsXFxuIFxcdFxcdFxcdGludCBjdXJyZW50X2tleSwgaW50IHJuZXh0X2tleSlcXG4ge1xcbiBcXHRzdHJ1Y3QgdGNwX2FvX2luZm9fb3B0IGFvX2luZm8gPSB7fTtcXG5AQCAtNzYsNiArNzcsMTAgQEAgc3RhdGljIGludCB0ZXN0X2RlbF9rZXkoaW50IHNrLCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkLCBib29sIGFzeW5jLFxcbiBcXHRkZWwucHJlZml4ID0gREVGQVVMVF9URVNUX1BSRUZJWDtcXG4gXFx0ZGVsLnNuZGlkID0gc25kaWQ7XFxuIFxcdGRlbC5yY3ZpZCA9IHJjdmlkO1xcbitcXHRpZiAoaWZpbmRleCkge1xcbitcXHRcXHRkZWwua2V5ZmxhZ3MgPSBUQ1BfQU9fS0VZRl9JRklOREVYO1xcbitcXHRcXHRkZWwuaWZpbmRleCA9IGlmaW5kZXg7XFxuK1xcdH1cXG4gXFxuIFxcdGlmIChjdXJyZW50X2tleSBcXHUwMDNlPSAwKSB7XFxuIFxcdFxcdGRlbC5zZXRfY3VycmVudCA9IDE7XFxuQEAgLTk1LDcgKzEwMCw4IEBAIHN0YXRpYyBpbnQgdGVzdF9kZWxfa2V5KGludCBzaywgdWludDhfdCBzbmRpZCwgdWludDhfdCByY3ZpZCwgYm9vbCBhc3luYyxcXG4gXFxuIFxcdHRjcF9hZGRyX3RvX3NvY2thZGRyX2luKFxcdTAwMjZzb2NrYWRkciwgXFx1MDAyNnRoaXNfaXBfZGVzdCwgMCk7XFxuIFxcdGVyciA9IHRlc3RfZ2V0X29uZV9hbyhzaywgXFx1MDAyNmtleSwgXFx1MDAyNnNvY2thZGRyLCBzaXplb2Yoc29ja2FkZHIpLFxcbi1cXHRcXHRcXHQgICAgICBERUZBVUxUX1RFU1RfUFJFRklYLCBzbmRpZCwgcmN2aWQpO1xcbitcXHRcXHRcXHQgICAgICBERUZBVUxUX1RFU1RfUFJFRklYLCBzbmRpZCwgcmN2aWQsXFxuK1xcdFxcdFxcdCAgICAgIGRlbC5rZXlmbGFncywgZGVsLmlmaW5kZXgpO1xcbiBcXHRpZiAoIWVycilcXG4gXFx0XFx0cmV0dXJuIC1FRVhJU1Q7XFxuIFxcdGlmIChlcnIgIT0gLUUyQklHKVxcbkBAIC0xMTIsMTIgKzExOCwxMiBAQCBzdGF0aWMgaW50IHRlc3RfZGVsX2tleShpbnQgc2ssIHVpbnQ4X3Qgc25kaWQsIHVpbnQ4X3QgcmN2aWQsIGJvb2wgYXN5bmMsXFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHRyeV9kZWxldGVfa2V5KGNoYXIgKnRzdF9uYW1lLCBpbnQgc2ssIHVpbnQ4X3Qgc25kaWQsIHVpbnQ4X3QgcmN2aWQsXFxuLVxcdFxcdFxcdCAgIGJvb2wgYXN5bmMsIGludCBjdXJyZW50X2tleSwgaW50IHJuZXh0X2tleSxcXG4rXFx0XFx0XFx0ICAgaW50IGlmaW5kZXgsIGJvb2wgYXN5bmMsIGludCBjdXJyZW50X2tleSwgaW50IHJuZXh0X2tleSxcXG4gXFx0XFx0XFx0ICAgZmF1bHRfdCBpbmopXFxuIHtcXG4gXFx0aW50IGVycjtcXG4gXFxuLVxcdGVyciA9IHRlc3RfZGVsX2tleShzaywgc25kaWQsIHJjdmlkLCBhc3luYywgY3VycmVudF9rZXksIHJuZXh0X2tleSk7XFxuK1xcdGVyciA9IHRlc3RfZGVsX2tleShzaywgc25kaWQsIHJjdmlkLCBpZmluZGV4LCBhc3luYywgY3VycmVudF9rZXksIHJuZXh0X2tleSk7XFxuIFxcdGlmICgoZXJyID09IC1FQlVTWSBcXHUwMDI2XFx1MDAyNiBmYXVsdChCVVNZKSkgfHwgKGVyciA9PSAtRUlOVkFMIFxcdTAwMjZcXHUwMDI2IGZhdWx0KENVUlJORVhUKSkpIHtcXG4gXFx0XFx0dGVzdF9vayhcXFwiJXM6IGtleSBkZWxldGlvbiB3YXMgcHJldmVudGVkXFxcIiwgdHN0X25hbWUpO1xcbiBcXHRcXHRyZXR1cm47XFxuQEAgLTIzNiwxNSArMjQyLDE1IEBAIHN0YXRpYyB2b2lkIGNoZWNrX2Nsb3NlZF9zb2NrZXQodm9pZClcXG4gXFx0aW50IHNrO1xcbiBcXG4gXFx0c2sgPSBwcmVwYXJlX3NrKFxcdTAwMjZ0aGlzX2lwX2Rlc3QsIDIwMCwgMjAwKTtcXG4tXFx0dHJ5X2RlbGV0ZV9rZXkoXFxcImNsb3NlZCBzb2NrZXQsIGRlbGV0ZSBhIGtleVxcXCIsIHNrLCAyMDAsIDIwMCwgMCwgLTEsIC0xLCAwKTtcXG4tXFx0dHJ5X2RlbGV0ZV9rZXkoXFxcImNsb3NlZCBzb2NrZXQsIGRlbGV0ZSBhbGwga2V5c1xcXCIsIHNrLCAxMDAsIDEwMCwgMCwgLTEsIC0xLCAwKTtcXG4rXFx0dHJ5X2RlbGV0ZV9rZXkoXFxcImNsb3NlZCBzb2NrZXQsIGRlbGV0ZSBhIGtleVxcXCIsIHNrLCAyMDAsIDIwMCwgMCwgMCwgLTEsIC0xLCAwKTtcXG4rXFx0dHJ5X2RlbGV0ZV9rZXkoXFxcImNsb3NlZCBzb2NrZXQsIGRlbGV0ZSBhbGwga2V5c1xcXCIsIHNrLCAxMDAsIDEwMCwgMCwgMCwgLTEsIC0xLCAwKTtcXG4gXFx0Y2xvc2Uoc2spO1xcbiBcXG4gXFx0c2sgPSBwcmVwYXJlX3NrKFxcdTAwMjZ0aGlzX2lwX2Rlc3QsIDIwMCwgMjAwKTtcXG4gXFx0aWYgKHRlc3Rfc2V0X2tleShzaywgMTAwLCAyMDApKVxcbiBcXHRcXHR0ZXN0X2Vycm9yKFxcXCJmYWlsZWQgdG8gc2V0IGN1cnJlbnQvcm5leHQga2V5c1xcXCIpO1xcbi1cXHR0cnlfZGVsZXRlX2tleShcXFwiY2xvc2VkIHNvY2tldCwgZGVsZXRlIGN1cnJlbnQga2V5XFxcIiwgc2ssIDEwMCwgMTAwLCAwLCAtMSwgLTEsIEZBVUxUX0JVU1kpO1xcbi1cXHR0cnlfZGVsZXRlX2tleShcXFwiY2xvc2VkIHNvY2tldCwgZGVsZXRlIHJuZXh0IGtleVxcXCIsIHNrLCAyMDAsIDIwMCwgMCwgLTEsIC0xLCBGQVVMVF9CVVNZKTtcXG4rXFx0dHJ5X2RlbGV0ZV9rZXkoXFxcImNsb3NlZCBzb2NrZXQsIGRlbGV0ZSBjdXJyZW50IGtleVxcXCIsIHNrLCAxMDAsIDEwMCwgMCwgMCwgLTEsIC0xLCBGQVVMVF9CVVNZKTtcXG4rXFx0dHJ5X2RlbGV0ZV9rZXkoXFxcImNsb3NlZCBzb2NrZXQsIGRlbGV0ZSBybmV4dCBrZXlcXFwiLCBzaywgMjAwLCAyMDAsIDAsIDAsIC0xLCAtMSwgRkFVTFRfQlVTWSk7XFxuIFxcdGNsb3NlKHNrKTtcXG4gXFxuIFxcdHNrID0gcHJlcGFyZV9zayhcXHUwMDI2dGhpc19pcF9kZXN0LCAyMDAsIDIwMCk7XFxuQEAgLTI1NCwxMCArMjYwLDEyIEBAIHN0YXRpYyB2b2lkIGNoZWNrX2Nsb3NlZF9zb2NrZXQodm9pZClcXG4gXFx0aWYgKHRlc3RfYWRkX2tleShzaywgXFxcIkdsb3J5IHRvIFVrcmFpbmUhXFxcIiwgdGhpc19pcF9kZXN0LFxcbiBcXHRcXHRcXHQgREVGQVVMVF9URVNUX1BSRUZJWCwgMTIsIDEzKSlcXG4gXFx0XFx0dGVzdF9lcnJvcihcXFwidGVzdF9hZGRfa2V5KClcXFwiKTtcXG4tXFx0dHJ5X2RlbGV0ZV9rZXkoXFxcImNsb3NlZCBzb2NrZXQsIGRlbGV0ZSBhIGtleSArIHNldCBjdXJyZW50L3JuZXh0XFxcIiwgc2ssIDEwMCwgMTAwLCAwLCAxMCwgMTMsIDApO1xcbi1cXHR0cnlfZGVsZXRlX2tleShcXFwiY2xvc2VkIHNvY2tldCwgZm9yY2UtZGVsZXRlIGN1cnJlbnQga2V5XFxcIiwgc2ssIDEwLCAxMSwgMCwgMjAwLCAtMSwgMCk7XFxuLVxcdHRyeV9kZWxldGVfa2V5KFxcXCJjbG9zZWQgc29ja2V0LCBmb3JjZS1kZWxldGUgcm5leHQga2V5XFxcIiwgc2ssIDEyLCAxMywgMCwgLTEsIDIwMCwgMCk7XFxuLVxcdHRyeV9kZWxldGVfa2V5KFxcXCJjbG9zZWQgc29ja2V0LCBkZWxldGUgY3VycmVudCtybmV4dCBrZXlcXFwiLCBzaywgMjAwLCAyMDAsIDAsIC0xLCAtMSwgRkFVTFRfQlVTWSk7XFxuK1xcdHRyeV9kZWxldGVfa2V5KFxcXCJjbG9zZWQgc29ja2V0LCBkZWxldGUgYSBrZXkgKyBzZXQgY3VycmVudC9ybmV4dFxcXCIsIHNrLFxcbitcXHRcXHQgICAgICAgMTAwLCAxMDAsIDAsIDAsIDEwLCAxMywgMCk7XFxuK1xcdHRyeV9kZWxldGVfa2V5KFxcXCJjbG9zZWQgc29ja2V0LCBmb3JjZS1kZWxldGUgY3VycmVudCBrZXlcXFwiLCBzaywgMTAsIDExLCAwLCAwLCAyMDAsIC0xLCAwKTtcXG4rXFx0dHJ5X2RlbGV0ZV9rZXkoXFxcImNsb3NlZCBzb2NrZXQsIGZvcmNlLWRlbGV0ZSBybmV4dCBrZXlcXFwiLCBzaywgMTIsIDEzLCAwLCAwLCAtMSwgMjAwLCAwKTtcXG4rXFx0dHJ5X2RlbGV0ZV9rZXkoXFxcImNsb3NlZCBzb2NrZXQsIGRlbGV0ZSBjdXJyZW50K3JuZXh0IGtleVxcXCIsIHNrLFxcbitcXHRcXHQgICAgICAgMjAwLCAyMDAsIDAsIDAsIC0xLCAtMSwgRkFVTFRfQlVTWSk7XFxuIFxcdGNsb3NlKHNrKTtcXG4gXFxuIFxcdHNrID0gcHJlcGFyZV9zayhcXHUwMDI2dGhpc19pcF9kZXN0LCAyMDAsIDIwMCk7XFxuQEAgLTI3Miw2ICsyODAsMTggQEAgc3RhdGljIHZvaWQgY2hlY2tfY2xvc2VkX3NvY2tldCh2b2lkKVxcbiBcXHRcXHRcXHRcXHQgIHRoaXNfaXBfZGVzdCwgREVGQVVMVF9URVNUX1BSRUZJWCxcXG4gXFx0XFx0XFx0XFx0ICBmYWxzZSwgdHJ1ZSwgMjAsIDEwLCAwKTtcXG4gXFx0Y2xvc2Uoc2spO1xcbitcXG4rXFx0aWYgKCFzaG91bGRfc2tpcF90ZXN0KFxcXCJjbG9zZWQgc29ja2V0LCBhZGQgKyBkZWxldGUgVlJGLXNjb3BlZCBrZXlcXFwiLFxcbitcXHRcXHRcXHQgICAgICBLQ09ORklHX05FVF9WUkYpKSB7XFxuK1xcdFxcdHNrID0gcHJlcGFyZV9zayhcXHUwMDI2dGhpc19pcF9kZXN0LCAyMDAsIDIwMCk7XFxuK1xcdFxcdGlmICh0ZXN0X2FkZF9rZXlfdnJmKHNrLCBTRUNPTkRfUEFTU1dPUkQsIFRDUF9BT19LRVlGX0lGSU5ERVgsXFxuK1xcdFxcdFxcdFxcdCAgICAgdGhpc19pcF9kZXN0LCBERUZBVUxUX1RFU1RfUFJFRklYLFxcbitcXHRcXHRcXHRcXHQgICAgIHRlc3RfdnJmX2lmaW5kZXgsIDIwMSwgMjAxKSlcXG4rXFx0XFx0XFx0dGVzdF9lcnJvcihcXFwidGVzdF9hZGRfa2V5X3ZyZigpXFxcIik7XFxuK1xcdFxcdHRyeV9kZWxldGVfa2V5KFxcXCJjbG9zZWQgc29ja2V0LCBhZGQgKyBkZWxldGUgVlJGLXNjb3BlZCBrZXlcXFwiLCBzaywgMjAxLCAyMDEsXFxuK1xcdFxcdFxcdCAgICAgICB0ZXN0X3ZyZl9pZmluZGV4LCAwLCAtMSwgLTEsIDApO1xcbitcXHRcXHRjbG9zZShzayk7XFxuK1xcdH1cXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgYXNzZXJ0X25vX2N1cnJlbnRfcm5leHQoY29uc3QgY2hhciAqdHN0X21zZywgaW50IHNrKVxcbkBAIC0zMjIsOCArMzQyLDggQEAgc3RhdGljIHZvaWQgY2hlY2tfbGlzdGVuX3NvY2tldCh2b2lkKVxcbiBcXHRpbnQgc2ssIGVycjtcXG4gXFxuIFxcdHNrID0gcHJlcGFyZV9sc2soXFx1MDAyNnRoaXNfaXBfZGVzdCwgMjAwLCAyMDApO1xcbi1cXHR0cnlfZGVsZXRlX2tleShcXFwibGlzdGVuIHNvY2tldCwgZGVsZXRlIGEga2V5XFxcIiwgc2ssIDIwMCwgMjAwLCAwLCAtMSwgLTEsIDApO1xcbi1cXHR0cnlfZGVsZXRlX2tleShcXFwibGlzdGVuIHNvY2tldCwgZGVsZXRlIGFsbCBrZXlzXFxcIiwgc2ssIDEwMCwgMTAwLCAwLCAtMSwgLTEsIDApO1xcbitcXHR0cnlfZGVsZXRlX2tleShcXFwibGlzdGVuIHNvY2tldCwgZGVsZXRlIGEga2V5XFxcIiwgc2ssIDIwMCwgMjAwLCAwLCAwLCAtMSwgLTEsIDApO1xcbitcXHR0cnlfZGVsZXRlX2tleShcXFwibGlzdGVuIHNvY2tldCwgZGVsZXRlIGFsbCBrZXlzXFxcIiwgc2ssIDEwMCwgMTAwLCAwLCAwLCAtMSwgLTEsIDApO1xcbiBcXHRjbG9zZShzayk7XFxuIFxcbiBcXHRzayA9IHByZXBhcmVfbHNrKFxcdTAwMjZ0aGlzX2lwX2Rlc3QsIDIwMCwgMjAwKTtcXG5AQCAtMzQ1LDggKzM2NSwxMCBAQCBzdGF0aWMgdm9pZCBjaGVja19saXN0ZW5fc29ja2V0KHZvaWQpXFxuIFxcdGlmIChsaXN0ZW4oc2ssIDEwKSlcXG4gXFx0XFx0dGVzdF9lcnJvcihcXFwibGlzdGVuKClcXFwiKTtcXG4gXFx0YXNzZXJ0X25vX2N1cnJlbnRfcm5leHQoXFxcImxpc3RlbigpIGFmdGVyIGN1cnJlbnQvcm5leHQga2V5cyBzZXRcXFwiLCBzayk7XFxuLVxcdHRyeV9kZWxldGVfa2V5KFxcXCJsaXN0ZW4gc29ja2V0LCBkZWxldGUgY3VycmVudCBrZXkgZnJvbSBiZWZvcmUgbGlzdGVuKClcXFwiLCBzaywgMTAwLCAxMDAsIDAsIC0xLCAtMSwgRkFVTFRfRklYTUUpO1xcbi1cXHR0cnlfZGVsZXRlX2tleShcXFwibGlzdGVuIHNvY2tldCwgZGVsZXRlIHJuZXh0IGtleSBmcm9tIGJlZm9yZSBsaXN0ZW4oKVxcXCIsIHNrLCAyMDAsIDIwMCwgMCwgLTEsIC0xLCBGQVVMVF9GSVhNRSk7XFxuK1xcdHRyeV9kZWxldGVfa2V5KFxcXCJsaXN0ZW4gc29ja2V0LCBkZWxldGUgY3VycmVudCBrZXkgZnJvbSBiZWZvcmUgbGlzdGVuKClcXFwiLCBzayxcXG4rXFx0XFx0ICAgICAgIDEwMCwgMTAwLCAwLCAwLCAtMSwgLTEsIEZBVUxUX0ZJWE1FKTtcXG4rXFx0dHJ5X2RlbGV0ZV9rZXkoXFxcImxpc3RlbiBzb2NrZXQsIGRlbGV0ZSBybmV4dCBrZXkgZnJvbSBiZWZvcmUgbGlzdGVuKClcXFwiLCBzayxcXG4rXFx0XFx0ICAgICAgIDIwMCwgMjAwLCAwLCAwLCAtMSwgLTEsIEZBVUxUX0ZJWE1FKTtcXG4gXFx0Y2xvc2Uoc2spO1xcbiBcXG4gXFx0YXNzZXJ0X25vX3RjcF9yZXBhaXIoKTtcXG5AQCAtMzU5LDEzICszODEsMTMgQEAgc3RhdGljIHZvaWQgY2hlY2tfbGlzdGVuX3NvY2tldCh2b2lkKVxcbiBcXHRcXHRcXHQgREVGQVVMVF9URVNUX1BSRUZJWCwgMTIsIDEzKSlcXG4gXFx0XFx0dGVzdF9lcnJvcihcXFwidGVzdF9hZGRfa2V5KClcXFwiKTtcXG4gXFx0dHJ5X2RlbGV0ZV9rZXkoXFxcImxpc3RlbiBzb2NrZXQsIGRlbGV0ZSBhIGtleSArIHNldCBjdXJyZW50L3JuZXh0XFxcIiwgc2ssXFxuLVxcdFxcdCAgICAgICAxMDAsIDEwMCwgMCwgMTAsIDEzLCBGQVVMVF9DVVJSTkVYVCk7XFxuK1xcdFxcdCAgICAgICAxMDAsIDEwMCwgMCwgMCwgMTAsIDEzLCBGQVVMVF9DVVJSTkVYVCk7XFxuIFxcdHRyeV9kZWxldGVfa2V5KFxcXCJsaXN0ZW4gc29ja2V0LCBmb3JjZS1kZWxldGUgY3VycmVudCBrZXlcXFwiLCBzayxcXG4tXFx0XFx0ICAgICAgIDEwLCAxMSwgMCwgMjAwLCAtMSwgRkFVTFRfQ1VSUk5FWFQpO1xcbitcXHRcXHQgICAgICAgMTAsIDExLCAwLCAwLCAyMDAsIC0xLCBGQVVMVF9DVVJSTkVYVCk7XFxuIFxcdHRyeV9kZWxldGVfa2V5KFxcXCJsaXN0ZW4gc29ja2V0LCBmb3JjZS1kZWxldGUgcm5leHQga2V5XFxcIiwgc2ssXFxuLVxcdFxcdCAgICAgICAxMiwgMTMsIDAsIC0xLCAyMDAsIEZBVUxUX0NVUlJORVhUKTtcXG4rXFx0XFx0ICAgICAgIDEyLCAxMywgMCwgMCwgLTEsIDIwMCwgRkFVTFRfQ1VSUk5FWFQpO1xcbiBcXHR0cnlfZGVsZXRlX2tleShcXFwibGlzdGVuIHNvY2tldCwgZGVsZXRlIGEga2V5XFxcIiwgc2ssXFxuLVxcdFxcdCAgICAgICAyMDAsIDIwMCwgMCwgLTEsIC0xLCAwKTtcXG4rXFx0XFx0ICAgICAgIDIwMCwgMjAwLCAwLCAwLCAtMSwgLTEsIDApO1xcbiBcXHRjbG9zZShzayk7XFxuIFxcbiBcXHRzayA9IHByZXBhcmVfbHNrKFxcdTAwMjZ0aGlzX2lwX2Rlc3QsIDIwMCwgMjAwKTtcXG5AQCAtMTEzMSw3ICsxMTUzLDYgQEAgc3RhdGljIHZvaWQgY2hlY2tfZXN0YWJsaXNoZWRfc29ja2V0KHZvaWQpXFxuIHtcXG4gXFx0dW5zaWduZWQgaW50IHBvcnQgPSB0ZXN0X3NlcnZlcl9wb3J0O1xcbiBcXG4tXFx0c2V0dXBfdnJmcygpO1xcbiBcXHR0cnlfY2xpZW50X3J1bihcXFwiY2xpZW50OiBDaGVjayBjdXJyZW50L3JuZXh0IGtleXMgdW5zZXQgYmVmb3JlIGNvbm5lY3QoKVxcXCIsXFxuIFxcdFxcdCAgICAgICBwb3J0KyssIDIwLCAtMSwgLTEpO1xcbiBcXHR0cnlfY2xpZW50X3J1bihcXFwiY2xpZW50OiBDaGVjayBjdXJyZW50L3JuZXh0IGtleXMgc2V0IGJlZm9yZSBjb25uZWN0KClcXFwiLFxcbkBAIC0xMTUwLDYgKzExNzEsNyBAQCBzdGF0aWMgdm9pZCAqY2xpZW50X2ZuKHZvaWQgKmFyZylcXG4ge1xcbiBcXHRpZiAoaW5ldF9wdG9uKFRFU1RfRkFNSUxZLCBURVNUX1dST05HX0lQLCBcXHUwMDI2d3JvbmdfYWRkcikgIT0gMSlcXG4gXFx0XFx0dGVzdF9lcnJvcihcXFwiQ2FuJ3QgY29udmVydCBpcCBhZGRyZXNzICVzXFxcIiwgVEVTVF9XUk9OR19JUCk7XFxuK1xcdHNldHVwX3ZyZnMoKTtcXG4gXFx0Y2hlY2tfY2xvc2VkX3NvY2tldCgpO1xcbiBcXHRjaGVja19saXN0ZW5fc29ja2V0KCk7XFxuIFxcdGNoZWNrX2VzdGFibGlzaGVkX3NvY2tldCgpO1xcbkBAIC0xMTU4LDYgKzExODAsNiBAQCBzdGF0aWMgdm9pZCAqY2xpZW50X2ZuKHZvaWQgKmFyZylcXG4gXFxuIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXFxuIHtcXG4tXFx0dGVzdF9pbml0KDEyMSwgc2VydmVyX2ZuLCBjbGllbnRfZm4pO1xcbitcXHR0ZXN0X2luaXQoMTIyLCBzZXJ2ZXJfZm4sIGNsaWVudF9mbik7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vbGliL2FvbGliLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9hb2xpYi5oXFxuaW5kZXggZWJiMjg5OWMxMmZlMC4uNTNiZTE3NDQyMzdlZSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9hb2xpYi5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvYW9saWIuaFxcbkBAIC00MDQsNyArNDA0LDggQEAgc3RhdGljIGlubGluZSBpbnQgdGVzdF9wcmVwYXJlX2RlZl9rZXkoc3RydWN0IHRjcF9hb19hZGQgKmFvLFxcbiBcXG4gZXh0ZXJuIGludCB0ZXN0X2dldF9vbmVfYW8oaW50IHNrLCBzdHJ1Y3QgdGNwX2FvX2dldHNvY2tvcHQgKm91dCxcXG4gXFx0XFx0XFx0ICAgdm9pZCAqYWRkciwgc2l6ZV90IGFkZHJfc3osXFxuLVxcdFxcdFxcdCAgIHVpbnQ4X3QgcHJlZml4LCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkKTtcXG4rXFx0XFx0XFx0ICAgdWludDhfdCBwcmVmaXgsIHVpbnQ4X3Qgc25kaWQsIHVpbnQ4X3QgcmN2aWQsXFxuK1xcdFxcdFxcdCAgIHVpbnQ4X3Qga2V5ZmxhZ3MsIGludCBpZmluZGV4KTtcXG4gZXh0ZXJuIGludCB0ZXN0X2dldF9hb19pbmZvKGludCBzaywgc3RydWN0IHRjcF9hb19pbmZvX29wdCAqb3V0KTtcXG4gZXh0ZXJuIGludCB0ZXN0X3NldF9hb19pbmZvKGludCBzaywgc3RydWN0IHRjcF9hb19pbmZvX29wdCAqaW4pO1xcbiBleHRlcm4gaW50IHRlc3RfY21wX2dldHNvY2tvcHRfc2V0c29ja29wdChjb25zdCBzdHJ1Y3QgdGNwX2FvX2FkZCAqYSxcXG5AQCAtNDE4LDcgKzQxOSw4IEBAIHN0YXRpYyBpbmxpbmUgaW50IHRlc3RfdmVyaWZ5X3NvY2tldF9rZXkoaW50IHNrLCBzdHJ1Y3QgdGNwX2FvX2FkZCAqa2V5KVxcbiBcXHRpbnQgZXJyO1xcbiBcXG4gXFx0ZXJyID0gdGVzdF9nZXRfb25lX2FvKHNrLCBcXHUwMDI2a2V5MiwgXFx1MDAyNmtleS1cXHUwMDNlYWRkciwgc2l6ZW9mKGtleS1cXHUwMDNlYWRkciksXFxuLVxcdFxcdFxcdCAgICAgIGtleS1cXHUwMDNlcHJlZml4LCBrZXktXFx1MDAzZXNuZGlkLCBrZXktXFx1MDAzZXJjdmlkKTtcXG4rXFx0XFx0XFx0ICAgICAga2V5LVxcdTAwM2VwcmVmaXgsIGtleS1cXHUwMDNlc25kaWQsIGtleS1cXHUwMDNlcmN2aWQsXFxuK1xcdFxcdFxcdCAgICAgIGtleS1cXHUwMDNla2V5ZmxhZ3MsIGtleS1cXHUwMDNlaWZpbmRleCk7XFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9zb2NrLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9zb2NrLmNcXG5pbmRleCBlZjhlOTAzMWQ0N2EzLi4yZTdiMDZhMWExNTY3IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vbGliL3NvY2suY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vbGliL3NvY2suY1xcbkBAIC0yNTIsNyArMjUyLDcgQEAgc3RhdGljIGludCB0ZXN0X2dldF9hb19rZXlzX25yKGludCBzaylcXG4gXFxuIGludCB0ZXN0X2dldF9vbmVfYW8oaW50IHNrLCBzdHJ1Y3QgdGNwX2FvX2dldHNvY2tvcHQgKm91dCxcXG4gXFx0XFx0dm9pZCAqYWRkciwgc2l6ZV90IGFkZHJfc3osIHVpbnQ4X3QgcHJlZml4LFxcbi1cXHRcXHR1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkKVxcbitcXHRcXHR1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkLCB1aW50OF90IGtleWZsYWdzLCBpbnQgaWZpbmRleClcXG4ge1xcbiBcXHRzdHJ1Y3QgdGNwX2FvX2dldHNvY2tvcHQgdG1wID0ge307XFxuIFxcdHNvY2tsZW5fdCB0bXBfc3ogPSBzaXplb2YodG1wKTtcXG5AQCAtMjYyLDYgKzI2Miw4IEBAIGludCB0ZXN0X2dldF9vbmVfYW8oaW50IHNrLCBzdHJ1Y3QgdGNwX2FvX2dldHNvY2tvcHQgKm91dCxcXG4gXFx0dG1wLnByZWZpeCA9IHByZWZpeDtcXG4gXFx0dG1wLnNuZGlkICA9IHNuZGlkO1xcbiBcXHR0bXAucmN2aWQgID0gcmN2aWQ7XFxuK1xcdHRtcC5rZXlmbGFncyA9IGtleWZsYWdzO1xcbitcXHR0bXAuaWZpbmRleCA9IGlmaW5kZXg7XFxuIFxcdHRtcC5ua2V5cyAgPSAxO1xcbiBcXG4gXFx0cmV0ID0gZ2V0c29ja29wdChzaywgSVBQUk9UT19UQ1AsIFRDUF9BT19HRVRfS0VZUywgXFx1MDAyNnRtcCwgXFx1MDAyNnRtcF9zeik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE1OjU2OjQxLjgxNTg2NzE5M1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjY5ODc0NTExMzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRDUF9BT1wiLFxuICAgIFwiTkVUX1ZSRlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjcF9wYXJzZV9hb1wiLFxuICAgIFwidGNwX3Y0X3BhcnNlX2FvXCIsXG4gICAgXCJ0Y3BfdjZfcGFyc2VfYW9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBUQ1AtQU8gc2V0c29ja29wdCBoYW5kbGluZyB3aGVyZSBgY21kLmlmaW5kZXhgIHdhcyBub3QgYXNzaWduZWQgdG8gYGwzaW5kZXhgIHdoZW4gZGVsZXRpbmcgYSBrZXksIHByZXZlbnRpbmcgZGVsZXRpb24gb2YgaW50ZXJmYWNlLXNjb3BlZCBrZXlzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxMTE3YzlmZGY4YmMwNzI0YzIwMTdiMmQ1ODk3MmNjZjk3OWMzMzNhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMjEgMTU6NTY6NDAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfYW8uYyBiL25ldC9pcHY0L3RjcF9hby5jXG5pbmRleCA1MDk0MjY3NDQ3YWVlLi4yNjg2NDYyMWU2ZGVmIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvdGNwX2FvLmNcbisrKyBiL25ldC9pcHY0L3RjcF9hby5jXG5AQCAtMTgzNCw2ICsxODM0LDkgQEAgc3RhdGljIGludCB0Y3BfYW9fZGVsX2NtZChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIHNob3J0IGludCBmYW1pbHksXG4gXHRpZiAoY21kLmlmaW5kZXggXHUwMDI2XHUwMDI2ICEoY21kLmtleWZsYWdzIFx1MDAyNiBUQ1BfQU9fS0VZRl9JRklOREVYKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4rXHRpZiAoY21kLmtleWZsYWdzIFx1MDAyNiBUQ1BfQU9fS0VZRl9JRklOREVYKVxuK1x0XHRsM2luZGV4ID0gY21kLmlmaW5kZXg7XG4rXG4gXHRhb19pbmZvID0gc2V0c29ja29wdF9hb19pbmZvKHNrKTtcbiBcdGlmIChJU19FUlIoYW9faW5mbykpXG4gXHRcdHJldHVybiBQVFJfRVJSKGFvX2luZm8pO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8va2V5LW1hbmFnZW1lbnQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8va2V5LW1hbmFnZW1lbnQuY1xuaW5kZXggZDg2YmIzODBiNzlmNy4uMWUwMWU4MDVkYmE3MiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8va2V5LW1hbmFnZW1lbnQuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9rZXktbWFuYWdlbWVudC5jXG5AQCAtNjMsNyArNjMsOCBAQCBzdGF0aWMgaW50IHByZXBhcmVfbHNrKHVuaW9uIHRjcF9hZGRyICphZGRyLCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkKVxuIFx0cmV0dXJuIHNrO1xuIH1cbiBcbi1zdGF0aWMgaW50IHRlc3RfZGVsX2tleShpbnQgc2ssIHVpbnQ4X3Qgc25kaWQsIHVpbnQ4X3QgcmN2aWQsIGJvb2wgYXN5bmMsXG4rc3RhdGljIGludCB0ZXN0X2RlbF9rZXkoaW50IHNrLCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkLCBpbnQgaWZpbmRleCxcbitcdFx0XHRib29sIGFzeW5jLFxuIFx0XHRcdGludCBjdXJyZW50X2tleSwgaW50IHJuZXh0X2tleSlcbiB7XG4gXHRzdHJ1Y3QgdGNwX2FvX2luZm9fb3B0IGFvX2luZm8gPSB7fTtcbkBAIC03Niw2ICs3NywxMCBAQCBzdGF0aWMgaW50IHRlc3RfZGVsX2tleShpbnQgc2ssIHVpbnQ4X3Qgc25kaWQsIHVpbnQ4X3QgcmN2aWQsIGJvb2wgYXN5bmMsXG4gXHRkZWwucHJlZml4ID0gREVGQVVMVF9URVNUX1BSRUZJWDtcbiBcdGRlbC5zbmRpZCA9IHNuZGlkO1xuIFx0ZGVsLnJjdmlkID0gcmN2aWQ7XG4rXHRpZiAoaWZpbmRleCkge1xuK1x0XHRkZWwua2V5ZmxhZ3MgPSBUQ1BfQU9fS0VZRl9JRklOREVYO1xuK1x0XHRkZWwuaWZpbmRleCA9IGlmaW5kZXg7XG4rXHR9XG4gXG4gXHRpZiAoY3VycmVudF9rZXkgXHUwMDNlPSAwKSB7XG4gXHRcdGRlbC5zZXRfY3VycmVudCA9IDE7XG5AQCAtOTUsNyArMTAwLDggQEAgc3RhdGljIGludCB0ZXN0X2RlbF9rZXkoaW50IHNrLCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkLCBib29sIGFzeW5jLFxuIFxuIFx0dGNwX2FkZHJfdG9fc29ja2FkZHJfaW4oXHUwMDI2c29ja2FkZHIsIFx1MDAyNnRoaXNfaXBfZGVzdCwgMCk7XG4gXHRlcnIgPSB0ZXN0X2dldF9vbmVfYW8oc2ssIFx1MDAyNmtleSwgXHUwMDI2c29ja2FkZHIsIHNpemVvZihzb2NrYWRkciksXG4tXHRcdFx0ICAgICAgREVGQVVMVF9URVNUX1BSRUZJWCwgc25kaWQsIHJjdmlkKTtcbitcdFx0XHQgICAgICBERUZBVUxUX1RFU1RfUFJFRklYLCBzbmRpZCwgcmN2aWQsXG4rXHRcdFx0ICAgICAgZGVsLmtleWZsYWdzLCBkZWwuaWZpbmRleCk7XG4gXHRpZiAoIWVycilcbiBcdFx0cmV0dXJuIC1FRVhJU1Q7XG4gXHRpZiAoZXJyICE9IC1FMkJJRylcbkBAIC0xMTIsMTIgKzExOCwxMiBAQCBzdGF0aWMgaW50IHRlc3RfZGVsX2tleShpbnQgc2ssIHVpbnQ4X3Qgc25kaWQsIHVpbnQ4X3QgcmN2aWQsIGJvb2wgYXN5bmMsXG4gfVxuIFxuIHN0YXRpYyB2b2lkIHRyeV9kZWxldGVfa2V5KGNoYXIgKnRzdF9uYW1lLCBpbnQgc2ssIHVpbnQ4X3Qgc25kaWQsIHVpbnQ4X3QgcmN2aWQsXG4tXHRcdFx0ICAgYm9vbCBhc3luYywgaW50IGN1cnJlbnRfa2V5LCBpbnQgcm5leHRfa2V5LFxuK1x0XHRcdCAgIGludCBpZmluZGV4LCBib29sIGFzeW5jLCBpbnQgY3VycmVudF9rZXksIGludCBybmV4dF9rZXksXG4gXHRcdFx0ICAgZmF1bHRfdCBpbmopXG4ge1xuIFx0aW50IGVycjtcbiBcbi1cdGVyciA9IHRlc3RfZGVsX2tleShzaywgc25kaWQsIHJjdmlkLCBhc3luYywgY3VycmVudF9rZXksIHJuZXh0X2tleSk7XG4rXHRlcnIgPSB0ZXN0X2RlbF9rZXkoc2ssIHNuZGlkLCByY3ZpZCwgaWZpbmRleCwgYXN5bmMsIGN1cnJlbnRfa2V5LCBybmV4dF9rZXkpO1xuIFx0aWYgKChlcnIgPT0gLUVCVVNZIFx1MDAyNlx1MDAyNiBmYXVsdChCVVNZKSkgfHwgKGVyciA9PSAtRUlOVkFMIFx1MDAyNlx1MDAyNiBmYXVsdChDVVJSTkVYVCkpKSB7XG4gXHRcdHRlc3Rfb2soXCIlczoga2V5IGRlbGV0aW9uIHdhcyBwcmV2ZW50ZWRcIiwgdHN0X25hbWUpO1xuIFx0XHRyZXR1cm47XG5AQCAtMjM2LDE1ICsyNDIsMTUgQEAgc3RhdGljIHZvaWQgY2hlY2tfY2xvc2VkX3NvY2tldCh2b2lkKVxuIFx0aW50IHNrO1xuIFxuIFx0c2sgPSBwcmVwYXJlX3NrKFx1MDAyNnRoaXNfaXBfZGVzdCwgMjAwLCAyMDApO1xuLVx0dHJ5X2RlbGV0ZV9rZXkoXCJjbG9zZWQgc29ja2V0LCBkZWxldGUgYSBrZXlcIiwgc2ssIDIwMCwgMjAwLCAwLCAtMSwgLTEsIDApO1xuLVx0dHJ5X2RlbGV0ZV9rZXkoXCJjbG9zZWQgc29ja2V0LCBkZWxldGUgYWxsIGtleXNcIiwgc2ssIDEwMCwgMTAwLCAwLCAtMSwgLTEsIDApO1xuK1x0dHJ5X2RlbGV0ZV9rZXkoXCJjbG9zZWQgc29ja2V0LCBkZWxldGUgYSBrZXlcIiwgc2ssIDIwMCwgMjAwLCAwLCAwLCAtMSwgLTEsIDApO1xuK1x0dHJ5X2RlbGV0ZV9rZXkoXCJjbG9zZWQgc29ja2V0LCBkZWxldGUgYWxsIGtleXNcIiwgc2ssIDEwMCwgMTAwLCAwLCAwLCAtMSwgLTEsIDApO1xuIFx0Y2xvc2Uoc2spO1xuIFxuIFx0c2sgPSBwcmVwYXJlX3NrKFx1MDAyNnRoaXNfaXBfZGVzdCwgMjAwLCAyMDApO1xuIFx0aWYgKHRlc3Rfc2V0X2tleShzaywgMTAwLCAyMDApKVxuIFx0XHR0ZXN0X2Vycm9yKFwiZmFpbGVkIHRvIHNldCBjdXJyZW50L3JuZXh0IGtleXNcIik7XG4tXHR0cnlfZGVsZXRlX2tleShcImNsb3NlZCBzb2NrZXQsIGRlbGV0ZSBjdXJyZW50IGtleVwiLCBzaywgMTAwLCAxMDAsIDAsIC0xLCAtMSwgRkFVTFRfQlVTWSk7XG4tXHR0cnlfZGVsZXRlX2tleShcImNsb3NlZCBzb2NrZXQsIGRlbGV0ZSBybmV4dCBrZXlcIiwgc2ssIDIwMCwgMjAwLCAwLCAtMSwgLTEsIEZBVUxUX0JVU1kpO1xuK1x0dHJ5X2RlbGV0ZV9rZXkoXCJjbG9zZWQgc29ja2V0LCBkZWxldGUgY3VycmVudCBrZXlcIiwgc2ssIDEwMCwgMTAwLCAwLCAwLCAtMSwgLTEsIEZBVUxUX0JVU1kpO1xuK1x0dHJ5X2RlbGV0ZV9rZXkoXCJjbG9zZWQgc29ja2V0LCBkZWxldGUgcm5leHQga2V5XCIsIHNrLCAyMDAsIDIwMCwgMCwgMCwgLTEsIC0xLCBGQVVMVF9CVVNZKTtcbiBcdGNsb3NlKHNrKTtcbiBcbiBcdHNrID0gcHJlcGFyZV9zayhcdTAwMjZ0aGlzX2lwX2Rlc3QsIDIwMCwgMjAwKTtcbkBAIC0yNTQsMTAgKzI2MCwxMiBAQCBzdGF0aWMgdm9pZCBjaGVja19jbG9zZWRfc29ja2V0KHZvaWQpXG4gXHRpZiAodGVzdF9hZGRfa2V5KHNrLCBcIkdsb3J5IHRvIFVrcmFpbmUhXCIsIHRoaXNfaXBfZGVzdCxcbiBcdFx0XHQgREVGQVVMVF9URVNUX1BSRUZJWCwgMTIsIDEzKSlcbiBcdFx0dGVzdF9lcnJvcihcInRlc3RfYWRkX2tleSgpXCIpO1xuLVx0dHJ5X2RlbGV0ZV9rZXkoXCJjbG9zZWQgc29ja2V0LCBkZWxldGUgYSBrZXkgKyBzZXQgY3VycmVudC9ybmV4dFwiLCBzaywgMTAwLCAxMDAsIDAsIDEwLCAxMywgMCk7XG4tXHR0cnlfZGVsZXRlX2tleShcImNsb3NlZCBzb2NrZXQsIGZvcmNlLWRlbGV0ZSBjdXJyZW50IGtleVwiLCBzaywgMTAsIDExLCAwLCAyMDAsIC0xLCAwKTtcbi1cdHRyeV9kZWxldGVfa2V5KFwiY2xvc2VkIHNvY2tldCwgZm9yY2UtZGVsZXRlIHJuZXh0IGtleVwiLCBzaywgMTIsIDEzLCAwLCAtMSwgMjAwLCAwKTtcbi1cdHRyeV9kZWxldGVfa2V5KFwiY2xvc2VkIHNvY2tldCwgZGVsZXRlIGN1cnJlbnQrcm5leHQga2V5XCIsIHNrLCAyMDAsIDIwMCwgMCwgLTEsIC0xLCBGQVVMVF9CVVNZKTtcbitcdHRyeV9kZWxldGVfa2V5KFwiY2xvc2VkIHNvY2tldCwgZGVsZXRlIGEga2V5ICsgc2V0IGN1cnJlbnQvcm5leHRcIiwgc2ssXG4rXHRcdCAgICAgICAxMDAsIDEwMCwgMCwgMCwgMTAsIDEzLCAwKTtcbitcdHRyeV9kZWxldGVfa2V5KFwiY2xvc2VkIHNvY2tldCwgZm9yY2UtZGVsZXRlIGN1cnJlbnQga2V5XCIsIHNrLCAxMCwgMTEsIDAsIDAsIDIwMCwgLTEsIDApO1xuK1x0dHJ5X2RlbGV0ZV9rZXkoXCJjbG9zZWQgc29ja2V0LCBmb3JjZS1kZWxldGUgcm5leHQga2V5XCIsIHNrLCAxMiwgMTMsIDAsIDAsIC0xLCAyMDAsIDApO1xuK1x0dHJ5X2RlbGV0ZV9rZXkoXCJjbG9zZWQgc29ja2V0LCBkZWxldGUgY3VycmVudCtybmV4dCBrZXlcIiwgc2ssXG4rXHRcdCAgICAgICAyMDAsIDIwMCwgMCwgMCwgLTEsIC0xLCBGQVVMVF9CVVNZKTtcbiBcdGNsb3NlKHNrKTtcbiBcbiBcdHNrID0gcHJlcGFyZV9zayhcdTAwMjZ0aGlzX2lwX2Rlc3QsIDIwMCwgMjAwKTtcbkBAIC0yNzIsNiArMjgwLDE4IEBAIHN0YXRpYyB2b2lkIGNoZWNrX2Nsb3NlZF9zb2NrZXQodm9pZClcbiBcdFx0XHRcdCAgdGhpc19pcF9kZXN0LCBERUZBVUxUX1RFU1RfUFJFRklYLFxuIFx0XHRcdFx0ICBmYWxzZSwgdHJ1ZSwgMjAsIDEwLCAwKTtcbiBcdGNsb3NlKHNrKTtcbitcbitcdGlmICghc2hvdWxkX3NraXBfdGVzdChcImNsb3NlZCBzb2NrZXQsIGFkZCArIGRlbGV0ZSBWUkYtc2NvcGVkIGtleVwiLFxuK1x0XHRcdCAgICAgIEtDT05GSUdfTkVUX1ZSRikpIHtcbitcdFx0c2sgPSBwcmVwYXJlX3NrKFx1MDAyNnRoaXNfaXBfZGVzdCwgMjAwLCAyMDApO1xuK1x0XHRpZiAodGVzdF9hZGRfa2V5X3ZyZihzaywgU0VDT05EX1BBU1NXT1JELCBUQ1BfQU9fS0VZRl9JRklOREVYLFxuK1x0XHRcdFx0ICAgICB0aGlzX2lwX2Rlc3QsIERFRkFVTFRfVEVTVF9QUkVGSVgsXG4rXHRcdFx0XHQgICAgIHRlc3RfdnJmX2lmaW5kZXgsIDIwMSwgMjAxKSlcbitcdFx0XHR0ZXN0X2Vycm9yKFwidGVzdF9hZGRfa2V5X3ZyZigpXCIpO1xuK1x0XHR0cnlfZGVsZXRlX2tleShcImNsb3NlZCBzb2NrZXQsIGFkZCArIGRlbGV0ZSBWUkYtc2NvcGVkIGtleVwiLCBzaywgMjAxLCAyMDEsXG4rXHRcdFx0ICAgICAgIHRlc3RfdnJmX2lmaW5kZXgsIDAsIC0xLCAtMSwgMCk7XG4rXHRcdGNsb3NlKHNrKTtcbitcdH1cbiB9XG4gXG4gc3RhdGljIHZvaWQgYXNzZXJ0X25vX2N1cnJlbnRfcm5leHQoY29uc3QgY2hhciAqdHN0X21zZywgaW50IHNrKVxuQEAgLTMyMiw4ICszNDIsOCBAQCBzdGF0aWMgdm9pZCBjaGVja19saXN0ZW5fc29ja2V0KHZvaWQpXG4gXHRpbnQgc2ssIGVycjtcbiBcbiBcdHNrID0gcHJlcGFyZV9sc2soXHUwMDI2dGhpc19pcF9kZXN0LCAyMDAsIDIwMCk7XG4tXHR0cnlfZGVsZXRlX2tleShcImxpc3RlbiBzb2NrZXQsIGRlbGV0ZSBhIGtleVwiLCBzaywgMjAwLCAyMDAsIDAsIC0xLCAtMSwgMCk7XG4tXHR0cnlfZGVsZXRlX2tleShcImxpc3RlbiBzb2NrZXQsIGRlbGV0ZSBhbGwga2V5c1wiLCBzaywgMTAwLCAxMDAsIDAsIC0xLCAtMSwgMCk7XG4rXHR0cnlfZGVsZXRlX2tleShcImxpc3RlbiBzb2NrZXQsIGRlbGV0ZSBhIGtleVwiLCBzaywgMjAwLCAyMDAsIDAsIDAsIC0xLCAtMSwgMCk7XG4rXHR0cnlfZGVsZXRlX2tleShcImxpc3RlbiBzb2NrZXQsIGRlbGV0ZSBhbGwga2V5c1wiLCBzaywgMTAwLCAxMDAsIDAsIDAsIC0xLCAtMSwgMCk7XG4gXHRjbG9zZShzayk7XG4gXG4gXHRzayA9IHByZXBhcmVfbHNrKFx1MDAyNnRoaXNfaXBfZGVzdCwgMjAwLCAyMDApO1xuQEAgLTM0NSw4ICszNjUsMTAgQEAgc3RhdGljIHZvaWQgY2hlY2tfbGlzdGVuX3NvY2tldCh2b2lkKVxuIFx0aWYgKGxpc3RlbihzaywgMTApKVxuIFx0XHR0ZXN0X2Vycm9yKFwibGlzdGVuKClcIik7XG4gXHRhc3NlcnRfbm9fY3VycmVudF9ybmV4dChcImxpc3RlbigpIGFmdGVyIGN1cnJlbnQvcm5leHQga2V5cyBzZXRcIiwgc2spO1xuLVx0dHJ5X2RlbGV0ZV9rZXkoXCJsaXN0ZW4gc29ja2V0LCBkZWxldGUgY3VycmVudCBrZXkgZnJvbSBiZWZvcmUgbGlzdGVuKClcIiwgc2ssIDEwMCwgMTAwLCAwLCAtMSwgLTEsIEZBVUxUX0ZJWE1FKTtcbi1cdHRyeV9kZWxldGVfa2V5KFwibGlzdGVuIHNvY2tldCwgZGVsZXRlIHJuZXh0IGtleSBmcm9tIGJlZm9yZSBsaXN0ZW4oKVwiLCBzaywgMjAwLCAyMDAsIDAsIC0xLCAtMSwgRkFVTFRfRklYTUUpO1xuK1x0dHJ5X2RlbGV0ZV9rZXkoXCJsaXN0ZW4gc29ja2V0LCBkZWxldGUgY3VycmVudCBrZXkgZnJvbSBiZWZvcmUgbGlzdGVuKClcIiwgc2ssXG4rXHRcdCAgICAgICAxMDAsIDEwMCwgMCwgMCwgLTEsIC0xLCBGQVVMVF9GSVhNRSk7XG4rXHR0cnlfZGVsZXRlX2tleShcImxpc3RlbiBzb2NrZXQsIGRlbGV0ZSBybmV4dCBrZXkgZnJvbSBiZWZvcmUgbGlzdGVuKClcIiwgc2ssXG4rXHRcdCAgICAgICAyMDAsIDIwMCwgMCwgMCwgLTEsIC0xLCBGQVVMVF9GSVhNRSk7XG4gXHRjbG9zZShzayk7XG4gXG4gXHRhc3NlcnRfbm9fdGNwX3JlcGFpcigpO1xuQEAgLTM1OSwxMyArMzgxLDEzIEBAIHN0YXRpYyB2b2lkIGNoZWNrX2xpc3Rlbl9zb2NrZXQodm9pZClcbiBcdFx0XHQgREVGQVVMVF9URVNUX1BSRUZJWCwgMTIsIDEzKSlcbiBcdFx0dGVzdF9lcnJvcihcInRlc3RfYWRkX2tleSgpXCIpO1xuIFx0dHJ5X2RlbGV0ZV9rZXkoXCJsaXN0ZW4gc29ja2V0LCBkZWxldGUgYSBrZXkgKyBzZXQgY3VycmVudC9ybmV4dFwiLCBzayxcbi1cdFx0ICAgICAgIDEwMCwgMTAwLCAwLCAxMCwgMTMsIEZBVUxUX0NVUlJORVhUKTtcbitcdFx0ICAgICAgIDEwMCwgMTAwLCAwLCAwLCAxMCwgMTMsIEZBVUxUX0NVUlJORVhUKTtcbiBcdHRyeV9kZWxldGVfa2V5KFwibGlzdGVuIHNvY2tldCwgZm9yY2UtZGVsZXRlIGN1cnJlbnQga2V5XCIsIHNrLFxuLVx0XHQgICAgICAgMTAsIDExLCAwLCAyMDAsIC0xLCBGQVVMVF9DVVJSTkVYVCk7XG4rXHRcdCAgICAgICAxMCwgMTEsIDAsIDAsIDIwMCwgLTEsIEZBVUxUX0NVUlJORVhUKTtcbiBcdHRyeV9kZWxldGVfa2V5KFwibGlzdGVuIHNvY2tldCwgZm9yY2UtZGVsZXRlIHJuZXh0IGtleVwiLCBzayxcbi1cdFx0ICAgICAgIDEyLCAxMywgMCwgLTEsIDIwMCwgRkFVTFRfQ1VSUk5FWFQpO1xuK1x0XHQgICAgICAgMTIsIDEzLCAwLCAwLCAtMSwgMjAwLCBGQVVMVF9DVVJSTkVYVCk7XG4gXHR0cnlfZGVsZXRlX2tleShcImxpc3RlbiBzb2NrZXQsIGRlbGV0ZSBhIGtleVwiLCBzayxcbi1cdFx0ICAgICAgIDIwMCwgMjAwLCAwLCAtMSwgLTEsIDApO1xuK1x0XHQgICAgICAgMjAwLCAyMDAsIDAsIDAsIC0xLCAtMSwgMCk7XG4gXHRjbG9zZShzayk7XG4gXG4gXHRzayA9IHByZXBhcmVfbHNrKFx1MDAyNnRoaXNfaXBfZGVzdCwgMjAwLCAyMDApO1xuQEAgLTExMzEsNyArMTE1Myw2IEBAIHN0YXRpYyB2b2lkIGNoZWNrX2VzdGFibGlzaGVkX3NvY2tldCh2b2lkKVxuIHtcbiBcdHVuc2lnbmVkIGludCBwb3J0ID0gdGVzdF9zZXJ2ZXJfcG9ydDtcbiBcbi1cdHNldHVwX3ZyZnMoKTtcbiBcdHRyeV9jbGllbnRfcnVuKFwiY2xpZW50OiBDaGVjayBjdXJyZW50L3JuZXh0IGtleXMgdW5zZXQgYmVmb3JlIGNvbm5lY3QoKVwiLFxuIFx0XHQgICAgICAgcG9ydCsrLCAyMCwgLTEsIC0xKTtcbiBcdHRyeV9jbGllbnRfcnVuKFwiY2xpZW50OiBDaGVjayBjdXJyZW50L3JuZXh0IGtleXMgc2V0IGJlZm9yZSBjb25uZWN0KClcIixcbkBAIC0xMTUwLDYgKzExNzEsNyBAQCBzdGF0aWMgdm9pZCAqY2xpZW50X2ZuKHZvaWQgKmFyZylcbiB7XG4gXHRpZiAoaW5ldF9wdG9uKFRFU1RfRkFNSUxZLCBURVNUX1dST05HX0lQLCBcdTAwMjZ3cm9uZ19hZGRyKSAhPSAxKVxuIFx0XHR0ZXN0X2Vycm9yKFwiQ2FuJ3QgY29udmVydCBpcCBhZGRyZXNzICVzXCIsIFRFU1RfV1JPTkdfSVApO1xuK1x0c2V0dXBfdnJmcygpO1xuIFx0Y2hlY2tfY2xvc2VkX3NvY2tldCgpO1xuIFx0Y2hlY2tfbGlzdGVuX3NvY2tldCgpO1xuIFx0Y2hlY2tfZXN0YWJsaXNoZWRfc29ja2V0KCk7XG5AQCAtMTE1OCw2ICsxMTgwLDYgQEAgc3RhdGljIHZvaWQgKmNsaWVudF9mbih2b2lkICphcmcpXG4gXG4gaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbiB7XG4tXHR0ZXN0X2luaXQoMTIxLCBzZXJ2ZXJfZm4sIGNsaWVudF9mbik7XG4rXHR0ZXN0X2luaXQoMTIyLCBzZXJ2ZXJfZm4sIGNsaWVudF9mbik7XG4gXHRyZXR1cm4gMDtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvYW9saWIuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vbGliL2FvbGliLmhcbmluZGV4IGViYjI4OTljMTJmZTAuLjUzYmUxNzQ0MjM3ZWUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9hb2xpYi5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9hb2xpYi5oXG5AQCAtNDA0LDcgKzQwNCw4IEBAIHN0YXRpYyBpbmxpbmUgaW50IHRlc3RfcHJlcGFyZV9kZWZfa2V5KHN0cnVjdCB0Y3BfYW9fYWRkICphbyxcbiBcbiBleHRlcm4gaW50IHRlc3RfZ2V0X29uZV9hbyhpbnQgc2ssIHN0cnVjdCB0Y3BfYW9fZ2V0c29ja29wdCAqb3V0LFxuIFx0XHRcdCAgIHZvaWQgKmFkZHIsIHNpemVfdCBhZGRyX3N6LFxuLVx0XHRcdCAgIHVpbnQ4X3QgcHJlZml4LCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkKTtcbitcdFx0XHQgICB1aW50OF90IHByZWZpeCwgdWludDhfdCBzbmRpZCwgdWludDhfdCByY3ZpZCxcbitcdFx0XHQgICB1aW50OF90IGtleWZsYWdzLCBpbnQgaWZpbmRleCk7XG4gZXh0ZXJuIGludCB0ZXN0X2dldF9hb19pbmZvKGludCBzaywgc3RydWN0IHRjcF9hb19pbmZvX29wdCAqb3V0KTtcbiBleHRlcm4gaW50IHRlc3Rfc2V0X2FvX2luZm8oaW50IHNrLCBzdHJ1Y3QgdGNwX2FvX2luZm9fb3B0ICppbik7XG4gZXh0ZXJuIGludCB0ZXN0X2NtcF9nZXRzb2Nrb3B0X3NldHNvY2tvcHQoY29uc3Qgc3RydWN0IHRjcF9hb19hZGQgKmEsXG5AQCAtNDE4LDcgKzQxOSw4IEBAIHN0YXRpYyBpbmxpbmUgaW50IHRlc3RfdmVyaWZ5X3NvY2tldF9rZXkoaW50IHNrLCBzdHJ1Y3QgdGNwX2FvX2FkZCAqa2V5KVxuIFx0aW50IGVycjtcbiBcbiBcdGVyciA9IHRlc3RfZ2V0X29uZV9hbyhzaywgXHUwMDI2a2V5MiwgXHUwMDI2a2V5LVx1MDAzZWFkZHIsIHNpemVvZihrZXktXHUwMDNlYWRkciksXG4tXHRcdFx0ICAgICAga2V5LVx1MDAzZXByZWZpeCwga2V5LVx1MDAzZXNuZGlkLCBrZXktXHUwMDNlcmN2aWQpO1xuK1x0XHRcdCAgICAgIGtleS1cdTAwM2VwcmVmaXgsIGtleS1cdTAwM2VzbmRpZCwga2V5LVx1MDAzZXJjdmlkLFxuK1x0XHRcdCAgICAgIGtleS1cdTAwM2VrZXlmbGFncywga2V5LVx1MDAzZWlmaW5kZXgpO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9zb2NrLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9zb2NrLmNcbmluZGV4IGVmOGU5MDMxZDQ3YTMuLjJlN2IwNmExYTE1NjcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9zb2NrLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vbGliL3NvY2suY1xuQEAgLTI1Miw3ICsyNTIsNyBAQCBzdGF0aWMgaW50IHRlc3RfZ2V0X2FvX2tleXNfbnIoaW50IHNrKVxuIFxuIGludCB0ZXN0X2dldF9vbmVfYW8oaW50IHNrLCBzdHJ1Y3QgdGNwX2FvX2dldHNvY2tvcHQgKm91dCxcbiBcdFx0dm9pZCAqYWRkciwgc2l6ZV90IGFkZHJfc3osIHVpbnQ4X3QgcHJlZml4LFxuLVx0XHR1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkKVxuK1x0XHR1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkLCB1aW50OF90IGtleWZsYWdzLCBpbnQgaWZpbmRleClcbiB7XG4gXHRzdHJ1Y3QgdGNwX2FvX2dldHNvY2tvcHQgdG1wID0ge307XG4gXHRzb2NrbGVuX3QgdG1wX3N6ID0gc2l6ZW9mKHRtcCk7XG5AQCAtMjYyLDYgKzI2Miw4IEBAIGludCB0ZXN0X2dldF9vbmVfYW8oaW50IHNrLCBzdHJ1Y3QgdGNwX2FvX2dldHNvY2tvcHQgKm91dCxcbiBcdHRtcC5wcmVmaXggPSBwcmVmaXg7XG4gXHR0bXAuc25kaWQgID0gc25kaWQ7XG4gXHR0bXAucmN2aWQgID0gcmN2aWQ7XG4rXHR0bXAua2V5ZmxhZ3MgPSBrZXlmbGFncztcbitcdHRtcC5pZmluZGV4ID0gaWZpbmRleDtcbiBcdHRtcC5ua2V5cyAgPSAxO1xuIFxuIFx0cmV0ID0gZ2V0c29ja29wdChzaywgSVBQUk9UT19UQ1AsIFRDUF9BT19HRVRfS0VZUywgXHUwMDI2dG1wLCBcdTAwMjZ0bXBfc3opO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTU6NTY6NDEuODE1ODY4NTYzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjU0NzEwMTY4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRDUC1BTyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2guIEl0IHNlZW1zIHdlIGhhdmUgYSBtb2RpZmljYXRpb24gdG8gYG5ldC9pcHY0L3RjcF9hby5jYCwgYWxvbmcgd2l0aCBzb21lIGFjY29tcGFueWluZyBzZWxmdGVzdHMsIHdoaWNoIGlzIHN0YW5kYXJkIHByb2NlZHVyZS4gVGhpcyBhcmVhIGNvbmNlcm5zIHRoZSBUQ1AgQXV0aGVudGljYXRpb24gT3B0aW9uLCBvciBUQ1AtQU8sIHdoaWNoIGlzIGEga2V5IHBhcnQgb2Ygc2VjdXJpbmcgVENQIGNvbm5lY3Rpb25zLlxuXG5MZXQncyBkaXNzZWN0IHRoZSBjb3JlIGNoYW5nZSBpbiBgdGNwX2FvX2RlbF9jbWRgLiBJdCdzIHN0cmFpZ2h0Zm9yd2FyZDogYSBuZXcgY29uZGl0aW9uYWwgYXNzaWdubWVudCBpcyBpbnRyb2R1Y2VkLiBTcGVjaWZpY2FsbHksIHRoZSBjb2RlIG5vdyBpbmNsdWRlczpcblxuYGBgY1xuXHRpZiAoY21kLmtleWZsYWdzIFx1MDAyNiBUQ1BfQU9fS0VZRl9JRklOREVYKVxuXHRcdGwzaW5kZXggPSBjbWQuaWZpbmRleDtcbmBgYFxuXG5Fc3NlbnRpYWxseSwgaWYgdGhlIGBUQ1BfQU9fS0VZRl9JRklOREVYYCBmbGFnIGlzIHNldCB3aXRoaW4gYGNtZC5rZXlmbGFnc2AsIHRoZW4gdGhlIHZhcmlhYmxlIGBsM2luZGV4YCBnZXRzIGFzc2lnbmVkIHRoZSB2YWx1ZSBvZiBgY21kLmlmaW5kZXhgLiBUaGlzIHBvaW50cyB0b3dhcmRzIGFzc29jaWF0aW5nIGEgc3BlY2lmaWMgTGF5ZXIgMyBpbnRlcmZhY2UgaW5kZXggd2l0aCB0aGUgQU8gY29uZmlndXJhdGlvbiBkdXJpbmcgZGVsZXRpb24uIFRoZSB1c2Ugb2YgYml0d2lzZSBBTkQgb3BlcmF0aW9uIHN1Z2dlc3RzIHRoYXQgYGtleWZsYWdzYCBpcyBwcm9iYWJseSBhIGJpdG1hc2ssIGFsbG93aW5nIG11bHRpcGxlIGZsYWdzIHRvIGJlIHNldCBhdCBvbmNlLiBUaGlzIGFsaWducyB3aXRoIGhvdyB0aGVzZSB0eXBlcyBvZiBvcHRpb25zIGFyZSB1c3VhbGx5IGhhbmRsZWQgaW4gdGhlIGtlcm5lbC5cblxuSSBuZWVkIHRvIGNvbmZpcm0gcHJlY2lzZWx5IHdoYXQgYGwzaW5kZXhgIHJlcHJlc2VudHMgaW4gdGhpcyBjb250ZXh0LiBJcyBpdCB0aGUgaW50ZXJmYWNlIGluZGV4IGJlaW5nIHVzZWQgYnkgdGhlIEFPIGNvbmZpZ3VyYXRpb24gb3Igc29tZXRoaW5nIGVsc2UuIEknbGwgbmVlZCB0byBmb2xsb3cgdGhlIHVzZSBvZiBgbDNpbmRleGAgZnVydGhlciB3aXRoaW4gYHRjcF9hby5jYCAoYW5kIHBvdGVudGlhbGx5IG90aGVyIGZpbGVzKSB0byBmdWxseSBncmFzcCB0aGUgcmFtaWZpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gSXQncyBsaWtlbHkgcmVsYXRlZCB0byBob3cgdGhlIEFPIGlzIGFwcGxpZWQgdG8gYSBzcGVjaWZpYyBuZXR3b3JrIGludGVyZmFjZS4gVGhpcyBzZWVtcyBsaWtlIGEgcmVhc29uYWJsZSBhbmQgcG9zc2libHkgbmVjZXNzYXJ5IGFkZGl0aW9uIHRvIHN1cHBvcnQgZmluZS1ncmFpbmVkIGNvbnRyb2wgb3ZlciBUQ1AtQU8uIFRoZSBzZWxmdGVzdHMgc2hvdWxkIHByb3ZpZGUgY3J1Y2lhbCBpbnNpZ2h0cyBpbnRvIHRoZSBpbnRlbmRlZCBiZWhhdmlvciBhbmQgcG90ZW50aWFsIGVkZ2UgY2FzZXMuIEknbGwgbmVlZCB0byBnbyB0aHJvdWdoIHRoZW0gdGhvcm91Z2hseSB0byBlbnN1cmUgdGhpcyBpcyBzb3VuZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjM5NSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE1OjU2OjQ4LjM2Mjk3MjgwOFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODc3ODM1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y3BfYW9fZGVsX2NtZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC90Y3BfYW8uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC90Y3BfYW8uYz05OTA9dGNwX2luYm91bmRfYW9faGFzaChzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC90Y3BfYW8uYy0xMDU1LVxcdFxcdFxcdGlmIChrZXkpXFxubmV0L2lwdjQvdGNwX2FvLmM6MTA1NjpcXHRcXHRcXHRcXHQvKiBwYWlycyB3aXRoIHRjcF9hb19kZWxfY21kICovXFxubmV0L2lwdjQvdGNwX2FvLmMtMTA1Ny1cXHRcXHRcXHRcXHRXUklURV9PTkNFKGluZm8tXFx1MDAzZWN1cnJlbnRfa2V5LCBrZXkpO1xcbi0tXFxubmV0L2lwdjQvdGNwX2FvLmMtMTA2OC1cXHQgKiAtIHJlcXVlc3Qgc29ja2V0cyB3b3VsZCByYWNlIG9uIHRob3NlIGtleSBwb2ludGVyc1xcbm5ldC9pcHY0L3RjcF9hby5jOjEwNjk6XFx0ICogLSB0Y3BfYW9fZGVsX2NtZCgpIGFsbG93cyBhc3luYyBrZXkgcmVtb3ZhbFxcbm5ldC9pcHY0L3RjcF9hby5jLTEwNzAtXFx0ICovXFxuLS1cXG5uZXQvaXB2NC90Y3BfYW8uYz0xNzQ2PXN0YXRpYyBpbnQgdGNwX2FvX2RlbGV0ZV9rZXkoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGNwX2FvX2luZm8gKmFvX2luZm8sXFxuLS1cXG5uZXQvaXB2NC90Y3BfYW8uYy0xNzk5LSNkZWZpbmUgVENQX0FPX0RFTF9LRVlGX0FMTCAoVENQX0FPX0tFWUZfSUZJTkRFWClcXG5uZXQvaXB2NC90Y3BfYW8uYzoxODAwOnN0YXRpYyBpbnQgdGNwX2FvX2RlbF9jbWQoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBzaG9ydCBpbnQgZmFtaWx5LFxcbm5ldC9pcHY0L3RjcF9hby5jLTE4MDEtXFx0XFx0XFx0ICBzb2NrcHRyX3Qgb3B0dmFsLCBpbnQgb3B0bGVuKVxcbi0tXFxubmV0L2lwdjQvdGNwX2FvLmM9MjAzOD1pbnQgdGNwX3BhcnNlX2FvKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgdW5zaWduZWQgc2hvcnQgaW50IGZhbWlseSxcXG4tLVxcbm5ldC9pcHY0L3RjcF9hby5jLTIwNDctXFx0Y2FzZSBUQ1BfQU9fREVMX0tFWTpcXG5uZXQvaXB2NC90Y3BfYW8uYzoyMDQ4OlxcdFxcdHJldHVybiB0Y3BfYW9fZGVsX2NtZChzaywgZmFtaWx5LCBvcHR2YWwsIG9wdGxlbik7XFxubmV0L2lwdjQvdGNwX2FvLmMtMjA0OS1cXHRjYXNlIFRDUF9BT19JTkZPOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNTo1Njo0OC40MTE3NTkyODZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MjAyNzY5ODA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVENQIEF1dGhlbnRpY2F0aW9uIE9wdGlvbiAoVENQLUFPKSBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGludG8gdGhlIFRDUC1BTyBmdW5jdGlvbmFsaXR5LCBzcGVjaWZpY2FsbHkgaG93IGtleSBkZWxldGlvbiBpcyBoYW5kbGVkLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhlIGB0Y3BfYW9fZGVsX2NtZGAgZnVuY3Rpb24gaXMgdGhlIG9uZSByZXNwb25zaWJsZSBmb3IgdGhlIGFjdHVhbCBkZWxldGlvbiBvZiBrZXlzLiBUaGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGZyb20gYHRjcF9wYXJzZV9hb2Agd2hlbiB0aGUgYFRDUF9BT19ERUxfS0VZYCBvcHRpb24gaXMgcmVjZWl2ZWQuXG5cbk5vdywgd2hlcmUgZG9lcyBgdGNwX3BhcnNlX2FvYCBmaXQgaW50byBhbGwgdGhpcz8gQWgsIHJpZ2h0LCB0aGF0J3MgY2FsbGVkIGZyb20gYGRvX3RjcF9zZXRzb2Nrb3B0YC4gQW5kIGBkb190Y3Bfc2V0c29ja29wdGAgc2VlbXMgdG8gYmUgdGhlIGNlbnRyYWwgcG9pbnQgZm9yIGhhbmRsaW5nIGFsbCB0aGUgdmFyaW91cyBUQ1AtQU8gb3BlcmF0aW9ucyDigJMgYWRkaW5nLCBkZWxldGluZywgZ2V0dGluZyBpbmZvcm1hdGlvbiwgYW5kIHNvIG9uLiBXZSBzZWUgdGhhdCBgdGNwX3BhcnNlX2FvYCBpcyBpbmRlZWQgY2FsbGVkIGZvciBhbGwgb2YgdGhvc2U6IGBUQ1BfQU9fQUREX0tFWWAsIGBUQ1BfQU9fREVMX0tFWWAsIGBUQ1BfQU9fSU5GT2AsIGFuZCBwcm9iYWJseSBvdGhlcnMgdG9vLlxuXG5UaGVyZWZvcmUsIHRoZSBvYnZpb3VzIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIGB0Y3BfcGFyc2VfYW9gIGFuZCBgZG9fdGNwX3NldHNvY2tvcHRgIG1vcmUgY2xvc2VseSB0byBncmFzcCB0aGUgb3ZlcmFsbCB3b3JrZmxvdyBhbmQgaG93IHRoaXMga2V5IGRlbGV0aW9uIGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBUQ1AtQU8gY29uZmlndXJhdGlvbiBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NjEyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE1OjU2OjU2LjYxNDUzMTUxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMzAyNDU5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y3BfcGFyc2VfYW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvdGNwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE1OjU2OjU2LjY2Nzg0MTc3OVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NzkxMTM2MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlOlxuXG4qKkludmVzdGlnYXRpbmcgYHRjcF9wYXJzZV9hb2AqKlxuXG5Pa2F5LCBzbyBJIHNlZSBgdGNwX3BhcnNlX2FvYCBpcyB0dWNrZWQgYXdheSBpbiBgbmV0L2lwdjQvdGNwX2FvLmNgLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGJ1dCBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSAqdXNlZCouIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSBjYWxsIGdyYXBoIHRvIHNlZSB3aGVyZSB0aGUgZnVuY3Rpb24gaXMgYmVpbmcgaW52b2tlZC4gVW5kZXJzdGFuZGluZyBpdHMgY2FsbCBzaXRlcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgcGljdHVyZSBvZiBpdHMgZnVuY3Rpb24gYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIG92ZXJhbGwgbmV0d29yayBzdGFjay4gVGhpcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCBpdHMgcm9sZS4gS25vd2luZyB0aGUgY29udGV4dCBvZiBpdHMgY2FsbHMgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgaXRzIHB1cnBvc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwMjAsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNTo1NzowMC40NDY5NTc5NTFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYzMzA1NzMzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y3BfcGFyc2VfYW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L3RjcF9hby5oPTE5Nj1pbnQgdGNwX2FvX2hhc2hfc2tiKHVuc2lnbmVkIHNob3J0IGludCBmYW1pbHksXFxuLS1cXG5pbmNsdWRlL25ldC90Y3BfYW8uaC0xOTktXFx0XFx0ICAgIGNvbnN0IHU4ICp0a2V5LCBpbnQgaGFzaF9vZmZzZXQsIHUzMiBzbmUpO1xcbmluY2x1ZGUvbmV0L3RjcF9hby5oOjIwMDppbnQgdGNwX3BhcnNlX2FvKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgdW5zaWduZWQgc2hvcnQgaW50IGZhbWlseSxcXG5pbmNsdWRlL25ldC90Y3BfYW8uaC0yMDEtXFx0XFx0IHNvY2twdHJfdCBvcHR2YWwsIGludCBvcHRsZW4pO1xcbi0tXFxubmV0L2lwdjQvdGNwX2FvLmM9MTk0OT1zdGF0aWMgaW50IHRjcF9hb19pbmZvX2NtZChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIHNob3J0IGludCBmYW1pbHksXFxuLS1cXG5uZXQvaXB2NC90Y3BfYW8uYy0yMDM3LVxcbm5ldC9pcHY0L3RjcF9hby5jOjIwMzg6aW50IHRjcF9wYXJzZV9hbyhzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHVuc2lnbmVkIHNob3J0IGludCBmYW1pbHksXFxubmV0L2lwdjQvdGNwX2FvLmMtMjAzOS1cXHRcXHQgc29ja3B0cl90IG9wdHZhbCwgaW50IG9wdGxlbilcXG4tLVxcbm5ldC9pcHY0L3RjcF9hby5jPTIwNTc9aW50IHRjcF92NF9wYXJzZV9hbyhzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHNvY2twdHJfdCBvcHR2YWwsIGludCBvcHRsZW4pXFxubmV0L2lwdjQvdGNwX2FvLmMtMjA1OC17XFxubmV0L2lwdjQvdGNwX2FvLmM6MjA1OTpcXHRyZXR1cm4gdGNwX3BhcnNlX2FvKHNrLCBjbWQsIEFGX0lORVQsIG9wdHZhbCwgb3B0bGVuKTtcXG5uZXQvaXB2NC90Y3BfYW8uYy0yMDYwLX1cXG4tLVxcbm5ldC9pcHY2L3RjcF9hby5jPTEyNz1pbnQgdGNwX3Y2X3BhcnNlX2FvKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCxcXG4tLVxcbm5ldC9pcHY2L3RjcF9hby5jLTEyOS17XFxubmV0L2lwdjYvdGNwX2FvLmM6MTMwOlxcdHJldHVybiB0Y3BfcGFyc2VfYW8oc2ssIGNtZCwgQUZfSU5FVDYsIG9wdHZhbCwgb3B0bGVuKTtcXG5uZXQvaXB2Ni90Y3BfYW8uYy0xMzEtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNTo1NzowMi4wODAwMjMzMVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNTYyNzU2NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIGV4cGVydCBzdW1tYXJ5OlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgYHRjcF9wYXJzZV9hb2AgZnVuY3Rpb25zKipcblxuUmlnaHQsIHNvIGB0Y3BfdjRfcGFyc2VfYW9gIGFuZCBgdGNwX3Y2X3BhcnNlX2FvYC4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEl0J3MgYWx3YXlzIGEgZ29vZCBwcmFjdGljZSwgYW5kIGEgZmlyc3Qgc3RlcCBpbiBhbmFseXNpcywgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBncmFwaCBvZiB0aGVzZSBmdW5jdGlvbnMuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhlc2Ugc3BlY2lmaWMgZnVuY3Rpb25zIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHRzIGluIHdoaWNoIHRoZXkncmUgYmVpbmcgaW52b2tlZC4gS25vd2luZyB0aGUgY2FsbGluZyBmdW5jdGlvbnMgZ2l2ZXMgaW1tZWRpYXRlIGNvbnRleHQsIGFuZCBsZXRzIG1lIHVuZGVyc3RhbmQgd2hhdCdzIHRyaWdnZXJpbmcgdGhlc2UgcGFyc2luZyByb3V0aW5lcy4gVGhpcyBpcyBnb2luZyB0byBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUgaGVyZS4gTGV0J3Mgc2VlIHdoZXJlIHRoZXkncmUgYmVpbmcgKmNhbGxlZCogZnJvbS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODcwMywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE1OjU3OjA2LjMzNjMwMTYxN1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcxNjM5NTc2NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y3BfdjRfcGFyc2VfYW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L3RjcF9hby5oPTIzMD1pbnQgdGNwX2FvX3ByZXBhcmVfcmVzZXQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuaW5jbHVkZS9uZXQvdGNwX2FvLmgtMjM1LS8qIGlwdjQgc3BlY2lmaWMgZnVuY3Rpb25zICovXFxuaW5jbHVkZS9uZXQvdGNwX2FvLmg6MjM2OmludCB0Y3BfdjRfcGFyc2VfYW8oc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCBzb2NrcHRyX3Qgb3B0dmFsLCBpbnQgb3B0bGVuKTtcXG5pbmNsdWRlL25ldC90Y3BfYW8uaC0yMzctc3RydWN0IHRjcF9hb19rZXkgKnRjcF92NF9hb19sb29rdXAoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqYWRkcl9zayxcXG4tLVxcbm5ldC9pcHY0L3RjcF9hby5jPTIwMzg9aW50IHRjcF9wYXJzZV9hbyhzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHVuc2lnbmVkIHNob3J0IGludCBmYW1pbHksXFxuLS1cXG5uZXQvaXB2NC90Y3BfYW8uYy0yMDU2LVxcbm5ldC9pcHY0L3RjcF9hby5jOjIwNTc6aW50IHRjcF92NF9wYXJzZV9hbyhzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHNvY2twdHJfdCBvcHR2YWwsIGludCBvcHRsZW4pXFxubmV0L2lwdjQvdGNwX2FvLmMtMjA1OC17XFxuLS1cXG5uZXQvaXB2NC90Y3BfaXB2NC5jPTIzNzE9c3RhdGljIGNvbnN0IHN0cnVjdCB0Y3Bfc29ja19hZl9vcHMgdGNwX3NvY2tfaXB2NF9zcGVjaWZpYyA9IHtcXG4tLVxcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMjM3OS1cXHQuY2FsY19hb19oYXNoXFx0XFx0PSB0Y3BfdjRfYW9faGFzaF9za2IsXFxubmV0L2lwdjQvdGNwX2lwdjQuYzoyMzgwOlxcdC5hb19wYXJzZVxcdFxcdD0gdGNwX3Y0X3BhcnNlX2FvLFxcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMjM4MS1cXHQuYW9fY2FsY19rZXlfc2tcXHRcXHQ9IHRjcF92NF9hb19jYWxjX2tleV9zayxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTU6NTc6MDguMDUyNzA2NDQ0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMTIxODM1MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTmF2aWdhdGluZyB0aGUgVENQIFNvY2tldCBPcGVyYXRpb25zKipcblxuUmlnaHQsIHNvIHdlJ3JlIGxvb2tpbmcgYXQgYSBwaWVjZSBvZiBjb2RlIHJlbGF0ZWQgdG8gVENQIHNvY2tldCBvcGVyYXRpb25zIOKAkyBzcGVjaWZpY2FsbHksIGl0J3Mgc29tZXRoaW5nIHdpdGhpbiB0aGUgYHRjcF9zb2NrX2FmX29wc2Agc3RydWN0dXJlLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gZGlnIGludG8gdGhlIGFkZHJlc3MgZmFtaWx5LXNwZWNpZmljIHBhcnNpbmcgZnVuY3Rpb25zLiBHaXZlbiB0aGF0IGNvbnRleHQsIEknbSBwcmV0dHkgc3VyZSBgYW9fcGFyc2VgIGlzIHRoZSByZWxldmFudCBmdW5jdGlvbiB0byBpbnZlc3RpZ2F0ZS4gSXQncyBhbG1vc3QgY2VydGFpbmx5IGZvdW5kIHdpdGhpbiBgbmV0L2lwdjQvdGNwLmNgLCB3aGljaCBpcyB0aGUgdHlwaWNhbCBsb2NhdGlvbiBmb3IgSVB2NCBUQ1AgaGFuZGxpbmcgd2l0aGluIHRoZSBrZXJuZWwuIExldCBtZSBwdWxsIHRoYXQgdXAgYW5kIHNlZSB3aGF0IHdlJ3JlIHdvcmtpbmcgd2l0aC4gSSBleHBlY3QgaXQgdG8gZGVhbCB3aXRoIGFueSBhZGRyZXNzLXJlbGF0ZWQgcGFyc2luZyBhbmQgaGFuZGxpbmcuIFRoaXMgaXMgcHJvYmFibHkgdGhlIGVudHJ5IHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIHRoZSBzb2NrZXQncyBiZWhhdmlvciBpbiBxdWVzdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTM2MiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE1OjU3OjEyLjM2NDg5MzczOVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg5MjU0NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYW9fcGFyc2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvdGNwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvdGNwLmM9MzgzOD1pbnQgZG9fdGNwX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbi0tXFxubmV0L2lwdjQvdGNwLmMtNDA3OS1cXHRcXHRpZiAoKDEgXFx1MDAzY1xcdTAwM2Mgc2stXFx1MDAzZXNrX3N0YXRlKSBcXHUwMDI2IChUQ1BGX0xJU1RFTiB8IFRDUEZfQ0xPU0UpKVxcbm5ldC9pcHY0L3RjcC5jOjQwODA6XFx0XFx0XFx0Z290byBhb19wYXJzZTtcXG5uZXQvaXB2NC90Y3AuYy00MDgxLVxcdFxcdGlmIChyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHRjcF9zayhzayktXFx1MDAzZWFvX2luZm8sXFxubmV0L2lwdjQvdGNwLmMtNDA4Mi1cXHRcXHRcXHRcXHRcXHQgICAgICBsb2NrZGVwX3NvY2tfaXNfaGVsZChzaykpKVxcbm5ldC9pcHY0L3RjcC5jOjQwODM6XFx0XFx0XFx0Z290byBhb19wYXJzZTtcXG5uZXQvaXB2NC90Y3AuYy00MDg0LVxcdFxcdGlmICh0cC1cXHUwMDNlcmVwYWlyKVxcbm5ldC9pcHY0L3RjcC5jOjQwODU6XFx0XFx0XFx0Z290byBhb19wYXJzZTtcXG5uZXQvaXB2NC90Y3AuYy00MDg2LVxcdFxcdGVyciA9IC1FSVNDT05OO1xcbm5ldC9pcHY0L3RjcC5jLTQwODctXFx0XFx0YnJlYWs7XFxubmV0L2lwdjQvdGNwLmM6NDA4ODphb19wYXJzZTpcXG5uZXQvaXB2NC90Y3AuYzo0MDg5OlxcdFxcdGVyciA9IHRwLVxcdTAwM2VhZl9zcGVjaWZpYy1cXHUwMDNlYW9fcGFyc2Uoc2ssIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTtcXG5uZXQvaXB2NC90Y3AuYy00MDkwLVxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNTo1NzoxMi40MTM4MjU2MDdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTU5OTA4OTI2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRDUC1BTzogQSBXb3J0aHdoaWxlIEVuZGVhdm9yKipcblxuT2theSwgc28gSSBzZWUgdGhpcyBwYXRjaCBhbmQgaXQncyBkZWFsaW5nIHdpdGggYHNldHNvY2tvcHRgIGFuZCBUQ1AtQU8sIHNwZWNpZmljYWxseSwgaXQgaW52b2x2ZXMgYHNldHNvY2tvcHQoLi4uLCBJUFBST1RPX1RDUCwgVENQX0FPX0RFTF9LRVksIC4uLilgIOKAkyB0aGF0J3MgYWNjZXNzaWJsZSwgd2hpY2ggcGlxdWVzIG15IGludGVyZXN0IGltbWVkaWF0ZWx5LiBUaGlzIHBhdGNoIGFkZHJlc3NlcyBhIGJ1ZyB3aGVyZSBgY21kLmlmaW5kZXhgIHdhc24ndCBiZWluZyBjb3JyZWN0bHkgYXNzaWduZWQgdG8gYGwzaW5kZXhgIHdoZW4gYFRDUF9BT19LRVlGX0lGSU5ERVhgIHdhcyBmbGFnZ2VkIGluIGBjbWQua2V5ZmxhZ3NgLiBGdW5jdGlvbmFsbHksIHRoaXMgaXMgYSBjaGFuZ2UgdG8gaG93IFRDUC1BTyBpcyBoYW5kbGVkIHdpdGhpbiBgc2V0c29ja29wdGAuIFRDUC1BTyBpdHNlbGYgaXMgYSBjb3JlIG5ldHdvcmtpbmcgZmVhdHVyZSwgbm8gZG91YnQuIFRoZSBxdWVzdGlvbiBpczogaXMgdGhpcyBmdXp6YWJsZT8gQWJzb2x1dGVseS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiBhIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29tcG9uZW50LiBUaGUgcG90ZW50aWFsIGltcGFjdCBpcyBzaWduaWZpY2FudCwgYW5kIHRoZSBhdHRhY2sgc3VyZmFjZSBpcyBhY2Nlc3NpYmxlLiBOb3csIEkgbmVlZCB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFzc29jaWF0ZWQgd2l0aCBUQ1AtQU8gdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgcG90ZW50aWFsIHZlY3RvcnMgZm9yIGZ1enppbmcuIFRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBhIGNsb3NlciBsb29rLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5OTYyLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE1OjU3OjIyLjAxMjkxNzgzN1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg1NDE4NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFRDUF9BT1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L0tjb25maWc9NzI5PWNvbmZpZyBERUZBVUxUX1RDUF9DT05HXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTc0My1cXG5uZXQvaXB2NC9LY29uZmlnOjc0NDpjb25maWcgVENQX0FPXFxubmV0L2lwdjQvS2NvbmZpZy03NDUtXFx0Ym9vbCBcXFwiVENQOiBBdXRoZW50aWNhdGlvbiBPcHRpb24gKFJGQzU5MjUpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNTo1NzoyMi4wNjE0NjYyMTVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIwODgyMjkyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHF1aWNrIHJ1bmRvd24gb2Ygd2hhdCBJJ20gdGhpbmtpbmcgYWJvdXQgcmVsYXRlZCB0byB0aGlzIFRDUCBhbmFseXNpczpcblxuKipUQ1BfQU8gQ29uZmlndXJhdGlvbiBFeGFtaW5hdGlvbioqXG5cblJpZ2h0LCBzbyB3ZSdyZSBkZWFsaW5nIHdpdGggYFRDUF9BT2AgYXMgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIOKAkyB0aGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gZGlnIGludG8gaG93IHRoaXMgaXMgaW1wbGVtZW50ZWQuIE15IGluaXRpYWwgZm9jdXMgaXMgZ29pbmcgdG8gYmUgb24gYSBjb3VwbGUgb2Yga2V5IHN5bWJvbHM6IGB0Y3BfYW9fZGVsX2NtZGAgYW5kIGB0Y3BfcGFyc2VfYW9gLiBUaGV5IHNlZW0gbGlrZSBsb2dpY2FsIHBsYWNlcyB0byBzdGFydCBwb2tpbmcgYXJvdW5kIHRvIHVuZGVyc3RhbmQgaG93IEFPIChBdXRoZW50aWNhdGVkIE9wdGlvbnMsIEknbSBndWVzc2luZz8pIGlzIGhhbmRsZWQuXG5cbk9rYXksIGB0Y3BfYW9fZGVsX2NtZGAgaXMgc3RhdGljLCB3aGljaCBpcyBmaW5lLCBidXQgbm90IGlkZWFsIGZvciBkZWVwZXIgaW50cm9zcGVjdGlvbi4gTm93LCBgdGNwX3BhcnNlX2FvYCBpcyB0aGUgaW50ZXJlc3Rpbmcgb25lOyBpdCdzICpub3QqIHN0YXRpYywgc28gSSBjYW4gcHJvYmFibHkgZ2V0IGF0IG1vcmUgZGV0YWlscyBhYm91dCBob3cgaXQncyB1c2VkLiBJJ2xsIG5lZWQgdG8gY2hlY2sgaXRzIGZ1bmN0aW9uIHNpZ25hdHVyZSB0byBzZWUgd2hhdCB0aGUgaW5wdXRzIGFyZSwgd2hhdCBpdCByZXR1cm5zLCBhbmQgZ2V0IGFuIGlkZWEgb2Ygd2hlcmUgdG8gZ28gbmV4dC4gVW5kZXJzdGFuZGluZyB0aGF0IHNpZ25hdHVyZSB3aWxsIHJlYWxseSBoZWxwIG1lIHplcm8gaW4gb24gd2hlcmUgdGhlIHJlbGV2YW50IGNvZGUgcGF0aHMgYXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDQ0MSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE1OjU3OjI2LjI3MDI5MjM0NFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg3NjQ4ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50IHRjcF9wYXJzZV9hb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC90Y3BfYW8uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC90Y3BfYW8uYz0xOTQ5PXN0YXRpYyBpbnQgdGNwX2FvX2luZm9fY21kKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgc2hvcnQgaW50IGZhbWlseSxcXG4tLVxcbm5ldC9pcHY0L3RjcF9hby5jLTIwMzctXFxubmV0L2lwdjQvdGNwX2FvLmM6MjAzODppbnQgdGNwX3BhcnNlX2FvKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgdW5zaWduZWQgc2hvcnQgaW50IGZhbWlseSxcXG5uZXQvaXB2NC90Y3BfYW8uYy0yMDM5LVxcdFxcdCBzb2NrcHRyX3Qgb3B0dmFsLCBpbnQgb3B0bGVuKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNTo1NzoyNi4zMTkwNjIxNzJaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDgxOTMyMTM1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHF1aWNrIHJ1bmRvd24gb2Ygd2hhdCBJJ20gdGhpbmtpbmcgYWJvdXQgcmVsYXRlZCB0byB0aGlzIFRDUCBwYXJzaW5nIGNvZGUsIGtlZXBpbmcgaW4gbWluZCBteSBleHBlcnRpc2U6XG5cbioqVENQIFN5bWJvbCBBbmFseXNpcyAtIEZvY3VzIG9uIEFPIEZ1bmN0aW9ucyoqXG5cblJpZ2h0LCBzbyBgdGNwX3BhcnNlX2FvYCBzZWVtcyBsaWtlIGEgc29saWQgY2FuZGlkYXRlIGZvciBhIGtleSBzeW1ib2wsIGEgZ29vZCBmb2NhbCBwb2ludCBmb3IgYW5hbHlzaXMgaW4gdGhpcyBhcmVhIG9mIHRoZSBjb2RlLiBCdXQsIGdpdmVuIHRoYXQgd2UncmUgdGFsa2luZyBhYm91dCBUQ1AsIEkgc2hvdWxkIGFsc28gY29uc2lkZXIgaXRzIElQdjQgYW5kIElQdjYgdmFyaWFudHMsIHdoaWNoIHdvdWxkIGJlIGB0Y3BfdjRfcGFyc2VfYW9gIGFuZCBgdGNwX3Y2X3BhcnNlX2FvYC4gVGhvc2UgYXJlIGRlZmluaXRlbHkgd29ydGggaW52ZXN0aWdhdGluZyBhcyB3ZWxsLlxuXG5Ob3csIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBhZG1pbmlzdHJhdGl2ZSBjb21tYW5kcy4gSSB3YW50IHRvIHNlZSBpZiBgdGNwX2FvX2RlbF9jbWRgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBZZXAsIGl0IGlzLiBUaGF0IGluZm9ybWF0aW9uIGlzIGdvaW5nIHRvIGNvbWUgaW4gaGFuZHkgbGF0ZXIuIEdvb2QsIHRoYXQncyBvbmUgbGVzcyB2YXJpYWJsZSB0byB3b3JyeSBhYm91dC5cblxuTm93LCBsZXQncyBzZWUgd2hhdCBvdGhlciByZWxhdGVkIGZ1bmN0aW9ucyBhcmUgaW4gcGxheS4gSSdsbCBuZWVkIHRvIGV4cGFuZCBteSBzZWFyY2ggdG8gaWRlbnRpZnkgYW55IG90aGVyIHJlbGV2YW50IGZ1bmN0aW9ucyBhcm91bmQgdGhlc2UgdG8gZ2V0IGEgZnVsbCBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDkyMywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE1OjU3OjMxLjEzODM4NjQ5MloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQyNTc4NDA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjcF9hb19kZWxfY21kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L3RjcF9hby5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L3RjcF9hby5jPTk5MD10Y3BfaW5ib3VuZF9hb19oYXNoKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY0L3RjcF9hby5jLTEwNTUtXFx0XFx0XFx0aWYgKGtleSlcXG5uZXQvaXB2NC90Y3BfYW8uYzoxMDU2OlxcdFxcdFxcdFxcdC8qIHBhaXJzIHdpdGggdGNwX2FvX2RlbF9jbWQgKi9cXG5uZXQvaXB2NC90Y3BfYW8uYy0xMDU3LVxcdFxcdFxcdFxcdFdSSVRFX09OQ0UoaW5mby1cXHUwMDNlY3VycmVudF9rZXksIGtleSk7XFxuLS1cXG5uZXQvaXB2NC90Y3BfYW8uYy0xMDY4LVxcdCAqIC0gcmVxdWVzdCBzb2NrZXRzIHdvdWxkIHJhY2Ugb24gdGhvc2Uga2V5IHBvaW50ZXJzXFxubmV0L2lwdjQvdGNwX2FvLmM6MTA2OTpcXHQgKiAtIHRjcF9hb19kZWxfY21kKCkgYWxsb3dzIGFzeW5jIGtleSByZW1vdmFsXFxubmV0L2lwdjQvdGNwX2FvLmMtMTA3MC1cXHQgKi9cXG4tLVxcbm5ldC9pcHY0L3RjcF9hby5jPTE3NDY9c3RhdGljIGludCB0Y3BfYW9fZGVsZXRlX2tleShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0Y3BfYW9faW5mbyAqYW9faW5mbyxcXG4tLVxcbm5ldC9pcHY0L3RjcF9hby5jLTE3OTktI2RlZmluZSBUQ1BfQU9fREVMX0tFWUZfQUxMIChUQ1BfQU9fS0VZRl9JRklOREVYKVxcbm5ldC9pcHY0L3RjcF9hby5jOjE4MDA6c3RhdGljIGludCB0Y3BfYW9fZGVsX2NtZChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIHNob3J0IGludCBmYW1pbHksXFxubmV0L2lwdjQvdGNwX2FvLmMtMTgwMS1cXHRcXHRcXHQgIHNvY2twdHJfdCBvcHR2YWwsIGludCBvcHRsZW4pXFxuLS1cXG5uZXQvaXB2NC90Y3BfYW8uYz0yMDM4PWludCB0Y3BfcGFyc2VfYW8oc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCB1bnNpZ25lZCBzaG9ydCBpbnQgZmFtaWx5LFxcbi0tXFxubmV0L2lwdjQvdGNwX2FvLmMtMjA0Ny1cXHRjYXNlIFRDUF9BT19ERUxfS0VZOlxcbm5ldC9pcHY0L3RjcF9hby5jOjIwNDg6XFx0XFx0cmV0dXJuIHRjcF9hb19kZWxfY21kKHNrLCBmYW1pbHksIG9wdHZhbCwgb3B0bGVuKTtcXG5uZXQvaXB2NC90Y3BfYW8uYy0yMDQ5LVxcdGNhc2UgVENQX0FPX0lORk86XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE1OjU3OjMxLjU4MDk3NDY4OFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Njc2ODA2NzU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFBsYW4gZm9yIFBhcnNpbmcgVENQIEF1dGhlbnRpY2F0aW9uIE9wdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gZ29pbmcgdG8gYWRkIHRoZSBmdW5jdGlvbnMgYHRjcF9wYXJzZV9hb2AsIGB0Y3BfdjRfcGFyc2VfYW9gLCBhbmQgYHRjcF92Nl9wYXJzZV9hb2AgdG8gdGhlIGBGb2N1c1N5bWJvbHNgIGxpc3QuIFRoaXMgaXMgYSBjcml0aWNhbCBzdGVwIGluIGdldHRpbmcgbXkgYXV0aGVudGljYXRpb24gb3B0aW9uIHBhcnNpbmcgd29ya2luZyBjb3JyZWN0bHksIGFuZCBJIHdhbnQgdG8gYmUgc3VyZSBpdCdzIGFjY2Vzc2libGUgYW5kIHRyYWNrZWQgcHJvcGVybHkuIE5vdywgYmVmb3JlIEkgZ2V0IHRvbyBmYXIsIEkgbmVlZCB0byB2ZXJpZnkgd2hhdCwgaWYgYW55dGhpbmcsIHRoaXMgYFRDUF9BT2AgZmVhdHVyZSByZWxpZXMgb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIuIEdvdHRhIG1ha2Ugc3VyZSBJJ20gbm90IG92ZXJsb29raW5nIHNvbWV0aGluZyBmdW5kYW1lbnRhbC4gVGhpcyBpbml0aWFsIGRlcGVuZGVuY3kgY2hlY2sgaXMga2V5IHRvIGF2b2lkaW5nIGhlYWRhY2hlcyBkb3duIHRoZSBsaW5lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTc2NSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE1OjU3OjM2LjI1Nzc4NDAxM1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcwODc0MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFRDUF9BT1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L0tjb25maWc9NzI5PWNvbmZpZyBERUZBVUxUX1RDUF9DT05HXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTc0My1cXG5uZXQvaXB2NC9LY29uZmlnOjc0NDpjb25maWcgVENQX0FPXFxubmV0L2lwdjQvS2NvbmZpZy03NDUtXFx0Ym9vbCBcXFwiVENQOiBBdXRoZW50aWNhdGlvbiBPcHRpb24gKFJGQzU5MjUpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNTo1NzozNi4zMDQ4NzcyNzJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU5MDYzMDM2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gcmVhZGluZyBhbmQgcHJvY2Vzc2luZyB0aGUgYG5ldC9pcHY0L0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBjb25maWcgVENQX0FPYCBzZXR0aW5nOlxuXG4qKkFuYWx5emluZyB0aGUgS2NvbmZpZyBmb3IgVENQX0FPKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgS2NvbmZpZyBmaWxlLCBmb2N1c2luZyBvbiB0aGUgYFRDUF9BT2AgY29uZmlndXJhdGlvbiBvcHRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgc2V0dGluZ3MsIGFuZCB3aGVyZSBpdCBmaXRzIGluIHRoZSBicm9hZGVyIG5ldHdvcmsgc3RhY2sgY29uZmlndXJhdGlvbi4gRmlyc3QsIEkgd2FudCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIGRlcGVuZGVuY2llcyDigJMgZG9lcyBpdCByZWx5IG9uIG90aGVyIGZlYXR1cmVzIGJlaW5nIGVuYWJsZWQsIGxpa2UgSVBzZWMgb3Igc3BlY2lmaWMgY3J5cHRvZ3JhcGhpYyBtb2R1bGVzPyBBcmUgdGhlcmUgYW55IGFzc29jaWF0ZWQgc3ltYm9scyB0aGF0IHdvdWxkIGluZmx1ZW5jZSB3aGV0aGVyIHRoaXMgZ2V0cyBidWlsdD8gVGhlIGBLY29uZmlnYCBmaWxlcyBnZW5lcmFsbHkgbWFwIGRpcmVjdGx5IHRvIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IEkgY2FuIGVuYWJsZS9kaXNhYmxlLCBzbyBJJ20gc2Nhbm5pbmcgZm9yIGNsdWVzIGFib3V0IGhvdyB0aGUgbWFpbnRhaW5lcnMgZGVzaWduZWQgdGhpcy4gSSdtIGFsc28gbG9va2luZyBmb3IgYW55IGNvbW1lbnRzIG9yIGRvY3VtZW50YXRpb24gd2l0aGluIHRoZSBmaWxlIGl0c2VsZi4gVGhvc2Uga2luZHMgb2YgY2x1ZXMgYXJlIGdvaW5nIHRvIHRlbGwgbWUgd2hhdCB0aGUgZGVzaWduIGludGVudGlvbnMgYXJlLiBJcyB0aGlzIG9wdGlvbiBleHBlcmltZW50YWwsIG1hdHVyZSwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMDg1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTU6NTc6NDAuODk1NTA5OTNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM0MjUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNzQwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzQwOlxcdFxcdGRlZmF1bHQgXFxcImNkZ1xcXCIgaWYgREVGQVVMVF9DREdcXG4gNzQxOlxcdFxcdGRlZmF1bHQgXFxcImJiclxcXCIgaWYgREVGQVVMVF9CQlJcXG4gNzQyOlxcdFxcdGRlZmF1bHQgXFxcImN1YmljXFxcIlxcbiA3NDM6XFx0XFxuIDc0NDpcXHRjb25maWcgVENQX0FPXFxuIDc0NTpcXHRcXHRib29sIFxcXCJUQ1A6IEF1dGhlbnRpY2F0aW9uIE9wdGlvbiAoUkZDNTkyNSlcXFwiXFxuIDc0NjpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9BRVNfQ0JDX01BQ1NcXG4gNzQ3OlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX1NIQTFcXG4gNzQ4OlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX1NIQTI1NlxcbiA3NDk6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfVVRJTFNcXG4gNzUwOlxcdFxcdGRlcGVuZHMgb24gNjRCSVQgIyBzZXEtbnVtYmVyIGV4dGVuc2lvbiBuZWVkcyBXUklURV9PTkNFKHU2NClcXG4gNzUxOlxcdFxcdGhlbHBcXG4gNzUyOlxcdFxcdCAgVENQLUFPIHNwZWNpZmllcyB0aGUgdXNlIG9mIHN0cm9uZ2VyIE1lc3NhZ2UgQXV0aGVudGljYXRpb24gQ29kZXMgKE1BQ3MpLFxcbiA3NTM6XFx0XFx0ICBwcm90ZWN0cyBhZ2FpbnN0IHJlcGxheXMgZm9yIGxvbmctbGl2ZWQgVENQIGNvbm5lY3Rpb25zLCBhbmRcXG4gNzU0OlxcdFxcdCAgcHJvdmlkZXMgbW9yZSBkZXRhaWxzIG9uIHRoZSBhc3NvY2lhdGlvbiBvZiBzZWN1cml0eSB3aXRoIFRDUFxcbiA3NTU6XFx0XFx0ICBjb25uZWN0aW9ucyB0aGFuIFRDUCBNRDUgKFNlZSBSRkM1OTI1KVxcbiA3NTY6XFx0XFxuIDc1NzpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDc1ODpcXHRcXG4gNzU5OlxcdGNvbmZpZyBUQ1BfTUQ1U0lHXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE1OjU3OjQwLjg5NTk0NjQxWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNzIwOTQzOTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFRDUC1BTyBDb25maWd1cmF0aW9uIGFuZCBUZXN0IFN0cmF0ZWd5KipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBjb250aW5nZW50IG9uIGA2NEJJVGAsIHdoaWNoIGlzIGV4cGVjdGVkLiBUaGUgY29yZSByZXF1aXJlbWVudCBoZXJlIGlzIGBUQ1BfQU9gLCBhbmQgdGhhdCdzIHRoZSBvbmx5IGltbWVkaWF0ZSBjb25maWd1cmF0aW9uIG5lZWRlZCwgd2hpY2ggaXMgZ29vZC5cblxuTGV0J3MgZG8gYSBxdWljayBkb3VibGUtY2hlY2sgZm9yIGFueXRoaW5nIGVsc2UgbHVya2luZyBhcm91bmQuIFRoZSBzZWxmdGVzdCBoaW50cyBhdCBgS0NPTkZJR19ORVRfVlJGYCwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgVlJGIGlzIHJlbGV2YW50IHRvIHNwZWNpZmljYWxseSB0ZXN0IHRoaXMgbmV3IGZ1bmN0aW9uYWxpdHkuXG5cbkxvb2tpbmcgYXQgdGhlIGNvZGUgZGlmZjpcbmBgYGNcbiBcdGlmIChjbWQuaWZpbmRleCBcdTAwMjZcdTAwMjYgIShjbWQua2V5ZmxhZ3MgXHUwMDI2IFRDUF9BT19LRVlGX0lGSU5ERVgpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbitcdGlmIChjbWQua2V5ZmxhZ3MgXHUwMDI2IFRDUF9BT19LRVlGX0lGSU5ERVgpXG4rXHRcdGwzaW5kZXggPSBjbWQuaWZpbmRleDtcbitcbiBcdGFvX2luZm8gPSBzZXRzb2Nrb3B0X2FvX2luZm8oc2spO1xuIGBgYFxuSXQgc2VlbXMgdGhhdCBgY21kLmlmaW5kZXhgIGlzIHVzZWQgdG8gYXNzaWduIGEgdmFsdWUgdG8gYGwzaW5kZXhgLiBBbmQgYGwzaW5kZXhgIGlzIHVzZWQgaW4gdGhlIGtleSBtYXRjaGluZy4gVlJGIGNlcnRhaW5seSAqdXNlcyogYGwzaW5kZXhgLiBIb3dldmVyLCBgaWZpbmRleGAgY2FuIGJlICphbnkqIGludGVyZmFjZSBpbmRleCwgbm90IGp1c3QgVlJGLiBCdXQsIGBORVRfVlJGYCBtaWdodCBzdGlsbCBiZSB1c2VmdWwgdG8gZW5hYmxlIHRlc3RpbmcgVlJGLXNjb3BlZCBrZXlzIGlmIHRob3NlIGFyZSBvZiBjb25jZXJuLCBzbyBsZXQncyBhZGQgYE5FVF9WUkZgIHRvIGBFbmFibGVDb25maWdzYCBhcyBhIHByZWNhdXRpb24uXG5cbkkgc2hvdWxkIGFsc28gcXVpY2tseSBleGFtaW5lIGB0Y3BfYW9fZGVsZXRlX2tleWAsIGp1c3QgaW4gY2FzZSwgYnV0IGl0IGxvb2tzIGxpa2UgYSBzdGF0aWMgZnVuY3Rpb24uXG5cbkxldCBtZSBzdW1tYXJpemUgbXkgZmluZGluZ3MsIGluIHRoZSB0eXBpY2FsIHdheTpcbiogICBgV29ydGhGdXp6aW5nYDogVHJ1ZSDigJMgVGhpcyBsb29rcyBsaWtlIGl0J3MgYWRkcmVzc2luZyBhIGNvcmUgbmV0d29ya2luZyBidWcuXG4qICAgYEZvY3VzU3ltYm9sc2A6IGB0Y3BfcGFyc2VfYW9gLCBgdGNwX3Y0X3BhcnNlX2FvYCwgYHRjcF92Nl9wYXJzZV9hb2Ag4oCTIFNlZW1zIHJpZ2h0LiBUaG9zZSBhcmUgd2hlcmUgd2UgYXJlIHByb2Nlc3NpbmcgdGhlIG9wdGlvbi5cbiogICBgRW5hYmxlQ29uZmlnc2A6IGBUQ1BfQU9gLCBgTkVUX1ZSRmAg4oCTIFdlJ3JlIHN0YXJ0aW5nIHdpdGggYFRDUF9BT2AsIHdpdGggYE5FVF9WUkZgIGVuYWJsZWQgdG8gZXhwYW5kIHRlc3RpbmcgVlJGLXNjb3BlZCBrZXlzLlxuKiAgIGBSZWFzb25pbmdgOiBUaGUgcGF0Y2ggaGFzIGEgYnVnLWZpeCBmb3Igc2V0c29ja29wdCBpbiBUQ1AtQU8sIGRlYWxpbmcgd2l0aCB0aGUgYXNzaWdubWVudCBvZiBgY21kLmlmaW5kZXhgIHRvIGBsM2luZGV4YCB3aGVuIGRlbGV0aW5nIGEga2V5IGFuZCBmaXhlcyBhIHByb2JsZW0gd2l0aCBkZWxldGluZyBpbnRlcmZhY2Utc2NvcGVkIGtleXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JraW5nIGFyZWEsIHNvIHNob3VsZCBiZSB3b3J0aCBvdXIgYXR0ZW50aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjY3NCwiT3V0cHV0VG9rZW5zIjoxMjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNTo1Nzo1MS42MTY4OTQyOTVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzQ4MTYyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVENQX0FPXCIsXG4gICAgXCJORVRfVlJGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNwX3BhcnNlX2FvXCIsXG4gICAgXCJ0Y3BfdjRfcGFyc2VfYW9cIixcbiAgICBcInRjcF92Nl9wYXJzZV9hb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIFRDUC1BTyBzZXRzb2Nrb3B0IGhhbmRsaW5nIHdoZXJlIGBjbWQuaWZpbmRleGAgd2FzIG5vdCBhc3NpZ25lZCB0byBgbDNpbmRleGAgd2hlbiBkZWxldGluZyBhIGtleSwgcHJldmVudGluZyBkZWxldGlvbiBvZiBpbnRlcmZhY2Utc2NvcGVkIGtleXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVENQX0FPXCIsXG4gICAgXCJORVRfVlJGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNwX3BhcnNlX2FvXCIsXG4gICAgXCJ0Y3BfdjRfcGFyc2VfYW9cIixcbiAgICBcInRjcF92Nl9wYXJzZV9hb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIFRDUC1BTyBzZXRzb2Nrb3B0IGhhbmRsaW5nIHdoZXJlIGBjbWQuaWZpbmRleGAgd2FzIG5vdCBhc3NpZ25lZCB0byBgbDNpbmRleGAgd2hlbiBkZWxldGluZyBhIGtleSwgcHJldmVudGluZyBkZWxldGlvbiBvZiBpbnRlcmZhY2Utc2NvcGVkIGtleXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE1OjU3OjUxLjY5MDM4MzY1M1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzc5NjM4MTIyOTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNTo1Nzo1MS42OTA4MzQ3NzNaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6Mzc5NjMzNTc3NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIGluIGB0Y3BfYW9fZGVsX2NtZGAgd2hlcmUgdGhlIGBsM2luZGV4YCB2YXJpYWJsZSB3YXMgbm90IGJlaW5nIHBvcHVsYXRlZCBmcm9tIHRoZSB1c2VyLXByb3ZpZGVkIGBjbWQuaWZpbmRleGAgd2hlbiB0aGUgYFRDUF9BT19LRVlGX0lGSU5ERVhgIGZsYWcgd2FzIHNldC4gVGhlIGBjbWRgIHN0cnVjdHVyZSBpcyBzYWZlbHkgY29waWVkIGZyb20gdXNlcnNwYWNlIHVzaW5nIGBjb3B5X3N0cnVjdF9mcm9tX3NvY2twdHJgLCB3aGljaCBndWFyYW50ZWVzIHRoYXQgdGhlIHN0cnVjdHVyZSBpcyBmdWxseSBpbml0aWFsaXplZCAoemVyby1wYWRkZWQgaWYgdGhlIHVzZXJzcGFjZSBzdHJ1Y3R1cmUgaXMgc21hbGxlcikuIFRoZSBwYXRjaCBvbmx5IGFkZHMgYSBjb25kaXRpb25hbCBhc3NpZ25tZW50IG9mIGFuIGludGVnZXIgdmFyaWFibGUgYW5kIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDExMTdjOWZkZjhiYzA3MjRjMjAxN2IyZDU4OTcyY2NmOTc5YzMzM2FcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAyMSAxNTo1Njo0MCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9hby5jIGIvbmV0L2lwdjQvdGNwX2FvLmNcbmluZGV4IDUwOTQyNjc0NDdhZWUuLjI2ODY0NjIxZTZkZWYgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3BfYW8uY1xuKysrIGIvbmV0L2lwdjQvdGNwX2FvLmNcbkBAIC0xODM0LDYgKzE4MzQsOSBAQCBzdGF0aWMgaW50IHRjcF9hb19kZWxfY21kKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgc2hvcnQgaW50IGZhbWlseSxcbiBcdGlmIChjbWQuaWZpbmRleCBcdTAwMjZcdTAwMjYgIShjbWQua2V5ZmxhZ3MgXHUwMDI2IFRDUF9BT19LRVlGX0lGSU5ERVgpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbitcdGlmIChjbWQua2V5ZmxhZ3MgXHUwMDI2IFRDUF9BT19LRVlGX0lGSU5ERVgpXG4rXHRcdGwzaW5kZXggPSBjbWQuaWZpbmRleDtcbitcbiBcdGFvX2luZm8gPSBzZXRzb2Nrb3B0X2FvX2luZm8oc2spO1xuIFx0aWYgKElTX0VSUihhb19pbmZvKSlcbiBcdFx0cmV0dXJuIFBUUl9FUlIoYW9faW5mbyk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9rZXktbWFuYWdlbWVudC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9rZXktbWFuYWdlbWVudC5jXG5pbmRleCBkODZiYjM4MGI3OWY3Li4xZTAxZTgwNWRiYTcyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9rZXktbWFuYWdlbWVudC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2tleS1tYW5hZ2VtZW50LmNcbkBAIC02Myw3ICs2Myw4IEBAIHN0YXRpYyBpbnQgcHJlcGFyZV9sc2sodW5pb24gdGNwX2FkZHIgKmFkZHIsIHVpbnQ4X3Qgc25kaWQsIHVpbnQ4X3QgcmN2aWQpXG4gXHRyZXR1cm4gc2s7XG4gfVxuIFxuLXN0YXRpYyBpbnQgdGVzdF9kZWxfa2V5KGludCBzaywgdWludDhfdCBzbmRpZCwgdWludDhfdCByY3ZpZCwgYm9vbCBhc3luYyxcbitzdGF0aWMgaW50IHRlc3RfZGVsX2tleShpbnQgc2ssIHVpbnQ4X3Qgc25kaWQsIHVpbnQ4X3QgcmN2aWQsIGludCBpZmluZGV4LFxuK1x0XHRcdGJvb2wgYXN5bmMsXG4gXHRcdFx0aW50IGN1cnJlbnRfa2V5LCBpbnQgcm5leHRfa2V5KVxuIHtcbiBcdHN0cnVjdCB0Y3BfYW9faW5mb19vcHQgYW9faW5mbyA9IHt9O1xuQEAgLTc2LDYgKzc3LDEwIEBAIHN0YXRpYyBpbnQgdGVzdF9kZWxfa2V5KGludCBzaywgdWludDhfdCBzbmRpZCwgdWludDhfdCByY3ZpZCwgYm9vbCBhc3luYyxcbiBcdGRlbC5wcmVmaXggPSBERUZBVUxUX1RFU1RfUFJFRklYO1xuIFx0ZGVsLnNuZGlkID0gc25kaWQ7XG4gXHRkZWwucmN2aWQgPSByY3ZpZDtcbitcdGlmIChpZmluZGV4KSB7XG4rXHRcdGRlbC5rZXlmbGFncyA9IFRDUF9BT19LRVlGX0lGSU5ERVg7XG4rXHRcdGRlbC5pZmluZGV4ID0gaWZpbmRleDtcbitcdH1cbiBcbiBcdGlmIChjdXJyZW50X2tleSBcdTAwM2U9IDApIHtcbiBcdFx0ZGVsLnNldF9jdXJyZW50ID0gMTtcbkBAIC05NSw3ICsxMDAsOCBAQCBzdGF0aWMgaW50IHRlc3RfZGVsX2tleShpbnQgc2ssIHVpbnQ4X3Qgc25kaWQsIHVpbnQ4X3QgcmN2aWQsIGJvb2wgYXN5bmMsXG4gXG4gXHR0Y3BfYWRkcl90b19zb2NrYWRkcl9pbihcdTAwMjZzb2NrYWRkciwgXHUwMDI2dGhpc19pcF9kZXN0LCAwKTtcbiBcdGVyciA9IHRlc3RfZ2V0X29uZV9hbyhzaywgXHUwMDI2a2V5LCBcdTAwMjZzb2NrYWRkciwgc2l6ZW9mKHNvY2thZGRyKSxcbi1cdFx0XHQgICAgICBERUZBVUxUX1RFU1RfUFJFRklYLCBzbmRpZCwgcmN2aWQpO1xuK1x0XHRcdCAgICAgIERFRkFVTFRfVEVTVF9QUkVGSVgsIHNuZGlkLCByY3ZpZCxcbitcdFx0XHQgICAgICBkZWwua2V5ZmxhZ3MsIGRlbC5pZmluZGV4KTtcbiBcdGlmICghZXJyKVxuIFx0XHRyZXR1cm4gLUVFWElTVDtcbiBcdGlmIChlcnIgIT0gLUUyQklHKVxuQEAgLTExMiwxMiArMTE4LDEyIEBAIHN0YXRpYyBpbnQgdGVzdF9kZWxfa2V5KGludCBzaywgdWludDhfdCBzbmRpZCwgdWludDhfdCByY3ZpZCwgYm9vbCBhc3luYyxcbiB9XG4gXG4gc3RhdGljIHZvaWQgdHJ5X2RlbGV0ZV9rZXkoY2hhciAqdHN0X25hbWUsIGludCBzaywgdWludDhfdCBzbmRpZCwgdWludDhfdCByY3ZpZCxcbi1cdFx0XHQgICBib29sIGFzeW5jLCBpbnQgY3VycmVudF9rZXksIGludCBybmV4dF9rZXksXG4rXHRcdFx0ICAgaW50IGlmaW5kZXgsIGJvb2wgYXN5bmMsIGludCBjdXJyZW50X2tleSwgaW50IHJuZXh0X2tleSxcbiBcdFx0XHQgICBmYXVsdF90IGluailcbiB7XG4gXHRpbnQgZXJyO1xuIFxuLVx0ZXJyID0gdGVzdF9kZWxfa2V5KHNrLCBzbmRpZCwgcmN2aWQsIGFzeW5jLCBjdXJyZW50X2tleSwgcm5leHRfa2V5KTtcbitcdGVyciA9IHRlc3RfZGVsX2tleShzaywgc25kaWQsIHJjdmlkLCBpZmluZGV4LCBhc3luYywgY3VycmVudF9rZXksIHJuZXh0X2tleSk7XG4gXHRpZiAoKGVyciA9PSAtRUJVU1kgXHUwMDI2XHUwMDI2IGZhdWx0KEJVU1kpKSB8fCAoZXJyID09IC1FSU5WQUwgXHUwMDI2XHUwMDI2IGZhdWx0KENVUlJORVhUKSkpIHtcbiBcdFx0dGVzdF9vayhcIiVzOiBrZXkgZGVsZXRpb24gd2FzIHByZXZlbnRlZFwiLCB0c3RfbmFtZSk7XG4gXHRcdHJldHVybjtcbkBAIC0yMzYsMTUgKzI0MiwxNSBAQCBzdGF0aWMgdm9pZCBjaGVja19jbG9zZWRfc29ja2V0KHZvaWQpXG4gXHRpbnQgc2s7XG4gXG4gXHRzayA9IHByZXBhcmVfc2soXHUwMDI2dGhpc19pcF9kZXN0LCAyMDAsIDIwMCk7XG4tXHR0cnlfZGVsZXRlX2tleShcImNsb3NlZCBzb2NrZXQsIGRlbGV0ZSBhIGtleVwiLCBzaywgMjAwLCAyMDAsIDAsIC0xLCAtMSwgMCk7XG4tXHR0cnlfZGVsZXRlX2tleShcImNsb3NlZCBzb2NrZXQsIGRlbGV0ZSBhbGwga2V5c1wiLCBzaywgMTAwLCAxMDAsIDAsIC0xLCAtMSwgMCk7XG4rXHR0cnlfZGVsZXRlX2tleShcImNsb3NlZCBzb2NrZXQsIGRlbGV0ZSBhIGtleVwiLCBzaywgMjAwLCAyMDAsIDAsIDAsIC0xLCAtMSwgMCk7XG4rXHR0cnlfZGVsZXRlX2tleShcImNsb3NlZCBzb2NrZXQsIGRlbGV0ZSBhbGwga2V5c1wiLCBzaywgMTAwLCAxMDAsIDAsIDAsIC0xLCAtMSwgMCk7XG4gXHRjbG9zZShzayk7XG4gXG4gXHRzayA9IHByZXBhcmVfc2soXHUwMDI2dGhpc19pcF9kZXN0LCAyMDAsIDIwMCk7XG4gXHRpZiAodGVzdF9zZXRfa2V5KHNrLCAxMDAsIDIwMCkpXG4gXHRcdHRlc3RfZXJyb3IoXCJmYWlsZWQgdG8gc2V0IGN1cnJlbnQvcm5leHQga2V5c1wiKTtcbi1cdHRyeV9kZWxldGVfa2V5KFwiY2xvc2VkIHNvY2tldCwgZGVsZXRlIGN1cnJlbnQga2V5XCIsIHNrLCAxMDAsIDEwMCwgMCwgLTEsIC0xLCBGQVVMVF9CVVNZKTtcbi1cdHRyeV9kZWxldGVfa2V5KFwiY2xvc2VkIHNvY2tldCwgZGVsZXRlIHJuZXh0IGtleVwiLCBzaywgMjAwLCAyMDAsIDAsIC0xLCAtMSwgRkFVTFRfQlVTWSk7XG4rXHR0cnlfZGVsZXRlX2tleShcImNsb3NlZCBzb2NrZXQsIGRlbGV0ZSBjdXJyZW50IGtleVwiLCBzaywgMTAwLCAxMDAsIDAsIDAsIC0xLCAtMSwgRkFVTFRfQlVTWSk7XG4rXHR0cnlfZGVsZXRlX2tleShcImNsb3NlZCBzb2NrZXQsIGRlbGV0ZSBybmV4dCBrZXlcIiwgc2ssIDIwMCwgMjAwLCAwLCAwLCAtMSwgLTEsIEZBVUxUX0JVU1kpO1xuIFx0Y2xvc2Uoc2spO1xuIFxuIFx0c2sgPSBwcmVwYXJlX3NrKFx1MDAyNnRoaXNfaXBfZGVzdCwgMjAwLCAyMDApO1xuQEAgLTI1NCwxMCArMjYwLDEyIEBAIHN0YXRpYyB2b2lkIGNoZWNrX2Nsb3NlZF9zb2NrZXQodm9pZClcbiBcdGlmICh0ZXN0X2FkZF9rZXkoc2ssIFwiR2xvcnkgdG8gVWtyYWluZSFcIiwgdGhpc19pcF9kZXN0LFxuIFx0XHRcdCBERUZBVUxUX1RFU1RfUFJFRklYLCAxMiwgMTMpKVxuIFx0XHR0ZXN0X2Vycm9yKFwidGVzdF9hZGRfa2V5KClcIik7XG4tXHR0cnlfZGVsZXRlX2tleShcImNsb3NlZCBzb2NrZXQsIGRlbGV0ZSBhIGtleSArIHNldCBjdXJyZW50L3JuZXh0XCIsIHNrLCAxMDAsIDEwMCwgMCwgMTAsIDEzLCAwKTtcbi1cdHRyeV9kZWxldGVfa2V5KFwiY2xvc2VkIHNvY2tldCwgZm9yY2UtZGVsZXRlIGN1cnJlbnQga2V5XCIsIHNrLCAxMCwgMTEsIDAsIDIwMCwgLTEsIDApO1xuLVx0dHJ5X2RlbGV0ZV9rZXkoXCJjbG9zZWQgc29ja2V0LCBmb3JjZS1kZWxldGUgcm5leHQga2V5XCIsIHNrLCAxMiwgMTMsIDAsIC0xLCAyMDAsIDApO1xuLVx0dHJ5X2RlbGV0ZV9rZXkoXCJjbG9zZWQgc29ja2V0LCBkZWxldGUgY3VycmVudCtybmV4dCBrZXlcIiwgc2ssIDIwMCwgMjAwLCAwLCAtMSwgLTEsIEZBVUxUX0JVU1kpO1xuK1x0dHJ5X2RlbGV0ZV9rZXkoXCJjbG9zZWQgc29ja2V0LCBkZWxldGUgYSBrZXkgKyBzZXQgY3VycmVudC9ybmV4dFwiLCBzayxcbitcdFx0ICAgICAgIDEwMCwgMTAwLCAwLCAwLCAxMCwgMTMsIDApO1xuK1x0dHJ5X2RlbGV0ZV9rZXkoXCJjbG9zZWQgc29ja2V0LCBmb3JjZS1kZWxldGUgY3VycmVudCBrZXlcIiwgc2ssIDEwLCAxMSwgMCwgMCwgMjAwLCAtMSwgMCk7XG4rXHR0cnlfZGVsZXRlX2tleShcImNsb3NlZCBzb2NrZXQsIGZvcmNlLWRlbGV0ZSBybmV4dCBrZXlcIiwgc2ssIDEyLCAxMywgMCwgMCwgLTEsIDIwMCwgMCk7XG4rXHR0cnlfZGVsZXRlX2tleShcImNsb3NlZCBzb2NrZXQsIGRlbGV0ZSBjdXJyZW50K3JuZXh0IGtleVwiLCBzayxcbitcdFx0ICAgICAgIDIwMCwgMjAwLCAwLCAwLCAtMSwgLTEsIEZBVUxUX0JVU1kpO1xuIFx0Y2xvc2Uoc2spO1xuIFxuIFx0c2sgPSBwcmVwYXJlX3NrKFx1MDAyNnRoaXNfaXBfZGVzdCwgMjAwLCAyMDApO1xuQEAgLTI3Miw2ICsyODAsMTggQEAgc3RhdGljIHZvaWQgY2hlY2tfY2xvc2VkX3NvY2tldCh2b2lkKVxuIFx0XHRcdFx0ICB0aGlzX2lwX2Rlc3QsIERFRkFVTFRfVEVTVF9QUkVGSVgsXG4gXHRcdFx0XHQgIGZhbHNlLCB0cnVlLCAyMCwgMTAsIDApO1xuIFx0Y2xvc2Uoc2spO1xuK1xuK1x0aWYgKCFzaG91bGRfc2tpcF90ZXN0KFwiY2xvc2VkIHNvY2tldCwgYWRkICsgZGVsZXRlIFZSRi1zY29wZWQga2V5XCIsXG4rXHRcdFx0ICAgICAgS0NPTkZJR19ORVRfVlJGKSkge1xuK1x0XHRzayA9IHByZXBhcmVfc2soXHUwMDI2dGhpc19pcF9kZXN0LCAyMDAsIDIwMCk7XG4rXHRcdGlmICh0ZXN0X2FkZF9rZXlfdnJmKHNrLCBTRUNPTkRfUEFTU1dPUkQsIFRDUF9BT19LRVlGX0lGSU5ERVgsXG4rXHRcdFx0XHQgICAgIHRoaXNfaXBfZGVzdCwgREVGQVVMVF9URVNUX1BSRUZJWCxcbitcdFx0XHRcdCAgICAgdGVzdF92cmZfaWZpbmRleCwgMjAxLCAyMDEpKVxuK1x0XHRcdHRlc3RfZXJyb3IoXCJ0ZXN0X2FkZF9rZXlfdnJmKClcIik7XG4rXHRcdHRyeV9kZWxldGVfa2V5KFwiY2xvc2VkIHNvY2tldCwgYWRkICsgZGVsZXRlIFZSRi1zY29wZWQga2V5XCIsIHNrLCAyMDEsIDIwMSxcbitcdFx0XHQgICAgICAgdGVzdF92cmZfaWZpbmRleCwgMCwgLTEsIC0xLCAwKTtcbitcdFx0Y2xvc2Uoc2spO1xuK1x0fVxuIH1cbiBcbiBzdGF0aWMgdm9pZCBhc3NlcnRfbm9fY3VycmVudF9ybmV4dChjb25zdCBjaGFyICp0c3RfbXNnLCBpbnQgc2spXG5AQCAtMzIyLDggKzM0Miw4IEBAIHN0YXRpYyB2b2lkIGNoZWNrX2xpc3Rlbl9zb2NrZXQodm9pZClcbiBcdGludCBzaywgZXJyO1xuIFxuIFx0c2sgPSBwcmVwYXJlX2xzayhcdTAwMjZ0aGlzX2lwX2Rlc3QsIDIwMCwgMjAwKTtcbi1cdHRyeV9kZWxldGVfa2V5KFwibGlzdGVuIHNvY2tldCwgZGVsZXRlIGEga2V5XCIsIHNrLCAyMDAsIDIwMCwgMCwgLTEsIC0xLCAwKTtcbi1cdHRyeV9kZWxldGVfa2V5KFwibGlzdGVuIHNvY2tldCwgZGVsZXRlIGFsbCBrZXlzXCIsIHNrLCAxMDAsIDEwMCwgMCwgLTEsIC0xLCAwKTtcbitcdHRyeV9kZWxldGVfa2V5KFwibGlzdGVuIHNvY2tldCwgZGVsZXRlIGEga2V5XCIsIHNrLCAyMDAsIDIwMCwgMCwgMCwgLTEsIC0xLCAwKTtcbitcdHRyeV9kZWxldGVfa2V5KFwibGlzdGVuIHNvY2tldCwgZGVsZXRlIGFsbCBrZXlzXCIsIHNrLCAxMDAsIDEwMCwgMCwgMCwgLTEsIC0xLCAwKTtcbiBcdGNsb3NlKHNrKTtcbiBcbiBcdHNrID0gcHJlcGFyZV9sc2soXHUwMDI2dGhpc19pcF9kZXN0LCAyMDAsIDIwMCk7XG5AQCAtMzQ1LDggKzM2NSwxMCBAQCBzdGF0aWMgdm9pZCBjaGVja19saXN0ZW5fc29ja2V0KHZvaWQpXG4gXHRpZiAobGlzdGVuKHNrLCAxMCkpXG4gXHRcdHRlc3RfZXJyb3IoXCJsaXN0ZW4oKVwiKTtcbiBcdGFzc2VydF9ub19jdXJyZW50X3JuZXh0KFwibGlzdGVuKCkgYWZ0ZXIgY3VycmVudC9ybmV4dCBrZXlzIHNldFwiLCBzayk7XG4tXHR0cnlfZGVsZXRlX2tleShcImxpc3RlbiBzb2NrZXQsIGRlbGV0ZSBjdXJyZW50IGtleSBmcm9tIGJlZm9yZSBsaXN0ZW4oKVwiLCBzaywgMTAwLCAxMDAsIDAsIC0xLCAtMSwgRkFVTFRfRklYTUUpO1xuLVx0dHJ5X2RlbGV0ZV9rZXkoXCJsaXN0ZW4gc29ja2V0LCBkZWxldGUgcm5leHQga2V5IGZyb20gYmVmb3JlIGxpc3RlbigpXCIsIHNrLCAyMDAsIDIwMCwgMCwgLTEsIC0xLCBGQVVMVF9GSVhNRSk7XG4rXHR0cnlfZGVsZXRlX2tleShcImxpc3RlbiBzb2NrZXQsIGRlbGV0ZSBjdXJyZW50IGtleSBmcm9tIGJlZm9yZSBsaXN0ZW4oKVwiLCBzayxcbitcdFx0ICAgICAgIDEwMCwgMTAwLCAwLCAwLCAtMSwgLTEsIEZBVUxUX0ZJWE1FKTtcbitcdHRyeV9kZWxldGVfa2V5KFwibGlzdGVuIHNvY2tldCwgZGVsZXRlIHJuZXh0IGtleSBmcm9tIGJlZm9yZSBsaXN0ZW4oKVwiLCBzayxcbitcdFx0ICAgICAgIDIwMCwgMjAwLCAwLCAwLCAtMSwgLTEsIEZBVUxUX0ZJWE1FKTtcbiBcdGNsb3NlKHNrKTtcbiBcbiBcdGFzc2VydF9ub190Y3BfcmVwYWlyKCk7XG5AQCAtMzU5LDEzICszODEsMTMgQEAgc3RhdGljIHZvaWQgY2hlY2tfbGlzdGVuX3NvY2tldCh2b2lkKVxuIFx0XHRcdCBERUZBVUxUX1RFU1RfUFJFRklYLCAxMiwgMTMpKVxuIFx0XHR0ZXN0X2Vycm9yKFwidGVzdF9hZGRfa2V5KClcIik7XG4gXHR0cnlfZGVsZXRlX2tleShcImxpc3RlbiBzb2NrZXQsIGRlbGV0ZSBhIGtleSArIHNldCBjdXJyZW50L3JuZXh0XCIsIHNrLFxuLVx0XHQgICAgICAgMTAwLCAxMDAsIDAsIDEwLCAxMywgRkFVTFRfQ1VSUk5FWFQpO1xuK1x0XHQgICAgICAgMTAwLCAxMDAsIDAsIDAsIDEwLCAxMywgRkFVTFRfQ1VSUk5FWFQpO1xuIFx0dHJ5X2RlbGV0ZV9rZXkoXCJsaXN0ZW4gc29ja2V0LCBmb3JjZS1kZWxldGUgY3VycmVudCBrZXlcIiwgc2ssXG4tXHRcdCAgICAgICAxMCwgMTEsIDAsIDIwMCwgLTEsIEZBVUxUX0NVUlJORVhUKTtcbitcdFx0ICAgICAgIDEwLCAxMSwgMCwgMCwgMjAwLCAtMSwgRkFVTFRfQ1VSUk5FWFQpO1xuIFx0dHJ5X2RlbGV0ZV9rZXkoXCJsaXN0ZW4gc29ja2V0LCBmb3JjZS1kZWxldGUgcm5leHQga2V5XCIsIHNrLFxuLVx0XHQgICAgICAgMTIsIDEzLCAwLCAtMSwgMjAwLCBGQVVMVF9DVVJSTkVYVCk7XG4rXHRcdCAgICAgICAxMiwgMTMsIDAsIDAsIC0xLCAyMDAsIEZBVUxUX0NVUlJORVhUKTtcbiBcdHRyeV9kZWxldGVfa2V5KFwibGlzdGVuIHNvY2tldCwgZGVsZXRlIGEga2V5XCIsIHNrLFxuLVx0XHQgICAgICAgMjAwLCAyMDAsIDAsIC0xLCAtMSwgMCk7XG4rXHRcdCAgICAgICAyMDAsIDIwMCwgMCwgMCwgLTEsIC0xLCAwKTtcbiBcdGNsb3NlKHNrKTtcbiBcbiBcdHNrID0gcHJlcGFyZV9sc2soXHUwMDI2dGhpc19pcF9kZXN0LCAyMDAsIDIwMCk7XG5AQCAtMTEzMSw3ICsxMTUzLDYgQEAgc3RhdGljIHZvaWQgY2hlY2tfZXN0YWJsaXNoZWRfc29ja2V0KHZvaWQpXG4ge1xuIFx0dW5zaWduZWQgaW50IHBvcnQgPSB0ZXN0X3NlcnZlcl9wb3J0O1xuIFxuLVx0c2V0dXBfdnJmcygpO1xuIFx0dHJ5X2NsaWVudF9ydW4oXCJjbGllbnQ6IENoZWNrIGN1cnJlbnQvcm5leHQga2V5cyB1bnNldCBiZWZvcmUgY29ubmVjdCgpXCIsXG4gXHRcdCAgICAgICBwb3J0KyssIDIwLCAtMSwgLTEpO1xuIFx0dHJ5X2NsaWVudF9ydW4oXCJjbGllbnQ6IENoZWNrIGN1cnJlbnQvcm5leHQga2V5cyBzZXQgYmVmb3JlIGNvbm5lY3QoKVwiLFxuQEAgLTExNTAsNiArMTE3MSw3IEBAIHN0YXRpYyB2b2lkICpjbGllbnRfZm4odm9pZCAqYXJnKVxuIHtcbiBcdGlmIChpbmV0X3B0b24oVEVTVF9GQU1JTFksIFRFU1RfV1JPTkdfSVAsIFx1MDAyNndyb25nX2FkZHIpICE9IDEpXG4gXHRcdHRlc3RfZXJyb3IoXCJDYW4ndCBjb252ZXJ0IGlwIGFkZHJlc3MgJXNcIiwgVEVTVF9XUk9OR19JUCk7XG4rXHRzZXR1cF92cmZzKCk7XG4gXHRjaGVja19jbG9zZWRfc29ja2V0KCk7XG4gXHRjaGVja19saXN0ZW5fc29ja2V0KCk7XG4gXHRjaGVja19lc3RhYmxpc2hlZF9zb2NrZXQoKTtcbkBAIC0xMTU4LDYgKzExODAsNiBAQCBzdGF0aWMgdm9pZCAqY2xpZW50X2ZuKHZvaWQgKmFyZylcbiBcbiBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIHtcbi1cdHRlc3RfaW5pdCgxMjEsIHNlcnZlcl9mbiwgY2xpZW50X2ZuKTtcbitcdHRlc3RfaW5pdCgxMjIsIHNlcnZlcl9mbiwgY2xpZW50X2ZuKTtcbiBcdHJldHVybiAwO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9hb2xpYi5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvYW9saWIuaFxuaW5kZXggZWJiMjg5OWMxMmZlMC4uNTNiZTE3NDQyMzdlZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vbGliL2FvbGliLmhcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vbGliL2FvbGliLmhcbkBAIC00MDQsNyArNDA0LDggQEAgc3RhdGljIGlubGluZSBpbnQgdGVzdF9wcmVwYXJlX2RlZl9rZXkoc3RydWN0IHRjcF9hb19hZGQgKmFvLFxuIFxuIGV4dGVybiBpbnQgdGVzdF9nZXRfb25lX2FvKGludCBzaywgc3RydWN0IHRjcF9hb19nZXRzb2Nrb3B0ICpvdXQsXG4gXHRcdFx0ICAgdm9pZCAqYWRkciwgc2l6ZV90IGFkZHJfc3osXG4tXHRcdFx0ICAgdWludDhfdCBwcmVmaXgsIHVpbnQ4X3Qgc25kaWQsIHVpbnQ4X3QgcmN2aWQpO1xuK1x0XHRcdCAgIHVpbnQ4X3QgcHJlZml4LCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkLFxuK1x0XHRcdCAgIHVpbnQ4X3Qga2V5ZmxhZ3MsIGludCBpZmluZGV4KTtcbiBleHRlcm4gaW50IHRlc3RfZ2V0X2FvX2luZm8oaW50IHNrLCBzdHJ1Y3QgdGNwX2FvX2luZm9fb3B0ICpvdXQpO1xuIGV4dGVybiBpbnQgdGVzdF9zZXRfYW9faW5mbyhpbnQgc2ssIHN0cnVjdCB0Y3BfYW9faW5mb19vcHQgKmluKTtcbiBleHRlcm4gaW50IHRlc3RfY21wX2dldHNvY2tvcHRfc2V0c29ja29wdChjb25zdCBzdHJ1Y3QgdGNwX2FvX2FkZCAqYSxcbkBAIC00MTgsNyArNDE5LDggQEAgc3RhdGljIGlubGluZSBpbnQgdGVzdF92ZXJpZnlfc29ja2V0X2tleShpbnQgc2ssIHN0cnVjdCB0Y3BfYW9fYWRkICprZXkpXG4gXHRpbnQgZXJyO1xuIFxuIFx0ZXJyID0gdGVzdF9nZXRfb25lX2FvKHNrLCBcdTAwMjZrZXkyLCBcdTAwMjZrZXktXHUwMDNlYWRkciwgc2l6ZW9mKGtleS1cdTAwM2VhZGRyKSxcbi1cdFx0XHQgICAgICBrZXktXHUwMDNlcHJlZml4LCBrZXktXHUwMDNlc25kaWQsIGtleS1cdTAwM2VyY3ZpZCk7XG4rXHRcdFx0ICAgICAga2V5LVx1MDAzZXByZWZpeCwga2V5LVx1MDAzZXNuZGlkLCBrZXktXHUwMDNlcmN2aWQsXG4rXHRcdFx0ICAgICAga2V5LVx1MDAzZWtleWZsYWdzLCBrZXktXHUwMDNlaWZpbmRleCk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vbGliL3NvY2suYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vbGliL3NvY2suY1xuaW5kZXggZWY4ZTkwMzFkNDdhMy4uMmU3YjA2YTFhMTU2NyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vbGliL3NvY2suY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvc29jay5jXG5AQCAtMjUyLDcgKzI1Miw3IEBAIHN0YXRpYyBpbnQgdGVzdF9nZXRfYW9fa2V5c19ucihpbnQgc2spXG4gXG4gaW50IHRlc3RfZ2V0X29uZV9hbyhpbnQgc2ssIHN0cnVjdCB0Y3BfYW9fZ2V0c29ja29wdCAqb3V0LFxuIFx0XHR2b2lkICphZGRyLCBzaXplX3QgYWRkcl9zeiwgdWludDhfdCBwcmVmaXgsXG4tXHRcdHVpbnQ4X3Qgc25kaWQsIHVpbnQ4X3QgcmN2aWQpXG4rXHRcdHVpbnQ4X3Qgc25kaWQsIHVpbnQ4X3QgcmN2aWQsIHVpbnQ4X3Qga2V5ZmxhZ3MsIGludCBpZmluZGV4KVxuIHtcbiBcdHN0cnVjdCB0Y3BfYW9fZ2V0c29ja29wdCB0bXAgPSB7fTtcbiBcdHNvY2tsZW5fdCB0bXBfc3ogPSBzaXplb2YodG1wKTtcbkBAIC0yNjIsNiArMjYyLDggQEAgaW50IHRlc3RfZ2V0X29uZV9hbyhpbnQgc2ssIHN0cnVjdCB0Y3BfYW9fZ2V0c29ja29wdCAqb3V0LFxuIFx0dG1wLnByZWZpeCA9IHByZWZpeDtcbiBcdHRtcC5zbmRpZCAgPSBzbmRpZDtcbiBcdHRtcC5yY3ZpZCAgPSByY3ZpZDtcbitcdHRtcC5rZXlmbGFncyA9IGtleWZsYWdzO1xuK1x0dG1wLmlmaW5kZXggPSBpZmluZGV4O1xuIFx0dG1wLm5rZXlzICA9IDE7XG4gXG4gXHRyZXQgPSBnZXRzb2Nrb3B0KHNrLCBJUFBST1RPX1RDUCwgVENQX0FPX0dFVF9LRVlTLCBcdTAwMjZ0bXAsIFx1MDAyNnRtcF9zeik7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNTo1Nzo1MS42OTA4MzU2ODJaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQ0MzAzNjU5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBGdXp6aW5nIFNlc3Npb24gSnVzdGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggbGFuZGVkLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJEb2VzIHRoaXMgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHJ1bj9cIiBJdCBtb2RpZmllcyBgbmV0L2lwdjQvdGNwX2FvLmNgIGFuZCBhIGZldyBzZWxmdGVzdHMsIHdoaWNoIGlzIGEga2V5IGluZGljYXRvci4gTGV0J3MgZGlnIGluLlxuXG5UaGUgZGlmZiBpbiBgbmV0L2lwdjQvdGNwX2FvLmNgIGlzIHByZXR0eSBjb25jaXNlLiBIbW0sIGl0IHNlZW1zIHRvIGFkZCBhIGNoZWNrIGZvciBgVENQX0FPX0tFWUZfSUZJTkRFWGAgYW5kIGFzc2lnbnMgYGNtZC5pZmluZGV4YCB0byBhIG5ldyB2YXJpYWJsZSBgbDNpbmRleGAuIFJpZ2h0LCB0aGlzIGBjbWRgIHZhcmlhYmxlLi4uIHdoZXJlIGRvZXMgdGhhdCBjb21lIGZyb20/IEl0J3MgYWxtb3N0IGNlcnRhaW5seSBhIHN0cnVjdCBiZWluZyBwYXNzZWQgaW4gZnJvbSB1c2Vyc3BhY2UgdmlhIGBzZXRzb2Nrb3B0YC4gSSBzaG91bGQgY2hlY2sgdGhlIGRlZmluaXRpb24gYW5kIHVzYWdlIG9mIGB0Y3BfYW9fZGVsX2NtZGAgd2l0aGluIHRoZSBzYW1lIGZpbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCdzIGJlaW5nIHBhc3NlZCBpbiBhbmQgaG93IHRoaXMgbmV3IGBpZmAgc3RhdGVtZW50IGludGVyYWN0cyB3aXRoIHRoZSBleGlzdGluZyBsb2dpYywgdG8gZ2V0IGEgaGFuZGxlIG9uIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIExldCdzIHNlZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MzkyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjkzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTU6NTc6NTcuMTMzODc2MjkyWiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDUwNjI0NjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNwX2FvX2RlbF9jbWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvdGNwX2FvLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvdGNwX2FvLmM9OTkwPXRjcF9pbmJvdW5kX2FvX2hhc2goc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvdGNwX2FvLmMtMTA1NS1cXHRcXHRcXHRpZiAoa2V5KVxcbm5ldC9pcHY0L3RjcF9hby5jOjEwNTY6XFx0XFx0XFx0XFx0LyogcGFpcnMgd2l0aCB0Y3BfYW9fZGVsX2NtZCAqL1xcbm5ldC9pcHY0L3RjcF9hby5jLTEwNTctXFx0XFx0XFx0XFx0V1JJVEVfT05DRShpbmZvLVxcdTAwM2VjdXJyZW50X2tleSwga2V5KTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9hby5jLTEwNjgtXFx0ICogLSByZXF1ZXN0IHNvY2tldHMgd291bGQgcmFjZSBvbiB0aG9zZSBrZXkgcG9pbnRlcnNcXG5uZXQvaXB2NC90Y3BfYW8uYzoxMDY5OlxcdCAqIC0gdGNwX2FvX2RlbF9jbWQoKSBhbGxvd3MgYXN5bmMga2V5IHJlbW92YWxcXG5uZXQvaXB2NC90Y3BfYW8uYy0xMDcwLVxcdCAqL1xcbi0tXFxubmV0L2lwdjQvdGNwX2FvLmM9MTc0Nj1zdGF0aWMgaW50IHRjcF9hb19kZWxldGVfa2V5KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRjcF9hb19pbmZvICphb19pbmZvLFxcbi0tXFxubmV0L2lwdjQvdGNwX2FvLmMtMTc5OS0jZGVmaW5lIFRDUF9BT19ERUxfS0VZRl9BTEwgKFRDUF9BT19LRVlGX0lGSU5ERVgpXFxubmV0L2lwdjQvdGNwX2FvLmM6MTgwMDpzdGF0aWMgaW50IHRjcF9hb19kZWxfY21kKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgc2hvcnQgaW50IGZhbWlseSxcXG5uZXQvaXB2NC90Y3BfYW8uYy0xODAxLVxcdFxcdFxcdCAgc29ja3B0cl90IG9wdHZhbCwgaW50IG9wdGxlbilcXG4tLVxcbm5ldC9pcHY0L3RjcF9hby5jPTIwMzg9aW50IHRjcF9wYXJzZV9hbyhzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHVuc2lnbmVkIHNob3J0IGludCBmYW1pbHksXFxuLS1cXG5uZXQvaXB2NC90Y3BfYW8uYy0yMDQ3LVxcdGNhc2UgVENQX0FPX0RFTF9LRVk6XFxubmV0L2lwdjQvdGNwX2FvLmM6MjA0ODpcXHRcXHRyZXR1cm4gdGNwX2FvX2RlbF9jbWQoc2ssIGZhbWlseSwgb3B0dmFsLCBvcHRsZW4pO1xcbm5ldC9pcHY0L3RjcF9hby5jLTIwNDktXFx0Y2FzZSBUQ1BfQU9fSU5GTzpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTU6NTc6NTcuMjc4OTU3OTM4WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNTAzNzE2MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBgdGNwX2FvX2RlbF9jbWRgIEZ1bmN0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBndXRzIG9mIHRoZSBUQ1AgQXV0aGVudGljYXRpb24gT3B0aW9uIChUQ1AgQU8pIGltcGxlbWVudGF0aW9uLiBJJ20gZm9jdXNpbmcgb24gdGhlIGB0Y3BfYW9fZGVsX2NtZGAgZnVuY3Rpb24gd2l0aGluIGBuZXQvaXB2NC90Y3BfYW8uY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBUQ1AgQU8ga2V5cyBhcmUgcmVtb3ZlZCBvciBpbnZhbGlkYXRlZCwgYXMgdGhpcyBpcyBjcnVjaWFsIGZvciBzZWN1cml0eSBhbmQgc2Vzc2lvbiBtYW5hZ2VtZW50LiBJJ20gYXNzdW1pbmcgdGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgaGFuZGxpbmcgdGhlIGRlbGV0aW9uIG9yIGludmFsaWRhdGlvbiBvZiBhdXRoZW50aWNhdGlvbiBrZXlzIGFzc29jaWF0ZWQgd2l0aCBhIFRDUCBjb25uZWN0aW9uLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGtleSBtYW5hZ2VtZW50IHN0cnVjdHVyZXMsIHdoYXQgbG9ja2luZyBtZWNoYW5pc21zIGl0IGVtcGxveXMgdG8gZW5zdXJlIHRocmVhZCBzYWZldHkgKGxpa2VseSBzcGlubG9ja3Mgb3IgcmVhZC93cml0ZSBsb2NrcywgZ2l2ZW4gaXRzIHBvdGVudGlhbCBmb3IgY29uY3VycmVudCBhY2Nlc3MpLCBhbmQgaG93IGl0IGNsZWFucyB1cCBhbnkgYXNzb2NpYXRlZCByZXNvdXJjZXMuIEFyZSB0aGVyZSBhbnkgcmVmZXJlbmNlIGNvdW50cyBpbnZvbHZlZD8gV2hhdCBoYXBwZW5zIGlmIHRoZSBrZXkgZGVsZXRpb24gZmFpbHMgZm9yIHNvbWUgcmVhc29uPyBEb2VzIHRoaXMgdHJpZ2dlciBhbnkgZXJyb3IgY2FsbGJhY2tzIG9yIGxvZ2dpbmc/IEknbGwgYWxzbyBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLCBsaWtlIHJhY2UgY29uZGl0aW9ucyBvciBtZW1vcnkgbGVha3MsIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGVsZXRpb24gcHJvY2VzcyBpdHNlbGYuIFRoaXMgZnVuY3Rpb24gaXMgY3JpdGljYWwgZm9yIG1haW50YWluaW5nIHRoZSBpbnRlZ3JpdHkgYW5kIHNlY3VyaXR5IG9mIHRoZSBBTyBzeXN0ZW0sIHNvIGEgdGhvcm91Z2ggdW5kZXJzdGFuZGluZyBpcyBhYnNvbHV0ZWx5IGVzc2VudGlhbC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzQ0MSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE1OjU4OjAxLjMyOTMzMjQ4MloiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTg4OTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvdGNwX2FvLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTc5NSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTc5NTpcXHRcXHRobGlzdF9hZGRfaGVhZF9yY3UoXFx1MDAyNmtleS1cXHUwMDNlbm9kZSwgXFx1MDAyNmFvX2luZm8tXFx1MDAzZWhlYWQpO1xcbjE3OTY6XFx0XFx0cmV0dXJuIGVycjtcXG4xNzk3OlxcdH1cXG4xNzk4OlxcdFxcbjE3OTk6XFx0I2RlZmluZSBUQ1BfQU9fREVMX0tFWUZfQUxMIChUQ1BfQU9fS0VZRl9JRklOREVYKVxcbjE4MDA6XFx0c3RhdGljIGludCB0Y3BfYW9fZGVsX2NtZChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIHNob3J0IGludCBmYW1pbHksXFxuMTgwMTpcXHRcXHRcXHRcXHQgIHNvY2twdHJfdCBvcHR2YWwsIGludCBvcHRsZW4pXFxuMTgwMjpcXHR7XFxuMTgwMzpcXHRcXHRzdHJ1Y3QgdGNwX2FvX2tleSAqa2V5LCAqbmV3X2N1cnJlbnQgPSBOVUxMLCAqbmV3X3JuZXh0ID0gTlVMTDtcXG4xODA0OlxcdFxcdGludCBlcnIsIGFkZHJfbGVuLCBsM2luZGV4ID0gMDtcXG4xODA1OlxcdFxcdHN0cnVjdCB0Y3BfYW9faW5mbyAqYW9faW5mbztcXG4xODA2OlxcdFxcdHVuaW9uIHRjcF9hb19hZGRyICphZGRyO1xcbjE4MDc6XFx0XFx0c3RydWN0IHRjcF9hb19kZWwgY21kO1xcbjE4MDg6XFx0XFx0X191OCBwcmVmaXg7XFxuMTgwOTpcXHRcXHR1MTYgcG9ydDtcXG4xODEwOlxcdFxcbjE4MTE6XFx0XFx0aWYgKG9wdGxlbiBcXHUwMDNjIHNpemVvZihjbWQpKVxcbjE4MTI6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTgxMzpcXHRcXG4xODE0OlxcdFxcdGVyciA9IGNvcHlfc3RydWN0X2Zyb21fc29ja3B0cihcXHUwMDI2Y21kLCBzaXplb2YoY21kKSwgb3B0dmFsLCBvcHRsZW4pO1xcbjE4MTU6XFx0XFx0aWYgKGVycilcXG4xODE2OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuMTgxNzpcXHRcXG4xODE4OlxcdFxcdGlmIChjbWQucmVzZXJ2ZWQgIT0gMCB8fCBjbWQucmVzZXJ2ZWQyICE9IDApXFxuMTgxOTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xODIwOlxcdFxcbjE4MjE6XFx0XFx0aWYgKGNtZC5zZXRfY3VycmVudCB8fCBjbWQuc2V0X3JuZXh0KSB7XFxuMTgyMjpcXHRcXHRcXHRpZiAoIXRjcF9hb19jYW5fc2V0X2N1cnJlbnRfcm5leHQoc2spKVxcbjE4MjM6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTgyNDpcXHRcXHR9XFxuMTgyNTpcXHRcXG4xODI2OlxcdFxcdGlmIChjbWQua2V5ZmxhZ3MgXFx1MDAyNiB+VENQX0FPX0RFTF9LRVlGX0FMTClcXG4xODI3OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE4Mjg6XFx0XFxuMTgyOTpcXHRcXHQvKiBObyBzYW5pdHkgY2hlY2sgZm9yIFRDUF9BT19LRVlGX0lGSU5ERVggYXMgaWYgYSBWUkZcXG4xODMwOlxcdFxcdCAqIHdhcyBkZXN0cm95ZWQsIHRoZXJlIHN0aWxsIHNob3VsZCBiZSBhIHdheSB0byBkZWxldGUga2V5cyxcXG4xODMxOlxcdFxcdCAqIHRoYXQgd2VyZSBib3VuZCB0byB0aGF0IGwzaW50Zi4gU28sIGZhaWwgbGF0ZSBhdCBsb29rdXAgc3RhZ2VcXG4xODMyOlxcdFxcdCAqIGlmIHRoZXJlIGlzIG5vIGtleSBmb3IgdGhhdCBpZmluZGV4LlxcbjE4MzM6XFx0XFx0ICovXFxuMTgzNDpcXHRcXHRpZiAoY21kLmlmaW5kZXggXFx1MDAyNlxcdTAwMjYgIShjbWQua2V5ZmxhZ3MgXFx1MDAyNiBUQ1BfQU9fS0VZRl9JRklOREVYKSlcXG4xODM1OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE4MzY6XFx0XFxuMTgzNzpcXHRcXHRpZiAoY21kLmtleWZsYWdzIFxcdTAwMjYgVENQX0FPX0tFWUZfSUZJTkRFWClcXG4xODM4OlxcdFxcdFxcdGwzaW5kZXggPSBjbWQuaWZpbmRleDtcXG4xODM5OlxcdFxcbjE4NDA6XFx0XFx0YW9faW5mbyA9IHNldHNvY2tvcHRfYW9faW5mbyhzayk7XFxuMTg0MTpcXHRcXHRpZiAoSVNfRVJSKGFvX2luZm8pKVxcbjE4NDI6XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIoYW9faW5mbyk7XFxuMTg0MzpcXHRcXHRpZiAoIWFvX2luZm8pXFxuMTg0NDpcXHRcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTU6NTg6MDEuMzI5NTMzNDYyWiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4NTY1MTEyNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUQ1AgQU8gS2V5IEZsYWcgTG9naWMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2guIEkgc2VlIHRoZXkndmUgYWRkZWQgYSBjaGVjazogYGlmIChjbWQua2V5ZmxhZ3MgXHUwMDI2IFRDUF9BT19LRVlGX0lGSU5ERVgpYC4gSXQgc2VlbXMgbGlrZSB0aGV5J3JlIGxvb2tpbmcgZm9yIGEgc3BlY2lmaWMgZmxhZywgYFRDUF9BT19LRVlGX0lGSU5ERVhgLCB3aXRoaW4gYSBga2V5ZmxhZ3NgIGZpZWxkIG9mIGEgc3RydWN0dXJlIGNhbGxlZCBgY21kYC4gUmlnaHQsIGBjbWRgIGlzIHBvcHVsYXRlZCBieSBgY29weV9zdHJ1Y3RfZnJvbV9zb2NrcHRyKFx1MDAyNmNtZCwgc2l6ZW9mKGNtZCksIG9wdHZhbCwgb3B0bGVuKTtgLiBJIHJlbWVtYmVyIHRoaXMgZnVuY3Rpb24uIEl0IGNvcGllcyBkYXRhIGZyb20gdXNlciBzcGFjZS4gSXQgaGFuZGxlcyBjYXNlcyB3aGVyZSB0aGUgdXNlci1wcm92aWRlZCBzdHJ1Y3R1cmUgaXMgZWl0aGVyIHNtYWxsZXIgb3IgbGFyZ2VyIHRoYW4gdGhlIGtlcm5lbCdzIGRlZmluaXRpb24uIFplcm8tcGFkZGluZyBpbiB0aGUgZmlyc3QgY2FzZSwgemVyby1jaGVja2luZyB0aGUgZXh0cmEgYnl0ZXMgaW4gdGhlIHNlY29uZC4gU28sIGFzc3VtaW5nIHRoZSB1c2VyIHNwYWNlIHN0cnVjdCBpcyB3ZWxsLWZvcm1lZCwgYGNtZGAgaXMgZnVsbHkgaW5pdGlhbGl6ZWQsIHdoaWNoIGlzIGNydWNpYWwuXG5cbk5vdywgYGwzaW5kZXhgIGlzIGEgbG9jYWwgdmFyaWFibGUsIGluaXRpYWxpemVkIHRvIHplcm86IGBpbnQgZXJyLCBhZGRyX2xlbiwgbDNpbmRleCA9IDA7YC4gT2theSwgYW5kIHRoZW4gbGF0ZXIgb24sIHRoZXkgdXNlIGBsM2luZGV4YCBpbiBgdGNwX2FvX2RlbF9jbWRgLiBUaGF0J3MgdGhlIGtleS4gV2hlcmUgZG9lcyB0aGlzIHZhbHVlIGFjdHVhbGx5IGdldCAqdXNlZCo/IEkgbmVlZCB0byB0cmFjZSB0aGlzIHZhcmlhYmxlLiBMZXQncyBkaWcgZGVlcGVyIGFuZCBzZWUgZXhhY3RseSBob3cgYGwzaW5kZXhgIGlzIGVtcGxveWVkIGRvd24gdGhlIGxpbmUuIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbiBvZiB0aGlzIGZsYWcgYW5kIGhvdyBpdCdzIGluZmx1ZW5jaW5nIHRoZSBuZXR3b3JrIHN0YWNrIGJlaGF2aW9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NTcwLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTU6NTg6MDYuMTg2MDQ4OTQyWiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MzU2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC90Y3BfYW8uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODQ1LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxODQ1OlxcdFxcbjE4NDY6XFx0XFx0LyogRm9yIHNvY2tldHMgaW4gVENQX0NMT1NFRCBpdCdzIHBvc3NpYmxlIHNldCBrZXlzIHRoYXQgYXJlbid0XFxuMTg0NzpcXHRcXHQgKiBtYXRjaGluZyB0aGUgZnV0dXJlIHBlZXIgKGFkZHJlc3MvVlJGL2V0YyksXFxuMTg0ODpcXHRcXHQgKiB0Y3BfYW9fY29ubmVjdF9pbml0KCkgd2lsbCBjaG9vc2UgYSBjb3JyZWN0IG1hdGNoaW5nIE1LVFxcbjE4NDk6XFx0XFx0ICogaWYgdGhlcmUncyBhbnkuXFxuMTg1MDpcXHRcXHQgKi9cXG4xODUxOlxcdFxcdGlmIChjbWQuc2V0X2N1cnJlbnQpIHtcXG4xODUyOlxcdFxcdFxcdG5ld19jdXJyZW50ID0gdGNwX2FvX2VzdGFibGlzaGVkX2tleShzaywgYW9faW5mbywgY21kLmN1cnJlbnRfa2V5LCAtMSk7XFxuMTg1MzpcXHRcXHRcXHRpZiAoIW5ld19jdXJyZW50KVxcbjE4NTQ6XFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuMTg1NTpcXHRcXHR9XFxuMTg1NjpcXHRcXHRpZiAoY21kLnNldF9ybmV4dCkge1xcbjE4NTc6XFx0XFx0XFx0bmV3X3JuZXh0ID0gdGNwX2FvX2VzdGFibGlzaGVkX2tleShzaywgYW9faW5mbywgLTEsIGNtZC5ybmV4dCk7XFxuMTg1ODpcXHRcXHRcXHRpZiAoIW5ld19ybmV4dClcXG4xODU5OlxcdFxcdFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbjE4NjA6XFx0XFx0fVxcbjE4NjE6XFx0XFx0aWYgKGNtZC5kZWxfYXN5bmMgXFx1MDAyNlxcdTAwMjYgc2stXFx1MDAzZXNrX3N0YXRlICE9IFRDUF9MSVNURU4pXFxuMTg2MjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xODYzOlxcdFxcbjE4NjQ6XFx0XFx0aWYgKGZhbWlseSA9PSBBRl9JTkVUKSB7XFxuMTg2NTpcXHRcXHRcXHRzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilcXHUwMDI2Y21kLmFkZHI7XFxuMTg2NjpcXHRcXG4xODY3OlxcdFxcdFxcdGFkZHIgPSAodW5pb24gdGNwX2FvX2FkZHIgKilcXHUwMDI2c2luLVxcdTAwM2VzaW5fYWRkcjtcXG4xODY4OlxcdFxcdFxcdGFkZHJfbGVuID0gc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKTtcXG4xODY5OlxcdFxcdFxcdHBvcnQgPSBudG9ocyhzaW4tXFx1MDAzZXNpbl9wb3J0KTtcXG4xODcwOlxcdFxcdH0gZWxzZSB7XFxuMTg3MTpcXHRcXHRcXHRzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilcXHUwMDI2Y21kLmFkZHI7XFxuMTg3MjpcXHRcXHRcXHRzdHJ1Y3QgaW42X2FkZHIgKmFkZHI2ID0gXFx1MDAyNnNpbjYtXFx1MDAzZXNpbjZfYWRkcjtcXG4xODczOlxcdFxcbjE4NzQ6XFx0XFx0XFx0aWYgKGlwdjZfYWRkcl92NG1hcHBlZChhZGRyNikpIHtcXG4xODc1OlxcdFxcdFxcdFxcdGFkZHIgPSAodW5pb24gdGNwX2FvX2FkZHIgKilcXHUwMDI2YWRkcjYtXFx1MDAzZXM2X2FkZHIzMlszXTtcXG4xODc2OlxcdFxcdFxcdFxcdGFkZHJfbGVuID0gc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKTtcXG4xODc3OlxcdFxcdFxcdFxcdGZhbWlseSA9IEFGX0lORVQ7XFxuMTg3ODpcXHRcXHRcXHR9IGVsc2Uge1xcbjE4Nzk6XFx0XFx0XFx0XFx0YWRkciA9ICh1bmlvbiB0Y3BfYW9fYWRkciAqKWFkZHI2O1xcbjE4ODA6XFx0XFx0XFx0XFx0YWRkcl9sZW4gPSBzaXplb2Yoc3RydWN0IGluNl9hZGRyKTtcXG4xODgxOlxcdFxcdFxcdH1cXG4xODgyOlxcdFxcdFxcdHBvcnQgPSBudG9ocyhzaW42LVxcdTAwM2VzaW42X3BvcnQpO1xcbjE4ODM6XFx0XFx0fVxcbjE4ODQ6XFx0XFx0cHJlZml4ID0gY21kLnByZWZpeDtcXG4xODg1OlxcdFxcbjE4ODY6XFx0XFx0LyogQ3VycmVudGx5IG1hdGNoaW5nIGlzIG5vdCBwZXJmb3JtZWQgb24gcG9ydCAob3IgcG9ydCByYW5nZXMpICovXFxuMTg4NzpcXHRcXHRpZiAocG9ydCAhPSAwKVxcbjE4ODg6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTg4OTpcXHRcXG4xODkwOlxcdFxcdC8qIFdlIGNvdWxkIGNob29zZSByYW5kb20gcHJlc2VudCBrZXkgaGVyZSBmb3IgY3VycmVudC9ybmV4dFxcbjE4OTE6XFx0XFx0ICogYnV0IHRoYXQncyBsZXNzIHByZWRpY3RhYmxlLiBMZXQncyBiZSBzdHJpY3QgYW5kIGRvbid0XFxuMTg5MjpcXHRcXHQgKiBhbGxvdyByZW1vdmluZyBhIGtleSB0aGF0J3MgaW4gdXNlLiBSRkM1OTI1IGRvZXNuJ3RcXG4xODkzOlxcdFxcdCAqIHNwZWNpZnkgaG93LXRvIGNvb3JkaW5hdGUga2V5IHJlbW92YWwsIGJ1dCBzYXlzOlxcbjE4OTQ6XFx0XFx0ICogXFxcIkl0IGlzIHByZXN1bWVkIHRoYXQgYW4gTUtUIGFmZmVjdGluZyBhIHBhcnRpY3VsYXJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTU6NTg6MDYuMTg2MjMzOTMxWiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1OTIxMzk0ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIEknbSByZWFkeSB0byBkZWx2ZSBpbnRvIHRoaXMgdGV4dC4gTGV0J3Mgc2VlIHdoYXQgd2UndmUgZ290LiBJJ2xsIGFwcHJvYWNoIGl0IHdpdGggbXkgdXN1YWwgY3JpdGljYWwgZXllLCBjb25zaWRlcmluZyBhbGwgdGhlIGltcGxpY2F0aW9ucyBhbmQgbnVhbmNlcy4gSSdtIHByZXBhcmVkIHRvIGRpc3NlY3QgdGhlIGFyZ3VtZW50cywgZXZhbHVhdGUgdGhlIGV2aWRlbmNlLCBhbmQgc3ludGhlc2l6ZSB0aGUgaW5mb3JtYXRpb24gaW50byBhIGNvaGVzaXZlIHVuZGVyc3RhbmRpbmcuIExldCdzIGdldCB0byBpdCFcblxuXG4iLCJJbnB1dFRva2VucyI6OTk1MiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNTo1ODowOS43NzgzNzYzNzFaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgzNTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L3RjcF9hby5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4OTUsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE4OTU6XFx0XFx0ICogY29ubmVjdGlvbiBjYW5ub3QgYmUgZGVzdHJveWVkIGR1cmluZyBhbiBhY3RpdmUgY29ubmVjdGlvblxcXCJcXG4xODk2OlxcdFxcdCAqL1xcbjE4OTc6XFx0XFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGtleSwgXFx1MDAyNmFvX2luZm8tXFx1MDAzZWhlYWQsIG5vZGUsXFxuMTg5ODpcXHRcXHRcXHRcXHRcXHQgbG9ja2RlcF9zb2NrX2lzX2hlbGQoc2spKSB7XFxuMTg5OTpcXHRcXHRcXHRpZiAoY21kLnNuZGlkICE9IGtleS1cXHUwMDNlc25kaWQgfHxcXG4xOTAwOlxcdFxcdFxcdCAgICBjbWQucmN2aWQgIT0ga2V5LVxcdTAwM2VyY3ZpZClcXG4xOTAxOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjE5MDI6XFx0XFxuMTkwMzpcXHRcXHRcXHRpZiAoZmFtaWx5ICE9IGtleS1cXHUwMDNlZmFtaWx5IHx8XFxuMTkwNDpcXHRcXHRcXHQgICAgcHJlZml4ICE9IGtleS1cXHUwMDNlcHJlZml4bGVuIHx8XFxuMTkwNTpcXHRcXHRcXHQgICAgbWVtY21wKGFkZHIsIFxcdTAwMjZrZXktXFx1MDAzZWFkZHIsIGFkZHJfbGVuKSlcXG4xOTA2OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjE5MDc6XFx0XFxuMTkwODpcXHRcXHRcXHRpZiAoKGNtZC5rZXlmbGFncyBcXHUwMDI2IFRDUF9BT19LRVlGX0lGSU5ERVgpICE9XFxuMTkwOTpcXHRcXHRcXHQgICAgKGtleS1cXHUwMDNla2V5ZmxhZ3MgXFx1MDAyNiBUQ1BfQU9fS0VZRl9JRklOREVYKSlcXG4xOTEwOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjE5MTE6XFx0XFxuMTkxMjpcXHRcXHRcXHRpZiAoa2V5LVxcdTAwM2VsM2luZGV4ICE9IGwzaW5kZXgpXFxuMTkxMzpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4xOTE0OlxcdFxcbjE5MTU6XFx0XFx0XFx0aWYgKGtleSA9PSBuZXdfY3VycmVudCB8fCBrZXkgPT0gbmV3X3JuZXh0KVxcbjE5MTY6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMTkxNzpcXHRcXG4xOTE4OlxcdFxcdFxcdHJldHVybiB0Y3BfYW9fZGVsZXRlX2tleShzaywgYW9faW5mbywgY21kLmRlbF9hc3luYywga2V5LFxcbjE5MTk6XFx0XFx0XFx0XFx0XFx0XFx0IG5ld19jdXJyZW50LCBuZXdfcm5leHQpO1xcbjE5MjA6XFx0XFx0fVxcbjE5MjE6XFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuMTkyMjpcXHR9XFxuMTkyMzpcXHRcXG4xOTI0OlxcdC8qIGNtZC5hb19yZXF1aXJlZCBtYWtlcyBhIHNvY2tldCBUQ1AtQU8gb25seS5cXG4xOTI1OlxcdCAqIERvbid0IGFsbG93IGFueSBtZDUga2V5cyBmb3IgYW55IGwzaW50ZiBvbiB0aGUgc29ja2V0IHRvZ2V0aGVyIHdpdGggaXQuXFxuMTkyNjpcXHQgKiBSZXN0cmljdGluZyBpdCBlYXJseSBpbiBzZXRzb2Nrb3B0KCkgcmVtb3ZlcyBhIGNoZWNrIGZvclxcbjE5Mjc6XFx0ICogYW9faW5mby1cXHUwMDNlYW9fcmVxdWlyZWQgb24gaW5ib3VuZCB0Y3Agc2VnbWVudCBmYXN0LXBhdGguXFxuMTkyODpcXHQgKi9cXG4xOTI5OlxcdHN0YXRpYyBpbnQgdGNwX2FvX3JlcXVpcmVkX3ZlcmlmeShzdHJ1Y3Qgc29jayAqc2spXFxuMTkzMDpcXHR7XFxuMTkzMTpcXHQjaWZkZWYgQ09ORklHX1RDUF9NRDVTSUdcXG4xOTMyOlxcdFxcdGNvbnN0IHN0cnVjdCB0Y3BfbWQ1c2lnX2luZm8gKm1kNXNpZztcXG4xOTMzOlxcdFxcbjE5MzQ6XFx0XFx0aWYgKCFzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFxcdTAwMjZ0Y3BfbWQ1X25lZWRlZC5rZXkpKVxcbjE5MzU6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTkzNjpcXHRcXG4xOTM3OlxcdFxcdG1kNXNpZyA9IHJjdV9kZXJlZmVyZW5jZV9jaGVjayh0Y3Bfc2soc2spLVxcdTAwM2VtZDVzaWdfaW5mbyxcXG4xOTM4OlxcdFxcdFxcdFxcdFxcdCAgICAgICBsb2NrZGVwX3NvY2tfaXNfaGVsZChzaykpO1xcbjE5Mzk6XFx0XFx0aWYgKCFtZDVzaWcpXFxuMTk0MDpcXHRcXHRcXHRyZXR1cm4gMDtcXG4xOTQxOlxcdFxcbjE5NDI6XFx0XFx0aWYgKHJjdV9kZXJlZmVyZW5jZV9jaGVjayhobGlzdF9maXJzdF9yY3UoXFx1MDAyNm1kNXNpZy1cXHUwMDNlaGVhZCksXFxuMTk0MzpcXHRcXHRcXHRcXHRcXHQgIGxvY2tkZXBfc29ja19pc19oZWxkKHNrKSkpXFxuMTk0NDpcXHRcXHRcXHRyZXR1cm4gMTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTU6NTg6MDkuNzc4NTY2MzExWiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMTEzNjkxNzQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBUQ1BfQU9fREVMX0tFWSBMb2dpYyBCdWcgRml4KipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGlzIHBhdGNoLCB0aGUgY29yZSBjaGFuZ2UgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogaXQgZml4ZXMgYSBsb2dpYyBlcnJvciBpbiBob3cgYGwzaW5kZXhgIGlzIGhhbmRsZWQgd2l0aGluIHRoZSBgVENQX0FPX0RFTF9LRVlgIHNldHNvY2tvcHQuIFByZXZpb3VzbHksIGBsM2luZGV4YCB3YXMgaW5pdGlhbGl6ZWQgdG8gemVybyBhbmQgbmV2ZXIgYWN0dWFsbHkgdXBkYXRlZCB3aXRoIHRoZSB2YWx1ZSBvZiBgY21kLmlmaW5kZXhgLCBldmVuIGlmIHRoZSBgVENQX0FPX0tFWUZfSUZJTkRFWGAgZmxhZyB3YXMgc2V0LiBUaGUgY29kZSB3b3VsZCB0aGVuIGNvbXBhcmUgYSBrZXkncyBga2V5LVx1MDAzZWwzaW5kZXhgIHdpdGggdGhpcyBjb25zdGFudCB6ZXJvLCB3aGljaCBpcyBjbGVhcmx5IG5vdCB3aGF0IHdhcyBpbnRlbmRlZCB3aGVuIGEgc3BlY2lmaWMgaW50ZXJmYWNlIGluZGV4IHdhcyBwcm92aWRlZC5cblxuVGhlIGZpeCBpbnRyb2R1Y2VzIGEgY29uZGl0aW9uYWwgYXNzaWdubWVudDogYGlmIChjbWQua2V5ZmxhZ3MgXHUwMDI2IFRDUF9BT19LRVlGX0lGSU5ERVgpIGwzaW5kZXggPSBjbWQuaWZpbmRleDtgLiAgVGhpcyBlbnN1cmVzIHRoYXQgd2hlbiB0aGUgYFRDUF9BT19LRVlGX0lGSU5ERVhgIGZsYWcgaXMgc2V0LCBgbDNpbmRleGAgaXMgbm93IGNvcnJlY3RseSBzZXQgdG8gdGhlIHVzZXItcHJvdmlkZWQgaW50ZXJmYWNlIGluZGV4LCBhcyBleHBlY3RlZC5cblxuSeKAmXZlIHJldmlld2VkIHRoZSBjb2RlLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkLCBiZWNhdXNlIGBjbWRgIGlzIGZ1bGx5IGluaXRpYWxpemVkIGJ5IGBjb3B5X3N0cnVjdF9mcm9tX3NvY2twdHJgLiAgYGwzaW5kZXhgIGlzIGluaXRpYWxpemVkIHRvIDAgYW5kIHRoZW4gcG9zc2libHkgdXBkYXRlZC4gTm8gaW5mb3JtYXRpb24gbGVha2FnZSBvciBvdXQtb2YtYm91bmRzIGFjY2VzcyBpcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2guXG5cbkkgYWxzbyBzZWUgYSByZWxhdGVkIGNoYW5nZSBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvc29jay5jYCB3aXRoaW4gdGhlIGB0ZXN0X2dldF9vbmVfYW9gIGZ1bmN0aW9uLiBUaGlzIHNlbGZ0ZXN0IGNvZGUgaGFzIGJlZW4gdXBkYXRlZCB0byBzZXQgdGhlIGBrZXlmbGFnc2AgYW5kIGBpZmluZGV4YCB2YWx1ZXMgZm9yIHRoZSB0ZXN0IHRvIGVuc3VyZSB0aGF0IHRoZSBjb3JyZWN0IGxvZ2ljIGlzIG5vdyB0ZXN0ZWQsIGFuZCBpdCdzIGlzb2xhdGVkIHRvIHRoZSB0ZXN0aW5nIGhhcm5lc3MuXG5cbkdpdmVuIHRoZXNlIGNvbnNpZGVyYXRpb25zLCBJIGRvbid0IHNlZSBhbnkgbmVlZCBmb3IgS01TQU4gdG8gYmUgaW52b2x2ZWQgaGVyZS4gVGhlIGJ1ZyBpcyBwdXJlbHkgYSBsb2dpYyBlcnJvciwgYW5kIHRoZSBmaXggZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gdnVsbmVyYWJpbGl0aWVzLiBLQVNBTiBpcyBhbHNvIGxpa2VseSB1bm5lY2Vzc2FyeSBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBidWcuIFN0YW5kYXJkIHRlc3RpbmcgbWV0aG9kcyBzaG91bGQgYmUgc3VmZmljaWVudCB0byB2YWxpZGF0ZSB0aGUgZml4LiBUaGUgYGNvcHlfc3RydWN0X2Zyb21fc29ja3B0cmAgZnVuY3Rpb24gbWFrZXMgaXQgaGlnaGx5IHVubGlrZWx5IHRoYXQgdXNlcnNwYWNlIGlzIHByb3ZpZGluZyBnYXJiYWdlIGRhdGEuXG5cbkVzc2VudGlhbGx5LCB0aGlzIGlzIGEgY2xlYW4sIHRhcmdldGVkIGxvZ2ljIGZpeCB0aGF0IG1ha2VzIHRoZSBgVENQX0FPX0RFTF9LRVlgIGZ1bmN0aW9uYWxpdHkgYmVoYXZlIGFzIGludGVuZGVkIHdoZW4gZGVhbGluZyB3aXRoIGludGVyZmFjZS1zcGVjaWZpYyBrZXlzLiBJJ20gc2F0aXNmaWVkIHRoYXQgdGhpcyBjaGFuZ2UgaXMgc2FmZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA4NTUsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNTo1ODoyMC44OTIyNjE0MTNaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNTgyMzU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvcHlfc3RydWN0X2Zyb21fc29ja3B0clwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L3NvY2twdHIuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3NvY2twdHIuaD03Nz1zdGF0aWMgaW5saW5lIGludCBjb3B5X3NhZmVfZnJvbV9zb2NrcHRyKHZvaWQgKmRzdCwgc2l6ZV90IGtzaXplLFxcbi0tXFxuaW5jbHVkZS9saW51eC9zb2NrcHRyLmgtODYtXFxuaW5jbHVkZS9saW51eC9zb2NrcHRyLmg6ODc6c3RhdGljIGlubGluZSBpbnQgY29weV9zdHJ1Y3RfZnJvbV9zb2NrcHRyKHZvaWQgKmRzdCwgc2l6ZV90IGtzaXplLFxcbmluY2x1ZGUvbGludXgvc29ja3B0ci5oLTg4LVxcdFxcdHNvY2twdHJfdCBzcmMsIHNpemVfdCB1c2l6ZSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTU6NTg6MjAuOTQ0ODUxNjkxWiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNTEzMDQ2NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiBgY29weV9zdHJ1Y3RfZnJvbV9zb2NrcHRyYDpcblxuKipEaXNzZWN0aW5nIGBjb3B5X3N0cnVjdF9mcm9tX3NvY2twdHJgKipcblxuQWxyaWdodCwgc28gdGhlIGZpcnN0IHRoaW5nIEknbSBkb2luZyBpcyBnZXR0aW5nIG15c2VsZiBmYW1pbGlhciB3aXRoIGBjb3B5X3N0cnVjdF9mcm9tX3NvY2twdHJgLiBUaGF0IG5hbWUgYWxvbmUgZ2l2ZXMgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIGNhbiBpbW1lZGlhdGVseSBpbmZlciB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgaW52b2x2ZWQgaW4sIHVuc3VycHJpc2luZ2x5LCBjb3B5aW5nIGEgc3RydWN0dXJlIGZyb20gYSBzb2NrZXQgcG9pbnRlci4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbnRleHQuIFdoYXQga2luZCBvZiBzb2NrZXQ/IFdoYXQncyB0aGUgc291cmNlIHN0cnVjdHVyZT8gV2hhdCdzIHRoZSBkZXN0aW5hdGlvbj8gQXJlIHRoZXJlIGFueSBkYXRhIGNvbnZlcnNpb25zIGhhcHBlbmluZz8gQW55IG1lbW9yeSBhbGxvY2F0aW9uIGNvbnNpZGVyYXRpb25zPyBJJ2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBpc3N1ZXMgcmVsYXRlZCB0byBzb2NrZXQgY29tbXVuaWNhdGlvbiwgYW5kIG1lbW9yeSBzYWZldHkuIE9mZiB0aGUgdG9wIG9mIG15IGhlYWQsIEknbSB0aGlua2luZyBhYm91dDogcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgYm91bmRhcnkgY29uZGl0aW9ucywgYW5kIGVycm9yIGhhbmRsaW5nLiBJJ2xsIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgaG93IHRoZSBmdW5jdGlvbiBoYW5kbGVzIGRpZmZlcmVudCBzb2NrZXQgdHlwZXMsIGRhdGEgc2l6ZXMsIGFuZCBwb3RlbnRpYWwgZXJyb3JzIGR1cmluZyB0aGUgZGF0YSB0cmFuc2Zlci4gSSdsbCBiZSBzY3J1dGluaXppbmcgdGhlIHJldHVybiB2YWx1ZSBhcyB3ZWxsLiBXaGF0IGRvZXMgaXQgc2lnbmlmeSBpbiB0ZXJtcyBvZiBzdWNjZXNzIG9yIGZhaWx1cmU/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMzE2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTU6NTg6MjQuMjk2MTU4NjM3WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0MTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvc29ja3B0ci5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDgwOlxcdFxcdGlmIChvcHRsZW4gXFx1MDAzYyBrc2l6ZSlcXG4gIDgxOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAgODI6XFx0XFx0aWYgKGNvcHlfZnJvbV9zb2NrcHRyKGRzdCwgb3B0dmFsLCBrc2l6ZSkpXFxuICA4MzpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gIDg0OlxcdFxcdHJldHVybiAwO1xcbiAgODU6XFx0fVxcbiAgODY6XFx0XFxuICA4NzpcXHRzdGF0aWMgaW5saW5lIGludCBjb3B5X3N0cnVjdF9mcm9tX3NvY2twdHIodm9pZCAqZHN0LCBzaXplX3Qga3NpemUsXFxuICA4ODpcXHRcXHRcXHRzb2NrcHRyX3Qgc3JjLCBzaXplX3QgdXNpemUpXFxuICA4OTpcXHR7XFxuICA5MDpcXHRcXHRpZiAoIXNvY2twdHJfaXNfa2VybmVsKHNyYykpXFxuICA5MTpcXHRcXHRcXHRyZXR1cm4gY29weV9zdHJ1Y3RfZnJvbV91c2VyKGRzdCwga3NpemUsIHNyYy51c2VyLCB1c2l6ZSk7XFxuICA5MjpcXHRcXG4gIDkzOlxcdFxcdHJldHVybiBjb3B5X3N0cnVjdF9mcm9tX2JvdW5jZV9idWZmZXIoZHN0LCBrc2l6ZSwgc3JjLmtlcm5lbCwgdXNpemUpO1xcbiAgOTQ6XFx0fVxcbiAgOTU6XFx0XFxuICA5NjpcXHRzdGF0aWMgaW5saW5lIGludCBjb3B5X3RvX3NvY2twdHJfb2Zmc2V0KHNvY2twdHJfdCBkc3QsIHNpemVfdCBvZmZzZXQsXFxuICA5NzpcXHRcXHRcXHRjb25zdCB2b2lkICpzcmMsIHNpemVfdCBzaXplKVxcbiAgOTg6XFx0e1xcbiAgOTk6XFx0XFx0aWYgKCFzb2NrcHRyX2lzX2tlcm5lbChkc3QpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNTo1ODoyNC4yOTYyMzQyODdaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM1NzkzNTM5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgY2FyZWZ1bGx5IHJldmlld2VkIHRoaXMgcGF0Y2guIFRoZSBrZXkgdGhpbmcgSSdtIHNlZWluZyBpcyB0aGF0IGJvdGggYGNvcHlfc3RydWN0X2Zyb21fdXNlcmAgYW5kIGBjb3B5X3N0cnVjdF9mcm9tX2JvdW5jZV9idWZmZXJgIGVuc3VyZSB0aGF0IHRoZSB0YXJnZXQgYnVmZmVyIGlzICphbHdheXMqIGluaXRpYWxpemVkLiBUaGlzIG1lYW5zLCBpbXBvcnRhbnRseSwgdGhhdCB0aGUgYGNtZGAgc3RydWN0dXJlIGlzIGd1YXJhbnRlZWQgdG8gYmUgZnVsbHkgaW5pdGlhbGl6ZWQsIGV2ZW4gaWYgdGhlIHVzZXItc3VwcGxpZWQgZGF0YSBpcyBzbWFsbGVyIHRoYW4gdGhlIHRhcmdldCBidWZmZXIgc2l6ZSwgYXMgdGhlIHN0cnVjdHVyZSB3aWxsIGJlIHplcm8tcGFkZGVkLiBUaGVyZWZvcmUsIEkgY2FuIGNvbmZpZGVudGx5IHNheSB0aGlzIHBhdGNoIGlzbid0IGludHJvZHVjaW5nIGFueSBuZXcgaW5zdGFuY2VzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCB3aGljaCBpcyBhIGNyaXRpY2FsIGNvbmNlcm4gdG8gZmxhZy5cblxuRXNzZW50aWFsbHksIHRoaXMgaXMgYSBjbGVhbiBsb2dpYyBidWcgZml4LiBUaGUgY29yZSBvZiB0aGUgcHJvYmxlbSBpcyB0aGF0IGBsM2luZGV4YCB3YXNuJ3QgYmVpbmcgY29ycmVjdGx5IHBvcHVsYXRlZCB3aXRoIHRoZSB2YWx1ZSBmcm9tIGBjbWQuaWZpbmRleGAgd2hlbiB0aGUgYFRDUF9BT19LRVlGX0lGSU5ERVhgIGZsYWcgd2FzIGFjdGl2ZSB3aXRoaW4gYGNtZC5rZXlmbGFnc2AuIFRoYXQncyB0aGUgY3J1eCBvZiBpdC5cblxuR2l2ZW4gdGhpcyBhbmFseXNpcywgSSdtIGdvaW5nIHRvIHNldCBgTmVlZHNLTVNBTj1mYWxzZWAgb24gdGhpcy4gSSdsbCBpbmNsdWRlIGEgY2xlYXIgZXhwbGFuYXRpb24sIGxpa2VseSBhbG9uZyB0aGUgbGluZXMgb2YgXCJUaGlzIHBhdGNoIGFkZHJlc3NlcyBhIGxvZ2ljIGVycm9yIHdoZXJlIGBsM2luZGV4YCB3YXMgbm90IGNvcnJlY3RseSBzZXQgYmFzZWQgb24gYGNtZC5pZmluZGV4YCB3aGVuIGEgc3BlY2lmaWMga2V5IGZsYWcgd2FzIGVuYWJsZWQuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGluc3RhbmNlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBhcyB0aGUgZGVzdGluYXRpb24gYnVmZmVyIGlzIGd1YXJhbnRlZWQgdG8gYmUgaW5pdGlhbGl6ZWQuXCIgVGhhdCBzaG91bGQgYmUgc3VmZmljaWVudCBmb3IgdGhlIHJldmlld2VyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjkwMCwiT3V0cHV0VG9rZW5zIjoxNjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNTo1ODoyOS42NTQxNzM1NloiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgaW4gYHRjcF9hb19kZWxfY21kYCB3aGVyZSB0aGUgYGwzaW5kZXhgIHZhcmlhYmxlIHdhcyBub3QgYmVpbmcgcG9wdWxhdGVkIGZyb20gdGhlIHVzZXItcHJvdmlkZWQgYGNtZC5pZmluZGV4YCB3aGVuIHRoZSBgVENQX0FPX0tFWUZfSUZJTkRFWGAgZmxhZyB3YXMgc2V0LiBUaGUgYGNtZGAgc3RydWN0dXJlIGlzIHNhZmVseSBjb3BpZWQgZnJvbSB1c2Vyc3BhY2UgdXNpbmcgYGNvcHlfc3RydWN0X2Zyb21fc29ja3B0cmAsIHdoaWNoIGd1YXJhbnRlZXMgdGhhdCB0aGUgc3RydWN0dXJlIGlzIGZ1bGx5IGluaXRpYWxpemVkICh6ZXJvLXBhZGRlZCBpZiB0aGUgdXNlcnNwYWNlIHN0cnVjdHVyZSBpcyBzbWFsbGVyKS4gVGhlIHBhdGNoIG9ubHkgYWRkcyBhIGNvbmRpdGlvbmFsIGFzc2lnbm1lbnQgb2YgYW4gaW50ZWdlciB2YXJpYWJsZSBhbmQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2Vyc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgaW4gYHRjcF9hb19kZWxfY21kYCB3aGVyZSB0aGUgYGwzaW5kZXhgIHZhcmlhYmxlIHdhcyBub3QgYmVpbmcgcG9wdWxhdGVkIGZyb20gdGhlIHVzZXItcHJvdmlkZWQgYGNtZC5pZmluZGV4YCB3aGVuIHRoZSBgVENQX0FPX0tFWUZfSUZJTkRFWGAgZmxhZyB3YXMgc2V0LiBUaGUgYGNtZGAgc3RydWN0dXJlIGlzIHNhZmVseSBjb3BpZWQgZnJvbSB1c2Vyc3BhY2UgdXNpbmcgYGNvcHlfc3RydWN0X2Zyb21fc29ja3B0cmAsIHdoaWNoIGd1YXJhbnRlZXMgdGhhdCB0aGUgc3RydWN0dXJlIGlzIGZ1bGx5IGluaXRpYWxpemVkICh6ZXJvLXBhZGRlZCBpZiB0aGUgdXNlcnNwYWNlIHN0cnVjdHVyZSBpcyBzbWFsbGVyKS4gVGhlIHBhdGNoIG9ubHkgYWRkcyBhIGNvbmRpdGlvbmFsIGFzc2lnbm1lbnQgb2YgYW4gaW50ZWdlciB2YXJpYWJsZSBhbmQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2Vyc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowwrkrc[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-21 15:54:32 +0000 UTC FinishedAt: 2026-08-21 15:58:30 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "746fc0787f616da418ffc04a110296fe95d53491", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TCP_AO", "NET_VRF" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "746fc0787f616da418ffc04a110296fe95d53491", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TCP_AO", "NET_VRF" ], "series_id": "2ff8e8bf-62ad-42b5-bf62-fb8a5bbb8a6c" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "tcp_parse_ao", "tcp_v4_parse_ao", "tcp_v6_parse_ao" ], "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+CgkJCTx0ZD4yMDI2LzA4LzIxIDE1OjU2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RDUF9BTyYjMzQ7LAogICAgJiMzNDtORVRfVlJGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGNwX3BhcnNlX2FvJiMzNDssCiAgICAmIzM0O3RjcF92NF9wYXJzZV9hbyYjMzQ7LAogICAgJiMzNDt0Y3BfdjZfcGFyc2VfYW8mIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyBpbiBgdGNwX2FvX2RlbF9jbWRgIHdoZXJlIHRoZSBgbDNpbmRleGAgdmFyaWFibGUgd2FzIG5vdCBiZWluZyBwb3B1bGF0ZWQgZnJvbSB0aGUgdXNlci1wcm92aWRlZCBgY21kLmlmaW5kZXhgIHdoZW4gdGhlIGBUQ1BfQU9fS0VZRl9JRklOREVYYCBmbGFnIHdhcyBzZXQuIFRoZSBgY21kYCBzdHJ1Y3R1cmUgaXMgc2FmZWx5IGNvcGllZCBmcm9tIHVzZXJzcGFjZSB1c2luZyBgY29weV9zdHJ1Y3RfZnJvbV9zb2NrcHRyYCwgd2hpY2ggZ3VhcmFudGVlcyB0aGF0IHRoZSBzdHJ1Y3R1cmUgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgKHplcm8tcGFkZGVkIGlmIHRoZSB1c2Vyc3BhY2Ugc3RydWN0dXJlIGlzIHNtYWxsZXIpLiBUaGUgcGF0Y2ggb25seSBhZGRzIGEgY29uZGl0aW9uYWwgYXNzaWdubWVudCBvZiBhbiBpbnRlZ2VyIHZhcmlhYmxlIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gVENQLUFPIHNldHNvY2tvcHQgaGFuZGxpbmcgd2hlcmUgYGNtZC5pZmluZGV4YCB3YXMgbm90IGFzc2lnbmVkIHRvIGBsM2luZGV4YCB3aGVuIGRlbGV0aW5nIGEga2V5LCBwcmV2ZW50aW5nIGRlbGV0aW9uIG9mIGludGVyZmFjZS1zY29wZWQga2V5cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxNTo1NjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDExMTdjOWZkZjhiYzA3MjRjMjAxN2IyZDU4OTcyY2NmOTc5YzMzM2FcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAyMSAxNTo1Njo0MCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfYW8uYyBiL25ldC9pcHY0L3RjcF9hby5jXG5pbmRleCA1MDk0MjY3NDQ3YWVlLi4yNjg2NDYyMWU2ZGVmIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvdGNwX2FvLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcF9hby5jXG5AQCAtMTgzNCw2ICYjNDM7MTgzNCw5IEBAIHN0YXRpYyBpbnQgdGNwX2FvX2RlbF9jbWQoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBzaG9ydCBpbnQgZmFtaWx5LFxuIFx0aWYgKGNtZC5pZmluZGV4IFx1MDAyNlx1MDAyNiAhKGNtZC5rZXlmbGFncyBcdTAwMjYgVENQX0FPX0tFWUZfSUZJTkRFWCkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuJiM0MztcdGlmIChjbWQua2V5ZmxhZ3MgXHUwMDI2IFRDUF9BT19LRVlGX0lGSU5ERVgpXG4mIzQzO1x0XHRsM2luZGV4ID0gY21kLmlmaW5kZXg7XG4mIzQzO1xuIFx0YW9faW5mbyA9IHNldHNvY2tvcHRfYW9faW5mbyhzayk7XG4gXHRpZiAoSVNfRVJSKGFvX2luZm8pKVxuIFx0XHRyZXR1cm4gUFRSX0VSUihhb19pbmZvKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2tleS1tYW5hZ2VtZW50LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2tleS1tYW5hZ2VtZW50LmNcbmluZGV4IGQ4NmJiMzgwYjc5ZjcuLjFlMDFlODA1ZGJhNzIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2tleS1tYW5hZ2VtZW50LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8va2V5LW1hbmFnZW1lbnQuY1xuQEAgLTYzLDcgJiM0Mzs2Myw4IEBAIHN0YXRpYyBpbnQgcHJlcGFyZV9sc2sodW5pb24gdGNwX2FkZHIgKmFkZHIsIHVpbnQ4X3Qgc25kaWQsIHVpbnQ4X3QgcmN2aWQpXG4gXHRyZXR1cm4gc2s7XG4gfVxuIFxuLXN0YXRpYyBpbnQgdGVzdF9kZWxfa2V5KGludCBzaywgdWludDhfdCBzbmRpZCwgdWludDhfdCByY3ZpZCwgYm9vbCBhc3luYyxcbiYjNDM7c3RhdGljIGludCB0ZXN0X2RlbF9rZXkoaW50IHNrLCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkLCBpbnQgaWZpbmRleCxcbiYjNDM7XHRcdFx0Ym9vbCBhc3luYyxcbiBcdFx0XHRpbnQgY3VycmVudF9rZXksIGludCBybmV4dF9rZXkpXG4ge1xuIFx0c3RydWN0IHRjcF9hb19pbmZvX29wdCBhb19pbmZvID0ge307XG5AQCAtNzYsNiAmIzQzOzc3LDEwIEBAIHN0YXRpYyBpbnQgdGVzdF9kZWxfa2V5KGludCBzaywgdWludDhfdCBzbmRpZCwgdWludDhfdCByY3ZpZCwgYm9vbCBhc3luYyxcbiBcdGRlbC5wcmVmaXggPSBERUZBVUxUX1RFU1RfUFJFRklYO1xuIFx0ZGVsLnNuZGlkID0gc25kaWQ7XG4gXHRkZWwucmN2aWQgPSByY3ZpZDtcbiYjNDM7XHRpZiAoaWZpbmRleCkge1xuJiM0MztcdFx0ZGVsLmtleWZsYWdzID0gVENQX0FPX0tFWUZfSUZJTkRFWDtcbiYjNDM7XHRcdGRlbC5pZmluZGV4ID0gaWZpbmRleDtcbiYjNDM7XHR9XG4gXG4gXHRpZiAoY3VycmVudF9rZXkgXHUwMDNlPSAwKSB7XG4gXHRcdGRlbC5zZXRfY3VycmVudCA9IDE7XG5AQCAtOTUsNyAmIzQzOzEwMCw4IEBAIHN0YXRpYyBpbnQgdGVzdF9kZWxfa2V5KGludCBzaywgdWludDhfdCBzbmRpZCwgdWludDhfdCByY3ZpZCwgYm9vbCBhc3luYyxcbiBcbiBcdHRjcF9hZGRyX3RvX3NvY2thZGRyX2luKFx1MDAyNnNvY2thZGRyLCBcdTAwMjZ0aGlzX2lwX2Rlc3QsIDApO1xuIFx0ZXJyID0gdGVzdF9nZXRfb25lX2FvKHNrLCBcdTAwMjZrZXksIFx1MDAyNnNvY2thZGRyLCBzaXplb2Yoc29ja2FkZHIpLFxuLVx0XHRcdCAgICAgIERFRkFVTFRfVEVTVF9QUkVGSVgsIHNuZGlkLCByY3ZpZCk7XG4mIzQzO1x0XHRcdCAgICAgIERFRkFVTFRfVEVTVF9QUkVGSVgsIHNuZGlkLCByY3ZpZCxcbiYjNDM7XHRcdFx0ICAgICAgZGVsLmtleWZsYWdzLCBkZWwuaWZpbmRleCk7XG4gXHRpZiAoIWVycilcbiBcdFx0cmV0dXJuIC1FRVhJU1Q7XG4gXHRpZiAoZXJyICE9IC1FMkJJRylcbkBAIC0xMTIsMTIgJiM0MzsxMTgsMTIgQEAgc3RhdGljIGludCB0ZXN0X2RlbF9rZXkoaW50IHNrLCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkLCBib29sIGFzeW5jLFxuIH1cbiBcbiBzdGF0aWMgdm9pZCB0cnlfZGVsZXRlX2tleShjaGFyICp0c3RfbmFtZSwgaW50IHNrLCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkLFxuLVx0XHRcdCAgIGJvb2wgYXN5bmMsIGludCBjdXJyZW50X2tleSwgaW50IHJuZXh0X2tleSxcbiYjNDM7XHRcdFx0ICAgaW50IGlmaW5kZXgsIGJvb2wgYXN5bmMsIGludCBjdXJyZW50X2tleSwgaW50IHJuZXh0X2tleSxcbiBcdFx0XHQgICBmYXVsdF90IGluailcbiB7XG4gXHRpbnQgZXJyO1xuIFxuLVx0ZXJyID0gdGVzdF9kZWxfa2V5KHNrLCBzbmRpZCwgcmN2aWQsIGFzeW5jLCBjdXJyZW50X2tleSwgcm5leHRfa2V5KTtcbiYjNDM7XHRlcnIgPSB0ZXN0X2RlbF9rZXkoc2ssIHNuZGlkLCByY3ZpZCwgaWZpbmRleCwgYXN5bmMsIGN1cnJlbnRfa2V5LCBybmV4dF9rZXkpO1xuIFx0aWYgKChlcnIgPT0gLUVCVVNZIFx1MDAyNlx1MDAyNiBmYXVsdChCVVNZKSkgfHwgKGVyciA9PSAtRUlOVkFMIFx1MDAyNlx1MDAyNiBmYXVsdChDVVJSTkVYVCkpKSB7XG4gXHRcdHRlc3Rfb2soXCYjMzQ7JXM6IGtleSBkZWxldGlvbiB3YXMgcHJldmVudGVkXCYjMzQ7LCB0c3RfbmFtZSk7XG4gXHRcdHJldHVybjtcbkBAIC0yMzYsMTUgJiM0MzsyNDIsMTUgQEAgc3RhdGljIHZvaWQgY2hlY2tfY2xvc2VkX3NvY2tldCh2b2lkKVxuIFx0aW50IHNrO1xuIFxuIFx0c2sgPSBwcmVwYXJlX3NrKFx1MDAyNnRoaXNfaXBfZGVzdCwgMjAwLCAyMDApO1xuLVx0dHJ5X2RlbGV0ZV9rZXkoXCYjMzQ7Y2xvc2VkIHNvY2tldCwgZGVsZXRlIGEga2V5XCYjMzQ7LCBzaywgMjAwLCAyMDAsIDAsIC0xLCAtMSwgMCk7XG4tXHR0cnlfZGVsZXRlX2tleShcJiMzNDtjbG9zZWQgc29ja2V0LCBkZWxldGUgYWxsIGtleXNcJiMzNDssIHNrLCAxMDAsIDEwMCwgMCwgLTEsIC0xLCAwKTtcbiYjNDM7XHR0cnlfZGVsZXRlX2tleShcJiMzNDtjbG9zZWQgc29ja2V0LCBkZWxldGUgYSBrZXlcJiMzNDssIHNrLCAyMDAsIDIwMCwgMCwgMCwgLTEsIC0xLCAwKTtcbiYjNDM7XHR0cnlfZGVsZXRlX2tleShcJiMzNDtjbG9zZWQgc29ja2V0LCBkZWxldGUgYWxsIGtleXNcJiMzNDssIHNrLCAxMDAsIDEwMCwgMCwgMCwgLTEsIC0xLCAwKTtcbiBcdGNsb3NlKHNrKTtcbiBcbiBcdHNrID0gcHJlcGFyZV9zayhcdTAwMjZ0aGlzX2lwX2Rlc3QsIDIwMCwgMjAwKTtcbiBcdGlmICh0ZXN0X3NldF9rZXkoc2ssIDEwMCwgMjAwKSlcbiBcdFx0dGVzdF9lcnJvcihcJiMzNDtmYWlsZWQgdG8gc2V0IGN1cnJlbnQvcm5leHQga2V5c1wmIzM0Oyk7XG4tXHR0cnlfZGVsZXRlX2tleShcJiMzNDtjbG9zZWQgc29ja2V0LCBkZWxldGUgY3VycmVudCBrZXlcJiMzNDssIHNrLCAxMDAsIDEwMCwgMCwgLTEsIC0xLCBGQVVMVF9CVVNZKTtcbi1cdHRyeV9kZWxldGVfa2V5KFwmIzM0O2Nsb3NlZCBzb2NrZXQsIGRlbGV0ZSBybmV4dCBrZXlcJiMzNDssIHNrLCAyMDAsIDIwMCwgMCwgLTEsIC0xLCBGQVVMVF9CVVNZKTtcbiYjNDM7XHR0cnlfZGVsZXRlX2tleShcJiMzNDtjbG9zZWQgc29ja2V0LCBkZWxldGUgY3VycmVudCBrZXlcJiMzNDssIHNrLCAxMDAsIDEwMCwgMCwgMCwgLTEsIC0xLCBGQVVMVF9CVVNZKTtcbiYjNDM7XHR0cnlfZGVsZXRlX2tleShcJiMzNDtjbG9zZWQgc29ja2V0LCBkZWxldGUgcm5leHQga2V5XCYjMzQ7LCBzaywgMjAwLCAyMDAsIDAsIDAsIC0xLCAtMSwgRkFVTFRfQlVTWSk7XG4gXHRjbG9zZShzayk7XG4gXG4gXHRzayA9IHByZXBhcmVfc2soXHUwMDI2dGhpc19pcF9kZXN0LCAyMDAsIDIwMCk7XG5AQCAtMjU0LDEwICYjNDM7MjYwLDEyIEBAIHN0YXRpYyB2b2lkIGNoZWNrX2Nsb3NlZF9zb2NrZXQodm9pZClcbiBcdGlmICh0ZXN0X2FkZF9rZXkoc2ssIFwmIzM0O0dsb3J5IHRvIFVrcmFpbmUhXCYjMzQ7LCB0aGlzX2lwX2Rlc3QsXG4gXHRcdFx0IERFRkFVTFRfVEVTVF9QUkVGSVgsIDEyLCAxMykpXG4gXHRcdHRlc3RfZXJyb3IoXCYjMzQ7dGVzdF9hZGRfa2V5KClcJiMzNDspO1xuLVx0dHJ5X2RlbGV0ZV9rZXkoXCYjMzQ7Y2xvc2VkIHNvY2tldCwgZGVsZXRlIGEga2V5ICYjNDM7IHNldCBjdXJyZW50L3JuZXh0XCYjMzQ7LCBzaywgMTAwLCAxMDAsIDAsIDEwLCAxMywgMCk7XG4tXHR0cnlfZGVsZXRlX2tleShcJiMzNDtjbG9zZWQgc29ja2V0LCBmb3JjZS1kZWxldGUgY3VycmVudCBrZXlcJiMzNDssIHNrLCAxMCwgMTEsIDAsIDIwMCwgLTEsIDApO1xuLVx0dHJ5X2RlbGV0ZV9rZXkoXCYjMzQ7Y2xvc2VkIHNvY2tldCwgZm9yY2UtZGVsZXRlIHJuZXh0IGtleVwmIzM0Oywgc2ssIDEyLCAxMywgMCwgLTEsIDIwMCwgMCk7XG4tXHR0cnlfZGVsZXRlX2tleShcJiMzNDtjbG9zZWQgc29ja2V0LCBkZWxldGUgY3VycmVudCYjNDM7cm5leHQga2V5XCYjMzQ7LCBzaywgMjAwLCAyMDAsIDAsIC0xLCAtMSwgRkFVTFRfQlVTWSk7XG4mIzQzO1x0dHJ5X2RlbGV0ZV9rZXkoXCYjMzQ7Y2xvc2VkIHNvY2tldCwgZGVsZXRlIGEga2V5ICYjNDM7IHNldCBjdXJyZW50L3JuZXh0XCYjMzQ7LCBzayxcbiYjNDM7XHRcdCAgICAgICAxMDAsIDEwMCwgMCwgMCwgMTAsIDEzLCAwKTtcbiYjNDM7XHR0cnlfZGVsZXRlX2tleShcJiMzNDtjbG9zZWQgc29ja2V0LCBmb3JjZS1kZWxldGUgY3VycmVudCBrZXlcJiMzNDssIHNrLCAxMCwgMTEsIDAsIDAsIDIwMCwgLTEsIDApO1xuJiM0MztcdHRyeV9kZWxldGVfa2V5KFwmIzM0O2Nsb3NlZCBzb2NrZXQsIGZvcmNlLWRlbGV0ZSBybmV4dCBrZXlcJiMzNDssIHNrLCAxMiwgMTMsIDAsIDAsIC0xLCAyMDAsIDApO1xuJiM0MztcdHRyeV9kZWxldGVfa2V5KFwmIzM0O2Nsb3NlZCBzb2NrZXQsIGRlbGV0ZSBjdXJyZW50JiM0MztybmV4dCBrZXlcJiMzNDssIHNrLFxuJiM0MztcdFx0ICAgICAgIDIwMCwgMjAwLCAwLCAwLCAtMSwgLTEsIEZBVUxUX0JVU1kpO1xuIFx0Y2xvc2Uoc2spO1xuIFxuIFx0c2sgPSBwcmVwYXJlX3NrKFx1MDAyNnRoaXNfaXBfZGVzdCwgMjAwLCAyMDApO1xuQEAgLTI3Miw2ICYjNDM7MjgwLDE4IEBAIHN0YXRpYyB2b2lkIGNoZWNrX2Nsb3NlZF9zb2NrZXQodm9pZClcbiBcdFx0XHRcdCAgdGhpc19pcF9kZXN0LCBERUZBVUxUX1RFU1RfUFJFRklYLFxuIFx0XHRcdFx0ICBmYWxzZSwgdHJ1ZSwgMjAsIDEwLCAwKTtcbiBcdGNsb3NlKHNrKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFzaG91bGRfc2tpcF90ZXN0KFwmIzM0O2Nsb3NlZCBzb2NrZXQsIGFkZCAmIzQzOyBkZWxldGUgVlJGLXNjb3BlZCBrZXlcJiMzNDssXG4mIzQzO1x0XHRcdCAgICAgIEtDT05GSUdfTkVUX1ZSRikpIHtcbiYjNDM7XHRcdHNrID0gcHJlcGFyZV9zayhcdTAwMjZ0aGlzX2lwX2Rlc3QsIDIwMCwgMjAwKTtcbiYjNDM7XHRcdGlmICh0ZXN0X2FkZF9rZXlfdnJmKHNrLCBTRUNPTkRfUEFTU1dPUkQsIFRDUF9BT19LRVlGX0lGSU5ERVgsXG4mIzQzO1x0XHRcdFx0ICAgICB0aGlzX2lwX2Rlc3QsIERFRkFVTFRfVEVTVF9QUkVGSVgsXG4mIzQzO1x0XHRcdFx0ICAgICB0ZXN0X3ZyZl9pZmluZGV4LCAyMDEsIDIwMSkpXG4mIzQzO1x0XHRcdHRlc3RfZXJyb3IoXCYjMzQ7dGVzdF9hZGRfa2V5X3ZyZigpXCYjMzQ7KTtcbiYjNDM7XHRcdHRyeV9kZWxldGVfa2V5KFwmIzM0O2Nsb3NlZCBzb2NrZXQsIGFkZCAmIzQzOyBkZWxldGUgVlJGLXNjb3BlZCBrZXlcJiMzNDssIHNrLCAyMDEsIDIwMSxcbiYjNDM7XHRcdFx0ICAgICAgIHRlc3RfdnJmX2lmaW5kZXgsIDAsIC0xLCAtMSwgMCk7XG4mIzQzO1x0XHRjbG9zZShzayk7XG4mIzQzO1x0fVxuIH1cbiBcbiBzdGF0aWMgdm9pZCBhc3NlcnRfbm9fY3VycmVudF9ybmV4dChjb25zdCBjaGFyICp0c3RfbXNnLCBpbnQgc2spXG5AQCAtMzIyLDggJiM0MzszNDIsOCBAQCBzdGF0aWMgdm9pZCBjaGVja19saXN0ZW5fc29ja2V0KHZvaWQpXG4gXHRpbnQgc2ssIGVycjtcbiBcbiBcdHNrID0gcHJlcGFyZV9sc2soXHUwMDI2dGhpc19pcF9kZXN0LCAyMDAsIDIwMCk7XG4tXHR0cnlfZGVsZXRlX2tleShcJiMzNDtsaXN0ZW4gc29ja2V0LCBkZWxldGUgYSBrZXlcJiMzNDssIHNrLCAyMDAsIDIwMCwgMCwgLTEsIC0xLCAwKTtcbi1cdHRyeV9kZWxldGVfa2V5KFwmIzM0O2xpc3RlbiBzb2NrZXQsIGRlbGV0ZSBhbGwga2V5c1wmIzM0Oywgc2ssIDEwMCwgMTAwLCAwLCAtMSwgLTEsIDApO1xuJiM0MztcdHRyeV9kZWxldGVfa2V5KFwmIzM0O2xpc3RlbiBzb2NrZXQsIGRlbGV0ZSBhIGtleVwmIzM0Oywgc2ssIDIwMCwgMjAwLCAwLCAwLCAtMSwgLTEsIDApO1xuJiM0MztcdHRyeV9kZWxldGVfa2V5KFwmIzM0O2xpc3RlbiBzb2NrZXQsIGRlbGV0ZSBhbGwga2V5c1wmIzM0Oywgc2ssIDEwMCwgMTAwLCAwLCAwLCAtMSwgLTEsIDApO1xuIFx0Y2xvc2Uoc2spO1xuIFxuIFx0c2sgPSBwcmVwYXJlX2xzayhcdTAwMjZ0aGlzX2lwX2Rlc3QsIDIwMCwgMjAwKTtcbkBAIC0zNDUsOCAmIzQzOzM2NSwxMCBAQCBzdGF0aWMgdm9pZCBjaGVja19saXN0ZW5fc29ja2V0KHZvaWQpXG4gXHRpZiAobGlzdGVuKHNrLCAxMCkpXG4gXHRcdHRlc3RfZXJyb3IoXCYjMzQ7bGlzdGVuKClcJiMzNDspO1xuIFx0YXNzZXJ0X25vX2N1cnJlbnRfcm5leHQoXCYjMzQ7bGlzdGVuKCkgYWZ0ZXIgY3VycmVudC9ybmV4dCBrZXlzIHNldFwmIzM0Oywgc2spO1xuLVx0dHJ5X2RlbGV0ZV9rZXkoXCYjMzQ7bGlzdGVuIHNvY2tldCwgZGVsZXRlIGN1cnJlbnQga2V5IGZyb20gYmVmb3JlIGxpc3RlbigpXCYjMzQ7LCBzaywgMTAwLCAxMDAsIDAsIC0xLCAtMSwgRkFVTFRfRklYTUUpO1xuLVx0dHJ5X2RlbGV0ZV9rZXkoXCYjMzQ7bGlzdGVuIHNvY2tldCwgZGVsZXRlIHJuZXh0IGtleSBmcm9tIGJlZm9yZSBsaXN0ZW4oKVwmIzM0Oywgc2ssIDIwMCwgMjAwLCAwLCAtMSwgLTEsIEZBVUxUX0ZJWE1FKTtcbiYjNDM7XHR0cnlfZGVsZXRlX2tleShcJiMzNDtsaXN0ZW4gc29ja2V0LCBkZWxldGUgY3VycmVudCBrZXkgZnJvbSBiZWZvcmUgbGlzdGVuKClcJiMzNDssIHNrLFxuJiM0MztcdFx0ICAgICAgIDEwMCwgMTAwLCAwLCAwLCAtMSwgLTEsIEZBVUxUX0ZJWE1FKTtcbiYjNDM7XHR0cnlfZGVsZXRlX2tleShcJiMzNDtsaXN0ZW4gc29ja2V0LCBkZWxldGUgcm5leHQga2V5IGZyb20gYmVmb3JlIGxpc3RlbigpXCYjMzQ7LCBzayxcbiYjNDM7XHRcdCAgICAgICAyMDAsIDIwMCwgMCwgMCwgLTEsIC0xLCBGQVVMVF9GSVhNRSk7XG4gXHRjbG9zZShzayk7XG4gXG4gXHRhc3NlcnRfbm9fdGNwX3JlcGFpcigpO1xuQEAgLTM1OSwxMyAmIzQzOzM4MSwxMyBAQCBzdGF0aWMgdm9pZCBjaGVja19saXN0ZW5fc29ja2V0KHZvaWQpXG4gXHRcdFx0IERFRkFVTFRfVEVTVF9QUkVGSVgsIDEyLCAxMykpXG4gXHRcdHRlc3RfZXJyb3IoXCYjMzQ7dGVzdF9hZGRfa2V5KClcJiMzNDspO1xuIFx0dHJ5X2RlbGV0ZV9rZXkoXCYjMzQ7bGlzdGVuIHNvY2tldCwgZGVsZXRlIGEga2V5ICYjNDM7IHNldCBjdXJyZW50L3JuZXh0XCYjMzQ7LCBzayxcbi1cdFx0ICAgICAgIDEwMCwgMTAwLCAwLCAxMCwgMTMsIEZBVUxUX0NVUlJORVhUKTtcbiYjNDM7XHRcdCAgICAgICAxMDAsIDEwMCwgMCwgMCwgMTAsIDEzLCBGQVVMVF9DVVJSTkVYVCk7XG4gXHR0cnlfZGVsZXRlX2tleShcJiMzNDtsaXN0ZW4gc29ja2V0LCBmb3JjZS1kZWxldGUgY3VycmVudCBrZXlcJiMzNDssIHNrLFxuLVx0XHQgICAgICAgMTAsIDExLCAwLCAyMDAsIC0xLCBGQVVMVF9DVVJSTkVYVCk7XG4mIzQzO1x0XHQgICAgICAgMTAsIDExLCAwLCAwLCAyMDAsIC0xLCBGQVVMVF9DVVJSTkVYVCk7XG4gXHR0cnlfZGVsZXRlX2tleShcJiMzNDtsaXN0ZW4gc29ja2V0LCBmb3JjZS1kZWxldGUgcm5leHQga2V5XCYjMzQ7LCBzayxcbi1cdFx0ICAgICAgIDEyLCAxMywgMCwgLTEsIDIwMCwgRkFVTFRfQ1VSUk5FWFQpO1xuJiM0MztcdFx0ICAgICAgIDEyLCAxMywgMCwgMCwgLTEsIDIwMCwgRkFVTFRfQ1VSUk5FWFQpO1xuIFx0dHJ5X2RlbGV0ZV9rZXkoXCYjMzQ7bGlzdGVuIHNvY2tldCwgZGVsZXRlIGEga2V5XCYjMzQ7LCBzayxcbi1cdFx0ICAgICAgIDIwMCwgMjAwLCAwLCAtMSwgLTEsIDApO1xuJiM0MztcdFx0ICAgICAgIDIwMCwgMjAwLCAwLCAwLCAtMSwgLTEsIDApO1xuIFx0Y2xvc2Uoc2spO1xuIFxuIFx0c2sgPSBwcmVwYXJlX2xzayhcdTAwMjZ0aGlzX2lwX2Rlc3QsIDIwMCwgMjAwKTtcbkBAIC0xMTMxLDcgJiM0MzsxMTUzLDYgQEAgc3RhdGljIHZvaWQgY2hlY2tfZXN0YWJsaXNoZWRfc29ja2V0KHZvaWQpXG4ge1xuIFx0dW5zaWduZWQgaW50IHBvcnQgPSB0ZXN0X3NlcnZlcl9wb3J0O1xuIFxuLVx0c2V0dXBfdnJmcygpO1xuIFx0dHJ5X2NsaWVudF9ydW4oXCYjMzQ7Y2xpZW50OiBDaGVjayBjdXJyZW50L3JuZXh0IGtleXMgdW5zZXQgYmVmb3JlIGNvbm5lY3QoKVwmIzM0OyxcbiBcdFx0ICAgICAgIHBvcnQmIzQzOyYjNDM7LCAyMCwgLTEsIC0xKTtcbiBcdHRyeV9jbGllbnRfcnVuKFwmIzM0O2NsaWVudDogQ2hlY2sgY3VycmVudC9ybmV4dCBrZXlzIHNldCBiZWZvcmUgY29ubmVjdCgpXCYjMzQ7LFxuQEAgLTExNTAsNiAmIzQzOzExNzEsNyBAQCBzdGF0aWMgdm9pZCAqY2xpZW50X2ZuKHZvaWQgKmFyZylcbiB7XG4gXHRpZiAoaW5ldF9wdG9uKFRFU1RfRkFNSUxZLCBURVNUX1dST05HX0lQLCBcdTAwMjZ3cm9uZ19hZGRyKSAhPSAxKVxuIFx0XHR0ZXN0X2Vycm9yKFwmIzM0O0NhbiYjMzk7dCBjb252ZXJ0IGlwIGFkZHJlc3MgJXNcJiMzNDssIFRFU1RfV1JPTkdfSVApO1xuJiM0MztcdHNldHVwX3ZyZnMoKTtcbiBcdGNoZWNrX2Nsb3NlZF9zb2NrZXQoKTtcbiBcdGNoZWNrX2xpc3Rlbl9zb2NrZXQoKTtcbiBcdGNoZWNrX2VzdGFibGlzaGVkX3NvY2tldCgpO1xuQEAgLTExNTgsNiAmIzQzOzExODAsNiBAQCBzdGF0aWMgdm9pZCAqY2xpZW50X2ZuKHZvaWQgKmFyZylcbiBcbiBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIHtcbi1cdHRlc3RfaW5pdCgxMjEsIHNlcnZlcl9mbiwgY2xpZW50X2ZuKTtcbiYjNDM7XHR0ZXN0X2luaXQoMTIyLCBzZXJ2ZXJfZm4sIGNsaWVudF9mbik7XG4gXHRyZXR1cm4gMDtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvYW9saWIuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vbGliL2FvbGliLmhcbmluZGV4IGViYjI4OTljMTJmZTAuLjUzYmUxNzQ0MjM3ZWUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9hb2xpYi5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9hb2xpYi5oXG5AQCAtNDA0LDcgJiM0Mzs0MDQsOCBAQCBzdGF0aWMgaW5saW5lIGludCB0ZXN0X3ByZXBhcmVfZGVmX2tleShzdHJ1Y3QgdGNwX2FvX2FkZCAqYW8sXG4gXG4gZXh0ZXJuIGludCB0ZXN0X2dldF9vbmVfYW8oaW50IHNrLCBzdHJ1Y3QgdGNwX2FvX2dldHNvY2tvcHQgKm91dCxcbiBcdFx0XHQgICB2b2lkICphZGRyLCBzaXplX3QgYWRkcl9zeixcbi1cdFx0XHQgICB1aW50OF90IHByZWZpeCwgdWludDhfdCBzbmRpZCwgdWludDhfdCByY3ZpZCk7XG4mIzQzO1x0XHRcdCAgIHVpbnQ4X3QgcHJlZml4LCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkLFxuJiM0MztcdFx0XHQgICB1aW50OF90IGtleWZsYWdzLCBpbnQgaWZpbmRleCk7XG4gZXh0ZXJuIGludCB0ZXN0X2dldF9hb19pbmZvKGludCBzaywgc3RydWN0IHRjcF9hb19pbmZvX29wdCAqb3V0KTtcbiBleHRlcm4gaW50IHRlc3Rfc2V0X2FvX2luZm8oaW50IHNrLCBzdHJ1Y3QgdGNwX2FvX2luZm9fb3B0ICppbik7XG4gZXh0ZXJuIGludCB0ZXN0X2NtcF9nZXRzb2Nrb3B0X3NldHNvY2tvcHQoY29uc3Qgc3RydWN0IHRjcF9hb19hZGQgKmEsXG5AQCAtNDE4LDcgJiM0Mzs0MTksOCBAQCBzdGF0aWMgaW5saW5lIGludCB0ZXN0X3ZlcmlmeV9zb2NrZXRfa2V5KGludCBzaywgc3RydWN0IHRjcF9hb19hZGQgKmtleSlcbiBcdGludCBlcnI7XG4gXG4gXHRlcnIgPSB0ZXN0X2dldF9vbmVfYW8oc2ssIFx1MDAyNmtleTIsIFx1MDAyNmtleS1cdTAwM2VhZGRyLCBzaXplb2Yoa2V5LVx1MDAzZWFkZHIpLFxuLVx0XHRcdCAgICAgIGtleS1cdTAwM2VwcmVmaXgsIGtleS1cdTAwM2VzbmRpZCwga2V5LVx1MDAzZXJjdmlkKTtcbiYjNDM7XHRcdFx0ICAgICAga2V5LVx1MDAzZXByZWZpeCwga2V5LVx1MDAzZXNuZGlkLCBrZXktXHUwMDNlcmN2aWQsXG4mIzQzO1x0XHRcdCAgICAgIGtleS1cdTAwM2VrZXlmbGFncywga2V5LVx1MDAzZWlmaW5kZXgpO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9zb2NrLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9zb2NrLmNcbmluZGV4IGVmOGU5MDMxZDQ3YTMuLjJlN2IwNmExYTE1NjcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9zb2NrLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vbGliL3NvY2suY1xuQEAgLTI1Miw3ICYjNDM7MjUyLDcgQEAgc3RhdGljIGludCB0ZXN0X2dldF9hb19rZXlzX25yKGludCBzaylcbiBcbiBpbnQgdGVzdF9nZXRfb25lX2FvKGludCBzaywgc3RydWN0IHRjcF9hb19nZXRzb2Nrb3B0ICpvdXQsXG4gXHRcdHZvaWQgKmFkZHIsIHNpemVfdCBhZGRyX3N6LCB1aW50OF90IHByZWZpeCxcbi1cdFx0dWludDhfdCBzbmRpZCwgdWludDhfdCByY3ZpZClcbiYjNDM7XHRcdHVpbnQ4X3Qgc25kaWQsIHVpbnQ4X3QgcmN2aWQsIHVpbnQ4X3Qga2V5ZmxhZ3MsIGludCBpZmluZGV4KVxuIHtcbiBcdHN0cnVjdCB0Y3BfYW9fZ2V0c29ja29wdCB0bXAgPSB7fTtcbiBcdHNvY2tsZW5fdCB0bXBfc3ogPSBzaXplb2YodG1wKTtcbkBAIC0yNjIsNiAmIzQzOzI2Miw4IEBAIGludCB0ZXN0X2dldF9vbmVfYW8oaW50IHNrLCBzdHJ1Y3QgdGNwX2FvX2dldHNvY2tvcHQgKm91dCxcbiBcdHRtcC5wcmVmaXggPSBwcmVmaXg7XG4gXHR0bXAuc25kaWQgID0gc25kaWQ7XG4gXHR0bXAucmN2aWQgID0gcmN2aWQ7XG4mIzQzO1x0dG1wLmtleWZsYWdzID0ga2V5ZmxhZ3M7XG4mIzQzO1x0dG1wLmlmaW5kZXggPSBpZmluZGV4O1xuIFx0dG1wLm5rZXlzICA9IDE7XG4gXG4gXHRyZXQgPSBnZXRzb2Nrb3B0KHNrLCBJUFBST1RPX1RDUCwgVENQX0FPX0dFVF9LRVlTLCBcdTAwMjZ0bXAsIFx1MDAyNnRtcF9zeik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTU6NTY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RDUF9BTyYjMzQ7LAogICAgJiMzNDtORVRfVlJGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGNwX3BhcnNlX2FvJiMzNDssCiAgICAmIzM0O3RjcF92NF9wYXJzZV9hbyYjMzQ7LAogICAgJiMzNDt0Y3BfdjZfcGFyc2VfYW8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gVENQLUFPIHNldHNvY2tvcHQgaGFuZGxpbmcgd2hlcmUgYGNtZC5pZmluZGV4YCB3YXMgbm90IGFzc2lnbmVkIHRvIGBsM2luZGV4YCB3aGVuIGRlbGV0aW5nIGEga2V5LCBwcmV2ZW50aW5nIGRlbGV0aW9uIG9mIGludGVyZmFjZS1zY29wZWQga2V5cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDExMTdjOWZkZjhiYzA3MjRjMjAxN2IyZDU4OTcyY2NmOTc5YzMzM2EKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyAyMSAxNTo1Njo0MCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9hby5jIGIvbmV0L2lwdjQvdGNwX2FvLmMKaW5kZXggNTA5NDI2NzQ0N2FlZS4uMjY4NjQ2MjFlNmRlZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2FvLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvdGNwX2FvLmMKQEAgLTE4MzQsNiAmIzQzOzE4MzQsOSBAQCBzdGF0aWMgaW50IHRjcF9hb19kZWxfY21kKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgc2hvcnQgaW50IGZhbWlseSwKIAlpZiAoY21kLmlmaW5kZXggJmFtcDsmYW1wOyAhKGNtZC5rZXlmbGFncyAmYW1wOyBUQ1BfQU9fS0VZRl9JRklOREVYKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKJiM0MzsJaWYgKGNtZC5rZXlmbGFncyAmYW1wOyBUQ1BfQU9fS0VZRl9JRklOREVYKQomIzQzOwkJbDNpbmRleCA9IGNtZC5pZmluZGV4OwomIzQzOwogCWFvX2luZm8gPSBzZXRzb2Nrb3B0X2FvX2luZm8oc2spOwogCWlmIChJU19FUlIoYW9faW5mbykpCiAJCXJldHVybiBQVFJfRVJSKGFvX2luZm8pOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9rZXktbWFuYWdlbWVudC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9rZXktbWFuYWdlbWVudC5jCmluZGV4IGQ4NmJiMzgwYjc5ZjcuLjFlMDFlODA1ZGJhNzIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8va2V5LW1hbmFnZW1lbnQuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2tleS1tYW5hZ2VtZW50LmMKQEAgLTYzLDcgJiM0Mzs2Myw4IEBAIHN0YXRpYyBpbnQgcHJlcGFyZV9sc2sodW5pb24gdGNwX2FkZHIgKmFkZHIsIHVpbnQ4X3Qgc25kaWQsIHVpbnQ4X3QgcmN2aWQpCiAJcmV0dXJuIHNrOwogfQogCi1zdGF0aWMgaW50IHRlc3RfZGVsX2tleShpbnQgc2ssIHVpbnQ4X3Qgc25kaWQsIHVpbnQ4X3QgcmN2aWQsIGJvb2wgYXN5bmMsCiYjNDM7c3RhdGljIGludCB0ZXN0X2RlbF9rZXkoaW50IHNrLCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkLCBpbnQgaWZpbmRleCwKJiM0MzsJCQlib29sIGFzeW5jLAogCQkJaW50IGN1cnJlbnRfa2V5LCBpbnQgcm5leHRfa2V5KQogewogCXN0cnVjdCB0Y3BfYW9faW5mb19vcHQgYW9faW5mbyA9IHt9OwpAQCAtNzYsNiAmIzQzOzc3LDEwIEBAIHN0YXRpYyBpbnQgdGVzdF9kZWxfa2V5KGludCBzaywgdWludDhfdCBzbmRpZCwgdWludDhfdCByY3ZpZCwgYm9vbCBhc3luYywKIAlkZWwucHJlZml4ID0gREVGQVVMVF9URVNUX1BSRUZJWDsKIAlkZWwuc25kaWQgPSBzbmRpZDsKIAlkZWwucmN2aWQgPSByY3ZpZDsKJiM0MzsJaWYgKGlmaW5kZXgpIHsKJiM0MzsJCWRlbC5rZXlmbGFncyA9IFRDUF9BT19LRVlGX0lGSU5ERVg7CiYjNDM7CQlkZWwuaWZpbmRleCA9IGlmaW5kZXg7CiYjNDM7CX0KIAogCWlmIChjdXJyZW50X2tleSAmZ3Q7PSAwKSB7CiAJCWRlbC5zZXRfY3VycmVudCA9IDE7CkBAIC05NSw3ICYjNDM7MTAwLDggQEAgc3RhdGljIGludCB0ZXN0X2RlbF9rZXkoaW50IHNrLCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkLCBib29sIGFzeW5jLAogCiAJdGNwX2FkZHJfdG9fc29ja2FkZHJfaW4oJmFtcDtzb2NrYWRkciwgJmFtcDt0aGlzX2lwX2Rlc3QsIDApOwogCWVyciA9IHRlc3RfZ2V0X29uZV9hbyhzaywgJmFtcDtrZXksICZhbXA7c29ja2FkZHIsIHNpemVvZihzb2NrYWRkciksCi0JCQkgICAgICBERUZBVUxUX1RFU1RfUFJFRklYLCBzbmRpZCwgcmN2aWQpOwomIzQzOwkJCSAgICAgIERFRkFVTFRfVEVTVF9QUkVGSVgsIHNuZGlkLCByY3ZpZCwKJiM0MzsJCQkgICAgICBkZWwua2V5ZmxhZ3MsIGRlbC5pZmluZGV4KTsKIAlpZiAoIWVycikKIAkJcmV0dXJuIC1FRVhJU1Q7CiAJaWYgKGVyciAhPSAtRTJCSUcpCkBAIC0xMTIsMTIgJiM0MzsxMTgsMTIgQEAgc3RhdGljIGludCB0ZXN0X2RlbF9rZXkoaW50IHNrLCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkLCBib29sIGFzeW5jLAogfQogCiBzdGF0aWMgdm9pZCB0cnlfZGVsZXRlX2tleShjaGFyICp0c3RfbmFtZSwgaW50IHNrLCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkLAotCQkJICAgYm9vbCBhc3luYywgaW50IGN1cnJlbnRfa2V5LCBpbnQgcm5leHRfa2V5LAomIzQzOwkJCSAgIGludCBpZmluZGV4LCBib29sIGFzeW5jLCBpbnQgY3VycmVudF9rZXksIGludCBybmV4dF9rZXksCiAJCQkgICBmYXVsdF90IGluaikKIHsKIAlpbnQgZXJyOwogCi0JZXJyID0gdGVzdF9kZWxfa2V5KHNrLCBzbmRpZCwgcmN2aWQsIGFzeW5jLCBjdXJyZW50X2tleSwgcm5leHRfa2V5KTsKJiM0MzsJZXJyID0gdGVzdF9kZWxfa2V5KHNrLCBzbmRpZCwgcmN2aWQsIGlmaW5kZXgsIGFzeW5jLCBjdXJyZW50X2tleSwgcm5leHRfa2V5KTsKIAlpZiAoKGVyciA9PSAtRUJVU1kgJmFtcDsmYW1wOyBmYXVsdChCVVNZKSkgfHwgKGVyciA9PSAtRUlOVkFMICZhbXA7JmFtcDsgZmF1bHQoQ1VSUk5FWFQpKSkgewogCQl0ZXN0X29rKCYjMzQ7JXM6IGtleSBkZWxldGlvbiB3YXMgcHJldmVudGVkJiMzNDssIHRzdF9uYW1lKTsKIAkJcmV0dXJuOwpAQCAtMjM2LDE1ICYjNDM7MjQyLDE1IEBAIHN0YXRpYyB2b2lkIGNoZWNrX2Nsb3NlZF9zb2NrZXQodm9pZCkKIAlpbnQgc2s7CiAKIAlzayA9IHByZXBhcmVfc2soJmFtcDt0aGlzX2lwX2Rlc3QsIDIwMCwgMjAwKTsKLQl0cnlfZGVsZXRlX2tleSgmIzM0O2Nsb3NlZCBzb2NrZXQsIGRlbGV0ZSBhIGtleSYjMzQ7LCBzaywgMjAwLCAyMDAsIDAsIC0xLCAtMSwgMCk7Ci0JdHJ5X2RlbGV0ZV9rZXkoJiMzNDtjbG9zZWQgc29ja2V0LCBkZWxldGUgYWxsIGtleXMmIzM0Oywgc2ssIDEwMCwgMTAwLCAwLCAtMSwgLTEsIDApOwomIzQzOwl0cnlfZGVsZXRlX2tleSgmIzM0O2Nsb3NlZCBzb2NrZXQsIGRlbGV0ZSBhIGtleSYjMzQ7LCBzaywgMjAwLCAyMDAsIDAsIDAsIC0xLCAtMSwgMCk7CiYjNDM7CXRyeV9kZWxldGVfa2V5KCYjMzQ7Y2xvc2VkIHNvY2tldCwgZGVsZXRlIGFsbCBrZXlzJiMzNDssIHNrLCAxMDAsIDEwMCwgMCwgMCwgLTEsIC0xLCAwKTsKIAljbG9zZShzayk7CiAKIAlzayA9IHByZXBhcmVfc2soJmFtcDt0aGlzX2lwX2Rlc3QsIDIwMCwgMjAwKTsKIAlpZiAodGVzdF9zZXRfa2V5KHNrLCAxMDAsIDIwMCkpCiAJCXRlc3RfZXJyb3IoJiMzNDtmYWlsZWQgdG8gc2V0IGN1cnJlbnQvcm5leHQga2V5cyYjMzQ7KTsKLQl0cnlfZGVsZXRlX2tleSgmIzM0O2Nsb3NlZCBzb2NrZXQsIGRlbGV0ZSBjdXJyZW50IGtleSYjMzQ7LCBzaywgMTAwLCAxMDAsIDAsIC0xLCAtMSwgRkFVTFRfQlVTWSk7Ci0JdHJ5X2RlbGV0ZV9rZXkoJiMzNDtjbG9zZWQgc29ja2V0LCBkZWxldGUgcm5leHQga2V5JiMzNDssIHNrLCAyMDAsIDIwMCwgMCwgLTEsIC0xLCBGQVVMVF9CVVNZKTsKJiM0MzsJdHJ5X2RlbGV0ZV9rZXkoJiMzNDtjbG9zZWQgc29ja2V0LCBkZWxldGUgY3VycmVudCBrZXkmIzM0Oywgc2ssIDEwMCwgMTAwLCAwLCAwLCAtMSwgLTEsIEZBVUxUX0JVU1kpOwomIzQzOwl0cnlfZGVsZXRlX2tleSgmIzM0O2Nsb3NlZCBzb2NrZXQsIGRlbGV0ZSBybmV4dCBrZXkmIzM0Oywgc2ssIDIwMCwgMjAwLCAwLCAwLCAtMSwgLTEsIEZBVUxUX0JVU1kpOwogCWNsb3NlKHNrKTsKIAogCXNrID0gcHJlcGFyZV9zaygmYW1wO3RoaXNfaXBfZGVzdCwgMjAwLCAyMDApOwpAQCAtMjU0LDEwICYjNDM7MjYwLDEyIEBAIHN0YXRpYyB2b2lkIGNoZWNrX2Nsb3NlZF9zb2NrZXQodm9pZCkKIAlpZiAodGVzdF9hZGRfa2V5KHNrLCAmIzM0O0dsb3J5IHRvIFVrcmFpbmUhJiMzNDssIHRoaXNfaXBfZGVzdCwKIAkJCSBERUZBVUxUX1RFU1RfUFJFRklYLCAxMiwgMTMpKQogCQl0ZXN0X2Vycm9yKCYjMzQ7dGVzdF9hZGRfa2V5KCkmIzM0Oyk7Ci0JdHJ5X2RlbGV0ZV9rZXkoJiMzNDtjbG9zZWQgc29ja2V0LCBkZWxldGUgYSBrZXkgJiM0Mzsgc2V0IGN1cnJlbnQvcm5leHQmIzM0Oywgc2ssIDEwMCwgMTAwLCAwLCAxMCwgMTMsIDApOwotCXRyeV9kZWxldGVfa2V5KCYjMzQ7Y2xvc2VkIHNvY2tldCwgZm9yY2UtZGVsZXRlIGN1cnJlbnQga2V5JiMzNDssIHNrLCAxMCwgMTEsIDAsIDIwMCwgLTEsIDApOwotCXRyeV9kZWxldGVfa2V5KCYjMzQ7Y2xvc2VkIHNvY2tldCwgZm9yY2UtZGVsZXRlIHJuZXh0IGtleSYjMzQ7LCBzaywgMTIsIDEzLCAwLCAtMSwgMjAwLCAwKTsKLQl0cnlfZGVsZXRlX2tleSgmIzM0O2Nsb3NlZCBzb2NrZXQsIGRlbGV0ZSBjdXJyZW50JiM0MztybmV4dCBrZXkmIzM0Oywgc2ssIDIwMCwgMjAwLCAwLCAtMSwgLTEsIEZBVUxUX0JVU1kpOwomIzQzOwl0cnlfZGVsZXRlX2tleSgmIzM0O2Nsb3NlZCBzb2NrZXQsIGRlbGV0ZSBhIGtleSAmIzQzOyBzZXQgY3VycmVudC9ybmV4dCYjMzQ7LCBzaywKJiM0MzsJCSAgICAgICAxMDAsIDEwMCwgMCwgMCwgMTAsIDEzLCAwKTsKJiM0MzsJdHJ5X2RlbGV0ZV9rZXkoJiMzNDtjbG9zZWQgc29ja2V0LCBmb3JjZS1kZWxldGUgY3VycmVudCBrZXkmIzM0Oywgc2ssIDEwLCAxMSwgMCwgMCwgMjAwLCAtMSwgMCk7CiYjNDM7CXRyeV9kZWxldGVfa2V5KCYjMzQ7Y2xvc2VkIHNvY2tldCwgZm9yY2UtZGVsZXRlIHJuZXh0IGtleSYjMzQ7LCBzaywgMTIsIDEzLCAwLCAwLCAtMSwgMjAwLCAwKTsKJiM0MzsJdHJ5X2RlbGV0ZV9rZXkoJiMzNDtjbG9zZWQgc29ja2V0LCBkZWxldGUgY3VycmVudCYjNDM7cm5leHQga2V5JiMzNDssIHNrLAomIzQzOwkJICAgICAgIDIwMCwgMjAwLCAwLCAwLCAtMSwgLTEsIEZBVUxUX0JVU1kpOwogCWNsb3NlKHNrKTsKIAogCXNrID0gcHJlcGFyZV9zaygmYW1wO3RoaXNfaXBfZGVzdCwgMjAwLCAyMDApOwpAQCAtMjcyLDYgJiM0MzsyODAsMTggQEAgc3RhdGljIHZvaWQgY2hlY2tfY2xvc2VkX3NvY2tldCh2b2lkKQogCQkJCSAgdGhpc19pcF9kZXN0LCBERUZBVUxUX1RFU1RfUFJFRklYLAogCQkJCSAgZmFsc2UsIHRydWUsIDIwLCAxMCwgMCk7CiAJY2xvc2Uoc2spOwomIzQzOwomIzQzOwlpZiAoIXNob3VsZF9za2lwX3Rlc3QoJiMzNDtjbG9zZWQgc29ja2V0LCBhZGQgJiM0MzsgZGVsZXRlIFZSRi1zY29wZWQga2V5JiMzNDssCiYjNDM7CQkJICAgICAgS0NPTkZJR19ORVRfVlJGKSkgewomIzQzOwkJc2sgPSBwcmVwYXJlX3NrKCZhbXA7dGhpc19pcF9kZXN0LCAyMDAsIDIwMCk7CiYjNDM7CQlpZiAodGVzdF9hZGRfa2V5X3ZyZihzaywgU0VDT05EX1BBU1NXT1JELCBUQ1BfQU9fS0VZRl9JRklOREVYLAomIzQzOwkJCQkgICAgIHRoaXNfaXBfZGVzdCwgREVGQVVMVF9URVNUX1BSRUZJWCwKJiM0MzsJCQkJICAgICB0ZXN0X3ZyZl9pZmluZGV4LCAyMDEsIDIwMSkpCiYjNDM7CQkJdGVzdF9lcnJvcigmIzM0O3Rlc3RfYWRkX2tleV92cmYoKSYjMzQ7KTsKJiM0MzsJCXRyeV9kZWxldGVfa2V5KCYjMzQ7Y2xvc2VkIHNvY2tldCwgYWRkICYjNDM7IGRlbGV0ZSBWUkYtc2NvcGVkIGtleSYjMzQ7LCBzaywgMjAxLCAyMDEsCiYjNDM7CQkJICAgICAgIHRlc3RfdnJmX2lmaW5kZXgsIDAsIC0xLCAtMSwgMCk7CiYjNDM7CQljbG9zZShzayk7CiYjNDM7CX0KIH0KIAogc3RhdGljIHZvaWQgYXNzZXJ0X25vX2N1cnJlbnRfcm5leHQoY29uc3QgY2hhciAqdHN0X21zZywgaW50IHNrKQpAQCAtMzIyLDggJiM0MzszNDIsOCBAQCBzdGF0aWMgdm9pZCBjaGVja19saXN0ZW5fc29ja2V0KHZvaWQpCiAJaW50IHNrLCBlcnI7CiAKIAlzayA9IHByZXBhcmVfbHNrKCZhbXA7dGhpc19pcF9kZXN0LCAyMDAsIDIwMCk7Ci0JdHJ5X2RlbGV0ZV9rZXkoJiMzNDtsaXN0ZW4gc29ja2V0LCBkZWxldGUgYSBrZXkmIzM0Oywgc2ssIDIwMCwgMjAwLCAwLCAtMSwgLTEsIDApOwotCXRyeV9kZWxldGVfa2V5KCYjMzQ7bGlzdGVuIHNvY2tldCwgZGVsZXRlIGFsbCBrZXlzJiMzNDssIHNrLCAxMDAsIDEwMCwgMCwgLTEsIC0xLCAwKTsKJiM0MzsJdHJ5X2RlbGV0ZV9rZXkoJiMzNDtsaXN0ZW4gc29ja2V0LCBkZWxldGUgYSBrZXkmIzM0Oywgc2ssIDIwMCwgMjAwLCAwLCAwLCAtMSwgLTEsIDApOwomIzQzOwl0cnlfZGVsZXRlX2tleSgmIzM0O2xpc3RlbiBzb2NrZXQsIGRlbGV0ZSBhbGwga2V5cyYjMzQ7LCBzaywgMTAwLCAxMDAsIDAsIDAsIC0xLCAtMSwgMCk7CiAJY2xvc2Uoc2spOwogCiAJc2sgPSBwcmVwYXJlX2xzaygmYW1wO3RoaXNfaXBfZGVzdCwgMjAwLCAyMDApOwpAQCAtMzQ1LDggJiM0MzszNjUsMTAgQEAgc3RhdGljIHZvaWQgY2hlY2tfbGlzdGVuX3NvY2tldCh2b2lkKQogCWlmIChsaXN0ZW4oc2ssIDEwKSkKIAkJdGVzdF9lcnJvcigmIzM0O2xpc3RlbigpJiMzNDspOwogCWFzc2VydF9ub19jdXJyZW50X3JuZXh0KCYjMzQ7bGlzdGVuKCkgYWZ0ZXIgY3VycmVudC9ybmV4dCBrZXlzIHNldCYjMzQ7LCBzayk7Ci0JdHJ5X2RlbGV0ZV9rZXkoJiMzNDtsaXN0ZW4gc29ja2V0LCBkZWxldGUgY3VycmVudCBrZXkgZnJvbSBiZWZvcmUgbGlzdGVuKCkmIzM0Oywgc2ssIDEwMCwgMTAwLCAwLCAtMSwgLTEsIEZBVUxUX0ZJWE1FKTsKLQl0cnlfZGVsZXRlX2tleSgmIzM0O2xpc3RlbiBzb2NrZXQsIGRlbGV0ZSBybmV4dCBrZXkgZnJvbSBiZWZvcmUgbGlzdGVuKCkmIzM0Oywgc2ssIDIwMCwgMjAwLCAwLCAtMSwgLTEsIEZBVUxUX0ZJWE1FKTsKJiM0MzsJdHJ5X2RlbGV0ZV9rZXkoJiMzNDtsaXN0ZW4gc29ja2V0LCBkZWxldGUgY3VycmVudCBrZXkgZnJvbSBiZWZvcmUgbGlzdGVuKCkmIzM0Oywgc2ssCiYjNDM7CQkgICAgICAgMTAwLCAxMDAsIDAsIDAsIC0xLCAtMSwgRkFVTFRfRklYTUUpOwomIzQzOwl0cnlfZGVsZXRlX2tleSgmIzM0O2xpc3RlbiBzb2NrZXQsIGRlbGV0ZSBybmV4dCBrZXkgZnJvbSBiZWZvcmUgbGlzdGVuKCkmIzM0Oywgc2ssCiYjNDM7CQkgICAgICAgMjAwLCAyMDAsIDAsIDAsIC0xLCAtMSwgRkFVTFRfRklYTUUpOwogCWNsb3NlKHNrKTsKIAogCWFzc2VydF9ub190Y3BfcmVwYWlyKCk7CkBAIC0zNTksMTMgJiM0MzszODEsMTMgQEAgc3RhdGljIHZvaWQgY2hlY2tfbGlzdGVuX3NvY2tldCh2b2lkKQogCQkJIERFRkFVTFRfVEVTVF9QUkVGSVgsIDEyLCAxMykpCiAJCXRlc3RfZXJyb3IoJiMzNDt0ZXN0X2FkZF9rZXkoKSYjMzQ7KTsKIAl0cnlfZGVsZXRlX2tleSgmIzM0O2xpc3RlbiBzb2NrZXQsIGRlbGV0ZSBhIGtleSAmIzQzOyBzZXQgY3VycmVudC9ybmV4dCYjMzQ7LCBzaywKLQkJICAgICAgIDEwMCwgMTAwLCAwLCAxMCwgMTMsIEZBVUxUX0NVUlJORVhUKTsKJiM0MzsJCSAgICAgICAxMDAsIDEwMCwgMCwgMCwgMTAsIDEzLCBGQVVMVF9DVVJSTkVYVCk7CiAJdHJ5X2RlbGV0ZV9rZXkoJiMzNDtsaXN0ZW4gc29ja2V0LCBmb3JjZS1kZWxldGUgY3VycmVudCBrZXkmIzM0Oywgc2ssCi0JCSAgICAgICAxMCwgMTEsIDAsIDIwMCwgLTEsIEZBVUxUX0NVUlJORVhUKTsKJiM0MzsJCSAgICAgICAxMCwgMTEsIDAsIDAsIDIwMCwgLTEsIEZBVUxUX0NVUlJORVhUKTsKIAl0cnlfZGVsZXRlX2tleSgmIzM0O2xpc3RlbiBzb2NrZXQsIGZvcmNlLWRlbGV0ZSBybmV4dCBrZXkmIzM0Oywgc2ssCi0JCSAgICAgICAxMiwgMTMsIDAsIC0xLCAyMDAsIEZBVUxUX0NVUlJORVhUKTsKJiM0MzsJCSAgICAgICAxMiwgMTMsIDAsIDAsIC0xLCAyMDAsIEZBVUxUX0NVUlJORVhUKTsKIAl0cnlfZGVsZXRlX2tleSgmIzM0O2xpc3RlbiBzb2NrZXQsIGRlbGV0ZSBhIGtleSYjMzQ7LCBzaywKLQkJICAgICAgIDIwMCwgMjAwLCAwLCAtMSwgLTEsIDApOwomIzQzOwkJICAgICAgIDIwMCwgMjAwLCAwLCAwLCAtMSwgLTEsIDApOwogCWNsb3NlKHNrKTsKIAogCXNrID0gcHJlcGFyZV9sc2soJmFtcDt0aGlzX2lwX2Rlc3QsIDIwMCwgMjAwKTsKQEAgLTExMzEsNyAmIzQzOzExNTMsNiBAQCBzdGF0aWMgdm9pZCBjaGVja19lc3RhYmxpc2hlZF9zb2NrZXQodm9pZCkKIHsKIAl1bnNpZ25lZCBpbnQgcG9ydCA9IHRlc3Rfc2VydmVyX3BvcnQ7CiAKLQlzZXR1cF92cmZzKCk7CiAJdHJ5X2NsaWVudF9ydW4oJiMzNDtjbGllbnQ6IENoZWNrIGN1cnJlbnQvcm5leHQga2V5cyB1bnNldCBiZWZvcmUgY29ubmVjdCgpJiMzNDssCiAJCSAgICAgICBwb3J0JiM0MzsmIzQzOywgMjAsIC0xLCAtMSk7CiAJdHJ5X2NsaWVudF9ydW4oJiMzNDtjbGllbnQ6IENoZWNrIGN1cnJlbnQvcm5leHQga2V5cyBzZXQgYmVmb3JlIGNvbm5lY3QoKSYjMzQ7LApAQCAtMTE1MCw2ICYjNDM7MTE3MSw3IEBAIHN0YXRpYyB2b2lkICpjbGllbnRfZm4odm9pZCAqYXJnKQogewogCWlmIChpbmV0X3B0b24oVEVTVF9GQU1JTFksIFRFU1RfV1JPTkdfSVAsICZhbXA7d3JvbmdfYWRkcikgIT0gMSkKIAkJdGVzdF9lcnJvcigmIzM0O0NhbiYjMzk7dCBjb252ZXJ0IGlwIGFkZHJlc3MgJXMmIzM0OywgVEVTVF9XUk9OR19JUCk7CiYjNDM7CXNldHVwX3ZyZnMoKTsKIAljaGVja19jbG9zZWRfc29ja2V0KCk7CiAJY2hlY2tfbGlzdGVuX3NvY2tldCgpOwogCWNoZWNrX2VzdGFibGlzaGVkX3NvY2tldCgpOwpAQCAtMTE1OCw2ICYjNDM7MTE4MCw2IEBAIHN0YXRpYyB2b2lkICpjbGllbnRfZm4odm9pZCAqYXJnKQogCiBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogewotCXRlc3RfaW5pdCgxMjEsIHNlcnZlcl9mbiwgY2xpZW50X2ZuKTsKJiM0MzsJdGVzdF9pbml0KDEyMiwgc2VydmVyX2ZuLCBjbGllbnRfZm4pOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvYW9saWIuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vbGliL2FvbGliLmgKaW5kZXggZWJiMjg5OWMxMmZlMC4uNTNiZTE3NDQyMzdlZSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvYW9saWIuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9hb2xpYi5oCkBAIC00MDQsNyAmIzQzOzQwNCw4IEBAIHN0YXRpYyBpbmxpbmUgaW50IHRlc3RfcHJlcGFyZV9kZWZfa2V5KHN0cnVjdCB0Y3BfYW9fYWRkICphbywKIAogZXh0ZXJuIGludCB0ZXN0X2dldF9vbmVfYW8oaW50IHNrLCBzdHJ1Y3QgdGNwX2FvX2dldHNvY2tvcHQgKm91dCwKIAkJCSAgIHZvaWQgKmFkZHIsIHNpemVfdCBhZGRyX3N6LAotCQkJICAgdWludDhfdCBwcmVmaXgsIHVpbnQ4X3Qgc25kaWQsIHVpbnQ4X3QgcmN2aWQpOwomIzQzOwkJCSAgIHVpbnQ4X3QgcHJlZml4LCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkLAomIzQzOwkJCSAgIHVpbnQ4X3Qga2V5ZmxhZ3MsIGludCBpZmluZGV4KTsKIGV4dGVybiBpbnQgdGVzdF9nZXRfYW9faW5mbyhpbnQgc2ssIHN0cnVjdCB0Y3BfYW9faW5mb19vcHQgKm91dCk7CiBleHRlcm4gaW50IHRlc3Rfc2V0X2FvX2luZm8oaW50IHNrLCBzdHJ1Y3QgdGNwX2FvX2luZm9fb3B0ICppbik7CiBleHRlcm4gaW50IHRlc3RfY21wX2dldHNvY2tvcHRfc2V0c29ja29wdChjb25zdCBzdHJ1Y3QgdGNwX2FvX2FkZCAqYSwKQEAgLTQxOCw3ICYjNDM7NDE5LDggQEAgc3RhdGljIGlubGluZSBpbnQgdGVzdF92ZXJpZnlfc29ja2V0X2tleShpbnQgc2ssIHN0cnVjdCB0Y3BfYW9fYWRkICprZXkpCiAJaW50IGVycjsKIAogCWVyciA9IHRlc3RfZ2V0X29uZV9hbyhzaywgJmFtcDtrZXkyLCAmYW1wO2tleS0mZ3Q7YWRkciwgc2l6ZW9mKGtleS0mZ3Q7YWRkciksCi0JCQkgICAgICBrZXktJmd0O3ByZWZpeCwga2V5LSZndDtzbmRpZCwga2V5LSZndDtyY3ZpZCk7CiYjNDM7CQkJICAgICAga2V5LSZndDtwcmVmaXgsIGtleS0mZ3Q7c25kaWQsIGtleS0mZ3Q7cmN2aWQsCiYjNDM7CQkJICAgICAga2V5LSZndDtrZXlmbGFncywga2V5LSZndDtpZmluZGV4KTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9zb2NrLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9zb2NrLmMKaW5kZXggZWY4ZTkwMzFkNDdhMy4uMmU3YjA2YTFhMTU2NyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvc29jay5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vbGliL3NvY2suYwpAQCAtMjUyLDcgJiM0MzsyNTIsNyBAQCBzdGF0aWMgaW50IHRlc3RfZ2V0X2FvX2tleXNfbnIoaW50IHNrKQogCiBpbnQgdGVzdF9nZXRfb25lX2FvKGludCBzaywgc3RydWN0IHRjcF9hb19nZXRzb2Nrb3B0ICpvdXQsCiAJCXZvaWQgKmFkZHIsIHNpemVfdCBhZGRyX3N6LCB1aW50OF90IHByZWZpeCwKLQkJdWludDhfdCBzbmRpZCwgdWludDhfdCByY3ZpZCkKJiM0MzsJCXVpbnQ4X3Qgc25kaWQsIHVpbnQ4X3QgcmN2aWQsIHVpbnQ4X3Qga2V5ZmxhZ3MsIGludCBpZmluZGV4KQogewogCXN0cnVjdCB0Y3BfYW9fZ2V0c29ja29wdCB0bXAgPSB7fTsKIAlzb2NrbGVuX3QgdG1wX3N6ID0gc2l6ZW9mKHRtcCk7CkBAIC0yNjIsNiAmIzQzOzI2Miw4IEBAIGludCB0ZXN0X2dldF9vbmVfYW8oaW50IHNrLCBzdHJ1Y3QgdGNwX2FvX2dldHNvY2tvcHQgKm91dCwKIAl0bXAucHJlZml4ID0gcHJlZml4OwogCXRtcC5zbmRpZCAgPSBzbmRpZDsKIAl0bXAucmN2aWQgID0gcmN2aWQ7CiYjNDM7CXRtcC5rZXlmbGFncyA9IGtleWZsYWdzOwomIzQzOwl0bXAuaWZpbmRleCA9IGlmaW5kZXg7CiAJdG1wLm5rZXlzICA9IDE7CiAKIAlyZXQgPSBnZXRzb2Nrb3B0KHNrLCBJUFBST1RPX1RDUCwgVENQX0FPX0dFVF9LRVlTLCAmYW1wO3RtcCwgJmFtcDt0bXBfc3opOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxNTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2Mzk1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVENQLUFPIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoLiBJdCBzZWVtcyB3ZSBoYXZlIGEgbW9kaWZpY2F0aW9uIHRvIGBuZXQvaXB2NC90Y3BfYW8uY2AsIGFsb25nIHdpdGggc29tZSBhY2NvbXBhbnlpbmcgc2VsZnRlc3RzLCB3aGljaCBpcyBzdGFuZGFyZCBwcm9jZWR1cmUuIFRoaXMgYXJlYSBjb25jZXJucyB0aGUgVENQIEF1dGhlbnRpY2F0aW9uIE9wdGlvbiwgb3IgVENQLUFPLCB3aGljaCBpcyBhIGtleSBwYXJ0IG9mIHNlY3VyaW5nIFRDUCBjb25uZWN0aW9ucy4KCkxldCYjMzk7cyBkaXNzZWN0IHRoZSBjb3JlIGNoYW5nZSBpbiBgdGNwX2FvX2RlbF9jbWRgLiBJdCYjMzk7cyBzdHJhaWdodGZvcndhcmQ6IGEgbmV3IGNvbmRpdGlvbmFsIGFzc2lnbm1lbnQgaXMgaW50cm9kdWNlZC4gU3BlY2lmaWNhbGx5LCB0aGUgY29kZSBub3cgaW5jbHVkZXM6CgpgYGBjCglpZiAoY21kLmtleWZsYWdzICZhbXA7IFRDUF9BT19LRVlGX0lGSU5ERVgpCgkJbDNpbmRleCA9IGNtZC5pZmluZGV4OwpgYGAKCkVzc2VudGlhbGx5LCBpZiB0aGUgYFRDUF9BT19LRVlGX0lGSU5ERVhgIGZsYWcgaXMgc2V0IHdpdGhpbiBgY21kLmtleWZsYWdzYCwgdGhlbiB0aGUgdmFyaWFibGUgYGwzaW5kZXhgIGdldHMgYXNzaWduZWQgdGhlIHZhbHVlIG9mIGBjbWQuaWZpbmRleGAuIFRoaXMgcG9pbnRzIHRvd2FyZHMgYXNzb2NpYXRpbmcgYSBzcGVjaWZpYyBMYXllciAzIGludGVyZmFjZSBpbmRleCB3aXRoIHRoZSBBTyBjb25maWd1cmF0aW9uIGR1cmluZyBkZWxldGlvbi4gVGhlIHVzZSBvZiBiaXR3aXNlIEFORCBvcGVyYXRpb24gc3VnZ2VzdHMgdGhhdCBga2V5ZmxhZ3NgIGlzIHByb2JhYmx5IGEgYml0bWFzaywgYWxsb3dpbmcgbXVsdGlwbGUgZmxhZ3MgdG8gYmUgc2V0IGF0IG9uY2UuIFRoaXMgYWxpZ25zIHdpdGggaG93IHRoZXNlIHR5cGVzIG9mIG9wdGlvbnMgYXJlIHVzdWFsbHkgaGFuZGxlZCBpbiB0aGUga2VybmVsLgoKSSBuZWVkIHRvIGNvbmZpcm0gcHJlY2lzZWx5IHdoYXQgYGwzaW5kZXhgIHJlcHJlc2VudHMgaW4gdGhpcyBjb250ZXh0LiBJcyBpdCB0aGUgaW50ZXJmYWNlIGluZGV4IGJlaW5nIHVzZWQgYnkgdGhlIEFPIGNvbmZpZ3VyYXRpb24gb3Igc29tZXRoaW5nIGVsc2UuIEkmIzM5O2xsIG5lZWQgdG8gZm9sbG93IHRoZSB1c2Ugb2YgYGwzaW5kZXhgIGZ1cnRoZXIgd2l0aGluIGB0Y3BfYW8uY2AgKGFuZCBwb3RlbnRpYWxseSBvdGhlciBmaWxlcykgdG8gZnVsbHkgZ3Jhc3AgdGhlIHJhbWlmaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuIEl0JiMzOTtzIGxpa2VseSByZWxhdGVkIHRvIGhvdyB0aGUgQU8gaXMgYXBwbGllZCB0byBhIHNwZWNpZmljIG5ldHdvcmsgaW50ZXJmYWNlLiBUaGlzIHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIGFuZCBwb3NzaWJseSBuZWNlc3NhcnkgYWRkaXRpb24gdG8gc3VwcG9ydCBmaW5lLWdyYWluZWQgY29udHJvbCBvdmVyIFRDUC1BTy4gVGhlIHNlbGZ0ZXN0cyBzaG91bGQgcHJvdmlkZSBjcnVjaWFsIGluc2lnaHRzIGludG8gdGhlIGludGVuZGVkIGJlaGF2aW9yIGFuZCBwb3RlbnRpYWwgZWRnZSBjYXNlcy4gSSYjMzk7bGwgbmVlZCB0byBnbyB0aHJvdWdoIHRoZW0gdGhvcm91Z2hseSB0byBlbnN1cmUgdGhpcyBpcyBzb3VuZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxNTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y3BfYW9fZGVsX2NtZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9hby5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9hby5jPTk5MD10Y3BfaW5ib3VuZF9hb19oYXNoKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC90Y3BfYW8uYy0xMDU1LVx0XHRcdGlmIChrZXkpXG5uZXQvaXB2NC90Y3BfYW8uYzoxMDU2Olx0XHRcdFx0LyogcGFpcnMgd2l0aCB0Y3BfYW9fZGVsX2NtZCAqL1xubmV0L2lwdjQvdGNwX2FvLmMtMTA1Ny1cdFx0XHRcdFdSSVRFX09OQ0UoaW5mby1cdTAwM2VjdXJyZW50X2tleSwga2V5KTtcbi0tXG5uZXQvaXB2NC90Y3BfYW8uYy0xMDY4LVx0ICogLSByZXF1ZXN0IHNvY2tldHMgd291bGQgcmFjZSBvbiB0aG9zZSBrZXkgcG9pbnRlcnNcbm5ldC9pcHY0L3RjcF9hby5jOjEwNjk6XHQgKiAtIHRjcF9hb19kZWxfY21kKCkgYWxsb3dzIGFzeW5jIGtleSByZW1vdmFsXG5uZXQvaXB2NC90Y3BfYW8uYy0xMDcwLVx0ICovXG4tLVxubmV0L2lwdjQvdGNwX2FvLmM9MTc0Nj1zdGF0aWMgaW50IHRjcF9hb19kZWxldGVfa2V5KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRjcF9hb19pbmZvICphb19pbmZvLFxuLS1cbm5ldC9pcHY0L3RjcF9hby5jLTE3OTktI2RlZmluZSBUQ1BfQU9fREVMX0tFWUZfQUxMIChUQ1BfQU9fS0VZRl9JRklOREVYKVxubmV0L2lwdjQvdGNwX2FvLmM6MTgwMDpzdGF0aWMgaW50IHRjcF9hb19kZWxfY21kKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgc2hvcnQgaW50IGZhbWlseSxcbm5ldC9pcHY0L3RjcF9hby5jLTE4MDEtXHRcdFx0ICBzb2NrcHRyX3Qgb3B0dmFsLCBpbnQgb3B0bGVuKVxuLS1cbm5ldC9pcHY0L3RjcF9hby5jPTIwMzg9aW50IHRjcF9wYXJzZV9hbyhzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHVuc2lnbmVkIHNob3J0IGludCBmYW1pbHksXG4tLVxubmV0L2lwdjQvdGNwX2FvLmMtMjA0Ny1cdGNhc2UgVENQX0FPX0RFTF9LRVk6XG5uZXQvaXB2NC90Y3BfYW8uYzoyMDQ4Olx0XHRyZXR1cm4gdGNwX2FvX2RlbF9jbWQoc2ssIGZhbWlseSwgb3B0dmFsLCBvcHRsZW4pO1xubmV0L2lwdjQvdGNwX2FvLmMtMjA0OS1cdGNhc2UgVENQX0FPX0lORk86XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTU6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzYxMgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDEwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFRDUCBBdXRoZW50aWNhdGlvbiBPcHRpb24gKFRDUC1BTykgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGludG8gdGhlIFRDUC1BTyBmdW5jdGlvbmFsaXR5LCBzcGVjaWZpY2FsbHkgaG93IGtleSBkZWxldGlvbiBpcyBoYW5kbGVkLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhlIGB0Y3BfYW9fZGVsX2NtZGAgZnVuY3Rpb24gaXMgdGhlIG9uZSByZXNwb25zaWJsZSBmb3IgdGhlIGFjdHVhbCBkZWxldGlvbiBvZiBrZXlzLiBUaGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGZyb20gYHRjcF9wYXJzZV9hb2Agd2hlbiB0aGUgYFRDUF9BT19ERUxfS0VZYCBvcHRpb24gaXMgcmVjZWl2ZWQuCgpOb3csIHdoZXJlIGRvZXMgYHRjcF9wYXJzZV9hb2AgZml0IGludG8gYWxsIHRoaXM/IEFoLCByaWdodCwgdGhhdCYjMzk7cyBjYWxsZWQgZnJvbSBgZG9fdGNwX3NldHNvY2tvcHRgLiBBbmQgYGRvX3RjcF9zZXRzb2Nrb3B0YCBzZWVtcyB0byBiZSB0aGUgY2VudHJhbCBwb2ludCBmb3IgaGFuZGxpbmcgYWxsIHRoZSB2YXJpb3VzIFRDUC1BTyBvcGVyYXRpb25zIOKAkyBhZGRpbmcsIGRlbGV0aW5nLCBnZXR0aW5nIGluZm9ybWF0aW9uLCBhbmQgc28gb24uIFdlIHNlZSB0aGF0IGB0Y3BfcGFyc2VfYW9gIGlzIGluZGVlZCBjYWxsZWQgZm9yIGFsbCBvZiB0aG9zZTogYFRDUF9BT19BRERfS0VZYCwgYFRDUF9BT19ERUxfS0VZYCwgYFRDUF9BT19JTkZPYCwgYW5kIHByb2JhYmx5IG90aGVycyB0b28uCgpUaGVyZWZvcmUsIHRoZSBvYnZpb3VzIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIGB0Y3BfcGFyc2VfYW9gIGFuZCBgZG9fdGNwX3NldHNvY2tvcHRgIG1vcmUgY2xvc2VseSB0byBncmFzcCB0aGUgb3ZlcmFsbCB3b3JrZmxvdyBhbmQgaG93IHRoaXMga2V5IGRlbGV0aW9uIGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBUQ1AtQU8gY29uZmlndXJhdGlvbiBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDE1OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNwX3BhcnNlX2FvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDE1OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwMjAKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlOgoKKipJbnZlc3RpZ2F0aW5nIGB0Y3BfcGFyc2VfYW9gKioKCk9rYXksIHNvIEkgc2VlIGB0Y3BfcGFyc2VfYW9gIGlzIHR1Y2tlZCBhd2F5IGluIGBuZXQvaXB2NC90Y3BfYW8uY2AuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIGJ1dCBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSAqdXNlZCouIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayB0aGUgY2FsbCBncmFwaCB0byBzZWUgd2hlcmUgdGhlIGZ1bmN0aW9uIGlzIGJlaW5nIGludm9rZWQuIFVuZGVyc3RhbmRpbmcgaXRzIGNhbGwgc2l0ZXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHBpY3R1cmUgb2YgaXRzIGZ1bmN0aW9uIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBvdmVyYWxsIG5ldHdvcmsgc3RhY2suIFRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgaXRzIHJvbGUuIEtub3dpbmcgdGhlIGNvbnRleHQgb2YgaXRzIGNhbGxzIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIGl0cyBwdXJwb3NlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDE1OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF9wYXJzZV9hbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC90Y3BfYW8uaD0xOTY9aW50IHRjcF9hb19oYXNoX3NrYih1bnNpZ25lZCBzaG9ydCBpbnQgZmFtaWx5LFxuLS1cbmluY2x1ZGUvbmV0L3RjcF9hby5oLTE5OS1cdFx0ICAgIGNvbnN0IHU4ICp0a2V5LCBpbnQgaGFzaF9vZmZzZXQsIHUzMiBzbmUpO1xuaW5jbHVkZS9uZXQvdGNwX2FvLmg6MjAwOmludCB0Y3BfcGFyc2VfYW8oc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCB1bnNpZ25lZCBzaG9ydCBpbnQgZmFtaWx5LFxuaW5jbHVkZS9uZXQvdGNwX2FvLmgtMjAxLVx0XHQgc29ja3B0cl90IG9wdHZhbCwgaW50IG9wdGxlbik7XG4tLVxubmV0L2lwdjQvdGNwX2FvLmM9MTk0OT1zdGF0aWMgaW50IHRjcF9hb19pbmZvX2NtZChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIHNob3J0IGludCBmYW1pbHksXG4tLVxubmV0L2lwdjQvdGNwX2FvLmMtMjAzNy1cbm5ldC9pcHY0L3RjcF9hby5jOjIwMzg6aW50IHRjcF9wYXJzZV9hbyhzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHVuc2lnbmVkIHNob3J0IGludCBmYW1pbHksXG5uZXQvaXB2NC90Y3BfYW8uYy0yMDM5LVx0XHQgc29ja3B0cl90IG9wdHZhbCwgaW50IG9wdGxlbilcbi0tXG5uZXQvaXB2NC90Y3BfYW8uYz0yMDU3PWludCB0Y3BfdjRfcGFyc2VfYW8oc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCBzb2NrcHRyX3Qgb3B0dmFsLCBpbnQgb3B0bGVuKVxubmV0L2lwdjQvdGNwX2FvLmMtMjA1OC17XG5uZXQvaXB2NC90Y3BfYW8uYzoyMDU5Olx0cmV0dXJuIHRjcF9wYXJzZV9hbyhzaywgY21kLCBBRl9JTkVULCBvcHR2YWwsIG9wdGxlbik7XG5uZXQvaXB2NC90Y3BfYW8uYy0yMDYwLX1cbi0tXG5uZXQvaXB2Ni90Y3BfYW8uYz0xMjc9aW50IHRjcF92Nl9wYXJzZV9hbyhzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsXG4tLVxubmV0L2lwdjYvdGNwX2FvLmMtMTI5LXtcbm5ldC9pcHY2L3RjcF9hby5jOjEzMDpcdHJldHVybiB0Y3BfcGFyc2VfYW8oc2ssIGNtZCwgQUZfSU5FVDYsIG9wdHZhbCwgb3B0bGVuKTtcbm5ldC9pcHY2L3RjcF9hby5jLTEzMS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTU6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODcwMwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHN1bW1hcnk6CgoqKkRpZ2dpbmcgaW50byB0aGUgYHRjcF9wYXJzZV9hb2AgZnVuY3Rpb25zKioKClJpZ2h0LCBzbyBgdGNwX3Y0X3BhcnNlX2FvYCBhbmQgYHRjcF92Nl9wYXJzZV9hb2AuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJdCYjMzk7cyBhbHdheXMgYSBnb29kIHByYWN0aWNlLCBhbmQgYSBmaXJzdCBzdGVwIGluIGFuYWx5c2lzLCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGdyYXBoIG9mIHRoZXNlIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGVzZSBzcGVjaWZpYyBmdW5jdGlvbnMgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dHMgaW4gd2hpY2ggdGhleSYjMzk7cmUgYmVpbmcgaW52b2tlZC4gS25vd2luZyB0aGUgY2FsbGluZyBmdW5jdGlvbnMgZ2l2ZXMgaW1tZWRpYXRlIGNvbnRleHQsIGFuZCBsZXRzIG1lIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyB0cmlnZ2VyaW5nIHRoZXNlIHBhcnNpbmcgcm91dGluZXMuIFRoaXMgaXMgZ29pbmcgdG8gYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlIGhlcmUuIExldCYjMzk7cyBzZWUgd2hlcmUgdGhleSYjMzk7cmUgYmVpbmcgKmNhbGxlZCogZnJvbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTU6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNwX3Y0X3BhcnNlX2FvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3RjcF9hby5oPTIzMD1pbnQgdGNwX2FvX3ByZXBhcmVfcmVzZXQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmluY2x1ZGUvbmV0L3RjcF9hby5oLTIzNS0vKiBpcHY0IHNwZWNpZmljIGZ1bmN0aW9ucyAqL1xuaW5jbHVkZS9uZXQvdGNwX2FvLmg6MjM2OmludCB0Y3BfdjRfcGFyc2VfYW8oc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCBzb2NrcHRyX3Qgb3B0dmFsLCBpbnQgb3B0bGVuKTtcbmluY2x1ZGUvbmV0L3RjcF9hby5oLTIzNy1zdHJ1Y3QgdGNwX2FvX2tleSAqdGNwX3Y0X2FvX2xvb2t1cChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICphZGRyX3NrLFxuLS1cbm5ldC9pcHY0L3RjcF9hby5jPTIwMzg9aW50IHRjcF9wYXJzZV9hbyhzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHVuc2lnbmVkIHNob3J0IGludCBmYW1pbHksXG4tLVxubmV0L2lwdjQvdGNwX2FvLmMtMjA1Ni1cbm5ldC9pcHY0L3RjcF9hby5jOjIwNTc6aW50IHRjcF92NF9wYXJzZV9hbyhzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHNvY2twdHJfdCBvcHR2YWwsIGludCBvcHRsZW4pXG5uZXQvaXB2NC90Y3BfYW8uYy0yMDU4LXtcbi0tXG5uZXQvaXB2NC90Y3BfaXB2NC5jPTIzNzE9c3RhdGljIGNvbnN0IHN0cnVjdCB0Y3Bfc29ja19hZl9vcHMgdGNwX3NvY2tfaXB2NF9zcGVjaWZpYyA9IHtcbi0tXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTIzNzktXHQuY2FsY19hb19oYXNoXHRcdD0gdGNwX3Y0X2FvX2hhc2hfc2tiLFxubmV0L2lwdjQvdGNwX2lwdjQuYzoyMzgwOlx0LmFvX3BhcnNlXHRcdD0gdGNwX3Y0X3BhcnNlX2FvLFxubmV0L2lwdjQvdGNwX2lwdjQuYy0yMzgxLVx0LmFvX2NhbGNfa2V5X3NrXHRcdD0gdGNwX3Y0X2FvX2NhbGNfa2V5X3NrLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxNTo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MzYyCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipOYXZpZ2F0aW5nIHRoZSBUQ1AgU29ja2V0IE9wZXJhdGlvbnMqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGEgcGllY2Ugb2YgY29kZSByZWxhdGVkIHRvIFRDUCBzb2NrZXQgb3BlcmF0aW9ucyDigJMgc3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBzb21ldGhpbmcgd2l0aGluIHRoZSBgdGNwX3NvY2tfYWZfb3BzYCBzdHJ1Y3R1cmUuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBkaWcgaW50byB0aGUgYWRkcmVzcyBmYW1pbHktc3BlY2lmaWMgcGFyc2luZyBmdW5jdGlvbnMuIEdpdmVuIHRoYXQgY29udGV4dCwgSSYjMzk7bSBwcmV0dHkgc3VyZSBgYW9fcGFyc2VgIGlzIHRoZSByZWxldmFudCBmdW5jdGlvbiB0byBpbnZlc3RpZ2F0ZS4gSXQmIzM5O3MgYWxtb3N0IGNlcnRhaW5seSBmb3VuZCB3aXRoaW4gYG5ldC9pcHY0L3RjcC5jYCwgd2hpY2ggaXMgdGhlIHR5cGljYWwgbG9jYXRpb24gZm9yIElQdjQgVENQIGhhbmRsaW5nIHdpdGhpbiB0aGUga2VybmVsLiBMZXQgbWUgcHVsbCB0aGF0IHVwIGFuZCBzZWUgd2hhdCB3ZSYjMzk7cmUgd29ya2luZyB3aXRoLiBJIGV4cGVjdCBpdCB0byBkZWFsIHdpdGggYW55IGFkZHJlc3MtcmVsYXRlZCBwYXJzaW5nIGFuZCBoYW5kbGluZy4gVGhpcyBpcyBwcm9iYWJseSB0aGUgZW50cnkgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHNvY2tldCYjMzk7cyBiZWhhdmlvciBpbiBxdWVzdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTU6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YW9fcGFyc2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3AuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3AuYz0zODM4PWludCBkb190Y3Bfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4tLVxubmV0L2lwdjQvdGNwLmMtNDA3OS1cdFx0aWYgKCgxIFx1MDAzY1x1MDAzYyBzay1cdTAwM2Vza19zdGF0ZSkgXHUwMDI2IChUQ1BGX0xJU1RFTiB8IFRDUEZfQ0xPU0UpKVxubmV0L2lwdjQvdGNwLmM6NDA4MDpcdFx0XHRnb3RvIGFvX3BhcnNlO1xubmV0L2lwdjQvdGNwLmMtNDA4MS1cdFx0aWYgKHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQodGNwX3NrKHNrKS1cdTAwM2Vhb19pbmZvLFxubmV0L2lwdjQvdGNwLmMtNDA4Mi1cdFx0XHRcdFx0ICAgICAgbG9ja2RlcF9zb2NrX2lzX2hlbGQoc2spKSlcbm5ldC9pcHY0L3RjcC5jOjQwODM6XHRcdFx0Z290byBhb19wYXJzZTtcbm5ldC9pcHY0L3RjcC5jLTQwODQtXHRcdGlmICh0cC1cdTAwM2VyZXBhaXIpXG5uZXQvaXB2NC90Y3AuYzo0MDg1Olx0XHRcdGdvdG8gYW9fcGFyc2U7XG5uZXQvaXB2NC90Y3AuYy00MDg2LVx0XHRlcnIgPSAtRUlTQ09OTjtcbm5ldC9pcHY0L3RjcC5jLTQwODctXHRcdGJyZWFrO1xubmV0L2lwdjQvdGNwLmM6NDA4ODphb19wYXJzZTpcbm5ldC9pcHY0L3RjcC5jOjQwODk6XHRcdGVyciA9IHRwLVx1MDAzZWFmX3NwZWNpZmljLVx1MDAzZWFvX3BhcnNlKHNrLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7XG5uZXQvaXB2NC90Y3AuYy00MDkwLVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTU6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTk2MgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDEzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRDUC1BTzogQSBXb3J0aHdoaWxlIEVuZGVhdm9yKioKCk9rYXksIHNvIEkgc2VlIHRoaXMgcGF0Y2ggYW5kIGl0JiMzOTtzIGRlYWxpbmcgd2l0aCBgc2V0c29ja29wdGAgYW5kIFRDUC1BTywgc3BlY2lmaWNhbGx5LCBpdCBpbnZvbHZlcyBgc2V0c29ja29wdCguLi4sIElQUFJPVE9fVENQLCBUQ1BfQU9fREVMX0tFWSwgLi4uKWAg4oCTIHRoYXQmIzM5O3MgYWNjZXNzaWJsZSwgd2hpY2ggcGlxdWVzIG15IGludGVyZXN0IGltbWVkaWF0ZWx5LiBUaGlzIHBhdGNoIGFkZHJlc3NlcyBhIGJ1ZyB3aGVyZSBgY21kLmlmaW5kZXhgIHdhc24mIzM5O3QgYmVpbmcgY29ycmVjdGx5IGFzc2lnbmVkIHRvIGBsM2luZGV4YCB3aGVuIGBUQ1BfQU9fS0VZRl9JRklOREVYYCB3YXMgZmxhZ2dlZCBpbiBgY21kLmtleWZsYWdzYC4gRnVuY3Rpb25hbGx5LCB0aGlzIGlzIGEgY2hhbmdlIHRvIGhvdyBUQ1AtQU8gaXMgaGFuZGxlZCB3aXRoaW4gYHNldHNvY2tvcHRgLiBUQ1AtQU8gaXRzZWxmIGlzIGEgY29yZSBuZXR3b3JraW5nIGZlYXR1cmUsIG5vIGRvdWJ0LiBUaGUgcXVlc3Rpb24gaXM6IGlzIHRoaXMgZnV6emFibGU/IEFic29sdXRlbHkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gYSByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvbXBvbmVudC4gVGhlIHBvdGVudGlhbCBpbXBhY3QgaXMgc2lnbmlmaWNhbnQsIGFuZCB0aGUgYXR0YWNrIHN1cmZhY2UgaXMgYWNjZXNzaWJsZS4gTm93LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhc3NvY2lhdGVkIHdpdGggVENQLUFPIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIHBvdGVudGlhbCB2ZWN0b3JzIGZvciBmdXp6aW5nLiBUaGlzIGlzIGRlZmluaXRlbHkgd29ydGggYSBjbG9zZXIgbG9vay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTU6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFRDUF9BTyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZz03Mjk9Y29uZmlnIERFRkFVTFRfVENQX0NPTkdcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTc0My1cbm5ldC9pcHY0L0tjb25maWc6NzQ0OmNvbmZpZyBUQ1BfQU9cbm5ldC9pcHY0L0tjb25maWctNzQ1LVx0Ym9vbCBcJiMzNDtUQ1A6IEF1dGhlbnRpY2F0aW9uIE9wdGlvbiAoUkZDNTkyNSlcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTU6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0NDEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBxdWljayBydW5kb3duIG9mIHdoYXQgSSYjMzk7bSB0aGlua2luZyBhYm91dCByZWxhdGVkIHRvIHRoaXMgVENQIGFuYWx5c2lzOgoKKipUQ1BfQU8gQ29uZmlndXJhdGlvbiBFeGFtaW5hdGlvbioqCgpSaWdodCwgc28gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBgVENQX0FPYCBhcyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24g4oCTIHRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gZGlnIGludG8gaG93IHRoaXMgaXMgaW1wbGVtZW50ZWQuIE15IGluaXRpYWwgZm9jdXMgaXMgZ29pbmcgdG8gYmUgb24gYSBjb3VwbGUgb2Yga2V5IHN5bWJvbHM6IGB0Y3BfYW9fZGVsX2NtZGAgYW5kIGB0Y3BfcGFyc2VfYW9gLiBUaGV5IHNlZW0gbGlrZSBsb2dpY2FsIHBsYWNlcyB0byBzdGFydCBwb2tpbmcgYXJvdW5kIHRvIHVuZGVyc3RhbmQgaG93IEFPIChBdXRoZW50aWNhdGVkIE9wdGlvbnMsIEkmIzM5O20gZ3Vlc3Npbmc/KSBpcyBoYW5kbGVkLgoKT2theSwgYHRjcF9hb19kZWxfY21kYCBpcyBzdGF0aWMsIHdoaWNoIGlzIGZpbmUsIGJ1dCBub3QgaWRlYWwgZm9yIGRlZXBlciBpbnRyb3NwZWN0aW9uLiBOb3csIGB0Y3BfcGFyc2VfYW9gIGlzIHRoZSBpbnRlcmVzdGluZyBvbmU7IGl0JiMzOTtzICpub3QqIHN0YXRpYywgc28gSSBjYW4gcHJvYmFibHkgZ2V0IGF0IG1vcmUgZGV0YWlscyBhYm91dCBob3cgaXQmIzM5O3MgdXNlZC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBpdHMgZnVuY3Rpb24gc2lnbmF0dXJlIHRvIHNlZSB3aGF0IHRoZSBpbnB1dHMgYXJlLCB3aGF0IGl0IHJldHVybnMsIGFuZCBnZXQgYW4gaWRlYSBvZiB3aGVyZSB0byBnbyBuZXh0LiBVbmRlcnN0YW5kaW5nIHRoYXQgc2lnbmF0dXJlIHdpbGwgcmVhbGx5IGhlbHAgbWUgemVybyBpbiBvbiB3aGVyZSB0aGUgcmVsZXZhbnQgY29kZSBwYXRocyBhcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDE1OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCB0Y3BfcGFyc2VfYW8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3BfYW8uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3BfYW8uYz0xOTQ5PXN0YXRpYyBpbnQgdGNwX2FvX2luZm9fY21kKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgc2hvcnQgaW50IGZhbWlseSxcbi0tXG5uZXQvaXB2NC90Y3BfYW8uYy0yMDM3LVxubmV0L2lwdjQvdGNwX2FvLmM6MjAzODppbnQgdGNwX3BhcnNlX2FvKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgdW5zaWduZWQgc2hvcnQgaW50IGZhbWlseSxcbm5ldC9pcHY0L3RjcF9hby5jLTIwMzktXHRcdCBzb2NrcHRyX3Qgb3B0dmFsLCBpbnQgb3B0bGVuKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxNTo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDkyMwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHF1aWNrIHJ1bmRvd24gb2Ygd2hhdCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHJlbGF0ZWQgdG8gdGhpcyBUQ1AgcGFyc2luZyBjb2RlLCBrZWVwaW5nIGluIG1pbmQgbXkgZXhwZXJ0aXNlOgoKKipUQ1AgU3ltYm9sIEFuYWx5c2lzIC0gRm9jdXMgb24gQU8gRnVuY3Rpb25zKioKClJpZ2h0LCBzbyBgdGNwX3BhcnNlX2FvYCBzZWVtcyBsaWtlIGEgc29saWQgY2FuZGlkYXRlIGZvciBhIGtleSBzeW1ib2wsIGEgZ29vZCBmb2NhbCBwb2ludCBmb3IgYW5hbHlzaXMgaW4gdGhpcyBhcmVhIG9mIHRoZSBjb2RlLiBCdXQsIGdpdmVuIHRoYXQgd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgVENQLCBJIHNob3VsZCBhbHNvIGNvbnNpZGVyIGl0cyBJUHY0IGFuZCBJUHY2IHZhcmlhbnRzLCB3aGljaCB3b3VsZCBiZSBgdGNwX3Y0X3BhcnNlX2FvYCBhbmQgYHRjcF92Nl9wYXJzZV9hb2AuIFRob3NlIGFyZSBkZWZpbml0ZWx5IHdvcnRoIGludmVzdGlnYXRpbmcgYXMgd2VsbC4KCk5vdywgSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBhZG1pbmlzdHJhdGl2ZSBjb21tYW5kcy4gSSB3YW50IHRvIHNlZSBpZiBgdGNwX2FvX2RlbF9jbWRgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBZZXAsIGl0IGlzLiBUaGF0IGluZm9ybWF0aW9uIGlzIGdvaW5nIHRvIGNvbWUgaW4gaGFuZHkgbGF0ZXIuIEdvb2QsIHRoYXQmIzM5O3Mgb25lIGxlc3MgdmFyaWFibGUgdG8gd29ycnkgYWJvdXQuCgpOb3csIGxldCYjMzk7cyBzZWUgd2hhdCBvdGhlciByZWxhdGVkIGZ1bmN0aW9ucyBhcmUgaW4gcGxheS4gSSYjMzk7bGwgbmVlZCB0byBleHBhbmQgbXkgc2VhcmNoIHRvIGlkZW50aWZ5IGFueSBvdGhlciByZWxldmFudCBmdW5jdGlvbnMgYXJvdW5kIHRoZXNlIHRvIGdldCBhIGZ1bGwgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTU6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNwX2FvX2RlbF9jbWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3BfYW8uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3BfYW8uYz05OTA9dGNwX2luYm91bmRfYW9faGFzaChzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvdGNwX2FvLmMtMTA1NS1cdFx0XHRpZiAoa2V5KVxubmV0L2lwdjQvdGNwX2FvLmM6MTA1NjpcdFx0XHRcdC8qIHBhaXJzIHdpdGggdGNwX2FvX2RlbF9jbWQgKi9cbm5ldC9pcHY0L3RjcF9hby5jLTEwNTctXHRcdFx0XHRXUklURV9PTkNFKGluZm8tXHUwMDNlY3VycmVudF9rZXksIGtleSk7XG4tLVxubmV0L2lwdjQvdGNwX2FvLmMtMTA2OC1cdCAqIC0gcmVxdWVzdCBzb2NrZXRzIHdvdWxkIHJhY2Ugb24gdGhvc2Uga2V5IHBvaW50ZXJzXG5uZXQvaXB2NC90Y3BfYW8uYzoxMDY5Olx0ICogLSB0Y3BfYW9fZGVsX2NtZCgpIGFsbG93cyBhc3luYyBrZXkgcmVtb3ZhbFxubmV0L2lwdjQvdGNwX2FvLmMtMTA3MC1cdCAqL1xuLS1cbm5ldC9pcHY0L3RjcF9hby5jPTE3NDY9c3RhdGljIGludCB0Y3BfYW9fZGVsZXRlX2tleShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0Y3BfYW9faW5mbyAqYW9faW5mbyxcbi0tXG5uZXQvaXB2NC90Y3BfYW8uYy0xNzk5LSNkZWZpbmUgVENQX0FPX0RFTF9LRVlGX0FMTCAoVENQX0FPX0tFWUZfSUZJTkRFWClcbm5ldC9pcHY0L3RjcF9hby5jOjE4MDA6c3RhdGljIGludCB0Y3BfYW9fZGVsX2NtZChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIHNob3J0IGludCBmYW1pbHksXG5uZXQvaXB2NC90Y3BfYW8uYy0xODAxLVx0XHRcdCAgc29ja3B0cl90IG9wdHZhbCwgaW50IG9wdGxlbilcbi0tXG5uZXQvaXB2NC90Y3BfYW8uYz0yMDM4PWludCB0Y3BfcGFyc2VfYW8oc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCB1bnNpZ25lZCBzaG9ydCBpbnQgZmFtaWx5LFxuLS1cbm5ldC9pcHY0L3RjcF9hby5jLTIwNDctXHRjYXNlIFRDUF9BT19ERUxfS0VZOlxubmV0L2lwdjQvdGNwX2FvLmM6MjA0ODpcdFx0cmV0dXJuIHRjcF9hb19kZWxfY21kKHNrLCBmYW1pbHksIG9wdHZhbCwgb3B0bGVuKTtcbm5ldC9pcHY0L3RjcF9hby5jLTIwNDktXHRjYXNlIFRDUF9BT19JTkZPOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxNTo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTc2NQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IFBsYW4gZm9yIFBhcnNpbmcgVENQIEF1dGhlbnRpY2F0aW9uIE9wdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBnb2luZyB0byBhZGQgdGhlIGZ1bmN0aW9ucyBgdGNwX3BhcnNlX2FvYCwgYHRjcF92NF9wYXJzZV9hb2AsIGFuZCBgdGNwX3Y2X3BhcnNlX2FvYCB0byB0aGUgYEZvY3VzU3ltYm9sc2AgbGlzdC4gVGhpcyBpcyBhIGNyaXRpY2FsIHN0ZXAgaW4gZ2V0dGluZyBteSBhdXRoZW50aWNhdGlvbiBvcHRpb24gcGFyc2luZyB3b3JraW5nIGNvcnJlY3RseSwgYW5kIEkgd2FudCB0byBiZSBzdXJlIGl0JiMzOTtzIGFjY2Vzc2libGUgYW5kIHRyYWNrZWQgcHJvcGVybHkuIE5vdywgYmVmb3JlIEkgZ2V0IHRvbyBmYXIsIEkgbmVlZCB0byB2ZXJpZnkgd2hhdCwgaWYgYW55dGhpbmcsIHRoaXMgYFRDUF9BT2AgZmVhdHVyZSByZWxpZXMgb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIuIEdvdHRhIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBvdmVybG9va2luZyBzb21ldGhpbmcgZnVuZGFtZW50YWwuIFRoaXMgaW5pdGlhbCBkZXBlbmRlbmN5IGNoZWNrIGlzIGtleSB0byBhdm9pZGluZyBoZWFkYWNoZXMgZG93biB0aGUgbGluZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTU6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFRDUF9BTyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZz03Mjk9Y29uZmlnIERFRkFVTFRfVENQX0NPTkdcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTc0My1cbm5ldC9pcHY0L0tjb25maWc6NzQ0OmNvbmZpZyBUQ1BfQU9cbm5ldC9pcHY0L0tjb25maWctNzQ1LVx0Ym9vbCBcJiMzNDtUQ1A6IEF1dGhlbnRpY2F0aW9uIE9wdGlvbiAoUkZDNTkyNSlcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTU6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIwODUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSByZWFkaW5nIGFuZCBwcm9jZXNzaW5nIHRoZSBgbmV0L2lwdjQvS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYGNvbmZpZyBUQ1BfQU9gIHNldHRpbmc6CgoqKkFuYWx5emluZyB0aGUgS2NvbmZpZyBmb3IgVENQX0FPKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBLY29uZmlnIGZpbGUsIGZvY3VzaW5nIG9uIHRoZSBgVENQX0FPYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcywgZGVmYXVsdCBzZXR0aW5ncywgYW5kIHdoZXJlIGl0IGZpdHMgaW4gdGhlIGJyb2FkZXIgbmV0d29yayBzdGFjayBjb25maWd1cmF0aW9uLiBGaXJzdCwgSSB3YW50IHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgZGVwZW5kZW5jaWVzIOKAkyBkb2VzIGl0IHJlbHkgb24gb3RoZXIgZmVhdHVyZXMgYmVpbmcgZW5hYmxlZCwgbGlrZSBJUHNlYyBvciBzcGVjaWZpYyBjcnlwdG9ncmFwaGljIG1vZHVsZXM/IEFyZSB0aGVyZSBhbnkgYXNzb2NpYXRlZCBzeW1ib2xzIHRoYXQgd291bGQgaW5mbHVlbmNlIHdoZXRoZXIgdGhpcyBnZXRzIGJ1aWx0PyBUaGUgYEtjb25maWdgIGZpbGVzIGdlbmVyYWxseSBtYXAgZGlyZWN0bHkgdG8gY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgSSBjYW4gZW5hYmxlL2Rpc2FibGUsIHNvIEkmIzM5O20gc2Nhbm5pbmcgZm9yIGNsdWVzIGFib3V0IGhvdyB0aGUgbWFpbnRhaW5lcnMgZGVzaWduZWQgdGhpcy4gSSYjMzk7bSBhbHNvIGxvb2tpbmcgZm9yIGFueSBjb21tZW50cyBvciBkb2N1bWVudGF0aW9uIHdpdGhpbiB0aGUgZmlsZSBpdHNlbGYuIFRob3NlIGtpbmRzIG9mIGNsdWVzIGFyZSBnb2luZyB0byB0ZWxsIG1lIHdoYXQgdGhlIGRlc2lnbiBpbnRlbnRpb25zIGFyZS4gSXMgdGhpcyBvcHRpb24gZXhwZXJpbWVudGFsLCBtYXR1cmUsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxNTo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDc0MDpcdFx0ZGVmYXVsdCBcJiMzNDtjZGdcJiMzNDsgaWYgREVGQVVMVF9DREdcbiA3NDE6XHRcdGRlZmF1bHQgXCYjMzQ7YmJyXCYjMzQ7IGlmIERFRkFVTFRfQkJSXG4gNzQyOlx0XHRkZWZhdWx0IFwmIzM0O2N1YmljXCYjMzQ7XG4gNzQzOlx0XG4gNzQ0Olx0Y29uZmlnIFRDUF9BT1xuIDc0NTpcdFx0Ym9vbCBcJiMzNDtUQ1A6IEF1dGhlbnRpY2F0aW9uIE9wdGlvbiAoUkZDNTkyNSlcJiMzNDtcbiA3NDY6XHRcdHNlbGVjdCBDUllQVE9fTElCX0FFU19DQkNfTUFDU1xuIDc0NzpcdFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMVxuIDc0ODpcdFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMjU2XG4gNzQ5Olx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9VVElMU1xuIDc1MDpcdFx0ZGVwZW5kcyBvbiA2NEJJVCAjIHNlcS1udW1iZXIgZXh0ZW5zaW9uIG5lZWRzIFdSSVRFX09OQ0UodTY0KVxuIDc1MTpcdFx0aGVscFxuIDc1MjpcdFx0ICBUQ1AtQU8gc3BlY2lmaWVzIHRoZSB1c2Ugb2Ygc3Ryb25nZXIgTWVzc2FnZSBBdXRoZW50aWNhdGlvbiBDb2RlcyAoTUFDcyksXG4gNzUzOlx0XHQgIHByb3RlY3RzIGFnYWluc3QgcmVwbGF5cyBmb3IgbG9uZy1saXZlZCBUQ1AgY29ubmVjdGlvbnMsIGFuZFxuIDc1NDpcdFx0ICBwcm92aWRlcyBtb3JlIGRldGFpbHMgb24gdGhlIGFzc29jaWF0aW9uIG9mIHNlY3VyaXR5IHdpdGggVENQXG4gNzU1Olx0XHQgIGNvbm5lY3Rpb25zIHRoYW4gVENQIE1ENSAoU2VlIFJGQzU5MjUpXG4gNzU2Olx0XG4gNzU3Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gNzU4Olx0XG4gNzU5Olx0Y29uZmlnIFRDUF9NRDVTSUdcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTU6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI2NzQKCQkJCQkJCW91dHB1dDogMTI1CgkJCQkJCQl0aG91Z2h0czogMzk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFRDUC1BTyBDb25maWd1cmF0aW9uIGFuZCBUZXN0IFN0cmF0ZWd5KioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY29udGluZ2VudCBvbiBgNjRCSVRgLCB3aGljaCBpcyBleHBlY3RlZC4gVGhlIGNvcmUgcmVxdWlyZW1lbnQgaGVyZSBpcyBgVENQX0FPYCwgYW5kIHRoYXQmIzM5O3MgdGhlIG9ubHkgaW1tZWRpYXRlIGNvbmZpZ3VyYXRpb24gbmVlZGVkLCB3aGljaCBpcyBnb29kLgoKTGV0JiMzOTtzIGRvIGEgcXVpY2sgZG91YmxlLWNoZWNrIGZvciBhbnl0aGluZyBlbHNlIGx1cmtpbmcgYXJvdW5kLiBUaGUgc2VsZnRlc3QgaGludHMgYXQgYEtDT05GSUdfTkVUX1ZSRmAsIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIFZSRiBpcyByZWxldmFudCB0byBzcGVjaWZpY2FsbHkgdGVzdCB0aGlzIG5ldyBmdW5jdGlvbmFsaXR5LgoKTG9va2luZyBhdCB0aGUgY29kZSBkaWZmOgpgYGBjCiAJaWYgKGNtZC5pZmluZGV4ICZhbXA7JmFtcDsgIShjbWQua2V5ZmxhZ3MgJmFtcDsgVENQX0FPX0tFWUZfSUZJTkRFWCkpCiAJCXJldHVybiAtRUlOVkFMOwogCiYjNDM7CWlmIChjbWQua2V5ZmxhZ3MgJmFtcDsgVENQX0FPX0tFWUZfSUZJTkRFWCkKJiM0MzsJCWwzaW5kZXggPSBjbWQuaWZpbmRleDsKJiM0MzsKIAlhb19pbmZvID0gc2V0c29ja29wdF9hb19pbmZvKHNrKTsKIGBgYApJdCBzZWVtcyB0aGF0IGBjbWQuaWZpbmRleGAgaXMgdXNlZCB0byBhc3NpZ24gYSB2YWx1ZSB0byBgbDNpbmRleGAuIEFuZCBgbDNpbmRleGAgaXMgdXNlZCBpbiB0aGUga2V5IG1hdGNoaW5nLiBWUkYgY2VydGFpbmx5ICp1c2VzKiBgbDNpbmRleGAuIEhvd2V2ZXIsIGBpZmluZGV4YCBjYW4gYmUgKmFueSogaW50ZXJmYWNlIGluZGV4LCBub3QganVzdCBWUkYuIEJ1dCwgYE5FVF9WUkZgIG1pZ2h0IHN0aWxsIGJlIHVzZWZ1bCB0byBlbmFibGUgdGVzdGluZyBWUkYtc2NvcGVkIGtleXMgaWYgdGhvc2UgYXJlIG9mIGNvbmNlcm4sIHNvIGxldCYjMzk7cyBhZGQgYE5FVF9WUkZgIHRvIGBFbmFibGVDb25maWdzYCBhcyBhIHByZWNhdXRpb24uCgpJIHNob3VsZCBhbHNvIHF1aWNrbHkgZXhhbWluZSBgdGNwX2FvX2RlbGV0ZV9rZXlgLCBqdXN0IGluIGNhc2UsIGJ1dCBpdCBsb29rcyBsaWtlIGEgc3RhdGljIGZ1bmN0aW9uLgoKTGV0IG1lIHN1bW1hcml6ZSBteSBmaW5kaW5ncywgaW4gdGhlIHR5cGljYWwgd2F5OgoqICAgYFdvcnRoRnV6emluZ2A6IFRydWUg4oCTIFRoaXMgbG9va3MgbGlrZSBpdCYjMzk7cyBhZGRyZXNzaW5nIGEgY29yZSBuZXR3b3JraW5nIGJ1Zy4KKiAgIGBGb2N1c1N5bWJvbHNgOiBgdGNwX3BhcnNlX2FvYCwgYHRjcF92NF9wYXJzZV9hb2AsIGB0Y3BfdjZfcGFyc2VfYW9gIOKAkyBTZWVtcyByaWdodC4gVGhvc2UgYXJlIHdoZXJlIHdlIGFyZSBwcm9jZXNzaW5nIHRoZSBvcHRpb24uCiogICBgRW5hYmxlQ29uZmlnc2A6IGBUQ1BfQU9gLCBgTkVUX1ZSRmAg4oCTIFdlJiMzOTtyZSBzdGFydGluZyB3aXRoIGBUQ1BfQU9gLCB3aXRoIGBORVRfVlJGYCBlbmFibGVkIHRvIGV4cGFuZCB0ZXN0aW5nIFZSRi1zY29wZWQga2V5cy4KKiAgIGBSZWFzb25pbmdgOiBUaGUgcGF0Y2ggaGFzIGEgYnVnLWZpeCBmb3Igc2V0c29ja29wdCBpbiBUQ1AtQU8sIGRlYWxpbmcgd2l0aCB0aGUgYXNzaWdubWVudCBvZiBgY21kLmlmaW5kZXhgIHRvIGBsM2luZGV4YCB3aGVuIGRlbGV0aW5nIGEga2V5IGFuZCBmaXhlcyBhIHByb2JsZW0gd2l0aCBkZWxldGluZyBpbnRlcmZhY2Utc2NvcGVkIGtleXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JraW5nIGFyZWEsIHNvIHNob3VsZCBiZSB3b3J0aCBvdXIgYXR0ZW50aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxNTo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VENQX0FPJiMzNDssCiAgICAmIzM0O05FVF9WUkYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Y3BfcGFyc2VfYW8mIzM0OywKICAgICYjMzQ7dGNwX3Y0X3BhcnNlX2FvJiMzNDssCiAgICAmIzM0O3RjcF92Nl9wYXJzZV9hbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBUQ1AtQU8gc2V0c29ja29wdCBoYW5kbGluZyB3aGVyZSBgY21kLmlmaW5kZXhgIHdhcyBub3QgYXNzaWduZWQgdG8gYGwzaW5kZXhgIHdoZW4gZGVsZXRpbmcgYSBrZXksIHByZXZlbnRpbmcgZGVsZXRpb24gb2YgaW50ZXJmYWNlLXNjb3BlZCBrZXlzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUQ1BfQU8mIzM0OywKICAgICYjMzQ7TkVUX1ZSRiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjcF9wYXJzZV9hbyYjMzQ7LAogICAgJiMzNDt0Y3BfdjRfcGFyc2VfYW8mIzM0OywKICAgICYjMzQ7dGNwX3Y2X3BhcnNlX2FvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIFRDUC1BTyBzZXRzb2Nrb3B0IGhhbmRsaW5nIHdoZXJlIGBjbWQuaWZpbmRleGAgd2FzIG5vdCBhc3NpZ25lZCB0byBgbDNpbmRleGAgd2hlbiBkZWxldGluZyBhIGtleSwgcHJldmVudGluZyBkZWxldGlvbiBvZiBpbnRlcmZhY2Utc2NvcGVkIGtleXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDE1OjU3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTU6NTc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgaW4gYHRjcF9hb19kZWxfY21kYCB3aGVyZSB0aGUgYGwzaW5kZXhgIHZhcmlhYmxlIHdhcyBub3QgYmVpbmcgcG9wdWxhdGVkIGZyb20gdGhlIHVzZXItcHJvdmlkZWQgYGNtZC5pZmluZGV4YCB3aGVuIHRoZSBgVENQX0FPX0tFWUZfSUZJTkRFWGAgZmxhZyB3YXMgc2V0LiBUaGUgYGNtZGAgc3RydWN0dXJlIGlzIHNhZmVseSBjb3BpZWQgZnJvbSB1c2Vyc3BhY2UgdXNpbmcgYGNvcHlfc3RydWN0X2Zyb21fc29ja3B0cmAsIHdoaWNoIGd1YXJhbnRlZXMgdGhhdCB0aGUgc3RydWN0dXJlIGlzIGZ1bGx5IGluaXRpYWxpemVkICh6ZXJvLXBhZGRlZCBpZiB0aGUgdXNlcnNwYWNlIHN0cnVjdHVyZSBpcyBzbWFsbGVyKS4gVGhlIHBhdGNoIG9ubHkgYWRkcyBhIGNvbmRpdGlvbmFsIGFzc2lnbm1lbnQgb2YgYW4gaW50ZWdlciB2YXJpYWJsZSBhbmQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2Vyc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDExMTdjOWZkZjhiYzA3MjRjMjAxN2IyZDU4OTcyY2NmOTc5YzMzM2EKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyAyMSAxNTo1Njo0MCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9hby5jIGIvbmV0L2lwdjQvdGNwX2FvLmMKaW5kZXggNTA5NDI2NzQ0N2FlZS4uMjY4NjQ2MjFlNmRlZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2FvLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvdGNwX2FvLmMKQEAgLTE4MzQsNiAmIzQzOzE4MzQsOSBAQCBzdGF0aWMgaW50IHRjcF9hb19kZWxfY21kKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgc2hvcnQgaW50IGZhbWlseSwKIAlpZiAoY21kLmlmaW5kZXggJmFtcDsmYW1wOyAhKGNtZC5rZXlmbGFncyAmYW1wOyBUQ1BfQU9fS0VZRl9JRklOREVYKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKJiM0MzsJaWYgKGNtZC5rZXlmbGFncyAmYW1wOyBUQ1BfQU9fS0VZRl9JRklOREVYKQomIzQzOwkJbDNpbmRleCA9IGNtZC5pZmluZGV4OwomIzQzOwogCWFvX2luZm8gPSBzZXRzb2Nrb3B0X2FvX2luZm8oc2spOwogCWlmIChJU19FUlIoYW9faW5mbykpCiAJCXJldHVybiBQVFJfRVJSKGFvX2luZm8pOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9rZXktbWFuYWdlbWVudC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9rZXktbWFuYWdlbWVudC5jCmluZGV4IGQ4NmJiMzgwYjc5ZjcuLjFlMDFlODA1ZGJhNzIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8va2V5LW1hbmFnZW1lbnQuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2tleS1tYW5hZ2VtZW50LmMKQEAgLTYzLDcgJiM0Mzs2Myw4IEBAIHN0YXRpYyBpbnQgcHJlcGFyZV9sc2sodW5pb24gdGNwX2FkZHIgKmFkZHIsIHVpbnQ4X3Qgc25kaWQsIHVpbnQ4X3QgcmN2aWQpCiAJcmV0dXJuIHNrOwogfQogCi1zdGF0aWMgaW50IHRlc3RfZGVsX2tleShpbnQgc2ssIHVpbnQ4X3Qgc25kaWQsIHVpbnQ4X3QgcmN2aWQsIGJvb2wgYXN5bmMsCiYjNDM7c3RhdGljIGludCB0ZXN0X2RlbF9rZXkoaW50IHNrLCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkLCBpbnQgaWZpbmRleCwKJiM0MzsJCQlib29sIGFzeW5jLAogCQkJaW50IGN1cnJlbnRfa2V5LCBpbnQgcm5leHRfa2V5KQogewogCXN0cnVjdCB0Y3BfYW9faW5mb19vcHQgYW9faW5mbyA9IHt9OwpAQCAtNzYsNiAmIzQzOzc3LDEwIEBAIHN0YXRpYyBpbnQgdGVzdF9kZWxfa2V5KGludCBzaywgdWludDhfdCBzbmRpZCwgdWludDhfdCByY3ZpZCwgYm9vbCBhc3luYywKIAlkZWwucHJlZml4ID0gREVGQVVMVF9URVNUX1BSRUZJWDsKIAlkZWwuc25kaWQgPSBzbmRpZDsKIAlkZWwucmN2aWQgPSByY3ZpZDsKJiM0MzsJaWYgKGlmaW5kZXgpIHsKJiM0MzsJCWRlbC5rZXlmbGFncyA9IFRDUF9BT19LRVlGX0lGSU5ERVg7CiYjNDM7CQlkZWwuaWZpbmRleCA9IGlmaW5kZXg7CiYjNDM7CX0KIAogCWlmIChjdXJyZW50X2tleSAmZ3Q7PSAwKSB7CiAJCWRlbC5zZXRfY3VycmVudCA9IDE7CkBAIC05NSw3ICYjNDM7MTAwLDggQEAgc3RhdGljIGludCB0ZXN0X2RlbF9rZXkoaW50IHNrLCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkLCBib29sIGFzeW5jLAogCiAJdGNwX2FkZHJfdG9fc29ja2FkZHJfaW4oJmFtcDtzb2NrYWRkciwgJmFtcDt0aGlzX2lwX2Rlc3QsIDApOwogCWVyciA9IHRlc3RfZ2V0X29uZV9hbyhzaywgJmFtcDtrZXksICZhbXA7c29ja2FkZHIsIHNpemVvZihzb2NrYWRkciksCi0JCQkgICAgICBERUZBVUxUX1RFU1RfUFJFRklYLCBzbmRpZCwgcmN2aWQpOwomIzQzOwkJCSAgICAgIERFRkFVTFRfVEVTVF9QUkVGSVgsIHNuZGlkLCByY3ZpZCwKJiM0MzsJCQkgICAgICBkZWwua2V5ZmxhZ3MsIGRlbC5pZmluZGV4KTsKIAlpZiAoIWVycikKIAkJcmV0dXJuIC1FRVhJU1Q7CiAJaWYgKGVyciAhPSAtRTJCSUcpCkBAIC0xMTIsMTIgJiM0MzsxMTgsMTIgQEAgc3RhdGljIGludCB0ZXN0X2RlbF9rZXkoaW50IHNrLCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkLCBib29sIGFzeW5jLAogfQogCiBzdGF0aWMgdm9pZCB0cnlfZGVsZXRlX2tleShjaGFyICp0c3RfbmFtZSwgaW50IHNrLCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkLAotCQkJICAgYm9vbCBhc3luYywgaW50IGN1cnJlbnRfa2V5LCBpbnQgcm5leHRfa2V5LAomIzQzOwkJCSAgIGludCBpZmluZGV4LCBib29sIGFzeW5jLCBpbnQgY3VycmVudF9rZXksIGludCBybmV4dF9rZXksCiAJCQkgICBmYXVsdF90IGluaikKIHsKIAlpbnQgZXJyOwogCi0JZXJyID0gdGVzdF9kZWxfa2V5KHNrLCBzbmRpZCwgcmN2aWQsIGFzeW5jLCBjdXJyZW50X2tleSwgcm5leHRfa2V5KTsKJiM0MzsJZXJyID0gdGVzdF9kZWxfa2V5KHNrLCBzbmRpZCwgcmN2aWQsIGlmaW5kZXgsIGFzeW5jLCBjdXJyZW50X2tleSwgcm5leHRfa2V5KTsKIAlpZiAoKGVyciA9PSAtRUJVU1kgJmFtcDsmYW1wOyBmYXVsdChCVVNZKSkgfHwgKGVyciA9PSAtRUlOVkFMICZhbXA7JmFtcDsgZmF1bHQoQ1VSUk5FWFQpKSkgewogCQl0ZXN0X29rKCYjMzQ7JXM6IGtleSBkZWxldGlvbiB3YXMgcHJldmVudGVkJiMzNDssIHRzdF9uYW1lKTsKIAkJcmV0dXJuOwpAQCAtMjM2LDE1ICYjNDM7MjQyLDE1IEBAIHN0YXRpYyB2b2lkIGNoZWNrX2Nsb3NlZF9zb2NrZXQodm9pZCkKIAlpbnQgc2s7CiAKIAlzayA9IHByZXBhcmVfc2soJmFtcDt0aGlzX2lwX2Rlc3QsIDIwMCwgMjAwKTsKLQl0cnlfZGVsZXRlX2tleSgmIzM0O2Nsb3NlZCBzb2NrZXQsIGRlbGV0ZSBhIGtleSYjMzQ7LCBzaywgMjAwLCAyMDAsIDAsIC0xLCAtMSwgMCk7Ci0JdHJ5X2RlbGV0ZV9rZXkoJiMzNDtjbG9zZWQgc29ja2V0LCBkZWxldGUgYWxsIGtleXMmIzM0Oywgc2ssIDEwMCwgMTAwLCAwLCAtMSwgLTEsIDApOwomIzQzOwl0cnlfZGVsZXRlX2tleSgmIzM0O2Nsb3NlZCBzb2NrZXQsIGRlbGV0ZSBhIGtleSYjMzQ7LCBzaywgMjAwLCAyMDAsIDAsIDAsIC0xLCAtMSwgMCk7CiYjNDM7CXRyeV9kZWxldGVfa2V5KCYjMzQ7Y2xvc2VkIHNvY2tldCwgZGVsZXRlIGFsbCBrZXlzJiMzNDssIHNrLCAxMDAsIDEwMCwgMCwgMCwgLTEsIC0xLCAwKTsKIAljbG9zZShzayk7CiAKIAlzayA9IHByZXBhcmVfc2soJmFtcDt0aGlzX2lwX2Rlc3QsIDIwMCwgMjAwKTsKIAlpZiAodGVzdF9zZXRfa2V5KHNrLCAxMDAsIDIwMCkpCiAJCXRlc3RfZXJyb3IoJiMzNDtmYWlsZWQgdG8gc2V0IGN1cnJlbnQvcm5leHQga2V5cyYjMzQ7KTsKLQl0cnlfZGVsZXRlX2tleSgmIzM0O2Nsb3NlZCBzb2NrZXQsIGRlbGV0ZSBjdXJyZW50IGtleSYjMzQ7LCBzaywgMTAwLCAxMDAsIDAsIC0xLCAtMSwgRkFVTFRfQlVTWSk7Ci0JdHJ5X2RlbGV0ZV9rZXkoJiMzNDtjbG9zZWQgc29ja2V0LCBkZWxldGUgcm5leHQga2V5JiMzNDssIHNrLCAyMDAsIDIwMCwgMCwgLTEsIC0xLCBGQVVMVF9CVVNZKTsKJiM0MzsJdHJ5X2RlbGV0ZV9rZXkoJiMzNDtjbG9zZWQgc29ja2V0LCBkZWxldGUgY3VycmVudCBrZXkmIzM0Oywgc2ssIDEwMCwgMTAwLCAwLCAwLCAtMSwgLTEsIEZBVUxUX0JVU1kpOwomIzQzOwl0cnlfZGVsZXRlX2tleSgmIzM0O2Nsb3NlZCBzb2NrZXQsIGRlbGV0ZSBybmV4dCBrZXkmIzM0Oywgc2ssIDIwMCwgMjAwLCAwLCAwLCAtMSwgLTEsIEZBVUxUX0JVU1kpOwogCWNsb3NlKHNrKTsKIAogCXNrID0gcHJlcGFyZV9zaygmYW1wO3RoaXNfaXBfZGVzdCwgMjAwLCAyMDApOwpAQCAtMjU0LDEwICYjNDM7MjYwLDEyIEBAIHN0YXRpYyB2b2lkIGNoZWNrX2Nsb3NlZF9zb2NrZXQodm9pZCkKIAlpZiAodGVzdF9hZGRfa2V5KHNrLCAmIzM0O0dsb3J5IHRvIFVrcmFpbmUhJiMzNDssIHRoaXNfaXBfZGVzdCwKIAkJCSBERUZBVUxUX1RFU1RfUFJFRklYLCAxMiwgMTMpKQogCQl0ZXN0X2Vycm9yKCYjMzQ7dGVzdF9hZGRfa2V5KCkmIzM0Oyk7Ci0JdHJ5X2RlbGV0ZV9rZXkoJiMzNDtjbG9zZWQgc29ja2V0LCBkZWxldGUgYSBrZXkgJiM0Mzsgc2V0IGN1cnJlbnQvcm5leHQmIzM0Oywgc2ssIDEwMCwgMTAwLCAwLCAxMCwgMTMsIDApOwotCXRyeV9kZWxldGVfa2V5KCYjMzQ7Y2xvc2VkIHNvY2tldCwgZm9yY2UtZGVsZXRlIGN1cnJlbnQga2V5JiMzNDssIHNrLCAxMCwgMTEsIDAsIDIwMCwgLTEsIDApOwotCXRyeV9kZWxldGVfa2V5KCYjMzQ7Y2xvc2VkIHNvY2tldCwgZm9yY2UtZGVsZXRlIHJuZXh0IGtleSYjMzQ7LCBzaywgMTIsIDEzLCAwLCAtMSwgMjAwLCAwKTsKLQl0cnlfZGVsZXRlX2tleSgmIzM0O2Nsb3NlZCBzb2NrZXQsIGRlbGV0ZSBjdXJyZW50JiM0MztybmV4dCBrZXkmIzM0Oywgc2ssIDIwMCwgMjAwLCAwLCAtMSwgLTEsIEZBVUxUX0JVU1kpOwomIzQzOwl0cnlfZGVsZXRlX2tleSgmIzM0O2Nsb3NlZCBzb2NrZXQsIGRlbGV0ZSBhIGtleSAmIzQzOyBzZXQgY3VycmVudC9ybmV4dCYjMzQ7LCBzaywKJiM0MzsJCSAgICAgICAxMDAsIDEwMCwgMCwgMCwgMTAsIDEzLCAwKTsKJiM0MzsJdHJ5X2RlbGV0ZV9rZXkoJiMzNDtjbG9zZWQgc29ja2V0LCBmb3JjZS1kZWxldGUgY3VycmVudCBrZXkmIzM0Oywgc2ssIDEwLCAxMSwgMCwgMCwgMjAwLCAtMSwgMCk7CiYjNDM7CXRyeV9kZWxldGVfa2V5KCYjMzQ7Y2xvc2VkIHNvY2tldCwgZm9yY2UtZGVsZXRlIHJuZXh0IGtleSYjMzQ7LCBzaywgMTIsIDEzLCAwLCAwLCAtMSwgMjAwLCAwKTsKJiM0MzsJdHJ5X2RlbGV0ZV9rZXkoJiMzNDtjbG9zZWQgc29ja2V0LCBkZWxldGUgY3VycmVudCYjNDM7cm5leHQga2V5JiMzNDssIHNrLAomIzQzOwkJICAgICAgIDIwMCwgMjAwLCAwLCAwLCAtMSwgLTEsIEZBVUxUX0JVU1kpOwogCWNsb3NlKHNrKTsKIAogCXNrID0gcHJlcGFyZV9zaygmYW1wO3RoaXNfaXBfZGVzdCwgMjAwLCAyMDApOwpAQCAtMjcyLDYgJiM0MzsyODAsMTggQEAgc3RhdGljIHZvaWQgY2hlY2tfY2xvc2VkX3NvY2tldCh2b2lkKQogCQkJCSAgdGhpc19pcF9kZXN0LCBERUZBVUxUX1RFU1RfUFJFRklYLAogCQkJCSAgZmFsc2UsIHRydWUsIDIwLCAxMCwgMCk7CiAJY2xvc2Uoc2spOwomIzQzOwomIzQzOwlpZiAoIXNob3VsZF9za2lwX3Rlc3QoJiMzNDtjbG9zZWQgc29ja2V0LCBhZGQgJiM0MzsgZGVsZXRlIFZSRi1zY29wZWQga2V5JiMzNDssCiYjNDM7CQkJICAgICAgS0NPTkZJR19ORVRfVlJGKSkgewomIzQzOwkJc2sgPSBwcmVwYXJlX3NrKCZhbXA7dGhpc19pcF9kZXN0LCAyMDAsIDIwMCk7CiYjNDM7CQlpZiAodGVzdF9hZGRfa2V5X3ZyZihzaywgU0VDT05EX1BBU1NXT1JELCBUQ1BfQU9fS0VZRl9JRklOREVYLAomIzQzOwkJCQkgICAgIHRoaXNfaXBfZGVzdCwgREVGQVVMVF9URVNUX1BSRUZJWCwKJiM0MzsJCQkJICAgICB0ZXN0X3ZyZl9pZmluZGV4LCAyMDEsIDIwMSkpCiYjNDM7CQkJdGVzdF9lcnJvcigmIzM0O3Rlc3RfYWRkX2tleV92cmYoKSYjMzQ7KTsKJiM0MzsJCXRyeV9kZWxldGVfa2V5KCYjMzQ7Y2xvc2VkIHNvY2tldCwgYWRkICYjNDM7IGRlbGV0ZSBWUkYtc2NvcGVkIGtleSYjMzQ7LCBzaywgMjAxLCAyMDEsCiYjNDM7CQkJICAgICAgIHRlc3RfdnJmX2lmaW5kZXgsIDAsIC0xLCAtMSwgMCk7CiYjNDM7CQljbG9zZShzayk7CiYjNDM7CX0KIH0KIAogc3RhdGljIHZvaWQgYXNzZXJ0X25vX2N1cnJlbnRfcm5leHQoY29uc3QgY2hhciAqdHN0X21zZywgaW50IHNrKQpAQCAtMzIyLDggJiM0MzszNDIsOCBAQCBzdGF0aWMgdm9pZCBjaGVja19saXN0ZW5fc29ja2V0KHZvaWQpCiAJaW50IHNrLCBlcnI7CiAKIAlzayA9IHByZXBhcmVfbHNrKCZhbXA7dGhpc19pcF9kZXN0LCAyMDAsIDIwMCk7Ci0JdHJ5X2RlbGV0ZV9rZXkoJiMzNDtsaXN0ZW4gc29ja2V0LCBkZWxldGUgYSBrZXkmIzM0Oywgc2ssIDIwMCwgMjAwLCAwLCAtMSwgLTEsIDApOwotCXRyeV9kZWxldGVfa2V5KCYjMzQ7bGlzdGVuIHNvY2tldCwgZGVsZXRlIGFsbCBrZXlzJiMzNDssIHNrLCAxMDAsIDEwMCwgMCwgLTEsIC0xLCAwKTsKJiM0MzsJdHJ5X2RlbGV0ZV9rZXkoJiMzNDtsaXN0ZW4gc29ja2V0LCBkZWxldGUgYSBrZXkmIzM0Oywgc2ssIDIwMCwgMjAwLCAwLCAwLCAtMSwgLTEsIDApOwomIzQzOwl0cnlfZGVsZXRlX2tleSgmIzM0O2xpc3RlbiBzb2NrZXQsIGRlbGV0ZSBhbGwga2V5cyYjMzQ7LCBzaywgMTAwLCAxMDAsIDAsIDAsIC0xLCAtMSwgMCk7CiAJY2xvc2Uoc2spOwogCiAJc2sgPSBwcmVwYXJlX2xzaygmYW1wO3RoaXNfaXBfZGVzdCwgMjAwLCAyMDApOwpAQCAtMzQ1LDggJiM0MzszNjUsMTAgQEAgc3RhdGljIHZvaWQgY2hlY2tfbGlzdGVuX3NvY2tldCh2b2lkKQogCWlmIChsaXN0ZW4oc2ssIDEwKSkKIAkJdGVzdF9lcnJvcigmIzM0O2xpc3RlbigpJiMzNDspOwogCWFzc2VydF9ub19jdXJyZW50X3JuZXh0KCYjMzQ7bGlzdGVuKCkgYWZ0ZXIgY3VycmVudC9ybmV4dCBrZXlzIHNldCYjMzQ7LCBzayk7Ci0JdHJ5X2RlbGV0ZV9rZXkoJiMzNDtsaXN0ZW4gc29ja2V0LCBkZWxldGUgY3VycmVudCBrZXkgZnJvbSBiZWZvcmUgbGlzdGVuKCkmIzM0Oywgc2ssIDEwMCwgMTAwLCAwLCAtMSwgLTEsIEZBVUxUX0ZJWE1FKTsKLQl0cnlfZGVsZXRlX2tleSgmIzM0O2xpc3RlbiBzb2NrZXQsIGRlbGV0ZSBybmV4dCBrZXkgZnJvbSBiZWZvcmUgbGlzdGVuKCkmIzM0Oywgc2ssIDIwMCwgMjAwLCAwLCAtMSwgLTEsIEZBVUxUX0ZJWE1FKTsKJiM0MzsJdHJ5X2RlbGV0ZV9rZXkoJiMzNDtsaXN0ZW4gc29ja2V0LCBkZWxldGUgY3VycmVudCBrZXkgZnJvbSBiZWZvcmUgbGlzdGVuKCkmIzM0Oywgc2ssCiYjNDM7CQkgICAgICAgMTAwLCAxMDAsIDAsIDAsIC0xLCAtMSwgRkFVTFRfRklYTUUpOwomIzQzOwl0cnlfZGVsZXRlX2tleSgmIzM0O2xpc3RlbiBzb2NrZXQsIGRlbGV0ZSBybmV4dCBrZXkgZnJvbSBiZWZvcmUgbGlzdGVuKCkmIzM0Oywgc2ssCiYjNDM7CQkgICAgICAgMjAwLCAyMDAsIDAsIDAsIC0xLCAtMSwgRkFVTFRfRklYTUUpOwogCWNsb3NlKHNrKTsKIAogCWFzc2VydF9ub190Y3BfcmVwYWlyKCk7CkBAIC0zNTksMTMgJiM0MzszODEsMTMgQEAgc3RhdGljIHZvaWQgY2hlY2tfbGlzdGVuX3NvY2tldCh2b2lkKQogCQkJIERFRkFVTFRfVEVTVF9QUkVGSVgsIDEyLCAxMykpCiAJCXRlc3RfZXJyb3IoJiMzNDt0ZXN0X2FkZF9rZXkoKSYjMzQ7KTsKIAl0cnlfZGVsZXRlX2tleSgmIzM0O2xpc3RlbiBzb2NrZXQsIGRlbGV0ZSBhIGtleSAmIzQzOyBzZXQgY3VycmVudC9ybmV4dCYjMzQ7LCBzaywKLQkJICAgICAgIDEwMCwgMTAwLCAwLCAxMCwgMTMsIEZBVUxUX0NVUlJORVhUKTsKJiM0MzsJCSAgICAgICAxMDAsIDEwMCwgMCwgMCwgMTAsIDEzLCBGQVVMVF9DVVJSTkVYVCk7CiAJdHJ5X2RlbGV0ZV9rZXkoJiMzNDtsaXN0ZW4gc29ja2V0LCBmb3JjZS1kZWxldGUgY3VycmVudCBrZXkmIzM0Oywgc2ssCi0JCSAgICAgICAxMCwgMTEsIDAsIDIwMCwgLTEsIEZBVUxUX0NVUlJORVhUKTsKJiM0MzsJCSAgICAgICAxMCwgMTEsIDAsIDAsIDIwMCwgLTEsIEZBVUxUX0NVUlJORVhUKTsKIAl0cnlfZGVsZXRlX2tleSgmIzM0O2xpc3RlbiBzb2NrZXQsIGZvcmNlLWRlbGV0ZSBybmV4dCBrZXkmIzM0Oywgc2ssCi0JCSAgICAgICAxMiwgMTMsIDAsIC0xLCAyMDAsIEZBVUxUX0NVUlJORVhUKTsKJiM0MzsJCSAgICAgICAxMiwgMTMsIDAsIDAsIC0xLCAyMDAsIEZBVUxUX0NVUlJORVhUKTsKIAl0cnlfZGVsZXRlX2tleSgmIzM0O2xpc3RlbiBzb2NrZXQsIGRlbGV0ZSBhIGtleSYjMzQ7LCBzaywKLQkJICAgICAgIDIwMCwgMjAwLCAwLCAtMSwgLTEsIDApOwomIzQzOwkJICAgICAgIDIwMCwgMjAwLCAwLCAwLCAtMSwgLTEsIDApOwogCWNsb3NlKHNrKTsKIAogCXNrID0gcHJlcGFyZV9sc2soJmFtcDt0aGlzX2lwX2Rlc3QsIDIwMCwgMjAwKTsKQEAgLTExMzEsNyAmIzQzOzExNTMsNiBAQCBzdGF0aWMgdm9pZCBjaGVja19lc3RhYmxpc2hlZF9zb2NrZXQodm9pZCkKIHsKIAl1bnNpZ25lZCBpbnQgcG9ydCA9IHRlc3Rfc2VydmVyX3BvcnQ7CiAKLQlzZXR1cF92cmZzKCk7CiAJdHJ5X2NsaWVudF9ydW4oJiMzNDtjbGllbnQ6IENoZWNrIGN1cnJlbnQvcm5leHQga2V5cyB1bnNldCBiZWZvcmUgY29ubmVjdCgpJiMzNDssCiAJCSAgICAgICBwb3J0JiM0MzsmIzQzOywgMjAsIC0xLCAtMSk7CiAJdHJ5X2NsaWVudF9ydW4oJiMzNDtjbGllbnQ6IENoZWNrIGN1cnJlbnQvcm5leHQga2V5cyBzZXQgYmVmb3JlIGNvbm5lY3QoKSYjMzQ7LApAQCAtMTE1MCw2ICYjNDM7MTE3MSw3IEBAIHN0YXRpYyB2b2lkICpjbGllbnRfZm4odm9pZCAqYXJnKQogewogCWlmIChpbmV0X3B0b24oVEVTVF9GQU1JTFksIFRFU1RfV1JPTkdfSVAsICZhbXA7d3JvbmdfYWRkcikgIT0gMSkKIAkJdGVzdF9lcnJvcigmIzM0O0NhbiYjMzk7dCBjb252ZXJ0IGlwIGFkZHJlc3MgJXMmIzM0OywgVEVTVF9XUk9OR19JUCk7CiYjNDM7CXNldHVwX3ZyZnMoKTsKIAljaGVja19jbG9zZWRfc29ja2V0KCk7CiAJY2hlY2tfbGlzdGVuX3NvY2tldCgpOwogCWNoZWNrX2VzdGFibGlzaGVkX3NvY2tldCgpOwpAQCAtMTE1OCw2ICYjNDM7MTE4MCw2IEBAIHN0YXRpYyB2b2lkICpjbGllbnRfZm4odm9pZCAqYXJnKQogCiBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogewotCXRlc3RfaW5pdCgxMjEsIHNlcnZlcl9mbiwgY2xpZW50X2ZuKTsKJiM0MzsJdGVzdF9pbml0KDEyMiwgc2VydmVyX2ZuLCBjbGllbnRfZm4pOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvYW9saWIuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vbGliL2FvbGliLmgKaW5kZXggZWJiMjg5OWMxMmZlMC4uNTNiZTE3NDQyMzdlZSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvYW9saWIuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9hb2xpYi5oCkBAIC00MDQsNyAmIzQzOzQwNCw4IEBAIHN0YXRpYyBpbmxpbmUgaW50IHRlc3RfcHJlcGFyZV9kZWZfa2V5KHN0cnVjdCB0Y3BfYW9fYWRkICphbywKIAogZXh0ZXJuIGludCB0ZXN0X2dldF9vbmVfYW8oaW50IHNrLCBzdHJ1Y3QgdGNwX2FvX2dldHNvY2tvcHQgKm91dCwKIAkJCSAgIHZvaWQgKmFkZHIsIHNpemVfdCBhZGRyX3N6LAotCQkJICAgdWludDhfdCBwcmVmaXgsIHVpbnQ4X3Qgc25kaWQsIHVpbnQ4X3QgcmN2aWQpOwomIzQzOwkJCSAgIHVpbnQ4X3QgcHJlZml4LCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkLAomIzQzOwkJCSAgIHVpbnQ4X3Qga2V5ZmxhZ3MsIGludCBpZmluZGV4KTsKIGV4dGVybiBpbnQgdGVzdF9nZXRfYW9faW5mbyhpbnQgc2ssIHN0cnVjdCB0Y3BfYW9faW5mb19vcHQgKm91dCk7CiBleHRlcm4gaW50IHRlc3Rfc2V0X2FvX2luZm8oaW50IHNrLCBzdHJ1Y3QgdGNwX2FvX2luZm9fb3B0ICppbik7CiBleHRlcm4gaW50IHRlc3RfY21wX2dldHNvY2tvcHRfc2V0c29ja29wdChjb25zdCBzdHJ1Y3QgdGNwX2FvX2FkZCAqYSwKQEAgLTQxOCw3ICYjNDM7NDE5LDggQEAgc3RhdGljIGlubGluZSBpbnQgdGVzdF92ZXJpZnlfc29ja2V0X2tleShpbnQgc2ssIHN0cnVjdCB0Y3BfYW9fYWRkICprZXkpCiAJaW50IGVycjsKIAogCWVyciA9IHRlc3RfZ2V0X29uZV9hbyhzaywgJmFtcDtrZXkyLCAmYW1wO2tleS0mZ3Q7YWRkciwgc2l6ZW9mKGtleS0mZ3Q7YWRkciksCi0JCQkgICAgICBrZXktJmd0O3ByZWZpeCwga2V5LSZndDtzbmRpZCwga2V5LSZndDtyY3ZpZCk7CiYjNDM7CQkJICAgICAga2V5LSZndDtwcmVmaXgsIGtleS0mZ3Q7c25kaWQsIGtleS0mZ3Q7cmN2aWQsCiYjNDM7CQkJICAgICAga2V5LSZndDtrZXlmbGFncywga2V5LSZndDtpZmluZGV4KTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9zb2NrLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9zb2NrLmMKaW5kZXggZWY4ZTkwMzFkNDdhMy4uMmU3YjA2YTFhMTU2NyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvc29jay5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vbGliL3NvY2suYwpAQCAtMjUyLDcgJiM0MzsyNTIsNyBAQCBzdGF0aWMgaW50IHRlc3RfZ2V0X2FvX2tleXNfbnIoaW50IHNrKQogCiBpbnQgdGVzdF9nZXRfb25lX2FvKGludCBzaywgc3RydWN0IHRjcF9hb19nZXRzb2Nrb3B0ICpvdXQsCiAJCXZvaWQgKmFkZHIsIHNpemVfdCBhZGRyX3N6LCB1aW50OF90IHByZWZpeCwKLQkJdWludDhfdCBzbmRpZCwgdWludDhfdCByY3ZpZCkKJiM0MzsJCXVpbnQ4X3Qgc25kaWQsIHVpbnQ4X3QgcmN2aWQsIHVpbnQ4X3Qga2V5ZmxhZ3MsIGludCBpZmluZGV4KQogewogCXN0cnVjdCB0Y3BfYW9fZ2V0c29ja29wdCB0bXAgPSB7fTsKIAlzb2NrbGVuX3QgdG1wX3N6ID0gc2l6ZW9mKHRtcCk7CkBAIC0yNjIsNiAmIzQzOzI2Miw4IEBAIGludCB0ZXN0X2dldF9vbmVfYW8oaW50IHNrLCBzdHJ1Y3QgdGNwX2FvX2dldHNvY2tvcHQgKm91dCwKIAl0bXAucHJlZml4ID0gcHJlZml4OwogCXRtcC5zbmRpZCAgPSBzbmRpZDsKIAl0bXAucmN2aWQgID0gcmN2aWQ7CiYjNDM7CXRtcC5rZXlmbGFncyA9IGtleWZsYWdzOwomIzQzOwl0bXAuaWZpbmRleCA9IGlmaW5kZXg7CiAJdG1wLm5rZXlzICA9IDE7CiAKIAlyZXQgPSBnZXRzb2Nrb3B0KHNrLCBJUFBST1RPX1RDUCwgVENQX0FPX0dFVF9LRVlTLCAmYW1wO3RtcCwgJmFtcDt0bXBfc3opOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTU6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjM5MgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBGdXp6aW5nIFNlc3Npb24gSnVzdGlmaWNhdGlvbioqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGxhbmRlZC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7RG9lcyB0aGlzIHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBydW4/JiMzNDsgSXQgbW9kaWZpZXMgYG5ldC9pcHY0L3RjcF9hby5jYCBhbmQgYSBmZXcgc2VsZnRlc3RzLCB3aGljaCBpcyBhIGtleSBpbmRpY2F0b3IuIExldCYjMzk7cyBkaWcgaW4uCgpUaGUgZGlmZiBpbiBgbmV0L2lwdjQvdGNwX2FvLmNgIGlzIHByZXR0eSBjb25jaXNlLiBIbW0sIGl0IHNlZW1zIHRvIGFkZCBhIGNoZWNrIGZvciBgVENQX0FPX0tFWUZfSUZJTkRFWGAgYW5kIGFzc2lnbnMgYGNtZC5pZmluZGV4YCB0byBhIG5ldyB2YXJpYWJsZSBgbDNpbmRleGAuIFJpZ2h0LCB0aGlzIGBjbWRgIHZhcmlhYmxlLi4uIHdoZXJlIGRvZXMgdGhhdCBjb21lIGZyb20/IEl0JiMzOTtzIGFsbW9zdCBjZXJ0YWlubHkgYSBzdHJ1Y3QgYmVpbmcgcGFzc2VkIGluIGZyb20gdXNlcnNwYWNlIHZpYSBgc2V0c29ja29wdGAuIEkgc2hvdWxkIGNoZWNrIHRoZSBkZWZpbml0aW9uIGFuZCB1c2FnZSBvZiBgdGNwX2FvX2RlbF9jbWRgIHdpdGhpbiB0aGUgc2FtZSBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQmIzM5O3MgYmVpbmcgcGFzc2VkIGluIGFuZCBob3cgdGhpcyBuZXcgYGlmYCBzdGF0ZW1lbnQgaW50ZXJhY3RzIHdpdGggdGhlIGV4aXN0aW5nIGxvZ2ljLCB0byBnZXQgYSBoYW5kbGUgb24gcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gTGV0JiMzOTtzIHNlZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxNTo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y3BfYW9fZGVsX2NtZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9hby5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9hby5jPTk5MD10Y3BfaW5ib3VuZF9hb19oYXNoKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC90Y3BfYW8uYy0xMDU1LVx0XHRcdGlmIChrZXkpXG5uZXQvaXB2NC90Y3BfYW8uYzoxMDU2Olx0XHRcdFx0LyogcGFpcnMgd2l0aCB0Y3BfYW9fZGVsX2NtZCAqL1xubmV0L2lwdjQvdGNwX2FvLmMtMTA1Ny1cdFx0XHRcdFdSSVRFX09OQ0UoaW5mby1cdTAwM2VjdXJyZW50X2tleSwga2V5KTtcbi0tXG5uZXQvaXB2NC90Y3BfYW8uYy0xMDY4LVx0ICogLSByZXF1ZXN0IHNvY2tldHMgd291bGQgcmFjZSBvbiB0aG9zZSBrZXkgcG9pbnRlcnNcbm5ldC9pcHY0L3RjcF9hby5jOjEwNjk6XHQgKiAtIHRjcF9hb19kZWxfY21kKCkgYWxsb3dzIGFzeW5jIGtleSByZW1vdmFsXG5uZXQvaXB2NC90Y3BfYW8uYy0xMDcwLVx0ICovXG4tLVxubmV0L2lwdjQvdGNwX2FvLmM9MTc0Nj1zdGF0aWMgaW50IHRjcF9hb19kZWxldGVfa2V5KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRjcF9hb19pbmZvICphb19pbmZvLFxuLS1cbm5ldC9pcHY0L3RjcF9hby5jLTE3OTktI2RlZmluZSBUQ1BfQU9fREVMX0tFWUZfQUxMIChUQ1BfQU9fS0VZRl9JRklOREVYKVxubmV0L2lwdjQvdGNwX2FvLmM6MTgwMDpzdGF0aWMgaW50IHRjcF9hb19kZWxfY21kKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgc2hvcnQgaW50IGZhbWlseSxcbm5ldC9pcHY0L3RjcF9hby5jLTE4MDEtXHRcdFx0ICBzb2NrcHRyX3Qgb3B0dmFsLCBpbnQgb3B0bGVuKVxuLS1cbm5ldC9pcHY0L3RjcF9hby5jPTIwMzg9aW50IHRjcF9wYXJzZV9hbyhzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHVuc2lnbmVkIHNob3J0IGludCBmYW1pbHksXG4tLVxubmV0L2lwdjQvdGNwX2FvLmMtMjA0Ny1cdGNhc2UgVENQX0FPX0RFTF9LRVk6XG5uZXQvaXB2NC90Y3BfYW8uYzoyMDQ4Olx0XHRyZXR1cm4gdGNwX2FvX2RlbF9jbWQoc2ssIGZhbWlseSwgb3B0dmFsLCBvcHRsZW4pO1xubmV0L2lwdjQvdGNwX2FvLmMtMjA0OS1cdGNhc2UgVENQX0FPX0lORk86XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDE1OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0NDEKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgYHRjcF9hb19kZWxfY21kYCBGdW5jdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBndXRzIG9mIHRoZSBUQ1AgQXV0aGVudGljYXRpb24gT3B0aW9uIChUQ1AgQU8pIGltcGxlbWVudGF0aW9uLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBgdGNwX2FvX2RlbF9jbWRgIGZ1bmN0aW9uIHdpdGhpbiBgbmV0L2lwdjQvdGNwX2FvLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgVENQIEFPIGtleXMgYXJlIHJlbW92ZWQgb3IgaW52YWxpZGF0ZWQsIGFzIHRoaXMgaXMgY3J1Y2lhbCBmb3Igc2VjdXJpdHkgYW5kIHNlc3Npb24gbWFuYWdlbWVudC4gSSYjMzk7bSBhc3N1bWluZyB0aGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyB0aGUgZGVsZXRpb24gb3IgaW52YWxpZGF0aW9uIG9mIGF1dGhlbnRpY2F0aW9uIGtleXMgYXNzb2NpYXRlZCB3aXRoIGEgVENQIGNvbm5lY3Rpb24uIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGtleSBtYW5hZ2VtZW50IHN0cnVjdHVyZXMsIHdoYXQgbG9ja2luZyBtZWNoYW5pc21zIGl0IGVtcGxveXMgdG8gZW5zdXJlIHRocmVhZCBzYWZldHkgKGxpa2VseSBzcGlubG9ja3Mgb3IgcmVhZC93cml0ZSBsb2NrcywgZ2l2ZW4gaXRzIHBvdGVudGlhbCBmb3IgY29uY3VycmVudCBhY2Nlc3MpLCBhbmQgaG93IGl0IGNsZWFucyB1cCBhbnkgYXNzb2NpYXRlZCByZXNvdXJjZXMuIEFyZSB0aGVyZSBhbnkgcmVmZXJlbmNlIGNvdW50cyBpbnZvbHZlZD8gV2hhdCBoYXBwZW5zIGlmIHRoZSBrZXkgZGVsZXRpb24gZmFpbHMgZm9yIHNvbWUgcmVhc29uPyBEb2VzIHRoaXMgdHJpZ2dlciBhbnkgZXJyb3IgY2FsbGJhY2tzIG9yIGxvZ2dpbmc/IEkmIzM5O2xsIGFsc28gYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcywgbGlrZSByYWNlIGNvbmRpdGlvbnMgb3IgbWVtb3J5IGxlYWtzLCBhc3NvY2lhdGVkIHdpdGggdGhlIGRlbGV0aW9uIHByb2Nlc3MgaXRzZWxmLiBUaGlzIGZ1bmN0aW9uIGlzIGNyaXRpY2FsIGZvciBtYWludGFpbmluZyB0aGUgaW50ZWdyaXR5IGFuZCBzZWN1cml0eSBvZiB0aGUgQU8gc3lzdGVtLCBzbyBhIHRob3JvdWdoIHVuZGVyc3RhbmRpbmcgaXMgYWJzb2x1dGVseSBlc3NlbnRpYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDE1OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX2FvLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNzk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE3OTU6XHRcdGhsaXN0X2FkZF9oZWFkX3JjdShcdTAwMjZrZXktXHUwMDNlbm9kZSwgXHUwMDI2YW9faW5mby1cdTAwM2VoZWFkKTtcbjE3OTY6XHRcdHJldHVybiBlcnI7XG4xNzk3Olx0fVxuMTc5ODpcdFxuMTc5OTpcdCNkZWZpbmUgVENQX0FPX0RFTF9LRVlGX0FMTCAoVENQX0FPX0tFWUZfSUZJTkRFWClcbjE4MDA6XHRzdGF0aWMgaW50IHRjcF9hb19kZWxfY21kKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgc2hvcnQgaW50IGZhbWlseSxcbjE4MDE6XHRcdFx0XHQgIHNvY2twdHJfdCBvcHR2YWwsIGludCBvcHRsZW4pXG4xODAyOlx0e1xuMTgwMzpcdFx0c3RydWN0IHRjcF9hb19rZXkgKmtleSwgKm5ld19jdXJyZW50ID0gTlVMTCwgKm5ld19ybmV4dCA9IE5VTEw7XG4xODA0Olx0XHRpbnQgZXJyLCBhZGRyX2xlbiwgbDNpbmRleCA9IDA7XG4xODA1Olx0XHRzdHJ1Y3QgdGNwX2FvX2luZm8gKmFvX2luZm87XG4xODA2Olx0XHR1bmlvbiB0Y3BfYW9fYWRkciAqYWRkcjtcbjE4MDc6XHRcdHN0cnVjdCB0Y3BfYW9fZGVsIGNtZDtcbjE4MDg6XHRcdF9fdTggcHJlZml4O1xuMTgwOTpcdFx0dTE2IHBvcnQ7XG4xODEwOlx0XG4xODExOlx0XHRpZiAob3B0bGVuIFx1MDAzYyBzaXplb2YoY21kKSlcbjE4MTI6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xODEzOlx0XG4xODE0Olx0XHRlcnIgPSBjb3B5X3N0cnVjdF9mcm9tX3NvY2twdHIoXHUwMDI2Y21kLCBzaXplb2YoY21kKSwgb3B0dmFsLCBvcHRsZW4pO1xuMTgxNTpcdFx0aWYgKGVycilcbjE4MTY6XHRcdFx0cmV0dXJuIGVycjtcbjE4MTc6XHRcbjE4MTg6XHRcdGlmIChjbWQucmVzZXJ2ZWQgIT0gMCB8fCBjbWQucmVzZXJ2ZWQyICE9IDApXG4xODE5Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTgyMDpcdFxuMTgyMTpcdFx0aWYgKGNtZC5zZXRfY3VycmVudCB8fCBjbWQuc2V0X3JuZXh0KSB7XG4xODIyOlx0XHRcdGlmICghdGNwX2FvX2Nhbl9zZXRfY3VycmVudF9ybmV4dChzaykpXG4xODIzOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xODI0Olx0XHR9XG4xODI1Olx0XG4xODI2Olx0XHRpZiAoY21kLmtleWZsYWdzIFx1MDAyNiB+VENQX0FPX0RFTF9LRVlGX0FMTClcbjE4Mjc6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xODI4Olx0XG4xODI5Olx0XHQvKiBObyBzYW5pdHkgY2hlY2sgZm9yIFRDUF9BT19LRVlGX0lGSU5ERVggYXMgaWYgYSBWUkZcbjE4MzA6XHRcdCAqIHdhcyBkZXN0cm95ZWQsIHRoZXJlIHN0aWxsIHNob3VsZCBiZSBhIHdheSB0byBkZWxldGUga2V5cyxcbjE4MzE6XHRcdCAqIHRoYXQgd2VyZSBib3VuZCB0byB0aGF0IGwzaW50Zi4gU28sIGZhaWwgbGF0ZSBhdCBsb29rdXAgc3RhZ2VcbjE4MzI6XHRcdCAqIGlmIHRoZXJlIGlzIG5vIGtleSBmb3IgdGhhdCBpZmluZGV4LlxuMTgzMzpcdFx0ICovXG4xODM0Olx0XHRpZiAoY21kLmlmaW5kZXggXHUwMDI2XHUwMDI2ICEoY21kLmtleWZsYWdzIFx1MDAyNiBUQ1BfQU9fS0VZRl9JRklOREVYKSlcbjE4MzU6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xODM2Olx0XG4xODM3Olx0XHRpZiAoY21kLmtleWZsYWdzIFx1MDAyNiBUQ1BfQU9fS0VZRl9JRklOREVYKVxuMTgzODpcdFx0XHRsM2luZGV4ID0gY21kLmlmaW5kZXg7XG4xODM5Olx0XG4xODQwOlx0XHRhb19pbmZvID0gc2V0c29ja29wdF9hb19pbmZvKHNrKTtcbjE4NDE6XHRcdGlmIChJU19FUlIoYW9faW5mbykpXG4xODQyOlx0XHRcdHJldHVybiBQVFJfRVJSKGFvX2luZm8pO1xuMTg0MzpcdFx0aWYgKCFhb19pbmZvKVxuMTg0NDpcdFx0XHRyZXR1cm4gLUVOT0VOVDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTU6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODU3MAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE4NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFRDUCBBTyBLZXkgRmxhZyBMb2dpYyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBJIHNlZSB0aGV5JiMzOTt2ZSBhZGRlZCBhIGNoZWNrOiBgaWYgKGNtZC5rZXlmbGFncyAmYW1wOyBUQ1BfQU9fS0VZRl9JRklOREVYKWAuIEl0IHNlZW1zIGxpa2UgdGhleSYjMzk7cmUgbG9va2luZyBmb3IgYSBzcGVjaWZpYyBmbGFnLCBgVENQX0FPX0tFWUZfSUZJTkRFWGAsIHdpdGhpbiBhIGBrZXlmbGFnc2AgZmllbGQgb2YgYSBzdHJ1Y3R1cmUgY2FsbGVkIGBjbWRgLiBSaWdodCwgYGNtZGAgaXMgcG9wdWxhdGVkIGJ5IGBjb3B5X3N0cnVjdF9mcm9tX3NvY2twdHIoJmFtcDtjbWQsIHNpemVvZihjbWQpLCBvcHR2YWwsIG9wdGxlbik7YC4gSSByZW1lbWJlciB0aGlzIGZ1bmN0aW9uLiBJdCBjb3BpZXMgZGF0YSBmcm9tIHVzZXIgc3BhY2UuIEl0IGhhbmRsZXMgY2FzZXMgd2hlcmUgdGhlIHVzZXItcHJvdmlkZWQgc3RydWN0dXJlIGlzIGVpdGhlciBzbWFsbGVyIG9yIGxhcmdlciB0aGFuIHRoZSBrZXJuZWwmIzM5O3MgZGVmaW5pdGlvbi4gWmVyby1wYWRkaW5nIGluIHRoZSBmaXJzdCBjYXNlLCB6ZXJvLWNoZWNraW5nIHRoZSBleHRyYSBieXRlcyBpbiB0aGUgc2Vjb25kLiBTbywgYXNzdW1pbmcgdGhlIHVzZXIgc3BhY2Ugc3RydWN0IGlzIHdlbGwtZm9ybWVkLCBgY21kYCBpcyBmdWxseSBpbml0aWFsaXplZCwgd2hpY2ggaXMgY3J1Y2lhbC4KCk5vdywgYGwzaW5kZXhgIGlzIGEgbG9jYWwgdmFyaWFibGUsIGluaXRpYWxpemVkIHRvIHplcm86IGBpbnQgZXJyLCBhZGRyX2xlbiwgbDNpbmRleCA9IDA7YC4gT2theSwgYW5kIHRoZW4gbGF0ZXIgb24sIHRoZXkgdXNlIGBsM2luZGV4YCBpbiBgdGNwX2FvX2RlbF9jbWRgLiBUaGF0JiMzOTtzIHRoZSBrZXkuIFdoZXJlIGRvZXMgdGhpcyB2YWx1ZSBhY3R1YWxseSBnZXQgKnVzZWQqPyBJIG5lZWQgdG8gdHJhY2UgdGhpcyB2YXJpYWJsZS4gTGV0JiMzOTtzIGRpZyBkZWVwZXIgYW5kIHNlZSBleGFjdGx5IGhvdyBgbDNpbmRleGAgaXMgZW1wbG95ZWQgZG93biB0aGUgbGluZS4gSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9uIG9mIHRoaXMgZmxhZyBhbmQgaG93IGl0JiMzOTtzIGluZmx1ZW5jaW5nIHRoZSBuZXR3b3JrIHN0YWNrIGJlaGF2aW9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxNTo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9hby5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTg0NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxODQ1Olx0XG4xODQ2Olx0XHQvKiBGb3Igc29ja2V0cyBpbiBUQ1BfQ0xPU0VEIGl0JiMzOTtzIHBvc3NpYmxlIHNldCBrZXlzIHRoYXQgYXJlbiYjMzk7dFxuMTg0NzpcdFx0ICogbWF0Y2hpbmcgdGhlIGZ1dHVyZSBwZWVyIChhZGRyZXNzL1ZSRi9ldGMpLFxuMTg0ODpcdFx0ICogdGNwX2FvX2Nvbm5lY3RfaW5pdCgpIHdpbGwgY2hvb3NlIGEgY29ycmVjdCBtYXRjaGluZyBNS1RcbjE4NDk6XHRcdCAqIGlmIHRoZXJlJiMzOTtzIGFueS5cbjE4NTA6XHRcdCAqL1xuMTg1MTpcdFx0aWYgKGNtZC5zZXRfY3VycmVudCkge1xuMTg1MjpcdFx0XHRuZXdfY3VycmVudCA9IHRjcF9hb19lc3RhYmxpc2hlZF9rZXkoc2ssIGFvX2luZm8sIGNtZC5jdXJyZW50X2tleSwgLTEpO1xuMTg1MzpcdFx0XHRpZiAoIW5ld19jdXJyZW50KVxuMTg1NDpcdFx0XHRcdHJldHVybiAtRU5PRU5UO1xuMTg1NTpcdFx0fVxuMTg1NjpcdFx0aWYgKGNtZC5zZXRfcm5leHQpIHtcbjE4NTc6XHRcdFx0bmV3X3JuZXh0ID0gdGNwX2FvX2VzdGFibGlzaGVkX2tleShzaywgYW9faW5mbywgLTEsIGNtZC5ybmV4dCk7XG4xODU4Olx0XHRcdGlmICghbmV3X3JuZXh0KVxuMTg1OTpcdFx0XHRcdHJldHVybiAtRU5PRU5UO1xuMTg2MDpcdFx0fVxuMTg2MTpcdFx0aWYgKGNtZC5kZWxfYXN5bmMgXHUwMDI2XHUwMDI2IHNrLVx1MDAzZXNrX3N0YXRlICE9IFRDUF9MSVNURU4pXG4xODYyOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTg2MzpcdFxuMTg2NDpcdFx0aWYgKGZhbWlseSA9PSBBRl9JTkVUKSB7XG4xODY1Olx0XHRcdHN0cnVjdCBzb2NrYWRkcl9pbiAqc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKVx1MDAyNmNtZC5hZGRyO1xuMTg2NjpcdFxuMTg2NzpcdFx0XHRhZGRyID0gKHVuaW9uIHRjcF9hb19hZGRyICopXHUwMDI2c2luLVx1MDAzZXNpbl9hZGRyO1xuMTg2ODpcdFx0XHRhZGRyX2xlbiA9IHNpemVvZihzdHJ1Y3QgaW5fYWRkcik7XG4xODY5Olx0XHRcdHBvcnQgPSBudG9ocyhzaW4tXHUwMDNlc2luX3BvcnQpO1xuMTg3MDpcdFx0fSBlbHNlIHtcbjE4NzE6XHRcdFx0c3RydWN0IHNvY2thZGRyX2luNiAqc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopXHUwMDI2Y21kLmFkZHI7XG4xODcyOlx0XHRcdHN0cnVjdCBpbjZfYWRkciAqYWRkcjYgPSBcdTAwMjZzaW42LVx1MDAzZXNpbjZfYWRkcjtcbjE4NzM6XHRcbjE4NzQ6XHRcdFx0aWYgKGlwdjZfYWRkcl92NG1hcHBlZChhZGRyNikpIHtcbjE4NzU6XHRcdFx0XHRhZGRyID0gKHVuaW9uIHRjcF9hb19hZGRyICopXHUwMDI2YWRkcjYtXHUwMDNlczZfYWRkcjMyWzNdO1xuMTg3NjpcdFx0XHRcdGFkZHJfbGVuID0gc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKTtcbjE4Nzc6XHRcdFx0XHRmYW1pbHkgPSBBRl9JTkVUO1xuMTg3ODpcdFx0XHR9IGVsc2Uge1xuMTg3OTpcdFx0XHRcdGFkZHIgPSAodW5pb24gdGNwX2FvX2FkZHIgKilhZGRyNjtcbjE4ODA6XHRcdFx0XHRhZGRyX2xlbiA9IHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpO1xuMTg4MTpcdFx0XHR9XG4xODgyOlx0XHRcdHBvcnQgPSBudG9ocyhzaW42LVx1MDAzZXNpbjZfcG9ydCk7XG4xODgzOlx0XHR9XG4xODg0Olx0XHRwcmVmaXggPSBjbWQucHJlZml4O1xuMTg4NTpcdFxuMTg4NjpcdFx0LyogQ3VycmVudGx5IG1hdGNoaW5nIGlzIG5vdCBwZXJmb3JtZWQgb24gcG9ydCAob3IgcG9ydCByYW5nZXMpICovXG4xODg3Olx0XHRpZiAocG9ydCAhPSAwKVxuMTg4ODpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE4ODk6XHRcbjE4OTA6XHRcdC8qIFdlIGNvdWxkIGNob29zZSByYW5kb20gcHJlc2VudCBrZXkgaGVyZSBmb3IgY3VycmVudC9ybmV4dFxuMTg5MTpcdFx0ICogYnV0IHRoYXQmIzM5O3MgbGVzcyBwcmVkaWN0YWJsZS4gTGV0JiMzOTtzIGJlIHN0cmljdCBhbmQgZG9uJiMzOTt0XG4xODkyOlx0XHQgKiBhbGxvdyByZW1vdmluZyBhIGtleSB0aGF0JiMzOTtzIGluIHVzZS4gUkZDNTkyNSBkb2VzbiYjMzk7dFxuMTg5MzpcdFx0ICogc3BlY2lmeSBob3ctdG8gY29vcmRpbmF0ZSBrZXkgcmVtb3ZhbCwgYnV0IHNheXM6XG4xODk0Olx0XHQgKiBcJiMzNDtJdCBpcyBwcmVzdW1lZCB0aGF0IGFuIE1LVCBhZmZlY3RpbmcgYSBwYXJ0aWN1bGFyXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDE1OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5NTIKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBJJiMzOTttIHJlYWR5IHRvIGRlbHZlIGludG8gdGhpcyB0ZXh0LiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdC4gSSYjMzk7bGwgYXBwcm9hY2ggaXQgd2l0aCBteSB1c3VhbCBjcml0aWNhbCBleWUsIGNvbnNpZGVyaW5nIGFsbCB0aGUgaW1wbGljYXRpb25zIGFuZCBudWFuY2VzLiBJJiMzOTttIHByZXBhcmVkIHRvIGRpc3NlY3QgdGhlIGFyZ3VtZW50cywgZXZhbHVhdGUgdGhlIGV2aWRlbmNlLCBhbmQgc3ludGhlc2l6ZSB0aGUgaW5mb3JtYXRpb24gaW50byBhIGNvaGVzaXZlIHVuZGVyc3RhbmRpbmcuIExldCYjMzk7cyBnZXQgdG8gaXQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDE1OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX2FvLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4OTU6XHRcdCAqIGNvbm5lY3Rpb24gY2Fubm90IGJlIGRlc3Ryb3llZCBkdXJpbmcgYW4gYWN0aXZlIGNvbm5lY3Rpb25cJiMzNDtcbjE4OTY6XHRcdCAqL1xuMTg5NzpcdFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGtleSwgXHUwMDI2YW9faW5mby1cdTAwM2VoZWFkLCBub2RlLFxuMTg5ODpcdFx0XHRcdFx0IGxvY2tkZXBfc29ja19pc19oZWxkKHNrKSkge1xuMTg5OTpcdFx0XHRpZiAoY21kLnNuZGlkICE9IGtleS1cdTAwM2VzbmRpZCB8fFxuMTkwMDpcdFx0XHQgICAgY21kLnJjdmlkICE9IGtleS1cdTAwM2VyY3ZpZClcbjE5MDE6XHRcdFx0XHRjb250aW51ZTtcbjE5MDI6XHRcbjE5MDM6XHRcdFx0aWYgKGZhbWlseSAhPSBrZXktXHUwMDNlZmFtaWx5IHx8XG4xOTA0Olx0XHRcdCAgICBwcmVmaXggIT0ga2V5LVx1MDAzZXByZWZpeGxlbiB8fFxuMTkwNTpcdFx0XHQgICAgbWVtY21wKGFkZHIsIFx1MDAyNmtleS1cdTAwM2VhZGRyLCBhZGRyX2xlbikpXG4xOTA2Olx0XHRcdFx0Y29udGludWU7XG4xOTA3Olx0XG4xOTA4Olx0XHRcdGlmICgoY21kLmtleWZsYWdzIFx1MDAyNiBUQ1BfQU9fS0VZRl9JRklOREVYKSAhPVxuMTkwOTpcdFx0XHQgICAgKGtleS1cdTAwM2VrZXlmbGFncyBcdTAwMjYgVENQX0FPX0tFWUZfSUZJTkRFWCkpXG4xOTEwOlx0XHRcdFx0Y29udGludWU7XG4xOTExOlx0XG4xOTEyOlx0XHRcdGlmIChrZXktXHUwMDNlbDNpbmRleCAhPSBsM2luZGV4KVxuMTkxMzpcdFx0XHRcdGNvbnRpbnVlO1xuMTkxNDpcdFxuMTkxNTpcdFx0XHRpZiAoa2V5ID09IG5ld19jdXJyZW50IHx8IGtleSA9PSBuZXdfcm5leHQpXG4xOTE2Olx0XHRcdFx0Y29udGludWU7XG4xOTE3Olx0XG4xOTE4Olx0XHRcdHJldHVybiB0Y3BfYW9fZGVsZXRlX2tleShzaywgYW9faW5mbywgY21kLmRlbF9hc3luYywga2V5LFxuMTkxOTpcdFx0XHRcdFx0XHQgbmV3X2N1cnJlbnQsIG5ld19ybmV4dCk7XG4xOTIwOlx0XHR9XG4xOTIxOlx0XHRyZXR1cm4gLUVOT0VOVDtcbjE5MjI6XHR9XG4xOTIzOlx0XG4xOTI0Olx0LyogY21kLmFvX3JlcXVpcmVkIG1ha2VzIGEgc29ja2V0IFRDUC1BTyBvbmx5LlxuMTkyNTpcdCAqIERvbiYjMzk7dCBhbGxvdyBhbnkgbWQ1IGtleXMgZm9yIGFueSBsM2ludGYgb24gdGhlIHNvY2tldCB0b2dldGhlciB3aXRoIGl0LlxuMTkyNjpcdCAqIFJlc3RyaWN0aW5nIGl0IGVhcmx5IGluIHNldHNvY2tvcHQoKSByZW1vdmVzIGEgY2hlY2sgZm9yXG4xOTI3Olx0ICogYW9faW5mby1cdTAwM2Vhb19yZXF1aXJlZCBvbiBpbmJvdW5kIHRjcCBzZWdtZW50IGZhc3QtcGF0aC5cbjE5Mjg6XHQgKi9cbjE5Mjk6XHRzdGF0aWMgaW50IHRjcF9hb19yZXF1aXJlZF92ZXJpZnkoc3RydWN0IHNvY2sgKnNrKVxuMTkzMDpcdHtcbjE5MzE6XHQjaWZkZWYgQ09ORklHX1RDUF9NRDVTSUdcbjE5MzI6XHRcdGNvbnN0IHN0cnVjdCB0Y3BfbWQ1c2lnX2luZm8gKm1kNXNpZztcbjE5MzM6XHRcbjE5MzQ6XHRcdGlmICghc3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZ0Y3BfbWQ1X25lZWRlZC5rZXkpKVxuMTkzNTpcdFx0XHRyZXR1cm4gMDtcbjE5MzY6XHRcbjE5Mzc6XHRcdG1kNXNpZyA9IHJjdV9kZXJlZmVyZW5jZV9jaGVjayh0Y3Bfc2soc2spLVx1MDAzZW1kNXNpZ19pbmZvLFxuMTkzODpcdFx0XHRcdFx0ICAgICAgIGxvY2tkZXBfc29ja19pc19oZWxkKHNrKSk7XG4xOTM5Olx0XHRpZiAoIW1kNXNpZylcbjE5NDA6XHRcdFx0cmV0dXJuIDA7XG4xOTQxOlx0XG4xOTQyOlx0XHRpZiAocmN1X2RlcmVmZXJlbmNlX2NoZWNrKGhsaXN0X2ZpcnN0X3JjdShcdTAwMjZtZDVzaWctXHUwMDNlaGVhZCksXG4xOTQzOlx0XHRcdFx0XHQgIGxvY2tkZXBfc29ja19pc19oZWxkKHNrKSkpXG4xOTQ0Olx0XHRcdHJldHVybiAxO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxNTo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDg1NQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDc5OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgVENQX0FPX0RFTF9LRVkgTG9naWMgQnVnIEZpeCoqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIHRoZSBjb3JlIGNoYW5nZSBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBpdCBmaXhlcyBhIGxvZ2ljIGVycm9yIGluIGhvdyBgbDNpbmRleGAgaXMgaGFuZGxlZCB3aXRoaW4gdGhlIGBUQ1BfQU9fREVMX0tFWWAgc2V0c29ja29wdC4gUHJldmlvdXNseSwgYGwzaW5kZXhgIHdhcyBpbml0aWFsaXplZCB0byB6ZXJvIGFuZCBuZXZlciBhY3R1YWxseSB1cGRhdGVkIHdpdGggdGhlIHZhbHVlIG9mIGBjbWQuaWZpbmRleGAsIGV2ZW4gaWYgdGhlIGBUQ1BfQU9fS0VZRl9JRklOREVYYCBmbGFnIHdhcyBzZXQuIFRoZSBjb2RlIHdvdWxkIHRoZW4gY29tcGFyZSBhIGtleSYjMzk7cyBga2V5LSZndDtsM2luZGV4YCB3aXRoIHRoaXMgY29uc3RhbnQgemVybywgd2hpY2ggaXMgY2xlYXJseSBub3Qgd2hhdCB3YXMgaW50ZW5kZWQgd2hlbiBhIHNwZWNpZmljIGludGVyZmFjZSBpbmRleCB3YXMgcHJvdmlkZWQuCgpUaGUgZml4IGludHJvZHVjZXMgYSBjb25kaXRpb25hbCBhc3NpZ25tZW50OiBgaWYgKGNtZC5rZXlmbGFncyAmYW1wOyBUQ1BfQU9fS0VZRl9JRklOREVYKSBsM2luZGV4ID0gY21kLmlmaW5kZXg7YC4gIFRoaXMgZW5zdXJlcyB0aGF0IHdoZW4gdGhlIGBUQ1BfQU9fS0VZRl9JRklOREVYYCBmbGFnIGlzIHNldCwgYGwzaW5kZXhgIGlzIG5vdyBjb3JyZWN0bHkgc2V0IHRvIHRoZSB1c2VyLXByb3ZpZGVkIGludGVyZmFjZSBpbmRleCwgYXMgZXhwZWN0ZWQuCgpJ4oCZdmUgcmV2aWV3ZWQgdGhlIGNvZGUuIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQsIGJlY2F1c2UgYGNtZGAgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgYnkgYGNvcHlfc3RydWN0X2Zyb21fc29ja3B0cmAuICBgbDNpbmRleGAgaXMgaW5pdGlhbGl6ZWQgdG8gMCBhbmQgdGhlbiBwb3NzaWJseSB1cGRhdGVkLiBObyBpbmZvcm1hdGlvbiBsZWFrYWdlIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzIGlzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaC4KCkkgYWxzbyBzZWUgYSByZWxhdGVkIGNoYW5nZSBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvc29jay5jYCB3aXRoaW4gdGhlIGB0ZXN0X2dldF9vbmVfYW9gIGZ1bmN0aW9uLiBUaGlzIHNlbGZ0ZXN0IGNvZGUgaGFzIGJlZW4gdXBkYXRlZCB0byBzZXQgdGhlIGBrZXlmbGFnc2AgYW5kIGBpZmluZGV4YCB2YWx1ZXMgZm9yIHRoZSB0ZXN0IHRvIGVuc3VyZSB0aGF0IHRoZSBjb3JyZWN0IGxvZ2ljIGlzIG5vdyB0ZXN0ZWQsIGFuZCBpdCYjMzk7cyBpc29sYXRlZCB0byB0aGUgdGVzdGluZyBoYXJuZXNzLgoKR2l2ZW4gdGhlc2UgY29uc2lkZXJhdGlvbnMsIEkgZG9uJiMzOTt0IHNlZSBhbnkgbmVlZCBmb3IgS01TQU4gdG8gYmUgaW52b2x2ZWQgaGVyZS4gVGhlIGJ1ZyBpcyBwdXJlbHkgYSBsb2dpYyBlcnJvciwgYW5kIHRoZSBmaXggZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIHZ1bG5lcmFiaWxpdGllcy4gS0FTQU4gaXMgYWxzbyBsaWtlbHkgdW5uZWNlc3NhcnkgZ2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgYnVnLiBTdGFuZGFyZCB0ZXN0aW5nIG1ldGhvZHMgc2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8gdmFsaWRhdGUgdGhlIGZpeC4gVGhlIGBjb3B5X3N0cnVjdF9mcm9tX3NvY2twdHJgIGZ1bmN0aW9uIG1ha2VzIGl0IGhpZ2hseSB1bmxpa2VseSB0aGF0IHVzZXJzcGFjZSBpcyBwcm92aWRpbmcgZ2FyYmFnZSBkYXRhLgoKRXNzZW50aWFsbHksIHRoaXMgaXMgYSBjbGVhbiwgdGFyZ2V0ZWQgbG9naWMgZml4IHRoYXQgbWFrZXMgdGhlIGBUQ1BfQU9fREVMX0tFWWAgZnVuY3Rpb25hbGl0eSBiZWhhdmUgYXMgaW50ZW5kZWQgd2hlbiBkZWFsaW5nIHdpdGggaW50ZXJmYWNlLXNwZWNpZmljIGtleXMuIEkmIzM5O20gc2F0aXNmaWVkIHRoYXQgdGhpcyBjaGFuZ2UgaXMgc2FmZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTU6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29weV9zdHJ1Y3RfZnJvbV9zb2NrcHRyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zb2NrcHRyLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zb2NrcHRyLmg9Nzc9c3RhdGljIGlubGluZSBpbnQgY29weV9zYWZlX2Zyb21fc29ja3B0cih2b2lkICpkc3QsIHNpemVfdCBrc2l6ZSxcbi0tXG5pbmNsdWRlL2xpbnV4L3NvY2twdHIuaC04Ni1cbmluY2x1ZGUvbGludXgvc29ja3B0ci5oOjg3OnN0YXRpYyBpbmxpbmUgaW50IGNvcHlfc3RydWN0X2Zyb21fc29ja3B0cih2b2lkICpkc3QsIHNpemVfdCBrc2l6ZSxcbmluY2x1ZGUvbGludXgvc29ja3B0ci5oLTg4LVx0XHRzb2NrcHRyX3Qgc3JjLCBzaXplX3QgdXNpemUpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDE1OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMzE2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIGBjb3B5X3N0cnVjdF9mcm9tX3NvY2twdHJgOgoKKipEaXNzZWN0aW5nIGBjb3B5X3N0cnVjdF9mcm9tX3NvY2twdHJgKioKCkFscmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBJJiMzOTttIGRvaW5nIGlzIGdldHRpbmcgbXlzZWxmIGZhbWlsaWFyIHdpdGggYGNvcHlfc3RydWN0X2Zyb21fc29ja3B0cmAuIFRoYXQgbmFtZSBhbG9uZSBnaXZlcyBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgY2FuIGltbWVkaWF0ZWx5IGluZmVyIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBpbnZvbHZlZCBpbiwgdW5zdXJwcmlzaW5nbHksIGNvcHlpbmcgYSBzdHJ1Y3R1cmUgZnJvbSBhIHNvY2tldCBwb2ludGVyLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbnRleHQuIFdoYXQga2luZCBvZiBzb2NrZXQ/IFdoYXQmIzM5O3MgdGhlIHNvdXJjZSBzdHJ1Y3R1cmU/IFdoYXQmIzM5O3MgdGhlIGRlc3RpbmF0aW9uPyBBcmUgdGhlcmUgYW55IGRhdGEgY29udmVyc2lvbnMgaGFwcGVuaW5nPyBBbnkgbWVtb3J5IGFsbG9jYXRpb24gY29uc2lkZXJhdGlvbnM/IEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBpc3N1ZXMgcmVsYXRlZCB0byBzb2NrZXQgY29tbXVuaWNhdGlvbiwgYW5kIG1lbW9yeSBzYWZldHkuIE9mZiB0aGUgdG9wIG9mIG15IGhlYWQsIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQ6IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIGJvdW5kYXJ5IGNvbmRpdGlvbnMsIGFuZCBlcnJvciBoYW5kbGluZy4gSSYjMzk7bGwgc3RhcnQgYnkgbG9va2luZyBhdCBob3cgdGhlIGZ1bmN0aW9uIGhhbmRsZXMgZGlmZmVyZW50IHNvY2tldCB0eXBlcywgZGF0YSBzaXplcywgYW5kIHBvdGVudGlhbCBlcnJvcnMgZHVyaW5nIHRoZSBkYXRhIHRyYW5zZmVyLiBJJiMzOTtsbCBiZSBzY3J1dGluaXppbmcgdGhlIHJldHVybiB2YWx1ZSBhcyB3ZWxsLiBXaGF0IGRvZXMgaXQgc2lnbmlmeSBpbiB0ZXJtcyBvZiBzdWNjZXNzIG9yIGZhaWx1cmU/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDE1OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zb2NrcHRyLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDgwOlx0XHRpZiAob3B0bGVuIFx1MDAzYyBrc2l6ZSlcbiAgODE6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gIDgyOlx0XHRpZiAoY29weV9mcm9tX3NvY2twdHIoZHN0LCBvcHR2YWwsIGtzaXplKSlcbiAgODM6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gIDg0Olx0XHRyZXR1cm4gMDtcbiAgODU6XHR9XG4gIDg2Olx0XG4gIDg3Olx0c3RhdGljIGlubGluZSBpbnQgY29weV9zdHJ1Y3RfZnJvbV9zb2NrcHRyKHZvaWQgKmRzdCwgc2l6ZV90IGtzaXplLFxuICA4ODpcdFx0XHRzb2NrcHRyX3Qgc3JjLCBzaXplX3QgdXNpemUpXG4gIDg5Olx0e1xuICA5MDpcdFx0aWYgKCFzb2NrcHRyX2lzX2tlcm5lbChzcmMpKVxuICA5MTpcdFx0XHRyZXR1cm4gY29weV9zdHJ1Y3RfZnJvbV91c2VyKGRzdCwga3NpemUsIHNyYy51c2VyLCB1c2l6ZSk7XG4gIDkyOlx0XG4gIDkzOlx0XHRyZXR1cm4gY29weV9zdHJ1Y3RfZnJvbV9ib3VuY2VfYnVmZmVyKGRzdCwga3NpemUsIHNyYy5rZXJuZWwsIHVzaXplKTtcbiAgOTQ6XHR9XG4gIDk1Olx0XG4gIDk2Olx0c3RhdGljIGlubGluZSBpbnQgY29weV90b19zb2NrcHRyX29mZnNldChzb2NrcHRyX3QgZHN0LCBzaXplX3Qgb2Zmc2V0LFxuICA5NzpcdFx0XHRjb25zdCB2b2lkICpzcmMsIHNpemVfdCBzaXplKVxuICA5ODpcdHtcbiAgOTk6XHRcdGlmICghc29ja3B0cl9pc19rZXJuZWwoZHN0KSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTU6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI5MDAKCQkJCQkJCW91dHB1dDogMTY4CgkJCQkJCQl0aG91Z2h0czogMTM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGNhcmVmdWxseSByZXZpZXdlZCB0aGlzIHBhdGNoLiBUaGUga2V5IHRoaW5nIEkmIzM5O20gc2VlaW5nIGlzIHRoYXQgYm90aCBgY29weV9zdHJ1Y3RfZnJvbV91c2VyYCBhbmQgYGNvcHlfc3RydWN0X2Zyb21fYm91bmNlX2J1ZmZlcmAgZW5zdXJlIHRoYXQgdGhlIHRhcmdldCBidWZmZXIgaXMgKmFsd2F5cyogaW5pdGlhbGl6ZWQuIFRoaXMgbWVhbnMsIGltcG9ydGFudGx5LCB0aGF0IHRoZSBgY21kYCBzdHJ1Y3R1cmUgaXMgZ3VhcmFudGVlZCB0byBiZSBmdWxseSBpbml0aWFsaXplZCwgZXZlbiBpZiB0aGUgdXNlci1zdXBwbGllZCBkYXRhIGlzIHNtYWxsZXIgdGhhbiB0aGUgdGFyZ2V0IGJ1ZmZlciBzaXplLCBhcyB0aGUgc3RydWN0dXJlIHdpbGwgYmUgemVyby1wYWRkZWQuIFRoZXJlZm9yZSwgSSBjYW4gY29uZmlkZW50bHkgc2F5IHRoaXMgcGF0Y2ggaXNuJiMzOTt0IGludHJvZHVjaW5nIGFueSBuZXcgaW5zdGFuY2VzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCB3aGljaCBpcyBhIGNyaXRpY2FsIGNvbmNlcm4gdG8gZmxhZy4KCkVzc2VudGlhbGx5LCB0aGlzIGlzIGEgY2xlYW4gbG9naWMgYnVnIGZpeC4gVGhlIGNvcmUgb2YgdGhlIHByb2JsZW0gaXMgdGhhdCBgbDNpbmRleGAgd2FzbiYjMzk7dCBiZWluZyBjb3JyZWN0bHkgcG9wdWxhdGVkIHdpdGggdGhlIHZhbHVlIGZyb20gYGNtZC5pZmluZGV4YCB3aGVuIHRoZSBgVENQX0FPX0tFWUZfSUZJTkRFWGAgZmxhZyB3YXMgYWN0aXZlIHdpdGhpbiBgY21kLmtleWZsYWdzYC4gVGhhdCYjMzk7cyB0aGUgY3J1eCBvZiBpdC4KCkdpdmVuIHRoaXMgYW5hbHlzaXMsIEkmIzM5O20gZ29pbmcgdG8gc2V0IGBOZWVkc0tNU0FOPWZhbHNlYCBvbiB0aGlzLiBJJiMzOTtsbCBpbmNsdWRlIGEgY2xlYXIgZXhwbGFuYXRpb24sIGxpa2VseSBhbG9uZyB0aGUgbGluZXMgb2YgJiMzNDtUaGlzIHBhdGNoIGFkZHJlc3NlcyBhIGxvZ2ljIGVycm9yIHdoZXJlIGBsM2luZGV4YCB3YXMgbm90IGNvcnJlY3RseSBzZXQgYmFzZWQgb24gYGNtZC5pZmluZGV4YCB3aGVuIGEgc3BlY2lmaWMga2V5IGZsYWcgd2FzIGVuYWJsZWQuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGluc3RhbmNlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBhcyB0aGUgZGVzdGluYXRpb24gYnVmZmVyIGlzIGd1YXJhbnRlZWQgdG8gYmUgaW5pdGlhbGl6ZWQuJiMzNDsgVGhhdCBzaG91bGQgYmUgc3VmZmljaWVudCBmb3IgdGhlIHJldmlld2VyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxNTo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyBpbiBgdGNwX2FvX2RlbF9jbWRgIHdoZXJlIHRoZSBgbDNpbmRleGAgdmFyaWFibGUgd2FzIG5vdCBiZWluZyBwb3B1bGF0ZWQgZnJvbSB0aGUgdXNlci1wcm92aWRlZCBgY21kLmlmaW5kZXhgIHdoZW4gdGhlIGBUQ1BfQU9fS0VZRl9JRklOREVYYCBmbGFnIHdhcyBzZXQuIFRoZSBgY21kYCBzdHJ1Y3R1cmUgaXMgc2FmZWx5IGNvcGllZCBmcm9tIHVzZXJzcGFjZSB1c2luZyBgY29weV9zdHJ1Y3RfZnJvbV9zb2NrcHRyYCwgd2hpY2ggZ3VhcmFudGVlcyB0aGF0IHRoZSBzdHJ1Y3R1cmUgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgKHplcm8tcGFkZGVkIGlmIHRoZSB1c2Vyc3BhY2Ugc3RydWN0dXJlIGlzIHNtYWxsZXIpLiBUaGUgcGF0Y2ggb25seSBhZGRzIGEgY29uZGl0aW9uYWwgYXNzaWdubWVudCBvZiBhbiBpbnRlZ2VyIHZhcmlhYmxlIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIGluIGB0Y3BfYW9fZGVsX2NtZGAgd2hlcmUgdGhlIGBsM2luZGV4YCB2YXJpYWJsZSB3YXMgbm90IGJlaW5nIHBvcHVsYXRlZCBmcm9tIHRoZSB1c2VyLXByb3ZpZGVkIGBjbWQuaWZpbmRleGAgd2hlbiB0aGUgYFRDUF9BT19LRVlGX0lGSU5ERVhgIGZsYWcgd2FzIHNldC4gVGhlIGBjbWRgIHN0cnVjdHVyZSBpcyBzYWZlbHkgY29waWVkIGZyb20gdXNlcnNwYWNlIHVzaW5nIGBjb3B5X3N0cnVjdF9mcm9tX3NvY2twdHJgLCB3aGljaCBndWFyYW50ZWVzIHRoYXQgdGhlIHN0cnVjdHVyZSBpcyBmdWxseSBpbml0aWFsaXplZCAoemVyby1wYWRkZWQgaWYgdGhlIHVzZXJzcGFjZSBzdHJ1Y3R1cmUgaXMgc21hbGxlcikuIFRoZSBwYXRjaCBvbmx5IGFkZHMgYSBjb25kaXRpb25hbCBhc3NpZ25tZW50IG9mIGFuIGludGVnZXIgdmFyaWFibGUgYW5kIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNTo1Njo0MS4yMzUzMTc4NzFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDg0MTg4ODk5NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVENQX0FPXCIsXG4gICAgXCJORVRfVlJGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNwX3BhcnNlX2FvXCIsXG4gICAgXCJ0Y3BfdjRfcGFyc2VfYW9cIixcbiAgICBcInRjcF92Nl9wYXJzZV9hb1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgaW4gYHRjcF9hb19kZWxfY21kYCB3aGVyZSB0aGUgYGwzaW5kZXhgIHZhcmlhYmxlIHdhcyBub3QgYmVpbmcgcG9wdWxhdGVkIGZyb20gdGhlIHVzZXItcHJvdmlkZWQgYGNtZC5pZmluZGV4YCB3aGVuIHRoZSBgVENQX0FPX0tFWUZfSUZJTkRFWGAgZmxhZyB3YXMgc2V0LiBUaGUgYGNtZGAgc3RydWN0dXJlIGlzIHNhZmVseSBjb3BpZWQgZnJvbSB1c2Vyc3BhY2UgdXNpbmcgYGNvcHlfc3RydWN0X2Zyb21fc29ja3B0cmAsIHdoaWNoIGd1YXJhbnRlZXMgdGhhdCB0aGUgc3RydWN0dXJlIGlzIGZ1bGx5IGluaXRpYWxpemVkICh6ZXJvLXBhZGRlZCBpZiB0aGUgdXNlcnNwYWNlIHN0cnVjdHVyZSBpcyBzbWFsbGVyKS4gVGhlIHBhdGNoIG9ubHkgYWRkcyBhIGNvbmRpdGlvbmFsIGFzc2lnbm1lbnQgb2YgYW4gaW50ZWdlciB2YXJpYWJsZSBhbmQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2Vyc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gVENQLUFPIHNldHNvY2tvcHQgaGFuZGxpbmcgd2hlcmUgYGNtZC5pZmluZGV4YCB3YXMgbm90IGFzc2lnbmVkIHRvIGBsM2luZGV4YCB3aGVuIGRlbGV0aW5nIGEga2V5LCBwcmV2ZW50aW5nIGRlbGV0aW9uIG9mIGludGVyZmFjZS1zY29wZWQga2V5cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTU6NTY6NDEuMjM1MzIzNTUxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Nzk3NTM0NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxMTE3YzlmZGY4YmMwNzI0YzIwMTdiMmQ1ODk3MmNjZjk3OWMzMzNhXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgQXVnIDIxIDE1OjU2OjQwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9hby5jIGIvbmV0L2lwdjQvdGNwX2FvLmNcXG5pbmRleCA1MDk0MjY3NDQ3YWVlLi4yNjg2NDYyMWU2ZGVmIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY0L3RjcF9hby5jXFxuKysrIGIvbmV0L2lwdjQvdGNwX2FvLmNcXG5AQCAtMTgzNCw2ICsxODM0LDkgQEAgc3RhdGljIGludCB0Y3BfYW9fZGVsX2NtZChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIHNob3J0IGludCBmYW1pbHksXFxuIFxcdGlmIChjbWQuaWZpbmRleCBcXHUwMDI2XFx1MDAyNiAhKGNtZC5rZXlmbGFncyBcXHUwMDI2IFRDUF9BT19LRVlGX0lGSU5ERVgpKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuK1xcdGlmIChjbWQua2V5ZmxhZ3MgXFx1MDAyNiBUQ1BfQU9fS0VZRl9JRklOREVYKVxcbitcXHRcXHRsM2luZGV4ID0gY21kLmlmaW5kZXg7XFxuK1xcbiBcXHRhb19pbmZvID0gc2V0c29ja29wdF9hb19pbmZvKHNrKTtcXG4gXFx0aWYgKElTX0VSUihhb19pbmZvKSlcXG4gXFx0XFx0cmV0dXJuIFBUUl9FUlIoYW9faW5mbyk7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8va2V5LW1hbmFnZW1lbnQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8va2V5LW1hbmFnZW1lbnQuY1xcbmluZGV4IGQ4NmJiMzgwYjc5ZjcuLjFlMDFlODA1ZGJhNzIgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9rZXktbWFuYWdlbWVudC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9rZXktbWFuYWdlbWVudC5jXFxuQEAgLTYzLDcgKzYzLDggQEAgc3RhdGljIGludCBwcmVwYXJlX2xzayh1bmlvbiB0Y3BfYWRkciAqYWRkciwgdWludDhfdCBzbmRpZCwgdWludDhfdCByY3ZpZClcXG4gXFx0cmV0dXJuIHNrO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IHRlc3RfZGVsX2tleShpbnQgc2ssIHVpbnQ4X3Qgc25kaWQsIHVpbnQ4X3QgcmN2aWQsIGJvb2wgYXN5bmMsXFxuK3N0YXRpYyBpbnQgdGVzdF9kZWxfa2V5KGludCBzaywgdWludDhfdCBzbmRpZCwgdWludDhfdCByY3ZpZCwgaW50IGlmaW5kZXgsXFxuK1xcdFxcdFxcdGJvb2wgYXN5bmMsXFxuIFxcdFxcdFxcdGludCBjdXJyZW50X2tleSwgaW50IHJuZXh0X2tleSlcXG4ge1xcbiBcXHRzdHJ1Y3QgdGNwX2FvX2luZm9fb3B0IGFvX2luZm8gPSB7fTtcXG5AQCAtNzYsNiArNzcsMTAgQEAgc3RhdGljIGludCB0ZXN0X2RlbF9rZXkoaW50IHNrLCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkLCBib29sIGFzeW5jLFxcbiBcXHRkZWwucHJlZml4ID0gREVGQVVMVF9URVNUX1BSRUZJWDtcXG4gXFx0ZGVsLnNuZGlkID0gc25kaWQ7XFxuIFxcdGRlbC5yY3ZpZCA9IHJjdmlkO1xcbitcXHRpZiAoaWZpbmRleCkge1xcbitcXHRcXHRkZWwua2V5ZmxhZ3MgPSBUQ1BfQU9fS0VZRl9JRklOREVYO1xcbitcXHRcXHRkZWwuaWZpbmRleCA9IGlmaW5kZXg7XFxuK1xcdH1cXG4gXFxuIFxcdGlmIChjdXJyZW50X2tleSBcXHUwMDNlPSAwKSB7XFxuIFxcdFxcdGRlbC5zZXRfY3VycmVudCA9IDE7XFxuQEAgLTk1LDcgKzEwMCw4IEBAIHN0YXRpYyBpbnQgdGVzdF9kZWxfa2V5KGludCBzaywgdWludDhfdCBzbmRpZCwgdWludDhfdCByY3ZpZCwgYm9vbCBhc3luYyxcXG4gXFxuIFxcdHRjcF9hZGRyX3RvX3NvY2thZGRyX2luKFxcdTAwMjZzb2NrYWRkciwgXFx1MDAyNnRoaXNfaXBfZGVzdCwgMCk7XFxuIFxcdGVyciA9IHRlc3RfZ2V0X29uZV9hbyhzaywgXFx1MDAyNmtleSwgXFx1MDAyNnNvY2thZGRyLCBzaXplb2Yoc29ja2FkZHIpLFxcbi1cXHRcXHRcXHQgICAgICBERUZBVUxUX1RFU1RfUFJFRklYLCBzbmRpZCwgcmN2aWQpO1xcbitcXHRcXHRcXHQgICAgICBERUZBVUxUX1RFU1RfUFJFRklYLCBzbmRpZCwgcmN2aWQsXFxuK1xcdFxcdFxcdCAgICAgIGRlbC5rZXlmbGFncywgZGVsLmlmaW5kZXgpO1xcbiBcXHRpZiAoIWVycilcXG4gXFx0XFx0cmV0dXJuIC1FRVhJU1Q7XFxuIFxcdGlmIChlcnIgIT0gLUUyQklHKVxcbkBAIC0xMTIsMTIgKzExOCwxMiBAQCBzdGF0aWMgaW50IHRlc3RfZGVsX2tleShpbnQgc2ssIHVpbnQ4X3Qgc25kaWQsIHVpbnQ4X3QgcmN2aWQsIGJvb2wgYXN5bmMsXFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHRyeV9kZWxldGVfa2V5KGNoYXIgKnRzdF9uYW1lLCBpbnQgc2ssIHVpbnQ4X3Qgc25kaWQsIHVpbnQ4X3QgcmN2aWQsXFxuLVxcdFxcdFxcdCAgIGJvb2wgYXN5bmMsIGludCBjdXJyZW50X2tleSwgaW50IHJuZXh0X2tleSxcXG4rXFx0XFx0XFx0ICAgaW50IGlmaW5kZXgsIGJvb2wgYXN5bmMsIGludCBjdXJyZW50X2tleSwgaW50IHJuZXh0X2tleSxcXG4gXFx0XFx0XFx0ICAgZmF1bHRfdCBpbmopXFxuIHtcXG4gXFx0aW50IGVycjtcXG4gXFxuLVxcdGVyciA9IHRlc3RfZGVsX2tleShzaywgc25kaWQsIHJjdmlkLCBhc3luYywgY3VycmVudF9rZXksIHJuZXh0X2tleSk7XFxuK1xcdGVyciA9IHRlc3RfZGVsX2tleShzaywgc25kaWQsIHJjdmlkLCBpZmluZGV4LCBhc3luYywgY3VycmVudF9rZXksIHJuZXh0X2tleSk7XFxuIFxcdGlmICgoZXJyID09IC1FQlVTWSBcXHUwMDI2XFx1MDAyNiBmYXVsdChCVVNZKSkgfHwgKGVyciA9PSAtRUlOVkFMIFxcdTAwMjZcXHUwMDI2IGZhdWx0KENVUlJORVhUKSkpIHtcXG4gXFx0XFx0dGVzdF9vayhcXFwiJXM6IGtleSBkZWxldGlvbiB3YXMgcHJldmVudGVkXFxcIiwgdHN0X25hbWUpO1xcbiBcXHRcXHRyZXR1cm47XFxuQEAgLTIzNiwxNSArMjQyLDE1IEBAIHN0YXRpYyB2b2lkIGNoZWNrX2Nsb3NlZF9zb2NrZXQodm9pZClcXG4gXFx0aW50IHNrO1xcbiBcXG4gXFx0c2sgPSBwcmVwYXJlX3NrKFxcdTAwMjZ0aGlzX2lwX2Rlc3QsIDIwMCwgMjAwKTtcXG4tXFx0dHJ5X2RlbGV0ZV9rZXkoXFxcImNsb3NlZCBzb2NrZXQsIGRlbGV0ZSBhIGtleVxcXCIsIHNrLCAyMDAsIDIwMCwgMCwgLTEsIC0xLCAwKTtcXG4tXFx0dHJ5X2RlbGV0ZV9rZXkoXFxcImNsb3NlZCBzb2NrZXQsIGRlbGV0ZSBhbGwga2V5c1xcXCIsIHNrLCAxMDAsIDEwMCwgMCwgLTEsIC0xLCAwKTtcXG4rXFx0dHJ5X2RlbGV0ZV9rZXkoXFxcImNsb3NlZCBzb2NrZXQsIGRlbGV0ZSBhIGtleVxcXCIsIHNrLCAyMDAsIDIwMCwgMCwgMCwgLTEsIC0xLCAwKTtcXG4rXFx0dHJ5X2RlbGV0ZV9rZXkoXFxcImNsb3NlZCBzb2NrZXQsIGRlbGV0ZSBhbGwga2V5c1xcXCIsIHNrLCAxMDAsIDEwMCwgMCwgMCwgLTEsIC0xLCAwKTtcXG4gXFx0Y2xvc2Uoc2spO1xcbiBcXG4gXFx0c2sgPSBwcmVwYXJlX3NrKFxcdTAwMjZ0aGlzX2lwX2Rlc3QsIDIwMCwgMjAwKTtcXG4gXFx0aWYgKHRlc3Rfc2V0X2tleShzaywgMTAwLCAyMDApKVxcbiBcXHRcXHR0ZXN0X2Vycm9yKFxcXCJmYWlsZWQgdG8gc2V0IGN1cnJlbnQvcm5leHQga2V5c1xcXCIpO1xcbi1cXHR0cnlfZGVsZXRlX2tleShcXFwiY2xvc2VkIHNvY2tldCwgZGVsZXRlIGN1cnJlbnQga2V5XFxcIiwgc2ssIDEwMCwgMTAwLCAwLCAtMSwgLTEsIEZBVUxUX0JVU1kpO1xcbi1cXHR0cnlfZGVsZXRlX2tleShcXFwiY2xvc2VkIHNvY2tldCwgZGVsZXRlIHJuZXh0IGtleVxcXCIsIHNrLCAyMDAsIDIwMCwgMCwgLTEsIC0xLCBGQVVMVF9CVVNZKTtcXG4rXFx0dHJ5X2RlbGV0ZV9rZXkoXFxcImNsb3NlZCBzb2NrZXQsIGRlbGV0ZSBjdXJyZW50IGtleVxcXCIsIHNrLCAxMDAsIDEwMCwgMCwgMCwgLTEsIC0xLCBGQVVMVF9CVVNZKTtcXG4rXFx0dHJ5X2RlbGV0ZV9rZXkoXFxcImNsb3NlZCBzb2NrZXQsIGRlbGV0ZSBybmV4dCBrZXlcXFwiLCBzaywgMjAwLCAyMDAsIDAsIDAsIC0xLCAtMSwgRkFVTFRfQlVTWSk7XFxuIFxcdGNsb3NlKHNrKTtcXG4gXFxuIFxcdHNrID0gcHJlcGFyZV9zayhcXHUwMDI2dGhpc19pcF9kZXN0LCAyMDAsIDIwMCk7XFxuQEAgLTI1NCwxMCArMjYwLDEyIEBAIHN0YXRpYyB2b2lkIGNoZWNrX2Nsb3NlZF9zb2NrZXQodm9pZClcXG4gXFx0aWYgKHRlc3RfYWRkX2tleShzaywgXFxcIkdsb3J5IHRvIFVrcmFpbmUhXFxcIiwgdGhpc19pcF9kZXN0LFxcbiBcXHRcXHRcXHQgREVGQVVMVF9URVNUX1BSRUZJWCwgMTIsIDEzKSlcXG4gXFx0XFx0dGVzdF9lcnJvcihcXFwidGVzdF9hZGRfa2V5KClcXFwiKTtcXG4tXFx0dHJ5X2RlbGV0ZV9rZXkoXFxcImNsb3NlZCBzb2NrZXQsIGRlbGV0ZSBhIGtleSArIHNldCBjdXJyZW50L3JuZXh0XFxcIiwgc2ssIDEwMCwgMTAwLCAwLCAxMCwgMTMsIDApO1xcbi1cXHR0cnlfZGVsZXRlX2tleShcXFwiY2xvc2VkIHNvY2tldCwgZm9yY2UtZGVsZXRlIGN1cnJlbnQga2V5XFxcIiwgc2ssIDEwLCAxMSwgMCwgMjAwLCAtMSwgMCk7XFxuLVxcdHRyeV9kZWxldGVfa2V5KFxcXCJjbG9zZWQgc29ja2V0LCBmb3JjZS1kZWxldGUgcm5leHQga2V5XFxcIiwgc2ssIDEyLCAxMywgMCwgLTEsIDIwMCwgMCk7XFxuLVxcdHRyeV9kZWxldGVfa2V5KFxcXCJjbG9zZWQgc29ja2V0LCBkZWxldGUgY3VycmVudCtybmV4dCBrZXlcXFwiLCBzaywgMjAwLCAyMDAsIDAsIC0xLCAtMSwgRkFVTFRfQlVTWSk7XFxuK1xcdHRyeV9kZWxldGVfa2V5KFxcXCJjbG9zZWQgc29ja2V0LCBkZWxldGUgYSBrZXkgKyBzZXQgY3VycmVudC9ybmV4dFxcXCIsIHNrLFxcbitcXHRcXHQgICAgICAgMTAwLCAxMDAsIDAsIDAsIDEwLCAxMywgMCk7XFxuK1xcdHRyeV9kZWxldGVfa2V5KFxcXCJjbG9zZWQgc29ja2V0LCBmb3JjZS1kZWxldGUgY3VycmVudCBrZXlcXFwiLCBzaywgMTAsIDExLCAwLCAwLCAyMDAsIC0xLCAwKTtcXG4rXFx0dHJ5X2RlbGV0ZV9rZXkoXFxcImNsb3NlZCBzb2NrZXQsIGZvcmNlLWRlbGV0ZSBybmV4dCBrZXlcXFwiLCBzaywgMTIsIDEzLCAwLCAwLCAtMSwgMjAwLCAwKTtcXG4rXFx0dHJ5X2RlbGV0ZV9rZXkoXFxcImNsb3NlZCBzb2NrZXQsIGRlbGV0ZSBjdXJyZW50K3JuZXh0IGtleVxcXCIsIHNrLFxcbitcXHRcXHQgICAgICAgMjAwLCAyMDAsIDAsIDAsIC0xLCAtMSwgRkFVTFRfQlVTWSk7XFxuIFxcdGNsb3NlKHNrKTtcXG4gXFxuIFxcdHNrID0gcHJlcGFyZV9zayhcXHUwMDI2dGhpc19pcF9kZXN0LCAyMDAsIDIwMCk7XFxuQEAgLTI3Miw2ICsyODAsMTggQEAgc3RhdGljIHZvaWQgY2hlY2tfY2xvc2VkX3NvY2tldCh2b2lkKVxcbiBcXHRcXHRcXHRcXHQgIHRoaXNfaXBfZGVzdCwgREVGQVVMVF9URVNUX1BSRUZJWCxcXG4gXFx0XFx0XFx0XFx0ICBmYWxzZSwgdHJ1ZSwgMjAsIDEwLCAwKTtcXG4gXFx0Y2xvc2Uoc2spO1xcbitcXG4rXFx0aWYgKCFzaG91bGRfc2tpcF90ZXN0KFxcXCJjbG9zZWQgc29ja2V0LCBhZGQgKyBkZWxldGUgVlJGLXNjb3BlZCBrZXlcXFwiLFxcbitcXHRcXHRcXHQgICAgICBLQ09ORklHX05FVF9WUkYpKSB7XFxuK1xcdFxcdHNrID0gcHJlcGFyZV9zayhcXHUwMDI2dGhpc19pcF9kZXN0LCAyMDAsIDIwMCk7XFxuK1xcdFxcdGlmICh0ZXN0X2FkZF9rZXlfdnJmKHNrLCBTRUNPTkRfUEFTU1dPUkQsIFRDUF9BT19LRVlGX0lGSU5ERVgsXFxuK1xcdFxcdFxcdFxcdCAgICAgdGhpc19pcF9kZXN0LCBERUZBVUxUX1RFU1RfUFJFRklYLFxcbitcXHRcXHRcXHRcXHQgICAgIHRlc3RfdnJmX2lmaW5kZXgsIDIwMSwgMjAxKSlcXG4rXFx0XFx0XFx0dGVzdF9lcnJvcihcXFwidGVzdF9hZGRfa2V5X3ZyZigpXFxcIik7XFxuK1xcdFxcdHRyeV9kZWxldGVfa2V5KFxcXCJjbG9zZWQgc29ja2V0LCBhZGQgKyBkZWxldGUgVlJGLXNjb3BlZCBrZXlcXFwiLCBzaywgMjAxLCAyMDEsXFxuK1xcdFxcdFxcdCAgICAgICB0ZXN0X3ZyZl9pZmluZGV4LCAwLCAtMSwgLTEsIDApO1xcbitcXHRcXHRjbG9zZShzayk7XFxuK1xcdH1cXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgYXNzZXJ0X25vX2N1cnJlbnRfcm5leHQoY29uc3QgY2hhciAqdHN0X21zZywgaW50IHNrKVxcbkBAIC0zMjIsOCArMzQyLDggQEAgc3RhdGljIHZvaWQgY2hlY2tfbGlzdGVuX3NvY2tldCh2b2lkKVxcbiBcXHRpbnQgc2ssIGVycjtcXG4gXFxuIFxcdHNrID0gcHJlcGFyZV9sc2soXFx1MDAyNnRoaXNfaXBfZGVzdCwgMjAwLCAyMDApO1xcbi1cXHR0cnlfZGVsZXRlX2tleShcXFwibGlzdGVuIHNvY2tldCwgZGVsZXRlIGEga2V5XFxcIiwgc2ssIDIwMCwgMjAwLCAwLCAtMSwgLTEsIDApO1xcbi1cXHR0cnlfZGVsZXRlX2tleShcXFwibGlzdGVuIHNvY2tldCwgZGVsZXRlIGFsbCBrZXlzXFxcIiwgc2ssIDEwMCwgMTAwLCAwLCAtMSwgLTEsIDApO1xcbitcXHR0cnlfZGVsZXRlX2tleShcXFwibGlzdGVuIHNvY2tldCwgZGVsZXRlIGEga2V5XFxcIiwgc2ssIDIwMCwgMjAwLCAwLCAwLCAtMSwgLTEsIDApO1xcbitcXHR0cnlfZGVsZXRlX2tleShcXFwibGlzdGVuIHNvY2tldCwgZGVsZXRlIGFsbCBrZXlzXFxcIiwgc2ssIDEwMCwgMTAwLCAwLCAwLCAtMSwgLTEsIDApO1xcbiBcXHRjbG9zZShzayk7XFxuIFxcbiBcXHRzayA9IHByZXBhcmVfbHNrKFxcdTAwMjZ0aGlzX2lwX2Rlc3QsIDIwMCwgMjAwKTtcXG5AQCAtMzQ1LDggKzM2NSwxMCBAQCBzdGF0aWMgdm9pZCBjaGVja19saXN0ZW5fc29ja2V0KHZvaWQpXFxuIFxcdGlmIChsaXN0ZW4oc2ssIDEwKSlcXG4gXFx0XFx0dGVzdF9lcnJvcihcXFwibGlzdGVuKClcXFwiKTtcXG4gXFx0YXNzZXJ0X25vX2N1cnJlbnRfcm5leHQoXFxcImxpc3RlbigpIGFmdGVyIGN1cnJlbnQvcm5leHQga2V5cyBzZXRcXFwiLCBzayk7XFxuLVxcdHRyeV9kZWxldGVfa2V5KFxcXCJsaXN0ZW4gc29ja2V0LCBkZWxldGUgY3VycmVudCBrZXkgZnJvbSBiZWZvcmUgbGlzdGVuKClcXFwiLCBzaywgMTAwLCAxMDAsIDAsIC0xLCAtMSwgRkFVTFRfRklYTUUpO1xcbi1cXHR0cnlfZGVsZXRlX2tleShcXFwibGlzdGVuIHNvY2tldCwgZGVsZXRlIHJuZXh0IGtleSBmcm9tIGJlZm9yZSBsaXN0ZW4oKVxcXCIsIHNrLCAyMDAsIDIwMCwgMCwgLTEsIC0xLCBGQVVMVF9GSVhNRSk7XFxuK1xcdHRyeV9kZWxldGVfa2V5KFxcXCJsaXN0ZW4gc29ja2V0LCBkZWxldGUgY3VycmVudCBrZXkgZnJvbSBiZWZvcmUgbGlzdGVuKClcXFwiLCBzayxcXG4rXFx0XFx0ICAgICAgIDEwMCwgMTAwLCAwLCAwLCAtMSwgLTEsIEZBVUxUX0ZJWE1FKTtcXG4rXFx0dHJ5X2RlbGV0ZV9rZXkoXFxcImxpc3RlbiBzb2NrZXQsIGRlbGV0ZSBybmV4dCBrZXkgZnJvbSBiZWZvcmUgbGlzdGVuKClcXFwiLCBzayxcXG4rXFx0XFx0ICAgICAgIDIwMCwgMjAwLCAwLCAwLCAtMSwgLTEsIEZBVUxUX0ZJWE1FKTtcXG4gXFx0Y2xvc2Uoc2spO1xcbiBcXG4gXFx0YXNzZXJ0X25vX3RjcF9yZXBhaXIoKTtcXG5AQCAtMzU5LDEzICszODEsMTMgQEAgc3RhdGljIHZvaWQgY2hlY2tfbGlzdGVuX3NvY2tldCh2b2lkKVxcbiBcXHRcXHRcXHQgREVGQVVMVF9URVNUX1BSRUZJWCwgMTIsIDEzKSlcXG4gXFx0XFx0dGVzdF9lcnJvcihcXFwidGVzdF9hZGRfa2V5KClcXFwiKTtcXG4gXFx0dHJ5X2RlbGV0ZV9rZXkoXFxcImxpc3RlbiBzb2NrZXQsIGRlbGV0ZSBhIGtleSArIHNldCBjdXJyZW50L3JuZXh0XFxcIiwgc2ssXFxuLVxcdFxcdCAgICAgICAxMDAsIDEwMCwgMCwgMTAsIDEzLCBGQVVMVF9DVVJSTkVYVCk7XFxuK1xcdFxcdCAgICAgICAxMDAsIDEwMCwgMCwgMCwgMTAsIDEzLCBGQVVMVF9DVVJSTkVYVCk7XFxuIFxcdHRyeV9kZWxldGVfa2V5KFxcXCJsaXN0ZW4gc29ja2V0LCBmb3JjZS1kZWxldGUgY3VycmVudCBrZXlcXFwiLCBzayxcXG4tXFx0XFx0ICAgICAgIDEwLCAxMSwgMCwgMjAwLCAtMSwgRkFVTFRfQ1VSUk5FWFQpO1xcbitcXHRcXHQgICAgICAgMTAsIDExLCAwLCAwLCAyMDAsIC0xLCBGQVVMVF9DVVJSTkVYVCk7XFxuIFxcdHRyeV9kZWxldGVfa2V5KFxcXCJsaXN0ZW4gc29ja2V0LCBmb3JjZS1kZWxldGUgcm5leHQga2V5XFxcIiwgc2ssXFxuLVxcdFxcdCAgICAgICAxMiwgMTMsIDAsIC0xLCAyMDAsIEZBVUxUX0NVUlJORVhUKTtcXG4rXFx0XFx0ICAgICAgIDEyLCAxMywgMCwgMCwgLTEsIDIwMCwgRkFVTFRfQ1VSUk5FWFQpO1xcbiBcXHR0cnlfZGVsZXRlX2tleShcXFwibGlzdGVuIHNvY2tldCwgZGVsZXRlIGEga2V5XFxcIiwgc2ssXFxuLVxcdFxcdCAgICAgICAyMDAsIDIwMCwgMCwgLTEsIC0xLCAwKTtcXG4rXFx0XFx0ICAgICAgIDIwMCwgMjAwLCAwLCAwLCAtMSwgLTEsIDApO1xcbiBcXHRjbG9zZShzayk7XFxuIFxcbiBcXHRzayA9IHByZXBhcmVfbHNrKFxcdTAwMjZ0aGlzX2lwX2Rlc3QsIDIwMCwgMjAwKTtcXG5AQCAtMTEzMSw3ICsxMTUzLDYgQEAgc3RhdGljIHZvaWQgY2hlY2tfZXN0YWJsaXNoZWRfc29ja2V0KHZvaWQpXFxuIHtcXG4gXFx0dW5zaWduZWQgaW50IHBvcnQgPSB0ZXN0X3NlcnZlcl9wb3J0O1xcbiBcXG4tXFx0c2V0dXBfdnJmcygpO1xcbiBcXHR0cnlfY2xpZW50X3J1bihcXFwiY2xpZW50OiBDaGVjayBjdXJyZW50L3JuZXh0IGtleXMgdW5zZXQgYmVmb3JlIGNvbm5lY3QoKVxcXCIsXFxuIFxcdFxcdCAgICAgICBwb3J0KyssIDIwLCAtMSwgLTEpO1xcbiBcXHR0cnlfY2xpZW50X3J1bihcXFwiY2xpZW50OiBDaGVjayBjdXJyZW50L3JuZXh0IGtleXMgc2V0IGJlZm9yZSBjb25uZWN0KClcXFwiLFxcbkBAIC0xMTUwLDYgKzExNzEsNyBAQCBzdGF0aWMgdm9pZCAqY2xpZW50X2ZuKHZvaWQgKmFyZylcXG4ge1xcbiBcXHRpZiAoaW5ldF9wdG9uKFRFU1RfRkFNSUxZLCBURVNUX1dST05HX0lQLCBcXHUwMDI2d3JvbmdfYWRkcikgIT0gMSlcXG4gXFx0XFx0dGVzdF9lcnJvcihcXFwiQ2FuJ3QgY29udmVydCBpcCBhZGRyZXNzICVzXFxcIiwgVEVTVF9XUk9OR19JUCk7XFxuK1xcdHNldHVwX3ZyZnMoKTtcXG4gXFx0Y2hlY2tfY2xvc2VkX3NvY2tldCgpO1xcbiBcXHRjaGVja19saXN0ZW5fc29ja2V0KCk7XFxuIFxcdGNoZWNrX2VzdGFibGlzaGVkX3NvY2tldCgpO1xcbkBAIC0xMTU4LDYgKzExODAsNiBAQCBzdGF0aWMgdm9pZCAqY2xpZW50X2ZuKHZvaWQgKmFyZylcXG4gXFxuIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXFxuIHtcXG4tXFx0dGVzdF9pbml0KDEyMSwgc2VydmVyX2ZuLCBjbGllbnRfZm4pO1xcbitcXHR0ZXN0X2luaXQoMTIyLCBzZXJ2ZXJfZm4sIGNsaWVudF9mbik7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vbGliL2FvbGliLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9hb2xpYi5oXFxuaW5kZXggZWJiMjg5OWMxMmZlMC4uNTNiZTE3NDQyMzdlZSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9hb2xpYi5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvYW9saWIuaFxcbkBAIC00MDQsNyArNDA0LDggQEAgc3RhdGljIGlubGluZSBpbnQgdGVzdF9wcmVwYXJlX2RlZl9rZXkoc3RydWN0IHRjcF9hb19hZGQgKmFvLFxcbiBcXG4gZXh0ZXJuIGludCB0ZXN0X2dldF9vbmVfYW8oaW50IHNrLCBzdHJ1Y3QgdGNwX2FvX2dldHNvY2tvcHQgKm91dCxcXG4gXFx0XFx0XFx0ICAgdm9pZCAqYWRkciwgc2l6ZV90IGFkZHJfc3osXFxuLVxcdFxcdFxcdCAgIHVpbnQ4X3QgcHJlZml4LCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkKTtcXG4rXFx0XFx0XFx0ICAgdWludDhfdCBwcmVmaXgsIHVpbnQ4X3Qgc25kaWQsIHVpbnQ4X3QgcmN2aWQsXFxuK1xcdFxcdFxcdCAgIHVpbnQ4X3Qga2V5ZmxhZ3MsIGludCBpZmluZGV4KTtcXG4gZXh0ZXJuIGludCB0ZXN0X2dldF9hb19pbmZvKGludCBzaywgc3RydWN0IHRjcF9hb19pbmZvX29wdCAqb3V0KTtcXG4gZXh0ZXJuIGludCB0ZXN0X3NldF9hb19pbmZvKGludCBzaywgc3RydWN0IHRjcF9hb19pbmZvX29wdCAqaW4pO1xcbiBleHRlcm4gaW50IHRlc3RfY21wX2dldHNvY2tvcHRfc2V0c29ja29wdChjb25zdCBzdHJ1Y3QgdGNwX2FvX2FkZCAqYSxcXG5AQCAtNDE4LDcgKzQxOSw4IEBAIHN0YXRpYyBpbmxpbmUgaW50IHRlc3RfdmVyaWZ5X3NvY2tldF9rZXkoaW50IHNrLCBzdHJ1Y3QgdGNwX2FvX2FkZCAqa2V5KVxcbiBcXHRpbnQgZXJyO1xcbiBcXG4gXFx0ZXJyID0gdGVzdF9nZXRfb25lX2FvKHNrLCBcXHUwMDI2a2V5MiwgXFx1MDAyNmtleS1cXHUwMDNlYWRkciwgc2l6ZW9mKGtleS1cXHUwMDNlYWRkciksXFxuLVxcdFxcdFxcdCAgICAgIGtleS1cXHUwMDNlcHJlZml4LCBrZXktXFx1MDAzZXNuZGlkLCBrZXktXFx1MDAzZXJjdmlkKTtcXG4rXFx0XFx0XFx0ICAgICAga2V5LVxcdTAwM2VwcmVmaXgsIGtleS1cXHUwMDNlc25kaWQsIGtleS1cXHUwMDNlcmN2aWQsXFxuK1xcdFxcdFxcdCAgICAgIGtleS1cXHUwMDNla2V5ZmxhZ3MsIGtleS1cXHUwMDNlaWZpbmRleCk7XFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9zb2NrLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9zb2NrLmNcXG5pbmRleCBlZjhlOTAzMWQ0N2EzLi4yZTdiMDZhMWExNTY3IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vbGliL3NvY2suY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vbGliL3NvY2suY1xcbkBAIC0yNTIsNyArMjUyLDcgQEAgc3RhdGljIGludCB0ZXN0X2dldF9hb19rZXlzX25yKGludCBzaylcXG4gXFxuIGludCB0ZXN0X2dldF9vbmVfYW8oaW50IHNrLCBzdHJ1Y3QgdGNwX2FvX2dldHNvY2tvcHQgKm91dCxcXG4gXFx0XFx0dm9pZCAqYWRkciwgc2l6ZV90IGFkZHJfc3osIHVpbnQ4X3QgcHJlZml4LFxcbi1cXHRcXHR1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkKVxcbitcXHRcXHR1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkLCB1aW50OF90IGtleWZsYWdzLCBpbnQgaWZpbmRleClcXG4ge1xcbiBcXHRzdHJ1Y3QgdGNwX2FvX2dldHNvY2tvcHQgdG1wID0ge307XFxuIFxcdHNvY2tsZW5fdCB0bXBfc3ogPSBzaXplb2YodG1wKTtcXG5AQCAtMjYyLDYgKzI2Miw4IEBAIGludCB0ZXN0X2dldF9vbmVfYW8oaW50IHNrLCBzdHJ1Y3QgdGNwX2FvX2dldHNvY2tvcHQgKm91dCxcXG4gXFx0dG1wLnByZWZpeCA9IHByZWZpeDtcXG4gXFx0dG1wLnNuZGlkICA9IHNuZGlkO1xcbiBcXHR0bXAucmN2aWQgID0gcmN2aWQ7XFxuK1xcdHRtcC5rZXlmbGFncyA9IGtleWZsYWdzO1xcbitcXHR0bXAuaWZpbmRleCA9IGlmaW5kZXg7XFxuIFxcdHRtcC5ua2V5cyAgPSAxO1xcbiBcXG4gXFx0cmV0ID0gZ2V0c29ja29wdChzaywgSVBQUk9UT19UQ1AsIFRDUF9BT19HRVRfS0VZUywgXFx1MDAyNnRtcCwgXFx1MDAyNnRtcF9zeik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE1OjU2OjQxLjgxNTg2NzE5M1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjY5ODc0NTExMzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRDUF9BT1wiLFxuICAgIFwiTkVUX1ZSRlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjcF9wYXJzZV9hb1wiLFxuICAgIFwidGNwX3Y0X3BhcnNlX2FvXCIsXG4gICAgXCJ0Y3BfdjZfcGFyc2VfYW9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBUQ1AtQU8gc2V0c29ja29wdCBoYW5kbGluZyB3aGVyZSBgY21kLmlmaW5kZXhgIHdhcyBub3QgYXNzaWduZWQgdG8gYGwzaW5kZXhgIHdoZW4gZGVsZXRpbmcgYSBrZXksIHByZXZlbnRpbmcgZGVsZXRpb24gb2YgaW50ZXJmYWNlLXNjb3BlZCBrZXlzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxMTE3YzlmZGY4YmMwNzI0YzIwMTdiMmQ1ODk3MmNjZjk3OWMzMzNhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMjEgMTU6NTY6NDAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfYW8uYyBiL25ldC9pcHY0L3RjcF9hby5jXG5pbmRleCA1MDk0MjY3NDQ3YWVlLi4yNjg2NDYyMWU2ZGVmIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvdGNwX2FvLmNcbisrKyBiL25ldC9pcHY0L3RjcF9hby5jXG5AQCAtMTgzNCw2ICsxODM0LDkgQEAgc3RhdGljIGludCB0Y3BfYW9fZGVsX2NtZChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIHNob3J0IGludCBmYW1pbHksXG4gXHRpZiAoY21kLmlmaW5kZXggXHUwMDI2XHUwMDI2ICEoY21kLmtleWZsYWdzIFx1MDAyNiBUQ1BfQU9fS0VZRl9JRklOREVYKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4rXHRpZiAoY21kLmtleWZsYWdzIFx1MDAyNiBUQ1BfQU9fS0VZRl9JRklOREVYKVxuK1x0XHRsM2luZGV4ID0gY21kLmlmaW5kZXg7XG4rXG4gXHRhb19pbmZvID0gc2V0c29ja29wdF9hb19pbmZvKHNrKTtcbiBcdGlmIChJU19FUlIoYW9faW5mbykpXG4gXHRcdHJldHVybiBQVFJfRVJSKGFvX2luZm8pO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8va2V5LW1hbmFnZW1lbnQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8va2V5LW1hbmFnZW1lbnQuY1xuaW5kZXggZDg2YmIzODBiNzlmNy4uMWUwMWU4MDVkYmE3MiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8va2V5LW1hbmFnZW1lbnQuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9rZXktbWFuYWdlbWVudC5jXG5AQCAtNjMsNyArNjMsOCBAQCBzdGF0aWMgaW50IHByZXBhcmVfbHNrKHVuaW9uIHRjcF9hZGRyICphZGRyLCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkKVxuIFx0cmV0dXJuIHNrO1xuIH1cbiBcbi1zdGF0aWMgaW50IHRlc3RfZGVsX2tleShpbnQgc2ssIHVpbnQ4X3Qgc25kaWQsIHVpbnQ4X3QgcmN2aWQsIGJvb2wgYXN5bmMsXG4rc3RhdGljIGludCB0ZXN0X2RlbF9rZXkoaW50IHNrLCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkLCBpbnQgaWZpbmRleCxcbitcdFx0XHRib29sIGFzeW5jLFxuIFx0XHRcdGludCBjdXJyZW50X2tleSwgaW50IHJuZXh0X2tleSlcbiB7XG4gXHRzdHJ1Y3QgdGNwX2FvX2luZm9fb3B0IGFvX2luZm8gPSB7fTtcbkBAIC03Niw2ICs3NywxMCBAQCBzdGF0aWMgaW50IHRlc3RfZGVsX2tleShpbnQgc2ssIHVpbnQ4X3Qgc25kaWQsIHVpbnQ4X3QgcmN2aWQsIGJvb2wgYXN5bmMsXG4gXHRkZWwucHJlZml4ID0gREVGQVVMVF9URVNUX1BSRUZJWDtcbiBcdGRlbC5zbmRpZCA9IHNuZGlkO1xuIFx0ZGVsLnJjdmlkID0gcmN2aWQ7XG4rXHRpZiAoaWZpbmRleCkge1xuK1x0XHRkZWwua2V5ZmxhZ3MgPSBUQ1BfQU9fS0VZRl9JRklOREVYO1xuK1x0XHRkZWwuaWZpbmRleCA9IGlmaW5kZXg7XG4rXHR9XG4gXG4gXHRpZiAoY3VycmVudF9rZXkgXHUwMDNlPSAwKSB7XG4gXHRcdGRlbC5zZXRfY3VycmVudCA9IDE7XG5AQCAtOTUsNyArMTAwLDggQEAgc3RhdGljIGludCB0ZXN0X2RlbF9rZXkoaW50IHNrLCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkLCBib29sIGFzeW5jLFxuIFxuIFx0dGNwX2FkZHJfdG9fc29ja2FkZHJfaW4oXHUwMDI2c29ja2FkZHIsIFx1MDAyNnRoaXNfaXBfZGVzdCwgMCk7XG4gXHRlcnIgPSB0ZXN0X2dldF9vbmVfYW8oc2ssIFx1MDAyNmtleSwgXHUwMDI2c29ja2FkZHIsIHNpemVvZihzb2NrYWRkciksXG4tXHRcdFx0ICAgICAgREVGQVVMVF9URVNUX1BSRUZJWCwgc25kaWQsIHJjdmlkKTtcbitcdFx0XHQgICAgICBERUZBVUxUX1RFU1RfUFJFRklYLCBzbmRpZCwgcmN2aWQsXG4rXHRcdFx0ICAgICAgZGVsLmtleWZsYWdzLCBkZWwuaWZpbmRleCk7XG4gXHRpZiAoIWVycilcbiBcdFx0cmV0dXJuIC1FRVhJU1Q7XG4gXHRpZiAoZXJyICE9IC1FMkJJRylcbkBAIC0xMTIsMTIgKzExOCwxMiBAQCBzdGF0aWMgaW50IHRlc3RfZGVsX2tleShpbnQgc2ssIHVpbnQ4X3Qgc25kaWQsIHVpbnQ4X3QgcmN2aWQsIGJvb2wgYXN5bmMsXG4gfVxuIFxuIHN0YXRpYyB2b2lkIHRyeV9kZWxldGVfa2V5KGNoYXIgKnRzdF9uYW1lLCBpbnQgc2ssIHVpbnQ4X3Qgc25kaWQsIHVpbnQ4X3QgcmN2aWQsXG4tXHRcdFx0ICAgYm9vbCBhc3luYywgaW50IGN1cnJlbnRfa2V5LCBpbnQgcm5leHRfa2V5LFxuK1x0XHRcdCAgIGludCBpZmluZGV4LCBib29sIGFzeW5jLCBpbnQgY3VycmVudF9rZXksIGludCBybmV4dF9rZXksXG4gXHRcdFx0ICAgZmF1bHRfdCBpbmopXG4ge1xuIFx0aW50IGVycjtcbiBcbi1cdGVyciA9IHRlc3RfZGVsX2tleShzaywgc25kaWQsIHJjdmlkLCBhc3luYywgY3VycmVudF9rZXksIHJuZXh0X2tleSk7XG4rXHRlcnIgPSB0ZXN0X2RlbF9rZXkoc2ssIHNuZGlkLCByY3ZpZCwgaWZpbmRleCwgYXN5bmMsIGN1cnJlbnRfa2V5LCBybmV4dF9rZXkpO1xuIFx0aWYgKChlcnIgPT0gLUVCVVNZIFx1MDAyNlx1MDAyNiBmYXVsdChCVVNZKSkgfHwgKGVyciA9PSAtRUlOVkFMIFx1MDAyNlx1MDAyNiBmYXVsdChDVVJSTkVYVCkpKSB7XG4gXHRcdHRlc3Rfb2soXCIlczoga2V5IGRlbGV0aW9uIHdhcyBwcmV2ZW50ZWRcIiwgdHN0X25hbWUpO1xuIFx0XHRyZXR1cm47XG5AQCAtMjM2LDE1ICsyNDIsMTUgQEAgc3RhdGljIHZvaWQgY2hlY2tfY2xvc2VkX3NvY2tldCh2b2lkKVxuIFx0aW50IHNrO1xuIFxuIFx0c2sgPSBwcmVwYXJlX3NrKFx1MDAyNnRoaXNfaXBfZGVzdCwgMjAwLCAyMDApO1xuLVx0dHJ5X2RlbGV0ZV9rZXkoXCJjbG9zZWQgc29ja2V0LCBkZWxldGUgYSBrZXlcIiwgc2ssIDIwMCwgMjAwLCAwLCAtMSwgLTEsIDApO1xuLVx0dHJ5X2RlbGV0ZV9rZXkoXCJjbG9zZWQgc29ja2V0LCBkZWxldGUgYWxsIGtleXNcIiwgc2ssIDEwMCwgMTAwLCAwLCAtMSwgLTEsIDApO1xuK1x0dHJ5X2RlbGV0ZV9rZXkoXCJjbG9zZWQgc29ja2V0LCBkZWxldGUgYSBrZXlcIiwgc2ssIDIwMCwgMjAwLCAwLCAwLCAtMSwgLTEsIDApO1xuK1x0dHJ5X2RlbGV0ZV9rZXkoXCJjbG9zZWQgc29ja2V0LCBkZWxldGUgYWxsIGtleXNcIiwgc2ssIDEwMCwgMTAwLCAwLCAwLCAtMSwgLTEsIDApO1xuIFx0Y2xvc2Uoc2spO1xuIFxuIFx0c2sgPSBwcmVwYXJlX3NrKFx1MDAyNnRoaXNfaXBfZGVzdCwgMjAwLCAyMDApO1xuIFx0aWYgKHRlc3Rfc2V0X2tleShzaywgMTAwLCAyMDApKVxuIFx0XHR0ZXN0X2Vycm9yKFwiZmFpbGVkIHRvIHNldCBjdXJyZW50L3JuZXh0IGtleXNcIik7XG4tXHR0cnlfZGVsZXRlX2tleShcImNsb3NlZCBzb2NrZXQsIGRlbGV0ZSBjdXJyZW50IGtleVwiLCBzaywgMTAwLCAxMDAsIDAsIC0xLCAtMSwgRkFVTFRfQlVTWSk7XG4tXHR0cnlfZGVsZXRlX2tleShcImNsb3NlZCBzb2NrZXQsIGRlbGV0ZSBybmV4dCBrZXlcIiwgc2ssIDIwMCwgMjAwLCAwLCAtMSwgLTEsIEZBVUxUX0JVU1kpO1xuK1x0dHJ5X2RlbGV0ZV9rZXkoXCJjbG9zZWQgc29ja2V0LCBkZWxldGUgY3VycmVudCBrZXlcIiwgc2ssIDEwMCwgMTAwLCAwLCAwLCAtMSwgLTEsIEZBVUxUX0JVU1kpO1xuK1x0dHJ5X2RlbGV0ZV9rZXkoXCJjbG9zZWQgc29ja2V0LCBkZWxldGUgcm5leHQga2V5XCIsIHNrLCAyMDAsIDIwMCwgMCwgMCwgLTEsIC0xLCBGQVVMVF9CVVNZKTtcbiBcdGNsb3NlKHNrKTtcbiBcbiBcdHNrID0gcHJlcGFyZV9zayhcdTAwMjZ0aGlzX2lwX2Rlc3QsIDIwMCwgMjAwKTtcbkBAIC0yNTQsMTAgKzI2MCwxMiBAQCBzdGF0aWMgdm9pZCBjaGVja19jbG9zZWRfc29ja2V0KHZvaWQpXG4gXHRpZiAodGVzdF9hZGRfa2V5KHNrLCBcIkdsb3J5IHRvIFVrcmFpbmUhXCIsIHRoaXNfaXBfZGVzdCxcbiBcdFx0XHQgREVGQVVMVF9URVNUX1BSRUZJWCwgMTIsIDEzKSlcbiBcdFx0dGVzdF9lcnJvcihcInRlc3RfYWRkX2tleSgpXCIpO1xuLVx0dHJ5X2RlbGV0ZV9rZXkoXCJjbG9zZWQgc29ja2V0LCBkZWxldGUgYSBrZXkgKyBzZXQgY3VycmVudC9ybmV4dFwiLCBzaywgMTAwLCAxMDAsIDAsIDEwLCAxMywgMCk7XG4tXHR0cnlfZGVsZXRlX2tleShcImNsb3NlZCBzb2NrZXQsIGZvcmNlLWRlbGV0ZSBjdXJyZW50IGtleVwiLCBzaywgMTAsIDExLCAwLCAyMDAsIC0xLCAwKTtcbi1cdHRyeV9kZWxldGVfa2V5KFwiY2xvc2VkIHNvY2tldCwgZm9yY2UtZGVsZXRlIHJuZXh0IGtleVwiLCBzaywgMTIsIDEzLCAwLCAtMSwgMjAwLCAwKTtcbi1cdHRyeV9kZWxldGVfa2V5KFwiY2xvc2VkIHNvY2tldCwgZGVsZXRlIGN1cnJlbnQrcm5leHQga2V5XCIsIHNrLCAyMDAsIDIwMCwgMCwgLTEsIC0xLCBGQVVMVF9CVVNZKTtcbitcdHRyeV9kZWxldGVfa2V5KFwiY2xvc2VkIHNvY2tldCwgZGVsZXRlIGEga2V5ICsgc2V0IGN1cnJlbnQvcm5leHRcIiwgc2ssXG4rXHRcdCAgICAgICAxMDAsIDEwMCwgMCwgMCwgMTAsIDEzLCAwKTtcbitcdHRyeV9kZWxldGVfa2V5KFwiY2xvc2VkIHNvY2tldCwgZm9yY2UtZGVsZXRlIGN1cnJlbnQga2V5XCIsIHNrLCAxMCwgMTEsIDAsIDAsIDIwMCwgLTEsIDApO1xuK1x0dHJ5X2RlbGV0ZV9rZXkoXCJjbG9zZWQgc29ja2V0LCBmb3JjZS1kZWxldGUgcm5leHQga2V5XCIsIHNrLCAxMiwgMTMsIDAsIDAsIC0xLCAyMDAsIDApO1xuK1x0dHJ5X2RlbGV0ZV9rZXkoXCJjbG9zZWQgc29ja2V0LCBkZWxldGUgY3VycmVudCtybmV4dCBrZXlcIiwgc2ssXG4rXHRcdCAgICAgICAyMDAsIDIwMCwgMCwgMCwgLTEsIC0xLCBGQVVMVF9CVVNZKTtcbiBcdGNsb3NlKHNrKTtcbiBcbiBcdHNrID0gcHJlcGFyZV9zayhcdTAwMjZ0aGlzX2lwX2Rlc3QsIDIwMCwgMjAwKTtcbkBAIC0yNzIsNiArMjgwLDE4IEBAIHN0YXRpYyB2b2lkIGNoZWNrX2Nsb3NlZF9zb2NrZXQodm9pZClcbiBcdFx0XHRcdCAgdGhpc19pcF9kZXN0LCBERUZBVUxUX1RFU1RfUFJFRklYLFxuIFx0XHRcdFx0ICBmYWxzZSwgdHJ1ZSwgMjAsIDEwLCAwKTtcbiBcdGNsb3NlKHNrKTtcbitcbitcdGlmICghc2hvdWxkX3NraXBfdGVzdChcImNsb3NlZCBzb2NrZXQsIGFkZCArIGRlbGV0ZSBWUkYtc2NvcGVkIGtleVwiLFxuK1x0XHRcdCAgICAgIEtDT05GSUdfTkVUX1ZSRikpIHtcbitcdFx0c2sgPSBwcmVwYXJlX3NrKFx1MDAyNnRoaXNfaXBfZGVzdCwgMjAwLCAyMDApO1xuK1x0XHRpZiAodGVzdF9hZGRfa2V5X3ZyZihzaywgU0VDT05EX1BBU1NXT1JELCBUQ1BfQU9fS0VZRl9JRklOREVYLFxuK1x0XHRcdFx0ICAgICB0aGlzX2lwX2Rlc3QsIERFRkFVTFRfVEVTVF9QUkVGSVgsXG4rXHRcdFx0XHQgICAgIHRlc3RfdnJmX2lmaW5kZXgsIDIwMSwgMjAxKSlcbitcdFx0XHR0ZXN0X2Vycm9yKFwidGVzdF9hZGRfa2V5X3ZyZigpXCIpO1xuK1x0XHR0cnlfZGVsZXRlX2tleShcImNsb3NlZCBzb2NrZXQsIGFkZCArIGRlbGV0ZSBWUkYtc2NvcGVkIGtleVwiLCBzaywgMjAxLCAyMDEsXG4rXHRcdFx0ICAgICAgIHRlc3RfdnJmX2lmaW5kZXgsIDAsIC0xLCAtMSwgMCk7XG4rXHRcdGNsb3NlKHNrKTtcbitcdH1cbiB9XG4gXG4gc3RhdGljIHZvaWQgYXNzZXJ0X25vX2N1cnJlbnRfcm5leHQoY29uc3QgY2hhciAqdHN0X21zZywgaW50IHNrKVxuQEAgLTMyMiw4ICszNDIsOCBAQCBzdGF0aWMgdm9pZCBjaGVja19saXN0ZW5fc29ja2V0KHZvaWQpXG4gXHRpbnQgc2ssIGVycjtcbiBcbiBcdHNrID0gcHJlcGFyZV9sc2soXHUwMDI2dGhpc19pcF9kZXN0LCAyMDAsIDIwMCk7XG4tXHR0cnlfZGVsZXRlX2tleShcImxpc3RlbiBzb2NrZXQsIGRlbGV0ZSBhIGtleVwiLCBzaywgMjAwLCAyMDAsIDAsIC0xLCAtMSwgMCk7XG4tXHR0cnlfZGVsZXRlX2tleShcImxpc3RlbiBzb2NrZXQsIGRlbGV0ZSBhbGwga2V5c1wiLCBzaywgMTAwLCAxMDAsIDAsIC0xLCAtMSwgMCk7XG4rXHR0cnlfZGVsZXRlX2tleShcImxpc3RlbiBzb2NrZXQsIGRlbGV0ZSBhIGtleVwiLCBzaywgMjAwLCAyMDAsIDAsIDAsIC0xLCAtMSwgMCk7XG4rXHR0cnlfZGVsZXRlX2tleShcImxpc3RlbiBzb2NrZXQsIGRlbGV0ZSBhbGwga2V5c1wiLCBzaywgMTAwLCAxMDAsIDAsIDAsIC0xLCAtMSwgMCk7XG4gXHRjbG9zZShzayk7XG4gXG4gXHRzayA9IHByZXBhcmVfbHNrKFx1MDAyNnRoaXNfaXBfZGVzdCwgMjAwLCAyMDApO1xuQEAgLTM0NSw4ICszNjUsMTAgQEAgc3RhdGljIHZvaWQgY2hlY2tfbGlzdGVuX3NvY2tldCh2b2lkKVxuIFx0aWYgKGxpc3RlbihzaywgMTApKVxuIFx0XHR0ZXN0X2Vycm9yKFwibGlzdGVuKClcIik7XG4gXHRhc3NlcnRfbm9fY3VycmVudF9ybmV4dChcImxpc3RlbigpIGFmdGVyIGN1cnJlbnQvcm5leHQga2V5cyBzZXRcIiwgc2spO1xuLVx0dHJ5X2RlbGV0ZV9rZXkoXCJsaXN0ZW4gc29ja2V0LCBkZWxldGUgY3VycmVudCBrZXkgZnJvbSBiZWZvcmUgbGlzdGVuKClcIiwgc2ssIDEwMCwgMTAwLCAwLCAtMSwgLTEsIEZBVUxUX0ZJWE1FKTtcbi1cdHRyeV9kZWxldGVfa2V5KFwibGlzdGVuIHNvY2tldCwgZGVsZXRlIHJuZXh0IGtleSBmcm9tIGJlZm9yZSBsaXN0ZW4oKVwiLCBzaywgMjAwLCAyMDAsIDAsIC0xLCAtMSwgRkFVTFRfRklYTUUpO1xuK1x0dHJ5X2RlbGV0ZV9rZXkoXCJsaXN0ZW4gc29ja2V0LCBkZWxldGUgY3VycmVudCBrZXkgZnJvbSBiZWZvcmUgbGlzdGVuKClcIiwgc2ssXG4rXHRcdCAgICAgICAxMDAsIDEwMCwgMCwgMCwgLTEsIC0xLCBGQVVMVF9GSVhNRSk7XG4rXHR0cnlfZGVsZXRlX2tleShcImxpc3RlbiBzb2NrZXQsIGRlbGV0ZSBybmV4dCBrZXkgZnJvbSBiZWZvcmUgbGlzdGVuKClcIiwgc2ssXG4rXHRcdCAgICAgICAyMDAsIDIwMCwgMCwgMCwgLTEsIC0xLCBGQVVMVF9GSVhNRSk7XG4gXHRjbG9zZShzayk7XG4gXG4gXHRhc3NlcnRfbm9fdGNwX3JlcGFpcigpO1xuQEAgLTM1OSwxMyArMzgxLDEzIEBAIHN0YXRpYyB2b2lkIGNoZWNrX2xpc3Rlbl9zb2NrZXQodm9pZClcbiBcdFx0XHQgREVGQVVMVF9URVNUX1BSRUZJWCwgMTIsIDEzKSlcbiBcdFx0dGVzdF9lcnJvcihcInRlc3RfYWRkX2tleSgpXCIpO1xuIFx0dHJ5X2RlbGV0ZV9rZXkoXCJsaXN0ZW4gc29ja2V0LCBkZWxldGUgYSBrZXkgKyBzZXQgY3VycmVudC9ybmV4dFwiLCBzayxcbi1cdFx0ICAgICAgIDEwMCwgMTAwLCAwLCAxMCwgMTMsIEZBVUxUX0NVUlJORVhUKTtcbitcdFx0ICAgICAgIDEwMCwgMTAwLCAwLCAwLCAxMCwgMTMsIEZBVUxUX0NVUlJORVhUKTtcbiBcdHRyeV9kZWxldGVfa2V5KFwibGlzdGVuIHNvY2tldCwgZm9yY2UtZGVsZXRlIGN1cnJlbnQga2V5XCIsIHNrLFxuLVx0XHQgICAgICAgMTAsIDExLCAwLCAyMDAsIC0xLCBGQVVMVF9DVVJSTkVYVCk7XG4rXHRcdCAgICAgICAxMCwgMTEsIDAsIDAsIDIwMCwgLTEsIEZBVUxUX0NVUlJORVhUKTtcbiBcdHRyeV9kZWxldGVfa2V5KFwibGlzdGVuIHNvY2tldCwgZm9yY2UtZGVsZXRlIHJuZXh0IGtleVwiLCBzayxcbi1cdFx0ICAgICAgIDEyLCAxMywgMCwgLTEsIDIwMCwgRkFVTFRfQ1VSUk5FWFQpO1xuK1x0XHQgICAgICAgMTIsIDEzLCAwLCAwLCAtMSwgMjAwLCBGQVVMVF9DVVJSTkVYVCk7XG4gXHR0cnlfZGVsZXRlX2tleShcImxpc3RlbiBzb2NrZXQsIGRlbGV0ZSBhIGtleVwiLCBzayxcbi1cdFx0ICAgICAgIDIwMCwgMjAwLCAwLCAtMSwgLTEsIDApO1xuK1x0XHQgICAgICAgMjAwLCAyMDAsIDAsIDAsIC0xLCAtMSwgMCk7XG4gXHRjbG9zZShzayk7XG4gXG4gXHRzayA9IHByZXBhcmVfbHNrKFx1MDAyNnRoaXNfaXBfZGVzdCwgMjAwLCAyMDApO1xuQEAgLTExMzEsNyArMTE1Myw2IEBAIHN0YXRpYyB2b2lkIGNoZWNrX2VzdGFibGlzaGVkX3NvY2tldCh2b2lkKVxuIHtcbiBcdHVuc2lnbmVkIGludCBwb3J0ID0gdGVzdF9zZXJ2ZXJfcG9ydDtcbiBcbi1cdHNldHVwX3ZyZnMoKTtcbiBcdHRyeV9jbGllbnRfcnVuKFwiY2xpZW50OiBDaGVjayBjdXJyZW50L3JuZXh0IGtleXMgdW5zZXQgYmVmb3JlIGNvbm5lY3QoKVwiLFxuIFx0XHQgICAgICAgcG9ydCsrLCAyMCwgLTEsIC0xKTtcbiBcdHRyeV9jbGllbnRfcnVuKFwiY2xpZW50OiBDaGVjayBjdXJyZW50L3JuZXh0IGtleXMgc2V0IGJlZm9yZSBjb25uZWN0KClcIixcbkBAIC0xMTUwLDYgKzExNzEsNyBAQCBzdGF0aWMgdm9pZCAqY2xpZW50X2ZuKHZvaWQgKmFyZylcbiB7XG4gXHRpZiAoaW5ldF9wdG9uKFRFU1RfRkFNSUxZLCBURVNUX1dST05HX0lQLCBcdTAwMjZ3cm9uZ19hZGRyKSAhPSAxKVxuIFx0XHR0ZXN0X2Vycm9yKFwiQ2FuJ3QgY29udmVydCBpcCBhZGRyZXNzICVzXCIsIFRFU1RfV1JPTkdfSVApO1xuK1x0c2V0dXBfdnJmcygpO1xuIFx0Y2hlY2tfY2xvc2VkX3NvY2tldCgpO1xuIFx0Y2hlY2tfbGlzdGVuX3NvY2tldCgpO1xuIFx0Y2hlY2tfZXN0YWJsaXNoZWRfc29ja2V0KCk7XG5AQCAtMTE1OCw2ICsxMTgwLDYgQEAgc3RhdGljIHZvaWQgKmNsaWVudF9mbih2b2lkICphcmcpXG4gXG4gaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbiB7XG4tXHR0ZXN0X2luaXQoMTIxLCBzZXJ2ZXJfZm4sIGNsaWVudF9mbik7XG4rXHR0ZXN0X2luaXQoMTIyLCBzZXJ2ZXJfZm4sIGNsaWVudF9mbik7XG4gXHRyZXR1cm4gMDtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvYW9saWIuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vbGliL2FvbGliLmhcbmluZGV4IGViYjI4OTljMTJmZTAuLjUzYmUxNzQ0MjM3ZWUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9hb2xpYi5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9hb2xpYi5oXG5AQCAtNDA0LDcgKzQwNCw4IEBAIHN0YXRpYyBpbmxpbmUgaW50IHRlc3RfcHJlcGFyZV9kZWZfa2V5KHN0cnVjdCB0Y3BfYW9fYWRkICphbyxcbiBcbiBleHRlcm4gaW50IHRlc3RfZ2V0X29uZV9hbyhpbnQgc2ssIHN0cnVjdCB0Y3BfYW9fZ2V0c29ja29wdCAqb3V0LFxuIFx0XHRcdCAgIHZvaWQgKmFkZHIsIHNpemVfdCBhZGRyX3N6LFxuLVx0XHRcdCAgIHVpbnQ4X3QgcHJlZml4LCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkKTtcbitcdFx0XHQgICB1aW50OF90IHByZWZpeCwgdWludDhfdCBzbmRpZCwgdWludDhfdCByY3ZpZCxcbitcdFx0XHQgICB1aW50OF90IGtleWZsYWdzLCBpbnQgaWZpbmRleCk7XG4gZXh0ZXJuIGludCB0ZXN0X2dldF9hb19pbmZvKGludCBzaywgc3RydWN0IHRjcF9hb19pbmZvX29wdCAqb3V0KTtcbiBleHRlcm4gaW50IHRlc3Rfc2V0X2FvX2luZm8oaW50IHNrLCBzdHJ1Y3QgdGNwX2FvX2luZm9fb3B0ICppbik7XG4gZXh0ZXJuIGludCB0ZXN0X2NtcF9nZXRzb2Nrb3B0X3NldHNvY2tvcHQoY29uc3Qgc3RydWN0IHRjcF9hb19hZGQgKmEsXG5AQCAtNDE4LDcgKzQxOSw4IEBAIHN0YXRpYyBpbmxpbmUgaW50IHRlc3RfdmVyaWZ5X3NvY2tldF9rZXkoaW50IHNrLCBzdHJ1Y3QgdGNwX2FvX2FkZCAqa2V5KVxuIFx0aW50IGVycjtcbiBcbiBcdGVyciA9IHRlc3RfZ2V0X29uZV9hbyhzaywgXHUwMDI2a2V5MiwgXHUwMDI2a2V5LVx1MDAzZWFkZHIsIHNpemVvZihrZXktXHUwMDNlYWRkciksXG4tXHRcdFx0ICAgICAga2V5LVx1MDAzZXByZWZpeCwga2V5LVx1MDAzZXNuZGlkLCBrZXktXHUwMDNlcmN2aWQpO1xuK1x0XHRcdCAgICAgIGtleS1cdTAwM2VwcmVmaXgsIGtleS1cdTAwM2VzbmRpZCwga2V5LVx1MDAzZXJjdmlkLFxuK1x0XHRcdCAgICAgIGtleS1cdTAwM2VrZXlmbGFncywga2V5LVx1MDAzZWlmaW5kZXgpO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9zb2NrLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9zb2NrLmNcbmluZGV4IGVmOGU5MDMxZDQ3YTMuLjJlN2IwNmExYTE1NjcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9zb2NrLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vbGliL3NvY2suY1xuQEAgLTI1Miw3ICsyNTIsNyBAQCBzdGF0aWMgaW50IHRlc3RfZ2V0X2FvX2tleXNfbnIoaW50IHNrKVxuIFxuIGludCB0ZXN0X2dldF9vbmVfYW8oaW50IHNrLCBzdHJ1Y3QgdGNwX2FvX2dldHNvY2tvcHQgKm91dCxcbiBcdFx0dm9pZCAqYWRkciwgc2l6ZV90IGFkZHJfc3osIHVpbnQ4X3QgcHJlZml4LFxuLVx0XHR1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkKVxuK1x0XHR1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkLCB1aW50OF90IGtleWZsYWdzLCBpbnQgaWZpbmRleClcbiB7XG4gXHRzdHJ1Y3QgdGNwX2FvX2dldHNvY2tvcHQgdG1wID0ge307XG4gXHRzb2NrbGVuX3QgdG1wX3N6ID0gc2l6ZW9mKHRtcCk7XG5AQCAtMjYyLDYgKzI2Miw4IEBAIGludCB0ZXN0X2dldF9vbmVfYW8oaW50IHNrLCBzdHJ1Y3QgdGNwX2FvX2dldHNvY2tvcHQgKm91dCxcbiBcdHRtcC5wcmVmaXggPSBwcmVmaXg7XG4gXHR0bXAuc25kaWQgID0gc25kaWQ7XG4gXHR0bXAucmN2aWQgID0gcmN2aWQ7XG4rXHR0bXAua2V5ZmxhZ3MgPSBrZXlmbGFncztcbitcdHRtcC5pZmluZGV4ID0gaWZpbmRleDtcbiBcdHRtcC5ua2V5cyAgPSAxO1xuIFxuIFx0cmV0ID0gZ2V0c29ja29wdChzaywgSVBQUk9UT19UQ1AsIFRDUF9BT19HRVRfS0VZUywgXHUwMDI2dG1wLCBcdTAwMjZ0bXBfc3opO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTU6NTY6NDEuODE1ODY4NTYzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjU0NzEwMTY4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRDUC1BTyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2guIEl0IHNlZW1zIHdlIGhhdmUgYSBtb2RpZmljYXRpb24gdG8gYG5ldC9pcHY0L3RjcF9hby5jYCwgYWxvbmcgd2l0aCBzb21lIGFjY29tcGFueWluZyBzZWxmdGVzdHMsIHdoaWNoIGlzIHN0YW5kYXJkIHByb2NlZHVyZS4gVGhpcyBhcmVhIGNvbmNlcm5zIHRoZSBUQ1AgQXV0aGVudGljYXRpb24gT3B0aW9uLCBvciBUQ1AtQU8sIHdoaWNoIGlzIGEga2V5IHBhcnQgb2Ygc2VjdXJpbmcgVENQIGNvbm5lY3Rpb25zLlxuXG5MZXQncyBkaXNzZWN0IHRoZSBjb3JlIGNoYW5nZSBpbiBgdGNwX2FvX2RlbF9jbWRgLiBJdCdzIHN0cmFpZ2h0Zm9yd2FyZDogYSBuZXcgY29uZGl0aW9uYWwgYXNzaWdubWVudCBpcyBpbnRyb2R1Y2VkLiBTcGVjaWZpY2FsbHksIHRoZSBjb2RlIG5vdyBpbmNsdWRlczpcblxuYGBgY1xuXHRpZiAoY21kLmtleWZsYWdzIFx1MDAyNiBUQ1BfQU9fS0VZRl9JRklOREVYKVxuXHRcdGwzaW5kZXggPSBjbWQuaWZpbmRleDtcbmBgYFxuXG5Fc3NlbnRpYWxseSwgaWYgdGhlIGBUQ1BfQU9fS0VZRl9JRklOREVYYCBmbGFnIGlzIHNldCB3aXRoaW4gYGNtZC5rZXlmbGFnc2AsIHRoZW4gdGhlIHZhcmlhYmxlIGBsM2luZGV4YCBnZXRzIGFzc2lnbmVkIHRoZSB2YWx1ZSBvZiBgY21kLmlmaW5kZXhgLiBUaGlzIHBvaW50cyB0b3dhcmRzIGFzc29jaWF0aW5nIGEgc3BlY2lmaWMgTGF5ZXIgMyBpbnRlcmZhY2UgaW5kZXggd2l0aCB0aGUgQU8gY29uZmlndXJhdGlvbiBkdXJpbmcgZGVsZXRpb24uIFRoZSB1c2Ugb2YgYml0d2lzZSBBTkQgb3BlcmF0aW9uIHN1Z2dlc3RzIHRoYXQgYGtleWZsYWdzYCBpcyBwcm9iYWJseSBhIGJpdG1hc2ssIGFsbG93aW5nIG11bHRpcGxlIGZsYWdzIHRvIGJlIHNldCBhdCBvbmNlLiBUaGlzIGFsaWducyB3aXRoIGhvdyB0aGVzZSB0eXBlcyBvZiBvcHRpb25zIGFyZSB1c3VhbGx5IGhhbmRsZWQgaW4gdGhlIGtlcm5lbC5cblxuSSBuZWVkIHRvIGNvbmZpcm0gcHJlY2lzZWx5IHdoYXQgYGwzaW5kZXhgIHJlcHJlc2VudHMgaW4gdGhpcyBjb250ZXh0LiBJcyBpdCB0aGUgaW50ZXJmYWNlIGluZGV4IGJlaW5nIHVzZWQgYnkgdGhlIEFPIGNvbmZpZ3VyYXRpb24gb3Igc29tZXRoaW5nIGVsc2UuIEknbGwgbmVlZCB0byBmb2xsb3cgdGhlIHVzZSBvZiBgbDNpbmRleGAgZnVydGhlciB3aXRoaW4gYHRjcF9hby5jYCAoYW5kIHBvdGVudGlhbGx5IG90aGVyIGZpbGVzKSB0byBmdWxseSBncmFzcCB0aGUgcmFtaWZpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gSXQncyBsaWtlbHkgcmVsYXRlZCB0byBob3cgdGhlIEFPIGlzIGFwcGxpZWQgdG8gYSBzcGVjaWZpYyBuZXR3b3JrIGludGVyZmFjZS4gVGhpcyBzZWVtcyBsaWtlIGEgcmVhc29uYWJsZSBhbmQgcG9zc2libHkgbmVjZXNzYXJ5IGFkZGl0aW9uIHRvIHN1cHBvcnQgZmluZS1ncmFpbmVkIGNvbnRyb2wgb3ZlciBUQ1AtQU8uIFRoZSBzZWxmdGVzdHMgc2hvdWxkIHByb3ZpZGUgY3J1Y2lhbCBpbnNpZ2h0cyBpbnRvIHRoZSBpbnRlbmRlZCBiZWhhdmlvciBhbmQgcG90ZW50aWFsIGVkZ2UgY2FzZXMuIEknbGwgbmVlZCB0byBnbyB0aHJvdWdoIHRoZW0gdGhvcm91Z2hseSB0byBlbnN1cmUgdGhpcyBpcyBzb3VuZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjM5NSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE1OjU2OjQ4LjM2Mjk3MjgwOFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODc3ODM1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y3BfYW9fZGVsX2NtZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC90Y3BfYW8uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC90Y3BfYW8uYz05OTA9dGNwX2luYm91bmRfYW9faGFzaChzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC90Y3BfYW8uYy0xMDU1LVxcdFxcdFxcdGlmIChrZXkpXFxubmV0L2lwdjQvdGNwX2FvLmM6MTA1NjpcXHRcXHRcXHRcXHQvKiBwYWlycyB3aXRoIHRjcF9hb19kZWxfY21kICovXFxubmV0L2lwdjQvdGNwX2FvLmMtMTA1Ny1cXHRcXHRcXHRcXHRXUklURV9PTkNFKGluZm8tXFx1MDAzZWN1cnJlbnRfa2V5LCBrZXkpO1xcbi0tXFxubmV0L2lwdjQvdGNwX2FvLmMtMTA2OC1cXHQgKiAtIHJlcXVlc3Qgc29ja2V0cyB3b3VsZCByYWNlIG9uIHRob3NlIGtleSBwb2ludGVyc1xcbm5ldC9pcHY0L3RjcF9hby5jOjEwNjk6XFx0ICogLSB0Y3BfYW9fZGVsX2NtZCgpIGFsbG93cyBhc3luYyBrZXkgcmVtb3ZhbFxcbm5ldC9pcHY0L3RjcF9hby5jLTEwNzAtXFx0ICovXFxuLS1cXG5uZXQvaXB2NC90Y3BfYW8uYz0xNzQ2PXN0YXRpYyBpbnQgdGNwX2FvX2RlbGV0ZV9rZXkoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGNwX2FvX2luZm8gKmFvX2luZm8sXFxuLS1cXG5uZXQvaXB2NC90Y3BfYW8uYy0xNzk5LSNkZWZpbmUgVENQX0FPX0RFTF9LRVlGX0FMTCAoVENQX0FPX0tFWUZfSUZJTkRFWClcXG5uZXQvaXB2NC90Y3BfYW8uYzoxODAwOnN0YXRpYyBpbnQgdGNwX2FvX2RlbF9jbWQoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBzaG9ydCBpbnQgZmFtaWx5LFxcbm5ldC9pcHY0L3RjcF9hby5jLTE4MDEtXFx0XFx0XFx0ICBzb2NrcHRyX3Qgb3B0dmFsLCBpbnQgb3B0bGVuKVxcbi0tXFxubmV0L2lwdjQvdGNwX2FvLmM9MjAzOD1pbnQgdGNwX3BhcnNlX2FvKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgdW5zaWduZWQgc2hvcnQgaW50IGZhbWlseSxcXG4tLVxcbm5ldC9pcHY0L3RjcF9hby5jLTIwNDctXFx0Y2FzZSBUQ1BfQU9fREVMX0tFWTpcXG5uZXQvaXB2NC90Y3BfYW8uYzoyMDQ4OlxcdFxcdHJldHVybiB0Y3BfYW9fZGVsX2NtZChzaywgZmFtaWx5LCBvcHR2YWwsIG9wdGxlbik7XFxubmV0L2lwdjQvdGNwX2FvLmMtMjA0OS1cXHRjYXNlIFRDUF9BT19JTkZPOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNTo1Njo0OC40MTE3NTkyODZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MjAyNzY5ODA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVENQIEF1dGhlbnRpY2F0aW9uIE9wdGlvbiAoVENQLUFPKSBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGludG8gdGhlIFRDUC1BTyBmdW5jdGlvbmFsaXR5LCBzcGVjaWZpY2FsbHkgaG93IGtleSBkZWxldGlvbiBpcyBoYW5kbGVkLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhlIGB0Y3BfYW9fZGVsX2NtZGAgZnVuY3Rpb24gaXMgdGhlIG9uZSByZXNwb25zaWJsZSBmb3IgdGhlIGFjdHVhbCBkZWxldGlvbiBvZiBrZXlzLiBUaGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGZyb20gYHRjcF9wYXJzZV9hb2Agd2hlbiB0aGUgYFRDUF9BT19ERUxfS0VZYCBvcHRpb24gaXMgcmVjZWl2ZWQuXG5cbk5vdywgd2hlcmUgZG9lcyBgdGNwX3BhcnNlX2FvYCBmaXQgaW50byBhbGwgdGhpcz8gQWgsIHJpZ2h0LCB0aGF0J3MgY2FsbGVkIGZyb20gYGRvX3RjcF9zZXRzb2Nrb3B0YC4gQW5kIGBkb190Y3Bfc2V0c29ja29wdGAgc2VlbXMgdG8gYmUgdGhlIGNlbnRyYWwgcG9pbnQgZm9yIGhhbmRsaW5nIGFsbCB0aGUgdmFyaW91cyBUQ1AtQU8gb3BlcmF0aW9ucyDigJMgYWRkaW5nLCBkZWxldGluZywgZ2V0dGluZyBpbmZvcm1hdGlvbiwgYW5kIHNvIG9uLiBXZSBzZWUgdGhhdCBgdGNwX3BhcnNlX2FvYCBpcyBpbmRlZWQgY2FsbGVkIGZvciBhbGwgb2YgdGhvc2U6IGBUQ1BfQU9fQUREX0tFWWAsIGBUQ1BfQU9fREVMX0tFWWAsIGBUQ1BfQU9fSU5GT2AsIGFuZCBwcm9iYWJseSBvdGhlcnMgdG9vLlxuXG5UaGVyZWZvcmUsIHRoZSBvYnZpb3VzIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIGB0Y3BfcGFyc2VfYW9gIGFuZCBgZG9fdGNwX3NldHNvY2tvcHRgIG1vcmUgY2xvc2VseSB0byBncmFzcCB0aGUgb3ZlcmFsbCB3b3JrZmxvdyBhbmQgaG93IHRoaXMga2V5IGRlbGV0aW9uIGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBUQ1AtQU8gY29uZmlndXJhdGlvbiBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NjEyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE1OjU2OjU2LjYxNDUzMTUxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMzAyNDU5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y3BfcGFyc2VfYW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvdGNwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE1OjU2OjU2LjY2Nzg0MTc3OVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NzkxMTM2MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlOlxuXG4qKkludmVzdGlnYXRpbmcgYHRjcF9wYXJzZV9hb2AqKlxuXG5Pa2F5LCBzbyBJIHNlZSBgdGNwX3BhcnNlX2FvYCBpcyB0dWNrZWQgYXdheSBpbiBgbmV0L2lwdjQvdGNwX2FvLmNgLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGJ1dCBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSAqdXNlZCouIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSBjYWxsIGdyYXBoIHRvIHNlZSB3aGVyZSB0aGUgZnVuY3Rpb24gaXMgYmVpbmcgaW52b2tlZC4gVW5kZXJzdGFuZGluZyBpdHMgY2FsbCBzaXRlcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgcGljdHVyZSBvZiBpdHMgZnVuY3Rpb24gYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIG92ZXJhbGwgbmV0d29yayBzdGFjay4gVGhpcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCBpdHMgcm9sZS4gS25vd2luZyB0aGUgY29udGV4dCBvZiBpdHMgY2FsbHMgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgaXRzIHB1cnBvc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwMjAsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNTo1NzowMC40NDY5NTc5NTFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYzMzA1NzMzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y3BfcGFyc2VfYW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L3RjcF9hby5oPTE5Nj1pbnQgdGNwX2FvX2hhc2hfc2tiKHVuc2lnbmVkIHNob3J0IGludCBmYW1pbHksXFxuLS1cXG5pbmNsdWRlL25ldC90Y3BfYW8uaC0xOTktXFx0XFx0ICAgIGNvbnN0IHU4ICp0a2V5LCBpbnQgaGFzaF9vZmZzZXQsIHUzMiBzbmUpO1xcbmluY2x1ZGUvbmV0L3RjcF9hby5oOjIwMDppbnQgdGNwX3BhcnNlX2FvKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgdW5zaWduZWQgc2hvcnQgaW50IGZhbWlseSxcXG5pbmNsdWRlL25ldC90Y3BfYW8uaC0yMDEtXFx0XFx0IHNvY2twdHJfdCBvcHR2YWwsIGludCBvcHRsZW4pO1xcbi0tXFxubmV0L2lwdjQvdGNwX2FvLmM9MTk0OT1zdGF0aWMgaW50IHRjcF9hb19pbmZvX2NtZChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIHNob3J0IGludCBmYW1pbHksXFxuLS1cXG5uZXQvaXB2NC90Y3BfYW8uYy0yMDM3LVxcbm5ldC9pcHY0L3RjcF9hby5jOjIwMzg6aW50IHRjcF9wYXJzZV9hbyhzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHVuc2lnbmVkIHNob3J0IGludCBmYW1pbHksXFxubmV0L2lwdjQvdGNwX2FvLmMtMjAzOS1cXHRcXHQgc29ja3B0cl90IG9wdHZhbCwgaW50IG9wdGxlbilcXG4tLVxcbm5ldC9pcHY0L3RjcF9hby5jPTIwNTc9aW50IHRjcF92NF9wYXJzZV9hbyhzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHNvY2twdHJfdCBvcHR2YWwsIGludCBvcHRsZW4pXFxubmV0L2lwdjQvdGNwX2FvLmMtMjA1OC17XFxubmV0L2lwdjQvdGNwX2FvLmM6MjA1OTpcXHRyZXR1cm4gdGNwX3BhcnNlX2FvKHNrLCBjbWQsIEFGX0lORVQsIG9wdHZhbCwgb3B0bGVuKTtcXG5uZXQvaXB2NC90Y3BfYW8uYy0yMDYwLX1cXG4tLVxcbm5ldC9pcHY2L3RjcF9hby5jPTEyNz1pbnQgdGNwX3Y2X3BhcnNlX2FvKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCxcXG4tLVxcbm5ldC9pcHY2L3RjcF9hby5jLTEyOS17XFxubmV0L2lwdjYvdGNwX2FvLmM6MTMwOlxcdHJldHVybiB0Y3BfcGFyc2VfYW8oc2ssIGNtZCwgQUZfSU5FVDYsIG9wdHZhbCwgb3B0bGVuKTtcXG5uZXQvaXB2Ni90Y3BfYW8uYy0xMzEtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNTo1NzowMi4wODAwMjMzMVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNTYyNzU2NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIGV4cGVydCBzdW1tYXJ5OlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgYHRjcF9wYXJzZV9hb2AgZnVuY3Rpb25zKipcblxuUmlnaHQsIHNvIGB0Y3BfdjRfcGFyc2VfYW9gIGFuZCBgdGNwX3Y2X3BhcnNlX2FvYC4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEl0J3MgYWx3YXlzIGEgZ29vZCBwcmFjdGljZSwgYW5kIGEgZmlyc3Qgc3RlcCBpbiBhbmFseXNpcywgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBncmFwaCBvZiB0aGVzZSBmdW5jdGlvbnMuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhlc2Ugc3BlY2lmaWMgZnVuY3Rpb25zIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHRzIGluIHdoaWNoIHRoZXkncmUgYmVpbmcgaW52b2tlZC4gS25vd2luZyB0aGUgY2FsbGluZyBmdW5jdGlvbnMgZ2l2ZXMgaW1tZWRpYXRlIGNvbnRleHQsIGFuZCBsZXRzIG1lIHVuZGVyc3RhbmQgd2hhdCdzIHRyaWdnZXJpbmcgdGhlc2UgcGFyc2luZyByb3V0aW5lcy4gVGhpcyBpcyBnb2luZyB0byBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUgaGVyZS4gTGV0J3Mgc2VlIHdoZXJlIHRoZXkncmUgYmVpbmcgKmNhbGxlZCogZnJvbS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODcwMywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE1OjU3OjA2LjMzNjMwMTYxN1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcxNjM5NTc2NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y3BfdjRfcGFyc2VfYW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L3RjcF9hby5oPTIzMD1pbnQgdGNwX2FvX3ByZXBhcmVfcmVzZXQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuaW5jbHVkZS9uZXQvdGNwX2FvLmgtMjM1LS8qIGlwdjQgc3BlY2lmaWMgZnVuY3Rpb25zICovXFxuaW5jbHVkZS9uZXQvdGNwX2FvLmg6MjM2OmludCB0Y3BfdjRfcGFyc2VfYW8oc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCBzb2NrcHRyX3Qgb3B0dmFsLCBpbnQgb3B0bGVuKTtcXG5pbmNsdWRlL25ldC90Y3BfYW8uaC0yMzctc3RydWN0IHRjcF9hb19rZXkgKnRjcF92NF9hb19sb29rdXAoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqYWRkcl9zayxcXG4tLVxcbm5ldC9pcHY0L3RjcF9hby5jPTIwMzg9aW50IHRjcF9wYXJzZV9hbyhzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHVuc2lnbmVkIHNob3J0IGludCBmYW1pbHksXFxuLS1cXG5uZXQvaXB2NC90Y3BfYW8uYy0yMDU2LVxcbm5ldC9pcHY0L3RjcF9hby5jOjIwNTc6aW50IHRjcF92NF9wYXJzZV9hbyhzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHNvY2twdHJfdCBvcHR2YWwsIGludCBvcHRsZW4pXFxubmV0L2lwdjQvdGNwX2FvLmMtMjA1OC17XFxuLS1cXG5uZXQvaXB2NC90Y3BfaXB2NC5jPTIzNzE9c3RhdGljIGNvbnN0IHN0cnVjdCB0Y3Bfc29ja19hZl9vcHMgdGNwX3NvY2tfaXB2NF9zcGVjaWZpYyA9IHtcXG4tLVxcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMjM3OS1cXHQuY2FsY19hb19oYXNoXFx0XFx0PSB0Y3BfdjRfYW9faGFzaF9za2IsXFxubmV0L2lwdjQvdGNwX2lwdjQuYzoyMzgwOlxcdC5hb19wYXJzZVxcdFxcdD0gdGNwX3Y0X3BhcnNlX2FvLFxcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMjM4MS1cXHQuYW9fY2FsY19rZXlfc2tcXHRcXHQ9IHRjcF92NF9hb19jYWxjX2tleV9zayxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTU6NTc6MDguMDUyNzA2NDQ0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMTIxODM1MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTmF2aWdhdGluZyB0aGUgVENQIFNvY2tldCBPcGVyYXRpb25zKipcblxuUmlnaHQsIHNvIHdlJ3JlIGxvb2tpbmcgYXQgYSBwaWVjZSBvZiBjb2RlIHJlbGF0ZWQgdG8gVENQIHNvY2tldCBvcGVyYXRpb25zIOKAkyBzcGVjaWZpY2FsbHksIGl0J3Mgc29tZXRoaW5nIHdpdGhpbiB0aGUgYHRjcF9zb2NrX2FmX29wc2Agc3RydWN0dXJlLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gZGlnIGludG8gdGhlIGFkZHJlc3MgZmFtaWx5LXNwZWNpZmljIHBhcnNpbmcgZnVuY3Rpb25zLiBHaXZlbiB0aGF0IGNvbnRleHQsIEknbSBwcmV0dHkgc3VyZSBgYW9fcGFyc2VgIGlzIHRoZSByZWxldmFudCBmdW5jdGlvbiB0byBpbnZlc3RpZ2F0ZS4gSXQncyBhbG1vc3QgY2VydGFpbmx5IGZvdW5kIHdpdGhpbiBgbmV0L2lwdjQvdGNwLmNgLCB3aGljaCBpcyB0aGUgdHlwaWNhbCBsb2NhdGlvbiBmb3IgSVB2NCBUQ1AgaGFuZGxpbmcgd2l0aGluIHRoZSBrZXJuZWwuIExldCBtZSBwdWxsIHRoYXQgdXAgYW5kIHNlZSB3aGF0IHdlJ3JlIHdvcmtpbmcgd2l0aC4gSSBleHBlY3QgaXQgdG8gZGVhbCB3aXRoIGFueSBhZGRyZXNzLXJlbGF0ZWQgcGFyc2luZyBhbmQgaGFuZGxpbmcuIFRoaXMgaXMgcHJvYmFibHkgdGhlIGVudHJ5IHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIHRoZSBzb2NrZXQncyBiZWhhdmlvciBpbiBxdWVzdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTM2MiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE1OjU3OjEyLjM2NDg5MzczOVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg5MjU0NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYW9fcGFyc2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvdGNwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvdGNwLmM9MzgzOD1pbnQgZG9fdGNwX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbi0tXFxubmV0L2lwdjQvdGNwLmMtNDA3OS1cXHRcXHRpZiAoKDEgXFx1MDAzY1xcdTAwM2Mgc2stXFx1MDAzZXNrX3N0YXRlKSBcXHUwMDI2IChUQ1BGX0xJU1RFTiB8IFRDUEZfQ0xPU0UpKVxcbm5ldC9pcHY0L3RjcC5jOjQwODA6XFx0XFx0XFx0Z290byBhb19wYXJzZTtcXG5uZXQvaXB2NC90Y3AuYy00MDgxLVxcdFxcdGlmIChyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHRjcF9zayhzayktXFx1MDAzZWFvX2luZm8sXFxubmV0L2lwdjQvdGNwLmMtNDA4Mi1cXHRcXHRcXHRcXHRcXHQgICAgICBsb2NrZGVwX3NvY2tfaXNfaGVsZChzaykpKVxcbm5ldC9pcHY0L3RjcC5jOjQwODM6XFx0XFx0XFx0Z290byBhb19wYXJzZTtcXG5uZXQvaXB2NC90Y3AuYy00MDg0LVxcdFxcdGlmICh0cC1cXHUwMDNlcmVwYWlyKVxcbm5ldC9pcHY0L3RjcC5jOjQwODU6XFx0XFx0XFx0Z290byBhb19wYXJzZTtcXG5uZXQvaXB2NC90Y3AuYy00MDg2LVxcdFxcdGVyciA9IC1FSVNDT05OO1xcbm5ldC9pcHY0L3RjcC5jLTQwODctXFx0XFx0YnJlYWs7XFxubmV0L2lwdjQvdGNwLmM6NDA4ODphb19wYXJzZTpcXG5uZXQvaXB2NC90Y3AuYzo0MDg5OlxcdFxcdGVyciA9IHRwLVxcdTAwM2VhZl9zcGVjaWZpYy1cXHUwMDNlYW9fcGFyc2Uoc2ssIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTtcXG5uZXQvaXB2NC90Y3AuYy00MDkwLVxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNTo1NzoxMi40MTM4MjU2MDdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTU5OTA4OTI2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRDUC1BTzogQSBXb3J0aHdoaWxlIEVuZGVhdm9yKipcblxuT2theSwgc28gSSBzZWUgdGhpcyBwYXRjaCBhbmQgaXQncyBkZWFsaW5nIHdpdGggYHNldHNvY2tvcHRgIGFuZCBUQ1AtQU8sIHNwZWNpZmljYWxseSwgaXQgaW52b2x2ZXMgYHNldHNvY2tvcHQoLi4uLCBJUFBST1RPX1RDUCwgVENQX0FPX0RFTF9LRVksIC4uLilgIOKAkyB0aGF0J3MgYWNjZXNzaWJsZSwgd2hpY2ggcGlxdWVzIG15IGludGVyZXN0IGltbWVkaWF0ZWx5LiBUaGlzIHBhdGNoIGFkZHJlc3NlcyBhIGJ1ZyB3aGVyZSBgY21kLmlmaW5kZXhgIHdhc24ndCBiZWluZyBjb3JyZWN0bHkgYXNzaWduZWQgdG8gYGwzaW5kZXhgIHdoZW4gYFRDUF9BT19LRVlGX0lGSU5ERVhgIHdhcyBmbGFnZ2VkIGluIGBjbWQua2V5ZmxhZ3NgLiBGdW5jdGlvbmFsbHksIHRoaXMgaXMgYSBjaGFuZ2UgdG8gaG93IFRDUC1BTyBpcyBoYW5kbGVkIHdpdGhpbiBgc2V0c29ja29wdGAuIFRDUC1BTyBpdHNlbGYgaXMgYSBjb3JlIG5ldHdvcmtpbmcgZmVhdHVyZSwgbm8gZG91YnQuIFRoZSBxdWVzdGlvbiBpczogaXMgdGhpcyBmdXp6YWJsZT8gQWJzb2x1dGVseS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiBhIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29tcG9uZW50LiBUaGUgcG90ZW50aWFsIGltcGFjdCBpcyBzaWduaWZpY2FudCwgYW5kIHRoZSBhdHRhY2sgc3VyZmFjZSBpcyBhY2Nlc3NpYmxlLiBOb3csIEkgbmVlZCB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFzc29jaWF0ZWQgd2l0aCBUQ1AtQU8gdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgcG90ZW50aWFsIHZlY3RvcnMgZm9yIGZ1enppbmcuIFRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBhIGNsb3NlciBsb29rLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5OTYyLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE1OjU3OjIyLjAxMjkxNzgzN1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg1NDE4NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFRDUF9BT1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L0tjb25maWc9NzI5PWNvbmZpZyBERUZBVUxUX1RDUF9DT05HXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTc0My1cXG5uZXQvaXB2NC9LY29uZmlnOjc0NDpjb25maWcgVENQX0FPXFxubmV0L2lwdjQvS2NvbmZpZy03NDUtXFx0Ym9vbCBcXFwiVENQOiBBdXRoZW50aWNhdGlvbiBPcHRpb24gKFJGQzU5MjUpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNTo1NzoyMi4wNjE0NjYyMTVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIwODgyMjkyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHF1aWNrIHJ1bmRvd24gb2Ygd2hhdCBJJ20gdGhpbmtpbmcgYWJvdXQgcmVsYXRlZCB0byB0aGlzIFRDUCBhbmFseXNpczpcblxuKipUQ1BfQU8gQ29uZmlndXJhdGlvbiBFeGFtaW5hdGlvbioqXG5cblJpZ2h0LCBzbyB3ZSdyZSBkZWFsaW5nIHdpdGggYFRDUF9BT2AgYXMgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIOKAkyB0aGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gZGlnIGludG8gaG93IHRoaXMgaXMgaW1wbGVtZW50ZWQuIE15IGluaXRpYWwgZm9jdXMgaXMgZ29pbmcgdG8gYmUgb24gYSBjb3VwbGUgb2Yga2V5IHN5bWJvbHM6IGB0Y3BfYW9fZGVsX2NtZGAgYW5kIGB0Y3BfcGFyc2VfYW9gLiBUaGV5IHNlZW0gbGlrZSBsb2dpY2FsIHBsYWNlcyB0byBzdGFydCBwb2tpbmcgYXJvdW5kIHRvIHVuZGVyc3RhbmQgaG93IEFPIChBdXRoZW50aWNhdGVkIE9wdGlvbnMsIEknbSBndWVzc2luZz8pIGlzIGhhbmRsZWQuXG5cbk9rYXksIGB0Y3BfYW9fZGVsX2NtZGAgaXMgc3RhdGljLCB3aGljaCBpcyBmaW5lLCBidXQgbm90IGlkZWFsIGZvciBkZWVwZXIgaW50cm9zcGVjdGlvbi4gTm93LCBgdGNwX3BhcnNlX2FvYCBpcyB0aGUgaW50ZXJlc3Rpbmcgb25lOyBpdCdzICpub3QqIHN0YXRpYywgc28gSSBjYW4gcHJvYmFibHkgZ2V0IGF0IG1vcmUgZGV0YWlscyBhYm91dCBob3cgaXQncyB1c2VkLiBJJ2xsIG5lZWQgdG8gY2hlY2sgaXRzIGZ1bmN0aW9uIHNpZ25hdHVyZSB0byBzZWUgd2hhdCB0aGUgaW5wdXRzIGFyZSwgd2hhdCBpdCByZXR1cm5zLCBhbmQgZ2V0IGFuIGlkZWEgb2Ygd2hlcmUgdG8gZ28gbmV4dC4gVW5kZXJzdGFuZGluZyB0aGF0IHNpZ25hdHVyZSB3aWxsIHJlYWxseSBoZWxwIG1lIHplcm8gaW4gb24gd2hlcmUgdGhlIHJlbGV2YW50IGNvZGUgcGF0aHMgYXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDQ0MSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE1OjU3OjI2LjI3MDI5MjM0NFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg3NjQ4ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50IHRjcF9wYXJzZV9hb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC90Y3BfYW8uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC90Y3BfYW8uYz0xOTQ5PXN0YXRpYyBpbnQgdGNwX2FvX2luZm9fY21kKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgc2hvcnQgaW50IGZhbWlseSxcXG4tLVxcbm5ldC9pcHY0L3RjcF9hby5jLTIwMzctXFxubmV0L2lwdjQvdGNwX2FvLmM6MjAzODppbnQgdGNwX3BhcnNlX2FvKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgdW5zaWduZWQgc2hvcnQgaW50IGZhbWlseSxcXG5uZXQvaXB2NC90Y3BfYW8uYy0yMDM5LVxcdFxcdCBzb2NrcHRyX3Qgb3B0dmFsLCBpbnQgb3B0bGVuKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNTo1NzoyNi4zMTkwNjIxNzJaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDgxOTMyMTM1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHF1aWNrIHJ1bmRvd24gb2Ygd2hhdCBJJ20gdGhpbmtpbmcgYWJvdXQgcmVsYXRlZCB0byB0aGlzIFRDUCBwYXJzaW5nIGNvZGUsIGtlZXBpbmcgaW4gbWluZCBteSBleHBlcnRpc2U6XG5cbioqVENQIFN5bWJvbCBBbmFseXNpcyAtIEZvY3VzIG9uIEFPIEZ1bmN0aW9ucyoqXG5cblJpZ2h0LCBzbyBgdGNwX3BhcnNlX2FvYCBzZWVtcyBsaWtlIGEgc29saWQgY2FuZGlkYXRlIGZvciBhIGtleSBzeW1ib2wsIGEgZ29vZCBmb2NhbCBwb2ludCBmb3IgYW5hbHlzaXMgaW4gdGhpcyBhcmVhIG9mIHRoZSBjb2RlLiBCdXQsIGdpdmVuIHRoYXQgd2UncmUgdGFsa2luZyBhYm91dCBUQ1AsIEkgc2hvdWxkIGFsc28gY29uc2lkZXIgaXRzIElQdjQgYW5kIElQdjYgdmFyaWFudHMsIHdoaWNoIHdvdWxkIGJlIGB0Y3BfdjRfcGFyc2VfYW9gIGFuZCBgdGNwX3Y2X3BhcnNlX2FvYC4gVGhvc2UgYXJlIGRlZmluaXRlbHkgd29ydGggaW52ZXN0aWdhdGluZyBhcyB3ZWxsLlxuXG5Ob3csIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBhZG1pbmlzdHJhdGl2ZSBjb21tYW5kcy4gSSB3YW50IHRvIHNlZSBpZiBgdGNwX2FvX2RlbF9jbWRgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBZZXAsIGl0IGlzLiBUaGF0IGluZm9ybWF0aW9uIGlzIGdvaW5nIHRvIGNvbWUgaW4gaGFuZHkgbGF0ZXIuIEdvb2QsIHRoYXQncyBvbmUgbGVzcyB2YXJpYWJsZSB0byB3b3JyeSBhYm91dC5cblxuTm93LCBsZXQncyBzZWUgd2hhdCBvdGhlciByZWxhdGVkIGZ1bmN0aW9ucyBhcmUgaW4gcGxheS4gSSdsbCBuZWVkIHRvIGV4cGFuZCBteSBzZWFyY2ggdG8gaWRlbnRpZnkgYW55IG90aGVyIHJlbGV2YW50IGZ1bmN0aW9ucyBhcm91bmQgdGhlc2UgdG8gZ2V0IGEgZnVsbCBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDkyMywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE1OjU3OjMxLjEzODM4NjQ5MloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQyNTc4NDA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjcF9hb19kZWxfY21kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L3RjcF9hby5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L3RjcF9hby5jPTk5MD10Y3BfaW5ib3VuZF9hb19oYXNoKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY0L3RjcF9hby5jLTEwNTUtXFx0XFx0XFx0aWYgKGtleSlcXG5uZXQvaXB2NC90Y3BfYW8uYzoxMDU2OlxcdFxcdFxcdFxcdC8qIHBhaXJzIHdpdGggdGNwX2FvX2RlbF9jbWQgKi9cXG5uZXQvaXB2NC90Y3BfYW8uYy0xMDU3LVxcdFxcdFxcdFxcdFdSSVRFX09OQ0UoaW5mby1cXHUwMDNlY3VycmVudF9rZXksIGtleSk7XFxuLS1cXG5uZXQvaXB2NC90Y3BfYW8uYy0xMDY4LVxcdCAqIC0gcmVxdWVzdCBzb2NrZXRzIHdvdWxkIHJhY2Ugb24gdGhvc2Uga2V5IHBvaW50ZXJzXFxubmV0L2lwdjQvdGNwX2FvLmM6MTA2OTpcXHQgKiAtIHRjcF9hb19kZWxfY21kKCkgYWxsb3dzIGFzeW5jIGtleSByZW1vdmFsXFxubmV0L2lwdjQvdGNwX2FvLmMtMTA3MC1cXHQgKi9cXG4tLVxcbm5ldC9pcHY0L3RjcF9hby5jPTE3NDY9c3RhdGljIGludCB0Y3BfYW9fZGVsZXRlX2tleShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0Y3BfYW9faW5mbyAqYW9faW5mbyxcXG4tLVxcbm5ldC9pcHY0L3RjcF9hby5jLTE3OTktI2RlZmluZSBUQ1BfQU9fREVMX0tFWUZfQUxMIChUQ1BfQU9fS0VZRl9JRklOREVYKVxcbm5ldC9pcHY0L3RjcF9hby5jOjE4MDA6c3RhdGljIGludCB0Y3BfYW9fZGVsX2NtZChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIHNob3J0IGludCBmYW1pbHksXFxubmV0L2lwdjQvdGNwX2FvLmMtMTgwMS1cXHRcXHRcXHQgIHNvY2twdHJfdCBvcHR2YWwsIGludCBvcHRsZW4pXFxuLS1cXG5uZXQvaXB2NC90Y3BfYW8uYz0yMDM4PWludCB0Y3BfcGFyc2VfYW8oc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCB1bnNpZ25lZCBzaG9ydCBpbnQgZmFtaWx5LFxcbi0tXFxubmV0L2lwdjQvdGNwX2FvLmMtMjA0Ny1cXHRjYXNlIFRDUF9BT19ERUxfS0VZOlxcbm5ldC9pcHY0L3RjcF9hby5jOjIwNDg6XFx0XFx0cmV0dXJuIHRjcF9hb19kZWxfY21kKHNrLCBmYW1pbHksIG9wdHZhbCwgb3B0bGVuKTtcXG5uZXQvaXB2NC90Y3BfYW8uYy0yMDQ5LVxcdGNhc2UgVENQX0FPX0lORk86XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE1OjU3OjMxLjU4MDk3NDY4OFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Njc2ODA2NzU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFBsYW4gZm9yIFBhcnNpbmcgVENQIEF1dGhlbnRpY2F0aW9uIE9wdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gZ29pbmcgdG8gYWRkIHRoZSBmdW5jdGlvbnMgYHRjcF9wYXJzZV9hb2AsIGB0Y3BfdjRfcGFyc2VfYW9gLCBhbmQgYHRjcF92Nl9wYXJzZV9hb2AgdG8gdGhlIGBGb2N1c1N5bWJvbHNgIGxpc3QuIFRoaXMgaXMgYSBjcml0aWNhbCBzdGVwIGluIGdldHRpbmcgbXkgYXV0aGVudGljYXRpb24gb3B0aW9uIHBhcnNpbmcgd29ya2luZyBjb3JyZWN0bHksIGFuZCBJIHdhbnQgdG8gYmUgc3VyZSBpdCdzIGFjY2Vzc2libGUgYW5kIHRyYWNrZWQgcHJvcGVybHkuIE5vdywgYmVmb3JlIEkgZ2V0IHRvbyBmYXIsIEkgbmVlZCB0byB2ZXJpZnkgd2hhdCwgaWYgYW55dGhpbmcsIHRoaXMgYFRDUF9BT2AgZmVhdHVyZSByZWxpZXMgb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIuIEdvdHRhIG1ha2Ugc3VyZSBJJ20gbm90IG92ZXJsb29raW5nIHNvbWV0aGluZyBmdW5kYW1lbnRhbC4gVGhpcyBpbml0aWFsIGRlcGVuZGVuY3kgY2hlY2sgaXMga2V5IHRvIGF2b2lkaW5nIGhlYWRhY2hlcyBkb3duIHRoZSBsaW5lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTc2NSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE1OjU3OjM2LjI1Nzc4NDAxM1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcwODc0MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFRDUF9BT1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L0tjb25maWc9NzI5PWNvbmZpZyBERUZBVUxUX1RDUF9DT05HXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTc0My1cXG5uZXQvaXB2NC9LY29uZmlnOjc0NDpjb25maWcgVENQX0FPXFxubmV0L2lwdjQvS2NvbmZpZy03NDUtXFx0Ym9vbCBcXFwiVENQOiBBdXRoZW50aWNhdGlvbiBPcHRpb24gKFJGQzU5MjUpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNTo1NzozNi4zMDQ4NzcyNzJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU5MDYzMDM2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gcmVhZGluZyBhbmQgcHJvY2Vzc2luZyB0aGUgYG5ldC9pcHY0L0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBjb25maWcgVENQX0FPYCBzZXR0aW5nOlxuXG4qKkFuYWx5emluZyB0aGUgS2NvbmZpZyBmb3IgVENQX0FPKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgS2NvbmZpZyBmaWxlLCBmb2N1c2luZyBvbiB0aGUgYFRDUF9BT2AgY29uZmlndXJhdGlvbiBvcHRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgc2V0dGluZ3MsIGFuZCB3aGVyZSBpdCBmaXRzIGluIHRoZSBicm9hZGVyIG5ldHdvcmsgc3RhY2sgY29uZmlndXJhdGlvbi4gRmlyc3QsIEkgd2FudCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIGRlcGVuZGVuY2llcyDigJMgZG9lcyBpdCByZWx5IG9uIG90aGVyIGZlYXR1cmVzIGJlaW5nIGVuYWJsZWQsIGxpa2UgSVBzZWMgb3Igc3BlY2lmaWMgY3J5cHRvZ3JhcGhpYyBtb2R1bGVzPyBBcmUgdGhlcmUgYW55IGFzc29jaWF0ZWQgc3ltYm9scyB0aGF0IHdvdWxkIGluZmx1ZW5jZSB3aGV0aGVyIHRoaXMgZ2V0cyBidWlsdD8gVGhlIGBLY29uZmlnYCBmaWxlcyBnZW5lcmFsbHkgbWFwIGRpcmVjdGx5IHRvIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IEkgY2FuIGVuYWJsZS9kaXNhYmxlLCBzbyBJJ20gc2Nhbm5pbmcgZm9yIGNsdWVzIGFib3V0IGhvdyB0aGUgbWFpbnRhaW5lcnMgZGVzaWduZWQgdGhpcy4gSSdtIGFsc28gbG9va2luZyBmb3IgYW55IGNvbW1lbnRzIG9yIGRvY3VtZW50YXRpb24gd2l0aGluIHRoZSBmaWxlIGl0c2VsZi4gVGhvc2Uga2luZHMgb2YgY2x1ZXMgYXJlIGdvaW5nIHRvIHRlbGwgbWUgd2hhdCB0aGUgZGVzaWduIGludGVudGlvbnMgYXJlLiBJcyB0aGlzIG9wdGlvbiBleHBlcmltZW50YWwsIG1hdHVyZSwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMDg1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTU6NTc6NDAuODk1NTA5OTNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM0MjUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNzQwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzQwOlxcdFxcdGRlZmF1bHQgXFxcImNkZ1xcXCIgaWYgREVGQVVMVF9DREdcXG4gNzQxOlxcdFxcdGRlZmF1bHQgXFxcImJiclxcXCIgaWYgREVGQVVMVF9CQlJcXG4gNzQyOlxcdFxcdGRlZmF1bHQgXFxcImN1YmljXFxcIlxcbiA3NDM6XFx0XFxuIDc0NDpcXHRjb25maWcgVENQX0FPXFxuIDc0NTpcXHRcXHRib29sIFxcXCJUQ1A6IEF1dGhlbnRpY2F0aW9uIE9wdGlvbiAoUkZDNTkyNSlcXFwiXFxuIDc0NjpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9BRVNfQ0JDX01BQ1NcXG4gNzQ3OlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX1NIQTFcXG4gNzQ4OlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX1NIQTI1NlxcbiA3NDk6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfVVRJTFNcXG4gNzUwOlxcdFxcdGRlcGVuZHMgb24gNjRCSVQgIyBzZXEtbnVtYmVyIGV4dGVuc2lvbiBuZWVkcyBXUklURV9PTkNFKHU2NClcXG4gNzUxOlxcdFxcdGhlbHBcXG4gNzUyOlxcdFxcdCAgVENQLUFPIHNwZWNpZmllcyB0aGUgdXNlIG9mIHN0cm9uZ2VyIE1lc3NhZ2UgQXV0aGVudGljYXRpb24gQ29kZXMgKE1BQ3MpLFxcbiA3NTM6XFx0XFx0ICBwcm90ZWN0cyBhZ2FpbnN0IHJlcGxheXMgZm9yIGxvbmctbGl2ZWQgVENQIGNvbm5lY3Rpb25zLCBhbmRcXG4gNzU0OlxcdFxcdCAgcHJvdmlkZXMgbW9yZSBkZXRhaWxzIG9uIHRoZSBhc3NvY2lhdGlvbiBvZiBzZWN1cml0eSB3aXRoIFRDUFxcbiA3NTU6XFx0XFx0ICBjb25uZWN0aW9ucyB0aGFuIFRDUCBNRDUgKFNlZSBSRkM1OTI1KVxcbiA3NTY6XFx0XFxuIDc1NzpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDc1ODpcXHRcXG4gNzU5OlxcdGNvbmZpZyBUQ1BfTUQ1U0lHXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE1OjU3OjQwLjg5NTk0NjQxWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNzIwOTQzOTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFRDUC1BTyBDb25maWd1cmF0aW9uIGFuZCBUZXN0IFN0cmF0ZWd5KipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBjb250aW5nZW50IG9uIGA2NEJJVGAsIHdoaWNoIGlzIGV4cGVjdGVkLiBUaGUgY29yZSByZXF1aXJlbWVudCBoZXJlIGlzIGBUQ1BfQU9gLCBhbmQgdGhhdCdzIHRoZSBvbmx5IGltbWVkaWF0ZSBjb25maWd1cmF0aW9uIG5lZWRlZCwgd2hpY2ggaXMgZ29vZC5cblxuTGV0J3MgZG8gYSBxdWljayBkb3VibGUtY2hlY2sgZm9yIGFueXRoaW5nIGVsc2UgbHVya2luZyBhcm91bmQuIFRoZSBzZWxmdGVzdCBoaW50cyBhdCBgS0NPTkZJR19ORVRfVlJGYCwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgVlJGIGlzIHJlbGV2YW50IHRvIHNwZWNpZmljYWxseSB0ZXN0IHRoaXMgbmV3IGZ1bmN0aW9uYWxpdHkuXG5cbkxvb2tpbmcgYXQgdGhlIGNvZGUgZGlmZjpcbmBgYGNcbiBcdGlmIChjbWQuaWZpbmRleCBcdTAwMjZcdTAwMjYgIShjbWQua2V5ZmxhZ3MgXHUwMDI2IFRDUF9BT19LRVlGX0lGSU5ERVgpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbitcdGlmIChjbWQua2V5ZmxhZ3MgXHUwMDI2IFRDUF9BT19LRVlGX0lGSU5ERVgpXG4rXHRcdGwzaW5kZXggPSBjbWQuaWZpbmRleDtcbitcbiBcdGFvX2luZm8gPSBzZXRzb2Nrb3B0X2FvX2luZm8oc2spO1xuIGBgYFxuSXQgc2VlbXMgdGhhdCBgY21kLmlmaW5kZXhgIGlzIHVzZWQgdG8gYXNzaWduIGEgdmFsdWUgdG8gYGwzaW5kZXhgLiBBbmQgYGwzaW5kZXhgIGlzIHVzZWQgaW4gdGhlIGtleSBtYXRjaGluZy4gVlJGIGNlcnRhaW5seSAqdXNlcyogYGwzaW5kZXhgLiBIb3dldmVyLCBgaWZpbmRleGAgY2FuIGJlICphbnkqIGludGVyZmFjZSBpbmRleCwgbm90IGp1c3QgVlJGLiBCdXQsIGBORVRfVlJGYCBtaWdodCBzdGlsbCBiZSB1c2VmdWwgdG8gZW5hYmxlIHRlc3RpbmcgVlJGLXNjb3BlZCBrZXlzIGlmIHRob3NlIGFyZSBvZiBjb25jZXJuLCBzbyBsZXQncyBhZGQgYE5FVF9WUkZgIHRvIGBFbmFibGVDb25maWdzYCBhcyBhIHByZWNhdXRpb24uXG5cbkkgc2hvdWxkIGFsc28gcXVpY2tseSBleGFtaW5lIGB0Y3BfYW9fZGVsZXRlX2tleWAsIGp1c3QgaW4gY2FzZSwgYnV0IGl0IGxvb2tzIGxpa2UgYSBzdGF0aWMgZnVuY3Rpb24uXG5cbkxldCBtZSBzdW1tYXJpemUgbXkgZmluZGluZ3MsIGluIHRoZSB0eXBpY2FsIHdheTpcbiogICBgV29ydGhGdXp6aW5nYDogVHJ1ZSDigJMgVGhpcyBsb29rcyBsaWtlIGl0J3MgYWRkcmVzc2luZyBhIGNvcmUgbmV0d29ya2luZyBidWcuXG4qICAgYEZvY3VzU3ltYm9sc2A6IGB0Y3BfcGFyc2VfYW9gLCBgdGNwX3Y0X3BhcnNlX2FvYCwgYHRjcF92Nl9wYXJzZV9hb2Ag4oCTIFNlZW1zIHJpZ2h0LiBUaG9zZSBhcmUgd2hlcmUgd2UgYXJlIHByb2Nlc3NpbmcgdGhlIG9wdGlvbi5cbiogICBgRW5hYmxlQ29uZmlnc2A6IGBUQ1BfQU9gLCBgTkVUX1ZSRmAg4oCTIFdlJ3JlIHN0YXJ0aW5nIHdpdGggYFRDUF9BT2AsIHdpdGggYE5FVF9WUkZgIGVuYWJsZWQgdG8gZXhwYW5kIHRlc3RpbmcgVlJGLXNjb3BlZCBrZXlzLlxuKiAgIGBSZWFzb25pbmdgOiBUaGUgcGF0Y2ggaGFzIGEgYnVnLWZpeCBmb3Igc2V0c29ja29wdCBpbiBUQ1AtQU8sIGRlYWxpbmcgd2l0aCB0aGUgYXNzaWdubWVudCBvZiBgY21kLmlmaW5kZXhgIHRvIGBsM2luZGV4YCB3aGVuIGRlbGV0aW5nIGEga2V5IGFuZCBmaXhlcyBhIHByb2JsZW0gd2l0aCBkZWxldGluZyBpbnRlcmZhY2Utc2NvcGVkIGtleXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JraW5nIGFyZWEsIHNvIHNob3VsZCBiZSB3b3J0aCBvdXIgYXR0ZW50aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjY3NCwiT3V0cHV0VG9rZW5zIjoxMjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNTo1Nzo1MS42MTY4OTQyOTVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzQ4MTYyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVENQX0FPXCIsXG4gICAgXCJORVRfVlJGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNwX3BhcnNlX2FvXCIsXG4gICAgXCJ0Y3BfdjRfcGFyc2VfYW9cIixcbiAgICBcInRjcF92Nl9wYXJzZV9hb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIFRDUC1BTyBzZXRzb2Nrb3B0IGhhbmRsaW5nIHdoZXJlIGBjbWQuaWZpbmRleGAgd2FzIG5vdCBhc3NpZ25lZCB0byBgbDNpbmRleGAgd2hlbiBkZWxldGluZyBhIGtleSwgcHJldmVudGluZyBkZWxldGlvbiBvZiBpbnRlcmZhY2Utc2NvcGVkIGtleXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVENQX0FPXCIsXG4gICAgXCJORVRfVlJGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNwX3BhcnNlX2FvXCIsXG4gICAgXCJ0Y3BfdjRfcGFyc2VfYW9cIixcbiAgICBcInRjcF92Nl9wYXJzZV9hb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIFRDUC1BTyBzZXRzb2Nrb3B0IGhhbmRsaW5nIHdoZXJlIGBjbWQuaWZpbmRleGAgd2FzIG5vdCBhc3NpZ25lZCB0byBgbDNpbmRleGAgd2hlbiBkZWxldGluZyBhIGtleSwgcHJldmVudGluZyBkZWxldGlvbiBvZiBpbnRlcmZhY2Utc2NvcGVkIGtleXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE1OjU3OjUxLjY5MDM4MzY1M1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzc5NjM4MTIyOTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNTo1Nzo1MS42OTA4MzQ3NzNaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6Mzc5NjMzNTc3NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIGluIGB0Y3BfYW9fZGVsX2NtZGAgd2hlcmUgdGhlIGBsM2luZGV4YCB2YXJpYWJsZSB3YXMgbm90IGJlaW5nIHBvcHVsYXRlZCBmcm9tIHRoZSB1c2VyLXByb3ZpZGVkIGBjbWQuaWZpbmRleGAgd2hlbiB0aGUgYFRDUF9BT19LRVlGX0lGSU5ERVhgIGZsYWcgd2FzIHNldC4gVGhlIGBjbWRgIHN0cnVjdHVyZSBpcyBzYWZlbHkgY29waWVkIGZyb20gdXNlcnNwYWNlIHVzaW5nIGBjb3B5X3N0cnVjdF9mcm9tX3NvY2twdHJgLCB3aGljaCBndWFyYW50ZWVzIHRoYXQgdGhlIHN0cnVjdHVyZSBpcyBmdWxseSBpbml0aWFsaXplZCAoemVyby1wYWRkZWQgaWYgdGhlIHVzZXJzcGFjZSBzdHJ1Y3R1cmUgaXMgc21hbGxlcikuIFRoZSBwYXRjaCBvbmx5IGFkZHMgYSBjb25kaXRpb25hbCBhc3NpZ25tZW50IG9mIGFuIGludGVnZXIgdmFyaWFibGUgYW5kIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDExMTdjOWZkZjhiYzA3MjRjMjAxN2IyZDU4OTcyY2NmOTc5YzMzM2FcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAyMSAxNTo1Njo0MCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9hby5jIGIvbmV0L2lwdjQvdGNwX2FvLmNcbmluZGV4IDUwOTQyNjc0NDdhZWUuLjI2ODY0NjIxZTZkZWYgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3BfYW8uY1xuKysrIGIvbmV0L2lwdjQvdGNwX2FvLmNcbkBAIC0xODM0LDYgKzE4MzQsOSBAQCBzdGF0aWMgaW50IHRjcF9hb19kZWxfY21kKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgc2hvcnQgaW50IGZhbWlseSxcbiBcdGlmIChjbWQuaWZpbmRleCBcdTAwMjZcdTAwMjYgIShjbWQua2V5ZmxhZ3MgXHUwMDI2IFRDUF9BT19LRVlGX0lGSU5ERVgpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbitcdGlmIChjbWQua2V5ZmxhZ3MgXHUwMDI2IFRDUF9BT19LRVlGX0lGSU5ERVgpXG4rXHRcdGwzaW5kZXggPSBjbWQuaWZpbmRleDtcbitcbiBcdGFvX2luZm8gPSBzZXRzb2Nrb3B0X2FvX2luZm8oc2spO1xuIFx0aWYgKElTX0VSUihhb19pbmZvKSlcbiBcdFx0cmV0dXJuIFBUUl9FUlIoYW9faW5mbyk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9rZXktbWFuYWdlbWVudC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9rZXktbWFuYWdlbWVudC5jXG5pbmRleCBkODZiYjM4MGI3OWY3Li4xZTAxZTgwNWRiYTcyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9rZXktbWFuYWdlbWVudC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2tleS1tYW5hZ2VtZW50LmNcbkBAIC02Myw3ICs2Myw4IEBAIHN0YXRpYyBpbnQgcHJlcGFyZV9sc2sodW5pb24gdGNwX2FkZHIgKmFkZHIsIHVpbnQ4X3Qgc25kaWQsIHVpbnQ4X3QgcmN2aWQpXG4gXHRyZXR1cm4gc2s7XG4gfVxuIFxuLXN0YXRpYyBpbnQgdGVzdF9kZWxfa2V5KGludCBzaywgdWludDhfdCBzbmRpZCwgdWludDhfdCByY3ZpZCwgYm9vbCBhc3luYyxcbitzdGF0aWMgaW50IHRlc3RfZGVsX2tleShpbnQgc2ssIHVpbnQ4X3Qgc25kaWQsIHVpbnQ4X3QgcmN2aWQsIGludCBpZmluZGV4LFxuK1x0XHRcdGJvb2wgYXN5bmMsXG4gXHRcdFx0aW50IGN1cnJlbnRfa2V5LCBpbnQgcm5leHRfa2V5KVxuIHtcbiBcdHN0cnVjdCB0Y3BfYW9faW5mb19vcHQgYW9faW5mbyA9IHt9O1xuQEAgLTc2LDYgKzc3LDEwIEBAIHN0YXRpYyBpbnQgdGVzdF9kZWxfa2V5KGludCBzaywgdWludDhfdCBzbmRpZCwgdWludDhfdCByY3ZpZCwgYm9vbCBhc3luYyxcbiBcdGRlbC5wcmVmaXggPSBERUZBVUxUX1RFU1RfUFJFRklYO1xuIFx0ZGVsLnNuZGlkID0gc25kaWQ7XG4gXHRkZWwucmN2aWQgPSByY3ZpZDtcbitcdGlmIChpZmluZGV4KSB7XG4rXHRcdGRlbC5rZXlmbGFncyA9IFRDUF9BT19LRVlGX0lGSU5ERVg7XG4rXHRcdGRlbC5pZmluZGV4ID0gaWZpbmRleDtcbitcdH1cbiBcbiBcdGlmIChjdXJyZW50X2tleSBcdTAwM2U9IDApIHtcbiBcdFx0ZGVsLnNldF9jdXJyZW50ID0gMTtcbkBAIC05NSw3ICsxMDAsOCBAQCBzdGF0aWMgaW50IHRlc3RfZGVsX2tleShpbnQgc2ssIHVpbnQ4X3Qgc25kaWQsIHVpbnQ4X3QgcmN2aWQsIGJvb2wgYXN5bmMsXG4gXG4gXHR0Y3BfYWRkcl90b19zb2NrYWRkcl9pbihcdTAwMjZzb2NrYWRkciwgXHUwMDI2dGhpc19pcF9kZXN0LCAwKTtcbiBcdGVyciA9IHRlc3RfZ2V0X29uZV9hbyhzaywgXHUwMDI2a2V5LCBcdTAwMjZzb2NrYWRkciwgc2l6ZW9mKHNvY2thZGRyKSxcbi1cdFx0XHQgICAgICBERUZBVUxUX1RFU1RfUFJFRklYLCBzbmRpZCwgcmN2aWQpO1xuK1x0XHRcdCAgICAgIERFRkFVTFRfVEVTVF9QUkVGSVgsIHNuZGlkLCByY3ZpZCxcbitcdFx0XHQgICAgICBkZWwua2V5ZmxhZ3MsIGRlbC5pZmluZGV4KTtcbiBcdGlmICghZXJyKVxuIFx0XHRyZXR1cm4gLUVFWElTVDtcbiBcdGlmIChlcnIgIT0gLUUyQklHKVxuQEAgLTExMiwxMiArMTE4LDEyIEBAIHN0YXRpYyBpbnQgdGVzdF9kZWxfa2V5KGludCBzaywgdWludDhfdCBzbmRpZCwgdWludDhfdCByY3ZpZCwgYm9vbCBhc3luYyxcbiB9XG4gXG4gc3RhdGljIHZvaWQgdHJ5X2RlbGV0ZV9rZXkoY2hhciAqdHN0X25hbWUsIGludCBzaywgdWludDhfdCBzbmRpZCwgdWludDhfdCByY3ZpZCxcbi1cdFx0XHQgICBib29sIGFzeW5jLCBpbnQgY3VycmVudF9rZXksIGludCBybmV4dF9rZXksXG4rXHRcdFx0ICAgaW50IGlmaW5kZXgsIGJvb2wgYXN5bmMsIGludCBjdXJyZW50X2tleSwgaW50IHJuZXh0X2tleSxcbiBcdFx0XHQgICBmYXVsdF90IGluailcbiB7XG4gXHRpbnQgZXJyO1xuIFxuLVx0ZXJyID0gdGVzdF9kZWxfa2V5KHNrLCBzbmRpZCwgcmN2aWQsIGFzeW5jLCBjdXJyZW50X2tleSwgcm5leHRfa2V5KTtcbitcdGVyciA9IHRlc3RfZGVsX2tleShzaywgc25kaWQsIHJjdmlkLCBpZmluZGV4LCBhc3luYywgY3VycmVudF9rZXksIHJuZXh0X2tleSk7XG4gXHRpZiAoKGVyciA9PSAtRUJVU1kgXHUwMDI2XHUwMDI2IGZhdWx0KEJVU1kpKSB8fCAoZXJyID09IC1FSU5WQUwgXHUwMDI2XHUwMDI2IGZhdWx0KENVUlJORVhUKSkpIHtcbiBcdFx0dGVzdF9vayhcIiVzOiBrZXkgZGVsZXRpb24gd2FzIHByZXZlbnRlZFwiLCB0c3RfbmFtZSk7XG4gXHRcdHJldHVybjtcbkBAIC0yMzYsMTUgKzI0MiwxNSBAQCBzdGF0aWMgdm9pZCBjaGVja19jbG9zZWRfc29ja2V0KHZvaWQpXG4gXHRpbnQgc2s7XG4gXG4gXHRzayA9IHByZXBhcmVfc2soXHUwMDI2dGhpc19pcF9kZXN0LCAyMDAsIDIwMCk7XG4tXHR0cnlfZGVsZXRlX2tleShcImNsb3NlZCBzb2NrZXQsIGRlbGV0ZSBhIGtleVwiLCBzaywgMjAwLCAyMDAsIDAsIC0xLCAtMSwgMCk7XG4tXHR0cnlfZGVsZXRlX2tleShcImNsb3NlZCBzb2NrZXQsIGRlbGV0ZSBhbGwga2V5c1wiLCBzaywgMTAwLCAxMDAsIDAsIC0xLCAtMSwgMCk7XG4rXHR0cnlfZGVsZXRlX2tleShcImNsb3NlZCBzb2NrZXQsIGRlbGV0ZSBhIGtleVwiLCBzaywgMjAwLCAyMDAsIDAsIDAsIC0xLCAtMSwgMCk7XG4rXHR0cnlfZGVsZXRlX2tleShcImNsb3NlZCBzb2NrZXQsIGRlbGV0ZSBhbGwga2V5c1wiLCBzaywgMTAwLCAxMDAsIDAsIDAsIC0xLCAtMSwgMCk7XG4gXHRjbG9zZShzayk7XG4gXG4gXHRzayA9IHByZXBhcmVfc2soXHUwMDI2dGhpc19pcF9kZXN0LCAyMDAsIDIwMCk7XG4gXHRpZiAodGVzdF9zZXRfa2V5KHNrLCAxMDAsIDIwMCkpXG4gXHRcdHRlc3RfZXJyb3IoXCJmYWlsZWQgdG8gc2V0IGN1cnJlbnQvcm5leHQga2V5c1wiKTtcbi1cdHRyeV9kZWxldGVfa2V5KFwiY2xvc2VkIHNvY2tldCwgZGVsZXRlIGN1cnJlbnQga2V5XCIsIHNrLCAxMDAsIDEwMCwgMCwgLTEsIC0xLCBGQVVMVF9CVVNZKTtcbi1cdHRyeV9kZWxldGVfa2V5KFwiY2xvc2VkIHNvY2tldCwgZGVsZXRlIHJuZXh0IGtleVwiLCBzaywgMjAwLCAyMDAsIDAsIC0xLCAtMSwgRkFVTFRfQlVTWSk7XG4rXHR0cnlfZGVsZXRlX2tleShcImNsb3NlZCBzb2NrZXQsIGRlbGV0ZSBjdXJyZW50IGtleVwiLCBzaywgMTAwLCAxMDAsIDAsIDAsIC0xLCAtMSwgRkFVTFRfQlVTWSk7XG4rXHR0cnlfZGVsZXRlX2tleShcImNsb3NlZCBzb2NrZXQsIGRlbGV0ZSBybmV4dCBrZXlcIiwgc2ssIDIwMCwgMjAwLCAwLCAwLCAtMSwgLTEsIEZBVUxUX0JVU1kpO1xuIFx0Y2xvc2Uoc2spO1xuIFxuIFx0c2sgPSBwcmVwYXJlX3NrKFx1MDAyNnRoaXNfaXBfZGVzdCwgMjAwLCAyMDApO1xuQEAgLTI1NCwxMCArMjYwLDEyIEBAIHN0YXRpYyB2b2lkIGNoZWNrX2Nsb3NlZF9zb2NrZXQodm9pZClcbiBcdGlmICh0ZXN0X2FkZF9rZXkoc2ssIFwiR2xvcnkgdG8gVWtyYWluZSFcIiwgdGhpc19pcF9kZXN0LFxuIFx0XHRcdCBERUZBVUxUX1RFU1RfUFJFRklYLCAxMiwgMTMpKVxuIFx0XHR0ZXN0X2Vycm9yKFwidGVzdF9hZGRfa2V5KClcIik7XG4tXHR0cnlfZGVsZXRlX2tleShcImNsb3NlZCBzb2NrZXQsIGRlbGV0ZSBhIGtleSArIHNldCBjdXJyZW50L3JuZXh0XCIsIHNrLCAxMDAsIDEwMCwgMCwgMTAsIDEzLCAwKTtcbi1cdHRyeV9kZWxldGVfa2V5KFwiY2xvc2VkIHNvY2tldCwgZm9yY2UtZGVsZXRlIGN1cnJlbnQga2V5XCIsIHNrLCAxMCwgMTEsIDAsIDIwMCwgLTEsIDApO1xuLVx0dHJ5X2RlbGV0ZV9rZXkoXCJjbG9zZWQgc29ja2V0LCBmb3JjZS1kZWxldGUgcm5leHQga2V5XCIsIHNrLCAxMiwgMTMsIDAsIC0xLCAyMDAsIDApO1xuLVx0dHJ5X2RlbGV0ZV9rZXkoXCJjbG9zZWQgc29ja2V0LCBkZWxldGUgY3VycmVudCtybmV4dCBrZXlcIiwgc2ssIDIwMCwgMjAwLCAwLCAtMSwgLTEsIEZBVUxUX0JVU1kpO1xuK1x0dHJ5X2RlbGV0ZV9rZXkoXCJjbG9zZWQgc29ja2V0LCBkZWxldGUgYSBrZXkgKyBzZXQgY3VycmVudC9ybmV4dFwiLCBzayxcbitcdFx0ICAgICAgIDEwMCwgMTAwLCAwLCAwLCAxMCwgMTMsIDApO1xuK1x0dHJ5X2RlbGV0ZV9rZXkoXCJjbG9zZWQgc29ja2V0LCBmb3JjZS1kZWxldGUgY3VycmVudCBrZXlcIiwgc2ssIDEwLCAxMSwgMCwgMCwgMjAwLCAtMSwgMCk7XG4rXHR0cnlfZGVsZXRlX2tleShcImNsb3NlZCBzb2NrZXQsIGZvcmNlLWRlbGV0ZSBybmV4dCBrZXlcIiwgc2ssIDEyLCAxMywgMCwgMCwgLTEsIDIwMCwgMCk7XG4rXHR0cnlfZGVsZXRlX2tleShcImNsb3NlZCBzb2NrZXQsIGRlbGV0ZSBjdXJyZW50K3JuZXh0IGtleVwiLCBzayxcbitcdFx0ICAgICAgIDIwMCwgMjAwLCAwLCAwLCAtMSwgLTEsIEZBVUxUX0JVU1kpO1xuIFx0Y2xvc2Uoc2spO1xuIFxuIFx0c2sgPSBwcmVwYXJlX3NrKFx1MDAyNnRoaXNfaXBfZGVzdCwgMjAwLCAyMDApO1xuQEAgLTI3Miw2ICsyODAsMTggQEAgc3RhdGljIHZvaWQgY2hlY2tfY2xvc2VkX3NvY2tldCh2b2lkKVxuIFx0XHRcdFx0ICB0aGlzX2lwX2Rlc3QsIERFRkFVTFRfVEVTVF9QUkVGSVgsXG4gXHRcdFx0XHQgIGZhbHNlLCB0cnVlLCAyMCwgMTAsIDApO1xuIFx0Y2xvc2Uoc2spO1xuK1xuK1x0aWYgKCFzaG91bGRfc2tpcF90ZXN0KFwiY2xvc2VkIHNvY2tldCwgYWRkICsgZGVsZXRlIFZSRi1zY29wZWQga2V5XCIsXG4rXHRcdFx0ICAgICAgS0NPTkZJR19ORVRfVlJGKSkge1xuK1x0XHRzayA9IHByZXBhcmVfc2soXHUwMDI2dGhpc19pcF9kZXN0LCAyMDAsIDIwMCk7XG4rXHRcdGlmICh0ZXN0X2FkZF9rZXlfdnJmKHNrLCBTRUNPTkRfUEFTU1dPUkQsIFRDUF9BT19LRVlGX0lGSU5ERVgsXG4rXHRcdFx0XHQgICAgIHRoaXNfaXBfZGVzdCwgREVGQVVMVF9URVNUX1BSRUZJWCxcbitcdFx0XHRcdCAgICAgdGVzdF92cmZfaWZpbmRleCwgMjAxLCAyMDEpKVxuK1x0XHRcdHRlc3RfZXJyb3IoXCJ0ZXN0X2FkZF9rZXlfdnJmKClcIik7XG4rXHRcdHRyeV9kZWxldGVfa2V5KFwiY2xvc2VkIHNvY2tldCwgYWRkICsgZGVsZXRlIFZSRi1zY29wZWQga2V5XCIsIHNrLCAyMDEsIDIwMSxcbitcdFx0XHQgICAgICAgdGVzdF92cmZfaWZpbmRleCwgMCwgLTEsIC0xLCAwKTtcbitcdFx0Y2xvc2Uoc2spO1xuK1x0fVxuIH1cbiBcbiBzdGF0aWMgdm9pZCBhc3NlcnRfbm9fY3VycmVudF9ybmV4dChjb25zdCBjaGFyICp0c3RfbXNnLCBpbnQgc2spXG5AQCAtMzIyLDggKzM0Miw4IEBAIHN0YXRpYyB2b2lkIGNoZWNrX2xpc3Rlbl9zb2NrZXQodm9pZClcbiBcdGludCBzaywgZXJyO1xuIFxuIFx0c2sgPSBwcmVwYXJlX2xzayhcdTAwMjZ0aGlzX2lwX2Rlc3QsIDIwMCwgMjAwKTtcbi1cdHRyeV9kZWxldGVfa2V5KFwibGlzdGVuIHNvY2tldCwgZGVsZXRlIGEga2V5XCIsIHNrLCAyMDAsIDIwMCwgMCwgLTEsIC0xLCAwKTtcbi1cdHRyeV9kZWxldGVfa2V5KFwibGlzdGVuIHNvY2tldCwgZGVsZXRlIGFsbCBrZXlzXCIsIHNrLCAxMDAsIDEwMCwgMCwgLTEsIC0xLCAwKTtcbitcdHRyeV9kZWxldGVfa2V5KFwibGlzdGVuIHNvY2tldCwgZGVsZXRlIGEga2V5XCIsIHNrLCAyMDAsIDIwMCwgMCwgMCwgLTEsIC0xLCAwKTtcbitcdHRyeV9kZWxldGVfa2V5KFwibGlzdGVuIHNvY2tldCwgZGVsZXRlIGFsbCBrZXlzXCIsIHNrLCAxMDAsIDEwMCwgMCwgMCwgLTEsIC0xLCAwKTtcbiBcdGNsb3NlKHNrKTtcbiBcbiBcdHNrID0gcHJlcGFyZV9sc2soXHUwMDI2dGhpc19pcF9kZXN0LCAyMDAsIDIwMCk7XG5AQCAtMzQ1LDggKzM2NSwxMCBAQCBzdGF0aWMgdm9pZCBjaGVja19saXN0ZW5fc29ja2V0KHZvaWQpXG4gXHRpZiAobGlzdGVuKHNrLCAxMCkpXG4gXHRcdHRlc3RfZXJyb3IoXCJsaXN0ZW4oKVwiKTtcbiBcdGFzc2VydF9ub19jdXJyZW50X3JuZXh0KFwibGlzdGVuKCkgYWZ0ZXIgY3VycmVudC9ybmV4dCBrZXlzIHNldFwiLCBzayk7XG4tXHR0cnlfZGVsZXRlX2tleShcImxpc3RlbiBzb2NrZXQsIGRlbGV0ZSBjdXJyZW50IGtleSBmcm9tIGJlZm9yZSBsaXN0ZW4oKVwiLCBzaywgMTAwLCAxMDAsIDAsIC0xLCAtMSwgRkFVTFRfRklYTUUpO1xuLVx0dHJ5X2RlbGV0ZV9rZXkoXCJsaXN0ZW4gc29ja2V0LCBkZWxldGUgcm5leHQga2V5IGZyb20gYmVmb3JlIGxpc3RlbigpXCIsIHNrLCAyMDAsIDIwMCwgMCwgLTEsIC0xLCBGQVVMVF9GSVhNRSk7XG4rXHR0cnlfZGVsZXRlX2tleShcImxpc3RlbiBzb2NrZXQsIGRlbGV0ZSBjdXJyZW50IGtleSBmcm9tIGJlZm9yZSBsaXN0ZW4oKVwiLCBzayxcbitcdFx0ICAgICAgIDEwMCwgMTAwLCAwLCAwLCAtMSwgLTEsIEZBVUxUX0ZJWE1FKTtcbitcdHRyeV9kZWxldGVfa2V5KFwibGlzdGVuIHNvY2tldCwgZGVsZXRlIHJuZXh0IGtleSBmcm9tIGJlZm9yZSBsaXN0ZW4oKVwiLCBzayxcbitcdFx0ICAgICAgIDIwMCwgMjAwLCAwLCAwLCAtMSwgLTEsIEZBVUxUX0ZJWE1FKTtcbiBcdGNsb3NlKHNrKTtcbiBcbiBcdGFzc2VydF9ub190Y3BfcmVwYWlyKCk7XG5AQCAtMzU5LDEzICszODEsMTMgQEAgc3RhdGljIHZvaWQgY2hlY2tfbGlzdGVuX3NvY2tldCh2b2lkKVxuIFx0XHRcdCBERUZBVUxUX1RFU1RfUFJFRklYLCAxMiwgMTMpKVxuIFx0XHR0ZXN0X2Vycm9yKFwidGVzdF9hZGRfa2V5KClcIik7XG4gXHR0cnlfZGVsZXRlX2tleShcImxpc3RlbiBzb2NrZXQsIGRlbGV0ZSBhIGtleSArIHNldCBjdXJyZW50L3JuZXh0XCIsIHNrLFxuLVx0XHQgICAgICAgMTAwLCAxMDAsIDAsIDEwLCAxMywgRkFVTFRfQ1VSUk5FWFQpO1xuK1x0XHQgICAgICAgMTAwLCAxMDAsIDAsIDAsIDEwLCAxMywgRkFVTFRfQ1VSUk5FWFQpO1xuIFx0dHJ5X2RlbGV0ZV9rZXkoXCJsaXN0ZW4gc29ja2V0LCBmb3JjZS1kZWxldGUgY3VycmVudCBrZXlcIiwgc2ssXG4tXHRcdCAgICAgICAxMCwgMTEsIDAsIDIwMCwgLTEsIEZBVUxUX0NVUlJORVhUKTtcbitcdFx0ICAgICAgIDEwLCAxMSwgMCwgMCwgMjAwLCAtMSwgRkFVTFRfQ1VSUk5FWFQpO1xuIFx0dHJ5X2RlbGV0ZV9rZXkoXCJsaXN0ZW4gc29ja2V0LCBmb3JjZS1kZWxldGUgcm5leHQga2V5XCIsIHNrLFxuLVx0XHQgICAgICAgMTIsIDEzLCAwLCAtMSwgMjAwLCBGQVVMVF9DVVJSTkVYVCk7XG4rXHRcdCAgICAgICAxMiwgMTMsIDAsIDAsIC0xLCAyMDAsIEZBVUxUX0NVUlJORVhUKTtcbiBcdHRyeV9kZWxldGVfa2V5KFwibGlzdGVuIHNvY2tldCwgZGVsZXRlIGEga2V5XCIsIHNrLFxuLVx0XHQgICAgICAgMjAwLCAyMDAsIDAsIC0xLCAtMSwgMCk7XG4rXHRcdCAgICAgICAyMDAsIDIwMCwgMCwgMCwgLTEsIC0xLCAwKTtcbiBcdGNsb3NlKHNrKTtcbiBcbiBcdHNrID0gcHJlcGFyZV9sc2soXHUwMDI2dGhpc19pcF9kZXN0LCAyMDAsIDIwMCk7XG5AQCAtMTEzMSw3ICsxMTUzLDYgQEAgc3RhdGljIHZvaWQgY2hlY2tfZXN0YWJsaXNoZWRfc29ja2V0KHZvaWQpXG4ge1xuIFx0dW5zaWduZWQgaW50IHBvcnQgPSB0ZXN0X3NlcnZlcl9wb3J0O1xuIFxuLVx0c2V0dXBfdnJmcygpO1xuIFx0dHJ5X2NsaWVudF9ydW4oXCJjbGllbnQ6IENoZWNrIGN1cnJlbnQvcm5leHQga2V5cyB1bnNldCBiZWZvcmUgY29ubmVjdCgpXCIsXG4gXHRcdCAgICAgICBwb3J0KyssIDIwLCAtMSwgLTEpO1xuIFx0dHJ5X2NsaWVudF9ydW4oXCJjbGllbnQ6IENoZWNrIGN1cnJlbnQvcm5leHQga2V5cyBzZXQgYmVmb3JlIGNvbm5lY3QoKVwiLFxuQEAgLTExNTAsNiArMTE3MSw3IEBAIHN0YXRpYyB2b2lkICpjbGllbnRfZm4odm9pZCAqYXJnKVxuIHtcbiBcdGlmIChpbmV0X3B0b24oVEVTVF9GQU1JTFksIFRFU1RfV1JPTkdfSVAsIFx1MDAyNndyb25nX2FkZHIpICE9IDEpXG4gXHRcdHRlc3RfZXJyb3IoXCJDYW4ndCBjb252ZXJ0IGlwIGFkZHJlc3MgJXNcIiwgVEVTVF9XUk9OR19JUCk7XG4rXHRzZXR1cF92cmZzKCk7XG4gXHRjaGVja19jbG9zZWRfc29ja2V0KCk7XG4gXHRjaGVja19saXN0ZW5fc29ja2V0KCk7XG4gXHRjaGVja19lc3RhYmxpc2hlZF9zb2NrZXQoKTtcbkBAIC0xMTU4LDYgKzExODAsNiBAQCBzdGF0aWMgdm9pZCAqY2xpZW50X2ZuKHZvaWQgKmFyZylcbiBcbiBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIHtcbi1cdHRlc3RfaW5pdCgxMjEsIHNlcnZlcl9mbiwgY2xpZW50X2ZuKTtcbitcdHRlc3RfaW5pdCgxMjIsIHNlcnZlcl9mbiwgY2xpZW50X2ZuKTtcbiBcdHJldHVybiAwO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9hb2xpYi5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvYW9saWIuaFxuaW5kZXggZWJiMjg5OWMxMmZlMC4uNTNiZTE3NDQyMzdlZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vbGliL2FvbGliLmhcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vbGliL2FvbGliLmhcbkBAIC00MDQsNyArNDA0LDggQEAgc3RhdGljIGlubGluZSBpbnQgdGVzdF9wcmVwYXJlX2RlZl9rZXkoc3RydWN0IHRjcF9hb19hZGQgKmFvLFxuIFxuIGV4dGVybiBpbnQgdGVzdF9nZXRfb25lX2FvKGludCBzaywgc3RydWN0IHRjcF9hb19nZXRzb2Nrb3B0ICpvdXQsXG4gXHRcdFx0ICAgdm9pZCAqYWRkciwgc2l6ZV90IGFkZHJfc3osXG4tXHRcdFx0ICAgdWludDhfdCBwcmVmaXgsIHVpbnQ4X3Qgc25kaWQsIHVpbnQ4X3QgcmN2aWQpO1xuK1x0XHRcdCAgIHVpbnQ4X3QgcHJlZml4LCB1aW50OF90IHNuZGlkLCB1aW50OF90IHJjdmlkLFxuK1x0XHRcdCAgIHVpbnQ4X3Qga2V5ZmxhZ3MsIGludCBpZmluZGV4KTtcbiBleHRlcm4gaW50IHRlc3RfZ2V0X2FvX2luZm8oaW50IHNrLCBzdHJ1Y3QgdGNwX2FvX2luZm9fb3B0ICpvdXQpO1xuIGV4dGVybiBpbnQgdGVzdF9zZXRfYW9faW5mbyhpbnQgc2ssIHN0cnVjdCB0Y3BfYW9faW5mb19vcHQgKmluKTtcbiBleHRlcm4gaW50IHRlc3RfY21wX2dldHNvY2tvcHRfc2V0c29ja29wdChjb25zdCBzdHJ1Y3QgdGNwX2FvX2FkZCAqYSxcbkBAIC00MTgsNyArNDE5LDggQEAgc3RhdGljIGlubGluZSBpbnQgdGVzdF92ZXJpZnlfc29ja2V0X2tleShpbnQgc2ssIHN0cnVjdCB0Y3BfYW9fYWRkICprZXkpXG4gXHRpbnQgZXJyO1xuIFxuIFx0ZXJyID0gdGVzdF9nZXRfb25lX2FvKHNrLCBcdTAwMjZrZXkyLCBcdTAwMjZrZXktXHUwMDNlYWRkciwgc2l6ZW9mKGtleS1cdTAwM2VhZGRyKSxcbi1cdFx0XHQgICAgICBrZXktXHUwMDNlcHJlZml4LCBrZXktXHUwMDNlc25kaWQsIGtleS1cdTAwM2VyY3ZpZCk7XG4rXHRcdFx0ICAgICAga2V5LVx1MDAzZXByZWZpeCwga2V5LVx1MDAzZXNuZGlkLCBrZXktXHUwMDNlcmN2aWQsXG4rXHRcdFx0ICAgICAga2V5LVx1MDAzZWtleWZsYWdzLCBrZXktXHUwMDNlaWZpbmRleCk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vbGliL3NvY2suYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vbGliL3NvY2suY1xuaW5kZXggZWY4ZTkwMzFkNDdhMy4uMmU3YjA2YTFhMTU2NyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vbGliL3NvY2suY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvc29jay5jXG5AQCAtMjUyLDcgKzI1Miw3IEBAIHN0YXRpYyBpbnQgdGVzdF9nZXRfYW9fa2V5c19ucihpbnQgc2spXG4gXG4gaW50IHRlc3RfZ2V0X29uZV9hbyhpbnQgc2ssIHN0cnVjdCB0Y3BfYW9fZ2V0c29ja29wdCAqb3V0LFxuIFx0XHR2b2lkICphZGRyLCBzaXplX3QgYWRkcl9zeiwgdWludDhfdCBwcmVmaXgsXG4tXHRcdHVpbnQ4X3Qgc25kaWQsIHVpbnQ4X3QgcmN2aWQpXG4rXHRcdHVpbnQ4X3Qgc25kaWQsIHVpbnQ4X3QgcmN2aWQsIHVpbnQ4X3Qga2V5ZmxhZ3MsIGludCBpZmluZGV4KVxuIHtcbiBcdHN0cnVjdCB0Y3BfYW9fZ2V0c29ja29wdCB0bXAgPSB7fTtcbiBcdHNvY2tsZW5fdCB0bXBfc3ogPSBzaXplb2YodG1wKTtcbkBAIC0yNjIsNiArMjYyLDggQEAgaW50IHRlc3RfZ2V0X29uZV9hbyhpbnQgc2ssIHN0cnVjdCB0Y3BfYW9fZ2V0c29ja29wdCAqb3V0LFxuIFx0dG1wLnByZWZpeCA9IHByZWZpeDtcbiBcdHRtcC5zbmRpZCAgPSBzbmRpZDtcbiBcdHRtcC5yY3ZpZCAgPSByY3ZpZDtcbitcdHRtcC5rZXlmbGFncyA9IGtleWZsYWdzO1xuK1x0dG1wLmlmaW5kZXggPSBpZmluZGV4O1xuIFx0dG1wLm5rZXlzICA9IDE7XG4gXG4gXHRyZXQgPSBnZXRzb2Nrb3B0KHNrLCBJUFBST1RPX1RDUCwgVENQX0FPX0dFVF9LRVlTLCBcdTAwMjZ0bXAsIFx1MDAyNnRtcF9zeik7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNTo1Nzo1MS42OTA4MzU2ODJaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQ0MzAzNjU5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBGdXp6aW5nIFNlc3Npb24gSnVzdGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggbGFuZGVkLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJEb2VzIHRoaXMgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHJ1bj9cIiBJdCBtb2RpZmllcyBgbmV0L2lwdjQvdGNwX2FvLmNgIGFuZCBhIGZldyBzZWxmdGVzdHMsIHdoaWNoIGlzIGEga2V5IGluZGljYXRvci4gTGV0J3MgZGlnIGluLlxuXG5UaGUgZGlmZiBpbiBgbmV0L2lwdjQvdGNwX2FvLmNgIGlzIHByZXR0eSBjb25jaXNlLiBIbW0sIGl0IHNlZW1zIHRvIGFkZCBhIGNoZWNrIGZvciBgVENQX0FPX0tFWUZfSUZJTkRFWGAgYW5kIGFzc2lnbnMgYGNtZC5pZmluZGV4YCB0byBhIG5ldyB2YXJpYWJsZSBgbDNpbmRleGAuIFJpZ2h0LCB0aGlzIGBjbWRgIHZhcmlhYmxlLi4uIHdoZXJlIGRvZXMgdGhhdCBjb21lIGZyb20/IEl0J3MgYWxtb3N0IGNlcnRhaW5seSBhIHN0cnVjdCBiZWluZyBwYXNzZWQgaW4gZnJvbSB1c2Vyc3BhY2UgdmlhIGBzZXRzb2Nrb3B0YC4gSSBzaG91bGQgY2hlY2sgdGhlIGRlZmluaXRpb24gYW5kIHVzYWdlIG9mIGB0Y3BfYW9fZGVsX2NtZGAgd2l0aGluIHRoZSBzYW1lIGZpbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCdzIGJlaW5nIHBhc3NlZCBpbiBhbmQgaG93IHRoaXMgbmV3IGBpZmAgc3RhdGVtZW50IGludGVyYWN0cyB3aXRoIHRoZSBleGlzdGluZyBsb2dpYywgdG8gZ2V0IGEgaGFuZGxlIG9uIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIExldCdzIHNlZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MzkyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjkzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTU6NTc6NTcuMTMzODc2MjkyWiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDUwNjI0NjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNwX2FvX2RlbF9jbWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvdGNwX2FvLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvdGNwX2FvLmM9OTkwPXRjcF9pbmJvdW5kX2FvX2hhc2goc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvdGNwX2FvLmMtMTA1NS1cXHRcXHRcXHRpZiAoa2V5KVxcbm5ldC9pcHY0L3RjcF9hby5jOjEwNTY6XFx0XFx0XFx0XFx0LyogcGFpcnMgd2l0aCB0Y3BfYW9fZGVsX2NtZCAqL1xcbm5ldC9pcHY0L3RjcF9hby5jLTEwNTctXFx0XFx0XFx0XFx0V1JJVEVfT05DRShpbmZvLVxcdTAwM2VjdXJyZW50X2tleSwga2V5KTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9hby5jLTEwNjgtXFx0ICogLSByZXF1ZXN0IHNvY2tldHMgd291bGQgcmFjZSBvbiB0aG9zZSBrZXkgcG9pbnRlcnNcXG5uZXQvaXB2NC90Y3BfYW8uYzoxMDY5OlxcdCAqIC0gdGNwX2FvX2RlbF9jbWQoKSBhbGxvd3MgYXN5bmMga2V5IHJlbW92YWxcXG5uZXQvaXB2NC90Y3BfYW8uYy0xMDcwLVxcdCAqL1xcbi0tXFxubmV0L2lwdjQvdGNwX2FvLmM9MTc0Nj1zdGF0aWMgaW50IHRjcF9hb19kZWxldGVfa2V5KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRjcF9hb19pbmZvICphb19pbmZvLFxcbi0tXFxubmV0L2lwdjQvdGNwX2FvLmMtMTc5OS0jZGVmaW5lIFRDUF9BT19ERUxfS0VZRl9BTEwgKFRDUF9BT19LRVlGX0lGSU5ERVgpXFxubmV0L2lwdjQvdGNwX2FvLmM6MTgwMDpzdGF0aWMgaW50IHRjcF9hb19kZWxfY21kKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgc2hvcnQgaW50IGZhbWlseSxcXG5uZXQvaXB2NC90Y3BfYW8uYy0xODAxLVxcdFxcdFxcdCAgc29ja3B0cl90IG9wdHZhbCwgaW50IG9wdGxlbilcXG4tLVxcbm5ldC9pcHY0L3RjcF9hby5jPTIwMzg9aW50IHRjcF9wYXJzZV9hbyhzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHVuc2lnbmVkIHNob3J0IGludCBmYW1pbHksXFxuLS1cXG5uZXQvaXB2NC90Y3BfYW8uYy0yMDQ3LVxcdGNhc2UgVENQX0FPX0RFTF9LRVk6XFxubmV0L2lwdjQvdGNwX2FvLmM6MjA0ODpcXHRcXHRyZXR1cm4gdGNwX2FvX2RlbF9jbWQoc2ssIGZhbWlseSwgb3B0dmFsLCBvcHRsZW4pO1xcbm5ldC9pcHY0L3RjcF9hby5jLTIwNDktXFx0Y2FzZSBUQ1BfQU9fSU5GTzpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTU6NTc6NTcuMjc4OTU3OTM4WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNTAzNzE2MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBgdGNwX2FvX2RlbF9jbWRgIEZ1bmN0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBndXRzIG9mIHRoZSBUQ1AgQXV0aGVudGljYXRpb24gT3B0aW9uIChUQ1AgQU8pIGltcGxlbWVudGF0aW9uLiBJJ20gZm9jdXNpbmcgb24gdGhlIGB0Y3BfYW9fZGVsX2NtZGAgZnVuY3Rpb24gd2l0aGluIGBuZXQvaXB2NC90Y3BfYW8uY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBUQ1AgQU8ga2V5cyBhcmUgcmVtb3ZlZCBvciBpbnZhbGlkYXRlZCwgYXMgdGhpcyBpcyBjcnVjaWFsIGZvciBzZWN1cml0eSBhbmQgc2Vzc2lvbiBtYW5hZ2VtZW50LiBJJ20gYXNzdW1pbmcgdGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgaGFuZGxpbmcgdGhlIGRlbGV0aW9uIG9yIGludmFsaWRhdGlvbiBvZiBhdXRoZW50aWNhdGlvbiBrZXlzIGFzc29jaWF0ZWQgd2l0aCBhIFRDUCBjb25uZWN0aW9uLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGtleSBtYW5hZ2VtZW50IHN0cnVjdHVyZXMsIHdoYXQgbG9ja2luZyBtZWNoYW5pc21zIGl0IGVtcGxveXMgdG8gZW5zdXJlIHRocmVhZCBzYWZldHkgKGxpa2VseSBzcGlubG9ja3Mgb3IgcmVhZC93cml0ZSBsb2NrcywgZ2l2ZW4gaXRzIHBvdGVudGlhbCBmb3IgY29uY3VycmVudCBhY2Nlc3MpLCBhbmQgaG93IGl0IGNsZWFucyB1cCBhbnkgYXNzb2NpYXRlZCByZXNvdXJjZXMuIEFyZSB0aGVyZSBhbnkgcmVmZXJlbmNlIGNvdW50cyBpbnZvbHZlZD8gV2hhdCBoYXBwZW5zIGlmIHRoZSBrZXkgZGVsZXRpb24gZmFpbHMgZm9yIHNvbWUgcmVhc29uPyBEb2VzIHRoaXMgdHJpZ2dlciBhbnkgZXJyb3IgY2FsbGJhY2tzIG9yIGxvZ2dpbmc/IEknbGwgYWxzbyBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLCBsaWtlIHJhY2UgY29uZGl0aW9ucyBvciBtZW1vcnkgbGVha3MsIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGVsZXRpb24gcHJvY2VzcyBpdHNlbGYuIFRoaXMgZnVuY3Rpb24gaXMgY3JpdGljYWwgZm9yIG1haW50YWluaW5nIHRoZSBpbnRlZ3JpdHkgYW5kIHNlY3VyaXR5IG9mIHRoZSBBTyBzeXN0ZW0sIHNvIGEgdGhvcm91Z2ggdW5kZXJzdGFuZGluZyBpcyBhYnNvbHV0ZWx5IGVzc2VudGlhbC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzQ0MSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE1OjU4OjAxLjMyOTMzMjQ4MloiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTg4OTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvdGNwX2FvLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTc5NSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTc5NTpcXHRcXHRobGlzdF9hZGRfaGVhZF9yY3UoXFx1MDAyNmtleS1cXHUwMDNlbm9kZSwgXFx1MDAyNmFvX2luZm8tXFx1MDAzZWhlYWQpO1xcbjE3OTY6XFx0XFx0cmV0dXJuIGVycjtcXG4xNzk3OlxcdH1cXG4xNzk4OlxcdFxcbjE3OTk6XFx0I2RlZmluZSBUQ1BfQU9fREVMX0tFWUZfQUxMIChUQ1BfQU9fS0VZRl9JRklOREVYKVxcbjE4MDA6XFx0c3RhdGljIGludCB0Y3BfYW9fZGVsX2NtZChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIHNob3J0IGludCBmYW1pbHksXFxuMTgwMTpcXHRcXHRcXHRcXHQgIHNvY2twdHJfdCBvcHR2YWwsIGludCBvcHRsZW4pXFxuMTgwMjpcXHR7XFxuMTgwMzpcXHRcXHRzdHJ1Y3QgdGNwX2FvX2tleSAqa2V5LCAqbmV3X2N1cnJlbnQgPSBOVUxMLCAqbmV3X3JuZXh0ID0gTlVMTDtcXG4xODA0OlxcdFxcdGludCBlcnIsIGFkZHJfbGVuLCBsM2luZGV4ID0gMDtcXG4xODA1OlxcdFxcdHN0cnVjdCB0Y3BfYW9faW5mbyAqYW9faW5mbztcXG4xODA2OlxcdFxcdHVuaW9uIHRjcF9hb19hZGRyICphZGRyO1xcbjE4MDc6XFx0XFx0c3RydWN0IHRjcF9hb19kZWwgY21kO1xcbjE4MDg6XFx0XFx0X191OCBwcmVmaXg7XFxuMTgwOTpcXHRcXHR1MTYgcG9ydDtcXG4xODEwOlxcdFxcbjE4MTE6XFx0XFx0aWYgKG9wdGxlbiBcXHUwMDNjIHNpemVvZihjbWQpKVxcbjE4MTI6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTgxMzpcXHRcXG4xODE0OlxcdFxcdGVyciA9IGNvcHlfc3RydWN0X2Zyb21fc29ja3B0cihcXHUwMDI2Y21kLCBzaXplb2YoY21kKSwgb3B0dmFsLCBvcHRsZW4pO1xcbjE4MTU6XFx0XFx0aWYgKGVycilcXG4xODE2OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuMTgxNzpcXHRcXG4xODE4OlxcdFxcdGlmIChjbWQucmVzZXJ2ZWQgIT0gMCB8fCBjbWQucmVzZXJ2ZWQyICE9IDApXFxuMTgxOTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xODIwOlxcdFxcbjE4MjE6XFx0XFx0aWYgKGNtZC5zZXRfY3VycmVudCB8fCBjbWQuc2V0X3JuZXh0KSB7XFxuMTgyMjpcXHRcXHRcXHRpZiAoIXRjcF9hb19jYW5fc2V0X2N1cnJlbnRfcm5leHQoc2spKVxcbjE4MjM6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTgyNDpcXHRcXHR9XFxuMTgyNTpcXHRcXG4xODI2OlxcdFxcdGlmIChjbWQua2V5ZmxhZ3MgXFx1MDAyNiB+VENQX0FPX0RFTF9LRVlGX0FMTClcXG4xODI3OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE4Mjg6XFx0XFxuMTgyOTpcXHRcXHQvKiBObyBzYW5pdHkgY2hlY2sgZm9yIFRDUF9BT19LRVlGX0lGSU5ERVggYXMgaWYgYSBWUkZcXG4xODMwOlxcdFxcdCAqIHdhcyBkZXN0cm95ZWQsIHRoZXJlIHN0aWxsIHNob3VsZCBiZSBhIHdheSB0byBkZWxldGUga2V5cyxcXG4xODMxOlxcdFxcdCAqIHRoYXQgd2VyZSBib3VuZCB0byB0aGF0IGwzaW50Zi4gU28sIGZhaWwgbGF0ZSBhdCBsb29rdXAgc3RhZ2VcXG4xODMyOlxcdFxcdCAqIGlmIHRoZXJlIGlzIG5vIGtleSBmb3IgdGhhdCBpZmluZGV4LlxcbjE4MzM6XFx0XFx0ICovXFxuMTgzNDpcXHRcXHRpZiAoY21kLmlmaW5kZXggXFx1MDAyNlxcdTAwMjYgIShjbWQua2V5ZmxhZ3MgXFx1MDAyNiBUQ1BfQU9fS0VZRl9JRklOREVYKSlcXG4xODM1OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE4MzY6XFx0XFxuMTgzNzpcXHRcXHRpZiAoY21kLmtleWZsYWdzIFxcdTAwMjYgVENQX0FPX0tFWUZfSUZJTkRFWClcXG4xODM4OlxcdFxcdFxcdGwzaW5kZXggPSBjbWQuaWZpbmRleDtcXG4xODM5OlxcdFxcbjE4NDA6XFx0XFx0YW9faW5mbyA9IHNldHNvY2tvcHRfYW9faW5mbyhzayk7XFxuMTg0MTpcXHRcXHRpZiAoSVNfRVJSKGFvX2luZm8pKVxcbjE4NDI6XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIoYW9faW5mbyk7XFxuMTg0MzpcXHRcXHRpZiAoIWFvX2luZm8pXFxuMTg0NDpcXHRcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTU6NTg6MDEuMzI5NTMzNDYyWiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4NTY1MTEyNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUQ1AgQU8gS2V5IEZsYWcgTG9naWMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2guIEkgc2VlIHRoZXkndmUgYWRkZWQgYSBjaGVjazogYGlmIChjbWQua2V5ZmxhZ3MgXHUwMDI2IFRDUF9BT19LRVlGX0lGSU5ERVgpYC4gSXQgc2VlbXMgbGlrZSB0aGV5J3JlIGxvb2tpbmcgZm9yIGEgc3BlY2lmaWMgZmxhZywgYFRDUF9BT19LRVlGX0lGSU5ERVhgLCB3aXRoaW4gYSBga2V5ZmxhZ3NgIGZpZWxkIG9mIGEgc3RydWN0dXJlIGNhbGxlZCBgY21kYC4gUmlnaHQsIGBjbWRgIGlzIHBvcHVsYXRlZCBieSBgY29weV9zdHJ1Y3RfZnJvbV9zb2NrcHRyKFx1MDAyNmNtZCwgc2l6ZW9mKGNtZCksIG9wdHZhbCwgb3B0bGVuKTtgLiBJIHJlbWVtYmVyIHRoaXMgZnVuY3Rpb24uIEl0IGNvcGllcyBkYXRhIGZyb20gdXNlciBzcGFjZS4gSXQgaGFuZGxlcyBjYXNlcyB3aGVyZSB0aGUgdXNlci1wcm92aWRlZCBzdHJ1Y3R1cmUgaXMgZWl0aGVyIHNtYWxsZXIgb3IgbGFyZ2VyIHRoYW4gdGhlIGtlcm5lbCdzIGRlZmluaXRpb24uIFplcm8tcGFkZGluZyBpbiB0aGUgZmlyc3QgY2FzZSwgemVyby1jaGVja2luZyB0aGUgZXh0cmEgYnl0ZXMgaW4gdGhlIHNlY29uZC4gU28sIGFzc3VtaW5nIHRoZSB1c2VyIHNwYWNlIHN0cnVjdCBpcyB3ZWxsLWZvcm1lZCwgYGNtZGAgaXMgZnVsbHkgaW5pdGlhbGl6ZWQsIHdoaWNoIGlzIGNydWNpYWwuXG5cbk5vdywgYGwzaW5kZXhgIGlzIGEgbG9jYWwgdmFyaWFibGUsIGluaXRpYWxpemVkIHRvIHplcm86IGBpbnQgZXJyLCBhZGRyX2xlbiwgbDNpbmRleCA9IDA7YC4gT2theSwgYW5kIHRoZW4gbGF0ZXIgb24sIHRoZXkgdXNlIGBsM2luZGV4YCBpbiBgdGNwX2FvX2RlbF9jbWRgLiBUaGF0J3MgdGhlIGtleS4gV2hlcmUgZG9lcyB0aGlzIHZhbHVlIGFjdHVhbGx5IGdldCAqdXNlZCo/IEkgbmVlZCB0byB0cmFjZSB0aGlzIHZhcmlhYmxlLiBMZXQncyBkaWcgZGVlcGVyIGFuZCBzZWUgZXhhY3RseSBob3cgYGwzaW5kZXhgIGlzIGVtcGxveWVkIGRvd24gdGhlIGxpbmUuIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbiBvZiB0aGlzIGZsYWcgYW5kIGhvdyBpdCdzIGluZmx1ZW5jaW5nIHRoZSBuZXR3b3JrIHN0YWNrIGJlaGF2aW9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NTcwLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTU6NTg6MDYuMTg2MDQ4OTQyWiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MzU2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC90Y3BfYW8uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODQ1LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxODQ1OlxcdFxcbjE4NDY6XFx0XFx0LyogRm9yIHNvY2tldHMgaW4gVENQX0NMT1NFRCBpdCdzIHBvc3NpYmxlIHNldCBrZXlzIHRoYXQgYXJlbid0XFxuMTg0NzpcXHRcXHQgKiBtYXRjaGluZyB0aGUgZnV0dXJlIHBlZXIgKGFkZHJlc3MvVlJGL2V0YyksXFxuMTg0ODpcXHRcXHQgKiB0Y3BfYW9fY29ubmVjdF9pbml0KCkgd2lsbCBjaG9vc2UgYSBjb3JyZWN0IG1hdGNoaW5nIE1LVFxcbjE4NDk6XFx0XFx0ICogaWYgdGhlcmUncyBhbnkuXFxuMTg1MDpcXHRcXHQgKi9cXG4xODUxOlxcdFxcdGlmIChjbWQuc2V0X2N1cnJlbnQpIHtcXG4xODUyOlxcdFxcdFxcdG5ld19jdXJyZW50ID0gdGNwX2FvX2VzdGFibGlzaGVkX2tleShzaywgYW9faW5mbywgY21kLmN1cnJlbnRfa2V5LCAtMSk7XFxuMTg1MzpcXHRcXHRcXHRpZiAoIW5ld19jdXJyZW50KVxcbjE4NTQ6XFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuMTg1NTpcXHRcXHR9XFxuMTg1NjpcXHRcXHRpZiAoY21kLnNldF9ybmV4dCkge1xcbjE4NTc6XFx0XFx0XFx0bmV3X3JuZXh0ID0gdGNwX2FvX2VzdGFibGlzaGVkX2tleShzaywgYW9faW5mbywgLTEsIGNtZC5ybmV4dCk7XFxuMTg1ODpcXHRcXHRcXHRpZiAoIW5ld19ybmV4dClcXG4xODU5OlxcdFxcdFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbjE4NjA6XFx0XFx0fVxcbjE4NjE6XFx0XFx0aWYgKGNtZC5kZWxfYXN5bmMgXFx1MDAyNlxcdTAwMjYgc2stXFx1MDAzZXNrX3N0YXRlICE9IFRDUF9MSVNURU4pXFxuMTg2MjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xODYzOlxcdFxcbjE4NjQ6XFx0XFx0aWYgKGZhbWlseSA9PSBBRl9JTkVUKSB7XFxuMTg2NTpcXHRcXHRcXHRzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilcXHUwMDI2Y21kLmFkZHI7XFxuMTg2NjpcXHRcXG4xODY3OlxcdFxcdFxcdGFkZHIgPSAodW5pb24gdGNwX2FvX2FkZHIgKilcXHUwMDI2c2luLVxcdTAwM2VzaW5fYWRkcjtcXG4xODY4OlxcdFxcdFxcdGFkZHJfbGVuID0gc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKTtcXG4xODY5OlxcdFxcdFxcdHBvcnQgPSBudG9ocyhzaW4tXFx1MDAzZXNpbl9wb3J0KTtcXG4xODcwOlxcdFxcdH0gZWxzZSB7XFxuMTg3MTpcXHRcXHRcXHRzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilcXHUwMDI2Y21kLmFkZHI7XFxuMTg3MjpcXHRcXHRcXHRzdHJ1Y3QgaW42X2FkZHIgKmFkZHI2ID0gXFx1MDAyNnNpbjYtXFx1MDAzZXNpbjZfYWRkcjtcXG4xODczOlxcdFxcbjE4NzQ6XFx0XFx0XFx0aWYgKGlwdjZfYWRkcl92NG1hcHBlZChhZGRyNikpIHtcXG4xODc1OlxcdFxcdFxcdFxcdGFkZHIgPSAodW5pb24gdGNwX2FvX2FkZHIgKilcXHUwMDI2YWRkcjYtXFx1MDAzZXM2X2FkZHIzMlszXTtcXG4xODc2OlxcdFxcdFxcdFxcdGFkZHJfbGVuID0gc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKTtcXG4xODc3OlxcdFxcdFxcdFxcdGZhbWlseSA9IEFGX0lORVQ7XFxuMTg3ODpcXHRcXHRcXHR9IGVsc2Uge1xcbjE4Nzk6XFx0XFx0XFx0XFx0YWRkciA9ICh1bmlvbiB0Y3BfYW9fYWRkciAqKWFkZHI2O1xcbjE4ODA6XFx0XFx0XFx0XFx0YWRkcl9sZW4gPSBzaXplb2Yoc3RydWN0IGluNl9hZGRyKTtcXG4xODgxOlxcdFxcdFxcdH1cXG4xODgyOlxcdFxcdFxcdHBvcnQgPSBudG9ocyhzaW42LVxcdTAwM2VzaW42X3BvcnQpO1xcbjE4ODM6XFx0XFx0fVxcbjE4ODQ6XFx0XFx0cHJlZml4ID0gY21kLnByZWZpeDtcXG4xODg1OlxcdFxcbjE4ODY6XFx0XFx0LyogQ3VycmVudGx5IG1hdGNoaW5nIGlzIG5vdCBwZXJmb3JtZWQgb24gcG9ydCAob3IgcG9ydCByYW5nZXMpICovXFxuMTg4NzpcXHRcXHRpZiAocG9ydCAhPSAwKVxcbjE4ODg6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTg4OTpcXHRcXG4xODkwOlxcdFxcdC8qIFdlIGNvdWxkIGNob29zZSByYW5kb20gcHJlc2VudCBrZXkgaGVyZSBmb3IgY3VycmVudC9ybmV4dFxcbjE4OTE6XFx0XFx0ICogYnV0IHRoYXQncyBsZXNzIHByZWRpY3RhYmxlLiBMZXQncyBiZSBzdHJpY3QgYW5kIGRvbid0XFxuMTg5MjpcXHRcXHQgKiBhbGxvdyByZW1vdmluZyBhIGtleSB0aGF0J3MgaW4gdXNlLiBSRkM1OTI1IGRvZXNuJ3RcXG4xODkzOlxcdFxcdCAqIHNwZWNpZnkgaG93LXRvIGNvb3JkaW5hdGUga2V5IHJlbW92YWwsIGJ1dCBzYXlzOlxcbjE4OTQ6XFx0XFx0ICogXFxcIkl0IGlzIHByZXN1bWVkIHRoYXQgYW4gTUtUIGFmZmVjdGluZyBhIHBhcnRpY3VsYXJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTU6NTg6MDYuMTg2MjMzOTMxWiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1OTIxMzk0ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIEknbSByZWFkeSB0byBkZWx2ZSBpbnRvIHRoaXMgdGV4dC4gTGV0J3Mgc2VlIHdoYXQgd2UndmUgZ290LiBJJ2xsIGFwcHJvYWNoIGl0IHdpdGggbXkgdXN1YWwgY3JpdGljYWwgZXllLCBjb25zaWRlcmluZyBhbGwgdGhlIGltcGxpY2F0aW9ucyBhbmQgbnVhbmNlcy4gSSdtIHByZXBhcmVkIHRvIGRpc3NlY3QgdGhlIGFyZ3VtZW50cywgZXZhbHVhdGUgdGhlIGV2aWRlbmNlLCBhbmQgc3ludGhlc2l6ZSB0aGUgaW5mb3JtYXRpb24gaW50byBhIGNvaGVzaXZlIHVuZGVyc3RhbmRpbmcuIExldCdzIGdldCB0byBpdCFcblxuXG4iLCJJbnB1dFRva2VucyI6OTk1MiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNTo1ODowOS43NzgzNzYzNzFaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgzNTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L3RjcF9hby5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4OTUsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE4OTU6XFx0XFx0ICogY29ubmVjdGlvbiBjYW5ub3QgYmUgZGVzdHJveWVkIGR1cmluZyBhbiBhY3RpdmUgY29ubmVjdGlvblxcXCJcXG4xODk2OlxcdFxcdCAqL1xcbjE4OTc6XFx0XFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGtleSwgXFx1MDAyNmFvX2luZm8tXFx1MDAzZWhlYWQsIG5vZGUsXFxuMTg5ODpcXHRcXHRcXHRcXHRcXHQgbG9ja2RlcF9zb2NrX2lzX2hlbGQoc2spKSB7XFxuMTg5OTpcXHRcXHRcXHRpZiAoY21kLnNuZGlkICE9IGtleS1cXHUwMDNlc25kaWQgfHxcXG4xOTAwOlxcdFxcdFxcdCAgICBjbWQucmN2aWQgIT0ga2V5LVxcdTAwM2VyY3ZpZClcXG4xOTAxOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjE5MDI6XFx0XFxuMTkwMzpcXHRcXHRcXHRpZiAoZmFtaWx5ICE9IGtleS1cXHUwMDNlZmFtaWx5IHx8XFxuMTkwNDpcXHRcXHRcXHQgICAgcHJlZml4ICE9IGtleS1cXHUwMDNlcHJlZml4bGVuIHx8XFxuMTkwNTpcXHRcXHRcXHQgICAgbWVtY21wKGFkZHIsIFxcdTAwMjZrZXktXFx1MDAzZWFkZHIsIGFkZHJfbGVuKSlcXG4xOTA2OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjE5MDc6XFx0XFxuMTkwODpcXHRcXHRcXHRpZiAoKGNtZC5rZXlmbGFncyBcXHUwMDI2IFRDUF9BT19LRVlGX0lGSU5ERVgpICE9XFxuMTkwOTpcXHRcXHRcXHQgICAgKGtleS1cXHUwMDNla2V5ZmxhZ3MgXFx1MDAyNiBUQ1BfQU9fS0VZRl9JRklOREVYKSlcXG4xOTEwOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjE5MTE6XFx0XFxuMTkxMjpcXHRcXHRcXHRpZiAoa2V5LVxcdTAwM2VsM2luZGV4ICE9IGwzaW5kZXgpXFxuMTkxMzpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4xOTE0OlxcdFxcbjE5MTU6XFx0XFx0XFx0aWYgKGtleSA9PSBuZXdfY3VycmVudCB8fCBrZXkgPT0gbmV3X3JuZXh0KVxcbjE5MTY6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMTkxNzpcXHRcXG4xOTE4OlxcdFxcdFxcdHJldHVybiB0Y3BfYW9fZGVsZXRlX2tleShzaywgYW9faW5mbywgY21kLmRlbF9hc3luYywga2V5LFxcbjE5MTk6XFx0XFx0XFx0XFx0XFx0XFx0IG5ld19jdXJyZW50LCBuZXdfcm5leHQpO1xcbjE5MjA6XFx0XFx0fVxcbjE5MjE6XFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuMTkyMjpcXHR9XFxuMTkyMzpcXHRcXG4xOTI0OlxcdC8qIGNtZC5hb19yZXF1aXJlZCBtYWtlcyBhIHNvY2tldCBUQ1AtQU8gb25seS5cXG4xOTI1OlxcdCAqIERvbid0IGFsbG93IGFueSBtZDUga2V5cyBmb3IgYW55IGwzaW50ZiBvbiB0aGUgc29ja2V0IHRvZ2V0aGVyIHdpdGggaXQuXFxuMTkyNjpcXHQgKiBSZXN0cmljdGluZyBpdCBlYXJseSBpbiBzZXRzb2Nrb3B0KCkgcmVtb3ZlcyBhIGNoZWNrIGZvclxcbjE5Mjc6XFx0ICogYW9faW5mby1cXHUwMDNlYW9fcmVxdWlyZWQgb24gaW5ib3VuZCB0Y3Agc2VnbWVudCBmYXN0LXBhdGguXFxuMTkyODpcXHQgKi9cXG4xOTI5OlxcdHN0YXRpYyBpbnQgdGNwX2FvX3JlcXVpcmVkX3ZlcmlmeShzdHJ1Y3Qgc29jayAqc2spXFxuMTkzMDpcXHR7XFxuMTkzMTpcXHQjaWZkZWYgQ09ORklHX1RDUF9NRDVTSUdcXG4xOTMyOlxcdFxcdGNvbnN0IHN0cnVjdCB0Y3BfbWQ1c2lnX2luZm8gKm1kNXNpZztcXG4xOTMzOlxcdFxcbjE5MzQ6XFx0XFx0aWYgKCFzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFxcdTAwMjZ0Y3BfbWQ1X25lZWRlZC5rZXkpKVxcbjE5MzU6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTkzNjpcXHRcXG4xOTM3OlxcdFxcdG1kNXNpZyA9IHJjdV9kZXJlZmVyZW5jZV9jaGVjayh0Y3Bfc2soc2spLVxcdTAwM2VtZDVzaWdfaW5mbyxcXG4xOTM4OlxcdFxcdFxcdFxcdFxcdCAgICAgICBsb2NrZGVwX3NvY2tfaXNfaGVsZChzaykpO1xcbjE5Mzk6XFx0XFx0aWYgKCFtZDVzaWcpXFxuMTk0MDpcXHRcXHRcXHRyZXR1cm4gMDtcXG4xOTQxOlxcdFxcbjE5NDI6XFx0XFx0aWYgKHJjdV9kZXJlZmVyZW5jZV9jaGVjayhobGlzdF9maXJzdF9yY3UoXFx1MDAyNm1kNXNpZy1cXHUwMDNlaGVhZCksXFxuMTk0MzpcXHRcXHRcXHRcXHRcXHQgIGxvY2tkZXBfc29ja19pc19oZWxkKHNrKSkpXFxuMTk0NDpcXHRcXHRcXHRyZXR1cm4gMTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTU6NTg6MDkuNzc4NTY2MzExWiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMTEzNjkxNzQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBUQ1BfQU9fREVMX0tFWSBMb2dpYyBCdWcgRml4KipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGlzIHBhdGNoLCB0aGUgY29yZSBjaGFuZ2UgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogaXQgZml4ZXMgYSBsb2dpYyBlcnJvciBpbiBob3cgYGwzaW5kZXhgIGlzIGhhbmRsZWQgd2l0aGluIHRoZSBgVENQX0FPX0RFTF9LRVlgIHNldHNvY2tvcHQuIFByZXZpb3VzbHksIGBsM2luZGV4YCB3YXMgaW5pdGlhbGl6ZWQgdG8gemVybyBhbmQgbmV2ZXIgYWN0dWFsbHkgdXBkYXRlZCB3aXRoIHRoZSB2YWx1ZSBvZiBgY21kLmlmaW5kZXhgLCBldmVuIGlmIHRoZSBgVENQX0FPX0tFWUZfSUZJTkRFWGAgZmxhZyB3YXMgc2V0LiBUaGUgY29kZSB3b3VsZCB0aGVuIGNvbXBhcmUgYSBrZXkncyBga2V5LVx1MDAzZWwzaW5kZXhgIHdpdGggdGhpcyBjb25zdGFudCB6ZXJvLCB3aGljaCBpcyBjbGVhcmx5IG5vdCB3aGF0IHdhcyBpbnRlbmRlZCB3aGVuIGEgc3BlY2lmaWMgaW50ZXJmYWNlIGluZGV4IHdhcyBwcm92aWRlZC5cblxuVGhlIGZpeCBpbnRyb2R1Y2VzIGEgY29uZGl0aW9uYWwgYXNzaWdubWVudDogYGlmIChjbWQua2V5ZmxhZ3MgXHUwMDI2IFRDUF9BT19LRVlGX0lGSU5ERVgpIGwzaW5kZXggPSBjbWQuaWZpbmRleDtgLiAgVGhpcyBlbnN1cmVzIHRoYXQgd2hlbiB0aGUgYFRDUF9BT19LRVlGX0lGSU5ERVhgIGZsYWcgaXMgc2V0LCBgbDNpbmRleGAgaXMgbm93IGNvcnJlY3RseSBzZXQgdG8gdGhlIHVzZXItcHJvdmlkZWQgaW50ZXJmYWNlIGluZGV4LCBhcyBleHBlY3RlZC5cblxuSeKAmXZlIHJldmlld2VkIHRoZSBjb2RlLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkLCBiZWNhdXNlIGBjbWRgIGlzIGZ1bGx5IGluaXRpYWxpemVkIGJ5IGBjb3B5X3N0cnVjdF9mcm9tX3NvY2twdHJgLiAgYGwzaW5kZXhgIGlzIGluaXRpYWxpemVkIHRvIDAgYW5kIHRoZW4gcG9zc2libHkgdXBkYXRlZC4gTm8gaW5mb3JtYXRpb24gbGVha2FnZSBvciBvdXQtb2YtYm91bmRzIGFjY2VzcyBpcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2guXG5cbkkgYWxzbyBzZWUgYSByZWxhdGVkIGNoYW5nZSBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvc29jay5jYCB3aXRoaW4gdGhlIGB0ZXN0X2dldF9vbmVfYW9gIGZ1bmN0aW9uLiBUaGlzIHNlbGZ0ZXN0IGNvZGUgaGFzIGJlZW4gdXBkYXRlZCB0byBzZXQgdGhlIGBrZXlmbGFnc2AgYW5kIGBpZmluZGV4YCB2YWx1ZXMgZm9yIHRoZSB0ZXN0IHRvIGVuc3VyZSB0aGF0IHRoZSBjb3JyZWN0IGxvZ2ljIGlzIG5vdyB0ZXN0ZWQsIGFuZCBpdCdzIGlzb2xhdGVkIHRvIHRoZSB0ZXN0aW5nIGhhcm5lc3MuXG5cbkdpdmVuIHRoZXNlIGNvbnNpZGVyYXRpb25zLCBJIGRvbid0IHNlZSBhbnkgbmVlZCBmb3IgS01TQU4gdG8gYmUgaW52b2x2ZWQgaGVyZS4gVGhlIGJ1ZyBpcyBwdXJlbHkgYSBsb2dpYyBlcnJvciwgYW5kIHRoZSBmaXggZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gdnVsbmVyYWJpbGl0aWVzLiBLQVNBTiBpcyBhbHNvIGxpa2VseSB1bm5lY2Vzc2FyeSBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBidWcuIFN0YW5kYXJkIHRlc3RpbmcgbWV0aG9kcyBzaG91bGQgYmUgc3VmZmljaWVudCB0byB2YWxpZGF0ZSB0aGUgZml4LiBUaGUgYGNvcHlfc3RydWN0X2Zyb21fc29ja3B0cmAgZnVuY3Rpb24gbWFrZXMgaXQgaGlnaGx5IHVubGlrZWx5IHRoYXQgdXNlcnNwYWNlIGlzIHByb3ZpZGluZyBnYXJiYWdlIGRhdGEuXG5cbkVzc2VudGlhbGx5LCB0aGlzIGlzIGEgY2xlYW4sIHRhcmdldGVkIGxvZ2ljIGZpeCB0aGF0IG1ha2VzIHRoZSBgVENQX0FPX0RFTF9LRVlgIGZ1bmN0aW9uYWxpdHkgYmVoYXZlIGFzIGludGVuZGVkIHdoZW4gZGVhbGluZyB3aXRoIGludGVyZmFjZS1zcGVjaWZpYyBrZXlzLiBJJ20gc2F0aXNmaWVkIHRoYXQgdGhpcyBjaGFuZ2UgaXMgc2FmZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA4NTUsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNTo1ODoyMC44OTIyNjE0MTNaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNTgyMzU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvcHlfc3RydWN0X2Zyb21fc29ja3B0clwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L3NvY2twdHIuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3NvY2twdHIuaD03Nz1zdGF0aWMgaW5saW5lIGludCBjb3B5X3NhZmVfZnJvbV9zb2NrcHRyKHZvaWQgKmRzdCwgc2l6ZV90IGtzaXplLFxcbi0tXFxuaW5jbHVkZS9saW51eC9zb2NrcHRyLmgtODYtXFxuaW5jbHVkZS9saW51eC9zb2NrcHRyLmg6ODc6c3RhdGljIGlubGluZSBpbnQgY29weV9zdHJ1Y3RfZnJvbV9zb2NrcHRyKHZvaWQgKmRzdCwgc2l6ZV90IGtzaXplLFxcbmluY2x1ZGUvbGludXgvc29ja3B0ci5oLTg4LVxcdFxcdHNvY2twdHJfdCBzcmMsIHNpemVfdCB1c2l6ZSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTU6NTg6MjAuOTQ0ODUxNjkxWiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNTEzMDQ2NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiBgY29weV9zdHJ1Y3RfZnJvbV9zb2NrcHRyYDpcblxuKipEaXNzZWN0aW5nIGBjb3B5X3N0cnVjdF9mcm9tX3NvY2twdHJgKipcblxuQWxyaWdodCwgc28gdGhlIGZpcnN0IHRoaW5nIEknbSBkb2luZyBpcyBnZXR0aW5nIG15c2VsZiBmYW1pbGlhciB3aXRoIGBjb3B5X3N0cnVjdF9mcm9tX3NvY2twdHJgLiBUaGF0IG5hbWUgYWxvbmUgZ2l2ZXMgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIGNhbiBpbW1lZGlhdGVseSBpbmZlciB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgaW52b2x2ZWQgaW4sIHVuc3VycHJpc2luZ2x5LCBjb3B5aW5nIGEgc3RydWN0dXJlIGZyb20gYSBzb2NrZXQgcG9pbnRlci4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbnRleHQuIFdoYXQga2luZCBvZiBzb2NrZXQ/IFdoYXQncyB0aGUgc291cmNlIHN0cnVjdHVyZT8gV2hhdCdzIHRoZSBkZXN0aW5hdGlvbj8gQXJlIHRoZXJlIGFueSBkYXRhIGNvbnZlcnNpb25zIGhhcHBlbmluZz8gQW55IG1lbW9yeSBhbGxvY2F0aW9uIGNvbnNpZGVyYXRpb25zPyBJJ2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBpc3N1ZXMgcmVsYXRlZCB0byBzb2NrZXQgY29tbXVuaWNhdGlvbiwgYW5kIG1lbW9yeSBzYWZldHkuIE9mZiB0aGUgdG9wIG9mIG15IGhlYWQsIEknbSB0aGlua2luZyBhYm91dDogcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgYm91bmRhcnkgY29uZGl0aW9ucywgYW5kIGVycm9yIGhhbmRsaW5nLiBJJ2xsIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgaG93IHRoZSBmdW5jdGlvbiBoYW5kbGVzIGRpZmZlcmVudCBzb2NrZXQgdHlwZXMsIGRhdGEgc2l6ZXMsIGFuZCBwb3RlbnRpYWwgZXJyb3JzIGR1cmluZyB0aGUgZGF0YSB0cmFuc2Zlci4gSSdsbCBiZSBzY3J1dGluaXppbmcgdGhlIHJldHVybiB2YWx1ZSBhcyB3ZWxsLiBXaGF0IGRvZXMgaXQgc2lnbmlmeSBpbiB0ZXJtcyBvZiBzdWNjZXNzIG9yIGZhaWx1cmU/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMzE2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTU6NTg6MjQuMjk2MTU4NjM3WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0MTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvc29ja3B0ci5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDgwOlxcdFxcdGlmIChvcHRsZW4gXFx1MDAzYyBrc2l6ZSlcXG4gIDgxOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAgODI6XFx0XFx0aWYgKGNvcHlfZnJvbV9zb2NrcHRyKGRzdCwgb3B0dmFsLCBrc2l6ZSkpXFxuICA4MzpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gIDg0OlxcdFxcdHJldHVybiAwO1xcbiAgODU6XFx0fVxcbiAgODY6XFx0XFxuICA4NzpcXHRzdGF0aWMgaW5saW5lIGludCBjb3B5X3N0cnVjdF9mcm9tX3NvY2twdHIodm9pZCAqZHN0LCBzaXplX3Qga3NpemUsXFxuICA4ODpcXHRcXHRcXHRzb2NrcHRyX3Qgc3JjLCBzaXplX3QgdXNpemUpXFxuICA4OTpcXHR7XFxuICA5MDpcXHRcXHRpZiAoIXNvY2twdHJfaXNfa2VybmVsKHNyYykpXFxuICA5MTpcXHRcXHRcXHRyZXR1cm4gY29weV9zdHJ1Y3RfZnJvbV91c2VyKGRzdCwga3NpemUsIHNyYy51c2VyLCB1c2l6ZSk7XFxuICA5MjpcXHRcXG4gIDkzOlxcdFxcdHJldHVybiBjb3B5X3N0cnVjdF9mcm9tX2JvdW5jZV9idWZmZXIoZHN0LCBrc2l6ZSwgc3JjLmtlcm5lbCwgdXNpemUpO1xcbiAgOTQ6XFx0fVxcbiAgOTU6XFx0XFxuICA5NjpcXHRzdGF0aWMgaW5saW5lIGludCBjb3B5X3RvX3NvY2twdHJfb2Zmc2V0KHNvY2twdHJfdCBkc3QsIHNpemVfdCBvZmZzZXQsXFxuICA5NzpcXHRcXHRcXHRjb25zdCB2b2lkICpzcmMsIHNpemVfdCBzaXplKVxcbiAgOTg6XFx0e1xcbiAgOTk6XFx0XFx0aWYgKCFzb2NrcHRyX2lzX2tlcm5lbChkc3QpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNTo1ODoyNC4yOTYyMzQyODdaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM1NzkzNTM5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgY2FyZWZ1bGx5IHJldmlld2VkIHRoaXMgcGF0Y2guIFRoZSBrZXkgdGhpbmcgSSdtIHNlZWluZyBpcyB0aGF0IGJvdGggYGNvcHlfc3RydWN0X2Zyb21fdXNlcmAgYW5kIGBjb3B5X3N0cnVjdF9mcm9tX2JvdW5jZV9idWZmZXJgIGVuc3VyZSB0aGF0IHRoZSB0YXJnZXQgYnVmZmVyIGlzICphbHdheXMqIGluaXRpYWxpemVkLiBUaGlzIG1lYW5zLCBpbXBvcnRhbnRseSwgdGhhdCB0aGUgYGNtZGAgc3RydWN0dXJlIGlzIGd1YXJhbnRlZWQgdG8gYmUgZnVsbHkgaW5pdGlhbGl6ZWQsIGV2ZW4gaWYgdGhlIHVzZXItc3VwcGxpZWQgZGF0YSBpcyBzbWFsbGVyIHRoYW4gdGhlIHRhcmdldCBidWZmZXIgc2l6ZSwgYXMgdGhlIHN0cnVjdHVyZSB3aWxsIGJlIHplcm8tcGFkZGVkLiBUaGVyZWZvcmUsIEkgY2FuIGNvbmZpZGVudGx5IHNheSB0aGlzIHBhdGNoIGlzbid0IGludHJvZHVjaW5nIGFueSBuZXcgaW5zdGFuY2VzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCB3aGljaCBpcyBhIGNyaXRpY2FsIGNvbmNlcm4gdG8gZmxhZy5cblxuRXNzZW50aWFsbHksIHRoaXMgaXMgYSBjbGVhbiBsb2dpYyBidWcgZml4LiBUaGUgY29yZSBvZiB0aGUgcHJvYmxlbSBpcyB0aGF0IGBsM2luZGV4YCB3YXNuJ3QgYmVpbmcgY29ycmVjdGx5IHBvcHVsYXRlZCB3aXRoIHRoZSB2YWx1ZSBmcm9tIGBjbWQuaWZpbmRleGAgd2hlbiB0aGUgYFRDUF9BT19LRVlGX0lGSU5ERVhgIGZsYWcgd2FzIGFjdGl2ZSB3aXRoaW4gYGNtZC5rZXlmbGFnc2AuIFRoYXQncyB0aGUgY3J1eCBvZiBpdC5cblxuR2l2ZW4gdGhpcyBhbmFseXNpcywgSSdtIGdvaW5nIHRvIHNldCBgTmVlZHNLTVNBTj1mYWxzZWAgb24gdGhpcy4gSSdsbCBpbmNsdWRlIGEgY2xlYXIgZXhwbGFuYXRpb24sIGxpa2VseSBhbG9uZyB0aGUgbGluZXMgb2YgXCJUaGlzIHBhdGNoIGFkZHJlc3NlcyBhIGxvZ2ljIGVycm9yIHdoZXJlIGBsM2luZGV4YCB3YXMgbm90IGNvcnJlY3RseSBzZXQgYmFzZWQgb24gYGNtZC5pZmluZGV4YCB3aGVuIGEgc3BlY2lmaWMga2V5IGZsYWcgd2FzIGVuYWJsZWQuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGluc3RhbmNlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBhcyB0aGUgZGVzdGluYXRpb24gYnVmZmVyIGlzIGd1YXJhbnRlZWQgdG8gYmUgaW5pdGlhbGl6ZWQuXCIgVGhhdCBzaG91bGQgYmUgc3VmZmljaWVudCBmb3IgdGhlIHJldmlld2VyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjkwMCwiT3V0cHV0VG9rZW5zIjoxNjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNTo1ODoyOS42NTQxNzM1NloiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgaW4gYHRjcF9hb19kZWxfY21kYCB3aGVyZSB0aGUgYGwzaW5kZXhgIHZhcmlhYmxlIHdhcyBub3QgYmVpbmcgcG9wdWxhdGVkIGZyb20gdGhlIHVzZXItcHJvdmlkZWQgYGNtZC5pZmluZGV4YCB3aGVuIHRoZSBgVENQX0FPX0tFWUZfSUZJTkRFWGAgZmxhZyB3YXMgc2V0LiBUaGUgYGNtZGAgc3RydWN0dXJlIGlzIHNhZmVseSBjb3BpZWQgZnJvbSB1c2Vyc3BhY2UgdXNpbmcgYGNvcHlfc3RydWN0X2Zyb21fc29ja3B0cmAsIHdoaWNoIGd1YXJhbnRlZXMgdGhhdCB0aGUgc3RydWN0dXJlIGlzIGZ1bGx5IGluaXRpYWxpemVkICh6ZXJvLXBhZGRlZCBpZiB0aGUgdXNlcnNwYWNlIHN0cnVjdHVyZSBpcyBzbWFsbGVyKS4gVGhlIHBhdGNoIG9ubHkgYWRkcyBhIGNvbmRpdGlvbmFsIGFzc2lnbm1lbnQgb2YgYW4gaW50ZWdlciB2YXJpYWJsZSBhbmQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2Vyc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgaW4gYHRjcF9hb19kZWxfY21kYCB3aGVyZSB0aGUgYGwzaW5kZXhgIHZhcmlhYmxlIHdhcyBub3QgYmVpbmcgcG9wdWxhdGVkIGZyb20gdGhlIHVzZXItcHJvdmlkZWQgYGNtZC5pZmluZGV4YCB3aGVuIHRoZSBgVENQX0FPX0tFWUZfSUZJTkRFWGAgZmxhZyB3YXMgc2V0LiBUaGUgYGNtZGAgc3RydWN0dXJlIGlzIHNhZmVseSBjb3BpZWQgZnJvbSB1c2Vyc3BhY2UgdXNpbmcgYGNvcHlfc3RydWN0X2Zyb21fc29ja3B0cmAsIHdoaWNoIGd1YXJhbnRlZXMgdGhhdCB0aGUgc3RydWN0dXJlIGlzIGZ1bGx5IGluaXRpYWxpemVkICh6ZXJvLXBhZGRlZCBpZiB0aGUgdXNlcnNwYWNlIHN0cnVjdHVyZSBpcyBzbWFsbGVyKS4gVGhlIHBhdGNoIG9ubHkgYWRkcyBhIGNvbmRpdGlvbmFsIGFzc2lnbm1lbnQgb2YgYW4gaW50ZWdlciB2YXJpYWJsZSBhbmQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2Vyc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowwrkrc[1] Phase: Succeeded StartedAt: 2026-08-21 15:58:40 +0000 UTC FinishedAt: 2026-08-21 15:58:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrkrc[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-21 15:58:40 +0000 UTC FinishedAt: 2026-08-21 15:58:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrkrc[2] Phase: Succeeded StartedAt: 2026-08-21 15:58:40 +0000 UTC FinishedAt: 2026-08-21 19:39:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrkrc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_parse_ao","tcp_v4_parse_ao","tcp_v6_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"2ff8e8bf-62ad-42b5-bf62-fb8a5bbb8a6c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-21 15:58:40 +0000 UTC FinishedAt: 2026-08-21 19:39:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_parse_ao","tcp_v4_parse_ao","tcp_v6_parse_ao"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"2ff8e8bf-62ad-42b5-bf62-fb8a5bbb8a6c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowwrkrc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_parse_ao","tcp_v4_parse_ao","tcp_v6_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"2ff8e8bf-62ad-42b5-bf62-fb8a5bbb8a6c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-21 15:58:40 +0000 UTC FinishedAt: 2026-08-21 15:58:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrkrc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_parse_ao","tcp_v4_parse_ao","tcp_v6_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"2ff8e8bf-62ad-42b5-bf62-fb8a5bbb8a6c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-21 15:58:40 +0000 UTC FinishedAt: 2026-08-21 15:58:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowwrkrc/series-workflowwrkrc-convert-artifact-2922995653/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwrkrc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_parse_ao","tcp_v4_parse_ao","tcp_v6_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"2ff8e8bf-62ad-42b5-bf62-fb8a5bbb8a6c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-21 15:58:50 +0000 UTC FinishedAt: 2026-08-21 16:15:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrkrc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_parse_ao","tcp_v4_parse_ao","tcp_v6_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"2ff8e8bf-62ad-42b5-bf62-fb8a5bbb8a6c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-21 15:58:50 +0000 UTC FinishedAt: 2026-08-21 16:15:40 +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:*e865273e-83ea-427f-b853-be1bcca994e9,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-workflowwrkrc/series-workflowwrkrc-convert-artifact-2922995653/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": "f73d1dc2-ba5c-44bb-8fad-3f9038dcdc40", "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-workflowwrkrc/series-workflowwrkrc-build-action-1429866091/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwrkrc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_parse_ao","tcp_v4_parse_ao","tcp_v6_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"2ff8e8bf-62ad-42b5-bf62-fb8a5bbb8a6c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-21 15:58:50 +0000 UTC FinishedAt: 2026-08-21 16:15:30 +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:*e865273e-83ea-427f-b853-be1bcca994e9,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-workflowwrkrc/series-workflowwrkrc-convert-artifact-2922995653/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": "f73d1dc2-ba5c-44bb-8fad-3f9038dcdc40", "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-workflowwrkrc/series-workflowwrkrc-build-action-1429866091/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwrkrc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_parse_ao","tcp_v4_parse_ao","tcp_v6_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"2ff8e8bf-62ad-42b5-bf62-fb8a5bbb8a6c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-21 16:15:40 +0000 UTC FinishedAt: 2026-08-21 16:15:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrkrc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_parse_ao","tcp_v4_parse_ao","tcp_v6_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"2ff8e8bf-62ad-42b5-bf62-fb8a5bbb8a6c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-21 16:15:40 +0000 UTC FinishedAt: 2026-08-21 16:15:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrkrc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_parse_ao","tcp_v4_parse_ao","tcp_v6_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"2ff8e8bf-62ad-42b5-bf62-fb8a5bbb8a6c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-21 16:15:40 +0000 UTC FinishedAt: 2026-08-21 16:15:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrkrc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_parse_ao","tcp_v4_parse_ao","tcp_v6_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"2ff8e8bf-62ad-42b5-bf62-fb8a5bbb8a6c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-21 16:15:40 +0000 UTC FinishedAt: 2026-08-21 16:15:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"2ff8e8bf-62ad-42b5-bf62-fb8a5bbb8a6c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowwrkrc/series-workflowwrkrc-convert-artifact-734581408/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwrkrc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_parse_ao","tcp_v4_parse_ao","tcp_v6_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"2ff8e8bf-62ad-42b5-bf62-fb8a5bbb8a6c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-21 16:15:50 +0000 UTC FinishedAt: 2026-08-21 16:17:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrkrc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_parse_ao","tcp_v4_parse_ao","tcp_v6_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"2ff8e8bf-62ad-42b5-bf62-fb8a5bbb8a6c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-21 16:15:50 +0000 UTC FinishedAt: 2026-08-21 16:17:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f73d1dc2-ba5c-44bb-8fad-3f9038dcdc40,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-workflowwrkrc/series-workflowwrkrc-build-action-1429866091/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-workflowwrkrc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_parse_ao","tcp_v4_parse_ao","tcp_v6_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"2ff8e8bf-62ad-42b5-bf62-fb8a5bbb8a6c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-21 16:17:54 +0000 UTC FinishedAt: 2026-08-21 16:17:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrkrc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_parse_ao","tcp_v4_parse_ao","tcp_v6_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"2ff8e8bf-62ad-42b5-bf62-fb8a5bbb8a6c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-21 16:17:54 +0000 UTC FinishedAt: 2026-08-21 16:17:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrkrc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_parse_ao","tcp_v4_parse_ao","tcp_v6_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"2ff8e8bf-62ad-42b5-bf62-fb8a5bbb8a6c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-21 16:17:54 +0000 UTC FinishedAt: 2026-08-21 16:34:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrkrc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_parse_ao","tcp_v4_parse_ao","tcp_v6_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"2ff8e8bf-62ad-42b5-bf62-fb8a5bbb8a6c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-21 16:17:54 +0000 UTC FinishedAt: 2026-08-21 16:34:36 +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:*e865273e-83ea-427f-b853-be1bcca994e9,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-workflowwrkrc/series-workflowwrkrc-convert-artifact-734581408/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": "40520423-f524-4eb6-b421-f16d70381b41", "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-workflowwrkrc/series-workflowwrkrc-build-action-1407830108/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwrkrc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_parse_ao","tcp_v4_parse_ao","tcp_v6_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"2ff8e8bf-62ad-42b5-bf62-fb8a5bbb8a6c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-21 16:17:54 +0000 UTC FinishedAt: 2026-08-21 16:34:26 +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:*e865273e-83ea-427f-b853-be1bcca994e9,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-workflowwrkrc/series-workflowwrkrc-convert-artifact-734581408/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": "40520423-f524-4eb6-b421-f16d70381b41", "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-workflowwrkrc/series-workflowwrkrc-build-action-1407830108/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwrkrc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_parse_ao","tcp_v4_parse_ao","tcp_v6_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"2ff8e8bf-62ad-42b5-bf62-fb8a5bbb8a6c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-21 16:34:36 +0000 UTC FinishedAt: 2026-08-21 16:34:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrkrc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_parse_ao","tcp_v4_parse_ao","tcp_v6_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"2ff8e8bf-62ad-42b5-bf62-fb8a5bbb8a6c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-21 16:34:36 +0000 UTC FinishedAt: 2026-08-21 16:34:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrkrc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_parse_ao","tcp_v4_parse_ao","tcp_v6_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"2ff8e8bf-62ad-42b5-bf62-fb8a5bbb8a6c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-21 16:34:36 +0000 UTC FinishedAt: 2026-08-21 16:36:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrkrc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_parse_ao","tcp_v4_parse_ao","tcp_v6_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"2ff8e8bf-62ad-42b5-bf62-fb8a5bbb8a6c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-21 16:34:36 +0000 UTC FinishedAt: 2026-08-21 16:36:14 +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:*40520423-f524-4eb6-b421-f16d70381b41,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-workflowwrkrc/series-workflowwrkrc-build-action-1407830108/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-workflowwrkrc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_parse_ao","tcp_v4_parse_ao","tcp_v6_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"2ff8e8bf-62ad-42b5-bf62-fb8a5bbb8a6c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-21 16:36:24 +0000 UTC FinishedAt: 2026-08-21 19:39:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrkrc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_parse_ao","tcp_v4_parse_ao","tcp_v6_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"2ff8e8bf-62ad-42b5-bf62-fb8a5bbb8a6c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-21 16:36:24 +0000 UTC FinishedAt: 2026-08-21 19:39:31 +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":["tcp_parse_ao","tcp_v4_parse_ao","tcp_v6_parse_ao"],"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:*f73d1dc2-ba5c-44bb-8fad-3f9038dcdc40,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*40520423-f524-4eb6-b421-f16d70381b41,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-workflowwrkrc/series-workflowwrkrc-build-action-1429866091/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-workflowwrkrc/series-workflowwrkrc-build-action-1407830108/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowwrkrc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_parse_ao","tcp_v4_parse_ao","tcp_v6_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"2ff8e8bf-62ad-42b5-bf62-fb8a5bbb8a6c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-21 16:36:24 +0000 UTC FinishedAt: 2026-08-21 16:36:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrkrc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_parse_ao","tcp_v4_parse_ao","tcp_v6_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"2ff8e8bf-62ad-42b5-bf62-fb8a5bbb8a6c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-21 16:36:24 +0000 UTC FinishedAt: 2026-08-21 16:36:29 +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":["tcp_parse_ao","tcp_v4_parse_ao","tcp_v6_parse_ao"],"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-workflowwrkrc/series-workflowwrkrc-convert-artifact-2335413753/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwrkrc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_parse_ao","tcp_v4_parse_ao","tcp_v6_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"2ff8e8bf-62ad-42b5-bf62-fb8a5bbb8a6c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-21 16:36:24 +0000 UTC FinishedAt: 2026-08-21 16:36:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrkrc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_parse_ao","tcp_v4_parse_ao","tcp_v6_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"2ff8e8bf-62ad-42b5-bf62-fb8a5bbb8a6c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-21 16:36:24 +0000 UTC FinishedAt: 2026-08-21 16:36:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrkrc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_parse_ao","tcp_v4_parse_ao","tcp_v6_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"2ff8e8bf-62ad-42b5-bf62-fb8a5bbb8a6c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-21 16:36:25 +0000 UTC FinishedAt: 2026-08-21 16:36:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrkrc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_parse_ao","tcp_v4_parse_ao","tcp_v6_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"2ff8e8bf-62ad-42b5-bf62-fb8a5bbb8a6c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-21 16:36:35 +0000 UTC FinishedAt: 2026-08-21 19:39:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrkrc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_parse_ao","tcp_v4_parse_ao","tcp_v6_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO","NET_VRF"],"series_id":"2ff8e8bf-62ad-42b5-bf62-fb8a5bbb8a6c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-21 16:36:35 +0000 UTC FinishedAt: 2026-08-21 19:39:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f73d1dc2-ba5c-44bb-8fad-3f9038dcdc40,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*40520423-f524-4eb6-b421-f16d70381b41,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-workflowwrkrc/series-workflowwrkrc-build-action-1429866091/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-workflowwrkrc/series-workflowwrkrc-build-action-1407830108/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-workflowwrkrc/series-workflowwrkrc-convert-artifact-2335413753/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,}