Name: series-workflow5f7ds Phase: Succeeded StartedAt: 2026-06-30 22:54:24 +0000 UTC FinishedAt: 2026-07-01 00:15:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5f7ds[0] Phase: Succeeded StartedAt: 2026-06-30 22:54:24 +0000 UTC FinishedAt: 2026-06-30 23:07:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5f7ds[0].run-triage Phase: Succeeded StartedAt: 2026-06-30 22:54:24 +0000 UTC FinishedAt: 2026-06-30 23:07:56 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "53435562a725962e4de0c29653223129ba11643a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "NET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "53435562a725962e4de0c29653223129ba11643a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "NET" ], "series_id": "4e0fbfa5-90da-40a0-a8aa-27c07a338031" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "may_update_sockmap", "check_map_func_compatibility" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "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+CgkJCTx0ZD4yMDI2LzA2LzMwIDIzOjA1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21heV91cGRhdGVfc29ja21hcCYjMzQ7LAogICAgJiMzNDtjaGVja19tYXBfZnVuY19jb21wYXRpYmlsaXR5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlc3RyaWN0cyBjZXJ0YWluIEJQRiBwcm9ncmFtIHR5cGVzIGZyb20gdXBkYXRpbmcgc29ja21hcHMgaW4gdGhlIEJQRiB2ZXJpZmllci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiB2ZXJpZmllciBsb2dpYyB0aGF0IGFmZmVjdHMgd2hhdCBCUEYgcHJvZ3JhbXMgYXJlIGFsbG93ZWQgdG8gZG8uIEl0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSB2ZXJpZmllciBjb3JyZWN0bHkgcmVqZWN0cyBpbnZhbGlkIHByb2dyYW1zIGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHJlZ3Jlc3Npb25zIG9yIGJ5cGFzc2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDIzOjA1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZmM3ZGU3NmFkMWY1MTNlMDJlZGZlMmQwOTIyNmYwZGVlNzhlMDM5MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVuIDMwIDIzOjA1OjQ0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggMjVhZWE0MjcxY2QwODkuLjgzZWEzYjMzZmY2NzljIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbkBAIC04NDg4LDEyICYjNDM7ODQ4OCw3IEBAIHN0YXRpYyBib29sIG1heV91cGRhdGVfc29ja21hcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgZnVuY19pZClcbiBcdFx0aWYgKGZ1bmNfaWQgPT0gQlBGX0ZVTkNfbWFwX2RlbGV0ZV9lbGVtKVxuIFx0XHRcdHJldHVybiB0cnVlO1xuIFx0XHRicmVhaztcbi1cdGNhc2UgQlBGX1BST0dfVFlQRV9TT0NLRVRfRklMVEVSOlxuLVx0Y2FzZSBCUEZfUFJPR19UWVBFX1NDSEVEX0NMUzpcbi1cdGNhc2UgQlBGX1BST0dfVFlQRV9TQ0hFRF9BQ1Q6XG4tXHRjYXNlIEJQRl9QUk9HX1RZUEVfWERQOlxuIFx0Y2FzZSBCUEZfUFJPR19UWVBFX1NLX1JFVVNFUE9SVDpcbi1cdGNhc2UgQlBGX1BST0dfVFlQRV9GTE9XX0RJU1NFQ1RPUjpcbiBcdGNhc2UgQlBGX1BST0dfVFlQRV9TS19MT09LVVA6XG4gXHRcdHJldHVybiB0cnVlO1xuIFx0ZGVmYXVsdDpcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9mZXhpdF9icGYyYnBmLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9mZXhpdF9icGYyYnBmLmNcbmluZGV4IDkyYzIwODAzZWE3NjVkLi5kM2E5NTQxNThjMzMyNyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ZleGl0X2JwZjJicGYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZmV4aXRfYnBmMmJwZi5jXG5AQCAtMzM2LDE3ICYjNDM7MzM2LDYgQEAgc3RhdGljIHZvaWQgdGVzdF9mbW9kX3JldF9mcmVwbGFjZSh2b2lkKVxuIH1cbiBcbiBcbi1zdGF0aWMgdm9pZCB0ZXN0X2Z1bmNfc29ja21hcF91cGRhdGUodm9pZClcbi17XG4tXHRjb25zdCBjaGFyICpwcm9nX25hbWVbXSA9IHtcbi1cdFx0XCYjMzQ7ZnJlcGxhY2UvY2xzX3JlZGlyZWN0XCYjMzQ7LFxuLVx0fTtcbi1cdHRlc3RfZmV4aXRfYnBmMmJwZl9jb21tb24oXCYjMzQ7Li9mcmVwbGFjZV9jbHNfcmVkaXJlY3QuYnBmLm9cJiMzNDssXG4tXHRcdFx0XHQgIFwmIzM0Oy4vdGVzdF9jbHNfcmVkaXJlY3QuYnBmLm9cJiMzNDssXG4tXHRcdFx0XHQgIEFSUkFZX1NJWkUocHJvZ19uYW1lKSxcbi1cdFx0XHRcdCAgcHJvZ19uYW1lLCBmYWxzZSwgTlVMTCk7XG4tfVxuLVxuIHN0YXRpYyB2b2lkIHRlc3RfZnVuY19yZXBsYWNlX3ZvaWQodm9pZClcbiB7XG4gXHRjb25zdCBjaGFyICpwcm9nX25hbWVbXSA9IHtcbkBAIC01OTksOCAmIzQzOzU4OCw2IEBAIHZvaWQgc2VyaWFsX3Rlc3RfZmV4aXRfYnBmMmJwZih2b2lkKVxuIFx0XHR0ZXN0X2Z1bmNfcmVwbGFjZSgpO1xuIFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7ZnVuY19yZXBsYWNlX3ZlcmlmeVwmIzM0OykpXG4gXHRcdHRlc3RfZnVuY19yZXBsYWNlX3ZlcmlmeSgpO1xuLVx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7ZnVuY19zb2NrbWFwX3VwZGF0ZVwmIzM0OykpXG4tXHRcdHRlc3RfZnVuY19zb2NrbWFwX3VwZGF0ZSgpO1xuIFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7ZnVuY19yZXBsYWNlX3JldHVybl9jb2RlXCYjMzQ7KSlcbiBcdFx0dGVzdF9mdW5jX3JlcGxhY2VfcmV0dXJuX2NvZGUoKTtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O2Z1bmNfbWFwX3Byb2dfY29tcGF0aWJpbGl0eVwmIzM0OykpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9iYXNpYy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9iYXNpYy5jXG5pbmRleCBjYjMyMjk3MTFmOTNhMy4uMzNmNzg4ZTI3ODZkYWUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2Jhc2ljLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfYmFzaWMuY1xuQEAgLTcsNyAmIzQzOzcsNiBAQFxuIFxuICNpbmNsdWRlIFwmIzM0O3Rlc3RfcHJvZ3MuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3Rlc3Rfc2ttc2dfbG9hZF9oZWxwZXJzLnNrZWwuaFwmIzM0O1xuLSNpbmNsdWRlIFwmIzM0O3Rlc3Rfc29ja21hcF91cGRhdGUuc2tlbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7dGVzdF9zb2NrbWFwX2ludmFsaWRfdXBkYXRlLnNrZWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3Rlc3Rfc29ja21hcF9za2JfdmVyZGljdF9hdHRhY2guc2tlbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7dGVzdF9zb2NrbWFwX3Byb2dzX3F1ZXJ5LnNrZWwuaFwmIzM0O1xuQEAgLTIzNSw1MyAmIzQzOzIzNCw2IEBAIHN0YXRpYyB2b2lkIHRlc3Rfc2ttc2dfaGVscGVyc193aXRoX2xpbmsoZW51bSBicGZfbWFwX3R5cGUgbWFwX3R5cGUpXG4gXHR0ZXN0X3NrbXNnX2xvYWRfaGVscGVyc19fZGVzdHJveShza2VsKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgdGVzdF9zb2NrbWFwX3VwZGF0ZShlbnVtIGJwZl9tYXBfdHlwZSBtYXBfdHlwZSlcbi17XG4tXHRpbnQgZXJyLCBwcm9nLCBzcmM7XG4tXHRzdHJ1Y3QgdGVzdF9zb2NrbWFwX3VwZGF0ZSAqc2tlbDtcbi1cdHN0cnVjdCBicGZfbWFwICpkc3RfbWFwO1xuLVx0Y29uc3QgX191MzIgemVybyA9IDA7XG4tXHRjaGFyIGR1bW15WzE0XSA9IHswfTtcbi1cdExJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCB0b3B0cyxcbi1cdFx0LmRhdGFfaW4gPSBkdW1teSxcbi1cdFx0LmRhdGFfc2l6ZV9pbiA9IHNpemVvZihkdW1teSksXG4tXHRcdC5yZXBlYXQgPSAxLFxuLVx0KTtcbi1cdF9fczY0IHNrO1xuLVxuLVx0c2sgPSBjb25uZWN0ZWRfc29ja2V0X3Y0KCk7XG4tXHRpZiAoIUFTU0VSVF9ORVEoc2ssIC0xLCBcJiMzNDtjb25uZWN0ZWRfc29ja2V0X3Y0XCYjMzQ7KSlcbi1cdFx0cmV0dXJuO1xuLVxuLVx0c2tlbCA9IHRlc3Rfc29ja21hcF91cGRhdGVfX29wZW5fYW5kX2xvYWQoKTtcbi1cdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcJiMzNDtvcGVuX2FuZF9sb2FkXCYjMzQ7KSlcbi1cdFx0Z290byBjbG9zZV9zaztcbi1cbi1cdHByb2cgPSBicGZfcHJvZ3JhbV9fZmQoc2tlbC1cdTAwM2Vwcm9ncy5jb3B5X3NvY2tfbWFwKTtcbi1cdHNyYyA9IGJwZl9tYXBfX2ZkKHNrZWwtXHUwMDNlbWFwcy5zcmMpO1xuLVx0aWYgKG1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9TT0NLTUFQKVxuLVx0XHRkc3RfbWFwID0gc2tlbC1cdTAwM2VtYXBzLmRzdF9zb2NrX21hcDtcbi1cdGVsc2Vcbi1cdFx0ZHN0X21hcCA9IHNrZWwtXHUwMDNlbWFwcy5kc3Rfc29ja19oYXNoO1xuLVxuLVx0ZXJyID0gYnBmX21hcF91cGRhdGVfZWxlbShzcmMsIFx1MDAyNnplcm8sIFx1MDAyNnNrLCBCUEZfTk9FWElTVCk7XG4tXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O3VwZGF0ZV9lbGVtKHNyYylcJiMzNDspKVxuLVx0XHRnb3RvIG91dDtcbi1cbi1cdGVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMocHJvZywgXHUwMDI2dG9wdHMpO1xuLVx0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDt0ZXN0X3J1blwmIzM0OykpXG4tXHRcdGdvdG8gb3V0O1xuLVx0aWYgKCFBU1NFUlRfTkVRKHRvcHRzLnJldHZhbCwgMCwgXCYjMzQ7dGVzdF9ydW4gcmV0dmFsXCYjMzQ7KSlcbi1cdFx0Z290byBvdXQ7XG4tXG4tXHRjb21wYXJlX2Nvb2tpZXMoc2tlbC1cdTAwM2VtYXBzLnNyYywgZHN0X21hcCk7XG4tXG4tb3V0OlxuLVx0dGVzdF9zb2NrbWFwX3VwZGF0ZV9fZGVzdHJveShza2VsKTtcbi1jbG9zZV9zazpcbi1cdGNsb3NlKHNrKTtcbi19XG4tXG4gc3RhdGljIHZvaWQgdGVzdF9zb2NrbWFwX2ludmFsaWRfdXBkYXRlKHZvaWQpXG4ge1xuIFx0c3RydWN0IHRlc3Rfc29ja21hcF9pbnZhbGlkX3VwZGF0ZSAqc2tlbDtcbkBAIC0xMzg1LDEwICYjNDM7MTMzNyw2IEBAIHZvaWQgdGVzdF9zb2NrbWFwX2Jhc2ljKHZvaWQpXG4gXHRcdHRlc3Rfc2ttc2dfaGVscGVycyhCUEZfTUFQX1RZUEVfU09DS01BUCk7XG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDtzb2NraGFzaCBza19tc2cgbG9hZCBoZWxwZXJzXCYjMzQ7KSlcbiBcdFx0dGVzdF9za21zZ19oZWxwZXJzKEJQRl9NQVBfVFlQRV9TT0NLSEFTSCk7XG4tXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDtzb2NrbWFwIHVwZGF0ZVwmIzM0OykpXG4tXHRcdHRlc3Rfc29ja21hcF91cGRhdGUoQlBGX01BUF9UWVBFX1NPQ0tNQVApO1xuLVx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7c29ja2hhc2ggdXBkYXRlXCYjMzQ7KSlcbi1cdFx0dGVzdF9zb2NrbWFwX3VwZGF0ZShCUEZfTUFQX1RZUEVfU09DS0hBU0gpO1xuIFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7c29ja21hcCB1cGRhdGUgaW4gdW5zYWZlIGNvbnRleHRcJiMzNDspKVxuIFx0XHR0ZXN0X3NvY2ttYXBfaW52YWxpZF91cGRhdGUoKTtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O3NvY2ttYXAgY29weVwmIzM0OykpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ZyZXBsYWNlX2Nsc19yZWRpcmVjdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ZyZXBsYWNlX2Nsc19yZWRpcmVjdC5jXG5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDdlOTQ0MTJkNDdhNWNhLi4wMDAwMDAwMDAwMDAwMFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ZyZXBsYWNlX2Nsc19yZWRpcmVjdC5jXG4mIzQzOyYjNDM7JiM0MzsgL2Rldi9udWxsXG5AQCAtMSwzNCAmIzQzOzAsMCBAQFxuLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4tLy8gQ29weXJpZ2h0IChjKSAyMDIwIEZhY2Vib29rXG4tXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvc3RkZGVmLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9icGYuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3BrdF9jbHMuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2JwZi9icGZfZW5kaWFuLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuLVxuLXN0cnVjdCB7XG4tXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1NPQ0tNQVApO1xuLVx0X190eXBlKGtleSwgaW50KTtcbi1cdF9fdHlwZSh2YWx1ZSwgaW50KTtcbi1cdF9fdWludChtYXhfZW50cmllcywgMik7XG4tfSBzb2NrX21hcCBTRUMoXCYjMzQ7Lm1hcHNcJiMzNDspO1xuLVxuLVNFQyhcJiMzNDtmcmVwbGFjZS9jbHNfcmVkaXJlY3RcJiMzNDspXG4taW50IGZyZXBsYWNlX2Nsc19yZWRpcmVjdF90ZXN0KHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbi17XG4tXHRpbnQgcmV0ID0gMDtcbi1cdGNvbnN0IGludCB6ZXJvID0gMDtcbi1cdHN0cnVjdCBicGZfc29jayAqc2s7XG4tXG4tXHRzayA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2c29ja19tYXAsIFx1MDAyNnplcm8pO1xuLVx0aWYgKCFzaylcbi1cdFx0cmV0dXJuIFRDX0FDVF9TSE9UO1xuLVxuLVx0cmV0ID0gYnBmX21hcF91cGRhdGVfZWxlbShcdTAwMjZzb2NrX21hcCwgXHUwMDI2emVybywgc2ssIDApO1xuLVx0YnBmX3NrX3JlbGVhc2Uoc2spO1xuLVxuLVx0cmV0dXJuIHJldCA9PSAwID8gVENfQUNUX09LIDogVENfQUNUX1NIT1Q7XG4tfVxuLVxuLWNoYXIgX2xpY2Vuc2VbXSBTRUMoXCYjMzQ7bGljZW5zZVwmIzM0OykgPSBcJiMzNDtHUExcJiMzNDs7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc29ja21hcF91cGRhdGUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NvY2ttYXBfdXBkYXRlLmNcbmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggNmQ2NGVhNTM2ZTNkODEuLjAwMDAwMDAwMDAwMDAwXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zb2NrbWFwX3VwZGF0ZS5jXG4mIzQzOyYjNDM7JiM0MzsgL2Rldi9udWxsXG5AQCAtMSw0OCAmIzQzOzAsMCBAQFxuLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4tLy8gQ29weXJpZ2h0IChjKSAyMDIwIENsb3VkZmxhcmVcbi0jaW5jbHVkZSBcJiMzNDt2bWxpbnV4LmhcJiMzNDtcbi0jaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuLVxuLXN0cnVjdCB7XG4tXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1NPQ0tNQVApO1xuLVx0X191aW50KG1heF9lbnRyaWVzLCAxKTtcbi1cdF9fdHlwZShrZXksIF9fdTMyKTtcbi1cdF9fdHlwZSh2YWx1ZSwgX191NjQpO1xuLX0gc3JjIFNFQyhcJiMzNDsubWFwc1wmIzM0Oyk7XG4tXG4tc3RydWN0IHtcbi1cdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfU09DS01BUCk7XG4tXHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xuLVx0X190eXBlKGtleSwgX191MzIpO1xuLVx0X190eXBlKHZhbHVlLCBfX3U2NCk7XG4tfSBkc3Rfc29ja19tYXAgU0VDKFwmIzM0Oy5tYXBzXCYjMzQ7KTtcbi1cbi1zdHJ1Y3Qge1xuLVx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9TT0NLSEFTSCk7XG4tXHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xuLVx0X190eXBlKGtleSwgX191MzIpO1xuLVx0X190eXBlKHZhbHVlLCBfX3U2NCk7XG4tfSBkc3Rfc29ja19oYXNoIFNFQyhcJiMzNDsubWFwc1wmIzM0Oyk7XG4tXG4tU0VDKFwmIzM0O3RjXCYjMzQ7KVxuLWludCBjb3B5X3NvY2tfbWFwKHZvaWQgKmN0eClcbi17XG4tXHRzdHJ1Y3QgYnBmX3NvY2sgKnNrO1xuLVx0Ym9vbCBmYWlsZWQgPSBmYWxzZTtcbi1cdF9fdTMyIGtleSA9IDA7XG4tXG4tXHRzayA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2c3JjLCBcdTAwMjZrZXkpO1xuLVx0aWYgKCFzaylcbi1cdFx0cmV0dXJuIFNLX0RST1A7XG4tXG4tXHRpZiAoYnBmX21hcF91cGRhdGVfZWxlbShcdTAwMjZkc3Rfc29ja19tYXAsIFx1MDAyNmtleSwgc2ssIDApKVxuLVx0XHRmYWlsZWQgPSB0cnVlO1xuLVxuLVx0aWYgKGJwZl9tYXBfdXBkYXRlX2VsZW0oXHUwMDI2ZHN0X3NvY2tfaGFzaCwgXHUwMDI2a2V5LCBzaywgMCkpXG4tXHRcdGZhaWxlZCA9IHRydWU7XG4tXG4tXHRicGZfc2tfcmVsZWFzZShzayk7XG4tXHRyZXR1cm4gZmFpbGVkID8gU0tfRFJPUCA6IFNLX1BBU1M7XG4tfVxuLVxuLWNoYXIgX2xpY2Vuc2VbXSBTRUMoXCYjMzQ7bGljZW5zZVwmIzM0OykgPSBcJiMzNDtHUExcJiMzNDs7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3NvY2ttYXBfbXV0YXRlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc29ja21hcF9tdXRhdGUuY1xuaW5kZXggZmU0YjEyMzE4N2I4NmUuLjIwMzMyYTczMWQ0ZTRmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3NvY2ttYXBfbXV0YXRlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9zb2NrbWFwX211dGF0ZS5jXG5AQCAtNzQsNyAmIzQzOzc0LDcgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHRlc3Rfc29ja21hcF9sb29rdXBfYW5kX211dGF0ZSh2b2lkKVxuIH1cbiBcbiBTRUMoXCYjMzQ7YWN0aW9uXCYjMzQ7KVxuLV9fc3VjY2Vzc1xuJiM0MztfX2ZhaWx1cmUgX19tc2coXCYjMzQ7Y2Fubm90IHVwZGF0ZSBzb2NrbWFwIGluIHRoaXMgY29udGV4dFwmIzM0OylcbiBpbnQgdGVzdF9zY2hlZF9hY3Qoc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuIHtcbiBcdHRlc3Rfc29ja21hcF9tdXRhdGUoc2tiLVx1MDAzZXNrKTtcbkBAIC04Miw3ICYjNDM7ODIsNyBAQCBpbnQgdGVzdF9zY2hlZF9hY3Qoc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuIH1cbiBcbiBTRUMoXCYjMzQ7Y2xhc3NpZmllclwmIzM0Oylcbi1fX3N1Y2Nlc3NcbiYjNDM7X19mYWlsdXJlIF9fbXNnKFwmIzM0O2Nhbm5vdCB1cGRhdGUgc29ja21hcCBpbiB0aGlzIGNvbnRleHRcJiMzNDspXG4gaW50IHRlc3Rfc2NoZWRfY2xzKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbiB7XG4gXHR0ZXN0X3NvY2ttYXBfbXV0YXRlKHNrYi1cdTAwM2Vzayk7XG5AQCAtOTAsNyAmIzQzOzkwLDcgQEAgaW50IHRlc3Rfc2NoZWRfY2xzKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbiB9XG4gXG4gU0VDKFwmIzM0O2Zsb3dfZGlzc2VjdG9yXCYjMzQ7KVxuLV9fc3VjY2Vzc1xuJiM0MztfX2ZhaWx1cmUgX19tc2coXCYjMzQ7Y2Fubm90IHVwZGF0ZSBzb2NrbWFwIGluIHRoaXMgY29udGV4dFwmIzM0OylcbiBpbnQgdGVzdF9mbG93X2Rpc3NlY3Rvcl9kZWxldGUoc3RydWN0IF9fc2tfYnVmZiAqc2tiIF9fYWx3YXlzX3VudXNlZClcbiB7XG4gXHR0ZXN0X3NvY2ttYXBfZGVsZXRlKCk7XG5AQCAtOTgsNyAmIzQzOzk4LDcgQEAgaW50IHRlc3RfZmxvd19kaXNzZWN0b3JfZGVsZXRlKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYiBfX2Fsd2F5c191bnVzZWQpXG4gfVxuIFxuIFNFQyhcJiMzNDtmbG93X2Rpc3NlY3RvclwmIzM0Oylcbi1fX2ZhaWx1cmUgX19tc2coXCYjMzQ7cHJvZ3JhbSBvZiB0aGlzIHR5cGUgY2Fubm90IHVzZSBoZWxwZXIgYnBmX3NrX3JlbGVhc2VcJiMzNDspXG4mIzQzO19fZmFpbHVyZSBfX21zZyhcJiMzNDtjYW5ub3QgdXBkYXRlIHNvY2ttYXAgaW4gdGhpcyBjb250ZXh0XCYjMzQ7KVxuIGludCB0ZXN0X2Zsb3dfZGlzc2VjdG9yX3VwZGF0ZShzdHJ1Y3QgX19za19idWZmICpza2IgX19hbHdheXNfdW51c2VkKVxuIHtcbiBcdHRlc3Rfc29ja21hcF9sb29rdXBfYW5kX3VwZGF0ZSgpOyAvKiBubyBhY2Nlc3MgdG8gc2tiLVx1MDAzZXNrICovXG5AQCAtMTQ2LDcgJiM0MzsxNDYsNyBAQCBpbnQgdGVzdF9za19yZXVzZXBvcnQoc3RydWN0IHNrX3JldXNlcG9ydF9tZCAqY3R4KVxuIH1cbiBcbiBTRUMoXCYjMzQ7c29ja2V0XCYjMzQ7KVxuLV9fc3VjY2Vzc1xuJiM0MztfX2ZhaWx1cmUgX19tc2coXCYjMzQ7Y2Fubm90IHVwZGF0ZSBzb2NrbWFwIGluIHRoaXMgY29udGV4dFwmIzM0OylcbiBpbnQgdGVzdF9zb2NrZXRfZmlsdGVyKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbiB7XG4gXHR0ZXN0X3NvY2ttYXBfbXV0YXRlKHNrYi1cdTAwM2Vzayk7XG5AQCAtMTc5LDcgJiM0MzsxNzksNyBAQCBpbnQgdGVzdF9zb2Nrb3BzX3VwZGF0ZV9kZWRpY2F0ZWQoc3RydWN0IGJwZl9zb2NrX29wcyAqY3R4KVxuIH1cbiBcbiBTRUMoXCYjMzQ7eGRwXCYjMzQ7KVxuLV9fc3VjY2Vzc1xuJiM0MztfX2ZhaWx1cmUgX19tc2coXCYjMzQ7Y2Fubm90IHVwZGF0ZSBzb2NrbWFwIGluIHRoaXMgY29udGV4dFwmIzM0OylcbiBpbnQgdGVzdF94ZHAoc3RydWN0IHhkcF9tZCAqY3R4IF9fYWx3YXlzX3VudXNlZClcbiB7XG4gXHR0ZXN0X3NvY2ttYXBfbG9va3VwX2FuZF9tdXRhdGUoKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAyMzowNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttYXlfdXBkYXRlX3NvY2ttYXAmIzM0OywKICAgICYjMzQ7Y2hlY2tfbWFwX2Z1bmNfY29tcGF0aWJpbGl0eSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXN0cmljdHMgY2VydGFpbiBCUEYgcHJvZ3JhbSB0eXBlcyBmcm9tIHVwZGF0aW5nIHNvY2ttYXBzIGluIHRoZSBCUEYgdmVyaWZpZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBCUEYgdmVyaWZpZXIgbG9naWMgdGhhdCBhZmZlY3RzIHdoYXQgQlBGIHByb2dyYW1zIGFyZSBhbGxvd2VkIHRvIGRvLiBJdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgdmVyaWZpZXIgY29ycmVjdGx5IHJlamVjdHMgaW52YWxpZCBwcm9ncmFtcyBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSByZWdyZXNzaW9ucyBvciBieXBhc3Nlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZmM3ZGU3NmFkMWY1MTNlMDJlZGZlMmQwOTIyNmYwZGVlNzhlMDM5MApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgSnVuIDMwIDIzOjA1OjQ0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jCmluZGV4IDI1YWVhNDI3MWNkMDg5Li44M2VhM2IzM2ZmNjc5YyAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwpAQCAtODQ4OCwxMiAmIzQzOzg0ODgsNyBAQCBzdGF0aWMgYm9vbCBtYXlfdXBkYXRlX3NvY2ttYXAoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGZ1bmNfaWQpCiAJCWlmIChmdW5jX2lkID09IEJQRl9GVU5DX21hcF9kZWxldGVfZWxlbSkKIAkJCXJldHVybiB0cnVlOwogCQlicmVhazsKLQljYXNlIEJQRl9QUk9HX1RZUEVfU09DS0VUX0ZJTFRFUjoKLQljYXNlIEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTOgotCWNhc2UgQlBGX1BST0dfVFlQRV9TQ0hFRF9BQ1Q6Ci0JY2FzZSBCUEZfUFJPR19UWVBFX1hEUDoKIAljYXNlIEJQRl9QUk9HX1RZUEVfU0tfUkVVU0VQT1JUOgotCWNhc2UgQlBGX1BST0dfVFlQRV9GTE9XX0RJU1NFQ1RPUjoKIAljYXNlIEJQRl9QUk9HX1RZUEVfU0tfTE9PS1VQOgogCQlyZXR1cm4gdHJ1ZTsKIAlkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZmV4aXRfYnBmMmJwZi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZmV4aXRfYnBmMmJwZi5jCmluZGV4IDkyYzIwODAzZWE3NjVkLi5kM2E5NTQxNThjMzMyNyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZmV4aXRfYnBmMmJwZi5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ZleGl0X2JwZjJicGYuYwpAQCAtMzM2LDE3ICYjNDM7MzM2LDYgQEAgc3RhdGljIHZvaWQgdGVzdF9mbW9kX3JldF9mcmVwbGFjZSh2b2lkKQogfQogCiAKLXN0YXRpYyB2b2lkIHRlc3RfZnVuY19zb2NrbWFwX3VwZGF0ZSh2b2lkKQotewotCWNvbnN0IGNoYXIgKnByb2dfbmFtZVtdID0gewotCQkmIzM0O2ZyZXBsYWNlL2Nsc19yZWRpcmVjdCYjMzQ7LAotCX07Ci0JdGVzdF9mZXhpdF9icGYyYnBmX2NvbW1vbigmIzM0Oy4vZnJlcGxhY2VfY2xzX3JlZGlyZWN0LmJwZi5vJiMzNDssCi0JCQkJICAmIzM0Oy4vdGVzdF9jbHNfcmVkaXJlY3QuYnBmLm8mIzM0OywKLQkJCQkgIEFSUkFZX1NJWkUocHJvZ19uYW1lKSwKLQkJCQkgIHByb2dfbmFtZSwgZmFsc2UsIE5VTEwpOwotfQotCiBzdGF0aWMgdm9pZCB0ZXN0X2Z1bmNfcmVwbGFjZV92b2lkKHZvaWQpCiB7CiAJY29uc3QgY2hhciAqcHJvZ19uYW1lW10gPSB7CkBAIC01OTksOCAmIzQzOzU4OCw2IEBAIHZvaWQgc2VyaWFsX3Rlc3RfZmV4aXRfYnBmMmJwZih2b2lkKQogCQl0ZXN0X2Z1bmNfcmVwbGFjZSgpOwogCWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7ZnVuY19yZXBsYWNlX3ZlcmlmeSYjMzQ7KSkKIAkJdGVzdF9mdW5jX3JlcGxhY2VfdmVyaWZ5KCk7Ci0JaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtmdW5jX3NvY2ttYXBfdXBkYXRlJiMzNDspKQotCQl0ZXN0X2Z1bmNfc29ja21hcF91cGRhdGUoKTsKIAlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O2Z1bmNfcmVwbGFjZV9yZXR1cm5fY29kZSYjMzQ7KSkKIAkJdGVzdF9mdW5jX3JlcGxhY2VfcmV0dXJuX2NvZGUoKTsKIAlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O2Z1bmNfbWFwX3Byb2dfY29tcGF0aWJpbGl0eSYjMzQ7KSkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfYmFzaWMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfYmFzaWMuYwppbmRleCBjYjMyMjk3MTFmOTNhMy4uMzNmNzg4ZTI3ODZkYWUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfYmFzaWMuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2Jhc2ljLmMKQEAgLTcsNyAmIzQzOzcsNiBAQAogCiAjaW5jbHVkZSAmIzM0O3Rlc3RfcHJvZ3MuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3Rlc3Rfc2ttc2dfbG9hZF9oZWxwZXJzLnNrZWwuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O3Rlc3Rfc29ja21hcF91cGRhdGUuc2tlbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7dGVzdF9zb2NrbWFwX2ludmFsaWRfdXBkYXRlLnNrZWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3Rlc3Rfc29ja21hcF9za2JfdmVyZGljdF9hdHRhY2guc2tlbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7dGVzdF9zb2NrbWFwX3Byb2dzX3F1ZXJ5LnNrZWwuaCYjMzQ7CkBAIC0yMzUsNTMgJiM0MzsyMzQsNiBAQCBzdGF0aWMgdm9pZCB0ZXN0X3NrbXNnX2hlbHBlcnNfd2l0aF9saW5rKGVudW0gYnBmX21hcF90eXBlIG1hcF90eXBlKQogCXRlc3Rfc2ttc2dfbG9hZF9oZWxwZXJzX19kZXN0cm95KHNrZWwpOwogfQogCi1zdGF0aWMgdm9pZCB0ZXN0X3NvY2ttYXBfdXBkYXRlKGVudW0gYnBmX21hcF90eXBlIG1hcF90eXBlKQotewotCWludCBlcnIsIHByb2csIHNyYzsKLQlzdHJ1Y3QgdGVzdF9zb2NrbWFwX3VwZGF0ZSAqc2tlbDsKLQlzdHJ1Y3QgYnBmX21hcCAqZHN0X21hcDsKLQljb25zdCBfX3UzMiB6ZXJvID0gMDsKLQljaGFyIGR1bW15WzE0XSA9IHswfTsKLQlMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgdG9wdHMsCi0JCS5kYXRhX2luID0gZHVtbXksCi0JCS5kYXRhX3NpemVfaW4gPSBzaXplb2YoZHVtbXkpLAotCQkucmVwZWF0ID0gMSwKLQkpOwotCV9fczY0IHNrOwotCi0Jc2sgPSBjb25uZWN0ZWRfc29ja2V0X3Y0KCk7Ci0JaWYgKCFBU1NFUlRfTkVRKHNrLCAtMSwgJiMzNDtjb25uZWN0ZWRfc29ja2V0X3Y0JiMzNDspKQotCQlyZXR1cm47Ci0KLQlza2VsID0gdGVzdF9zb2NrbWFwX3VwZGF0ZV9fb3Blbl9hbmRfbG9hZCgpOwotCWlmICghQVNTRVJUX09LX1BUUihza2VsLCAmIzM0O29wZW5fYW5kX2xvYWQmIzM0OykpCi0JCWdvdG8gY2xvc2Vfc2s7Ci0KLQlwcm9nID0gYnBmX3Byb2dyYW1fX2ZkKHNrZWwtJmd0O3Byb2dzLmNvcHlfc29ja19tYXApOwotCXNyYyA9IGJwZl9tYXBfX2ZkKHNrZWwtJmd0O21hcHMuc3JjKTsKLQlpZiAobWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX1NPQ0tNQVApCi0JCWRzdF9tYXAgPSBza2VsLSZndDttYXBzLmRzdF9zb2NrX21hcDsKLQllbHNlCi0JCWRzdF9tYXAgPSBza2VsLSZndDttYXBzLmRzdF9zb2NrX2hhc2g7Ci0KLQllcnIgPSBicGZfbWFwX3VwZGF0ZV9lbGVtKHNyYywgJmFtcDt6ZXJvLCAmYW1wO3NrLCBCUEZfTk9FWElTVCk7Ci0JaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O3VwZGF0ZV9lbGVtKHNyYykmIzM0OykpCi0JCWdvdG8gb3V0OwotCi0JZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhwcm9nLCAmYW1wO3RvcHRzKTsKLQlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7dGVzdF9ydW4mIzM0OykpCi0JCWdvdG8gb3V0OwotCWlmICghQVNTRVJUX05FUSh0b3B0cy5yZXR2YWwsIDAsICYjMzQ7dGVzdF9ydW4gcmV0dmFsJiMzNDspKQotCQlnb3RvIG91dDsKLQotCWNvbXBhcmVfY29va2llcyhza2VsLSZndDttYXBzLnNyYywgZHN0X21hcCk7Ci0KLW91dDoKLQl0ZXN0X3NvY2ttYXBfdXBkYXRlX19kZXN0cm95KHNrZWwpOwotY2xvc2Vfc2s6Ci0JY2xvc2Uoc2spOwotfQotCiBzdGF0aWMgdm9pZCB0ZXN0X3NvY2ttYXBfaW52YWxpZF91cGRhdGUodm9pZCkKIHsKIAlzdHJ1Y3QgdGVzdF9zb2NrbWFwX2ludmFsaWRfdXBkYXRlICpza2VsOwpAQCAtMTM4NSwxMCAmIzQzOzEzMzcsNiBAQCB2b2lkIHRlc3Rfc29ja21hcF9iYXNpYyh2b2lkKQogCQl0ZXN0X3NrbXNnX2hlbHBlcnMoQlBGX01BUF9UWVBFX1NPQ0tNQVApOwogCWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7c29ja2hhc2ggc2tfbXNnIGxvYWQgaGVscGVycyYjMzQ7KSkKIAkJdGVzdF9za21zZ19oZWxwZXJzKEJQRl9NQVBfVFlQRV9TT0NLSEFTSCk7Ci0JaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtzb2NrbWFwIHVwZGF0ZSYjMzQ7KSkKLQkJdGVzdF9zb2NrbWFwX3VwZGF0ZShCUEZfTUFQX1RZUEVfU09DS01BUCk7Ci0JaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtzb2NraGFzaCB1cGRhdGUmIzM0OykpCi0JCXRlc3Rfc29ja21hcF91cGRhdGUoQlBGX01BUF9UWVBFX1NPQ0tIQVNIKTsKIAlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O3NvY2ttYXAgdXBkYXRlIGluIHVuc2FmZSBjb250ZXh0JiMzNDspKQogCQl0ZXN0X3NvY2ttYXBfaW52YWxpZF91cGRhdGUoKTsKIAlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O3NvY2ttYXAgY29weSYjMzQ7KSkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9mcmVwbGFjZV9jbHNfcmVkaXJlY3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9mcmVwbGFjZV9jbHNfcmVkaXJlY3QuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2U5NDQxMmQ0N2E1Y2EuLjAwMDAwMDAwMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9mcmVwbGFjZV9jbHNfcmVkaXJlY3QuYwomIzQzOyYjNDM7JiM0MzsgL2Rldi9udWxsCkBAIC0xLDM0ICYjNDM7MCwwIEBACi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAotLy8gQ29weXJpZ2h0IChjKSAyMDIwIEZhY2Vib29rCi0KLSNpbmNsdWRlICZsdDtsaW51eC9zdGRkZWYuaCZndDsKLSNpbmNsdWRlICZsdDtsaW51eC9icGYuaCZndDsKLSNpbmNsdWRlICZsdDtsaW51eC9wa3RfY2xzLmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7YnBmL2JwZl9lbmRpYW4uaCZndDsKLSNpbmNsdWRlICZsdDticGYvYnBmX2hlbHBlcnMuaCZndDsKLQotc3RydWN0IHsKLQlfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1NPQ0tNQVApOwotCV9fdHlwZShrZXksIGludCk7Ci0JX190eXBlKHZhbHVlLCBpbnQpOwotCV9fdWludChtYXhfZW50cmllcywgMik7Ci19IHNvY2tfbWFwIFNFQygmIzM0Oy5tYXBzJiMzNDspOwotCi1TRUMoJiMzNDtmcmVwbGFjZS9jbHNfcmVkaXJlY3QmIzM0OykKLWludCBmcmVwbGFjZV9jbHNfcmVkaXJlY3RfdGVzdChzdHJ1Y3QgX19za19idWZmICpza2IpCi17Ci0JaW50IHJldCA9IDA7Ci0JY29uc3QgaW50IHplcm8gPSAwOwotCXN0cnVjdCBicGZfc29jayAqc2s7Ci0KLQlzayA9IGJwZl9tYXBfbG9va3VwX2VsZW0oJmFtcDtzb2NrX21hcCwgJmFtcDt6ZXJvKTsKLQlpZiAoIXNrKQotCQlyZXR1cm4gVENfQUNUX1NIT1Q7Ci0KLQlyZXQgPSBicGZfbWFwX3VwZGF0ZV9lbGVtKCZhbXA7c29ja19tYXAsICZhbXA7emVybywgc2ssIDApOwotCWJwZl9za19yZWxlYXNlKHNrKTsKLQotCXJldHVybiByZXQgPT0gMCA/IFRDX0FDVF9PSyA6IFRDX0FDVF9TSE9UOwotfQotCi1jaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zb2NrbWFwX3VwZGF0ZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc29ja21hcF91cGRhdGUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmQ2NGVhNTM2ZTNkODEuLjAwMDAwMDAwMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NvY2ttYXBfdXBkYXRlLmMKJiM0MzsmIzQzOyYjNDM7IC9kZXYvbnVsbApAQCAtMSw0OCAmIzQzOzAsMCBAQAotLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKLS8vIENvcHlyaWdodCAoYykgMjAyMCBDbG91ZGZsYXJlCi0jaW5jbHVkZSAmIzM0O3ZtbGludXguaCYjMzQ7Ci0jaW5jbHVkZSAmbHQ7YnBmL2JwZl9oZWxwZXJzLmgmZ3Q7Ci0KLXN0cnVjdCB7Ci0JX191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9TT0NLTUFQKTsKLQlfX3VpbnQobWF4X2VudHJpZXMsIDEpOwotCV9fdHlwZShrZXksIF9fdTMyKTsKLQlfX3R5cGUodmFsdWUsIF9fdTY0KTsKLX0gc3JjIFNFQygmIzM0Oy5tYXBzJiMzNDspOwotCi1zdHJ1Y3QgewotCV9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfU09DS01BUCk7Ci0JX191aW50KG1heF9lbnRyaWVzLCAxKTsKLQlfX3R5cGUoa2V5LCBfX3UzMik7Ci0JX190eXBlKHZhbHVlLCBfX3U2NCk7Ci19IGRzdF9zb2NrX21hcCBTRUMoJiMzNDsubWFwcyYjMzQ7KTsKLQotc3RydWN0IHsKLQlfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1NPQ0tIQVNIKTsKLQlfX3VpbnQobWF4X2VudHJpZXMsIDEpOwotCV9fdHlwZShrZXksIF9fdTMyKTsKLQlfX3R5cGUodmFsdWUsIF9fdTY0KTsKLX0gZHN0X3NvY2tfaGFzaCBTRUMoJiMzNDsubWFwcyYjMzQ7KTsKLQotU0VDKCYjMzQ7dGMmIzM0OykKLWludCBjb3B5X3NvY2tfbWFwKHZvaWQgKmN0eCkKLXsKLQlzdHJ1Y3QgYnBmX3NvY2sgKnNrOwotCWJvb2wgZmFpbGVkID0gZmFsc2U7Ci0JX191MzIga2V5ID0gMDsKLQotCXNrID0gYnBmX21hcF9sb29rdXBfZWxlbSgmYW1wO3NyYywgJmFtcDtrZXkpOwotCWlmICghc2spCi0JCXJldHVybiBTS19EUk9QOwotCi0JaWYgKGJwZl9tYXBfdXBkYXRlX2VsZW0oJmFtcDtkc3Rfc29ja19tYXAsICZhbXA7a2V5LCBzaywgMCkpCi0JCWZhaWxlZCA9IHRydWU7Ci0KLQlpZiAoYnBmX21hcF91cGRhdGVfZWxlbSgmYW1wO2RzdF9zb2NrX2hhc2gsICZhbXA7a2V5LCBzaywgMCkpCi0JCWZhaWxlZCA9IHRydWU7Ci0KLQlicGZfc2tfcmVsZWFzZShzayk7Ci0JcmV0dXJuIGZhaWxlZCA/IFNLX0RST1AgOiBTS19QQVNTOwotfQotCi1jaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc29ja21hcF9tdXRhdGUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9zb2NrbWFwX211dGF0ZS5jCmluZGV4IGZlNGIxMjMxODdiODZlLi4yMDMzMmE3MzFkNGU0ZiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3NvY2ttYXBfbXV0YXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3NvY2ttYXBfbXV0YXRlLmMKQEAgLTc0LDcgJiM0Mzs3NCw3IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCB0ZXN0X3NvY2ttYXBfbG9va3VwX2FuZF9tdXRhdGUodm9pZCkKIH0KIAogU0VDKCYjMzQ7YWN0aW9uJiMzNDspCi1fX3N1Y2Nlc3MKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtjYW5ub3QgdXBkYXRlIHNvY2ttYXAgaW4gdGhpcyBjb250ZXh0JiMzNDspCiBpbnQgdGVzdF9zY2hlZF9hY3Qoc3RydWN0IF9fc2tfYnVmZiAqc2tiKQogewogCXRlc3Rfc29ja21hcF9tdXRhdGUoc2tiLSZndDtzayk7CkBAIC04Miw3ICYjNDM7ODIsNyBAQCBpbnQgdGVzdF9zY2hlZF9hY3Qoc3RydWN0IF9fc2tfYnVmZiAqc2tiKQogfQogCiBTRUMoJiMzNDtjbGFzc2lmaWVyJiMzNDspCi1fX3N1Y2Nlc3MKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtjYW5ub3QgdXBkYXRlIHNvY2ttYXAgaW4gdGhpcyBjb250ZXh0JiMzNDspCiBpbnQgdGVzdF9zY2hlZF9jbHMoc3RydWN0IF9fc2tfYnVmZiAqc2tiKQogewogCXRlc3Rfc29ja21hcF9tdXRhdGUoc2tiLSZndDtzayk7CkBAIC05MCw3ICYjNDM7OTAsNyBAQCBpbnQgdGVzdF9zY2hlZF9jbHMoc3RydWN0IF9fc2tfYnVmZiAqc2tiKQogfQogCiBTRUMoJiMzNDtmbG93X2Rpc3NlY3RvciYjMzQ7KQotX19zdWNjZXNzCiYjNDM7X19mYWlsdXJlIF9fbXNnKCYjMzQ7Y2Fubm90IHVwZGF0ZSBzb2NrbWFwIGluIHRoaXMgY29udGV4dCYjMzQ7KQogaW50IHRlc3RfZmxvd19kaXNzZWN0b3JfZGVsZXRlKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYiBfX2Fsd2F5c191bnVzZWQpCiB7CiAJdGVzdF9zb2NrbWFwX2RlbGV0ZSgpOwpAQCAtOTgsNyAmIzQzOzk4LDcgQEAgaW50IHRlc3RfZmxvd19kaXNzZWN0b3JfZGVsZXRlKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYiBfX2Fsd2F5c191bnVzZWQpCiB9CiAKIFNFQygmIzM0O2Zsb3dfZGlzc2VjdG9yJiMzNDspCi1fX2ZhaWx1cmUgX19tc2coJiMzNDtwcm9ncmFtIG9mIHRoaXMgdHlwZSBjYW5ub3QgdXNlIGhlbHBlciBicGZfc2tfcmVsZWFzZSYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O2Nhbm5vdCB1cGRhdGUgc29ja21hcCBpbiB0aGlzIGNvbnRleHQmIzM0OykKIGludCB0ZXN0X2Zsb3dfZGlzc2VjdG9yX3VwZGF0ZShzdHJ1Y3QgX19za19idWZmICpza2IgX19hbHdheXNfdW51c2VkKQogewogCXRlc3Rfc29ja21hcF9sb29rdXBfYW5kX3VwZGF0ZSgpOyAvKiBubyBhY2Nlc3MgdG8gc2tiLSZndDtzayAqLwpAQCAtMTQ2LDcgJiM0MzsxNDYsNyBAQCBpbnQgdGVzdF9za19yZXVzZXBvcnQoc3RydWN0IHNrX3JldXNlcG9ydF9tZCAqY3R4KQogfQogCiBTRUMoJiMzNDtzb2NrZXQmIzM0OykKLV9fc3VjY2VzcwomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O2Nhbm5vdCB1cGRhdGUgc29ja21hcCBpbiB0aGlzIGNvbnRleHQmIzM0OykKIGludCB0ZXN0X3NvY2tldF9maWx0ZXIoc3RydWN0IF9fc2tfYnVmZiAqc2tiKQogewogCXRlc3Rfc29ja21hcF9tdXRhdGUoc2tiLSZndDtzayk7CkBAIC0xNzksNyAmIzQzOzE3OSw3IEBAIGludCB0ZXN0X3NvY2tvcHNfdXBkYXRlX2RlZGljYXRlZChzdHJ1Y3QgYnBmX3NvY2tfb3BzICpjdHgpCiB9CiAKIFNFQygmIzM0O3hkcCYjMzQ7KQotX19zdWNjZXNzCiYjNDM7X19mYWlsdXJlIF9fbXNnKCYjMzQ7Y2Fubm90IHVwZGF0ZSBzb2NrbWFwIGluIHRoaXMgY29udGV4dCYjMzQ7KQogaW50IHRlc3RfeGRwKHN0cnVjdCB4ZHBfbWQgKmN0eCBfX2Fsd2F5c191bnVzZWQpCiB7CiAJdGVzdF9zb2NrbWFwX2xvb2t1cF9hbmRfbXV0YXRlKCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDIzOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzMjMKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxOTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCUEYgVmVyaWZpZXIgQ2hhbmdlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCYjMzk7cyBoaXR0aW5nIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHJldm9sdmVzIGFyb3VuZCBgbWF5X3VwZGF0ZV9zb2NrbWFwYC4gSXQgc2VlbXMgdGhleSYjMzk7cmUgdGlnaHRlbmluZyB0aGUgcmVpbnMgaGVyZSwgcmVzdHJpY3Rpbmcgd2hpY2ggQlBGIHByb2dyYW0gdHlwZXMgY2FuIGFjdHVhbGx5IG1vZGlmeSBzb2NrbWFwcy4gU3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2ggaXMgZXhwbGljaXRseSByZW1vdmluZyBzdXBwb3J0IGZvcjogYEJQRl9QUk9HX1RZUEVfU09DS0VUX0ZJTFRFUmAsIGBCUEZfUFJPR19UWVBFX1NDSEVEX0NMU2AsIGBCUEZfUFJPR19UWVBFX1NDSEVEX0FDVGAsIGBCUEZfUFJPR19UWVBFX1hEUGAsIGFuZCBgQlBGX1BST0dfVFlQRV9GTE9XX0RJU1NFQ1RPUmAuCgpFc3NlbnRpYWxseSwgdGhpcyBtZWFucyB0aGVzZSBwcm9ncmFtIHR5cGVzIGFyZSAqbm8gbG9uZ2VyIHBlcm1pdHRlZCogdG8gdXBkYXRlIHNvY2ttYXBzLiBUaGF0JiMzOTtzIGEgc2lnbmlmaWNhbnQgcmVzdHJpY3Rpb24gYW5kIHBvdGVudGlhbGx5IGEgc2VjdXJpdHkgaGFyZGVuaW5nIG1lYXN1cmUsIG9yIHBlcmhhcHMgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24sIGRlcGVuZGluZyBvbiB0aGUgcmF0aW9uYWxlLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBjb21taXQgbWVzc2FnZSBhbmQgcmVsYXRlZCBkaXNjdXNzaW9ucyB0byB1bmRlcnN0YW5kIHRoZSBleGFjdCBtb3RpdmF0aW9uLgoKVGhlIHBhdGNoIGFsc28gaW5jbHVkZXMgdXBkYXRlcyB0byB0aGUgc2VsZnRlc3RzLCB3aGljaCBpcyBnb29kIHByYWN0aWNlLiBJJiMzOTtsbCBuZWVkIHRvIHJldmlldyB0aG9zZSB0ZXN0cyBjYXJlZnVsbHkuIFRoZXkgbGlrZWx5IHJlbW92ZWQgdGVzdHMgdGhhdCB3b3VsZCBoYXZlIHByZXZpb3VzbHkgc3VjY2VlZGVkIHdpdGggdGhlc2UgcHJvZ3JhbSB0eXBlcyB1cGRhdGluZyBzb2NrbWFwcywgb3IgdGhleSYjMzk7dmUgY2hhbmdlZCB0aGUgZXhwZWN0ZWQgcmVzdWx0IGZyb20gc3VjY2VzcyB0byBmYWlsdXJlLiBUaGlzIGlzIGNyaXRpY2FsIGJlY2F1c2UgdGhlIHRlc3RzIG5lZWQgdG8gYWNjdXJhdGVseSByZWZsZWN0IHRoZSBuZXcgYmVoYXZpb3IgYW5kIHByZXZlbnQgcmVncmVzc2lvbnMuIEkmIzM5O2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHRlc3QgbW9kaWZpY2F0aW9ucyB0byBlbnN1cmUgdGhleSBhcmUgY29tcGxldGUgYW5kIGNvdmVyIGFsbCByZWxldmFudCBzY2VuYXJpb3MuIEkmIzM5O2xsIGFsc28gd2FudCB0byBsb29rIGZvciBhbnkgbmV3IHRlc3RzIHRoYXQgZXhwbGljaXRseSB2ZXJpZnkgdGhlIHJlc3RyaWN0aW9uLgoKSSBzaG91bGQgcHJvYmFibHkgdGFrZSBhIGxvb2sgYXQgdGhlIGNvbnRleHQgb2YgYG1heV91cGRhdGVfc29ja21hcGAgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgdG8gc2VlIGhvdyB0aGUgbG9naWMgaXMgc3RydWN0dXJlZC4gSXQmIzM5O2xsIGdpdmUgbWUgYSBjbGVhcmVyIHBpY3R1cmUgb2YgKndoeSogdGhlc2UgcHJvZ3JhbXMgYXJlIGJlaW5nIHJlc3RyaWN0ZWQgYW5kIGhvdyB0aGUgdmVyaWZpZXIgZW5zdXJlcyB0aGlzIHJlc3RyaWN0aW9uIGlzIGVuZm9yY2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDIzOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21heV91cGRhdGVfc29ja21hcCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9ODIyNz1zdGF0aWMgaW50IGNoZWNrX2Z1bmNfYXJnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBhcmcsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTg0NjgtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6ODQ2OTpzdGF0aWMgYm9vbCBtYXlfdXBkYXRlX3NvY2ttYXAoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGZ1bmNfaWQpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtODQ3MC17XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTg1MDg9c3RhdGljIGludCBjaGVja19tYXBfZnVuY19jb21wYXRpYmlsaXR5KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTg1ODMtXHRcdCAgICBmdW5jX2lkICE9IEJQRl9GVU5DX21hcF9sb29rdXBfZWxlbSBcdTAwMjZcdTAwMjZcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo4NTg0Olx0XHQgICAgIW1heV91cGRhdGVfc29ja21hcChlbnYsIGZ1bmNfaWQpKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTg1ODUtXHRcdFx0Z290byBlcnJvcjtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtODU5Mi1cdFx0ICAgIGZ1bmNfaWQgIT0gQlBGX0ZVTkNfbWFwX2xvb2t1cF9lbGVtIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi92ZXJpZmllci5jOjg1OTM6XHRcdCAgICAhbWF5X3VwZGF0ZV9zb2NrbWFwKGVudiwgZnVuY19pZCkpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtODU5NC1cdFx0XHRnb3RvIGVycm9yO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDIzOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyNTIKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyB0aGUgQlBGIFZlcmlmaWVyOiBBIEZvY3VzZWQgQXBwcm9hY2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgbmV3IGZ1bmN0aW9uLCBgbWF5X3VwZGF0ZV9zb2NrbWFwYCwgYW5kIGl0JiMzOTtzIGJlaW5nIHVzZWQgaW4gYGNoZWNrX21hcF9mdW5jX2NvbXBhdGliaWxpdHlgLiBUaGlzIGlzIGEgcHJldHR5IHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUgQlBGIHZlcmlmaWVyIGl0c2VsZiwgYSBjaGFuZ2UgdGhhdCByZXN0cmljdHMgc3BlY2lmaWMgQlBGIHByb2dyYW0gdHlwZXMuIE15IGV4cGVydCBpbnR1aXRpb24gaXMgdGVsbGluZyBtZSB0aGlzIHdhcnJhbnRzIGEgY2xvc2VyIGxvb2ssIGVzcGVjaWFsbHkgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuCgpZZWFoLCBhYnNvbHV0ZWx5LiBBIG1vZGlmaWNhdGlvbiB0byB0aGUgY29yZSB2ZXJpZmllciBsb2dpYz8gVGhhdCYjMzk7cyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIFRoZSB2ZXJpZmllciBpcyB3aGVyZSBhIGxvdCBvZiB0aGUgY3JpdGljYWwgc2VjdXJpdHkgY2hlY2tzIGhhcHBlbiwgc28gY2hhbmdlcyB0aGVyZSBhcmUgcG90ZW50aWFsIGdvbGRtaW5lcyBmb3IgdW5jb3ZlcmluZyB2dWxuZXJhYmlsaXRpZXMuCgpBbHJpZ2h0LCB0aW1lIHRvIG5hcnJvdyBkb3duIHRoZSBmb2N1cy4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggaWRlbnRpZnlpbmcgdGhlIGNyaXRpY2FsIHN5bWJvbHMuIFdlJiMzOTt2ZSBnb3QgYGNoZWNrX21hcF9mdW5jX2NvbXBhdGliaWxpdHlgIGFuZCBgbWF5X3VwZGF0ZV9zb2NrbWFwYC4gVGhvc2UgYXJlIHRoZSB0d28gbWFpbiBwbGF5ZXJzIGluIHRoaXMgZ2FtZS4KCk5vdywgSSYjMzk7bGwgZGl2ZSBpbnRvIHRoZSBjb2RlLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgIGRpcmVjdGx5IHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIG5ldyBpbnRlcmFjdGlvbiBiZXR3ZWVuIGBjaGVja19tYXBfZnVuY19jb21wYXRpYmlsaXR5YCBhbmQgYG1heV91cGRhdGVfc29ja21hcGAuIFRoZSBkZXZpbCBpcyBhbHdheXMgaW4gdGhlIGRldGFpbHMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMjM6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2hlY2tfbWFwX2Z1bmNfY29tcGF0aWJpbGl0eSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9ODUwMj1ib29sIGJwZl9hbGxvd190YWlsX2NhbGxfaW5fc3VicHJvZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtODUwNy1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo4NTA4OnN0YXRpYyBpbnQgY2hlY2tfbWFwX2Z1bmNfY29tcGF0aWJpbGl0eShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxua2VybmVsL2JwZi92ZXJpZmllci5jLTg1MDktXHRcdFx0XHRcdHN0cnVjdCBicGZfbWFwICptYXAsIGludCBmdW5jX2lkKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMDE4MT1zdGF0aWMgaW50IGNoZWNrX2hlbHBlcl9jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTA2MTItXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTA2MTM6XHRlcnIgPSBjaGVja19tYXBfZnVuY19jb21wYXRpYmlsaXR5KGVudiwgbWV0YS5tYXAucHRyLCBmdW5jX2lkKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDYxNC1cdGlmIChlcnIpXG4tLVxuc2NyaXB0cy9icGZfZG9jLnB5PTYwNz1Db21wYXRpYmlsaXR5IGJldHdlZW4gaGVscGVyIGZ1bmN0aW9ucyBhbmQgbWFwIHR5cGVzIGNhbiBiZSBmb3VuZCBpbiB0aGVcbnNjcmlwdHMvYnBmX2RvYy5weTo2MDg6KipjaGVja19tYXBfZnVuY19jb21wYXRpYmlsaXR5KipcXFxcICgpIGZ1bmN0aW9uIGluIGZpbGUgKmtlcm5lbC9icGYvdmVyaWZpZXIuYyouXG5zY3JpcHRzL2JwZl9kb2MucHktNjA5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDIzOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwMDAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgdGhlIENvZGUgQ2hhbmdlKioKCk9rYXksIHNvIHRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgYG1heV91cGRhdGVfc29ja21hcGAuIFRoYXQgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgYnkgYGNoZWNrX21hcF9mdW5jX2NvbXBhdGliaWxpdHlgLCB3aGljaCwgaW4gdHVybiwgaXMgaW52b2tlZCBieSBgY2hlY2tfaGVscGVyX2NhbGxgLiAgVGhlcmVmb3JlLCBgY2hlY2tfbWFwX2Z1bmNfY29tcGF0aWJpbGl0eWAgYW5kIGBtYXlfdXBkYXRlX3NvY2ttYXBgIGFyZSB0aGUgY3JpdGljYWwgZW50cnkgcG9pbnRzIHRvIHVuZGVyc3RhbmQgdGhpcyBtb2RpZmljYXRpb24uIEkgc2hvdWxkIHN0YXJ0IHRoZXJlLCBhbmQgdGhlbiB0cmFjZSBvdXR3YXJkcy4KCk5vdywgd2hhdCBkZXBlbmRlbmNpZXMgZG8gd2UgaGF2ZSB0byB3b3JyeSBhYm91dD8gSSBrbm93IHRoZSBCUEYgdmVyaWZpZXIgcmVxdWlyZXMgYEJQRl9TWVNDQUxMYC4gIEkgc2hvdWxkIHByb2JhYmx5IGNvbmZpcm0gdGhhdCB0aGF0JiMzOTtzIHRoZSBvbmx5IHJlbGV2YW50IGNvbmZpZy4gSSBzaG91bGQgY2hlY2sgZWl0aGVyIGBrZXJuZWwvYnBmL01ha2VmaWxlYCBvciBga2VybmVsL2JwZi9LY29uZmlnYCBmb3IgcmVsYXRlZCBzZXR0aW5ncy4gTGV0JiMzOTtzIHNlZSB3aGF0IGVsc2UgbWlnaHQgYmUgYXQgcGxheSBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDIzOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19CUEZfU1lTQ0FMTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGU9Nz1DRkxBR1NfY29yZS5vICYjNDM7PSAtV25vLW92ZXJyaWRlLWluaXQgJChjZmxhZ3Mtbm9nY3NlLXl5KVxua2VybmVsL2JwZi9NYWtlZmlsZS04LVxua2VybmVsL2JwZi9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHN5c2NhbGwubyB2ZXJpZmllci5vIGlub2RlLm8gaGVscGVycy5vIHRudW0ubyBjbnVtLm8gbG9nLm8gdG9rZW4ubyBsaXZlbmVzcy5vIGNvbnN0X2ZvbGQub1xua2VybmVsL2JwZi9NYWtlZmlsZToxMDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBicGZfaXRlci5vIG1hcF9pdGVyLm8gdGFza19pdGVyLm8gcHJvZ19pdGVyLm8gbGlua19pdGVyLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6MTE6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gaGFzaHRhYi5vIGFycmF5bWFwLm8gcGVyY3B1X2ZyZWVsaXN0Lm8gYnBmX2xydV9saXN0Lm8gbHBtX3RyaWUubyBtYXBfaW5fbWFwLm8gYmxvb21fZmlsdGVyLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6MTI6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gbG9jYWxfc3RvcmFnZS5vIHF1ZXVlX3N0YWNrX21hcHMubyByaW5nYnVmLm8gYnBmX2luc25fYXJyYXkub1xua2VybmVsL2JwZi9NYWtlZmlsZToxMzpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBicGZfbG9jYWxfc3RvcmFnZS5vIGJwZl90YXNrX3N0b3JhZ2Uub1xua2VybmVsL2JwZi9NYWtlZmlsZToxNDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBmaXh1cHMubyBjZmcubyBzdGF0ZXMubyBiYWNrdHJhY2subyBjaGVja19idGYub1xua2VybmVsL2JwZi9NYWtlZmlsZS0xNS1vYmotJHtDT05GSUdfQlBGX0xTTX1cdCAgJiM0Mzs9IGJwZl9pbm9kZV9zdG9yYWdlLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6MTY6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gZGlzYXNtLm8gbXByb2cub1xua2VybmVsL2JwZi9NYWtlZmlsZS0xNy1vYmotJChDT05GSUdfQlBGX0pJVCkgJiM0Mzs9IHRyYW1wb2xpbmUub1xua2VybmVsL2JwZi9NYWtlZmlsZToxODpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBidGYubyBtZW1hbGxvYy5vIHJxc3BpbmxvY2subyBzdHJlYW0ub1xua2VybmVsL2JwZi9NYWtlZmlsZS0xOS1pZmVxICgkKENPTkZJR19NTVUpJChDT05GSUdfNjRCSVQpLHl5KVxua2VybmVsL2JwZi9NYWtlZmlsZToyMDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBhcmVuYS5vIHJhbmdlX3RyZWUub1xua2VybmVsL2JwZi9NYWtlZmlsZS0yMS1lbmRpZlxuLS1cbmtlcm5lbC9icGYvTWFrZWZpbGU9MjM9aWZlcSAoJChDT05GSUdfTkVUKSx5KVxua2VybmVsL2JwZi9NYWtlZmlsZToyNDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBkZXZtYXAub1xua2VybmVsL2JwZi9NYWtlZmlsZToyNTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBjcHVtYXAub1xua2VybmVsL2JwZi9NYWtlZmlsZToyNjpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBvZmZsb2FkLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6Mjc6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gbmV0X25hbWVzcGFjZS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjI4Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHRjeC5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTI5LWVuZGlmXG5rZXJuZWwvYnBmL01ha2VmaWxlPTMwPWlmZXEgKCQoQ09ORklHX1BFUkZfRVZFTlRTKSx5KVxua2VybmVsL2JwZi9NYWtlZmlsZTozMTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBzdGFja21hcC5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTMyLWVuZGlmXG5rZXJuZWwvYnBmL01ha2VmaWxlPTMzPWlmZXEgKCQoQ09ORklHX0NHUk9VUFMpLHkpXG5rZXJuZWwvYnBmL01ha2VmaWxlOjM0Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGNncm91cF9pdGVyLm8gYnBmX2NncnBfc3RvcmFnZS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTM1LWVuZGlmXG4tLVxua2VybmVsL2JwZi9NYWtlZmlsZT0zNz1pZmVxICgkKENPTkZJR19JTkVUKSx5KVxua2VybmVsL2JwZi9NYWtlZmlsZTozODpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSByZXVzZXBvcnRfYXJyYXkub1xua2VybmVsL2JwZi9NYWtlZmlsZS0zOS1lbmRpZlxuLS1cbmtlcm5lbC9icGYvTWFrZWZpbGU9NDM9aWZlcSAoJChDT05GSUdfQlBGX0pJVCkseSlcbmtlcm5lbC9icGYvTWFrZWZpbGU6NDQ6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnBmX3N0cnVjdF9vcHMub1xua2VybmVsL2JwZi9NYWtlZmlsZTo0NTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBjcHVtYXNrLm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtNDYtIyBicGZfbHNtX3Byb3RvLm8gbXVzdCBwcmVjZWRlIGJwZl9sc20uby4gVGhlIGN1cnJlbnQgcGFob2xlIGxvZ2ljXG4tLVxua2VybmVsL2JwZi9NYWtlZmlsZT01OD1pZm5lcSAoJChDT05GSUdfQ1JZUFRPKSwpXG5rZXJuZWwvYnBmL01ha2VmaWxlOjU5Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGNyeXB0by5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTYwLWVuZGlmXG5rZXJuZWwvYnBmL01ha2VmaWxlPTYxPW9iai0kKENPTkZJR19CUEZfUFJFTE9BRCkgJiM0Mzs9IHByZWxvYWQvXG5rZXJuZWwvYnBmL01ha2VmaWxlLTYyLVxua2VybmVsL2JwZi9NYWtlZmlsZTo2MzpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSByZWxvX2NvcmUub1xua2VybmVsL2JwZi9NYWtlZmlsZTo2NDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBidGZfaXRlci5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjY1Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJ0Zl9yZWxvY2F0ZS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjY2Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGttZW1fY2FjaGVfaXRlci5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTY3LWlmZXEgKCQoQ09ORklHX0RNQV9TSEFSRURfQlVGRkVSKSx5KVxua2VybmVsL2JwZi9NYWtlZmlsZTo2ODpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBkbWFidWZfaXRlci5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTY5LWVuZGlmXG4tLVxua2VybmVsL2JwZi9jb3JlLmM9OTk9c3RydWN0IGJwZl9wcm9nICpicGZfcHJvZ19hbGxvY19ub19zdGF0cyh1bnNpZ25lZCBpbnQgc2l6ZSwgZ2ZwX3QgZ2ZwX2V4dHJhX2ZsYWdzKVxuLS1cbmtlcm5lbC9icGYvY29yZS5jLTE0MS1cbmtlcm5lbC9icGYvY29yZS5jOjE0MjojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL2NvcmUuYy0xNDMtXHRicGZfcHJvZ19zdHJlYW1faW5pdChmcCk7XG4tLVxua2VybmVsL2JwZi9jb3JlLmM9MjQwND1FVkFMNChQUk9HX05BTUVfTElTVCwgNDE2LCA0NDgsIDQ4MCwgNTEyKVxuLS1cbmtlcm5lbC9icGYvY29yZS5jLTI0MDctXG5rZXJuZWwvYnBmL2NvcmUuYzoyNDA4OiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbmtlcm5lbC9icGYvY29yZS5jLTI0MDktaW50IGJwZl9wYXRjaF9jYWxsX2FyZ3Moc3RydWN0IGJwZl9pbnNuICppbnNuLCB1MzIgc3RhY2tfZGVwdGgpXG4tLVxua2VybmVsL2JwZi9jb3JlLmM9Mjk5Mj12b2lkIF9fYnBmX2ZyZWVfdXNlZF9idGZzKHN0cnVjdCBidGZfbW9kX3BhaXIgKnVzZWRfYnRmcywgdTMyIGxlbilcbmtlcm5lbC9icGYvY29yZS5jLTI5OTMte1xua2VybmVsL2JwZi9jb3JlLmM6Mjk5NDojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL2NvcmUuYy0yOTk1LVx0c3RydWN0IGJ0Zl9tb2RfcGFpciAqYnRmX21vZDtcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYz0zMDEzPXN0YXRpYyB2b2lkIGJwZl9wcm9nX2ZyZWVfZGVmZXJyZWQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmtlcm5lbC9icGYvY29yZS5jLTMwMTgtXHRhdXggPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGJwZl9wcm9nX2F1eCwgd29yayk7XG5rZXJuZWwvYnBmL2NvcmUuYzozMDE5OiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbmtlcm5lbC9icGYvY29yZS5jLTMwMjAtXHRicGZfZnJlZV9rZnVuY19idGZfdGFiKGF1eC1cdTAwM2VrZnVuY19idGZfdGFiKTtcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYz0zMzM1PXN0YXRpYyBub2lubGluZSB2b2lkIGJwZl9wcm9nX3JlcG9ydF9tYXlfZ290b192aW9sYXRpb24odm9pZClcbmtlcm5lbC9icGYvY29yZS5jLTMzMzYte1xua2VybmVsL2JwZi9jb3JlLmM6MzMzNzojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL2NvcmUuYy0zMzM4LVx0c3RydWN0IGJwZl9zdHJlYW1fc3RhZ2Ugc3M7XG4tLVxua2VybmVsL2JwZi9jb3JlLmM9MzM3NT1fX3dlYWsgdTY0IGJwZl9hcmVuYV9nZXRfa2Vybl92bV9zdGFydChzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSlcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0zMzc5LVxua2VybmVsL2JwZi9jb3JlLmM6MzM4MDojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL2NvcmUuYy0zMzgxLV9fd2VhayBib29sIGJwZl9hcmVuYV9oYW5kbGVfcGFnZV9mYXVsdCh1bnNpZ25lZCBsb25nIGFkZHIsIGJvb2wgaXNfd3JpdGUsXG4tLVxua2VybmVsL2JwZi9jb3JlLmM9MzQwNj1FWFBPUlRfVFJBQ0VQT0lOVF9TWU1CT0xfR1BMKHhkcF9idWxrX3R4KTtcbmtlcm5lbC9icGYvY29yZS5jLTM0MDctXG5rZXJuZWwvYnBmL2NvcmUuYzozNDA4OiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbmtlcm5lbC9icGYvY29yZS5jLTM0MDktXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTQ2Nz1pbnQgX193ZWFrIGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHUzMiBmbGFncyxcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNDc0LSAgICBkZWZpbmVkKENPTkZJR19IQVZFX1NJTkdMRV9GVFJBQ0VfRElSRUNUX09QUykgXHUwMDI2XHUwMDI2IFxcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNDc1OiAgICBkZWZpbmVkKENPTkZJR19CUEZfU1lTQ0FMTClcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE0NzYtXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTcxMT1pbnQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgc3RydWN0IGJwZl90cmFjaW5nX211bHRpX2xpbmsgKmxpbmspXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTc0Ny1cdCAgQ09ORklHX0hBVkVfU0lOR0xFX0ZUUkFDRV9ESVJFQ1RfT1BTIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTc0ODpcdCAgQ09ORklHX0JQRl9TWVNDQUxMICovXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNzQ5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDIzOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3MzkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCUEYgVmVyaWZpZXIgQ2hhbmdlKioKCk9rYXksIHNvIHRoZSBjaGFuZ2UgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXMgc3BlY2lmaWNhbGx5IHdpdGhpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBpcyByZWxhdGVkIHRvIHRoZSBCUEYgdmVyaWZpZXIgaXRzZWxmLCBhbmQgdGhlIHByaW1hcnkgcHJlcmVxdWlzaXRlIGZvciB0aGlzIGNvZGUgcGF0aCBpcyBgQ09ORklHX0JQRl9TWVNDQUxMYC4gIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGF0LCBidXQgSSYjMzk7bSByZWFzb25hYmx5IGNvbmZpZGVudC4KCk5vdywgYmVjYXVzZSBpdCYjMzk7cyBpbiB0aGUgY29udGV4dCBvZiBgc29ja21hcGAsIEkgc2hvdWxkIHN0YXJ0IHRoaW5raW5nIGFib3V0IHJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIEFzaWRlIGZyb20gYENPTkZJR19CUEZfU1lTQ0FMTGAsIGFyZSB0aGVyZSBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzIEkgbmVlZCB0byBjb25zaWRlcj8gTXkgaW5pdGlhbCBndWVzcyBpcyB0aGF0IGBDT05GSUdfQ0dST1VQX0JQRmAgb3IgcG9zc2libHkgZXZlbiBgQ09ORklHX05FVGAgbWlnaHQgYWxzbyBwbGF5IGEgcm9sZS4gVGhlc2Ugb2Z0ZW4gaW50ZXJhY3QuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGJyb2FkZXIgY29udGV4dCB0byBjb25maXJtLgoKTGV0JiMzOTtzIHF1aWNrbHkgZ2V0IGJhY2sgaW50byB0aGUgY29kZSBhbmQgZG91YmxlLWNoZWNrIHNwZWNpZmljYWxseSB0aGUgYG1heV91cGRhdGVfc29ja21hcGAgZnVuY3Rpb24gd2l0aGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBJIG5lZWQgdG8gZW5zdXJlIG15IGFzc3VtcHRpb25zIGFib3V0IHRoZSBkZXBlbmRlbmNpZXMgYXJlIGNvcnJlY3QgYW5kIHVuZGVyc3RhbmQgdGhlIGV4YWN0IG5hdHVyZSBvZiB0aGUgbW9kaWZpY2F0aW9uLiBUaGlzIGlzIHdoZXJlIEkmIzM5O2xsIGdldCB0aGUgcmVhbCBkZXRhaWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAyMzowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttYXlfdXBkYXRlX3NvY2ttYXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jPTgyMjc9c3RhdGljIGludCBjaGVja19mdW5jX2FyZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgYXJnLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04NDY4LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjg0Njk6c3RhdGljIGJvb2wgbWF5X3VwZGF0ZV9zb2NrbWFwKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBmdW5jX2lkKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTg0NzAte1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz04NTA4PXN0YXRpYyBpbnQgY2hlY2tfbWFwX2Z1bmNfY29tcGF0aWJpbGl0eShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04NTgzLVx0XHQgICAgZnVuY19pZCAhPSBCUEZfRlVOQ19tYXBfbG9va3VwX2VsZW0gXHUwMDI2XHUwMDI2XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6ODU4NDpcdFx0ICAgICFtYXlfdXBkYXRlX3NvY2ttYXAoZW52LCBmdW5jX2lkKSlcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04NTg1LVx0XHRcdGdvdG8gZXJyb3I7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTg1OTItXHRcdCAgICBmdW5jX2lkICE9IEJQRl9GVU5DX21hcF9sb29rdXBfZWxlbSBcdTAwMjZcdTAwMjZcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo4NTkzOlx0XHQgICAgIW1heV91cGRhdGVfc29ja21hcChlbnYsIGZ1bmNfaWQpKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTg1OTQtXHRcdFx0Z290byBlcnJvcjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMjM6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0NDIKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSwgbXkgaW5pdGlhbCByZWFjdGlvbiBpcywgaG1tLCB0aGUgYG1heV91cGRhdGVfc29ja21hcGAgZnVuY3Rpb24uIFdoZXJlICpleGFjdGx5KiBpcyB0aGF0IHVzZWQ/IE9ubHkgaW4gYGNoZWNrX21hcF9mdW5jX2NvbXBhdGliaWxpdHlgPyBJbnRlcmVzdGluZy4gSSB3b25kZXIgaWYgdGhlcmUmIzM5O3MgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gcmVsYXRlZCB0byBzb2NrbWFwcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YgaGVyZT8gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGlnIGFyb3VuZCBpbiB0aGUgc291cmNlIGNvZGUuIExldCYjMzk7cyBzdGFydCB3aXRoIGBuZXQvY29yZS9zb2NrX21hcC5jYC4gVGhhdCBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIHBsYWNlIHRvIGZpbmQgdGhlIG5pdHR5LWdyaXR0eSBkZXRhaWxzLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayBhbnkgYXNzb2NpYXRlZCBmaWxlcyB0b28uIEkmIzM5O2xsIGtlZXAgdGhlIGNvbnRleHQgaW4gbWluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMjM6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c29ja19tYXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDY0MCBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxubmV0L2NvcmUvTWFrZWZpbGU9NDQ9b2JqLSQoQ09ORklHX05FVF9TT0NLX01TRykgJiM0Mzs9IHNrbXNnLm9cbm5ldC9jb3JlL01ha2VmaWxlOjQ1Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHNvY2tfbWFwLm9cbm5ldC9jb3JlL01ha2VmaWxlLTQ2LW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9za19zdG9yYWdlLm9cbi0tXG5uZXQvY29yZS9maWx0ZXIuYz04NTk3PXhkcF9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTg2NjctXG5uZXQvY29yZS9maWx0ZXIuYzo4NjY4OmNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc29ja19tYXBfdXBkYXRlX3Byb3RvIF9fd2Vhaztcbm5ldC9jb3JlL2ZpbHRlci5jLTg2NjktY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zb2NrX2hhc2hfdXBkYXRlX3Byb3RvIF9fd2Vhaztcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz04NjcyPXNvY2tfb3BzX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtODY4Ni1cdFx0cmV0dXJuIFx1MDAyNmJwZl9zb2NrX29wc19jYl9mbGFnc19zZXRfcHJvdG87XG5uZXQvY29yZS9maWx0ZXIuYzo4Njg3Olx0Y2FzZSBCUEZfRlVOQ19zb2NrX21hcF91cGRhdGU6XG5uZXQvY29yZS9maWx0ZXIuYzo4Njg4Olx0XHRyZXR1cm4gXHUwMDI2YnBmX3NvY2tfbWFwX3VwZGF0ZV9wcm90bztcbm5ldC9jb3JlL2ZpbHRlci5jLTg2ODktXHRjYXNlIEJQRl9GVU5DX3NvY2tfaGFzaF91cGRhdGU6XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9MTE1NzE9QlBGX0NBTExfNChza19zZWxlY3RfcmV1c2Vwb3J0LCBzdHJ1Y3Qgc2tfcmV1c2Vwb3J0X2tlcm4gKiwgcmV1c2Vfa2Vybixcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMTU4OC1cdFx0ICpcbm5ldC9jb3JlL2ZpbHRlci5jOjExNTg5Olx0XHQgKiBPdGhlciBtYXBzIChlLmcuIHNvY2tfbWFwKSBkbyBub3QgcHJvdmlkZSB0aGlzIGd1YXJhbnRlZSBhbmRcbm5ldC9jb3JlL2ZpbHRlci5jLTExNTkwLVx0XHQgKiB0aGUgc2sgbWF5IG5ldmVyIGJlIGluIHRoZSByZXVzZXBvcnQgZ3JvdXAgdG8gYmVnaW4gd2l0aC5cbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMTYxMy1lcnJvcjpcbm5ldC9jb3JlL2ZpbHRlci5jOjExNjE0Olx0LyogTG9va3VwIGluIHNvY2tfbWFwIGNhbiByZXR1cm4gVENQIEVTVEFCTElTSEVEIHNvY2tldHMuICovXG5uZXQvY29yZS9maWx0ZXIuYy0xMTYxNS1cdGlmIChza19pc19yZWZjb3VudGVkKHNlbGVjdGVkX3NrKSlcbi0tXG5uZXQvY29yZS9za21zZy5jPTY3MT1zdGF0aWMgdm9pZCBza19wc29ja19iYWNrbG9nKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5uZXQvY29yZS9za21zZy5jLTY4OC1cdC8qIEluY3JlbWVudCB0aGUgcHNvY2sgcmVmY250IHRvIHN5bmNocm9uaXplIHdpdGggY2xvc2UoZmQpIHBhdGggaW5cbm5ldC9jb3JlL3NrbXNnLmM6Njg5Olx0ICogc29ja19tYXBfY2xvc2UoKSwgZW5zdXJpbmcgd2Ugd2FpdCBmb3IgYmFja2xvZyB0aHJlYWQgY29tcGxldGlvblxubmV0L2NvcmUvc2ttc2cuYy02OTAtXHQgKiBiZWZvcmUgc2tfc29ja2V0IGZyZWVkLiBJZiByZWZjbnQgaW5jcmVtZW50IGZhaWxzLCBpdCBpbmRpY2F0ZXNcbm5ldC9jb3JlL3NrbXNnLmM6NjkxOlx0ICogc29ja19tYXBfY2xvc2UoKSBjb21wbGV0ZWQgd2l0aCBza19zb2NrZXQgcG90ZW50aWFsbHkgYWxyZWFkeSBmcmVlZC5cbm5ldC9jb3JlL3NrbXNnLmMtNjkyLVx0ICovXG4tLVxubmV0L2NvcmUvc2ttc2cuYz05MDU9RVhQT1JUX1NZTUJPTF9HUEwoc2tfcHNvY2tfZHJvcCk7XG5uZXQvY29yZS9za21zZy5jLTkwNi1cbm5ldC9jb3JlL3NrbXNnLmM6OTA3OnN0YXRpYyBpbnQgc2tfcHNvY2tfbWFwX3ZlcmQoaW50IHZlcmRpY3QsIGJvb2wgcmVkaXIpXG5uZXQvY29yZS9za21zZy5jLTkwOC17XG4tLVxubmV0L2NvcmUvc2ttc2cuYz05MjA9aW50IHNrX3Bzb2NrX21zZ192ZXJkaWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayxcbi0tXG5uZXQvY29yZS9za21zZy5jLTkzNi1cdG1zZy1cdTAwM2VzayA9IE5VTEw7XG5uZXQvY29yZS9za21zZy5jOjkzNzpcdHJldCA9IHNrX3Bzb2NrX21hcF92ZXJkKHJldCwgbXNnLVx1MDAzZXNrX3JlZGlyKTtcbm5ldC9jb3JlL3NrbXNnLmMtOTM4LVx0cHNvY2stXHUwMDNlYXBwbHlfYnl0ZXMgPSBtc2ctXHUwMDNlYXBwbHlfYnl0ZXM7XG4tLVxubmV0L2NvcmUvc2ttc2cuYz0xMDc1PXN0YXRpYyB2b2lkIHNrX3Bzb2NrX3N0cnBfcmVhZChzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtMTA5NS1cdFx0c2tiX2JwZl9zZXRfc3RycGFyc2VyKHNrYik7XG5uZXQvY29yZS9za21zZy5jOjEwOTY6XHRcdHJldCA9IHNrX3Bzb2NrX21hcF92ZXJkKHJldCwgc2tiX2JwZl9yZWRpcmVjdF9mZXRjaChza2IpKTtcbm5ldC9jb3JlL3NrbXNnLmMtMTA5Ny1cdFx0c2tiLVx1MDAzZXNrID0gTlVMTDtcbi0tXG5uZXQvY29yZS9za21zZy5jPTExOTg9c3RhdGljIGludCBza19wc29ja192ZXJkaWN0X3JlY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtMTIxOS1cdFx0cmV0ID0gYnBmX3Byb2dfcnVuX3Bpbl9vbl9jcHUocHJvZywgc2tiKTtcbm5ldC9jb3JlL3NrbXNnLmM6MTIyMDpcdFx0cmV0ID0gc2tfcHNvY2tfbWFwX3ZlcmQocmV0LCBza2JfYnBmX3JlZGlyZWN0X2ZldGNoKHNrYikpO1xubmV0L2NvcmUvc2ttc2cuYy0xMjIxLVx0fVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM9MzI9c3RhdGljIERFRklORV9NVVRFWChzb2NrbWFwX211dGV4KTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzMtXG5uZXQvY29yZS9zb2NrX21hcC5jOjM0OnN0YXRpYyBpbnQgc29ja19tYXBfcHJvZ191cGRhdGUoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxubmV0L2NvcmUvc29ja19tYXAuYy0zNS1cdFx0XHRcdHN0cnVjdCBicGZfcHJvZyAqb2xkLCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXG5uZXQvY29yZS9zb2NrX21hcC5jLTM2LVx0XHRcdFx0dTMyIHdoaWNoKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmM6Mzc6c3RhdGljIHN0cnVjdCBza19wc29ja19wcm9ncyAqc29ja19tYXBfcHJvZ3Moc3RydWN0IGJwZl9tYXAgKm1hcCk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTM4LVxubmV0L2NvcmUvc29ja19tYXAuYzozOTpzdGF0aWMgc3RydWN0IGJwZl9tYXAgKnNvY2tfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxubmV0L2NvcmUvc29ja19tYXAuYy00MC17XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy02Ny1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6Njg6aW50IHNvY2tfbWFwX2dldF9mcm9tX2ZkKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG5uZXQvY29yZS9zb2NrX21hcC5jLTY5LXtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTgwLVx0bXV0ZXhfbG9jayhcdTAwMjZzb2NrbWFwX211dGV4KTtcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODE6XHRyZXQgPSBzb2NrX21hcF9wcm9nX3VwZGF0ZShtYXAsIHByb2csIE5VTEwsIE5VTEwsIGF0dHItXHUwMDNlYXR0YWNoX3R5cGUpO1xubmV0L2NvcmUvc29ja19tYXAuYy04Mi1cdG11dGV4X3VubG9jayhcdTAwMjZzb2NrbWFwX211dGV4KTtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTg1LVxubmV0L2NvcmUvc29ja19tYXAuYzo4NjppbnQgc29ja19tYXBfcHJvZ19kZXRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGVudW0gYnBmX3Byb2dfdHlwZSBwdHlwZSlcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODcte1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTA5LVx0bXV0ZXhfbG9jayhcdTAwMjZzb2NrbWFwX211dGV4KTtcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTEwOlx0cmV0ID0gc29ja19tYXBfcHJvZ191cGRhdGUobWFwLCBOVUxMLCBwcm9nLCBOVUxMLCBhdHRyLVx1MDAzZWF0dGFjaF90eXBlKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTExLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNnNvY2ttYXBfbXV0ZXgpO1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTE2LVxubmV0L2NvcmUvc29ja19tYXAuYzoxMTc6c3RhdGljIHZvaWQgc29ja19tYXBfc2tfYWNxdWlyZShzdHJ1Y3Qgc29jayAqc2spXG5uZXQvY29yZS9zb2NrX21hcC5jLTExOC1cdF9fYWNxdWlyZXMoXHUwMDI2c2stXHUwMDNlc2tfbG9jay5zbG9jaylcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTEyMy1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTI0OnN0YXRpYyB2b2lkIHNvY2tfbWFwX3NrX3JlbGVhc2Uoc3RydWN0IHNvY2sgKnNrKVxubmV0L2NvcmUvc29ja19tYXAuYy0xMjUtXHRfX3JlbGVhc2VzKFx1MDAyNnNrLVx1MDAzZXNrX2xvY2suc2xvY2spXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xMzAtXG5uZXQvY29yZS9zb2NrX21hcC5jOjEzMTpzdGF0aWMgdm9pZCBzb2NrX21hcF9hZGRfbGluayhzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLFxubmV0L2NvcmUvc29ja19tYXAuYy0xMzItXHRcdFx0ICAgICAgc3RydWN0IHNrX3Bzb2NrX2xpbmsgKmxpbmssXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xNDEtXG5uZXQvY29yZS9zb2NrX21hcC5jOjE0MjpzdGF0aWMgdm9pZCBzb2NrX21hcF9kZWxfbGluayhzdHJ1Y3Qgc29jayAqc2ssXG5uZXQvY29yZS9zb2NrX21hcC5jLTE0My1cdFx0XHQgICAgICBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCB2b2lkICpsaW5rX3Jhdylcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTE1MS1cdFx0XHRzdHJ1Y3QgYnBmX21hcCAqbWFwID0gbGluay1cdTAwM2VtYXA7XG5uZXQvY29yZS9zb2NrX21hcC5jOjE1MjpcdFx0XHRzdHJ1Y3Qgc2tfcHNvY2tfcHJvZ3MgKnByb2dzID0gc29ja19tYXBfcHJvZ3MobWFwKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTUzLVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTc4LVxubmV0L2NvcmUvc29ja19tYXAuYzoxNzk6c3RhdGljIHZvaWQgc29ja19tYXBfdW5yZWYoc3RydWN0IHNvY2sgKnNrLCB2b2lkICpsaW5rX3Jhdylcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTgwLXtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTE4My1cdGlmIChsaWtlbHkocHNvY2spKSB7XG5uZXQvY29yZS9zb2NrX21hcC5jOjE4NDpcdFx0c29ja19tYXBfZGVsX2xpbmsoc2ssIHBzb2NrLCBsaW5rX3Jhdyk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTE4NS1cdFx0c2tfcHNvY2tfcHV0KHNrLCBwc29jayk7XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xODgtXG5uZXQvY29yZS9zb2NrX21hcC5jOjE4OTpzdGF0aWMgaW50IHNvY2tfbWFwX2luaXRfcHJvdG8oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxubmV0L2NvcmUvc29ja19tYXAuYy0xOTAte1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTk2LVxubmV0L2NvcmUvc29ja19tYXAuYzoxOTc6c3RhdGljIHN0cnVjdCBza19wc29jayAqc29ja19tYXBfcHNvY2tfZ2V0X2NoZWNrZWQoc3RydWN0IHNvY2sgKnNrKVxubmV0L2NvcmUvc29ja19tYXAuYy0xOTgte1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMjAzLVx0aWYgKHBzb2NrKSB7XG5uZXQvY29yZS9zb2NrX21hcC5jOjIwNDpcdFx0aWYgKHNrLVx1MDAzZXNrX3Byb3QtXHUwMDNlY2xvc2UgIT0gc29ja19tYXBfY2xvc2UpIHtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMjA1LVx0XHRcdHBzb2NrID0gRVJSX1BUUigtRUJVU1kpO1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMjE2LVxubmV0L2NvcmUvc29ja19tYXAuYzoyMTc6c3RhdGljIGludCBzb2NrX21hcF9saW5rKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBzb2NrICpzaylcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMjE4LXtcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MjE5Olx0c3RydWN0IHNrX3Bzb2NrX3Byb2dzICpwcm9ncyA9IHNvY2tfbWFwX3Byb2dzKG1hcCk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTIyMC1cdHN0cnVjdCBicGZfcHJvZyAqc3RyZWFtX3ZlcmRpY3QgPSBOVUxMO1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMjYwLVxubmV0L2NvcmUvc29ja19tYXAuYzoyNjE6XHRwc29jayA9IHNvY2tfbWFwX3Bzb2NrX2dldF9jaGVja2VkKHNrKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMjYyLVx0aWYgKElTX0VSUihwc29jaykpIHtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTI5Ny1cdCAqL1xubmV0L2NvcmUvc29ja19tYXAuYzoyOTg6XHRyZXQgPSBzb2NrX21hcF9pbml0X3Byb3RvKHNrLCBwc29jayk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTI5OS1cdGlmIChyZXQgXHUwMDNjIDApIHtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTMzOC1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MzM5OnN0YXRpYyB2b2lkIHNvY2tfbWFwX2ZyZWUoc3RydWN0IGJwZl9tYXAgKm1hcClcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzQwLXtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTM1Ny1cdFx0XHRyY3VfcmVhZF9sb2NrKCk7XG5uZXQvY29yZS9zb2NrX21hcC5jOjM1ODpcdFx0XHRzb2NrX21hcF91bnJlZihzaywgcHNrKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzU5LVx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzcxLVxubmV0L2NvcmUvc29ja19tYXAuYzozNzI6c3RhdGljIHZvaWQgc29ja19tYXBfcmVsZWFzZV9wcm9ncyhzdHJ1Y3QgYnBmX21hcCAqbWFwKVxubmV0L2NvcmUvc29ja19tYXAuYy0zNzMte1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzc2LVxubmV0L2NvcmUvc29ja19tYXAuYzozNzc6c3RhdGljIHN0cnVjdCBzb2NrICpfX3NvY2tfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHUzMiBrZXkpXG5uZXQvY29yZS9zb2NrX21hcC5jLTM3OC17XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0zODctXG5uZXQvY29yZS9zb2NrX21hcC5jOjM4ODpzdGF0aWMgdm9pZCAqc29ja19tYXBfbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzg5LXtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTM5MS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MzkyOlx0c2sgPSBfX3NvY2tfbWFwX2xvb2t1cF9lbGVtKG1hcCwgKih1MzIgKilrZXkpO1xubmV0L2NvcmUvc29ja19tYXAuYy0zOTMtXHRpZiAoIXNrKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzk5LVxubmV0L2NvcmUvc29ja19tYXAuYzo0MDA6c3RhdGljIHZvaWQgKnNvY2tfbWFwX2xvb2t1cF9zeXMoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxubmV0L2NvcmUvc29ja19tYXAuYy00MDEte1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDA2LVxubmV0L2NvcmUvc29ja19tYXAuYzo0MDc6XHRzayA9IF9fc29ja19tYXBfbG9va3VwX2VsZW0obWFwLCAqKHUzMiAqKWtleSk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTQwOC1cdGlmICghc2spXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy00MTQtXG5uZXQvY29yZS9zb2NrX21hcC5jOjQxNTpzdGF0aWMgaW50IF9fc29ja19tYXBfZGVsZXRlKHN0cnVjdCBicGZfc3RhYiAqc3RhYiwgc3RydWN0IHNvY2sgKnNrX3Rlc3QsXG5uZXQvY29yZS9zb2NrX21hcC5jLTQxNi1cdFx0XHQgICAgIHN0cnVjdCBzb2NrICoqcHNrKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDI1LVx0aWYgKGxpa2VseShzaykpXG5uZXQvY29yZS9zb2NrX21hcC5jOjQyNjpcdFx0c29ja19tYXBfdW5yZWYoc2ssIHBzayk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTQyNy1cdGVsc2Vcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTQzMy1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6NDM0OnN0YXRpYyB2b2lkIHNvY2tfbWFwX2RlbGV0ZV9mcm9tX2xpbmsoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IHNvY2sgKnNrLFxubmV0L2NvcmUvc29ja19tYXAuYy00MzUtXHRcdFx0XHQgICAgICB2b2lkICpsaW5rX3Jhdylcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTQzOC1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6NDM5Olx0X19zb2NrX21hcF9kZWxldGUoc3RhYiwgc2ssIGxpbmtfcmF3KTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDQwLX1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDQxLVxubmV0L2NvcmUvc29ja19tYXAuYzo0NDI6c3RhdGljIGxvbmcgc29ja19tYXBfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxubmV0L2NvcmUvc29ja19tYXAuYy00NDMte1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDUxLVx0cHNrID0gXHUwMDI2c3RhYi1cdTAwM2Vza3NbaV07XG5uZXQvY29yZS9zb2NrX21hcC5jOjQ1MjpcdHJldHVybiBfX3NvY2tfbWFwX2RlbGV0ZShzdGFiLCBOVUxMLCBwc2spO1xubmV0L2NvcmUvc29ja19tYXAuYy00NTMtfVxubmV0L2NvcmUvc29ja19tYXAuYy00NTQtXG5uZXQvY29yZS9zb2NrX21hcC5jOjQ1NTpzdGF0aWMgaW50IHNvY2tfbWFwX2dldF9uZXh0X2tleShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKm5leHQpXG5uZXQvY29yZS9zb2NrX21hcC5jLTQ1Ni17XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy00NjktXG5uZXQvY29yZS9zb2NrX21hcC5jOjQ3MDpzdGF0aWMgaW50IHNvY2tfbWFwX3VwZGF0ZV9jb21tb24oc3RydWN0IGJwZl9tYXAgKm1hcCwgdTMyIGlkeCxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDcxLVx0XHRcdFx0ICBzdHJ1Y3Qgc29jayAqc2ssIHU2NCBmbGFncylcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTQ4OC1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6NDg5Olx0cmV0ID0gc29ja19tYXBfbGluayhtYXAsIHNrKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDkwLVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTUwNS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6NTA2Olx0c29ja19tYXBfYWRkX2xpbmsocHNvY2ssIGxpbmssIG1hcCwgXHUwMDI2c3RhYi1cdTAwM2Vza3NbaWR4XSk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTUwNy1cdHN0YWItXHUwMDNlc2tzW2lkeF0gPSBzaztcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTA4LVx0aWYgKG9zaylcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NTA5Olx0XHRzb2NrX21hcF91bnJlZihvc2ssIFx1MDAyNnN0YWItXHUwMDNlc2tzW2lkeF0pO1xubmV0L2NvcmUvc29ja19tYXAuYy01MTAtXHRzcGluX3VubG9ja19iaChcdTAwMjZzdGFiLVx1MDAzZWxvY2spO1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTIwLVxubmV0L2NvcmUvc29ja19tYXAuYzo1MjE6c3RhdGljIGJvb2wgc29ja19tYXBfb3Bfb2theShjb25zdCBzdHJ1Y3QgYnBmX3NvY2tfb3BzX2tlcm4gKm9wcylcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTIyLXtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTUyNy1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6NTI4OnN0YXRpYyBib29sIHNvY2tfbWFwX3JlZGlyZWN0X2FsbG93ZWQoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxubmV0L2NvcmUvc29ja19tYXAuYy01Mjkte1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTM1LVxubmV0L2NvcmUvc29ja19tYXAuYzo1MzY6c3RhdGljIGJvb2wgc29ja19tYXBfc2tfaXNfc3VpdGFibGUoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxubmV0L2NvcmUvc29ja19tYXAuYy01Mzcte1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTQwLVxubmV0L2NvcmUvc29ja19tYXAuYzo1NDE6c3RhdGljIGJvb2wgc29ja19tYXBfc2tfc3RhdGVfYWxsb3dlZChjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG5uZXQvY29yZS9zb2NrX21hcC5jLTU0Mi17XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz01NTM9c3RhdGljIGludCBzb2NrX2hhc2hfdXBkYXRlX2NvbW1vbihzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy01NTUtXG5uZXQvY29yZS9zb2NrX21hcC5jOjU1NjppbnQgc29ja19tYXBfdXBkYXRlX2VsZW1fc3lzKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsXG5uZXQvY29yZS9zb2NrX21hcC5jLTU1Ny1cdFx0XHQgICAgIHU2NCBmbGFncylcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTU3OC1cdH1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6NTc5Olx0aWYgKCFzb2NrX21hcF9za19pc19zdWl0YWJsZShzaykpIHtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTgwLVx0XHRyZXQgPSAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTU4My1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6NTg0Olx0c29ja19tYXBfc2tfYWNxdWlyZShzayk7XG5uZXQvY29yZS9zb2NrX21hcC5jOjU4NTpcdGlmICghc29ja19tYXBfc2tfc3RhdGVfYWxsb3dlZChzaykpXG5uZXQvY29yZS9zb2NrX21hcC5jLTU4Ni1cdFx0cmV0ID0gLUVPUE5PVFNVUFA7XG5uZXQvY29yZS9zb2NrX21hcC5jLTU4Ny1cdGVsc2UgaWYgKG1hcC1cdTAwM2VtYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfU09DS01BUClcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NTg4Olx0XHRyZXQgPSBzb2NrX21hcF91cGRhdGVfY29tbW9uKG1hcCwgKih1MzIgKilrZXksIHNrLCBmbGFncyk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTU4OS1cdGVsc2Vcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTkwLVx0XHRyZXQgPSBzb2NrX2hhc2hfdXBkYXRlX2NvbW1vbihtYXAsIGtleSwgc2ssIGZsYWdzKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NTkxOlx0c29ja19tYXBfc2tfcmVsZWFzZShzayk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTU5Mi1vdXQ6XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy01OTYtXG5uZXQvY29yZS9zb2NrX21hcC5jOjU5NzpzdGF0aWMgbG9uZyBzb2NrX21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXG5uZXQvY29yZS9zb2NrX21hcC5jLTU5OC1cdFx0XHRcdCB2b2lkICp2YWx1ZSwgdTY0IGZsYWdzKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjA1LVxubmV0L2NvcmUvc29ja19tYXAuYzo2MDY6XHRpZiAoIXNvY2tfbWFwX3NrX2lzX3N1aXRhYmxlKHNrKSlcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjA3LVx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy02MTAtXHRiaF9sb2NrX3NvY2soc2spO1xubmV0L2NvcmUvc29ja19tYXAuYzo2MTE6XHRpZiAoIXNvY2tfbWFwX3NrX3N0YXRlX2FsbG93ZWQoc2spKVxubmV0L2NvcmUvc29ja19tYXAuYy02MTItXHRcdHJldCA9IC1FT1BOT1RTVVBQO1xubmV0L2NvcmUvc29ja19tYXAuYy02MTMtXHRlbHNlIGlmIChtYXAtXHUwMDNlbWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX1NPQ0tNQVApXG5uZXQvY29yZS9zb2NrX21hcC5jOjYxNDpcdFx0cmV0ID0gc29ja19tYXBfdXBkYXRlX2NvbW1vbihtYXAsICoodTMyICopa2V5LCBzaywgZmxhZ3MpO1xubmV0L2NvcmUvc29ja19tYXAuYy02MTUtXHRlbHNlXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy02MjEtXG5uZXQvY29yZS9zb2NrX21hcC5jOjYyMjpCUEZfQ0FMTF80KGJwZl9zb2NrX21hcF91cGRhdGUsIHN0cnVjdCBicGZfc29ja19vcHNfa2VybiAqLCBzb3BzLFxubmV0L2NvcmUvc29ja19tYXAuYy02MjMtXHQgICBzdHJ1Y3QgYnBmX21hcCAqLCBtYXAsIHZvaWQgKiwga2V5LCB1NjQsIGZsYWdzKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjI2LVxubmV0L2NvcmUvc29ja19tYXAuYzo2Mjc6XHRpZiAobGlrZWx5KHNvY2tfbWFwX3NrX2lzX3N1aXRhYmxlKHNvcHMtXHUwMDNlc2spIFx1MDAyNlx1MDAyNlxubmV0L2NvcmUvc29ja19tYXAuYzo2Mjg6XHRcdCAgIHNvY2tfbWFwX29wX29rYXkoc29wcykpKVxubmV0L2NvcmUvc29ja19tYXAuYzo2Mjk6XHRcdHJldHVybiBzb2NrX21hcF91cGRhdGVfY29tbW9uKG1hcCwgKih1MzIgKilrZXksIHNvcHMtXHUwMDNlc2ssXG5uZXQvY29yZS9zb2NrX21hcC5jLTYzMC1cdFx0XHRcdFx0ICAgICAgZmxhZ3MpO1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjMzLVxubmV0L2NvcmUvc29ja19tYXAuYzo2MzQ6Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zb2NrX21hcF91cGRhdGVfcHJvdG8gPSB7XG5uZXQvY29yZS9zb2NrX21hcC5jOjYzNTpcdC5mdW5jXHRcdD0gYnBmX3NvY2tfbWFwX3VwZGF0ZSxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjM2LVx0LmdwbF9vbmx5XHQ9IGZhbHNlLFxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM9NjQ1PUJQRl9DQUxMXzQoYnBmX3NrX3JlZGlyZWN0X21hcCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLFxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjUyLVxubmV0L2NvcmUvc29ja19tYXAuYzo2NTM6XHRzayA9IF9fc29ja19tYXBfbG9va3VwX2VsZW0obWFwLCBrZXkpO1xubmV0L2NvcmUvc29ja19tYXAuYzo2NTQ6XHRpZiAodW5saWtlbHkoIXNrIHx8ICFzb2NrX21hcF9yZWRpcmVjdF9hbGxvd2VkKHNrKSkpXG5uZXQvY29yZS9zb2NrX21hcC5jLTY1NS1cdFx0cmV0dXJuIFNLX0RST1A7XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz02NzM9QlBGX0NBTExfNChicGZfbXNnX3JlZGlyZWN0X21hcCwgc3RydWN0IHNrX21zZyAqLCBtc2csXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy02ODAtXG5uZXQvY29yZS9zb2NrX21hcC5jOjY4MTpcdHNrID0gX19zb2NrX21hcF9sb29rdXBfZWxlbShtYXAsIGtleSk7XG5uZXQvY29yZS9zb2NrX21hcC5jOjY4MjpcdGlmICh1bmxpa2VseSghc2sgfHwgIXNvY2tfbWFwX3JlZGlyZWN0X2FsbG93ZWQoc2spKSlcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjgzLVx0XHRyZXR1cm4gU0tfRFJPUDtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTY5ND1jb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX21zZ19yZWRpcmVjdF9tYXBfcHJvdG8gPSB7XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy03MDMtXG5uZXQvY29yZS9zb2NrX21hcC5jOjcwNDpzdHJ1Y3Qgc29ja19tYXBfc2VxX2luZm8ge1xubmV0L2NvcmUvc29ja19tYXAuYy03MDUtXHRzdHJ1Y3QgYnBmX21hcCAqbWFwO1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM9NzE3PURFRklORV9CUEZfSVRFUl9GVU5DKHNvY2ttYXAsIHN0cnVjdCBicGZfaXRlcl9tZXRhICptZXRhLFxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzIwLVxubmV0L2NvcmUvc29ja19tYXAuYzo3MjE6c3RhdGljIHZvaWQgKnNvY2tfbWFwX3NlcV9sb29rdXBfZWxlbShzdHJ1Y3Qgc29ja19tYXBfc2VxX2luZm8gKmluZm8pXG5uZXQvY29yZS9zb2NrX21hcC5jLTcyMi17XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy03MjUtXG5uZXQvY29yZS9zb2NrX21hcC5jOjcyNjpcdGluZm8tXHUwMDNlc2sgPSBfX3NvY2tfbWFwX2xvb2t1cF9lbGVtKGluZm8tXHUwMDNlbWFwLCBpbmZvLVx1MDAzZWluZGV4KTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzI3LVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzMxLVxubmV0L2NvcmUvc29ja19tYXAuYzo3MzI6c3RhdGljIHZvaWQgKnNvY2tfbWFwX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpXG5uZXQvY29yZS9zb2NrX21hcC5jLTczMy1cdF9fYWNxdWlyZXMocmN1KVxubmV0L2NvcmUvc29ja19tYXAuYy03MzQte1xubmV0L2NvcmUvc29ja19tYXAuYzo3MzU6XHRzdHJ1Y3Qgc29ja19tYXBfc2VxX2luZm8gKmluZm8gPSBzZXEtXHUwMDNlcHJpdmF0ZTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzM2LVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzM5LVxubmV0L2NvcmUvc29ja19tYXAuYzo3NDA6XHQvKiBwYWlycyB3aXRoIHNvY2tfbWFwX3NlcV9zdG9wICovXG5uZXQvY29yZS9zb2NrX21hcC5jLTc0MS1cdHJjdV9yZWFkX2xvY2soKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NzQyOlx0cmV0dXJuIHNvY2tfbWFwX3NlcV9sb29rdXBfZWxlbShpbmZvKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzQzLX1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzQ0LVxubmV0L2NvcmUvc29ja19tYXAuYzo3NDU6c3RhdGljIHZvaWQgKnNvY2tfbWFwX3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBsb2ZmX3QgKnBvcylcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzQ2LVx0X19tdXN0X2hvbGQocmN1KVxubmV0L2NvcmUvc29ja19tYXAuYy03NDcte1xubmV0L2NvcmUvc29ja19tYXAuYzo3NDg6XHRzdHJ1Y3Qgc29ja19tYXBfc2VxX2luZm8gKmluZm8gPSBzZXEtXHUwMDNlcHJpdmF0ZTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzQ5LVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzUyLVxubmV0L2NvcmUvc29ja19tYXAuYzo3NTM6XHRyZXR1cm4gc29ja19tYXBfc2VxX2xvb2t1cF9lbGVtKGluZm8pO1xubmV0L2NvcmUvc29ja19tYXAuYy03NTQtfVxubmV0L2NvcmUvc29ja19tYXAuYy03NTUtXG5uZXQvY29yZS9zb2NrX21hcC5jOjc1NjpzdGF0aWMgaW50IHNvY2tfbWFwX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxubmV0L2NvcmUvc29ja19tYXAuYy03NTctXHRfX211c3RfaG9sZChyY3UpXG5uZXQvY29yZS9zb2NrX21hcC5jLTc1OC17XG5uZXQvY29yZS9zb2NrX21hcC5jOjc1OTpcdHN0cnVjdCBzb2NrX21hcF9zZXFfaW5mbyAqaW5mbyA9IHNlcS1cdTAwM2Vwcml2YXRlO1xubmV0L2NvcmUvc29ja19tYXAuYy03NjAtXHRzdHJ1Y3QgYnBmX2l0ZXJfX3NvY2ttYXAgY3R4ID0ge307XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy03NzgtXG5uZXQvY29yZS9zb2NrX21hcC5jOjc3OTpzdGF0aWMgdm9pZCBzb2NrX21hcF9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzgwLVx0X19yZWxlYXNlcyhyY3UpXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy03ODItXHRpZiAoIXYpXG5uZXQvY29yZS9zb2NrX21hcC5jOjc4MzpcdFx0KHZvaWQpc29ja19tYXBfc2VxX3Nob3coc2VxLCBOVUxMKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzg0LVxubmV0L2NvcmUvc29ja19tYXAuYzo3ODU6XHQvKiBwYWlycyB3aXRoIHNvY2tfbWFwX3NlcV9zdGFydCAqL1xubmV0L2NvcmUvc29ja19tYXAuYy03ODYtXHRyY3VfcmVhZF91bmxvY2soKTtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTc4OC1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6Nzg5OnN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgc29ja19tYXBfc2VxX29wcyA9IHtcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NzkwOlx0LnN0YXJ0XHQ9IHNvY2tfbWFwX3NlcV9zdGFydCxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NzkxOlx0Lm5leHRcdD0gc29ja19tYXBfc2VxX25leHQsXG5uZXQvY29yZS9zb2NrX21hcC5jOjc5MjpcdC5zdG9wXHQ9IHNvY2tfbWFwX3NlcV9zdG9wLFxubmV0L2NvcmUvc29ja19tYXAuYzo3OTM6XHQuc2hvd1x0PSBzb2NrX21hcF9zZXFfc2hvdyxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzk0LX07XG5uZXQvY29yZS9zb2NrX21hcC5jLTc5NS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6Nzk2OnN0YXRpYyBpbnQgc29ja19tYXBfaW5pdF9zZXFfcHJpdmF0ZSh2b2lkICpwcml2X2RhdGEsXG5uZXQvY29yZS9zb2NrX21hcC5jLTc5Ny1cdFx0XHRcdCAgICAgc3RydWN0IGJwZl9pdGVyX2F1eF9pbmZvICphdXgpXG5uZXQvY29yZS9zb2NrX21hcC5jLTc5OC17XG5uZXQvY29yZS9zb2NrX21hcC5jOjc5OTpcdHN0cnVjdCBzb2NrX21hcF9zZXFfaW5mbyAqaW5mbyA9IHByaXZfZGF0YTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODAwLVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtODA1LVxubmV0L2NvcmUvc29ja19tYXAuYzo4MDY6c3RhdGljIHZvaWQgc29ja19tYXBfZmluaV9zZXFfcHJpdmF0ZSh2b2lkICpwcml2X2RhdGEpXG5uZXQvY29yZS9zb2NrX21hcC5jLTgwNy17XG5uZXQvY29yZS9zb2NrX21hcC5jOjgwODpcdHN0cnVjdCBzb2NrX21hcF9zZXFfaW5mbyAqaW5mbyA9IHByaXZfZGF0YTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODA5LVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtODEyLVxubmV0L2NvcmUvc29ja19tYXAuYzo4MTM6c3RhdGljIHU2NCBzb2NrX21hcF9tZW1fdXNhZ2UoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcClcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODE0LXtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTgyMC1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODIxOnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2l0ZXJfc2VxX2luZm8gc29ja19tYXBfaXRlcl9zZXFfaW5mbyA9IHtcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODIyOlx0LnNlcV9vcHNcdFx0PSBcdTAwMjZzb2NrX21hcF9zZXFfb3BzLFxubmV0L2NvcmUvc29ja19tYXAuYzo4MjM6XHQuaW5pdF9zZXFfcHJpdmF0ZVx0PSBzb2NrX21hcF9pbml0X3NlcV9wcml2YXRlLFxubmV0L2NvcmUvc29ja19tYXAuYzo4MjQ6XHQuZmluaV9zZXFfcHJpdmF0ZVx0PSBzb2NrX21hcF9maW5pX3NlcV9wcml2YXRlLFxubmV0L2NvcmUvc29ja19tYXAuYzo4MjU6XHQuc2VxX3ByaXZfc2l6ZVx0XHQ9IHNpemVvZihzdHJ1Y3Qgc29ja19tYXBfc2VxX2luZm8pLFxubmV0L2NvcmUvc29ja19tYXAuYy04MjYtfTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODI3LVxubmV0L2NvcmUvc29ja19tYXAuYzo4Mjg6QlRGX0lEX0xJU1RfU0lOR0xFKHNvY2tfbWFwX2J0Zl9pZHMsIHN0cnVjdCwgYnBmX3N0YWIpXG5uZXQvY29yZS9zb2NrX21hcC5jOjgyOTpjb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgc29ja19tYXBfb3BzID0ge1xubmV0L2NvcmUvc29ja19tYXAuYy04MzAtXHQubWFwX21ldGFfZXF1YWxcdFx0PSBicGZfbWFwX21ldGFfZXF1YWwsXG5uZXQvY29yZS9zb2NrX21hcC5jOjgzMTpcdC5tYXBfYWxsb2NcdFx0PSBzb2NrX21hcF9hbGxvYyxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODMyOlx0Lm1hcF9mcmVlXHRcdD0gc29ja19tYXBfZnJlZSxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODMzOlx0Lm1hcF9nZXRfbmV4dF9rZXlcdD0gc29ja19tYXBfZ2V0X25leHRfa2V5LFxubmV0L2NvcmUvc29ja19tYXAuYzo4MzQ6XHQubWFwX2xvb2t1cF9lbGVtX3N5c19vbmx5ID0gc29ja19tYXBfbG9va3VwX3N5cyxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODM1Olx0Lm1hcF91cGRhdGVfZWxlbVx0PSBzb2NrX21hcF91cGRhdGVfZWxlbSxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODM2Olx0Lm1hcF9kZWxldGVfZWxlbVx0PSBzb2NrX21hcF9kZWxldGVfZWxlbSxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODM3Olx0Lm1hcF9sb29rdXBfZWxlbVx0PSBzb2NrX21hcF9sb29rdXAsXG5uZXQvY29yZS9zb2NrX21hcC5jOjgzODpcdC5tYXBfcmVsZWFzZV91cmVmXHQ9IHNvY2tfbWFwX3JlbGVhc2VfcHJvZ3MsXG5uZXQvY29yZS9zb2NrX21hcC5jLTgzOS1cdC5tYXBfY2hlY2tfYnRmXHRcdD0gbWFwX2NoZWNrX25vX2J0Zixcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODQwOlx0Lm1hcF9tZW1fdXNhZ2VcdFx0PSBzb2NrX21hcF9tZW1fdXNhZ2UsXG5uZXQvY29yZS9zb2NrX21hcC5jOjg0MTpcdC5tYXBfYnRmX2lkXHRcdD0gXHUwMDI2c29ja19tYXBfYnRmX2lkc1swXSxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODQyOlx0Lml0ZXJfc2VxX2luZm9cdFx0PSBcdTAwMjZzb2NrX21hcF9pdGVyX3NlcV9pbmZvLFxubmV0L2NvcmUvc29ja19tYXAuYy04NDMtfTtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTkxNj1zdGF0aWMgdm9pZCBzb2NrX2hhc2hfZGVsZXRlX2Zyb21fbGluayhzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy05MzQtXHRcdGhsaXN0X2RlbF9yY3UoXHUwMDI2ZWxlbS1cdTAwM2Vub2RlKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmM6OTM1Olx0XHRzb2NrX21hcF91bnJlZihlbGVtLVx1MDAzZXNrLCBlbGVtKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtOTM2LVx0XHRzb2NrX2hhc2hfZnJlZV9lbGVtKGh0YWIsIGVsZW0pO1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM9OTQxPXN0YXRpYyBsb25nIHNvY2tfaGFzaF9kZWxldGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy05NTUtXHRcdGhsaXN0X2RlbF9yY3UoXHUwMDI2ZWxlbS1cdTAwM2Vub2RlKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmM6OTU2Olx0XHRzb2NrX21hcF91bnJlZihlbGVtLVx1MDAzZXNrLCBlbGVtKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtOTU3LVx0XHRzb2NrX2hhc2hfZnJlZV9lbGVtKGh0YWIsIGVsZW0pO1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM9OTkxPXN0YXRpYyBpbnQgc29ja19oYXNoX3VwZGF0ZV9jb21tb24oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTAwOS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTAxMDpcdHJldCA9IHNvY2tfbWFwX2xpbmsobWFwLCBzayk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTEwMTEtXHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTAzNS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTAzNjpcdHNvY2tfbWFwX2FkZF9saW5rKHBzb2NrLCBsaW5rLCBtYXAsIGVsZW1fbmV3KTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTAzNy1cdC8qIEFkZCBuZXcgZWxlbWVudCB0byB0aGUgaGVhZCBvZiB0aGUgbGlzdCwgc28gdGhhdFxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTA0Mi1cdFx0aGxpc3RfZGVsX3JjdShcdTAwMjZlbGVtLVx1MDAzZW5vZGUpO1xubmV0L2NvcmUvc29ja19tYXAuYzoxMDQzOlx0XHRzb2NrX21hcF91bnJlZihlbGVtLVx1MDAzZXNrLCBlbGVtKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTA0NC1cdFx0c29ja19oYXNoX2ZyZWVfZWxlbShodGFiLCBlbGVtKTtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTExNDQ9c3RhdGljIHZvaWQgc29ja19oYXNoX2ZyZWUoc3RydWN0IGJwZl9tYXAgKm1hcClcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTExODAtXHRcdFx0cmN1X3JlYWRfbG9jaygpO1xubmV0L2NvcmUvc29ja19tYXAuYzoxMTgxOlx0XHRcdHNvY2tfbWFwX3VucmVmKGVsZW0tXHUwMDNlc2ssIGVsZW0pO1xubmV0L2NvcmUvc29ja19tYXAuYy0xMTgyLVx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM9MTIyOT1CUEZfQ0FMTF80KGJwZl9zb2NrX2hhc2hfdXBkYXRlLCBzdHJ1Y3QgYnBmX3NvY2tfb3BzX2tlcm4gKiwgc29wcyxcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTEyMzMtXG5uZXQvY29yZS9zb2NrX21hcC5jOjEyMzQ6XHRpZiAobGlrZWx5KHNvY2tfbWFwX3NrX2lzX3N1aXRhYmxlKHNvcHMtXHUwMDNlc2spIFx1MDAyNlx1MDAyNlxubmV0L2NvcmUvc29ja19tYXAuYzoxMjM1Olx0XHQgICBzb2NrX21hcF9vcF9va2F5KHNvcHMpKSlcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTIzNi1cdFx0cmV0dXJuIHNvY2tfaGFzaF91cGRhdGVfY29tbW9uKG1hcCwga2V5LCBzb3BzLVx1MDAzZXNrLCBmbGFncyk7XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz0xMjUxPUJQRl9DQUxMXzQoYnBmX3NrX3JlZGlyZWN0X2hhc2gsIHN0cnVjdCBza19idWZmICosIHNrYixcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTEyNTktXHRzayA9IF9fc29ja19oYXNoX2xvb2t1cF9lbGVtKG1hcCwga2V5KTtcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTI2MDpcdGlmICh1bmxpa2VseSghc2sgfHwgIXNvY2tfbWFwX3JlZGlyZWN0X2FsbG93ZWQoc2spKSlcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTI2MS1cdFx0cmV0dXJuIFNLX0RST1A7XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz0xMjc5PUJQRl9DQUxMXzQoYnBmX21zZ19yZWRpcmVjdF9oYXNoLCBzdHJ1Y3Qgc2tfbXNnICosIG1zZyxcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTEyODctXHRzayA9IF9fc29ja19oYXNoX2xvb2t1cF9lbGVtKG1hcCwga2V5KTtcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTI4ODpcdGlmICh1bmxpa2VseSghc2sgfHwgIXNvY2tfbWFwX3JlZGlyZWN0X2FsbG93ZWQoc2spKSlcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTI4OS1cdFx0cmV0dXJuIFNLX0RST1A7XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz0xNDQ1PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBzb2NrX2hhc2hfb3BzID0ge1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTQ0OS1cdC5tYXBfZ2V0X25leHRfa2V5XHQ9IHNvY2tfaGFzaF9nZXRfbmV4dF9rZXksXG5uZXQvY29yZS9zb2NrX21hcC5jOjE0NTA6XHQubWFwX3VwZGF0ZV9lbGVtXHQ9IHNvY2tfbWFwX3VwZGF0ZV9lbGVtLFxubmV0L2NvcmUvc29ja19tYXAuYy0xNDUxLVx0Lm1hcF9kZWxldGVfZWxlbVx0PSBzb2NrX2hhc2hfZGVsZXRlX2VsZW0sXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xNDYwLVxubmV0L2NvcmUvc29ja19tYXAuYzoxNDYxOnN0YXRpYyBzdHJ1Y3Qgc2tfcHNvY2tfcHJvZ3MgKnNvY2tfbWFwX3Byb2dzKHN0cnVjdCBicGZfbWFwICptYXApXG5uZXQvY29yZS9zb2NrX21hcC5jLTE0NjIte1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTQ3NC1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTQ3NTpzdGF0aWMgaW50IHNvY2tfbWFwX3Byb2dfbGlua19sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9wcm9nICoqKnBwcm9nLFxubmV0L2NvcmUvc29ja19tYXAuYy0xNDc2LVx0XHRcdFx0ICAgICBzdHJ1Y3QgYnBmX2xpbmsgKioqcGxpbmssIHUzMiB3aGljaClcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTQ3Ny17XG5uZXQvY29yZS9zb2NrX21hcC5jOjE0Nzg6XHRzdHJ1Y3Qgc2tfcHNvY2tfcHJvZ3MgKnByb2dzID0gc29ja19tYXBfcHJvZ3MobWFwKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTQ3OS1cdHN0cnVjdCBicGZfcHJvZyAqKmN1cl9wcHJvZztcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTE1MjMtICovXG5uZXQvY29yZS9zb2NrX21hcC5jOjE1MjQ6c3RhdGljIGludCBzb2NrX21hcF9wcm9nX3VwZGF0ZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG5uZXQvY29yZS9zb2NrX21hcC5jLTE1MjUtXHRcdFx0XHRzdHJ1Y3QgYnBmX3Byb2cgKm9sZCwgc3RydWN0IGJwZl9saW5rICpsaW5rLFxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTUzMS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTUzMjpcdHJldCA9IHNvY2tfbWFwX3Byb2dfbGlua19sb29rdXAobWFwLCBcdTAwMjZwcHJvZywgXHUwMDI2cGxpbmssIHdoaWNoKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTUzMy1cdGlmIChyZXQpXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xNTU0LVxubmV0L2NvcmUvc29ja19tYXAuYzoxNTU1OmludCBzb2NrX21hcF9icGZfcHJvZ19xdWVyeShjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTU1Ni1cdFx0XHQgICAgdW5pb24gYnBmX2F0dHIgX191c2VyICp1YXR0cilcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTE1NzUtXG5uZXQvY29yZS9zb2NrX21hcC5jOjE1NzY6XHRyZXQgPSBzb2NrX21hcF9wcm9nX2xpbmtfbG9va3VwKG1hcCwgXHUwMDI2cHByb2csIE5VTEwsIGF0dHItXHUwMDNlcXVlcnkuYXR0YWNoX3R5cGUpO1xubmV0L2NvcmUvc29ja19tYXAuYy0xNTc3LVx0aWYgKHJldClcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTE2MDMtXG5uZXQvY29yZS9zb2NrX21hcC5jOjE2MDQ6c3RhdGljIHZvaWQgc29ja19tYXBfdW5saW5rKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrX2xpbmsgKmxpbmspXG5uZXQvY29yZS9zb2NrX21hcC5jLTE2MDUte1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTYwNy1cdGNhc2UgQlBGX01BUF9UWVBFX1NPQ0tNQVA6XG5uZXQvY29yZS9zb2NrX21hcC5jOjE2MDg6XHRcdHJldHVybiBzb2NrX21hcF9kZWxldGVfZnJvbV9saW5rKGxpbmstXHUwMDNlbWFwLCBzayxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTYwOS1cdFx0XHRcdFx0XHQgbGluay1cdTAwM2VsaW5rX3Jhdyk7XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xNjE3LVxubmV0L2NvcmUvc29ja19tYXAuYzoxNjE4OnN0YXRpYyB2b2lkIHNvY2tfbWFwX3JlbW92ZV9saW5rcyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2spXG5uZXQvY29yZS9zb2NrX21hcC5jLTE2MTkte1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTYyMi1cdHdoaWxlICgobGluayA9IHNrX3Bzb2NrX2xpbmtfcG9wKHBzb2NrKSkpIHtcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTYyMzpcdFx0c29ja19tYXBfdW5saW5rKHNrLCBsaW5rKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTYyNC1cdFx0c2tfcHNvY2tfZnJlZV9saW5rKGxpbmspO1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTYyNy1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTYyODp2b2lkIHNvY2tfbWFwX3VuaGFzaChzdHJ1Y3Qgc29jayAqc2spXG5uZXQvY29yZS9zb2NrX21hcC5jLTE2Mjkte1xuLS1cblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAyMzowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTEyMAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEwMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNvY2ttYXAgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIHNvY2ttYXAgdGhpbmcuIFRoZSBkb2N1bWVudGF0aW9uIHN0YXRlcyB0aGF0IGBDT05GSUdfQlBGX1NZU0NBTExgIGVuYWJsZXMgaXQuIFJpZ2h0LCBtYWtlcyBzZW5zZSwgdGhhdCYjMzk7cyB3aGF0IEkmIzM5O2QgZXhwZWN0LiBOb3csIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IGluIHRoZSBrZXJuZWwgc291cmNlLiBBaCwgaGVyZSB3ZSBhcmUgaW4gYG5ldC9jb3JlL01ha2VmaWxlYC4gQW5kIGl0IGNvbmZpcm1zOiBgb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gc29ja19tYXAub2AuIFNvLCB5ZWFoLCBpdCAqaXMqIGp1c3QgYENPTkZJR19CUEZfU1lTQ0FMTGAgdGhhdCBhY3RpdmF0ZXMgdGhlIHNvY2ttYXAgb2JqZWN0LiBIbW0sIGJ1dCB3YWl0LiBUaGlua2luZyBhIGJpdCBtb3JlIGRlZXBseSBhYm91dCB0aGlzLCBzaW5jZSBgc29ja19tYXAub2AgaXMgbG9jYXRlZCBpbiB0aGUgYG5ldC9jb3JlL2AgZGlyZWN0b3J5LCBJIGJldCB3ZSBuZWVkIGBDT05GSUdfTkVUYCB0b28sIGV2ZW4gdGhvdWdoIGl0JiMzOTtzIG5vdCBleHBsaWNpdGx5IG1lbnRpb25lZC4gTGV0JiMzOTtzIGp1c3QgY29uZmlybSB0aGF0IGJ5IHRha2luZyBhIHF1aWNrIGxvb2sgYXQgYG5ldC9jb3JlL01ha2VmaWxlYCBhZ2Fpbi4gR29vZCBwcmFjdGljZSB0byBiZSB0aG9yb3VnaCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAyMzowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfQlBGX1NZU0NBTEwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvTWFrZWZpbGU9NDQ9b2JqLSQoQ09ORklHX05FVF9TT0NLX01TRykgJiM0Mzs9IHNrbXNnLm9cbm5ldC9jb3JlL01ha2VmaWxlOjQ1Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHNvY2tfbWFwLm9cbm5ldC9jb3JlL01ha2VmaWxlOjQ2Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9za19zdG9yYWdlLm9cbm5ldC9jb3JlL01ha2VmaWxlLTQ3LW9iai0kKENPTkZJR19PRilcdCYjNDM7PSBvZl9uZXQub1xuLS1cbm5ldC9jb3JlL2Rldi5oPTM4MT1pbnQgcnBzX2NwdW1hc2tfaG91c2VrZWVwaW5nKHN0cnVjdCBjcHVtYXNrICptYXNrKTtcbm5ldC9jb3JlL2Rldi5oLTM4Mi1cbm5ldC9jb3JlL2Rldi5oOjM4MzojaWYgZGVmaW5lZChDT05GSUdfREVCVUdfTkVUKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfQlBGX1NZU0NBTEwpXG5uZXQvY29yZS9kZXYuaC0zODQtdm9pZCB4ZHBfZG9fY2hlY2tfZmx1c2hlZChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTQ0NDE9RVhQT1JUX1NZTUJPTF9HUEwoeGRwX2RvX2ZsdXNoKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTQ0NDItXG5uZXQvY29yZS9maWx0ZXIuYzo0NDQzOiNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19ORVQpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19CUEZfU1lTQ0FMTClcbm5ldC9jb3JlL2ZpbHRlci5jLTQ0NDQtdm9pZCB4ZHBfZG9fY2hlY2tfZmx1c2hlZChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpXG4tLVxubmV0L2NvcmUvZmxvd19kaXNzZWN0b3IuYz03ND1FWFBPUlRfU1lNQk9MKHNrYl9mbG93X2Rpc3NlY3Rvcl9pbml0KTtcbm5ldC9jb3JlL2Zsb3dfZGlzc2VjdG9yLmMtNzUtXG5uZXQvY29yZS9mbG93X2Rpc3NlY3Rvci5jOjc2OiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbm5ldC9jb3JlL2Zsb3dfZGlzc2VjdG9yLmMtNzctaW50IGZsb3dfZGlzc2VjdG9yX2JwZl9wcm9nX2F0dGFjaF9jaGVjayhzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L2NvcmUvZmxvd19kaXNzZWN0b3IuYy0xMDUtfVxubmV0L2NvcmUvZmxvd19kaXNzZWN0b3IuYzoxMDY6I2VuZGlmIC8qIENPTkZJR19CUEZfU1lTQ0FMTCAqL1xubmV0L2NvcmUvZmxvd19kaXNzZWN0b3IuYy0xMDctXG4tLVxubmV0L2NvcmUvc29jay5jPTIzNTA9c3RhdGljIHZvaWQgX19za19kZXN0cnVjdChzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXG4tLVxubmV0L2NvcmUvc29jay5jLTIzNjctXG5uZXQvY29yZS9zb2NrLmM6MjM2ODojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG5uZXQvY29yZS9zb2NrLmMtMjM2OS1cdGJwZl9za19zdG9yYWdlX2ZyZWUoc2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAyMzowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjA3MQoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgc28gSSYjMzk7dmUgZ290IGEgY291cGxlIG9mIGtleSBkZXBlbmRlbmNpZXMgaWRlbnRpZmllZCByaWdodCBvZmYgdGhlIGJhdDogYENPTkZJR19CUEZfU1lTQ0FMTGAgYW5kIGBDT05GSUdfTkVUYC4gVGhhdCBmZWVscyByaWdodCwgYnV0IGxldCYjMzk7cyBub3QgbWFrZSBhbnkgYXNzdW1wdGlvbnMuIEkgbmVlZCB0byBleHBsaWNpdGx5IHZlcmlmeSB0aGF0IGBDT05GSUdfTkVUYCBpcyBpbmRlZWQgYSBoYXJkIHJlcXVpcmVtZW50IGZvciB0aGUgYHNvY2tfbWFwLm9gIG9iamVjdC4KCkEgcXVpY2sgY3Jvc3MtcmVmZXJlbmNlIHdvdWxkIGJlIGluIG9yZGVyLiBBaCwgeWVzLCBsb29raW5nIGF0IHRoZSBidWlsZCBwcm9jZXNzLCBpdCYjMzk7cyBjbGVhciB0aGF0IHRoZSBgbmV0L2NvcmUvYCBkaXJlY3RvcnkgZ2V0cyBidWlsdCBvbmx5IHdoZW4gYENPTkZJR19ORVRgIGlzIGVuYWJsZWQuIFRoYXQgY29uZmlybXMgbXkgaW5pdGlhbCBpbnR1aXRpb24uIE5vdywgdG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIHJlYWxseSBnbGFuY2UgYXQgYG5ldC9NYWtlZmlsZWAgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgc25lYWt5IGNvbmRpdGlvbmFsIGluY2x1c2lvbnMgb3IgYml6YXJyZSBidWlsZCBydWxlcyBJJiMzOTttIG1pc3NpbmcuIEFsd2F5cyBnb29kIHRvIGRvdWJsZS1jaGVjayB0aG9zZSBNYWtlZmlsZSBkZXBlbmRlbmNpZXMsIGp1c3QgdG8gYmUgc2FmZS4gSXQmIzM5O3MgdGhlIGRldmlsIGluIHRoZSBkZXRhaWxzLCBhZnRlciBhbGwhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDIzOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvcmUvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9NYWtlZmlsZS04LVxubmV0L01ha2VmaWxlOjk6b2JqLXlcdFx0XHRcdDo9IGRldnJlcy5vIHNvY2tldC5vIGNvcmUvXG5uZXQvTWFrZWZpbGUtMTAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDIzOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNDIzCgkJCQkJCQlvdXRwdXQ6IDEzMAoJCQkJCQkJdGhvdWdodHM6IDEwMDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEJQRiBWZXJpZmllciBSZXN0cmljdGlvbnMgZm9yIEZ1enppbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBmb3IgZnV6emluZy4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHJlc3RyaWN0cyBzb2NrbWFwIHVwZGF0ZXMgd2l0aGluIHRoZSBCUEYgdmVyaWZpZXIuIFRoZSBjb3JlIGlkZWEgaXMgdGhhdCBjZXJ0YWluIEJQRiBwcm9ncmFtIHR5cGVzIGFyZSBubyBsb25nZXIgYWxsb3dlZCB0byBtb2RpZnkgc29ja21hcHMuIFRoaXMgaXMgYSBjcnVjaWFsIGNoYW5nZSBpbiB0aGUgdmVyaWZpZXImIzM5O3MgYmVoYXZpb3IuIFNvIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZXN0YWJsaXNoIGlzIHRoZSBjb25maWd1cmF0aW9uIGFuZCBmb2N1cyBzeW1ib2xzIGZvciBmdXp6aW5nIHRoaXMgcGF0Y2guCgpSaWdodCwgdGhlIGJhc2UgY29uZmlndXJhdGlvbiBpcyBkZXRlcm1pbmVkIGJ5IGBDT05GSUdfTkVUYCBiZWNhdXNlIHRoZSBgbmV0L2AgZGlyZWN0b3J5IGlzIGJ1aWx0IHdoZW4gYENPTkZJR19ORVRgIGlzIGVuYWJsZWQuIEFuZCwgb2YgY291cnNlLCBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBlc3NlbnRpYWwsIHNpbmNlIGl0JiMzOTtzIGEgQlBGLXJlbGF0ZWQgY2hhbmdlLiBTbyB0aG9zZSBhcmUgbXkgaW5pdGlhbCBjb25maWcgYXNzdW1wdGlvbnM6IGBDT05GSUdfTkVUYCBhbmQgYENPTkZJR19CUEZfU1lTQ0FMTGAuCgpOb3csIGxldCYjMzk7cyBpZGVudGlmeSB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIHRoaXMgcGF0Y2ggdG91Y2hlcyBkaXJlY3RseS4gRnJvbSB0aGUgY29kZSwgdGhlIGtleSBzeW1ib2xzIGhlcmUgc2VlbSB0byBiZSBgbWF5X3VwZGF0ZV9zb2NrbWFwYCBhbmQgYGNoZWNrX21hcF9mdW5jX2NvbXBhdGliaWxpdHlgLiBXYWl0LCBgbWF5X3VwZGF0ZV9zb2NrbWFwYCBpcyBzdGF0aWMsIHdoaWNoIGlzIHVzdWFsbHkgb2theSB3aXRoIGZ1enppbmcgdG9vbHMuIFRoZSBjaGVjayBpcyBjYWxsZWQgYnkgYGNoZWNrX21hcF9mdW5jX2NvbXBhdGliaWxpdHlgIHdoaWNoIGluIHR1cm4gaXMgY2FsbGVkIGJ5IGBjaGVja19oZWxwZXJfY2FsbGAgd2hpY2ggaXMgY2FsbGVkIGJ5IGBkb19jaGVja2AuIFRoaXMgbWFrZXMgaXQgcmVhY2hhYmxlLiBTbyB0aGF0IGNvbmZpcm1zIHRob3NlIGFzIHZhbGlkIGZvY3VzIHN5bWJvbHMuCgpJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLCBsaWtlIGEgZGVwZW5kZW5jeSBvbiBgQ09ORklHX0NHUk9VUF9CUEZgLCBidXQgaXQgbG9va3MgbGlrZSB0aGUgbW9kaWZpY2F0aW9uIGlzIHJlc3RyaWN0ZWQgdG8gdGhlIHZlcmlmaWVyIGl0c2VsZiB3aGljaCBpcyBhbHdheXMgYnVpbHQgaWYgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgZW5hYmxlZC4gVGhlIHBhdGNoIGFmZmVjdHMgYEJQRl9QUk9HX1RZUEVfU09DS0VUX0ZJTFRFUmAsIGBCUEZfUFJPR19UWVBFX1NDSEVEX0NMU2AsIGBCUEZfUFJPR19UWVBFX1NDSEVEX0FDVGAsIGBCUEZfUFJPR19UWVBFX1hEUGAsIGFuZCBgQlBGX1BST0dfVFlQRV9GTE9XX0RJU1NFQ1RPUmAuCgpgQlBGX1BST0dfVFlQRV9TT0NLRVRfRklMVEVSYCBkZXBlbmRzIG9uIGBDT05GSUdfTkVUYC4gYEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTYCBhbmQgYEJQRl9QUk9HX1RZUEVfU0NIRURfQUNUYCBkZXBlbmQgb24gYENPTkZJR19ORVRfU0NIRURgLiBgQlBGX1BST0dfVFlQRV9YRFBgIGFuZCBgQlBGX1BST0dfVFlQRV9GTE9XX0RJU1NFQ1RPUmAgYWxzbyBkZXBlbmQgb24gYENPTkZJR19ORVRgLgoKU28gZGVmaW5pdGVseSBgQ09ORklHX05FVGAgYW5kIGBDT05GSUdfQlBGX1NZU0NBTExgIGFyZSBuZWVkZWQuCgpgQ09ORklHX05FVF9TQ0hFRGAgaXNuJiMzOTt0IHN0cmljdGx5IG5lY2Vzc2FyeSBmb3IgY29tcGlsYXRpb24gYnV0IGRvZXMgYWxsb3cgdGVzdGluZyBgU0NIRURfQ0xTYCBhbmQgYFNDSEVEX0FDVGAsIGJ1dCBzaW5jZSB0aGUgdmVyaWZpZXIgY29kZSBkb2VzbiYjMzk7dCByZWx5IG9uIGl0LCBpdCBsb29rcyBsaWtlIGBDT05GSUdfQlBGX1NZU0NBTExgIGFuZCBgQ09ORklHX05FVGAgYXJlIHN1ZmZpY2llbnQuIFRoZSBgQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFNgIGFuZCBvdGhlciB0eXBlcyBhcmUgZGVmaW5lZCBpbiBgaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oYCBhbmQgdGhlIHZlcmlmaWVyIHdpbGwgdXNlIHRoYXQgaW5mb3JtYXRpb24uCgpIZXJlJiMzOTtzIHdoYXQgSSYjMzk7dmUgZ290OgoKKiAgICoqV29ydGhGdXp6aW5nKio6IGB0cnVlYAoqICAgKipGb2N1c1N5bWJvbHMqKjoKICAgICogICBgbWF5X3VwZGF0ZV9zb2NrbWFwYAogICAgKiAgIGBjaGVja19tYXBfZnVuY19jb21wYXRpYmlsaXR5YAoqICAgKipFbmFibGVDb25maWdzKio6CiAgICAqICAgYEJQRl9TWVNDQUxMYAogICAgKiAgIGBORVRgCgpDb25maXJtaW5nIGBtYXlfdXBkYXRlX3NvY2ttYXBgIGFuZCBgY2hlY2tfbWFwX2Z1bmNfY29tcGF0aWJpbGl0eWAgYXJlIHN0YXRpYywgYW5kIHRoYXQgc3l6a2FsbGVyIGNhbiBoYW5kbGUgdGhpcy4gQWxzbywgcmV2aWV3aW5nIGNoYW5nZXMgdG8gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi8qYCB3aGljaCBhcmUganVzdCBzZWxmdGVzdHMuCgpUaGlzIHBhdGNoIGlzIGNoYW5naW5nIHRoZSB2ZXJpZmllciwgc28gaXQgcmVxdWlyZXMgZnV6emluZy4gVGhlIGNvbmZpZ3VyYXRpb24gYW5kIGZvY3VzIHN5bWJvbHMgYXJlIHdoYXQgSSBuZWVkIHRvIHRhcmdldCBmb3IgZnV6emluZy4gSSBjYW4gY2FsbCBzZXQtcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMjM6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21heV91cGRhdGVfc29ja21hcCYjMzQ7LAogICAgJiMzNDtjaGVja19tYXBfZnVuY19jb21wYXRpYmlsaXR5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlc3RyaWN0cyBjZXJ0YWluIEJQRiBwcm9ncmFtIHR5cGVzIGZyb20gdXBkYXRpbmcgc29ja21hcHMgaW4gdGhlIEJQRiB2ZXJpZmllci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiB2ZXJpZmllciBsb2dpYyB0aGF0IGFmZmVjdHMgd2hhdCBCUEYgcHJvZ3JhbXMgYXJlIGFsbG93ZWQgdG8gZG8uIEl0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSB2ZXJpZmllciBjb3JyZWN0bHkgcmVqZWN0cyBpbnZhbGlkIHByb2dyYW1zIGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHJlZ3Jlc3Npb25zIG9yIGJ5cGFzc2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttYXlfdXBkYXRlX3NvY2ttYXAmIzM0OywKICAgICYjMzQ7Y2hlY2tfbWFwX2Z1bmNfY29tcGF0aWJpbGl0eSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXN0cmljdHMgY2VydGFpbiBCUEYgcHJvZ3JhbSB0eXBlcyBmcm9tIHVwZGF0aW5nIHNvY2ttYXBzIGluIHRoZSBCUEYgdmVyaWZpZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBCUEYgdmVyaWZpZXIgbG9naWMgdGhhdCBhZmZlY3RzIHdoYXQgQlBGIHByb2dyYW1zIGFyZSBhbGxvd2VkIHRvIGRvLiBJdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgdmVyaWZpZXIgY29ycmVjdGx5IHJlamVjdHMgaW52YWxpZCBwcm9ncmFtcyBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSByZWdyZXNzaW9ucyBvciBieXBhc3Nlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDIzOjA1OjQ1LjQwNjA0OTUyNloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4ODAwMTIzMzg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtYXlfdXBkYXRlX3NvY2ttYXBcIixcbiAgICBcImNoZWNrX21hcF9mdW5jX2NvbXBhdGliaWxpdHlcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXN0cmljdHMgY2VydGFpbiBCUEYgcHJvZ3JhbSB0eXBlcyBmcm9tIHVwZGF0aW5nIHNvY2ttYXBzIGluIHRoZSBCUEYgdmVyaWZpZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBCUEYgdmVyaWZpZXIgbG9naWMgdGhhdCBhZmZlY3RzIHdoYXQgQlBGIHByb2dyYW1zIGFyZSBhbGxvd2VkIHRvIGRvLiBJdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgdmVyaWZpZXIgY29ycmVjdGx5IHJlamVjdHMgaW52YWxpZCBwcm9ncmFtcyBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgYW55IHJlZ3Jlc3Npb25zIG9yIGJ5cGFzc2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQyMzowNTo0NS40MDYwNTcwOTdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MDMzOTk5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGZjN2RlNzZhZDFmNTEzZTAyZWRmZTJkMDkyMjZmMGRlZTc4ZTAzOTBcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBKdW4gMzAgMjM6MDU6NDQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXFxuaW5kZXggMjVhZWE0MjcxY2QwODkuLjgzZWEzYjMzZmY2NzljIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbisrKyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbkBAIC04NDg4LDEyICs4NDg4LDcgQEAgc3RhdGljIGJvb2wgbWF5X3VwZGF0ZV9zb2NrbWFwKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBmdW5jX2lkKVxcbiBcXHRcXHRpZiAoZnVuY19pZCA9PSBCUEZfRlVOQ19tYXBfZGVsZXRlX2VsZW0pXFxuIFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXHRcXHRicmVhaztcXG4tXFx0Y2FzZSBCUEZfUFJPR19UWVBFX1NPQ0tFVF9GSUxURVI6XFxuLVxcdGNhc2UgQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFM6XFxuLVxcdGNhc2UgQlBGX1BST0dfVFlQRV9TQ0hFRF9BQ1Q6XFxuLVxcdGNhc2UgQlBGX1BST0dfVFlQRV9YRFA6XFxuIFxcdGNhc2UgQlBGX1BST0dfVFlQRV9TS19SRVVTRVBPUlQ6XFxuLVxcdGNhc2UgQlBGX1BST0dfVFlQRV9GTE9XX0RJU1NFQ1RPUjpcXG4gXFx0Y2FzZSBCUEZfUFJPR19UWVBFX1NLX0xPT0tVUDpcXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcdGRlZmF1bHQ6XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ZleGl0X2JwZjJicGYuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ZleGl0X2JwZjJicGYuY1xcbmluZGV4IDkyYzIwODAzZWE3NjVkLi5kM2E5NTQxNThjMzMyNyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9mZXhpdF9icGYyYnBmLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9mZXhpdF9icGYyYnBmLmNcXG5AQCAtMzM2LDE3ICszMzYsNiBAQCBzdGF0aWMgdm9pZCB0ZXN0X2Ztb2RfcmV0X2ZyZXBsYWNlKHZvaWQpXFxuIH1cXG4gXFxuIFxcbi1zdGF0aWMgdm9pZCB0ZXN0X2Z1bmNfc29ja21hcF91cGRhdGUodm9pZClcXG4te1xcbi1cXHRjb25zdCBjaGFyICpwcm9nX25hbWVbXSA9IHtcXG4tXFx0XFx0XFxcImZyZXBsYWNlL2Nsc19yZWRpcmVjdFxcXCIsXFxuLVxcdH07XFxuLVxcdHRlc3RfZmV4aXRfYnBmMmJwZl9jb21tb24oXFxcIi4vZnJlcGxhY2VfY2xzX3JlZGlyZWN0LmJwZi5vXFxcIixcXG4tXFx0XFx0XFx0XFx0ICBcXFwiLi90ZXN0X2Nsc19yZWRpcmVjdC5icGYub1xcXCIsXFxuLVxcdFxcdFxcdFxcdCAgQVJSQVlfU0laRShwcm9nX25hbWUpLFxcbi1cXHRcXHRcXHRcXHQgIHByb2dfbmFtZSwgZmFsc2UsIE5VTEwpO1xcbi19XFxuLVxcbiBzdGF0aWMgdm9pZCB0ZXN0X2Z1bmNfcmVwbGFjZV92b2lkKHZvaWQpXFxuIHtcXG4gXFx0Y29uc3QgY2hhciAqcHJvZ19uYW1lW10gPSB7XFxuQEAgLTU5OSw4ICs1ODgsNiBAQCB2b2lkIHNlcmlhbF90ZXN0X2ZleGl0X2JwZjJicGYodm9pZClcXG4gXFx0XFx0dGVzdF9mdW5jX3JlcGxhY2UoKTtcXG4gXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcImZ1bmNfcmVwbGFjZV92ZXJpZnlcXFwiKSlcXG4gXFx0XFx0dGVzdF9mdW5jX3JlcGxhY2VfdmVyaWZ5KCk7XFxuLVxcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJmdW5jX3NvY2ttYXBfdXBkYXRlXFxcIikpXFxuLVxcdFxcdHRlc3RfZnVuY19zb2NrbWFwX3VwZGF0ZSgpO1xcbiBcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwiZnVuY19yZXBsYWNlX3JldHVybl9jb2RlXFxcIikpXFxuIFxcdFxcdHRlc3RfZnVuY19yZXBsYWNlX3JldHVybl9jb2RlKCk7XFxuIFxcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJmdW5jX21hcF9wcm9nX2NvbXBhdGliaWxpdHlcXFwiKSlcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9iYXNpYy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9iYXNpYy5jXFxuaW5kZXggY2IzMjI5NzExZjkzYTMuLjMzZjc4OGUyNzg2ZGFlIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfYmFzaWMuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfYmFzaWMuY1xcbkBAIC03LDcgKzcsNiBAQFxcbiBcXG4gI2luY2x1ZGUgXFxcInRlc3RfcHJvZ3MuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInRlc3Rfc2ttc2dfbG9hZF9oZWxwZXJzLnNrZWwuaFxcXCJcXG4tI2luY2x1ZGUgXFxcInRlc3Rfc29ja21hcF91cGRhdGUuc2tlbC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwidGVzdF9zb2NrbWFwX2ludmFsaWRfdXBkYXRlLnNrZWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInRlc3Rfc29ja21hcF9za2JfdmVyZGljdF9hdHRhY2guc2tlbC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwidGVzdF9zb2NrbWFwX3Byb2dzX3F1ZXJ5LnNrZWwuaFxcXCJcXG5AQCAtMjM1LDUzICsyMzQsNiBAQCBzdGF0aWMgdm9pZCB0ZXN0X3NrbXNnX2hlbHBlcnNfd2l0aF9saW5rKGVudW0gYnBmX21hcF90eXBlIG1hcF90eXBlKVxcbiBcXHR0ZXN0X3NrbXNnX2xvYWRfaGVscGVyc19fZGVzdHJveShza2VsKTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgdGVzdF9zb2NrbWFwX3VwZGF0ZShlbnVtIGJwZl9tYXBfdHlwZSBtYXBfdHlwZSlcXG4te1xcbi1cXHRpbnQgZXJyLCBwcm9nLCBzcmM7XFxuLVxcdHN0cnVjdCB0ZXN0X3NvY2ttYXBfdXBkYXRlICpza2VsO1xcbi1cXHRzdHJ1Y3QgYnBmX21hcCAqZHN0X21hcDtcXG4tXFx0Y29uc3QgX191MzIgemVybyA9IDA7XFxuLVxcdGNoYXIgZHVtbXlbMTRdID0gezB9O1xcbi1cXHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgdG9wdHMsXFxuLVxcdFxcdC5kYXRhX2luID0gZHVtbXksXFxuLVxcdFxcdC5kYXRhX3NpemVfaW4gPSBzaXplb2YoZHVtbXkpLFxcbi1cXHRcXHQucmVwZWF0ID0gMSxcXG4tXFx0KTtcXG4tXFx0X19zNjQgc2s7XFxuLVxcbi1cXHRzayA9IGNvbm5lY3RlZF9zb2NrZXRfdjQoKTtcXG4tXFx0aWYgKCFBU1NFUlRfTkVRKHNrLCAtMSwgXFxcImNvbm5lY3RlZF9zb2NrZXRfdjRcXFwiKSlcXG4tXFx0XFx0cmV0dXJuO1xcbi1cXG4tXFx0c2tlbCA9IHRlc3Rfc29ja21hcF91cGRhdGVfX29wZW5fYW5kX2xvYWQoKTtcXG4tXFx0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFxcXCJvcGVuX2FuZF9sb2FkXFxcIikpXFxuLVxcdFxcdGdvdG8gY2xvc2Vfc2s7XFxuLVxcbi1cXHRwcm9nID0gYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXFx1MDAzZXByb2dzLmNvcHlfc29ja19tYXApO1xcbi1cXHRzcmMgPSBicGZfbWFwX19mZChza2VsLVxcdTAwM2VtYXBzLnNyYyk7XFxuLVxcdGlmIChtYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfU09DS01BUClcXG4tXFx0XFx0ZHN0X21hcCA9IHNrZWwtXFx1MDAzZW1hcHMuZHN0X3NvY2tfbWFwO1xcbi1cXHRlbHNlXFxuLVxcdFxcdGRzdF9tYXAgPSBza2VsLVxcdTAwM2VtYXBzLmRzdF9zb2NrX2hhc2g7XFxuLVxcbi1cXHRlcnIgPSBicGZfbWFwX3VwZGF0ZV9lbGVtKHNyYywgXFx1MDAyNnplcm8sIFxcdTAwMjZzaywgQlBGX05PRVhJU1QpO1xcbi1cXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJ1cGRhdGVfZWxlbShzcmMpXFxcIikpXFxuLVxcdFxcdGdvdG8gb3V0O1xcbi1cXG4tXFx0ZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhwcm9nLCBcXHUwMDI2dG9wdHMpO1xcbi1cXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJ0ZXN0X3J1blxcXCIpKVxcbi1cXHRcXHRnb3RvIG91dDtcXG4tXFx0aWYgKCFBU1NFUlRfTkVRKHRvcHRzLnJldHZhbCwgMCwgXFxcInRlc3RfcnVuIHJldHZhbFxcXCIpKVxcbi1cXHRcXHRnb3RvIG91dDtcXG4tXFxuLVxcdGNvbXBhcmVfY29va2llcyhza2VsLVxcdTAwM2VtYXBzLnNyYywgZHN0X21hcCk7XFxuLVxcbi1vdXQ6XFxuLVxcdHRlc3Rfc29ja21hcF91cGRhdGVfX2Rlc3Ryb3koc2tlbCk7XFxuLWNsb3NlX3NrOlxcbi1cXHRjbG9zZShzayk7XFxuLX1cXG4tXFxuIHN0YXRpYyB2b2lkIHRlc3Rfc29ja21hcF9pbnZhbGlkX3VwZGF0ZSh2b2lkKVxcbiB7XFxuIFxcdHN0cnVjdCB0ZXN0X3NvY2ttYXBfaW52YWxpZF91cGRhdGUgKnNrZWw7XFxuQEAgLTEzODUsMTAgKzEzMzcsNiBAQCB2b2lkIHRlc3Rfc29ja21hcF9iYXNpYyh2b2lkKVxcbiBcXHRcXHR0ZXN0X3NrbXNnX2hlbHBlcnMoQlBGX01BUF9UWVBFX1NPQ0tNQVApO1xcbiBcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwic29ja2hhc2ggc2tfbXNnIGxvYWQgaGVscGVyc1xcXCIpKVxcbiBcXHRcXHR0ZXN0X3NrbXNnX2hlbHBlcnMoQlBGX01BUF9UWVBFX1NPQ0tIQVNIKTtcXG4tXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcInNvY2ttYXAgdXBkYXRlXFxcIikpXFxuLVxcdFxcdHRlc3Rfc29ja21hcF91cGRhdGUoQlBGX01BUF9UWVBFX1NPQ0tNQVApO1xcbi1cXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwic29ja2hhc2ggdXBkYXRlXFxcIikpXFxuLVxcdFxcdHRlc3Rfc29ja21hcF91cGRhdGUoQlBGX01BUF9UWVBFX1NPQ0tIQVNIKTtcXG4gXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcInNvY2ttYXAgdXBkYXRlIGluIHVuc2FmZSBjb250ZXh0XFxcIikpXFxuIFxcdFxcdHRlc3Rfc29ja21hcF9pbnZhbGlkX3VwZGF0ZSgpO1xcbiBcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwic29ja21hcCBjb3B5XFxcIikpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9mcmVwbGFjZV9jbHNfcmVkaXJlY3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9mcmVwbGFjZV9jbHNfcmVkaXJlY3QuY1xcbmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDdlOTQ0MTJkNDdhNWNhLi4wMDAwMDAwMDAwMDAwMFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9mcmVwbGFjZV9jbHNfcmVkaXJlY3QuY1xcbisrKyAvZGV2L251bGxcXG5AQCAtMSwzNCArMCwwIEBAXFxuLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuLS8vIENvcHlyaWdodCAoYykgMjAyMCBGYWNlYm9va1xcbi1cXG4tI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N0ZGRlZi5oXFx1MDAzZVxcbi0jaW5jbHVkZSBcXHUwMDNjbGludXgvYnBmLmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9wa3RfY2xzLmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX2VuZGlhbi5oXFx1MDAzZVxcbi0jaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcXHUwMDNlXFxuLVxcbi1zdHJ1Y3Qge1xcbi1cXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1NPQ0tNQVApO1xcbi1cXHRfX3R5cGUoa2V5LCBpbnQpO1xcbi1cXHRfX3R5cGUodmFsdWUsIGludCk7XFxuLVxcdF9fdWludChtYXhfZW50cmllcywgMik7XFxuLX0gc29ja19tYXAgU0VDKFxcXCIubWFwc1xcXCIpO1xcbi1cXG4tU0VDKFxcXCJmcmVwbGFjZS9jbHNfcmVkaXJlY3RcXFwiKVxcbi1pbnQgZnJlcGxhY2VfY2xzX3JlZGlyZWN0X3Rlc3Qoc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxcbi17XFxuLVxcdGludCByZXQgPSAwO1xcbi1cXHRjb25zdCBpbnQgemVybyA9IDA7XFxuLVxcdHN0cnVjdCBicGZfc29jayAqc2s7XFxuLVxcbi1cXHRzayA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXFx1MDAyNnNvY2tfbWFwLCBcXHUwMDI2emVybyk7XFxuLVxcdGlmICghc2spXFxuLVxcdFxcdHJldHVybiBUQ19BQ1RfU0hPVDtcXG4tXFxuLVxcdHJldCA9IGJwZl9tYXBfdXBkYXRlX2VsZW0oXFx1MDAyNnNvY2tfbWFwLCBcXHUwMDI2emVybywgc2ssIDApO1xcbi1cXHRicGZfc2tfcmVsZWFzZShzayk7XFxuLVxcbi1cXHRyZXR1cm4gcmV0ID09IDAgPyBUQ19BQ1RfT0sgOiBUQ19BQ1RfU0hPVDtcXG4tfVxcbi1cXG4tY2hhciBfbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NvY2ttYXBfdXBkYXRlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zb2NrbWFwX3VwZGF0ZS5jXFxuZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggNmQ2NGVhNTM2ZTNkODEuLjAwMDAwMDAwMDAwMDAwXFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc29ja21hcF91cGRhdGUuY1xcbisrKyAvZGV2L251bGxcXG5AQCAtMSw0OCArMCwwIEBAXFxuLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuLS8vIENvcHlyaWdodCAoYykgMjAyMCBDbG91ZGZsYXJlXFxuLSNpbmNsdWRlIFxcXCJ2bWxpbnV4LmhcXFwiXFxuLSNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFxcdTAwM2VcXG4tXFxuLXN0cnVjdCB7XFxuLVxcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfU09DS01BUCk7XFxuLVxcdF9fdWludChtYXhfZW50cmllcywgMSk7XFxuLVxcdF9fdHlwZShrZXksIF9fdTMyKTtcXG4tXFx0X190eXBlKHZhbHVlLCBfX3U2NCk7XFxuLX0gc3JjIFNFQyhcXFwiLm1hcHNcXFwiKTtcXG4tXFxuLXN0cnVjdCB7XFxuLVxcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfU09DS01BUCk7XFxuLVxcdF9fdWludChtYXhfZW50cmllcywgMSk7XFxuLVxcdF9fdHlwZShrZXksIF9fdTMyKTtcXG4tXFx0X190eXBlKHZhbHVlLCBfX3U2NCk7XFxuLX0gZHN0X3NvY2tfbWFwIFNFQyhcXFwiLm1hcHNcXFwiKTtcXG4tXFxuLXN0cnVjdCB7XFxuLVxcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfU09DS0hBU0gpO1xcbi1cXHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xcbi1cXHRfX3R5cGUoa2V5LCBfX3UzMik7XFxuLVxcdF9fdHlwZSh2YWx1ZSwgX191NjQpO1xcbi19IGRzdF9zb2NrX2hhc2ggU0VDKFxcXCIubWFwc1xcXCIpO1xcbi1cXG4tU0VDKFxcXCJ0Y1xcXCIpXFxuLWludCBjb3B5X3NvY2tfbWFwKHZvaWQgKmN0eClcXG4te1xcbi1cXHRzdHJ1Y3QgYnBmX3NvY2sgKnNrO1xcbi1cXHRib29sIGZhaWxlZCA9IGZhbHNlO1xcbi1cXHRfX3UzMiBrZXkgPSAwO1xcbi1cXG4tXFx0c2sgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFxcdTAwMjZzcmMsIFxcdTAwMjZrZXkpO1xcbi1cXHRpZiAoIXNrKVxcbi1cXHRcXHRyZXR1cm4gU0tfRFJPUDtcXG4tXFxuLVxcdGlmIChicGZfbWFwX3VwZGF0ZV9lbGVtKFxcdTAwMjZkc3Rfc29ja19tYXAsIFxcdTAwMjZrZXksIHNrLCAwKSlcXG4tXFx0XFx0ZmFpbGVkID0gdHJ1ZTtcXG4tXFxuLVxcdGlmIChicGZfbWFwX3VwZGF0ZV9lbGVtKFxcdTAwMjZkc3Rfc29ja19oYXNoLCBcXHUwMDI2a2V5LCBzaywgMCkpXFxuLVxcdFxcdGZhaWxlZCA9IHRydWU7XFxuLVxcbi1cXHRicGZfc2tfcmVsZWFzZShzayk7XFxuLVxcdHJldHVybiBmYWlsZWQgPyBTS19EUk9QIDogU0tfUEFTUztcXG4tfVxcbi1cXG4tY2hhciBfbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9zb2NrbWFwX211dGF0ZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3NvY2ttYXBfbXV0YXRlLmNcXG5pbmRleCBmZTRiMTIzMTg3Yjg2ZS4uMjAzMzJhNzMxZDRlNGYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3NvY2ttYXBfbXV0YXRlLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc29ja21hcF9tdXRhdGUuY1xcbkBAIC03NCw3ICs3NCw3IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCB0ZXN0X3NvY2ttYXBfbG9va3VwX2FuZF9tdXRhdGUodm9pZClcXG4gfVxcbiBcXG4gU0VDKFxcXCJhY3Rpb25cXFwiKVxcbi1fX3N1Y2Nlc3NcXG4rX19mYWlsdXJlIF9fbXNnKFxcXCJjYW5ub3QgdXBkYXRlIHNvY2ttYXAgaW4gdGhpcyBjb250ZXh0XFxcIilcXG4gaW50IHRlc3Rfc2NoZWRfYWN0KHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcXG4ge1xcbiBcXHR0ZXN0X3NvY2ttYXBfbXV0YXRlKHNrYi1cXHUwMDNlc2spO1xcbkBAIC04Miw3ICs4Miw3IEBAIGludCB0ZXN0X3NjaGVkX2FjdChzdHJ1Y3QgX19za19idWZmICpza2IpXFxuIH1cXG4gXFxuIFNFQyhcXFwiY2xhc3NpZmllclxcXCIpXFxuLV9fc3VjY2Vzc1xcbitfX2ZhaWx1cmUgX19tc2coXFxcImNhbm5vdCB1cGRhdGUgc29ja21hcCBpbiB0aGlzIGNvbnRleHRcXFwiKVxcbiBpbnQgdGVzdF9zY2hlZF9jbHMoc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxcbiB7XFxuIFxcdHRlc3Rfc29ja21hcF9tdXRhdGUoc2tiLVxcdTAwM2Vzayk7XFxuQEAgLTkwLDcgKzkwLDcgQEAgaW50IHRlc3Rfc2NoZWRfY2xzKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcXG4gfVxcbiBcXG4gU0VDKFxcXCJmbG93X2Rpc3NlY3RvclxcXCIpXFxuLV9fc3VjY2Vzc1xcbitfX2ZhaWx1cmUgX19tc2coXFxcImNhbm5vdCB1cGRhdGUgc29ja21hcCBpbiB0aGlzIGNvbnRleHRcXFwiKVxcbiBpbnQgdGVzdF9mbG93X2Rpc3NlY3Rvcl9kZWxldGUoc3RydWN0IF9fc2tfYnVmZiAqc2tiIF9fYWx3YXlzX3VudXNlZClcXG4ge1xcbiBcXHR0ZXN0X3NvY2ttYXBfZGVsZXRlKCk7XFxuQEAgLTk4LDcgKzk4LDcgQEAgaW50IHRlc3RfZmxvd19kaXNzZWN0b3JfZGVsZXRlKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYiBfX2Fsd2F5c191bnVzZWQpXFxuIH1cXG4gXFxuIFNFQyhcXFwiZmxvd19kaXNzZWN0b3JcXFwiKVxcbi1fX2ZhaWx1cmUgX19tc2coXFxcInByb2dyYW0gb2YgdGhpcyB0eXBlIGNhbm5vdCB1c2UgaGVscGVyIGJwZl9za19yZWxlYXNlXFxcIilcXG4rX19mYWlsdXJlIF9fbXNnKFxcXCJjYW5ub3QgdXBkYXRlIHNvY2ttYXAgaW4gdGhpcyBjb250ZXh0XFxcIilcXG4gaW50IHRlc3RfZmxvd19kaXNzZWN0b3JfdXBkYXRlKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYiBfX2Fsd2F5c191bnVzZWQpXFxuIHtcXG4gXFx0dGVzdF9zb2NrbWFwX2xvb2t1cF9hbmRfdXBkYXRlKCk7IC8qIG5vIGFjY2VzcyB0byBza2ItXFx1MDAzZXNrICovXFxuQEAgLTE0Niw3ICsxNDYsNyBAQCBpbnQgdGVzdF9za19yZXVzZXBvcnQoc3RydWN0IHNrX3JldXNlcG9ydF9tZCAqY3R4KVxcbiB9XFxuIFxcbiBTRUMoXFxcInNvY2tldFxcXCIpXFxuLV9fc3VjY2Vzc1xcbitfX2ZhaWx1cmUgX19tc2coXFxcImNhbm5vdCB1cGRhdGUgc29ja21hcCBpbiB0aGlzIGNvbnRleHRcXFwiKVxcbiBpbnQgdGVzdF9zb2NrZXRfZmlsdGVyKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcXG4ge1xcbiBcXHR0ZXN0X3NvY2ttYXBfbXV0YXRlKHNrYi1cXHUwMDNlc2spO1xcbkBAIC0xNzksNyArMTc5LDcgQEAgaW50IHRlc3Rfc29ja29wc191cGRhdGVfZGVkaWNhdGVkKHN0cnVjdCBicGZfc29ja19vcHMgKmN0eClcXG4gfVxcbiBcXG4gU0VDKFxcXCJ4ZHBcXFwiKVxcbi1fX3N1Y2Nlc3NcXG4rX19mYWlsdXJlIF9fbXNnKFxcXCJjYW5ub3QgdXBkYXRlIHNvY2ttYXAgaW4gdGhpcyBjb250ZXh0XFxcIilcXG4gaW50IHRlc3RfeGRwKHN0cnVjdCB4ZHBfbWQgKmN0eCBfX2Fsd2F5c191bnVzZWQpXFxuIHtcXG4gXFx0dGVzdF9zb2NrbWFwX2xvb2t1cF9hbmRfbXV0YXRlKCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDIzOjA1OjQ1Ljg2NzEzMjU2MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDgzMzkwMjcxNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1heV91cGRhdGVfc29ja21hcFwiLFxuICAgIFwiY2hlY2tfbWFwX2Z1bmNfY29tcGF0aWJpbGl0eVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlc3RyaWN0cyBjZXJ0YWluIEJQRiBwcm9ncmFtIHR5cGVzIGZyb20gdXBkYXRpbmcgc29ja21hcHMgaW4gdGhlIEJQRiB2ZXJpZmllci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiB2ZXJpZmllciBsb2dpYyB0aGF0IGFmZmVjdHMgd2hhdCBCUEYgcHJvZ3JhbXMgYXJlIGFsbG93ZWQgdG8gZG8uIEl0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSB2ZXJpZmllciBjb3JyZWN0bHkgcmVqZWN0cyBpbnZhbGlkIHByb2dyYW1zIGFuZCBkb2Vzbid0IGludHJvZHVjZSBhbnkgcmVncmVzc2lvbnMgb3IgYnlwYXNzZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZmM3ZGU3NmFkMWY1MTNlMDJlZGZlMmQwOTIyNmYwZGVlNzhlMDM5MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVuIDMwIDIzOjA1OjQ0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5pbmRleCAyNWFlYTQyNzFjZDA4OS4uODNlYTNiMzNmZjY3OWMgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbisrKyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuQEAgLTg0ODgsMTIgKzg0ODgsNyBAQCBzdGF0aWMgYm9vbCBtYXlfdXBkYXRlX3NvY2ttYXAoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGZ1bmNfaWQpXG4gXHRcdGlmIChmdW5jX2lkID09IEJQRl9GVU5DX21hcF9kZWxldGVfZWxlbSlcbiBcdFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdFx0YnJlYWs7XG4tXHRjYXNlIEJQRl9QUk9HX1RZUEVfU09DS0VUX0ZJTFRFUjpcbi1cdGNhc2UgQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFM6XG4tXHRjYXNlIEJQRl9QUk9HX1RZUEVfU0NIRURfQUNUOlxuLVx0Y2FzZSBCUEZfUFJPR19UWVBFX1hEUDpcbiBcdGNhc2UgQlBGX1BST0dfVFlQRV9TS19SRVVTRVBPUlQ6XG4tXHRjYXNlIEJQRl9QUk9HX1RZUEVfRkxPV19ESVNTRUNUT1I6XG4gXHRjYXNlIEJQRl9QUk9HX1RZUEVfU0tfTE9PS1VQOlxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdGRlZmF1bHQ6XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZmV4aXRfYnBmMmJwZi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZmV4aXRfYnBmMmJwZi5jXG5pbmRleCA5MmMyMDgwM2VhNzY1ZC4uZDNhOTU0MTU4YzMzMjcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9mZXhpdF9icGYyYnBmLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ZleGl0X2JwZjJicGYuY1xuQEAgLTMzNiwxNyArMzM2LDYgQEAgc3RhdGljIHZvaWQgdGVzdF9mbW9kX3JldF9mcmVwbGFjZSh2b2lkKVxuIH1cbiBcbiBcbi1zdGF0aWMgdm9pZCB0ZXN0X2Z1bmNfc29ja21hcF91cGRhdGUodm9pZClcbi17XG4tXHRjb25zdCBjaGFyICpwcm9nX25hbWVbXSA9IHtcbi1cdFx0XCJmcmVwbGFjZS9jbHNfcmVkaXJlY3RcIixcbi1cdH07XG4tXHR0ZXN0X2ZleGl0X2JwZjJicGZfY29tbW9uKFwiLi9mcmVwbGFjZV9jbHNfcmVkaXJlY3QuYnBmLm9cIixcbi1cdFx0XHRcdCAgXCIuL3Rlc3RfY2xzX3JlZGlyZWN0LmJwZi5vXCIsXG4tXHRcdFx0XHQgIEFSUkFZX1NJWkUocHJvZ19uYW1lKSxcbi1cdFx0XHRcdCAgcHJvZ19uYW1lLCBmYWxzZSwgTlVMTCk7XG4tfVxuLVxuIHN0YXRpYyB2b2lkIHRlc3RfZnVuY19yZXBsYWNlX3ZvaWQodm9pZClcbiB7XG4gXHRjb25zdCBjaGFyICpwcm9nX25hbWVbXSA9IHtcbkBAIC01OTksOCArNTg4LDYgQEAgdm9pZCBzZXJpYWxfdGVzdF9mZXhpdF9icGYyYnBmKHZvaWQpXG4gXHRcdHRlc3RfZnVuY19yZXBsYWNlKCk7XG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcImZ1bmNfcmVwbGFjZV92ZXJpZnlcIikpXG4gXHRcdHRlc3RfZnVuY19yZXBsYWNlX3ZlcmlmeSgpO1xuLVx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJmdW5jX3NvY2ttYXBfdXBkYXRlXCIpKVxuLVx0XHR0ZXN0X2Z1bmNfc29ja21hcF91cGRhdGUoKTtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwiZnVuY19yZXBsYWNlX3JldHVybl9jb2RlXCIpKVxuIFx0XHR0ZXN0X2Z1bmNfcmVwbGFjZV9yZXR1cm5fY29kZSgpO1xuIFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJmdW5jX21hcF9wcm9nX2NvbXBhdGliaWxpdHlcIikpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9iYXNpYy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9iYXNpYy5jXG5pbmRleCBjYjMyMjk3MTFmOTNhMy4uMzNmNzg4ZTI3ODZkYWUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2Jhc2ljLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfYmFzaWMuY1xuQEAgLTcsNyArNyw2IEBAXG4gXG4gI2luY2x1ZGUgXCJ0ZXN0X3Byb2dzLmhcIlxuICNpbmNsdWRlIFwidGVzdF9za21zZ19sb2FkX2hlbHBlcnMuc2tlbC5oXCJcbi0jaW5jbHVkZSBcInRlc3Rfc29ja21hcF91cGRhdGUuc2tlbC5oXCJcbiAjaW5jbHVkZSBcInRlc3Rfc29ja21hcF9pbnZhbGlkX3VwZGF0ZS5za2VsLmhcIlxuICNpbmNsdWRlIFwidGVzdF9zb2NrbWFwX3NrYl92ZXJkaWN0X2F0dGFjaC5za2VsLmhcIlxuICNpbmNsdWRlIFwidGVzdF9zb2NrbWFwX3Byb2dzX3F1ZXJ5LnNrZWwuaFwiXG5AQCAtMjM1LDUzICsyMzQsNiBAQCBzdGF0aWMgdm9pZCB0ZXN0X3NrbXNnX2hlbHBlcnNfd2l0aF9saW5rKGVudW0gYnBmX21hcF90eXBlIG1hcF90eXBlKVxuIFx0dGVzdF9za21zZ19sb2FkX2hlbHBlcnNfX2Rlc3Ryb3koc2tlbCk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHRlc3Rfc29ja21hcF91cGRhdGUoZW51bSBicGZfbWFwX3R5cGUgbWFwX3R5cGUpXG4te1xuLVx0aW50IGVyciwgcHJvZywgc3JjO1xuLVx0c3RydWN0IHRlc3Rfc29ja21hcF91cGRhdGUgKnNrZWw7XG4tXHRzdHJ1Y3QgYnBmX21hcCAqZHN0X21hcDtcbi1cdGNvbnN0IF9fdTMyIHplcm8gPSAwO1xuLVx0Y2hhciBkdW1teVsxNF0gPSB7MH07XG4tXHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgdG9wdHMsXG4tXHRcdC5kYXRhX2luID0gZHVtbXksXG4tXHRcdC5kYXRhX3NpemVfaW4gPSBzaXplb2YoZHVtbXkpLFxuLVx0XHQucmVwZWF0ID0gMSxcbi1cdCk7XG4tXHRfX3M2NCBzaztcbi1cbi1cdHNrID0gY29ubmVjdGVkX3NvY2tldF92NCgpO1xuLVx0aWYgKCFBU1NFUlRfTkVRKHNrLCAtMSwgXCJjb25uZWN0ZWRfc29ja2V0X3Y0XCIpKVxuLVx0XHRyZXR1cm47XG4tXG4tXHRza2VsID0gdGVzdF9zb2NrbWFwX3VwZGF0ZV9fb3Blbl9hbmRfbG9hZCgpO1xuLVx0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwib3Blbl9hbmRfbG9hZFwiKSlcbi1cdFx0Z290byBjbG9zZV9zaztcbi1cbi1cdHByb2cgPSBicGZfcHJvZ3JhbV9fZmQoc2tlbC1cdTAwM2Vwcm9ncy5jb3B5X3NvY2tfbWFwKTtcbi1cdHNyYyA9IGJwZl9tYXBfX2ZkKHNrZWwtXHUwMDNlbWFwcy5zcmMpO1xuLVx0aWYgKG1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9TT0NLTUFQKVxuLVx0XHRkc3RfbWFwID0gc2tlbC1cdTAwM2VtYXBzLmRzdF9zb2NrX21hcDtcbi1cdGVsc2Vcbi1cdFx0ZHN0X21hcCA9IHNrZWwtXHUwMDNlbWFwcy5kc3Rfc29ja19oYXNoO1xuLVxuLVx0ZXJyID0gYnBmX21hcF91cGRhdGVfZWxlbShzcmMsIFx1MDAyNnplcm8sIFx1MDAyNnNrLCBCUEZfTk9FWElTVCk7XG4tXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwidXBkYXRlX2VsZW0oc3JjKVwiKSlcbi1cdFx0Z290byBvdXQ7XG4tXG4tXHRlcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKHByb2csIFx1MDAyNnRvcHRzKTtcbi1cdGlmICghQVNTRVJUX09LKGVyciwgXCJ0ZXN0X3J1blwiKSlcbi1cdFx0Z290byBvdXQ7XG4tXHRpZiAoIUFTU0VSVF9ORVEodG9wdHMucmV0dmFsLCAwLCBcInRlc3RfcnVuIHJldHZhbFwiKSlcbi1cdFx0Z290byBvdXQ7XG4tXG4tXHRjb21wYXJlX2Nvb2tpZXMoc2tlbC1cdTAwM2VtYXBzLnNyYywgZHN0X21hcCk7XG4tXG4tb3V0OlxuLVx0dGVzdF9zb2NrbWFwX3VwZGF0ZV9fZGVzdHJveShza2VsKTtcbi1jbG9zZV9zazpcbi1cdGNsb3NlKHNrKTtcbi19XG4tXG4gc3RhdGljIHZvaWQgdGVzdF9zb2NrbWFwX2ludmFsaWRfdXBkYXRlKHZvaWQpXG4ge1xuIFx0c3RydWN0IHRlc3Rfc29ja21hcF9pbnZhbGlkX3VwZGF0ZSAqc2tlbDtcbkBAIC0xMzg1LDEwICsxMzM3LDYgQEAgdm9pZCB0ZXN0X3NvY2ttYXBfYmFzaWModm9pZClcbiBcdFx0dGVzdF9za21zZ19oZWxwZXJzKEJQRl9NQVBfVFlQRV9TT0NLTUFQKTtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwic29ja2hhc2ggc2tfbXNnIGxvYWQgaGVscGVyc1wiKSlcbiBcdFx0dGVzdF9za21zZ19oZWxwZXJzKEJQRl9NQVBfVFlQRV9TT0NLSEFTSCk7XG4tXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcInNvY2ttYXAgdXBkYXRlXCIpKVxuLVx0XHR0ZXN0X3NvY2ttYXBfdXBkYXRlKEJQRl9NQVBfVFlQRV9TT0NLTUFQKTtcbi1cdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwic29ja2hhc2ggdXBkYXRlXCIpKVxuLVx0XHR0ZXN0X3NvY2ttYXBfdXBkYXRlKEJQRl9NQVBfVFlQRV9TT0NLSEFTSCk7XG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcInNvY2ttYXAgdXBkYXRlIGluIHVuc2FmZSBjb250ZXh0XCIpKVxuIFx0XHR0ZXN0X3NvY2ttYXBfaW52YWxpZF91cGRhdGUoKTtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwic29ja21hcCBjb3B5XCIpKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9mcmVwbGFjZV9jbHNfcmVkaXJlY3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9mcmVwbGFjZV9jbHNfcmVkaXJlY3QuY1xuZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCA3ZTk0NDEyZDQ3YTVjYS4uMDAwMDAwMDAwMDAwMDBcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9mcmVwbGFjZV9jbHNfcmVkaXJlY3QuY1xuKysrIC9kZXYvbnVsbFxuQEAgLTEsMzQgKzAsMCBAQFxuLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4tLy8gQ29weXJpZ2h0IChjKSAyMDIwIEZhY2Vib29rXG4tXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvc3RkZGVmLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9icGYuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3BrdF9jbHMuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2JwZi9icGZfZW5kaWFuLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuLVxuLXN0cnVjdCB7XG4tXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1NPQ0tNQVApO1xuLVx0X190eXBlKGtleSwgaW50KTtcbi1cdF9fdHlwZSh2YWx1ZSwgaW50KTtcbi1cdF9fdWludChtYXhfZW50cmllcywgMik7XG4tfSBzb2NrX21hcCBTRUMoXCIubWFwc1wiKTtcbi1cbi1TRUMoXCJmcmVwbGFjZS9jbHNfcmVkaXJlY3RcIilcbi1pbnQgZnJlcGxhY2VfY2xzX3JlZGlyZWN0X3Rlc3Qoc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuLXtcbi1cdGludCByZXQgPSAwO1xuLVx0Y29uc3QgaW50IHplcm8gPSAwO1xuLVx0c3RydWN0IGJwZl9zb2NrICpzaztcbi1cbi1cdHNrID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZzb2NrX21hcCwgXHUwMDI2emVybyk7XG4tXHRpZiAoIXNrKVxuLVx0XHRyZXR1cm4gVENfQUNUX1NIT1Q7XG4tXG4tXHRyZXQgPSBicGZfbWFwX3VwZGF0ZV9lbGVtKFx1MDAyNnNvY2tfbWFwLCBcdTAwMjZ6ZXJvLCBzaywgMCk7XG4tXHRicGZfc2tfcmVsZWFzZShzayk7XG4tXG4tXHRyZXR1cm4gcmV0ID09IDAgPyBUQ19BQ1RfT0sgOiBUQ19BQ1RfU0hPVDtcbi19XG4tXG4tY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NvY2ttYXBfdXBkYXRlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zb2NrbWFwX3VwZGF0ZS5jXG5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDZkNjRlYTUzNmUzZDgxLi4wMDAwMDAwMDAwMDAwMFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc29ja21hcF91cGRhdGUuY1xuKysrIC9kZXYvbnVsbFxuQEAgLTEsNDggKzAsMCBAQFxuLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4tLy8gQ29weXJpZ2h0IChjKSAyMDIwIENsb3VkZmxhcmVcbi0jaW5jbHVkZSBcInZtbGludXguaFwiXG4tI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2Vcbi1cbi1zdHJ1Y3Qge1xuLVx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9TT0NLTUFQKTtcbi1cdF9fdWludChtYXhfZW50cmllcywgMSk7XG4tXHRfX3R5cGUoa2V5LCBfX3UzMik7XG4tXHRfX3R5cGUodmFsdWUsIF9fdTY0KTtcbi19IHNyYyBTRUMoXCIubWFwc1wiKTtcbi1cbi1zdHJ1Y3Qge1xuLVx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9TT0NLTUFQKTtcbi1cdF9fdWludChtYXhfZW50cmllcywgMSk7XG4tXHRfX3R5cGUoa2V5LCBfX3UzMik7XG4tXHRfX3R5cGUodmFsdWUsIF9fdTY0KTtcbi19IGRzdF9zb2NrX21hcCBTRUMoXCIubWFwc1wiKTtcbi1cbi1zdHJ1Y3Qge1xuLVx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9TT0NLSEFTSCk7XG4tXHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xuLVx0X190eXBlKGtleSwgX191MzIpO1xuLVx0X190eXBlKHZhbHVlLCBfX3U2NCk7XG4tfSBkc3Rfc29ja19oYXNoIFNFQyhcIi5tYXBzXCIpO1xuLVxuLVNFQyhcInRjXCIpXG4taW50IGNvcHlfc29ja19tYXAodm9pZCAqY3R4KVxuLXtcbi1cdHN0cnVjdCBicGZfc29jayAqc2s7XG4tXHRib29sIGZhaWxlZCA9IGZhbHNlO1xuLVx0X191MzIga2V5ID0gMDtcbi1cbi1cdHNrID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZzcmMsIFx1MDAyNmtleSk7XG4tXHRpZiAoIXNrKVxuLVx0XHRyZXR1cm4gU0tfRFJPUDtcbi1cbi1cdGlmIChicGZfbWFwX3VwZGF0ZV9lbGVtKFx1MDAyNmRzdF9zb2NrX21hcCwgXHUwMDI2a2V5LCBzaywgMCkpXG4tXHRcdGZhaWxlZCA9IHRydWU7XG4tXG4tXHRpZiAoYnBmX21hcF91cGRhdGVfZWxlbShcdTAwMjZkc3Rfc29ja19oYXNoLCBcdTAwMjZrZXksIHNrLCAwKSlcbi1cdFx0ZmFpbGVkID0gdHJ1ZTtcbi1cbi1cdGJwZl9za19yZWxlYXNlKHNrKTtcbi1cdHJldHVybiBmYWlsZWQgPyBTS19EUk9QIDogU0tfUEFTUztcbi19XG4tXG4tY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9zb2NrbWFwX211dGF0ZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3NvY2ttYXBfbXV0YXRlLmNcbmluZGV4IGZlNGIxMjMxODdiODZlLi4yMDMzMmE3MzFkNGU0ZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9zb2NrbWFwX211dGF0ZS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc29ja21hcF9tdXRhdGUuY1xuQEAgLTc0LDcgKzc0LDcgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHRlc3Rfc29ja21hcF9sb29rdXBfYW5kX211dGF0ZSh2b2lkKVxuIH1cbiBcbiBTRUMoXCJhY3Rpb25cIilcbi1fX3N1Y2Nlc3NcbitfX2ZhaWx1cmUgX19tc2coXCJjYW5ub3QgdXBkYXRlIHNvY2ttYXAgaW4gdGhpcyBjb250ZXh0XCIpXG4gaW50IHRlc3Rfc2NoZWRfYWN0KHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbiB7XG4gXHR0ZXN0X3NvY2ttYXBfbXV0YXRlKHNrYi1cdTAwM2Vzayk7XG5AQCAtODIsNyArODIsNyBAQCBpbnQgdGVzdF9zY2hlZF9hY3Qoc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuIH1cbiBcbiBTRUMoXCJjbGFzc2lmaWVyXCIpXG4tX19zdWNjZXNzXG4rX19mYWlsdXJlIF9fbXNnKFwiY2Fubm90IHVwZGF0ZSBzb2NrbWFwIGluIHRoaXMgY29udGV4dFwiKVxuIGludCB0ZXN0X3NjaGVkX2NscyhzdHJ1Y3QgX19za19idWZmICpza2IpXG4ge1xuIFx0dGVzdF9zb2NrbWFwX211dGF0ZShza2ItXHUwMDNlc2spO1xuQEAgLTkwLDcgKzkwLDcgQEAgaW50IHRlc3Rfc2NoZWRfY2xzKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbiB9XG4gXG4gU0VDKFwiZmxvd19kaXNzZWN0b3JcIilcbi1fX3N1Y2Nlc3NcbitfX2ZhaWx1cmUgX19tc2coXCJjYW5ub3QgdXBkYXRlIHNvY2ttYXAgaW4gdGhpcyBjb250ZXh0XCIpXG4gaW50IHRlc3RfZmxvd19kaXNzZWN0b3JfZGVsZXRlKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYiBfX2Fsd2F5c191bnVzZWQpXG4ge1xuIFx0dGVzdF9zb2NrbWFwX2RlbGV0ZSgpO1xuQEAgLTk4LDcgKzk4LDcgQEAgaW50IHRlc3RfZmxvd19kaXNzZWN0b3JfZGVsZXRlKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYiBfX2Fsd2F5c191bnVzZWQpXG4gfVxuIFxuIFNFQyhcImZsb3dfZGlzc2VjdG9yXCIpXG4tX19mYWlsdXJlIF9fbXNnKFwicHJvZ3JhbSBvZiB0aGlzIHR5cGUgY2Fubm90IHVzZSBoZWxwZXIgYnBmX3NrX3JlbGVhc2VcIilcbitfX2ZhaWx1cmUgX19tc2coXCJjYW5ub3QgdXBkYXRlIHNvY2ttYXAgaW4gdGhpcyBjb250ZXh0XCIpXG4gaW50IHRlc3RfZmxvd19kaXNzZWN0b3JfdXBkYXRlKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYiBfX2Fsd2F5c191bnVzZWQpXG4ge1xuIFx0dGVzdF9zb2NrbWFwX2xvb2t1cF9hbmRfdXBkYXRlKCk7IC8qIG5vIGFjY2VzcyB0byBza2ItXHUwMDNlc2sgKi9cbkBAIC0xNDYsNyArMTQ2LDcgQEAgaW50IHRlc3Rfc2tfcmV1c2Vwb3J0KHN0cnVjdCBza19yZXVzZXBvcnRfbWQgKmN0eClcbiB9XG4gXG4gU0VDKFwic29ja2V0XCIpXG4tX19zdWNjZXNzXG4rX19mYWlsdXJlIF9fbXNnKFwiY2Fubm90IHVwZGF0ZSBzb2NrbWFwIGluIHRoaXMgY29udGV4dFwiKVxuIGludCB0ZXN0X3NvY2tldF9maWx0ZXIoc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuIHtcbiBcdHRlc3Rfc29ja21hcF9tdXRhdGUoc2tiLVx1MDAzZXNrKTtcbkBAIC0xNzksNyArMTc5LDcgQEAgaW50IHRlc3Rfc29ja29wc191cGRhdGVfZGVkaWNhdGVkKHN0cnVjdCBicGZfc29ja19vcHMgKmN0eClcbiB9XG4gXG4gU0VDKFwieGRwXCIpXG4tX19zdWNjZXNzXG4rX19mYWlsdXJlIF9fbXNnKFwiY2Fubm90IHVwZGF0ZSBzb2NrbWFwIGluIHRoaXMgY29udGV4dFwiKVxuIGludCB0ZXN0X3hkcChzdHJ1Y3QgeGRwX21kICpjdHggX19hbHdheXNfdW51c2VkKVxuIHtcbiBcdHRlc3Rfc29ja21hcF9sb29rdXBfYW5kX211dGF0ZSgpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMjM6MDU6NDUuODY3MTM0ODAxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA2ODA2NTk3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBWZXJpZmllciBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCdzIGhpdHRpbmcgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgcmV2b2x2ZXMgYXJvdW5kIGBtYXlfdXBkYXRlX3NvY2ttYXBgLiBJdCBzZWVtcyB0aGV5J3JlIHRpZ2h0ZW5pbmcgdGhlIHJlaW5zIGhlcmUsIHJlc3RyaWN0aW5nIHdoaWNoIEJQRiBwcm9ncmFtIHR5cGVzIGNhbiBhY3R1YWxseSBtb2RpZnkgc29ja21hcHMuIFNwZWNpZmljYWxseSwgdGhlIHBhdGNoIGlzIGV4cGxpY2l0bHkgcmVtb3Zpbmcgc3VwcG9ydCBmb3I6IGBCUEZfUFJPR19UWVBFX1NPQ0tFVF9GSUxURVJgLCBgQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFNgLCBgQlBGX1BST0dfVFlQRV9TQ0hFRF9BQ1RgLCBgQlBGX1BST0dfVFlQRV9YRFBgLCBhbmQgYEJQRl9QUk9HX1RZUEVfRkxPV19ESVNTRUNUT1JgLlxuXG5Fc3NlbnRpYWxseSwgdGhpcyBtZWFucyB0aGVzZSBwcm9ncmFtIHR5cGVzIGFyZSAqbm8gbG9uZ2VyIHBlcm1pdHRlZCogdG8gdXBkYXRlIHNvY2ttYXBzLiBUaGF0J3MgYSBzaWduaWZpY2FudCByZXN0cmljdGlvbiBhbmQgcG90ZW50aWFsbHkgYSBzZWN1cml0eSBoYXJkZW5pbmcgbWVhc3VyZSwgb3IgcGVyaGFwcyBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiwgZGVwZW5kaW5nIG9uIHRoZSByYXRpb25hbGUuIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgY29tbWl0IG1lc3NhZ2UgYW5kIHJlbGF0ZWQgZGlzY3Vzc2lvbnMgdG8gdW5kZXJzdGFuZCB0aGUgZXhhY3QgbW90aXZhdGlvbi5cblxuVGhlIHBhdGNoIGFsc28gaW5jbHVkZXMgdXBkYXRlcyB0byB0aGUgc2VsZnRlc3RzLCB3aGljaCBpcyBnb29kIHByYWN0aWNlLiBJJ2xsIG5lZWQgdG8gcmV2aWV3IHRob3NlIHRlc3RzIGNhcmVmdWxseS4gVGhleSBsaWtlbHkgcmVtb3ZlZCB0ZXN0cyB0aGF0IHdvdWxkIGhhdmUgcHJldmlvdXNseSBzdWNjZWVkZWQgd2l0aCB0aGVzZSBwcm9ncmFtIHR5cGVzIHVwZGF0aW5nIHNvY2ttYXBzLCBvciB0aGV5J3ZlIGNoYW5nZWQgdGhlIGV4cGVjdGVkIHJlc3VsdCBmcm9tIHN1Y2Nlc3MgdG8gZmFpbHVyZS4gVGhpcyBpcyBjcml0aWNhbCBiZWNhdXNlIHRoZSB0ZXN0cyBuZWVkIHRvIGFjY3VyYXRlbHkgcmVmbGVjdCB0aGUgbmV3IGJlaGF2aW9yIGFuZCBwcmV2ZW50IHJlZ3Jlc3Npb25zLiBJJ2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHRlc3QgbW9kaWZpY2F0aW9ucyB0byBlbnN1cmUgdGhleSBhcmUgY29tcGxldGUgYW5kIGNvdmVyIGFsbCByZWxldmFudCBzY2VuYXJpb3MuIEknbGwgYWxzbyB3YW50IHRvIGxvb2sgZm9yIGFueSBuZXcgdGVzdHMgdGhhdCBleHBsaWNpdGx5IHZlcmlmeSB0aGUgcmVzdHJpY3Rpb24uXG5cbkkgc2hvdWxkIHByb2JhYmx5IHRha2UgYSBsb29rIGF0IHRoZSBjb250ZXh0IG9mIGBtYXlfdXBkYXRlX3NvY2ttYXBgIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgIHRvIHNlZSBob3cgdGhlIGxvZ2ljIGlzIHN0cnVjdHVyZWQuIEl0J2xsIGdpdmUgbWUgYSBjbGVhcmVyIHBpY3R1cmUgb2YgKndoeSogdGhlc2UgcHJvZ3JhbXMgYXJlIGJlaW5nIHJlc3RyaWN0ZWQgYW5kIGhvdyB0aGUgdmVyaWZpZXIgZW5zdXJlcyB0aGlzIHJlc3RyaWN0aW9uIGlzIGVuZm9yY2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzIzLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTkxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMjM6MDU6NTAuOTM1MjA0MjQ2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNzg0NDg2NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWF5X3VwZGF0ZV9zb2NrbWFwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuYz04MjI3PXN0YXRpYyBpbnQgY2hlY2tfZnVuY19hcmcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIGFyZyxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04NDY4LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo4NDY5OnN0YXRpYyBib29sIG1heV91cGRhdGVfc29ja21hcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgZnVuY19pZClcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtODQ3MC17XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9ODUwOD1zdGF0aWMgaW50IGNoZWNrX21hcF9mdW5jX2NvbXBhdGliaWxpdHkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04NTgzLVxcdFxcdCAgICBmdW5jX2lkICE9IEJQRl9GVU5DX21hcF9sb29rdXBfZWxlbSBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo4NTg0OlxcdFxcdCAgICAhbWF5X3VwZGF0ZV9zb2NrbWFwKGVudiwgZnVuY19pZCkpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTg1ODUtXFx0XFx0XFx0Z290byBlcnJvcjtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04NTkyLVxcdFxcdCAgICBmdW5jX2lkICE9IEJQRl9GVU5DX21hcF9sb29rdXBfZWxlbSBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo4NTkzOlxcdFxcdCAgICAhbWF5X3VwZGF0ZV9zb2NrbWFwKGVudiwgZnVuY19pZCkpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTg1OTQtXFx0XFx0XFx0Z290byBlcnJvcjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMjM6MDU6NTMuMzEzNjYxODg0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE2NDE5ODEwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIHRoZSBCUEYgVmVyaWZpZXI6IEEgRm9jdXNlZCBBcHByb2FjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgbmV3IGZ1bmN0aW9uLCBgbWF5X3VwZGF0ZV9zb2NrbWFwYCwgYW5kIGl0J3MgYmVpbmcgdXNlZCBpbiBgY2hlY2tfbWFwX2Z1bmNfY29tcGF0aWJpbGl0eWAuIFRoaXMgaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIHRoZSBCUEYgdmVyaWZpZXIgaXRzZWxmLCBhIGNoYW5nZSB0aGF0IHJlc3RyaWN0cyBzcGVjaWZpYyBCUEYgcHJvZ3JhbSB0eXBlcy4gTXkgZXhwZXJ0IGludHVpdGlvbiBpcyB0ZWxsaW5nIG1lIHRoaXMgd2FycmFudHMgYSBjbG9zZXIgbG9vaywgZXNwZWNpYWxseSBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZS5cblxuWWVhaCwgYWJzb2x1dGVseS4gQSBtb2RpZmljYXRpb24gdG8gdGhlIGNvcmUgdmVyaWZpZXIgbG9naWM/IFRoYXQncyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIFRoZSB2ZXJpZmllciBpcyB3aGVyZSBhIGxvdCBvZiB0aGUgY3JpdGljYWwgc2VjdXJpdHkgY2hlY2tzIGhhcHBlbiwgc28gY2hhbmdlcyB0aGVyZSBhcmUgcG90ZW50aWFsIGdvbGRtaW5lcyBmb3IgdW5jb3ZlcmluZyB2dWxuZXJhYmlsaXRpZXMuXG5cbkFscmlnaHQsIHRpbWUgdG8gbmFycm93IGRvd24gdGhlIGZvY3VzLiBMZXQncyBzdGFydCB3aXRoIGlkZW50aWZ5aW5nIHRoZSBjcml0aWNhbCBzeW1ib2xzLiBXZSd2ZSBnb3QgYGNoZWNrX21hcF9mdW5jX2NvbXBhdGliaWxpdHlgIGFuZCBgbWF5X3VwZGF0ZV9zb2NrbWFwYC4gVGhvc2UgYXJlIHRoZSB0d28gbWFpbiBwbGF5ZXJzIGluIHRoaXMgZ2FtZS5cblxuTm93LCBJJ2xsIGRpdmUgaW50byB0aGUgY29kZS4gSSdsbCBuZWVkIHRvIGNoZWNrIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgIGRpcmVjdGx5IHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIG5ldyBpbnRlcmFjdGlvbiBiZXR3ZWVuIGBjaGVja19tYXBfZnVuY19jb21wYXRpYmlsaXR5YCBhbmQgYG1heV91cGRhdGVfc29ja21hcGAuIFRoZSBkZXZpbCBpcyBhbHdheXMgaW4gdGhlIGRldGFpbHMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyNTIsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMjM6MDU6NTcuNDc3ODYyODFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEyMDg0NjQ0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjaGVja19tYXBfZnVuY19jb21wYXRpYmlsaXR5XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuYz04NTAyPWJvb2wgYnBmX2FsbG93X3RhaWxfY2FsbF9pbl9zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTg1MDctXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjg1MDg6c3RhdGljIGludCBjaGVja19tYXBfZnVuY19jb21wYXRpYmlsaXR5KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTg1MDktXFx0XFx0XFx0XFx0XFx0c3RydWN0IGJwZl9tYXAgKm1hcCwgaW50IGZ1bmNfaWQpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTAxODE9c3RhdGljIGludCBjaGVja19oZWxwZXJfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTA2MTItXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEwNjEzOlxcdGVyciA9IGNoZWNrX21hcF9mdW5jX2NvbXBhdGliaWxpdHkoZW52LCBtZXRhLm1hcC5wdHIsIGZ1bmNfaWQpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDYxNC1cXHRpZiAoZXJyKVxcbi0tXFxuc2NyaXB0cy9icGZfZG9jLnB5PTYwNz1Db21wYXRpYmlsaXR5IGJldHdlZW4gaGVscGVyIGZ1bmN0aW9ucyBhbmQgbWFwIHR5cGVzIGNhbiBiZSBmb3VuZCBpbiB0aGVcXG5zY3JpcHRzL2JwZl9kb2MucHk6NjA4OioqY2hlY2tfbWFwX2Z1bmNfY29tcGF0aWJpbGl0eSoqXFxcXFxcXFwgKCkgZnVuY3Rpb24gaW4gZmlsZSAqa2VybmVsL2JwZi92ZXJpZmllci5jKi5cXG5zY3JpcHRzL2JwZl9kb2MucHktNjA5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQyMzowNTo1OS41OTg3MTk0NTlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTAyNzkzNTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIHRoZSBDb2RlIENoYW5nZSoqXG5cbk9rYXksIHNvIHRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgYG1heV91cGRhdGVfc29ja21hcGAuIFRoYXQgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgYnkgYGNoZWNrX21hcF9mdW5jX2NvbXBhdGliaWxpdHlgLCB3aGljaCwgaW4gdHVybiwgaXMgaW52b2tlZCBieSBgY2hlY2tfaGVscGVyX2NhbGxgLiAgVGhlcmVmb3JlLCBgY2hlY2tfbWFwX2Z1bmNfY29tcGF0aWJpbGl0eWAgYW5kIGBtYXlfdXBkYXRlX3NvY2ttYXBgIGFyZSB0aGUgY3JpdGljYWwgZW50cnkgcG9pbnRzIHRvIHVuZGVyc3RhbmQgdGhpcyBtb2RpZmljYXRpb24uIEkgc2hvdWxkIHN0YXJ0IHRoZXJlLCBhbmQgdGhlbiB0cmFjZSBvdXR3YXJkcy5cblxuTm93LCB3aGF0IGRlcGVuZGVuY2llcyBkbyB3ZSBoYXZlIHRvIHdvcnJ5IGFib3V0PyBJIGtub3cgdGhlIEJQRiB2ZXJpZmllciByZXF1aXJlcyBgQlBGX1NZU0NBTExgLiAgSSBzaG91bGQgcHJvYmFibHkgY29uZmlybSB0aGF0IHRoYXQncyB0aGUgb25seSByZWxldmFudCBjb25maWcuIEkgc2hvdWxkIGNoZWNrIGVpdGhlciBga2VybmVsL2JwZi9NYWtlZmlsZWAgb3IgYGtlcm5lbC9icGYvS2NvbmZpZ2AgZm9yIHJlbGF0ZWQgc2V0dGluZ3MuIExldCdzIHNlZSB3aGF0IGVsc2UgbWlnaHQgYmUgYXQgcGxheSBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDAwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDIzOjA2OjAzLjcwMTUxNTg2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0NTIzNzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19CUEZfU1lTQ0FMTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlPTc9Q0ZMQUdTX2NvcmUubyArPSAtV25vLW92ZXJyaWRlLWluaXQgJChjZmxhZ3Mtbm9nY3NlLXl5KVxcbmtlcm5lbC9icGYvTWFrZWZpbGUtOC1cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjk6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBzeXNjYWxsLm8gdmVyaWZpZXIubyBpbm9kZS5vIGhlbHBlcnMubyB0bnVtLm8gY251bS5vIGxvZy5vIHRva2VuLm8gbGl2ZW5lc3MubyBjb25zdF9mb2xkLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjEwOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYnBmX2l0ZXIubyBtYXBfaXRlci5vIHRhc2tfaXRlci5vIHByb2dfaXRlci5vIGxpbmtfaXRlci5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToxMTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGhhc2h0YWIubyBhcnJheW1hcC5vIHBlcmNwdV9mcmVlbGlzdC5vIGJwZl9scnVfbGlzdC5vIGxwbV90cmllLm8gbWFwX2luX21hcC5vIGJsb29tX2ZpbHRlci5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToxMjpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGxvY2FsX3N0b3JhZ2UubyBxdWV1ZV9zdGFja19tYXBzLm8gcmluZ2J1Zi5vIGJwZl9pbnNuX2FycmF5Lm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjEzOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYnBmX2xvY2FsX3N0b3JhZ2UubyBicGZfdGFza19zdG9yYWdlLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjE0Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gZml4dXBzLm8gY2ZnLm8gc3RhdGVzLm8gYmFja3RyYWNrLm8gY2hlY2tfYnRmLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTE1LW9iai0ke0NPTkZJR19CUEZfTFNNfVxcdCAgKz0gYnBmX2lub2RlX3N0b3JhZ2Uub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6MTY6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBkaXNhc20ubyBtcHJvZy5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0xNy1vYmotJChDT05GSUdfQlBGX0pJVCkgKz0gdHJhbXBvbGluZS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToxODpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJ0Zi5vIG1lbWFsbG9jLm8gcnFzcGlubG9jay5vIHN0cmVhbS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0xOS1pZmVxICgkKENPTkZJR19NTVUpJChDT05GSUdfNjRCSVQpLHl5KVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6MjA6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBhcmVuYS5vIHJhbmdlX3RyZWUub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMjEtZW5kaWZcXG4tLVxcbmtlcm5lbC9icGYvTWFrZWZpbGU9MjM9aWZlcSAoJChDT05GSUdfTkVUKSx5KVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6MjQ6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBkZXZtYXAub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6MjU6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBjcHVtYXAub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6MjY6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBvZmZsb2FkLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjI3Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gbmV0X25hbWVzcGFjZS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToyODpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHRjeC5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0yOS1lbmRpZlxcbmtlcm5lbC9icGYvTWFrZWZpbGU9MzA9aWZlcSAoJChDT05GSUdfUEVSRl9FVkVOVFMpLHkpXFxua2VybmVsL2JwZi9NYWtlZmlsZTozMTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHN0YWNrbWFwLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTMyLWVuZGlmXFxua2VybmVsL2JwZi9NYWtlZmlsZT0zMz1pZmVxICgkKENPTkZJR19DR1JPVVBTKSx5KVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6MzQ6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBjZ3JvdXBfaXRlci5vIGJwZl9jZ3JwX3N0b3JhZ2Uub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMzUtZW5kaWZcXG4tLVxcbmtlcm5lbC9icGYvTWFrZWZpbGU9Mzc9aWZlcSAoJChDT05GSUdfSU5FVCkseSlcXG5rZXJuZWwvYnBmL01ha2VmaWxlOjM4Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gcmV1c2Vwb3J0X2FycmF5Lm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTM5LWVuZGlmXFxuLS1cXG5rZXJuZWwvYnBmL01ha2VmaWxlPTQzPWlmZXEgKCQoQ09ORklHX0JQRl9KSVQpLHkpXFxua2VybmVsL2JwZi9NYWtlZmlsZTo0NDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9zdHJ1Y3Rfb3BzLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjQ1Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gY3B1bWFzay5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS00Ni0jIGJwZl9sc21fcHJvdG8ubyBtdXN0IHByZWNlZGUgYnBmX2xzbS5vLiBUaGUgY3VycmVudCBwYWhvbGUgbG9naWNcXG4tLVxcbmtlcm5lbC9icGYvTWFrZWZpbGU9NTg9aWZuZXEgKCQoQ09ORklHX0NSWVBUTyksKVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6NTk6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBjcnlwdG8ub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtNjAtZW5kaWZcXG5rZXJuZWwvYnBmL01ha2VmaWxlPTYxPW9iai0kKENPTkZJR19CUEZfUFJFTE9BRCkgKz0gcHJlbG9hZC9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTYyLVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6NjM6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSByZWxvX2NvcmUub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6NjQ6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBidGZfaXRlci5vXFxua2VybmVsL2JwZi9NYWtlZmlsZTo2NTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJ0Zl9yZWxvY2F0ZS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZTo2NjpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGttZW1fY2FjaGVfaXRlci5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS02Ny1pZmVxICgkKENPTkZJR19ETUFfU0hBUkVEX0JVRkZFUikseSlcXG5rZXJuZWwvYnBmL01ha2VmaWxlOjY4Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gZG1hYnVmX2l0ZXIub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtNjktZW5kaWZcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jPTk5PXN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2dfYWxsb2Nfbm9fc3RhdHModW5zaWduZWQgaW50IHNpemUsIGdmcF90IGdmcF9leHRyYV9mbGFncylcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jLTE0MS1cXG5rZXJuZWwvYnBmL2NvcmUuYzoxNDI6I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbmtlcm5lbC9icGYvY29yZS5jLTE0My1cXHRicGZfcHJvZ19zdHJlYW1faW5pdChmcCk7XFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz0yNDA0PUVWQUw0KFBST0dfTkFNRV9MSVNULCA0MTYsIDQ0OCwgNDgwLCA1MTIpXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy0yNDA3LVxcbmtlcm5lbC9icGYvY29yZS5jOjI0MDg6I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbmtlcm5lbC9icGYvY29yZS5jLTI0MDktaW50IGJwZl9wYXRjaF9jYWxsX2FyZ3Moc3RydWN0IGJwZl9pbnNuICppbnNuLCB1MzIgc3RhY2tfZGVwdGgpXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz0yOTkyPXZvaWQgX19icGZfZnJlZV91c2VkX2J0ZnMoc3RydWN0IGJ0Zl9tb2RfcGFpciAqdXNlZF9idGZzLCB1MzIgbGVuKVxcbmtlcm5lbC9icGYvY29yZS5jLTI5OTMte1xcbmtlcm5lbC9icGYvY29yZS5jOjI5OTQ6I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbmtlcm5lbC9icGYvY29yZS5jLTI5OTUtXFx0c3RydWN0IGJ0Zl9tb2RfcGFpciAqYnRmX21vZDtcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jPTMwMTM9c3RhdGljIHZvaWQgYnBmX3Byb2dfZnJlZV9kZWZlcnJlZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy0zMDE4LVxcdGF1eCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYnBmX3Byb2dfYXV4LCB3b3JrKTtcXG5rZXJuZWwvYnBmL2NvcmUuYzozMDE5OiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL2NvcmUuYy0zMDIwLVxcdGJwZl9mcmVlX2tmdW5jX2J0Zl90YWIoYXV4LVxcdTAwM2VrZnVuY19idGZfdGFiKTtcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jPTMzMzU9c3RhdGljIG5vaW5saW5lIHZvaWQgYnBmX3Byb2dfcmVwb3J0X21heV9nb3RvX3Zpb2xhdGlvbih2b2lkKVxcbmtlcm5lbC9icGYvY29yZS5jLTMzMzYte1xcbmtlcm5lbC9icGYvY29yZS5jOjMzMzc6I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbmtlcm5lbC9icGYvY29yZS5jLTMzMzgtXFx0c3RydWN0IGJwZl9zdHJlYW1fc3RhZ2Ugc3M7XFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz0zMzc1PV9fd2VhayB1NjQgYnBmX2FyZW5hX2dldF9rZXJuX3ZtX3N0YXJ0KHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hKVxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmMtMzM3OS1cXG5rZXJuZWwvYnBmL2NvcmUuYzozMzgwOiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL2NvcmUuYy0zMzgxLV9fd2VhayBib29sIGJwZl9hcmVuYV9oYW5kbGVfcGFnZV9mYXVsdCh1bnNpZ25lZCBsb25nIGFkZHIsIGJvb2wgaXNfd3JpdGUsXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz0zNDA2PUVYUE9SVF9UUkFDRVBPSU5UX1NZTUJPTF9HUEwoeGRwX2J1bGtfdHgpO1xcbmtlcm5lbC9icGYvY29yZS5jLTM0MDctXFxua2VybmVsL2JwZi9jb3JlLmM6MzQwODojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxua2VybmVsL2JwZi9jb3JlLmMtMzQwOS1cXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE0Njc9aW50IF9fd2VhayBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNDc0LSAgICBkZWZpbmVkKENPTkZJR19IQVZFX1NJTkdMRV9GVFJBQ0VfRElSRUNUX09QUykgXFx1MDAyNlxcdTAwMjYgXFxcXFxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE0NzU6ICAgIGRlZmluZWQoQ09ORklHX0JQRl9TWVNDQUxMKVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE0NzYtXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xNzExPWludCBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCBzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqbGluaylcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE3NDctXFx0ICBDT05GSUdfSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFMgXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNzQ4OlxcdCAgQ09ORklHX0JQRl9TWVNDQUxMICovXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTc0OS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMjM6MDY6MDMuNzY2MDQ4Mjc1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY3ODk4NzA5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBWZXJpZmllciBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyB0aGUgY2hhbmdlIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlzIHNwZWNpZmljYWxseSB3aXRoaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuICBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgaXMgcmVsYXRlZCB0byB0aGUgQlBGIHZlcmlmaWVyIGl0c2VsZiwgYW5kIHRoZSBwcmltYXJ5IHByZXJlcXVpc2l0ZSBmb3IgdGhpcyBjb2RlIHBhdGggaXMgYENPTkZJR19CUEZfU1lTQ0FMTGAuICBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhhdCwgYnV0IEknbSByZWFzb25hYmx5IGNvbmZpZGVudC5cblxuTm93LCBiZWNhdXNlIGl0J3MgaW4gdGhlIGNvbnRleHQgb2YgYHNvY2ttYXBgLCBJIHNob3VsZCBzdGFydCB0aGlua2luZyBhYm91dCByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBBc2lkZSBmcm9tIGBDT05GSUdfQlBGX1NZU0NBTExgLCBhcmUgdGhlcmUgYW55IG90aGVyIGRlcGVuZGVuY2llcyBJIG5lZWQgdG8gY29uc2lkZXI/IE15IGluaXRpYWwgZ3Vlc3MgaXMgdGhhdCBgQ09ORklHX0NHUk9VUF9CUEZgIG9yIHBvc3NpYmx5IGV2ZW4gYENPTkZJR19ORVRgIG1pZ2h0IGFsc28gcGxheSBhIHJvbGUuIFRoZXNlIG9mdGVuIGludGVyYWN0LiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGJyb2FkZXIgY29udGV4dCB0byBjb25maXJtLlxuXG5MZXQncyBxdWlja2x5IGdldCBiYWNrIGludG8gdGhlIGNvZGUgYW5kIGRvdWJsZS1jaGVjayBzcGVjaWZpY2FsbHkgdGhlIGBtYXlfdXBkYXRlX3NvY2ttYXBgIGZ1bmN0aW9uIHdpdGhpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gSSBuZWVkIHRvIGVuc3VyZSBteSBhc3N1bXB0aW9ucyBhYm91dCB0aGUgZGVwZW5kZW5jaWVzIGFyZSBjb3JyZWN0IGFuZCB1bmRlcnN0YW5kIHRoZSBleGFjdCBuYXR1cmUgb2YgdGhlIG1vZGlmaWNhdGlvbi4gVGhpcyBpcyB3aGVyZSBJJ2xsIGdldCB0aGUgcmVhbCBkZXRhaWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NzM5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDIzOjA2OjA3LjQ0NTAzODU0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Njk5ODI4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtYXlfdXBkYXRlX3NvY2ttYXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuYz04MjI3PXN0YXRpYyBpbnQgY2hlY2tfZnVuY19hcmcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIGFyZyxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04NDY4LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo4NDY5OnN0YXRpYyBib29sIG1heV91cGRhdGVfc29ja21hcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgZnVuY19pZClcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtODQ3MC17XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9ODUwOD1zdGF0aWMgaW50IGNoZWNrX21hcF9mdW5jX2NvbXBhdGliaWxpdHkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04NTgzLVxcdFxcdCAgICBmdW5jX2lkICE9IEJQRl9GVU5DX21hcF9sb29rdXBfZWxlbSBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo4NTg0OlxcdFxcdCAgICAhbWF5X3VwZGF0ZV9zb2NrbWFwKGVudiwgZnVuY19pZCkpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTg1ODUtXFx0XFx0XFx0Z290byBlcnJvcjtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04NTkyLVxcdFxcdCAgICBmdW5jX2lkICE9IEJQRl9GVU5DX21hcF9sb29rdXBfZWxlbSBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo4NTkzOlxcdFxcdCAgICAhbWF5X3VwZGF0ZV9zb2NrbWFwKGVudiwgZnVuY19pZCkpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTg1OTQtXFx0XFx0XFx0Z290byBlcnJvcjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMjM6MDY6MDcuNTAyMDQ3MDI2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY1MzExNDgzODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZSwgbXkgaW5pdGlhbCByZWFjdGlvbiBpcywgaG1tLCB0aGUgYG1heV91cGRhdGVfc29ja21hcGAgZnVuY3Rpb24uIFdoZXJlICpleGFjdGx5KiBpcyB0aGF0IHVzZWQ/IE9ubHkgaW4gYGNoZWNrX21hcF9mdW5jX2NvbXBhdGliaWxpdHlgPyBJbnRlcmVzdGluZy4gSSB3b25kZXIgaWYgdGhlcmUncyBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbiByZWxhdGVkIHRvIHNvY2ttYXBzIEkgbmVlZCB0byBiZSBhd2FyZSBvZiBoZXJlPyBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaWcgYXJvdW5kIGluIHRoZSBzb3VyY2UgY29kZS4gTGV0J3Mgc3RhcnQgd2l0aCBgbmV0L2NvcmUvc29ja19tYXAuY2AuIFRoYXQgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBwbGFjZSB0byBmaW5kIHRoZSBuaXR0eS1ncml0dHkgZGV0YWlscy4gSSdsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayBhbnkgYXNzb2NpYXRlZCBmaWxlcyB0b28uIEknbGwga2VlcCB0aGUgY29udGV4dCBpbiBtaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDQ0MiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDIzOjA2OjE0LjAzMzE5OTgxMVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzUzOTQwNTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic29ja19tYXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNjQwIGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5uZXQvY29yZS9NYWtlZmlsZT00ND1vYmotJChDT05GSUdfTkVUX1NPQ0tfTVNHKSArPSBza21zZy5vXFxubmV0L2NvcmUvTWFrZWZpbGU6NDU6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBzb2NrX21hcC5vXFxubmV0L2NvcmUvTWFrZWZpbGUtNDYtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBicGZfc2tfc3RvcmFnZS5vXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz04NTk3PXhkcF9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtODY2Ny1cXG5uZXQvY29yZS9maWx0ZXIuYzo4NjY4OmNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc29ja19tYXBfdXBkYXRlX3Byb3RvIF9fd2VhaztcXG5uZXQvY29yZS9maWx0ZXIuYy04NjY5LWNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc29ja19oYXNoX3VwZGF0ZV9wcm90byBfX3dlYWs7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz04NjcyPXNvY2tfb3BzX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy04Njg2LVxcdFxcdHJldHVybiBcXHUwMDI2YnBmX3NvY2tfb3BzX2NiX2ZsYWdzX3NldF9wcm90bztcXG5uZXQvY29yZS9maWx0ZXIuYzo4Njg3OlxcdGNhc2UgQlBGX0ZVTkNfc29ja19tYXBfdXBkYXRlOlxcbm5ldC9jb3JlL2ZpbHRlci5jOjg2ODg6XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfc29ja19tYXBfdXBkYXRlX3Byb3RvO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTg2ODktXFx0Y2FzZSBCUEZfRlVOQ19zb2NrX2hhc2hfdXBkYXRlOlxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MTE1NzE9QlBGX0NBTExfNChza19zZWxlY3RfcmV1c2Vwb3J0LCBzdHJ1Y3Qgc2tfcmV1c2Vwb3J0X2tlcm4gKiwgcmV1c2Vfa2VybixcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTExNTg4LVxcdFxcdCAqXFxubmV0L2NvcmUvZmlsdGVyLmM6MTE1ODk6XFx0XFx0ICogT3RoZXIgbWFwcyAoZS5nLiBzb2NrX21hcCkgZG8gbm90IHByb3ZpZGUgdGhpcyBndWFyYW50ZWUgYW5kXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE1OTAtXFx0XFx0ICogdGhlIHNrIG1heSBuZXZlciBiZSBpbiB0aGUgcmV1c2Vwb3J0IGdyb3VwIHRvIGJlZ2luIHdpdGguXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMTYxMy1lcnJvcjpcXG5uZXQvY29yZS9maWx0ZXIuYzoxMTYxNDpcXHQvKiBMb29rdXAgaW4gc29ja19tYXAgY2FuIHJldHVybiBUQ1AgRVNUQUJMSVNIRUQgc29ja2V0cy4gKi9cXG5uZXQvY29yZS9maWx0ZXIuYy0xMTYxNS1cXHRpZiAoc2tfaXNfcmVmY291bnRlZChzZWxlY3RlZF9zaykpXFxuLS1cXG5uZXQvY29yZS9za21zZy5jPTY3MT1zdGF0aWMgdm9pZCBza19wc29ja19iYWNrbG9nKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtNjg4LVxcdC8qIEluY3JlbWVudCB0aGUgcHNvY2sgcmVmY250IHRvIHN5bmNocm9uaXplIHdpdGggY2xvc2UoZmQpIHBhdGggaW5cXG5uZXQvY29yZS9za21zZy5jOjY4OTpcXHQgKiBzb2NrX21hcF9jbG9zZSgpLCBlbnN1cmluZyB3ZSB3YWl0IGZvciBiYWNrbG9nIHRocmVhZCBjb21wbGV0aW9uXFxubmV0L2NvcmUvc2ttc2cuYy02OTAtXFx0ICogYmVmb3JlIHNrX3NvY2tldCBmcmVlZC4gSWYgcmVmY250IGluY3JlbWVudCBmYWlscywgaXQgaW5kaWNhdGVzXFxubmV0L2NvcmUvc2ttc2cuYzo2OTE6XFx0ICogc29ja19tYXBfY2xvc2UoKSBjb21wbGV0ZWQgd2l0aCBza19zb2NrZXQgcG90ZW50aWFsbHkgYWxyZWFkeSBmcmVlZC5cXG5uZXQvY29yZS9za21zZy5jLTY5Mi1cXHQgKi9cXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9OTA1PUVYUE9SVF9TWU1CT0xfR1BMKHNrX3Bzb2NrX2Ryb3ApO1xcbm5ldC9jb3JlL3NrbXNnLmMtOTA2LVxcbm5ldC9jb3JlL3NrbXNnLmM6OTA3OnN0YXRpYyBpbnQgc2tfcHNvY2tfbWFwX3ZlcmQoaW50IHZlcmRpY3QsIGJvb2wgcmVkaXIpXFxubmV0L2NvcmUvc2ttc2cuYy05MDgte1xcbi0tXFxubmV0L2NvcmUvc2ttc2cuYz05MjA9aW50IHNrX3Bzb2NrX21zZ192ZXJkaWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayxcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtOTM2LVxcdG1zZy1cXHUwMDNlc2sgPSBOVUxMO1xcbm5ldC9jb3JlL3NrbXNnLmM6OTM3OlxcdHJldCA9IHNrX3Bzb2NrX21hcF92ZXJkKHJldCwgbXNnLVxcdTAwM2Vza19yZWRpcik7XFxubmV0L2NvcmUvc2ttc2cuYy05MzgtXFx0cHNvY2stXFx1MDAzZWFwcGx5X2J5dGVzID0gbXNnLVxcdTAwM2VhcHBseV9ieXRlcztcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9MTA3NT1zdGF0aWMgdm9pZCBza19wc29ja19zdHJwX3JlYWQoc3RydWN0IHN0cnBhcnNlciAqc3RycCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtMTA5NS1cXHRcXHRza2JfYnBmX3NldF9zdHJwYXJzZXIoc2tiKTtcXG5uZXQvY29yZS9za21zZy5jOjEwOTY6XFx0XFx0cmV0ID0gc2tfcHNvY2tfbWFwX3ZlcmQocmV0LCBza2JfYnBmX3JlZGlyZWN0X2ZldGNoKHNrYikpO1xcbm5ldC9jb3JlL3NrbXNnLmMtMTA5Ny1cXHRcXHRza2ItXFx1MDAzZXNrID0gTlVMTDtcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9MTE5OD1zdGF0aWMgaW50IHNrX3Bzb2NrX3ZlcmRpY3RfcmVjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTEyMTktXFx0XFx0cmV0ID0gYnBmX3Byb2dfcnVuX3Bpbl9vbl9jcHUocHJvZywgc2tiKTtcXG5uZXQvY29yZS9za21zZy5jOjEyMjA6XFx0XFx0cmV0ID0gc2tfcHNvY2tfbWFwX3ZlcmQocmV0LCBza2JfYnBmX3JlZGlyZWN0X2ZldGNoKHNrYikpO1xcbm5ldC9jb3JlL3NrbXNnLmMtMTIyMS1cXHR9XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jPTMyPXN0YXRpYyBERUZJTkVfTVVURVgoc29ja21hcF9tdXRleCk7XFxubmV0L2NvcmUvc29ja19tYXAuYy0zMy1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjM0OnN0YXRpYyBpbnQgc29ja19tYXBfcHJvZ191cGRhdGUoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzUtXFx0XFx0XFx0XFx0c3RydWN0IGJwZl9wcm9nICpvbGQsIHN0cnVjdCBicGZfbGluayAqbGluayxcXG5uZXQvY29yZS9zb2NrX21hcC5jLTM2LVxcdFxcdFxcdFxcdHUzMiB3aGljaCk7XFxubmV0L2NvcmUvc29ja19tYXAuYzozNzpzdGF0aWMgc3RydWN0IHNrX3Bzb2NrX3Byb2dzICpzb2NrX21hcF9wcm9ncyhzdHJ1Y3QgYnBmX21hcCAqbWFwKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTM4LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6Mzk6c3RhdGljIHN0cnVjdCBicGZfbWFwICpzb2NrX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcXG5uZXQvY29yZS9zb2NrX21hcC5jLTQwLXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjctXFxubmV0L2NvcmUvc29ja19tYXAuYzo2ODppbnQgc29ja19tYXBfZ2V0X2Zyb21fZmQoY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG5uZXQvY29yZS9zb2NrX21hcC5jLTY5LXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODAtXFx0bXV0ZXhfbG9jayhcXHUwMDI2c29ja21hcF9tdXRleCk7XFxubmV0L2NvcmUvc29ja19tYXAuYzo4MTpcXHRyZXQgPSBzb2NrX21hcF9wcm9nX3VwZGF0ZShtYXAsIHByb2csIE5VTEwsIE5VTEwsIGF0dHItXFx1MDAzZWF0dGFjaF90eXBlKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTgyLVxcdG11dGV4X3VubG9jayhcXHUwMDI2c29ja21hcF9tdXRleCk7XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTg1LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODY6aW50IHNvY2tfbWFwX3Byb2dfZGV0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBlbnVtIGJwZl9wcm9nX3R5cGUgcHR5cGUpXFxubmV0L2NvcmUvc29ja19tYXAuYy04Ny17XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTEwOS1cXHRtdXRleF9sb2NrKFxcdTAwMjZzb2NrbWFwX211dGV4KTtcXG5uZXQvY29yZS9zb2NrX21hcC5jOjExMDpcXHRyZXQgPSBzb2NrX21hcF9wcm9nX3VwZGF0ZShtYXAsIE5VTEwsIHByb2csIE5VTEwsIGF0dHItXFx1MDAzZWF0dGFjaF90eXBlKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTExMS1cXHRtdXRleF91bmxvY2soXFx1MDAyNnNvY2ttYXBfbXV0ZXgpO1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xMTYtXFxubmV0L2NvcmUvc29ja19tYXAuYzoxMTc6c3RhdGljIHZvaWQgc29ja19tYXBfc2tfYWNxdWlyZShzdHJ1Y3Qgc29jayAqc2spXFxubmV0L2NvcmUvc29ja19tYXAuYy0xMTgtXFx0X19hY3F1aXJlcyhcXHUwMDI2c2stXFx1MDAzZXNrX2xvY2suc2xvY2spXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTEyMy1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjEyNDpzdGF0aWMgdm9pZCBzb2NrX21hcF9za19yZWxlYXNlKHN0cnVjdCBzb2NrICpzaylcXG5uZXQvY29yZS9zb2NrX21hcC5jLTEyNS1cXHRfX3JlbGVhc2VzKFxcdTAwMjZzay1cXHUwMDNlc2tfbG9jay5zbG9jaylcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTMwLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTMxOnN0YXRpYyB2b2lkIHNvY2tfbWFwX2FkZF9saW5rKHN0cnVjdCBza19wc29jayAqcHNvY2ssXFxubmV0L2NvcmUvc29ja19tYXAuYy0xMzItXFx0XFx0XFx0ICAgICAgc3RydWN0IHNrX3Bzb2NrX2xpbmsgKmxpbmssXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTE0MS1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjE0MjpzdGF0aWMgdm9pZCBzb2NrX21hcF9kZWxfbGluayhzdHJ1Y3Qgc29jayAqc2ssXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNDMtXFx0XFx0XFx0ICAgICAgc3RydWN0IHNrX3Bzb2NrICpwc29jaywgdm9pZCAqbGlua19yYXcpXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTE1MS1cXHRcXHRcXHRzdHJ1Y3QgYnBmX21hcCAqbWFwID0gbGluay1cXHUwMDNlbWFwO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTUyOlxcdFxcdFxcdHN0cnVjdCBza19wc29ja19wcm9ncyAqcHJvZ3MgPSBzb2NrX21hcF9wcm9ncyhtYXApO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTUzLVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNzgtXFxubmV0L2NvcmUvc29ja19tYXAuYzoxNzk6c3RhdGljIHZvaWQgc29ja19tYXBfdW5yZWYoc3RydWN0IHNvY2sgKnNrLCB2b2lkICpsaW5rX3JhdylcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE4MC17XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTE4My1cXHRpZiAobGlrZWx5KHBzb2NrKSkge1xcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTg0OlxcdFxcdHNvY2tfbWFwX2RlbF9saW5rKHNrLCBwc29jaywgbGlua19yYXcpO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTg1LVxcdFxcdHNrX3Bzb2NrX3B1dChzaywgcHNvY2spO1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xODgtXFxubmV0L2NvcmUvc29ja19tYXAuYzoxODk6c3RhdGljIGludCBzb2NrX21hcF9pbml0X3Byb3RvKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaylcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE5MC17XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTE5Ni1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjE5NzpzdGF0aWMgc3RydWN0IHNrX3Bzb2NrICpzb2NrX21hcF9wc29ja19nZXRfY2hlY2tlZChzdHJ1Y3Qgc29jayAqc2spXFxubmV0L2NvcmUvc29ja19tYXAuYy0xOTgte1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0yMDMtXFx0aWYgKHBzb2NrKSB7XFxubmV0L2NvcmUvc29ja19tYXAuYzoyMDQ6XFx0XFx0aWYgKHNrLVxcdTAwM2Vza19wcm90LVxcdTAwM2VjbG9zZSAhPSBzb2NrX21hcF9jbG9zZSkge1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMjA1LVxcdFxcdFxcdHBzb2NrID0gRVJSX1BUUigtRUJVU1kpO1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0yMTYtXFxubmV0L2NvcmUvc29ja19tYXAuYzoyMTc6c3RhdGljIGludCBzb2NrX21hcF9saW5rKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBzb2NrICpzaylcXG5uZXQvY29yZS9zb2NrX21hcC5jLTIxOC17XFxubmV0L2NvcmUvc29ja19tYXAuYzoyMTk6XFx0c3RydWN0IHNrX3Bzb2NrX3Byb2dzICpwcm9ncyA9IHNvY2tfbWFwX3Byb2dzKG1hcCk7XFxubmV0L2NvcmUvc29ja19tYXAuYy0yMjAtXFx0c3RydWN0IGJwZl9wcm9nICpzdHJlYW1fdmVyZGljdCA9IE5VTEw7XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTI2MC1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjI2MTpcXHRwc29jayA9IHNvY2tfbWFwX3Bzb2NrX2dldF9jaGVja2VkKHNrKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTI2Mi1cXHRpZiAoSVNfRVJSKHBzb2NrKSkge1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0yOTctXFx0ICovXFxubmV0L2NvcmUvc29ja19tYXAuYzoyOTg6XFx0cmV0ID0gc29ja19tYXBfaW5pdF9wcm90byhzaywgcHNvY2spO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMjk5LVxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTMzOC1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjMzOTpzdGF0aWMgdm9pZCBzb2NrX21hcF9mcmVlKHN0cnVjdCBicGZfbWFwICptYXApXFxubmV0L2NvcmUvc29ja19tYXAuYy0zNDAte1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0zNTctXFx0XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MzU4OlxcdFxcdFxcdHNvY2tfbWFwX3VucmVmKHNrLCBwc2spO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzU5LVxcdFxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0zNzEtXFxubmV0L2NvcmUvc29ja19tYXAuYzozNzI6c3RhdGljIHZvaWQgc29ja19tYXBfcmVsZWFzZV9wcm9ncyhzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzczLXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzc2LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6Mzc3OnN0YXRpYyBzdHJ1Y3Qgc29jayAqX19zb2NrX21hcF9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1MzIga2V5KVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzc4LXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzg3LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6Mzg4OnN0YXRpYyB2b2lkICpzb2NrX21hcF9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzg5LXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzkxLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MzkyOlxcdHNrID0gX19zb2NrX21hcF9sb29rdXBfZWxlbShtYXAsICoodTMyICopa2V5KTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTM5My1cXHRpZiAoIXNrKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0zOTktXFxubmV0L2NvcmUvc29ja19tYXAuYzo0MDA6c3RhdGljIHZvaWQgKnNvY2tfbWFwX2xvb2t1cF9zeXMoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDAxLXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDA2LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NDA3OlxcdHNrID0gX19zb2NrX21hcF9sb29rdXBfZWxlbShtYXAsICoodTMyICopa2V5KTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTQwOC1cXHRpZiAoIXNrKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy00MTQtXFxubmV0L2NvcmUvc29ja19tYXAuYzo0MTU6c3RhdGljIGludCBfX3NvY2tfbWFwX2RlbGV0ZShzdHJ1Y3QgYnBmX3N0YWIgKnN0YWIsIHN0cnVjdCBzb2NrICpza190ZXN0LFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDE2LVxcdFxcdFxcdCAgICAgc3RydWN0IHNvY2sgKipwc2spXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTQyNS1cXHRpZiAobGlrZWx5KHNrKSlcXG5uZXQvY29yZS9zb2NrX21hcC5jOjQyNjpcXHRcXHRzb2NrX21hcF91bnJlZihzaywgcHNrKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTQyNy1cXHRlbHNlXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTQzMy1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjQzNDpzdGF0aWMgdm9pZCBzb2NrX21hcF9kZWxldGVfZnJvbV9saW5rKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBzb2NrICpzayxcXG5uZXQvY29yZS9zb2NrX21hcC5jLTQzNS1cXHRcXHRcXHRcXHQgICAgICB2b2lkICpsaW5rX3JhdylcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDM4LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NDM5OlxcdF9fc29ja19tYXBfZGVsZXRlKHN0YWIsIHNrLCBsaW5rX3Jhdyk7XFxubmV0L2NvcmUvc29ja19tYXAuYy00NDAtfVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDQxLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NDQyOnN0YXRpYyBsb25nIHNvY2tfbWFwX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcXG5uZXQvY29yZS9zb2NrX21hcC5jLTQ0My17XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTQ1MS1cXHRwc2sgPSBcXHUwMDI2c3RhYi1cXHUwMDNlc2tzW2ldO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NDUyOlxcdHJldHVybiBfX3NvY2tfbWFwX2RlbGV0ZShzdGFiLCBOVUxMLCBwc2spO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDUzLX1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTQ1NC1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjQ1NTpzdGF0aWMgaW50IHNvY2tfbWFwX2dldF9uZXh0X2tleShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKm5leHQpXFxubmV0L2NvcmUvc29ja19tYXAuYy00NTYte1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy00NjktXFxubmV0L2NvcmUvc29ja19tYXAuYzo0NzA6c3RhdGljIGludCBzb2NrX21hcF91cGRhdGVfY29tbW9uKHN0cnVjdCBicGZfbWFwICptYXAsIHUzMiBpZHgsXFxubmV0L2NvcmUvc29ja19tYXAuYy00NzEtXFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc29jayAqc2ssIHU2NCBmbGFncylcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDg4LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NDg5OlxcdHJldCA9IHNvY2tfbWFwX2xpbmsobWFwLCBzayk7XFxubmV0L2NvcmUvc29ja19tYXAuYy00OTAtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTUwNS1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjUwNjpcXHRzb2NrX21hcF9hZGRfbGluayhwc29jaywgbGluaywgbWFwLCBcXHUwMDI2c3RhYi1cXHUwMDNlc2tzW2lkeF0pO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTA3LVxcdHN0YWItXFx1MDAzZXNrc1tpZHhdID0gc2s7XFxubmV0L2NvcmUvc29ja19tYXAuYy01MDgtXFx0aWYgKG9zaylcXG5uZXQvY29yZS9zb2NrX21hcC5jOjUwOTpcXHRcXHRzb2NrX21hcF91bnJlZihvc2ssIFxcdTAwMjZzdGFiLVxcdTAwM2Vza3NbaWR4XSk7XFxubmV0L2NvcmUvc29ja19tYXAuYy01MTAtXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnN0YWItXFx1MDAzZWxvY2spO1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy01MjAtXFxubmV0L2NvcmUvc29ja19tYXAuYzo1MjE6c3RhdGljIGJvb2wgc29ja19tYXBfb3Bfb2theShjb25zdCBzdHJ1Y3QgYnBmX3NvY2tfb3BzX2tlcm4gKm9wcylcXG5uZXQvY29yZS9zb2NrX21hcC5jLTUyMi17XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTUyNy1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjUyODpzdGF0aWMgYm9vbCBzb2NrX21hcF9yZWRpcmVjdF9hbGxvd2VkKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG5uZXQvY29yZS9zb2NrX21hcC5jLTUyOS17XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTUzNS1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjUzNjpzdGF0aWMgYm9vbCBzb2NrX21hcF9za19pc19zdWl0YWJsZShjb25zdCBzdHJ1Y3Qgc29jayAqc2spXFxubmV0L2NvcmUvc29ja19tYXAuYy01Mzcte1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy01NDAtXFxubmV0L2NvcmUvc29ja19tYXAuYzo1NDE6c3RhdGljIGJvb2wgc29ja19tYXBfc2tfc3RhdGVfYWxsb3dlZChjb25zdCBzdHJ1Y3Qgc29jayAqc2spXFxubmV0L2NvcmUvc29ja19tYXAuYy01NDIte1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz01NTM9c3RhdGljIGludCBzb2NrX2hhc2hfdXBkYXRlX2NvbW1vbihzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTU1NS1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjU1NjppbnQgc29ja19tYXBfdXBkYXRlX2VsZW1fc3lzKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsXFxubmV0L2NvcmUvc29ja19tYXAuYy01NTctXFx0XFx0XFx0ICAgICB1NjQgZmxhZ3MpXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTU3OC1cXHR9XFxubmV0L2NvcmUvc29ja19tYXAuYzo1Nzk6XFx0aWYgKCFzb2NrX21hcF9za19pc19zdWl0YWJsZShzaykpIHtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTU4MC1cXHRcXHRyZXQgPSAtRU9QTk9UU1VQUDtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTgzLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NTg0OlxcdHNvY2tfbWFwX3NrX2FjcXVpcmUoc2spO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NTg1OlxcdGlmICghc29ja19tYXBfc2tfc3RhdGVfYWxsb3dlZChzaykpXFxubmV0L2NvcmUvc29ja19tYXAuYy01ODYtXFx0XFx0cmV0ID0gLUVPUE5PVFNVUFA7XFxubmV0L2NvcmUvc29ja19tYXAuYy01ODctXFx0ZWxzZSBpZiAobWFwLVxcdTAwM2VtYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfU09DS01BUClcXG5uZXQvY29yZS9zb2NrX21hcC5jOjU4ODpcXHRcXHRyZXQgPSBzb2NrX21hcF91cGRhdGVfY29tbW9uKG1hcCwgKih1MzIgKilrZXksIHNrLCBmbGFncyk7XFxubmV0L2NvcmUvc29ja19tYXAuYy01ODktXFx0ZWxzZVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTkwLVxcdFxcdHJldCA9IHNvY2tfaGFzaF91cGRhdGVfY29tbW9uKG1hcCwga2V5LCBzaywgZmxhZ3MpO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NTkxOlxcdHNvY2tfbWFwX3NrX3JlbGVhc2Uoc2spO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTkyLW91dDpcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTk2LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NTk3OnN0YXRpYyBsb25nIHNvY2tfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcXG5uZXQvY29yZS9zb2NrX21hcC5jLTU5OC1cXHRcXHRcXHRcXHQgdm9pZCAqdmFsdWUsIHU2NCBmbGFncylcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjA1LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NjA2OlxcdGlmICghc29ja19tYXBfc2tfaXNfc3VpdGFibGUoc2spKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjA3LVxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjEwLVxcdGJoX2xvY2tfc29jayhzayk7XFxubmV0L2NvcmUvc29ja19tYXAuYzo2MTE6XFx0aWYgKCFzb2NrX21hcF9za19zdGF0ZV9hbGxvd2VkKHNrKSlcXG5uZXQvY29yZS9zb2NrX21hcC5jLTYxMi1cXHRcXHRyZXQgPSAtRU9QTk9UU1VQUDtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTYxMy1cXHRlbHNlIGlmIChtYXAtXFx1MDAzZW1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9TT0NLTUFQKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NjE0OlxcdFxcdHJldCA9IHNvY2tfbWFwX3VwZGF0ZV9jb21tb24obWFwLCAqKHUzMiAqKWtleSwgc2ssIGZsYWdzKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTYxNS1cXHRlbHNlXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTYyMS1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjYyMjpCUEZfQ0FMTF80KGJwZl9zb2NrX21hcF91cGRhdGUsIHN0cnVjdCBicGZfc29ja19vcHNfa2VybiAqLCBzb3BzLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjIzLVxcdCAgIHN0cnVjdCBicGZfbWFwICosIG1hcCwgdm9pZCAqLCBrZXksIHU2NCwgZmxhZ3MpXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTYyNi1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjYyNzpcXHRpZiAobGlrZWx5KHNvY2tfbWFwX3NrX2lzX3N1aXRhYmxlKHNvcHMtXFx1MDAzZXNrKSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NjI4OlxcdFxcdCAgIHNvY2tfbWFwX29wX29rYXkoc29wcykpKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NjI5OlxcdFxcdHJldHVybiBzb2NrX21hcF91cGRhdGVfY29tbW9uKG1hcCwgKih1MzIgKilrZXksIHNvcHMtXFx1MDAzZXNrLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjMwLVxcdFxcdFxcdFxcdFxcdCAgICAgIGZsYWdzKTtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjMzLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NjM0OmNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc29ja19tYXBfdXBkYXRlX3Byb3RvID0ge1xcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NjM1OlxcdC5mdW5jXFx0XFx0PSBicGZfc29ja19tYXBfdXBkYXRlLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjM2LVxcdC5ncGxfb25seVxcdD0gZmFsc2UsXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jPTY0NT1CUEZfQ0FMTF80KGJwZl9za19yZWRpcmVjdF9tYXAsIHN0cnVjdCBza19idWZmICosIHNrYixcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjUyLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NjUzOlxcdHNrID0gX19zb2NrX21hcF9sb29rdXBfZWxlbShtYXAsIGtleSk7XFxubmV0L2NvcmUvc29ja19tYXAuYzo2NTQ6XFx0aWYgKHVubGlrZWx5KCFzayB8fCAhc29ja19tYXBfcmVkaXJlY3RfYWxsb3dlZChzaykpKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjU1LVxcdFxcdHJldHVybiBTS19EUk9QO1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz02NzM9QlBGX0NBTExfNChicGZfbXNnX3JlZGlyZWN0X21hcCwgc3RydWN0IHNrX21zZyAqLCBtc2csXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTY4MC1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjY4MTpcXHRzayA9IF9fc29ja19tYXBfbG9va3VwX2VsZW0obWFwLCBrZXkpO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NjgyOlxcdGlmICh1bmxpa2VseSghc2sgfHwgIXNvY2tfbWFwX3JlZGlyZWN0X2FsbG93ZWQoc2spKSlcXG5uZXQvY29yZS9zb2NrX21hcC5jLTY4My1cXHRcXHRyZXR1cm4gU0tfRFJPUDtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9Njk0PWNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfbXNnX3JlZGlyZWN0X21hcF9wcm90byA9IHtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzAzLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NzA0OnN0cnVjdCBzb2NrX21hcF9zZXFfaW5mbyB7XFxubmV0L2NvcmUvc29ja19tYXAuYy03MDUtXFx0c3RydWN0IGJwZl9tYXAgKm1hcDtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9NzE3PURFRklORV9CUEZfSVRFUl9GVU5DKHNvY2ttYXAsIHN0cnVjdCBicGZfaXRlcl9tZXRhICptZXRhLFxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy03MjAtXFxubmV0L2NvcmUvc29ja19tYXAuYzo3MjE6c3RhdGljIHZvaWQgKnNvY2tfbWFwX3NlcV9sb29rdXBfZWxlbShzdHJ1Y3Qgc29ja19tYXBfc2VxX2luZm8gKmluZm8pXFxubmV0L2NvcmUvc29ja19tYXAuYy03MjIte1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy03MjUtXFxubmV0L2NvcmUvc29ja19tYXAuYzo3MjY6XFx0aW5mby1cXHUwMDNlc2sgPSBfX3NvY2tfbWFwX2xvb2t1cF9lbGVtKGluZm8tXFx1MDAzZW1hcCwgaW5mby1cXHUwMDNlaW5kZXgpO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzI3LVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy03MzEtXFxubmV0L2NvcmUvc29ja19tYXAuYzo3MzI6c3RhdGljIHZvaWQgKnNvY2tfbWFwX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpXFxubmV0L2NvcmUvc29ja19tYXAuYy03MzMtXFx0X19hY3F1aXJlcyhyY3UpXFxubmV0L2NvcmUvc29ja19tYXAuYy03MzQte1xcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NzM1OlxcdHN0cnVjdCBzb2NrX21hcF9zZXFfaW5mbyAqaW5mbyA9IHNlcS1cXHUwMDNlcHJpdmF0ZTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTczNi1cXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzM5LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NzQwOlxcdC8qIHBhaXJzIHdpdGggc29ja19tYXBfc2VxX3N0b3AgKi9cXG5uZXQvY29yZS9zb2NrX21hcC5jLTc0MS1cXHRyY3VfcmVhZF9sb2NrKCk7XFxubmV0L2NvcmUvc29ja19tYXAuYzo3NDI6XFx0cmV0dXJuIHNvY2tfbWFwX3NlcV9sb29rdXBfZWxlbShpbmZvKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTc0My19XFxubmV0L2NvcmUvc29ja19tYXAuYy03NDQtXFxubmV0L2NvcmUvc29ja19tYXAuYzo3NDU6c3RhdGljIHZvaWQgKnNvY2tfbWFwX3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBsb2ZmX3QgKnBvcylcXG5uZXQvY29yZS9zb2NrX21hcC5jLTc0Ni1cXHRfX211c3RfaG9sZChyY3UpXFxubmV0L2NvcmUvc29ja19tYXAuYy03NDcte1xcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NzQ4OlxcdHN0cnVjdCBzb2NrX21hcF9zZXFfaW5mbyAqaW5mbyA9IHNlcS1cXHUwMDNlcHJpdmF0ZTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTc0OS1cXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzUyLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NzUzOlxcdHJldHVybiBzb2NrX21hcF9zZXFfbG9va3VwX2VsZW0oaW5mbyk7XFxubmV0L2NvcmUvc29ja19tYXAuYy03NTQtfVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzU1LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NzU2OnN0YXRpYyBpbnQgc29ja19tYXBfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxubmV0L2NvcmUvc29ja19tYXAuYy03NTctXFx0X19tdXN0X2hvbGQocmN1KVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzU4LXtcXG5uZXQvY29yZS9zb2NrX21hcC5jOjc1OTpcXHRzdHJ1Y3Qgc29ja19tYXBfc2VxX2luZm8gKmluZm8gPSBzZXEtXFx1MDAzZXByaXZhdGU7XFxubmV0L2NvcmUvc29ja19tYXAuYy03NjAtXFx0c3RydWN0IGJwZl9pdGVyX19zb2NrbWFwIGN0eCA9IHt9O1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy03NzgtXFxubmV0L2NvcmUvc29ja19tYXAuYzo3Nzk6c3RhdGljIHZvaWQgc29ja19tYXBfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxubmV0L2NvcmUvc29ja19tYXAuYy03ODAtXFx0X19yZWxlYXNlcyhyY3UpXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTc4Mi1cXHRpZiAoIXYpXFxubmV0L2NvcmUvc29ja19tYXAuYzo3ODM6XFx0XFx0KHZvaWQpc29ja19tYXBfc2VxX3Nob3coc2VxLCBOVUxMKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTc4NC1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjc4NTpcXHQvKiBwYWlycyB3aXRoIHNvY2tfbWFwX3NlcV9zdGFydCAqL1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzg2LVxcdHJjdV9yZWFkX3VubG9jaygpO1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy03ODgtXFxubmV0L2NvcmUvc29ja19tYXAuYzo3ODk6c3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBzb2NrX21hcF9zZXFfb3BzID0ge1xcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NzkwOlxcdC5zdGFydFxcdD0gc29ja19tYXBfc2VxX3N0YXJ0LFxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NzkxOlxcdC5uZXh0XFx0PSBzb2NrX21hcF9zZXFfbmV4dCxcXG5uZXQvY29yZS9zb2NrX21hcC5jOjc5MjpcXHQuc3RvcFxcdD0gc29ja19tYXBfc2VxX3N0b3AsXFxubmV0L2NvcmUvc29ja19tYXAuYzo3OTM6XFx0LnNob3dcXHQ9IHNvY2tfbWFwX3NlcV9zaG93LFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzk0LX07XFxubmV0L2NvcmUvc29ja19tYXAuYy03OTUtXFxubmV0L2NvcmUvc29ja19tYXAuYzo3OTY6c3RhdGljIGludCBzb2NrX21hcF9pbml0X3NlcV9wcml2YXRlKHZvaWQgKnByaXZfZGF0YSxcXG5uZXQvY29yZS9zb2NrX21hcC5jLTc5Ny1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBicGZfaXRlcl9hdXhfaW5mbyAqYXV4KVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzk4LXtcXG5uZXQvY29yZS9zb2NrX21hcC5jOjc5OTpcXHRzdHJ1Y3Qgc29ja19tYXBfc2VxX2luZm8gKmluZm8gPSBwcml2X2RhdGE7XFxubmV0L2NvcmUvc29ja19tYXAuYy04MDAtXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTgwNS1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjgwNjpzdGF0aWMgdm9pZCBzb2NrX21hcF9maW5pX3NlcV9wcml2YXRlKHZvaWQgKnByaXZfZGF0YSlcXG5uZXQvY29yZS9zb2NrX21hcC5jLTgwNy17XFxubmV0L2NvcmUvc29ja19tYXAuYzo4MDg6XFx0c3RydWN0IHNvY2tfbWFwX3NlcV9pbmZvICppbmZvID0gcHJpdl9kYXRhO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODA5LVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy04MTItXFxubmV0L2NvcmUvc29ja19tYXAuYzo4MTM6c3RhdGljIHU2NCBzb2NrX21hcF9tZW1fdXNhZ2UoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcClcXG5uZXQvY29yZS9zb2NrX21hcC5jLTgxNC17XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTgyMC1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjgyMTpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9pdGVyX3NlcV9pbmZvIHNvY2tfbWFwX2l0ZXJfc2VxX2luZm8gPSB7XFxubmV0L2NvcmUvc29ja19tYXAuYzo4MjI6XFx0LnNlcV9vcHNcXHRcXHQ9IFxcdTAwMjZzb2NrX21hcF9zZXFfb3BzLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODIzOlxcdC5pbml0X3NlcV9wcml2YXRlXFx0PSBzb2NrX21hcF9pbml0X3NlcV9wcml2YXRlLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODI0OlxcdC5maW5pX3NlcV9wcml2YXRlXFx0PSBzb2NrX21hcF9maW5pX3NlcV9wcml2YXRlLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODI1OlxcdC5zZXFfcHJpdl9zaXplXFx0XFx0PSBzaXplb2Yoc3RydWN0IHNvY2tfbWFwX3NlcV9pbmZvKSxcXG5uZXQvY29yZS9zb2NrX21hcC5jLTgyNi19O1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODI3LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODI4OkJURl9JRF9MSVNUX1NJTkdMRShzb2NrX21hcF9idGZfaWRzLCBzdHJ1Y3QsIGJwZl9zdGFiKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODI5OmNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBzb2NrX21hcF9vcHMgPSB7XFxubmV0L2NvcmUvc29ja19tYXAuYy04MzAtXFx0Lm1hcF9tZXRhX2VxdWFsXFx0XFx0PSBicGZfbWFwX21ldGFfZXF1YWwsXFxubmV0L2NvcmUvc29ja19tYXAuYzo4MzE6XFx0Lm1hcF9hbGxvY1xcdFxcdD0gc29ja19tYXBfYWxsb2MsXFxubmV0L2NvcmUvc29ja19tYXAuYzo4MzI6XFx0Lm1hcF9mcmVlXFx0XFx0PSBzb2NrX21hcF9mcmVlLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODMzOlxcdC5tYXBfZ2V0X25leHRfa2V5XFx0PSBzb2NrX21hcF9nZXRfbmV4dF9rZXksXFxubmV0L2NvcmUvc29ja19tYXAuYzo4MzQ6XFx0Lm1hcF9sb29rdXBfZWxlbV9zeXNfb25seSA9IHNvY2tfbWFwX2xvb2t1cF9zeXMsXFxubmV0L2NvcmUvc29ja19tYXAuYzo4MzU6XFx0Lm1hcF91cGRhdGVfZWxlbVxcdD0gc29ja19tYXBfdXBkYXRlX2VsZW0sXFxubmV0L2NvcmUvc29ja19tYXAuYzo4MzY6XFx0Lm1hcF9kZWxldGVfZWxlbVxcdD0gc29ja19tYXBfZGVsZXRlX2VsZW0sXFxubmV0L2NvcmUvc29ja19tYXAuYzo4Mzc6XFx0Lm1hcF9sb29rdXBfZWxlbVxcdD0gc29ja19tYXBfbG9va3VwLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODM4OlxcdC5tYXBfcmVsZWFzZV91cmVmXFx0PSBzb2NrX21hcF9yZWxlYXNlX3Byb2dzLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODM5LVxcdC5tYXBfY2hlY2tfYnRmXFx0XFx0PSBtYXBfY2hlY2tfbm9fYnRmLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODQwOlxcdC5tYXBfbWVtX3VzYWdlXFx0XFx0PSBzb2NrX21hcF9tZW1fdXNhZ2UsXFxubmV0L2NvcmUvc29ja19tYXAuYzo4NDE6XFx0Lm1hcF9idGZfaWRcXHRcXHQ9IFxcdTAwMjZzb2NrX21hcF9idGZfaWRzWzBdLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODQyOlxcdC5pdGVyX3NlcV9pbmZvXFx0XFx0PSBcXHUwMDI2c29ja19tYXBfaXRlcl9zZXFfaW5mbyxcXG5uZXQvY29yZS9zb2NrX21hcC5jLTg0My19O1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz05MTY9c3RhdGljIHZvaWQgc29ja19oYXNoX2RlbGV0ZV9mcm9tX2xpbmsoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy05MzQtXFx0XFx0aGxpc3RfZGVsX3JjdShcXHUwMDI2ZWxlbS1cXHUwMDNlbm9kZSk7XFxubmV0L2NvcmUvc29ja19tYXAuYzo5MzU6XFx0XFx0c29ja19tYXBfdW5yZWYoZWxlbS1cXHUwMDNlc2ssIGVsZW0pO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtOTM2LVxcdFxcdHNvY2tfaGFzaF9mcmVlX2VsZW0oaHRhYiwgZWxlbSk7XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jPTk0MT1zdGF0aWMgbG9uZyBzb2NrX2hhc2hfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy05NTUtXFx0XFx0aGxpc3RfZGVsX3JjdShcXHUwMDI2ZWxlbS1cXHUwMDNlbm9kZSk7XFxubmV0L2NvcmUvc29ja19tYXAuYzo5NTY6XFx0XFx0c29ja19tYXBfdW5yZWYoZWxlbS1cXHUwMDNlc2ssIGVsZW0pO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtOTU3LVxcdFxcdHNvY2tfaGFzaF9mcmVlX2VsZW0oaHRhYiwgZWxlbSk7XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jPTk5MT1zdGF0aWMgaW50IHNvY2tfaGFzaF91cGRhdGVfY29tbW9uKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTAwOS1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjEwMTA6XFx0cmV0ID0gc29ja19tYXBfbGluayhtYXAsIHNrKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTEwMTEtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTEwMzUtXFxubmV0L2NvcmUvc29ja19tYXAuYzoxMDM2OlxcdHNvY2tfbWFwX2FkZF9saW5rKHBzb2NrLCBsaW5rLCBtYXAsIGVsZW1fbmV3KTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTEwMzctXFx0LyogQWRkIG5ldyBlbGVtZW50IHRvIHRoZSBoZWFkIG9mIHRoZSBsaXN0LCBzbyB0aGF0XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTEwNDItXFx0XFx0aGxpc3RfZGVsX3JjdShcXHUwMDI2ZWxlbS1cXHUwMDNlbm9kZSk7XFxubmV0L2NvcmUvc29ja19tYXAuYzoxMDQzOlxcdFxcdHNvY2tfbWFwX3VucmVmKGVsZW0tXFx1MDAzZXNrLCBlbGVtKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTEwNDQtXFx0XFx0c29ja19oYXNoX2ZyZWVfZWxlbShodGFiLCBlbGVtKTtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9MTE0ND1zdGF0aWMgdm9pZCBzb2NrX2hhc2hfZnJlZShzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xMTgwLVxcdFxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jOjExODE6XFx0XFx0XFx0c29ja19tYXBfdW5yZWYoZWxlbS1cXHUwMDNlc2ssIGVsZW0pO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTE4Mi1cXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9MTIyOT1CUEZfQ0FMTF80KGJwZl9zb2NrX2hhc2hfdXBkYXRlLCBzdHJ1Y3QgYnBmX3NvY2tfb3BzX2tlcm4gKiwgc29wcyxcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTIzMy1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjEyMzQ6XFx0aWYgKGxpa2VseShzb2NrX21hcF9za19pc19zdWl0YWJsZShzb3BzLVxcdTAwM2VzaykgXFx1MDAyNlxcdTAwMjZcXG5uZXQvY29yZS9zb2NrX21hcC5jOjEyMzU6XFx0XFx0ICAgc29ja19tYXBfb3Bfb2theShzb3BzKSkpXFxubmV0L2NvcmUvc29ja19tYXAuYy0xMjM2LVxcdFxcdHJldHVybiBzb2NrX2hhc2hfdXBkYXRlX2NvbW1vbihtYXAsIGtleSwgc29wcy1cXHUwMDNlc2ssIGZsYWdzKTtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9MTI1MT1CUEZfQ0FMTF80KGJwZl9za19yZWRpcmVjdF9oYXNoLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTEyNTktXFx0c2sgPSBfX3NvY2tfaGFzaF9sb29rdXBfZWxlbShtYXAsIGtleSk7XFxubmV0L2NvcmUvc29ja19tYXAuYzoxMjYwOlxcdGlmICh1bmxpa2VseSghc2sgfHwgIXNvY2tfbWFwX3JlZGlyZWN0X2FsbG93ZWQoc2spKSlcXG5uZXQvY29yZS9zb2NrX21hcC5jLTEyNjEtXFx0XFx0cmV0dXJuIFNLX0RST1A7XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jPTEyNzk9QlBGX0NBTExfNChicGZfbXNnX3JlZGlyZWN0X2hhc2gsIHN0cnVjdCBza19tc2cgKiwgbXNnLFxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xMjg3LVxcdHNrID0gX19zb2NrX2hhc2hfbG9va3VwX2VsZW0obWFwLCBrZXkpO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTI4ODpcXHRpZiAodW5saWtlbHkoIXNrIHx8ICFzb2NrX21hcF9yZWRpcmVjdF9hbGxvd2VkKHNrKSkpXFxubmV0L2NvcmUvc29ja19tYXAuYy0xMjg5LVxcdFxcdHJldHVybiBTS19EUk9QO1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz0xNDQ1PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBzb2NrX2hhc2hfb3BzID0ge1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNDQ5LVxcdC5tYXBfZ2V0X25leHRfa2V5XFx0PSBzb2NrX2hhc2hfZ2V0X25leHRfa2V5LFxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTQ1MDpcXHQubWFwX3VwZGF0ZV9lbGVtXFx0PSBzb2NrX21hcF91cGRhdGVfZWxlbSxcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE0NTEtXFx0Lm1hcF9kZWxldGVfZWxlbVxcdD0gc29ja19oYXNoX2RlbGV0ZV9lbGVtLFxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNDYwLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTQ2MTpzdGF0aWMgc3RydWN0IHNrX3Bzb2NrX3Byb2dzICpzb2NrX21hcF9wcm9ncyhzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTQ2Mi17XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTE0NzQtXFxubmV0L2NvcmUvc29ja19tYXAuYzoxNDc1OnN0YXRpYyBpbnQgc29ja19tYXBfcHJvZ19saW5rX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX3Byb2cgKioqcHByb2csXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNDc2LVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGJwZl9saW5rICoqKnBsaW5rLCB1MzIgd2hpY2gpXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNDc3LXtcXG5uZXQvY29yZS9zb2NrX21hcC5jOjE0Nzg6XFx0c3RydWN0IHNrX3Bzb2NrX3Byb2dzICpwcm9ncyA9IHNvY2tfbWFwX3Byb2dzKG1hcCk7XFxubmV0L2NvcmUvc29ja19tYXAuYy0xNDc5LVxcdHN0cnVjdCBicGZfcHJvZyAqKmN1cl9wcHJvZztcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTUyMy0gKi9cXG5uZXQvY29yZS9zb2NrX21hcC5jOjE1MjQ6c3RhdGljIGludCBzb2NrX21hcF9wcm9nX3VwZGF0ZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNTI1LVxcdFxcdFxcdFxcdHN0cnVjdCBicGZfcHJvZyAqb2xkLCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTE1MzEtXFxubmV0L2NvcmUvc29ja19tYXAuYzoxNTMyOlxcdHJldCA9IHNvY2tfbWFwX3Byb2dfbGlua19sb29rdXAobWFwLCBcXHUwMDI2cHByb2csIFxcdTAwMjZwbGluaywgd2hpY2gpO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTUzMy1cXHRpZiAocmV0KVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNTU0LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTU1NTppbnQgc29ja19tYXBfYnBmX3Byb2dfcXVlcnkoY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNTU2LVxcdFxcdFxcdCAgICB1bmlvbiBicGZfYXR0ciBfX3VzZXIgKnVhdHRyKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNTc1LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTU3NjpcXHRyZXQgPSBzb2NrX21hcF9wcm9nX2xpbmtfbG9va3VwKG1hcCwgXFx1MDAyNnBwcm9nLCBOVUxMLCBhdHRyLVxcdTAwM2VxdWVyeS5hdHRhY2hfdHlwZSk7XFxubmV0L2NvcmUvc29ja19tYXAuYy0xNTc3LVxcdGlmIChyZXQpXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTE2MDMtXFxubmV0L2NvcmUvc29ja19tYXAuYzoxNjA0OnN0YXRpYyB2b2lkIHNvY2tfbWFwX3VubGluayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29ja19saW5rICpsaW5rKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTYwNS17XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTE2MDctXFx0Y2FzZSBCUEZfTUFQX1RZUEVfU09DS01BUDpcXG5uZXQvY29yZS9zb2NrX21hcC5jOjE2MDg6XFx0XFx0cmV0dXJuIHNvY2tfbWFwX2RlbGV0ZV9mcm9tX2xpbmsobGluay1cXHUwMDNlbWFwLCBzayxcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE2MDktXFx0XFx0XFx0XFx0XFx0XFx0IGxpbmstXFx1MDAzZWxpbmtfcmF3KTtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTYxNy1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjE2MTg6c3RhdGljIHZvaWQgc29ja19tYXBfcmVtb3ZlX2xpbmtzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaylcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE2MTkte1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNjIyLVxcdHdoaWxlICgobGluayA9IHNrX3Bzb2NrX2xpbmtfcG9wKHBzb2NrKSkpIHtcXG5uZXQvY29yZS9zb2NrX21hcC5jOjE2MjM6XFx0XFx0c29ja19tYXBfdW5saW5rKHNrLCBsaW5rKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE2MjQtXFx0XFx0c2tfcHNvY2tfZnJlZV9saW5rKGxpbmspO1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNjI3LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTYyODp2b2lkIHNvY2tfbWFwX3VuaGFzaChzdHJ1Y3Qgc29jayAqc2spXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNjI5LXtcXG4tLVxcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQyMzowNjoxNC4xMDg2MDY5MDVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg0NTc4MzY1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNvY2ttYXAgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBzb2NrbWFwIHRoaW5nLiBUaGUgZG9jdW1lbnRhdGlvbiBzdGF0ZXMgdGhhdCBgQ09ORklHX0JQRl9TWVNDQUxMYCBlbmFibGVzIGl0LiBSaWdodCwgbWFrZXMgc2Vuc2UsIHRoYXQncyB3aGF0IEknZCBleHBlY3QuIE5vdywgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoYXQgaW4gdGhlIGtlcm5lbCBzb3VyY2UuIEFoLCBoZXJlIHdlIGFyZSBpbiBgbmV0L2NvcmUvTWFrZWZpbGVgLiBBbmQgaXQgY29uZmlybXM6IGBvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHNvY2tfbWFwLm9gLiBTbywgeWVhaCwgaXQgKmlzKiBqdXN0IGBDT05GSUdfQlBGX1NZU0NBTExgIHRoYXQgYWN0aXZhdGVzIHRoZSBzb2NrbWFwIG9iamVjdC4gSG1tLCBidXQgd2FpdC4gVGhpbmtpbmcgYSBiaXQgbW9yZSBkZWVwbHkgYWJvdXQgdGhpcywgc2luY2UgYHNvY2tfbWFwLm9gIGlzIGxvY2F0ZWQgaW4gdGhlIGBuZXQvY29yZS9gIGRpcmVjdG9yeSwgSSBiZXQgd2UgbmVlZCBgQ09ORklHX05FVGAgdG9vLCBldmVuIHRob3VnaCBpdCdzIG5vdCBleHBsaWNpdGx5IG1lbnRpb25lZC4gTGV0J3MganVzdCBjb25maXJtIHRoYXQgYnkgdGFraW5nIGEgcXVpY2sgbG9vayBhdCBgbmV0L2NvcmUvTWFrZWZpbGVgIGFnYWluLiBHb29kIHByYWN0aWNlIHRvIGJlIHRob3JvdWdoIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMTIwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDIzOjA2OjE3Ljk1NDM5NDM3N1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjkxNTA5MzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0JQRl9TWVNDQUxMXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9NYWtlZmlsZT00ND1vYmotJChDT05GSUdfTkVUX1NPQ0tfTVNHKSArPSBza21zZy5vXFxubmV0L2NvcmUvTWFrZWZpbGU6NDU6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBzb2NrX21hcC5vXFxubmV0L2NvcmUvTWFrZWZpbGU6NDY6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBicGZfc2tfc3RvcmFnZS5vXFxubmV0L2NvcmUvTWFrZWZpbGUtNDctb2JqLSQoQ09ORklHX09GKVxcdCs9IG9mX25ldC5vXFxuLS1cXG5uZXQvY29yZS9kZXYuaD0zODE9aW50IHJwc19jcHVtYXNrX2hvdXNla2VlcGluZyhzdHJ1Y3QgY3B1bWFzayAqbWFzayk7XFxubmV0L2NvcmUvZGV2LmgtMzgyLVxcbm5ldC9jb3JlL2Rldi5oOjM4MzojaWYgZGVmaW5lZChDT05GSUdfREVCVUdfTkVUKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19CUEZfU1lTQ0FMTClcXG5uZXQvY29yZS9kZXYuaC0zODQtdm9pZCB4ZHBfZG9fY2hlY2tfZmx1c2hlZChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NDQ0MT1FWFBPUlRfU1lNQk9MX0dQTCh4ZHBfZG9fZmx1c2gpO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTQ0NDItXFxubmV0L2NvcmUvZmlsdGVyLmM6NDQ0MzojaWYgZGVmaW5lZChDT05GSUdfREVCVUdfTkVUKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19CUEZfU1lTQ0FMTClcXG5uZXQvY29yZS9maWx0ZXIuYy00NDQ0LXZvaWQgeGRwX2RvX2NoZWNrX2ZsdXNoZWQoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKVxcbi0tXFxubmV0L2NvcmUvZmxvd19kaXNzZWN0b3IuYz03ND1FWFBPUlRfU1lNQk9MKHNrYl9mbG93X2Rpc3NlY3Rvcl9pbml0KTtcXG5uZXQvY29yZS9mbG93X2Rpc3NlY3Rvci5jLTc1LVxcbm5ldC9jb3JlL2Zsb3dfZGlzc2VjdG9yLmM6NzY6I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbm5ldC9jb3JlL2Zsb3dfZGlzc2VjdG9yLmMtNzctaW50IGZsb3dfZGlzc2VjdG9yX2JwZl9wcm9nX2F0dGFjaF9jaGVjayhzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvY29yZS9mbG93X2Rpc3NlY3Rvci5jLTEwNS19XFxubmV0L2NvcmUvZmxvd19kaXNzZWN0b3IuYzoxMDY6I2VuZGlmIC8qIENPTkZJR19CUEZfU1lTQ0FMTCAqL1xcbm5ldC9jb3JlL2Zsb3dfZGlzc2VjdG9yLmMtMTA3LVxcbi0tXFxubmV0L2NvcmUvc29jay5jPTIzNTA9c3RhdGljIHZvaWQgX19za19kZXN0cnVjdChzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXFxuLS1cXG5uZXQvY29yZS9zb2NrLmMtMjM2Ny1cXG5uZXQvY29yZS9zb2NrLmM6MjM2ODojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxubmV0L2NvcmUvc29jay5jLTIzNjktXFx0YnBmX3NrX3N0b3JhZ2VfZnJlZShzayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDIzOjA2OjE4LjAyMzU1MjgxMVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTk5NDk2MDIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgc28gSSd2ZSBnb3QgYSBjb3VwbGUgb2Yga2V5IGRlcGVuZGVuY2llcyBpZGVudGlmaWVkIHJpZ2h0IG9mZiB0aGUgYmF0OiBgQ09ORklHX0JQRl9TWVNDQUxMYCBhbmQgYENPTkZJR19ORVRgLiBUaGF0IGZlZWxzIHJpZ2h0LCBidXQgbGV0J3Mgbm90IG1ha2UgYW55IGFzc3VtcHRpb25zLiBJIG5lZWQgdG8gZXhwbGljaXRseSB2ZXJpZnkgdGhhdCBgQ09ORklHX05FVGAgaXMgaW5kZWVkIGEgaGFyZCByZXF1aXJlbWVudCBmb3IgdGhlIGBzb2NrX21hcC5vYCBvYmplY3QuXG5cbkEgcXVpY2sgY3Jvc3MtcmVmZXJlbmNlIHdvdWxkIGJlIGluIG9yZGVyLiBBaCwgeWVzLCBsb29raW5nIGF0IHRoZSBidWlsZCBwcm9jZXNzLCBpdCdzIGNsZWFyIHRoYXQgdGhlIGBuZXQvY29yZS9gIGRpcmVjdG9yeSBnZXRzIGJ1aWx0IG9ubHkgd2hlbiBgQ09ORklHX05FVGAgaXMgZW5hYmxlZC4gVGhhdCBjb25maXJtcyBteSBpbml0aWFsIGludHVpdGlvbi4gTm93LCB0byBiZSB0aG9yb3VnaCwgSSBzaG91bGQgcmVhbGx5IGdsYW5jZSBhdCBgbmV0L01ha2VmaWxlYCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSB0aGVyZSBhcmVuJ3QgYW55IHNuZWFreSBjb25kaXRpb25hbCBpbmNsdXNpb25zIG9yIGJpemFycmUgYnVpbGQgcnVsZXMgSSdtIG1pc3NpbmcuIEFsd2F5cyBnb29kIHRvIGRvdWJsZS1jaGVjayB0aG9zZSBNYWtlZmlsZSBkZXBlbmRlbmNpZXMsIGp1c3QgdG8gYmUgc2FmZS4gSXQncyB0aGUgZGV2aWwgaW4gdGhlIGRldGFpbHMsIGFmdGVyIGFsbCFcblxuXG4iLCJJbnB1dFRva2VucyI6MjIwNzEsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQyMzowNjoyMS42MjMwNTIwMTNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyNjcyOTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvcmUvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvTWFrZWZpbGUtOC1cXG5uZXQvTWFrZWZpbGU6OTpvYmoteVxcdFxcdFxcdFxcdDo9IGRldnJlcy5vIHNvY2tldC5vIGNvcmUvXFxubmV0L01ha2VmaWxlLTEwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQyMzowNjoyMS42ODU3MzQ0NzdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI0NDA0MDczODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEJQRiBWZXJpZmllciBSZXN0cmljdGlvbnMgZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gZm9yIGZ1enppbmcuIFdlJ3JlIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHJlc3RyaWN0cyBzb2NrbWFwIHVwZGF0ZXMgd2l0aGluIHRoZSBCUEYgdmVyaWZpZXIuIFRoZSBjb3JlIGlkZWEgaXMgdGhhdCBjZXJ0YWluIEJQRiBwcm9ncmFtIHR5cGVzIGFyZSBubyBsb25nZXIgYWxsb3dlZCB0byBtb2RpZnkgc29ja21hcHMuIFRoaXMgaXMgYSBjcnVjaWFsIGNoYW5nZSBpbiB0aGUgdmVyaWZpZXIncyBiZWhhdmlvci4gU28gdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBlc3RhYmxpc2ggaXMgdGhlIGNvbmZpZ3VyYXRpb24gYW5kIGZvY3VzIHN5bWJvbHMgZm9yIGZ1enppbmcgdGhpcyBwYXRjaC5cblxuUmlnaHQsIHRoZSBiYXNlIGNvbmZpZ3VyYXRpb24gaXMgZGV0ZXJtaW5lZCBieSBgQ09ORklHX05FVGAgYmVjYXVzZSB0aGUgYG5ldC9gIGRpcmVjdG9yeSBpcyBidWlsdCB3aGVuIGBDT05GSUdfTkVUYCBpcyBlbmFibGVkLiBBbmQsIG9mIGNvdXJzZSwgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgZXNzZW50aWFsLCBzaW5jZSBpdCdzIGEgQlBGLXJlbGF0ZWQgY2hhbmdlLiBTbyB0aG9zZSBhcmUgbXkgaW5pdGlhbCBjb25maWcgYXNzdW1wdGlvbnM6IGBDT05GSUdfTkVUYCBhbmQgYENPTkZJR19CUEZfU1lTQ0FMTGAuXG5cbk5vdywgbGV0J3MgaWRlbnRpZnkgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyB0aGlzIHBhdGNoIHRvdWNoZXMgZGlyZWN0bHkuIEZyb20gdGhlIGNvZGUsIHRoZSBrZXkgc3ltYm9scyBoZXJlIHNlZW0gdG8gYmUgYG1heV91cGRhdGVfc29ja21hcGAgYW5kIGBjaGVja19tYXBfZnVuY19jb21wYXRpYmlsaXR5YC4gV2FpdCwgYG1heV91cGRhdGVfc29ja21hcGAgaXMgc3RhdGljLCB3aGljaCBpcyB1c3VhbGx5IG9rYXkgd2l0aCBmdXp6aW5nIHRvb2xzLiBUaGUgY2hlY2sgaXMgY2FsbGVkIGJ5IGBjaGVja19tYXBfZnVuY19jb21wYXRpYmlsaXR5YCB3aGljaCBpbiB0dXJuIGlzIGNhbGxlZCBieSBgY2hlY2tfaGVscGVyX2NhbGxgIHdoaWNoIGlzIGNhbGxlZCBieSBgZG9fY2hlY2tgLiBUaGlzIG1ha2VzIGl0IHJlYWNoYWJsZS4gU28gdGhhdCBjb25maXJtcyB0aG9zZSBhcyB2YWxpZCBmb2N1cyBzeW1ib2xzLlxuXG5JIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcsIGxpa2UgYSBkZXBlbmRlbmN5IG9uIGBDT05GSUdfQ0dST1VQX0JQRmAsIGJ1dCBpdCBsb29rcyBsaWtlIHRoZSBtb2RpZmljYXRpb24gaXMgcmVzdHJpY3RlZCB0byB0aGUgdmVyaWZpZXIgaXRzZWxmIHdoaWNoIGlzIGFsd2F5cyBidWlsdCBpZiBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBlbmFibGVkLiBUaGUgcGF0Y2ggYWZmZWN0cyBgQlBGX1BST0dfVFlQRV9TT0NLRVRfRklMVEVSYCwgYEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTYCwgYEJQRl9QUk9HX1RZUEVfU0NIRURfQUNUYCwgYEJQRl9QUk9HX1RZUEVfWERQYCwgYW5kIGBCUEZfUFJPR19UWVBFX0ZMT1dfRElTU0VDVE9SYC5cblxuYEJQRl9QUk9HX1RZUEVfU09DS0VUX0ZJTFRFUmAgZGVwZW5kcyBvbiBgQ09ORklHX05FVGAuIGBCUEZfUFJPR19UWVBFX1NDSEVEX0NMU2AgYW5kIGBCUEZfUFJPR19UWVBFX1NDSEVEX0FDVGAgZGVwZW5kIG9uIGBDT05GSUdfTkVUX1NDSEVEYC4gYEJQRl9QUk9HX1RZUEVfWERQYCBhbmQgYEJQRl9QUk9HX1RZUEVfRkxPV19ESVNTRUNUT1JgIGFsc28gZGVwZW5kIG9uIGBDT05GSUdfTkVUYC5cblxuU28gZGVmaW5pdGVseSBgQ09ORklHX05FVGAgYW5kIGBDT05GSUdfQlBGX1NZU0NBTExgIGFyZSBuZWVkZWQuXG5cbmBDT05GSUdfTkVUX1NDSEVEYCBpc24ndCBzdHJpY3RseSBuZWNlc3NhcnkgZm9yIGNvbXBpbGF0aW9uIGJ1dCBkb2VzIGFsbG93IHRlc3RpbmcgYFNDSEVEX0NMU2AgYW5kIGBTQ0hFRF9BQ1RgLCBidXQgc2luY2UgdGhlIHZlcmlmaWVyIGNvZGUgZG9lc24ndCByZWx5IG9uIGl0LCBpdCBsb29rcyBsaWtlIGBDT05GSUdfQlBGX1NZU0NBTExgIGFuZCBgQ09ORklHX05FVGAgYXJlIHN1ZmZpY2llbnQuIFRoZSBgQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFNgIGFuZCBvdGhlciB0eXBlcyBhcmUgZGVmaW5lZCBpbiBgaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oYCBhbmQgdGhlIHZlcmlmaWVyIHdpbGwgdXNlIHRoYXQgaW5mb3JtYXRpb24uXG5cbkhlcmUncyB3aGF0IEkndmUgZ290OlxuXG4qICAgKipXb3J0aEZ1enppbmcqKjogYHRydWVgXG4qICAgKipGb2N1c1N5bWJvbHMqKjpcbiAgICAqICAgYG1heV91cGRhdGVfc29ja21hcGBcbiAgICAqICAgYGNoZWNrX21hcF9mdW5jX2NvbXBhdGliaWxpdHlgXG4qICAgKipFbmFibGVDb25maWdzKio6XG4gICAgKiAgIGBCUEZfU1lTQ0FMTGBcbiAgICAqICAgYE5FVGBcblxuQ29uZmlybWluZyBgbWF5X3VwZGF0ZV9zb2NrbWFwYCBhbmQgYGNoZWNrX21hcF9mdW5jX2NvbXBhdGliaWxpdHlgIGFyZSBzdGF0aWMsIGFuZCB0aGF0IHN5emthbGxlciBjYW4gaGFuZGxlIHRoaXMuIEFsc28sIHJldmlld2luZyBjaGFuZ2VzIHRvIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvKmAgd2hpY2ggYXJlIGp1c3Qgc2VsZnRlc3RzLlxuXG5UaGlzIHBhdGNoIGlzIGNoYW5naW5nIHRoZSB2ZXJpZmllciwgc28gaXQgcmVxdWlyZXMgZnV6emluZy4gVGhlIGNvbmZpZ3VyYXRpb24gYW5kIGZvY3VzIHN5bWJvbHMgYXJlIHdoYXQgSSBuZWVkIHRvIHRhcmdldCBmb3IgZnV6emluZy4gSSBjYW4gY2FsbCBzZXQtcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI0MjMsIk91dHB1dFRva2VucyI6MTMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAwMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQyMzowNjozNC4xMjYxNTA0NjlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDAwMjU3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1heV91cGRhdGVfc29ja21hcFwiLFxuICAgIFwiY2hlY2tfbWFwX2Z1bmNfY29tcGF0aWJpbGl0eVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlc3RyaWN0cyBjZXJ0YWluIEJQRiBwcm9ncmFtIHR5cGVzIGZyb20gdXBkYXRpbmcgc29ja21hcHMgaW4gdGhlIEJQRiB2ZXJpZmllci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiB2ZXJpZmllciBsb2dpYyB0aGF0IGFmZmVjdHMgd2hhdCBCUEYgcHJvZ3JhbXMgYXJlIGFsbG93ZWQgdG8gZG8uIEl0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSB2ZXJpZmllciBjb3JyZWN0bHkgcmVqZWN0cyBpbnZhbGlkIHByb2dyYW1zIGFuZCBkb2Vzbid0IGludHJvZHVjZSBhbnkgcmVncmVzc2lvbnMgb3IgYnlwYXNzZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1heV91cGRhdGVfc29ja21hcFwiLFxuICAgIFwiY2hlY2tfbWFwX2Z1bmNfY29tcGF0aWJpbGl0eVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlc3RyaWN0cyBjZXJ0YWluIEJQRiBwcm9ncmFtIHR5cGVzIGZyb20gdXBkYXRpbmcgc29ja21hcHMgaW4gdGhlIEJQRiB2ZXJpZmllci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiB2ZXJpZmllciBsb2dpYyB0aGF0IGFmZmVjdHMgd2hhdCBCUEYgcHJvZ3JhbXMgYXJlIGFsbG93ZWQgdG8gZG8uIEl0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSB2ZXJpZmllciBjb3JyZWN0bHkgcmVqZWN0cyBpbnZhbGlkIHByb2dyYW1zIGFuZCBkb2Vzbid0IGludHJvZHVjZSBhbnkgcmVncmVzc2lvbnMgb3IgYnlwYXNzZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow5f7ds[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-30 22:54:24 +0000 UTC FinishedAt: 2026-06-30 23:06:36 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "53435562a725962e4de0c29653223129ba11643a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "NET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "53435562a725962e4de0c29653223129ba11643a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "NET" ], "series_id": "4e0fbfa5-90da-40a0-a8aa-27c07a338031" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "may_update_sockmap", "check_map_func_compatibility" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "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+CgkJCTx0ZD4yMDI2LzA2LzMwIDIzOjA1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21heV91cGRhdGVfc29ja21hcCYjMzQ7LAogICAgJiMzNDtjaGVja19tYXBfZnVuY19jb21wYXRpYmlsaXR5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlc3RyaWN0cyBjZXJ0YWluIEJQRiBwcm9ncmFtIHR5cGVzIGZyb20gdXBkYXRpbmcgc29ja21hcHMgaW4gdGhlIEJQRiB2ZXJpZmllci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiB2ZXJpZmllciBsb2dpYyB0aGF0IGFmZmVjdHMgd2hhdCBCUEYgcHJvZ3JhbXMgYXJlIGFsbG93ZWQgdG8gZG8uIEl0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSB2ZXJpZmllciBjb3JyZWN0bHkgcmVqZWN0cyBpbnZhbGlkIHByb2dyYW1zIGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHJlZ3Jlc3Npb25zIG9yIGJ5cGFzc2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDIzOjA1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZmM3ZGU3NmFkMWY1MTNlMDJlZGZlMmQwOTIyNmYwZGVlNzhlMDM5MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVuIDMwIDIzOjA1OjQ0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggMjVhZWE0MjcxY2QwODkuLjgzZWEzYjMzZmY2NzljIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbkBAIC04NDg4LDEyICYjNDM7ODQ4OCw3IEBAIHN0YXRpYyBib29sIG1heV91cGRhdGVfc29ja21hcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgZnVuY19pZClcbiBcdFx0aWYgKGZ1bmNfaWQgPT0gQlBGX0ZVTkNfbWFwX2RlbGV0ZV9lbGVtKVxuIFx0XHRcdHJldHVybiB0cnVlO1xuIFx0XHRicmVhaztcbi1cdGNhc2UgQlBGX1BST0dfVFlQRV9TT0NLRVRfRklMVEVSOlxuLVx0Y2FzZSBCUEZfUFJPR19UWVBFX1NDSEVEX0NMUzpcbi1cdGNhc2UgQlBGX1BST0dfVFlQRV9TQ0hFRF9BQ1Q6XG4tXHRjYXNlIEJQRl9QUk9HX1RZUEVfWERQOlxuIFx0Y2FzZSBCUEZfUFJPR19UWVBFX1NLX1JFVVNFUE9SVDpcbi1cdGNhc2UgQlBGX1BST0dfVFlQRV9GTE9XX0RJU1NFQ1RPUjpcbiBcdGNhc2UgQlBGX1BST0dfVFlQRV9TS19MT09LVVA6XG4gXHRcdHJldHVybiB0cnVlO1xuIFx0ZGVmYXVsdDpcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9mZXhpdF9icGYyYnBmLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9mZXhpdF9icGYyYnBmLmNcbmluZGV4IDkyYzIwODAzZWE3NjVkLi5kM2E5NTQxNThjMzMyNyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ZleGl0X2JwZjJicGYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZmV4aXRfYnBmMmJwZi5jXG5AQCAtMzM2LDE3ICYjNDM7MzM2LDYgQEAgc3RhdGljIHZvaWQgdGVzdF9mbW9kX3JldF9mcmVwbGFjZSh2b2lkKVxuIH1cbiBcbiBcbi1zdGF0aWMgdm9pZCB0ZXN0X2Z1bmNfc29ja21hcF91cGRhdGUodm9pZClcbi17XG4tXHRjb25zdCBjaGFyICpwcm9nX25hbWVbXSA9IHtcbi1cdFx0XCYjMzQ7ZnJlcGxhY2UvY2xzX3JlZGlyZWN0XCYjMzQ7LFxuLVx0fTtcbi1cdHRlc3RfZmV4aXRfYnBmMmJwZl9jb21tb24oXCYjMzQ7Li9mcmVwbGFjZV9jbHNfcmVkaXJlY3QuYnBmLm9cJiMzNDssXG4tXHRcdFx0XHQgIFwmIzM0Oy4vdGVzdF9jbHNfcmVkaXJlY3QuYnBmLm9cJiMzNDssXG4tXHRcdFx0XHQgIEFSUkFZX1NJWkUocHJvZ19uYW1lKSxcbi1cdFx0XHRcdCAgcHJvZ19uYW1lLCBmYWxzZSwgTlVMTCk7XG4tfVxuLVxuIHN0YXRpYyB2b2lkIHRlc3RfZnVuY19yZXBsYWNlX3ZvaWQodm9pZClcbiB7XG4gXHRjb25zdCBjaGFyICpwcm9nX25hbWVbXSA9IHtcbkBAIC01OTksOCAmIzQzOzU4OCw2IEBAIHZvaWQgc2VyaWFsX3Rlc3RfZmV4aXRfYnBmMmJwZih2b2lkKVxuIFx0XHR0ZXN0X2Z1bmNfcmVwbGFjZSgpO1xuIFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7ZnVuY19yZXBsYWNlX3ZlcmlmeVwmIzM0OykpXG4gXHRcdHRlc3RfZnVuY19yZXBsYWNlX3ZlcmlmeSgpO1xuLVx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7ZnVuY19zb2NrbWFwX3VwZGF0ZVwmIzM0OykpXG4tXHRcdHRlc3RfZnVuY19zb2NrbWFwX3VwZGF0ZSgpO1xuIFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7ZnVuY19yZXBsYWNlX3JldHVybl9jb2RlXCYjMzQ7KSlcbiBcdFx0dGVzdF9mdW5jX3JlcGxhY2VfcmV0dXJuX2NvZGUoKTtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O2Z1bmNfbWFwX3Byb2dfY29tcGF0aWJpbGl0eVwmIzM0OykpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9iYXNpYy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9iYXNpYy5jXG5pbmRleCBjYjMyMjk3MTFmOTNhMy4uMzNmNzg4ZTI3ODZkYWUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2Jhc2ljLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfYmFzaWMuY1xuQEAgLTcsNyAmIzQzOzcsNiBAQFxuIFxuICNpbmNsdWRlIFwmIzM0O3Rlc3RfcHJvZ3MuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3Rlc3Rfc2ttc2dfbG9hZF9oZWxwZXJzLnNrZWwuaFwmIzM0O1xuLSNpbmNsdWRlIFwmIzM0O3Rlc3Rfc29ja21hcF91cGRhdGUuc2tlbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7dGVzdF9zb2NrbWFwX2ludmFsaWRfdXBkYXRlLnNrZWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3Rlc3Rfc29ja21hcF9za2JfdmVyZGljdF9hdHRhY2guc2tlbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7dGVzdF9zb2NrbWFwX3Byb2dzX3F1ZXJ5LnNrZWwuaFwmIzM0O1xuQEAgLTIzNSw1MyAmIzQzOzIzNCw2IEBAIHN0YXRpYyB2b2lkIHRlc3Rfc2ttc2dfaGVscGVyc193aXRoX2xpbmsoZW51bSBicGZfbWFwX3R5cGUgbWFwX3R5cGUpXG4gXHR0ZXN0X3NrbXNnX2xvYWRfaGVscGVyc19fZGVzdHJveShza2VsKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgdGVzdF9zb2NrbWFwX3VwZGF0ZShlbnVtIGJwZl9tYXBfdHlwZSBtYXBfdHlwZSlcbi17XG4tXHRpbnQgZXJyLCBwcm9nLCBzcmM7XG4tXHRzdHJ1Y3QgdGVzdF9zb2NrbWFwX3VwZGF0ZSAqc2tlbDtcbi1cdHN0cnVjdCBicGZfbWFwICpkc3RfbWFwO1xuLVx0Y29uc3QgX191MzIgemVybyA9IDA7XG4tXHRjaGFyIGR1bW15WzE0XSA9IHswfTtcbi1cdExJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCB0b3B0cyxcbi1cdFx0LmRhdGFfaW4gPSBkdW1teSxcbi1cdFx0LmRhdGFfc2l6ZV9pbiA9IHNpemVvZihkdW1teSksXG4tXHRcdC5yZXBlYXQgPSAxLFxuLVx0KTtcbi1cdF9fczY0IHNrO1xuLVxuLVx0c2sgPSBjb25uZWN0ZWRfc29ja2V0X3Y0KCk7XG4tXHRpZiAoIUFTU0VSVF9ORVEoc2ssIC0xLCBcJiMzNDtjb25uZWN0ZWRfc29ja2V0X3Y0XCYjMzQ7KSlcbi1cdFx0cmV0dXJuO1xuLVxuLVx0c2tlbCA9IHRlc3Rfc29ja21hcF91cGRhdGVfX29wZW5fYW5kX2xvYWQoKTtcbi1cdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcJiMzNDtvcGVuX2FuZF9sb2FkXCYjMzQ7KSlcbi1cdFx0Z290byBjbG9zZV9zaztcbi1cbi1cdHByb2cgPSBicGZfcHJvZ3JhbV9fZmQoc2tlbC1cdTAwM2Vwcm9ncy5jb3B5X3NvY2tfbWFwKTtcbi1cdHNyYyA9IGJwZl9tYXBfX2ZkKHNrZWwtXHUwMDNlbWFwcy5zcmMpO1xuLVx0aWYgKG1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9TT0NLTUFQKVxuLVx0XHRkc3RfbWFwID0gc2tlbC1cdTAwM2VtYXBzLmRzdF9zb2NrX21hcDtcbi1cdGVsc2Vcbi1cdFx0ZHN0X21hcCA9IHNrZWwtXHUwMDNlbWFwcy5kc3Rfc29ja19oYXNoO1xuLVxuLVx0ZXJyID0gYnBmX21hcF91cGRhdGVfZWxlbShzcmMsIFx1MDAyNnplcm8sIFx1MDAyNnNrLCBCUEZfTk9FWElTVCk7XG4tXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O3VwZGF0ZV9lbGVtKHNyYylcJiMzNDspKVxuLVx0XHRnb3RvIG91dDtcbi1cbi1cdGVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMocHJvZywgXHUwMDI2dG9wdHMpO1xuLVx0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDt0ZXN0X3J1blwmIzM0OykpXG4tXHRcdGdvdG8gb3V0O1xuLVx0aWYgKCFBU1NFUlRfTkVRKHRvcHRzLnJldHZhbCwgMCwgXCYjMzQ7dGVzdF9ydW4gcmV0dmFsXCYjMzQ7KSlcbi1cdFx0Z290byBvdXQ7XG4tXG4tXHRjb21wYXJlX2Nvb2tpZXMoc2tlbC1cdTAwM2VtYXBzLnNyYywgZHN0X21hcCk7XG4tXG4tb3V0OlxuLVx0dGVzdF9zb2NrbWFwX3VwZGF0ZV9fZGVzdHJveShza2VsKTtcbi1jbG9zZV9zazpcbi1cdGNsb3NlKHNrKTtcbi19XG4tXG4gc3RhdGljIHZvaWQgdGVzdF9zb2NrbWFwX2ludmFsaWRfdXBkYXRlKHZvaWQpXG4ge1xuIFx0c3RydWN0IHRlc3Rfc29ja21hcF9pbnZhbGlkX3VwZGF0ZSAqc2tlbDtcbkBAIC0xMzg1LDEwICYjNDM7MTMzNyw2IEBAIHZvaWQgdGVzdF9zb2NrbWFwX2Jhc2ljKHZvaWQpXG4gXHRcdHRlc3Rfc2ttc2dfaGVscGVycyhCUEZfTUFQX1RZUEVfU09DS01BUCk7XG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDtzb2NraGFzaCBza19tc2cgbG9hZCBoZWxwZXJzXCYjMzQ7KSlcbiBcdFx0dGVzdF9za21zZ19oZWxwZXJzKEJQRl9NQVBfVFlQRV9TT0NLSEFTSCk7XG4tXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDtzb2NrbWFwIHVwZGF0ZVwmIzM0OykpXG4tXHRcdHRlc3Rfc29ja21hcF91cGRhdGUoQlBGX01BUF9UWVBFX1NPQ0tNQVApO1xuLVx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7c29ja2hhc2ggdXBkYXRlXCYjMzQ7KSlcbi1cdFx0dGVzdF9zb2NrbWFwX3VwZGF0ZShCUEZfTUFQX1RZUEVfU09DS0hBU0gpO1xuIFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7c29ja21hcCB1cGRhdGUgaW4gdW5zYWZlIGNvbnRleHRcJiMzNDspKVxuIFx0XHR0ZXN0X3NvY2ttYXBfaW52YWxpZF91cGRhdGUoKTtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O3NvY2ttYXAgY29weVwmIzM0OykpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ZyZXBsYWNlX2Nsc19yZWRpcmVjdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ZyZXBsYWNlX2Nsc19yZWRpcmVjdC5jXG5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDdlOTQ0MTJkNDdhNWNhLi4wMDAwMDAwMDAwMDAwMFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ZyZXBsYWNlX2Nsc19yZWRpcmVjdC5jXG4mIzQzOyYjNDM7JiM0MzsgL2Rldi9udWxsXG5AQCAtMSwzNCAmIzQzOzAsMCBAQFxuLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4tLy8gQ29weXJpZ2h0IChjKSAyMDIwIEZhY2Vib29rXG4tXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvc3RkZGVmLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9icGYuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3BrdF9jbHMuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2JwZi9icGZfZW5kaWFuLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuLVxuLXN0cnVjdCB7XG4tXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1NPQ0tNQVApO1xuLVx0X190eXBlKGtleSwgaW50KTtcbi1cdF9fdHlwZSh2YWx1ZSwgaW50KTtcbi1cdF9fdWludChtYXhfZW50cmllcywgMik7XG4tfSBzb2NrX21hcCBTRUMoXCYjMzQ7Lm1hcHNcJiMzNDspO1xuLVxuLVNFQyhcJiMzNDtmcmVwbGFjZS9jbHNfcmVkaXJlY3RcJiMzNDspXG4taW50IGZyZXBsYWNlX2Nsc19yZWRpcmVjdF90ZXN0KHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbi17XG4tXHRpbnQgcmV0ID0gMDtcbi1cdGNvbnN0IGludCB6ZXJvID0gMDtcbi1cdHN0cnVjdCBicGZfc29jayAqc2s7XG4tXG4tXHRzayA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2c29ja19tYXAsIFx1MDAyNnplcm8pO1xuLVx0aWYgKCFzaylcbi1cdFx0cmV0dXJuIFRDX0FDVF9TSE9UO1xuLVxuLVx0cmV0ID0gYnBmX21hcF91cGRhdGVfZWxlbShcdTAwMjZzb2NrX21hcCwgXHUwMDI2emVybywgc2ssIDApO1xuLVx0YnBmX3NrX3JlbGVhc2Uoc2spO1xuLVxuLVx0cmV0dXJuIHJldCA9PSAwID8gVENfQUNUX09LIDogVENfQUNUX1NIT1Q7XG4tfVxuLVxuLWNoYXIgX2xpY2Vuc2VbXSBTRUMoXCYjMzQ7bGljZW5zZVwmIzM0OykgPSBcJiMzNDtHUExcJiMzNDs7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc29ja21hcF91cGRhdGUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NvY2ttYXBfdXBkYXRlLmNcbmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggNmQ2NGVhNTM2ZTNkODEuLjAwMDAwMDAwMDAwMDAwXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zb2NrbWFwX3VwZGF0ZS5jXG4mIzQzOyYjNDM7JiM0MzsgL2Rldi9udWxsXG5AQCAtMSw0OCAmIzQzOzAsMCBAQFxuLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4tLy8gQ29weXJpZ2h0IChjKSAyMDIwIENsb3VkZmxhcmVcbi0jaW5jbHVkZSBcJiMzNDt2bWxpbnV4LmhcJiMzNDtcbi0jaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuLVxuLXN0cnVjdCB7XG4tXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1NPQ0tNQVApO1xuLVx0X191aW50KG1heF9lbnRyaWVzLCAxKTtcbi1cdF9fdHlwZShrZXksIF9fdTMyKTtcbi1cdF9fdHlwZSh2YWx1ZSwgX191NjQpO1xuLX0gc3JjIFNFQyhcJiMzNDsubWFwc1wmIzM0Oyk7XG4tXG4tc3RydWN0IHtcbi1cdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfU09DS01BUCk7XG4tXHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xuLVx0X190eXBlKGtleSwgX191MzIpO1xuLVx0X190eXBlKHZhbHVlLCBfX3U2NCk7XG4tfSBkc3Rfc29ja19tYXAgU0VDKFwmIzM0Oy5tYXBzXCYjMzQ7KTtcbi1cbi1zdHJ1Y3Qge1xuLVx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9TT0NLSEFTSCk7XG4tXHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xuLVx0X190eXBlKGtleSwgX191MzIpO1xuLVx0X190eXBlKHZhbHVlLCBfX3U2NCk7XG4tfSBkc3Rfc29ja19oYXNoIFNFQyhcJiMzNDsubWFwc1wmIzM0Oyk7XG4tXG4tU0VDKFwmIzM0O3RjXCYjMzQ7KVxuLWludCBjb3B5X3NvY2tfbWFwKHZvaWQgKmN0eClcbi17XG4tXHRzdHJ1Y3QgYnBmX3NvY2sgKnNrO1xuLVx0Ym9vbCBmYWlsZWQgPSBmYWxzZTtcbi1cdF9fdTMyIGtleSA9IDA7XG4tXG4tXHRzayA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2c3JjLCBcdTAwMjZrZXkpO1xuLVx0aWYgKCFzaylcbi1cdFx0cmV0dXJuIFNLX0RST1A7XG4tXG4tXHRpZiAoYnBmX21hcF91cGRhdGVfZWxlbShcdTAwMjZkc3Rfc29ja19tYXAsIFx1MDAyNmtleSwgc2ssIDApKVxuLVx0XHRmYWlsZWQgPSB0cnVlO1xuLVxuLVx0aWYgKGJwZl9tYXBfdXBkYXRlX2VsZW0oXHUwMDI2ZHN0X3NvY2tfaGFzaCwgXHUwMDI2a2V5LCBzaywgMCkpXG4tXHRcdGZhaWxlZCA9IHRydWU7XG4tXG4tXHRicGZfc2tfcmVsZWFzZShzayk7XG4tXHRyZXR1cm4gZmFpbGVkID8gU0tfRFJPUCA6IFNLX1BBU1M7XG4tfVxuLVxuLWNoYXIgX2xpY2Vuc2VbXSBTRUMoXCYjMzQ7bGljZW5zZVwmIzM0OykgPSBcJiMzNDtHUExcJiMzNDs7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3NvY2ttYXBfbXV0YXRlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc29ja21hcF9tdXRhdGUuY1xuaW5kZXggZmU0YjEyMzE4N2I4NmUuLjIwMzMyYTczMWQ0ZTRmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3NvY2ttYXBfbXV0YXRlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9zb2NrbWFwX211dGF0ZS5jXG5AQCAtNzQsNyAmIzQzOzc0LDcgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHRlc3Rfc29ja21hcF9sb29rdXBfYW5kX211dGF0ZSh2b2lkKVxuIH1cbiBcbiBTRUMoXCYjMzQ7YWN0aW9uXCYjMzQ7KVxuLV9fc3VjY2Vzc1xuJiM0MztfX2ZhaWx1cmUgX19tc2coXCYjMzQ7Y2Fubm90IHVwZGF0ZSBzb2NrbWFwIGluIHRoaXMgY29udGV4dFwmIzM0OylcbiBpbnQgdGVzdF9zY2hlZF9hY3Qoc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuIHtcbiBcdHRlc3Rfc29ja21hcF9tdXRhdGUoc2tiLVx1MDAzZXNrKTtcbkBAIC04Miw3ICYjNDM7ODIsNyBAQCBpbnQgdGVzdF9zY2hlZF9hY3Qoc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuIH1cbiBcbiBTRUMoXCYjMzQ7Y2xhc3NpZmllclwmIzM0Oylcbi1fX3N1Y2Nlc3NcbiYjNDM7X19mYWlsdXJlIF9fbXNnKFwmIzM0O2Nhbm5vdCB1cGRhdGUgc29ja21hcCBpbiB0aGlzIGNvbnRleHRcJiMzNDspXG4gaW50IHRlc3Rfc2NoZWRfY2xzKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbiB7XG4gXHR0ZXN0X3NvY2ttYXBfbXV0YXRlKHNrYi1cdTAwM2Vzayk7XG5AQCAtOTAsNyAmIzQzOzkwLDcgQEAgaW50IHRlc3Rfc2NoZWRfY2xzKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbiB9XG4gXG4gU0VDKFwmIzM0O2Zsb3dfZGlzc2VjdG9yXCYjMzQ7KVxuLV9fc3VjY2Vzc1xuJiM0MztfX2ZhaWx1cmUgX19tc2coXCYjMzQ7Y2Fubm90IHVwZGF0ZSBzb2NrbWFwIGluIHRoaXMgY29udGV4dFwmIzM0OylcbiBpbnQgdGVzdF9mbG93X2Rpc3NlY3Rvcl9kZWxldGUoc3RydWN0IF9fc2tfYnVmZiAqc2tiIF9fYWx3YXlzX3VudXNlZClcbiB7XG4gXHR0ZXN0X3NvY2ttYXBfZGVsZXRlKCk7XG5AQCAtOTgsNyAmIzQzOzk4LDcgQEAgaW50IHRlc3RfZmxvd19kaXNzZWN0b3JfZGVsZXRlKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYiBfX2Fsd2F5c191bnVzZWQpXG4gfVxuIFxuIFNFQyhcJiMzNDtmbG93X2Rpc3NlY3RvclwmIzM0Oylcbi1fX2ZhaWx1cmUgX19tc2coXCYjMzQ7cHJvZ3JhbSBvZiB0aGlzIHR5cGUgY2Fubm90IHVzZSBoZWxwZXIgYnBmX3NrX3JlbGVhc2VcJiMzNDspXG4mIzQzO19fZmFpbHVyZSBfX21zZyhcJiMzNDtjYW5ub3QgdXBkYXRlIHNvY2ttYXAgaW4gdGhpcyBjb250ZXh0XCYjMzQ7KVxuIGludCB0ZXN0X2Zsb3dfZGlzc2VjdG9yX3VwZGF0ZShzdHJ1Y3QgX19za19idWZmICpza2IgX19hbHdheXNfdW51c2VkKVxuIHtcbiBcdHRlc3Rfc29ja21hcF9sb29rdXBfYW5kX3VwZGF0ZSgpOyAvKiBubyBhY2Nlc3MgdG8gc2tiLVx1MDAzZXNrICovXG5AQCAtMTQ2LDcgJiM0MzsxNDYsNyBAQCBpbnQgdGVzdF9za19yZXVzZXBvcnQoc3RydWN0IHNrX3JldXNlcG9ydF9tZCAqY3R4KVxuIH1cbiBcbiBTRUMoXCYjMzQ7c29ja2V0XCYjMzQ7KVxuLV9fc3VjY2Vzc1xuJiM0MztfX2ZhaWx1cmUgX19tc2coXCYjMzQ7Y2Fubm90IHVwZGF0ZSBzb2NrbWFwIGluIHRoaXMgY29udGV4dFwmIzM0OylcbiBpbnQgdGVzdF9zb2NrZXRfZmlsdGVyKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbiB7XG4gXHR0ZXN0X3NvY2ttYXBfbXV0YXRlKHNrYi1cdTAwM2Vzayk7XG5AQCAtMTc5LDcgJiM0MzsxNzksNyBAQCBpbnQgdGVzdF9zb2Nrb3BzX3VwZGF0ZV9kZWRpY2F0ZWQoc3RydWN0IGJwZl9zb2NrX29wcyAqY3R4KVxuIH1cbiBcbiBTRUMoXCYjMzQ7eGRwXCYjMzQ7KVxuLV9fc3VjY2Vzc1xuJiM0MztfX2ZhaWx1cmUgX19tc2coXCYjMzQ7Y2Fubm90IHVwZGF0ZSBzb2NrbWFwIGluIHRoaXMgY29udGV4dFwmIzM0OylcbiBpbnQgdGVzdF94ZHAoc3RydWN0IHhkcF9tZCAqY3R4IF9fYWx3YXlzX3VudXNlZClcbiB7XG4gXHR0ZXN0X3NvY2ttYXBfbG9va3VwX2FuZF9tdXRhdGUoKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAyMzowNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttYXlfdXBkYXRlX3NvY2ttYXAmIzM0OywKICAgICYjMzQ7Y2hlY2tfbWFwX2Z1bmNfY29tcGF0aWJpbGl0eSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXN0cmljdHMgY2VydGFpbiBCUEYgcHJvZ3JhbSB0eXBlcyBmcm9tIHVwZGF0aW5nIHNvY2ttYXBzIGluIHRoZSBCUEYgdmVyaWZpZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBCUEYgdmVyaWZpZXIgbG9naWMgdGhhdCBhZmZlY3RzIHdoYXQgQlBGIHByb2dyYW1zIGFyZSBhbGxvd2VkIHRvIGRvLiBJdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgdmVyaWZpZXIgY29ycmVjdGx5IHJlamVjdHMgaW52YWxpZCBwcm9ncmFtcyBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSByZWdyZXNzaW9ucyBvciBieXBhc3Nlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZmM3ZGU3NmFkMWY1MTNlMDJlZGZlMmQwOTIyNmYwZGVlNzhlMDM5MApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgSnVuIDMwIDIzOjA1OjQ0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jCmluZGV4IDI1YWVhNDI3MWNkMDg5Li44M2VhM2IzM2ZmNjc5YyAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwpAQCAtODQ4OCwxMiAmIzQzOzg0ODgsNyBAQCBzdGF0aWMgYm9vbCBtYXlfdXBkYXRlX3NvY2ttYXAoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGZ1bmNfaWQpCiAJCWlmIChmdW5jX2lkID09IEJQRl9GVU5DX21hcF9kZWxldGVfZWxlbSkKIAkJCXJldHVybiB0cnVlOwogCQlicmVhazsKLQljYXNlIEJQRl9QUk9HX1RZUEVfU09DS0VUX0ZJTFRFUjoKLQljYXNlIEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTOgotCWNhc2UgQlBGX1BST0dfVFlQRV9TQ0hFRF9BQ1Q6Ci0JY2FzZSBCUEZfUFJPR19UWVBFX1hEUDoKIAljYXNlIEJQRl9QUk9HX1RZUEVfU0tfUkVVU0VQT1JUOgotCWNhc2UgQlBGX1BST0dfVFlQRV9GTE9XX0RJU1NFQ1RPUjoKIAljYXNlIEJQRl9QUk9HX1RZUEVfU0tfTE9PS1VQOgogCQlyZXR1cm4gdHJ1ZTsKIAlkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZmV4aXRfYnBmMmJwZi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZmV4aXRfYnBmMmJwZi5jCmluZGV4IDkyYzIwODAzZWE3NjVkLi5kM2E5NTQxNThjMzMyNyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZmV4aXRfYnBmMmJwZi5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ZleGl0X2JwZjJicGYuYwpAQCAtMzM2LDE3ICYjNDM7MzM2LDYgQEAgc3RhdGljIHZvaWQgdGVzdF9mbW9kX3JldF9mcmVwbGFjZSh2b2lkKQogfQogCiAKLXN0YXRpYyB2b2lkIHRlc3RfZnVuY19zb2NrbWFwX3VwZGF0ZSh2b2lkKQotewotCWNvbnN0IGNoYXIgKnByb2dfbmFtZVtdID0gewotCQkmIzM0O2ZyZXBsYWNlL2Nsc19yZWRpcmVjdCYjMzQ7LAotCX07Ci0JdGVzdF9mZXhpdF9icGYyYnBmX2NvbW1vbigmIzM0Oy4vZnJlcGxhY2VfY2xzX3JlZGlyZWN0LmJwZi5vJiMzNDssCi0JCQkJICAmIzM0Oy4vdGVzdF9jbHNfcmVkaXJlY3QuYnBmLm8mIzM0OywKLQkJCQkgIEFSUkFZX1NJWkUocHJvZ19uYW1lKSwKLQkJCQkgIHByb2dfbmFtZSwgZmFsc2UsIE5VTEwpOwotfQotCiBzdGF0aWMgdm9pZCB0ZXN0X2Z1bmNfcmVwbGFjZV92b2lkKHZvaWQpCiB7CiAJY29uc3QgY2hhciAqcHJvZ19uYW1lW10gPSB7CkBAIC01OTksOCAmIzQzOzU4OCw2IEBAIHZvaWQgc2VyaWFsX3Rlc3RfZmV4aXRfYnBmMmJwZih2b2lkKQogCQl0ZXN0X2Z1bmNfcmVwbGFjZSgpOwogCWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7ZnVuY19yZXBsYWNlX3ZlcmlmeSYjMzQ7KSkKIAkJdGVzdF9mdW5jX3JlcGxhY2VfdmVyaWZ5KCk7Ci0JaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtmdW5jX3NvY2ttYXBfdXBkYXRlJiMzNDspKQotCQl0ZXN0X2Z1bmNfc29ja21hcF91cGRhdGUoKTsKIAlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O2Z1bmNfcmVwbGFjZV9yZXR1cm5fY29kZSYjMzQ7KSkKIAkJdGVzdF9mdW5jX3JlcGxhY2VfcmV0dXJuX2NvZGUoKTsKIAlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O2Z1bmNfbWFwX3Byb2dfY29tcGF0aWJpbGl0eSYjMzQ7KSkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfYmFzaWMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfYmFzaWMuYwppbmRleCBjYjMyMjk3MTFmOTNhMy4uMzNmNzg4ZTI3ODZkYWUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfYmFzaWMuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2Jhc2ljLmMKQEAgLTcsNyAmIzQzOzcsNiBAQAogCiAjaW5jbHVkZSAmIzM0O3Rlc3RfcHJvZ3MuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3Rlc3Rfc2ttc2dfbG9hZF9oZWxwZXJzLnNrZWwuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O3Rlc3Rfc29ja21hcF91cGRhdGUuc2tlbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7dGVzdF9zb2NrbWFwX2ludmFsaWRfdXBkYXRlLnNrZWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3Rlc3Rfc29ja21hcF9za2JfdmVyZGljdF9hdHRhY2guc2tlbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7dGVzdF9zb2NrbWFwX3Byb2dzX3F1ZXJ5LnNrZWwuaCYjMzQ7CkBAIC0yMzUsNTMgJiM0MzsyMzQsNiBAQCBzdGF0aWMgdm9pZCB0ZXN0X3NrbXNnX2hlbHBlcnNfd2l0aF9saW5rKGVudW0gYnBmX21hcF90eXBlIG1hcF90eXBlKQogCXRlc3Rfc2ttc2dfbG9hZF9oZWxwZXJzX19kZXN0cm95KHNrZWwpOwogfQogCi1zdGF0aWMgdm9pZCB0ZXN0X3NvY2ttYXBfdXBkYXRlKGVudW0gYnBmX21hcF90eXBlIG1hcF90eXBlKQotewotCWludCBlcnIsIHByb2csIHNyYzsKLQlzdHJ1Y3QgdGVzdF9zb2NrbWFwX3VwZGF0ZSAqc2tlbDsKLQlzdHJ1Y3QgYnBmX21hcCAqZHN0X21hcDsKLQljb25zdCBfX3UzMiB6ZXJvID0gMDsKLQljaGFyIGR1bW15WzE0XSA9IHswfTsKLQlMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgdG9wdHMsCi0JCS5kYXRhX2luID0gZHVtbXksCi0JCS5kYXRhX3NpemVfaW4gPSBzaXplb2YoZHVtbXkpLAotCQkucmVwZWF0ID0gMSwKLQkpOwotCV9fczY0IHNrOwotCi0Jc2sgPSBjb25uZWN0ZWRfc29ja2V0X3Y0KCk7Ci0JaWYgKCFBU1NFUlRfTkVRKHNrLCAtMSwgJiMzNDtjb25uZWN0ZWRfc29ja2V0X3Y0JiMzNDspKQotCQlyZXR1cm47Ci0KLQlza2VsID0gdGVzdF9zb2NrbWFwX3VwZGF0ZV9fb3Blbl9hbmRfbG9hZCgpOwotCWlmICghQVNTRVJUX09LX1BUUihza2VsLCAmIzM0O29wZW5fYW5kX2xvYWQmIzM0OykpCi0JCWdvdG8gY2xvc2Vfc2s7Ci0KLQlwcm9nID0gYnBmX3Byb2dyYW1fX2ZkKHNrZWwtJmd0O3Byb2dzLmNvcHlfc29ja19tYXApOwotCXNyYyA9IGJwZl9tYXBfX2ZkKHNrZWwtJmd0O21hcHMuc3JjKTsKLQlpZiAobWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX1NPQ0tNQVApCi0JCWRzdF9tYXAgPSBza2VsLSZndDttYXBzLmRzdF9zb2NrX21hcDsKLQllbHNlCi0JCWRzdF9tYXAgPSBza2VsLSZndDttYXBzLmRzdF9zb2NrX2hhc2g7Ci0KLQllcnIgPSBicGZfbWFwX3VwZGF0ZV9lbGVtKHNyYywgJmFtcDt6ZXJvLCAmYW1wO3NrLCBCUEZfTk9FWElTVCk7Ci0JaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O3VwZGF0ZV9lbGVtKHNyYykmIzM0OykpCi0JCWdvdG8gb3V0OwotCi0JZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhwcm9nLCAmYW1wO3RvcHRzKTsKLQlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7dGVzdF9ydW4mIzM0OykpCi0JCWdvdG8gb3V0OwotCWlmICghQVNTRVJUX05FUSh0b3B0cy5yZXR2YWwsIDAsICYjMzQ7dGVzdF9ydW4gcmV0dmFsJiMzNDspKQotCQlnb3RvIG91dDsKLQotCWNvbXBhcmVfY29va2llcyhza2VsLSZndDttYXBzLnNyYywgZHN0X21hcCk7Ci0KLW91dDoKLQl0ZXN0X3NvY2ttYXBfdXBkYXRlX19kZXN0cm95KHNrZWwpOwotY2xvc2Vfc2s6Ci0JY2xvc2Uoc2spOwotfQotCiBzdGF0aWMgdm9pZCB0ZXN0X3NvY2ttYXBfaW52YWxpZF91cGRhdGUodm9pZCkKIHsKIAlzdHJ1Y3QgdGVzdF9zb2NrbWFwX2ludmFsaWRfdXBkYXRlICpza2VsOwpAQCAtMTM4NSwxMCAmIzQzOzEzMzcsNiBAQCB2b2lkIHRlc3Rfc29ja21hcF9iYXNpYyh2b2lkKQogCQl0ZXN0X3NrbXNnX2hlbHBlcnMoQlBGX01BUF9UWVBFX1NPQ0tNQVApOwogCWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7c29ja2hhc2ggc2tfbXNnIGxvYWQgaGVscGVycyYjMzQ7KSkKIAkJdGVzdF9za21zZ19oZWxwZXJzKEJQRl9NQVBfVFlQRV9TT0NLSEFTSCk7Ci0JaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtzb2NrbWFwIHVwZGF0ZSYjMzQ7KSkKLQkJdGVzdF9zb2NrbWFwX3VwZGF0ZShCUEZfTUFQX1RZUEVfU09DS01BUCk7Ci0JaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtzb2NraGFzaCB1cGRhdGUmIzM0OykpCi0JCXRlc3Rfc29ja21hcF91cGRhdGUoQlBGX01BUF9UWVBFX1NPQ0tIQVNIKTsKIAlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O3NvY2ttYXAgdXBkYXRlIGluIHVuc2FmZSBjb250ZXh0JiMzNDspKQogCQl0ZXN0X3NvY2ttYXBfaW52YWxpZF91cGRhdGUoKTsKIAlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O3NvY2ttYXAgY29weSYjMzQ7KSkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9mcmVwbGFjZV9jbHNfcmVkaXJlY3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9mcmVwbGFjZV9jbHNfcmVkaXJlY3QuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2U5NDQxMmQ0N2E1Y2EuLjAwMDAwMDAwMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9mcmVwbGFjZV9jbHNfcmVkaXJlY3QuYwomIzQzOyYjNDM7JiM0MzsgL2Rldi9udWxsCkBAIC0xLDM0ICYjNDM7MCwwIEBACi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAotLy8gQ29weXJpZ2h0IChjKSAyMDIwIEZhY2Vib29rCi0KLSNpbmNsdWRlICZsdDtsaW51eC9zdGRkZWYuaCZndDsKLSNpbmNsdWRlICZsdDtsaW51eC9icGYuaCZndDsKLSNpbmNsdWRlICZsdDtsaW51eC9wa3RfY2xzLmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7YnBmL2JwZl9lbmRpYW4uaCZndDsKLSNpbmNsdWRlICZsdDticGYvYnBmX2hlbHBlcnMuaCZndDsKLQotc3RydWN0IHsKLQlfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1NPQ0tNQVApOwotCV9fdHlwZShrZXksIGludCk7Ci0JX190eXBlKHZhbHVlLCBpbnQpOwotCV9fdWludChtYXhfZW50cmllcywgMik7Ci19IHNvY2tfbWFwIFNFQygmIzM0Oy5tYXBzJiMzNDspOwotCi1TRUMoJiMzNDtmcmVwbGFjZS9jbHNfcmVkaXJlY3QmIzM0OykKLWludCBmcmVwbGFjZV9jbHNfcmVkaXJlY3RfdGVzdChzdHJ1Y3QgX19za19idWZmICpza2IpCi17Ci0JaW50IHJldCA9IDA7Ci0JY29uc3QgaW50IHplcm8gPSAwOwotCXN0cnVjdCBicGZfc29jayAqc2s7Ci0KLQlzayA9IGJwZl9tYXBfbG9va3VwX2VsZW0oJmFtcDtzb2NrX21hcCwgJmFtcDt6ZXJvKTsKLQlpZiAoIXNrKQotCQlyZXR1cm4gVENfQUNUX1NIT1Q7Ci0KLQlyZXQgPSBicGZfbWFwX3VwZGF0ZV9lbGVtKCZhbXA7c29ja19tYXAsICZhbXA7emVybywgc2ssIDApOwotCWJwZl9za19yZWxlYXNlKHNrKTsKLQotCXJldHVybiByZXQgPT0gMCA/IFRDX0FDVF9PSyA6IFRDX0FDVF9TSE9UOwotfQotCi1jaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zb2NrbWFwX3VwZGF0ZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc29ja21hcF91cGRhdGUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmQ2NGVhNTM2ZTNkODEuLjAwMDAwMDAwMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NvY2ttYXBfdXBkYXRlLmMKJiM0MzsmIzQzOyYjNDM7IC9kZXYvbnVsbApAQCAtMSw0OCAmIzQzOzAsMCBAQAotLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKLS8vIENvcHlyaWdodCAoYykgMjAyMCBDbG91ZGZsYXJlCi0jaW5jbHVkZSAmIzM0O3ZtbGludXguaCYjMzQ7Ci0jaW5jbHVkZSAmbHQ7YnBmL2JwZl9oZWxwZXJzLmgmZ3Q7Ci0KLXN0cnVjdCB7Ci0JX191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9TT0NLTUFQKTsKLQlfX3VpbnQobWF4X2VudHJpZXMsIDEpOwotCV9fdHlwZShrZXksIF9fdTMyKTsKLQlfX3R5cGUodmFsdWUsIF9fdTY0KTsKLX0gc3JjIFNFQygmIzM0Oy5tYXBzJiMzNDspOwotCi1zdHJ1Y3QgewotCV9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfU09DS01BUCk7Ci0JX191aW50KG1heF9lbnRyaWVzLCAxKTsKLQlfX3R5cGUoa2V5LCBfX3UzMik7Ci0JX190eXBlKHZhbHVlLCBfX3U2NCk7Ci19IGRzdF9zb2NrX21hcCBTRUMoJiMzNDsubWFwcyYjMzQ7KTsKLQotc3RydWN0IHsKLQlfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1NPQ0tIQVNIKTsKLQlfX3VpbnQobWF4X2VudHJpZXMsIDEpOwotCV9fdHlwZShrZXksIF9fdTMyKTsKLQlfX3R5cGUodmFsdWUsIF9fdTY0KTsKLX0gZHN0X3NvY2tfaGFzaCBTRUMoJiMzNDsubWFwcyYjMzQ7KTsKLQotU0VDKCYjMzQ7dGMmIzM0OykKLWludCBjb3B5X3NvY2tfbWFwKHZvaWQgKmN0eCkKLXsKLQlzdHJ1Y3QgYnBmX3NvY2sgKnNrOwotCWJvb2wgZmFpbGVkID0gZmFsc2U7Ci0JX191MzIga2V5ID0gMDsKLQotCXNrID0gYnBmX21hcF9sb29rdXBfZWxlbSgmYW1wO3NyYywgJmFtcDtrZXkpOwotCWlmICghc2spCi0JCXJldHVybiBTS19EUk9QOwotCi0JaWYgKGJwZl9tYXBfdXBkYXRlX2VsZW0oJmFtcDtkc3Rfc29ja19tYXAsICZhbXA7a2V5LCBzaywgMCkpCi0JCWZhaWxlZCA9IHRydWU7Ci0KLQlpZiAoYnBmX21hcF91cGRhdGVfZWxlbSgmYW1wO2RzdF9zb2NrX2hhc2gsICZhbXA7a2V5LCBzaywgMCkpCi0JCWZhaWxlZCA9IHRydWU7Ci0KLQlicGZfc2tfcmVsZWFzZShzayk7Ci0JcmV0dXJuIGZhaWxlZCA/IFNLX0RST1AgOiBTS19QQVNTOwotfQotCi1jaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc29ja21hcF9tdXRhdGUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9zb2NrbWFwX211dGF0ZS5jCmluZGV4IGZlNGIxMjMxODdiODZlLi4yMDMzMmE3MzFkNGU0ZiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3NvY2ttYXBfbXV0YXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3NvY2ttYXBfbXV0YXRlLmMKQEAgLTc0LDcgJiM0Mzs3NCw3IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCB0ZXN0X3NvY2ttYXBfbG9va3VwX2FuZF9tdXRhdGUodm9pZCkKIH0KIAogU0VDKCYjMzQ7YWN0aW9uJiMzNDspCi1fX3N1Y2Nlc3MKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtjYW5ub3QgdXBkYXRlIHNvY2ttYXAgaW4gdGhpcyBjb250ZXh0JiMzNDspCiBpbnQgdGVzdF9zY2hlZF9hY3Qoc3RydWN0IF9fc2tfYnVmZiAqc2tiKQogewogCXRlc3Rfc29ja21hcF9tdXRhdGUoc2tiLSZndDtzayk7CkBAIC04Miw3ICYjNDM7ODIsNyBAQCBpbnQgdGVzdF9zY2hlZF9hY3Qoc3RydWN0IF9fc2tfYnVmZiAqc2tiKQogfQogCiBTRUMoJiMzNDtjbGFzc2lmaWVyJiMzNDspCi1fX3N1Y2Nlc3MKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtjYW5ub3QgdXBkYXRlIHNvY2ttYXAgaW4gdGhpcyBjb250ZXh0JiMzNDspCiBpbnQgdGVzdF9zY2hlZF9jbHMoc3RydWN0IF9fc2tfYnVmZiAqc2tiKQogewogCXRlc3Rfc29ja21hcF9tdXRhdGUoc2tiLSZndDtzayk7CkBAIC05MCw3ICYjNDM7OTAsNyBAQCBpbnQgdGVzdF9zY2hlZF9jbHMoc3RydWN0IF9fc2tfYnVmZiAqc2tiKQogfQogCiBTRUMoJiMzNDtmbG93X2Rpc3NlY3RvciYjMzQ7KQotX19zdWNjZXNzCiYjNDM7X19mYWlsdXJlIF9fbXNnKCYjMzQ7Y2Fubm90IHVwZGF0ZSBzb2NrbWFwIGluIHRoaXMgY29udGV4dCYjMzQ7KQogaW50IHRlc3RfZmxvd19kaXNzZWN0b3JfZGVsZXRlKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYiBfX2Fsd2F5c191bnVzZWQpCiB7CiAJdGVzdF9zb2NrbWFwX2RlbGV0ZSgpOwpAQCAtOTgsNyAmIzQzOzk4LDcgQEAgaW50IHRlc3RfZmxvd19kaXNzZWN0b3JfZGVsZXRlKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYiBfX2Fsd2F5c191bnVzZWQpCiB9CiAKIFNFQygmIzM0O2Zsb3dfZGlzc2VjdG9yJiMzNDspCi1fX2ZhaWx1cmUgX19tc2coJiMzNDtwcm9ncmFtIG9mIHRoaXMgdHlwZSBjYW5ub3QgdXNlIGhlbHBlciBicGZfc2tfcmVsZWFzZSYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O2Nhbm5vdCB1cGRhdGUgc29ja21hcCBpbiB0aGlzIGNvbnRleHQmIzM0OykKIGludCB0ZXN0X2Zsb3dfZGlzc2VjdG9yX3VwZGF0ZShzdHJ1Y3QgX19za19idWZmICpza2IgX19hbHdheXNfdW51c2VkKQogewogCXRlc3Rfc29ja21hcF9sb29rdXBfYW5kX3VwZGF0ZSgpOyAvKiBubyBhY2Nlc3MgdG8gc2tiLSZndDtzayAqLwpAQCAtMTQ2LDcgJiM0MzsxNDYsNyBAQCBpbnQgdGVzdF9za19yZXVzZXBvcnQoc3RydWN0IHNrX3JldXNlcG9ydF9tZCAqY3R4KQogfQogCiBTRUMoJiMzNDtzb2NrZXQmIzM0OykKLV9fc3VjY2VzcwomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O2Nhbm5vdCB1cGRhdGUgc29ja21hcCBpbiB0aGlzIGNvbnRleHQmIzM0OykKIGludCB0ZXN0X3NvY2tldF9maWx0ZXIoc3RydWN0IF9fc2tfYnVmZiAqc2tiKQogewogCXRlc3Rfc29ja21hcF9tdXRhdGUoc2tiLSZndDtzayk7CkBAIC0xNzksNyAmIzQzOzE3OSw3IEBAIGludCB0ZXN0X3NvY2tvcHNfdXBkYXRlX2RlZGljYXRlZChzdHJ1Y3QgYnBmX3NvY2tfb3BzICpjdHgpCiB9CiAKIFNFQygmIzM0O3hkcCYjMzQ7KQotX19zdWNjZXNzCiYjNDM7X19mYWlsdXJlIF9fbXNnKCYjMzQ7Y2Fubm90IHVwZGF0ZSBzb2NrbWFwIGluIHRoaXMgY29udGV4dCYjMzQ7KQogaW50IHRlc3RfeGRwKHN0cnVjdCB4ZHBfbWQgKmN0eCBfX2Fsd2F5c191bnVzZWQpCiB7CiAJdGVzdF9zb2NrbWFwX2xvb2t1cF9hbmRfbXV0YXRlKCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDIzOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzMjMKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxOTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCUEYgVmVyaWZpZXIgQ2hhbmdlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCYjMzk7cyBoaXR0aW5nIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHJldm9sdmVzIGFyb3VuZCBgbWF5X3VwZGF0ZV9zb2NrbWFwYC4gSXQgc2VlbXMgdGhleSYjMzk7cmUgdGlnaHRlbmluZyB0aGUgcmVpbnMgaGVyZSwgcmVzdHJpY3Rpbmcgd2hpY2ggQlBGIHByb2dyYW0gdHlwZXMgY2FuIGFjdHVhbGx5IG1vZGlmeSBzb2NrbWFwcy4gU3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2ggaXMgZXhwbGljaXRseSByZW1vdmluZyBzdXBwb3J0IGZvcjogYEJQRl9QUk9HX1RZUEVfU09DS0VUX0ZJTFRFUmAsIGBCUEZfUFJPR19UWVBFX1NDSEVEX0NMU2AsIGBCUEZfUFJPR19UWVBFX1NDSEVEX0FDVGAsIGBCUEZfUFJPR19UWVBFX1hEUGAsIGFuZCBgQlBGX1BST0dfVFlQRV9GTE9XX0RJU1NFQ1RPUmAuCgpFc3NlbnRpYWxseSwgdGhpcyBtZWFucyB0aGVzZSBwcm9ncmFtIHR5cGVzIGFyZSAqbm8gbG9uZ2VyIHBlcm1pdHRlZCogdG8gdXBkYXRlIHNvY2ttYXBzLiBUaGF0JiMzOTtzIGEgc2lnbmlmaWNhbnQgcmVzdHJpY3Rpb24gYW5kIHBvdGVudGlhbGx5IGEgc2VjdXJpdHkgaGFyZGVuaW5nIG1lYXN1cmUsIG9yIHBlcmhhcHMgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24sIGRlcGVuZGluZyBvbiB0aGUgcmF0aW9uYWxlLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBjb21taXQgbWVzc2FnZSBhbmQgcmVsYXRlZCBkaXNjdXNzaW9ucyB0byB1bmRlcnN0YW5kIHRoZSBleGFjdCBtb3RpdmF0aW9uLgoKVGhlIHBhdGNoIGFsc28gaW5jbHVkZXMgdXBkYXRlcyB0byB0aGUgc2VsZnRlc3RzLCB3aGljaCBpcyBnb29kIHByYWN0aWNlLiBJJiMzOTtsbCBuZWVkIHRvIHJldmlldyB0aG9zZSB0ZXN0cyBjYXJlZnVsbHkuIFRoZXkgbGlrZWx5IHJlbW92ZWQgdGVzdHMgdGhhdCB3b3VsZCBoYXZlIHByZXZpb3VzbHkgc3VjY2VlZGVkIHdpdGggdGhlc2UgcHJvZ3JhbSB0eXBlcyB1cGRhdGluZyBzb2NrbWFwcywgb3IgdGhleSYjMzk7dmUgY2hhbmdlZCB0aGUgZXhwZWN0ZWQgcmVzdWx0IGZyb20gc3VjY2VzcyB0byBmYWlsdXJlLiBUaGlzIGlzIGNyaXRpY2FsIGJlY2F1c2UgdGhlIHRlc3RzIG5lZWQgdG8gYWNjdXJhdGVseSByZWZsZWN0IHRoZSBuZXcgYmVoYXZpb3IgYW5kIHByZXZlbnQgcmVncmVzc2lvbnMuIEkmIzM5O2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHRlc3QgbW9kaWZpY2F0aW9ucyB0byBlbnN1cmUgdGhleSBhcmUgY29tcGxldGUgYW5kIGNvdmVyIGFsbCByZWxldmFudCBzY2VuYXJpb3MuIEkmIzM5O2xsIGFsc28gd2FudCB0byBsb29rIGZvciBhbnkgbmV3IHRlc3RzIHRoYXQgZXhwbGljaXRseSB2ZXJpZnkgdGhlIHJlc3RyaWN0aW9uLgoKSSBzaG91bGQgcHJvYmFibHkgdGFrZSBhIGxvb2sgYXQgdGhlIGNvbnRleHQgb2YgYG1heV91cGRhdGVfc29ja21hcGAgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgdG8gc2VlIGhvdyB0aGUgbG9naWMgaXMgc3RydWN0dXJlZC4gSXQmIzM5O2xsIGdpdmUgbWUgYSBjbGVhcmVyIHBpY3R1cmUgb2YgKndoeSogdGhlc2UgcHJvZ3JhbXMgYXJlIGJlaW5nIHJlc3RyaWN0ZWQgYW5kIGhvdyB0aGUgdmVyaWZpZXIgZW5zdXJlcyB0aGlzIHJlc3RyaWN0aW9uIGlzIGVuZm9yY2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDIzOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21heV91cGRhdGVfc29ja21hcCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9ODIyNz1zdGF0aWMgaW50IGNoZWNrX2Z1bmNfYXJnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBhcmcsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTg0NjgtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6ODQ2OTpzdGF0aWMgYm9vbCBtYXlfdXBkYXRlX3NvY2ttYXAoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGZ1bmNfaWQpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtODQ3MC17XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTg1MDg9c3RhdGljIGludCBjaGVja19tYXBfZnVuY19jb21wYXRpYmlsaXR5KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTg1ODMtXHRcdCAgICBmdW5jX2lkICE9IEJQRl9GVU5DX21hcF9sb29rdXBfZWxlbSBcdTAwMjZcdTAwMjZcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo4NTg0Olx0XHQgICAgIW1heV91cGRhdGVfc29ja21hcChlbnYsIGZ1bmNfaWQpKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTg1ODUtXHRcdFx0Z290byBlcnJvcjtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtODU5Mi1cdFx0ICAgIGZ1bmNfaWQgIT0gQlBGX0ZVTkNfbWFwX2xvb2t1cF9lbGVtIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi92ZXJpZmllci5jOjg1OTM6XHRcdCAgICAhbWF5X3VwZGF0ZV9zb2NrbWFwKGVudiwgZnVuY19pZCkpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtODU5NC1cdFx0XHRnb3RvIGVycm9yO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDIzOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyNTIKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyB0aGUgQlBGIFZlcmlmaWVyOiBBIEZvY3VzZWQgQXBwcm9hY2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgbmV3IGZ1bmN0aW9uLCBgbWF5X3VwZGF0ZV9zb2NrbWFwYCwgYW5kIGl0JiMzOTtzIGJlaW5nIHVzZWQgaW4gYGNoZWNrX21hcF9mdW5jX2NvbXBhdGliaWxpdHlgLiBUaGlzIGlzIGEgcHJldHR5IHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUgQlBGIHZlcmlmaWVyIGl0c2VsZiwgYSBjaGFuZ2UgdGhhdCByZXN0cmljdHMgc3BlY2lmaWMgQlBGIHByb2dyYW0gdHlwZXMuIE15IGV4cGVydCBpbnR1aXRpb24gaXMgdGVsbGluZyBtZSB0aGlzIHdhcnJhbnRzIGEgY2xvc2VyIGxvb2ssIGVzcGVjaWFsbHkgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuCgpZZWFoLCBhYnNvbHV0ZWx5LiBBIG1vZGlmaWNhdGlvbiB0byB0aGUgY29yZSB2ZXJpZmllciBsb2dpYz8gVGhhdCYjMzk7cyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIFRoZSB2ZXJpZmllciBpcyB3aGVyZSBhIGxvdCBvZiB0aGUgY3JpdGljYWwgc2VjdXJpdHkgY2hlY2tzIGhhcHBlbiwgc28gY2hhbmdlcyB0aGVyZSBhcmUgcG90ZW50aWFsIGdvbGRtaW5lcyBmb3IgdW5jb3ZlcmluZyB2dWxuZXJhYmlsaXRpZXMuCgpBbHJpZ2h0LCB0aW1lIHRvIG5hcnJvdyBkb3duIHRoZSBmb2N1cy4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggaWRlbnRpZnlpbmcgdGhlIGNyaXRpY2FsIHN5bWJvbHMuIFdlJiMzOTt2ZSBnb3QgYGNoZWNrX21hcF9mdW5jX2NvbXBhdGliaWxpdHlgIGFuZCBgbWF5X3VwZGF0ZV9zb2NrbWFwYC4gVGhvc2UgYXJlIHRoZSB0d28gbWFpbiBwbGF5ZXJzIGluIHRoaXMgZ2FtZS4KCk5vdywgSSYjMzk7bGwgZGl2ZSBpbnRvIHRoZSBjb2RlLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgIGRpcmVjdGx5IHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIG5ldyBpbnRlcmFjdGlvbiBiZXR3ZWVuIGBjaGVja19tYXBfZnVuY19jb21wYXRpYmlsaXR5YCBhbmQgYG1heV91cGRhdGVfc29ja21hcGAuIFRoZSBkZXZpbCBpcyBhbHdheXMgaW4gdGhlIGRldGFpbHMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMjM6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2hlY2tfbWFwX2Z1bmNfY29tcGF0aWJpbGl0eSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9ODUwMj1ib29sIGJwZl9hbGxvd190YWlsX2NhbGxfaW5fc3VicHJvZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtODUwNy1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo4NTA4OnN0YXRpYyBpbnQgY2hlY2tfbWFwX2Z1bmNfY29tcGF0aWJpbGl0eShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxua2VybmVsL2JwZi92ZXJpZmllci5jLTg1MDktXHRcdFx0XHRcdHN0cnVjdCBicGZfbWFwICptYXAsIGludCBmdW5jX2lkKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMDE4MT1zdGF0aWMgaW50IGNoZWNrX2hlbHBlcl9jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTA2MTItXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTA2MTM6XHRlcnIgPSBjaGVja19tYXBfZnVuY19jb21wYXRpYmlsaXR5KGVudiwgbWV0YS5tYXAucHRyLCBmdW5jX2lkKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDYxNC1cdGlmIChlcnIpXG4tLVxuc2NyaXB0cy9icGZfZG9jLnB5PTYwNz1Db21wYXRpYmlsaXR5IGJldHdlZW4gaGVscGVyIGZ1bmN0aW9ucyBhbmQgbWFwIHR5cGVzIGNhbiBiZSBmb3VuZCBpbiB0aGVcbnNjcmlwdHMvYnBmX2RvYy5weTo2MDg6KipjaGVja19tYXBfZnVuY19jb21wYXRpYmlsaXR5KipcXFxcICgpIGZ1bmN0aW9uIGluIGZpbGUgKmtlcm5lbC9icGYvdmVyaWZpZXIuYyouXG5zY3JpcHRzL2JwZl9kb2MucHktNjA5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDIzOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwMDAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgdGhlIENvZGUgQ2hhbmdlKioKCk9rYXksIHNvIHRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgYG1heV91cGRhdGVfc29ja21hcGAuIFRoYXQgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgYnkgYGNoZWNrX21hcF9mdW5jX2NvbXBhdGliaWxpdHlgLCB3aGljaCwgaW4gdHVybiwgaXMgaW52b2tlZCBieSBgY2hlY2tfaGVscGVyX2NhbGxgLiAgVGhlcmVmb3JlLCBgY2hlY2tfbWFwX2Z1bmNfY29tcGF0aWJpbGl0eWAgYW5kIGBtYXlfdXBkYXRlX3NvY2ttYXBgIGFyZSB0aGUgY3JpdGljYWwgZW50cnkgcG9pbnRzIHRvIHVuZGVyc3RhbmQgdGhpcyBtb2RpZmljYXRpb24uIEkgc2hvdWxkIHN0YXJ0IHRoZXJlLCBhbmQgdGhlbiB0cmFjZSBvdXR3YXJkcy4KCk5vdywgd2hhdCBkZXBlbmRlbmNpZXMgZG8gd2UgaGF2ZSB0byB3b3JyeSBhYm91dD8gSSBrbm93IHRoZSBCUEYgdmVyaWZpZXIgcmVxdWlyZXMgYEJQRl9TWVNDQUxMYC4gIEkgc2hvdWxkIHByb2JhYmx5IGNvbmZpcm0gdGhhdCB0aGF0JiMzOTtzIHRoZSBvbmx5IHJlbGV2YW50IGNvbmZpZy4gSSBzaG91bGQgY2hlY2sgZWl0aGVyIGBrZXJuZWwvYnBmL01ha2VmaWxlYCBvciBga2VybmVsL2JwZi9LY29uZmlnYCBmb3IgcmVsYXRlZCBzZXR0aW5ncy4gTGV0JiMzOTtzIHNlZSB3aGF0IGVsc2UgbWlnaHQgYmUgYXQgcGxheSBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDIzOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19CUEZfU1lTQ0FMTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGU9Nz1DRkxBR1NfY29yZS5vICYjNDM7PSAtV25vLW92ZXJyaWRlLWluaXQgJChjZmxhZ3Mtbm9nY3NlLXl5KVxua2VybmVsL2JwZi9NYWtlZmlsZS04LVxua2VybmVsL2JwZi9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHN5c2NhbGwubyB2ZXJpZmllci5vIGlub2RlLm8gaGVscGVycy5vIHRudW0ubyBjbnVtLm8gbG9nLm8gdG9rZW4ubyBsaXZlbmVzcy5vIGNvbnN0X2ZvbGQub1xua2VybmVsL2JwZi9NYWtlZmlsZToxMDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBicGZfaXRlci5vIG1hcF9pdGVyLm8gdGFza19pdGVyLm8gcHJvZ19pdGVyLm8gbGlua19pdGVyLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6MTE6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gaGFzaHRhYi5vIGFycmF5bWFwLm8gcGVyY3B1X2ZyZWVsaXN0Lm8gYnBmX2xydV9saXN0Lm8gbHBtX3RyaWUubyBtYXBfaW5fbWFwLm8gYmxvb21fZmlsdGVyLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6MTI6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gbG9jYWxfc3RvcmFnZS5vIHF1ZXVlX3N0YWNrX21hcHMubyByaW5nYnVmLm8gYnBmX2luc25fYXJyYXkub1xua2VybmVsL2JwZi9NYWtlZmlsZToxMzpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBicGZfbG9jYWxfc3RvcmFnZS5vIGJwZl90YXNrX3N0b3JhZ2Uub1xua2VybmVsL2JwZi9NYWtlZmlsZToxNDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBmaXh1cHMubyBjZmcubyBzdGF0ZXMubyBiYWNrdHJhY2subyBjaGVja19idGYub1xua2VybmVsL2JwZi9NYWtlZmlsZS0xNS1vYmotJHtDT05GSUdfQlBGX0xTTX1cdCAgJiM0Mzs9IGJwZl9pbm9kZV9zdG9yYWdlLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6MTY6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gZGlzYXNtLm8gbXByb2cub1xua2VybmVsL2JwZi9NYWtlZmlsZS0xNy1vYmotJChDT05GSUdfQlBGX0pJVCkgJiM0Mzs9IHRyYW1wb2xpbmUub1xua2VybmVsL2JwZi9NYWtlZmlsZToxODpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBidGYubyBtZW1hbGxvYy5vIHJxc3BpbmxvY2subyBzdHJlYW0ub1xua2VybmVsL2JwZi9NYWtlZmlsZS0xOS1pZmVxICgkKENPTkZJR19NTVUpJChDT05GSUdfNjRCSVQpLHl5KVxua2VybmVsL2JwZi9NYWtlZmlsZToyMDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBhcmVuYS5vIHJhbmdlX3RyZWUub1xua2VybmVsL2JwZi9NYWtlZmlsZS0yMS1lbmRpZlxuLS1cbmtlcm5lbC9icGYvTWFrZWZpbGU9MjM9aWZlcSAoJChDT05GSUdfTkVUKSx5KVxua2VybmVsL2JwZi9NYWtlZmlsZToyNDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBkZXZtYXAub1xua2VybmVsL2JwZi9NYWtlZmlsZToyNTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBjcHVtYXAub1xua2VybmVsL2JwZi9NYWtlZmlsZToyNjpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBvZmZsb2FkLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6Mjc6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gbmV0X25hbWVzcGFjZS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjI4Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHRjeC5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTI5LWVuZGlmXG5rZXJuZWwvYnBmL01ha2VmaWxlPTMwPWlmZXEgKCQoQ09ORklHX1BFUkZfRVZFTlRTKSx5KVxua2VybmVsL2JwZi9NYWtlZmlsZTozMTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBzdGFja21hcC5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTMyLWVuZGlmXG5rZXJuZWwvYnBmL01ha2VmaWxlPTMzPWlmZXEgKCQoQ09ORklHX0NHUk9VUFMpLHkpXG5rZXJuZWwvYnBmL01ha2VmaWxlOjM0Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGNncm91cF9pdGVyLm8gYnBmX2NncnBfc3RvcmFnZS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTM1LWVuZGlmXG4tLVxua2VybmVsL2JwZi9NYWtlZmlsZT0zNz1pZmVxICgkKENPTkZJR19JTkVUKSx5KVxua2VybmVsL2JwZi9NYWtlZmlsZTozODpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSByZXVzZXBvcnRfYXJyYXkub1xua2VybmVsL2JwZi9NYWtlZmlsZS0zOS1lbmRpZlxuLS1cbmtlcm5lbC9icGYvTWFrZWZpbGU9NDM9aWZlcSAoJChDT05GSUdfQlBGX0pJVCkseSlcbmtlcm5lbC9icGYvTWFrZWZpbGU6NDQ6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnBmX3N0cnVjdF9vcHMub1xua2VybmVsL2JwZi9NYWtlZmlsZTo0NTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBjcHVtYXNrLm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtNDYtIyBicGZfbHNtX3Byb3RvLm8gbXVzdCBwcmVjZWRlIGJwZl9sc20uby4gVGhlIGN1cnJlbnQgcGFob2xlIGxvZ2ljXG4tLVxua2VybmVsL2JwZi9NYWtlZmlsZT01OD1pZm5lcSAoJChDT05GSUdfQ1JZUFRPKSwpXG5rZXJuZWwvYnBmL01ha2VmaWxlOjU5Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGNyeXB0by5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTYwLWVuZGlmXG5rZXJuZWwvYnBmL01ha2VmaWxlPTYxPW9iai0kKENPTkZJR19CUEZfUFJFTE9BRCkgJiM0Mzs9IHByZWxvYWQvXG5rZXJuZWwvYnBmL01ha2VmaWxlLTYyLVxua2VybmVsL2JwZi9NYWtlZmlsZTo2MzpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSByZWxvX2NvcmUub1xua2VybmVsL2JwZi9NYWtlZmlsZTo2NDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBidGZfaXRlci5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjY1Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJ0Zl9yZWxvY2F0ZS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjY2Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGttZW1fY2FjaGVfaXRlci5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTY3LWlmZXEgKCQoQ09ORklHX0RNQV9TSEFSRURfQlVGRkVSKSx5KVxua2VybmVsL2JwZi9NYWtlZmlsZTo2ODpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBkbWFidWZfaXRlci5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTY5LWVuZGlmXG4tLVxua2VybmVsL2JwZi9jb3JlLmM9OTk9c3RydWN0IGJwZl9wcm9nICpicGZfcHJvZ19hbGxvY19ub19zdGF0cyh1bnNpZ25lZCBpbnQgc2l6ZSwgZ2ZwX3QgZ2ZwX2V4dHJhX2ZsYWdzKVxuLS1cbmtlcm5lbC9icGYvY29yZS5jLTE0MS1cbmtlcm5lbC9icGYvY29yZS5jOjE0MjojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL2NvcmUuYy0xNDMtXHRicGZfcHJvZ19zdHJlYW1faW5pdChmcCk7XG4tLVxua2VybmVsL2JwZi9jb3JlLmM9MjQwND1FVkFMNChQUk9HX05BTUVfTElTVCwgNDE2LCA0NDgsIDQ4MCwgNTEyKVxuLS1cbmtlcm5lbC9icGYvY29yZS5jLTI0MDctXG5rZXJuZWwvYnBmL2NvcmUuYzoyNDA4OiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbmtlcm5lbC9icGYvY29yZS5jLTI0MDktaW50IGJwZl9wYXRjaF9jYWxsX2FyZ3Moc3RydWN0IGJwZl9pbnNuICppbnNuLCB1MzIgc3RhY2tfZGVwdGgpXG4tLVxua2VybmVsL2JwZi9jb3JlLmM9Mjk5Mj12b2lkIF9fYnBmX2ZyZWVfdXNlZF9idGZzKHN0cnVjdCBidGZfbW9kX3BhaXIgKnVzZWRfYnRmcywgdTMyIGxlbilcbmtlcm5lbC9icGYvY29yZS5jLTI5OTMte1xua2VybmVsL2JwZi9jb3JlLmM6Mjk5NDojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL2NvcmUuYy0yOTk1LVx0c3RydWN0IGJ0Zl9tb2RfcGFpciAqYnRmX21vZDtcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYz0zMDEzPXN0YXRpYyB2b2lkIGJwZl9wcm9nX2ZyZWVfZGVmZXJyZWQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmtlcm5lbC9icGYvY29yZS5jLTMwMTgtXHRhdXggPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGJwZl9wcm9nX2F1eCwgd29yayk7XG5rZXJuZWwvYnBmL2NvcmUuYzozMDE5OiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbmtlcm5lbC9icGYvY29yZS5jLTMwMjAtXHRicGZfZnJlZV9rZnVuY19idGZfdGFiKGF1eC1cdTAwM2VrZnVuY19idGZfdGFiKTtcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYz0zMzM1PXN0YXRpYyBub2lubGluZSB2b2lkIGJwZl9wcm9nX3JlcG9ydF9tYXlfZ290b192aW9sYXRpb24odm9pZClcbmtlcm5lbC9icGYvY29yZS5jLTMzMzYte1xua2VybmVsL2JwZi9jb3JlLmM6MzMzNzojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL2NvcmUuYy0zMzM4LVx0c3RydWN0IGJwZl9zdHJlYW1fc3RhZ2Ugc3M7XG4tLVxua2VybmVsL2JwZi9jb3JlLmM9MzM3NT1fX3dlYWsgdTY0IGJwZl9hcmVuYV9nZXRfa2Vybl92bV9zdGFydChzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSlcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0zMzc5LVxua2VybmVsL2JwZi9jb3JlLmM6MzM4MDojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL2NvcmUuYy0zMzgxLV9fd2VhayBib29sIGJwZl9hcmVuYV9oYW5kbGVfcGFnZV9mYXVsdCh1bnNpZ25lZCBsb25nIGFkZHIsIGJvb2wgaXNfd3JpdGUsXG4tLVxua2VybmVsL2JwZi9jb3JlLmM9MzQwNj1FWFBPUlRfVFJBQ0VQT0lOVF9TWU1CT0xfR1BMKHhkcF9idWxrX3R4KTtcbmtlcm5lbC9icGYvY29yZS5jLTM0MDctXG5rZXJuZWwvYnBmL2NvcmUuYzozNDA4OiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbmtlcm5lbC9icGYvY29yZS5jLTM0MDktXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTQ2Nz1pbnQgX193ZWFrIGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHUzMiBmbGFncyxcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNDc0LSAgICBkZWZpbmVkKENPTkZJR19IQVZFX1NJTkdMRV9GVFJBQ0VfRElSRUNUX09QUykgXHUwMDI2XHUwMDI2IFxcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNDc1OiAgICBkZWZpbmVkKENPTkZJR19CUEZfU1lTQ0FMTClcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE0NzYtXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTcxMT1pbnQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgc3RydWN0IGJwZl90cmFjaW5nX211bHRpX2xpbmsgKmxpbmspXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTc0Ny1cdCAgQ09ORklHX0hBVkVfU0lOR0xFX0ZUUkFDRV9ESVJFQ1RfT1BTIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTc0ODpcdCAgQ09ORklHX0JQRl9TWVNDQUxMICovXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNzQ5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDIzOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3MzkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCUEYgVmVyaWZpZXIgQ2hhbmdlKioKCk9rYXksIHNvIHRoZSBjaGFuZ2UgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXMgc3BlY2lmaWNhbGx5IHdpdGhpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBpcyByZWxhdGVkIHRvIHRoZSBCUEYgdmVyaWZpZXIgaXRzZWxmLCBhbmQgdGhlIHByaW1hcnkgcHJlcmVxdWlzaXRlIGZvciB0aGlzIGNvZGUgcGF0aCBpcyBgQ09ORklHX0JQRl9TWVNDQUxMYC4gIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGF0LCBidXQgSSYjMzk7bSByZWFzb25hYmx5IGNvbmZpZGVudC4KCk5vdywgYmVjYXVzZSBpdCYjMzk7cyBpbiB0aGUgY29udGV4dCBvZiBgc29ja21hcGAsIEkgc2hvdWxkIHN0YXJ0IHRoaW5raW5nIGFib3V0IHJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIEFzaWRlIGZyb20gYENPTkZJR19CUEZfU1lTQ0FMTGAsIGFyZSB0aGVyZSBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzIEkgbmVlZCB0byBjb25zaWRlcj8gTXkgaW5pdGlhbCBndWVzcyBpcyB0aGF0IGBDT05GSUdfQ0dST1VQX0JQRmAgb3IgcG9zc2libHkgZXZlbiBgQ09ORklHX05FVGAgbWlnaHQgYWxzbyBwbGF5IGEgcm9sZS4gVGhlc2Ugb2Z0ZW4gaW50ZXJhY3QuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGJyb2FkZXIgY29udGV4dCB0byBjb25maXJtLgoKTGV0JiMzOTtzIHF1aWNrbHkgZ2V0IGJhY2sgaW50byB0aGUgY29kZSBhbmQgZG91YmxlLWNoZWNrIHNwZWNpZmljYWxseSB0aGUgYG1heV91cGRhdGVfc29ja21hcGAgZnVuY3Rpb24gd2l0aGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBJIG5lZWQgdG8gZW5zdXJlIG15IGFzc3VtcHRpb25zIGFib3V0IHRoZSBkZXBlbmRlbmNpZXMgYXJlIGNvcnJlY3QgYW5kIHVuZGVyc3RhbmQgdGhlIGV4YWN0IG5hdHVyZSBvZiB0aGUgbW9kaWZpY2F0aW9uLiBUaGlzIGlzIHdoZXJlIEkmIzM5O2xsIGdldCB0aGUgcmVhbCBkZXRhaWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAyMzowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttYXlfdXBkYXRlX3NvY2ttYXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jPTgyMjc9c3RhdGljIGludCBjaGVja19mdW5jX2FyZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgYXJnLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04NDY4LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjg0Njk6c3RhdGljIGJvb2wgbWF5X3VwZGF0ZV9zb2NrbWFwKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBmdW5jX2lkKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTg0NzAte1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz04NTA4PXN0YXRpYyBpbnQgY2hlY2tfbWFwX2Z1bmNfY29tcGF0aWJpbGl0eShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04NTgzLVx0XHQgICAgZnVuY19pZCAhPSBCUEZfRlVOQ19tYXBfbG9va3VwX2VsZW0gXHUwMDI2XHUwMDI2XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6ODU4NDpcdFx0ICAgICFtYXlfdXBkYXRlX3NvY2ttYXAoZW52LCBmdW5jX2lkKSlcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04NTg1LVx0XHRcdGdvdG8gZXJyb3I7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTg1OTItXHRcdCAgICBmdW5jX2lkICE9IEJQRl9GVU5DX21hcF9sb29rdXBfZWxlbSBcdTAwMjZcdTAwMjZcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo4NTkzOlx0XHQgICAgIW1heV91cGRhdGVfc29ja21hcChlbnYsIGZ1bmNfaWQpKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTg1OTQtXHRcdFx0Z290byBlcnJvcjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMjM6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0NDIKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSwgbXkgaW5pdGlhbCByZWFjdGlvbiBpcywgaG1tLCB0aGUgYG1heV91cGRhdGVfc29ja21hcGAgZnVuY3Rpb24uIFdoZXJlICpleGFjdGx5KiBpcyB0aGF0IHVzZWQ/IE9ubHkgaW4gYGNoZWNrX21hcF9mdW5jX2NvbXBhdGliaWxpdHlgPyBJbnRlcmVzdGluZy4gSSB3b25kZXIgaWYgdGhlcmUmIzM5O3MgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gcmVsYXRlZCB0byBzb2NrbWFwcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YgaGVyZT8gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGlnIGFyb3VuZCBpbiB0aGUgc291cmNlIGNvZGUuIExldCYjMzk7cyBzdGFydCB3aXRoIGBuZXQvY29yZS9zb2NrX21hcC5jYC4gVGhhdCBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIHBsYWNlIHRvIGZpbmQgdGhlIG5pdHR5LWdyaXR0eSBkZXRhaWxzLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayBhbnkgYXNzb2NpYXRlZCBmaWxlcyB0b28uIEkmIzM5O2xsIGtlZXAgdGhlIGNvbnRleHQgaW4gbWluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMjM6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c29ja19tYXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDY0MCBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxubmV0L2NvcmUvTWFrZWZpbGU9NDQ9b2JqLSQoQ09ORklHX05FVF9TT0NLX01TRykgJiM0Mzs9IHNrbXNnLm9cbm5ldC9jb3JlL01ha2VmaWxlOjQ1Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHNvY2tfbWFwLm9cbm5ldC9jb3JlL01ha2VmaWxlLTQ2LW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9za19zdG9yYWdlLm9cbi0tXG5uZXQvY29yZS9maWx0ZXIuYz04NTk3PXhkcF9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTg2NjctXG5uZXQvY29yZS9maWx0ZXIuYzo4NjY4OmNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc29ja19tYXBfdXBkYXRlX3Byb3RvIF9fd2Vhaztcbm5ldC9jb3JlL2ZpbHRlci5jLTg2NjktY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zb2NrX2hhc2hfdXBkYXRlX3Byb3RvIF9fd2Vhaztcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz04NjcyPXNvY2tfb3BzX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtODY4Ni1cdFx0cmV0dXJuIFx1MDAyNmJwZl9zb2NrX29wc19jYl9mbGFnc19zZXRfcHJvdG87XG5uZXQvY29yZS9maWx0ZXIuYzo4Njg3Olx0Y2FzZSBCUEZfRlVOQ19zb2NrX21hcF91cGRhdGU6XG5uZXQvY29yZS9maWx0ZXIuYzo4Njg4Olx0XHRyZXR1cm4gXHUwMDI2YnBmX3NvY2tfbWFwX3VwZGF0ZV9wcm90bztcbm5ldC9jb3JlL2ZpbHRlci5jLTg2ODktXHRjYXNlIEJQRl9GVU5DX3NvY2tfaGFzaF91cGRhdGU6XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9MTE1NzE9QlBGX0NBTExfNChza19zZWxlY3RfcmV1c2Vwb3J0LCBzdHJ1Y3Qgc2tfcmV1c2Vwb3J0X2tlcm4gKiwgcmV1c2Vfa2Vybixcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMTU4OC1cdFx0ICpcbm5ldC9jb3JlL2ZpbHRlci5jOjExNTg5Olx0XHQgKiBPdGhlciBtYXBzIChlLmcuIHNvY2tfbWFwKSBkbyBub3QgcHJvdmlkZSB0aGlzIGd1YXJhbnRlZSBhbmRcbm5ldC9jb3JlL2ZpbHRlci5jLTExNTkwLVx0XHQgKiB0aGUgc2sgbWF5IG5ldmVyIGJlIGluIHRoZSByZXVzZXBvcnQgZ3JvdXAgdG8gYmVnaW4gd2l0aC5cbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMTYxMy1lcnJvcjpcbm5ldC9jb3JlL2ZpbHRlci5jOjExNjE0Olx0LyogTG9va3VwIGluIHNvY2tfbWFwIGNhbiByZXR1cm4gVENQIEVTVEFCTElTSEVEIHNvY2tldHMuICovXG5uZXQvY29yZS9maWx0ZXIuYy0xMTYxNS1cdGlmIChza19pc19yZWZjb3VudGVkKHNlbGVjdGVkX3NrKSlcbi0tXG5uZXQvY29yZS9za21zZy5jPTY3MT1zdGF0aWMgdm9pZCBza19wc29ja19iYWNrbG9nKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5uZXQvY29yZS9za21zZy5jLTY4OC1cdC8qIEluY3JlbWVudCB0aGUgcHNvY2sgcmVmY250IHRvIHN5bmNocm9uaXplIHdpdGggY2xvc2UoZmQpIHBhdGggaW5cbm5ldC9jb3JlL3NrbXNnLmM6Njg5Olx0ICogc29ja19tYXBfY2xvc2UoKSwgZW5zdXJpbmcgd2Ugd2FpdCBmb3IgYmFja2xvZyB0aHJlYWQgY29tcGxldGlvblxubmV0L2NvcmUvc2ttc2cuYy02OTAtXHQgKiBiZWZvcmUgc2tfc29ja2V0IGZyZWVkLiBJZiByZWZjbnQgaW5jcmVtZW50IGZhaWxzLCBpdCBpbmRpY2F0ZXNcbm5ldC9jb3JlL3NrbXNnLmM6NjkxOlx0ICogc29ja19tYXBfY2xvc2UoKSBjb21wbGV0ZWQgd2l0aCBza19zb2NrZXQgcG90ZW50aWFsbHkgYWxyZWFkeSBmcmVlZC5cbm5ldC9jb3JlL3NrbXNnLmMtNjkyLVx0ICovXG4tLVxubmV0L2NvcmUvc2ttc2cuYz05MDU9RVhQT1JUX1NZTUJPTF9HUEwoc2tfcHNvY2tfZHJvcCk7XG5uZXQvY29yZS9za21zZy5jLTkwNi1cbm5ldC9jb3JlL3NrbXNnLmM6OTA3OnN0YXRpYyBpbnQgc2tfcHNvY2tfbWFwX3ZlcmQoaW50IHZlcmRpY3QsIGJvb2wgcmVkaXIpXG5uZXQvY29yZS9za21zZy5jLTkwOC17XG4tLVxubmV0L2NvcmUvc2ttc2cuYz05MjA9aW50IHNrX3Bzb2NrX21zZ192ZXJkaWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayxcbi0tXG5uZXQvY29yZS9za21zZy5jLTkzNi1cdG1zZy1cdTAwM2VzayA9IE5VTEw7XG5uZXQvY29yZS9za21zZy5jOjkzNzpcdHJldCA9IHNrX3Bzb2NrX21hcF92ZXJkKHJldCwgbXNnLVx1MDAzZXNrX3JlZGlyKTtcbm5ldC9jb3JlL3NrbXNnLmMtOTM4LVx0cHNvY2stXHUwMDNlYXBwbHlfYnl0ZXMgPSBtc2ctXHUwMDNlYXBwbHlfYnl0ZXM7XG4tLVxubmV0L2NvcmUvc2ttc2cuYz0xMDc1PXN0YXRpYyB2b2lkIHNrX3Bzb2NrX3N0cnBfcmVhZChzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtMTA5NS1cdFx0c2tiX2JwZl9zZXRfc3RycGFyc2VyKHNrYik7XG5uZXQvY29yZS9za21zZy5jOjEwOTY6XHRcdHJldCA9IHNrX3Bzb2NrX21hcF92ZXJkKHJldCwgc2tiX2JwZl9yZWRpcmVjdF9mZXRjaChza2IpKTtcbm5ldC9jb3JlL3NrbXNnLmMtMTA5Ny1cdFx0c2tiLVx1MDAzZXNrID0gTlVMTDtcbi0tXG5uZXQvY29yZS9za21zZy5jPTExOTg9c3RhdGljIGludCBza19wc29ja192ZXJkaWN0X3JlY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtMTIxOS1cdFx0cmV0ID0gYnBmX3Byb2dfcnVuX3Bpbl9vbl9jcHUocHJvZywgc2tiKTtcbm5ldC9jb3JlL3NrbXNnLmM6MTIyMDpcdFx0cmV0ID0gc2tfcHNvY2tfbWFwX3ZlcmQocmV0LCBza2JfYnBmX3JlZGlyZWN0X2ZldGNoKHNrYikpO1xubmV0L2NvcmUvc2ttc2cuYy0xMjIxLVx0fVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM9MzI9c3RhdGljIERFRklORV9NVVRFWChzb2NrbWFwX211dGV4KTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzMtXG5uZXQvY29yZS9zb2NrX21hcC5jOjM0OnN0YXRpYyBpbnQgc29ja19tYXBfcHJvZ191cGRhdGUoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxubmV0L2NvcmUvc29ja19tYXAuYy0zNS1cdFx0XHRcdHN0cnVjdCBicGZfcHJvZyAqb2xkLCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXG5uZXQvY29yZS9zb2NrX21hcC5jLTM2LVx0XHRcdFx0dTMyIHdoaWNoKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmM6Mzc6c3RhdGljIHN0cnVjdCBza19wc29ja19wcm9ncyAqc29ja19tYXBfcHJvZ3Moc3RydWN0IGJwZl9tYXAgKm1hcCk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTM4LVxubmV0L2NvcmUvc29ja19tYXAuYzozOTpzdGF0aWMgc3RydWN0IGJwZl9tYXAgKnNvY2tfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxubmV0L2NvcmUvc29ja19tYXAuYy00MC17XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy02Ny1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6Njg6aW50IHNvY2tfbWFwX2dldF9mcm9tX2ZkKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG5uZXQvY29yZS9zb2NrX21hcC5jLTY5LXtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTgwLVx0bXV0ZXhfbG9jayhcdTAwMjZzb2NrbWFwX211dGV4KTtcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODE6XHRyZXQgPSBzb2NrX21hcF9wcm9nX3VwZGF0ZShtYXAsIHByb2csIE5VTEwsIE5VTEwsIGF0dHItXHUwMDNlYXR0YWNoX3R5cGUpO1xubmV0L2NvcmUvc29ja19tYXAuYy04Mi1cdG11dGV4X3VubG9jayhcdTAwMjZzb2NrbWFwX211dGV4KTtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTg1LVxubmV0L2NvcmUvc29ja19tYXAuYzo4NjppbnQgc29ja19tYXBfcHJvZ19kZXRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGVudW0gYnBmX3Byb2dfdHlwZSBwdHlwZSlcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODcte1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTA5LVx0bXV0ZXhfbG9jayhcdTAwMjZzb2NrbWFwX211dGV4KTtcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTEwOlx0cmV0ID0gc29ja19tYXBfcHJvZ191cGRhdGUobWFwLCBOVUxMLCBwcm9nLCBOVUxMLCBhdHRyLVx1MDAzZWF0dGFjaF90eXBlKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTExLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNnNvY2ttYXBfbXV0ZXgpO1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTE2LVxubmV0L2NvcmUvc29ja19tYXAuYzoxMTc6c3RhdGljIHZvaWQgc29ja19tYXBfc2tfYWNxdWlyZShzdHJ1Y3Qgc29jayAqc2spXG5uZXQvY29yZS9zb2NrX21hcC5jLTExOC1cdF9fYWNxdWlyZXMoXHUwMDI2c2stXHUwMDNlc2tfbG9jay5zbG9jaylcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTEyMy1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTI0OnN0YXRpYyB2b2lkIHNvY2tfbWFwX3NrX3JlbGVhc2Uoc3RydWN0IHNvY2sgKnNrKVxubmV0L2NvcmUvc29ja19tYXAuYy0xMjUtXHRfX3JlbGVhc2VzKFx1MDAyNnNrLVx1MDAzZXNrX2xvY2suc2xvY2spXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xMzAtXG5uZXQvY29yZS9zb2NrX21hcC5jOjEzMTpzdGF0aWMgdm9pZCBzb2NrX21hcF9hZGRfbGluayhzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLFxubmV0L2NvcmUvc29ja19tYXAuYy0xMzItXHRcdFx0ICAgICAgc3RydWN0IHNrX3Bzb2NrX2xpbmsgKmxpbmssXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xNDEtXG5uZXQvY29yZS9zb2NrX21hcC5jOjE0MjpzdGF0aWMgdm9pZCBzb2NrX21hcF9kZWxfbGluayhzdHJ1Y3Qgc29jayAqc2ssXG5uZXQvY29yZS9zb2NrX21hcC5jLTE0My1cdFx0XHQgICAgICBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCB2b2lkICpsaW5rX3Jhdylcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTE1MS1cdFx0XHRzdHJ1Y3QgYnBmX21hcCAqbWFwID0gbGluay1cdTAwM2VtYXA7XG5uZXQvY29yZS9zb2NrX21hcC5jOjE1MjpcdFx0XHRzdHJ1Y3Qgc2tfcHNvY2tfcHJvZ3MgKnByb2dzID0gc29ja19tYXBfcHJvZ3MobWFwKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTUzLVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTc4LVxubmV0L2NvcmUvc29ja19tYXAuYzoxNzk6c3RhdGljIHZvaWQgc29ja19tYXBfdW5yZWYoc3RydWN0IHNvY2sgKnNrLCB2b2lkICpsaW5rX3Jhdylcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTgwLXtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTE4My1cdGlmIChsaWtlbHkocHNvY2spKSB7XG5uZXQvY29yZS9zb2NrX21hcC5jOjE4NDpcdFx0c29ja19tYXBfZGVsX2xpbmsoc2ssIHBzb2NrLCBsaW5rX3Jhdyk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTE4NS1cdFx0c2tfcHNvY2tfcHV0KHNrLCBwc29jayk7XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xODgtXG5uZXQvY29yZS9zb2NrX21hcC5jOjE4OTpzdGF0aWMgaW50IHNvY2tfbWFwX2luaXRfcHJvdG8oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxubmV0L2NvcmUvc29ja19tYXAuYy0xOTAte1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTk2LVxubmV0L2NvcmUvc29ja19tYXAuYzoxOTc6c3RhdGljIHN0cnVjdCBza19wc29jayAqc29ja19tYXBfcHNvY2tfZ2V0X2NoZWNrZWQoc3RydWN0IHNvY2sgKnNrKVxubmV0L2NvcmUvc29ja19tYXAuYy0xOTgte1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMjAzLVx0aWYgKHBzb2NrKSB7XG5uZXQvY29yZS9zb2NrX21hcC5jOjIwNDpcdFx0aWYgKHNrLVx1MDAzZXNrX3Byb3QtXHUwMDNlY2xvc2UgIT0gc29ja19tYXBfY2xvc2UpIHtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMjA1LVx0XHRcdHBzb2NrID0gRVJSX1BUUigtRUJVU1kpO1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMjE2LVxubmV0L2NvcmUvc29ja19tYXAuYzoyMTc6c3RhdGljIGludCBzb2NrX21hcF9saW5rKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBzb2NrICpzaylcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMjE4LXtcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MjE5Olx0c3RydWN0IHNrX3Bzb2NrX3Byb2dzICpwcm9ncyA9IHNvY2tfbWFwX3Byb2dzKG1hcCk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTIyMC1cdHN0cnVjdCBicGZfcHJvZyAqc3RyZWFtX3ZlcmRpY3QgPSBOVUxMO1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMjYwLVxubmV0L2NvcmUvc29ja19tYXAuYzoyNjE6XHRwc29jayA9IHNvY2tfbWFwX3Bzb2NrX2dldF9jaGVja2VkKHNrKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMjYyLVx0aWYgKElTX0VSUihwc29jaykpIHtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTI5Ny1cdCAqL1xubmV0L2NvcmUvc29ja19tYXAuYzoyOTg6XHRyZXQgPSBzb2NrX21hcF9pbml0X3Byb3RvKHNrLCBwc29jayk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTI5OS1cdGlmIChyZXQgXHUwMDNjIDApIHtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTMzOC1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MzM5OnN0YXRpYyB2b2lkIHNvY2tfbWFwX2ZyZWUoc3RydWN0IGJwZl9tYXAgKm1hcClcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzQwLXtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTM1Ny1cdFx0XHRyY3VfcmVhZF9sb2NrKCk7XG5uZXQvY29yZS9zb2NrX21hcC5jOjM1ODpcdFx0XHRzb2NrX21hcF91bnJlZihzaywgcHNrKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzU5LVx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzcxLVxubmV0L2NvcmUvc29ja19tYXAuYzozNzI6c3RhdGljIHZvaWQgc29ja19tYXBfcmVsZWFzZV9wcm9ncyhzdHJ1Y3QgYnBmX21hcCAqbWFwKVxubmV0L2NvcmUvc29ja19tYXAuYy0zNzMte1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzc2LVxubmV0L2NvcmUvc29ja19tYXAuYzozNzc6c3RhdGljIHN0cnVjdCBzb2NrICpfX3NvY2tfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHUzMiBrZXkpXG5uZXQvY29yZS9zb2NrX21hcC5jLTM3OC17XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0zODctXG5uZXQvY29yZS9zb2NrX21hcC5jOjM4ODpzdGF0aWMgdm9pZCAqc29ja19tYXBfbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzg5LXtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTM5MS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MzkyOlx0c2sgPSBfX3NvY2tfbWFwX2xvb2t1cF9lbGVtKG1hcCwgKih1MzIgKilrZXkpO1xubmV0L2NvcmUvc29ja19tYXAuYy0zOTMtXHRpZiAoIXNrKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzk5LVxubmV0L2NvcmUvc29ja19tYXAuYzo0MDA6c3RhdGljIHZvaWQgKnNvY2tfbWFwX2xvb2t1cF9zeXMoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxubmV0L2NvcmUvc29ja19tYXAuYy00MDEte1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDA2LVxubmV0L2NvcmUvc29ja19tYXAuYzo0MDc6XHRzayA9IF9fc29ja19tYXBfbG9va3VwX2VsZW0obWFwLCAqKHUzMiAqKWtleSk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTQwOC1cdGlmICghc2spXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy00MTQtXG5uZXQvY29yZS9zb2NrX21hcC5jOjQxNTpzdGF0aWMgaW50IF9fc29ja19tYXBfZGVsZXRlKHN0cnVjdCBicGZfc3RhYiAqc3RhYiwgc3RydWN0IHNvY2sgKnNrX3Rlc3QsXG5uZXQvY29yZS9zb2NrX21hcC5jLTQxNi1cdFx0XHQgICAgIHN0cnVjdCBzb2NrICoqcHNrKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDI1LVx0aWYgKGxpa2VseShzaykpXG5uZXQvY29yZS9zb2NrX21hcC5jOjQyNjpcdFx0c29ja19tYXBfdW5yZWYoc2ssIHBzayk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTQyNy1cdGVsc2Vcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTQzMy1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6NDM0OnN0YXRpYyB2b2lkIHNvY2tfbWFwX2RlbGV0ZV9mcm9tX2xpbmsoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IHNvY2sgKnNrLFxubmV0L2NvcmUvc29ja19tYXAuYy00MzUtXHRcdFx0XHQgICAgICB2b2lkICpsaW5rX3Jhdylcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTQzOC1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6NDM5Olx0X19zb2NrX21hcF9kZWxldGUoc3RhYiwgc2ssIGxpbmtfcmF3KTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDQwLX1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDQxLVxubmV0L2NvcmUvc29ja19tYXAuYzo0NDI6c3RhdGljIGxvbmcgc29ja19tYXBfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxubmV0L2NvcmUvc29ja19tYXAuYy00NDMte1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDUxLVx0cHNrID0gXHUwMDI2c3RhYi1cdTAwM2Vza3NbaV07XG5uZXQvY29yZS9zb2NrX21hcC5jOjQ1MjpcdHJldHVybiBfX3NvY2tfbWFwX2RlbGV0ZShzdGFiLCBOVUxMLCBwc2spO1xubmV0L2NvcmUvc29ja19tYXAuYy00NTMtfVxubmV0L2NvcmUvc29ja19tYXAuYy00NTQtXG5uZXQvY29yZS9zb2NrX21hcC5jOjQ1NTpzdGF0aWMgaW50IHNvY2tfbWFwX2dldF9uZXh0X2tleShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKm5leHQpXG5uZXQvY29yZS9zb2NrX21hcC5jLTQ1Ni17XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy00NjktXG5uZXQvY29yZS9zb2NrX21hcC5jOjQ3MDpzdGF0aWMgaW50IHNvY2tfbWFwX3VwZGF0ZV9jb21tb24oc3RydWN0IGJwZl9tYXAgKm1hcCwgdTMyIGlkeCxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDcxLVx0XHRcdFx0ICBzdHJ1Y3Qgc29jayAqc2ssIHU2NCBmbGFncylcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTQ4OC1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6NDg5Olx0cmV0ID0gc29ja19tYXBfbGluayhtYXAsIHNrKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDkwLVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTUwNS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6NTA2Olx0c29ja19tYXBfYWRkX2xpbmsocHNvY2ssIGxpbmssIG1hcCwgXHUwMDI2c3RhYi1cdTAwM2Vza3NbaWR4XSk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTUwNy1cdHN0YWItXHUwMDNlc2tzW2lkeF0gPSBzaztcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTA4LVx0aWYgKG9zaylcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NTA5Olx0XHRzb2NrX21hcF91bnJlZihvc2ssIFx1MDAyNnN0YWItXHUwMDNlc2tzW2lkeF0pO1xubmV0L2NvcmUvc29ja19tYXAuYy01MTAtXHRzcGluX3VubG9ja19iaChcdTAwMjZzdGFiLVx1MDAzZWxvY2spO1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTIwLVxubmV0L2NvcmUvc29ja19tYXAuYzo1MjE6c3RhdGljIGJvb2wgc29ja19tYXBfb3Bfb2theShjb25zdCBzdHJ1Y3QgYnBmX3NvY2tfb3BzX2tlcm4gKm9wcylcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTIyLXtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTUyNy1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6NTI4OnN0YXRpYyBib29sIHNvY2tfbWFwX3JlZGlyZWN0X2FsbG93ZWQoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxubmV0L2NvcmUvc29ja19tYXAuYy01Mjkte1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTM1LVxubmV0L2NvcmUvc29ja19tYXAuYzo1MzY6c3RhdGljIGJvb2wgc29ja19tYXBfc2tfaXNfc3VpdGFibGUoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxubmV0L2NvcmUvc29ja19tYXAuYy01Mzcte1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTQwLVxubmV0L2NvcmUvc29ja19tYXAuYzo1NDE6c3RhdGljIGJvb2wgc29ja19tYXBfc2tfc3RhdGVfYWxsb3dlZChjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG5uZXQvY29yZS9zb2NrX21hcC5jLTU0Mi17XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz01NTM9c3RhdGljIGludCBzb2NrX2hhc2hfdXBkYXRlX2NvbW1vbihzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy01NTUtXG5uZXQvY29yZS9zb2NrX21hcC5jOjU1NjppbnQgc29ja19tYXBfdXBkYXRlX2VsZW1fc3lzKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsXG5uZXQvY29yZS9zb2NrX21hcC5jLTU1Ny1cdFx0XHQgICAgIHU2NCBmbGFncylcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTU3OC1cdH1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6NTc5Olx0aWYgKCFzb2NrX21hcF9za19pc19zdWl0YWJsZShzaykpIHtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTgwLVx0XHRyZXQgPSAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTU4My1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6NTg0Olx0c29ja19tYXBfc2tfYWNxdWlyZShzayk7XG5uZXQvY29yZS9zb2NrX21hcC5jOjU4NTpcdGlmICghc29ja19tYXBfc2tfc3RhdGVfYWxsb3dlZChzaykpXG5uZXQvY29yZS9zb2NrX21hcC5jLTU4Ni1cdFx0cmV0ID0gLUVPUE5PVFNVUFA7XG5uZXQvY29yZS9zb2NrX21hcC5jLTU4Ny1cdGVsc2UgaWYgKG1hcC1cdTAwM2VtYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfU09DS01BUClcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NTg4Olx0XHRyZXQgPSBzb2NrX21hcF91cGRhdGVfY29tbW9uKG1hcCwgKih1MzIgKilrZXksIHNrLCBmbGFncyk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTU4OS1cdGVsc2Vcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTkwLVx0XHRyZXQgPSBzb2NrX2hhc2hfdXBkYXRlX2NvbW1vbihtYXAsIGtleSwgc2ssIGZsYWdzKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NTkxOlx0c29ja19tYXBfc2tfcmVsZWFzZShzayk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTU5Mi1vdXQ6XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy01OTYtXG5uZXQvY29yZS9zb2NrX21hcC5jOjU5NzpzdGF0aWMgbG9uZyBzb2NrX21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXG5uZXQvY29yZS9zb2NrX21hcC5jLTU5OC1cdFx0XHRcdCB2b2lkICp2YWx1ZSwgdTY0IGZsYWdzKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjA1LVxubmV0L2NvcmUvc29ja19tYXAuYzo2MDY6XHRpZiAoIXNvY2tfbWFwX3NrX2lzX3N1aXRhYmxlKHNrKSlcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjA3LVx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy02MTAtXHRiaF9sb2NrX3NvY2soc2spO1xubmV0L2NvcmUvc29ja19tYXAuYzo2MTE6XHRpZiAoIXNvY2tfbWFwX3NrX3N0YXRlX2FsbG93ZWQoc2spKVxubmV0L2NvcmUvc29ja19tYXAuYy02MTItXHRcdHJldCA9IC1FT1BOT1RTVVBQO1xubmV0L2NvcmUvc29ja19tYXAuYy02MTMtXHRlbHNlIGlmIChtYXAtXHUwMDNlbWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX1NPQ0tNQVApXG5uZXQvY29yZS9zb2NrX21hcC5jOjYxNDpcdFx0cmV0ID0gc29ja19tYXBfdXBkYXRlX2NvbW1vbihtYXAsICoodTMyICopa2V5LCBzaywgZmxhZ3MpO1xubmV0L2NvcmUvc29ja19tYXAuYy02MTUtXHRlbHNlXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy02MjEtXG5uZXQvY29yZS9zb2NrX21hcC5jOjYyMjpCUEZfQ0FMTF80KGJwZl9zb2NrX21hcF91cGRhdGUsIHN0cnVjdCBicGZfc29ja19vcHNfa2VybiAqLCBzb3BzLFxubmV0L2NvcmUvc29ja19tYXAuYy02MjMtXHQgICBzdHJ1Y3QgYnBmX21hcCAqLCBtYXAsIHZvaWQgKiwga2V5LCB1NjQsIGZsYWdzKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjI2LVxubmV0L2NvcmUvc29ja19tYXAuYzo2Mjc6XHRpZiAobGlrZWx5KHNvY2tfbWFwX3NrX2lzX3N1aXRhYmxlKHNvcHMtXHUwMDNlc2spIFx1MDAyNlx1MDAyNlxubmV0L2NvcmUvc29ja19tYXAuYzo2Mjg6XHRcdCAgIHNvY2tfbWFwX29wX29rYXkoc29wcykpKVxubmV0L2NvcmUvc29ja19tYXAuYzo2Mjk6XHRcdHJldHVybiBzb2NrX21hcF91cGRhdGVfY29tbW9uKG1hcCwgKih1MzIgKilrZXksIHNvcHMtXHUwMDNlc2ssXG5uZXQvY29yZS9zb2NrX21hcC5jLTYzMC1cdFx0XHRcdFx0ICAgICAgZmxhZ3MpO1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjMzLVxubmV0L2NvcmUvc29ja19tYXAuYzo2MzQ6Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zb2NrX21hcF91cGRhdGVfcHJvdG8gPSB7XG5uZXQvY29yZS9zb2NrX21hcC5jOjYzNTpcdC5mdW5jXHRcdD0gYnBmX3NvY2tfbWFwX3VwZGF0ZSxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjM2LVx0LmdwbF9vbmx5XHQ9IGZhbHNlLFxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM9NjQ1PUJQRl9DQUxMXzQoYnBmX3NrX3JlZGlyZWN0X21hcCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLFxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjUyLVxubmV0L2NvcmUvc29ja19tYXAuYzo2NTM6XHRzayA9IF9fc29ja19tYXBfbG9va3VwX2VsZW0obWFwLCBrZXkpO1xubmV0L2NvcmUvc29ja19tYXAuYzo2NTQ6XHRpZiAodW5saWtlbHkoIXNrIHx8ICFzb2NrX21hcF9yZWRpcmVjdF9hbGxvd2VkKHNrKSkpXG5uZXQvY29yZS9zb2NrX21hcC5jLTY1NS1cdFx0cmV0dXJuIFNLX0RST1A7XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz02NzM9QlBGX0NBTExfNChicGZfbXNnX3JlZGlyZWN0X21hcCwgc3RydWN0IHNrX21zZyAqLCBtc2csXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy02ODAtXG5uZXQvY29yZS9zb2NrX21hcC5jOjY4MTpcdHNrID0gX19zb2NrX21hcF9sb29rdXBfZWxlbShtYXAsIGtleSk7XG5uZXQvY29yZS9zb2NrX21hcC5jOjY4MjpcdGlmICh1bmxpa2VseSghc2sgfHwgIXNvY2tfbWFwX3JlZGlyZWN0X2FsbG93ZWQoc2spKSlcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjgzLVx0XHRyZXR1cm4gU0tfRFJPUDtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTY5ND1jb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX21zZ19yZWRpcmVjdF9tYXBfcHJvdG8gPSB7XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy03MDMtXG5uZXQvY29yZS9zb2NrX21hcC5jOjcwNDpzdHJ1Y3Qgc29ja19tYXBfc2VxX2luZm8ge1xubmV0L2NvcmUvc29ja19tYXAuYy03MDUtXHRzdHJ1Y3QgYnBmX21hcCAqbWFwO1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM9NzE3PURFRklORV9CUEZfSVRFUl9GVU5DKHNvY2ttYXAsIHN0cnVjdCBicGZfaXRlcl9tZXRhICptZXRhLFxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzIwLVxubmV0L2NvcmUvc29ja19tYXAuYzo3MjE6c3RhdGljIHZvaWQgKnNvY2tfbWFwX3NlcV9sb29rdXBfZWxlbShzdHJ1Y3Qgc29ja19tYXBfc2VxX2luZm8gKmluZm8pXG5uZXQvY29yZS9zb2NrX21hcC5jLTcyMi17XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy03MjUtXG5uZXQvY29yZS9zb2NrX21hcC5jOjcyNjpcdGluZm8tXHUwMDNlc2sgPSBfX3NvY2tfbWFwX2xvb2t1cF9lbGVtKGluZm8tXHUwMDNlbWFwLCBpbmZvLVx1MDAzZWluZGV4KTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzI3LVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzMxLVxubmV0L2NvcmUvc29ja19tYXAuYzo3MzI6c3RhdGljIHZvaWQgKnNvY2tfbWFwX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpXG5uZXQvY29yZS9zb2NrX21hcC5jLTczMy1cdF9fYWNxdWlyZXMocmN1KVxubmV0L2NvcmUvc29ja19tYXAuYy03MzQte1xubmV0L2NvcmUvc29ja19tYXAuYzo3MzU6XHRzdHJ1Y3Qgc29ja19tYXBfc2VxX2luZm8gKmluZm8gPSBzZXEtXHUwMDNlcHJpdmF0ZTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzM2LVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzM5LVxubmV0L2NvcmUvc29ja19tYXAuYzo3NDA6XHQvKiBwYWlycyB3aXRoIHNvY2tfbWFwX3NlcV9zdG9wICovXG5uZXQvY29yZS9zb2NrX21hcC5jLTc0MS1cdHJjdV9yZWFkX2xvY2soKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NzQyOlx0cmV0dXJuIHNvY2tfbWFwX3NlcV9sb29rdXBfZWxlbShpbmZvKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzQzLX1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzQ0LVxubmV0L2NvcmUvc29ja19tYXAuYzo3NDU6c3RhdGljIHZvaWQgKnNvY2tfbWFwX3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBsb2ZmX3QgKnBvcylcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzQ2LVx0X19tdXN0X2hvbGQocmN1KVxubmV0L2NvcmUvc29ja19tYXAuYy03NDcte1xubmV0L2NvcmUvc29ja19tYXAuYzo3NDg6XHRzdHJ1Y3Qgc29ja19tYXBfc2VxX2luZm8gKmluZm8gPSBzZXEtXHUwMDNlcHJpdmF0ZTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzQ5LVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzUyLVxubmV0L2NvcmUvc29ja19tYXAuYzo3NTM6XHRyZXR1cm4gc29ja19tYXBfc2VxX2xvb2t1cF9lbGVtKGluZm8pO1xubmV0L2NvcmUvc29ja19tYXAuYy03NTQtfVxubmV0L2NvcmUvc29ja19tYXAuYy03NTUtXG5uZXQvY29yZS9zb2NrX21hcC5jOjc1NjpzdGF0aWMgaW50IHNvY2tfbWFwX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxubmV0L2NvcmUvc29ja19tYXAuYy03NTctXHRfX211c3RfaG9sZChyY3UpXG5uZXQvY29yZS9zb2NrX21hcC5jLTc1OC17XG5uZXQvY29yZS9zb2NrX21hcC5jOjc1OTpcdHN0cnVjdCBzb2NrX21hcF9zZXFfaW5mbyAqaW5mbyA9IHNlcS1cdTAwM2Vwcml2YXRlO1xubmV0L2NvcmUvc29ja19tYXAuYy03NjAtXHRzdHJ1Y3QgYnBmX2l0ZXJfX3NvY2ttYXAgY3R4ID0ge307XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy03NzgtXG5uZXQvY29yZS9zb2NrX21hcC5jOjc3OTpzdGF0aWMgdm9pZCBzb2NrX21hcF9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzgwLVx0X19yZWxlYXNlcyhyY3UpXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy03ODItXHRpZiAoIXYpXG5uZXQvY29yZS9zb2NrX21hcC5jOjc4MzpcdFx0KHZvaWQpc29ja19tYXBfc2VxX3Nob3coc2VxLCBOVUxMKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzg0LVxubmV0L2NvcmUvc29ja19tYXAuYzo3ODU6XHQvKiBwYWlycyB3aXRoIHNvY2tfbWFwX3NlcV9zdGFydCAqL1xubmV0L2NvcmUvc29ja19tYXAuYy03ODYtXHRyY3VfcmVhZF91bmxvY2soKTtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTc4OC1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6Nzg5OnN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgc29ja19tYXBfc2VxX29wcyA9IHtcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NzkwOlx0LnN0YXJ0XHQ9IHNvY2tfbWFwX3NlcV9zdGFydCxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NzkxOlx0Lm5leHRcdD0gc29ja19tYXBfc2VxX25leHQsXG5uZXQvY29yZS9zb2NrX21hcC5jOjc5MjpcdC5zdG9wXHQ9IHNvY2tfbWFwX3NlcV9zdG9wLFxubmV0L2NvcmUvc29ja19tYXAuYzo3OTM6XHQuc2hvd1x0PSBzb2NrX21hcF9zZXFfc2hvdyxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzk0LX07XG5uZXQvY29yZS9zb2NrX21hcC5jLTc5NS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6Nzk2OnN0YXRpYyBpbnQgc29ja19tYXBfaW5pdF9zZXFfcHJpdmF0ZSh2b2lkICpwcml2X2RhdGEsXG5uZXQvY29yZS9zb2NrX21hcC5jLTc5Ny1cdFx0XHRcdCAgICAgc3RydWN0IGJwZl9pdGVyX2F1eF9pbmZvICphdXgpXG5uZXQvY29yZS9zb2NrX21hcC5jLTc5OC17XG5uZXQvY29yZS9zb2NrX21hcC5jOjc5OTpcdHN0cnVjdCBzb2NrX21hcF9zZXFfaW5mbyAqaW5mbyA9IHByaXZfZGF0YTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODAwLVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtODA1LVxubmV0L2NvcmUvc29ja19tYXAuYzo4MDY6c3RhdGljIHZvaWQgc29ja19tYXBfZmluaV9zZXFfcHJpdmF0ZSh2b2lkICpwcml2X2RhdGEpXG5uZXQvY29yZS9zb2NrX21hcC5jLTgwNy17XG5uZXQvY29yZS9zb2NrX21hcC5jOjgwODpcdHN0cnVjdCBzb2NrX21hcF9zZXFfaW5mbyAqaW5mbyA9IHByaXZfZGF0YTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODA5LVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtODEyLVxubmV0L2NvcmUvc29ja19tYXAuYzo4MTM6c3RhdGljIHU2NCBzb2NrX21hcF9tZW1fdXNhZ2UoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcClcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODE0LXtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTgyMC1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODIxOnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2l0ZXJfc2VxX2luZm8gc29ja19tYXBfaXRlcl9zZXFfaW5mbyA9IHtcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODIyOlx0LnNlcV9vcHNcdFx0PSBcdTAwMjZzb2NrX21hcF9zZXFfb3BzLFxubmV0L2NvcmUvc29ja19tYXAuYzo4MjM6XHQuaW5pdF9zZXFfcHJpdmF0ZVx0PSBzb2NrX21hcF9pbml0X3NlcV9wcml2YXRlLFxubmV0L2NvcmUvc29ja19tYXAuYzo4MjQ6XHQuZmluaV9zZXFfcHJpdmF0ZVx0PSBzb2NrX21hcF9maW5pX3NlcV9wcml2YXRlLFxubmV0L2NvcmUvc29ja19tYXAuYzo4MjU6XHQuc2VxX3ByaXZfc2l6ZVx0XHQ9IHNpemVvZihzdHJ1Y3Qgc29ja19tYXBfc2VxX2luZm8pLFxubmV0L2NvcmUvc29ja19tYXAuYy04MjYtfTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODI3LVxubmV0L2NvcmUvc29ja19tYXAuYzo4Mjg6QlRGX0lEX0xJU1RfU0lOR0xFKHNvY2tfbWFwX2J0Zl9pZHMsIHN0cnVjdCwgYnBmX3N0YWIpXG5uZXQvY29yZS9zb2NrX21hcC5jOjgyOTpjb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgc29ja19tYXBfb3BzID0ge1xubmV0L2NvcmUvc29ja19tYXAuYy04MzAtXHQubWFwX21ldGFfZXF1YWxcdFx0PSBicGZfbWFwX21ldGFfZXF1YWwsXG5uZXQvY29yZS9zb2NrX21hcC5jOjgzMTpcdC5tYXBfYWxsb2NcdFx0PSBzb2NrX21hcF9hbGxvYyxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODMyOlx0Lm1hcF9mcmVlXHRcdD0gc29ja19tYXBfZnJlZSxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODMzOlx0Lm1hcF9nZXRfbmV4dF9rZXlcdD0gc29ja19tYXBfZ2V0X25leHRfa2V5LFxubmV0L2NvcmUvc29ja19tYXAuYzo4MzQ6XHQubWFwX2xvb2t1cF9lbGVtX3N5c19vbmx5ID0gc29ja19tYXBfbG9va3VwX3N5cyxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODM1Olx0Lm1hcF91cGRhdGVfZWxlbVx0PSBzb2NrX21hcF91cGRhdGVfZWxlbSxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODM2Olx0Lm1hcF9kZWxldGVfZWxlbVx0PSBzb2NrX21hcF9kZWxldGVfZWxlbSxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODM3Olx0Lm1hcF9sb29rdXBfZWxlbVx0PSBzb2NrX21hcF9sb29rdXAsXG5uZXQvY29yZS9zb2NrX21hcC5jOjgzODpcdC5tYXBfcmVsZWFzZV91cmVmXHQ9IHNvY2tfbWFwX3JlbGVhc2VfcHJvZ3MsXG5uZXQvY29yZS9zb2NrX21hcC5jLTgzOS1cdC5tYXBfY2hlY2tfYnRmXHRcdD0gbWFwX2NoZWNrX25vX2J0Zixcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODQwOlx0Lm1hcF9tZW1fdXNhZ2VcdFx0PSBzb2NrX21hcF9tZW1fdXNhZ2UsXG5uZXQvY29yZS9zb2NrX21hcC5jOjg0MTpcdC5tYXBfYnRmX2lkXHRcdD0gXHUwMDI2c29ja19tYXBfYnRmX2lkc1swXSxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODQyOlx0Lml0ZXJfc2VxX2luZm9cdFx0PSBcdTAwMjZzb2NrX21hcF9pdGVyX3NlcV9pbmZvLFxubmV0L2NvcmUvc29ja19tYXAuYy04NDMtfTtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTkxNj1zdGF0aWMgdm9pZCBzb2NrX2hhc2hfZGVsZXRlX2Zyb21fbGluayhzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy05MzQtXHRcdGhsaXN0X2RlbF9yY3UoXHUwMDI2ZWxlbS1cdTAwM2Vub2RlKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmM6OTM1Olx0XHRzb2NrX21hcF91bnJlZihlbGVtLVx1MDAzZXNrLCBlbGVtKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtOTM2LVx0XHRzb2NrX2hhc2hfZnJlZV9lbGVtKGh0YWIsIGVsZW0pO1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM9OTQxPXN0YXRpYyBsb25nIHNvY2tfaGFzaF9kZWxldGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy05NTUtXHRcdGhsaXN0X2RlbF9yY3UoXHUwMDI2ZWxlbS1cdTAwM2Vub2RlKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmM6OTU2Olx0XHRzb2NrX21hcF91bnJlZihlbGVtLVx1MDAzZXNrLCBlbGVtKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtOTU3LVx0XHRzb2NrX2hhc2hfZnJlZV9lbGVtKGh0YWIsIGVsZW0pO1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM9OTkxPXN0YXRpYyBpbnQgc29ja19oYXNoX3VwZGF0ZV9jb21tb24oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTAwOS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTAxMDpcdHJldCA9IHNvY2tfbWFwX2xpbmsobWFwLCBzayk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTEwMTEtXHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTAzNS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTAzNjpcdHNvY2tfbWFwX2FkZF9saW5rKHBzb2NrLCBsaW5rLCBtYXAsIGVsZW1fbmV3KTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTAzNy1cdC8qIEFkZCBuZXcgZWxlbWVudCB0byB0aGUgaGVhZCBvZiB0aGUgbGlzdCwgc28gdGhhdFxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTA0Mi1cdFx0aGxpc3RfZGVsX3JjdShcdTAwMjZlbGVtLVx1MDAzZW5vZGUpO1xubmV0L2NvcmUvc29ja19tYXAuYzoxMDQzOlx0XHRzb2NrX21hcF91bnJlZihlbGVtLVx1MDAzZXNrLCBlbGVtKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTA0NC1cdFx0c29ja19oYXNoX2ZyZWVfZWxlbShodGFiLCBlbGVtKTtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTExNDQ9c3RhdGljIHZvaWQgc29ja19oYXNoX2ZyZWUoc3RydWN0IGJwZl9tYXAgKm1hcClcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTExODAtXHRcdFx0cmN1X3JlYWRfbG9jaygpO1xubmV0L2NvcmUvc29ja19tYXAuYzoxMTgxOlx0XHRcdHNvY2tfbWFwX3VucmVmKGVsZW0tXHUwMDNlc2ssIGVsZW0pO1xubmV0L2NvcmUvc29ja19tYXAuYy0xMTgyLVx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM9MTIyOT1CUEZfQ0FMTF80KGJwZl9zb2NrX2hhc2hfdXBkYXRlLCBzdHJ1Y3QgYnBmX3NvY2tfb3BzX2tlcm4gKiwgc29wcyxcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTEyMzMtXG5uZXQvY29yZS9zb2NrX21hcC5jOjEyMzQ6XHRpZiAobGlrZWx5KHNvY2tfbWFwX3NrX2lzX3N1aXRhYmxlKHNvcHMtXHUwMDNlc2spIFx1MDAyNlx1MDAyNlxubmV0L2NvcmUvc29ja19tYXAuYzoxMjM1Olx0XHQgICBzb2NrX21hcF9vcF9va2F5KHNvcHMpKSlcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTIzNi1cdFx0cmV0dXJuIHNvY2tfaGFzaF91cGRhdGVfY29tbW9uKG1hcCwga2V5LCBzb3BzLVx1MDAzZXNrLCBmbGFncyk7XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz0xMjUxPUJQRl9DQUxMXzQoYnBmX3NrX3JlZGlyZWN0X2hhc2gsIHN0cnVjdCBza19idWZmICosIHNrYixcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTEyNTktXHRzayA9IF9fc29ja19oYXNoX2xvb2t1cF9lbGVtKG1hcCwga2V5KTtcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTI2MDpcdGlmICh1bmxpa2VseSghc2sgfHwgIXNvY2tfbWFwX3JlZGlyZWN0X2FsbG93ZWQoc2spKSlcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTI2MS1cdFx0cmV0dXJuIFNLX0RST1A7XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz0xMjc5PUJQRl9DQUxMXzQoYnBmX21zZ19yZWRpcmVjdF9oYXNoLCBzdHJ1Y3Qgc2tfbXNnICosIG1zZyxcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTEyODctXHRzayA9IF9fc29ja19oYXNoX2xvb2t1cF9lbGVtKG1hcCwga2V5KTtcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTI4ODpcdGlmICh1bmxpa2VseSghc2sgfHwgIXNvY2tfbWFwX3JlZGlyZWN0X2FsbG93ZWQoc2spKSlcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTI4OS1cdFx0cmV0dXJuIFNLX0RST1A7XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz0xNDQ1PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBzb2NrX2hhc2hfb3BzID0ge1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTQ0OS1cdC5tYXBfZ2V0X25leHRfa2V5XHQ9IHNvY2tfaGFzaF9nZXRfbmV4dF9rZXksXG5uZXQvY29yZS9zb2NrX21hcC5jOjE0NTA6XHQubWFwX3VwZGF0ZV9lbGVtXHQ9IHNvY2tfbWFwX3VwZGF0ZV9lbGVtLFxubmV0L2NvcmUvc29ja19tYXAuYy0xNDUxLVx0Lm1hcF9kZWxldGVfZWxlbVx0PSBzb2NrX2hhc2hfZGVsZXRlX2VsZW0sXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xNDYwLVxubmV0L2NvcmUvc29ja19tYXAuYzoxNDYxOnN0YXRpYyBzdHJ1Y3Qgc2tfcHNvY2tfcHJvZ3MgKnNvY2tfbWFwX3Byb2dzKHN0cnVjdCBicGZfbWFwICptYXApXG5uZXQvY29yZS9zb2NrX21hcC5jLTE0NjIte1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTQ3NC1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTQ3NTpzdGF0aWMgaW50IHNvY2tfbWFwX3Byb2dfbGlua19sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9wcm9nICoqKnBwcm9nLFxubmV0L2NvcmUvc29ja19tYXAuYy0xNDc2LVx0XHRcdFx0ICAgICBzdHJ1Y3QgYnBmX2xpbmsgKioqcGxpbmssIHUzMiB3aGljaClcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTQ3Ny17XG5uZXQvY29yZS9zb2NrX21hcC5jOjE0Nzg6XHRzdHJ1Y3Qgc2tfcHNvY2tfcHJvZ3MgKnByb2dzID0gc29ja19tYXBfcHJvZ3MobWFwKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTQ3OS1cdHN0cnVjdCBicGZfcHJvZyAqKmN1cl9wcHJvZztcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTE1MjMtICovXG5uZXQvY29yZS9zb2NrX21hcC5jOjE1MjQ6c3RhdGljIGludCBzb2NrX21hcF9wcm9nX3VwZGF0ZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG5uZXQvY29yZS9zb2NrX21hcC5jLTE1MjUtXHRcdFx0XHRzdHJ1Y3QgYnBmX3Byb2cgKm9sZCwgc3RydWN0IGJwZl9saW5rICpsaW5rLFxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTUzMS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTUzMjpcdHJldCA9IHNvY2tfbWFwX3Byb2dfbGlua19sb29rdXAobWFwLCBcdTAwMjZwcHJvZywgXHUwMDI2cGxpbmssIHdoaWNoKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTUzMy1cdGlmIChyZXQpXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xNTU0LVxubmV0L2NvcmUvc29ja19tYXAuYzoxNTU1OmludCBzb2NrX21hcF9icGZfcHJvZ19xdWVyeShjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTU1Ni1cdFx0XHQgICAgdW5pb24gYnBmX2F0dHIgX191c2VyICp1YXR0cilcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTE1NzUtXG5uZXQvY29yZS9zb2NrX21hcC5jOjE1NzY6XHRyZXQgPSBzb2NrX21hcF9wcm9nX2xpbmtfbG9va3VwKG1hcCwgXHUwMDI2cHByb2csIE5VTEwsIGF0dHItXHUwMDNlcXVlcnkuYXR0YWNoX3R5cGUpO1xubmV0L2NvcmUvc29ja19tYXAuYy0xNTc3LVx0aWYgKHJldClcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTE2MDMtXG5uZXQvY29yZS9zb2NrX21hcC5jOjE2MDQ6c3RhdGljIHZvaWQgc29ja19tYXBfdW5saW5rKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrX2xpbmsgKmxpbmspXG5uZXQvY29yZS9zb2NrX21hcC5jLTE2MDUte1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTYwNy1cdGNhc2UgQlBGX01BUF9UWVBFX1NPQ0tNQVA6XG5uZXQvY29yZS9zb2NrX21hcC5jOjE2MDg6XHRcdHJldHVybiBzb2NrX21hcF9kZWxldGVfZnJvbV9saW5rKGxpbmstXHUwMDNlbWFwLCBzayxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTYwOS1cdFx0XHRcdFx0XHQgbGluay1cdTAwM2VsaW5rX3Jhdyk7XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xNjE3LVxubmV0L2NvcmUvc29ja19tYXAuYzoxNjE4OnN0YXRpYyB2b2lkIHNvY2tfbWFwX3JlbW92ZV9saW5rcyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2spXG5uZXQvY29yZS9zb2NrX21hcC5jLTE2MTkte1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTYyMi1cdHdoaWxlICgobGluayA9IHNrX3Bzb2NrX2xpbmtfcG9wKHBzb2NrKSkpIHtcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTYyMzpcdFx0c29ja19tYXBfdW5saW5rKHNrLCBsaW5rKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTYyNC1cdFx0c2tfcHNvY2tfZnJlZV9saW5rKGxpbmspO1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTYyNy1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTYyODp2b2lkIHNvY2tfbWFwX3VuaGFzaChzdHJ1Y3Qgc29jayAqc2spXG5uZXQvY29yZS9zb2NrX21hcC5jLTE2Mjkte1xuLS1cblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAyMzowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTEyMAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEwMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNvY2ttYXAgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIHNvY2ttYXAgdGhpbmcuIFRoZSBkb2N1bWVudGF0aW9uIHN0YXRlcyB0aGF0IGBDT05GSUdfQlBGX1NZU0NBTExgIGVuYWJsZXMgaXQuIFJpZ2h0LCBtYWtlcyBzZW5zZSwgdGhhdCYjMzk7cyB3aGF0IEkmIzM5O2QgZXhwZWN0LiBOb3csIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IGluIHRoZSBrZXJuZWwgc291cmNlLiBBaCwgaGVyZSB3ZSBhcmUgaW4gYG5ldC9jb3JlL01ha2VmaWxlYC4gQW5kIGl0IGNvbmZpcm1zOiBgb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gc29ja19tYXAub2AuIFNvLCB5ZWFoLCBpdCAqaXMqIGp1c3QgYENPTkZJR19CUEZfU1lTQ0FMTGAgdGhhdCBhY3RpdmF0ZXMgdGhlIHNvY2ttYXAgb2JqZWN0LiBIbW0sIGJ1dCB3YWl0LiBUaGlua2luZyBhIGJpdCBtb3JlIGRlZXBseSBhYm91dCB0aGlzLCBzaW5jZSBgc29ja19tYXAub2AgaXMgbG9jYXRlZCBpbiB0aGUgYG5ldC9jb3JlL2AgZGlyZWN0b3J5LCBJIGJldCB3ZSBuZWVkIGBDT05GSUdfTkVUYCB0b28sIGV2ZW4gdGhvdWdoIGl0JiMzOTtzIG5vdCBleHBsaWNpdGx5IG1lbnRpb25lZC4gTGV0JiMzOTtzIGp1c3QgY29uZmlybSB0aGF0IGJ5IHRha2luZyBhIHF1aWNrIGxvb2sgYXQgYG5ldC9jb3JlL01ha2VmaWxlYCBhZ2Fpbi4gR29vZCBwcmFjdGljZSB0byBiZSB0aG9yb3VnaCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAyMzowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfQlBGX1NZU0NBTEwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvTWFrZWZpbGU9NDQ9b2JqLSQoQ09ORklHX05FVF9TT0NLX01TRykgJiM0Mzs9IHNrbXNnLm9cbm5ldC9jb3JlL01ha2VmaWxlOjQ1Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHNvY2tfbWFwLm9cbm5ldC9jb3JlL01ha2VmaWxlOjQ2Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9za19zdG9yYWdlLm9cbm5ldC9jb3JlL01ha2VmaWxlLTQ3LW9iai0kKENPTkZJR19PRilcdCYjNDM7PSBvZl9uZXQub1xuLS1cbm5ldC9jb3JlL2Rldi5oPTM4MT1pbnQgcnBzX2NwdW1hc2tfaG91c2VrZWVwaW5nKHN0cnVjdCBjcHVtYXNrICptYXNrKTtcbm5ldC9jb3JlL2Rldi5oLTM4Mi1cbm5ldC9jb3JlL2Rldi5oOjM4MzojaWYgZGVmaW5lZChDT05GSUdfREVCVUdfTkVUKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfQlBGX1NZU0NBTEwpXG5uZXQvY29yZS9kZXYuaC0zODQtdm9pZCB4ZHBfZG9fY2hlY2tfZmx1c2hlZChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTQ0NDE9RVhQT1JUX1NZTUJPTF9HUEwoeGRwX2RvX2ZsdXNoKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTQ0NDItXG5uZXQvY29yZS9maWx0ZXIuYzo0NDQzOiNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19ORVQpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19CUEZfU1lTQ0FMTClcbm5ldC9jb3JlL2ZpbHRlci5jLTQ0NDQtdm9pZCB4ZHBfZG9fY2hlY2tfZmx1c2hlZChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpXG4tLVxubmV0L2NvcmUvZmxvd19kaXNzZWN0b3IuYz03ND1FWFBPUlRfU1lNQk9MKHNrYl9mbG93X2Rpc3NlY3Rvcl9pbml0KTtcbm5ldC9jb3JlL2Zsb3dfZGlzc2VjdG9yLmMtNzUtXG5uZXQvY29yZS9mbG93X2Rpc3NlY3Rvci5jOjc2OiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbm5ldC9jb3JlL2Zsb3dfZGlzc2VjdG9yLmMtNzctaW50IGZsb3dfZGlzc2VjdG9yX2JwZl9wcm9nX2F0dGFjaF9jaGVjayhzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L2NvcmUvZmxvd19kaXNzZWN0b3IuYy0xMDUtfVxubmV0L2NvcmUvZmxvd19kaXNzZWN0b3IuYzoxMDY6I2VuZGlmIC8qIENPTkZJR19CUEZfU1lTQ0FMTCAqL1xubmV0L2NvcmUvZmxvd19kaXNzZWN0b3IuYy0xMDctXG4tLVxubmV0L2NvcmUvc29jay5jPTIzNTA9c3RhdGljIHZvaWQgX19za19kZXN0cnVjdChzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXG4tLVxubmV0L2NvcmUvc29jay5jLTIzNjctXG5uZXQvY29yZS9zb2NrLmM6MjM2ODojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG5uZXQvY29yZS9zb2NrLmMtMjM2OS1cdGJwZl9za19zdG9yYWdlX2ZyZWUoc2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAyMzowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjA3MQoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgc28gSSYjMzk7dmUgZ290IGEgY291cGxlIG9mIGtleSBkZXBlbmRlbmNpZXMgaWRlbnRpZmllZCByaWdodCBvZmYgdGhlIGJhdDogYENPTkZJR19CUEZfU1lTQ0FMTGAgYW5kIGBDT05GSUdfTkVUYC4gVGhhdCBmZWVscyByaWdodCwgYnV0IGxldCYjMzk7cyBub3QgbWFrZSBhbnkgYXNzdW1wdGlvbnMuIEkgbmVlZCB0byBleHBsaWNpdGx5IHZlcmlmeSB0aGF0IGBDT05GSUdfTkVUYCBpcyBpbmRlZWQgYSBoYXJkIHJlcXVpcmVtZW50IGZvciB0aGUgYHNvY2tfbWFwLm9gIG9iamVjdC4KCkEgcXVpY2sgY3Jvc3MtcmVmZXJlbmNlIHdvdWxkIGJlIGluIG9yZGVyLiBBaCwgeWVzLCBsb29raW5nIGF0IHRoZSBidWlsZCBwcm9jZXNzLCBpdCYjMzk7cyBjbGVhciB0aGF0IHRoZSBgbmV0L2NvcmUvYCBkaXJlY3RvcnkgZ2V0cyBidWlsdCBvbmx5IHdoZW4gYENPTkZJR19ORVRgIGlzIGVuYWJsZWQuIFRoYXQgY29uZmlybXMgbXkgaW5pdGlhbCBpbnR1aXRpb24uIE5vdywgdG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIHJlYWxseSBnbGFuY2UgYXQgYG5ldC9NYWtlZmlsZWAgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgc25lYWt5IGNvbmRpdGlvbmFsIGluY2x1c2lvbnMgb3IgYml6YXJyZSBidWlsZCBydWxlcyBJJiMzOTttIG1pc3NpbmcuIEFsd2F5cyBnb29kIHRvIGRvdWJsZS1jaGVjayB0aG9zZSBNYWtlZmlsZSBkZXBlbmRlbmNpZXMsIGp1c3QgdG8gYmUgc2FmZS4gSXQmIzM5O3MgdGhlIGRldmlsIGluIHRoZSBkZXRhaWxzLCBhZnRlciBhbGwhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDIzOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvcmUvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9NYWtlZmlsZS04LVxubmV0L01ha2VmaWxlOjk6b2JqLXlcdFx0XHRcdDo9IGRldnJlcy5vIHNvY2tldC5vIGNvcmUvXG5uZXQvTWFrZWZpbGUtMTAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDIzOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNDIzCgkJCQkJCQlvdXRwdXQ6IDEzMAoJCQkJCQkJdGhvdWdodHM6IDEwMDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEJQRiBWZXJpZmllciBSZXN0cmljdGlvbnMgZm9yIEZ1enppbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBmb3IgZnV6emluZy4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHJlc3RyaWN0cyBzb2NrbWFwIHVwZGF0ZXMgd2l0aGluIHRoZSBCUEYgdmVyaWZpZXIuIFRoZSBjb3JlIGlkZWEgaXMgdGhhdCBjZXJ0YWluIEJQRiBwcm9ncmFtIHR5cGVzIGFyZSBubyBsb25nZXIgYWxsb3dlZCB0byBtb2RpZnkgc29ja21hcHMuIFRoaXMgaXMgYSBjcnVjaWFsIGNoYW5nZSBpbiB0aGUgdmVyaWZpZXImIzM5O3MgYmVoYXZpb3IuIFNvIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZXN0YWJsaXNoIGlzIHRoZSBjb25maWd1cmF0aW9uIGFuZCBmb2N1cyBzeW1ib2xzIGZvciBmdXp6aW5nIHRoaXMgcGF0Y2guCgpSaWdodCwgdGhlIGJhc2UgY29uZmlndXJhdGlvbiBpcyBkZXRlcm1pbmVkIGJ5IGBDT05GSUdfTkVUYCBiZWNhdXNlIHRoZSBgbmV0L2AgZGlyZWN0b3J5IGlzIGJ1aWx0IHdoZW4gYENPTkZJR19ORVRgIGlzIGVuYWJsZWQuIEFuZCwgb2YgY291cnNlLCBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBlc3NlbnRpYWwsIHNpbmNlIGl0JiMzOTtzIGEgQlBGLXJlbGF0ZWQgY2hhbmdlLiBTbyB0aG9zZSBhcmUgbXkgaW5pdGlhbCBjb25maWcgYXNzdW1wdGlvbnM6IGBDT05GSUdfTkVUYCBhbmQgYENPTkZJR19CUEZfU1lTQ0FMTGAuCgpOb3csIGxldCYjMzk7cyBpZGVudGlmeSB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIHRoaXMgcGF0Y2ggdG91Y2hlcyBkaXJlY3RseS4gRnJvbSB0aGUgY29kZSwgdGhlIGtleSBzeW1ib2xzIGhlcmUgc2VlbSB0byBiZSBgbWF5X3VwZGF0ZV9zb2NrbWFwYCBhbmQgYGNoZWNrX21hcF9mdW5jX2NvbXBhdGliaWxpdHlgLiBXYWl0LCBgbWF5X3VwZGF0ZV9zb2NrbWFwYCBpcyBzdGF0aWMsIHdoaWNoIGlzIHVzdWFsbHkgb2theSB3aXRoIGZ1enppbmcgdG9vbHMuIFRoZSBjaGVjayBpcyBjYWxsZWQgYnkgYGNoZWNrX21hcF9mdW5jX2NvbXBhdGliaWxpdHlgIHdoaWNoIGluIHR1cm4gaXMgY2FsbGVkIGJ5IGBjaGVja19oZWxwZXJfY2FsbGAgd2hpY2ggaXMgY2FsbGVkIGJ5IGBkb19jaGVja2AuIFRoaXMgbWFrZXMgaXQgcmVhY2hhYmxlLiBTbyB0aGF0IGNvbmZpcm1zIHRob3NlIGFzIHZhbGlkIGZvY3VzIHN5bWJvbHMuCgpJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLCBsaWtlIGEgZGVwZW5kZW5jeSBvbiBgQ09ORklHX0NHUk9VUF9CUEZgLCBidXQgaXQgbG9va3MgbGlrZSB0aGUgbW9kaWZpY2F0aW9uIGlzIHJlc3RyaWN0ZWQgdG8gdGhlIHZlcmlmaWVyIGl0c2VsZiB3aGljaCBpcyBhbHdheXMgYnVpbHQgaWYgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgZW5hYmxlZC4gVGhlIHBhdGNoIGFmZmVjdHMgYEJQRl9QUk9HX1RZUEVfU09DS0VUX0ZJTFRFUmAsIGBCUEZfUFJPR19UWVBFX1NDSEVEX0NMU2AsIGBCUEZfUFJPR19UWVBFX1NDSEVEX0FDVGAsIGBCUEZfUFJPR19UWVBFX1hEUGAsIGFuZCBgQlBGX1BST0dfVFlQRV9GTE9XX0RJU1NFQ1RPUmAuCgpgQlBGX1BST0dfVFlQRV9TT0NLRVRfRklMVEVSYCBkZXBlbmRzIG9uIGBDT05GSUdfTkVUYC4gYEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTYCBhbmQgYEJQRl9QUk9HX1RZUEVfU0NIRURfQUNUYCBkZXBlbmQgb24gYENPTkZJR19ORVRfU0NIRURgLiBgQlBGX1BST0dfVFlQRV9YRFBgIGFuZCBgQlBGX1BST0dfVFlQRV9GTE9XX0RJU1NFQ1RPUmAgYWxzbyBkZXBlbmQgb24gYENPTkZJR19ORVRgLgoKU28gZGVmaW5pdGVseSBgQ09ORklHX05FVGAgYW5kIGBDT05GSUdfQlBGX1NZU0NBTExgIGFyZSBuZWVkZWQuCgpgQ09ORklHX05FVF9TQ0hFRGAgaXNuJiMzOTt0IHN0cmljdGx5IG5lY2Vzc2FyeSBmb3IgY29tcGlsYXRpb24gYnV0IGRvZXMgYWxsb3cgdGVzdGluZyBgU0NIRURfQ0xTYCBhbmQgYFNDSEVEX0FDVGAsIGJ1dCBzaW5jZSB0aGUgdmVyaWZpZXIgY29kZSBkb2VzbiYjMzk7dCByZWx5IG9uIGl0LCBpdCBsb29rcyBsaWtlIGBDT05GSUdfQlBGX1NZU0NBTExgIGFuZCBgQ09ORklHX05FVGAgYXJlIHN1ZmZpY2llbnQuIFRoZSBgQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFNgIGFuZCBvdGhlciB0eXBlcyBhcmUgZGVmaW5lZCBpbiBgaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oYCBhbmQgdGhlIHZlcmlmaWVyIHdpbGwgdXNlIHRoYXQgaW5mb3JtYXRpb24uCgpIZXJlJiMzOTtzIHdoYXQgSSYjMzk7dmUgZ290OgoKKiAgICoqV29ydGhGdXp6aW5nKio6IGB0cnVlYAoqICAgKipGb2N1c1N5bWJvbHMqKjoKICAgICogICBgbWF5X3VwZGF0ZV9zb2NrbWFwYAogICAgKiAgIGBjaGVja19tYXBfZnVuY19jb21wYXRpYmlsaXR5YAoqICAgKipFbmFibGVDb25maWdzKio6CiAgICAqICAgYEJQRl9TWVNDQUxMYAogICAgKiAgIGBORVRgCgpDb25maXJtaW5nIGBtYXlfdXBkYXRlX3NvY2ttYXBgIGFuZCBgY2hlY2tfbWFwX2Z1bmNfY29tcGF0aWJpbGl0eWAgYXJlIHN0YXRpYywgYW5kIHRoYXQgc3l6a2FsbGVyIGNhbiBoYW5kbGUgdGhpcy4gQWxzbywgcmV2aWV3aW5nIGNoYW5nZXMgdG8gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi8qYCB3aGljaCBhcmUganVzdCBzZWxmdGVzdHMuCgpUaGlzIHBhdGNoIGlzIGNoYW5naW5nIHRoZSB2ZXJpZmllciwgc28gaXQgcmVxdWlyZXMgZnV6emluZy4gVGhlIGNvbmZpZ3VyYXRpb24gYW5kIGZvY3VzIHN5bWJvbHMgYXJlIHdoYXQgSSBuZWVkIHRvIHRhcmdldCBmb3IgZnV6emluZy4gSSBjYW4gY2FsbCBzZXQtcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMjM6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21heV91cGRhdGVfc29ja21hcCYjMzQ7LAogICAgJiMzNDtjaGVja19tYXBfZnVuY19jb21wYXRpYmlsaXR5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlc3RyaWN0cyBjZXJ0YWluIEJQRiBwcm9ncmFtIHR5cGVzIGZyb20gdXBkYXRpbmcgc29ja21hcHMgaW4gdGhlIEJQRiB2ZXJpZmllci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiB2ZXJpZmllciBsb2dpYyB0aGF0IGFmZmVjdHMgd2hhdCBCUEYgcHJvZ3JhbXMgYXJlIGFsbG93ZWQgdG8gZG8uIEl0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSB2ZXJpZmllciBjb3JyZWN0bHkgcmVqZWN0cyBpbnZhbGlkIHByb2dyYW1zIGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHJlZ3Jlc3Npb25zIG9yIGJ5cGFzc2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttYXlfdXBkYXRlX3NvY2ttYXAmIzM0OywKICAgICYjMzQ7Y2hlY2tfbWFwX2Z1bmNfY29tcGF0aWJpbGl0eSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXN0cmljdHMgY2VydGFpbiBCUEYgcHJvZ3JhbSB0eXBlcyBmcm9tIHVwZGF0aW5nIHNvY2ttYXBzIGluIHRoZSBCUEYgdmVyaWZpZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBCUEYgdmVyaWZpZXIgbG9naWMgdGhhdCBhZmZlY3RzIHdoYXQgQlBGIHByb2dyYW1zIGFyZSBhbGxvd2VkIHRvIGRvLiBJdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgdmVyaWZpZXIgY29ycmVjdGx5IHJlamVjdHMgaW52YWxpZCBwcm9ncmFtcyBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSByZWdyZXNzaW9ucyBvciBieXBhc3Nlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDIzOjA1OjQ1LjQwNjA0OTUyNloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4ODAwMTIzMzg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtYXlfdXBkYXRlX3NvY2ttYXBcIixcbiAgICBcImNoZWNrX21hcF9mdW5jX2NvbXBhdGliaWxpdHlcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXN0cmljdHMgY2VydGFpbiBCUEYgcHJvZ3JhbSB0eXBlcyBmcm9tIHVwZGF0aW5nIHNvY2ttYXBzIGluIHRoZSBCUEYgdmVyaWZpZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBCUEYgdmVyaWZpZXIgbG9naWMgdGhhdCBhZmZlY3RzIHdoYXQgQlBGIHByb2dyYW1zIGFyZSBhbGxvd2VkIHRvIGRvLiBJdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgdmVyaWZpZXIgY29ycmVjdGx5IHJlamVjdHMgaW52YWxpZCBwcm9ncmFtcyBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgYW55IHJlZ3Jlc3Npb25zIG9yIGJ5cGFzc2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQyMzowNTo0NS40MDYwNTcwOTdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MDMzOTk5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGZjN2RlNzZhZDFmNTEzZTAyZWRmZTJkMDkyMjZmMGRlZTc4ZTAzOTBcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBKdW4gMzAgMjM6MDU6NDQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXFxuaW5kZXggMjVhZWE0MjcxY2QwODkuLjgzZWEzYjMzZmY2NzljIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbisrKyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbkBAIC04NDg4LDEyICs4NDg4LDcgQEAgc3RhdGljIGJvb2wgbWF5X3VwZGF0ZV9zb2NrbWFwKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBmdW5jX2lkKVxcbiBcXHRcXHRpZiAoZnVuY19pZCA9PSBCUEZfRlVOQ19tYXBfZGVsZXRlX2VsZW0pXFxuIFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXHRcXHRicmVhaztcXG4tXFx0Y2FzZSBCUEZfUFJPR19UWVBFX1NPQ0tFVF9GSUxURVI6XFxuLVxcdGNhc2UgQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFM6XFxuLVxcdGNhc2UgQlBGX1BST0dfVFlQRV9TQ0hFRF9BQ1Q6XFxuLVxcdGNhc2UgQlBGX1BST0dfVFlQRV9YRFA6XFxuIFxcdGNhc2UgQlBGX1BST0dfVFlQRV9TS19SRVVTRVBPUlQ6XFxuLVxcdGNhc2UgQlBGX1BST0dfVFlQRV9GTE9XX0RJU1NFQ1RPUjpcXG4gXFx0Y2FzZSBCUEZfUFJPR19UWVBFX1NLX0xPT0tVUDpcXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcdGRlZmF1bHQ6XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ZleGl0X2JwZjJicGYuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ZleGl0X2JwZjJicGYuY1xcbmluZGV4IDkyYzIwODAzZWE3NjVkLi5kM2E5NTQxNThjMzMyNyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9mZXhpdF9icGYyYnBmLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9mZXhpdF9icGYyYnBmLmNcXG5AQCAtMzM2LDE3ICszMzYsNiBAQCBzdGF0aWMgdm9pZCB0ZXN0X2Ztb2RfcmV0X2ZyZXBsYWNlKHZvaWQpXFxuIH1cXG4gXFxuIFxcbi1zdGF0aWMgdm9pZCB0ZXN0X2Z1bmNfc29ja21hcF91cGRhdGUodm9pZClcXG4te1xcbi1cXHRjb25zdCBjaGFyICpwcm9nX25hbWVbXSA9IHtcXG4tXFx0XFx0XFxcImZyZXBsYWNlL2Nsc19yZWRpcmVjdFxcXCIsXFxuLVxcdH07XFxuLVxcdHRlc3RfZmV4aXRfYnBmMmJwZl9jb21tb24oXFxcIi4vZnJlcGxhY2VfY2xzX3JlZGlyZWN0LmJwZi5vXFxcIixcXG4tXFx0XFx0XFx0XFx0ICBcXFwiLi90ZXN0X2Nsc19yZWRpcmVjdC5icGYub1xcXCIsXFxuLVxcdFxcdFxcdFxcdCAgQVJSQVlfU0laRShwcm9nX25hbWUpLFxcbi1cXHRcXHRcXHRcXHQgIHByb2dfbmFtZSwgZmFsc2UsIE5VTEwpO1xcbi19XFxuLVxcbiBzdGF0aWMgdm9pZCB0ZXN0X2Z1bmNfcmVwbGFjZV92b2lkKHZvaWQpXFxuIHtcXG4gXFx0Y29uc3QgY2hhciAqcHJvZ19uYW1lW10gPSB7XFxuQEAgLTU5OSw4ICs1ODgsNiBAQCB2b2lkIHNlcmlhbF90ZXN0X2ZleGl0X2JwZjJicGYodm9pZClcXG4gXFx0XFx0dGVzdF9mdW5jX3JlcGxhY2UoKTtcXG4gXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcImZ1bmNfcmVwbGFjZV92ZXJpZnlcXFwiKSlcXG4gXFx0XFx0dGVzdF9mdW5jX3JlcGxhY2VfdmVyaWZ5KCk7XFxuLVxcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJmdW5jX3NvY2ttYXBfdXBkYXRlXFxcIikpXFxuLVxcdFxcdHRlc3RfZnVuY19zb2NrbWFwX3VwZGF0ZSgpO1xcbiBcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwiZnVuY19yZXBsYWNlX3JldHVybl9jb2RlXFxcIikpXFxuIFxcdFxcdHRlc3RfZnVuY19yZXBsYWNlX3JldHVybl9jb2RlKCk7XFxuIFxcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJmdW5jX21hcF9wcm9nX2NvbXBhdGliaWxpdHlcXFwiKSlcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9iYXNpYy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9iYXNpYy5jXFxuaW5kZXggY2IzMjI5NzExZjkzYTMuLjMzZjc4OGUyNzg2ZGFlIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfYmFzaWMuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfYmFzaWMuY1xcbkBAIC03LDcgKzcsNiBAQFxcbiBcXG4gI2luY2x1ZGUgXFxcInRlc3RfcHJvZ3MuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInRlc3Rfc2ttc2dfbG9hZF9oZWxwZXJzLnNrZWwuaFxcXCJcXG4tI2luY2x1ZGUgXFxcInRlc3Rfc29ja21hcF91cGRhdGUuc2tlbC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwidGVzdF9zb2NrbWFwX2ludmFsaWRfdXBkYXRlLnNrZWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInRlc3Rfc29ja21hcF9za2JfdmVyZGljdF9hdHRhY2guc2tlbC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwidGVzdF9zb2NrbWFwX3Byb2dzX3F1ZXJ5LnNrZWwuaFxcXCJcXG5AQCAtMjM1LDUzICsyMzQsNiBAQCBzdGF0aWMgdm9pZCB0ZXN0X3NrbXNnX2hlbHBlcnNfd2l0aF9saW5rKGVudW0gYnBmX21hcF90eXBlIG1hcF90eXBlKVxcbiBcXHR0ZXN0X3NrbXNnX2xvYWRfaGVscGVyc19fZGVzdHJveShza2VsKTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgdGVzdF9zb2NrbWFwX3VwZGF0ZShlbnVtIGJwZl9tYXBfdHlwZSBtYXBfdHlwZSlcXG4te1xcbi1cXHRpbnQgZXJyLCBwcm9nLCBzcmM7XFxuLVxcdHN0cnVjdCB0ZXN0X3NvY2ttYXBfdXBkYXRlICpza2VsO1xcbi1cXHRzdHJ1Y3QgYnBmX21hcCAqZHN0X21hcDtcXG4tXFx0Y29uc3QgX191MzIgemVybyA9IDA7XFxuLVxcdGNoYXIgZHVtbXlbMTRdID0gezB9O1xcbi1cXHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgdG9wdHMsXFxuLVxcdFxcdC5kYXRhX2luID0gZHVtbXksXFxuLVxcdFxcdC5kYXRhX3NpemVfaW4gPSBzaXplb2YoZHVtbXkpLFxcbi1cXHRcXHQucmVwZWF0ID0gMSxcXG4tXFx0KTtcXG4tXFx0X19zNjQgc2s7XFxuLVxcbi1cXHRzayA9IGNvbm5lY3RlZF9zb2NrZXRfdjQoKTtcXG4tXFx0aWYgKCFBU1NFUlRfTkVRKHNrLCAtMSwgXFxcImNvbm5lY3RlZF9zb2NrZXRfdjRcXFwiKSlcXG4tXFx0XFx0cmV0dXJuO1xcbi1cXG4tXFx0c2tlbCA9IHRlc3Rfc29ja21hcF91cGRhdGVfX29wZW5fYW5kX2xvYWQoKTtcXG4tXFx0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFxcXCJvcGVuX2FuZF9sb2FkXFxcIikpXFxuLVxcdFxcdGdvdG8gY2xvc2Vfc2s7XFxuLVxcbi1cXHRwcm9nID0gYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXFx1MDAzZXByb2dzLmNvcHlfc29ja19tYXApO1xcbi1cXHRzcmMgPSBicGZfbWFwX19mZChza2VsLVxcdTAwM2VtYXBzLnNyYyk7XFxuLVxcdGlmIChtYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfU09DS01BUClcXG4tXFx0XFx0ZHN0X21hcCA9IHNrZWwtXFx1MDAzZW1hcHMuZHN0X3NvY2tfbWFwO1xcbi1cXHRlbHNlXFxuLVxcdFxcdGRzdF9tYXAgPSBza2VsLVxcdTAwM2VtYXBzLmRzdF9zb2NrX2hhc2g7XFxuLVxcbi1cXHRlcnIgPSBicGZfbWFwX3VwZGF0ZV9lbGVtKHNyYywgXFx1MDAyNnplcm8sIFxcdTAwMjZzaywgQlBGX05PRVhJU1QpO1xcbi1cXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJ1cGRhdGVfZWxlbShzcmMpXFxcIikpXFxuLVxcdFxcdGdvdG8gb3V0O1xcbi1cXG4tXFx0ZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhwcm9nLCBcXHUwMDI2dG9wdHMpO1xcbi1cXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJ0ZXN0X3J1blxcXCIpKVxcbi1cXHRcXHRnb3RvIG91dDtcXG4tXFx0aWYgKCFBU1NFUlRfTkVRKHRvcHRzLnJldHZhbCwgMCwgXFxcInRlc3RfcnVuIHJldHZhbFxcXCIpKVxcbi1cXHRcXHRnb3RvIG91dDtcXG4tXFxuLVxcdGNvbXBhcmVfY29va2llcyhza2VsLVxcdTAwM2VtYXBzLnNyYywgZHN0X21hcCk7XFxuLVxcbi1vdXQ6XFxuLVxcdHRlc3Rfc29ja21hcF91cGRhdGVfX2Rlc3Ryb3koc2tlbCk7XFxuLWNsb3NlX3NrOlxcbi1cXHRjbG9zZShzayk7XFxuLX1cXG4tXFxuIHN0YXRpYyB2b2lkIHRlc3Rfc29ja21hcF9pbnZhbGlkX3VwZGF0ZSh2b2lkKVxcbiB7XFxuIFxcdHN0cnVjdCB0ZXN0X3NvY2ttYXBfaW52YWxpZF91cGRhdGUgKnNrZWw7XFxuQEAgLTEzODUsMTAgKzEzMzcsNiBAQCB2b2lkIHRlc3Rfc29ja21hcF9iYXNpYyh2b2lkKVxcbiBcXHRcXHR0ZXN0X3NrbXNnX2hlbHBlcnMoQlBGX01BUF9UWVBFX1NPQ0tNQVApO1xcbiBcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwic29ja2hhc2ggc2tfbXNnIGxvYWQgaGVscGVyc1xcXCIpKVxcbiBcXHRcXHR0ZXN0X3NrbXNnX2hlbHBlcnMoQlBGX01BUF9UWVBFX1NPQ0tIQVNIKTtcXG4tXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcInNvY2ttYXAgdXBkYXRlXFxcIikpXFxuLVxcdFxcdHRlc3Rfc29ja21hcF91cGRhdGUoQlBGX01BUF9UWVBFX1NPQ0tNQVApO1xcbi1cXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwic29ja2hhc2ggdXBkYXRlXFxcIikpXFxuLVxcdFxcdHRlc3Rfc29ja21hcF91cGRhdGUoQlBGX01BUF9UWVBFX1NPQ0tIQVNIKTtcXG4gXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcInNvY2ttYXAgdXBkYXRlIGluIHVuc2FmZSBjb250ZXh0XFxcIikpXFxuIFxcdFxcdHRlc3Rfc29ja21hcF9pbnZhbGlkX3VwZGF0ZSgpO1xcbiBcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwic29ja21hcCBjb3B5XFxcIikpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9mcmVwbGFjZV9jbHNfcmVkaXJlY3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9mcmVwbGFjZV9jbHNfcmVkaXJlY3QuY1xcbmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDdlOTQ0MTJkNDdhNWNhLi4wMDAwMDAwMDAwMDAwMFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9mcmVwbGFjZV9jbHNfcmVkaXJlY3QuY1xcbisrKyAvZGV2L251bGxcXG5AQCAtMSwzNCArMCwwIEBAXFxuLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuLS8vIENvcHlyaWdodCAoYykgMjAyMCBGYWNlYm9va1xcbi1cXG4tI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N0ZGRlZi5oXFx1MDAzZVxcbi0jaW5jbHVkZSBcXHUwMDNjbGludXgvYnBmLmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9wa3RfY2xzLmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX2VuZGlhbi5oXFx1MDAzZVxcbi0jaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcXHUwMDNlXFxuLVxcbi1zdHJ1Y3Qge1xcbi1cXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1NPQ0tNQVApO1xcbi1cXHRfX3R5cGUoa2V5LCBpbnQpO1xcbi1cXHRfX3R5cGUodmFsdWUsIGludCk7XFxuLVxcdF9fdWludChtYXhfZW50cmllcywgMik7XFxuLX0gc29ja19tYXAgU0VDKFxcXCIubWFwc1xcXCIpO1xcbi1cXG4tU0VDKFxcXCJmcmVwbGFjZS9jbHNfcmVkaXJlY3RcXFwiKVxcbi1pbnQgZnJlcGxhY2VfY2xzX3JlZGlyZWN0X3Rlc3Qoc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxcbi17XFxuLVxcdGludCByZXQgPSAwO1xcbi1cXHRjb25zdCBpbnQgemVybyA9IDA7XFxuLVxcdHN0cnVjdCBicGZfc29jayAqc2s7XFxuLVxcbi1cXHRzayA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXFx1MDAyNnNvY2tfbWFwLCBcXHUwMDI2emVybyk7XFxuLVxcdGlmICghc2spXFxuLVxcdFxcdHJldHVybiBUQ19BQ1RfU0hPVDtcXG4tXFxuLVxcdHJldCA9IGJwZl9tYXBfdXBkYXRlX2VsZW0oXFx1MDAyNnNvY2tfbWFwLCBcXHUwMDI2emVybywgc2ssIDApO1xcbi1cXHRicGZfc2tfcmVsZWFzZShzayk7XFxuLVxcbi1cXHRyZXR1cm4gcmV0ID09IDAgPyBUQ19BQ1RfT0sgOiBUQ19BQ1RfU0hPVDtcXG4tfVxcbi1cXG4tY2hhciBfbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NvY2ttYXBfdXBkYXRlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zb2NrbWFwX3VwZGF0ZS5jXFxuZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggNmQ2NGVhNTM2ZTNkODEuLjAwMDAwMDAwMDAwMDAwXFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc29ja21hcF91cGRhdGUuY1xcbisrKyAvZGV2L251bGxcXG5AQCAtMSw0OCArMCwwIEBAXFxuLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuLS8vIENvcHlyaWdodCAoYykgMjAyMCBDbG91ZGZsYXJlXFxuLSNpbmNsdWRlIFxcXCJ2bWxpbnV4LmhcXFwiXFxuLSNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFxcdTAwM2VcXG4tXFxuLXN0cnVjdCB7XFxuLVxcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfU09DS01BUCk7XFxuLVxcdF9fdWludChtYXhfZW50cmllcywgMSk7XFxuLVxcdF9fdHlwZShrZXksIF9fdTMyKTtcXG4tXFx0X190eXBlKHZhbHVlLCBfX3U2NCk7XFxuLX0gc3JjIFNFQyhcXFwiLm1hcHNcXFwiKTtcXG4tXFxuLXN0cnVjdCB7XFxuLVxcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfU09DS01BUCk7XFxuLVxcdF9fdWludChtYXhfZW50cmllcywgMSk7XFxuLVxcdF9fdHlwZShrZXksIF9fdTMyKTtcXG4tXFx0X190eXBlKHZhbHVlLCBfX3U2NCk7XFxuLX0gZHN0X3NvY2tfbWFwIFNFQyhcXFwiLm1hcHNcXFwiKTtcXG4tXFxuLXN0cnVjdCB7XFxuLVxcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfU09DS0hBU0gpO1xcbi1cXHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xcbi1cXHRfX3R5cGUoa2V5LCBfX3UzMik7XFxuLVxcdF9fdHlwZSh2YWx1ZSwgX191NjQpO1xcbi19IGRzdF9zb2NrX2hhc2ggU0VDKFxcXCIubWFwc1xcXCIpO1xcbi1cXG4tU0VDKFxcXCJ0Y1xcXCIpXFxuLWludCBjb3B5X3NvY2tfbWFwKHZvaWQgKmN0eClcXG4te1xcbi1cXHRzdHJ1Y3QgYnBmX3NvY2sgKnNrO1xcbi1cXHRib29sIGZhaWxlZCA9IGZhbHNlO1xcbi1cXHRfX3UzMiBrZXkgPSAwO1xcbi1cXG4tXFx0c2sgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFxcdTAwMjZzcmMsIFxcdTAwMjZrZXkpO1xcbi1cXHRpZiAoIXNrKVxcbi1cXHRcXHRyZXR1cm4gU0tfRFJPUDtcXG4tXFxuLVxcdGlmIChicGZfbWFwX3VwZGF0ZV9lbGVtKFxcdTAwMjZkc3Rfc29ja19tYXAsIFxcdTAwMjZrZXksIHNrLCAwKSlcXG4tXFx0XFx0ZmFpbGVkID0gdHJ1ZTtcXG4tXFxuLVxcdGlmIChicGZfbWFwX3VwZGF0ZV9lbGVtKFxcdTAwMjZkc3Rfc29ja19oYXNoLCBcXHUwMDI2a2V5LCBzaywgMCkpXFxuLVxcdFxcdGZhaWxlZCA9IHRydWU7XFxuLVxcbi1cXHRicGZfc2tfcmVsZWFzZShzayk7XFxuLVxcdHJldHVybiBmYWlsZWQgPyBTS19EUk9QIDogU0tfUEFTUztcXG4tfVxcbi1cXG4tY2hhciBfbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9zb2NrbWFwX211dGF0ZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3NvY2ttYXBfbXV0YXRlLmNcXG5pbmRleCBmZTRiMTIzMTg3Yjg2ZS4uMjAzMzJhNzMxZDRlNGYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3NvY2ttYXBfbXV0YXRlLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc29ja21hcF9tdXRhdGUuY1xcbkBAIC03NCw3ICs3NCw3IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCB0ZXN0X3NvY2ttYXBfbG9va3VwX2FuZF9tdXRhdGUodm9pZClcXG4gfVxcbiBcXG4gU0VDKFxcXCJhY3Rpb25cXFwiKVxcbi1fX3N1Y2Nlc3NcXG4rX19mYWlsdXJlIF9fbXNnKFxcXCJjYW5ub3QgdXBkYXRlIHNvY2ttYXAgaW4gdGhpcyBjb250ZXh0XFxcIilcXG4gaW50IHRlc3Rfc2NoZWRfYWN0KHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcXG4ge1xcbiBcXHR0ZXN0X3NvY2ttYXBfbXV0YXRlKHNrYi1cXHUwMDNlc2spO1xcbkBAIC04Miw3ICs4Miw3IEBAIGludCB0ZXN0X3NjaGVkX2FjdChzdHJ1Y3QgX19za19idWZmICpza2IpXFxuIH1cXG4gXFxuIFNFQyhcXFwiY2xhc3NpZmllclxcXCIpXFxuLV9fc3VjY2Vzc1xcbitfX2ZhaWx1cmUgX19tc2coXFxcImNhbm5vdCB1cGRhdGUgc29ja21hcCBpbiB0aGlzIGNvbnRleHRcXFwiKVxcbiBpbnQgdGVzdF9zY2hlZF9jbHMoc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxcbiB7XFxuIFxcdHRlc3Rfc29ja21hcF9tdXRhdGUoc2tiLVxcdTAwM2Vzayk7XFxuQEAgLTkwLDcgKzkwLDcgQEAgaW50IHRlc3Rfc2NoZWRfY2xzKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcXG4gfVxcbiBcXG4gU0VDKFxcXCJmbG93X2Rpc3NlY3RvclxcXCIpXFxuLV9fc3VjY2Vzc1xcbitfX2ZhaWx1cmUgX19tc2coXFxcImNhbm5vdCB1cGRhdGUgc29ja21hcCBpbiB0aGlzIGNvbnRleHRcXFwiKVxcbiBpbnQgdGVzdF9mbG93X2Rpc3NlY3Rvcl9kZWxldGUoc3RydWN0IF9fc2tfYnVmZiAqc2tiIF9fYWx3YXlzX3VudXNlZClcXG4ge1xcbiBcXHR0ZXN0X3NvY2ttYXBfZGVsZXRlKCk7XFxuQEAgLTk4LDcgKzk4LDcgQEAgaW50IHRlc3RfZmxvd19kaXNzZWN0b3JfZGVsZXRlKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYiBfX2Fsd2F5c191bnVzZWQpXFxuIH1cXG4gXFxuIFNFQyhcXFwiZmxvd19kaXNzZWN0b3JcXFwiKVxcbi1fX2ZhaWx1cmUgX19tc2coXFxcInByb2dyYW0gb2YgdGhpcyB0eXBlIGNhbm5vdCB1c2UgaGVscGVyIGJwZl9za19yZWxlYXNlXFxcIilcXG4rX19mYWlsdXJlIF9fbXNnKFxcXCJjYW5ub3QgdXBkYXRlIHNvY2ttYXAgaW4gdGhpcyBjb250ZXh0XFxcIilcXG4gaW50IHRlc3RfZmxvd19kaXNzZWN0b3JfdXBkYXRlKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYiBfX2Fsd2F5c191bnVzZWQpXFxuIHtcXG4gXFx0dGVzdF9zb2NrbWFwX2xvb2t1cF9hbmRfdXBkYXRlKCk7IC8qIG5vIGFjY2VzcyB0byBza2ItXFx1MDAzZXNrICovXFxuQEAgLTE0Niw3ICsxNDYsNyBAQCBpbnQgdGVzdF9za19yZXVzZXBvcnQoc3RydWN0IHNrX3JldXNlcG9ydF9tZCAqY3R4KVxcbiB9XFxuIFxcbiBTRUMoXFxcInNvY2tldFxcXCIpXFxuLV9fc3VjY2Vzc1xcbitfX2ZhaWx1cmUgX19tc2coXFxcImNhbm5vdCB1cGRhdGUgc29ja21hcCBpbiB0aGlzIGNvbnRleHRcXFwiKVxcbiBpbnQgdGVzdF9zb2NrZXRfZmlsdGVyKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcXG4ge1xcbiBcXHR0ZXN0X3NvY2ttYXBfbXV0YXRlKHNrYi1cXHUwMDNlc2spO1xcbkBAIC0xNzksNyArMTc5LDcgQEAgaW50IHRlc3Rfc29ja29wc191cGRhdGVfZGVkaWNhdGVkKHN0cnVjdCBicGZfc29ja19vcHMgKmN0eClcXG4gfVxcbiBcXG4gU0VDKFxcXCJ4ZHBcXFwiKVxcbi1fX3N1Y2Nlc3NcXG4rX19mYWlsdXJlIF9fbXNnKFxcXCJjYW5ub3QgdXBkYXRlIHNvY2ttYXAgaW4gdGhpcyBjb250ZXh0XFxcIilcXG4gaW50IHRlc3RfeGRwKHN0cnVjdCB4ZHBfbWQgKmN0eCBfX2Fsd2F5c191bnVzZWQpXFxuIHtcXG4gXFx0dGVzdF9zb2NrbWFwX2xvb2t1cF9hbmRfbXV0YXRlKCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDIzOjA1OjQ1Ljg2NzEzMjU2MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDgzMzkwMjcxNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1heV91cGRhdGVfc29ja21hcFwiLFxuICAgIFwiY2hlY2tfbWFwX2Z1bmNfY29tcGF0aWJpbGl0eVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlc3RyaWN0cyBjZXJ0YWluIEJQRiBwcm9ncmFtIHR5cGVzIGZyb20gdXBkYXRpbmcgc29ja21hcHMgaW4gdGhlIEJQRiB2ZXJpZmllci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiB2ZXJpZmllciBsb2dpYyB0aGF0IGFmZmVjdHMgd2hhdCBCUEYgcHJvZ3JhbXMgYXJlIGFsbG93ZWQgdG8gZG8uIEl0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSB2ZXJpZmllciBjb3JyZWN0bHkgcmVqZWN0cyBpbnZhbGlkIHByb2dyYW1zIGFuZCBkb2Vzbid0IGludHJvZHVjZSBhbnkgcmVncmVzc2lvbnMgb3IgYnlwYXNzZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZmM3ZGU3NmFkMWY1MTNlMDJlZGZlMmQwOTIyNmYwZGVlNzhlMDM5MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVuIDMwIDIzOjA1OjQ0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5pbmRleCAyNWFlYTQyNzFjZDA4OS4uODNlYTNiMzNmZjY3OWMgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbisrKyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuQEAgLTg0ODgsMTIgKzg0ODgsNyBAQCBzdGF0aWMgYm9vbCBtYXlfdXBkYXRlX3NvY2ttYXAoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGZ1bmNfaWQpXG4gXHRcdGlmIChmdW5jX2lkID09IEJQRl9GVU5DX21hcF9kZWxldGVfZWxlbSlcbiBcdFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdFx0YnJlYWs7XG4tXHRjYXNlIEJQRl9QUk9HX1RZUEVfU09DS0VUX0ZJTFRFUjpcbi1cdGNhc2UgQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFM6XG4tXHRjYXNlIEJQRl9QUk9HX1RZUEVfU0NIRURfQUNUOlxuLVx0Y2FzZSBCUEZfUFJPR19UWVBFX1hEUDpcbiBcdGNhc2UgQlBGX1BST0dfVFlQRV9TS19SRVVTRVBPUlQ6XG4tXHRjYXNlIEJQRl9QUk9HX1RZUEVfRkxPV19ESVNTRUNUT1I6XG4gXHRjYXNlIEJQRl9QUk9HX1RZUEVfU0tfTE9PS1VQOlxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdGRlZmF1bHQ6XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZmV4aXRfYnBmMmJwZi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZmV4aXRfYnBmMmJwZi5jXG5pbmRleCA5MmMyMDgwM2VhNzY1ZC4uZDNhOTU0MTU4YzMzMjcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9mZXhpdF9icGYyYnBmLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ZleGl0X2JwZjJicGYuY1xuQEAgLTMzNiwxNyArMzM2LDYgQEAgc3RhdGljIHZvaWQgdGVzdF9mbW9kX3JldF9mcmVwbGFjZSh2b2lkKVxuIH1cbiBcbiBcbi1zdGF0aWMgdm9pZCB0ZXN0X2Z1bmNfc29ja21hcF91cGRhdGUodm9pZClcbi17XG4tXHRjb25zdCBjaGFyICpwcm9nX25hbWVbXSA9IHtcbi1cdFx0XCJmcmVwbGFjZS9jbHNfcmVkaXJlY3RcIixcbi1cdH07XG4tXHR0ZXN0X2ZleGl0X2JwZjJicGZfY29tbW9uKFwiLi9mcmVwbGFjZV9jbHNfcmVkaXJlY3QuYnBmLm9cIixcbi1cdFx0XHRcdCAgXCIuL3Rlc3RfY2xzX3JlZGlyZWN0LmJwZi5vXCIsXG4tXHRcdFx0XHQgIEFSUkFZX1NJWkUocHJvZ19uYW1lKSxcbi1cdFx0XHRcdCAgcHJvZ19uYW1lLCBmYWxzZSwgTlVMTCk7XG4tfVxuLVxuIHN0YXRpYyB2b2lkIHRlc3RfZnVuY19yZXBsYWNlX3ZvaWQodm9pZClcbiB7XG4gXHRjb25zdCBjaGFyICpwcm9nX25hbWVbXSA9IHtcbkBAIC01OTksOCArNTg4LDYgQEAgdm9pZCBzZXJpYWxfdGVzdF9mZXhpdF9icGYyYnBmKHZvaWQpXG4gXHRcdHRlc3RfZnVuY19yZXBsYWNlKCk7XG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcImZ1bmNfcmVwbGFjZV92ZXJpZnlcIikpXG4gXHRcdHRlc3RfZnVuY19yZXBsYWNlX3ZlcmlmeSgpO1xuLVx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJmdW5jX3NvY2ttYXBfdXBkYXRlXCIpKVxuLVx0XHR0ZXN0X2Z1bmNfc29ja21hcF91cGRhdGUoKTtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwiZnVuY19yZXBsYWNlX3JldHVybl9jb2RlXCIpKVxuIFx0XHR0ZXN0X2Z1bmNfcmVwbGFjZV9yZXR1cm5fY29kZSgpO1xuIFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJmdW5jX21hcF9wcm9nX2NvbXBhdGliaWxpdHlcIikpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9iYXNpYy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9iYXNpYy5jXG5pbmRleCBjYjMyMjk3MTFmOTNhMy4uMzNmNzg4ZTI3ODZkYWUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2Jhc2ljLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfYmFzaWMuY1xuQEAgLTcsNyArNyw2IEBAXG4gXG4gI2luY2x1ZGUgXCJ0ZXN0X3Byb2dzLmhcIlxuICNpbmNsdWRlIFwidGVzdF9za21zZ19sb2FkX2hlbHBlcnMuc2tlbC5oXCJcbi0jaW5jbHVkZSBcInRlc3Rfc29ja21hcF91cGRhdGUuc2tlbC5oXCJcbiAjaW5jbHVkZSBcInRlc3Rfc29ja21hcF9pbnZhbGlkX3VwZGF0ZS5za2VsLmhcIlxuICNpbmNsdWRlIFwidGVzdF9zb2NrbWFwX3NrYl92ZXJkaWN0X2F0dGFjaC5za2VsLmhcIlxuICNpbmNsdWRlIFwidGVzdF9zb2NrbWFwX3Byb2dzX3F1ZXJ5LnNrZWwuaFwiXG5AQCAtMjM1LDUzICsyMzQsNiBAQCBzdGF0aWMgdm9pZCB0ZXN0X3NrbXNnX2hlbHBlcnNfd2l0aF9saW5rKGVudW0gYnBmX21hcF90eXBlIG1hcF90eXBlKVxuIFx0dGVzdF9za21zZ19sb2FkX2hlbHBlcnNfX2Rlc3Ryb3koc2tlbCk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHRlc3Rfc29ja21hcF91cGRhdGUoZW51bSBicGZfbWFwX3R5cGUgbWFwX3R5cGUpXG4te1xuLVx0aW50IGVyciwgcHJvZywgc3JjO1xuLVx0c3RydWN0IHRlc3Rfc29ja21hcF91cGRhdGUgKnNrZWw7XG4tXHRzdHJ1Y3QgYnBmX21hcCAqZHN0X21hcDtcbi1cdGNvbnN0IF9fdTMyIHplcm8gPSAwO1xuLVx0Y2hhciBkdW1teVsxNF0gPSB7MH07XG4tXHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgdG9wdHMsXG4tXHRcdC5kYXRhX2luID0gZHVtbXksXG4tXHRcdC5kYXRhX3NpemVfaW4gPSBzaXplb2YoZHVtbXkpLFxuLVx0XHQucmVwZWF0ID0gMSxcbi1cdCk7XG4tXHRfX3M2NCBzaztcbi1cbi1cdHNrID0gY29ubmVjdGVkX3NvY2tldF92NCgpO1xuLVx0aWYgKCFBU1NFUlRfTkVRKHNrLCAtMSwgXCJjb25uZWN0ZWRfc29ja2V0X3Y0XCIpKVxuLVx0XHRyZXR1cm47XG4tXG4tXHRza2VsID0gdGVzdF9zb2NrbWFwX3VwZGF0ZV9fb3Blbl9hbmRfbG9hZCgpO1xuLVx0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwib3Blbl9hbmRfbG9hZFwiKSlcbi1cdFx0Z290byBjbG9zZV9zaztcbi1cbi1cdHByb2cgPSBicGZfcHJvZ3JhbV9fZmQoc2tlbC1cdTAwM2Vwcm9ncy5jb3B5X3NvY2tfbWFwKTtcbi1cdHNyYyA9IGJwZl9tYXBfX2ZkKHNrZWwtXHUwMDNlbWFwcy5zcmMpO1xuLVx0aWYgKG1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9TT0NLTUFQKVxuLVx0XHRkc3RfbWFwID0gc2tlbC1cdTAwM2VtYXBzLmRzdF9zb2NrX21hcDtcbi1cdGVsc2Vcbi1cdFx0ZHN0X21hcCA9IHNrZWwtXHUwMDNlbWFwcy5kc3Rfc29ja19oYXNoO1xuLVxuLVx0ZXJyID0gYnBmX21hcF91cGRhdGVfZWxlbShzcmMsIFx1MDAyNnplcm8sIFx1MDAyNnNrLCBCUEZfTk9FWElTVCk7XG4tXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwidXBkYXRlX2VsZW0oc3JjKVwiKSlcbi1cdFx0Z290byBvdXQ7XG4tXG4tXHRlcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKHByb2csIFx1MDAyNnRvcHRzKTtcbi1cdGlmICghQVNTRVJUX09LKGVyciwgXCJ0ZXN0X3J1blwiKSlcbi1cdFx0Z290byBvdXQ7XG4tXHRpZiAoIUFTU0VSVF9ORVEodG9wdHMucmV0dmFsLCAwLCBcInRlc3RfcnVuIHJldHZhbFwiKSlcbi1cdFx0Z290byBvdXQ7XG4tXG4tXHRjb21wYXJlX2Nvb2tpZXMoc2tlbC1cdTAwM2VtYXBzLnNyYywgZHN0X21hcCk7XG4tXG4tb3V0OlxuLVx0dGVzdF9zb2NrbWFwX3VwZGF0ZV9fZGVzdHJveShza2VsKTtcbi1jbG9zZV9zazpcbi1cdGNsb3NlKHNrKTtcbi19XG4tXG4gc3RhdGljIHZvaWQgdGVzdF9zb2NrbWFwX2ludmFsaWRfdXBkYXRlKHZvaWQpXG4ge1xuIFx0c3RydWN0IHRlc3Rfc29ja21hcF9pbnZhbGlkX3VwZGF0ZSAqc2tlbDtcbkBAIC0xMzg1LDEwICsxMzM3LDYgQEAgdm9pZCB0ZXN0X3NvY2ttYXBfYmFzaWModm9pZClcbiBcdFx0dGVzdF9za21zZ19oZWxwZXJzKEJQRl9NQVBfVFlQRV9TT0NLTUFQKTtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwic29ja2hhc2ggc2tfbXNnIGxvYWQgaGVscGVyc1wiKSlcbiBcdFx0dGVzdF9za21zZ19oZWxwZXJzKEJQRl9NQVBfVFlQRV9TT0NLSEFTSCk7XG4tXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcInNvY2ttYXAgdXBkYXRlXCIpKVxuLVx0XHR0ZXN0X3NvY2ttYXBfdXBkYXRlKEJQRl9NQVBfVFlQRV9TT0NLTUFQKTtcbi1cdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwic29ja2hhc2ggdXBkYXRlXCIpKVxuLVx0XHR0ZXN0X3NvY2ttYXBfdXBkYXRlKEJQRl9NQVBfVFlQRV9TT0NLSEFTSCk7XG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcInNvY2ttYXAgdXBkYXRlIGluIHVuc2FmZSBjb250ZXh0XCIpKVxuIFx0XHR0ZXN0X3NvY2ttYXBfaW52YWxpZF91cGRhdGUoKTtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwic29ja21hcCBjb3B5XCIpKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9mcmVwbGFjZV9jbHNfcmVkaXJlY3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9mcmVwbGFjZV9jbHNfcmVkaXJlY3QuY1xuZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCA3ZTk0NDEyZDQ3YTVjYS4uMDAwMDAwMDAwMDAwMDBcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9mcmVwbGFjZV9jbHNfcmVkaXJlY3QuY1xuKysrIC9kZXYvbnVsbFxuQEAgLTEsMzQgKzAsMCBAQFxuLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4tLy8gQ29weXJpZ2h0IChjKSAyMDIwIEZhY2Vib29rXG4tXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvc3RkZGVmLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9icGYuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3BrdF9jbHMuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2JwZi9icGZfZW5kaWFuLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuLVxuLXN0cnVjdCB7XG4tXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1NPQ0tNQVApO1xuLVx0X190eXBlKGtleSwgaW50KTtcbi1cdF9fdHlwZSh2YWx1ZSwgaW50KTtcbi1cdF9fdWludChtYXhfZW50cmllcywgMik7XG4tfSBzb2NrX21hcCBTRUMoXCIubWFwc1wiKTtcbi1cbi1TRUMoXCJmcmVwbGFjZS9jbHNfcmVkaXJlY3RcIilcbi1pbnQgZnJlcGxhY2VfY2xzX3JlZGlyZWN0X3Rlc3Qoc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuLXtcbi1cdGludCByZXQgPSAwO1xuLVx0Y29uc3QgaW50IHplcm8gPSAwO1xuLVx0c3RydWN0IGJwZl9zb2NrICpzaztcbi1cbi1cdHNrID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZzb2NrX21hcCwgXHUwMDI2emVybyk7XG4tXHRpZiAoIXNrKVxuLVx0XHRyZXR1cm4gVENfQUNUX1NIT1Q7XG4tXG4tXHRyZXQgPSBicGZfbWFwX3VwZGF0ZV9lbGVtKFx1MDAyNnNvY2tfbWFwLCBcdTAwMjZ6ZXJvLCBzaywgMCk7XG4tXHRicGZfc2tfcmVsZWFzZShzayk7XG4tXG4tXHRyZXR1cm4gcmV0ID09IDAgPyBUQ19BQ1RfT0sgOiBUQ19BQ1RfU0hPVDtcbi19XG4tXG4tY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NvY2ttYXBfdXBkYXRlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zb2NrbWFwX3VwZGF0ZS5jXG5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDZkNjRlYTUzNmUzZDgxLi4wMDAwMDAwMDAwMDAwMFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc29ja21hcF91cGRhdGUuY1xuKysrIC9kZXYvbnVsbFxuQEAgLTEsNDggKzAsMCBAQFxuLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4tLy8gQ29weXJpZ2h0IChjKSAyMDIwIENsb3VkZmxhcmVcbi0jaW5jbHVkZSBcInZtbGludXguaFwiXG4tI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2Vcbi1cbi1zdHJ1Y3Qge1xuLVx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9TT0NLTUFQKTtcbi1cdF9fdWludChtYXhfZW50cmllcywgMSk7XG4tXHRfX3R5cGUoa2V5LCBfX3UzMik7XG4tXHRfX3R5cGUodmFsdWUsIF9fdTY0KTtcbi19IHNyYyBTRUMoXCIubWFwc1wiKTtcbi1cbi1zdHJ1Y3Qge1xuLVx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9TT0NLTUFQKTtcbi1cdF9fdWludChtYXhfZW50cmllcywgMSk7XG4tXHRfX3R5cGUoa2V5LCBfX3UzMik7XG4tXHRfX3R5cGUodmFsdWUsIF9fdTY0KTtcbi19IGRzdF9zb2NrX21hcCBTRUMoXCIubWFwc1wiKTtcbi1cbi1zdHJ1Y3Qge1xuLVx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9TT0NLSEFTSCk7XG4tXHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xuLVx0X190eXBlKGtleSwgX191MzIpO1xuLVx0X190eXBlKHZhbHVlLCBfX3U2NCk7XG4tfSBkc3Rfc29ja19oYXNoIFNFQyhcIi5tYXBzXCIpO1xuLVxuLVNFQyhcInRjXCIpXG4taW50IGNvcHlfc29ja19tYXAodm9pZCAqY3R4KVxuLXtcbi1cdHN0cnVjdCBicGZfc29jayAqc2s7XG4tXHRib29sIGZhaWxlZCA9IGZhbHNlO1xuLVx0X191MzIga2V5ID0gMDtcbi1cbi1cdHNrID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZzcmMsIFx1MDAyNmtleSk7XG4tXHRpZiAoIXNrKVxuLVx0XHRyZXR1cm4gU0tfRFJPUDtcbi1cbi1cdGlmIChicGZfbWFwX3VwZGF0ZV9lbGVtKFx1MDAyNmRzdF9zb2NrX21hcCwgXHUwMDI2a2V5LCBzaywgMCkpXG4tXHRcdGZhaWxlZCA9IHRydWU7XG4tXG4tXHRpZiAoYnBmX21hcF91cGRhdGVfZWxlbShcdTAwMjZkc3Rfc29ja19oYXNoLCBcdTAwMjZrZXksIHNrLCAwKSlcbi1cdFx0ZmFpbGVkID0gdHJ1ZTtcbi1cbi1cdGJwZl9za19yZWxlYXNlKHNrKTtcbi1cdHJldHVybiBmYWlsZWQgPyBTS19EUk9QIDogU0tfUEFTUztcbi19XG4tXG4tY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9zb2NrbWFwX211dGF0ZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3NvY2ttYXBfbXV0YXRlLmNcbmluZGV4IGZlNGIxMjMxODdiODZlLi4yMDMzMmE3MzFkNGU0ZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9zb2NrbWFwX211dGF0ZS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc29ja21hcF9tdXRhdGUuY1xuQEAgLTc0LDcgKzc0LDcgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHRlc3Rfc29ja21hcF9sb29rdXBfYW5kX211dGF0ZSh2b2lkKVxuIH1cbiBcbiBTRUMoXCJhY3Rpb25cIilcbi1fX3N1Y2Nlc3NcbitfX2ZhaWx1cmUgX19tc2coXCJjYW5ub3QgdXBkYXRlIHNvY2ttYXAgaW4gdGhpcyBjb250ZXh0XCIpXG4gaW50IHRlc3Rfc2NoZWRfYWN0KHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbiB7XG4gXHR0ZXN0X3NvY2ttYXBfbXV0YXRlKHNrYi1cdTAwM2Vzayk7XG5AQCAtODIsNyArODIsNyBAQCBpbnQgdGVzdF9zY2hlZF9hY3Qoc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuIH1cbiBcbiBTRUMoXCJjbGFzc2lmaWVyXCIpXG4tX19zdWNjZXNzXG4rX19mYWlsdXJlIF9fbXNnKFwiY2Fubm90IHVwZGF0ZSBzb2NrbWFwIGluIHRoaXMgY29udGV4dFwiKVxuIGludCB0ZXN0X3NjaGVkX2NscyhzdHJ1Y3QgX19za19idWZmICpza2IpXG4ge1xuIFx0dGVzdF9zb2NrbWFwX211dGF0ZShza2ItXHUwMDNlc2spO1xuQEAgLTkwLDcgKzkwLDcgQEAgaW50IHRlc3Rfc2NoZWRfY2xzKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbiB9XG4gXG4gU0VDKFwiZmxvd19kaXNzZWN0b3JcIilcbi1fX3N1Y2Nlc3NcbitfX2ZhaWx1cmUgX19tc2coXCJjYW5ub3QgdXBkYXRlIHNvY2ttYXAgaW4gdGhpcyBjb250ZXh0XCIpXG4gaW50IHRlc3RfZmxvd19kaXNzZWN0b3JfZGVsZXRlKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYiBfX2Fsd2F5c191bnVzZWQpXG4ge1xuIFx0dGVzdF9zb2NrbWFwX2RlbGV0ZSgpO1xuQEAgLTk4LDcgKzk4LDcgQEAgaW50IHRlc3RfZmxvd19kaXNzZWN0b3JfZGVsZXRlKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYiBfX2Fsd2F5c191bnVzZWQpXG4gfVxuIFxuIFNFQyhcImZsb3dfZGlzc2VjdG9yXCIpXG4tX19mYWlsdXJlIF9fbXNnKFwicHJvZ3JhbSBvZiB0aGlzIHR5cGUgY2Fubm90IHVzZSBoZWxwZXIgYnBmX3NrX3JlbGVhc2VcIilcbitfX2ZhaWx1cmUgX19tc2coXCJjYW5ub3QgdXBkYXRlIHNvY2ttYXAgaW4gdGhpcyBjb250ZXh0XCIpXG4gaW50IHRlc3RfZmxvd19kaXNzZWN0b3JfdXBkYXRlKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYiBfX2Fsd2F5c191bnVzZWQpXG4ge1xuIFx0dGVzdF9zb2NrbWFwX2xvb2t1cF9hbmRfdXBkYXRlKCk7IC8qIG5vIGFjY2VzcyB0byBza2ItXHUwMDNlc2sgKi9cbkBAIC0xNDYsNyArMTQ2LDcgQEAgaW50IHRlc3Rfc2tfcmV1c2Vwb3J0KHN0cnVjdCBza19yZXVzZXBvcnRfbWQgKmN0eClcbiB9XG4gXG4gU0VDKFwic29ja2V0XCIpXG4tX19zdWNjZXNzXG4rX19mYWlsdXJlIF9fbXNnKFwiY2Fubm90IHVwZGF0ZSBzb2NrbWFwIGluIHRoaXMgY29udGV4dFwiKVxuIGludCB0ZXN0X3NvY2tldF9maWx0ZXIoc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuIHtcbiBcdHRlc3Rfc29ja21hcF9tdXRhdGUoc2tiLVx1MDAzZXNrKTtcbkBAIC0xNzksNyArMTc5LDcgQEAgaW50IHRlc3Rfc29ja29wc191cGRhdGVfZGVkaWNhdGVkKHN0cnVjdCBicGZfc29ja19vcHMgKmN0eClcbiB9XG4gXG4gU0VDKFwieGRwXCIpXG4tX19zdWNjZXNzXG4rX19mYWlsdXJlIF9fbXNnKFwiY2Fubm90IHVwZGF0ZSBzb2NrbWFwIGluIHRoaXMgY29udGV4dFwiKVxuIGludCB0ZXN0X3hkcChzdHJ1Y3QgeGRwX21kICpjdHggX19hbHdheXNfdW51c2VkKVxuIHtcbiBcdHRlc3Rfc29ja21hcF9sb29rdXBfYW5kX211dGF0ZSgpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMjM6MDU6NDUuODY3MTM0ODAxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA2ODA2NTk3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBWZXJpZmllciBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCdzIGhpdHRpbmcgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgcmV2b2x2ZXMgYXJvdW5kIGBtYXlfdXBkYXRlX3NvY2ttYXBgLiBJdCBzZWVtcyB0aGV5J3JlIHRpZ2h0ZW5pbmcgdGhlIHJlaW5zIGhlcmUsIHJlc3RyaWN0aW5nIHdoaWNoIEJQRiBwcm9ncmFtIHR5cGVzIGNhbiBhY3R1YWxseSBtb2RpZnkgc29ja21hcHMuIFNwZWNpZmljYWxseSwgdGhlIHBhdGNoIGlzIGV4cGxpY2l0bHkgcmVtb3Zpbmcgc3VwcG9ydCBmb3I6IGBCUEZfUFJPR19UWVBFX1NPQ0tFVF9GSUxURVJgLCBgQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFNgLCBgQlBGX1BST0dfVFlQRV9TQ0hFRF9BQ1RgLCBgQlBGX1BST0dfVFlQRV9YRFBgLCBhbmQgYEJQRl9QUk9HX1RZUEVfRkxPV19ESVNTRUNUT1JgLlxuXG5Fc3NlbnRpYWxseSwgdGhpcyBtZWFucyB0aGVzZSBwcm9ncmFtIHR5cGVzIGFyZSAqbm8gbG9uZ2VyIHBlcm1pdHRlZCogdG8gdXBkYXRlIHNvY2ttYXBzLiBUaGF0J3MgYSBzaWduaWZpY2FudCByZXN0cmljdGlvbiBhbmQgcG90ZW50aWFsbHkgYSBzZWN1cml0eSBoYXJkZW5pbmcgbWVhc3VyZSwgb3IgcGVyaGFwcyBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiwgZGVwZW5kaW5nIG9uIHRoZSByYXRpb25hbGUuIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgY29tbWl0IG1lc3NhZ2UgYW5kIHJlbGF0ZWQgZGlzY3Vzc2lvbnMgdG8gdW5kZXJzdGFuZCB0aGUgZXhhY3QgbW90aXZhdGlvbi5cblxuVGhlIHBhdGNoIGFsc28gaW5jbHVkZXMgdXBkYXRlcyB0byB0aGUgc2VsZnRlc3RzLCB3aGljaCBpcyBnb29kIHByYWN0aWNlLiBJJ2xsIG5lZWQgdG8gcmV2aWV3IHRob3NlIHRlc3RzIGNhcmVmdWxseS4gVGhleSBsaWtlbHkgcmVtb3ZlZCB0ZXN0cyB0aGF0IHdvdWxkIGhhdmUgcHJldmlvdXNseSBzdWNjZWVkZWQgd2l0aCB0aGVzZSBwcm9ncmFtIHR5cGVzIHVwZGF0aW5nIHNvY2ttYXBzLCBvciB0aGV5J3ZlIGNoYW5nZWQgdGhlIGV4cGVjdGVkIHJlc3VsdCBmcm9tIHN1Y2Nlc3MgdG8gZmFpbHVyZS4gVGhpcyBpcyBjcml0aWNhbCBiZWNhdXNlIHRoZSB0ZXN0cyBuZWVkIHRvIGFjY3VyYXRlbHkgcmVmbGVjdCB0aGUgbmV3IGJlaGF2aW9yIGFuZCBwcmV2ZW50IHJlZ3Jlc3Npb25zLiBJJ2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHRlc3QgbW9kaWZpY2F0aW9ucyB0byBlbnN1cmUgdGhleSBhcmUgY29tcGxldGUgYW5kIGNvdmVyIGFsbCByZWxldmFudCBzY2VuYXJpb3MuIEknbGwgYWxzbyB3YW50IHRvIGxvb2sgZm9yIGFueSBuZXcgdGVzdHMgdGhhdCBleHBsaWNpdGx5IHZlcmlmeSB0aGUgcmVzdHJpY3Rpb24uXG5cbkkgc2hvdWxkIHByb2JhYmx5IHRha2UgYSBsb29rIGF0IHRoZSBjb250ZXh0IG9mIGBtYXlfdXBkYXRlX3NvY2ttYXBgIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgIHRvIHNlZSBob3cgdGhlIGxvZ2ljIGlzIHN0cnVjdHVyZWQuIEl0J2xsIGdpdmUgbWUgYSBjbGVhcmVyIHBpY3R1cmUgb2YgKndoeSogdGhlc2UgcHJvZ3JhbXMgYXJlIGJlaW5nIHJlc3RyaWN0ZWQgYW5kIGhvdyB0aGUgdmVyaWZpZXIgZW5zdXJlcyB0aGlzIHJlc3RyaWN0aW9uIGlzIGVuZm9yY2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzIzLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTkxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMjM6MDU6NTAuOTM1MjA0MjQ2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNzg0NDg2NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWF5X3VwZGF0ZV9zb2NrbWFwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuYz04MjI3PXN0YXRpYyBpbnQgY2hlY2tfZnVuY19hcmcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIGFyZyxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04NDY4LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo4NDY5OnN0YXRpYyBib29sIG1heV91cGRhdGVfc29ja21hcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgZnVuY19pZClcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtODQ3MC17XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9ODUwOD1zdGF0aWMgaW50IGNoZWNrX21hcF9mdW5jX2NvbXBhdGliaWxpdHkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04NTgzLVxcdFxcdCAgICBmdW5jX2lkICE9IEJQRl9GVU5DX21hcF9sb29rdXBfZWxlbSBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo4NTg0OlxcdFxcdCAgICAhbWF5X3VwZGF0ZV9zb2NrbWFwKGVudiwgZnVuY19pZCkpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTg1ODUtXFx0XFx0XFx0Z290byBlcnJvcjtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04NTkyLVxcdFxcdCAgICBmdW5jX2lkICE9IEJQRl9GVU5DX21hcF9sb29rdXBfZWxlbSBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo4NTkzOlxcdFxcdCAgICAhbWF5X3VwZGF0ZV9zb2NrbWFwKGVudiwgZnVuY19pZCkpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTg1OTQtXFx0XFx0XFx0Z290byBlcnJvcjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMjM6MDU6NTMuMzEzNjYxODg0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE2NDE5ODEwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIHRoZSBCUEYgVmVyaWZpZXI6IEEgRm9jdXNlZCBBcHByb2FjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgbmV3IGZ1bmN0aW9uLCBgbWF5X3VwZGF0ZV9zb2NrbWFwYCwgYW5kIGl0J3MgYmVpbmcgdXNlZCBpbiBgY2hlY2tfbWFwX2Z1bmNfY29tcGF0aWJpbGl0eWAuIFRoaXMgaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIHRoZSBCUEYgdmVyaWZpZXIgaXRzZWxmLCBhIGNoYW5nZSB0aGF0IHJlc3RyaWN0cyBzcGVjaWZpYyBCUEYgcHJvZ3JhbSB0eXBlcy4gTXkgZXhwZXJ0IGludHVpdGlvbiBpcyB0ZWxsaW5nIG1lIHRoaXMgd2FycmFudHMgYSBjbG9zZXIgbG9vaywgZXNwZWNpYWxseSBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZS5cblxuWWVhaCwgYWJzb2x1dGVseS4gQSBtb2RpZmljYXRpb24gdG8gdGhlIGNvcmUgdmVyaWZpZXIgbG9naWM/IFRoYXQncyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIFRoZSB2ZXJpZmllciBpcyB3aGVyZSBhIGxvdCBvZiB0aGUgY3JpdGljYWwgc2VjdXJpdHkgY2hlY2tzIGhhcHBlbiwgc28gY2hhbmdlcyB0aGVyZSBhcmUgcG90ZW50aWFsIGdvbGRtaW5lcyBmb3IgdW5jb3ZlcmluZyB2dWxuZXJhYmlsaXRpZXMuXG5cbkFscmlnaHQsIHRpbWUgdG8gbmFycm93IGRvd24gdGhlIGZvY3VzLiBMZXQncyBzdGFydCB3aXRoIGlkZW50aWZ5aW5nIHRoZSBjcml0aWNhbCBzeW1ib2xzLiBXZSd2ZSBnb3QgYGNoZWNrX21hcF9mdW5jX2NvbXBhdGliaWxpdHlgIGFuZCBgbWF5X3VwZGF0ZV9zb2NrbWFwYC4gVGhvc2UgYXJlIHRoZSB0d28gbWFpbiBwbGF5ZXJzIGluIHRoaXMgZ2FtZS5cblxuTm93LCBJJ2xsIGRpdmUgaW50byB0aGUgY29kZS4gSSdsbCBuZWVkIHRvIGNoZWNrIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgIGRpcmVjdGx5IHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIG5ldyBpbnRlcmFjdGlvbiBiZXR3ZWVuIGBjaGVja19tYXBfZnVuY19jb21wYXRpYmlsaXR5YCBhbmQgYG1heV91cGRhdGVfc29ja21hcGAuIFRoZSBkZXZpbCBpcyBhbHdheXMgaW4gdGhlIGRldGFpbHMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyNTIsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMjM6MDU6NTcuNDc3ODYyODFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEyMDg0NjQ0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjaGVja19tYXBfZnVuY19jb21wYXRpYmlsaXR5XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuYz04NTAyPWJvb2wgYnBmX2FsbG93X3RhaWxfY2FsbF9pbl9zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTg1MDctXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjg1MDg6c3RhdGljIGludCBjaGVja19tYXBfZnVuY19jb21wYXRpYmlsaXR5KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTg1MDktXFx0XFx0XFx0XFx0XFx0c3RydWN0IGJwZl9tYXAgKm1hcCwgaW50IGZ1bmNfaWQpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTAxODE9c3RhdGljIGludCBjaGVja19oZWxwZXJfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTA2MTItXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEwNjEzOlxcdGVyciA9IGNoZWNrX21hcF9mdW5jX2NvbXBhdGliaWxpdHkoZW52LCBtZXRhLm1hcC5wdHIsIGZ1bmNfaWQpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDYxNC1cXHRpZiAoZXJyKVxcbi0tXFxuc2NyaXB0cy9icGZfZG9jLnB5PTYwNz1Db21wYXRpYmlsaXR5IGJldHdlZW4gaGVscGVyIGZ1bmN0aW9ucyBhbmQgbWFwIHR5cGVzIGNhbiBiZSBmb3VuZCBpbiB0aGVcXG5zY3JpcHRzL2JwZl9kb2MucHk6NjA4OioqY2hlY2tfbWFwX2Z1bmNfY29tcGF0aWJpbGl0eSoqXFxcXFxcXFwgKCkgZnVuY3Rpb24gaW4gZmlsZSAqa2VybmVsL2JwZi92ZXJpZmllci5jKi5cXG5zY3JpcHRzL2JwZl9kb2MucHktNjA5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQyMzowNTo1OS41OTg3MTk0NTlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTAyNzkzNTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIHRoZSBDb2RlIENoYW5nZSoqXG5cbk9rYXksIHNvIHRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgYG1heV91cGRhdGVfc29ja21hcGAuIFRoYXQgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgYnkgYGNoZWNrX21hcF9mdW5jX2NvbXBhdGliaWxpdHlgLCB3aGljaCwgaW4gdHVybiwgaXMgaW52b2tlZCBieSBgY2hlY2tfaGVscGVyX2NhbGxgLiAgVGhlcmVmb3JlLCBgY2hlY2tfbWFwX2Z1bmNfY29tcGF0aWJpbGl0eWAgYW5kIGBtYXlfdXBkYXRlX3NvY2ttYXBgIGFyZSB0aGUgY3JpdGljYWwgZW50cnkgcG9pbnRzIHRvIHVuZGVyc3RhbmQgdGhpcyBtb2RpZmljYXRpb24uIEkgc2hvdWxkIHN0YXJ0IHRoZXJlLCBhbmQgdGhlbiB0cmFjZSBvdXR3YXJkcy5cblxuTm93LCB3aGF0IGRlcGVuZGVuY2llcyBkbyB3ZSBoYXZlIHRvIHdvcnJ5IGFib3V0PyBJIGtub3cgdGhlIEJQRiB2ZXJpZmllciByZXF1aXJlcyBgQlBGX1NZU0NBTExgLiAgSSBzaG91bGQgcHJvYmFibHkgY29uZmlybSB0aGF0IHRoYXQncyB0aGUgb25seSByZWxldmFudCBjb25maWcuIEkgc2hvdWxkIGNoZWNrIGVpdGhlciBga2VybmVsL2JwZi9NYWtlZmlsZWAgb3IgYGtlcm5lbC9icGYvS2NvbmZpZ2AgZm9yIHJlbGF0ZWQgc2V0dGluZ3MuIExldCdzIHNlZSB3aGF0IGVsc2UgbWlnaHQgYmUgYXQgcGxheSBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDAwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDIzOjA2OjAzLjcwMTUxNTg2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0NTIzNzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19CUEZfU1lTQ0FMTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlPTc9Q0ZMQUdTX2NvcmUubyArPSAtV25vLW92ZXJyaWRlLWluaXQgJChjZmxhZ3Mtbm9nY3NlLXl5KVxcbmtlcm5lbC9icGYvTWFrZWZpbGUtOC1cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjk6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBzeXNjYWxsLm8gdmVyaWZpZXIubyBpbm9kZS5vIGhlbHBlcnMubyB0bnVtLm8gY251bS5vIGxvZy5vIHRva2VuLm8gbGl2ZW5lc3MubyBjb25zdF9mb2xkLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjEwOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYnBmX2l0ZXIubyBtYXBfaXRlci5vIHRhc2tfaXRlci5vIHByb2dfaXRlci5vIGxpbmtfaXRlci5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToxMTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGhhc2h0YWIubyBhcnJheW1hcC5vIHBlcmNwdV9mcmVlbGlzdC5vIGJwZl9scnVfbGlzdC5vIGxwbV90cmllLm8gbWFwX2luX21hcC5vIGJsb29tX2ZpbHRlci5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToxMjpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGxvY2FsX3N0b3JhZ2UubyBxdWV1ZV9zdGFja19tYXBzLm8gcmluZ2J1Zi5vIGJwZl9pbnNuX2FycmF5Lm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjEzOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYnBmX2xvY2FsX3N0b3JhZ2UubyBicGZfdGFza19zdG9yYWdlLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjE0Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gZml4dXBzLm8gY2ZnLm8gc3RhdGVzLm8gYmFja3RyYWNrLm8gY2hlY2tfYnRmLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTE1LW9iai0ke0NPTkZJR19CUEZfTFNNfVxcdCAgKz0gYnBmX2lub2RlX3N0b3JhZ2Uub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6MTY6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBkaXNhc20ubyBtcHJvZy5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0xNy1vYmotJChDT05GSUdfQlBGX0pJVCkgKz0gdHJhbXBvbGluZS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToxODpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJ0Zi5vIG1lbWFsbG9jLm8gcnFzcGlubG9jay5vIHN0cmVhbS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0xOS1pZmVxICgkKENPTkZJR19NTVUpJChDT05GSUdfNjRCSVQpLHl5KVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6MjA6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBhcmVuYS5vIHJhbmdlX3RyZWUub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMjEtZW5kaWZcXG4tLVxcbmtlcm5lbC9icGYvTWFrZWZpbGU9MjM9aWZlcSAoJChDT05GSUdfTkVUKSx5KVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6MjQ6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBkZXZtYXAub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6MjU6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBjcHVtYXAub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6MjY6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBvZmZsb2FkLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjI3Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gbmV0X25hbWVzcGFjZS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToyODpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHRjeC5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0yOS1lbmRpZlxcbmtlcm5lbC9icGYvTWFrZWZpbGU9MzA9aWZlcSAoJChDT05GSUdfUEVSRl9FVkVOVFMpLHkpXFxua2VybmVsL2JwZi9NYWtlZmlsZTozMTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHN0YWNrbWFwLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTMyLWVuZGlmXFxua2VybmVsL2JwZi9NYWtlZmlsZT0zMz1pZmVxICgkKENPTkZJR19DR1JPVVBTKSx5KVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6MzQ6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBjZ3JvdXBfaXRlci5vIGJwZl9jZ3JwX3N0b3JhZ2Uub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMzUtZW5kaWZcXG4tLVxcbmtlcm5lbC9icGYvTWFrZWZpbGU9Mzc9aWZlcSAoJChDT05GSUdfSU5FVCkseSlcXG5rZXJuZWwvYnBmL01ha2VmaWxlOjM4Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gcmV1c2Vwb3J0X2FycmF5Lm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTM5LWVuZGlmXFxuLS1cXG5rZXJuZWwvYnBmL01ha2VmaWxlPTQzPWlmZXEgKCQoQ09ORklHX0JQRl9KSVQpLHkpXFxua2VybmVsL2JwZi9NYWtlZmlsZTo0NDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9zdHJ1Y3Rfb3BzLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjQ1Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gY3B1bWFzay5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS00Ni0jIGJwZl9sc21fcHJvdG8ubyBtdXN0IHByZWNlZGUgYnBmX2xzbS5vLiBUaGUgY3VycmVudCBwYWhvbGUgbG9naWNcXG4tLVxcbmtlcm5lbC9icGYvTWFrZWZpbGU9NTg9aWZuZXEgKCQoQ09ORklHX0NSWVBUTyksKVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6NTk6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBjcnlwdG8ub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtNjAtZW5kaWZcXG5rZXJuZWwvYnBmL01ha2VmaWxlPTYxPW9iai0kKENPTkZJR19CUEZfUFJFTE9BRCkgKz0gcHJlbG9hZC9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTYyLVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6NjM6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSByZWxvX2NvcmUub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6NjQ6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBidGZfaXRlci5vXFxua2VybmVsL2JwZi9NYWtlZmlsZTo2NTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJ0Zl9yZWxvY2F0ZS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZTo2NjpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGttZW1fY2FjaGVfaXRlci5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS02Ny1pZmVxICgkKENPTkZJR19ETUFfU0hBUkVEX0JVRkZFUikseSlcXG5rZXJuZWwvYnBmL01ha2VmaWxlOjY4Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gZG1hYnVmX2l0ZXIub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtNjktZW5kaWZcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jPTk5PXN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2dfYWxsb2Nfbm9fc3RhdHModW5zaWduZWQgaW50IHNpemUsIGdmcF90IGdmcF9leHRyYV9mbGFncylcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jLTE0MS1cXG5rZXJuZWwvYnBmL2NvcmUuYzoxNDI6I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbmtlcm5lbC9icGYvY29yZS5jLTE0My1cXHRicGZfcHJvZ19zdHJlYW1faW5pdChmcCk7XFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz0yNDA0PUVWQUw0KFBST0dfTkFNRV9MSVNULCA0MTYsIDQ0OCwgNDgwLCA1MTIpXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy0yNDA3LVxcbmtlcm5lbC9icGYvY29yZS5jOjI0MDg6I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbmtlcm5lbC9icGYvY29yZS5jLTI0MDktaW50IGJwZl9wYXRjaF9jYWxsX2FyZ3Moc3RydWN0IGJwZl9pbnNuICppbnNuLCB1MzIgc3RhY2tfZGVwdGgpXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz0yOTkyPXZvaWQgX19icGZfZnJlZV91c2VkX2J0ZnMoc3RydWN0IGJ0Zl9tb2RfcGFpciAqdXNlZF9idGZzLCB1MzIgbGVuKVxcbmtlcm5lbC9icGYvY29yZS5jLTI5OTMte1xcbmtlcm5lbC9icGYvY29yZS5jOjI5OTQ6I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbmtlcm5lbC9icGYvY29yZS5jLTI5OTUtXFx0c3RydWN0IGJ0Zl9tb2RfcGFpciAqYnRmX21vZDtcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jPTMwMTM9c3RhdGljIHZvaWQgYnBmX3Byb2dfZnJlZV9kZWZlcnJlZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy0zMDE4LVxcdGF1eCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYnBmX3Byb2dfYXV4LCB3b3JrKTtcXG5rZXJuZWwvYnBmL2NvcmUuYzozMDE5OiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL2NvcmUuYy0zMDIwLVxcdGJwZl9mcmVlX2tmdW5jX2J0Zl90YWIoYXV4LVxcdTAwM2VrZnVuY19idGZfdGFiKTtcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jPTMzMzU9c3RhdGljIG5vaW5saW5lIHZvaWQgYnBmX3Byb2dfcmVwb3J0X21heV9nb3RvX3Zpb2xhdGlvbih2b2lkKVxcbmtlcm5lbC9icGYvY29yZS5jLTMzMzYte1xcbmtlcm5lbC9icGYvY29yZS5jOjMzMzc6I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbmtlcm5lbC9icGYvY29yZS5jLTMzMzgtXFx0c3RydWN0IGJwZl9zdHJlYW1fc3RhZ2Ugc3M7XFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz0zMzc1PV9fd2VhayB1NjQgYnBmX2FyZW5hX2dldF9rZXJuX3ZtX3N0YXJ0KHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hKVxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmMtMzM3OS1cXG5rZXJuZWwvYnBmL2NvcmUuYzozMzgwOiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL2NvcmUuYy0zMzgxLV9fd2VhayBib29sIGJwZl9hcmVuYV9oYW5kbGVfcGFnZV9mYXVsdCh1bnNpZ25lZCBsb25nIGFkZHIsIGJvb2wgaXNfd3JpdGUsXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz0zNDA2PUVYUE9SVF9UUkFDRVBPSU5UX1NZTUJPTF9HUEwoeGRwX2J1bGtfdHgpO1xcbmtlcm5lbC9icGYvY29yZS5jLTM0MDctXFxua2VybmVsL2JwZi9jb3JlLmM6MzQwODojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxua2VybmVsL2JwZi9jb3JlLmMtMzQwOS1cXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE0Njc9aW50IF9fd2VhayBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNDc0LSAgICBkZWZpbmVkKENPTkZJR19IQVZFX1NJTkdMRV9GVFJBQ0VfRElSRUNUX09QUykgXFx1MDAyNlxcdTAwMjYgXFxcXFxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE0NzU6ICAgIGRlZmluZWQoQ09ORklHX0JQRl9TWVNDQUxMKVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE0NzYtXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xNzExPWludCBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCBzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqbGluaylcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE3NDctXFx0ICBDT05GSUdfSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFMgXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNzQ4OlxcdCAgQ09ORklHX0JQRl9TWVNDQUxMICovXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTc0OS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMjM6MDY6MDMuNzY2MDQ4Mjc1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY3ODk4NzA5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBWZXJpZmllciBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyB0aGUgY2hhbmdlIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlzIHNwZWNpZmljYWxseSB3aXRoaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuICBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgaXMgcmVsYXRlZCB0byB0aGUgQlBGIHZlcmlmaWVyIGl0c2VsZiwgYW5kIHRoZSBwcmltYXJ5IHByZXJlcXVpc2l0ZSBmb3IgdGhpcyBjb2RlIHBhdGggaXMgYENPTkZJR19CUEZfU1lTQ0FMTGAuICBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhhdCwgYnV0IEknbSByZWFzb25hYmx5IGNvbmZpZGVudC5cblxuTm93LCBiZWNhdXNlIGl0J3MgaW4gdGhlIGNvbnRleHQgb2YgYHNvY2ttYXBgLCBJIHNob3VsZCBzdGFydCB0aGlua2luZyBhYm91dCByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBBc2lkZSBmcm9tIGBDT05GSUdfQlBGX1NZU0NBTExgLCBhcmUgdGhlcmUgYW55IG90aGVyIGRlcGVuZGVuY2llcyBJIG5lZWQgdG8gY29uc2lkZXI/IE15IGluaXRpYWwgZ3Vlc3MgaXMgdGhhdCBgQ09ORklHX0NHUk9VUF9CUEZgIG9yIHBvc3NpYmx5IGV2ZW4gYENPTkZJR19ORVRgIG1pZ2h0IGFsc28gcGxheSBhIHJvbGUuIFRoZXNlIG9mdGVuIGludGVyYWN0LiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGJyb2FkZXIgY29udGV4dCB0byBjb25maXJtLlxuXG5MZXQncyBxdWlja2x5IGdldCBiYWNrIGludG8gdGhlIGNvZGUgYW5kIGRvdWJsZS1jaGVjayBzcGVjaWZpY2FsbHkgdGhlIGBtYXlfdXBkYXRlX3NvY2ttYXBgIGZ1bmN0aW9uIHdpdGhpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gSSBuZWVkIHRvIGVuc3VyZSBteSBhc3N1bXB0aW9ucyBhYm91dCB0aGUgZGVwZW5kZW5jaWVzIGFyZSBjb3JyZWN0IGFuZCB1bmRlcnN0YW5kIHRoZSBleGFjdCBuYXR1cmUgb2YgdGhlIG1vZGlmaWNhdGlvbi4gVGhpcyBpcyB3aGVyZSBJJ2xsIGdldCB0aGUgcmVhbCBkZXRhaWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NzM5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDIzOjA2OjA3LjQ0NTAzODU0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Njk5ODI4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtYXlfdXBkYXRlX3NvY2ttYXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuYz04MjI3PXN0YXRpYyBpbnQgY2hlY2tfZnVuY19hcmcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIGFyZyxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04NDY4LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo4NDY5OnN0YXRpYyBib29sIG1heV91cGRhdGVfc29ja21hcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgZnVuY19pZClcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtODQ3MC17XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9ODUwOD1zdGF0aWMgaW50IGNoZWNrX21hcF9mdW5jX2NvbXBhdGliaWxpdHkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04NTgzLVxcdFxcdCAgICBmdW5jX2lkICE9IEJQRl9GVU5DX21hcF9sb29rdXBfZWxlbSBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo4NTg0OlxcdFxcdCAgICAhbWF5X3VwZGF0ZV9zb2NrbWFwKGVudiwgZnVuY19pZCkpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTg1ODUtXFx0XFx0XFx0Z290byBlcnJvcjtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04NTkyLVxcdFxcdCAgICBmdW5jX2lkICE9IEJQRl9GVU5DX21hcF9sb29rdXBfZWxlbSBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo4NTkzOlxcdFxcdCAgICAhbWF5X3VwZGF0ZV9zb2NrbWFwKGVudiwgZnVuY19pZCkpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTg1OTQtXFx0XFx0XFx0Z290byBlcnJvcjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMjM6MDY6MDcuNTAyMDQ3MDI2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY1MzExNDgzODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZSwgbXkgaW5pdGlhbCByZWFjdGlvbiBpcywgaG1tLCB0aGUgYG1heV91cGRhdGVfc29ja21hcGAgZnVuY3Rpb24uIFdoZXJlICpleGFjdGx5KiBpcyB0aGF0IHVzZWQ/IE9ubHkgaW4gYGNoZWNrX21hcF9mdW5jX2NvbXBhdGliaWxpdHlgPyBJbnRlcmVzdGluZy4gSSB3b25kZXIgaWYgdGhlcmUncyBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbiByZWxhdGVkIHRvIHNvY2ttYXBzIEkgbmVlZCB0byBiZSBhd2FyZSBvZiBoZXJlPyBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaWcgYXJvdW5kIGluIHRoZSBzb3VyY2UgY29kZS4gTGV0J3Mgc3RhcnQgd2l0aCBgbmV0L2NvcmUvc29ja19tYXAuY2AuIFRoYXQgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBwbGFjZSB0byBmaW5kIHRoZSBuaXR0eS1ncml0dHkgZGV0YWlscy4gSSdsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayBhbnkgYXNzb2NpYXRlZCBmaWxlcyB0b28uIEknbGwga2VlcCB0aGUgY29udGV4dCBpbiBtaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDQ0MiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDIzOjA2OjE0LjAzMzE5OTgxMVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzUzOTQwNTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic29ja19tYXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNjQwIGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5uZXQvY29yZS9NYWtlZmlsZT00ND1vYmotJChDT05GSUdfTkVUX1NPQ0tfTVNHKSArPSBza21zZy5vXFxubmV0L2NvcmUvTWFrZWZpbGU6NDU6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBzb2NrX21hcC5vXFxubmV0L2NvcmUvTWFrZWZpbGUtNDYtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBicGZfc2tfc3RvcmFnZS5vXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz04NTk3PXhkcF9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtODY2Ny1cXG5uZXQvY29yZS9maWx0ZXIuYzo4NjY4OmNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc29ja19tYXBfdXBkYXRlX3Byb3RvIF9fd2VhaztcXG5uZXQvY29yZS9maWx0ZXIuYy04NjY5LWNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc29ja19oYXNoX3VwZGF0ZV9wcm90byBfX3dlYWs7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz04NjcyPXNvY2tfb3BzX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy04Njg2LVxcdFxcdHJldHVybiBcXHUwMDI2YnBmX3NvY2tfb3BzX2NiX2ZsYWdzX3NldF9wcm90bztcXG5uZXQvY29yZS9maWx0ZXIuYzo4Njg3OlxcdGNhc2UgQlBGX0ZVTkNfc29ja19tYXBfdXBkYXRlOlxcbm5ldC9jb3JlL2ZpbHRlci5jOjg2ODg6XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfc29ja19tYXBfdXBkYXRlX3Byb3RvO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTg2ODktXFx0Y2FzZSBCUEZfRlVOQ19zb2NrX2hhc2hfdXBkYXRlOlxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MTE1NzE9QlBGX0NBTExfNChza19zZWxlY3RfcmV1c2Vwb3J0LCBzdHJ1Y3Qgc2tfcmV1c2Vwb3J0X2tlcm4gKiwgcmV1c2Vfa2VybixcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTExNTg4LVxcdFxcdCAqXFxubmV0L2NvcmUvZmlsdGVyLmM6MTE1ODk6XFx0XFx0ICogT3RoZXIgbWFwcyAoZS5nLiBzb2NrX21hcCkgZG8gbm90IHByb3ZpZGUgdGhpcyBndWFyYW50ZWUgYW5kXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE1OTAtXFx0XFx0ICogdGhlIHNrIG1heSBuZXZlciBiZSBpbiB0aGUgcmV1c2Vwb3J0IGdyb3VwIHRvIGJlZ2luIHdpdGguXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMTYxMy1lcnJvcjpcXG5uZXQvY29yZS9maWx0ZXIuYzoxMTYxNDpcXHQvKiBMb29rdXAgaW4gc29ja19tYXAgY2FuIHJldHVybiBUQ1AgRVNUQUJMSVNIRUQgc29ja2V0cy4gKi9cXG5uZXQvY29yZS9maWx0ZXIuYy0xMTYxNS1cXHRpZiAoc2tfaXNfcmVmY291bnRlZChzZWxlY3RlZF9zaykpXFxuLS1cXG5uZXQvY29yZS9za21zZy5jPTY3MT1zdGF0aWMgdm9pZCBza19wc29ja19iYWNrbG9nKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtNjg4LVxcdC8qIEluY3JlbWVudCB0aGUgcHNvY2sgcmVmY250IHRvIHN5bmNocm9uaXplIHdpdGggY2xvc2UoZmQpIHBhdGggaW5cXG5uZXQvY29yZS9za21zZy5jOjY4OTpcXHQgKiBzb2NrX21hcF9jbG9zZSgpLCBlbnN1cmluZyB3ZSB3YWl0IGZvciBiYWNrbG9nIHRocmVhZCBjb21wbGV0aW9uXFxubmV0L2NvcmUvc2ttc2cuYy02OTAtXFx0ICogYmVmb3JlIHNrX3NvY2tldCBmcmVlZC4gSWYgcmVmY250IGluY3JlbWVudCBmYWlscywgaXQgaW5kaWNhdGVzXFxubmV0L2NvcmUvc2ttc2cuYzo2OTE6XFx0ICogc29ja19tYXBfY2xvc2UoKSBjb21wbGV0ZWQgd2l0aCBza19zb2NrZXQgcG90ZW50aWFsbHkgYWxyZWFkeSBmcmVlZC5cXG5uZXQvY29yZS9za21zZy5jLTY5Mi1cXHQgKi9cXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9OTA1PUVYUE9SVF9TWU1CT0xfR1BMKHNrX3Bzb2NrX2Ryb3ApO1xcbm5ldC9jb3JlL3NrbXNnLmMtOTA2LVxcbm5ldC9jb3JlL3NrbXNnLmM6OTA3OnN0YXRpYyBpbnQgc2tfcHNvY2tfbWFwX3ZlcmQoaW50IHZlcmRpY3QsIGJvb2wgcmVkaXIpXFxubmV0L2NvcmUvc2ttc2cuYy05MDgte1xcbi0tXFxubmV0L2NvcmUvc2ttc2cuYz05MjA9aW50IHNrX3Bzb2NrX21zZ192ZXJkaWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayxcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtOTM2LVxcdG1zZy1cXHUwMDNlc2sgPSBOVUxMO1xcbm5ldC9jb3JlL3NrbXNnLmM6OTM3OlxcdHJldCA9IHNrX3Bzb2NrX21hcF92ZXJkKHJldCwgbXNnLVxcdTAwM2Vza19yZWRpcik7XFxubmV0L2NvcmUvc2ttc2cuYy05MzgtXFx0cHNvY2stXFx1MDAzZWFwcGx5X2J5dGVzID0gbXNnLVxcdTAwM2VhcHBseV9ieXRlcztcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9MTA3NT1zdGF0aWMgdm9pZCBza19wc29ja19zdHJwX3JlYWQoc3RydWN0IHN0cnBhcnNlciAqc3RycCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtMTA5NS1cXHRcXHRza2JfYnBmX3NldF9zdHJwYXJzZXIoc2tiKTtcXG5uZXQvY29yZS9za21zZy5jOjEwOTY6XFx0XFx0cmV0ID0gc2tfcHNvY2tfbWFwX3ZlcmQocmV0LCBza2JfYnBmX3JlZGlyZWN0X2ZldGNoKHNrYikpO1xcbm5ldC9jb3JlL3NrbXNnLmMtMTA5Ny1cXHRcXHRza2ItXFx1MDAzZXNrID0gTlVMTDtcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9MTE5OD1zdGF0aWMgaW50IHNrX3Bzb2NrX3ZlcmRpY3RfcmVjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTEyMTktXFx0XFx0cmV0ID0gYnBmX3Byb2dfcnVuX3Bpbl9vbl9jcHUocHJvZywgc2tiKTtcXG5uZXQvY29yZS9za21zZy5jOjEyMjA6XFx0XFx0cmV0ID0gc2tfcHNvY2tfbWFwX3ZlcmQocmV0LCBza2JfYnBmX3JlZGlyZWN0X2ZldGNoKHNrYikpO1xcbm5ldC9jb3JlL3NrbXNnLmMtMTIyMS1cXHR9XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jPTMyPXN0YXRpYyBERUZJTkVfTVVURVgoc29ja21hcF9tdXRleCk7XFxubmV0L2NvcmUvc29ja19tYXAuYy0zMy1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjM0OnN0YXRpYyBpbnQgc29ja19tYXBfcHJvZ191cGRhdGUoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzUtXFx0XFx0XFx0XFx0c3RydWN0IGJwZl9wcm9nICpvbGQsIHN0cnVjdCBicGZfbGluayAqbGluayxcXG5uZXQvY29yZS9zb2NrX21hcC5jLTM2LVxcdFxcdFxcdFxcdHUzMiB3aGljaCk7XFxubmV0L2NvcmUvc29ja19tYXAuYzozNzpzdGF0aWMgc3RydWN0IHNrX3Bzb2NrX3Byb2dzICpzb2NrX21hcF9wcm9ncyhzdHJ1Y3QgYnBmX21hcCAqbWFwKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTM4LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6Mzk6c3RhdGljIHN0cnVjdCBicGZfbWFwICpzb2NrX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcXG5uZXQvY29yZS9zb2NrX21hcC5jLTQwLXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjctXFxubmV0L2NvcmUvc29ja19tYXAuYzo2ODppbnQgc29ja19tYXBfZ2V0X2Zyb21fZmQoY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG5uZXQvY29yZS9zb2NrX21hcC5jLTY5LXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODAtXFx0bXV0ZXhfbG9jayhcXHUwMDI2c29ja21hcF9tdXRleCk7XFxubmV0L2NvcmUvc29ja19tYXAuYzo4MTpcXHRyZXQgPSBzb2NrX21hcF9wcm9nX3VwZGF0ZShtYXAsIHByb2csIE5VTEwsIE5VTEwsIGF0dHItXFx1MDAzZWF0dGFjaF90eXBlKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTgyLVxcdG11dGV4X3VubG9jayhcXHUwMDI2c29ja21hcF9tdXRleCk7XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTg1LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODY6aW50IHNvY2tfbWFwX3Byb2dfZGV0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBlbnVtIGJwZl9wcm9nX3R5cGUgcHR5cGUpXFxubmV0L2NvcmUvc29ja19tYXAuYy04Ny17XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTEwOS1cXHRtdXRleF9sb2NrKFxcdTAwMjZzb2NrbWFwX211dGV4KTtcXG5uZXQvY29yZS9zb2NrX21hcC5jOjExMDpcXHRyZXQgPSBzb2NrX21hcF9wcm9nX3VwZGF0ZShtYXAsIE5VTEwsIHByb2csIE5VTEwsIGF0dHItXFx1MDAzZWF0dGFjaF90eXBlKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTExMS1cXHRtdXRleF91bmxvY2soXFx1MDAyNnNvY2ttYXBfbXV0ZXgpO1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xMTYtXFxubmV0L2NvcmUvc29ja19tYXAuYzoxMTc6c3RhdGljIHZvaWQgc29ja19tYXBfc2tfYWNxdWlyZShzdHJ1Y3Qgc29jayAqc2spXFxubmV0L2NvcmUvc29ja19tYXAuYy0xMTgtXFx0X19hY3F1aXJlcyhcXHUwMDI2c2stXFx1MDAzZXNrX2xvY2suc2xvY2spXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTEyMy1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjEyNDpzdGF0aWMgdm9pZCBzb2NrX21hcF9za19yZWxlYXNlKHN0cnVjdCBzb2NrICpzaylcXG5uZXQvY29yZS9zb2NrX21hcC5jLTEyNS1cXHRfX3JlbGVhc2VzKFxcdTAwMjZzay1cXHUwMDNlc2tfbG9jay5zbG9jaylcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTMwLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTMxOnN0YXRpYyB2b2lkIHNvY2tfbWFwX2FkZF9saW5rKHN0cnVjdCBza19wc29jayAqcHNvY2ssXFxubmV0L2NvcmUvc29ja19tYXAuYy0xMzItXFx0XFx0XFx0ICAgICAgc3RydWN0IHNrX3Bzb2NrX2xpbmsgKmxpbmssXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTE0MS1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjE0MjpzdGF0aWMgdm9pZCBzb2NrX21hcF9kZWxfbGluayhzdHJ1Y3Qgc29jayAqc2ssXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNDMtXFx0XFx0XFx0ICAgICAgc3RydWN0IHNrX3Bzb2NrICpwc29jaywgdm9pZCAqbGlua19yYXcpXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTE1MS1cXHRcXHRcXHRzdHJ1Y3QgYnBmX21hcCAqbWFwID0gbGluay1cXHUwMDNlbWFwO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTUyOlxcdFxcdFxcdHN0cnVjdCBza19wc29ja19wcm9ncyAqcHJvZ3MgPSBzb2NrX21hcF9wcm9ncyhtYXApO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTUzLVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNzgtXFxubmV0L2NvcmUvc29ja19tYXAuYzoxNzk6c3RhdGljIHZvaWQgc29ja19tYXBfdW5yZWYoc3RydWN0IHNvY2sgKnNrLCB2b2lkICpsaW5rX3JhdylcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE4MC17XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTE4My1cXHRpZiAobGlrZWx5KHBzb2NrKSkge1xcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTg0OlxcdFxcdHNvY2tfbWFwX2RlbF9saW5rKHNrLCBwc29jaywgbGlua19yYXcpO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTg1LVxcdFxcdHNrX3Bzb2NrX3B1dChzaywgcHNvY2spO1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xODgtXFxubmV0L2NvcmUvc29ja19tYXAuYzoxODk6c3RhdGljIGludCBzb2NrX21hcF9pbml0X3Byb3RvKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaylcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE5MC17XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTE5Ni1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjE5NzpzdGF0aWMgc3RydWN0IHNrX3Bzb2NrICpzb2NrX21hcF9wc29ja19nZXRfY2hlY2tlZChzdHJ1Y3Qgc29jayAqc2spXFxubmV0L2NvcmUvc29ja19tYXAuYy0xOTgte1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0yMDMtXFx0aWYgKHBzb2NrKSB7XFxubmV0L2NvcmUvc29ja19tYXAuYzoyMDQ6XFx0XFx0aWYgKHNrLVxcdTAwM2Vza19wcm90LVxcdTAwM2VjbG9zZSAhPSBzb2NrX21hcF9jbG9zZSkge1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMjA1LVxcdFxcdFxcdHBzb2NrID0gRVJSX1BUUigtRUJVU1kpO1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0yMTYtXFxubmV0L2NvcmUvc29ja19tYXAuYzoyMTc6c3RhdGljIGludCBzb2NrX21hcF9saW5rKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBzb2NrICpzaylcXG5uZXQvY29yZS9zb2NrX21hcC5jLTIxOC17XFxubmV0L2NvcmUvc29ja19tYXAuYzoyMTk6XFx0c3RydWN0IHNrX3Bzb2NrX3Byb2dzICpwcm9ncyA9IHNvY2tfbWFwX3Byb2dzKG1hcCk7XFxubmV0L2NvcmUvc29ja19tYXAuYy0yMjAtXFx0c3RydWN0IGJwZl9wcm9nICpzdHJlYW1fdmVyZGljdCA9IE5VTEw7XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTI2MC1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjI2MTpcXHRwc29jayA9IHNvY2tfbWFwX3Bzb2NrX2dldF9jaGVja2VkKHNrKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTI2Mi1cXHRpZiAoSVNfRVJSKHBzb2NrKSkge1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0yOTctXFx0ICovXFxubmV0L2NvcmUvc29ja19tYXAuYzoyOTg6XFx0cmV0ID0gc29ja19tYXBfaW5pdF9wcm90byhzaywgcHNvY2spO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMjk5LVxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTMzOC1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjMzOTpzdGF0aWMgdm9pZCBzb2NrX21hcF9mcmVlKHN0cnVjdCBicGZfbWFwICptYXApXFxubmV0L2NvcmUvc29ja19tYXAuYy0zNDAte1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0zNTctXFx0XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MzU4OlxcdFxcdFxcdHNvY2tfbWFwX3VucmVmKHNrLCBwc2spO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzU5LVxcdFxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0zNzEtXFxubmV0L2NvcmUvc29ja19tYXAuYzozNzI6c3RhdGljIHZvaWQgc29ja19tYXBfcmVsZWFzZV9wcm9ncyhzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzczLXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzc2LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6Mzc3OnN0YXRpYyBzdHJ1Y3Qgc29jayAqX19zb2NrX21hcF9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1MzIga2V5KVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzc4LXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzg3LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6Mzg4OnN0YXRpYyB2b2lkICpzb2NrX21hcF9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzg5LXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzkxLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MzkyOlxcdHNrID0gX19zb2NrX21hcF9sb29rdXBfZWxlbShtYXAsICoodTMyICopa2V5KTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTM5My1cXHRpZiAoIXNrKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0zOTktXFxubmV0L2NvcmUvc29ja19tYXAuYzo0MDA6c3RhdGljIHZvaWQgKnNvY2tfbWFwX2xvb2t1cF9zeXMoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDAxLXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDA2LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NDA3OlxcdHNrID0gX19zb2NrX21hcF9sb29rdXBfZWxlbShtYXAsICoodTMyICopa2V5KTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTQwOC1cXHRpZiAoIXNrKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy00MTQtXFxubmV0L2NvcmUvc29ja19tYXAuYzo0MTU6c3RhdGljIGludCBfX3NvY2tfbWFwX2RlbGV0ZShzdHJ1Y3QgYnBmX3N0YWIgKnN0YWIsIHN0cnVjdCBzb2NrICpza190ZXN0LFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDE2LVxcdFxcdFxcdCAgICAgc3RydWN0IHNvY2sgKipwc2spXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTQyNS1cXHRpZiAobGlrZWx5KHNrKSlcXG5uZXQvY29yZS9zb2NrX21hcC5jOjQyNjpcXHRcXHRzb2NrX21hcF91bnJlZihzaywgcHNrKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTQyNy1cXHRlbHNlXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTQzMy1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjQzNDpzdGF0aWMgdm9pZCBzb2NrX21hcF9kZWxldGVfZnJvbV9saW5rKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBzb2NrICpzayxcXG5uZXQvY29yZS9zb2NrX21hcC5jLTQzNS1cXHRcXHRcXHRcXHQgICAgICB2b2lkICpsaW5rX3JhdylcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDM4LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NDM5OlxcdF9fc29ja19tYXBfZGVsZXRlKHN0YWIsIHNrLCBsaW5rX3Jhdyk7XFxubmV0L2NvcmUvc29ja19tYXAuYy00NDAtfVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDQxLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NDQyOnN0YXRpYyBsb25nIHNvY2tfbWFwX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcXG5uZXQvY29yZS9zb2NrX21hcC5jLTQ0My17XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTQ1MS1cXHRwc2sgPSBcXHUwMDI2c3RhYi1cXHUwMDNlc2tzW2ldO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NDUyOlxcdHJldHVybiBfX3NvY2tfbWFwX2RlbGV0ZShzdGFiLCBOVUxMLCBwc2spO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDUzLX1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTQ1NC1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjQ1NTpzdGF0aWMgaW50IHNvY2tfbWFwX2dldF9uZXh0X2tleShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKm5leHQpXFxubmV0L2NvcmUvc29ja19tYXAuYy00NTYte1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy00NjktXFxubmV0L2NvcmUvc29ja19tYXAuYzo0NzA6c3RhdGljIGludCBzb2NrX21hcF91cGRhdGVfY29tbW9uKHN0cnVjdCBicGZfbWFwICptYXAsIHUzMiBpZHgsXFxubmV0L2NvcmUvc29ja19tYXAuYy00NzEtXFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc29jayAqc2ssIHU2NCBmbGFncylcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDg4LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NDg5OlxcdHJldCA9IHNvY2tfbWFwX2xpbmsobWFwLCBzayk7XFxubmV0L2NvcmUvc29ja19tYXAuYy00OTAtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTUwNS1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjUwNjpcXHRzb2NrX21hcF9hZGRfbGluayhwc29jaywgbGluaywgbWFwLCBcXHUwMDI2c3RhYi1cXHUwMDNlc2tzW2lkeF0pO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTA3LVxcdHN0YWItXFx1MDAzZXNrc1tpZHhdID0gc2s7XFxubmV0L2NvcmUvc29ja19tYXAuYy01MDgtXFx0aWYgKG9zaylcXG5uZXQvY29yZS9zb2NrX21hcC5jOjUwOTpcXHRcXHRzb2NrX21hcF91bnJlZihvc2ssIFxcdTAwMjZzdGFiLVxcdTAwM2Vza3NbaWR4XSk7XFxubmV0L2NvcmUvc29ja19tYXAuYy01MTAtXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnN0YWItXFx1MDAzZWxvY2spO1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy01MjAtXFxubmV0L2NvcmUvc29ja19tYXAuYzo1MjE6c3RhdGljIGJvb2wgc29ja19tYXBfb3Bfb2theShjb25zdCBzdHJ1Y3QgYnBmX3NvY2tfb3BzX2tlcm4gKm9wcylcXG5uZXQvY29yZS9zb2NrX21hcC5jLTUyMi17XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTUyNy1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjUyODpzdGF0aWMgYm9vbCBzb2NrX21hcF9yZWRpcmVjdF9hbGxvd2VkKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG5uZXQvY29yZS9zb2NrX21hcC5jLTUyOS17XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTUzNS1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjUzNjpzdGF0aWMgYm9vbCBzb2NrX21hcF9za19pc19zdWl0YWJsZShjb25zdCBzdHJ1Y3Qgc29jayAqc2spXFxubmV0L2NvcmUvc29ja19tYXAuYy01Mzcte1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy01NDAtXFxubmV0L2NvcmUvc29ja19tYXAuYzo1NDE6c3RhdGljIGJvb2wgc29ja19tYXBfc2tfc3RhdGVfYWxsb3dlZChjb25zdCBzdHJ1Y3Qgc29jayAqc2spXFxubmV0L2NvcmUvc29ja19tYXAuYy01NDIte1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz01NTM9c3RhdGljIGludCBzb2NrX2hhc2hfdXBkYXRlX2NvbW1vbihzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTU1NS1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjU1NjppbnQgc29ja19tYXBfdXBkYXRlX2VsZW1fc3lzKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsXFxubmV0L2NvcmUvc29ja19tYXAuYy01NTctXFx0XFx0XFx0ICAgICB1NjQgZmxhZ3MpXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTU3OC1cXHR9XFxubmV0L2NvcmUvc29ja19tYXAuYzo1Nzk6XFx0aWYgKCFzb2NrX21hcF9za19pc19zdWl0YWJsZShzaykpIHtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTU4MC1cXHRcXHRyZXQgPSAtRU9QTk9UU1VQUDtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTgzLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NTg0OlxcdHNvY2tfbWFwX3NrX2FjcXVpcmUoc2spO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NTg1OlxcdGlmICghc29ja19tYXBfc2tfc3RhdGVfYWxsb3dlZChzaykpXFxubmV0L2NvcmUvc29ja19tYXAuYy01ODYtXFx0XFx0cmV0ID0gLUVPUE5PVFNVUFA7XFxubmV0L2NvcmUvc29ja19tYXAuYy01ODctXFx0ZWxzZSBpZiAobWFwLVxcdTAwM2VtYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfU09DS01BUClcXG5uZXQvY29yZS9zb2NrX21hcC5jOjU4ODpcXHRcXHRyZXQgPSBzb2NrX21hcF91cGRhdGVfY29tbW9uKG1hcCwgKih1MzIgKilrZXksIHNrLCBmbGFncyk7XFxubmV0L2NvcmUvc29ja19tYXAuYy01ODktXFx0ZWxzZVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTkwLVxcdFxcdHJldCA9IHNvY2tfaGFzaF91cGRhdGVfY29tbW9uKG1hcCwga2V5LCBzaywgZmxhZ3MpO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NTkxOlxcdHNvY2tfbWFwX3NrX3JlbGVhc2Uoc2spO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTkyLW91dDpcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTk2LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NTk3OnN0YXRpYyBsb25nIHNvY2tfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcXG5uZXQvY29yZS9zb2NrX21hcC5jLTU5OC1cXHRcXHRcXHRcXHQgdm9pZCAqdmFsdWUsIHU2NCBmbGFncylcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjA1LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NjA2OlxcdGlmICghc29ja19tYXBfc2tfaXNfc3VpdGFibGUoc2spKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjA3LVxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjEwLVxcdGJoX2xvY2tfc29jayhzayk7XFxubmV0L2NvcmUvc29ja19tYXAuYzo2MTE6XFx0aWYgKCFzb2NrX21hcF9za19zdGF0ZV9hbGxvd2VkKHNrKSlcXG5uZXQvY29yZS9zb2NrX21hcC5jLTYxMi1cXHRcXHRyZXQgPSAtRU9QTk9UU1VQUDtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTYxMy1cXHRlbHNlIGlmIChtYXAtXFx1MDAzZW1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9TT0NLTUFQKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NjE0OlxcdFxcdHJldCA9IHNvY2tfbWFwX3VwZGF0ZV9jb21tb24obWFwLCAqKHUzMiAqKWtleSwgc2ssIGZsYWdzKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTYxNS1cXHRlbHNlXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTYyMS1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjYyMjpCUEZfQ0FMTF80KGJwZl9zb2NrX21hcF91cGRhdGUsIHN0cnVjdCBicGZfc29ja19vcHNfa2VybiAqLCBzb3BzLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjIzLVxcdCAgIHN0cnVjdCBicGZfbWFwICosIG1hcCwgdm9pZCAqLCBrZXksIHU2NCwgZmxhZ3MpXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTYyNi1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjYyNzpcXHRpZiAobGlrZWx5KHNvY2tfbWFwX3NrX2lzX3N1aXRhYmxlKHNvcHMtXFx1MDAzZXNrKSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NjI4OlxcdFxcdCAgIHNvY2tfbWFwX29wX29rYXkoc29wcykpKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NjI5OlxcdFxcdHJldHVybiBzb2NrX21hcF91cGRhdGVfY29tbW9uKG1hcCwgKih1MzIgKilrZXksIHNvcHMtXFx1MDAzZXNrLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjMwLVxcdFxcdFxcdFxcdFxcdCAgICAgIGZsYWdzKTtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjMzLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NjM0OmNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc29ja19tYXBfdXBkYXRlX3Byb3RvID0ge1xcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NjM1OlxcdC5mdW5jXFx0XFx0PSBicGZfc29ja19tYXBfdXBkYXRlLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjM2LVxcdC5ncGxfb25seVxcdD0gZmFsc2UsXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jPTY0NT1CUEZfQ0FMTF80KGJwZl9za19yZWRpcmVjdF9tYXAsIHN0cnVjdCBza19idWZmICosIHNrYixcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjUyLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NjUzOlxcdHNrID0gX19zb2NrX21hcF9sb29rdXBfZWxlbShtYXAsIGtleSk7XFxubmV0L2NvcmUvc29ja19tYXAuYzo2NTQ6XFx0aWYgKHVubGlrZWx5KCFzayB8fCAhc29ja19tYXBfcmVkaXJlY3RfYWxsb3dlZChzaykpKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjU1LVxcdFxcdHJldHVybiBTS19EUk9QO1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz02NzM9QlBGX0NBTExfNChicGZfbXNnX3JlZGlyZWN0X21hcCwgc3RydWN0IHNrX21zZyAqLCBtc2csXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTY4MC1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjY4MTpcXHRzayA9IF9fc29ja19tYXBfbG9va3VwX2VsZW0obWFwLCBrZXkpO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NjgyOlxcdGlmICh1bmxpa2VseSghc2sgfHwgIXNvY2tfbWFwX3JlZGlyZWN0X2FsbG93ZWQoc2spKSlcXG5uZXQvY29yZS9zb2NrX21hcC5jLTY4My1cXHRcXHRyZXR1cm4gU0tfRFJPUDtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9Njk0PWNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfbXNnX3JlZGlyZWN0X21hcF9wcm90byA9IHtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzAzLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NzA0OnN0cnVjdCBzb2NrX21hcF9zZXFfaW5mbyB7XFxubmV0L2NvcmUvc29ja19tYXAuYy03MDUtXFx0c3RydWN0IGJwZl9tYXAgKm1hcDtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9NzE3PURFRklORV9CUEZfSVRFUl9GVU5DKHNvY2ttYXAsIHN0cnVjdCBicGZfaXRlcl9tZXRhICptZXRhLFxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy03MjAtXFxubmV0L2NvcmUvc29ja19tYXAuYzo3MjE6c3RhdGljIHZvaWQgKnNvY2tfbWFwX3NlcV9sb29rdXBfZWxlbShzdHJ1Y3Qgc29ja19tYXBfc2VxX2luZm8gKmluZm8pXFxubmV0L2NvcmUvc29ja19tYXAuYy03MjIte1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy03MjUtXFxubmV0L2NvcmUvc29ja19tYXAuYzo3MjY6XFx0aW5mby1cXHUwMDNlc2sgPSBfX3NvY2tfbWFwX2xvb2t1cF9lbGVtKGluZm8tXFx1MDAzZW1hcCwgaW5mby1cXHUwMDNlaW5kZXgpO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzI3LVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy03MzEtXFxubmV0L2NvcmUvc29ja19tYXAuYzo3MzI6c3RhdGljIHZvaWQgKnNvY2tfbWFwX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpXFxubmV0L2NvcmUvc29ja19tYXAuYy03MzMtXFx0X19hY3F1aXJlcyhyY3UpXFxubmV0L2NvcmUvc29ja19tYXAuYy03MzQte1xcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NzM1OlxcdHN0cnVjdCBzb2NrX21hcF9zZXFfaW5mbyAqaW5mbyA9IHNlcS1cXHUwMDNlcHJpdmF0ZTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTczNi1cXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzM5LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NzQwOlxcdC8qIHBhaXJzIHdpdGggc29ja19tYXBfc2VxX3N0b3AgKi9cXG5uZXQvY29yZS9zb2NrX21hcC5jLTc0MS1cXHRyY3VfcmVhZF9sb2NrKCk7XFxubmV0L2NvcmUvc29ja19tYXAuYzo3NDI6XFx0cmV0dXJuIHNvY2tfbWFwX3NlcV9sb29rdXBfZWxlbShpbmZvKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTc0My19XFxubmV0L2NvcmUvc29ja19tYXAuYy03NDQtXFxubmV0L2NvcmUvc29ja19tYXAuYzo3NDU6c3RhdGljIHZvaWQgKnNvY2tfbWFwX3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBsb2ZmX3QgKnBvcylcXG5uZXQvY29yZS9zb2NrX21hcC5jLTc0Ni1cXHRfX211c3RfaG9sZChyY3UpXFxubmV0L2NvcmUvc29ja19tYXAuYy03NDcte1xcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NzQ4OlxcdHN0cnVjdCBzb2NrX21hcF9zZXFfaW5mbyAqaW5mbyA9IHNlcS1cXHUwMDNlcHJpdmF0ZTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTc0OS1cXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzUyLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NzUzOlxcdHJldHVybiBzb2NrX21hcF9zZXFfbG9va3VwX2VsZW0oaW5mbyk7XFxubmV0L2NvcmUvc29ja19tYXAuYy03NTQtfVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzU1LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NzU2OnN0YXRpYyBpbnQgc29ja19tYXBfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxubmV0L2NvcmUvc29ja19tYXAuYy03NTctXFx0X19tdXN0X2hvbGQocmN1KVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzU4LXtcXG5uZXQvY29yZS9zb2NrX21hcC5jOjc1OTpcXHRzdHJ1Y3Qgc29ja19tYXBfc2VxX2luZm8gKmluZm8gPSBzZXEtXFx1MDAzZXByaXZhdGU7XFxubmV0L2NvcmUvc29ja19tYXAuYy03NjAtXFx0c3RydWN0IGJwZl9pdGVyX19zb2NrbWFwIGN0eCA9IHt9O1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy03NzgtXFxubmV0L2NvcmUvc29ja19tYXAuYzo3Nzk6c3RhdGljIHZvaWQgc29ja19tYXBfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxubmV0L2NvcmUvc29ja19tYXAuYy03ODAtXFx0X19yZWxlYXNlcyhyY3UpXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTc4Mi1cXHRpZiAoIXYpXFxubmV0L2NvcmUvc29ja19tYXAuYzo3ODM6XFx0XFx0KHZvaWQpc29ja19tYXBfc2VxX3Nob3coc2VxLCBOVUxMKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTc4NC1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjc4NTpcXHQvKiBwYWlycyB3aXRoIHNvY2tfbWFwX3NlcV9zdGFydCAqL1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzg2LVxcdHJjdV9yZWFkX3VubG9jaygpO1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy03ODgtXFxubmV0L2NvcmUvc29ja19tYXAuYzo3ODk6c3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBzb2NrX21hcF9zZXFfb3BzID0ge1xcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NzkwOlxcdC5zdGFydFxcdD0gc29ja19tYXBfc2VxX3N0YXJ0LFxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NzkxOlxcdC5uZXh0XFx0PSBzb2NrX21hcF9zZXFfbmV4dCxcXG5uZXQvY29yZS9zb2NrX21hcC5jOjc5MjpcXHQuc3RvcFxcdD0gc29ja19tYXBfc2VxX3N0b3AsXFxubmV0L2NvcmUvc29ja19tYXAuYzo3OTM6XFx0LnNob3dcXHQ9IHNvY2tfbWFwX3NlcV9zaG93LFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzk0LX07XFxubmV0L2NvcmUvc29ja19tYXAuYy03OTUtXFxubmV0L2NvcmUvc29ja19tYXAuYzo3OTY6c3RhdGljIGludCBzb2NrX21hcF9pbml0X3NlcV9wcml2YXRlKHZvaWQgKnByaXZfZGF0YSxcXG5uZXQvY29yZS9zb2NrX21hcC5jLTc5Ny1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBicGZfaXRlcl9hdXhfaW5mbyAqYXV4KVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzk4LXtcXG5uZXQvY29yZS9zb2NrX21hcC5jOjc5OTpcXHRzdHJ1Y3Qgc29ja19tYXBfc2VxX2luZm8gKmluZm8gPSBwcml2X2RhdGE7XFxubmV0L2NvcmUvc29ja19tYXAuYy04MDAtXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTgwNS1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjgwNjpzdGF0aWMgdm9pZCBzb2NrX21hcF9maW5pX3NlcV9wcml2YXRlKHZvaWQgKnByaXZfZGF0YSlcXG5uZXQvY29yZS9zb2NrX21hcC5jLTgwNy17XFxubmV0L2NvcmUvc29ja19tYXAuYzo4MDg6XFx0c3RydWN0IHNvY2tfbWFwX3NlcV9pbmZvICppbmZvID0gcHJpdl9kYXRhO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODA5LVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy04MTItXFxubmV0L2NvcmUvc29ja19tYXAuYzo4MTM6c3RhdGljIHU2NCBzb2NrX21hcF9tZW1fdXNhZ2UoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcClcXG5uZXQvY29yZS9zb2NrX21hcC5jLTgxNC17XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTgyMC1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjgyMTpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9pdGVyX3NlcV9pbmZvIHNvY2tfbWFwX2l0ZXJfc2VxX2luZm8gPSB7XFxubmV0L2NvcmUvc29ja19tYXAuYzo4MjI6XFx0LnNlcV9vcHNcXHRcXHQ9IFxcdTAwMjZzb2NrX21hcF9zZXFfb3BzLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODIzOlxcdC5pbml0X3NlcV9wcml2YXRlXFx0PSBzb2NrX21hcF9pbml0X3NlcV9wcml2YXRlLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODI0OlxcdC5maW5pX3NlcV9wcml2YXRlXFx0PSBzb2NrX21hcF9maW5pX3NlcV9wcml2YXRlLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODI1OlxcdC5zZXFfcHJpdl9zaXplXFx0XFx0PSBzaXplb2Yoc3RydWN0IHNvY2tfbWFwX3NlcV9pbmZvKSxcXG5uZXQvY29yZS9zb2NrX21hcC5jLTgyNi19O1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODI3LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODI4OkJURl9JRF9MSVNUX1NJTkdMRShzb2NrX21hcF9idGZfaWRzLCBzdHJ1Y3QsIGJwZl9zdGFiKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODI5OmNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBzb2NrX21hcF9vcHMgPSB7XFxubmV0L2NvcmUvc29ja19tYXAuYy04MzAtXFx0Lm1hcF9tZXRhX2VxdWFsXFx0XFx0PSBicGZfbWFwX21ldGFfZXF1YWwsXFxubmV0L2NvcmUvc29ja19tYXAuYzo4MzE6XFx0Lm1hcF9hbGxvY1xcdFxcdD0gc29ja19tYXBfYWxsb2MsXFxubmV0L2NvcmUvc29ja19tYXAuYzo4MzI6XFx0Lm1hcF9mcmVlXFx0XFx0PSBzb2NrX21hcF9mcmVlLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODMzOlxcdC5tYXBfZ2V0X25leHRfa2V5XFx0PSBzb2NrX21hcF9nZXRfbmV4dF9rZXksXFxubmV0L2NvcmUvc29ja19tYXAuYzo4MzQ6XFx0Lm1hcF9sb29rdXBfZWxlbV9zeXNfb25seSA9IHNvY2tfbWFwX2xvb2t1cF9zeXMsXFxubmV0L2NvcmUvc29ja19tYXAuYzo4MzU6XFx0Lm1hcF91cGRhdGVfZWxlbVxcdD0gc29ja19tYXBfdXBkYXRlX2VsZW0sXFxubmV0L2NvcmUvc29ja19tYXAuYzo4MzY6XFx0Lm1hcF9kZWxldGVfZWxlbVxcdD0gc29ja19tYXBfZGVsZXRlX2VsZW0sXFxubmV0L2NvcmUvc29ja19tYXAuYzo4Mzc6XFx0Lm1hcF9sb29rdXBfZWxlbVxcdD0gc29ja19tYXBfbG9va3VwLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODM4OlxcdC5tYXBfcmVsZWFzZV91cmVmXFx0PSBzb2NrX21hcF9yZWxlYXNlX3Byb2dzLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODM5LVxcdC5tYXBfY2hlY2tfYnRmXFx0XFx0PSBtYXBfY2hlY2tfbm9fYnRmLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODQwOlxcdC5tYXBfbWVtX3VzYWdlXFx0XFx0PSBzb2NrX21hcF9tZW1fdXNhZ2UsXFxubmV0L2NvcmUvc29ja19tYXAuYzo4NDE6XFx0Lm1hcF9idGZfaWRcXHRcXHQ9IFxcdTAwMjZzb2NrX21hcF9idGZfaWRzWzBdLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODQyOlxcdC5pdGVyX3NlcV9pbmZvXFx0XFx0PSBcXHUwMDI2c29ja19tYXBfaXRlcl9zZXFfaW5mbyxcXG5uZXQvY29yZS9zb2NrX21hcC5jLTg0My19O1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz05MTY9c3RhdGljIHZvaWQgc29ja19oYXNoX2RlbGV0ZV9mcm9tX2xpbmsoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy05MzQtXFx0XFx0aGxpc3RfZGVsX3JjdShcXHUwMDI2ZWxlbS1cXHUwMDNlbm9kZSk7XFxubmV0L2NvcmUvc29ja19tYXAuYzo5MzU6XFx0XFx0c29ja19tYXBfdW5yZWYoZWxlbS1cXHUwMDNlc2ssIGVsZW0pO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtOTM2LVxcdFxcdHNvY2tfaGFzaF9mcmVlX2VsZW0oaHRhYiwgZWxlbSk7XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jPTk0MT1zdGF0aWMgbG9uZyBzb2NrX2hhc2hfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy05NTUtXFx0XFx0aGxpc3RfZGVsX3JjdShcXHUwMDI2ZWxlbS1cXHUwMDNlbm9kZSk7XFxubmV0L2NvcmUvc29ja19tYXAuYzo5NTY6XFx0XFx0c29ja19tYXBfdW5yZWYoZWxlbS1cXHUwMDNlc2ssIGVsZW0pO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtOTU3LVxcdFxcdHNvY2tfaGFzaF9mcmVlX2VsZW0oaHRhYiwgZWxlbSk7XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jPTk5MT1zdGF0aWMgaW50IHNvY2tfaGFzaF91cGRhdGVfY29tbW9uKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTAwOS1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjEwMTA6XFx0cmV0ID0gc29ja19tYXBfbGluayhtYXAsIHNrKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTEwMTEtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTEwMzUtXFxubmV0L2NvcmUvc29ja19tYXAuYzoxMDM2OlxcdHNvY2tfbWFwX2FkZF9saW5rKHBzb2NrLCBsaW5rLCBtYXAsIGVsZW1fbmV3KTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTEwMzctXFx0LyogQWRkIG5ldyBlbGVtZW50IHRvIHRoZSBoZWFkIG9mIHRoZSBsaXN0LCBzbyB0aGF0XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTEwNDItXFx0XFx0aGxpc3RfZGVsX3JjdShcXHUwMDI2ZWxlbS1cXHUwMDNlbm9kZSk7XFxubmV0L2NvcmUvc29ja19tYXAuYzoxMDQzOlxcdFxcdHNvY2tfbWFwX3VucmVmKGVsZW0tXFx1MDAzZXNrLCBlbGVtKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTEwNDQtXFx0XFx0c29ja19oYXNoX2ZyZWVfZWxlbShodGFiLCBlbGVtKTtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9MTE0ND1zdGF0aWMgdm9pZCBzb2NrX2hhc2hfZnJlZShzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xMTgwLVxcdFxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jOjExODE6XFx0XFx0XFx0c29ja19tYXBfdW5yZWYoZWxlbS1cXHUwMDNlc2ssIGVsZW0pO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTE4Mi1cXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9MTIyOT1CUEZfQ0FMTF80KGJwZl9zb2NrX2hhc2hfdXBkYXRlLCBzdHJ1Y3QgYnBmX3NvY2tfb3BzX2tlcm4gKiwgc29wcyxcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTIzMy1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjEyMzQ6XFx0aWYgKGxpa2VseShzb2NrX21hcF9za19pc19zdWl0YWJsZShzb3BzLVxcdTAwM2VzaykgXFx1MDAyNlxcdTAwMjZcXG5uZXQvY29yZS9zb2NrX21hcC5jOjEyMzU6XFx0XFx0ICAgc29ja19tYXBfb3Bfb2theShzb3BzKSkpXFxubmV0L2NvcmUvc29ja19tYXAuYy0xMjM2LVxcdFxcdHJldHVybiBzb2NrX2hhc2hfdXBkYXRlX2NvbW1vbihtYXAsIGtleSwgc29wcy1cXHUwMDNlc2ssIGZsYWdzKTtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9MTI1MT1CUEZfQ0FMTF80KGJwZl9za19yZWRpcmVjdF9oYXNoLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTEyNTktXFx0c2sgPSBfX3NvY2tfaGFzaF9sb29rdXBfZWxlbShtYXAsIGtleSk7XFxubmV0L2NvcmUvc29ja19tYXAuYzoxMjYwOlxcdGlmICh1bmxpa2VseSghc2sgfHwgIXNvY2tfbWFwX3JlZGlyZWN0X2FsbG93ZWQoc2spKSlcXG5uZXQvY29yZS9zb2NrX21hcC5jLTEyNjEtXFx0XFx0cmV0dXJuIFNLX0RST1A7XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jPTEyNzk9QlBGX0NBTExfNChicGZfbXNnX3JlZGlyZWN0X2hhc2gsIHN0cnVjdCBza19tc2cgKiwgbXNnLFxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xMjg3LVxcdHNrID0gX19zb2NrX2hhc2hfbG9va3VwX2VsZW0obWFwLCBrZXkpO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTI4ODpcXHRpZiAodW5saWtlbHkoIXNrIHx8ICFzb2NrX21hcF9yZWRpcmVjdF9hbGxvd2VkKHNrKSkpXFxubmV0L2NvcmUvc29ja19tYXAuYy0xMjg5LVxcdFxcdHJldHVybiBTS19EUk9QO1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz0xNDQ1PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBzb2NrX2hhc2hfb3BzID0ge1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNDQ5LVxcdC5tYXBfZ2V0X25leHRfa2V5XFx0PSBzb2NrX2hhc2hfZ2V0X25leHRfa2V5LFxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTQ1MDpcXHQubWFwX3VwZGF0ZV9lbGVtXFx0PSBzb2NrX21hcF91cGRhdGVfZWxlbSxcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE0NTEtXFx0Lm1hcF9kZWxldGVfZWxlbVxcdD0gc29ja19oYXNoX2RlbGV0ZV9lbGVtLFxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNDYwLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTQ2MTpzdGF0aWMgc3RydWN0IHNrX3Bzb2NrX3Byb2dzICpzb2NrX21hcF9wcm9ncyhzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTQ2Mi17XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTE0NzQtXFxubmV0L2NvcmUvc29ja19tYXAuYzoxNDc1OnN0YXRpYyBpbnQgc29ja19tYXBfcHJvZ19saW5rX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX3Byb2cgKioqcHByb2csXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNDc2LVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGJwZl9saW5rICoqKnBsaW5rLCB1MzIgd2hpY2gpXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNDc3LXtcXG5uZXQvY29yZS9zb2NrX21hcC5jOjE0Nzg6XFx0c3RydWN0IHNrX3Bzb2NrX3Byb2dzICpwcm9ncyA9IHNvY2tfbWFwX3Byb2dzKG1hcCk7XFxubmV0L2NvcmUvc29ja19tYXAuYy0xNDc5LVxcdHN0cnVjdCBicGZfcHJvZyAqKmN1cl9wcHJvZztcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTUyMy0gKi9cXG5uZXQvY29yZS9zb2NrX21hcC5jOjE1MjQ6c3RhdGljIGludCBzb2NrX21hcF9wcm9nX3VwZGF0ZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNTI1LVxcdFxcdFxcdFxcdHN0cnVjdCBicGZfcHJvZyAqb2xkLCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTE1MzEtXFxubmV0L2NvcmUvc29ja19tYXAuYzoxNTMyOlxcdHJldCA9IHNvY2tfbWFwX3Byb2dfbGlua19sb29rdXAobWFwLCBcXHUwMDI2cHByb2csIFxcdTAwMjZwbGluaywgd2hpY2gpO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTUzMy1cXHRpZiAocmV0KVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNTU0LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTU1NTppbnQgc29ja19tYXBfYnBmX3Byb2dfcXVlcnkoY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNTU2LVxcdFxcdFxcdCAgICB1bmlvbiBicGZfYXR0ciBfX3VzZXIgKnVhdHRyKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNTc1LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTU3NjpcXHRyZXQgPSBzb2NrX21hcF9wcm9nX2xpbmtfbG9va3VwKG1hcCwgXFx1MDAyNnBwcm9nLCBOVUxMLCBhdHRyLVxcdTAwM2VxdWVyeS5hdHRhY2hfdHlwZSk7XFxubmV0L2NvcmUvc29ja19tYXAuYy0xNTc3LVxcdGlmIChyZXQpXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTE2MDMtXFxubmV0L2NvcmUvc29ja19tYXAuYzoxNjA0OnN0YXRpYyB2b2lkIHNvY2tfbWFwX3VubGluayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29ja19saW5rICpsaW5rKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTYwNS17XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTE2MDctXFx0Y2FzZSBCUEZfTUFQX1RZUEVfU09DS01BUDpcXG5uZXQvY29yZS9zb2NrX21hcC5jOjE2MDg6XFx0XFx0cmV0dXJuIHNvY2tfbWFwX2RlbGV0ZV9mcm9tX2xpbmsobGluay1cXHUwMDNlbWFwLCBzayxcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE2MDktXFx0XFx0XFx0XFx0XFx0XFx0IGxpbmstXFx1MDAzZWxpbmtfcmF3KTtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTYxNy1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjE2MTg6c3RhdGljIHZvaWQgc29ja19tYXBfcmVtb3ZlX2xpbmtzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaylcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE2MTkte1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNjIyLVxcdHdoaWxlICgobGluayA9IHNrX3Bzb2NrX2xpbmtfcG9wKHBzb2NrKSkpIHtcXG5uZXQvY29yZS9zb2NrX21hcC5jOjE2MjM6XFx0XFx0c29ja19tYXBfdW5saW5rKHNrLCBsaW5rKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE2MjQtXFx0XFx0c2tfcHNvY2tfZnJlZV9saW5rKGxpbmspO1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNjI3LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTYyODp2b2lkIHNvY2tfbWFwX3VuaGFzaChzdHJ1Y3Qgc29jayAqc2spXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNjI5LXtcXG4tLVxcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQyMzowNjoxNC4xMDg2MDY5MDVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg0NTc4MzY1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNvY2ttYXAgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBzb2NrbWFwIHRoaW5nLiBUaGUgZG9jdW1lbnRhdGlvbiBzdGF0ZXMgdGhhdCBgQ09ORklHX0JQRl9TWVNDQUxMYCBlbmFibGVzIGl0LiBSaWdodCwgbWFrZXMgc2Vuc2UsIHRoYXQncyB3aGF0IEknZCBleHBlY3QuIE5vdywgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoYXQgaW4gdGhlIGtlcm5lbCBzb3VyY2UuIEFoLCBoZXJlIHdlIGFyZSBpbiBgbmV0L2NvcmUvTWFrZWZpbGVgLiBBbmQgaXQgY29uZmlybXM6IGBvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHNvY2tfbWFwLm9gLiBTbywgeWVhaCwgaXQgKmlzKiBqdXN0IGBDT05GSUdfQlBGX1NZU0NBTExgIHRoYXQgYWN0aXZhdGVzIHRoZSBzb2NrbWFwIG9iamVjdC4gSG1tLCBidXQgd2FpdC4gVGhpbmtpbmcgYSBiaXQgbW9yZSBkZWVwbHkgYWJvdXQgdGhpcywgc2luY2UgYHNvY2tfbWFwLm9gIGlzIGxvY2F0ZWQgaW4gdGhlIGBuZXQvY29yZS9gIGRpcmVjdG9yeSwgSSBiZXQgd2UgbmVlZCBgQ09ORklHX05FVGAgdG9vLCBldmVuIHRob3VnaCBpdCdzIG5vdCBleHBsaWNpdGx5IG1lbnRpb25lZC4gTGV0J3MganVzdCBjb25maXJtIHRoYXQgYnkgdGFraW5nIGEgcXVpY2sgbG9vayBhdCBgbmV0L2NvcmUvTWFrZWZpbGVgIGFnYWluLiBHb29kIHByYWN0aWNlIHRvIGJlIHRob3JvdWdoIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMTIwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDIzOjA2OjE3Ljk1NDM5NDM3N1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjkxNTA5MzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0JQRl9TWVNDQUxMXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9NYWtlZmlsZT00ND1vYmotJChDT05GSUdfTkVUX1NPQ0tfTVNHKSArPSBza21zZy5vXFxubmV0L2NvcmUvTWFrZWZpbGU6NDU6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBzb2NrX21hcC5vXFxubmV0L2NvcmUvTWFrZWZpbGU6NDY6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBicGZfc2tfc3RvcmFnZS5vXFxubmV0L2NvcmUvTWFrZWZpbGUtNDctb2JqLSQoQ09ORklHX09GKVxcdCs9IG9mX25ldC5vXFxuLS1cXG5uZXQvY29yZS9kZXYuaD0zODE9aW50IHJwc19jcHVtYXNrX2hvdXNla2VlcGluZyhzdHJ1Y3QgY3B1bWFzayAqbWFzayk7XFxubmV0L2NvcmUvZGV2LmgtMzgyLVxcbm5ldC9jb3JlL2Rldi5oOjM4MzojaWYgZGVmaW5lZChDT05GSUdfREVCVUdfTkVUKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19CUEZfU1lTQ0FMTClcXG5uZXQvY29yZS9kZXYuaC0zODQtdm9pZCB4ZHBfZG9fY2hlY2tfZmx1c2hlZChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NDQ0MT1FWFBPUlRfU1lNQk9MX0dQTCh4ZHBfZG9fZmx1c2gpO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTQ0NDItXFxubmV0L2NvcmUvZmlsdGVyLmM6NDQ0MzojaWYgZGVmaW5lZChDT05GSUdfREVCVUdfTkVUKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19CUEZfU1lTQ0FMTClcXG5uZXQvY29yZS9maWx0ZXIuYy00NDQ0LXZvaWQgeGRwX2RvX2NoZWNrX2ZsdXNoZWQoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKVxcbi0tXFxubmV0L2NvcmUvZmxvd19kaXNzZWN0b3IuYz03ND1FWFBPUlRfU1lNQk9MKHNrYl9mbG93X2Rpc3NlY3Rvcl9pbml0KTtcXG5uZXQvY29yZS9mbG93X2Rpc3NlY3Rvci5jLTc1LVxcbm5ldC9jb3JlL2Zsb3dfZGlzc2VjdG9yLmM6NzY6I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbm5ldC9jb3JlL2Zsb3dfZGlzc2VjdG9yLmMtNzctaW50IGZsb3dfZGlzc2VjdG9yX2JwZl9wcm9nX2F0dGFjaF9jaGVjayhzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvY29yZS9mbG93X2Rpc3NlY3Rvci5jLTEwNS19XFxubmV0L2NvcmUvZmxvd19kaXNzZWN0b3IuYzoxMDY6I2VuZGlmIC8qIENPTkZJR19CUEZfU1lTQ0FMTCAqL1xcbm5ldC9jb3JlL2Zsb3dfZGlzc2VjdG9yLmMtMTA3LVxcbi0tXFxubmV0L2NvcmUvc29jay5jPTIzNTA9c3RhdGljIHZvaWQgX19za19kZXN0cnVjdChzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXFxuLS1cXG5uZXQvY29yZS9zb2NrLmMtMjM2Ny1cXG5uZXQvY29yZS9zb2NrLmM6MjM2ODojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxubmV0L2NvcmUvc29jay5jLTIzNjktXFx0YnBmX3NrX3N0b3JhZ2VfZnJlZShzayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDIzOjA2OjE4LjAyMzU1MjgxMVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTk5NDk2MDIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgc28gSSd2ZSBnb3QgYSBjb3VwbGUgb2Yga2V5IGRlcGVuZGVuY2llcyBpZGVudGlmaWVkIHJpZ2h0IG9mZiB0aGUgYmF0OiBgQ09ORklHX0JQRl9TWVNDQUxMYCBhbmQgYENPTkZJR19ORVRgLiBUaGF0IGZlZWxzIHJpZ2h0LCBidXQgbGV0J3Mgbm90IG1ha2UgYW55IGFzc3VtcHRpb25zLiBJIG5lZWQgdG8gZXhwbGljaXRseSB2ZXJpZnkgdGhhdCBgQ09ORklHX05FVGAgaXMgaW5kZWVkIGEgaGFyZCByZXF1aXJlbWVudCBmb3IgdGhlIGBzb2NrX21hcC5vYCBvYmplY3QuXG5cbkEgcXVpY2sgY3Jvc3MtcmVmZXJlbmNlIHdvdWxkIGJlIGluIG9yZGVyLiBBaCwgeWVzLCBsb29raW5nIGF0IHRoZSBidWlsZCBwcm9jZXNzLCBpdCdzIGNsZWFyIHRoYXQgdGhlIGBuZXQvY29yZS9gIGRpcmVjdG9yeSBnZXRzIGJ1aWx0IG9ubHkgd2hlbiBgQ09ORklHX05FVGAgaXMgZW5hYmxlZC4gVGhhdCBjb25maXJtcyBteSBpbml0aWFsIGludHVpdGlvbi4gTm93LCB0byBiZSB0aG9yb3VnaCwgSSBzaG91bGQgcmVhbGx5IGdsYW5jZSBhdCBgbmV0L01ha2VmaWxlYCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSB0aGVyZSBhcmVuJ3QgYW55IHNuZWFreSBjb25kaXRpb25hbCBpbmNsdXNpb25zIG9yIGJpemFycmUgYnVpbGQgcnVsZXMgSSdtIG1pc3NpbmcuIEFsd2F5cyBnb29kIHRvIGRvdWJsZS1jaGVjayB0aG9zZSBNYWtlZmlsZSBkZXBlbmRlbmNpZXMsIGp1c3QgdG8gYmUgc2FmZS4gSXQncyB0aGUgZGV2aWwgaW4gdGhlIGRldGFpbHMsIGFmdGVyIGFsbCFcblxuXG4iLCJJbnB1dFRva2VucyI6MjIwNzEsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQyMzowNjoyMS42MjMwNTIwMTNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyNjcyOTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvcmUvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvTWFrZWZpbGUtOC1cXG5uZXQvTWFrZWZpbGU6OTpvYmoteVxcdFxcdFxcdFxcdDo9IGRldnJlcy5vIHNvY2tldC5vIGNvcmUvXFxubmV0L01ha2VmaWxlLTEwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQyMzowNjoyMS42ODU3MzQ0NzdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI0NDA0MDczODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEJQRiBWZXJpZmllciBSZXN0cmljdGlvbnMgZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gZm9yIGZ1enppbmcuIFdlJ3JlIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHJlc3RyaWN0cyBzb2NrbWFwIHVwZGF0ZXMgd2l0aGluIHRoZSBCUEYgdmVyaWZpZXIuIFRoZSBjb3JlIGlkZWEgaXMgdGhhdCBjZXJ0YWluIEJQRiBwcm9ncmFtIHR5cGVzIGFyZSBubyBsb25nZXIgYWxsb3dlZCB0byBtb2RpZnkgc29ja21hcHMuIFRoaXMgaXMgYSBjcnVjaWFsIGNoYW5nZSBpbiB0aGUgdmVyaWZpZXIncyBiZWhhdmlvci4gU28gdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBlc3RhYmxpc2ggaXMgdGhlIGNvbmZpZ3VyYXRpb24gYW5kIGZvY3VzIHN5bWJvbHMgZm9yIGZ1enppbmcgdGhpcyBwYXRjaC5cblxuUmlnaHQsIHRoZSBiYXNlIGNvbmZpZ3VyYXRpb24gaXMgZGV0ZXJtaW5lZCBieSBgQ09ORklHX05FVGAgYmVjYXVzZSB0aGUgYG5ldC9gIGRpcmVjdG9yeSBpcyBidWlsdCB3aGVuIGBDT05GSUdfTkVUYCBpcyBlbmFibGVkLiBBbmQsIG9mIGNvdXJzZSwgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgZXNzZW50aWFsLCBzaW5jZSBpdCdzIGEgQlBGLXJlbGF0ZWQgY2hhbmdlLiBTbyB0aG9zZSBhcmUgbXkgaW5pdGlhbCBjb25maWcgYXNzdW1wdGlvbnM6IGBDT05GSUdfTkVUYCBhbmQgYENPTkZJR19CUEZfU1lTQ0FMTGAuXG5cbk5vdywgbGV0J3MgaWRlbnRpZnkgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyB0aGlzIHBhdGNoIHRvdWNoZXMgZGlyZWN0bHkuIEZyb20gdGhlIGNvZGUsIHRoZSBrZXkgc3ltYm9scyBoZXJlIHNlZW0gdG8gYmUgYG1heV91cGRhdGVfc29ja21hcGAgYW5kIGBjaGVja19tYXBfZnVuY19jb21wYXRpYmlsaXR5YC4gV2FpdCwgYG1heV91cGRhdGVfc29ja21hcGAgaXMgc3RhdGljLCB3aGljaCBpcyB1c3VhbGx5IG9rYXkgd2l0aCBmdXp6aW5nIHRvb2xzLiBUaGUgY2hlY2sgaXMgY2FsbGVkIGJ5IGBjaGVja19tYXBfZnVuY19jb21wYXRpYmlsaXR5YCB3aGljaCBpbiB0dXJuIGlzIGNhbGxlZCBieSBgY2hlY2tfaGVscGVyX2NhbGxgIHdoaWNoIGlzIGNhbGxlZCBieSBgZG9fY2hlY2tgLiBUaGlzIG1ha2VzIGl0IHJlYWNoYWJsZS4gU28gdGhhdCBjb25maXJtcyB0aG9zZSBhcyB2YWxpZCBmb2N1cyBzeW1ib2xzLlxuXG5JIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcsIGxpa2UgYSBkZXBlbmRlbmN5IG9uIGBDT05GSUdfQ0dST1VQX0JQRmAsIGJ1dCBpdCBsb29rcyBsaWtlIHRoZSBtb2RpZmljYXRpb24gaXMgcmVzdHJpY3RlZCB0byB0aGUgdmVyaWZpZXIgaXRzZWxmIHdoaWNoIGlzIGFsd2F5cyBidWlsdCBpZiBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBlbmFibGVkLiBUaGUgcGF0Y2ggYWZmZWN0cyBgQlBGX1BST0dfVFlQRV9TT0NLRVRfRklMVEVSYCwgYEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTYCwgYEJQRl9QUk9HX1RZUEVfU0NIRURfQUNUYCwgYEJQRl9QUk9HX1RZUEVfWERQYCwgYW5kIGBCUEZfUFJPR19UWVBFX0ZMT1dfRElTU0VDVE9SYC5cblxuYEJQRl9QUk9HX1RZUEVfU09DS0VUX0ZJTFRFUmAgZGVwZW5kcyBvbiBgQ09ORklHX05FVGAuIGBCUEZfUFJPR19UWVBFX1NDSEVEX0NMU2AgYW5kIGBCUEZfUFJPR19UWVBFX1NDSEVEX0FDVGAgZGVwZW5kIG9uIGBDT05GSUdfTkVUX1NDSEVEYC4gYEJQRl9QUk9HX1RZUEVfWERQYCBhbmQgYEJQRl9QUk9HX1RZUEVfRkxPV19ESVNTRUNUT1JgIGFsc28gZGVwZW5kIG9uIGBDT05GSUdfTkVUYC5cblxuU28gZGVmaW5pdGVseSBgQ09ORklHX05FVGAgYW5kIGBDT05GSUdfQlBGX1NZU0NBTExgIGFyZSBuZWVkZWQuXG5cbmBDT05GSUdfTkVUX1NDSEVEYCBpc24ndCBzdHJpY3RseSBuZWNlc3NhcnkgZm9yIGNvbXBpbGF0aW9uIGJ1dCBkb2VzIGFsbG93IHRlc3RpbmcgYFNDSEVEX0NMU2AgYW5kIGBTQ0hFRF9BQ1RgLCBidXQgc2luY2UgdGhlIHZlcmlmaWVyIGNvZGUgZG9lc24ndCByZWx5IG9uIGl0LCBpdCBsb29rcyBsaWtlIGBDT05GSUdfQlBGX1NZU0NBTExgIGFuZCBgQ09ORklHX05FVGAgYXJlIHN1ZmZpY2llbnQuIFRoZSBgQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFNgIGFuZCBvdGhlciB0eXBlcyBhcmUgZGVmaW5lZCBpbiBgaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oYCBhbmQgdGhlIHZlcmlmaWVyIHdpbGwgdXNlIHRoYXQgaW5mb3JtYXRpb24uXG5cbkhlcmUncyB3aGF0IEkndmUgZ290OlxuXG4qICAgKipXb3J0aEZ1enppbmcqKjogYHRydWVgXG4qICAgKipGb2N1c1N5bWJvbHMqKjpcbiAgICAqICAgYG1heV91cGRhdGVfc29ja21hcGBcbiAgICAqICAgYGNoZWNrX21hcF9mdW5jX2NvbXBhdGliaWxpdHlgXG4qICAgKipFbmFibGVDb25maWdzKio6XG4gICAgKiAgIGBCUEZfU1lTQ0FMTGBcbiAgICAqICAgYE5FVGBcblxuQ29uZmlybWluZyBgbWF5X3VwZGF0ZV9zb2NrbWFwYCBhbmQgYGNoZWNrX21hcF9mdW5jX2NvbXBhdGliaWxpdHlgIGFyZSBzdGF0aWMsIGFuZCB0aGF0IHN5emthbGxlciBjYW4gaGFuZGxlIHRoaXMuIEFsc28sIHJldmlld2luZyBjaGFuZ2VzIHRvIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvKmAgd2hpY2ggYXJlIGp1c3Qgc2VsZnRlc3RzLlxuXG5UaGlzIHBhdGNoIGlzIGNoYW5naW5nIHRoZSB2ZXJpZmllciwgc28gaXQgcmVxdWlyZXMgZnV6emluZy4gVGhlIGNvbmZpZ3VyYXRpb24gYW5kIGZvY3VzIHN5bWJvbHMgYXJlIHdoYXQgSSBuZWVkIHRvIHRhcmdldCBmb3IgZnV6emluZy4gSSBjYW4gY2FsbCBzZXQtcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI0MjMsIk91dHB1dFRva2VucyI6MTMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAwMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQyMzowNjozNC4xMjYxNTA0NjlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDAwMjU3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1heV91cGRhdGVfc29ja21hcFwiLFxuICAgIFwiY2hlY2tfbWFwX2Z1bmNfY29tcGF0aWJpbGl0eVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlc3RyaWN0cyBjZXJ0YWluIEJQRiBwcm9ncmFtIHR5cGVzIGZyb20gdXBkYXRpbmcgc29ja21hcHMgaW4gdGhlIEJQRiB2ZXJpZmllci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiB2ZXJpZmllciBsb2dpYyB0aGF0IGFmZmVjdHMgd2hhdCBCUEYgcHJvZ3JhbXMgYXJlIGFsbG93ZWQgdG8gZG8uIEl0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSB2ZXJpZmllciBjb3JyZWN0bHkgcmVqZWN0cyBpbnZhbGlkIHByb2dyYW1zIGFuZCBkb2Vzbid0IGludHJvZHVjZSBhbnkgcmVncmVzc2lvbnMgb3IgYnlwYXNzZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1heV91cGRhdGVfc29ja21hcFwiLFxuICAgIFwiY2hlY2tfbWFwX2Z1bmNfY29tcGF0aWJpbGl0eVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlc3RyaWN0cyBjZXJ0YWluIEJQRiBwcm9ncmFtIHR5cGVzIGZyb20gdXBkYXRpbmcgc29ja21hcHMgaW4gdGhlIEJQRiB2ZXJpZmllci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiB2ZXJpZmllciBsb2dpYyB0aGF0IGFmZmVjdHMgd2hhdCBCUEYgcHJvZ3JhbXMgYXJlIGFsbG93ZWQgdG8gZG8uIEl0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSB2ZXJpZmllciBjb3JyZWN0bHkgcmVqZWN0cyBpbnZhbGlkIHByb2dyYW1zIGFuZCBkb2Vzbid0IGludHJvZHVjZSBhbnkgcmVncmVzc2lvbnMgb3IgYnlwYXNzZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow5f7ds[1] Phase: Succeeded StartedAt: 2026-06-30 23:07:56 +0000 UTC FinishedAt: 2026-06-30 23:07:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5f7ds[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-30 23:07:56 +0000 UTC FinishedAt: 2026-06-30 23:07:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5f7ds[2] Phase: Succeeded StartedAt: 2026-06-30 23:07:56 +0000 UTC FinishedAt: 2026-07-01 00:15:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5f7ds[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53435562a725962e4de0c29653223129ba11643a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["may_update_sockmap","check_map_func_compatibility"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53435562a725962e4de0c29653223129ba11643a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"4e0fbfa5-90da-40a0-a8aa-27c07a338031","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Failed StartedAt: 2026-06-30 23:07:56 +0000 UTC FinishedAt: 2026-07-01 00:15:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"53435562a725962e4de0c29653223129ba11643a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["may_update_sockmap","check_map_func_compatibility"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"53435562a725962e4de0c29653223129ba11643a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"4e0fbfa5-90da-40a0-a8aa-27c07a338031","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow5f7ds[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53435562a725962e4de0c29653223129ba11643a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["may_update_sockmap","check_map_func_compatibility"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53435562a725962e4de0c29653223129ba11643a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"4e0fbfa5-90da-40a0-a8aa-27c07a338031","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-06-30 23:07:56 +0000 UTC FinishedAt: 2026-06-30 23:08:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5f7ds[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53435562a725962e4de0c29653223129ba11643a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["may_update_sockmap","check_map_func_compatibility"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53435562a725962e4de0c29653223129ba11643a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"4e0fbfa5-90da-40a0-a8aa-27c07a338031","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-06-30 23:07:56 +0000 UTC FinishedAt: 2026-06-30 23:08:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"53435562a725962e4de0c29653223129ba11643a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5f7ds/series-workflow5f7ds-convert-artifact-779456070/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5f7ds[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53435562a725962e4de0c29653223129ba11643a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["may_update_sockmap","check_map_func_compatibility"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53435562a725962e4de0c29653223129ba11643a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"4e0fbfa5-90da-40a0-a8aa-27c07a338031","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-06-30 23:08:06 +0000 UTC FinishedAt: 2026-06-30 23:39:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5f7ds[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53435562a725962e4de0c29653223129ba11643a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["may_update_sockmap","check_map_func_compatibility"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53435562a725962e4de0c29653223129ba11643a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"4e0fbfa5-90da-40a0-a8aa-27c07a338031","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-06-30 23:08:06 +0000 UTC FinishedAt: 2026-06-30 23:39:59 +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:*f68bc07e-6497-40ff-b50a-e85f0d942c4f,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-workflow5f7ds/series-workflow5f7ds-convert-artifact-779456070/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": "2d6be7d1-0194-4c1e-bfca-3a453e7ce751", "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-workflow5f7ds/series-workflow5f7ds-build-action-2053266396/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5f7ds[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53435562a725962e4de0c29653223129ba11643a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["may_update_sockmap","check_map_func_compatibility"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53435562a725962e4de0c29653223129ba11643a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"4e0fbfa5-90da-40a0-a8aa-27c07a338031","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-06-30 23:08:06 +0000 UTC FinishedAt: 2026-06-30 23:38:07 +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:*f68bc07e-6497-40ff-b50a-e85f0d942c4f,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-workflow5f7ds/series-workflow5f7ds-convert-artifact-779456070/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": "2d6be7d1-0194-4c1e-bfca-3a453e7ce751", "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-workflow5f7ds/series-workflow5f7ds-build-action-2053266396/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5f7ds[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53435562a725962e4de0c29653223129ba11643a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["may_update_sockmap","check_map_func_compatibility"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53435562a725962e4de0c29653223129ba11643a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"4e0fbfa5-90da-40a0-a8aa-27c07a338031","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-06-30 23:39:59 +0000 UTC FinishedAt: 2026-06-30 23:39:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5f7ds[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53435562a725962e4de0c29653223129ba11643a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["may_update_sockmap","check_map_func_compatibility"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53435562a725962e4de0c29653223129ba11643a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"4e0fbfa5-90da-40a0-a8aa-27c07a338031","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-06-30 23:39:59 +0000 UTC FinishedAt: 2026-06-30 23:39:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5f7ds[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53435562a725962e4de0c29653223129ba11643a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["may_update_sockmap","check_map_func_compatibility"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53435562a725962e4de0c29653223129ba11643a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"4e0fbfa5-90da-40a0-a8aa-27c07a338031","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-06-30 23:39:59 +0000 UTC FinishedAt: 2026-06-30 23:40:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5f7ds[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53435562a725962e4de0c29653223129ba11643a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["may_update_sockmap","check_map_func_compatibility"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53435562a725962e4de0c29653223129ba11643a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"4e0fbfa5-90da-40a0-a8aa-27c07a338031","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-06-30 23:39:59 +0000 UTC FinishedAt: 2026-06-30 23:40:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"53435562a725962e4de0c29653223129ba11643a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"4e0fbfa5-90da-40a0-a8aa-27c07a338031","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5f7ds/series-workflow5f7ds-convert-artifact-2949825945/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5f7ds[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53435562a725962e4de0c29653223129ba11643a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["may_update_sockmap","check_map_func_compatibility"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53435562a725962e4de0c29653223129ba11643a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"4e0fbfa5-90da-40a0-a8aa-27c07a338031","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-06-30 23:40:21 +0000 UTC FinishedAt: 2026-06-30 23:42:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5f7ds[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53435562a725962e4de0c29653223129ba11643a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["may_update_sockmap","check_map_func_compatibility"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53435562a725962e4de0c29653223129ba11643a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"4e0fbfa5-90da-40a0-a8aa-27c07a338031","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-06-30 23:40:21 +0000 UTC FinishedAt: 2026-06-30 23:42:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*2d6be7d1-0194-4c1e-bfca-3a453e7ce751,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-workflow5f7ds/series-workflow5f7ds-build-action-2053266396/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-workflow5f7ds[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53435562a725962e4de0c29653223129ba11643a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["may_update_sockmap","check_map_func_compatibility"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53435562a725962e4de0c29653223129ba11643a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"4e0fbfa5-90da-40a0-a8aa-27c07a338031","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-06-30 23:42:22 +0000 UTC FinishedAt: 2026-06-30 23:42:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5f7ds[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53435562a725962e4de0c29653223129ba11643a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["may_update_sockmap","check_map_func_compatibility"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53435562a725962e4de0c29653223129ba11643a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"4e0fbfa5-90da-40a0-a8aa-27c07a338031","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-06-30 23:42:22 +0000 UTC FinishedAt: 2026-06-30 23:42:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5f7ds[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53435562a725962e4de0c29653223129ba11643a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["may_update_sockmap","check_map_func_compatibility"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53435562a725962e4de0c29653223129ba11643a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"4e0fbfa5-90da-40a0-a8aa-27c07a338031","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-06-30 23:42:22 +0000 UTC FinishedAt: 2026-07-01 00:08:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5f7ds[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53435562a725962e4de0c29653223129ba11643a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["may_update_sockmap","check_map_func_compatibility"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53435562a725962e4de0c29653223129ba11643a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"4e0fbfa5-90da-40a0-a8aa-27c07a338031","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-06-30 23:42:22 +0000 UTC FinishedAt: 2026-07-01 00:08:14 +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:*f68bc07e-6497-40ff-b50a-e85f0d942c4f,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-workflow5f7ds/series-workflow5f7ds-convert-artifact-2949825945/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": "39689c2a-30b0-46b8-998c-06d8b3e01034", "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-workflow5f7ds/series-workflow5f7ds-build-action-599577845/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5f7ds[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53435562a725962e4de0c29653223129ba11643a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["may_update_sockmap","check_map_func_compatibility"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53435562a725962e4de0c29653223129ba11643a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"4e0fbfa5-90da-40a0-a8aa-27c07a338031","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-06-30 23:42:22 +0000 UTC FinishedAt: 2026-07-01 00:07:32 +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:*f68bc07e-6497-40ff-b50a-e85f0d942c4f,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-workflow5f7ds/series-workflow5f7ds-convert-artifact-2949825945/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": "39689c2a-30b0-46b8-998c-06d8b3e01034", "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-workflow5f7ds/series-workflow5f7ds-build-action-599577845/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5f7ds[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53435562a725962e4de0c29653223129ba11643a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["may_update_sockmap","check_map_func_compatibility"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53435562a725962e4de0c29653223129ba11643a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"4e0fbfa5-90da-40a0-a8aa-27c07a338031","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-01 00:08:14 +0000 UTC FinishedAt: 2026-07-01 00:08:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5f7ds[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53435562a725962e4de0c29653223129ba11643a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["may_update_sockmap","check_map_func_compatibility"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53435562a725962e4de0c29653223129ba11643a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"4e0fbfa5-90da-40a0-a8aa-27c07a338031","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-01 00:08:14 +0000 UTC FinishedAt: 2026-07-01 00:08:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5f7ds[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53435562a725962e4de0c29653223129ba11643a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["may_update_sockmap","check_map_func_compatibility"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53435562a725962e4de0c29653223129ba11643a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"4e0fbfa5-90da-40a0-a8aa-27c07a338031","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-01 00:08:14 +0000 UTC FinishedAt: 2026-07-01 00:10:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5f7ds[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53435562a725962e4de0c29653223129ba11643a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["may_update_sockmap","check_map_func_compatibility"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53435562a725962e4de0c29653223129ba11643a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"4e0fbfa5-90da-40a0-a8aa-27c07a338031","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-01 00:08:14 +0000 UTC FinishedAt: 2026-07-01 00:10:06 +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:*39689c2a-30b0-46b8-998c-06d8b3e01034,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-workflow5f7ds/series-workflow5f7ds-build-action-599577845/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-workflow5f7ds[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53435562a725962e4de0c29653223129ba11643a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["may_update_sockmap","check_map_func_compatibility"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53435562a725962e4de0c29653223129ba11643a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"4e0fbfa5-90da-40a0-a8aa-27c07a338031","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Failed StartedAt: 2026-07-01 00:10:17 +0000 UTC FinishedAt: 2026-07-01 00:15:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5f7ds[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53435562a725962e4de0c29653223129ba11643a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["may_update_sockmap","check_map_func_compatibility"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53435562a725962e4de0c29653223129ba11643a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"4e0fbfa5-90da-40a0-a8aa-27c07a338031","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Failed StartedAt: 2026-07-01 00:10:17 +0000 UTC FinishedAt: 2026-07-01 00:15:02 +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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["may_update_sockmap","check_map_func_compatibility"],"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:*2d6be7d1-0194-4c1e-bfca-3a453e7ce751,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*39689c2a-30b0-46b8-998c-06d8b3e01034,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-workflow5f7ds/series-workflow5f7ds-build-action-2053266396/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-workflow5f7ds/series-workflow5f7ds-build-action-599577845/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow5f7ds[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53435562a725962e4de0c29653223129ba11643a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["may_update_sockmap","check_map_func_compatibility"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53435562a725962e4de0c29653223129ba11643a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"4e0fbfa5-90da-40a0-a8aa-27c07a338031","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-01 00:10:17 +0000 UTC FinishedAt: 2026-07-01 00:10:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5f7ds[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53435562a725962e4de0c29653223129ba11643a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["may_update_sockmap","check_map_func_compatibility"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53435562a725962e4de0c29653223129ba11643a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"4e0fbfa5-90da-40a0-a8aa-27c07a338031","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-01 00:10:17 +0000 UTC FinishedAt: 2026-07-01 00:10:38 +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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["may_update_sockmap","check_map_func_compatibility"],"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-workflow5f7ds/series-workflow5f7ds-convert-artifact-3980545934/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5f7ds[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53435562a725962e4de0c29653223129ba11643a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["may_update_sockmap","check_map_func_compatibility"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53435562a725962e4de0c29653223129ba11643a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"4e0fbfa5-90da-40a0-a8aa-27c07a338031","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-01 00:10:17 +0000 UTC FinishedAt: 2026-07-01 00:10:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5f7ds[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53435562a725962e4de0c29653223129ba11643a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["may_update_sockmap","check_map_func_compatibility"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53435562a725962e4de0c29653223129ba11643a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"4e0fbfa5-90da-40a0-a8aa-27c07a338031","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-01 00:10:17 +0000 UTC FinishedAt: 2026-07-01 00:10:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5f7ds[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53435562a725962e4de0c29653223129ba11643a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["may_update_sockmap","check_map_func_compatibility"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53435562a725962e4de0c29653223129ba11643a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"4e0fbfa5-90da-40a0-a8aa-27c07a338031","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-01 00:10:17 +0000 UTC FinishedAt: 2026-07-01 00:10:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5f7ds[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53435562a725962e4de0c29653223129ba11643a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["may_update_sockmap","check_map_func_compatibility"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53435562a725962e4de0c29653223129ba11643a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"4e0fbfa5-90da-40a0-a8aa-27c07a338031","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Failed StartedAt: 2026-07-01 00:10:46 +0000 UTC FinishedAt: 2026-07-01 00:15:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5f7ds[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53435562a725962e4de0c29653223129ba11643a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["may_update_sockmap","check_map_func_compatibility"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53435562a725962e4de0c29653223129ba11643a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"4e0fbfa5-90da-40a0-a8aa-27c07a338031","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Error StartedAt: 2026-07-01 00:10:47 +0000 UTC FinishedAt: 2026-07-01 00:15:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*2d6be7d1-0194-4c1e-bfca-3a453e7ce751,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*39689c2a-30b0-46b8-998c-06d8b3e01034,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-workflow5f7ds/series-workflow5f7ds-build-action-2053266396/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-workflow5f7ds/series-workflow5f7ds-build-action-599577845/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-workflow5f7ds/series-workflow5f7ds-convert-artifact-3980545934/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil