Name: series-workflowrxhjx Phase: Succeeded StartedAt: 2026-08-27 19:01:57 +0000 UTC FinishedAt: 2026-08-27 23:07:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrxhjx[0] Phase: Succeeded StartedAt: 2026-08-27 19:01:57 +0000 UTC FinishedAt: 2026-08-27 19:27:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrxhjx[0].run-triage Phase: Succeeded StartedAt: 2026-08-27 19:01:57 +0000 UTC FinishedAt: 2026-08-27 19:27:01 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "44e96e364b04163ddddc8a24289cef4982b7e36e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING", "BLK_DEV_UBLK", "NVME_CORE", "BLK_DEV_NVME", "BLK_DEV_BSG", "BTRFS_FS", "FUSE_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "44e96e364b04163ddddc8a24289cef4982b7e36e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING", "BLK_DEV_UBLK", "NVME_CORE", "BLK_DEV_NVME", "BLK_DEV_BSG", "BTRFS_FS", "FUSE_FS" ], "series_id": "b53398fb-99bd-4448-a2a5-1c3e8e9daa8c" }, "track": "KASAN", "fuzz": { "focus": [ "fs", "io_uring" ], "focus_symbols": [ "io_uring_cmd_set_res", "io_uring_cmd_set_res32", "io_uring_cmd_done" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDE5OjIyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDssCiAgICAmIzM0O0JMS19ERVZfVUJMSyYjMzQ7LAogICAgJiMzNDtOVk1FX0NPUkUmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9OVk1FJiMzNDssCiAgICAmIzM0O0JMS19ERVZfQlNHJiMzNDssCiAgICAmIzM0O0JUUkZTX0ZTJiMzNDssCiAgICAmIzM0O0ZVU0VfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb191cmluZ19jbWRfc2V0X3JlcyYjMzQ7LAogICAgJiMzNDtpb191cmluZ19jbWRfc2V0X3JlczMyJiMzNDssCiAgICAmIzM0O2lvX3VyaW5nX2NtZF9kb25lJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBgaW9fdXJpbmdfY21kX2RvbmVgIEFQSSBieSBzcGxpdHRpbmcgaXQgaW50byBgaW9fdXJpbmdfY21kX3NldF9yZXNgL2Bpb191cmluZ19jbWRfc2V0X3JlczMyYCBhbmQgYGlvX3VyaW5nX2NtZF9kb25lYC4gVGhlIHZhbHVlcyBwYXNzZWQgdG8gdGhlc2UgZnVuY3Rpb25zIHJlbWFpbiB0aGUgc2FtZSBhcyBiZWZvcmUsIGFuZCBhbGwgZmllbGRzIGluIHRoZSBjb21wbGV0aW9uIHF1ZXVlIGVudHJ5IChDUUUpIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIChlLmcuLCBgZXh0cmEyYCBpcyBzZXQgdG8gMCBpbiBgaW9fcmVxX3NldF9yZXMzMmApLiBUaGVyZSBhcmUgbm8gbmV3IHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBubyBjaGFuZ2VzIHRvIGJvdW5kcyBjaGVja2luZywgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaC4gQW55IHBvdGVudGlhbCBidWdzIHdvdWxkIGJlIGxvZ2ljIGVycm9ycyBvciB1c2UtYWZ0ZXItZnJlZS9vdXQtb2YtYm91bmRzIGlzc3Vlcywgd2hpY2ggYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBLQVNBTiBhbmQgb3RoZXIgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgaW9fdXJpbmcgY29tbWFuZCBBUEkgYnkgc3BsaXR0aW5nIGBpb191cmluZ19jbWRfZG9uZWAgaW50byBgaW9fdXJpbmdfY21kX3NldF9yZXNgIChvciBgaW9fdXJpbmdfY21kX3NldF9yZXMzMmApIGFuZCBgaW9fdXJpbmdfY21kX2RvbmVgLiBUaGlzIGFmZmVjdHMgaG93IHJlc3VsdHMgYXJlIHJldHVybmVkIGZvciBpb191cmluZyBjb21tYW5kcyBhY3Jvc3MgbXVsdGlwbGUgc3Vic3lzdGVtcyBpbmNsdWRpbmcgYmxvY2ssIHVibGssIG52bWUsIHNjc2kgYnNnLCBidHJmcywgYW5kIGZ1c2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBrZXJuZWwgQVBJIGFuZCBpdHMgY2FsbGVycywgd2hpY2ggaXMgd29ydGggZnV6emluZyB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgaW5jb3JyZWN0IHJlc3VsdCBoYW5kbGluZyBhcmUgaW50cm9kdWNlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxOToyMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDM1ZjZjMWNkNWJjOWY3OWQ3N2M4NWY2YjFmNjhhYzNmNmYxYWEyYzNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAyNyAxOToyMjozMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9ibG9jay9pb2N0bC5jIGIvYmxvY2svaW9jdGwuY1xuaW5kZXggNjRiNGU2YzBmNjk2NS4uOTQ2Y2FiNzRmMjUzZSAxMDA2NDRcbi0tLSBhL2Jsb2NrL2lvY3RsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL2lvY3RsLmNcbkBAIC04NzEsOSAmIzQzOzg3MSwxMCBAQCBzdGF0aWMgdm9pZCBibGtfY21kX2NvbXBsZXRlKHN0cnVjdCBpb190d19yZXEgdHdfcmVxLCBpb190d190b2tlbl90IHR3KVxuIFxuIFx0aWYgKGJpYy1cdTAwM2VyZXMgPT0gLUVBR0FJTiBcdTAwMjZcdTAwMjYgYmljLVx1MDAzZW5vd2FpdClcbiBcdFx0aW9fdXJpbmdfY21kX2lzc3VlX2Jsb2NraW5nKGNtZCk7XG4tXHRlbHNlXG4tXHRcdGlvX3VyaW5nX2NtZF9kb25lKGNtZCwgYmljLVx1MDAzZXJlcyxcbi1cdFx0XHRcdCAgSU9fVVJJTkdfQ01EX1RBU0tfV09SS19JU1NVRV9GTEFHUyk7XG4mIzQzO1x0ZWxzZSB7XG4mIzQzO1x0XHRpb191cmluZ19jbWRfc2V0X3JlcyhjbWQsIGJpYy1cdTAwM2VyZXMpO1xuJiM0MztcdFx0aW9fdXJpbmdfY21kX2RvbmUoY21kLCBJT19VUklOR19DTURfVEFTS19XT1JLX0lTU1VFX0ZMQUdTKTtcbiYjNDM7XHR9XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGJpb19jbWRfYmlvX2VuZF9pbyhzdHJ1Y3QgYmlvICpiaW8pXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay91YmxrX2Rydi5jIGIvZHJpdmVycy9ibG9jay91YmxrX2Rydi5jXG5pbmRleCA0ZDE3ZWQyNjRkYTFhLi41MWYxNWU1YjNjMDFkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibG9jay91YmxrX2Rydi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmNcbkBAIC04MzksNyAmIzQzOzgzOSw4IEBAIHN0YXRpYyB2b2lkIHVibGtfYmF0Y2hfZGVpbml0X2ZldGNoX2J1ZihzdHJ1Y3QgdWJsa19xdWV1ZSAqdWJxLFxuIFx0X191YmxrX3JlbGVhc2VfZmNtZCh1YnEpO1xuIFx0c3Bpbl91bmxvY2soXHUwMDI2dWJxLVx1MDAzZWV2dHNfbG9jayk7XG4gXG4tXHRpb191cmluZ19jbWRfZG9uZShmY21kLVx1MDAzZWNtZCwgcmVzLCBkYXRhLVx1MDAzZWlzc3VlX2ZsYWdzKTtcbiYjNDM7XHRpb191cmluZ19jbWRfc2V0X3JlcyhmY21kLVx1MDAzZWNtZCwgcmVzKTtcbiYjNDM7XHRpb191cmluZ19jbWRfZG9uZShmY21kLVx1MDAzZWNtZCwgZGF0YS1cdTAwM2Vpc3N1ZV9mbGFncyk7XG4gXHR1YmxrX2JhdGNoX2ZyZWVfZmNtZChmY21kKTtcbiB9XG4gXG5AQCAtMTY0Miw3ICYjNDM7MTY0Myw4IEBAIHN0YXRpYyB2b2lkIHVibGtfY29tcGxldGVfaW9fY21kKHN0cnVjdCB1YmxrX2lvICppbywgc3RydWN0IHJlcXVlc3QgKnJlcSxcbiBcdHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCA9IF9fdWJsa19wcmVwX2NvbXBsX2lvX2NtZChpbywgcmVxKTtcbiBcbiBcdC8qIHRlbGwgdWJsa3NydiBvbmUgaW8gcmVxdWVzdCBpcyBjb21pbmcgKi9cbi1cdGlvX3VyaW5nX2NtZF9kb25lKGNtZCwgcmVzLCBpc3N1ZV9mbGFncyk7XG4mIzQzO1x0aW9fdXJpbmdfY21kX3NldF9yZXMoY21kLCByZXMpO1xuJiM0MztcdGlvX3VyaW5nX2NtZF9kb25lKGNtZCwgaXNzdWVfZmxhZ3MpO1xuIH1cbiBcbiAjZGVmaW5lIFVCTEtfUkVRVUVVRV9ERUxBWV9NU1x0M1xuQEAgLTE3MjgsNyAmIzQzOzE3MzAsOCBAQCBzdGF0aWMgdm9pZCB1YmxrX2F1dG9fYnVmX2Rpc3BhdGNoKGNvbnN0IHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEsXG4gXG4gXHRpZiAocmVzICE9IEFVVE9fQlVGX1JFR19GQUlMKSB7XG4gXHRcdHVibGtfYXV0b19idWZfaW9fc2V0dXAodWJxLCByZXEsIGlvLCBjbWQsIHJlcyk7XG4tXHRcdGlvX3VyaW5nX2NtZF9kb25lKGNtZCwgVUJMS19JT19SRVNfT0ssIGlzc3VlX2ZsYWdzKTtcbiYjNDM7XHRcdGlvX3VyaW5nX2NtZF9zZXRfcmVzKGNtZCwgVUJMS19JT19SRVNfT0spO1xuJiM0MztcdFx0aW9fdXJpbmdfY21kX2RvbmUoY21kLCBpc3N1ZV9mbGFncyk7XG4gXHR9XG4gfVxuIFxuQEAgLTI3ODksOCAmIzQzOzI3OTIsMTAgQEAgc3RhdGljIHZvaWQgdWJsa19jYW5jZWxfY21kKHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEsIHUxNiB0YWcsXG4gXHR9XG4gXHRzcGluX3VubG9jayhcdTAwMjZ1YnEtXHUwMDNlY2FuY2VsX2xvY2spO1xuIFxuLVx0aWYgKCFkb25lIFx1MDAyNlx1MDAyNiBjbWQpXG4tXHRcdGlvX3VyaW5nX2NtZF9kb25lKGNtZCwgVUJMS19JT19SRVNfQUJPUlQsIGlzc3VlX2ZsYWdzKTtcbiYjNDM7XHRpZiAoIWRvbmUgXHUwMDI2XHUwMDI2IGNtZCkge1xuJiM0MztcdFx0aW9fdXJpbmdfY21kX3NldF9yZXMoY21kLCBVQkxLX0lPX1JFU19BQk9SVCk7XG4mIzQzO1x0XHRpb191cmluZ19jbWRfZG9uZShjbWQsIGlzc3VlX2ZsYWdzKTtcbiYjNDM7XHR9XG4gfVxuIFxuIC8qXG5AQCAtMjgxNiw3ICYjNDM7MjgyMSw4IEBAIHN0YXRpYyB2b2lkIHVibGtfYmF0Y2hfY2FuY2VsX2NtZChzdHJ1Y3QgdWJsa19xdWV1ZSAqdWJxLFxuIFx0c3Bpbl91bmxvY2soXHUwMDI2dWJxLVx1MDAzZWV2dHNfbG9jayk7XG4gXG4gXHRpZiAoZG9uZSkge1xuLVx0XHRpb191cmluZ19jbWRfZG9uZShmY21kLVx1MDAzZWNtZCwgVUJMS19JT19SRVNfQUJPUlQsIGlzc3VlX2ZsYWdzKTtcbiYjNDM7XHRcdGlvX3VyaW5nX2NtZF9zZXRfcmVzKGZjbWQtXHUwMDNlY21kLCBVQkxLX0lPX1JFU19BQk9SVCk7XG4mIzQzO1x0XHRpb191cmluZ19jbWRfZG9uZShmY21kLVx1MDAzZWNtZCwgaXNzdWVfZmxhZ3MpO1xuIFx0XHR1YmxrX2JhdGNoX2ZyZWVfZmNtZChmY21kKTtcbiBcdH1cbiB9XG5AQCAtMzUyNiw4ICYjNDM7MzUzMiwxMCBAQCBzdGF0aWMgdm9pZCB1YmxrX2NoX3VyaW5nX2NtZF9jYihzdHJ1Y3QgaW9fdHdfcmVxIHR3X3JlcSwgaW9fdHdfdG9rZW5fdCB0dylcbiBcbiBcdGlmICghdHcuY2FuY2VsKVxuIFx0XHRyZXQgPSB1YmxrX2NoX3VyaW5nX2NtZF9sb2NhbChjbWQsIGlzc3VlX2ZsYWdzKTtcbi1cdGlmIChyZXQgIT0gLUVJT0NCUVVFVUVEKVxuLVx0XHRpb191cmluZ19jbWRfZG9uZShjbWQsIHJldCwgaXNzdWVfZmxhZ3MpO1xuJiM0MztcdGlmIChyZXQgIT0gLUVJT0NCUVVFVUVEKSB7XG4mIzQzO1x0XHRpb191cmluZ19jbWRfc2V0X3JlcyhjbWQsIHJldCk7XG4mIzQzO1x0XHRpb191cmluZ19jbWRfZG9uZShjbWQsIGlzc3VlX2ZsYWdzKTtcbiYjNDM7XHR9XG4gfVxuIFxuIHN0YXRpYyBpbnQgdWJsa19jaF91cmluZ19jbWQoc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL2hvc3QvaW9jdGwuYyBiL2RyaXZlcnMvbnZtZS9ob3N0L2lvY3RsLmNcbmluZGV4IDY1MzlkNDc1MDA5ODYuLmI1MGJiYTIwNzgxOGIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jXG5AQCAtNDIzLDggJiM0Mzs0MjMsNiBAQCBzdHJ1Y3QgbnZtZV91cmluZ19kYXRhIHtcbiBzdHJ1Y3QgbnZtZV91cmluZ19jbWRfcGR1IHtcbiBcdHN0cnVjdCByZXF1ZXN0ICpyZXE7XG4gXHRzdHJ1Y3QgYmlvICpiaW87XG4tXHR1NjQgcmVzdWx0O1xuLVx0aW50IHN0YXR1cztcbiB9O1xuIFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IG52bWVfdXJpbmdfY21kX3BkdSAqbnZtZV91cmluZ19jbWRfcGR1KFxuQEAgLTQ0MCw4ICYjNDM7NDM4LDcgQEAgc3RhdGljIHZvaWQgbnZtZV91cmluZ190YXNrX2NiKHN0cnVjdCBpb190d19yZXEgdHdfcmVxLCBpb190d190b2tlbl90IHR3KVxuIFxuIFx0aWYgKHBkdS1cdTAwM2ViaW8pXG4gXHRcdGJsa19ycV91bm1hcF91c2VyKHBkdS1cdTAwM2ViaW8pO1xuLVx0aW9fdXJpbmdfY21kX2RvbmUzMihpb3VjbWQsIHBkdS1cdTAwM2VzdGF0dXMsIHBkdS1cdTAwM2VyZXN1bHQsXG4tXHRcdFx0ICAgIElPX1VSSU5HX0NNRF9UQVNLX1dPUktfSVNTVUVfRkxBR1MpO1xuJiM0MztcdGlvX3VyaW5nX2NtZF9kb25lKGlvdWNtZCwgSU9fVVJJTkdfQ01EX1RBU0tfV09SS19JU1NVRV9GTEFHUyk7XG4gfVxuIFxuIHN0YXRpYyBlbnVtIHJxX2VuZF9pb19yZXQgbnZtZV91cmluZ19jbWRfZW5kX2lvKHN0cnVjdCByZXF1ZXN0ICpyZXEsXG5AQCAtNDUwLDE1ICYjNDM7NDQ3LDE3IEBAIHN0YXRpYyBlbnVtIHJxX2VuZF9pb19yZXQgbnZtZV91cmluZ19jbWRfZW5kX2lvKHN0cnVjdCByZXF1ZXN0ICpyZXEsXG4ge1xuIFx0c3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y21kID0gcmVxLVx1MDAzZWVuZF9pb19kYXRhO1xuIFx0c3RydWN0IG52bWVfdXJpbmdfY21kX3BkdSAqcGR1ID0gbnZtZV91cmluZ19jbWRfcGR1KGlvdWNtZCk7XG4mIzQzO1x0dTY0IHJlc3VsdCA9IGxlNjRfdG9fY3B1KG52bWVfcmVxKHJlcSktXHUwMDNlcmVzdWx0LnU2NCk7XG4mIzQzO1x0aW50IHN0YXR1cztcbiBcbiBcdGlmIChudm1lX3JlcShyZXEpLVx1MDAzZWZsYWdzIFx1MDAyNiBOVk1FX1JFUV9DQU5DRUxMRUQpIHtcbi1cdFx0cGR1LVx1MDAzZXN0YXR1cyA9IC1FSU5UUjtcbiYjNDM7XHRcdHN0YXR1cyA9IC1FSU5UUjtcbiBcdH0gZWxzZSB7XG4tXHRcdHBkdS1cdTAwM2VzdGF0dXMgPSBudm1lX3JlcShyZXEpLVx1MDAzZXN0YXR1cztcbi1cdFx0aWYgKCFwZHUtXHUwMDNlc3RhdHVzKVxuLVx0XHRcdHBkdS1cdTAwM2VzdGF0dXMgPSBibGtfc3RhdHVzX3RvX2Vycm5vKGVycik7XG4mIzQzO1x0XHRzdGF0dXMgPSBudm1lX3JlcShyZXEpLVx1MDAzZXN0YXR1cztcbiYjNDM7XHRcdGlmICghc3RhdHVzKVxuJiM0MztcdFx0XHRzdGF0dXMgPSBibGtfc3RhdHVzX3RvX2Vycm5vKGVycik7XG4gXHR9XG4tXHRwZHUtXHUwMDNlcmVzdWx0ID0gbGU2NF90b19jcHUobnZtZV9yZXEocmVxKS1cdTAwM2VyZXN1bHQudTY0KTtcbiYjNDM7XHRpb191cmluZ19jbWRfc2V0X3JlczMyKGlvdWNtZCwgc3RhdHVzLCByZXN1bHQpO1xuIFxuIFx0LypcbiBcdCAqIEZvciBJT1BPTEwsIGNoZWNrIGlmIHRoaXMgY29tcGxldGlvbiBpcyBoYXBwZW5pbmcgaW4gdGhlIGNvbnRleHRcbkBAIC00NzEsNyAmIzQzOzQ3MCw3IEBAIHN0YXRpYyBlbnVtIHJxX2VuZF9pb19yZXQgbnZtZV91cmluZ19jbWRfZW5kX2lvKHN0cnVjdCByZXF1ZXN0ICpyZXEsXG4gXHQgICAgaW9iLVx1MDAzZXBvbGxfY3R4ID09IGlvX3VyaW5nX2NtZF9jdHhfaGFuZGxlKGlvdWNtZCkpIHtcbiBcdFx0aWYgKHBkdS1cdTAwM2ViaW8pXG4gXHRcdFx0YmxrX3JxX3VubWFwX3VzZXIocGR1LVx1MDAzZWJpbyk7XG4tXHRcdGlvX3VyaW5nX2NtZF9kb25lMzIoaW91Y21kLCBwZHUtXHUwMDNlc3RhdHVzLCBwZHUtXHUwMDNlcmVzdWx0LCAwKTtcbiYjNDM7XHRcdGlvX3VyaW5nX2NtZF9kb25lKGlvdWNtZCwgMCk7XG4gXHR9IGVsc2Uge1xuIFx0XHRpb191cmluZ19jbWRfZG9faW5fdGFza19sYXp5KGlvdWNtZCwgbnZtZV91cmluZ190YXNrX2NiKTtcbiBcdH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9ic2cuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX2JzZy5jXG5pbmRleCBlODBkZWM1MzE3NGVhLi44YjMyZDhlOGYyOWY5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfYnNnLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvc2NzaS9zY3NpX2JzZy5jXG5AQCAtNjAsOCAmIzQzOzYwLDggQEAgc3RhdGljIHZvaWQgc2NzaV9ic2dfdXJpbmdfdGFza19jYihzdHJ1Y3QgaW9fdHdfcmVxIHR3X3JlcSwgaW9fdHdfdG9rZW5fdCB0dylcbiBcdFx0XHRcdCAgc2NtZC1cdTAwM2VyZXNpZF9sZW4pO1xuIFxuIFx0YmxrX21xX2ZyZWVfcmVxdWVzdChycSk7XG4tXHRpb191cmluZ19jbWRfZG9uZTMyKGlvdWNtZCwgcmV0LCByZXMyLFxuLVx0XHRcdCAgICBJT19VUklOR19DTURfVEFTS19XT1JLX0lTU1VFX0ZMQUdTKTtcbiYjNDM7XHRpb191cmluZ19jbWRfc2V0X3JlczMyKGlvdWNtZCwgcmV0LCByZXMyKTtcbiYjNDM7XHRpb191cmluZ19jbWRfZG9uZShpb3VjbWQsIElPX1VSSU5HX0NNRF9UQVNLX1dPUktfSVNTVUVfRkxBR1MpO1xuIH1cbiBcbiBzdGF0aWMgZW51bSBycV9lbmRfaW9fcmV0IHNjc2lfYnNnX3VyaW5nX2NtZF9kb25lKHN0cnVjdCByZXF1ZXN0ICpyZXEsXG5kaWZmIC0tZ2l0IGEvZnMvYnRyZnMvaW9jdGwuYyBiL2ZzL2J0cmZzL2lvY3RsLmNcbmluZGV4IDcyYmM5ZDRmNzcwODcuLjA3MDU3YTcwODQ1MjkgMTAwNjQ0XG4tLS0gYS9mcy9idHJmcy9pb2N0bC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9idHJmcy9pb2N0bC5jXG5AQCAtNDYyMSw3ICYjNDM7NDYyMSw4IEBAIHN0YXRpYyB2b2lkIGJ0cmZzX3VyaW5nX3JlYWRfZmluaXNoZWQoc3RydWN0IGlvX3R3X3JlcSB0d19yZXEsIGlvX3R3X3Rva2VuX3QgdHcpXG4gXHRidHJmc191bmxvY2tfZXh0ZW50KGlvX3RyZWUsIHByaXYtXHUwMDNlc3RhcnQsIHByaXYtXHUwMDNlbG9ja2VuZCwgXHUwMDI2cHJpdi1cdTAwM2VjYWNoZWRfc3RhdGUpO1xuIFx0YnRyZnNfaW5vZGVfdW5sb2NrKGlub2RlLCBCVFJGU19JTE9DS19TSEFSRUQpO1xuIFxuLVx0aW9fdXJpbmdfY21kX2RvbmUoY21kLCByZXQsIElPX1VSSU5HX0NNRF9UQVNLX1dPUktfSVNTVUVfRkxBR1MpO1xuJiM0MztcdGlvX3VyaW5nX2NtZF9zZXRfcmVzKGNtZCwgcmV0KTtcbiYjNDM7XHRpb191cmluZ19jbWRfZG9uZShjbWQsIElPX1VSSU5HX0NNRF9UQVNLX1dPUktfSVNTVUVfRkxBR1MpO1xuIFx0YWRkX3JjaGFyKGN1cnJlbnQsIHJldCk7XG4gXG4gXHRmb3IgKGluZGV4ID0gMDsgaW5kZXggXHUwMDNjIHByaXYtXHUwMDNlbnJfcGFnZXM7IGluZGV4JiM0MzsmIzQzOylcbmRpZmYgLS1naXQgYS9mcy9mdXNlL2Rldl91cmluZy5jIGIvZnMvZnVzZS9kZXZfdXJpbmcuY1xuaW5kZXggNzdjOGNlYzQzZDljNi4uYzViYjUwMTgzZTFjNiAxMDA2NDRcbi0tLSBhL2ZzL2Z1c2UvZGV2X3VyaW5nLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Z1c2UvZGV2X3VyaW5nLmNcbkBAIC0zNjYsOCAmIzQzOzM2NiwxMCBAQCBzdGF0aWMgdm9pZCBmdXNlX3VyaW5nX2VudHJ5X3RlYXJkb3duKHN0cnVjdCBmdXNlX3JpbmdfZW50ICplbnQpXG4gXHRlbnQtXHUwMDNlc3RhdGUgPSBGUlJTX1JFTEVBU0VEO1xuIFx0c3Bpbl91bmxvY2soXHUwMDI2cXVldWUtXHUwMDNlbG9jayk7XG4gXG4tXHRpZiAoY21kKVxuLVx0XHRpb191cmluZ19jbWRfZG9uZShjbWQsIC1FTk9UQ09OTiwgSU9fVVJJTkdfRl9VTkxPQ0tFRCk7XG4mIzQzO1x0aWYgKGNtZCkge1xuJiM0MztcdFx0aW9fdXJpbmdfY21kX3NldF9yZXMoY21kLCAtRU5PVENPTk4pO1xuJiM0MztcdFx0aW9fdXJpbmdfY21kX2RvbmUoY21kLCBJT19VUklOR19GX1VOTE9DS0VEKTtcbiYjNDM7XHR9XG4gXG4gXHRpZiAocmVxKVxuIFx0XHRmdXNlX3VyaW5nX3N0b3BfZnVzZV9yZXFfZW5kKHJlcSk7XG5AQCAtNTMxLDcgJiM0Mzs1MzMsOCBAQCBzdGF0aWMgdm9pZCBmdXNlX3VyaW5nX2NhbmNlbChzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsXG4gXG4gXHRpZiAobmVlZF9jbWRfZG9uZSkge1xuIFx0XHQvKiBubyBxdWV1ZSBsb2NrIHRvIGF2b2lkIGxvY2sgb3JkZXIgaXNzdWVzICovXG4tXHRcdGlvX3VyaW5nX2NtZF9kb25lKGNtZCwgLUVOT1RDT05OLCBpc3N1ZV9mbGFncyk7XG4mIzQzO1x0XHRpb191cmluZ19jbWRfc2V0X3JlcyhjbWQsIC1FTk9UQ09OTik7XG4mIzQzO1x0XHRpb191cmluZ19jbWRfZG9uZShjbWQsIGlzc3VlX2ZsYWdzKTtcbiBcdFx0a2ZyZWUoZW50KTtcbiBcdFx0aWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoXHUwMDI2cXVldWUtXHUwMDNlcmluZy1cdTAwM2VxdWV1ZV9yZWZzKSlcbiBcdFx0XHR3YWtlX3VwX2FsbChcdTAwMjZxdWV1ZS1cdTAwM2VyaW5nLVx1MDAzZXN0b3Bfd2FpdHEpO1xuQEAgLTk0Miw3ICYjNDM7OTQ1LDggQEAgc3RhdGljIHZvaWQgZnVzZV91cmluZ19zZW5kKHN0cnVjdCBmdXNlX3JpbmdfZW50ICplbnQsIHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCxcbiBcdGZ1c2VfdXJpbmdfYWRkX3RvX3BxKGVudCk7XG4gXHRzcGluX3VubG9jayhcdTAwMjZxdWV1ZS1cdTAwM2Vsb2NrKTtcbiBcbi1cdGlvX3VyaW5nX2NtZF9kb25lKGNtZCwgcmV0LCBpc3N1ZV9mbGFncyk7XG4mIzQzO1x0aW9fdXJpbmdfY21kX3NldF9yZXMoY21kLCByZXQpO1xuJiM0MztcdGlvX3VyaW5nX2NtZF9kb25lKGNtZCwgaXNzdWVfZmxhZ3MpO1xuIH1cbiBcbiAvKiBGVVNFX1VSSU5HX0NNRF9DT01NSVRfQU5EX0ZFVENIIGhhbmRsZXIgKi9cbkBAIC0xMzA5LDcgJiM0MzsxMzEzLDggQEAgc3RhdGljIHZvaWQgZnVzZV91cmluZ19zZW5kX2luX3Rhc2soc3RydWN0IGlvX3R3X3JlcSB0d19yZXEsIGlvX3R3X3Rva2VuX3QgdHcpXG4gXHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2ZW50LVx1MDAzZWxpc3QpO1xuIFx0XHRzcGluX3VubG9jayhcdTAwMjZxdWV1ZS1cdTAwM2Vsb2NrKTtcbiBcbi1cdFx0aW9fdXJpbmdfY21kX2RvbmUoY21kLCBlcnIsIGlzc3VlX2ZsYWdzKTtcbiYjNDM7XHRcdGlvX3VyaW5nX2NtZF9zZXRfcmVzKGNtZCwgZXJyKTtcbiYjNDM7XHRcdGlvX3VyaW5nX2NtZF9kb25lKGNtZCwgaXNzdWVfZmxhZ3MpO1xuIFxuIFx0XHRmdXNlX3VyaW5nX3JlcV9lbmQoZW50LCBlbnQtXHUwMDNlZnVzZV9yZXEsIGVycik7XG4gXHRcdGtmcmVlKGVudCk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pb191cmluZy9jbWQuaCBiL2luY2x1ZGUvbGludXgvaW9fdXJpbmcvY21kLmhcbmluZGV4IDMzMWRjYmVmZTcyZjEuLjk2ZmNjMDYwOTdjNGUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2lvX3VyaW5nL2NtZC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2lvX3VyaW5nL2NtZC5oXG5AQCAtNTIsNiAmIzQzOzUyLDEwIEBAIGludCBpb191cmluZ19jbWRfaW1wb3J0X2ZpeGVkX3ZlYyhzdHJ1Y3QgaW9fdXJpbmdfY21kICppb3VjbWQsXG4gXHRcdFx0XHQgIGludCBkZGlyLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4gXHRcdFx0XHQgIHVuc2lnbmVkIGlzc3VlX2ZsYWdzKTtcbiBcbiYjNDM7LyogT25lIG9mIHRoZXNlIG11c3QgYmUgY2FsbGVkIHByaW9yIHRvIGlvX3VyaW5nX2NtZF9kb25lKCkgKi9cbiYjNDM7dm9pZCBpb191cmluZ19jbWRfc2V0X3JlcyhzdHJ1Y3QgaW9fdXJpbmdfY21kICosIHMzMiByZXQpO1xuJiM0Mzt2b2lkIGlvX3VyaW5nX2NtZF9zZXRfcmVzMzIoc3RydWN0IGlvX3VyaW5nX2NtZCAqLCBzMzIgcmV0LCB1NjQgcmVzMik7XG4mIzQzO1xuIC8qXG4gICogQ29tcGxldGVzIHRoZSByZXF1ZXN0LCBpLmUuIHBvc3RzIGFuIGlvX3VyaW5nIENRRSBhbmQgZGVhbGxvY2F0ZXMgQGlvdWNtZFxuICAqIGFuZCB0aGUgY29ycmVzcG9uZGluZyBpb191cmluZyByZXF1ZXN0LlxuQEAgLTU5LDggJiM0Mzs2Myw3IEBAIGludCBpb191cmluZ19jbWRfaW1wb3J0X2ZpeGVkX3ZlYyhzdHJ1Y3QgaW9fdXJpbmdfY21kICppb3VjbWQsXG4gICogTm90ZTogdGhlIGNhbGxlciBzaG91bGQgbmV2ZXIgaGFyZCBjb2RlIEBpc3N1ZV9mbGFncyBhbmQgaXMgb25seSBhbGxvd2VkXG4gICogdG8gcGFzcyB0aGUgbWFzayBwcm92aWRlZCBieSB0aGUgY29yZSBpb191cmluZyBjb2RlLlxuICAqL1xuLXZvaWQgX19pb191cmluZ19jbWRfZG9uZShzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsIHMzMiByZXQsIHU2NCByZXMyLFxuLVx0XHRcdCB1bnNpZ25lZCBpc3N1ZV9mbGFncywgYm9vbCBpc19jcWUzMik7XG4mIzQzO3ZvaWQgaW9fdXJpbmdfY21kX2RvbmUoc3RydWN0IGlvX3VyaW5nX2NtZCAqLCB1bnNpZ25lZCBpc3N1ZV9mbGFncyk7XG4gXG4gdm9pZCBfX2lvX3VyaW5nX2NtZF9kb19pbl90YXNrKHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCxcbiBcdFx0XHQgICAgaW9fcmVxX3R3X2Z1bmNfdCB0YXNrX3dvcmtfY2IsXG5AQCAtMTA3LDggJiM0MzsxMTAsMTUgQEAgc3RhdGljIGlubGluZSBpbnQgaW9fdXJpbmdfY21kX2ltcG9ydF9maXhlZF92ZWMoc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y21kLFxuIHtcbiBcdHJldHVybiAtRU9QTk9UU1VQUDtcbiB9XG4tc3RhdGljIGlubGluZSB2b2lkIF9faW9fdXJpbmdfY21kX2RvbmUoc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLCBzMzIgcmV0LFxuLVx0XHR1NjQgcmV0MiwgdW5zaWduZWQgaXNzdWVfZmxhZ3MsIGJvb2wgaXNfY3FlMzIpXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBpb191cmluZ19jbWRfc2V0X3JlcyhzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsIHMzMiByZXQpXG4mIzQzO3tcbiYjNDM7fVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgaW9fdXJpbmdfY21kX3NldF9yZXMzMihzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsIHMzMiByZXQsXG4mIzQzO1x0XHRcdFx0XHQgIHU2NCByZXMyKVxuJiM0Mzt7XG4mIzQzO31cbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGlvX3VyaW5nX2NtZF9kb25lKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCxcbiYjNDM7XHRcdFx0XHQgICAgIHVuc2lnbmVkIGlzc3VlX2ZsYWdzKVxuIHtcbiB9XG4gc3RhdGljIGlubGluZSB2b2lkIF9faW9fdXJpbmdfY21kX2RvX2luX3Rhc2soc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y21kLFxuQEAgLTE3MCwxOCAmIzQzOzE4MCw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCAqaW9fdXJpbmdfY21kX2N0eF9oYW5kbGUoc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kKVxuIFx0cmV0dXJuIGNtZF90b19pb19raW9jYihjbWQpLVx1MDAzZWN0eDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIGlvX3VyaW5nX2NtZF9kb25lKHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCwgczMyIHJldCxcbi1cdFx0XHRcdCAgICAgdW5zaWduZWQgaXNzdWVfZmxhZ3MpXG4te1xuLVx0cmV0dXJuIF9faW9fdXJpbmdfY21kX2RvbmUoaW91Y21kLCByZXQsIDAsIGlzc3VlX2ZsYWdzLCBmYWxzZSk7XG4tfVxuLVxuLXN0YXRpYyBpbmxpbmUgdm9pZCBpb191cmluZ19jbWRfZG9uZTMyKHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCwgczMyIHJldCxcbi1cdFx0XHRcdCAgICAgICB1NjQgcmVzMiwgdW5zaWduZWQgaXNzdWVfZmxhZ3MpXG4te1xuLVx0cmV0dXJuIF9faW9fdXJpbmdfY21kX2RvbmUoaW91Y21kLCByZXQsIHJlczIsIGlzc3VlX2ZsYWdzLCB0cnVlKTtcbi19XG4tXG4gaW50IGlvX2J1ZmZlcl9yZWdpc3Rlcl9idmVjKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCwgc3RydWN0IHJlcXVlc3QgKnJxLFxuIFx0XHRcdCAgICB2b2lkICgqcmVsZWFzZSkodm9pZCAqKSwgdW5zaWduZWQgaW50IGluZGV4LFxuIFx0XHRcdCAgICB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpO1xuZGlmZiAtLWdpdCBhL2lvX3VyaW5nL3VyaW5nX2NtZC5jIGIvaW9fdXJpbmcvdXJpbmdfY21kLmNcbmluZGV4IDcyNmE2NTlmMzhjMzguLmVmM2U3ZTM1MmM2YWYgMTAwNjQ0XG4tLS0gYS9pb191cmluZy91cmluZ19jbWQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvaW9fdXJpbmcvdXJpbmdfY21kLmNcbkBAIC0xMzgsMTkgJiM0MzsxMzgsMzEgQEAgdm9pZCBfX2lvX3VyaW5nX2NtZF9kb19pbl90YXNrKHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCxcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoX19pb191cmluZ19jbWRfZG9faW5fdGFzayk7XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIGlvX3JlcV9zZXRfY3FlMzJfZXh0cmEoc3RydWN0IGlvX2tpb2NiICpyZXEsXG4tXHRcdFx0XHRcdCAgdTY0IGV4dHJhMSwgdTY0IGV4dHJhMilcbiYjNDM7dm9pZCBpb191cmluZ19jbWRfc2V0X3JlcyhzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsIHMzMiByZXQpXG4ge1xuLVx0cmVxLVx1MDAzZWJpZ19jcWUuZXh0cmExID0gZXh0cmExO1xuLVx0cmVxLVx1MDAzZWJpZ19jcWUuZXh0cmEyID0gZXh0cmEyO1xuJiM0MztcdHN0cnVjdCBpb19raW9jYiAqcmVxID0gY21kX3RvX2lvX2tpb2NiKGNtZCk7XG4mIzQzO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXFfc2V0X2ZhaWwocmVxKTtcbiYjNDM7XHRpb19yZXFfc2V0X3JlcyhyZXEsIHJldCwgMCk7XG4gfVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChpb191cmluZ19jbWRfc2V0X3Jlcyk7XG4mIzQzO1xuJiM0Mzt2b2lkIGlvX3VyaW5nX2NtZF9zZXRfcmVzMzIoc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLCBzMzIgcmV0LCB1NjQgcmVzMilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpb19raW9jYiAqcmVxID0gY21kX3RvX2lvX2tpb2NiKGNtZCk7XG4mIzQzO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXFfc2V0X2ZhaWwocmVxKTtcbiYjNDM7XHRpb19yZXFfc2V0X3JlczMyKHJlcSwgcmV0LCAwLCByZXMyLCAwKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChpb191cmluZ19jbWRfc2V0X3JlczMyKTtcbiBcbiAvKlxuICAqIENhbGxlZCBieSBjb25zdW1lcnMgb2YgaW9fdXJpbmdfY21kLCBpZiB0aGV5IG9yaWdpbmFsbHkgcmV0dXJuZWRcbiAgKiAtRUlPQ0JRVUVVRUQgdXBvbiByZWNlaXZpbmcgdGhlIGNvbW1hbmQuXG4gICovXG4tdm9pZCBfX2lvX3VyaW5nX2NtZF9kb25lKHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCwgczMyIHJldCwgdTY0IHJlczIsXG4tXHRcdCAgICAgICB1bnNpZ25lZCBpc3N1ZV9mbGFncywgYm9vbCBpc19jcWUzMilcbiYjNDM7dm9pZCBpb191cmluZ19jbWRfZG9uZShzdHJ1Y3QgaW9fdXJpbmdfY21kICppb3VjbWQsIHVuc2lnbmVkIGlzc3VlX2ZsYWdzKVxuIHtcbiBcdHN0cnVjdCBpb19raW9jYiAqcmVxID0gY21kX3RvX2lvX2tpb2NiKGlvdWNtZCk7XG4gXG5AQCAtMTU5LDE1ICYjNDM7MTcxLDYgQEAgdm9pZCBfX2lvX3VyaW5nX2NtZF9kb25lKHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCwgczMyIHJldCwgdTY0IHJlczIsXG4gXG4gXHRpb191cmluZ19jbWRfZGVsX2NhbmNlbGFibGUoaW91Y21kLCBpc3N1ZV9mbGFncyk7XG4gXG4tXHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRyZXFfc2V0X2ZhaWwocmVxKTtcbi1cbi1cdGlvX3JlcV9zZXRfcmVzKHJlcSwgcmV0LCAwKTtcbi1cdGlmIChpc19jcWUzMikge1xuLVx0XHRpZiAocmVxLVx1MDAzZWN0eC1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1NFVFVQX0NRRV9NSVhFRClcbi1cdFx0XHRyZXEtXHUwMDNlY3FlLmZsYWdzIHw9IElPUklOR19DUUVfRl8zMjtcbi1cdFx0aW9fcmVxX3NldF9jcWUzMl9leHRyYShyZXEsIHJlczIsIDApO1xuLVx0fVxuIFx0aW9fcmVxX3VyaW5nX2NsZWFudXAocmVxLCBpc3N1ZV9mbGFncyk7XG4gXHRpZiAocmVxLVx1MDAzZWZsYWdzIFx1MDAyNiBSRVFfRl9JT1BPTEwpIHtcbiBcdFx0Lyogb3JkZXIgd2l0aCBpb19kb19pb3BvbGwoKSBjaGVja2luZyAtXHUwMDNlaW9wb2xsX2NvbXBsZXRlZCAqL1xuQEAgLTE4MSw3ICYjNDM7MTg0LDcgQEAgdm9pZCBfX2lvX3VyaW5nX2NtZF9kb25lKHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCwgczMyIHJldCwgdTY0IHJlczIsXG4gXHRcdGlvX3JlcV90YXNrX3dvcmtfYWRkKHJlcSk7XG4gXHR9XG4gfVxuLUVYUE9SVF9TWU1CT0xfR1BMKF9faW9fdXJpbmdfY21kX2RvbmUpO1xuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChpb191cmluZ19jbWRfZG9uZSk7XG4gXG4gaW50IGlvX3VyaW5nX2NtZF9wcmVwKHN0cnVjdCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpXG4ge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDE5OjIyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJT19VUklORyYjMzQ7LAogICAgJiMzNDtCTEtfREVWX1VCTEsmIzM0OywKICAgICYjMzQ7TlZNRV9DT1JFJiMzNDssCiAgICAmIzM0O0JMS19ERVZfTlZNRSYjMzQ7LAogICAgJiMzNDtCTEtfREVWX0JTRyYjMzQ7LAogICAgJiMzNDtCVFJGU19GUyYjMzQ7LAogICAgJiMzNDtGVVNFX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW9fdXJpbmdfY21kX3NldF9yZXMmIzM0OywKICAgICYjMzQ7aW9fdXJpbmdfY21kX3NldF9yZXMzMiYjMzQ7LAogICAgJiMzNDtpb191cmluZ19jbWRfZG9uZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBpb191cmluZyBjb21tYW5kIEFQSSBieSBzcGxpdHRpbmcgYGlvX3VyaW5nX2NtZF9kb25lYCBpbnRvIGBpb191cmluZ19jbWRfc2V0X3Jlc2AgKG9yIGBpb191cmluZ19jbWRfc2V0X3JlczMyYCkgYW5kIGBpb191cmluZ19jbWRfZG9uZWAuIFRoaXMgYWZmZWN0cyBob3cgcmVzdWx0cyBhcmUgcmV0dXJuZWQgZm9yIGlvX3VyaW5nIGNvbW1hbmRzIGFjcm9zcyBtdWx0aXBsZSBzdWJzeXN0ZW1zIGluY2x1ZGluZyBibG9jaywgdWJsaywgbnZtZSwgc2NzaSBic2csIGJ0cmZzLCBhbmQgZnVzZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGtlcm5lbCBBUEkgYW5kIGl0cyBjYWxsZXJzLCB3aGljaCBpcyB3b3J0aCBmdXp6aW5nIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBpbmNvcnJlY3QgcmVzdWx0IGhhbmRsaW5nIGFyZSBpbnRyb2R1Y2VkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMzVmNmMxY2Q1YmM5Zjc5ZDc3Yzg1ZjZiMWY2OGFjM2Y2ZjFhYTJjMwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDI3IDE5OjIyOjMzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYmxvY2svaW9jdGwuYyBiL2Jsb2NrL2lvY3RsLmMKaW5kZXggNjRiNGU2YzBmNjk2NS4uOTQ2Y2FiNzRmMjUzZSAxMDA2NDQKLS0tIGEvYmxvY2svaW9jdGwuYwomIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9pb2N0bC5jCkBAIC04NzEsOSAmIzQzOzg3MSwxMCBAQCBzdGF0aWMgdm9pZCBibGtfY21kX2NvbXBsZXRlKHN0cnVjdCBpb190d19yZXEgdHdfcmVxLCBpb190d190b2tlbl90IHR3KQogCiAJaWYgKGJpYy0mZ3Q7cmVzID09IC1FQUdBSU4gJmFtcDsmYW1wOyBiaWMtJmd0O25vd2FpdCkKIAkJaW9fdXJpbmdfY21kX2lzc3VlX2Jsb2NraW5nKGNtZCk7Ci0JZWxzZQotCQlpb191cmluZ19jbWRfZG9uZShjbWQsIGJpYy0mZ3Q7cmVzLAotCQkJCSAgSU9fVVJJTkdfQ01EX1RBU0tfV09SS19JU1NVRV9GTEFHUyk7CiYjNDM7CWVsc2UgewomIzQzOwkJaW9fdXJpbmdfY21kX3NldF9yZXMoY21kLCBiaWMtJmd0O3Jlcyk7CiYjNDM7CQlpb191cmluZ19jbWRfZG9uZShjbWQsIElPX1VSSU5HX0NNRF9UQVNLX1dPUktfSVNTVUVfRkxBR1MpOwomIzQzOwl9CiB9CiAKIHN0YXRpYyB2b2lkIGJpb19jbWRfYmlvX2VuZF9pbyhzdHJ1Y3QgYmlvICpiaW8pCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMgYi9kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMKaW5kZXggNGQxN2VkMjY0ZGExYS4uNTFmMTVlNWIzYzAxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay91YmxrX2Rydi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svdWJsa19kcnYuYwpAQCAtODM5LDcgJiM0Mzs4MzksOCBAQCBzdGF0aWMgdm9pZCB1YmxrX2JhdGNoX2RlaW5pdF9mZXRjaF9idWYoc3RydWN0IHVibGtfcXVldWUgKnVicSwKIAlfX3VibGtfcmVsZWFzZV9mY21kKHVicSk7CiAJc3Bpbl91bmxvY2soJmFtcDt1YnEtJmd0O2V2dHNfbG9jayk7CiAKLQlpb191cmluZ19jbWRfZG9uZShmY21kLSZndDtjbWQsIHJlcywgZGF0YS0mZ3Q7aXNzdWVfZmxhZ3MpOwomIzQzOwlpb191cmluZ19jbWRfc2V0X3JlcyhmY21kLSZndDtjbWQsIHJlcyk7CiYjNDM7CWlvX3VyaW5nX2NtZF9kb25lKGZjbWQtJmd0O2NtZCwgZGF0YS0mZ3Q7aXNzdWVfZmxhZ3MpOwogCXVibGtfYmF0Y2hfZnJlZV9mY21kKGZjbWQpOwogfQogCkBAIC0xNjQyLDcgJiM0MzsxNjQzLDggQEAgc3RhdGljIHZvaWQgdWJsa19jb21wbGV0ZV9pb19jbWQoc3RydWN0IHVibGtfaW8gKmlvLCBzdHJ1Y3QgcmVxdWVzdCAqcmVxLAogCXN0cnVjdCBpb191cmluZ19jbWQgKmNtZCA9IF9fdWJsa19wcmVwX2NvbXBsX2lvX2NtZChpbywgcmVxKTsKIAogCS8qIHRlbGwgdWJsa3NydiBvbmUgaW8gcmVxdWVzdCBpcyBjb21pbmcgKi8KLQlpb191cmluZ19jbWRfZG9uZShjbWQsIHJlcywgaXNzdWVfZmxhZ3MpOwomIzQzOwlpb191cmluZ19jbWRfc2V0X3JlcyhjbWQsIHJlcyk7CiYjNDM7CWlvX3VyaW5nX2NtZF9kb25lKGNtZCwgaXNzdWVfZmxhZ3MpOwogfQogCiAjZGVmaW5lIFVCTEtfUkVRVUVVRV9ERUxBWV9NUwkzCkBAIC0xNzI4LDcgJiM0MzsxNzMwLDggQEAgc3RhdGljIHZvaWQgdWJsa19hdXRvX2J1Zl9kaXNwYXRjaChjb25zdCBzdHJ1Y3QgdWJsa19xdWV1ZSAqdWJxLAogCiAJaWYgKHJlcyAhPSBBVVRPX0JVRl9SRUdfRkFJTCkgewogCQl1YmxrX2F1dG9fYnVmX2lvX3NldHVwKHVicSwgcmVxLCBpbywgY21kLCByZXMpOwotCQlpb191cmluZ19jbWRfZG9uZShjbWQsIFVCTEtfSU9fUkVTX09LLCBpc3N1ZV9mbGFncyk7CiYjNDM7CQlpb191cmluZ19jbWRfc2V0X3JlcyhjbWQsIFVCTEtfSU9fUkVTX09LKTsKJiM0MzsJCWlvX3VyaW5nX2NtZF9kb25lKGNtZCwgaXNzdWVfZmxhZ3MpOwogCX0KIH0KIApAQCAtMjc4OSw4ICYjNDM7Mjc5MiwxMCBAQCBzdGF0aWMgdm9pZCB1YmxrX2NhbmNlbF9jbWQoc3RydWN0IHVibGtfcXVldWUgKnVicSwgdTE2IHRhZywKIAl9CiAJc3Bpbl91bmxvY2soJmFtcDt1YnEtJmd0O2NhbmNlbF9sb2NrKTsKIAotCWlmICghZG9uZSAmYW1wOyZhbXA7IGNtZCkKLQkJaW9fdXJpbmdfY21kX2RvbmUoY21kLCBVQkxLX0lPX1JFU19BQk9SVCwgaXNzdWVfZmxhZ3MpOwomIzQzOwlpZiAoIWRvbmUgJmFtcDsmYW1wOyBjbWQpIHsKJiM0MzsJCWlvX3VyaW5nX2NtZF9zZXRfcmVzKGNtZCwgVUJMS19JT19SRVNfQUJPUlQpOwomIzQzOwkJaW9fdXJpbmdfY21kX2RvbmUoY21kLCBpc3N1ZV9mbGFncyk7CiYjNDM7CX0KIH0KIAogLyoKQEAgLTI4MTYsNyAmIzQzOzI4MjEsOCBAQCBzdGF0aWMgdm9pZCB1YmxrX2JhdGNoX2NhbmNlbF9jbWQoc3RydWN0IHVibGtfcXVldWUgKnVicSwKIAlzcGluX3VubG9jaygmYW1wO3VicS0mZ3Q7ZXZ0c19sb2NrKTsKIAogCWlmIChkb25lKSB7Ci0JCWlvX3VyaW5nX2NtZF9kb25lKGZjbWQtJmd0O2NtZCwgVUJMS19JT19SRVNfQUJPUlQsIGlzc3VlX2ZsYWdzKTsKJiM0MzsJCWlvX3VyaW5nX2NtZF9zZXRfcmVzKGZjbWQtJmd0O2NtZCwgVUJMS19JT19SRVNfQUJPUlQpOwomIzQzOwkJaW9fdXJpbmdfY21kX2RvbmUoZmNtZC0mZ3Q7Y21kLCBpc3N1ZV9mbGFncyk7CiAJCXVibGtfYmF0Y2hfZnJlZV9mY21kKGZjbWQpOwogCX0KIH0KQEAgLTM1MjYsOCAmIzQzOzM1MzIsMTAgQEAgc3RhdGljIHZvaWQgdWJsa19jaF91cmluZ19jbWRfY2Ioc3RydWN0IGlvX3R3X3JlcSB0d19yZXEsIGlvX3R3X3Rva2VuX3QgdHcpCiAKIAlpZiAoIXR3LmNhbmNlbCkKIAkJcmV0ID0gdWJsa19jaF91cmluZ19jbWRfbG9jYWwoY21kLCBpc3N1ZV9mbGFncyk7Ci0JaWYgKHJldCAhPSAtRUlPQ0JRVUVVRUQpCi0JCWlvX3VyaW5nX2NtZF9kb25lKGNtZCwgcmV0LCBpc3N1ZV9mbGFncyk7CiYjNDM7CWlmIChyZXQgIT0gLUVJT0NCUVVFVUVEKSB7CiYjNDM7CQlpb191cmluZ19jbWRfc2V0X3JlcyhjbWQsIHJldCk7CiYjNDM7CQlpb191cmluZ19jbWRfZG9uZShjbWQsIGlzc3VlX2ZsYWdzKTsKJiM0MzsJfQogfQogCiBzdGF0aWMgaW50IHVibGtfY2hfdXJpbmdfY21kKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL2hvc3QvaW9jdGwuYyBiL2RyaXZlcnMvbnZtZS9ob3N0L2lvY3RsLmMKaW5kZXggNjUzOWQ0NzUwMDk4Ni4uYjUwYmJhMjA3ODE4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9udm1lL2hvc3QvaW9jdGwuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jCkBAIC00MjMsOCAmIzQzOzQyMyw2IEBAIHN0cnVjdCBudm1lX3VyaW5nX2RhdGEgewogc3RydWN0IG52bWVfdXJpbmdfY21kX3BkdSB7CiAJc3RydWN0IHJlcXVlc3QgKnJlcTsKIAlzdHJ1Y3QgYmlvICpiaW87Ci0JdTY0IHJlc3VsdDsKLQlpbnQgc3RhdHVzOwogfTsKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgbnZtZV91cmluZ19jbWRfcGR1ICpudm1lX3VyaW5nX2NtZF9wZHUoCkBAIC00NDAsOCAmIzQzOzQzOCw3IEBAIHN0YXRpYyB2b2lkIG52bWVfdXJpbmdfdGFza19jYihzdHJ1Y3QgaW9fdHdfcmVxIHR3X3JlcSwgaW9fdHdfdG9rZW5fdCB0dykKIAogCWlmIChwZHUtJmd0O2JpbykKIAkJYmxrX3JxX3VubWFwX3VzZXIocGR1LSZndDtiaW8pOwotCWlvX3VyaW5nX2NtZF9kb25lMzIoaW91Y21kLCBwZHUtJmd0O3N0YXR1cywgcGR1LSZndDtyZXN1bHQsCi0JCQkgICAgSU9fVVJJTkdfQ01EX1RBU0tfV09SS19JU1NVRV9GTEFHUyk7CiYjNDM7CWlvX3VyaW5nX2NtZF9kb25lKGlvdWNtZCwgSU9fVVJJTkdfQ01EX1RBU0tfV09SS19JU1NVRV9GTEFHUyk7CiB9CiAKIHN0YXRpYyBlbnVtIHJxX2VuZF9pb19yZXQgbnZtZV91cmluZ19jbWRfZW5kX2lvKHN0cnVjdCByZXF1ZXN0ICpyZXEsCkBAIC00NTAsMTUgJiM0Mzs0NDcsMTcgQEAgc3RhdGljIGVudW0gcnFfZW5kX2lvX3JldCBudm1lX3VyaW5nX2NtZF9lbmRfaW8oc3RydWN0IHJlcXVlc3QgKnJlcSwKIHsKIAlzdHJ1Y3QgaW9fdXJpbmdfY21kICppb3VjbWQgPSByZXEtJmd0O2VuZF9pb19kYXRhOwogCXN0cnVjdCBudm1lX3VyaW5nX2NtZF9wZHUgKnBkdSA9IG52bWVfdXJpbmdfY21kX3BkdShpb3VjbWQpOwomIzQzOwl1NjQgcmVzdWx0ID0gbGU2NF90b19jcHUobnZtZV9yZXEocmVxKS0mZ3Q7cmVzdWx0LnU2NCk7CiYjNDM7CWludCBzdGF0dXM7CiAKIAlpZiAobnZtZV9yZXEocmVxKS0mZ3Q7ZmxhZ3MgJmFtcDsgTlZNRV9SRVFfQ0FOQ0VMTEVEKSB7Ci0JCXBkdS0mZ3Q7c3RhdHVzID0gLUVJTlRSOwomIzQzOwkJc3RhdHVzID0gLUVJTlRSOwogCX0gZWxzZSB7Ci0JCXBkdS0mZ3Q7c3RhdHVzID0gbnZtZV9yZXEocmVxKS0mZ3Q7c3RhdHVzOwotCQlpZiAoIXBkdS0mZ3Q7c3RhdHVzKQotCQkJcGR1LSZndDtzdGF0dXMgPSBibGtfc3RhdHVzX3RvX2Vycm5vKGVycik7CiYjNDM7CQlzdGF0dXMgPSBudm1lX3JlcShyZXEpLSZndDtzdGF0dXM7CiYjNDM7CQlpZiAoIXN0YXR1cykKJiM0MzsJCQlzdGF0dXMgPSBibGtfc3RhdHVzX3RvX2Vycm5vKGVycik7CiAJfQotCXBkdS0mZ3Q7cmVzdWx0ID0gbGU2NF90b19jcHUobnZtZV9yZXEocmVxKS0mZ3Q7cmVzdWx0LnU2NCk7CiYjNDM7CWlvX3VyaW5nX2NtZF9zZXRfcmVzMzIoaW91Y21kLCBzdGF0dXMsIHJlc3VsdCk7CiAKIAkvKgogCSAqIEZvciBJT1BPTEwsIGNoZWNrIGlmIHRoaXMgY29tcGxldGlvbiBpcyBoYXBwZW5pbmcgaW4gdGhlIGNvbnRleHQKQEAgLTQ3MSw3ICYjNDM7NDcwLDcgQEAgc3RhdGljIGVudW0gcnFfZW5kX2lvX3JldCBudm1lX3VyaW5nX2NtZF9lbmRfaW8oc3RydWN0IHJlcXVlc3QgKnJlcSwKIAkgICAgaW9iLSZndDtwb2xsX2N0eCA9PSBpb191cmluZ19jbWRfY3R4X2hhbmRsZShpb3VjbWQpKSB7CiAJCWlmIChwZHUtJmd0O2JpbykKIAkJCWJsa19ycV91bm1hcF91c2VyKHBkdS0mZ3Q7YmlvKTsKLQkJaW9fdXJpbmdfY21kX2RvbmUzMihpb3VjbWQsIHBkdS0mZ3Q7c3RhdHVzLCBwZHUtJmd0O3Jlc3VsdCwgMCk7CiYjNDM7CQlpb191cmluZ19jbWRfZG9uZShpb3VjbWQsIDApOwogCX0gZWxzZSB7CiAJCWlvX3VyaW5nX2NtZF9kb19pbl90YXNrX2xhenkoaW91Y21kLCBudm1lX3VyaW5nX3Rhc2tfY2IpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX2JzZy5jIGIvZHJpdmVycy9zY3NpL3Njc2lfYnNnLmMKaW5kZXggZTgwZGVjNTMxNzRlYS4uOGIzMmQ4ZThmMjlmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfYnNnLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9zY3NpL3Njc2lfYnNnLmMKQEAgLTYwLDggJiM0Mzs2MCw4IEBAIHN0YXRpYyB2b2lkIHNjc2lfYnNnX3VyaW5nX3Rhc2tfY2Ioc3RydWN0IGlvX3R3X3JlcSB0d19yZXEsIGlvX3R3X3Rva2VuX3QgdHcpCiAJCQkJICBzY21kLSZndDtyZXNpZF9sZW4pOwogCiAJYmxrX21xX2ZyZWVfcmVxdWVzdChycSk7Ci0JaW9fdXJpbmdfY21kX2RvbmUzMihpb3VjbWQsIHJldCwgcmVzMiwKLQkJCSAgICBJT19VUklOR19DTURfVEFTS19XT1JLX0lTU1VFX0ZMQUdTKTsKJiM0MzsJaW9fdXJpbmdfY21kX3NldF9yZXMzMihpb3VjbWQsIHJldCwgcmVzMik7CiYjNDM7CWlvX3VyaW5nX2NtZF9kb25lKGlvdWNtZCwgSU9fVVJJTkdfQ01EX1RBU0tfV09SS19JU1NVRV9GTEFHUyk7CiB9CiAKIHN0YXRpYyBlbnVtIHJxX2VuZF9pb19yZXQgc2NzaV9ic2dfdXJpbmdfY21kX2RvbmUoc3RydWN0IHJlcXVlc3QgKnJlcSwKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2lvY3RsLmMgYi9mcy9idHJmcy9pb2N0bC5jCmluZGV4IDcyYmM5ZDRmNzcwODcuLjA3MDU3YTcwODQ1MjkgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2lvY3RsLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYnRyZnMvaW9jdGwuYwpAQCAtNDYyMSw3ICYjNDM7NDYyMSw4IEBAIHN0YXRpYyB2b2lkIGJ0cmZzX3VyaW5nX3JlYWRfZmluaXNoZWQoc3RydWN0IGlvX3R3X3JlcSB0d19yZXEsIGlvX3R3X3Rva2VuX3QgdHcpCiAJYnRyZnNfdW5sb2NrX2V4dGVudChpb190cmVlLCBwcml2LSZndDtzdGFydCwgcHJpdi0mZ3Q7bG9ja2VuZCwgJmFtcDtwcml2LSZndDtjYWNoZWRfc3RhdGUpOwogCWJ0cmZzX2lub2RlX3VubG9jayhpbm9kZSwgQlRSRlNfSUxPQ0tfU0hBUkVEKTsKIAotCWlvX3VyaW5nX2NtZF9kb25lKGNtZCwgcmV0LCBJT19VUklOR19DTURfVEFTS19XT1JLX0lTU1VFX0ZMQUdTKTsKJiM0MzsJaW9fdXJpbmdfY21kX3NldF9yZXMoY21kLCByZXQpOwomIzQzOwlpb191cmluZ19jbWRfZG9uZShjbWQsIElPX1VSSU5HX0NNRF9UQVNLX1dPUktfSVNTVUVfRkxBR1MpOwogCWFkZF9yY2hhcihjdXJyZW50LCByZXQpOwogCiAJZm9yIChpbmRleCA9IDA7IGluZGV4ICZsdDsgcHJpdi0mZ3Q7bnJfcGFnZXM7IGluZGV4JiM0MzsmIzQzOykKZGlmZiAtLWdpdCBhL2ZzL2Z1c2UvZGV2X3VyaW5nLmMgYi9mcy9mdXNlL2Rldl91cmluZy5jCmluZGV4IDc3YzhjZWM0M2Q5YzYuLmM1YmI1MDE4M2UxYzYgMTAwNjQ0Ci0tLSBhL2ZzL2Z1c2UvZGV2X3VyaW5nLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZnVzZS9kZXZfdXJpbmcuYwpAQCAtMzY2LDggJiM0MzszNjYsMTAgQEAgc3RhdGljIHZvaWQgZnVzZV91cmluZ19lbnRyeV90ZWFyZG93bihzdHJ1Y3QgZnVzZV9yaW5nX2VudCAqZW50KQogCWVudC0mZ3Q7c3RhdGUgPSBGUlJTX1JFTEVBU0VEOwogCXNwaW5fdW5sb2NrKCZhbXA7cXVldWUtJmd0O2xvY2spOwogCi0JaWYgKGNtZCkKLQkJaW9fdXJpbmdfY21kX2RvbmUoY21kLCAtRU5PVENPTk4sIElPX1VSSU5HX0ZfVU5MT0NLRUQpOwomIzQzOwlpZiAoY21kKSB7CiYjNDM7CQlpb191cmluZ19jbWRfc2V0X3JlcyhjbWQsIC1FTk9UQ09OTik7CiYjNDM7CQlpb191cmluZ19jbWRfZG9uZShjbWQsIElPX1VSSU5HX0ZfVU5MT0NLRUQpOwomIzQzOwl9CiAKIAlpZiAocmVxKQogCQlmdXNlX3VyaW5nX3N0b3BfZnVzZV9yZXFfZW5kKHJlcSk7CkBAIC01MzEsNyAmIzQzOzUzMyw4IEBAIHN0YXRpYyB2b2lkIGZ1c2VfdXJpbmdfY2FuY2VsKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCwKIAogCWlmIChuZWVkX2NtZF9kb25lKSB7CiAJCS8qIG5vIHF1ZXVlIGxvY2sgdG8gYXZvaWQgbG9jayBvcmRlciBpc3N1ZXMgKi8KLQkJaW9fdXJpbmdfY21kX2RvbmUoY21kLCAtRU5PVENPTk4sIGlzc3VlX2ZsYWdzKTsKJiM0MzsJCWlvX3VyaW5nX2NtZF9zZXRfcmVzKGNtZCwgLUVOT1RDT05OKTsKJiM0MzsJCWlvX3VyaW5nX2NtZF9kb25lKGNtZCwgaXNzdWVfZmxhZ3MpOwogCQlrZnJlZShlbnQpOwogCQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmYW1wO3F1ZXVlLSZndDtyaW5nLSZndDtxdWV1ZV9yZWZzKSkKIAkJCXdha2VfdXBfYWxsKCZhbXA7cXVldWUtJmd0O3JpbmctJmd0O3N0b3Bfd2FpdHEpOwpAQCAtOTQyLDcgJiM0Mzs5NDUsOCBAQCBzdGF0aWMgdm9pZCBmdXNlX3VyaW5nX3NlbmQoc3RydWN0IGZ1c2VfcmluZ19lbnQgKmVudCwgc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLAogCWZ1c2VfdXJpbmdfYWRkX3RvX3BxKGVudCk7CiAJc3Bpbl91bmxvY2soJmFtcDtxdWV1ZS0mZ3Q7bG9jayk7CiAKLQlpb191cmluZ19jbWRfZG9uZShjbWQsIHJldCwgaXNzdWVfZmxhZ3MpOwomIzQzOwlpb191cmluZ19jbWRfc2V0X3JlcyhjbWQsIHJldCk7CiYjNDM7CWlvX3VyaW5nX2NtZF9kb25lKGNtZCwgaXNzdWVfZmxhZ3MpOwogfQogCiAvKiBGVVNFX1VSSU5HX0NNRF9DT01NSVRfQU5EX0ZFVENIIGhhbmRsZXIgKi8KQEAgLTEzMDksNyAmIzQzOzEzMTMsOCBAQCBzdGF0aWMgdm9pZCBmdXNlX3VyaW5nX3NlbmRfaW5fdGFzayhzdHJ1Y3QgaW9fdHdfcmVxIHR3X3JlcSwgaW9fdHdfdG9rZW5fdCB0dykKIAkJbGlzdF9kZWxfaW5pdCgmYW1wO2VudC0mZ3Q7bGlzdCk7CiAJCXNwaW5fdW5sb2NrKCZhbXA7cXVldWUtJmd0O2xvY2spOwogCi0JCWlvX3VyaW5nX2NtZF9kb25lKGNtZCwgZXJyLCBpc3N1ZV9mbGFncyk7CiYjNDM7CQlpb191cmluZ19jbWRfc2V0X3JlcyhjbWQsIGVycik7CiYjNDM7CQlpb191cmluZ19jbWRfZG9uZShjbWQsIGlzc3VlX2ZsYWdzKTsKIAogCQlmdXNlX3VyaW5nX3JlcV9lbmQoZW50LCBlbnQtJmd0O2Z1c2VfcmVxLCBlcnIpOwogCQlrZnJlZShlbnQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pb191cmluZy9jbWQuaCBiL2luY2x1ZGUvbGludXgvaW9fdXJpbmcvY21kLmgKaW5kZXggMzMxZGNiZWZlNzJmMS4uOTZmY2MwNjA5N2M0ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pb191cmluZy9jbWQuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2lvX3VyaW5nL2NtZC5oCkBAIC01Miw2ICYjNDM7NTIsMTAgQEAgaW50IGlvX3VyaW5nX2NtZF9pbXBvcnRfZml4ZWRfdmVjKHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCwKIAkJCQkgIGludCBkZGlyLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsCiAJCQkJICB1bnNpZ25lZCBpc3N1ZV9mbGFncyk7CiAKJiM0MzsvKiBPbmUgb2YgdGhlc2UgbXVzdCBiZSBjYWxsZWQgcHJpb3IgdG8gaW9fdXJpbmdfY21kX2RvbmUoKSAqLwomIzQzO3ZvaWQgaW9fdXJpbmdfY21kX3NldF9yZXMoc3RydWN0IGlvX3VyaW5nX2NtZCAqLCBzMzIgcmV0KTsKJiM0Mzt2b2lkIGlvX3VyaW5nX2NtZF9zZXRfcmVzMzIoc3RydWN0IGlvX3VyaW5nX2NtZCAqLCBzMzIgcmV0LCB1NjQgcmVzMik7CiYjNDM7CiAvKgogICogQ29tcGxldGVzIHRoZSByZXF1ZXN0LCBpLmUuIHBvc3RzIGFuIGlvX3VyaW5nIENRRSBhbmQgZGVhbGxvY2F0ZXMgQGlvdWNtZAogICogYW5kIHRoZSBjb3JyZXNwb25kaW5nIGlvX3VyaW5nIHJlcXVlc3QuCkBAIC01OSw4ICYjNDM7NjMsNyBAQCBpbnQgaW9fdXJpbmdfY21kX2ltcG9ydF9maXhlZF92ZWMoc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y21kLAogICogTm90ZTogdGhlIGNhbGxlciBzaG91bGQgbmV2ZXIgaGFyZCBjb2RlIEBpc3N1ZV9mbGFncyBhbmQgaXMgb25seSBhbGxvd2VkCiAgKiB0byBwYXNzIHRoZSBtYXNrIHByb3ZpZGVkIGJ5IHRoZSBjb3JlIGlvX3VyaW5nIGNvZGUuCiAgKi8KLXZvaWQgX19pb191cmluZ19jbWRfZG9uZShzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsIHMzMiByZXQsIHU2NCByZXMyLAotCQkJIHVuc2lnbmVkIGlzc3VlX2ZsYWdzLCBib29sIGlzX2NxZTMyKTsKJiM0Mzt2b2lkIGlvX3VyaW5nX2NtZF9kb25lKHN0cnVjdCBpb191cmluZ19jbWQgKiwgdW5zaWduZWQgaXNzdWVfZmxhZ3MpOwogCiB2b2lkIF9faW9fdXJpbmdfY21kX2RvX2luX3Rhc2soc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y21kLAogCQkJICAgIGlvX3JlcV90d19mdW5jX3QgdGFza193b3JrX2NiLApAQCAtMTA3LDggJiM0MzsxMTAsMTUgQEAgc3RhdGljIGlubGluZSBpbnQgaW9fdXJpbmdfY21kX2ltcG9ydF9maXhlZF92ZWMoc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y21kLAogewogCXJldHVybiAtRU9QTk9UU1VQUDsKIH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2lvX3VyaW5nX2NtZF9kb25lKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCwgczMyIHJldCwKLQkJdTY0IHJldDIsIHVuc2lnbmVkIGlzc3VlX2ZsYWdzLCBib29sIGlzX2NxZTMyKQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBpb191cmluZ19jbWRfc2V0X3JlcyhzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsIHMzMiByZXQpCiYjNDM7ewomIzQzO30KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgaW9fdXJpbmdfY21kX3NldF9yZXMzMihzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsIHMzMiByZXQsCiYjNDM7CQkJCQkgIHU2NCByZXMyKQomIzQzO3sKJiM0Mzt9CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGlvX3VyaW5nX2NtZF9kb25lKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCwKJiM0MzsJCQkJICAgICB1bnNpZ25lZCBpc3N1ZV9mbGFncykKIHsKIH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2lvX3VyaW5nX2NtZF9kb19pbl90YXNrKHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCwKQEAgLTE3MCwxOCAmIzQzOzE4MCw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCAqaW9fdXJpbmdfY21kX2N0eF9oYW5kbGUoc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kKQogCXJldHVybiBjbWRfdG9faW9fa2lvY2IoY21kKS0mZ3Q7Y3R4OwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgaW9fdXJpbmdfY21kX2RvbmUoc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y21kLCBzMzIgcmV0LAotCQkJCSAgICAgdW5zaWduZWQgaXNzdWVfZmxhZ3MpCi17Ci0JcmV0dXJuIF9faW9fdXJpbmdfY21kX2RvbmUoaW91Y21kLCByZXQsIDAsIGlzc3VlX2ZsYWdzLCBmYWxzZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBpb191cmluZ19jbWRfZG9uZTMyKHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCwgczMyIHJldCwKLQkJCQkgICAgICAgdTY0IHJlczIsIHVuc2lnbmVkIGlzc3VlX2ZsYWdzKQotewotCXJldHVybiBfX2lvX3VyaW5nX2NtZF9kb25lKGlvdWNtZCwgcmV0LCByZXMyLCBpc3N1ZV9mbGFncywgdHJ1ZSk7Ci19Ci0KIGludCBpb19idWZmZXJfcmVnaXN0ZXJfYnZlYyhzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsIHN0cnVjdCByZXF1ZXN0ICpycSwKIAkJCSAgICB2b2lkICgqcmVsZWFzZSkodm9pZCAqKSwgdW5zaWduZWQgaW50IGluZGV4LAogCQkJICAgIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyk7CmRpZmYgLS1naXQgYS9pb191cmluZy91cmluZ19jbWQuYyBiL2lvX3VyaW5nL3VyaW5nX2NtZC5jCmluZGV4IDcyNmE2NTlmMzhjMzguLmVmM2U3ZTM1MmM2YWYgMTAwNjQ0Ci0tLSBhL2lvX3VyaW5nL3VyaW5nX2NtZC5jCiYjNDM7JiM0MzsmIzQzOyBiL2lvX3VyaW5nL3VyaW5nX2NtZC5jCkBAIC0xMzgsMTkgJiM0MzsxMzgsMzEgQEAgdm9pZCBfX2lvX3VyaW5nX2NtZF9kb19pbl90YXNrKHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCwKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKF9faW9fdXJpbmdfY21kX2RvX2luX3Rhc2spOwogCi1zdGF0aWMgaW5saW5lIHZvaWQgaW9fcmVxX3NldF9jcWUzMl9leHRyYShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwKLQkJCQkJICB1NjQgZXh0cmExLCB1NjQgZXh0cmEyKQomIzQzO3ZvaWQgaW9fdXJpbmdfY21kX3NldF9yZXMoc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLCBzMzIgcmV0KQogewotCXJlcS0mZ3Q7YmlnX2NxZS5leHRyYTEgPSBleHRyYTE7Ci0JcmVxLSZndDtiaWdfY3FlLmV4dHJhMiA9IGV4dHJhMjsKJiM0MzsJc3RydWN0IGlvX2tpb2NiICpyZXEgPSBjbWRfdG9faW9fa2lvY2IoY21kKTsKJiM0MzsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXFfc2V0X2ZhaWwocmVxKTsKJiM0MzsJaW9fcmVxX3NldF9yZXMocmVxLCByZXQsIDApOwogfQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGlvX3VyaW5nX2NtZF9zZXRfcmVzKTsKJiM0MzsKJiM0Mzt2b2lkIGlvX3VyaW5nX2NtZF9zZXRfcmVzMzIoc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLCBzMzIgcmV0LCB1NjQgcmVzMikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpb19raW9jYiAqcmVxID0gY21kX3RvX2lvX2tpb2NiKGNtZCk7CiYjNDM7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmVxX3NldF9mYWlsKHJlcSk7CiYjNDM7CWlvX3JlcV9zZXRfcmVzMzIocmVxLCByZXQsIDAsIHJlczIsIDApOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChpb191cmluZ19jbWRfc2V0X3JlczMyKTsKIAogLyoKICAqIENhbGxlZCBieSBjb25zdW1lcnMgb2YgaW9fdXJpbmdfY21kLCBpZiB0aGV5IG9yaWdpbmFsbHkgcmV0dXJuZWQKICAqIC1FSU9DQlFVRVVFRCB1cG9uIHJlY2VpdmluZyB0aGUgY29tbWFuZC4KICAqLwotdm9pZCBfX2lvX3VyaW5nX2NtZF9kb25lKHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCwgczMyIHJldCwgdTY0IHJlczIsCi0JCSAgICAgICB1bnNpZ25lZCBpc3N1ZV9mbGFncywgYm9vbCBpc19jcWUzMikKJiM0Mzt2b2lkIGlvX3VyaW5nX2NtZF9kb25lKHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCwgdW5zaWduZWQgaXNzdWVfZmxhZ3MpCiB7CiAJc3RydWN0IGlvX2tpb2NiICpyZXEgPSBjbWRfdG9faW9fa2lvY2IoaW91Y21kKTsKIApAQCAtMTU5LDE1ICYjNDM7MTcxLDYgQEAgdm9pZCBfX2lvX3VyaW5nX2NtZF9kb25lKHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCwgczMyIHJldCwgdTY0IHJlczIsCiAKIAlpb191cmluZ19jbWRfZGVsX2NhbmNlbGFibGUoaW91Y21kLCBpc3N1ZV9mbGFncyk7CiAKLQlpZiAocmV0ICZsdDsgMCkKLQkJcmVxX3NldF9mYWlsKHJlcSk7Ci0KLQlpb19yZXFfc2V0X3JlcyhyZXEsIHJldCwgMCk7Ci0JaWYgKGlzX2NxZTMyKSB7Ci0JCWlmIChyZXEtJmd0O2N0eC0mZ3Q7ZmxhZ3MgJmFtcDsgSU9SSU5HX1NFVFVQX0NRRV9NSVhFRCkKLQkJCXJlcS0mZ3Q7Y3FlLmZsYWdzIHw9IElPUklOR19DUUVfRl8zMjsKLQkJaW9fcmVxX3NldF9jcWUzMl9leHRyYShyZXEsIHJlczIsIDApOwotCX0KIAlpb19yZXFfdXJpbmdfY2xlYW51cChyZXEsIGlzc3VlX2ZsYWdzKTsKIAlpZiAocmVxLSZndDtmbGFncyAmYW1wOyBSRVFfRl9JT1BPTEwpIHsKIAkJLyogb3JkZXIgd2l0aCBpb19kb19pb3BvbGwoKSBjaGVja2luZyAtJmd0O2lvcG9sbF9jb21wbGV0ZWQgKi8KQEAgLTE4MSw3ICYjNDM7MTg0LDcgQEAgdm9pZCBfX2lvX3VyaW5nX2NtZF9kb25lKHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCwgczMyIHJldCwgdTY0IHJlczIsCiAJCWlvX3JlcV90YXNrX3dvcmtfYWRkKHJlcSk7CiAJfQogfQotRVhQT1JUX1NZTUJPTF9HUEwoX19pb191cmluZ19jbWRfZG9uZSk7CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoaW9fdXJpbmdfY21kX2RvbmUpOwogCiBpbnQgaW9fdXJpbmdfY21kX3ByZXAoc3RydWN0IGlvX2tpb2NiICpyZXEsIGNvbnN0IHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSkKIHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTk6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzMxOQoJCQkJCQkJb3V0cHV0OiA1NwoJCQkJCQkJdGhvdWdodHM6IDcwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIGlvX3VyaW5nIFBhdGNoKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIGEgc2lnbmlmaWNhbnQgY2hhbmdlLCByaWdodD8gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgYSBjb3JlIGtlcm5lbCBBUEkgbW9kaWZpY2F0aW9uIGNvbmNlcm5pbmcgaW9fdXJpbmcgY29tbWFuZCByZXN1bHQgaGFuZGxpbmcuIFNlZWluZyBtb2RpZmljYXRpb25zIHRvIGBpb191cmluZ19jbWRfZG9uZWAgYW5kIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYGlvX3VyaW5nX2NtZF9zZXRfcmVzYCBhbmQgYGlvX3VyaW5nX2NtZF9zZXRfcmVzMzJgIGltbWVkaWF0ZWx5IGZsYWdzIHRoaXMgYXMgc29tZXRoaW5nIHRoYXQgd2FycmFudHMgY2FyZWZ1bCBzY3J1dGlueS4gQmVjYXVzZSBpdCBjaGFuZ2VzIHRoZSByZXR1cm4gc3RhdHVzLCBpdCBpcyB2ZXJ5IGxpa2VseSB3ZSBtYXkgaW50cm9kdWNlIG5ldyBidWdzLgoKVGhlIGZhY3QgdGhhdCB0aGlzIHRvdWNoZXMgYSBicmVhZHRoIG9mIHN1YnN5c3RlbXMgLSBgYmxvY2svaW9jdGwuY2AsIGBkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmNgLCBgZHJpdmVycy9udm1lL2hvc3QvaW9jdGwuY2AsIGBkcml2ZXJzL3Njc2kvc2NzaV9ic2cuY2AsIGBmcy9idHJmcy9pb2N0bC5jYCwgYGZzL2Z1c2UvZGV2X3VyaW5nLmNgLCBhbG9uZyB3aXRoIHRoZSBoZWFkZXIgYW5kIGNvcmUgaW9fdXJpbmcgZmlsZXMgKGBpbmNsdWRlL2xpbnV4L2lvX3VyaW5nL2NtZC5oYCBhbmQgYGlvX3VyaW5nL3VyaW5nX2NtZC5jYCkg4oCTIHJlaW5mb3JjZXMgdGhhdCBpbXByZXNzaW9uLiBUaGlzIG1lYW5zIGZ1bmN0aW9uYWwgaW1wYWN0IGlzIHByZXR0eSBtdWNoIGd1YXJhbnRlZWQsIGFuZCB3ZSBzaG91bGQgcHJpb3JpdGl6ZSBmdXp6aW5nIHRvIHNtb2tlIG91dCBhbnkgaXNzdWVzLgoKTm93LCBsZXQmIzM5O3MgaWRlbnRpZnkgdGhlIGZvY2FsIHBvaW50cy4gTXkgaW5zdGluY3QgaXMgdG8gZm9jdXMgb24gdGhlIGZ1bmN0aW9ucyBkaXJlY3RseSBpbnZvbHZlZCBpbiB0aGlzIG5ldyByZXN1bHQgaGFuZGxpbmc6IGBpb191cmluZ19jbWRfc2V0X3Jlc2AsIGBpb191cmluZ19jbWRfc2V0X3JlczMyYCwgYW5kIGBpb191cmluZ19jbWRfZG9uZWAuIEJleW9uZCB0aG9zZSwgSSYjMzk7bGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB3aGVyZSB0aGVzZSBjaGFuZ2VzIGFyZSAqdXNlZCo6IGB1YmxrX2NoX3VyaW5nX2NtZF9jYmAsIGBudm1lX3VyaW5nX2NtZF9lbmRfaW9gLCBgc2NzaV9ic2dfdXJpbmdfdGFza19jYmAsIGBidHJmc191cmluZ19yZWFkX2ZpbmlzaGVkYCwgYW5kIGBmdXNlX3VyaW5nX3NlbmRgLgoKTmV4dCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBleHBvc3VyZSBvZiB0aGVzZSBzeW1ib2xzLiBBcmUgYGlvX3VyaW5nX2NtZF9zZXRfcmVzYCBhbmQgYGlvX3VyaW5nX2NtZF9zZXRfcmVzMzJgIGV4cG9ydGVkPyBBaCwgeWVzLCBgRVhQT1JUX1NZTUJPTF9HUExgLiBOb3csIGxldCYjMzk7cyBpZGVudGlmeSB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIGBDT05GSUdfSU9fVVJJTkdgIGlzIGEgZ2l2ZW4uIFdlJiMzOTtsbCBuZWVkIGBDT05GSUdfQkxLX0RFVl9VQkxLYCwgYENPTkZJR19OVk1FX0NPUkVgLCBgQ09ORklHX0JMS19ERVZfQlNHYCwgYENPTkZJR19CVFJGU19GU2AsIGFuZCBgQ09ORklHX0ZVU0VfRlNgIHRvIGVuc3VyZSB0aGUgcmVsZXZhbnQgY29kZSBwYXRocyBhcmUgdGVzdGVkLiBJIHdpbGwgdXNlIGBncmVwcGVyYCB0byBkb3VibGUtY2hlY2sgdGhvc2UgY29uZmlnIG5hbWVzLgoKVGhpcyBwYXRjaCBpcyBnb2luZyB0byByZXF1aXJlIGEgdGhvcm91Z2ggcmV2aWV3LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDE5OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0Oyhjb25maWcgQkxLX0RFVl9VQkxLfGNvbmZpZyBOVk1FX0NPUkV8Y29uZmlnIEJMS19ERVZfQlNHfGNvbmZpZyBCVFJGU19GU3xjb25maWcgRlVTRV9GU3xjb25maWcgSU9fVVJJTkcpJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL0tjb25maWc9NDU9Y29uZmlnIEJMS19DR1JPVVBfUFVOVF9CSU9cbi0tXG5ibG9jay9LY29uZmlnLTQ3LVxuYmxvY2svS2NvbmZpZzo0ODpjb25maWcgQkxLX0RFVl9CU0dfQ09NTU9OXG5ibG9jay9LY29uZmlnLTQ5LVx0dHJpc3RhdGVcbi0tXG5ibG9jay9LY29uZmlnPTUxPWNvbmZpZyBCTEtfSUNRXG4tLVxuYmxvY2svS2NvbmZpZy01My1cbmJsb2NrL0tjb25maWc6NTQ6Y29uZmlnIEJMS19ERVZfQlNHTElCXG5ibG9jay9LY29uZmlnLTU1LVx0Ym9vbCBcJiMzNDtCbG9jayBsYXllciBTRyBzdXBwb3J0IHY0IGhlbHBlciBsaWJcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc9MzE1PWNvbmZpZyBCTEtfREVWX1JCRFxuLS1cbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0zMjctXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MzI4OmNvbmZpZyBCTEtfREVWX1VCTEtcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0zMjktXHR0cmlzdGF0ZSBcJiMzNDtVc2Vyc3BhY2UgYmxvY2sgZHJpdmVyIChFeHBlcmltZW50YWwpXCYjMzQ7XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZzoyOmNvbmZpZyBOVk1FX0NPUkVcbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWctMy1cdHRyaXN0YXRlXG4tLVxuZHJpdmVycy9zY3NpL0tjb25maWc9MTMxPWNvbmZpZyBDSFJfREVWX1NHXG4tLVxuZHJpdmVycy9zY3NpL0tjb25maWctMTU1LVxuZHJpdmVycy9zY3NpL0tjb25maWc6MTU2OmNvbmZpZyBCTEtfREVWX0JTR1xuZHJpdmVycy9zY3NpL0tjb25maWctMTU3LVx0Ym9vbCBcJiMzNDsvZGV2L2JzZyBzdXBwb3J0IChTRyB2NClcJiMzNDtcbi0tXG5mcy9idHJmcy9LY29uZmlnLTItXG5mcy9idHJmcy9LY29uZmlnOjM6Y29uZmlnIEJUUkZTX0ZTXG5mcy9idHJmcy9LY29uZmlnLTQtXHR0cmlzdGF0ZSBcJiMzNDtCdHJmcyBmaWxlc3lzdGVtIHN1cHBvcnRcJiMzNDtcbi0tXG5mcy9idHJmcy9LY29uZmlnLTM4LVxuZnMvYnRyZnMvS2NvbmZpZzozOTpjb25maWcgQlRSRlNfRlNfUE9TSVhfQUNMXG5mcy9idHJmcy9LY29uZmlnLTQwLVx0Ym9vbCBcJiMzNDtCdHJmcyBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1wmIzM0O1xuLS1cbmZzL2J0cmZzL0tjb25maWctNDgtXG5mcy9idHJmcy9LY29uZmlnOjQ5OmNvbmZpZyBCVFJGU19GU19SVU5fU0FOSVRZX1RFU1RTXG5mcy9idHJmcy9LY29uZmlnLTUwLVx0Ym9vbCBcJiMzNDtCdHJmcyB3aWxsIHJ1biBzYW5pdHkgdGVzdHMgdXBvbiBsb2FkaW5nXCYjMzQ7XG4tLVxuZnMvZnVzZS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9mdXNlL0tjb25maWc6Mjpjb25maWcgRlVTRV9GU1xuZnMvZnVzZS9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtGVVNFIChGaWxlc3lzdGVtIGluIFVzZXJzcGFjZSkgc3VwcG9ydFwmIzM0O1xuLS1cbmluaXQvS2NvbmZpZz0xOTE2PWNvbmZpZyBBSU9cbi0tXG5pbml0L0tjb25maWctMTkyMy1cbmluaXQvS2NvbmZpZzoxOTI0OmNvbmZpZyBJT19VUklOR1xuaW5pdC9LY29uZmlnLTE5MjUtXHRib29sIFwmIzM0O0VuYWJsZSBJTyB1cmluZyBzdXBwb3J0XCYjMzQ7IGlmIEVYUEVSVFxuLS1cbmluaXQvS2NvbmZpZz0xOTMzPWNvbmZpZyBHQ09WX1BST0ZJTEVfVVJJTkdcbi0tXG5pbml0L0tjb25maWctMTk0NS1cbmluaXQvS2NvbmZpZzoxOTQ2OmNvbmZpZyBJT19VUklOR19NT0NLX0ZJTEVcbmluaXQvS2NvbmZpZy0xOTQ3LVx0dHJpc3RhdGUgXCYjMzQ7RW5hYmxlIGlvX3VyaW5nIG1vY2sgZmlsZXMgKEV4cGVyaW1lbnRhbClcJiMzNDsgaWYgRVhQRVJUXG4tLVxuaW9fdXJpbmcvS2NvbmZpZy01LVxuaW9fdXJpbmcvS2NvbmZpZzo2OmNvbmZpZyBJT19VUklOR19aQ1JYXG5pb191cmluZy9LY29uZmlnLTctXHRkZWZfYm9vbCB5XG4tLVxuaW9fdXJpbmcvS2NvbmZpZy0xMi1cbmlvX3VyaW5nL0tjb25maWc6MTM6Y29uZmlnIElPX1VSSU5HX0JQRlxuaW9fdXJpbmcvS2NvbmZpZy0xNC1cdGRlZl9ib29sIHlcbi0tXG5pb191cmluZy9LY29uZmlnLTE3LVxuaW9fdXJpbmcvS2NvbmZpZzoxODpjb25maWcgSU9fVVJJTkdfQlBGX09QU1xuaW9fdXJpbmcvS2NvbmZpZy0xOS1cdGRlZl9ib29sIHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxOToyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTQzCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogOTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGNvbmZpZ3VyYXRpb25zOiBgSU9fVVJJTkdgLCBgQkxLX0RFVl9VQkxLYCwgYE5WTUVfQ09SRWAsIGBCTEtfREVWX0JTR2AsIGBCVFJGU19GU2AsIGFuZCBgRlVTRV9GU2AuIEkga25vdyB0aGVzZSwgZ2VuZXJhbGx5LCBidXQgSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgYE5WTUVfQ09SRWAgZm9yIHRoaXMgcGFydGljdWxhciB0ZXN0IHNjZW5hcmlvLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55IGNyaXRpY2FsIGRlcGVuZGVuY2llcy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoYXQgYXJlIHRoZSByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIHRoYXQgYXJlIGFsc28gcmVxdWlyZWQ/IE9mZiB0aGUgdG9wIG9mIG15IGhlYWQsIEnigJltIHRoaW5raW5nIEnigJlsbCBuZWVkIHRvIHZlcmlmeSBgQkxLX0RFVl9OVk1FYCBpcyBlbmFibGVkLiBJdCBjb3VsZCBhbHNvIHBvdGVudGlhbGx5IGJlIGBOVk1FX1RBUkdFVGAsIG9yIHNvbWV0aGluZyBlbHNlIHNwZWNpZmljYWxseSBOVk1lIHJlbGF0ZWQuIEdvdHRhIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgdGhvcm91Z2hseSB0byBlbnN1cmUgdGhpcyB3aG9sZSB0aGluZyB3b3JrcyBwcm9wZXJseSBhbmQgSSYjMzk7bSBub3QgbWlzc2luZyBzb21ldGhpbmcgZnVuZGFtZW50YWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTk6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJMS19ERVZfTlZNRSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL252bWUvaG9zdC9LY29uZmlnPTI9Y29uZmlnIE5WTUVfQ09SRVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWctNC1cbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWc6NTpjb25maWcgQkxLX0RFVl9OVk1FXG5kcml2ZXJzL252bWUvaG9zdC9LY29uZmlnLTYtXHR0cmlzdGF0ZSBcJiMzNDtOVk0gRXhwcmVzcyBibG9jayBkZXZpY2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxOToyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5OTM0CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQWRkaW5nIE5WTWUgQmxvY2sgRGV2aWNlIFN1cHBvcnQgdG8gTXkgUHJvamVjdCoqCgpBbHJpZ2h0LCB0aGUgbmV4dCB0YXNrIG9uIG15IGxpc3QgaXMgcHJldHR5IGNsZWFyOiBJJiMzOTttIGdvaW5nIHRvIGFkZCBgQkxLX0RFVl9OVk1FYCB0byB0aGUgc3lzdGVtLiBUaGF0JiMzOTtzIHRoZSBjb3JlIG9mIHRoZSBpbXBsZW1lbnRhdGlvbi4gTm93LCBiZWZvcmUgSSBqdW1wIGhlYWRmaXJzdCBpbnRvIHRoZSBuZXcgY29kZSwgSSB3YW50IHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgaG93IHRoZSByZWxldmFudCBzdHJ1Y3R1cmVzIGFyZSBoYW5kbGVkIGluIHRoZSBleGlzdGluZyBjb2RlYmFzZS4gTXkgbWFpbiBjb25jZXJuIGlzIHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBgaW9fdXJpbmdgIGNvbW1hbmRzLgoKU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IGhvdyByZXN1bHRzIGFyZSBzZXQgYW5kIGhhbmRsZWQgd2l0aGluIHRoZSBgaW9fdXJpbmdgIGNvbnRleHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIG1hbmFnZXMgdGhlIHJldHVybiB2YWx1ZXMgZm9yIHRoZXNlIGJsb2NrIGRldmljZXMgd2l0aGluIHRoZSBgaW9fdXJpbmdgIGZyYW1ld29yay4gSSYjMzk7bGwgbmVlZCB0byBzY3J1dGluaXplIGBpb191cmluZ19jbWRfc2V0X3Jlc2AgYW5kIGBpb191cmluZ19jbWRfc2V0X3JlczMyYCBpbiBgaW9fdXJpbmcvdXJpbmdfY21kLmNgLiBJIGhhdmUgYSBmZWVsaW5nIHRob3NlIGFyZSBnb2luZyB0byBiZSBrZXkgcGllY2VzIG9mIHRoZSBwdXp6bGUgZm9yIHByb3Blcmx5IGhhbmRsaW5nIE5WTWUgY29tcGxldGlvbiBxdWV1ZXMgYW5kIEkvTyBzdGF0dXMuIEl0IHdpbGwgYWxzbyBnaXZlIG1lIGEgc29saWQgcG9pbnQgdG8gaG9vayBpbnRvIGluIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgYmxvY2sgZGV2aWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDE5OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZvaWQgaW9fdXJpbmdfY21kX3NldF9yZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9pb191cmluZy9jbWQuaD00OT1pbnQgaW9fdXJpbmdfY21kX2ltcG9ydF9maXhlZF92ZWMoc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y21kLFxuLS1cbmluY2x1ZGUvbGludXgvaW9fdXJpbmcvY21kLmgtNTUtLyogT25lIG9mIHRoZXNlIG11c3QgYmUgY2FsbGVkIHByaW9yIHRvIGlvX3VyaW5nX2NtZF9kb25lKCkgKi9cbmluY2x1ZGUvbGludXgvaW9fdXJpbmcvY21kLmg6NTY6dm9pZCBpb191cmluZ19jbWRfc2V0X3JlcyhzdHJ1Y3QgaW9fdXJpbmdfY21kICosIHMzMiByZXQpO1xuaW5jbHVkZS9saW51eC9pb191cmluZy9jbWQuaDo1Nzp2b2lkIGlvX3VyaW5nX2NtZF9zZXRfcmVzMzIoc3RydWN0IGlvX3VyaW5nX2NtZCAqLCBzMzIgcmV0LCB1NjQgcmVzMik7XG5pbmNsdWRlL2xpbnV4L2lvX3VyaW5nL2NtZC5oLTU4LVxuLS1cbmluY2x1ZGUvbGludXgvaW9fdXJpbmcvY21kLmg9MTA1PXN0YXRpYyBpbmxpbmUgaW50IGlvX3VyaW5nX2NtZF9pbXBvcnRfZml4ZWRfdmVjKHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCxcbi0tXG5pbmNsdWRlL2xpbnV4L2lvX3VyaW5nL2NtZC5oLTExMi19XG5pbmNsdWRlL2xpbnV4L2lvX3VyaW5nL2NtZC5oOjExMzpzdGF0aWMgaW5saW5lIHZvaWQgaW9fdXJpbmdfY21kX3NldF9yZXMoc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLCBzMzIgcmV0KVxuaW5jbHVkZS9saW51eC9pb191cmluZy9jbWQuaC0xMTQte1xuaW5jbHVkZS9saW51eC9pb191cmluZy9jbWQuaC0xMTUtfVxuaW5jbHVkZS9saW51eC9pb191cmluZy9jbWQuaDoxMTY6c3RhdGljIGlubGluZSB2b2lkIGlvX3VyaW5nX2NtZF9zZXRfcmVzMzIoc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLCBzMzIgcmV0LFxuaW5jbHVkZS9saW51eC9pb191cmluZy9jbWQuaC0xMTctXHRcdFx0XHRcdCAgdTY0IHJlczIpXG4tLVxuaW9fdXJpbmcvdXJpbmdfY21kLmM9MTM5PUVYUE9SVF9TWU1CT0xfR1BMKF9faW9fdXJpbmdfY21kX2RvX2luX3Rhc2spO1xuaW9fdXJpbmcvdXJpbmdfY21kLmMtMTQwLVxuaW9fdXJpbmcvdXJpbmdfY21kLmM6MTQxOnZvaWQgaW9fdXJpbmdfY21kX3NldF9yZXMoc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLCBzMzIgcmV0KVxuaW9fdXJpbmcvdXJpbmdfY21kLmMtMTQyLXtcbi0tXG5pb191cmluZy91cmluZ19jbWQuYz0xNDk9RVhQT1JUX1NZTUJPTF9HUEwoaW9fdXJpbmdfY21kX3NldF9yZXMpO1xuaW9fdXJpbmcvdXJpbmdfY21kLmMtMTUwLVxuaW9fdXJpbmcvdXJpbmdfY21kLmM6MTUxOnZvaWQgaW9fdXJpbmdfY21kX3NldF9yZXMzMihzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsIHMzMiByZXQsIHU2NCByZXMyKVxuaW9fdXJpbmcvdXJpbmdfY21kLmMtMTUyLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxOToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDg4NgoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDQwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWZpbmluZyB0aGUgRm9jdXM6IENvcmUgQVBJIENoYW5nZXMgYW5kIEtleSBDYWxsZXJzKioKCk9rYXksIGxldCYjMzk7cyBkaXN0aWxsIHRoaXMgZG93bi4gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0aGVzZSBpb191cmluZyBjaGFuZ2VzIGFyZSBpbXBsZW1lbnRlZCBhbmQgSSBuZWVkIHRvIGRlZmluZSB0aGUgc2NvcGUgb2YgYW5hbHlzaXMuIEkgc2VlIGEgYnVuY2ggb2Ygc3ltYm9scywgYW5kIEkgbmVlZCB0byBpZGVudGlmeSB3aGF0JiMzOTtzIGNyaXRpY2FsLiBSaWdodCwgc28gYGlvX3VyaW5nX2NtZF9zZXRfcmVzYCwgYGlvX3VyaW5nX2NtZF9zZXRfcmVzMzJgLCBhbmQgYGlvX3VyaW5nX2NtZF9kb25lYCBpbW1lZGlhdGVseSBzdGFuZCBvdXQuIFRob3NlIGFyZSB0aGUgaGVhcnQgb2YgdGhlIEFQSSBtb2RpZmljYXRpb25zIHRoZW1zZWx2ZXMuIFRoZXkgYXJlIHRoZSBjb3JlIGNoYW5nZXMuCgpUaGVuIHRoZXJlIGFyZSBjYWxsZXJzIHRvIHRob3NlIGNvcmUgY2hhbmdlczsgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSAqdXNpbmcqIHRoZSBuZXcgaW9fdXJpbmcgZnVuY3Rpb25hbGl0eS4gV2Ugc2hvdWxkIGluY2x1ZGUgc29tZSBvZiB0aGVzZSBmb3IgdGhlIHN1bW1hcnk6IGBibGtfY21kX2NvbXBsZXRlYCwgYHVibGtfY2hfdXJpbmdfY21kX2NiYCwgYG52bWVfdXJpbmdfY21kX2VuZF9pb2AsIGBzY3NpX2JzZ191cmluZ190YXNrX2NiYCwgYGJ0cmZzX3VyaW5nX3JlYWRfZmluaXNoZWRgLCBhbmQgYGZ1c2VfdXJpbmdfc2VuZGAgYXJlIHByb2JhYmx5IHRoZSBtb3N0IHNhbGllbnQgZXhhbXBsZXMuCgpJJiMzOTtsbCBjaGVjayB0aGUgY29uZmlnIG9wdGlvbnMgYXNzb2NpYXRlZCB3aXRoIGVhY2ggcGFydCBvZiB0aGlzIHNvIEkga25vdyB3aGVyZSB0aGUgc3VwcG9ydCBsaWVzLiBJdCBsb29rcyBsaWtlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBhcmUgYElPX1VSSU5HYCwgYEJMS19ERVZfVUJMS2AsIGBOVk1FX0NPUkVgLCBgQkxLX0RFVl9OVk1FYCwgYEJMS19ERVZfQlNHYCwgYEJUUkZTX0ZTYCwgYW5kIGBGVVNFX0ZTYC4KCkp1c3QgYSBxdWljayBjaGVjay4uLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGBmdXNlX3VyaW5nX3NlbmRgIGlzIHN0YXRpYyBvciBub3QuIFRoaXMgYWZmZWN0cyB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDE5OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Z1c2VfdXJpbmdfc2VuZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9mdXNlL2Rldl91cmluZy5jPTkyMT1zdGF0aWMgaW50IGZ1c2VfcmluZ19lbnRfc2V0X2NvbW1pdChzdHJ1Y3QgZnVzZV9yaW5nX2VudCAqZW50KVxuLS1cbmZzL2Z1c2UvZGV2X3VyaW5nLmMtOTM1LVxuZnMvZnVzZS9kZXZfdXJpbmcuYzo5MzY6c3RhdGljIHZvaWQgZnVzZV91cmluZ19zZW5kKHN0cnVjdCBmdXNlX3JpbmdfZW50ICplbnQsIHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCxcbmZzL2Z1c2UvZGV2X3VyaW5nLmMtOTM3LVx0XHRcdCAgICBzc2l6ZV90IHJldCwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuLS1cbmZzL2Z1c2UvZGV2X3VyaW5nLmM9OTUzPXN0YXRpYyBpbnQgZnVzZV91cmluZ19jb21taXRfZmV0Y2goc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLCBpbnQgaXNzdWVfZmxhZ3MsXG4tLVxuZnMvZnVzZS9kZXZfdXJpbmcuYy0xMDI3LVx0aWYgKGZ1c2VfdXJpbmdfZ2V0X25leHRfZnVzZV9yZXEoZW50LCBxdWV1ZSkpXG5mcy9mdXNlL2Rldl91cmluZy5jOjEwMjg6XHRcdGZ1c2VfdXJpbmdfc2VuZChlbnQsIGNtZCwgMCwgaXNzdWVfZmxhZ3MpO1xuZnMvZnVzZS9kZXZfdXJpbmcuYy0xMDI5LVx0cmV0dXJuIDA7XG4tLVxuZnMvZnVzZS9kZXZfdXJpbmcuYz0xMjIxPWludCBmdXNlX3VyaW5nX2NtZChzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbi0tXG5mcy9mdXNlL2Rldl91cmluZy5jLTEyOTItICovXG5mcy9mdXNlL2Rldl91cmluZy5jOjEyOTM6c3RhdGljIHZvaWQgZnVzZV91cmluZ19zZW5kX2luX3Rhc2soc3RydWN0IGlvX3R3X3JlcSB0d19yZXEsIGlvX3R3X3Rva2VuX3QgdHcpXG5mcy9mdXNlL2Rldl91cmluZy5jLTEyOTQte1xuLS1cbmZzL2Z1c2UvZGV2X3VyaW5nLmMtMTMwNy1cdFx0fVxuZnMvZnVzZS9kZXZfdXJpbmcuYzoxMzA4Olx0XHRmdXNlX3VyaW5nX3NlbmQoZW50LCBjbWQsIGVyciwgaXNzdWVfZmxhZ3MpO1xuZnMvZnVzZS9kZXZfdXJpbmcuYy0xMzA5LVx0fSBlbHNlIHtcbi0tXG5mcy9mdXNlL2Rldl91cmluZy5jPTEzNDQ9c3RhdGljIHZvaWQgZnVzZV91cmluZ19kaXNwYXRjaF9lbnQoc3RydWN0IGZ1c2VfcmluZ19lbnQgKmVudClcbi0tXG5mcy9mdXNlL2Rldl91cmluZy5jLTEzNDgtXHR1cmluZ19jbWRfc2V0X3JpbmdfZW50KGNtZCwgZW50KTtcbmZzL2Z1c2UvZGV2X3VyaW5nLmM6MTM0OTpcdGlvX3VyaW5nX2NtZF9jb21wbGV0ZV9pbl90YXNrKGNtZCwgZnVzZV91cmluZ19zZW5kX2luX3Rhc2spO1xuZnMvZnVzZS9kZXZfdXJpbmcuYy0xMzUwLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTk6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIyMzcKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyOTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVmaW5pbmcgdGhlIExpc3Qgb2YgQ29yZSBpb191cmluZyBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgdG8gaGFuZGxlIHRoZSBgaW9fdXJpbmdgIGZ1bmN0aW9ucy4gYGZ1c2VfdXJpbmdfc2VuZGAgaXMgc3RhdGljLCBzbyBpdCBzZWVtcyByZWR1bmRhbnQgdG8gaW5jbHVkZSBpdC4gSXQmIzM5O3MgYmVzdCB0byBzdGljayB0byBub24tc3RhdGljIG9yIGVzc2VudGlhbCBmdW5jdGlvbnMuIEZvY3VzaW5nIG9uIHRoYXQsIEkmIzM5O3ZlIGlkZW50aWZpZWQgYGlvX3VyaW5nX2NtZF9zZXRfcmVzYCwgYGlvX3VyaW5nX2NtZF9zZXRfcmVzMzJgLCBhbmQgYGlvX3VyaW5nX2NtZF9kb25lYCBhcyB0aGUgY3JpdGljYWwgb25lcy4gTGV0JiMzOTtzIGp1c3QgbGlzdCB0aG9zZSBmb3Igbm93LCBhbmQgcG90ZW50aWFsbHkgYWRkIGEgZmV3IG5vbi1zdGF0aWMgb25lcyBpZiB0aGV5IHN0YW5kIG91dC4KCkkgYWxzbyBjaGVja2VkIG90aGVyIGZ1bmN0aW9ucy4gSSBub3RpY2VkIHRoYXQgYGJsa19jbWRfY29tcGxldGVgLCBgdWJsa19jaF91cmluZ19jbWRfY2JgLCBgbnZtZV91cmluZ19jbWRfZW5kX2lvYCwgYHNjc2lfYnNnX3VyaW5nX3Rhc2tfY2JgLCBhbmQgYGJ0cmZzX3VyaW5nX3JlYWRfZmluaXNoZWRgIGFyZSBhbGwgc3RhdGljLiBHaXZlbiB0aGV5JiMzOTtyZSBzdGF0aWMsIHRoZXkgbWlnaHQgYmUgaW5saW5lZCBvciBsYWNrIGNsZWFyIHN5bWJvbCBhZGRyZXNzZXMsIHNvIEkgc2hvdWxkIG9taXQgdGhlbS4KClRoZXJlZm9yZSwgZm9yIHRoZSBsaXN0LCBJJiMzOTtsbCBzdGljayB3aXRoIHRoZSBleHBvcnRlZCBmdW5jdGlvbnM6IGBpb191cmluZ19jbWRfc2V0X3Jlc2AsIGBpb191cmluZ19jbWRfc2V0X3JlczMyYCwgYW5kIGBpb191cmluZ19jbWRfZG9uZWAuCgpOb3csIGxldCYjMzk7cyBqdXN0IGNvbmZpcm0gdGhhdCBgaW9fdXJpbmdfY21kX2RvbmVgIGlzIGFjdHVhbGx5IGV4cG9ydGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxOToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MX0dQTFxcKGlvX3VyaW5nX2NtZF9kb25lXFwpJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL3VyaW5nX2NtZC5jPTE2NT12b2lkIGlvX3VyaW5nX2NtZF9kb25lKHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCwgdW5zaWduZWQgaXNzdWVfZmxhZ3MpXG4tLVxuaW9fdXJpbmcvdXJpbmdfY21kLmMtMTg2LX1cbmlvX3VyaW5nL3VyaW5nX2NtZC5jOjE4NzpFWFBPUlRfU1lNQk9MX0dQTChpb191cmluZ19jbWRfZG9uZSk7XG5pb191cmluZy91cmluZ19jbWQuYy0xODgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDE5OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyOTcwCgkJCQkJCQlvdXRwdXQ6IDI0MwoJCQkJCQkJdGhvdWdodHM6IDI1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBpb191cmluZyBBUEkgQ2hhbmdlKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGluIGZyb250IG9mIG1lLCBhbmQgaXQgbG9va3MgbGlrZSBhIHByZXR0eSBzaWduaWZpY2FudCBzaGlmdCBpbiBob3cgaW9fdXJpbmcgaGFuZGxlcyBjb21tYW5kIHJlc3VsdHMuIEVzc2VudGlhbGx5LCB0aGV5JiMzOTtyZSBicmVha2luZyBkb3duIGBpb191cmluZ19jbWRfZG9uZWAgaW50byB0d28gcGFydHM6IGBpb191cmluZ19jbWRfc2V0X3Jlc2AgKG9yIGBpb191cmluZ19jbWRfc2V0X3JlczMyYCkgYW5kIGBpb191cmluZ19jbWRfZG9uZWAuIFRoaXMgaXMgYSBjb3JlIEFQSSBtb2RpZmljYXRpb24uCgpUaGUgc3ltYm9scyB0aGF0IHJlYWxseSBzdGFuZCBvdXQgYXJlOiBgaW9fdXJpbmdfY21kX3NldF9yZXNgLCBgaW9fdXJpbmdfY21kX3NldF9yZXMzMmAsIGFuZCBgaW9fdXJpbmdfY21kX2RvbmVgLiBUaGVzZSBhcmUgdGhlIGtleSBwaWVjZXMgb2YgdGhlIHB1enpsZS4gSSBhbHNvIHNlZSB0aGVzZSBjb25maWdzIHBvdGVudGlhbGx5IGJlaW5nIGFmZmVjdGVkOiBgSU9fVVJJTkdgLCBgQkxLX0RFVl9VQkxLYCwgYE5WTUVfQ09SRWAsIGBCTEtfREVWX05WTUVgLCBgQkxLX0RFVl9CU0dgLCBgQlRSRlNfRlNgLCBhbmQgYEZVU0VfRlNgLiBUaGlzIGNoYW5nZSBjbGVhcmx5IHJpcHBsZXMgYWNyb3NzIHF1aXRlIGEgZmV3IHN1YnN5c3RlbXMsIGluY2x1ZGluZyBibG9jayBkZXZpY2VzLCB1YmxrLCBOVk1lLCBTQ1NJLCBCdHJmcywgYW5kIEZVU0UuCgpTaW5jZSBpdCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCB0aGlzIG5lZWRzIHNvbWUgc2VyaW91cyBmdXp6aW5nIGFuZCB0ZXN0aW5nIHRvIG1ha2Ugc3VyZSB3ZSYjMzk7cmUgbm90IGludHJvZHVjaW5nIHJlZ3Jlc3Npb25zIG9yIGJ1Z3MgaW4gdGhlIHdheSByZXN1bHRzIGFyZSBoYW5kbGVkLiBMZXQmIzM5O3MgY2FsbCB0aGlzIHRoZSBgc2V0LXJlc3VsdHNgIGNoYW5nZSwgYW5kIGdldCB0byB3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxOToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU9fVVJJTkcmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9VQkxLJiMzNDssCiAgICAmIzM0O05WTUVfQ09SRSYjMzQ7LAogICAgJiMzNDtCTEtfREVWX05WTUUmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9CU0cmIzM0OywKICAgICYjMzQ7QlRSRlNfRlMmIzM0OywKICAgICYjMzQ7RlVTRV9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lvX3VyaW5nX2NtZF9zZXRfcmVzJiMzNDssCiAgICAmIzM0O2lvX3VyaW5nX2NtZF9zZXRfcmVzMzImIzM0OywKICAgICYjMzQ7aW9fdXJpbmdfY21kX2RvbmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgaW9fdXJpbmcgY29tbWFuZCBBUEkgYnkgc3BsaXR0aW5nIGBpb191cmluZ19jbWRfZG9uZWAgaW50byBgaW9fdXJpbmdfY21kX3NldF9yZXNgIChvciBgaW9fdXJpbmdfY21kX3NldF9yZXMzMmApIGFuZCBgaW9fdXJpbmdfY21kX2RvbmVgLiBUaGlzIGFmZmVjdHMgaG93IHJlc3VsdHMgYXJlIHJldHVybmVkIGZvciBpb191cmluZyBjb21tYW5kcyBhY3Jvc3MgbXVsdGlwbGUgc3Vic3lzdGVtcyBpbmNsdWRpbmcgYmxvY2ssIHVibGssIG52bWUsIHNjc2kgYnNnLCBidHJmcywgYW5kIGZ1c2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBrZXJuZWwgQVBJIGFuZCBpdHMgY2FsbGVycywgd2hpY2ggaXMgd29ydGggZnV6emluZyB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgaW5jb3JyZWN0IHJlc3VsdCBoYW5kbGluZyBhcmUgaW50cm9kdWNlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU9fVVJJTkcmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9VQkxLJiMzNDssCiAgICAmIzM0O05WTUVfQ09SRSYjMzQ7LAogICAgJiMzNDtCTEtfREVWX05WTUUmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9CU0cmIzM0OywKICAgICYjMzQ7QlRSRlNfRlMmIzM0OywKICAgICYjMzQ7RlVTRV9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lvX3VyaW5nX2NtZF9zZXRfcmVzJiMzNDssCiAgICAmIzM0O2lvX3VyaW5nX2NtZF9zZXRfcmVzMzImIzM0OywKICAgICYjMzQ7aW9fdXJpbmdfY21kX2RvbmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgaW9fdXJpbmcgY29tbWFuZCBBUEkgYnkgc3BsaXR0aW5nIGBpb191cmluZ19jbWRfZG9uZWAgaW50byBgaW9fdXJpbmdfY21kX3NldF9yZXNgIChvciBgaW9fdXJpbmdfY21kX3NldF9yZXMzMmApIGFuZCBgaW9fdXJpbmdfY21kX2RvbmVgLiBUaGlzIGFmZmVjdHMgaG93IHJlc3VsdHMgYXJlIHJldHVybmVkIGZvciBpb191cmluZyBjb21tYW5kcyBhY3Jvc3MgbXVsdGlwbGUgc3Vic3lzdGVtcyBpbmNsdWRpbmcgYmxvY2ssIHVibGssIG52bWUsIHNjc2kgYnNnLCBidHJmcywgYW5kIGZ1c2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBrZXJuZWwgQVBJIGFuZCBpdHMgY2FsbGVycywgd2hpY2ggaXMgd29ydGggZnV6emluZyB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgaW5jb3JyZWN0IHJlc3VsdCBoYW5kbGluZyBhcmUgaW50cm9kdWNlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTk6MjM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxOToyMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGBpb191cmluZ19jbWRfZG9uZWAgQVBJIGJ5IHNwbGl0dGluZyBpdCBpbnRvIGBpb191cmluZ19jbWRfc2V0X3Jlc2AvYGlvX3VyaW5nX2NtZF9zZXRfcmVzMzJgIGFuZCBgaW9fdXJpbmdfY21kX2RvbmVgLiBUaGUgdmFsdWVzIHBhc3NlZCB0byB0aGVzZSBmdW5jdGlvbnMgcmVtYWluIHRoZSBzYW1lIGFzIGJlZm9yZSwgYW5kIGFsbCBmaWVsZHMgaW4gdGhlIGNvbXBsZXRpb24gcXVldWUgZW50cnkgKENRRSkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgKGUuZy4sIGBleHRyYTJgIGlzIHNldCB0byAwIGluIGBpb19yZXFfc2V0X3JlczMyYCkuIFRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vIGNoYW5nZXMgdG8gYm91bmRzIGNoZWNraW5nLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLiBBbnkgcG90ZW50aWFsIGJ1Z3Mgd291bGQgYmUgbG9naWMgZXJyb3JzIG9yIHVzZS1hZnRlci1mcmVlL291dC1vZi1ib3VuZHMgaXNzdWVzLCB3aGljaCBhcmUgYWRlcXVhdGVseSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBvdGhlciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzNWY2YzFjZDViYzlmNzlkNzdjODVmNmIxZjY4YWMzZjZmMWFhMmMzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMjcgMTk6MjI6MzMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9ibG9jay9pb2N0bC5jIGIvYmxvY2svaW9jdGwuYwppbmRleCA2NGI0ZTZjMGY2OTY1Li45NDZjYWI3NGYyNTNlIDEwMDY0NAotLS0gYS9ibG9jay9pb2N0bC5jCiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL2lvY3RsLmMKQEAgLTg3MSw5ICYjNDM7ODcxLDEwIEBAIHN0YXRpYyB2b2lkIGJsa19jbWRfY29tcGxldGUoc3RydWN0IGlvX3R3X3JlcSB0d19yZXEsIGlvX3R3X3Rva2VuX3QgdHcpCiAKIAlpZiAoYmljLSZndDtyZXMgPT0gLUVBR0FJTiAmYW1wOyZhbXA7IGJpYy0mZ3Q7bm93YWl0KQogCQlpb191cmluZ19jbWRfaXNzdWVfYmxvY2tpbmcoY21kKTsKLQllbHNlCi0JCWlvX3VyaW5nX2NtZF9kb25lKGNtZCwgYmljLSZndDtyZXMsCi0JCQkJICBJT19VUklOR19DTURfVEFTS19XT1JLX0lTU1VFX0ZMQUdTKTsKJiM0MzsJZWxzZSB7CiYjNDM7CQlpb191cmluZ19jbWRfc2V0X3JlcyhjbWQsIGJpYy0mZ3Q7cmVzKTsKJiM0MzsJCWlvX3VyaW5nX2NtZF9kb25lKGNtZCwgSU9fVVJJTkdfQ01EX1RBU0tfV09SS19JU1NVRV9GTEFHUyk7CiYjNDM7CX0KIH0KIAogc3RhdGljIHZvaWQgYmlvX2NtZF9iaW9fZW5kX2lvKHN0cnVjdCBiaW8gKmJpbykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svdWJsa19kcnYuYyBiL2RyaXZlcnMvYmxvY2svdWJsa19kcnYuYwppbmRleCA0ZDE3ZWQyNjRkYTFhLi41MWYxNWU1YjNjMDFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibG9jay91YmxrX2Rydi5jCkBAIC04MzksNyAmIzQzOzgzOSw4IEBAIHN0YXRpYyB2b2lkIHVibGtfYmF0Y2hfZGVpbml0X2ZldGNoX2J1ZihzdHJ1Y3QgdWJsa19xdWV1ZSAqdWJxLAogCV9fdWJsa19yZWxlYXNlX2ZjbWQodWJxKTsKIAlzcGluX3VubG9jaygmYW1wO3VicS0mZ3Q7ZXZ0c19sb2NrKTsKIAotCWlvX3VyaW5nX2NtZF9kb25lKGZjbWQtJmd0O2NtZCwgcmVzLCBkYXRhLSZndDtpc3N1ZV9mbGFncyk7CiYjNDM7CWlvX3VyaW5nX2NtZF9zZXRfcmVzKGZjbWQtJmd0O2NtZCwgcmVzKTsKJiM0MzsJaW9fdXJpbmdfY21kX2RvbmUoZmNtZC0mZ3Q7Y21kLCBkYXRhLSZndDtpc3N1ZV9mbGFncyk7CiAJdWJsa19iYXRjaF9mcmVlX2ZjbWQoZmNtZCk7CiB9CiAKQEAgLTE2NDIsNyAmIzQzOzE2NDMsOCBAQCBzdGF0aWMgdm9pZCB1YmxrX2NvbXBsZXRlX2lvX2NtZChzdHJ1Y3QgdWJsa19pbyAqaW8sIHN0cnVjdCByZXF1ZXN0ICpyZXEsCiAJc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kID0gX191YmxrX3ByZXBfY29tcGxfaW9fY21kKGlvLCByZXEpOwogCiAJLyogdGVsbCB1Ymxrc3J2IG9uZSBpbyByZXF1ZXN0IGlzIGNvbWluZyAqLwotCWlvX3VyaW5nX2NtZF9kb25lKGNtZCwgcmVzLCBpc3N1ZV9mbGFncyk7CiYjNDM7CWlvX3VyaW5nX2NtZF9zZXRfcmVzKGNtZCwgcmVzKTsKJiM0MzsJaW9fdXJpbmdfY21kX2RvbmUoY21kLCBpc3N1ZV9mbGFncyk7CiB9CiAKICNkZWZpbmUgVUJMS19SRVFVRVVFX0RFTEFZX01TCTMKQEAgLTE3MjgsNyAmIzQzOzE3MzAsOCBAQCBzdGF0aWMgdm9pZCB1YmxrX2F1dG9fYnVmX2Rpc3BhdGNoKGNvbnN0IHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEsCiAKIAlpZiAocmVzICE9IEFVVE9fQlVGX1JFR19GQUlMKSB7CiAJCXVibGtfYXV0b19idWZfaW9fc2V0dXAodWJxLCByZXEsIGlvLCBjbWQsIHJlcyk7Ci0JCWlvX3VyaW5nX2NtZF9kb25lKGNtZCwgVUJMS19JT19SRVNfT0ssIGlzc3VlX2ZsYWdzKTsKJiM0MzsJCWlvX3VyaW5nX2NtZF9zZXRfcmVzKGNtZCwgVUJMS19JT19SRVNfT0spOwomIzQzOwkJaW9fdXJpbmdfY21kX2RvbmUoY21kLCBpc3N1ZV9mbGFncyk7CiAJfQogfQogCkBAIC0yNzg5LDggJiM0MzsyNzkyLDEwIEBAIHN0YXRpYyB2b2lkIHVibGtfY2FuY2VsX2NtZChzdHJ1Y3QgdWJsa19xdWV1ZSAqdWJxLCB1MTYgdGFnLAogCX0KIAlzcGluX3VubG9jaygmYW1wO3VicS0mZ3Q7Y2FuY2VsX2xvY2spOwogCi0JaWYgKCFkb25lICZhbXA7JmFtcDsgY21kKQotCQlpb191cmluZ19jbWRfZG9uZShjbWQsIFVCTEtfSU9fUkVTX0FCT1JULCBpc3N1ZV9mbGFncyk7CiYjNDM7CWlmICghZG9uZSAmYW1wOyZhbXA7IGNtZCkgewomIzQzOwkJaW9fdXJpbmdfY21kX3NldF9yZXMoY21kLCBVQkxLX0lPX1JFU19BQk9SVCk7CiYjNDM7CQlpb191cmluZ19jbWRfZG9uZShjbWQsIGlzc3VlX2ZsYWdzKTsKJiM0MzsJfQogfQogCiAvKgpAQCAtMjgxNiw3ICYjNDM7MjgyMSw4IEBAIHN0YXRpYyB2b2lkIHVibGtfYmF0Y2hfY2FuY2VsX2NtZChzdHJ1Y3QgdWJsa19xdWV1ZSAqdWJxLAogCXNwaW5fdW5sb2NrKCZhbXA7dWJxLSZndDtldnRzX2xvY2spOwogCiAJaWYgKGRvbmUpIHsKLQkJaW9fdXJpbmdfY21kX2RvbmUoZmNtZC0mZ3Q7Y21kLCBVQkxLX0lPX1JFU19BQk9SVCwgaXNzdWVfZmxhZ3MpOwomIzQzOwkJaW9fdXJpbmdfY21kX3NldF9yZXMoZmNtZC0mZ3Q7Y21kLCBVQkxLX0lPX1JFU19BQk9SVCk7CiYjNDM7CQlpb191cmluZ19jbWRfZG9uZShmY21kLSZndDtjbWQsIGlzc3VlX2ZsYWdzKTsKIAkJdWJsa19iYXRjaF9mcmVlX2ZjbWQoZmNtZCk7CiAJfQogfQpAQCAtMzUyNiw4ICYjNDM7MzUzMiwxMCBAQCBzdGF0aWMgdm9pZCB1YmxrX2NoX3VyaW5nX2NtZF9jYihzdHJ1Y3QgaW9fdHdfcmVxIHR3X3JlcSwgaW9fdHdfdG9rZW5fdCB0dykKIAogCWlmICghdHcuY2FuY2VsKQogCQlyZXQgPSB1YmxrX2NoX3VyaW5nX2NtZF9sb2NhbChjbWQsIGlzc3VlX2ZsYWdzKTsKLQlpZiAocmV0ICE9IC1FSU9DQlFVRVVFRCkKLQkJaW9fdXJpbmdfY21kX2RvbmUoY21kLCByZXQsIGlzc3VlX2ZsYWdzKTsKJiM0MzsJaWYgKHJldCAhPSAtRUlPQ0JRVUVVRUQpIHsKJiM0MzsJCWlvX3VyaW5nX2NtZF9zZXRfcmVzKGNtZCwgcmV0KTsKJiM0MzsJCWlvX3VyaW5nX2NtZF9kb25lKGNtZCwgaXNzdWVfZmxhZ3MpOwomIzQzOwl9CiB9CiAKIHN0YXRpYyBpbnQgdWJsa19jaF91cmluZ19jbWQoc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpCmRpZmYgLS1naXQgYS9kcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jIGIvZHJpdmVycy9udm1lL2hvc3QvaW9jdGwuYwppbmRleCA2NTM5ZDQ3NTAwOTg2Li5iNTBiYmEyMDc4MThiIDEwMDY0NAotLS0gYS9kcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbnZtZS9ob3N0L2lvY3RsLmMKQEAgLTQyMyw4ICYjNDM7NDIzLDYgQEAgc3RydWN0IG52bWVfdXJpbmdfZGF0YSB7CiBzdHJ1Y3QgbnZtZV91cmluZ19jbWRfcGR1IHsKIAlzdHJ1Y3QgcmVxdWVzdCAqcmVxOwogCXN0cnVjdCBiaW8gKmJpbzsKLQl1NjQgcmVzdWx0OwotCWludCBzdGF0dXM7CiB9OwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBudm1lX3VyaW5nX2NtZF9wZHUgKm52bWVfdXJpbmdfY21kX3BkdSgKQEAgLTQ0MCw4ICYjNDM7NDM4LDcgQEAgc3RhdGljIHZvaWQgbnZtZV91cmluZ190YXNrX2NiKHN0cnVjdCBpb190d19yZXEgdHdfcmVxLCBpb190d190b2tlbl90IHR3KQogCiAJaWYgKHBkdS0mZ3Q7YmlvKQogCQlibGtfcnFfdW5tYXBfdXNlcihwZHUtJmd0O2Jpbyk7Ci0JaW9fdXJpbmdfY21kX2RvbmUzMihpb3VjbWQsIHBkdS0mZ3Q7c3RhdHVzLCBwZHUtJmd0O3Jlc3VsdCwKLQkJCSAgICBJT19VUklOR19DTURfVEFTS19XT1JLX0lTU1VFX0ZMQUdTKTsKJiM0MzsJaW9fdXJpbmdfY21kX2RvbmUoaW91Y21kLCBJT19VUklOR19DTURfVEFTS19XT1JLX0lTU1VFX0ZMQUdTKTsKIH0KIAogc3RhdGljIGVudW0gcnFfZW5kX2lvX3JldCBudm1lX3VyaW5nX2NtZF9lbmRfaW8oc3RydWN0IHJlcXVlc3QgKnJlcSwKQEAgLTQ1MCwxNSAmIzQzOzQ0NywxNyBAQCBzdGF0aWMgZW51bSBycV9lbmRfaW9fcmV0IG52bWVfdXJpbmdfY21kX2VuZF9pbyhzdHJ1Y3QgcmVxdWVzdCAqcmVxLAogewogCXN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCA9IHJlcS0mZ3Q7ZW5kX2lvX2RhdGE7CiAJc3RydWN0IG52bWVfdXJpbmdfY21kX3BkdSAqcGR1ID0gbnZtZV91cmluZ19jbWRfcGR1KGlvdWNtZCk7CiYjNDM7CXU2NCByZXN1bHQgPSBsZTY0X3RvX2NwdShudm1lX3JlcShyZXEpLSZndDtyZXN1bHQudTY0KTsKJiM0MzsJaW50IHN0YXR1czsKIAogCWlmIChudm1lX3JlcShyZXEpLSZndDtmbGFncyAmYW1wOyBOVk1FX1JFUV9DQU5DRUxMRUQpIHsKLQkJcGR1LSZndDtzdGF0dXMgPSAtRUlOVFI7CiYjNDM7CQlzdGF0dXMgPSAtRUlOVFI7CiAJfSBlbHNlIHsKLQkJcGR1LSZndDtzdGF0dXMgPSBudm1lX3JlcShyZXEpLSZndDtzdGF0dXM7Ci0JCWlmICghcGR1LSZndDtzdGF0dXMpCi0JCQlwZHUtJmd0O3N0YXR1cyA9IGJsa19zdGF0dXNfdG9fZXJybm8oZXJyKTsKJiM0MzsJCXN0YXR1cyA9IG52bWVfcmVxKHJlcSktJmd0O3N0YXR1czsKJiM0MzsJCWlmICghc3RhdHVzKQomIzQzOwkJCXN0YXR1cyA9IGJsa19zdGF0dXNfdG9fZXJybm8oZXJyKTsKIAl9Ci0JcGR1LSZndDtyZXN1bHQgPSBsZTY0X3RvX2NwdShudm1lX3JlcShyZXEpLSZndDtyZXN1bHQudTY0KTsKJiM0MzsJaW9fdXJpbmdfY21kX3NldF9yZXMzMihpb3VjbWQsIHN0YXR1cywgcmVzdWx0KTsKIAogCS8qCiAJICogRm9yIElPUE9MTCwgY2hlY2sgaWYgdGhpcyBjb21wbGV0aW9uIGlzIGhhcHBlbmluZyBpbiB0aGUgY29udGV4dApAQCAtNDcxLDcgJiM0Mzs0NzAsNyBAQCBzdGF0aWMgZW51bSBycV9lbmRfaW9fcmV0IG52bWVfdXJpbmdfY21kX2VuZF9pbyhzdHJ1Y3QgcmVxdWVzdCAqcmVxLAogCSAgICBpb2ItJmd0O3BvbGxfY3R4ID09IGlvX3VyaW5nX2NtZF9jdHhfaGFuZGxlKGlvdWNtZCkpIHsKIAkJaWYgKHBkdS0mZ3Q7YmlvKQogCQkJYmxrX3JxX3VubWFwX3VzZXIocGR1LSZndDtiaW8pOwotCQlpb191cmluZ19jbWRfZG9uZTMyKGlvdWNtZCwgcGR1LSZndDtzdGF0dXMsIHBkdS0mZ3Q7cmVzdWx0LCAwKTsKJiM0MzsJCWlvX3VyaW5nX2NtZF9kb25lKGlvdWNtZCwgMCk7CiAJfSBlbHNlIHsKIAkJaW9fdXJpbmdfY21kX2RvX2luX3Rhc2tfbGF6eShpb3VjbWQsIG52bWVfdXJpbmdfdGFza19jYik7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfYnNnLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9ic2cuYwppbmRleCBlODBkZWM1MzE3NGVhLi44YjMyZDhlOGYyOWY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9ic2cuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3Njc2kvc2NzaV9ic2cuYwpAQCAtNjAsOCAmIzQzOzYwLDggQEAgc3RhdGljIHZvaWQgc2NzaV9ic2dfdXJpbmdfdGFza19jYihzdHJ1Y3QgaW9fdHdfcmVxIHR3X3JlcSwgaW9fdHdfdG9rZW5fdCB0dykKIAkJCQkgIHNjbWQtJmd0O3Jlc2lkX2xlbik7CiAKIAlibGtfbXFfZnJlZV9yZXF1ZXN0KHJxKTsKLQlpb191cmluZ19jbWRfZG9uZTMyKGlvdWNtZCwgcmV0LCByZXMyLAotCQkJICAgIElPX1VSSU5HX0NNRF9UQVNLX1dPUktfSVNTVUVfRkxBR1MpOwomIzQzOwlpb191cmluZ19jbWRfc2V0X3JlczMyKGlvdWNtZCwgcmV0LCByZXMyKTsKJiM0MzsJaW9fdXJpbmdfY21kX2RvbmUoaW91Y21kLCBJT19VUklOR19DTURfVEFTS19XT1JLX0lTU1VFX0ZMQUdTKTsKIH0KIAogc3RhdGljIGVudW0gcnFfZW5kX2lvX3JldCBzY3NpX2JzZ191cmluZ19jbWRfZG9uZShzdHJ1Y3QgcmVxdWVzdCAqcmVxLApkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvaW9jdGwuYyBiL2ZzL2J0cmZzL2lvY3RsLmMKaW5kZXggNzJiYzlkNGY3NzA4Ny4uMDcwNTdhNzA4NDUyOSAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvaW9jdGwuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9idHJmcy9pb2N0bC5jCkBAIC00NjIxLDcgJiM0Mzs0NjIxLDggQEAgc3RhdGljIHZvaWQgYnRyZnNfdXJpbmdfcmVhZF9maW5pc2hlZChzdHJ1Y3QgaW9fdHdfcmVxIHR3X3JlcSwgaW9fdHdfdG9rZW5fdCB0dykKIAlidHJmc191bmxvY2tfZXh0ZW50KGlvX3RyZWUsIHByaXYtJmd0O3N0YXJ0LCBwcml2LSZndDtsb2NrZW5kLCAmYW1wO3ByaXYtJmd0O2NhY2hlZF9zdGF0ZSk7CiAJYnRyZnNfaW5vZGVfdW5sb2NrKGlub2RlLCBCVFJGU19JTE9DS19TSEFSRUQpOwogCi0JaW9fdXJpbmdfY21kX2RvbmUoY21kLCByZXQsIElPX1VSSU5HX0NNRF9UQVNLX1dPUktfSVNTVUVfRkxBR1MpOwomIzQzOwlpb191cmluZ19jbWRfc2V0X3JlcyhjbWQsIHJldCk7CiYjNDM7CWlvX3VyaW5nX2NtZF9kb25lKGNtZCwgSU9fVVJJTkdfQ01EX1RBU0tfV09SS19JU1NVRV9GTEFHUyk7CiAJYWRkX3JjaGFyKGN1cnJlbnQsIHJldCk7CiAKIAlmb3IgKGluZGV4ID0gMDsgaW5kZXggJmx0OyBwcml2LSZndDtucl9wYWdlczsgaW5kZXgmIzQzOyYjNDM7KQpkaWZmIC0tZ2l0IGEvZnMvZnVzZS9kZXZfdXJpbmcuYyBiL2ZzL2Z1c2UvZGV2X3VyaW5nLmMKaW5kZXggNzdjOGNlYzQzZDljNi4uYzViYjUwMTgzZTFjNiAxMDA2NDQKLS0tIGEvZnMvZnVzZS9kZXZfdXJpbmcuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9mdXNlL2Rldl91cmluZy5jCkBAIC0zNjYsOCAmIzQzOzM2NiwxMCBAQCBzdGF0aWMgdm9pZCBmdXNlX3VyaW5nX2VudHJ5X3RlYXJkb3duKHN0cnVjdCBmdXNlX3JpbmdfZW50ICplbnQpCiAJZW50LSZndDtzdGF0ZSA9IEZSUlNfUkVMRUFTRUQ7CiAJc3Bpbl91bmxvY2soJmFtcDtxdWV1ZS0mZ3Q7bG9jayk7CiAKLQlpZiAoY21kKQotCQlpb191cmluZ19jbWRfZG9uZShjbWQsIC1FTk9UQ09OTiwgSU9fVVJJTkdfRl9VTkxPQ0tFRCk7CiYjNDM7CWlmIChjbWQpIHsKJiM0MzsJCWlvX3VyaW5nX2NtZF9zZXRfcmVzKGNtZCwgLUVOT1RDT05OKTsKJiM0MzsJCWlvX3VyaW5nX2NtZF9kb25lKGNtZCwgSU9fVVJJTkdfRl9VTkxPQ0tFRCk7CiYjNDM7CX0KIAogCWlmIChyZXEpCiAJCWZ1c2VfdXJpbmdfc3RvcF9mdXNlX3JlcV9lbmQocmVxKTsKQEAgLTUzMSw3ICYjNDM7NTMzLDggQEAgc3RhdGljIHZvaWQgZnVzZV91cmluZ19jYW5jZWwoc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLAogCiAJaWYgKG5lZWRfY21kX2RvbmUpIHsKIAkJLyogbm8gcXVldWUgbG9jayB0byBhdm9pZCBsb2NrIG9yZGVyIGlzc3VlcyAqLwotCQlpb191cmluZ19jbWRfZG9uZShjbWQsIC1FTk9UQ09OTiwgaXNzdWVfZmxhZ3MpOwomIzQzOwkJaW9fdXJpbmdfY21kX3NldF9yZXMoY21kLCAtRU5PVENPTk4pOwomIzQzOwkJaW9fdXJpbmdfY21kX2RvbmUoY21kLCBpc3N1ZV9mbGFncyk7CiAJCWtmcmVlKGVudCk7CiAJCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZhbXA7cXVldWUtJmd0O3JpbmctJmd0O3F1ZXVlX3JlZnMpKQogCQkJd2FrZV91cF9hbGwoJmFtcDtxdWV1ZS0mZ3Q7cmluZy0mZ3Q7c3RvcF93YWl0cSk7CkBAIC05NDIsNyAmIzQzOzk0NSw4IEBAIHN0YXRpYyB2b2lkIGZ1c2VfdXJpbmdfc2VuZChzdHJ1Y3QgZnVzZV9yaW5nX2VudCAqZW50LCBzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsCiAJZnVzZV91cmluZ19hZGRfdG9fcHEoZW50KTsKIAlzcGluX3VubG9jaygmYW1wO3F1ZXVlLSZndDtsb2NrKTsKIAotCWlvX3VyaW5nX2NtZF9kb25lKGNtZCwgcmV0LCBpc3N1ZV9mbGFncyk7CiYjNDM7CWlvX3VyaW5nX2NtZF9zZXRfcmVzKGNtZCwgcmV0KTsKJiM0MzsJaW9fdXJpbmdfY21kX2RvbmUoY21kLCBpc3N1ZV9mbGFncyk7CiB9CiAKIC8qIEZVU0VfVVJJTkdfQ01EX0NPTU1JVF9BTkRfRkVUQ0ggaGFuZGxlciAqLwpAQCAtMTMwOSw3ICYjNDM7MTMxMyw4IEBAIHN0YXRpYyB2b2lkIGZ1c2VfdXJpbmdfc2VuZF9pbl90YXNrKHN0cnVjdCBpb190d19yZXEgdHdfcmVxLCBpb190d190b2tlbl90IHR3KQogCQlsaXN0X2RlbF9pbml0KCZhbXA7ZW50LSZndDtsaXN0KTsKIAkJc3Bpbl91bmxvY2soJmFtcDtxdWV1ZS0mZ3Q7bG9jayk7CiAKLQkJaW9fdXJpbmdfY21kX2RvbmUoY21kLCBlcnIsIGlzc3VlX2ZsYWdzKTsKJiM0MzsJCWlvX3VyaW5nX2NtZF9zZXRfcmVzKGNtZCwgZXJyKTsKJiM0MzsJCWlvX3VyaW5nX2NtZF9kb25lKGNtZCwgaXNzdWVfZmxhZ3MpOwogCiAJCWZ1c2VfdXJpbmdfcmVxX2VuZChlbnQsIGVudC0mZ3Q7ZnVzZV9yZXEsIGVycik7CiAJCWtmcmVlKGVudCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lvX3VyaW5nL2NtZC5oIGIvaW5jbHVkZS9saW51eC9pb191cmluZy9jbWQuaAppbmRleCAzMzFkY2JlZmU3MmYxLi45NmZjYzA2MDk3YzRlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lvX3VyaW5nL2NtZC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvaW9fdXJpbmcvY21kLmgKQEAgLTUyLDYgJiM0Mzs1MiwxMCBAQCBpbnQgaW9fdXJpbmdfY21kX2ltcG9ydF9maXhlZF92ZWMoc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y21kLAogCQkJCSAgaW50IGRkaXIsIHN0cnVjdCBpb3ZfaXRlciAqaXRlciwKIAkJCQkgIHVuc2lnbmVkIGlzc3VlX2ZsYWdzKTsKIAomIzQzOy8qIE9uZSBvZiB0aGVzZSBtdXN0IGJlIGNhbGxlZCBwcmlvciB0byBpb191cmluZ19jbWRfZG9uZSgpICovCiYjNDM7dm9pZCBpb191cmluZ19jbWRfc2V0X3JlcyhzdHJ1Y3QgaW9fdXJpbmdfY21kICosIHMzMiByZXQpOwomIzQzO3ZvaWQgaW9fdXJpbmdfY21kX3NldF9yZXMzMihzdHJ1Y3QgaW9fdXJpbmdfY21kICosIHMzMiByZXQsIHU2NCByZXMyKTsKJiM0MzsKIC8qCiAgKiBDb21wbGV0ZXMgdGhlIHJlcXVlc3QsIGkuZS4gcG9zdHMgYW4gaW9fdXJpbmcgQ1FFIGFuZCBkZWFsbG9jYXRlcyBAaW91Y21kCiAgKiBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgaW9fdXJpbmcgcmVxdWVzdC4KQEAgLTU5LDggJiM0Mzs2Myw3IEBAIGludCBpb191cmluZ19jbWRfaW1wb3J0X2ZpeGVkX3ZlYyhzdHJ1Y3QgaW9fdXJpbmdfY21kICppb3VjbWQsCiAgKiBOb3RlOiB0aGUgY2FsbGVyIHNob3VsZCBuZXZlciBoYXJkIGNvZGUgQGlzc3VlX2ZsYWdzIGFuZCBpcyBvbmx5IGFsbG93ZWQKICAqIHRvIHBhc3MgdGhlIG1hc2sgcHJvdmlkZWQgYnkgdGhlIGNvcmUgaW9fdXJpbmcgY29kZS4KICAqLwotdm9pZCBfX2lvX3VyaW5nX2NtZF9kb25lKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCwgczMyIHJldCwgdTY0IHJlczIsCi0JCQkgdW5zaWduZWQgaXNzdWVfZmxhZ3MsIGJvb2wgaXNfY3FlMzIpOwomIzQzO3ZvaWQgaW9fdXJpbmdfY21kX2RvbmUoc3RydWN0IGlvX3VyaW5nX2NtZCAqLCB1bnNpZ25lZCBpc3N1ZV9mbGFncyk7CiAKIHZvaWQgX19pb191cmluZ19jbWRfZG9faW5fdGFzayhzdHJ1Y3QgaW9fdXJpbmdfY21kICppb3VjbWQsCiAJCQkgICAgaW9fcmVxX3R3X2Z1bmNfdCB0YXNrX3dvcmtfY2IsCkBAIC0xMDcsOCAmIzQzOzExMCwxNSBAQCBzdGF0aWMgaW5saW5lIGludCBpb191cmluZ19jbWRfaW1wb3J0X2ZpeGVkX3ZlYyhzdHJ1Y3QgaW9fdXJpbmdfY21kICppb3VjbWQsCiB7CiAJcmV0dXJuIC1FT1BOT1RTVVBQOwogfQotc3RhdGljIGlubGluZSB2b2lkIF9faW9fdXJpbmdfY21kX2RvbmUoc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLCBzMzIgcmV0LAotCQl1NjQgcmV0MiwgdW5zaWduZWQgaXNzdWVfZmxhZ3MsIGJvb2wgaXNfY3FlMzIpCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGlvX3VyaW5nX2NtZF9zZXRfcmVzKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCwgczMyIHJldCkKJiM0Mzt7CiYjNDM7fQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBpb191cmluZ19jbWRfc2V0X3JlczMyKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCwgczMyIHJldCwKJiM0MzsJCQkJCSAgdTY0IHJlczIpCiYjNDM7ewomIzQzO30KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgaW9fdXJpbmdfY21kX2RvbmUoc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLAomIzQzOwkJCQkgICAgIHVuc2lnbmVkIGlzc3VlX2ZsYWdzKQogewogfQogc3RhdGljIGlubGluZSB2b2lkIF9faW9fdXJpbmdfY21kX2RvX2luX3Rhc2soc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y21kLApAQCAtMTcwLDE4ICYjNDM7MTgwLDYgQEAgc3RhdGljIGlubGluZSB2b2lkICppb191cmluZ19jbWRfY3R4X2hhbmRsZShzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQpCiAJcmV0dXJuIGNtZF90b19pb19raW9jYihjbWQpLSZndDtjdHg7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBpb191cmluZ19jbWRfZG9uZShzdHJ1Y3QgaW9fdXJpbmdfY21kICppb3VjbWQsIHMzMiByZXQsCi0JCQkJICAgICB1bnNpZ25lZCBpc3N1ZV9mbGFncykKLXsKLQlyZXR1cm4gX19pb191cmluZ19jbWRfZG9uZShpb3VjbWQsIHJldCwgMCwgaXNzdWVfZmxhZ3MsIGZhbHNlKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGlvX3VyaW5nX2NtZF9kb25lMzIoc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y21kLCBzMzIgcmV0LAotCQkJCSAgICAgICB1NjQgcmVzMiwgdW5zaWduZWQgaXNzdWVfZmxhZ3MpCi17Ci0JcmV0dXJuIF9faW9fdXJpbmdfY21kX2RvbmUoaW91Y21kLCByZXQsIHJlczIsIGlzc3VlX2ZsYWdzLCB0cnVlKTsKLX0KLQogaW50IGlvX2J1ZmZlcl9yZWdpc3Rlcl9idmVjKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCwgc3RydWN0IHJlcXVlc3QgKnJxLAogCQkJICAgIHZvaWQgKCpyZWxlYXNlKSh2b2lkICopLCB1bnNpZ25lZCBpbnQgaW5kZXgsCiAJCQkgICAgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKTsKZGlmZiAtLWdpdCBhL2lvX3VyaW5nL3VyaW5nX2NtZC5jIGIvaW9fdXJpbmcvdXJpbmdfY21kLmMKaW5kZXggNzI2YTY1OWYzOGMzOC4uZWYzZTdlMzUyYzZhZiAxMDA2NDQKLS0tIGEvaW9fdXJpbmcvdXJpbmdfY21kLmMKJiM0MzsmIzQzOyYjNDM7IGIvaW9fdXJpbmcvdXJpbmdfY21kLmMKQEAgLTEzOCwxOSAmIzQzOzEzOCwzMSBAQCB2b2lkIF9faW9fdXJpbmdfY21kX2RvX2luX3Rhc2soc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y21kLAogfQogRVhQT1JUX1NZTUJPTF9HUEwoX19pb191cmluZ19jbWRfZG9faW5fdGFzayk7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBpb19yZXFfc2V0X2NxZTMyX2V4dHJhKHN0cnVjdCBpb19raW9jYiAqcmVxLAotCQkJCQkgIHU2NCBleHRyYTEsIHU2NCBleHRyYTIpCiYjNDM7dm9pZCBpb191cmluZ19jbWRfc2V0X3JlcyhzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsIHMzMiByZXQpCiB7Ci0JcmVxLSZndDtiaWdfY3FlLmV4dHJhMSA9IGV4dHJhMTsKLQlyZXEtJmd0O2JpZ19jcWUuZXh0cmEyID0gZXh0cmEyOwomIzQzOwlzdHJ1Y3QgaW9fa2lvY2IgKnJlcSA9IGNtZF90b19pb19raW9jYihjbWQpOwomIzQzOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJlcV9zZXRfZmFpbChyZXEpOwomIzQzOwlpb19yZXFfc2V0X3JlcyhyZXEsIHJldCwgMCk7CiB9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoaW9fdXJpbmdfY21kX3NldF9yZXMpOwomIzQzOwomIzQzO3ZvaWQgaW9fdXJpbmdfY21kX3NldF9yZXMzMihzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsIHMzMiByZXQsIHU2NCByZXMyKQomIzQzO3sKJiM0MzsJc3RydWN0IGlvX2tpb2NiICpyZXEgPSBjbWRfdG9faW9fa2lvY2IoY21kKTsKJiM0MzsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXFfc2V0X2ZhaWwocmVxKTsKJiM0MzsJaW9fcmVxX3NldF9yZXMzMihyZXEsIHJldCwgMCwgcmVzMiwgMCk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGlvX3VyaW5nX2NtZF9zZXRfcmVzMzIpOwogCiAvKgogICogQ2FsbGVkIGJ5IGNvbnN1bWVycyBvZiBpb191cmluZ19jbWQsIGlmIHRoZXkgb3JpZ2luYWxseSByZXR1cm5lZAogICogLUVJT0NCUVVFVUVEIHVwb24gcmVjZWl2aW5nIHRoZSBjb21tYW5kLgogICovCi12b2lkIF9faW9fdXJpbmdfY21kX2RvbmUoc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y21kLCBzMzIgcmV0LCB1NjQgcmVzMiwKLQkJICAgICAgIHVuc2lnbmVkIGlzc3VlX2ZsYWdzLCBib29sIGlzX2NxZTMyKQomIzQzO3ZvaWQgaW9fdXJpbmdfY21kX2RvbmUoc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y21kLCB1bnNpZ25lZCBpc3N1ZV9mbGFncykKIHsKIAlzdHJ1Y3QgaW9fa2lvY2IgKnJlcSA9IGNtZF90b19pb19raW9jYihpb3VjbWQpOwogCkBAIC0xNTksMTUgJiM0MzsxNzEsNiBAQCB2b2lkIF9faW9fdXJpbmdfY21kX2RvbmUoc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y21kLCBzMzIgcmV0LCB1NjQgcmVzMiwKIAogCWlvX3VyaW5nX2NtZF9kZWxfY2FuY2VsYWJsZShpb3VjbWQsIGlzc3VlX2ZsYWdzKTsKIAotCWlmIChyZXQgJmx0OyAwKQotCQlyZXFfc2V0X2ZhaWwocmVxKTsKLQotCWlvX3JlcV9zZXRfcmVzKHJlcSwgcmV0LCAwKTsKLQlpZiAoaXNfY3FlMzIpIHsKLQkJaWYgKHJlcS0mZ3Q7Y3R4LSZndDtmbGFncyAmYW1wOyBJT1JJTkdfU0VUVVBfQ1FFX01JWEVEKQotCQkJcmVxLSZndDtjcWUuZmxhZ3MgfD0gSU9SSU5HX0NRRV9GXzMyOwotCQlpb19yZXFfc2V0X2NxZTMyX2V4dHJhKHJlcSwgcmVzMiwgMCk7Ci0JfQogCWlvX3JlcV91cmluZ19jbGVhbnVwKHJlcSwgaXNzdWVfZmxhZ3MpOwogCWlmIChyZXEtJmd0O2ZsYWdzICZhbXA7IFJFUV9GX0lPUE9MTCkgewogCQkvKiBvcmRlciB3aXRoIGlvX2RvX2lvcG9sbCgpIGNoZWNraW5nIC0mZ3Q7aW9wb2xsX2NvbXBsZXRlZCAqLwpAQCAtMTgxLDcgJiM0MzsxODQsNyBAQCB2b2lkIF9faW9fdXJpbmdfY21kX2RvbmUoc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y21kLCBzMzIgcmV0LCB1NjQgcmVzMiwKIAkJaW9fcmVxX3Rhc2tfd29ya19hZGQocmVxKTsKIAl9CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChfX2lvX3VyaW5nX2NtZF9kb25lKTsKJiM0MztFWFBPUlRfU1lNQk9MX0dQTChpb191cmluZ19jbWRfZG9uZSk7CiAKIGludCBpb191cmluZ19jbWRfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKQogewo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTk6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzMxNgoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDU1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGlvX3VyaW5nIENvbW1hbmQgQ29tcGxldGlvbiBBUEkgQ2hhbmdlKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY2hhbmdpbmcgaG93IHdlIGhhbmRsZSBjb21tYW5kIGNvbXBsZXRpb24gaW4gaW9fdXJpbmcuIFByZXZpb3VzbHksIGBpb191cmluZ19jbWRfZG9uZWAgYW5kIGBpb191cmluZ19jbWRfZG9uZTMyYCB0b29rIHRoZSByZXN1bHRzIGRpcmVjdGx5IGFzIGFyZ3VtZW50cy4gTm93LCB3ZSYjMzk7cmUgcmVxdWlyZWQgdG8gdXNlIGBpb191cmluZ19jbWRfc2V0X3Jlc2Agb3IgYGlvX3VyaW5nX2NtZF9zZXRfcmVzMzJgICpiZWZvcmUqIGNhbGxpbmcgYGlvX3VyaW5nX2NtZF9kb25lYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7QXJlIHdlIGludHJvZHVjaW5nIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBoZXJlPyYjMzQ7IFdlIG5lZWQgdG8gYmUgY2FyZWZ1bCB3aXRoIEFQSSBjaGFuZ2VzIGxpa2UgdGhpcy4KCkkgc2VlIHRoZSBwYXRjaCB0b3VjaGVzIGEgZmFpciBudW1iZXIgb2YgZmlsZXM6IGBibG9jay9pb2N0bC5jYCwgYGRyaXZlcnMvYmxvY2svdWJsa19kcnYuY2AsIGBkcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jYCwgYGRyaXZlcnMvc2NzaS9zY3NpX2JzZy5jYCwgYGZzL2J0cmZzL2lvY3RsLmNgLCBgZnMvZnVzZS9kZXZfdXJpbmcuY2AsIGBpbmNsdWRlL2xpbnV4L2lvX3VyaW5nL2NtZC5oYCwgYW5kIGBpb191cmluZy91cmluZ19jbWQuY2AuIFRoYXQmIzM5O3MgYSByZWFzb25hYmxlIHNwcmVhZCwgaW5kaWNhdGluZyB0aGlzIGlzIGEgcG90ZW50aWFsbHkgd2lkZWx5LXVzZWQgY2hhbmdlLgoKTG9va2luZyBzcGVjaWZpY2FsbHkgYXQgYGlvX3VyaW5nL3VyaW5nX2NtZC5jYCwgSSBzZWUgdGhlIG5ldyBmdW5jdGlvbnMgYGlvX3VyaW5nX2NtZF9zZXRfcmVzYCBhbmQgYGlvX3VyaW5nX2NtZF9zZXRfcmVzMzJgLiBUaGVzZSBzZXQgdGhlIHJlc3VsdCAoYHJldGApIGZvciBhIGdpdmVuIGNvbW1hbmQuIEludGVyZXN0aW5nbHksIGl0IGNoZWNrcyBpZiBgcmV0ICZsdDsgMGAgYW5kIGNhbGxzIGByZXFfc2V0X2ZhaWxgIGlmIHNvLiBUaGVuLCBpdCBjYWxscyBgaW9fcmVxX3NldF9yZXNgIG9yIGBpb19yZXFfc2V0X3JlczMyYC4KCk5vdywgdGhhdCYjMzk7cyB3aGF0IEkgd2FudCB0byBzZWUhIFRoZSBjcnVjaWFsIHBhcnQgaXMgdGhhdCBgaW9fcmVxX3NldF9yZXNgIGFuZCBgaW9fcmVxX3NldF9yZXMzMmAgYXJlIGNhbGxlZCBhZnRlciB0aGUgYHJldGAgY2hlY2suIE15IGZvY3VzIGhlcmUgaXMgb24gdW5kZXJzdGFuZGluZyBwcmVjaXNlbHkgaG93IHRob3NlIGBpb19yZXFfc2V0X3Jlc1hgIGZ1bmN0aW9ucyBoYW5kbGUgdGhlIHJlc3VsdCBzZXR0aW5nLiBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhvc2UgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgYGlvX3JlcV9zZXRfcmVzMzJgLCB0byBlbnN1cmUgdGhlIGRhdGEgaXMgYmVpbmcgaGFuZGxlZCBjb3JyZWN0bHkgYW5kIHRoYXQgdGhlcmUmIzM5O3Mgbm8gd2F5IHdlIGNvdWxkIHBvdGVudGlhbGx5IGJlIGludHJvZHVjaW5nIGFueSB2dWxuZXJhYmlsaXRpZXMgYnkgZmFpbGluZyB0byBpbml0aWFsaXplIHRoZSBtZW1vcnkgb24gY29tbWFuZC4gVGltZSB0byBzZWFyY2ggZm9yIHdoZXJlIHRob3NlIGFyZSBkZWZpbmVkLiBJJiMzOTtsbCB1c2UgYGdyZXBwZXJgIG9yIGVxdWl2YWxlbnQgdG9vbCB0byBmaW5kIHRoYXQgZGVmaW5pdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTk6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9fcmVxX3NldF9yZXMzMiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpb191cmluZy9pb191cmluZy5oPTMzNj1zdGF0aWMgaW5saW5lIHUzMiBjdHhfY3FlMzJfZmxhZ3Moc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgpXG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuaC0zNDItXG5pb191cmluZy9pb191cmluZy5oOjM0MzpzdGF0aWMgaW5saW5lIHZvaWQgaW9fcmVxX3NldF9yZXMzMihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgczMyIHJlcywgdTMyIGNmbGFncyxcbmlvX3VyaW5nL2lvX3VyaW5nLmgtMzQ0LVx0XHRcdFx0ICAgIF9fdTY0IGV4dHJhMSwgX191NjQgZXh0cmEyKVxuLS1cbmlvX3VyaW5nL25vcC5jPTU4PWludCBpb19ub3Aoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbi0tXG5pb191cmluZy9ub3AuYy04MC1cdGlmIChub3AtXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19OT1BfQ1FFMzIpXG5pb191cmluZy9ub3AuYzo4MTpcdFx0aW9fcmVxX3NldF9yZXMzMihyZXEsIHJldCwgMCwgbm9wLVx1MDAzZWV4dHJhMSwgbm9wLVx1MDAzZWV4dHJhMik7XG5pb191cmluZy9ub3AuYy04Mi1cdGVsc2Vcbi0tXG5pb191cmluZy91cmluZ19jbWQuYz0xNTE9dm9pZCBpb191cmluZ19jbWRfc2V0X3JlczMyKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCwgczMyIHJldCwgdTY0IHJlczIpXG4tLVxuaW9fdXJpbmcvdXJpbmdfY21kLmMtMTU2LVx0XHRyZXFfc2V0X2ZhaWwocmVxKTtcbmlvX3VyaW5nL3VyaW5nX2NtZC5jOjE1NzpcdGlvX3JlcV9zZXRfcmVzMzIocmVxLCByZXQsIDAsIHJlczIsIDApO1xuaW9fdXJpbmcvdXJpbmdfY21kLmMtMTU4LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTk6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODc5OQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqRXhhbWluaW5nIGlvX3JlcV9zZXRfcmVzMzIqKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gdGhpcy4gRmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQmIzM5O3MgaGVhZCBzdHJhaWdodCB0byB0aGUgc291cmNlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgYW5kIHBpbnBvaW50IHRoZSBleGFjdCBkZWZpbml0aW9uIG9mIGBpb19yZXFfc2V0X3JlczMyYC4gSSYjMzk7bGwgZ28gZGlyZWN0bHkgdG8gYGlvX3VyaW5nL2lvX3VyaW5nLmhgLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9uIHByb3RvdHlwZXMgcmVzaWRlLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3Mgd2hhdC4gR290dGEgYmUgcHJlY2lzZSBoZXJlLCBubyByb29tIGZvciBndWVzc3dvcmsgd2l0aCB0aGVzZSBsb3ctbGV2ZWwgaW50ZXJmYWNlcy4gVGltZSB0byBsb29rIHVwIHRoZSBkZXRhaWxzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxOToyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2lvX3VyaW5nL2lvX3VyaW5nLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM0MDpcdFx0cmV0dXJuIDA7XG4gMzQxOlx0fVxuIDM0MjpcdFxuIDM0MzpcdHN0YXRpYyBpbmxpbmUgdm9pZCBpb19yZXFfc2V0X3JlczMyKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzMzIgcmVzLCB1MzIgY2ZsYWdzLFxuIDM0NDpcdFx0XHRcdFx0ICAgIF9fdTY0IGV4dHJhMSwgX191NjQgZXh0cmEyKVxuIDM0NTpcdHtcbiAzNDY6XHRcdHJlcS1cdTAwM2VjcWUucmVzID0gcmVzO1xuIDM0NzpcdFx0cmVxLVx1MDAzZWNxZS5mbGFncyA9IGNmbGFncyB8IGN0eF9jcWUzMl9mbGFncyhyZXEtXHUwMDNlY3R4KTtcbiAzNDg6XHRcdHJlcS1cdTAwM2ViaWdfY3FlLmV4dHJhMSA9IGV4dHJhMTtcbiAzNDk6XHRcdHJlcS1cdTAwM2ViaWdfY3FlLmV4dHJhMiA9IGV4dHJhMjtcbiAzNTA6XHR9XG4gMzUxOlx0XG4gMzUyOlx0c3RhdGljIGlubGluZSB2b2lkICppb191cmluZ19hbGxvY19hc3luY19kYXRhKHN0cnVjdCBpb19hbGxvY19jYWNoZSAqY2FjaGUsXG4gMzUzOlx0XHRcdFx0XHRcdCAgICAgIHN0cnVjdCBpb19raW9jYiAqcmVxKVxuIDM1NDpcdHtcbiAzNTU6XHRcdGlmIChjYWNoZSkge1xuIDM1NjpcdFx0XHRyZXEtXHUwMDNlYXN5bmNfZGF0YSA9IGlvX2NhY2hlX2FsbG9jKGNhY2hlLCBHRlBfS0VSTkVMKTtcbiAzNTc6XHRcdH0gZWxzZSB7XG4gMzU4Olx0XHRcdGNvbnN0IHN0cnVjdCBpb19pc3N1ZV9kZWYgKmRlZiA9IFx1MDAyNmlvX2lzc3VlX2RlZnNbcmVxLVx1MDAzZW9wY29kZV07XG4gMzU5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDE5OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkzNDUKCQkJCQkJCW91dHB1dDogMTk0CgkJCQkJCQl0aG91Z2h0czogMTIwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWZhY3RvcmluZyBpb191cmluZ19jbWRfZG9uZTogQSBEZWVwIERpdmUgaW50byBNZW1vcnkgU2FmZXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O20gbG9va2luZyBhdCBhIHJlZmFjdG9yaW5nIG9mIHRoZSBgaW9fdXJpbmdfY21kX2RvbmVgIEFQSSwgYW5kIG15IHByaW1hcnkgY29uY2VybiwgYXMgYWx3YXlzLCBpcyBtZW1vcnkgc2FmZXR5IGFuZCBjb3JyZWN0bmVzcy4gVGhlIG9sZCBjb2RlIGhhZCBhIGNvbWJpbmVkIGZ1bmN0aW9uLCBgX19pb191cmluZ19jbWRfZG9uZWAsIHdoaWNoIHNldCB0aGUgcmVzdWx0LCBmbGFncywgYW5kIGV4dHJhIGZpZWxkcyBvZiB0aGUgY29tcGxldGlvbiBxdWV1ZSBlbnRyeSAoQ1FFKS4gVGhlIG5ldyBjb2RlLCBgaW9fdXJpbmdfY21kX3NldF9yZXMzMmAsIGFwcGVhcnMgdG8gYmUgYSBjbGVhbmVyIHNlcGFyYXRpb24gb2YgY29uY2VybnMuCgpJbml0aWFsbHksIEkgaGFkIGEgaHVuY2ggYWJvdXQgdW5pbml0aWFsaXplZCBtZW1vcnkuIEluIHRoZSBvbGQgY29kZSwgYF9faW9fdXJpbmdfY21kX2RvbmVgIGZpcnN0IHNldCB0aGUgQ1FFIGZsYWdzIHRvIGAwYCBhbmQgY29uZGl0aW9uYWxseSBzZXQgdGhlIGBJT1JJTkdfQ1FFX0ZfMzJgIGZsYWcgYmFzZWQgb24gYElPUklOR19TRVRVUF9DUUVfTUlYRURgLiBUaGUgbmV3IGBpb19yZXFfc2V0X3JlczMyYCwgaG93ZXZlciwgaW1tZWRpYXRlbHkgc2V0cyBgcmVxLSZndDtjcWUuZmxhZ3NgIHRvIGBjZmxhZ3MgfCBjdHhfY3FlMzJfZmxhZ3MocmVxLSZndDtjdHgpYC4gQWZ0ZXIgYSBxdWljayBjaGVjaywgSSByZWFsaXplZCB0aGF0IGBjdHhfY3FlMzJfZmxhZ3NgIGFjaGlldmVzIHRoZSBzYW1lIHJlc3VsdCBhcyB0aGUgb2xkIGNvbmRpdGlvbmFsOiBhZGRpbmcgdGhlIGBJT1JJTkdfQ1FFX0ZfMzJgIGZsYWcgaWYgYElPUklOR19TRVRVUF9DUUVfTUlYRURgIGlzIHNldCBpbiB0aGUgY29udGV4dC4gU28sIHRoZSBmbGFnIHNldHRpbmcgaXMgZXF1aXZhbGVudCwgd2hpY2ggaXMgZ3JlYXQuCgpJJiMzOTttIHZlcmlmeWluZyB0aGF0IHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBtZW1vcnkgbGVha3MgaGVyZS4gVGhlIGBpb191cmluZ19jbWRfc2V0X3JlczMyYCBhbHNvIHNldHMgdGhlIGBleHRyYTFgIGFuZCBgZXh0cmEyYCBmaWVsZHMuICBJbiB0aGUgZXhhbXBsZSB1c2FnZXMgb2YgYGlvX3VyaW5nX2NtZF9zZXRfcmVzMzJgIChpbiBgbnZtZV91cmluZ19jbWRfZW5kX2lvYCBhbmQgYHNjc2lfYnNnX3VyaW5nX3Rhc2tfY2JgKSwgdGhlIGBleHRyYTFgIGlzIHBhc3NlZCBpbiBhcyBgcmVzMmAsIHdoaWNoIGlzIGV4cGxpY2l0bHkgYXNzaWduZWQuIGBleHRyYTJgIGlzIHNldCB0byBgMGAgaW4gYGlvX3JlcV9zZXRfcmVzMzJgLiBTbywgbm8gdW5pbml0aWFsaXplZCBtZW1vcnksIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCBJIHdhcyBob3BpbmcgdG8gc2VlLgoKU2luY2UgdGhpcyBpcyBwdXJlbHkgYSByZWZhY3RvcmluZywgaXQmIzM5O3Mgbm90IGludHJvZHVjaW5nIGFueSBuZXcgdXNlci1zcGFjZSBzdHJ1Y3R1cmVzIG9yIGNoYW5naW5nIGFueSBib3VuZHMgY2hlY2tzLiBUaGlzIGlzIGdvb2QgbmV3cywgYXMgaXQgbWluaW1pemVzIHRoZSByaXNrIG9mIGludHJvZHVjaW5nIHN1YnRsZSBidWdzIG9yIHZ1bG5lcmFiaWxpdGllcy4gQmVjYXVzZSBvZiB0aGUgY29kZSByZXZpZXcsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgdGhlc2UgY2hhbmdlcyBhcmUgc2FmZS4gSSB3aWxsIG1hcmsgYE5lZWRzS01TQU49ZmFsc2VgIGFzIHRoZSBjb2RlIGlzIHNhZmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDE5OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgYGlvX3VyaW5nX2NtZF9kb25lYCBBUEkgYnkgc3BsaXR0aW5nIGl0IGludG8gYGlvX3VyaW5nX2NtZF9zZXRfcmVzYC9gaW9fdXJpbmdfY21kX3NldF9yZXMzMmAgYW5kIGBpb191cmluZ19jbWRfZG9uZWAuIFRoZSB2YWx1ZXMgcGFzc2VkIHRvIHRoZXNlIGZ1bmN0aW9ucyByZW1haW4gdGhlIHNhbWUgYXMgYmVmb3JlLCBhbmQgYWxsIGZpZWxkcyBpbiB0aGUgY29tcGxldGlvbiBxdWV1ZSBlbnRyeSAoQ1FFKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCAoZS5nLiwgYGV4dHJhMmAgaXMgc2V0IHRvIDAgaW4gYGlvX3JlcV9zZXRfcmVzMzJgKS4gVGhlcmUgYXJlIG5vIG5ldyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm8gY2hhbmdlcyB0byBib3VuZHMgY2hlY2tpbmcsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2guIEFueSBwb3RlbnRpYWwgYnVncyB3b3VsZCBiZSBsb2dpYyBlcnJvcnMgb3IgdXNlLWFmdGVyLWZyZWUvb3V0LW9mLWJvdW5kcyBpc3N1ZXMsIHdoaWNoIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgS0FTQU4gYW5kIG90aGVyIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGBpb191cmluZ19jbWRfZG9uZWAgQVBJIGJ5IHNwbGl0dGluZyBpdCBpbnRvIGBpb191cmluZ19jbWRfc2V0X3Jlc2AvYGlvX3VyaW5nX2NtZF9zZXRfcmVzMzJgIGFuZCBgaW9fdXJpbmdfY21kX2RvbmVgLiBUaGUgdmFsdWVzIHBhc3NlZCB0byB0aGVzZSBmdW5jdGlvbnMgcmVtYWluIHRoZSBzYW1lIGFzIGJlZm9yZSwgYW5kIGFsbCBmaWVsZHMgaW4gdGhlIGNvbXBsZXRpb24gcXVldWUgZW50cnkgKENRRSkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgKGUuZy4sIGBleHRyYTJgIGlzIHNldCB0byAwIGluIGBpb19yZXFfc2V0X3JlczMyYCkuIFRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vIGNoYW5nZXMgdG8gYm91bmRzIGNoZWNraW5nLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLiBBbnkgcG90ZW50aWFsIGJ1Z3Mgd291bGQgYmUgbG9naWMgZXJyb3JzIG9yIHVzZS1hZnRlci1mcmVlL291dC1vZi1ib3VuZHMgaXNzdWVzLCB3aGljaCBhcmUgYWRlcXVhdGVseSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBvdGhlciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxOToyMjozNC45NjkxMzQzNTVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzI5NTkwNjUzMjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU9fVVJJTkdcIixcbiAgICBcIkJMS19ERVZfVUJMS1wiLFxuICAgIFwiTlZNRV9DT1JFXCIsXG4gICAgXCJCTEtfREVWX05WTUVcIixcbiAgICBcIkJMS19ERVZfQlNHXCIsXG4gICAgXCJCVFJGU19GU1wiLFxuICAgIFwiRlVTRV9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvX3VyaW5nX2NtZF9zZXRfcmVzXCIsXG4gICAgXCJpb191cmluZ19jbWRfc2V0X3JlczMyXCIsXG4gICAgXCJpb191cmluZ19jbWRfZG9uZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBgaW9fdXJpbmdfY21kX2RvbmVgIEFQSSBieSBzcGxpdHRpbmcgaXQgaW50byBgaW9fdXJpbmdfY21kX3NldF9yZXNgL2Bpb191cmluZ19jbWRfc2V0X3JlczMyYCBhbmQgYGlvX3VyaW5nX2NtZF9kb25lYC4gVGhlIHZhbHVlcyBwYXNzZWQgdG8gdGhlc2UgZnVuY3Rpb25zIHJlbWFpbiB0aGUgc2FtZSBhcyBiZWZvcmUsIGFuZCBhbGwgZmllbGRzIGluIHRoZSBjb21wbGV0aW9uIHF1ZXVlIGVudHJ5IChDUUUpIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIChlLmcuLCBgZXh0cmEyYCBpcyBzZXQgdG8gMCBpbiBgaW9fcmVxX3NldF9yZXMzMmApLiBUaGVyZSBhcmUgbm8gbmV3IHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBubyBjaGFuZ2VzIHRvIGJvdW5kcyBjaGVja2luZywgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaC4gQW55IHBvdGVudGlhbCBidWdzIHdvdWxkIGJlIGxvZ2ljIGVycm9ycyBvciB1c2UtYWZ0ZXItZnJlZS9vdXQtb2YtYm91bmRzIGlzc3Vlcywgd2hpY2ggYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBLQVNBTiBhbmQgb3RoZXIgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBpb191cmluZyBjb21tYW5kIEFQSSBieSBzcGxpdHRpbmcgYGlvX3VyaW5nX2NtZF9kb25lYCBpbnRvIGBpb191cmluZ19jbWRfc2V0X3Jlc2AgKG9yIGBpb191cmluZ19jbWRfc2V0X3JlczMyYCkgYW5kIGBpb191cmluZ19jbWRfZG9uZWAuIFRoaXMgYWZmZWN0cyBob3cgcmVzdWx0cyBhcmUgcmV0dXJuZWQgZm9yIGlvX3VyaW5nIGNvbW1hbmRzIGFjcm9zcyBtdWx0aXBsZSBzdWJzeXN0ZW1zIGluY2x1ZGluZyBibG9jaywgdWJsaywgbnZtZSwgc2NzaSBic2csIGJ0cmZzLCBhbmQgZnVzZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGtlcm5lbCBBUEkgYW5kIGl0cyBjYWxsZXJzLCB3aGljaCBpcyB3b3J0aCBmdXp6aW5nIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBpbmNvcnJlY3QgcmVzdWx0IGhhbmRsaW5nIGFyZSBpbnRyb2R1Y2VkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxOToyMjozNC45NjkxNDIzMDVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyODQwNDM5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDM1ZjZjMWNkNWJjOWY3OWQ3N2M4NWY2YjFmNjhhYzNmNmYxYWEyYzNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgMjcgMTk6MjI6MzMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYmxvY2svaW9jdGwuYyBiL2Jsb2NrL2lvY3RsLmNcXG5pbmRleCA2NGI0ZTZjMGY2OTY1Li45NDZjYWI3NGYyNTNlIDEwMDY0NFxcbi0tLSBhL2Jsb2NrL2lvY3RsLmNcXG4rKysgYi9ibG9jay9pb2N0bC5jXFxuQEAgLTg3MSw5ICs4NzEsMTAgQEAgc3RhdGljIHZvaWQgYmxrX2NtZF9jb21wbGV0ZShzdHJ1Y3QgaW9fdHdfcmVxIHR3X3JlcSwgaW9fdHdfdG9rZW5fdCB0dylcXG4gXFxuIFxcdGlmIChiaWMtXFx1MDAzZXJlcyA9PSAtRUFHQUlOIFxcdTAwMjZcXHUwMDI2IGJpYy1cXHUwMDNlbm93YWl0KVxcbiBcXHRcXHRpb191cmluZ19jbWRfaXNzdWVfYmxvY2tpbmcoY21kKTtcXG4tXFx0ZWxzZVxcbi1cXHRcXHRpb191cmluZ19jbWRfZG9uZShjbWQsIGJpYy1cXHUwMDNlcmVzLFxcbi1cXHRcXHRcXHRcXHQgIElPX1VSSU5HX0NNRF9UQVNLX1dPUktfSVNTVUVfRkxBR1MpO1xcbitcXHRlbHNlIHtcXG4rXFx0XFx0aW9fdXJpbmdfY21kX3NldF9yZXMoY21kLCBiaWMtXFx1MDAzZXJlcyk7XFxuK1xcdFxcdGlvX3VyaW5nX2NtZF9kb25lKGNtZCwgSU9fVVJJTkdfQ01EX1RBU0tfV09SS19JU1NVRV9GTEFHUyk7XFxuK1xcdH1cXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgYmlvX2NtZF9iaW9fZW5kX2lvKHN0cnVjdCBiaW8gKmJpbylcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay91YmxrX2Rydi5jIGIvZHJpdmVycy9ibG9jay91YmxrX2Rydi5jXFxuaW5kZXggNGQxN2VkMjY0ZGExYS4uNTFmMTVlNWIzYzAxZCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmNcXG4rKysgYi9kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmNcXG5AQCAtODM5LDcgKzgzOSw4IEBAIHN0YXRpYyB2b2lkIHVibGtfYmF0Y2hfZGVpbml0X2ZldGNoX2J1ZihzdHJ1Y3QgdWJsa19xdWV1ZSAqdWJxLFxcbiBcXHRfX3VibGtfcmVsZWFzZV9mY21kKHVicSk7XFxuIFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZ1YnEtXFx1MDAzZWV2dHNfbG9jayk7XFxuIFxcbi1cXHRpb191cmluZ19jbWRfZG9uZShmY21kLVxcdTAwM2VjbWQsIHJlcywgZGF0YS1cXHUwMDNlaXNzdWVfZmxhZ3MpO1xcbitcXHRpb191cmluZ19jbWRfc2V0X3JlcyhmY21kLVxcdTAwM2VjbWQsIHJlcyk7XFxuK1xcdGlvX3VyaW5nX2NtZF9kb25lKGZjbWQtXFx1MDAzZWNtZCwgZGF0YS1cXHUwMDNlaXNzdWVfZmxhZ3MpO1xcbiBcXHR1YmxrX2JhdGNoX2ZyZWVfZmNtZChmY21kKTtcXG4gfVxcbiBcXG5AQCAtMTY0Miw3ICsxNjQzLDggQEAgc3RhdGljIHZvaWQgdWJsa19jb21wbGV0ZV9pb19jbWQoc3RydWN0IHVibGtfaW8gKmlvLCBzdHJ1Y3QgcmVxdWVzdCAqcmVxLFxcbiBcXHRzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQgPSBfX3VibGtfcHJlcF9jb21wbF9pb19jbWQoaW8sIHJlcSk7XFxuIFxcbiBcXHQvKiB0ZWxsIHVibGtzcnYgb25lIGlvIHJlcXVlc3QgaXMgY29taW5nICovXFxuLVxcdGlvX3VyaW5nX2NtZF9kb25lKGNtZCwgcmVzLCBpc3N1ZV9mbGFncyk7XFxuK1xcdGlvX3VyaW5nX2NtZF9zZXRfcmVzKGNtZCwgcmVzKTtcXG4rXFx0aW9fdXJpbmdfY21kX2RvbmUoY21kLCBpc3N1ZV9mbGFncyk7XFxuIH1cXG4gXFxuICNkZWZpbmUgVUJMS19SRVFVRVVFX0RFTEFZX01TXFx0M1xcbkBAIC0xNzI4LDcgKzE3MzAsOCBAQCBzdGF0aWMgdm9pZCB1YmxrX2F1dG9fYnVmX2Rpc3BhdGNoKGNvbnN0IHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEsXFxuIFxcbiBcXHRpZiAocmVzICE9IEFVVE9fQlVGX1JFR19GQUlMKSB7XFxuIFxcdFxcdHVibGtfYXV0b19idWZfaW9fc2V0dXAodWJxLCByZXEsIGlvLCBjbWQsIHJlcyk7XFxuLVxcdFxcdGlvX3VyaW5nX2NtZF9kb25lKGNtZCwgVUJMS19JT19SRVNfT0ssIGlzc3VlX2ZsYWdzKTtcXG4rXFx0XFx0aW9fdXJpbmdfY21kX3NldF9yZXMoY21kLCBVQkxLX0lPX1JFU19PSyk7XFxuK1xcdFxcdGlvX3VyaW5nX2NtZF9kb25lKGNtZCwgaXNzdWVfZmxhZ3MpO1xcbiBcXHR9XFxuIH1cXG4gXFxuQEAgLTI3ODksOCArMjc5MiwxMCBAQCBzdGF0aWMgdm9pZCB1YmxrX2NhbmNlbF9jbWQoc3RydWN0IHVibGtfcXVldWUgKnVicSwgdTE2IHRhZyxcXG4gXFx0fVxcbiBcXHRzcGluX3VubG9jayhcXHUwMDI2dWJxLVxcdTAwM2VjYW5jZWxfbG9jayk7XFxuIFxcbi1cXHRpZiAoIWRvbmUgXFx1MDAyNlxcdTAwMjYgY21kKVxcbi1cXHRcXHRpb191cmluZ19jbWRfZG9uZShjbWQsIFVCTEtfSU9fUkVTX0FCT1JULCBpc3N1ZV9mbGFncyk7XFxuK1xcdGlmICghZG9uZSBcXHUwMDI2XFx1MDAyNiBjbWQpIHtcXG4rXFx0XFx0aW9fdXJpbmdfY21kX3NldF9yZXMoY21kLCBVQkxLX0lPX1JFU19BQk9SVCk7XFxuK1xcdFxcdGlvX3VyaW5nX2NtZF9kb25lKGNtZCwgaXNzdWVfZmxhZ3MpO1xcbitcXHR9XFxuIH1cXG4gXFxuIC8qXFxuQEAgLTI4MTYsNyArMjgyMSw4IEBAIHN0YXRpYyB2b2lkIHVibGtfYmF0Y2hfY2FuY2VsX2NtZChzdHJ1Y3QgdWJsa19xdWV1ZSAqdWJxLFxcbiBcXHRzcGluX3VubG9jayhcXHUwMDI2dWJxLVxcdTAwM2VldnRzX2xvY2spO1xcbiBcXG4gXFx0aWYgKGRvbmUpIHtcXG4tXFx0XFx0aW9fdXJpbmdfY21kX2RvbmUoZmNtZC1cXHUwMDNlY21kLCBVQkxLX0lPX1JFU19BQk9SVCwgaXNzdWVfZmxhZ3MpO1xcbitcXHRcXHRpb191cmluZ19jbWRfc2V0X3JlcyhmY21kLVxcdTAwM2VjbWQsIFVCTEtfSU9fUkVTX0FCT1JUKTtcXG4rXFx0XFx0aW9fdXJpbmdfY21kX2RvbmUoZmNtZC1cXHUwMDNlY21kLCBpc3N1ZV9mbGFncyk7XFxuIFxcdFxcdHVibGtfYmF0Y2hfZnJlZV9mY21kKGZjbWQpO1xcbiBcXHR9XFxuIH1cXG5AQCAtMzUyNiw4ICszNTMyLDEwIEBAIHN0YXRpYyB2b2lkIHVibGtfY2hfdXJpbmdfY21kX2NiKHN0cnVjdCBpb190d19yZXEgdHdfcmVxLCBpb190d190b2tlbl90IHR3KVxcbiBcXG4gXFx0aWYgKCF0dy5jYW5jZWwpXFxuIFxcdFxcdHJldCA9IHVibGtfY2hfdXJpbmdfY21kX2xvY2FsKGNtZCwgaXNzdWVfZmxhZ3MpO1xcbi1cXHRpZiAocmV0ICE9IC1FSU9DQlFVRVVFRClcXG4tXFx0XFx0aW9fdXJpbmdfY21kX2RvbmUoY21kLCByZXQsIGlzc3VlX2ZsYWdzKTtcXG4rXFx0aWYgKHJldCAhPSAtRUlPQ0JRVUVVRUQpIHtcXG4rXFx0XFx0aW9fdXJpbmdfY21kX3NldF9yZXMoY21kLCByZXQpO1xcbitcXHRcXHRpb191cmluZ19jbWRfZG9uZShjbWQsIGlzc3VlX2ZsYWdzKTtcXG4rXFx0fVxcbiB9XFxuIFxcbiBzdGF0aWMgaW50IHVibGtfY2hfdXJpbmdfY21kKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jIGIvZHJpdmVycy9udm1lL2hvc3QvaW9jdGwuY1xcbmluZGV4IDY1MzlkNDc1MDA5ODYuLmI1MGJiYTIwNzgxOGIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9udm1lL2hvc3QvaW9jdGwuY1xcbisrKyBiL2RyaXZlcnMvbnZtZS9ob3N0L2lvY3RsLmNcXG5AQCAtNDIzLDggKzQyMyw2IEBAIHN0cnVjdCBudm1lX3VyaW5nX2RhdGEge1xcbiBzdHJ1Y3QgbnZtZV91cmluZ19jbWRfcGR1IHtcXG4gXFx0c3RydWN0IHJlcXVlc3QgKnJlcTtcXG4gXFx0c3RydWN0IGJpbyAqYmlvO1xcbi1cXHR1NjQgcmVzdWx0O1xcbi1cXHRpbnQgc3RhdHVzO1xcbiB9O1xcbiBcXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgbnZtZV91cmluZ19jbWRfcGR1ICpudm1lX3VyaW5nX2NtZF9wZHUoXFxuQEAgLTQ0MCw4ICs0MzgsNyBAQCBzdGF0aWMgdm9pZCBudm1lX3VyaW5nX3Rhc2tfY2Ioc3RydWN0IGlvX3R3X3JlcSB0d19yZXEsIGlvX3R3X3Rva2VuX3QgdHcpXFxuIFxcbiBcXHRpZiAocGR1LVxcdTAwM2ViaW8pXFxuIFxcdFxcdGJsa19ycV91bm1hcF91c2VyKHBkdS1cXHUwMDNlYmlvKTtcXG4tXFx0aW9fdXJpbmdfY21kX2RvbmUzMihpb3VjbWQsIHBkdS1cXHUwMDNlc3RhdHVzLCBwZHUtXFx1MDAzZXJlc3VsdCxcXG4tXFx0XFx0XFx0ICAgIElPX1VSSU5HX0NNRF9UQVNLX1dPUktfSVNTVUVfRkxBR1MpO1xcbitcXHRpb191cmluZ19jbWRfZG9uZShpb3VjbWQsIElPX1VSSU5HX0NNRF9UQVNLX1dPUktfSVNTVUVfRkxBR1MpO1xcbiB9XFxuIFxcbiBzdGF0aWMgZW51bSBycV9lbmRfaW9fcmV0IG52bWVfdXJpbmdfY21kX2VuZF9pbyhzdHJ1Y3QgcmVxdWVzdCAqcmVxLFxcbkBAIC00NTAsMTUgKzQ0NywxNyBAQCBzdGF0aWMgZW51bSBycV9lbmRfaW9fcmV0IG52bWVfdXJpbmdfY21kX2VuZF9pbyhzdHJ1Y3QgcmVxdWVzdCAqcmVxLFxcbiB7XFxuIFxcdHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCA9IHJlcS1cXHUwMDNlZW5kX2lvX2RhdGE7XFxuIFxcdHN0cnVjdCBudm1lX3VyaW5nX2NtZF9wZHUgKnBkdSA9IG52bWVfdXJpbmdfY21kX3BkdShpb3VjbWQpO1xcbitcXHR1NjQgcmVzdWx0ID0gbGU2NF90b19jcHUobnZtZV9yZXEocmVxKS1cXHUwMDNlcmVzdWx0LnU2NCk7XFxuK1xcdGludCBzdGF0dXM7XFxuIFxcbiBcXHRpZiAobnZtZV9yZXEocmVxKS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBOVk1FX1JFUV9DQU5DRUxMRUQpIHtcXG4tXFx0XFx0cGR1LVxcdTAwM2VzdGF0dXMgPSAtRUlOVFI7XFxuK1xcdFxcdHN0YXR1cyA9IC1FSU5UUjtcXG4gXFx0fSBlbHNlIHtcXG4tXFx0XFx0cGR1LVxcdTAwM2VzdGF0dXMgPSBudm1lX3JlcShyZXEpLVxcdTAwM2VzdGF0dXM7XFxuLVxcdFxcdGlmICghcGR1LVxcdTAwM2VzdGF0dXMpXFxuLVxcdFxcdFxcdHBkdS1cXHUwMDNlc3RhdHVzID0gYmxrX3N0YXR1c190b19lcnJubyhlcnIpO1xcbitcXHRcXHRzdGF0dXMgPSBudm1lX3JlcShyZXEpLVxcdTAwM2VzdGF0dXM7XFxuK1xcdFxcdGlmICghc3RhdHVzKVxcbitcXHRcXHRcXHRzdGF0dXMgPSBibGtfc3RhdHVzX3RvX2Vycm5vKGVycik7XFxuIFxcdH1cXG4tXFx0cGR1LVxcdTAwM2VyZXN1bHQgPSBsZTY0X3RvX2NwdShudm1lX3JlcShyZXEpLVxcdTAwM2VyZXN1bHQudTY0KTtcXG4rXFx0aW9fdXJpbmdfY21kX3NldF9yZXMzMihpb3VjbWQsIHN0YXR1cywgcmVzdWx0KTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIEZvciBJT1BPTEwsIGNoZWNrIGlmIHRoaXMgY29tcGxldGlvbiBpcyBoYXBwZW5pbmcgaW4gdGhlIGNvbnRleHRcXG5AQCAtNDcxLDcgKzQ3MCw3IEBAIHN0YXRpYyBlbnVtIHJxX2VuZF9pb19yZXQgbnZtZV91cmluZ19jbWRfZW5kX2lvKHN0cnVjdCByZXF1ZXN0ICpyZXEsXFxuIFxcdCAgICBpb2ItXFx1MDAzZXBvbGxfY3R4ID09IGlvX3VyaW5nX2NtZF9jdHhfaGFuZGxlKGlvdWNtZCkpIHtcXG4gXFx0XFx0aWYgKHBkdS1cXHUwMDNlYmlvKVxcbiBcXHRcXHRcXHRibGtfcnFfdW5tYXBfdXNlcihwZHUtXFx1MDAzZWJpbyk7XFxuLVxcdFxcdGlvX3VyaW5nX2NtZF9kb25lMzIoaW91Y21kLCBwZHUtXFx1MDAzZXN0YXR1cywgcGR1LVxcdTAwM2VyZXN1bHQsIDApO1xcbitcXHRcXHRpb191cmluZ19jbWRfZG9uZShpb3VjbWQsIDApO1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHRpb191cmluZ19jbWRfZG9faW5fdGFza19sYXp5KGlvdWNtZCwgbnZtZV91cmluZ190YXNrX2NiKTtcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9ic2cuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX2JzZy5jXFxuaW5kZXggZTgwZGVjNTMxNzRlYS4uOGIzMmQ4ZThmMjlmOSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9ic2cuY1xcbisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX2JzZy5jXFxuQEAgLTYwLDggKzYwLDggQEAgc3RhdGljIHZvaWQgc2NzaV9ic2dfdXJpbmdfdGFza19jYihzdHJ1Y3QgaW9fdHdfcmVxIHR3X3JlcSwgaW9fdHdfdG9rZW5fdCB0dylcXG4gXFx0XFx0XFx0XFx0ICBzY21kLVxcdTAwM2VyZXNpZF9sZW4pO1xcbiBcXG4gXFx0YmxrX21xX2ZyZWVfcmVxdWVzdChycSk7XFxuLVxcdGlvX3VyaW5nX2NtZF9kb25lMzIoaW91Y21kLCByZXQsIHJlczIsXFxuLVxcdFxcdFxcdCAgICBJT19VUklOR19DTURfVEFTS19XT1JLX0lTU1VFX0ZMQUdTKTtcXG4rXFx0aW9fdXJpbmdfY21kX3NldF9yZXMzMihpb3VjbWQsIHJldCwgcmVzMik7XFxuK1xcdGlvX3VyaW5nX2NtZF9kb25lKGlvdWNtZCwgSU9fVVJJTkdfQ01EX1RBU0tfV09SS19JU1NVRV9GTEFHUyk7XFxuIH1cXG4gXFxuIHN0YXRpYyBlbnVtIHJxX2VuZF9pb19yZXQgc2NzaV9ic2dfdXJpbmdfY21kX2RvbmUoc3RydWN0IHJlcXVlc3QgKnJlcSxcXG5kaWZmIC0tZ2l0IGEvZnMvYnRyZnMvaW9jdGwuYyBiL2ZzL2J0cmZzL2lvY3RsLmNcXG5pbmRleCA3MmJjOWQ0Zjc3MDg3Li4wNzA1N2E3MDg0NTI5IDEwMDY0NFxcbi0tLSBhL2ZzL2J0cmZzL2lvY3RsLmNcXG4rKysgYi9mcy9idHJmcy9pb2N0bC5jXFxuQEAgLTQ2MjEsNyArNDYyMSw4IEBAIHN0YXRpYyB2b2lkIGJ0cmZzX3VyaW5nX3JlYWRfZmluaXNoZWQoc3RydWN0IGlvX3R3X3JlcSB0d19yZXEsIGlvX3R3X3Rva2VuX3QgdHcpXFxuIFxcdGJ0cmZzX3VubG9ja19leHRlbnQoaW9fdHJlZSwgcHJpdi1cXHUwMDNlc3RhcnQsIHByaXYtXFx1MDAzZWxvY2tlbmQsIFxcdTAwMjZwcml2LVxcdTAwM2VjYWNoZWRfc3RhdGUpO1xcbiBcXHRidHJmc19pbm9kZV91bmxvY2soaW5vZGUsIEJUUkZTX0lMT0NLX1NIQVJFRCk7XFxuIFxcbi1cXHRpb191cmluZ19jbWRfZG9uZShjbWQsIHJldCwgSU9fVVJJTkdfQ01EX1RBU0tfV09SS19JU1NVRV9GTEFHUyk7XFxuK1xcdGlvX3VyaW5nX2NtZF9zZXRfcmVzKGNtZCwgcmV0KTtcXG4rXFx0aW9fdXJpbmdfY21kX2RvbmUoY21kLCBJT19VUklOR19DTURfVEFTS19XT1JLX0lTU1VFX0ZMQUdTKTtcXG4gXFx0YWRkX3JjaGFyKGN1cnJlbnQsIHJldCk7XFxuIFxcbiBcXHRmb3IgKGluZGV4ID0gMDsgaW5kZXggXFx1MDAzYyBwcml2LVxcdTAwM2Vucl9wYWdlczsgaW5kZXgrKylcXG5kaWZmIC0tZ2l0IGEvZnMvZnVzZS9kZXZfdXJpbmcuYyBiL2ZzL2Z1c2UvZGV2X3VyaW5nLmNcXG5pbmRleCA3N2M4Y2VjNDNkOWM2Li5jNWJiNTAxODNlMWM2IDEwMDY0NFxcbi0tLSBhL2ZzL2Z1c2UvZGV2X3VyaW5nLmNcXG4rKysgYi9mcy9mdXNlL2Rldl91cmluZy5jXFxuQEAgLTM2Niw4ICszNjYsMTAgQEAgc3RhdGljIHZvaWQgZnVzZV91cmluZ19lbnRyeV90ZWFyZG93bihzdHJ1Y3QgZnVzZV9yaW5nX2VudCAqZW50KVxcbiBcXHRlbnQtXFx1MDAzZXN0YXRlID0gRlJSU19SRUxFQVNFRDtcXG4gXFx0c3Bpbl91bmxvY2soXFx1MDAyNnF1ZXVlLVxcdTAwM2Vsb2NrKTtcXG4gXFxuLVxcdGlmIChjbWQpXFxuLVxcdFxcdGlvX3VyaW5nX2NtZF9kb25lKGNtZCwgLUVOT1RDT05OLCBJT19VUklOR19GX1VOTE9DS0VEKTtcXG4rXFx0aWYgKGNtZCkge1xcbitcXHRcXHRpb191cmluZ19jbWRfc2V0X3JlcyhjbWQsIC1FTk9UQ09OTik7XFxuK1xcdFxcdGlvX3VyaW5nX2NtZF9kb25lKGNtZCwgSU9fVVJJTkdfRl9VTkxPQ0tFRCk7XFxuK1xcdH1cXG4gXFxuIFxcdGlmIChyZXEpXFxuIFxcdFxcdGZ1c2VfdXJpbmdfc3RvcF9mdXNlX3JlcV9lbmQocmVxKTtcXG5AQCAtNTMxLDcgKzUzMyw4IEBAIHN0YXRpYyB2b2lkIGZ1c2VfdXJpbmdfY2FuY2VsKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCxcXG4gXFxuIFxcdGlmIChuZWVkX2NtZF9kb25lKSB7XFxuIFxcdFxcdC8qIG5vIHF1ZXVlIGxvY2sgdG8gYXZvaWQgbG9jayBvcmRlciBpc3N1ZXMgKi9cXG4tXFx0XFx0aW9fdXJpbmdfY21kX2RvbmUoY21kLCAtRU5PVENPTk4sIGlzc3VlX2ZsYWdzKTtcXG4rXFx0XFx0aW9fdXJpbmdfY21kX3NldF9yZXMoY21kLCAtRU5PVENPTk4pO1xcbitcXHRcXHRpb191cmluZ19jbWRfZG9uZShjbWQsIGlzc3VlX2ZsYWdzKTtcXG4gXFx0XFx0a2ZyZWUoZW50KTtcXG4gXFx0XFx0aWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoXFx1MDAyNnF1ZXVlLVxcdTAwM2VyaW5nLVxcdTAwM2VxdWV1ZV9yZWZzKSlcXG4gXFx0XFx0XFx0d2FrZV91cF9hbGwoXFx1MDAyNnF1ZXVlLVxcdTAwM2VyaW5nLVxcdTAwM2VzdG9wX3dhaXRxKTtcXG5AQCAtOTQyLDcgKzk0NSw4IEBAIHN0YXRpYyB2b2lkIGZ1c2VfdXJpbmdfc2VuZChzdHJ1Y3QgZnVzZV9yaW5nX2VudCAqZW50LCBzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsXFxuIFxcdGZ1c2VfdXJpbmdfYWRkX3RvX3BxKGVudCk7XFxuIFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZxdWV1ZS1cXHUwMDNlbG9jayk7XFxuIFxcbi1cXHRpb191cmluZ19jbWRfZG9uZShjbWQsIHJldCwgaXNzdWVfZmxhZ3MpO1xcbitcXHRpb191cmluZ19jbWRfc2V0X3JlcyhjbWQsIHJldCk7XFxuK1xcdGlvX3VyaW5nX2NtZF9kb25lKGNtZCwgaXNzdWVfZmxhZ3MpO1xcbiB9XFxuIFxcbiAvKiBGVVNFX1VSSU5HX0NNRF9DT01NSVRfQU5EX0ZFVENIIGhhbmRsZXIgKi9cXG5AQCAtMTMwOSw3ICsxMzEzLDggQEAgc3RhdGljIHZvaWQgZnVzZV91cmluZ19zZW5kX2luX3Rhc2soc3RydWN0IGlvX3R3X3JlcSB0d19yZXEsIGlvX3R3X3Rva2VuX3QgdHcpXFxuIFxcdFxcdGxpc3RfZGVsX2luaXQoXFx1MDAyNmVudC1cXHUwMDNlbGlzdCk7XFxuIFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZxdWV1ZS1cXHUwMDNlbG9jayk7XFxuIFxcbi1cXHRcXHRpb191cmluZ19jbWRfZG9uZShjbWQsIGVyciwgaXNzdWVfZmxhZ3MpO1xcbitcXHRcXHRpb191cmluZ19jbWRfc2V0X3JlcyhjbWQsIGVycik7XFxuK1xcdFxcdGlvX3VyaW5nX2NtZF9kb25lKGNtZCwgaXNzdWVfZmxhZ3MpO1xcbiBcXG4gXFx0XFx0ZnVzZV91cmluZ19yZXFfZW5kKGVudCwgZW50LVxcdTAwM2VmdXNlX3JlcSwgZXJyKTtcXG4gXFx0XFx0a2ZyZWUoZW50KTtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pb191cmluZy9jbWQuaCBiL2luY2x1ZGUvbGludXgvaW9fdXJpbmcvY21kLmhcXG5pbmRleCAzMzFkY2JlZmU3MmYxLi45NmZjYzA2MDk3YzRlIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvaW9fdXJpbmcvY21kLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2lvX3VyaW5nL2NtZC5oXFxuQEAgLTUyLDYgKzUyLDEwIEBAIGludCBpb191cmluZ19jbWRfaW1wb3J0X2ZpeGVkX3ZlYyhzdHJ1Y3QgaW9fdXJpbmdfY21kICppb3VjbWQsXFxuIFxcdFxcdFxcdFxcdCAgaW50IGRkaXIsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4gXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBpc3N1ZV9mbGFncyk7XFxuIFxcbisvKiBPbmUgb2YgdGhlc2UgbXVzdCBiZSBjYWxsZWQgcHJpb3IgdG8gaW9fdXJpbmdfY21kX2RvbmUoKSAqL1xcbit2b2lkIGlvX3VyaW5nX2NtZF9zZXRfcmVzKHN0cnVjdCBpb191cmluZ19jbWQgKiwgczMyIHJldCk7XFxuK3ZvaWQgaW9fdXJpbmdfY21kX3NldF9yZXMzMihzdHJ1Y3QgaW9fdXJpbmdfY21kICosIHMzMiByZXQsIHU2NCByZXMyKTtcXG4rXFxuIC8qXFxuICAqIENvbXBsZXRlcyB0aGUgcmVxdWVzdCwgaS5lLiBwb3N0cyBhbiBpb191cmluZyBDUUUgYW5kIGRlYWxsb2NhdGVzIEBpb3VjbWRcXG4gICogYW5kIHRoZSBjb3JyZXNwb25kaW5nIGlvX3VyaW5nIHJlcXVlc3QuXFxuQEAgLTU5LDggKzYzLDcgQEAgaW50IGlvX3VyaW5nX2NtZF9pbXBvcnRfZml4ZWRfdmVjKHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCxcXG4gICogTm90ZTogdGhlIGNhbGxlciBzaG91bGQgbmV2ZXIgaGFyZCBjb2RlIEBpc3N1ZV9mbGFncyBhbmQgaXMgb25seSBhbGxvd2VkXFxuICAqIHRvIHBhc3MgdGhlIG1hc2sgcHJvdmlkZWQgYnkgdGhlIGNvcmUgaW9fdXJpbmcgY29kZS5cXG4gICovXFxuLXZvaWQgX19pb191cmluZ19jbWRfZG9uZShzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsIHMzMiByZXQsIHU2NCByZXMyLFxcbi1cXHRcXHRcXHQgdW5zaWduZWQgaXNzdWVfZmxhZ3MsIGJvb2wgaXNfY3FlMzIpO1xcbit2b2lkIGlvX3VyaW5nX2NtZF9kb25lKHN0cnVjdCBpb191cmluZ19jbWQgKiwgdW5zaWduZWQgaXNzdWVfZmxhZ3MpO1xcbiBcXG4gdm9pZCBfX2lvX3VyaW5nX2NtZF9kb19pbl90YXNrKHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCxcXG4gXFx0XFx0XFx0ICAgIGlvX3JlcV90d19mdW5jX3QgdGFza193b3JrX2NiLFxcbkBAIC0xMDcsOCArMTEwLDE1IEBAIHN0YXRpYyBpbmxpbmUgaW50IGlvX3VyaW5nX2NtZF9pbXBvcnRfZml4ZWRfdmVjKHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCxcXG4ge1xcbiBcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIH1cXG4tc3RhdGljIGlubGluZSB2b2lkIF9faW9fdXJpbmdfY21kX2RvbmUoc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLCBzMzIgcmV0LFxcbi1cXHRcXHR1NjQgcmV0MiwgdW5zaWduZWQgaXNzdWVfZmxhZ3MsIGJvb2wgaXNfY3FlMzIpXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBpb191cmluZ19jbWRfc2V0X3JlcyhzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsIHMzMiByZXQpXFxuK3tcXG4rfVxcbitzdGF0aWMgaW5saW5lIHZvaWQgaW9fdXJpbmdfY21kX3NldF9yZXMzMihzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsIHMzMiByZXQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgdTY0IHJlczIpXFxuK3tcXG4rfVxcbitzdGF0aWMgaW5saW5lIHZvaWQgaW9fdXJpbmdfY21kX2RvbmUoc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLFxcbitcXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGlzc3VlX2ZsYWdzKVxcbiB7XFxuIH1cXG4gc3RhdGljIGlubGluZSB2b2lkIF9faW9fdXJpbmdfY21kX2RvX2luX3Rhc2soc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y21kLFxcbkBAIC0xNzAsMTggKzE4MCw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCAqaW9fdXJpbmdfY21kX2N0eF9oYW5kbGUoc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kKVxcbiBcXHRyZXR1cm4gY21kX3RvX2lvX2tpb2NiKGNtZCktXFx1MDAzZWN0eDtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSB2b2lkIGlvX3VyaW5nX2NtZF9kb25lKHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCwgczMyIHJldCxcXG4tXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBpc3N1ZV9mbGFncylcXG4te1xcbi1cXHRyZXR1cm4gX19pb191cmluZ19jbWRfZG9uZShpb3VjbWQsIHJldCwgMCwgaXNzdWVfZmxhZ3MsIGZhbHNlKTtcXG4tfVxcbi1cXG4tc3RhdGljIGlubGluZSB2b2lkIGlvX3VyaW5nX2NtZF9kb25lMzIoc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y21kLCBzMzIgcmV0LFxcbi1cXHRcXHRcXHRcXHQgICAgICAgdTY0IHJlczIsIHVuc2lnbmVkIGlzc3VlX2ZsYWdzKVxcbi17XFxuLVxcdHJldHVybiBfX2lvX3VyaW5nX2NtZF9kb25lKGlvdWNtZCwgcmV0LCByZXMyLCBpc3N1ZV9mbGFncywgdHJ1ZSk7XFxuLX1cXG4tXFxuIGludCBpb19idWZmZXJfcmVnaXN0ZXJfYnZlYyhzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsIHN0cnVjdCByZXF1ZXN0ICpycSxcXG4gXFx0XFx0XFx0ICAgIHZvaWQgKCpyZWxlYXNlKSh2b2lkICopLCB1bnNpZ25lZCBpbnQgaW5kZXgsXFxuIFxcdFxcdFxcdCAgICB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpO1xcbmRpZmYgLS1naXQgYS9pb191cmluZy91cmluZ19jbWQuYyBiL2lvX3VyaW5nL3VyaW5nX2NtZC5jXFxuaW5kZXggNzI2YTY1OWYzOGMzOC4uZWYzZTdlMzUyYzZhZiAxMDA2NDRcXG4tLS0gYS9pb191cmluZy91cmluZ19jbWQuY1xcbisrKyBiL2lvX3VyaW5nL3VyaW5nX2NtZC5jXFxuQEAgLTEzOCwxOSArMTM4LDMxIEBAIHZvaWQgX19pb191cmluZ19jbWRfZG9faW5fdGFzayhzdHJ1Y3QgaW9fdXJpbmdfY21kICppb3VjbWQsXFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwoX19pb191cmluZ19jbWRfZG9faW5fdGFzayk7XFxuIFxcbi1zdGF0aWMgaW5saW5lIHZvaWQgaW9fcmVxX3NldF9jcWUzMl9leHRyYShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcXG4tXFx0XFx0XFx0XFx0XFx0ICB1NjQgZXh0cmExLCB1NjQgZXh0cmEyKVxcbit2b2lkIGlvX3VyaW5nX2NtZF9zZXRfcmVzKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCwgczMyIHJldClcXG4ge1xcbi1cXHRyZXEtXFx1MDAzZWJpZ19jcWUuZXh0cmExID0gZXh0cmExO1xcbi1cXHRyZXEtXFx1MDAzZWJpZ19jcWUuZXh0cmEyID0gZXh0cmEyO1xcbitcXHRzdHJ1Y3QgaW9fa2lvY2IgKnJlcSA9IGNtZF90b19pb19raW9jYihjbWQpO1xcbitcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJlcV9zZXRfZmFpbChyZXEpO1xcbitcXHRpb19yZXFfc2V0X3JlcyhyZXEsIHJldCwgMCk7XFxuIH1cXG4rRVhQT1JUX1NZTUJPTF9HUEwoaW9fdXJpbmdfY21kX3NldF9yZXMpO1xcbitcXG4rdm9pZCBpb191cmluZ19jbWRfc2V0X3JlczMyKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCwgczMyIHJldCwgdTY0IHJlczIpXFxuK3tcXG4rXFx0c3RydWN0IGlvX2tpb2NiICpyZXEgPSBjbWRfdG9faW9fa2lvY2IoY21kKTtcXG4rXFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXFfc2V0X2ZhaWwocmVxKTtcXG4rXFx0aW9fcmVxX3NldF9yZXMzMihyZXEsIHJldCwgMCwgcmVzMiwgMCk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwoaW9fdXJpbmdfY21kX3NldF9yZXMzMik7XFxuIFxcbiAvKlxcbiAgKiBDYWxsZWQgYnkgY29uc3VtZXJzIG9mIGlvX3VyaW5nX2NtZCwgaWYgdGhleSBvcmlnaW5hbGx5IHJldHVybmVkXFxuICAqIC1FSU9DQlFVRVVFRCB1cG9uIHJlY2VpdmluZyB0aGUgY29tbWFuZC5cXG4gICovXFxuLXZvaWQgX19pb191cmluZ19jbWRfZG9uZShzdHJ1Y3QgaW9fdXJpbmdfY21kICppb3VjbWQsIHMzMiByZXQsIHU2NCByZXMyLFxcbi1cXHRcXHQgICAgICAgdW5zaWduZWQgaXNzdWVfZmxhZ3MsIGJvb2wgaXNfY3FlMzIpXFxuK3ZvaWQgaW9fdXJpbmdfY21kX2RvbmUoc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y21kLCB1bnNpZ25lZCBpc3N1ZV9mbGFncylcXG4ge1xcbiBcXHRzdHJ1Y3QgaW9fa2lvY2IgKnJlcSA9IGNtZF90b19pb19raW9jYihpb3VjbWQpO1xcbiBcXG5AQCAtMTU5LDE1ICsxNzEsNiBAQCB2b2lkIF9faW9fdXJpbmdfY21kX2RvbmUoc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y21kLCBzMzIgcmV0LCB1NjQgcmVzMixcXG4gXFxuIFxcdGlvX3VyaW5nX2NtZF9kZWxfY2FuY2VsYWJsZShpb3VjbWQsIGlzc3VlX2ZsYWdzKTtcXG4gXFxuLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi1cXHRcXHRyZXFfc2V0X2ZhaWwocmVxKTtcXG4tXFxuLVxcdGlvX3JlcV9zZXRfcmVzKHJlcSwgcmV0LCAwKTtcXG4tXFx0aWYgKGlzX2NxZTMyKSB7XFxuLVxcdFxcdGlmIChyZXEtXFx1MDAzZWN0eC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JJTkdfU0VUVVBfQ1FFX01JWEVEKVxcbi1cXHRcXHRcXHRyZXEtXFx1MDAzZWNxZS5mbGFncyB8PSBJT1JJTkdfQ1FFX0ZfMzI7XFxuLVxcdFxcdGlvX3JlcV9zZXRfY3FlMzJfZXh0cmEocmVxLCByZXMyLCAwKTtcXG4tXFx0fVxcbiBcXHRpb19yZXFfdXJpbmdfY2xlYW51cChyZXEsIGlzc3VlX2ZsYWdzKTtcXG4gXFx0aWYgKHJlcS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBSRVFfRl9JT1BPTEwpIHtcXG4gXFx0XFx0Lyogb3JkZXIgd2l0aCBpb19kb19pb3BvbGwoKSBjaGVja2luZyAtXFx1MDAzZWlvcG9sbF9jb21wbGV0ZWQgKi9cXG5AQCAtMTgxLDcgKzE4NCw3IEBAIHZvaWQgX19pb191cmluZ19jbWRfZG9uZShzdHJ1Y3QgaW9fdXJpbmdfY21kICppb3VjbWQsIHMzMiByZXQsIHU2NCByZXMyLFxcbiBcXHRcXHRpb19yZXFfdGFza193b3JrX2FkZChyZXEpO1xcbiBcXHR9XFxuIH1cXG4tRVhQT1JUX1NZTUJPTF9HUEwoX19pb191cmluZ19jbWRfZG9uZSk7XFxuK0VYUE9SVF9TWU1CT0xfR1BMKGlvX3VyaW5nX2NtZF9kb25lKTtcXG4gXFxuIGludCBpb191cmluZ19jbWRfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKVxcbiB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDE5OjIyOjM1LjY5ODUzMTU3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NDk2MzQxMTU2ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU9fVVJJTkdcIixcbiAgICBcIkJMS19ERVZfVUJMS1wiLFxuICAgIFwiTlZNRV9DT1JFXCIsXG4gICAgXCJCTEtfREVWX05WTUVcIixcbiAgICBcIkJMS19ERVZfQlNHXCIsXG4gICAgXCJCVFJGU19GU1wiLFxuICAgIFwiRlVTRV9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvX3VyaW5nX2NtZF9zZXRfcmVzXCIsXG4gICAgXCJpb191cmluZ19jbWRfc2V0X3JlczMyXCIsXG4gICAgXCJpb191cmluZ19jbWRfZG9uZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGlvX3VyaW5nIGNvbW1hbmQgQVBJIGJ5IHNwbGl0dGluZyBgaW9fdXJpbmdfY21kX2RvbmVgIGludG8gYGlvX3VyaW5nX2NtZF9zZXRfcmVzYCAob3IgYGlvX3VyaW5nX2NtZF9zZXRfcmVzMzJgKSBhbmQgYGlvX3VyaW5nX2NtZF9kb25lYC4gVGhpcyBhZmZlY3RzIGhvdyByZXN1bHRzIGFyZSByZXR1cm5lZCBmb3IgaW9fdXJpbmcgY29tbWFuZHMgYWNyb3NzIG11bHRpcGxlIHN1YnN5c3RlbXMgaW5jbHVkaW5nIGJsb2NrLCB1YmxrLCBudm1lLCBzY3NpIGJzZywgYnRyZnMsIGFuZCBmdXNlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUga2VybmVsIEFQSSBhbmQgaXRzIGNhbGxlcnMsIHdoaWNoIGlzIHdvcnRoIGZ1enppbmcgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIGluY29ycmVjdCByZXN1bHQgaGFuZGxpbmcgYXJlIGludHJvZHVjZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDM1ZjZjMWNkNWJjOWY3OWQ3N2M4NWY2YjFmNjhhYzNmNmYxYWEyYzNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAyNyAxOToyMjozMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2Jsb2NrL2lvY3RsLmMgYi9ibG9jay9pb2N0bC5jXG5pbmRleCA2NGI0ZTZjMGY2OTY1Li45NDZjYWI3NGYyNTNlIDEwMDY0NFxuLS0tIGEvYmxvY2svaW9jdGwuY1xuKysrIGIvYmxvY2svaW9jdGwuY1xuQEAgLTg3MSw5ICs4NzEsMTAgQEAgc3RhdGljIHZvaWQgYmxrX2NtZF9jb21wbGV0ZShzdHJ1Y3QgaW9fdHdfcmVxIHR3X3JlcSwgaW9fdHdfdG9rZW5fdCB0dylcbiBcbiBcdGlmIChiaWMtXHUwMDNlcmVzID09IC1FQUdBSU4gXHUwMDI2XHUwMDI2IGJpYy1cdTAwM2Vub3dhaXQpXG4gXHRcdGlvX3VyaW5nX2NtZF9pc3N1ZV9ibG9ja2luZyhjbWQpO1xuLVx0ZWxzZVxuLVx0XHRpb191cmluZ19jbWRfZG9uZShjbWQsIGJpYy1cdTAwM2VyZXMsXG4tXHRcdFx0XHQgIElPX1VSSU5HX0NNRF9UQVNLX1dPUktfSVNTVUVfRkxBR1MpO1xuK1x0ZWxzZSB7XG4rXHRcdGlvX3VyaW5nX2NtZF9zZXRfcmVzKGNtZCwgYmljLVx1MDAzZXJlcyk7XG4rXHRcdGlvX3VyaW5nX2NtZF9kb25lKGNtZCwgSU9fVVJJTkdfQ01EX1RBU0tfV09SS19JU1NVRV9GTEFHUyk7XG4rXHR9XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGJpb19jbWRfYmlvX2VuZF9pbyhzdHJ1Y3QgYmlvICpiaW8pXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay91YmxrX2Rydi5jIGIvZHJpdmVycy9ibG9jay91YmxrX2Rydi5jXG5pbmRleCA0ZDE3ZWQyNjRkYTFhLi41MWYxNWU1YjNjMDFkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibG9jay91YmxrX2Rydi5jXG4rKysgYi9kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmNcbkBAIC04MzksNyArODM5LDggQEAgc3RhdGljIHZvaWQgdWJsa19iYXRjaF9kZWluaXRfZmV0Y2hfYnVmKHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEsXG4gXHRfX3VibGtfcmVsZWFzZV9mY21kKHVicSk7XG4gXHRzcGluX3VubG9jayhcdTAwMjZ1YnEtXHUwMDNlZXZ0c19sb2NrKTtcbiBcbi1cdGlvX3VyaW5nX2NtZF9kb25lKGZjbWQtXHUwMDNlY21kLCByZXMsIGRhdGEtXHUwMDNlaXNzdWVfZmxhZ3MpO1xuK1x0aW9fdXJpbmdfY21kX3NldF9yZXMoZmNtZC1cdTAwM2VjbWQsIHJlcyk7XG4rXHRpb191cmluZ19jbWRfZG9uZShmY21kLVx1MDAzZWNtZCwgZGF0YS1cdTAwM2Vpc3N1ZV9mbGFncyk7XG4gXHR1YmxrX2JhdGNoX2ZyZWVfZmNtZChmY21kKTtcbiB9XG4gXG5AQCAtMTY0Miw3ICsxNjQzLDggQEAgc3RhdGljIHZvaWQgdWJsa19jb21wbGV0ZV9pb19jbWQoc3RydWN0IHVibGtfaW8gKmlvLCBzdHJ1Y3QgcmVxdWVzdCAqcmVxLFxuIFx0c3RydWN0IGlvX3VyaW5nX2NtZCAqY21kID0gX191YmxrX3ByZXBfY29tcGxfaW9fY21kKGlvLCByZXEpO1xuIFxuIFx0LyogdGVsbCB1Ymxrc3J2IG9uZSBpbyByZXF1ZXN0IGlzIGNvbWluZyAqL1xuLVx0aW9fdXJpbmdfY21kX2RvbmUoY21kLCByZXMsIGlzc3VlX2ZsYWdzKTtcbitcdGlvX3VyaW5nX2NtZF9zZXRfcmVzKGNtZCwgcmVzKTtcbitcdGlvX3VyaW5nX2NtZF9kb25lKGNtZCwgaXNzdWVfZmxhZ3MpO1xuIH1cbiBcbiAjZGVmaW5lIFVCTEtfUkVRVUVVRV9ERUxBWV9NU1x0M1xuQEAgLTE3MjgsNyArMTczMCw4IEBAIHN0YXRpYyB2b2lkIHVibGtfYXV0b19idWZfZGlzcGF0Y2goY29uc3Qgc3RydWN0IHVibGtfcXVldWUgKnVicSxcbiBcbiBcdGlmIChyZXMgIT0gQVVUT19CVUZfUkVHX0ZBSUwpIHtcbiBcdFx0dWJsa19hdXRvX2J1Zl9pb19zZXR1cCh1YnEsIHJlcSwgaW8sIGNtZCwgcmVzKTtcbi1cdFx0aW9fdXJpbmdfY21kX2RvbmUoY21kLCBVQkxLX0lPX1JFU19PSywgaXNzdWVfZmxhZ3MpO1xuK1x0XHRpb191cmluZ19jbWRfc2V0X3JlcyhjbWQsIFVCTEtfSU9fUkVTX09LKTtcbitcdFx0aW9fdXJpbmdfY21kX2RvbmUoY21kLCBpc3N1ZV9mbGFncyk7XG4gXHR9XG4gfVxuIFxuQEAgLTI3ODksOCArMjc5MiwxMCBAQCBzdGF0aWMgdm9pZCB1YmxrX2NhbmNlbF9jbWQoc3RydWN0IHVibGtfcXVldWUgKnVicSwgdTE2IHRhZyxcbiBcdH1cbiBcdHNwaW5fdW5sb2NrKFx1MDAyNnVicS1cdTAwM2VjYW5jZWxfbG9jayk7XG4gXG4tXHRpZiAoIWRvbmUgXHUwMDI2XHUwMDI2IGNtZClcbi1cdFx0aW9fdXJpbmdfY21kX2RvbmUoY21kLCBVQkxLX0lPX1JFU19BQk9SVCwgaXNzdWVfZmxhZ3MpO1xuK1x0aWYgKCFkb25lIFx1MDAyNlx1MDAyNiBjbWQpIHtcbitcdFx0aW9fdXJpbmdfY21kX3NldF9yZXMoY21kLCBVQkxLX0lPX1JFU19BQk9SVCk7XG4rXHRcdGlvX3VyaW5nX2NtZF9kb25lKGNtZCwgaXNzdWVfZmxhZ3MpO1xuK1x0fVxuIH1cbiBcbiAvKlxuQEAgLTI4MTYsNyArMjgyMSw4IEBAIHN0YXRpYyB2b2lkIHVibGtfYmF0Y2hfY2FuY2VsX2NtZChzdHJ1Y3QgdWJsa19xdWV1ZSAqdWJxLFxuIFx0c3Bpbl91bmxvY2soXHUwMDI2dWJxLVx1MDAzZWV2dHNfbG9jayk7XG4gXG4gXHRpZiAoZG9uZSkge1xuLVx0XHRpb191cmluZ19jbWRfZG9uZShmY21kLVx1MDAzZWNtZCwgVUJMS19JT19SRVNfQUJPUlQsIGlzc3VlX2ZsYWdzKTtcbitcdFx0aW9fdXJpbmdfY21kX3NldF9yZXMoZmNtZC1cdTAwM2VjbWQsIFVCTEtfSU9fUkVTX0FCT1JUKTtcbitcdFx0aW9fdXJpbmdfY21kX2RvbmUoZmNtZC1cdTAwM2VjbWQsIGlzc3VlX2ZsYWdzKTtcbiBcdFx0dWJsa19iYXRjaF9mcmVlX2ZjbWQoZmNtZCk7XG4gXHR9XG4gfVxuQEAgLTM1MjYsOCArMzUzMiwxMCBAQCBzdGF0aWMgdm9pZCB1YmxrX2NoX3VyaW5nX2NtZF9jYihzdHJ1Y3QgaW9fdHdfcmVxIHR3X3JlcSwgaW9fdHdfdG9rZW5fdCB0dylcbiBcbiBcdGlmICghdHcuY2FuY2VsKVxuIFx0XHRyZXQgPSB1YmxrX2NoX3VyaW5nX2NtZF9sb2NhbChjbWQsIGlzc3VlX2ZsYWdzKTtcbi1cdGlmIChyZXQgIT0gLUVJT0NCUVVFVUVEKVxuLVx0XHRpb191cmluZ19jbWRfZG9uZShjbWQsIHJldCwgaXNzdWVfZmxhZ3MpO1xuK1x0aWYgKHJldCAhPSAtRUlPQ0JRVUVVRUQpIHtcbitcdFx0aW9fdXJpbmdfY21kX3NldF9yZXMoY21kLCByZXQpO1xuK1x0XHRpb191cmluZ19jbWRfZG9uZShjbWQsIGlzc3VlX2ZsYWdzKTtcbitcdH1cbiB9XG4gXG4gc3RhdGljIGludCB1YmxrX2NoX3VyaW5nX2NtZChzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbmRpZmYgLS1naXQgYS9kcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jIGIvZHJpdmVycy9udm1lL2hvc3QvaW9jdGwuY1xuaW5kZXggNjUzOWQ0NzUwMDk4Ni4uYjUwYmJhMjA3ODE4YiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbnZtZS9ob3N0L2lvY3RsLmNcbisrKyBiL2RyaXZlcnMvbnZtZS9ob3N0L2lvY3RsLmNcbkBAIC00MjMsOCArNDIzLDYgQEAgc3RydWN0IG52bWVfdXJpbmdfZGF0YSB7XG4gc3RydWN0IG52bWVfdXJpbmdfY21kX3BkdSB7XG4gXHRzdHJ1Y3QgcmVxdWVzdCAqcmVxO1xuIFx0c3RydWN0IGJpbyAqYmlvO1xuLVx0dTY0IHJlc3VsdDtcbi1cdGludCBzdGF0dXM7XG4gfTtcbiBcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBudm1lX3VyaW5nX2NtZF9wZHUgKm52bWVfdXJpbmdfY21kX3BkdShcbkBAIC00NDAsOCArNDM4LDcgQEAgc3RhdGljIHZvaWQgbnZtZV91cmluZ190YXNrX2NiKHN0cnVjdCBpb190d19yZXEgdHdfcmVxLCBpb190d190b2tlbl90IHR3KVxuIFxuIFx0aWYgKHBkdS1cdTAwM2ViaW8pXG4gXHRcdGJsa19ycV91bm1hcF91c2VyKHBkdS1cdTAwM2ViaW8pO1xuLVx0aW9fdXJpbmdfY21kX2RvbmUzMihpb3VjbWQsIHBkdS1cdTAwM2VzdGF0dXMsIHBkdS1cdTAwM2VyZXN1bHQsXG4tXHRcdFx0ICAgIElPX1VSSU5HX0NNRF9UQVNLX1dPUktfSVNTVUVfRkxBR1MpO1xuK1x0aW9fdXJpbmdfY21kX2RvbmUoaW91Y21kLCBJT19VUklOR19DTURfVEFTS19XT1JLX0lTU1VFX0ZMQUdTKTtcbiB9XG4gXG4gc3RhdGljIGVudW0gcnFfZW5kX2lvX3JldCBudm1lX3VyaW5nX2NtZF9lbmRfaW8oc3RydWN0IHJlcXVlc3QgKnJlcSxcbkBAIC00NTAsMTUgKzQ0NywxNyBAQCBzdGF0aWMgZW51bSBycV9lbmRfaW9fcmV0IG52bWVfdXJpbmdfY21kX2VuZF9pbyhzdHJ1Y3QgcmVxdWVzdCAqcmVxLFxuIHtcbiBcdHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCA9IHJlcS1cdTAwM2VlbmRfaW9fZGF0YTtcbiBcdHN0cnVjdCBudm1lX3VyaW5nX2NtZF9wZHUgKnBkdSA9IG52bWVfdXJpbmdfY21kX3BkdShpb3VjbWQpO1xuK1x0dTY0IHJlc3VsdCA9IGxlNjRfdG9fY3B1KG52bWVfcmVxKHJlcSktXHUwMDNlcmVzdWx0LnU2NCk7XG4rXHRpbnQgc3RhdHVzO1xuIFxuIFx0aWYgKG52bWVfcmVxKHJlcSktXHUwMDNlZmxhZ3MgXHUwMDI2IE5WTUVfUkVRX0NBTkNFTExFRCkge1xuLVx0XHRwZHUtXHUwMDNlc3RhdHVzID0gLUVJTlRSO1xuK1x0XHRzdGF0dXMgPSAtRUlOVFI7XG4gXHR9IGVsc2Uge1xuLVx0XHRwZHUtXHUwMDNlc3RhdHVzID0gbnZtZV9yZXEocmVxKS1cdTAwM2VzdGF0dXM7XG4tXHRcdGlmICghcGR1LVx1MDAzZXN0YXR1cylcbi1cdFx0XHRwZHUtXHUwMDNlc3RhdHVzID0gYmxrX3N0YXR1c190b19lcnJubyhlcnIpO1xuK1x0XHRzdGF0dXMgPSBudm1lX3JlcShyZXEpLVx1MDAzZXN0YXR1cztcbitcdFx0aWYgKCFzdGF0dXMpXG4rXHRcdFx0c3RhdHVzID0gYmxrX3N0YXR1c190b19lcnJubyhlcnIpO1xuIFx0fVxuLVx0cGR1LVx1MDAzZXJlc3VsdCA9IGxlNjRfdG9fY3B1KG52bWVfcmVxKHJlcSktXHUwMDNlcmVzdWx0LnU2NCk7XG4rXHRpb191cmluZ19jbWRfc2V0X3JlczMyKGlvdWNtZCwgc3RhdHVzLCByZXN1bHQpO1xuIFxuIFx0LypcbiBcdCAqIEZvciBJT1BPTEwsIGNoZWNrIGlmIHRoaXMgY29tcGxldGlvbiBpcyBoYXBwZW5pbmcgaW4gdGhlIGNvbnRleHRcbkBAIC00NzEsNyArNDcwLDcgQEAgc3RhdGljIGVudW0gcnFfZW5kX2lvX3JldCBudm1lX3VyaW5nX2NtZF9lbmRfaW8oc3RydWN0IHJlcXVlc3QgKnJlcSxcbiBcdCAgICBpb2ItXHUwMDNlcG9sbF9jdHggPT0gaW9fdXJpbmdfY21kX2N0eF9oYW5kbGUoaW91Y21kKSkge1xuIFx0XHRpZiAocGR1LVx1MDAzZWJpbylcbiBcdFx0XHRibGtfcnFfdW5tYXBfdXNlcihwZHUtXHUwMDNlYmlvKTtcbi1cdFx0aW9fdXJpbmdfY21kX2RvbmUzMihpb3VjbWQsIHBkdS1cdTAwM2VzdGF0dXMsIHBkdS1cdTAwM2VyZXN1bHQsIDApO1xuK1x0XHRpb191cmluZ19jbWRfZG9uZShpb3VjbWQsIDApO1xuIFx0fSBlbHNlIHtcbiBcdFx0aW9fdXJpbmdfY21kX2RvX2luX3Rhc2tfbGF6eShpb3VjbWQsIG52bWVfdXJpbmdfdGFza19jYik7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfYnNnLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9ic2cuY1xuaW5kZXggZTgwZGVjNTMxNzRlYS4uOGIzMmQ4ZThmMjlmOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX2JzZy5jXG4rKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9ic2cuY1xuQEAgLTYwLDggKzYwLDggQEAgc3RhdGljIHZvaWQgc2NzaV9ic2dfdXJpbmdfdGFza19jYihzdHJ1Y3QgaW9fdHdfcmVxIHR3X3JlcSwgaW9fdHdfdG9rZW5fdCB0dylcbiBcdFx0XHRcdCAgc2NtZC1cdTAwM2VyZXNpZF9sZW4pO1xuIFxuIFx0YmxrX21xX2ZyZWVfcmVxdWVzdChycSk7XG4tXHRpb191cmluZ19jbWRfZG9uZTMyKGlvdWNtZCwgcmV0LCByZXMyLFxuLVx0XHRcdCAgICBJT19VUklOR19DTURfVEFTS19XT1JLX0lTU1VFX0ZMQUdTKTtcbitcdGlvX3VyaW5nX2NtZF9zZXRfcmVzMzIoaW91Y21kLCByZXQsIHJlczIpO1xuK1x0aW9fdXJpbmdfY21kX2RvbmUoaW91Y21kLCBJT19VUklOR19DTURfVEFTS19XT1JLX0lTU1VFX0ZMQUdTKTtcbiB9XG4gXG4gc3RhdGljIGVudW0gcnFfZW5kX2lvX3JldCBzY3NpX2JzZ191cmluZ19jbWRfZG9uZShzdHJ1Y3QgcmVxdWVzdCAqcmVxLFxuZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2lvY3RsLmMgYi9mcy9idHJmcy9pb2N0bC5jXG5pbmRleCA3MmJjOWQ0Zjc3MDg3Li4wNzA1N2E3MDg0NTI5IDEwMDY0NFxuLS0tIGEvZnMvYnRyZnMvaW9jdGwuY1xuKysrIGIvZnMvYnRyZnMvaW9jdGwuY1xuQEAgLTQ2MjEsNyArNDYyMSw4IEBAIHN0YXRpYyB2b2lkIGJ0cmZzX3VyaW5nX3JlYWRfZmluaXNoZWQoc3RydWN0IGlvX3R3X3JlcSB0d19yZXEsIGlvX3R3X3Rva2VuX3QgdHcpXG4gXHRidHJmc191bmxvY2tfZXh0ZW50KGlvX3RyZWUsIHByaXYtXHUwMDNlc3RhcnQsIHByaXYtXHUwMDNlbG9ja2VuZCwgXHUwMDI2cHJpdi1cdTAwM2VjYWNoZWRfc3RhdGUpO1xuIFx0YnRyZnNfaW5vZGVfdW5sb2NrKGlub2RlLCBCVFJGU19JTE9DS19TSEFSRUQpO1xuIFxuLVx0aW9fdXJpbmdfY21kX2RvbmUoY21kLCByZXQsIElPX1VSSU5HX0NNRF9UQVNLX1dPUktfSVNTVUVfRkxBR1MpO1xuK1x0aW9fdXJpbmdfY21kX3NldF9yZXMoY21kLCByZXQpO1xuK1x0aW9fdXJpbmdfY21kX2RvbmUoY21kLCBJT19VUklOR19DTURfVEFTS19XT1JLX0lTU1VFX0ZMQUdTKTtcbiBcdGFkZF9yY2hhcihjdXJyZW50LCByZXQpO1xuIFxuIFx0Zm9yIChpbmRleCA9IDA7IGluZGV4IFx1MDAzYyBwcml2LVx1MDAzZW5yX3BhZ2VzOyBpbmRleCsrKVxuZGlmZiAtLWdpdCBhL2ZzL2Z1c2UvZGV2X3VyaW5nLmMgYi9mcy9mdXNlL2Rldl91cmluZy5jXG5pbmRleCA3N2M4Y2VjNDNkOWM2Li5jNWJiNTAxODNlMWM2IDEwMDY0NFxuLS0tIGEvZnMvZnVzZS9kZXZfdXJpbmcuY1xuKysrIGIvZnMvZnVzZS9kZXZfdXJpbmcuY1xuQEAgLTM2Niw4ICszNjYsMTAgQEAgc3RhdGljIHZvaWQgZnVzZV91cmluZ19lbnRyeV90ZWFyZG93bihzdHJ1Y3QgZnVzZV9yaW5nX2VudCAqZW50KVxuIFx0ZW50LVx1MDAzZXN0YXRlID0gRlJSU19SRUxFQVNFRDtcbiBcdHNwaW5fdW5sb2NrKFx1MDAyNnF1ZXVlLVx1MDAzZWxvY2spO1xuIFxuLVx0aWYgKGNtZClcbi1cdFx0aW9fdXJpbmdfY21kX2RvbmUoY21kLCAtRU5PVENPTk4sIElPX1VSSU5HX0ZfVU5MT0NLRUQpO1xuK1x0aWYgKGNtZCkge1xuK1x0XHRpb191cmluZ19jbWRfc2V0X3JlcyhjbWQsIC1FTk9UQ09OTik7XG4rXHRcdGlvX3VyaW5nX2NtZF9kb25lKGNtZCwgSU9fVVJJTkdfRl9VTkxPQ0tFRCk7XG4rXHR9XG4gXG4gXHRpZiAocmVxKVxuIFx0XHRmdXNlX3VyaW5nX3N0b3BfZnVzZV9yZXFfZW5kKHJlcSk7XG5AQCAtNTMxLDcgKzUzMyw4IEBAIHN0YXRpYyB2b2lkIGZ1c2VfdXJpbmdfY2FuY2VsKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCxcbiBcbiBcdGlmIChuZWVkX2NtZF9kb25lKSB7XG4gXHRcdC8qIG5vIHF1ZXVlIGxvY2sgdG8gYXZvaWQgbG9jayBvcmRlciBpc3N1ZXMgKi9cbi1cdFx0aW9fdXJpbmdfY21kX2RvbmUoY21kLCAtRU5PVENPTk4sIGlzc3VlX2ZsYWdzKTtcbitcdFx0aW9fdXJpbmdfY21kX3NldF9yZXMoY21kLCAtRU5PVENPTk4pO1xuK1x0XHRpb191cmluZ19jbWRfZG9uZShjbWQsIGlzc3VlX2ZsYWdzKTtcbiBcdFx0a2ZyZWUoZW50KTtcbiBcdFx0aWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoXHUwMDI2cXVldWUtXHUwMDNlcmluZy1cdTAwM2VxdWV1ZV9yZWZzKSlcbiBcdFx0XHR3YWtlX3VwX2FsbChcdTAwMjZxdWV1ZS1cdTAwM2VyaW5nLVx1MDAzZXN0b3Bfd2FpdHEpO1xuQEAgLTk0Miw3ICs5NDUsOCBAQCBzdGF0aWMgdm9pZCBmdXNlX3VyaW5nX3NlbmQoc3RydWN0IGZ1c2VfcmluZ19lbnQgKmVudCwgc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLFxuIFx0ZnVzZV91cmluZ19hZGRfdG9fcHEoZW50KTtcbiBcdHNwaW5fdW5sb2NrKFx1MDAyNnF1ZXVlLVx1MDAzZWxvY2spO1xuIFxuLVx0aW9fdXJpbmdfY21kX2RvbmUoY21kLCByZXQsIGlzc3VlX2ZsYWdzKTtcbitcdGlvX3VyaW5nX2NtZF9zZXRfcmVzKGNtZCwgcmV0KTtcbitcdGlvX3VyaW5nX2NtZF9kb25lKGNtZCwgaXNzdWVfZmxhZ3MpO1xuIH1cbiBcbiAvKiBGVVNFX1VSSU5HX0NNRF9DT01NSVRfQU5EX0ZFVENIIGhhbmRsZXIgKi9cbkBAIC0xMzA5LDcgKzEzMTMsOCBAQCBzdGF0aWMgdm9pZCBmdXNlX3VyaW5nX3NlbmRfaW5fdGFzayhzdHJ1Y3QgaW9fdHdfcmVxIHR3X3JlcSwgaW9fdHdfdG9rZW5fdCB0dylcbiBcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZlbnQtXHUwMDNlbGlzdCk7XG4gXHRcdHNwaW5fdW5sb2NrKFx1MDAyNnF1ZXVlLVx1MDAzZWxvY2spO1xuIFxuLVx0XHRpb191cmluZ19jbWRfZG9uZShjbWQsIGVyciwgaXNzdWVfZmxhZ3MpO1xuK1x0XHRpb191cmluZ19jbWRfc2V0X3JlcyhjbWQsIGVycik7XG4rXHRcdGlvX3VyaW5nX2NtZF9kb25lKGNtZCwgaXNzdWVfZmxhZ3MpO1xuIFxuIFx0XHRmdXNlX3VyaW5nX3JlcV9lbmQoZW50LCBlbnQtXHUwMDNlZnVzZV9yZXEsIGVycik7XG4gXHRcdGtmcmVlKGVudCk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pb191cmluZy9jbWQuaCBiL2luY2x1ZGUvbGludXgvaW9fdXJpbmcvY21kLmhcbmluZGV4IDMzMWRjYmVmZTcyZjEuLjk2ZmNjMDYwOTdjNGUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2lvX3VyaW5nL2NtZC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2lvX3VyaW5nL2NtZC5oXG5AQCAtNTIsNiArNTIsMTAgQEAgaW50IGlvX3VyaW5nX2NtZF9pbXBvcnRfZml4ZWRfdmVjKHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCxcbiBcdFx0XHRcdCAgaW50IGRkaXIsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbiBcdFx0XHRcdCAgdW5zaWduZWQgaXNzdWVfZmxhZ3MpO1xuIFxuKy8qIE9uZSBvZiB0aGVzZSBtdXN0IGJlIGNhbGxlZCBwcmlvciB0byBpb191cmluZ19jbWRfZG9uZSgpICovXG4rdm9pZCBpb191cmluZ19jbWRfc2V0X3JlcyhzdHJ1Y3QgaW9fdXJpbmdfY21kICosIHMzMiByZXQpO1xuK3ZvaWQgaW9fdXJpbmdfY21kX3NldF9yZXMzMihzdHJ1Y3QgaW9fdXJpbmdfY21kICosIHMzMiByZXQsIHU2NCByZXMyKTtcbitcbiAvKlxuICAqIENvbXBsZXRlcyB0aGUgcmVxdWVzdCwgaS5lLiBwb3N0cyBhbiBpb191cmluZyBDUUUgYW5kIGRlYWxsb2NhdGVzIEBpb3VjbWRcbiAgKiBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgaW9fdXJpbmcgcmVxdWVzdC5cbkBAIC01OSw4ICs2Myw3IEBAIGludCBpb191cmluZ19jbWRfaW1wb3J0X2ZpeGVkX3ZlYyhzdHJ1Y3QgaW9fdXJpbmdfY21kICppb3VjbWQsXG4gICogTm90ZTogdGhlIGNhbGxlciBzaG91bGQgbmV2ZXIgaGFyZCBjb2RlIEBpc3N1ZV9mbGFncyBhbmQgaXMgb25seSBhbGxvd2VkXG4gICogdG8gcGFzcyB0aGUgbWFzayBwcm92aWRlZCBieSB0aGUgY29yZSBpb191cmluZyBjb2RlLlxuICAqL1xuLXZvaWQgX19pb191cmluZ19jbWRfZG9uZShzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsIHMzMiByZXQsIHU2NCByZXMyLFxuLVx0XHRcdCB1bnNpZ25lZCBpc3N1ZV9mbGFncywgYm9vbCBpc19jcWUzMik7XG4rdm9pZCBpb191cmluZ19jbWRfZG9uZShzdHJ1Y3QgaW9fdXJpbmdfY21kICosIHVuc2lnbmVkIGlzc3VlX2ZsYWdzKTtcbiBcbiB2b2lkIF9faW9fdXJpbmdfY21kX2RvX2luX3Rhc2soc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y21kLFxuIFx0XHRcdCAgICBpb19yZXFfdHdfZnVuY190IHRhc2tfd29ya19jYixcbkBAIC0xMDcsOCArMTEwLDE1IEBAIHN0YXRpYyBpbmxpbmUgaW50IGlvX3VyaW5nX2NtZF9pbXBvcnRfZml4ZWRfdmVjKHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCxcbiB7XG4gXHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gfVxuLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2lvX3VyaW5nX2NtZF9kb25lKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCwgczMyIHJldCxcbi1cdFx0dTY0IHJldDIsIHVuc2lnbmVkIGlzc3VlX2ZsYWdzLCBib29sIGlzX2NxZTMyKVxuK3N0YXRpYyBpbmxpbmUgdm9pZCBpb191cmluZ19jbWRfc2V0X3JlcyhzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsIHMzMiByZXQpXG4re1xuK31cbitzdGF0aWMgaW5saW5lIHZvaWQgaW9fdXJpbmdfY21kX3NldF9yZXMzMihzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsIHMzMiByZXQsXG4rXHRcdFx0XHRcdCAgdTY0IHJlczIpXG4re1xuK31cbitzdGF0aWMgaW5saW5lIHZvaWQgaW9fdXJpbmdfY21kX2RvbmUoc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLFxuK1x0XHRcdFx0ICAgICB1bnNpZ25lZCBpc3N1ZV9mbGFncylcbiB7XG4gfVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2lvX3VyaW5nX2NtZF9kb19pbl90YXNrKHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCxcbkBAIC0xNzAsMTggKzE4MCw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCAqaW9fdXJpbmdfY21kX2N0eF9oYW5kbGUoc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kKVxuIFx0cmV0dXJuIGNtZF90b19pb19raW9jYihjbWQpLVx1MDAzZWN0eDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIGlvX3VyaW5nX2NtZF9kb25lKHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCwgczMyIHJldCxcbi1cdFx0XHRcdCAgICAgdW5zaWduZWQgaXNzdWVfZmxhZ3MpXG4te1xuLVx0cmV0dXJuIF9faW9fdXJpbmdfY21kX2RvbmUoaW91Y21kLCByZXQsIDAsIGlzc3VlX2ZsYWdzLCBmYWxzZSk7XG4tfVxuLVxuLXN0YXRpYyBpbmxpbmUgdm9pZCBpb191cmluZ19jbWRfZG9uZTMyKHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCwgczMyIHJldCxcbi1cdFx0XHRcdCAgICAgICB1NjQgcmVzMiwgdW5zaWduZWQgaXNzdWVfZmxhZ3MpXG4te1xuLVx0cmV0dXJuIF9faW9fdXJpbmdfY21kX2RvbmUoaW91Y21kLCByZXQsIHJlczIsIGlzc3VlX2ZsYWdzLCB0cnVlKTtcbi19XG4tXG4gaW50IGlvX2J1ZmZlcl9yZWdpc3Rlcl9idmVjKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCwgc3RydWN0IHJlcXVlc3QgKnJxLFxuIFx0XHRcdCAgICB2b2lkICgqcmVsZWFzZSkodm9pZCAqKSwgdW5zaWduZWQgaW50IGluZGV4LFxuIFx0XHRcdCAgICB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpO1xuZGlmZiAtLWdpdCBhL2lvX3VyaW5nL3VyaW5nX2NtZC5jIGIvaW9fdXJpbmcvdXJpbmdfY21kLmNcbmluZGV4IDcyNmE2NTlmMzhjMzguLmVmM2U3ZTM1MmM2YWYgMTAwNjQ0XG4tLS0gYS9pb191cmluZy91cmluZ19jbWQuY1xuKysrIGIvaW9fdXJpbmcvdXJpbmdfY21kLmNcbkBAIC0xMzgsMTkgKzEzOCwzMSBAQCB2b2lkIF9faW9fdXJpbmdfY21kX2RvX2luX3Rhc2soc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y21kLFxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChfX2lvX3VyaW5nX2NtZF9kb19pbl90YXNrKTtcbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgaW9fcmVxX3NldF9jcWUzMl9leHRyYShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcbi1cdFx0XHRcdFx0ICB1NjQgZXh0cmExLCB1NjQgZXh0cmEyKVxuK3ZvaWQgaW9fdXJpbmdfY21kX3NldF9yZXMoc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLCBzMzIgcmV0KVxuIHtcbi1cdHJlcS1cdTAwM2ViaWdfY3FlLmV4dHJhMSA9IGV4dHJhMTtcbi1cdHJlcS1cdTAwM2ViaWdfY3FlLmV4dHJhMiA9IGV4dHJhMjtcbitcdHN0cnVjdCBpb19raW9jYiAqcmVxID0gY21kX3RvX2lvX2tpb2NiKGNtZCk7XG4rXG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXFfc2V0X2ZhaWwocmVxKTtcbitcdGlvX3JlcV9zZXRfcmVzKHJlcSwgcmV0LCAwKTtcbiB9XG4rRVhQT1JUX1NZTUJPTF9HUEwoaW9fdXJpbmdfY21kX3NldF9yZXMpO1xuK1xuK3ZvaWQgaW9fdXJpbmdfY21kX3NldF9yZXMzMihzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsIHMzMiByZXQsIHU2NCByZXMyKVxuK3tcbitcdHN0cnVjdCBpb19raW9jYiAqcmVxID0gY21kX3RvX2lvX2tpb2NiKGNtZCk7XG4rXG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXFfc2V0X2ZhaWwocmVxKTtcbitcdGlvX3JlcV9zZXRfcmVzMzIocmVxLCByZXQsIDAsIHJlczIsIDApO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChpb191cmluZ19jbWRfc2V0X3JlczMyKTtcbiBcbiAvKlxuICAqIENhbGxlZCBieSBjb25zdW1lcnMgb2YgaW9fdXJpbmdfY21kLCBpZiB0aGV5IG9yaWdpbmFsbHkgcmV0dXJuZWRcbiAgKiAtRUlPQ0JRVUVVRUQgdXBvbiByZWNlaXZpbmcgdGhlIGNvbW1hbmQuXG4gICovXG4tdm9pZCBfX2lvX3VyaW5nX2NtZF9kb25lKHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCwgczMyIHJldCwgdTY0IHJlczIsXG4tXHRcdCAgICAgICB1bnNpZ25lZCBpc3N1ZV9mbGFncywgYm9vbCBpc19jcWUzMilcbit2b2lkIGlvX3VyaW5nX2NtZF9kb25lKHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCwgdW5zaWduZWQgaXNzdWVfZmxhZ3MpXG4ge1xuIFx0c3RydWN0IGlvX2tpb2NiICpyZXEgPSBjbWRfdG9faW9fa2lvY2IoaW91Y21kKTtcbiBcbkBAIC0xNTksMTUgKzE3MSw2IEBAIHZvaWQgX19pb191cmluZ19jbWRfZG9uZShzdHJ1Y3QgaW9fdXJpbmdfY21kICppb3VjbWQsIHMzMiByZXQsIHU2NCByZXMyLFxuIFxuIFx0aW9fdXJpbmdfY21kX2RlbF9jYW5jZWxhYmxlKGlvdWNtZCwgaXNzdWVfZmxhZ3MpO1xuIFxuLVx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0cmVxX3NldF9mYWlsKHJlcSk7XG4tXG4tXHRpb19yZXFfc2V0X3JlcyhyZXEsIHJldCwgMCk7XG4tXHRpZiAoaXNfY3FlMzIpIHtcbi1cdFx0aWYgKHJlcS1cdTAwM2VjdHgtXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19TRVRVUF9DUUVfTUlYRUQpXG4tXHRcdFx0cmVxLVx1MDAzZWNxZS5mbGFncyB8PSBJT1JJTkdfQ1FFX0ZfMzI7XG4tXHRcdGlvX3JlcV9zZXRfY3FlMzJfZXh0cmEocmVxLCByZXMyLCAwKTtcbi1cdH1cbiBcdGlvX3JlcV91cmluZ19jbGVhbnVwKHJlcSwgaXNzdWVfZmxhZ3MpO1xuIFx0aWYgKHJlcS1cdTAwM2VmbGFncyBcdTAwMjYgUkVRX0ZfSU9QT0xMKSB7XG4gXHRcdC8qIG9yZGVyIHdpdGggaW9fZG9faW9wb2xsKCkgY2hlY2tpbmcgLVx1MDAzZWlvcG9sbF9jb21wbGV0ZWQgKi9cbkBAIC0xODEsNyArMTg0LDcgQEAgdm9pZCBfX2lvX3VyaW5nX2NtZF9kb25lKHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCwgczMyIHJldCwgdTY0IHJlczIsXG4gXHRcdGlvX3JlcV90YXNrX3dvcmtfYWRkKHJlcSk7XG4gXHR9XG4gfVxuLUVYUE9SVF9TWU1CT0xfR1BMKF9faW9fdXJpbmdfY21kX2RvbmUpO1xuK0VYUE9SVF9TWU1CT0xfR1BMKGlvX3VyaW5nX2NtZF9kb25lKTtcbiBcbiBpbnQgaW9fdXJpbmdfY21kX3ByZXAoc3RydWN0IGlvX2tpb2NiICpyZXEsIGNvbnN0IHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSlcbiB7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxOToyMjozNS42OTg1MzM3NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMzIyNjcxOTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgaW9fdXJpbmcgUGF0Y2gqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIGEgc2lnbmlmaWNhbnQgY2hhbmdlLCByaWdodD8gV2UncmUgdGFsa2luZyBhYm91dCBhIGNvcmUga2VybmVsIEFQSSBtb2RpZmljYXRpb24gY29uY2VybmluZyBpb191cmluZyBjb21tYW5kIHJlc3VsdCBoYW5kbGluZy4gU2VlaW5nIG1vZGlmaWNhdGlvbnMgdG8gYGlvX3VyaW5nX2NtZF9kb25lYCBhbmQgdGhlIGludHJvZHVjdGlvbiBvZiBgaW9fdXJpbmdfY21kX3NldF9yZXNgIGFuZCBgaW9fdXJpbmdfY21kX3NldF9yZXMzMmAgaW1tZWRpYXRlbHkgZmxhZ3MgdGhpcyBhcyBzb21ldGhpbmcgdGhhdCB3YXJyYW50cyBjYXJlZnVsIHNjcnV0aW55LiBCZWNhdXNlIGl0IGNoYW5nZXMgdGhlIHJldHVybiBzdGF0dXMsIGl0IGlzIHZlcnkgbGlrZWx5IHdlIG1heSBpbnRyb2R1Y2UgbmV3IGJ1Z3MuXG5cblRoZSBmYWN0IHRoYXQgdGhpcyB0b3VjaGVzIGEgYnJlYWR0aCBvZiBzdWJzeXN0ZW1zIC0gYGJsb2NrL2lvY3RsLmNgLCBgZHJpdmVycy9ibG9jay91YmxrX2Rydi5jYCwgYGRyaXZlcnMvbnZtZS9ob3N0L2lvY3RsLmNgLCBgZHJpdmVycy9zY3NpL3Njc2lfYnNnLmNgLCBgZnMvYnRyZnMvaW9jdGwuY2AsIGBmcy9mdXNlL2Rldl91cmluZy5jYCwgYWxvbmcgd2l0aCB0aGUgaGVhZGVyIGFuZCBjb3JlIGlvX3VyaW5nIGZpbGVzIChgaW5jbHVkZS9saW51eC9pb191cmluZy9jbWQuaGAgYW5kIGBpb191cmluZy91cmluZ19jbWQuY2ApIOKAkyByZWluZm9yY2VzIHRoYXQgaW1wcmVzc2lvbi4gVGhpcyBtZWFucyBmdW5jdGlvbmFsIGltcGFjdCBpcyBwcmV0dHkgbXVjaCBndWFyYW50ZWVkLCBhbmQgd2Ugc2hvdWxkIHByaW9yaXRpemUgZnV6emluZyB0byBzbW9rZSBvdXQgYW55IGlzc3Vlcy5cblxuTm93LCBsZXQncyBpZGVudGlmeSB0aGUgZm9jYWwgcG9pbnRzLiBNeSBpbnN0aW5jdCBpcyB0byBmb2N1cyBvbiB0aGUgZnVuY3Rpb25zIGRpcmVjdGx5IGludm9sdmVkIGluIHRoaXMgbmV3IHJlc3VsdCBoYW5kbGluZzogYGlvX3VyaW5nX2NtZF9zZXRfcmVzYCwgYGlvX3VyaW5nX2NtZF9zZXRfcmVzMzJgLCBhbmQgYGlvX3VyaW5nX2NtZF9kb25lYC4gQmV5b25kIHRob3NlLCBJJ2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gd2hlcmUgdGhlc2UgY2hhbmdlcyBhcmUgKnVzZWQqOiBgdWJsa19jaF91cmluZ19jbWRfY2JgLCBgbnZtZV91cmluZ19jbWRfZW5kX2lvYCwgYHNjc2lfYnNnX3VyaW5nX3Rhc2tfY2JgLCBgYnRyZnNfdXJpbmdfcmVhZF9maW5pc2hlZGAsIGFuZCBgZnVzZV91cmluZ19zZW5kYC5cblxuTmV4dCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBleHBvc3VyZSBvZiB0aGVzZSBzeW1ib2xzLiBBcmUgYGlvX3VyaW5nX2NtZF9zZXRfcmVzYCBhbmQgYGlvX3VyaW5nX2NtZF9zZXRfcmVzMzJgIGV4cG9ydGVkPyBBaCwgeWVzLCBgRVhQT1JUX1NZTUJPTF9HUExgLiBOb3csIGxldCdzIGlkZW50aWZ5IHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gYENPTkZJR19JT19VUklOR2AgaXMgYSBnaXZlbi4gV2UnbGwgbmVlZCBgQ09ORklHX0JMS19ERVZfVUJMS2AsIGBDT05GSUdfTlZNRV9DT1JFYCwgYENPTkZJR19CTEtfREVWX0JTR2AsIGBDT05GSUdfQlRSRlNfRlNgLCBhbmQgYENPTkZJR19GVVNFX0ZTYCB0byBlbnN1cmUgdGhlIHJlbGV2YW50IGNvZGUgcGF0aHMgYXJlIHRlc3RlZC4gSSB3aWxsIHVzZSBgZ3JlcHBlcmAgdG8gZG91YmxlLWNoZWNrIHRob3NlIGNvbmZpZyBuYW1lcy5cblxuVGhpcyBwYXRjaCBpcyBnb2luZyB0byByZXF1aXJlIGEgdGhvcm91Z2ggcmV2aWV3LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MzE5LCJPdXRwdXRUb2tlbnMiOjU3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzAxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTk6MjI6NDYuMDIxMjA4NzYzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MDQyODExNjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiKGNvbmZpZyBCTEtfREVWX1VCTEt8Y29uZmlnIE5WTUVfQ09SRXxjb25maWcgQkxLX0RFVl9CU0d8Y29uZmlnIEJUUkZTX0ZTfGNvbmZpZyBGVVNFX0ZTfGNvbmZpZyBJT19VUklORylcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svS2NvbmZpZz00NT1jb25maWcgQkxLX0NHUk9VUF9QVU5UX0JJT1xcbi0tXFxuYmxvY2svS2NvbmZpZy00Ny1cXG5ibG9jay9LY29uZmlnOjQ4OmNvbmZpZyBCTEtfREVWX0JTR19DT01NT05cXG5ibG9jay9LY29uZmlnLTQ5LVxcdHRyaXN0YXRlXFxuLS1cXG5ibG9jay9LY29uZmlnPTUxPWNvbmZpZyBCTEtfSUNRXFxuLS1cXG5ibG9jay9LY29uZmlnLTUzLVxcbmJsb2NrL0tjb25maWc6NTQ6Y29uZmlnIEJMS19ERVZfQlNHTElCXFxuYmxvY2svS2NvbmZpZy01NS1cXHRib29sIFxcXCJCbG9jayBsYXllciBTRyBzdXBwb3J0IHY0IGhlbHBlciBsaWJcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc9MzE1PWNvbmZpZyBCTEtfREVWX1JCRFxcbi0tXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTMyNy1cXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MzI4OmNvbmZpZyBCTEtfREVWX1VCTEtcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMzI5LVxcdHRyaXN0YXRlIFxcXCJVc2Vyc3BhY2UgYmxvY2sgZHJpdmVyIChFeHBlcmltZW50YWwpXFxcIlxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWc6Mjpjb25maWcgTlZNRV9DT1JFXFxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZy0zLVxcdHRyaXN0YXRlXFxuLS1cXG5kcml2ZXJzL3Njc2kvS2NvbmZpZz0xMzE9Y29uZmlnIENIUl9ERVZfU0dcXG4tLVxcbmRyaXZlcnMvc2NzaS9LY29uZmlnLTE1NS1cXG5kcml2ZXJzL3Njc2kvS2NvbmZpZzoxNTY6Y29uZmlnIEJMS19ERVZfQlNHXFxuZHJpdmVycy9zY3NpL0tjb25maWctMTU3LVxcdGJvb2wgXFxcIi9kZXYvYnNnIHN1cHBvcnQgKFNHIHY0KVxcXCJcXG4tLVxcbmZzL2J0cmZzL0tjb25maWctMi1cXG5mcy9idHJmcy9LY29uZmlnOjM6Y29uZmlnIEJUUkZTX0ZTXFxuZnMvYnRyZnMvS2NvbmZpZy00LVxcdHRyaXN0YXRlIFxcXCJCdHJmcyBmaWxlc3lzdGVtIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9idHJmcy9LY29uZmlnLTM4LVxcbmZzL2J0cmZzL0tjb25maWc6Mzk6Y29uZmlnIEJUUkZTX0ZTX1BPU0lYX0FDTFxcbmZzL2J0cmZzL0tjb25maWctNDAtXFx0Ym9vbCBcXFwiQnRyZnMgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHNcXFwiXFxuLS1cXG5mcy9idHJmcy9LY29uZmlnLTQ4LVxcbmZzL2J0cmZzL0tjb25maWc6NDk6Y29uZmlnIEJUUkZTX0ZTX1JVTl9TQU5JVFlfVEVTVFNcXG5mcy9idHJmcy9LY29uZmlnLTUwLVxcdGJvb2wgXFxcIkJ0cmZzIHdpbGwgcnVuIHNhbml0eSB0ZXN0cyB1cG9uIGxvYWRpbmdcXFwiXFxuLS1cXG5mcy9mdXNlL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9mdXNlL0tjb25maWc6Mjpjb25maWcgRlVTRV9GU1xcbmZzL2Z1c2UvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJGVVNFIChGaWxlc3lzdGVtIGluIFVzZXJzcGFjZSkgc3VwcG9ydFxcXCJcXG4tLVxcbmluaXQvS2NvbmZpZz0xOTE2PWNvbmZpZyBBSU9cXG4tLVxcbmluaXQvS2NvbmZpZy0xOTIzLVxcbmluaXQvS2NvbmZpZzoxOTI0OmNvbmZpZyBJT19VUklOR1xcbmluaXQvS2NvbmZpZy0xOTI1LVxcdGJvb2wgXFxcIkVuYWJsZSBJTyB1cmluZyBzdXBwb3J0XFxcIiBpZiBFWFBFUlRcXG4tLVxcbmluaXQvS2NvbmZpZz0xOTMzPWNvbmZpZyBHQ09WX1BST0ZJTEVfVVJJTkdcXG4tLVxcbmluaXQvS2NvbmZpZy0xOTQ1LVxcbmluaXQvS2NvbmZpZzoxOTQ2OmNvbmZpZyBJT19VUklOR19NT0NLX0ZJTEVcXG5pbml0L0tjb25maWctMTk0Ny1cXHR0cmlzdGF0ZSBcXFwiRW5hYmxlIGlvX3VyaW5nIG1vY2sgZmlsZXMgKEV4cGVyaW1lbnRhbClcXFwiIGlmIEVYUEVSVFxcbi0tXFxuaW9fdXJpbmcvS2NvbmZpZy01LVxcbmlvX3VyaW5nL0tjb25maWc6Njpjb25maWcgSU9fVVJJTkdfWkNSWFxcbmlvX3VyaW5nL0tjb25maWctNy1cXHRkZWZfYm9vbCB5XFxuLS1cXG5pb191cmluZy9LY29uZmlnLTEyLVxcbmlvX3VyaW5nL0tjb25maWc6MTM6Y29uZmlnIElPX1VSSU5HX0JQRlxcbmlvX3VyaW5nL0tjb25maWctMTQtXFx0ZGVmX2Jvb2wgeVxcbi0tXFxuaW9fdXJpbmcvS2NvbmZpZy0xNy1cXG5pb191cmluZy9LY29uZmlnOjE4OmNvbmZpZyBJT19VUklOR19CUEZfT1BTXFxuaW9fdXJpbmcvS2NvbmZpZy0xOS1cXHRkZWZfYm9vbCB5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDE5OjIyOjQ4LjYyNTQ5NjE4NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MTEyOTE4MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBjb25maWd1cmF0aW9uczogYElPX1VSSU5HYCwgYEJMS19ERVZfVUJMS2AsIGBOVk1FX0NPUkVgLCBgQkxLX0RFVl9CU0dgLCBgQlRSRlNfRlNgLCBhbmQgYEZVU0VfRlNgLiBJIGtub3cgdGhlc2UsIGdlbmVyYWxseSwgYnV0IEknbSBmb2N1c2luZyBvbiB0aGUgYE5WTUVfQ09SRWAgZm9yIHRoaXMgcGFydGljdWxhciB0ZXN0IHNjZW5hcmlvLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnkgY3JpdGljYWwgZGVwZW5kZW5jaWVzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCBhcmUgdGhlIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgdGhhdCBhcmUgYWxzbyByZXF1aXJlZD8gT2ZmIHRoZSB0b3Agb2YgbXkgaGVhZCwgSeKAmW0gdGhpbmtpbmcgSeKAmWxsIG5lZWQgdG8gdmVyaWZ5IGBCTEtfREVWX05WTUVgIGlzIGVuYWJsZWQuIEl0IGNvdWxkIGFsc28gcG90ZW50aWFsbHkgYmUgYE5WTUVfVEFSR0VUYCwgb3Igc29tZXRoaW5nIGVsc2Ugc3BlY2lmaWNhbGx5IE5WTWUgcmVsYXRlZC4gR290dGEgY2hlY2sgdGhlIGRlcGVuZGVuY2llcyB0aG9yb3VnaGx5IHRvIGVuc3VyZSB0aGlzIHdob2xlIHRoaW5nIHdvcmtzIHByb3Blcmx5IGFuZCBJJ20gbm90IG1pc3Npbmcgc29tZXRoaW5nIGZ1bmRhbWVudGFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTQzLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTk6MjI6NTIuMzM2NzkwNDM5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NzMzMzk3MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJMS19ERVZfTlZNRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL252bWUvaG9zdC9LY29uZmlnPTI9Y29uZmlnIE5WTUVfQ09SRVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZy00LVxcbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWc6NTpjb25maWcgQkxLX0RFVl9OVk1FXFxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZy02LVxcdHRyaXN0YXRlIFxcXCJOVk0gRXhwcmVzcyBibG9jayBkZXZpY2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDE5OjIyOjU0LjgxMDE1NTQ3NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NDU5MjcyOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFkZGluZyBOVk1lIEJsb2NrIERldmljZSBTdXBwb3J0IHRvIE15IFByb2plY3QqKlxuXG5BbHJpZ2h0LCB0aGUgbmV4dCB0YXNrIG9uIG15IGxpc3QgaXMgcHJldHR5IGNsZWFyOiBJJ20gZ29pbmcgdG8gYWRkIGBCTEtfREVWX05WTUVgIHRvIHRoZSBzeXN0ZW0uIFRoYXQncyB0aGUgY29yZSBvZiB0aGUgaW1wbGVtZW50YXRpb24uIE5vdywgYmVmb3JlIEkganVtcCBoZWFkZmlyc3QgaW50byB0aGUgbmV3IGNvZGUsIEkgd2FudCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIGhvdyB0aGUgcmVsZXZhbnQgc3RydWN0dXJlcyBhcmUgaGFuZGxlZCBpbiB0aGUgZXhpc3RpbmcgY29kZWJhc2UuIE15IG1haW4gY29uY2VybiBpcyB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgYGlvX3VyaW5nYCBjb21tYW5kcy5cblxuU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgaG93IHJlc3VsdHMgYXJlIHNldCBhbmQgaGFuZGxlZCB3aXRoaW4gdGhlIGBpb191cmluZ2AgY29udGV4dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gbWFuYWdlcyB0aGUgcmV0dXJuIHZhbHVlcyBmb3IgdGhlc2UgYmxvY2sgZGV2aWNlcyB3aXRoaW4gdGhlIGBpb191cmluZ2AgZnJhbWV3b3JrLiBJJ2xsIG5lZWQgdG8gc2NydXRpbml6ZSBgaW9fdXJpbmdfY21kX3NldF9yZXNgIGFuZCBgaW9fdXJpbmdfY21kX3NldF9yZXMzMmAgaW4gYGlvX3VyaW5nL3VyaW5nX2NtZC5jYC4gSSBoYXZlIGEgZmVlbGluZyB0aG9zZSBhcmUgZ29pbmcgdG8gYmUga2V5IHBpZWNlcyBvZiB0aGUgcHV6emxlIGZvciBwcm9wZXJseSBoYW5kbGluZyBOVk1lIGNvbXBsZXRpb24gcXVldWVzIGFuZCBJL08gc3RhdHVzLiBJdCB3aWxsIGFsc28gZ2l2ZSBtZSBhIHNvbGlkIHBvaW50IHRvIGhvb2sgaW50byBpbiB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIGJsb2NrIGRldmljZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTkzNCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDE5OjIyOjU4LjY1NjA4Njk3NloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDMyMTk3NDE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZvaWQgaW9fdXJpbmdfY21kX3NldF9yZXNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9pb191cmluZy9jbWQuaD00OT1pbnQgaW9fdXJpbmdfY21kX2ltcG9ydF9maXhlZF92ZWMoc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y21kLFxcbi0tXFxuaW5jbHVkZS9saW51eC9pb191cmluZy9jbWQuaC01NS0vKiBPbmUgb2YgdGhlc2UgbXVzdCBiZSBjYWxsZWQgcHJpb3IgdG8gaW9fdXJpbmdfY21kX2RvbmUoKSAqL1xcbmluY2x1ZGUvbGludXgvaW9fdXJpbmcvY21kLmg6NTY6dm9pZCBpb191cmluZ19jbWRfc2V0X3JlcyhzdHJ1Y3QgaW9fdXJpbmdfY21kICosIHMzMiByZXQpO1xcbmluY2x1ZGUvbGludXgvaW9fdXJpbmcvY21kLmg6NTc6dm9pZCBpb191cmluZ19jbWRfc2V0X3JlczMyKHN0cnVjdCBpb191cmluZ19jbWQgKiwgczMyIHJldCwgdTY0IHJlczIpO1xcbmluY2x1ZGUvbGludXgvaW9fdXJpbmcvY21kLmgtNTgtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2lvX3VyaW5nL2NtZC5oPTEwNT1zdGF0aWMgaW5saW5lIGludCBpb191cmluZ19jbWRfaW1wb3J0X2ZpeGVkX3ZlYyhzdHJ1Y3QgaW9fdXJpbmdfY21kICppb3VjbWQsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2lvX3VyaW5nL2NtZC5oLTExMi19XFxuaW5jbHVkZS9saW51eC9pb191cmluZy9jbWQuaDoxMTM6c3RhdGljIGlubGluZSB2b2lkIGlvX3VyaW5nX2NtZF9zZXRfcmVzKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCwgczMyIHJldClcXG5pbmNsdWRlL2xpbnV4L2lvX3VyaW5nL2NtZC5oLTExNC17XFxuaW5jbHVkZS9saW51eC9pb191cmluZy9jbWQuaC0xMTUtfVxcbmluY2x1ZGUvbGludXgvaW9fdXJpbmcvY21kLmg6MTE2OnN0YXRpYyBpbmxpbmUgdm9pZCBpb191cmluZ19jbWRfc2V0X3JlczMyKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCwgczMyIHJldCxcXG5pbmNsdWRlL2xpbnV4L2lvX3VyaW5nL2NtZC5oLTExNy1cXHRcXHRcXHRcXHRcXHQgIHU2NCByZXMyKVxcbi0tXFxuaW9fdXJpbmcvdXJpbmdfY21kLmM9MTM5PUVYUE9SVF9TWU1CT0xfR1BMKF9faW9fdXJpbmdfY21kX2RvX2luX3Rhc2spO1xcbmlvX3VyaW5nL3VyaW5nX2NtZC5jLTE0MC1cXG5pb191cmluZy91cmluZ19jbWQuYzoxNDE6dm9pZCBpb191cmluZ19jbWRfc2V0X3JlcyhzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsIHMzMiByZXQpXFxuaW9fdXJpbmcvdXJpbmdfY21kLmMtMTQyLXtcXG4tLVxcbmlvX3VyaW5nL3VyaW5nX2NtZC5jPTE0OT1FWFBPUlRfU1lNQk9MX0dQTChpb191cmluZ19jbWRfc2V0X3Jlcyk7XFxuaW9fdXJpbmcvdXJpbmdfY21kLmMtMTUwLVxcbmlvX3VyaW5nL3VyaW5nX2NtZC5jOjE1MTp2b2lkIGlvX3VyaW5nX2NtZF9zZXRfcmVzMzIoc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLCBzMzIgcmV0LCB1NjQgcmVzMilcXG5pb191cmluZy91cmluZ19jbWQuYy0xNTIte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxOToyMzowMS4wODgyOTUzNzRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NDk3ODIzMTYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlZmluaW5nIHRoZSBGb2N1czogQ29yZSBBUEkgQ2hhbmdlcyBhbmQgS2V5IENhbGxlcnMqKlxuXG5Pa2F5LCBsZXQncyBkaXN0aWxsIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgaG93IHRoZXNlIGlvX3VyaW5nIGNoYW5nZXMgYXJlIGltcGxlbWVudGVkIGFuZCBJIG5lZWQgdG8gZGVmaW5lIHRoZSBzY29wZSBvZiBhbmFseXNpcy4gSSBzZWUgYSBidW5jaCBvZiBzeW1ib2xzLCBhbmQgSSBuZWVkIHRvIGlkZW50aWZ5IHdoYXQncyBjcml0aWNhbC4gUmlnaHQsIHNvIGBpb191cmluZ19jbWRfc2V0X3Jlc2AsIGBpb191cmluZ19jbWRfc2V0X3JlczMyYCwgYW5kIGBpb191cmluZ19jbWRfZG9uZWAgaW1tZWRpYXRlbHkgc3RhbmQgb3V0LiBUaG9zZSBhcmUgdGhlIGhlYXJ0IG9mIHRoZSBBUEkgbW9kaWZpY2F0aW9ucyB0aGVtc2VsdmVzLiBUaGV5IGFyZSB0aGUgY29yZSBjaGFuZ2VzLlxuXG5UaGVuIHRoZXJlIGFyZSBjYWxsZXJzIHRvIHRob3NlIGNvcmUgY2hhbmdlczsgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSAqdXNpbmcqIHRoZSBuZXcgaW9fdXJpbmcgZnVuY3Rpb25hbGl0eS4gV2Ugc2hvdWxkIGluY2x1ZGUgc29tZSBvZiB0aGVzZSBmb3IgdGhlIHN1bW1hcnk6IGBibGtfY21kX2NvbXBsZXRlYCwgYHVibGtfY2hfdXJpbmdfY21kX2NiYCwgYG52bWVfdXJpbmdfY21kX2VuZF9pb2AsIGBzY3NpX2JzZ191cmluZ190YXNrX2NiYCwgYGJ0cmZzX3VyaW5nX3JlYWRfZmluaXNoZWRgLCBhbmQgYGZ1c2VfdXJpbmdfc2VuZGAgYXJlIHByb2JhYmx5IHRoZSBtb3N0IHNhbGllbnQgZXhhbXBsZXMuXG5cbkknbGwgY2hlY2sgdGhlIGNvbmZpZyBvcHRpb25zIGFzc29jaWF0ZWQgd2l0aCBlYWNoIHBhcnQgb2YgdGhpcyBzbyBJIGtub3cgd2hlcmUgdGhlIHN1cHBvcnQgbGllcy4gSXQgbG9va3MgbGlrZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgYXJlIGBJT19VUklOR2AsIGBCTEtfREVWX1VCTEtgLCBgTlZNRV9DT1JFYCwgYEJMS19ERVZfTlZNRWAsIGBCTEtfREVWX0JTR2AsIGBCVFJGU19GU2AsIGFuZCBgRlVTRV9GU2AuXG5cbkp1c3QgYSBxdWljayBjaGVjay4uLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGBmdXNlX3VyaW5nX3NlbmRgIGlzIHN0YXRpYyBvciBub3QuIFRoaXMgYWZmZWN0cyB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODg2LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDA5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDE5OjIzOjA3LjU4NjEyMTMxNVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI0NjU5Njc0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmdXNlX3VyaW5nX3NlbmRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZnVzZS9kZXZfdXJpbmcuYz05MjE9c3RhdGljIGludCBmdXNlX3JpbmdfZW50X3NldF9jb21taXQoc3RydWN0IGZ1c2VfcmluZ19lbnQgKmVudClcXG4tLVxcbmZzL2Z1c2UvZGV2X3VyaW5nLmMtOTM1LVxcbmZzL2Z1c2UvZGV2X3VyaW5nLmM6OTM2OnN0YXRpYyB2b2lkIGZ1c2VfdXJpbmdfc2VuZChzdHJ1Y3QgZnVzZV9yaW5nX2VudCAqZW50LCBzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsXFxuZnMvZnVzZS9kZXZfdXJpbmcuYy05MzctXFx0XFx0XFx0ICAgIHNzaXplX3QgcmV0LCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuLS1cXG5mcy9mdXNlL2Rldl91cmluZy5jPTk1Mz1zdGF0aWMgaW50IGZ1c2VfdXJpbmdfY29tbWl0X2ZldGNoKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCwgaW50IGlzc3VlX2ZsYWdzLFxcbi0tXFxuZnMvZnVzZS9kZXZfdXJpbmcuYy0xMDI3LVxcdGlmIChmdXNlX3VyaW5nX2dldF9uZXh0X2Z1c2VfcmVxKGVudCwgcXVldWUpKVxcbmZzL2Z1c2UvZGV2X3VyaW5nLmM6MTAyODpcXHRcXHRmdXNlX3VyaW5nX3NlbmQoZW50LCBjbWQsIDAsIGlzc3VlX2ZsYWdzKTtcXG5mcy9mdXNlL2Rldl91cmluZy5jLTEwMjktXFx0cmV0dXJuIDA7XFxuLS1cXG5mcy9mdXNlL2Rldl91cmluZy5jPTEyMjE9aW50IGZ1c2VfdXJpbmdfY21kKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbi0tXFxuZnMvZnVzZS9kZXZfdXJpbmcuYy0xMjkyLSAqL1xcbmZzL2Z1c2UvZGV2X3VyaW5nLmM6MTI5MzpzdGF0aWMgdm9pZCBmdXNlX3VyaW5nX3NlbmRfaW5fdGFzayhzdHJ1Y3QgaW9fdHdfcmVxIHR3X3JlcSwgaW9fdHdfdG9rZW5fdCB0dylcXG5mcy9mdXNlL2Rldl91cmluZy5jLTEyOTQte1xcbi0tXFxuZnMvZnVzZS9kZXZfdXJpbmcuYy0xMzA3LVxcdFxcdH1cXG5mcy9mdXNlL2Rldl91cmluZy5jOjEzMDg6XFx0XFx0ZnVzZV91cmluZ19zZW5kKGVudCwgY21kLCBlcnIsIGlzc3VlX2ZsYWdzKTtcXG5mcy9mdXNlL2Rldl91cmluZy5jLTEzMDktXFx0fSBlbHNlIHtcXG4tLVxcbmZzL2Z1c2UvZGV2X3VyaW5nLmM9MTM0ND1zdGF0aWMgdm9pZCBmdXNlX3VyaW5nX2Rpc3BhdGNoX2VudChzdHJ1Y3QgZnVzZV9yaW5nX2VudCAqZW50KVxcbi0tXFxuZnMvZnVzZS9kZXZfdXJpbmcuYy0xMzQ4LVxcdHVyaW5nX2NtZF9zZXRfcmluZ19lbnQoY21kLCBlbnQpO1xcbmZzL2Z1c2UvZGV2X3VyaW5nLmM6MTM0OTpcXHRpb191cmluZ19jbWRfY29tcGxldGVfaW5fdGFzayhjbWQsIGZ1c2VfdXJpbmdfc2VuZF9pbl90YXNrKTtcXG5mcy9mdXNlL2Rldl91cmluZy5jLTEzNTAtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxOToyMzowOS44MzI3MjQ0MDlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTcwMzExODMzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWZpbmluZyB0aGUgTGlzdCBvZiBDb3JlIGlvX3VyaW5nIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBob3cgdG8gaGFuZGxlIHRoZSBgaW9fdXJpbmdgIGZ1bmN0aW9ucy4gYGZ1c2VfdXJpbmdfc2VuZGAgaXMgc3RhdGljLCBzbyBpdCBzZWVtcyByZWR1bmRhbnQgdG8gaW5jbHVkZSBpdC4gSXQncyBiZXN0IHRvIHN0aWNrIHRvIG5vbi1zdGF0aWMgb3IgZXNzZW50aWFsIGZ1bmN0aW9ucy4gRm9jdXNpbmcgb24gdGhhdCwgSSd2ZSBpZGVudGlmaWVkIGBpb191cmluZ19jbWRfc2V0X3Jlc2AsIGBpb191cmluZ19jbWRfc2V0X3JlczMyYCwgYW5kIGBpb191cmluZ19jbWRfZG9uZWAgYXMgdGhlIGNyaXRpY2FsIG9uZXMuIExldCdzIGp1c3QgbGlzdCB0aG9zZSBmb3Igbm93LCBhbmQgcG90ZW50aWFsbHkgYWRkIGEgZmV3IG5vbi1zdGF0aWMgb25lcyBpZiB0aGV5IHN0YW5kIG91dC5cblxuSSBhbHNvIGNoZWNrZWQgb3RoZXIgZnVuY3Rpb25zLiBJIG5vdGljZWQgdGhhdCBgYmxrX2NtZF9jb21wbGV0ZWAsIGB1YmxrX2NoX3VyaW5nX2NtZF9jYmAsIGBudm1lX3VyaW5nX2NtZF9lbmRfaW9gLCBgc2NzaV9ic2dfdXJpbmdfdGFza19jYmAsIGFuZCBgYnRyZnNfdXJpbmdfcmVhZF9maW5pc2hlZGAgYXJlIGFsbCBzdGF0aWMuIEdpdmVuIHRoZXkncmUgc3RhdGljLCB0aGV5IG1pZ2h0IGJlIGlubGluZWQgb3IgbGFjayBjbGVhciBzeW1ib2wgYWRkcmVzc2VzLCBzbyBJIHNob3VsZCBvbWl0IHRoZW0uXG5cblRoZXJlZm9yZSwgZm9yIHRoZSBsaXN0LCBJJ2xsIHN0aWNrIHdpdGggdGhlIGV4cG9ydGVkIGZ1bmN0aW9uczogYGlvX3VyaW5nX2NtZF9zZXRfcmVzYCwgYGlvX3VyaW5nX2NtZF9zZXRfcmVzMzJgLCBhbmQgYGlvX3VyaW5nX2NtZF9kb25lYC5cblxuTm93LCBsZXQncyBqdXN0IGNvbmZpcm0gdGhhdCBgaW9fdXJpbmdfY21kX2RvbmVgIGlzIGFjdHVhbGx5IGV4cG9ydGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjIzNywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxOToyMzoxNS41MzU4NDUwMDZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3ODYzNDMwMjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTF9HUExcXFxcKGlvX3VyaW5nX2NtZF9kb25lXFxcXClcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvdXJpbmdfY21kLmM9MTY1PXZvaWQgaW9fdXJpbmdfY21kX2RvbmUoc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y21kLCB1bnNpZ25lZCBpc3N1ZV9mbGFncylcXG4tLVxcbmlvX3VyaW5nL3VyaW5nX2NtZC5jLTE4Ni19XFxuaW9fdXJpbmcvdXJpbmdfY21kLmM6MTg3OkVYUE9SVF9TWU1CT0xfR1BMKGlvX3VyaW5nX2NtZF9kb25lKTtcXG5pb191cmluZy91cmluZ19jbWQuYy0xODgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDE5OjIzOjE4LjMyMjE5MTkzMloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODc3ODEzNDE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIGlvX3VyaW5nIEFQSSBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGluIGZyb250IG9mIG1lLCBhbmQgaXQgbG9va3MgbGlrZSBhIHByZXR0eSBzaWduaWZpY2FudCBzaGlmdCBpbiBob3cgaW9fdXJpbmcgaGFuZGxlcyBjb21tYW5kIHJlc3VsdHMuIEVzc2VudGlhbGx5LCB0aGV5J3JlIGJyZWFraW5nIGRvd24gYGlvX3VyaW5nX2NtZF9kb25lYCBpbnRvIHR3byBwYXJ0czogYGlvX3VyaW5nX2NtZF9zZXRfcmVzYCAob3IgYGlvX3VyaW5nX2NtZF9zZXRfcmVzMzJgKSBhbmQgYGlvX3VyaW5nX2NtZF9kb25lYC4gVGhpcyBpcyBhIGNvcmUgQVBJIG1vZGlmaWNhdGlvbi5cblxuVGhlIHN5bWJvbHMgdGhhdCByZWFsbHkgc3RhbmQgb3V0IGFyZTogYGlvX3VyaW5nX2NtZF9zZXRfcmVzYCwgYGlvX3VyaW5nX2NtZF9zZXRfcmVzMzJgLCBhbmQgYGlvX3VyaW5nX2NtZF9kb25lYC4gVGhlc2UgYXJlIHRoZSBrZXkgcGllY2VzIG9mIHRoZSBwdXp6bGUuIEkgYWxzbyBzZWUgdGhlc2UgY29uZmlncyBwb3RlbnRpYWxseSBiZWluZyBhZmZlY3RlZDogYElPX1VSSU5HYCwgYEJMS19ERVZfVUJMS2AsIGBOVk1FX0NPUkVgLCBgQkxLX0RFVl9OVk1FYCwgYEJMS19ERVZfQlNHYCwgYEJUUkZTX0ZTYCwgYW5kIGBGVVNFX0ZTYC4gVGhpcyBjaGFuZ2UgY2xlYXJseSByaXBwbGVzIGFjcm9zcyBxdWl0ZSBhIGZldyBzdWJzeXN0ZW1zLCBpbmNsdWRpbmcgYmxvY2sgZGV2aWNlcywgdWJsaywgTlZNZSwgU0NTSSwgQnRyZnMsIGFuZCBGVVNFLlxuXG5TaW5jZSBpdCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBpdCdzIHByZXR0eSBjbGVhciB0aGF0IHRoaXMgbmVlZHMgc29tZSBzZXJpb3VzIGZ1enppbmcgYW5kIHRlc3RpbmcgdG8gbWFrZSBzdXJlIHdlJ3JlIG5vdCBpbnRyb2R1Y2luZyByZWdyZXNzaW9ucyBvciBidWdzIGluIHRoZSB3YXkgcmVzdWx0cyBhcmUgaGFuZGxlZC4gTGV0J3MgY2FsbCB0aGlzIHRoZSBgc2V0LXJlc3VsdHNgIGNoYW5nZSwgYW5kIGdldCB0byB3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjk3MCwiT3V0cHV0VG9rZW5zIjoyNDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTk6MjM6MjUuMjAwMDA4MzlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzI2MzUxMTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklPX1VSSU5HXCIsXG4gICAgXCJCTEtfREVWX1VCTEtcIixcbiAgICBcIk5WTUVfQ09SRVwiLFxuICAgIFwiQkxLX0RFVl9OVk1FXCIsXG4gICAgXCJCTEtfREVWX0JTR1wiLFxuICAgIFwiQlRSRlNfRlNcIixcbiAgICBcIkZVU0VfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpb191cmluZ19jbWRfc2V0X3Jlc1wiLFxuICAgIFwiaW9fdXJpbmdfY21kX3NldF9yZXMzMlwiLFxuICAgIFwiaW9fdXJpbmdfY21kX2RvbmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBpb191cmluZyBjb21tYW5kIEFQSSBieSBzcGxpdHRpbmcgYGlvX3VyaW5nX2NtZF9kb25lYCBpbnRvIGBpb191cmluZ19jbWRfc2V0X3Jlc2AgKG9yIGBpb191cmluZ19jbWRfc2V0X3JlczMyYCkgYW5kIGBpb191cmluZ19jbWRfZG9uZWAuIFRoaXMgYWZmZWN0cyBob3cgcmVzdWx0cyBhcmUgcmV0dXJuZWQgZm9yIGlvX3VyaW5nIGNvbW1hbmRzIGFjcm9zcyBtdWx0aXBsZSBzdWJzeXN0ZW1zIGluY2x1ZGluZyBibG9jaywgdWJsaywgbnZtZSwgc2NzaSBic2csIGJ0cmZzLCBhbmQgZnVzZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGtlcm5lbCBBUEkgYW5kIGl0cyBjYWxsZXJzLCB3aGljaCBpcyB3b3J0aCBmdXp6aW5nIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBpbmNvcnJlY3QgcmVzdWx0IGhhbmRsaW5nIGFyZSBpbnRyb2R1Y2VkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklPX1VSSU5HXCIsXG4gICAgXCJCTEtfREVWX1VCTEtcIixcbiAgICBcIk5WTUVfQ09SRVwiLFxuICAgIFwiQkxLX0RFVl9OVk1FXCIsXG4gICAgXCJCTEtfREVWX0JTR1wiLFxuICAgIFwiQlRSRlNfRlNcIixcbiAgICBcIkZVU0VfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpb191cmluZ19jbWRfc2V0X3Jlc1wiLFxuICAgIFwiaW9fdXJpbmdfY21kX3NldF9yZXMzMlwiLFxuICAgIFwiaW9fdXJpbmdfY21kX2RvbmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBpb191cmluZyBjb21tYW5kIEFQSSBieSBzcGxpdHRpbmcgYGlvX3VyaW5nX2NtZF9kb25lYCBpbnRvIGBpb191cmluZ19jbWRfc2V0X3Jlc2AgKG9yIGBpb191cmluZ19jbWRfc2V0X3JlczMyYCkgYW5kIGBpb191cmluZ19jbWRfZG9uZWAuIFRoaXMgYWZmZWN0cyBob3cgcmVzdWx0cyBhcmUgcmV0dXJuZWQgZm9yIGlvX3VyaW5nIGNvbW1hbmRzIGFjcm9zcyBtdWx0aXBsZSBzdWJzeXN0ZW1zIGluY2x1ZGluZyBibG9jaywgdWJsaywgbnZtZSwgc2NzaSBic2csIGJ0cmZzLCBhbmQgZnVzZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGtlcm5lbCBBUEkgYW5kIGl0cyBjYWxsZXJzLCB3aGljaCBpcyB3b3J0aCBmdXp6aW5nIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBpbmNvcnJlY3QgcmVzdWx0IGhhbmRsaW5nIGFyZSBpbnRyb2R1Y2VkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxOToyMzoyNS4zMzI2NzM1MDVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MjU5NTUxNTE2NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDE5OjIzOjI1LjMzMzE3ODgxNVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxODI1OTUwMDU5ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgYGlvX3VyaW5nX2NtZF9kb25lYCBBUEkgYnkgc3BsaXR0aW5nIGl0IGludG8gYGlvX3VyaW5nX2NtZF9zZXRfcmVzYC9gaW9fdXJpbmdfY21kX3NldF9yZXMzMmAgYW5kIGBpb191cmluZ19jbWRfZG9uZWAuIFRoZSB2YWx1ZXMgcGFzc2VkIHRvIHRoZXNlIGZ1bmN0aW9ucyByZW1haW4gdGhlIHNhbWUgYXMgYmVmb3JlLCBhbmQgYWxsIGZpZWxkcyBpbiB0aGUgY29tcGxldGlvbiBxdWV1ZSBlbnRyeSAoQ1FFKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCAoZS5nLiwgYGV4dHJhMmAgaXMgc2V0IHRvIDAgaW4gYGlvX3JlcV9zZXRfcmVzMzJgKS4gVGhlcmUgYXJlIG5vIG5ldyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm8gY2hhbmdlcyB0byBib3VuZHMgY2hlY2tpbmcsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2guIEFueSBwb3RlbnRpYWwgYnVncyB3b3VsZCBiZSBsb2dpYyBlcnJvcnMgb3IgdXNlLWFmdGVyLWZyZWUvb3V0LW9mLWJvdW5kcyBpc3N1ZXMsIHdoaWNoIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgS0FTQU4gYW5kIG90aGVyIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMzVmNmMxY2Q1YmM5Zjc5ZDc3Yzg1ZjZiMWY2OGFjM2Y2ZjFhYTJjM1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDI3IDE5OjIyOjMzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYmxvY2svaW9jdGwuYyBiL2Jsb2NrL2lvY3RsLmNcbmluZGV4IDY0YjRlNmMwZjY5NjUuLjk0NmNhYjc0ZjI1M2UgMTAwNjQ0XG4tLS0gYS9ibG9jay9pb2N0bC5jXG4rKysgYi9ibG9jay9pb2N0bC5jXG5AQCAtODcxLDkgKzg3MSwxMCBAQCBzdGF0aWMgdm9pZCBibGtfY21kX2NvbXBsZXRlKHN0cnVjdCBpb190d19yZXEgdHdfcmVxLCBpb190d190b2tlbl90IHR3KVxuIFxuIFx0aWYgKGJpYy1cdTAwM2VyZXMgPT0gLUVBR0FJTiBcdTAwMjZcdTAwMjYgYmljLVx1MDAzZW5vd2FpdClcbiBcdFx0aW9fdXJpbmdfY21kX2lzc3VlX2Jsb2NraW5nKGNtZCk7XG4tXHRlbHNlXG4tXHRcdGlvX3VyaW5nX2NtZF9kb25lKGNtZCwgYmljLVx1MDAzZXJlcyxcbi1cdFx0XHRcdCAgSU9fVVJJTkdfQ01EX1RBU0tfV09SS19JU1NVRV9GTEFHUyk7XG4rXHRlbHNlIHtcbitcdFx0aW9fdXJpbmdfY21kX3NldF9yZXMoY21kLCBiaWMtXHUwMDNlcmVzKTtcbitcdFx0aW9fdXJpbmdfY21kX2RvbmUoY21kLCBJT19VUklOR19DTURfVEFTS19XT1JLX0lTU1VFX0ZMQUdTKTtcbitcdH1cbiB9XG4gXG4gc3RhdGljIHZvaWQgYmlvX2NtZF9iaW9fZW5kX2lvKHN0cnVjdCBiaW8gKmJpbylcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMgYi9kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmNcbmluZGV4IDRkMTdlZDI2NGRhMWEuLjUxZjE1ZTViM2MwMWQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmNcbisrKyBiL2RyaXZlcnMvYmxvY2svdWJsa19kcnYuY1xuQEAgLTgzOSw3ICs4MzksOCBAQCBzdGF0aWMgdm9pZCB1YmxrX2JhdGNoX2RlaW5pdF9mZXRjaF9idWYoc3RydWN0IHVibGtfcXVldWUgKnVicSxcbiBcdF9fdWJsa19yZWxlYXNlX2ZjbWQodWJxKTtcbiBcdHNwaW5fdW5sb2NrKFx1MDAyNnVicS1cdTAwM2VldnRzX2xvY2spO1xuIFxuLVx0aW9fdXJpbmdfY21kX2RvbmUoZmNtZC1cdTAwM2VjbWQsIHJlcywgZGF0YS1cdTAwM2Vpc3N1ZV9mbGFncyk7XG4rXHRpb191cmluZ19jbWRfc2V0X3JlcyhmY21kLVx1MDAzZWNtZCwgcmVzKTtcbitcdGlvX3VyaW5nX2NtZF9kb25lKGZjbWQtXHUwMDNlY21kLCBkYXRhLVx1MDAzZWlzc3VlX2ZsYWdzKTtcbiBcdHVibGtfYmF0Y2hfZnJlZV9mY21kKGZjbWQpO1xuIH1cbiBcbkBAIC0xNjQyLDcgKzE2NDMsOCBAQCBzdGF0aWMgdm9pZCB1YmxrX2NvbXBsZXRlX2lvX2NtZChzdHJ1Y3QgdWJsa19pbyAqaW8sIHN0cnVjdCByZXF1ZXN0ICpyZXEsXG4gXHRzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQgPSBfX3VibGtfcHJlcF9jb21wbF9pb19jbWQoaW8sIHJlcSk7XG4gXG4gXHQvKiB0ZWxsIHVibGtzcnYgb25lIGlvIHJlcXVlc3QgaXMgY29taW5nICovXG4tXHRpb191cmluZ19jbWRfZG9uZShjbWQsIHJlcywgaXNzdWVfZmxhZ3MpO1xuK1x0aW9fdXJpbmdfY21kX3NldF9yZXMoY21kLCByZXMpO1xuK1x0aW9fdXJpbmdfY21kX2RvbmUoY21kLCBpc3N1ZV9mbGFncyk7XG4gfVxuIFxuICNkZWZpbmUgVUJMS19SRVFVRVVFX0RFTEFZX01TXHQzXG5AQCAtMTcyOCw3ICsxNzMwLDggQEAgc3RhdGljIHZvaWQgdWJsa19hdXRvX2J1Zl9kaXNwYXRjaChjb25zdCBzdHJ1Y3QgdWJsa19xdWV1ZSAqdWJxLFxuIFxuIFx0aWYgKHJlcyAhPSBBVVRPX0JVRl9SRUdfRkFJTCkge1xuIFx0XHR1YmxrX2F1dG9fYnVmX2lvX3NldHVwKHVicSwgcmVxLCBpbywgY21kLCByZXMpO1xuLVx0XHRpb191cmluZ19jbWRfZG9uZShjbWQsIFVCTEtfSU9fUkVTX09LLCBpc3N1ZV9mbGFncyk7XG4rXHRcdGlvX3VyaW5nX2NtZF9zZXRfcmVzKGNtZCwgVUJMS19JT19SRVNfT0spO1xuK1x0XHRpb191cmluZ19jbWRfZG9uZShjbWQsIGlzc3VlX2ZsYWdzKTtcbiBcdH1cbiB9XG4gXG5AQCAtMjc4OSw4ICsyNzkyLDEwIEBAIHN0YXRpYyB2b2lkIHVibGtfY2FuY2VsX2NtZChzdHJ1Y3QgdWJsa19xdWV1ZSAqdWJxLCB1MTYgdGFnLFxuIFx0fVxuIFx0c3Bpbl91bmxvY2soXHUwMDI2dWJxLVx1MDAzZWNhbmNlbF9sb2NrKTtcbiBcbi1cdGlmICghZG9uZSBcdTAwMjZcdTAwMjYgY21kKVxuLVx0XHRpb191cmluZ19jbWRfZG9uZShjbWQsIFVCTEtfSU9fUkVTX0FCT1JULCBpc3N1ZV9mbGFncyk7XG4rXHRpZiAoIWRvbmUgXHUwMDI2XHUwMDI2IGNtZCkge1xuK1x0XHRpb191cmluZ19jbWRfc2V0X3JlcyhjbWQsIFVCTEtfSU9fUkVTX0FCT1JUKTtcbitcdFx0aW9fdXJpbmdfY21kX2RvbmUoY21kLCBpc3N1ZV9mbGFncyk7XG4rXHR9XG4gfVxuIFxuIC8qXG5AQCAtMjgxNiw3ICsyODIxLDggQEAgc3RhdGljIHZvaWQgdWJsa19iYXRjaF9jYW5jZWxfY21kKHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEsXG4gXHRzcGluX3VubG9jayhcdTAwMjZ1YnEtXHUwMDNlZXZ0c19sb2NrKTtcbiBcbiBcdGlmIChkb25lKSB7XG4tXHRcdGlvX3VyaW5nX2NtZF9kb25lKGZjbWQtXHUwMDNlY21kLCBVQkxLX0lPX1JFU19BQk9SVCwgaXNzdWVfZmxhZ3MpO1xuK1x0XHRpb191cmluZ19jbWRfc2V0X3JlcyhmY21kLVx1MDAzZWNtZCwgVUJMS19JT19SRVNfQUJPUlQpO1xuK1x0XHRpb191cmluZ19jbWRfZG9uZShmY21kLVx1MDAzZWNtZCwgaXNzdWVfZmxhZ3MpO1xuIFx0XHR1YmxrX2JhdGNoX2ZyZWVfZmNtZChmY21kKTtcbiBcdH1cbiB9XG5AQCAtMzUyNiw4ICszNTMyLDEwIEBAIHN0YXRpYyB2b2lkIHVibGtfY2hfdXJpbmdfY21kX2NiKHN0cnVjdCBpb190d19yZXEgdHdfcmVxLCBpb190d190b2tlbl90IHR3KVxuIFxuIFx0aWYgKCF0dy5jYW5jZWwpXG4gXHRcdHJldCA9IHVibGtfY2hfdXJpbmdfY21kX2xvY2FsKGNtZCwgaXNzdWVfZmxhZ3MpO1xuLVx0aWYgKHJldCAhPSAtRUlPQ0JRVUVVRUQpXG4tXHRcdGlvX3VyaW5nX2NtZF9kb25lKGNtZCwgcmV0LCBpc3N1ZV9mbGFncyk7XG4rXHRpZiAocmV0ICE9IC1FSU9DQlFVRVVFRCkge1xuK1x0XHRpb191cmluZ19jbWRfc2V0X3JlcyhjbWQsIHJldCk7XG4rXHRcdGlvX3VyaW5nX2NtZF9kb25lKGNtZCwgaXNzdWVfZmxhZ3MpO1xuK1x0fVxuIH1cbiBcbiBzdGF0aWMgaW50IHVibGtfY2hfdXJpbmdfY21kKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS9ob3N0L2lvY3RsLmMgYi9kcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jXG5pbmRleCA2NTM5ZDQ3NTAwOTg2Li5iNTBiYmEyMDc4MThiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9udm1lL2hvc3QvaW9jdGwuY1xuKysrIGIvZHJpdmVycy9udm1lL2hvc3QvaW9jdGwuY1xuQEAgLTQyMyw4ICs0MjMsNiBAQCBzdHJ1Y3QgbnZtZV91cmluZ19kYXRhIHtcbiBzdHJ1Y3QgbnZtZV91cmluZ19jbWRfcGR1IHtcbiBcdHN0cnVjdCByZXF1ZXN0ICpyZXE7XG4gXHRzdHJ1Y3QgYmlvICpiaW87XG4tXHR1NjQgcmVzdWx0O1xuLVx0aW50IHN0YXR1cztcbiB9O1xuIFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IG52bWVfdXJpbmdfY21kX3BkdSAqbnZtZV91cmluZ19jbWRfcGR1KFxuQEAgLTQ0MCw4ICs0MzgsNyBAQCBzdGF0aWMgdm9pZCBudm1lX3VyaW5nX3Rhc2tfY2Ioc3RydWN0IGlvX3R3X3JlcSB0d19yZXEsIGlvX3R3X3Rva2VuX3QgdHcpXG4gXG4gXHRpZiAocGR1LVx1MDAzZWJpbylcbiBcdFx0YmxrX3JxX3VubWFwX3VzZXIocGR1LVx1MDAzZWJpbyk7XG4tXHRpb191cmluZ19jbWRfZG9uZTMyKGlvdWNtZCwgcGR1LVx1MDAzZXN0YXR1cywgcGR1LVx1MDAzZXJlc3VsdCxcbi1cdFx0XHQgICAgSU9fVVJJTkdfQ01EX1RBU0tfV09SS19JU1NVRV9GTEFHUyk7XG4rXHRpb191cmluZ19jbWRfZG9uZShpb3VjbWQsIElPX1VSSU5HX0NNRF9UQVNLX1dPUktfSVNTVUVfRkxBR1MpO1xuIH1cbiBcbiBzdGF0aWMgZW51bSBycV9lbmRfaW9fcmV0IG52bWVfdXJpbmdfY21kX2VuZF9pbyhzdHJ1Y3QgcmVxdWVzdCAqcmVxLFxuQEAgLTQ1MCwxNSArNDQ3LDE3IEBAIHN0YXRpYyBlbnVtIHJxX2VuZF9pb19yZXQgbnZtZV91cmluZ19jbWRfZW5kX2lvKHN0cnVjdCByZXF1ZXN0ICpyZXEsXG4ge1xuIFx0c3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y21kID0gcmVxLVx1MDAzZWVuZF9pb19kYXRhO1xuIFx0c3RydWN0IG52bWVfdXJpbmdfY21kX3BkdSAqcGR1ID0gbnZtZV91cmluZ19jbWRfcGR1KGlvdWNtZCk7XG4rXHR1NjQgcmVzdWx0ID0gbGU2NF90b19jcHUobnZtZV9yZXEocmVxKS1cdTAwM2VyZXN1bHQudTY0KTtcbitcdGludCBzdGF0dXM7XG4gXG4gXHRpZiAobnZtZV9yZXEocmVxKS1cdTAwM2VmbGFncyBcdTAwMjYgTlZNRV9SRVFfQ0FOQ0VMTEVEKSB7XG4tXHRcdHBkdS1cdTAwM2VzdGF0dXMgPSAtRUlOVFI7XG4rXHRcdHN0YXR1cyA9IC1FSU5UUjtcbiBcdH0gZWxzZSB7XG4tXHRcdHBkdS1cdTAwM2VzdGF0dXMgPSBudm1lX3JlcShyZXEpLVx1MDAzZXN0YXR1cztcbi1cdFx0aWYgKCFwZHUtXHUwMDNlc3RhdHVzKVxuLVx0XHRcdHBkdS1cdTAwM2VzdGF0dXMgPSBibGtfc3RhdHVzX3RvX2Vycm5vKGVycik7XG4rXHRcdHN0YXR1cyA9IG52bWVfcmVxKHJlcSktXHUwMDNlc3RhdHVzO1xuK1x0XHRpZiAoIXN0YXR1cylcbitcdFx0XHRzdGF0dXMgPSBibGtfc3RhdHVzX3RvX2Vycm5vKGVycik7XG4gXHR9XG4tXHRwZHUtXHUwMDNlcmVzdWx0ID0gbGU2NF90b19jcHUobnZtZV9yZXEocmVxKS1cdTAwM2VyZXN1bHQudTY0KTtcbitcdGlvX3VyaW5nX2NtZF9zZXRfcmVzMzIoaW91Y21kLCBzdGF0dXMsIHJlc3VsdCk7XG4gXG4gXHQvKlxuIFx0ICogRm9yIElPUE9MTCwgY2hlY2sgaWYgdGhpcyBjb21wbGV0aW9uIGlzIGhhcHBlbmluZyBpbiB0aGUgY29udGV4dFxuQEAgLTQ3MSw3ICs0NzAsNyBAQCBzdGF0aWMgZW51bSBycV9lbmRfaW9fcmV0IG52bWVfdXJpbmdfY21kX2VuZF9pbyhzdHJ1Y3QgcmVxdWVzdCAqcmVxLFxuIFx0ICAgIGlvYi1cdTAwM2Vwb2xsX2N0eCA9PSBpb191cmluZ19jbWRfY3R4X2hhbmRsZShpb3VjbWQpKSB7XG4gXHRcdGlmIChwZHUtXHUwMDNlYmlvKVxuIFx0XHRcdGJsa19ycV91bm1hcF91c2VyKHBkdS1cdTAwM2ViaW8pO1xuLVx0XHRpb191cmluZ19jbWRfZG9uZTMyKGlvdWNtZCwgcGR1LVx1MDAzZXN0YXR1cywgcGR1LVx1MDAzZXJlc3VsdCwgMCk7XG4rXHRcdGlvX3VyaW5nX2NtZF9kb25lKGlvdWNtZCwgMCk7XG4gXHR9IGVsc2Uge1xuIFx0XHRpb191cmluZ19jbWRfZG9faW5fdGFza19sYXp5KGlvdWNtZCwgbnZtZV91cmluZ190YXNrX2NiKTtcbiBcdH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9ic2cuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX2JzZy5jXG5pbmRleCBlODBkZWM1MzE3NGVhLi44YjMyZDhlOGYyOWY5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfYnNnLmNcbisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX2JzZy5jXG5AQCAtNjAsOCArNjAsOCBAQCBzdGF0aWMgdm9pZCBzY3NpX2JzZ191cmluZ190YXNrX2NiKHN0cnVjdCBpb190d19yZXEgdHdfcmVxLCBpb190d190b2tlbl90IHR3KVxuIFx0XHRcdFx0ICBzY21kLVx1MDAzZXJlc2lkX2xlbik7XG4gXG4gXHRibGtfbXFfZnJlZV9yZXF1ZXN0KHJxKTtcbi1cdGlvX3VyaW5nX2NtZF9kb25lMzIoaW91Y21kLCByZXQsIHJlczIsXG4tXHRcdFx0ICAgIElPX1VSSU5HX0NNRF9UQVNLX1dPUktfSVNTVUVfRkxBR1MpO1xuK1x0aW9fdXJpbmdfY21kX3NldF9yZXMzMihpb3VjbWQsIHJldCwgcmVzMik7XG4rXHRpb191cmluZ19jbWRfZG9uZShpb3VjbWQsIElPX1VSSU5HX0NNRF9UQVNLX1dPUktfSVNTVUVfRkxBR1MpO1xuIH1cbiBcbiBzdGF0aWMgZW51bSBycV9lbmRfaW9fcmV0IHNjc2lfYnNnX3VyaW5nX2NtZF9kb25lKHN0cnVjdCByZXF1ZXN0ICpyZXEsXG5kaWZmIC0tZ2l0IGEvZnMvYnRyZnMvaW9jdGwuYyBiL2ZzL2J0cmZzL2lvY3RsLmNcbmluZGV4IDcyYmM5ZDRmNzcwODcuLjA3MDU3YTcwODQ1MjkgMTAwNjQ0XG4tLS0gYS9mcy9idHJmcy9pb2N0bC5jXG4rKysgYi9mcy9idHJmcy9pb2N0bC5jXG5AQCAtNDYyMSw3ICs0NjIxLDggQEAgc3RhdGljIHZvaWQgYnRyZnNfdXJpbmdfcmVhZF9maW5pc2hlZChzdHJ1Y3QgaW9fdHdfcmVxIHR3X3JlcSwgaW9fdHdfdG9rZW5fdCB0dylcbiBcdGJ0cmZzX3VubG9ja19leHRlbnQoaW9fdHJlZSwgcHJpdi1cdTAwM2VzdGFydCwgcHJpdi1cdTAwM2Vsb2NrZW5kLCBcdTAwMjZwcml2LVx1MDAzZWNhY2hlZF9zdGF0ZSk7XG4gXHRidHJmc19pbm9kZV91bmxvY2soaW5vZGUsIEJUUkZTX0lMT0NLX1NIQVJFRCk7XG4gXG4tXHRpb191cmluZ19jbWRfZG9uZShjbWQsIHJldCwgSU9fVVJJTkdfQ01EX1RBU0tfV09SS19JU1NVRV9GTEFHUyk7XG4rXHRpb191cmluZ19jbWRfc2V0X3JlcyhjbWQsIHJldCk7XG4rXHRpb191cmluZ19jbWRfZG9uZShjbWQsIElPX1VSSU5HX0NNRF9UQVNLX1dPUktfSVNTVUVfRkxBR1MpO1xuIFx0YWRkX3JjaGFyKGN1cnJlbnQsIHJldCk7XG4gXG4gXHRmb3IgKGluZGV4ID0gMDsgaW5kZXggXHUwMDNjIHByaXYtXHUwMDNlbnJfcGFnZXM7IGluZGV4KyspXG5kaWZmIC0tZ2l0IGEvZnMvZnVzZS9kZXZfdXJpbmcuYyBiL2ZzL2Z1c2UvZGV2X3VyaW5nLmNcbmluZGV4IDc3YzhjZWM0M2Q5YzYuLmM1YmI1MDE4M2UxYzYgMTAwNjQ0XG4tLS0gYS9mcy9mdXNlL2Rldl91cmluZy5jXG4rKysgYi9mcy9mdXNlL2Rldl91cmluZy5jXG5AQCAtMzY2LDggKzM2NiwxMCBAQCBzdGF0aWMgdm9pZCBmdXNlX3VyaW5nX2VudHJ5X3RlYXJkb3duKHN0cnVjdCBmdXNlX3JpbmdfZW50ICplbnQpXG4gXHRlbnQtXHUwMDNlc3RhdGUgPSBGUlJTX1JFTEVBU0VEO1xuIFx0c3Bpbl91bmxvY2soXHUwMDI2cXVldWUtXHUwMDNlbG9jayk7XG4gXG4tXHRpZiAoY21kKVxuLVx0XHRpb191cmluZ19jbWRfZG9uZShjbWQsIC1FTk9UQ09OTiwgSU9fVVJJTkdfRl9VTkxPQ0tFRCk7XG4rXHRpZiAoY21kKSB7XG4rXHRcdGlvX3VyaW5nX2NtZF9zZXRfcmVzKGNtZCwgLUVOT1RDT05OKTtcbitcdFx0aW9fdXJpbmdfY21kX2RvbmUoY21kLCBJT19VUklOR19GX1VOTE9DS0VEKTtcbitcdH1cbiBcbiBcdGlmIChyZXEpXG4gXHRcdGZ1c2VfdXJpbmdfc3RvcF9mdXNlX3JlcV9lbmQocmVxKTtcbkBAIC01MzEsNyArNTMzLDggQEAgc3RhdGljIHZvaWQgZnVzZV91cmluZ19jYW5jZWwoc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLFxuIFxuIFx0aWYgKG5lZWRfY21kX2RvbmUpIHtcbiBcdFx0Lyogbm8gcXVldWUgbG9jayB0byBhdm9pZCBsb2NrIG9yZGVyIGlzc3VlcyAqL1xuLVx0XHRpb191cmluZ19jbWRfZG9uZShjbWQsIC1FTk9UQ09OTiwgaXNzdWVfZmxhZ3MpO1xuK1x0XHRpb191cmluZ19jbWRfc2V0X3JlcyhjbWQsIC1FTk9UQ09OTik7XG4rXHRcdGlvX3VyaW5nX2NtZF9kb25lKGNtZCwgaXNzdWVfZmxhZ3MpO1xuIFx0XHRrZnJlZShlbnQpO1xuIFx0XHRpZiAoYXRvbWljX2RlY19hbmRfdGVzdChcdTAwMjZxdWV1ZS1cdTAwM2VyaW5nLVx1MDAzZXF1ZXVlX3JlZnMpKVxuIFx0XHRcdHdha2VfdXBfYWxsKFx1MDAyNnF1ZXVlLVx1MDAzZXJpbmctXHUwMDNlc3RvcF93YWl0cSk7XG5AQCAtOTQyLDcgKzk0NSw4IEBAIHN0YXRpYyB2b2lkIGZ1c2VfdXJpbmdfc2VuZChzdHJ1Y3QgZnVzZV9yaW5nX2VudCAqZW50LCBzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsXG4gXHRmdXNlX3VyaW5nX2FkZF90b19wcShlbnQpO1xuIFx0c3Bpbl91bmxvY2soXHUwMDI2cXVldWUtXHUwMDNlbG9jayk7XG4gXG4tXHRpb191cmluZ19jbWRfZG9uZShjbWQsIHJldCwgaXNzdWVfZmxhZ3MpO1xuK1x0aW9fdXJpbmdfY21kX3NldF9yZXMoY21kLCByZXQpO1xuK1x0aW9fdXJpbmdfY21kX2RvbmUoY21kLCBpc3N1ZV9mbGFncyk7XG4gfVxuIFxuIC8qIEZVU0VfVVJJTkdfQ01EX0NPTU1JVF9BTkRfRkVUQ0ggaGFuZGxlciAqL1xuQEAgLTEzMDksNyArMTMxMyw4IEBAIHN0YXRpYyB2b2lkIGZ1c2VfdXJpbmdfc2VuZF9pbl90YXNrKHN0cnVjdCBpb190d19yZXEgdHdfcmVxLCBpb190d190b2tlbl90IHR3KVxuIFx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNmVudC1cdTAwM2VsaXN0KTtcbiBcdFx0c3Bpbl91bmxvY2soXHUwMDI2cXVldWUtXHUwMDNlbG9jayk7XG4gXG4tXHRcdGlvX3VyaW5nX2NtZF9kb25lKGNtZCwgZXJyLCBpc3N1ZV9mbGFncyk7XG4rXHRcdGlvX3VyaW5nX2NtZF9zZXRfcmVzKGNtZCwgZXJyKTtcbitcdFx0aW9fdXJpbmdfY21kX2RvbmUoY21kLCBpc3N1ZV9mbGFncyk7XG4gXG4gXHRcdGZ1c2VfdXJpbmdfcmVxX2VuZChlbnQsIGVudC1cdTAwM2VmdXNlX3JlcSwgZXJyKTtcbiBcdFx0a2ZyZWUoZW50KTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lvX3VyaW5nL2NtZC5oIGIvaW5jbHVkZS9saW51eC9pb191cmluZy9jbWQuaFxuaW5kZXggMzMxZGNiZWZlNzJmMS4uOTZmY2MwNjA5N2M0ZSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvaW9fdXJpbmcvY21kLmhcbisrKyBiL2luY2x1ZGUvbGludXgvaW9fdXJpbmcvY21kLmhcbkBAIC01Miw2ICs1MiwxMCBAQCBpbnQgaW9fdXJpbmdfY21kX2ltcG9ydF9maXhlZF92ZWMoc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y21kLFxuIFx0XHRcdFx0ICBpbnQgZGRpciwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuIFx0XHRcdFx0ICB1bnNpZ25lZCBpc3N1ZV9mbGFncyk7XG4gXG4rLyogT25lIG9mIHRoZXNlIG11c3QgYmUgY2FsbGVkIHByaW9yIHRvIGlvX3VyaW5nX2NtZF9kb25lKCkgKi9cbit2b2lkIGlvX3VyaW5nX2NtZF9zZXRfcmVzKHN0cnVjdCBpb191cmluZ19jbWQgKiwgczMyIHJldCk7XG4rdm9pZCBpb191cmluZ19jbWRfc2V0X3JlczMyKHN0cnVjdCBpb191cmluZ19jbWQgKiwgczMyIHJldCwgdTY0IHJlczIpO1xuK1xuIC8qXG4gICogQ29tcGxldGVzIHRoZSByZXF1ZXN0LCBpLmUuIHBvc3RzIGFuIGlvX3VyaW5nIENRRSBhbmQgZGVhbGxvY2F0ZXMgQGlvdWNtZFxuICAqIGFuZCB0aGUgY29ycmVzcG9uZGluZyBpb191cmluZyByZXF1ZXN0LlxuQEAgLTU5LDggKzYzLDcgQEAgaW50IGlvX3VyaW5nX2NtZF9pbXBvcnRfZml4ZWRfdmVjKHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCxcbiAgKiBOb3RlOiB0aGUgY2FsbGVyIHNob3VsZCBuZXZlciBoYXJkIGNvZGUgQGlzc3VlX2ZsYWdzIGFuZCBpcyBvbmx5IGFsbG93ZWRcbiAgKiB0byBwYXNzIHRoZSBtYXNrIHByb3ZpZGVkIGJ5IHRoZSBjb3JlIGlvX3VyaW5nIGNvZGUuXG4gICovXG4tdm9pZCBfX2lvX3VyaW5nX2NtZF9kb25lKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCwgczMyIHJldCwgdTY0IHJlczIsXG4tXHRcdFx0IHVuc2lnbmVkIGlzc3VlX2ZsYWdzLCBib29sIGlzX2NxZTMyKTtcbit2b2lkIGlvX3VyaW5nX2NtZF9kb25lKHN0cnVjdCBpb191cmluZ19jbWQgKiwgdW5zaWduZWQgaXNzdWVfZmxhZ3MpO1xuIFxuIHZvaWQgX19pb191cmluZ19jbWRfZG9faW5fdGFzayhzdHJ1Y3QgaW9fdXJpbmdfY21kICppb3VjbWQsXG4gXHRcdFx0ICAgIGlvX3JlcV90d19mdW5jX3QgdGFza193b3JrX2NiLFxuQEAgLTEwNyw4ICsxMTAsMTUgQEAgc3RhdGljIGlubGluZSBpbnQgaW9fdXJpbmdfY21kX2ltcG9ydF9maXhlZF92ZWMoc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y21kLFxuIHtcbiBcdHJldHVybiAtRU9QTk9UU1VQUDtcbiB9XG4tc3RhdGljIGlubGluZSB2b2lkIF9faW9fdXJpbmdfY21kX2RvbmUoc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLCBzMzIgcmV0LFxuLVx0XHR1NjQgcmV0MiwgdW5zaWduZWQgaXNzdWVfZmxhZ3MsIGJvb2wgaXNfY3FlMzIpXG4rc3RhdGljIGlubGluZSB2b2lkIGlvX3VyaW5nX2NtZF9zZXRfcmVzKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCwgczMyIHJldClcbit7XG4rfVxuK3N0YXRpYyBpbmxpbmUgdm9pZCBpb191cmluZ19jbWRfc2V0X3JlczMyKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCwgczMyIHJldCxcbitcdFx0XHRcdFx0ICB1NjQgcmVzMilcbit7XG4rfVxuK3N0YXRpYyBpbmxpbmUgdm9pZCBpb191cmluZ19jbWRfZG9uZShzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsXG4rXHRcdFx0XHQgICAgIHVuc2lnbmVkIGlzc3VlX2ZsYWdzKVxuIHtcbiB9XG4gc3RhdGljIGlubGluZSB2b2lkIF9faW9fdXJpbmdfY21kX2RvX2luX3Rhc2soc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y21kLFxuQEAgLTE3MCwxOCArMTgwLDYgQEAgc3RhdGljIGlubGluZSB2b2lkICppb191cmluZ19jbWRfY3R4X2hhbmRsZShzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQpXG4gXHRyZXR1cm4gY21kX3RvX2lvX2tpb2NiKGNtZCktXHUwMDNlY3R4O1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgaW9fdXJpbmdfY21kX2RvbmUoc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y21kLCBzMzIgcmV0LFxuLVx0XHRcdFx0ICAgICB1bnNpZ25lZCBpc3N1ZV9mbGFncylcbi17XG4tXHRyZXR1cm4gX19pb191cmluZ19jbWRfZG9uZShpb3VjbWQsIHJldCwgMCwgaXNzdWVfZmxhZ3MsIGZhbHNlKTtcbi19XG4tXG4tc3RhdGljIGlubGluZSB2b2lkIGlvX3VyaW5nX2NtZF9kb25lMzIoc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y21kLCBzMzIgcmV0LFxuLVx0XHRcdFx0ICAgICAgIHU2NCByZXMyLCB1bnNpZ25lZCBpc3N1ZV9mbGFncylcbi17XG4tXHRyZXR1cm4gX19pb191cmluZ19jbWRfZG9uZShpb3VjbWQsIHJldCwgcmVzMiwgaXNzdWVfZmxhZ3MsIHRydWUpO1xuLX1cbi1cbiBpbnQgaW9fYnVmZmVyX3JlZ2lzdGVyX2J2ZWMoc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsXG4gXHRcdFx0ICAgIHZvaWQgKCpyZWxlYXNlKSh2b2lkICopLCB1bnNpZ25lZCBpbnQgaW5kZXgsXG4gXHRcdFx0ICAgIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyk7XG5kaWZmIC0tZ2l0IGEvaW9fdXJpbmcvdXJpbmdfY21kLmMgYi9pb191cmluZy91cmluZ19jbWQuY1xuaW5kZXggNzI2YTY1OWYzOGMzOC4uZWYzZTdlMzUyYzZhZiAxMDA2NDRcbi0tLSBhL2lvX3VyaW5nL3VyaW5nX2NtZC5jXG4rKysgYi9pb191cmluZy91cmluZ19jbWQuY1xuQEAgLTEzOCwxOSArMTM4LDMxIEBAIHZvaWQgX19pb191cmluZ19jbWRfZG9faW5fdGFzayhzdHJ1Y3QgaW9fdXJpbmdfY21kICppb3VjbWQsXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKF9faW9fdXJpbmdfY21kX2RvX2luX3Rhc2spO1xuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBpb19yZXFfc2V0X2NxZTMyX2V4dHJhKHN0cnVjdCBpb19raW9jYiAqcmVxLFxuLVx0XHRcdFx0XHQgIHU2NCBleHRyYTEsIHU2NCBleHRyYTIpXG4rdm9pZCBpb191cmluZ19jbWRfc2V0X3JlcyhzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsIHMzMiByZXQpXG4ge1xuLVx0cmVxLVx1MDAzZWJpZ19jcWUuZXh0cmExID0gZXh0cmExO1xuLVx0cmVxLVx1MDAzZWJpZ19jcWUuZXh0cmEyID0gZXh0cmEyO1xuK1x0c3RydWN0IGlvX2tpb2NiICpyZXEgPSBjbWRfdG9faW9fa2lvY2IoY21kKTtcbitcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJlcV9zZXRfZmFpbChyZXEpO1xuK1x0aW9fcmVxX3NldF9yZXMocmVxLCByZXQsIDApO1xuIH1cbitFWFBPUlRfU1lNQk9MX0dQTChpb191cmluZ19jbWRfc2V0X3Jlcyk7XG4rXG4rdm9pZCBpb191cmluZ19jbWRfc2V0X3JlczMyKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCwgczMyIHJldCwgdTY0IHJlczIpXG4re1xuK1x0c3RydWN0IGlvX2tpb2NiICpyZXEgPSBjbWRfdG9faW9fa2lvY2IoY21kKTtcbitcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJlcV9zZXRfZmFpbChyZXEpO1xuK1x0aW9fcmVxX3NldF9yZXMzMihyZXEsIHJldCwgMCwgcmVzMiwgMCk7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKGlvX3VyaW5nX2NtZF9zZXRfcmVzMzIpO1xuIFxuIC8qXG4gICogQ2FsbGVkIGJ5IGNvbnN1bWVycyBvZiBpb191cmluZ19jbWQsIGlmIHRoZXkgb3JpZ2luYWxseSByZXR1cm5lZFxuICAqIC1FSU9DQlFVRVVFRCB1cG9uIHJlY2VpdmluZyB0aGUgY29tbWFuZC5cbiAgKi9cbi12b2lkIF9faW9fdXJpbmdfY21kX2RvbmUoc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y21kLCBzMzIgcmV0LCB1NjQgcmVzMixcbi1cdFx0ICAgICAgIHVuc2lnbmVkIGlzc3VlX2ZsYWdzLCBib29sIGlzX2NxZTMyKVxuK3ZvaWQgaW9fdXJpbmdfY21kX2RvbmUoc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y21kLCB1bnNpZ25lZCBpc3N1ZV9mbGFncylcbiB7XG4gXHRzdHJ1Y3QgaW9fa2lvY2IgKnJlcSA9IGNtZF90b19pb19raW9jYihpb3VjbWQpO1xuIFxuQEAgLTE1OSwxNSArMTcxLDYgQEAgdm9pZCBfX2lvX3VyaW5nX2NtZF9kb25lKHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCwgczMyIHJldCwgdTY0IHJlczIsXG4gXG4gXHRpb191cmluZ19jbWRfZGVsX2NhbmNlbGFibGUoaW91Y21kLCBpc3N1ZV9mbGFncyk7XG4gXG4tXHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRyZXFfc2V0X2ZhaWwocmVxKTtcbi1cbi1cdGlvX3JlcV9zZXRfcmVzKHJlcSwgcmV0LCAwKTtcbi1cdGlmIChpc19jcWUzMikge1xuLVx0XHRpZiAocmVxLVx1MDAzZWN0eC1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1NFVFVQX0NRRV9NSVhFRClcbi1cdFx0XHRyZXEtXHUwMDNlY3FlLmZsYWdzIHw9IElPUklOR19DUUVfRl8zMjtcbi1cdFx0aW9fcmVxX3NldF9jcWUzMl9leHRyYShyZXEsIHJlczIsIDApO1xuLVx0fVxuIFx0aW9fcmVxX3VyaW5nX2NsZWFudXAocmVxLCBpc3N1ZV9mbGFncyk7XG4gXHRpZiAocmVxLVx1MDAzZWZsYWdzIFx1MDAyNiBSRVFfRl9JT1BPTEwpIHtcbiBcdFx0Lyogb3JkZXIgd2l0aCBpb19kb19pb3BvbGwoKSBjaGVja2luZyAtXHUwMDNlaW9wb2xsX2NvbXBsZXRlZCAqL1xuQEAgLTE4MSw3ICsxODQsNyBAQCB2b2lkIF9faW9fdXJpbmdfY21kX2RvbmUoc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y21kLCBzMzIgcmV0LCB1NjQgcmVzMixcbiBcdFx0aW9fcmVxX3Rhc2tfd29ya19hZGQocmVxKTtcbiBcdH1cbiB9XG4tRVhQT1JUX1NZTUJPTF9HUEwoX19pb191cmluZ19jbWRfZG9uZSk7XG4rRVhQT1JUX1NZTUJPTF9HUEwoaW9fdXJpbmdfY21kX2RvbmUpO1xuIFxuIGludCBpb191cmluZ19jbWRfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKVxuIHtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDE5OjIzOjI1LjMzMzE3OTgxNVoiLCJTZXEiOjE3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjg0Nzg2MzYwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGlvX3VyaW5nIENvbW1hbmQgQ29tcGxldGlvbiBBUEkgQ2hhbmdlKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBjaGFuZ2luZyBob3cgd2UgaGFuZGxlIGNvbW1hbmQgY29tcGxldGlvbiBpbiBpb191cmluZy4gUHJldmlvdXNseSwgYGlvX3VyaW5nX2NtZF9kb25lYCBhbmQgYGlvX3VyaW5nX2NtZF9kb25lMzJgIHRvb2sgdGhlIHJlc3VsdHMgZGlyZWN0bHkgYXMgYXJndW1lbnRzLiBOb3csIHdlJ3JlIHJlcXVpcmVkIHRvIHVzZSBgaW9fdXJpbmdfY21kX3NldF9yZXNgIG9yIGBpb191cmluZ19jbWRfc2V0X3JlczMyYCAqYmVmb3JlKiBjYWxsaW5nIGBpb191cmluZ19jbWRfZG9uZWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIkFyZSB3ZSBpbnRyb2R1Y2luZyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgaGVyZT9cIiBXZSBuZWVkIHRvIGJlIGNhcmVmdWwgd2l0aCBBUEkgY2hhbmdlcyBsaWtlIHRoaXMuXG5cbkkgc2VlIHRoZSBwYXRjaCB0b3VjaGVzIGEgZmFpciBudW1iZXIgb2YgZmlsZXM6IGBibG9jay9pb2N0bC5jYCwgYGRyaXZlcnMvYmxvY2svdWJsa19kcnYuY2AsIGBkcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jYCwgYGRyaXZlcnMvc2NzaS9zY3NpX2JzZy5jYCwgYGZzL2J0cmZzL2lvY3RsLmNgLCBgZnMvZnVzZS9kZXZfdXJpbmcuY2AsIGBpbmNsdWRlL2xpbnV4L2lvX3VyaW5nL2NtZC5oYCwgYW5kIGBpb191cmluZy91cmluZ19jbWQuY2AuIFRoYXQncyBhIHJlYXNvbmFibGUgc3ByZWFkLCBpbmRpY2F0aW5nIHRoaXMgaXMgYSBwb3RlbnRpYWxseSB3aWRlbHktdXNlZCBjaGFuZ2UuXG5cbkxvb2tpbmcgc3BlY2lmaWNhbGx5IGF0IGBpb191cmluZy91cmluZ19jbWQuY2AsIEkgc2VlIHRoZSBuZXcgZnVuY3Rpb25zIGBpb191cmluZ19jbWRfc2V0X3Jlc2AgYW5kIGBpb191cmluZ19jbWRfc2V0X3JlczMyYC4gVGhlc2Ugc2V0IHRoZSByZXN1bHQgKGByZXRgKSBmb3IgYSBnaXZlbiBjb21tYW5kLiBJbnRlcmVzdGluZ2x5LCBpdCBjaGVja3MgaWYgYHJldCBcdTAwM2MgMGAgYW5kIGNhbGxzIGByZXFfc2V0X2ZhaWxgIGlmIHNvLiBUaGVuLCBpdCBjYWxscyBgaW9fcmVxX3NldF9yZXNgIG9yIGBpb19yZXFfc2V0X3JlczMyYC5cblxuTm93LCB0aGF0J3Mgd2hhdCBJIHdhbnQgdG8gc2VlISBUaGUgY3J1Y2lhbCBwYXJ0IGlzIHRoYXQgYGlvX3JlcV9zZXRfcmVzYCBhbmQgYGlvX3JlcV9zZXRfcmVzMzJgIGFyZSBjYWxsZWQgYWZ0ZXIgdGhlIGByZXRgIGNoZWNrLiBNeSBmb2N1cyBoZXJlIGlzIG9uIHVuZGVyc3RhbmRpbmcgcHJlY2lzZWx5IGhvdyB0aG9zZSBgaW9fcmVxX3NldF9yZXNYYCBmdW5jdGlvbnMgaGFuZGxlIHRoZSByZXN1bHQgc2V0dGluZy4gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGltcGxlbWVudGF0aW9uIG9mIHRob3NlIGZ1bmN0aW9ucywgc3BlY2lmaWNhbGx5IGBpb19yZXFfc2V0X3JlczMyYCwgdG8gZW5zdXJlIHRoZSBkYXRhIGlzIGJlaW5nIGhhbmRsZWQgY29ycmVjdGx5IGFuZCB0aGF0IHRoZXJlJ3Mgbm8gd2F5IHdlIGNvdWxkIHBvdGVudGlhbGx5IGJlIGludHJvZHVjaW5nIGFueSB2dWxuZXJhYmlsaXRpZXMgYnkgZmFpbGluZyB0byBpbml0aWFsaXplIHRoZSBtZW1vcnkgb24gY29tbWFuZC4gVGltZSB0byBzZWFyY2ggZm9yIHdoZXJlIHRob3NlIGFyZSBkZWZpbmVkLiBJJ2xsIHVzZSBgZ3JlcHBlcmAgb3IgZXF1aXZhbGVudCB0b29sIHRvIGZpbmQgdGhhdCBkZWZpbml0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MzE2LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTU0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTk6MjM6NTIuMTgxMDQ3OTE4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDY4NzQwNzg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvX3JlcV9zZXRfcmVzMzJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvaW9fdXJpbmcuaD0zMzY9c3RhdGljIGlubGluZSB1MzIgY3R4X2NxZTMyX2ZsYWdzKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4KVxcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuaC0zNDItXFxuaW9fdXJpbmcvaW9fdXJpbmcuaDozNDM6c3RhdGljIGlubGluZSB2b2lkIGlvX3JlcV9zZXRfcmVzMzIoc3RydWN0IGlvX2tpb2NiICpyZXEsIHMzMiByZXMsIHUzMiBjZmxhZ3MsXFxuaW9fdXJpbmcvaW9fdXJpbmcuaC0zNDQtXFx0XFx0XFx0XFx0ICAgIF9fdTY0IGV4dHJhMSwgX191NjQgZXh0cmEyKVxcbi0tXFxuaW9fdXJpbmcvbm9wLmM9NTg9aW50IGlvX25vcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbi0tXFxuaW9fdXJpbmcvbm9wLmMtODAtXFx0aWYgKG5vcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JJTkdfTk9QX0NRRTMyKVxcbmlvX3VyaW5nL25vcC5jOjgxOlxcdFxcdGlvX3JlcV9zZXRfcmVzMzIocmVxLCByZXQsIDAsIG5vcC1cXHUwMDNlZXh0cmExLCBub3AtXFx1MDAzZWV4dHJhMik7XFxuaW9fdXJpbmcvbm9wLmMtODItXFx0ZWxzZVxcbi0tXFxuaW9fdXJpbmcvdXJpbmdfY21kLmM9MTUxPXZvaWQgaW9fdXJpbmdfY21kX3NldF9yZXMzMihzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsIHMzMiByZXQsIHU2NCByZXMyKVxcbi0tXFxuaW9fdXJpbmcvdXJpbmdfY21kLmMtMTU2LVxcdFxcdHJlcV9zZXRfZmFpbChyZXEpO1xcbmlvX3VyaW5nL3VyaW5nX2NtZC5jOjE1NzpcXHRpb19yZXFfc2V0X3JlczMyKHJlcSwgcmV0LCAwLCByZXMyLCAwKTtcXG5pb191cmluZy91cmluZ19jbWQuYy0xNTgtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxOToyMzo1NC42NDk3OTQ3MDVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTM2OTgxMjg2NzM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkV4YW1pbmluZyBpb19yZXFfc2V0X3JlczMyKipcblxuT2theSwgdGltZSB0byBkaXZlIGludG8gdGhpcy4gRmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQncyBoZWFkIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBhbmQgcGlucG9pbnQgdGhlIGV4YWN0IGRlZmluaXRpb24gb2YgYGlvX3JlcV9zZXRfcmVzMzJgLiBJJ2xsIGdvIGRpcmVjdGx5IHRvIGBpb191cmluZy9pb191cmluZy5oYC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbiBwcm90b3R5cGVzIHJlc2lkZS4gTGV0J3Mgc2VlIHdoYXQncyB3aGF0LiBHb3R0YSBiZSBwcmVjaXNlIGhlcmUsIG5vIHJvb20gZm9yIGd1ZXNzd29yayB3aXRoIHRoZXNlIGxvdy1sZXZlbCBpbnRlcmZhY2VzLiBUaW1lIHRvIGxvb2sgdXAgdGhlIGRldGFpbHMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3OTksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxOToyNjoxMS42MzEwODQ4MloiLCJTZXEiOjIwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzExMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpb191cmluZy9pb191cmluZy5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM0MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM0MDpcXHRcXHRyZXR1cm4gMDtcXG4gMzQxOlxcdH1cXG4gMzQyOlxcdFxcbiAzNDM6XFx0c3RhdGljIGlubGluZSB2b2lkIGlvX3JlcV9zZXRfcmVzMzIoc3RydWN0IGlvX2tpb2NiICpyZXEsIHMzMiByZXMsIHUzMiBjZmxhZ3MsXFxuIDM0NDpcXHRcXHRcXHRcXHRcXHQgICAgX191NjQgZXh0cmExLCBfX3U2NCBleHRyYTIpXFxuIDM0NTpcXHR7XFxuIDM0NjpcXHRcXHRyZXEtXFx1MDAzZWNxZS5yZXMgPSByZXM7XFxuIDM0NzpcXHRcXHRyZXEtXFx1MDAzZWNxZS5mbGFncyA9IGNmbGFncyB8IGN0eF9jcWUzMl9mbGFncyhyZXEtXFx1MDAzZWN0eCk7XFxuIDM0ODpcXHRcXHRyZXEtXFx1MDAzZWJpZ19jcWUuZXh0cmExID0gZXh0cmExO1xcbiAzNDk6XFx0XFx0cmVxLVxcdTAwM2ViaWdfY3FlLmV4dHJhMiA9IGV4dHJhMjtcXG4gMzUwOlxcdH1cXG4gMzUxOlxcdFxcbiAzNTI6XFx0c3RhdGljIGlubGluZSB2b2lkICppb191cmluZ19hbGxvY19hc3luY19kYXRhKHN0cnVjdCBpb19hbGxvY19jYWNoZSAqY2FjaGUsXFxuIDM1MzpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgaW9fa2lvY2IgKnJlcSlcXG4gMzU0OlxcdHtcXG4gMzU1OlxcdFxcdGlmIChjYWNoZSkge1xcbiAzNTY6XFx0XFx0XFx0cmVxLVxcdTAwM2Vhc3luY19kYXRhID0gaW9fY2FjaGVfYWxsb2MoY2FjaGUsIEdGUF9LRVJORUwpO1xcbiAzNTc6XFx0XFx0fSBlbHNlIHtcXG4gMzU4OlxcdFxcdFxcdGNvbnN0IHN0cnVjdCBpb19pc3N1ZV9kZWYgKmRlZiA9IFxcdTAwMjZpb19pc3N1ZV9kZWZzW3JlcS1cXHUwMDNlb3Bjb2RlXTtcXG4gMzU5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxOToyNjoxMS42MzExNjMzNVoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjI5NzAwMDI0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWZhY3RvcmluZyBpb191cmluZ19jbWRfZG9uZTogQSBEZWVwIERpdmUgaW50byBNZW1vcnkgU2FmZXR5KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gbG9va2luZyBhdCBhIHJlZmFjdG9yaW5nIG9mIHRoZSBgaW9fdXJpbmdfY21kX2RvbmVgIEFQSSwgYW5kIG15IHByaW1hcnkgY29uY2VybiwgYXMgYWx3YXlzLCBpcyBtZW1vcnkgc2FmZXR5IGFuZCBjb3JyZWN0bmVzcy4gVGhlIG9sZCBjb2RlIGhhZCBhIGNvbWJpbmVkIGZ1bmN0aW9uLCBgX19pb191cmluZ19jbWRfZG9uZWAsIHdoaWNoIHNldCB0aGUgcmVzdWx0LCBmbGFncywgYW5kIGV4dHJhIGZpZWxkcyBvZiB0aGUgY29tcGxldGlvbiBxdWV1ZSBlbnRyeSAoQ1FFKS4gVGhlIG5ldyBjb2RlLCBgaW9fdXJpbmdfY21kX3NldF9yZXMzMmAsIGFwcGVhcnMgdG8gYmUgYSBjbGVhbmVyIHNlcGFyYXRpb24gb2YgY29uY2VybnMuXG5cbkluaXRpYWxseSwgSSBoYWQgYSBodW5jaCBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeS4gSW4gdGhlIG9sZCBjb2RlLCBgX19pb191cmluZ19jbWRfZG9uZWAgZmlyc3Qgc2V0IHRoZSBDUUUgZmxhZ3MgdG8gYDBgIGFuZCBjb25kaXRpb25hbGx5IHNldCB0aGUgYElPUklOR19DUUVfRl8zMmAgZmxhZyBiYXNlZCBvbiBgSU9SSU5HX1NFVFVQX0NRRV9NSVhFRGAuIFRoZSBuZXcgYGlvX3JlcV9zZXRfcmVzMzJgLCBob3dldmVyLCBpbW1lZGlhdGVseSBzZXRzIGByZXEtXHUwMDNlY3FlLmZsYWdzYCB0byBgY2ZsYWdzIHwgY3R4X2NxZTMyX2ZsYWdzKHJlcS1cdTAwM2VjdHgpYC4gQWZ0ZXIgYSBxdWljayBjaGVjaywgSSByZWFsaXplZCB0aGF0IGBjdHhfY3FlMzJfZmxhZ3NgIGFjaGlldmVzIHRoZSBzYW1lIHJlc3VsdCBhcyB0aGUgb2xkIGNvbmRpdGlvbmFsOiBhZGRpbmcgdGhlIGBJT1JJTkdfQ1FFX0ZfMzJgIGZsYWcgaWYgYElPUklOR19TRVRVUF9DUUVfTUlYRURgIGlzIHNldCBpbiB0aGUgY29udGV4dC4gU28sIHRoZSBmbGFnIHNldHRpbmcgaXMgZXF1aXZhbGVudCwgd2hpY2ggaXMgZ3JlYXQuXG5cbkknbSB2ZXJpZnlpbmcgdGhhdCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3IgbWVtb3J5IGxlYWtzIGhlcmUuIFRoZSBgaW9fdXJpbmdfY21kX3NldF9yZXMzMmAgYWxzbyBzZXRzIHRoZSBgZXh0cmExYCBhbmQgYGV4dHJhMmAgZmllbGRzLiAgSW4gdGhlIGV4YW1wbGUgdXNhZ2VzIG9mIGBpb191cmluZ19jbWRfc2V0X3JlczMyYCAoaW4gYG52bWVfdXJpbmdfY21kX2VuZF9pb2AgYW5kIGBzY3NpX2JzZ191cmluZ190YXNrX2NiYCksIHRoZSBgZXh0cmExYCBpcyBwYXNzZWQgaW4gYXMgYHJlczJgLCB3aGljaCBpcyBleHBsaWNpdGx5IGFzc2lnbmVkLiBgZXh0cmEyYCBpcyBzZXQgdG8gYDBgIGluIGBpb19yZXFfc2V0X3JlczMyYC4gU28sIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCB3aGljaCBpcyBleGFjdGx5IHdoYXQgSSB3YXMgaG9waW5nIHRvIHNlZS5cblxuU2luY2UgdGhpcyBpcyBwdXJlbHkgYSByZWZhY3RvcmluZywgaXQncyBub3QgaW50cm9kdWNpbmcgYW55IG5ldyB1c2VyLXNwYWNlIHN0cnVjdHVyZXMgb3IgY2hhbmdpbmcgYW55IGJvdW5kcyBjaGVja3MuIFRoaXMgaXMgZ29vZCBuZXdzLCBhcyBpdCBtaW5pbWl6ZXMgdGhlIHJpc2sgb2YgaW50cm9kdWNpbmcgc3VidGxlIGJ1Z3Mgb3IgdnVsbmVyYWJpbGl0aWVzLiBCZWNhdXNlIG9mIHRoZSBjb2RlIHJldmlldywgSSdtIGNvbmZpZGVudCB0aGF0IHRoZXNlIGNoYW5nZXMgYXJlIHNhZmUuIEkgd2lsbCBtYXJrIGBOZWVkc0tNU0FOPWZhbHNlYCBhcyB0aGUgY29kZSBpcyBzYWZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MzQ1LCJPdXRwdXRUb2tlbnMiOjE5NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMDEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxOToyNjoyNy45MjgxNjc0MTlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjMxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgYGlvX3VyaW5nX2NtZF9kb25lYCBBUEkgYnkgc3BsaXR0aW5nIGl0IGludG8gYGlvX3VyaW5nX2NtZF9zZXRfcmVzYC9gaW9fdXJpbmdfY21kX3NldF9yZXMzMmAgYW5kIGBpb191cmluZ19jbWRfZG9uZWAuIFRoZSB2YWx1ZXMgcGFzc2VkIHRvIHRoZXNlIGZ1bmN0aW9ucyByZW1haW4gdGhlIHNhbWUgYXMgYmVmb3JlLCBhbmQgYWxsIGZpZWxkcyBpbiB0aGUgY29tcGxldGlvbiBxdWV1ZSBlbnRyeSAoQ1FFKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCAoZS5nLiwgYGV4dHJhMmAgaXMgc2V0IHRvIDAgaW4gYGlvX3JlcV9zZXRfcmVzMzJgKS4gVGhlcmUgYXJlIG5vIG5ldyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm8gY2hhbmdlcyB0byBib3VuZHMgY2hlY2tpbmcsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2guIEFueSBwb3RlbnRpYWwgYnVncyB3b3VsZCBiZSBsb2dpYyBlcnJvcnMgb3IgdXNlLWFmdGVyLWZyZWUvb3V0LW9mLWJvdW5kcyBpc3N1ZXMsIHdoaWNoIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgS0FTQU4gYW5kIG90aGVyIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBgaW9fdXJpbmdfY21kX2RvbmVgIEFQSSBieSBzcGxpdHRpbmcgaXQgaW50byBgaW9fdXJpbmdfY21kX3NldF9yZXNgL2Bpb191cmluZ19jbWRfc2V0X3JlczMyYCBhbmQgYGlvX3VyaW5nX2NtZF9kb25lYC4gVGhlIHZhbHVlcyBwYXNzZWQgdG8gdGhlc2UgZnVuY3Rpb25zIHJlbWFpbiB0aGUgc2FtZSBhcyBiZWZvcmUsIGFuZCBhbGwgZmllbGRzIGluIHRoZSBjb21wbGV0aW9uIHF1ZXVlIGVudHJ5IChDUUUpIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIChlLmcuLCBgZXh0cmEyYCBpcyBzZXQgdG8gMCBpbiBgaW9fcmVxX3NldF9yZXMzMmApLiBUaGVyZSBhcmUgbm8gbmV3IHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBubyBjaGFuZ2VzIHRvIGJvdW5kcyBjaGVja2luZywgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaC4gQW55IHBvdGVudGlhbCBidWdzIHdvdWxkIGJlIGxvZ2ljIGVycm9ycyBvciB1c2UtYWZ0ZXItZnJlZS9vdXQtb2YtYm91bmRzIGlzc3Vlcywgd2hpY2ggYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBLQVNBTiBhbmQgb3RoZXIgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowrxhjx[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-27 19:01:57 +0000 UTC FinishedAt: 2026-08-27 19:26:29 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "44e96e364b04163ddddc8a24289cef4982b7e36e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING", "BLK_DEV_UBLK", "NVME_CORE", "BLK_DEV_NVME", "BLK_DEV_BSG", "BTRFS_FS", "FUSE_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "44e96e364b04163ddddc8a24289cef4982b7e36e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING", "BLK_DEV_UBLK", "NVME_CORE", "BLK_DEV_NVME", "BLK_DEV_BSG", "BTRFS_FS", "FUSE_FS" ], "series_id": "b53398fb-99bd-4448-a2a5-1c3e8e9daa8c" }, "track": "KASAN", "fuzz": { "focus": [ "fs", "io_uring" ], "focus_symbols": [ "io_uring_cmd_set_res", "io_uring_cmd_set_res32", "io_uring_cmd_done" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDE5OjIyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDssCiAgICAmIzM0O0JMS19ERVZfVUJMSyYjMzQ7LAogICAgJiMzNDtOVk1FX0NPUkUmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9OVk1FJiMzNDssCiAgICAmIzM0O0JMS19ERVZfQlNHJiMzNDssCiAgICAmIzM0O0JUUkZTX0ZTJiMzNDssCiAgICAmIzM0O0ZVU0VfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb191cmluZ19jbWRfc2V0X3JlcyYjMzQ7LAogICAgJiMzNDtpb191cmluZ19jbWRfc2V0X3JlczMyJiMzNDssCiAgICAmIzM0O2lvX3VyaW5nX2NtZF9kb25lJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBgaW9fdXJpbmdfY21kX2RvbmVgIEFQSSBieSBzcGxpdHRpbmcgaXQgaW50byBgaW9fdXJpbmdfY21kX3NldF9yZXNgL2Bpb191cmluZ19jbWRfc2V0X3JlczMyYCBhbmQgYGlvX3VyaW5nX2NtZF9kb25lYC4gVGhlIHZhbHVlcyBwYXNzZWQgdG8gdGhlc2UgZnVuY3Rpb25zIHJlbWFpbiB0aGUgc2FtZSBhcyBiZWZvcmUsIGFuZCBhbGwgZmllbGRzIGluIHRoZSBjb21wbGV0aW9uIHF1ZXVlIGVudHJ5IChDUUUpIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIChlLmcuLCBgZXh0cmEyYCBpcyBzZXQgdG8gMCBpbiBgaW9fcmVxX3NldF9yZXMzMmApLiBUaGVyZSBhcmUgbm8gbmV3IHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBubyBjaGFuZ2VzIHRvIGJvdW5kcyBjaGVja2luZywgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaC4gQW55IHBvdGVudGlhbCBidWdzIHdvdWxkIGJlIGxvZ2ljIGVycm9ycyBvciB1c2UtYWZ0ZXItZnJlZS9vdXQtb2YtYm91bmRzIGlzc3Vlcywgd2hpY2ggYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBLQVNBTiBhbmQgb3RoZXIgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgaW9fdXJpbmcgY29tbWFuZCBBUEkgYnkgc3BsaXR0aW5nIGBpb191cmluZ19jbWRfZG9uZWAgaW50byBgaW9fdXJpbmdfY21kX3NldF9yZXNgIChvciBgaW9fdXJpbmdfY21kX3NldF9yZXMzMmApIGFuZCBgaW9fdXJpbmdfY21kX2RvbmVgLiBUaGlzIGFmZmVjdHMgaG93IHJlc3VsdHMgYXJlIHJldHVybmVkIGZvciBpb191cmluZyBjb21tYW5kcyBhY3Jvc3MgbXVsdGlwbGUgc3Vic3lzdGVtcyBpbmNsdWRpbmcgYmxvY2ssIHVibGssIG52bWUsIHNjc2kgYnNnLCBidHJmcywgYW5kIGZ1c2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBrZXJuZWwgQVBJIGFuZCBpdHMgY2FsbGVycywgd2hpY2ggaXMgd29ydGggZnV6emluZyB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgaW5jb3JyZWN0IHJlc3VsdCBoYW5kbGluZyBhcmUgaW50cm9kdWNlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxOToyMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDM1ZjZjMWNkNWJjOWY3OWQ3N2M4NWY2YjFmNjhhYzNmNmYxYWEyYzNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAyNyAxOToyMjozMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9ibG9jay9pb2N0bC5jIGIvYmxvY2svaW9jdGwuY1xuaW5kZXggNjRiNGU2YzBmNjk2NS4uOTQ2Y2FiNzRmMjUzZSAxMDA2NDRcbi0tLSBhL2Jsb2NrL2lvY3RsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL2lvY3RsLmNcbkBAIC04NzEsOSAmIzQzOzg3MSwxMCBAQCBzdGF0aWMgdm9pZCBibGtfY21kX2NvbXBsZXRlKHN0cnVjdCBpb190d19yZXEgdHdfcmVxLCBpb190d190b2tlbl90IHR3KVxuIFxuIFx0aWYgKGJpYy1cdTAwM2VyZXMgPT0gLUVBR0FJTiBcdTAwMjZcdTAwMjYgYmljLVx1MDAzZW5vd2FpdClcbiBcdFx0aW9fdXJpbmdfY21kX2lzc3VlX2Jsb2NraW5nKGNtZCk7XG4tXHRlbHNlXG4tXHRcdGlvX3VyaW5nX2NtZF9kb25lKGNtZCwgYmljLVx1MDAzZXJlcyxcbi1cdFx0XHRcdCAgSU9fVVJJTkdfQ01EX1RBU0tfV09SS19JU1NVRV9GTEFHUyk7XG4mIzQzO1x0ZWxzZSB7XG4mIzQzO1x0XHRpb191cmluZ19jbWRfc2V0X3JlcyhjbWQsIGJpYy1cdTAwM2VyZXMpO1xuJiM0MztcdFx0aW9fdXJpbmdfY21kX2RvbmUoY21kLCBJT19VUklOR19DTURfVEFTS19XT1JLX0lTU1VFX0ZMQUdTKTtcbiYjNDM7XHR9XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGJpb19jbWRfYmlvX2VuZF9pbyhzdHJ1Y3QgYmlvICpiaW8pXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay91YmxrX2Rydi5jIGIvZHJpdmVycy9ibG9jay91YmxrX2Rydi5jXG5pbmRleCA0ZDE3ZWQyNjRkYTFhLi41MWYxNWU1YjNjMDFkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibG9jay91YmxrX2Rydi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmNcbkBAIC04MzksNyAmIzQzOzgzOSw4IEBAIHN0YXRpYyB2b2lkIHVibGtfYmF0Y2hfZGVpbml0X2ZldGNoX2J1ZihzdHJ1Y3QgdWJsa19xdWV1ZSAqdWJxLFxuIFx0X191YmxrX3JlbGVhc2VfZmNtZCh1YnEpO1xuIFx0c3Bpbl91bmxvY2soXHUwMDI2dWJxLVx1MDAzZWV2dHNfbG9jayk7XG4gXG4tXHRpb191cmluZ19jbWRfZG9uZShmY21kLVx1MDAzZWNtZCwgcmVzLCBkYXRhLVx1MDAzZWlzc3VlX2ZsYWdzKTtcbiYjNDM7XHRpb191cmluZ19jbWRfc2V0X3JlcyhmY21kLVx1MDAzZWNtZCwgcmVzKTtcbiYjNDM7XHRpb191cmluZ19jbWRfZG9uZShmY21kLVx1MDAzZWNtZCwgZGF0YS1cdTAwM2Vpc3N1ZV9mbGFncyk7XG4gXHR1YmxrX2JhdGNoX2ZyZWVfZmNtZChmY21kKTtcbiB9XG4gXG5AQCAtMTY0Miw3ICYjNDM7MTY0Myw4IEBAIHN0YXRpYyB2b2lkIHVibGtfY29tcGxldGVfaW9fY21kKHN0cnVjdCB1YmxrX2lvICppbywgc3RydWN0IHJlcXVlc3QgKnJlcSxcbiBcdHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCA9IF9fdWJsa19wcmVwX2NvbXBsX2lvX2NtZChpbywgcmVxKTtcbiBcbiBcdC8qIHRlbGwgdWJsa3NydiBvbmUgaW8gcmVxdWVzdCBpcyBjb21pbmcgKi9cbi1cdGlvX3VyaW5nX2NtZF9kb25lKGNtZCwgcmVzLCBpc3N1ZV9mbGFncyk7XG4mIzQzO1x0aW9fdXJpbmdfY21kX3NldF9yZXMoY21kLCByZXMpO1xuJiM0MztcdGlvX3VyaW5nX2NtZF9kb25lKGNtZCwgaXNzdWVfZmxhZ3MpO1xuIH1cbiBcbiAjZGVmaW5lIFVCTEtfUkVRVUVVRV9ERUxBWV9NU1x0M1xuQEAgLTE3MjgsNyAmIzQzOzE3MzAsOCBAQCBzdGF0aWMgdm9pZCB1YmxrX2F1dG9fYnVmX2Rpc3BhdGNoKGNvbnN0IHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEsXG4gXG4gXHRpZiAocmVzICE9IEFVVE9fQlVGX1JFR19GQUlMKSB7XG4gXHRcdHVibGtfYXV0b19idWZfaW9fc2V0dXAodWJxLCByZXEsIGlvLCBjbWQsIHJlcyk7XG4tXHRcdGlvX3VyaW5nX2NtZF9kb25lKGNtZCwgVUJMS19JT19SRVNfT0ssIGlzc3VlX2ZsYWdzKTtcbiYjNDM7XHRcdGlvX3VyaW5nX2NtZF9zZXRfcmVzKGNtZCwgVUJMS19JT19SRVNfT0spO1xuJiM0MztcdFx0aW9fdXJpbmdfY21kX2RvbmUoY21kLCBpc3N1ZV9mbGFncyk7XG4gXHR9XG4gfVxuIFxuQEAgLTI3ODksOCAmIzQzOzI3OTIsMTAgQEAgc3RhdGljIHZvaWQgdWJsa19jYW5jZWxfY21kKHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEsIHUxNiB0YWcsXG4gXHR9XG4gXHRzcGluX3VubG9jayhcdTAwMjZ1YnEtXHUwMDNlY2FuY2VsX2xvY2spO1xuIFxuLVx0aWYgKCFkb25lIFx1MDAyNlx1MDAyNiBjbWQpXG4tXHRcdGlvX3VyaW5nX2NtZF9kb25lKGNtZCwgVUJMS19JT19SRVNfQUJPUlQsIGlzc3VlX2ZsYWdzKTtcbiYjNDM7XHRpZiAoIWRvbmUgXHUwMDI2XHUwMDI2IGNtZCkge1xuJiM0MztcdFx0aW9fdXJpbmdfY21kX3NldF9yZXMoY21kLCBVQkxLX0lPX1JFU19BQk9SVCk7XG4mIzQzO1x0XHRpb191cmluZ19jbWRfZG9uZShjbWQsIGlzc3VlX2ZsYWdzKTtcbiYjNDM7XHR9XG4gfVxuIFxuIC8qXG5AQCAtMjgxNiw3ICYjNDM7MjgyMSw4IEBAIHN0YXRpYyB2b2lkIHVibGtfYmF0Y2hfY2FuY2VsX2NtZChzdHJ1Y3QgdWJsa19xdWV1ZSAqdWJxLFxuIFx0c3Bpbl91bmxvY2soXHUwMDI2dWJxLVx1MDAzZWV2dHNfbG9jayk7XG4gXG4gXHRpZiAoZG9uZSkge1xuLVx0XHRpb191cmluZ19jbWRfZG9uZShmY21kLVx1MDAzZWNtZCwgVUJMS19JT19SRVNfQUJPUlQsIGlzc3VlX2ZsYWdzKTtcbiYjNDM7XHRcdGlvX3VyaW5nX2NtZF9zZXRfcmVzKGZjbWQtXHUwMDNlY21kLCBVQkxLX0lPX1JFU19BQk9SVCk7XG4mIzQzO1x0XHRpb191cmluZ19jbWRfZG9uZShmY21kLVx1MDAzZWNtZCwgaXNzdWVfZmxhZ3MpO1xuIFx0XHR1YmxrX2JhdGNoX2ZyZWVfZmNtZChmY21kKTtcbiBcdH1cbiB9XG5AQCAtMzUyNiw4ICYjNDM7MzUzMiwxMCBAQCBzdGF0aWMgdm9pZCB1YmxrX2NoX3VyaW5nX2NtZF9jYihzdHJ1Y3QgaW9fdHdfcmVxIHR3X3JlcSwgaW9fdHdfdG9rZW5fdCB0dylcbiBcbiBcdGlmICghdHcuY2FuY2VsKVxuIFx0XHRyZXQgPSB1YmxrX2NoX3VyaW5nX2NtZF9sb2NhbChjbWQsIGlzc3VlX2ZsYWdzKTtcbi1cdGlmIChyZXQgIT0gLUVJT0NCUVVFVUVEKVxuLVx0XHRpb191cmluZ19jbWRfZG9uZShjbWQsIHJldCwgaXNzdWVfZmxhZ3MpO1xuJiM0MztcdGlmIChyZXQgIT0gLUVJT0NCUVVFVUVEKSB7XG4mIzQzO1x0XHRpb191cmluZ19jbWRfc2V0X3JlcyhjbWQsIHJldCk7XG4mIzQzO1x0XHRpb191cmluZ19jbWRfZG9uZShjbWQsIGlzc3VlX2ZsYWdzKTtcbiYjNDM7XHR9XG4gfVxuIFxuIHN0YXRpYyBpbnQgdWJsa19jaF91cmluZ19jbWQoc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL2hvc3QvaW9jdGwuYyBiL2RyaXZlcnMvbnZtZS9ob3N0L2lvY3RsLmNcbmluZGV4IDY1MzlkNDc1MDA5ODYuLmI1MGJiYTIwNzgxOGIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jXG5AQCAtNDIzLDggJiM0Mzs0MjMsNiBAQCBzdHJ1Y3QgbnZtZV91cmluZ19kYXRhIHtcbiBzdHJ1Y3QgbnZtZV91cmluZ19jbWRfcGR1IHtcbiBcdHN0cnVjdCByZXF1ZXN0ICpyZXE7XG4gXHRzdHJ1Y3QgYmlvICpiaW87XG4tXHR1NjQgcmVzdWx0O1xuLVx0aW50IHN0YXR1cztcbiB9O1xuIFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IG52bWVfdXJpbmdfY21kX3BkdSAqbnZtZV91cmluZ19jbWRfcGR1KFxuQEAgLTQ0MCw4ICYjNDM7NDM4LDcgQEAgc3RhdGljIHZvaWQgbnZtZV91cmluZ190YXNrX2NiKHN0cnVjdCBpb190d19yZXEgdHdfcmVxLCBpb190d190b2tlbl90IHR3KVxuIFxuIFx0aWYgKHBkdS1cdTAwM2ViaW8pXG4gXHRcdGJsa19ycV91bm1hcF91c2VyKHBkdS1cdTAwM2ViaW8pO1xuLVx0aW9fdXJpbmdfY21kX2RvbmUzMihpb3VjbWQsIHBkdS1cdTAwM2VzdGF0dXMsIHBkdS1cdTAwM2VyZXN1bHQsXG4tXHRcdFx0ICAgIElPX1VSSU5HX0NNRF9UQVNLX1dPUktfSVNTVUVfRkxBR1MpO1xuJiM0MztcdGlvX3VyaW5nX2NtZF9kb25lKGlvdWNtZCwgSU9fVVJJTkdfQ01EX1RBU0tfV09SS19JU1NVRV9GTEFHUyk7XG4gfVxuIFxuIHN0YXRpYyBlbnVtIHJxX2VuZF9pb19yZXQgbnZtZV91cmluZ19jbWRfZW5kX2lvKHN0cnVjdCByZXF1ZXN0ICpyZXEsXG5AQCAtNDUwLDE1ICYjNDM7NDQ3LDE3IEBAIHN0YXRpYyBlbnVtIHJxX2VuZF9pb19yZXQgbnZtZV91cmluZ19jbWRfZW5kX2lvKHN0cnVjdCByZXF1ZXN0ICpyZXEsXG4ge1xuIFx0c3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y21kID0gcmVxLVx1MDAzZWVuZF9pb19kYXRhO1xuIFx0c3RydWN0IG52bWVfdXJpbmdfY21kX3BkdSAqcGR1ID0gbnZtZV91cmluZ19jbWRfcGR1KGlvdWNtZCk7XG4mIzQzO1x0dTY0IHJlc3VsdCA9IGxlNjRfdG9fY3B1KG52bWVfcmVxKHJlcSktXHUwMDNlcmVzdWx0LnU2NCk7XG4mIzQzO1x0aW50IHN0YXR1cztcbiBcbiBcdGlmIChudm1lX3JlcShyZXEpLVx1MDAzZWZsYWdzIFx1MDAyNiBOVk1FX1JFUV9DQU5DRUxMRUQpIHtcbi1cdFx0cGR1LVx1MDAzZXN0YXR1cyA9IC1FSU5UUjtcbiYjNDM7XHRcdHN0YXR1cyA9IC1FSU5UUjtcbiBcdH0gZWxzZSB7XG4tXHRcdHBkdS1cdTAwM2VzdGF0dXMgPSBudm1lX3JlcShyZXEpLVx1MDAzZXN0YXR1cztcbi1cdFx0aWYgKCFwZHUtXHUwMDNlc3RhdHVzKVxuLVx0XHRcdHBkdS1cdTAwM2VzdGF0dXMgPSBibGtfc3RhdHVzX3RvX2Vycm5vKGVycik7XG4mIzQzO1x0XHRzdGF0dXMgPSBudm1lX3JlcShyZXEpLVx1MDAzZXN0YXR1cztcbiYjNDM7XHRcdGlmICghc3RhdHVzKVxuJiM0MztcdFx0XHRzdGF0dXMgPSBibGtfc3RhdHVzX3RvX2Vycm5vKGVycik7XG4gXHR9XG4tXHRwZHUtXHUwMDNlcmVzdWx0ID0gbGU2NF90b19jcHUobnZtZV9yZXEocmVxKS1cdTAwM2VyZXN1bHQudTY0KTtcbiYjNDM7XHRpb191cmluZ19jbWRfc2V0X3JlczMyKGlvdWNtZCwgc3RhdHVzLCByZXN1bHQpO1xuIFxuIFx0LypcbiBcdCAqIEZvciBJT1BPTEwsIGNoZWNrIGlmIHRoaXMgY29tcGxldGlvbiBpcyBoYXBwZW5pbmcgaW4gdGhlIGNvbnRleHRcbkBAIC00NzEsNyAmIzQzOzQ3MCw3IEBAIHN0YXRpYyBlbnVtIHJxX2VuZF9pb19yZXQgbnZtZV91cmluZ19jbWRfZW5kX2lvKHN0cnVjdCByZXF1ZXN0ICpyZXEsXG4gXHQgICAgaW9iLVx1MDAzZXBvbGxfY3R4ID09IGlvX3VyaW5nX2NtZF9jdHhfaGFuZGxlKGlvdWNtZCkpIHtcbiBcdFx0aWYgKHBkdS1cdTAwM2ViaW8pXG4gXHRcdFx0YmxrX3JxX3VubWFwX3VzZXIocGR1LVx1MDAzZWJpbyk7XG4tXHRcdGlvX3VyaW5nX2NtZF9kb25lMzIoaW91Y21kLCBwZHUtXHUwMDNlc3RhdHVzLCBwZHUtXHUwMDNlcmVzdWx0LCAwKTtcbiYjNDM7XHRcdGlvX3VyaW5nX2NtZF9kb25lKGlvdWNtZCwgMCk7XG4gXHR9IGVsc2Uge1xuIFx0XHRpb191cmluZ19jbWRfZG9faW5fdGFza19sYXp5KGlvdWNtZCwgbnZtZV91cmluZ190YXNrX2NiKTtcbiBcdH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9ic2cuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX2JzZy5jXG5pbmRleCBlODBkZWM1MzE3NGVhLi44YjMyZDhlOGYyOWY5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfYnNnLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvc2NzaS9zY3NpX2JzZy5jXG5AQCAtNjAsOCAmIzQzOzYwLDggQEAgc3RhdGljIHZvaWQgc2NzaV9ic2dfdXJpbmdfdGFza19jYihzdHJ1Y3QgaW9fdHdfcmVxIHR3X3JlcSwgaW9fdHdfdG9rZW5fdCB0dylcbiBcdFx0XHRcdCAgc2NtZC1cdTAwM2VyZXNpZF9sZW4pO1xuIFxuIFx0YmxrX21xX2ZyZWVfcmVxdWVzdChycSk7XG4tXHRpb191cmluZ19jbWRfZG9uZTMyKGlvdWNtZCwgcmV0LCByZXMyLFxuLVx0XHRcdCAgICBJT19VUklOR19DTURfVEFTS19XT1JLX0lTU1VFX0ZMQUdTKTtcbiYjNDM7XHRpb191cmluZ19jbWRfc2V0X3JlczMyKGlvdWNtZCwgcmV0LCByZXMyKTtcbiYjNDM7XHRpb191cmluZ19jbWRfZG9uZShpb3VjbWQsIElPX1VSSU5HX0NNRF9UQVNLX1dPUktfSVNTVUVfRkxBR1MpO1xuIH1cbiBcbiBzdGF0aWMgZW51bSBycV9lbmRfaW9fcmV0IHNjc2lfYnNnX3VyaW5nX2NtZF9kb25lKHN0cnVjdCByZXF1ZXN0ICpyZXEsXG5kaWZmIC0tZ2l0IGEvZnMvYnRyZnMvaW9jdGwuYyBiL2ZzL2J0cmZzL2lvY3RsLmNcbmluZGV4IDcyYmM5ZDRmNzcwODcuLjA3MDU3YTcwODQ1MjkgMTAwNjQ0XG4tLS0gYS9mcy9idHJmcy9pb2N0bC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9idHJmcy9pb2N0bC5jXG5AQCAtNDYyMSw3ICYjNDM7NDYyMSw4IEBAIHN0YXRpYyB2b2lkIGJ0cmZzX3VyaW5nX3JlYWRfZmluaXNoZWQoc3RydWN0IGlvX3R3X3JlcSB0d19yZXEsIGlvX3R3X3Rva2VuX3QgdHcpXG4gXHRidHJmc191bmxvY2tfZXh0ZW50KGlvX3RyZWUsIHByaXYtXHUwMDNlc3RhcnQsIHByaXYtXHUwMDNlbG9ja2VuZCwgXHUwMDI2cHJpdi1cdTAwM2VjYWNoZWRfc3RhdGUpO1xuIFx0YnRyZnNfaW5vZGVfdW5sb2NrKGlub2RlLCBCVFJGU19JTE9DS19TSEFSRUQpO1xuIFxuLVx0aW9fdXJpbmdfY21kX2RvbmUoY21kLCByZXQsIElPX1VSSU5HX0NNRF9UQVNLX1dPUktfSVNTVUVfRkxBR1MpO1xuJiM0MztcdGlvX3VyaW5nX2NtZF9zZXRfcmVzKGNtZCwgcmV0KTtcbiYjNDM7XHRpb191cmluZ19jbWRfZG9uZShjbWQsIElPX1VSSU5HX0NNRF9UQVNLX1dPUktfSVNTVUVfRkxBR1MpO1xuIFx0YWRkX3JjaGFyKGN1cnJlbnQsIHJldCk7XG4gXG4gXHRmb3IgKGluZGV4ID0gMDsgaW5kZXggXHUwMDNjIHByaXYtXHUwMDNlbnJfcGFnZXM7IGluZGV4JiM0MzsmIzQzOylcbmRpZmYgLS1naXQgYS9mcy9mdXNlL2Rldl91cmluZy5jIGIvZnMvZnVzZS9kZXZfdXJpbmcuY1xuaW5kZXggNzdjOGNlYzQzZDljNi4uYzViYjUwMTgzZTFjNiAxMDA2NDRcbi0tLSBhL2ZzL2Z1c2UvZGV2X3VyaW5nLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Z1c2UvZGV2X3VyaW5nLmNcbkBAIC0zNjYsOCAmIzQzOzM2NiwxMCBAQCBzdGF0aWMgdm9pZCBmdXNlX3VyaW5nX2VudHJ5X3RlYXJkb3duKHN0cnVjdCBmdXNlX3JpbmdfZW50ICplbnQpXG4gXHRlbnQtXHUwMDNlc3RhdGUgPSBGUlJTX1JFTEVBU0VEO1xuIFx0c3Bpbl91bmxvY2soXHUwMDI2cXVldWUtXHUwMDNlbG9jayk7XG4gXG4tXHRpZiAoY21kKVxuLVx0XHRpb191cmluZ19jbWRfZG9uZShjbWQsIC1FTk9UQ09OTiwgSU9fVVJJTkdfRl9VTkxPQ0tFRCk7XG4mIzQzO1x0aWYgKGNtZCkge1xuJiM0MztcdFx0aW9fdXJpbmdfY21kX3NldF9yZXMoY21kLCAtRU5PVENPTk4pO1xuJiM0MztcdFx0aW9fdXJpbmdfY21kX2RvbmUoY21kLCBJT19VUklOR19GX1VOTE9DS0VEKTtcbiYjNDM7XHR9XG4gXG4gXHRpZiAocmVxKVxuIFx0XHRmdXNlX3VyaW5nX3N0b3BfZnVzZV9yZXFfZW5kKHJlcSk7XG5AQCAtNTMxLDcgJiM0Mzs1MzMsOCBAQCBzdGF0aWMgdm9pZCBmdXNlX3VyaW5nX2NhbmNlbChzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsXG4gXG4gXHRpZiAobmVlZF9jbWRfZG9uZSkge1xuIFx0XHQvKiBubyBxdWV1ZSBsb2NrIHRvIGF2b2lkIGxvY2sgb3JkZXIgaXNzdWVzICovXG4tXHRcdGlvX3VyaW5nX2NtZF9kb25lKGNtZCwgLUVOT1RDT05OLCBpc3N1ZV9mbGFncyk7XG4mIzQzO1x0XHRpb191cmluZ19jbWRfc2V0X3JlcyhjbWQsIC1FTk9UQ09OTik7XG4mIzQzO1x0XHRpb191cmluZ19jbWRfZG9uZShjbWQsIGlzc3VlX2ZsYWdzKTtcbiBcdFx0a2ZyZWUoZW50KTtcbiBcdFx0aWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoXHUwMDI2cXVldWUtXHUwMDNlcmluZy1cdTAwM2VxdWV1ZV9yZWZzKSlcbiBcdFx0XHR3YWtlX3VwX2FsbChcdTAwMjZxdWV1ZS1cdTAwM2VyaW5nLVx1MDAzZXN0b3Bfd2FpdHEpO1xuQEAgLTk0Miw3ICYjNDM7OTQ1LDggQEAgc3RhdGljIHZvaWQgZnVzZV91cmluZ19zZW5kKHN0cnVjdCBmdXNlX3JpbmdfZW50ICplbnQsIHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCxcbiBcdGZ1c2VfdXJpbmdfYWRkX3RvX3BxKGVudCk7XG4gXHRzcGluX3VubG9jayhcdTAwMjZxdWV1ZS1cdTAwM2Vsb2NrKTtcbiBcbi1cdGlvX3VyaW5nX2NtZF9kb25lKGNtZCwgcmV0LCBpc3N1ZV9mbGFncyk7XG4mIzQzO1x0aW9fdXJpbmdfY21kX3NldF9yZXMoY21kLCByZXQpO1xuJiM0MztcdGlvX3VyaW5nX2NtZF9kb25lKGNtZCwgaXNzdWVfZmxhZ3MpO1xuIH1cbiBcbiAvKiBGVVNFX1VSSU5HX0NNRF9DT01NSVRfQU5EX0ZFVENIIGhhbmRsZXIgKi9cbkBAIC0xMzA5LDcgJiM0MzsxMzEzLDggQEAgc3RhdGljIHZvaWQgZnVzZV91cmluZ19zZW5kX2luX3Rhc2soc3RydWN0IGlvX3R3X3JlcSB0d19yZXEsIGlvX3R3X3Rva2VuX3QgdHcpXG4gXHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2ZW50LVx1MDAzZWxpc3QpO1xuIFx0XHRzcGluX3VubG9jayhcdTAwMjZxdWV1ZS1cdTAwM2Vsb2NrKTtcbiBcbi1cdFx0aW9fdXJpbmdfY21kX2RvbmUoY21kLCBlcnIsIGlzc3VlX2ZsYWdzKTtcbiYjNDM7XHRcdGlvX3VyaW5nX2NtZF9zZXRfcmVzKGNtZCwgZXJyKTtcbiYjNDM7XHRcdGlvX3VyaW5nX2NtZF9kb25lKGNtZCwgaXNzdWVfZmxhZ3MpO1xuIFxuIFx0XHRmdXNlX3VyaW5nX3JlcV9lbmQoZW50LCBlbnQtXHUwMDNlZnVzZV9yZXEsIGVycik7XG4gXHRcdGtmcmVlKGVudCk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pb191cmluZy9jbWQuaCBiL2luY2x1ZGUvbGludXgvaW9fdXJpbmcvY21kLmhcbmluZGV4IDMzMWRjYmVmZTcyZjEuLjk2ZmNjMDYwOTdjNGUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2lvX3VyaW5nL2NtZC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2lvX3VyaW5nL2NtZC5oXG5AQCAtNTIsNiAmIzQzOzUyLDEwIEBAIGludCBpb191cmluZ19jbWRfaW1wb3J0X2ZpeGVkX3ZlYyhzdHJ1Y3QgaW9fdXJpbmdfY21kICppb3VjbWQsXG4gXHRcdFx0XHQgIGludCBkZGlyLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4gXHRcdFx0XHQgIHVuc2lnbmVkIGlzc3VlX2ZsYWdzKTtcbiBcbiYjNDM7LyogT25lIG9mIHRoZXNlIG11c3QgYmUgY2FsbGVkIHByaW9yIHRvIGlvX3VyaW5nX2NtZF9kb25lKCkgKi9cbiYjNDM7dm9pZCBpb191cmluZ19jbWRfc2V0X3JlcyhzdHJ1Y3QgaW9fdXJpbmdfY21kICosIHMzMiByZXQpO1xuJiM0Mzt2b2lkIGlvX3VyaW5nX2NtZF9zZXRfcmVzMzIoc3RydWN0IGlvX3VyaW5nX2NtZCAqLCBzMzIgcmV0LCB1NjQgcmVzMik7XG4mIzQzO1xuIC8qXG4gICogQ29tcGxldGVzIHRoZSByZXF1ZXN0LCBpLmUuIHBvc3RzIGFuIGlvX3VyaW5nIENRRSBhbmQgZGVhbGxvY2F0ZXMgQGlvdWNtZFxuICAqIGFuZCB0aGUgY29ycmVzcG9uZGluZyBpb191cmluZyByZXF1ZXN0LlxuQEAgLTU5LDggJiM0Mzs2Myw3IEBAIGludCBpb191cmluZ19jbWRfaW1wb3J0X2ZpeGVkX3ZlYyhzdHJ1Y3QgaW9fdXJpbmdfY21kICppb3VjbWQsXG4gICogTm90ZTogdGhlIGNhbGxlciBzaG91bGQgbmV2ZXIgaGFyZCBjb2RlIEBpc3N1ZV9mbGFncyBhbmQgaXMgb25seSBhbGxvd2VkXG4gICogdG8gcGFzcyB0aGUgbWFzayBwcm92aWRlZCBieSB0aGUgY29yZSBpb191cmluZyBjb2RlLlxuICAqL1xuLXZvaWQgX19pb191cmluZ19jbWRfZG9uZShzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsIHMzMiByZXQsIHU2NCByZXMyLFxuLVx0XHRcdCB1bnNpZ25lZCBpc3N1ZV9mbGFncywgYm9vbCBpc19jcWUzMik7XG4mIzQzO3ZvaWQgaW9fdXJpbmdfY21kX2RvbmUoc3RydWN0IGlvX3VyaW5nX2NtZCAqLCB1bnNpZ25lZCBpc3N1ZV9mbGFncyk7XG4gXG4gdm9pZCBfX2lvX3VyaW5nX2NtZF9kb19pbl90YXNrKHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCxcbiBcdFx0XHQgICAgaW9fcmVxX3R3X2Z1bmNfdCB0YXNrX3dvcmtfY2IsXG5AQCAtMTA3LDggJiM0MzsxMTAsMTUgQEAgc3RhdGljIGlubGluZSBpbnQgaW9fdXJpbmdfY21kX2ltcG9ydF9maXhlZF92ZWMoc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y21kLFxuIHtcbiBcdHJldHVybiAtRU9QTk9UU1VQUDtcbiB9XG4tc3RhdGljIGlubGluZSB2b2lkIF9faW9fdXJpbmdfY21kX2RvbmUoc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLCBzMzIgcmV0LFxuLVx0XHR1NjQgcmV0MiwgdW5zaWduZWQgaXNzdWVfZmxhZ3MsIGJvb2wgaXNfY3FlMzIpXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBpb191cmluZ19jbWRfc2V0X3JlcyhzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsIHMzMiByZXQpXG4mIzQzO3tcbiYjNDM7fVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgaW9fdXJpbmdfY21kX3NldF9yZXMzMihzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsIHMzMiByZXQsXG4mIzQzO1x0XHRcdFx0XHQgIHU2NCByZXMyKVxuJiM0Mzt7XG4mIzQzO31cbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGlvX3VyaW5nX2NtZF9kb25lKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCxcbiYjNDM7XHRcdFx0XHQgICAgIHVuc2lnbmVkIGlzc3VlX2ZsYWdzKVxuIHtcbiB9XG4gc3RhdGljIGlubGluZSB2b2lkIF9faW9fdXJpbmdfY21kX2RvX2luX3Rhc2soc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y21kLFxuQEAgLTE3MCwxOCAmIzQzOzE4MCw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCAqaW9fdXJpbmdfY21kX2N0eF9oYW5kbGUoc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kKVxuIFx0cmV0dXJuIGNtZF90b19pb19raW9jYihjbWQpLVx1MDAzZWN0eDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIGlvX3VyaW5nX2NtZF9kb25lKHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCwgczMyIHJldCxcbi1cdFx0XHRcdCAgICAgdW5zaWduZWQgaXNzdWVfZmxhZ3MpXG4te1xuLVx0cmV0dXJuIF9faW9fdXJpbmdfY21kX2RvbmUoaW91Y21kLCByZXQsIDAsIGlzc3VlX2ZsYWdzLCBmYWxzZSk7XG4tfVxuLVxuLXN0YXRpYyBpbmxpbmUgdm9pZCBpb191cmluZ19jbWRfZG9uZTMyKHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCwgczMyIHJldCxcbi1cdFx0XHRcdCAgICAgICB1NjQgcmVzMiwgdW5zaWduZWQgaXNzdWVfZmxhZ3MpXG4te1xuLVx0cmV0dXJuIF9faW9fdXJpbmdfY21kX2RvbmUoaW91Y21kLCByZXQsIHJlczIsIGlzc3VlX2ZsYWdzLCB0cnVlKTtcbi19XG4tXG4gaW50IGlvX2J1ZmZlcl9yZWdpc3Rlcl9idmVjKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCwgc3RydWN0IHJlcXVlc3QgKnJxLFxuIFx0XHRcdCAgICB2b2lkICgqcmVsZWFzZSkodm9pZCAqKSwgdW5zaWduZWQgaW50IGluZGV4LFxuIFx0XHRcdCAgICB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpO1xuZGlmZiAtLWdpdCBhL2lvX3VyaW5nL3VyaW5nX2NtZC5jIGIvaW9fdXJpbmcvdXJpbmdfY21kLmNcbmluZGV4IDcyNmE2NTlmMzhjMzguLmVmM2U3ZTM1MmM2YWYgMTAwNjQ0XG4tLS0gYS9pb191cmluZy91cmluZ19jbWQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvaW9fdXJpbmcvdXJpbmdfY21kLmNcbkBAIC0xMzgsMTkgJiM0MzsxMzgsMzEgQEAgdm9pZCBfX2lvX3VyaW5nX2NtZF9kb19pbl90YXNrKHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCxcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoX19pb191cmluZ19jbWRfZG9faW5fdGFzayk7XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIGlvX3JlcV9zZXRfY3FlMzJfZXh0cmEoc3RydWN0IGlvX2tpb2NiICpyZXEsXG4tXHRcdFx0XHRcdCAgdTY0IGV4dHJhMSwgdTY0IGV4dHJhMilcbiYjNDM7dm9pZCBpb191cmluZ19jbWRfc2V0X3JlcyhzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsIHMzMiByZXQpXG4ge1xuLVx0cmVxLVx1MDAzZWJpZ19jcWUuZXh0cmExID0gZXh0cmExO1xuLVx0cmVxLVx1MDAzZWJpZ19jcWUuZXh0cmEyID0gZXh0cmEyO1xuJiM0MztcdHN0cnVjdCBpb19raW9jYiAqcmVxID0gY21kX3RvX2lvX2tpb2NiKGNtZCk7XG4mIzQzO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXFfc2V0X2ZhaWwocmVxKTtcbiYjNDM7XHRpb19yZXFfc2V0X3JlcyhyZXEsIHJldCwgMCk7XG4gfVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChpb191cmluZ19jbWRfc2V0X3Jlcyk7XG4mIzQzO1xuJiM0Mzt2b2lkIGlvX3VyaW5nX2NtZF9zZXRfcmVzMzIoc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLCBzMzIgcmV0LCB1NjQgcmVzMilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpb19raW9jYiAqcmVxID0gY21kX3RvX2lvX2tpb2NiKGNtZCk7XG4mIzQzO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXFfc2V0X2ZhaWwocmVxKTtcbiYjNDM7XHRpb19yZXFfc2V0X3JlczMyKHJlcSwgcmV0LCAwLCByZXMyLCAwKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChpb191cmluZ19jbWRfc2V0X3JlczMyKTtcbiBcbiAvKlxuICAqIENhbGxlZCBieSBjb25zdW1lcnMgb2YgaW9fdXJpbmdfY21kLCBpZiB0aGV5IG9yaWdpbmFsbHkgcmV0dXJuZWRcbiAgKiAtRUlPQ0JRVUVVRUQgdXBvbiByZWNlaXZpbmcgdGhlIGNvbW1hbmQuXG4gICovXG4tdm9pZCBfX2lvX3VyaW5nX2NtZF9kb25lKHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCwgczMyIHJldCwgdTY0IHJlczIsXG4tXHRcdCAgICAgICB1bnNpZ25lZCBpc3N1ZV9mbGFncywgYm9vbCBpc19jcWUzMilcbiYjNDM7dm9pZCBpb191cmluZ19jbWRfZG9uZShzdHJ1Y3QgaW9fdXJpbmdfY21kICppb3VjbWQsIHVuc2lnbmVkIGlzc3VlX2ZsYWdzKVxuIHtcbiBcdHN0cnVjdCBpb19raW9jYiAqcmVxID0gY21kX3RvX2lvX2tpb2NiKGlvdWNtZCk7XG4gXG5AQCAtMTU5LDE1ICYjNDM7MTcxLDYgQEAgdm9pZCBfX2lvX3VyaW5nX2NtZF9kb25lKHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCwgczMyIHJldCwgdTY0IHJlczIsXG4gXG4gXHRpb191cmluZ19jbWRfZGVsX2NhbmNlbGFibGUoaW91Y21kLCBpc3N1ZV9mbGFncyk7XG4gXG4tXHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRyZXFfc2V0X2ZhaWwocmVxKTtcbi1cbi1cdGlvX3JlcV9zZXRfcmVzKHJlcSwgcmV0LCAwKTtcbi1cdGlmIChpc19jcWUzMikge1xuLVx0XHRpZiAocmVxLVx1MDAzZWN0eC1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1NFVFVQX0NRRV9NSVhFRClcbi1cdFx0XHRyZXEtXHUwMDNlY3FlLmZsYWdzIHw9IElPUklOR19DUUVfRl8zMjtcbi1cdFx0aW9fcmVxX3NldF9jcWUzMl9leHRyYShyZXEsIHJlczIsIDApO1xuLVx0fVxuIFx0aW9fcmVxX3VyaW5nX2NsZWFudXAocmVxLCBpc3N1ZV9mbGFncyk7XG4gXHRpZiAocmVxLVx1MDAzZWZsYWdzIFx1MDAyNiBSRVFfRl9JT1BPTEwpIHtcbiBcdFx0Lyogb3JkZXIgd2l0aCBpb19kb19pb3BvbGwoKSBjaGVja2luZyAtXHUwMDNlaW9wb2xsX2NvbXBsZXRlZCAqL1xuQEAgLTE4MSw3ICYjNDM7MTg0LDcgQEAgdm9pZCBfX2lvX3VyaW5nX2NtZF9kb25lKHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCwgczMyIHJldCwgdTY0IHJlczIsXG4gXHRcdGlvX3JlcV90YXNrX3dvcmtfYWRkKHJlcSk7XG4gXHR9XG4gfVxuLUVYUE9SVF9TWU1CT0xfR1BMKF9faW9fdXJpbmdfY21kX2RvbmUpO1xuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChpb191cmluZ19jbWRfZG9uZSk7XG4gXG4gaW50IGlvX3VyaW5nX2NtZF9wcmVwKHN0cnVjdCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpXG4ge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDE5OjIyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJT19VUklORyYjMzQ7LAogICAgJiMzNDtCTEtfREVWX1VCTEsmIzM0OywKICAgICYjMzQ7TlZNRV9DT1JFJiMzNDssCiAgICAmIzM0O0JMS19ERVZfTlZNRSYjMzQ7LAogICAgJiMzNDtCTEtfREVWX0JTRyYjMzQ7LAogICAgJiMzNDtCVFJGU19GUyYjMzQ7LAogICAgJiMzNDtGVVNFX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW9fdXJpbmdfY21kX3NldF9yZXMmIzM0OywKICAgICYjMzQ7aW9fdXJpbmdfY21kX3NldF9yZXMzMiYjMzQ7LAogICAgJiMzNDtpb191cmluZ19jbWRfZG9uZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBpb191cmluZyBjb21tYW5kIEFQSSBieSBzcGxpdHRpbmcgYGlvX3VyaW5nX2NtZF9kb25lYCBpbnRvIGBpb191cmluZ19jbWRfc2V0X3Jlc2AgKG9yIGBpb191cmluZ19jbWRfc2V0X3JlczMyYCkgYW5kIGBpb191cmluZ19jbWRfZG9uZWAuIFRoaXMgYWZmZWN0cyBob3cgcmVzdWx0cyBhcmUgcmV0dXJuZWQgZm9yIGlvX3VyaW5nIGNvbW1hbmRzIGFjcm9zcyBtdWx0aXBsZSBzdWJzeXN0ZW1zIGluY2x1ZGluZyBibG9jaywgdWJsaywgbnZtZSwgc2NzaSBic2csIGJ0cmZzLCBhbmQgZnVzZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGtlcm5lbCBBUEkgYW5kIGl0cyBjYWxsZXJzLCB3aGljaCBpcyB3b3J0aCBmdXp6aW5nIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBpbmNvcnJlY3QgcmVzdWx0IGhhbmRsaW5nIGFyZSBpbnRyb2R1Y2VkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMzVmNmMxY2Q1YmM5Zjc5ZDc3Yzg1ZjZiMWY2OGFjM2Y2ZjFhYTJjMwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDI3IDE5OjIyOjMzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYmxvY2svaW9jdGwuYyBiL2Jsb2NrL2lvY3RsLmMKaW5kZXggNjRiNGU2YzBmNjk2NS4uOTQ2Y2FiNzRmMjUzZSAxMDA2NDQKLS0tIGEvYmxvY2svaW9jdGwuYwomIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9pb2N0bC5jCkBAIC04NzEsOSAmIzQzOzg3MSwxMCBAQCBzdGF0aWMgdm9pZCBibGtfY21kX2NvbXBsZXRlKHN0cnVjdCBpb190d19yZXEgdHdfcmVxLCBpb190d190b2tlbl90IHR3KQogCiAJaWYgKGJpYy0mZ3Q7cmVzID09IC1FQUdBSU4gJmFtcDsmYW1wOyBiaWMtJmd0O25vd2FpdCkKIAkJaW9fdXJpbmdfY21kX2lzc3VlX2Jsb2NraW5nKGNtZCk7Ci0JZWxzZQotCQlpb191cmluZ19jbWRfZG9uZShjbWQsIGJpYy0mZ3Q7cmVzLAotCQkJCSAgSU9fVVJJTkdfQ01EX1RBU0tfV09SS19JU1NVRV9GTEFHUyk7CiYjNDM7CWVsc2UgewomIzQzOwkJaW9fdXJpbmdfY21kX3NldF9yZXMoY21kLCBiaWMtJmd0O3Jlcyk7CiYjNDM7CQlpb191cmluZ19jbWRfZG9uZShjbWQsIElPX1VSSU5HX0NNRF9UQVNLX1dPUktfSVNTVUVfRkxBR1MpOwomIzQzOwl9CiB9CiAKIHN0YXRpYyB2b2lkIGJpb19jbWRfYmlvX2VuZF9pbyhzdHJ1Y3QgYmlvICpiaW8pCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMgYi9kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMKaW5kZXggNGQxN2VkMjY0ZGExYS4uNTFmMTVlNWIzYzAxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay91YmxrX2Rydi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svdWJsa19kcnYuYwpAQCAtODM5LDcgJiM0Mzs4MzksOCBAQCBzdGF0aWMgdm9pZCB1YmxrX2JhdGNoX2RlaW5pdF9mZXRjaF9idWYoc3RydWN0IHVibGtfcXVldWUgKnVicSwKIAlfX3VibGtfcmVsZWFzZV9mY21kKHVicSk7CiAJc3Bpbl91bmxvY2soJmFtcDt1YnEtJmd0O2V2dHNfbG9jayk7CiAKLQlpb191cmluZ19jbWRfZG9uZShmY21kLSZndDtjbWQsIHJlcywgZGF0YS0mZ3Q7aXNzdWVfZmxhZ3MpOwomIzQzOwlpb191cmluZ19jbWRfc2V0X3JlcyhmY21kLSZndDtjbWQsIHJlcyk7CiYjNDM7CWlvX3VyaW5nX2NtZF9kb25lKGZjbWQtJmd0O2NtZCwgZGF0YS0mZ3Q7aXNzdWVfZmxhZ3MpOwogCXVibGtfYmF0Y2hfZnJlZV9mY21kKGZjbWQpOwogfQogCkBAIC0xNjQyLDcgJiM0MzsxNjQzLDggQEAgc3RhdGljIHZvaWQgdWJsa19jb21wbGV0ZV9pb19jbWQoc3RydWN0IHVibGtfaW8gKmlvLCBzdHJ1Y3QgcmVxdWVzdCAqcmVxLAogCXN0cnVjdCBpb191cmluZ19jbWQgKmNtZCA9IF9fdWJsa19wcmVwX2NvbXBsX2lvX2NtZChpbywgcmVxKTsKIAogCS8qIHRlbGwgdWJsa3NydiBvbmUgaW8gcmVxdWVzdCBpcyBjb21pbmcgKi8KLQlpb191cmluZ19jbWRfZG9uZShjbWQsIHJlcywgaXNzdWVfZmxhZ3MpOwomIzQzOwlpb191cmluZ19jbWRfc2V0X3JlcyhjbWQsIHJlcyk7CiYjNDM7CWlvX3VyaW5nX2NtZF9kb25lKGNtZCwgaXNzdWVfZmxhZ3MpOwogfQogCiAjZGVmaW5lIFVCTEtfUkVRVUVVRV9ERUxBWV9NUwkzCkBAIC0xNzI4LDcgJiM0MzsxNzMwLDggQEAgc3RhdGljIHZvaWQgdWJsa19hdXRvX2J1Zl9kaXNwYXRjaChjb25zdCBzdHJ1Y3QgdWJsa19xdWV1ZSAqdWJxLAogCiAJaWYgKHJlcyAhPSBBVVRPX0JVRl9SRUdfRkFJTCkgewogCQl1YmxrX2F1dG9fYnVmX2lvX3NldHVwKHVicSwgcmVxLCBpbywgY21kLCByZXMpOwotCQlpb191cmluZ19jbWRfZG9uZShjbWQsIFVCTEtfSU9fUkVTX09LLCBpc3N1ZV9mbGFncyk7CiYjNDM7CQlpb191cmluZ19jbWRfc2V0X3JlcyhjbWQsIFVCTEtfSU9fUkVTX09LKTsKJiM0MzsJCWlvX3VyaW5nX2NtZF9kb25lKGNtZCwgaXNzdWVfZmxhZ3MpOwogCX0KIH0KIApAQCAtMjc4OSw4ICYjNDM7Mjc5MiwxMCBAQCBzdGF0aWMgdm9pZCB1YmxrX2NhbmNlbF9jbWQoc3RydWN0IHVibGtfcXVldWUgKnVicSwgdTE2IHRhZywKIAl9CiAJc3Bpbl91bmxvY2soJmFtcDt1YnEtJmd0O2NhbmNlbF9sb2NrKTsKIAotCWlmICghZG9uZSAmYW1wOyZhbXA7IGNtZCkKLQkJaW9fdXJpbmdfY21kX2RvbmUoY21kLCBVQkxLX0lPX1JFU19BQk9SVCwgaXNzdWVfZmxhZ3MpOwomIzQzOwlpZiAoIWRvbmUgJmFtcDsmYW1wOyBjbWQpIHsKJiM0MzsJCWlvX3VyaW5nX2NtZF9zZXRfcmVzKGNtZCwgVUJMS19JT19SRVNfQUJPUlQpOwomIzQzOwkJaW9fdXJpbmdfY21kX2RvbmUoY21kLCBpc3N1ZV9mbGFncyk7CiYjNDM7CX0KIH0KIAogLyoKQEAgLTI4MTYsNyAmIzQzOzI4MjEsOCBAQCBzdGF0aWMgdm9pZCB1YmxrX2JhdGNoX2NhbmNlbF9jbWQoc3RydWN0IHVibGtfcXVldWUgKnVicSwKIAlzcGluX3VubG9jaygmYW1wO3VicS0mZ3Q7ZXZ0c19sb2NrKTsKIAogCWlmIChkb25lKSB7Ci0JCWlvX3VyaW5nX2NtZF9kb25lKGZjbWQtJmd0O2NtZCwgVUJMS19JT19SRVNfQUJPUlQsIGlzc3VlX2ZsYWdzKTsKJiM0MzsJCWlvX3VyaW5nX2NtZF9zZXRfcmVzKGZjbWQtJmd0O2NtZCwgVUJMS19JT19SRVNfQUJPUlQpOwomIzQzOwkJaW9fdXJpbmdfY21kX2RvbmUoZmNtZC0mZ3Q7Y21kLCBpc3N1ZV9mbGFncyk7CiAJCXVibGtfYmF0Y2hfZnJlZV9mY21kKGZjbWQpOwogCX0KIH0KQEAgLTM1MjYsOCAmIzQzOzM1MzIsMTAgQEAgc3RhdGljIHZvaWQgdWJsa19jaF91cmluZ19jbWRfY2Ioc3RydWN0IGlvX3R3X3JlcSB0d19yZXEsIGlvX3R3X3Rva2VuX3QgdHcpCiAKIAlpZiAoIXR3LmNhbmNlbCkKIAkJcmV0ID0gdWJsa19jaF91cmluZ19jbWRfbG9jYWwoY21kLCBpc3N1ZV9mbGFncyk7Ci0JaWYgKHJldCAhPSAtRUlPQ0JRVUVVRUQpCi0JCWlvX3VyaW5nX2NtZF9kb25lKGNtZCwgcmV0LCBpc3N1ZV9mbGFncyk7CiYjNDM7CWlmIChyZXQgIT0gLUVJT0NCUVVFVUVEKSB7CiYjNDM7CQlpb191cmluZ19jbWRfc2V0X3JlcyhjbWQsIHJldCk7CiYjNDM7CQlpb191cmluZ19jbWRfZG9uZShjbWQsIGlzc3VlX2ZsYWdzKTsKJiM0MzsJfQogfQogCiBzdGF0aWMgaW50IHVibGtfY2hfdXJpbmdfY21kKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL2hvc3QvaW9jdGwuYyBiL2RyaXZlcnMvbnZtZS9ob3N0L2lvY3RsLmMKaW5kZXggNjUzOWQ0NzUwMDk4Ni4uYjUwYmJhMjA3ODE4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9udm1lL2hvc3QvaW9jdGwuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jCkBAIC00MjMsOCAmIzQzOzQyMyw2IEBAIHN0cnVjdCBudm1lX3VyaW5nX2RhdGEgewogc3RydWN0IG52bWVfdXJpbmdfY21kX3BkdSB7CiAJc3RydWN0IHJlcXVlc3QgKnJlcTsKIAlzdHJ1Y3QgYmlvICpiaW87Ci0JdTY0IHJlc3VsdDsKLQlpbnQgc3RhdHVzOwogfTsKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgbnZtZV91cmluZ19jbWRfcGR1ICpudm1lX3VyaW5nX2NtZF9wZHUoCkBAIC00NDAsOCAmIzQzOzQzOCw3IEBAIHN0YXRpYyB2b2lkIG52bWVfdXJpbmdfdGFza19jYihzdHJ1Y3QgaW9fdHdfcmVxIHR3X3JlcSwgaW9fdHdfdG9rZW5fdCB0dykKIAogCWlmIChwZHUtJmd0O2JpbykKIAkJYmxrX3JxX3VubWFwX3VzZXIocGR1LSZndDtiaW8pOwotCWlvX3VyaW5nX2NtZF9kb25lMzIoaW91Y21kLCBwZHUtJmd0O3N0YXR1cywgcGR1LSZndDtyZXN1bHQsCi0JCQkgICAgSU9fVVJJTkdfQ01EX1RBU0tfV09SS19JU1NVRV9GTEFHUyk7CiYjNDM7CWlvX3VyaW5nX2NtZF9kb25lKGlvdWNtZCwgSU9fVVJJTkdfQ01EX1RBU0tfV09SS19JU1NVRV9GTEFHUyk7CiB9CiAKIHN0YXRpYyBlbnVtIHJxX2VuZF9pb19yZXQgbnZtZV91cmluZ19jbWRfZW5kX2lvKHN0cnVjdCByZXF1ZXN0ICpyZXEsCkBAIC00NTAsMTUgJiM0Mzs0NDcsMTcgQEAgc3RhdGljIGVudW0gcnFfZW5kX2lvX3JldCBudm1lX3VyaW5nX2NtZF9lbmRfaW8oc3RydWN0IHJlcXVlc3QgKnJlcSwKIHsKIAlzdHJ1Y3QgaW9fdXJpbmdfY21kICppb3VjbWQgPSByZXEtJmd0O2VuZF9pb19kYXRhOwogCXN0cnVjdCBudm1lX3VyaW5nX2NtZF9wZHUgKnBkdSA9IG52bWVfdXJpbmdfY21kX3BkdShpb3VjbWQpOwomIzQzOwl1NjQgcmVzdWx0ID0gbGU2NF90b19jcHUobnZtZV9yZXEocmVxKS0mZ3Q7cmVzdWx0LnU2NCk7CiYjNDM7CWludCBzdGF0dXM7CiAKIAlpZiAobnZtZV9yZXEocmVxKS0mZ3Q7ZmxhZ3MgJmFtcDsgTlZNRV9SRVFfQ0FOQ0VMTEVEKSB7Ci0JCXBkdS0mZ3Q7c3RhdHVzID0gLUVJTlRSOwomIzQzOwkJc3RhdHVzID0gLUVJTlRSOwogCX0gZWxzZSB7Ci0JCXBkdS0mZ3Q7c3RhdHVzID0gbnZtZV9yZXEocmVxKS0mZ3Q7c3RhdHVzOwotCQlpZiAoIXBkdS0mZ3Q7c3RhdHVzKQotCQkJcGR1LSZndDtzdGF0dXMgPSBibGtfc3RhdHVzX3RvX2Vycm5vKGVycik7CiYjNDM7CQlzdGF0dXMgPSBudm1lX3JlcShyZXEpLSZndDtzdGF0dXM7CiYjNDM7CQlpZiAoIXN0YXR1cykKJiM0MzsJCQlzdGF0dXMgPSBibGtfc3RhdHVzX3RvX2Vycm5vKGVycik7CiAJfQotCXBkdS0mZ3Q7cmVzdWx0ID0gbGU2NF90b19jcHUobnZtZV9yZXEocmVxKS0mZ3Q7cmVzdWx0LnU2NCk7CiYjNDM7CWlvX3VyaW5nX2NtZF9zZXRfcmVzMzIoaW91Y21kLCBzdGF0dXMsIHJlc3VsdCk7CiAKIAkvKgogCSAqIEZvciBJT1BPTEwsIGNoZWNrIGlmIHRoaXMgY29tcGxldGlvbiBpcyBoYXBwZW5pbmcgaW4gdGhlIGNvbnRleHQKQEAgLTQ3MSw3ICYjNDM7NDcwLDcgQEAgc3RhdGljIGVudW0gcnFfZW5kX2lvX3JldCBudm1lX3VyaW5nX2NtZF9lbmRfaW8oc3RydWN0IHJlcXVlc3QgKnJlcSwKIAkgICAgaW9iLSZndDtwb2xsX2N0eCA9PSBpb191cmluZ19jbWRfY3R4X2hhbmRsZShpb3VjbWQpKSB7CiAJCWlmIChwZHUtJmd0O2JpbykKIAkJCWJsa19ycV91bm1hcF91c2VyKHBkdS0mZ3Q7YmlvKTsKLQkJaW9fdXJpbmdfY21kX2RvbmUzMihpb3VjbWQsIHBkdS0mZ3Q7c3RhdHVzLCBwZHUtJmd0O3Jlc3VsdCwgMCk7CiYjNDM7CQlpb191cmluZ19jbWRfZG9uZShpb3VjbWQsIDApOwogCX0gZWxzZSB7CiAJCWlvX3VyaW5nX2NtZF9kb19pbl90YXNrX2xhenkoaW91Y21kLCBudm1lX3VyaW5nX3Rhc2tfY2IpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX2JzZy5jIGIvZHJpdmVycy9zY3NpL3Njc2lfYnNnLmMKaW5kZXggZTgwZGVjNTMxNzRlYS4uOGIzMmQ4ZThmMjlmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfYnNnLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9zY3NpL3Njc2lfYnNnLmMKQEAgLTYwLDggJiM0Mzs2MCw4IEBAIHN0YXRpYyB2b2lkIHNjc2lfYnNnX3VyaW5nX3Rhc2tfY2Ioc3RydWN0IGlvX3R3X3JlcSB0d19yZXEsIGlvX3R3X3Rva2VuX3QgdHcpCiAJCQkJICBzY21kLSZndDtyZXNpZF9sZW4pOwogCiAJYmxrX21xX2ZyZWVfcmVxdWVzdChycSk7Ci0JaW9fdXJpbmdfY21kX2RvbmUzMihpb3VjbWQsIHJldCwgcmVzMiwKLQkJCSAgICBJT19VUklOR19DTURfVEFTS19XT1JLX0lTU1VFX0ZMQUdTKTsKJiM0MzsJaW9fdXJpbmdfY21kX3NldF9yZXMzMihpb3VjbWQsIHJldCwgcmVzMik7CiYjNDM7CWlvX3VyaW5nX2NtZF9kb25lKGlvdWNtZCwgSU9fVVJJTkdfQ01EX1RBU0tfV09SS19JU1NVRV9GTEFHUyk7CiB9CiAKIHN0YXRpYyBlbnVtIHJxX2VuZF9pb19yZXQgc2NzaV9ic2dfdXJpbmdfY21kX2RvbmUoc3RydWN0IHJlcXVlc3QgKnJlcSwKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2lvY3RsLmMgYi9mcy9idHJmcy9pb2N0bC5jCmluZGV4IDcyYmM5ZDRmNzcwODcuLjA3MDU3YTcwODQ1MjkgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2lvY3RsLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYnRyZnMvaW9jdGwuYwpAQCAtNDYyMSw3ICYjNDM7NDYyMSw4IEBAIHN0YXRpYyB2b2lkIGJ0cmZzX3VyaW5nX3JlYWRfZmluaXNoZWQoc3RydWN0IGlvX3R3X3JlcSB0d19yZXEsIGlvX3R3X3Rva2VuX3QgdHcpCiAJYnRyZnNfdW5sb2NrX2V4dGVudChpb190cmVlLCBwcml2LSZndDtzdGFydCwgcHJpdi0mZ3Q7bG9ja2VuZCwgJmFtcDtwcml2LSZndDtjYWNoZWRfc3RhdGUpOwogCWJ0cmZzX2lub2RlX3VubG9jayhpbm9kZSwgQlRSRlNfSUxPQ0tfU0hBUkVEKTsKIAotCWlvX3VyaW5nX2NtZF9kb25lKGNtZCwgcmV0LCBJT19VUklOR19DTURfVEFTS19XT1JLX0lTU1VFX0ZMQUdTKTsKJiM0MzsJaW9fdXJpbmdfY21kX3NldF9yZXMoY21kLCByZXQpOwomIzQzOwlpb191cmluZ19jbWRfZG9uZShjbWQsIElPX1VSSU5HX0NNRF9UQVNLX1dPUktfSVNTVUVfRkxBR1MpOwogCWFkZF9yY2hhcihjdXJyZW50LCByZXQpOwogCiAJZm9yIChpbmRleCA9IDA7IGluZGV4ICZsdDsgcHJpdi0mZ3Q7bnJfcGFnZXM7IGluZGV4JiM0MzsmIzQzOykKZGlmZiAtLWdpdCBhL2ZzL2Z1c2UvZGV2X3VyaW5nLmMgYi9mcy9mdXNlL2Rldl91cmluZy5jCmluZGV4IDc3YzhjZWM0M2Q5YzYuLmM1YmI1MDE4M2UxYzYgMTAwNjQ0Ci0tLSBhL2ZzL2Z1c2UvZGV2X3VyaW5nLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZnVzZS9kZXZfdXJpbmcuYwpAQCAtMzY2LDggJiM0MzszNjYsMTAgQEAgc3RhdGljIHZvaWQgZnVzZV91cmluZ19lbnRyeV90ZWFyZG93bihzdHJ1Y3QgZnVzZV9yaW5nX2VudCAqZW50KQogCWVudC0mZ3Q7c3RhdGUgPSBGUlJTX1JFTEVBU0VEOwogCXNwaW5fdW5sb2NrKCZhbXA7cXVldWUtJmd0O2xvY2spOwogCi0JaWYgKGNtZCkKLQkJaW9fdXJpbmdfY21kX2RvbmUoY21kLCAtRU5PVENPTk4sIElPX1VSSU5HX0ZfVU5MT0NLRUQpOwomIzQzOwlpZiAoY21kKSB7CiYjNDM7CQlpb191cmluZ19jbWRfc2V0X3JlcyhjbWQsIC1FTk9UQ09OTik7CiYjNDM7CQlpb191cmluZ19jbWRfZG9uZShjbWQsIElPX1VSSU5HX0ZfVU5MT0NLRUQpOwomIzQzOwl9CiAKIAlpZiAocmVxKQogCQlmdXNlX3VyaW5nX3N0b3BfZnVzZV9yZXFfZW5kKHJlcSk7CkBAIC01MzEsNyAmIzQzOzUzMyw4IEBAIHN0YXRpYyB2b2lkIGZ1c2VfdXJpbmdfY2FuY2VsKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCwKIAogCWlmIChuZWVkX2NtZF9kb25lKSB7CiAJCS8qIG5vIHF1ZXVlIGxvY2sgdG8gYXZvaWQgbG9jayBvcmRlciBpc3N1ZXMgKi8KLQkJaW9fdXJpbmdfY21kX2RvbmUoY21kLCAtRU5PVENPTk4sIGlzc3VlX2ZsYWdzKTsKJiM0MzsJCWlvX3VyaW5nX2NtZF9zZXRfcmVzKGNtZCwgLUVOT1RDT05OKTsKJiM0MzsJCWlvX3VyaW5nX2NtZF9kb25lKGNtZCwgaXNzdWVfZmxhZ3MpOwogCQlrZnJlZShlbnQpOwogCQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmYW1wO3F1ZXVlLSZndDtyaW5nLSZndDtxdWV1ZV9yZWZzKSkKIAkJCXdha2VfdXBfYWxsKCZhbXA7cXVldWUtJmd0O3JpbmctJmd0O3N0b3Bfd2FpdHEpOwpAQCAtOTQyLDcgJiM0Mzs5NDUsOCBAQCBzdGF0aWMgdm9pZCBmdXNlX3VyaW5nX3NlbmQoc3RydWN0IGZ1c2VfcmluZ19lbnQgKmVudCwgc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLAogCWZ1c2VfdXJpbmdfYWRkX3RvX3BxKGVudCk7CiAJc3Bpbl91bmxvY2soJmFtcDtxdWV1ZS0mZ3Q7bG9jayk7CiAKLQlpb191cmluZ19jbWRfZG9uZShjbWQsIHJldCwgaXNzdWVfZmxhZ3MpOwomIzQzOwlpb191cmluZ19jbWRfc2V0X3JlcyhjbWQsIHJldCk7CiYjNDM7CWlvX3VyaW5nX2NtZF9kb25lKGNtZCwgaXNzdWVfZmxhZ3MpOwogfQogCiAvKiBGVVNFX1VSSU5HX0NNRF9DT01NSVRfQU5EX0ZFVENIIGhhbmRsZXIgKi8KQEAgLTEzMDksNyAmIzQzOzEzMTMsOCBAQCBzdGF0aWMgdm9pZCBmdXNlX3VyaW5nX3NlbmRfaW5fdGFzayhzdHJ1Y3QgaW9fdHdfcmVxIHR3X3JlcSwgaW9fdHdfdG9rZW5fdCB0dykKIAkJbGlzdF9kZWxfaW5pdCgmYW1wO2VudC0mZ3Q7bGlzdCk7CiAJCXNwaW5fdW5sb2NrKCZhbXA7cXVldWUtJmd0O2xvY2spOwogCi0JCWlvX3VyaW5nX2NtZF9kb25lKGNtZCwgZXJyLCBpc3N1ZV9mbGFncyk7CiYjNDM7CQlpb191cmluZ19jbWRfc2V0X3JlcyhjbWQsIGVycik7CiYjNDM7CQlpb191cmluZ19jbWRfZG9uZShjbWQsIGlzc3VlX2ZsYWdzKTsKIAogCQlmdXNlX3VyaW5nX3JlcV9lbmQoZW50LCBlbnQtJmd0O2Z1c2VfcmVxLCBlcnIpOwogCQlrZnJlZShlbnQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pb191cmluZy9jbWQuaCBiL2luY2x1ZGUvbGludXgvaW9fdXJpbmcvY21kLmgKaW5kZXggMzMxZGNiZWZlNzJmMS4uOTZmY2MwNjA5N2M0ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pb191cmluZy9jbWQuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2lvX3VyaW5nL2NtZC5oCkBAIC01Miw2ICYjNDM7NTIsMTAgQEAgaW50IGlvX3VyaW5nX2NtZF9pbXBvcnRfZml4ZWRfdmVjKHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCwKIAkJCQkgIGludCBkZGlyLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsCiAJCQkJICB1bnNpZ25lZCBpc3N1ZV9mbGFncyk7CiAKJiM0MzsvKiBPbmUgb2YgdGhlc2UgbXVzdCBiZSBjYWxsZWQgcHJpb3IgdG8gaW9fdXJpbmdfY21kX2RvbmUoKSAqLwomIzQzO3ZvaWQgaW9fdXJpbmdfY21kX3NldF9yZXMoc3RydWN0IGlvX3VyaW5nX2NtZCAqLCBzMzIgcmV0KTsKJiM0Mzt2b2lkIGlvX3VyaW5nX2NtZF9zZXRfcmVzMzIoc3RydWN0IGlvX3VyaW5nX2NtZCAqLCBzMzIgcmV0LCB1NjQgcmVzMik7CiYjNDM7CiAvKgogICogQ29tcGxldGVzIHRoZSByZXF1ZXN0LCBpLmUuIHBvc3RzIGFuIGlvX3VyaW5nIENRRSBhbmQgZGVhbGxvY2F0ZXMgQGlvdWNtZAogICogYW5kIHRoZSBjb3JyZXNwb25kaW5nIGlvX3VyaW5nIHJlcXVlc3QuCkBAIC01OSw4ICYjNDM7NjMsNyBAQCBpbnQgaW9fdXJpbmdfY21kX2ltcG9ydF9maXhlZF92ZWMoc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y21kLAogICogTm90ZTogdGhlIGNhbGxlciBzaG91bGQgbmV2ZXIgaGFyZCBjb2RlIEBpc3N1ZV9mbGFncyBhbmQgaXMgb25seSBhbGxvd2VkCiAgKiB0byBwYXNzIHRoZSBtYXNrIHByb3ZpZGVkIGJ5IHRoZSBjb3JlIGlvX3VyaW5nIGNvZGUuCiAgKi8KLXZvaWQgX19pb191cmluZ19jbWRfZG9uZShzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsIHMzMiByZXQsIHU2NCByZXMyLAotCQkJIHVuc2lnbmVkIGlzc3VlX2ZsYWdzLCBib29sIGlzX2NxZTMyKTsKJiM0Mzt2b2lkIGlvX3VyaW5nX2NtZF9kb25lKHN0cnVjdCBpb191cmluZ19jbWQgKiwgdW5zaWduZWQgaXNzdWVfZmxhZ3MpOwogCiB2b2lkIF9faW9fdXJpbmdfY21kX2RvX2luX3Rhc2soc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y21kLAogCQkJICAgIGlvX3JlcV90d19mdW5jX3QgdGFza193b3JrX2NiLApAQCAtMTA3LDggJiM0MzsxMTAsMTUgQEAgc3RhdGljIGlubGluZSBpbnQgaW9fdXJpbmdfY21kX2ltcG9ydF9maXhlZF92ZWMoc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y21kLAogewogCXJldHVybiAtRU9QTk9UU1VQUDsKIH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2lvX3VyaW5nX2NtZF9kb25lKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCwgczMyIHJldCwKLQkJdTY0IHJldDIsIHVuc2lnbmVkIGlzc3VlX2ZsYWdzLCBib29sIGlzX2NxZTMyKQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBpb191cmluZ19jbWRfc2V0X3JlcyhzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsIHMzMiByZXQpCiYjNDM7ewomIzQzO30KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgaW9fdXJpbmdfY21kX3NldF9yZXMzMihzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsIHMzMiByZXQsCiYjNDM7CQkJCQkgIHU2NCByZXMyKQomIzQzO3sKJiM0Mzt9CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGlvX3VyaW5nX2NtZF9kb25lKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCwKJiM0MzsJCQkJICAgICB1bnNpZ25lZCBpc3N1ZV9mbGFncykKIHsKIH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2lvX3VyaW5nX2NtZF9kb19pbl90YXNrKHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCwKQEAgLTE3MCwxOCAmIzQzOzE4MCw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCAqaW9fdXJpbmdfY21kX2N0eF9oYW5kbGUoc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kKQogCXJldHVybiBjbWRfdG9faW9fa2lvY2IoY21kKS0mZ3Q7Y3R4OwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgaW9fdXJpbmdfY21kX2RvbmUoc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y21kLCBzMzIgcmV0LAotCQkJCSAgICAgdW5zaWduZWQgaXNzdWVfZmxhZ3MpCi17Ci0JcmV0dXJuIF9faW9fdXJpbmdfY21kX2RvbmUoaW91Y21kLCByZXQsIDAsIGlzc3VlX2ZsYWdzLCBmYWxzZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBpb191cmluZ19jbWRfZG9uZTMyKHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCwgczMyIHJldCwKLQkJCQkgICAgICAgdTY0IHJlczIsIHVuc2lnbmVkIGlzc3VlX2ZsYWdzKQotewotCXJldHVybiBfX2lvX3VyaW5nX2NtZF9kb25lKGlvdWNtZCwgcmV0LCByZXMyLCBpc3N1ZV9mbGFncywgdHJ1ZSk7Ci19Ci0KIGludCBpb19idWZmZXJfcmVnaXN0ZXJfYnZlYyhzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsIHN0cnVjdCByZXF1ZXN0ICpycSwKIAkJCSAgICB2b2lkICgqcmVsZWFzZSkodm9pZCAqKSwgdW5zaWduZWQgaW50IGluZGV4LAogCQkJICAgIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyk7CmRpZmYgLS1naXQgYS9pb191cmluZy91cmluZ19jbWQuYyBiL2lvX3VyaW5nL3VyaW5nX2NtZC5jCmluZGV4IDcyNmE2NTlmMzhjMzguLmVmM2U3ZTM1MmM2YWYgMTAwNjQ0Ci0tLSBhL2lvX3VyaW5nL3VyaW5nX2NtZC5jCiYjNDM7JiM0MzsmIzQzOyBiL2lvX3VyaW5nL3VyaW5nX2NtZC5jCkBAIC0xMzgsMTkgJiM0MzsxMzgsMzEgQEAgdm9pZCBfX2lvX3VyaW5nX2NtZF9kb19pbl90YXNrKHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCwKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKF9faW9fdXJpbmdfY21kX2RvX2luX3Rhc2spOwogCi1zdGF0aWMgaW5saW5lIHZvaWQgaW9fcmVxX3NldF9jcWUzMl9leHRyYShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwKLQkJCQkJICB1NjQgZXh0cmExLCB1NjQgZXh0cmEyKQomIzQzO3ZvaWQgaW9fdXJpbmdfY21kX3NldF9yZXMoc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLCBzMzIgcmV0KQogewotCXJlcS0mZ3Q7YmlnX2NxZS5leHRyYTEgPSBleHRyYTE7Ci0JcmVxLSZndDtiaWdfY3FlLmV4dHJhMiA9IGV4dHJhMjsKJiM0MzsJc3RydWN0IGlvX2tpb2NiICpyZXEgPSBjbWRfdG9faW9fa2lvY2IoY21kKTsKJiM0MzsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXFfc2V0X2ZhaWwocmVxKTsKJiM0MzsJaW9fcmVxX3NldF9yZXMocmVxLCByZXQsIDApOwogfQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGlvX3VyaW5nX2NtZF9zZXRfcmVzKTsKJiM0MzsKJiM0Mzt2b2lkIGlvX3VyaW5nX2NtZF9zZXRfcmVzMzIoc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLCBzMzIgcmV0LCB1NjQgcmVzMikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpb19raW9jYiAqcmVxID0gY21kX3RvX2lvX2tpb2NiKGNtZCk7CiYjNDM7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmVxX3NldF9mYWlsKHJlcSk7CiYjNDM7CWlvX3JlcV9zZXRfcmVzMzIocmVxLCByZXQsIDAsIHJlczIsIDApOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChpb191cmluZ19jbWRfc2V0X3JlczMyKTsKIAogLyoKICAqIENhbGxlZCBieSBjb25zdW1lcnMgb2YgaW9fdXJpbmdfY21kLCBpZiB0aGV5IG9yaWdpbmFsbHkgcmV0dXJuZWQKICAqIC1FSU9DQlFVRVVFRCB1cG9uIHJlY2VpdmluZyB0aGUgY29tbWFuZC4KICAqLwotdm9pZCBfX2lvX3VyaW5nX2NtZF9kb25lKHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCwgczMyIHJldCwgdTY0IHJlczIsCi0JCSAgICAgICB1bnNpZ25lZCBpc3N1ZV9mbGFncywgYm9vbCBpc19jcWUzMikKJiM0Mzt2b2lkIGlvX3VyaW5nX2NtZF9kb25lKHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCwgdW5zaWduZWQgaXNzdWVfZmxhZ3MpCiB7CiAJc3RydWN0IGlvX2tpb2NiICpyZXEgPSBjbWRfdG9faW9fa2lvY2IoaW91Y21kKTsKIApAQCAtMTU5LDE1ICYjNDM7MTcxLDYgQEAgdm9pZCBfX2lvX3VyaW5nX2NtZF9kb25lKHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCwgczMyIHJldCwgdTY0IHJlczIsCiAKIAlpb191cmluZ19jbWRfZGVsX2NhbmNlbGFibGUoaW91Y21kLCBpc3N1ZV9mbGFncyk7CiAKLQlpZiAocmV0ICZsdDsgMCkKLQkJcmVxX3NldF9mYWlsKHJlcSk7Ci0KLQlpb19yZXFfc2V0X3JlcyhyZXEsIHJldCwgMCk7Ci0JaWYgKGlzX2NxZTMyKSB7Ci0JCWlmIChyZXEtJmd0O2N0eC0mZ3Q7ZmxhZ3MgJmFtcDsgSU9SSU5HX1NFVFVQX0NRRV9NSVhFRCkKLQkJCXJlcS0mZ3Q7Y3FlLmZsYWdzIHw9IElPUklOR19DUUVfRl8zMjsKLQkJaW9fcmVxX3NldF9jcWUzMl9leHRyYShyZXEsIHJlczIsIDApOwotCX0KIAlpb19yZXFfdXJpbmdfY2xlYW51cChyZXEsIGlzc3VlX2ZsYWdzKTsKIAlpZiAocmVxLSZndDtmbGFncyAmYW1wOyBSRVFfRl9JT1BPTEwpIHsKIAkJLyogb3JkZXIgd2l0aCBpb19kb19pb3BvbGwoKSBjaGVja2luZyAtJmd0O2lvcG9sbF9jb21wbGV0ZWQgKi8KQEAgLTE4MSw3ICYjNDM7MTg0LDcgQEAgdm9pZCBfX2lvX3VyaW5nX2NtZF9kb25lKHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCwgczMyIHJldCwgdTY0IHJlczIsCiAJCWlvX3JlcV90YXNrX3dvcmtfYWRkKHJlcSk7CiAJfQogfQotRVhQT1JUX1NZTUJPTF9HUEwoX19pb191cmluZ19jbWRfZG9uZSk7CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoaW9fdXJpbmdfY21kX2RvbmUpOwogCiBpbnQgaW9fdXJpbmdfY21kX3ByZXAoc3RydWN0IGlvX2tpb2NiICpyZXEsIGNvbnN0IHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSkKIHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTk6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzMxOQoJCQkJCQkJb3V0cHV0OiA1NwoJCQkJCQkJdGhvdWdodHM6IDcwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIGlvX3VyaW5nIFBhdGNoKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIGEgc2lnbmlmaWNhbnQgY2hhbmdlLCByaWdodD8gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgYSBjb3JlIGtlcm5lbCBBUEkgbW9kaWZpY2F0aW9uIGNvbmNlcm5pbmcgaW9fdXJpbmcgY29tbWFuZCByZXN1bHQgaGFuZGxpbmcuIFNlZWluZyBtb2RpZmljYXRpb25zIHRvIGBpb191cmluZ19jbWRfZG9uZWAgYW5kIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYGlvX3VyaW5nX2NtZF9zZXRfcmVzYCBhbmQgYGlvX3VyaW5nX2NtZF9zZXRfcmVzMzJgIGltbWVkaWF0ZWx5IGZsYWdzIHRoaXMgYXMgc29tZXRoaW5nIHRoYXQgd2FycmFudHMgY2FyZWZ1bCBzY3J1dGlueS4gQmVjYXVzZSBpdCBjaGFuZ2VzIHRoZSByZXR1cm4gc3RhdHVzLCBpdCBpcyB2ZXJ5IGxpa2VseSB3ZSBtYXkgaW50cm9kdWNlIG5ldyBidWdzLgoKVGhlIGZhY3QgdGhhdCB0aGlzIHRvdWNoZXMgYSBicmVhZHRoIG9mIHN1YnN5c3RlbXMgLSBgYmxvY2svaW9jdGwuY2AsIGBkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmNgLCBgZHJpdmVycy9udm1lL2hvc3QvaW9jdGwuY2AsIGBkcml2ZXJzL3Njc2kvc2NzaV9ic2cuY2AsIGBmcy9idHJmcy9pb2N0bC5jYCwgYGZzL2Z1c2UvZGV2X3VyaW5nLmNgLCBhbG9uZyB3aXRoIHRoZSBoZWFkZXIgYW5kIGNvcmUgaW9fdXJpbmcgZmlsZXMgKGBpbmNsdWRlL2xpbnV4L2lvX3VyaW5nL2NtZC5oYCBhbmQgYGlvX3VyaW5nL3VyaW5nX2NtZC5jYCkg4oCTIHJlaW5mb3JjZXMgdGhhdCBpbXByZXNzaW9uLiBUaGlzIG1lYW5zIGZ1bmN0aW9uYWwgaW1wYWN0IGlzIHByZXR0eSBtdWNoIGd1YXJhbnRlZWQsIGFuZCB3ZSBzaG91bGQgcHJpb3JpdGl6ZSBmdXp6aW5nIHRvIHNtb2tlIG91dCBhbnkgaXNzdWVzLgoKTm93LCBsZXQmIzM5O3MgaWRlbnRpZnkgdGhlIGZvY2FsIHBvaW50cy4gTXkgaW5zdGluY3QgaXMgdG8gZm9jdXMgb24gdGhlIGZ1bmN0aW9ucyBkaXJlY3RseSBpbnZvbHZlZCBpbiB0aGlzIG5ldyByZXN1bHQgaGFuZGxpbmc6IGBpb191cmluZ19jbWRfc2V0X3Jlc2AsIGBpb191cmluZ19jbWRfc2V0X3JlczMyYCwgYW5kIGBpb191cmluZ19jbWRfZG9uZWAuIEJleW9uZCB0aG9zZSwgSSYjMzk7bGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB3aGVyZSB0aGVzZSBjaGFuZ2VzIGFyZSAqdXNlZCo6IGB1YmxrX2NoX3VyaW5nX2NtZF9jYmAsIGBudm1lX3VyaW5nX2NtZF9lbmRfaW9gLCBgc2NzaV9ic2dfdXJpbmdfdGFza19jYmAsIGBidHJmc191cmluZ19yZWFkX2ZpbmlzaGVkYCwgYW5kIGBmdXNlX3VyaW5nX3NlbmRgLgoKTmV4dCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBleHBvc3VyZSBvZiB0aGVzZSBzeW1ib2xzLiBBcmUgYGlvX3VyaW5nX2NtZF9zZXRfcmVzYCBhbmQgYGlvX3VyaW5nX2NtZF9zZXRfcmVzMzJgIGV4cG9ydGVkPyBBaCwgeWVzLCBgRVhQT1JUX1NZTUJPTF9HUExgLiBOb3csIGxldCYjMzk7cyBpZGVudGlmeSB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIGBDT05GSUdfSU9fVVJJTkdgIGlzIGEgZ2l2ZW4uIFdlJiMzOTtsbCBuZWVkIGBDT05GSUdfQkxLX0RFVl9VQkxLYCwgYENPTkZJR19OVk1FX0NPUkVgLCBgQ09ORklHX0JMS19ERVZfQlNHYCwgYENPTkZJR19CVFJGU19GU2AsIGFuZCBgQ09ORklHX0ZVU0VfRlNgIHRvIGVuc3VyZSB0aGUgcmVsZXZhbnQgY29kZSBwYXRocyBhcmUgdGVzdGVkLiBJIHdpbGwgdXNlIGBncmVwcGVyYCB0byBkb3VibGUtY2hlY2sgdGhvc2UgY29uZmlnIG5hbWVzLgoKVGhpcyBwYXRjaCBpcyBnb2luZyB0byByZXF1aXJlIGEgdGhvcm91Z2ggcmV2aWV3LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDE5OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0Oyhjb25maWcgQkxLX0RFVl9VQkxLfGNvbmZpZyBOVk1FX0NPUkV8Y29uZmlnIEJMS19ERVZfQlNHfGNvbmZpZyBCVFJGU19GU3xjb25maWcgRlVTRV9GU3xjb25maWcgSU9fVVJJTkcpJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL0tjb25maWc9NDU9Y29uZmlnIEJMS19DR1JPVVBfUFVOVF9CSU9cbi0tXG5ibG9jay9LY29uZmlnLTQ3LVxuYmxvY2svS2NvbmZpZzo0ODpjb25maWcgQkxLX0RFVl9CU0dfQ09NTU9OXG5ibG9jay9LY29uZmlnLTQ5LVx0dHJpc3RhdGVcbi0tXG5ibG9jay9LY29uZmlnPTUxPWNvbmZpZyBCTEtfSUNRXG4tLVxuYmxvY2svS2NvbmZpZy01My1cbmJsb2NrL0tjb25maWc6NTQ6Y29uZmlnIEJMS19ERVZfQlNHTElCXG5ibG9jay9LY29uZmlnLTU1LVx0Ym9vbCBcJiMzNDtCbG9jayBsYXllciBTRyBzdXBwb3J0IHY0IGhlbHBlciBsaWJcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc9MzE1PWNvbmZpZyBCTEtfREVWX1JCRFxuLS1cbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0zMjctXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MzI4OmNvbmZpZyBCTEtfREVWX1VCTEtcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0zMjktXHR0cmlzdGF0ZSBcJiMzNDtVc2Vyc3BhY2UgYmxvY2sgZHJpdmVyIChFeHBlcmltZW50YWwpXCYjMzQ7XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZzoyOmNvbmZpZyBOVk1FX0NPUkVcbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWctMy1cdHRyaXN0YXRlXG4tLVxuZHJpdmVycy9zY3NpL0tjb25maWc9MTMxPWNvbmZpZyBDSFJfREVWX1NHXG4tLVxuZHJpdmVycy9zY3NpL0tjb25maWctMTU1LVxuZHJpdmVycy9zY3NpL0tjb25maWc6MTU2OmNvbmZpZyBCTEtfREVWX0JTR1xuZHJpdmVycy9zY3NpL0tjb25maWctMTU3LVx0Ym9vbCBcJiMzNDsvZGV2L2JzZyBzdXBwb3J0IChTRyB2NClcJiMzNDtcbi0tXG5mcy9idHJmcy9LY29uZmlnLTItXG5mcy9idHJmcy9LY29uZmlnOjM6Y29uZmlnIEJUUkZTX0ZTXG5mcy9idHJmcy9LY29uZmlnLTQtXHR0cmlzdGF0ZSBcJiMzNDtCdHJmcyBmaWxlc3lzdGVtIHN1cHBvcnRcJiMzNDtcbi0tXG5mcy9idHJmcy9LY29uZmlnLTM4LVxuZnMvYnRyZnMvS2NvbmZpZzozOTpjb25maWcgQlRSRlNfRlNfUE9TSVhfQUNMXG5mcy9idHJmcy9LY29uZmlnLTQwLVx0Ym9vbCBcJiMzNDtCdHJmcyBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1wmIzM0O1xuLS1cbmZzL2J0cmZzL0tjb25maWctNDgtXG5mcy9idHJmcy9LY29uZmlnOjQ5OmNvbmZpZyBCVFJGU19GU19SVU5fU0FOSVRZX1RFU1RTXG5mcy9idHJmcy9LY29uZmlnLTUwLVx0Ym9vbCBcJiMzNDtCdHJmcyB3aWxsIHJ1biBzYW5pdHkgdGVzdHMgdXBvbiBsb2FkaW5nXCYjMzQ7XG4tLVxuZnMvZnVzZS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9mdXNlL0tjb25maWc6Mjpjb25maWcgRlVTRV9GU1xuZnMvZnVzZS9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtGVVNFIChGaWxlc3lzdGVtIGluIFVzZXJzcGFjZSkgc3VwcG9ydFwmIzM0O1xuLS1cbmluaXQvS2NvbmZpZz0xOTE2PWNvbmZpZyBBSU9cbi0tXG5pbml0L0tjb25maWctMTkyMy1cbmluaXQvS2NvbmZpZzoxOTI0OmNvbmZpZyBJT19VUklOR1xuaW5pdC9LY29uZmlnLTE5MjUtXHRib29sIFwmIzM0O0VuYWJsZSBJTyB1cmluZyBzdXBwb3J0XCYjMzQ7IGlmIEVYUEVSVFxuLS1cbmluaXQvS2NvbmZpZz0xOTMzPWNvbmZpZyBHQ09WX1BST0ZJTEVfVVJJTkdcbi0tXG5pbml0L0tjb25maWctMTk0NS1cbmluaXQvS2NvbmZpZzoxOTQ2OmNvbmZpZyBJT19VUklOR19NT0NLX0ZJTEVcbmluaXQvS2NvbmZpZy0xOTQ3LVx0dHJpc3RhdGUgXCYjMzQ7RW5hYmxlIGlvX3VyaW5nIG1vY2sgZmlsZXMgKEV4cGVyaW1lbnRhbClcJiMzNDsgaWYgRVhQRVJUXG4tLVxuaW9fdXJpbmcvS2NvbmZpZy01LVxuaW9fdXJpbmcvS2NvbmZpZzo2OmNvbmZpZyBJT19VUklOR19aQ1JYXG5pb191cmluZy9LY29uZmlnLTctXHRkZWZfYm9vbCB5XG4tLVxuaW9fdXJpbmcvS2NvbmZpZy0xMi1cbmlvX3VyaW5nL0tjb25maWc6MTM6Y29uZmlnIElPX1VSSU5HX0JQRlxuaW9fdXJpbmcvS2NvbmZpZy0xNC1cdGRlZl9ib29sIHlcbi0tXG5pb191cmluZy9LY29uZmlnLTE3LVxuaW9fdXJpbmcvS2NvbmZpZzoxODpjb25maWcgSU9fVVJJTkdfQlBGX09QU1xuaW9fdXJpbmcvS2NvbmZpZy0xOS1cdGRlZl9ib29sIHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxOToyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTQzCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogOTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGNvbmZpZ3VyYXRpb25zOiBgSU9fVVJJTkdgLCBgQkxLX0RFVl9VQkxLYCwgYE5WTUVfQ09SRWAsIGBCTEtfREVWX0JTR2AsIGBCVFJGU19GU2AsIGFuZCBgRlVTRV9GU2AuIEkga25vdyB0aGVzZSwgZ2VuZXJhbGx5LCBidXQgSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgYE5WTUVfQ09SRWAgZm9yIHRoaXMgcGFydGljdWxhciB0ZXN0IHNjZW5hcmlvLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55IGNyaXRpY2FsIGRlcGVuZGVuY2llcy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoYXQgYXJlIHRoZSByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIHRoYXQgYXJlIGFsc28gcmVxdWlyZWQ/IE9mZiB0aGUgdG9wIG9mIG15IGhlYWQsIEnigJltIHRoaW5raW5nIEnigJlsbCBuZWVkIHRvIHZlcmlmeSBgQkxLX0RFVl9OVk1FYCBpcyBlbmFibGVkLiBJdCBjb3VsZCBhbHNvIHBvdGVudGlhbGx5IGJlIGBOVk1FX1RBUkdFVGAsIG9yIHNvbWV0aGluZyBlbHNlIHNwZWNpZmljYWxseSBOVk1lIHJlbGF0ZWQuIEdvdHRhIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgdGhvcm91Z2hseSB0byBlbnN1cmUgdGhpcyB3aG9sZSB0aGluZyB3b3JrcyBwcm9wZXJseSBhbmQgSSYjMzk7bSBub3QgbWlzc2luZyBzb21ldGhpbmcgZnVuZGFtZW50YWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTk6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJMS19ERVZfTlZNRSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL252bWUvaG9zdC9LY29uZmlnPTI9Y29uZmlnIE5WTUVfQ09SRVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWctNC1cbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWc6NTpjb25maWcgQkxLX0RFVl9OVk1FXG5kcml2ZXJzL252bWUvaG9zdC9LY29uZmlnLTYtXHR0cmlzdGF0ZSBcJiMzNDtOVk0gRXhwcmVzcyBibG9jayBkZXZpY2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxOToyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5OTM0CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQWRkaW5nIE5WTWUgQmxvY2sgRGV2aWNlIFN1cHBvcnQgdG8gTXkgUHJvamVjdCoqCgpBbHJpZ2h0LCB0aGUgbmV4dCB0YXNrIG9uIG15IGxpc3QgaXMgcHJldHR5IGNsZWFyOiBJJiMzOTttIGdvaW5nIHRvIGFkZCBgQkxLX0RFVl9OVk1FYCB0byB0aGUgc3lzdGVtLiBUaGF0JiMzOTtzIHRoZSBjb3JlIG9mIHRoZSBpbXBsZW1lbnRhdGlvbi4gTm93LCBiZWZvcmUgSSBqdW1wIGhlYWRmaXJzdCBpbnRvIHRoZSBuZXcgY29kZSwgSSB3YW50IHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgaG93IHRoZSByZWxldmFudCBzdHJ1Y3R1cmVzIGFyZSBoYW5kbGVkIGluIHRoZSBleGlzdGluZyBjb2RlYmFzZS4gTXkgbWFpbiBjb25jZXJuIGlzIHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBgaW9fdXJpbmdgIGNvbW1hbmRzLgoKU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IGhvdyByZXN1bHRzIGFyZSBzZXQgYW5kIGhhbmRsZWQgd2l0aGluIHRoZSBgaW9fdXJpbmdgIGNvbnRleHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIG1hbmFnZXMgdGhlIHJldHVybiB2YWx1ZXMgZm9yIHRoZXNlIGJsb2NrIGRldmljZXMgd2l0aGluIHRoZSBgaW9fdXJpbmdgIGZyYW1ld29yay4gSSYjMzk7bGwgbmVlZCB0byBzY3J1dGluaXplIGBpb191cmluZ19jbWRfc2V0X3Jlc2AgYW5kIGBpb191cmluZ19jbWRfc2V0X3JlczMyYCBpbiBgaW9fdXJpbmcvdXJpbmdfY21kLmNgLiBJIGhhdmUgYSBmZWVsaW5nIHRob3NlIGFyZSBnb2luZyB0byBiZSBrZXkgcGllY2VzIG9mIHRoZSBwdXp6bGUgZm9yIHByb3Blcmx5IGhhbmRsaW5nIE5WTWUgY29tcGxldGlvbiBxdWV1ZXMgYW5kIEkvTyBzdGF0dXMuIEl0IHdpbGwgYWxzbyBnaXZlIG1lIGEgc29saWQgcG9pbnQgdG8gaG9vayBpbnRvIGluIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgYmxvY2sgZGV2aWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDE5OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZvaWQgaW9fdXJpbmdfY21kX3NldF9yZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9pb191cmluZy9jbWQuaD00OT1pbnQgaW9fdXJpbmdfY21kX2ltcG9ydF9maXhlZF92ZWMoc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y21kLFxuLS1cbmluY2x1ZGUvbGludXgvaW9fdXJpbmcvY21kLmgtNTUtLyogT25lIG9mIHRoZXNlIG11c3QgYmUgY2FsbGVkIHByaW9yIHRvIGlvX3VyaW5nX2NtZF9kb25lKCkgKi9cbmluY2x1ZGUvbGludXgvaW9fdXJpbmcvY21kLmg6NTY6dm9pZCBpb191cmluZ19jbWRfc2V0X3JlcyhzdHJ1Y3QgaW9fdXJpbmdfY21kICosIHMzMiByZXQpO1xuaW5jbHVkZS9saW51eC9pb191cmluZy9jbWQuaDo1Nzp2b2lkIGlvX3VyaW5nX2NtZF9zZXRfcmVzMzIoc3RydWN0IGlvX3VyaW5nX2NtZCAqLCBzMzIgcmV0LCB1NjQgcmVzMik7XG5pbmNsdWRlL2xpbnV4L2lvX3VyaW5nL2NtZC5oLTU4LVxuLS1cbmluY2x1ZGUvbGludXgvaW9fdXJpbmcvY21kLmg9MTA1PXN0YXRpYyBpbmxpbmUgaW50IGlvX3VyaW5nX2NtZF9pbXBvcnRfZml4ZWRfdmVjKHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCxcbi0tXG5pbmNsdWRlL2xpbnV4L2lvX3VyaW5nL2NtZC5oLTExMi19XG5pbmNsdWRlL2xpbnV4L2lvX3VyaW5nL2NtZC5oOjExMzpzdGF0aWMgaW5saW5lIHZvaWQgaW9fdXJpbmdfY21kX3NldF9yZXMoc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLCBzMzIgcmV0KVxuaW5jbHVkZS9saW51eC9pb191cmluZy9jbWQuaC0xMTQte1xuaW5jbHVkZS9saW51eC9pb191cmluZy9jbWQuaC0xMTUtfVxuaW5jbHVkZS9saW51eC9pb191cmluZy9jbWQuaDoxMTY6c3RhdGljIGlubGluZSB2b2lkIGlvX3VyaW5nX2NtZF9zZXRfcmVzMzIoc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLCBzMzIgcmV0LFxuaW5jbHVkZS9saW51eC9pb191cmluZy9jbWQuaC0xMTctXHRcdFx0XHRcdCAgdTY0IHJlczIpXG4tLVxuaW9fdXJpbmcvdXJpbmdfY21kLmM9MTM5PUVYUE9SVF9TWU1CT0xfR1BMKF9faW9fdXJpbmdfY21kX2RvX2luX3Rhc2spO1xuaW9fdXJpbmcvdXJpbmdfY21kLmMtMTQwLVxuaW9fdXJpbmcvdXJpbmdfY21kLmM6MTQxOnZvaWQgaW9fdXJpbmdfY21kX3NldF9yZXMoc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLCBzMzIgcmV0KVxuaW9fdXJpbmcvdXJpbmdfY21kLmMtMTQyLXtcbi0tXG5pb191cmluZy91cmluZ19jbWQuYz0xNDk9RVhQT1JUX1NZTUJPTF9HUEwoaW9fdXJpbmdfY21kX3NldF9yZXMpO1xuaW9fdXJpbmcvdXJpbmdfY21kLmMtMTUwLVxuaW9fdXJpbmcvdXJpbmdfY21kLmM6MTUxOnZvaWQgaW9fdXJpbmdfY21kX3NldF9yZXMzMihzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsIHMzMiByZXQsIHU2NCByZXMyKVxuaW9fdXJpbmcvdXJpbmdfY21kLmMtMTUyLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxOToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDg4NgoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDQwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWZpbmluZyB0aGUgRm9jdXM6IENvcmUgQVBJIENoYW5nZXMgYW5kIEtleSBDYWxsZXJzKioKCk9rYXksIGxldCYjMzk7cyBkaXN0aWxsIHRoaXMgZG93bi4gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0aGVzZSBpb191cmluZyBjaGFuZ2VzIGFyZSBpbXBsZW1lbnRlZCBhbmQgSSBuZWVkIHRvIGRlZmluZSB0aGUgc2NvcGUgb2YgYW5hbHlzaXMuIEkgc2VlIGEgYnVuY2ggb2Ygc3ltYm9scywgYW5kIEkgbmVlZCB0byBpZGVudGlmeSB3aGF0JiMzOTtzIGNyaXRpY2FsLiBSaWdodCwgc28gYGlvX3VyaW5nX2NtZF9zZXRfcmVzYCwgYGlvX3VyaW5nX2NtZF9zZXRfcmVzMzJgLCBhbmQgYGlvX3VyaW5nX2NtZF9kb25lYCBpbW1lZGlhdGVseSBzdGFuZCBvdXQuIFRob3NlIGFyZSB0aGUgaGVhcnQgb2YgdGhlIEFQSSBtb2RpZmljYXRpb25zIHRoZW1zZWx2ZXMuIFRoZXkgYXJlIHRoZSBjb3JlIGNoYW5nZXMuCgpUaGVuIHRoZXJlIGFyZSBjYWxsZXJzIHRvIHRob3NlIGNvcmUgY2hhbmdlczsgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSAqdXNpbmcqIHRoZSBuZXcgaW9fdXJpbmcgZnVuY3Rpb25hbGl0eS4gV2Ugc2hvdWxkIGluY2x1ZGUgc29tZSBvZiB0aGVzZSBmb3IgdGhlIHN1bW1hcnk6IGBibGtfY21kX2NvbXBsZXRlYCwgYHVibGtfY2hfdXJpbmdfY21kX2NiYCwgYG52bWVfdXJpbmdfY21kX2VuZF9pb2AsIGBzY3NpX2JzZ191cmluZ190YXNrX2NiYCwgYGJ0cmZzX3VyaW5nX3JlYWRfZmluaXNoZWRgLCBhbmQgYGZ1c2VfdXJpbmdfc2VuZGAgYXJlIHByb2JhYmx5IHRoZSBtb3N0IHNhbGllbnQgZXhhbXBsZXMuCgpJJiMzOTtsbCBjaGVjayB0aGUgY29uZmlnIG9wdGlvbnMgYXNzb2NpYXRlZCB3aXRoIGVhY2ggcGFydCBvZiB0aGlzIHNvIEkga25vdyB3aGVyZSB0aGUgc3VwcG9ydCBsaWVzLiBJdCBsb29rcyBsaWtlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBhcmUgYElPX1VSSU5HYCwgYEJMS19ERVZfVUJMS2AsIGBOVk1FX0NPUkVgLCBgQkxLX0RFVl9OVk1FYCwgYEJMS19ERVZfQlNHYCwgYEJUUkZTX0ZTYCwgYW5kIGBGVVNFX0ZTYC4KCkp1c3QgYSBxdWljayBjaGVjay4uLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGBmdXNlX3VyaW5nX3NlbmRgIGlzIHN0YXRpYyBvciBub3QuIFRoaXMgYWZmZWN0cyB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDE5OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Z1c2VfdXJpbmdfc2VuZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9mdXNlL2Rldl91cmluZy5jPTkyMT1zdGF0aWMgaW50IGZ1c2VfcmluZ19lbnRfc2V0X2NvbW1pdChzdHJ1Y3QgZnVzZV9yaW5nX2VudCAqZW50KVxuLS1cbmZzL2Z1c2UvZGV2X3VyaW5nLmMtOTM1LVxuZnMvZnVzZS9kZXZfdXJpbmcuYzo5MzY6c3RhdGljIHZvaWQgZnVzZV91cmluZ19zZW5kKHN0cnVjdCBmdXNlX3JpbmdfZW50ICplbnQsIHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCxcbmZzL2Z1c2UvZGV2X3VyaW5nLmMtOTM3LVx0XHRcdCAgICBzc2l6ZV90IHJldCwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuLS1cbmZzL2Z1c2UvZGV2X3VyaW5nLmM9OTUzPXN0YXRpYyBpbnQgZnVzZV91cmluZ19jb21taXRfZmV0Y2goc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLCBpbnQgaXNzdWVfZmxhZ3MsXG4tLVxuZnMvZnVzZS9kZXZfdXJpbmcuYy0xMDI3LVx0aWYgKGZ1c2VfdXJpbmdfZ2V0X25leHRfZnVzZV9yZXEoZW50LCBxdWV1ZSkpXG5mcy9mdXNlL2Rldl91cmluZy5jOjEwMjg6XHRcdGZ1c2VfdXJpbmdfc2VuZChlbnQsIGNtZCwgMCwgaXNzdWVfZmxhZ3MpO1xuZnMvZnVzZS9kZXZfdXJpbmcuYy0xMDI5LVx0cmV0dXJuIDA7XG4tLVxuZnMvZnVzZS9kZXZfdXJpbmcuYz0xMjIxPWludCBmdXNlX3VyaW5nX2NtZChzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbi0tXG5mcy9mdXNlL2Rldl91cmluZy5jLTEyOTItICovXG5mcy9mdXNlL2Rldl91cmluZy5jOjEyOTM6c3RhdGljIHZvaWQgZnVzZV91cmluZ19zZW5kX2luX3Rhc2soc3RydWN0IGlvX3R3X3JlcSB0d19yZXEsIGlvX3R3X3Rva2VuX3QgdHcpXG5mcy9mdXNlL2Rldl91cmluZy5jLTEyOTQte1xuLS1cbmZzL2Z1c2UvZGV2X3VyaW5nLmMtMTMwNy1cdFx0fVxuZnMvZnVzZS9kZXZfdXJpbmcuYzoxMzA4Olx0XHRmdXNlX3VyaW5nX3NlbmQoZW50LCBjbWQsIGVyciwgaXNzdWVfZmxhZ3MpO1xuZnMvZnVzZS9kZXZfdXJpbmcuYy0xMzA5LVx0fSBlbHNlIHtcbi0tXG5mcy9mdXNlL2Rldl91cmluZy5jPTEzNDQ9c3RhdGljIHZvaWQgZnVzZV91cmluZ19kaXNwYXRjaF9lbnQoc3RydWN0IGZ1c2VfcmluZ19lbnQgKmVudClcbi0tXG5mcy9mdXNlL2Rldl91cmluZy5jLTEzNDgtXHR1cmluZ19jbWRfc2V0X3JpbmdfZW50KGNtZCwgZW50KTtcbmZzL2Z1c2UvZGV2X3VyaW5nLmM6MTM0OTpcdGlvX3VyaW5nX2NtZF9jb21wbGV0ZV9pbl90YXNrKGNtZCwgZnVzZV91cmluZ19zZW5kX2luX3Rhc2spO1xuZnMvZnVzZS9kZXZfdXJpbmcuYy0xMzUwLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTk6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIyMzcKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyOTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVmaW5pbmcgdGhlIExpc3Qgb2YgQ29yZSBpb191cmluZyBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgdG8gaGFuZGxlIHRoZSBgaW9fdXJpbmdgIGZ1bmN0aW9ucy4gYGZ1c2VfdXJpbmdfc2VuZGAgaXMgc3RhdGljLCBzbyBpdCBzZWVtcyByZWR1bmRhbnQgdG8gaW5jbHVkZSBpdC4gSXQmIzM5O3MgYmVzdCB0byBzdGljayB0byBub24tc3RhdGljIG9yIGVzc2VudGlhbCBmdW5jdGlvbnMuIEZvY3VzaW5nIG9uIHRoYXQsIEkmIzM5O3ZlIGlkZW50aWZpZWQgYGlvX3VyaW5nX2NtZF9zZXRfcmVzYCwgYGlvX3VyaW5nX2NtZF9zZXRfcmVzMzJgLCBhbmQgYGlvX3VyaW5nX2NtZF9kb25lYCBhcyB0aGUgY3JpdGljYWwgb25lcy4gTGV0JiMzOTtzIGp1c3QgbGlzdCB0aG9zZSBmb3Igbm93LCBhbmQgcG90ZW50aWFsbHkgYWRkIGEgZmV3IG5vbi1zdGF0aWMgb25lcyBpZiB0aGV5IHN0YW5kIG91dC4KCkkgYWxzbyBjaGVja2VkIG90aGVyIGZ1bmN0aW9ucy4gSSBub3RpY2VkIHRoYXQgYGJsa19jbWRfY29tcGxldGVgLCBgdWJsa19jaF91cmluZ19jbWRfY2JgLCBgbnZtZV91cmluZ19jbWRfZW5kX2lvYCwgYHNjc2lfYnNnX3VyaW5nX3Rhc2tfY2JgLCBhbmQgYGJ0cmZzX3VyaW5nX3JlYWRfZmluaXNoZWRgIGFyZSBhbGwgc3RhdGljLiBHaXZlbiB0aGV5JiMzOTtyZSBzdGF0aWMsIHRoZXkgbWlnaHQgYmUgaW5saW5lZCBvciBsYWNrIGNsZWFyIHN5bWJvbCBhZGRyZXNzZXMsIHNvIEkgc2hvdWxkIG9taXQgdGhlbS4KClRoZXJlZm9yZSwgZm9yIHRoZSBsaXN0LCBJJiMzOTtsbCBzdGljayB3aXRoIHRoZSBleHBvcnRlZCBmdW5jdGlvbnM6IGBpb191cmluZ19jbWRfc2V0X3Jlc2AsIGBpb191cmluZ19jbWRfc2V0X3JlczMyYCwgYW5kIGBpb191cmluZ19jbWRfZG9uZWAuCgpOb3csIGxldCYjMzk7cyBqdXN0IGNvbmZpcm0gdGhhdCBgaW9fdXJpbmdfY21kX2RvbmVgIGlzIGFjdHVhbGx5IGV4cG9ydGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxOToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MX0dQTFxcKGlvX3VyaW5nX2NtZF9kb25lXFwpJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL3VyaW5nX2NtZC5jPTE2NT12b2lkIGlvX3VyaW5nX2NtZF9kb25lKHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCwgdW5zaWduZWQgaXNzdWVfZmxhZ3MpXG4tLVxuaW9fdXJpbmcvdXJpbmdfY21kLmMtMTg2LX1cbmlvX3VyaW5nL3VyaW5nX2NtZC5jOjE4NzpFWFBPUlRfU1lNQk9MX0dQTChpb191cmluZ19jbWRfZG9uZSk7XG5pb191cmluZy91cmluZ19jbWQuYy0xODgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDE5OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyOTcwCgkJCQkJCQlvdXRwdXQ6IDI0MwoJCQkJCQkJdGhvdWdodHM6IDI1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBpb191cmluZyBBUEkgQ2hhbmdlKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGluIGZyb250IG9mIG1lLCBhbmQgaXQgbG9va3MgbGlrZSBhIHByZXR0eSBzaWduaWZpY2FudCBzaGlmdCBpbiBob3cgaW9fdXJpbmcgaGFuZGxlcyBjb21tYW5kIHJlc3VsdHMuIEVzc2VudGlhbGx5LCB0aGV5JiMzOTtyZSBicmVha2luZyBkb3duIGBpb191cmluZ19jbWRfZG9uZWAgaW50byB0d28gcGFydHM6IGBpb191cmluZ19jbWRfc2V0X3Jlc2AgKG9yIGBpb191cmluZ19jbWRfc2V0X3JlczMyYCkgYW5kIGBpb191cmluZ19jbWRfZG9uZWAuIFRoaXMgaXMgYSBjb3JlIEFQSSBtb2RpZmljYXRpb24uCgpUaGUgc3ltYm9scyB0aGF0IHJlYWxseSBzdGFuZCBvdXQgYXJlOiBgaW9fdXJpbmdfY21kX3NldF9yZXNgLCBgaW9fdXJpbmdfY21kX3NldF9yZXMzMmAsIGFuZCBgaW9fdXJpbmdfY21kX2RvbmVgLiBUaGVzZSBhcmUgdGhlIGtleSBwaWVjZXMgb2YgdGhlIHB1enpsZS4gSSBhbHNvIHNlZSB0aGVzZSBjb25maWdzIHBvdGVudGlhbGx5IGJlaW5nIGFmZmVjdGVkOiBgSU9fVVJJTkdgLCBgQkxLX0RFVl9VQkxLYCwgYE5WTUVfQ09SRWAsIGBCTEtfREVWX05WTUVgLCBgQkxLX0RFVl9CU0dgLCBgQlRSRlNfRlNgLCBhbmQgYEZVU0VfRlNgLiBUaGlzIGNoYW5nZSBjbGVhcmx5IHJpcHBsZXMgYWNyb3NzIHF1aXRlIGEgZmV3IHN1YnN5c3RlbXMsIGluY2x1ZGluZyBibG9jayBkZXZpY2VzLCB1YmxrLCBOVk1lLCBTQ1NJLCBCdHJmcywgYW5kIEZVU0UuCgpTaW5jZSBpdCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCB0aGlzIG5lZWRzIHNvbWUgc2VyaW91cyBmdXp6aW5nIGFuZCB0ZXN0aW5nIHRvIG1ha2Ugc3VyZSB3ZSYjMzk7cmUgbm90IGludHJvZHVjaW5nIHJlZ3Jlc3Npb25zIG9yIGJ1Z3MgaW4gdGhlIHdheSByZXN1bHRzIGFyZSBoYW5kbGVkLiBMZXQmIzM5O3MgY2FsbCB0aGlzIHRoZSBgc2V0LXJlc3VsdHNgIGNoYW5nZSwgYW5kIGdldCB0byB3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxOToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU9fVVJJTkcmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9VQkxLJiMzNDssCiAgICAmIzM0O05WTUVfQ09SRSYjMzQ7LAogICAgJiMzNDtCTEtfREVWX05WTUUmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9CU0cmIzM0OywKICAgICYjMzQ7QlRSRlNfRlMmIzM0OywKICAgICYjMzQ7RlVTRV9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lvX3VyaW5nX2NtZF9zZXRfcmVzJiMzNDssCiAgICAmIzM0O2lvX3VyaW5nX2NtZF9zZXRfcmVzMzImIzM0OywKICAgICYjMzQ7aW9fdXJpbmdfY21kX2RvbmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgaW9fdXJpbmcgY29tbWFuZCBBUEkgYnkgc3BsaXR0aW5nIGBpb191cmluZ19jbWRfZG9uZWAgaW50byBgaW9fdXJpbmdfY21kX3NldF9yZXNgIChvciBgaW9fdXJpbmdfY21kX3NldF9yZXMzMmApIGFuZCBgaW9fdXJpbmdfY21kX2RvbmVgLiBUaGlzIGFmZmVjdHMgaG93IHJlc3VsdHMgYXJlIHJldHVybmVkIGZvciBpb191cmluZyBjb21tYW5kcyBhY3Jvc3MgbXVsdGlwbGUgc3Vic3lzdGVtcyBpbmNsdWRpbmcgYmxvY2ssIHVibGssIG52bWUsIHNjc2kgYnNnLCBidHJmcywgYW5kIGZ1c2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBrZXJuZWwgQVBJIGFuZCBpdHMgY2FsbGVycywgd2hpY2ggaXMgd29ydGggZnV6emluZyB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgaW5jb3JyZWN0IHJlc3VsdCBoYW5kbGluZyBhcmUgaW50cm9kdWNlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU9fVVJJTkcmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9VQkxLJiMzNDssCiAgICAmIzM0O05WTUVfQ09SRSYjMzQ7LAogICAgJiMzNDtCTEtfREVWX05WTUUmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9CU0cmIzM0OywKICAgICYjMzQ7QlRSRlNfRlMmIzM0OywKICAgICYjMzQ7RlVTRV9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lvX3VyaW5nX2NtZF9zZXRfcmVzJiMzNDssCiAgICAmIzM0O2lvX3VyaW5nX2NtZF9zZXRfcmVzMzImIzM0OywKICAgICYjMzQ7aW9fdXJpbmdfY21kX2RvbmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgaW9fdXJpbmcgY29tbWFuZCBBUEkgYnkgc3BsaXR0aW5nIGBpb191cmluZ19jbWRfZG9uZWAgaW50byBgaW9fdXJpbmdfY21kX3NldF9yZXNgIChvciBgaW9fdXJpbmdfY21kX3NldF9yZXMzMmApIGFuZCBgaW9fdXJpbmdfY21kX2RvbmVgLiBUaGlzIGFmZmVjdHMgaG93IHJlc3VsdHMgYXJlIHJldHVybmVkIGZvciBpb191cmluZyBjb21tYW5kcyBhY3Jvc3MgbXVsdGlwbGUgc3Vic3lzdGVtcyBpbmNsdWRpbmcgYmxvY2ssIHVibGssIG52bWUsIHNjc2kgYnNnLCBidHJmcywgYW5kIGZ1c2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBrZXJuZWwgQVBJIGFuZCBpdHMgY2FsbGVycywgd2hpY2ggaXMgd29ydGggZnV6emluZyB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgaW5jb3JyZWN0IHJlc3VsdCBoYW5kbGluZyBhcmUgaW50cm9kdWNlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTk6MjM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxOToyMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGBpb191cmluZ19jbWRfZG9uZWAgQVBJIGJ5IHNwbGl0dGluZyBpdCBpbnRvIGBpb191cmluZ19jbWRfc2V0X3Jlc2AvYGlvX3VyaW5nX2NtZF9zZXRfcmVzMzJgIGFuZCBgaW9fdXJpbmdfY21kX2RvbmVgLiBUaGUgdmFsdWVzIHBhc3NlZCB0byB0aGVzZSBmdW5jdGlvbnMgcmVtYWluIHRoZSBzYW1lIGFzIGJlZm9yZSwgYW5kIGFsbCBmaWVsZHMgaW4gdGhlIGNvbXBsZXRpb24gcXVldWUgZW50cnkgKENRRSkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgKGUuZy4sIGBleHRyYTJgIGlzIHNldCB0byAwIGluIGBpb19yZXFfc2V0X3JlczMyYCkuIFRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vIGNoYW5nZXMgdG8gYm91bmRzIGNoZWNraW5nLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLiBBbnkgcG90ZW50aWFsIGJ1Z3Mgd291bGQgYmUgbG9naWMgZXJyb3JzIG9yIHVzZS1hZnRlci1mcmVlL291dC1vZi1ib3VuZHMgaXNzdWVzLCB3aGljaCBhcmUgYWRlcXVhdGVseSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBvdGhlciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzNWY2YzFjZDViYzlmNzlkNzdjODVmNmIxZjY4YWMzZjZmMWFhMmMzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMjcgMTk6MjI6MzMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9ibG9jay9pb2N0bC5jIGIvYmxvY2svaW9jdGwuYwppbmRleCA2NGI0ZTZjMGY2OTY1Li45NDZjYWI3NGYyNTNlIDEwMDY0NAotLS0gYS9ibG9jay9pb2N0bC5jCiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL2lvY3RsLmMKQEAgLTg3MSw5ICYjNDM7ODcxLDEwIEBAIHN0YXRpYyB2b2lkIGJsa19jbWRfY29tcGxldGUoc3RydWN0IGlvX3R3X3JlcSB0d19yZXEsIGlvX3R3X3Rva2VuX3QgdHcpCiAKIAlpZiAoYmljLSZndDtyZXMgPT0gLUVBR0FJTiAmYW1wOyZhbXA7IGJpYy0mZ3Q7bm93YWl0KQogCQlpb191cmluZ19jbWRfaXNzdWVfYmxvY2tpbmcoY21kKTsKLQllbHNlCi0JCWlvX3VyaW5nX2NtZF9kb25lKGNtZCwgYmljLSZndDtyZXMsCi0JCQkJICBJT19VUklOR19DTURfVEFTS19XT1JLX0lTU1VFX0ZMQUdTKTsKJiM0MzsJZWxzZSB7CiYjNDM7CQlpb191cmluZ19jbWRfc2V0X3JlcyhjbWQsIGJpYy0mZ3Q7cmVzKTsKJiM0MzsJCWlvX3VyaW5nX2NtZF9kb25lKGNtZCwgSU9fVVJJTkdfQ01EX1RBU0tfV09SS19JU1NVRV9GTEFHUyk7CiYjNDM7CX0KIH0KIAogc3RhdGljIHZvaWQgYmlvX2NtZF9iaW9fZW5kX2lvKHN0cnVjdCBiaW8gKmJpbykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svdWJsa19kcnYuYyBiL2RyaXZlcnMvYmxvY2svdWJsa19kcnYuYwppbmRleCA0ZDE3ZWQyNjRkYTFhLi41MWYxNWU1YjNjMDFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibG9jay91YmxrX2Rydi5jCkBAIC04MzksNyAmIzQzOzgzOSw4IEBAIHN0YXRpYyB2b2lkIHVibGtfYmF0Y2hfZGVpbml0X2ZldGNoX2J1ZihzdHJ1Y3QgdWJsa19xdWV1ZSAqdWJxLAogCV9fdWJsa19yZWxlYXNlX2ZjbWQodWJxKTsKIAlzcGluX3VubG9jaygmYW1wO3VicS0mZ3Q7ZXZ0c19sb2NrKTsKIAotCWlvX3VyaW5nX2NtZF9kb25lKGZjbWQtJmd0O2NtZCwgcmVzLCBkYXRhLSZndDtpc3N1ZV9mbGFncyk7CiYjNDM7CWlvX3VyaW5nX2NtZF9zZXRfcmVzKGZjbWQtJmd0O2NtZCwgcmVzKTsKJiM0MzsJaW9fdXJpbmdfY21kX2RvbmUoZmNtZC0mZ3Q7Y21kLCBkYXRhLSZndDtpc3N1ZV9mbGFncyk7CiAJdWJsa19iYXRjaF9mcmVlX2ZjbWQoZmNtZCk7CiB9CiAKQEAgLTE2NDIsNyAmIzQzOzE2NDMsOCBAQCBzdGF0aWMgdm9pZCB1YmxrX2NvbXBsZXRlX2lvX2NtZChzdHJ1Y3QgdWJsa19pbyAqaW8sIHN0cnVjdCByZXF1ZXN0ICpyZXEsCiAJc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kID0gX191YmxrX3ByZXBfY29tcGxfaW9fY21kKGlvLCByZXEpOwogCiAJLyogdGVsbCB1Ymxrc3J2IG9uZSBpbyByZXF1ZXN0IGlzIGNvbWluZyAqLwotCWlvX3VyaW5nX2NtZF9kb25lKGNtZCwgcmVzLCBpc3N1ZV9mbGFncyk7CiYjNDM7CWlvX3VyaW5nX2NtZF9zZXRfcmVzKGNtZCwgcmVzKTsKJiM0MzsJaW9fdXJpbmdfY21kX2RvbmUoY21kLCBpc3N1ZV9mbGFncyk7CiB9CiAKICNkZWZpbmUgVUJMS19SRVFVRVVFX0RFTEFZX01TCTMKQEAgLTE3MjgsNyAmIzQzOzE3MzAsOCBAQCBzdGF0aWMgdm9pZCB1YmxrX2F1dG9fYnVmX2Rpc3BhdGNoKGNvbnN0IHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEsCiAKIAlpZiAocmVzICE9IEFVVE9fQlVGX1JFR19GQUlMKSB7CiAJCXVibGtfYXV0b19idWZfaW9fc2V0dXAodWJxLCByZXEsIGlvLCBjbWQsIHJlcyk7Ci0JCWlvX3VyaW5nX2NtZF9kb25lKGNtZCwgVUJMS19JT19SRVNfT0ssIGlzc3VlX2ZsYWdzKTsKJiM0MzsJCWlvX3VyaW5nX2NtZF9zZXRfcmVzKGNtZCwgVUJMS19JT19SRVNfT0spOwomIzQzOwkJaW9fdXJpbmdfY21kX2RvbmUoY21kLCBpc3N1ZV9mbGFncyk7CiAJfQogfQogCkBAIC0yNzg5LDggJiM0MzsyNzkyLDEwIEBAIHN0YXRpYyB2b2lkIHVibGtfY2FuY2VsX2NtZChzdHJ1Y3QgdWJsa19xdWV1ZSAqdWJxLCB1MTYgdGFnLAogCX0KIAlzcGluX3VubG9jaygmYW1wO3VicS0mZ3Q7Y2FuY2VsX2xvY2spOwogCi0JaWYgKCFkb25lICZhbXA7JmFtcDsgY21kKQotCQlpb191cmluZ19jbWRfZG9uZShjbWQsIFVCTEtfSU9fUkVTX0FCT1JULCBpc3N1ZV9mbGFncyk7CiYjNDM7CWlmICghZG9uZSAmYW1wOyZhbXA7IGNtZCkgewomIzQzOwkJaW9fdXJpbmdfY21kX3NldF9yZXMoY21kLCBVQkxLX0lPX1JFU19BQk9SVCk7CiYjNDM7CQlpb191cmluZ19jbWRfZG9uZShjbWQsIGlzc3VlX2ZsYWdzKTsKJiM0MzsJfQogfQogCiAvKgpAQCAtMjgxNiw3ICYjNDM7MjgyMSw4IEBAIHN0YXRpYyB2b2lkIHVibGtfYmF0Y2hfY2FuY2VsX2NtZChzdHJ1Y3QgdWJsa19xdWV1ZSAqdWJxLAogCXNwaW5fdW5sb2NrKCZhbXA7dWJxLSZndDtldnRzX2xvY2spOwogCiAJaWYgKGRvbmUpIHsKLQkJaW9fdXJpbmdfY21kX2RvbmUoZmNtZC0mZ3Q7Y21kLCBVQkxLX0lPX1JFU19BQk9SVCwgaXNzdWVfZmxhZ3MpOwomIzQzOwkJaW9fdXJpbmdfY21kX3NldF9yZXMoZmNtZC0mZ3Q7Y21kLCBVQkxLX0lPX1JFU19BQk9SVCk7CiYjNDM7CQlpb191cmluZ19jbWRfZG9uZShmY21kLSZndDtjbWQsIGlzc3VlX2ZsYWdzKTsKIAkJdWJsa19iYXRjaF9mcmVlX2ZjbWQoZmNtZCk7CiAJfQogfQpAQCAtMzUyNiw4ICYjNDM7MzUzMiwxMCBAQCBzdGF0aWMgdm9pZCB1YmxrX2NoX3VyaW5nX2NtZF9jYihzdHJ1Y3QgaW9fdHdfcmVxIHR3X3JlcSwgaW9fdHdfdG9rZW5fdCB0dykKIAogCWlmICghdHcuY2FuY2VsKQogCQlyZXQgPSB1YmxrX2NoX3VyaW5nX2NtZF9sb2NhbChjbWQsIGlzc3VlX2ZsYWdzKTsKLQlpZiAocmV0ICE9IC1FSU9DQlFVRVVFRCkKLQkJaW9fdXJpbmdfY21kX2RvbmUoY21kLCByZXQsIGlzc3VlX2ZsYWdzKTsKJiM0MzsJaWYgKHJldCAhPSAtRUlPQ0JRVUVVRUQpIHsKJiM0MzsJCWlvX3VyaW5nX2NtZF9zZXRfcmVzKGNtZCwgcmV0KTsKJiM0MzsJCWlvX3VyaW5nX2NtZF9kb25lKGNtZCwgaXNzdWVfZmxhZ3MpOwomIzQzOwl9CiB9CiAKIHN0YXRpYyBpbnQgdWJsa19jaF91cmluZ19jbWQoc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpCmRpZmYgLS1naXQgYS9kcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jIGIvZHJpdmVycy9udm1lL2hvc3QvaW9jdGwuYwppbmRleCA2NTM5ZDQ3NTAwOTg2Li5iNTBiYmEyMDc4MThiIDEwMDY0NAotLS0gYS9kcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbnZtZS9ob3N0L2lvY3RsLmMKQEAgLTQyMyw4ICYjNDM7NDIzLDYgQEAgc3RydWN0IG52bWVfdXJpbmdfZGF0YSB7CiBzdHJ1Y3QgbnZtZV91cmluZ19jbWRfcGR1IHsKIAlzdHJ1Y3QgcmVxdWVzdCAqcmVxOwogCXN0cnVjdCBiaW8gKmJpbzsKLQl1NjQgcmVzdWx0OwotCWludCBzdGF0dXM7CiB9OwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBudm1lX3VyaW5nX2NtZF9wZHUgKm52bWVfdXJpbmdfY21kX3BkdSgKQEAgLTQ0MCw4ICYjNDM7NDM4LDcgQEAgc3RhdGljIHZvaWQgbnZtZV91cmluZ190YXNrX2NiKHN0cnVjdCBpb190d19yZXEgdHdfcmVxLCBpb190d190b2tlbl90IHR3KQogCiAJaWYgKHBkdS0mZ3Q7YmlvKQogCQlibGtfcnFfdW5tYXBfdXNlcihwZHUtJmd0O2Jpbyk7Ci0JaW9fdXJpbmdfY21kX2RvbmUzMihpb3VjbWQsIHBkdS0mZ3Q7c3RhdHVzLCBwZHUtJmd0O3Jlc3VsdCwKLQkJCSAgICBJT19VUklOR19DTURfVEFTS19XT1JLX0lTU1VFX0ZMQUdTKTsKJiM0MzsJaW9fdXJpbmdfY21kX2RvbmUoaW91Y21kLCBJT19VUklOR19DTURfVEFTS19XT1JLX0lTU1VFX0ZMQUdTKTsKIH0KIAogc3RhdGljIGVudW0gcnFfZW5kX2lvX3JldCBudm1lX3VyaW5nX2NtZF9lbmRfaW8oc3RydWN0IHJlcXVlc3QgKnJlcSwKQEAgLTQ1MCwxNSAmIzQzOzQ0NywxNyBAQCBzdGF0aWMgZW51bSBycV9lbmRfaW9fcmV0IG52bWVfdXJpbmdfY21kX2VuZF9pbyhzdHJ1Y3QgcmVxdWVzdCAqcmVxLAogewogCXN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCA9IHJlcS0mZ3Q7ZW5kX2lvX2RhdGE7CiAJc3RydWN0IG52bWVfdXJpbmdfY21kX3BkdSAqcGR1ID0gbnZtZV91cmluZ19jbWRfcGR1KGlvdWNtZCk7CiYjNDM7CXU2NCByZXN1bHQgPSBsZTY0X3RvX2NwdShudm1lX3JlcShyZXEpLSZndDtyZXN1bHQudTY0KTsKJiM0MzsJaW50IHN0YXR1czsKIAogCWlmIChudm1lX3JlcShyZXEpLSZndDtmbGFncyAmYW1wOyBOVk1FX1JFUV9DQU5DRUxMRUQpIHsKLQkJcGR1LSZndDtzdGF0dXMgPSAtRUlOVFI7CiYjNDM7CQlzdGF0dXMgPSAtRUlOVFI7CiAJfSBlbHNlIHsKLQkJcGR1LSZndDtzdGF0dXMgPSBudm1lX3JlcShyZXEpLSZndDtzdGF0dXM7Ci0JCWlmICghcGR1LSZndDtzdGF0dXMpCi0JCQlwZHUtJmd0O3N0YXR1cyA9IGJsa19zdGF0dXNfdG9fZXJybm8oZXJyKTsKJiM0MzsJCXN0YXR1cyA9IG52bWVfcmVxKHJlcSktJmd0O3N0YXR1czsKJiM0MzsJCWlmICghc3RhdHVzKQomIzQzOwkJCXN0YXR1cyA9IGJsa19zdGF0dXNfdG9fZXJybm8oZXJyKTsKIAl9Ci0JcGR1LSZndDtyZXN1bHQgPSBsZTY0X3RvX2NwdShudm1lX3JlcShyZXEpLSZndDtyZXN1bHQudTY0KTsKJiM0MzsJaW9fdXJpbmdfY21kX3NldF9yZXMzMihpb3VjbWQsIHN0YXR1cywgcmVzdWx0KTsKIAogCS8qCiAJICogRm9yIElPUE9MTCwgY2hlY2sgaWYgdGhpcyBjb21wbGV0aW9uIGlzIGhhcHBlbmluZyBpbiB0aGUgY29udGV4dApAQCAtNDcxLDcgJiM0Mzs0NzAsNyBAQCBzdGF0aWMgZW51bSBycV9lbmRfaW9fcmV0IG52bWVfdXJpbmdfY21kX2VuZF9pbyhzdHJ1Y3QgcmVxdWVzdCAqcmVxLAogCSAgICBpb2ItJmd0O3BvbGxfY3R4ID09IGlvX3VyaW5nX2NtZF9jdHhfaGFuZGxlKGlvdWNtZCkpIHsKIAkJaWYgKHBkdS0mZ3Q7YmlvKQogCQkJYmxrX3JxX3VubWFwX3VzZXIocGR1LSZndDtiaW8pOwotCQlpb191cmluZ19jbWRfZG9uZTMyKGlvdWNtZCwgcGR1LSZndDtzdGF0dXMsIHBkdS0mZ3Q7cmVzdWx0LCAwKTsKJiM0MzsJCWlvX3VyaW5nX2NtZF9kb25lKGlvdWNtZCwgMCk7CiAJfSBlbHNlIHsKIAkJaW9fdXJpbmdfY21kX2RvX2luX3Rhc2tfbGF6eShpb3VjbWQsIG52bWVfdXJpbmdfdGFza19jYik7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfYnNnLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9ic2cuYwppbmRleCBlODBkZWM1MzE3NGVhLi44YjMyZDhlOGYyOWY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9ic2cuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3Njc2kvc2NzaV9ic2cuYwpAQCAtNjAsOCAmIzQzOzYwLDggQEAgc3RhdGljIHZvaWQgc2NzaV9ic2dfdXJpbmdfdGFza19jYihzdHJ1Y3QgaW9fdHdfcmVxIHR3X3JlcSwgaW9fdHdfdG9rZW5fdCB0dykKIAkJCQkgIHNjbWQtJmd0O3Jlc2lkX2xlbik7CiAKIAlibGtfbXFfZnJlZV9yZXF1ZXN0KHJxKTsKLQlpb191cmluZ19jbWRfZG9uZTMyKGlvdWNtZCwgcmV0LCByZXMyLAotCQkJICAgIElPX1VSSU5HX0NNRF9UQVNLX1dPUktfSVNTVUVfRkxBR1MpOwomIzQzOwlpb191cmluZ19jbWRfc2V0X3JlczMyKGlvdWNtZCwgcmV0LCByZXMyKTsKJiM0MzsJaW9fdXJpbmdfY21kX2RvbmUoaW91Y21kLCBJT19VUklOR19DTURfVEFTS19XT1JLX0lTU1VFX0ZMQUdTKTsKIH0KIAogc3RhdGljIGVudW0gcnFfZW5kX2lvX3JldCBzY3NpX2JzZ191cmluZ19jbWRfZG9uZShzdHJ1Y3QgcmVxdWVzdCAqcmVxLApkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvaW9jdGwuYyBiL2ZzL2J0cmZzL2lvY3RsLmMKaW5kZXggNzJiYzlkNGY3NzA4Ny4uMDcwNTdhNzA4NDUyOSAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvaW9jdGwuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9idHJmcy9pb2N0bC5jCkBAIC00NjIxLDcgJiM0Mzs0NjIxLDggQEAgc3RhdGljIHZvaWQgYnRyZnNfdXJpbmdfcmVhZF9maW5pc2hlZChzdHJ1Y3QgaW9fdHdfcmVxIHR3X3JlcSwgaW9fdHdfdG9rZW5fdCB0dykKIAlidHJmc191bmxvY2tfZXh0ZW50KGlvX3RyZWUsIHByaXYtJmd0O3N0YXJ0LCBwcml2LSZndDtsb2NrZW5kLCAmYW1wO3ByaXYtJmd0O2NhY2hlZF9zdGF0ZSk7CiAJYnRyZnNfaW5vZGVfdW5sb2NrKGlub2RlLCBCVFJGU19JTE9DS19TSEFSRUQpOwogCi0JaW9fdXJpbmdfY21kX2RvbmUoY21kLCByZXQsIElPX1VSSU5HX0NNRF9UQVNLX1dPUktfSVNTVUVfRkxBR1MpOwomIzQzOwlpb191cmluZ19jbWRfc2V0X3JlcyhjbWQsIHJldCk7CiYjNDM7CWlvX3VyaW5nX2NtZF9kb25lKGNtZCwgSU9fVVJJTkdfQ01EX1RBU0tfV09SS19JU1NVRV9GTEFHUyk7CiAJYWRkX3JjaGFyKGN1cnJlbnQsIHJldCk7CiAKIAlmb3IgKGluZGV4ID0gMDsgaW5kZXggJmx0OyBwcml2LSZndDtucl9wYWdlczsgaW5kZXgmIzQzOyYjNDM7KQpkaWZmIC0tZ2l0IGEvZnMvZnVzZS9kZXZfdXJpbmcuYyBiL2ZzL2Z1c2UvZGV2X3VyaW5nLmMKaW5kZXggNzdjOGNlYzQzZDljNi4uYzViYjUwMTgzZTFjNiAxMDA2NDQKLS0tIGEvZnMvZnVzZS9kZXZfdXJpbmcuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9mdXNlL2Rldl91cmluZy5jCkBAIC0zNjYsOCAmIzQzOzM2NiwxMCBAQCBzdGF0aWMgdm9pZCBmdXNlX3VyaW5nX2VudHJ5X3RlYXJkb3duKHN0cnVjdCBmdXNlX3JpbmdfZW50ICplbnQpCiAJZW50LSZndDtzdGF0ZSA9IEZSUlNfUkVMRUFTRUQ7CiAJc3Bpbl91bmxvY2soJmFtcDtxdWV1ZS0mZ3Q7bG9jayk7CiAKLQlpZiAoY21kKQotCQlpb191cmluZ19jbWRfZG9uZShjbWQsIC1FTk9UQ09OTiwgSU9fVVJJTkdfRl9VTkxPQ0tFRCk7CiYjNDM7CWlmIChjbWQpIHsKJiM0MzsJCWlvX3VyaW5nX2NtZF9zZXRfcmVzKGNtZCwgLUVOT1RDT05OKTsKJiM0MzsJCWlvX3VyaW5nX2NtZF9kb25lKGNtZCwgSU9fVVJJTkdfRl9VTkxPQ0tFRCk7CiYjNDM7CX0KIAogCWlmIChyZXEpCiAJCWZ1c2VfdXJpbmdfc3RvcF9mdXNlX3JlcV9lbmQocmVxKTsKQEAgLTUzMSw3ICYjNDM7NTMzLDggQEAgc3RhdGljIHZvaWQgZnVzZV91cmluZ19jYW5jZWwoc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLAogCiAJaWYgKG5lZWRfY21kX2RvbmUpIHsKIAkJLyogbm8gcXVldWUgbG9jayB0byBhdm9pZCBsb2NrIG9yZGVyIGlzc3VlcyAqLwotCQlpb191cmluZ19jbWRfZG9uZShjbWQsIC1FTk9UQ09OTiwgaXNzdWVfZmxhZ3MpOwomIzQzOwkJaW9fdXJpbmdfY21kX3NldF9yZXMoY21kLCAtRU5PVENPTk4pOwomIzQzOwkJaW9fdXJpbmdfY21kX2RvbmUoY21kLCBpc3N1ZV9mbGFncyk7CiAJCWtmcmVlKGVudCk7CiAJCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZhbXA7cXVldWUtJmd0O3JpbmctJmd0O3F1ZXVlX3JlZnMpKQogCQkJd2FrZV91cF9hbGwoJmFtcDtxdWV1ZS0mZ3Q7cmluZy0mZ3Q7c3RvcF93YWl0cSk7CkBAIC05NDIsNyAmIzQzOzk0NSw4IEBAIHN0YXRpYyB2b2lkIGZ1c2VfdXJpbmdfc2VuZChzdHJ1Y3QgZnVzZV9yaW5nX2VudCAqZW50LCBzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsCiAJZnVzZV91cmluZ19hZGRfdG9fcHEoZW50KTsKIAlzcGluX3VubG9jaygmYW1wO3F1ZXVlLSZndDtsb2NrKTsKIAotCWlvX3VyaW5nX2NtZF9kb25lKGNtZCwgcmV0LCBpc3N1ZV9mbGFncyk7CiYjNDM7CWlvX3VyaW5nX2NtZF9zZXRfcmVzKGNtZCwgcmV0KTsKJiM0MzsJaW9fdXJpbmdfY21kX2RvbmUoY21kLCBpc3N1ZV9mbGFncyk7CiB9CiAKIC8qIEZVU0VfVVJJTkdfQ01EX0NPTU1JVF9BTkRfRkVUQ0ggaGFuZGxlciAqLwpAQCAtMTMwOSw3ICYjNDM7MTMxMyw4IEBAIHN0YXRpYyB2b2lkIGZ1c2VfdXJpbmdfc2VuZF9pbl90YXNrKHN0cnVjdCBpb190d19yZXEgdHdfcmVxLCBpb190d190b2tlbl90IHR3KQogCQlsaXN0X2RlbF9pbml0KCZhbXA7ZW50LSZndDtsaXN0KTsKIAkJc3Bpbl91bmxvY2soJmFtcDtxdWV1ZS0mZ3Q7bG9jayk7CiAKLQkJaW9fdXJpbmdfY21kX2RvbmUoY21kLCBlcnIsIGlzc3VlX2ZsYWdzKTsKJiM0MzsJCWlvX3VyaW5nX2NtZF9zZXRfcmVzKGNtZCwgZXJyKTsKJiM0MzsJCWlvX3VyaW5nX2NtZF9kb25lKGNtZCwgaXNzdWVfZmxhZ3MpOwogCiAJCWZ1c2VfdXJpbmdfcmVxX2VuZChlbnQsIGVudC0mZ3Q7ZnVzZV9yZXEsIGVycik7CiAJCWtmcmVlKGVudCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lvX3VyaW5nL2NtZC5oIGIvaW5jbHVkZS9saW51eC9pb191cmluZy9jbWQuaAppbmRleCAzMzFkY2JlZmU3MmYxLi45NmZjYzA2MDk3YzRlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lvX3VyaW5nL2NtZC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvaW9fdXJpbmcvY21kLmgKQEAgLTUyLDYgJiM0Mzs1MiwxMCBAQCBpbnQgaW9fdXJpbmdfY21kX2ltcG9ydF9maXhlZF92ZWMoc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y21kLAogCQkJCSAgaW50IGRkaXIsIHN0cnVjdCBpb3ZfaXRlciAqaXRlciwKIAkJCQkgIHVuc2lnbmVkIGlzc3VlX2ZsYWdzKTsKIAomIzQzOy8qIE9uZSBvZiB0aGVzZSBtdXN0IGJlIGNhbGxlZCBwcmlvciB0byBpb191cmluZ19jbWRfZG9uZSgpICovCiYjNDM7dm9pZCBpb191cmluZ19jbWRfc2V0X3JlcyhzdHJ1Y3QgaW9fdXJpbmdfY21kICosIHMzMiByZXQpOwomIzQzO3ZvaWQgaW9fdXJpbmdfY21kX3NldF9yZXMzMihzdHJ1Y3QgaW9fdXJpbmdfY21kICosIHMzMiByZXQsIHU2NCByZXMyKTsKJiM0MzsKIC8qCiAgKiBDb21wbGV0ZXMgdGhlIHJlcXVlc3QsIGkuZS4gcG9zdHMgYW4gaW9fdXJpbmcgQ1FFIGFuZCBkZWFsbG9jYXRlcyBAaW91Y21kCiAgKiBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgaW9fdXJpbmcgcmVxdWVzdC4KQEAgLTU5LDggJiM0Mzs2Myw3IEBAIGludCBpb191cmluZ19jbWRfaW1wb3J0X2ZpeGVkX3ZlYyhzdHJ1Y3QgaW9fdXJpbmdfY21kICppb3VjbWQsCiAgKiBOb3RlOiB0aGUgY2FsbGVyIHNob3VsZCBuZXZlciBoYXJkIGNvZGUgQGlzc3VlX2ZsYWdzIGFuZCBpcyBvbmx5IGFsbG93ZWQKICAqIHRvIHBhc3MgdGhlIG1hc2sgcHJvdmlkZWQgYnkgdGhlIGNvcmUgaW9fdXJpbmcgY29kZS4KICAqLwotdm9pZCBfX2lvX3VyaW5nX2NtZF9kb25lKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCwgczMyIHJldCwgdTY0IHJlczIsCi0JCQkgdW5zaWduZWQgaXNzdWVfZmxhZ3MsIGJvb2wgaXNfY3FlMzIpOwomIzQzO3ZvaWQgaW9fdXJpbmdfY21kX2RvbmUoc3RydWN0IGlvX3VyaW5nX2NtZCAqLCB1bnNpZ25lZCBpc3N1ZV9mbGFncyk7CiAKIHZvaWQgX19pb191cmluZ19jbWRfZG9faW5fdGFzayhzdHJ1Y3QgaW9fdXJpbmdfY21kICppb3VjbWQsCiAJCQkgICAgaW9fcmVxX3R3X2Z1bmNfdCB0YXNrX3dvcmtfY2IsCkBAIC0xMDcsOCAmIzQzOzExMCwxNSBAQCBzdGF0aWMgaW5saW5lIGludCBpb191cmluZ19jbWRfaW1wb3J0X2ZpeGVkX3ZlYyhzdHJ1Y3QgaW9fdXJpbmdfY21kICppb3VjbWQsCiB7CiAJcmV0dXJuIC1FT1BOT1RTVVBQOwogfQotc3RhdGljIGlubGluZSB2b2lkIF9faW9fdXJpbmdfY21kX2RvbmUoc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLCBzMzIgcmV0LAotCQl1NjQgcmV0MiwgdW5zaWduZWQgaXNzdWVfZmxhZ3MsIGJvb2wgaXNfY3FlMzIpCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGlvX3VyaW5nX2NtZF9zZXRfcmVzKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCwgczMyIHJldCkKJiM0Mzt7CiYjNDM7fQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBpb191cmluZ19jbWRfc2V0X3JlczMyKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCwgczMyIHJldCwKJiM0MzsJCQkJCSAgdTY0IHJlczIpCiYjNDM7ewomIzQzO30KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgaW9fdXJpbmdfY21kX2RvbmUoc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLAomIzQzOwkJCQkgICAgIHVuc2lnbmVkIGlzc3VlX2ZsYWdzKQogewogfQogc3RhdGljIGlubGluZSB2b2lkIF9faW9fdXJpbmdfY21kX2RvX2luX3Rhc2soc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y21kLApAQCAtMTcwLDE4ICYjNDM7MTgwLDYgQEAgc3RhdGljIGlubGluZSB2b2lkICppb191cmluZ19jbWRfY3R4X2hhbmRsZShzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQpCiAJcmV0dXJuIGNtZF90b19pb19raW9jYihjbWQpLSZndDtjdHg7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBpb191cmluZ19jbWRfZG9uZShzdHJ1Y3QgaW9fdXJpbmdfY21kICppb3VjbWQsIHMzMiByZXQsCi0JCQkJICAgICB1bnNpZ25lZCBpc3N1ZV9mbGFncykKLXsKLQlyZXR1cm4gX19pb191cmluZ19jbWRfZG9uZShpb3VjbWQsIHJldCwgMCwgaXNzdWVfZmxhZ3MsIGZhbHNlKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGlvX3VyaW5nX2NtZF9kb25lMzIoc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y21kLCBzMzIgcmV0LAotCQkJCSAgICAgICB1NjQgcmVzMiwgdW5zaWduZWQgaXNzdWVfZmxhZ3MpCi17Ci0JcmV0dXJuIF9faW9fdXJpbmdfY21kX2RvbmUoaW91Y21kLCByZXQsIHJlczIsIGlzc3VlX2ZsYWdzLCB0cnVlKTsKLX0KLQogaW50IGlvX2J1ZmZlcl9yZWdpc3Rlcl9idmVjKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCwgc3RydWN0IHJlcXVlc3QgKnJxLAogCQkJICAgIHZvaWQgKCpyZWxlYXNlKSh2b2lkICopLCB1bnNpZ25lZCBpbnQgaW5kZXgsCiAJCQkgICAgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKTsKZGlmZiAtLWdpdCBhL2lvX3VyaW5nL3VyaW5nX2NtZC5jIGIvaW9fdXJpbmcvdXJpbmdfY21kLmMKaW5kZXggNzI2YTY1OWYzOGMzOC4uZWYzZTdlMzUyYzZhZiAxMDA2NDQKLS0tIGEvaW9fdXJpbmcvdXJpbmdfY21kLmMKJiM0MzsmIzQzOyYjNDM7IGIvaW9fdXJpbmcvdXJpbmdfY21kLmMKQEAgLTEzOCwxOSAmIzQzOzEzOCwzMSBAQCB2b2lkIF9faW9fdXJpbmdfY21kX2RvX2luX3Rhc2soc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y21kLAogfQogRVhQT1JUX1NZTUJPTF9HUEwoX19pb191cmluZ19jbWRfZG9faW5fdGFzayk7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBpb19yZXFfc2V0X2NxZTMyX2V4dHJhKHN0cnVjdCBpb19raW9jYiAqcmVxLAotCQkJCQkgIHU2NCBleHRyYTEsIHU2NCBleHRyYTIpCiYjNDM7dm9pZCBpb191cmluZ19jbWRfc2V0X3JlcyhzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsIHMzMiByZXQpCiB7Ci0JcmVxLSZndDtiaWdfY3FlLmV4dHJhMSA9IGV4dHJhMTsKLQlyZXEtJmd0O2JpZ19jcWUuZXh0cmEyID0gZXh0cmEyOwomIzQzOwlzdHJ1Y3QgaW9fa2lvY2IgKnJlcSA9IGNtZF90b19pb19raW9jYihjbWQpOwomIzQzOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJlcV9zZXRfZmFpbChyZXEpOwomIzQzOwlpb19yZXFfc2V0X3JlcyhyZXEsIHJldCwgMCk7CiB9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoaW9fdXJpbmdfY21kX3NldF9yZXMpOwomIzQzOwomIzQzO3ZvaWQgaW9fdXJpbmdfY21kX3NldF9yZXMzMihzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsIHMzMiByZXQsIHU2NCByZXMyKQomIzQzO3sKJiM0MzsJc3RydWN0IGlvX2tpb2NiICpyZXEgPSBjbWRfdG9faW9fa2lvY2IoY21kKTsKJiM0MzsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXFfc2V0X2ZhaWwocmVxKTsKJiM0MzsJaW9fcmVxX3NldF9yZXMzMihyZXEsIHJldCwgMCwgcmVzMiwgMCk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGlvX3VyaW5nX2NtZF9zZXRfcmVzMzIpOwogCiAvKgogICogQ2FsbGVkIGJ5IGNvbnN1bWVycyBvZiBpb191cmluZ19jbWQsIGlmIHRoZXkgb3JpZ2luYWxseSByZXR1cm5lZAogICogLUVJT0NCUVVFVUVEIHVwb24gcmVjZWl2aW5nIHRoZSBjb21tYW5kLgogICovCi12b2lkIF9faW9fdXJpbmdfY21kX2RvbmUoc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y21kLCBzMzIgcmV0LCB1NjQgcmVzMiwKLQkJICAgICAgIHVuc2lnbmVkIGlzc3VlX2ZsYWdzLCBib29sIGlzX2NxZTMyKQomIzQzO3ZvaWQgaW9fdXJpbmdfY21kX2RvbmUoc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y21kLCB1bnNpZ25lZCBpc3N1ZV9mbGFncykKIHsKIAlzdHJ1Y3QgaW9fa2lvY2IgKnJlcSA9IGNtZF90b19pb19raW9jYihpb3VjbWQpOwogCkBAIC0xNTksMTUgJiM0MzsxNzEsNiBAQCB2b2lkIF9faW9fdXJpbmdfY21kX2RvbmUoc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y21kLCBzMzIgcmV0LCB1NjQgcmVzMiwKIAogCWlvX3VyaW5nX2NtZF9kZWxfY2FuY2VsYWJsZShpb3VjbWQsIGlzc3VlX2ZsYWdzKTsKIAotCWlmIChyZXQgJmx0OyAwKQotCQlyZXFfc2V0X2ZhaWwocmVxKTsKLQotCWlvX3JlcV9zZXRfcmVzKHJlcSwgcmV0LCAwKTsKLQlpZiAoaXNfY3FlMzIpIHsKLQkJaWYgKHJlcS0mZ3Q7Y3R4LSZndDtmbGFncyAmYW1wOyBJT1JJTkdfU0VUVVBfQ1FFX01JWEVEKQotCQkJcmVxLSZndDtjcWUuZmxhZ3MgfD0gSU9SSU5HX0NRRV9GXzMyOwotCQlpb19yZXFfc2V0X2NxZTMyX2V4dHJhKHJlcSwgcmVzMiwgMCk7Ci0JfQogCWlvX3JlcV91cmluZ19jbGVhbnVwKHJlcSwgaXNzdWVfZmxhZ3MpOwogCWlmIChyZXEtJmd0O2ZsYWdzICZhbXA7IFJFUV9GX0lPUE9MTCkgewogCQkvKiBvcmRlciB3aXRoIGlvX2RvX2lvcG9sbCgpIGNoZWNraW5nIC0mZ3Q7aW9wb2xsX2NvbXBsZXRlZCAqLwpAQCAtMTgxLDcgJiM0MzsxODQsNyBAQCB2b2lkIF9faW9fdXJpbmdfY21kX2RvbmUoc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y21kLCBzMzIgcmV0LCB1NjQgcmVzMiwKIAkJaW9fcmVxX3Rhc2tfd29ya19hZGQocmVxKTsKIAl9CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChfX2lvX3VyaW5nX2NtZF9kb25lKTsKJiM0MztFWFBPUlRfU1lNQk9MX0dQTChpb191cmluZ19jbWRfZG9uZSk7CiAKIGludCBpb191cmluZ19jbWRfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKQogewo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTk6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzMxNgoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDU1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGlvX3VyaW5nIENvbW1hbmQgQ29tcGxldGlvbiBBUEkgQ2hhbmdlKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY2hhbmdpbmcgaG93IHdlIGhhbmRsZSBjb21tYW5kIGNvbXBsZXRpb24gaW4gaW9fdXJpbmcuIFByZXZpb3VzbHksIGBpb191cmluZ19jbWRfZG9uZWAgYW5kIGBpb191cmluZ19jbWRfZG9uZTMyYCB0b29rIHRoZSByZXN1bHRzIGRpcmVjdGx5IGFzIGFyZ3VtZW50cy4gTm93LCB3ZSYjMzk7cmUgcmVxdWlyZWQgdG8gdXNlIGBpb191cmluZ19jbWRfc2V0X3Jlc2Agb3IgYGlvX3VyaW5nX2NtZF9zZXRfcmVzMzJgICpiZWZvcmUqIGNhbGxpbmcgYGlvX3VyaW5nX2NtZF9kb25lYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7QXJlIHdlIGludHJvZHVjaW5nIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBoZXJlPyYjMzQ7IFdlIG5lZWQgdG8gYmUgY2FyZWZ1bCB3aXRoIEFQSSBjaGFuZ2VzIGxpa2UgdGhpcy4KCkkgc2VlIHRoZSBwYXRjaCB0b3VjaGVzIGEgZmFpciBudW1iZXIgb2YgZmlsZXM6IGBibG9jay9pb2N0bC5jYCwgYGRyaXZlcnMvYmxvY2svdWJsa19kcnYuY2AsIGBkcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jYCwgYGRyaXZlcnMvc2NzaS9zY3NpX2JzZy5jYCwgYGZzL2J0cmZzL2lvY3RsLmNgLCBgZnMvZnVzZS9kZXZfdXJpbmcuY2AsIGBpbmNsdWRlL2xpbnV4L2lvX3VyaW5nL2NtZC5oYCwgYW5kIGBpb191cmluZy91cmluZ19jbWQuY2AuIFRoYXQmIzM5O3MgYSByZWFzb25hYmxlIHNwcmVhZCwgaW5kaWNhdGluZyB0aGlzIGlzIGEgcG90ZW50aWFsbHkgd2lkZWx5LXVzZWQgY2hhbmdlLgoKTG9va2luZyBzcGVjaWZpY2FsbHkgYXQgYGlvX3VyaW5nL3VyaW5nX2NtZC5jYCwgSSBzZWUgdGhlIG5ldyBmdW5jdGlvbnMgYGlvX3VyaW5nX2NtZF9zZXRfcmVzYCBhbmQgYGlvX3VyaW5nX2NtZF9zZXRfcmVzMzJgLiBUaGVzZSBzZXQgdGhlIHJlc3VsdCAoYHJldGApIGZvciBhIGdpdmVuIGNvbW1hbmQuIEludGVyZXN0aW5nbHksIGl0IGNoZWNrcyBpZiBgcmV0ICZsdDsgMGAgYW5kIGNhbGxzIGByZXFfc2V0X2ZhaWxgIGlmIHNvLiBUaGVuLCBpdCBjYWxscyBgaW9fcmVxX3NldF9yZXNgIG9yIGBpb19yZXFfc2V0X3JlczMyYC4KCk5vdywgdGhhdCYjMzk7cyB3aGF0IEkgd2FudCB0byBzZWUhIFRoZSBjcnVjaWFsIHBhcnQgaXMgdGhhdCBgaW9fcmVxX3NldF9yZXNgIGFuZCBgaW9fcmVxX3NldF9yZXMzMmAgYXJlIGNhbGxlZCBhZnRlciB0aGUgYHJldGAgY2hlY2suIE15IGZvY3VzIGhlcmUgaXMgb24gdW5kZXJzdGFuZGluZyBwcmVjaXNlbHkgaG93IHRob3NlIGBpb19yZXFfc2V0X3Jlc1hgIGZ1bmN0aW9ucyBoYW5kbGUgdGhlIHJlc3VsdCBzZXR0aW5nLiBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhvc2UgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgYGlvX3JlcV9zZXRfcmVzMzJgLCB0byBlbnN1cmUgdGhlIGRhdGEgaXMgYmVpbmcgaGFuZGxlZCBjb3JyZWN0bHkgYW5kIHRoYXQgdGhlcmUmIzM5O3Mgbm8gd2F5IHdlIGNvdWxkIHBvdGVudGlhbGx5IGJlIGludHJvZHVjaW5nIGFueSB2dWxuZXJhYmlsaXRpZXMgYnkgZmFpbGluZyB0byBpbml0aWFsaXplIHRoZSBtZW1vcnkgb24gY29tbWFuZC4gVGltZSB0byBzZWFyY2ggZm9yIHdoZXJlIHRob3NlIGFyZSBkZWZpbmVkLiBJJiMzOTtsbCB1c2UgYGdyZXBwZXJgIG9yIGVxdWl2YWxlbnQgdG9vbCB0byBmaW5kIHRoYXQgZGVmaW5pdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTk6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9fcmVxX3NldF9yZXMzMiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpb191cmluZy9pb191cmluZy5oPTMzNj1zdGF0aWMgaW5saW5lIHUzMiBjdHhfY3FlMzJfZmxhZ3Moc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgpXG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuaC0zNDItXG5pb191cmluZy9pb191cmluZy5oOjM0MzpzdGF0aWMgaW5saW5lIHZvaWQgaW9fcmVxX3NldF9yZXMzMihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgczMyIHJlcywgdTMyIGNmbGFncyxcbmlvX3VyaW5nL2lvX3VyaW5nLmgtMzQ0LVx0XHRcdFx0ICAgIF9fdTY0IGV4dHJhMSwgX191NjQgZXh0cmEyKVxuLS1cbmlvX3VyaW5nL25vcC5jPTU4PWludCBpb19ub3Aoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbi0tXG5pb191cmluZy9ub3AuYy04MC1cdGlmIChub3AtXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19OT1BfQ1FFMzIpXG5pb191cmluZy9ub3AuYzo4MTpcdFx0aW9fcmVxX3NldF9yZXMzMihyZXEsIHJldCwgMCwgbm9wLVx1MDAzZWV4dHJhMSwgbm9wLVx1MDAzZWV4dHJhMik7XG5pb191cmluZy9ub3AuYy04Mi1cdGVsc2Vcbi0tXG5pb191cmluZy91cmluZ19jbWQuYz0xNTE9dm9pZCBpb191cmluZ19jbWRfc2V0X3JlczMyKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCwgczMyIHJldCwgdTY0IHJlczIpXG4tLVxuaW9fdXJpbmcvdXJpbmdfY21kLmMtMTU2LVx0XHRyZXFfc2V0X2ZhaWwocmVxKTtcbmlvX3VyaW5nL3VyaW5nX2NtZC5jOjE1NzpcdGlvX3JlcV9zZXRfcmVzMzIocmVxLCByZXQsIDAsIHJlczIsIDApO1xuaW9fdXJpbmcvdXJpbmdfY21kLmMtMTU4LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTk6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODc5OQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqRXhhbWluaW5nIGlvX3JlcV9zZXRfcmVzMzIqKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gdGhpcy4gRmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQmIzM5O3MgaGVhZCBzdHJhaWdodCB0byB0aGUgc291cmNlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgYW5kIHBpbnBvaW50IHRoZSBleGFjdCBkZWZpbml0aW9uIG9mIGBpb19yZXFfc2V0X3JlczMyYC4gSSYjMzk7bGwgZ28gZGlyZWN0bHkgdG8gYGlvX3VyaW5nL2lvX3VyaW5nLmhgLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9uIHByb3RvdHlwZXMgcmVzaWRlLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3Mgd2hhdC4gR290dGEgYmUgcHJlY2lzZSBoZXJlLCBubyByb29tIGZvciBndWVzc3dvcmsgd2l0aCB0aGVzZSBsb3ctbGV2ZWwgaW50ZXJmYWNlcy4gVGltZSB0byBsb29rIHVwIHRoZSBkZXRhaWxzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxOToyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2lvX3VyaW5nL2lvX3VyaW5nLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM0MDpcdFx0cmV0dXJuIDA7XG4gMzQxOlx0fVxuIDM0MjpcdFxuIDM0MzpcdHN0YXRpYyBpbmxpbmUgdm9pZCBpb19yZXFfc2V0X3JlczMyKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzMzIgcmVzLCB1MzIgY2ZsYWdzLFxuIDM0NDpcdFx0XHRcdFx0ICAgIF9fdTY0IGV4dHJhMSwgX191NjQgZXh0cmEyKVxuIDM0NTpcdHtcbiAzNDY6XHRcdHJlcS1cdTAwM2VjcWUucmVzID0gcmVzO1xuIDM0NzpcdFx0cmVxLVx1MDAzZWNxZS5mbGFncyA9IGNmbGFncyB8IGN0eF9jcWUzMl9mbGFncyhyZXEtXHUwMDNlY3R4KTtcbiAzNDg6XHRcdHJlcS1cdTAwM2ViaWdfY3FlLmV4dHJhMSA9IGV4dHJhMTtcbiAzNDk6XHRcdHJlcS1cdTAwM2ViaWdfY3FlLmV4dHJhMiA9IGV4dHJhMjtcbiAzNTA6XHR9XG4gMzUxOlx0XG4gMzUyOlx0c3RhdGljIGlubGluZSB2b2lkICppb191cmluZ19hbGxvY19hc3luY19kYXRhKHN0cnVjdCBpb19hbGxvY19jYWNoZSAqY2FjaGUsXG4gMzUzOlx0XHRcdFx0XHRcdCAgICAgIHN0cnVjdCBpb19raW9jYiAqcmVxKVxuIDM1NDpcdHtcbiAzNTU6XHRcdGlmIChjYWNoZSkge1xuIDM1NjpcdFx0XHRyZXEtXHUwMDNlYXN5bmNfZGF0YSA9IGlvX2NhY2hlX2FsbG9jKGNhY2hlLCBHRlBfS0VSTkVMKTtcbiAzNTc6XHRcdH0gZWxzZSB7XG4gMzU4Olx0XHRcdGNvbnN0IHN0cnVjdCBpb19pc3N1ZV9kZWYgKmRlZiA9IFx1MDAyNmlvX2lzc3VlX2RlZnNbcmVxLVx1MDAzZW9wY29kZV07XG4gMzU5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDE5OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkzNDUKCQkJCQkJCW91dHB1dDogMTk0CgkJCQkJCQl0aG91Z2h0czogMTIwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWZhY3RvcmluZyBpb191cmluZ19jbWRfZG9uZTogQSBEZWVwIERpdmUgaW50byBNZW1vcnkgU2FmZXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O20gbG9va2luZyBhdCBhIHJlZmFjdG9yaW5nIG9mIHRoZSBgaW9fdXJpbmdfY21kX2RvbmVgIEFQSSwgYW5kIG15IHByaW1hcnkgY29uY2VybiwgYXMgYWx3YXlzLCBpcyBtZW1vcnkgc2FmZXR5IGFuZCBjb3JyZWN0bmVzcy4gVGhlIG9sZCBjb2RlIGhhZCBhIGNvbWJpbmVkIGZ1bmN0aW9uLCBgX19pb191cmluZ19jbWRfZG9uZWAsIHdoaWNoIHNldCB0aGUgcmVzdWx0LCBmbGFncywgYW5kIGV4dHJhIGZpZWxkcyBvZiB0aGUgY29tcGxldGlvbiBxdWV1ZSBlbnRyeSAoQ1FFKS4gVGhlIG5ldyBjb2RlLCBgaW9fdXJpbmdfY21kX3NldF9yZXMzMmAsIGFwcGVhcnMgdG8gYmUgYSBjbGVhbmVyIHNlcGFyYXRpb24gb2YgY29uY2VybnMuCgpJbml0aWFsbHksIEkgaGFkIGEgaHVuY2ggYWJvdXQgdW5pbml0aWFsaXplZCBtZW1vcnkuIEluIHRoZSBvbGQgY29kZSwgYF9faW9fdXJpbmdfY21kX2RvbmVgIGZpcnN0IHNldCB0aGUgQ1FFIGZsYWdzIHRvIGAwYCBhbmQgY29uZGl0aW9uYWxseSBzZXQgdGhlIGBJT1JJTkdfQ1FFX0ZfMzJgIGZsYWcgYmFzZWQgb24gYElPUklOR19TRVRVUF9DUUVfTUlYRURgLiBUaGUgbmV3IGBpb19yZXFfc2V0X3JlczMyYCwgaG93ZXZlciwgaW1tZWRpYXRlbHkgc2V0cyBgcmVxLSZndDtjcWUuZmxhZ3NgIHRvIGBjZmxhZ3MgfCBjdHhfY3FlMzJfZmxhZ3MocmVxLSZndDtjdHgpYC4gQWZ0ZXIgYSBxdWljayBjaGVjaywgSSByZWFsaXplZCB0aGF0IGBjdHhfY3FlMzJfZmxhZ3NgIGFjaGlldmVzIHRoZSBzYW1lIHJlc3VsdCBhcyB0aGUgb2xkIGNvbmRpdGlvbmFsOiBhZGRpbmcgdGhlIGBJT1JJTkdfQ1FFX0ZfMzJgIGZsYWcgaWYgYElPUklOR19TRVRVUF9DUUVfTUlYRURgIGlzIHNldCBpbiB0aGUgY29udGV4dC4gU28sIHRoZSBmbGFnIHNldHRpbmcgaXMgZXF1aXZhbGVudCwgd2hpY2ggaXMgZ3JlYXQuCgpJJiMzOTttIHZlcmlmeWluZyB0aGF0IHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBtZW1vcnkgbGVha3MgaGVyZS4gVGhlIGBpb191cmluZ19jbWRfc2V0X3JlczMyYCBhbHNvIHNldHMgdGhlIGBleHRyYTFgIGFuZCBgZXh0cmEyYCBmaWVsZHMuICBJbiB0aGUgZXhhbXBsZSB1c2FnZXMgb2YgYGlvX3VyaW5nX2NtZF9zZXRfcmVzMzJgIChpbiBgbnZtZV91cmluZ19jbWRfZW5kX2lvYCBhbmQgYHNjc2lfYnNnX3VyaW5nX3Rhc2tfY2JgKSwgdGhlIGBleHRyYTFgIGlzIHBhc3NlZCBpbiBhcyBgcmVzMmAsIHdoaWNoIGlzIGV4cGxpY2l0bHkgYXNzaWduZWQuIGBleHRyYTJgIGlzIHNldCB0byBgMGAgaW4gYGlvX3JlcV9zZXRfcmVzMzJgLiBTbywgbm8gdW5pbml0aWFsaXplZCBtZW1vcnksIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCBJIHdhcyBob3BpbmcgdG8gc2VlLgoKU2luY2UgdGhpcyBpcyBwdXJlbHkgYSByZWZhY3RvcmluZywgaXQmIzM5O3Mgbm90IGludHJvZHVjaW5nIGFueSBuZXcgdXNlci1zcGFjZSBzdHJ1Y3R1cmVzIG9yIGNoYW5naW5nIGFueSBib3VuZHMgY2hlY2tzLiBUaGlzIGlzIGdvb2QgbmV3cywgYXMgaXQgbWluaW1pemVzIHRoZSByaXNrIG9mIGludHJvZHVjaW5nIHN1YnRsZSBidWdzIG9yIHZ1bG5lcmFiaWxpdGllcy4gQmVjYXVzZSBvZiB0aGUgY29kZSByZXZpZXcsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgdGhlc2UgY2hhbmdlcyBhcmUgc2FmZS4gSSB3aWxsIG1hcmsgYE5lZWRzS01TQU49ZmFsc2VgIGFzIHRoZSBjb2RlIGlzIHNhZmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDE5OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgYGlvX3VyaW5nX2NtZF9kb25lYCBBUEkgYnkgc3BsaXR0aW5nIGl0IGludG8gYGlvX3VyaW5nX2NtZF9zZXRfcmVzYC9gaW9fdXJpbmdfY21kX3NldF9yZXMzMmAgYW5kIGBpb191cmluZ19jbWRfZG9uZWAuIFRoZSB2YWx1ZXMgcGFzc2VkIHRvIHRoZXNlIGZ1bmN0aW9ucyByZW1haW4gdGhlIHNhbWUgYXMgYmVmb3JlLCBhbmQgYWxsIGZpZWxkcyBpbiB0aGUgY29tcGxldGlvbiBxdWV1ZSBlbnRyeSAoQ1FFKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCAoZS5nLiwgYGV4dHJhMmAgaXMgc2V0IHRvIDAgaW4gYGlvX3JlcV9zZXRfcmVzMzJgKS4gVGhlcmUgYXJlIG5vIG5ldyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm8gY2hhbmdlcyB0byBib3VuZHMgY2hlY2tpbmcsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2guIEFueSBwb3RlbnRpYWwgYnVncyB3b3VsZCBiZSBsb2dpYyBlcnJvcnMgb3IgdXNlLWFmdGVyLWZyZWUvb3V0LW9mLWJvdW5kcyBpc3N1ZXMsIHdoaWNoIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgS0FTQU4gYW5kIG90aGVyIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGBpb191cmluZ19jbWRfZG9uZWAgQVBJIGJ5IHNwbGl0dGluZyBpdCBpbnRvIGBpb191cmluZ19jbWRfc2V0X3Jlc2AvYGlvX3VyaW5nX2NtZF9zZXRfcmVzMzJgIGFuZCBgaW9fdXJpbmdfY21kX2RvbmVgLiBUaGUgdmFsdWVzIHBhc3NlZCB0byB0aGVzZSBmdW5jdGlvbnMgcmVtYWluIHRoZSBzYW1lIGFzIGJlZm9yZSwgYW5kIGFsbCBmaWVsZHMgaW4gdGhlIGNvbXBsZXRpb24gcXVldWUgZW50cnkgKENRRSkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgKGUuZy4sIGBleHRyYTJgIGlzIHNldCB0byAwIGluIGBpb19yZXFfc2V0X3JlczMyYCkuIFRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vIGNoYW5nZXMgdG8gYm91bmRzIGNoZWNraW5nLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLiBBbnkgcG90ZW50aWFsIGJ1Z3Mgd291bGQgYmUgbG9naWMgZXJyb3JzIG9yIHVzZS1hZnRlci1mcmVlL291dC1vZi1ib3VuZHMgaXNzdWVzLCB3aGljaCBhcmUgYWRlcXVhdGVseSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBvdGhlciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxOToyMjozNC45NjkxMzQzNTVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzI5NTkwNjUzMjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU9fVVJJTkdcIixcbiAgICBcIkJMS19ERVZfVUJMS1wiLFxuICAgIFwiTlZNRV9DT1JFXCIsXG4gICAgXCJCTEtfREVWX05WTUVcIixcbiAgICBcIkJMS19ERVZfQlNHXCIsXG4gICAgXCJCVFJGU19GU1wiLFxuICAgIFwiRlVTRV9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvX3VyaW5nX2NtZF9zZXRfcmVzXCIsXG4gICAgXCJpb191cmluZ19jbWRfc2V0X3JlczMyXCIsXG4gICAgXCJpb191cmluZ19jbWRfZG9uZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBgaW9fdXJpbmdfY21kX2RvbmVgIEFQSSBieSBzcGxpdHRpbmcgaXQgaW50byBgaW9fdXJpbmdfY21kX3NldF9yZXNgL2Bpb191cmluZ19jbWRfc2V0X3JlczMyYCBhbmQgYGlvX3VyaW5nX2NtZF9kb25lYC4gVGhlIHZhbHVlcyBwYXNzZWQgdG8gdGhlc2UgZnVuY3Rpb25zIHJlbWFpbiB0aGUgc2FtZSBhcyBiZWZvcmUsIGFuZCBhbGwgZmllbGRzIGluIHRoZSBjb21wbGV0aW9uIHF1ZXVlIGVudHJ5IChDUUUpIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIChlLmcuLCBgZXh0cmEyYCBpcyBzZXQgdG8gMCBpbiBgaW9fcmVxX3NldF9yZXMzMmApLiBUaGVyZSBhcmUgbm8gbmV3IHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBubyBjaGFuZ2VzIHRvIGJvdW5kcyBjaGVja2luZywgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaC4gQW55IHBvdGVudGlhbCBidWdzIHdvdWxkIGJlIGxvZ2ljIGVycm9ycyBvciB1c2UtYWZ0ZXItZnJlZS9vdXQtb2YtYm91bmRzIGlzc3Vlcywgd2hpY2ggYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBLQVNBTiBhbmQgb3RoZXIgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBpb191cmluZyBjb21tYW5kIEFQSSBieSBzcGxpdHRpbmcgYGlvX3VyaW5nX2NtZF9kb25lYCBpbnRvIGBpb191cmluZ19jbWRfc2V0X3Jlc2AgKG9yIGBpb191cmluZ19jbWRfc2V0X3JlczMyYCkgYW5kIGBpb191cmluZ19jbWRfZG9uZWAuIFRoaXMgYWZmZWN0cyBob3cgcmVzdWx0cyBhcmUgcmV0dXJuZWQgZm9yIGlvX3VyaW5nIGNvbW1hbmRzIGFjcm9zcyBtdWx0aXBsZSBzdWJzeXN0ZW1zIGluY2x1ZGluZyBibG9jaywgdWJsaywgbnZtZSwgc2NzaSBic2csIGJ0cmZzLCBhbmQgZnVzZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGtlcm5lbCBBUEkgYW5kIGl0cyBjYWxsZXJzLCB3aGljaCBpcyB3b3J0aCBmdXp6aW5nIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBpbmNvcnJlY3QgcmVzdWx0IGhhbmRsaW5nIGFyZSBpbnRyb2R1Y2VkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxOToyMjozNC45NjkxNDIzMDVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyODQwNDM5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDM1ZjZjMWNkNWJjOWY3OWQ3N2M4NWY2YjFmNjhhYzNmNmYxYWEyYzNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgMjcgMTk6MjI6MzMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYmxvY2svaW9jdGwuYyBiL2Jsb2NrL2lvY3RsLmNcXG5pbmRleCA2NGI0ZTZjMGY2OTY1Li45NDZjYWI3NGYyNTNlIDEwMDY0NFxcbi0tLSBhL2Jsb2NrL2lvY3RsLmNcXG4rKysgYi9ibG9jay9pb2N0bC5jXFxuQEAgLTg3MSw5ICs4NzEsMTAgQEAgc3RhdGljIHZvaWQgYmxrX2NtZF9jb21wbGV0ZShzdHJ1Y3QgaW9fdHdfcmVxIHR3X3JlcSwgaW9fdHdfdG9rZW5fdCB0dylcXG4gXFxuIFxcdGlmIChiaWMtXFx1MDAzZXJlcyA9PSAtRUFHQUlOIFxcdTAwMjZcXHUwMDI2IGJpYy1cXHUwMDNlbm93YWl0KVxcbiBcXHRcXHRpb191cmluZ19jbWRfaXNzdWVfYmxvY2tpbmcoY21kKTtcXG4tXFx0ZWxzZVxcbi1cXHRcXHRpb191cmluZ19jbWRfZG9uZShjbWQsIGJpYy1cXHUwMDNlcmVzLFxcbi1cXHRcXHRcXHRcXHQgIElPX1VSSU5HX0NNRF9UQVNLX1dPUktfSVNTVUVfRkxBR1MpO1xcbitcXHRlbHNlIHtcXG4rXFx0XFx0aW9fdXJpbmdfY21kX3NldF9yZXMoY21kLCBiaWMtXFx1MDAzZXJlcyk7XFxuK1xcdFxcdGlvX3VyaW5nX2NtZF9kb25lKGNtZCwgSU9fVVJJTkdfQ01EX1RBU0tfV09SS19JU1NVRV9GTEFHUyk7XFxuK1xcdH1cXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgYmlvX2NtZF9iaW9fZW5kX2lvKHN0cnVjdCBiaW8gKmJpbylcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay91YmxrX2Rydi5jIGIvZHJpdmVycy9ibG9jay91YmxrX2Rydi5jXFxuaW5kZXggNGQxN2VkMjY0ZGExYS4uNTFmMTVlNWIzYzAxZCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmNcXG4rKysgYi9kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmNcXG5AQCAtODM5LDcgKzgzOSw4IEBAIHN0YXRpYyB2b2lkIHVibGtfYmF0Y2hfZGVpbml0X2ZldGNoX2J1ZihzdHJ1Y3QgdWJsa19xdWV1ZSAqdWJxLFxcbiBcXHRfX3VibGtfcmVsZWFzZV9mY21kKHVicSk7XFxuIFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZ1YnEtXFx1MDAzZWV2dHNfbG9jayk7XFxuIFxcbi1cXHRpb191cmluZ19jbWRfZG9uZShmY21kLVxcdTAwM2VjbWQsIHJlcywgZGF0YS1cXHUwMDNlaXNzdWVfZmxhZ3MpO1xcbitcXHRpb191cmluZ19jbWRfc2V0X3JlcyhmY21kLVxcdTAwM2VjbWQsIHJlcyk7XFxuK1xcdGlvX3VyaW5nX2NtZF9kb25lKGZjbWQtXFx1MDAzZWNtZCwgZGF0YS1cXHUwMDNlaXNzdWVfZmxhZ3MpO1xcbiBcXHR1YmxrX2JhdGNoX2ZyZWVfZmNtZChmY21kKTtcXG4gfVxcbiBcXG5AQCAtMTY0Miw3ICsxNjQzLDggQEAgc3RhdGljIHZvaWQgdWJsa19jb21wbGV0ZV9pb19jbWQoc3RydWN0IHVibGtfaW8gKmlvLCBzdHJ1Y3QgcmVxdWVzdCAqcmVxLFxcbiBcXHRzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQgPSBfX3VibGtfcHJlcF9jb21wbF9pb19jbWQoaW8sIHJlcSk7XFxuIFxcbiBcXHQvKiB0ZWxsIHVibGtzcnYgb25lIGlvIHJlcXVlc3QgaXMgY29taW5nICovXFxuLVxcdGlvX3VyaW5nX2NtZF9kb25lKGNtZCwgcmVzLCBpc3N1ZV9mbGFncyk7XFxuK1xcdGlvX3VyaW5nX2NtZF9zZXRfcmVzKGNtZCwgcmVzKTtcXG4rXFx0aW9fdXJpbmdfY21kX2RvbmUoY21kLCBpc3N1ZV9mbGFncyk7XFxuIH1cXG4gXFxuICNkZWZpbmUgVUJMS19SRVFVRVVFX0RFTEFZX01TXFx0M1xcbkBAIC0xNzI4LDcgKzE3MzAsOCBAQCBzdGF0aWMgdm9pZCB1YmxrX2F1dG9fYnVmX2Rpc3BhdGNoKGNvbnN0IHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEsXFxuIFxcbiBcXHRpZiAocmVzICE9IEFVVE9fQlVGX1JFR19GQUlMKSB7XFxuIFxcdFxcdHVibGtfYXV0b19idWZfaW9fc2V0dXAodWJxLCByZXEsIGlvLCBjbWQsIHJlcyk7XFxuLVxcdFxcdGlvX3VyaW5nX2NtZF9kb25lKGNtZCwgVUJMS19JT19SRVNfT0ssIGlzc3VlX2ZsYWdzKTtcXG4rXFx0XFx0aW9fdXJpbmdfY21kX3NldF9yZXMoY21kLCBVQkxLX0lPX1JFU19PSyk7XFxuK1xcdFxcdGlvX3VyaW5nX2NtZF9kb25lKGNtZCwgaXNzdWVfZmxhZ3MpO1xcbiBcXHR9XFxuIH1cXG4gXFxuQEAgLTI3ODksOCArMjc5MiwxMCBAQCBzdGF0aWMgdm9pZCB1YmxrX2NhbmNlbF9jbWQoc3RydWN0IHVibGtfcXVldWUgKnVicSwgdTE2IHRhZyxcXG4gXFx0fVxcbiBcXHRzcGluX3VubG9jayhcXHUwMDI2dWJxLVxcdTAwM2VjYW5jZWxfbG9jayk7XFxuIFxcbi1cXHRpZiAoIWRvbmUgXFx1MDAyNlxcdTAwMjYgY21kKVxcbi1cXHRcXHRpb191cmluZ19jbWRfZG9uZShjbWQsIFVCTEtfSU9fUkVTX0FCT1JULCBpc3N1ZV9mbGFncyk7XFxuK1xcdGlmICghZG9uZSBcXHUwMDI2XFx1MDAyNiBjbWQpIHtcXG4rXFx0XFx0aW9fdXJpbmdfY21kX3NldF9yZXMoY21kLCBVQkxLX0lPX1JFU19BQk9SVCk7XFxuK1xcdFxcdGlvX3VyaW5nX2NtZF9kb25lKGNtZCwgaXNzdWVfZmxhZ3MpO1xcbitcXHR9XFxuIH1cXG4gXFxuIC8qXFxuQEAgLTI4MTYsNyArMjgyMSw4IEBAIHN0YXRpYyB2b2lkIHVibGtfYmF0Y2hfY2FuY2VsX2NtZChzdHJ1Y3QgdWJsa19xdWV1ZSAqdWJxLFxcbiBcXHRzcGluX3VubG9jayhcXHUwMDI2dWJxLVxcdTAwM2VldnRzX2xvY2spO1xcbiBcXG4gXFx0aWYgKGRvbmUpIHtcXG4tXFx0XFx0aW9fdXJpbmdfY21kX2RvbmUoZmNtZC1cXHUwMDNlY21kLCBVQkxLX0lPX1JFU19BQk9SVCwgaXNzdWVfZmxhZ3MpO1xcbitcXHRcXHRpb191cmluZ19jbWRfc2V0X3JlcyhmY21kLVxcdTAwM2VjbWQsIFVCTEtfSU9fUkVTX0FCT1JUKTtcXG4rXFx0XFx0aW9fdXJpbmdfY21kX2RvbmUoZmNtZC1cXHUwMDNlY21kLCBpc3N1ZV9mbGFncyk7XFxuIFxcdFxcdHVibGtfYmF0Y2hfZnJlZV9mY21kKGZjbWQpO1xcbiBcXHR9XFxuIH1cXG5AQCAtMzUyNiw4ICszNTMyLDEwIEBAIHN0YXRpYyB2b2lkIHVibGtfY2hfdXJpbmdfY21kX2NiKHN0cnVjdCBpb190d19yZXEgdHdfcmVxLCBpb190d190b2tlbl90IHR3KVxcbiBcXG4gXFx0aWYgKCF0dy5jYW5jZWwpXFxuIFxcdFxcdHJldCA9IHVibGtfY2hfdXJpbmdfY21kX2xvY2FsKGNtZCwgaXNzdWVfZmxhZ3MpO1xcbi1cXHRpZiAocmV0ICE9IC1FSU9DQlFVRVVFRClcXG4tXFx0XFx0aW9fdXJpbmdfY21kX2RvbmUoY21kLCByZXQsIGlzc3VlX2ZsYWdzKTtcXG4rXFx0aWYgKHJldCAhPSAtRUlPQ0JRVUVVRUQpIHtcXG4rXFx0XFx0aW9fdXJpbmdfY21kX3NldF9yZXMoY21kLCByZXQpO1xcbitcXHRcXHRpb191cmluZ19jbWRfZG9uZShjbWQsIGlzc3VlX2ZsYWdzKTtcXG4rXFx0fVxcbiB9XFxuIFxcbiBzdGF0aWMgaW50IHVibGtfY2hfdXJpbmdfY21kKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jIGIvZHJpdmVycy9udm1lL2hvc3QvaW9jdGwuY1xcbmluZGV4IDY1MzlkNDc1MDA5ODYuLmI1MGJiYTIwNzgxOGIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9udm1lL2hvc3QvaW9jdGwuY1xcbisrKyBiL2RyaXZlcnMvbnZtZS9ob3N0L2lvY3RsLmNcXG5AQCAtNDIzLDggKzQyMyw2IEBAIHN0cnVjdCBudm1lX3VyaW5nX2RhdGEge1xcbiBzdHJ1Y3QgbnZtZV91cmluZ19jbWRfcGR1IHtcXG4gXFx0c3RydWN0IHJlcXVlc3QgKnJlcTtcXG4gXFx0c3RydWN0IGJpbyAqYmlvO1xcbi1cXHR1NjQgcmVzdWx0O1xcbi1cXHRpbnQgc3RhdHVzO1xcbiB9O1xcbiBcXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgbnZtZV91cmluZ19jbWRfcGR1ICpudm1lX3VyaW5nX2NtZF9wZHUoXFxuQEAgLTQ0MCw4ICs0MzgsNyBAQCBzdGF0aWMgdm9pZCBudm1lX3VyaW5nX3Rhc2tfY2Ioc3RydWN0IGlvX3R3X3JlcSB0d19yZXEsIGlvX3R3X3Rva2VuX3QgdHcpXFxuIFxcbiBcXHRpZiAocGR1LVxcdTAwM2ViaW8pXFxuIFxcdFxcdGJsa19ycV91bm1hcF91c2VyKHBkdS1cXHUwMDNlYmlvKTtcXG4tXFx0aW9fdXJpbmdfY21kX2RvbmUzMihpb3VjbWQsIHBkdS1cXHUwMDNlc3RhdHVzLCBwZHUtXFx1MDAzZXJlc3VsdCxcXG4tXFx0XFx0XFx0ICAgIElPX1VSSU5HX0NNRF9UQVNLX1dPUktfSVNTVUVfRkxBR1MpO1xcbitcXHRpb191cmluZ19jbWRfZG9uZShpb3VjbWQsIElPX1VSSU5HX0NNRF9UQVNLX1dPUktfSVNTVUVfRkxBR1MpO1xcbiB9XFxuIFxcbiBzdGF0aWMgZW51bSBycV9lbmRfaW9fcmV0IG52bWVfdXJpbmdfY21kX2VuZF9pbyhzdHJ1Y3QgcmVxdWVzdCAqcmVxLFxcbkBAIC00NTAsMTUgKzQ0NywxNyBAQCBzdGF0aWMgZW51bSBycV9lbmRfaW9fcmV0IG52bWVfdXJpbmdfY21kX2VuZF9pbyhzdHJ1Y3QgcmVxdWVzdCAqcmVxLFxcbiB7XFxuIFxcdHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCA9IHJlcS1cXHUwMDNlZW5kX2lvX2RhdGE7XFxuIFxcdHN0cnVjdCBudm1lX3VyaW5nX2NtZF9wZHUgKnBkdSA9IG52bWVfdXJpbmdfY21kX3BkdShpb3VjbWQpO1xcbitcXHR1NjQgcmVzdWx0ID0gbGU2NF90b19jcHUobnZtZV9yZXEocmVxKS1cXHUwMDNlcmVzdWx0LnU2NCk7XFxuK1xcdGludCBzdGF0dXM7XFxuIFxcbiBcXHRpZiAobnZtZV9yZXEocmVxKS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBOVk1FX1JFUV9DQU5DRUxMRUQpIHtcXG4tXFx0XFx0cGR1LVxcdTAwM2VzdGF0dXMgPSAtRUlOVFI7XFxuK1xcdFxcdHN0YXR1cyA9IC1FSU5UUjtcXG4gXFx0fSBlbHNlIHtcXG4tXFx0XFx0cGR1LVxcdTAwM2VzdGF0dXMgPSBudm1lX3JlcShyZXEpLVxcdTAwM2VzdGF0dXM7XFxuLVxcdFxcdGlmICghcGR1LVxcdTAwM2VzdGF0dXMpXFxuLVxcdFxcdFxcdHBkdS1cXHUwMDNlc3RhdHVzID0gYmxrX3N0YXR1c190b19lcnJubyhlcnIpO1xcbitcXHRcXHRzdGF0dXMgPSBudm1lX3JlcShyZXEpLVxcdTAwM2VzdGF0dXM7XFxuK1xcdFxcdGlmICghc3RhdHVzKVxcbitcXHRcXHRcXHRzdGF0dXMgPSBibGtfc3RhdHVzX3RvX2Vycm5vKGVycik7XFxuIFxcdH1cXG4tXFx0cGR1LVxcdTAwM2VyZXN1bHQgPSBsZTY0X3RvX2NwdShudm1lX3JlcShyZXEpLVxcdTAwM2VyZXN1bHQudTY0KTtcXG4rXFx0aW9fdXJpbmdfY21kX3NldF9yZXMzMihpb3VjbWQsIHN0YXR1cywgcmVzdWx0KTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIEZvciBJT1BPTEwsIGNoZWNrIGlmIHRoaXMgY29tcGxldGlvbiBpcyBoYXBwZW5pbmcgaW4gdGhlIGNvbnRleHRcXG5AQCAtNDcxLDcgKzQ3MCw3IEBAIHN0YXRpYyBlbnVtIHJxX2VuZF9pb19yZXQgbnZtZV91cmluZ19jbWRfZW5kX2lvKHN0cnVjdCByZXF1ZXN0ICpyZXEsXFxuIFxcdCAgICBpb2ItXFx1MDAzZXBvbGxfY3R4ID09IGlvX3VyaW5nX2NtZF9jdHhfaGFuZGxlKGlvdWNtZCkpIHtcXG4gXFx0XFx0aWYgKHBkdS1cXHUwMDNlYmlvKVxcbiBcXHRcXHRcXHRibGtfcnFfdW5tYXBfdXNlcihwZHUtXFx1MDAzZWJpbyk7XFxuLVxcdFxcdGlvX3VyaW5nX2NtZF9kb25lMzIoaW91Y21kLCBwZHUtXFx1MDAzZXN0YXR1cywgcGR1LVxcdTAwM2VyZXN1bHQsIDApO1xcbitcXHRcXHRpb191cmluZ19jbWRfZG9uZShpb3VjbWQsIDApO1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHRpb191cmluZ19jbWRfZG9faW5fdGFza19sYXp5KGlvdWNtZCwgbnZtZV91cmluZ190YXNrX2NiKTtcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9ic2cuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX2JzZy5jXFxuaW5kZXggZTgwZGVjNTMxNzRlYS4uOGIzMmQ4ZThmMjlmOSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9ic2cuY1xcbisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX2JzZy5jXFxuQEAgLTYwLDggKzYwLDggQEAgc3RhdGljIHZvaWQgc2NzaV9ic2dfdXJpbmdfdGFza19jYihzdHJ1Y3QgaW9fdHdfcmVxIHR3X3JlcSwgaW9fdHdfdG9rZW5fdCB0dylcXG4gXFx0XFx0XFx0XFx0ICBzY21kLVxcdTAwM2VyZXNpZF9sZW4pO1xcbiBcXG4gXFx0YmxrX21xX2ZyZWVfcmVxdWVzdChycSk7XFxuLVxcdGlvX3VyaW5nX2NtZF9kb25lMzIoaW91Y21kLCByZXQsIHJlczIsXFxuLVxcdFxcdFxcdCAgICBJT19VUklOR19DTURfVEFTS19XT1JLX0lTU1VFX0ZMQUdTKTtcXG4rXFx0aW9fdXJpbmdfY21kX3NldF9yZXMzMihpb3VjbWQsIHJldCwgcmVzMik7XFxuK1xcdGlvX3VyaW5nX2NtZF9kb25lKGlvdWNtZCwgSU9fVVJJTkdfQ01EX1RBU0tfV09SS19JU1NVRV9GTEFHUyk7XFxuIH1cXG4gXFxuIHN0YXRpYyBlbnVtIHJxX2VuZF9pb19yZXQgc2NzaV9ic2dfdXJpbmdfY21kX2RvbmUoc3RydWN0IHJlcXVlc3QgKnJlcSxcXG5kaWZmIC0tZ2l0IGEvZnMvYnRyZnMvaW9jdGwuYyBiL2ZzL2J0cmZzL2lvY3RsLmNcXG5pbmRleCA3MmJjOWQ0Zjc3MDg3Li4wNzA1N2E3MDg0NTI5IDEwMDY0NFxcbi0tLSBhL2ZzL2J0cmZzL2lvY3RsLmNcXG4rKysgYi9mcy9idHJmcy9pb2N0bC5jXFxuQEAgLTQ2MjEsNyArNDYyMSw4IEBAIHN0YXRpYyB2b2lkIGJ0cmZzX3VyaW5nX3JlYWRfZmluaXNoZWQoc3RydWN0IGlvX3R3X3JlcSB0d19yZXEsIGlvX3R3X3Rva2VuX3QgdHcpXFxuIFxcdGJ0cmZzX3VubG9ja19leHRlbnQoaW9fdHJlZSwgcHJpdi1cXHUwMDNlc3RhcnQsIHByaXYtXFx1MDAzZWxvY2tlbmQsIFxcdTAwMjZwcml2LVxcdTAwM2VjYWNoZWRfc3RhdGUpO1xcbiBcXHRidHJmc19pbm9kZV91bmxvY2soaW5vZGUsIEJUUkZTX0lMT0NLX1NIQVJFRCk7XFxuIFxcbi1cXHRpb191cmluZ19jbWRfZG9uZShjbWQsIHJldCwgSU9fVVJJTkdfQ01EX1RBU0tfV09SS19JU1NVRV9GTEFHUyk7XFxuK1xcdGlvX3VyaW5nX2NtZF9zZXRfcmVzKGNtZCwgcmV0KTtcXG4rXFx0aW9fdXJpbmdfY21kX2RvbmUoY21kLCBJT19VUklOR19DTURfVEFTS19XT1JLX0lTU1VFX0ZMQUdTKTtcXG4gXFx0YWRkX3JjaGFyKGN1cnJlbnQsIHJldCk7XFxuIFxcbiBcXHRmb3IgKGluZGV4ID0gMDsgaW5kZXggXFx1MDAzYyBwcml2LVxcdTAwM2Vucl9wYWdlczsgaW5kZXgrKylcXG5kaWZmIC0tZ2l0IGEvZnMvZnVzZS9kZXZfdXJpbmcuYyBiL2ZzL2Z1c2UvZGV2X3VyaW5nLmNcXG5pbmRleCA3N2M4Y2VjNDNkOWM2Li5jNWJiNTAxODNlMWM2IDEwMDY0NFxcbi0tLSBhL2ZzL2Z1c2UvZGV2X3VyaW5nLmNcXG4rKysgYi9mcy9mdXNlL2Rldl91cmluZy5jXFxuQEAgLTM2Niw4ICszNjYsMTAgQEAgc3RhdGljIHZvaWQgZnVzZV91cmluZ19lbnRyeV90ZWFyZG93bihzdHJ1Y3QgZnVzZV9yaW5nX2VudCAqZW50KVxcbiBcXHRlbnQtXFx1MDAzZXN0YXRlID0gRlJSU19SRUxFQVNFRDtcXG4gXFx0c3Bpbl91bmxvY2soXFx1MDAyNnF1ZXVlLVxcdTAwM2Vsb2NrKTtcXG4gXFxuLVxcdGlmIChjbWQpXFxuLVxcdFxcdGlvX3VyaW5nX2NtZF9kb25lKGNtZCwgLUVOT1RDT05OLCBJT19VUklOR19GX1VOTE9DS0VEKTtcXG4rXFx0aWYgKGNtZCkge1xcbitcXHRcXHRpb191cmluZ19jbWRfc2V0X3JlcyhjbWQsIC1FTk9UQ09OTik7XFxuK1xcdFxcdGlvX3VyaW5nX2NtZF9kb25lKGNtZCwgSU9fVVJJTkdfRl9VTkxPQ0tFRCk7XFxuK1xcdH1cXG4gXFxuIFxcdGlmIChyZXEpXFxuIFxcdFxcdGZ1c2VfdXJpbmdfc3RvcF9mdXNlX3JlcV9lbmQocmVxKTtcXG5AQCAtNTMxLDcgKzUzMyw4IEBAIHN0YXRpYyB2b2lkIGZ1c2VfdXJpbmdfY2FuY2VsKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCxcXG4gXFxuIFxcdGlmIChuZWVkX2NtZF9kb25lKSB7XFxuIFxcdFxcdC8qIG5vIHF1ZXVlIGxvY2sgdG8gYXZvaWQgbG9jayBvcmRlciBpc3N1ZXMgKi9cXG4tXFx0XFx0aW9fdXJpbmdfY21kX2RvbmUoY21kLCAtRU5PVENPTk4sIGlzc3VlX2ZsYWdzKTtcXG4rXFx0XFx0aW9fdXJpbmdfY21kX3NldF9yZXMoY21kLCAtRU5PVENPTk4pO1xcbitcXHRcXHRpb191cmluZ19jbWRfZG9uZShjbWQsIGlzc3VlX2ZsYWdzKTtcXG4gXFx0XFx0a2ZyZWUoZW50KTtcXG4gXFx0XFx0aWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoXFx1MDAyNnF1ZXVlLVxcdTAwM2VyaW5nLVxcdTAwM2VxdWV1ZV9yZWZzKSlcXG4gXFx0XFx0XFx0d2FrZV91cF9hbGwoXFx1MDAyNnF1ZXVlLVxcdTAwM2VyaW5nLVxcdTAwM2VzdG9wX3dhaXRxKTtcXG5AQCAtOTQyLDcgKzk0NSw4IEBAIHN0YXRpYyB2b2lkIGZ1c2VfdXJpbmdfc2VuZChzdHJ1Y3QgZnVzZV9yaW5nX2VudCAqZW50LCBzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsXFxuIFxcdGZ1c2VfdXJpbmdfYWRkX3RvX3BxKGVudCk7XFxuIFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZxdWV1ZS1cXHUwMDNlbG9jayk7XFxuIFxcbi1cXHRpb191cmluZ19jbWRfZG9uZShjbWQsIHJldCwgaXNzdWVfZmxhZ3MpO1xcbitcXHRpb191cmluZ19jbWRfc2V0X3JlcyhjbWQsIHJldCk7XFxuK1xcdGlvX3VyaW5nX2NtZF9kb25lKGNtZCwgaXNzdWVfZmxhZ3MpO1xcbiB9XFxuIFxcbiAvKiBGVVNFX1VSSU5HX0NNRF9DT01NSVRfQU5EX0ZFVENIIGhhbmRsZXIgKi9cXG5AQCAtMTMwOSw3ICsxMzEzLDggQEAgc3RhdGljIHZvaWQgZnVzZV91cmluZ19zZW5kX2luX3Rhc2soc3RydWN0IGlvX3R3X3JlcSB0d19yZXEsIGlvX3R3X3Rva2VuX3QgdHcpXFxuIFxcdFxcdGxpc3RfZGVsX2luaXQoXFx1MDAyNmVudC1cXHUwMDNlbGlzdCk7XFxuIFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZxdWV1ZS1cXHUwMDNlbG9jayk7XFxuIFxcbi1cXHRcXHRpb191cmluZ19jbWRfZG9uZShjbWQsIGVyciwgaXNzdWVfZmxhZ3MpO1xcbitcXHRcXHRpb191cmluZ19jbWRfc2V0X3JlcyhjbWQsIGVycik7XFxuK1xcdFxcdGlvX3VyaW5nX2NtZF9kb25lKGNtZCwgaXNzdWVfZmxhZ3MpO1xcbiBcXG4gXFx0XFx0ZnVzZV91cmluZ19yZXFfZW5kKGVudCwgZW50LVxcdTAwM2VmdXNlX3JlcSwgZXJyKTtcXG4gXFx0XFx0a2ZyZWUoZW50KTtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pb191cmluZy9jbWQuaCBiL2luY2x1ZGUvbGludXgvaW9fdXJpbmcvY21kLmhcXG5pbmRleCAzMzFkY2JlZmU3MmYxLi45NmZjYzA2MDk3YzRlIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvaW9fdXJpbmcvY21kLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2lvX3VyaW5nL2NtZC5oXFxuQEAgLTUyLDYgKzUyLDEwIEBAIGludCBpb191cmluZ19jbWRfaW1wb3J0X2ZpeGVkX3ZlYyhzdHJ1Y3QgaW9fdXJpbmdfY21kICppb3VjbWQsXFxuIFxcdFxcdFxcdFxcdCAgaW50IGRkaXIsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4gXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBpc3N1ZV9mbGFncyk7XFxuIFxcbisvKiBPbmUgb2YgdGhlc2UgbXVzdCBiZSBjYWxsZWQgcHJpb3IgdG8gaW9fdXJpbmdfY21kX2RvbmUoKSAqL1xcbit2b2lkIGlvX3VyaW5nX2NtZF9zZXRfcmVzKHN0cnVjdCBpb191cmluZ19jbWQgKiwgczMyIHJldCk7XFxuK3ZvaWQgaW9fdXJpbmdfY21kX3NldF9yZXMzMihzdHJ1Y3QgaW9fdXJpbmdfY21kICosIHMzMiByZXQsIHU2NCByZXMyKTtcXG4rXFxuIC8qXFxuICAqIENvbXBsZXRlcyB0aGUgcmVxdWVzdCwgaS5lLiBwb3N0cyBhbiBpb191cmluZyBDUUUgYW5kIGRlYWxsb2NhdGVzIEBpb3VjbWRcXG4gICogYW5kIHRoZSBjb3JyZXNwb25kaW5nIGlvX3VyaW5nIHJlcXVlc3QuXFxuQEAgLTU5LDggKzYzLDcgQEAgaW50IGlvX3VyaW5nX2NtZF9pbXBvcnRfZml4ZWRfdmVjKHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCxcXG4gICogTm90ZTogdGhlIGNhbGxlciBzaG91bGQgbmV2ZXIgaGFyZCBjb2RlIEBpc3N1ZV9mbGFncyBhbmQgaXMgb25seSBhbGxvd2VkXFxuICAqIHRvIHBhc3MgdGhlIG1hc2sgcHJvdmlkZWQgYnkgdGhlIGNvcmUgaW9fdXJpbmcgY29kZS5cXG4gICovXFxuLXZvaWQgX19pb191cmluZ19jbWRfZG9uZShzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsIHMzMiByZXQsIHU2NCByZXMyLFxcbi1cXHRcXHRcXHQgdW5zaWduZWQgaXNzdWVfZmxhZ3MsIGJvb2wgaXNfY3FlMzIpO1xcbit2b2lkIGlvX3VyaW5nX2NtZF9kb25lKHN0cnVjdCBpb191cmluZ19jbWQgKiwgdW5zaWduZWQgaXNzdWVfZmxhZ3MpO1xcbiBcXG4gdm9pZCBfX2lvX3VyaW5nX2NtZF9kb19pbl90YXNrKHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCxcXG4gXFx0XFx0XFx0ICAgIGlvX3JlcV90d19mdW5jX3QgdGFza193b3JrX2NiLFxcbkBAIC0xMDcsOCArMTEwLDE1IEBAIHN0YXRpYyBpbmxpbmUgaW50IGlvX3VyaW5nX2NtZF9pbXBvcnRfZml4ZWRfdmVjKHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCxcXG4ge1xcbiBcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIH1cXG4tc3RhdGljIGlubGluZSB2b2lkIF9faW9fdXJpbmdfY21kX2RvbmUoc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLCBzMzIgcmV0LFxcbi1cXHRcXHR1NjQgcmV0MiwgdW5zaWduZWQgaXNzdWVfZmxhZ3MsIGJvb2wgaXNfY3FlMzIpXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBpb191cmluZ19jbWRfc2V0X3JlcyhzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsIHMzMiByZXQpXFxuK3tcXG4rfVxcbitzdGF0aWMgaW5saW5lIHZvaWQgaW9fdXJpbmdfY21kX3NldF9yZXMzMihzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsIHMzMiByZXQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgdTY0IHJlczIpXFxuK3tcXG4rfVxcbitzdGF0aWMgaW5saW5lIHZvaWQgaW9fdXJpbmdfY21kX2RvbmUoc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLFxcbitcXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGlzc3VlX2ZsYWdzKVxcbiB7XFxuIH1cXG4gc3RhdGljIGlubGluZSB2b2lkIF9faW9fdXJpbmdfY21kX2RvX2luX3Rhc2soc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y21kLFxcbkBAIC0xNzAsMTggKzE4MCw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCAqaW9fdXJpbmdfY21kX2N0eF9oYW5kbGUoc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kKVxcbiBcXHRyZXR1cm4gY21kX3RvX2lvX2tpb2NiKGNtZCktXFx1MDAzZWN0eDtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSB2b2lkIGlvX3VyaW5nX2NtZF9kb25lKHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCwgczMyIHJldCxcXG4tXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBpc3N1ZV9mbGFncylcXG4te1xcbi1cXHRyZXR1cm4gX19pb191cmluZ19jbWRfZG9uZShpb3VjbWQsIHJldCwgMCwgaXNzdWVfZmxhZ3MsIGZhbHNlKTtcXG4tfVxcbi1cXG4tc3RhdGljIGlubGluZSB2b2lkIGlvX3VyaW5nX2NtZF9kb25lMzIoc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y21kLCBzMzIgcmV0LFxcbi1cXHRcXHRcXHRcXHQgICAgICAgdTY0IHJlczIsIHVuc2lnbmVkIGlzc3VlX2ZsYWdzKVxcbi17XFxuLVxcdHJldHVybiBfX2lvX3VyaW5nX2NtZF9kb25lKGlvdWNtZCwgcmV0LCByZXMyLCBpc3N1ZV9mbGFncywgdHJ1ZSk7XFxuLX1cXG4tXFxuIGludCBpb19idWZmZXJfcmVnaXN0ZXJfYnZlYyhzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsIHN0cnVjdCByZXF1ZXN0ICpycSxcXG4gXFx0XFx0XFx0ICAgIHZvaWQgKCpyZWxlYXNlKSh2b2lkICopLCB1bnNpZ25lZCBpbnQgaW5kZXgsXFxuIFxcdFxcdFxcdCAgICB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpO1xcbmRpZmYgLS1naXQgYS9pb191cmluZy91cmluZ19jbWQuYyBiL2lvX3VyaW5nL3VyaW5nX2NtZC5jXFxuaW5kZXggNzI2YTY1OWYzOGMzOC4uZWYzZTdlMzUyYzZhZiAxMDA2NDRcXG4tLS0gYS9pb191cmluZy91cmluZ19jbWQuY1xcbisrKyBiL2lvX3VyaW5nL3VyaW5nX2NtZC5jXFxuQEAgLTEzOCwxOSArMTM4LDMxIEBAIHZvaWQgX19pb191cmluZ19jbWRfZG9faW5fdGFzayhzdHJ1Y3QgaW9fdXJpbmdfY21kICppb3VjbWQsXFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwoX19pb191cmluZ19jbWRfZG9faW5fdGFzayk7XFxuIFxcbi1zdGF0aWMgaW5saW5lIHZvaWQgaW9fcmVxX3NldF9jcWUzMl9leHRyYShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcXG4tXFx0XFx0XFx0XFx0XFx0ICB1NjQgZXh0cmExLCB1NjQgZXh0cmEyKVxcbit2b2lkIGlvX3VyaW5nX2NtZF9zZXRfcmVzKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCwgczMyIHJldClcXG4ge1xcbi1cXHRyZXEtXFx1MDAzZWJpZ19jcWUuZXh0cmExID0gZXh0cmExO1xcbi1cXHRyZXEtXFx1MDAzZWJpZ19jcWUuZXh0cmEyID0gZXh0cmEyO1xcbitcXHRzdHJ1Y3QgaW9fa2lvY2IgKnJlcSA9IGNtZF90b19pb19raW9jYihjbWQpO1xcbitcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJlcV9zZXRfZmFpbChyZXEpO1xcbitcXHRpb19yZXFfc2V0X3JlcyhyZXEsIHJldCwgMCk7XFxuIH1cXG4rRVhQT1JUX1NZTUJPTF9HUEwoaW9fdXJpbmdfY21kX3NldF9yZXMpO1xcbitcXG4rdm9pZCBpb191cmluZ19jbWRfc2V0X3JlczMyKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCwgczMyIHJldCwgdTY0IHJlczIpXFxuK3tcXG4rXFx0c3RydWN0IGlvX2tpb2NiICpyZXEgPSBjbWRfdG9faW9fa2lvY2IoY21kKTtcXG4rXFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXFfc2V0X2ZhaWwocmVxKTtcXG4rXFx0aW9fcmVxX3NldF9yZXMzMihyZXEsIHJldCwgMCwgcmVzMiwgMCk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwoaW9fdXJpbmdfY21kX3NldF9yZXMzMik7XFxuIFxcbiAvKlxcbiAgKiBDYWxsZWQgYnkgY29uc3VtZXJzIG9mIGlvX3VyaW5nX2NtZCwgaWYgdGhleSBvcmlnaW5hbGx5IHJldHVybmVkXFxuICAqIC1FSU9DQlFVRVVFRCB1cG9uIHJlY2VpdmluZyB0aGUgY29tbWFuZC5cXG4gICovXFxuLXZvaWQgX19pb191cmluZ19jbWRfZG9uZShzdHJ1Y3QgaW9fdXJpbmdfY21kICppb3VjbWQsIHMzMiByZXQsIHU2NCByZXMyLFxcbi1cXHRcXHQgICAgICAgdW5zaWduZWQgaXNzdWVfZmxhZ3MsIGJvb2wgaXNfY3FlMzIpXFxuK3ZvaWQgaW9fdXJpbmdfY21kX2RvbmUoc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y21kLCB1bnNpZ25lZCBpc3N1ZV9mbGFncylcXG4ge1xcbiBcXHRzdHJ1Y3QgaW9fa2lvY2IgKnJlcSA9IGNtZF90b19pb19raW9jYihpb3VjbWQpO1xcbiBcXG5AQCAtMTU5LDE1ICsxNzEsNiBAQCB2b2lkIF9faW9fdXJpbmdfY21kX2RvbmUoc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y21kLCBzMzIgcmV0LCB1NjQgcmVzMixcXG4gXFxuIFxcdGlvX3VyaW5nX2NtZF9kZWxfY2FuY2VsYWJsZShpb3VjbWQsIGlzc3VlX2ZsYWdzKTtcXG4gXFxuLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi1cXHRcXHRyZXFfc2V0X2ZhaWwocmVxKTtcXG4tXFxuLVxcdGlvX3JlcV9zZXRfcmVzKHJlcSwgcmV0LCAwKTtcXG4tXFx0aWYgKGlzX2NxZTMyKSB7XFxuLVxcdFxcdGlmIChyZXEtXFx1MDAzZWN0eC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JJTkdfU0VUVVBfQ1FFX01JWEVEKVxcbi1cXHRcXHRcXHRyZXEtXFx1MDAzZWNxZS5mbGFncyB8PSBJT1JJTkdfQ1FFX0ZfMzI7XFxuLVxcdFxcdGlvX3JlcV9zZXRfY3FlMzJfZXh0cmEocmVxLCByZXMyLCAwKTtcXG4tXFx0fVxcbiBcXHRpb19yZXFfdXJpbmdfY2xlYW51cChyZXEsIGlzc3VlX2ZsYWdzKTtcXG4gXFx0aWYgKHJlcS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBSRVFfRl9JT1BPTEwpIHtcXG4gXFx0XFx0Lyogb3JkZXIgd2l0aCBpb19kb19pb3BvbGwoKSBjaGVja2luZyAtXFx1MDAzZWlvcG9sbF9jb21wbGV0ZWQgKi9cXG5AQCAtMTgxLDcgKzE4NCw3IEBAIHZvaWQgX19pb191cmluZ19jbWRfZG9uZShzdHJ1Y3QgaW9fdXJpbmdfY21kICppb3VjbWQsIHMzMiByZXQsIHU2NCByZXMyLFxcbiBcXHRcXHRpb19yZXFfdGFza193b3JrX2FkZChyZXEpO1xcbiBcXHR9XFxuIH1cXG4tRVhQT1JUX1NZTUJPTF9HUEwoX19pb191cmluZ19jbWRfZG9uZSk7XFxuK0VYUE9SVF9TWU1CT0xfR1BMKGlvX3VyaW5nX2NtZF9kb25lKTtcXG4gXFxuIGludCBpb191cmluZ19jbWRfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKVxcbiB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDE5OjIyOjM1LjY5ODUzMTU3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NDk2MzQxMTU2ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU9fVVJJTkdcIixcbiAgICBcIkJMS19ERVZfVUJMS1wiLFxuICAgIFwiTlZNRV9DT1JFXCIsXG4gICAgXCJCTEtfREVWX05WTUVcIixcbiAgICBcIkJMS19ERVZfQlNHXCIsXG4gICAgXCJCVFJGU19GU1wiLFxuICAgIFwiRlVTRV9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvX3VyaW5nX2NtZF9zZXRfcmVzXCIsXG4gICAgXCJpb191cmluZ19jbWRfc2V0X3JlczMyXCIsXG4gICAgXCJpb191cmluZ19jbWRfZG9uZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGlvX3VyaW5nIGNvbW1hbmQgQVBJIGJ5IHNwbGl0dGluZyBgaW9fdXJpbmdfY21kX2RvbmVgIGludG8gYGlvX3VyaW5nX2NtZF9zZXRfcmVzYCAob3IgYGlvX3VyaW5nX2NtZF9zZXRfcmVzMzJgKSBhbmQgYGlvX3VyaW5nX2NtZF9kb25lYC4gVGhpcyBhZmZlY3RzIGhvdyByZXN1bHRzIGFyZSByZXR1cm5lZCBmb3IgaW9fdXJpbmcgY29tbWFuZHMgYWNyb3NzIG11bHRpcGxlIHN1YnN5c3RlbXMgaW5jbHVkaW5nIGJsb2NrLCB1YmxrLCBudm1lLCBzY3NpIGJzZywgYnRyZnMsIGFuZCBmdXNlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUga2VybmVsIEFQSSBhbmQgaXRzIGNhbGxlcnMsIHdoaWNoIGlzIHdvcnRoIGZ1enppbmcgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIGluY29ycmVjdCByZXN1bHQgaGFuZGxpbmcgYXJlIGludHJvZHVjZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDM1ZjZjMWNkNWJjOWY3OWQ3N2M4NWY2YjFmNjhhYzNmNmYxYWEyYzNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAyNyAxOToyMjozMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2Jsb2NrL2lvY3RsLmMgYi9ibG9jay9pb2N0bC5jXG5pbmRleCA2NGI0ZTZjMGY2OTY1Li45NDZjYWI3NGYyNTNlIDEwMDY0NFxuLS0tIGEvYmxvY2svaW9jdGwuY1xuKysrIGIvYmxvY2svaW9jdGwuY1xuQEAgLTg3MSw5ICs4NzEsMTAgQEAgc3RhdGljIHZvaWQgYmxrX2NtZF9jb21wbGV0ZShzdHJ1Y3QgaW9fdHdfcmVxIHR3X3JlcSwgaW9fdHdfdG9rZW5fdCB0dylcbiBcbiBcdGlmIChiaWMtXHUwMDNlcmVzID09IC1FQUdBSU4gXHUwMDI2XHUwMDI2IGJpYy1cdTAwM2Vub3dhaXQpXG4gXHRcdGlvX3VyaW5nX2NtZF9pc3N1ZV9ibG9ja2luZyhjbWQpO1xuLVx0ZWxzZVxuLVx0XHRpb191cmluZ19jbWRfZG9uZShjbWQsIGJpYy1cdTAwM2VyZXMsXG4tXHRcdFx0XHQgIElPX1VSSU5HX0NNRF9UQVNLX1dPUktfSVNTVUVfRkxBR1MpO1xuK1x0ZWxzZSB7XG4rXHRcdGlvX3VyaW5nX2NtZF9zZXRfcmVzKGNtZCwgYmljLVx1MDAzZXJlcyk7XG4rXHRcdGlvX3VyaW5nX2NtZF9kb25lKGNtZCwgSU9fVVJJTkdfQ01EX1RBU0tfV09SS19JU1NVRV9GTEFHUyk7XG4rXHR9XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGJpb19jbWRfYmlvX2VuZF9pbyhzdHJ1Y3QgYmlvICpiaW8pXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay91YmxrX2Rydi5jIGIvZHJpdmVycy9ibG9jay91YmxrX2Rydi5jXG5pbmRleCA0ZDE3ZWQyNjRkYTFhLi41MWYxNWU1YjNjMDFkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibG9jay91YmxrX2Rydi5jXG4rKysgYi9kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmNcbkBAIC04MzksNyArODM5LDggQEAgc3RhdGljIHZvaWQgdWJsa19iYXRjaF9kZWluaXRfZmV0Y2hfYnVmKHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEsXG4gXHRfX3VibGtfcmVsZWFzZV9mY21kKHVicSk7XG4gXHRzcGluX3VubG9jayhcdTAwMjZ1YnEtXHUwMDNlZXZ0c19sb2NrKTtcbiBcbi1cdGlvX3VyaW5nX2NtZF9kb25lKGZjbWQtXHUwMDNlY21kLCByZXMsIGRhdGEtXHUwMDNlaXNzdWVfZmxhZ3MpO1xuK1x0aW9fdXJpbmdfY21kX3NldF9yZXMoZmNtZC1cdTAwM2VjbWQsIHJlcyk7XG4rXHRpb191cmluZ19jbWRfZG9uZShmY21kLVx1MDAzZWNtZCwgZGF0YS1cdTAwM2Vpc3N1ZV9mbGFncyk7XG4gXHR1YmxrX2JhdGNoX2ZyZWVfZmNtZChmY21kKTtcbiB9XG4gXG5AQCAtMTY0Miw3ICsxNjQzLDggQEAgc3RhdGljIHZvaWQgdWJsa19jb21wbGV0ZV9pb19jbWQoc3RydWN0IHVibGtfaW8gKmlvLCBzdHJ1Y3QgcmVxdWVzdCAqcmVxLFxuIFx0c3RydWN0IGlvX3VyaW5nX2NtZCAqY21kID0gX191YmxrX3ByZXBfY29tcGxfaW9fY21kKGlvLCByZXEpO1xuIFxuIFx0LyogdGVsbCB1Ymxrc3J2IG9uZSBpbyByZXF1ZXN0IGlzIGNvbWluZyAqL1xuLVx0aW9fdXJpbmdfY21kX2RvbmUoY21kLCByZXMsIGlzc3VlX2ZsYWdzKTtcbitcdGlvX3VyaW5nX2NtZF9zZXRfcmVzKGNtZCwgcmVzKTtcbitcdGlvX3VyaW5nX2NtZF9kb25lKGNtZCwgaXNzdWVfZmxhZ3MpO1xuIH1cbiBcbiAjZGVmaW5lIFVCTEtfUkVRVUVVRV9ERUxBWV9NU1x0M1xuQEAgLTE3MjgsNyArMTczMCw4IEBAIHN0YXRpYyB2b2lkIHVibGtfYXV0b19idWZfZGlzcGF0Y2goY29uc3Qgc3RydWN0IHVibGtfcXVldWUgKnVicSxcbiBcbiBcdGlmIChyZXMgIT0gQVVUT19CVUZfUkVHX0ZBSUwpIHtcbiBcdFx0dWJsa19hdXRvX2J1Zl9pb19zZXR1cCh1YnEsIHJlcSwgaW8sIGNtZCwgcmVzKTtcbi1cdFx0aW9fdXJpbmdfY21kX2RvbmUoY21kLCBVQkxLX0lPX1JFU19PSywgaXNzdWVfZmxhZ3MpO1xuK1x0XHRpb191cmluZ19jbWRfc2V0X3JlcyhjbWQsIFVCTEtfSU9fUkVTX09LKTtcbitcdFx0aW9fdXJpbmdfY21kX2RvbmUoY21kLCBpc3N1ZV9mbGFncyk7XG4gXHR9XG4gfVxuIFxuQEAgLTI3ODksOCArMjc5MiwxMCBAQCBzdGF0aWMgdm9pZCB1YmxrX2NhbmNlbF9jbWQoc3RydWN0IHVibGtfcXVldWUgKnVicSwgdTE2IHRhZyxcbiBcdH1cbiBcdHNwaW5fdW5sb2NrKFx1MDAyNnVicS1cdTAwM2VjYW5jZWxfbG9jayk7XG4gXG4tXHRpZiAoIWRvbmUgXHUwMDI2XHUwMDI2IGNtZClcbi1cdFx0aW9fdXJpbmdfY21kX2RvbmUoY21kLCBVQkxLX0lPX1JFU19BQk9SVCwgaXNzdWVfZmxhZ3MpO1xuK1x0aWYgKCFkb25lIFx1MDAyNlx1MDAyNiBjbWQpIHtcbitcdFx0aW9fdXJpbmdfY21kX3NldF9yZXMoY21kLCBVQkxLX0lPX1JFU19BQk9SVCk7XG4rXHRcdGlvX3VyaW5nX2NtZF9kb25lKGNtZCwgaXNzdWVfZmxhZ3MpO1xuK1x0fVxuIH1cbiBcbiAvKlxuQEAgLTI4MTYsNyArMjgyMSw4IEBAIHN0YXRpYyB2b2lkIHVibGtfYmF0Y2hfY2FuY2VsX2NtZChzdHJ1Y3QgdWJsa19xdWV1ZSAqdWJxLFxuIFx0c3Bpbl91bmxvY2soXHUwMDI2dWJxLVx1MDAzZWV2dHNfbG9jayk7XG4gXG4gXHRpZiAoZG9uZSkge1xuLVx0XHRpb191cmluZ19jbWRfZG9uZShmY21kLVx1MDAzZWNtZCwgVUJMS19JT19SRVNfQUJPUlQsIGlzc3VlX2ZsYWdzKTtcbitcdFx0aW9fdXJpbmdfY21kX3NldF9yZXMoZmNtZC1cdTAwM2VjbWQsIFVCTEtfSU9fUkVTX0FCT1JUKTtcbitcdFx0aW9fdXJpbmdfY21kX2RvbmUoZmNtZC1cdTAwM2VjbWQsIGlzc3VlX2ZsYWdzKTtcbiBcdFx0dWJsa19iYXRjaF9mcmVlX2ZjbWQoZmNtZCk7XG4gXHR9XG4gfVxuQEAgLTM1MjYsOCArMzUzMiwxMCBAQCBzdGF0aWMgdm9pZCB1YmxrX2NoX3VyaW5nX2NtZF9jYihzdHJ1Y3QgaW9fdHdfcmVxIHR3X3JlcSwgaW9fdHdfdG9rZW5fdCB0dylcbiBcbiBcdGlmICghdHcuY2FuY2VsKVxuIFx0XHRyZXQgPSB1YmxrX2NoX3VyaW5nX2NtZF9sb2NhbChjbWQsIGlzc3VlX2ZsYWdzKTtcbi1cdGlmIChyZXQgIT0gLUVJT0NCUVVFVUVEKVxuLVx0XHRpb191cmluZ19jbWRfZG9uZShjbWQsIHJldCwgaXNzdWVfZmxhZ3MpO1xuK1x0aWYgKHJldCAhPSAtRUlPQ0JRVUVVRUQpIHtcbitcdFx0aW9fdXJpbmdfY21kX3NldF9yZXMoY21kLCByZXQpO1xuK1x0XHRpb191cmluZ19jbWRfZG9uZShjbWQsIGlzc3VlX2ZsYWdzKTtcbitcdH1cbiB9XG4gXG4gc3RhdGljIGludCB1YmxrX2NoX3VyaW5nX2NtZChzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbmRpZmYgLS1naXQgYS9kcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jIGIvZHJpdmVycy9udm1lL2hvc3QvaW9jdGwuY1xuaW5kZXggNjUzOWQ0NzUwMDk4Ni4uYjUwYmJhMjA3ODE4YiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbnZtZS9ob3N0L2lvY3RsLmNcbisrKyBiL2RyaXZlcnMvbnZtZS9ob3N0L2lvY3RsLmNcbkBAIC00MjMsOCArNDIzLDYgQEAgc3RydWN0IG52bWVfdXJpbmdfZGF0YSB7XG4gc3RydWN0IG52bWVfdXJpbmdfY21kX3BkdSB7XG4gXHRzdHJ1Y3QgcmVxdWVzdCAqcmVxO1xuIFx0c3RydWN0IGJpbyAqYmlvO1xuLVx0dTY0IHJlc3VsdDtcbi1cdGludCBzdGF0dXM7XG4gfTtcbiBcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBudm1lX3VyaW5nX2NtZF9wZHUgKm52bWVfdXJpbmdfY21kX3BkdShcbkBAIC00NDAsOCArNDM4LDcgQEAgc3RhdGljIHZvaWQgbnZtZV91cmluZ190YXNrX2NiKHN0cnVjdCBpb190d19yZXEgdHdfcmVxLCBpb190d190b2tlbl90IHR3KVxuIFxuIFx0aWYgKHBkdS1cdTAwM2ViaW8pXG4gXHRcdGJsa19ycV91bm1hcF91c2VyKHBkdS1cdTAwM2ViaW8pO1xuLVx0aW9fdXJpbmdfY21kX2RvbmUzMihpb3VjbWQsIHBkdS1cdTAwM2VzdGF0dXMsIHBkdS1cdTAwM2VyZXN1bHQsXG4tXHRcdFx0ICAgIElPX1VSSU5HX0NNRF9UQVNLX1dPUktfSVNTVUVfRkxBR1MpO1xuK1x0aW9fdXJpbmdfY21kX2RvbmUoaW91Y21kLCBJT19VUklOR19DTURfVEFTS19XT1JLX0lTU1VFX0ZMQUdTKTtcbiB9XG4gXG4gc3RhdGljIGVudW0gcnFfZW5kX2lvX3JldCBudm1lX3VyaW5nX2NtZF9lbmRfaW8oc3RydWN0IHJlcXVlc3QgKnJlcSxcbkBAIC00NTAsMTUgKzQ0NywxNyBAQCBzdGF0aWMgZW51bSBycV9lbmRfaW9fcmV0IG52bWVfdXJpbmdfY21kX2VuZF9pbyhzdHJ1Y3QgcmVxdWVzdCAqcmVxLFxuIHtcbiBcdHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCA9IHJlcS1cdTAwM2VlbmRfaW9fZGF0YTtcbiBcdHN0cnVjdCBudm1lX3VyaW5nX2NtZF9wZHUgKnBkdSA9IG52bWVfdXJpbmdfY21kX3BkdShpb3VjbWQpO1xuK1x0dTY0IHJlc3VsdCA9IGxlNjRfdG9fY3B1KG52bWVfcmVxKHJlcSktXHUwMDNlcmVzdWx0LnU2NCk7XG4rXHRpbnQgc3RhdHVzO1xuIFxuIFx0aWYgKG52bWVfcmVxKHJlcSktXHUwMDNlZmxhZ3MgXHUwMDI2IE5WTUVfUkVRX0NBTkNFTExFRCkge1xuLVx0XHRwZHUtXHUwMDNlc3RhdHVzID0gLUVJTlRSO1xuK1x0XHRzdGF0dXMgPSAtRUlOVFI7XG4gXHR9IGVsc2Uge1xuLVx0XHRwZHUtXHUwMDNlc3RhdHVzID0gbnZtZV9yZXEocmVxKS1cdTAwM2VzdGF0dXM7XG4tXHRcdGlmICghcGR1LVx1MDAzZXN0YXR1cylcbi1cdFx0XHRwZHUtXHUwMDNlc3RhdHVzID0gYmxrX3N0YXR1c190b19lcnJubyhlcnIpO1xuK1x0XHRzdGF0dXMgPSBudm1lX3JlcShyZXEpLVx1MDAzZXN0YXR1cztcbitcdFx0aWYgKCFzdGF0dXMpXG4rXHRcdFx0c3RhdHVzID0gYmxrX3N0YXR1c190b19lcnJubyhlcnIpO1xuIFx0fVxuLVx0cGR1LVx1MDAzZXJlc3VsdCA9IGxlNjRfdG9fY3B1KG52bWVfcmVxKHJlcSktXHUwMDNlcmVzdWx0LnU2NCk7XG4rXHRpb191cmluZ19jbWRfc2V0X3JlczMyKGlvdWNtZCwgc3RhdHVzLCByZXN1bHQpO1xuIFxuIFx0LypcbiBcdCAqIEZvciBJT1BPTEwsIGNoZWNrIGlmIHRoaXMgY29tcGxldGlvbiBpcyBoYXBwZW5pbmcgaW4gdGhlIGNvbnRleHRcbkBAIC00NzEsNyArNDcwLDcgQEAgc3RhdGljIGVudW0gcnFfZW5kX2lvX3JldCBudm1lX3VyaW5nX2NtZF9lbmRfaW8oc3RydWN0IHJlcXVlc3QgKnJlcSxcbiBcdCAgICBpb2ItXHUwMDNlcG9sbF9jdHggPT0gaW9fdXJpbmdfY21kX2N0eF9oYW5kbGUoaW91Y21kKSkge1xuIFx0XHRpZiAocGR1LVx1MDAzZWJpbylcbiBcdFx0XHRibGtfcnFfdW5tYXBfdXNlcihwZHUtXHUwMDNlYmlvKTtcbi1cdFx0aW9fdXJpbmdfY21kX2RvbmUzMihpb3VjbWQsIHBkdS1cdTAwM2VzdGF0dXMsIHBkdS1cdTAwM2VyZXN1bHQsIDApO1xuK1x0XHRpb191cmluZ19jbWRfZG9uZShpb3VjbWQsIDApO1xuIFx0fSBlbHNlIHtcbiBcdFx0aW9fdXJpbmdfY21kX2RvX2luX3Rhc2tfbGF6eShpb3VjbWQsIG52bWVfdXJpbmdfdGFza19jYik7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfYnNnLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9ic2cuY1xuaW5kZXggZTgwZGVjNTMxNzRlYS4uOGIzMmQ4ZThmMjlmOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX2JzZy5jXG4rKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9ic2cuY1xuQEAgLTYwLDggKzYwLDggQEAgc3RhdGljIHZvaWQgc2NzaV9ic2dfdXJpbmdfdGFza19jYihzdHJ1Y3QgaW9fdHdfcmVxIHR3X3JlcSwgaW9fdHdfdG9rZW5fdCB0dylcbiBcdFx0XHRcdCAgc2NtZC1cdTAwM2VyZXNpZF9sZW4pO1xuIFxuIFx0YmxrX21xX2ZyZWVfcmVxdWVzdChycSk7XG4tXHRpb191cmluZ19jbWRfZG9uZTMyKGlvdWNtZCwgcmV0LCByZXMyLFxuLVx0XHRcdCAgICBJT19VUklOR19DTURfVEFTS19XT1JLX0lTU1VFX0ZMQUdTKTtcbitcdGlvX3VyaW5nX2NtZF9zZXRfcmVzMzIoaW91Y21kLCByZXQsIHJlczIpO1xuK1x0aW9fdXJpbmdfY21kX2RvbmUoaW91Y21kLCBJT19VUklOR19DTURfVEFTS19XT1JLX0lTU1VFX0ZMQUdTKTtcbiB9XG4gXG4gc3RhdGljIGVudW0gcnFfZW5kX2lvX3JldCBzY3NpX2JzZ191cmluZ19jbWRfZG9uZShzdHJ1Y3QgcmVxdWVzdCAqcmVxLFxuZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2lvY3RsLmMgYi9mcy9idHJmcy9pb2N0bC5jXG5pbmRleCA3MmJjOWQ0Zjc3MDg3Li4wNzA1N2E3MDg0NTI5IDEwMDY0NFxuLS0tIGEvZnMvYnRyZnMvaW9jdGwuY1xuKysrIGIvZnMvYnRyZnMvaW9jdGwuY1xuQEAgLTQ2MjEsNyArNDYyMSw4IEBAIHN0YXRpYyB2b2lkIGJ0cmZzX3VyaW5nX3JlYWRfZmluaXNoZWQoc3RydWN0IGlvX3R3X3JlcSB0d19yZXEsIGlvX3R3X3Rva2VuX3QgdHcpXG4gXHRidHJmc191bmxvY2tfZXh0ZW50KGlvX3RyZWUsIHByaXYtXHUwMDNlc3RhcnQsIHByaXYtXHUwMDNlbG9ja2VuZCwgXHUwMDI2cHJpdi1cdTAwM2VjYWNoZWRfc3RhdGUpO1xuIFx0YnRyZnNfaW5vZGVfdW5sb2NrKGlub2RlLCBCVFJGU19JTE9DS19TSEFSRUQpO1xuIFxuLVx0aW9fdXJpbmdfY21kX2RvbmUoY21kLCByZXQsIElPX1VSSU5HX0NNRF9UQVNLX1dPUktfSVNTVUVfRkxBR1MpO1xuK1x0aW9fdXJpbmdfY21kX3NldF9yZXMoY21kLCByZXQpO1xuK1x0aW9fdXJpbmdfY21kX2RvbmUoY21kLCBJT19VUklOR19DTURfVEFTS19XT1JLX0lTU1VFX0ZMQUdTKTtcbiBcdGFkZF9yY2hhcihjdXJyZW50LCByZXQpO1xuIFxuIFx0Zm9yIChpbmRleCA9IDA7IGluZGV4IFx1MDAzYyBwcml2LVx1MDAzZW5yX3BhZ2VzOyBpbmRleCsrKVxuZGlmZiAtLWdpdCBhL2ZzL2Z1c2UvZGV2X3VyaW5nLmMgYi9mcy9mdXNlL2Rldl91cmluZy5jXG5pbmRleCA3N2M4Y2VjNDNkOWM2Li5jNWJiNTAxODNlMWM2IDEwMDY0NFxuLS0tIGEvZnMvZnVzZS9kZXZfdXJpbmcuY1xuKysrIGIvZnMvZnVzZS9kZXZfdXJpbmcuY1xuQEAgLTM2Niw4ICszNjYsMTAgQEAgc3RhdGljIHZvaWQgZnVzZV91cmluZ19lbnRyeV90ZWFyZG93bihzdHJ1Y3QgZnVzZV9yaW5nX2VudCAqZW50KVxuIFx0ZW50LVx1MDAzZXN0YXRlID0gRlJSU19SRUxFQVNFRDtcbiBcdHNwaW5fdW5sb2NrKFx1MDAyNnF1ZXVlLVx1MDAzZWxvY2spO1xuIFxuLVx0aWYgKGNtZClcbi1cdFx0aW9fdXJpbmdfY21kX2RvbmUoY21kLCAtRU5PVENPTk4sIElPX1VSSU5HX0ZfVU5MT0NLRUQpO1xuK1x0aWYgKGNtZCkge1xuK1x0XHRpb191cmluZ19jbWRfc2V0X3JlcyhjbWQsIC1FTk9UQ09OTik7XG4rXHRcdGlvX3VyaW5nX2NtZF9kb25lKGNtZCwgSU9fVVJJTkdfRl9VTkxPQ0tFRCk7XG4rXHR9XG4gXG4gXHRpZiAocmVxKVxuIFx0XHRmdXNlX3VyaW5nX3N0b3BfZnVzZV9yZXFfZW5kKHJlcSk7XG5AQCAtNTMxLDcgKzUzMyw4IEBAIHN0YXRpYyB2b2lkIGZ1c2VfdXJpbmdfY2FuY2VsKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCxcbiBcbiBcdGlmIChuZWVkX2NtZF9kb25lKSB7XG4gXHRcdC8qIG5vIHF1ZXVlIGxvY2sgdG8gYXZvaWQgbG9jayBvcmRlciBpc3N1ZXMgKi9cbi1cdFx0aW9fdXJpbmdfY21kX2RvbmUoY21kLCAtRU5PVENPTk4sIGlzc3VlX2ZsYWdzKTtcbitcdFx0aW9fdXJpbmdfY21kX3NldF9yZXMoY21kLCAtRU5PVENPTk4pO1xuK1x0XHRpb191cmluZ19jbWRfZG9uZShjbWQsIGlzc3VlX2ZsYWdzKTtcbiBcdFx0a2ZyZWUoZW50KTtcbiBcdFx0aWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoXHUwMDI2cXVldWUtXHUwMDNlcmluZy1cdTAwM2VxdWV1ZV9yZWZzKSlcbiBcdFx0XHR3YWtlX3VwX2FsbChcdTAwMjZxdWV1ZS1cdTAwM2VyaW5nLVx1MDAzZXN0b3Bfd2FpdHEpO1xuQEAgLTk0Miw3ICs5NDUsOCBAQCBzdGF0aWMgdm9pZCBmdXNlX3VyaW5nX3NlbmQoc3RydWN0IGZ1c2VfcmluZ19lbnQgKmVudCwgc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLFxuIFx0ZnVzZV91cmluZ19hZGRfdG9fcHEoZW50KTtcbiBcdHNwaW5fdW5sb2NrKFx1MDAyNnF1ZXVlLVx1MDAzZWxvY2spO1xuIFxuLVx0aW9fdXJpbmdfY21kX2RvbmUoY21kLCByZXQsIGlzc3VlX2ZsYWdzKTtcbitcdGlvX3VyaW5nX2NtZF9zZXRfcmVzKGNtZCwgcmV0KTtcbitcdGlvX3VyaW5nX2NtZF9kb25lKGNtZCwgaXNzdWVfZmxhZ3MpO1xuIH1cbiBcbiAvKiBGVVNFX1VSSU5HX0NNRF9DT01NSVRfQU5EX0ZFVENIIGhhbmRsZXIgKi9cbkBAIC0xMzA5LDcgKzEzMTMsOCBAQCBzdGF0aWMgdm9pZCBmdXNlX3VyaW5nX3NlbmRfaW5fdGFzayhzdHJ1Y3QgaW9fdHdfcmVxIHR3X3JlcSwgaW9fdHdfdG9rZW5fdCB0dylcbiBcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZlbnQtXHUwMDNlbGlzdCk7XG4gXHRcdHNwaW5fdW5sb2NrKFx1MDAyNnF1ZXVlLVx1MDAzZWxvY2spO1xuIFxuLVx0XHRpb191cmluZ19jbWRfZG9uZShjbWQsIGVyciwgaXNzdWVfZmxhZ3MpO1xuK1x0XHRpb191cmluZ19jbWRfc2V0X3JlcyhjbWQsIGVycik7XG4rXHRcdGlvX3VyaW5nX2NtZF9kb25lKGNtZCwgaXNzdWVfZmxhZ3MpO1xuIFxuIFx0XHRmdXNlX3VyaW5nX3JlcV9lbmQoZW50LCBlbnQtXHUwMDNlZnVzZV9yZXEsIGVycik7XG4gXHRcdGtmcmVlKGVudCk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pb191cmluZy9jbWQuaCBiL2luY2x1ZGUvbGludXgvaW9fdXJpbmcvY21kLmhcbmluZGV4IDMzMWRjYmVmZTcyZjEuLjk2ZmNjMDYwOTdjNGUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2lvX3VyaW5nL2NtZC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2lvX3VyaW5nL2NtZC5oXG5AQCAtNTIsNiArNTIsMTAgQEAgaW50IGlvX3VyaW5nX2NtZF9pbXBvcnRfZml4ZWRfdmVjKHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCxcbiBcdFx0XHRcdCAgaW50IGRkaXIsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbiBcdFx0XHRcdCAgdW5zaWduZWQgaXNzdWVfZmxhZ3MpO1xuIFxuKy8qIE9uZSBvZiB0aGVzZSBtdXN0IGJlIGNhbGxlZCBwcmlvciB0byBpb191cmluZ19jbWRfZG9uZSgpICovXG4rdm9pZCBpb191cmluZ19jbWRfc2V0X3JlcyhzdHJ1Y3QgaW9fdXJpbmdfY21kICosIHMzMiByZXQpO1xuK3ZvaWQgaW9fdXJpbmdfY21kX3NldF9yZXMzMihzdHJ1Y3QgaW9fdXJpbmdfY21kICosIHMzMiByZXQsIHU2NCByZXMyKTtcbitcbiAvKlxuICAqIENvbXBsZXRlcyB0aGUgcmVxdWVzdCwgaS5lLiBwb3N0cyBhbiBpb191cmluZyBDUUUgYW5kIGRlYWxsb2NhdGVzIEBpb3VjbWRcbiAgKiBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgaW9fdXJpbmcgcmVxdWVzdC5cbkBAIC01OSw4ICs2Myw3IEBAIGludCBpb191cmluZ19jbWRfaW1wb3J0X2ZpeGVkX3ZlYyhzdHJ1Y3QgaW9fdXJpbmdfY21kICppb3VjbWQsXG4gICogTm90ZTogdGhlIGNhbGxlciBzaG91bGQgbmV2ZXIgaGFyZCBjb2RlIEBpc3N1ZV9mbGFncyBhbmQgaXMgb25seSBhbGxvd2VkXG4gICogdG8gcGFzcyB0aGUgbWFzayBwcm92aWRlZCBieSB0aGUgY29yZSBpb191cmluZyBjb2RlLlxuICAqL1xuLXZvaWQgX19pb191cmluZ19jbWRfZG9uZShzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsIHMzMiByZXQsIHU2NCByZXMyLFxuLVx0XHRcdCB1bnNpZ25lZCBpc3N1ZV9mbGFncywgYm9vbCBpc19jcWUzMik7XG4rdm9pZCBpb191cmluZ19jbWRfZG9uZShzdHJ1Y3QgaW9fdXJpbmdfY21kICosIHVuc2lnbmVkIGlzc3VlX2ZsYWdzKTtcbiBcbiB2b2lkIF9faW9fdXJpbmdfY21kX2RvX2luX3Rhc2soc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y21kLFxuIFx0XHRcdCAgICBpb19yZXFfdHdfZnVuY190IHRhc2tfd29ya19jYixcbkBAIC0xMDcsOCArMTEwLDE1IEBAIHN0YXRpYyBpbmxpbmUgaW50IGlvX3VyaW5nX2NtZF9pbXBvcnRfZml4ZWRfdmVjKHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCxcbiB7XG4gXHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gfVxuLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2lvX3VyaW5nX2NtZF9kb25lKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCwgczMyIHJldCxcbi1cdFx0dTY0IHJldDIsIHVuc2lnbmVkIGlzc3VlX2ZsYWdzLCBib29sIGlzX2NxZTMyKVxuK3N0YXRpYyBpbmxpbmUgdm9pZCBpb191cmluZ19jbWRfc2V0X3JlcyhzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsIHMzMiByZXQpXG4re1xuK31cbitzdGF0aWMgaW5saW5lIHZvaWQgaW9fdXJpbmdfY21kX3NldF9yZXMzMihzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsIHMzMiByZXQsXG4rXHRcdFx0XHRcdCAgdTY0IHJlczIpXG4re1xuK31cbitzdGF0aWMgaW5saW5lIHZvaWQgaW9fdXJpbmdfY21kX2RvbmUoc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLFxuK1x0XHRcdFx0ICAgICB1bnNpZ25lZCBpc3N1ZV9mbGFncylcbiB7XG4gfVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2lvX3VyaW5nX2NtZF9kb19pbl90YXNrKHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCxcbkBAIC0xNzAsMTggKzE4MCw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCAqaW9fdXJpbmdfY21kX2N0eF9oYW5kbGUoc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kKVxuIFx0cmV0dXJuIGNtZF90b19pb19raW9jYihjbWQpLVx1MDAzZWN0eDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIGlvX3VyaW5nX2NtZF9kb25lKHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCwgczMyIHJldCxcbi1cdFx0XHRcdCAgICAgdW5zaWduZWQgaXNzdWVfZmxhZ3MpXG4te1xuLVx0cmV0dXJuIF9faW9fdXJpbmdfY21kX2RvbmUoaW91Y21kLCByZXQsIDAsIGlzc3VlX2ZsYWdzLCBmYWxzZSk7XG4tfVxuLVxuLXN0YXRpYyBpbmxpbmUgdm9pZCBpb191cmluZ19jbWRfZG9uZTMyKHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCwgczMyIHJldCxcbi1cdFx0XHRcdCAgICAgICB1NjQgcmVzMiwgdW5zaWduZWQgaXNzdWVfZmxhZ3MpXG4te1xuLVx0cmV0dXJuIF9faW9fdXJpbmdfY21kX2RvbmUoaW91Y21kLCByZXQsIHJlczIsIGlzc3VlX2ZsYWdzLCB0cnVlKTtcbi19XG4tXG4gaW50IGlvX2J1ZmZlcl9yZWdpc3Rlcl9idmVjKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCwgc3RydWN0IHJlcXVlc3QgKnJxLFxuIFx0XHRcdCAgICB2b2lkICgqcmVsZWFzZSkodm9pZCAqKSwgdW5zaWduZWQgaW50IGluZGV4LFxuIFx0XHRcdCAgICB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpO1xuZGlmZiAtLWdpdCBhL2lvX3VyaW5nL3VyaW5nX2NtZC5jIGIvaW9fdXJpbmcvdXJpbmdfY21kLmNcbmluZGV4IDcyNmE2NTlmMzhjMzguLmVmM2U3ZTM1MmM2YWYgMTAwNjQ0XG4tLS0gYS9pb191cmluZy91cmluZ19jbWQuY1xuKysrIGIvaW9fdXJpbmcvdXJpbmdfY21kLmNcbkBAIC0xMzgsMTkgKzEzOCwzMSBAQCB2b2lkIF9faW9fdXJpbmdfY21kX2RvX2luX3Rhc2soc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y21kLFxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChfX2lvX3VyaW5nX2NtZF9kb19pbl90YXNrKTtcbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgaW9fcmVxX3NldF9jcWUzMl9leHRyYShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcbi1cdFx0XHRcdFx0ICB1NjQgZXh0cmExLCB1NjQgZXh0cmEyKVxuK3ZvaWQgaW9fdXJpbmdfY21kX3NldF9yZXMoc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLCBzMzIgcmV0KVxuIHtcbi1cdHJlcS1cdTAwM2ViaWdfY3FlLmV4dHJhMSA9IGV4dHJhMTtcbi1cdHJlcS1cdTAwM2ViaWdfY3FlLmV4dHJhMiA9IGV4dHJhMjtcbitcdHN0cnVjdCBpb19raW9jYiAqcmVxID0gY21kX3RvX2lvX2tpb2NiKGNtZCk7XG4rXG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXFfc2V0X2ZhaWwocmVxKTtcbitcdGlvX3JlcV9zZXRfcmVzKHJlcSwgcmV0LCAwKTtcbiB9XG4rRVhQT1JUX1NZTUJPTF9HUEwoaW9fdXJpbmdfY21kX3NldF9yZXMpO1xuK1xuK3ZvaWQgaW9fdXJpbmdfY21kX3NldF9yZXMzMihzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsIHMzMiByZXQsIHU2NCByZXMyKVxuK3tcbitcdHN0cnVjdCBpb19raW9jYiAqcmVxID0gY21kX3RvX2lvX2tpb2NiKGNtZCk7XG4rXG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXFfc2V0X2ZhaWwocmVxKTtcbitcdGlvX3JlcV9zZXRfcmVzMzIocmVxLCByZXQsIDAsIHJlczIsIDApO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChpb191cmluZ19jbWRfc2V0X3JlczMyKTtcbiBcbiAvKlxuICAqIENhbGxlZCBieSBjb25zdW1lcnMgb2YgaW9fdXJpbmdfY21kLCBpZiB0aGV5IG9yaWdpbmFsbHkgcmV0dXJuZWRcbiAgKiAtRUlPQ0JRVUVVRUQgdXBvbiByZWNlaXZpbmcgdGhlIGNvbW1hbmQuXG4gICovXG4tdm9pZCBfX2lvX3VyaW5nX2NtZF9kb25lKHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCwgczMyIHJldCwgdTY0IHJlczIsXG4tXHRcdCAgICAgICB1bnNpZ25lZCBpc3N1ZV9mbGFncywgYm9vbCBpc19jcWUzMilcbit2b2lkIGlvX3VyaW5nX2NtZF9kb25lKHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCwgdW5zaWduZWQgaXNzdWVfZmxhZ3MpXG4ge1xuIFx0c3RydWN0IGlvX2tpb2NiICpyZXEgPSBjbWRfdG9faW9fa2lvY2IoaW91Y21kKTtcbiBcbkBAIC0xNTksMTUgKzE3MSw2IEBAIHZvaWQgX19pb191cmluZ19jbWRfZG9uZShzdHJ1Y3QgaW9fdXJpbmdfY21kICppb3VjbWQsIHMzMiByZXQsIHU2NCByZXMyLFxuIFxuIFx0aW9fdXJpbmdfY21kX2RlbF9jYW5jZWxhYmxlKGlvdWNtZCwgaXNzdWVfZmxhZ3MpO1xuIFxuLVx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0cmVxX3NldF9mYWlsKHJlcSk7XG4tXG4tXHRpb19yZXFfc2V0X3JlcyhyZXEsIHJldCwgMCk7XG4tXHRpZiAoaXNfY3FlMzIpIHtcbi1cdFx0aWYgKHJlcS1cdTAwM2VjdHgtXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19TRVRVUF9DUUVfTUlYRUQpXG4tXHRcdFx0cmVxLVx1MDAzZWNxZS5mbGFncyB8PSBJT1JJTkdfQ1FFX0ZfMzI7XG4tXHRcdGlvX3JlcV9zZXRfY3FlMzJfZXh0cmEocmVxLCByZXMyLCAwKTtcbi1cdH1cbiBcdGlvX3JlcV91cmluZ19jbGVhbnVwKHJlcSwgaXNzdWVfZmxhZ3MpO1xuIFx0aWYgKHJlcS1cdTAwM2VmbGFncyBcdTAwMjYgUkVRX0ZfSU9QT0xMKSB7XG4gXHRcdC8qIG9yZGVyIHdpdGggaW9fZG9faW9wb2xsKCkgY2hlY2tpbmcgLVx1MDAzZWlvcG9sbF9jb21wbGV0ZWQgKi9cbkBAIC0xODEsNyArMTg0LDcgQEAgdm9pZCBfX2lvX3VyaW5nX2NtZF9kb25lKHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCwgczMyIHJldCwgdTY0IHJlczIsXG4gXHRcdGlvX3JlcV90YXNrX3dvcmtfYWRkKHJlcSk7XG4gXHR9XG4gfVxuLUVYUE9SVF9TWU1CT0xfR1BMKF9faW9fdXJpbmdfY21kX2RvbmUpO1xuK0VYUE9SVF9TWU1CT0xfR1BMKGlvX3VyaW5nX2NtZF9kb25lKTtcbiBcbiBpbnQgaW9fdXJpbmdfY21kX3ByZXAoc3RydWN0IGlvX2tpb2NiICpyZXEsIGNvbnN0IHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSlcbiB7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxOToyMjozNS42OTg1MzM3NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMzIyNjcxOTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgaW9fdXJpbmcgUGF0Y2gqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIGEgc2lnbmlmaWNhbnQgY2hhbmdlLCByaWdodD8gV2UncmUgdGFsa2luZyBhYm91dCBhIGNvcmUga2VybmVsIEFQSSBtb2RpZmljYXRpb24gY29uY2VybmluZyBpb191cmluZyBjb21tYW5kIHJlc3VsdCBoYW5kbGluZy4gU2VlaW5nIG1vZGlmaWNhdGlvbnMgdG8gYGlvX3VyaW5nX2NtZF9kb25lYCBhbmQgdGhlIGludHJvZHVjdGlvbiBvZiBgaW9fdXJpbmdfY21kX3NldF9yZXNgIGFuZCBgaW9fdXJpbmdfY21kX3NldF9yZXMzMmAgaW1tZWRpYXRlbHkgZmxhZ3MgdGhpcyBhcyBzb21ldGhpbmcgdGhhdCB3YXJyYW50cyBjYXJlZnVsIHNjcnV0aW55LiBCZWNhdXNlIGl0IGNoYW5nZXMgdGhlIHJldHVybiBzdGF0dXMsIGl0IGlzIHZlcnkgbGlrZWx5IHdlIG1heSBpbnRyb2R1Y2UgbmV3IGJ1Z3MuXG5cblRoZSBmYWN0IHRoYXQgdGhpcyB0b3VjaGVzIGEgYnJlYWR0aCBvZiBzdWJzeXN0ZW1zIC0gYGJsb2NrL2lvY3RsLmNgLCBgZHJpdmVycy9ibG9jay91YmxrX2Rydi5jYCwgYGRyaXZlcnMvbnZtZS9ob3N0L2lvY3RsLmNgLCBgZHJpdmVycy9zY3NpL3Njc2lfYnNnLmNgLCBgZnMvYnRyZnMvaW9jdGwuY2AsIGBmcy9mdXNlL2Rldl91cmluZy5jYCwgYWxvbmcgd2l0aCB0aGUgaGVhZGVyIGFuZCBjb3JlIGlvX3VyaW5nIGZpbGVzIChgaW5jbHVkZS9saW51eC9pb191cmluZy9jbWQuaGAgYW5kIGBpb191cmluZy91cmluZ19jbWQuY2ApIOKAkyByZWluZm9yY2VzIHRoYXQgaW1wcmVzc2lvbi4gVGhpcyBtZWFucyBmdW5jdGlvbmFsIGltcGFjdCBpcyBwcmV0dHkgbXVjaCBndWFyYW50ZWVkLCBhbmQgd2Ugc2hvdWxkIHByaW9yaXRpemUgZnV6emluZyB0byBzbW9rZSBvdXQgYW55IGlzc3Vlcy5cblxuTm93LCBsZXQncyBpZGVudGlmeSB0aGUgZm9jYWwgcG9pbnRzLiBNeSBpbnN0aW5jdCBpcyB0byBmb2N1cyBvbiB0aGUgZnVuY3Rpb25zIGRpcmVjdGx5IGludm9sdmVkIGluIHRoaXMgbmV3IHJlc3VsdCBoYW5kbGluZzogYGlvX3VyaW5nX2NtZF9zZXRfcmVzYCwgYGlvX3VyaW5nX2NtZF9zZXRfcmVzMzJgLCBhbmQgYGlvX3VyaW5nX2NtZF9kb25lYC4gQmV5b25kIHRob3NlLCBJJ2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gd2hlcmUgdGhlc2UgY2hhbmdlcyBhcmUgKnVzZWQqOiBgdWJsa19jaF91cmluZ19jbWRfY2JgLCBgbnZtZV91cmluZ19jbWRfZW5kX2lvYCwgYHNjc2lfYnNnX3VyaW5nX3Rhc2tfY2JgLCBgYnRyZnNfdXJpbmdfcmVhZF9maW5pc2hlZGAsIGFuZCBgZnVzZV91cmluZ19zZW5kYC5cblxuTmV4dCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBleHBvc3VyZSBvZiB0aGVzZSBzeW1ib2xzLiBBcmUgYGlvX3VyaW5nX2NtZF9zZXRfcmVzYCBhbmQgYGlvX3VyaW5nX2NtZF9zZXRfcmVzMzJgIGV4cG9ydGVkPyBBaCwgeWVzLCBgRVhQT1JUX1NZTUJPTF9HUExgLiBOb3csIGxldCdzIGlkZW50aWZ5IHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gYENPTkZJR19JT19VUklOR2AgaXMgYSBnaXZlbi4gV2UnbGwgbmVlZCBgQ09ORklHX0JMS19ERVZfVUJMS2AsIGBDT05GSUdfTlZNRV9DT1JFYCwgYENPTkZJR19CTEtfREVWX0JTR2AsIGBDT05GSUdfQlRSRlNfRlNgLCBhbmQgYENPTkZJR19GVVNFX0ZTYCB0byBlbnN1cmUgdGhlIHJlbGV2YW50IGNvZGUgcGF0aHMgYXJlIHRlc3RlZC4gSSB3aWxsIHVzZSBgZ3JlcHBlcmAgdG8gZG91YmxlLWNoZWNrIHRob3NlIGNvbmZpZyBuYW1lcy5cblxuVGhpcyBwYXRjaCBpcyBnb2luZyB0byByZXF1aXJlIGEgdGhvcm91Z2ggcmV2aWV3LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MzE5LCJPdXRwdXRUb2tlbnMiOjU3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzAxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTk6MjI6NDYuMDIxMjA4NzYzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MDQyODExNjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiKGNvbmZpZyBCTEtfREVWX1VCTEt8Y29uZmlnIE5WTUVfQ09SRXxjb25maWcgQkxLX0RFVl9CU0d8Y29uZmlnIEJUUkZTX0ZTfGNvbmZpZyBGVVNFX0ZTfGNvbmZpZyBJT19VUklORylcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svS2NvbmZpZz00NT1jb25maWcgQkxLX0NHUk9VUF9QVU5UX0JJT1xcbi0tXFxuYmxvY2svS2NvbmZpZy00Ny1cXG5ibG9jay9LY29uZmlnOjQ4OmNvbmZpZyBCTEtfREVWX0JTR19DT01NT05cXG5ibG9jay9LY29uZmlnLTQ5LVxcdHRyaXN0YXRlXFxuLS1cXG5ibG9jay9LY29uZmlnPTUxPWNvbmZpZyBCTEtfSUNRXFxuLS1cXG5ibG9jay9LY29uZmlnLTUzLVxcbmJsb2NrL0tjb25maWc6NTQ6Y29uZmlnIEJMS19ERVZfQlNHTElCXFxuYmxvY2svS2NvbmZpZy01NS1cXHRib29sIFxcXCJCbG9jayBsYXllciBTRyBzdXBwb3J0IHY0IGhlbHBlciBsaWJcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc9MzE1PWNvbmZpZyBCTEtfREVWX1JCRFxcbi0tXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTMyNy1cXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MzI4OmNvbmZpZyBCTEtfREVWX1VCTEtcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMzI5LVxcdHRyaXN0YXRlIFxcXCJVc2Vyc3BhY2UgYmxvY2sgZHJpdmVyIChFeHBlcmltZW50YWwpXFxcIlxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWc6Mjpjb25maWcgTlZNRV9DT1JFXFxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZy0zLVxcdHRyaXN0YXRlXFxuLS1cXG5kcml2ZXJzL3Njc2kvS2NvbmZpZz0xMzE9Y29uZmlnIENIUl9ERVZfU0dcXG4tLVxcbmRyaXZlcnMvc2NzaS9LY29uZmlnLTE1NS1cXG5kcml2ZXJzL3Njc2kvS2NvbmZpZzoxNTY6Y29uZmlnIEJMS19ERVZfQlNHXFxuZHJpdmVycy9zY3NpL0tjb25maWctMTU3LVxcdGJvb2wgXFxcIi9kZXYvYnNnIHN1cHBvcnQgKFNHIHY0KVxcXCJcXG4tLVxcbmZzL2J0cmZzL0tjb25maWctMi1cXG5mcy9idHJmcy9LY29uZmlnOjM6Y29uZmlnIEJUUkZTX0ZTXFxuZnMvYnRyZnMvS2NvbmZpZy00LVxcdHRyaXN0YXRlIFxcXCJCdHJmcyBmaWxlc3lzdGVtIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9idHJmcy9LY29uZmlnLTM4LVxcbmZzL2J0cmZzL0tjb25maWc6Mzk6Y29uZmlnIEJUUkZTX0ZTX1BPU0lYX0FDTFxcbmZzL2J0cmZzL0tjb25maWctNDAtXFx0Ym9vbCBcXFwiQnRyZnMgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHNcXFwiXFxuLS1cXG5mcy9idHJmcy9LY29uZmlnLTQ4LVxcbmZzL2J0cmZzL0tjb25maWc6NDk6Y29uZmlnIEJUUkZTX0ZTX1JVTl9TQU5JVFlfVEVTVFNcXG5mcy9idHJmcy9LY29uZmlnLTUwLVxcdGJvb2wgXFxcIkJ0cmZzIHdpbGwgcnVuIHNhbml0eSB0ZXN0cyB1cG9uIGxvYWRpbmdcXFwiXFxuLS1cXG5mcy9mdXNlL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9mdXNlL0tjb25maWc6Mjpjb25maWcgRlVTRV9GU1xcbmZzL2Z1c2UvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJGVVNFIChGaWxlc3lzdGVtIGluIFVzZXJzcGFjZSkgc3VwcG9ydFxcXCJcXG4tLVxcbmluaXQvS2NvbmZpZz0xOTE2PWNvbmZpZyBBSU9cXG4tLVxcbmluaXQvS2NvbmZpZy0xOTIzLVxcbmluaXQvS2NvbmZpZzoxOTI0OmNvbmZpZyBJT19VUklOR1xcbmluaXQvS2NvbmZpZy0xOTI1LVxcdGJvb2wgXFxcIkVuYWJsZSBJTyB1cmluZyBzdXBwb3J0XFxcIiBpZiBFWFBFUlRcXG4tLVxcbmluaXQvS2NvbmZpZz0xOTMzPWNvbmZpZyBHQ09WX1BST0ZJTEVfVVJJTkdcXG4tLVxcbmluaXQvS2NvbmZpZy0xOTQ1LVxcbmluaXQvS2NvbmZpZzoxOTQ2OmNvbmZpZyBJT19VUklOR19NT0NLX0ZJTEVcXG5pbml0L0tjb25maWctMTk0Ny1cXHR0cmlzdGF0ZSBcXFwiRW5hYmxlIGlvX3VyaW5nIG1vY2sgZmlsZXMgKEV4cGVyaW1lbnRhbClcXFwiIGlmIEVYUEVSVFxcbi0tXFxuaW9fdXJpbmcvS2NvbmZpZy01LVxcbmlvX3VyaW5nL0tjb25maWc6Njpjb25maWcgSU9fVVJJTkdfWkNSWFxcbmlvX3VyaW5nL0tjb25maWctNy1cXHRkZWZfYm9vbCB5XFxuLS1cXG5pb191cmluZy9LY29uZmlnLTEyLVxcbmlvX3VyaW5nL0tjb25maWc6MTM6Y29uZmlnIElPX1VSSU5HX0JQRlxcbmlvX3VyaW5nL0tjb25maWctMTQtXFx0ZGVmX2Jvb2wgeVxcbi0tXFxuaW9fdXJpbmcvS2NvbmZpZy0xNy1cXG5pb191cmluZy9LY29uZmlnOjE4OmNvbmZpZyBJT19VUklOR19CUEZfT1BTXFxuaW9fdXJpbmcvS2NvbmZpZy0xOS1cXHRkZWZfYm9vbCB5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDE5OjIyOjQ4LjYyNTQ5NjE4NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MTEyOTE4MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBjb25maWd1cmF0aW9uczogYElPX1VSSU5HYCwgYEJMS19ERVZfVUJMS2AsIGBOVk1FX0NPUkVgLCBgQkxLX0RFVl9CU0dgLCBgQlRSRlNfRlNgLCBhbmQgYEZVU0VfRlNgLiBJIGtub3cgdGhlc2UsIGdlbmVyYWxseSwgYnV0IEknbSBmb2N1c2luZyBvbiB0aGUgYE5WTUVfQ09SRWAgZm9yIHRoaXMgcGFydGljdWxhciB0ZXN0IHNjZW5hcmlvLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnkgY3JpdGljYWwgZGVwZW5kZW5jaWVzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCBhcmUgdGhlIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgdGhhdCBhcmUgYWxzbyByZXF1aXJlZD8gT2ZmIHRoZSB0b3Agb2YgbXkgaGVhZCwgSeKAmW0gdGhpbmtpbmcgSeKAmWxsIG5lZWQgdG8gdmVyaWZ5IGBCTEtfREVWX05WTUVgIGlzIGVuYWJsZWQuIEl0IGNvdWxkIGFsc28gcG90ZW50aWFsbHkgYmUgYE5WTUVfVEFSR0VUYCwgb3Igc29tZXRoaW5nIGVsc2Ugc3BlY2lmaWNhbGx5IE5WTWUgcmVsYXRlZC4gR290dGEgY2hlY2sgdGhlIGRlcGVuZGVuY2llcyB0aG9yb3VnaGx5IHRvIGVuc3VyZSB0aGlzIHdob2xlIHRoaW5nIHdvcmtzIHByb3Blcmx5IGFuZCBJJ20gbm90IG1pc3Npbmcgc29tZXRoaW5nIGZ1bmRhbWVudGFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTQzLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTk6MjI6NTIuMzM2NzkwNDM5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NzMzMzk3MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJMS19ERVZfTlZNRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL252bWUvaG9zdC9LY29uZmlnPTI9Y29uZmlnIE5WTUVfQ09SRVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZy00LVxcbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWc6NTpjb25maWcgQkxLX0RFVl9OVk1FXFxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZy02LVxcdHRyaXN0YXRlIFxcXCJOVk0gRXhwcmVzcyBibG9jayBkZXZpY2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDE5OjIyOjU0LjgxMDE1NTQ3NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NDU5MjcyOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFkZGluZyBOVk1lIEJsb2NrIERldmljZSBTdXBwb3J0IHRvIE15IFByb2plY3QqKlxuXG5BbHJpZ2h0LCB0aGUgbmV4dCB0YXNrIG9uIG15IGxpc3QgaXMgcHJldHR5IGNsZWFyOiBJJ20gZ29pbmcgdG8gYWRkIGBCTEtfREVWX05WTUVgIHRvIHRoZSBzeXN0ZW0uIFRoYXQncyB0aGUgY29yZSBvZiB0aGUgaW1wbGVtZW50YXRpb24uIE5vdywgYmVmb3JlIEkganVtcCBoZWFkZmlyc3QgaW50byB0aGUgbmV3IGNvZGUsIEkgd2FudCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIGhvdyB0aGUgcmVsZXZhbnQgc3RydWN0dXJlcyBhcmUgaGFuZGxlZCBpbiB0aGUgZXhpc3RpbmcgY29kZWJhc2UuIE15IG1haW4gY29uY2VybiBpcyB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgYGlvX3VyaW5nYCBjb21tYW5kcy5cblxuU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgaG93IHJlc3VsdHMgYXJlIHNldCBhbmQgaGFuZGxlZCB3aXRoaW4gdGhlIGBpb191cmluZ2AgY29udGV4dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gbWFuYWdlcyB0aGUgcmV0dXJuIHZhbHVlcyBmb3IgdGhlc2UgYmxvY2sgZGV2aWNlcyB3aXRoaW4gdGhlIGBpb191cmluZ2AgZnJhbWV3b3JrLiBJJ2xsIG5lZWQgdG8gc2NydXRpbml6ZSBgaW9fdXJpbmdfY21kX3NldF9yZXNgIGFuZCBgaW9fdXJpbmdfY21kX3NldF9yZXMzMmAgaW4gYGlvX3VyaW5nL3VyaW5nX2NtZC5jYC4gSSBoYXZlIGEgZmVlbGluZyB0aG9zZSBhcmUgZ29pbmcgdG8gYmUga2V5IHBpZWNlcyBvZiB0aGUgcHV6emxlIGZvciBwcm9wZXJseSBoYW5kbGluZyBOVk1lIGNvbXBsZXRpb24gcXVldWVzIGFuZCBJL08gc3RhdHVzLiBJdCB3aWxsIGFsc28gZ2l2ZSBtZSBhIHNvbGlkIHBvaW50IHRvIGhvb2sgaW50byBpbiB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIGJsb2NrIGRldmljZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTkzNCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDE5OjIyOjU4LjY1NjA4Njk3NloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDMyMTk3NDE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZvaWQgaW9fdXJpbmdfY21kX3NldF9yZXNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9pb191cmluZy9jbWQuaD00OT1pbnQgaW9fdXJpbmdfY21kX2ltcG9ydF9maXhlZF92ZWMoc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y21kLFxcbi0tXFxuaW5jbHVkZS9saW51eC9pb191cmluZy9jbWQuaC01NS0vKiBPbmUgb2YgdGhlc2UgbXVzdCBiZSBjYWxsZWQgcHJpb3IgdG8gaW9fdXJpbmdfY21kX2RvbmUoKSAqL1xcbmluY2x1ZGUvbGludXgvaW9fdXJpbmcvY21kLmg6NTY6dm9pZCBpb191cmluZ19jbWRfc2V0X3JlcyhzdHJ1Y3QgaW9fdXJpbmdfY21kICosIHMzMiByZXQpO1xcbmluY2x1ZGUvbGludXgvaW9fdXJpbmcvY21kLmg6NTc6dm9pZCBpb191cmluZ19jbWRfc2V0X3JlczMyKHN0cnVjdCBpb191cmluZ19jbWQgKiwgczMyIHJldCwgdTY0IHJlczIpO1xcbmluY2x1ZGUvbGludXgvaW9fdXJpbmcvY21kLmgtNTgtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2lvX3VyaW5nL2NtZC5oPTEwNT1zdGF0aWMgaW5saW5lIGludCBpb191cmluZ19jbWRfaW1wb3J0X2ZpeGVkX3ZlYyhzdHJ1Y3QgaW9fdXJpbmdfY21kICppb3VjbWQsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2lvX3VyaW5nL2NtZC5oLTExMi19XFxuaW5jbHVkZS9saW51eC9pb191cmluZy9jbWQuaDoxMTM6c3RhdGljIGlubGluZSB2b2lkIGlvX3VyaW5nX2NtZF9zZXRfcmVzKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCwgczMyIHJldClcXG5pbmNsdWRlL2xpbnV4L2lvX3VyaW5nL2NtZC5oLTExNC17XFxuaW5jbHVkZS9saW51eC9pb191cmluZy9jbWQuaC0xMTUtfVxcbmluY2x1ZGUvbGludXgvaW9fdXJpbmcvY21kLmg6MTE2OnN0YXRpYyBpbmxpbmUgdm9pZCBpb191cmluZ19jbWRfc2V0X3JlczMyKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCwgczMyIHJldCxcXG5pbmNsdWRlL2xpbnV4L2lvX3VyaW5nL2NtZC5oLTExNy1cXHRcXHRcXHRcXHRcXHQgIHU2NCByZXMyKVxcbi0tXFxuaW9fdXJpbmcvdXJpbmdfY21kLmM9MTM5PUVYUE9SVF9TWU1CT0xfR1BMKF9faW9fdXJpbmdfY21kX2RvX2luX3Rhc2spO1xcbmlvX3VyaW5nL3VyaW5nX2NtZC5jLTE0MC1cXG5pb191cmluZy91cmluZ19jbWQuYzoxNDE6dm9pZCBpb191cmluZ19jbWRfc2V0X3JlcyhzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsIHMzMiByZXQpXFxuaW9fdXJpbmcvdXJpbmdfY21kLmMtMTQyLXtcXG4tLVxcbmlvX3VyaW5nL3VyaW5nX2NtZC5jPTE0OT1FWFBPUlRfU1lNQk9MX0dQTChpb191cmluZ19jbWRfc2V0X3Jlcyk7XFxuaW9fdXJpbmcvdXJpbmdfY21kLmMtMTUwLVxcbmlvX3VyaW5nL3VyaW5nX2NtZC5jOjE1MTp2b2lkIGlvX3VyaW5nX2NtZF9zZXRfcmVzMzIoc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLCBzMzIgcmV0LCB1NjQgcmVzMilcXG5pb191cmluZy91cmluZ19jbWQuYy0xNTIte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxOToyMzowMS4wODgyOTUzNzRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NDk3ODIzMTYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlZmluaW5nIHRoZSBGb2N1czogQ29yZSBBUEkgQ2hhbmdlcyBhbmQgS2V5IENhbGxlcnMqKlxuXG5Pa2F5LCBsZXQncyBkaXN0aWxsIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgaG93IHRoZXNlIGlvX3VyaW5nIGNoYW5nZXMgYXJlIGltcGxlbWVudGVkIGFuZCBJIG5lZWQgdG8gZGVmaW5lIHRoZSBzY29wZSBvZiBhbmFseXNpcy4gSSBzZWUgYSBidW5jaCBvZiBzeW1ib2xzLCBhbmQgSSBuZWVkIHRvIGlkZW50aWZ5IHdoYXQncyBjcml0aWNhbC4gUmlnaHQsIHNvIGBpb191cmluZ19jbWRfc2V0X3Jlc2AsIGBpb191cmluZ19jbWRfc2V0X3JlczMyYCwgYW5kIGBpb191cmluZ19jbWRfZG9uZWAgaW1tZWRpYXRlbHkgc3RhbmQgb3V0LiBUaG9zZSBhcmUgdGhlIGhlYXJ0IG9mIHRoZSBBUEkgbW9kaWZpY2F0aW9ucyB0aGVtc2VsdmVzLiBUaGV5IGFyZSB0aGUgY29yZSBjaGFuZ2VzLlxuXG5UaGVuIHRoZXJlIGFyZSBjYWxsZXJzIHRvIHRob3NlIGNvcmUgY2hhbmdlczsgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSAqdXNpbmcqIHRoZSBuZXcgaW9fdXJpbmcgZnVuY3Rpb25hbGl0eS4gV2Ugc2hvdWxkIGluY2x1ZGUgc29tZSBvZiB0aGVzZSBmb3IgdGhlIHN1bW1hcnk6IGBibGtfY21kX2NvbXBsZXRlYCwgYHVibGtfY2hfdXJpbmdfY21kX2NiYCwgYG52bWVfdXJpbmdfY21kX2VuZF9pb2AsIGBzY3NpX2JzZ191cmluZ190YXNrX2NiYCwgYGJ0cmZzX3VyaW5nX3JlYWRfZmluaXNoZWRgLCBhbmQgYGZ1c2VfdXJpbmdfc2VuZGAgYXJlIHByb2JhYmx5IHRoZSBtb3N0IHNhbGllbnQgZXhhbXBsZXMuXG5cbkknbGwgY2hlY2sgdGhlIGNvbmZpZyBvcHRpb25zIGFzc29jaWF0ZWQgd2l0aCBlYWNoIHBhcnQgb2YgdGhpcyBzbyBJIGtub3cgd2hlcmUgdGhlIHN1cHBvcnQgbGllcy4gSXQgbG9va3MgbGlrZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgYXJlIGBJT19VUklOR2AsIGBCTEtfREVWX1VCTEtgLCBgTlZNRV9DT1JFYCwgYEJMS19ERVZfTlZNRWAsIGBCTEtfREVWX0JTR2AsIGBCVFJGU19GU2AsIGFuZCBgRlVTRV9GU2AuXG5cbkp1c3QgYSBxdWljayBjaGVjay4uLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGBmdXNlX3VyaW5nX3NlbmRgIGlzIHN0YXRpYyBvciBub3QuIFRoaXMgYWZmZWN0cyB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODg2LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDA5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDE5OjIzOjA3LjU4NjEyMTMxNVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI0NjU5Njc0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmdXNlX3VyaW5nX3NlbmRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZnVzZS9kZXZfdXJpbmcuYz05MjE9c3RhdGljIGludCBmdXNlX3JpbmdfZW50X3NldF9jb21taXQoc3RydWN0IGZ1c2VfcmluZ19lbnQgKmVudClcXG4tLVxcbmZzL2Z1c2UvZGV2X3VyaW5nLmMtOTM1LVxcbmZzL2Z1c2UvZGV2X3VyaW5nLmM6OTM2OnN0YXRpYyB2b2lkIGZ1c2VfdXJpbmdfc2VuZChzdHJ1Y3QgZnVzZV9yaW5nX2VudCAqZW50LCBzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsXFxuZnMvZnVzZS9kZXZfdXJpbmcuYy05MzctXFx0XFx0XFx0ICAgIHNzaXplX3QgcmV0LCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuLS1cXG5mcy9mdXNlL2Rldl91cmluZy5jPTk1Mz1zdGF0aWMgaW50IGZ1c2VfdXJpbmdfY29tbWl0X2ZldGNoKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCwgaW50IGlzc3VlX2ZsYWdzLFxcbi0tXFxuZnMvZnVzZS9kZXZfdXJpbmcuYy0xMDI3LVxcdGlmIChmdXNlX3VyaW5nX2dldF9uZXh0X2Z1c2VfcmVxKGVudCwgcXVldWUpKVxcbmZzL2Z1c2UvZGV2X3VyaW5nLmM6MTAyODpcXHRcXHRmdXNlX3VyaW5nX3NlbmQoZW50LCBjbWQsIDAsIGlzc3VlX2ZsYWdzKTtcXG5mcy9mdXNlL2Rldl91cmluZy5jLTEwMjktXFx0cmV0dXJuIDA7XFxuLS1cXG5mcy9mdXNlL2Rldl91cmluZy5jPTEyMjE9aW50IGZ1c2VfdXJpbmdfY21kKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbi0tXFxuZnMvZnVzZS9kZXZfdXJpbmcuYy0xMjkyLSAqL1xcbmZzL2Z1c2UvZGV2X3VyaW5nLmM6MTI5MzpzdGF0aWMgdm9pZCBmdXNlX3VyaW5nX3NlbmRfaW5fdGFzayhzdHJ1Y3QgaW9fdHdfcmVxIHR3X3JlcSwgaW9fdHdfdG9rZW5fdCB0dylcXG5mcy9mdXNlL2Rldl91cmluZy5jLTEyOTQte1xcbi0tXFxuZnMvZnVzZS9kZXZfdXJpbmcuYy0xMzA3LVxcdFxcdH1cXG5mcy9mdXNlL2Rldl91cmluZy5jOjEzMDg6XFx0XFx0ZnVzZV91cmluZ19zZW5kKGVudCwgY21kLCBlcnIsIGlzc3VlX2ZsYWdzKTtcXG5mcy9mdXNlL2Rldl91cmluZy5jLTEzMDktXFx0fSBlbHNlIHtcXG4tLVxcbmZzL2Z1c2UvZGV2X3VyaW5nLmM9MTM0ND1zdGF0aWMgdm9pZCBmdXNlX3VyaW5nX2Rpc3BhdGNoX2VudChzdHJ1Y3QgZnVzZV9yaW5nX2VudCAqZW50KVxcbi0tXFxuZnMvZnVzZS9kZXZfdXJpbmcuYy0xMzQ4LVxcdHVyaW5nX2NtZF9zZXRfcmluZ19lbnQoY21kLCBlbnQpO1xcbmZzL2Z1c2UvZGV2X3VyaW5nLmM6MTM0OTpcXHRpb191cmluZ19jbWRfY29tcGxldGVfaW5fdGFzayhjbWQsIGZ1c2VfdXJpbmdfc2VuZF9pbl90YXNrKTtcXG5mcy9mdXNlL2Rldl91cmluZy5jLTEzNTAtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxOToyMzowOS44MzI3MjQ0MDlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTcwMzExODMzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWZpbmluZyB0aGUgTGlzdCBvZiBDb3JlIGlvX3VyaW5nIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBob3cgdG8gaGFuZGxlIHRoZSBgaW9fdXJpbmdgIGZ1bmN0aW9ucy4gYGZ1c2VfdXJpbmdfc2VuZGAgaXMgc3RhdGljLCBzbyBpdCBzZWVtcyByZWR1bmRhbnQgdG8gaW5jbHVkZSBpdC4gSXQncyBiZXN0IHRvIHN0aWNrIHRvIG5vbi1zdGF0aWMgb3IgZXNzZW50aWFsIGZ1bmN0aW9ucy4gRm9jdXNpbmcgb24gdGhhdCwgSSd2ZSBpZGVudGlmaWVkIGBpb191cmluZ19jbWRfc2V0X3Jlc2AsIGBpb191cmluZ19jbWRfc2V0X3JlczMyYCwgYW5kIGBpb191cmluZ19jbWRfZG9uZWAgYXMgdGhlIGNyaXRpY2FsIG9uZXMuIExldCdzIGp1c3QgbGlzdCB0aG9zZSBmb3Igbm93LCBhbmQgcG90ZW50aWFsbHkgYWRkIGEgZmV3IG5vbi1zdGF0aWMgb25lcyBpZiB0aGV5IHN0YW5kIG91dC5cblxuSSBhbHNvIGNoZWNrZWQgb3RoZXIgZnVuY3Rpb25zLiBJIG5vdGljZWQgdGhhdCBgYmxrX2NtZF9jb21wbGV0ZWAsIGB1YmxrX2NoX3VyaW5nX2NtZF9jYmAsIGBudm1lX3VyaW5nX2NtZF9lbmRfaW9gLCBgc2NzaV9ic2dfdXJpbmdfdGFza19jYmAsIGFuZCBgYnRyZnNfdXJpbmdfcmVhZF9maW5pc2hlZGAgYXJlIGFsbCBzdGF0aWMuIEdpdmVuIHRoZXkncmUgc3RhdGljLCB0aGV5IG1pZ2h0IGJlIGlubGluZWQgb3IgbGFjayBjbGVhciBzeW1ib2wgYWRkcmVzc2VzLCBzbyBJIHNob3VsZCBvbWl0IHRoZW0uXG5cblRoZXJlZm9yZSwgZm9yIHRoZSBsaXN0LCBJJ2xsIHN0aWNrIHdpdGggdGhlIGV4cG9ydGVkIGZ1bmN0aW9uczogYGlvX3VyaW5nX2NtZF9zZXRfcmVzYCwgYGlvX3VyaW5nX2NtZF9zZXRfcmVzMzJgLCBhbmQgYGlvX3VyaW5nX2NtZF9kb25lYC5cblxuTm93LCBsZXQncyBqdXN0IGNvbmZpcm0gdGhhdCBgaW9fdXJpbmdfY21kX2RvbmVgIGlzIGFjdHVhbGx5IGV4cG9ydGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjIzNywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxOToyMzoxNS41MzU4NDUwMDZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3ODYzNDMwMjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTF9HUExcXFxcKGlvX3VyaW5nX2NtZF9kb25lXFxcXClcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvdXJpbmdfY21kLmM9MTY1PXZvaWQgaW9fdXJpbmdfY21kX2RvbmUoc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y21kLCB1bnNpZ25lZCBpc3N1ZV9mbGFncylcXG4tLVxcbmlvX3VyaW5nL3VyaW5nX2NtZC5jLTE4Ni19XFxuaW9fdXJpbmcvdXJpbmdfY21kLmM6MTg3OkVYUE9SVF9TWU1CT0xfR1BMKGlvX3VyaW5nX2NtZF9kb25lKTtcXG5pb191cmluZy91cmluZ19jbWQuYy0xODgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDE5OjIzOjE4LjMyMjE5MTkzMloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODc3ODEzNDE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIGlvX3VyaW5nIEFQSSBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGluIGZyb250IG9mIG1lLCBhbmQgaXQgbG9va3MgbGlrZSBhIHByZXR0eSBzaWduaWZpY2FudCBzaGlmdCBpbiBob3cgaW9fdXJpbmcgaGFuZGxlcyBjb21tYW5kIHJlc3VsdHMuIEVzc2VudGlhbGx5LCB0aGV5J3JlIGJyZWFraW5nIGRvd24gYGlvX3VyaW5nX2NtZF9kb25lYCBpbnRvIHR3byBwYXJ0czogYGlvX3VyaW5nX2NtZF9zZXRfcmVzYCAob3IgYGlvX3VyaW5nX2NtZF9zZXRfcmVzMzJgKSBhbmQgYGlvX3VyaW5nX2NtZF9kb25lYC4gVGhpcyBpcyBhIGNvcmUgQVBJIG1vZGlmaWNhdGlvbi5cblxuVGhlIHN5bWJvbHMgdGhhdCByZWFsbHkgc3RhbmQgb3V0IGFyZTogYGlvX3VyaW5nX2NtZF9zZXRfcmVzYCwgYGlvX3VyaW5nX2NtZF9zZXRfcmVzMzJgLCBhbmQgYGlvX3VyaW5nX2NtZF9kb25lYC4gVGhlc2UgYXJlIHRoZSBrZXkgcGllY2VzIG9mIHRoZSBwdXp6bGUuIEkgYWxzbyBzZWUgdGhlc2UgY29uZmlncyBwb3RlbnRpYWxseSBiZWluZyBhZmZlY3RlZDogYElPX1VSSU5HYCwgYEJMS19ERVZfVUJMS2AsIGBOVk1FX0NPUkVgLCBgQkxLX0RFVl9OVk1FYCwgYEJMS19ERVZfQlNHYCwgYEJUUkZTX0ZTYCwgYW5kIGBGVVNFX0ZTYC4gVGhpcyBjaGFuZ2UgY2xlYXJseSByaXBwbGVzIGFjcm9zcyBxdWl0ZSBhIGZldyBzdWJzeXN0ZW1zLCBpbmNsdWRpbmcgYmxvY2sgZGV2aWNlcywgdWJsaywgTlZNZSwgU0NTSSwgQnRyZnMsIGFuZCBGVVNFLlxuXG5TaW5jZSBpdCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBpdCdzIHByZXR0eSBjbGVhciB0aGF0IHRoaXMgbmVlZHMgc29tZSBzZXJpb3VzIGZ1enppbmcgYW5kIHRlc3RpbmcgdG8gbWFrZSBzdXJlIHdlJ3JlIG5vdCBpbnRyb2R1Y2luZyByZWdyZXNzaW9ucyBvciBidWdzIGluIHRoZSB3YXkgcmVzdWx0cyBhcmUgaGFuZGxlZC4gTGV0J3MgY2FsbCB0aGlzIHRoZSBgc2V0LXJlc3VsdHNgIGNoYW5nZSwgYW5kIGdldCB0byB3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjk3MCwiT3V0cHV0VG9rZW5zIjoyNDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTk6MjM6MjUuMjAwMDA4MzlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzI2MzUxMTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklPX1VSSU5HXCIsXG4gICAgXCJCTEtfREVWX1VCTEtcIixcbiAgICBcIk5WTUVfQ09SRVwiLFxuICAgIFwiQkxLX0RFVl9OVk1FXCIsXG4gICAgXCJCTEtfREVWX0JTR1wiLFxuICAgIFwiQlRSRlNfRlNcIixcbiAgICBcIkZVU0VfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpb191cmluZ19jbWRfc2V0X3Jlc1wiLFxuICAgIFwiaW9fdXJpbmdfY21kX3NldF9yZXMzMlwiLFxuICAgIFwiaW9fdXJpbmdfY21kX2RvbmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBpb191cmluZyBjb21tYW5kIEFQSSBieSBzcGxpdHRpbmcgYGlvX3VyaW5nX2NtZF9kb25lYCBpbnRvIGBpb191cmluZ19jbWRfc2V0X3Jlc2AgKG9yIGBpb191cmluZ19jbWRfc2V0X3JlczMyYCkgYW5kIGBpb191cmluZ19jbWRfZG9uZWAuIFRoaXMgYWZmZWN0cyBob3cgcmVzdWx0cyBhcmUgcmV0dXJuZWQgZm9yIGlvX3VyaW5nIGNvbW1hbmRzIGFjcm9zcyBtdWx0aXBsZSBzdWJzeXN0ZW1zIGluY2x1ZGluZyBibG9jaywgdWJsaywgbnZtZSwgc2NzaSBic2csIGJ0cmZzLCBhbmQgZnVzZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGtlcm5lbCBBUEkgYW5kIGl0cyBjYWxsZXJzLCB3aGljaCBpcyB3b3J0aCBmdXp6aW5nIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBpbmNvcnJlY3QgcmVzdWx0IGhhbmRsaW5nIGFyZSBpbnRyb2R1Y2VkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklPX1VSSU5HXCIsXG4gICAgXCJCTEtfREVWX1VCTEtcIixcbiAgICBcIk5WTUVfQ09SRVwiLFxuICAgIFwiQkxLX0RFVl9OVk1FXCIsXG4gICAgXCJCTEtfREVWX0JTR1wiLFxuICAgIFwiQlRSRlNfRlNcIixcbiAgICBcIkZVU0VfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpb191cmluZ19jbWRfc2V0X3Jlc1wiLFxuICAgIFwiaW9fdXJpbmdfY21kX3NldF9yZXMzMlwiLFxuICAgIFwiaW9fdXJpbmdfY21kX2RvbmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBpb191cmluZyBjb21tYW5kIEFQSSBieSBzcGxpdHRpbmcgYGlvX3VyaW5nX2NtZF9kb25lYCBpbnRvIGBpb191cmluZ19jbWRfc2V0X3Jlc2AgKG9yIGBpb191cmluZ19jbWRfc2V0X3JlczMyYCkgYW5kIGBpb191cmluZ19jbWRfZG9uZWAuIFRoaXMgYWZmZWN0cyBob3cgcmVzdWx0cyBhcmUgcmV0dXJuZWQgZm9yIGlvX3VyaW5nIGNvbW1hbmRzIGFjcm9zcyBtdWx0aXBsZSBzdWJzeXN0ZW1zIGluY2x1ZGluZyBibG9jaywgdWJsaywgbnZtZSwgc2NzaSBic2csIGJ0cmZzLCBhbmQgZnVzZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGtlcm5lbCBBUEkgYW5kIGl0cyBjYWxsZXJzLCB3aGljaCBpcyB3b3J0aCBmdXp6aW5nIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBpbmNvcnJlY3QgcmVzdWx0IGhhbmRsaW5nIGFyZSBpbnRyb2R1Y2VkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxOToyMzoyNS4zMzI2NzM1MDVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MjU5NTUxNTE2NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDE5OjIzOjI1LjMzMzE3ODgxNVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxODI1OTUwMDU5ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgYGlvX3VyaW5nX2NtZF9kb25lYCBBUEkgYnkgc3BsaXR0aW5nIGl0IGludG8gYGlvX3VyaW5nX2NtZF9zZXRfcmVzYC9gaW9fdXJpbmdfY21kX3NldF9yZXMzMmAgYW5kIGBpb191cmluZ19jbWRfZG9uZWAuIFRoZSB2YWx1ZXMgcGFzc2VkIHRvIHRoZXNlIGZ1bmN0aW9ucyByZW1haW4gdGhlIHNhbWUgYXMgYmVmb3JlLCBhbmQgYWxsIGZpZWxkcyBpbiB0aGUgY29tcGxldGlvbiBxdWV1ZSBlbnRyeSAoQ1FFKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCAoZS5nLiwgYGV4dHJhMmAgaXMgc2V0IHRvIDAgaW4gYGlvX3JlcV9zZXRfcmVzMzJgKS4gVGhlcmUgYXJlIG5vIG5ldyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm8gY2hhbmdlcyB0byBib3VuZHMgY2hlY2tpbmcsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2guIEFueSBwb3RlbnRpYWwgYnVncyB3b3VsZCBiZSBsb2dpYyBlcnJvcnMgb3IgdXNlLWFmdGVyLWZyZWUvb3V0LW9mLWJvdW5kcyBpc3N1ZXMsIHdoaWNoIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgS0FTQU4gYW5kIG90aGVyIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMzVmNmMxY2Q1YmM5Zjc5ZDc3Yzg1ZjZiMWY2OGFjM2Y2ZjFhYTJjM1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDI3IDE5OjIyOjMzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYmxvY2svaW9jdGwuYyBiL2Jsb2NrL2lvY3RsLmNcbmluZGV4IDY0YjRlNmMwZjY5NjUuLjk0NmNhYjc0ZjI1M2UgMTAwNjQ0XG4tLS0gYS9ibG9jay9pb2N0bC5jXG4rKysgYi9ibG9jay9pb2N0bC5jXG5AQCAtODcxLDkgKzg3MSwxMCBAQCBzdGF0aWMgdm9pZCBibGtfY21kX2NvbXBsZXRlKHN0cnVjdCBpb190d19yZXEgdHdfcmVxLCBpb190d190b2tlbl90IHR3KVxuIFxuIFx0aWYgKGJpYy1cdTAwM2VyZXMgPT0gLUVBR0FJTiBcdTAwMjZcdTAwMjYgYmljLVx1MDAzZW5vd2FpdClcbiBcdFx0aW9fdXJpbmdfY21kX2lzc3VlX2Jsb2NraW5nKGNtZCk7XG4tXHRlbHNlXG4tXHRcdGlvX3VyaW5nX2NtZF9kb25lKGNtZCwgYmljLVx1MDAzZXJlcyxcbi1cdFx0XHRcdCAgSU9fVVJJTkdfQ01EX1RBU0tfV09SS19JU1NVRV9GTEFHUyk7XG4rXHRlbHNlIHtcbitcdFx0aW9fdXJpbmdfY21kX3NldF9yZXMoY21kLCBiaWMtXHUwMDNlcmVzKTtcbitcdFx0aW9fdXJpbmdfY21kX2RvbmUoY21kLCBJT19VUklOR19DTURfVEFTS19XT1JLX0lTU1VFX0ZMQUdTKTtcbitcdH1cbiB9XG4gXG4gc3RhdGljIHZvaWQgYmlvX2NtZF9iaW9fZW5kX2lvKHN0cnVjdCBiaW8gKmJpbylcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMgYi9kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmNcbmluZGV4IDRkMTdlZDI2NGRhMWEuLjUxZjE1ZTViM2MwMWQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmNcbisrKyBiL2RyaXZlcnMvYmxvY2svdWJsa19kcnYuY1xuQEAgLTgzOSw3ICs4MzksOCBAQCBzdGF0aWMgdm9pZCB1YmxrX2JhdGNoX2RlaW5pdF9mZXRjaF9idWYoc3RydWN0IHVibGtfcXVldWUgKnVicSxcbiBcdF9fdWJsa19yZWxlYXNlX2ZjbWQodWJxKTtcbiBcdHNwaW5fdW5sb2NrKFx1MDAyNnVicS1cdTAwM2VldnRzX2xvY2spO1xuIFxuLVx0aW9fdXJpbmdfY21kX2RvbmUoZmNtZC1cdTAwM2VjbWQsIHJlcywgZGF0YS1cdTAwM2Vpc3N1ZV9mbGFncyk7XG4rXHRpb191cmluZ19jbWRfc2V0X3JlcyhmY21kLVx1MDAzZWNtZCwgcmVzKTtcbitcdGlvX3VyaW5nX2NtZF9kb25lKGZjbWQtXHUwMDNlY21kLCBkYXRhLVx1MDAzZWlzc3VlX2ZsYWdzKTtcbiBcdHVibGtfYmF0Y2hfZnJlZV9mY21kKGZjbWQpO1xuIH1cbiBcbkBAIC0xNjQyLDcgKzE2NDMsOCBAQCBzdGF0aWMgdm9pZCB1YmxrX2NvbXBsZXRlX2lvX2NtZChzdHJ1Y3QgdWJsa19pbyAqaW8sIHN0cnVjdCByZXF1ZXN0ICpyZXEsXG4gXHRzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQgPSBfX3VibGtfcHJlcF9jb21wbF9pb19jbWQoaW8sIHJlcSk7XG4gXG4gXHQvKiB0ZWxsIHVibGtzcnYgb25lIGlvIHJlcXVlc3QgaXMgY29taW5nICovXG4tXHRpb191cmluZ19jbWRfZG9uZShjbWQsIHJlcywgaXNzdWVfZmxhZ3MpO1xuK1x0aW9fdXJpbmdfY21kX3NldF9yZXMoY21kLCByZXMpO1xuK1x0aW9fdXJpbmdfY21kX2RvbmUoY21kLCBpc3N1ZV9mbGFncyk7XG4gfVxuIFxuICNkZWZpbmUgVUJMS19SRVFVRVVFX0RFTEFZX01TXHQzXG5AQCAtMTcyOCw3ICsxNzMwLDggQEAgc3RhdGljIHZvaWQgdWJsa19hdXRvX2J1Zl9kaXNwYXRjaChjb25zdCBzdHJ1Y3QgdWJsa19xdWV1ZSAqdWJxLFxuIFxuIFx0aWYgKHJlcyAhPSBBVVRPX0JVRl9SRUdfRkFJTCkge1xuIFx0XHR1YmxrX2F1dG9fYnVmX2lvX3NldHVwKHVicSwgcmVxLCBpbywgY21kLCByZXMpO1xuLVx0XHRpb191cmluZ19jbWRfZG9uZShjbWQsIFVCTEtfSU9fUkVTX09LLCBpc3N1ZV9mbGFncyk7XG4rXHRcdGlvX3VyaW5nX2NtZF9zZXRfcmVzKGNtZCwgVUJMS19JT19SRVNfT0spO1xuK1x0XHRpb191cmluZ19jbWRfZG9uZShjbWQsIGlzc3VlX2ZsYWdzKTtcbiBcdH1cbiB9XG4gXG5AQCAtMjc4OSw4ICsyNzkyLDEwIEBAIHN0YXRpYyB2b2lkIHVibGtfY2FuY2VsX2NtZChzdHJ1Y3QgdWJsa19xdWV1ZSAqdWJxLCB1MTYgdGFnLFxuIFx0fVxuIFx0c3Bpbl91bmxvY2soXHUwMDI2dWJxLVx1MDAzZWNhbmNlbF9sb2NrKTtcbiBcbi1cdGlmICghZG9uZSBcdTAwMjZcdTAwMjYgY21kKVxuLVx0XHRpb191cmluZ19jbWRfZG9uZShjbWQsIFVCTEtfSU9fUkVTX0FCT1JULCBpc3N1ZV9mbGFncyk7XG4rXHRpZiAoIWRvbmUgXHUwMDI2XHUwMDI2IGNtZCkge1xuK1x0XHRpb191cmluZ19jbWRfc2V0X3JlcyhjbWQsIFVCTEtfSU9fUkVTX0FCT1JUKTtcbitcdFx0aW9fdXJpbmdfY21kX2RvbmUoY21kLCBpc3N1ZV9mbGFncyk7XG4rXHR9XG4gfVxuIFxuIC8qXG5AQCAtMjgxNiw3ICsyODIxLDggQEAgc3RhdGljIHZvaWQgdWJsa19iYXRjaF9jYW5jZWxfY21kKHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEsXG4gXHRzcGluX3VubG9jayhcdTAwMjZ1YnEtXHUwMDNlZXZ0c19sb2NrKTtcbiBcbiBcdGlmIChkb25lKSB7XG4tXHRcdGlvX3VyaW5nX2NtZF9kb25lKGZjbWQtXHUwMDNlY21kLCBVQkxLX0lPX1JFU19BQk9SVCwgaXNzdWVfZmxhZ3MpO1xuK1x0XHRpb191cmluZ19jbWRfc2V0X3JlcyhmY21kLVx1MDAzZWNtZCwgVUJMS19JT19SRVNfQUJPUlQpO1xuK1x0XHRpb191cmluZ19jbWRfZG9uZShmY21kLVx1MDAzZWNtZCwgaXNzdWVfZmxhZ3MpO1xuIFx0XHR1YmxrX2JhdGNoX2ZyZWVfZmNtZChmY21kKTtcbiBcdH1cbiB9XG5AQCAtMzUyNiw4ICszNTMyLDEwIEBAIHN0YXRpYyB2b2lkIHVibGtfY2hfdXJpbmdfY21kX2NiKHN0cnVjdCBpb190d19yZXEgdHdfcmVxLCBpb190d190b2tlbl90IHR3KVxuIFxuIFx0aWYgKCF0dy5jYW5jZWwpXG4gXHRcdHJldCA9IHVibGtfY2hfdXJpbmdfY21kX2xvY2FsKGNtZCwgaXNzdWVfZmxhZ3MpO1xuLVx0aWYgKHJldCAhPSAtRUlPQ0JRVUVVRUQpXG4tXHRcdGlvX3VyaW5nX2NtZF9kb25lKGNtZCwgcmV0LCBpc3N1ZV9mbGFncyk7XG4rXHRpZiAocmV0ICE9IC1FSU9DQlFVRVVFRCkge1xuK1x0XHRpb191cmluZ19jbWRfc2V0X3JlcyhjbWQsIHJldCk7XG4rXHRcdGlvX3VyaW5nX2NtZF9kb25lKGNtZCwgaXNzdWVfZmxhZ3MpO1xuK1x0fVxuIH1cbiBcbiBzdGF0aWMgaW50IHVibGtfY2hfdXJpbmdfY21kKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS9ob3N0L2lvY3RsLmMgYi9kcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jXG5pbmRleCA2NTM5ZDQ3NTAwOTg2Li5iNTBiYmEyMDc4MThiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9udm1lL2hvc3QvaW9jdGwuY1xuKysrIGIvZHJpdmVycy9udm1lL2hvc3QvaW9jdGwuY1xuQEAgLTQyMyw4ICs0MjMsNiBAQCBzdHJ1Y3QgbnZtZV91cmluZ19kYXRhIHtcbiBzdHJ1Y3QgbnZtZV91cmluZ19jbWRfcGR1IHtcbiBcdHN0cnVjdCByZXF1ZXN0ICpyZXE7XG4gXHRzdHJ1Y3QgYmlvICpiaW87XG4tXHR1NjQgcmVzdWx0O1xuLVx0aW50IHN0YXR1cztcbiB9O1xuIFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IG52bWVfdXJpbmdfY21kX3BkdSAqbnZtZV91cmluZ19jbWRfcGR1KFxuQEAgLTQ0MCw4ICs0MzgsNyBAQCBzdGF0aWMgdm9pZCBudm1lX3VyaW5nX3Rhc2tfY2Ioc3RydWN0IGlvX3R3X3JlcSB0d19yZXEsIGlvX3R3X3Rva2VuX3QgdHcpXG4gXG4gXHRpZiAocGR1LVx1MDAzZWJpbylcbiBcdFx0YmxrX3JxX3VubWFwX3VzZXIocGR1LVx1MDAzZWJpbyk7XG4tXHRpb191cmluZ19jbWRfZG9uZTMyKGlvdWNtZCwgcGR1LVx1MDAzZXN0YXR1cywgcGR1LVx1MDAzZXJlc3VsdCxcbi1cdFx0XHQgICAgSU9fVVJJTkdfQ01EX1RBU0tfV09SS19JU1NVRV9GTEFHUyk7XG4rXHRpb191cmluZ19jbWRfZG9uZShpb3VjbWQsIElPX1VSSU5HX0NNRF9UQVNLX1dPUktfSVNTVUVfRkxBR1MpO1xuIH1cbiBcbiBzdGF0aWMgZW51bSBycV9lbmRfaW9fcmV0IG52bWVfdXJpbmdfY21kX2VuZF9pbyhzdHJ1Y3QgcmVxdWVzdCAqcmVxLFxuQEAgLTQ1MCwxNSArNDQ3LDE3IEBAIHN0YXRpYyBlbnVtIHJxX2VuZF9pb19yZXQgbnZtZV91cmluZ19jbWRfZW5kX2lvKHN0cnVjdCByZXF1ZXN0ICpyZXEsXG4ge1xuIFx0c3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y21kID0gcmVxLVx1MDAzZWVuZF9pb19kYXRhO1xuIFx0c3RydWN0IG52bWVfdXJpbmdfY21kX3BkdSAqcGR1ID0gbnZtZV91cmluZ19jbWRfcGR1KGlvdWNtZCk7XG4rXHR1NjQgcmVzdWx0ID0gbGU2NF90b19jcHUobnZtZV9yZXEocmVxKS1cdTAwM2VyZXN1bHQudTY0KTtcbitcdGludCBzdGF0dXM7XG4gXG4gXHRpZiAobnZtZV9yZXEocmVxKS1cdTAwM2VmbGFncyBcdTAwMjYgTlZNRV9SRVFfQ0FOQ0VMTEVEKSB7XG4tXHRcdHBkdS1cdTAwM2VzdGF0dXMgPSAtRUlOVFI7XG4rXHRcdHN0YXR1cyA9IC1FSU5UUjtcbiBcdH0gZWxzZSB7XG4tXHRcdHBkdS1cdTAwM2VzdGF0dXMgPSBudm1lX3JlcShyZXEpLVx1MDAzZXN0YXR1cztcbi1cdFx0aWYgKCFwZHUtXHUwMDNlc3RhdHVzKVxuLVx0XHRcdHBkdS1cdTAwM2VzdGF0dXMgPSBibGtfc3RhdHVzX3RvX2Vycm5vKGVycik7XG4rXHRcdHN0YXR1cyA9IG52bWVfcmVxKHJlcSktXHUwMDNlc3RhdHVzO1xuK1x0XHRpZiAoIXN0YXR1cylcbitcdFx0XHRzdGF0dXMgPSBibGtfc3RhdHVzX3RvX2Vycm5vKGVycik7XG4gXHR9XG4tXHRwZHUtXHUwMDNlcmVzdWx0ID0gbGU2NF90b19jcHUobnZtZV9yZXEocmVxKS1cdTAwM2VyZXN1bHQudTY0KTtcbitcdGlvX3VyaW5nX2NtZF9zZXRfcmVzMzIoaW91Y21kLCBzdGF0dXMsIHJlc3VsdCk7XG4gXG4gXHQvKlxuIFx0ICogRm9yIElPUE9MTCwgY2hlY2sgaWYgdGhpcyBjb21wbGV0aW9uIGlzIGhhcHBlbmluZyBpbiB0aGUgY29udGV4dFxuQEAgLTQ3MSw3ICs0NzAsNyBAQCBzdGF0aWMgZW51bSBycV9lbmRfaW9fcmV0IG52bWVfdXJpbmdfY21kX2VuZF9pbyhzdHJ1Y3QgcmVxdWVzdCAqcmVxLFxuIFx0ICAgIGlvYi1cdTAwM2Vwb2xsX2N0eCA9PSBpb191cmluZ19jbWRfY3R4X2hhbmRsZShpb3VjbWQpKSB7XG4gXHRcdGlmIChwZHUtXHUwMDNlYmlvKVxuIFx0XHRcdGJsa19ycV91bm1hcF91c2VyKHBkdS1cdTAwM2ViaW8pO1xuLVx0XHRpb191cmluZ19jbWRfZG9uZTMyKGlvdWNtZCwgcGR1LVx1MDAzZXN0YXR1cywgcGR1LVx1MDAzZXJlc3VsdCwgMCk7XG4rXHRcdGlvX3VyaW5nX2NtZF9kb25lKGlvdWNtZCwgMCk7XG4gXHR9IGVsc2Uge1xuIFx0XHRpb191cmluZ19jbWRfZG9faW5fdGFza19sYXp5KGlvdWNtZCwgbnZtZV91cmluZ190YXNrX2NiKTtcbiBcdH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9ic2cuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX2JzZy5jXG5pbmRleCBlODBkZWM1MzE3NGVhLi44YjMyZDhlOGYyOWY5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfYnNnLmNcbisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX2JzZy5jXG5AQCAtNjAsOCArNjAsOCBAQCBzdGF0aWMgdm9pZCBzY3NpX2JzZ191cmluZ190YXNrX2NiKHN0cnVjdCBpb190d19yZXEgdHdfcmVxLCBpb190d190b2tlbl90IHR3KVxuIFx0XHRcdFx0ICBzY21kLVx1MDAzZXJlc2lkX2xlbik7XG4gXG4gXHRibGtfbXFfZnJlZV9yZXF1ZXN0KHJxKTtcbi1cdGlvX3VyaW5nX2NtZF9kb25lMzIoaW91Y21kLCByZXQsIHJlczIsXG4tXHRcdFx0ICAgIElPX1VSSU5HX0NNRF9UQVNLX1dPUktfSVNTVUVfRkxBR1MpO1xuK1x0aW9fdXJpbmdfY21kX3NldF9yZXMzMihpb3VjbWQsIHJldCwgcmVzMik7XG4rXHRpb191cmluZ19jbWRfZG9uZShpb3VjbWQsIElPX1VSSU5HX0NNRF9UQVNLX1dPUktfSVNTVUVfRkxBR1MpO1xuIH1cbiBcbiBzdGF0aWMgZW51bSBycV9lbmRfaW9fcmV0IHNjc2lfYnNnX3VyaW5nX2NtZF9kb25lKHN0cnVjdCByZXF1ZXN0ICpyZXEsXG5kaWZmIC0tZ2l0IGEvZnMvYnRyZnMvaW9jdGwuYyBiL2ZzL2J0cmZzL2lvY3RsLmNcbmluZGV4IDcyYmM5ZDRmNzcwODcuLjA3MDU3YTcwODQ1MjkgMTAwNjQ0XG4tLS0gYS9mcy9idHJmcy9pb2N0bC5jXG4rKysgYi9mcy9idHJmcy9pb2N0bC5jXG5AQCAtNDYyMSw3ICs0NjIxLDggQEAgc3RhdGljIHZvaWQgYnRyZnNfdXJpbmdfcmVhZF9maW5pc2hlZChzdHJ1Y3QgaW9fdHdfcmVxIHR3X3JlcSwgaW9fdHdfdG9rZW5fdCB0dylcbiBcdGJ0cmZzX3VubG9ja19leHRlbnQoaW9fdHJlZSwgcHJpdi1cdTAwM2VzdGFydCwgcHJpdi1cdTAwM2Vsb2NrZW5kLCBcdTAwMjZwcml2LVx1MDAzZWNhY2hlZF9zdGF0ZSk7XG4gXHRidHJmc19pbm9kZV91bmxvY2soaW5vZGUsIEJUUkZTX0lMT0NLX1NIQVJFRCk7XG4gXG4tXHRpb191cmluZ19jbWRfZG9uZShjbWQsIHJldCwgSU9fVVJJTkdfQ01EX1RBU0tfV09SS19JU1NVRV9GTEFHUyk7XG4rXHRpb191cmluZ19jbWRfc2V0X3JlcyhjbWQsIHJldCk7XG4rXHRpb191cmluZ19jbWRfZG9uZShjbWQsIElPX1VSSU5HX0NNRF9UQVNLX1dPUktfSVNTVUVfRkxBR1MpO1xuIFx0YWRkX3JjaGFyKGN1cnJlbnQsIHJldCk7XG4gXG4gXHRmb3IgKGluZGV4ID0gMDsgaW5kZXggXHUwMDNjIHByaXYtXHUwMDNlbnJfcGFnZXM7IGluZGV4KyspXG5kaWZmIC0tZ2l0IGEvZnMvZnVzZS9kZXZfdXJpbmcuYyBiL2ZzL2Z1c2UvZGV2X3VyaW5nLmNcbmluZGV4IDc3YzhjZWM0M2Q5YzYuLmM1YmI1MDE4M2UxYzYgMTAwNjQ0XG4tLS0gYS9mcy9mdXNlL2Rldl91cmluZy5jXG4rKysgYi9mcy9mdXNlL2Rldl91cmluZy5jXG5AQCAtMzY2LDggKzM2NiwxMCBAQCBzdGF0aWMgdm9pZCBmdXNlX3VyaW5nX2VudHJ5X3RlYXJkb3duKHN0cnVjdCBmdXNlX3JpbmdfZW50ICplbnQpXG4gXHRlbnQtXHUwMDNlc3RhdGUgPSBGUlJTX1JFTEVBU0VEO1xuIFx0c3Bpbl91bmxvY2soXHUwMDI2cXVldWUtXHUwMDNlbG9jayk7XG4gXG4tXHRpZiAoY21kKVxuLVx0XHRpb191cmluZ19jbWRfZG9uZShjbWQsIC1FTk9UQ09OTiwgSU9fVVJJTkdfRl9VTkxPQ0tFRCk7XG4rXHRpZiAoY21kKSB7XG4rXHRcdGlvX3VyaW5nX2NtZF9zZXRfcmVzKGNtZCwgLUVOT1RDT05OKTtcbitcdFx0aW9fdXJpbmdfY21kX2RvbmUoY21kLCBJT19VUklOR19GX1VOTE9DS0VEKTtcbitcdH1cbiBcbiBcdGlmIChyZXEpXG4gXHRcdGZ1c2VfdXJpbmdfc3RvcF9mdXNlX3JlcV9lbmQocmVxKTtcbkBAIC01MzEsNyArNTMzLDggQEAgc3RhdGljIHZvaWQgZnVzZV91cmluZ19jYW5jZWwoc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLFxuIFxuIFx0aWYgKG5lZWRfY21kX2RvbmUpIHtcbiBcdFx0Lyogbm8gcXVldWUgbG9jayB0byBhdm9pZCBsb2NrIG9yZGVyIGlzc3VlcyAqL1xuLVx0XHRpb191cmluZ19jbWRfZG9uZShjbWQsIC1FTk9UQ09OTiwgaXNzdWVfZmxhZ3MpO1xuK1x0XHRpb191cmluZ19jbWRfc2V0X3JlcyhjbWQsIC1FTk9UQ09OTik7XG4rXHRcdGlvX3VyaW5nX2NtZF9kb25lKGNtZCwgaXNzdWVfZmxhZ3MpO1xuIFx0XHRrZnJlZShlbnQpO1xuIFx0XHRpZiAoYXRvbWljX2RlY19hbmRfdGVzdChcdTAwMjZxdWV1ZS1cdTAwM2VyaW5nLVx1MDAzZXF1ZXVlX3JlZnMpKVxuIFx0XHRcdHdha2VfdXBfYWxsKFx1MDAyNnF1ZXVlLVx1MDAzZXJpbmctXHUwMDNlc3RvcF93YWl0cSk7XG5AQCAtOTQyLDcgKzk0NSw4IEBAIHN0YXRpYyB2b2lkIGZ1c2VfdXJpbmdfc2VuZChzdHJ1Y3QgZnVzZV9yaW5nX2VudCAqZW50LCBzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsXG4gXHRmdXNlX3VyaW5nX2FkZF90b19wcShlbnQpO1xuIFx0c3Bpbl91bmxvY2soXHUwMDI2cXVldWUtXHUwMDNlbG9jayk7XG4gXG4tXHRpb191cmluZ19jbWRfZG9uZShjbWQsIHJldCwgaXNzdWVfZmxhZ3MpO1xuK1x0aW9fdXJpbmdfY21kX3NldF9yZXMoY21kLCByZXQpO1xuK1x0aW9fdXJpbmdfY21kX2RvbmUoY21kLCBpc3N1ZV9mbGFncyk7XG4gfVxuIFxuIC8qIEZVU0VfVVJJTkdfQ01EX0NPTU1JVF9BTkRfRkVUQ0ggaGFuZGxlciAqL1xuQEAgLTEzMDksNyArMTMxMyw4IEBAIHN0YXRpYyB2b2lkIGZ1c2VfdXJpbmdfc2VuZF9pbl90YXNrKHN0cnVjdCBpb190d19yZXEgdHdfcmVxLCBpb190d190b2tlbl90IHR3KVxuIFx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNmVudC1cdTAwM2VsaXN0KTtcbiBcdFx0c3Bpbl91bmxvY2soXHUwMDI2cXVldWUtXHUwMDNlbG9jayk7XG4gXG4tXHRcdGlvX3VyaW5nX2NtZF9kb25lKGNtZCwgZXJyLCBpc3N1ZV9mbGFncyk7XG4rXHRcdGlvX3VyaW5nX2NtZF9zZXRfcmVzKGNtZCwgZXJyKTtcbitcdFx0aW9fdXJpbmdfY21kX2RvbmUoY21kLCBpc3N1ZV9mbGFncyk7XG4gXG4gXHRcdGZ1c2VfdXJpbmdfcmVxX2VuZChlbnQsIGVudC1cdTAwM2VmdXNlX3JlcSwgZXJyKTtcbiBcdFx0a2ZyZWUoZW50KTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lvX3VyaW5nL2NtZC5oIGIvaW5jbHVkZS9saW51eC9pb191cmluZy9jbWQuaFxuaW5kZXggMzMxZGNiZWZlNzJmMS4uOTZmY2MwNjA5N2M0ZSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvaW9fdXJpbmcvY21kLmhcbisrKyBiL2luY2x1ZGUvbGludXgvaW9fdXJpbmcvY21kLmhcbkBAIC01Miw2ICs1MiwxMCBAQCBpbnQgaW9fdXJpbmdfY21kX2ltcG9ydF9maXhlZF92ZWMoc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y21kLFxuIFx0XHRcdFx0ICBpbnQgZGRpciwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuIFx0XHRcdFx0ICB1bnNpZ25lZCBpc3N1ZV9mbGFncyk7XG4gXG4rLyogT25lIG9mIHRoZXNlIG11c3QgYmUgY2FsbGVkIHByaW9yIHRvIGlvX3VyaW5nX2NtZF9kb25lKCkgKi9cbit2b2lkIGlvX3VyaW5nX2NtZF9zZXRfcmVzKHN0cnVjdCBpb191cmluZ19jbWQgKiwgczMyIHJldCk7XG4rdm9pZCBpb191cmluZ19jbWRfc2V0X3JlczMyKHN0cnVjdCBpb191cmluZ19jbWQgKiwgczMyIHJldCwgdTY0IHJlczIpO1xuK1xuIC8qXG4gICogQ29tcGxldGVzIHRoZSByZXF1ZXN0LCBpLmUuIHBvc3RzIGFuIGlvX3VyaW5nIENRRSBhbmQgZGVhbGxvY2F0ZXMgQGlvdWNtZFxuICAqIGFuZCB0aGUgY29ycmVzcG9uZGluZyBpb191cmluZyByZXF1ZXN0LlxuQEAgLTU5LDggKzYzLDcgQEAgaW50IGlvX3VyaW5nX2NtZF9pbXBvcnRfZml4ZWRfdmVjKHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCxcbiAgKiBOb3RlOiB0aGUgY2FsbGVyIHNob3VsZCBuZXZlciBoYXJkIGNvZGUgQGlzc3VlX2ZsYWdzIGFuZCBpcyBvbmx5IGFsbG93ZWRcbiAgKiB0byBwYXNzIHRoZSBtYXNrIHByb3ZpZGVkIGJ5IHRoZSBjb3JlIGlvX3VyaW5nIGNvZGUuXG4gICovXG4tdm9pZCBfX2lvX3VyaW5nX2NtZF9kb25lKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCwgczMyIHJldCwgdTY0IHJlczIsXG4tXHRcdFx0IHVuc2lnbmVkIGlzc3VlX2ZsYWdzLCBib29sIGlzX2NxZTMyKTtcbit2b2lkIGlvX3VyaW5nX2NtZF9kb25lKHN0cnVjdCBpb191cmluZ19jbWQgKiwgdW5zaWduZWQgaXNzdWVfZmxhZ3MpO1xuIFxuIHZvaWQgX19pb191cmluZ19jbWRfZG9faW5fdGFzayhzdHJ1Y3QgaW9fdXJpbmdfY21kICppb3VjbWQsXG4gXHRcdFx0ICAgIGlvX3JlcV90d19mdW5jX3QgdGFza193b3JrX2NiLFxuQEAgLTEwNyw4ICsxMTAsMTUgQEAgc3RhdGljIGlubGluZSBpbnQgaW9fdXJpbmdfY21kX2ltcG9ydF9maXhlZF92ZWMoc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y21kLFxuIHtcbiBcdHJldHVybiAtRU9QTk9UU1VQUDtcbiB9XG4tc3RhdGljIGlubGluZSB2b2lkIF9faW9fdXJpbmdfY21kX2RvbmUoc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLCBzMzIgcmV0LFxuLVx0XHR1NjQgcmV0MiwgdW5zaWduZWQgaXNzdWVfZmxhZ3MsIGJvb2wgaXNfY3FlMzIpXG4rc3RhdGljIGlubGluZSB2b2lkIGlvX3VyaW5nX2NtZF9zZXRfcmVzKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCwgczMyIHJldClcbit7XG4rfVxuK3N0YXRpYyBpbmxpbmUgdm9pZCBpb191cmluZ19jbWRfc2V0X3JlczMyKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCwgczMyIHJldCxcbitcdFx0XHRcdFx0ICB1NjQgcmVzMilcbit7XG4rfVxuK3N0YXRpYyBpbmxpbmUgdm9pZCBpb191cmluZ19jbWRfZG9uZShzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsXG4rXHRcdFx0XHQgICAgIHVuc2lnbmVkIGlzc3VlX2ZsYWdzKVxuIHtcbiB9XG4gc3RhdGljIGlubGluZSB2b2lkIF9faW9fdXJpbmdfY21kX2RvX2luX3Rhc2soc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y21kLFxuQEAgLTE3MCwxOCArMTgwLDYgQEAgc3RhdGljIGlubGluZSB2b2lkICppb191cmluZ19jbWRfY3R4X2hhbmRsZShzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQpXG4gXHRyZXR1cm4gY21kX3RvX2lvX2tpb2NiKGNtZCktXHUwMDNlY3R4O1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgaW9fdXJpbmdfY21kX2RvbmUoc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y21kLCBzMzIgcmV0LFxuLVx0XHRcdFx0ICAgICB1bnNpZ25lZCBpc3N1ZV9mbGFncylcbi17XG4tXHRyZXR1cm4gX19pb191cmluZ19jbWRfZG9uZShpb3VjbWQsIHJldCwgMCwgaXNzdWVfZmxhZ3MsIGZhbHNlKTtcbi19XG4tXG4tc3RhdGljIGlubGluZSB2b2lkIGlvX3VyaW5nX2NtZF9kb25lMzIoc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y21kLCBzMzIgcmV0LFxuLVx0XHRcdFx0ICAgICAgIHU2NCByZXMyLCB1bnNpZ25lZCBpc3N1ZV9mbGFncylcbi17XG4tXHRyZXR1cm4gX19pb191cmluZ19jbWRfZG9uZShpb3VjbWQsIHJldCwgcmVzMiwgaXNzdWVfZmxhZ3MsIHRydWUpO1xuLX1cbi1cbiBpbnQgaW9fYnVmZmVyX3JlZ2lzdGVyX2J2ZWMoc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsXG4gXHRcdFx0ICAgIHZvaWQgKCpyZWxlYXNlKSh2b2lkICopLCB1bnNpZ25lZCBpbnQgaW5kZXgsXG4gXHRcdFx0ICAgIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyk7XG5kaWZmIC0tZ2l0IGEvaW9fdXJpbmcvdXJpbmdfY21kLmMgYi9pb191cmluZy91cmluZ19jbWQuY1xuaW5kZXggNzI2YTY1OWYzOGMzOC4uZWYzZTdlMzUyYzZhZiAxMDA2NDRcbi0tLSBhL2lvX3VyaW5nL3VyaW5nX2NtZC5jXG4rKysgYi9pb191cmluZy91cmluZ19jbWQuY1xuQEAgLTEzOCwxOSArMTM4LDMxIEBAIHZvaWQgX19pb191cmluZ19jbWRfZG9faW5fdGFzayhzdHJ1Y3QgaW9fdXJpbmdfY21kICppb3VjbWQsXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKF9faW9fdXJpbmdfY21kX2RvX2luX3Rhc2spO1xuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBpb19yZXFfc2V0X2NxZTMyX2V4dHJhKHN0cnVjdCBpb19raW9jYiAqcmVxLFxuLVx0XHRcdFx0XHQgIHU2NCBleHRyYTEsIHU2NCBleHRyYTIpXG4rdm9pZCBpb191cmluZ19jbWRfc2V0X3JlcyhzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsIHMzMiByZXQpXG4ge1xuLVx0cmVxLVx1MDAzZWJpZ19jcWUuZXh0cmExID0gZXh0cmExO1xuLVx0cmVxLVx1MDAzZWJpZ19jcWUuZXh0cmEyID0gZXh0cmEyO1xuK1x0c3RydWN0IGlvX2tpb2NiICpyZXEgPSBjbWRfdG9faW9fa2lvY2IoY21kKTtcbitcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJlcV9zZXRfZmFpbChyZXEpO1xuK1x0aW9fcmVxX3NldF9yZXMocmVxLCByZXQsIDApO1xuIH1cbitFWFBPUlRfU1lNQk9MX0dQTChpb191cmluZ19jbWRfc2V0X3Jlcyk7XG4rXG4rdm9pZCBpb191cmluZ19jbWRfc2V0X3JlczMyKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCwgczMyIHJldCwgdTY0IHJlczIpXG4re1xuK1x0c3RydWN0IGlvX2tpb2NiICpyZXEgPSBjbWRfdG9faW9fa2lvY2IoY21kKTtcbitcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJlcV9zZXRfZmFpbChyZXEpO1xuK1x0aW9fcmVxX3NldF9yZXMzMihyZXEsIHJldCwgMCwgcmVzMiwgMCk7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKGlvX3VyaW5nX2NtZF9zZXRfcmVzMzIpO1xuIFxuIC8qXG4gICogQ2FsbGVkIGJ5IGNvbnN1bWVycyBvZiBpb191cmluZ19jbWQsIGlmIHRoZXkgb3JpZ2luYWxseSByZXR1cm5lZFxuICAqIC1FSU9DQlFVRVVFRCB1cG9uIHJlY2VpdmluZyB0aGUgY29tbWFuZC5cbiAgKi9cbi12b2lkIF9faW9fdXJpbmdfY21kX2RvbmUoc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y21kLCBzMzIgcmV0LCB1NjQgcmVzMixcbi1cdFx0ICAgICAgIHVuc2lnbmVkIGlzc3VlX2ZsYWdzLCBib29sIGlzX2NxZTMyKVxuK3ZvaWQgaW9fdXJpbmdfY21kX2RvbmUoc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y21kLCB1bnNpZ25lZCBpc3N1ZV9mbGFncylcbiB7XG4gXHRzdHJ1Y3QgaW9fa2lvY2IgKnJlcSA9IGNtZF90b19pb19raW9jYihpb3VjbWQpO1xuIFxuQEAgLTE1OSwxNSArMTcxLDYgQEAgdm9pZCBfX2lvX3VyaW5nX2NtZF9kb25lKHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCwgczMyIHJldCwgdTY0IHJlczIsXG4gXG4gXHRpb191cmluZ19jbWRfZGVsX2NhbmNlbGFibGUoaW91Y21kLCBpc3N1ZV9mbGFncyk7XG4gXG4tXHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRyZXFfc2V0X2ZhaWwocmVxKTtcbi1cbi1cdGlvX3JlcV9zZXRfcmVzKHJlcSwgcmV0LCAwKTtcbi1cdGlmIChpc19jcWUzMikge1xuLVx0XHRpZiAocmVxLVx1MDAzZWN0eC1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1NFVFVQX0NRRV9NSVhFRClcbi1cdFx0XHRyZXEtXHUwMDNlY3FlLmZsYWdzIHw9IElPUklOR19DUUVfRl8zMjtcbi1cdFx0aW9fcmVxX3NldF9jcWUzMl9leHRyYShyZXEsIHJlczIsIDApO1xuLVx0fVxuIFx0aW9fcmVxX3VyaW5nX2NsZWFudXAocmVxLCBpc3N1ZV9mbGFncyk7XG4gXHRpZiAocmVxLVx1MDAzZWZsYWdzIFx1MDAyNiBSRVFfRl9JT1BPTEwpIHtcbiBcdFx0Lyogb3JkZXIgd2l0aCBpb19kb19pb3BvbGwoKSBjaGVja2luZyAtXHUwMDNlaW9wb2xsX2NvbXBsZXRlZCAqL1xuQEAgLTE4MSw3ICsxODQsNyBAQCB2b2lkIF9faW9fdXJpbmdfY21kX2RvbmUoc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y21kLCBzMzIgcmV0LCB1NjQgcmVzMixcbiBcdFx0aW9fcmVxX3Rhc2tfd29ya19hZGQocmVxKTtcbiBcdH1cbiB9XG4tRVhQT1JUX1NZTUJPTF9HUEwoX19pb191cmluZ19jbWRfZG9uZSk7XG4rRVhQT1JUX1NZTUJPTF9HUEwoaW9fdXJpbmdfY21kX2RvbmUpO1xuIFxuIGludCBpb191cmluZ19jbWRfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKVxuIHtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDE5OjIzOjI1LjMzMzE3OTgxNVoiLCJTZXEiOjE3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjg0Nzg2MzYwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGlvX3VyaW5nIENvbW1hbmQgQ29tcGxldGlvbiBBUEkgQ2hhbmdlKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBjaGFuZ2luZyBob3cgd2UgaGFuZGxlIGNvbW1hbmQgY29tcGxldGlvbiBpbiBpb191cmluZy4gUHJldmlvdXNseSwgYGlvX3VyaW5nX2NtZF9kb25lYCBhbmQgYGlvX3VyaW5nX2NtZF9kb25lMzJgIHRvb2sgdGhlIHJlc3VsdHMgZGlyZWN0bHkgYXMgYXJndW1lbnRzLiBOb3csIHdlJ3JlIHJlcXVpcmVkIHRvIHVzZSBgaW9fdXJpbmdfY21kX3NldF9yZXNgIG9yIGBpb191cmluZ19jbWRfc2V0X3JlczMyYCAqYmVmb3JlKiBjYWxsaW5nIGBpb191cmluZ19jbWRfZG9uZWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIkFyZSB3ZSBpbnRyb2R1Y2luZyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgaGVyZT9cIiBXZSBuZWVkIHRvIGJlIGNhcmVmdWwgd2l0aCBBUEkgY2hhbmdlcyBsaWtlIHRoaXMuXG5cbkkgc2VlIHRoZSBwYXRjaCB0b3VjaGVzIGEgZmFpciBudW1iZXIgb2YgZmlsZXM6IGBibG9jay9pb2N0bC5jYCwgYGRyaXZlcnMvYmxvY2svdWJsa19kcnYuY2AsIGBkcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jYCwgYGRyaXZlcnMvc2NzaS9zY3NpX2JzZy5jYCwgYGZzL2J0cmZzL2lvY3RsLmNgLCBgZnMvZnVzZS9kZXZfdXJpbmcuY2AsIGBpbmNsdWRlL2xpbnV4L2lvX3VyaW5nL2NtZC5oYCwgYW5kIGBpb191cmluZy91cmluZ19jbWQuY2AuIFRoYXQncyBhIHJlYXNvbmFibGUgc3ByZWFkLCBpbmRpY2F0aW5nIHRoaXMgaXMgYSBwb3RlbnRpYWxseSB3aWRlbHktdXNlZCBjaGFuZ2UuXG5cbkxvb2tpbmcgc3BlY2lmaWNhbGx5IGF0IGBpb191cmluZy91cmluZ19jbWQuY2AsIEkgc2VlIHRoZSBuZXcgZnVuY3Rpb25zIGBpb191cmluZ19jbWRfc2V0X3Jlc2AgYW5kIGBpb191cmluZ19jbWRfc2V0X3JlczMyYC4gVGhlc2Ugc2V0IHRoZSByZXN1bHQgKGByZXRgKSBmb3IgYSBnaXZlbiBjb21tYW5kLiBJbnRlcmVzdGluZ2x5LCBpdCBjaGVja3MgaWYgYHJldCBcdTAwM2MgMGAgYW5kIGNhbGxzIGByZXFfc2V0X2ZhaWxgIGlmIHNvLiBUaGVuLCBpdCBjYWxscyBgaW9fcmVxX3NldF9yZXNgIG9yIGBpb19yZXFfc2V0X3JlczMyYC5cblxuTm93LCB0aGF0J3Mgd2hhdCBJIHdhbnQgdG8gc2VlISBUaGUgY3J1Y2lhbCBwYXJ0IGlzIHRoYXQgYGlvX3JlcV9zZXRfcmVzYCBhbmQgYGlvX3JlcV9zZXRfcmVzMzJgIGFyZSBjYWxsZWQgYWZ0ZXIgdGhlIGByZXRgIGNoZWNrLiBNeSBmb2N1cyBoZXJlIGlzIG9uIHVuZGVyc3RhbmRpbmcgcHJlY2lzZWx5IGhvdyB0aG9zZSBgaW9fcmVxX3NldF9yZXNYYCBmdW5jdGlvbnMgaGFuZGxlIHRoZSByZXN1bHQgc2V0dGluZy4gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGltcGxlbWVudGF0aW9uIG9mIHRob3NlIGZ1bmN0aW9ucywgc3BlY2lmaWNhbGx5IGBpb19yZXFfc2V0X3JlczMyYCwgdG8gZW5zdXJlIHRoZSBkYXRhIGlzIGJlaW5nIGhhbmRsZWQgY29ycmVjdGx5IGFuZCB0aGF0IHRoZXJlJ3Mgbm8gd2F5IHdlIGNvdWxkIHBvdGVudGlhbGx5IGJlIGludHJvZHVjaW5nIGFueSB2dWxuZXJhYmlsaXRpZXMgYnkgZmFpbGluZyB0byBpbml0aWFsaXplIHRoZSBtZW1vcnkgb24gY29tbWFuZC4gVGltZSB0byBzZWFyY2ggZm9yIHdoZXJlIHRob3NlIGFyZSBkZWZpbmVkLiBJJ2xsIHVzZSBgZ3JlcHBlcmAgb3IgZXF1aXZhbGVudCB0b29sIHRvIGZpbmQgdGhhdCBkZWZpbml0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MzE2LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTU0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTk6MjM6NTIuMTgxMDQ3OTE4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDY4NzQwNzg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvX3JlcV9zZXRfcmVzMzJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvaW9fdXJpbmcuaD0zMzY9c3RhdGljIGlubGluZSB1MzIgY3R4X2NxZTMyX2ZsYWdzKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4KVxcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuaC0zNDItXFxuaW9fdXJpbmcvaW9fdXJpbmcuaDozNDM6c3RhdGljIGlubGluZSB2b2lkIGlvX3JlcV9zZXRfcmVzMzIoc3RydWN0IGlvX2tpb2NiICpyZXEsIHMzMiByZXMsIHUzMiBjZmxhZ3MsXFxuaW9fdXJpbmcvaW9fdXJpbmcuaC0zNDQtXFx0XFx0XFx0XFx0ICAgIF9fdTY0IGV4dHJhMSwgX191NjQgZXh0cmEyKVxcbi0tXFxuaW9fdXJpbmcvbm9wLmM9NTg9aW50IGlvX25vcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbi0tXFxuaW9fdXJpbmcvbm9wLmMtODAtXFx0aWYgKG5vcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JJTkdfTk9QX0NRRTMyKVxcbmlvX3VyaW5nL25vcC5jOjgxOlxcdFxcdGlvX3JlcV9zZXRfcmVzMzIocmVxLCByZXQsIDAsIG5vcC1cXHUwMDNlZXh0cmExLCBub3AtXFx1MDAzZWV4dHJhMik7XFxuaW9fdXJpbmcvbm9wLmMtODItXFx0ZWxzZVxcbi0tXFxuaW9fdXJpbmcvdXJpbmdfY21kLmM9MTUxPXZvaWQgaW9fdXJpbmdfY21kX3NldF9yZXMzMihzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsIHMzMiByZXQsIHU2NCByZXMyKVxcbi0tXFxuaW9fdXJpbmcvdXJpbmdfY21kLmMtMTU2LVxcdFxcdHJlcV9zZXRfZmFpbChyZXEpO1xcbmlvX3VyaW5nL3VyaW5nX2NtZC5jOjE1NzpcXHRpb19yZXFfc2V0X3JlczMyKHJlcSwgcmV0LCAwLCByZXMyLCAwKTtcXG5pb191cmluZy91cmluZ19jbWQuYy0xNTgtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxOToyMzo1NC42NDk3OTQ3MDVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTM2OTgxMjg2NzM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkV4YW1pbmluZyBpb19yZXFfc2V0X3JlczMyKipcblxuT2theSwgdGltZSB0byBkaXZlIGludG8gdGhpcy4gRmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQncyBoZWFkIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBhbmQgcGlucG9pbnQgdGhlIGV4YWN0IGRlZmluaXRpb24gb2YgYGlvX3JlcV9zZXRfcmVzMzJgLiBJJ2xsIGdvIGRpcmVjdGx5IHRvIGBpb191cmluZy9pb191cmluZy5oYC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbiBwcm90b3R5cGVzIHJlc2lkZS4gTGV0J3Mgc2VlIHdoYXQncyB3aGF0LiBHb3R0YSBiZSBwcmVjaXNlIGhlcmUsIG5vIHJvb20gZm9yIGd1ZXNzd29yayB3aXRoIHRoZXNlIGxvdy1sZXZlbCBpbnRlcmZhY2VzLiBUaW1lIHRvIGxvb2sgdXAgdGhlIGRldGFpbHMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3OTksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxOToyNjoxMS42MzEwODQ4MloiLCJTZXEiOjIwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzExMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpb191cmluZy9pb191cmluZy5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM0MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM0MDpcXHRcXHRyZXR1cm4gMDtcXG4gMzQxOlxcdH1cXG4gMzQyOlxcdFxcbiAzNDM6XFx0c3RhdGljIGlubGluZSB2b2lkIGlvX3JlcV9zZXRfcmVzMzIoc3RydWN0IGlvX2tpb2NiICpyZXEsIHMzMiByZXMsIHUzMiBjZmxhZ3MsXFxuIDM0NDpcXHRcXHRcXHRcXHRcXHQgICAgX191NjQgZXh0cmExLCBfX3U2NCBleHRyYTIpXFxuIDM0NTpcXHR7XFxuIDM0NjpcXHRcXHRyZXEtXFx1MDAzZWNxZS5yZXMgPSByZXM7XFxuIDM0NzpcXHRcXHRyZXEtXFx1MDAzZWNxZS5mbGFncyA9IGNmbGFncyB8IGN0eF9jcWUzMl9mbGFncyhyZXEtXFx1MDAzZWN0eCk7XFxuIDM0ODpcXHRcXHRyZXEtXFx1MDAzZWJpZ19jcWUuZXh0cmExID0gZXh0cmExO1xcbiAzNDk6XFx0XFx0cmVxLVxcdTAwM2ViaWdfY3FlLmV4dHJhMiA9IGV4dHJhMjtcXG4gMzUwOlxcdH1cXG4gMzUxOlxcdFxcbiAzNTI6XFx0c3RhdGljIGlubGluZSB2b2lkICppb191cmluZ19hbGxvY19hc3luY19kYXRhKHN0cnVjdCBpb19hbGxvY19jYWNoZSAqY2FjaGUsXFxuIDM1MzpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgaW9fa2lvY2IgKnJlcSlcXG4gMzU0OlxcdHtcXG4gMzU1OlxcdFxcdGlmIChjYWNoZSkge1xcbiAzNTY6XFx0XFx0XFx0cmVxLVxcdTAwM2Vhc3luY19kYXRhID0gaW9fY2FjaGVfYWxsb2MoY2FjaGUsIEdGUF9LRVJORUwpO1xcbiAzNTc6XFx0XFx0fSBlbHNlIHtcXG4gMzU4OlxcdFxcdFxcdGNvbnN0IHN0cnVjdCBpb19pc3N1ZV9kZWYgKmRlZiA9IFxcdTAwMjZpb19pc3N1ZV9kZWZzW3JlcS1cXHUwMDNlb3Bjb2RlXTtcXG4gMzU5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxOToyNjoxMS42MzExNjMzNVoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjI5NzAwMDI0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWZhY3RvcmluZyBpb191cmluZ19jbWRfZG9uZTogQSBEZWVwIERpdmUgaW50byBNZW1vcnkgU2FmZXR5KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gbG9va2luZyBhdCBhIHJlZmFjdG9yaW5nIG9mIHRoZSBgaW9fdXJpbmdfY21kX2RvbmVgIEFQSSwgYW5kIG15IHByaW1hcnkgY29uY2VybiwgYXMgYWx3YXlzLCBpcyBtZW1vcnkgc2FmZXR5IGFuZCBjb3JyZWN0bmVzcy4gVGhlIG9sZCBjb2RlIGhhZCBhIGNvbWJpbmVkIGZ1bmN0aW9uLCBgX19pb191cmluZ19jbWRfZG9uZWAsIHdoaWNoIHNldCB0aGUgcmVzdWx0LCBmbGFncywgYW5kIGV4dHJhIGZpZWxkcyBvZiB0aGUgY29tcGxldGlvbiBxdWV1ZSBlbnRyeSAoQ1FFKS4gVGhlIG5ldyBjb2RlLCBgaW9fdXJpbmdfY21kX3NldF9yZXMzMmAsIGFwcGVhcnMgdG8gYmUgYSBjbGVhbmVyIHNlcGFyYXRpb24gb2YgY29uY2VybnMuXG5cbkluaXRpYWxseSwgSSBoYWQgYSBodW5jaCBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeS4gSW4gdGhlIG9sZCBjb2RlLCBgX19pb191cmluZ19jbWRfZG9uZWAgZmlyc3Qgc2V0IHRoZSBDUUUgZmxhZ3MgdG8gYDBgIGFuZCBjb25kaXRpb25hbGx5IHNldCB0aGUgYElPUklOR19DUUVfRl8zMmAgZmxhZyBiYXNlZCBvbiBgSU9SSU5HX1NFVFVQX0NRRV9NSVhFRGAuIFRoZSBuZXcgYGlvX3JlcV9zZXRfcmVzMzJgLCBob3dldmVyLCBpbW1lZGlhdGVseSBzZXRzIGByZXEtXHUwMDNlY3FlLmZsYWdzYCB0byBgY2ZsYWdzIHwgY3R4X2NxZTMyX2ZsYWdzKHJlcS1cdTAwM2VjdHgpYC4gQWZ0ZXIgYSBxdWljayBjaGVjaywgSSByZWFsaXplZCB0aGF0IGBjdHhfY3FlMzJfZmxhZ3NgIGFjaGlldmVzIHRoZSBzYW1lIHJlc3VsdCBhcyB0aGUgb2xkIGNvbmRpdGlvbmFsOiBhZGRpbmcgdGhlIGBJT1JJTkdfQ1FFX0ZfMzJgIGZsYWcgaWYgYElPUklOR19TRVRVUF9DUUVfTUlYRURgIGlzIHNldCBpbiB0aGUgY29udGV4dC4gU28sIHRoZSBmbGFnIHNldHRpbmcgaXMgZXF1aXZhbGVudCwgd2hpY2ggaXMgZ3JlYXQuXG5cbkknbSB2ZXJpZnlpbmcgdGhhdCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3IgbWVtb3J5IGxlYWtzIGhlcmUuIFRoZSBgaW9fdXJpbmdfY21kX3NldF9yZXMzMmAgYWxzbyBzZXRzIHRoZSBgZXh0cmExYCBhbmQgYGV4dHJhMmAgZmllbGRzLiAgSW4gdGhlIGV4YW1wbGUgdXNhZ2VzIG9mIGBpb191cmluZ19jbWRfc2V0X3JlczMyYCAoaW4gYG52bWVfdXJpbmdfY21kX2VuZF9pb2AgYW5kIGBzY3NpX2JzZ191cmluZ190YXNrX2NiYCksIHRoZSBgZXh0cmExYCBpcyBwYXNzZWQgaW4gYXMgYHJlczJgLCB3aGljaCBpcyBleHBsaWNpdGx5IGFzc2lnbmVkLiBgZXh0cmEyYCBpcyBzZXQgdG8gYDBgIGluIGBpb19yZXFfc2V0X3JlczMyYC4gU28sIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCB3aGljaCBpcyBleGFjdGx5IHdoYXQgSSB3YXMgaG9waW5nIHRvIHNlZS5cblxuU2luY2UgdGhpcyBpcyBwdXJlbHkgYSByZWZhY3RvcmluZywgaXQncyBub3QgaW50cm9kdWNpbmcgYW55IG5ldyB1c2VyLXNwYWNlIHN0cnVjdHVyZXMgb3IgY2hhbmdpbmcgYW55IGJvdW5kcyBjaGVja3MuIFRoaXMgaXMgZ29vZCBuZXdzLCBhcyBpdCBtaW5pbWl6ZXMgdGhlIHJpc2sgb2YgaW50cm9kdWNpbmcgc3VidGxlIGJ1Z3Mgb3IgdnVsbmVyYWJpbGl0aWVzLiBCZWNhdXNlIG9mIHRoZSBjb2RlIHJldmlldywgSSdtIGNvbmZpZGVudCB0aGF0IHRoZXNlIGNoYW5nZXMgYXJlIHNhZmUuIEkgd2lsbCBtYXJrIGBOZWVkc0tNU0FOPWZhbHNlYCBhcyB0aGUgY29kZSBpcyBzYWZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MzQ1LCJPdXRwdXRUb2tlbnMiOjE5NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMDEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxOToyNjoyNy45MjgxNjc0MTlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjMxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgYGlvX3VyaW5nX2NtZF9kb25lYCBBUEkgYnkgc3BsaXR0aW5nIGl0IGludG8gYGlvX3VyaW5nX2NtZF9zZXRfcmVzYC9gaW9fdXJpbmdfY21kX3NldF9yZXMzMmAgYW5kIGBpb191cmluZ19jbWRfZG9uZWAuIFRoZSB2YWx1ZXMgcGFzc2VkIHRvIHRoZXNlIGZ1bmN0aW9ucyByZW1haW4gdGhlIHNhbWUgYXMgYmVmb3JlLCBhbmQgYWxsIGZpZWxkcyBpbiB0aGUgY29tcGxldGlvbiBxdWV1ZSBlbnRyeSAoQ1FFKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCAoZS5nLiwgYGV4dHJhMmAgaXMgc2V0IHRvIDAgaW4gYGlvX3JlcV9zZXRfcmVzMzJgKS4gVGhlcmUgYXJlIG5vIG5ldyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm8gY2hhbmdlcyB0byBib3VuZHMgY2hlY2tpbmcsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2guIEFueSBwb3RlbnRpYWwgYnVncyB3b3VsZCBiZSBsb2dpYyBlcnJvcnMgb3IgdXNlLWFmdGVyLWZyZWUvb3V0LW9mLWJvdW5kcyBpc3N1ZXMsIHdoaWNoIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgS0FTQU4gYW5kIG90aGVyIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBgaW9fdXJpbmdfY21kX2RvbmVgIEFQSSBieSBzcGxpdHRpbmcgaXQgaW50byBgaW9fdXJpbmdfY21kX3NldF9yZXNgL2Bpb191cmluZ19jbWRfc2V0X3JlczMyYCBhbmQgYGlvX3VyaW5nX2NtZF9kb25lYC4gVGhlIHZhbHVlcyBwYXNzZWQgdG8gdGhlc2UgZnVuY3Rpb25zIHJlbWFpbiB0aGUgc2FtZSBhcyBiZWZvcmUsIGFuZCBhbGwgZmllbGRzIGluIHRoZSBjb21wbGV0aW9uIHF1ZXVlIGVudHJ5IChDUUUpIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIChlLmcuLCBgZXh0cmEyYCBpcyBzZXQgdG8gMCBpbiBgaW9fcmVxX3NldF9yZXMzMmApLiBUaGVyZSBhcmUgbm8gbmV3IHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBubyBjaGFuZ2VzIHRvIGJvdW5kcyBjaGVja2luZywgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaC4gQW55IHBvdGVudGlhbCBidWdzIHdvdWxkIGJlIGxvZ2ljIGVycm9ycyBvciB1c2UtYWZ0ZXItZnJlZS9vdXQtb2YtYm91bmRzIGlzc3Vlcywgd2hpY2ggYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBLQVNBTiBhbmQgb3RoZXIgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowrxhjx[1] Phase: Succeeded StartedAt: 2026-08-27 19:27:01 +0000 UTC FinishedAt: 2026-08-27 19:27:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrxhjx[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-27 19:27:01 +0000 UTC FinishedAt: 2026-08-27 19:27:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrxhjx[2] Phase: Succeeded StartedAt: 2026-08-27 19:27:01 +0000 UTC FinishedAt: 2026-08-27 23:07:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrxhjx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BLK_DEV_UBLK","NVME_CORE","BLK_DEV_NVME","BLK_DEV_BSG","BTRFS_FS","FUSE_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","io_uring"],"focus_symbols":["io_uring_cmd_set_res","io_uring_cmd_set_res32","io_uring_cmd_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BLK_DEV_UBLK","NVME_CORE","BLK_DEV_NVME","BLK_DEV_BSG","BTRFS_FS","FUSE_FS"],"series_id":"b53398fb-99bd-4448-a2a5-1c3e8e9daa8c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-27 19:27:01 +0000 UTC FinishedAt: 2026-08-27 23:07:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BLK_DEV_UBLK","NVME_CORE","BLK_DEV_NVME","BLK_DEV_BSG","BTRFS_FS","FUSE_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","io_uring"],"focus_symbols":["io_uring_cmd_set_res","io_uring_cmd_set_res32","io_uring_cmd_done"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BLK_DEV_UBLK","NVME_CORE","BLK_DEV_NVME","BLK_DEV_BSG","BTRFS_FS","FUSE_FS"],"series_id":"b53398fb-99bd-4448-a2a5-1c3e8e9daa8c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowrxhjx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BLK_DEV_UBLK","NVME_CORE","BLK_DEV_NVME","BLK_DEV_BSG","BTRFS_FS","FUSE_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","io_uring"],"focus_symbols":["io_uring_cmd_set_res","io_uring_cmd_set_res32","io_uring_cmd_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BLK_DEV_UBLK","NVME_CORE","BLK_DEV_NVME","BLK_DEV_BSG","BTRFS_FS","FUSE_FS"],"series_id":"b53398fb-99bd-4448-a2a5-1c3e8e9daa8c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-27 19:27:01 +0000 UTC FinishedAt: 2026-08-27 19:27:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrxhjx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BLK_DEV_UBLK","NVME_CORE","BLK_DEV_NVME","BLK_DEV_BSG","BTRFS_FS","FUSE_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","io_uring"],"focus_symbols":["io_uring_cmd_set_res","io_uring_cmd_set_res32","io_uring_cmd_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BLK_DEV_UBLK","NVME_CORE","BLK_DEV_NVME","BLK_DEV_BSG","BTRFS_FS","FUSE_FS"],"series_id":"b53398fb-99bd-4448-a2a5-1c3e8e9daa8c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-27 19:27:01 +0000 UTC FinishedAt: 2026-08-27 19:27:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BLK_DEV_UBLK","NVME_CORE","BLK_DEV_NVME","BLK_DEV_BSG","BTRFS_FS","FUSE_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflowrxhjx/series-workflowrxhjx-convert-artifact-537549459/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrxhjx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BLK_DEV_UBLK","NVME_CORE","BLK_DEV_NVME","BLK_DEV_BSG","BTRFS_FS","FUSE_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","io_uring"],"focus_symbols":["io_uring_cmd_set_res","io_uring_cmd_set_res32","io_uring_cmd_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BLK_DEV_UBLK","NVME_CORE","BLK_DEV_NVME","BLK_DEV_BSG","BTRFS_FS","FUSE_FS"],"series_id":"b53398fb-99bd-4448-a2a5-1c3e8e9daa8c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-27 19:27:11 +0000 UTC FinishedAt: 2026-08-27 19:43:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrxhjx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BLK_DEV_UBLK","NVME_CORE","BLK_DEV_NVME","BLK_DEV_BSG","BTRFS_FS","FUSE_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","io_uring"],"focus_symbols":["io_uring_cmd_set_res","io_uring_cmd_set_res32","io_uring_cmd_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BLK_DEV_UBLK","NVME_CORE","BLK_DEV_NVME","BLK_DEV_BSG","BTRFS_FS","FUSE_FS"],"series_id":"b53398fb-99bd-4448-a2a5-1c3e8e9daa8c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-27 19:27:11 +0000 UTC FinishedAt: 2026-08-27 19:43:23 +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:*804c3d19-7dd2-4c3d-b677-4010077fa1a5,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-workflowrxhjx/series-workflowrxhjx-convert-artifact-537549459/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": "ccffac69-8039-45c0-ad42-ac1d5b546a76", "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-workflowrxhjx/series-workflowrxhjx-build-action-3982391233/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrxhjx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BLK_DEV_UBLK","NVME_CORE","BLK_DEV_NVME","BLK_DEV_BSG","BTRFS_FS","FUSE_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","io_uring"],"focus_symbols":["io_uring_cmd_set_res","io_uring_cmd_set_res32","io_uring_cmd_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BLK_DEV_UBLK","NVME_CORE","BLK_DEV_NVME","BLK_DEV_BSG","BTRFS_FS","FUSE_FS"],"series_id":"b53398fb-99bd-4448-a2a5-1c3e8e9daa8c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-27 19:27:11 +0000 UTC FinishedAt: 2026-08-27 19:43:13 +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:*804c3d19-7dd2-4c3d-b677-4010077fa1a5,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-workflowrxhjx/series-workflowrxhjx-convert-artifact-537549459/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": "ccffac69-8039-45c0-ad42-ac1d5b546a76", "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-workflowrxhjx/series-workflowrxhjx-build-action-3982391233/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrxhjx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BLK_DEV_UBLK","NVME_CORE","BLK_DEV_NVME","BLK_DEV_BSG","BTRFS_FS","FUSE_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","io_uring"],"focus_symbols":["io_uring_cmd_set_res","io_uring_cmd_set_res32","io_uring_cmd_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BLK_DEV_UBLK","NVME_CORE","BLK_DEV_NVME","BLK_DEV_BSG","BTRFS_FS","FUSE_FS"],"series_id":"b53398fb-99bd-4448-a2a5-1c3e8e9daa8c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-27 19:43:23 +0000 UTC FinishedAt: 2026-08-27 19:43:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrxhjx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BLK_DEV_UBLK","NVME_CORE","BLK_DEV_NVME","BLK_DEV_BSG","BTRFS_FS","FUSE_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","io_uring"],"focus_symbols":["io_uring_cmd_set_res","io_uring_cmd_set_res32","io_uring_cmd_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BLK_DEV_UBLK","NVME_CORE","BLK_DEV_NVME","BLK_DEV_BSG","BTRFS_FS","FUSE_FS"],"series_id":"b53398fb-99bd-4448-a2a5-1c3e8e9daa8c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-27 19:43:23 +0000 UTC FinishedAt: 2026-08-27 19:43:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrxhjx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BLK_DEV_UBLK","NVME_CORE","BLK_DEV_NVME","BLK_DEV_BSG","BTRFS_FS","FUSE_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","io_uring"],"focus_symbols":["io_uring_cmd_set_res","io_uring_cmd_set_res32","io_uring_cmd_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BLK_DEV_UBLK","NVME_CORE","BLK_DEV_NVME","BLK_DEV_BSG","BTRFS_FS","FUSE_FS"],"series_id":"b53398fb-99bd-4448-a2a5-1c3e8e9daa8c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-27 19:43:23 +0000 UTC FinishedAt: 2026-08-27 19:43:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrxhjx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BLK_DEV_UBLK","NVME_CORE","BLK_DEV_NVME","BLK_DEV_BSG","BTRFS_FS","FUSE_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","io_uring"],"focus_symbols":["io_uring_cmd_set_res","io_uring_cmd_set_res32","io_uring_cmd_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BLK_DEV_UBLK","NVME_CORE","BLK_DEV_NVME","BLK_DEV_BSG","BTRFS_FS","FUSE_FS"],"series_id":"b53398fb-99bd-4448-a2a5-1c3e8e9daa8c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-27 19:43:23 +0000 UTC FinishedAt: 2026-08-27 19:43:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BLK_DEV_UBLK","NVME_CORE","BLK_DEV_NVME","BLK_DEV_BSG","BTRFS_FS","FUSE_FS"],"series_id":"b53398fb-99bd-4448-a2a5-1c3e8e9daa8c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflowrxhjx/series-workflowrxhjx-convert-artifact-2182604426/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrxhjx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BLK_DEV_UBLK","NVME_CORE","BLK_DEV_NVME","BLK_DEV_BSG","BTRFS_FS","FUSE_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","io_uring"],"focus_symbols":["io_uring_cmd_set_res","io_uring_cmd_set_res32","io_uring_cmd_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BLK_DEV_UBLK","NVME_CORE","BLK_DEV_NVME","BLK_DEV_BSG","BTRFS_FS","FUSE_FS"],"series_id":"b53398fb-99bd-4448-a2a5-1c3e8e9daa8c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-27 19:43:34 +0000 UTC FinishedAt: 2026-08-27 19:45:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrxhjx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BLK_DEV_UBLK","NVME_CORE","BLK_DEV_NVME","BLK_DEV_BSG","BTRFS_FS","FUSE_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","io_uring"],"focus_symbols":["io_uring_cmd_set_res","io_uring_cmd_set_res32","io_uring_cmd_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BLK_DEV_UBLK","NVME_CORE","BLK_DEV_NVME","BLK_DEV_BSG","BTRFS_FS","FUSE_FS"],"series_id":"b53398fb-99bd-4448-a2a5-1c3e8e9daa8c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-27 19:43:34 +0000 UTC FinishedAt: 2026-08-27 19:45:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ccffac69-8039-45c0-ad42-ac1d5b546a76,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-workflowrxhjx/series-workflowrxhjx-build-action-3982391233/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-workflowrxhjx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BLK_DEV_UBLK","NVME_CORE","BLK_DEV_NVME","BLK_DEV_BSG","BTRFS_FS","FUSE_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","io_uring"],"focus_symbols":["io_uring_cmd_set_res","io_uring_cmd_set_res32","io_uring_cmd_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BLK_DEV_UBLK","NVME_CORE","BLK_DEV_NVME","BLK_DEV_BSG","BTRFS_FS","FUSE_FS"],"series_id":"b53398fb-99bd-4448-a2a5-1c3e8e9daa8c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-27 19:45:38 +0000 UTC FinishedAt: 2026-08-27 19:45:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrxhjx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BLK_DEV_UBLK","NVME_CORE","BLK_DEV_NVME","BLK_DEV_BSG","BTRFS_FS","FUSE_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","io_uring"],"focus_symbols":["io_uring_cmd_set_res","io_uring_cmd_set_res32","io_uring_cmd_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BLK_DEV_UBLK","NVME_CORE","BLK_DEV_NVME","BLK_DEV_BSG","BTRFS_FS","FUSE_FS"],"series_id":"b53398fb-99bd-4448-a2a5-1c3e8e9daa8c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-27 19:45:38 +0000 UTC FinishedAt: 2026-08-27 19:45:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrxhjx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BLK_DEV_UBLK","NVME_CORE","BLK_DEV_NVME","BLK_DEV_BSG","BTRFS_FS","FUSE_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","io_uring"],"focus_symbols":["io_uring_cmd_set_res","io_uring_cmd_set_res32","io_uring_cmd_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BLK_DEV_UBLK","NVME_CORE","BLK_DEV_NVME","BLK_DEV_BSG","BTRFS_FS","FUSE_FS"],"series_id":"b53398fb-99bd-4448-a2a5-1c3e8e9daa8c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-27 19:45:38 +0000 UTC FinishedAt: 2026-08-27 20:02:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrxhjx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BLK_DEV_UBLK","NVME_CORE","BLK_DEV_NVME","BLK_DEV_BSG","BTRFS_FS","FUSE_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","io_uring"],"focus_symbols":["io_uring_cmd_set_res","io_uring_cmd_set_res32","io_uring_cmd_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BLK_DEV_UBLK","NVME_CORE","BLK_DEV_NVME","BLK_DEV_BSG","BTRFS_FS","FUSE_FS"],"series_id":"b53398fb-99bd-4448-a2a5-1c3e8e9daa8c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-27 19:45:38 +0000 UTC FinishedAt: 2026-08-27 20:02:07 +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:*804c3d19-7dd2-4c3d-b677-4010077fa1a5,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-workflowrxhjx/series-workflowrxhjx-convert-artifact-2182604426/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": "2355d4a5-3240-4914-88ef-2bbee11e08b0", "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-workflowrxhjx/series-workflowrxhjx-build-action-2371298478/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrxhjx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BLK_DEV_UBLK","NVME_CORE","BLK_DEV_NVME","BLK_DEV_BSG","BTRFS_FS","FUSE_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","io_uring"],"focus_symbols":["io_uring_cmd_set_res","io_uring_cmd_set_res32","io_uring_cmd_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BLK_DEV_UBLK","NVME_CORE","BLK_DEV_NVME","BLK_DEV_BSG","BTRFS_FS","FUSE_FS"],"series_id":"b53398fb-99bd-4448-a2a5-1c3e8e9daa8c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-27 19:45:38 +0000 UTC FinishedAt: 2026-08-27 20:01:57 +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:*804c3d19-7dd2-4c3d-b677-4010077fa1a5,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-workflowrxhjx/series-workflowrxhjx-convert-artifact-2182604426/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": "2355d4a5-3240-4914-88ef-2bbee11e08b0", "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-workflowrxhjx/series-workflowrxhjx-build-action-2371298478/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrxhjx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BLK_DEV_UBLK","NVME_CORE","BLK_DEV_NVME","BLK_DEV_BSG","BTRFS_FS","FUSE_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","io_uring"],"focus_symbols":["io_uring_cmd_set_res","io_uring_cmd_set_res32","io_uring_cmd_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BLK_DEV_UBLK","NVME_CORE","BLK_DEV_NVME","BLK_DEV_BSG","BTRFS_FS","FUSE_FS"],"series_id":"b53398fb-99bd-4448-a2a5-1c3e8e9daa8c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-27 20:02:07 +0000 UTC FinishedAt: 2026-08-27 20:02:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrxhjx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BLK_DEV_UBLK","NVME_CORE","BLK_DEV_NVME","BLK_DEV_BSG","BTRFS_FS","FUSE_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","io_uring"],"focus_symbols":["io_uring_cmd_set_res","io_uring_cmd_set_res32","io_uring_cmd_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BLK_DEV_UBLK","NVME_CORE","BLK_DEV_NVME","BLK_DEV_BSG","BTRFS_FS","FUSE_FS"],"series_id":"b53398fb-99bd-4448-a2a5-1c3e8e9daa8c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-27 20:02:07 +0000 UTC FinishedAt: 2026-08-27 20:02:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrxhjx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BLK_DEV_UBLK","NVME_CORE","BLK_DEV_NVME","BLK_DEV_BSG","BTRFS_FS","FUSE_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","io_uring"],"focus_symbols":["io_uring_cmd_set_res","io_uring_cmd_set_res32","io_uring_cmd_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BLK_DEV_UBLK","NVME_CORE","BLK_DEV_NVME","BLK_DEV_BSG","BTRFS_FS","FUSE_FS"],"series_id":"b53398fb-99bd-4448-a2a5-1c3e8e9daa8c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-27 20:02:07 +0000 UTC FinishedAt: 2026-08-27 20:04:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrxhjx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BLK_DEV_UBLK","NVME_CORE","BLK_DEV_NVME","BLK_DEV_BSG","BTRFS_FS","FUSE_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","io_uring"],"focus_symbols":["io_uring_cmd_set_res","io_uring_cmd_set_res32","io_uring_cmd_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BLK_DEV_UBLK","NVME_CORE","BLK_DEV_NVME","BLK_DEV_BSG","BTRFS_FS","FUSE_FS"],"series_id":"b53398fb-99bd-4448-a2a5-1c3e8e9daa8c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-27 20:02:07 +0000 UTC FinishedAt: 2026-08-27 20:04:07 +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:*2355d4a5-3240-4914-88ef-2bbee11e08b0,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-workflowrxhjx/series-workflowrxhjx-build-action-2371298478/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-workflowrxhjx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BLK_DEV_UBLK","NVME_CORE","BLK_DEV_NVME","BLK_DEV_BSG","BTRFS_FS","FUSE_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","io_uring"],"focus_symbols":["io_uring_cmd_set_res","io_uring_cmd_set_res32","io_uring_cmd_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BLK_DEV_UBLK","NVME_CORE","BLK_DEV_NVME","BLK_DEV_BSG","BTRFS_FS","FUSE_FS"],"series_id":"b53398fb-99bd-4448-a2a5-1c3e8e9daa8c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-27 20:04:17 +0000 UTC FinishedAt: 2026-08-27 23:07:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrxhjx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BLK_DEV_UBLK","NVME_CORE","BLK_DEV_NVME","BLK_DEV_BSG","BTRFS_FS","FUSE_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","io_uring"],"focus_symbols":["io_uring_cmd_set_res","io_uring_cmd_set_res32","io_uring_cmd_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BLK_DEV_UBLK","NVME_CORE","BLK_DEV_NVME","BLK_DEV_BSG","BTRFS_FS","FUSE_FS"],"series_id":"b53398fb-99bd-4448-a2a5-1c3e8e9daa8c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-27 20:04:17 +0000 UTC FinishedAt: 2026-08-27 23:07:41 +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-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","io_uring"],"focus_symbols":["io_uring_cmd_set_res","io_uring_cmd_set_res32","io_uring_cmd_done"],"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:*ccffac69-8039-45c0-ad42-ac1d5b546a76,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*2355d4a5-3240-4914-88ef-2bbee11e08b0,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-workflowrxhjx/series-workflowrxhjx-build-action-3982391233/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-workflowrxhjx/series-workflowrxhjx-build-action-2371298478/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowrxhjx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BLK_DEV_UBLK","NVME_CORE","BLK_DEV_NVME","BLK_DEV_BSG","BTRFS_FS","FUSE_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","io_uring"],"focus_symbols":["io_uring_cmd_set_res","io_uring_cmd_set_res32","io_uring_cmd_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BLK_DEV_UBLK","NVME_CORE","BLK_DEV_NVME","BLK_DEV_BSG","BTRFS_FS","FUSE_FS"],"series_id":"b53398fb-99bd-4448-a2a5-1c3e8e9daa8c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-27 20:04:17 +0000 UTC FinishedAt: 2026-08-27 20:04:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrxhjx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BLK_DEV_UBLK","NVME_CORE","BLK_DEV_NVME","BLK_DEV_BSG","BTRFS_FS","FUSE_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","io_uring"],"focus_symbols":["io_uring_cmd_set_res","io_uring_cmd_set_res32","io_uring_cmd_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BLK_DEV_UBLK","NVME_CORE","BLK_DEV_NVME","BLK_DEV_BSG","BTRFS_FS","FUSE_FS"],"series_id":"b53398fb-99bd-4448-a2a5-1c3e8e9daa8c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-27 20:04:17 +0000 UTC FinishedAt: 2026-08-27 20:04:22 +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-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","io_uring"],"focus_symbols":["io_uring_cmd_set_res","io_uring_cmd_set_res32","io_uring_cmd_done"],"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-workflowrxhjx/series-workflowrxhjx-convert-artifact-2601046303/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrxhjx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BLK_DEV_UBLK","NVME_CORE","BLK_DEV_NVME","BLK_DEV_BSG","BTRFS_FS","FUSE_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","io_uring"],"focus_symbols":["io_uring_cmd_set_res","io_uring_cmd_set_res32","io_uring_cmd_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BLK_DEV_UBLK","NVME_CORE","BLK_DEV_NVME","BLK_DEV_BSG","BTRFS_FS","FUSE_FS"],"series_id":"b53398fb-99bd-4448-a2a5-1c3e8e9daa8c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-27 20:04:17 +0000 UTC FinishedAt: 2026-08-27 20:04:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrxhjx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BLK_DEV_UBLK","NVME_CORE","BLK_DEV_NVME","BLK_DEV_BSG","BTRFS_FS","FUSE_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","io_uring"],"focus_symbols":["io_uring_cmd_set_res","io_uring_cmd_set_res32","io_uring_cmd_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BLK_DEV_UBLK","NVME_CORE","BLK_DEV_NVME","BLK_DEV_BSG","BTRFS_FS","FUSE_FS"],"series_id":"b53398fb-99bd-4448-a2a5-1c3e8e9daa8c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-27 20:04:17 +0000 UTC FinishedAt: 2026-08-27 20:04:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrxhjx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BLK_DEV_UBLK","NVME_CORE","BLK_DEV_NVME","BLK_DEV_BSG","BTRFS_FS","FUSE_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","io_uring"],"focus_symbols":["io_uring_cmd_set_res","io_uring_cmd_set_res32","io_uring_cmd_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BLK_DEV_UBLK","NVME_CORE","BLK_DEV_NVME","BLK_DEV_BSG","BTRFS_FS","FUSE_FS"],"series_id":"b53398fb-99bd-4448-a2a5-1c3e8e9daa8c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-27 20:04:17 +0000 UTC FinishedAt: 2026-08-27 20:04:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrxhjx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BLK_DEV_UBLK","NVME_CORE","BLK_DEV_NVME","BLK_DEV_BSG","BTRFS_FS","FUSE_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","io_uring"],"focus_symbols":["io_uring_cmd_set_res","io_uring_cmd_set_res32","io_uring_cmd_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BLK_DEV_UBLK","NVME_CORE","BLK_DEV_NVME","BLK_DEV_BSG","BTRFS_FS","FUSE_FS"],"series_id":"b53398fb-99bd-4448-a2a5-1c3e8e9daa8c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-27 20:04:27 +0000 UTC FinishedAt: 2026-08-27 23:07:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrxhjx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BLK_DEV_UBLK","NVME_CORE","BLK_DEV_NVME","BLK_DEV_BSG","BTRFS_FS","FUSE_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","io_uring"],"focus_symbols":["io_uring_cmd_set_res","io_uring_cmd_set_res32","io_uring_cmd_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44e96e364b04163ddddc8a24289cef4982b7e36e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","BLK_DEV_UBLK","NVME_CORE","BLK_DEV_NVME","BLK_DEV_BSG","BTRFS_FS","FUSE_FS"],"series_id":"b53398fb-99bd-4448-a2a5-1c3e8e9daa8c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-27 20:04:27 +0000 UTC FinishedAt: 2026-08-27 23:07:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ccffac69-8039-45c0-ad42-ac1d5b546a76,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*2355d4a5-3240-4914-88ef-2bbee11e08b0,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-workflowrxhjx/series-workflowrxhjx-build-action-3982391233/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-workflowrxhjx/series-workflowrxhjx-build-action-2371298478/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-workflowrxhjx/series-workflowrxhjx-convert-artifact-2601046303/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,}