Name: series-workflowc65cf Phase: Succeeded StartedAt: 2026-07-23 18:20:57 +0000 UTC FinishedAt: 2026-07-23 23:13:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc65cf[0] Phase: Succeeded StartedAt: 2026-07-23 18:20:57 +0000 UTC FinishedAt: 2026-07-23 18:51:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc65cf[0].run-triage Phase: Succeeded StartedAt: 2026-07-23 18:20:57 +0000 UTC FinishedAt: 2026-07-23 18:51:34 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OPENVSWITCH", "NETFILTER_CONNCOUNT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OPENVSWITCH", "NETFILTER_CONNCOUNT" ], "series_id": "1fc381ef-248f-4c63-a1cf-a90df8266083" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ovs_ct_limit_cmd_set", "ovs_ct_limit_cmd_del", "ovs_ct_limit_cmd_get", "ovs_ct_check_limit", "ovs_ct_limit_init", "ovs_ct_limit_exit" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE4OjUwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09QRU5WU1dJVENIJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9DT05OQ09VTlQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtvdnNfY3RfbGltaXRfY21kX3NldCYjMzQ7LAogICAgJiMzNDtvdnNfY3RfbGltaXRfY21kX2RlbCYjMzQ7LAogICAgJiMzNDtvdnNfY3RfbGltaXRfY21kX2dldCYjMzQ7LAogICAgJiMzNDtvdnNfY3RfY2hlY2tfbGltaXQmIzM0OywKICAgICYjMzQ7b3ZzX2N0X2xpbWl0X2luaXQmIzM0OywKICAgICYjMzQ7b3ZzX2N0X2xpbWl0X2V4aXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgUkNVIHN5bmNocm9uaXphdGlvbiBhbmQgbG9ja2luZyBpc3N1ZXMgYXJvdW5kIHRoZSBPcGVuIHZTd2l0Y2ggY29ubmVjdGlvbiB0cmFja2luZyBsaW1pdCBjb25maWd1cmF0aW9uLiBJdCBtb2RpZmllcyBuZXRsaW5rIGNvbW1hbmQgaGFuZGxlcnMgYW5kIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGxpbWl0IGNoZWNrIGZ1bmN0aW9uLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGVzZSBjb21tYW5kIGhhbmRsZXJzIGFuZCB0aGUgZGF0YXBhdGggY29ubmVjdGlvbiB0cmFja2luZyBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxODo1MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGEwOWVmM2NkYjQ1MTY5YjdiNjZlNmFmYTgxMTY2MTQzNzk5YjQwOGZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAyMyAxODo1MDo0NCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMgYi9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmNcbmluZGV4IDk1Njk3ZDRlMTZlNjRlLi41YzlhNjA3ZDI3YTdiNiAxMDA2NDRcbi0tLSBhL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jXG5AQCAtOTMzLDEwICYjNDM7OTMzLDE0IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2NoZWNrX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3Qgb3ZzX2Nvbm50cmFja19pbmZvICppbmZvKVxuIHtcbiBcdHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMobmV0LCBvdnNfbmV0X2lkKTtcbi1cdGNvbnN0IHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbyA9IG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbztcbiYjNDM7XHRjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm87XG4gXHR1MzIgcGVyX3pvbmVfbGltaXQsIGNvbm5lY3Rpb25zO1xuIFx0dTMyIGNvbm5jb3VudF9rZXk7XG4gXG4mIzQzO1x0Y3RfbGltaXRfaW5mbyA9IHJjdV9kZXJlZmVyZW5jZShvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pO1xuJiM0MztcdGlmICghY3RfbGltaXRfaW5mbylcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiBcdGNvbm5jb3VudF9rZXkgPSBpbmZvLVx1MDAzZXpvbmUuaWQ7XG4gXG4gXHRwZXJfem9uZV9saW1pdCA9IGN0X2xpbWl0X2dldChjdF9saW1pdF9pbmZvLCBpbmZvLVx1MDAzZXpvbmUuaWQpO1xuQEAgLTE1ODUsNDAgJiM0MzsxNTg5LDQ3IEBAIHN0YXRpYyB2b2lkIF9fb3ZzX2N0X2ZyZWVfYWN0aW9uKHN0cnVjdCBvdnNfY29ubnRyYWNrX2luZm8gKmN0X2luZm8pXG4gI2lmXHRJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKVxuIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2luaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldClcbiB7XG4mIzQzO1x0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvO1xuIFx0aW50IGksIGVycjtcbiBcbi1cdG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyA9IGttYWxsb2Nfb2JqKCpvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pO1xuLVx0aWYgKCFvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pXG4mIzQzO1x0aW5mbyA9IGttYWxsb2Nfb2JqKCppbmZvKTtcbiYjNDM7XHRpZiAoIWluZm8pXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuLVx0b3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvLVx1MDAzZWRlZmF1bHRfbGltaXQgPSBPVlNfQ1RfTElNSVRfREVGQVVMVDtcbi1cdG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VsaW1pdHMgPVxuJiM0MztcdGluZm8tXHUwMDNlZGVmYXVsdF9saW1pdCA9IE9WU19DVF9MSU1JVF9ERUZBVUxUO1xuJiM0MztcdGluZm8tXHUwMDNlbGltaXRzID1cbiBcdFx0a21hbGxvY19vYmpzKHN0cnVjdCBobGlzdF9oZWFkLCBDVF9MSU1JVF9IQVNIX0JVQ0tFVFMpO1xuLVx0aWYgKCFvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8tXHUwMDNlbGltaXRzKSB7XG4tXHRcdGtmcmVlKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyk7XG4mIzQzO1x0aWYgKCFpbmZvLVx1MDAzZWxpbWl0cykge1xuJiM0MztcdFx0a2ZyZWUoaW5mbyk7XG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0fVxuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQ1RfTElNSVRfSEFTSF9CVUNLRVRTOyBpJiM0MzsmIzQzOylcbi1cdFx0SU5JVF9ITElTVF9IRUFEKFx1MDAyNm92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VsaW1pdHNbaV0pO1xuJiM0MztcdFx0SU5JVF9ITElTVF9IRUFEKFx1MDAyNmluZm8tXHUwMDNlbGltaXRzW2ldKTtcbiBcbi1cdG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VkYXRhID0gbmZfY29ubmNvdW50X2luaXQobmV0LCBzaXplb2YodTMyKSk7XG4mIzQzO1x0aW5mby1cdTAwM2VkYXRhID0gbmZfY29ubmNvdW50X2luaXQobmV0LCBzaXplb2YodTMyKSk7XG4gXG4tXHRpZiAoSVNfRVJSKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VkYXRhKSkge1xuLVx0XHRlcnIgPSBQVFJfRVJSKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VkYXRhKTtcbi1cdFx0a2ZyZWUob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvLVx1MDAzZWxpbWl0cyk7XG4tXHRcdGtmcmVlKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyk7XG4mIzQzO1x0aWYgKElTX0VSUihpbmZvLVx1MDAzZWRhdGEpKSB7XG4mIzQzO1x0XHRlcnIgPSBQVFJfRVJSKGluZm8tXHUwMDNlZGF0YSk7XG4mIzQzO1x0XHRrZnJlZShpbmZvLVx1MDAzZWxpbWl0cyk7XG4mIzQzO1x0XHRrZnJlZShpbmZvKTtcbiBcdFx0cHJfZXJyKFwmIzM0O29wZW52c3dpdGNoOiBmYWlsZWQgdG8gaW5pdCBuZl9jb25uY291bnQgJWRcXG5cJiMzNDssIGVycik7XG4gXHRcdHJldHVybiBlcnI7XG4gXHR9XG4mIzQzO1x0cmN1X2Fzc2lnbl9wb2ludGVyKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbywgaW5mbyk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgb3ZzX2N0X2xpbWl0X2V4aXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldClcbiB7XG4tXHRjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8gPSBvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm87XG4mIzQzO1x0Y29uc3Qgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvO1xuIFx0aW50IGk7XG4gXG4mIzQzO1x0aW5mbyA9IHJjdV9yZXBsYWNlX3BvaW50ZXIob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvLCBOVUxMLFxuJiM0MztcdFx0XHRcdCAgIGxvY2tkZXBfb3ZzbF9pc19oZWxkKCkpO1xuJiM0MztcdC8qIG92c19jdF9jaGVja19saW1pdCgpIGFjY2Vzc2VzIHRoZSBpbmZvIHVuZGVyIHRoZSBkYXRhcGF0aCBSQ1UgbG9jay4gKi9cbiYjNDM7XHRzeW5jaHJvbml6ZV9yY3UoKTtcbiYjNDM7XG4gXHRuZl9jb25uY291bnRfZGVzdHJveShuZXQsIGluZm8tXHUwMDNlZGF0YSk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBDVF9MSU1JVF9IQVNIX0JVQ0tFVFM7ICYjNDM7JiM0MztpKSB7XG4gXHRcdHN0cnVjdCBobGlzdF9oZWFkICpoZWFkID0gXHUwMDI2aW5mby1cdTAwM2VsaW1pdHNbaV07XG5AQCAtMTY3OCw5ICYjNDM7MTY4OSw3IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LFxuIFx0d2hpbGUgKHJlbSBcdTAwM2U9IHNpemVvZigqem9uZV9saW1pdCkpIHtcbiBcdFx0aWYgKHVubGlrZWx5KHpvbmVfbGltaXQtXHUwMDNlem9uZV9pZCA9PVxuIFx0XHRcdFx0T1ZTX1pPTkVfTElNSVRfREVGQVVMVF9aT05FKSkge1xuLVx0XHRcdG92c19sb2NrKCk7XG4gXHRcdFx0aW5mby1cdTAwM2VkZWZhdWx0X2xpbWl0ID0gem9uZV9saW1pdC1cdTAwM2VsaW1pdDtcbi1cdFx0XHRvdnNfdW5sb2NrKCk7XG4gXHRcdH0gZWxzZSBpZiAodW5saWtlbHkoIWNoZWNrX3pvbmVfaWQoXG4gXHRcdFx0XHR6b25lX2xpbWl0LVx1MDAzZXpvbmVfaWQsIFx1MDAyNnpvbmUpKSkge1xuIFx0XHRcdE9WU19OTEVSUih0cnVlLCBcJiMzNDt6b25lIGlkIGlzIG91dCBvZiByYW5nZVwmIzM0Oyk7XG5AQCAtMTY5NCw5ICYjNDM7MTcwMyw3IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LFxuIFx0XHRcdGN0X2xpbWl0LVx1MDAzZXpvbmUgPSB6b25lO1xuIFx0XHRcdGN0X2xpbWl0LVx1MDAzZWxpbWl0ID0gem9uZV9saW1pdC1cdTAwM2VsaW1pdDtcbiBcbi1cdFx0XHRvdnNfbG9jaygpO1xuIFx0XHRcdGN0X2xpbWl0X3NldChpbmZvLCBjdF9saW1pdCk7XG4tXHRcdFx0b3ZzX3VubG9jaygpO1xuIFx0XHR9XG4gXHRcdHJlbSAtPSBOTEFfQUxJR04oc2l6ZW9mKCp6b25lX2xpbWl0KSk7XG4gXHRcdHpvbmVfbGltaXQgPSAoc3RydWN0IG92c196b25lX2xpbWl0ICopKCh1OCAqKXpvbmVfbGltaXQgJiM0MztcbkBAIC0xNzIyLDE2ICYjNDM7MTcyOSwxMiBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcbiBcdHdoaWxlIChyZW0gXHUwMDNlPSBzaXplb2YoKnpvbmVfbGltaXQpKSB7XG4gXHRcdGlmICh1bmxpa2VseSh6b25lX2xpbWl0LVx1MDAzZXpvbmVfaWQgPT1cbiBcdFx0XHRcdE9WU19aT05FX0xJTUlUX0RFRkFVTFRfWk9ORSkpIHtcbi1cdFx0XHRvdnNfbG9jaygpO1xuIFx0XHRcdGluZm8tXHUwMDNlZGVmYXVsdF9saW1pdCA9IE9WU19DVF9MSU1JVF9ERUZBVUxUO1xuLVx0XHRcdG92c191bmxvY2soKTtcbiBcdFx0fSBlbHNlIGlmICh1bmxpa2VseSghY2hlY2tfem9uZV9pZChcbiBcdFx0XHRcdHpvbmVfbGltaXQtXHUwMDNlem9uZV9pZCwgXHUwMDI2em9uZSkpKSB7XG4gXHRcdFx0T1ZTX05MRVJSKHRydWUsIFwmIzM0O3pvbmUgaWQgaXMgb3V0IG9mIHJhbmdlXCYjMzQ7KTtcbiBcdFx0fSBlbHNlIHtcbi1cdFx0XHRvdnNfbG9jaygpO1xuIFx0XHRcdGN0X2xpbWl0X2RlbChpbmZvLCB6b25lKTtcbi1cdFx0XHRvdnNfdW5sb2NrKCk7XG4gXHRcdH1cbiBcdFx0cmVtIC09IE5MQV9BTElHTihzaXplb2YoKnpvbmVfbGltaXQpKTtcbiBcdFx0em9uZV9saW1pdCA9IChzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXQgKikoKHU4ICopem9uZV9saW1pdCAmIzQzO1xuQEAgLTE4NTAsNyAmIzQzOzE4NTMsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfc2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqcmVwbHk7XG4gXHRzdHJ1Y3Qgb3ZzX2hlYWRlciAqb3ZzX3JlcGx5X2hlYWRlcjtcbiBcdHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMoc29ja19uZXQoc2tiLVx1MDAzZXNrKSwgb3ZzX25ldF9pZCk7XG4tXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm8gPSBvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm87XG4mIzQzO1x0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvO1xuIFx0aW50IGVycjtcbiBcbiBcdHJlcGx5ID0gb3ZzX2N0X2xpbWl0X2NtZF9yZXBseV9zdGFydChpbmZvLCBPVlNfQ1RfTElNSVRfQ01EX1NFVCxcbkBAIC0xODYzLDE2ICYjNDM7MTg2NiwyMiBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfc2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRcdGdvdG8gZXhpdF9lcnI7XG4gXHR9XG4gXG4mIzQzO1x0b3ZzX2xvY2soKTtcbiYjNDM7XHRjdF9saW1pdF9pbmZvID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8sXG4mIzQzO1x0XHRcdFx0XHRcdCAgbG9ja2RlcF9vdnNsX2lzX2hlbGQoKSk7XG4gXHRlcnIgPSBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSxcbiBcdFx0XHRcdFx0ICBjdF9saW1pdF9pbmZvKTtcbiBcdGlmIChlcnIpXG4tXHRcdGdvdG8gZXhpdF9lcnI7XG4mIzQzO1x0XHRnb3RvIGV4aXRfdW5sb2NrO1xuIFxuIFx0c3RhdGljX2JyYW5jaF9lbmFibGUoXHUwMDI2b3ZzX2N0X2xpbWl0X2VuYWJsZWQpO1xuIFxuIFx0Z2VubG1zZ19lbmQocmVwbHksIG92c19yZXBseV9oZWFkZXIpO1xuJiM0MztcdG92c191bmxvY2soKTtcbiBcdHJldHVybiBnZW5sbXNnX3JlcGx5KHJlcGx5LCBpbmZvKTtcbiBcbiYjNDM7ZXhpdF91bmxvY2s6XG4mIzQzO1x0b3ZzX3VubG9jaygpO1xuIGV4aXRfZXJyOlxuIFx0bmxtc2dfZnJlZShyZXBseSk7XG4gXHRyZXR1cm4gZXJyO1xuQEAgLTE4ODQsNyAmIzQzOzE4OTMsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfZGVsKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqcmVwbHk7XG4gXHRzdHJ1Y3Qgb3ZzX2hlYWRlciAqb3ZzX3JlcGx5X2hlYWRlcjtcbiBcdHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMoc29ja19uZXQoc2tiLVx1MDAzZXNrKSwgb3ZzX25ldF9pZCk7XG4tXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm8gPSBvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm87XG4mIzQzO1x0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvO1xuIFx0aW50IGVycjtcbiBcbiBcdHJlcGx5ID0gb3ZzX2N0X2xpbWl0X2NtZF9yZXBseV9zdGFydChpbmZvLCBPVlNfQ1RfTElNSVRfQ01EX0RFTCxcbkBAIC0xODk3LDE0ICYjNDM7MTkwNiwyMCBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfZGVsKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRcdGdvdG8gZXhpdF9lcnI7XG4gXHR9XG4gXG4mIzQzO1x0b3ZzX2xvY2soKTtcbiYjNDM7XHRjdF9saW1pdF9pbmZvID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8sXG4mIzQzO1x0XHRcdFx0XHRcdCAgbG9ja2RlcF9vdnNsX2lzX2hlbGQoKSk7XG4gXHRlcnIgPSBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSxcbiBcdFx0XHRcdFx0ICBjdF9saW1pdF9pbmZvKTtcbiBcdGlmIChlcnIpXG4tXHRcdGdvdG8gZXhpdF9lcnI7XG4mIzQzO1x0XHRnb3RvIGV4aXRfdW5sb2NrO1xuIFxuIFx0Z2VubG1zZ19lbmQocmVwbHksIG92c19yZXBseV9oZWFkZXIpO1xuJiM0MztcdG92c191bmxvY2soKTtcbiBcdHJldHVybiBnZW5sbXNnX3JlcGx5KHJlcGx5LCBpbmZvKTtcbiBcbiYjNDM7ZXhpdF91bmxvY2s6XG4mIzQzO1x0b3ZzX3VubG9jaygpO1xuIGV4aXRfZXJyOlxuIFx0bmxtc2dfZnJlZShyZXBseSk7XG4gXHRyZXR1cm4gZXJyO1xuQEAgLTE5MTgsNyAmIzQzOzE5MzMsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfZ2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRzdHJ1Y3Qgb3ZzX2hlYWRlciAqb3ZzX3JlcGx5X2hlYWRlcjtcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi1cdTAwM2Vzayk7XG4gXHRzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKG5ldCwgb3ZzX25ldF9pZCk7XG4tXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm8gPSBvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm87XG4mIzQzO1x0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvO1xuIFx0aW50IGVycjtcbiBcbiBcdHJlcGx5ID0gb3ZzX2N0X2xpbWl0X2NtZF9yZXBseV9zdGFydChpbmZvLCBPVlNfQ1RfTElNSVRfQ01EX0dFVCxcbkBAIC0xOTMyLDIzICYjNDM7MTk0NywyOSBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfZ2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRcdGdvdG8gZXhpdF9lcnI7XG4gXHR9XG4gXG4mIzQzO1x0b3ZzX2xvY2soKTtcbiYjNDM7XHRjdF9saW1pdF9pbmZvID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8sXG4mIzQzO1x0XHRcdFx0XHRcdCAgbG9ja2RlcF9vdnNsX2lzX2hlbGQoKSk7XG4gXHRpZiAoYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSkge1xuIFx0XHRlcnIgPSBvdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoXG4gXHRcdFx0bmV0LCBhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdLCBjdF9saW1pdF9pbmZvLFxuIFx0XHRcdHJlcGx5KTtcbiBcdFx0aWYgKGVycilcbi1cdFx0XHRnb3RvIGV4aXRfZXJyO1xuJiM0MztcdFx0XHRnb3RvIGV4aXRfdW5sb2NrO1xuIFx0fSBlbHNlIHtcbiBcdFx0ZXJyID0gb3ZzX2N0X2xpbWl0X2dldF9hbGxfem9uZV9saW1pdChuZXQsIGN0X2xpbWl0X2luZm8sXG4gXHRcdFx0XHRcdFx0ICAgICAgcmVwbHkpO1xuIFx0XHRpZiAoZXJyKVxuLVx0XHRcdGdvdG8gZXhpdF9lcnI7XG4mIzQzO1x0XHRcdGdvdG8gZXhpdF91bmxvY2s7XG4gXHR9XG4gXG4gXHRubGFfbmVzdF9lbmQocmVwbHksIG5sYV9yZXBseSk7XG4gXHRnZW5sbXNnX2VuZChyZXBseSwgb3ZzX3JlcGx5X2hlYWRlcik7XG4mIzQzO1x0b3ZzX3VubG9jaygpO1xuIFx0cmV0dXJuIGdlbmxtc2dfcmVwbHkocmVwbHksIGluZm8pO1xuIFxuJiM0MztleGl0X3VubG9jazpcbiYjNDM7XHRvdnNfdW5sb2NrKCk7XG4gZXhpdF9lcnI6XG4gXHRubG1zZ19mcmVlKHJlcGx5KTtcbiBcdHJldHVybiBlcnI7XG5kaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmggYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaFxuaW5kZXggNjk2NjQwZTg4ZmE3ZTMuLjkzZTExZTQ2OGQxNzNmIDEwMDY0NFxuLS0tIGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmhcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oXG5AQCAtMTcyLDcgJiM0MzsxNzIsNyBAQCBzdHJ1Y3Qgb3ZzX25ldCB7XG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgZHBfbm90aWZ5X3dvcms7XG4gXHRzdHJ1Y3QgZGVsYXllZF93b3JrIG1hc2tzX3JlYmFsYW5jZTtcbiAjaWZcdElTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpXG4tXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm87XG4mIzQzO1x0c3RydWN0IG92c19jdF9saW1pdF9pbmZvIF9fcmN1ICpjdF9saW1pdF9pbmZvO1xuICNlbmRpZlxuIFx0Ym9vbCB4dF9sYWJlbDtcbiB9O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE4OjUwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtPUEVOVlNXSVRDSCYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfQ09OTkNPVU5UJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7b3ZzX2N0X2xpbWl0X2NtZF9zZXQmIzM0OywKICAgICYjMzQ7b3ZzX2N0X2xpbWl0X2NtZF9kZWwmIzM0OywKICAgICYjMzQ7b3ZzX2N0X2xpbWl0X2NtZF9nZXQmIzM0OywKICAgICYjMzQ7b3ZzX2N0X2NoZWNrX2xpbWl0JiMzNDssCiAgICAmIzM0O292c19jdF9saW1pdF9pbml0JiMzNDssCiAgICAmIzM0O292c19jdF9saW1pdF9leGl0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIFJDVSBzeW5jaHJvbml6YXRpb24gYW5kIGxvY2tpbmcgaXNzdWVzIGFyb3VuZCB0aGUgT3BlbiB2U3dpdGNoIGNvbm5lY3Rpb24gdHJhY2tpbmcgbGltaXQgY29uZmlndXJhdGlvbi4gSXQgbW9kaWZpZXMgbmV0bGluayBjb21tYW5kIGhhbmRsZXJzIGFuZCB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBsaW1pdCBjaGVjayBmdW5jdGlvbi4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlc2UgY29tbWFuZCBoYW5kbGVycyBhbmQgdGhlIGRhdGFwYXRoIGNvbm5lY3Rpb24gdHJhY2tpbmcgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGEwOWVmM2NkYjQ1MTY5YjdiNjZlNmFmYTgxMTY2MTQzNzk5YjQwOGYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEp1bCAyMyAxODo1MDo0NCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYyBiL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYwppbmRleCA5NTY5N2Q0ZTE2ZTY0ZS4uNWM5YTYwN2QyN2E3YjYgMTAwNjQ0Ci0tLSBhL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMKQEAgLTkzMywxMCAmIzQzOzkzMywxNCBAQCBzdGF0aWMgaW50IG92c19jdF9jaGVja19saW1pdChzdHJ1Y3QgbmV0ICpuZXQsCiAJCQkgICAgICBjb25zdCBzdHJ1Y3Qgb3ZzX2Nvbm50cmFja19pbmZvICppbmZvKQogewogCXN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMobmV0LCBvdnNfbmV0X2lkKTsKLQljb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm8gPSBvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvOwomIzQzOwljb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm87CiAJdTMyIHBlcl96b25lX2xpbWl0LCBjb25uZWN0aW9uczsKIAl1MzIgY29ubmNvdW50X2tleTsKIAomIzQzOwljdF9saW1pdF9pbmZvID0gcmN1X2RlcmVmZXJlbmNlKG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8pOwomIzQzOwlpZiAoIWN0X2xpbWl0X2luZm8pCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKIAljb25uY291bnRfa2V5ID0gaW5mby0mZ3Q7em9uZS5pZDsKIAogCXBlcl96b25lX2xpbWl0ID0gY3RfbGltaXRfZ2V0KGN0X2xpbWl0X2luZm8sIGluZm8tJmd0O3pvbmUuaWQpOwpAQCAtMTU4NSw0MCAmIzQzOzE1ODksNDcgQEAgc3RhdGljIHZvaWQgX19vdnNfY3RfZnJlZV9hY3Rpb24oc3RydWN0IG92c19jb25udHJhY2tfaW5mbyAqY3RfaW5mbykKICNpZglJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKQogc3RhdGljIGludCBvdnNfY3RfbGltaXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0KQogewomIzQzOwlzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm87CiAJaW50IGksIGVycjsKIAotCW92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8gPSBrbWFsbG9jX29iaigqb3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbyk7Ci0JaWYgKCFvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvKQomIzQzOwlpbmZvID0ga21hbGxvY19vYmooKmluZm8pOwomIzQzOwlpZiAoIWluZm8pCiAJCXJldHVybiAtRU5PTUVNOwogCi0Jb3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mby0mZ3Q7ZGVmYXVsdF9saW1pdCA9IE9WU19DVF9MSU1JVF9ERUZBVUxUOwotCW92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8tJmd0O2xpbWl0cyA9CiYjNDM7CWluZm8tJmd0O2RlZmF1bHRfbGltaXQgPSBPVlNfQ1RfTElNSVRfREVGQVVMVDsKJiM0MzsJaW5mby0mZ3Q7bGltaXRzID0KIAkJa21hbGxvY19vYmpzKHN0cnVjdCBobGlzdF9oZWFkLCBDVF9MSU1JVF9IQVNIX0JVQ0tFVFMpOwotCWlmICghb3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mby0mZ3Q7bGltaXRzKSB7Ci0JCWtmcmVlKG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8pOwomIzQzOwlpZiAoIWluZm8tJmd0O2xpbWl0cykgewomIzQzOwkJa2ZyZWUoaW5mbyk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAogCWZvciAoaSA9IDA7IGkgJmx0OyBDVF9MSU1JVF9IQVNIX0JVQ0tFVFM7IGkmIzQzOyYjNDM7KQotCQlJTklUX0hMSVNUX0hFQUQoJmFtcDtvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvLSZndDtsaW1pdHNbaV0pOwomIzQzOwkJSU5JVF9ITElTVF9IRUFEKCZhbXA7aW5mby0mZ3Q7bGltaXRzW2ldKTsKIAotCW92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8tJmd0O2RhdGEgPSBuZl9jb25uY291bnRfaW5pdChuZXQsIHNpemVvZih1MzIpKTsKJiM0MzsJaW5mby0mZ3Q7ZGF0YSA9IG5mX2Nvbm5jb3VudF9pbml0KG5ldCwgc2l6ZW9mKHUzMikpOwogCi0JaWYgKElTX0VSUihvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvLSZndDtkYXRhKSkgewotCQllcnIgPSBQVFJfRVJSKG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8tJmd0O2RhdGEpOwotCQlrZnJlZShvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvLSZndDtsaW1pdHMpOwotCQlrZnJlZShvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvKTsKJiM0MzsJaWYgKElTX0VSUihpbmZvLSZndDtkYXRhKSkgewomIzQzOwkJZXJyID0gUFRSX0VSUihpbmZvLSZndDtkYXRhKTsKJiM0MzsJCWtmcmVlKGluZm8tJmd0O2xpbWl0cyk7CiYjNDM7CQlrZnJlZShpbmZvKTsKIAkJcHJfZXJyKCYjMzQ7b3BlbnZzd2l0Y2g6IGZhaWxlZCB0byBpbml0IG5mX2Nvbm5jb3VudCAlZFxuJiMzNDssIGVycik7CiAJCXJldHVybiBlcnI7CiAJfQomIzQzOwlyY3VfYXNzaWduX3BvaW50ZXIob3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbywgaW5mbyk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIG92c19jdF9saW1pdF9leGl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG92c19uZXQgKm92c19uZXQpCiB7Ci0JY29uc3Qgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvID0gb3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbzsKJiM0MzsJY29uc3Qgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvOwogCWludCBpOwogCiYjNDM7CWluZm8gPSByY3VfcmVwbGFjZV9wb2ludGVyKG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8sIE5VTEwsCiYjNDM7CQkJCSAgIGxvY2tkZXBfb3ZzbF9pc19oZWxkKCkpOwomIzQzOwkvKiBvdnNfY3RfY2hlY2tfbGltaXQoKSBhY2Nlc3NlcyB0aGUgaW5mbyB1bmRlciB0aGUgZGF0YXBhdGggUkNVIGxvY2suICovCiYjNDM7CXN5bmNocm9uaXplX3JjdSgpOwomIzQzOwogCW5mX2Nvbm5jb3VudF9kZXN0cm95KG5ldCwgaW5mby0mZ3Q7ZGF0YSk7CiAJZm9yIChpID0gMDsgaSAmbHQ7IENUX0xJTUlUX0hBU0hfQlVDS0VUUzsgJiM0MzsmIzQzO2kpIHsKIAkJc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQgPSAmYW1wO2luZm8tJmd0O2xpbWl0c1tpXTsKQEAgLTE2NzgsOSAmIzQzOzE2ODksNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCwKIAl3aGlsZSAocmVtICZndDs9IHNpemVvZigqem9uZV9saW1pdCkpIHsKIAkJaWYgKHVubGlrZWx5KHpvbmVfbGltaXQtJmd0O3pvbmVfaWQgPT0KIAkJCQlPVlNfWk9ORV9MSU1JVF9ERUZBVUxUX1pPTkUpKSB7Ci0JCQlvdnNfbG9jaygpOwogCQkJaW5mby0mZ3Q7ZGVmYXVsdF9saW1pdCA9IHpvbmVfbGltaXQtJmd0O2xpbWl0OwotCQkJb3ZzX3VubG9jaygpOwogCQl9IGVsc2UgaWYgKHVubGlrZWx5KCFjaGVja196b25lX2lkKAogCQkJCXpvbmVfbGltaXQtJmd0O3pvbmVfaWQsICZhbXA7em9uZSkpKSB7CiAJCQlPVlNfTkxFUlIodHJ1ZSwgJiMzNDt6b25lIGlkIGlzIG91dCBvZiByYW5nZSYjMzQ7KTsKQEAgLTE2OTQsOSAmIzQzOzE3MDMsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCwKIAkJCWN0X2xpbWl0LSZndDt6b25lID0gem9uZTsKIAkJCWN0X2xpbWl0LSZndDtsaW1pdCA9IHpvbmVfbGltaXQtJmd0O2xpbWl0OwogCi0JCQlvdnNfbG9jaygpOwogCQkJY3RfbGltaXRfc2V0KGluZm8sIGN0X2xpbWl0KTsKLQkJCW92c191bmxvY2soKTsKIAkJfQogCQlyZW0gLT0gTkxBX0FMSUdOKHNpemVvZigqem9uZV9saW1pdCkpOwogCQl6b25lX2xpbWl0ID0gKHN0cnVjdCBvdnNfem9uZV9saW1pdCAqKSgodTggKil6b25lX2xpbWl0ICYjNDM7CkBAIC0xNzIyLDE2ICYjNDM7MTcyOSwxMiBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCwKIAl3aGlsZSAocmVtICZndDs9IHNpemVvZigqem9uZV9saW1pdCkpIHsKIAkJaWYgKHVubGlrZWx5KHpvbmVfbGltaXQtJmd0O3pvbmVfaWQgPT0KIAkJCQlPVlNfWk9ORV9MSU1JVF9ERUZBVUxUX1pPTkUpKSB7Ci0JCQlvdnNfbG9jaygpOwogCQkJaW5mby0mZ3Q7ZGVmYXVsdF9saW1pdCA9IE9WU19DVF9MSU1JVF9ERUZBVUxUOwotCQkJb3ZzX3VubG9jaygpOwogCQl9IGVsc2UgaWYgKHVubGlrZWx5KCFjaGVja196b25lX2lkKAogCQkJCXpvbmVfbGltaXQtJmd0O3pvbmVfaWQsICZhbXA7em9uZSkpKSB7CiAJCQlPVlNfTkxFUlIodHJ1ZSwgJiMzNDt6b25lIGlkIGlzIG91dCBvZiByYW5nZSYjMzQ7KTsKIAkJfSBlbHNlIHsKLQkJCW92c19sb2NrKCk7CiAJCQljdF9saW1pdF9kZWwoaW5mbywgem9uZSk7Ci0JCQlvdnNfdW5sb2NrKCk7CiAJCX0KIAkJcmVtIC09IE5MQV9BTElHTihzaXplb2YoKnpvbmVfbGltaXQpKTsKIAkJem9uZV9saW1pdCA9IChzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXQgKikoKHU4ICopem9uZV9saW1pdCAmIzQzOwpAQCAtMTg1MCw3ICYjNDM7MTg1Myw3IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAlzdHJ1Y3Qgc2tfYnVmZiAqcmVwbHk7CiAJc3RydWN0IG92c19oZWFkZXIgKm92c19yZXBseV9oZWFkZXI7CiAJc3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhzb2NrX25ldChza2ItJmd0O3NrKSwgb3ZzX25ldF9pZCk7Ci0Jc3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvID0gb3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbzsKJiM0MzsJc3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvOwogCWludCBlcnI7CiAKIAlyZXBseSA9IG92c19jdF9saW1pdF9jbWRfcmVwbHlfc3RhcnQoaW5mbywgT1ZTX0NUX0xJTUlUX0NNRF9TRVQsCkBAIC0xODYzLDE2ICYjNDM7MTg2NiwyMiBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfc2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAJCWdvdG8gZXhpdF9lcnI7CiAJfQogCiYjNDM7CW92c19sb2NrKCk7CiYjNDM7CWN0X2xpbWl0X2luZm8gPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8sCiYjNDM7CQkJCQkJICBsb2NrZGVwX292c2xfaXNfaGVsZCgpKTsKIAllcnIgPSBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSwKIAkJCQkJICBjdF9saW1pdF9pbmZvKTsKIAlpZiAoZXJyKQotCQlnb3RvIGV4aXRfZXJyOwomIzQzOwkJZ290byBleGl0X3VubG9jazsKIAogCXN0YXRpY19icmFuY2hfZW5hYmxlKCZhbXA7b3ZzX2N0X2xpbWl0X2VuYWJsZWQpOwogCiAJZ2VubG1zZ19lbmQocmVwbHksIG92c19yZXBseV9oZWFkZXIpOwomIzQzOwlvdnNfdW5sb2NrKCk7CiAJcmV0dXJuIGdlbmxtc2dfcmVwbHkocmVwbHksIGluZm8pOwogCiYjNDM7ZXhpdF91bmxvY2s6CiYjNDM7CW92c191bmxvY2soKTsKIGV4aXRfZXJyOgogCW5sbXNnX2ZyZWUocmVwbHkpOwogCXJldHVybiBlcnI7CkBAIC0xODg0LDcgJiM0MzsxODkzLDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCXN0cnVjdCBza19idWZmICpyZXBseTsKIAlzdHJ1Y3Qgb3ZzX2hlYWRlciAqb3ZzX3JlcGx5X2hlYWRlcjsKIAlzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKHNvY2tfbmV0KHNrYi0mZ3Q7c2spLCBvdnNfbmV0X2lkKTsKLQlzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm8gPSBvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvOwomIzQzOwlzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm87CiAJaW50IGVycjsKIAogCXJlcGx5ID0gb3ZzX2N0X2xpbWl0X2NtZF9yZXBseV9zdGFydChpbmZvLCBPVlNfQ1RfTElNSVRfQ01EX0RFTCwKQEAgLTE4OTcsMTQgJiM0MzsxOTA2LDIwIEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9kZWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAkJZ290byBleGl0X2VycjsKIAl9CiAKJiM0MzsJb3ZzX2xvY2soKTsKJiM0MzsJY3RfbGltaXRfaW5mbyA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQob3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbywKJiM0MzsJCQkJCQkgIGxvY2tkZXBfb3ZzbF9pc19oZWxkKCkpOwogCWVyciA9IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdLAogCQkJCQkgIGN0X2xpbWl0X2luZm8pOwogCWlmIChlcnIpCi0JCWdvdG8gZXhpdF9lcnI7CiYjNDM7CQlnb3RvIGV4aXRfdW5sb2NrOwogCiAJZ2VubG1zZ19lbmQocmVwbHksIG92c19yZXBseV9oZWFkZXIpOwomIzQzOwlvdnNfdW5sb2NrKCk7CiAJcmV0dXJuIGdlbmxtc2dfcmVwbHkocmVwbHksIGluZm8pOwogCiYjNDM7ZXhpdF91bmxvY2s6CiYjNDM7CW92c191bmxvY2soKTsKIGV4aXRfZXJyOgogCW5sbXNnX2ZyZWUocmVwbHkpOwogCXJldHVybiBlcnI7CkBAIC0xOTE4LDcgJiM0MzsxOTMzLDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX2dldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCXN0cnVjdCBvdnNfaGVhZGVyICpvdnNfcmVwbHlfaGVhZGVyOwogCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi0mZ3Q7c2spOwogCXN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMobmV0LCBvdnNfbmV0X2lkKTsKLQlzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm8gPSBvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvOwomIzQzOwlzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm87CiAJaW50IGVycjsKIAogCXJlcGx5ID0gb3ZzX2N0X2xpbWl0X2NtZF9yZXBseV9zdGFydChpbmZvLCBPVlNfQ1RfTElNSVRfQ01EX0dFVCwKQEAgLTE5MzIsMjMgJiM0MzsxOTQ3LDI5IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9nZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAkJZ290byBleGl0X2VycjsKIAl9CiAKJiM0MzsJb3ZzX2xvY2soKTsKJiM0MzsJY3RfbGltaXRfaW5mbyA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQob3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbywKJiM0MzsJCQkJCQkgIGxvY2tkZXBfb3ZzbF9pc19oZWxkKCkpOwogCWlmIChhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdKSB7CiAJCWVyciA9IG92c19jdF9saW1pdF9nZXRfem9uZV9saW1pdCgKIAkJCW5ldCwgYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSwgY3RfbGltaXRfaW5mbywKIAkJCXJlcGx5KTsKIAkJaWYgKGVycikKLQkJCWdvdG8gZXhpdF9lcnI7CiYjNDM7CQkJZ290byBleGl0X3VubG9jazsKIAl9IGVsc2UgewogCQllcnIgPSBvdnNfY3RfbGltaXRfZ2V0X2FsbF96b25lX2xpbWl0KG5ldCwgY3RfbGltaXRfaW5mbywKIAkJCQkJCSAgICAgIHJlcGx5KTsKIAkJaWYgKGVycikKLQkJCWdvdG8gZXhpdF9lcnI7CiYjNDM7CQkJZ290byBleGl0X3VubG9jazsKIAl9CiAKIAlubGFfbmVzdF9lbmQocmVwbHksIG5sYV9yZXBseSk7CiAJZ2VubG1zZ19lbmQocmVwbHksIG92c19yZXBseV9oZWFkZXIpOwomIzQzOwlvdnNfdW5sb2NrKCk7CiAJcmV0dXJuIGdlbmxtc2dfcmVwbHkocmVwbHksIGluZm8pOwogCiYjNDM7ZXhpdF91bmxvY2s6CiYjNDM7CW92c191bmxvY2soKTsKIGV4aXRfZXJyOgogCW5sbXNnX2ZyZWUocmVwbHkpOwogCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaCBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oCmluZGV4IDY5NjY0MGU4OGZhN2UzLi45M2UxMWU0NjhkMTczZiAxMDA2NDQKLS0tIGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmgKQEAgLTE3Miw3ICYjNDM7MTcyLDcgQEAgc3RydWN0IG92c19uZXQgewogCXN0cnVjdCB3b3JrX3N0cnVjdCBkcF9ub3RpZnlfd29yazsKIAlzdHJ1Y3QgZGVsYXllZF93b3JrIG1hc2tzX3JlYmFsYW5jZTsKICNpZglJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKQotCXN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbzsKJiM0MzsJc3RydWN0IG92c19jdF9saW1pdF9pbmZvIF9fcmN1ICpjdF9saW1pdF9pbmZvOwogI2VuZGlmCiAJYm9vbCB4dF9sYWJlbDsKIH07CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE4OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxNzYKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA0MDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDb25uZWN0aW9uIFRyYWNraW5nIExpbWl0IFBhdGNoIGluIE9wZW4gdlN3aXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHR3ZWFrcyB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBsaW1pdCBsb2dpYyBpbiBgbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jYCBhbmQgYG5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oYC4gVGhlIGNvcmUgY2hhbmdlIHNlZW1zIHRvIGJlIGFyb3VuZCBob3cgYGN0X2xpbWl0X2luZm9gIGlzIGFjY2Vzc2VkLiBUaGV5JiMzOTtyZSB1c2luZyBSQ1Ugbm93IOKAkyBgcmN1X2RlcmVmZXJlbmNlYCwgYHJjdV9hc3NpZ25fcG9pbnRlcmAsIGByY3VfcmVwbGFjZV9wb2ludGVyYCDigJMgd2hpY2ggaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBpcyBhYm91dCBpbXByb3ZpbmcgY29uY3VycmVuY3kgYW5kIGF2b2lkaW5nIHJhY2UgY29uZGl0aW9ucy4gVGhleeKAmXZlIGFsc28gbW92ZWQgYG92c19sb2NrKClgIGFyb3VuZCB3aXRoaW4gdGhlIGNvbW1hbmQgaGFuZGxpbmcgZnVuY3Rpb25zOiBgb3ZzX2N0X2xpbWl0X2NtZF9zZXRgLCBgb3ZzX2N0X2xpbWl0X2NtZF9kZWxgLCBhbmQgYG92c19jdF9saW1pdF9jbWRfZ2V0YC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5LgoKVGhlcmUmIzM5O3MgYSBwb3RlbnRpYWwgbWVtb3J5IGxlYWsgb3IgaW5pdGlhbGl6YXRpb24gaXNzdWUgYmVpbmcgYWRkcmVzc2VkIGluIGBvdnNfY3RfbGltaXRfaW5pdGAuIEdvb2QgY2F0Y2g7IHRoYXQmIzM5O3MgdGhlIGtpbmQgb2YgdGhpbmcgdGhhdCBjYW4gYml0ZSB5b3UgbGF0ZXIuIExvb2tzIGxpa2UgdGhleSYjMzk7cmUgdXNpbmcgYSBsb2NhbCBwb2ludGVyIGJlZm9yZSBhc3NpZ25pbmcgaXQsIHdoaWNoIG1pZ2h0IGJlIHRoZSBmaXguCgpGdW5jdGlvbmFsbHksIHRoaXMgaXMgYSBjaGFuZ2UgdG8gdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgbGltaXQgbG9naWMgd2l0aGluIE9wZW4gdlN3aXRjaC4gR2l2ZW4gdGhlIFJDVSBjaGFuZ2VzLCB0aGUgbG9jayBtb3ZlbWVudHMsIGFuZCB0aGUgbWVtb3J5IGZpeCwgSSYjMzk7ZCBzYXkgdGhpcyBwYXRjaCBzY3JlYW1zICYjMzQ7bmVlZHMgZnV6emluZy4mIzM0OyBMZXQmIzM5O3MgaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgdG8gdGFyZ2V0LgoKQmFzZWQgb24gdGhlIGNvZGUgY2hhbmdlcyBhbmQgdGhlIG92ZXJhbGwgaW50ZW50LCB0aGUgZnVuY3Rpb25zIEkgbmVlZCB0byBmb2N1cyBvbiBhcmU6CgoqICAgYG92c19jdF9jaGVja19saW1pdGAg4oCTIENvcmUgbGltaXQgY2hlY2tpbmcKKiAgIGBvdnNfY3RfbGltaXRfaW5pdGAg4oCTIFRoZSBpbml0IGZ1bmN0aW9uLgoqICAgYG92c19jdF9saW1pdF9leGl0YCDigJMgVGhlIGV4aXQgZnVuY3Rpb24sIGVxdWFsbHkgaW1wb3J0YW50LgoqICAgYG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdGAg4oCTIFNldHRpbmcgem9uZSBsaW1pdHMKKiAgIGBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXRgIOKAkyBEZWxldGluZyB6b25lIGxpbWl0cy4KKiAgIGBvdnNfY3RfbGltaXRfY21kX3NldGAg4oCTIENvbW1hbmQgc2V0dGluZwoqICAgYG92c19jdF9saW1pdF9jbWRfZGVsYCDigJMgQ29tbWFuZCBkZWxldGluZwoqICAgYG92c19jdF9saW1pdF9jbWRfZ2V0YCDigJMgQ29tbWFuZCBnZXR0aW5nCgpJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZSB0aGUgcmlnaHQgY29uZmlndXJhdGlvbiB0byBleGVyY2lzZSB0aGlzIGNvZGUuIExvb2tpbmcgYXQgdGhlIGNvZGUsIGl0JiMzOTtzIGNsZWFyIHRoYXQgaXQgdXNlcyBgI2lmIElTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpYCwgd2hpY2ggbWVhbnMgYE5FVEZJTFRFUl9DT05OQ09VTlRgIG11c3QgYmUgZW5hYmxlZC4gU2luY2UgaXQmIzM5O3MgT3BlbiB2U3dpdGNoLCBvYnZpb3VzbHkgSSBuZWVkIGBPUEVOVlNXSVRDSGAsIGFuZCBJJiMzOTtsbCBkb3VibGUgY2hlY2sgdG8gc2VlIGlmIGBPUEVOVlNXSVRDSF9DT05OVFJBQ0tgIGlzIGFsc28gYSByZWxldmFudCBjb25maWcgb3B0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE4OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBPUEVOVlNXSVRDSCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9LY29uZmlnLTUtXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo2OmNvbmZpZyBPUEVOVlNXSVRDSFxubmV0L29wZW52c3dpdGNoL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O09wZW4gdlN3aXRjaFwmIzM0O1xuLS1cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTQzLVxubmV0L29wZW52c3dpdGNoL0tjb25maWc6NDQ6Y29uZmlnIE9QRU5WU1dJVENIX0dSRVxubmV0L29wZW52c3dpdGNoL0tjb25maWctNDUtXHR0cmlzdGF0ZSBcJiMzNDtPcGVuIHZTd2l0Y2ggR1JFIHR1bm5lbGluZyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L29wZW52c3dpdGNoL0tjb25maWctNTYtXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo1Nzpjb25maWcgT1BFTlZTV0lUQ0hfVlhMQU5cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTU4LVx0dHJpc3RhdGUgXCYjMzQ7T3BlbiB2U3dpdGNoIFZYTEFOIHR1bm5lbGluZyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L29wZW52c3dpdGNoL0tjb25maWctNjgtXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo2OTpjb25maWcgT1BFTlZTV0lUQ0hfR0VORVZFXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy03MC1cdHRyaXN0YXRlIFwmIzM0O09wZW4gdlN3aXRjaCBHZW5ldmUgdHVubmVsaW5nIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxODo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDI5CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBsaWtlIHlvdToKCioqQ2hlY2tpbmcgZm9yIHRoZSBPUEVOVlNXSVRDSF9DT05UUkFDSyBDb25maWd1cmF0aW9uKioKCk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgYmVmb3JlIGRpdmluZyBpbnRvIGFueSBjb21wbGV4IHRyb3VibGVzaG9vdGluZyBvciBjb25maWd1cmF0aW9uIGNoYW5nZXMsIGxldCYjMzk7cyBlc3RhYmxpc2ggYSBiYXNlbGluZS4gSSBuZWVkIHRvIHF1aWNrbHkgY29uZmlybSB3aGV0aGVyIHRoZSBgT1BFTlZTV0lUQ0hfQ09OVFJBQ0tgIGNvbmZpZ3VyYXRpb24gaXMgZXZlbiBwcmVzZW50LiBJdOKAmXMgYSBwcmV0dHkgZnVuZGFtZW50YWwgc2V0dGluZywgYW5kIGl0cyBhYnNlbmNlIGNvdWxkIGltbWVkaWF0ZWx5IGV4cGxhaW4gc29tZSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggY29ubmVjdGlvbiB0cmFja2luZyBhbmQsIGJ5IGV4dGVuc2lvbiwgbmV0d29yayBwZXJmb3JtYW5jZSBvciBzZWN1cml0eSB3aXRoaW4gdGhlIE9wZW4gdlN3aXRjaCBlbnZpcm9ubWVudC4gQSBxdWljayBjaGVjayBoZXJlIHNhdmVzIHRpbWUgaW4gdGhlIGxvbmcgcnVuOyBubyBwb2ludCBwdXJzdWluZyBvdGhlciBhdmVudWVzIGlmIGEgYmFzaWMgcHJlcmVxdWlzaXRlIGlzbiYjMzk7dCBtZXQuIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB3aGV0aGVyIEkgbmVlZCB0byBlbmFibGUgdGhpcywgb3IgaWYgaXQgaGFzIGFscmVhZHkgYmVlbiBlbmFibGVkIGFuZCBuZWVkcyB0byBiZSBsb29rZWQgYXQgaW4gbW9yZSBkZXB0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxODo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBPUEVOVlNXSVRDSF9DT05OVFJBQ0smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMTg6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjY2NAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkludmVzdGlnYXRpbmcgQ29ubmVjdGlvbiBUcmFja2luZyBPcHRpb25zKioKCkFscmlnaHQsIEkgbmVlZCB0byBwaW5wb2ludCB3aGVyZSB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBjb25maWd1cmF0aW9uIGxpdmVzIHdpdGhpbiB0aGUgT3BlbiB2U3dpdGNoIGJ1aWxkIHN5c3RlbS4gTXkgaW5zdGluY3Qgc2F5cyB0byBzdGFydCB3aXRoIGBuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZ2AuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgcGxhY2UgZm9yIGJ1aWxkLXRpbWUgb3B0aW9ucyByZWxhdGVkIHRvIG5ldHdvcmtpbmcgZmVhdHVyZXMgd2l0aGluIHRoZSBrZXJuZWwgbW9kdWxlIHNwYWNlLiBOb3csIHdoYXQgYW0gSSBsb29raW5nIGZvciBzcGVjaWZpY2FsbHk/IEkmIzM5O20ga2V5aW5nIGluIG9uIHR3byBvcHRpb25zOiBgQ09OTlRSQUNLYCBhbmQgYE5FVEZJTFRFUmAuIFRoZXNlIGFyZSB0aGUgbW9zdCBsaWtlbHkgY2FuZGlkYXRlcyBmb3IgaW5mbHVlbmNpbmcgY29ubmVjdGlvbiB0cmFja2luZyBiZWhhdmlvciBvciBlbmFibGluZyBpbnRlZ3JhdGlvbiB3aXRoIE5ldGZpbHRlci4gR29pbmcgdG8gZGl2ZSBpbiBhbmQgc2VlIHdoYXQgdGhlIEtjb25maWcgaGFzIHRvIHNheS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxODo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtORVRGSUxURVImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZz02PWNvbmZpZyBPUEVOVlNXSVRDSFxuLS1cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTExLVx0XHRcdFx0ICAgICAoIU5GX05BVCB8fCBORl9OQVQpIFx1MDAyNlx1MDAyNiBcXFxubmV0L29wZW52c3dpdGNoL0tjb25maWc6MTI6XHRcdFx0XHQgICAgICghTkVURklMVEVSX0NPTk5DT1VOVCB8fCBORVRGSUxURVJfQ09OTkNPVU5UKSkpXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy0xMy1cdGRlcGVuZHMgb24gUFNBTVBMRSB8fCAhUFNBTVBMRVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE4OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5NzEKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA4NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBPcGVuIHZTd2l0Y2ggYW5kIENvbm5lY3Rpb24gVHJhY2tpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYE9QRU5WU1dJVENIYCBtb2R1bGUgYW5kIGl0cyBjb25uZWN0aW9uIHRyYWNraW5nIGNhcGFiaWxpdGllcy4gSXQgc2VlbXMgdGhhdCBgT1BFTlZTV0lUQ0hgICpkZXBlbmRzKiBvbiBgTkVURklMVEVSX0NPTk5DT1VOVGAsIGJ1dCB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBuZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmNgLCBpcyB1c2luZyBhIHByZXByb2Nlc3NvciBkaXJlY3RpdmUsIGAjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVClgLCB0byBjb250cm9sIGl0cyBpbmNsdXNpb24uIFRoaXMgbWVhbnMgaXQgKnJlcXVpcmVzKiBib3RoIGBPUEVOVlNXSVRDSGAgKmFuZCogYE5FVEZJTFRFUl9DT05OQ09VTlRgIHRvIGZ1bmN0aW9uIHByb3Blcmx5LCBldmVuIGlmIHRoZSBkZXBlbmRlbmN5IGlzbiYjMzk7dCBleHBsaWNpdGx5IHN0YXRlZCBhcyBhIGhhcmQgcmVxdWlyZW1lbnQuIEl0JiMzOTtzIHVzaW5nIGBDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVGAsIHNvIGl0IHJlYWxseSBuZWVkcyBpdCB0byBiZSBlbmFibGVkLgoKTXkgbmV4dCBzdGVwIGlzIHRvIHBlcmZvcm0gYSB0aG9yb3VnaCBjb2RlIHJldmlldyB0byBjaGVjayBpZiBgT1BFTlZTV0lUQ0hfQ09OVFJBQ0tgIGlzIGV4cGxpY2l0bHkgdXNlZCBhbnl3aGVyZSBlbHNlIHdpdGhpbiB0aGUgY29kZWJhc2UuIEkgbmVlZCB0byBnZXQgdGhlIGJpZ2dlciBwaWN0dXJlIG9mIGhvdyB0aGF0IGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgaW1wYWN0cyB0aGUgYmVoYXZpb3Igb2YgdGhlIHByb2dyYW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE4OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7T1BFTlZTV0lUQ0hfQ09OVFJBQ0smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxODo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzE0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBDb25uZWN0aW9uIFRyYWNraW5nIExpbWl0cyBpbiBPcGVuIHZTd2l0Y2gqKgoKQWxyaWdodCwgc28gdGhlIGtleSBjb25maWd1cmF0aW9ucyB0byBmb2N1cyBvbiBoZXJlIGFyZSBkZWZpbml0ZWx5IGBORVRGSUxURVJfQ09OTkNPVU5UYCBhbmQgYE9QRU5WU1dJVENIYC4gVGhhdCBmZWVscyBsaWtlIGEgc29saWQgc3RhcnRpbmcgcG9pbnQuIE5vdywgbGV0JiMzOTtzIGRyaWxsIGRvd24gaW50byB0aGUgY29yZSBmdW5jdGlvbnMgdGhhdCBoYW5kbGUgdGhpcyBjb25uZWN0aW9uIHRyYWNraW5nIGxpbWl0IGZ1bmN0aW9uYWxpdHkuIE15IGZvY3VzIG5lZWRzIHRvIGJlIG9uOgoKKiAgIGBvdnNfY3RfbGltaXRfY21kX3NldGAKKiAgIGBvdnNfY3RfbGltaXRfY21kX2RlbGAKKiAgIGBvdnNfY3RfbGltaXRfY21kX2dldGAKKiAgIGBvdnNfY3RfY2hlY2tfbGltaXRgCgpUaG9zZSBzZWVtIGxpa2UgdGhlIGxvZ2ljYWwgcG9pbnRzIG9mIGludGVyYWN0aW9uIHdpdGggdGhlIHN5c3RlbS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGBvdnNfY3RfbGltaXRfY21kX3NldGAgaXMgcmVhY2hhYmxlLCBhcyBhIG5ldGxpbmsgY29tbWFuZCBoYW5kbGVyLiBJdCYjMzk7cyBhIGtleSBwYXJ0IG9mIHRoZSBBUEkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE4OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O292c19jdF9saW1pdF9jbWRfc2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9MTgyMj1zdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfYWxsX3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xODQ5LVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjE4NTA6c3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTE4NTEte1xuLS1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYz0xOTc4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zbWFsbF9vcHMgY3RfbGltaXRfZ2VubF9vcHNbXSA9IHtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTk4My1cdFx0XHRcdFx0ICAgICAgICovXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6MTk4NDpcdFx0LmRvaXQgPSBvdnNfY3RfbGltaXRfY21kX3NldCxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xOTg1LVx0fSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMTg6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzkwMwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IHByb21wdDoKCioqQW5hbHl6aW5nIHRoZSBSZXF1ZXN0OiBOZXRsaW5rIENvbW1hbmQgSGFuZGxlciBDb250ZXh0KioKCk9rYXksIHNvIHRoZSBwcm9tcHQgaW5kaWNhdGVzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBuZXRsaW5rIGNvbW1hbmQgaGFuZGxlci4gVGhhdCYjMzk7cyBhIGtleSBwaWVjZSBvZiBpbmZvcm1hdGlvbi4gVGhpcyBzdWdnZXN0cyB3ZSYjMzk7cmUgd29ya2luZyBhdCBhIGxvdyBsZXZlbCwgcHJvYmFibHkgd2l0aGluIGEga2VybmVsIGNvbnRleHQgb3IgYSBzeXN0ZW0gcHJvZ3JhbSB0aGF0IGludGVyYWN0cyBkaXJlY3RseSB3aXRoIHRoZSBrZXJuZWwmIzM5O3MgbmV0bGluayBpbnRlcmZhY2UuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCBhcyBJIGludGVycHJldCB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uLiBOZXRsaW5rIGlzIGFsbCBhYm91dCBlZmZpY2llbnQgaW50ZXItcHJvY2VzcyBjb21tdW5pY2F0aW9uLCBlc3BlY2lhbGx5IGZvciBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gYW5kIGNvbnRyb2wuCgpOZXh0LCBpdCBwb2ludHMgdG93YXJkcyBgb3ZzX2N0X2NoZWNrX2xpbWl0YC4gVGhlIGluY2x1c2lvbiBvZiBgb3ZzX2AgaW1wbGllcyB0aGlzIGlzIHJlbGF0ZWQgdG8gT3BlbiB2U3dpdGNoLCB3aGljaCBpcyBmdXJ0aGVyIGhlbHBmdWwgY29udGV4dC4gVGhlIGZ1bmN0aW9uIG5hbWUgYG92c19jdF9jaGVja19saW1pdGAgc3Ryb25nbHkgc3VnZ2VzdHMgd2UgYXJlIGRlYWxpbmcgd2l0aCBjb25uZWN0aW9uIHRyYWNraW5nLCBsaWtlbHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIE9wZW4gdlN3aXRjaCYjMzk7cyBmbG93IHRhYmxlIG1hbmFnZW1lbnQuIEFuZCAmIzM0O2xpbWl0JiMzNDsgaW1wbGllcyB0aGF0IGZ1bmN0aW9uIHdvdWxkIGJlIHJlbGF0ZWQgdG8gcmF0ZSBsaW1pdGluZyBvciByZXNvdXJjZSBleGhhdXN0aW9uIHByb3RlY3Rpb24uIFRoaXMgc3BlY2lmaWMgZnVuY3Rpb24gaXMgYSBjb250cm9sIHBsYW5lIGZ1bmN0aW9uLCByZWxhdGVkIHRvIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb25zIGZvciB0aGUgZGF0YXBhdGguIEkgd2FudCB0byBsb29rIGF0IGl0cyB1c2UsIHBhcmFtZXRlcnMgYW5kIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMTg6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b3ZzX2N0X2NoZWNrX2xpbWl0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9OTE3PXN0YXRpYyB1MzIgY3RfbGltaXRfZ2V0KGNvbnN0IHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbywgdTE2IHpvbmUpXG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTkzMC1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzo5MzE6c3RhdGljIGludCBvdnNfY3RfY2hlY2tfbGltaXQoc3RydWN0IG5ldCAqbmV0LFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTkzMi1cdFx0XHQgICAgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYz05NjE9c3RhdGljIGludCBvdnNfY3RfY29tbWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXksXG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTk4MC1cdFx0aWYgKCFuZl9jdF9pc19jb25maXJtZWQoY3QpKSB7XG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6OTgxOlx0XHRcdGVyciA9IG92c19jdF9jaGVja19saW1pdChuZXQsIHNrYiwgaW5mbyk7XG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtOTgyLVx0XHRcdGlmIChlcnIpIHtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9MTYyMz1zdGF0aWMgdm9pZCBvdnNfY3RfbGltaXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0KVxuLS1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xNjI5LVx0XHRcdFx0ICAgbG9ja2RlcF9vdnNsX2lzX2hlbGQoKSk7XG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6MTYzMDpcdC8qIG92c19jdF9jaGVja19saW1pdCgpIGFjY2Vzc2VzIHRoZSBpbmZvIHVuZGVyIHRoZSBkYXRhcGF0aCBSQ1UgbG9jay4gKi9cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xNjMxLVx0c3luY2hyb25pemVfcmN1KCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE4OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2MjEKCQkJCQkJCW91dHB1dDogMTY2CgkJCQkJCQl0aG91Z2h0czogMTM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIGlmIGl0IHdlcmUgbXkgb3duIHRob3VnaHQgcHJvY2VzczoKCioqRml4aW5nIHRoZSBSQ1UgSGFuZGxpbmcgYW5kIExvY2tpbmcgZm9yIGN0X2xpbWl0X2luZm8gaW4gT3BlbiB2U3dpdGNoIENvbm5lY3Rpb24gVHJhY2tpbmcqKgoKUmlnaHQsIHNvIHRoaXMgcGF0Y2ggaXMgY3J1Y2lhbCBmb3IgdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgKGN0KSBtb2R1bGUgd2l0aGluIE9wZW4gdlN3aXRjaCwgc3BlY2lmaWNhbGx5IHRhcmdldGluZyB0aGUgYGN0X2xpbWl0X2luZm9gIGRhdGEgc3RydWN0dXJlLiBJdCBsb29rcyBsaWtlIHRoZSBpc3N1ZSBzdGVtcyBmcm9tIHByb2JsZW1zIHdpdGggUmVhZC1Db3B5LVVwZGF0ZSAoUkNVKSBzeW5jaHJvbml6YXRpb24gYW5kIHJlbGF0ZWQgbG9ja2luZyBtZWNoYW5pc21zLiBUaGlzIGlzIGNyaXRpY2FsIGZvciBhbnkgY29uY3VycmVudCBkYXRhIHN0cnVjdHVyZXMsIHNvIGEgYnVnIHRoZXJlIG1lYW5zIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIGRhdGEgY29ycnVwdGlvbiwgb3IgZXZlbiBrZXJuZWwgcGFuaWNzLiBGcm9tIHRoZSBkZXNjcmlwdGlvbiwgdGhlIGZpeCBpcyBwcm9iYWJseSBlc3NlbnRpYWwgdG8gZW5zdXJlIGRhdGEgY29uc2lzdGVuY3kgd2hlbiBtdWx0aXBsZSB0aHJlYWRzIG9yIGNvcmVzIGFyZSBvcGVyYXRpbmcgb24gdGhlc2UgY29ubmVjdGlvbiBsaW1pdHMgc2ltdWx0YW5lb3VzbHkuCgpUaGUgY29uZmlndXJhdGlvbnMgaW52b2x2ZWQgYXJlIGBPUEVOVlNXSVRDSGAgYW5kIGBORVRGSUxURVJfQ09OTkNPVU5UYCwgd2hpY2gsIG9mIGNvdXJzZSwgbWVhbnMgdGhpcyBpcyBzcGVjaWZpY2FsbHkgcmVsZXZhbnQgd2hlbiBPcGVuIHZTd2l0Y2ggaXMgY29tcGlsZWQgYW5kIGRlcGxveWVkIHdpdGggY29ubmVjdGlvbiBjb3VudCBmdW5jdGlvbmFsaXR5IGVuYWJsZWQg4oCTIGEgY29tbW9uIHNjZW5hcmlvLCBvYnZpb3VzbHkuCgpOb3csIGZvY3VzaW5nIG9uIHRoZSBjb3JlIGZ1bmN0aW9ucyBtZW50aW9uZWQsIHRoZXkgYXJlIHRoZSBrZXkgdG8gbXkgYW5hbHlzaXM6IGBvdnNfY3RfbGltaXRfY21kX3NldGAsIGBvdnNfY3RfbGltaXRfY21kX2RlbGAsIGBvdnNfY3RfbGltaXRfY21kX2dldGAsIGBvdnNfY3RfY2hlY2tfbGltaXRgLCBgb3ZzX2N0X2xpbWl0X2luaXRgLCBhbmQgYG92c19jdF9saW1pdF9leGl0YC4gVGhlc2UgcmVwcmVzZW50IHRoZSBwcmltYXJ5IG9wZXJhdGlvbnM6IHNldHRpbmcsIGRlbGV0aW5nLCBhbmQgZ2V0dGluZyBsaW1pdCBjb25maWd1cmF0aW9ucywgY2hlY2tpbmcgd2hldGhlciBsaW1pdHMgYXJlIGV4Y2VlZGVkLCBhbmQgaW5pdGlhbGl6aW5nIGFuZCBleGl0aW5nIHRoZSBsaW1pdC1yZWxhdGVkIHJlc291cmNlcy4gVGhlIGZpeCBtdXN0IGJlIHdvcmtpbmcgdG8gYWRkcmVzcyByYWNlIGNvbmRpdGlvbnMgdGhhdCBhcmUgbGlrZWx5IHRvIG9jY3VyIGluIGFsbCBvZiB0aGVzZSBmdW5jdGlvbnMuIEnigJlsbCBuZWVkIHRvIGRlbHZlIGludG8gdGhlIGNvZGUgdG8gcmVhbGx5IHVuZGVyc3RhbmQgdGhlIG9yaWdpbmFsIGZsYXcgYW5kIHRoZSBwcmVjaXNlIGxvY2tpbmcgc3RyYXRlZ3kgaW1wbGVtZW50ZWQgdG8gcmVzb2x2ZSBpdC4KCkZpbmFsbHksIEnigJlsbCBuZWVkIHRvIHByb2Nlc3MgdGhlIHJlc3VsdHMgb2YgdGVzdGluZyB0aGlzIHBhdGNoIHVzaW5nIGBzZXQtcmVzdWx0c2AuIEhvcGVmdWxseSwgaXQmIzM5O3MgY29tcHJlaGVuc2l2ZSBlbm91Z2ggdG8gdmFsaWRhdGUgdGhlIGxvY2tpbmcgaW1wcm92ZW1lbnRzIGFuZCBydWxlIG91dCBwb3RlbnRpYWwgcmVncmVzc2lvbnMuIFRoaXMgbWVhbnMgSSYjMzk7bSBleHBlY3RpbmcgZGV0YWlsZWQgb3V0cHV0IHJlZ2FyZGluZyBsb2NrIGNvbnRlbnRpb24sIFJDVSBncmFjZSBwZXJpb2QgdXNhZ2UsIGFuZCBhbnkgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGltcGFjdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE4OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtPUEVOVlNXSVRDSCYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfQ09OTkNPVU5UJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7b3ZzX2N0X2xpbWl0X2NtZF9zZXQmIzM0OywKICAgICYjMzQ7b3ZzX2N0X2xpbWl0X2NtZF9kZWwmIzM0OywKICAgICYjMzQ7b3ZzX2N0X2xpbWl0X2NtZF9nZXQmIzM0OywKICAgICYjMzQ7b3ZzX2N0X2NoZWNrX2xpbWl0JiMzNDssCiAgICAmIzM0O292c19jdF9saW1pdF9pbml0JiMzNDssCiAgICAmIzM0O292c19jdF9saW1pdF9leGl0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIFJDVSBzeW5jaHJvbml6YXRpb24gYW5kIGxvY2tpbmcgaXNzdWVzIGFyb3VuZCB0aGUgT3BlbiB2U3dpdGNoIGNvbm5lY3Rpb24gdHJhY2tpbmcgbGltaXQgY29uZmlndXJhdGlvbi4gSXQgbW9kaWZpZXMgbmV0bGluayBjb21tYW5kIGhhbmRsZXJzIGFuZCB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBsaW1pdCBjaGVjayBmdW5jdGlvbi4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlc2UgY29tbWFuZCBoYW5kbGVycyBhbmQgdGhlIGRhdGFwYXRoIGNvbm5lY3Rpb24gdHJhY2tpbmcgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09QRU5WU1dJVENIJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9DT05OQ09VTlQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtvdnNfY3RfbGltaXRfY21kX3NldCYjMzQ7LAogICAgJiMzNDtvdnNfY3RfbGltaXRfY21kX2RlbCYjMzQ7LAogICAgJiMzNDtvdnNfY3RfbGltaXRfY21kX2dldCYjMzQ7LAogICAgJiMzNDtvdnNfY3RfY2hlY2tfbGltaXQmIzM0OywKICAgICYjMzQ7b3ZzX2N0X2xpbWl0X2luaXQmIzM0OywKICAgICYjMzQ7b3ZzX2N0X2xpbWl0X2V4aXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgUkNVIHN5bmNocm9uaXphdGlvbiBhbmQgbG9ja2luZyBpc3N1ZXMgYXJvdW5kIHRoZSBPcGVuIHZTd2l0Y2ggY29ubmVjdGlvbiB0cmFja2luZyBsaW1pdCBjb25maWd1cmF0aW9uLiBJdCBtb2RpZmllcyBuZXRsaW5rIGNvbW1hbmQgaGFuZGxlcnMgYW5kIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGxpbWl0IGNoZWNrIGZ1bmN0aW9uLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGVzZSBjb21tYW5kIGhhbmRsZXJzIGFuZCB0aGUgZGF0YXBhdGggY29ubmVjdGlvbiB0cmFja2luZyBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE4OjUwOjQ1LjgxNjM0OTMwNVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3ODY2NTI0MzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9QRU5WU1dJVENIXCIsXG4gICAgXCJORVRGSUxURVJfQ09OTkNPVU5UXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib3ZzX2N0X2xpbWl0X2NtZF9zZXRcIixcbiAgICBcIm92c19jdF9saW1pdF9jbWRfZGVsXCIsXG4gICAgXCJvdnNfY3RfbGltaXRfY21kX2dldFwiLFxuICAgIFwib3ZzX2N0X2NoZWNrX2xpbWl0XCIsXG4gICAgXCJvdnNfY3RfbGltaXRfaW5pdFwiLFxuICAgIFwib3ZzX2N0X2xpbWl0X2V4aXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBSQ1Ugc3luY2hyb25pemF0aW9uIGFuZCBsb2NraW5nIGlzc3VlcyBhcm91bmQgdGhlIE9wZW4gdlN3aXRjaCBjb25uZWN0aW9uIHRyYWNraW5nIGxpbWl0IGNvbmZpZ3VyYXRpb24uIEl0IG1vZGlmaWVzIG5ldGxpbmsgY29tbWFuZCBoYW5kbGVycyBhbmQgdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgbGltaXQgY2hlY2sgZnVuY3Rpb24uIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZXNlIGNvbW1hbmQgaGFuZGxlcnMgYW5kIHRoZSBkYXRhcGF0aCBjb25uZWN0aW9uIHRyYWNraW5nIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxODo1MDo0NS44MTYzNTcwNjVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2NjU1MTMzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGEwOWVmM2NkYjQ1MTY5YjdiNjZlNmFmYTgxMTY2MTQzNzk5YjQwOGZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdWwgMjMgMTg6NTA6NDQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jIGIvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jXFxuaW5kZXggOTU2OTdkNGUxNmU2NGUuLjVjOWE2MDdkMjdhN2I2IDEwMDY0NFxcbi0tLSBhL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY1xcbisrKyBiL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY1xcbkBAIC05MzMsMTAgKzkzMywxNCBAQCBzdGF0aWMgaW50IG92c19jdF9jaGVja19saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBvdnNfY29ubnRyYWNrX2luZm8gKmluZm8pXFxuIHtcXG4gXFx0c3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhuZXQsIG92c19uZXRfaWQpO1xcbi1cXHRjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm8gPSBvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvO1xcbitcXHRjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm87XFxuIFxcdHUzMiBwZXJfem9uZV9saW1pdCwgY29ubmVjdGlvbnM7XFxuIFxcdHUzMiBjb25uY291bnRfa2V5O1xcbiBcXG4rXFx0Y3RfbGltaXRfaW5mbyA9IHJjdV9kZXJlZmVyZW5jZShvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvKTtcXG4rXFx0aWYgKCFjdF9saW1pdF9pbmZvKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuIFxcdGNvbm5jb3VudF9rZXkgPSBpbmZvLVxcdTAwM2V6b25lLmlkO1xcbiBcXG4gXFx0cGVyX3pvbmVfbGltaXQgPSBjdF9saW1pdF9nZXQoY3RfbGltaXRfaW5mbywgaW5mby1cXHUwMDNlem9uZS5pZCk7XFxuQEAgLTE1ODUsNDAgKzE1ODksNDcgQEAgc3RhdGljIHZvaWQgX19vdnNfY3RfZnJlZV9hY3Rpb24oc3RydWN0IG92c19jb25udHJhY2tfaW5mbyAqY3RfaW5mbylcXG4gI2lmXFx0SVNfRU5BQkxFRChDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVClcXG4gc3RhdGljIGludCBvdnNfY3RfbGltaXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0KVxcbiB7XFxuK1xcdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbztcXG4gXFx0aW50IGksIGVycjtcXG4gXFxuLVxcdG92c19uZXQtXFx1MDAzZWN0X2xpbWl0X2luZm8gPSBrbWFsbG9jX29iaigqb3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mbyk7XFxuLVxcdGlmICghb3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mbylcXG4rXFx0aW5mbyA9IGttYWxsb2Nfb2JqKCppbmZvKTtcXG4rXFx0aWYgKCFpbmZvKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuLVxcdG92c19uZXQtXFx1MDAzZWN0X2xpbWl0X2luZm8tXFx1MDAzZWRlZmF1bHRfbGltaXQgPSBPVlNfQ1RfTElNSVRfREVGQVVMVDtcXG4tXFx0b3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mby1cXHUwMDNlbGltaXRzID1cXG4rXFx0aW5mby1cXHUwMDNlZGVmYXVsdF9saW1pdCA9IE9WU19DVF9MSU1JVF9ERUZBVUxUO1xcbitcXHRpbmZvLVxcdTAwM2VsaW1pdHMgPVxcbiBcXHRcXHRrbWFsbG9jX29ianMoc3RydWN0IGhsaXN0X2hlYWQsIENUX0xJTUlUX0hBU0hfQlVDS0VUUyk7XFxuLVxcdGlmICghb3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mby1cXHUwMDNlbGltaXRzKSB7XFxuLVxcdFxcdGtmcmVlKG92c19uZXQtXFx1MDAzZWN0X2xpbWl0X2luZm8pO1xcbitcXHRpZiAoIWluZm8tXFx1MDAzZWxpbWl0cykge1xcbitcXHRcXHRrZnJlZShpbmZvKTtcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcdH1cXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBDVF9MSU1JVF9IQVNIX0JVQ0tFVFM7IGkrKylcXG4tXFx0XFx0SU5JVF9ITElTVF9IRUFEKFxcdTAwMjZvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvLVxcdTAwM2VsaW1pdHNbaV0pO1xcbitcXHRcXHRJTklUX0hMSVNUX0hFQUQoXFx1MDAyNmluZm8tXFx1MDAzZWxpbWl0c1tpXSk7XFxuIFxcbi1cXHRvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvLVxcdTAwM2VkYXRhID0gbmZfY29ubmNvdW50X2luaXQobmV0LCBzaXplb2YodTMyKSk7XFxuK1xcdGluZm8tXFx1MDAzZWRhdGEgPSBuZl9jb25uY291bnRfaW5pdChuZXQsIHNpemVvZih1MzIpKTtcXG4gXFxuLVxcdGlmIChJU19FUlIob3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mby1cXHUwMDNlZGF0YSkpIHtcXG4tXFx0XFx0ZXJyID0gUFRSX0VSUihvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvLVxcdTAwM2VkYXRhKTtcXG4tXFx0XFx0a2ZyZWUob3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mby1cXHUwMDNlbGltaXRzKTtcXG4tXFx0XFx0a2ZyZWUob3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mbyk7XFxuK1xcdGlmIChJU19FUlIoaW5mby1cXHUwMDNlZGF0YSkpIHtcXG4rXFx0XFx0ZXJyID0gUFRSX0VSUihpbmZvLVxcdTAwM2VkYXRhKTtcXG4rXFx0XFx0a2ZyZWUoaW5mby1cXHUwMDNlbGltaXRzKTtcXG4rXFx0XFx0a2ZyZWUoaW5mbyk7XFxuIFxcdFxcdHByX2VycihcXFwib3BlbnZzd2l0Y2g6IGZhaWxlZCB0byBpbml0IG5mX2Nvbm5jb3VudCAlZFxcXFxuXFxcIiwgZXJyKTtcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0fVxcbitcXHRyY3VfYXNzaWduX3BvaW50ZXIob3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mbywgaW5mbyk7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBvdnNfY3RfbGltaXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0KVxcbiB7XFxuLVxcdGNvbnN0IHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbyA9IG92c19uZXQtXFx1MDAzZWN0X2xpbWl0X2luZm87XFxuK1xcdGNvbnN0IHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbztcXG4gXFx0aW50IGk7XFxuIFxcbitcXHRpbmZvID0gcmN1X3JlcGxhY2VfcG9pbnRlcihvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvLCBOVUxMLFxcbitcXHRcXHRcXHRcXHQgICBsb2NrZGVwX292c2xfaXNfaGVsZCgpKTtcXG4rXFx0Lyogb3ZzX2N0X2NoZWNrX2xpbWl0KCkgYWNjZXNzZXMgdGhlIGluZm8gdW5kZXIgdGhlIGRhdGFwYXRoIFJDVSBsb2NrLiAqL1xcbitcXHRzeW5jaHJvbml6ZV9yY3UoKTtcXG4rXFxuIFxcdG5mX2Nvbm5jb3VudF9kZXN0cm95KG5ldCwgaW5mby1cXHUwMDNlZGF0YSk7XFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBDVF9MSU1JVF9IQVNIX0JVQ0tFVFM7ICsraSkge1xcbiBcXHRcXHRzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZCA9IFxcdTAwMjZpbmZvLVxcdTAwM2VsaW1pdHNbaV07XFxuQEAgLTE2NzgsOSArMTY4OSw3IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LFxcbiBcXHR3aGlsZSAocmVtIFxcdTAwM2U9IHNpemVvZigqem9uZV9saW1pdCkpIHtcXG4gXFx0XFx0aWYgKHVubGlrZWx5KHpvbmVfbGltaXQtXFx1MDAzZXpvbmVfaWQgPT1cXG4gXFx0XFx0XFx0XFx0T1ZTX1pPTkVfTElNSVRfREVGQVVMVF9aT05FKSkge1xcbi1cXHRcXHRcXHRvdnNfbG9jaygpO1xcbiBcXHRcXHRcXHRpbmZvLVxcdTAwM2VkZWZhdWx0X2xpbWl0ID0gem9uZV9saW1pdC1cXHUwMDNlbGltaXQ7XFxuLVxcdFxcdFxcdG92c191bmxvY2soKTtcXG4gXFx0XFx0fSBlbHNlIGlmICh1bmxpa2VseSghY2hlY2tfem9uZV9pZChcXG4gXFx0XFx0XFx0XFx0em9uZV9saW1pdC1cXHUwMDNlem9uZV9pZCwgXFx1MDAyNnpvbmUpKSkge1xcbiBcXHRcXHRcXHRPVlNfTkxFUlIodHJ1ZSwgXFxcInpvbmUgaWQgaXMgb3V0IG9mIHJhbmdlXFxcIik7XFxuQEAgLTE2OTQsOSArMTcwMyw3IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LFxcbiBcXHRcXHRcXHRjdF9saW1pdC1cXHUwMDNlem9uZSA9IHpvbmU7XFxuIFxcdFxcdFxcdGN0X2xpbWl0LVxcdTAwM2VsaW1pdCA9IHpvbmVfbGltaXQtXFx1MDAzZWxpbWl0O1xcbiBcXG4tXFx0XFx0XFx0b3ZzX2xvY2soKTtcXG4gXFx0XFx0XFx0Y3RfbGltaXRfc2V0KGluZm8sIGN0X2xpbWl0KTtcXG4tXFx0XFx0XFx0b3ZzX3VubG9jaygpO1xcbiBcXHRcXHR9XFxuIFxcdFxcdHJlbSAtPSBOTEFfQUxJR04oc2l6ZW9mKCp6b25lX2xpbWl0KSk7XFxuIFxcdFxcdHpvbmVfbGltaXQgPSAoc3RydWN0IG92c196b25lX2xpbWl0ICopKCh1OCAqKXpvbmVfbGltaXQgK1xcbkBAIC0xNzIyLDE2ICsxNzI5LDEyIEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2RlbF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LFxcbiBcXHR3aGlsZSAocmVtIFxcdTAwM2U9IHNpemVvZigqem9uZV9saW1pdCkpIHtcXG4gXFx0XFx0aWYgKHVubGlrZWx5KHpvbmVfbGltaXQtXFx1MDAzZXpvbmVfaWQgPT1cXG4gXFx0XFx0XFx0XFx0T1ZTX1pPTkVfTElNSVRfREVGQVVMVF9aT05FKSkge1xcbi1cXHRcXHRcXHRvdnNfbG9jaygpO1xcbiBcXHRcXHRcXHRpbmZvLVxcdTAwM2VkZWZhdWx0X2xpbWl0ID0gT1ZTX0NUX0xJTUlUX0RFRkFVTFQ7XFxuLVxcdFxcdFxcdG92c191bmxvY2soKTtcXG4gXFx0XFx0fSBlbHNlIGlmICh1bmxpa2VseSghY2hlY2tfem9uZV9pZChcXG4gXFx0XFx0XFx0XFx0em9uZV9saW1pdC1cXHUwMDNlem9uZV9pZCwgXFx1MDAyNnpvbmUpKSkge1xcbiBcXHRcXHRcXHRPVlNfTkxFUlIodHJ1ZSwgXFxcInpvbmUgaWQgaXMgb3V0IG9mIHJhbmdlXFxcIik7XFxuIFxcdFxcdH0gZWxzZSB7XFxuLVxcdFxcdFxcdG92c19sb2NrKCk7XFxuIFxcdFxcdFxcdGN0X2xpbWl0X2RlbChpbmZvLCB6b25lKTtcXG4tXFx0XFx0XFx0b3ZzX3VubG9jaygpO1xcbiBcXHRcXHR9XFxuIFxcdFxcdHJlbSAtPSBOTEFfQUxJR04oc2l6ZW9mKCp6b25lX2xpbWl0KSk7XFxuIFxcdFxcdHpvbmVfbGltaXQgPSAoc3RydWN0IG92c196b25lX2xpbWl0ICopKCh1OCAqKXpvbmVfbGltaXQgK1xcbkBAIC0xODUwLDcgKzE4NTMsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfc2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIFxcdHN0cnVjdCBza19idWZmICpyZXBseTtcXG4gXFx0c3RydWN0IG92c19oZWFkZXIgKm92c19yZXBseV9oZWFkZXI7XFxuIFxcdHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMoc29ja19uZXQoc2tiLVxcdTAwM2VzayksIG92c19uZXRfaWQpO1xcbi1cXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm8gPSBvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvO1xcbitcXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm87XFxuIFxcdGludCBlcnI7XFxuIFxcbiBcXHRyZXBseSA9IG92c19jdF9saW1pdF9jbWRfcmVwbHlfc3RhcnQoaW5mbywgT1ZTX0NUX0xJTUlUX0NNRF9TRVQsXFxuQEAgLTE4NjMsMTYgKzE4NjYsMjIgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiBcXHRcXHRnb3RvIGV4aXRfZXJyO1xcbiBcXHR9XFxuIFxcbitcXHRvdnNfbG9jaygpO1xcbitcXHRjdF9saW1pdF9pbmZvID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIGxvY2tkZXBfb3ZzbF9pc19oZWxkKCkpO1xcbiBcXHRlcnIgPSBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSxcXG4gXFx0XFx0XFx0XFx0XFx0ICBjdF9saW1pdF9pbmZvKTtcXG4gXFx0aWYgKGVycilcXG4tXFx0XFx0Z290byBleGl0X2VycjtcXG4rXFx0XFx0Z290byBleGl0X3VubG9jaztcXG4gXFxuIFxcdHN0YXRpY19icmFuY2hfZW5hYmxlKFxcdTAwMjZvdnNfY3RfbGltaXRfZW5hYmxlZCk7XFxuIFxcbiBcXHRnZW5sbXNnX2VuZChyZXBseSwgb3ZzX3JlcGx5X2hlYWRlcik7XFxuK1xcdG92c191bmxvY2soKTtcXG4gXFx0cmV0dXJuIGdlbmxtc2dfcmVwbHkocmVwbHksIGluZm8pO1xcbiBcXG4rZXhpdF91bmxvY2s6XFxuK1xcdG92c191bmxvY2soKTtcXG4gZXhpdF9lcnI6XFxuIFxcdG5sbXNnX2ZyZWUocmVwbHkpO1xcbiBcXHRyZXR1cm4gZXJyO1xcbkBAIC0xODg0LDcgKzE4OTMsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfZGVsKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIFxcdHN0cnVjdCBza19idWZmICpyZXBseTtcXG4gXFx0c3RydWN0IG92c19oZWFkZXIgKm92c19yZXBseV9oZWFkZXI7XFxuIFxcdHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMoc29ja19uZXQoc2tiLVxcdTAwM2VzayksIG92c19uZXRfaWQpO1xcbi1cXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm8gPSBvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvO1xcbitcXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm87XFxuIFxcdGludCBlcnI7XFxuIFxcbiBcXHRyZXBseSA9IG92c19jdF9saW1pdF9jbWRfcmVwbHlfc3RhcnQoaW5mbywgT1ZTX0NUX0xJTUlUX0NNRF9ERUwsXFxuQEAgLTE4OTcsMTQgKzE5MDYsMjAgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiBcXHRcXHRnb3RvIGV4aXRfZXJyO1xcbiBcXHR9XFxuIFxcbitcXHRvdnNfbG9jaygpO1xcbitcXHRjdF9saW1pdF9pbmZvID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIGxvY2tkZXBfb3ZzbF9pc19oZWxkKCkpO1xcbiBcXHRlcnIgPSBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSxcXG4gXFx0XFx0XFx0XFx0XFx0ICBjdF9saW1pdF9pbmZvKTtcXG4gXFx0aWYgKGVycilcXG4tXFx0XFx0Z290byBleGl0X2VycjtcXG4rXFx0XFx0Z290byBleGl0X3VubG9jaztcXG4gXFxuIFxcdGdlbmxtc2dfZW5kKHJlcGx5LCBvdnNfcmVwbHlfaGVhZGVyKTtcXG4rXFx0b3ZzX3VubG9jaygpO1xcbiBcXHRyZXR1cm4gZ2VubG1zZ19yZXBseShyZXBseSwgaW5mbyk7XFxuIFxcbitleGl0X3VubG9jazpcXG4rXFx0b3ZzX3VubG9jaygpO1xcbiBleGl0X2VycjpcXG4gXFx0bmxtc2dfZnJlZShyZXBseSk7XFxuIFxcdHJldHVybiBlcnI7XFxuQEAgLTE5MTgsNyArMTkzMyw3IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9nZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4gXFx0c3RydWN0IG92c19oZWFkZXIgKm92c19yZXBseV9oZWFkZXI7XFxuIFxcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi1cXHUwMDNlc2spO1xcbiBcXHRzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKG5ldCwgb3ZzX25ldF9pZCk7XFxuLVxcdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbyA9IG92c19uZXQtXFx1MDAzZWN0X2xpbWl0X2luZm87XFxuK1xcdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbztcXG4gXFx0aW50IGVycjtcXG4gXFxuIFxcdHJlcGx5ID0gb3ZzX2N0X2xpbWl0X2NtZF9yZXBseV9zdGFydChpbmZvLCBPVlNfQ1RfTElNSVRfQ01EX0dFVCxcXG5AQCAtMTkzMiwyMyArMTk0NywyOSBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfZ2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIFxcdFxcdGdvdG8gZXhpdF9lcnI7XFxuIFxcdH1cXG4gXFxuK1xcdG92c19sb2NrKCk7XFxuK1xcdGN0X2xpbWl0X2luZm8gPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKG92c19uZXQtXFx1MDAzZWN0X2xpbWl0X2luZm8sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgbG9ja2RlcF9vdnNsX2lzX2hlbGQoKSk7XFxuIFxcdGlmIChhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdKSB7XFxuIFxcdFxcdGVyciA9IG92c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChcXG4gXFx0XFx0XFx0bmV0LCBhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdLCBjdF9saW1pdF9pbmZvLFxcbiBcXHRcXHRcXHRyZXBseSk7XFxuIFxcdFxcdGlmIChlcnIpXFxuLVxcdFxcdFxcdGdvdG8gZXhpdF9lcnI7XFxuK1xcdFxcdFxcdGdvdG8gZXhpdF91bmxvY2s7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdGVyciA9IG92c19jdF9saW1pdF9nZXRfYWxsX3pvbmVfbGltaXQobmV0LCBjdF9saW1pdF9pbmZvLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgICByZXBseSk7XFxuIFxcdFxcdGlmIChlcnIpXFxuLVxcdFxcdFxcdGdvdG8gZXhpdF9lcnI7XFxuK1xcdFxcdFxcdGdvdG8gZXhpdF91bmxvY2s7XFxuIFxcdH1cXG4gXFxuIFxcdG5sYV9uZXN0X2VuZChyZXBseSwgbmxhX3JlcGx5KTtcXG4gXFx0Z2VubG1zZ19lbmQocmVwbHksIG92c19yZXBseV9oZWFkZXIpO1xcbitcXHRvdnNfdW5sb2NrKCk7XFxuIFxcdHJldHVybiBnZW5sbXNnX3JlcGx5KHJlcGx5LCBpbmZvKTtcXG4gXFxuK2V4aXRfdW5sb2NrOlxcbitcXHRvdnNfdW5sb2NrKCk7XFxuIGV4aXRfZXJyOlxcbiBcXHRubG1zZ19mcmVlKHJlcGx5KTtcXG4gXFx0cmV0dXJuIGVycjtcXG5kaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmggYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaFxcbmluZGV4IDY5NjY0MGU4OGZhN2UzLi45M2UxMWU0NjhkMTczZiAxMDA2NDRcXG4tLS0gYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaFxcbisrKyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oXFxuQEAgLTE3Miw3ICsxNzIsNyBAQCBzdHJ1Y3Qgb3ZzX25ldCB7XFxuIFxcdHN0cnVjdCB3b3JrX3N0cnVjdCBkcF9ub3RpZnlfd29yaztcXG4gXFx0c3RydWN0IGRlbGF5ZWRfd29yayBtYXNrc19yZWJhbGFuY2U7XFxuICNpZlxcdElTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpXFxuLVxcdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbztcXG4rXFx0c3RydWN0IG92c19jdF9saW1pdF9pbmZvIF9fcmN1ICpjdF9saW1pdF9pbmZvO1xcbiAjZW5kaWZcXG4gXFx0Ym9vbCB4dF9sYWJlbDtcXG4gfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTg6NTA6NDYuNDgzODU3Mzk0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MzcxOTkwMDQzNjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiT1BFTlZTV0lUQ0hcIixcbiAgICBcIk5FVEZJTFRFUl9DT05OQ09VTlRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJvdnNfY3RfbGltaXRfY21kX3NldFwiLFxuICAgIFwib3ZzX2N0X2xpbWl0X2NtZF9kZWxcIixcbiAgICBcIm92c19jdF9saW1pdF9jbWRfZ2V0XCIsXG4gICAgXCJvdnNfY3RfY2hlY2tfbGltaXRcIixcbiAgICBcIm92c19jdF9saW1pdF9pbml0XCIsXG4gICAgXCJvdnNfY3RfbGltaXRfZXhpdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIFJDVSBzeW5jaHJvbml6YXRpb24gYW5kIGxvY2tpbmcgaXNzdWVzIGFyb3VuZCB0aGUgT3BlbiB2U3dpdGNoIGNvbm5lY3Rpb24gdHJhY2tpbmcgbGltaXQgY29uZmlndXJhdGlvbi4gSXQgbW9kaWZpZXMgbmV0bGluayBjb21tYW5kIGhhbmRsZXJzIGFuZCB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBsaW1pdCBjaGVjayBmdW5jdGlvbi4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlc2UgY29tbWFuZCBoYW5kbGVycyBhbmQgdGhlIGRhdGFwYXRoIGNvbm5lY3Rpb24gdHJhY2tpbmcgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYTA5ZWYzY2RiNDUxNjliN2I2NmU2YWZhODExNjYxNDM3OTliNDA4ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDIzIDE4OjUwOjQ0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jIGIvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jXG5pbmRleCA5NTY5N2Q0ZTE2ZTY0ZS4uNWM5YTYwN2QyN2E3YjYgMTAwNjQ0XG4tLS0gYS9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmNcbisrKyBiL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY1xuQEAgLTkzMywxMCArOTMzLDE0IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2NoZWNrX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3Qgb3ZzX2Nvbm50cmFja19pbmZvICppbmZvKVxuIHtcbiBcdHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMobmV0LCBvdnNfbmV0X2lkKTtcbi1cdGNvbnN0IHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbyA9IG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbztcbitcdGNvbnN0IHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbztcbiBcdHUzMiBwZXJfem9uZV9saW1pdCwgY29ubmVjdGlvbnM7XG4gXHR1MzIgY29ubmNvdW50X2tleTtcbiBcbitcdGN0X2xpbWl0X2luZm8gPSByY3VfZGVyZWZlcmVuY2Uob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvKTtcbitcdGlmICghY3RfbGltaXRfaW5mbylcbitcdFx0cmV0dXJuIDA7XG4rXG4gXHRjb25uY291bnRfa2V5ID0gaW5mby1cdTAwM2V6b25lLmlkO1xuIFxuIFx0cGVyX3pvbmVfbGltaXQgPSBjdF9saW1pdF9nZXQoY3RfbGltaXRfaW5mbywgaW5mby1cdTAwM2V6b25lLmlkKTtcbkBAIC0xNTg1LDQwICsxNTg5LDQ3IEBAIHN0YXRpYyB2b2lkIF9fb3ZzX2N0X2ZyZWVfYWN0aW9uKHN0cnVjdCBvdnNfY29ubnRyYWNrX2luZm8gKmN0X2luZm8pXG4gI2lmXHRJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKVxuIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2luaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldClcbiB7XG4rXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm87XG4gXHRpbnQgaSwgZXJyO1xuIFxuLVx0b3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvID0ga21hbGxvY19vYmooKm92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyk7XG4tXHRpZiAoIW92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbylcbitcdGluZm8gPSBrbWFsbG9jX29iaigqaW5mbyk7XG4rXHRpZiAoIWluZm8pXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuLVx0b3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvLVx1MDAzZWRlZmF1bHRfbGltaXQgPSBPVlNfQ1RfTElNSVRfREVGQVVMVDtcbi1cdG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VsaW1pdHMgPVxuK1x0aW5mby1cdTAwM2VkZWZhdWx0X2xpbWl0ID0gT1ZTX0NUX0xJTUlUX0RFRkFVTFQ7XG4rXHRpbmZvLVx1MDAzZWxpbWl0cyA9XG4gXHRcdGttYWxsb2Nfb2JqcyhzdHJ1Y3QgaGxpc3RfaGVhZCwgQ1RfTElNSVRfSEFTSF9CVUNLRVRTKTtcbi1cdGlmICghb3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvLVx1MDAzZWxpbWl0cykge1xuLVx0XHRrZnJlZShvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pO1xuK1x0aWYgKCFpbmZvLVx1MDAzZWxpbWl0cykge1xuK1x0XHRrZnJlZShpbmZvKTtcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHR9XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBDVF9MSU1JVF9IQVNIX0JVQ0tFVFM7IGkrKylcbi1cdFx0SU5JVF9ITElTVF9IRUFEKFx1MDAyNm92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VsaW1pdHNbaV0pO1xuK1x0XHRJTklUX0hMSVNUX0hFQUQoXHUwMDI2aW5mby1cdTAwM2VsaW1pdHNbaV0pO1xuIFxuLVx0b3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvLVx1MDAzZWRhdGEgPSBuZl9jb25uY291bnRfaW5pdChuZXQsIHNpemVvZih1MzIpKTtcbitcdGluZm8tXHUwMDNlZGF0YSA9IG5mX2Nvbm5jb3VudF9pbml0KG5ldCwgc2l6ZW9mKHUzMikpO1xuIFxuLVx0aWYgKElTX0VSUihvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8tXHUwMDNlZGF0YSkpIHtcbi1cdFx0ZXJyID0gUFRSX0VSUihvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8tXHUwMDNlZGF0YSk7XG4tXHRcdGtmcmVlKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VsaW1pdHMpO1xuLVx0XHRrZnJlZShvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pO1xuK1x0aWYgKElTX0VSUihpbmZvLVx1MDAzZWRhdGEpKSB7XG4rXHRcdGVyciA9IFBUUl9FUlIoaW5mby1cdTAwM2VkYXRhKTtcbitcdFx0a2ZyZWUoaW5mby1cdTAwM2VsaW1pdHMpO1xuK1x0XHRrZnJlZShpbmZvKTtcbiBcdFx0cHJfZXJyKFwib3BlbnZzd2l0Y2g6IGZhaWxlZCB0byBpbml0IG5mX2Nvbm5jb3VudCAlZFxcblwiLCBlcnIpO1xuIFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuK1x0cmN1X2Fzc2lnbl9wb2ludGVyKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbywgaW5mbyk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgb3ZzX2N0X2xpbWl0X2V4aXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldClcbiB7XG4tXHRjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8gPSBvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm87XG4rXHRjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm87XG4gXHRpbnQgaTtcbiBcbitcdGluZm8gPSByY3VfcmVwbGFjZV9wb2ludGVyKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbywgTlVMTCxcbitcdFx0XHRcdCAgIGxvY2tkZXBfb3ZzbF9pc19oZWxkKCkpO1xuK1x0Lyogb3ZzX2N0X2NoZWNrX2xpbWl0KCkgYWNjZXNzZXMgdGhlIGluZm8gdW5kZXIgdGhlIGRhdGFwYXRoIFJDVSBsb2NrLiAqL1xuK1x0c3luY2hyb25pemVfcmN1KCk7XG4rXG4gXHRuZl9jb25uY291bnRfZGVzdHJveShuZXQsIGluZm8tXHUwMDNlZGF0YSk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBDVF9MSU1JVF9IQVNIX0JVQ0tFVFM7ICsraSkge1xuIFx0XHRzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZCA9IFx1MDAyNmluZm8tXHUwMDNlbGltaXRzW2ldO1xuQEAgLTE2NzgsOSArMTY4OSw3IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LFxuIFx0d2hpbGUgKHJlbSBcdTAwM2U9IHNpemVvZigqem9uZV9saW1pdCkpIHtcbiBcdFx0aWYgKHVubGlrZWx5KHpvbmVfbGltaXQtXHUwMDNlem9uZV9pZCA9PVxuIFx0XHRcdFx0T1ZTX1pPTkVfTElNSVRfREVGQVVMVF9aT05FKSkge1xuLVx0XHRcdG92c19sb2NrKCk7XG4gXHRcdFx0aW5mby1cdTAwM2VkZWZhdWx0X2xpbWl0ID0gem9uZV9saW1pdC1cdTAwM2VsaW1pdDtcbi1cdFx0XHRvdnNfdW5sb2NrKCk7XG4gXHRcdH0gZWxzZSBpZiAodW5saWtlbHkoIWNoZWNrX3pvbmVfaWQoXG4gXHRcdFx0XHR6b25lX2xpbWl0LVx1MDAzZXpvbmVfaWQsIFx1MDAyNnpvbmUpKSkge1xuIFx0XHRcdE9WU19OTEVSUih0cnVlLCBcInpvbmUgaWQgaXMgb3V0IG9mIHJhbmdlXCIpO1xuQEAgLTE2OTQsOSArMTcwMyw3IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LFxuIFx0XHRcdGN0X2xpbWl0LVx1MDAzZXpvbmUgPSB6b25lO1xuIFx0XHRcdGN0X2xpbWl0LVx1MDAzZWxpbWl0ID0gem9uZV9saW1pdC1cdTAwM2VsaW1pdDtcbiBcbi1cdFx0XHRvdnNfbG9jaygpO1xuIFx0XHRcdGN0X2xpbWl0X3NldChpbmZvLCBjdF9saW1pdCk7XG4tXHRcdFx0b3ZzX3VubG9jaygpO1xuIFx0XHR9XG4gXHRcdHJlbSAtPSBOTEFfQUxJR04oc2l6ZW9mKCp6b25lX2xpbWl0KSk7XG4gXHRcdHpvbmVfbGltaXQgPSAoc3RydWN0IG92c196b25lX2xpbWl0ICopKCh1OCAqKXpvbmVfbGltaXQgK1xuQEAgLTE3MjIsMTYgKzE3MjksMTIgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsXG4gXHR3aGlsZSAocmVtIFx1MDAzZT0gc2l6ZW9mKCp6b25lX2xpbWl0KSkge1xuIFx0XHRpZiAodW5saWtlbHkoem9uZV9saW1pdC1cdTAwM2V6b25lX2lkID09XG4gXHRcdFx0XHRPVlNfWk9ORV9MSU1JVF9ERUZBVUxUX1pPTkUpKSB7XG4tXHRcdFx0b3ZzX2xvY2soKTtcbiBcdFx0XHRpbmZvLVx1MDAzZWRlZmF1bHRfbGltaXQgPSBPVlNfQ1RfTElNSVRfREVGQVVMVDtcbi1cdFx0XHRvdnNfdW5sb2NrKCk7XG4gXHRcdH0gZWxzZSBpZiAodW5saWtlbHkoIWNoZWNrX3pvbmVfaWQoXG4gXHRcdFx0XHR6b25lX2xpbWl0LVx1MDAzZXpvbmVfaWQsIFx1MDAyNnpvbmUpKSkge1xuIFx0XHRcdE9WU19OTEVSUih0cnVlLCBcInpvbmUgaWQgaXMgb3V0IG9mIHJhbmdlXCIpO1xuIFx0XHR9IGVsc2Uge1xuLVx0XHRcdG92c19sb2NrKCk7XG4gXHRcdFx0Y3RfbGltaXRfZGVsKGluZm8sIHpvbmUpO1xuLVx0XHRcdG92c191bmxvY2soKTtcbiBcdFx0fVxuIFx0XHRyZW0gLT0gTkxBX0FMSUdOKHNpemVvZigqem9uZV9saW1pdCkpO1xuIFx0XHR6b25lX2xpbWl0ID0gKHN0cnVjdCBvdnNfem9uZV9saW1pdCAqKSgodTggKil6b25lX2xpbWl0ICtcbkBAIC0xODUwLDcgKzE4NTMsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfc2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqcmVwbHk7XG4gXHRzdHJ1Y3Qgb3ZzX2hlYWRlciAqb3ZzX3JlcGx5X2hlYWRlcjtcbiBcdHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMoc29ja19uZXQoc2tiLVx1MDAzZXNrKSwgb3ZzX25ldF9pZCk7XG4tXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm8gPSBvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm87XG4rXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm87XG4gXHRpbnQgZXJyO1xuIFxuIFx0cmVwbHkgPSBvdnNfY3RfbGltaXRfY21kX3JlcGx5X3N0YXJ0KGluZm8sIE9WU19DVF9MSU1JVF9DTURfU0VULFxuQEAgLTE4NjMsMTYgKzE4NjYsMjIgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0XHRnb3RvIGV4aXRfZXJyO1xuIFx0fVxuIFxuK1x0b3ZzX2xvY2soKTtcbitcdGN0X2xpbWl0X2luZm8gPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyxcbitcdFx0XHRcdFx0XHQgIGxvY2tkZXBfb3ZzbF9pc19oZWxkKCkpO1xuIFx0ZXJyID0gb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0sXG4gXHRcdFx0XHRcdCAgY3RfbGltaXRfaW5mbyk7XG4gXHRpZiAoZXJyKVxuLVx0XHRnb3RvIGV4aXRfZXJyO1xuK1x0XHRnb3RvIGV4aXRfdW5sb2NrO1xuIFxuIFx0c3RhdGljX2JyYW5jaF9lbmFibGUoXHUwMDI2b3ZzX2N0X2xpbWl0X2VuYWJsZWQpO1xuIFxuIFx0Z2VubG1zZ19lbmQocmVwbHksIG92c19yZXBseV9oZWFkZXIpO1xuK1x0b3ZzX3VubG9jaygpO1xuIFx0cmV0dXJuIGdlbmxtc2dfcmVwbHkocmVwbHksIGluZm8pO1xuIFxuK2V4aXRfdW5sb2NrOlxuK1x0b3ZzX3VubG9jaygpO1xuIGV4aXRfZXJyOlxuIFx0bmxtc2dfZnJlZShyZXBseSk7XG4gXHRyZXR1cm4gZXJyO1xuQEAgLTE4ODQsNyArMTg5Myw3IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9kZWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdHN0cnVjdCBza19idWZmICpyZXBseTtcbiBcdHN0cnVjdCBvdnNfaGVhZGVyICpvdnNfcmVwbHlfaGVhZGVyO1xuIFx0c3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhzb2NrX25ldChza2ItXHUwMDNlc2spLCBvdnNfbmV0X2lkKTtcbi1cdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbyA9IG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbztcbitcdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbztcbiBcdGludCBlcnI7XG4gXG4gXHRyZXBseSA9IG92c19jdF9saW1pdF9jbWRfcmVwbHlfc3RhcnQoaW5mbywgT1ZTX0NUX0xJTUlUX0NNRF9ERUwsXG5AQCAtMTg5NywxNCArMTkwNiwyMCBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfZGVsKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRcdGdvdG8gZXhpdF9lcnI7XG4gXHR9XG4gXG4rXHRvdnNfbG9jaygpO1xuK1x0Y3RfbGltaXRfaW5mbyA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvLFxuK1x0XHRcdFx0XHRcdCAgbG9ja2RlcF9vdnNsX2lzX2hlbGQoKSk7XG4gXHRlcnIgPSBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSxcbiBcdFx0XHRcdFx0ICBjdF9saW1pdF9pbmZvKTtcbiBcdGlmIChlcnIpXG4tXHRcdGdvdG8gZXhpdF9lcnI7XG4rXHRcdGdvdG8gZXhpdF91bmxvY2s7XG4gXG4gXHRnZW5sbXNnX2VuZChyZXBseSwgb3ZzX3JlcGx5X2hlYWRlcik7XG4rXHRvdnNfdW5sb2NrKCk7XG4gXHRyZXR1cm4gZ2VubG1zZ19yZXBseShyZXBseSwgaW5mbyk7XG4gXG4rZXhpdF91bmxvY2s6XG4rXHRvdnNfdW5sb2NrKCk7XG4gZXhpdF9lcnI6XG4gXHRubG1zZ19mcmVlKHJlcGx5KTtcbiBcdHJldHVybiBlcnI7XG5AQCAtMTkxOCw3ICsxOTMzLDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX2dldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0c3RydWN0IG92c19oZWFkZXIgKm92c19yZXBseV9oZWFkZXI7XG4gXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItXHUwMDNlc2spO1xuIFx0c3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhuZXQsIG92c19uZXRfaWQpO1xuLVx0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvID0gb3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvO1xuK1x0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvO1xuIFx0aW50IGVycjtcbiBcbiBcdHJlcGx5ID0gb3ZzX2N0X2xpbWl0X2NtZF9yZXBseV9zdGFydChpbmZvLCBPVlNfQ1RfTElNSVRfQ01EX0dFVCxcbkBAIC0xOTMyLDIzICsxOTQ3LDI5IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9nZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdFx0Z290byBleGl0X2VycjtcbiBcdH1cbiBcbitcdG92c19sb2NrKCk7XG4rXHRjdF9saW1pdF9pbmZvID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8sXG4rXHRcdFx0XHRcdFx0ICBsb2NrZGVwX292c2xfaXNfaGVsZCgpKTtcbiBcdGlmIChhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdKSB7XG4gXHRcdGVyciA9IG92c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChcbiBcdFx0XHRuZXQsIGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0sIGN0X2xpbWl0X2luZm8sXG4gXHRcdFx0cmVwbHkpO1xuIFx0XHRpZiAoZXJyKVxuLVx0XHRcdGdvdG8gZXhpdF9lcnI7XG4rXHRcdFx0Z290byBleGl0X3VubG9jaztcbiBcdH0gZWxzZSB7XG4gXHRcdGVyciA9IG92c19jdF9saW1pdF9nZXRfYWxsX3pvbmVfbGltaXQobmV0LCBjdF9saW1pdF9pbmZvLFxuIFx0XHRcdFx0XHRcdCAgICAgIHJlcGx5KTtcbiBcdFx0aWYgKGVycilcbi1cdFx0XHRnb3RvIGV4aXRfZXJyO1xuK1x0XHRcdGdvdG8gZXhpdF91bmxvY2s7XG4gXHR9XG4gXG4gXHRubGFfbmVzdF9lbmQocmVwbHksIG5sYV9yZXBseSk7XG4gXHRnZW5sbXNnX2VuZChyZXBseSwgb3ZzX3JlcGx5X2hlYWRlcik7XG4rXHRvdnNfdW5sb2NrKCk7XG4gXHRyZXR1cm4gZ2VubG1zZ19yZXBseShyZXBseSwgaW5mbyk7XG4gXG4rZXhpdF91bmxvY2s6XG4rXHRvdnNfdW5sb2NrKCk7XG4gZXhpdF9lcnI6XG4gXHRubG1zZ19mcmVlKHJlcGx5KTtcbiBcdHJldHVybiBlcnI7XG5kaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmggYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaFxuaW5kZXggNjk2NjQwZTg4ZmE3ZTMuLjkzZTExZTQ2OGQxNzNmIDEwMDY0NFxuLS0tIGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmhcbisrKyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oXG5AQCAtMTcyLDcgKzE3Miw3IEBAIHN0cnVjdCBvdnNfbmV0IHtcbiBcdHN0cnVjdCB3b3JrX3N0cnVjdCBkcF9ub3RpZnlfd29yaztcbiBcdHN0cnVjdCBkZWxheWVkX3dvcmsgbWFza3NfcmViYWxhbmNlO1xuICNpZlx0SVNfRU5BQkxFRChDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVClcbi1cdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbztcbitcdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyBfX3JjdSAqY3RfbGltaXRfaW5mbztcbiAjZW5kaWZcbiBcdGJvb2wgeHRfbGFiZWw7XG4gfTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE4OjUwOjQ2LjQ4Mzg1OTM1NFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1NTA2MzAzMDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDb25uZWN0aW9uIFRyYWNraW5nIExpbWl0IFBhdGNoIGluIE9wZW4gdlN3aXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0d2Vha3MgdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgbGltaXQgbG9naWMgaW4gYG5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY2AgYW5kIGBuZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaGAuIFRoZSBjb3JlIGNoYW5nZSBzZWVtcyB0byBiZSBhcm91bmQgaG93IGBjdF9saW1pdF9pbmZvYCBpcyBhY2Nlc3NlZC4gVGhleSdyZSB1c2luZyBSQ1Ugbm93IOKAkyBgcmN1X2RlcmVmZXJlbmNlYCwgYHJjdV9hc3NpZ25fcG9pbnRlcmAsIGByY3VfcmVwbGFjZV9wb2ludGVyYCDigJMgd2hpY2ggaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBpcyBhYm91dCBpbXByb3ZpbmcgY29uY3VycmVuY3kgYW5kIGF2b2lkaW5nIHJhY2UgY29uZGl0aW9ucy4gVGhleeKAmXZlIGFsc28gbW92ZWQgYG92c19sb2NrKClgIGFyb3VuZCB3aXRoaW4gdGhlIGNvbW1hbmQgaGFuZGxpbmcgZnVuY3Rpb25zOiBgb3ZzX2N0X2xpbWl0X2NtZF9zZXRgLCBgb3ZzX2N0X2xpbWl0X2NtZF9kZWxgLCBhbmQgYG92c19jdF9saW1pdF9jbWRfZ2V0YC4gVGhhdCdzIGludGVyZXN0aW5nLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkuXG5cblRoZXJlJ3MgYSBwb3RlbnRpYWwgbWVtb3J5IGxlYWsgb3IgaW5pdGlhbGl6YXRpb24gaXNzdWUgYmVpbmcgYWRkcmVzc2VkIGluIGBvdnNfY3RfbGltaXRfaW5pdGAuIEdvb2QgY2F0Y2g7IHRoYXQncyB0aGUga2luZCBvZiB0aGluZyB0aGF0IGNhbiBiaXRlIHlvdSBsYXRlci4gTG9va3MgbGlrZSB0aGV5J3JlIHVzaW5nIGEgbG9jYWwgcG9pbnRlciBiZWZvcmUgYXNzaWduaW5nIGl0LCB3aGljaCBtaWdodCBiZSB0aGUgZml4LlxuXG5GdW5jdGlvbmFsbHksIHRoaXMgaXMgYSBjaGFuZ2UgdG8gdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgbGltaXQgbG9naWMgd2l0aGluIE9wZW4gdlN3aXRjaC4gR2l2ZW4gdGhlIFJDVSBjaGFuZ2VzLCB0aGUgbG9jayBtb3ZlbWVudHMsIGFuZCB0aGUgbWVtb3J5IGZpeCwgSSdkIHNheSB0aGlzIHBhdGNoIHNjcmVhbXMgXCJuZWVkcyBmdXp6aW5nLlwiIExldCdzIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIHRvIHRhcmdldC5cblxuQmFzZWQgb24gdGhlIGNvZGUgY2hhbmdlcyBhbmQgdGhlIG92ZXJhbGwgaW50ZW50LCB0aGUgZnVuY3Rpb25zIEkgbmVlZCB0byBmb2N1cyBvbiBhcmU6XG5cbiogICBgb3ZzX2N0X2NoZWNrX2xpbWl0YCDigJMgQ29yZSBsaW1pdCBjaGVja2luZ1xuKiAgIGBvdnNfY3RfbGltaXRfaW5pdGAg4oCTIFRoZSBpbml0IGZ1bmN0aW9uLlxuKiAgIGBvdnNfY3RfbGltaXRfZXhpdGAg4oCTIFRoZSBleGl0IGZ1bmN0aW9uLCBlcXVhbGx5IGltcG9ydGFudC5cbiogICBgb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0YCDigJMgU2V0dGluZyB6b25lIGxpbWl0c1xuKiAgIGBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXRgIOKAkyBEZWxldGluZyB6b25lIGxpbWl0cy5cbiogICBgb3ZzX2N0X2xpbWl0X2NtZF9zZXRgIOKAkyBDb21tYW5kIHNldHRpbmdcbiogICBgb3ZzX2N0X2xpbWl0X2NtZF9kZWxgIOKAkyBDb21tYW5kIGRlbGV0aW5nXG4qICAgYG92c19jdF9saW1pdF9jbWRfZ2V0YCDigJMgQ29tbWFuZCBnZXR0aW5nXG5cbkkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIHRoZSByaWdodCBjb25maWd1cmF0aW9uIHRvIGV4ZXJjaXNlIHRoaXMgY29kZS4gTG9va2luZyBhdCB0aGUgY29kZSwgaXQncyBjbGVhciB0aGF0IGl0IHVzZXMgYCNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKWAsIHdoaWNoIG1lYW5zIGBORVRGSUxURVJfQ09OTkNPVU5UYCBtdXN0IGJlIGVuYWJsZWQuIFNpbmNlIGl0J3MgT3BlbiB2U3dpdGNoLCBvYnZpb3VzbHkgSSBuZWVkIGBPUEVOVlNXSVRDSGAsIGFuZCBJJ2xsIGRvdWJsZSBjaGVjayB0byBzZWUgaWYgYE9QRU5WU1dJVENIX0NPTk5UUkFDS2AgaXMgYWxzbyBhIHJlbGV2YW50IGNvbmZpZyBvcHRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxNzYsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxODo1MDo1NC4wMzQ0OTMxMDVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUwNzUxOTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBPUEVOVlNXSVRDSFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy01LVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjY6Y29uZmlnIE9QRU5WU1dJVENIXFxubmV0L29wZW52c3dpdGNoL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiT3BlbiB2U3dpdGNoXFxcIlxcbi0tXFxubmV0L29wZW52c3dpdGNoL0tjb25maWctNDMtXFxubmV0L29wZW52c3dpdGNoL0tjb25maWc6NDQ6Y29uZmlnIE9QRU5WU1dJVENIX0dSRVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTQ1LVxcdHRyaXN0YXRlIFxcXCJPcGVuIHZTd2l0Y2ggR1JFIHR1bm5lbGluZyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L29wZW52c3dpdGNoL0tjb25maWctNTYtXFxubmV0L29wZW52c3dpdGNoL0tjb25maWc6NTc6Y29uZmlnIE9QRU5WU1dJVENIX1ZYTEFOXFxubmV0L29wZW52c3dpdGNoL0tjb25maWctNTgtXFx0dHJpc3RhdGUgXFxcIk9wZW4gdlN3aXRjaCBWWExBTiB0dW5uZWxpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTY4LVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjY5OmNvbmZpZyBPUEVOVlNXSVRDSF9HRU5FVkVcXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy03MC1cXHR0cmlzdGF0ZSBcXFwiT3BlbiB2U3dpdGNoIEdlbmV2ZSB0dW5uZWxpbmcgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTg6NTA6NTQuMTg1MjUyMTJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzA2MTMxODQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBsaWtlIHlvdTpcblxuKipDaGVja2luZyBmb3IgdGhlIE9QRU5WU1dJVENIX0NPTlRSQUNLIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIGJlZm9yZSBkaXZpbmcgaW50byBhbnkgY29tcGxleCB0cm91Ymxlc2hvb3Rpbmcgb3IgY29uZmlndXJhdGlvbiBjaGFuZ2VzLCBsZXQncyBlc3RhYmxpc2ggYSBiYXNlbGluZS4gSSBuZWVkIHRvIHF1aWNrbHkgY29uZmlybSB3aGV0aGVyIHRoZSBgT1BFTlZTV0lUQ0hfQ09OVFJBQ0tgIGNvbmZpZ3VyYXRpb24gaXMgZXZlbiBwcmVzZW50LiBJdOKAmXMgYSBwcmV0dHkgZnVuZGFtZW50YWwgc2V0dGluZywgYW5kIGl0cyBhYnNlbmNlIGNvdWxkIGltbWVkaWF0ZWx5IGV4cGxhaW4gc29tZSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggY29ubmVjdGlvbiB0cmFja2luZyBhbmQsIGJ5IGV4dGVuc2lvbiwgbmV0d29yayBwZXJmb3JtYW5jZSBvciBzZWN1cml0eSB3aXRoaW4gdGhlIE9wZW4gdlN3aXRjaCBlbnZpcm9ubWVudC4gQSBxdWljayBjaGVjayBoZXJlIHNhdmVzIHRpbWUgaW4gdGhlIGxvbmcgcnVuOyBubyBwb2ludCBwdXJzdWluZyBvdGhlciBhdmVudWVzIGlmIGEgYmFzaWMgcHJlcmVxdWlzaXRlIGlzbid0IG1ldC4gSSdsbCBuZWVkIHRvIGtub3cgd2hldGhlciBJIG5lZWQgdG8gZW5hYmxlIHRoaXMsIG9yIGlmIGl0IGhhcyBhbHJlYWR5IGJlZW4gZW5hYmxlZCBhbmQgbmVlZHMgdG8gYmUgbG9va2VkIGF0IGluIG1vcmUgZGVwdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0MjksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxODo1MDo1Ny40OTEzODc4NFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODkxODc3MjQsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBPUEVOVlNXSVRDSF9DT05OVFJBQ0tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L29wZW52c3dpdGNoL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE4OjUwOjU3LjY4MDU4NDU4NFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5MjU1MDAxNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkludmVzdGlnYXRpbmcgQ29ubmVjdGlvbiBUcmFja2luZyBPcHRpb25zKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIHBpbnBvaW50IHdoZXJlIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGNvbmZpZ3VyYXRpb24gbGl2ZXMgd2l0aGluIHRoZSBPcGVuIHZTd2l0Y2ggYnVpbGQgc3lzdGVtLiBNeSBpbnN0aW5jdCBzYXlzIHRvIHN0YXJ0IHdpdGggYG5ldC9vcGVudnN3aXRjaC9LY29uZmlnYC4gVGhhdCdzIHRoZSBsb2dpY2FsIHBsYWNlIGZvciBidWlsZC10aW1lIG9wdGlvbnMgcmVsYXRlZCB0byBuZXR3b3JraW5nIGZlYXR1cmVzIHdpdGhpbiB0aGUga2VybmVsIG1vZHVsZSBzcGFjZS4gTm93LCB3aGF0IGFtIEkgbG9va2luZyBmb3Igc3BlY2lmaWNhbGx5PyBJJ20ga2V5aW5nIGluIG9uIHR3byBvcHRpb25zOiBgQ09OTlRSQUNLYCBhbmQgYE5FVEZJTFRFUmAuIFRoZXNlIGFyZSB0aGUgbW9zdCBsaWtlbHkgY2FuZGlkYXRlcyBmb3IgaW5mbHVlbmNpbmcgY29ubmVjdGlvbiB0cmFja2luZyBiZWhhdmlvciBvciBlbmFibGluZyBpbnRlZ3JhdGlvbiB3aXRoIE5ldGZpbHRlci4gR29pbmcgdG8gZGl2ZSBpbiBhbmQgc2VlIHdoYXQgdGhlIEtjb25maWcgaGFzIHRvIHNheS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjY2NCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE4OjUxOjAwLjYwNjA4NzAwNVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzkyMTg2MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTkVURklMVEVSXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9vcGVudnN3aXRjaC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9vcGVudnN3aXRjaC9LY29uZmlnPTY9Y29uZmlnIE9QRU5WU1dJVENIXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy0xMS1cXHRcXHRcXHRcXHQgICAgICghTkZfTkFUIHx8IE5GX05BVCkgXFx1MDAyNlxcdTAwMjYgXFxcXFxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjEyOlxcdFxcdFxcdFxcdCAgICAgKCFORVRGSUxURVJfQ09OTkNPVU5UIHx8IE5FVEZJTFRFUl9DT05OQ09VTlQpKSlcXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy0xMy1cXHRkZXBlbmRzIG9uIFBTQU1QTEUgfHwgIVBTQU1QTEVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTg6NTE6MDAuNzQ1MzExMDUxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkyNjUxNzMyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBPcGVuIHZTd2l0Y2ggYW5kIENvbm5lY3Rpb24gVHJhY2tpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBPUEVOVlNXSVRDSGAgbW9kdWxlIGFuZCBpdHMgY29ubmVjdGlvbiB0cmFja2luZyBjYXBhYmlsaXRpZXMuIEl0IHNlZW1zIHRoYXQgYE9QRU5WU1dJVENIYCAqZGVwZW5kcyogb24gYE5FVEZJTFRFUl9DT05OQ09VTlRgLCBidXQgdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jYCwgaXMgdXNpbmcgYSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlLCBgI2lmIElTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpYCwgdG8gY29udHJvbCBpdHMgaW5jbHVzaW9uLiBUaGlzIG1lYW5zIGl0ICpyZXF1aXJlcyogYm90aCBgT1BFTlZTV0lUQ0hgICphbmQqIGBORVRGSUxURVJfQ09OTkNPVU5UYCB0byBmdW5jdGlvbiBwcm9wZXJseSwgZXZlbiBpZiB0aGUgZGVwZW5kZW5jeSBpc24ndCBleHBsaWNpdGx5IHN0YXRlZCBhcyBhIGhhcmQgcmVxdWlyZW1lbnQuIEl0J3MgdXNpbmcgYENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UYCwgc28gaXQgcmVhbGx5IG5lZWRzIGl0IHRvIGJlIGVuYWJsZWQuXG5cbk15IG5leHQgc3RlcCBpcyB0byBwZXJmb3JtIGEgdGhvcm91Z2ggY29kZSByZXZpZXcgdG8gY2hlY2sgaWYgYE9QRU5WU1dJVENIX0NPTlRSQUNLYCBpcyBleHBsaWNpdGx5IHVzZWQgYW55d2hlcmUgZWxzZSB3aXRoaW4gdGhlIGNvZGViYXNlLiBJIG5lZWQgdG8gZ2V0IHRoZSBiaWdnZXIgcGljdHVyZSBvZiBob3cgdGhhdCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGltcGFjdHMgdGhlIGJlaGF2aW9yIG9mIHRoZSBwcm9ncmFtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTcxLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTg6NTE6MDQuNjcxODMyNTIyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTI5NDY0NTMwLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJPUEVOVlNXSVRDSF9DT05UUkFDS1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE4OjUxOjA4LjYwMTMwODgwMloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDgxMjcyMDA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBDb25uZWN0aW9uIFRyYWNraW5nIExpbWl0cyBpbiBPcGVuIHZTd2l0Y2gqKlxuXG5BbHJpZ2h0LCBzbyB0aGUga2V5IGNvbmZpZ3VyYXRpb25zIHRvIGZvY3VzIG9uIGhlcmUgYXJlIGRlZmluaXRlbHkgYE5FVEZJTFRFUl9DT05OQ09VTlRgIGFuZCBgT1BFTlZTV0lUQ0hgLiBUaGF0IGZlZWxzIGxpa2UgYSBzb2xpZCBzdGFydGluZyBwb2ludC4gTm93LCBsZXQncyBkcmlsbCBkb3duIGludG8gdGhlIGNvcmUgZnVuY3Rpb25zIHRoYXQgaGFuZGxlIHRoaXMgY29ubmVjdGlvbiB0cmFja2luZyBsaW1pdCBmdW5jdGlvbmFsaXR5LiBNeSBmb2N1cyBuZWVkcyB0byBiZSBvbjpcblxuKiAgIGBvdnNfY3RfbGltaXRfY21kX3NldGBcbiogICBgb3ZzX2N0X2xpbWl0X2NtZF9kZWxgXG4qICAgYG92c19jdF9saW1pdF9jbWRfZ2V0YFxuKiAgIGBvdnNfY3RfY2hlY2tfbGltaXRgXG5cblRob3NlIHNlZW0gbGlrZSB0aGUgbG9naWNhbCBwb2ludHMgb2YgaW50ZXJhY3Rpb24gd2l0aCB0aGUgc3lzdGVtLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgYG92c19jdF9saW1pdF9jbWRfc2V0YCBpcyByZWFjaGFibGUsIGFzIGEgbmV0bGluayBjb21tYW5kIGhhbmRsZXIuIEl0J3MgYSBrZXkgcGFydCBvZiB0aGUgQVBJLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MzE0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE4OjUxOjEyLjA4MjU4MzUyN1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI4Mzk4MjczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm92c19jdF9saW1pdF9jbWRfc2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9vcGVudnN3aXRjaC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTE4MjI9c3RhdGljIGludCBvdnNfY3RfbGltaXRfZ2V0X2FsbF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xODQ5LVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzoxODUwOnN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTg1MS17XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9MTk3OD1zdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc21hbGxfb3BzIGN0X2xpbWl0X2dlbmxfb3BzW10gPSB7XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTk4My1cXHRcXHRcXHRcXHRcXHQgICAgICAgKi9cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6MTk4NDpcXHRcXHQuZG9pdCA9IG92c19jdF9saW1pdF9jbWRfc2V0LFxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xOTg1LVxcdH0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE4OjUxOjEyLjYxMDk5MDI2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MzQ4NDcxNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBwcm9tcHQ6XG5cbioqQW5hbHl6aW5nIHRoZSBSZXF1ZXN0OiBOZXRsaW5rIENvbW1hbmQgSGFuZGxlciBDb250ZXh0KipcblxuT2theSwgc28gdGhlIHByb21wdCBpbmRpY2F0ZXMgd2UncmUgZGVhbGluZyB3aXRoIGEgbmV0bGluayBjb21tYW5kIGhhbmRsZXIuIFRoYXQncyBhIGtleSBwaWVjZSBvZiBpbmZvcm1hdGlvbi4gVGhpcyBzdWdnZXN0cyB3ZSdyZSB3b3JraW5nIGF0IGEgbG93IGxldmVsLCBwcm9iYWJseSB3aXRoaW4gYSBrZXJuZWwgY29udGV4dCBvciBhIHN5c3RlbSBwcm9ncmFtIHRoYXQgaW50ZXJhY3RzIGRpcmVjdGx5IHdpdGggdGhlIGtlcm5lbCdzIG5ldGxpbmsgaW50ZXJmYWNlLiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgYXMgSSBpbnRlcnByZXQgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbi4gTmV0bGluayBpcyBhbGwgYWJvdXQgZWZmaWNpZW50IGludGVyLXByb2Nlc3MgY29tbXVuaWNhdGlvbiwgZXNwZWNpYWxseSBmb3IgbmV0d29yayBjb25maWd1cmF0aW9uIGFuZCBjb250cm9sLlxuXG5OZXh0LCBpdCBwb2ludHMgdG93YXJkcyBgb3ZzX2N0X2NoZWNrX2xpbWl0YC4gVGhlIGluY2x1c2lvbiBvZiBgb3ZzX2AgaW1wbGllcyB0aGlzIGlzIHJlbGF0ZWQgdG8gT3BlbiB2U3dpdGNoLCB3aGljaCBpcyBmdXJ0aGVyIGhlbHBmdWwgY29udGV4dC4gVGhlIGZ1bmN0aW9uIG5hbWUgYG92c19jdF9jaGVja19saW1pdGAgc3Ryb25nbHkgc3VnZ2VzdHMgd2UgYXJlIGRlYWxpbmcgd2l0aCBjb25uZWN0aW9uIHRyYWNraW5nLCBsaWtlbHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIE9wZW4gdlN3aXRjaCdzIGZsb3cgdGFibGUgbWFuYWdlbWVudC4gQW5kIFwibGltaXRcIiBpbXBsaWVzIHRoYXQgZnVuY3Rpb24gd291bGQgYmUgcmVsYXRlZCB0byByYXRlIGxpbWl0aW5nIG9yIHJlc291cmNlIGV4aGF1c3Rpb24gcHJvdGVjdGlvbi4gVGhpcyBzcGVjaWZpYyBmdW5jdGlvbiBpcyBhIGNvbnRyb2wgcGxhbmUgZnVuY3Rpb24sIHJlbGF0ZWQgdG8gcHJvY2Vzc2luZyBpbnN0cnVjdGlvbnMgZm9yIHRoZSBkYXRhcGF0aC4gSSB3YW50IHRvIGxvb2sgYXQgaXRzIHVzZSwgcGFyYW1ldGVycyBhbmQgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTAzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTg6NTE6MTYuMzQ1ODQwMzQ3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQ1NTc5NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib3ZzX2N0X2NoZWNrX2xpbWl0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9vcGVudnN3aXRjaC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTkxNz1zdGF0aWMgdTMyIGN0X2xpbWl0X2dldChjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8sIHUxNiB6b25lKVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTkzMC1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6OTMxOnN0YXRpYyBpbnQgb3ZzX2N0X2NoZWNrX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtOTMyLVxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9OTYxPXN0YXRpYyBpbnQgb3ZzX2N0X2NvbW1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5LFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTk4MC1cXHRcXHRpZiAoIW5mX2N0X2lzX2NvbmZpcm1lZChjdCkpIHtcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6OTgxOlxcdFxcdFxcdGVyciA9IG92c19jdF9jaGVja19saW1pdChuZXQsIHNrYiwgaW5mbyk7XFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTk4Mi1cXHRcXHRcXHRpZiAoZXJyKSB7XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9MTYyMz1zdGF0aWMgdm9pZCBvdnNfY3RfbGltaXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0KVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTE2MjktXFx0XFx0XFx0XFx0ICAgbG9ja2RlcF9vdnNsX2lzX2hlbGQoKSk7XFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjE2MzA6XFx0Lyogb3ZzX2N0X2NoZWNrX2xpbWl0KCkgYWNjZXNzZXMgdGhlIGluZm8gdW5kZXIgdGhlIGRhdGFwYXRoIFJDVSBsb2NrLiAqL1xcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xNjMxLVxcdHN5bmNocm9uaXplX3JjdSgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxODo1MToxNi41MTA0MDQ5NDJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjkzNzYxMjEyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHVuZGVyc3RhbmRpbmcsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIGlmIGl0IHdlcmUgbXkgb3duIHRob3VnaHQgcHJvY2VzczpcblxuKipGaXhpbmcgdGhlIFJDVSBIYW5kbGluZyBhbmQgTG9ja2luZyBmb3IgY3RfbGltaXRfaW5mbyBpbiBPcGVuIHZTd2l0Y2ggQ29ubmVjdGlvbiBUcmFja2luZyoqXG5cblJpZ2h0LCBzbyB0aGlzIHBhdGNoIGlzIGNydWNpYWwgZm9yIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIChjdCkgbW9kdWxlIHdpdGhpbiBPcGVuIHZTd2l0Y2gsIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgdGhlIGBjdF9saW1pdF9pbmZvYCBkYXRhIHN0cnVjdHVyZS4gSXQgbG9va3MgbGlrZSB0aGUgaXNzdWUgc3RlbXMgZnJvbSBwcm9ibGVtcyB3aXRoIFJlYWQtQ29weS1VcGRhdGUgKFJDVSkgc3luY2hyb25pemF0aW9uIGFuZCByZWxhdGVkIGxvY2tpbmcgbWVjaGFuaXNtcy4gVGhpcyBpcyBjcml0aWNhbCBmb3IgYW55IGNvbmN1cnJlbnQgZGF0YSBzdHJ1Y3R1cmVzLCBzbyBhIGJ1ZyB0aGVyZSBtZWFucyBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBkYXRhIGNvcnJ1cHRpb24sIG9yIGV2ZW4ga2VybmVsIHBhbmljcy4gRnJvbSB0aGUgZGVzY3JpcHRpb24sIHRoZSBmaXggaXMgcHJvYmFibHkgZXNzZW50aWFsIHRvIGVuc3VyZSBkYXRhIGNvbnNpc3RlbmN5IHdoZW4gbXVsdGlwbGUgdGhyZWFkcyBvciBjb3JlcyBhcmUgb3BlcmF0aW5nIG9uIHRoZXNlIGNvbm5lY3Rpb24gbGltaXRzIHNpbXVsdGFuZW91c2x5LlxuXG5UaGUgY29uZmlndXJhdGlvbnMgaW52b2x2ZWQgYXJlIGBPUEVOVlNXSVRDSGAgYW5kIGBORVRGSUxURVJfQ09OTkNPVU5UYCwgd2hpY2gsIG9mIGNvdXJzZSwgbWVhbnMgdGhpcyBpcyBzcGVjaWZpY2FsbHkgcmVsZXZhbnQgd2hlbiBPcGVuIHZTd2l0Y2ggaXMgY29tcGlsZWQgYW5kIGRlcGxveWVkIHdpdGggY29ubmVjdGlvbiBjb3VudCBmdW5jdGlvbmFsaXR5IGVuYWJsZWQg4oCTIGEgY29tbW9uIHNjZW5hcmlvLCBvYnZpb3VzbHkuXG5cbk5vdywgZm9jdXNpbmcgb24gdGhlIGNvcmUgZnVuY3Rpb25zIG1lbnRpb25lZCwgdGhleSBhcmUgdGhlIGtleSB0byBteSBhbmFseXNpczogYG92c19jdF9saW1pdF9jbWRfc2V0YCwgYG92c19jdF9saW1pdF9jbWRfZGVsYCwgYG92c19jdF9saW1pdF9jbWRfZ2V0YCwgYG92c19jdF9jaGVja19saW1pdGAsIGBvdnNfY3RfbGltaXRfaW5pdGAsIGFuZCBgb3ZzX2N0X2xpbWl0X2V4aXRgLiBUaGVzZSByZXByZXNlbnQgdGhlIHByaW1hcnkgb3BlcmF0aW9uczogc2V0dGluZywgZGVsZXRpbmcsIGFuZCBnZXR0aW5nIGxpbWl0IGNvbmZpZ3VyYXRpb25zLCBjaGVja2luZyB3aGV0aGVyIGxpbWl0cyBhcmUgZXhjZWVkZWQsIGFuZCBpbml0aWFsaXppbmcgYW5kIGV4aXRpbmcgdGhlIGxpbWl0LXJlbGF0ZWQgcmVzb3VyY2VzLiBUaGUgZml4IG11c3QgYmUgd29ya2luZyB0byBhZGRyZXNzIHJhY2UgY29uZGl0aW9ucyB0aGF0IGFyZSBsaWtlbHkgdG8gb2NjdXIgaW4gYWxsIG9mIHRoZXNlIGZ1bmN0aW9ucy4gSeKAmWxsIG5lZWQgdG8gZGVsdmUgaW50byB0aGUgY29kZSB0byByZWFsbHkgdW5kZXJzdGFuZCB0aGUgb3JpZ2luYWwgZmxhdyBhbmQgdGhlIHByZWNpc2UgbG9ja2luZyBzdHJhdGVneSBpbXBsZW1lbnRlZCB0byByZXNvbHZlIGl0LlxuXG5GaW5hbGx5LCBJ4oCZbGwgbmVlZCB0byBwcm9jZXNzIHRoZSByZXN1bHRzIG9mIHRlc3RpbmcgdGhpcyBwYXRjaCB1c2luZyBgc2V0LXJlc3VsdHNgLiBIb3BlZnVsbHksIGl0J3MgY29tcHJlaGVuc2l2ZSBlbm91Z2ggdG8gdmFsaWRhdGUgdGhlIGxvY2tpbmcgaW1wcm92ZW1lbnRzIGFuZCBydWxlIG91dCBwb3RlbnRpYWwgcmVncmVzc2lvbnMuIFRoaXMgbWVhbnMgSSdtIGV4cGVjdGluZyBkZXRhaWxlZCBvdXRwdXQgcmVnYXJkaW5nIGxvY2sgY29udGVudGlvbiwgUkNVIGdyYWNlIHBlcmlvZCB1c2FnZSwgYW5kIGFueSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1wYWN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODYyMSwiT3V0cHV0VG9rZW5zIjoxNjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTg6NTE6MjMuNDQ4MDIwMzgxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM0ODM3MDQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJPUEVOVlNXSVRDSFwiLFxuICAgIFwiTkVURklMVEVSX0NPTk5DT1VOVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm92c19jdF9saW1pdF9jbWRfc2V0XCIsXG4gICAgXCJvdnNfY3RfbGltaXRfY21kX2RlbFwiLFxuICAgIFwib3ZzX2N0X2xpbWl0X2NtZF9nZXRcIixcbiAgICBcIm92c19jdF9jaGVja19saW1pdFwiLFxuICAgIFwib3ZzX2N0X2xpbWl0X2luaXRcIixcbiAgICBcIm92c19jdF9saW1pdF9leGl0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgUkNVIHN5bmNocm9uaXphdGlvbiBhbmQgbG9ja2luZyBpc3N1ZXMgYXJvdW5kIHRoZSBPcGVuIHZTd2l0Y2ggY29ubmVjdGlvbiB0cmFja2luZyBsaW1pdCBjb25maWd1cmF0aW9uLiBJdCBtb2RpZmllcyBuZXRsaW5rIGNvbW1hbmQgaGFuZGxlcnMgYW5kIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGxpbWl0IGNoZWNrIGZ1bmN0aW9uLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGVzZSBjb21tYW5kIGhhbmRsZXJzIGFuZCB0aGUgZGF0YXBhdGggY29ubmVjdGlvbiB0cmFja2luZyBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJPUEVOVlNXSVRDSFwiLFxuICAgIFwiTkVURklMVEVSX0NPTk5DT1VOVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm92c19jdF9saW1pdF9jbWRfc2V0XCIsXG4gICAgXCJvdnNfY3RfbGltaXRfY21kX2RlbFwiLFxuICAgIFwib3ZzX2N0X2xpbWl0X2NtZF9nZXRcIixcbiAgICBcIm92c19jdF9jaGVja19saW1pdFwiLFxuICAgIFwib3ZzX2N0X2xpbWl0X2luaXRcIixcbiAgICBcIm92c19jdF9saW1pdF9leGl0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgUkNVIHN5bmNocm9uaXphdGlvbiBhbmQgbG9ja2luZyBpc3N1ZXMgYXJvdW5kIHRoZSBPcGVuIHZTd2l0Y2ggY29ubmVjdGlvbiB0cmFja2luZyBsaW1pdCBjb25maWd1cmF0aW9uLiBJdCBtb2RpZmllcyBuZXRsaW5rIGNvbW1hbmQgaGFuZGxlcnMgYW5kIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGxpbWl0IGNoZWNrIGZ1bmN0aW9uLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGVzZSBjb21tYW5kIGhhbmRsZXJzIGFuZCB0aGUgZGF0YXBhdGggY29ubmVjdGlvbiB0cmFja2luZyBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowc65cf[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-23 18:20:57 +0000 UTC FinishedAt: 2026-07-23 18:51:24 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OPENVSWITCH", "NETFILTER_CONNCOUNT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OPENVSWITCH", "NETFILTER_CONNCOUNT" ], "series_id": "1fc381ef-248f-4c63-a1cf-a90df8266083" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ovs_ct_limit_cmd_set", "ovs_ct_limit_cmd_del", "ovs_ct_limit_cmd_get", "ovs_ct_check_limit", "ovs_ct_limit_init", "ovs_ct_limit_exit" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE4OjUwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09QRU5WU1dJVENIJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9DT05OQ09VTlQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtvdnNfY3RfbGltaXRfY21kX3NldCYjMzQ7LAogICAgJiMzNDtvdnNfY3RfbGltaXRfY21kX2RlbCYjMzQ7LAogICAgJiMzNDtvdnNfY3RfbGltaXRfY21kX2dldCYjMzQ7LAogICAgJiMzNDtvdnNfY3RfY2hlY2tfbGltaXQmIzM0OywKICAgICYjMzQ7b3ZzX2N0X2xpbWl0X2luaXQmIzM0OywKICAgICYjMzQ7b3ZzX2N0X2xpbWl0X2V4aXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgUkNVIHN5bmNocm9uaXphdGlvbiBhbmQgbG9ja2luZyBpc3N1ZXMgYXJvdW5kIHRoZSBPcGVuIHZTd2l0Y2ggY29ubmVjdGlvbiB0cmFja2luZyBsaW1pdCBjb25maWd1cmF0aW9uLiBJdCBtb2RpZmllcyBuZXRsaW5rIGNvbW1hbmQgaGFuZGxlcnMgYW5kIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGxpbWl0IGNoZWNrIGZ1bmN0aW9uLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGVzZSBjb21tYW5kIGhhbmRsZXJzIGFuZCB0aGUgZGF0YXBhdGggY29ubmVjdGlvbiB0cmFja2luZyBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxODo1MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGEwOWVmM2NkYjQ1MTY5YjdiNjZlNmFmYTgxMTY2MTQzNzk5YjQwOGZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAyMyAxODo1MDo0NCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMgYi9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmNcbmluZGV4IDk1Njk3ZDRlMTZlNjRlLi41YzlhNjA3ZDI3YTdiNiAxMDA2NDRcbi0tLSBhL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jXG5AQCAtOTMzLDEwICYjNDM7OTMzLDE0IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2NoZWNrX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3Qgb3ZzX2Nvbm50cmFja19pbmZvICppbmZvKVxuIHtcbiBcdHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMobmV0LCBvdnNfbmV0X2lkKTtcbi1cdGNvbnN0IHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbyA9IG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbztcbiYjNDM7XHRjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm87XG4gXHR1MzIgcGVyX3pvbmVfbGltaXQsIGNvbm5lY3Rpb25zO1xuIFx0dTMyIGNvbm5jb3VudF9rZXk7XG4gXG4mIzQzO1x0Y3RfbGltaXRfaW5mbyA9IHJjdV9kZXJlZmVyZW5jZShvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pO1xuJiM0MztcdGlmICghY3RfbGltaXRfaW5mbylcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiBcdGNvbm5jb3VudF9rZXkgPSBpbmZvLVx1MDAzZXpvbmUuaWQ7XG4gXG4gXHRwZXJfem9uZV9saW1pdCA9IGN0X2xpbWl0X2dldChjdF9saW1pdF9pbmZvLCBpbmZvLVx1MDAzZXpvbmUuaWQpO1xuQEAgLTE1ODUsNDAgJiM0MzsxNTg5LDQ3IEBAIHN0YXRpYyB2b2lkIF9fb3ZzX2N0X2ZyZWVfYWN0aW9uKHN0cnVjdCBvdnNfY29ubnRyYWNrX2luZm8gKmN0X2luZm8pXG4gI2lmXHRJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKVxuIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2luaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldClcbiB7XG4mIzQzO1x0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvO1xuIFx0aW50IGksIGVycjtcbiBcbi1cdG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyA9IGttYWxsb2Nfb2JqKCpvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pO1xuLVx0aWYgKCFvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pXG4mIzQzO1x0aW5mbyA9IGttYWxsb2Nfb2JqKCppbmZvKTtcbiYjNDM7XHRpZiAoIWluZm8pXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuLVx0b3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvLVx1MDAzZWRlZmF1bHRfbGltaXQgPSBPVlNfQ1RfTElNSVRfREVGQVVMVDtcbi1cdG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VsaW1pdHMgPVxuJiM0MztcdGluZm8tXHUwMDNlZGVmYXVsdF9saW1pdCA9IE9WU19DVF9MSU1JVF9ERUZBVUxUO1xuJiM0MztcdGluZm8tXHUwMDNlbGltaXRzID1cbiBcdFx0a21hbGxvY19vYmpzKHN0cnVjdCBobGlzdF9oZWFkLCBDVF9MSU1JVF9IQVNIX0JVQ0tFVFMpO1xuLVx0aWYgKCFvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8tXHUwMDNlbGltaXRzKSB7XG4tXHRcdGtmcmVlKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyk7XG4mIzQzO1x0aWYgKCFpbmZvLVx1MDAzZWxpbWl0cykge1xuJiM0MztcdFx0a2ZyZWUoaW5mbyk7XG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0fVxuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQ1RfTElNSVRfSEFTSF9CVUNLRVRTOyBpJiM0MzsmIzQzOylcbi1cdFx0SU5JVF9ITElTVF9IRUFEKFx1MDAyNm92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VsaW1pdHNbaV0pO1xuJiM0MztcdFx0SU5JVF9ITElTVF9IRUFEKFx1MDAyNmluZm8tXHUwMDNlbGltaXRzW2ldKTtcbiBcbi1cdG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VkYXRhID0gbmZfY29ubmNvdW50X2luaXQobmV0LCBzaXplb2YodTMyKSk7XG4mIzQzO1x0aW5mby1cdTAwM2VkYXRhID0gbmZfY29ubmNvdW50X2luaXQobmV0LCBzaXplb2YodTMyKSk7XG4gXG4tXHRpZiAoSVNfRVJSKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VkYXRhKSkge1xuLVx0XHRlcnIgPSBQVFJfRVJSKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VkYXRhKTtcbi1cdFx0a2ZyZWUob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvLVx1MDAzZWxpbWl0cyk7XG4tXHRcdGtmcmVlKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyk7XG4mIzQzO1x0aWYgKElTX0VSUihpbmZvLVx1MDAzZWRhdGEpKSB7XG4mIzQzO1x0XHRlcnIgPSBQVFJfRVJSKGluZm8tXHUwMDNlZGF0YSk7XG4mIzQzO1x0XHRrZnJlZShpbmZvLVx1MDAzZWxpbWl0cyk7XG4mIzQzO1x0XHRrZnJlZShpbmZvKTtcbiBcdFx0cHJfZXJyKFwmIzM0O29wZW52c3dpdGNoOiBmYWlsZWQgdG8gaW5pdCBuZl9jb25uY291bnQgJWRcXG5cJiMzNDssIGVycik7XG4gXHRcdHJldHVybiBlcnI7XG4gXHR9XG4mIzQzO1x0cmN1X2Fzc2lnbl9wb2ludGVyKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbywgaW5mbyk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgb3ZzX2N0X2xpbWl0X2V4aXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldClcbiB7XG4tXHRjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8gPSBvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm87XG4mIzQzO1x0Y29uc3Qgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvO1xuIFx0aW50IGk7XG4gXG4mIzQzO1x0aW5mbyA9IHJjdV9yZXBsYWNlX3BvaW50ZXIob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvLCBOVUxMLFxuJiM0MztcdFx0XHRcdCAgIGxvY2tkZXBfb3ZzbF9pc19oZWxkKCkpO1xuJiM0MztcdC8qIG92c19jdF9jaGVja19saW1pdCgpIGFjY2Vzc2VzIHRoZSBpbmZvIHVuZGVyIHRoZSBkYXRhcGF0aCBSQ1UgbG9jay4gKi9cbiYjNDM7XHRzeW5jaHJvbml6ZV9yY3UoKTtcbiYjNDM7XG4gXHRuZl9jb25uY291bnRfZGVzdHJveShuZXQsIGluZm8tXHUwMDNlZGF0YSk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBDVF9MSU1JVF9IQVNIX0JVQ0tFVFM7ICYjNDM7JiM0MztpKSB7XG4gXHRcdHN0cnVjdCBobGlzdF9oZWFkICpoZWFkID0gXHUwMDI2aW5mby1cdTAwM2VsaW1pdHNbaV07XG5AQCAtMTY3OCw5ICYjNDM7MTY4OSw3IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LFxuIFx0d2hpbGUgKHJlbSBcdTAwM2U9IHNpemVvZigqem9uZV9saW1pdCkpIHtcbiBcdFx0aWYgKHVubGlrZWx5KHpvbmVfbGltaXQtXHUwMDNlem9uZV9pZCA9PVxuIFx0XHRcdFx0T1ZTX1pPTkVfTElNSVRfREVGQVVMVF9aT05FKSkge1xuLVx0XHRcdG92c19sb2NrKCk7XG4gXHRcdFx0aW5mby1cdTAwM2VkZWZhdWx0X2xpbWl0ID0gem9uZV9saW1pdC1cdTAwM2VsaW1pdDtcbi1cdFx0XHRvdnNfdW5sb2NrKCk7XG4gXHRcdH0gZWxzZSBpZiAodW5saWtlbHkoIWNoZWNrX3pvbmVfaWQoXG4gXHRcdFx0XHR6b25lX2xpbWl0LVx1MDAzZXpvbmVfaWQsIFx1MDAyNnpvbmUpKSkge1xuIFx0XHRcdE9WU19OTEVSUih0cnVlLCBcJiMzNDt6b25lIGlkIGlzIG91dCBvZiByYW5nZVwmIzM0Oyk7XG5AQCAtMTY5NCw5ICYjNDM7MTcwMyw3IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LFxuIFx0XHRcdGN0X2xpbWl0LVx1MDAzZXpvbmUgPSB6b25lO1xuIFx0XHRcdGN0X2xpbWl0LVx1MDAzZWxpbWl0ID0gem9uZV9saW1pdC1cdTAwM2VsaW1pdDtcbiBcbi1cdFx0XHRvdnNfbG9jaygpO1xuIFx0XHRcdGN0X2xpbWl0X3NldChpbmZvLCBjdF9saW1pdCk7XG4tXHRcdFx0b3ZzX3VubG9jaygpO1xuIFx0XHR9XG4gXHRcdHJlbSAtPSBOTEFfQUxJR04oc2l6ZW9mKCp6b25lX2xpbWl0KSk7XG4gXHRcdHpvbmVfbGltaXQgPSAoc3RydWN0IG92c196b25lX2xpbWl0ICopKCh1OCAqKXpvbmVfbGltaXQgJiM0MztcbkBAIC0xNzIyLDE2ICYjNDM7MTcyOSwxMiBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcbiBcdHdoaWxlIChyZW0gXHUwMDNlPSBzaXplb2YoKnpvbmVfbGltaXQpKSB7XG4gXHRcdGlmICh1bmxpa2VseSh6b25lX2xpbWl0LVx1MDAzZXpvbmVfaWQgPT1cbiBcdFx0XHRcdE9WU19aT05FX0xJTUlUX0RFRkFVTFRfWk9ORSkpIHtcbi1cdFx0XHRvdnNfbG9jaygpO1xuIFx0XHRcdGluZm8tXHUwMDNlZGVmYXVsdF9saW1pdCA9IE9WU19DVF9MSU1JVF9ERUZBVUxUO1xuLVx0XHRcdG92c191bmxvY2soKTtcbiBcdFx0fSBlbHNlIGlmICh1bmxpa2VseSghY2hlY2tfem9uZV9pZChcbiBcdFx0XHRcdHpvbmVfbGltaXQtXHUwMDNlem9uZV9pZCwgXHUwMDI2em9uZSkpKSB7XG4gXHRcdFx0T1ZTX05MRVJSKHRydWUsIFwmIzM0O3pvbmUgaWQgaXMgb3V0IG9mIHJhbmdlXCYjMzQ7KTtcbiBcdFx0fSBlbHNlIHtcbi1cdFx0XHRvdnNfbG9jaygpO1xuIFx0XHRcdGN0X2xpbWl0X2RlbChpbmZvLCB6b25lKTtcbi1cdFx0XHRvdnNfdW5sb2NrKCk7XG4gXHRcdH1cbiBcdFx0cmVtIC09IE5MQV9BTElHTihzaXplb2YoKnpvbmVfbGltaXQpKTtcbiBcdFx0em9uZV9saW1pdCA9IChzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXQgKikoKHU4ICopem9uZV9saW1pdCAmIzQzO1xuQEAgLTE4NTAsNyAmIzQzOzE4NTMsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfc2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqcmVwbHk7XG4gXHRzdHJ1Y3Qgb3ZzX2hlYWRlciAqb3ZzX3JlcGx5X2hlYWRlcjtcbiBcdHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMoc29ja19uZXQoc2tiLVx1MDAzZXNrKSwgb3ZzX25ldF9pZCk7XG4tXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm8gPSBvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm87XG4mIzQzO1x0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvO1xuIFx0aW50IGVycjtcbiBcbiBcdHJlcGx5ID0gb3ZzX2N0X2xpbWl0X2NtZF9yZXBseV9zdGFydChpbmZvLCBPVlNfQ1RfTElNSVRfQ01EX1NFVCxcbkBAIC0xODYzLDE2ICYjNDM7MTg2NiwyMiBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfc2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRcdGdvdG8gZXhpdF9lcnI7XG4gXHR9XG4gXG4mIzQzO1x0b3ZzX2xvY2soKTtcbiYjNDM7XHRjdF9saW1pdF9pbmZvID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8sXG4mIzQzO1x0XHRcdFx0XHRcdCAgbG9ja2RlcF9vdnNsX2lzX2hlbGQoKSk7XG4gXHRlcnIgPSBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSxcbiBcdFx0XHRcdFx0ICBjdF9saW1pdF9pbmZvKTtcbiBcdGlmIChlcnIpXG4tXHRcdGdvdG8gZXhpdF9lcnI7XG4mIzQzO1x0XHRnb3RvIGV4aXRfdW5sb2NrO1xuIFxuIFx0c3RhdGljX2JyYW5jaF9lbmFibGUoXHUwMDI2b3ZzX2N0X2xpbWl0X2VuYWJsZWQpO1xuIFxuIFx0Z2VubG1zZ19lbmQocmVwbHksIG92c19yZXBseV9oZWFkZXIpO1xuJiM0MztcdG92c191bmxvY2soKTtcbiBcdHJldHVybiBnZW5sbXNnX3JlcGx5KHJlcGx5LCBpbmZvKTtcbiBcbiYjNDM7ZXhpdF91bmxvY2s6XG4mIzQzO1x0b3ZzX3VubG9jaygpO1xuIGV4aXRfZXJyOlxuIFx0bmxtc2dfZnJlZShyZXBseSk7XG4gXHRyZXR1cm4gZXJyO1xuQEAgLTE4ODQsNyAmIzQzOzE4OTMsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfZGVsKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqcmVwbHk7XG4gXHRzdHJ1Y3Qgb3ZzX2hlYWRlciAqb3ZzX3JlcGx5X2hlYWRlcjtcbiBcdHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMoc29ja19uZXQoc2tiLVx1MDAzZXNrKSwgb3ZzX25ldF9pZCk7XG4tXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm8gPSBvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm87XG4mIzQzO1x0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvO1xuIFx0aW50IGVycjtcbiBcbiBcdHJlcGx5ID0gb3ZzX2N0X2xpbWl0X2NtZF9yZXBseV9zdGFydChpbmZvLCBPVlNfQ1RfTElNSVRfQ01EX0RFTCxcbkBAIC0xODk3LDE0ICYjNDM7MTkwNiwyMCBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfZGVsKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRcdGdvdG8gZXhpdF9lcnI7XG4gXHR9XG4gXG4mIzQzO1x0b3ZzX2xvY2soKTtcbiYjNDM7XHRjdF9saW1pdF9pbmZvID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8sXG4mIzQzO1x0XHRcdFx0XHRcdCAgbG9ja2RlcF9vdnNsX2lzX2hlbGQoKSk7XG4gXHRlcnIgPSBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSxcbiBcdFx0XHRcdFx0ICBjdF9saW1pdF9pbmZvKTtcbiBcdGlmIChlcnIpXG4tXHRcdGdvdG8gZXhpdF9lcnI7XG4mIzQzO1x0XHRnb3RvIGV4aXRfdW5sb2NrO1xuIFxuIFx0Z2VubG1zZ19lbmQocmVwbHksIG92c19yZXBseV9oZWFkZXIpO1xuJiM0MztcdG92c191bmxvY2soKTtcbiBcdHJldHVybiBnZW5sbXNnX3JlcGx5KHJlcGx5LCBpbmZvKTtcbiBcbiYjNDM7ZXhpdF91bmxvY2s6XG4mIzQzO1x0b3ZzX3VubG9jaygpO1xuIGV4aXRfZXJyOlxuIFx0bmxtc2dfZnJlZShyZXBseSk7XG4gXHRyZXR1cm4gZXJyO1xuQEAgLTE5MTgsNyAmIzQzOzE5MzMsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfZ2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRzdHJ1Y3Qgb3ZzX2hlYWRlciAqb3ZzX3JlcGx5X2hlYWRlcjtcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi1cdTAwM2Vzayk7XG4gXHRzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKG5ldCwgb3ZzX25ldF9pZCk7XG4tXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm8gPSBvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm87XG4mIzQzO1x0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvO1xuIFx0aW50IGVycjtcbiBcbiBcdHJlcGx5ID0gb3ZzX2N0X2xpbWl0X2NtZF9yZXBseV9zdGFydChpbmZvLCBPVlNfQ1RfTElNSVRfQ01EX0dFVCxcbkBAIC0xOTMyLDIzICYjNDM7MTk0NywyOSBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfZ2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRcdGdvdG8gZXhpdF9lcnI7XG4gXHR9XG4gXG4mIzQzO1x0b3ZzX2xvY2soKTtcbiYjNDM7XHRjdF9saW1pdF9pbmZvID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8sXG4mIzQzO1x0XHRcdFx0XHRcdCAgbG9ja2RlcF9vdnNsX2lzX2hlbGQoKSk7XG4gXHRpZiAoYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSkge1xuIFx0XHRlcnIgPSBvdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoXG4gXHRcdFx0bmV0LCBhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdLCBjdF9saW1pdF9pbmZvLFxuIFx0XHRcdHJlcGx5KTtcbiBcdFx0aWYgKGVycilcbi1cdFx0XHRnb3RvIGV4aXRfZXJyO1xuJiM0MztcdFx0XHRnb3RvIGV4aXRfdW5sb2NrO1xuIFx0fSBlbHNlIHtcbiBcdFx0ZXJyID0gb3ZzX2N0X2xpbWl0X2dldF9hbGxfem9uZV9saW1pdChuZXQsIGN0X2xpbWl0X2luZm8sXG4gXHRcdFx0XHRcdFx0ICAgICAgcmVwbHkpO1xuIFx0XHRpZiAoZXJyKVxuLVx0XHRcdGdvdG8gZXhpdF9lcnI7XG4mIzQzO1x0XHRcdGdvdG8gZXhpdF91bmxvY2s7XG4gXHR9XG4gXG4gXHRubGFfbmVzdF9lbmQocmVwbHksIG5sYV9yZXBseSk7XG4gXHRnZW5sbXNnX2VuZChyZXBseSwgb3ZzX3JlcGx5X2hlYWRlcik7XG4mIzQzO1x0b3ZzX3VubG9jaygpO1xuIFx0cmV0dXJuIGdlbmxtc2dfcmVwbHkocmVwbHksIGluZm8pO1xuIFxuJiM0MztleGl0X3VubG9jazpcbiYjNDM7XHRvdnNfdW5sb2NrKCk7XG4gZXhpdF9lcnI6XG4gXHRubG1zZ19mcmVlKHJlcGx5KTtcbiBcdHJldHVybiBlcnI7XG5kaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmggYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaFxuaW5kZXggNjk2NjQwZTg4ZmE3ZTMuLjkzZTExZTQ2OGQxNzNmIDEwMDY0NFxuLS0tIGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmhcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oXG5AQCAtMTcyLDcgJiM0MzsxNzIsNyBAQCBzdHJ1Y3Qgb3ZzX25ldCB7XG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgZHBfbm90aWZ5X3dvcms7XG4gXHRzdHJ1Y3QgZGVsYXllZF93b3JrIG1hc2tzX3JlYmFsYW5jZTtcbiAjaWZcdElTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpXG4tXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm87XG4mIzQzO1x0c3RydWN0IG92c19jdF9saW1pdF9pbmZvIF9fcmN1ICpjdF9saW1pdF9pbmZvO1xuICNlbmRpZlxuIFx0Ym9vbCB4dF9sYWJlbDtcbiB9O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE4OjUwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtPUEVOVlNXSVRDSCYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfQ09OTkNPVU5UJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7b3ZzX2N0X2xpbWl0X2NtZF9zZXQmIzM0OywKICAgICYjMzQ7b3ZzX2N0X2xpbWl0X2NtZF9kZWwmIzM0OywKICAgICYjMzQ7b3ZzX2N0X2xpbWl0X2NtZF9nZXQmIzM0OywKICAgICYjMzQ7b3ZzX2N0X2NoZWNrX2xpbWl0JiMzNDssCiAgICAmIzM0O292c19jdF9saW1pdF9pbml0JiMzNDssCiAgICAmIzM0O292c19jdF9saW1pdF9leGl0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIFJDVSBzeW5jaHJvbml6YXRpb24gYW5kIGxvY2tpbmcgaXNzdWVzIGFyb3VuZCB0aGUgT3BlbiB2U3dpdGNoIGNvbm5lY3Rpb24gdHJhY2tpbmcgbGltaXQgY29uZmlndXJhdGlvbi4gSXQgbW9kaWZpZXMgbmV0bGluayBjb21tYW5kIGhhbmRsZXJzIGFuZCB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBsaW1pdCBjaGVjayBmdW5jdGlvbi4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlc2UgY29tbWFuZCBoYW5kbGVycyBhbmQgdGhlIGRhdGFwYXRoIGNvbm5lY3Rpb24gdHJhY2tpbmcgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGEwOWVmM2NkYjQ1MTY5YjdiNjZlNmFmYTgxMTY2MTQzNzk5YjQwOGYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEp1bCAyMyAxODo1MDo0NCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYyBiL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYwppbmRleCA5NTY5N2Q0ZTE2ZTY0ZS4uNWM5YTYwN2QyN2E3YjYgMTAwNjQ0Ci0tLSBhL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMKQEAgLTkzMywxMCAmIzQzOzkzMywxNCBAQCBzdGF0aWMgaW50IG92c19jdF9jaGVja19saW1pdChzdHJ1Y3QgbmV0ICpuZXQsCiAJCQkgICAgICBjb25zdCBzdHJ1Y3Qgb3ZzX2Nvbm50cmFja19pbmZvICppbmZvKQogewogCXN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMobmV0LCBvdnNfbmV0X2lkKTsKLQljb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm8gPSBvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvOwomIzQzOwljb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm87CiAJdTMyIHBlcl96b25lX2xpbWl0LCBjb25uZWN0aW9uczsKIAl1MzIgY29ubmNvdW50X2tleTsKIAomIzQzOwljdF9saW1pdF9pbmZvID0gcmN1X2RlcmVmZXJlbmNlKG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8pOwomIzQzOwlpZiAoIWN0X2xpbWl0X2luZm8pCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKIAljb25uY291bnRfa2V5ID0gaW5mby0mZ3Q7em9uZS5pZDsKIAogCXBlcl96b25lX2xpbWl0ID0gY3RfbGltaXRfZ2V0KGN0X2xpbWl0X2luZm8sIGluZm8tJmd0O3pvbmUuaWQpOwpAQCAtMTU4NSw0MCAmIzQzOzE1ODksNDcgQEAgc3RhdGljIHZvaWQgX19vdnNfY3RfZnJlZV9hY3Rpb24oc3RydWN0IG92c19jb25udHJhY2tfaW5mbyAqY3RfaW5mbykKICNpZglJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKQogc3RhdGljIGludCBvdnNfY3RfbGltaXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0KQogewomIzQzOwlzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm87CiAJaW50IGksIGVycjsKIAotCW92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8gPSBrbWFsbG9jX29iaigqb3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbyk7Ci0JaWYgKCFvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvKQomIzQzOwlpbmZvID0ga21hbGxvY19vYmooKmluZm8pOwomIzQzOwlpZiAoIWluZm8pCiAJCXJldHVybiAtRU5PTUVNOwogCi0Jb3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mby0mZ3Q7ZGVmYXVsdF9saW1pdCA9IE9WU19DVF9MSU1JVF9ERUZBVUxUOwotCW92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8tJmd0O2xpbWl0cyA9CiYjNDM7CWluZm8tJmd0O2RlZmF1bHRfbGltaXQgPSBPVlNfQ1RfTElNSVRfREVGQVVMVDsKJiM0MzsJaW5mby0mZ3Q7bGltaXRzID0KIAkJa21hbGxvY19vYmpzKHN0cnVjdCBobGlzdF9oZWFkLCBDVF9MSU1JVF9IQVNIX0JVQ0tFVFMpOwotCWlmICghb3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mby0mZ3Q7bGltaXRzKSB7Ci0JCWtmcmVlKG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8pOwomIzQzOwlpZiAoIWluZm8tJmd0O2xpbWl0cykgewomIzQzOwkJa2ZyZWUoaW5mbyk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAogCWZvciAoaSA9IDA7IGkgJmx0OyBDVF9MSU1JVF9IQVNIX0JVQ0tFVFM7IGkmIzQzOyYjNDM7KQotCQlJTklUX0hMSVNUX0hFQUQoJmFtcDtvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvLSZndDtsaW1pdHNbaV0pOwomIzQzOwkJSU5JVF9ITElTVF9IRUFEKCZhbXA7aW5mby0mZ3Q7bGltaXRzW2ldKTsKIAotCW92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8tJmd0O2RhdGEgPSBuZl9jb25uY291bnRfaW5pdChuZXQsIHNpemVvZih1MzIpKTsKJiM0MzsJaW5mby0mZ3Q7ZGF0YSA9IG5mX2Nvbm5jb3VudF9pbml0KG5ldCwgc2l6ZW9mKHUzMikpOwogCi0JaWYgKElTX0VSUihvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvLSZndDtkYXRhKSkgewotCQllcnIgPSBQVFJfRVJSKG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8tJmd0O2RhdGEpOwotCQlrZnJlZShvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvLSZndDtsaW1pdHMpOwotCQlrZnJlZShvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvKTsKJiM0MzsJaWYgKElTX0VSUihpbmZvLSZndDtkYXRhKSkgewomIzQzOwkJZXJyID0gUFRSX0VSUihpbmZvLSZndDtkYXRhKTsKJiM0MzsJCWtmcmVlKGluZm8tJmd0O2xpbWl0cyk7CiYjNDM7CQlrZnJlZShpbmZvKTsKIAkJcHJfZXJyKCYjMzQ7b3BlbnZzd2l0Y2g6IGZhaWxlZCB0byBpbml0IG5mX2Nvbm5jb3VudCAlZFxuJiMzNDssIGVycik7CiAJCXJldHVybiBlcnI7CiAJfQomIzQzOwlyY3VfYXNzaWduX3BvaW50ZXIob3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbywgaW5mbyk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIG92c19jdF9saW1pdF9leGl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG92c19uZXQgKm92c19uZXQpCiB7Ci0JY29uc3Qgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvID0gb3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbzsKJiM0MzsJY29uc3Qgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvOwogCWludCBpOwogCiYjNDM7CWluZm8gPSByY3VfcmVwbGFjZV9wb2ludGVyKG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8sIE5VTEwsCiYjNDM7CQkJCSAgIGxvY2tkZXBfb3ZzbF9pc19oZWxkKCkpOwomIzQzOwkvKiBvdnNfY3RfY2hlY2tfbGltaXQoKSBhY2Nlc3NlcyB0aGUgaW5mbyB1bmRlciB0aGUgZGF0YXBhdGggUkNVIGxvY2suICovCiYjNDM7CXN5bmNocm9uaXplX3JjdSgpOwomIzQzOwogCW5mX2Nvbm5jb3VudF9kZXN0cm95KG5ldCwgaW5mby0mZ3Q7ZGF0YSk7CiAJZm9yIChpID0gMDsgaSAmbHQ7IENUX0xJTUlUX0hBU0hfQlVDS0VUUzsgJiM0MzsmIzQzO2kpIHsKIAkJc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQgPSAmYW1wO2luZm8tJmd0O2xpbWl0c1tpXTsKQEAgLTE2NzgsOSAmIzQzOzE2ODksNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCwKIAl3aGlsZSAocmVtICZndDs9IHNpemVvZigqem9uZV9saW1pdCkpIHsKIAkJaWYgKHVubGlrZWx5KHpvbmVfbGltaXQtJmd0O3pvbmVfaWQgPT0KIAkJCQlPVlNfWk9ORV9MSU1JVF9ERUZBVUxUX1pPTkUpKSB7Ci0JCQlvdnNfbG9jaygpOwogCQkJaW5mby0mZ3Q7ZGVmYXVsdF9saW1pdCA9IHpvbmVfbGltaXQtJmd0O2xpbWl0OwotCQkJb3ZzX3VubG9jaygpOwogCQl9IGVsc2UgaWYgKHVubGlrZWx5KCFjaGVja196b25lX2lkKAogCQkJCXpvbmVfbGltaXQtJmd0O3pvbmVfaWQsICZhbXA7em9uZSkpKSB7CiAJCQlPVlNfTkxFUlIodHJ1ZSwgJiMzNDt6b25lIGlkIGlzIG91dCBvZiByYW5nZSYjMzQ7KTsKQEAgLTE2OTQsOSAmIzQzOzE3MDMsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCwKIAkJCWN0X2xpbWl0LSZndDt6b25lID0gem9uZTsKIAkJCWN0X2xpbWl0LSZndDtsaW1pdCA9IHpvbmVfbGltaXQtJmd0O2xpbWl0OwogCi0JCQlvdnNfbG9jaygpOwogCQkJY3RfbGltaXRfc2V0KGluZm8sIGN0X2xpbWl0KTsKLQkJCW92c191bmxvY2soKTsKIAkJfQogCQlyZW0gLT0gTkxBX0FMSUdOKHNpemVvZigqem9uZV9saW1pdCkpOwogCQl6b25lX2xpbWl0ID0gKHN0cnVjdCBvdnNfem9uZV9saW1pdCAqKSgodTggKil6b25lX2xpbWl0ICYjNDM7CkBAIC0xNzIyLDE2ICYjNDM7MTcyOSwxMiBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCwKIAl3aGlsZSAocmVtICZndDs9IHNpemVvZigqem9uZV9saW1pdCkpIHsKIAkJaWYgKHVubGlrZWx5KHpvbmVfbGltaXQtJmd0O3pvbmVfaWQgPT0KIAkJCQlPVlNfWk9ORV9MSU1JVF9ERUZBVUxUX1pPTkUpKSB7Ci0JCQlvdnNfbG9jaygpOwogCQkJaW5mby0mZ3Q7ZGVmYXVsdF9saW1pdCA9IE9WU19DVF9MSU1JVF9ERUZBVUxUOwotCQkJb3ZzX3VubG9jaygpOwogCQl9IGVsc2UgaWYgKHVubGlrZWx5KCFjaGVja196b25lX2lkKAogCQkJCXpvbmVfbGltaXQtJmd0O3pvbmVfaWQsICZhbXA7em9uZSkpKSB7CiAJCQlPVlNfTkxFUlIodHJ1ZSwgJiMzNDt6b25lIGlkIGlzIG91dCBvZiByYW5nZSYjMzQ7KTsKIAkJfSBlbHNlIHsKLQkJCW92c19sb2NrKCk7CiAJCQljdF9saW1pdF9kZWwoaW5mbywgem9uZSk7Ci0JCQlvdnNfdW5sb2NrKCk7CiAJCX0KIAkJcmVtIC09IE5MQV9BTElHTihzaXplb2YoKnpvbmVfbGltaXQpKTsKIAkJem9uZV9saW1pdCA9IChzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXQgKikoKHU4ICopem9uZV9saW1pdCAmIzQzOwpAQCAtMTg1MCw3ICYjNDM7MTg1Myw3IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAlzdHJ1Y3Qgc2tfYnVmZiAqcmVwbHk7CiAJc3RydWN0IG92c19oZWFkZXIgKm92c19yZXBseV9oZWFkZXI7CiAJc3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhzb2NrX25ldChza2ItJmd0O3NrKSwgb3ZzX25ldF9pZCk7Ci0Jc3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvID0gb3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbzsKJiM0MzsJc3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvOwogCWludCBlcnI7CiAKIAlyZXBseSA9IG92c19jdF9saW1pdF9jbWRfcmVwbHlfc3RhcnQoaW5mbywgT1ZTX0NUX0xJTUlUX0NNRF9TRVQsCkBAIC0xODYzLDE2ICYjNDM7MTg2NiwyMiBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfc2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAJCWdvdG8gZXhpdF9lcnI7CiAJfQogCiYjNDM7CW92c19sb2NrKCk7CiYjNDM7CWN0X2xpbWl0X2luZm8gPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8sCiYjNDM7CQkJCQkJICBsb2NrZGVwX292c2xfaXNfaGVsZCgpKTsKIAllcnIgPSBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSwKIAkJCQkJICBjdF9saW1pdF9pbmZvKTsKIAlpZiAoZXJyKQotCQlnb3RvIGV4aXRfZXJyOwomIzQzOwkJZ290byBleGl0X3VubG9jazsKIAogCXN0YXRpY19icmFuY2hfZW5hYmxlKCZhbXA7b3ZzX2N0X2xpbWl0X2VuYWJsZWQpOwogCiAJZ2VubG1zZ19lbmQocmVwbHksIG92c19yZXBseV9oZWFkZXIpOwomIzQzOwlvdnNfdW5sb2NrKCk7CiAJcmV0dXJuIGdlbmxtc2dfcmVwbHkocmVwbHksIGluZm8pOwogCiYjNDM7ZXhpdF91bmxvY2s6CiYjNDM7CW92c191bmxvY2soKTsKIGV4aXRfZXJyOgogCW5sbXNnX2ZyZWUocmVwbHkpOwogCXJldHVybiBlcnI7CkBAIC0xODg0LDcgJiM0MzsxODkzLDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCXN0cnVjdCBza19idWZmICpyZXBseTsKIAlzdHJ1Y3Qgb3ZzX2hlYWRlciAqb3ZzX3JlcGx5X2hlYWRlcjsKIAlzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKHNvY2tfbmV0KHNrYi0mZ3Q7c2spLCBvdnNfbmV0X2lkKTsKLQlzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm8gPSBvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvOwomIzQzOwlzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm87CiAJaW50IGVycjsKIAogCXJlcGx5ID0gb3ZzX2N0X2xpbWl0X2NtZF9yZXBseV9zdGFydChpbmZvLCBPVlNfQ1RfTElNSVRfQ01EX0RFTCwKQEAgLTE4OTcsMTQgJiM0MzsxOTA2LDIwIEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9kZWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAkJZ290byBleGl0X2VycjsKIAl9CiAKJiM0MzsJb3ZzX2xvY2soKTsKJiM0MzsJY3RfbGltaXRfaW5mbyA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQob3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbywKJiM0MzsJCQkJCQkgIGxvY2tkZXBfb3ZzbF9pc19oZWxkKCkpOwogCWVyciA9IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdLAogCQkJCQkgIGN0X2xpbWl0X2luZm8pOwogCWlmIChlcnIpCi0JCWdvdG8gZXhpdF9lcnI7CiYjNDM7CQlnb3RvIGV4aXRfdW5sb2NrOwogCiAJZ2VubG1zZ19lbmQocmVwbHksIG92c19yZXBseV9oZWFkZXIpOwomIzQzOwlvdnNfdW5sb2NrKCk7CiAJcmV0dXJuIGdlbmxtc2dfcmVwbHkocmVwbHksIGluZm8pOwogCiYjNDM7ZXhpdF91bmxvY2s6CiYjNDM7CW92c191bmxvY2soKTsKIGV4aXRfZXJyOgogCW5sbXNnX2ZyZWUocmVwbHkpOwogCXJldHVybiBlcnI7CkBAIC0xOTE4LDcgJiM0MzsxOTMzLDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX2dldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCXN0cnVjdCBvdnNfaGVhZGVyICpvdnNfcmVwbHlfaGVhZGVyOwogCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi0mZ3Q7c2spOwogCXN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMobmV0LCBvdnNfbmV0X2lkKTsKLQlzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm8gPSBvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvOwomIzQzOwlzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm87CiAJaW50IGVycjsKIAogCXJlcGx5ID0gb3ZzX2N0X2xpbWl0X2NtZF9yZXBseV9zdGFydChpbmZvLCBPVlNfQ1RfTElNSVRfQ01EX0dFVCwKQEAgLTE5MzIsMjMgJiM0MzsxOTQ3LDI5IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9nZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAkJZ290byBleGl0X2VycjsKIAl9CiAKJiM0MzsJb3ZzX2xvY2soKTsKJiM0MzsJY3RfbGltaXRfaW5mbyA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQob3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbywKJiM0MzsJCQkJCQkgIGxvY2tkZXBfb3ZzbF9pc19oZWxkKCkpOwogCWlmIChhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdKSB7CiAJCWVyciA9IG92c19jdF9saW1pdF9nZXRfem9uZV9saW1pdCgKIAkJCW5ldCwgYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSwgY3RfbGltaXRfaW5mbywKIAkJCXJlcGx5KTsKIAkJaWYgKGVycikKLQkJCWdvdG8gZXhpdF9lcnI7CiYjNDM7CQkJZ290byBleGl0X3VubG9jazsKIAl9IGVsc2UgewogCQllcnIgPSBvdnNfY3RfbGltaXRfZ2V0X2FsbF96b25lX2xpbWl0KG5ldCwgY3RfbGltaXRfaW5mbywKIAkJCQkJCSAgICAgIHJlcGx5KTsKIAkJaWYgKGVycikKLQkJCWdvdG8gZXhpdF9lcnI7CiYjNDM7CQkJZ290byBleGl0X3VubG9jazsKIAl9CiAKIAlubGFfbmVzdF9lbmQocmVwbHksIG5sYV9yZXBseSk7CiAJZ2VubG1zZ19lbmQocmVwbHksIG92c19yZXBseV9oZWFkZXIpOwomIzQzOwlvdnNfdW5sb2NrKCk7CiAJcmV0dXJuIGdlbmxtc2dfcmVwbHkocmVwbHksIGluZm8pOwogCiYjNDM7ZXhpdF91bmxvY2s6CiYjNDM7CW92c191bmxvY2soKTsKIGV4aXRfZXJyOgogCW5sbXNnX2ZyZWUocmVwbHkpOwogCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaCBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oCmluZGV4IDY5NjY0MGU4OGZhN2UzLi45M2UxMWU0NjhkMTczZiAxMDA2NDQKLS0tIGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmgKQEAgLTE3Miw3ICYjNDM7MTcyLDcgQEAgc3RydWN0IG92c19uZXQgewogCXN0cnVjdCB3b3JrX3N0cnVjdCBkcF9ub3RpZnlfd29yazsKIAlzdHJ1Y3QgZGVsYXllZF93b3JrIG1hc2tzX3JlYmFsYW5jZTsKICNpZglJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKQotCXN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbzsKJiM0MzsJc3RydWN0IG92c19jdF9saW1pdF9pbmZvIF9fcmN1ICpjdF9saW1pdF9pbmZvOwogI2VuZGlmCiAJYm9vbCB4dF9sYWJlbDsKIH07CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE4OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxNzYKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA0MDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDb25uZWN0aW9uIFRyYWNraW5nIExpbWl0IFBhdGNoIGluIE9wZW4gdlN3aXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHR3ZWFrcyB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBsaW1pdCBsb2dpYyBpbiBgbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jYCBhbmQgYG5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oYC4gVGhlIGNvcmUgY2hhbmdlIHNlZW1zIHRvIGJlIGFyb3VuZCBob3cgYGN0X2xpbWl0X2luZm9gIGlzIGFjY2Vzc2VkLiBUaGV5JiMzOTtyZSB1c2luZyBSQ1Ugbm93IOKAkyBgcmN1X2RlcmVmZXJlbmNlYCwgYHJjdV9hc3NpZ25fcG9pbnRlcmAsIGByY3VfcmVwbGFjZV9wb2ludGVyYCDigJMgd2hpY2ggaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBpcyBhYm91dCBpbXByb3ZpbmcgY29uY3VycmVuY3kgYW5kIGF2b2lkaW5nIHJhY2UgY29uZGl0aW9ucy4gVGhleeKAmXZlIGFsc28gbW92ZWQgYG92c19sb2NrKClgIGFyb3VuZCB3aXRoaW4gdGhlIGNvbW1hbmQgaGFuZGxpbmcgZnVuY3Rpb25zOiBgb3ZzX2N0X2xpbWl0X2NtZF9zZXRgLCBgb3ZzX2N0X2xpbWl0X2NtZF9kZWxgLCBhbmQgYG92c19jdF9saW1pdF9jbWRfZ2V0YC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5LgoKVGhlcmUmIzM5O3MgYSBwb3RlbnRpYWwgbWVtb3J5IGxlYWsgb3IgaW5pdGlhbGl6YXRpb24gaXNzdWUgYmVpbmcgYWRkcmVzc2VkIGluIGBvdnNfY3RfbGltaXRfaW5pdGAuIEdvb2QgY2F0Y2g7IHRoYXQmIzM5O3MgdGhlIGtpbmQgb2YgdGhpbmcgdGhhdCBjYW4gYml0ZSB5b3UgbGF0ZXIuIExvb2tzIGxpa2UgdGhleSYjMzk7cmUgdXNpbmcgYSBsb2NhbCBwb2ludGVyIGJlZm9yZSBhc3NpZ25pbmcgaXQsIHdoaWNoIG1pZ2h0IGJlIHRoZSBmaXguCgpGdW5jdGlvbmFsbHksIHRoaXMgaXMgYSBjaGFuZ2UgdG8gdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgbGltaXQgbG9naWMgd2l0aGluIE9wZW4gdlN3aXRjaC4gR2l2ZW4gdGhlIFJDVSBjaGFuZ2VzLCB0aGUgbG9jayBtb3ZlbWVudHMsIGFuZCB0aGUgbWVtb3J5IGZpeCwgSSYjMzk7ZCBzYXkgdGhpcyBwYXRjaCBzY3JlYW1zICYjMzQ7bmVlZHMgZnV6emluZy4mIzM0OyBMZXQmIzM5O3MgaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgdG8gdGFyZ2V0LgoKQmFzZWQgb24gdGhlIGNvZGUgY2hhbmdlcyBhbmQgdGhlIG92ZXJhbGwgaW50ZW50LCB0aGUgZnVuY3Rpb25zIEkgbmVlZCB0byBmb2N1cyBvbiBhcmU6CgoqICAgYG92c19jdF9jaGVja19saW1pdGAg4oCTIENvcmUgbGltaXQgY2hlY2tpbmcKKiAgIGBvdnNfY3RfbGltaXRfaW5pdGAg4oCTIFRoZSBpbml0IGZ1bmN0aW9uLgoqICAgYG92c19jdF9saW1pdF9leGl0YCDigJMgVGhlIGV4aXQgZnVuY3Rpb24sIGVxdWFsbHkgaW1wb3J0YW50LgoqICAgYG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdGAg4oCTIFNldHRpbmcgem9uZSBsaW1pdHMKKiAgIGBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXRgIOKAkyBEZWxldGluZyB6b25lIGxpbWl0cy4KKiAgIGBvdnNfY3RfbGltaXRfY21kX3NldGAg4oCTIENvbW1hbmQgc2V0dGluZwoqICAgYG92c19jdF9saW1pdF9jbWRfZGVsYCDigJMgQ29tbWFuZCBkZWxldGluZwoqICAgYG92c19jdF9saW1pdF9jbWRfZ2V0YCDigJMgQ29tbWFuZCBnZXR0aW5nCgpJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZSB0aGUgcmlnaHQgY29uZmlndXJhdGlvbiB0byBleGVyY2lzZSB0aGlzIGNvZGUuIExvb2tpbmcgYXQgdGhlIGNvZGUsIGl0JiMzOTtzIGNsZWFyIHRoYXQgaXQgdXNlcyBgI2lmIElTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpYCwgd2hpY2ggbWVhbnMgYE5FVEZJTFRFUl9DT05OQ09VTlRgIG11c3QgYmUgZW5hYmxlZC4gU2luY2UgaXQmIzM5O3MgT3BlbiB2U3dpdGNoLCBvYnZpb3VzbHkgSSBuZWVkIGBPUEVOVlNXSVRDSGAsIGFuZCBJJiMzOTtsbCBkb3VibGUgY2hlY2sgdG8gc2VlIGlmIGBPUEVOVlNXSVRDSF9DT05OVFJBQ0tgIGlzIGFsc28gYSByZWxldmFudCBjb25maWcgb3B0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE4OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBPUEVOVlNXSVRDSCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9LY29uZmlnLTUtXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo2OmNvbmZpZyBPUEVOVlNXSVRDSFxubmV0L29wZW52c3dpdGNoL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O09wZW4gdlN3aXRjaFwmIzM0O1xuLS1cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTQzLVxubmV0L29wZW52c3dpdGNoL0tjb25maWc6NDQ6Y29uZmlnIE9QRU5WU1dJVENIX0dSRVxubmV0L29wZW52c3dpdGNoL0tjb25maWctNDUtXHR0cmlzdGF0ZSBcJiMzNDtPcGVuIHZTd2l0Y2ggR1JFIHR1bm5lbGluZyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L29wZW52c3dpdGNoL0tjb25maWctNTYtXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo1Nzpjb25maWcgT1BFTlZTV0lUQ0hfVlhMQU5cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTU4LVx0dHJpc3RhdGUgXCYjMzQ7T3BlbiB2U3dpdGNoIFZYTEFOIHR1bm5lbGluZyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L29wZW52c3dpdGNoL0tjb25maWctNjgtXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo2OTpjb25maWcgT1BFTlZTV0lUQ0hfR0VORVZFXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy03MC1cdHRyaXN0YXRlIFwmIzM0O09wZW4gdlN3aXRjaCBHZW5ldmUgdHVubmVsaW5nIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxODo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDI5CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBsaWtlIHlvdToKCioqQ2hlY2tpbmcgZm9yIHRoZSBPUEVOVlNXSVRDSF9DT05UUkFDSyBDb25maWd1cmF0aW9uKioKCk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgYmVmb3JlIGRpdmluZyBpbnRvIGFueSBjb21wbGV4IHRyb3VibGVzaG9vdGluZyBvciBjb25maWd1cmF0aW9uIGNoYW5nZXMsIGxldCYjMzk7cyBlc3RhYmxpc2ggYSBiYXNlbGluZS4gSSBuZWVkIHRvIHF1aWNrbHkgY29uZmlybSB3aGV0aGVyIHRoZSBgT1BFTlZTV0lUQ0hfQ09OVFJBQ0tgIGNvbmZpZ3VyYXRpb24gaXMgZXZlbiBwcmVzZW50LiBJdOKAmXMgYSBwcmV0dHkgZnVuZGFtZW50YWwgc2V0dGluZywgYW5kIGl0cyBhYnNlbmNlIGNvdWxkIGltbWVkaWF0ZWx5IGV4cGxhaW4gc29tZSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggY29ubmVjdGlvbiB0cmFja2luZyBhbmQsIGJ5IGV4dGVuc2lvbiwgbmV0d29yayBwZXJmb3JtYW5jZSBvciBzZWN1cml0eSB3aXRoaW4gdGhlIE9wZW4gdlN3aXRjaCBlbnZpcm9ubWVudC4gQSBxdWljayBjaGVjayBoZXJlIHNhdmVzIHRpbWUgaW4gdGhlIGxvbmcgcnVuOyBubyBwb2ludCBwdXJzdWluZyBvdGhlciBhdmVudWVzIGlmIGEgYmFzaWMgcHJlcmVxdWlzaXRlIGlzbiYjMzk7dCBtZXQuIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB3aGV0aGVyIEkgbmVlZCB0byBlbmFibGUgdGhpcywgb3IgaWYgaXQgaGFzIGFscmVhZHkgYmVlbiBlbmFibGVkIGFuZCBuZWVkcyB0byBiZSBsb29rZWQgYXQgaW4gbW9yZSBkZXB0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxODo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBPUEVOVlNXSVRDSF9DT05OVFJBQ0smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMTg6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjY2NAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkludmVzdGlnYXRpbmcgQ29ubmVjdGlvbiBUcmFja2luZyBPcHRpb25zKioKCkFscmlnaHQsIEkgbmVlZCB0byBwaW5wb2ludCB3aGVyZSB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBjb25maWd1cmF0aW9uIGxpdmVzIHdpdGhpbiB0aGUgT3BlbiB2U3dpdGNoIGJ1aWxkIHN5c3RlbS4gTXkgaW5zdGluY3Qgc2F5cyB0byBzdGFydCB3aXRoIGBuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZ2AuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgcGxhY2UgZm9yIGJ1aWxkLXRpbWUgb3B0aW9ucyByZWxhdGVkIHRvIG5ldHdvcmtpbmcgZmVhdHVyZXMgd2l0aGluIHRoZSBrZXJuZWwgbW9kdWxlIHNwYWNlLiBOb3csIHdoYXQgYW0gSSBsb29raW5nIGZvciBzcGVjaWZpY2FsbHk/IEkmIzM5O20ga2V5aW5nIGluIG9uIHR3byBvcHRpb25zOiBgQ09OTlRSQUNLYCBhbmQgYE5FVEZJTFRFUmAuIFRoZXNlIGFyZSB0aGUgbW9zdCBsaWtlbHkgY2FuZGlkYXRlcyBmb3IgaW5mbHVlbmNpbmcgY29ubmVjdGlvbiB0cmFja2luZyBiZWhhdmlvciBvciBlbmFibGluZyBpbnRlZ3JhdGlvbiB3aXRoIE5ldGZpbHRlci4gR29pbmcgdG8gZGl2ZSBpbiBhbmQgc2VlIHdoYXQgdGhlIEtjb25maWcgaGFzIHRvIHNheS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxODo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtORVRGSUxURVImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZz02PWNvbmZpZyBPUEVOVlNXSVRDSFxuLS1cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTExLVx0XHRcdFx0ICAgICAoIU5GX05BVCB8fCBORl9OQVQpIFx1MDAyNlx1MDAyNiBcXFxubmV0L29wZW52c3dpdGNoL0tjb25maWc6MTI6XHRcdFx0XHQgICAgICghTkVURklMVEVSX0NPTk5DT1VOVCB8fCBORVRGSUxURVJfQ09OTkNPVU5UKSkpXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy0xMy1cdGRlcGVuZHMgb24gUFNBTVBMRSB8fCAhUFNBTVBMRVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE4OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5NzEKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA4NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBPcGVuIHZTd2l0Y2ggYW5kIENvbm5lY3Rpb24gVHJhY2tpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYE9QRU5WU1dJVENIYCBtb2R1bGUgYW5kIGl0cyBjb25uZWN0aW9uIHRyYWNraW5nIGNhcGFiaWxpdGllcy4gSXQgc2VlbXMgdGhhdCBgT1BFTlZTV0lUQ0hgICpkZXBlbmRzKiBvbiBgTkVURklMVEVSX0NPTk5DT1VOVGAsIGJ1dCB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBuZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmNgLCBpcyB1c2luZyBhIHByZXByb2Nlc3NvciBkaXJlY3RpdmUsIGAjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVClgLCB0byBjb250cm9sIGl0cyBpbmNsdXNpb24uIFRoaXMgbWVhbnMgaXQgKnJlcXVpcmVzKiBib3RoIGBPUEVOVlNXSVRDSGAgKmFuZCogYE5FVEZJTFRFUl9DT05OQ09VTlRgIHRvIGZ1bmN0aW9uIHByb3Blcmx5LCBldmVuIGlmIHRoZSBkZXBlbmRlbmN5IGlzbiYjMzk7dCBleHBsaWNpdGx5IHN0YXRlZCBhcyBhIGhhcmQgcmVxdWlyZW1lbnQuIEl0JiMzOTtzIHVzaW5nIGBDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVGAsIHNvIGl0IHJlYWxseSBuZWVkcyBpdCB0byBiZSBlbmFibGVkLgoKTXkgbmV4dCBzdGVwIGlzIHRvIHBlcmZvcm0gYSB0aG9yb3VnaCBjb2RlIHJldmlldyB0byBjaGVjayBpZiBgT1BFTlZTV0lUQ0hfQ09OVFJBQ0tgIGlzIGV4cGxpY2l0bHkgdXNlZCBhbnl3aGVyZSBlbHNlIHdpdGhpbiB0aGUgY29kZWJhc2UuIEkgbmVlZCB0byBnZXQgdGhlIGJpZ2dlciBwaWN0dXJlIG9mIGhvdyB0aGF0IGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgaW1wYWN0cyB0aGUgYmVoYXZpb3Igb2YgdGhlIHByb2dyYW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE4OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7T1BFTlZTV0lUQ0hfQ09OVFJBQ0smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxODo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzE0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBDb25uZWN0aW9uIFRyYWNraW5nIExpbWl0cyBpbiBPcGVuIHZTd2l0Y2gqKgoKQWxyaWdodCwgc28gdGhlIGtleSBjb25maWd1cmF0aW9ucyB0byBmb2N1cyBvbiBoZXJlIGFyZSBkZWZpbml0ZWx5IGBORVRGSUxURVJfQ09OTkNPVU5UYCBhbmQgYE9QRU5WU1dJVENIYC4gVGhhdCBmZWVscyBsaWtlIGEgc29saWQgc3RhcnRpbmcgcG9pbnQuIE5vdywgbGV0JiMzOTtzIGRyaWxsIGRvd24gaW50byB0aGUgY29yZSBmdW5jdGlvbnMgdGhhdCBoYW5kbGUgdGhpcyBjb25uZWN0aW9uIHRyYWNraW5nIGxpbWl0IGZ1bmN0aW9uYWxpdHkuIE15IGZvY3VzIG5lZWRzIHRvIGJlIG9uOgoKKiAgIGBvdnNfY3RfbGltaXRfY21kX3NldGAKKiAgIGBvdnNfY3RfbGltaXRfY21kX2RlbGAKKiAgIGBvdnNfY3RfbGltaXRfY21kX2dldGAKKiAgIGBvdnNfY3RfY2hlY2tfbGltaXRgCgpUaG9zZSBzZWVtIGxpa2UgdGhlIGxvZ2ljYWwgcG9pbnRzIG9mIGludGVyYWN0aW9uIHdpdGggdGhlIHN5c3RlbS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGBvdnNfY3RfbGltaXRfY21kX3NldGAgaXMgcmVhY2hhYmxlLCBhcyBhIG5ldGxpbmsgY29tbWFuZCBoYW5kbGVyLiBJdCYjMzk7cyBhIGtleSBwYXJ0IG9mIHRoZSBBUEkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE4OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O292c19jdF9saW1pdF9jbWRfc2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9MTgyMj1zdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfYWxsX3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xODQ5LVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjE4NTA6c3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTE4NTEte1xuLS1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYz0xOTc4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zbWFsbF9vcHMgY3RfbGltaXRfZ2VubF9vcHNbXSA9IHtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTk4My1cdFx0XHRcdFx0ICAgICAgICovXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6MTk4NDpcdFx0LmRvaXQgPSBvdnNfY3RfbGltaXRfY21kX3NldCxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xOTg1LVx0fSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMTg6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzkwMwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IHByb21wdDoKCioqQW5hbHl6aW5nIHRoZSBSZXF1ZXN0OiBOZXRsaW5rIENvbW1hbmQgSGFuZGxlciBDb250ZXh0KioKCk9rYXksIHNvIHRoZSBwcm9tcHQgaW5kaWNhdGVzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBuZXRsaW5rIGNvbW1hbmQgaGFuZGxlci4gVGhhdCYjMzk7cyBhIGtleSBwaWVjZSBvZiBpbmZvcm1hdGlvbi4gVGhpcyBzdWdnZXN0cyB3ZSYjMzk7cmUgd29ya2luZyBhdCBhIGxvdyBsZXZlbCwgcHJvYmFibHkgd2l0aGluIGEga2VybmVsIGNvbnRleHQgb3IgYSBzeXN0ZW0gcHJvZ3JhbSB0aGF0IGludGVyYWN0cyBkaXJlY3RseSB3aXRoIHRoZSBrZXJuZWwmIzM5O3MgbmV0bGluayBpbnRlcmZhY2UuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCBhcyBJIGludGVycHJldCB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uLiBOZXRsaW5rIGlzIGFsbCBhYm91dCBlZmZpY2llbnQgaW50ZXItcHJvY2VzcyBjb21tdW5pY2F0aW9uLCBlc3BlY2lhbGx5IGZvciBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gYW5kIGNvbnRyb2wuCgpOZXh0LCBpdCBwb2ludHMgdG93YXJkcyBgb3ZzX2N0X2NoZWNrX2xpbWl0YC4gVGhlIGluY2x1c2lvbiBvZiBgb3ZzX2AgaW1wbGllcyB0aGlzIGlzIHJlbGF0ZWQgdG8gT3BlbiB2U3dpdGNoLCB3aGljaCBpcyBmdXJ0aGVyIGhlbHBmdWwgY29udGV4dC4gVGhlIGZ1bmN0aW9uIG5hbWUgYG92c19jdF9jaGVja19saW1pdGAgc3Ryb25nbHkgc3VnZ2VzdHMgd2UgYXJlIGRlYWxpbmcgd2l0aCBjb25uZWN0aW9uIHRyYWNraW5nLCBsaWtlbHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIE9wZW4gdlN3aXRjaCYjMzk7cyBmbG93IHRhYmxlIG1hbmFnZW1lbnQuIEFuZCAmIzM0O2xpbWl0JiMzNDsgaW1wbGllcyB0aGF0IGZ1bmN0aW9uIHdvdWxkIGJlIHJlbGF0ZWQgdG8gcmF0ZSBsaW1pdGluZyBvciByZXNvdXJjZSBleGhhdXN0aW9uIHByb3RlY3Rpb24uIFRoaXMgc3BlY2lmaWMgZnVuY3Rpb24gaXMgYSBjb250cm9sIHBsYW5lIGZ1bmN0aW9uLCByZWxhdGVkIHRvIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb25zIGZvciB0aGUgZGF0YXBhdGguIEkgd2FudCB0byBsb29rIGF0IGl0cyB1c2UsIHBhcmFtZXRlcnMgYW5kIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMTg6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b3ZzX2N0X2NoZWNrX2xpbWl0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9OTE3PXN0YXRpYyB1MzIgY3RfbGltaXRfZ2V0KGNvbnN0IHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbywgdTE2IHpvbmUpXG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTkzMC1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzo5MzE6c3RhdGljIGludCBvdnNfY3RfY2hlY2tfbGltaXQoc3RydWN0IG5ldCAqbmV0LFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTkzMi1cdFx0XHQgICAgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYz05NjE9c3RhdGljIGludCBvdnNfY3RfY29tbWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXksXG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTk4MC1cdFx0aWYgKCFuZl9jdF9pc19jb25maXJtZWQoY3QpKSB7XG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6OTgxOlx0XHRcdGVyciA9IG92c19jdF9jaGVja19saW1pdChuZXQsIHNrYiwgaW5mbyk7XG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtOTgyLVx0XHRcdGlmIChlcnIpIHtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9MTYyMz1zdGF0aWMgdm9pZCBvdnNfY3RfbGltaXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0KVxuLS1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xNjI5LVx0XHRcdFx0ICAgbG9ja2RlcF9vdnNsX2lzX2hlbGQoKSk7XG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6MTYzMDpcdC8qIG92c19jdF9jaGVja19saW1pdCgpIGFjY2Vzc2VzIHRoZSBpbmZvIHVuZGVyIHRoZSBkYXRhcGF0aCBSQ1UgbG9jay4gKi9cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xNjMxLVx0c3luY2hyb25pemVfcmN1KCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE4OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2MjEKCQkJCQkJCW91dHB1dDogMTY2CgkJCQkJCQl0aG91Z2h0czogMTM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIGlmIGl0IHdlcmUgbXkgb3duIHRob3VnaHQgcHJvY2VzczoKCioqRml4aW5nIHRoZSBSQ1UgSGFuZGxpbmcgYW5kIExvY2tpbmcgZm9yIGN0X2xpbWl0X2luZm8gaW4gT3BlbiB2U3dpdGNoIENvbm5lY3Rpb24gVHJhY2tpbmcqKgoKUmlnaHQsIHNvIHRoaXMgcGF0Y2ggaXMgY3J1Y2lhbCBmb3IgdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgKGN0KSBtb2R1bGUgd2l0aGluIE9wZW4gdlN3aXRjaCwgc3BlY2lmaWNhbGx5IHRhcmdldGluZyB0aGUgYGN0X2xpbWl0X2luZm9gIGRhdGEgc3RydWN0dXJlLiBJdCBsb29rcyBsaWtlIHRoZSBpc3N1ZSBzdGVtcyBmcm9tIHByb2JsZW1zIHdpdGggUmVhZC1Db3B5LVVwZGF0ZSAoUkNVKSBzeW5jaHJvbml6YXRpb24gYW5kIHJlbGF0ZWQgbG9ja2luZyBtZWNoYW5pc21zLiBUaGlzIGlzIGNyaXRpY2FsIGZvciBhbnkgY29uY3VycmVudCBkYXRhIHN0cnVjdHVyZXMsIHNvIGEgYnVnIHRoZXJlIG1lYW5zIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIGRhdGEgY29ycnVwdGlvbiwgb3IgZXZlbiBrZXJuZWwgcGFuaWNzLiBGcm9tIHRoZSBkZXNjcmlwdGlvbiwgdGhlIGZpeCBpcyBwcm9iYWJseSBlc3NlbnRpYWwgdG8gZW5zdXJlIGRhdGEgY29uc2lzdGVuY3kgd2hlbiBtdWx0aXBsZSB0aHJlYWRzIG9yIGNvcmVzIGFyZSBvcGVyYXRpbmcgb24gdGhlc2UgY29ubmVjdGlvbiBsaW1pdHMgc2ltdWx0YW5lb3VzbHkuCgpUaGUgY29uZmlndXJhdGlvbnMgaW52b2x2ZWQgYXJlIGBPUEVOVlNXSVRDSGAgYW5kIGBORVRGSUxURVJfQ09OTkNPVU5UYCwgd2hpY2gsIG9mIGNvdXJzZSwgbWVhbnMgdGhpcyBpcyBzcGVjaWZpY2FsbHkgcmVsZXZhbnQgd2hlbiBPcGVuIHZTd2l0Y2ggaXMgY29tcGlsZWQgYW5kIGRlcGxveWVkIHdpdGggY29ubmVjdGlvbiBjb3VudCBmdW5jdGlvbmFsaXR5IGVuYWJsZWQg4oCTIGEgY29tbW9uIHNjZW5hcmlvLCBvYnZpb3VzbHkuCgpOb3csIGZvY3VzaW5nIG9uIHRoZSBjb3JlIGZ1bmN0aW9ucyBtZW50aW9uZWQsIHRoZXkgYXJlIHRoZSBrZXkgdG8gbXkgYW5hbHlzaXM6IGBvdnNfY3RfbGltaXRfY21kX3NldGAsIGBvdnNfY3RfbGltaXRfY21kX2RlbGAsIGBvdnNfY3RfbGltaXRfY21kX2dldGAsIGBvdnNfY3RfY2hlY2tfbGltaXRgLCBgb3ZzX2N0X2xpbWl0X2luaXRgLCBhbmQgYG92c19jdF9saW1pdF9leGl0YC4gVGhlc2UgcmVwcmVzZW50IHRoZSBwcmltYXJ5IG9wZXJhdGlvbnM6IHNldHRpbmcsIGRlbGV0aW5nLCBhbmQgZ2V0dGluZyBsaW1pdCBjb25maWd1cmF0aW9ucywgY2hlY2tpbmcgd2hldGhlciBsaW1pdHMgYXJlIGV4Y2VlZGVkLCBhbmQgaW5pdGlhbGl6aW5nIGFuZCBleGl0aW5nIHRoZSBsaW1pdC1yZWxhdGVkIHJlc291cmNlcy4gVGhlIGZpeCBtdXN0IGJlIHdvcmtpbmcgdG8gYWRkcmVzcyByYWNlIGNvbmRpdGlvbnMgdGhhdCBhcmUgbGlrZWx5IHRvIG9jY3VyIGluIGFsbCBvZiB0aGVzZSBmdW5jdGlvbnMuIEnigJlsbCBuZWVkIHRvIGRlbHZlIGludG8gdGhlIGNvZGUgdG8gcmVhbGx5IHVuZGVyc3RhbmQgdGhlIG9yaWdpbmFsIGZsYXcgYW5kIHRoZSBwcmVjaXNlIGxvY2tpbmcgc3RyYXRlZ3kgaW1wbGVtZW50ZWQgdG8gcmVzb2x2ZSBpdC4KCkZpbmFsbHksIEnigJlsbCBuZWVkIHRvIHByb2Nlc3MgdGhlIHJlc3VsdHMgb2YgdGVzdGluZyB0aGlzIHBhdGNoIHVzaW5nIGBzZXQtcmVzdWx0c2AuIEhvcGVmdWxseSwgaXQmIzM5O3MgY29tcHJlaGVuc2l2ZSBlbm91Z2ggdG8gdmFsaWRhdGUgdGhlIGxvY2tpbmcgaW1wcm92ZW1lbnRzIGFuZCBydWxlIG91dCBwb3RlbnRpYWwgcmVncmVzc2lvbnMuIFRoaXMgbWVhbnMgSSYjMzk7bSBleHBlY3RpbmcgZGV0YWlsZWQgb3V0cHV0IHJlZ2FyZGluZyBsb2NrIGNvbnRlbnRpb24sIFJDVSBncmFjZSBwZXJpb2QgdXNhZ2UsIGFuZCBhbnkgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGltcGFjdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE4OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtPUEVOVlNXSVRDSCYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfQ09OTkNPVU5UJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7b3ZzX2N0X2xpbWl0X2NtZF9zZXQmIzM0OywKICAgICYjMzQ7b3ZzX2N0X2xpbWl0X2NtZF9kZWwmIzM0OywKICAgICYjMzQ7b3ZzX2N0X2xpbWl0X2NtZF9nZXQmIzM0OywKICAgICYjMzQ7b3ZzX2N0X2NoZWNrX2xpbWl0JiMzNDssCiAgICAmIzM0O292c19jdF9saW1pdF9pbml0JiMzNDssCiAgICAmIzM0O292c19jdF9saW1pdF9leGl0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIFJDVSBzeW5jaHJvbml6YXRpb24gYW5kIGxvY2tpbmcgaXNzdWVzIGFyb3VuZCB0aGUgT3BlbiB2U3dpdGNoIGNvbm5lY3Rpb24gdHJhY2tpbmcgbGltaXQgY29uZmlndXJhdGlvbi4gSXQgbW9kaWZpZXMgbmV0bGluayBjb21tYW5kIGhhbmRsZXJzIGFuZCB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBsaW1pdCBjaGVjayBmdW5jdGlvbi4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlc2UgY29tbWFuZCBoYW5kbGVycyBhbmQgdGhlIGRhdGFwYXRoIGNvbm5lY3Rpb24gdHJhY2tpbmcgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09QRU5WU1dJVENIJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9DT05OQ09VTlQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtvdnNfY3RfbGltaXRfY21kX3NldCYjMzQ7LAogICAgJiMzNDtvdnNfY3RfbGltaXRfY21kX2RlbCYjMzQ7LAogICAgJiMzNDtvdnNfY3RfbGltaXRfY21kX2dldCYjMzQ7LAogICAgJiMzNDtvdnNfY3RfY2hlY2tfbGltaXQmIzM0OywKICAgICYjMzQ7b3ZzX2N0X2xpbWl0X2luaXQmIzM0OywKICAgICYjMzQ7b3ZzX2N0X2xpbWl0X2V4aXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgUkNVIHN5bmNocm9uaXphdGlvbiBhbmQgbG9ja2luZyBpc3N1ZXMgYXJvdW5kIHRoZSBPcGVuIHZTd2l0Y2ggY29ubmVjdGlvbiB0cmFja2luZyBsaW1pdCBjb25maWd1cmF0aW9uLiBJdCBtb2RpZmllcyBuZXRsaW5rIGNvbW1hbmQgaGFuZGxlcnMgYW5kIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGxpbWl0IGNoZWNrIGZ1bmN0aW9uLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGVzZSBjb21tYW5kIGhhbmRsZXJzIGFuZCB0aGUgZGF0YXBhdGggY29ubmVjdGlvbiB0cmFja2luZyBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE4OjUwOjQ1LjgxNjM0OTMwNVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3ODY2NTI0MzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9QRU5WU1dJVENIXCIsXG4gICAgXCJORVRGSUxURVJfQ09OTkNPVU5UXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib3ZzX2N0X2xpbWl0X2NtZF9zZXRcIixcbiAgICBcIm92c19jdF9saW1pdF9jbWRfZGVsXCIsXG4gICAgXCJvdnNfY3RfbGltaXRfY21kX2dldFwiLFxuICAgIFwib3ZzX2N0X2NoZWNrX2xpbWl0XCIsXG4gICAgXCJvdnNfY3RfbGltaXRfaW5pdFwiLFxuICAgIFwib3ZzX2N0X2xpbWl0X2V4aXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBSQ1Ugc3luY2hyb25pemF0aW9uIGFuZCBsb2NraW5nIGlzc3VlcyBhcm91bmQgdGhlIE9wZW4gdlN3aXRjaCBjb25uZWN0aW9uIHRyYWNraW5nIGxpbWl0IGNvbmZpZ3VyYXRpb24uIEl0IG1vZGlmaWVzIG5ldGxpbmsgY29tbWFuZCBoYW5kbGVycyBhbmQgdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgbGltaXQgY2hlY2sgZnVuY3Rpb24uIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZXNlIGNvbW1hbmQgaGFuZGxlcnMgYW5kIHRoZSBkYXRhcGF0aCBjb25uZWN0aW9uIHRyYWNraW5nIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxODo1MDo0NS44MTYzNTcwNjVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2NjU1MTMzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGEwOWVmM2NkYjQ1MTY5YjdiNjZlNmFmYTgxMTY2MTQzNzk5YjQwOGZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdWwgMjMgMTg6NTA6NDQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jIGIvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jXFxuaW5kZXggOTU2OTdkNGUxNmU2NGUuLjVjOWE2MDdkMjdhN2I2IDEwMDY0NFxcbi0tLSBhL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY1xcbisrKyBiL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY1xcbkBAIC05MzMsMTAgKzkzMywxNCBAQCBzdGF0aWMgaW50IG92c19jdF9jaGVja19saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBvdnNfY29ubnRyYWNrX2luZm8gKmluZm8pXFxuIHtcXG4gXFx0c3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhuZXQsIG92c19uZXRfaWQpO1xcbi1cXHRjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm8gPSBvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvO1xcbitcXHRjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm87XFxuIFxcdHUzMiBwZXJfem9uZV9saW1pdCwgY29ubmVjdGlvbnM7XFxuIFxcdHUzMiBjb25uY291bnRfa2V5O1xcbiBcXG4rXFx0Y3RfbGltaXRfaW5mbyA9IHJjdV9kZXJlZmVyZW5jZShvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvKTtcXG4rXFx0aWYgKCFjdF9saW1pdF9pbmZvKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuIFxcdGNvbm5jb3VudF9rZXkgPSBpbmZvLVxcdTAwM2V6b25lLmlkO1xcbiBcXG4gXFx0cGVyX3pvbmVfbGltaXQgPSBjdF9saW1pdF9nZXQoY3RfbGltaXRfaW5mbywgaW5mby1cXHUwMDNlem9uZS5pZCk7XFxuQEAgLTE1ODUsNDAgKzE1ODksNDcgQEAgc3RhdGljIHZvaWQgX19vdnNfY3RfZnJlZV9hY3Rpb24oc3RydWN0IG92c19jb25udHJhY2tfaW5mbyAqY3RfaW5mbylcXG4gI2lmXFx0SVNfRU5BQkxFRChDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVClcXG4gc3RhdGljIGludCBvdnNfY3RfbGltaXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0KVxcbiB7XFxuK1xcdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbztcXG4gXFx0aW50IGksIGVycjtcXG4gXFxuLVxcdG92c19uZXQtXFx1MDAzZWN0X2xpbWl0X2luZm8gPSBrbWFsbG9jX29iaigqb3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mbyk7XFxuLVxcdGlmICghb3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mbylcXG4rXFx0aW5mbyA9IGttYWxsb2Nfb2JqKCppbmZvKTtcXG4rXFx0aWYgKCFpbmZvKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuLVxcdG92c19uZXQtXFx1MDAzZWN0X2xpbWl0X2luZm8tXFx1MDAzZWRlZmF1bHRfbGltaXQgPSBPVlNfQ1RfTElNSVRfREVGQVVMVDtcXG4tXFx0b3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mby1cXHUwMDNlbGltaXRzID1cXG4rXFx0aW5mby1cXHUwMDNlZGVmYXVsdF9saW1pdCA9IE9WU19DVF9MSU1JVF9ERUZBVUxUO1xcbitcXHRpbmZvLVxcdTAwM2VsaW1pdHMgPVxcbiBcXHRcXHRrbWFsbG9jX29ianMoc3RydWN0IGhsaXN0X2hlYWQsIENUX0xJTUlUX0hBU0hfQlVDS0VUUyk7XFxuLVxcdGlmICghb3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mby1cXHUwMDNlbGltaXRzKSB7XFxuLVxcdFxcdGtmcmVlKG92c19uZXQtXFx1MDAzZWN0X2xpbWl0X2luZm8pO1xcbitcXHRpZiAoIWluZm8tXFx1MDAzZWxpbWl0cykge1xcbitcXHRcXHRrZnJlZShpbmZvKTtcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcdH1cXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBDVF9MSU1JVF9IQVNIX0JVQ0tFVFM7IGkrKylcXG4tXFx0XFx0SU5JVF9ITElTVF9IRUFEKFxcdTAwMjZvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvLVxcdTAwM2VsaW1pdHNbaV0pO1xcbitcXHRcXHRJTklUX0hMSVNUX0hFQUQoXFx1MDAyNmluZm8tXFx1MDAzZWxpbWl0c1tpXSk7XFxuIFxcbi1cXHRvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvLVxcdTAwM2VkYXRhID0gbmZfY29ubmNvdW50X2luaXQobmV0LCBzaXplb2YodTMyKSk7XFxuK1xcdGluZm8tXFx1MDAzZWRhdGEgPSBuZl9jb25uY291bnRfaW5pdChuZXQsIHNpemVvZih1MzIpKTtcXG4gXFxuLVxcdGlmIChJU19FUlIob3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mby1cXHUwMDNlZGF0YSkpIHtcXG4tXFx0XFx0ZXJyID0gUFRSX0VSUihvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvLVxcdTAwM2VkYXRhKTtcXG4tXFx0XFx0a2ZyZWUob3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mby1cXHUwMDNlbGltaXRzKTtcXG4tXFx0XFx0a2ZyZWUob3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mbyk7XFxuK1xcdGlmIChJU19FUlIoaW5mby1cXHUwMDNlZGF0YSkpIHtcXG4rXFx0XFx0ZXJyID0gUFRSX0VSUihpbmZvLVxcdTAwM2VkYXRhKTtcXG4rXFx0XFx0a2ZyZWUoaW5mby1cXHUwMDNlbGltaXRzKTtcXG4rXFx0XFx0a2ZyZWUoaW5mbyk7XFxuIFxcdFxcdHByX2VycihcXFwib3BlbnZzd2l0Y2g6IGZhaWxlZCB0byBpbml0IG5mX2Nvbm5jb3VudCAlZFxcXFxuXFxcIiwgZXJyKTtcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0fVxcbitcXHRyY3VfYXNzaWduX3BvaW50ZXIob3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mbywgaW5mbyk7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBvdnNfY3RfbGltaXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0KVxcbiB7XFxuLVxcdGNvbnN0IHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbyA9IG92c19uZXQtXFx1MDAzZWN0X2xpbWl0X2luZm87XFxuK1xcdGNvbnN0IHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbztcXG4gXFx0aW50IGk7XFxuIFxcbitcXHRpbmZvID0gcmN1X3JlcGxhY2VfcG9pbnRlcihvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvLCBOVUxMLFxcbitcXHRcXHRcXHRcXHQgICBsb2NrZGVwX292c2xfaXNfaGVsZCgpKTtcXG4rXFx0Lyogb3ZzX2N0X2NoZWNrX2xpbWl0KCkgYWNjZXNzZXMgdGhlIGluZm8gdW5kZXIgdGhlIGRhdGFwYXRoIFJDVSBsb2NrLiAqL1xcbitcXHRzeW5jaHJvbml6ZV9yY3UoKTtcXG4rXFxuIFxcdG5mX2Nvbm5jb3VudF9kZXN0cm95KG5ldCwgaW5mby1cXHUwMDNlZGF0YSk7XFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBDVF9MSU1JVF9IQVNIX0JVQ0tFVFM7ICsraSkge1xcbiBcXHRcXHRzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZCA9IFxcdTAwMjZpbmZvLVxcdTAwM2VsaW1pdHNbaV07XFxuQEAgLTE2NzgsOSArMTY4OSw3IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LFxcbiBcXHR3aGlsZSAocmVtIFxcdTAwM2U9IHNpemVvZigqem9uZV9saW1pdCkpIHtcXG4gXFx0XFx0aWYgKHVubGlrZWx5KHpvbmVfbGltaXQtXFx1MDAzZXpvbmVfaWQgPT1cXG4gXFx0XFx0XFx0XFx0T1ZTX1pPTkVfTElNSVRfREVGQVVMVF9aT05FKSkge1xcbi1cXHRcXHRcXHRvdnNfbG9jaygpO1xcbiBcXHRcXHRcXHRpbmZvLVxcdTAwM2VkZWZhdWx0X2xpbWl0ID0gem9uZV9saW1pdC1cXHUwMDNlbGltaXQ7XFxuLVxcdFxcdFxcdG92c191bmxvY2soKTtcXG4gXFx0XFx0fSBlbHNlIGlmICh1bmxpa2VseSghY2hlY2tfem9uZV9pZChcXG4gXFx0XFx0XFx0XFx0em9uZV9saW1pdC1cXHUwMDNlem9uZV9pZCwgXFx1MDAyNnpvbmUpKSkge1xcbiBcXHRcXHRcXHRPVlNfTkxFUlIodHJ1ZSwgXFxcInpvbmUgaWQgaXMgb3V0IG9mIHJhbmdlXFxcIik7XFxuQEAgLTE2OTQsOSArMTcwMyw3IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LFxcbiBcXHRcXHRcXHRjdF9saW1pdC1cXHUwMDNlem9uZSA9IHpvbmU7XFxuIFxcdFxcdFxcdGN0X2xpbWl0LVxcdTAwM2VsaW1pdCA9IHpvbmVfbGltaXQtXFx1MDAzZWxpbWl0O1xcbiBcXG4tXFx0XFx0XFx0b3ZzX2xvY2soKTtcXG4gXFx0XFx0XFx0Y3RfbGltaXRfc2V0KGluZm8sIGN0X2xpbWl0KTtcXG4tXFx0XFx0XFx0b3ZzX3VubG9jaygpO1xcbiBcXHRcXHR9XFxuIFxcdFxcdHJlbSAtPSBOTEFfQUxJR04oc2l6ZW9mKCp6b25lX2xpbWl0KSk7XFxuIFxcdFxcdHpvbmVfbGltaXQgPSAoc3RydWN0IG92c196b25lX2xpbWl0ICopKCh1OCAqKXpvbmVfbGltaXQgK1xcbkBAIC0xNzIyLDE2ICsxNzI5LDEyIEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2RlbF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LFxcbiBcXHR3aGlsZSAocmVtIFxcdTAwM2U9IHNpemVvZigqem9uZV9saW1pdCkpIHtcXG4gXFx0XFx0aWYgKHVubGlrZWx5KHpvbmVfbGltaXQtXFx1MDAzZXpvbmVfaWQgPT1cXG4gXFx0XFx0XFx0XFx0T1ZTX1pPTkVfTElNSVRfREVGQVVMVF9aT05FKSkge1xcbi1cXHRcXHRcXHRvdnNfbG9jaygpO1xcbiBcXHRcXHRcXHRpbmZvLVxcdTAwM2VkZWZhdWx0X2xpbWl0ID0gT1ZTX0NUX0xJTUlUX0RFRkFVTFQ7XFxuLVxcdFxcdFxcdG92c191bmxvY2soKTtcXG4gXFx0XFx0fSBlbHNlIGlmICh1bmxpa2VseSghY2hlY2tfem9uZV9pZChcXG4gXFx0XFx0XFx0XFx0em9uZV9saW1pdC1cXHUwMDNlem9uZV9pZCwgXFx1MDAyNnpvbmUpKSkge1xcbiBcXHRcXHRcXHRPVlNfTkxFUlIodHJ1ZSwgXFxcInpvbmUgaWQgaXMgb3V0IG9mIHJhbmdlXFxcIik7XFxuIFxcdFxcdH0gZWxzZSB7XFxuLVxcdFxcdFxcdG92c19sb2NrKCk7XFxuIFxcdFxcdFxcdGN0X2xpbWl0X2RlbChpbmZvLCB6b25lKTtcXG4tXFx0XFx0XFx0b3ZzX3VubG9jaygpO1xcbiBcXHRcXHR9XFxuIFxcdFxcdHJlbSAtPSBOTEFfQUxJR04oc2l6ZW9mKCp6b25lX2xpbWl0KSk7XFxuIFxcdFxcdHpvbmVfbGltaXQgPSAoc3RydWN0IG92c196b25lX2xpbWl0ICopKCh1OCAqKXpvbmVfbGltaXQgK1xcbkBAIC0xODUwLDcgKzE4NTMsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfc2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIFxcdHN0cnVjdCBza19idWZmICpyZXBseTtcXG4gXFx0c3RydWN0IG92c19oZWFkZXIgKm92c19yZXBseV9oZWFkZXI7XFxuIFxcdHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMoc29ja19uZXQoc2tiLVxcdTAwM2VzayksIG92c19uZXRfaWQpO1xcbi1cXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm8gPSBvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvO1xcbitcXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm87XFxuIFxcdGludCBlcnI7XFxuIFxcbiBcXHRyZXBseSA9IG92c19jdF9saW1pdF9jbWRfcmVwbHlfc3RhcnQoaW5mbywgT1ZTX0NUX0xJTUlUX0NNRF9TRVQsXFxuQEAgLTE4NjMsMTYgKzE4NjYsMjIgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiBcXHRcXHRnb3RvIGV4aXRfZXJyO1xcbiBcXHR9XFxuIFxcbitcXHRvdnNfbG9jaygpO1xcbitcXHRjdF9saW1pdF9pbmZvID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIGxvY2tkZXBfb3ZzbF9pc19oZWxkKCkpO1xcbiBcXHRlcnIgPSBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSxcXG4gXFx0XFx0XFx0XFx0XFx0ICBjdF9saW1pdF9pbmZvKTtcXG4gXFx0aWYgKGVycilcXG4tXFx0XFx0Z290byBleGl0X2VycjtcXG4rXFx0XFx0Z290byBleGl0X3VubG9jaztcXG4gXFxuIFxcdHN0YXRpY19icmFuY2hfZW5hYmxlKFxcdTAwMjZvdnNfY3RfbGltaXRfZW5hYmxlZCk7XFxuIFxcbiBcXHRnZW5sbXNnX2VuZChyZXBseSwgb3ZzX3JlcGx5X2hlYWRlcik7XFxuK1xcdG92c191bmxvY2soKTtcXG4gXFx0cmV0dXJuIGdlbmxtc2dfcmVwbHkocmVwbHksIGluZm8pO1xcbiBcXG4rZXhpdF91bmxvY2s6XFxuK1xcdG92c191bmxvY2soKTtcXG4gZXhpdF9lcnI6XFxuIFxcdG5sbXNnX2ZyZWUocmVwbHkpO1xcbiBcXHRyZXR1cm4gZXJyO1xcbkBAIC0xODg0LDcgKzE4OTMsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfZGVsKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIFxcdHN0cnVjdCBza19idWZmICpyZXBseTtcXG4gXFx0c3RydWN0IG92c19oZWFkZXIgKm92c19yZXBseV9oZWFkZXI7XFxuIFxcdHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMoc29ja19uZXQoc2tiLVxcdTAwM2VzayksIG92c19uZXRfaWQpO1xcbi1cXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm8gPSBvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvO1xcbitcXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm87XFxuIFxcdGludCBlcnI7XFxuIFxcbiBcXHRyZXBseSA9IG92c19jdF9saW1pdF9jbWRfcmVwbHlfc3RhcnQoaW5mbywgT1ZTX0NUX0xJTUlUX0NNRF9ERUwsXFxuQEAgLTE4OTcsMTQgKzE5MDYsMjAgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiBcXHRcXHRnb3RvIGV4aXRfZXJyO1xcbiBcXHR9XFxuIFxcbitcXHRvdnNfbG9jaygpO1xcbitcXHRjdF9saW1pdF9pbmZvID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIGxvY2tkZXBfb3ZzbF9pc19oZWxkKCkpO1xcbiBcXHRlcnIgPSBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSxcXG4gXFx0XFx0XFx0XFx0XFx0ICBjdF9saW1pdF9pbmZvKTtcXG4gXFx0aWYgKGVycilcXG4tXFx0XFx0Z290byBleGl0X2VycjtcXG4rXFx0XFx0Z290byBleGl0X3VubG9jaztcXG4gXFxuIFxcdGdlbmxtc2dfZW5kKHJlcGx5LCBvdnNfcmVwbHlfaGVhZGVyKTtcXG4rXFx0b3ZzX3VubG9jaygpO1xcbiBcXHRyZXR1cm4gZ2VubG1zZ19yZXBseShyZXBseSwgaW5mbyk7XFxuIFxcbitleGl0X3VubG9jazpcXG4rXFx0b3ZzX3VubG9jaygpO1xcbiBleGl0X2VycjpcXG4gXFx0bmxtc2dfZnJlZShyZXBseSk7XFxuIFxcdHJldHVybiBlcnI7XFxuQEAgLTE5MTgsNyArMTkzMyw3IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9nZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4gXFx0c3RydWN0IG92c19oZWFkZXIgKm92c19yZXBseV9oZWFkZXI7XFxuIFxcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi1cXHUwMDNlc2spO1xcbiBcXHRzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKG5ldCwgb3ZzX25ldF9pZCk7XFxuLVxcdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbyA9IG92c19uZXQtXFx1MDAzZWN0X2xpbWl0X2luZm87XFxuK1xcdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbztcXG4gXFx0aW50IGVycjtcXG4gXFxuIFxcdHJlcGx5ID0gb3ZzX2N0X2xpbWl0X2NtZF9yZXBseV9zdGFydChpbmZvLCBPVlNfQ1RfTElNSVRfQ01EX0dFVCxcXG5AQCAtMTkzMiwyMyArMTk0NywyOSBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfZ2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIFxcdFxcdGdvdG8gZXhpdF9lcnI7XFxuIFxcdH1cXG4gXFxuK1xcdG92c19sb2NrKCk7XFxuK1xcdGN0X2xpbWl0X2luZm8gPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKG92c19uZXQtXFx1MDAzZWN0X2xpbWl0X2luZm8sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgbG9ja2RlcF9vdnNsX2lzX2hlbGQoKSk7XFxuIFxcdGlmIChhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdKSB7XFxuIFxcdFxcdGVyciA9IG92c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChcXG4gXFx0XFx0XFx0bmV0LCBhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdLCBjdF9saW1pdF9pbmZvLFxcbiBcXHRcXHRcXHRyZXBseSk7XFxuIFxcdFxcdGlmIChlcnIpXFxuLVxcdFxcdFxcdGdvdG8gZXhpdF9lcnI7XFxuK1xcdFxcdFxcdGdvdG8gZXhpdF91bmxvY2s7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdGVyciA9IG92c19jdF9saW1pdF9nZXRfYWxsX3pvbmVfbGltaXQobmV0LCBjdF9saW1pdF9pbmZvLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgICByZXBseSk7XFxuIFxcdFxcdGlmIChlcnIpXFxuLVxcdFxcdFxcdGdvdG8gZXhpdF9lcnI7XFxuK1xcdFxcdFxcdGdvdG8gZXhpdF91bmxvY2s7XFxuIFxcdH1cXG4gXFxuIFxcdG5sYV9uZXN0X2VuZChyZXBseSwgbmxhX3JlcGx5KTtcXG4gXFx0Z2VubG1zZ19lbmQocmVwbHksIG92c19yZXBseV9oZWFkZXIpO1xcbitcXHRvdnNfdW5sb2NrKCk7XFxuIFxcdHJldHVybiBnZW5sbXNnX3JlcGx5KHJlcGx5LCBpbmZvKTtcXG4gXFxuK2V4aXRfdW5sb2NrOlxcbitcXHRvdnNfdW5sb2NrKCk7XFxuIGV4aXRfZXJyOlxcbiBcXHRubG1zZ19mcmVlKHJlcGx5KTtcXG4gXFx0cmV0dXJuIGVycjtcXG5kaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmggYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaFxcbmluZGV4IDY5NjY0MGU4OGZhN2UzLi45M2UxMWU0NjhkMTczZiAxMDA2NDRcXG4tLS0gYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaFxcbisrKyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oXFxuQEAgLTE3Miw3ICsxNzIsNyBAQCBzdHJ1Y3Qgb3ZzX25ldCB7XFxuIFxcdHN0cnVjdCB3b3JrX3N0cnVjdCBkcF9ub3RpZnlfd29yaztcXG4gXFx0c3RydWN0IGRlbGF5ZWRfd29yayBtYXNrc19yZWJhbGFuY2U7XFxuICNpZlxcdElTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpXFxuLVxcdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbztcXG4rXFx0c3RydWN0IG92c19jdF9saW1pdF9pbmZvIF9fcmN1ICpjdF9saW1pdF9pbmZvO1xcbiAjZW5kaWZcXG4gXFx0Ym9vbCB4dF9sYWJlbDtcXG4gfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTg6NTA6NDYuNDgzODU3Mzk0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MzcxOTkwMDQzNjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiT1BFTlZTV0lUQ0hcIixcbiAgICBcIk5FVEZJTFRFUl9DT05OQ09VTlRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJvdnNfY3RfbGltaXRfY21kX3NldFwiLFxuICAgIFwib3ZzX2N0X2xpbWl0X2NtZF9kZWxcIixcbiAgICBcIm92c19jdF9saW1pdF9jbWRfZ2V0XCIsXG4gICAgXCJvdnNfY3RfY2hlY2tfbGltaXRcIixcbiAgICBcIm92c19jdF9saW1pdF9pbml0XCIsXG4gICAgXCJvdnNfY3RfbGltaXRfZXhpdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIFJDVSBzeW5jaHJvbml6YXRpb24gYW5kIGxvY2tpbmcgaXNzdWVzIGFyb3VuZCB0aGUgT3BlbiB2U3dpdGNoIGNvbm5lY3Rpb24gdHJhY2tpbmcgbGltaXQgY29uZmlndXJhdGlvbi4gSXQgbW9kaWZpZXMgbmV0bGluayBjb21tYW5kIGhhbmRsZXJzIGFuZCB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBsaW1pdCBjaGVjayBmdW5jdGlvbi4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlc2UgY29tbWFuZCBoYW5kbGVycyBhbmQgdGhlIGRhdGFwYXRoIGNvbm5lY3Rpb24gdHJhY2tpbmcgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYTA5ZWYzY2RiNDUxNjliN2I2NmU2YWZhODExNjYxNDM3OTliNDA4ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDIzIDE4OjUwOjQ0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jIGIvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jXG5pbmRleCA5NTY5N2Q0ZTE2ZTY0ZS4uNWM5YTYwN2QyN2E3YjYgMTAwNjQ0XG4tLS0gYS9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmNcbisrKyBiL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY1xuQEAgLTkzMywxMCArOTMzLDE0IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2NoZWNrX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3Qgb3ZzX2Nvbm50cmFja19pbmZvICppbmZvKVxuIHtcbiBcdHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMobmV0LCBvdnNfbmV0X2lkKTtcbi1cdGNvbnN0IHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbyA9IG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbztcbitcdGNvbnN0IHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbztcbiBcdHUzMiBwZXJfem9uZV9saW1pdCwgY29ubmVjdGlvbnM7XG4gXHR1MzIgY29ubmNvdW50X2tleTtcbiBcbitcdGN0X2xpbWl0X2luZm8gPSByY3VfZGVyZWZlcmVuY2Uob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvKTtcbitcdGlmICghY3RfbGltaXRfaW5mbylcbitcdFx0cmV0dXJuIDA7XG4rXG4gXHRjb25uY291bnRfa2V5ID0gaW5mby1cdTAwM2V6b25lLmlkO1xuIFxuIFx0cGVyX3pvbmVfbGltaXQgPSBjdF9saW1pdF9nZXQoY3RfbGltaXRfaW5mbywgaW5mby1cdTAwM2V6b25lLmlkKTtcbkBAIC0xNTg1LDQwICsxNTg5LDQ3IEBAIHN0YXRpYyB2b2lkIF9fb3ZzX2N0X2ZyZWVfYWN0aW9uKHN0cnVjdCBvdnNfY29ubnRyYWNrX2luZm8gKmN0X2luZm8pXG4gI2lmXHRJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKVxuIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2luaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldClcbiB7XG4rXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm87XG4gXHRpbnQgaSwgZXJyO1xuIFxuLVx0b3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvID0ga21hbGxvY19vYmooKm92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyk7XG4tXHRpZiAoIW92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbylcbitcdGluZm8gPSBrbWFsbG9jX29iaigqaW5mbyk7XG4rXHRpZiAoIWluZm8pXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuLVx0b3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvLVx1MDAzZWRlZmF1bHRfbGltaXQgPSBPVlNfQ1RfTElNSVRfREVGQVVMVDtcbi1cdG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VsaW1pdHMgPVxuK1x0aW5mby1cdTAwM2VkZWZhdWx0X2xpbWl0ID0gT1ZTX0NUX0xJTUlUX0RFRkFVTFQ7XG4rXHRpbmZvLVx1MDAzZWxpbWl0cyA9XG4gXHRcdGttYWxsb2Nfb2JqcyhzdHJ1Y3QgaGxpc3RfaGVhZCwgQ1RfTElNSVRfSEFTSF9CVUNLRVRTKTtcbi1cdGlmICghb3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvLVx1MDAzZWxpbWl0cykge1xuLVx0XHRrZnJlZShvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pO1xuK1x0aWYgKCFpbmZvLVx1MDAzZWxpbWl0cykge1xuK1x0XHRrZnJlZShpbmZvKTtcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHR9XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBDVF9MSU1JVF9IQVNIX0JVQ0tFVFM7IGkrKylcbi1cdFx0SU5JVF9ITElTVF9IRUFEKFx1MDAyNm92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VsaW1pdHNbaV0pO1xuK1x0XHRJTklUX0hMSVNUX0hFQUQoXHUwMDI2aW5mby1cdTAwM2VsaW1pdHNbaV0pO1xuIFxuLVx0b3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvLVx1MDAzZWRhdGEgPSBuZl9jb25uY291bnRfaW5pdChuZXQsIHNpemVvZih1MzIpKTtcbitcdGluZm8tXHUwMDNlZGF0YSA9IG5mX2Nvbm5jb3VudF9pbml0KG5ldCwgc2l6ZW9mKHUzMikpO1xuIFxuLVx0aWYgKElTX0VSUihvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8tXHUwMDNlZGF0YSkpIHtcbi1cdFx0ZXJyID0gUFRSX0VSUihvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8tXHUwMDNlZGF0YSk7XG4tXHRcdGtmcmVlKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VsaW1pdHMpO1xuLVx0XHRrZnJlZShvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pO1xuK1x0aWYgKElTX0VSUihpbmZvLVx1MDAzZWRhdGEpKSB7XG4rXHRcdGVyciA9IFBUUl9FUlIoaW5mby1cdTAwM2VkYXRhKTtcbitcdFx0a2ZyZWUoaW5mby1cdTAwM2VsaW1pdHMpO1xuK1x0XHRrZnJlZShpbmZvKTtcbiBcdFx0cHJfZXJyKFwib3BlbnZzd2l0Y2g6IGZhaWxlZCB0byBpbml0IG5mX2Nvbm5jb3VudCAlZFxcblwiLCBlcnIpO1xuIFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuK1x0cmN1X2Fzc2lnbl9wb2ludGVyKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbywgaW5mbyk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgb3ZzX2N0X2xpbWl0X2V4aXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldClcbiB7XG4tXHRjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8gPSBvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm87XG4rXHRjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm87XG4gXHRpbnQgaTtcbiBcbitcdGluZm8gPSByY3VfcmVwbGFjZV9wb2ludGVyKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbywgTlVMTCxcbitcdFx0XHRcdCAgIGxvY2tkZXBfb3ZzbF9pc19oZWxkKCkpO1xuK1x0Lyogb3ZzX2N0X2NoZWNrX2xpbWl0KCkgYWNjZXNzZXMgdGhlIGluZm8gdW5kZXIgdGhlIGRhdGFwYXRoIFJDVSBsb2NrLiAqL1xuK1x0c3luY2hyb25pemVfcmN1KCk7XG4rXG4gXHRuZl9jb25uY291bnRfZGVzdHJveShuZXQsIGluZm8tXHUwMDNlZGF0YSk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBDVF9MSU1JVF9IQVNIX0JVQ0tFVFM7ICsraSkge1xuIFx0XHRzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZCA9IFx1MDAyNmluZm8tXHUwMDNlbGltaXRzW2ldO1xuQEAgLTE2NzgsOSArMTY4OSw3IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LFxuIFx0d2hpbGUgKHJlbSBcdTAwM2U9IHNpemVvZigqem9uZV9saW1pdCkpIHtcbiBcdFx0aWYgKHVubGlrZWx5KHpvbmVfbGltaXQtXHUwMDNlem9uZV9pZCA9PVxuIFx0XHRcdFx0T1ZTX1pPTkVfTElNSVRfREVGQVVMVF9aT05FKSkge1xuLVx0XHRcdG92c19sb2NrKCk7XG4gXHRcdFx0aW5mby1cdTAwM2VkZWZhdWx0X2xpbWl0ID0gem9uZV9saW1pdC1cdTAwM2VsaW1pdDtcbi1cdFx0XHRvdnNfdW5sb2NrKCk7XG4gXHRcdH0gZWxzZSBpZiAodW5saWtlbHkoIWNoZWNrX3pvbmVfaWQoXG4gXHRcdFx0XHR6b25lX2xpbWl0LVx1MDAzZXpvbmVfaWQsIFx1MDAyNnpvbmUpKSkge1xuIFx0XHRcdE9WU19OTEVSUih0cnVlLCBcInpvbmUgaWQgaXMgb3V0IG9mIHJhbmdlXCIpO1xuQEAgLTE2OTQsOSArMTcwMyw3IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LFxuIFx0XHRcdGN0X2xpbWl0LVx1MDAzZXpvbmUgPSB6b25lO1xuIFx0XHRcdGN0X2xpbWl0LVx1MDAzZWxpbWl0ID0gem9uZV9saW1pdC1cdTAwM2VsaW1pdDtcbiBcbi1cdFx0XHRvdnNfbG9jaygpO1xuIFx0XHRcdGN0X2xpbWl0X3NldChpbmZvLCBjdF9saW1pdCk7XG4tXHRcdFx0b3ZzX3VubG9jaygpO1xuIFx0XHR9XG4gXHRcdHJlbSAtPSBOTEFfQUxJR04oc2l6ZW9mKCp6b25lX2xpbWl0KSk7XG4gXHRcdHpvbmVfbGltaXQgPSAoc3RydWN0IG92c196b25lX2xpbWl0ICopKCh1OCAqKXpvbmVfbGltaXQgK1xuQEAgLTE3MjIsMTYgKzE3MjksMTIgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsXG4gXHR3aGlsZSAocmVtIFx1MDAzZT0gc2l6ZW9mKCp6b25lX2xpbWl0KSkge1xuIFx0XHRpZiAodW5saWtlbHkoem9uZV9saW1pdC1cdTAwM2V6b25lX2lkID09XG4gXHRcdFx0XHRPVlNfWk9ORV9MSU1JVF9ERUZBVUxUX1pPTkUpKSB7XG4tXHRcdFx0b3ZzX2xvY2soKTtcbiBcdFx0XHRpbmZvLVx1MDAzZWRlZmF1bHRfbGltaXQgPSBPVlNfQ1RfTElNSVRfREVGQVVMVDtcbi1cdFx0XHRvdnNfdW5sb2NrKCk7XG4gXHRcdH0gZWxzZSBpZiAodW5saWtlbHkoIWNoZWNrX3pvbmVfaWQoXG4gXHRcdFx0XHR6b25lX2xpbWl0LVx1MDAzZXpvbmVfaWQsIFx1MDAyNnpvbmUpKSkge1xuIFx0XHRcdE9WU19OTEVSUih0cnVlLCBcInpvbmUgaWQgaXMgb3V0IG9mIHJhbmdlXCIpO1xuIFx0XHR9IGVsc2Uge1xuLVx0XHRcdG92c19sb2NrKCk7XG4gXHRcdFx0Y3RfbGltaXRfZGVsKGluZm8sIHpvbmUpO1xuLVx0XHRcdG92c191bmxvY2soKTtcbiBcdFx0fVxuIFx0XHRyZW0gLT0gTkxBX0FMSUdOKHNpemVvZigqem9uZV9saW1pdCkpO1xuIFx0XHR6b25lX2xpbWl0ID0gKHN0cnVjdCBvdnNfem9uZV9saW1pdCAqKSgodTggKil6b25lX2xpbWl0ICtcbkBAIC0xODUwLDcgKzE4NTMsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfc2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqcmVwbHk7XG4gXHRzdHJ1Y3Qgb3ZzX2hlYWRlciAqb3ZzX3JlcGx5X2hlYWRlcjtcbiBcdHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMoc29ja19uZXQoc2tiLVx1MDAzZXNrKSwgb3ZzX25ldF9pZCk7XG4tXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm8gPSBvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm87XG4rXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm87XG4gXHRpbnQgZXJyO1xuIFxuIFx0cmVwbHkgPSBvdnNfY3RfbGltaXRfY21kX3JlcGx5X3N0YXJ0KGluZm8sIE9WU19DVF9MSU1JVF9DTURfU0VULFxuQEAgLTE4NjMsMTYgKzE4NjYsMjIgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0XHRnb3RvIGV4aXRfZXJyO1xuIFx0fVxuIFxuK1x0b3ZzX2xvY2soKTtcbitcdGN0X2xpbWl0X2luZm8gPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyxcbitcdFx0XHRcdFx0XHQgIGxvY2tkZXBfb3ZzbF9pc19oZWxkKCkpO1xuIFx0ZXJyID0gb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0sXG4gXHRcdFx0XHRcdCAgY3RfbGltaXRfaW5mbyk7XG4gXHRpZiAoZXJyKVxuLVx0XHRnb3RvIGV4aXRfZXJyO1xuK1x0XHRnb3RvIGV4aXRfdW5sb2NrO1xuIFxuIFx0c3RhdGljX2JyYW5jaF9lbmFibGUoXHUwMDI2b3ZzX2N0X2xpbWl0X2VuYWJsZWQpO1xuIFxuIFx0Z2VubG1zZ19lbmQocmVwbHksIG92c19yZXBseV9oZWFkZXIpO1xuK1x0b3ZzX3VubG9jaygpO1xuIFx0cmV0dXJuIGdlbmxtc2dfcmVwbHkocmVwbHksIGluZm8pO1xuIFxuK2V4aXRfdW5sb2NrOlxuK1x0b3ZzX3VubG9jaygpO1xuIGV4aXRfZXJyOlxuIFx0bmxtc2dfZnJlZShyZXBseSk7XG4gXHRyZXR1cm4gZXJyO1xuQEAgLTE4ODQsNyArMTg5Myw3IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9kZWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdHN0cnVjdCBza19idWZmICpyZXBseTtcbiBcdHN0cnVjdCBvdnNfaGVhZGVyICpvdnNfcmVwbHlfaGVhZGVyO1xuIFx0c3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhzb2NrX25ldChza2ItXHUwMDNlc2spLCBvdnNfbmV0X2lkKTtcbi1cdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbyA9IG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbztcbitcdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbztcbiBcdGludCBlcnI7XG4gXG4gXHRyZXBseSA9IG92c19jdF9saW1pdF9jbWRfcmVwbHlfc3RhcnQoaW5mbywgT1ZTX0NUX0xJTUlUX0NNRF9ERUwsXG5AQCAtMTg5NywxNCArMTkwNiwyMCBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfZGVsKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRcdGdvdG8gZXhpdF9lcnI7XG4gXHR9XG4gXG4rXHRvdnNfbG9jaygpO1xuK1x0Y3RfbGltaXRfaW5mbyA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvLFxuK1x0XHRcdFx0XHRcdCAgbG9ja2RlcF9vdnNsX2lzX2hlbGQoKSk7XG4gXHRlcnIgPSBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSxcbiBcdFx0XHRcdFx0ICBjdF9saW1pdF9pbmZvKTtcbiBcdGlmIChlcnIpXG4tXHRcdGdvdG8gZXhpdF9lcnI7XG4rXHRcdGdvdG8gZXhpdF91bmxvY2s7XG4gXG4gXHRnZW5sbXNnX2VuZChyZXBseSwgb3ZzX3JlcGx5X2hlYWRlcik7XG4rXHRvdnNfdW5sb2NrKCk7XG4gXHRyZXR1cm4gZ2VubG1zZ19yZXBseShyZXBseSwgaW5mbyk7XG4gXG4rZXhpdF91bmxvY2s6XG4rXHRvdnNfdW5sb2NrKCk7XG4gZXhpdF9lcnI6XG4gXHRubG1zZ19mcmVlKHJlcGx5KTtcbiBcdHJldHVybiBlcnI7XG5AQCAtMTkxOCw3ICsxOTMzLDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX2dldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0c3RydWN0IG92c19oZWFkZXIgKm92c19yZXBseV9oZWFkZXI7XG4gXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItXHUwMDNlc2spO1xuIFx0c3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhuZXQsIG92c19uZXRfaWQpO1xuLVx0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvID0gb3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvO1xuK1x0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvO1xuIFx0aW50IGVycjtcbiBcbiBcdHJlcGx5ID0gb3ZzX2N0X2xpbWl0X2NtZF9yZXBseV9zdGFydChpbmZvLCBPVlNfQ1RfTElNSVRfQ01EX0dFVCxcbkBAIC0xOTMyLDIzICsxOTQ3LDI5IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9nZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdFx0Z290byBleGl0X2VycjtcbiBcdH1cbiBcbitcdG92c19sb2NrKCk7XG4rXHRjdF9saW1pdF9pbmZvID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8sXG4rXHRcdFx0XHRcdFx0ICBsb2NrZGVwX292c2xfaXNfaGVsZCgpKTtcbiBcdGlmIChhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdKSB7XG4gXHRcdGVyciA9IG92c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChcbiBcdFx0XHRuZXQsIGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0sIGN0X2xpbWl0X2luZm8sXG4gXHRcdFx0cmVwbHkpO1xuIFx0XHRpZiAoZXJyKVxuLVx0XHRcdGdvdG8gZXhpdF9lcnI7XG4rXHRcdFx0Z290byBleGl0X3VubG9jaztcbiBcdH0gZWxzZSB7XG4gXHRcdGVyciA9IG92c19jdF9saW1pdF9nZXRfYWxsX3pvbmVfbGltaXQobmV0LCBjdF9saW1pdF9pbmZvLFxuIFx0XHRcdFx0XHRcdCAgICAgIHJlcGx5KTtcbiBcdFx0aWYgKGVycilcbi1cdFx0XHRnb3RvIGV4aXRfZXJyO1xuK1x0XHRcdGdvdG8gZXhpdF91bmxvY2s7XG4gXHR9XG4gXG4gXHRubGFfbmVzdF9lbmQocmVwbHksIG5sYV9yZXBseSk7XG4gXHRnZW5sbXNnX2VuZChyZXBseSwgb3ZzX3JlcGx5X2hlYWRlcik7XG4rXHRvdnNfdW5sb2NrKCk7XG4gXHRyZXR1cm4gZ2VubG1zZ19yZXBseShyZXBseSwgaW5mbyk7XG4gXG4rZXhpdF91bmxvY2s6XG4rXHRvdnNfdW5sb2NrKCk7XG4gZXhpdF9lcnI6XG4gXHRubG1zZ19mcmVlKHJlcGx5KTtcbiBcdHJldHVybiBlcnI7XG5kaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmggYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaFxuaW5kZXggNjk2NjQwZTg4ZmE3ZTMuLjkzZTExZTQ2OGQxNzNmIDEwMDY0NFxuLS0tIGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmhcbisrKyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oXG5AQCAtMTcyLDcgKzE3Miw3IEBAIHN0cnVjdCBvdnNfbmV0IHtcbiBcdHN0cnVjdCB3b3JrX3N0cnVjdCBkcF9ub3RpZnlfd29yaztcbiBcdHN0cnVjdCBkZWxheWVkX3dvcmsgbWFza3NfcmViYWxhbmNlO1xuICNpZlx0SVNfRU5BQkxFRChDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVClcbi1cdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbztcbitcdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyBfX3JjdSAqY3RfbGltaXRfaW5mbztcbiAjZW5kaWZcbiBcdGJvb2wgeHRfbGFiZWw7XG4gfTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE4OjUwOjQ2LjQ4Mzg1OTM1NFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1NTA2MzAzMDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDb25uZWN0aW9uIFRyYWNraW5nIExpbWl0IFBhdGNoIGluIE9wZW4gdlN3aXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0d2Vha3MgdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgbGltaXQgbG9naWMgaW4gYG5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY2AgYW5kIGBuZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaGAuIFRoZSBjb3JlIGNoYW5nZSBzZWVtcyB0byBiZSBhcm91bmQgaG93IGBjdF9saW1pdF9pbmZvYCBpcyBhY2Nlc3NlZC4gVGhleSdyZSB1c2luZyBSQ1Ugbm93IOKAkyBgcmN1X2RlcmVmZXJlbmNlYCwgYHJjdV9hc3NpZ25fcG9pbnRlcmAsIGByY3VfcmVwbGFjZV9wb2ludGVyYCDigJMgd2hpY2ggaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBpcyBhYm91dCBpbXByb3ZpbmcgY29uY3VycmVuY3kgYW5kIGF2b2lkaW5nIHJhY2UgY29uZGl0aW9ucy4gVGhleeKAmXZlIGFsc28gbW92ZWQgYG92c19sb2NrKClgIGFyb3VuZCB3aXRoaW4gdGhlIGNvbW1hbmQgaGFuZGxpbmcgZnVuY3Rpb25zOiBgb3ZzX2N0X2xpbWl0X2NtZF9zZXRgLCBgb3ZzX2N0X2xpbWl0X2NtZF9kZWxgLCBhbmQgYG92c19jdF9saW1pdF9jbWRfZ2V0YC4gVGhhdCdzIGludGVyZXN0aW5nLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkuXG5cblRoZXJlJ3MgYSBwb3RlbnRpYWwgbWVtb3J5IGxlYWsgb3IgaW5pdGlhbGl6YXRpb24gaXNzdWUgYmVpbmcgYWRkcmVzc2VkIGluIGBvdnNfY3RfbGltaXRfaW5pdGAuIEdvb2QgY2F0Y2g7IHRoYXQncyB0aGUga2luZCBvZiB0aGluZyB0aGF0IGNhbiBiaXRlIHlvdSBsYXRlci4gTG9va3MgbGlrZSB0aGV5J3JlIHVzaW5nIGEgbG9jYWwgcG9pbnRlciBiZWZvcmUgYXNzaWduaW5nIGl0LCB3aGljaCBtaWdodCBiZSB0aGUgZml4LlxuXG5GdW5jdGlvbmFsbHksIHRoaXMgaXMgYSBjaGFuZ2UgdG8gdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgbGltaXQgbG9naWMgd2l0aGluIE9wZW4gdlN3aXRjaC4gR2l2ZW4gdGhlIFJDVSBjaGFuZ2VzLCB0aGUgbG9jayBtb3ZlbWVudHMsIGFuZCB0aGUgbWVtb3J5IGZpeCwgSSdkIHNheSB0aGlzIHBhdGNoIHNjcmVhbXMgXCJuZWVkcyBmdXp6aW5nLlwiIExldCdzIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIHRvIHRhcmdldC5cblxuQmFzZWQgb24gdGhlIGNvZGUgY2hhbmdlcyBhbmQgdGhlIG92ZXJhbGwgaW50ZW50LCB0aGUgZnVuY3Rpb25zIEkgbmVlZCB0byBmb2N1cyBvbiBhcmU6XG5cbiogICBgb3ZzX2N0X2NoZWNrX2xpbWl0YCDigJMgQ29yZSBsaW1pdCBjaGVja2luZ1xuKiAgIGBvdnNfY3RfbGltaXRfaW5pdGAg4oCTIFRoZSBpbml0IGZ1bmN0aW9uLlxuKiAgIGBvdnNfY3RfbGltaXRfZXhpdGAg4oCTIFRoZSBleGl0IGZ1bmN0aW9uLCBlcXVhbGx5IGltcG9ydGFudC5cbiogICBgb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0YCDigJMgU2V0dGluZyB6b25lIGxpbWl0c1xuKiAgIGBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXRgIOKAkyBEZWxldGluZyB6b25lIGxpbWl0cy5cbiogICBgb3ZzX2N0X2xpbWl0X2NtZF9zZXRgIOKAkyBDb21tYW5kIHNldHRpbmdcbiogICBgb3ZzX2N0X2xpbWl0X2NtZF9kZWxgIOKAkyBDb21tYW5kIGRlbGV0aW5nXG4qICAgYG92c19jdF9saW1pdF9jbWRfZ2V0YCDigJMgQ29tbWFuZCBnZXR0aW5nXG5cbkkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIHRoZSByaWdodCBjb25maWd1cmF0aW9uIHRvIGV4ZXJjaXNlIHRoaXMgY29kZS4gTG9va2luZyBhdCB0aGUgY29kZSwgaXQncyBjbGVhciB0aGF0IGl0IHVzZXMgYCNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKWAsIHdoaWNoIG1lYW5zIGBORVRGSUxURVJfQ09OTkNPVU5UYCBtdXN0IGJlIGVuYWJsZWQuIFNpbmNlIGl0J3MgT3BlbiB2U3dpdGNoLCBvYnZpb3VzbHkgSSBuZWVkIGBPUEVOVlNXSVRDSGAsIGFuZCBJJ2xsIGRvdWJsZSBjaGVjayB0byBzZWUgaWYgYE9QRU5WU1dJVENIX0NPTk5UUkFDS2AgaXMgYWxzbyBhIHJlbGV2YW50IGNvbmZpZyBvcHRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxNzYsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxODo1MDo1NC4wMzQ0OTMxMDVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUwNzUxOTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBPUEVOVlNXSVRDSFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy01LVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjY6Y29uZmlnIE9QRU5WU1dJVENIXFxubmV0L29wZW52c3dpdGNoL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiT3BlbiB2U3dpdGNoXFxcIlxcbi0tXFxubmV0L29wZW52c3dpdGNoL0tjb25maWctNDMtXFxubmV0L29wZW52c3dpdGNoL0tjb25maWc6NDQ6Y29uZmlnIE9QRU5WU1dJVENIX0dSRVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTQ1LVxcdHRyaXN0YXRlIFxcXCJPcGVuIHZTd2l0Y2ggR1JFIHR1bm5lbGluZyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L29wZW52c3dpdGNoL0tjb25maWctNTYtXFxubmV0L29wZW52c3dpdGNoL0tjb25maWc6NTc6Y29uZmlnIE9QRU5WU1dJVENIX1ZYTEFOXFxubmV0L29wZW52c3dpdGNoL0tjb25maWctNTgtXFx0dHJpc3RhdGUgXFxcIk9wZW4gdlN3aXRjaCBWWExBTiB0dW5uZWxpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTY4LVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjY5OmNvbmZpZyBPUEVOVlNXSVRDSF9HRU5FVkVcXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy03MC1cXHR0cmlzdGF0ZSBcXFwiT3BlbiB2U3dpdGNoIEdlbmV2ZSB0dW5uZWxpbmcgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTg6NTA6NTQuMTg1MjUyMTJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzA2MTMxODQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBsaWtlIHlvdTpcblxuKipDaGVja2luZyBmb3IgdGhlIE9QRU5WU1dJVENIX0NPTlRSQUNLIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIGJlZm9yZSBkaXZpbmcgaW50byBhbnkgY29tcGxleCB0cm91Ymxlc2hvb3Rpbmcgb3IgY29uZmlndXJhdGlvbiBjaGFuZ2VzLCBsZXQncyBlc3RhYmxpc2ggYSBiYXNlbGluZS4gSSBuZWVkIHRvIHF1aWNrbHkgY29uZmlybSB3aGV0aGVyIHRoZSBgT1BFTlZTV0lUQ0hfQ09OVFJBQ0tgIGNvbmZpZ3VyYXRpb24gaXMgZXZlbiBwcmVzZW50LiBJdOKAmXMgYSBwcmV0dHkgZnVuZGFtZW50YWwgc2V0dGluZywgYW5kIGl0cyBhYnNlbmNlIGNvdWxkIGltbWVkaWF0ZWx5IGV4cGxhaW4gc29tZSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggY29ubmVjdGlvbiB0cmFja2luZyBhbmQsIGJ5IGV4dGVuc2lvbiwgbmV0d29yayBwZXJmb3JtYW5jZSBvciBzZWN1cml0eSB3aXRoaW4gdGhlIE9wZW4gdlN3aXRjaCBlbnZpcm9ubWVudC4gQSBxdWljayBjaGVjayBoZXJlIHNhdmVzIHRpbWUgaW4gdGhlIGxvbmcgcnVuOyBubyBwb2ludCBwdXJzdWluZyBvdGhlciBhdmVudWVzIGlmIGEgYmFzaWMgcHJlcmVxdWlzaXRlIGlzbid0IG1ldC4gSSdsbCBuZWVkIHRvIGtub3cgd2hldGhlciBJIG5lZWQgdG8gZW5hYmxlIHRoaXMsIG9yIGlmIGl0IGhhcyBhbHJlYWR5IGJlZW4gZW5hYmxlZCBhbmQgbmVlZHMgdG8gYmUgbG9va2VkIGF0IGluIG1vcmUgZGVwdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0MjksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxODo1MDo1Ny40OTEzODc4NFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODkxODc3MjQsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBPUEVOVlNXSVRDSF9DT05OVFJBQ0tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L29wZW52c3dpdGNoL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE4OjUwOjU3LjY4MDU4NDU4NFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5MjU1MDAxNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkludmVzdGlnYXRpbmcgQ29ubmVjdGlvbiBUcmFja2luZyBPcHRpb25zKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIHBpbnBvaW50IHdoZXJlIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGNvbmZpZ3VyYXRpb24gbGl2ZXMgd2l0aGluIHRoZSBPcGVuIHZTd2l0Y2ggYnVpbGQgc3lzdGVtLiBNeSBpbnN0aW5jdCBzYXlzIHRvIHN0YXJ0IHdpdGggYG5ldC9vcGVudnN3aXRjaC9LY29uZmlnYC4gVGhhdCdzIHRoZSBsb2dpY2FsIHBsYWNlIGZvciBidWlsZC10aW1lIG9wdGlvbnMgcmVsYXRlZCB0byBuZXR3b3JraW5nIGZlYXR1cmVzIHdpdGhpbiB0aGUga2VybmVsIG1vZHVsZSBzcGFjZS4gTm93LCB3aGF0IGFtIEkgbG9va2luZyBmb3Igc3BlY2lmaWNhbGx5PyBJJ20ga2V5aW5nIGluIG9uIHR3byBvcHRpb25zOiBgQ09OTlRSQUNLYCBhbmQgYE5FVEZJTFRFUmAuIFRoZXNlIGFyZSB0aGUgbW9zdCBsaWtlbHkgY2FuZGlkYXRlcyBmb3IgaW5mbHVlbmNpbmcgY29ubmVjdGlvbiB0cmFja2luZyBiZWhhdmlvciBvciBlbmFibGluZyBpbnRlZ3JhdGlvbiB3aXRoIE5ldGZpbHRlci4gR29pbmcgdG8gZGl2ZSBpbiBhbmQgc2VlIHdoYXQgdGhlIEtjb25maWcgaGFzIHRvIHNheS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjY2NCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE4OjUxOjAwLjYwNjA4NzAwNVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzkyMTg2MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTkVURklMVEVSXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9vcGVudnN3aXRjaC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9vcGVudnN3aXRjaC9LY29uZmlnPTY9Y29uZmlnIE9QRU5WU1dJVENIXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy0xMS1cXHRcXHRcXHRcXHQgICAgICghTkZfTkFUIHx8IE5GX05BVCkgXFx1MDAyNlxcdTAwMjYgXFxcXFxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjEyOlxcdFxcdFxcdFxcdCAgICAgKCFORVRGSUxURVJfQ09OTkNPVU5UIHx8IE5FVEZJTFRFUl9DT05OQ09VTlQpKSlcXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy0xMy1cXHRkZXBlbmRzIG9uIFBTQU1QTEUgfHwgIVBTQU1QTEVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTg6NTE6MDAuNzQ1MzExMDUxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkyNjUxNzMyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBPcGVuIHZTd2l0Y2ggYW5kIENvbm5lY3Rpb24gVHJhY2tpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBPUEVOVlNXSVRDSGAgbW9kdWxlIGFuZCBpdHMgY29ubmVjdGlvbiB0cmFja2luZyBjYXBhYmlsaXRpZXMuIEl0IHNlZW1zIHRoYXQgYE9QRU5WU1dJVENIYCAqZGVwZW5kcyogb24gYE5FVEZJTFRFUl9DT05OQ09VTlRgLCBidXQgdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jYCwgaXMgdXNpbmcgYSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlLCBgI2lmIElTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpYCwgdG8gY29udHJvbCBpdHMgaW5jbHVzaW9uLiBUaGlzIG1lYW5zIGl0ICpyZXF1aXJlcyogYm90aCBgT1BFTlZTV0lUQ0hgICphbmQqIGBORVRGSUxURVJfQ09OTkNPVU5UYCB0byBmdW5jdGlvbiBwcm9wZXJseSwgZXZlbiBpZiB0aGUgZGVwZW5kZW5jeSBpc24ndCBleHBsaWNpdGx5IHN0YXRlZCBhcyBhIGhhcmQgcmVxdWlyZW1lbnQuIEl0J3MgdXNpbmcgYENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UYCwgc28gaXQgcmVhbGx5IG5lZWRzIGl0IHRvIGJlIGVuYWJsZWQuXG5cbk15IG5leHQgc3RlcCBpcyB0byBwZXJmb3JtIGEgdGhvcm91Z2ggY29kZSByZXZpZXcgdG8gY2hlY2sgaWYgYE9QRU5WU1dJVENIX0NPTlRSQUNLYCBpcyBleHBsaWNpdGx5IHVzZWQgYW55d2hlcmUgZWxzZSB3aXRoaW4gdGhlIGNvZGViYXNlLiBJIG5lZWQgdG8gZ2V0IHRoZSBiaWdnZXIgcGljdHVyZSBvZiBob3cgdGhhdCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGltcGFjdHMgdGhlIGJlaGF2aW9yIG9mIHRoZSBwcm9ncmFtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTcxLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTg6NTE6MDQuNjcxODMyNTIyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTI5NDY0NTMwLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJPUEVOVlNXSVRDSF9DT05UUkFDS1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE4OjUxOjA4LjYwMTMwODgwMloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDgxMjcyMDA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBDb25uZWN0aW9uIFRyYWNraW5nIExpbWl0cyBpbiBPcGVuIHZTd2l0Y2gqKlxuXG5BbHJpZ2h0LCBzbyB0aGUga2V5IGNvbmZpZ3VyYXRpb25zIHRvIGZvY3VzIG9uIGhlcmUgYXJlIGRlZmluaXRlbHkgYE5FVEZJTFRFUl9DT05OQ09VTlRgIGFuZCBgT1BFTlZTV0lUQ0hgLiBUaGF0IGZlZWxzIGxpa2UgYSBzb2xpZCBzdGFydGluZyBwb2ludC4gTm93LCBsZXQncyBkcmlsbCBkb3duIGludG8gdGhlIGNvcmUgZnVuY3Rpb25zIHRoYXQgaGFuZGxlIHRoaXMgY29ubmVjdGlvbiB0cmFja2luZyBsaW1pdCBmdW5jdGlvbmFsaXR5LiBNeSBmb2N1cyBuZWVkcyB0byBiZSBvbjpcblxuKiAgIGBvdnNfY3RfbGltaXRfY21kX3NldGBcbiogICBgb3ZzX2N0X2xpbWl0X2NtZF9kZWxgXG4qICAgYG92c19jdF9saW1pdF9jbWRfZ2V0YFxuKiAgIGBvdnNfY3RfY2hlY2tfbGltaXRgXG5cblRob3NlIHNlZW0gbGlrZSB0aGUgbG9naWNhbCBwb2ludHMgb2YgaW50ZXJhY3Rpb24gd2l0aCB0aGUgc3lzdGVtLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgYG92c19jdF9saW1pdF9jbWRfc2V0YCBpcyByZWFjaGFibGUsIGFzIGEgbmV0bGluayBjb21tYW5kIGhhbmRsZXIuIEl0J3MgYSBrZXkgcGFydCBvZiB0aGUgQVBJLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MzE0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE4OjUxOjEyLjA4MjU4MzUyN1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI4Mzk4MjczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm92c19jdF9saW1pdF9jbWRfc2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9vcGVudnN3aXRjaC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTE4MjI9c3RhdGljIGludCBvdnNfY3RfbGltaXRfZ2V0X2FsbF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xODQ5LVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzoxODUwOnN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTg1MS17XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9MTk3OD1zdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc21hbGxfb3BzIGN0X2xpbWl0X2dlbmxfb3BzW10gPSB7XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTk4My1cXHRcXHRcXHRcXHRcXHQgICAgICAgKi9cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6MTk4NDpcXHRcXHQuZG9pdCA9IG92c19jdF9saW1pdF9jbWRfc2V0LFxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xOTg1LVxcdH0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE4OjUxOjEyLjYxMDk5MDI2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MzQ4NDcxNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBwcm9tcHQ6XG5cbioqQW5hbHl6aW5nIHRoZSBSZXF1ZXN0OiBOZXRsaW5rIENvbW1hbmQgSGFuZGxlciBDb250ZXh0KipcblxuT2theSwgc28gdGhlIHByb21wdCBpbmRpY2F0ZXMgd2UncmUgZGVhbGluZyB3aXRoIGEgbmV0bGluayBjb21tYW5kIGhhbmRsZXIuIFRoYXQncyBhIGtleSBwaWVjZSBvZiBpbmZvcm1hdGlvbi4gVGhpcyBzdWdnZXN0cyB3ZSdyZSB3b3JraW5nIGF0IGEgbG93IGxldmVsLCBwcm9iYWJseSB3aXRoaW4gYSBrZXJuZWwgY29udGV4dCBvciBhIHN5c3RlbSBwcm9ncmFtIHRoYXQgaW50ZXJhY3RzIGRpcmVjdGx5IHdpdGggdGhlIGtlcm5lbCdzIG5ldGxpbmsgaW50ZXJmYWNlLiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgYXMgSSBpbnRlcnByZXQgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbi4gTmV0bGluayBpcyBhbGwgYWJvdXQgZWZmaWNpZW50IGludGVyLXByb2Nlc3MgY29tbXVuaWNhdGlvbiwgZXNwZWNpYWxseSBmb3IgbmV0d29yayBjb25maWd1cmF0aW9uIGFuZCBjb250cm9sLlxuXG5OZXh0LCBpdCBwb2ludHMgdG93YXJkcyBgb3ZzX2N0X2NoZWNrX2xpbWl0YC4gVGhlIGluY2x1c2lvbiBvZiBgb3ZzX2AgaW1wbGllcyB0aGlzIGlzIHJlbGF0ZWQgdG8gT3BlbiB2U3dpdGNoLCB3aGljaCBpcyBmdXJ0aGVyIGhlbHBmdWwgY29udGV4dC4gVGhlIGZ1bmN0aW9uIG5hbWUgYG92c19jdF9jaGVja19saW1pdGAgc3Ryb25nbHkgc3VnZ2VzdHMgd2UgYXJlIGRlYWxpbmcgd2l0aCBjb25uZWN0aW9uIHRyYWNraW5nLCBsaWtlbHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIE9wZW4gdlN3aXRjaCdzIGZsb3cgdGFibGUgbWFuYWdlbWVudC4gQW5kIFwibGltaXRcIiBpbXBsaWVzIHRoYXQgZnVuY3Rpb24gd291bGQgYmUgcmVsYXRlZCB0byByYXRlIGxpbWl0aW5nIG9yIHJlc291cmNlIGV4aGF1c3Rpb24gcHJvdGVjdGlvbi4gVGhpcyBzcGVjaWZpYyBmdW5jdGlvbiBpcyBhIGNvbnRyb2wgcGxhbmUgZnVuY3Rpb24sIHJlbGF0ZWQgdG8gcHJvY2Vzc2luZyBpbnN0cnVjdGlvbnMgZm9yIHRoZSBkYXRhcGF0aC4gSSB3YW50IHRvIGxvb2sgYXQgaXRzIHVzZSwgcGFyYW1ldGVycyBhbmQgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTAzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTg6NTE6MTYuMzQ1ODQwMzQ3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQ1NTc5NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib3ZzX2N0X2NoZWNrX2xpbWl0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9vcGVudnN3aXRjaC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTkxNz1zdGF0aWMgdTMyIGN0X2xpbWl0X2dldChjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8sIHUxNiB6b25lKVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTkzMC1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6OTMxOnN0YXRpYyBpbnQgb3ZzX2N0X2NoZWNrX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtOTMyLVxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9OTYxPXN0YXRpYyBpbnQgb3ZzX2N0X2NvbW1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5LFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTk4MC1cXHRcXHRpZiAoIW5mX2N0X2lzX2NvbmZpcm1lZChjdCkpIHtcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6OTgxOlxcdFxcdFxcdGVyciA9IG92c19jdF9jaGVja19saW1pdChuZXQsIHNrYiwgaW5mbyk7XFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTk4Mi1cXHRcXHRcXHRpZiAoZXJyKSB7XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9MTYyMz1zdGF0aWMgdm9pZCBvdnNfY3RfbGltaXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0KVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTE2MjktXFx0XFx0XFx0XFx0ICAgbG9ja2RlcF9vdnNsX2lzX2hlbGQoKSk7XFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjE2MzA6XFx0Lyogb3ZzX2N0X2NoZWNrX2xpbWl0KCkgYWNjZXNzZXMgdGhlIGluZm8gdW5kZXIgdGhlIGRhdGFwYXRoIFJDVSBsb2NrLiAqL1xcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xNjMxLVxcdHN5bmNocm9uaXplX3JjdSgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxODo1MToxNi41MTA0MDQ5NDJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjkzNzYxMjEyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHVuZGVyc3RhbmRpbmcsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIGlmIGl0IHdlcmUgbXkgb3duIHRob3VnaHQgcHJvY2VzczpcblxuKipGaXhpbmcgdGhlIFJDVSBIYW5kbGluZyBhbmQgTG9ja2luZyBmb3IgY3RfbGltaXRfaW5mbyBpbiBPcGVuIHZTd2l0Y2ggQ29ubmVjdGlvbiBUcmFja2luZyoqXG5cblJpZ2h0LCBzbyB0aGlzIHBhdGNoIGlzIGNydWNpYWwgZm9yIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIChjdCkgbW9kdWxlIHdpdGhpbiBPcGVuIHZTd2l0Y2gsIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgdGhlIGBjdF9saW1pdF9pbmZvYCBkYXRhIHN0cnVjdHVyZS4gSXQgbG9va3MgbGlrZSB0aGUgaXNzdWUgc3RlbXMgZnJvbSBwcm9ibGVtcyB3aXRoIFJlYWQtQ29weS1VcGRhdGUgKFJDVSkgc3luY2hyb25pemF0aW9uIGFuZCByZWxhdGVkIGxvY2tpbmcgbWVjaGFuaXNtcy4gVGhpcyBpcyBjcml0aWNhbCBmb3IgYW55IGNvbmN1cnJlbnQgZGF0YSBzdHJ1Y3R1cmVzLCBzbyBhIGJ1ZyB0aGVyZSBtZWFucyBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBkYXRhIGNvcnJ1cHRpb24sIG9yIGV2ZW4ga2VybmVsIHBhbmljcy4gRnJvbSB0aGUgZGVzY3JpcHRpb24sIHRoZSBmaXggaXMgcHJvYmFibHkgZXNzZW50aWFsIHRvIGVuc3VyZSBkYXRhIGNvbnNpc3RlbmN5IHdoZW4gbXVsdGlwbGUgdGhyZWFkcyBvciBjb3JlcyBhcmUgb3BlcmF0aW5nIG9uIHRoZXNlIGNvbm5lY3Rpb24gbGltaXRzIHNpbXVsdGFuZW91c2x5LlxuXG5UaGUgY29uZmlndXJhdGlvbnMgaW52b2x2ZWQgYXJlIGBPUEVOVlNXSVRDSGAgYW5kIGBORVRGSUxURVJfQ09OTkNPVU5UYCwgd2hpY2gsIG9mIGNvdXJzZSwgbWVhbnMgdGhpcyBpcyBzcGVjaWZpY2FsbHkgcmVsZXZhbnQgd2hlbiBPcGVuIHZTd2l0Y2ggaXMgY29tcGlsZWQgYW5kIGRlcGxveWVkIHdpdGggY29ubmVjdGlvbiBjb3VudCBmdW5jdGlvbmFsaXR5IGVuYWJsZWQg4oCTIGEgY29tbW9uIHNjZW5hcmlvLCBvYnZpb3VzbHkuXG5cbk5vdywgZm9jdXNpbmcgb24gdGhlIGNvcmUgZnVuY3Rpb25zIG1lbnRpb25lZCwgdGhleSBhcmUgdGhlIGtleSB0byBteSBhbmFseXNpczogYG92c19jdF9saW1pdF9jbWRfc2V0YCwgYG92c19jdF9saW1pdF9jbWRfZGVsYCwgYG92c19jdF9saW1pdF9jbWRfZ2V0YCwgYG92c19jdF9jaGVja19saW1pdGAsIGBvdnNfY3RfbGltaXRfaW5pdGAsIGFuZCBgb3ZzX2N0X2xpbWl0X2V4aXRgLiBUaGVzZSByZXByZXNlbnQgdGhlIHByaW1hcnkgb3BlcmF0aW9uczogc2V0dGluZywgZGVsZXRpbmcsIGFuZCBnZXR0aW5nIGxpbWl0IGNvbmZpZ3VyYXRpb25zLCBjaGVja2luZyB3aGV0aGVyIGxpbWl0cyBhcmUgZXhjZWVkZWQsIGFuZCBpbml0aWFsaXppbmcgYW5kIGV4aXRpbmcgdGhlIGxpbWl0LXJlbGF0ZWQgcmVzb3VyY2VzLiBUaGUgZml4IG11c3QgYmUgd29ya2luZyB0byBhZGRyZXNzIHJhY2UgY29uZGl0aW9ucyB0aGF0IGFyZSBsaWtlbHkgdG8gb2NjdXIgaW4gYWxsIG9mIHRoZXNlIGZ1bmN0aW9ucy4gSeKAmWxsIG5lZWQgdG8gZGVsdmUgaW50byB0aGUgY29kZSB0byByZWFsbHkgdW5kZXJzdGFuZCB0aGUgb3JpZ2luYWwgZmxhdyBhbmQgdGhlIHByZWNpc2UgbG9ja2luZyBzdHJhdGVneSBpbXBsZW1lbnRlZCB0byByZXNvbHZlIGl0LlxuXG5GaW5hbGx5LCBJ4oCZbGwgbmVlZCB0byBwcm9jZXNzIHRoZSByZXN1bHRzIG9mIHRlc3RpbmcgdGhpcyBwYXRjaCB1c2luZyBgc2V0LXJlc3VsdHNgLiBIb3BlZnVsbHksIGl0J3MgY29tcHJlaGVuc2l2ZSBlbm91Z2ggdG8gdmFsaWRhdGUgdGhlIGxvY2tpbmcgaW1wcm92ZW1lbnRzIGFuZCBydWxlIG91dCBwb3RlbnRpYWwgcmVncmVzc2lvbnMuIFRoaXMgbWVhbnMgSSdtIGV4cGVjdGluZyBkZXRhaWxlZCBvdXRwdXQgcmVnYXJkaW5nIGxvY2sgY29udGVudGlvbiwgUkNVIGdyYWNlIHBlcmlvZCB1c2FnZSwgYW5kIGFueSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1wYWN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODYyMSwiT3V0cHV0VG9rZW5zIjoxNjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTg6NTE6MjMuNDQ4MDIwMzgxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM0ODM3MDQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJPUEVOVlNXSVRDSFwiLFxuICAgIFwiTkVURklMVEVSX0NPTk5DT1VOVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm92c19jdF9saW1pdF9jbWRfc2V0XCIsXG4gICAgXCJvdnNfY3RfbGltaXRfY21kX2RlbFwiLFxuICAgIFwib3ZzX2N0X2xpbWl0X2NtZF9nZXRcIixcbiAgICBcIm92c19jdF9jaGVja19saW1pdFwiLFxuICAgIFwib3ZzX2N0X2xpbWl0X2luaXRcIixcbiAgICBcIm92c19jdF9saW1pdF9leGl0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgUkNVIHN5bmNocm9uaXphdGlvbiBhbmQgbG9ja2luZyBpc3N1ZXMgYXJvdW5kIHRoZSBPcGVuIHZTd2l0Y2ggY29ubmVjdGlvbiB0cmFja2luZyBsaW1pdCBjb25maWd1cmF0aW9uLiBJdCBtb2RpZmllcyBuZXRsaW5rIGNvbW1hbmQgaGFuZGxlcnMgYW5kIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGxpbWl0IGNoZWNrIGZ1bmN0aW9uLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGVzZSBjb21tYW5kIGhhbmRsZXJzIGFuZCB0aGUgZGF0YXBhdGggY29ubmVjdGlvbiB0cmFja2luZyBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJPUEVOVlNXSVRDSFwiLFxuICAgIFwiTkVURklMVEVSX0NPTk5DT1VOVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm92c19jdF9saW1pdF9jbWRfc2V0XCIsXG4gICAgXCJvdnNfY3RfbGltaXRfY21kX2RlbFwiLFxuICAgIFwib3ZzX2N0X2xpbWl0X2NtZF9nZXRcIixcbiAgICBcIm92c19jdF9jaGVja19saW1pdFwiLFxuICAgIFwib3ZzX2N0X2xpbWl0X2luaXRcIixcbiAgICBcIm92c19jdF9saW1pdF9leGl0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgUkNVIHN5bmNocm9uaXphdGlvbiBhbmQgbG9ja2luZyBpc3N1ZXMgYXJvdW5kIHRoZSBPcGVuIHZTd2l0Y2ggY29ubmVjdGlvbiB0cmFja2luZyBsaW1pdCBjb25maWd1cmF0aW9uLiBJdCBtb2RpZmllcyBuZXRsaW5rIGNvbW1hbmQgaGFuZGxlcnMgYW5kIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGxpbWl0IGNoZWNrIGZ1bmN0aW9uLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGVzZSBjb21tYW5kIGhhbmRsZXJzIGFuZCB0aGUgZGF0YXBhdGggY29ubmVjdGlvbiB0cmFja2luZyBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowc65cf[1] Phase: Succeeded StartedAt: 2026-07-23 18:51:34 +0000 UTC FinishedAt: 2026-07-23 18:51:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc65cf[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-23 18:51:34 +0000 UTC FinishedAt: 2026-07-23 18:51:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc65cf[2] Phase: Succeeded StartedAt: 2026-07-23 18:51:34 +0000 UTC FinishedAt: 2026-07-23 23:13:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc65cf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_check_limit","ovs_ct_limit_init","ovs_ct_limit_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT"],"series_id":"1fc381ef-248f-4c63-a1cf-a90df8266083","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-23 18:51:34 +0000 UTC FinishedAt: 2026-07-23 23:13:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_check_limit","ovs_ct_limit_init","ovs_ct_limit_exit"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT"],"series_id":"1fc381ef-248f-4c63-a1cf-a90df8266083","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowc65cf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_check_limit","ovs_ct_limit_init","ovs_ct_limit_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT"],"series_id":"1fc381ef-248f-4c63-a1cf-a90df8266083","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-23 18:51:34 +0000 UTC FinishedAt: 2026-07-23 18:52:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc65cf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_check_limit","ovs_ct_limit_init","ovs_ct_limit_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT"],"series_id":"1fc381ef-248f-4c63-a1cf-a90df8266083","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-23 18:51:34 +0000 UTC FinishedAt: 2026-07-23 18:52:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowc65cf/series-workflowc65cf-convert-artifact-2396241543/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc65cf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_check_limit","ovs_ct_limit_init","ovs_ct_limit_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT"],"series_id":"1fc381ef-248f-4c63-a1cf-a90df8266083","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-23 18:52:54 +0000 UTC FinishedAt: 2026-07-23 19:29:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc65cf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_check_limit","ovs_ct_limit_init","ovs_ct_limit_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT"],"series_id":"1fc381ef-248f-4c63-a1cf-a90df8266083","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-23 18:52:54 +0000 UTC FinishedAt: 2026-07-23 19:29:54 +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:*d3248b5d-2d48-47cb-9c3f-81f8ec325e58,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-workflowc65cf/series-workflowc65cf-convert-artifact-2396241543/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": "b8ba659c-4cc7-4ea8-b85c-6c78a21d8a32", "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-workflowc65cf/series-workflowc65cf-build-action-1455754525/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc65cf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_check_limit","ovs_ct_limit_init","ovs_ct_limit_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT"],"series_id":"1fc381ef-248f-4c63-a1cf-a90df8266083","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-23 18:52:54 +0000 UTC FinishedAt: 2026-07-23 19:29:44 +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:*d3248b5d-2d48-47cb-9c3f-81f8ec325e58,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-workflowc65cf/series-workflowc65cf-convert-artifact-2396241543/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": "b8ba659c-4cc7-4ea8-b85c-6c78a21d8a32", "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-workflowc65cf/series-workflowc65cf-build-action-1455754525/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc65cf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_check_limit","ovs_ct_limit_init","ovs_ct_limit_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT"],"series_id":"1fc381ef-248f-4c63-a1cf-a90df8266083","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-23 19:29:54 +0000 UTC FinishedAt: 2026-07-23 19:29:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc65cf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_check_limit","ovs_ct_limit_init","ovs_ct_limit_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT"],"series_id":"1fc381ef-248f-4c63-a1cf-a90df8266083","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-23 19:29:54 +0000 UTC FinishedAt: 2026-07-23 19:29:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc65cf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_check_limit","ovs_ct_limit_init","ovs_ct_limit_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT"],"series_id":"1fc381ef-248f-4c63-a1cf-a90df8266083","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-23 19:29:54 +0000 UTC FinishedAt: 2026-07-23 19:30:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc65cf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_check_limit","ovs_ct_limit_init","ovs_ct_limit_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT"],"series_id":"1fc381ef-248f-4c63-a1cf-a90df8266083","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-23 19:29:54 +0000 UTC FinishedAt: 2026-07-23 19:30:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT"],"series_id":"1fc381ef-248f-4c63-a1cf-a90df8266083","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowc65cf/series-workflowc65cf-convert-artifact-3613730230/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc65cf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_check_limit","ovs_ct_limit_init","ovs_ct_limit_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT"],"series_id":"1fc381ef-248f-4c63-a1cf-a90df8266083","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-23 19:30:05 +0000 UTC FinishedAt: 2026-07-23 19:31:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc65cf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_check_limit","ovs_ct_limit_init","ovs_ct_limit_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT"],"series_id":"1fc381ef-248f-4c63-a1cf-a90df8266083","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-23 19:30:05 +0000 UTC FinishedAt: 2026-07-23 19:31:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b8ba659c-4cc7-4ea8-b85c-6c78a21d8a32,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-workflowc65cf/series-workflowc65cf-build-action-1455754525/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-workflowc65cf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_check_limit","ovs_ct_limit_init","ovs_ct_limit_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT"],"series_id":"1fc381ef-248f-4c63-a1cf-a90df8266083","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-23 19:31:56 +0000 UTC FinishedAt: 2026-07-23 19:31:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc65cf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_check_limit","ovs_ct_limit_init","ovs_ct_limit_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT"],"series_id":"1fc381ef-248f-4c63-a1cf-a90df8266083","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-23 19:31:56 +0000 UTC FinishedAt: 2026-07-23 19:31:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc65cf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_check_limit","ovs_ct_limit_init","ovs_ct_limit_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT"],"series_id":"1fc381ef-248f-4c63-a1cf-a90df8266083","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-23 19:31:56 +0000 UTC FinishedAt: 2026-07-23 20:09:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc65cf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_check_limit","ovs_ct_limit_init","ovs_ct_limit_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT"],"series_id":"1fc381ef-248f-4c63-a1cf-a90df8266083","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-23 19:31:56 +0000 UTC FinishedAt: 2026-07-23 20:09:48 +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:*d3248b5d-2d48-47cb-9c3f-81f8ec325e58,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-workflowc65cf/series-workflowc65cf-convert-artifact-3613730230/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": "fa9638fc-ee59-4a82-b6de-56c1bdad82cb", "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-workflowc65cf/series-workflowc65cf-build-action-962423482/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc65cf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_check_limit","ovs_ct_limit_init","ovs_ct_limit_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT"],"series_id":"1fc381ef-248f-4c63-a1cf-a90df8266083","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-23 19:31:56 +0000 UTC FinishedAt: 2026-07-23 20:09:38 +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:*d3248b5d-2d48-47cb-9c3f-81f8ec325e58,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-workflowc65cf/series-workflowc65cf-convert-artifact-3613730230/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": "fa9638fc-ee59-4a82-b6de-56c1bdad82cb", "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-workflowc65cf/series-workflowc65cf-build-action-962423482/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc65cf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_check_limit","ovs_ct_limit_init","ovs_ct_limit_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT"],"series_id":"1fc381ef-248f-4c63-a1cf-a90df8266083","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-23 20:09:48 +0000 UTC FinishedAt: 2026-07-23 20:09:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc65cf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_check_limit","ovs_ct_limit_init","ovs_ct_limit_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT"],"series_id":"1fc381ef-248f-4c63-a1cf-a90df8266083","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-23 20:09:48 +0000 UTC FinishedAt: 2026-07-23 20:09:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc65cf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_check_limit","ovs_ct_limit_init","ovs_ct_limit_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT"],"series_id":"1fc381ef-248f-4c63-a1cf-a90df8266083","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-23 20:09:48 +0000 UTC FinishedAt: 2026-07-23 20:11:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc65cf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_check_limit","ovs_ct_limit_init","ovs_ct_limit_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT"],"series_id":"1fc381ef-248f-4c63-a1cf-a90df8266083","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-23 20:09:48 +0000 UTC FinishedAt: 2026-07-23 20:11:15 +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:*fa9638fc-ee59-4a82-b6de-56c1bdad82cb,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-workflowc65cf/series-workflowc65cf-build-action-962423482/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-workflowc65cf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_check_limit","ovs_ct_limit_init","ovs_ct_limit_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT"],"series_id":"1fc381ef-248f-4c63-a1cf-a90df8266083","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-23 20:11:25 +0000 UTC FinishedAt: 2026-07-23 23:13:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc65cf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_check_limit","ovs_ct_limit_init","ovs_ct_limit_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT"],"series_id":"1fc381ef-248f-4c63-a1cf-a90df8266083","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-23 20:11:25 +0000 UTC FinishedAt: 2026-07-23 23:13:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_check_limit","ovs_ct_limit_init","ovs_ct_limit_exit"],"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:*b8ba659c-4cc7-4ea8-b85c-6c78a21d8a32,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*fa9638fc-ee59-4a82-b6de-56c1bdad82cb,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-workflowc65cf/series-workflowc65cf-build-action-1455754525/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-workflowc65cf/series-workflowc65cf-build-action-962423482/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowc65cf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_check_limit","ovs_ct_limit_init","ovs_ct_limit_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT"],"series_id":"1fc381ef-248f-4c63-a1cf-a90df8266083","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-23 20:11:25 +0000 UTC FinishedAt: 2026-07-23 20:11:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc65cf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_check_limit","ovs_ct_limit_init","ovs_ct_limit_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT"],"series_id":"1fc381ef-248f-4c63-a1cf-a90df8266083","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-23 20:11:25 +0000 UTC FinishedAt: 2026-07-23 20:11:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_check_limit","ovs_ct_limit_init","ovs_ct_limit_exit"],"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-workflowc65cf/series-workflowc65cf-convert-artifact-1096106203/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc65cf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_check_limit","ovs_ct_limit_init","ovs_ct_limit_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT"],"series_id":"1fc381ef-248f-4c63-a1cf-a90df8266083","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-23 20:11:25 +0000 UTC FinishedAt: 2026-07-23 20:11:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc65cf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_check_limit","ovs_ct_limit_init","ovs_ct_limit_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT"],"series_id":"1fc381ef-248f-4c63-a1cf-a90df8266083","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-23 20:11:25 +0000 UTC FinishedAt: 2026-07-23 20:11:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc65cf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_check_limit","ovs_ct_limit_init","ovs_ct_limit_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT"],"series_id":"1fc381ef-248f-4c63-a1cf-a90df8266083","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-23 20:11:25 +0000 UTC FinishedAt: 2026-07-23 20:11:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc65cf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_check_limit","ovs_ct_limit_init","ovs_ct_limit_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT"],"series_id":"1fc381ef-248f-4c63-a1cf-a90df8266083","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-23 20:11:35 +0000 UTC FinishedAt: 2026-07-23 23:13:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc65cf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_check_limit","ovs_ct_limit_init","ovs_ct_limit_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb0d96ebe5f4d1acccf4dc36ca7f01f9a8fa1ba1","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT"],"series_id":"1fc381ef-248f-4c63-a1cf-a90df8266083","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-23 20:11:35 +0000 UTC FinishedAt: 2026-07-23 23:12:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b8ba659c-4cc7-4ea8-b85c-6c78a21d8a32,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*fa9638fc-ee59-4a82-b6de-56c1bdad82cb,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-workflowc65cf/series-workflowc65cf-build-action-1455754525/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-workflowc65cf/series-workflowc65cf-build-action-962423482/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-workflowc65cf/series-workflowc65cf-convert-artifact-1096106203/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}