Name: series-workflown9nqq Phase: Succeeded StartedAt: 2026-08-13 13:47:53 +0000 UTC FinishedAt: 2026-08-13 17:56:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflown9nqq[0] Phase: Succeeded StartedAt: 2026-08-13 13:47:53 +0000 UTC FinishedAt: 2026-08-13 14:11:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflown9nqq[0].run-triage Phase: Succeeded StartedAt: 2026-08-13 13:47:53 +0000 UTC FinishedAt: 2026-08-13 14:11:30 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_CLS_U32" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_CLS_U32" ], "series_id": "aae1de02-8f14-4c4b-8577-5a2a6a5ec7b9" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "u32_change" ], "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+CgkJCTx0ZD4yMDI2LzA4LzEzIDE0OjA5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9DTFNfVTMyJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dTMyX2NoYW5nZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIHR3byBpc3N1ZXMgaW4gdGhlIHUzMiBwYWNrZXQgY2xhc3NpZmllcjogYSB0eXBvIHdoZXJlIG5ldGxpbmsgbWVzc2FnZSBmbGFncyB3ZXJlIHBhc3NlZCBpbnN0ZWFkIG9mIHVzZXItc3BlY2lmaWVkIFRDQV9VMzJfRkxBR1MgdG8gYHUzMl9yZXBsYWNlX2h3X2tub2RlYCwgYW5kIGEgcmVmZXJlbmNlIGNvdW50aW5nIGJ1ZyBvbiB0aGUgYGh0X2Rvd25gIG5vZGUgZHVyaW5nIGVycm9yIGhhbmRsaW5nLiBCb3RoIGBmbGFnc2AgYW5kIGB1c2VyZmxhZ3NgIGFyZSBmdWxseSBpbml0aWFsaXplZCBpbnRlZ2Vycy4gVGhlIHJlZmVyZW5jZSBjb3VudGluZyBmaXggcHJldmVudHMgYSBtZW1vcnkgbGVhayBvciB1c2UtYWZ0ZXItZnJlZSwgd2hpY2ggYXJlIGRldGVjdGFibGUgYnkga21lbWxlYWsgYW5kIEtBU0FOIHJlc3BlY3RpdmVseS4gVGhlcmUgaXMgbm8gaW50cm9kdWN0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBzdHJ1Y3R1cmUgcGFkZGluZyBsZWFrcywgb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgYmVpbmcgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByZWZlcmVuY2UgY291bnRpbmcgaXNzdWUgYW5kIGEgZmxhZyBwYXNzaW5nIGJ1ZyBpbiB0aGUgYHUzMl9jaGFuZ2VgIGZ1bmN0aW9uIG9mIHRoZSB1MzIgdHJhZmZpYyBjbGFzc2lmaWVyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE0OjA5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMDQ0MmZiOWY1NWE4YTExZTExMjQ3NWY5Y2I4YzJjMGFkYmNiNTdhYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDEzIDE0OjA5OjIxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfdTMyLmMgYi9uZXQvc2NoZWQvY2xzX3UzMi5jXG5pbmRleCA4ZjMwY2M4MjE4MWQ5Li42OTQ3MGQ0OWVlOWI4IDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL2Nsc191MzIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL2Nsc191MzIuY1xuQEAgLTg3NSw3ICYjNDM7ODc1LDcgQEAgc3RhdGljIGludCB1MzJfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbiBcdFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiBcdHN0cnVjdCB0Y191X2NvbW1vbiAqdHBfYyA9IHRwLVx1MDAzZWRhdGE7XG4tXHRzdHJ1Y3QgdGNfdV9obm9kZSAqaHQ7XG4mIzQzO1x0c3RydWN0IHRjX3VfaG5vZGUgKmh0LCAqaHRfZG93bjtcbiBcdHN0cnVjdCB0Y191X2tub2RlICpuO1xuIFx0c3RydWN0IHRjX3UzMl9zZWwgKnM7XG4gXHRzdHJ1Y3QgbmxhdHRyICpvcHQgPSB0Y2FbVENBX09QVElPTlNdO1xuQEAgLTkzNSwxNyAmIzQzOzkzNSw5IEBAIHN0YXRpYyBpbnQgdTMyX2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsXG4gXG4gXHRcdHUzMl9iaW5kX2ZpbHRlcih0cCwgbmV3LCBiYXNlLCB0Yik7XG4gXG4tXHRcdGVyciA9IHUzMl9yZXBsYWNlX2h3X2tub2RlKHRwLCBuZXcsIGZsYWdzLCBleHRhY2spO1xuJiM0MztcdFx0ZXJyID0gdTMyX3JlcGxhY2VfaHdfa25vZGUodHAsIG5ldywgdXNlcmZsYWdzLCBleHRhY2spO1xuIFx0XHRpZiAoZXJyKSB7XG4gXHRcdFx0dTMyX3VuYmluZF9maWx0ZXIodHAsIG5ldywgdGIpO1xuLVxuLVx0XHRcdGlmICh0YltUQ0FfVTMyX0xJTktdKSB7XG4tXHRcdFx0XHRzdHJ1Y3QgdGNfdV9obm9kZSAqaHRfb2xkO1xuLVxuLVx0XHRcdFx0aHRfb2xkID0gcnRubF9kZXJlZmVyZW5jZShuLVx1MDAzZWh0X2Rvd24pO1xuLVx0XHRcdFx0aWYgKGh0X29sZClcbi1cdFx0XHRcdFx0cmVmY291bnRfaW5jKFx1MDAyNmh0X29sZC1cdTAwM2VyZWZjbnQpO1xuLVx0XHRcdH1cbiBcdFx0XHRfX3UzMl9kZXN0cm95X2tleShuZXcpO1xuIFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdH1cbkBAIC0xMTYxLDcgJiM0MzsxMTUzLDcgQEAgc3RhdGljIGludCB1MzJfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbiBcdFx0c3RydWN0IHRjX3Vfa25vZGUgX19yY3UgKippbnM7XG4gXHRcdHN0cnVjdCB0Y191X2tub2RlICpwaW5zO1xuIFxuLVx0XHRlcnIgPSB1MzJfcmVwbGFjZV9od19rbm9kZSh0cCwgbiwgZmxhZ3MsIGV4dGFjayk7XG4mIzQzO1x0XHRlcnIgPSB1MzJfcmVwbGFjZV9od19rbm9kZSh0cCwgbiwgdXNlcmZsYWdzLCBleHRhY2spO1xuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdGdvdG8gZXJydW5iaW5kO1xuIFxuQEAgLTExODUsNiAmIzQzOzExNzcsOSBAQCBzdGF0aWMgaW50IHUzMl9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxuIFxuIGVycnVuYmluZDpcbiBcdHUzMl91bmJpbmRfZmlsdGVyKHRwLCBuLCB0Yik7XG4mIzQzO1x0aHRfZG93biA9IHJ0bmxfZGVyZWZlcmVuY2Uobi1cdTAwM2VodF9kb3duKTtcbiYjNDM7XHRpZiAoaHRfZG93biBcdTAwMjZcdTAwMjYgcmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNmh0X2Rvd24tXHUwMDNlcmVmY250KSlcbiYjNDM7XHRcdGtmcmVlKGh0X2Rvd24pO1xuIFxuICNpZmRlZiBDT05GSUdfQ0xTX1UzMl9NQVJLXG4gXHRmcmVlX3BlcmNwdShuLVx1MDAzZXBjcHVfc3VjY2Vzcyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTQ6MDk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9DTFNfVTMyJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dTMyX2NoYW5nZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJlZmVyZW5jZSBjb3VudGluZyBpc3N1ZSBhbmQgYSBmbGFnIHBhc3NpbmcgYnVnIGluIHRoZSBgdTMyX2NoYW5nZWAgZnVuY3Rpb24gb2YgdGhlIHUzMiB0cmFmZmljIGNsYXNzaWZpZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwNDQyZmI5ZjU1YThhMTFlMTEyNDc1ZjljYjhjMmMwYWRiY2I1N2FiCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMTMgMTQ6MDk6MjEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvY2xzX3UzMi5jIGIvbmV0L3NjaGVkL2Nsc191MzIuYwppbmRleCA4ZjMwY2M4MjE4MWQ5Li42OTQ3MGQ0OWVlOWI4IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvY2xzX3UzMi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9jbHNfdTMyLmMKQEAgLTg3NSw3ICYjNDM7ODc1LDcgQEAgc3RhdGljIGludCB1MzJfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYiwKIAkJICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQogewogCXN0cnVjdCB0Y191X2NvbW1vbiAqdHBfYyA9IHRwLSZndDtkYXRhOwotCXN0cnVjdCB0Y191X2hub2RlICpodDsKJiM0MzsJc3RydWN0IHRjX3VfaG5vZGUgKmh0LCAqaHRfZG93bjsKIAlzdHJ1Y3QgdGNfdV9rbm9kZSAqbjsKIAlzdHJ1Y3QgdGNfdTMyX3NlbCAqczsKIAlzdHJ1Y3QgbmxhdHRyICpvcHQgPSB0Y2FbVENBX09QVElPTlNdOwpAQCAtOTM1LDE3ICYjNDM7OTM1LDkgQEAgc3RhdGljIGludCB1MzJfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYiwKIAogCQl1MzJfYmluZF9maWx0ZXIodHAsIG5ldywgYmFzZSwgdGIpOwogCi0JCWVyciA9IHUzMl9yZXBsYWNlX2h3X2tub2RlKHRwLCBuZXcsIGZsYWdzLCBleHRhY2spOwomIzQzOwkJZXJyID0gdTMyX3JlcGxhY2VfaHdfa25vZGUodHAsIG5ldywgdXNlcmZsYWdzLCBleHRhY2spOwogCQlpZiAoZXJyKSB7CiAJCQl1MzJfdW5iaW5kX2ZpbHRlcih0cCwgbmV3LCB0Yik7Ci0KLQkJCWlmICh0YltUQ0FfVTMyX0xJTktdKSB7Ci0JCQkJc3RydWN0IHRjX3VfaG5vZGUgKmh0X29sZDsKLQotCQkJCWh0X29sZCA9IHJ0bmxfZGVyZWZlcmVuY2Uobi0mZ3Q7aHRfZG93bik7Ci0JCQkJaWYgKGh0X29sZCkKLQkJCQkJcmVmY291bnRfaW5jKCZhbXA7aHRfb2xkLSZndDtyZWZjbnQpOwotCQkJfQogCQkJX191MzJfZGVzdHJveV9rZXkobmV3KTsKIAkJCXJldHVybiBlcnI7CiAJCX0KQEAgLTExNjEsNyAmIzQzOzExNTMsNyBAQCBzdGF0aWMgaW50IHUzMl9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLAogCQlzdHJ1Y3QgdGNfdV9rbm9kZSBfX3JjdSAqKmluczsKIAkJc3RydWN0IHRjX3Vfa25vZGUgKnBpbnM7CiAKLQkJZXJyID0gdTMyX3JlcGxhY2VfaHdfa25vZGUodHAsIG4sIGZsYWdzLCBleHRhY2spOwomIzQzOwkJZXJyID0gdTMyX3JlcGxhY2VfaHdfa25vZGUodHAsIG4sIHVzZXJmbGFncywgZXh0YWNrKTsKIAkJaWYgKGVycikKIAkJCWdvdG8gZXJydW5iaW5kOwogCkBAIC0xMTg1LDYgJiM0MzsxMTc3LDkgQEAgc3RhdGljIGludCB1MzJfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYiwKIAogZXJydW5iaW5kOgogCXUzMl91bmJpbmRfZmlsdGVyKHRwLCBuLCB0Yik7CiYjNDM7CWh0X2Rvd24gPSBydG5sX2RlcmVmZXJlbmNlKG4tJmd0O2h0X2Rvd24pOwomIzQzOwlpZiAoaHRfZG93biAmYW1wOyZhbXA7IHJlZmNvdW50X2RlY19hbmRfdGVzdCgmYW1wO2h0X2Rvd24tJmd0O3JlZmNudCkpCiYjNDM7CQlrZnJlZShodF9kb3duKTsKIAogI2lmZGVmIENPTkZJR19DTFNfVTMyX01BUksKIAlmcmVlX3BlcmNwdShuLSZndDtwY3B1X3N1Y2Nlc3MpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxNDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTUwCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVTMyIENsYXNzaWZpZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF04oCZcyB0b3VjaGluZyBgbmV0L3NjaGVkL2Nsc191MzIuY2AuIFNwZWNpZmljYWxseSwgaXTigJlzIGxvb2tpbmcgYXQgbW9kaWZpY2F0aW9ucyB3aXRoaW4gdGhlIGB1MzJfY2hhbmdlYCBmdW5jdGlvbi4gSW1tZWRpYXRlbHksIHRoaXMgdGVsbHMgbWUgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB0aGUgdXNlci1zcGFjZSBpbnRlcmZhY2UgdG8gY29uZmlndXJlIHRoZSBVMzIgY2xhc3NpZmllciwgd2hpY2ggaXMgcGFydCBvZiB0aGUgdHJhZmZpYyBjb250cm9sICh0Yykgc3Vic3lzdGVtLiBgdTMyX2NoYW5nZWAgaXMgdGhlIGVudHJ5IHBvaW50IGZvciBuZXRsaW5rIG9wZXJhdGlvbnMuCgpUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGFyb3VuZCBgdTMyX3JlcGxhY2VfaHdfa25vZGVgLiBJdCBsb29rcyBsaWtlIHRoZXJlIHdhcyBhIHN1YnRsZSBidWcgd2hlcmUgdGhlIHdyb25nIHNldCBvZiBmbGFncyAoYGZsYWdzYCBpbnN0ZWFkIG9mIGB1c2VyZmxhZ3NgKSB3ZXJlIGJlaW5nIHBhc3NlZCBpbnRvIHRoYXQgZnVuY3Rpb24uIFRoYXQmIzM5O3MgYSBjbGFzc2ljIGV4YW1wbGUgb2YgYSBiaXQtbWFzayBpc3N1ZSBhbmQgY291bGQgcG90ZW50aWFsbHkgbGVhZCB0byB1bmV4cGVjdGVkIGJlaGF2aW9yIGluIGhhcmR3YXJlIG9mZmxvYWQgc2NlbmFyaW9zLCBpZiB0aGlzIGNsYXNzaWZpZXIgaXMgdXNlZCBvbiBhIE5JQyB3aXRoIG9mZmxvYWQgY2FwYWJpbGl0aWVzLgoKQmV5b25kIHRoZSBmbGFncyBmaXgsIHRoZXkmIzM5O3ZlIGFsc28gdHdlYWtlZCB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aHMgcmVsYXRlZCB0byBgdTMyX3JlcGxhY2VfaHdfa25vZGVgIGFuZCBgZXJydW5iaW5kYC4gVGhpcyBzdWdnZXN0cyB0aGV5JiMzOTt2ZSBpZGVudGlmaWVkIHNvbWUgZWRnZSBjYXNlcyBvciBlcnJvciBzY2VuYXJpb3MgdGhhdCB3ZXJlbiYjMzk7dCBiZWluZyBoYW5kbGVkIGNvcnJlY3RseSBiZWZvcmUsIG9yIG1heWJlIHRoZXkmIzM5O3ZlIGZvdW5kIGEgYmV0dGVyIHdheSB0byByZXBvcnQgZXJyb3JzIGJhY2sgdG8gdGhlIHVzZXItc3BhY2UuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGRpZmZzIHRvIHNlZSB0aGUgZXhhY3QgY2hhbmdlcyB0aGVyZSwgYnV0IHRoYXTigJlzIGRlZmluaXRlbHkgYW4gYXJlYSB0byBwYXkgYXR0ZW50aW9uIHRvLiBUaW1lIHRvIGZpcmUgdXAgdGhlIGVkaXRvciBhbmQgZXhhbWluZSBgY2xzX3UzMi5jYCBpbiBkZXRhaWwhCkkgc2hvdWxkIGRvdWJsZSBjaGVjayB0aGUgY29uZmlnIGZvciBgY2xzX3UzMi5jYCB0byBzZWUgaWYgaXQgbWFrZXMgc2Vuc2UgdG8gZW5hYmxlIG9yIGRpc2FibGUgaXQsIGRlcGVuZGluZyBvbiB0aGUga2VybmVsIGFuZCBoYXJkd2FyZSBzZXR1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxNDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjbHNfdTMyLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9NYWtlZmlsZT02Nj1vYmotJChDT05GSUdfTkVUX1NDSF9EVUFMUEkyKVx0JiM0Mzs9IHNjaF9kdWFscGkyLm9cbm5ldC9zY2hlZC9NYWtlZmlsZS02Ny1cbm5ldC9zY2hlZC9NYWtlZmlsZTo2ODpvYmotJChDT05GSUdfTkVUX0NMU19VMzIpXHQmIzQzOz0gY2xzX3UzMi5vXG5uZXQvc2NoZWQvTWFrZWZpbGUtNjktb2JqLSQoQ09ORklHX05FVF9DTFNfUk9VVEU0KVx0JiM0Mzs9IGNsc19yb3V0ZS5vXG4tLVxubmV0L3NjaGVkL2Nsc191MzIuYz00ODg9c3RhdGljIHZvaWQgdTMyX2NsZWFyX2h3X2hub2RlKHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCBzdHJ1Y3QgdGNfdV9obm9kZSAqaCxcbi0tXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTQ5MS1cdHN0cnVjdCB0Y2ZfYmxvY2sgKmJsb2NrID0gdHAtXHUwMDNlY2hhaW4tXHUwMDNlYmxvY2s7XG5uZXQvc2NoZWQvY2xzX3UzMi5jOjQ5MjpcdHN0cnVjdCB0Y19jbHNfdTMyX29mZmxvYWQgY2xzX3UzMiA9IHt9O1xubmV0L3NjaGVkL2Nsc191MzIuYy00OTMtXG4tLVxubmV0L3NjaGVkL2Nsc191MzIuYz01MDM9c3RhdGljIGludCB1MzJfcmVwbGFjZV9od19obm9kZShzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgc3RydWN0IHRjX3VfaG5vZGUgKmgsXG4tLVxubmV0L3NjaGVkL2Nsc191MzIuYy01MDYtXHRzdHJ1Y3QgdGNmX2Jsb2NrICpibG9jayA9IHRwLVx1MDAzZWNoYWluLVx1MDAzZWJsb2NrO1xubmV0L3NjaGVkL2Nsc191MzIuYzo1MDc6XHRzdHJ1Y3QgdGNfY2xzX3UzMl9vZmZsb2FkIGNsc191MzIgPSB7fTtcbm5ldC9zY2hlZC9jbHNfdTMyLmMtNTA4LVx0Ym9vbCBza2lwX3N3ID0gdGNfc2tpcF9zdyhmbGFncyk7XG4tLVxubmV0L3NjaGVkL2Nsc191MzIuYz01MzI9c3RhdGljIHZvaWQgdTMyX3JlbW92ZV9od19rbm9kZShzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgc3RydWN0IHRjX3Vfa25vZGUgKm4sXG4tLVxubmV0L3NjaGVkL2Nsc191MzIuYy01MzUtXHRzdHJ1Y3QgdGNmX2Jsb2NrICpibG9jayA9IHRwLVx1MDAzZWNoYWluLVx1MDAzZWJsb2NrO1xubmV0L3NjaGVkL2Nsc191MzIuYzo1MzY6XHRzdHJ1Y3QgdGNfY2xzX3UzMl9vZmZsb2FkIGNsc191MzIgPSB7fTtcbm5ldC9zY2hlZC9jbHNfdTMyLmMtNTM3LVxuLS1cbm5ldC9zY2hlZC9jbHNfdTMyLmM9NTQ2PXN0YXRpYyBpbnQgdTMyX3JlcGxhY2VfaHdfa25vZGUoc3RydWN0IHRjZl9wcm90byAqdHAsIHN0cnVjdCB0Y191X2tub2RlICpuLFxuLS1cbm5ldC9zY2hlZC9jbHNfdTMyLmMtNTUwLVx0c3RydWN0IHRjZl9ibG9jayAqYmxvY2sgPSB0cC1cdTAwM2VjaGFpbi1cdTAwM2VibG9jaztcbm5ldC9zY2hlZC9jbHNfdTMyLmM6NTUxOlx0c3RydWN0IHRjX2Nsc191MzJfb2ZmbG9hZCBjbHNfdTMyID0ge307XG5uZXQvc2NoZWQvY2xzX3UzMi5jLTU1Mi1cdGJvb2wgc2tpcF9zdyA9IHRjX3NraXBfc3coZmxhZ3MpO1xuLS1cbm5ldC9zY2hlZC9jbHNfdTMyLmM9MTIzMT1zdGF0aWMgaW50IHUzMl9yZW9mZmxvYWRfaG5vZGUoc3RydWN0IHRjZl9wcm90byAqdHAsIHN0cnVjdCB0Y191X2hub2RlICpodCxcbi0tXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTEyMzQte1xubmV0L3NjaGVkL2Nsc191MzIuYzoxMjM1Olx0c3RydWN0IHRjX2Nsc191MzJfb2ZmbG9hZCBjbHNfdTMyID0ge307XG5uZXQvc2NoZWQvY2xzX3UzMi5jLTEyMzYtXHRpbnQgZXJyO1xuLS1cbm5ldC9zY2hlZC9jbHNfdTMyLmM9MTI1MT1zdGF0aWMgaW50IHUzMl9yZW9mZmxvYWRfa25vZGUoc3RydWN0IHRjZl9wcm90byAqdHAsIHN0cnVjdCB0Y191X2tub2RlICpuLFxuLS1cbm5ldC9zY2hlZC9jbHNfdTMyLmMtMTI1Ni1cdHN0cnVjdCB0Y2ZfYmxvY2sgKmJsb2NrID0gdHAtXHUwMDNlY2hhaW4tXHUwMDNlYmxvY2s7XG5uZXQvc2NoZWQvY2xzX3UzMi5jOjEyNTc6XHRzdHJ1Y3QgdGNfY2xzX3UzMl9vZmZsb2FkIGNsc191MzIgPSB7fTtcbm5ldC9zY2hlZC9jbHNfdTMyLmMtMTI1OC1cbi0tXG5uZXQvc2NoZWQvY2xzX3UzMi5jPTEzNDA9c3RhdGljIGludCB1MzJfZHVtcChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCB2b2lkICpmaCxcbi0tXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTE0NTItXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjE0NTM6c3RhdGljIHN0cnVjdCB0Y2ZfcHJvdG9fb3BzIGNsc191MzJfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG5uZXQvc2NoZWQvY2xzX3UzMi5jLTE0NTQtXHQua2luZFx0XHQ9XHRcJiMzNDt1MzJcJiMzNDssXG4tLVxubmV0L3NjaGVkL2Nsc191MzIuYz0xNDY5PXN0YXRpYyBpbnQgX19pbml0IGluaXRfdTMyKHZvaWQpXG4tLVxubmV0L3NjaGVkL2Nsc191MzIuYy0xNDg3LVxubmV0L3NjaGVkL2Nsc191MzIuYzoxNDg4Olx0cmV0ID0gcmVnaXN0ZXJfdGNmX3Byb3RvX29wcyhcdTAwMjZjbHNfdTMyX29wcyk7XG5uZXQvc2NoZWQvY2xzX3UzMi5jLTE0ODktXHRpZiAocmV0KVxuLS1cbm5ldC9zY2hlZC9jbHNfdTMyLmM9MTQ5ND1zdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF91MzIodm9pZClcbm5ldC9zY2hlZC9jbHNfdTMyLmMtMTQ5NS17XG5uZXQvc2NoZWQvY2xzX3UzMi5jOjE0OTY6XHR1bnJlZ2lzdGVyX3RjZl9wcm90b19vcHMoXHUwMDI2Y2xzX3UzMl9vcHMpO1xubmV0L3NjaGVkL2Nsc191MzIuYy0xNDk3LVx0a3ZmcmVlKHRjX3VfY29tbW9uX2hhc2gpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE0OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyNjQKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGB1MzJfY2hhbmdlYCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0JiMzOTtzIGZvY3VzZWQgb24gdGhlIGB1MzJfY2hhbmdlYCBmdW5jdGlvbiB3aXRoaW4gdGhlIGBuZXQvc2NoZWQvY2xzX3UzMi5jYCBmaWxlLiBJdCBzZWVtcyBsaWtlIHRoZSBjb3JlIG9mIHRoZSBtb2RpZmljYXRpb24gcmV2b2x2ZXMgYXJvdW5kIGB1MzJfcmVwbGFjZV9od19rbm9kZWAuIFRoZSBjb2RlJiMzOTtzIGNoYW5naW5nIHRoZSBhcmd1bWVudHMgcGFzc2VkIHRvIHRoYXQgZnVuY3Rpb24sIHNwZWNpZmljYWxseSBmcm9tIGBmbGFnc2AgdG8gYHVzZXJmbGFnc2AgaW4gYSBjb3VwbGUgb2Yga2V5IGluc3RhbmNlcyDigJMgYm90aCBmb3IgYHRwYCBhbmQgYG5gLiBUaGF0IHRlbGxzIG1lIHRoZSBpbnRlbnRpb24gaXMgcHJvYmFibHkgdG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIGludGVybmFsLCBzeXN0ZW0tbGV2ZWwgZmxhZ3MgYW5kIGZsYWdzIHByb3ZpZGVkIGJ5IHRoZSB1c2VyLCB3aGljaCBpcyBhIGNvbW1vbiBhbmQgaW1wb3J0YW50IGRpc3RpbmN0aW9uIGluIHRoZXNlIHNvcnRzIG9mIHN1YnN5c3RlbXMuCgpCZXlvbmQgdGhhdCwgdGhlIGVycm9yIGhhbmRsaW5nIHBhdGgsIGBlcnJ1bmJpbmQ6YCwgaXMgYmVpbmcgcmV3b3JrZWQuIFRoZSBjdXJyZW50IHBhdGNoIGFwcGVhcnMgdG8gYmUgY29ycmVjdGluZyB0aGUgcmVmY291bnRpbmcgb2YgYGh0X2Rvd25gIGluIHRoZSBldmVudCBvZiBhbiBlcnJvci4gSW5zdGVhZCBvZiB0aGUgZXhpc3RpbmcgbG9naWMgYmVpbmcgdHVja2VkIHdpdGhpbiB0aGUgYGlmIChlcnIpYCBibG9jaywgdGhlIHBhdGNoIG1vdmVzIHRoZSBkZWNyZW1lbnQgYW5kIGZyZWUgb3BlcmF0aW9ucyBvdXRzaWRlLiBUaGF0JiMzOTtzIGEgZ29vZCBtb3ZlIOKAkyBpdCBtYWtlcyB0aGUgZXJyb3IgaGFuZGxpbmcgY2xlYW5lciBhbmQgZW5zdXJlcyB0aGF0IHJlc291cmNlcyBhcmUgY29uc2lzdGVudGx5IGNsZWFuZWQgdXAsIHJlZ2FyZGxlc3Mgb2YgaG93IHRoZSBlcnJvciBvY2N1cnMuIFByZXZlbnRzIHJlc291cmNlIGxlYWtzLCB3aGljaCBpcyBleGFjdGx5IHdoYXQgSSYjMzk7bSBsb29raW5nIGZvciBpbiB0cmFmZmljIGNvbnRyb2wuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSByZWZpbmVtZW50LCBhbmQgYW4gaW1wb3J0YW50IG9uZS4KCkxldCYjMzk7cyBxdWlja2x5IHZlcmlmeSB0aGlzLiBDaGVja2luZyB0aGUgY29uZmlnOiBgQ09ORklHX05FVF9DTFNfVTMyYC4gR29vZC4gT2theSwgbGV0IG1lIG1ha2Ugc3VyZSB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGNhbGxlZC4gQWgsIGB1MzJfY2hhbmdlYCBpcyBwYXJ0IG9mIHRoZSBgY2xzX3UzMl9vcHNgLCB0aGF04oCZcyBpdHMgYC5jaGFuZ2VgIGNhbGxiYWNrLiBTbywgeWVzLCBpdCYjMzk7cyBkZWZpbml0ZWx5IHJlYWNoYWJsZS4gTG9va3MgbGlrZSB0aGUgcGF0Y2ggYXV0aG9yIGhhcyBkb25lIHRoZWlyIGR1ZSBkaWxpZ2VuY2UuIFRoaXMgYWxsIHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQgYW5kIHNlbnNpYmxlLCB0aGUgY2hhbmdlIGFwcGVhcnMgc291bmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTQ6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9DTFNfVTMyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZz01MDY9Y29uZmlnIE5FVF9DTFNfRldcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy01MTUtXG5uZXQvc2NoZWQvS2NvbmZpZzo1MTY6Y29uZmlnIE5FVF9DTFNfVTMyXG5uZXQvc2NoZWQvS2NvbmZpZy01MTctXHR0cmlzdGF0ZSBcJiMzNDtVbml2ZXJzYWwgMzJiaXQgY29tcGFyaXNvbnMgdy8gaGFzaGluZyAoVTMyKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE0OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3NzQKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE0OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3UzMl9jaGFuZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9jbHNfdTMyLmM9ODIxPXN0YXRpYyBzdHJ1Y3QgdGNfdV9rbm9kZSAqdTMyX2luaXRfa25vZGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX3Byb3RvICp0cCxcbi0tXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTg3MS1cbm5ldC9zY2hlZC9jbHNfdTMyLmM6ODcyOnN0YXRpYyBpbnQgdTMyX2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTg3My1cdFx0ICAgICAgc3RydWN0IHRjZl9wcm90byAqdHAsIHVuc2lnbmVkIGxvbmcgYmFzZSwgdTMyIGhhbmRsZSxcbi0tXG5uZXQvc2NoZWQvY2xzX3UzMi5jPTE0NTM9c3RhdGljIHN0cnVjdCB0Y2ZfcHJvdG9fb3BzIGNsc191MzJfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG4tLVxubmV0L3NjaGVkL2Nsc191MzIuYy0xNDU4LVx0LmdldFx0XHQ9XHR1MzJfZ2V0LFxubmV0L3NjaGVkL2Nsc191MzIuYzoxNDU5Olx0LmNoYW5nZVx0XHQ9XHR1MzJfY2hhbmdlLFxubmV0L3NjaGVkL2Nsc191MzIuYy0xNDYwLVx0LmRlbGV0ZVx0XHQ9XHR1MzJfZGVsZXRlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE0OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwOTEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgVTMyIENsYXNzaWZpZXIgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gYG5ldC9zY2hlZC9jbHNfdTMyLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGB1MzJfY2hhbmdlYCBmdW5jdGlvbi4gSW1tZWRpYXRlbHksIG15IGV4cGVydCBicmFpbiBmbGFncyB0aGlzIGFzIGEgcG90ZW50aWFsbHkgc2lnbmlmaWNhbnQgYXJlYSBiZWNhdXNlIGB1MzJfY2hhbmdlYCBpcyB0aGUgYC5jaGFuZ2VgIG9wZXJhdGlvbiBmb3IgdGhlIGB1MzJgIGNsYXNzaWZpZXIgd2l0aGluIHRoZSBgdGNgIHN1YnN5c3RlbS4gVGhhdCYjMzk7cyBhIGNvcmUgZnVuY3Rpb24sIGFuZCBJIGtub3cgdGhhdCBtZWFucyB1c2Vyc3BhY2UgY2FuIGRlZmluaXRlbHkgcmVhY2ggaXQsIHByb2JhYmx5IHRocm91Z2ggbmV0bGluayBjYWxscyB1c2luZyBgdGMgZmlsdGVyIGFkZCAuLi4gdTMyIC4uLmAgY29tbWFuZHMuCgpJdCBsb29rcyBsaWtlIHRoZSBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgcmVmZXJlbmNlIGNvdW50aW5nIGlzc3VlIOKAkyBsaWtlbHkgYSBtZW1vcnkgbGVhayDigJMgdGhhdCBoYXBwZW5zIHdoZW4gYHUzMl9yZXBsYWNlX2h3X2tub2RlYCBmYWlscy4gSSBzZWUgdGhlIGtleSBmaXggaXMgcmVtb3ZpbmcgYW4gYHJlZmNvdW50X2luY2AgY2FsbCBpbiB0aGUgZXJyb3IgcGF0aCBmb3IgYSBuZXcga25vZGUgYW5kIGFkZGluZyBzb21lIGNsZWFudXAgd2l0aCBgcmVmY291bnRfZGVjX2FuZF90ZXN0YCBhbmQgYGtmcmVlYCBpbiB0aGUgYGVycnVuYmluZGAgbGFiZWwuIFRoYXQgc291bmRzIHNvbGlkLiBUaGVyZSYjMzk7cyBhbHNvIGEgc3VidGxlIGNoYW5nZSBpbiB0aGUgY2FsbCB0byBgdTMyX3JlcGxhY2VfaHdfa25vZGVgLCBzd2l0Y2hpbmcgYGZsYWdzYCB0byBgdXNlcmZsYWdzYCwgd2hpY2ggaXMgbGVzcyBjcml0aWNhbCwgYnV0IHN0aWxsIHdvcnRoIG5vdGluZy4KClRoaXMgbG9va3MgbGlrZSBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIG5ldHdvcmtpbmcsIGFuZCBhIG1lbW9yeSBsZWFrIGZpeCBpcyBhbHdheXMgaW1wb3J0YW50LiBHaXZlbiBpdCYjMzk7cyBkaXJlY3RseSBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlLCB0aGlzIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIEkmIzM5O2QgZmxhZyBmb3IgZnV6emluZy4gV2UgbmVlZCB0byBwcm9iZSB0aGUgZXJyb3IgcGF0aHMgcGFydGljdWxhcmx5IHdlbGwuCgpNeSBmb2N1cyBzaG91bGQgYmUgb24gYHUzMl9jaGFuZ2VgLCBhbmQsIG9mIGNvdXJzZSwgdGhlIGBORVRfQ0xTX1UzMmAgY29uZmlnIGlzIHRoZSBvbmUgdG8gY2FyZSBhYm91dC4gSSBzaG91bGQgcHJvYmFibHkgYWxzbyBjaGVjayB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBjb25maWd1cmF0aW9ucyBJIG5lZWQgdG8gY29uc2lkZXIgZm9yIGVuYWJsaW5nIGl0LCBidXQgYE5FVF9TQ0hFRGAgaXMgc3RhbmRhcmQsIHNvIHRoYXQgc2hvdWxkbiYjMzk7dCBiZSBhIHByb2JsZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE0OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDUxMDpcdFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgeW91IHdpbGwgYmUgYWJsZSB0byBjbGFzc2lmeSBwYWNrZXRzXG4gNTExOlx0XHQgIGFjY29yZGluZyB0byBuZXRmaWx0ZXIvZmlyZXdhbGwgbWFya3MuXG4gNTEyOlx0XG4gNTEzOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiA1MTQ6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNsc19mdy5cbiA1MTU6XHRcbiA1MTY6XHRjb25maWcgTkVUX0NMU19VMzJcbiA1MTc6XHRcdHRyaXN0YXRlIFwmIzM0O1VuaXZlcnNhbCAzMmJpdCBjb21wYXJpc29ucyB3LyBoYXNoaW5nIChVMzIpXCYjMzQ7XG4gNTE4Olx0XHRzZWxlY3QgTkVUX0NMU1xuIDUxOTpcdFx0aGVscFxuIDUyMDpcdFx0ICBTYXkgWSBoZXJlIHRvIGJlIGFibGUgdG8gY2xhc3NpZnkgcGFja2V0cyB1c2luZyBhIHVuaXZlcnNhbFxuIDUyMTpcdFx0ICAzMmJpdCBwaWVjZXMgYmFzZWQgY29tcGFyaXNvbiBzY2hlbWUuXG4gNTIyOlx0XG4gNTIzOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiA1MjQ6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNsc191MzIuXG4gNTI1Olx0XG4gNTI2Olx0Y29uZmlnIENMU19VMzJfUEVSRlxuIDUyNzpcdFx0Ym9vbCBcJiMzNDtQZXJmb3JtYW5jZSBjb3VudGVycyBzdXBwb3J0XCYjMzQ7XG4gNTI4Olx0XHRkZXBlbmRzIG9uIE5FVF9DTFNfVTMyXG4gNTI5Olx0XHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE0OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1NTYKCQkJCQkJCW91dHB1dDogODgKCQkJCQkJCXRob3VnaHRzOiAxMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgVTMyIENsYXNzaWZpZXIgUGF0Y2gqKgoKT2theSwgc28gYWZ0ZXIgcmV2aWV3aW5nIHRoaXMgcGF0Y2gsIEkmIzM5O3ZlIGRldGVybWluZWQgdGhhdCBgTkVUX0NMU19VMzJgIGlzIGluZGVlZCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIGZvciBpdCB0byBmdW5jdGlvbiBjb3JyZWN0bHkg4oCTIGdvb2QuIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGEgYnVnIHdpdGhpbiBgdTMyX2NoYW5nZWAsIHNwZWNpZmljYWxseSB0aGUgZW50cnkgcG9pbnQgZm9yIGNvbmZpZ3VyaW5nIGB1MzJgIGZpbHRlcnMuIENvbnNpZGVyaW5nIHRoZSBuYXR1cmUgb2YgdGhlIGZpeCDigJMgaXQmIzM5O3MgZGVhbGluZyB3aXRoIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgYSBmbGFnIHBhc3NpbmcgaXNzdWUg4oCTIGFuZCB0aGUgZmFjdCB0aGF0IGB1MzJfY2hhbmdlYCBpcyBhIGZ1bmRhbWVudGFsIGZ1bmN0aW9uIHdpdGhpbiBhIHJlYWNoYWJsZSBhcmVhIG9mIHRoZSBjb3JlIG5ldHdvcmtpbmcgY29kZSwgdGhpcyBkZWZpbml0ZWx5IHdhcnJhbnRzIHNvbWUgZnV6emluZy4gSSYjMzk7bSBnb2luZyB0byBzZXQgYFdvcnRoRnV6emluZz10cnVlYC4gTXkgbWFpbiBmb2N1cyB3aWxsIGJlIG9uIHRoZSBgdTMyX2NoYW5nZWAgZnVuY3Rpb24gaXRzZWxmLCBhcyB0aGF0JiMzOTtzIHdoZXJlIHRoZSBpZGVudGlmaWVkIGJ1Z3MgcmVzaWRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxNDoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX0NMU19VMzImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1MzJfY2hhbmdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcmVmZXJlbmNlIGNvdW50aW5nIGlzc3VlIGFuZCBhIGZsYWcgcGFzc2luZyBidWcgaW4gdGhlIGB1MzJfY2hhbmdlYCBmdW5jdGlvbiBvZiB0aGUgdTMyIHRyYWZmaWMgY2xhc3NpZmllci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX0NMU19VMzImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1MzJfY2hhbmdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcmVmZXJlbmNlIGNvdW50aW5nIGlzc3VlIGFuZCBhIGZsYWcgcGFzc2luZyBidWcgaW4gdGhlIGB1MzJfY2hhbmdlYCBmdW5jdGlvbiBvZiB0aGUgdTMyIHRyYWZmaWMgY2xhc3NpZmllci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTQ6MTA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxNDoxMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyB0d28gaXNzdWVzIGluIHRoZSB1MzIgcGFja2V0IGNsYXNzaWZpZXI6IGEgdHlwbyB3aGVyZSBuZXRsaW5rIG1lc3NhZ2UgZmxhZ3Mgd2VyZSBwYXNzZWQgaW5zdGVhZCBvZiB1c2VyLXNwZWNpZmllZCBUQ0FfVTMyX0ZMQUdTIHRvIGB1MzJfcmVwbGFjZV9od19rbm9kZWAsIGFuZCBhIHJlZmVyZW5jZSBjb3VudGluZyBidWcgb24gdGhlIGBodF9kb3duYCBub2RlIGR1cmluZyBlcnJvciBoYW5kbGluZy4gQm90aCBgZmxhZ3NgIGFuZCBgdXNlcmZsYWdzYCBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgaW50ZWdlcnMuIFRoZSByZWZlcmVuY2UgY291bnRpbmcgZml4IHByZXZlbnRzIGEgbWVtb3J5IGxlYWsgb3IgdXNlLWFmdGVyLWZyZWUsIHdoaWNoIGFyZSBkZXRlY3RhYmxlIGJ5IGttZW1sZWFrIGFuZCBLQVNBTiByZXNwZWN0aXZlbHkuIFRoZXJlIGlzIG5vIGludHJvZHVjdGlvbiBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgc3RydWN0dXJlIHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDA0NDJmYjlmNTVhOGExMWUxMTI0NzVmOWNiOGMyYzBhZGJjYjU3YWIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAxMyAxNDowOToyMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfdTMyLmMgYi9uZXQvc2NoZWQvY2xzX3UzMi5jCmluZGV4IDhmMzBjYzgyMTgxZDkuLjY5NDcwZDQ5ZWU5YjggMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9jbHNfdTMyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL2Nsc191MzIuYwpAQCAtODc1LDcgJiM0Mzs4NzUsNyBAQCBzdGF0aWMgaW50IHUzMl9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLAogCQkgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiB7CiAJc3RydWN0IHRjX3VfY29tbW9uICp0cF9jID0gdHAtJmd0O2RhdGE7Ci0Jc3RydWN0IHRjX3VfaG5vZGUgKmh0OwomIzQzOwlzdHJ1Y3QgdGNfdV9obm9kZSAqaHQsICpodF9kb3duOwogCXN0cnVjdCB0Y191X2tub2RlICpuOwogCXN0cnVjdCB0Y191MzJfc2VsICpzOwogCXN0cnVjdCBubGF0dHIgKm9wdCA9IHRjYVtUQ0FfT1BUSU9OU107CkBAIC05MzUsMTcgJiM0Mzs5MzUsOSBAQCBzdGF0aWMgaW50IHUzMl9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLAogCiAJCXUzMl9iaW5kX2ZpbHRlcih0cCwgbmV3LCBiYXNlLCB0Yik7CiAKLQkJZXJyID0gdTMyX3JlcGxhY2VfaHdfa25vZGUodHAsIG5ldywgZmxhZ3MsIGV4dGFjayk7CiYjNDM7CQllcnIgPSB1MzJfcmVwbGFjZV9od19rbm9kZSh0cCwgbmV3LCB1c2VyZmxhZ3MsIGV4dGFjayk7CiAJCWlmIChlcnIpIHsKIAkJCXUzMl91bmJpbmRfZmlsdGVyKHRwLCBuZXcsIHRiKTsKLQotCQkJaWYgKHRiW1RDQV9VMzJfTElOS10pIHsKLQkJCQlzdHJ1Y3QgdGNfdV9obm9kZSAqaHRfb2xkOwotCi0JCQkJaHRfb2xkID0gcnRubF9kZXJlZmVyZW5jZShuLSZndDtodF9kb3duKTsKLQkJCQlpZiAoaHRfb2xkKQotCQkJCQlyZWZjb3VudF9pbmMoJmFtcDtodF9vbGQtJmd0O3JlZmNudCk7Ci0JCQl9CiAJCQlfX3UzMl9kZXN0cm95X2tleShuZXcpOwogCQkJcmV0dXJuIGVycjsKIAkJfQpAQCAtMTE2MSw3ICYjNDM7MTE1Myw3IEBAIHN0YXRpYyBpbnQgdTMyX2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsCiAJCXN0cnVjdCB0Y191X2tub2RlIF9fcmN1ICoqaW5zOwogCQlzdHJ1Y3QgdGNfdV9rbm9kZSAqcGluczsKIAotCQllcnIgPSB1MzJfcmVwbGFjZV9od19rbm9kZSh0cCwgbiwgZmxhZ3MsIGV4dGFjayk7CiYjNDM7CQllcnIgPSB1MzJfcmVwbGFjZV9od19rbm9kZSh0cCwgbiwgdXNlcmZsYWdzLCBleHRhY2spOwogCQlpZiAoZXJyKQogCQkJZ290byBlcnJ1bmJpbmQ7CiAKQEAgLTExODUsNiAmIzQzOzExNzcsOSBAQCBzdGF0aWMgaW50IHUzMl9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLAogCiBlcnJ1bmJpbmQ6CiAJdTMyX3VuYmluZF9maWx0ZXIodHAsIG4sIHRiKTsKJiM0MzsJaHRfZG93biA9IHJ0bmxfZGVyZWZlcmVuY2Uobi0mZ3Q7aHRfZG93bik7CiYjNDM7CWlmIChodF9kb3duICZhbXA7JmFtcDsgcmVmY291bnRfZGVjX2FuZF90ZXN0KCZhbXA7aHRfZG93bi0mZ3Q7cmVmY250KSkKJiM0MzsJCWtmcmVlKGh0X2Rvd24pOwogCiAjaWZkZWYgQ09ORklHX0NMU19VMzJfTUFSSwogCWZyZWVfcGVyY3B1KG4tJmd0O3BjcHVfc3VjY2Vzcyk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxNDoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTQ3CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBhdGNoIGluIGBuZXQvc2NoZWQvY2xzX3UzMi5jYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC9zY2hlZC9jbHNfdTMyLmNgLiBUaGUgY29yZSBjaGFuZ2UgaXMgaW4gdGhlIGB1MzJfY2hhbmdlYCBmdW5jdGlvbi4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgcmVwbGFjaW5nIGNhbGxzIHRvIGB1MzJfcmVwbGFjZV9od19rbm9kZSh0cCwgbmV3LCBmbGFncywgZXh0YWNrKWAgd2l0aCBgdTMyX3JlcGxhY2VfaHdfa25vZGUodHAsIG5ldywgdXNlcmZsYWdzLCBleHRhY2spYC4gSW1tZWRpYXRlbHksIHRoYXQgdHJpZ2dlcnMgc29tZSB0aG91Z2h0cy4gIEl0IHNtZWxscyBsaWtlIGEgdHlwbyBmaXgsIG9yIHBvc3NpYmx5IGFuIGluaXRpYWxpemF0aW9uIGlzc3VlLiBJdCBzZWVtcyBsaWtlIHRoZSBjb2RlIHdhcyB0cnlpbmcgdG8gcGFzcyBgdXNlcmZsYWdzYCBidXQgd2FzIGFjY2lkZW50YWxseSBwYXNzaW5nIGBmbGFnc2AgaW5zdGVhZC4gQSBxdWljayBzYW5pdHkgY2hlY2sgb2YgdGhlIGNvZGUgaW5kaWNhdGVzIGB1c2VyZmxhZ3NgIGlzIGRlcml2ZWQgZnJvbSB0aGUgdXNlciBpbnB1dCBhbmQgY291bGQgYmUgZGlmZmVyZW50IGZyb20gc29tZSBsb2NhbGx5IHNldCBgZmxhZ3NgIHZhcmlhYmxlLgoKRnVydGhlcm1vcmUsIHRoZXJlJiMzOTtzIGEgbW9kaWZpY2F0aW9uIHRvIHRoZSBlcnJvciBoYW5kbGluZyB3aXRoaW4gdGhpcyBmdW5jdGlvbi4gVGhlIG9yaWdpbmFsIGNvZGUgaGFkIGEgbW9yZSBpbnZvbHZlZCBjbGVhbnVwIHdoZW4gdGhlcmUgd2FzIGEgZmFpbHVyZSB0byByZXBsYWNlIHRoZSBoYXJkd2FyZSBrbm9kZS4gSXQgbG9va3MgbGlrZSBpdCB3YXMgYXR0ZW1wdGluZyB0byBoYW5kbGUgYSBzaXR1YXRpb24gaW52b2x2aW5nIGBUQ0FfVTMyX0xJTktgIGFuZCBhIGBodF9vbGRgIHBvaW50ZXIgd2l0aGluIHRoZSBgaWYgKHRiW1RDQV9VMzJfTElOS10pYCBibG9jay4gVGhlIGNoYW5nZSBzaW1wbGlmaWVzIHRoaXMuIFRoZSBtb3JlIGNvbXBsZXggbG9naWMgYXBwZWFycyB0byBiZSBlbnRpcmVseSByZW1vdmVkLiBUaGlzIHNpbXBsaWZpZWQgYmxvY2sgaXMgYWxzbyByZWZsZWN0ZWQgaW4gYGVycnVuYmluZGAsIGFuZCBpdCBsb29rcyBsaWtlIGEgcmVmY291bnQgZml4IG9mIHRoZSBgaHRfZG93bmAgYW5kIGFzc29jaWF0ZWQgYHJlZmNudGAuCgpHaXZlbiB0aGUgc3Vycm91bmRpbmcgY2hhbmdlcywgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBgZmxhZ3NgIHRvIGB1c2VyZmxhZ3NgIGNoYW5nZSBhbmQgdGhlIGNsZWFudXAsIEkmIzM5O20gbGVhbmluZyB0b3dhcmRzIHRoZSBjb25jbHVzaW9uIHRoYXQgdGhpcyBpcyBhIGZpeCBmb3IgYSByZWZlcmVuY2UgY291bnRpbmcgYnVnLiBQZXJoYXBzIGEgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8gb3IgYSBwb3RlbnRpYWwgbWVtb3J5IGxlYWsgcmVsYXRlZCB0byB0aGUgYGh0X2Rvd25gIHBvaW50ZXIgYW5kIGl0cyBhc3NvY2lhdGVkIHJlZmVyZW5jZSBjb3VudC4gVGhlIG9yaWdpbmFsIGNvZGUgbWlnaHQgaGF2ZSBiZWVuIGluY3JlbWVudGluZyB0aGUgcmVmZXJlbmNlIGNvdW50IGluIG9uZSBwbGFjZSBidXQgbm90IGRlY3JlbWVudGluZyBpdCBjb3JyZWN0bHkgaW4gYWxsIGZhaWx1cmUgcGF0aHMsIG9yIGluIHRoZSBjb3JyZWN0IHBsYWNlLiBOb3csIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgZGVjcmVtZW50aW5nIHRoZSByZWZjb3VudCBpbiBgZXJydW5iaW5kYCBpZiB0aGUgYGh0X2Rvd25gIHJlZmNvdW50IGlzIG5vbi16ZXJvLCB0aGVuIGNhbGxpbmcgYGtmcmVlYCBpZiBpdCYjMzk7cyAwIGFmdGVyIHRoZSBkZWNyZW1lbnQuCgpUbyBiZSBzdXJlLCBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IGBmbGFnc2AgYW5kIGB1c2VyZmxhZ3NgIHJlcHJlc2VudCBpbiB0aGlzIGNvbnRleHQuIEFuZCBhbHNvIHZlcmlmeSB0aGUgY29kZSYjMzk7cyBpbnRlbmRlZCBiZWhhdmlvdXIgYW5kIGhvdyB0aGlzIGNoYW5nZSBpbXBhY3RzIGl0LiBUaGlzIHBhdGNoIHNlZW1zIHRvIGJlIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgY29ycmVjdG5lc3MgaXNzdWUsIHRob3VnaCwgc28gaXQgbWVyaXRzIGNhcmVmdWwgcmV2aWV3LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxNDoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1c2VyZmxhZ3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvY2xzX3UzMi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9jbHNfdTMyLmM9ODcyPXN0YXRpYyBpbnQgdTMyX2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsXG4tLVxubmV0L3NjaGVkL2Nsc191MzIuYy04ODItXHRzdHJ1Y3QgbmxhdHRyICp0YltUQ0FfVTMyX01BWCAmIzQzOyAxXTtcbm5ldC9zY2hlZC9jbHNfdTMyLmM6ODgzOlx0dTMyIGh0aWQsIHVzZXJmbGFncyA9IDA7XG5uZXQvc2NoZWQvY2xzX3UzMi5jLTg4NC1cdHNpemVfdCBzZWxfc2l6ZTtcbi0tXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTkwMS1cdGlmICh0YltUQ0FfVTMyX0ZMQUdTXSkge1xubmV0L3NjaGVkL2Nsc191MzIuYzo5MDI6XHRcdHVzZXJmbGFncyA9IG5sYV9nZXRfdTMyKHRiW1RDQV9VMzJfRkxBR1NdKTtcbm5ldC9zY2hlZC9jbHNfdTMyLmM6OTAzOlx0XHRpZiAoIXRjX2ZsYWdzX3ZhbGlkKHVzZXJmbGFncykpIHtcbm5ldC9zY2hlZC9jbHNfdTMyLmMtOTA0LVx0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwmIzM0O0ludmFsaWQgZmlsdGVyIGZsYWdzXCYjMzQ7KTtcbi0tXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTkxNy1cbm5ldC9zY2hlZC9jbHNfdTMyLmM6OTE4Olx0XHRpZiAoKG4tXHUwMDNlZmxhZ3MgXiB1c2VyZmxhZ3MpIFx1MDAyNlxubmV0L3NjaGVkL2Nsc191MzIuYy05MTktXHRcdCAgICB+KFRDQV9DTFNfRkxBR1NfSU5fSFcgfCBUQ0FfQ0xTX0ZMQUdTX05PVF9JTl9IVykpIHtcbi0tXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTkzNy1cbm5ldC9zY2hlZC9jbHNfdTMyLmM6OTM4Olx0XHRlcnIgPSB1MzJfcmVwbGFjZV9od19rbm9kZSh0cCwgbmV3LCB1c2VyZmxhZ3MsIGV4dGFjayk7XG5uZXQvc2NoZWQvY2xzX3UzMi5jLTkzOS1cdFx0aWYgKGVycikge1xuLS1cbm5ldC9zY2hlZC9jbHNfdTMyLmMtOTkzLVx0XHRpZHJfaW5pdChcdTAwMjZodC1cdTAwM2VoYW5kbGVfaWRyKTtcbm5ldC9zY2hlZC9jbHNfdTMyLmM6OTk0Olx0XHRodC1cdTAwM2VmbGFncyA9IHVzZXJmbGFncztcbm5ldC9zY2hlZC9jbHNfdTMyLmMtOTk1LVxubmV0L3NjaGVkL2Nsc191MzIuYzo5OTY6XHRcdGVyciA9IHUzMl9yZXBsYWNlX2h3X2hub2RlKHRwLCBodCwgdXNlcmZsYWdzLCBleHRhY2spO1xubmV0L3NjaGVkL2Nsc191MzIuYy05OTctXHRcdGlmIChlcnIpIHtcbi0tXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTExMjQtXHRuLVx1MDAzZWZzaGlmdCA9IHMtXHUwMDNlaG1hc2sgPyBmZnMobnRvaGwocy1cdTAwM2VobWFzaykpIC0gMSA6IDA7XG5uZXQvc2NoZWQvY2xzX3UzMi5jOjExMjU6XHRuLVx1MDAzZWZsYWdzID0gdXNlcmZsYWdzO1xubmV0L3NjaGVkL2Nsc191MzIuYy0xMTI2LVxuLS1cbm5ldC9zY2hlZC9jbHNfdTMyLmMtMTE1NS1cbm5ldC9zY2hlZC9jbHNfdTMyLmM6MTE1NjpcdFx0ZXJyID0gdTMyX3JlcGxhY2VfaHdfa25vZGUodHAsIG4sIHVzZXJmbGFncywgZXh0YWNrKTtcbm5ldC9zY2hlZC9jbHNfdTMyLmMtMTE1Ny1cdFx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTQ6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDMzNAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGB1MzJfY2hhbmdlYCBGdW5jdGlvbiYjMzk7cyBGbGFncyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgdTMyX2NoYW5nZWAgZnVuY3Rpb24sIGFuZCBteSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gZGlzc2VjdCB0aGUgZmxhZ3MuIFRoaXMgaXMgbGlrZWx5IHdoZXJlIHRoZSBjb3JlIG9mIHRoZSBiZWhhdmlvciBsaWVzLiBUaGUgYGZsYWdzYCBwYXJhbWV0ZXIgaXMgYWxtb3N0IGNlcnRhaW5seSBhIGJpdGZpZWxkLCBzbyBJJiMzOTtsbCBiZSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIG9mIGVhY2ggcG9zc2libGUgYml0IGJlaW5nIHNldCBvciBjbGVhcmVkLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgcmVjYWxsIGNvbW1vbiBiaXQtZmxhZyBpZGlvbXMsIGxpa2UgY2hlY2tpbmcgaWYgYSBwYXJ0aWN1bGFyIGJpdCBpcyBzZXQgdXNpbmcgYSBiaXR3aXNlIEFORCwgb3IgY2xlYXJpbmcgYSBiaXQgd2l0aCBhIGJpdHdpc2UgQU5EIGNvbWJpbmVkIHdpdGggYSBOT1Qgb3BlcmF0aW9uLiBJJiMzOTttIGFsc28gYW50aWNpcGF0aW5nIHRoYXQgdGhlc2UgZmxhZ3MgYXJlIHByb2JhYmx5IGdvaW5nIHRvIGNvbnRyb2wgc29tZSBhc3BlY3Qgb2YgaG93IHRoZSBgdTMyYCB2YWx1ZSBpcyBtb2RpZmllZCBvciBoYW5kbGVkIHdpdGhpbiB0aGlzIGZ1bmN0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG1lYW5pbmcgb2YgZWFjaCBpbmRpdmlkdWFsIGZsYWcgdG8gdHJ1bHkgZ3Jhc3AgdGhlIGZ1bmN0aW9uJiMzOTtzIG92ZXJhbGwgYmVoYXZpb3IuIEFyZSB0aGVzZSBjb250cm9sIGZsYWdzLCBzdGF0dXMgZmxhZ3MsIG9yIGJvdGg/IEFyZSB0aGVyZSBhbnkgZmxhZyBjb21iaW5hdGlvbnMgdGhhdCBhcmUgaW52YWxpZCBvciBoYXZlIHNwZWNpYWwgbWVhbmluZz8gVGltZSB0byBkaWcgaW50byB0aGUgZGVmaW5pdGlvbiBvZiBgZmxhZ3NgIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxNDoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmbGFncyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9jbHNfdTMyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2Nsc191MzIuYz00ND1zdHJ1Y3QgdGNfdV9rbm9kZSB7XG4tLVxubmV0L3NjaGVkL2Nsc191MzIuYy01NS0jZW5kaWZcbm5ldC9zY2hlZC9jbHNfdTMyLmM6NTY6XHR1MzJcdFx0XHRmbGFncztcbm5ldC9zY2hlZC9jbHNfdTMyLmMtNTctXHR1bnNpZ25lZCBpbnRcdFx0aW5faHdfY291bnQ7XG4tLVxubmV0L3NjaGVkL2Nsc191MzIuYz03MD1zdHJ1Y3QgdGNfdV9obm9kZSB7XG4tLVxubmV0L3NjaGVkL2Nsc191MzIuYy03OC1cdHN0cnVjdCByY3VfaGVhZFx0XHRyY3U7XG5uZXQvc2NoZWQvY2xzX3UzMi5jOjc5Olx0dTMyXHRcdFx0ZmxhZ3M7XG5uZXQvc2NoZWQvY2xzX3UzMi5jLTgwLVx0LyogVGhlICYjMzk7aHQmIzM5OyBmaWVsZCBNVVNUIGJlIHRoZSBsYXN0IGZpZWxkIGluIHN0cnVjdHVyZSB0byBhbGxvdyBmb3Jcbi0tXG5uZXQvc2NoZWQvY2xzX3UzMi5jPTExND1UQ19JTkRJUkVDVF9TQ09QRSBpbnQgdTMyX2NsYXNzaWZ5KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3NjaGVkL2Nsc191MzIuYy0xNDUtXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjE0NjpcdFx0aWYgKHRjX3NraXBfc3cobi1cdTAwM2VmbGFncykpIHtcbm5ldC9zY2hlZC9jbHNfdTMyLmMtMTQ3LVx0XHRcdG4gPSByY3VfZGVyZWZlcmVuY2VfYmgobi1cdTAwM2VuZXh0KTtcbi0tXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTE4MC1jaGVja190ZXJtaW5hbDpcbm5ldC9zY2hlZC9jbHNfdTMyLmM6MTgxOlx0XHRcdGlmIChuLVx1MDAzZXNlbC5mbGFncyBcdTAwMjYgVENfVTMyX1RFUk1JTkFMKSB7XG5uZXQvc2NoZWQvY2xzX3UzMi5jLTE4Mi1cbi0tXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTIyMi1cdFx0fVxubmV0L3NjaGVkL2Nsc191MzIuYzoyMjM6XHRcdGlmICghKG4tXHUwMDNlc2VsLmZsYWdzIFx1MDAyNiAoVENfVTMyX1ZBUk9GRlNFVCB8IFRDX1UzMl9PRkZTRVQgfCBUQ19VMzJfRUFUKSkpXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTIyNC1cdFx0XHRnb3RvIG5leHRfaHQ7XG5uZXQvc2NoZWQvY2xzX3UzMi5jLTIyNS1cbm5ldC9zY2hlZC9jbHNfdTMyLmM6MjI2Olx0XHRpZiAobi1cdTAwM2VzZWwuZmxhZ3MgXHUwMDI2IChUQ19VMzJfT0ZGU0VUIHwgVENfVTMyX1ZBUk9GRlNFVCkpIHtcbm5ldC9zY2hlZC9jbHNfdTMyLmMtMjI3LVx0XHRcdG9mZjIgPSBuLVx1MDAzZXNlbC5vZmYgJiM0MzsgMztcbm5ldC9zY2hlZC9jbHNfdTMyLmM6MjI4Olx0XHRcdGlmIChuLVx1MDAzZXNlbC5mbGFncyBcdTAwMjYgVENfVTMyX1ZBUk9GRlNFVCkge1xubmV0L3NjaGVkL2Nsc191MzIuYy0yMjktXHRcdFx0XHRfX2JlMTYgKmRhdGEsIGhkYXRhO1xuLS1cbm5ldC9zY2hlZC9jbHNfdTMyLmMtMjQwLVx0XHR9XG5uZXQvc2NoZWQvY2xzX3UzMi5jOjI0MTpcdFx0aWYgKG4tXHUwMDNlc2VsLmZsYWdzIFx1MDAyNiBUQ19VMzJfRUFUKSB7XG5uZXQvc2NoZWQvY2xzX3UzMi5jLTI0Mi1cdFx0XHRvZmYgJiM0Mzs9IG9mZjI7XG4tLVxubmV0L3NjaGVkL2Nsc191MzIuYz00ODg9c3RhdGljIHZvaWQgdTMyX2NsZWFyX2h3X2hub2RlKHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCBzdHJ1Y3QgdGNfdV9obm9kZSAqaCxcbi0tXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTQ5My1cbm5ldC9zY2hlZC9jbHNfdTMyLmM6NDk0Olx0dGNfY2xzX2NvbW1vbl9vZmZsb2FkX2luaXQoXHUwMDI2Y2xzX3UzMi5jb21tb24sIHRwLCBoLVx1MDAzZWZsYWdzLCBleHRhY2spO1xubmV0L3NjaGVkL2Nsc191MzIuYy00OTUtXHRjbHNfdTMyLmNvbW1hbmQgPSBUQ19DTFNVMzJfREVMRVRFX0hOT0RFO1xuLS1cbm5ldC9zY2hlZC9jbHNfdTMyLmM9NTAzPXN0YXRpYyBpbnQgdTMyX3JlcGxhY2VfaHdfaG5vZGUoc3RydWN0IHRjZl9wcm90byAqdHAsIHN0cnVjdCB0Y191X2hub2RlICpoLFxubmV0L3NjaGVkL2Nsc191MzIuYzo1MDQ6XHRcdFx0XHR1MzIgZmxhZ3MsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbm5ldC9zY2hlZC9jbHNfdTMyLmMtNTA1LXtcbi0tXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTUwNy1cdHN0cnVjdCB0Y19jbHNfdTMyX29mZmxvYWQgY2xzX3UzMiA9IHt9O1xubmV0L3NjaGVkL2Nsc191MzIuYzo1MDg6XHRib29sIHNraXBfc3cgPSB0Y19za2lwX3N3KGZsYWdzKTtcbm5ldC9zY2hlZC9jbHNfdTMyLmMtNTA5LVx0Ym9vbCBvZmZsb2FkZWQgPSBmYWxzZTtcbi0tXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTUxMS1cbm5ldC9zY2hlZC9jbHNfdTMyLmM6NTEyOlx0dGNfY2xzX2NvbW1vbl9vZmZsb2FkX2luaXQoXHUwMDI2Y2xzX3UzMi5jb21tb24sIHRwLCBmbGFncywgZXh0YWNrKTtcbm5ldC9zY2hlZC9jbHNfdTMyLmMtNTEzLVx0Y2xzX3UzMi5jb21tYW5kID0gVENfQ0xTVTMyX05FV19ITk9ERTtcbi0tXG5uZXQvc2NoZWQvY2xzX3UzMi5jPTUzMj1zdGF0aWMgdm9pZCB1MzJfcmVtb3ZlX2h3X2tub2RlKHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCBzdHJ1Y3QgdGNfdV9rbm9kZSAqbixcbi0tXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTUzNy1cbm5ldC9zY2hlZC9jbHNfdTMyLmM6NTM4Olx0dGNfY2xzX2NvbW1vbl9vZmZsb2FkX2luaXQoXHUwMDI2Y2xzX3UzMi5jb21tb24sIHRwLCBuLVx1MDAzZWZsYWdzLCBleHRhY2spO1xubmV0L3NjaGVkL2Nsc191MzIuYy01MzktXHRjbHNfdTMyLmNvbW1hbmQgPSBUQ19DTFNVMzJfREVMRVRFX0tOT0RFO1xuLS1cbm5ldC9zY2hlZC9jbHNfdTMyLmMtNTQyLVx0dGNfc2V0dXBfY2JfZGVzdHJveShibG9jaywgdHAsIFRDX1NFVFVQX0NMU1UzMiwgXHUwMDI2Y2xzX3UzMiwgZmFsc2UsXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjU0MzpcdFx0XHQgICAgXHUwMDI2bi1cdTAwM2VmbGFncywgXHUwMDI2bi1cdTAwM2Vpbl9od19jb3VudCwgdHJ1ZSk7XG5uZXQvc2NoZWQvY2xzX3UzMi5jLTU0NC19XG4tLVxubmV0L3NjaGVkL2Nsc191MzIuYz01NDY9c3RhdGljIGludCB1MzJfcmVwbGFjZV9od19rbm9kZShzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgc3RydWN0IHRjX3Vfa25vZGUgKm4sXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjU0NzpcdFx0XHRcdHUzMiBmbGFncywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxubmV0L3NjaGVkL2Nsc191MzIuYy01NDgte1xuLS1cbm5ldC9zY2hlZC9jbHNfdTMyLmMtNTUxLVx0c3RydWN0IHRjX2Nsc191MzJfb2ZmbG9hZCBjbHNfdTMyID0ge307XG5uZXQvc2NoZWQvY2xzX3UzMi5jOjU1MjpcdGJvb2wgc2tpcF9zdyA9IHRjX3NraXBfc3coZmxhZ3MpO1xubmV0L3NjaGVkL2Nsc191MzIuYy01NTMtXHRpbnQgZXJyO1xubmV0L3NjaGVkL2Nsc191MzIuYy01NTQtXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjU1NTpcdHRjX2Nsc19jb21tb25fb2ZmbG9hZF9pbml0KFx1MDAyNmNsc191MzIuY29tbW9uLCB0cCwgZmxhZ3MsIGV4dGFjayk7XG5uZXQvc2NoZWQvY2xzX3UzMi5jLTU1Ni1cdGNsc191MzIuY29tbWFuZCA9IFRDX0NMU1UzMl9SRVBMQUNFX0tOT0RFO1xuLS1cbm5ldC9zY2hlZC9jbHNfdTMyLmMtNTcyLVx0ZXJyID0gdGNfc2V0dXBfY2JfYWRkKGJsb2NrLCB0cCwgVENfU0VUVVBfQ0xTVTMyLCBcdTAwMjZjbHNfdTMyLCBza2lwX3N3LFxubmV0L3NjaGVkL2Nsc191MzIuYzo1NzM6XHRcdFx0ICAgICAgXHUwMDI2bi1cdTAwM2VmbGFncywgXHUwMDI2bi1cdTAwM2Vpbl9od19jb3VudCwgdHJ1ZSk7XG5uZXQvc2NoZWQvY2xzX3UzMi5jLTU3NC1cdGlmIChlcnIpIHtcbi0tXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTU3OC1cbm5ldC9zY2hlZC9jbHNfdTMyLmM6NTc5Olx0aWYgKHNraXBfc3cgXHUwMDI2XHUwMDI2ICEobi1cdTAwM2VmbGFncyBcdTAwMjYgVENBX0NMU19GTEFHU19JTl9IVykpXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTU4MC1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxubmV0L3NjaGVkL2Nsc191MzIuYz03NDA9c3RhdGljIGludCB1MzJfc2V0X3Bhcm1zKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRjZl9wcm90byAqdHAsXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTc0MS1cdFx0XHQgc3RydWN0IHRjX3Vfa25vZGUgKm4sIHN0cnVjdCBubGF0dHIgKip0Yixcbm5ldC9zY2hlZC9jbHNfdTMyLmM6NzQyOlx0XHRcdCBzdHJ1Y3QgbmxhdHRyICplc3QsIHUzMiBmbGFncywgdTMyIGZsX2ZsYWdzLFxubmV0L3NjaGVkL2Nsc191MzIuYy03NDMtXHRcdFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTc0Ni1cbm5ldC9zY2hlZC9jbHNfdTMyLmM6NzQ3Olx0ZXJyID0gdGNmX2V4dHNfdmFsaWRhdGVfZXgobmV0LCB0cCwgdGIsIGVzdCwgXHUwMDI2bi1cdTAwM2VleHRzLCBmbGFncyxcbm5ldC9zY2hlZC9jbHNfdTMyLmM6NzQ4Olx0XHRcdFx0ICAgZmxfZmxhZ3MsIGV4dGFjayk7XG5uZXQvc2NoZWQvY2xzX3UzMi5jLTc0OS1cdGlmIChlcnIgXHUwMDNjIDApXG4tLVxubmV0L3NjaGVkL2Nsc191MzIuYz04MjE9c3RhdGljIHN0cnVjdCB0Y191X2tub2RlICp1MzJfaW5pdF9rbm9kZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLFxuLS1cbm5ldC9zY2hlZC9jbHNfdTMyLmMtODM3LVx0bmV3LVx1MDAzZWZzaGlmdCA9IG4tXHUwMDNlZnNoaWZ0O1xubmV0L3NjaGVkL2Nsc191MzIuYzo4Mzg6XHRuZXctXHUwMDNlZmxhZ3MgPSBuLVx1MDAzZWZsYWdzO1xubmV0L3NjaGVkL2Nsc191MzIuYy04MzktXHRSQ1VfSU5JVF9QT0lOVEVSKG5ldy1cdTAwM2VodF9kb3duLCBodCk7XG4tLVxubmV0L3NjaGVkL2Nsc191MzIuYz04NzI9c3RhdGljIGludCB1MzJfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbm5ldC9zY2hlZC9jbHNfdTMyLmMtODczLVx0XHQgICAgICBzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgdW5zaWduZWQgbG9uZyBiYXNlLCB1MzIgaGFuZGxlLFxubmV0L3NjaGVkL2Nsc191MzIuYzo4NzQ6XHRcdCAgICAgIHN0cnVjdCBubGF0dHIgKip0Y2EsIHZvaWQgKiphcmcsIHUzMiBmbGFncyxcbm5ldC9zY2hlZC9jbHNfdTMyLmMtODc1LVx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L3NjaGVkL2Nsc191MzIuYy04ODItXHRzdHJ1Y3QgbmxhdHRyICp0YltUQ0FfVTMyX01BWCAmIzQzOyAxXTtcbm5ldC9zY2hlZC9jbHNfdTMyLmM6ODgzOlx0dTMyIGh0aWQsIHVzZXJmbGFncyA9IDA7XG5uZXQvc2NoZWQvY2xzX3UzMi5jLTg4NC1cdHNpemVfdCBzZWxfc2l6ZTtcbi0tXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTkwMS1cdGlmICh0YltUQ0FfVTMyX0ZMQUdTXSkge1xubmV0L3NjaGVkL2Nsc191MzIuYzo5MDI6XHRcdHVzZXJmbGFncyA9IG5sYV9nZXRfdTMyKHRiW1RDQV9VMzJfRkxBR1NdKTtcbm5ldC9zY2hlZC9jbHNfdTMyLmM6OTAzOlx0XHRpZiAoIXRjX2ZsYWdzX3ZhbGlkKHVzZXJmbGFncykpIHtcbm5ldC9zY2hlZC9jbHNfdTMyLmM6OTA0Olx0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwmIzM0O0ludmFsaWQgZmlsdGVyIGZsYWdzXCYjMzQ7KTtcbm5ldC9zY2hlZC9jbHNfdTMyLmMtOTA1LVx0XHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbm5ldC9zY2hlZC9jbHNfdTMyLmMtOTE3LVxubmV0L3NjaGVkL2Nsc191MzIuYzo5MTg6XHRcdGlmICgobi1cdTAwM2VmbGFncyBeIHVzZXJmbGFncykgXHUwMDI2XG5uZXQvc2NoZWQvY2xzX3UzMi5jLTkxOS1cdFx0ICAgIH4oVENBX0NMU19GTEFHU19JTl9IVyB8IFRDQV9DTFNfRkxBR1NfTk9UX0lOX0hXKSkge1xubmV0L3NjaGVkL2Nsc191MzIuYzo5MjA6XHRcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCYjMzQ7S2V5IG5vZGUgZmxhZ3MgZG8gbm90IG1hdGNoIHBhc3NlZCBmbGFnc1wmIzM0Oyk7XG5uZXQvc2NoZWQvY2xzX3UzMi5jLTkyMS1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTkyOC1cdFx0ZXJyID0gdTMyX3NldF9wYXJtcyhuZXQsIHRwLCBuZXcsIHRiLCB0Y2FbVENBX1JBVEVdLFxubmV0L3NjaGVkL2Nsc191MzIuYzo5Mjk6XHRcdFx0XHQgICAgZmxhZ3MsIG5ldy1cdTAwM2VmbGFncywgZXh0YWNrKTtcbm5ldC9zY2hlZC9jbHNfdTMyLmMtOTMwLVxuLS1cbm5ldC9zY2hlZC9jbHNfdTMyLmMtOTM3LVxubmV0L3NjaGVkL2Nsc191MzIuYzo5Mzg6XHRcdGVyciA9IHUzMl9yZXBsYWNlX2h3X2tub2RlKHRwLCBuZXcsIHVzZXJmbGFncywgZXh0YWNrKTtcbm5ldC9zY2hlZC9jbHNfdTMyLmMtOTM5LVx0XHRpZiAoZXJyKSB7XG4tLVxubmV0L3NjaGVkL2Nsc191MzIuYy05NDQtXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjk0NTpcdFx0aWYgKCF0Y19pbl9odyhuZXctXHUwMDNlZmxhZ3MpKVxubmV0L3NjaGVkL2Nsc191MzIuYzo5NDY6XHRcdFx0bmV3LVx1MDAzZWZsYWdzIHw9IFRDQV9DTFNfRkxBR1NfTk9UX0lOX0hXO1xubmV0L3NjaGVkL2Nsc191MzIuYy05NDctXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjk0ODpcdFx0dGNmX3Byb3RvX3VwZGF0ZV91c2Vzdyh0cCwgbmV3LVx1MDAzZWZsYWdzKTtcbm5ldC9zY2hlZC9jbHNfdTMyLmMtOTQ5LVxuLS1cbm5ldC9zY2hlZC9jbHNfdTMyLmMtOTkzLVx0XHRpZHJfaW5pdChcdTAwMjZodC1cdTAwM2VoYW5kbGVfaWRyKTtcbm5ldC9zY2hlZC9jbHNfdTMyLmM6OTk0Olx0XHRodC1cdTAwM2VmbGFncyA9IHVzZXJmbGFncztcbm5ldC9zY2hlZC9jbHNfdTMyLmMtOTk1LVxubmV0L3NjaGVkL2Nsc191MzIuYzo5OTY6XHRcdGVyciA9IHUzMl9yZXBsYWNlX2h3X2hub2RlKHRwLCBodCwgdXNlcmZsYWdzLCBleHRhY2spO1xubmV0L3NjaGVkL2Nsc191MzIuYy05OTctXHRcdGlmIChlcnIpIHtcbi0tXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTExMjQtXHRuLVx1MDAzZWZzaGlmdCA9IHMtXHUwMDNlaG1hc2sgPyBmZnMobnRvaGwocy1cdTAwM2VobWFzaykpIC0gMSA6IDA7XG5uZXQvc2NoZWQvY2xzX3UzMi5jOjExMjU6XHRuLVx1MDAzZWZsYWdzID0gdXNlcmZsYWdzO1xubmV0L3NjaGVkL2Nsc191MzIuYy0xMTI2LVxuLS1cbm5ldC9zY2hlZC9jbHNfdTMyLmMtMTE0Ny1cdGVyciA9IHUzMl9zZXRfcGFybXMobmV0LCB0cCwgbiwgdGIsIHRjYVtUQ0FfUkFURV0sXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjExNDg6XHRcdFx0ICAgIGZsYWdzLCBuLVx1MDAzZWZsYWdzLCBleHRhY2spO1xubmV0L3NjaGVkL2Nsc191MzIuYy0xMTQ5LVxuLS1cbm5ldC9zY2hlZC9jbHNfdTMyLmMtMTE1NS1cbm5ldC9zY2hlZC9jbHNfdTMyLmM6MTE1NjpcdFx0ZXJyID0gdTMyX3JlcGxhY2VfaHdfa25vZGUodHAsIG4sIHVzZXJmbGFncywgZXh0YWNrKTtcbm5ldC9zY2hlZC9jbHNfdTMyLmMtMTE1Ny1cdFx0aWYgKGVycilcbi0tXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTExNTktXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjExNjA6XHRcdGlmICghdGNfaW5faHcobi1cdTAwM2VmbGFncykpXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjExNjE6XHRcdFx0bi1cdTAwM2VmbGFncyB8PSBUQ0FfQ0xTX0ZMQUdTX05PVF9JTl9IVztcbm5ldC9zY2hlZC9jbHNfdTMyLmMtMTE2Mi1cbm5ldC9zY2hlZC9jbHNfdTMyLmM6MTE2MzpcdFx0dGNmX3Byb3RvX3VwZGF0ZV91c2Vzdyh0cCwgbi1cdTAwM2VmbGFncyk7XG5uZXQvc2NoZWQvY2xzX3UzMi5jLTExNjQtXG4tLVxubmV0L3NjaGVkL2Nsc191MzIuYz0xMjMxPXN0YXRpYyBpbnQgdTMyX3Jlb2ZmbG9hZF9obm9kZShzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgc3RydWN0IHRjX3VfaG5vZGUgKmh0LFxuLS1cbm5ldC9zY2hlZC9jbHNfdTMyLmMtMTIzNy1cbm5ldC9zY2hlZC9jbHNfdTMyLmM6MTIzODpcdHRjX2Nsc19jb21tb25fb2ZmbG9hZF9pbml0KFx1MDAyNmNsc191MzIuY29tbW9uLCB0cCwgaHQtXHUwMDNlZmxhZ3MsIGV4dGFjayk7XG5uZXQvc2NoZWQvY2xzX3UzMi5jLTEyMzktXHRjbHNfdTMyLmNvbW1hbmQgPSBhZGQgPyBUQ19DTFNVMzJfTkVXX0hOT0RFIDogVENfQ0xTVTMyX0RFTEVURV9ITk9ERTtcbi0tXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTEyNDQtXHRlcnIgPSBjYihUQ19TRVRVUF9DTFNVMzIsIFx1MDAyNmNsc191MzIsIGNiX3ByaXYpO1xubmV0L3NjaGVkL2Nsc191MzIuYzoxMjQ1Olx0aWYgKGVyciBcdTAwMjZcdTAwMjYgYWRkIFx1MDAyNlx1MDAyNiB0Y19za2lwX3N3KGh0LVx1MDAzZWZsYWdzKSlcbm5ldC9zY2hlZC9jbHNfdTMyLmMtMTI0Ni1cdFx0cmV0dXJuIGVycjtcbi0tXG5uZXQvc2NoZWQvY2xzX3UzMi5jPTEyNTE9c3RhdGljIGludCB1MzJfcmVvZmZsb2FkX2tub2RlKHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCBzdHJ1Y3QgdGNfdV9rbm9kZSAqbixcbi0tXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTEyNTgtXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjEyNTk6XHR0Y19jbHNfY29tbW9uX29mZmxvYWRfaW5pdChcdTAwMjZjbHNfdTMyLmNvbW1vbiwgdHAsIG4tXHUwMDNlZmxhZ3MsIGV4dGFjayk7XG5uZXQvc2NoZWQvY2xzX3UzMi5jLTEyNjAtXHRjbHNfdTMyLmNvbW1hbmQgPSBhZGQgP1xuLS1cbm5ldC9zY2hlZC9jbHNfdTMyLmMtMTI4MC1cdHJldHVybiB0Y19zZXR1cF9jYl9yZW9mZmxvYWQoYmxvY2ssIHRwLCBhZGQsIGNiLCBUQ19TRVRVUF9DTFNVMzIsXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjEyODE6XHRcdFx0XHQgICAgIFx1MDAyNmNsc191MzIsIGNiX3ByaXYsIFx1MDAyNm4tXHUwMDNlZmxhZ3MsXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTEyODItXHRcdFx0XHQgICAgIFx1MDAyNm4tXHUwMDNlaW5faHdfY291bnQpO1xuLS1cbm5ldC9zY2hlZC9jbHNfdTMyLmM9MTI4NT1zdGF0aWMgaW50IHUzMl9yZW9mZmxvYWQoc3RydWN0IHRjZl9wcm90byAqdHAsIGJvb2wgYWRkLCBmbG93X3NldHVwX2NiX3QgKmNiLFxuLS1cbm5ldC9zY2hlZC9jbHNfdTMyLmMtMTMwMy1cdFx0ICovXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjEzMDQ6XHRcdGlmIChhZGQgXHUwMDI2XHUwMDI2ICF0Y19za2lwX2h3KGh0LVx1MDAzZWZsYWdzKSkge1xubmV0L3NjaGVkL2Nsc191MzIuYy0xMzA1LVx0XHRcdGVyciA9IHUzMl9yZW9mZmxvYWRfaG5vZGUodHAsIGh0LCBhZGQsIGNiLCBjYl9wcml2LFxuLS1cbm5ldC9zY2hlZC9jbHNfdTMyLmMtMTMxNC1cdFx0XHQgICAgIG4gPSBydG5sX2RlcmVmZXJlbmNlKG4tXHUwMDNlbmV4dCkpIHtcbm5ldC9zY2hlZC9jbHNfdTMyLmM6MTMxNTpcdFx0XHRcdGlmICh0Y19za2lwX2h3KG4tXHUwMDNlZmxhZ3MpKVxubmV0L3NjaGVkL2Nsc191MzIuYy0xMzE2LVx0XHRcdFx0XHRjb250aW51ZTtcbi0tXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTEzMjQtXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjEzMjU6XHRcdGlmICghYWRkIFx1MDAyNlx1MDAyNiAhdGNfc2tpcF9odyhodC1cdTAwM2VmbGFncykpXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTEzMjYtXHRcdFx0dTMyX3Jlb2ZmbG9hZF9obm9kZSh0cCwgaHQsIGFkZCwgY2IsIGNiX3ByaXYsIGV4dGFjayk7XG4tLVxubmV0L3NjaGVkL2Nsc191MzIuYz0xMzQwPXN0YXRpYyBpbnQgdTMyX2R1bXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgdm9pZCAqZmgsXG4tLVxubmV0L3NjaGVkL2Nsc191MzIuYy0xMzg2LVxubmV0L3NjaGVkL2Nsc191MzIuYzoxMzg3Olx0XHRpZiAobi1cdTAwM2VmbGFncyBcdTAwMjZcdTAwMjYgbmxhX3B1dF91MzIoc2tiLCBUQ0FfVTMyX0ZMQUdTLCBuLVx1MDAzZWZsYWdzKSlcbm5ldC9zY2hlZC9jbHNfdTMyLmMtMTM4OC1cdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTQ6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQwNwoJCQkJCQkJb3V0cHV0OiAxNjkKCQkJCQkJCXRob3VnaHRzOiA5MTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBVMzIgT2ZmbG9hZCBQYXRjaDogTm8gS01TQU4gTmVlZGVkKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY2hhbmdpbmcgdGhlIGFyZ3VtZW50IHBhc3NlZCB0byBgdTMyX3JlcGxhY2VfaHdfa25vZGVgLiBJIHNlZSB0aGUgb3JpZ2luYWwgY29kZSB3YXMgaW5jb3JyZWN0bHkgcGFzc2luZyBgZmxhZ3NgICh0aGUgbmV0bGluayBtZXNzYWdlIGZsYWdzLCBsaWtlIGBOTE1fRl9DUkVBVEVgIOKAkyB3aGljaCBvcmlnaW5hdGVzIGZyb20gYHRjX25ld190ZmlsdGVyYOKAmXMgYG4tJmd0O25sbXNnX2ZsYWdzYCkgd2hlbiBpdCBzaG91bGQgaGF2ZSBiZWVuIHBhc3NpbmcgYHVzZXJmbGFnc2AuIGB1c2VyZmxhZ3NgIGlzIGRlcml2ZWQgZnJvbSBgdGJbVENBX1UzMl9GTEFHU11gLiBUaGF0JiMzOTtzIGEgY2xlYXIgYnVnIOKAkyBpdCYjMzk7cyBhIG1peC11cCBvZiBuZXRsaW5rIG1ldGFkYXRhIHZlcnN1cyB1c2VyLXNwZWNpZmllZCBmbGFncywgc3BlY2lmaWNhbGx5IGZvciBoYXJkd2FyZSBvZmZsb2FkIGJlaGF2aW9yLiBJbXBvcnRhbnRseSwgYm90aCBgZmxhZ3NgIGFuZCBgdXNlcmZsYWdzYCBhcmUgaW5pdGlhbGl6ZWQuIGBmbGFnc2AgaXMgYW4gYXJndW1lbnQgYW5kIGB1c2VyZmxhZ3NgIGlzIGluaXRpYWxpemVkIHRvIHplcm8gYW5kIGNvbmRpdGlvbmFsbHkgc2V0IGJ5IGBubGFfZ2V0X3UzMmAuIFRoaXMgaGFzIG5vdGhpbmcgdG8gZG8gd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeS4KClRoZSBzZWNvbmQgcGFydCBhZGRyZXNzZXMgYSByZWZlcmVuY2UgY291bnRpbmcgcHJvYmxlbS4gIElmIGB1MzJfcmVwbGFjZV9od19rbm9kZWAgZmFpbHMsIHRoZSBgaHRfZG93bmAgcmVmZXJlbmNlIHdhc24mIzM5O3QgYmVpbmcgbWFuYWdlZCBjb3JyZWN0bHksIGxlYWRpbmcgdG8gYSBwb3RlbnRpYWwgbGVhayBvciB1c2UtYWZ0ZXItZnJlZS4gVGhpcyBwYXRjaCBjb3JyZWN0cyB0aGF0LiBBZ2Fpbiwgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgY29uY2VybnMgaGVyZS4gSXQmIzM5O3MgYWJvdXQgZW5zdXJpbmcgcmVzb3VyY2VzIGFyZSBjb3JyZWN0bHkgZnJlZWQgaW4gZXJyb3IgcGF0aHMuCgpUaGUgZml4IGZvciB0aGUgYGZsYWdzYCB2cyBgdXNlcmZsYWdzYCBhcmd1bWVudCBpcyBhIHN0cmFpZ2h0IGJ1ZyBmaXgsIGFuZCB0aGUgcmVmZXJlbmNlIGNvdW50IGZpeCBjb3JyZWN0cyByZXNvdXJjZSBtYW5hZ2VtZW50LiBOZWl0aGVyIGludHJvZHVjZXMgb3IgZXhwb3NlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuICBLQVNBTiB3b3VsZCBjYXRjaCBhbnkgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMgYXJpc2luZyBmcm9tIHRoZSByZWZlcmVuY2UgY291bnRpbmcgZml4LCBhbmQga21lbWxlYWsgc2hvdWxkIGNhdGNoIG1lbW9yeSBsZWFrcy4gS01TQU4gaXNuJiMzOTt0IHJlbGV2YW50IGhlcmUuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSYjMzk7bGwgcXVpY2tseSBkb3VibGUtY2hlY2sgaG93IGB1MzJfcmVwbGFjZV9od19rbm9kZWAgaXRzZWxmIHVzZXMgYGZsYWdzYDogaXQgdXNlcyBpdCBmb3IgaW5pdGlhbGl6aW5nIHRoZSBvZmZsb2FkIHN0cnVjdHVyZSwgc28gaXQmIzM5O3MgYSBkaXJlY3QgaW50ZWdlciB2YWx1ZSwgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYXQgcGxheSBoZXJlLgoKVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXNuJiMzOTt0IHdhcnJhbnQgYSBLTVNBTiBpbnZlc3RpZ2F0aW9uLiBJdCYjMzk7cyBhIGNsZWFuIGJ1ZyBmaXggYW5kIHJlc291cmNlIG1hbmFnZW1lbnQgY29ycmVjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTQ6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgdHdvIGlzc3VlcyBpbiB0aGUgdTMyIHBhY2tldCBjbGFzc2lmaWVyOiBhIHR5cG8gd2hlcmUgbmV0bGluayBtZXNzYWdlIGZsYWdzIHdlcmUgcGFzc2VkIGluc3RlYWQgb2YgdXNlci1zcGVjaWZpZWQgVENBX1UzMl9GTEFHUyB0byBgdTMyX3JlcGxhY2VfaHdfa25vZGVgLCBhbmQgYSByZWZlcmVuY2UgY291bnRpbmcgYnVnIG9uIHRoZSBgaHRfZG93bmAgbm9kZSBkdXJpbmcgZXJyb3IgaGFuZGxpbmcuIEJvdGggYGZsYWdzYCBhbmQgYHVzZXJmbGFnc2AgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGludGVnZXJzLiBUaGUgcmVmZXJlbmNlIGNvdW50aW5nIGZpeCBwcmV2ZW50cyBhIG1lbW9yeSBsZWFrIG9yIHVzZS1hZnRlci1mcmVlLCB3aGljaCBhcmUgZGV0ZWN0YWJsZSBieSBrbWVtbGVhayBhbmQgS0FTQU4gcmVzcGVjdGl2ZWx5LiBUaGVyZSBpcyBubyBpbnRyb2R1Y3Rpb24gb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIHN0cnVjdHVyZSBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgdHdvIGlzc3VlcyBpbiB0aGUgdTMyIHBhY2tldCBjbGFzc2lmaWVyOiBhIHR5cG8gd2hlcmUgbmV0bGluayBtZXNzYWdlIGZsYWdzIHdlcmUgcGFzc2VkIGluc3RlYWQgb2YgdXNlci1zcGVjaWZpZWQgVENBX1UzMl9GTEFHUyB0byBgdTMyX3JlcGxhY2VfaHdfa25vZGVgLCBhbmQgYSByZWZlcmVuY2UgY291bnRpbmcgYnVnIG9uIHRoZSBgaHRfZG93bmAgbm9kZSBkdXJpbmcgZXJyb3IgaGFuZGxpbmcuIEJvdGggYGZsYWdzYCBhbmQgYHVzZXJmbGFnc2AgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGludGVnZXJzLiBUaGUgcmVmZXJlbmNlIGNvdW50aW5nIGZpeCBwcmV2ZW50cyBhIG1lbW9yeSBsZWFrIG9yIHVzZS1hZnRlci1mcmVlLCB3aGljaCBhcmUgZGV0ZWN0YWJsZSBieSBrbWVtbGVhayBhbmQgS0FTQU4gcmVzcGVjdGl2ZWx5LiBUaGVyZSBpcyBubyBpbnRyb2R1Y3Rpb24gb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIHN0cnVjdHVyZSBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNDowOToyMS45OTg5MTg5NjdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDQwNzQ0NDIwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfQ0xTX1UzMlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInUzMl9jaGFuZ2VcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIHR3byBpc3N1ZXMgaW4gdGhlIHUzMiBwYWNrZXQgY2xhc3NpZmllcjogYSB0eXBvIHdoZXJlIG5ldGxpbmsgbWVzc2FnZSBmbGFncyB3ZXJlIHBhc3NlZCBpbnN0ZWFkIG9mIHVzZXItc3BlY2lmaWVkIFRDQV9VMzJfRkxBR1MgdG8gYHUzMl9yZXBsYWNlX2h3X2tub2RlYCwgYW5kIGEgcmVmZXJlbmNlIGNvdW50aW5nIGJ1ZyBvbiB0aGUgYGh0X2Rvd25gIG5vZGUgZHVyaW5nIGVycm9yIGhhbmRsaW5nLiBCb3RoIGBmbGFnc2AgYW5kIGB1c2VyZmxhZ3NgIGFyZSBmdWxseSBpbml0aWFsaXplZCBpbnRlZ2Vycy4gVGhlIHJlZmVyZW5jZSBjb3VudGluZyBmaXggcHJldmVudHMgYSBtZW1vcnkgbGVhayBvciB1c2UtYWZ0ZXItZnJlZSwgd2hpY2ggYXJlIGRldGVjdGFibGUgYnkga21lbWxlYWsgYW5kIEtBU0FOIHJlc3BlY3RpdmVseS4gVGhlcmUgaXMgbm8gaW50cm9kdWN0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBzdHJ1Y3R1cmUgcGFkZGluZyBsZWFrcywgb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgYmVpbmcgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHJlZmVyZW5jZSBjb3VudGluZyBpc3N1ZSBhbmQgYSBmbGFnIHBhc3NpbmcgYnVnIGluIHRoZSBgdTMyX2NoYW5nZWAgZnVuY3Rpb24gb2YgdGhlIHUzMiB0cmFmZmljIGNsYXNzaWZpZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE0OjA5OjIxLjk5ODkyMzg4N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcyNTc1MDQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMDQ0MmZiOWY1NWE4YTExZTExMjQ3NWY5Y2I4YzJjMGFkYmNiNTdhYlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEF1ZyAxMyAxNDowOToyMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvY2xzX3UzMi5jIGIvbmV0L3NjaGVkL2Nsc191MzIuY1xcbmluZGV4IDhmMzBjYzgyMTgxZDkuLjY5NDcwZDQ5ZWU5YjggMTAwNjQ0XFxuLS0tIGEvbmV0L3NjaGVkL2Nsc191MzIuY1xcbisrKyBiL25ldC9zY2hlZC9jbHNfdTMyLmNcXG5AQCAtODc1LDcgKzg3NSw3IEBAIHN0YXRpYyBpbnQgdTMyX2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsXFxuIFxcdFxcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4ge1xcbiBcXHRzdHJ1Y3QgdGNfdV9jb21tb24gKnRwX2MgPSB0cC1cXHUwMDNlZGF0YTtcXG4tXFx0c3RydWN0IHRjX3VfaG5vZGUgKmh0O1xcbitcXHRzdHJ1Y3QgdGNfdV9obm9kZSAqaHQsICpodF9kb3duO1xcbiBcXHRzdHJ1Y3QgdGNfdV9rbm9kZSAqbjtcXG4gXFx0c3RydWN0IHRjX3UzMl9zZWwgKnM7XFxuIFxcdHN0cnVjdCBubGF0dHIgKm9wdCA9IHRjYVtUQ0FfT1BUSU9OU107XFxuQEAgLTkzNSwxNyArOTM1LDkgQEAgc3RhdGljIGludCB1MzJfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcXG4gXFxuIFxcdFxcdHUzMl9iaW5kX2ZpbHRlcih0cCwgbmV3LCBiYXNlLCB0Yik7XFxuIFxcbi1cXHRcXHRlcnIgPSB1MzJfcmVwbGFjZV9od19rbm9kZSh0cCwgbmV3LCBmbGFncywgZXh0YWNrKTtcXG4rXFx0XFx0ZXJyID0gdTMyX3JlcGxhY2VfaHdfa25vZGUodHAsIG5ldywgdXNlcmZsYWdzLCBleHRhY2spO1xcbiBcXHRcXHRpZiAoZXJyKSB7XFxuIFxcdFxcdFxcdHUzMl91bmJpbmRfZmlsdGVyKHRwLCBuZXcsIHRiKTtcXG4tXFxuLVxcdFxcdFxcdGlmICh0YltUQ0FfVTMyX0xJTktdKSB7XFxuLVxcdFxcdFxcdFxcdHN0cnVjdCB0Y191X2hub2RlICpodF9vbGQ7XFxuLVxcbi1cXHRcXHRcXHRcXHRodF9vbGQgPSBydG5sX2RlcmVmZXJlbmNlKG4tXFx1MDAzZWh0X2Rvd24pO1xcbi1cXHRcXHRcXHRcXHRpZiAoaHRfb2xkKVxcbi1cXHRcXHRcXHRcXHRcXHRyZWZjb3VudF9pbmMoXFx1MDAyNmh0X29sZC1cXHUwMDNlcmVmY250KTtcXG4tXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRfX3UzMl9kZXN0cm95X2tleShuZXcpO1xcbiBcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHRcXHR9XFxuQEAgLTExNjEsNyArMTE1Myw3IEBAIHN0YXRpYyBpbnQgdTMyX2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsXFxuIFxcdFxcdHN0cnVjdCB0Y191X2tub2RlIF9fcmN1ICoqaW5zO1xcbiBcXHRcXHRzdHJ1Y3QgdGNfdV9rbm9kZSAqcGlucztcXG4gXFxuLVxcdFxcdGVyciA9IHUzMl9yZXBsYWNlX2h3X2tub2RlKHRwLCBuLCBmbGFncywgZXh0YWNrKTtcXG4rXFx0XFx0ZXJyID0gdTMyX3JlcGxhY2VfaHdfa25vZGUodHAsIG4sIHVzZXJmbGFncywgZXh0YWNrKTtcXG4gXFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0Z290byBlcnJ1bmJpbmQ7XFxuIFxcbkBAIC0xMTg1LDYgKzExNzcsOSBAQCBzdGF0aWMgaW50IHUzMl9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxcbiBcXG4gZXJydW5iaW5kOlxcbiBcXHR1MzJfdW5iaW5kX2ZpbHRlcih0cCwgbiwgdGIpO1xcbitcXHRodF9kb3duID0gcnRubF9kZXJlZmVyZW5jZShuLVxcdTAwM2VodF9kb3duKTtcXG4rXFx0aWYgKGh0X2Rvd24gXFx1MDAyNlxcdTAwMjYgcmVmY291bnRfZGVjX2FuZF90ZXN0KFxcdTAwMjZodF9kb3duLVxcdTAwM2VyZWZjbnQpKVxcbitcXHRcXHRrZnJlZShodF9kb3duKTtcXG4gXFxuICNpZmRlZiBDT05GSUdfQ0xTX1UzMl9NQVJLXFxuIFxcdGZyZWVfcGVyY3B1KG4tXFx1MDAzZXBjcHVfc3VjY2Vzcyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE0OjA5OjIyLjQ3MjI0MTg4M1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjY1NTY1ODAzNDM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9DTFNfVTMyXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidTMyX2NoYW5nZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcmVmZXJlbmNlIGNvdW50aW5nIGlzc3VlIGFuZCBhIGZsYWcgcGFzc2luZyBidWcgaW4gdGhlIGB1MzJfY2hhbmdlYCBmdW5jdGlvbiBvZiB0aGUgdTMyIHRyYWZmaWMgY2xhc3NpZmllci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMDQ0MmZiOWY1NWE4YTExZTExMjQ3NWY5Y2I4YzJjMGFkYmNiNTdhYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDEzIDE0OjA5OjIxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc191MzIuYyBiL25ldC9zY2hlZC9jbHNfdTMyLmNcbmluZGV4IDhmMzBjYzgyMTgxZDkuLjY5NDcwZDQ5ZWU5YjggMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvY2xzX3UzMi5jXG4rKysgYi9uZXQvc2NoZWQvY2xzX3UzMi5jXG5AQCAtODc1LDcgKzg3NSw3IEBAIHN0YXRpYyBpbnQgdTMyX2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsXG4gXHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4gXHRzdHJ1Y3QgdGNfdV9jb21tb24gKnRwX2MgPSB0cC1cdTAwM2VkYXRhO1xuLVx0c3RydWN0IHRjX3VfaG5vZGUgKmh0O1xuK1x0c3RydWN0IHRjX3VfaG5vZGUgKmh0LCAqaHRfZG93bjtcbiBcdHN0cnVjdCB0Y191X2tub2RlICpuO1xuIFx0c3RydWN0IHRjX3UzMl9zZWwgKnM7XG4gXHRzdHJ1Y3QgbmxhdHRyICpvcHQgPSB0Y2FbVENBX09QVElPTlNdO1xuQEAgLTkzNSwxNyArOTM1LDkgQEAgc3RhdGljIGludCB1MzJfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbiBcbiBcdFx0dTMyX2JpbmRfZmlsdGVyKHRwLCBuZXcsIGJhc2UsIHRiKTtcbiBcbi1cdFx0ZXJyID0gdTMyX3JlcGxhY2VfaHdfa25vZGUodHAsIG5ldywgZmxhZ3MsIGV4dGFjayk7XG4rXHRcdGVyciA9IHUzMl9yZXBsYWNlX2h3X2tub2RlKHRwLCBuZXcsIHVzZXJmbGFncywgZXh0YWNrKTtcbiBcdFx0aWYgKGVycikge1xuIFx0XHRcdHUzMl91bmJpbmRfZmlsdGVyKHRwLCBuZXcsIHRiKTtcbi1cbi1cdFx0XHRpZiAodGJbVENBX1UzMl9MSU5LXSkge1xuLVx0XHRcdFx0c3RydWN0IHRjX3VfaG5vZGUgKmh0X29sZDtcbi1cbi1cdFx0XHRcdGh0X29sZCA9IHJ0bmxfZGVyZWZlcmVuY2Uobi1cdTAwM2VodF9kb3duKTtcbi1cdFx0XHRcdGlmIChodF9vbGQpXG4tXHRcdFx0XHRcdHJlZmNvdW50X2luYyhcdTAwMjZodF9vbGQtXHUwMDNlcmVmY250KTtcbi1cdFx0XHR9XG4gXHRcdFx0X191MzJfZGVzdHJveV9rZXkobmV3KTtcbiBcdFx0XHRyZXR1cm4gZXJyO1xuIFx0XHR9XG5AQCAtMTE2MSw3ICsxMTUzLDcgQEAgc3RhdGljIGludCB1MzJfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbiBcdFx0c3RydWN0IHRjX3Vfa25vZGUgX19yY3UgKippbnM7XG4gXHRcdHN0cnVjdCB0Y191X2tub2RlICpwaW5zO1xuIFxuLVx0XHRlcnIgPSB1MzJfcmVwbGFjZV9od19rbm9kZSh0cCwgbiwgZmxhZ3MsIGV4dGFjayk7XG4rXHRcdGVyciA9IHUzMl9yZXBsYWNlX2h3X2tub2RlKHRwLCBuLCB1c2VyZmxhZ3MsIGV4dGFjayk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0Z290byBlcnJ1bmJpbmQ7XG4gXG5AQCAtMTE4NSw2ICsxMTc3LDkgQEAgc3RhdGljIGludCB1MzJfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbiBcbiBlcnJ1bmJpbmQ6XG4gXHR1MzJfdW5iaW5kX2ZpbHRlcih0cCwgbiwgdGIpO1xuK1x0aHRfZG93biA9IHJ0bmxfZGVyZWZlcmVuY2Uobi1cdTAwM2VodF9kb3duKTtcbitcdGlmIChodF9kb3duIFx1MDAyNlx1MDAyNiByZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2aHRfZG93bi1cdTAwM2VyZWZjbnQpKVxuK1x0XHRrZnJlZShodF9kb3duKTtcbiBcbiAjaWZkZWYgQ09ORklHX0NMU19VMzJfTUFSS1xuIFx0ZnJlZV9wZXJjcHUobi1cdTAwM2VwY3B1X3N1Y2Nlc3MpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTQ6MDk6MjIuNDcyMjQzNDIzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjA5MzAyMTMzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFUzMiBDbGFzc2lmaWVyIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXTigJlzIHRvdWNoaW5nIGBuZXQvc2NoZWQvY2xzX3UzMi5jYC4gU3BlY2lmaWNhbGx5LCBpdOKAmXMgbG9va2luZyBhdCBtb2RpZmljYXRpb25zIHdpdGhpbiB0aGUgYHUzMl9jaGFuZ2VgIGZ1bmN0aW9uLiBJbW1lZGlhdGVseSwgdGhpcyB0ZWxscyBtZSB3ZSdyZSBkZWFsaW5nIHdpdGggdGhlIHVzZXItc3BhY2UgaW50ZXJmYWNlIHRvIGNvbmZpZ3VyZSB0aGUgVTMyIGNsYXNzaWZpZXIsIHdoaWNoIGlzIHBhcnQgb2YgdGhlIHRyYWZmaWMgY29udHJvbCAodGMpIHN1YnN5c3RlbS4gYHUzMl9jaGFuZ2VgIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgbmV0bGluayBvcGVyYXRpb25zLlxuXG5UaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGFyb3VuZCBgdTMyX3JlcGxhY2VfaHdfa25vZGVgLiBJdCBsb29rcyBsaWtlIHRoZXJlIHdhcyBhIHN1YnRsZSBidWcgd2hlcmUgdGhlIHdyb25nIHNldCBvZiBmbGFncyAoYGZsYWdzYCBpbnN0ZWFkIG9mIGB1c2VyZmxhZ3NgKSB3ZXJlIGJlaW5nIHBhc3NlZCBpbnRvIHRoYXQgZnVuY3Rpb24uIFRoYXQncyBhIGNsYXNzaWMgZXhhbXBsZSBvZiBhIGJpdC1tYXNrIGlzc3VlIGFuZCBjb3VsZCBwb3RlbnRpYWxseSBsZWFkIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3IgaW4gaGFyZHdhcmUgb2ZmbG9hZCBzY2VuYXJpb3MsIGlmIHRoaXMgY2xhc3NpZmllciBpcyB1c2VkIG9uIGEgTklDIHdpdGggb2ZmbG9hZCBjYXBhYmlsaXRpZXMuXG5cbkJleW9uZCB0aGUgZmxhZ3MgZml4LCB0aGV5J3ZlIGFsc28gdHdlYWtlZCB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aHMgcmVsYXRlZCB0byBgdTMyX3JlcGxhY2VfaHdfa25vZGVgIGFuZCBgZXJydW5iaW5kYC4gVGhpcyBzdWdnZXN0cyB0aGV5J3ZlIGlkZW50aWZpZWQgc29tZSBlZGdlIGNhc2VzIG9yIGVycm9yIHNjZW5hcmlvcyB0aGF0IHdlcmVuJ3QgYmVpbmcgaGFuZGxlZCBjb3JyZWN0bHkgYmVmb3JlLCBvciBtYXliZSB0aGV5J3ZlIGZvdW5kIGEgYmV0dGVyIHdheSB0byByZXBvcnQgZXJyb3JzIGJhY2sgdG8gdGhlIHVzZXItc3BhY2UuIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgZGlmZnMgdG8gc2VlIHRoZSBleGFjdCBjaGFuZ2VzIHRoZXJlLCBidXQgdGhhdOKAmXMgZGVmaW5pdGVseSBhbiBhcmVhIHRvIHBheSBhdHRlbnRpb24gdG8uIFRpbWUgdG8gZmlyZSB1cCB0aGUgZWRpdG9yIGFuZCBleGFtaW5lIGBjbHNfdTMyLmNgIGluIGRldGFpbCFcbkkgc2hvdWxkIGRvdWJsZSBjaGVjayB0aGUgY29uZmlnIGZvciBgY2xzX3UzMi5jYCB0byBzZWUgaWYgaXQgbWFrZXMgc2Vuc2UgdG8gZW5hYmxlIG9yIGRpc2FibGUgaXQsIGRlcGVuZGluZyBvbiB0aGUga2VybmVsIGFuZCBoYXJkd2FyZSBzZXR1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU1MCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE0OjA5OjI4LjU2NTI2OTc1NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzU3MzA1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjbHNfdTMyLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvTWFrZWZpbGU9NjY9b2JqLSQoQ09ORklHX05FVF9TQ0hfRFVBTFBJMilcXHQrPSBzY2hfZHVhbHBpMi5vXFxubmV0L3NjaGVkL01ha2VmaWxlLTY3LVxcbm5ldC9zY2hlZC9NYWtlZmlsZTo2ODpvYmotJChDT05GSUdfTkVUX0NMU19VMzIpXFx0Kz0gY2xzX3UzMi5vXFxubmV0L3NjaGVkL01ha2VmaWxlLTY5LW9iai0kKENPTkZJR19ORVRfQ0xTX1JPVVRFNClcXHQrPSBjbHNfcm91dGUub1xcbi0tXFxubmV0L3NjaGVkL2Nsc191MzIuYz00ODg9c3RhdGljIHZvaWQgdTMyX2NsZWFyX2h3X2hub2RlKHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCBzdHJ1Y3QgdGNfdV9obm9kZSAqaCxcXG4tLVxcbm5ldC9zY2hlZC9jbHNfdTMyLmMtNDkxLVxcdHN0cnVjdCB0Y2ZfYmxvY2sgKmJsb2NrID0gdHAtXFx1MDAzZWNoYWluLVxcdTAwM2VibG9jaztcXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjQ5MjpcXHRzdHJ1Y3QgdGNfY2xzX3UzMl9vZmZsb2FkIGNsc191MzIgPSB7fTtcXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTQ5My1cXG4tLVxcbm5ldC9zY2hlZC9jbHNfdTMyLmM9NTAzPXN0YXRpYyBpbnQgdTMyX3JlcGxhY2VfaHdfaG5vZGUoc3RydWN0IHRjZl9wcm90byAqdHAsIHN0cnVjdCB0Y191X2hub2RlICpoLFxcbi0tXFxubmV0L3NjaGVkL2Nsc191MzIuYy01MDYtXFx0c3RydWN0IHRjZl9ibG9jayAqYmxvY2sgPSB0cC1cXHUwMDNlY2hhaW4tXFx1MDAzZWJsb2NrO1xcbm5ldC9zY2hlZC9jbHNfdTMyLmM6NTA3OlxcdHN0cnVjdCB0Y19jbHNfdTMyX29mZmxvYWQgY2xzX3UzMiA9IHt9O1xcbm5ldC9zY2hlZC9jbHNfdTMyLmMtNTA4LVxcdGJvb2wgc2tpcF9zdyA9IHRjX3NraXBfc3coZmxhZ3MpO1xcbi0tXFxubmV0L3NjaGVkL2Nsc191MzIuYz01MzI9c3RhdGljIHZvaWQgdTMyX3JlbW92ZV9od19rbm9kZShzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgc3RydWN0IHRjX3Vfa25vZGUgKm4sXFxuLS1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTUzNS1cXHRzdHJ1Y3QgdGNmX2Jsb2NrICpibG9jayA9IHRwLVxcdTAwM2VjaGFpbi1cXHUwMDNlYmxvY2s7XFxubmV0L3NjaGVkL2Nsc191MzIuYzo1MzY6XFx0c3RydWN0IHRjX2Nsc191MzJfb2ZmbG9hZCBjbHNfdTMyID0ge307XFxubmV0L3NjaGVkL2Nsc191MzIuYy01MzctXFxuLS1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jPTU0Nj1zdGF0aWMgaW50IHUzMl9yZXBsYWNlX2h3X2tub2RlKHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCBzdHJ1Y3QgdGNfdV9rbm9kZSAqbixcXG4tLVxcbm5ldC9zY2hlZC9jbHNfdTMyLmMtNTUwLVxcdHN0cnVjdCB0Y2ZfYmxvY2sgKmJsb2NrID0gdHAtXFx1MDAzZWNoYWluLVxcdTAwM2VibG9jaztcXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjU1MTpcXHRzdHJ1Y3QgdGNfY2xzX3UzMl9vZmZsb2FkIGNsc191MzIgPSB7fTtcXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTU1Mi1cXHRib29sIHNraXBfc3cgPSB0Y19za2lwX3N3KGZsYWdzKTtcXG4tLVxcbm5ldC9zY2hlZC9jbHNfdTMyLmM9MTIzMT1zdGF0aWMgaW50IHUzMl9yZW9mZmxvYWRfaG5vZGUoc3RydWN0IHRjZl9wcm90byAqdHAsIHN0cnVjdCB0Y191X2hub2RlICpodCxcXG4tLVxcbm5ldC9zY2hlZC9jbHNfdTMyLmMtMTIzNC17XFxubmV0L3NjaGVkL2Nsc191MzIuYzoxMjM1OlxcdHN0cnVjdCB0Y19jbHNfdTMyX29mZmxvYWQgY2xzX3UzMiA9IHt9O1xcbm5ldC9zY2hlZC9jbHNfdTMyLmMtMTIzNi1cXHRpbnQgZXJyO1xcbi0tXFxubmV0L3NjaGVkL2Nsc191MzIuYz0xMjUxPXN0YXRpYyBpbnQgdTMyX3Jlb2ZmbG9hZF9rbm9kZShzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgc3RydWN0IHRjX3Vfa25vZGUgKm4sXFxuLS1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTEyNTYtXFx0c3RydWN0IHRjZl9ibG9jayAqYmxvY2sgPSB0cC1cXHUwMDNlY2hhaW4tXFx1MDAzZWJsb2NrO1xcbm5ldC9zY2hlZC9jbHNfdTMyLmM6MTI1NzpcXHRzdHJ1Y3QgdGNfY2xzX3UzMl9vZmZsb2FkIGNsc191MzIgPSB7fTtcXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTEyNTgtXFxuLS1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jPTEzNDA9c3RhdGljIGludCB1MzJfZHVtcChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCB2b2lkICpmaCxcXG4tLVxcbm5ldC9zY2hlZC9jbHNfdTMyLmMtMTQ1Mi1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjE0NTM6c3RhdGljIHN0cnVjdCB0Y2ZfcHJvdG9fb3BzIGNsc191MzJfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XFxubmV0L3NjaGVkL2Nsc191MzIuYy0xNDU0LVxcdC5raW5kXFx0XFx0PVxcdFxcXCJ1MzJcXFwiLFxcbi0tXFxubmV0L3NjaGVkL2Nsc191MzIuYz0xNDY5PXN0YXRpYyBpbnQgX19pbml0IGluaXRfdTMyKHZvaWQpXFxuLS1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTE0ODctXFxubmV0L3NjaGVkL2Nsc191MzIuYzoxNDg4OlxcdHJldCA9IHJlZ2lzdGVyX3RjZl9wcm90b19vcHMoXFx1MDAyNmNsc191MzJfb3BzKTtcXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTE0ODktXFx0aWYgKHJldClcXG4tLVxcbm5ldC9zY2hlZC9jbHNfdTMyLmM9MTQ5ND1zdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF91MzIodm9pZClcXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTE0OTUte1xcbm5ldC9zY2hlZC9jbHNfdTMyLmM6MTQ5NjpcXHR1bnJlZ2lzdGVyX3RjZl9wcm90b19vcHMoXFx1MDAyNmNsc191MzJfb3BzKTtcXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTE0OTctXFx0a3ZmcmVlKHRjX3VfY29tbW9uX2hhc2gpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNDowOToyOC42MTg4NTA0ODRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDk3MjM0MzAyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgYHUzMl9jaGFuZ2VgIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0J3MgZm9jdXNlZCBvbiB0aGUgYHUzMl9jaGFuZ2VgIGZ1bmN0aW9uIHdpdGhpbiB0aGUgYG5ldC9zY2hlZC9jbHNfdTMyLmNgIGZpbGUuIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgb2YgdGhlIG1vZGlmaWNhdGlvbiByZXZvbHZlcyBhcm91bmQgYHUzMl9yZXBsYWNlX2h3X2tub2RlYC4gVGhlIGNvZGUncyBjaGFuZ2luZyB0aGUgYXJndW1lbnRzIHBhc3NlZCB0byB0aGF0IGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgZnJvbSBgZmxhZ3NgIHRvIGB1c2VyZmxhZ3NgIGluIGEgY291cGxlIG9mIGtleSBpbnN0YW5jZXMg4oCTIGJvdGggZm9yIGB0cGAgYW5kIGBuYC4gVGhhdCB0ZWxscyBtZSB0aGUgaW50ZW50aW9uIGlzIHByb2JhYmx5IHRvIGRpZmZlcmVudGlhdGUgYmV0d2VlbiBpbnRlcm5hbCwgc3lzdGVtLWxldmVsIGZsYWdzIGFuZCBmbGFncyBwcm92aWRlZCBieSB0aGUgdXNlciwgd2hpY2ggaXMgYSBjb21tb24gYW5kIGltcG9ydGFudCBkaXN0aW5jdGlvbiBpbiB0aGVzZSBzb3J0cyBvZiBzdWJzeXN0ZW1zLlxuXG5CZXlvbmQgdGhhdCwgdGhlIGVycm9yIGhhbmRsaW5nIHBhdGgsIGBlcnJ1bmJpbmQ6YCwgaXMgYmVpbmcgcmV3b3JrZWQuIFRoZSBjdXJyZW50IHBhdGNoIGFwcGVhcnMgdG8gYmUgY29ycmVjdGluZyB0aGUgcmVmY291bnRpbmcgb2YgYGh0X2Rvd25gIGluIHRoZSBldmVudCBvZiBhbiBlcnJvci4gSW5zdGVhZCBvZiB0aGUgZXhpc3RpbmcgbG9naWMgYmVpbmcgdHVja2VkIHdpdGhpbiB0aGUgYGlmIChlcnIpYCBibG9jaywgdGhlIHBhdGNoIG1vdmVzIHRoZSBkZWNyZW1lbnQgYW5kIGZyZWUgb3BlcmF0aW9ucyBvdXRzaWRlLiBUaGF0J3MgYSBnb29kIG1vdmUg4oCTIGl0IG1ha2VzIHRoZSBlcnJvciBoYW5kbGluZyBjbGVhbmVyIGFuZCBlbnN1cmVzIHRoYXQgcmVzb3VyY2VzIGFyZSBjb25zaXN0ZW50bHkgY2xlYW5lZCB1cCwgcmVnYXJkbGVzcyBvZiBob3cgdGhlIGVycm9yIG9jY3Vycy4gUHJldmVudHMgcmVzb3VyY2UgbGVha3MsIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCBJJ20gbG9va2luZyBmb3IgaW4gdHJhZmZpYyBjb250cm9sLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgcmVmaW5lbWVudCwgYW5kIGFuIGltcG9ydGFudCBvbmUuXG5cbkxldCdzIHF1aWNrbHkgdmVyaWZ5IHRoaXMuIENoZWNraW5nIHRoZSBjb25maWc6IGBDT05GSUdfTkVUX0NMU19VMzJgLiBHb29kLiBPa2F5LCBsZXQgbWUgbWFrZSBzdXJlIHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgY2FsbGVkLiBBaCwgYHUzMl9jaGFuZ2VgIGlzIHBhcnQgb2YgdGhlIGBjbHNfdTMyX29wc2AsIHRoYXTigJlzIGl0cyBgLmNoYW5nZWAgY2FsbGJhY2suIFNvLCB5ZXMsIGl0J3MgZGVmaW5pdGVseSByZWFjaGFibGUuIExvb2tzIGxpa2UgdGhlIHBhdGNoIGF1dGhvciBoYXMgZG9uZSB0aGVpciBkdWUgZGlsaWdlbmNlLiBUaGlzIGFsbCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGFuZCBzZW5zaWJsZSwgdGhlIGNoYW5nZSBhcHBlYXJzIHNvdW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjY0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE0OjA5OjQzLjU5MTIwNDUxNloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDUyMDAwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX0NMU19VMzJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvS2NvbmZpZz01MDY9Y29uZmlnIE5FVF9DTFNfRldcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnLTUxNS1cXG5uZXQvc2NoZWQvS2NvbmZpZzo1MTY6Y29uZmlnIE5FVF9DTFNfVTMyXFxubmV0L3NjaGVkL0tjb25maWctNTE3LVxcdHRyaXN0YXRlIFxcXCJVbml2ZXJzYWwgMzJiaXQgY29tcGFyaXNvbnMgdy8gaGFzaGluZyAoVTMyKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTQ6MDk6NDMuNjM1NzMxMDU0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjE0MTU4MDY3OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjo0Nzc0LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNDoxMDowNS4wNTE1NDA1OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTk1OTk2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1MzJfY2hhbmdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL2Nsc191MzIuYz04MjE9c3RhdGljIHN0cnVjdCB0Y191X2tub2RlICp1MzJfaW5pdF9rbm9kZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLFxcbi0tXFxubmV0L3NjaGVkL2Nsc191MzIuYy04NzEtXFxubmV0L3NjaGVkL2Nsc191MzIuYzo4NzI6c3RhdGljIGludCB1MzJfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTg3My1cXHRcXHQgICAgICBzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgdW5zaWduZWQgbG9uZyBiYXNlLCB1MzIgaGFuZGxlLFxcbi0tXFxubmV0L3NjaGVkL2Nsc191MzIuYz0xNDUzPXN0YXRpYyBzdHJ1Y3QgdGNmX3Byb3RvX29wcyBjbHNfdTMyX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xcbi0tXFxubmV0L3NjaGVkL2Nsc191MzIuYy0xNDU4LVxcdC5nZXRcXHRcXHQ9XFx0dTMyX2dldCxcXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjE0NTk6XFx0LmNoYW5nZVxcdFxcdD1cXHR1MzJfY2hhbmdlLFxcbm5ldC9zY2hlZC9jbHNfdTMyLmMtMTQ2MC1cXHQuZGVsZXRlXFx0XFx0PVxcdHUzMl9kZWxldGUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE0OjEwOjA1LjEwMTUwNTY4OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE3MDU5ODA3NDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFUzMiBDbGFzc2lmaWVyIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gYG5ldC9zY2hlZC9jbHNfdTMyLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGB1MzJfY2hhbmdlYCBmdW5jdGlvbi4gSW1tZWRpYXRlbHksIG15IGV4cGVydCBicmFpbiBmbGFncyB0aGlzIGFzIGEgcG90ZW50aWFsbHkgc2lnbmlmaWNhbnQgYXJlYSBiZWNhdXNlIGB1MzJfY2hhbmdlYCBpcyB0aGUgYC5jaGFuZ2VgIG9wZXJhdGlvbiBmb3IgdGhlIGB1MzJgIGNsYXNzaWZpZXIgd2l0aGluIHRoZSBgdGNgIHN1YnN5c3RlbS4gVGhhdCdzIGEgY29yZSBmdW5jdGlvbiwgYW5kIEkga25vdyB0aGF0IG1lYW5zIHVzZXJzcGFjZSBjYW4gZGVmaW5pdGVseSByZWFjaCBpdCwgcHJvYmFibHkgdGhyb3VnaCBuZXRsaW5rIGNhbGxzIHVzaW5nIGB0YyBmaWx0ZXIgYWRkIC4uLiB1MzIgLi4uYCBjb21tYW5kcy5cblxuSXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIHJlZmVyZW5jZSBjb3VudGluZyBpc3N1ZSDigJMgbGlrZWx5IGEgbWVtb3J5IGxlYWsg4oCTIHRoYXQgaGFwcGVucyB3aGVuIGB1MzJfcmVwbGFjZV9od19rbm9kZWAgZmFpbHMuIEkgc2VlIHRoZSBrZXkgZml4IGlzIHJlbW92aW5nIGFuIGByZWZjb3VudF9pbmNgIGNhbGwgaW4gdGhlIGVycm9yIHBhdGggZm9yIGEgbmV3IGtub2RlIGFuZCBhZGRpbmcgc29tZSBjbGVhbnVwIHdpdGggYHJlZmNvdW50X2RlY19hbmRfdGVzdGAgYW5kIGBrZnJlZWAgaW4gdGhlIGBlcnJ1bmJpbmRgIGxhYmVsLiBUaGF0IHNvdW5kcyBzb2xpZC4gVGhlcmUncyBhbHNvIGEgc3VidGxlIGNoYW5nZSBpbiB0aGUgY2FsbCB0byBgdTMyX3JlcGxhY2VfaHdfa25vZGVgLCBzd2l0Y2hpbmcgYGZsYWdzYCB0byBgdXNlcmZsYWdzYCwgd2hpY2ggaXMgbGVzcyBjcml0aWNhbCwgYnV0IHN0aWxsIHdvcnRoIG5vdGluZy5cblxuVGhpcyBsb29rcyBsaWtlIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBrZXJuZWwgbmV0d29ya2luZywgYW5kIGEgbWVtb3J5IGxlYWsgZml4IGlzIGFsd2F5cyBpbXBvcnRhbnQuIEdpdmVuIGl0J3MgZGlyZWN0bHkgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSwgdGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyBJJ2QgZmxhZyBmb3IgZnV6emluZy4gV2UgbmVlZCB0byBwcm9iZSB0aGUgZXJyb3IgcGF0aHMgcGFydGljdWxhcmx5IHdlbGwuXG5cbk15IGZvY3VzIHNob3VsZCBiZSBvbiBgdTMyX2NoYW5nZWAsIGFuZCwgb2YgY291cnNlLCB0aGUgYE5FVF9DTFNfVTMyYCBjb25maWcgaXMgdGhlIG9uZSB0byBjYXJlIGFib3V0LiBJIHNob3VsZCBwcm9iYWJseSBhbHNvIGNoZWNrIHRoZSBLY29uZmlnIGRlcGVuZGVuY2llcyB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byBjb25zaWRlciBmb3IgZW5hYmxpbmcgaXQsIGJ1dCBgTkVUX1NDSEVEYCBpcyBzdGFuZGFyZCwgc28gdGhhdCBzaG91bGRuJ3QgYmUgYSBwcm9ibGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDkxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE0OjEwOjIyLjE2MTMxNTIwN1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTczMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNTEwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTEwOlxcdFxcdCAgSWYgeW91IHNheSBZIGhlcmUsIHlvdSB3aWxsIGJlIGFibGUgdG8gY2xhc3NpZnkgcGFja2V0c1xcbiA1MTE6XFx0XFx0ICBhY2NvcmRpbmcgdG8gbmV0ZmlsdGVyL2ZpcmV3YWxsIG1hcmtzLlxcbiA1MTI6XFx0XFxuIDUxMzpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gNTE0OlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNsc19mdy5cXG4gNTE1OlxcdFxcbiA1MTY6XFx0Y29uZmlnIE5FVF9DTFNfVTMyXFxuIDUxNzpcXHRcXHR0cmlzdGF0ZSBcXFwiVW5pdmVyc2FsIDMyYml0IGNvbXBhcmlzb25zIHcvIGhhc2hpbmcgKFUzMilcXFwiXFxuIDUxODpcXHRcXHRzZWxlY3QgTkVUX0NMU1xcbiA1MTk6XFx0XFx0aGVscFxcbiA1MjA6XFx0XFx0ICBTYXkgWSBoZXJlIHRvIGJlIGFibGUgdG8gY2xhc3NpZnkgcGFja2V0cyB1c2luZyBhIHVuaXZlcnNhbFxcbiA1MjE6XFx0XFx0ICAzMmJpdCBwaWVjZXMgYmFzZWQgY29tcGFyaXNvbiBzY2hlbWUuXFxuIDUyMjpcXHRcXG4gNTIzOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiA1MjQ6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY2xzX3UzMi5cXG4gNTI1OlxcdFxcbiA1MjY6XFx0Y29uZmlnIENMU19VMzJfUEVSRlxcbiA1Mjc6XFx0XFx0Ym9vbCBcXFwiUGVyZm9ybWFuY2UgY291bnRlcnMgc3VwcG9ydFxcXCJcXG4gNTI4OlxcdFxcdGRlcGVuZHMgb24gTkVUX0NMU19VMzJcXG4gNTI5OlxcdFxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTQ6MTA6MjIuMTYxNDM1NDg3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2Njc2ODEyODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgVTMyIENsYXNzaWZpZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBhZnRlciByZXZpZXdpbmcgdGhpcyBwYXRjaCwgSSd2ZSBkZXRlcm1pbmVkIHRoYXQgYE5FVF9DTFNfVTMyYCBpcyBpbmRlZWQgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uIG9wdGlvbiBmb3IgaXQgdG8gZnVuY3Rpb24gY29ycmVjdGx5IOKAkyBnb29kLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIGFkZHJlc3NlcyBhIGJ1ZyB3aXRoaW4gYHUzMl9jaGFuZ2VgLCBzcGVjaWZpY2FsbHkgdGhlIGVudHJ5IHBvaW50IGZvciBjb25maWd1cmluZyBgdTMyYCBmaWx0ZXJzLiBDb25zaWRlcmluZyB0aGUgbmF0dXJlIG9mIHRoZSBmaXgg4oCTIGl0J3MgZGVhbGluZyB3aXRoIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgYSBmbGFnIHBhc3NpbmcgaXNzdWUg4oCTIGFuZCB0aGUgZmFjdCB0aGF0IGB1MzJfY2hhbmdlYCBpcyBhIGZ1bmRhbWVudGFsIGZ1bmN0aW9uIHdpdGhpbiBhIHJlYWNoYWJsZSBhcmVhIG9mIHRoZSBjb3JlIG5ldHdvcmtpbmcgY29kZSwgdGhpcyBkZWZpbml0ZWx5IHdhcnJhbnRzIHNvbWUgZnV6emluZy4gSSdtIGdvaW5nIHRvIHNldCBgV29ydGhGdXp6aW5nPXRydWVgLiBNeSBtYWluIGZvY3VzIHdpbGwgYmUgb24gdGhlIGB1MzJfY2hhbmdlYCBmdW5jdGlvbiBpdHNlbGYsIGFzIHRoYXQncyB3aGVyZSB0aGUgaWRlbnRpZmllZCBidWdzIHJlc2lkZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjU1NiwiT3V0cHV0VG9rZW5zIjo4OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE0OjEwOjI3LjgyOTEyMTg0NFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwODkxODkxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX0NMU19VMzJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1MzJfY2hhbmdlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByZWZlcmVuY2UgY291bnRpbmcgaXNzdWUgYW5kIGEgZmxhZyBwYXNzaW5nIGJ1ZyBpbiB0aGUgYHUzMl9jaGFuZ2VgIGZ1bmN0aW9uIG9mIHRoZSB1MzIgdHJhZmZpYyBjbGFzc2lmaWVyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9DTFNfVTMyXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidTMyX2NoYW5nZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcmVmZXJlbmNlIGNvdW50aW5nIGlzc3VlIGFuZCBhIGZsYWcgcGFzc2luZyBidWcgaW4gdGhlIGB1MzJfY2hhbmdlYCBmdW5jdGlvbiBvZiB0aGUgdTMyIHRyYWZmaWMgY2xhc3NpZmllci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTQ6MTA6MjguMDM4MDUwODc4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODM2ODI5MTYxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE0OjEwOjI4LjAzODk3NDIwOFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoyODM2NzM2MjY0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgdHdvIGlzc3VlcyBpbiB0aGUgdTMyIHBhY2tldCBjbGFzc2lmaWVyOiBhIHR5cG8gd2hlcmUgbmV0bGluayBtZXNzYWdlIGZsYWdzIHdlcmUgcGFzc2VkIGluc3RlYWQgb2YgdXNlci1zcGVjaWZpZWQgVENBX1UzMl9GTEFHUyB0byBgdTMyX3JlcGxhY2VfaHdfa25vZGVgLCBhbmQgYSByZWZlcmVuY2UgY291bnRpbmcgYnVnIG9uIHRoZSBgaHRfZG93bmAgbm9kZSBkdXJpbmcgZXJyb3IgaGFuZGxpbmcuIEJvdGggYGZsYWdzYCBhbmQgYHVzZXJmbGFnc2AgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGludGVnZXJzLiBUaGUgcmVmZXJlbmNlIGNvdW50aW5nIGZpeCBwcmV2ZW50cyBhIG1lbW9yeSBsZWFrIG9yIHVzZS1hZnRlci1mcmVlLCB3aGljaCBhcmUgZGV0ZWN0YWJsZSBieSBrbWVtbGVhayBhbmQgS0FTQU4gcmVzcGVjdGl2ZWx5LiBUaGVyZSBpcyBubyBpbnRyb2R1Y3Rpb24gb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIHN0cnVjdHVyZSBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDA0NDJmYjlmNTVhOGExMWUxMTI0NzVmOWNiOGMyYzBhZGJjYjU3YWJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAxNDowOToyMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfdTMyLmMgYi9uZXQvc2NoZWQvY2xzX3UzMi5jXG5pbmRleCA4ZjMwY2M4MjE4MWQ5Li42OTQ3MGQ0OWVlOWI4IDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL2Nsc191MzIuY1xuKysrIGIvbmV0L3NjaGVkL2Nsc191MzIuY1xuQEAgLTg3NSw3ICs4NzUsNyBAQCBzdGF0aWMgaW50IHUzMl9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxuIFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4ge1xuIFx0c3RydWN0IHRjX3VfY29tbW9uICp0cF9jID0gdHAtXHUwMDNlZGF0YTtcbi1cdHN0cnVjdCB0Y191X2hub2RlICpodDtcbitcdHN0cnVjdCB0Y191X2hub2RlICpodCwgKmh0X2Rvd247XG4gXHRzdHJ1Y3QgdGNfdV9rbm9kZSAqbjtcbiBcdHN0cnVjdCB0Y191MzJfc2VsICpzO1xuIFx0c3RydWN0IG5sYXR0ciAqb3B0ID0gdGNhW1RDQV9PUFRJT05TXTtcbkBAIC05MzUsMTcgKzkzNSw5IEBAIHN0YXRpYyBpbnQgdTMyX2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsXG4gXG4gXHRcdHUzMl9iaW5kX2ZpbHRlcih0cCwgbmV3LCBiYXNlLCB0Yik7XG4gXG4tXHRcdGVyciA9IHUzMl9yZXBsYWNlX2h3X2tub2RlKHRwLCBuZXcsIGZsYWdzLCBleHRhY2spO1xuK1x0XHRlcnIgPSB1MzJfcmVwbGFjZV9od19rbm9kZSh0cCwgbmV3LCB1c2VyZmxhZ3MsIGV4dGFjayk7XG4gXHRcdGlmIChlcnIpIHtcbiBcdFx0XHR1MzJfdW5iaW5kX2ZpbHRlcih0cCwgbmV3LCB0Yik7XG4tXG4tXHRcdFx0aWYgKHRiW1RDQV9VMzJfTElOS10pIHtcbi1cdFx0XHRcdHN0cnVjdCB0Y191X2hub2RlICpodF9vbGQ7XG4tXG4tXHRcdFx0XHRodF9vbGQgPSBydG5sX2RlcmVmZXJlbmNlKG4tXHUwMDNlaHRfZG93bik7XG4tXHRcdFx0XHRpZiAoaHRfb2xkKVxuLVx0XHRcdFx0XHRyZWZjb3VudF9pbmMoXHUwMDI2aHRfb2xkLVx1MDAzZXJlZmNudCk7XG4tXHRcdFx0fVxuIFx0XHRcdF9fdTMyX2Rlc3Ryb3lfa2V5KG5ldyk7XG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0fVxuQEAgLTExNjEsNyArMTE1Myw3IEBAIHN0YXRpYyBpbnQgdTMyX2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsXG4gXHRcdHN0cnVjdCB0Y191X2tub2RlIF9fcmN1ICoqaW5zO1xuIFx0XHRzdHJ1Y3QgdGNfdV9rbm9kZSAqcGlucztcbiBcbi1cdFx0ZXJyID0gdTMyX3JlcGxhY2VfaHdfa25vZGUodHAsIG4sIGZsYWdzLCBleHRhY2spO1xuK1x0XHRlcnIgPSB1MzJfcmVwbGFjZV9od19rbm9kZSh0cCwgbiwgdXNlcmZsYWdzLCBleHRhY2spO1xuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdGdvdG8gZXJydW5iaW5kO1xuIFxuQEAgLTExODUsNiArMTE3Nyw5IEBAIHN0YXRpYyBpbnQgdTMyX2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsXG4gXG4gZXJydW5iaW5kOlxuIFx0dTMyX3VuYmluZF9maWx0ZXIodHAsIG4sIHRiKTtcbitcdGh0X2Rvd24gPSBydG5sX2RlcmVmZXJlbmNlKG4tXHUwMDNlaHRfZG93bik7XG4rXHRpZiAoaHRfZG93biBcdTAwMjZcdTAwMjYgcmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNmh0X2Rvd24tXHUwMDNlcmVmY250KSlcbitcdFx0a2ZyZWUoaHRfZG93bik7XG4gXG4gI2lmZGVmIENPTkZJR19DTFNfVTMyX01BUktcbiBcdGZyZWVfcGVyY3B1KG4tXHUwMDNlcGNwdV9zdWNjZXNzKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE0OjEwOjI4LjAzODk3NzYxOFoiLCJTZXEiOjE1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTEwNjU3MDc2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQYXRjaCBpbiBgbmV0L3NjaGVkL2Nsc191MzIuY2AqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L3NjaGVkL2Nsc191MzIuY2AuIFRoZSBjb3JlIGNoYW5nZSBpcyBpbiB0aGUgYHUzMl9jaGFuZ2VgIGZ1bmN0aW9uLiBJdCBsb29rcyBsaWtlIHdlJ3JlIHJlcGxhY2luZyBjYWxscyB0byBgdTMyX3JlcGxhY2VfaHdfa25vZGUodHAsIG5ldywgZmxhZ3MsIGV4dGFjaylgIHdpdGggYHUzMl9yZXBsYWNlX2h3X2tub2RlKHRwLCBuZXcsIHVzZXJmbGFncywgZXh0YWNrKWAuIEltbWVkaWF0ZWx5LCB0aGF0IHRyaWdnZXJzIHNvbWUgdGhvdWdodHMuICBJdCBzbWVsbHMgbGlrZSBhIHR5cG8gZml4LCBvciBwb3NzaWJseSBhbiBpbml0aWFsaXphdGlvbiBpc3N1ZS4gSXQgc2VlbXMgbGlrZSB0aGUgY29kZSB3YXMgdHJ5aW5nIHRvIHBhc3MgYHVzZXJmbGFnc2AgYnV0IHdhcyBhY2NpZGVudGFsbHkgcGFzc2luZyBgZmxhZ3NgIGluc3RlYWQuIEEgcXVpY2sgc2FuaXR5IGNoZWNrIG9mIHRoZSBjb2RlIGluZGljYXRlcyBgdXNlcmZsYWdzYCBpcyBkZXJpdmVkIGZyb20gdGhlIHVzZXIgaW5wdXQgYW5kIGNvdWxkIGJlIGRpZmZlcmVudCBmcm9tIHNvbWUgbG9jYWxseSBzZXQgYGZsYWdzYCB2YXJpYWJsZS5cblxuRnVydGhlcm1vcmUsIHRoZXJlJ3MgYSBtb2RpZmljYXRpb24gdG8gdGhlIGVycm9yIGhhbmRsaW5nIHdpdGhpbiB0aGlzIGZ1bmN0aW9uLiBUaGUgb3JpZ2luYWwgY29kZSBoYWQgYSBtb3JlIGludm9sdmVkIGNsZWFudXAgd2hlbiB0aGVyZSB3YXMgYSBmYWlsdXJlIHRvIHJlcGxhY2UgdGhlIGhhcmR3YXJlIGtub2RlLiBJdCBsb29rcyBsaWtlIGl0IHdhcyBhdHRlbXB0aW5nIHRvIGhhbmRsZSBhIHNpdHVhdGlvbiBpbnZvbHZpbmcgYFRDQV9VMzJfTElOS2AgYW5kIGEgYGh0X29sZGAgcG9pbnRlciB3aXRoaW4gdGhlIGBpZiAodGJbVENBX1UzMl9MSU5LXSlgIGJsb2NrLiBUaGUgY2hhbmdlIHNpbXBsaWZpZXMgdGhpcy4gVGhlIG1vcmUgY29tcGxleCBsb2dpYyBhcHBlYXJzIHRvIGJlIGVudGlyZWx5IHJlbW92ZWQuIFRoaXMgc2ltcGxpZmllZCBibG9jayBpcyBhbHNvIHJlZmxlY3RlZCBpbiBgZXJydW5iaW5kYCwgYW5kIGl0IGxvb2tzIGxpa2UgYSByZWZjb3VudCBmaXggb2YgdGhlIGBodF9kb3duYCBhbmQgYXNzb2NpYXRlZCBgcmVmY250YC5cblxuR2l2ZW4gdGhlIHN1cnJvdW5kaW5nIGNoYW5nZXMsIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgYGZsYWdzYCB0byBgdXNlcmZsYWdzYCBjaGFuZ2UgYW5kIHRoZSBjbGVhbnVwLCBJJ20gbGVhbmluZyB0b3dhcmRzIHRoZSBjb25jbHVzaW9uIHRoYXQgdGhpcyBpcyBhIGZpeCBmb3IgYSByZWZlcmVuY2UgY291bnRpbmcgYnVnLiBQZXJoYXBzIGEgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8gb3IgYSBwb3RlbnRpYWwgbWVtb3J5IGxlYWsgcmVsYXRlZCB0byB0aGUgYGh0X2Rvd25gIHBvaW50ZXIgYW5kIGl0cyBhc3NvY2lhdGVkIHJlZmVyZW5jZSBjb3VudC4gVGhlIG9yaWdpbmFsIGNvZGUgbWlnaHQgaGF2ZSBiZWVuIGluY3JlbWVudGluZyB0aGUgcmVmZXJlbmNlIGNvdW50IGluIG9uZSBwbGFjZSBidXQgbm90IGRlY3JlbWVudGluZyBpdCBjb3JyZWN0bHkgaW4gYWxsIGZhaWx1cmUgcGF0aHMsIG9yIGluIHRoZSBjb3JyZWN0IHBsYWNlLiBOb3csIGl0IGxvb2tzIGxpa2UgaXQncyBkZWNyZW1lbnRpbmcgdGhlIHJlZmNvdW50IGluIGBlcnJ1bmJpbmRgIGlmIHRoZSBgaHRfZG93bmAgcmVmY291bnQgaXMgbm9uLXplcm8sIHRoZW4gY2FsbGluZyBga2ZyZWVgIGlmIGl0J3MgMCBhZnRlciB0aGUgZGVjcmVtZW50LlxuXG5UbyBiZSBzdXJlLCBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IGBmbGFnc2AgYW5kIGB1c2VyZmxhZ3NgIHJlcHJlc2VudCBpbiB0aGlzIGNvbnRleHQuIEFuZCBhbHNvIHZlcmlmeSB0aGUgY29kZSdzIGludGVuZGVkIGJlaGF2aW91ciBhbmQgaG93IHRoaXMgY2hhbmdlIGltcGFjdHMgaXQuIFRoaXMgcGF0Y2ggc2VlbXMgdG8gYmUgYWRkcmVzc2luZyBhIHBvdGVudGlhbCBjb3JyZWN0bmVzcyBpc3N1ZSwgdGhvdWdoLCBzbyBpdCBtZXJpdHMgY2FyZWZ1bCByZXZpZXcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NDcsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNDoxMDozOS4xNDU1NTE1NjhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTMzODM1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1c2VyZmxhZ3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL2Nsc191MzIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvY2xzX3UzMi5jPTg3Mj1zdGF0aWMgaW50IHUzMl9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxcbi0tXFxubmV0L3NjaGVkL2Nsc191MzIuYy04ODItXFx0c3RydWN0IG5sYXR0ciAqdGJbVENBX1UzMl9NQVggKyAxXTtcXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjg4MzpcXHR1MzIgaHRpZCwgdXNlcmZsYWdzID0gMDtcXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTg4NC1cXHRzaXplX3Qgc2VsX3NpemU7XFxuLS1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTkwMS1cXHRpZiAodGJbVENBX1UzMl9GTEFHU10pIHtcXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjkwMjpcXHRcXHR1c2VyZmxhZ3MgPSBubGFfZ2V0X3UzMih0YltUQ0FfVTMyX0ZMQUdTXSk7XFxubmV0L3NjaGVkL2Nsc191MzIuYzo5MDM6XFx0XFx0aWYgKCF0Y19mbGFnc192YWxpZCh1c2VyZmxhZ3MpKSB7XFxubmV0L3NjaGVkL2Nsc191MzIuYy05MDQtXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXFxcIkludmFsaWQgZmlsdGVyIGZsYWdzXFxcIik7XFxuLS1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTkxNy1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjkxODpcXHRcXHRpZiAoKG4tXFx1MDAzZWZsYWdzIF4gdXNlcmZsYWdzKSBcXHUwMDI2XFxubmV0L3NjaGVkL2Nsc191MzIuYy05MTktXFx0XFx0ICAgIH4oVENBX0NMU19GTEFHU19JTl9IVyB8IFRDQV9DTFNfRkxBR1NfTk9UX0lOX0hXKSkge1xcbi0tXFxubmV0L3NjaGVkL2Nsc191MzIuYy05MzctXFxubmV0L3NjaGVkL2Nsc191MzIuYzo5Mzg6XFx0XFx0ZXJyID0gdTMyX3JlcGxhY2VfaHdfa25vZGUodHAsIG5ldywgdXNlcmZsYWdzLCBleHRhY2spO1xcbm5ldC9zY2hlZC9jbHNfdTMyLmMtOTM5LVxcdFxcdGlmIChlcnIpIHtcXG4tLVxcbm5ldC9zY2hlZC9jbHNfdTMyLmMtOTkzLVxcdFxcdGlkcl9pbml0KFxcdTAwMjZodC1cXHUwMDNlaGFuZGxlX2lkcik7XFxubmV0L3NjaGVkL2Nsc191MzIuYzo5OTQ6XFx0XFx0aHQtXFx1MDAzZWZsYWdzID0gdXNlcmZsYWdzO1xcbm5ldC9zY2hlZC9jbHNfdTMyLmMtOTk1LVxcbm5ldC9zY2hlZC9jbHNfdTMyLmM6OTk2OlxcdFxcdGVyciA9IHUzMl9yZXBsYWNlX2h3X2hub2RlKHRwLCBodCwgdXNlcmZsYWdzLCBleHRhY2spO1xcbm5ldC9zY2hlZC9jbHNfdTMyLmMtOTk3LVxcdFxcdGlmIChlcnIpIHtcXG4tLVxcbm5ldC9zY2hlZC9jbHNfdTMyLmMtMTEyNC1cXHRuLVxcdTAwM2Vmc2hpZnQgPSBzLVxcdTAwM2VobWFzayA/IGZmcyhudG9obChzLVxcdTAwM2VobWFzaykpIC0gMSA6IDA7XFxubmV0L3NjaGVkL2Nsc191MzIuYzoxMTI1OlxcdG4tXFx1MDAzZWZsYWdzID0gdXNlcmZsYWdzO1xcbm5ldC9zY2hlZC9jbHNfdTMyLmMtMTEyNi1cXG4tLVxcbm5ldC9zY2hlZC9jbHNfdTMyLmMtMTE1NS1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjExNTY6XFx0XFx0ZXJyID0gdTMyX3JlcGxhY2VfaHdfa25vZGUodHAsIG4sIHVzZXJmbGFncywgZXh0YWNrKTtcXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTExNTctXFx0XFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTQ6MTA6MzkuMjU0ODk2MjI1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4OTM0OTY0MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGB1MzJfY2hhbmdlYCBGdW5jdGlvbidzIEZsYWdzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgdTMyX2NoYW5nZWAgZnVuY3Rpb24sIGFuZCBteSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gZGlzc2VjdCB0aGUgZmxhZ3MuIFRoaXMgaXMgbGlrZWx5IHdoZXJlIHRoZSBjb3JlIG9mIHRoZSBiZWhhdmlvciBsaWVzLiBUaGUgYGZsYWdzYCBwYXJhbWV0ZXIgaXMgYWxtb3N0IGNlcnRhaW5seSBhIGJpdGZpZWxkLCBzbyBJJ2xsIGJlIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgb2YgZWFjaCBwb3NzaWJsZSBiaXQgYmVpbmcgc2V0IG9yIGNsZWFyZWQuIEknbSBnb2luZyB0byBxdWlja2x5IHJlY2FsbCBjb21tb24gYml0LWZsYWcgaWRpb21zLCBsaWtlIGNoZWNraW5nIGlmIGEgcGFydGljdWxhciBiaXQgaXMgc2V0IHVzaW5nIGEgYml0d2lzZSBBTkQsIG9yIGNsZWFyaW5nIGEgYml0IHdpdGggYSBiaXR3aXNlIEFORCBjb21iaW5lZCB3aXRoIGEgTk9UIG9wZXJhdGlvbi4gSSdtIGFsc28gYW50aWNpcGF0aW5nIHRoYXQgdGhlc2UgZmxhZ3MgYXJlIHByb2JhYmx5IGdvaW5nIHRvIGNvbnRyb2wgc29tZSBhc3BlY3Qgb2YgaG93IHRoZSBgdTMyYCB2YWx1ZSBpcyBtb2RpZmllZCBvciBoYW5kbGVkIHdpdGhpbiB0aGlzIGZ1bmN0aW9uLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbWVhbmluZyBvZiBlYWNoIGluZGl2aWR1YWwgZmxhZyB0byB0cnVseSBncmFzcCB0aGUgZnVuY3Rpb24ncyBvdmVyYWxsIGJlaGF2aW9yLiBBcmUgdGhlc2UgY29udHJvbCBmbGFncywgc3RhdHVzIGZsYWdzLCBvciBib3RoPyBBcmUgdGhlcmUgYW55IGZsYWcgY29tYmluYXRpb25zIHRoYXQgYXJlIGludmFsaWQgb3IgaGF2ZSBzcGVjaWFsIG1lYW5pbmc/IFRpbWUgdG8gZGlnIGludG8gdGhlIGRlZmluaXRpb24gb2YgYGZsYWdzYCFcblxuXG4iLCJJbnB1dFRva2VucyI6NDMzNCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE0OjEwOjQzLjE0ODM5NDgxNVoiLCJTZXEiOjE4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA2ODQzMTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZsYWdzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9jbHNfdTMyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL2Nsc191MzIuYz00ND1zdHJ1Y3QgdGNfdV9rbm9kZSB7XFxuLS1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTU1LSNlbmRpZlxcbm5ldC9zY2hlZC9jbHNfdTMyLmM6NTY6XFx0dTMyXFx0XFx0XFx0ZmxhZ3M7XFxubmV0L3NjaGVkL2Nsc191MzIuYy01Ny1cXHR1bnNpZ25lZCBpbnRcXHRcXHRpbl9od19jb3VudDtcXG4tLVxcbm5ldC9zY2hlZC9jbHNfdTMyLmM9NzA9c3RydWN0IHRjX3VfaG5vZGUge1xcbi0tXFxubmV0L3NjaGVkL2Nsc191MzIuYy03OC1cXHRzdHJ1Y3QgcmN1X2hlYWRcXHRcXHRyY3U7XFxubmV0L3NjaGVkL2Nsc191MzIuYzo3OTpcXHR1MzJcXHRcXHRcXHRmbGFncztcXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTgwLVxcdC8qIFRoZSAnaHQnIGZpZWxkIE1VU1QgYmUgdGhlIGxhc3QgZmllbGQgaW4gc3RydWN0dXJlIHRvIGFsbG93IGZvclxcbi0tXFxubmV0L3NjaGVkL2Nsc191MzIuYz0xMTQ9VENfSU5ESVJFQ1RfU0NPUEUgaW50IHUzMl9jbGFzc2lmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L3NjaGVkL2Nsc191MzIuYy0xNDUtXFxubmV0L3NjaGVkL2Nsc191MzIuYzoxNDY6XFx0XFx0aWYgKHRjX3NraXBfc3cobi1cXHUwMDNlZmxhZ3MpKSB7XFxubmV0L3NjaGVkL2Nsc191MzIuYy0xNDctXFx0XFx0XFx0biA9IHJjdV9kZXJlZmVyZW5jZV9iaChuLVxcdTAwM2VuZXh0KTtcXG4tLVxcbm5ldC9zY2hlZC9jbHNfdTMyLmMtMTgwLWNoZWNrX3Rlcm1pbmFsOlxcbm5ldC9zY2hlZC9jbHNfdTMyLmM6MTgxOlxcdFxcdFxcdGlmIChuLVxcdTAwM2VzZWwuZmxhZ3MgXFx1MDAyNiBUQ19VMzJfVEVSTUlOQUwpIHtcXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTE4Mi1cXG4tLVxcbm5ldC9zY2hlZC9jbHNfdTMyLmMtMjIyLVxcdFxcdH1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjIyMzpcXHRcXHRpZiAoIShuLVxcdTAwM2VzZWwuZmxhZ3MgXFx1MDAyNiAoVENfVTMyX1ZBUk9GRlNFVCB8IFRDX1UzMl9PRkZTRVQgfCBUQ19VMzJfRUFUKSkpXFxubmV0L3NjaGVkL2Nsc191MzIuYy0yMjQtXFx0XFx0XFx0Z290byBuZXh0X2h0O1xcbm5ldC9zY2hlZC9jbHNfdTMyLmMtMjI1LVxcbm5ldC9zY2hlZC9jbHNfdTMyLmM6MjI2OlxcdFxcdGlmIChuLVxcdTAwM2VzZWwuZmxhZ3MgXFx1MDAyNiAoVENfVTMyX09GRlNFVCB8IFRDX1UzMl9WQVJPRkZTRVQpKSB7XFxubmV0L3NjaGVkL2Nsc191MzIuYy0yMjctXFx0XFx0XFx0b2ZmMiA9IG4tXFx1MDAzZXNlbC5vZmYgKyAzO1xcbm5ldC9zY2hlZC9jbHNfdTMyLmM6MjI4OlxcdFxcdFxcdGlmIChuLVxcdTAwM2VzZWwuZmxhZ3MgXFx1MDAyNiBUQ19VMzJfVkFST0ZGU0VUKSB7XFxubmV0L3NjaGVkL2Nsc191MzIuYy0yMjktXFx0XFx0XFx0XFx0X19iZTE2ICpkYXRhLCBoZGF0YTtcXG4tLVxcbm5ldC9zY2hlZC9jbHNfdTMyLmMtMjQwLVxcdFxcdH1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjI0MTpcXHRcXHRpZiAobi1cXHUwMDNlc2VsLmZsYWdzIFxcdTAwMjYgVENfVTMyX0VBVCkge1xcbm5ldC9zY2hlZC9jbHNfdTMyLmMtMjQyLVxcdFxcdFxcdG9mZiArPSBvZmYyO1xcbi0tXFxubmV0L3NjaGVkL2Nsc191MzIuYz00ODg9c3RhdGljIHZvaWQgdTMyX2NsZWFyX2h3X2hub2RlKHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCBzdHJ1Y3QgdGNfdV9obm9kZSAqaCxcXG4tLVxcbm5ldC9zY2hlZC9jbHNfdTMyLmMtNDkzLVxcbm5ldC9zY2hlZC9jbHNfdTMyLmM6NDk0OlxcdHRjX2Nsc19jb21tb25fb2ZmbG9hZF9pbml0KFxcdTAwMjZjbHNfdTMyLmNvbW1vbiwgdHAsIGgtXFx1MDAzZWZsYWdzLCBleHRhY2spO1xcbm5ldC9zY2hlZC9jbHNfdTMyLmMtNDk1LVxcdGNsc191MzIuY29tbWFuZCA9IFRDX0NMU1UzMl9ERUxFVEVfSE5PREU7XFxuLS1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jPTUwMz1zdGF0aWMgaW50IHUzMl9yZXBsYWNlX2h3X2hub2RlKHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCBzdHJ1Y3QgdGNfdV9obm9kZSAqaCxcXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjUwNDpcXHRcXHRcXHRcXHR1MzIgZmxhZ3MsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTUwNS17XFxuLS1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTUwNy1cXHRzdHJ1Y3QgdGNfY2xzX3UzMl9vZmZsb2FkIGNsc191MzIgPSB7fTtcXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjUwODpcXHRib29sIHNraXBfc3cgPSB0Y19za2lwX3N3KGZsYWdzKTtcXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTUwOS1cXHRib29sIG9mZmxvYWRlZCA9IGZhbHNlO1xcbi0tXFxubmV0L3NjaGVkL2Nsc191MzIuYy01MTEtXFxubmV0L3NjaGVkL2Nsc191MzIuYzo1MTI6XFx0dGNfY2xzX2NvbW1vbl9vZmZsb2FkX2luaXQoXFx1MDAyNmNsc191MzIuY29tbW9uLCB0cCwgZmxhZ3MsIGV4dGFjayk7XFxubmV0L3NjaGVkL2Nsc191MzIuYy01MTMtXFx0Y2xzX3UzMi5jb21tYW5kID0gVENfQ0xTVTMyX05FV19ITk9ERTtcXG4tLVxcbm5ldC9zY2hlZC9jbHNfdTMyLmM9NTMyPXN0YXRpYyB2b2lkIHUzMl9yZW1vdmVfaHdfa25vZGUoc3RydWN0IHRjZl9wcm90byAqdHAsIHN0cnVjdCB0Y191X2tub2RlICpuLFxcbi0tXFxubmV0L3NjaGVkL2Nsc191MzIuYy01MzctXFxubmV0L3NjaGVkL2Nsc191MzIuYzo1Mzg6XFx0dGNfY2xzX2NvbW1vbl9vZmZsb2FkX2luaXQoXFx1MDAyNmNsc191MzIuY29tbW9uLCB0cCwgbi1cXHUwMDNlZmxhZ3MsIGV4dGFjayk7XFxubmV0L3NjaGVkL2Nsc191MzIuYy01MzktXFx0Y2xzX3UzMi5jb21tYW5kID0gVENfQ0xTVTMyX0RFTEVURV9LTk9ERTtcXG4tLVxcbm5ldC9zY2hlZC9jbHNfdTMyLmMtNTQyLVxcdHRjX3NldHVwX2NiX2Rlc3Ryb3koYmxvY2ssIHRwLCBUQ19TRVRVUF9DTFNVMzIsIFxcdTAwMjZjbHNfdTMyLCBmYWxzZSxcXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjU0MzpcXHRcXHRcXHQgICAgXFx1MDAyNm4tXFx1MDAzZWZsYWdzLCBcXHUwMDI2bi1cXHUwMDNlaW5faHdfY291bnQsIHRydWUpO1xcbm5ldC9zY2hlZC9jbHNfdTMyLmMtNTQ0LX1cXG4tLVxcbm5ldC9zY2hlZC9jbHNfdTMyLmM9NTQ2PXN0YXRpYyBpbnQgdTMyX3JlcGxhY2VfaHdfa25vZGUoc3RydWN0IHRjZl9wcm90byAqdHAsIHN0cnVjdCB0Y191X2tub2RlICpuLFxcbm5ldC9zY2hlZC9jbHNfdTMyLmM6NTQ3OlxcdFxcdFxcdFxcdHUzMiBmbGFncywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbm5ldC9zY2hlZC9jbHNfdTMyLmMtNTQ4LXtcXG4tLVxcbm5ldC9zY2hlZC9jbHNfdTMyLmMtNTUxLVxcdHN0cnVjdCB0Y19jbHNfdTMyX29mZmxvYWQgY2xzX3UzMiA9IHt9O1xcbm5ldC9zY2hlZC9jbHNfdTMyLmM6NTUyOlxcdGJvb2wgc2tpcF9zdyA9IHRjX3NraXBfc3coZmxhZ3MpO1xcbm5ldC9zY2hlZC9jbHNfdTMyLmMtNTUzLVxcdGludCBlcnI7XFxubmV0L3NjaGVkL2Nsc191MzIuYy01NTQtXFxubmV0L3NjaGVkL2Nsc191MzIuYzo1NTU6XFx0dGNfY2xzX2NvbW1vbl9vZmZsb2FkX2luaXQoXFx1MDAyNmNsc191MzIuY29tbW9uLCB0cCwgZmxhZ3MsIGV4dGFjayk7XFxubmV0L3NjaGVkL2Nsc191MzIuYy01NTYtXFx0Y2xzX3UzMi5jb21tYW5kID0gVENfQ0xTVTMyX1JFUExBQ0VfS05PREU7XFxuLS1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTU3Mi1cXHRlcnIgPSB0Y19zZXR1cF9jYl9hZGQoYmxvY2ssIHRwLCBUQ19TRVRVUF9DTFNVMzIsIFxcdTAwMjZjbHNfdTMyLCBza2lwX3N3LFxcbm5ldC9zY2hlZC9jbHNfdTMyLmM6NTczOlxcdFxcdFxcdCAgICAgIFxcdTAwMjZuLVxcdTAwM2VmbGFncywgXFx1MDAyNm4tXFx1MDAzZWluX2h3X2NvdW50LCB0cnVlKTtcXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTU3NC1cXHRpZiAoZXJyKSB7XFxuLS1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTU3OC1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjU3OTpcXHRpZiAoc2tpcF9zdyBcXHUwMDI2XFx1MDAyNiAhKG4tXFx1MDAzZWZsYWdzIFxcdTAwMjYgVENBX0NMU19GTEFHU19JTl9IVykpXFxubmV0L3NjaGVkL2Nsc191MzIuYy01ODAtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jPTc0MD1zdGF0aWMgaW50IHUzMl9zZXRfcGFybXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX3Byb3RvICp0cCxcXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTc0MS1cXHRcXHRcXHQgc3RydWN0IHRjX3Vfa25vZGUgKm4sIHN0cnVjdCBubGF0dHIgKip0YixcXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjc0MjpcXHRcXHRcXHQgc3RydWN0IG5sYXR0ciAqZXN0LCB1MzIgZmxhZ3MsIHUzMiBmbF9mbGFncyxcXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTc0My1cXHRcXHRcXHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L3NjaGVkL2Nsc191MzIuYy03NDYtXFxubmV0L3NjaGVkL2Nsc191MzIuYzo3NDc6XFx0ZXJyID0gdGNmX2V4dHNfdmFsaWRhdGVfZXgobmV0LCB0cCwgdGIsIGVzdCwgXFx1MDAyNm4tXFx1MDAzZWV4dHMsIGZsYWdzLFxcbm5ldC9zY2hlZC9jbHNfdTMyLmM6NzQ4OlxcdFxcdFxcdFxcdCAgIGZsX2ZsYWdzLCBleHRhY2spO1xcbm5ldC9zY2hlZC9jbHNfdTMyLmMtNzQ5LVxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbi0tXFxubmV0L3NjaGVkL2Nsc191MzIuYz04MjE9c3RhdGljIHN0cnVjdCB0Y191X2tub2RlICp1MzJfaW5pdF9rbm9kZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLFxcbi0tXFxubmV0L3NjaGVkL2Nsc191MzIuYy04MzctXFx0bmV3LVxcdTAwM2Vmc2hpZnQgPSBuLVxcdTAwM2Vmc2hpZnQ7XFxubmV0L3NjaGVkL2Nsc191MzIuYzo4Mzg6XFx0bmV3LVxcdTAwM2VmbGFncyA9IG4tXFx1MDAzZWZsYWdzO1xcbm5ldC9zY2hlZC9jbHNfdTMyLmMtODM5LVxcdFJDVV9JTklUX1BPSU5URVIobmV3LVxcdTAwM2VodF9kb3duLCBodCk7XFxuLS1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jPTg3Mj1zdGF0aWMgaW50IHUzMl9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxcbm5ldC9zY2hlZC9jbHNfdTMyLmMtODczLVxcdFxcdCAgICAgIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCB1bnNpZ25lZCBsb25nIGJhc2UsIHUzMiBoYW5kbGUsXFxubmV0L3NjaGVkL2Nsc191MzIuYzo4NzQ6XFx0XFx0ICAgICAgc3RydWN0IG5sYXR0ciAqKnRjYSwgdm9pZCAqKmFyZywgdTMyIGZsYWdzLFxcbm5ldC9zY2hlZC9jbHNfdTMyLmMtODc1LVxcdFxcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9zY2hlZC9jbHNfdTMyLmMtODgyLVxcdHN0cnVjdCBubGF0dHIgKnRiW1RDQV9VMzJfTUFYICsgMV07XFxubmV0L3NjaGVkL2Nsc191MzIuYzo4ODM6XFx0dTMyIGh0aWQsIHVzZXJmbGFncyA9IDA7XFxubmV0L3NjaGVkL2Nsc191MzIuYy04ODQtXFx0c2l6ZV90IHNlbF9zaXplO1xcbi0tXFxubmV0L3NjaGVkL2Nsc191MzIuYy05MDEtXFx0aWYgKHRiW1RDQV9VMzJfRkxBR1NdKSB7XFxubmV0L3NjaGVkL2Nsc191MzIuYzo5MDI6XFx0XFx0dXNlcmZsYWdzID0gbmxhX2dldF91MzIodGJbVENBX1UzMl9GTEFHU10pO1xcbm5ldC9zY2hlZC9jbHNfdTMyLmM6OTAzOlxcdFxcdGlmICghdGNfZmxhZ3NfdmFsaWQodXNlcmZsYWdzKSkge1xcbm5ldC9zY2hlZC9jbHNfdTMyLmM6OTA0OlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFxcXCJJbnZhbGlkIGZpbHRlciBmbGFnc1xcXCIpO1xcbm5ldC9zY2hlZC9jbHNfdTMyLmMtOTA1LVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxubmV0L3NjaGVkL2Nsc191MzIuYy05MTctXFxubmV0L3NjaGVkL2Nsc191MzIuYzo5MTg6XFx0XFx0aWYgKChuLVxcdTAwM2VmbGFncyBeIHVzZXJmbGFncykgXFx1MDAyNlxcbm5ldC9zY2hlZC9jbHNfdTMyLmMtOTE5LVxcdFxcdCAgICB+KFRDQV9DTFNfRkxBR1NfSU5fSFcgfCBUQ0FfQ0xTX0ZMQUdTX05PVF9JTl9IVykpIHtcXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjkyMDpcXHRcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcXFwiS2V5IG5vZGUgZmxhZ3MgZG8gbm90IG1hdGNoIHBhc3NlZCBmbGFnc1xcXCIpO1xcbm5ldC9zY2hlZC9jbHNfdTMyLmMtOTIxLVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxubmV0L3NjaGVkL2Nsc191MzIuYy05MjgtXFx0XFx0ZXJyID0gdTMyX3NldF9wYXJtcyhuZXQsIHRwLCBuZXcsIHRiLCB0Y2FbVENBX1JBVEVdLFxcbm5ldC9zY2hlZC9jbHNfdTMyLmM6OTI5OlxcdFxcdFxcdFxcdCAgICBmbGFncywgbmV3LVxcdTAwM2VmbGFncywgZXh0YWNrKTtcXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTkzMC1cXG4tLVxcbm5ldC9zY2hlZC9jbHNfdTMyLmMtOTM3LVxcbm5ldC9zY2hlZC9jbHNfdTMyLmM6OTM4OlxcdFxcdGVyciA9IHUzMl9yZXBsYWNlX2h3X2tub2RlKHRwLCBuZXcsIHVzZXJmbGFncywgZXh0YWNrKTtcXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTkzOS1cXHRcXHRpZiAoZXJyKSB7XFxuLS1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTk0NC1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjk0NTpcXHRcXHRpZiAoIXRjX2luX2h3KG5ldy1cXHUwMDNlZmxhZ3MpKVxcbm5ldC9zY2hlZC9jbHNfdTMyLmM6OTQ2OlxcdFxcdFxcdG5ldy1cXHUwMDNlZmxhZ3MgfD0gVENBX0NMU19GTEFHU19OT1RfSU5fSFc7XFxubmV0L3NjaGVkL2Nsc191MzIuYy05NDctXFxubmV0L3NjaGVkL2Nsc191MzIuYzo5NDg6XFx0XFx0dGNmX3Byb3RvX3VwZGF0ZV91c2Vzdyh0cCwgbmV3LVxcdTAwM2VmbGFncyk7XFxubmV0L3NjaGVkL2Nsc191MzIuYy05NDktXFxuLS1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTk5My1cXHRcXHRpZHJfaW5pdChcXHUwMDI2aHQtXFx1MDAzZWhhbmRsZV9pZHIpO1xcbm5ldC9zY2hlZC9jbHNfdTMyLmM6OTk0OlxcdFxcdGh0LVxcdTAwM2VmbGFncyA9IHVzZXJmbGFncztcXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTk5NS1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjk5NjpcXHRcXHRlcnIgPSB1MzJfcmVwbGFjZV9od19obm9kZSh0cCwgaHQsIHVzZXJmbGFncywgZXh0YWNrKTtcXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTk5Ny1cXHRcXHRpZiAoZXJyKSB7XFxuLS1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTExMjQtXFx0bi1cXHUwMDNlZnNoaWZ0ID0gcy1cXHUwMDNlaG1hc2sgPyBmZnMobnRvaGwocy1cXHUwMDNlaG1hc2spKSAtIDEgOiAwO1xcbm5ldC9zY2hlZC9jbHNfdTMyLmM6MTEyNTpcXHRuLVxcdTAwM2VmbGFncyA9IHVzZXJmbGFncztcXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTExMjYtXFxuLS1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTExNDctXFx0ZXJyID0gdTMyX3NldF9wYXJtcyhuZXQsIHRwLCBuLCB0YiwgdGNhW1RDQV9SQVRFXSxcXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjExNDg6XFx0XFx0XFx0ICAgIGZsYWdzLCBuLVxcdTAwM2VmbGFncywgZXh0YWNrKTtcXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTExNDktXFxuLS1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTExNTUtXFxubmV0L3NjaGVkL2Nsc191MzIuYzoxMTU2OlxcdFxcdGVyciA9IHUzMl9yZXBsYWNlX2h3X2tub2RlKHRwLCBuLCB1c2VyZmxhZ3MsIGV4dGFjayk7XFxubmV0L3NjaGVkL2Nsc191MzIuYy0xMTU3LVxcdFxcdGlmIChlcnIpXFxuLS1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTExNTktXFxubmV0L3NjaGVkL2Nsc191MzIuYzoxMTYwOlxcdFxcdGlmICghdGNfaW5faHcobi1cXHUwMDNlZmxhZ3MpKVxcbm5ldC9zY2hlZC9jbHNfdTMyLmM6MTE2MTpcXHRcXHRcXHRuLVxcdTAwM2VmbGFncyB8PSBUQ0FfQ0xTX0ZMQUdTX05PVF9JTl9IVztcXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTExNjItXFxubmV0L3NjaGVkL2Nsc191MzIuYzoxMTYzOlxcdFxcdHRjZl9wcm90b191cGRhdGVfdXNlc3codHAsIG4tXFx1MDAzZWZsYWdzKTtcXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTExNjQtXFxuLS1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jPTEyMzE9c3RhdGljIGludCB1MzJfcmVvZmZsb2FkX2hub2RlKHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCBzdHJ1Y3QgdGNfdV9obm9kZSAqaHQsXFxuLS1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTEyMzctXFxubmV0L3NjaGVkL2Nsc191MzIuYzoxMjM4OlxcdHRjX2Nsc19jb21tb25fb2ZmbG9hZF9pbml0KFxcdTAwMjZjbHNfdTMyLmNvbW1vbiwgdHAsIGh0LVxcdTAwM2VmbGFncywgZXh0YWNrKTtcXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTEyMzktXFx0Y2xzX3UzMi5jb21tYW5kID0gYWRkID8gVENfQ0xTVTMyX05FV19ITk9ERSA6IFRDX0NMU1UzMl9ERUxFVEVfSE5PREU7XFxuLS1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTEyNDQtXFx0ZXJyID0gY2IoVENfU0VUVVBfQ0xTVTMyLCBcXHUwMDI2Y2xzX3UzMiwgY2JfcHJpdik7XFxubmV0L3NjaGVkL2Nsc191MzIuYzoxMjQ1OlxcdGlmIChlcnIgXFx1MDAyNlxcdTAwMjYgYWRkIFxcdTAwMjZcXHUwMDI2IHRjX3NraXBfc3coaHQtXFx1MDAzZWZsYWdzKSlcXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTEyNDYtXFx0XFx0cmV0dXJuIGVycjtcXG4tLVxcbm5ldC9zY2hlZC9jbHNfdTMyLmM9MTI1MT1zdGF0aWMgaW50IHUzMl9yZW9mZmxvYWRfa25vZGUoc3RydWN0IHRjZl9wcm90byAqdHAsIHN0cnVjdCB0Y191X2tub2RlICpuLFxcbi0tXFxubmV0L3NjaGVkL2Nsc191MzIuYy0xMjU4LVxcbm5ldC9zY2hlZC9jbHNfdTMyLmM6MTI1OTpcXHR0Y19jbHNfY29tbW9uX29mZmxvYWRfaW5pdChcXHUwMDI2Y2xzX3UzMi5jb21tb24sIHRwLCBuLVxcdTAwM2VmbGFncywgZXh0YWNrKTtcXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTEyNjAtXFx0Y2xzX3UzMi5jb21tYW5kID0gYWRkID9cXG4tLVxcbm5ldC9zY2hlZC9jbHNfdTMyLmMtMTI4MC1cXHRyZXR1cm4gdGNfc2V0dXBfY2JfcmVvZmZsb2FkKGJsb2NrLCB0cCwgYWRkLCBjYiwgVENfU0VUVVBfQ0xTVTMyLFxcbm5ldC9zY2hlZC9jbHNfdTMyLmM6MTI4MTpcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZjbHNfdTMyLCBjYl9wcml2LCBcXHUwMDI2bi1cXHUwMDNlZmxhZ3MsXFxubmV0L3NjaGVkL2Nsc191MzIuYy0xMjgyLVxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNm4tXFx1MDAzZWluX2h3X2NvdW50KTtcXG4tLVxcbm5ldC9zY2hlZC9jbHNfdTMyLmM9MTI4NT1zdGF0aWMgaW50IHUzMl9yZW9mZmxvYWQoc3RydWN0IHRjZl9wcm90byAqdHAsIGJvb2wgYWRkLCBmbG93X3NldHVwX2NiX3QgKmNiLFxcbi0tXFxubmV0L3NjaGVkL2Nsc191MzIuYy0xMzAzLVxcdFxcdCAqL1xcbm5ldC9zY2hlZC9jbHNfdTMyLmM6MTMwNDpcXHRcXHRpZiAoYWRkIFxcdTAwMjZcXHUwMDI2ICF0Y19za2lwX2h3KGh0LVxcdTAwM2VmbGFncykpIHtcXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTEzMDUtXFx0XFx0XFx0ZXJyID0gdTMyX3Jlb2ZmbG9hZF9obm9kZSh0cCwgaHQsIGFkZCwgY2IsIGNiX3ByaXYsXFxuLS1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTEzMTQtXFx0XFx0XFx0ICAgICBuID0gcnRubF9kZXJlZmVyZW5jZShuLVxcdTAwM2VuZXh0KSkge1xcbm5ldC9zY2hlZC9jbHNfdTMyLmM6MTMxNTpcXHRcXHRcXHRcXHRpZiAodGNfc2tpcF9odyhuLVxcdTAwM2VmbGFncykpXFxubmV0L3NjaGVkL2Nsc191MzIuYy0xMzE2LVxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxubmV0L3NjaGVkL2Nsc191MzIuYy0xMzI0LVxcbm5ldC9zY2hlZC9jbHNfdTMyLmM6MTMyNTpcXHRcXHRpZiAoIWFkZCBcXHUwMDI2XFx1MDAyNiAhdGNfc2tpcF9odyhodC1cXHUwMDNlZmxhZ3MpKVxcbm5ldC9zY2hlZC9jbHNfdTMyLmMtMTMyNi1cXHRcXHRcXHR1MzJfcmVvZmZsb2FkX2hub2RlKHRwLCBodCwgYWRkLCBjYiwgY2JfcHJpdiwgZXh0YWNrKTtcXG4tLVxcbm5ldC9zY2hlZC9jbHNfdTMyLmM9MTM0MD1zdGF0aWMgaW50IHUzMl9kdW1wKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRjZl9wcm90byAqdHAsIHZvaWQgKmZoLFxcbi0tXFxubmV0L3NjaGVkL2Nsc191MzIuYy0xMzg2LVxcbm5ldC9zY2hlZC9jbHNfdTMyLmM6MTM4NzpcXHRcXHRpZiAobi1cXHUwMDNlZmxhZ3MgXFx1MDAyNlxcdTAwMjYgbmxhX3B1dF91MzIoc2tiLCBUQ0FfVTMyX0ZMQUdTLCBuLVxcdTAwM2VmbGFncykpXFxubmV0L3NjaGVkL2Nsc191MzIuYy0xMzg4LVxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNDoxMDo0My40NTUyNTMzNTZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI5NTEwNTY1NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBVMzIgT2ZmbG9hZCBQYXRjaDogTm8gS01TQU4gTmVlZGVkKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBjaGFuZ2luZyB0aGUgYXJndW1lbnQgcGFzc2VkIHRvIGB1MzJfcmVwbGFjZV9od19rbm9kZWAuIEkgc2VlIHRoZSBvcmlnaW5hbCBjb2RlIHdhcyBpbmNvcnJlY3RseSBwYXNzaW5nIGBmbGFnc2AgKHRoZSBuZXRsaW5rIG1lc3NhZ2UgZmxhZ3MsIGxpa2UgYE5MTV9GX0NSRUFURWAg4oCTIHdoaWNoIG9yaWdpbmF0ZXMgZnJvbSBgdGNfbmV3X3RmaWx0ZXJg4oCZcyBgbi1cdTAwM2VubG1zZ19mbGFnc2ApIHdoZW4gaXQgc2hvdWxkIGhhdmUgYmVlbiBwYXNzaW5nIGB1c2VyZmxhZ3NgLiBgdXNlcmZsYWdzYCBpcyBkZXJpdmVkIGZyb20gYHRiW1RDQV9VMzJfRkxBR1NdYC4gVGhhdCdzIGEgY2xlYXIgYnVnIOKAkyBpdCdzIGEgbWl4LXVwIG9mIG5ldGxpbmsgbWV0YWRhdGEgdmVyc3VzIHVzZXItc3BlY2lmaWVkIGZsYWdzLCBzcGVjaWZpY2FsbHkgZm9yIGhhcmR3YXJlIG9mZmxvYWQgYmVoYXZpb3IuIEltcG9ydGFudGx5LCBib3RoIGBmbGFnc2AgYW5kIGB1c2VyZmxhZ3NgIGFyZSBpbml0aWFsaXplZC4gYGZsYWdzYCBpcyBhbiBhcmd1bWVudCBhbmQgYHVzZXJmbGFnc2AgaXMgaW5pdGlhbGl6ZWQgdG8gemVybyBhbmQgY29uZGl0aW9uYWxseSBzZXQgYnkgYG5sYV9nZXRfdTMyYC4gVGhpcyBoYXMgbm90aGluZyB0byBkbyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5UaGUgc2Vjb25kIHBhcnQgYWRkcmVzc2VzIGEgcmVmZXJlbmNlIGNvdW50aW5nIHByb2JsZW0uICBJZiBgdTMyX3JlcGxhY2VfaHdfa25vZGVgIGZhaWxzLCB0aGUgYGh0X2Rvd25gIHJlZmVyZW5jZSB3YXNuJ3QgYmVpbmcgbWFuYWdlZCBjb3JyZWN0bHksIGxlYWRpbmcgdG8gYSBwb3RlbnRpYWwgbGVhayBvciB1c2UtYWZ0ZXItZnJlZS4gVGhpcyBwYXRjaCBjb3JyZWN0cyB0aGF0LiBBZ2Fpbiwgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgY29uY2VybnMgaGVyZS4gSXQncyBhYm91dCBlbnN1cmluZyByZXNvdXJjZXMgYXJlIGNvcnJlY3RseSBmcmVlZCBpbiBlcnJvciBwYXRocy5cblxuVGhlIGZpeCBmb3IgdGhlIGBmbGFnc2AgdnMgYHVzZXJmbGFnc2AgYXJndW1lbnQgaXMgYSBzdHJhaWdodCBidWcgZml4LCBhbmQgdGhlIHJlZmVyZW5jZSBjb3VudCBmaXggY29ycmVjdHMgcmVzb3VyY2UgbWFuYWdlbWVudC4gTmVpdGhlciBpbnRyb2R1Y2VzIG9yIGV4cG9zZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiAgS0FTQU4gd291bGQgY2F0Y2ggYW55IHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zIGFyaXNpbmcgZnJvbSB0aGUgcmVmZXJlbmNlIGNvdW50aW5nIGZpeCwgYW5kIGttZW1sZWFrIHNob3VsZCBjYXRjaCBtZW1vcnkgbGVha3MuIEtNU0FOIGlzbid0IHJlbGV2YW50IGhlcmUuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJ2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIGhvdyBgdTMyX3JlcGxhY2VfaHdfa25vZGVgIGl0c2VsZiB1c2VzIGBmbGFnc2A6IGl0IHVzZXMgaXQgZm9yIGluaXRpYWxpemluZyB0aGUgb2ZmbG9hZCBzdHJ1Y3R1cmUsIHNvIGl0J3MgYSBkaXJlY3QgaW50ZWdlciB2YWx1ZSwgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYXQgcGxheSBoZXJlLlxuXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lc24ndCB3YXJyYW50IGEgS01TQU4gaW52ZXN0aWdhdGlvbi4gSXQncyBhIGNsZWFuIGJ1ZyBmaXggYW5kIHJlc291cmNlIG1hbmFnZW1lbnQgY29ycmVjdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQwNywiT3V0cHV0VG9rZW5zIjoxNjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTQ6MTA6NTYuNDA2MzEyNjQ5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIzMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyB0d28gaXNzdWVzIGluIHRoZSB1MzIgcGFja2V0IGNsYXNzaWZpZXI6IGEgdHlwbyB3aGVyZSBuZXRsaW5rIG1lc3NhZ2UgZmxhZ3Mgd2VyZSBwYXNzZWQgaW5zdGVhZCBvZiB1c2VyLXNwZWNpZmllZCBUQ0FfVTMyX0ZMQUdTIHRvIGB1MzJfcmVwbGFjZV9od19rbm9kZWAsIGFuZCBhIHJlZmVyZW5jZSBjb3VudGluZyBidWcgb24gdGhlIGBodF9kb3duYCBub2RlIGR1cmluZyBlcnJvciBoYW5kbGluZy4gQm90aCBgZmxhZ3NgIGFuZCBgdXNlcmZsYWdzYCBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgaW50ZWdlcnMuIFRoZSByZWZlcmVuY2UgY291bnRpbmcgZml4IHByZXZlbnRzIGEgbWVtb3J5IGxlYWsgb3IgdXNlLWFmdGVyLWZyZWUsIHdoaWNoIGFyZSBkZXRlY3RhYmxlIGJ5IGttZW1sZWFrIGFuZCBLQVNBTiByZXNwZWN0aXZlbHkuIFRoZXJlIGlzIG5vIGludHJvZHVjdGlvbiBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgc3RydWN0dXJlIHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgdHdvIGlzc3VlcyBpbiB0aGUgdTMyIHBhY2tldCBjbGFzc2lmaWVyOiBhIHR5cG8gd2hlcmUgbmV0bGluayBtZXNzYWdlIGZsYWdzIHdlcmUgcGFzc2VkIGluc3RlYWQgb2YgdXNlci1zcGVjaWZpZWQgVENBX1UzMl9GTEFHUyB0byBgdTMyX3JlcGxhY2VfaHdfa25vZGVgLCBhbmQgYSByZWZlcmVuY2UgY291bnRpbmcgYnVnIG9uIHRoZSBgaHRfZG93bmAgbm9kZSBkdXJpbmcgZXJyb3IgaGFuZGxpbmcuIEJvdGggYGZsYWdzYCBhbmQgYHVzZXJmbGFnc2AgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGludGVnZXJzLiBUaGUgcmVmZXJlbmNlIGNvdW50aW5nIGZpeCBwcmV2ZW50cyBhIG1lbW9yeSBsZWFrIG9yIHVzZS1hZnRlci1mcmVlLCB3aGljaCBhcmUgZGV0ZWN0YWJsZSBieSBrbWVtbGVhayBhbmQgS0FTQU4gcmVzcGVjdGl2ZWx5LiBUaGVyZSBpcyBubyBpbnRyb2R1Y3Rpb24gb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIHN0cnVjdHVyZSBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflown9nqq[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-13 13:47:53 +0000 UTC FinishedAt: 2026-08-13 14:10:57 +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": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_CLS_U32" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_CLS_U32" ], "series_id": "aae1de02-8f14-4c4b-8577-5a2a6a5ec7b9" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "u32_change" ], "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+CgkJCTx0ZD4yMDI2LzA4LzEzIDE0OjA5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9DTFNfVTMyJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dTMyX2NoYW5nZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIHR3byBpc3N1ZXMgaW4gdGhlIHUzMiBwYWNrZXQgY2xhc3NpZmllcjogYSB0eXBvIHdoZXJlIG5ldGxpbmsgbWVzc2FnZSBmbGFncyB3ZXJlIHBhc3NlZCBpbnN0ZWFkIG9mIHVzZXItc3BlY2lmaWVkIFRDQV9VMzJfRkxBR1MgdG8gYHUzMl9yZXBsYWNlX2h3X2tub2RlYCwgYW5kIGEgcmVmZXJlbmNlIGNvdW50aW5nIGJ1ZyBvbiB0aGUgYGh0X2Rvd25gIG5vZGUgZHVyaW5nIGVycm9yIGhhbmRsaW5nLiBCb3RoIGBmbGFnc2AgYW5kIGB1c2VyZmxhZ3NgIGFyZSBmdWxseSBpbml0aWFsaXplZCBpbnRlZ2Vycy4gVGhlIHJlZmVyZW5jZSBjb3VudGluZyBmaXggcHJldmVudHMgYSBtZW1vcnkgbGVhayBvciB1c2UtYWZ0ZXItZnJlZSwgd2hpY2ggYXJlIGRldGVjdGFibGUgYnkga21lbWxlYWsgYW5kIEtBU0FOIHJlc3BlY3RpdmVseS4gVGhlcmUgaXMgbm8gaW50cm9kdWN0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBzdHJ1Y3R1cmUgcGFkZGluZyBsZWFrcywgb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgYmVpbmcgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByZWZlcmVuY2UgY291bnRpbmcgaXNzdWUgYW5kIGEgZmxhZyBwYXNzaW5nIGJ1ZyBpbiB0aGUgYHUzMl9jaGFuZ2VgIGZ1bmN0aW9uIG9mIHRoZSB1MzIgdHJhZmZpYyBjbGFzc2lmaWVyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE0OjA5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMDQ0MmZiOWY1NWE4YTExZTExMjQ3NWY5Y2I4YzJjMGFkYmNiNTdhYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDEzIDE0OjA5OjIxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfdTMyLmMgYi9uZXQvc2NoZWQvY2xzX3UzMi5jXG5pbmRleCA4ZjMwY2M4MjE4MWQ5Li42OTQ3MGQ0OWVlOWI4IDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL2Nsc191MzIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL2Nsc191MzIuY1xuQEAgLTg3NSw3ICYjNDM7ODc1LDcgQEAgc3RhdGljIGludCB1MzJfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbiBcdFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiBcdHN0cnVjdCB0Y191X2NvbW1vbiAqdHBfYyA9IHRwLVx1MDAzZWRhdGE7XG4tXHRzdHJ1Y3QgdGNfdV9obm9kZSAqaHQ7XG4mIzQzO1x0c3RydWN0IHRjX3VfaG5vZGUgKmh0LCAqaHRfZG93bjtcbiBcdHN0cnVjdCB0Y191X2tub2RlICpuO1xuIFx0c3RydWN0IHRjX3UzMl9zZWwgKnM7XG4gXHRzdHJ1Y3QgbmxhdHRyICpvcHQgPSB0Y2FbVENBX09QVElPTlNdO1xuQEAgLTkzNSwxNyAmIzQzOzkzNSw5IEBAIHN0YXRpYyBpbnQgdTMyX2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsXG4gXG4gXHRcdHUzMl9iaW5kX2ZpbHRlcih0cCwgbmV3LCBiYXNlLCB0Yik7XG4gXG4tXHRcdGVyciA9IHUzMl9yZXBsYWNlX2h3X2tub2RlKHRwLCBuZXcsIGZsYWdzLCBleHRhY2spO1xuJiM0MztcdFx0ZXJyID0gdTMyX3JlcGxhY2VfaHdfa25vZGUodHAsIG5ldywgdXNlcmZsYWdzLCBleHRhY2spO1xuIFx0XHRpZiAoZXJyKSB7XG4gXHRcdFx0dTMyX3VuYmluZF9maWx0ZXIodHAsIG5ldywgdGIpO1xuLVxuLVx0XHRcdGlmICh0YltUQ0FfVTMyX0xJTktdKSB7XG4tXHRcdFx0XHRzdHJ1Y3QgdGNfdV9obm9kZSAqaHRfb2xkO1xuLVxuLVx0XHRcdFx0aHRfb2xkID0gcnRubF9kZXJlZmVyZW5jZShuLVx1MDAzZWh0X2Rvd24pO1xuLVx0XHRcdFx0aWYgKGh0X29sZClcbi1cdFx0XHRcdFx0cmVmY291bnRfaW5jKFx1MDAyNmh0X29sZC1cdTAwM2VyZWZjbnQpO1xuLVx0XHRcdH1cbiBcdFx0XHRfX3UzMl9kZXN0cm95X2tleShuZXcpO1xuIFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdH1cbkBAIC0xMTYxLDcgJiM0MzsxMTUzLDcgQEAgc3RhdGljIGludCB1MzJfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbiBcdFx0c3RydWN0IHRjX3Vfa25vZGUgX19yY3UgKippbnM7XG4gXHRcdHN0cnVjdCB0Y191X2tub2RlICpwaW5zO1xuIFxuLVx0XHRlcnIgPSB1MzJfcmVwbGFjZV9od19rbm9kZSh0cCwgbiwgZmxhZ3MsIGV4dGFjayk7XG4mIzQzO1x0XHRlcnIgPSB1MzJfcmVwbGFjZV9od19rbm9kZSh0cCwgbiwgdXNlcmZsYWdzLCBleHRhY2spO1xuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdGdvdG8gZXJydW5iaW5kO1xuIFxuQEAgLTExODUsNiAmIzQzOzExNzcsOSBAQCBzdGF0aWMgaW50IHUzMl9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxuIFxuIGVycnVuYmluZDpcbiBcdHUzMl91bmJpbmRfZmlsdGVyKHRwLCBuLCB0Yik7XG4mIzQzO1x0aHRfZG93biA9IHJ0bmxfZGVyZWZlcmVuY2Uobi1cdTAwM2VodF9kb3duKTtcbiYjNDM7XHRpZiAoaHRfZG93biBcdTAwMjZcdTAwMjYgcmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNmh0X2Rvd24tXHUwMDNlcmVmY250KSlcbiYjNDM7XHRcdGtmcmVlKGh0X2Rvd24pO1xuIFxuICNpZmRlZiBDT05GSUdfQ0xTX1UzMl9NQVJLXG4gXHRmcmVlX3BlcmNwdShuLVx1MDAzZXBjcHVfc3VjY2Vzcyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTQ6MDk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9DTFNfVTMyJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dTMyX2NoYW5nZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJlZmVyZW5jZSBjb3VudGluZyBpc3N1ZSBhbmQgYSBmbGFnIHBhc3NpbmcgYnVnIGluIHRoZSBgdTMyX2NoYW5nZWAgZnVuY3Rpb24gb2YgdGhlIHUzMiB0cmFmZmljIGNsYXNzaWZpZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwNDQyZmI5ZjU1YThhMTFlMTEyNDc1ZjljYjhjMmMwYWRiY2I1N2FiCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMTMgMTQ6MDk6MjEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvY2xzX3UzMi5jIGIvbmV0L3NjaGVkL2Nsc191MzIuYwppbmRleCA4ZjMwY2M4MjE4MWQ5Li42OTQ3MGQ0OWVlOWI4IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvY2xzX3UzMi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9jbHNfdTMyLmMKQEAgLTg3NSw3ICYjNDM7ODc1LDcgQEAgc3RhdGljIGludCB1MzJfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYiwKIAkJICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQogewogCXN0cnVjdCB0Y191X2NvbW1vbiAqdHBfYyA9IHRwLSZndDtkYXRhOwotCXN0cnVjdCB0Y191X2hub2RlICpodDsKJiM0MzsJc3RydWN0IHRjX3VfaG5vZGUgKmh0LCAqaHRfZG93bjsKIAlzdHJ1Y3QgdGNfdV9rbm9kZSAqbjsKIAlzdHJ1Y3QgdGNfdTMyX3NlbCAqczsKIAlzdHJ1Y3QgbmxhdHRyICpvcHQgPSB0Y2FbVENBX09QVElPTlNdOwpAQCAtOTM1LDE3ICYjNDM7OTM1LDkgQEAgc3RhdGljIGludCB1MzJfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYiwKIAogCQl1MzJfYmluZF9maWx0ZXIodHAsIG5ldywgYmFzZSwgdGIpOwogCi0JCWVyciA9IHUzMl9yZXBsYWNlX2h3X2tub2RlKHRwLCBuZXcsIGZsYWdzLCBleHRhY2spOwomIzQzOwkJZXJyID0gdTMyX3JlcGxhY2VfaHdfa25vZGUodHAsIG5ldywgdXNlcmZsYWdzLCBleHRhY2spOwogCQlpZiAoZXJyKSB7CiAJCQl1MzJfdW5iaW5kX2ZpbHRlcih0cCwgbmV3LCB0Yik7Ci0KLQkJCWlmICh0YltUQ0FfVTMyX0xJTktdKSB7Ci0JCQkJc3RydWN0IHRjX3VfaG5vZGUgKmh0X29sZDsKLQotCQkJCWh0X29sZCA9IHJ0bmxfZGVyZWZlcmVuY2Uobi0mZ3Q7aHRfZG93bik7Ci0JCQkJaWYgKGh0X29sZCkKLQkJCQkJcmVmY291bnRfaW5jKCZhbXA7aHRfb2xkLSZndDtyZWZjbnQpOwotCQkJfQogCQkJX191MzJfZGVzdHJveV9rZXkobmV3KTsKIAkJCXJldHVybiBlcnI7CiAJCX0KQEAgLTExNjEsNyAmIzQzOzExNTMsNyBAQCBzdGF0aWMgaW50IHUzMl9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLAogCQlzdHJ1Y3QgdGNfdV9rbm9kZSBfX3JjdSAqKmluczsKIAkJc3RydWN0IHRjX3Vfa25vZGUgKnBpbnM7CiAKLQkJZXJyID0gdTMyX3JlcGxhY2VfaHdfa25vZGUodHAsIG4sIGZsYWdzLCBleHRhY2spOwomIzQzOwkJZXJyID0gdTMyX3JlcGxhY2VfaHdfa25vZGUodHAsIG4sIHVzZXJmbGFncywgZXh0YWNrKTsKIAkJaWYgKGVycikKIAkJCWdvdG8gZXJydW5iaW5kOwogCkBAIC0xMTg1LDYgJiM0MzsxMTc3LDkgQEAgc3RhdGljIGludCB1MzJfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYiwKIAogZXJydW5iaW5kOgogCXUzMl91bmJpbmRfZmlsdGVyKHRwLCBuLCB0Yik7CiYjNDM7CWh0X2Rvd24gPSBydG5sX2RlcmVmZXJlbmNlKG4tJmd0O2h0X2Rvd24pOwomIzQzOwlpZiAoaHRfZG93biAmYW1wOyZhbXA7IHJlZmNvdW50X2RlY19hbmRfdGVzdCgmYW1wO2h0X2Rvd24tJmd0O3JlZmNudCkpCiYjNDM7CQlrZnJlZShodF9kb3duKTsKIAogI2lmZGVmIENPTkZJR19DTFNfVTMyX01BUksKIAlmcmVlX3BlcmNwdShuLSZndDtwY3B1X3N1Y2Nlc3MpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxNDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTUwCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVTMyIENsYXNzaWZpZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF04oCZcyB0b3VjaGluZyBgbmV0L3NjaGVkL2Nsc191MzIuY2AuIFNwZWNpZmljYWxseSwgaXTigJlzIGxvb2tpbmcgYXQgbW9kaWZpY2F0aW9ucyB3aXRoaW4gdGhlIGB1MzJfY2hhbmdlYCBmdW5jdGlvbi4gSW1tZWRpYXRlbHksIHRoaXMgdGVsbHMgbWUgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB0aGUgdXNlci1zcGFjZSBpbnRlcmZhY2UgdG8gY29uZmlndXJlIHRoZSBVMzIgY2xhc3NpZmllciwgd2hpY2ggaXMgcGFydCBvZiB0aGUgdHJhZmZpYyBjb250cm9sICh0Yykgc3Vic3lzdGVtLiBgdTMyX2NoYW5nZWAgaXMgdGhlIGVudHJ5IHBvaW50IGZvciBuZXRsaW5rIG9wZXJhdGlvbnMuCgpUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGFyb3VuZCBgdTMyX3JlcGxhY2VfaHdfa25vZGVgLiBJdCBsb29rcyBsaWtlIHRoZXJlIHdhcyBhIHN1YnRsZSBidWcgd2hlcmUgdGhlIHdyb25nIHNldCBvZiBmbGFncyAoYGZsYWdzYCBpbnN0ZWFkIG9mIGB1c2VyZmxhZ3NgKSB3ZXJlIGJlaW5nIHBhc3NlZCBpbnRvIHRoYXQgZnVuY3Rpb24uIFRoYXQmIzM5O3MgYSBjbGFzc2ljIGV4YW1wbGUgb2YgYSBiaXQtbWFzayBpc3N1ZSBhbmQgY291bGQgcG90ZW50aWFsbHkgbGVhZCB0byB1bmV4cGVjdGVkIGJlaGF2aW9yIGluIGhhcmR3YXJlIG9mZmxvYWQgc2NlbmFyaW9zLCBpZiB0aGlzIGNsYXNzaWZpZXIgaXMgdXNlZCBvbiBhIE5JQyB3aXRoIG9mZmxvYWQgY2FwYWJpbGl0aWVzLgoKQmV5b25kIHRoZSBmbGFncyBmaXgsIHRoZXkmIzM5O3ZlIGFsc28gdHdlYWtlZCB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aHMgcmVsYXRlZCB0byBgdTMyX3JlcGxhY2VfaHdfa25vZGVgIGFuZCBgZXJydW5iaW5kYC4gVGhpcyBzdWdnZXN0cyB0aGV5JiMzOTt2ZSBpZGVudGlmaWVkIHNvbWUgZWRnZSBjYXNlcyBvciBlcnJvciBzY2VuYXJpb3MgdGhhdCB3ZXJlbiYjMzk7dCBiZWluZyBoYW5kbGVkIGNvcnJlY3RseSBiZWZvcmUsIG9yIG1heWJlIHRoZXkmIzM5O3ZlIGZvdW5kIGEgYmV0dGVyIHdheSB0byByZXBvcnQgZXJyb3JzIGJhY2sgdG8gdGhlIHVzZXItc3BhY2UuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGRpZmZzIHRvIHNlZSB0aGUgZXhhY3QgY2hhbmdlcyB0aGVyZSwgYnV0IHRoYXTigJlzIGRlZmluaXRlbHkgYW4gYXJlYSB0byBwYXkgYXR0ZW50aW9uIHRvLiBUaW1lIHRvIGZpcmUgdXAgdGhlIGVkaXRvciBhbmQgZXhhbWluZSBgY2xzX3UzMi5jYCBpbiBkZXRhaWwhCkkgc2hvdWxkIGRvdWJsZSBjaGVjayB0aGUgY29uZmlnIGZvciBgY2xzX3UzMi5jYCB0byBzZWUgaWYgaXQgbWFrZXMgc2Vuc2UgdG8gZW5hYmxlIG9yIGRpc2FibGUgaXQsIGRlcGVuZGluZyBvbiB0aGUga2VybmVsIGFuZCBoYXJkd2FyZSBzZXR1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxNDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjbHNfdTMyLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9NYWtlZmlsZT02Nj1vYmotJChDT05GSUdfTkVUX1NDSF9EVUFMUEkyKVx0JiM0Mzs9IHNjaF9kdWFscGkyLm9cbm5ldC9zY2hlZC9NYWtlZmlsZS02Ny1cbm5ldC9zY2hlZC9NYWtlZmlsZTo2ODpvYmotJChDT05GSUdfTkVUX0NMU19VMzIpXHQmIzQzOz0gY2xzX3UzMi5vXG5uZXQvc2NoZWQvTWFrZWZpbGUtNjktb2JqLSQoQ09ORklHX05FVF9DTFNfUk9VVEU0KVx0JiM0Mzs9IGNsc19yb3V0ZS5vXG4tLVxubmV0L3NjaGVkL2Nsc191MzIuYz00ODg9c3RhdGljIHZvaWQgdTMyX2NsZWFyX2h3X2hub2RlKHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCBzdHJ1Y3QgdGNfdV9obm9kZSAqaCxcbi0tXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTQ5MS1cdHN0cnVjdCB0Y2ZfYmxvY2sgKmJsb2NrID0gdHAtXHUwMDNlY2hhaW4tXHUwMDNlYmxvY2s7XG5uZXQvc2NoZWQvY2xzX3UzMi5jOjQ5MjpcdHN0cnVjdCB0Y19jbHNfdTMyX29mZmxvYWQgY2xzX3UzMiA9IHt9O1xubmV0L3NjaGVkL2Nsc191MzIuYy00OTMtXG4tLVxubmV0L3NjaGVkL2Nsc191MzIuYz01MDM9c3RhdGljIGludCB1MzJfcmVwbGFjZV9od19obm9kZShzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgc3RydWN0IHRjX3VfaG5vZGUgKmgsXG4tLVxubmV0L3NjaGVkL2Nsc191MzIuYy01MDYtXHRzdHJ1Y3QgdGNmX2Jsb2NrICpibG9jayA9IHRwLVx1MDAzZWNoYWluLVx1MDAzZWJsb2NrO1xubmV0L3NjaGVkL2Nsc191MzIuYzo1MDc6XHRzdHJ1Y3QgdGNfY2xzX3UzMl9vZmZsb2FkIGNsc191MzIgPSB7fTtcbm5ldC9zY2hlZC9jbHNfdTMyLmMtNTA4LVx0Ym9vbCBza2lwX3N3ID0gdGNfc2tpcF9zdyhmbGFncyk7XG4tLVxubmV0L3NjaGVkL2Nsc191MzIuYz01MzI9c3RhdGljIHZvaWQgdTMyX3JlbW92ZV9od19rbm9kZShzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgc3RydWN0IHRjX3Vfa25vZGUgKm4sXG4tLVxubmV0L3NjaGVkL2Nsc191MzIuYy01MzUtXHRzdHJ1Y3QgdGNmX2Jsb2NrICpibG9jayA9IHRwLVx1MDAzZWNoYWluLVx1MDAzZWJsb2NrO1xubmV0L3NjaGVkL2Nsc191MzIuYzo1MzY6XHRzdHJ1Y3QgdGNfY2xzX3UzMl9vZmZsb2FkIGNsc191MzIgPSB7fTtcbm5ldC9zY2hlZC9jbHNfdTMyLmMtNTM3LVxuLS1cbm5ldC9zY2hlZC9jbHNfdTMyLmM9NTQ2PXN0YXRpYyBpbnQgdTMyX3JlcGxhY2VfaHdfa25vZGUoc3RydWN0IHRjZl9wcm90byAqdHAsIHN0cnVjdCB0Y191X2tub2RlICpuLFxuLS1cbm5ldC9zY2hlZC9jbHNfdTMyLmMtNTUwLVx0c3RydWN0IHRjZl9ibG9jayAqYmxvY2sgPSB0cC1cdTAwM2VjaGFpbi1cdTAwM2VibG9jaztcbm5ldC9zY2hlZC9jbHNfdTMyLmM6NTUxOlx0c3RydWN0IHRjX2Nsc191MzJfb2ZmbG9hZCBjbHNfdTMyID0ge307XG5uZXQvc2NoZWQvY2xzX3UzMi5jLTU1Mi1cdGJvb2wgc2tpcF9zdyA9IHRjX3NraXBfc3coZmxhZ3MpO1xuLS1cbm5ldC9zY2hlZC9jbHNfdTMyLmM9MTIzMT1zdGF0aWMgaW50IHUzMl9yZW9mZmxvYWRfaG5vZGUoc3RydWN0IHRjZl9wcm90byAqdHAsIHN0cnVjdCB0Y191X2hub2RlICpodCxcbi0tXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTEyMzQte1xubmV0L3NjaGVkL2Nsc191MzIuYzoxMjM1Olx0c3RydWN0IHRjX2Nsc191MzJfb2ZmbG9hZCBjbHNfdTMyID0ge307XG5uZXQvc2NoZWQvY2xzX3UzMi5jLTEyMzYtXHRpbnQgZXJyO1xuLS1cbm5ldC9zY2hlZC9jbHNfdTMyLmM9MTI1MT1zdGF0aWMgaW50IHUzMl9yZW9mZmxvYWRfa25vZGUoc3RydWN0IHRjZl9wcm90byAqdHAsIHN0cnVjdCB0Y191X2tub2RlICpuLFxuLS1cbm5ldC9zY2hlZC9jbHNfdTMyLmMtMTI1Ni1cdHN0cnVjdCB0Y2ZfYmxvY2sgKmJsb2NrID0gdHAtXHUwMDNlY2hhaW4tXHUwMDNlYmxvY2s7XG5uZXQvc2NoZWQvY2xzX3UzMi5jOjEyNTc6XHRzdHJ1Y3QgdGNfY2xzX3UzMl9vZmZsb2FkIGNsc191MzIgPSB7fTtcbm5ldC9zY2hlZC9jbHNfdTMyLmMtMTI1OC1cbi0tXG5uZXQvc2NoZWQvY2xzX3UzMi5jPTEzNDA9c3RhdGljIGludCB1MzJfZHVtcChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCB2b2lkICpmaCxcbi0tXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTE0NTItXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjE0NTM6c3RhdGljIHN0cnVjdCB0Y2ZfcHJvdG9fb3BzIGNsc191MzJfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG5uZXQvc2NoZWQvY2xzX3UzMi5jLTE0NTQtXHQua2luZFx0XHQ9XHRcJiMzNDt1MzJcJiMzNDssXG4tLVxubmV0L3NjaGVkL2Nsc191MzIuYz0xNDY5PXN0YXRpYyBpbnQgX19pbml0IGluaXRfdTMyKHZvaWQpXG4tLVxubmV0L3NjaGVkL2Nsc191MzIuYy0xNDg3LVxubmV0L3NjaGVkL2Nsc191MzIuYzoxNDg4Olx0cmV0ID0gcmVnaXN0ZXJfdGNmX3Byb3RvX29wcyhcdTAwMjZjbHNfdTMyX29wcyk7XG5uZXQvc2NoZWQvY2xzX3UzMi5jLTE0ODktXHRpZiAocmV0KVxuLS1cbm5ldC9zY2hlZC9jbHNfdTMyLmM9MTQ5ND1zdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF91MzIodm9pZClcbm5ldC9zY2hlZC9jbHNfdTMyLmMtMTQ5NS17XG5uZXQvc2NoZWQvY2xzX3UzMi5jOjE0OTY6XHR1bnJlZ2lzdGVyX3RjZl9wcm90b19vcHMoXHUwMDI2Y2xzX3UzMl9vcHMpO1xubmV0L3NjaGVkL2Nsc191MzIuYy0xNDk3LVx0a3ZmcmVlKHRjX3VfY29tbW9uX2hhc2gpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE0OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyNjQKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGB1MzJfY2hhbmdlYCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0JiMzOTtzIGZvY3VzZWQgb24gdGhlIGB1MzJfY2hhbmdlYCBmdW5jdGlvbiB3aXRoaW4gdGhlIGBuZXQvc2NoZWQvY2xzX3UzMi5jYCBmaWxlLiBJdCBzZWVtcyBsaWtlIHRoZSBjb3JlIG9mIHRoZSBtb2RpZmljYXRpb24gcmV2b2x2ZXMgYXJvdW5kIGB1MzJfcmVwbGFjZV9od19rbm9kZWAuIFRoZSBjb2RlJiMzOTtzIGNoYW5naW5nIHRoZSBhcmd1bWVudHMgcGFzc2VkIHRvIHRoYXQgZnVuY3Rpb24sIHNwZWNpZmljYWxseSBmcm9tIGBmbGFnc2AgdG8gYHVzZXJmbGFnc2AgaW4gYSBjb3VwbGUgb2Yga2V5IGluc3RhbmNlcyDigJMgYm90aCBmb3IgYHRwYCBhbmQgYG5gLiBUaGF0IHRlbGxzIG1lIHRoZSBpbnRlbnRpb24gaXMgcHJvYmFibHkgdG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIGludGVybmFsLCBzeXN0ZW0tbGV2ZWwgZmxhZ3MgYW5kIGZsYWdzIHByb3ZpZGVkIGJ5IHRoZSB1c2VyLCB3aGljaCBpcyBhIGNvbW1vbiBhbmQgaW1wb3J0YW50IGRpc3RpbmN0aW9uIGluIHRoZXNlIHNvcnRzIG9mIHN1YnN5c3RlbXMuCgpCZXlvbmQgdGhhdCwgdGhlIGVycm9yIGhhbmRsaW5nIHBhdGgsIGBlcnJ1bmJpbmQ6YCwgaXMgYmVpbmcgcmV3b3JrZWQuIFRoZSBjdXJyZW50IHBhdGNoIGFwcGVhcnMgdG8gYmUgY29ycmVjdGluZyB0aGUgcmVmY291bnRpbmcgb2YgYGh0X2Rvd25gIGluIHRoZSBldmVudCBvZiBhbiBlcnJvci4gSW5zdGVhZCBvZiB0aGUgZXhpc3RpbmcgbG9naWMgYmVpbmcgdHVja2VkIHdpdGhpbiB0aGUgYGlmIChlcnIpYCBibG9jaywgdGhlIHBhdGNoIG1vdmVzIHRoZSBkZWNyZW1lbnQgYW5kIGZyZWUgb3BlcmF0aW9ucyBvdXRzaWRlLiBUaGF0JiMzOTtzIGEgZ29vZCBtb3ZlIOKAkyBpdCBtYWtlcyB0aGUgZXJyb3IgaGFuZGxpbmcgY2xlYW5lciBhbmQgZW5zdXJlcyB0aGF0IHJlc291cmNlcyBhcmUgY29uc2lzdGVudGx5IGNsZWFuZWQgdXAsIHJlZ2FyZGxlc3Mgb2YgaG93IHRoZSBlcnJvciBvY2N1cnMuIFByZXZlbnRzIHJlc291cmNlIGxlYWtzLCB3aGljaCBpcyBleGFjdGx5IHdoYXQgSSYjMzk7bSBsb29raW5nIGZvciBpbiB0cmFmZmljIGNvbnRyb2wuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSByZWZpbmVtZW50LCBhbmQgYW4gaW1wb3J0YW50IG9uZS4KCkxldCYjMzk7cyBxdWlja2x5IHZlcmlmeSB0aGlzLiBDaGVja2luZyB0aGUgY29uZmlnOiBgQ09ORklHX05FVF9DTFNfVTMyYC4gR29vZC4gT2theSwgbGV0IG1lIG1ha2Ugc3VyZSB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGNhbGxlZC4gQWgsIGB1MzJfY2hhbmdlYCBpcyBwYXJ0IG9mIHRoZSBgY2xzX3UzMl9vcHNgLCB0aGF04oCZcyBpdHMgYC5jaGFuZ2VgIGNhbGxiYWNrLiBTbywgeWVzLCBpdCYjMzk7cyBkZWZpbml0ZWx5IHJlYWNoYWJsZS4gTG9va3MgbGlrZSB0aGUgcGF0Y2ggYXV0aG9yIGhhcyBkb25lIHRoZWlyIGR1ZSBkaWxpZ2VuY2UuIFRoaXMgYWxsIHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQgYW5kIHNlbnNpYmxlLCB0aGUgY2hhbmdlIGFwcGVhcnMgc291bmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTQ6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9DTFNfVTMyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZz01MDY9Y29uZmlnIE5FVF9DTFNfRldcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy01MTUtXG5uZXQvc2NoZWQvS2NvbmZpZzo1MTY6Y29uZmlnIE5FVF9DTFNfVTMyXG5uZXQvc2NoZWQvS2NvbmZpZy01MTctXHR0cmlzdGF0ZSBcJiMzNDtVbml2ZXJzYWwgMzJiaXQgY29tcGFyaXNvbnMgdy8gaGFzaGluZyAoVTMyKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE0OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3NzQKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE0OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3UzMl9jaGFuZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9jbHNfdTMyLmM9ODIxPXN0YXRpYyBzdHJ1Y3QgdGNfdV9rbm9kZSAqdTMyX2luaXRfa25vZGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX3Byb3RvICp0cCxcbi0tXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTg3MS1cbm5ldC9zY2hlZC9jbHNfdTMyLmM6ODcyOnN0YXRpYyBpbnQgdTMyX2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTg3My1cdFx0ICAgICAgc3RydWN0IHRjZl9wcm90byAqdHAsIHVuc2lnbmVkIGxvbmcgYmFzZSwgdTMyIGhhbmRsZSxcbi0tXG5uZXQvc2NoZWQvY2xzX3UzMi5jPTE0NTM9c3RhdGljIHN0cnVjdCB0Y2ZfcHJvdG9fb3BzIGNsc191MzJfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG4tLVxubmV0L3NjaGVkL2Nsc191MzIuYy0xNDU4LVx0LmdldFx0XHQ9XHR1MzJfZ2V0LFxubmV0L3NjaGVkL2Nsc191MzIuYzoxNDU5Olx0LmNoYW5nZVx0XHQ9XHR1MzJfY2hhbmdlLFxubmV0L3NjaGVkL2Nsc191MzIuYy0xNDYwLVx0LmRlbGV0ZVx0XHQ9XHR1MzJfZGVsZXRlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE0OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwOTEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgVTMyIENsYXNzaWZpZXIgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gYG5ldC9zY2hlZC9jbHNfdTMyLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGB1MzJfY2hhbmdlYCBmdW5jdGlvbi4gSW1tZWRpYXRlbHksIG15IGV4cGVydCBicmFpbiBmbGFncyB0aGlzIGFzIGEgcG90ZW50aWFsbHkgc2lnbmlmaWNhbnQgYXJlYSBiZWNhdXNlIGB1MzJfY2hhbmdlYCBpcyB0aGUgYC5jaGFuZ2VgIG9wZXJhdGlvbiBmb3IgdGhlIGB1MzJgIGNsYXNzaWZpZXIgd2l0aGluIHRoZSBgdGNgIHN1YnN5c3RlbS4gVGhhdCYjMzk7cyBhIGNvcmUgZnVuY3Rpb24sIGFuZCBJIGtub3cgdGhhdCBtZWFucyB1c2Vyc3BhY2UgY2FuIGRlZmluaXRlbHkgcmVhY2ggaXQsIHByb2JhYmx5IHRocm91Z2ggbmV0bGluayBjYWxscyB1c2luZyBgdGMgZmlsdGVyIGFkZCAuLi4gdTMyIC4uLmAgY29tbWFuZHMuCgpJdCBsb29rcyBsaWtlIHRoZSBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgcmVmZXJlbmNlIGNvdW50aW5nIGlzc3VlIOKAkyBsaWtlbHkgYSBtZW1vcnkgbGVhayDigJMgdGhhdCBoYXBwZW5zIHdoZW4gYHUzMl9yZXBsYWNlX2h3X2tub2RlYCBmYWlscy4gSSBzZWUgdGhlIGtleSBmaXggaXMgcmVtb3ZpbmcgYW4gYHJlZmNvdW50X2luY2AgY2FsbCBpbiB0aGUgZXJyb3IgcGF0aCBmb3IgYSBuZXcga25vZGUgYW5kIGFkZGluZyBzb21lIGNsZWFudXAgd2l0aCBgcmVmY291bnRfZGVjX2FuZF90ZXN0YCBhbmQgYGtmcmVlYCBpbiB0aGUgYGVycnVuYmluZGAgbGFiZWwuIFRoYXQgc291bmRzIHNvbGlkLiBUaGVyZSYjMzk7cyBhbHNvIGEgc3VidGxlIGNoYW5nZSBpbiB0aGUgY2FsbCB0byBgdTMyX3JlcGxhY2VfaHdfa25vZGVgLCBzd2l0Y2hpbmcgYGZsYWdzYCB0byBgdXNlcmZsYWdzYCwgd2hpY2ggaXMgbGVzcyBjcml0aWNhbCwgYnV0IHN0aWxsIHdvcnRoIG5vdGluZy4KClRoaXMgbG9va3MgbGlrZSBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIG5ldHdvcmtpbmcsIGFuZCBhIG1lbW9yeSBsZWFrIGZpeCBpcyBhbHdheXMgaW1wb3J0YW50LiBHaXZlbiBpdCYjMzk7cyBkaXJlY3RseSBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlLCB0aGlzIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIEkmIzM5O2QgZmxhZyBmb3IgZnV6emluZy4gV2UgbmVlZCB0byBwcm9iZSB0aGUgZXJyb3IgcGF0aHMgcGFydGljdWxhcmx5IHdlbGwuCgpNeSBmb2N1cyBzaG91bGQgYmUgb24gYHUzMl9jaGFuZ2VgLCBhbmQsIG9mIGNvdXJzZSwgdGhlIGBORVRfQ0xTX1UzMmAgY29uZmlnIGlzIHRoZSBvbmUgdG8gY2FyZSBhYm91dC4gSSBzaG91bGQgcHJvYmFibHkgYWxzbyBjaGVjayB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBjb25maWd1cmF0aW9ucyBJIG5lZWQgdG8gY29uc2lkZXIgZm9yIGVuYWJsaW5nIGl0LCBidXQgYE5FVF9TQ0hFRGAgaXMgc3RhbmRhcmQsIHNvIHRoYXQgc2hvdWxkbiYjMzk7dCBiZSBhIHByb2JsZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE0OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDUxMDpcdFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgeW91IHdpbGwgYmUgYWJsZSB0byBjbGFzc2lmeSBwYWNrZXRzXG4gNTExOlx0XHQgIGFjY29yZGluZyB0byBuZXRmaWx0ZXIvZmlyZXdhbGwgbWFya3MuXG4gNTEyOlx0XG4gNTEzOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiA1MTQ6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNsc19mdy5cbiA1MTU6XHRcbiA1MTY6XHRjb25maWcgTkVUX0NMU19VMzJcbiA1MTc6XHRcdHRyaXN0YXRlIFwmIzM0O1VuaXZlcnNhbCAzMmJpdCBjb21wYXJpc29ucyB3LyBoYXNoaW5nIChVMzIpXCYjMzQ7XG4gNTE4Olx0XHRzZWxlY3QgTkVUX0NMU1xuIDUxOTpcdFx0aGVscFxuIDUyMDpcdFx0ICBTYXkgWSBoZXJlIHRvIGJlIGFibGUgdG8gY2xhc3NpZnkgcGFja2V0cyB1c2luZyBhIHVuaXZlcnNhbFxuIDUyMTpcdFx0ICAzMmJpdCBwaWVjZXMgYmFzZWQgY29tcGFyaXNvbiBzY2hlbWUuXG4gNTIyOlx0XG4gNTIzOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiA1MjQ6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNsc191MzIuXG4gNTI1Olx0XG4gNTI2Olx0Y29uZmlnIENMU19VMzJfUEVSRlxuIDUyNzpcdFx0Ym9vbCBcJiMzNDtQZXJmb3JtYW5jZSBjb3VudGVycyBzdXBwb3J0XCYjMzQ7XG4gNTI4Olx0XHRkZXBlbmRzIG9uIE5FVF9DTFNfVTMyXG4gNTI5Olx0XHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE0OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1NTYKCQkJCQkJCW91dHB1dDogODgKCQkJCQkJCXRob3VnaHRzOiAxMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgVTMyIENsYXNzaWZpZXIgUGF0Y2gqKgoKT2theSwgc28gYWZ0ZXIgcmV2aWV3aW5nIHRoaXMgcGF0Y2gsIEkmIzM5O3ZlIGRldGVybWluZWQgdGhhdCBgTkVUX0NMU19VMzJgIGlzIGluZGVlZCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIGZvciBpdCB0byBmdW5jdGlvbiBjb3JyZWN0bHkg4oCTIGdvb2QuIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGEgYnVnIHdpdGhpbiBgdTMyX2NoYW5nZWAsIHNwZWNpZmljYWxseSB0aGUgZW50cnkgcG9pbnQgZm9yIGNvbmZpZ3VyaW5nIGB1MzJgIGZpbHRlcnMuIENvbnNpZGVyaW5nIHRoZSBuYXR1cmUgb2YgdGhlIGZpeCDigJMgaXQmIzM5O3MgZGVhbGluZyB3aXRoIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgYSBmbGFnIHBhc3NpbmcgaXNzdWUg4oCTIGFuZCB0aGUgZmFjdCB0aGF0IGB1MzJfY2hhbmdlYCBpcyBhIGZ1bmRhbWVudGFsIGZ1bmN0aW9uIHdpdGhpbiBhIHJlYWNoYWJsZSBhcmVhIG9mIHRoZSBjb3JlIG5ldHdvcmtpbmcgY29kZSwgdGhpcyBkZWZpbml0ZWx5IHdhcnJhbnRzIHNvbWUgZnV6emluZy4gSSYjMzk7bSBnb2luZyB0byBzZXQgYFdvcnRoRnV6emluZz10cnVlYC4gTXkgbWFpbiBmb2N1cyB3aWxsIGJlIG9uIHRoZSBgdTMyX2NoYW5nZWAgZnVuY3Rpb24gaXRzZWxmLCBhcyB0aGF0JiMzOTtzIHdoZXJlIHRoZSBpZGVudGlmaWVkIGJ1Z3MgcmVzaWRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxNDoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX0NMU19VMzImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1MzJfY2hhbmdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcmVmZXJlbmNlIGNvdW50aW5nIGlzc3VlIGFuZCBhIGZsYWcgcGFzc2luZyBidWcgaW4gdGhlIGB1MzJfY2hhbmdlYCBmdW5jdGlvbiBvZiB0aGUgdTMyIHRyYWZmaWMgY2xhc3NpZmllci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX0NMU19VMzImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1MzJfY2hhbmdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcmVmZXJlbmNlIGNvdW50aW5nIGlzc3VlIGFuZCBhIGZsYWcgcGFzc2luZyBidWcgaW4gdGhlIGB1MzJfY2hhbmdlYCBmdW5jdGlvbiBvZiB0aGUgdTMyIHRyYWZmaWMgY2xhc3NpZmllci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTQ6MTA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxNDoxMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyB0d28gaXNzdWVzIGluIHRoZSB1MzIgcGFja2V0IGNsYXNzaWZpZXI6IGEgdHlwbyB3aGVyZSBuZXRsaW5rIG1lc3NhZ2UgZmxhZ3Mgd2VyZSBwYXNzZWQgaW5zdGVhZCBvZiB1c2VyLXNwZWNpZmllZCBUQ0FfVTMyX0ZMQUdTIHRvIGB1MzJfcmVwbGFjZV9od19rbm9kZWAsIGFuZCBhIHJlZmVyZW5jZSBjb3VudGluZyBidWcgb24gdGhlIGBodF9kb3duYCBub2RlIGR1cmluZyBlcnJvciBoYW5kbGluZy4gQm90aCBgZmxhZ3NgIGFuZCBgdXNlcmZsYWdzYCBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgaW50ZWdlcnMuIFRoZSByZWZlcmVuY2UgY291bnRpbmcgZml4IHByZXZlbnRzIGEgbWVtb3J5IGxlYWsgb3IgdXNlLWFmdGVyLWZyZWUsIHdoaWNoIGFyZSBkZXRlY3RhYmxlIGJ5IGttZW1sZWFrIGFuZCBLQVNBTiByZXNwZWN0aXZlbHkuIFRoZXJlIGlzIG5vIGludHJvZHVjdGlvbiBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgc3RydWN0dXJlIHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDA0NDJmYjlmNTVhOGExMWUxMTI0NzVmOWNiOGMyYzBhZGJjYjU3YWIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAxMyAxNDowOToyMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfdTMyLmMgYi9uZXQvc2NoZWQvY2xzX3UzMi5jCmluZGV4IDhmMzBjYzgyMTgxZDkuLjY5NDcwZDQ5ZWU5YjggMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9jbHNfdTMyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL2Nsc191MzIuYwpAQCAtODc1LDcgJiM0Mzs4NzUsNyBAQCBzdGF0aWMgaW50IHUzMl9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLAogCQkgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiB7CiAJc3RydWN0IHRjX3VfY29tbW9uICp0cF9jID0gdHAtJmd0O2RhdGE7Ci0Jc3RydWN0IHRjX3VfaG5vZGUgKmh0OwomIzQzOwlzdHJ1Y3QgdGNfdV9obm9kZSAqaHQsICpodF9kb3duOwogCXN0cnVjdCB0Y191X2tub2RlICpuOwogCXN0cnVjdCB0Y191MzJfc2VsICpzOwogCXN0cnVjdCBubGF0dHIgKm9wdCA9IHRjYVtUQ0FfT1BUSU9OU107CkBAIC05MzUsMTcgJiM0Mzs5MzUsOSBAQCBzdGF0aWMgaW50IHUzMl9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLAogCiAJCXUzMl9iaW5kX2ZpbHRlcih0cCwgbmV3LCBiYXNlLCB0Yik7CiAKLQkJZXJyID0gdTMyX3JlcGxhY2VfaHdfa25vZGUodHAsIG5ldywgZmxhZ3MsIGV4dGFjayk7CiYjNDM7CQllcnIgPSB1MzJfcmVwbGFjZV9od19rbm9kZSh0cCwgbmV3LCB1c2VyZmxhZ3MsIGV4dGFjayk7CiAJCWlmIChlcnIpIHsKIAkJCXUzMl91bmJpbmRfZmlsdGVyKHRwLCBuZXcsIHRiKTsKLQotCQkJaWYgKHRiW1RDQV9VMzJfTElOS10pIHsKLQkJCQlzdHJ1Y3QgdGNfdV9obm9kZSAqaHRfb2xkOwotCi0JCQkJaHRfb2xkID0gcnRubF9kZXJlZmVyZW5jZShuLSZndDtodF9kb3duKTsKLQkJCQlpZiAoaHRfb2xkKQotCQkJCQlyZWZjb3VudF9pbmMoJmFtcDtodF9vbGQtJmd0O3JlZmNudCk7Ci0JCQl9CiAJCQlfX3UzMl9kZXN0cm95X2tleShuZXcpOwogCQkJcmV0dXJuIGVycjsKIAkJfQpAQCAtMTE2MSw3ICYjNDM7MTE1Myw3IEBAIHN0YXRpYyBpbnQgdTMyX2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsCiAJCXN0cnVjdCB0Y191X2tub2RlIF9fcmN1ICoqaW5zOwogCQlzdHJ1Y3QgdGNfdV9rbm9kZSAqcGluczsKIAotCQllcnIgPSB1MzJfcmVwbGFjZV9od19rbm9kZSh0cCwgbiwgZmxhZ3MsIGV4dGFjayk7CiYjNDM7CQllcnIgPSB1MzJfcmVwbGFjZV9od19rbm9kZSh0cCwgbiwgdXNlcmZsYWdzLCBleHRhY2spOwogCQlpZiAoZXJyKQogCQkJZ290byBlcnJ1bmJpbmQ7CiAKQEAgLTExODUsNiAmIzQzOzExNzcsOSBAQCBzdGF0aWMgaW50IHUzMl9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLAogCiBlcnJ1bmJpbmQ6CiAJdTMyX3VuYmluZF9maWx0ZXIodHAsIG4sIHRiKTsKJiM0MzsJaHRfZG93biA9IHJ0bmxfZGVyZWZlcmVuY2Uobi0mZ3Q7aHRfZG93bik7CiYjNDM7CWlmIChodF9kb3duICZhbXA7JmFtcDsgcmVmY291bnRfZGVjX2FuZF90ZXN0KCZhbXA7aHRfZG93bi0mZ3Q7cmVmY250KSkKJiM0MzsJCWtmcmVlKGh0X2Rvd24pOwogCiAjaWZkZWYgQ09ORklHX0NMU19VMzJfTUFSSwogCWZyZWVfcGVyY3B1KG4tJmd0O3BjcHVfc3VjY2Vzcyk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxNDoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTQ3CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBhdGNoIGluIGBuZXQvc2NoZWQvY2xzX3UzMi5jYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC9zY2hlZC9jbHNfdTMyLmNgLiBUaGUgY29yZSBjaGFuZ2UgaXMgaW4gdGhlIGB1MzJfY2hhbmdlYCBmdW5jdGlvbi4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgcmVwbGFjaW5nIGNhbGxzIHRvIGB1MzJfcmVwbGFjZV9od19rbm9kZSh0cCwgbmV3LCBmbGFncywgZXh0YWNrKWAgd2l0aCBgdTMyX3JlcGxhY2VfaHdfa25vZGUodHAsIG5ldywgdXNlcmZsYWdzLCBleHRhY2spYC4gSW1tZWRpYXRlbHksIHRoYXQgdHJpZ2dlcnMgc29tZSB0aG91Z2h0cy4gIEl0IHNtZWxscyBsaWtlIGEgdHlwbyBmaXgsIG9yIHBvc3NpYmx5IGFuIGluaXRpYWxpemF0aW9uIGlzc3VlLiBJdCBzZWVtcyBsaWtlIHRoZSBjb2RlIHdhcyB0cnlpbmcgdG8gcGFzcyBgdXNlcmZsYWdzYCBidXQgd2FzIGFjY2lkZW50YWxseSBwYXNzaW5nIGBmbGFnc2AgaW5zdGVhZC4gQSBxdWljayBzYW5pdHkgY2hlY2sgb2YgdGhlIGNvZGUgaW5kaWNhdGVzIGB1c2VyZmxhZ3NgIGlzIGRlcml2ZWQgZnJvbSB0aGUgdXNlciBpbnB1dCBhbmQgY291bGQgYmUgZGlmZmVyZW50IGZyb20gc29tZSBsb2NhbGx5IHNldCBgZmxhZ3NgIHZhcmlhYmxlLgoKRnVydGhlcm1vcmUsIHRoZXJlJiMzOTtzIGEgbW9kaWZpY2F0aW9uIHRvIHRoZSBlcnJvciBoYW5kbGluZyB3aXRoaW4gdGhpcyBmdW5jdGlvbi4gVGhlIG9yaWdpbmFsIGNvZGUgaGFkIGEgbW9yZSBpbnZvbHZlZCBjbGVhbnVwIHdoZW4gdGhlcmUgd2FzIGEgZmFpbHVyZSB0byByZXBsYWNlIHRoZSBoYXJkd2FyZSBrbm9kZS4gSXQgbG9va3MgbGlrZSBpdCB3YXMgYXR0ZW1wdGluZyB0byBoYW5kbGUgYSBzaXR1YXRpb24gaW52b2x2aW5nIGBUQ0FfVTMyX0xJTktgIGFuZCBhIGBodF9vbGRgIHBvaW50ZXIgd2l0aGluIHRoZSBgaWYgKHRiW1RDQV9VMzJfTElOS10pYCBibG9jay4gVGhlIGNoYW5nZSBzaW1wbGlmaWVzIHRoaXMuIFRoZSBtb3JlIGNvbXBsZXggbG9naWMgYXBwZWFycyB0byBiZSBlbnRpcmVseSByZW1vdmVkLiBUaGlzIHNpbXBsaWZpZWQgYmxvY2sgaXMgYWxzbyByZWZsZWN0ZWQgaW4gYGVycnVuYmluZGAsIGFuZCBpdCBsb29rcyBsaWtlIGEgcmVmY291bnQgZml4IG9mIHRoZSBgaHRfZG93bmAgYW5kIGFzc29jaWF0ZWQgYHJlZmNudGAuCgpHaXZlbiB0aGUgc3Vycm91bmRpbmcgY2hhbmdlcywgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBgZmxhZ3NgIHRvIGB1c2VyZmxhZ3NgIGNoYW5nZSBhbmQgdGhlIGNsZWFudXAsIEkmIzM5O20gbGVhbmluZyB0b3dhcmRzIHRoZSBjb25jbHVzaW9uIHRoYXQgdGhpcyBpcyBhIGZpeCBmb3IgYSByZWZlcmVuY2UgY291bnRpbmcgYnVnLiBQZXJoYXBzIGEgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8gb3IgYSBwb3RlbnRpYWwgbWVtb3J5IGxlYWsgcmVsYXRlZCB0byB0aGUgYGh0X2Rvd25gIHBvaW50ZXIgYW5kIGl0cyBhc3NvY2lhdGVkIHJlZmVyZW5jZSBjb3VudC4gVGhlIG9yaWdpbmFsIGNvZGUgbWlnaHQgaGF2ZSBiZWVuIGluY3JlbWVudGluZyB0aGUgcmVmZXJlbmNlIGNvdW50IGluIG9uZSBwbGFjZSBidXQgbm90IGRlY3JlbWVudGluZyBpdCBjb3JyZWN0bHkgaW4gYWxsIGZhaWx1cmUgcGF0aHMsIG9yIGluIHRoZSBjb3JyZWN0IHBsYWNlLiBOb3csIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgZGVjcmVtZW50aW5nIHRoZSByZWZjb3VudCBpbiBgZXJydW5iaW5kYCBpZiB0aGUgYGh0X2Rvd25gIHJlZmNvdW50IGlzIG5vbi16ZXJvLCB0aGVuIGNhbGxpbmcgYGtmcmVlYCBpZiBpdCYjMzk7cyAwIGFmdGVyIHRoZSBkZWNyZW1lbnQuCgpUbyBiZSBzdXJlLCBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IGBmbGFnc2AgYW5kIGB1c2VyZmxhZ3NgIHJlcHJlc2VudCBpbiB0aGlzIGNvbnRleHQuIEFuZCBhbHNvIHZlcmlmeSB0aGUgY29kZSYjMzk7cyBpbnRlbmRlZCBiZWhhdmlvdXIgYW5kIGhvdyB0aGlzIGNoYW5nZSBpbXBhY3RzIGl0LiBUaGlzIHBhdGNoIHNlZW1zIHRvIGJlIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgY29ycmVjdG5lc3MgaXNzdWUsIHRob3VnaCwgc28gaXQgbWVyaXRzIGNhcmVmdWwgcmV2aWV3LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxNDoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1c2VyZmxhZ3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvY2xzX3UzMi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9jbHNfdTMyLmM9ODcyPXN0YXRpYyBpbnQgdTMyX2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsXG4tLVxubmV0L3NjaGVkL2Nsc191MzIuYy04ODItXHRzdHJ1Y3QgbmxhdHRyICp0YltUQ0FfVTMyX01BWCAmIzQzOyAxXTtcbm5ldC9zY2hlZC9jbHNfdTMyLmM6ODgzOlx0dTMyIGh0aWQsIHVzZXJmbGFncyA9IDA7XG5uZXQvc2NoZWQvY2xzX3UzMi5jLTg4NC1cdHNpemVfdCBzZWxfc2l6ZTtcbi0tXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTkwMS1cdGlmICh0YltUQ0FfVTMyX0ZMQUdTXSkge1xubmV0L3NjaGVkL2Nsc191MzIuYzo5MDI6XHRcdHVzZXJmbGFncyA9IG5sYV9nZXRfdTMyKHRiW1RDQV9VMzJfRkxBR1NdKTtcbm5ldC9zY2hlZC9jbHNfdTMyLmM6OTAzOlx0XHRpZiAoIXRjX2ZsYWdzX3ZhbGlkKHVzZXJmbGFncykpIHtcbm5ldC9zY2hlZC9jbHNfdTMyLmMtOTA0LVx0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwmIzM0O0ludmFsaWQgZmlsdGVyIGZsYWdzXCYjMzQ7KTtcbi0tXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTkxNy1cbm5ldC9zY2hlZC9jbHNfdTMyLmM6OTE4Olx0XHRpZiAoKG4tXHUwMDNlZmxhZ3MgXiB1c2VyZmxhZ3MpIFx1MDAyNlxubmV0L3NjaGVkL2Nsc191MzIuYy05MTktXHRcdCAgICB+KFRDQV9DTFNfRkxBR1NfSU5fSFcgfCBUQ0FfQ0xTX0ZMQUdTX05PVF9JTl9IVykpIHtcbi0tXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTkzNy1cbm5ldC9zY2hlZC9jbHNfdTMyLmM6OTM4Olx0XHRlcnIgPSB1MzJfcmVwbGFjZV9od19rbm9kZSh0cCwgbmV3LCB1c2VyZmxhZ3MsIGV4dGFjayk7XG5uZXQvc2NoZWQvY2xzX3UzMi5jLTkzOS1cdFx0aWYgKGVycikge1xuLS1cbm5ldC9zY2hlZC9jbHNfdTMyLmMtOTkzLVx0XHRpZHJfaW5pdChcdTAwMjZodC1cdTAwM2VoYW5kbGVfaWRyKTtcbm5ldC9zY2hlZC9jbHNfdTMyLmM6OTk0Olx0XHRodC1cdTAwM2VmbGFncyA9IHVzZXJmbGFncztcbm5ldC9zY2hlZC9jbHNfdTMyLmMtOTk1LVxubmV0L3NjaGVkL2Nsc191MzIuYzo5OTY6XHRcdGVyciA9IHUzMl9yZXBsYWNlX2h3X2hub2RlKHRwLCBodCwgdXNlcmZsYWdzLCBleHRhY2spO1xubmV0L3NjaGVkL2Nsc191MzIuYy05OTctXHRcdGlmIChlcnIpIHtcbi0tXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTExMjQtXHRuLVx1MDAzZWZzaGlmdCA9IHMtXHUwMDNlaG1hc2sgPyBmZnMobnRvaGwocy1cdTAwM2VobWFzaykpIC0gMSA6IDA7XG5uZXQvc2NoZWQvY2xzX3UzMi5jOjExMjU6XHRuLVx1MDAzZWZsYWdzID0gdXNlcmZsYWdzO1xubmV0L3NjaGVkL2Nsc191MzIuYy0xMTI2LVxuLS1cbm5ldC9zY2hlZC9jbHNfdTMyLmMtMTE1NS1cbm5ldC9zY2hlZC9jbHNfdTMyLmM6MTE1NjpcdFx0ZXJyID0gdTMyX3JlcGxhY2VfaHdfa25vZGUodHAsIG4sIHVzZXJmbGFncywgZXh0YWNrKTtcbm5ldC9zY2hlZC9jbHNfdTMyLmMtMTE1Ny1cdFx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTQ6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDMzNAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGB1MzJfY2hhbmdlYCBGdW5jdGlvbiYjMzk7cyBGbGFncyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgdTMyX2NoYW5nZWAgZnVuY3Rpb24sIGFuZCBteSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gZGlzc2VjdCB0aGUgZmxhZ3MuIFRoaXMgaXMgbGlrZWx5IHdoZXJlIHRoZSBjb3JlIG9mIHRoZSBiZWhhdmlvciBsaWVzLiBUaGUgYGZsYWdzYCBwYXJhbWV0ZXIgaXMgYWxtb3N0IGNlcnRhaW5seSBhIGJpdGZpZWxkLCBzbyBJJiMzOTtsbCBiZSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIG9mIGVhY2ggcG9zc2libGUgYml0IGJlaW5nIHNldCBvciBjbGVhcmVkLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgcmVjYWxsIGNvbW1vbiBiaXQtZmxhZyBpZGlvbXMsIGxpa2UgY2hlY2tpbmcgaWYgYSBwYXJ0aWN1bGFyIGJpdCBpcyBzZXQgdXNpbmcgYSBiaXR3aXNlIEFORCwgb3IgY2xlYXJpbmcgYSBiaXQgd2l0aCBhIGJpdHdpc2UgQU5EIGNvbWJpbmVkIHdpdGggYSBOT1Qgb3BlcmF0aW9uLiBJJiMzOTttIGFsc28gYW50aWNpcGF0aW5nIHRoYXQgdGhlc2UgZmxhZ3MgYXJlIHByb2JhYmx5IGdvaW5nIHRvIGNvbnRyb2wgc29tZSBhc3BlY3Qgb2YgaG93IHRoZSBgdTMyYCB2YWx1ZSBpcyBtb2RpZmllZCBvciBoYW5kbGVkIHdpdGhpbiB0aGlzIGZ1bmN0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG1lYW5pbmcgb2YgZWFjaCBpbmRpdmlkdWFsIGZsYWcgdG8gdHJ1bHkgZ3Jhc3AgdGhlIGZ1bmN0aW9uJiMzOTtzIG92ZXJhbGwgYmVoYXZpb3IuIEFyZSB0aGVzZSBjb250cm9sIGZsYWdzLCBzdGF0dXMgZmxhZ3MsIG9yIGJvdGg/IEFyZSB0aGVyZSBhbnkgZmxhZyBjb21iaW5hdGlvbnMgdGhhdCBhcmUgaW52YWxpZCBvciBoYXZlIHNwZWNpYWwgbWVhbmluZz8gVGltZSB0byBkaWcgaW50byB0aGUgZGVmaW5pdGlvbiBvZiBgZmxhZ3NgIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxNDoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmbGFncyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9jbHNfdTMyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2Nsc191MzIuYz00ND1zdHJ1Y3QgdGNfdV9rbm9kZSB7XG4tLVxubmV0L3NjaGVkL2Nsc191MzIuYy01NS0jZW5kaWZcbm5ldC9zY2hlZC9jbHNfdTMyLmM6NTY6XHR1MzJcdFx0XHRmbGFncztcbm5ldC9zY2hlZC9jbHNfdTMyLmMtNTctXHR1bnNpZ25lZCBpbnRcdFx0aW5faHdfY291bnQ7XG4tLVxubmV0L3NjaGVkL2Nsc191MzIuYz03MD1zdHJ1Y3QgdGNfdV9obm9kZSB7XG4tLVxubmV0L3NjaGVkL2Nsc191MzIuYy03OC1cdHN0cnVjdCByY3VfaGVhZFx0XHRyY3U7XG5uZXQvc2NoZWQvY2xzX3UzMi5jOjc5Olx0dTMyXHRcdFx0ZmxhZ3M7XG5uZXQvc2NoZWQvY2xzX3UzMi5jLTgwLVx0LyogVGhlICYjMzk7aHQmIzM5OyBmaWVsZCBNVVNUIGJlIHRoZSBsYXN0IGZpZWxkIGluIHN0cnVjdHVyZSB0byBhbGxvdyBmb3Jcbi0tXG5uZXQvc2NoZWQvY2xzX3UzMi5jPTExND1UQ19JTkRJUkVDVF9TQ09QRSBpbnQgdTMyX2NsYXNzaWZ5KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3NjaGVkL2Nsc191MzIuYy0xNDUtXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjE0NjpcdFx0aWYgKHRjX3NraXBfc3cobi1cdTAwM2VmbGFncykpIHtcbm5ldC9zY2hlZC9jbHNfdTMyLmMtMTQ3LVx0XHRcdG4gPSByY3VfZGVyZWZlcmVuY2VfYmgobi1cdTAwM2VuZXh0KTtcbi0tXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTE4MC1jaGVja190ZXJtaW5hbDpcbm5ldC9zY2hlZC9jbHNfdTMyLmM6MTgxOlx0XHRcdGlmIChuLVx1MDAzZXNlbC5mbGFncyBcdTAwMjYgVENfVTMyX1RFUk1JTkFMKSB7XG5uZXQvc2NoZWQvY2xzX3UzMi5jLTE4Mi1cbi0tXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTIyMi1cdFx0fVxubmV0L3NjaGVkL2Nsc191MzIuYzoyMjM6XHRcdGlmICghKG4tXHUwMDNlc2VsLmZsYWdzIFx1MDAyNiAoVENfVTMyX1ZBUk9GRlNFVCB8IFRDX1UzMl9PRkZTRVQgfCBUQ19VMzJfRUFUKSkpXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTIyNC1cdFx0XHRnb3RvIG5leHRfaHQ7XG5uZXQvc2NoZWQvY2xzX3UzMi5jLTIyNS1cbm5ldC9zY2hlZC9jbHNfdTMyLmM6MjI2Olx0XHRpZiAobi1cdTAwM2VzZWwuZmxhZ3MgXHUwMDI2IChUQ19VMzJfT0ZGU0VUIHwgVENfVTMyX1ZBUk9GRlNFVCkpIHtcbm5ldC9zY2hlZC9jbHNfdTMyLmMtMjI3LVx0XHRcdG9mZjIgPSBuLVx1MDAzZXNlbC5vZmYgJiM0MzsgMztcbm5ldC9zY2hlZC9jbHNfdTMyLmM6MjI4Olx0XHRcdGlmIChuLVx1MDAzZXNlbC5mbGFncyBcdTAwMjYgVENfVTMyX1ZBUk9GRlNFVCkge1xubmV0L3NjaGVkL2Nsc191MzIuYy0yMjktXHRcdFx0XHRfX2JlMTYgKmRhdGEsIGhkYXRhO1xuLS1cbm5ldC9zY2hlZC9jbHNfdTMyLmMtMjQwLVx0XHR9XG5uZXQvc2NoZWQvY2xzX3UzMi5jOjI0MTpcdFx0aWYgKG4tXHUwMDNlc2VsLmZsYWdzIFx1MDAyNiBUQ19VMzJfRUFUKSB7XG5uZXQvc2NoZWQvY2xzX3UzMi5jLTI0Mi1cdFx0XHRvZmYgJiM0Mzs9IG9mZjI7XG4tLVxubmV0L3NjaGVkL2Nsc191MzIuYz00ODg9c3RhdGljIHZvaWQgdTMyX2NsZWFyX2h3X2hub2RlKHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCBzdHJ1Y3QgdGNfdV9obm9kZSAqaCxcbi0tXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTQ5My1cbm5ldC9zY2hlZC9jbHNfdTMyLmM6NDk0Olx0dGNfY2xzX2NvbW1vbl9vZmZsb2FkX2luaXQoXHUwMDI2Y2xzX3UzMi5jb21tb24sIHRwLCBoLVx1MDAzZWZsYWdzLCBleHRhY2spO1xubmV0L3NjaGVkL2Nsc191MzIuYy00OTUtXHRjbHNfdTMyLmNvbW1hbmQgPSBUQ19DTFNVMzJfREVMRVRFX0hOT0RFO1xuLS1cbm5ldC9zY2hlZC9jbHNfdTMyLmM9NTAzPXN0YXRpYyBpbnQgdTMyX3JlcGxhY2VfaHdfaG5vZGUoc3RydWN0IHRjZl9wcm90byAqdHAsIHN0cnVjdCB0Y191X2hub2RlICpoLFxubmV0L3NjaGVkL2Nsc191MzIuYzo1MDQ6XHRcdFx0XHR1MzIgZmxhZ3MsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbm5ldC9zY2hlZC9jbHNfdTMyLmMtNTA1LXtcbi0tXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTUwNy1cdHN0cnVjdCB0Y19jbHNfdTMyX29mZmxvYWQgY2xzX3UzMiA9IHt9O1xubmV0L3NjaGVkL2Nsc191MzIuYzo1MDg6XHRib29sIHNraXBfc3cgPSB0Y19za2lwX3N3KGZsYWdzKTtcbm5ldC9zY2hlZC9jbHNfdTMyLmMtNTA5LVx0Ym9vbCBvZmZsb2FkZWQgPSBmYWxzZTtcbi0tXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTUxMS1cbm5ldC9zY2hlZC9jbHNfdTMyLmM6NTEyOlx0dGNfY2xzX2NvbW1vbl9vZmZsb2FkX2luaXQoXHUwMDI2Y2xzX3UzMi5jb21tb24sIHRwLCBmbGFncywgZXh0YWNrKTtcbm5ldC9zY2hlZC9jbHNfdTMyLmMtNTEzLVx0Y2xzX3UzMi5jb21tYW5kID0gVENfQ0xTVTMyX05FV19ITk9ERTtcbi0tXG5uZXQvc2NoZWQvY2xzX3UzMi5jPTUzMj1zdGF0aWMgdm9pZCB1MzJfcmVtb3ZlX2h3X2tub2RlKHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCBzdHJ1Y3QgdGNfdV9rbm9kZSAqbixcbi0tXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTUzNy1cbm5ldC9zY2hlZC9jbHNfdTMyLmM6NTM4Olx0dGNfY2xzX2NvbW1vbl9vZmZsb2FkX2luaXQoXHUwMDI2Y2xzX3UzMi5jb21tb24sIHRwLCBuLVx1MDAzZWZsYWdzLCBleHRhY2spO1xubmV0L3NjaGVkL2Nsc191MzIuYy01MzktXHRjbHNfdTMyLmNvbW1hbmQgPSBUQ19DTFNVMzJfREVMRVRFX0tOT0RFO1xuLS1cbm5ldC9zY2hlZC9jbHNfdTMyLmMtNTQyLVx0dGNfc2V0dXBfY2JfZGVzdHJveShibG9jaywgdHAsIFRDX1NFVFVQX0NMU1UzMiwgXHUwMDI2Y2xzX3UzMiwgZmFsc2UsXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjU0MzpcdFx0XHQgICAgXHUwMDI2bi1cdTAwM2VmbGFncywgXHUwMDI2bi1cdTAwM2Vpbl9od19jb3VudCwgdHJ1ZSk7XG5uZXQvc2NoZWQvY2xzX3UzMi5jLTU0NC19XG4tLVxubmV0L3NjaGVkL2Nsc191MzIuYz01NDY9c3RhdGljIGludCB1MzJfcmVwbGFjZV9od19rbm9kZShzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgc3RydWN0IHRjX3Vfa25vZGUgKm4sXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjU0NzpcdFx0XHRcdHUzMiBmbGFncywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxubmV0L3NjaGVkL2Nsc191MzIuYy01NDgte1xuLS1cbm5ldC9zY2hlZC9jbHNfdTMyLmMtNTUxLVx0c3RydWN0IHRjX2Nsc191MzJfb2ZmbG9hZCBjbHNfdTMyID0ge307XG5uZXQvc2NoZWQvY2xzX3UzMi5jOjU1MjpcdGJvb2wgc2tpcF9zdyA9IHRjX3NraXBfc3coZmxhZ3MpO1xubmV0L3NjaGVkL2Nsc191MzIuYy01NTMtXHRpbnQgZXJyO1xubmV0L3NjaGVkL2Nsc191MzIuYy01NTQtXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjU1NTpcdHRjX2Nsc19jb21tb25fb2ZmbG9hZF9pbml0KFx1MDAyNmNsc191MzIuY29tbW9uLCB0cCwgZmxhZ3MsIGV4dGFjayk7XG5uZXQvc2NoZWQvY2xzX3UzMi5jLTU1Ni1cdGNsc191MzIuY29tbWFuZCA9IFRDX0NMU1UzMl9SRVBMQUNFX0tOT0RFO1xuLS1cbm5ldC9zY2hlZC9jbHNfdTMyLmMtNTcyLVx0ZXJyID0gdGNfc2V0dXBfY2JfYWRkKGJsb2NrLCB0cCwgVENfU0VUVVBfQ0xTVTMyLCBcdTAwMjZjbHNfdTMyLCBza2lwX3N3LFxubmV0L3NjaGVkL2Nsc191MzIuYzo1NzM6XHRcdFx0ICAgICAgXHUwMDI2bi1cdTAwM2VmbGFncywgXHUwMDI2bi1cdTAwM2Vpbl9od19jb3VudCwgdHJ1ZSk7XG5uZXQvc2NoZWQvY2xzX3UzMi5jLTU3NC1cdGlmIChlcnIpIHtcbi0tXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTU3OC1cbm5ldC9zY2hlZC9jbHNfdTMyLmM6NTc5Olx0aWYgKHNraXBfc3cgXHUwMDI2XHUwMDI2ICEobi1cdTAwM2VmbGFncyBcdTAwMjYgVENBX0NMU19GTEFHU19JTl9IVykpXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTU4MC1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxubmV0L3NjaGVkL2Nsc191MzIuYz03NDA9c3RhdGljIGludCB1MzJfc2V0X3Bhcm1zKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRjZl9wcm90byAqdHAsXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTc0MS1cdFx0XHQgc3RydWN0IHRjX3Vfa25vZGUgKm4sIHN0cnVjdCBubGF0dHIgKip0Yixcbm5ldC9zY2hlZC9jbHNfdTMyLmM6NzQyOlx0XHRcdCBzdHJ1Y3QgbmxhdHRyICplc3QsIHUzMiBmbGFncywgdTMyIGZsX2ZsYWdzLFxubmV0L3NjaGVkL2Nsc191MzIuYy03NDMtXHRcdFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTc0Ni1cbm5ldC9zY2hlZC9jbHNfdTMyLmM6NzQ3Olx0ZXJyID0gdGNmX2V4dHNfdmFsaWRhdGVfZXgobmV0LCB0cCwgdGIsIGVzdCwgXHUwMDI2bi1cdTAwM2VleHRzLCBmbGFncyxcbm5ldC9zY2hlZC9jbHNfdTMyLmM6NzQ4Olx0XHRcdFx0ICAgZmxfZmxhZ3MsIGV4dGFjayk7XG5uZXQvc2NoZWQvY2xzX3UzMi5jLTc0OS1cdGlmIChlcnIgXHUwMDNjIDApXG4tLVxubmV0L3NjaGVkL2Nsc191MzIuYz04MjE9c3RhdGljIHN0cnVjdCB0Y191X2tub2RlICp1MzJfaW5pdF9rbm9kZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLFxuLS1cbm5ldC9zY2hlZC9jbHNfdTMyLmMtODM3LVx0bmV3LVx1MDAzZWZzaGlmdCA9IG4tXHUwMDNlZnNoaWZ0O1xubmV0L3NjaGVkL2Nsc191MzIuYzo4Mzg6XHRuZXctXHUwMDNlZmxhZ3MgPSBuLVx1MDAzZWZsYWdzO1xubmV0L3NjaGVkL2Nsc191MzIuYy04MzktXHRSQ1VfSU5JVF9QT0lOVEVSKG5ldy1cdTAwM2VodF9kb3duLCBodCk7XG4tLVxubmV0L3NjaGVkL2Nsc191MzIuYz04NzI9c3RhdGljIGludCB1MzJfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbm5ldC9zY2hlZC9jbHNfdTMyLmMtODczLVx0XHQgICAgICBzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgdW5zaWduZWQgbG9uZyBiYXNlLCB1MzIgaGFuZGxlLFxubmV0L3NjaGVkL2Nsc191MzIuYzo4NzQ6XHRcdCAgICAgIHN0cnVjdCBubGF0dHIgKip0Y2EsIHZvaWQgKiphcmcsIHUzMiBmbGFncyxcbm5ldC9zY2hlZC9jbHNfdTMyLmMtODc1LVx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L3NjaGVkL2Nsc191MzIuYy04ODItXHRzdHJ1Y3QgbmxhdHRyICp0YltUQ0FfVTMyX01BWCAmIzQzOyAxXTtcbm5ldC9zY2hlZC9jbHNfdTMyLmM6ODgzOlx0dTMyIGh0aWQsIHVzZXJmbGFncyA9IDA7XG5uZXQvc2NoZWQvY2xzX3UzMi5jLTg4NC1cdHNpemVfdCBzZWxfc2l6ZTtcbi0tXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTkwMS1cdGlmICh0YltUQ0FfVTMyX0ZMQUdTXSkge1xubmV0L3NjaGVkL2Nsc191MzIuYzo5MDI6XHRcdHVzZXJmbGFncyA9IG5sYV9nZXRfdTMyKHRiW1RDQV9VMzJfRkxBR1NdKTtcbm5ldC9zY2hlZC9jbHNfdTMyLmM6OTAzOlx0XHRpZiAoIXRjX2ZsYWdzX3ZhbGlkKHVzZXJmbGFncykpIHtcbm5ldC9zY2hlZC9jbHNfdTMyLmM6OTA0Olx0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwmIzM0O0ludmFsaWQgZmlsdGVyIGZsYWdzXCYjMzQ7KTtcbm5ldC9zY2hlZC9jbHNfdTMyLmMtOTA1LVx0XHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbm5ldC9zY2hlZC9jbHNfdTMyLmMtOTE3LVxubmV0L3NjaGVkL2Nsc191MzIuYzo5MTg6XHRcdGlmICgobi1cdTAwM2VmbGFncyBeIHVzZXJmbGFncykgXHUwMDI2XG5uZXQvc2NoZWQvY2xzX3UzMi5jLTkxOS1cdFx0ICAgIH4oVENBX0NMU19GTEFHU19JTl9IVyB8IFRDQV9DTFNfRkxBR1NfTk9UX0lOX0hXKSkge1xubmV0L3NjaGVkL2Nsc191MzIuYzo5MjA6XHRcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCYjMzQ7S2V5IG5vZGUgZmxhZ3MgZG8gbm90IG1hdGNoIHBhc3NlZCBmbGFnc1wmIzM0Oyk7XG5uZXQvc2NoZWQvY2xzX3UzMi5jLTkyMS1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTkyOC1cdFx0ZXJyID0gdTMyX3NldF9wYXJtcyhuZXQsIHRwLCBuZXcsIHRiLCB0Y2FbVENBX1JBVEVdLFxubmV0L3NjaGVkL2Nsc191MzIuYzo5Mjk6XHRcdFx0XHQgICAgZmxhZ3MsIG5ldy1cdTAwM2VmbGFncywgZXh0YWNrKTtcbm5ldC9zY2hlZC9jbHNfdTMyLmMtOTMwLVxuLS1cbm5ldC9zY2hlZC9jbHNfdTMyLmMtOTM3LVxubmV0L3NjaGVkL2Nsc191MzIuYzo5Mzg6XHRcdGVyciA9IHUzMl9yZXBsYWNlX2h3X2tub2RlKHRwLCBuZXcsIHVzZXJmbGFncywgZXh0YWNrKTtcbm5ldC9zY2hlZC9jbHNfdTMyLmMtOTM5LVx0XHRpZiAoZXJyKSB7XG4tLVxubmV0L3NjaGVkL2Nsc191MzIuYy05NDQtXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjk0NTpcdFx0aWYgKCF0Y19pbl9odyhuZXctXHUwMDNlZmxhZ3MpKVxubmV0L3NjaGVkL2Nsc191MzIuYzo5NDY6XHRcdFx0bmV3LVx1MDAzZWZsYWdzIHw9IFRDQV9DTFNfRkxBR1NfTk9UX0lOX0hXO1xubmV0L3NjaGVkL2Nsc191MzIuYy05NDctXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjk0ODpcdFx0dGNmX3Byb3RvX3VwZGF0ZV91c2Vzdyh0cCwgbmV3LVx1MDAzZWZsYWdzKTtcbm5ldC9zY2hlZC9jbHNfdTMyLmMtOTQ5LVxuLS1cbm5ldC9zY2hlZC9jbHNfdTMyLmMtOTkzLVx0XHRpZHJfaW5pdChcdTAwMjZodC1cdTAwM2VoYW5kbGVfaWRyKTtcbm5ldC9zY2hlZC9jbHNfdTMyLmM6OTk0Olx0XHRodC1cdTAwM2VmbGFncyA9IHVzZXJmbGFncztcbm5ldC9zY2hlZC9jbHNfdTMyLmMtOTk1LVxubmV0L3NjaGVkL2Nsc191MzIuYzo5OTY6XHRcdGVyciA9IHUzMl9yZXBsYWNlX2h3X2hub2RlKHRwLCBodCwgdXNlcmZsYWdzLCBleHRhY2spO1xubmV0L3NjaGVkL2Nsc191MzIuYy05OTctXHRcdGlmIChlcnIpIHtcbi0tXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTExMjQtXHRuLVx1MDAzZWZzaGlmdCA9IHMtXHUwMDNlaG1hc2sgPyBmZnMobnRvaGwocy1cdTAwM2VobWFzaykpIC0gMSA6IDA7XG5uZXQvc2NoZWQvY2xzX3UzMi5jOjExMjU6XHRuLVx1MDAzZWZsYWdzID0gdXNlcmZsYWdzO1xubmV0L3NjaGVkL2Nsc191MzIuYy0xMTI2LVxuLS1cbm5ldC9zY2hlZC9jbHNfdTMyLmMtMTE0Ny1cdGVyciA9IHUzMl9zZXRfcGFybXMobmV0LCB0cCwgbiwgdGIsIHRjYVtUQ0FfUkFURV0sXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjExNDg6XHRcdFx0ICAgIGZsYWdzLCBuLVx1MDAzZWZsYWdzLCBleHRhY2spO1xubmV0L3NjaGVkL2Nsc191MzIuYy0xMTQ5LVxuLS1cbm5ldC9zY2hlZC9jbHNfdTMyLmMtMTE1NS1cbm5ldC9zY2hlZC9jbHNfdTMyLmM6MTE1NjpcdFx0ZXJyID0gdTMyX3JlcGxhY2VfaHdfa25vZGUodHAsIG4sIHVzZXJmbGFncywgZXh0YWNrKTtcbm5ldC9zY2hlZC9jbHNfdTMyLmMtMTE1Ny1cdFx0aWYgKGVycilcbi0tXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTExNTktXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjExNjA6XHRcdGlmICghdGNfaW5faHcobi1cdTAwM2VmbGFncykpXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjExNjE6XHRcdFx0bi1cdTAwM2VmbGFncyB8PSBUQ0FfQ0xTX0ZMQUdTX05PVF9JTl9IVztcbm5ldC9zY2hlZC9jbHNfdTMyLmMtMTE2Mi1cbm5ldC9zY2hlZC9jbHNfdTMyLmM6MTE2MzpcdFx0dGNmX3Byb3RvX3VwZGF0ZV91c2Vzdyh0cCwgbi1cdTAwM2VmbGFncyk7XG5uZXQvc2NoZWQvY2xzX3UzMi5jLTExNjQtXG4tLVxubmV0L3NjaGVkL2Nsc191MzIuYz0xMjMxPXN0YXRpYyBpbnQgdTMyX3Jlb2ZmbG9hZF9obm9kZShzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgc3RydWN0IHRjX3VfaG5vZGUgKmh0LFxuLS1cbm5ldC9zY2hlZC9jbHNfdTMyLmMtMTIzNy1cbm5ldC9zY2hlZC9jbHNfdTMyLmM6MTIzODpcdHRjX2Nsc19jb21tb25fb2ZmbG9hZF9pbml0KFx1MDAyNmNsc191MzIuY29tbW9uLCB0cCwgaHQtXHUwMDNlZmxhZ3MsIGV4dGFjayk7XG5uZXQvc2NoZWQvY2xzX3UzMi5jLTEyMzktXHRjbHNfdTMyLmNvbW1hbmQgPSBhZGQgPyBUQ19DTFNVMzJfTkVXX0hOT0RFIDogVENfQ0xTVTMyX0RFTEVURV9ITk9ERTtcbi0tXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTEyNDQtXHRlcnIgPSBjYihUQ19TRVRVUF9DTFNVMzIsIFx1MDAyNmNsc191MzIsIGNiX3ByaXYpO1xubmV0L3NjaGVkL2Nsc191MzIuYzoxMjQ1Olx0aWYgKGVyciBcdTAwMjZcdTAwMjYgYWRkIFx1MDAyNlx1MDAyNiB0Y19za2lwX3N3KGh0LVx1MDAzZWZsYWdzKSlcbm5ldC9zY2hlZC9jbHNfdTMyLmMtMTI0Ni1cdFx0cmV0dXJuIGVycjtcbi0tXG5uZXQvc2NoZWQvY2xzX3UzMi5jPTEyNTE9c3RhdGljIGludCB1MzJfcmVvZmZsb2FkX2tub2RlKHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCBzdHJ1Y3QgdGNfdV9rbm9kZSAqbixcbi0tXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTEyNTgtXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjEyNTk6XHR0Y19jbHNfY29tbW9uX29mZmxvYWRfaW5pdChcdTAwMjZjbHNfdTMyLmNvbW1vbiwgdHAsIG4tXHUwMDNlZmxhZ3MsIGV4dGFjayk7XG5uZXQvc2NoZWQvY2xzX3UzMi5jLTEyNjAtXHRjbHNfdTMyLmNvbW1hbmQgPSBhZGQgP1xuLS1cbm5ldC9zY2hlZC9jbHNfdTMyLmMtMTI4MC1cdHJldHVybiB0Y19zZXR1cF9jYl9yZW9mZmxvYWQoYmxvY2ssIHRwLCBhZGQsIGNiLCBUQ19TRVRVUF9DTFNVMzIsXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjEyODE6XHRcdFx0XHQgICAgIFx1MDAyNmNsc191MzIsIGNiX3ByaXYsIFx1MDAyNm4tXHUwMDNlZmxhZ3MsXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTEyODItXHRcdFx0XHQgICAgIFx1MDAyNm4tXHUwMDNlaW5faHdfY291bnQpO1xuLS1cbm5ldC9zY2hlZC9jbHNfdTMyLmM9MTI4NT1zdGF0aWMgaW50IHUzMl9yZW9mZmxvYWQoc3RydWN0IHRjZl9wcm90byAqdHAsIGJvb2wgYWRkLCBmbG93X3NldHVwX2NiX3QgKmNiLFxuLS1cbm5ldC9zY2hlZC9jbHNfdTMyLmMtMTMwMy1cdFx0ICovXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjEzMDQ6XHRcdGlmIChhZGQgXHUwMDI2XHUwMDI2ICF0Y19za2lwX2h3KGh0LVx1MDAzZWZsYWdzKSkge1xubmV0L3NjaGVkL2Nsc191MzIuYy0xMzA1LVx0XHRcdGVyciA9IHUzMl9yZW9mZmxvYWRfaG5vZGUodHAsIGh0LCBhZGQsIGNiLCBjYl9wcml2LFxuLS1cbm5ldC9zY2hlZC9jbHNfdTMyLmMtMTMxNC1cdFx0XHQgICAgIG4gPSBydG5sX2RlcmVmZXJlbmNlKG4tXHUwMDNlbmV4dCkpIHtcbm5ldC9zY2hlZC9jbHNfdTMyLmM6MTMxNTpcdFx0XHRcdGlmICh0Y19za2lwX2h3KG4tXHUwMDNlZmxhZ3MpKVxubmV0L3NjaGVkL2Nsc191MzIuYy0xMzE2LVx0XHRcdFx0XHRjb250aW51ZTtcbi0tXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTEzMjQtXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjEzMjU6XHRcdGlmICghYWRkIFx1MDAyNlx1MDAyNiAhdGNfc2tpcF9odyhodC1cdTAwM2VmbGFncykpXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTEzMjYtXHRcdFx0dTMyX3Jlb2ZmbG9hZF9obm9kZSh0cCwgaHQsIGFkZCwgY2IsIGNiX3ByaXYsIGV4dGFjayk7XG4tLVxubmV0L3NjaGVkL2Nsc191MzIuYz0xMzQwPXN0YXRpYyBpbnQgdTMyX2R1bXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgdm9pZCAqZmgsXG4tLVxubmV0L3NjaGVkL2Nsc191MzIuYy0xMzg2LVxubmV0L3NjaGVkL2Nsc191MzIuYzoxMzg3Olx0XHRpZiAobi1cdTAwM2VmbGFncyBcdTAwMjZcdTAwMjYgbmxhX3B1dF91MzIoc2tiLCBUQ0FfVTMyX0ZMQUdTLCBuLVx1MDAzZWZsYWdzKSlcbm5ldC9zY2hlZC9jbHNfdTMyLmMtMTM4OC1cdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTQ6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQwNwoJCQkJCQkJb3V0cHV0OiAxNjkKCQkJCQkJCXRob3VnaHRzOiA5MTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBVMzIgT2ZmbG9hZCBQYXRjaDogTm8gS01TQU4gTmVlZGVkKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY2hhbmdpbmcgdGhlIGFyZ3VtZW50IHBhc3NlZCB0byBgdTMyX3JlcGxhY2VfaHdfa25vZGVgLiBJIHNlZSB0aGUgb3JpZ2luYWwgY29kZSB3YXMgaW5jb3JyZWN0bHkgcGFzc2luZyBgZmxhZ3NgICh0aGUgbmV0bGluayBtZXNzYWdlIGZsYWdzLCBsaWtlIGBOTE1fRl9DUkVBVEVgIOKAkyB3aGljaCBvcmlnaW5hdGVzIGZyb20gYHRjX25ld190ZmlsdGVyYOKAmXMgYG4tJmd0O25sbXNnX2ZsYWdzYCkgd2hlbiBpdCBzaG91bGQgaGF2ZSBiZWVuIHBhc3NpbmcgYHVzZXJmbGFnc2AuIGB1c2VyZmxhZ3NgIGlzIGRlcml2ZWQgZnJvbSBgdGJbVENBX1UzMl9GTEFHU11gLiBUaGF0JiMzOTtzIGEgY2xlYXIgYnVnIOKAkyBpdCYjMzk7cyBhIG1peC11cCBvZiBuZXRsaW5rIG1ldGFkYXRhIHZlcnN1cyB1c2VyLXNwZWNpZmllZCBmbGFncywgc3BlY2lmaWNhbGx5IGZvciBoYXJkd2FyZSBvZmZsb2FkIGJlaGF2aW9yLiBJbXBvcnRhbnRseSwgYm90aCBgZmxhZ3NgIGFuZCBgdXNlcmZsYWdzYCBhcmUgaW5pdGlhbGl6ZWQuIGBmbGFnc2AgaXMgYW4gYXJndW1lbnQgYW5kIGB1c2VyZmxhZ3NgIGlzIGluaXRpYWxpemVkIHRvIHplcm8gYW5kIGNvbmRpdGlvbmFsbHkgc2V0IGJ5IGBubGFfZ2V0X3UzMmAuIFRoaXMgaGFzIG5vdGhpbmcgdG8gZG8gd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeS4KClRoZSBzZWNvbmQgcGFydCBhZGRyZXNzZXMgYSByZWZlcmVuY2UgY291bnRpbmcgcHJvYmxlbS4gIElmIGB1MzJfcmVwbGFjZV9od19rbm9kZWAgZmFpbHMsIHRoZSBgaHRfZG93bmAgcmVmZXJlbmNlIHdhc24mIzM5O3QgYmVpbmcgbWFuYWdlZCBjb3JyZWN0bHksIGxlYWRpbmcgdG8gYSBwb3RlbnRpYWwgbGVhayBvciB1c2UtYWZ0ZXItZnJlZS4gVGhpcyBwYXRjaCBjb3JyZWN0cyB0aGF0LiBBZ2Fpbiwgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgY29uY2VybnMgaGVyZS4gSXQmIzM5O3MgYWJvdXQgZW5zdXJpbmcgcmVzb3VyY2VzIGFyZSBjb3JyZWN0bHkgZnJlZWQgaW4gZXJyb3IgcGF0aHMuCgpUaGUgZml4IGZvciB0aGUgYGZsYWdzYCB2cyBgdXNlcmZsYWdzYCBhcmd1bWVudCBpcyBhIHN0cmFpZ2h0IGJ1ZyBmaXgsIGFuZCB0aGUgcmVmZXJlbmNlIGNvdW50IGZpeCBjb3JyZWN0cyByZXNvdXJjZSBtYW5hZ2VtZW50LiBOZWl0aGVyIGludHJvZHVjZXMgb3IgZXhwb3NlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuICBLQVNBTiB3b3VsZCBjYXRjaCBhbnkgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMgYXJpc2luZyBmcm9tIHRoZSByZWZlcmVuY2UgY291bnRpbmcgZml4LCBhbmQga21lbWxlYWsgc2hvdWxkIGNhdGNoIG1lbW9yeSBsZWFrcy4gS01TQU4gaXNuJiMzOTt0IHJlbGV2YW50IGhlcmUuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSYjMzk7bGwgcXVpY2tseSBkb3VibGUtY2hlY2sgaG93IGB1MzJfcmVwbGFjZV9od19rbm9kZWAgaXRzZWxmIHVzZXMgYGZsYWdzYDogaXQgdXNlcyBpdCBmb3IgaW5pdGlhbGl6aW5nIHRoZSBvZmZsb2FkIHN0cnVjdHVyZSwgc28gaXQmIzM5O3MgYSBkaXJlY3QgaW50ZWdlciB2YWx1ZSwgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYXQgcGxheSBoZXJlLgoKVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXNuJiMzOTt0IHdhcnJhbnQgYSBLTVNBTiBpbnZlc3RpZ2F0aW9uLiBJdCYjMzk7cyBhIGNsZWFuIGJ1ZyBmaXggYW5kIHJlc291cmNlIG1hbmFnZW1lbnQgY29ycmVjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTQ6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgdHdvIGlzc3VlcyBpbiB0aGUgdTMyIHBhY2tldCBjbGFzc2lmaWVyOiBhIHR5cG8gd2hlcmUgbmV0bGluayBtZXNzYWdlIGZsYWdzIHdlcmUgcGFzc2VkIGluc3RlYWQgb2YgdXNlci1zcGVjaWZpZWQgVENBX1UzMl9GTEFHUyB0byBgdTMyX3JlcGxhY2VfaHdfa25vZGVgLCBhbmQgYSByZWZlcmVuY2UgY291bnRpbmcgYnVnIG9uIHRoZSBgaHRfZG93bmAgbm9kZSBkdXJpbmcgZXJyb3IgaGFuZGxpbmcuIEJvdGggYGZsYWdzYCBhbmQgYHVzZXJmbGFnc2AgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGludGVnZXJzLiBUaGUgcmVmZXJlbmNlIGNvdW50aW5nIGZpeCBwcmV2ZW50cyBhIG1lbW9yeSBsZWFrIG9yIHVzZS1hZnRlci1mcmVlLCB3aGljaCBhcmUgZGV0ZWN0YWJsZSBieSBrbWVtbGVhayBhbmQgS0FTQU4gcmVzcGVjdGl2ZWx5LiBUaGVyZSBpcyBubyBpbnRyb2R1Y3Rpb24gb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIHN0cnVjdHVyZSBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgdHdvIGlzc3VlcyBpbiB0aGUgdTMyIHBhY2tldCBjbGFzc2lmaWVyOiBhIHR5cG8gd2hlcmUgbmV0bGluayBtZXNzYWdlIGZsYWdzIHdlcmUgcGFzc2VkIGluc3RlYWQgb2YgdXNlci1zcGVjaWZpZWQgVENBX1UzMl9GTEFHUyB0byBgdTMyX3JlcGxhY2VfaHdfa25vZGVgLCBhbmQgYSByZWZlcmVuY2UgY291bnRpbmcgYnVnIG9uIHRoZSBgaHRfZG93bmAgbm9kZSBkdXJpbmcgZXJyb3IgaGFuZGxpbmcuIEJvdGggYGZsYWdzYCBhbmQgYHVzZXJmbGFnc2AgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGludGVnZXJzLiBUaGUgcmVmZXJlbmNlIGNvdW50aW5nIGZpeCBwcmV2ZW50cyBhIG1lbW9yeSBsZWFrIG9yIHVzZS1hZnRlci1mcmVlLCB3aGljaCBhcmUgZGV0ZWN0YWJsZSBieSBrbWVtbGVhayBhbmQgS0FTQU4gcmVzcGVjdGl2ZWx5LiBUaGVyZSBpcyBubyBpbnRyb2R1Y3Rpb24gb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIHN0cnVjdHVyZSBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNDowOToyMS45OTg5MTg5NjdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDQwNzQ0NDIwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfQ0xTX1UzMlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInUzMl9jaGFuZ2VcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIHR3byBpc3N1ZXMgaW4gdGhlIHUzMiBwYWNrZXQgY2xhc3NpZmllcjogYSB0eXBvIHdoZXJlIG5ldGxpbmsgbWVzc2FnZSBmbGFncyB3ZXJlIHBhc3NlZCBpbnN0ZWFkIG9mIHVzZXItc3BlY2lmaWVkIFRDQV9VMzJfRkxBR1MgdG8gYHUzMl9yZXBsYWNlX2h3X2tub2RlYCwgYW5kIGEgcmVmZXJlbmNlIGNvdW50aW5nIGJ1ZyBvbiB0aGUgYGh0X2Rvd25gIG5vZGUgZHVyaW5nIGVycm9yIGhhbmRsaW5nLiBCb3RoIGBmbGFnc2AgYW5kIGB1c2VyZmxhZ3NgIGFyZSBmdWxseSBpbml0aWFsaXplZCBpbnRlZ2Vycy4gVGhlIHJlZmVyZW5jZSBjb3VudGluZyBmaXggcHJldmVudHMgYSBtZW1vcnkgbGVhayBvciB1c2UtYWZ0ZXItZnJlZSwgd2hpY2ggYXJlIGRldGVjdGFibGUgYnkga21lbWxlYWsgYW5kIEtBU0FOIHJlc3BlY3RpdmVseS4gVGhlcmUgaXMgbm8gaW50cm9kdWN0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBzdHJ1Y3R1cmUgcGFkZGluZyBsZWFrcywgb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgYmVpbmcgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHJlZmVyZW5jZSBjb3VudGluZyBpc3N1ZSBhbmQgYSBmbGFnIHBhc3NpbmcgYnVnIGluIHRoZSBgdTMyX2NoYW5nZWAgZnVuY3Rpb24gb2YgdGhlIHUzMiB0cmFmZmljIGNsYXNzaWZpZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE0OjA5OjIxLjk5ODkyMzg4N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcyNTc1MDQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMDQ0MmZiOWY1NWE4YTExZTExMjQ3NWY5Y2I4YzJjMGFkYmNiNTdhYlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEF1ZyAxMyAxNDowOToyMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvY2xzX3UzMi5jIGIvbmV0L3NjaGVkL2Nsc191MzIuY1xcbmluZGV4IDhmMzBjYzgyMTgxZDkuLjY5NDcwZDQ5ZWU5YjggMTAwNjQ0XFxuLS0tIGEvbmV0L3NjaGVkL2Nsc191MzIuY1xcbisrKyBiL25ldC9zY2hlZC9jbHNfdTMyLmNcXG5AQCAtODc1LDcgKzg3NSw3IEBAIHN0YXRpYyBpbnQgdTMyX2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsXFxuIFxcdFxcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4ge1xcbiBcXHRzdHJ1Y3QgdGNfdV9jb21tb24gKnRwX2MgPSB0cC1cXHUwMDNlZGF0YTtcXG4tXFx0c3RydWN0IHRjX3VfaG5vZGUgKmh0O1xcbitcXHRzdHJ1Y3QgdGNfdV9obm9kZSAqaHQsICpodF9kb3duO1xcbiBcXHRzdHJ1Y3QgdGNfdV9rbm9kZSAqbjtcXG4gXFx0c3RydWN0IHRjX3UzMl9zZWwgKnM7XFxuIFxcdHN0cnVjdCBubGF0dHIgKm9wdCA9IHRjYVtUQ0FfT1BUSU9OU107XFxuQEAgLTkzNSwxNyArOTM1LDkgQEAgc3RhdGljIGludCB1MzJfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcXG4gXFxuIFxcdFxcdHUzMl9iaW5kX2ZpbHRlcih0cCwgbmV3LCBiYXNlLCB0Yik7XFxuIFxcbi1cXHRcXHRlcnIgPSB1MzJfcmVwbGFjZV9od19rbm9kZSh0cCwgbmV3LCBmbGFncywgZXh0YWNrKTtcXG4rXFx0XFx0ZXJyID0gdTMyX3JlcGxhY2VfaHdfa25vZGUodHAsIG5ldywgdXNlcmZsYWdzLCBleHRhY2spO1xcbiBcXHRcXHRpZiAoZXJyKSB7XFxuIFxcdFxcdFxcdHUzMl91bmJpbmRfZmlsdGVyKHRwLCBuZXcsIHRiKTtcXG4tXFxuLVxcdFxcdFxcdGlmICh0YltUQ0FfVTMyX0xJTktdKSB7XFxuLVxcdFxcdFxcdFxcdHN0cnVjdCB0Y191X2hub2RlICpodF9vbGQ7XFxuLVxcbi1cXHRcXHRcXHRcXHRodF9vbGQgPSBydG5sX2RlcmVmZXJlbmNlKG4tXFx1MDAzZWh0X2Rvd24pO1xcbi1cXHRcXHRcXHRcXHRpZiAoaHRfb2xkKVxcbi1cXHRcXHRcXHRcXHRcXHRyZWZjb3VudF9pbmMoXFx1MDAyNmh0X29sZC1cXHUwMDNlcmVmY250KTtcXG4tXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRfX3UzMl9kZXN0cm95X2tleShuZXcpO1xcbiBcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHRcXHR9XFxuQEAgLTExNjEsNyArMTE1Myw3IEBAIHN0YXRpYyBpbnQgdTMyX2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsXFxuIFxcdFxcdHN0cnVjdCB0Y191X2tub2RlIF9fcmN1ICoqaW5zO1xcbiBcXHRcXHRzdHJ1Y3QgdGNfdV9rbm9kZSAqcGlucztcXG4gXFxuLVxcdFxcdGVyciA9IHUzMl9yZXBsYWNlX2h3X2tub2RlKHRwLCBuLCBmbGFncywgZXh0YWNrKTtcXG4rXFx0XFx0ZXJyID0gdTMyX3JlcGxhY2VfaHdfa25vZGUodHAsIG4sIHVzZXJmbGFncywgZXh0YWNrKTtcXG4gXFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0Z290byBlcnJ1bmJpbmQ7XFxuIFxcbkBAIC0xMTg1LDYgKzExNzcsOSBAQCBzdGF0aWMgaW50IHUzMl9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxcbiBcXG4gZXJydW5iaW5kOlxcbiBcXHR1MzJfdW5iaW5kX2ZpbHRlcih0cCwgbiwgdGIpO1xcbitcXHRodF9kb3duID0gcnRubF9kZXJlZmVyZW5jZShuLVxcdTAwM2VodF9kb3duKTtcXG4rXFx0aWYgKGh0X2Rvd24gXFx1MDAyNlxcdTAwMjYgcmVmY291bnRfZGVjX2FuZF90ZXN0KFxcdTAwMjZodF9kb3duLVxcdTAwM2VyZWZjbnQpKVxcbitcXHRcXHRrZnJlZShodF9kb3duKTtcXG4gXFxuICNpZmRlZiBDT05GSUdfQ0xTX1UzMl9NQVJLXFxuIFxcdGZyZWVfcGVyY3B1KG4tXFx1MDAzZXBjcHVfc3VjY2Vzcyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE0OjA5OjIyLjQ3MjI0MTg4M1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjY1NTY1ODAzNDM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9DTFNfVTMyXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidTMyX2NoYW5nZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcmVmZXJlbmNlIGNvdW50aW5nIGlzc3VlIGFuZCBhIGZsYWcgcGFzc2luZyBidWcgaW4gdGhlIGB1MzJfY2hhbmdlYCBmdW5jdGlvbiBvZiB0aGUgdTMyIHRyYWZmaWMgY2xhc3NpZmllci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMDQ0MmZiOWY1NWE4YTExZTExMjQ3NWY5Y2I4YzJjMGFkYmNiNTdhYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDEzIDE0OjA5OjIxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc191MzIuYyBiL25ldC9zY2hlZC9jbHNfdTMyLmNcbmluZGV4IDhmMzBjYzgyMTgxZDkuLjY5NDcwZDQ5ZWU5YjggMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvY2xzX3UzMi5jXG4rKysgYi9uZXQvc2NoZWQvY2xzX3UzMi5jXG5AQCAtODc1LDcgKzg3NSw3IEBAIHN0YXRpYyBpbnQgdTMyX2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsXG4gXHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4gXHRzdHJ1Y3QgdGNfdV9jb21tb24gKnRwX2MgPSB0cC1cdTAwM2VkYXRhO1xuLVx0c3RydWN0IHRjX3VfaG5vZGUgKmh0O1xuK1x0c3RydWN0IHRjX3VfaG5vZGUgKmh0LCAqaHRfZG93bjtcbiBcdHN0cnVjdCB0Y191X2tub2RlICpuO1xuIFx0c3RydWN0IHRjX3UzMl9zZWwgKnM7XG4gXHRzdHJ1Y3QgbmxhdHRyICpvcHQgPSB0Y2FbVENBX09QVElPTlNdO1xuQEAgLTkzNSwxNyArOTM1LDkgQEAgc3RhdGljIGludCB1MzJfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbiBcbiBcdFx0dTMyX2JpbmRfZmlsdGVyKHRwLCBuZXcsIGJhc2UsIHRiKTtcbiBcbi1cdFx0ZXJyID0gdTMyX3JlcGxhY2VfaHdfa25vZGUodHAsIG5ldywgZmxhZ3MsIGV4dGFjayk7XG4rXHRcdGVyciA9IHUzMl9yZXBsYWNlX2h3X2tub2RlKHRwLCBuZXcsIHVzZXJmbGFncywgZXh0YWNrKTtcbiBcdFx0aWYgKGVycikge1xuIFx0XHRcdHUzMl91bmJpbmRfZmlsdGVyKHRwLCBuZXcsIHRiKTtcbi1cbi1cdFx0XHRpZiAodGJbVENBX1UzMl9MSU5LXSkge1xuLVx0XHRcdFx0c3RydWN0IHRjX3VfaG5vZGUgKmh0X29sZDtcbi1cbi1cdFx0XHRcdGh0X29sZCA9IHJ0bmxfZGVyZWZlcmVuY2Uobi1cdTAwM2VodF9kb3duKTtcbi1cdFx0XHRcdGlmIChodF9vbGQpXG4tXHRcdFx0XHRcdHJlZmNvdW50X2luYyhcdTAwMjZodF9vbGQtXHUwMDNlcmVmY250KTtcbi1cdFx0XHR9XG4gXHRcdFx0X191MzJfZGVzdHJveV9rZXkobmV3KTtcbiBcdFx0XHRyZXR1cm4gZXJyO1xuIFx0XHR9XG5AQCAtMTE2MSw3ICsxMTUzLDcgQEAgc3RhdGljIGludCB1MzJfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbiBcdFx0c3RydWN0IHRjX3Vfa25vZGUgX19yY3UgKippbnM7XG4gXHRcdHN0cnVjdCB0Y191X2tub2RlICpwaW5zO1xuIFxuLVx0XHRlcnIgPSB1MzJfcmVwbGFjZV9od19rbm9kZSh0cCwgbiwgZmxhZ3MsIGV4dGFjayk7XG4rXHRcdGVyciA9IHUzMl9yZXBsYWNlX2h3X2tub2RlKHRwLCBuLCB1c2VyZmxhZ3MsIGV4dGFjayk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0Z290byBlcnJ1bmJpbmQ7XG4gXG5AQCAtMTE4NSw2ICsxMTc3LDkgQEAgc3RhdGljIGludCB1MzJfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbiBcbiBlcnJ1bmJpbmQ6XG4gXHR1MzJfdW5iaW5kX2ZpbHRlcih0cCwgbiwgdGIpO1xuK1x0aHRfZG93biA9IHJ0bmxfZGVyZWZlcmVuY2Uobi1cdTAwM2VodF9kb3duKTtcbitcdGlmIChodF9kb3duIFx1MDAyNlx1MDAyNiByZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2aHRfZG93bi1cdTAwM2VyZWZjbnQpKVxuK1x0XHRrZnJlZShodF9kb3duKTtcbiBcbiAjaWZkZWYgQ09ORklHX0NMU19VMzJfTUFSS1xuIFx0ZnJlZV9wZXJjcHUobi1cdTAwM2VwY3B1X3N1Y2Nlc3MpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTQ6MDk6MjIuNDcyMjQzNDIzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjA5MzAyMTMzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFUzMiBDbGFzc2lmaWVyIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXTigJlzIHRvdWNoaW5nIGBuZXQvc2NoZWQvY2xzX3UzMi5jYC4gU3BlY2lmaWNhbGx5LCBpdOKAmXMgbG9va2luZyBhdCBtb2RpZmljYXRpb25zIHdpdGhpbiB0aGUgYHUzMl9jaGFuZ2VgIGZ1bmN0aW9uLiBJbW1lZGlhdGVseSwgdGhpcyB0ZWxscyBtZSB3ZSdyZSBkZWFsaW5nIHdpdGggdGhlIHVzZXItc3BhY2UgaW50ZXJmYWNlIHRvIGNvbmZpZ3VyZSB0aGUgVTMyIGNsYXNzaWZpZXIsIHdoaWNoIGlzIHBhcnQgb2YgdGhlIHRyYWZmaWMgY29udHJvbCAodGMpIHN1YnN5c3RlbS4gYHUzMl9jaGFuZ2VgIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgbmV0bGluayBvcGVyYXRpb25zLlxuXG5UaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGFyb3VuZCBgdTMyX3JlcGxhY2VfaHdfa25vZGVgLiBJdCBsb29rcyBsaWtlIHRoZXJlIHdhcyBhIHN1YnRsZSBidWcgd2hlcmUgdGhlIHdyb25nIHNldCBvZiBmbGFncyAoYGZsYWdzYCBpbnN0ZWFkIG9mIGB1c2VyZmxhZ3NgKSB3ZXJlIGJlaW5nIHBhc3NlZCBpbnRvIHRoYXQgZnVuY3Rpb24uIFRoYXQncyBhIGNsYXNzaWMgZXhhbXBsZSBvZiBhIGJpdC1tYXNrIGlzc3VlIGFuZCBjb3VsZCBwb3RlbnRpYWxseSBsZWFkIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3IgaW4gaGFyZHdhcmUgb2ZmbG9hZCBzY2VuYXJpb3MsIGlmIHRoaXMgY2xhc3NpZmllciBpcyB1c2VkIG9uIGEgTklDIHdpdGggb2ZmbG9hZCBjYXBhYmlsaXRpZXMuXG5cbkJleW9uZCB0aGUgZmxhZ3MgZml4LCB0aGV5J3ZlIGFsc28gdHdlYWtlZCB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aHMgcmVsYXRlZCB0byBgdTMyX3JlcGxhY2VfaHdfa25vZGVgIGFuZCBgZXJydW5iaW5kYC4gVGhpcyBzdWdnZXN0cyB0aGV5J3ZlIGlkZW50aWZpZWQgc29tZSBlZGdlIGNhc2VzIG9yIGVycm9yIHNjZW5hcmlvcyB0aGF0IHdlcmVuJ3QgYmVpbmcgaGFuZGxlZCBjb3JyZWN0bHkgYmVmb3JlLCBvciBtYXliZSB0aGV5J3ZlIGZvdW5kIGEgYmV0dGVyIHdheSB0byByZXBvcnQgZXJyb3JzIGJhY2sgdG8gdGhlIHVzZXItc3BhY2UuIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgZGlmZnMgdG8gc2VlIHRoZSBleGFjdCBjaGFuZ2VzIHRoZXJlLCBidXQgdGhhdOKAmXMgZGVmaW5pdGVseSBhbiBhcmVhIHRvIHBheSBhdHRlbnRpb24gdG8uIFRpbWUgdG8gZmlyZSB1cCB0aGUgZWRpdG9yIGFuZCBleGFtaW5lIGBjbHNfdTMyLmNgIGluIGRldGFpbCFcbkkgc2hvdWxkIGRvdWJsZSBjaGVjayB0aGUgY29uZmlnIGZvciBgY2xzX3UzMi5jYCB0byBzZWUgaWYgaXQgbWFrZXMgc2Vuc2UgdG8gZW5hYmxlIG9yIGRpc2FibGUgaXQsIGRlcGVuZGluZyBvbiB0aGUga2VybmVsIGFuZCBoYXJkd2FyZSBzZXR1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU1MCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE0OjA5OjI4LjU2NTI2OTc1NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzU3MzA1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjbHNfdTMyLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvTWFrZWZpbGU9NjY9b2JqLSQoQ09ORklHX05FVF9TQ0hfRFVBTFBJMilcXHQrPSBzY2hfZHVhbHBpMi5vXFxubmV0L3NjaGVkL01ha2VmaWxlLTY3LVxcbm5ldC9zY2hlZC9NYWtlZmlsZTo2ODpvYmotJChDT05GSUdfTkVUX0NMU19VMzIpXFx0Kz0gY2xzX3UzMi5vXFxubmV0L3NjaGVkL01ha2VmaWxlLTY5LW9iai0kKENPTkZJR19ORVRfQ0xTX1JPVVRFNClcXHQrPSBjbHNfcm91dGUub1xcbi0tXFxubmV0L3NjaGVkL2Nsc191MzIuYz00ODg9c3RhdGljIHZvaWQgdTMyX2NsZWFyX2h3X2hub2RlKHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCBzdHJ1Y3QgdGNfdV9obm9kZSAqaCxcXG4tLVxcbm5ldC9zY2hlZC9jbHNfdTMyLmMtNDkxLVxcdHN0cnVjdCB0Y2ZfYmxvY2sgKmJsb2NrID0gdHAtXFx1MDAzZWNoYWluLVxcdTAwM2VibG9jaztcXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjQ5MjpcXHRzdHJ1Y3QgdGNfY2xzX3UzMl9vZmZsb2FkIGNsc191MzIgPSB7fTtcXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTQ5My1cXG4tLVxcbm5ldC9zY2hlZC9jbHNfdTMyLmM9NTAzPXN0YXRpYyBpbnQgdTMyX3JlcGxhY2VfaHdfaG5vZGUoc3RydWN0IHRjZl9wcm90byAqdHAsIHN0cnVjdCB0Y191X2hub2RlICpoLFxcbi0tXFxubmV0L3NjaGVkL2Nsc191MzIuYy01MDYtXFx0c3RydWN0IHRjZl9ibG9jayAqYmxvY2sgPSB0cC1cXHUwMDNlY2hhaW4tXFx1MDAzZWJsb2NrO1xcbm5ldC9zY2hlZC9jbHNfdTMyLmM6NTA3OlxcdHN0cnVjdCB0Y19jbHNfdTMyX29mZmxvYWQgY2xzX3UzMiA9IHt9O1xcbm5ldC9zY2hlZC9jbHNfdTMyLmMtNTA4LVxcdGJvb2wgc2tpcF9zdyA9IHRjX3NraXBfc3coZmxhZ3MpO1xcbi0tXFxubmV0L3NjaGVkL2Nsc191MzIuYz01MzI9c3RhdGljIHZvaWQgdTMyX3JlbW92ZV9od19rbm9kZShzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgc3RydWN0IHRjX3Vfa25vZGUgKm4sXFxuLS1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTUzNS1cXHRzdHJ1Y3QgdGNmX2Jsb2NrICpibG9jayA9IHRwLVxcdTAwM2VjaGFpbi1cXHUwMDNlYmxvY2s7XFxubmV0L3NjaGVkL2Nsc191MzIuYzo1MzY6XFx0c3RydWN0IHRjX2Nsc191MzJfb2ZmbG9hZCBjbHNfdTMyID0ge307XFxubmV0L3NjaGVkL2Nsc191MzIuYy01MzctXFxuLS1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jPTU0Nj1zdGF0aWMgaW50IHUzMl9yZXBsYWNlX2h3X2tub2RlKHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCBzdHJ1Y3QgdGNfdV9rbm9kZSAqbixcXG4tLVxcbm5ldC9zY2hlZC9jbHNfdTMyLmMtNTUwLVxcdHN0cnVjdCB0Y2ZfYmxvY2sgKmJsb2NrID0gdHAtXFx1MDAzZWNoYWluLVxcdTAwM2VibG9jaztcXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjU1MTpcXHRzdHJ1Y3QgdGNfY2xzX3UzMl9vZmZsb2FkIGNsc191MzIgPSB7fTtcXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTU1Mi1cXHRib29sIHNraXBfc3cgPSB0Y19za2lwX3N3KGZsYWdzKTtcXG4tLVxcbm5ldC9zY2hlZC9jbHNfdTMyLmM9MTIzMT1zdGF0aWMgaW50IHUzMl9yZW9mZmxvYWRfaG5vZGUoc3RydWN0IHRjZl9wcm90byAqdHAsIHN0cnVjdCB0Y191X2hub2RlICpodCxcXG4tLVxcbm5ldC9zY2hlZC9jbHNfdTMyLmMtMTIzNC17XFxubmV0L3NjaGVkL2Nsc191MzIuYzoxMjM1OlxcdHN0cnVjdCB0Y19jbHNfdTMyX29mZmxvYWQgY2xzX3UzMiA9IHt9O1xcbm5ldC9zY2hlZC9jbHNfdTMyLmMtMTIzNi1cXHRpbnQgZXJyO1xcbi0tXFxubmV0L3NjaGVkL2Nsc191MzIuYz0xMjUxPXN0YXRpYyBpbnQgdTMyX3Jlb2ZmbG9hZF9rbm9kZShzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgc3RydWN0IHRjX3Vfa25vZGUgKm4sXFxuLS1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTEyNTYtXFx0c3RydWN0IHRjZl9ibG9jayAqYmxvY2sgPSB0cC1cXHUwMDNlY2hhaW4tXFx1MDAzZWJsb2NrO1xcbm5ldC9zY2hlZC9jbHNfdTMyLmM6MTI1NzpcXHRzdHJ1Y3QgdGNfY2xzX3UzMl9vZmZsb2FkIGNsc191MzIgPSB7fTtcXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTEyNTgtXFxuLS1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jPTEzNDA9c3RhdGljIGludCB1MzJfZHVtcChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCB2b2lkICpmaCxcXG4tLVxcbm5ldC9zY2hlZC9jbHNfdTMyLmMtMTQ1Mi1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjE0NTM6c3RhdGljIHN0cnVjdCB0Y2ZfcHJvdG9fb3BzIGNsc191MzJfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XFxubmV0L3NjaGVkL2Nsc191MzIuYy0xNDU0LVxcdC5raW5kXFx0XFx0PVxcdFxcXCJ1MzJcXFwiLFxcbi0tXFxubmV0L3NjaGVkL2Nsc191MzIuYz0xNDY5PXN0YXRpYyBpbnQgX19pbml0IGluaXRfdTMyKHZvaWQpXFxuLS1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTE0ODctXFxubmV0L3NjaGVkL2Nsc191MzIuYzoxNDg4OlxcdHJldCA9IHJlZ2lzdGVyX3RjZl9wcm90b19vcHMoXFx1MDAyNmNsc191MzJfb3BzKTtcXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTE0ODktXFx0aWYgKHJldClcXG4tLVxcbm5ldC9zY2hlZC9jbHNfdTMyLmM9MTQ5ND1zdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF91MzIodm9pZClcXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTE0OTUte1xcbm5ldC9zY2hlZC9jbHNfdTMyLmM6MTQ5NjpcXHR1bnJlZ2lzdGVyX3RjZl9wcm90b19vcHMoXFx1MDAyNmNsc191MzJfb3BzKTtcXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTE0OTctXFx0a3ZmcmVlKHRjX3VfY29tbW9uX2hhc2gpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNDowOToyOC42MTg4NTA0ODRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDk3MjM0MzAyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgYHUzMl9jaGFuZ2VgIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0J3MgZm9jdXNlZCBvbiB0aGUgYHUzMl9jaGFuZ2VgIGZ1bmN0aW9uIHdpdGhpbiB0aGUgYG5ldC9zY2hlZC9jbHNfdTMyLmNgIGZpbGUuIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgb2YgdGhlIG1vZGlmaWNhdGlvbiByZXZvbHZlcyBhcm91bmQgYHUzMl9yZXBsYWNlX2h3X2tub2RlYC4gVGhlIGNvZGUncyBjaGFuZ2luZyB0aGUgYXJndW1lbnRzIHBhc3NlZCB0byB0aGF0IGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgZnJvbSBgZmxhZ3NgIHRvIGB1c2VyZmxhZ3NgIGluIGEgY291cGxlIG9mIGtleSBpbnN0YW5jZXMg4oCTIGJvdGggZm9yIGB0cGAgYW5kIGBuYC4gVGhhdCB0ZWxscyBtZSB0aGUgaW50ZW50aW9uIGlzIHByb2JhYmx5IHRvIGRpZmZlcmVudGlhdGUgYmV0d2VlbiBpbnRlcm5hbCwgc3lzdGVtLWxldmVsIGZsYWdzIGFuZCBmbGFncyBwcm92aWRlZCBieSB0aGUgdXNlciwgd2hpY2ggaXMgYSBjb21tb24gYW5kIGltcG9ydGFudCBkaXN0aW5jdGlvbiBpbiB0aGVzZSBzb3J0cyBvZiBzdWJzeXN0ZW1zLlxuXG5CZXlvbmQgdGhhdCwgdGhlIGVycm9yIGhhbmRsaW5nIHBhdGgsIGBlcnJ1bmJpbmQ6YCwgaXMgYmVpbmcgcmV3b3JrZWQuIFRoZSBjdXJyZW50IHBhdGNoIGFwcGVhcnMgdG8gYmUgY29ycmVjdGluZyB0aGUgcmVmY291bnRpbmcgb2YgYGh0X2Rvd25gIGluIHRoZSBldmVudCBvZiBhbiBlcnJvci4gSW5zdGVhZCBvZiB0aGUgZXhpc3RpbmcgbG9naWMgYmVpbmcgdHVja2VkIHdpdGhpbiB0aGUgYGlmIChlcnIpYCBibG9jaywgdGhlIHBhdGNoIG1vdmVzIHRoZSBkZWNyZW1lbnQgYW5kIGZyZWUgb3BlcmF0aW9ucyBvdXRzaWRlLiBUaGF0J3MgYSBnb29kIG1vdmUg4oCTIGl0IG1ha2VzIHRoZSBlcnJvciBoYW5kbGluZyBjbGVhbmVyIGFuZCBlbnN1cmVzIHRoYXQgcmVzb3VyY2VzIGFyZSBjb25zaXN0ZW50bHkgY2xlYW5lZCB1cCwgcmVnYXJkbGVzcyBvZiBob3cgdGhlIGVycm9yIG9jY3Vycy4gUHJldmVudHMgcmVzb3VyY2UgbGVha3MsIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCBJJ20gbG9va2luZyBmb3IgaW4gdHJhZmZpYyBjb250cm9sLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgcmVmaW5lbWVudCwgYW5kIGFuIGltcG9ydGFudCBvbmUuXG5cbkxldCdzIHF1aWNrbHkgdmVyaWZ5IHRoaXMuIENoZWNraW5nIHRoZSBjb25maWc6IGBDT05GSUdfTkVUX0NMU19VMzJgLiBHb29kLiBPa2F5LCBsZXQgbWUgbWFrZSBzdXJlIHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgY2FsbGVkLiBBaCwgYHUzMl9jaGFuZ2VgIGlzIHBhcnQgb2YgdGhlIGBjbHNfdTMyX29wc2AsIHRoYXTigJlzIGl0cyBgLmNoYW5nZWAgY2FsbGJhY2suIFNvLCB5ZXMsIGl0J3MgZGVmaW5pdGVseSByZWFjaGFibGUuIExvb2tzIGxpa2UgdGhlIHBhdGNoIGF1dGhvciBoYXMgZG9uZSB0aGVpciBkdWUgZGlsaWdlbmNlLiBUaGlzIGFsbCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGFuZCBzZW5zaWJsZSwgdGhlIGNoYW5nZSBhcHBlYXJzIHNvdW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjY0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE0OjA5OjQzLjU5MTIwNDUxNloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDUyMDAwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX0NMU19VMzJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvS2NvbmZpZz01MDY9Y29uZmlnIE5FVF9DTFNfRldcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnLTUxNS1cXG5uZXQvc2NoZWQvS2NvbmZpZzo1MTY6Y29uZmlnIE5FVF9DTFNfVTMyXFxubmV0L3NjaGVkL0tjb25maWctNTE3LVxcdHRyaXN0YXRlIFxcXCJVbml2ZXJzYWwgMzJiaXQgY29tcGFyaXNvbnMgdy8gaGFzaGluZyAoVTMyKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTQ6MDk6NDMuNjM1NzMxMDU0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjE0MTU4MDY3OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjo0Nzc0LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNDoxMDowNS4wNTE1NDA1OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTk1OTk2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1MzJfY2hhbmdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL2Nsc191MzIuYz04MjE9c3RhdGljIHN0cnVjdCB0Y191X2tub2RlICp1MzJfaW5pdF9rbm9kZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLFxcbi0tXFxubmV0L3NjaGVkL2Nsc191MzIuYy04NzEtXFxubmV0L3NjaGVkL2Nsc191MzIuYzo4NzI6c3RhdGljIGludCB1MzJfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTg3My1cXHRcXHQgICAgICBzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgdW5zaWduZWQgbG9uZyBiYXNlLCB1MzIgaGFuZGxlLFxcbi0tXFxubmV0L3NjaGVkL2Nsc191MzIuYz0xNDUzPXN0YXRpYyBzdHJ1Y3QgdGNmX3Byb3RvX29wcyBjbHNfdTMyX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xcbi0tXFxubmV0L3NjaGVkL2Nsc191MzIuYy0xNDU4LVxcdC5nZXRcXHRcXHQ9XFx0dTMyX2dldCxcXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjE0NTk6XFx0LmNoYW5nZVxcdFxcdD1cXHR1MzJfY2hhbmdlLFxcbm5ldC9zY2hlZC9jbHNfdTMyLmMtMTQ2MC1cXHQuZGVsZXRlXFx0XFx0PVxcdHUzMl9kZWxldGUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE0OjEwOjA1LjEwMTUwNTY4OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE3MDU5ODA3NDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFUzMiBDbGFzc2lmaWVyIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gYG5ldC9zY2hlZC9jbHNfdTMyLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGB1MzJfY2hhbmdlYCBmdW5jdGlvbi4gSW1tZWRpYXRlbHksIG15IGV4cGVydCBicmFpbiBmbGFncyB0aGlzIGFzIGEgcG90ZW50aWFsbHkgc2lnbmlmaWNhbnQgYXJlYSBiZWNhdXNlIGB1MzJfY2hhbmdlYCBpcyB0aGUgYC5jaGFuZ2VgIG9wZXJhdGlvbiBmb3IgdGhlIGB1MzJgIGNsYXNzaWZpZXIgd2l0aGluIHRoZSBgdGNgIHN1YnN5c3RlbS4gVGhhdCdzIGEgY29yZSBmdW5jdGlvbiwgYW5kIEkga25vdyB0aGF0IG1lYW5zIHVzZXJzcGFjZSBjYW4gZGVmaW5pdGVseSByZWFjaCBpdCwgcHJvYmFibHkgdGhyb3VnaCBuZXRsaW5rIGNhbGxzIHVzaW5nIGB0YyBmaWx0ZXIgYWRkIC4uLiB1MzIgLi4uYCBjb21tYW5kcy5cblxuSXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIHJlZmVyZW5jZSBjb3VudGluZyBpc3N1ZSDigJMgbGlrZWx5IGEgbWVtb3J5IGxlYWsg4oCTIHRoYXQgaGFwcGVucyB3aGVuIGB1MzJfcmVwbGFjZV9od19rbm9kZWAgZmFpbHMuIEkgc2VlIHRoZSBrZXkgZml4IGlzIHJlbW92aW5nIGFuIGByZWZjb3VudF9pbmNgIGNhbGwgaW4gdGhlIGVycm9yIHBhdGggZm9yIGEgbmV3IGtub2RlIGFuZCBhZGRpbmcgc29tZSBjbGVhbnVwIHdpdGggYHJlZmNvdW50X2RlY19hbmRfdGVzdGAgYW5kIGBrZnJlZWAgaW4gdGhlIGBlcnJ1bmJpbmRgIGxhYmVsLiBUaGF0IHNvdW5kcyBzb2xpZC4gVGhlcmUncyBhbHNvIGEgc3VidGxlIGNoYW5nZSBpbiB0aGUgY2FsbCB0byBgdTMyX3JlcGxhY2VfaHdfa25vZGVgLCBzd2l0Y2hpbmcgYGZsYWdzYCB0byBgdXNlcmZsYWdzYCwgd2hpY2ggaXMgbGVzcyBjcml0aWNhbCwgYnV0IHN0aWxsIHdvcnRoIG5vdGluZy5cblxuVGhpcyBsb29rcyBsaWtlIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBrZXJuZWwgbmV0d29ya2luZywgYW5kIGEgbWVtb3J5IGxlYWsgZml4IGlzIGFsd2F5cyBpbXBvcnRhbnQuIEdpdmVuIGl0J3MgZGlyZWN0bHkgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSwgdGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyBJJ2QgZmxhZyBmb3IgZnV6emluZy4gV2UgbmVlZCB0byBwcm9iZSB0aGUgZXJyb3IgcGF0aHMgcGFydGljdWxhcmx5IHdlbGwuXG5cbk15IGZvY3VzIHNob3VsZCBiZSBvbiBgdTMyX2NoYW5nZWAsIGFuZCwgb2YgY291cnNlLCB0aGUgYE5FVF9DTFNfVTMyYCBjb25maWcgaXMgdGhlIG9uZSB0byBjYXJlIGFib3V0LiBJIHNob3VsZCBwcm9iYWJseSBhbHNvIGNoZWNrIHRoZSBLY29uZmlnIGRlcGVuZGVuY2llcyB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byBjb25zaWRlciBmb3IgZW5hYmxpbmcgaXQsIGJ1dCBgTkVUX1NDSEVEYCBpcyBzdGFuZGFyZCwgc28gdGhhdCBzaG91bGRuJ3QgYmUgYSBwcm9ibGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDkxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE0OjEwOjIyLjE2MTMxNTIwN1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTczMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNTEwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTEwOlxcdFxcdCAgSWYgeW91IHNheSBZIGhlcmUsIHlvdSB3aWxsIGJlIGFibGUgdG8gY2xhc3NpZnkgcGFja2V0c1xcbiA1MTE6XFx0XFx0ICBhY2NvcmRpbmcgdG8gbmV0ZmlsdGVyL2ZpcmV3YWxsIG1hcmtzLlxcbiA1MTI6XFx0XFxuIDUxMzpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gNTE0OlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNsc19mdy5cXG4gNTE1OlxcdFxcbiA1MTY6XFx0Y29uZmlnIE5FVF9DTFNfVTMyXFxuIDUxNzpcXHRcXHR0cmlzdGF0ZSBcXFwiVW5pdmVyc2FsIDMyYml0IGNvbXBhcmlzb25zIHcvIGhhc2hpbmcgKFUzMilcXFwiXFxuIDUxODpcXHRcXHRzZWxlY3QgTkVUX0NMU1xcbiA1MTk6XFx0XFx0aGVscFxcbiA1MjA6XFx0XFx0ICBTYXkgWSBoZXJlIHRvIGJlIGFibGUgdG8gY2xhc3NpZnkgcGFja2V0cyB1c2luZyBhIHVuaXZlcnNhbFxcbiA1MjE6XFx0XFx0ICAzMmJpdCBwaWVjZXMgYmFzZWQgY29tcGFyaXNvbiBzY2hlbWUuXFxuIDUyMjpcXHRcXG4gNTIzOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiA1MjQ6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY2xzX3UzMi5cXG4gNTI1OlxcdFxcbiA1MjY6XFx0Y29uZmlnIENMU19VMzJfUEVSRlxcbiA1Mjc6XFx0XFx0Ym9vbCBcXFwiUGVyZm9ybWFuY2UgY291bnRlcnMgc3VwcG9ydFxcXCJcXG4gNTI4OlxcdFxcdGRlcGVuZHMgb24gTkVUX0NMU19VMzJcXG4gNTI5OlxcdFxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTQ6MTA6MjIuMTYxNDM1NDg3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2Njc2ODEyODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgVTMyIENsYXNzaWZpZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBhZnRlciByZXZpZXdpbmcgdGhpcyBwYXRjaCwgSSd2ZSBkZXRlcm1pbmVkIHRoYXQgYE5FVF9DTFNfVTMyYCBpcyBpbmRlZWQgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uIG9wdGlvbiBmb3IgaXQgdG8gZnVuY3Rpb24gY29ycmVjdGx5IOKAkyBnb29kLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIGFkZHJlc3NlcyBhIGJ1ZyB3aXRoaW4gYHUzMl9jaGFuZ2VgLCBzcGVjaWZpY2FsbHkgdGhlIGVudHJ5IHBvaW50IGZvciBjb25maWd1cmluZyBgdTMyYCBmaWx0ZXJzLiBDb25zaWRlcmluZyB0aGUgbmF0dXJlIG9mIHRoZSBmaXgg4oCTIGl0J3MgZGVhbGluZyB3aXRoIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgYSBmbGFnIHBhc3NpbmcgaXNzdWUg4oCTIGFuZCB0aGUgZmFjdCB0aGF0IGB1MzJfY2hhbmdlYCBpcyBhIGZ1bmRhbWVudGFsIGZ1bmN0aW9uIHdpdGhpbiBhIHJlYWNoYWJsZSBhcmVhIG9mIHRoZSBjb3JlIG5ldHdvcmtpbmcgY29kZSwgdGhpcyBkZWZpbml0ZWx5IHdhcnJhbnRzIHNvbWUgZnV6emluZy4gSSdtIGdvaW5nIHRvIHNldCBgV29ydGhGdXp6aW5nPXRydWVgLiBNeSBtYWluIGZvY3VzIHdpbGwgYmUgb24gdGhlIGB1MzJfY2hhbmdlYCBmdW5jdGlvbiBpdHNlbGYsIGFzIHRoYXQncyB3aGVyZSB0aGUgaWRlbnRpZmllZCBidWdzIHJlc2lkZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjU1NiwiT3V0cHV0VG9rZW5zIjo4OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE0OjEwOjI3LjgyOTEyMTg0NFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwODkxODkxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX0NMU19VMzJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1MzJfY2hhbmdlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByZWZlcmVuY2UgY291bnRpbmcgaXNzdWUgYW5kIGEgZmxhZyBwYXNzaW5nIGJ1ZyBpbiB0aGUgYHUzMl9jaGFuZ2VgIGZ1bmN0aW9uIG9mIHRoZSB1MzIgdHJhZmZpYyBjbGFzc2lmaWVyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9DTFNfVTMyXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidTMyX2NoYW5nZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcmVmZXJlbmNlIGNvdW50aW5nIGlzc3VlIGFuZCBhIGZsYWcgcGFzc2luZyBidWcgaW4gdGhlIGB1MzJfY2hhbmdlYCBmdW5jdGlvbiBvZiB0aGUgdTMyIHRyYWZmaWMgY2xhc3NpZmllci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTQ6MTA6MjguMDM4MDUwODc4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODM2ODI5MTYxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE0OjEwOjI4LjAzODk3NDIwOFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoyODM2NzM2MjY0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgdHdvIGlzc3VlcyBpbiB0aGUgdTMyIHBhY2tldCBjbGFzc2lmaWVyOiBhIHR5cG8gd2hlcmUgbmV0bGluayBtZXNzYWdlIGZsYWdzIHdlcmUgcGFzc2VkIGluc3RlYWQgb2YgdXNlci1zcGVjaWZpZWQgVENBX1UzMl9GTEFHUyB0byBgdTMyX3JlcGxhY2VfaHdfa25vZGVgLCBhbmQgYSByZWZlcmVuY2UgY291bnRpbmcgYnVnIG9uIHRoZSBgaHRfZG93bmAgbm9kZSBkdXJpbmcgZXJyb3IgaGFuZGxpbmcuIEJvdGggYGZsYWdzYCBhbmQgYHVzZXJmbGFnc2AgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGludGVnZXJzLiBUaGUgcmVmZXJlbmNlIGNvdW50aW5nIGZpeCBwcmV2ZW50cyBhIG1lbW9yeSBsZWFrIG9yIHVzZS1hZnRlci1mcmVlLCB3aGljaCBhcmUgZGV0ZWN0YWJsZSBieSBrbWVtbGVhayBhbmQgS0FTQU4gcmVzcGVjdGl2ZWx5LiBUaGVyZSBpcyBubyBpbnRyb2R1Y3Rpb24gb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIHN0cnVjdHVyZSBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDA0NDJmYjlmNTVhOGExMWUxMTI0NzVmOWNiOGMyYzBhZGJjYjU3YWJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAxNDowOToyMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfdTMyLmMgYi9uZXQvc2NoZWQvY2xzX3UzMi5jXG5pbmRleCA4ZjMwY2M4MjE4MWQ5Li42OTQ3MGQ0OWVlOWI4IDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL2Nsc191MzIuY1xuKysrIGIvbmV0L3NjaGVkL2Nsc191MzIuY1xuQEAgLTg3NSw3ICs4NzUsNyBAQCBzdGF0aWMgaW50IHUzMl9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxuIFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4ge1xuIFx0c3RydWN0IHRjX3VfY29tbW9uICp0cF9jID0gdHAtXHUwMDNlZGF0YTtcbi1cdHN0cnVjdCB0Y191X2hub2RlICpodDtcbitcdHN0cnVjdCB0Y191X2hub2RlICpodCwgKmh0X2Rvd247XG4gXHRzdHJ1Y3QgdGNfdV9rbm9kZSAqbjtcbiBcdHN0cnVjdCB0Y191MzJfc2VsICpzO1xuIFx0c3RydWN0IG5sYXR0ciAqb3B0ID0gdGNhW1RDQV9PUFRJT05TXTtcbkBAIC05MzUsMTcgKzkzNSw5IEBAIHN0YXRpYyBpbnQgdTMyX2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsXG4gXG4gXHRcdHUzMl9iaW5kX2ZpbHRlcih0cCwgbmV3LCBiYXNlLCB0Yik7XG4gXG4tXHRcdGVyciA9IHUzMl9yZXBsYWNlX2h3X2tub2RlKHRwLCBuZXcsIGZsYWdzLCBleHRhY2spO1xuK1x0XHRlcnIgPSB1MzJfcmVwbGFjZV9od19rbm9kZSh0cCwgbmV3LCB1c2VyZmxhZ3MsIGV4dGFjayk7XG4gXHRcdGlmIChlcnIpIHtcbiBcdFx0XHR1MzJfdW5iaW5kX2ZpbHRlcih0cCwgbmV3LCB0Yik7XG4tXG4tXHRcdFx0aWYgKHRiW1RDQV9VMzJfTElOS10pIHtcbi1cdFx0XHRcdHN0cnVjdCB0Y191X2hub2RlICpodF9vbGQ7XG4tXG4tXHRcdFx0XHRodF9vbGQgPSBydG5sX2RlcmVmZXJlbmNlKG4tXHUwMDNlaHRfZG93bik7XG4tXHRcdFx0XHRpZiAoaHRfb2xkKVxuLVx0XHRcdFx0XHRyZWZjb3VudF9pbmMoXHUwMDI2aHRfb2xkLVx1MDAzZXJlZmNudCk7XG4tXHRcdFx0fVxuIFx0XHRcdF9fdTMyX2Rlc3Ryb3lfa2V5KG5ldyk7XG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0fVxuQEAgLTExNjEsNyArMTE1Myw3IEBAIHN0YXRpYyBpbnQgdTMyX2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsXG4gXHRcdHN0cnVjdCB0Y191X2tub2RlIF9fcmN1ICoqaW5zO1xuIFx0XHRzdHJ1Y3QgdGNfdV9rbm9kZSAqcGlucztcbiBcbi1cdFx0ZXJyID0gdTMyX3JlcGxhY2VfaHdfa25vZGUodHAsIG4sIGZsYWdzLCBleHRhY2spO1xuK1x0XHRlcnIgPSB1MzJfcmVwbGFjZV9od19rbm9kZSh0cCwgbiwgdXNlcmZsYWdzLCBleHRhY2spO1xuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdGdvdG8gZXJydW5iaW5kO1xuIFxuQEAgLTExODUsNiArMTE3Nyw5IEBAIHN0YXRpYyBpbnQgdTMyX2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsXG4gXG4gZXJydW5iaW5kOlxuIFx0dTMyX3VuYmluZF9maWx0ZXIodHAsIG4sIHRiKTtcbitcdGh0X2Rvd24gPSBydG5sX2RlcmVmZXJlbmNlKG4tXHUwMDNlaHRfZG93bik7XG4rXHRpZiAoaHRfZG93biBcdTAwMjZcdTAwMjYgcmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNmh0X2Rvd24tXHUwMDNlcmVmY250KSlcbitcdFx0a2ZyZWUoaHRfZG93bik7XG4gXG4gI2lmZGVmIENPTkZJR19DTFNfVTMyX01BUktcbiBcdGZyZWVfcGVyY3B1KG4tXHUwMDNlcGNwdV9zdWNjZXNzKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE0OjEwOjI4LjAzODk3NzYxOFoiLCJTZXEiOjE1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTEwNjU3MDc2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQYXRjaCBpbiBgbmV0L3NjaGVkL2Nsc191MzIuY2AqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L3NjaGVkL2Nsc191MzIuY2AuIFRoZSBjb3JlIGNoYW5nZSBpcyBpbiB0aGUgYHUzMl9jaGFuZ2VgIGZ1bmN0aW9uLiBJdCBsb29rcyBsaWtlIHdlJ3JlIHJlcGxhY2luZyBjYWxscyB0byBgdTMyX3JlcGxhY2VfaHdfa25vZGUodHAsIG5ldywgZmxhZ3MsIGV4dGFjaylgIHdpdGggYHUzMl9yZXBsYWNlX2h3X2tub2RlKHRwLCBuZXcsIHVzZXJmbGFncywgZXh0YWNrKWAuIEltbWVkaWF0ZWx5LCB0aGF0IHRyaWdnZXJzIHNvbWUgdGhvdWdodHMuICBJdCBzbWVsbHMgbGlrZSBhIHR5cG8gZml4LCBvciBwb3NzaWJseSBhbiBpbml0aWFsaXphdGlvbiBpc3N1ZS4gSXQgc2VlbXMgbGlrZSB0aGUgY29kZSB3YXMgdHJ5aW5nIHRvIHBhc3MgYHVzZXJmbGFnc2AgYnV0IHdhcyBhY2NpZGVudGFsbHkgcGFzc2luZyBgZmxhZ3NgIGluc3RlYWQuIEEgcXVpY2sgc2FuaXR5IGNoZWNrIG9mIHRoZSBjb2RlIGluZGljYXRlcyBgdXNlcmZsYWdzYCBpcyBkZXJpdmVkIGZyb20gdGhlIHVzZXIgaW5wdXQgYW5kIGNvdWxkIGJlIGRpZmZlcmVudCBmcm9tIHNvbWUgbG9jYWxseSBzZXQgYGZsYWdzYCB2YXJpYWJsZS5cblxuRnVydGhlcm1vcmUsIHRoZXJlJ3MgYSBtb2RpZmljYXRpb24gdG8gdGhlIGVycm9yIGhhbmRsaW5nIHdpdGhpbiB0aGlzIGZ1bmN0aW9uLiBUaGUgb3JpZ2luYWwgY29kZSBoYWQgYSBtb3JlIGludm9sdmVkIGNsZWFudXAgd2hlbiB0aGVyZSB3YXMgYSBmYWlsdXJlIHRvIHJlcGxhY2UgdGhlIGhhcmR3YXJlIGtub2RlLiBJdCBsb29rcyBsaWtlIGl0IHdhcyBhdHRlbXB0aW5nIHRvIGhhbmRsZSBhIHNpdHVhdGlvbiBpbnZvbHZpbmcgYFRDQV9VMzJfTElOS2AgYW5kIGEgYGh0X29sZGAgcG9pbnRlciB3aXRoaW4gdGhlIGBpZiAodGJbVENBX1UzMl9MSU5LXSlgIGJsb2NrLiBUaGUgY2hhbmdlIHNpbXBsaWZpZXMgdGhpcy4gVGhlIG1vcmUgY29tcGxleCBsb2dpYyBhcHBlYXJzIHRvIGJlIGVudGlyZWx5IHJlbW92ZWQuIFRoaXMgc2ltcGxpZmllZCBibG9jayBpcyBhbHNvIHJlZmxlY3RlZCBpbiBgZXJydW5iaW5kYCwgYW5kIGl0IGxvb2tzIGxpa2UgYSByZWZjb3VudCBmaXggb2YgdGhlIGBodF9kb3duYCBhbmQgYXNzb2NpYXRlZCBgcmVmY250YC5cblxuR2l2ZW4gdGhlIHN1cnJvdW5kaW5nIGNoYW5nZXMsIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgYGZsYWdzYCB0byBgdXNlcmZsYWdzYCBjaGFuZ2UgYW5kIHRoZSBjbGVhbnVwLCBJJ20gbGVhbmluZyB0b3dhcmRzIHRoZSBjb25jbHVzaW9uIHRoYXQgdGhpcyBpcyBhIGZpeCBmb3IgYSByZWZlcmVuY2UgY291bnRpbmcgYnVnLiBQZXJoYXBzIGEgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8gb3IgYSBwb3RlbnRpYWwgbWVtb3J5IGxlYWsgcmVsYXRlZCB0byB0aGUgYGh0X2Rvd25gIHBvaW50ZXIgYW5kIGl0cyBhc3NvY2lhdGVkIHJlZmVyZW5jZSBjb3VudC4gVGhlIG9yaWdpbmFsIGNvZGUgbWlnaHQgaGF2ZSBiZWVuIGluY3JlbWVudGluZyB0aGUgcmVmZXJlbmNlIGNvdW50IGluIG9uZSBwbGFjZSBidXQgbm90IGRlY3JlbWVudGluZyBpdCBjb3JyZWN0bHkgaW4gYWxsIGZhaWx1cmUgcGF0aHMsIG9yIGluIHRoZSBjb3JyZWN0IHBsYWNlLiBOb3csIGl0IGxvb2tzIGxpa2UgaXQncyBkZWNyZW1lbnRpbmcgdGhlIHJlZmNvdW50IGluIGBlcnJ1bmJpbmRgIGlmIHRoZSBgaHRfZG93bmAgcmVmY291bnQgaXMgbm9uLXplcm8sIHRoZW4gY2FsbGluZyBga2ZyZWVgIGlmIGl0J3MgMCBhZnRlciB0aGUgZGVjcmVtZW50LlxuXG5UbyBiZSBzdXJlLCBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IGBmbGFnc2AgYW5kIGB1c2VyZmxhZ3NgIHJlcHJlc2VudCBpbiB0aGlzIGNvbnRleHQuIEFuZCBhbHNvIHZlcmlmeSB0aGUgY29kZSdzIGludGVuZGVkIGJlaGF2aW91ciBhbmQgaG93IHRoaXMgY2hhbmdlIGltcGFjdHMgaXQuIFRoaXMgcGF0Y2ggc2VlbXMgdG8gYmUgYWRkcmVzc2luZyBhIHBvdGVudGlhbCBjb3JyZWN0bmVzcyBpc3N1ZSwgdGhvdWdoLCBzbyBpdCBtZXJpdHMgY2FyZWZ1bCByZXZpZXcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NDcsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNDoxMDozOS4xNDU1NTE1NjhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTMzODM1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1c2VyZmxhZ3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL2Nsc191MzIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvY2xzX3UzMi5jPTg3Mj1zdGF0aWMgaW50IHUzMl9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxcbi0tXFxubmV0L3NjaGVkL2Nsc191MzIuYy04ODItXFx0c3RydWN0IG5sYXR0ciAqdGJbVENBX1UzMl9NQVggKyAxXTtcXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjg4MzpcXHR1MzIgaHRpZCwgdXNlcmZsYWdzID0gMDtcXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTg4NC1cXHRzaXplX3Qgc2VsX3NpemU7XFxuLS1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTkwMS1cXHRpZiAodGJbVENBX1UzMl9GTEFHU10pIHtcXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjkwMjpcXHRcXHR1c2VyZmxhZ3MgPSBubGFfZ2V0X3UzMih0YltUQ0FfVTMyX0ZMQUdTXSk7XFxubmV0L3NjaGVkL2Nsc191MzIuYzo5MDM6XFx0XFx0aWYgKCF0Y19mbGFnc192YWxpZCh1c2VyZmxhZ3MpKSB7XFxubmV0L3NjaGVkL2Nsc191MzIuYy05MDQtXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXFxcIkludmFsaWQgZmlsdGVyIGZsYWdzXFxcIik7XFxuLS1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTkxNy1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjkxODpcXHRcXHRpZiAoKG4tXFx1MDAzZWZsYWdzIF4gdXNlcmZsYWdzKSBcXHUwMDI2XFxubmV0L3NjaGVkL2Nsc191MzIuYy05MTktXFx0XFx0ICAgIH4oVENBX0NMU19GTEFHU19JTl9IVyB8IFRDQV9DTFNfRkxBR1NfTk9UX0lOX0hXKSkge1xcbi0tXFxubmV0L3NjaGVkL2Nsc191MzIuYy05MzctXFxubmV0L3NjaGVkL2Nsc191MzIuYzo5Mzg6XFx0XFx0ZXJyID0gdTMyX3JlcGxhY2VfaHdfa25vZGUodHAsIG5ldywgdXNlcmZsYWdzLCBleHRhY2spO1xcbm5ldC9zY2hlZC9jbHNfdTMyLmMtOTM5LVxcdFxcdGlmIChlcnIpIHtcXG4tLVxcbm5ldC9zY2hlZC9jbHNfdTMyLmMtOTkzLVxcdFxcdGlkcl9pbml0KFxcdTAwMjZodC1cXHUwMDNlaGFuZGxlX2lkcik7XFxubmV0L3NjaGVkL2Nsc191MzIuYzo5OTQ6XFx0XFx0aHQtXFx1MDAzZWZsYWdzID0gdXNlcmZsYWdzO1xcbm5ldC9zY2hlZC9jbHNfdTMyLmMtOTk1LVxcbm5ldC9zY2hlZC9jbHNfdTMyLmM6OTk2OlxcdFxcdGVyciA9IHUzMl9yZXBsYWNlX2h3X2hub2RlKHRwLCBodCwgdXNlcmZsYWdzLCBleHRhY2spO1xcbm5ldC9zY2hlZC9jbHNfdTMyLmMtOTk3LVxcdFxcdGlmIChlcnIpIHtcXG4tLVxcbm5ldC9zY2hlZC9jbHNfdTMyLmMtMTEyNC1cXHRuLVxcdTAwM2Vmc2hpZnQgPSBzLVxcdTAwM2VobWFzayA/IGZmcyhudG9obChzLVxcdTAwM2VobWFzaykpIC0gMSA6IDA7XFxubmV0L3NjaGVkL2Nsc191MzIuYzoxMTI1OlxcdG4tXFx1MDAzZWZsYWdzID0gdXNlcmZsYWdzO1xcbm5ldC9zY2hlZC9jbHNfdTMyLmMtMTEyNi1cXG4tLVxcbm5ldC9zY2hlZC9jbHNfdTMyLmMtMTE1NS1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjExNTY6XFx0XFx0ZXJyID0gdTMyX3JlcGxhY2VfaHdfa25vZGUodHAsIG4sIHVzZXJmbGFncywgZXh0YWNrKTtcXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTExNTctXFx0XFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTQ6MTA6MzkuMjU0ODk2MjI1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4OTM0OTY0MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGB1MzJfY2hhbmdlYCBGdW5jdGlvbidzIEZsYWdzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgdTMyX2NoYW5nZWAgZnVuY3Rpb24sIGFuZCBteSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gZGlzc2VjdCB0aGUgZmxhZ3MuIFRoaXMgaXMgbGlrZWx5IHdoZXJlIHRoZSBjb3JlIG9mIHRoZSBiZWhhdmlvciBsaWVzLiBUaGUgYGZsYWdzYCBwYXJhbWV0ZXIgaXMgYWxtb3N0IGNlcnRhaW5seSBhIGJpdGZpZWxkLCBzbyBJJ2xsIGJlIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgb2YgZWFjaCBwb3NzaWJsZSBiaXQgYmVpbmcgc2V0IG9yIGNsZWFyZWQuIEknbSBnb2luZyB0byBxdWlja2x5IHJlY2FsbCBjb21tb24gYml0LWZsYWcgaWRpb21zLCBsaWtlIGNoZWNraW5nIGlmIGEgcGFydGljdWxhciBiaXQgaXMgc2V0IHVzaW5nIGEgYml0d2lzZSBBTkQsIG9yIGNsZWFyaW5nIGEgYml0IHdpdGggYSBiaXR3aXNlIEFORCBjb21iaW5lZCB3aXRoIGEgTk9UIG9wZXJhdGlvbi4gSSdtIGFsc28gYW50aWNpcGF0aW5nIHRoYXQgdGhlc2UgZmxhZ3MgYXJlIHByb2JhYmx5IGdvaW5nIHRvIGNvbnRyb2wgc29tZSBhc3BlY3Qgb2YgaG93IHRoZSBgdTMyYCB2YWx1ZSBpcyBtb2RpZmllZCBvciBoYW5kbGVkIHdpdGhpbiB0aGlzIGZ1bmN0aW9uLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbWVhbmluZyBvZiBlYWNoIGluZGl2aWR1YWwgZmxhZyB0byB0cnVseSBncmFzcCB0aGUgZnVuY3Rpb24ncyBvdmVyYWxsIGJlaGF2aW9yLiBBcmUgdGhlc2UgY29udHJvbCBmbGFncywgc3RhdHVzIGZsYWdzLCBvciBib3RoPyBBcmUgdGhlcmUgYW55IGZsYWcgY29tYmluYXRpb25zIHRoYXQgYXJlIGludmFsaWQgb3IgaGF2ZSBzcGVjaWFsIG1lYW5pbmc/IFRpbWUgdG8gZGlnIGludG8gdGhlIGRlZmluaXRpb24gb2YgYGZsYWdzYCFcblxuXG4iLCJJbnB1dFRva2VucyI6NDMzNCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE0OjEwOjQzLjE0ODM5NDgxNVoiLCJTZXEiOjE4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA2ODQzMTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZsYWdzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9jbHNfdTMyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL2Nsc191MzIuYz00ND1zdHJ1Y3QgdGNfdV9rbm9kZSB7XFxuLS1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTU1LSNlbmRpZlxcbm5ldC9zY2hlZC9jbHNfdTMyLmM6NTY6XFx0dTMyXFx0XFx0XFx0ZmxhZ3M7XFxubmV0L3NjaGVkL2Nsc191MzIuYy01Ny1cXHR1bnNpZ25lZCBpbnRcXHRcXHRpbl9od19jb3VudDtcXG4tLVxcbm5ldC9zY2hlZC9jbHNfdTMyLmM9NzA9c3RydWN0IHRjX3VfaG5vZGUge1xcbi0tXFxubmV0L3NjaGVkL2Nsc191MzIuYy03OC1cXHRzdHJ1Y3QgcmN1X2hlYWRcXHRcXHRyY3U7XFxubmV0L3NjaGVkL2Nsc191MzIuYzo3OTpcXHR1MzJcXHRcXHRcXHRmbGFncztcXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTgwLVxcdC8qIFRoZSAnaHQnIGZpZWxkIE1VU1QgYmUgdGhlIGxhc3QgZmllbGQgaW4gc3RydWN0dXJlIHRvIGFsbG93IGZvclxcbi0tXFxubmV0L3NjaGVkL2Nsc191MzIuYz0xMTQ9VENfSU5ESVJFQ1RfU0NPUEUgaW50IHUzMl9jbGFzc2lmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L3NjaGVkL2Nsc191MzIuYy0xNDUtXFxubmV0L3NjaGVkL2Nsc191MzIuYzoxNDY6XFx0XFx0aWYgKHRjX3NraXBfc3cobi1cXHUwMDNlZmxhZ3MpKSB7XFxubmV0L3NjaGVkL2Nsc191MzIuYy0xNDctXFx0XFx0XFx0biA9IHJjdV9kZXJlZmVyZW5jZV9iaChuLVxcdTAwM2VuZXh0KTtcXG4tLVxcbm5ldC9zY2hlZC9jbHNfdTMyLmMtMTgwLWNoZWNrX3Rlcm1pbmFsOlxcbm5ldC9zY2hlZC9jbHNfdTMyLmM6MTgxOlxcdFxcdFxcdGlmIChuLVxcdTAwM2VzZWwuZmxhZ3MgXFx1MDAyNiBUQ19VMzJfVEVSTUlOQUwpIHtcXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTE4Mi1cXG4tLVxcbm5ldC9zY2hlZC9jbHNfdTMyLmMtMjIyLVxcdFxcdH1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjIyMzpcXHRcXHRpZiAoIShuLVxcdTAwM2VzZWwuZmxhZ3MgXFx1MDAyNiAoVENfVTMyX1ZBUk9GRlNFVCB8IFRDX1UzMl9PRkZTRVQgfCBUQ19VMzJfRUFUKSkpXFxubmV0L3NjaGVkL2Nsc191MzIuYy0yMjQtXFx0XFx0XFx0Z290byBuZXh0X2h0O1xcbm5ldC9zY2hlZC9jbHNfdTMyLmMtMjI1LVxcbm5ldC9zY2hlZC9jbHNfdTMyLmM6MjI2OlxcdFxcdGlmIChuLVxcdTAwM2VzZWwuZmxhZ3MgXFx1MDAyNiAoVENfVTMyX09GRlNFVCB8IFRDX1UzMl9WQVJPRkZTRVQpKSB7XFxubmV0L3NjaGVkL2Nsc191MzIuYy0yMjctXFx0XFx0XFx0b2ZmMiA9IG4tXFx1MDAzZXNlbC5vZmYgKyAzO1xcbm5ldC9zY2hlZC9jbHNfdTMyLmM6MjI4OlxcdFxcdFxcdGlmIChuLVxcdTAwM2VzZWwuZmxhZ3MgXFx1MDAyNiBUQ19VMzJfVkFST0ZGU0VUKSB7XFxubmV0L3NjaGVkL2Nsc191MzIuYy0yMjktXFx0XFx0XFx0XFx0X19iZTE2ICpkYXRhLCBoZGF0YTtcXG4tLVxcbm5ldC9zY2hlZC9jbHNfdTMyLmMtMjQwLVxcdFxcdH1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjI0MTpcXHRcXHRpZiAobi1cXHUwMDNlc2VsLmZsYWdzIFxcdTAwMjYgVENfVTMyX0VBVCkge1xcbm5ldC9zY2hlZC9jbHNfdTMyLmMtMjQyLVxcdFxcdFxcdG9mZiArPSBvZmYyO1xcbi0tXFxubmV0L3NjaGVkL2Nsc191MzIuYz00ODg9c3RhdGljIHZvaWQgdTMyX2NsZWFyX2h3X2hub2RlKHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCBzdHJ1Y3QgdGNfdV9obm9kZSAqaCxcXG4tLVxcbm5ldC9zY2hlZC9jbHNfdTMyLmMtNDkzLVxcbm5ldC9zY2hlZC9jbHNfdTMyLmM6NDk0OlxcdHRjX2Nsc19jb21tb25fb2ZmbG9hZF9pbml0KFxcdTAwMjZjbHNfdTMyLmNvbW1vbiwgdHAsIGgtXFx1MDAzZWZsYWdzLCBleHRhY2spO1xcbm5ldC9zY2hlZC9jbHNfdTMyLmMtNDk1LVxcdGNsc191MzIuY29tbWFuZCA9IFRDX0NMU1UzMl9ERUxFVEVfSE5PREU7XFxuLS1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jPTUwMz1zdGF0aWMgaW50IHUzMl9yZXBsYWNlX2h3X2hub2RlKHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCBzdHJ1Y3QgdGNfdV9obm9kZSAqaCxcXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjUwNDpcXHRcXHRcXHRcXHR1MzIgZmxhZ3MsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTUwNS17XFxuLS1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTUwNy1cXHRzdHJ1Y3QgdGNfY2xzX3UzMl9vZmZsb2FkIGNsc191MzIgPSB7fTtcXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjUwODpcXHRib29sIHNraXBfc3cgPSB0Y19za2lwX3N3KGZsYWdzKTtcXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTUwOS1cXHRib29sIG9mZmxvYWRlZCA9IGZhbHNlO1xcbi0tXFxubmV0L3NjaGVkL2Nsc191MzIuYy01MTEtXFxubmV0L3NjaGVkL2Nsc191MzIuYzo1MTI6XFx0dGNfY2xzX2NvbW1vbl9vZmZsb2FkX2luaXQoXFx1MDAyNmNsc191MzIuY29tbW9uLCB0cCwgZmxhZ3MsIGV4dGFjayk7XFxubmV0L3NjaGVkL2Nsc191MzIuYy01MTMtXFx0Y2xzX3UzMi5jb21tYW5kID0gVENfQ0xTVTMyX05FV19ITk9ERTtcXG4tLVxcbm5ldC9zY2hlZC9jbHNfdTMyLmM9NTMyPXN0YXRpYyB2b2lkIHUzMl9yZW1vdmVfaHdfa25vZGUoc3RydWN0IHRjZl9wcm90byAqdHAsIHN0cnVjdCB0Y191X2tub2RlICpuLFxcbi0tXFxubmV0L3NjaGVkL2Nsc191MzIuYy01MzctXFxubmV0L3NjaGVkL2Nsc191MzIuYzo1Mzg6XFx0dGNfY2xzX2NvbW1vbl9vZmZsb2FkX2luaXQoXFx1MDAyNmNsc191MzIuY29tbW9uLCB0cCwgbi1cXHUwMDNlZmxhZ3MsIGV4dGFjayk7XFxubmV0L3NjaGVkL2Nsc191MzIuYy01MzktXFx0Y2xzX3UzMi5jb21tYW5kID0gVENfQ0xTVTMyX0RFTEVURV9LTk9ERTtcXG4tLVxcbm5ldC9zY2hlZC9jbHNfdTMyLmMtNTQyLVxcdHRjX3NldHVwX2NiX2Rlc3Ryb3koYmxvY2ssIHRwLCBUQ19TRVRVUF9DTFNVMzIsIFxcdTAwMjZjbHNfdTMyLCBmYWxzZSxcXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjU0MzpcXHRcXHRcXHQgICAgXFx1MDAyNm4tXFx1MDAzZWZsYWdzLCBcXHUwMDI2bi1cXHUwMDNlaW5faHdfY291bnQsIHRydWUpO1xcbm5ldC9zY2hlZC9jbHNfdTMyLmMtNTQ0LX1cXG4tLVxcbm5ldC9zY2hlZC9jbHNfdTMyLmM9NTQ2PXN0YXRpYyBpbnQgdTMyX3JlcGxhY2VfaHdfa25vZGUoc3RydWN0IHRjZl9wcm90byAqdHAsIHN0cnVjdCB0Y191X2tub2RlICpuLFxcbm5ldC9zY2hlZC9jbHNfdTMyLmM6NTQ3OlxcdFxcdFxcdFxcdHUzMiBmbGFncywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbm5ldC9zY2hlZC9jbHNfdTMyLmMtNTQ4LXtcXG4tLVxcbm5ldC9zY2hlZC9jbHNfdTMyLmMtNTUxLVxcdHN0cnVjdCB0Y19jbHNfdTMyX29mZmxvYWQgY2xzX3UzMiA9IHt9O1xcbm5ldC9zY2hlZC9jbHNfdTMyLmM6NTUyOlxcdGJvb2wgc2tpcF9zdyA9IHRjX3NraXBfc3coZmxhZ3MpO1xcbm5ldC9zY2hlZC9jbHNfdTMyLmMtNTUzLVxcdGludCBlcnI7XFxubmV0L3NjaGVkL2Nsc191MzIuYy01NTQtXFxubmV0L3NjaGVkL2Nsc191MzIuYzo1NTU6XFx0dGNfY2xzX2NvbW1vbl9vZmZsb2FkX2luaXQoXFx1MDAyNmNsc191MzIuY29tbW9uLCB0cCwgZmxhZ3MsIGV4dGFjayk7XFxubmV0L3NjaGVkL2Nsc191MzIuYy01NTYtXFx0Y2xzX3UzMi5jb21tYW5kID0gVENfQ0xTVTMyX1JFUExBQ0VfS05PREU7XFxuLS1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTU3Mi1cXHRlcnIgPSB0Y19zZXR1cF9jYl9hZGQoYmxvY2ssIHRwLCBUQ19TRVRVUF9DTFNVMzIsIFxcdTAwMjZjbHNfdTMyLCBza2lwX3N3LFxcbm5ldC9zY2hlZC9jbHNfdTMyLmM6NTczOlxcdFxcdFxcdCAgICAgIFxcdTAwMjZuLVxcdTAwM2VmbGFncywgXFx1MDAyNm4tXFx1MDAzZWluX2h3X2NvdW50LCB0cnVlKTtcXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTU3NC1cXHRpZiAoZXJyKSB7XFxuLS1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTU3OC1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjU3OTpcXHRpZiAoc2tpcF9zdyBcXHUwMDI2XFx1MDAyNiAhKG4tXFx1MDAzZWZsYWdzIFxcdTAwMjYgVENBX0NMU19GTEFHU19JTl9IVykpXFxubmV0L3NjaGVkL2Nsc191MzIuYy01ODAtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jPTc0MD1zdGF0aWMgaW50IHUzMl9zZXRfcGFybXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX3Byb3RvICp0cCxcXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTc0MS1cXHRcXHRcXHQgc3RydWN0IHRjX3Vfa25vZGUgKm4sIHN0cnVjdCBubGF0dHIgKip0YixcXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjc0MjpcXHRcXHRcXHQgc3RydWN0IG5sYXR0ciAqZXN0LCB1MzIgZmxhZ3MsIHUzMiBmbF9mbGFncyxcXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTc0My1cXHRcXHRcXHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L3NjaGVkL2Nsc191MzIuYy03NDYtXFxubmV0L3NjaGVkL2Nsc191MzIuYzo3NDc6XFx0ZXJyID0gdGNmX2V4dHNfdmFsaWRhdGVfZXgobmV0LCB0cCwgdGIsIGVzdCwgXFx1MDAyNm4tXFx1MDAzZWV4dHMsIGZsYWdzLFxcbm5ldC9zY2hlZC9jbHNfdTMyLmM6NzQ4OlxcdFxcdFxcdFxcdCAgIGZsX2ZsYWdzLCBleHRhY2spO1xcbm5ldC9zY2hlZC9jbHNfdTMyLmMtNzQ5LVxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbi0tXFxubmV0L3NjaGVkL2Nsc191MzIuYz04MjE9c3RhdGljIHN0cnVjdCB0Y191X2tub2RlICp1MzJfaW5pdF9rbm9kZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLFxcbi0tXFxubmV0L3NjaGVkL2Nsc191MzIuYy04MzctXFx0bmV3LVxcdTAwM2Vmc2hpZnQgPSBuLVxcdTAwM2Vmc2hpZnQ7XFxubmV0L3NjaGVkL2Nsc191MzIuYzo4Mzg6XFx0bmV3LVxcdTAwM2VmbGFncyA9IG4tXFx1MDAzZWZsYWdzO1xcbm5ldC9zY2hlZC9jbHNfdTMyLmMtODM5LVxcdFJDVV9JTklUX1BPSU5URVIobmV3LVxcdTAwM2VodF9kb3duLCBodCk7XFxuLS1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jPTg3Mj1zdGF0aWMgaW50IHUzMl9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxcbm5ldC9zY2hlZC9jbHNfdTMyLmMtODczLVxcdFxcdCAgICAgIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCB1bnNpZ25lZCBsb25nIGJhc2UsIHUzMiBoYW5kbGUsXFxubmV0L3NjaGVkL2Nsc191MzIuYzo4NzQ6XFx0XFx0ICAgICAgc3RydWN0IG5sYXR0ciAqKnRjYSwgdm9pZCAqKmFyZywgdTMyIGZsYWdzLFxcbm5ldC9zY2hlZC9jbHNfdTMyLmMtODc1LVxcdFxcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9zY2hlZC9jbHNfdTMyLmMtODgyLVxcdHN0cnVjdCBubGF0dHIgKnRiW1RDQV9VMzJfTUFYICsgMV07XFxubmV0L3NjaGVkL2Nsc191MzIuYzo4ODM6XFx0dTMyIGh0aWQsIHVzZXJmbGFncyA9IDA7XFxubmV0L3NjaGVkL2Nsc191MzIuYy04ODQtXFx0c2l6ZV90IHNlbF9zaXplO1xcbi0tXFxubmV0L3NjaGVkL2Nsc191MzIuYy05MDEtXFx0aWYgKHRiW1RDQV9VMzJfRkxBR1NdKSB7XFxubmV0L3NjaGVkL2Nsc191MzIuYzo5MDI6XFx0XFx0dXNlcmZsYWdzID0gbmxhX2dldF91MzIodGJbVENBX1UzMl9GTEFHU10pO1xcbm5ldC9zY2hlZC9jbHNfdTMyLmM6OTAzOlxcdFxcdGlmICghdGNfZmxhZ3NfdmFsaWQodXNlcmZsYWdzKSkge1xcbm5ldC9zY2hlZC9jbHNfdTMyLmM6OTA0OlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFxcXCJJbnZhbGlkIGZpbHRlciBmbGFnc1xcXCIpO1xcbm5ldC9zY2hlZC9jbHNfdTMyLmMtOTA1LVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxubmV0L3NjaGVkL2Nsc191MzIuYy05MTctXFxubmV0L3NjaGVkL2Nsc191MzIuYzo5MTg6XFx0XFx0aWYgKChuLVxcdTAwM2VmbGFncyBeIHVzZXJmbGFncykgXFx1MDAyNlxcbm5ldC9zY2hlZC9jbHNfdTMyLmMtOTE5LVxcdFxcdCAgICB+KFRDQV9DTFNfRkxBR1NfSU5fSFcgfCBUQ0FfQ0xTX0ZMQUdTX05PVF9JTl9IVykpIHtcXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjkyMDpcXHRcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcXFwiS2V5IG5vZGUgZmxhZ3MgZG8gbm90IG1hdGNoIHBhc3NlZCBmbGFnc1xcXCIpO1xcbm5ldC9zY2hlZC9jbHNfdTMyLmMtOTIxLVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxubmV0L3NjaGVkL2Nsc191MzIuYy05MjgtXFx0XFx0ZXJyID0gdTMyX3NldF9wYXJtcyhuZXQsIHRwLCBuZXcsIHRiLCB0Y2FbVENBX1JBVEVdLFxcbm5ldC9zY2hlZC9jbHNfdTMyLmM6OTI5OlxcdFxcdFxcdFxcdCAgICBmbGFncywgbmV3LVxcdTAwM2VmbGFncywgZXh0YWNrKTtcXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTkzMC1cXG4tLVxcbm5ldC9zY2hlZC9jbHNfdTMyLmMtOTM3LVxcbm5ldC9zY2hlZC9jbHNfdTMyLmM6OTM4OlxcdFxcdGVyciA9IHUzMl9yZXBsYWNlX2h3X2tub2RlKHRwLCBuZXcsIHVzZXJmbGFncywgZXh0YWNrKTtcXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTkzOS1cXHRcXHRpZiAoZXJyKSB7XFxuLS1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTk0NC1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjk0NTpcXHRcXHRpZiAoIXRjX2luX2h3KG5ldy1cXHUwMDNlZmxhZ3MpKVxcbm5ldC9zY2hlZC9jbHNfdTMyLmM6OTQ2OlxcdFxcdFxcdG5ldy1cXHUwMDNlZmxhZ3MgfD0gVENBX0NMU19GTEFHU19OT1RfSU5fSFc7XFxubmV0L3NjaGVkL2Nsc191MzIuYy05NDctXFxubmV0L3NjaGVkL2Nsc191MzIuYzo5NDg6XFx0XFx0dGNmX3Byb3RvX3VwZGF0ZV91c2Vzdyh0cCwgbmV3LVxcdTAwM2VmbGFncyk7XFxubmV0L3NjaGVkL2Nsc191MzIuYy05NDktXFxuLS1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTk5My1cXHRcXHRpZHJfaW5pdChcXHUwMDI2aHQtXFx1MDAzZWhhbmRsZV9pZHIpO1xcbm5ldC9zY2hlZC9jbHNfdTMyLmM6OTk0OlxcdFxcdGh0LVxcdTAwM2VmbGFncyA9IHVzZXJmbGFncztcXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTk5NS1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjk5NjpcXHRcXHRlcnIgPSB1MzJfcmVwbGFjZV9od19obm9kZSh0cCwgaHQsIHVzZXJmbGFncywgZXh0YWNrKTtcXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTk5Ny1cXHRcXHRpZiAoZXJyKSB7XFxuLS1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTExMjQtXFx0bi1cXHUwMDNlZnNoaWZ0ID0gcy1cXHUwMDNlaG1hc2sgPyBmZnMobnRvaGwocy1cXHUwMDNlaG1hc2spKSAtIDEgOiAwO1xcbm5ldC9zY2hlZC9jbHNfdTMyLmM6MTEyNTpcXHRuLVxcdTAwM2VmbGFncyA9IHVzZXJmbGFncztcXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTExMjYtXFxuLS1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTExNDctXFx0ZXJyID0gdTMyX3NldF9wYXJtcyhuZXQsIHRwLCBuLCB0YiwgdGNhW1RDQV9SQVRFXSxcXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjExNDg6XFx0XFx0XFx0ICAgIGZsYWdzLCBuLVxcdTAwM2VmbGFncywgZXh0YWNrKTtcXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTExNDktXFxuLS1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTExNTUtXFxubmV0L3NjaGVkL2Nsc191MzIuYzoxMTU2OlxcdFxcdGVyciA9IHUzMl9yZXBsYWNlX2h3X2tub2RlKHRwLCBuLCB1c2VyZmxhZ3MsIGV4dGFjayk7XFxubmV0L3NjaGVkL2Nsc191MzIuYy0xMTU3LVxcdFxcdGlmIChlcnIpXFxuLS1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTExNTktXFxubmV0L3NjaGVkL2Nsc191MzIuYzoxMTYwOlxcdFxcdGlmICghdGNfaW5faHcobi1cXHUwMDNlZmxhZ3MpKVxcbm5ldC9zY2hlZC9jbHNfdTMyLmM6MTE2MTpcXHRcXHRcXHRuLVxcdTAwM2VmbGFncyB8PSBUQ0FfQ0xTX0ZMQUdTX05PVF9JTl9IVztcXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTExNjItXFxubmV0L3NjaGVkL2Nsc191MzIuYzoxMTYzOlxcdFxcdHRjZl9wcm90b191cGRhdGVfdXNlc3codHAsIG4tXFx1MDAzZWZsYWdzKTtcXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTExNjQtXFxuLS1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jPTEyMzE9c3RhdGljIGludCB1MzJfcmVvZmZsb2FkX2hub2RlKHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCBzdHJ1Y3QgdGNfdV9obm9kZSAqaHQsXFxuLS1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTEyMzctXFxubmV0L3NjaGVkL2Nsc191MzIuYzoxMjM4OlxcdHRjX2Nsc19jb21tb25fb2ZmbG9hZF9pbml0KFxcdTAwMjZjbHNfdTMyLmNvbW1vbiwgdHAsIGh0LVxcdTAwM2VmbGFncywgZXh0YWNrKTtcXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTEyMzktXFx0Y2xzX3UzMi5jb21tYW5kID0gYWRkID8gVENfQ0xTVTMyX05FV19ITk9ERSA6IFRDX0NMU1UzMl9ERUxFVEVfSE5PREU7XFxuLS1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTEyNDQtXFx0ZXJyID0gY2IoVENfU0VUVVBfQ0xTVTMyLCBcXHUwMDI2Y2xzX3UzMiwgY2JfcHJpdik7XFxubmV0L3NjaGVkL2Nsc191MzIuYzoxMjQ1OlxcdGlmIChlcnIgXFx1MDAyNlxcdTAwMjYgYWRkIFxcdTAwMjZcXHUwMDI2IHRjX3NraXBfc3coaHQtXFx1MDAzZWZsYWdzKSlcXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTEyNDYtXFx0XFx0cmV0dXJuIGVycjtcXG4tLVxcbm5ldC9zY2hlZC9jbHNfdTMyLmM9MTI1MT1zdGF0aWMgaW50IHUzMl9yZW9mZmxvYWRfa25vZGUoc3RydWN0IHRjZl9wcm90byAqdHAsIHN0cnVjdCB0Y191X2tub2RlICpuLFxcbi0tXFxubmV0L3NjaGVkL2Nsc191MzIuYy0xMjU4LVxcbm5ldC9zY2hlZC9jbHNfdTMyLmM6MTI1OTpcXHR0Y19jbHNfY29tbW9uX29mZmxvYWRfaW5pdChcXHUwMDI2Y2xzX3UzMi5jb21tb24sIHRwLCBuLVxcdTAwM2VmbGFncywgZXh0YWNrKTtcXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTEyNjAtXFx0Y2xzX3UzMi5jb21tYW5kID0gYWRkID9cXG4tLVxcbm5ldC9zY2hlZC9jbHNfdTMyLmMtMTI4MC1cXHRyZXR1cm4gdGNfc2V0dXBfY2JfcmVvZmZsb2FkKGJsb2NrLCB0cCwgYWRkLCBjYiwgVENfU0VUVVBfQ0xTVTMyLFxcbm5ldC9zY2hlZC9jbHNfdTMyLmM6MTI4MTpcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZjbHNfdTMyLCBjYl9wcml2LCBcXHUwMDI2bi1cXHUwMDNlZmxhZ3MsXFxubmV0L3NjaGVkL2Nsc191MzIuYy0xMjgyLVxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNm4tXFx1MDAzZWluX2h3X2NvdW50KTtcXG4tLVxcbm5ldC9zY2hlZC9jbHNfdTMyLmM9MTI4NT1zdGF0aWMgaW50IHUzMl9yZW9mZmxvYWQoc3RydWN0IHRjZl9wcm90byAqdHAsIGJvb2wgYWRkLCBmbG93X3NldHVwX2NiX3QgKmNiLFxcbi0tXFxubmV0L3NjaGVkL2Nsc191MzIuYy0xMzAzLVxcdFxcdCAqL1xcbm5ldC9zY2hlZC9jbHNfdTMyLmM6MTMwNDpcXHRcXHRpZiAoYWRkIFxcdTAwMjZcXHUwMDI2ICF0Y19za2lwX2h3KGh0LVxcdTAwM2VmbGFncykpIHtcXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTEzMDUtXFx0XFx0XFx0ZXJyID0gdTMyX3Jlb2ZmbG9hZF9obm9kZSh0cCwgaHQsIGFkZCwgY2IsIGNiX3ByaXYsXFxuLS1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTEzMTQtXFx0XFx0XFx0ICAgICBuID0gcnRubF9kZXJlZmVyZW5jZShuLVxcdTAwM2VuZXh0KSkge1xcbm5ldC9zY2hlZC9jbHNfdTMyLmM6MTMxNTpcXHRcXHRcXHRcXHRpZiAodGNfc2tpcF9odyhuLVxcdTAwM2VmbGFncykpXFxubmV0L3NjaGVkL2Nsc191MzIuYy0xMzE2LVxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxubmV0L3NjaGVkL2Nsc191MzIuYy0xMzI0LVxcbm5ldC9zY2hlZC9jbHNfdTMyLmM6MTMyNTpcXHRcXHRpZiAoIWFkZCBcXHUwMDI2XFx1MDAyNiAhdGNfc2tpcF9odyhodC1cXHUwMDNlZmxhZ3MpKVxcbm5ldC9zY2hlZC9jbHNfdTMyLmMtMTMyNi1cXHRcXHRcXHR1MzJfcmVvZmZsb2FkX2hub2RlKHRwLCBodCwgYWRkLCBjYiwgY2JfcHJpdiwgZXh0YWNrKTtcXG4tLVxcbm5ldC9zY2hlZC9jbHNfdTMyLmM9MTM0MD1zdGF0aWMgaW50IHUzMl9kdW1wKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRjZl9wcm90byAqdHAsIHZvaWQgKmZoLFxcbi0tXFxubmV0L3NjaGVkL2Nsc191MzIuYy0xMzg2LVxcbm5ldC9zY2hlZC9jbHNfdTMyLmM6MTM4NzpcXHRcXHRpZiAobi1cXHUwMDNlZmxhZ3MgXFx1MDAyNlxcdTAwMjYgbmxhX3B1dF91MzIoc2tiLCBUQ0FfVTMyX0ZMQUdTLCBuLVxcdTAwM2VmbGFncykpXFxubmV0L3NjaGVkL2Nsc191MzIuYy0xMzg4LVxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNDoxMDo0My40NTUyNTMzNTZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI5NTEwNTY1NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBVMzIgT2ZmbG9hZCBQYXRjaDogTm8gS01TQU4gTmVlZGVkKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBjaGFuZ2luZyB0aGUgYXJndW1lbnQgcGFzc2VkIHRvIGB1MzJfcmVwbGFjZV9od19rbm9kZWAuIEkgc2VlIHRoZSBvcmlnaW5hbCBjb2RlIHdhcyBpbmNvcnJlY3RseSBwYXNzaW5nIGBmbGFnc2AgKHRoZSBuZXRsaW5rIG1lc3NhZ2UgZmxhZ3MsIGxpa2UgYE5MTV9GX0NSRUFURWAg4oCTIHdoaWNoIG9yaWdpbmF0ZXMgZnJvbSBgdGNfbmV3X3RmaWx0ZXJg4oCZcyBgbi1cdTAwM2VubG1zZ19mbGFnc2ApIHdoZW4gaXQgc2hvdWxkIGhhdmUgYmVlbiBwYXNzaW5nIGB1c2VyZmxhZ3NgLiBgdXNlcmZsYWdzYCBpcyBkZXJpdmVkIGZyb20gYHRiW1RDQV9VMzJfRkxBR1NdYC4gVGhhdCdzIGEgY2xlYXIgYnVnIOKAkyBpdCdzIGEgbWl4LXVwIG9mIG5ldGxpbmsgbWV0YWRhdGEgdmVyc3VzIHVzZXItc3BlY2lmaWVkIGZsYWdzLCBzcGVjaWZpY2FsbHkgZm9yIGhhcmR3YXJlIG9mZmxvYWQgYmVoYXZpb3IuIEltcG9ydGFudGx5LCBib3RoIGBmbGFnc2AgYW5kIGB1c2VyZmxhZ3NgIGFyZSBpbml0aWFsaXplZC4gYGZsYWdzYCBpcyBhbiBhcmd1bWVudCBhbmQgYHVzZXJmbGFnc2AgaXMgaW5pdGlhbGl6ZWQgdG8gemVybyBhbmQgY29uZGl0aW9uYWxseSBzZXQgYnkgYG5sYV9nZXRfdTMyYC4gVGhpcyBoYXMgbm90aGluZyB0byBkbyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5UaGUgc2Vjb25kIHBhcnQgYWRkcmVzc2VzIGEgcmVmZXJlbmNlIGNvdW50aW5nIHByb2JsZW0uICBJZiBgdTMyX3JlcGxhY2VfaHdfa25vZGVgIGZhaWxzLCB0aGUgYGh0X2Rvd25gIHJlZmVyZW5jZSB3YXNuJ3QgYmVpbmcgbWFuYWdlZCBjb3JyZWN0bHksIGxlYWRpbmcgdG8gYSBwb3RlbnRpYWwgbGVhayBvciB1c2UtYWZ0ZXItZnJlZS4gVGhpcyBwYXRjaCBjb3JyZWN0cyB0aGF0LiBBZ2Fpbiwgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgY29uY2VybnMgaGVyZS4gSXQncyBhYm91dCBlbnN1cmluZyByZXNvdXJjZXMgYXJlIGNvcnJlY3RseSBmcmVlZCBpbiBlcnJvciBwYXRocy5cblxuVGhlIGZpeCBmb3IgdGhlIGBmbGFnc2AgdnMgYHVzZXJmbGFnc2AgYXJndW1lbnQgaXMgYSBzdHJhaWdodCBidWcgZml4LCBhbmQgdGhlIHJlZmVyZW5jZSBjb3VudCBmaXggY29ycmVjdHMgcmVzb3VyY2UgbWFuYWdlbWVudC4gTmVpdGhlciBpbnRyb2R1Y2VzIG9yIGV4cG9zZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiAgS0FTQU4gd291bGQgY2F0Y2ggYW55IHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zIGFyaXNpbmcgZnJvbSB0aGUgcmVmZXJlbmNlIGNvdW50aW5nIGZpeCwgYW5kIGttZW1sZWFrIHNob3VsZCBjYXRjaCBtZW1vcnkgbGVha3MuIEtNU0FOIGlzbid0IHJlbGV2YW50IGhlcmUuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJ2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIGhvdyBgdTMyX3JlcGxhY2VfaHdfa25vZGVgIGl0c2VsZiB1c2VzIGBmbGFnc2A6IGl0IHVzZXMgaXQgZm9yIGluaXRpYWxpemluZyB0aGUgb2ZmbG9hZCBzdHJ1Y3R1cmUsIHNvIGl0J3MgYSBkaXJlY3QgaW50ZWdlciB2YWx1ZSwgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYXQgcGxheSBoZXJlLlxuXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lc24ndCB3YXJyYW50IGEgS01TQU4gaW52ZXN0aWdhdGlvbi4gSXQncyBhIGNsZWFuIGJ1ZyBmaXggYW5kIHJlc291cmNlIG1hbmFnZW1lbnQgY29ycmVjdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQwNywiT3V0cHV0VG9rZW5zIjoxNjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTQ6MTA6NTYuNDA2MzEyNjQ5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIzMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyB0d28gaXNzdWVzIGluIHRoZSB1MzIgcGFja2V0IGNsYXNzaWZpZXI6IGEgdHlwbyB3aGVyZSBuZXRsaW5rIG1lc3NhZ2UgZmxhZ3Mgd2VyZSBwYXNzZWQgaW5zdGVhZCBvZiB1c2VyLXNwZWNpZmllZCBUQ0FfVTMyX0ZMQUdTIHRvIGB1MzJfcmVwbGFjZV9od19rbm9kZWAsIGFuZCBhIHJlZmVyZW5jZSBjb3VudGluZyBidWcgb24gdGhlIGBodF9kb3duYCBub2RlIGR1cmluZyBlcnJvciBoYW5kbGluZy4gQm90aCBgZmxhZ3NgIGFuZCBgdXNlcmZsYWdzYCBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgaW50ZWdlcnMuIFRoZSByZWZlcmVuY2UgY291bnRpbmcgZml4IHByZXZlbnRzIGEgbWVtb3J5IGxlYWsgb3IgdXNlLWFmdGVyLWZyZWUsIHdoaWNoIGFyZSBkZXRlY3RhYmxlIGJ5IGttZW1sZWFrIGFuZCBLQVNBTiByZXNwZWN0aXZlbHkuIFRoZXJlIGlzIG5vIGludHJvZHVjdGlvbiBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgc3RydWN0dXJlIHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgdHdvIGlzc3VlcyBpbiB0aGUgdTMyIHBhY2tldCBjbGFzc2lmaWVyOiBhIHR5cG8gd2hlcmUgbmV0bGluayBtZXNzYWdlIGZsYWdzIHdlcmUgcGFzc2VkIGluc3RlYWQgb2YgdXNlci1zcGVjaWZpZWQgVENBX1UzMl9GTEFHUyB0byBgdTMyX3JlcGxhY2VfaHdfa25vZGVgLCBhbmQgYSByZWZlcmVuY2UgY291bnRpbmcgYnVnIG9uIHRoZSBgaHRfZG93bmAgbm9kZSBkdXJpbmcgZXJyb3IgaGFuZGxpbmcuIEJvdGggYGZsYWdzYCBhbmQgYHVzZXJmbGFnc2AgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGludGVnZXJzLiBUaGUgcmVmZXJlbmNlIGNvdW50aW5nIGZpeCBwcmV2ZW50cyBhIG1lbW9yeSBsZWFrIG9yIHVzZS1hZnRlci1mcmVlLCB3aGljaCBhcmUgZGV0ZWN0YWJsZSBieSBrbWVtbGVhayBhbmQgS0FTQU4gcmVzcGVjdGl2ZWx5LiBUaGVyZSBpcyBubyBpbnRyb2R1Y3Rpb24gb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIHN0cnVjdHVyZSBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflown9nqq[1] Phase: Succeeded StartedAt: 2026-08-13 14:11:30 +0000 UTC FinishedAt: 2026-08-13 14:11:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflown9nqq[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-13 14:11:30 +0000 UTC FinishedAt: 2026-08-13 14:11:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflown9nqq[2] Phase: Succeeded StartedAt: 2026-08-13 14:11:30 +0000 UTC FinishedAt: 2026-08-13 17:56:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflown9nqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"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":["u32_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"series_id":"aae1de02-8f14-4c4b-8577-5a2a6a5ec7b9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-13 14:11:30 +0000 UTC FinishedAt: 2026-08-13 17:56:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"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":["u32_change"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"series_id":"aae1de02-8f14-4c4b-8577-5a2a6a5ec7b9","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-workflown9nqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"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":["u32_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"series_id":"aae1de02-8f14-4c4b-8577-5a2a6a5ec7b9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-13 14:11:30 +0000 UTC FinishedAt: 2026-08-13 14:12:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflown9nqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"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":["u32_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"series_id":"aae1de02-8f14-4c4b-8577-5a2a6a5ec7b9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-13 14:11:30 +0000 UTC FinishedAt: 2026-08-13 14:12:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"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-workflown9nqq/series-workflown9nqq-convert-artifact-2036230584/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown9nqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"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":["u32_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"series_id":"aae1de02-8f14-4c4b-8577-5a2a6a5ec7b9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-13 14:12:16 +0000 UTC FinishedAt: 2026-08-13 14:32:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflown9nqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"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":["u32_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"series_id":"aae1de02-8f14-4c4b-8577-5a2a6a5ec7b9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-13 14:12:16 +0000 UTC FinishedAt: 2026-08-13 14:32:17 +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:*9f6e7b1f-8a09-4a29-9aec-afbc6b2f8909,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-workflown9nqq/series-workflown9nqq-convert-artifact-2036230584/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": "17d817e1-758a-48b0-aa65-cee87a987879", "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-workflown9nqq/series-workflown9nqq-build-action-126857070/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown9nqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"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":["u32_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"series_id":"aae1de02-8f14-4c4b-8577-5a2a6a5ec7b9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-13 14:12:16 +0000 UTC FinishedAt: 2026-08-13 14:32:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*9f6e7b1f-8a09-4a29-9aec-afbc6b2f8909,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-workflown9nqq/series-workflown9nqq-convert-artifact-2036230584/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": "17d817e1-758a-48b0-aa65-cee87a987879", "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-workflown9nqq/series-workflown9nqq-build-action-126857070/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown9nqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"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":["u32_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"series_id":"aae1de02-8f14-4c4b-8577-5a2a6a5ec7b9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-13 14:32:17 +0000 UTC FinishedAt: 2026-08-13 14:32:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflown9nqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"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":["u32_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"series_id":"aae1de02-8f14-4c4b-8577-5a2a6a5ec7b9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-13 14:32:17 +0000 UTC FinishedAt: 2026-08-13 14:32:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflown9nqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"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":["u32_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"series_id":"aae1de02-8f14-4c4b-8577-5a2a6a5ec7b9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-13 14:32:17 +0000 UTC FinishedAt: 2026-08-13 14:32:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflown9nqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"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":["u32_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"series_id":"aae1de02-8f14-4c4b-8577-5a2a6a5ec7b9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-13 14:32:17 +0000 UTC FinishedAt: 2026-08-13 14:32:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"series_id":"aae1de02-8f14-4c4b-8577-5a2a6a5ec7b9","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-workflown9nqq/series-workflown9nqq-convert-artifact-1082298399/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown9nqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"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":["u32_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"series_id":"aae1de02-8f14-4c4b-8577-5a2a6a5ec7b9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-13 14:32:27 +0000 UTC FinishedAt: 2026-08-13 14:34:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflown9nqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"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":["u32_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"series_id":"aae1de02-8f14-4c4b-8577-5a2a6a5ec7b9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-13 14:32:27 +0000 UTC FinishedAt: 2026-08-13 14:34:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*17d817e1-758a-48b0-aa65-cee87a987879,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-workflown9nqq/series-workflown9nqq-build-action-126857070/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-workflown9nqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"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":["u32_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"series_id":"aae1de02-8f14-4c4b-8577-5a2a6a5ec7b9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-13 14:34:41 +0000 UTC FinishedAt: 2026-08-13 14:34:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflown9nqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"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":["u32_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"series_id":"aae1de02-8f14-4c4b-8577-5a2a6a5ec7b9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-13 14:34:41 +0000 UTC FinishedAt: 2026-08-13 14:34:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflown9nqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"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":["u32_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"series_id":"aae1de02-8f14-4c4b-8577-5a2a6a5ec7b9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-13 14:34:41 +0000 UTC FinishedAt: 2026-08-13 14:52:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflown9nqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"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":["u32_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"series_id":"aae1de02-8f14-4c4b-8577-5a2a6a5ec7b9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-13 14:34:41 +0000 UTC FinishedAt: 2026-08-13 14:52:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*9f6e7b1f-8a09-4a29-9aec-afbc6b2f8909,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-workflown9nqq/series-workflown9nqq-convert-artifact-1082298399/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": "fe8d7d0e-fa8c-4ab8-a808-a2f4816029a3", "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-workflown9nqq/series-workflown9nqq-build-action-2777572019/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown9nqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"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":["u32_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"series_id":"aae1de02-8f14-4c4b-8577-5a2a6a5ec7b9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-13 14:34:41 +0000 UTC FinishedAt: 2026-08-13 14:52:23 +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:*9f6e7b1f-8a09-4a29-9aec-afbc6b2f8909,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-workflown9nqq/series-workflown9nqq-convert-artifact-1082298399/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": "fe8d7d0e-fa8c-4ab8-a808-a2f4816029a3", "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-workflown9nqq/series-workflown9nqq-build-action-2777572019/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown9nqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"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":["u32_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"series_id":"aae1de02-8f14-4c4b-8577-5a2a6a5ec7b9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-13 14:52:33 +0000 UTC FinishedAt: 2026-08-13 14:52:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflown9nqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"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":["u32_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"series_id":"aae1de02-8f14-4c4b-8577-5a2a6a5ec7b9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-13 14:52:33 +0000 UTC FinishedAt: 2026-08-13 14:52:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflown9nqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"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":["u32_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"series_id":"aae1de02-8f14-4c4b-8577-5a2a6a5ec7b9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-13 14:52:33 +0000 UTC FinishedAt: 2026-08-13 14:54:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflown9nqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"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":["u32_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"series_id":"aae1de02-8f14-4c4b-8577-5a2a6a5ec7b9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-13 14:52:33 +0000 UTC FinishedAt: 2026-08-13 14:54:23 +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:*fe8d7d0e-fa8c-4ab8-a808-a2f4816029a3,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-workflown9nqq/series-workflown9nqq-build-action-2777572019/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-workflown9nqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"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":["u32_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"series_id":"aae1de02-8f14-4c4b-8577-5a2a6a5ec7b9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-13 14:54:33 +0000 UTC FinishedAt: 2026-08-13 17:56:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflown9nqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"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":["u32_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"series_id":"aae1de02-8f14-4c4b-8577-5a2a6a5ec7b9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-13 14:54:33 +0000 UTC FinishedAt: 2026-08-13 17:56:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["u32_change"],"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:*17d817e1-758a-48b0-aa65-cee87a987879,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*fe8d7d0e-fa8c-4ab8-a808-a2f4816029a3,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-workflown9nqq/series-workflown9nqq-build-action-126857070/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-workflown9nqq/series-workflown9nqq-build-action-2777572019/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflown9nqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"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":["u32_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"series_id":"aae1de02-8f14-4c4b-8577-5a2a6a5ec7b9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-13 14:54:33 +0000 UTC FinishedAt: 2026-08-13 14:54:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflown9nqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"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":["u32_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"series_id":"aae1de02-8f14-4c4b-8577-5a2a6a5ec7b9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-13 14:54:33 +0000 UTC FinishedAt: 2026-08-13 14:54:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["u32_change"],"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-workflown9nqq/series-workflown9nqq-convert-artifact-713895224/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown9nqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"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":["u32_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"series_id":"aae1de02-8f14-4c4b-8577-5a2a6a5ec7b9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-13 14:54:33 +0000 UTC FinishedAt: 2026-08-13 14:54:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflown9nqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"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":["u32_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"series_id":"aae1de02-8f14-4c4b-8577-5a2a6a5ec7b9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-13 14:54:33 +0000 UTC FinishedAt: 2026-08-13 14:54:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflown9nqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"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":["u32_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"series_id":"aae1de02-8f14-4c4b-8577-5a2a6a5ec7b9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-13 14:54:33 +0000 UTC FinishedAt: 2026-08-13 14:54:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflown9nqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"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":["u32_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"series_id":"aae1de02-8f14-4c4b-8577-5a2a6a5ec7b9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-13 14:54:43 +0000 UTC FinishedAt: 2026-08-13 17:56:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflown9nqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"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":["u32_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"series_id":"aae1de02-8f14-4c4b-8577-5a2a6a5ec7b9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-13 14:54:43 +0000 UTC FinishedAt: 2026-08-13 17:56:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*17d817e1-758a-48b0-aa65-cee87a987879,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*fe8d7d0e-fa8c-4ab8-a808-a2f4816029a3,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-workflown9nqq/series-workflown9nqq-build-action-126857070/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-workflown9nqq/series-workflown9nqq-build-action-2777572019/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-workflown9nqq/series-workflown9nqq-convert-artifact-713895224/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,}