Name: series-workflow7rt7n Phase: Succeeded StartedAt: 2026-06-27 07:31:57 +0000 UTC FinishedAt: 2026-06-27 08:38:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7rt7n[0] Phase: Succeeded StartedAt: 2026-06-27 07:31:57 +0000 UTC FinishedAt: 2026-06-27 07:40:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7rt7n[0].run-triage Phase: Succeeded StartedAt: 2026-06-27 07:31:57 +0000 UTC FinishedAt: 2026-06-27 07:40:34 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "3d5670d672ae08b8c534b7beed6f57c8b44e7b43", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "3d5670d672ae08b8c534b7beed6f57c8b44e7b43", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE" ], "series_id": "48c38717-31b4-40a6-88aa-1b581e1fd93b" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "madvise_hugepage_policy", "reserved_thp_charge", "reserved_thp_uncharge", "reserved_thp_pageblocks", "check_reserved_thp_alignment", "vma_alloc_anon_folio_pmd" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA3OjM5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWFkdmlzZV9odWdlcGFnZV9wb2xpY3kmIzM0OywKICAgICYjMzQ7cmVzZXJ2ZWRfdGhwX2NoYXJnZSYjMzQ7LAogICAgJiMzNDtyZXNlcnZlZF90aHBfdW5jaGFyZ2UmIzM0OywKICAgICYjMzQ7cmVzZXJ2ZWRfdGhwX3BhZ2VibG9ja3MmIzM0OywKICAgICYjMzQ7Y2hlY2tfcmVzZXJ2ZWRfdGhwX2FsaWdubWVudCYjMzQ7LAogICAgJiMzNDt2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBNQURWX1JFU0VSVkVEX1RIUCBtYWR2aXNlIGJlaGF2aW9yIGFuZCBWTV9SRVNFUlZFRF9USFAgVk1BIGZsYWcsIG1vZGlmeWluZyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGluY2x1ZGluZyBwYWdlIGZhdWx0IGhhbmRsaW5nLCBtcmVtYXAsIGFuZCBWTUEgc3BsaXR0aW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGtlcm5lbCYjMzk7cyBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA3OjM5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgODhjMjgxNTU2NWRmNmMwNGFkOTRlYmZhNDgwMDU0YzgxODM2ZmU3OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgSnVuIDI3IDA3OjM5OjU0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmggYi9hcmNoL2FscGhhL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oXG5pbmRleCAxZTcwMDQ2OGE2ODU4MC4uNjcyYTJmYzM0Mzg2MTQgMTAwNjQ0XG4tLS0gYS9hcmNoL2FscGhhL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FscGhhL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oXG5AQCAtNzgsNiAmIzQzOzc4LDggQEBcbiBcbiAjZGVmaW5lIE1BRFZfQ09MTEFQU0VcdDI1XHRcdC8qIFN5bmNocm9ub3VzIGh1Z2VwYWdlIGNvbGxhcHNlICovXG4gXG4mIzQzOyNkZWZpbmUgTUFEVl9SRVNFUlZFRF9USFAgMjZcdFx0LyogVXNlIHJlc2VydmVkIHRyYW5zcGFyZW50IGh1Z2VwYWdlcyAqL1xuJiM0MztcbiAjZGVmaW5lIE1BRFZfR1VBUkRfSU5TVEFMTCAxMDJcdFx0LyogZmF0YWwgc2lnbmFsIG9uIGFjY2VzcyB0byByYW5nZSAqL1xuICNkZWZpbmUgTUFEVl9HVUFSRF9SRU1PVkUgMTAzXHRcdC8qIHVuZ3VhcmQgcmFuZ2UgKi9cbiBcbmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmggYi9hcmNoL21pcHMvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmhcbmluZGV4IGI3MDBkYWUyOGM0ODJkLi5hOTRiZjc0ZGVlMjFjYSAxMDA2NDRcbi0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9taXBzL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oXG5AQCAtMTA1LDYgJiM0MzsxMDUsOCBAQFxuIFxuICNkZWZpbmUgTUFEVl9DT0xMQVBTRVx0MjVcdFx0LyogU3luY2hyb25vdXMgaHVnZXBhZ2UgY29sbGFwc2UgKi9cbiBcbiYjNDM7I2RlZmluZSBNQURWX1JFU0VSVkVEX1RIUCAyNlx0XHQvKiBVc2UgcmVzZXJ2ZWQgdHJhbnNwYXJlbnQgaHVnZXBhZ2VzICovXG4mIzQzO1xuICNkZWZpbmUgTUFEVl9HVUFSRF9JTlNUQUxMIDEwMlx0XHQvKiBmYXRhbCBzaWduYWwgb24gYWNjZXNzIHRvIHJhbmdlICovXG4gI2RlZmluZSBNQURWX0dVQVJEX1JFTU9WRSAxMDNcdFx0LyogdW5ndWFyZCByYW5nZSAqL1xuIFxuZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmhcbmluZGV4IGI2YTcwOTUwNjk4N2UwLi5mZTJmZGRlZmI2YzVkOSAxMDA2NDRcbi0tLSBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3BhcmlzYy9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaFxuQEAgLTcyLDYgJiM0Mzs3Miw4IEBAXG4gXG4gI2RlZmluZSBNQURWX0NPTExBUFNFXHQyNVx0XHQvKiBTeW5jaHJvbm91cyBodWdlcGFnZSBjb2xsYXBzZSAqL1xuIFxuJiM0MzsjZGVmaW5lIE1BRFZfUkVTRVJWRURfVEhQIDI2XHRcdC8qIFVzZSByZXNlcnZlZCB0cmFuc3BhcmVudCBodWdlcGFnZXMgKi9cbiYjNDM7XG4gI2RlZmluZSBNQURWX0hXUE9JU09OICAgICAxMDBcdFx0LyogcG9pc29uIGEgcGFnZSBmb3IgdGVzdGluZyAqL1xuICNkZWZpbmUgTUFEVl9TT0ZUX09GRkxJTkUgMTAxXHRcdC8qIHNvZnQgb2ZmbGluZSBwYWdlIGZvciB0ZXN0aW5nICovXG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmggYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaFxuaW5kZXggOTlkNGNjZWU3ZjZlOGEuLmJiNjAzNTMwYmE3OTlmIDEwMDY0NFxuLS0tIGEvYXJjaC94dGVuc2EvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveHRlbnNhL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oXG5AQCAtMTEzLDYgJiM0MzsxMTMsOCBAQFxuIFxuICNkZWZpbmUgTUFEVl9DT0xMQVBTRVx0MjVcdFx0LyogU3luY2hyb25vdXMgaHVnZXBhZ2UgY29sbGFwc2UgKi9cbiBcbiYjNDM7I2RlZmluZSBNQURWX1JFU0VSVkVEX1RIUCAyNlx0XHQvKiBVc2UgcmVzZXJ2ZWQgdHJhbnNwYXJlbnQgaHVnZXBhZ2VzICovXG4mIzQzO1xuICNkZWZpbmUgTUFEVl9HVUFSRF9JTlNUQUxMIDEwMlx0XHQvKiBmYXRhbCBzaWduYWwgb24gYWNjZXNzIHRvIHJhbmdlICovXG4gI2RlZmluZSBNQURWX0dVQVJEX1JFTU9WRSAxMDNcdFx0LyogdW5ndWFyZCByYW5nZSAqL1xuIFxuZGlmZiAtLWdpdCBhL2ZzL3Byb2MvdGFza19tbXUuYyBiL2ZzL3Byb2MvdGFza19tbXUuY1xuaW5kZXggZDMyNDA4ZjdjZDVlZDIuLjY1YzRiMmE2MWFlYWM3IDEwMDY0NFxuLS0tIGEvZnMvcHJvYy90YXNrX21tdS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9wcm9jL3Rhc2tfbW11LmNcbkBAIC0xMjQ1LDYgJiM0MzsxMjQ1LDkgQEAgc3RhdGljIHZvaWQgc2hvd19zbWFwX3ZtYV9mbGFncyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuICNlbmRpZlxuICNpZmRlZiBDT05GSUdfNjRCSVRcbiBcdFx0W2lsb2cyKFZNX1NFQUxFRCldID0gXCYjMzQ7c2xcJiMzNDssXG4mIzQzOyNlbmRpZlxuJiM0MzsjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG4mIzQzO1x0XHRbaWxvZzIoVk1fUkVTRVJWRURfVEhQKV0gPSBcJiMzNDtydFwmIzM0OyxcbiAjZW5kaWZcbiBcdH07XG4gXHRzaXplX3QgaTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2dmcC5oIGIvaW5jbHVkZS9saW51eC9nZnAuaFxuaW5kZXggY2RmOTVhOWYwYjg3YzEuLjJkMDU5MjlmZDhjNzJkIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9nZnAuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9nZnAuaFxuQEAgLTMwLDYgJiM0MzszMCw5IEBAIHN0YXRpYyBpbmxpbmUgaW50IGdmcF9taWdyYXRldHlwZShjb25zdCBnZnBfdCBnZnBfZmxhZ3MpXG4gXHRCVUlMRF9CVUdfT04oKChfX19HRlBfTU9WQUJMRSB8IF9fX0dGUF9SRUNMQUlNQUJMRSkgXHUwMDNlXHUwMDNlXG4gXHRcdCAgICAgIEdGUF9NT1ZBQkxFX1NISUZUKSAhPSBNSUdSQVRFX0hJR0hBVE9NSUMpO1xuIFxuJiM0MztcdGlmICh1bmxpa2VseShnZnBfZmxhZ3MgXHUwMDI2IF9fR0ZQX1JFU0VSVkVEX1RIUCkpXG4mIzQzO1x0XHRyZXR1cm4gTUlHUkFURV9SRVNFUlZFRF9USFA7XG4mIzQzO1xuIFx0aWYgKHVubGlrZWx5KHBhZ2VfZ3JvdXBfYnlfbW9iaWxpdHlfZGlzYWJsZWQpKVxuIFx0XHRyZXR1cm4gTUlHUkFURV9VTk1PVkFCTEU7XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9nZnBfdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvZ2ZwX3R5cGVzLmhcbmluZGV4IDU0Y2EwYzg4YmFiNmU4Li4xZjgyYTk0OTFkMzU3ZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZ2ZwX3R5cGVzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZ2ZwX3R5cGVzLmhcbkBAIC0zMyw3ICYjNDM7MzMsNyBAQCBlbnVtIHtcbiBcdF9fX0dGUF9JT19CSVQsXG4gXHRfX19HRlBfRlNfQklULFxuIFx0X19fR0ZQX1pFUk9fQklULFxuLVx0X19fR0ZQX1VOVVNFRF9CSVQsXHQvKiAweDIwMHUgdW51c2VkICovXG4mIzQzO1x0X19fR0ZQX1JFU0VSVkVEX1RIUF9CSVQsXG4gXHRfX19HRlBfRElSRUNUX1JFQ0xBSU1fQklULFxuIFx0X19fR0ZQX0tTV0FQRF9SRUNMQUlNX0JJVCxcbiBcdF9fX0dGUF9XUklURV9CSVQsXG5AQCAtNjksNyAmIzQzOzY5LDcgQEAgZW51bSB7XG4gI2RlZmluZSBfX19HRlBfSU9cdFx0QklUKF9fX0dGUF9JT19CSVQpXG4gI2RlZmluZSBfX19HRlBfRlNcdFx0QklUKF9fX0dGUF9GU19CSVQpXG4gI2RlZmluZSBfX19HRlBfWkVST1x0XHRCSVQoX19fR0ZQX1pFUk9fQklUKVxuLS8qIDB4MjAwdSB1bnVzZWQgKi9cbiYjNDM7I2RlZmluZSBfX19HRlBfUkVTRVJWRURfVEhQXHRCSVQoX19fR0ZQX1JFU0VSVkVEX1RIUF9CSVQpXG4gI2RlZmluZSBfX19HRlBfRElSRUNUX1JFQ0xBSU1cdEJJVChfX19HRlBfRElSRUNUX1JFQ0xBSU1fQklUKVxuICNkZWZpbmUgX19fR0ZQX0tTV0FQRF9SRUNMQUlNXHRCSVQoX19fR0ZQX0tTV0FQRF9SRUNMQUlNX0JJVClcbiAjZGVmaW5lIF9fX0dGUF9XUklURVx0XHRCSVQoX19fR0ZQX1dSSVRFX0JJVClcbkBAIC0xNDEsNiAmIzQzOzE0MSw5IEBAIGVudW0ge1xuICAqICVfX0dGUF9OT19PQkpfRVhUIGNhdXNlcyBzbGFiIGFsbG9jYXRpb24gdG8gaGF2ZSBubyBvYmplY3QgZXh0ZW5zaW9uLlxuICAqIG1hcmtfb2JqX2NvZGV0YWdfZW1wdHkoKSBzaG91bGQgYmUgY2FsbGVkIHVwb24gZnJlZWluZyBmb3Igb2JqZWN0cyBhbGxvY2F0ZWRcbiAgKiB3aXRoIHRoaXMgZmxhZyB0byBpbmRpY2F0ZSB0aGF0IHRoZWlyIE5VTEwgdGFncyBhcmUgZXhwZWN0ZWQgYW5kIG5vcm1hbC5cbiYjNDM7ICpcbiYjNDM7ICogJV9fR0ZQX1JFU0VSVkVEX1RIUCBpcyBhbiBpbnRlcm5hbCBmbGFnIGZvciByZXNlcnZlZCBUSFAgZmF1bHRzLiBJdCByZXN0cmljdHNcbiYjNDM7ICp0aGUgYWxsb2NhdGlvbiB0byAlTUlHUkFURV9SRVNFUlZFRF9USFAgcGFnZWJsb2Nrcy5cbiAgKi9cbiAjZGVmaW5lIF9fR0ZQX1JFQ0xBSU1BQkxFICgoX19mb3JjZSBnZnBfdClfX19HRlBfUkVDTEFJTUFCTEUpXG4gI2RlZmluZSBfX0dGUF9XUklURVx0KChfX2ZvcmNlIGdmcF90KV9fX0dGUF9XUklURSlcbkBAIC0xNDgsNiAmIzQzOzE1MSw3IEBAIGVudW0ge1xuICNkZWZpbmUgX19HRlBfVEhJU05PREVcdCgoX19mb3JjZSBnZnBfdClfX19HRlBfVEhJU05PREUpXG4gI2RlZmluZSBfX0dGUF9BQ0NPVU5UXHQoKF9fZm9yY2UgZ2ZwX3QpX19fR0ZQX0FDQ09VTlQpXG4gI2RlZmluZSBfX0dGUF9OT19PQkpfRVhUICAgKChfX2ZvcmNlIGdmcF90KV9fX0dGUF9OT19PQkpfRVhUKVxuJiM0MzsjZGVmaW5lIF9fR0ZQX1JFU0VSVkVEX1RIUCAoKF9fZm9yY2UgZ2ZwX3QpX19fR0ZQX1JFU0VSVkVEX1RIUClcbiBcbiAvKipcbiAgKiBET0M6IFdhdGVybWFyayBtb2RpZmllcnNcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaCBiL2luY2x1ZGUvbGludXgvaHVnZV9tbS5oXG5pbmRleCBhZDIwZjdmOGMxNzk0NC4uNGZlOTY1MWNkODZiNWUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9odWdlX21tLmhcbkBAIC0zMzAsNiAmIzQzOzMzMCw4IEBAIHVuc2lnbmVkIGxvbmcgdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFxuIFx0XHRpZiAodm1fZmxhZ3MgXHUwMDI2IFZNX0hVR0VQQUdFKVxuIFx0XHRcdG1hc2sgfD0gUkVBRF9PTkNFKGh1Z2VfYW5vbl9vcmRlcnNfbWFkdmlzZSk7XG4mIzQzO1x0XHRpZiAodm1fZmxhZ3MgXHUwMDI2IFZNX1JFU0VSVkVEX1RIUClcbiYjNDM7XHRcdFx0bWFzayB8PSBCSVQoUE1EX09SREVSKTtcbiBcdFx0aWYgKGh1Z2VwYWdlX2dsb2JhbF9hbHdheXMoKSB8fFxuIFx0XHQgICAgKCh2bV9mbGFncyBcdTAwMjYgVk1fSFVHRVBBR0UpIFx1MDAyNlx1MDAyNiBodWdlcGFnZV9nbG9iYWxfZW5hYmxlZCgpKSlcbiBcdFx0XHRtYXNrIHw9IFJFQURfT05DRShodWdlX2Fub25fb3JkZXJzX2luaGVyaXQpO1xuQEAgLTM3MSw3ICYjNDM7MzczLDcgQEAgc3RhdGljIGlubGluZSBib29sIHZtYV90aHBfZGlzYWJsZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHQgKiBBcmUgVEhQcyBkaXNhYmxlZCBvbmx5IGZvciBWTUFzIHdoZXJlIHdlIGRpZG4mIzM5O3QgZ2V0IGFuIGV4cGxpY2l0XG4gXHQgKiBhZHZpc2UgdG8gdXNlIHRoZW0/XG4gXHQgKi9cbi1cdGlmICh2bV9mbGFncyBcdTAwMjYgVk1fSFVHRVBBR0UpXG4mIzQzO1x0aWYgKHZtX2ZsYWdzIFx1MDAyNiAoVk1fSFVHRVBBR0UgfCBWTV9SRVNFUlZFRF9USFApKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHQvKlxuIFx0ICogRm9yY2luZyBhIGNvbGxhcHNlIChlLmcuLCBtYWR2X2NvbGxhcHNlKSwgaXMgYSBjbGVhciBhZHZpY2UgdG9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmhcbmluZGV4IDQ4NWRmOWMyZGJkZGIzLi4yNzhjZjRiZmQ0ZWM1YiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW0uaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbS5oXG5AQCAtMzUzLDYgJiM0MzszNTMsNyBAQCBlbnVtIHtcbiAjZW5kaWZcbiBcdERFQ0xBUkVfVk1BX0JJVChVRkZEX01JTk9SLCA0MSksXG4gXHRERUNMQVJFX1ZNQV9CSVQoU0VBTEVELCA0MiksXG4mIzQzO1x0REVDTEFSRV9WTUFfQklUKFJFU0VSVkVEX1RIUCwgNDMpLFxuIFx0LyogRmxhZ3MgdGhhdCByZXVzZSBmbGFncyBhYm92ZS4gKi9cbiBcdERFQ0xBUkVfVk1BX0JJVF9BTElBUyhQS0VZX0JJVDAsIEhJR0hfQVJDSF8wKSxcbiBcdERFQ0xBUkVfVk1BX0JJVF9BTElBUyhQS0VZX0JJVDEsIEhJR0hfQVJDSF8xKSxcbkBAIC01MjYsNiAmIzQzOzUyNywxMiBAQCBlbnVtIHtcbiAjZGVmaW5lIFZNQV9EUk9QUEFCTEVcdFx0RU1QVFlfVk1BX0ZMQUdTXG4gI2VuZGlmXG4gXG4mIzQzOyNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcbiYjNDM7I2RlZmluZSBWTV9SRVNFUlZFRF9USFBcdFx0SU5JVF9WTV9GTEFHKFJFU0VSVkVEX1RIUClcbiYjNDM7I2Vsc2VcbiYjNDM7I2RlZmluZSBWTV9SRVNFUlZFRF9USFBcdFx0Vk1fTk9ORVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4gLyogQml0cyBzZXQgaW4gdGhlIFZNQSB1bnRpbCB0aGUgc3RhY2sgaXMgaW4gaXRzIGZpbmFsIGxvY2F0aW9uICovXG4gI2RlZmluZSBWTV9TVEFDS19JTkNPTVBMRVRFX1NFVFVQIChWTV9SQU5EX1JFQUQgfCBWTV9TRVFfUkVBRCB8IFZNX1NUQUNLX0VBUkxZKVxuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG5pbmRleCBjYTI3MTIxODcxNDc1Yy4uNDQxOGQwYzlhY2NkYzggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG5AQCAtMTMzLDEwICYjNDM7MTMzLDkgQEAgZW51bSBtaWdyYXRldHlwZSB7XG4gXHQgKiBfX2ZyZWVfcGFnZWJsb2NrX2NtYSgpIGZ1bmN0aW9uLlxuIFx0ICovXG4gXHRNSUdSQVRFX0NNQSxcbi1cdF9fTUlHUkFURV9UWVBFX0VORCA9IE1JR1JBVEVfQ01BLFxuLSNlbHNlXG4tXHRfX01JR1JBVEVfVFlQRV9FTkQgPSBNSUdSQVRFX0hJR0hBVE9NSUMsXG4gI2VuZGlmXG4mIzQzO1x0TUlHUkFURV9SRVNFUlZFRF9USFAsXG4mIzQzO1x0X19NSUdSQVRFX1RZUEVfRU5EID0gTUlHUkFURV9SRVNFUlZFRF9USFAsXG4gI2lmZGVmIENPTkZJR19NRU1PUllfSVNPTEFUSU9OXG4gXHRNSUdSQVRFX0lTT0xBVEUsXHQvKiBjYW4mIzM5O3QgYWxsb2NhdGUgZnJvbSBoZXJlICovXG4gI2VuZGlmXG5AQCAtMTYxLDYgJiM0MzsxNjAsOSBAQCBleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pZ3JhdGV0eXBlX25hbWVzW01JR1JBVEVfVFlQRVNdO1xuICMgIGRlZmluZSBpc19taWdyYXRlX2NtYV9mb2xpbyhmb2xpbywgcGZuKSBmYWxzZVxuICNlbmRpZlxuIFxuJiM0MzsjZGVmaW5lIGlzX21pZ3JhdGVfcmVzZXJ2ZWRfdGhwKG1pZ3JhdGV0eXBlKSBcXFxuJiM0MztcdHVubGlrZWx5KChtaWdyYXRldHlwZSkgPT0gTUlHUkFURV9SRVNFUlZFRF9USFApXG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgYm9vbCBpc19taWdyYXRlX21vdmFibGUoaW50IG10KVxuIHtcbiBcdHJldHVybiBpc19taWdyYXRlX2NtYShtdCkgfHwgbXQgPT0gTUlHUkFURV9NT1ZBQkxFO1xuQEAgLTk3NSw2ICYjNDM7OTc3LDkgQEAgc3RydWN0IHpvbmUge1xuIFx0dW5zaWduZWQgbG9uZyBucl9yZXNlcnZlZF9oaWdoYXRvbWljO1xuIFx0dW5zaWduZWQgbG9uZyBucl9mcmVlX2hpZ2hhdG9taWM7XG4gXG4mIzQzO1x0dW5zaWduZWQgbG9uZyBucl9yZXNlcnZlZF90aHA7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBucl9mcmVlX3Jlc2VydmVkX3RocDtcbiYjNDM7XG4gXHQvKlxuIFx0ICogV2UgZG9uJiMzOTt0IGtub3cgaWYgdGhlIG1lbW9yeSB0aGF0IHdlJiMzOTtyZSBnb2luZyB0byBhbGxvY2F0ZSB3aWxsIGJlXG4gXHQgKiBmcmVlYWJsZSBvci9hbmQgaXQgd2lsbCBiZSByZWxlYXNlZCBldmVudHVhbGx5LCBzbyB0byBhdm9pZCB0b3RhbGx5XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvbW1mbGFncy5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvbW1mbGFncy5oXG5pbmRleCBhNmU1YTQ0YzliNDI5OS4uM2RiNDBlYmQ3MDYwYmQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9tbWZsYWdzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL21tZmxhZ3MuaFxuQEAgLTI0LDYgJiM0MzsyNCw3IEBAXG4gXHRUUkFDRV9HRlBfRU0oSU8pXHRcdFx0XFxcbiBcdFRSQUNFX0dGUF9FTShGUylcdFx0XHRcXFxuIFx0VFJBQ0VfR0ZQX0VNKFpFUk8pXHRcdFx0XFxcbiYjNDM7XHRUUkFDRV9HRlBfRU0oUkVTRVJWRURfVEhQKVx0XHRcXFxuIFx0VFJBQ0VfR0ZQX0VNKERJUkVDVF9SRUNMQUlNKVx0XHRcXFxuIFx0VFJBQ0VfR0ZQX0VNKEtTV0FQRF9SRUNMQUlNKVx0XHRcXFxuIFx0VFJBQ0VfR0ZQX0VNKFdSSVRFKVx0XHRcdFxcXG5AQCAtNzIsOCAmIzQzOzczLDcgQEBcbiBcbiBUUkFDRV9HRlBfRkxBR1NcbiBcbi0vKiBKdXN0IGluIGNhc2UgdGhlc2UgYXJlIGV2ZXIgdXNlZCAqL1xuLVRSQUNFX0RFRklORV9FTlVNKF9fX0dGUF9VTlVTRURfQklUKTtcbiYjNDM7LyogSnVzdCBpbiBjYXNlIHRoaXMgaXMgZXZlciB1c2VkICovXG4gVFJBQ0VfREVGSU5FX0VOVU0oX19fR0ZQX0xBU1RfQklUKTtcbiBcbiAjZGVmaW5lIGdmcGZsYWdfc3RyaW5nKGZsYWcpIHsoX19mb3JjZSB1bnNpZ25lZCBsb25nKWZsYWcsICNmbGFnfVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9tbWFuLWNvbW1vbi5oIGIvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL21tYW4tY29tbW9uLmhcbmluZGV4IGVmMWMyN2ZhM2M1NzBmLi5iM2QxNDQ4OTM1ZWFkMSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9tbWFuLWNvbW1vbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvbW1hbi1jb21tb24uaFxuQEAgLTc5LDYgJiM0Mzs3OSw4IEBAXG4gXG4gI2RlZmluZSBNQURWX0NPTExBUFNFXHQyNVx0XHQvKiBTeW5jaHJvbm91cyBodWdlcGFnZSBjb2xsYXBzZSAqL1xuIFxuJiM0MzsjZGVmaW5lIE1BRFZfUkVTRVJWRURfVEhQIDI2XHRcdC8qIFVzZSByZXNlcnZlZCB0cmFuc3BhcmVudCBodWdlcGFnZXMgKi9cbiYjNDM7XG4gI2RlZmluZSBNQURWX0dVQVJEX0lOU1RBTEwgMTAyXHRcdC8qIGZhdGFsIHNpZ25hbCBvbiBhY2Nlc3MgdG8gcmFuZ2UgKi9cbiAjZGVmaW5lIE1BRFZfR1VBUkRfUkVNT1ZFIDEwM1x0XHQvKiB1bmd1YXJkIHJhbmdlICovXG4gXG5kaWZmIC0tZ2l0IGEvbW0vTWFrZWZpbGUgYi9tbS9NYWtlZmlsZVxuaW5kZXggZWZmOWY5ZTdlMDYxYzEuLmZkNzRhNzM5MmUzNDY3IDEwMDY0NFxuLS0tIGEvbW0vTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL21tL01ha2VmaWxlXG5AQCAtOTgsNyAmIzQzOzk4LDcgQEAgb2JqLSQoQ09ORklHX01FTVRFU1QpXHRcdCYjNDM7PSBtZW10ZXN0Lm9cbiBvYmotJChDT05GSUdfTUlHUkFUSU9OKSAmIzQzOz0gbWlncmF0ZS5vXG4gb2JqLSQoQ09ORklHX05VTUEpICYjNDM7PSBtZW1vcnktdGllcnMub1xuIG9iai0kKENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OKSAmIzQzOz0gbWlncmF0ZV9kZXZpY2Uub1xuLW9iai0kKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgJiM0Mzs9IGh1Z2VfbWVtb3J5Lm8ga2h1Z2VwYWdlZC5vXG4mIzQzO29iai0kKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgJiM0Mzs9IGh1Z2VfbWVtb3J5Lm8ga2h1Z2VwYWdlZC5vIHJlc2VydmVkX3RocC5vXG4gb2JqLSQoQ09ORklHX1BBR0VfQ09VTlRFUikgJiM0Mzs9IHBhZ2VfY291bnRlci5vXG4gb2JqLSQoQ09ORklHX0xJVkVVUERBVEVfTUVNRkQpICYjNDM7PSBtZW1mZF9sdW8ub1xuIG9iai0kKENPTkZJR19NRU1DR19WMSkgJiM0Mzs9IG1lbWNvbnRyb2wtdjEub1xuZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jXG5pbmRleCAyYmNjYjBhNTNhMGE2MC4uNjZkODVhMmZhODU1ZjMgMTAwNjQ0XG4tLS0gYS9tbS9odWdlX21lbW9yeS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdlX21lbW9yeS5jXG5AQCAtMTI2Nyw2ICYjNDM7MTI2Nyw5IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKnZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdGNvbnN0IGludCBvcmRlciA9IEhQQUdFX1BNRF9PUkRFUjtcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gXG4mIzQzO1x0aWYgKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fUkVTRVJWRURfVEhQKVxuJiM0MztcdFx0Z2ZwIHw9IF9fR0ZQX1JFU0VSVkVEX1RIUDtcbiYjNDM7XG4gXHRmb2xpbyA9IHZtYV9hbGxvY19mb2xpbyhnZnAsIG9yZGVyLCB2bWEsIGFkZHIgXHUwMDI2IEhQQUdFX1BNRF9NQVNLKTtcbiBcbiBcdGlmICh1bmxpa2VseSghZm9saW8pKSB7XG5AQCAtMTM0NCw4ICYjNDM7MTM0NywxMSBAQCBzdGF0aWMgdm1fZmF1bHRfdCBfX2RvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuIFx0dm1fZmF1bHRfdCByZXQgPSAwO1xuIFxuIFx0Zm9saW8gPSB2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWQodm1hLCB2bWYtXHUwMDNlYWRkcmVzcyk7XG4tXHRpZiAodW5saWtlbHkoIWZvbGlvKSlcbiYjNDM7XHRpZiAodW5saWtlbHkoIWZvbGlvKSkge1xuJiM0MztcdFx0aWYgKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fUkVTRVJWRURfVEhQKVxuJiM0MztcdFx0XHRyZXR1cm4gVk1fRkFVTFRfT09NO1xuIFx0XHRyZXR1cm4gVk1fRkFVTFRfRkFMTEJBQ0s7XG4mIzQzO1x0fVxuIFxuIFx0cGd0YWJsZSA9IHB0ZV9hbGxvY19vbmUodm1hLVx1MDAzZXZtX21tKTtcbiBcdGlmICh1bmxpa2VseSghcGd0YWJsZSkpIHtcbkBAIC0xNDgwLDE1ICYjNDM7MTQ4NiwxNyBAQCB2bV9mYXVsdF90IGRvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuIFx0dm1fZmF1bHRfdCByZXQ7XG4gXG4gXHRpZiAoIXRocF92bWFfc3VpdGFibGVfb3JkZXIodm1hLCBoYWRkciwgUE1EX09SREVSKSlcbi1cdFx0cmV0dXJuIFZNX0ZBVUxUX0ZBTExCQUNLO1xuJiM0MztcdFx0cmV0dXJuICh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1JFU0VSVkVEX1RIUCkgPyBWTV9GQVVMVF9PT00gOlxuJiM0MztcdFx0XHRcdFx0XHRcdCAgIFZNX0ZBVUxUX0ZBTExCQUNLO1xuIFx0cmV0ID0gdm1mX2Fub25fcHJlcGFyZSh2bWYpO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcdGtodWdlcGFnZWRfZW50ZXJfdm1hKHZtYSwgdm1hLVx1MDAzZXZtX2ZsYWdzKTtcbiBcbi1cdGlmICghKHZtZi1cdTAwM2VmbGFncyBcdTAwMjYgRkFVTFRfRkxBR19XUklURSkgXHUwMDI2XHUwMDI2XG4tXHRcdFx0IW1tX2ZvcmJpZHNfemVyb3BhZ2Uodm1hLVx1MDAzZXZtX21tKSBcdTAwMjZcdTAwMjZcbi1cdFx0XHR0cmFuc3BhcmVudF9odWdlcGFnZV91c2VfemVyb19wYWdlKCkpIHtcbiYjNDM7XHRpZiAoISh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1JFU0VSVkVEX1RIUCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICEodm1mLVx1MDAzZWZsYWdzIFx1MDAyNiBGQVVMVF9GTEFHX1dSSVRFKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIW1tX2ZvcmJpZHNfemVyb3BhZ2Uodm1hLVx1MDAzZXZtX21tKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgdHJhbnNwYXJlbnRfaHVnZXBhZ2VfdXNlX3plcm9fcGFnZSgpKSB7XG4gXHRcdHBndGFibGVfdCBwZ3RhYmxlO1xuIFx0XHRzdHJ1Y3QgZm9saW8gKnplcm9fZm9saW87XG4gXHRcdHZtX2ZhdWx0X3QgcmV0O1xuZGlmZiAtLWdpdCBhL21tL2ludGVybmFsLmggYi9tbS9pbnRlcm5hbC5oXG5pbmRleCAxODFlNzlmMWQ2YTIwNy4uNGIyYTEzZDM1Mzc3MjEgMTAwNjQ0XG4tLS0gYS9tbS9pbnRlcm5hbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9pbnRlcm5hbC5oXG5AQCAtMTQ3Nyw2ICYjNDM7MTQ3Nyw3IEBAIHVuc2lnbmVkIGludCByZWNsYWltX2NsZWFuX3BhZ2VzX2Zyb21fbGlzdChzdHJ1Y3Qgem9uZSAqem9uZSxcbiAjZGVmaW5lIEFMTE9DX0hJR0hBVE9NSUNcdDB4MjAwIC8qIEFsbG93cyBhY2Nlc3MgdG8gTUlHUkFURV9ISUdIQVRPTUlDICovXG4gI2RlZmluZSBBTExPQ19UUllMT0NLXHRcdDB4NDAwIC8qIE9ubHkgdXNlIHNwaW5fdHJ5bG9jayBpbiBhbGxvY2F0aW9uIHBhdGggKi9cbiAjZGVmaW5lIEFMTE9DX0tTV0FQRFx0XHQweDgwMCAvKiBhbGxvdyB3YWtpbmcgb2Yga3N3YXBkLCBfX0dGUF9LU1dBUERfUkVDTEFJTSBzZXQgKi9cbiYjNDM7I2RlZmluZSBBTExPQ19SRVNFUlZFRF9USFBcdDB4MTAwMCAvKiBBbGxvd3MgYWNjZXNzIHRvIHJlc2VydmVkIFRIUCBwYWdlYmxvY2tzICovXG4gXG4gLyogRmxhZ3MgdGhhdCBhbGxvdyBhbGxvY2F0aW9ucyBiZWxvdyB0aGUgbWluIHdhdGVybWFyay4gKi9cbiAjZGVmaW5lIEFMTE9DX1JFU0VSVkVTIChBTExPQ19OT05fQkxPQ0t8QUxMT0NfTUlOX1JFU0VSVkV8QUxMT0NfSElHSEFUT01JQ3xBTExPQ19PT00pXG5AQCAtMTk1MSw0ICYjNDM7MTk1Miw5IEBAIHN0YXRpYyBpbmxpbmUgaW50IGdldF9zeXNjdGxfbWF4X21hcF9jb3VudCh2b2lkKVxuIGJvb2wgbWF5X2V4cGFuZF92bShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncyxcbiBcdFx0ICAgdW5zaWduZWQgbG9uZyBucGFnZXMpO1xuIFxuJiM0Mzt1bnNpZ25lZCBsb25nIHJlc2VydmVkX3RocF9wYWdlYmxvY2tzKHVuc2lnbmVkIGxvbmcgbnJfaHBhZ2VzKTtcbiYjNDM7dW5zaWduZWQgbG9uZyByZXNlcnZlZF90aHBfaHBhZ2VfbnIodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpO1xuJiM0MztpbnQgcmVzZXJ2ZWRfdGhwX2NoYXJnZSh1bnNpZ25lZCBsb25nIG5yX2hwYWdlcyk7XG4mIzQzO3ZvaWQgcmVzZXJ2ZWRfdGhwX3VuY2hhcmdlKHVuc2lnbmVkIGxvbmcgbnJfaHBhZ2VzKTtcbiYjNDM7XG4gI2VuZGlmXHQvKiBfX01NX0lOVEVSTkFMX0ggKi9cbmRpZmYgLS1naXQgYS9tbS9raHVnZXBhZ2VkLmMgYi9tbS9raHVnZXBhZ2VkLmNcbmluZGV4IDYxN2JjYTc2ZGI0OWI2Li44MDI5M2U4YzFlNGU3NiAxMDA2NDRcbi0tLSBhL21tL2todWdlcGFnZWQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0va2h1Z2VwYWdlZC5jXG5AQCAtNDUxLDYgJiM0Mzs0NTEsNyBAQCBpbnQgaHVnZXBhZ2VfbWFkdmlzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdHN3aXRjaCAoYWR2aWNlKSB7XG4gXHRjYXNlIE1BRFZfSFVHRVBBR0U6XG4gXHRcdCp2bV9mbGFncyBcdTAwMjY9IH5WTV9OT0hVR0VQQUdFO1xuJiM0MztcdFx0KnZtX2ZsYWdzIFx1MDAyNj0gflZNX1JFU0VSVkVEX1RIUDtcbiBcdFx0KnZtX2ZsYWdzIHw9IFZNX0hVR0VQQUdFO1xuIFx0XHQvKlxuIFx0XHQgKiBJZiB0aGUgdm1hIGJlY29tZSBnb29kIGZvciBraHVnZXBhZ2VkIHRvIHNjYW4sXG5AQCAtNDYxLDYgJiM0Mzs0NjIsNyBAQCBpbnQgaHVnZXBhZ2VfbWFkdmlzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIE1BRFZfTk9IVUdFUEFHRTpcbiBcdFx0KnZtX2ZsYWdzIFx1MDAyNj0gflZNX0hVR0VQQUdFO1xuJiM0MztcdFx0KnZtX2ZsYWdzIFx1MDAyNj0gflZNX1JFU0VSVkVEX1RIUDtcbiBcdFx0KnZtX2ZsYWdzIHw9IFZNX05PSFVHRVBBR0U7XG4gXHRcdC8qXG4gXHRcdCAqIFNldHRpbmcgVk1fTk9IVUdFUEFHRSB3aWxsIHByZXZlbnQga2h1Z2VwYWdlZCBmcm9tIHNjYW5uaW5nXG5AQCAtNDY4LDYgJiM0Mzs0NzAsMTIgQEAgaW50IGh1Z2VwYWdlX21hZHZpc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdCAqIGl0IGdvdCByZWdpc3RlcmVkIGJlZm9yZSBWTV9OT0hVR0VQQUdFIHdhcyBzZXQuXG4gXHRcdCAqL1xuIFx0XHRicmVhaztcbiYjNDM7XHRjYXNlIE1BRFZfUkVTRVJWRURfVEhQOlxuJiM0MztcdFx0KnZtX2ZsYWdzIFx1MDAyNj0gfihWTV9IVUdFUEFHRSB8IFZNX05PSFVHRVBBR0UpO1xuJiM0MztcdFx0KnZtX2ZsYWdzIHw9IFZNX1JFU0VSVkVEX1RIUDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbiBcdHJldHVybiAwO1xuZGlmZiAtLWdpdCBhL21tL21hZHZpc2UuYyBiL21tL21hZHZpc2UuY1xuaW5kZXggY2Q5YmIwNzcwNzJjY2IuLmRkOTExMDVkYjY4Yzc1IDEwMDY0NFxuLS0tIGEvbW0vbWFkdmlzZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tYWR2aXNlLmNcbkBAIC0xMyw2ICYjNDM7MTMsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhZ2UtaXNvbGF0aW9uLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdlX2lkbGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VzZXJmYXVsdGZkX2suaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9odWdlX21tLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9odWdldGxiLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9mYWxsb2MuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZhZHZpc2UuaFx1MDAzZVxuQEAgLTEzMzEsNiAmIzQzOzEzMzIsNjUgQEAgc3RhdGljIGJvb2wgY2FuX21hZHZpc2VfbW9kaWZ5KHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxuIH1cbiAjZW5kaWZcbiBcbiYjNDM7c3RhdGljIGJvb2wgcmVzZXJ2ZWRfdGhwX21hZHZpc2VfYWxpZ25lZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiYjNDM7XHRcdFx0XHRcdCBzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvcl9yYW5nZSAqcmFuZ2UpXG4mIzQzO3tcbiYjNDM7XHRpZiAoISh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1JFU0VSVkVEX1RIUCkpXG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIElTX0FMSUdORUQocmFuZ2UtXHUwMDNlc3RhcnQsIEhQQUdFX1BNRF9TSVpFKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgICAgSVNfQUxJR05FRChyYW5nZS1cdTAwM2VlbmQsIEhQQUdFX1BNRF9TSVpFKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBtYWR2aXNlX2h1Z2VwYWdlX3BvbGljeShzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcixcbiYjNDM7XHRcdFx0XHQgICB2bV9mbGFnc190ICpuZXdfZmxhZ3MsXG4mIzQzO1x0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyAqcmVzZXJ2ZWRfaHBhZ2VzLFxuJiM0MztcdFx0XHRcdCAgIGJvb2wgKmNoYXJnZV9yZXNlcnZlZF90aHAsXG4mIzQzO1x0XHRcdFx0ICAgYm9vbCAqdW5jaGFyZ2VfcmVzZXJ2ZWRfdGhwKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSBtYWR2X2JlaGF2aW9yLVx1MDAzZXZtYTtcbiYjNDM7XHRzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvcl9yYW5nZSAqcmFuZ2UgPSBcdTAwMjZtYWR2X2JlaGF2aW9yLVx1MDAzZXJhbmdlO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgaHBhZ2VzO1xuJiM0MztcdGludCBiZWhhdmlvciA9IG1hZHZfYmVoYXZpb3ItXHUwMDNlYmVoYXZpb3I7XG4mIzQzO1x0aW50IGVycm9yO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKGJlaGF2aW9yKSB7XG4mIzQzO1x0Y2FzZSBNQURWX0hVR0VQQUdFOlxuJiM0MztcdGNhc2UgTUFEVl9OT0hVR0VQQUdFOlxuJiM0MztcdFx0ZXJyb3IgPSBodWdlcGFnZV9tYWR2aXNlKHZtYSwgbmV3X2ZsYWdzLCBiZWhhdmlvcik7XG4mIzQzO1x0XHRpZiAoZXJyb3IpXG4mIzQzO1x0XHRcdHJldHVybiBlcnJvcjtcbiYjNDM7XHRcdCp1bmNoYXJnZV9yZXNlcnZlZF90aHAgPSAodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9SRVNFUlZFRF9USFApIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHRcdFx0ICEoKm5ld19mbGFncyBcdTAwMjYgVk1fUkVTRVJWRURfVEhQKTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdGNhc2UgTUFEVl9SRVNFUlZFRF9USFA6XG4mIzQzO1x0XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHXzY0QklUKSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHRpZiAoIXZtYV9pc19hbm9ueW1vdXModm1hKSB8fCAoKm5ld19mbGFncyBcdTAwMjYgVk1fU0hBUkVEKSB8fFxuJiM0MztcdFx0ICAgICgqbmV3X2ZsYWdzIFx1MDAyNiBWTV9TUEVDSUFMKSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHRpZiAoIUlTX0FMSUdORUQocmFuZ2UtXHUwMDNlc3RhcnQsIEhQQUdFX1BNRF9TSVpFKSB8fFxuJiM0MztcdFx0ICAgICFJU19BTElHTkVEKHJhbmdlLVx1MDAzZWVuZCwgSFBBR0VfUE1EX1NJWkUpKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0XHRlcnJvciA9IGh1Z2VwYWdlX21hZHZpc2Uodm1hLCBuZXdfZmxhZ3MsIGJlaGF2aW9yKTtcbiYjNDM7XHRcdGlmIChlcnJvcilcbiYjNDM7XHRcdFx0cmV0dXJuIGVycm9yO1xuJiM0MztcbiYjNDM7XHRcdGlmICghKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fUkVTRVJWRURfVEhQKSkge1xuJiM0MztcdFx0XHRocGFnZXMgPSByZXNlcnZlZF90aHBfaHBhZ2VfbnIocmFuZ2UtXHUwMDNlc3RhcnQsIHJhbmdlLVx1MDAzZWVuZCk7XG4mIzQzO1x0XHRcdGVycm9yID0gcmVzZXJ2ZWRfdGhwX2NoYXJnZShocGFnZXMpO1xuJiM0MztcdFx0XHRpZiAoZXJyb3IpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIGVycm9yO1xuJiM0MztcdFx0XHQqcmVzZXJ2ZWRfaHBhZ2VzID0gaHBhZ2VzO1xuJiM0MztcdFx0XHQqY2hhcmdlX3Jlc2VydmVkX3RocCA9IHRydWU7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogQXBwbHkgYW4gbWFkdmlzZSBiZWhhdmlvciB0byBhIHJlZ2lvbiBvZiBhIHZtYS4gIG1hZHZpc2VfdXBkYXRlX3ZtYVxuICAqIHdpbGwgaGFuZGxlIHNwbGl0dGluZyBhIHZtIGFyZWEgaW50byBzZXBhcmF0ZSBhcmVhcywgZWFjaCBhcmVhIHdpdGggaXRzIG93blxuQEAgLTEzNDIsNiAmIzQzOzE0MDIsOSBAQCBzdGF0aWMgaW50IG1hZHZpc2Vfdm1hX2JlaGF2aW9yKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSBtYWR2X2JlaGF2aW9yLVx1MDAzZXZtYTtcbiBcdHZtX2ZsYWdzX3QgbmV3X2ZsYWdzID0gdm1hLVx1MDAzZXZtX2ZsYWdzO1xuIFx0c3RydWN0IG1hZHZpc2VfYmVoYXZpb3JfcmFuZ2UgKnJhbmdlID0gXHUwMDI2bWFkdl9iZWhhdmlvci1cdTAwM2VyYW5nZTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHJlc2VydmVkX2hwYWdlcyA9IDA7XG4mIzQzO1x0Ym9vbCBjaGFyZ2VfcmVzZXJ2ZWRfdGhwID0gZmFsc2U7XG4mIzQzO1x0Ym9vbCB1bmNoYXJnZV9yZXNlcnZlZF90aHAgPSBmYWxzZTtcbiBcdGludCBlcnJvcjtcbiBcbiBcdGlmICh1bmxpa2VseSghY2FuX21hZHZpc2VfbW9kaWZ5KG1hZHZfYmVoYXZpb3IpKSlcbkBAIC0xMzUzLDE0ICYjNDM7MTQxNiwyMiBAQCBzdGF0aWMgaW50IG1hZHZpc2Vfdm1hX2JlaGF2aW9yKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxuIFx0Y2FzZSBNQURWX1dJTExORUVEOlxuIFx0XHRyZXR1cm4gbWFkdmlzZV93aWxsbmVlZChtYWR2X2JlaGF2aW9yKTtcbiBcdGNhc2UgTUFEVl9DT0xEOlxuJiM0MztcdFx0aWYgKCFyZXNlcnZlZF90aHBfbWFkdmlzZV9hbGlnbmVkKHZtYSwgcmFuZ2UpKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0cmV0dXJuIG1hZHZpc2VfY29sZChtYWR2X2JlaGF2aW9yKTtcbiBcdGNhc2UgTUFEVl9QQUdFT1VUOlxuJiM0MztcdFx0aWYgKCFyZXNlcnZlZF90aHBfbWFkdmlzZV9hbGlnbmVkKHZtYSwgcmFuZ2UpKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0cmV0dXJuIG1hZHZpc2VfcGFnZW91dChtYWR2X2JlaGF2aW9yKTtcbiBcdGNhc2UgTUFEVl9GUkVFOlxuIFx0Y2FzZSBNQURWX0RPTlRORUVEOlxuIFx0Y2FzZSBNQURWX0RPTlRORUVEX0xPQ0tFRDpcbiYjNDM7XHRcdGlmICghcmVzZXJ2ZWRfdGhwX21hZHZpc2VfYWxpZ25lZCh2bWEsIHJhbmdlKSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdHJldHVybiBtYWR2aXNlX2RvbnRuZWVkX2ZyZWUobWFkdl9iZWhhdmlvcik7XG4gXHRjYXNlIE1BRFZfQ09MTEFQU0U6XG4mIzQzO1x0XHRpZiAodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9SRVNFUlZFRF9USFApXG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHRyZXR1cm4gbWFkdmlzZV9jb2xsYXBzZSh2bWEsIHJhbmdlLVx1MDAzZXN0YXJ0LCByYW5nZS1cdTAwM2VlbmQsXG4gXHRcdFx0XHUwMDI2bWFkdl9iZWhhdmlvci1cdTAwM2Vsb2NrX2Ryb3BwZWQpO1xuIFx0Y2FzZSBNQURWX0dVQVJEX0lOU1RBTEw6XG5AQCAtMTQxNiw3ICYjNDM7MTQ4NywxMSBAQCBzdGF0aWMgaW50IG1hZHZpc2Vfdm1hX2JlaGF2aW9yKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxuIFx0XHRicmVhaztcbiBcdGNhc2UgTUFEVl9IVUdFUEFHRTpcbiBcdGNhc2UgTUFEVl9OT0hVR0VQQUdFOlxuLVx0XHRlcnJvciA9IGh1Z2VwYWdlX21hZHZpc2Uodm1hLCBcdTAwMjZuZXdfZmxhZ3MsIGJlaGF2aW9yKTtcbiYjNDM7XHRjYXNlIE1BRFZfUkVTRVJWRURfVEhQOlxuJiM0MztcdFx0ZXJyb3IgPSBtYWR2aXNlX2h1Z2VwYWdlX3BvbGljeShtYWR2X2JlaGF2aW9yLCBcdTAwMjZuZXdfZmxhZ3MsXG4mIzQzO1x0XHRcdFx0XHRcdFx1MDAyNnJlc2VydmVkX2hwYWdlcyxcbiYjNDM7XHRcdFx0XHRcdFx0XHUwMDI2Y2hhcmdlX3Jlc2VydmVkX3RocCxcbiYjNDM7XHRcdFx0XHRcdFx0XHUwMDI2dW5jaGFyZ2VfcmVzZXJ2ZWRfdGhwKTtcbiBcdFx0aWYgKGVycm9yKVxuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHRicmVhaztcbkBAIC0xNDMxLDYgJiM0MzsxNTA2LDExIEBAIHN0YXRpYyBpbnQgbWFkdmlzZV92bWFfYmVoYXZpb3Ioc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXG4gXHRWTV9XQVJOX09OX09OQ0UobWFkdl9iZWhhdmlvci1cdTAwM2Vsb2NrX21vZGUgIT0gTUFEVklTRV9NTUFQX1dSSVRFX0xPQ0spO1xuIFxuIFx0ZXJyb3IgPSBtYWR2aXNlX3VwZGF0ZV92bWEobmV3X2ZsYWdzLCBtYWR2X2JlaGF2aW9yKTtcbiYjNDM7XHRpZiAoZXJyb3IgXHUwMDI2XHUwMDI2IGNoYXJnZV9yZXNlcnZlZF90aHApXG4mIzQzO1x0XHRyZXNlcnZlZF90aHBfdW5jaGFyZ2UocmVzZXJ2ZWRfaHBhZ2VzKTtcbiYjNDM7XHRlbHNlIGlmICghZXJyb3IgXHUwMDI2XHUwMDI2IHVuY2hhcmdlX3Jlc2VydmVkX3RocClcbiYjNDM7XHRcdHJlc2VydmVkX3RocF91bmNoYXJnZShyZXNlcnZlZF90aHBfaHBhZ2VfbnIocmFuZ2UtXHUwMDNlc3RhcnQsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgIHJhbmdlLVx1MDAzZWVuZCkpO1xuIG91dDpcbiBcdC8qXG4gXHQgKiBtYWR2aXNlKCkgcmV0dXJucyBFQUdBSU4gaWYga2VybmVsIHJlc291cmNlcywgc3VjaCBhc1xuQEAgLTE1NDEsNiAmIzQzOzE2MjEsNyBAQCBtYWR2aXNlX2JlaGF2aW9yX3ZhbGlkKGludCBiZWhhdmlvcilcbiBcdGNhc2UgTUFEVl9IVUdFUEFHRTpcbiBcdGNhc2UgTUFEVl9OT0hVR0VQQUdFOlxuIFx0Y2FzZSBNQURWX0NPTExBUFNFOlxuJiM0MztcdGNhc2UgTUFEVl9SRVNFUlZFRF9USFA6XG4gI2VuZGlmXG4gXHRjYXNlIE1BRFZfRE9OVERVTVA6XG4gXHRjYXNlIE1BRFZfRE9EVU1QOlxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmNcbmluZGV4IGZmMzM4YzJhYmU5MjMxLi4yMjVmYzFhZTIyMzg2ZCAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnkuY1xuQEAgLTUyOTcsNiAmIzQzOzUyOTcsOSBAQCBzdGF0aWMgdm1fZmF1bHRfdCBkb19hbm9ueW1vdXNfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbiBcdGlmICh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1NIQVJFRClcbiBcdFx0cmV0dXJuIFZNX0ZBVUxUX1NJR0JVUztcbiBcbiYjNDM7XHRpZiAodW5saWtlbHkodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9SRVNFUlZFRF9USFApKVxuJiM0MztcdFx0cmV0dXJuIFZNX0ZBVUxUX09PTTtcbiYjNDM7XG4gXHQvKlxuIFx0ICogVXNlIHB0ZV9hbGxvYygpIGluc3RlYWQgb2YgcHRlX2FsbG9jX21hcCgpLCBzbyB0aGF0IE9PTSBjYW5cbiBcdCAqIGJlIGRpc3Rpbmd1aXNoZWQgZnJvbSBhIHRyYW5zaWVudCBmYWlsdXJlIG9mIHB0ZV9vZmZzZXRfbWFwKCkuXG5kaWZmIC0tZ2l0IGEvbW0vbW1hcC5jIGIvbW0vbW1hcC5jXG5pbmRleCAyMzExYWU3YzJmZjQ1Yy4uNDgxOGIxNGVjMGZmNmMgMTAwNjQ0XG4tLS0gYS9tbS9tbWFwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21tYXAuY1xuQEAgLTEyNTEsNiAmIzQzOzEyNTEsNyBAQCB1bnNpZ25lZCBsb25nIHRlYXJfZG93bl92bWFzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWksXG4gXHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGVuZClcbiB7XG4gXHR1bnNpZ25lZCBsb25nIG5yX2FjY291bnRlZCA9IDA7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBucl9yZXNlcnZlZF90aHAgPSAwO1xuIFx0aW50IGNvdW50ID0gMDtcbiBcbiBcdG1tYXBfYXNzZXJ0X3dyaXRlX2xvY2tlZChtbSk7XG5AQCAtMTI1OCw2ICYjNDM7MTI1OSwxMCBAQCB1bnNpZ25lZCBsb25nIHRlYXJfZG93bl92bWFzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWksXG4gXHRkbyB7XG4gXHRcdGlmICh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX0FDQ09VTlQpXG4gXHRcdFx0bnJfYWNjb3VudGVkICYjNDM7PSB2bWFfcGFnZXModm1hKTtcbiYjNDM7XHRcdGlmICh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1JFU0VSVkVEX1RIUClcbiYjNDM7XHRcdFx0bnJfcmVzZXJ2ZWRfdGhwICYjNDM7PVxuJiM0MztcdFx0XHRcdHJlc2VydmVkX3RocF9ocGFnZV9ucih2bWEtXHUwMDNldm1fc3RhcnQsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgIHZtYS1cdTAwM2V2bV9lbmQpO1xuIFx0XHR2bWFfbWFya19kZXRhY2hlZCh2bWEpO1xuIFx0XHRyZW1vdmVfdm1hKHZtYSk7XG4gXHRcdGNvdW50JiM0MzsmIzQzOztcbkBAIC0xMjY2LDYgJiM0MzsxMjcxLDcgQEAgdW5zaWduZWQgbG9uZyB0ZWFyX2Rvd25fdm1hcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHZtYV9pdGVyYXRvciAqdm1pLFxuIFx0fSB3aGlsZSAodm1hIFx1MDAyNlx1MDAyNiB2bWEtXHUwMDNldm1fZW5kIFx1MDAzYz0gZW5kKTtcbiBcbiBcdFZNX1dBUk5fT05fT05DRShjb3VudCAhPSBtbS1cdTAwM2VtYXBfY291bnQpO1xuJiM0MztcdHJlc2VydmVkX3RocF91bmNoYXJnZShucl9yZXNlcnZlZF90aHApO1xuIFx0cmV0dXJuIG5yX2FjY291bnRlZDtcbiB9XG4gXG5AQCAtMTczMyw2ICYjNDM7MTczOSw3IEBAIF9fbGF0ZW50X2VudHJvcHkgaW50IGR1cF9tbWFwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgbW1fc3RydWN0ICpvbGRtbSlcbiBcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqbXBudCwgKnRtcDtcbiBcdGludCByZXR2YWw7XG4gXHR1bnNpZ25lZCBsb25nIGNoYXJnZSA9IDA7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyByZXNlcnZlZF9jaGFyZ2UgPSAwO1xuIFx0TElTVF9IRUFEKHVmKTtcbiBcdFZNQV9JVEVSQVRPUih2bWksIG1tLCAwKTtcbiBcbkBAIC0xNzc1LDYgJiM0MzsxNzgyLDcgQEAgX19sYXRlbnRfZW50cm9weSBpbnQgZHVwX21tYXAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm9sZG1tKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXHRcdGNoYXJnZSA9IDA7XG4mIzQzO1x0XHRyZXNlcnZlZF9jaGFyZ2UgPSAwO1xuIFx0XHRpZiAobXBudC1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fQUNDT1VOVCkge1xuIFx0XHRcdHVuc2lnbmVkIGxvbmcgbGVuID0gdm1hX3BhZ2VzKG1wbnQpO1xuIFxuQEAgLTE3ODIsNiAmIzQzOzE3OTAsMTUgQEAgX19sYXRlbnRfZW50cm9weSBpbnQgZHVwX21tYXAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm9sZG1tKVxuIFx0XHRcdFx0Z290byBmYWlsX25vbWVtO1xuIFx0XHRcdGNoYXJnZSA9IGxlbjtcbiBcdFx0fVxuJiM0MztcdFx0aWYgKG1wbnQtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1JFU0VSVkVEX1RIUCkge1xuJiM0MztcdFx0XHR1bnNpZ25lZCBsb25nIGxlbjtcbiYjNDM7XG4mIzQzO1x0XHRcdGxlbiA9IHJlc2VydmVkX3RocF9ocGFnZV9ucihtcG50LVx1MDAzZXZtX3N0YXJ0LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgbXBudC1cdTAwM2V2bV9lbmQpO1xuJiM0MztcdFx0XHRpZiAocmVzZXJ2ZWRfdGhwX2NoYXJnZShsZW4pKVxuJiM0MztcdFx0XHRcdGdvdG8gZmFpbF9ub21lbTtcbiYjNDM7XHRcdFx0cmVzZXJ2ZWRfY2hhcmdlID0gbGVuO1xuJiM0MztcdFx0fVxuIFxuIFx0XHR0bXAgPSB2bV9hcmVhX2R1cChtcG50KTtcbiBcdFx0aWYgKCF0bXApXG5AQCAtMTkxNiw2ICYjNDM7MTkzMyw3IEBAIF9fbGF0ZW50X2VudHJvcHkgaW50IGR1cF9tbWFwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgbW1fc3RydWN0ICpvbGRtbSlcbiBcdHZtX2FyZWFfZnJlZSh0bXApO1xuIGZhaWxfbm9tZW06XG4gXHRyZXR2YWwgPSAtRU5PTUVNO1xuJiM0MztcdHJlc2VydmVkX3RocF91bmNoYXJnZShyZXNlcnZlZF9jaGFyZ2UpO1xuIFx0dm1fdW5hY2N0X21lbW9yeShjaGFyZ2UpO1xuIFx0Z290byBsb29wX291dDtcbiB9XG5kaWZmIC0tZ2l0IGEvbW0vbXJlbWFwLmMgYi9tbS9tcmVtYXAuY1xuaW5kZXggZTljOGIxZDA1ODMyYmUuLmFlMzdlMGIzY2U3ODhlIDEwMDY0NFxuLS0tIGEvbW0vbXJlbWFwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21yZW1hcC5jXG5AQCAtMjQsNiAmIzQzOzI0LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tbXVfbm90aWZpZXIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VhY2Nlc3MuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VzZXJmYXVsdGZkX2suaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9odWdlX21tLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1wb2xpY3kuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BnYWxsb2MuaFx1MDAzZVxuIFxuQEAgLTY5LDYgJiM0Mzs3MCw3IEBAIHN0cnVjdCB2bWFfcmVtYXBfc3RydWN0IHtcbiBcdGVudW0gbXJlbWFwX3R5cGUgcmVtYXBfdHlwZTtcdC8qIGV4cGFuZCwgc2hyaW5rLCBldGMuICovXG4gXHRib29sIG1tYXBfbG9ja2VkO1x0XHQvKiBJcyBtbSBjdXJyZW50bHkgd3JpdGUtbG9ja2VkPyAqL1xuIFx0dW5zaWduZWQgbG9uZyBjaGFyZ2VkO1x0XHQvKiBJZiBWTV9BQ0NPVU5ULCAjIHBhZ2VzIHRvIGFjY291bnQuICovXG4mIzQzO1x0dW5zaWduZWQgbG9uZyByZXNlcnZlZF90aHBfY2hhcmdlZDsgLyogSWYgVk1fUkVTRVJWRURfVEhQLCAjIGhwYWdlcy4gKi9cbiBcdGJvb2wgdm1pX25lZWRzX2ludmFsaWRhdGU7XHQvKiBJcyB0aGUgVk1BIGl0ZXJhdG9yIGludmFsaWRhdGVkPyAqL1xuIH07XG4gXG5AQCAtOTYyLDYgJiM0Mzs5NjQsOSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyB2cm1fc2V0X25ld19hZGRyKHN0cnVjdCB2bWFfcmVtYXBfc3RydWN0ICp2cm0pXG4gXHRcdFx0XHRtYXBfZmxhZ3MpO1xuIFx0aWYgKElTX0VSUl9WQUxVRShyZXMpKVxuIFx0XHRyZXR1cm4gcmVzO1xuJiM0MztcdGlmICgodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9SRVNFUlZFRF9USFApIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAhSVNfQUxJR05FRChyZXMsIEhQQUdFX1BNRF9TSVpFKSlcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuIFxuIFx0dnJtLVx1MDAzZW5ld19hZGRyID0gcmVzO1xuIFx0cmV0dXJuIDA7XG5AQCAtOTc3LDI0ICYjNDM7OTgyLDQ0IEBAIHN0YXRpYyBib29sIHZybV9jYWxjX2NoYXJnZShzdHJ1Y3Qgdm1hX3JlbWFwX3N0cnVjdCAqdnJtKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgY2hhcmdlZDtcbiBcbi1cdGlmICghKHZybS1cdTAwM2V2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX0FDQ09VTlQpKVxuLVx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHR2cm0tXHUwMDNlY2hhcmdlZCA9IDA7XG4mIzQzO1x0dnJtLVx1MDAzZXJlc2VydmVkX3RocF9jaGFyZ2VkID0gMDtcbiBcbi1cdC8qXG4tXHQgKiBJZiB3ZSBkb24mIzM5O3QgdW5tYXAgdGhlIG9sZCBtYXBwaW5nLCB0aGVuIHdlIGFjY291bnQgdGhlIGVudGlyZXR5IG9mXG4tXHQgKiB0aGUgbGVuZ3RoIG9mIHRoZSBuZXcgb25lLiBPdGhlcndpc2UgaXQmIzM5O3MganVzdCB0aGUgZGVsdGEgaW4gc2l6ZS5cbi1cdCAqL1xuLVx0aWYgKHZybS1cdTAwM2VmbGFncyBcdTAwMjYgTVJFTUFQX0RPTlRVTk1BUClcbi1cdFx0Y2hhcmdlZCA9IHZybS1cdTAwM2VuZXdfbGVuIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuLVx0ZWxzZVxuLVx0XHRjaGFyZ2VkID0gdnJtLVx1MDAzZWRlbHRhIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuJiM0MztcdGlmICh2cm0tXHUwMDNldm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9BQ0NPVU5UKSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogSWYgd2UgZG9uJiMzOTt0IHVubWFwIHRoZSBvbGQgbWFwcGluZywgdGhlbiB3ZSBhY2NvdW50IHRoZVxuJiM0MztcdFx0ICogZW50aXJldHkgb2YgdGhlIGxlbmd0aCBvZiB0aGUgbmV3IG9uZS4gT3RoZXJ3aXNlIGl0JiMzOTtzIGp1c3RcbiYjNDM7XHRcdCAqIHRoZSBkZWx0YSBpbiBzaXplLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAodnJtLVx1MDAzZWZsYWdzIFx1MDAyNiBNUkVNQVBfRE9OVFVOTUFQKVxuJiM0MztcdFx0XHRjaGFyZ2VkID0gdnJtLVx1MDAzZW5ld19sZW4gXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdGNoYXJnZWQgPSB2cm0tXHUwMDNlZGVsdGEgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4gXG4gXG4tXHQvKiBUaGlzIGFjY291bnRzICYjMzk7Y2hhcmdlZCYjMzk7IHBhZ2VzIG9mIG1lbW9yeS4gKi9cbi1cdGlmIChzZWN1cml0eV92bV9lbm91Z2hfbWVtb3J5X21tKGN1cnJlbnQtXHUwMDNlbW0sIGNoYXJnZWQpKVxuLVx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0XHQvKiBUaGlzIGFjY291bnRzICYjMzk7Y2hhcmdlZCYjMzk7IHBhZ2VzIG9mIG1lbW9yeS4gKi9cbiYjNDM7XHRcdGlmIChzZWN1cml0eV92bV9lbm91Z2hfbWVtb3J5X21tKGN1cnJlbnQtXHUwMDNlbW0sIGNoYXJnZWQpKVxuJiM0MztcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4tXHR2cm0tXHUwMDNlY2hhcmdlZCA9IGNoYXJnZWQ7XG4mIzQzO1x0XHR2cm0tXHUwMDNlY2hhcmdlZCA9IGNoYXJnZWQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAodnJtLVx1MDAzZXZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fUkVTRVJWRURfVEhQKSB7XG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIGhwYWdlcztcbiYjNDM7XG4mIzQzO1x0XHRpZiAodnJtLVx1MDAzZWZsYWdzIFx1MDAyNiBNUkVNQVBfRE9OVFVOTUFQKVxuJiM0MztcdFx0XHRocGFnZXMgPSByZXNlcnZlZF90aHBfaHBhZ2VfbnIoMCwgdnJtLVx1MDAzZW5ld19sZW4pO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRocGFnZXMgPSByZXNlcnZlZF90aHBfaHBhZ2VfbnIoMCwgdnJtLVx1MDAzZWRlbHRhKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAocmVzZXJ2ZWRfdGhwX2NoYXJnZShocGFnZXMpKSB7XG4mIzQzO1x0XHRcdHZtX3VuYWNjdF9tZW1vcnkodnJtLVx1MDAzZWNoYXJnZWQpO1xuJiM0MztcdFx0XHR2cm0tXHUwMDNlY2hhcmdlZCA9IDA7XG4mIzQzO1x0XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHR2cm0tXHUwMDNlcmVzZXJ2ZWRfdGhwX2NoYXJnZWQgPSBocGFnZXM7XG4mIzQzO1x0fVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuQEAgLTEwMDQsMTEgJiM0MzsxMDI5LDEwIEBAIHN0YXRpYyBib29sIHZybV9jYWxjX2NoYXJnZShzdHJ1Y3Qgdm1hX3JlbWFwX3N0cnVjdCAqdnJtKVxuICAqL1xuIHN0YXRpYyB2b2lkIHZybV91bmNoYXJnZShzdHJ1Y3Qgdm1hX3JlbWFwX3N0cnVjdCAqdnJtKVxuIHtcbi1cdGlmICghKHZybS1cdTAwM2V2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX0FDQ09VTlQpKVxuLVx0XHRyZXR1cm47XG4tXG4gXHR2bV91bmFjY3RfbWVtb3J5KHZybS1cdTAwM2VjaGFyZ2VkKTtcbiBcdHZybS1cdTAwM2VjaGFyZ2VkID0gMDtcbiYjNDM7XHRyZXNlcnZlZF90aHBfdW5jaGFyZ2UodnJtLVx1MDAzZXJlc2VydmVkX3RocF9jaGFyZ2VkKTtcbiYjNDM7XHR2cm0tXHUwMDNlcmVzZXJ2ZWRfdGhwX2NoYXJnZWQgPSAwO1xuIH1cbiBcbiAvKlxuQEAgLTExNTcsOCAmIzQzOzExODEsOCBAQCBzdGF0aWMgdm9pZCB1bm1hcF9zb3VyY2Vfdm1hKHN0cnVjdCB2bWFfcmVtYXBfc3RydWN0ICp2cm0pXG4gXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHZybS1cdTAwM2V2bWE7XG4gXHRWTUFfSVRFUkFUT1Iodm1pLCBtbSwgYWRkcik7XG4gXHRpbnQgZXJyO1xuLVx0dW5zaWduZWQgbG9uZyB2bV9zdGFydDtcbi1cdHVuc2lnbmVkIGxvbmcgdm1fZW5kO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgdm1fc3RhcnQgPSAwO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgdm1fZW5kID0gMDtcbiBcdC8qXG4gXHQgKiBJdCBtaWdodCBzZWVtIG9kZCB0aGF0IHdlIGNoZWNrIGZvciBNUkVNQVBfRE9OVFVOTUFQIGhlcmUsIGdpdmVuIHRoaXNcbiBcdCAqIGZ1bmN0aW9uIGltcGxpZXMgdGhhdCB3ZSB1bm1hcCB0aGUgb3JpZ2luYWwgVk1BLCB3aGljaCBzZWVtc1xuQEAgLTExNzAsNiAmIzQzOzExOTQsOCBAQCBzdGF0aWMgdm9pZCB1bm1hcF9zb3VyY2Vfdm1hKHN0cnVjdCB2bWFfcmVtYXBfc3RydWN0ICp2cm0pXG4gXHQgKi9cbiBcdGJvb2wgYWNjb3VudGFibGVfbW92ZSA9ICh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX0FDQ09VTlQpIFx1MDAyNlx1MDAyNlxuIFx0XHQhKHZybS1cdTAwM2VmbGFncyBcdTAwMjYgTVJFTUFQX0RPTlRVTk1BUCk7XG4mIzQzO1x0Ym9vbCByZXNlcnZlZF90aHBfbW92ZSA9ICh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1JFU0VSVkVEX1RIUCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQhKHZybS1cdTAwM2VmbGFncyBcdTAwMjYgTVJFTUFQX0RPTlRVTk1BUCk7XG4gXG4gXHQvKlxuIFx0ICogU28gd2UgcGVyZm9ybSBhIHRyaWNrIGhlcmUgdG8gcHJldmVudCBpbmNvcnJlY3QgYWNjb3VudGluZy4gQW55IG1lcmdlXG5AQCAtMTE5Miw2ICYjNDM7MTIxOCwxMyBAQCBzdGF0aWMgdm9pZCB1bm1hcF9zb3VyY2Vfdm1hKHN0cnVjdCB2bWFfcmVtYXBfc3RydWN0ICp2cm0pXG4gXHRcdHZtX3N0YXJ0ID0gdm1hLVx1MDAzZXZtX3N0YXJ0O1xuIFx0XHR2bV9lbmQgPSB2bWEtXHUwMDNldm1fZW5kO1xuIFx0fVxuJiM0MztcdGlmIChyZXNlcnZlZF90aHBfbW92ZSkge1xuJiM0MztcdFx0dm1fZmxhZ3NfY2xlYXIodm1hLCBWTV9SRVNFUlZFRF9USFApO1xuJiM0MztcdFx0aWYgKCFhY2NvdW50YWJsZV9tb3ZlKSB7XG4mIzQzO1x0XHRcdHZtX3N0YXJ0ID0gdm1hLVx1MDAzZXZtX3N0YXJ0O1xuJiM0MztcdFx0XHR2bV9lbmQgPSB2bWEtXHUwMDNldm1fZW5kO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiBcbiBcdGVyciA9IGRvX3ZtaV9tdW5tYXAoXHUwMDI2dm1pLCBtbSwgYWRkciwgbGVuLCB2cm0tXHUwMDNldWZfdW5tYXAsIC8qIHVubG9jaz0gKi9mYWxzZSk7XG4gXHR2cm0tXHUwMDNldm1hID0gTlVMTDsgLyogSW52YWxpZGF0ZWQuICovXG5AQCAtMTIyNywxOSAmIzQzOzEyNjAsMjcgQEAgc3RhdGljIHZvaWQgdW5tYXBfc291cmNlX3ZtYShzdHJ1Y3Qgdm1hX3JlbWFwX3N0cnVjdCAqdnJtKVxuIFx0ICpcbiBcdCAqIGRvX3ZtaV9tdW5tYXAoKSB3aWxsIGhhdmUgcmVzdG9yZWQgdGhlIFZNSSBiYWNrIHRvIGFkZHIuXG4gXHQgKi9cbi1cdGlmIChhY2NvdW50YWJsZV9tb3ZlKSB7XG4mIzQzO1x0aWYgKGFjY291bnRhYmxlX21vdmUgfHwgcmVzZXJ2ZWRfdGhwX21vdmUpIHtcbiBcdFx0dW5zaWduZWQgbG9uZyBlbmQgPSBhZGRyICYjNDM7IGxlbjtcbi1cbi1cdFx0aWYgKHZtX3N0YXJ0IFx1MDAzYyBhZGRyKSB7XG4tXHRcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICpwcmV2ID0gdm1hX3ByZXYoXHUwMDI2dm1pKTtcbi1cbi1cdFx0XHR2bV9mbGFnc19zZXQocHJldiwgVk1fQUNDT1VOVCk7IC8qIEFjcXVpcmVzIFZNQSBsb2NrLiAqL1xuJiM0MztcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICpwcmV2ID0gTlVMTDtcbiYjNDM7XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqbmV4dCA9IE5VTEw7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHZtX3N0YXJ0IFx1MDAzYyBhZGRyKVxuJiM0MztcdFx0XHRwcmV2ID0gdm1hX3ByZXYoXHUwMDI2dm1pKTtcbiYjNDM7XHRcdGlmICh2bV9lbmQgXHUwMDNlIGVuZClcbiYjNDM7XHRcdFx0bmV4dCA9IHZtYV9uZXh0KFx1MDAyNnZtaSk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGFjY291bnRhYmxlX21vdmUpIHtcbiYjNDM7XHRcdFx0aWYgKHByZXYpXG4mIzQzO1x0XHRcdFx0dm1fZmxhZ3Nfc2V0KHByZXYsIFZNX0FDQ09VTlQpOyAvKiBBY3F1aXJlcyBWTUEgbG9jay4gKi9cbiYjNDM7XHRcdFx0aWYgKG5leHQpXG4mIzQzO1x0XHRcdFx0dm1fZmxhZ3Nfc2V0KG5leHQsIFZNX0FDQ09VTlQpOyAvKiBBY3F1aXJlcyBWTUEgbG9jay4gKi9cbiBcdFx0fVxuLVxuLVx0XHRpZiAodm1fZW5kIFx1MDAzZSBlbmQpIHtcbi1cdFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKm5leHQgPSB2bWFfbmV4dChcdTAwMjZ2bWkpO1xuLVxuLVx0XHRcdHZtX2ZsYWdzX3NldChuZXh0LCBWTV9BQ0NPVU5UKTsgLyogQWNxdWlyZXMgVk1BIGxvY2suICovXG4mIzQzO1x0XHRpZiAocmVzZXJ2ZWRfdGhwX21vdmUpIHtcbiYjNDM7XHRcdFx0aWYgKHByZXYpXG4mIzQzO1x0XHRcdFx0dm1fZmxhZ3Nfc2V0KHByZXYsIFZNX1JFU0VSVkVEX1RIUCk7XG4mIzQzO1x0XHRcdGlmIChuZXh0KVxuJiM0MztcdFx0XHRcdHZtX2ZsYWdzX3NldChuZXh0LCBWTV9SRVNFUlZFRF9USFApO1xuIFx0XHR9XG4gXHR9XG4gfVxuQEAgLTEzMDksNyAmIzQzOzEzNTAsNiBAQCBzdGF0aWMgaW50IGNvcHlfdm1hX2FuZF9kYXRhKHN0cnVjdCB2bWFfcmVtYXBfc3RydWN0ICp2cm0sXG4gXHQqbmV3X3ZtYV9wdHIgPSBuZXdfdm1hO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4tXG4gLypcbiAgKiBQZXJmb3JtIGZpbmFsIHRhc2tzIGZvciBNQURWX0RPTlRVTk1BUCBvcGVyYXRpb24sIGNsZWFyaW5nIG1sb2NrKCkgZmxhZyBvblxuICAqIHJlbWFpbmluZyBWTUEgYnkgY29udmVudGlvbiAoaXQgY2Fubm90IGJlIG1sb2NrKCkmIzM5O2QgYW55IGxvbmdlciwgYXMgcGFnZXMgaW5cbkBAIC0xNTc2LDYgJiM0MzsxNjE2LDIzIEBAIHN0YXRpYyBib29sIGFsaWduX2h1Z2V0bGIoc3RydWN0IHZtYV9yZW1hcF9zdHJ1Y3QgKnZybSlcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbiYjNDM7c3RhdGljIGJvb2wgY2hlY2tfcmVzZXJ2ZWRfdGhwX2FsaWdubWVudChzdHJ1Y3Qgdm1hX3JlbWFwX3N0cnVjdCAqdnJtKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCEodnJtLVx1MDAzZXZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fUkVTRVJWRURfVEhQKSlcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcbiYjNDM7XHRpZiAoIUlTX0FMSUdORUQodnJtLVx1MDAzZWFkZHIsIEhQQUdFX1BNRF9TSVpFKSB8fFxuJiM0MztcdCAgICAhSVNfQUxJR05FRCh2cm0tXHUwMDNlb2xkX2xlbiwgSFBBR0VfUE1EX1NJWkUpIHx8XG4mIzQzO1x0ICAgICFJU19BTElHTkVEKHZybS1cdTAwM2VuZXdfbGVuLCBIUEFHRV9QTURfU0laRSkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGlmICgodnJtLVx1MDAzZXJlbWFwX3R5cGUgPT0gTVJFTUFQX0VYUEFORCB8fCB2cm1faW1wbGllc19uZXdfYWRkcih2cm0pKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIUlTX0FMSUdORUQodnJtLVx1MDAzZW5ld19hZGRyLCBIUEFHRV9QTURfU0laRSkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogV2UgYXJlIG1yZW1hcCgpJiMzOTtpbmcgd2l0aG91dCBzcGVjaWZ5aW5nIGEgZml4ZWQgYWRkcmVzcyB0byBtb3ZlIHRvLCBidXQgYXJlXG4gICogcmVxdWVzdGluZyB0aGF0IHRoZSBWTUEmIzM5O3Mgc2l6ZSBiZSBpbmNyZWFzZWQuXG5AQCAtMTc0NSw2ICYjNDM7MTgwMiw4IEBAIHN0YXRpYyBpbnQgY2hlY2tfcHJlcF92bWEoc3RydWN0IHZtYV9yZW1hcF9zdHJ1Y3QgKnZybSlcbiBcdC8qIEZvciBjb252ZW5pZW5jZSwgd2Ugc2V0IG5ld19hZGRyIGV2ZW4gaWYgVk1BIHdvbiYjMzk7dCBtb3ZlLiAqL1xuIFx0aWYgKCF2cm1faW1wbGllc19uZXdfYWRkcih2cm0pKVxuIFx0XHR2cm0tXHUwMDNlbmV3X2FkZHIgPSBhZGRyO1xuJiM0MztcdGlmICghY2hlY2tfcmVzZXJ2ZWRfdGhwX2FsaWdubWVudCh2cm0pKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHQvKiBCZWxvdyBvbmx5IG1lYW5pbmdmdWwgaWYgd2UgZXhwYW5kIG9yIG1vdmUgYSBWTUEuICovXG4gXHRpZiAoIXZybV93aWxsX21hcF9uZXcodnJtKSlcbmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmNcbmluZGV4IGVlOTAyYTQ2OGMyZjViLi42NjBlNTAxYmY2NzZiNiAxMDA2NDRcbi0tLSBhL21tL3BhZ2VfYWxsb2MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZV9hbGxvYy5jXG5AQCAtMjYzLDYgJiM0MzsyNjMsNyBAQCBjb25zdCBjaGFyICogY29uc3QgbWlncmF0ZXR5cGVfbmFtZXNbTUlHUkFURV9UWVBFU10gPSB7XG4gI2lmZGVmIENPTkZJR19DTUFcbiBcdFwmIzM0O0NNQVwmIzM0OyxcbiAjZW5kaWZcbiYjNDM7XHRcJiMzNDtSZXNlcnZlVEhQXCYjMzQ7LFxuICNpZmRlZiBDT05GSUdfTUVNT1JZX0lTT0xBVElPTlxuIFx0XCYjMzQ7SXNvbGF0ZVwmIzM0OyxcbiAjZW5kaWZcbkBAIC03ODQsNiAmIzQzOzc4NSw5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBhY2NvdW50X2ZyZWVwYWdlcyhzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IG5yX3BhZ2VzLFxuIFx0ZWxzZSBpZiAobWlncmF0ZXR5cGUgPT0gTUlHUkFURV9ISUdIQVRPTUlDKVxuIFx0XHRXUklURV9PTkNFKHpvbmUtXHUwMDNlbnJfZnJlZV9oaWdoYXRvbWljLFxuIFx0XHRcdCAgIHpvbmUtXHUwMDNlbnJfZnJlZV9oaWdoYXRvbWljICYjNDM7IG5yX3BhZ2VzKTtcbiYjNDM7XHRlbHNlIGlmIChtaWdyYXRldHlwZSA9PSBNSUdSQVRFX1JFU0VSVkVEX1RIUClcbiYjNDM7XHRcdFdSSVRFX09OQ0Uoem9uZS1cdTAwM2Vucl9mcmVlX3Jlc2VydmVkX3RocCxcbiYjNDM7XHRcdFx0ICAgem9uZS1cdTAwM2Vucl9mcmVlX3Jlc2VydmVkX3RocCAmIzQzOyBucl9wYWdlcyk7XG4gfVxuIFxuIC8qIFVzZWQgZm9yIHBhZ2VzIG5vdCBvbiBhbm90aGVyIGxpc3QgKi9cbkBAIC0yNDU2LDYgJiM0MzsyNDYwLDkgQEAgX19ybXF1ZXVlKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBtaWdyYXRldHlwZSxcbiB7XG4gXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbiBcbiYjNDM7XHRpZiAoYWxsb2NfZmxhZ3MgXHUwMDI2IEFMTE9DX1JFU0VSVkVEX1RIUClcbiYjNDM7XHRcdHJldHVybiBfX3JtcXVldWVfc21hbGxlc3Qoem9uZSwgb3JkZXIsIE1JR1JBVEVfUkVTRVJWRURfVEhQKTtcbiYjNDM7XG4gXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQ01BKSkge1xuIFx0XHQvKlxuIFx0XHQgKiBCYWxhbmNlIG1vdmFibGUgYWxsb2NhdGlvbnMgYmV0d2VlbiByZWd1bGFyIGFuZCBDTUEgYXJlYXMgYnlcbkBAIC0yOTYwLDcgJiM0MzsyOTY3LDggQEAgc3RhdGljIHZvaWQgX19mcmVlX2Zyb3plbl9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLFxuIFx0em9uZSA9IHBhZ2Vfem9uZShwYWdlKTtcbiBcdG1pZ3JhdGV0eXBlID0gZ2V0X3BmbmJsb2NrX21pZ3JhdGV0eXBlKHBhZ2UsIHBmbik7XG4gXHRpZiAodW5saWtlbHkobWlncmF0ZXR5cGUgXHUwMDNlPSBNSUdSQVRFX1BDUFRZUEVTKSkge1xuLVx0XHRpZiAodW5saWtlbHkoaXNfbWlncmF0ZV9pc29sYXRlKG1pZ3JhdGV0eXBlKSkpIHtcbiYjNDM7XHRcdGlmICh1bmxpa2VseShpc19taWdyYXRlX3Jlc2VydmVkX3RocChtaWdyYXRldHlwZSkgfHxcbiYjNDM7XHRcdFx0ICAgICBpc19taWdyYXRlX2lzb2xhdGUobWlncmF0ZXR5cGUpKSkge1xuIFx0XHRcdGZyZWVfb25lX3BhZ2Uoem9uZSwgcGFnZSwgcGZuLCBvcmRlciwgZnBpX2ZsYWdzKTtcbiBcdFx0XHRyZXR1cm47XG4gXHRcdH1cbkBAIC0zMDM4LDYgJiM0MzszMDQ2LDcgQEAgdm9pZCBmcmVlX3VucmVmX2ZvbGlvcyhzdHJ1Y3QgZm9saW9fYmF0Y2ggKmZvbGlvcylcbiBcbiBcdFx0LyogRGlmZmVyZW50IHpvbmUgcmVxdWlyZXMgYSBkaWZmZXJlbnQgcGNwIGxvY2sgKi9cbiBcdFx0aWYgKHpvbmUgIT0gbG9ja2VkX3pvbmUgfHxcbiYjNDM7XHRcdCAgICBpc19taWdyYXRlX3Jlc2VydmVkX3RocChtaWdyYXRldHlwZSkgfHxcbiBcdFx0ICAgIGlzX21pZ3JhdGVfaXNvbGF0ZShtaWdyYXRldHlwZSkpIHtcbiBcdFx0XHRpZiAocGNwKSB7XG4gXHRcdFx0XHRwY3Bfc3Bpbl91bmxvY2socGNwKTtcbkBAIC0zMDQ1LDYgJiM0MzszMDU0LDEyIEBAIHZvaWQgZnJlZV91bnJlZl9mb2xpb3Moc3RydWN0IGZvbGlvX2JhdGNoICpmb2xpb3MpXG4gXHRcdFx0XHRwY3AgPSBOVUxMO1xuIFx0XHRcdH1cbiBcbiYjNDM7XHRcdFx0aWYgKGlzX21pZ3JhdGVfcmVzZXJ2ZWRfdGhwKG1pZ3JhdGV0eXBlKSkge1xuJiM0MztcdFx0XHRcdGZyZWVfb25lX3BhZ2Uoem9uZSwgXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSwgcGZuLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgb3JkZXIsIEZQSV9OT05FKTtcbiYjNDM7XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcbiBcdFx0XHQvKlxuIFx0XHRcdCAqIEZyZWUgaXNvbGF0ZWQgcGFnZXMgZGlyZWN0bHkgdG8gdGhlXG4gXHRcdFx0ICogYWxsb2NhdG9yLCBzZWUgY29tbWVudCBpbiBmcmVlX2Zyb3plbl9wYWdlcy5cbkBAIC0zMjM1LDcgJiM0MzszMjUwLDggQEAgc3RydWN0IHBhZ2UgKnJtcXVldWVfYnVkZHkoc3RydWN0IHpvbmUgKnByZWZlcnJlZF96b25lLCBzdHJ1Y3Qgem9uZSAqem9uZSxcbiBcdFx0XHQgKiByZXNlcnZlcyBhcyBmYWlsaW5nIG5vdyBpcyB3b3JzZSB0aGFuIGZhaWxpbmcgYVxuIFx0XHRcdCAqIGhpZ2gtb3JkZXIgYXRvbWljIGFsbG9jYXRpb24gaW4gdGhlIGZ1dHVyZS5cbiBcdFx0XHQgKi9cbi1cdFx0XHRpZiAoIXBhZ2UgXHUwMDI2XHUwMDI2IChhbGxvY19mbGFncyBcdTAwMjYgKEFMTE9DX09PTXxBTExPQ19OT05fQkxPQ0spKSlcbiYjNDM7XHRcdFx0aWYgKCFwYWdlIFx1MDAyNlx1MDAyNiAhKGFsbG9jX2ZsYWdzIFx1MDAyNiBBTExPQ19SRVNFUlZFRF9USFApIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgICAgKGFsbG9jX2ZsYWdzIFx1MDAyNiAoQUxMT0NfT09NfEFMTE9DX05PTl9CTE9DSykpKVxuIFx0XHRcdFx0cGFnZSA9IF9fcm1xdWV1ZV9zbWFsbGVzdCh6b25lLCBvcmRlciwgTUlHUkFURV9ISUdIQVRPTUlDKTtcbiBcbiBcdFx0XHRpZiAoIXBhZ2UpIHtcbkBAIC0zNDA1LDcgJiM0MzszNDIxLDggQEAgc3RydWN0IHBhZ2UgKnJtcXVldWUoc3RydWN0IHpvbmUgKnByZWZlcnJlZF96b25lLFxuIHtcbiBcdHN0cnVjdCBwYWdlICpwYWdlO1xuIFxuLVx0aWYgKGxpa2VseShwY3BfYWxsb3dlZF9vcmRlcihvcmRlcikpKSB7XG4mIzQzO1x0aWYgKGxpa2VseShwY3BfYWxsb3dlZF9vcmRlcihvcmRlcikpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAhKGFsbG9jX2ZsYWdzIFx1MDAyNiBBTExPQ19SRVNFUlZFRF9USFApKSB7XG4gXHRcdHBhZ2UgPSBybXF1ZXVlX3BjcGxpc3QocHJlZmVycmVkX3pvbmUsIHpvbmUsIG9yZGVyLFxuIFx0XHRcdFx0ICAgICAgIG1pZ3JhdGV0eXBlLCBhbGxvY19mbGFncyk7XG4gXHRcdGlmIChsaWtlbHkocGFnZSkpXG5AQCAtMzU1Niw2ICYjNDM7MzU3MywzNSBAQCBzdGF0aWMgYm9vbCB1bnJlc2VydmVfaGlnaGF0b21pY19wYWdlYmxvY2soY29uc3Qgc3RydWN0IGFsbG9jX2NvbnRleHQgKmFjLFxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbiYjNDM7dW5zaWduZWQgbG9uZyByZXNlcnZlZF90aHBfcGFnZWJsb2Nrcyh1bnNpZ25lZCBsb25nIG5yX2hwYWdlcylcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGludCBvcmRlciA9IG1heF90KHVuc2lnbmVkIGludCwgSFBBR0VfUE1EX09SREVSLFxuJiM0MztcdFx0XHRcdCAgIHBhZ2VibG9ja19vcmRlcik7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBocGFnZXNfcGVyX2Jsb2NrID0gMVVMIFx1MDAzY1x1MDAzYyAob3JkZXIgLSBIUEFHRV9QTURfT1JERVIpO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWQgPSAwO1xuJiM0MztcdGdmcF90IGdmcCA9IChHRlBfSElHSFVTRVIgfCBfX0dGUF9DT01QIHwgX19HRlBfTk9NRU1BTExPQyB8XG4mIzQzO1x0XHQgICAgIF9fR0ZQX05PV0FSTiB8IF9fR0ZQX05PUkVUUlkpO1xuJiM0MztcbiYjNDM7XHR3aGlsZSAocmVzZXJ2ZWQgXHUwMDNjIG5yX2hwYWdlcykge1xuJiM0MztcdFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4mIzQzO1x0XHRzdHJ1Y3Qgem9uZSAqem9uZTtcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4mIzQzO1xuJiM0MztcdFx0cGFnZSA9IGFsbG9jX3BhZ2VzKGdmcCwgb3JkZXIpO1xuJiM0MztcdFx0aWYgKCFwYWdlKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0XHR6b25lID0gcGFnZV96b25lKHBhZ2UpO1xuJiM0MztcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2em9uZS1cdTAwM2Vsb2NrLCBmbGFncyk7XG4mIzQzO1x0XHRjaGFuZ2VfcGFnZWJsb2NrX3JhbmdlKHBhZ2UsIG9yZGVyLCBNSUdSQVRFX1JFU0VSVkVEX1RIUCk7XG4mIzQzO1x0XHR6b25lLVx1MDAzZW5yX3Jlc2VydmVkX3RocCAmIzQzOz0gMVVMIFx1MDAzY1x1MDAzYyBvcmRlcjtcbiYjNDM7XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2em9uZS1cdTAwM2Vsb2NrLCBmbGFncyk7XG4mIzQzO1x0XHRfX2ZyZWVfcGFnZXMocGFnZSwgb3JkZXIpO1xuJiM0MztcdFx0cmVzZXJ2ZWQgJiM0Mzs9IGhwYWdlc19wZXJfYmxvY2s7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiByZXNlcnZlZDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW5saW5lIGxvbmcgX196b25lX3dhdGVybWFya191bnVzYWJsZV9mcmVlKHN0cnVjdCB6b25lICp6LFxuIFx0XHRcdFx0dW5zaWduZWQgaW50IG9yZGVyLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXG4ge1xuQEAgLTM1NjgsNiAmIzQzOzM2MTQsOSBAQCBzdGF0aWMgaW5saW5lIGxvbmcgX196b25lX3dhdGVybWFya191bnVzYWJsZV9mcmVlKHN0cnVjdCB6b25lICp6LFxuIFx0aWYgKGxpa2VseSghKGFsbG9jX2ZsYWdzIFx1MDAyNiBBTExPQ19SRVNFUlZFUykpKVxuIFx0XHR1bnVzYWJsZV9mcmVlICYjNDM7PSBSRUFEX09OQ0Uoei1cdTAwM2Vucl9mcmVlX2hpZ2hhdG9taWMpO1xuIFxuJiM0MztcdGlmICghKGFsbG9jX2ZsYWdzIFx1MDAyNiBBTExPQ19SRVNFUlZFRF9USFApKVxuJiM0MztcdFx0dW51c2FibGVfZnJlZSAmIzQzOz0gUkVBRF9PTkNFKHotXHUwMDNlbnJfZnJlZV9yZXNlcnZlZF90aHApO1xuJiM0MztcbiAjaWZkZWYgQ09ORklHX0NNQVxuIFx0LyogSWYgYWxsb2NhdGlvbiBjYW4mIzM5O3QgdXNlIENNQSBhcmVhcyBkb24mIzM5O3QgdXNlIGZyZWUgQ01BIHBhZ2VzICovXG4gXHRpZiAoIShhbGxvY19mbGFncyBcdTAwMjYgQUxMT0NfQ01BKSlcbkBAIC0zNjQyLDYgJiM0MzszNjkxLDEyIEBAIGJvb2wgX196b25lX3dhdGVybWFya19vayhzdHJ1Y3Qgem9uZSAqeiwgdW5zaWduZWQgaW50IG9yZGVyLCB1bnNpZ25lZCBsb25nIG1hcmssXG4gXHRcdGlmICghYXJlYS1cdTAwM2Vucl9mcmVlKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuJiM0MztcdFx0aWYgKGFsbG9jX2ZsYWdzIFx1MDAyNiBBTExPQ19SRVNFUlZFRF9USFApIHtcbiYjNDM7XHRcdFx0aWYgKCFmcmVlX2FyZWFfZW1wdHkoYXJlYSwgTUlHUkFURV9SRVNFUlZFRF9USFApKVxuJiM0MztcdFx0XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4gXHRcdGZvciAobXQgPSAwOyBtdCBcdTAwM2MgTUlHUkFURV9QQ1BUWVBFUzsgbXQmIzQzOyYjNDM7KSB7XG4gXHRcdFx0aWYgKCFmcmVlX2FyZWFfZW1wdHkoYXJlYSwgbXQpKVxuIFx0XHRcdFx0cmV0dXJuIHRydWU7XG5AQCAtMzg3Niw2ICYjNDM7MzkzMSw5IEBAIGdldF9wYWdlX2Zyb21fZnJlZWxpc3QoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlciwgaW50IGFsbG9jX2ZsYWdzLFxuIFxuIFx0XHRjb25kX2FjY2VwdF9tZW1vcnkoem9uZSwgb3JkZXIsIGFsbG9jX2ZsYWdzKTtcbiBcbiYjNDM7XHRcdGlmIChhbGxvY19mbGFncyBcdTAwMjYgQUxMT0NfUkVTRVJWRURfVEhQKVxuJiM0MztcdFx0XHRnb3RvIHRyeV90aGlzX3pvbmU7XG4mIzQzO1xuIFx0XHQvKlxuIFx0XHQgKiBEZXRlY3Qgd2hldGhlciB0aGUgbnVtYmVyIG9mIGZyZWUgcGFnZXMgaXMgYmVsb3cgaGlnaFxuIFx0XHQgKiB3YXRlcm1hcmsuICBJZiBzbywgd2Ugd2lsbCBkZWNyZWFzZSBwY3AtXHUwMDNlaGlnaCBhbmQgZnJlZVxuQEAgLTUwMzMsNiAmIzQzOzUwOTEsMTUgQEAgc3RhdGljIGlubGluZSBib29sIHByZXBhcmVfYWxsb2NfcGFnZXMoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcbiBcdGFjLVx1MDAzZW5vZGVtYXNrID0gbm9kZW1hc2s7XG4gXHRhYy1cdTAwM2VtaWdyYXRldHlwZSA9IGdmcF9taWdyYXRldHlwZShnZnBfbWFzayk7XG4gXG4mIzQzO1x0aWYgKGdmcF9tYXNrIFx1MDAyNiBfX0dGUF9SRVNFUlZFRF9USFApIHtcbiYjNDM7XHRcdGlmICghSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIHx8XG4mIzQzO1x0XHQgICAgV0FSTl9PTl9PTkNFX0dGUChvcmRlciAhPSBIUEFHRV9QTURfT1JERVIsIGdmcF9tYXNrKSlcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRcdGFjLVx1MDAzZW1pZ3JhdGV0eXBlID0gTUlHUkFURV9SRVNFUlZFRF9USFA7XG4mIzQzO1x0XHQqYWxsb2NfZmxhZ3MgfD0gQUxMT0NfUkVTRVJWRURfVEhQO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRpZiAoY3B1c2V0c19lbmFibGVkKCkpIHtcbiBcdFx0KmFsbG9jX2dmcCB8PSBfX0dGUF9IQVJEV0FMTDtcbiBcdFx0LypcbmRpZmYgLS1naXQgYS9tbS9yZXNlcnZlZF90aHAuYyBiL21tL3Jlc2VydmVkX3RocC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjkzMWM1MzljMTVhNzA5XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9yZXNlcnZlZF90aHAuY1xuQEAgLTAsMCAmIzQzOzEsMTMzIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tbS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFwmIzM0O2ludGVybmFsLmhcJiMzNDtcbiYjNDM7XG4mIzQzO3N0YXRpYyBERUZJTkVfU1BJTkxPQ0socmVzZXJ2ZWRfdGhwX2xvY2spO1xuJiM0MztcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWRfdGhwX2NtZGxpbmVfc2l6ZSBfX2luaXRkYXRhID0gSFBBR0VfUE1EX1NJWkU7XG4mIzQzO3N0YXRpYyBib29sIHJlc2VydmVkX3RocF9jbWRsaW5lX3NpemVfdmFsaWQgX19pbml0ZGF0YSA9IHRydWU7XG4mIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIHJlc2VydmVkX3RocF9yZXF1ZXN0ZWQgX19pbml0ZGF0YTtcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWRfdGhwX3RvdGFsO1xuJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyByZXNlcnZlZF90aHBfdXNlZDtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgX19pbml0IHNldHVwX3Jlc2VydmVkX3RocF9zaXplKGNoYXIgKnN0cilcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgc2l6ZTtcbiYjNDM7XHRzaXplID0gbWVtcGFyc2Uoc3RyLCBOVUxMKTtcbiYjNDM7XHRpZiAoc2l6ZSAhPSBIUEFHRV9QTURfU0laRSkge1xuJiM0MztcdFx0cHJfd2FybihcJiMzNDt1bnN1cHBvcnRlZCB0aHBfcmVzZXJ2ZWRfc2l6ZT0lcywgb25seSAlbHUgaXMgc3VwcG9ydGVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRzdHIsIEhQQUdFX1BNRF9TSVpFKTtcbiYjNDM7XHRcdHJlc2VydmVkX3RocF9jbWRsaW5lX3NpemVfdmFsaWQgPSBmYWxzZTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XHRyZXNlcnZlZF90aHBfY21kbGluZV9zaXplID0gc2l6ZTtcbiYjNDM7XHRyZXNlcnZlZF90aHBfY21kbGluZV9zaXplX3ZhbGlkID0gdHJ1ZTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztlYXJseV9wYXJhbShcJiMzNDt0aHBfcmVzZXJ2ZWRfc2l6ZVwmIzM0Oywgc2V0dXBfcmVzZXJ2ZWRfdGhwX3NpemUpO1xuJiM0MztzdGF0aWMgaW50IF9faW5pdCBzZXR1cF9yZXNlcnZlZF90aHBfbnIoY2hhciAqc3RyKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGNvdW50O1xuJiM0MztcdGlmIChzc2NhbmYoc3RyLCBcJiMzNDslbHUlblwmIzM0OywgXHUwMDI2cmVzZXJ2ZWRfdGhwX3JlcXVlc3RlZCwgXHUwMDI2Y291bnQpICE9IDEgfHxcbiYjNDM7XHQgICAgc3RyW2NvdW50XSkge1xuJiM0MztcdFx0cHJfd2FybihcJiMzNDtpbnZhbGlkIHRocF9yZXNlcnZlZF9ucj0lc1xcblwmIzM0Oywgc3RyKTtcbiYjNDM7XHRcdHJlc2VydmVkX3RocF9yZXF1ZXN0ZWQgPSAwO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO2Vhcmx5X3BhcmFtKFwmIzM0O3RocF9yZXNlcnZlZF9uclwmIzM0Oywgc2V0dXBfcmVzZXJ2ZWRfdGhwX25yKTtcbiYjNDM7XG4mIzQzO3Vuc2lnbmVkIGxvbmcgcmVzZXJ2ZWRfdGhwX2hwYWdlX25yKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIChlbmQgLSBzdGFydCkgXHUwMDNlXHUwMDNlIEhQQUdFX1BNRF9TSElGVDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHJlc2VydmVkX3RocF9jaGFyZ2UodW5zaWduZWQgbG9uZyBucl9ocGFnZXMpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFucl9ocGFnZXMpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0c3Bpbl9sb2NrKFx1MDAyNnJlc2VydmVkX3RocF9sb2NrKTtcbiYjNDM7XHRpZiAobnJfaHBhZ2VzIFx1MDAzZSByZXNlcnZlZF90aHBfdG90YWwgLSByZXNlcnZlZF90aHBfdXNlZClcbiYjNDM7XHRcdHJldCA9IC1FTk9NRU07XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0cmVzZXJ2ZWRfdGhwX3VzZWQgJiM0Mzs9IG5yX2hwYWdlcztcbiYjNDM7XHRzcGluX3VubG9jayhcdTAwMjZyZXNlcnZlZF90aHBfbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgcmVzZXJ2ZWRfdGhwX3VuY2hhcmdlKHVuc2lnbmVkIGxvbmcgbnJfaHBhZ2VzKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFucl9ocGFnZXMpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHNwaW5fbG9jayhcdTAwMjZyZXNlcnZlZF90aHBfbG9jayk7XG4mIzQzO1x0aWYgKFdBUk5fT05fT05DRShucl9ocGFnZXMgXHUwMDNlIHJlc2VydmVkX3RocF91c2VkKSlcbiYjNDM7XHRcdHJlc2VydmVkX3RocF91c2VkID0gMDtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRyZXNlcnZlZF90aHBfdXNlZCAtPSBucl9ocGFnZXM7XG4mIzQzO1x0c3Bpbl91bmxvY2soXHUwMDI2cmVzZXJ2ZWRfdGhwX2xvY2spO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3NpemVfdCB0b3RhbF9ocGFnZXNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbiYjNDM7XHRcdFx0XHQgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwmIzM0OyVsdVxcblwmIzM0OywgUkVBRF9PTkNFKHJlc2VydmVkX3RocF90b3RhbCkpO1xuJiM0Mzt9XG4mIzQzO3N0YXRpYyBzc2l6ZV90IGZyZWVfaHBhZ2VzX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4mIzQzO1x0XHRcdFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZyZWVfaHBhZ2VzO1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2soXHUwMDI2cmVzZXJ2ZWRfdGhwX2xvY2spO1xuJiM0MztcdGZyZWVfaHBhZ2VzID0gcmVzZXJ2ZWRfdGhwX3RvdGFsIC0gcmVzZXJ2ZWRfdGhwX3VzZWQ7XG4mIzQzO1x0c3Bpbl91bmxvY2soXHUwMDI2cmVzZXJ2ZWRfdGhwX2xvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwmIzM0OyVsdVxcblwmIzM0OywgZnJlZV9ocGFnZXMpO1xuJiM0Mzt9XG4mIzQzO3N0YXRpYyBzc2l6ZV90IHVzZWRfaHBhZ2VzX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4mIzQzO1x0XHRcdFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwmIzM0OyVsdVxcblwmIzM0OywgUkVBRF9PTkNFKHJlc2VydmVkX3RocF91c2VkKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgdG90YWxfaHBhZ2VzX2F0dHIgPSBfX0FUVFJfUk8odG90YWxfaHBhZ2VzKTtcbiYjNDM7c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBmcmVlX2hwYWdlc19hdHRyID0gX19BVFRSX1JPKGZyZWVfaHBhZ2VzKTtcbiYjNDM7c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSB1c2VkX2hwYWdlc19hdHRyID0gX19BVFRSX1JPKHVzZWRfaHBhZ2VzKTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpyZXNlcnZlZF90aHBfYXR0cnNbXSA9IHtcbiYjNDM7XHRcdTAwMjZ0b3RhbF9ocGFnZXNfYXR0ci5hdHRyLFxuJiM0MztcdFx1MDAyNmZyZWVfaHBhZ2VzX2F0dHIuYXR0cixcbiYjNDM7XHRcdTAwMjZ1c2VkX2hwYWdlc19hdHRyLmF0dHIsXG4mIzQzO1x0TlVMTCxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIHJlc2VydmVkX3RocF9hdHRyX2dyb3VwID0ge1xuJiM0MztcdC5hdHRycyA9IHJlc2VydmVkX3RocF9hdHRycyxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgX19pbml0IHJlc2VydmVkX3RocF9pbml0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga29iamVjdCAqa29iajtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAocmVzZXJ2ZWRfdGhwX3JlcXVlc3RlZCBcdTAwMjZcdTAwMjYgcmVzZXJ2ZWRfdGhwX2NtZGxpbmVfc2l6ZV92YWxpZCkge1xuJiM0MztcdFx0cmVzZXJ2ZWRfdGhwX3RvdGFsID0gcmVzZXJ2ZWRfdGhwX3BhZ2VibG9ja3MocmVzZXJ2ZWRfdGhwX3JlcXVlc3RlZCk7XG4mIzQzO1x0XHRwcl9pbmZvKFwmIzM0O3Jlc2VydmVkICVsdS8lbHUgUE1EIFRIUCBwYWdlYmxvY2tzICglbHUgYnl0ZXMgZWFjaClcXG5cJiMzNDssXG4mIzQzO1x0XHRcdHJlc2VydmVkX3RocF90b3RhbCwgcmVzZXJ2ZWRfdGhwX3JlcXVlc3RlZCxcbiYjNDM7XHRcdFx0cmVzZXJ2ZWRfdGhwX2NtZGxpbmVfc2l6ZSk7XG4mIzQzO1x0fVxuJiM0MztcdGtvYmogPSBrb2JqZWN0X2NyZWF0ZV9hbmRfYWRkKFwmIzM0O3Jlc2VydmVkX3RocFwmIzM0OywgbW1fa29iaik7XG4mIzQzO1x0aWYgKCFrb2JqKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0cmV0ID0gc3lzZnNfY3JlYXRlX2dyb3VwKGtvYmosIFx1MDAyNnJlc2VydmVkX3RocF9hdHRyX2dyb3VwKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0a29iamVjdF9wdXQoa29iaik7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztzdWJzeXNfaW5pdGNhbGwocmVzZXJ2ZWRfdGhwX2luaXQpO1xuXFwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZVxuZGlmZiAtLWdpdCBhL21tL3Nob3dfbWVtLmMgYi9tbS9zaG93X21lbS5jXG5pbmRleCA0M2FjYTVhMmFjOTkwYS4uZTkzODFhZmNhNGFjYWUgMTAwNjQ0XG4tLS0gYS9tbS9zaG93X21lbS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9zaG93X21lbS5jXG5AQCAtMTQyLDYgJiM0MzsxNDIsNyBAQCBzdGF0aWMgdm9pZCBzaG93X21pZ3JhdGlvbl90eXBlcyh1bnNpZ25lZCBjaGFyIHR5cGUpXG4gI2lmZGVmIENPTkZJR19DTUFcbiBcdFx0W01JR1JBVEVfQ01BXVx0XHQ9ICYjMzk7QyYjMzk7LFxuICNlbmRpZlxuJiM0MztcdFx0W01JR1JBVEVfUkVTRVJWRURfVEhQXVx0PSAmIzM5O1QmIzM5OyxcbiAjaWZkZWYgQ09ORklHX01FTU9SWV9JU09MQVRJT05cbiBcdFx0W01JR1JBVEVfSVNPTEFURV1cdD0gJiMzOTtJJiMzOTssXG4gI2VuZGlmXG5AQCAtMzA4LDYgJiM0MzszMDksOCBAQCBzdGF0aWMgdm9pZCBzaG93X2ZyZWVfYXJlYXModW5zaWduZWQgaW50IGZpbHRlciwgbm9kZW1hc2tfdCAqbm9kZW1hc2ssIGludCBtYXhfelxuIFx0XHRcdFwmIzM0OyBoaWdoOiVsdWtCXCYjMzQ7XG4gXHRcdFx0XCYjMzQ7IHJlc2VydmVkX2hpZ2hhdG9taWM6JWx1S0JcJiMzNDtcbiBcdFx0XHRcJiMzNDsgZnJlZV9oaWdoYXRvbWljOiVsdUtCXCYjMzQ7XG4mIzQzO1x0XHRcdFwmIzM0OyByZXNlcnZlZF90aHA6JWx1S0JcJiMzNDtcbiYjNDM7XHRcdFx0XCYjMzQ7IGZyZWVfcmVzZXJ2ZWRfdGhwOiVsdUtCXCYjMzQ7XG4gXHRcdFx0XCYjMzQ7IGFjdGl2ZV9hbm9uOiVsdWtCXCYjMzQ7XG4gXHRcdFx0XCYjMzQ7IGluYWN0aXZlX2Fub246JWx1a0JcJiMzNDtcbiBcdFx0XHRcJiMzNDsgYWN0aXZlX2ZpbGU6JWx1a0JcJiMzNDtcbkBAIC0zMzEsNiAmIzQzOzMzNCw4IEBAIHN0YXRpYyB2b2lkIHNob3dfZnJlZV9hcmVhcyh1bnNpZ25lZCBpbnQgZmlsdGVyLCBub2RlbWFza190ICpub2RlbWFzaywgaW50IG1heF96XG4gXHRcdFx0SyhoaWdoX3dtYXJrX3BhZ2VzKHpvbmUpKSxcbiBcdFx0XHRLKHpvbmUtXHUwMDNlbnJfcmVzZXJ2ZWRfaGlnaGF0b21pYyksXG4gXHRcdFx0Syh6b25lLVx1MDAzZW5yX2ZyZWVfaGlnaGF0b21pYyksXG4mIzQzO1x0XHRcdEsoem9uZS1cdTAwM2Vucl9yZXNlcnZlZF90aHApLFxuJiM0MztcdFx0XHRLKHpvbmUtXHUwMDNlbnJfZnJlZV9yZXNlcnZlZF90aHApLFxuIFx0XHRcdEsoem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX1pPTkVfQUNUSVZFX0FOT04pKSxcbiBcdFx0XHRLKHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9aT05FX0lOQUNUSVZFX0FOT04pKSxcbiBcdFx0XHRLKHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9aT05FX0FDVElWRV9GSUxFKSksXG5kaWZmIC0tZ2l0IGEvbW0vdm1hLmMgYi9tbS92bWEuY1xuaW5kZXggOWVlYTI4NTA4MThhODUuLjhjNGNkN2M5N2E5ODRjIDEwMDY0NFxuLS0tIGEvbW0vdm1hLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3ZtYS5jXG5AQCAtNyw2ICYjNDM7Nyw4IEBAXG4gI2luY2x1ZGUgXCYjMzQ7dm1hX2ludGVybmFsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt2bWEuaFwmIzM0O1xuIFxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9odWdlX21tLmhcdTAwM2VcbiYjNDM7XG4gc3RydWN0IG1tYXBfc3RhdGUge1xuIFx0c3RydWN0IG1tX3N0cnVjdCAqbW07XG4gXHRzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWk7XG5AQCAtNTA3LDYgJiM0Mzs1MDksMTAgQEAgX19zcGxpdF92bWEoc3RydWN0IHZtYV9pdGVyYXRvciAqdm1pLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFdBUk5fT04odm1hLVx1MDAzZXZtX3N0YXJ0IFx1MDAzZT0gYWRkcik7XG4gXHRXQVJOX09OKHZtYS1cdTAwM2V2bV9lbmQgXHUwMDNjPSBhZGRyKTtcbiBcbiYjNDM7XHRpZiAoKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fUkVTRVJWRURfVEhQKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIUlTX0FMSUdORUQoYWRkciwgSFBBR0VfUE1EX1NJWkUpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuIFx0aWYgKHZtYS1cdTAwM2V2bV9vcHMgXHUwMDI2XHUwMDI2IHZtYS1cdTAwM2V2bV9vcHMtXHUwMDNlbWF5X3NwbGl0KSB7XG4gXHRcdGVyciA9IHZtYS1cdTAwM2V2bV9vcHMtXHUwMDNlbWF5X3NwbGl0KHZtYSwgYWRkcik7XG4gXHRcdGlmIChlcnIpXG5AQCAtMTM2MSw2ICYjNDM7MTM2Nyw3IEBAIHN0YXRpYyB2b2lkIHZtc19jb21wbGV0ZV9tdW5tYXBfdm1hcyhzdHJ1Y3Qgdm1hX211bm1hcF9zdHJ1Y3QgKnZtcyxcbiBcdFx0cmVtb3ZlX3ZtYSh2bWEpO1xuIFxuIFx0dm1fdW5hY2N0X21lbW9yeSh2bXMtXHUwMDNlbnJfYWNjb3VudGVkKTtcbiYjNDM7XHRyZXNlcnZlZF90aHBfdW5jaGFyZ2Uodm1zLVx1MDAzZW5yX3Jlc2VydmVkX3RocCk7XG4gXHR2YWxpZGF0ZV9tbShtbSk7XG4gXHRpZiAodm1zLVx1MDAzZXVubG9jaylcbiBcdFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XG5AQCAtMTQyMyw2ICYjNDM7MTQzMCwxMSBAQCBzdGF0aWMgaW50IHZtc19nYXRoZXJfbXVubWFwX3ZtYXMoc3RydWN0IHZtYV9tdW5tYXBfc3RydWN0ICp2bXMsXG4gXHRcdFx0ZXJyb3IgPSAtRVBFUk07XG4gXHRcdFx0Z290byBzdGFydF9zcGxpdF9mYWlsZWQ7XG4gXHRcdH1cbiYjNDM7XHRcdGlmICgodm1zLVx1MDAzZXZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fUkVTRVJWRURfVEhQKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAhSVNfQUxJR05FRCh2bXMtXHUwMDNlc3RhcnQsIEhQQUdFX1BNRF9TSVpFKSkge1xuJiM0MztcdFx0XHRlcnJvciA9IC1FSU5WQUw7XG4mIzQzO1x0XHRcdGdvdG8gc3RhcnRfc3BsaXRfZmFpbGVkO1xuJiM0MztcdFx0fVxuIFxuIFx0XHRlcnJvciA9IF9fc3BsaXRfdm1hKHZtcy1cdTAwM2V2bWksIHZtcy1cdTAwM2V2bWEsIHZtcy1cdTAwM2VzdGFydCwgMSk7XG4gXHRcdGlmIChlcnJvcilcbkBAIC0xNDQ1LDYgJiM0MzsxNDU3LDExIEBAIHN0YXRpYyBpbnQgdm1zX2dhdGhlcl9tdW5tYXBfdm1hcyhzdHJ1Y3Qgdm1hX211bm1hcF9zdHJ1Y3QgKnZtcyxcbiBcdFx0fVxuIFx0XHQvKiBEb2VzIGl0IHNwbGl0IHRoZSBlbmQ/ICovXG4gXHRcdGlmIChuZXh0LVx1MDAzZXZtX2VuZCBcdTAwM2Ugdm1zLVx1MDAzZWVuZCkge1xuJiM0MztcdFx0XHRpZiAoKG5leHQtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1JFU0VSVkVEX1RIUCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCAgICAhSVNfQUxJR05FRCh2bXMtXHUwMDNlZW5kLCBIUEFHRV9QTURfU0laRSkpIHtcbiYjNDM7XHRcdFx0XHRlcnJvciA9IC1FSU5WQUw7XG4mIzQzO1x0XHRcdFx0Z290byBlbmRfc3BsaXRfZmFpbGVkO1xuJiM0MztcdFx0XHR9XG4gXHRcdFx0ZXJyb3IgPSBfX3NwbGl0X3ZtYSh2bXMtXHUwMDNldm1pLCBuZXh0LCB2bXMtXHUwMDNlZW5kLCAwKTtcbiBcdFx0XHRpZiAoZXJyb3IpXG4gXHRcdFx0XHRnb3RvIGVuZF9zcGxpdF9mYWlsZWQ7XG5AQCAtMTQ2NSw2ICYjNDM7MTQ4MiwxMSBAQCBzdGF0aWMgaW50IHZtc19nYXRoZXJfbXVubWFwX3ZtYXMoc3RydWN0IHZtYV9tdW5tYXBfc3RydWN0ICp2bXMsXG4gXHRcdGlmICh2bWFfdGVzdChuZXh0LCBWTUFfQUNDT1VOVF9CSVQpKVxuIFx0XHRcdHZtcy1cdTAwM2Vucl9hY2NvdW50ZWQgJiM0Mzs9IG5ycGFnZXM7XG4gXG4mIzQzO1x0XHRpZiAobmV4dC1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fUkVTRVJWRURfVEhQKVxuJiM0MztcdFx0XHR2bXMtXHUwMDNlbnJfcmVzZXJ2ZWRfdGhwICYjNDM7PVxuJiM0MztcdFx0XHRcdHJlc2VydmVkX3RocF9ocGFnZV9ucihuZXh0LVx1MDAzZXZtX3N0YXJ0LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICBuZXh0LVx1MDAzZXZtX2VuZCk7XG4mIzQzO1xuIFx0XHRpZiAoaXNfZXhlY19tYXBwaW5nKG5leHQtXHUwMDNldm1fZmxhZ3MpKVxuIFx0XHRcdHZtcy1cdTAwM2VleGVjX3ZtICYjNDM7PSBucnBhZ2VzO1xuIFx0XHRlbHNlIGlmIChpc19zdGFja19tYXBwaW5nKG5leHQtXHUwMDNldm1fZmxhZ3MpKVxuQEAgLTE1NjAsNiAmIzQzOzE1ODIsNyBAQCBzdGF0aWMgdm9pZCBpbml0X3ZtYV9tdW5tYXAoc3RydWN0IHZtYV9tdW5tYXBfc3RydWN0ICp2bXMsXG4gXHR2bXMtXHUwMDNldWYgPSB1ZjtcbiBcdHZtcy1cdTAwM2V2bWFfY291bnQgPSAwO1xuIFx0dm1zLVx1MDAzZW5yX3BhZ2VzID0gdm1zLVx1MDAzZWxvY2tlZF92bSA9IHZtcy1cdTAwM2Vucl9hY2NvdW50ZWQgPSAwO1xuJiM0MztcdHZtcy1cdTAwM2Vucl9yZXNlcnZlZF90aHAgPSAwO1xuIFx0dm1zLVx1MDAzZWV4ZWNfdm0gPSB2bXMtXHUwMDNlc3RhY2tfdm0gPSB2bXMtXHUwMDNlZGF0YV92bSA9IDA7XG4gXHR2bXMtXHUwMDNldW5tYXBfc3RhcnQgPSBGSVJTVF9VU0VSX0FERFJFU1M7XG4gXHR2bXMtXHUwMDNldW5tYXBfZW5kID0gVVNFUl9QR1RBQkxFU19DRUlMSU5HO1xuZGlmZiAtLWdpdCBhL21tL3ZtYS5oIGIvbW0vdm1hLmhcbmluZGV4IDhlNGI2MWE3MzA0YzY4Li42OGU0NGFkZWU1Yzg5ZSAxMDA2NDRcbi0tLSBhL21tL3ZtYS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS92bWEuaFxuQEAgLTQ4LDYgJiM0Mzs0OCw3IEBAIHN0cnVjdCB2bWFfbXVubWFwX3N0cnVjdCB7XG4gXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzOyAgICAgICAgIC8qIE51bWJlciBvZiBwYWdlcyBiZWluZyByZW1vdmVkICovXG4gXHR1bnNpZ25lZCBsb25nIGxvY2tlZF92bTsgICAgICAgIC8qIE51bWJlciBvZiBsb2NrZWQgcGFnZXMgKi9cbiBcdHVuc2lnbmVkIGxvbmcgbnJfYWNjb3VudGVkOyAgICAgLyogTnVtYmVyIG9mIFZNX0FDQ09VTlQgcGFnZXMgKi9cbiYjNDM7XHR1bnNpZ25lZCBsb25nIG5yX3Jlc2VydmVkX3RocDsgIC8qIE51bWJlciBvZiByZXNlcnZlZCBQTUQgVEhQIHNsb3RzICovXG4gXHR1bnNpZ25lZCBsb25nIGV4ZWNfdm07XG4gXHR1bnNpZ25lZCBsb25nIHN0YWNrX3ZtO1xuIFx0dW5zaWduZWQgbG9uZyBkYXRhX3ZtO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL2luY2x1ZGUvbGludXgvZ2ZwX3R5cGVzLmggYi90b29scy9pbmNsdWRlL2xpbnV4L2dmcF90eXBlcy5oXG5pbmRleCA2Yzc1ZGYzMGEyODFkMS4uNTNhMWQyMmZjZjk1N2UgMTAwNjQ0XG4tLS0gYS90b29scy9pbmNsdWRlL2xpbnV4L2dmcF90eXBlcy5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9pbmNsdWRlL2xpbnV4L2dmcF90eXBlcy5oXG5AQCAtMzMsNyAmIzQzOzMzLDcgQEAgZW51bSB7XG4gXHRfX19HRlBfSU9fQklULFxuIFx0X19fR0ZQX0ZTX0JJVCxcbiBcdF9fX0dGUF9aRVJPX0JJVCxcbi1cdF9fX0dGUF9VTlVTRURfQklULFx0LyogMHgyMDB1IHVudXNlZCAqL1xuJiM0MztcdF9fX0dGUF9SRVNFUlZFRF9USFBfQklULFxuIFx0X19fR0ZQX0RJUkVDVF9SRUNMQUlNX0JJVCxcbiBcdF9fX0dGUF9LU1dBUERfUkVDTEFJTV9CSVQsXG4gXHRfX19HRlBfV1JJVEVfQklULFxuQEAgLTY5LDcgJiM0Mzs2OSw3IEBAIGVudW0ge1xuICNkZWZpbmUgX19fR0ZQX0lPXHRcdEJJVChfX19HRlBfSU9fQklUKVxuICNkZWZpbmUgX19fR0ZQX0ZTXHRcdEJJVChfX19HRlBfRlNfQklUKVxuICNkZWZpbmUgX19fR0ZQX1pFUk9cdFx0QklUKF9fX0dGUF9aRVJPX0JJVClcbi0vKiAweDIwMHUgdW51c2VkICovXG4mIzQzOyNkZWZpbmUgX19fR0ZQX1JFU0VSVkVEX1RIUFx0QklUKF9fX0dGUF9SRVNFUlZFRF9USFBfQklUKVxuICNkZWZpbmUgX19fR0ZQX0RJUkVDVF9SRUNMQUlNXHRCSVQoX19fR0ZQX0RJUkVDVF9SRUNMQUlNX0JJVClcbiAjZGVmaW5lIF9fX0dGUF9LU1dBUERfUkVDTEFJTVx0QklUKF9fX0dGUF9LU1dBUERfUkVDTEFJTV9CSVQpXG4gI2RlZmluZSBfX19HRlBfV1JJVEVcdFx0QklUKF9fX0dGUF9XUklURV9CSVQpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLWttZW0uYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1rbWVtLmNcbmluZGV4IGUxYjJmNWJjMWJhOGQ4Li40NTczMmFhZjFhNTI1ZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1rbWVtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1rbWVtLmNcbkBAIC02NzIsNiAmIzQzOzY3Miw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qge1xuIFx0eyBcJiMzNDtfX0dGUF9OT1JFVFJZXCYjMzQ7LFx0XHRcJiMzNDtOUlwmIzM0OyB9LFxuIFx0eyBcJiMzNDtfX0dGUF9DT01QXCYjMzQ7LFx0XHRcdFwmIzM0O0NcJiMzNDsgfSxcbiBcdHsgXCYjMzQ7X19HRlBfWkVST1wmIzM0OyxcdFx0XHRcJiMzNDtaXCYjMzQ7IH0sXG4mIzQzO1x0eyBcJiMzNDtfX0dGUF9SRVNFUlZFRF9USFBcJiMzNDssXHRcdFwmIzM0O1JUSFBcJiMzNDsgfSxcbiBcdHsgXCYjMzQ7X19HRlBfTk9NRU1BTExPQ1wmIzM0OyxcdFx0XCYjMzQ7Tk1BXCYjMzQ7IH0sXG4gXHR7IFwmIzM0O19fR0ZQX01FTUFMTE9DXCYjMzQ7LFx0XHRcJiMzNDtNQVwmIzM0OyB9LFxuIFx0eyBcJiMzNDtfX0dGUF9IQVJEV0FMTFwmIzM0OyxcdFx0XCYjMzQ7SFdcJiMzNDsgfSxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oIGIvdG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaFxuaW5kZXggY2Y3M2JjZDliYjlkNTIuLjAyMmI3YTU2YjZhOWYzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaFxuQEAgLTE2MCw2ICYjNDM7MTYwLDcgQEAgZW51bSB7XG4gI2VuZGlmXG4gXHRERUNMQVJFX1ZNQV9CSVQoVUZGRF9NSU5PUiwgNDEpLFxuIFx0REVDTEFSRV9WTUFfQklUKFNFQUxFRCwgNDIpLFxuJiM0MztcdERFQ0xBUkVfVk1BX0JJVChSRVNFUlZFRF9USFAsIDQzKSxcbiBcdC8qIEZsYWdzIHRoYXQgcmV1c2UgZmxhZ3MgYWJvdmUuICovXG4gXHRERUNMQVJFX1ZNQV9CSVRfQUxJQVMoUEtFWV9CSVQwLCBISUdIX0FSQ0hfMCksXG4gXHRERUNMQVJFX1ZNQV9CSVRfQUxJQVMoUEtFWV9CSVQxLCBISUdIX0FSQ0hfMSksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDc6Mzk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttYWR2aXNlX2h1Z2VwYWdlX3BvbGljeSYjMzQ7LAogICAgJiMzNDtyZXNlcnZlZF90aHBfY2hhcmdlJiMzNDssCiAgICAmIzM0O3Jlc2VydmVkX3RocF91bmNoYXJnZSYjMzQ7LAogICAgJiMzNDtyZXNlcnZlZF90aHBfcGFnZWJsb2NrcyYjMzQ7LAogICAgJiMzNDtjaGVja19yZXNlcnZlZF90aHBfYWxpZ25tZW50JiMzNDssCiAgICAmIzM0O3ZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IE1BRFZfUkVTRVJWRURfVEhQIG1hZHZpc2UgYmVoYXZpb3IgYW5kIFZNX1JFU0VSVkVEX1RIUCBWTUEgZmxhZywgbW9kaWZ5aW5nIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgaW5jbHVkaW5nIHBhZ2UgZmF1bHQgaGFuZGxpbmcsIG1yZW1hcCwgYW5kIFZNQSBzcGxpdHRpbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUga2VybmVsJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDg4YzI4MTU1NjVkZjZjMDRhZDk0ZWJmYTQ4MDA1NGM4MTgzNmZlNzgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEp1biAyNyAwNzozOTo1NCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmggYi9hcmNoL2FscGhhL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oCmluZGV4IDFlNzAwNDY4YTY4NTgwLi42NzJhMmZjMzQzODYxNCAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FscGhhL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oCkBAIC03OCw2ICYjNDM7NzgsOCBAQAogCiAjZGVmaW5lIE1BRFZfQ09MTEFQU0UJMjUJCS8qIFN5bmNocm9ub3VzIGh1Z2VwYWdlIGNvbGxhcHNlICovCiAKJiM0MzsjZGVmaW5lIE1BRFZfUkVTRVJWRURfVEhQIDI2CQkvKiBVc2UgcmVzZXJ2ZWQgdHJhbnNwYXJlbnQgaHVnZXBhZ2VzICovCiYjNDM7CiAjZGVmaW5lIE1BRFZfR1VBUkRfSU5TVEFMTCAxMDIJCS8qIGZhdGFsIHNpZ25hbCBvbiBhY2Nlc3MgdG8gcmFuZ2UgKi8KICNkZWZpbmUgTUFEVl9HVUFSRF9SRU1PVkUgMTAzCQkvKiB1bmd1YXJkIHJhbmdlICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaCBiL2FyY2gvbWlwcy9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaAppbmRleCBiNzAwZGFlMjhjNDgyZC4uYTk0YmY3NGRlZTIxY2EgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL21pcHMvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmgKQEAgLTEwNSw2ICYjNDM7MTA1LDggQEAKIAogI2RlZmluZSBNQURWX0NPTExBUFNFCTI1CQkvKiBTeW5jaHJvbm91cyBodWdlcGFnZSBjb2xsYXBzZSAqLwogCiYjNDM7I2RlZmluZSBNQURWX1JFU0VSVkVEX1RIUCAyNgkJLyogVXNlIHJlc2VydmVkIHRyYW5zcGFyZW50IGh1Z2VwYWdlcyAqLwomIzQzOwogI2RlZmluZSBNQURWX0dVQVJEX0lOU1RBTEwgMTAyCQkvKiBmYXRhbCBzaWduYWwgb24gYWNjZXNzIHRvIHJhbmdlICovCiAjZGVmaW5lIE1BRFZfR1VBUkRfUkVNT1ZFIDEwMwkJLyogdW5ndWFyZCByYW5nZSAqLwogCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oCmluZGV4IGI2YTcwOTUwNjk4N2UwLi5mZTJmZGRlZmI2YzVkOSAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9wYXJpc2MvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmgKQEAgLTcyLDYgJiM0Mzs3Miw4IEBACiAKICNkZWZpbmUgTUFEVl9DT0xMQVBTRQkyNQkJLyogU3luY2hyb25vdXMgaHVnZXBhZ2UgY29sbGFwc2UgKi8KIAomIzQzOyNkZWZpbmUgTUFEVl9SRVNFUlZFRF9USFAgMjYJCS8qIFVzZSByZXNlcnZlZCB0cmFuc3BhcmVudCBodWdlcGFnZXMgKi8KJiM0MzsKICNkZWZpbmUgTUFEVl9IV1BPSVNPTiAgICAgMTAwCQkvKiBwb2lzb24gYSBwYWdlIGZvciB0ZXN0aW5nICovCiAjZGVmaW5lIE1BRFZfU09GVF9PRkZMSU5FIDEwMQkJLyogc29mdCBvZmZsaW5lIHBhZ2UgZm9yIHRlc3RpbmcgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmggYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaAppbmRleCA5OWQ0Y2NlZTdmNmU4YS4uYmI2MDM1MzBiYTc5OWYgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveHRlbnNhL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oCkBAIC0xMTMsNiAmIzQzOzExMyw4IEBACiAKICNkZWZpbmUgTUFEVl9DT0xMQVBTRQkyNQkJLyogU3luY2hyb25vdXMgaHVnZXBhZ2UgY29sbGFwc2UgKi8KIAomIzQzOyNkZWZpbmUgTUFEVl9SRVNFUlZFRF9USFAgMjYJCS8qIFVzZSByZXNlcnZlZCB0cmFuc3BhcmVudCBodWdlcGFnZXMgKi8KJiM0MzsKICNkZWZpbmUgTUFEVl9HVUFSRF9JTlNUQUxMIDEwMgkJLyogZmF0YWwgc2lnbmFsIG9uIGFjY2VzcyB0byByYW5nZSAqLwogI2RlZmluZSBNQURWX0dVQVJEX1JFTU9WRSAxMDMJCS8qIHVuZ3VhcmQgcmFuZ2UgKi8KIApkaWZmIC0tZ2l0IGEvZnMvcHJvYy90YXNrX21tdS5jIGIvZnMvcHJvYy90YXNrX21tdS5jCmluZGV4IGQzMjQwOGY3Y2Q1ZWQyLi42NWM0YjJhNjFhZWFjNyAxMDA2NDQKLS0tIGEvZnMvcHJvYy90YXNrX21tdS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3Byb2MvdGFza19tbXUuYwpAQCAtMTI0NSw2ICYjNDM7MTI0NSw5IEBAIHN0YXRpYyB2b2lkIHNob3dfc21hcF92bWFfZmxhZ3Moc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKICNlbmRpZgogI2lmZGVmIENPTkZJR182NEJJVAogCQlbaWxvZzIoVk1fU0VBTEVEKV0gPSAmIzM0O3NsJiMzNDssCiYjNDM7I2VuZGlmCiYjNDM7I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRQomIzQzOwkJW2lsb2cyKFZNX1JFU0VSVkVEX1RIUCldID0gJiMzNDtydCYjMzQ7LAogI2VuZGlmCiAJfTsKIAlzaXplX3QgaTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZ2ZwLmggYi9pbmNsdWRlL2xpbnV4L2dmcC5oCmluZGV4IGNkZjk1YTlmMGI4N2MxLi4yZDA1OTI5ZmQ4YzcyZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9nZnAuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2dmcC5oCkBAIC0zMCw2ICYjNDM7MzAsOSBAQCBzdGF0aWMgaW5saW5lIGludCBnZnBfbWlncmF0ZXR5cGUoY29uc3QgZ2ZwX3QgZ2ZwX2ZsYWdzKQogCUJVSUxEX0JVR19PTigoKF9fX0dGUF9NT1ZBQkxFIHwgX19fR0ZQX1JFQ0xBSU1BQkxFKSAmZ3Q7Jmd0OwogCQkgICAgICBHRlBfTU9WQUJMRV9TSElGVCkgIT0gTUlHUkFURV9ISUdIQVRPTUlDKTsKIAomIzQzOwlpZiAodW5saWtlbHkoZ2ZwX2ZsYWdzICZhbXA7IF9fR0ZQX1JFU0VSVkVEX1RIUCkpCiYjNDM7CQlyZXR1cm4gTUlHUkFURV9SRVNFUlZFRF9USFA7CiYjNDM7CiAJaWYgKHVubGlrZWx5KHBhZ2VfZ3JvdXBfYnlfbW9iaWxpdHlfZGlzYWJsZWQpKQogCQlyZXR1cm4gTUlHUkFURV9VTk1PVkFCTEU7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZ2ZwX3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L2dmcF90eXBlcy5oCmluZGV4IDU0Y2EwYzg4YmFiNmU4Li4xZjgyYTk0OTFkMzU3ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9nZnBfdHlwZXMuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2dmcF90eXBlcy5oCkBAIC0zMyw3ICYjNDM7MzMsNyBAQCBlbnVtIHsKIAlfX19HRlBfSU9fQklULAogCV9fX0dGUF9GU19CSVQsCiAJX19fR0ZQX1pFUk9fQklULAotCV9fX0dGUF9VTlVTRURfQklULAkvKiAweDIwMHUgdW51c2VkICovCiYjNDM7CV9fX0dGUF9SRVNFUlZFRF9USFBfQklULAogCV9fX0dGUF9ESVJFQ1RfUkVDTEFJTV9CSVQsCiAJX19fR0ZQX0tTV0FQRF9SRUNMQUlNX0JJVCwKIAlfX19HRlBfV1JJVEVfQklULApAQCAtNjksNyAmIzQzOzY5LDcgQEAgZW51bSB7CiAjZGVmaW5lIF9fX0dGUF9JTwkJQklUKF9fX0dGUF9JT19CSVQpCiAjZGVmaW5lIF9fX0dGUF9GUwkJQklUKF9fX0dGUF9GU19CSVQpCiAjZGVmaW5lIF9fX0dGUF9aRVJPCQlCSVQoX19fR0ZQX1pFUk9fQklUKQotLyogMHgyMDB1IHVudXNlZCAqLwomIzQzOyNkZWZpbmUgX19fR0ZQX1JFU0VSVkVEX1RIUAlCSVQoX19fR0ZQX1JFU0VSVkVEX1RIUF9CSVQpCiAjZGVmaW5lIF9fX0dGUF9ESVJFQ1RfUkVDTEFJTQlCSVQoX19fR0ZQX0RJUkVDVF9SRUNMQUlNX0JJVCkKICNkZWZpbmUgX19fR0ZQX0tTV0FQRF9SRUNMQUlNCUJJVChfX19HRlBfS1NXQVBEX1JFQ0xBSU1fQklUKQogI2RlZmluZSBfX19HRlBfV1JJVEUJCUJJVChfX19HRlBfV1JJVEVfQklUKQpAQCAtMTQxLDYgJiM0MzsxNDEsOSBAQCBlbnVtIHsKICAqICVfX0dGUF9OT19PQkpfRVhUIGNhdXNlcyBzbGFiIGFsbG9jYXRpb24gdG8gaGF2ZSBubyBvYmplY3QgZXh0ZW5zaW9uLgogICogbWFya19vYmpfY29kZXRhZ19lbXB0eSgpIHNob3VsZCBiZSBjYWxsZWQgdXBvbiBmcmVlaW5nIGZvciBvYmplY3RzIGFsbG9jYXRlZAogICogd2l0aCB0aGlzIGZsYWcgdG8gaW5kaWNhdGUgdGhhdCB0aGVpciBOVUxMIHRhZ3MgYXJlIGV4cGVjdGVkIGFuZCBub3JtYWwuCiYjNDM7ICoKJiM0MzsgKiAlX19HRlBfUkVTRVJWRURfVEhQIGlzIGFuIGludGVybmFsIGZsYWcgZm9yIHJlc2VydmVkIFRIUCBmYXVsdHMuIEl0IHJlc3RyaWN0cwomIzQzOyAqdGhlIGFsbG9jYXRpb24gdG8gJU1JR1JBVEVfUkVTRVJWRURfVEhQIHBhZ2VibG9ja3MuCiAgKi8KICNkZWZpbmUgX19HRlBfUkVDTEFJTUFCTEUgKChfX2ZvcmNlIGdmcF90KV9fX0dGUF9SRUNMQUlNQUJMRSkKICNkZWZpbmUgX19HRlBfV1JJVEUJKChfX2ZvcmNlIGdmcF90KV9fX0dGUF9XUklURSkKQEAgLTE0OCw2ICYjNDM7MTUxLDcgQEAgZW51bSB7CiAjZGVmaW5lIF9fR0ZQX1RISVNOT0RFCSgoX19mb3JjZSBnZnBfdClfX19HRlBfVEhJU05PREUpCiAjZGVmaW5lIF9fR0ZQX0FDQ09VTlQJKChfX2ZvcmNlIGdmcF90KV9fX0dGUF9BQ0NPVU5UKQogI2RlZmluZSBfX0dGUF9OT19PQkpfRVhUICAgKChfX2ZvcmNlIGdmcF90KV9fX0dGUF9OT19PQkpfRVhUKQomIzQzOyNkZWZpbmUgX19HRlBfUkVTRVJWRURfVEhQICgoX19mb3JjZSBnZnBfdClfX19HRlBfUkVTRVJWRURfVEhQKQogCiAvKioKICAqIERPQzogV2F0ZXJtYXJrIG1vZGlmaWVycwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9odWdlX21tLmggYi9pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaAppbmRleCBhZDIwZjdmOGMxNzk0NC4uNGZlOTY1MWNkODZiNWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaHVnZV9tbS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvaHVnZV9tbS5oCkBAIC0zMzAsNiAmIzQzOzMzMCw4IEBAIHVuc2lnbmVkIGxvbmcgdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCiAJCWlmICh2bV9mbGFncyAmYW1wOyBWTV9IVUdFUEFHRSkKIAkJCW1hc2sgfD0gUkVBRF9PTkNFKGh1Z2VfYW5vbl9vcmRlcnNfbWFkdmlzZSk7CiYjNDM7CQlpZiAodm1fZmxhZ3MgJmFtcDsgVk1fUkVTRVJWRURfVEhQKQomIzQzOwkJCW1hc2sgfD0gQklUKFBNRF9PUkRFUik7CiAJCWlmIChodWdlcGFnZV9nbG9iYWxfYWx3YXlzKCkgfHwKIAkJICAgICgodm1fZmxhZ3MgJmFtcDsgVk1fSFVHRVBBR0UpICZhbXA7JmFtcDsgaHVnZXBhZ2VfZ2xvYmFsX2VuYWJsZWQoKSkpCiAJCQltYXNrIHw9IFJFQURfT05DRShodWdlX2Fub25fb3JkZXJzX2luaGVyaXQpOwpAQCAtMzcxLDcgJiM0MzszNzMsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgdm1hX3RocF9kaXNhYmxlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkgKiBBcmUgVEhQcyBkaXNhYmxlZCBvbmx5IGZvciBWTUFzIHdoZXJlIHdlIGRpZG4mIzM5O3QgZ2V0IGFuIGV4cGxpY2l0CiAJICogYWR2aXNlIHRvIHVzZSB0aGVtPwogCSAqLwotCWlmICh2bV9mbGFncyAmYW1wOyBWTV9IVUdFUEFHRSkKJiM0MzsJaWYgKHZtX2ZsYWdzICZhbXA7IChWTV9IVUdFUEFHRSB8IFZNX1JFU0VSVkVEX1RIUCkpCiAJCXJldHVybiBmYWxzZTsKIAkvKgogCSAqIEZvcmNpbmcgYSBjb2xsYXBzZSAoZS5nLiwgbWFkdl9jb2xsYXBzZSksIGlzIGEgY2xlYXIgYWR2aWNlIHRvCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmgKaW5kZXggNDg1ZGY5YzJkYmRkYjMuLjI3OGNmNGJmZDRlYzViIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbS5oCkBAIC0zNTMsNiAmIzQzOzM1Myw3IEBAIGVudW0gewogI2VuZGlmCiAJREVDTEFSRV9WTUFfQklUKFVGRkRfTUlOT1IsIDQxKSwKIAlERUNMQVJFX1ZNQV9CSVQoU0VBTEVELCA0MiksCiYjNDM7CURFQ0xBUkVfVk1BX0JJVChSRVNFUlZFRF9USFAsIDQzKSwKIAkvKiBGbGFncyB0aGF0IHJldXNlIGZsYWdzIGFib3ZlLiAqLwogCURFQ0xBUkVfVk1BX0JJVF9BTElBUyhQS0VZX0JJVDAsIEhJR0hfQVJDSF8wKSwKIAlERUNMQVJFX1ZNQV9CSVRfQUxJQVMoUEtFWV9CSVQxLCBISUdIX0FSQ0hfMSksCkBAIC01MjYsNiAmIzQzOzUyNywxMiBAQCBlbnVtIHsKICNkZWZpbmUgVk1BX0RST1BQQUJMRQkJRU1QVFlfVk1BX0ZMQUdTCiAjZW5kaWYKIAomIzQzOyNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UKJiM0MzsjZGVmaW5lIFZNX1JFU0VSVkVEX1RIUAkJSU5JVF9WTV9GTEFHKFJFU0VSVkVEX1RIUCkKJiM0MzsjZWxzZQomIzQzOyNkZWZpbmUgVk1fUkVTRVJWRURfVEhQCQlWTV9OT05FCiYjNDM7I2VuZGlmCiYjNDM7CiAvKiBCaXRzIHNldCBpbiB0aGUgVk1BIHVudGlsIHRoZSBzdGFjayBpcyBpbiBpdHMgZmluYWwgbG9jYXRpb24gKi8KICNkZWZpbmUgVk1fU1RBQ0tfSU5DT01QTEVURV9TRVRVUCAoVk1fUkFORF9SRUFEIHwgVk1fU0VRX1JFQUQgfCBWTV9TVEFDS19FQVJMWSkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaCBiL2luY2x1ZGUvbGludXgvbW16b25lLmgKaW5kZXggY2EyNzEyMTg3MTQ3NWMuLjQ0MThkMGM5YWNjZGM4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW16b25lLmgKQEAgLTEzMywxMCAmIzQzOzEzMyw5IEBAIGVudW0gbWlncmF0ZXR5cGUgewogCSAqIF9fZnJlZV9wYWdlYmxvY2tfY21hKCkgZnVuY3Rpb24uCiAJICovCiAJTUlHUkFURV9DTUEsCi0JX19NSUdSQVRFX1RZUEVfRU5EID0gTUlHUkFURV9DTUEsCi0jZWxzZQotCV9fTUlHUkFURV9UWVBFX0VORCA9IE1JR1JBVEVfSElHSEFUT01JQywKICNlbmRpZgomIzQzOwlNSUdSQVRFX1JFU0VSVkVEX1RIUCwKJiM0MzsJX19NSUdSQVRFX1RZUEVfRU5EID0gTUlHUkFURV9SRVNFUlZFRF9USFAsCiAjaWZkZWYgQ09ORklHX01FTU9SWV9JU09MQVRJT04KIAlNSUdSQVRFX0lTT0xBVEUsCS8qIGNhbiYjMzk7dCBhbGxvY2F0ZSBmcm9tIGhlcmUgKi8KICNlbmRpZgpAQCAtMTYxLDYgJiM0MzsxNjAsOSBAQCBleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pZ3JhdGV0eXBlX25hbWVzW01JR1JBVEVfVFlQRVNdOwogIyAgZGVmaW5lIGlzX21pZ3JhdGVfY21hX2ZvbGlvKGZvbGlvLCBwZm4pIGZhbHNlCiAjZW5kaWYKIAomIzQzOyNkZWZpbmUgaXNfbWlncmF0ZV9yZXNlcnZlZF90aHAobWlncmF0ZXR5cGUpIFwKJiM0MzsJdW5saWtlbHkoKG1pZ3JhdGV0eXBlKSA9PSBNSUdSQVRFX1JFU0VSVkVEX1RIUCkKJiM0MzsKIHN0YXRpYyBpbmxpbmUgYm9vbCBpc19taWdyYXRlX21vdmFibGUoaW50IG10KQogewogCXJldHVybiBpc19taWdyYXRlX2NtYShtdCkgfHwgbXQgPT0gTUlHUkFURV9NT1ZBQkxFOwpAQCAtOTc1LDYgJiM0Mzs5NzcsOSBAQCBzdHJ1Y3Qgem9uZSB7CiAJdW5zaWduZWQgbG9uZyBucl9yZXNlcnZlZF9oaWdoYXRvbWljOwogCXVuc2lnbmVkIGxvbmcgbnJfZnJlZV9oaWdoYXRvbWljOwogCiYjNDM7CXVuc2lnbmVkIGxvbmcgbnJfcmVzZXJ2ZWRfdGhwOwomIzQzOwl1bnNpZ25lZCBsb25nIG5yX2ZyZWVfcmVzZXJ2ZWRfdGhwOwomIzQzOwogCS8qCiAJICogV2UgZG9uJiMzOTt0IGtub3cgaWYgdGhlIG1lbW9yeSB0aGF0IHdlJiMzOTtyZSBnb2luZyB0byBhbGxvY2F0ZSB3aWxsIGJlCiAJICogZnJlZWFibGUgb3IvYW5kIGl0IHdpbGwgYmUgcmVsZWFzZWQgZXZlbnR1YWxseSwgc28gdG8gYXZvaWQgdG90YWxseQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvbW1mbGFncy5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvbW1mbGFncy5oCmluZGV4IGE2ZTVhNDRjOWI0Mjk5Li4zZGI0MGViZDcwNjBiZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvbW1mbGFncy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL21tZmxhZ3MuaApAQCAtMjQsNiAmIzQzOzI0LDcgQEAKIAlUUkFDRV9HRlBfRU0oSU8pCQkJXAogCVRSQUNFX0dGUF9FTShGUykJCQlcCiAJVFJBQ0VfR0ZQX0VNKFpFUk8pCQkJXAomIzQzOwlUUkFDRV9HRlBfRU0oUkVTRVJWRURfVEhQKQkJXAogCVRSQUNFX0dGUF9FTShESVJFQ1RfUkVDTEFJTSkJCVwKIAlUUkFDRV9HRlBfRU0oS1NXQVBEX1JFQ0xBSU0pCQlcCiAJVFJBQ0VfR0ZQX0VNKFdSSVRFKQkJCVwKQEAgLTcyLDggJiM0Mzs3Myw3IEBACiAKIFRSQUNFX0dGUF9GTEFHUwogCi0vKiBKdXN0IGluIGNhc2UgdGhlc2UgYXJlIGV2ZXIgdXNlZCAqLwotVFJBQ0VfREVGSU5FX0VOVU0oX19fR0ZQX1VOVVNFRF9CSVQpOwomIzQzOy8qIEp1c3QgaW4gY2FzZSB0aGlzIGlzIGV2ZXIgdXNlZCAqLwogVFJBQ0VfREVGSU5FX0VOVU0oX19fR0ZQX0xBU1RfQklUKTsKIAogI2RlZmluZSBnZnBmbGFnX3N0cmluZyhmbGFnKSB7KF9fZm9yY2UgdW5zaWduZWQgbG9uZylmbGFnLCAjZmxhZ30KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9tbWFuLWNvbW1vbi5oIGIvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL21tYW4tY29tbW9uLmgKaW5kZXggZWYxYzI3ZmEzYzU3MGYuLmIzZDE0NDg5MzVlYWQxIDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvbW1hbi1jb21tb24uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvbW1hbi1jb21tb24uaApAQCAtNzksNiAmIzQzOzc5LDggQEAKIAogI2RlZmluZSBNQURWX0NPTExBUFNFCTI1CQkvKiBTeW5jaHJvbm91cyBodWdlcGFnZSBjb2xsYXBzZSAqLwogCiYjNDM7I2RlZmluZSBNQURWX1JFU0VSVkVEX1RIUCAyNgkJLyogVXNlIHJlc2VydmVkIHRyYW5zcGFyZW50IGh1Z2VwYWdlcyAqLwomIzQzOwogI2RlZmluZSBNQURWX0dVQVJEX0lOU1RBTEwgMTAyCQkvKiBmYXRhbCBzaWduYWwgb24gYWNjZXNzIHRvIHJhbmdlICovCiAjZGVmaW5lIE1BRFZfR1VBUkRfUkVNT1ZFIDEwMwkJLyogdW5ndWFyZCByYW5nZSAqLwogCmRpZmYgLS1naXQgYS9tbS9NYWtlZmlsZSBiL21tL01ha2VmaWxlCmluZGV4IGVmZjlmOWU3ZTA2MWMxLi5mZDc0YTczOTJlMzQ2NyAxMDA2NDQKLS0tIGEvbW0vTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvbW0vTWFrZWZpbGUKQEAgLTk4LDcgJiM0Mzs5OCw3IEBAIG9iai0kKENPTkZJR19NRU1URVNUKQkJJiM0Mzs9IG1lbXRlc3Qubwogb2JqLSQoQ09ORklHX01JR1JBVElPTikgJiM0Mzs9IG1pZ3JhdGUubwogb2JqLSQoQ09ORklHX05VTUEpICYjNDM7PSBtZW1vcnktdGllcnMubwogb2JqLSQoQ09ORklHX0RFVklDRV9NSUdSQVRJT04pICYjNDM7PSBtaWdyYXRlX2RldmljZS5vCi1vYmotJChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpICYjNDM7PSBodWdlX21lbW9yeS5vIGtodWdlcGFnZWQubwomIzQzO29iai0kKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgJiM0Mzs9IGh1Z2VfbWVtb3J5Lm8ga2h1Z2VwYWdlZC5vIHJlc2VydmVkX3RocC5vCiBvYmotJChDT05GSUdfUEFHRV9DT1VOVEVSKSAmIzQzOz0gcGFnZV9jb3VudGVyLm8KIG9iai0kKENPTkZJR19MSVZFVVBEQVRFX01FTUZEKSAmIzQzOz0gbWVtZmRfbHVvLm8KIG9iai0kKENPTkZJR19NRU1DR19WMSkgJiM0Mzs9IG1lbWNvbnRyb2wtdjEubwpkaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmMKaW5kZXggMmJjY2IwYTUzYTBhNjAuLjY2ZDg1YTJmYTg1NWYzIDEwMDY0NAotLS0gYS9tbS9odWdlX21lbW9yeS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2VfbWVtb3J5LmMKQEAgLTEyNjcsNiAmIzQzOzEyNjcsOSBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICp2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJY29uc3QgaW50IG9yZGVyID0gSFBBR0VfUE1EX09SREVSOwogCXN0cnVjdCBmb2xpbyAqZm9saW87CiAKJiM0MzsJaWYgKHZtYS0mZ3Q7dm1fZmxhZ3MgJmFtcDsgVk1fUkVTRVJWRURfVEhQKQomIzQzOwkJZ2ZwIHw9IF9fR0ZQX1JFU0VSVkVEX1RIUDsKJiM0MzsKIAlmb2xpbyA9IHZtYV9hbGxvY19mb2xpbyhnZnAsIG9yZGVyLCB2bWEsIGFkZHIgJmFtcDsgSFBBR0VfUE1EX01BU0spOwogCiAJaWYgKHVubGlrZWx5KCFmb2xpbykpIHsKQEAgLTEzNDQsOCAmIzQzOzEzNDcsMTEgQEAgc3RhdGljIHZtX2ZhdWx0X3QgX19kb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKIAl2bV9mYXVsdF90IHJldCA9IDA7CiAKIAlmb2xpbyA9IHZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZCh2bWEsIHZtZi0mZ3Q7YWRkcmVzcyk7Ci0JaWYgKHVubGlrZWx5KCFmb2xpbykpCiYjNDM7CWlmICh1bmxpa2VseSghZm9saW8pKSB7CiYjNDM7CQlpZiAodm1hLSZndDt2bV9mbGFncyAmYW1wOyBWTV9SRVNFUlZFRF9USFApCiYjNDM7CQkJcmV0dXJuIFZNX0ZBVUxUX09PTTsKIAkJcmV0dXJuIFZNX0ZBVUxUX0ZBTExCQUNLOwomIzQzOwl9CiAKIAlwZ3RhYmxlID0gcHRlX2FsbG9jX29uZSh2bWEtJmd0O3ZtX21tKTsKIAlpZiAodW5saWtlbHkoIXBndGFibGUpKSB7CkBAIC0xNDgwLDE1ICYjNDM7MTQ4NiwxNyBAQCB2bV9mYXVsdF90IGRvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKQogCXZtX2ZhdWx0X3QgcmV0OwogCiAJaWYgKCF0aHBfdm1hX3N1aXRhYmxlX29yZGVyKHZtYSwgaGFkZHIsIFBNRF9PUkRFUikpCi0JCXJldHVybiBWTV9GQVVMVF9GQUxMQkFDSzsKJiM0MzsJCXJldHVybiAodm1hLSZndDt2bV9mbGFncyAmYW1wOyBWTV9SRVNFUlZFRF9USFApID8gVk1fRkFVTFRfT09NIDoKJiM0MzsJCQkJCQkJICAgVk1fRkFVTFRfRkFMTEJBQ0s7CiAJcmV0ID0gdm1mX2Fub25fcHJlcGFyZSh2bWYpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAJa2h1Z2VwYWdlZF9lbnRlcl92bWEodm1hLCB2bWEtJmd0O3ZtX2ZsYWdzKTsKIAotCWlmICghKHZtZi0mZ3Q7ZmxhZ3MgJmFtcDsgRkFVTFRfRkxBR19XUklURSkgJmFtcDsmYW1wOwotCQkJIW1tX2ZvcmJpZHNfemVyb3BhZ2Uodm1hLSZndDt2bV9tbSkgJmFtcDsmYW1wOwotCQkJdHJhbnNwYXJlbnRfaHVnZXBhZ2VfdXNlX3plcm9fcGFnZSgpKSB7CiYjNDM7CWlmICghKHZtYS0mZ3Q7dm1fZmxhZ3MgJmFtcDsgVk1fUkVTRVJWRURfVEhQKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAhKHZtZi0mZ3Q7ZmxhZ3MgJmFtcDsgRkFVTFRfRkxBR19XUklURSkgJmFtcDsmYW1wOwomIzQzOwkgICAgIW1tX2ZvcmJpZHNfemVyb3BhZ2Uodm1hLSZndDt2bV9tbSkgJmFtcDsmYW1wOwomIzQzOwkgICAgdHJhbnNwYXJlbnRfaHVnZXBhZ2VfdXNlX3plcm9fcGFnZSgpKSB7CiAJCXBndGFibGVfdCBwZ3RhYmxlOwogCQlzdHJ1Y3QgZm9saW8gKnplcm9fZm9saW87CiAJCXZtX2ZhdWx0X3QgcmV0OwpkaWZmIC0tZ2l0IGEvbW0vaW50ZXJuYWwuaCBiL21tL2ludGVybmFsLmgKaW5kZXggMTgxZTc5ZjFkNmEyMDcuLjRiMmExM2QzNTM3NzIxIDEwMDY0NAotLS0gYS9tbS9pbnRlcm5hbC5oCiYjNDM7JiM0MzsmIzQzOyBiL21tL2ludGVybmFsLmgKQEAgLTE0NzcsNiAmIzQzOzE0NzcsNyBAQCB1bnNpZ25lZCBpbnQgcmVjbGFpbV9jbGVhbl9wYWdlc19mcm9tX2xpc3Qoc3RydWN0IHpvbmUgKnpvbmUsCiAjZGVmaW5lIEFMTE9DX0hJR0hBVE9NSUMJMHgyMDAgLyogQWxsb3dzIGFjY2VzcyB0byBNSUdSQVRFX0hJR0hBVE9NSUMgKi8KICNkZWZpbmUgQUxMT0NfVFJZTE9DSwkJMHg0MDAgLyogT25seSB1c2Ugc3Bpbl90cnlsb2NrIGluIGFsbG9jYXRpb24gcGF0aCAqLwogI2RlZmluZSBBTExPQ19LU1dBUEQJCTB4ODAwIC8qIGFsbG93IHdha2luZyBvZiBrc3dhcGQsIF9fR0ZQX0tTV0FQRF9SRUNMQUlNIHNldCAqLwomIzQzOyNkZWZpbmUgQUxMT0NfUkVTRVJWRURfVEhQCTB4MTAwMCAvKiBBbGxvd3MgYWNjZXNzIHRvIHJlc2VydmVkIFRIUCBwYWdlYmxvY2tzICovCiAKIC8qIEZsYWdzIHRoYXQgYWxsb3cgYWxsb2NhdGlvbnMgYmVsb3cgdGhlIG1pbiB3YXRlcm1hcmsuICovCiAjZGVmaW5lIEFMTE9DX1JFU0VSVkVTIChBTExPQ19OT05fQkxPQ0t8QUxMT0NfTUlOX1JFU0VSVkV8QUxMT0NfSElHSEFUT01JQ3xBTExPQ19PT00pCkBAIC0xOTUxLDQgJiM0MzsxOTUyLDkgQEAgc3RhdGljIGlubGluZSBpbnQgZ2V0X3N5c2N0bF9tYXhfbWFwX2NvdW50KHZvaWQpCiBib29sIG1heV9leHBhbmRfdm0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MsCiAJCSAgIHVuc2lnbmVkIGxvbmcgbnBhZ2VzKTsKIAomIzQzO3Vuc2lnbmVkIGxvbmcgcmVzZXJ2ZWRfdGhwX3BhZ2VibG9ja3ModW5zaWduZWQgbG9uZyBucl9ocGFnZXMpOwomIzQzO3Vuc2lnbmVkIGxvbmcgcmVzZXJ2ZWRfdGhwX2hwYWdlX25yKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTsKJiM0MztpbnQgcmVzZXJ2ZWRfdGhwX2NoYXJnZSh1bnNpZ25lZCBsb25nIG5yX2hwYWdlcyk7CiYjNDM7dm9pZCByZXNlcnZlZF90aHBfdW5jaGFyZ2UodW5zaWduZWQgbG9uZyBucl9ocGFnZXMpOwomIzQzOwogI2VuZGlmCS8qIF9fTU1fSU5URVJOQUxfSCAqLwpkaWZmIC0tZ2l0IGEvbW0va2h1Z2VwYWdlZC5jIGIvbW0va2h1Z2VwYWdlZC5jCmluZGV4IDYxN2JjYTc2ZGI0OWI2Li44MDI5M2U4YzFlNGU3NiAxMDA2NDQKLS0tIGEvbW0va2h1Z2VwYWdlZC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2todWdlcGFnZWQuYwpAQCAtNDUxLDYgJiM0Mzs0NTEsNyBAQCBpbnQgaHVnZXBhZ2VfbWFkdmlzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAlzd2l0Y2ggKGFkdmljZSkgewogCWNhc2UgTUFEVl9IVUdFUEFHRToKIAkJKnZtX2ZsYWdzICZhbXA7PSB+Vk1fTk9IVUdFUEFHRTsKJiM0MzsJCSp2bV9mbGFncyAmYW1wOz0gflZNX1JFU0VSVkVEX1RIUDsKIAkJKnZtX2ZsYWdzIHw9IFZNX0hVR0VQQUdFOwogCQkvKgogCQkgKiBJZiB0aGUgdm1hIGJlY29tZSBnb29kIGZvciBraHVnZXBhZ2VkIHRvIHNjYW4sCkBAIC00NjEsNiAmIzQzOzQ2Miw3IEBAIGludCBodWdlcGFnZV9tYWR2aXNlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQlicmVhazsKIAljYXNlIE1BRFZfTk9IVUdFUEFHRToKIAkJKnZtX2ZsYWdzICZhbXA7PSB+Vk1fSFVHRVBBR0U7CiYjNDM7CQkqdm1fZmxhZ3MgJmFtcDs9IH5WTV9SRVNFUlZFRF9USFA7CiAJCSp2bV9mbGFncyB8PSBWTV9OT0hVR0VQQUdFOwogCQkvKgogCQkgKiBTZXR0aW5nIFZNX05PSFVHRVBBR0Ugd2lsbCBwcmV2ZW50IGtodWdlcGFnZWQgZnJvbSBzY2FubmluZwpAQCAtNDY4LDYgJiM0Mzs0NzAsMTIgQEAgaW50IGh1Z2VwYWdlX21hZHZpc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCSAqIGl0IGdvdCByZWdpc3RlcmVkIGJlZm9yZSBWTV9OT0hVR0VQQUdFIHdhcyBzZXQuCiAJCSAqLwogCQlicmVhazsKJiM0MzsJY2FzZSBNQURWX1JFU0VSVkVEX1RIUDoKJiM0MzsJCSp2bV9mbGFncyAmYW1wOz0gfihWTV9IVUdFUEFHRSB8IFZNX05PSFVHRVBBR0UpOwomIzQzOwkJKnZtX2ZsYWdzIHw9IFZNX1JFU0VSVkVEX1RIUDsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9tbS9tYWR2aXNlLmMgYi9tbS9tYWR2aXNlLmMKaW5kZXggY2Q5YmIwNzcwNzJjY2IuLmRkOTExMDVkYjY4Yzc1IDEwMDY0NAotLS0gYS9tbS9tYWR2aXNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWFkdmlzZS5jCkBAIC0xMyw2ICYjNDM7MTMsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3BhZ2UtaXNvbGF0aW9uLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGFnZV9pZGxlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdXNlcmZhdWx0ZmRfay5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9odWdlX21tLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaHVnZXRsYi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2ZhbGxvYy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2ZhZHZpc2UuaCZndDsKQEAgLTEzMzEsNiAmIzQzOzEzMzIsNjUgQEAgc3RhdGljIGJvb2wgY2FuX21hZHZpc2VfbW9kaWZ5KHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKQogfQogI2VuZGlmCiAKJiM0MztzdGF0aWMgYm9vbCByZXNlcnZlZF90aHBfbWFkdmlzZV9hbGlnbmVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAomIzQzOwkJCQkJIHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yX3JhbmdlICpyYW5nZSkKJiM0Mzt7CiYjNDM7CWlmICghKHZtYS0mZ3Q7dm1fZmxhZ3MgJmFtcDsgVk1fUkVTRVJWRURfVEhQKSkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwlyZXR1cm4gSVNfQUxJR05FRChyYW5nZS0mZ3Q7c3RhcnQsIEhQQUdFX1BNRF9TSVpFKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAgICBJU19BTElHTkVEKHJhbmdlLSZndDtlbmQsIEhQQUdFX1BNRF9TSVpFKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBtYWR2aXNlX2h1Z2VwYWdlX3BvbGljeShzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvciwKJiM0MzsJCQkJICAgdm1fZmxhZ3NfdCAqbmV3X2ZsYWdzLAomIzQzOwkJCQkgICB1bnNpZ25lZCBsb25nICpyZXNlcnZlZF9ocGFnZXMsCiYjNDM7CQkJCSAgIGJvb2wgKmNoYXJnZV9yZXNlcnZlZF90aHAsCiYjNDM7CQkJCSAgIGJvb2wgKnVuY2hhcmdlX3Jlc2VydmVkX3RocCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gbWFkdl9iZWhhdmlvci0mZ3Q7dm1hOwomIzQzOwlzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvcl9yYW5nZSAqcmFuZ2UgPSAmYW1wO21hZHZfYmVoYXZpb3ItJmd0O3JhbmdlOwomIzQzOwl1bnNpZ25lZCBsb25nIGhwYWdlczsKJiM0MzsJaW50IGJlaGF2aW9yID0gbWFkdl9iZWhhdmlvci0mZ3Q7YmVoYXZpb3I7CiYjNDM7CWludCBlcnJvcjsKJiM0MzsKJiM0MzsJc3dpdGNoIChiZWhhdmlvcikgewomIzQzOwljYXNlIE1BRFZfSFVHRVBBR0U6CiYjNDM7CWNhc2UgTUFEVl9OT0hVR0VQQUdFOgomIzQzOwkJZXJyb3IgPSBodWdlcGFnZV9tYWR2aXNlKHZtYSwgbmV3X2ZsYWdzLCBiZWhhdmlvcik7CiYjNDM7CQlpZiAoZXJyb3IpCiYjNDM7CQkJcmV0dXJuIGVycm9yOwomIzQzOwkJKnVuY2hhcmdlX3Jlc2VydmVkX3RocCA9ICh2bWEtJmd0O3ZtX2ZsYWdzICZhbXA7IFZNX1JFU0VSVkVEX1RIUCkgJmFtcDsmYW1wOwomIzQzOwkJCQkJICEoKm5ld19mbGFncyAmYW1wOyBWTV9SRVNFUlZFRF9USFApOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CWNhc2UgTUFEVl9SRVNFUlZFRF9USFA6CiYjNDM7CQlpZiAoIUlTX0VOQUJMRUQoQ09ORklHXzY0QklUKSkKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCWlmICghdm1hX2lzX2Fub255bW91cyh2bWEpIHx8ICgqbmV3X2ZsYWdzICZhbXA7IFZNX1NIQVJFRCkgfHwKJiM0MzsJCSAgICAoKm5ld19mbGFncyAmYW1wOyBWTV9TUEVDSUFMKSkKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCWlmICghSVNfQUxJR05FRChyYW5nZS0mZ3Q7c3RhcnQsIEhQQUdFX1BNRF9TSVpFKSB8fAomIzQzOwkJICAgICFJU19BTElHTkVEKHJhbmdlLSZndDtlbmQsIEhQQUdFX1BNRF9TSVpFKSkKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJCWVycm9yID0gaHVnZXBhZ2VfbWFkdmlzZSh2bWEsIG5ld19mbGFncywgYmVoYXZpb3IpOwomIzQzOwkJaWYgKGVycm9yKQomIzQzOwkJCXJldHVybiBlcnJvcjsKJiM0MzsKJiM0MzsJCWlmICghKHZtYS0mZ3Q7dm1fZmxhZ3MgJmFtcDsgVk1fUkVTRVJWRURfVEhQKSkgewomIzQzOwkJCWhwYWdlcyA9IHJlc2VydmVkX3RocF9ocGFnZV9ucihyYW5nZS0mZ3Q7c3RhcnQsIHJhbmdlLSZndDtlbmQpOwomIzQzOwkJCWVycm9yID0gcmVzZXJ2ZWRfdGhwX2NoYXJnZShocGFnZXMpOwomIzQzOwkJCWlmIChlcnJvcikKJiM0MzsJCQkJcmV0dXJuIGVycm9yOwomIzQzOwkJCSpyZXNlcnZlZF9ocGFnZXMgPSBocGFnZXM7CiYjNDM7CQkJKmNoYXJnZV9yZXNlcnZlZF90aHAgPSB0cnVlOwomIzQzOwkJfQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzO30KJiM0MzsKIC8qCiAgKiBBcHBseSBhbiBtYWR2aXNlIGJlaGF2aW9yIHRvIGEgcmVnaW9uIG9mIGEgdm1hLiAgbWFkdmlzZV91cGRhdGVfdm1hCiAgKiB3aWxsIGhhbmRsZSBzcGxpdHRpbmcgYSB2bSBhcmVhIGludG8gc2VwYXJhdGUgYXJlYXMsIGVhY2ggYXJlYSB3aXRoIGl0cyBvd24KQEAgLTEzNDIsNiAmIzQzOzE0MDIsOSBAQCBzdGF0aWMgaW50IG1hZHZpc2Vfdm1hX2JlaGF2aW9yKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKQogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gbWFkdl9iZWhhdmlvci0mZ3Q7dm1hOwogCXZtX2ZsYWdzX3QgbmV3X2ZsYWdzID0gdm1hLSZndDt2bV9mbGFnczsKIAlzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvcl9yYW5nZSAqcmFuZ2UgPSAmYW1wO21hZHZfYmVoYXZpb3ItJmd0O3JhbmdlOwomIzQzOwl1bnNpZ25lZCBsb25nIHJlc2VydmVkX2hwYWdlcyA9IDA7CiYjNDM7CWJvb2wgY2hhcmdlX3Jlc2VydmVkX3RocCA9IGZhbHNlOwomIzQzOwlib29sIHVuY2hhcmdlX3Jlc2VydmVkX3RocCA9IGZhbHNlOwogCWludCBlcnJvcjsKIAogCWlmICh1bmxpa2VseSghY2FuX21hZHZpc2VfbW9kaWZ5KG1hZHZfYmVoYXZpb3IpKSkKQEAgLTEzNTMsMTQgJiM0MzsxNDE2LDIyIEBAIHN0YXRpYyBpbnQgbWFkdmlzZV92bWFfYmVoYXZpb3Ioc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpCiAJY2FzZSBNQURWX1dJTExORUVEOgogCQlyZXR1cm4gbWFkdmlzZV93aWxsbmVlZChtYWR2X2JlaGF2aW9yKTsKIAljYXNlIE1BRFZfQ09MRDoKJiM0MzsJCWlmICghcmVzZXJ2ZWRfdGhwX21hZHZpc2VfYWxpZ25lZCh2bWEsIHJhbmdlKSkKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKIAkJcmV0dXJuIG1hZHZpc2VfY29sZChtYWR2X2JlaGF2aW9yKTsKIAljYXNlIE1BRFZfUEFHRU9VVDoKJiM0MzsJCWlmICghcmVzZXJ2ZWRfdGhwX21hZHZpc2VfYWxpZ25lZCh2bWEsIHJhbmdlKSkKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKIAkJcmV0dXJuIG1hZHZpc2VfcGFnZW91dChtYWR2X2JlaGF2aW9yKTsKIAljYXNlIE1BRFZfRlJFRToKIAljYXNlIE1BRFZfRE9OVE5FRUQ6CiAJY2FzZSBNQURWX0RPTlRORUVEX0xPQ0tFRDoKJiM0MzsJCWlmICghcmVzZXJ2ZWRfdGhwX21hZHZpc2VfYWxpZ25lZCh2bWEsIHJhbmdlKSkKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKIAkJcmV0dXJuIG1hZHZpc2VfZG9udG5lZWRfZnJlZShtYWR2X2JlaGF2aW9yKTsKIAljYXNlIE1BRFZfQ09MTEFQU0U6CiYjNDM7CQlpZiAodm1hLSZndDt2bV9mbGFncyAmYW1wOyBWTV9SRVNFUlZFRF9USFApCiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiAJCXJldHVybiBtYWR2aXNlX2NvbGxhcHNlKHZtYSwgcmFuZ2UtJmd0O3N0YXJ0LCByYW5nZS0mZ3Q7ZW5kLAogCQkJJmFtcDttYWR2X2JlaGF2aW9yLSZndDtsb2NrX2Ryb3BwZWQpOwogCWNhc2UgTUFEVl9HVUFSRF9JTlNUQUxMOgpAQCAtMTQxNiw3ICYjNDM7MTQ4NywxMSBAQCBzdGF0aWMgaW50IG1hZHZpc2Vfdm1hX2JlaGF2aW9yKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKQogCQlicmVhazsKIAljYXNlIE1BRFZfSFVHRVBBR0U6CiAJY2FzZSBNQURWX05PSFVHRVBBR0U6Ci0JCWVycm9yID0gaHVnZXBhZ2VfbWFkdmlzZSh2bWEsICZhbXA7bmV3X2ZsYWdzLCBiZWhhdmlvcik7CiYjNDM7CWNhc2UgTUFEVl9SRVNFUlZFRF9USFA6CiYjNDM7CQllcnJvciA9IG1hZHZpc2VfaHVnZXBhZ2VfcG9saWN5KG1hZHZfYmVoYXZpb3IsICZhbXA7bmV3X2ZsYWdzLAomIzQzOwkJCQkJCSZhbXA7cmVzZXJ2ZWRfaHBhZ2VzLAomIzQzOwkJCQkJCSZhbXA7Y2hhcmdlX3Jlc2VydmVkX3RocCwKJiM0MzsJCQkJCQkmYW1wO3VuY2hhcmdlX3Jlc2VydmVkX3RocCk7CiAJCWlmIChlcnJvcikKIAkJCWdvdG8gb3V0OwogCQlicmVhazsKQEAgLTE0MzEsNiAmIzQzOzE1MDYsMTEgQEAgc3RhdGljIGludCBtYWR2aXNlX3ZtYV9iZWhhdmlvcihzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcikKIAlWTV9XQVJOX09OX09OQ0UobWFkdl9iZWhhdmlvci0mZ3Q7bG9ja19tb2RlICE9IE1BRFZJU0VfTU1BUF9XUklURV9MT0NLKTsKIAogCWVycm9yID0gbWFkdmlzZV91cGRhdGVfdm1hKG5ld19mbGFncywgbWFkdl9iZWhhdmlvcik7CiYjNDM7CWlmIChlcnJvciAmYW1wOyZhbXA7IGNoYXJnZV9yZXNlcnZlZF90aHApCiYjNDM7CQlyZXNlcnZlZF90aHBfdW5jaGFyZ2UocmVzZXJ2ZWRfaHBhZ2VzKTsKJiM0MzsJZWxzZSBpZiAoIWVycm9yICZhbXA7JmFtcDsgdW5jaGFyZ2VfcmVzZXJ2ZWRfdGhwKQomIzQzOwkJcmVzZXJ2ZWRfdGhwX3VuY2hhcmdlKHJlc2VydmVkX3RocF9ocGFnZV9ucihyYW5nZS0mZ3Q7c3RhcnQsCiYjNDM7CQkJCQkJCSAgICByYW5nZS0mZ3Q7ZW5kKSk7CiBvdXQ6CiAJLyoKIAkgKiBtYWR2aXNlKCkgcmV0dXJucyBFQUdBSU4gaWYga2VybmVsIHJlc291cmNlcywgc3VjaCBhcwpAQCAtMTU0MSw2ICYjNDM7MTYyMSw3IEBAIG1hZHZpc2VfYmVoYXZpb3JfdmFsaWQoaW50IGJlaGF2aW9yKQogCWNhc2UgTUFEVl9IVUdFUEFHRToKIAljYXNlIE1BRFZfTk9IVUdFUEFHRToKIAljYXNlIE1BRFZfQ09MTEFQU0U6CiYjNDM7CWNhc2UgTUFEVl9SRVNFUlZFRF9USFA6CiAjZW5kaWYKIAljYXNlIE1BRFZfRE9OVERVTVA6CiAJY2FzZSBNQURWX0RPRFVNUDoKZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmMKaW5kZXggZmYzMzhjMmFiZTkyMzEuLjIyNWZjMWFlMjIzODZkIDEwMDY0NAotLS0gYS9tbS9tZW1vcnkuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnkuYwpAQCAtNTI5Nyw2ICYjNDM7NTI5Nyw5IEBAIHN0YXRpYyB2bV9mYXVsdF90IGRvX2Fub255bW91c19wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKQogCWlmICh2bWEtJmd0O3ZtX2ZsYWdzICZhbXA7IFZNX1NIQVJFRCkKIAkJcmV0dXJuIFZNX0ZBVUxUX1NJR0JVUzsKIAomIzQzOwlpZiAodW5saWtlbHkodm1hLSZndDt2bV9mbGFncyAmYW1wOyBWTV9SRVNFUlZFRF9USFApKQomIzQzOwkJcmV0dXJuIFZNX0ZBVUxUX09PTTsKJiM0MzsKIAkvKgogCSAqIFVzZSBwdGVfYWxsb2MoKSBpbnN0ZWFkIG9mIHB0ZV9hbGxvY19tYXAoKSwgc28gdGhhdCBPT00gY2FuCiAJICogYmUgZGlzdGluZ3Vpc2hlZCBmcm9tIGEgdHJhbnNpZW50IGZhaWx1cmUgb2YgcHRlX29mZnNldF9tYXAoKS4KZGlmZiAtLWdpdCBhL21tL21tYXAuYyBiL21tL21tYXAuYwppbmRleCAyMzExYWU3YzJmZjQ1Yy4uNDgxOGIxNGVjMGZmNmMgMTAwNjQ0Ci0tLSBhL21tL21tYXAuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tbWFwLmMKQEAgLTEyNTEsNiAmIzQzOzEyNTEsNyBAQCB1bnNpZ25lZCBsb25nIHRlYXJfZG93bl92bWFzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWksCiAJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGVuZCkKIHsKIAl1bnNpZ25lZCBsb25nIG5yX2FjY291bnRlZCA9IDA7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbnJfcmVzZXJ2ZWRfdGhwID0gMDsKIAlpbnQgY291bnQgPSAwOwogCiAJbW1hcF9hc3NlcnRfd3JpdGVfbG9ja2VkKG1tKTsKQEAgLTEyNTgsNiAmIzQzOzEyNTksMTAgQEAgdW5zaWduZWQgbG9uZyB0ZWFyX2Rvd25fdm1hcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHZtYV9pdGVyYXRvciAqdm1pLAogCWRvIHsKIAkJaWYgKHZtYS0mZ3Q7dm1fZmxhZ3MgJmFtcDsgVk1fQUNDT1VOVCkKIAkJCW5yX2FjY291bnRlZCAmIzQzOz0gdm1hX3BhZ2VzKHZtYSk7CiYjNDM7CQlpZiAodm1hLSZndDt2bV9mbGFncyAmYW1wOyBWTV9SRVNFUlZFRF9USFApCiYjNDM7CQkJbnJfcmVzZXJ2ZWRfdGhwICYjNDM7PQomIzQzOwkJCQlyZXNlcnZlZF90aHBfaHBhZ2VfbnIodm1hLSZndDt2bV9zdGFydCwKJiM0MzsJCQkJCQkgICAgICB2bWEtJmd0O3ZtX2VuZCk7CiAJCXZtYV9tYXJrX2RldGFjaGVkKHZtYSk7CiAJCXJlbW92ZV92bWEodm1hKTsKIAkJY291bnQmIzQzOyYjNDM7OwpAQCAtMTI2Niw2ICYjNDM7MTI3MSw3IEBAIHVuc2lnbmVkIGxvbmcgdGVhcl9kb3duX3ZtYXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSwKIAl9IHdoaWxlICh2bWEgJmFtcDsmYW1wOyB2bWEtJmd0O3ZtX2VuZCAmbHQ7PSBlbmQpOwogCiAJVk1fV0FSTl9PTl9PTkNFKGNvdW50ICE9IG1tLSZndDttYXBfY291bnQpOwomIzQzOwlyZXNlcnZlZF90aHBfdW5jaGFyZ2UobnJfcmVzZXJ2ZWRfdGhwKTsKIAlyZXR1cm4gbnJfYWNjb3VudGVkOwogfQogCkBAIC0xNzMzLDYgJiM0MzsxNzM5LDcgQEAgX19sYXRlbnRfZW50cm9weSBpbnQgZHVwX21tYXAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm9sZG1tKQogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqbXBudCwgKnRtcDsKIAlpbnQgcmV0dmFsOwogCXVuc2lnbmVkIGxvbmcgY2hhcmdlID0gMDsKJiM0MzsJdW5zaWduZWQgbG9uZyByZXNlcnZlZF9jaGFyZ2UgPSAwOwogCUxJU1RfSEVBRCh1Zik7CiAJVk1BX0lURVJBVE9SKHZtaSwgbW0sIDApOwogCkBAIC0xNzc1LDYgJiM0MzsxNzgyLDcgQEAgX19sYXRlbnRfZW50cm9weSBpbnQgZHVwX21tYXAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm9sZG1tKQogCQkJY29udGludWU7CiAJCX0KIAkJY2hhcmdlID0gMDsKJiM0MzsJCXJlc2VydmVkX2NoYXJnZSA9IDA7CiAJCWlmIChtcG50LSZndDt2bV9mbGFncyAmYW1wOyBWTV9BQ0NPVU5UKSB7CiAJCQl1bnNpZ25lZCBsb25nIGxlbiA9IHZtYV9wYWdlcyhtcG50KTsKIApAQCAtMTc4Miw2ICYjNDM7MTc5MCwxNSBAQCBfX2xhdGVudF9lbnRyb3B5IGludCBkdXBfbW1hcChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IG1tX3N0cnVjdCAqb2xkbW0pCiAJCQkJZ290byBmYWlsX25vbWVtOwogCQkJY2hhcmdlID0gbGVuOwogCQl9CiYjNDM7CQlpZiAobXBudC0mZ3Q7dm1fZmxhZ3MgJmFtcDsgVk1fUkVTRVJWRURfVEhQKSB7CiYjNDM7CQkJdW5zaWduZWQgbG9uZyBsZW47CiYjNDM7CiYjNDM7CQkJbGVuID0gcmVzZXJ2ZWRfdGhwX2hwYWdlX25yKG1wbnQtJmd0O3ZtX3N0YXJ0LAomIzQzOwkJCQkJCSAgICBtcG50LSZndDt2bV9lbmQpOwomIzQzOwkJCWlmIChyZXNlcnZlZF90aHBfY2hhcmdlKGxlbikpCiYjNDM7CQkJCWdvdG8gZmFpbF9ub21lbTsKJiM0MzsJCQlyZXNlcnZlZF9jaGFyZ2UgPSBsZW47CiYjNDM7CQl9CiAKIAkJdG1wID0gdm1fYXJlYV9kdXAobXBudCk7CiAJCWlmICghdG1wKQpAQCAtMTkxNiw2ICYjNDM7MTkzMyw3IEBAIF9fbGF0ZW50X2VudHJvcHkgaW50IGR1cF9tbWFwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgbW1fc3RydWN0ICpvbGRtbSkKIAl2bV9hcmVhX2ZyZWUodG1wKTsKIGZhaWxfbm9tZW06CiAJcmV0dmFsID0gLUVOT01FTTsKJiM0MzsJcmVzZXJ2ZWRfdGhwX3VuY2hhcmdlKHJlc2VydmVkX2NoYXJnZSk7CiAJdm1fdW5hY2N0X21lbW9yeShjaGFyZ2UpOwogCWdvdG8gbG9vcF9vdXQ7CiB9CmRpZmYgLS1naXQgYS9tbS9tcmVtYXAuYyBiL21tL21yZW1hcC5jCmluZGV4IGU5YzhiMWQwNTgzMmJlLi5hZTM3ZTBiM2NlNzg4ZSAxMDA2NDQKLS0tIGEvbW0vbXJlbWFwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbXJlbWFwLmMKQEAgLTI0LDYgJiM0MzsyNCw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvbW11X25vdGlmaWVyLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdWFjY2Vzcy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3VzZXJmYXVsdGZkX2suaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaHVnZV9tbS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21lbXBvbGljeS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BnYWxsb2MuaCZndDsKIApAQCAtNjksNiAmIzQzOzcwLDcgQEAgc3RydWN0IHZtYV9yZW1hcF9zdHJ1Y3QgewogCWVudW0gbXJlbWFwX3R5cGUgcmVtYXBfdHlwZTsJLyogZXhwYW5kLCBzaHJpbmssIGV0Yy4gKi8KIAlib29sIG1tYXBfbG9ja2VkOwkJLyogSXMgbW0gY3VycmVudGx5IHdyaXRlLWxvY2tlZD8gKi8KIAl1bnNpZ25lZCBsb25nIGNoYXJnZWQ7CQkvKiBJZiBWTV9BQ0NPVU5ULCAjIHBhZ2VzIHRvIGFjY291bnQuICovCiYjNDM7CXVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWRfdGhwX2NoYXJnZWQ7IC8qIElmIFZNX1JFU0VSVkVEX1RIUCwgIyBocGFnZXMuICovCiAJYm9vbCB2bWlfbmVlZHNfaW52YWxpZGF0ZTsJLyogSXMgdGhlIFZNQSBpdGVyYXRvciBpbnZhbGlkYXRlZD8gKi8KIH07CiAKQEAgLTk2Miw2ICYjNDM7OTY0LDkgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgdnJtX3NldF9uZXdfYWRkcihzdHJ1Y3Qgdm1hX3JlbWFwX3N0cnVjdCAqdnJtKQogCQkJCW1hcF9mbGFncyk7CiAJaWYgKElTX0VSUl9WQUxVRShyZXMpKQogCQlyZXR1cm4gcmVzOwomIzQzOwlpZiAoKHZtYS0mZ3Q7dm1fZmxhZ3MgJmFtcDsgVk1fUkVTRVJWRURfVEhQKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAhSVNfQUxJR05FRChyZXMsIEhQQUdFX1BNRF9TSVpFKSkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwogCiAJdnJtLSZndDtuZXdfYWRkciA9IHJlczsKIAlyZXR1cm4gMDsKQEAgLTk3NywyNCAmIzQzOzk4Miw0NCBAQCBzdGF0aWMgYm9vbCB2cm1fY2FsY19jaGFyZ2Uoc3RydWN0IHZtYV9yZW1hcF9zdHJ1Y3QgKnZybSkKIHsKIAl1bnNpZ25lZCBsb25nIGNoYXJnZWQ7CiAKLQlpZiAoISh2cm0tJmd0O3ZtYS0mZ3Q7dm1fZmxhZ3MgJmFtcDsgVk1fQUNDT1VOVCkpCi0JCXJldHVybiB0cnVlOwomIzQzOwl2cm0tJmd0O2NoYXJnZWQgPSAwOwomIzQzOwl2cm0tJmd0O3Jlc2VydmVkX3RocF9jaGFyZ2VkID0gMDsKIAotCS8qCi0JICogSWYgd2UgZG9uJiMzOTt0IHVubWFwIHRoZSBvbGQgbWFwcGluZywgdGhlbiB3ZSBhY2NvdW50IHRoZSBlbnRpcmV0eSBvZgotCSAqIHRoZSBsZW5ndGggb2YgdGhlIG5ldyBvbmUuIE90aGVyd2lzZSBpdCYjMzk7cyBqdXN0IHRoZSBkZWx0YSBpbiBzaXplLgotCSAqLwotCWlmICh2cm0tJmd0O2ZsYWdzICZhbXA7IE1SRU1BUF9ET05UVU5NQVApCi0JCWNoYXJnZWQgPSB2cm0tJmd0O25ld19sZW4gJmd0OyZndDsgUEFHRV9TSElGVDsKLQllbHNlCi0JCWNoYXJnZWQgPSB2cm0tJmd0O2RlbHRhICZndDsmZ3Q7IFBBR0VfU0hJRlQ7CiYjNDM7CWlmICh2cm0tJmd0O3ZtYS0mZ3Q7dm1fZmxhZ3MgJmFtcDsgVk1fQUNDT1VOVCkgewomIzQzOwkJLyoKJiM0MzsJCSAqIElmIHdlIGRvbiYjMzk7dCB1bm1hcCB0aGUgb2xkIG1hcHBpbmcsIHRoZW4gd2UgYWNjb3VudCB0aGUKJiM0MzsJCSAqIGVudGlyZXR5IG9mIHRoZSBsZW5ndGggb2YgdGhlIG5ldyBvbmUuIE90aGVyd2lzZSBpdCYjMzk7cyBqdXN0CiYjNDM7CQkgKiB0aGUgZGVsdGEgaW4gc2l6ZS4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKHZybS0mZ3Q7ZmxhZ3MgJmFtcDsgTVJFTUFQX0RPTlRVTk1BUCkKJiM0MzsJCQljaGFyZ2VkID0gdnJtLSZndDtuZXdfbGVuICZndDsmZ3Q7IFBBR0VfU0hJRlQ7CiYjNDM7CQllbHNlCiYjNDM7CQkJY2hhcmdlZCA9IHZybS0mZ3Q7ZGVsdGEgJmd0OyZndDsgUEFHRV9TSElGVDsKIAogCi0JLyogVGhpcyBhY2NvdW50cyAmIzM5O2NoYXJnZWQmIzM5OyBwYWdlcyBvZiBtZW1vcnkuICovCi0JaWYgKHNlY3VyaXR5X3ZtX2Vub3VnaF9tZW1vcnlfbW0oY3VycmVudC0mZ3Q7bW0sIGNoYXJnZWQpKQotCQlyZXR1cm4gZmFsc2U7CiYjNDM7CQkvKiBUaGlzIGFjY291bnRzICYjMzk7Y2hhcmdlZCYjMzk7IHBhZ2VzIG9mIG1lbW9yeS4gKi8KJiM0MzsJCWlmIChzZWN1cml0eV92bV9lbm91Z2hfbWVtb3J5X21tKGN1cnJlbnQtJmd0O21tLCBjaGFyZ2VkKSkKJiM0MzsJCQlyZXR1cm4gZmFsc2U7CiAKLQl2cm0tJmd0O2NoYXJnZWQgPSBjaGFyZ2VkOwomIzQzOwkJdnJtLSZndDtjaGFyZ2VkID0gY2hhcmdlZDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAodnJtLSZndDt2bWEtJmd0O3ZtX2ZsYWdzICZhbXA7IFZNX1JFU0VSVkVEX1RIUCkgewomIzQzOwkJdW5zaWduZWQgbG9uZyBocGFnZXM7CiYjNDM7CiYjNDM7CQlpZiAodnJtLSZndDtmbGFncyAmYW1wOyBNUkVNQVBfRE9OVFVOTUFQKQomIzQzOwkJCWhwYWdlcyA9IHJlc2VydmVkX3RocF9ocGFnZV9ucigwLCB2cm0tJmd0O25ld19sZW4pOwomIzQzOwkJZWxzZQomIzQzOwkJCWhwYWdlcyA9IHJlc2VydmVkX3RocF9ocGFnZV9ucigwLCB2cm0tJmd0O2RlbHRhKTsKJiM0MzsKJiM0MzsJCWlmIChyZXNlcnZlZF90aHBfY2hhcmdlKGhwYWdlcykpIHsKJiM0MzsJCQl2bV91bmFjY3RfbWVtb3J5KHZybS0mZ3Q7Y2hhcmdlZCk7CiYjNDM7CQkJdnJtLSZndDtjaGFyZ2VkID0gMDsKJiM0MzsJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQl2cm0tJmd0O3Jlc2VydmVkX3RocF9jaGFyZ2VkID0gaHBhZ2VzOwomIzQzOwl9CiAJcmV0dXJuIHRydWU7CiB9CiAKQEAgLTEwMDQsMTEgJiM0MzsxMDI5LDEwIEBAIHN0YXRpYyBib29sIHZybV9jYWxjX2NoYXJnZShzdHJ1Y3Qgdm1hX3JlbWFwX3N0cnVjdCAqdnJtKQogICovCiBzdGF0aWMgdm9pZCB2cm1fdW5jaGFyZ2Uoc3RydWN0IHZtYV9yZW1hcF9zdHJ1Y3QgKnZybSkKIHsKLQlpZiAoISh2cm0tJmd0O3ZtYS0mZ3Q7dm1fZmxhZ3MgJmFtcDsgVk1fQUNDT1VOVCkpCi0JCXJldHVybjsKLQogCXZtX3VuYWNjdF9tZW1vcnkodnJtLSZndDtjaGFyZ2VkKTsKIAl2cm0tJmd0O2NoYXJnZWQgPSAwOwomIzQzOwlyZXNlcnZlZF90aHBfdW5jaGFyZ2UodnJtLSZndDtyZXNlcnZlZF90aHBfY2hhcmdlZCk7CiYjNDM7CXZybS0mZ3Q7cmVzZXJ2ZWRfdGhwX2NoYXJnZWQgPSAwOwogfQogCiAvKgpAQCAtMTE1Nyw4ICYjNDM7MTE4MSw4IEBAIHN0YXRpYyB2b2lkIHVubWFwX3NvdXJjZV92bWEoc3RydWN0IHZtYV9yZW1hcF9zdHJ1Y3QgKnZybSkKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHZybS0mZ3Q7dm1hOwogCVZNQV9JVEVSQVRPUih2bWksIG1tLCBhZGRyKTsKIAlpbnQgZXJyOwotCXVuc2lnbmVkIGxvbmcgdm1fc3RhcnQ7Ci0JdW5zaWduZWQgbG9uZyB2bV9lbmQ7CiYjNDM7CXVuc2lnbmVkIGxvbmcgdm1fc3RhcnQgPSAwOwomIzQzOwl1bnNpZ25lZCBsb25nIHZtX2VuZCA9IDA7CiAJLyoKIAkgKiBJdCBtaWdodCBzZWVtIG9kZCB0aGF0IHdlIGNoZWNrIGZvciBNUkVNQVBfRE9OVFVOTUFQIGhlcmUsIGdpdmVuIHRoaXMKIAkgKiBmdW5jdGlvbiBpbXBsaWVzIHRoYXQgd2UgdW5tYXAgdGhlIG9yaWdpbmFsIFZNQSwgd2hpY2ggc2VlbXMKQEAgLTExNzAsNiAmIzQzOzExOTQsOCBAQCBzdGF0aWMgdm9pZCB1bm1hcF9zb3VyY2Vfdm1hKHN0cnVjdCB2bWFfcmVtYXBfc3RydWN0ICp2cm0pCiAJICovCiAJYm9vbCBhY2NvdW50YWJsZV9tb3ZlID0gKHZtYS0mZ3Q7dm1fZmxhZ3MgJmFtcDsgVk1fQUNDT1VOVCkgJmFtcDsmYW1wOwogCQkhKHZybS0mZ3Q7ZmxhZ3MgJmFtcDsgTVJFTUFQX0RPTlRVTk1BUCk7CiYjNDM7CWJvb2wgcmVzZXJ2ZWRfdGhwX21vdmUgPSAodm1hLSZndDt2bV9mbGFncyAmYW1wOyBWTV9SRVNFUlZFRF9USFApICZhbXA7JmFtcDsKJiM0MzsJCSEodnJtLSZndDtmbGFncyAmYW1wOyBNUkVNQVBfRE9OVFVOTUFQKTsKIAogCS8qCiAJICogU28gd2UgcGVyZm9ybSBhIHRyaWNrIGhlcmUgdG8gcHJldmVudCBpbmNvcnJlY3QgYWNjb3VudGluZy4gQW55IG1lcmdlCkBAIC0xMTkyLDYgJiM0MzsxMjE4LDEzIEBAIHN0YXRpYyB2b2lkIHVubWFwX3NvdXJjZV92bWEoc3RydWN0IHZtYV9yZW1hcF9zdHJ1Y3QgKnZybSkKIAkJdm1fc3RhcnQgPSB2bWEtJmd0O3ZtX3N0YXJ0OwogCQl2bV9lbmQgPSB2bWEtJmd0O3ZtX2VuZDsKIAl9CiYjNDM7CWlmIChyZXNlcnZlZF90aHBfbW92ZSkgewomIzQzOwkJdm1fZmxhZ3NfY2xlYXIodm1hLCBWTV9SRVNFUlZFRF9USFApOwomIzQzOwkJaWYgKCFhY2NvdW50YWJsZV9tb3ZlKSB7CiYjNDM7CQkJdm1fc3RhcnQgPSB2bWEtJmd0O3ZtX3N0YXJ0OwomIzQzOwkJCXZtX2VuZCA9IHZtYS0mZ3Q7dm1fZW5kOwomIzQzOwkJfQomIzQzOwl9CiAKIAllcnIgPSBkb192bWlfbXVubWFwKCZhbXA7dm1pLCBtbSwgYWRkciwgbGVuLCB2cm0tJmd0O3VmX3VubWFwLCAvKiB1bmxvY2s9ICovZmFsc2UpOwogCXZybS0mZ3Q7dm1hID0gTlVMTDsgLyogSW52YWxpZGF0ZWQuICovCkBAIC0xMjI3LDE5ICYjNDM7MTI2MCwyNyBAQCBzdGF0aWMgdm9pZCB1bm1hcF9zb3VyY2Vfdm1hKHN0cnVjdCB2bWFfcmVtYXBfc3RydWN0ICp2cm0pCiAJICoKIAkgKiBkb192bWlfbXVubWFwKCkgd2lsbCBoYXZlIHJlc3RvcmVkIHRoZSBWTUkgYmFjayB0byBhZGRyLgogCSAqLwotCWlmIChhY2NvdW50YWJsZV9tb3ZlKSB7CiYjNDM7CWlmIChhY2NvdW50YWJsZV9tb3ZlIHx8IHJlc2VydmVkX3RocF9tb3ZlKSB7CiAJCXVuc2lnbmVkIGxvbmcgZW5kID0gYWRkciAmIzQzOyBsZW47Ci0KLQkJaWYgKHZtX3N0YXJ0ICZsdDsgYWRkcikgewotCQkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICpwcmV2ID0gdm1hX3ByZXYoJmFtcDt2bWkpOwotCi0JCQl2bV9mbGFnc19zZXQocHJldiwgVk1fQUNDT1VOVCk7IC8qIEFjcXVpcmVzIFZNQSBsb2NrLiAqLwomIzQzOwkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICpwcmV2ID0gTlVMTDsKJiM0MzsJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqbmV4dCA9IE5VTEw7CiYjNDM7CiYjNDM7CQlpZiAodm1fc3RhcnQgJmx0OyBhZGRyKQomIzQzOwkJCXByZXYgPSB2bWFfcHJldigmYW1wO3ZtaSk7CiYjNDM7CQlpZiAodm1fZW5kICZndDsgZW5kKQomIzQzOwkJCW5leHQgPSB2bWFfbmV4dCgmYW1wO3ZtaSk7CiYjNDM7CiYjNDM7CQlpZiAoYWNjb3VudGFibGVfbW92ZSkgewomIzQzOwkJCWlmIChwcmV2KQomIzQzOwkJCQl2bV9mbGFnc19zZXQocHJldiwgVk1fQUNDT1VOVCk7IC8qIEFjcXVpcmVzIFZNQSBsb2NrLiAqLwomIzQzOwkJCWlmIChuZXh0KQomIzQzOwkJCQl2bV9mbGFnc19zZXQobmV4dCwgVk1fQUNDT1VOVCk7IC8qIEFjcXVpcmVzIFZNQSBsb2NrLiAqLwogCQl9Ci0KLQkJaWYgKHZtX2VuZCAmZ3Q7IGVuZCkgewotCQkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICpuZXh0ID0gdm1hX25leHQoJmFtcDt2bWkpOwotCi0JCQl2bV9mbGFnc19zZXQobmV4dCwgVk1fQUNDT1VOVCk7IC8qIEFjcXVpcmVzIFZNQSBsb2NrLiAqLwomIzQzOwkJaWYgKHJlc2VydmVkX3RocF9tb3ZlKSB7CiYjNDM7CQkJaWYgKHByZXYpCiYjNDM7CQkJCXZtX2ZsYWdzX3NldChwcmV2LCBWTV9SRVNFUlZFRF9USFApOwomIzQzOwkJCWlmIChuZXh0KQomIzQzOwkJCQl2bV9mbGFnc19zZXQobmV4dCwgVk1fUkVTRVJWRURfVEhQKTsKIAkJfQogCX0KIH0KQEAgLTEzMDksNyAmIzQzOzEzNTAsNiBAQCBzdGF0aWMgaW50IGNvcHlfdm1hX2FuZF9kYXRhKHN0cnVjdCB2bWFfcmVtYXBfc3RydWN0ICp2cm0sCiAJKm5ld192bWFfcHRyID0gbmV3X3ZtYTsKIAlyZXR1cm4gZXJyOwogfQotCiAvKgogICogUGVyZm9ybSBmaW5hbCB0YXNrcyBmb3IgTUFEVl9ET05UVU5NQVAgb3BlcmF0aW9uLCBjbGVhcmluZyBtbG9jaygpIGZsYWcgb24KICAqIHJlbWFpbmluZyBWTUEgYnkgY29udmVudGlvbiAoaXQgY2Fubm90IGJlIG1sb2NrKCkmIzM5O2QgYW55IGxvbmdlciwgYXMgcGFnZXMgaW4KQEAgLTE1NzYsNiAmIzQzOzE2MTYsMjMgQEAgc3RhdGljIGJvb2wgYWxpZ25faHVnZXRsYihzdHJ1Y3Qgdm1hX3JlbWFwX3N0cnVjdCAqdnJtKQogCXJldHVybiB0cnVlOwogfQogCiYjNDM7c3RhdGljIGJvb2wgY2hlY2tfcmVzZXJ2ZWRfdGhwX2FsaWdubWVudChzdHJ1Y3Qgdm1hX3JlbWFwX3N0cnVjdCAqdnJtKQomIzQzO3sKJiM0MzsJaWYgKCEodnJtLSZndDt2bWEtJmd0O3ZtX2ZsYWdzICZhbXA7IFZNX1JFU0VSVkVEX1RIUCkpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsKJiM0MzsJaWYgKCFJU19BTElHTkVEKHZybS0mZ3Q7YWRkciwgSFBBR0VfUE1EX1NJWkUpIHx8CiYjNDM7CSAgICAhSVNfQUxJR05FRCh2cm0tJmd0O29sZF9sZW4sIEhQQUdFX1BNRF9TSVpFKSB8fAomIzQzOwkgICAgIUlTX0FMSUdORUQodnJtLSZndDtuZXdfbGVuLCBIUEFHRV9QTURfU0laRSkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWlmICgodnJtLSZndDtyZW1hcF90eXBlID09IE1SRU1BUF9FWFBBTkQgfHwgdnJtX2ltcGxpZXNfbmV3X2FkZHIodnJtKSkgJmFtcDsmYW1wOwomIzQzOwkgICAgIUlTX0FMSUdORUQodnJtLSZndDtuZXdfYWRkciwgSFBBR0VfUE1EX1NJWkUpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiAvKgogICogV2UgYXJlIG1yZW1hcCgpJiMzOTtpbmcgd2l0aG91dCBzcGVjaWZ5aW5nIGEgZml4ZWQgYWRkcmVzcyB0byBtb3ZlIHRvLCBidXQgYXJlCiAgKiByZXF1ZXN0aW5nIHRoYXQgdGhlIFZNQSYjMzk7cyBzaXplIGJlIGluY3JlYXNlZC4KQEAgLTE3NDUsNiAmIzQzOzE4MDIsOCBAQCBzdGF0aWMgaW50IGNoZWNrX3ByZXBfdm1hKHN0cnVjdCB2bWFfcmVtYXBfc3RydWN0ICp2cm0pCiAJLyogRm9yIGNvbnZlbmllbmNlLCB3ZSBzZXQgbmV3X2FkZHIgZXZlbiBpZiBWTUEgd29uJiMzOTt0IG1vdmUuICovCiAJaWYgKCF2cm1faW1wbGllc19uZXdfYWRkcih2cm0pKQogCQl2cm0tJmd0O25ld19hZGRyID0gYWRkcjsKJiM0MzsJaWYgKCFjaGVja19yZXNlcnZlZF90aHBfYWxpZ25tZW50KHZybSkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIEJlbG93IG9ubHkgbWVhbmluZ2Z1bCBpZiB3ZSBleHBhbmQgb3IgbW92ZSBhIFZNQS4gKi8KIAlpZiAoIXZybV93aWxsX21hcF9uZXcodnJtKSkKZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuYwppbmRleCBlZTkwMmE0NjhjMmY1Yi4uNjYwZTUwMWJmNjc2YjYgMTAwNjQ0Ci0tLSBhL21tL3BhZ2VfYWxsb2MuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX2FsbG9jLmMKQEAgLTI2Myw2ICYjNDM7MjYzLDcgQEAgY29uc3QgY2hhciAqIGNvbnN0IG1pZ3JhdGV0eXBlX25hbWVzW01JR1JBVEVfVFlQRVNdID0gewogI2lmZGVmIENPTkZJR19DTUEKIAkmIzM0O0NNQSYjMzQ7LAogI2VuZGlmCiYjNDM7CSYjMzQ7UmVzZXJ2ZVRIUCYjMzQ7LAogI2lmZGVmIENPTkZJR19NRU1PUllfSVNPTEFUSU9OCiAJJiMzNDtJc29sYXRlJiMzNDssCiAjZW5kaWYKQEAgLTc4NCw2ICYjNDM7Nzg1LDkgQEAgc3RhdGljIGlubGluZSB2b2lkIGFjY291bnRfZnJlZXBhZ2VzKHN0cnVjdCB6b25lICp6b25lLCBpbnQgbnJfcGFnZXMsCiAJZWxzZSBpZiAobWlncmF0ZXR5cGUgPT0gTUlHUkFURV9ISUdIQVRPTUlDKQogCQlXUklURV9PTkNFKHpvbmUtJmd0O25yX2ZyZWVfaGlnaGF0b21pYywKIAkJCSAgIHpvbmUtJmd0O25yX2ZyZWVfaGlnaGF0b21pYyAmIzQzOyBucl9wYWdlcyk7CiYjNDM7CWVsc2UgaWYgKG1pZ3JhdGV0eXBlID09IE1JR1JBVEVfUkVTRVJWRURfVEhQKQomIzQzOwkJV1JJVEVfT05DRSh6b25lLSZndDtucl9mcmVlX3Jlc2VydmVkX3RocCwKJiM0MzsJCQkgICB6b25lLSZndDtucl9mcmVlX3Jlc2VydmVkX3RocCAmIzQzOyBucl9wYWdlcyk7CiB9CiAKIC8qIFVzZWQgZm9yIHBhZ2VzIG5vdCBvbiBhbm90aGVyIGxpc3QgKi8KQEAgLTI0NTYsNiAmIzQzOzI0NjAsOSBAQCBfX3JtcXVldWUoc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGludCBvcmRlciwgaW50IG1pZ3JhdGV0eXBlLAogewogCXN0cnVjdCBwYWdlICpwYWdlOwogCiYjNDM7CWlmIChhbGxvY19mbGFncyAmYW1wOyBBTExPQ19SRVNFUlZFRF9USFApCiYjNDM7CQlyZXR1cm4gX19ybXF1ZXVlX3NtYWxsZXN0KHpvbmUsIG9yZGVyLCBNSUdSQVRFX1JFU0VSVkVEX1RIUCk7CiYjNDM7CiAJaWYgKElTX0VOQUJMRUQoQ09ORklHX0NNQSkpIHsKIAkJLyoKIAkJICogQmFsYW5jZSBtb3ZhYmxlIGFsbG9jYXRpb25zIGJldHdlZW4gcmVndWxhciBhbmQgQ01BIGFyZWFzIGJ5CkBAIC0yOTYwLDcgJiM0MzsyOTY3LDggQEAgc3RhdGljIHZvaWQgX19mcmVlX2Zyb3plbl9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLAogCXpvbmUgPSBwYWdlX3pvbmUocGFnZSk7CiAJbWlncmF0ZXR5cGUgPSBnZXRfcGZuYmxvY2tfbWlncmF0ZXR5cGUocGFnZSwgcGZuKTsKIAlpZiAodW5saWtlbHkobWlncmF0ZXR5cGUgJmd0Oz0gTUlHUkFURV9QQ1BUWVBFUykpIHsKLQkJaWYgKHVubGlrZWx5KGlzX21pZ3JhdGVfaXNvbGF0ZShtaWdyYXRldHlwZSkpKSB7CiYjNDM7CQlpZiAodW5saWtlbHkoaXNfbWlncmF0ZV9yZXNlcnZlZF90aHAobWlncmF0ZXR5cGUpIHx8CiYjNDM7CQkJICAgICBpc19taWdyYXRlX2lzb2xhdGUobWlncmF0ZXR5cGUpKSkgewogCQkJZnJlZV9vbmVfcGFnZSh6b25lLCBwYWdlLCBwZm4sIG9yZGVyLCBmcGlfZmxhZ3MpOwogCQkJcmV0dXJuOwogCQl9CkBAIC0zMDM4LDYgJiM0MzszMDQ2LDcgQEAgdm9pZCBmcmVlX3VucmVmX2ZvbGlvcyhzdHJ1Y3QgZm9saW9fYmF0Y2ggKmZvbGlvcykKIAogCQkvKiBEaWZmZXJlbnQgem9uZSByZXF1aXJlcyBhIGRpZmZlcmVudCBwY3AgbG9jayAqLwogCQlpZiAoem9uZSAhPSBsb2NrZWRfem9uZSB8fAomIzQzOwkJICAgIGlzX21pZ3JhdGVfcmVzZXJ2ZWRfdGhwKG1pZ3JhdGV0eXBlKSB8fAogCQkgICAgaXNfbWlncmF0ZV9pc29sYXRlKG1pZ3JhdGV0eXBlKSkgewogCQkJaWYgKHBjcCkgewogCQkJCXBjcF9zcGluX3VubG9jayhwY3ApOwpAQCAtMzA0NSw2ICYjNDM7MzA1NCwxMiBAQCB2b2lkIGZyZWVfdW5yZWZfZm9saW9zKHN0cnVjdCBmb2xpb19iYXRjaCAqZm9saW9zKQogCQkJCXBjcCA9IE5VTEw7CiAJCQl9CiAKJiM0MzsJCQlpZiAoaXNfbWlncmF0ZV9yZXNlcnZlZF90aHAobWlncmF0ZXR5cGUpKSB7CiYjNDM7CQkJCWZyZWVfb25lX3BhZ2Uoem9uZSwgJmFtcDtmb2xpby0mZ3Q7cGFnZSwgcGZuLAomIzQzOwkJCQkJICAgICAgb3JkZXIsIEZQSV9OT05FKTsKJiM0MzsJCQkJY29udGludWU7CiYjNDM7CQkJfQomIzQzOwogCQkJLyoKIAkJCSAqIEZyZWUgaXNvbGF0ZWQgcGFnZXMgZGlyZWN0bHkgdG8gdGhlCiAJCQkgKiBhbGxvY2F0b3IsIHNlZSBjb21tZW50IGluIGZyZWVfZnJvemVuX3BhZ2VzLgpAQCAtMzIzNSw3ICYjNDM7MzI1MCw4IEBAIHN0cnVjdCBwYWdlICpybXF1ZXVlX2J1ZGR5KHN0cnVjdCB6b25lICpwcmVmZXJyZWRfem9uZSwgc3RydWN0IHpvbmUgKnpvbmUsCiAJCQkgKiByZXNlcnZlcyBhcyBmYWlsaW5nIG5vdyBpcyB3b3JzZSB0aGFuIGZhaWxpbmcgYQogCQkJICogaGlnaC1vcmRlciBhdG9taWMgYWxsb2NhdGlvbiBpbiB0aGUgZnV0dXJlLgogCQkJICovCi0JCQlpZiAoIXBhZ2UgJmFtcDsmYW1wOyAoYWxsb2NfZmxhZ3MgJmFtcDsgKEFMTE9DX09PTXxBTExPQ19OT05fQkxPQ0spKSkKJiM0MzsJCQlpZiAoIXBhZ2UgJmFtcDsmYW1wOyAhKGFsbG9jX2ZsYWdzICZhbXA7IEFMTE9DX1JFU0VSVkVEX1RIUCkgJmFtcDsmYW1wOwomIzQzOwkJCSAgICAoYWxsb2NfZmxhZ3MgJmFtcDsgKEFMTE9DX09PTXxBTExPQ19OT05fQkxPQ0spKSkKIAkJCQlwYWdlID0gX19ybXF1ZXVlX3NtYWxsZXN0KHpvbmUsIG9yZGVyLCBNSUdSQVRFX0hJR0hBVE9NSUMpOwogCiAJCQlpZiAoIXBhZ2UpIHsKQEAgLTM0MDUsNyAmIzQzOzM0MjEsOCBAQCBzdHJ1Y3QgcGFnZSAqcm1xdWV1ZShzdHJ1Y3Qgem9uZSAqcHJlZmVycmVkX3pvbmUsCiB7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAKLQlpZiAobGlrZWx5KHBjcF9hbGxvd2VkX29yZGVyKG9yZGVyKSkpIHsKJiM0MzsJaWYgKGxpa2VseShwY3BfYWxsb3dlZF9vcmRlcihvcmRlcikpICZhbXA7JmFtcDsKJiM0MzsJICAgICEoYWxsb2NfZmxhZ3MgJmFtcDsgQUxMT0NfUkVTRVJWRURfVEhQKSkgewogCQlwYWdlID0gcm1xdWV1ZV9wY3BsaXN0KHByZWZlcnJlZF96b25lLCB6b25lLCBvcmRlciwKIAkJCQkgICAgICAgbWlncmF0ZXR5cGUsIGFsbG9jX2ZsYWdzKTsKIAkJaWYgKGxpa2VseShwYWdlKSkKQEAgLTM1NTYsNiAmIzQzOzM1NzMsMzUgQEAgc3RhdGljIGJvb2wgdW5yZXNlcnZlX2hpZ2hhdG9taWNfcGFnZWJsb2NrKGNvbnN0IHN0cnVjdCBhbGxvY19jb250ZXh0ICphYywKIAlyZXR1cm4gZmFsc2U7CiB9CiAKJiM0Mzt1bnNpZ25lZCBsb25nIHJlc2VydmVkX3RocF9wYWdlYmxvY2tzKHVuc2lnbmVkIGxvbmcgbnJfaHBhZ2VzKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgaW50IG9yZGVyID0gbWF4X3QodW5zaWduZWQgaW50LCBIUEFHRV9QTURfT1JERVIsCiYjNDM7CQkJCSAgIHBhZ2VibG9ja19vcmRlcik7CiYjNDM7CXVuc2lnbmVkIGxvbmcgaHBhZ2VzX3Blcl9ibG9jayA9IDFVTCAmbHQ7Jmx0OyAob3JkZXIgLSBIUEFHRV9QTURfT1JERVIpOwomIzQzOwl1bnNpZ25lZCBsb25nIHJlc2VydmVkID0gMDsKJiM0MzsJZ2ZwX3QgZ2ZwID0gKEdGUF9ISUdIVVNFUiB8IF9fR0ZQX0NPTVAgfCBfX0dGUF9OT01FTUFMTE9DIHwKJiM0MzsJCSAgICAgX19HRlBfTk9XQVJOIHwgX19HRlBfTk9SRVRSWSk7CiYjNDM7CiYjNDM7CXdoaWxlIChyZXNlcnZlZCAmbHQ7IG5yX2hwYWdlcykgewomIzQzOwkJc3RydWN0IHBhZ2UgKnBhZ2U7CiYjNDM7CQlzdHJ1Y3Qgem9uZSAqem9uZTsKJiM0MzsJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CiYjNDM7CQlwYWdlID0gYWxsb2NfcGFnZXMoZ2ZwLCBvcmRlcik7CiYjNDM7CQlpZiAoIXBhZ2UpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiYjNDM7CQl6b25lID0gcGFnZV96b25lKHBhZ2UpOwomIzQzOwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDt6b25lLSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CQljaGFuZ2VfcGFnZWJsb2NrX3JhbmdlKHBhZ2UsIG9yZGVyLCBNSUdSQVRFX1JFU0VSVkVEX1RIUCk7CiYjNDM7CQl6b25lLSZndDtucl9yZXNlcnZlZF90aHAgJiM0Mzs9IDFVTCAmbHQ7Jmx0OyBvcmRlcjsKJiM0MzsJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDt6b25lLSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CQlfX2ZyZWVfcGFnZXMocGFnZSwgb3JkZXIpOwomIzQzOwkJcmVzZXJ2ZWQgJiM0Mzs9IGhwYWdlc19wZXJfYmxvY2s7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIHJlc2VydmVkOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgbG9uZyBfX3pvbmVfd2F0ZXJtYXJrX3VudXNhYmxlX2ZyZWUoc3RydWN0IHpvbmUgKnosCiAJCQkJdW5zaWduZWQgaW50IG9yZGVyLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpCiB7CkBAIC0zNTY4LDYgJiM0MzszNjE0LDkgQEAgc3RhdGljIGlubGluZSBsb25nIF9fem9uZV93YXRlcm1hcmtfdW51c2FibGVfZnJlZShzdHJ1Y3Qgem9uZSAqeiwKIAlpZiAobGlrZWx5KCEoYWxsb2NfZmxhZ3MgJmFtcDsgQUxMT0NfUkVTRVJWRVMpKSkKIAkJdW51c2FibGVfZnJlZSAmIzQzOz0gUkVBRF9PTkNFKHotJmd0O25yX2ZyZWVfaGlnaGF0b21pYyk7CiAKJiM0MzsJaWYgKCEoYWxsb2NfZmxhZ3MgJmFtcDsgQUxMT0NfUkVTRVJWRURfVEhQKSkKJiM0MzsJCXVudXNhYmxlX2ZyZWUgJiM0Mzs9IFJFQURfT05DRSh6LSZndDtucl9mcmVlX3Jlc2VydmVkX3RocCk7CiYjNDM7CiAjaWZkZWYgQ09ORklHX0NNQQogCS8qIElmIGFsbG9jYXRpb24gY2FuJiMzOTt0IHVzZSBDTUEgYXJlYXMgZG9uJiMzOTt0IHVzZSBmcmVlIENNQSBwYWdlcyAqLwogCWlmICghKGFsbG9jX2ZsYWdzICZhbXA7IEFMTE9DX0NNQSkpCkBAIC0zNjQyLDYgJiM0MzszNjkxLDEyIEBAIGJvb2wgX196b25lX3dhdGVybWFya19vayhzdHJ1Y3Qgem9uZSAqeiwgdW5zaWduZWQgaW50IG9yZGVyLCB1bnNpZ25lZCBsb25nIG1hcmssCiAJCWlmICghYXJlYS0mZ3Q7bnJfZnJlZSkKIAkJCWNvbnRpbnVlOwogCiYjNDM7CQlpZiAoYWxsb2NfZmxhZ3MgJmFtcDsgQUxMT0NfUkVTRVJWRURfVEhQKSB7CiYjNDM7CQkJaWYgKCFmcmVlX2FyZWFfZW1wdHkoYXJlYSwgTUlHUkFURV9SRVNFUlZFRF9USFApKQomIzQzOwkJCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsKIAkJZm9yIChtdCA9IDA7IG10ICZsdDsgTUlHUkFURV9QQ1BUWVBFUzsgbXQmIzQzOyYjNDM7KSB7CiAJCQlpZiAoIWZyZWVfYXJlYV9lbXB0eShhcmVhLCBtdCkpCiAJCQkJcmV0dXJuIHRydWU7CkBAIC0zODc2LDYgJiM0MzszOTMxLDkgQEAgZ2V0X3BhZ2VfZnJvbV9mcmVlbGlzdChnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLCBpbnQgYWxsb2NfZmxhZ3MsCiAKIAkJY29uZF9hY2NlcHRfbWVtb3J5KHpvbmUsIG9yZGVyLCBhbGxvY19mbGFncyk7CiAKJiM0MzsJCWlmIChhbGxvY19mbGFncyAmYW1wOyBBTExPQ19SRVNFUlZFRF9USFApCiYjNDM7CQkJZ290byB0cnlfdGhpc196b25lOwomIzQzOwogCQkvKgogCQkgKiBEZXRlY3Qgd2hldGhlciB0aGUgbnVtYmVyIG9mIGZyZWUgcGFnZXMgaXMgYmVsb3cgaGlnaAogCQkgKiB3YXRlcm1hcmsuICBJZiBzbywgd2Ugd2lsbCBkZWNyZWFzZSBwY3AtJmd0O2hpZ2ggYW5kIGZyZWUKQEAgLTUwMzMsNiAmIzQzOzUwOTEsMTUgQEAgc3RhdGljIGlubGluZSBib29sIHByZXBhcmVfYWxsb2NfcGFnZXMoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlciwKIAlhYy0mZ3Q7bm9kZW1hc2sgPSBub2RlbWFzazsKIAlhYy0mZ3Q7bWlncmF0ZXR5cGUgPSBnZnBfbWlncmF0ZXR5cGUoZ2ZwX21hc2spOwogCiYjNDM7CWlmIChnZnBfbWFzayAmYW1wOyBfX0dGUF9SRVNFUlZFRF9USFApIHsKJiM0MzsJCWlmICghSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIHx8CiYjNDM7CQkgICAgV0FSTl9PTl9PTkNFX0dGUChvcmRlciAhPSBIUEFHRV9QTURfT1JERVIsIGdmcF9tYXNrKSkKJiM0MzsJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CQlhYy0mZ3Q7bWlncmF0ZXR5cGUgPSBNSUdSQVRFX1JFU0VSVkVEX1RIUDsKJiM0MzsJCSphbGxvY19mbGFncyB8PSBBTExPQ19SRVNFUlZFRF9USFA7CiYjNDM7CX0KJiM0MzsKIAlpZiAoY3B1c2V0c19lbmFibGVkKCkpIHsKIAkJKmFsbG9jX2dmcCB8PSBfX0dGUF9IQVJEV0FMTDsKIAkJLyoKZGlmZiAtLWdpdCBhL21tL3Jlc2VydmVkX3RocC5jIGIvbW0vcmVzZXJ2ZWRfdGhwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjkzMWM1MzljMTVhNzA5Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvbW0vcmVzZXJ2ZWRfdGhwLmMKQEAgLTAsMCAmIzQzOzEsMTMzIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbW0uaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O2ludGVybmFsLmgmIzM0OwomIzQzOwomIzQzO3N0YXRpYyBERUZJTkVfU1BJTkxPQ0socmVzZXJ2ZWRfdGhwX2xvY2spOwomIzQzOwomIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIHJlc2VydmVkX3RocF9jbWRsaW5lX3NpemUgX19pbml0ZGF0YSA9IEhQQUdFX1BNRF9TSVpFOwomIzQzO3N0YXRpYyBib29sIHJlc2VydmVkX3RocF9jbWRsaW5lX3NpemVfdmFsaWQgX19pbml0ZGF0YSA9IHRydWU7CiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWRfdGhwX3JlcXVlc3RlZCBfX2luaXRkYXRhOwomIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIHJlc2VydmVkX3RocF90b3RhbDsKJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyByZXNlcnZlZF90aHBfdXNlZDsKJiM0MzsKJiM0MztzdGF0aWMgaW50IF9faW5pdCBzZXR1cF9yZXNlcnZlZF90aHBfc2l6ZShjaGFyICpzdHIpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIHNpemU7CiYjNDM7CXNpemUgPSBtZW1wYXJzZShzdHIsIE5VTEwpOwomIzQzOwlpZiAoc2l6ZSAhPSBIUEFHRV9QTURfU0laRSkgewomIzQzOwkJcHJfd2FybigmIzM0O3Vuc3VwcG9ydGVkIHRocF9yZXNlcnZlZF9zaXplPSVzLCBvbmx5ICVsdSBpcyBzdXBwb3J0ZWRcbiYjMzQ7LAomIzQzOwkJCXN0ciwgSFBBR0VfUE1EX1NJWkUpOwomIzQzOwkJcmVzZXJ2ZWRfdGhwX2NtZGxpbmVfc2l6ZV92YWxpZCA9IGZhbHNlOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsJcmVzZXJ2ZWRfdGhwX2NtZGxpbmVfc2l6ZSA9IHNpemU7CiYjNDM7CXJlc2VydmVkX3RocF9jbWRsaW5lX3NpemVfdmFsaWQgPSB0cnVlOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7ZWFybHlfcGFyYW0oJiMzNDt0aHBfcmVzZXJ2ZWRfc2l6ZSYjMzQ7LCBzZXR1cF9yZXNlcnZlZF90aHBfc2l6ZSk7CiYjNDM7c3RhdGljIGludCBfX2luaXQgc2V0dXBfcmVzZXJ2ZWRfdGhwX25yKGNoYXIgKnN0cikKJiM0Mzt7CiYjNDM7CWludCBjb3VudDsKJiM0MzsJaWYgKHNzY2FuZihzdHIsICYjMzQ7JWx1JW4mIzM0OywgJmFtcDtyZXNlcnZlZF90aHBfcmVxdWVzdGVkLCAmYW1wO2NvdW50KSAhPSAxIHx8CiYjNDM7CSAgICBzdHJbY291bnRdKSB7CiYjNDM7CQlwcl93YXJuKCYjMzQ7aW52YWxpZCB0aHBfcmVzZXJ2ZWRfbnI9JXNcbiYjMzQ7LCBzdHIpOwomIzQzOwkJcmVzZXJ2ZWRfdGhwX3JlcXVlc3RlZCA9IDA7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7ZWFybHlfcGFyYW0oJiMzNDt0aHBfcmVzZXJ2ZWRfbnImIzM0Oywgc2V0dXBfcmVzZXJ2ZWRfdGhwX25yKTsKJiM0MzsKJiM0Mzt1bnNpZ25lZCBsb25nIHJlc2VydmVkX3RocF9ocGFnZV9ucih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKJiM0Mzt7CiYjNDM7CXJldHVybiAoZW5kIC0gc3RhcnQpICZndDsmZ3Q7IEhQQUdFX1BNRF9TSElGVDsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IHJlc2VydmVkX3RocF9jaGFyZ2UodW5zaWduZWQgbG9uZyBucl9ocGFnZXMpCiYjNDM7ewomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsKJiM0MzsJaWYgKCFucl9ocGFnZXMpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJc3Bpbl9sb2NrKCZhbXA7cmVzZXJ2ZWRfdGhwX2xvY2spOwomIzQzOwlpZiAobnJfaHBhZ2VzICZndDsgcmVzZXJ2ZWRfdGhwX3RvdGFsIC0gcmVzZXJ2ZWRfdGhwX3VzZWQpCiYjNDM7CQlyZXQgPSAtRU5PTUVNOwomIzQzOwllbHNlCiYjNDM7CQlyZXNlcnZlZF90aHBfdXNlZCAmIzQzOz0gbnJfaHBhZ2VzOwomIzQzOwlzcGluX3VubG9jaygmYW1wO3Jlc2VydmVkX3RocF9sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCByZXNlcnZlZF90aHBfdW5jaGFyZ2UodW5zaWduZWQgbG9uZyBucl9ocGFnZXMpCiYjNDM7ewomIzQzOwlpZiAoIW5yX2hwYWdlcykKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJc3Bpbl9sb2NrKCZhbXA7cmVzZXJ2ZWRfdGhwX2xvY2spOwomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKG5yX2hwYWdlcyAmZ3Q7IHJlc2VydmVkX3RocF91c2VkKSkKJiM0MzsJCXJlc2VydmVkX3RocF91c2VkID0gMDsKJiM0MzsJZWxzZQomIzQzOwkJcmVzZXJ2ZWRfdGhwX3VzZWQgLT0gbnJfaHBhZ2VzOwomIzQzOwlzcGluX3VubG9jaygmYW1wO3Jlc2VydmVkX3RocF9sb2NrKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHNzaXplX3QgdG90YWxfaHBhZ2VzX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosCiYjNDM7CQkJCSBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKJiM0Mzt7CiYjNDM7CXJldHVybiBzeXNmc19lbWl0KGJ1ZiwgJiMzNDslbHVcbiYjMzQ7LCBSRUFEX09OQ0UocmVzZXJ2ZWRfdGhwX3RvdGFsKSk7CiYjNDM7fQomIzQzO3N0YXRpYyBzc2l6ZV90IGZyZWVfaHBhZ2VzX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosCiYjNDM7CQkJCXN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbG9uZyBmcmVlX2hwYWdlczsKJiM0MzsKJiM0MzsJc3Bpbl9sb2NrKCZhbXA7cmVzZXJ2ZWRfdGhwX2xvY2spOwomIzQzOwlmcmVlX2hwYWdlcyA9IHJlc2VydmVkX3RocF90b3RhbCAtIHJlc2VydmVkX3RocF91c2VkOwomIzQzOwlzcGluX3VubG9jaygmYW1wO3Jlc2VydmVkX3RocF9sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCAmIzM0OyVsdVxuJiMzNDssIGZyZWVfaHBhZ2VzKTsKJiM0Mzt9CiYjNDM7c3RhdGljIHNzaXplX3QgdXNlZF9ocGFnZXNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwKJiM0MzsJCQkJc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiYjNDM7ewomIzQzOwlyZXR1cm4gc3lzZnNfZW1pdChidWYsICYjMzQ7JWx1XG4mIzM0OywgUkVBRF9PTkNFKHJlc2VydmVkX3RocF91c2VkKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgdG90YWxfaHBhZ2VzX2F0dHIgPSBfX0FUVFJfUk8odG90YWxfaHBhZ2VzKTsKJiM0MztzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGZyZWVfaHBhZ2VzX2F0dHIgPSBfX0FUVFJfUk8oZnJlZV9ocGFnZXMpOwomIzQzO3N0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgdXNlZF9ocGFnZXNfYXR0ciA9IF9fQVRUUl9STyh1c2VkX2hwYWdlcyk7CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnJlc2VydmVkX3RocF9hdHRyc1tdID0gewomIzQzOwkmYW1wO3RvdGFsX2hwYWdlc19hdHRyLmF0dHIsCiYjNDM7CSZhbXA7ZnJlZV9ocGFnZXNfYXR0ci5hdHRyLAomIzQzOwkmYW1wO3VzZWRfaHBhZ2VzX2F0dHIuYXR0ciwKJiM0MzsJTlVMTCwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIHJlc2VydmVkX3RocF9hdHRyX2dyb3VwID0gewomIzQzOwkuYXR0cnMgPSByZXNlcnZlZF90aHBfYXR0cnMsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IF9faW5pdCByZXNlcnZlZF90aHBfaW5pdCh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGtvYmplY3QgKmtvYmo7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmIChyZXNlcnZlZF90aHBfcmVxdWVzdGVkICZhbXA7JmFtcDsgcmVzZXJ2ZWRfdGhwX2NtZGxpbmVfc2l6ZV92YWxpZCkgewomIzQzOwkJcmVzZXJ2ZWRfdGhwX3RvdGFsID0gcmVzZXJ2ZWRfdGhwX3BhZ2VibG9ja3MocmVzZXJ2ZWRfdGhwX3JlcXVlc3RlZCk7CiYjNDM7CQlwcl9pbmZvKCYjMzQ7cmVzZXJ2ZWQgJWx1LyVsdSBQTUQgVEhQIHBhZ2VibG9ja3MgKCVsdSBieXRlcyBlYWNoKVxuJiMzNDssCiYjNDM7CQkJcmVzZXJ2ZWRfdGhwX3RvdGFsLCByZXNlcnZlZF90aHBfcmVxdWVzdGVkLAomIzQzOwkJCXJlc2VydmVkX3RocF9jbWRsaW5lX3NpemUpOwomIzQzOwl9CiYjNDM7CWtvYmogPSBrb2JqZWN0X2NyZWF0ZV9hbmRfYWRkKCYjMzQ7cmVzZXJ2ZWRfdGhwJiMzNDssIG1tX2tvYmopOwomIzQzOwlpZiAoIWtvYmopCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJcmV0ID0gc3lzZnNfY3JlYXRlX2dyb3VwKGtvYmosICZhbXA7cmVzZXJ2ZWRfdGhwX2F0dHJfZ3JvdXApOwomIzQzOwlpZiAocmV0KQomIzQzOwkJa29iamVjdF9wdXQoa29iaik7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzO3N1YnN5c19pbml0Y2FsbChyZXNlcnZlZF90aHBfaW5pdCk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbW0vc2hvd19tZW0uYyBiL21tL3Nob3dfbWVtLmMKaW5kZXggNDNhY2E1YTJhYzk5MGEuLmU5MzgxYWZjYTRhY2FlIDEwMDY0NAotLS0gYS9tbS9zaG93X21lbS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3Nob3dfbWVtLmMKQEAgLTE0Miw2ICYjNDM7MTQyLDcgQEAgc3RhdGljIHZvaWQgc2hvd19taWdyYXRpb25fdHlwZXModW5zaWduZWQgY2hhciB0eXBlKQogI2lmZGVmIENPTkZJR19DTUEKIAkJW01JR1JBVEVfQ01BXQkJPSAmIzM5O0MmIzM5OywKICNlbmRpZgomIzQzOwkJW01JR1JBVEVfUkVTRVJWRURfVEhQXQk9ICYjMzk7VCYjMzk7LAogI2lmZGVmIENPTkZJR19NRU1PUllfSVNPTEFUSU9OCiAJCVtNSUdSQVRFX0lTT0xBVEVdCT0gJiMzOTtJJiMzOTssCiAjZW5kaWYKQEAgLTMwOCw2ICYjNDM7MzA5LDggQEAgc3RhdGljIHZvaWQgc2hvd19mcmVlX2FyZWFzKHVuc2lnbmVkIGludCBmaWx0ZXIsIG5vZGVtYXNrX3QgKm5vZGVtYXNrLCBpbnQgbWF4X3oKIAkJCSYjMzQ7IGhpZ2g6JWx1a0ImIzM0OwogCQkJJiMzNDsgcmVzZXJ2ZWRfaGlnaGF0b21pYzolbHVLQiYjMzQ7CiAJCQkmIzM0OyBmcmVlX2hpZ2hhdG9taWM6JWx1S0ImIzM0OwomIzQzOwkJCSYjMzQ7IHJlc2VydmVkX3RocDolbHVLQiYjMzQ7CiYjNDM7CQkJJiMzNDsgZnJlZV9yZXNlcnZlZF90aHA6JWx1S0ImIzM0OwogCQkJJiMzNDsgYWN0aXZlX2Fub246JWx1a0ImIzM0OwogCQkJJiMzNDsgaW5hY3RpdmVfYW5vbjolbHVrQiYjMzQ7CiAJCQkmIzM0OyBhY3RpdmVfZmlsZTolbHVrQiYjMzQ7CkBAIC0zMzEsNiAmIzQzOzMzNCw4IEBAIHN0YXRpYyB2b2lkIHNob3dfZnJlZV9hcmVhcyh1bnNpZ25lZCBpbnQgZmlsdGVyLCBub2RlbWFza190ICpub2RlbWFzaywgaW50IG1heF96CiAJCQlLKGhpZ2hfd21hcmtfcGFnZXMoem9uZSkpLAogCQkJSyh6b25lLSZndDtucl9yZXNlcnZlZF9oaWdoYXRvbWljKSwKIAkJCUsoem9uZS0mZ3Q7bnJfZnJlZV9oaWdoYXRvbWljKSwKJiM0MzsJCQlLKHpvbmUtJmd0O25yX3Jlc2VydmVkX3RocCksCiYjNDM7CQkJSyh6b25lLSZndDtucl9mcmVlX3Jlc2VydmVkX3RocCksCiAJCQlLKHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9aT05FX0FDVElWRV9BTk9OKSksCiAJCQlLKHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9aT05FX0lOQUNUSVZFX0FOT04pKSwKIAkJCUsoem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX1pPTkVfQUNUSVZFX0ZJTEUpKSwKZGlmZiAtLWdpdCBhL21tL3ZtYS5jIGIvbW0vdm1hLmMKaW5kZXggOWVlYTI4NTA4MThhODUuLjhjNGNkN2M5N2E5ODRjIDEwMDY0NAotLS0gYS9tbS92bWEuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bWEuYwpAQCAtNyw2ICYjNDM7Nyw4IEBACiAjaW5jbHVkZSAmIzM0O3ZtYV9pbnRlcm5hbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7dm1hLmgmIzM0OwogCiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2h1Z2VfbW0uaCZndDsKJiM0MzsKIHN0cnVjdCBtbWFwX3N0YXRlIHsKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKIAlzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWk7CkBAIC01MDcsNiAmIzQzOzUwOSwxMCBAQCBfX3NwbGl0X3ZtYShzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWksIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCVdBUk5fT04odm1hLSZndDt2bV9zdGFydCAmZ3Q7PSBhZGRyKTsKIAlXQVJOX09OKHZtYS0mZ3Q7dm1fZW5kICZsdDs9IGFkZHIpOwogCiYjNDM7CWlmICgodm1hLSZndDt2bV9mbGFncyAmYW1wOyBWTV9SRVNFUlZFRF9USFApICZhbXA7JmFtcDsKJiM0MzsJICAgICFJU19BTElHTkVEKGFkZHIsIEhQQUdFX1BNRF9TSVpFKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwogCWlmICh2bWEtJmd0O3ZtX29wcyAmYW1wOyZhbXA7IHZtYS0mZ3Q7dm1fb3BzLSZndDttYXlfc3BsaXQpIHsKIAkJZXJyID0gdm1hLSZndDt2bV9vcHMtJmd0O21heV9zcGxpdCh2bWEsIGFkZHIpOwogCQlpZiAoZXJyKQpAQCAtMTM2MSw2ICYjNDM7MTM2Nyw3IEBAIHN0YXRpYyB2b2lkIHZtc19jb21wbGV0ZV9tdW5tYXBfdm1hcyhzdHJ1Y3Qgdm1hX211bm1hcF9zdHJ1Y3QgKnZtcywKIAkJcmVtb3ZlX3ZtYSh2bWEpOwogCiAJdm1fdW5hY2N0X21lbW9yeSh2bXMtJmd0O25yX2FjY291bnRlZCk7CiYjNDM7CXJlc2VydmVkX3RocF91bmNoYXJnZSh2bXMtJmd0O25yX3Jlc2VydmVkX3RocCk7CiAJdmFsaWRhdGVfbW0obW0pOwogCWlmICh2bXMtJmd0O3VubG9jaykKIAkJbW1hcF9yZWFkX3VubG9jayhtbSk7CkBAIC0xNDIzLDYgJiM0MzsxNDMwLDExIEBAIHN0YXRpYyBpbnQgdm1zX2dhdGhlcl9tdW5tYXBfdm1hcyhzdHJ1Y3Qgdm1hX211bm1hcF9zdHJ1Y3QgKnZtcywKIAkJCWVycm9yID0gLUVQRVJNOwogCQkJZ290byBzdGFydF9zcGxpdF9mYWlsZWQ7CiAJCX0KJiM0MzsJCWlmICgodm1zLSZndDt2bWEtJmd0O3ZtX2ZsYWdzICZhbXA7IFZNX1JFU0VSVkVEX1RIUCkgJmFtcDsmYW1wOwomIzQzOwkJICAgICFJU19BTElHTkVEKHZtcy0mZ3Q7c3RhcnQsIEhQQUdFX1BNRF9TSVpFKSkgewomIzQzOwkJCWVycm9yID0gLUVJTlZBTDsKJiM0MzsJCQlnb3RvIHN0YXJ0X3NwbGl0X2ZhaWxlZDsKJiM0MzsJCX0KIAogCQllcnJvciA9IF9fc3BsaXRfdm1hKHZtcy0mZ3Q7dm1pLCB2bXMtJmd0O3ZtYSwgdm1zLSZndDtzdGFydCwgMSk7CiAJCWlmIChlcnJvcikKQEAgLTE0NDUsNiAmIzQzOzE0NTcsMTEgQEAgc3RhdGljIGludCB2bXNfZ2F0aGVyX211bm1hcF92bWFzKHN0cnVjdCB2bWFfbXVubWFwX3N0cnVjdCAqdm1zLAogCQl9CiAJCS8qIERvZXMgaXQgc3BsaXQgdGhlIGVuZD8gKi8KIAkJaWYgKG5leHQtJmd0O3ZtX2VuZCAmZ3Q7IHZtcy0mZ3Q7ZW5kKSB7CiYjNDM7CQkJaWYgKChuZXh0LSZndDt2bV9mbGFncyAmYW1wOyBWTV9SRVNFUlZFRF9USFApICZhbXA7JmFtcDsKJiM0MzsJCQkgICAgIUlTX0FMSUdORUQodm1zLSZndDtlbmQsIEhQQUdFX1BNRF9TSVpFKSkgewomIzQzOwkJCQllcnJvciA9IC1FSU5WQUw7CiYjNDM7CQkJCWdvdG8gZW5kX3NwbGl0X2ZhaWxlZDsKJiM0MzsJCQl9CiAJCQllcnJvciA9IF9fc3BsaXRfdm1hKHZtcy0mZ3Q7dm1pLCBuZXh0LCB2bXMtJmd0O2VuZCwgMCk7CiAJCQlpZiAoZXJyb3IpCiAJCQkJZ290byBlbmRfc3BsaXRfZmFpbGVkOwpAQCAtMTQ2NSw2ICYjNDM7MTQ4MiwxMSBAQCBzdGF0aWMgaW50IHZtc19nYXRoZXJfbXVubWFwX3ZtYXMoc3RydWN0IHZtYV9tdW5tYXBfc3RydWN0ICp2bXMsCiAJCWlmICh2bWFfdGVzdChuZXh0LCBWTUFfQUNDT1VOVF9CSVQpKQogCQkJdm1zLSZndDtucl9hY2NvdW50ZWQgJiM0Mzs9IG5ycGFnZXM7CiAKJiM0MzsJCWlmIChuZXh0LSZndDt2bV9mbGFncyAmYW1wOyBWTV9SRVNFUlZFRF9USFApCiYjNDM7CQkJdm1zLSZndDtucl9yZXNlcnZlZF90aHAgJiM0Mzs9CiYjNDM7CQkJCXJlc2VydmVkX3RocF9ocGFnZV9ucihuZXh0LSZndDt2bV9zdGFydCwKJiM0MzsJCQkJCQkgICAgICBuZXh0LSZndDt2bV9lbmQpOwomIzQzOwogCQlpZiAoaXNfZXhlY19tYXBwaW5nKG5leHQtJmd0O3ZtX2ZsYWdzKSkKIAkJCXZtcy0mZ3Q7ZXhlY192bSAmIzQzOz0gbnJwYWdlczsKIAkJZWxzZSBpZiAoaXNfc3RhY2tfbWFwcGluZyhuZXh0LSZndDt2bV9mbGFncykpCkBAIC0xNTYwLDYgJiM0MzsxNTgyLDcgQEAgc3RhdGljIHZvaWQgaW5pdF92bWFfbXVubWFwKHN0cnVjdCB2bWFfbXVubWFwX3N0cnVjdCAqdm1zLAogCXZtcy0mZ3Q7dWYgPSB1ZjsKIAl2bXMtJmd0O3ZtYV9jb3VudCA9IDA7CiAJdm1zLSZndDtucl9wYWdlcyA9IHZtcy0mZ3Q7bG9ja2VkX3ZtID0gdm1zLSZndDtucl9hY2NvdW50ZWQgPSAwOwomIzQzOwl2bXMtJmd0O25yX3Jlc2VydmVkX3RocCA9IDA7CiAJdm1zLSZndDtleGVjX3ZtID0gdm1zLSZndDtzdGFja192bSA9IHZtcy0mZ3Q7ZGF0YV92bSA9IDA7CiAJdm1zLSZndDt1bm1hcF9zdGFydCA9IEZJUlNUX1VTRVJfQUREUkVTUzsKIAl2bXMtJmd0O3VubWFwX2VuZCA9IFVTRVJfUEdUQUJMRVNfQ0VJTElORzsKZGlmZiAtLWdpdCBhL21tL3ZtYS5oIGIvbW0vdm1hLmgKaW5kZXggOGU0YjYxYTczMDRjNjguLjY4ZTQ0YWRlZTVjODllIDEwMDY0NAotLS0gYS9tbS92bWEuaAomIzQzOyYjNDM7JiM0MzsgYi9tbS92bWEuaApAQCAtNDgsNiAmIzQzOzQ4LDcgQEAgc3RydWN0IHZtYV9tdW5tYXBfc3RydWN0IHsKIAl1bnNpZ25lZCBsb25nIG5yX3BhZ2VzOyAgICAgICAgIC8qIE51bWJlciBvZiBwYWdlcyBiZWluZyByZW1vdmVkICovCiAJdW5zaWduZWQgbG9uZyBsb2NrZWRfdm07ICAgICAgICAvKiBOdW1iZXIgb2YgbG9ja2VkIHBhZ2VzICovCiAJdW5zaWduZWQgbG9uZyBucl9hY2NvdW50ZWQ7ICAgICAvKiBOdW1iZXIgb2YgVk1fQUNDT1VOVCBwYWdlcyAqLwomIzQzOwl1bnNpZ25lZCBsb25nIG5yX3Jlc2VydmVkX3RocDsgIC8qIE51bWJlciBvZiByZXNlcnZlZCBQTUQgVEhQIHNsb3RzICovCiAJdW5zaWduZWQgbG9uZyBleGVjX3ZtOwogCXVuc2lnbmVkIGxvbmcgc3RhY2tfdm07CiAJdW5zaWduZWQgbG9uZyBkYXRhX3ZtOwpkaWZmIC0tZ2l0IGEvdG9vbHMvaW5jbHVkZS9saW51eC9nZnBfdHlwZXMuaCBiL3Rvb2xzL2luY2x1ZGUvbGludXgvZ2ZwX3R5cGVzLmgKaW5kZXggNmM3NWRmMzBhMjgxZDEuLjUzYTFkMjJmY2Y5NTdlIDEwMDY0NAotLS0gYS90b29scy9pbmNsdWRlL2xpbnV4L2dmcF90eXBlcy5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2luY2x1ZGUvbGludXgvZ2ZwX3R5cGVzLmgKQEAgLTMzLDcgJiM0MzszMyw3IEBAIGVudW0gewogCV9fX0dGUF9JT19CSVQsCiAJX19fR0ZQX0ZTX0JJVCwKIAlfX19HRlBfWkVST19CSVQsCi0JX19fR0ZQX1VOVVNFRF9CSVQsCS8qIDB4MjAwdSB1bnVzZWQgKi8KJiM0MzsJX19fR0ZQX1JFU0VSVkVEX1RIUF9CSVQsCiAJX19fR0ZQX0RJUkVDVF9SRUNMQUlNX0JJVCwKIAlfX19HRlBfS1NXQVBEX1JFQ0xBSU1fQklULAogCV9fX0dGUF9XUklURV9CSVQsCkBAIC02OSw3ICYjNDM7NjksNyBAQCBlbnVtIHsKICNkZWZpbmUgX19fR0ZQX0lPCQlCSVQoX19fR0ZQX0lPX0JJVCkKICNkZWZpbmUgX19fR0ZQX0ZTCQlCSVQoX19fR0ZQX0ZTX0JJVCkKICNkZWZpbmUgX19fR0ZQX1pFUk8JCUJJVChfX19HRlBfWkVST19CSVQpCi0vKiAweDIwMHUgdW51c2VkICovCiYjNDM7I2RlZmluZSBfX19HRlBfUkVTRVJWRURfVEhQCUJJVChfX19HRlBfUkVTRVJWRURfVEhQX0JJVCkKICNkZWZpbmUgX19fR0ZQX0RJUkVDVF9SRUNMQUlNCUJJVChfX19HRlBfRElSRUNUX1JFQ0xBSU1fQklUKQogI2RlZmluZSBfX19HRlBfS1NXQVBEX1JFQ0xBSU0JQklUKF9fX0dGUF9LU1dBUERfUkVDTEFJTV9CSVQpCiAjZGVmaW5lIF9fX0dGUF9XUklURQkJQklUKF9fX0dGUF9XUklURV9CSVQpCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4ta21lbS5jIGIvdG9vbHMvcGVyZi9idWlsdGluLWttZW0uYwppbmRleCBlMWIyZjViYzFiYThkOC4uNDU3MzJhYWYxYTUyNWUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1rbWVtLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvcGVyZi9idWlsdGluLWttZW0uYwpAQCAtNjcyLDYgJiM0Mzs2NzIsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHsKIAl7ICYjMzQ7X19HRlBfTk9SRVRSWSYjMzQ7LAkJJiMzNDtOUiYjMzQ7IH0sCiAJeyAmIzM0O19fR0ZQX0NPTVAmIzM0OywJCQkmIzM0O0MmIzM0OyB9LAogCXsgJiMzNDtfX0dGUF9aRVJPJiMzNDssCQkJJiMzNDtaJiMzNDsgfSwKJiM0MzsJeyAmIzM0O19fR0ZQX1JFU0VSVkVEX1RIUCYjMzQ7LAkJJiMzNDtSVEhQJiMzNDsgfSwKIAl7ICYjMzQ7X19HRlBfTk9NRU1BTExPQyYjMzQ7LAkJJiMzNDtOTUEmIzM0OyB9LAogCXsgJiMzNDtfX0dGUF9NRU1BTExPQyYjMzQ7LAkJJiMzNDtNQSYjMzQ7IH0sCiAJeyAmIzM0O19fR0ZQX0hBUkRXQUxMJiMzNDssCQkmIzM0O0hXJiMzNDsgfSwKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmggYi90b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oCmluZGV4IGNmNzNiY2Q5YmI5ZDUyLi4wMjJiN2E1NmI2YTlmMyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oCkBAIC0xNjAsNiAmIzQzOzE2MCw3IEBAIGVudW0gewogI2VuZGlmCiAJREVDTEFSRV9WTUFfQklUKFVGRkRfTUlOT1IsIDQxKSwKIAlERUNMQVJFX1ZNQV9CSVQoU0VBTEVELCA0MiksCiYjNDM7CURFQ0xBUkVfVk1BX0JJVChSRVNFUlZFRF9USFAsIDQzKSwKIAkvKiBGbGFncyB0aGF0IHJldXNlIGZsYWdzIGFib3ZlLiAqLwogCURFQ0xBUkVfVk1BX0JJVF9BTElBUyhQS0VZX0JJVDAsIEhJR0hfQVJDSF8wKSwKIAlERUNMQVJFX1ZNQV9CSVRfQUxJQVMoUEtFWV9CSVQxLCBISUdIX0FSQ0hfMSksCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA3OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5ODI4CgkJCQkJCQlvdXRwdXQ6IDE3NAoJCQkJCQkJdGhvdWdodHM6IDI3NTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlICYjMzQ7TUFEVl9SRVNFUlZFRF9USFAmIzM0OyBQYXRjaCBmb3IgRnV6emluZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBXZSYjMzk7dmUgZ290IGEgbmV3IHBhdGNoIGludHJvZHVjaW5nIGBNQURWX1JFU0VSVkVEX1RIUGAgYW5kIGBWTV9SRVNFUlZFRF9USFBgLCB3aGljaCBpcyBjbGVhcmx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQuIFRoaXMgc2NyZWFtcyAmIzM0O2Z1enogbWUhJiMzNDsKCk15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gcGlucG9pbnQgdGhlIG1vc3QgaW50ZXJlc3RpbmcgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgdGhlIG9uZXMgdGhhdCBhcmUgZGlyZWN0bHkgdG91Y2hlZCBieSB0aGlzIG5ldyBtYWR2aXNlIGZsYWcuIE1vZGlmaWVkIG9yIGFkZGVkIGZ1bmN0aW9ucyBhcmU6IGBtYWR2aXNlX2h1Z2VwYWdlX3BvbGljeWAsIGByZXNlcnZlZF90aHBfbWFkdmlzZV9hbGlnbmVkYCwgYHJlc2VydmVkX3RocF9jaGFyZ2VgLCBgcmVzZXJ2ZWRfdGhwX3VuY2hhcmdlYCwgYHJlc2VydmVkX3RocF9ocGFnZV9ucmAsIGByZXNlcnZlZF90aHBfcGFnZWJsb2Nrc2AsIGBjaGVja19yZXNlcnZlZF90aHBfYWxpZ25tZW50YCwgYHZybV9jYWxjX2NoYXJnZWAsIGB1bm1hcF9zb3VyY2Vfdm1hYCwgYHZtc19nYXRoZXJfbXVubWFwX3ZtYXNgLCBgX19zcGxpdF92bWFgLCBgZHVwX21tYXBgLCBgdGVhcl9kb3duX3ZtYXNgLCBgZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2VgLCBgX19kb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZWAsIGB2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWRgLCBhbmQgYGh1Z2VwYWdlX21hZHZpc2VgLgoKTG9va2luZyBhdCB0aGUgY29uZmlncywgdGhpcyBwYXRjaCBkZWZpbml0ZWx5IG5lZWRzIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuIEkgc2VlIGNoZWNrcyBmb3IgYENPTkZJR182NEJJVGAgd2l0aGluIGBtYWR2aXNlX2h1Z2VwYWdlX3BvbGljeWAsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIHNlZSB0aGF0IHRoaXMgcGF0Y2ggdXNlcyBgSFBBR0VfUE1EX1NJWkVgLCB3aGljaCBpcyBwYXJ0IG9mIHRoZSBUSFAgc2V0dXAuCgpJIHdhbnQgdG8gdHJpbSBkb3duIHRoZSBsaXN0IHRvIGJlIG1vcmUgdGFyZ2V0ZWQuIEkmIzM5O2xsIGZvY3VzIG9uOiBgbWFkdmlzZV9odWdlcGFnZV9wb2xpY3lgLCBgcmVzZXJ2ZWRfdGhwX2NoYXJnZWAsIGByZXNlcnZlZF90aHBfdW5jaGFyZ2VgLCBgcmVzZXJ2ZWRfdGhwX3BhZ2VibG9ja3NgLCBgY2hlY2tfcmVzZXJ2ZWRfdGhwX2FsaWdubWVudGAsIGBodWdlcGFnZV9tYWR2aXNlYC4KCkEgcXVpY2sgY2hlY2sgY29uZmlybXMgYSBmZXcgZnVuY3Rpb25zJiMzOTsgcHJvcGVydGllcy4gYG1hZHZpc2VfaHVnZXBhZ2VfcG9saWN5YCBpcyBzdGF0aWMsIGByZXNlcnZlZF90aHBfY2hhcmdlYCwgYHJlc2VydmVkX3RocF91bmNoYXJnZWAsIGByZXNlcnZlZF90aHBfcGFnZWJsb2Nrc2AgYXJlIGdsb2JhbC4KCk5vdywgbGV0JiMzOTtzIGRpZyBkZWVwZXIuIFRoZSBgbW0vcmVzZXJ2ZWRfdGhwLmNgIGZpbGUgaXMgaW50ZXJlc3RpbmcuIEl0IGhhcyBmdW5jdGlvbnMgbGlrZSBgc2V0dXBfcmVzZXJ2ZWRfdGhwX3NpemVgLCBgc2V0dXBfcmVzZXJ2ZWRfdGhwX25yYCwgYW5kIGByZXNlcnZlZF90aHBfaW5pdGAuIEl0IHNlZW1zIHRvIHV0aWxpemUgYHRocF9yZXNlcnZlZF9zaXplYCBhbmQgYHRocF9yZXNlcnZlZF9ucmAgYm9vdCBwYXJhbWV0ZXJzLiBUaGlzIGlzIGEgY3J1Y2lhbCBvYnNlcnZhdGlvbi4gSWYgYHRocF9yZXNlcnZlZF9ucmAgaXNuJiMzOTt0IHByb3ZpZGVkLCBgcmVzZXJ2ZWRfdGhwX3RvdGFsYCBiZWNvbWVzIHplcm8uCgpBIGNhcmVmdWwgbG9vayBhdCBgcmVzZXJ2ZWRfdGhwX2NoYXJnZWAgcmV2ZWFscyB0aGF0IHdoZW4gYHJlc2VydmVkX3RocF90b3RhbGAgaXMgemVybywgYW55IGFsbG9jYXRpb24gcmVxdWVzdCB3aWxsIHJldHVybiBgLUVOT01FTWAuIFRoaXMgbWFrZXMgdGhlIGBtYWR2aXNlKE1BRFZfUkVTRVJWRURfVEhQKWAgY2FsbHMgdG8gZmFpbC4gSSB3b25kZXIgaWYgdGhlcmUmIzM5O3MgYSB3YXkgdG8gdGVzdCBpdC4KCkl0IGxvb2tzIGxpa2UgdGhlIGByZXNlcnZlZF90aHBfdG90YWxgIGNhbiBvbmx5IGJlIHNldCBhdCBib290IHRpbWUgdmlhIGB0aHBfcmVzZXJ2ZWRfbnJgLCBhbmQgdGhlcmUmIzM5O3Mgbm8gc3lzZnMgaW50ZXJmYWNlIGZvciBjaGFuZ2luZyBpdC4gSWYgYHJlc2VydmVkX3RocF90b3RhbCA9PSAwYCwgYFZNX1JFU0VSVkVEX1RIUGAgd2lsbCBuZXZlciBnZXQgc2V0LCBhbmQgYWxsIHRoZSBtb2RpZmljYXRpb25zIHRvIGBtbWFwLmNgLCBgbXJlbWFwLmNgLCBgdm1hLmNgLCBhbmQgYGh1Z2VfbWVtb3J5LmNgIHdpbGwgYmUgdW5yZWFjaGFibGUuIFRoaXMgaXMgY3JpdGljYWwuCgpDYW4gd2UgYnlwYXNzIHRoaXM/IEl0IGFwcGVhcnMgbm90LiBgbWFkdmlzZWAgcmVxdWlyZXMgdGhlIHN0YXJ0IGFuZCBlbmQgb2YgdGhlIHJlZ2lvbiB0byBiZSBhbGlnbmVkIHdpdGggdGhlIGBIUEFHRV9QTURfU0laRWAsIHRoZXJlZm9yZSwgdGhlIG51bWJlciBvZiBodWdlcGFnZXMgcmVxdWVzdGVkIHdpbGwgYmUgYXQgbGVhc3Qgb25lIGh1Z2VwYWdlLiBBbmQgdGhpcyByZXF1ZXN0IHdpbGwgZmFpbCBpZiB3ZSBoYXZlbiYjMzk7dCBwcm92aWRlZCBhIGJvb3QgcGFyYW1ldGVyLCBhbmQgdGhlcmVmb3JlIGhhdmUgbm90IHNldCBgcmVzZXJ2ZWRfdGhwX3RvdGFsYC4KCkV2ZW4gdGhvdWdoIHdlIG5lZWQgdGhhdCBib290IHBhcmFtZXRlciwgaXQmIzM5O3Mgc3RpbGwgd29ydGggZnV6emluZy4gVGhlIHBhdGNoIGlzIHN0aWxsIGRvaW5nIGZ1bmN0aW9uYWwgY2hhbmdlcy4gU3l6a2FsbGVyIG1pZ2h0IGhhdmUgdGhlIGFiaWxpdHkgdG8gc2V0IGJvb3QgcGFyYW1ldGVycyBvciBpdCYjMzk7cyBqdXN0IGEgbGltaXRhdGlvbiwgYnV0IHdlIHNob3VsZCByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpTbywgaGVyZSYjMzk7cyBteSBmb2N1c2VkIGxpc3Qgb2Ygc3ltYm9sczoKLSBgbWFkdmlzZV9odWdlcGFnZV9wb2xpY3lgCi0gYHJlc2VydmVkX3RocF9jaGFyZ2VgCi0gYHJlc2VydmVkX3RocF91bmNoYXJnZWAKLSBgcmVzZXJ2ZWRfdGhwX3BhZ2VibG9ja3NgCi0gYGNoZWNrX3Jlc2VydmVkX3RocF9hbGlnbm1lbnRgCi0gYHZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZGAKCkFuZCB0aGUga2V5IGNvbmZpZyByZXF1aXJlbWVudCBpczoKLSBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgCgpJbiBzaG9ydDogdGhlIHBhdGNoIGlzIGludHJvZHVjaW5nIGEgbmV3IGBNQURWX1JFU0VSVkVEX1RIUAoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDc6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWFkdmlzZV9odWdlcGFnZV9wb2xpY3kmIzM0OywKICAgICYjMzQ7cmVzZXJ2ZWRfdGhwX2NoYXJnZSYjMzQ7LAogICAgJiMzNDtyZXNlcnZlZF90aHBfdW5jaGFyZ2UmIzM0OywKICAgICYjMzQ7cmVzZXJ2ZWRfdGhwX3BhZ2VibG9ja3MmIzM0OywKICAgICYjMzQ7Y2hlY2tfcmVzZXJ2ZWRfdGhwX2FsaWdubWVudCYjMzQ7LAogICAgJiMzNDt2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBNQURWX1JFU0VSVkVEX1RIUCBtYWR2aXNlIGJlaGF2aW9yIGFuZCBWTV9SRVNFUlZFRF9USFAgVk1BIGZsYWcsIG1vZGlmeWluZyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGluY2x1ZGluZyBwYWdlIGZhdWx0IGhhbmRsaW5nLCBtcmVtYXAsIGFuZCBWTUEgc3BsaXR0aW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGtlcm5lbCYjMzk7cyBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21hZHZpc2VfaHVnZXBhZ2VfcG9saWN5JiMzNDssCiAgICAmIzM0O3Jlc2VydmVkX3RocF9jaGFyZ2UmIzM0OywKICAgICYjMzQ7cmVzZXJ2ZWRfdGhwX3VuY2hhcmdlJiMzNDssCiAgICAmIzM0O3Jlc2VydmVkX3RocF9wYWdlYmxvY2tzJiMzNDssCiAgICAmIzM0O2NoZWNrX3Jlc2VydmVkX3RocF9hbGlnbm1lbnQmIzM0OywKICAgICYjMzQ7dm1hX2FsbG9jX2Fub25fZm9saW9fcG1kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgTUFEVl9SRVNFUlZFRF9USFAgbWFkdmlzZSBiZWhhdmlvciBhbmQgVk1fUkVTRVJWRURfVEhQIFZNQSBmbGFnLCBtb2RpZnlpbmcgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbmNsdWRpbmcgcGFnZSBmYXVsdCBoYW5kbGluZywgbXJlbWFwLCBhbmQgVk1BIHNwbGl0dGluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBrZXJuZWwmIzM5O3MgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDA3OjM5OjU2LjEwMDE2NzMwNloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2OTkyODQ0OTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWFkdmlzZV9odWdlcGFnZV9wb2xpY3lcIixcbiAgICBcInJlc2VydmVkX3RocF9jaGFyZ2VcIixcbiAgICBcInJlc2VydmVkX3RocF91bmNoYXJnZVwiLFxuICAgIFwicmVzZXJ2ZWRfdGhwX3BhZ2VibG9ja3NcIixcbiAgICBcImNoZWNrX3Jlc2VydmVkX3RocF9hbGlnbm1lbnRcIixcbiAgICBcInZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgTUFEVl9SRVNFUlZFRF9USFAgbWFkdmlzZSBiZWhhdmlvciBhbmQgVk1fUkVTRVJWRURfVEhQIFZNQSBmbGFnLCBtb2RpZnlpbmcgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbmNsdWRpbmcgcGFnZSBmYXVsdCBoYW5kbGluZywgbXJlbWFwLCBhbmQgVk1BIHNwbGl0dGluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBrZXJuZWwncyBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNzozOTo1Ni4xMDAxNzQ2MDZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMzc5NDE5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDg4YzI4MTU1NjVkZjZjMDRhZDk0ZWJmYTQ4MDA1NGM4MTgzNmZlNzhcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBKdW4gMjcgMDc6Mzk6NTQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaCBiL2FyY2gvYWxwaGEvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmhcXG5pbmRleCAxZTcwMDQ2OGE2ODU4MC4uNjcyYTJmYzM0Mzg2MTQgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hbHBoYS9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaFxcbisrKyBiL2FyY2gvYWxwaGEvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmhcXG5AQCAtNzgsNiArNzgsOCBAQFxcbiBcXG4gI2RlZmluZSBNQURWX0NPTExBUFNFXFx0MjVcXHRcXHQvKiBTeW5jaHJvbm91cyBodWdlcGFnZSBjb2xsYXBzZSAqL1xcbiBcXG4rI2RlZmluZSBNQURWX1JFU0VSVkVEX1RIUCAyNlxcdFxcdC8qIFVzZSByZXNlcnZlZCB0cmFuc3BhcmVudCBodWdlcGFnZXMgKi9cXG4rXFxuICNkZWZpbmUgTUFEVl9HVUFSRF9JTlNUQUxMIDEwMlxcdFxcdC8qIGZhdGFsIHNpZ25hbCBvbiBhY2Nlc3MgdG8gcmFuZ2UgKi9cXG4gI2RlZmluZSBNQURWX0dVQVJEX1JFTU9WRSAxMDNcXHRcXHQvKiB1bmd1YXJkIHJhbmdlICovXFxuIFxcbmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmggYi9hcmNoL21pcHMvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmhcXG5pbmRleCBiNzAwZGFlMjhjNDgyZC4uYTk0YmY3NGRlZTIxY2EgMTAwNjQ0XFxuLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oXFxuKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oXFxuQEAgLTEwNSw2ICsxMDUsOCBAQFxcbiBcXG4gI2RlZmluZSBNQURWX0NPTExBUFNFXFx0MjVcXHRcXHQvKiBTeW5jaHJvbm91cyBodWdlcGFnZSBjb2xsYXBzZSAqL1xcbiBcXG4rI2RlZmluZSBNQURWX1JFU0VSVkVEX1RIUCAyNlxcdFxcdC8qIFVzZSByZXNlcnZlZCB0cmFuc3BhcmVudCBodWdlcGFnZXMgKi9cXG4rXFxuICNkZWZpbmUgTUFEVl9HVUFSRF9JTlNUQUxMIDEwMlxcdFxcdC8qIGZhdGFsIHNpZ25hbCBvbiBhY2Nlc3MgdG8gcmFuZ2UgKi9cXG4gI2RlZmluZSBNQURWX0dVQVJEX1JFTU9WRSAxMDNcXHRcXHQvKiB1bmd1YXJkIHJhbmdlICovXFxuIFxcbmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oXFxuaW5kZXggYjZhNzA5NTA2OTg3ZTAuLmZlMmZkZGVmYjZjNWQ5IDEwMDY0NFxcbi0tLSBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oXFxuKysrIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmhcXG5AQCAtNzIsNiArNzIsOCBAQFxcbiBcXG4gI2RlZmluZSBNQURWX0NPTExBUFNFXFx0MjVcXHRcXHQvKiBTeW5jaHJvbm91cyBodWdlcGFnZSBjb2xsYXBzZSAqL1xcbiBcXG4rI2RlZmluZSBNQURWX1JFU0VSVkVEX1RIUCAyNlxcdFxcdC8qIFVzZSByZXNlcnZlZCB0cmFuc3BhcmVudCBodWdlcGFnZXMgKi9cXG4rXFxuICNkZWZpbmUgTUFEVl9IV1BPSVNPTiAgICAgMTAwXFx0XFx0LyogcG9pc29uIGEgcGFnZSBmb3IgdGVzdGluZyAqL1xcbiAjZGVmaW5lIE1BRFZfU09GVF9PRkZMSU5FIDEwMVxcdFxcdC8qIHNvZnQgb2ZmbGluZSBwYWdlIGZvciB0ZXN0aW5nICovXFxuIFxcbmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaCBiL2FyY2gveHRlbnNhL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oXFxuaW5kZXggOTlkNGNjZWU3ZjZlOGEuLmJiNjAzNTMwYmE3OTlmIDEwMDY0NFxcbi0tLSBhL2FyY2gveHRlbnNhL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oXFxuKysrIGIvYXJjaC94dGVuc2EvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmhcXG5AQCAtMTEzLDYgKzExMyw4IEBAXFxuIFxcbiAjZGVmaW5lIE1BRFZfQ09MTEFQU0VcXHQyNVxcdFxcdC8qIFN5bmNocm9ub3VzIGh1Z2VwYWdlIGNvbGxhcHNlICovXFxuIFxcbisjZGVmaW5lIE1BRFZfUkVTRVJWRURfVEhQIDI2XFx0XFx0LyogVXNlIHJlc2VydmVkIHRyYW5zcGFyZW50IGh1Z2VwYWdlcyAqL1xcbitcXG4gI2RlZmluZSBNQURWX0dVQVJEX0lOU1RBTEwgMTAyXFx0XFx0LyogZmF0YWwgc2lnbmFsIG9uIGFjY2VzcyB0byByYW5nZSAqL1xcbiAjZGVmaW5lIE1BRFZfR1VBUkRfUkVNT1ZFIDEwM1xcdFxcdC8qIHVuZ3VhcmQgcmFuZ2UgKi9cXG4gXFxuZGlmZiAtLWdpdCBhL2ZzL3Byb2MvdGFza19tbXUuYyBiL2ZzL3Byb2MvdGFza19tbXUuY1xcbmluZGV4IGQzMjQwOGY3Y2Q1ZWQyLi42NWM0YjJhNjFhZWFjNyAxMDA2NDRcXG4tLS0gYS9mcy9wcm9jL3Rhc2tfbW11LmNcXG4rKysgYi9mcy9wcm9jL3Rhc2tfbW11LmNcXG5AQCAtMTI0NSw2ICsxMjQ1LDkgQEAgc3RhdGljIHZvaWQgc2hvd19zbWFwX3ZtYV9mbGFncyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbiAjZW5kaWZcXG4gI2lmZGVmIENPTkZJR182NEJJVFxcbiBcXHRcXHRbaWxvZzIoVk1fU0VBTEVEKV0gPSBcXFwic2xcXFwiLFxcbisjZW5kaWZcXG4rI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbitcXHRcXHRbaWxvZzIoVk1fUkVTRVJWRURfVEhQKV0gPSBcXFwicnRcXFwiLFxcbiAjZW5kaWZcXG4gXFx0fTtcXG4gXFx0c2l6ZV90IGk7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZ2ZwLmggYi9pbmNsdWRlL2xpbnV4L2dmcC5oXFxuaW5kZXggY2RmOTVhOWYwYjg3YzEuLjJkMDU5MjlmZDhjNzJkIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvZ2ZwLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2dmcC5oXFxuQEAgLTMwLDYgKzMwLDkgQEAgc3RhdGljIGlubGluZSBpbnQgZ2ZwX21pZ3JhdGV0eXBlKGNvbnN0IGdmcF90IGdmcF9mbGFncylcXG4gXFx0QlVJTERfQlVHX09OKCgoX19fR0ZQX01PVkFCTEUgfCBfX19HRlBfUkVDTEFJTUFCTEUpIFxcdTAwM2VcXHUwMDNlXFxuIFxcdFxcdCAgICAgIEdGUF9NT1ZBQkxFX1NISUZUKSAhPSBNSUdSQVRFX0hJR0hBVE9NSUMpO1xcbiBcXG4rXFx0aWYgKHVubGlrZWx5KGdmcF9mbGFncyBcXHUwMDI2IF9fR0ZQX1JFU0VSVkVEX1RIUCkpXFxuK1xcdFxcdHJldHVybiBNSUdSQVRFX1JFU0VSVkVEX1RIUDtcXG4rXFxuIFxcdGlmICh1bmxpa2VseShwYWdlX2dyb3VwX2J5X21vYmlsaXR5X2Rpc2FibGVkKSlcXG4gXFx0XFx0cmV0dXJuIE1JR1JBVEVfVU5NT1ZBQkxFO1xcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9nZnBfdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvZ2ZwX3R5cGVzLmhcXG5pbmRleCA1NGNhMGM4OGJhYjZlOC4uMWY4MmE5NDkxZDM1N2YgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9nZnBfdHlwZXMuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvZ2ZwX3R5cGVzLmhcXG5AQCAtMzMsNyArMzMsNyBAQCBlbnVtIHtcXG4gXFx0X19fR0ZQX0lPX0JJVCxcXG4gXFx0X19fR0ZQX0ZTX0JJVCxcXG4gXFx0X19fR0ZQX1pFUk9fQklULFxcbi1cXHRfX19HRlBfVU5VU0VEX0JJVCxcXHQvKiAweDIwMHUgdW51c2VkICovXFxuK1xcdF9fX0dGUF9SRVNFUlZFRF9USFBfQklULFxcbiBcXHRfX19HRlBfRElSRUNUX1JFQ0xBSU1fQklULFxcbiBcXHRfX19HRlBfS1NXQVBEX1JFQ0xBSU1fQklULFxcbiBcXHRfX19HRlBfV1JJVEVfQklULFxcbkBAIC02OSw3ICs2OSw3IEBAIGVudW0ge1xcbiAjZGVmaW5lIF9fX0dGUF9JT1xcdFxcdEJJVChfX19HRlBfSU9fQklUKVxcbiAjZGVmaW5lIF9fX0dGUF9GU1xcdFxcdEJJVChfX19HRlBfRlNfQklUKVxcbiAjZGVmaW5lIF9fX0dGUF9aRVJPXFx0XFx0QklUKF9fX0dGUF9aRVJPX0JJVClcXG4tLyogMHgyMDB1IHVudXNlZCAqL1xcbisjZGVmaW5lIF9fX0dGUF9SRVNFUlZFRF9USFBcXHRCSVQoX19fR0ZQX1JFU0VSVkVEX1RIUF9CSVQpXFxuICNkZWZpbmUgX19fR0ZQX0RJUkVDVF9SRUNMQUlNXFx0QklUKF9fX0dGUF9ESVJFQ1RfUkVDTEFJTV9CSVQpXFxuICNkZWZpbmUgX19fR0ZQX0tTV0FQRF9SRUNMQUlNXFx0QklUKF9fX0dGUF9LU1dBUERfUkVDTEFJTV9CSVQpXFxuICNkZWZpbmUgX19fR0ZQX1dSSVRFXFx0XFx0QklUKF9fX0dGUF9XUklURV9CSVQpXFxuQEAgLTE0MSw2ICsxNDEsOSBAQCBlbnVtIHtcXG4gICogJV9fR0ZQX05PX09CSl9FWFQgY2F1c2VzIHNsYWIgYWxsb2NhdGlvbiB0byBoYXZlIG5vIG9iamVjdCBleHRlbnNpb24uXFxuICAqIG1hcmtfb2JqX2NvZGV0YWdfZW1wdHkoKSBzaG91bGQgYmUgY2FsbGVkIHVwb24gZnJlZWluZyBmb3Igb2JqZWN0cyBhbGxvY2F0ZWRcXG4gICogd2l0aCB0aGlzIGZsYWcgdG8gaW5kaWNhdGUgdGhhdCB0aGVpciBOVUxMIHRhZ3MgYXJlIGV4cGVjdGVkIGFuZCBub3JtYWwuXFxuKyAqXFxuKyAqICVfX0dGUF9SRVNFUlZFRF9USFAgaXMgYW4gaW50ZXJuYWwgZmxhZyBmb3IgcmVzZXJ2ZWQgVEhQIGZhdWx0cy4gSXQgcmVzdHJpY3RzXFxuKyAqdGhlIGFsbG9jYXRpb24gdG8gJU1JR1JBVEVfUkVTRVJWRURfVEhQIHBhZ2VibG9ja3MuXFxuICAqL1xcbiAjZGVmaW5lIF9fR0ZQX1JFQ0xBSU1BQkxFICgoX19mb3JjZSBnZnBfdClfX19HRlBfUkVDTEFJTUFCTEUpXFxuICNkZWZpbmUgX19HRlBfV1JJVEVcXHQoKF9fZm9yY2UgZ2ZwX3QpX19fR0ZQX1dSSVRFKVxcbkBAIC0xNDgsNiArMTUxLDcgQEAgZW51bSB7XFxuICNkZWZpbmUgX19HRlBfVEhJU05PREVcXHQoKF9fZm9yY2UgZ2ZwX3QpX19fR0ZQX1RISVNOT0RFKVxcbiAjZGVmaW5lIF9fR0ZQX0FDQ09VTlRcXHQoKF9fZm9yY2UgZ2ZwX3QpX19fR0ZQX0FDQ09VTlQpXFxuICNkZWZpbmUgX19HRlBfTk9fT0JKX0VYVCAgICgoX19mb3JjZSBnZnBfdClfX19HRlBfTk9fT0JKX0VYVClcXG4rI2RlZmluZSBfX0dGUF9SRVNFUlZFRF9USFAgKChfX2ZvcmNlIGdmcF90KV9fX0dGUF9SRVNFUlZFRF9USFApXFxuIFxcbiAvKipcXG4gICogRE9DOiBXYXRlcm1hcmsgbW9kaWZpZXJzXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHVnZV9tbS5oIGIvaW5jbHVkZS9saW51eC9odWdlX21tLmhcXG5pbmRleCBhZDIwZjdmOGMxNzk0NC4uNGZlOTY1MWNkODZiNWUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9odWdlX21tLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaFxcbkBAIC0zMzAsNiArMzMwLDggQEAgdW5zaWduZWQgbG9uZyB0aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcbiBcXHRcXHRpZiAodm1fZmxhZ3MgXFx1MDAyNiBWTV9IVUdFUEFHRSlcXG4gXFx0XFx0XFx0bWFzayB8PSBSRUFEX09OQ0UoaHVnZV9hbm9uX29yZGVyc19tYWR2aXNlKTtcXG4rXFx0XFx0aWYgKHZtX2ZsYWdzIFxcdTAwMjYgVk1fUkVTRVJWRURfVEhQKVxcbitcXHRcXHRcXHRtYXNrIHw9IEJJVChQTURfT1JERVIpO1xcbiBcXHRcXHRpZiAoaHVnZXBhZ2VfZ2xvYmFsX2Fsd2F5cygpIHx8XFxuIFxcdFxcdCAgICAoKHZtX2ZsYWdzIFxcdTAwMjYgVk1fSFVHRVBBR0UpIFxcdTAwMjZcXHUwMDI2IGh1Z2VwYWdlX2dsb2JhbF9lbmFibGVkKCkpKVxcbiBcXHRcXHRcXHRtYXNrIHw9IFJFQURfT05DRShodWdlX2Fub25fb3JkZXJzX2luaGVyaXQpO1xcbkBAIC0zNzEsNyArMzczLDcgQEAgc3RhdGljIGlubGluZSBib29sIHZtYV90aHBfZGlzYWJsZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdCAqIEFyZSBUSFBzIGRpc2FibGVkIG9ubHkgZm9yIFZNQXMgd2hlcmUgd2UgZGlkbid0IGdldCBhbiBleHBsaWNpdFxcbiBcXHQgKiBhZHZpc2UgdG8gdXNlIHRoZW0/XFxuIFxcdCAqL1xcbi1cXHRpZiAodm1fZmxhZ3MgXFx1MDAyNiBWTV9IVUdFUEFHRSlcXG4rXFx0aWYgKHZtX2ZsYWdzIFxcdTAwMjYgKFZNX0hVR0VQQUdFIHwgVk1fUkVTRVJWRURfVEhQKSlcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXHQvKlxcbiBcXHQgKiBGb3JjaW5nIGEgY29sbGFwc2UgKGUuZy4sIG1hZHZfY29sbGFwc2UpLCBpcyBhIGNsZWFyIGFkdmljZSB0b1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmhcXG5pbmRleCA0ODVkZjljMmRiZGRiMy4uMjc4Y2Y0YmZkNGVjNWIgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9tbS5oXFxuQEAgLTM1Myw2ICszNTMsNyBAQCBlbnVtIHtcXG4gI2VuZGlmXFxuIFxcdERFQ0xBUkVfVk1BX0JJVChVRkZEX01JTk9SLCA0MSksXFxuIFxcdERFQ0xBUkVfVk1BX0JJVChTRUFMRUQsIDQyKSxcXG4rXFx0REVDTEFSRV9WTUFfQklUKFJFU0VSVkVEX1RIUCwgNDMpLFxcbiBcXHQvKiBGbGFncyB0aGF0IHJldXNlIGZsYWdzIGFib3ZlLiAqL1xcbiBcXHRERUNMQVJFX1ZNQV9CSVRfQUxJQVMoUEtFWV9CSVQwLCBISUdIX0FSQ0hfMCksXFxuIFxcdERFQ0xBUkVfVk1BX0JJVF9BTElBUyhQS0VZX0JJVDEsIEhJR0hfQVJDSF8xKSxcXG5AQCAtNTI2LDYgKzUyNywxMiBAQCBlbnVtIHtcXG4gI2RlZmluZSBWTUFfRFJPUFBBQkxFXFx0XFx0RU1QVFlfVk1BX0ZMQUdTXFxuICNlbmRpZlxcbiBcXG4rI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbisjZGVmaW5lIFZNX1JFU0VSVkVEX1RIUFxcdFxcdElOSVRfVk1fRkxBRyhSRVNFUlZFRF9USFApXFxuKyNlbHNlXFxuKyNkZWZpbmUgVk1fUkVTRVJWRURfVEhQXFx0XFx0Vk1fTk9ORVxcbisjZW5kaWZcXG4rXFxuIC8qIEJpdHMgc2V0IGluIHRoZSBWTUEgdW50aWwgdGhlIHN0YWNrIGlzIGluIGl0cyBmaW5hbCBsb2NhdGlvbiAqL1xcbiAjZGVmaW5lIFZNX1NUQUNLX0lOQ09NUExFVEVfU0VUVVAgKFZNX1JBTkRfUkVBRCB8IFZNX1NFUV9SRUFEIHwgVk1fU1RBQ0tfRUFSTFkpXFxuIFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxcbmluZGV4IGNhMjcxMjE4NzE0NzVjLi40NDE4ZDBjOWFjY2RjOCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxcbkBAIC0xMzMsMTAgKzEzMyw5IEBAIGVudW0gbWlncmF0ZXR5cGUge1xcbiBcXHQgKiBfX2ZyZWVfcGFnZWJsb2NrX2NtYSgpIGZ1bmN0aW9uLlxcbiBcXHQgKi9cXG4gXFx0TUlHUkFURV9DTUEsXFxuLVxcdF9fTUlHUkFURV9UWVBFX0VORCA9IE1JR1JBVEVfQ01BLFxcbi0jZWxzZVxcbi1cXHRfX01JR1JBVEVfVFlQRV9FTkQgPSBNSUdSQVRFX0hJR0hBVE9NSUMsXFxuICNlbmRpZlxcbitcXHRNSUdSQVRFX1JFU0VSVkVEX1RIUCxcXG4rXFx0X19NSUdSQVRFX1RZUEVfRU5EID0gTUlHUkFURV9SRVNFUlZFRF9USFAsXFxuICNpZmRlZiBDT05GSUdfTUVNT1JZX0lTT0xBVElPTlxcbiBcXHRNSUdSQVRFX0lTT0xBVEUsXFx0LyogY2FuJ3QgYWxsb2NhdGUgZnJvbSBoZXJlICovXFxuICNlbmRpZlxcbkBAIC0xNjEsNiArMTYwLDkgQEAgZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaWdyYXRldHlwZV9uYW1lc1tNSUdSQVRFX1RZUEVTXTtcXG4gIyAgZGVmaW5lIGlzX21pZ3JhdGVfY21hX2ZvbGlvKGZvbGlvLCBwZm4pIGZhbHNlXFxuICNlbmRpZlxcbiBcXG4rI2RlZmluZSBpc19taWdyYXRlX3Jlc2VydmVkX3RocChtaWdyYXRldHlwZSkgXFxcXFxcbitcXHR1bmxpa2VseSgobWlncmF0ZXR5cGUpID09IE1JR1JBVEVfUkVTRVJWRURfVEhQKVxcbitcXG4gc3RhdGljIGlubGluZSBib29sIGlzX21pZ3JhdGVfbW92YWJsZShpbnQgbXQpXFxuIHtcXG4gXFx0cmV0dXJuIGlzX21pZ3JhdGVfY21hKG10KSB8fCBtdCA9PSBNSUdSQVRFX01PVkFCTEU7XFxuQEAgLTk3NSw2ICs5NzcsOSBAQCBzdHJ1Y3Qgem9uZSB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbnJfcmVzZXJ2ZWRfaGlnaGF0b21pYztcXG4gXFx0dW5zaWduZWQgbG9uZyBucl9mcmVlX2hpZ2hhdG9taWM7XFxuIFxcbitcXHR1bnNpZ25lZCBsb25nIG5yX3Jlc2VydmVkX3RocDtcXG4rXFx0dW5zaWduZWQgbG9uZyBucl9mcmVlX3Jlc2VydmVkX3RocDtcXG4rXFxuIFxcdC8qXFxuIFxcdCAqIFdlIGRvbid0IGtub3cgaWYgdGhlIG1lbW9yeSB0aGF0IHdlJ3JlIGdvaW5nIHRvIGFsbG9jYXRlIHdpbGwgYmVcXG4gXFx0ICogZnJlZWFibGUgb3IvYW5kIGl0IHdpbGwgYmUgcmVsZWFzZWQgZXZlbnR1YWxseSwgc28gdG8gYXZvaWQgdG90YWxseVxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9tbWZsYWdzLmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9tbWZsYWdzLmhcXG5pbmRleCBhNmU1YTQ0YzliNDI5OS4uM2RiNDBlYmQ3MDYwYmQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvbW1mbGFncy5oXFxuKysrIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvbW1mbGFncy5oXFxuQEAgLTI0LDYgKzI0LDcgQEBcXG4gXFx0VFJBQ0VfR0ZQX0VNKElPKVxcdFxcdFxcdFxcXFxcXG4gXFx0VFJBQ0VfR0ZQX0VNKEZTKVxcdFxcdFxcdFxcXFxcXG4gXFx0VFJBQ0VfR0ZQX0VNKFpFUk8pXFx0XFx0XFx0XFxcXFxcbitcXHRUUkFDRV9HRlBfRU0oUkVTRVJWRURfVEhQKVxcdFxcdFxcXFxcXG4gXFx0VFJBQ0VfR0ZQX0VNKERJUkVDVF9SRUNMQUlNKVxcdFxcdFxcXFxcXG4gXFx0VFJBQ0VfR0ZQX0VNKEtTV0FQRF9SRUNMQUlNKVxcdFxcdFxcXFxcXG4gXFx0VFJBQ0VfR0ZQX0VNKFdSSVRFKVxcdFxcdFxcdFxcXFxcXG5AQCAtNzIsOCArNzMsNyBAQFxcbiBcXG4gVFJBQ0VfR0ZQX0ZMQUdTXFxuIFxcbi0vKiBKdXN0IGluIGNhc2UgdGhlc2UgYXJlIGV2ZXIgdXNlZCAqL1xcbi1UUkFDRV9ERUZJTkVfRU5VTShfX19HRlBfVU5VU0VEX0JJVCk7XFxuKy8qIEp1c3QgaW4gY2FzZSB0aGlzIGlzIGV2ZXIgdXNlZCAqL1xcbiBUUkFDRV9ERUZJTkVfRU5VTShfX19HRlBfTEFTVF9CSVQpO1xcbiBcXG4gI2RlZmluZSBnZnBmbGFnX3N0cmluZyhmbGFnKSB7KF9fZm9yY2UgdW5zaWduZWQgbG9uZylmbGFnLCAjZmxhZ31cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL21tYW4tY29tbW9uLmggYi9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvbW1hbi1jb21tb24uaFxcbmluZGV4IGVmMWMyN2ZhM2M1NzBmLi5iM2QxNDQ4OTM1ZWFkMSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvbW1hbi1jb21tb24uaFxcbisrKyBiL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9tbWFuLWNvbW1vbi5oXFxuQEAgLTc5LDYgKzc5LDggQEBcXG4gXFxuICNkZWZpbmUgTUFEVl9DT0xMQVBTRVxcdDI1XFx0XFx0LyogU3luY2hyb25vdXMgaHVnZXBhZ2UgY29sbGFwc2UgKi9cXG4gXFxuKyNkZWZpbmUgTUFEVl9SRVNFUlZFRF9USFAgMjZcXHRcXHQvKiBVc2UgcmVzZXJ2ZWQgdHJhbnNwYXJlbnQgaHVnZXBhZ2VzICovXFxuK1xcbiAjZGVmaW5lIE1BRFZfR1VBUkRfSU5TVEFMTCAxMDJcXHRcXHQvKiBmYXRhbCBzaWduYWwgb24gYWNjZXNzIHRvIHJhbmdlICovXFxuICNkZWZpbmUgTUFEVl9HVUFSRF9SRU1PVkUgMTAzXFx0XFx0LyogdW5ndWFyZCByYW5nZSAqL1xcbiBcXG5kaWZmIC0tZ2l0IGEvbW0vTWFrZWZpbGUgYi9tbS9NYWtlZmlsZVxcbmluZGV4IGVmZjlmOWU3ZTA2MWMxLi5mZDc0YTczOTJlMzQ2NyAxMDA2NDRcXG4tLS0gYS9tbS9NYWtlZmlsZVxcbisrKyBiL21tL01ha2VmaWxlXFxuQEAgLTk4LDcgKzk4LDcgQEAgb2JqLSQoQ09ORklHX01FTVRFU1QpXFx0XFx0Kz0gbWVtdGVzdC5vXFxuIG9iai0kKENPTkZJR19NSUdSQVRJT04pICs9IG1pZ3JhdGUub1xcbiBvYmotJChDT05GSUdfTlVNQSkgKz0gbWVtb3J5LXRpZXJzLm9cXG4gb2JqLSQoQ09ORklHX0RFVklDRV9NSUdSQVRJT04pICs9IG1pZ3JhdGVfZGV2aWNlLm9cXG4tb2JqLSQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSArPSBodWdlX21lbW9yeS5vIGtodWdlcGFnZWQub1xcbitvYmotJChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpICs9IGh1Z2VfbWVtb3J5Lm8ga2h1Z2VwYWdlZC5vIHJlc2VydmVkX3RocC5vXFxuIG9iai0kKENPTkZJR19QQUdFX0NPVU5URVIpICs9IHBhZ2VfY291bnRlci5vXFxuIG9iai0kKENPTkZJR19MSVZFVVBEQVRFX01FTUZEKSArPSBtZW1mZF9sdW8ub1xcbiBvYmotJChDT05GSUdfTUVNQ0dfVjEpICs9IG1lbWNvbnRyb2wtdjEub1xcbmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuY1xcbmluZGV4IDJiY2NiMGE1M2EwYTYwLi42NmQ4NWEyZmE4NTVmMyAxMDA2NDRcXG4tLS0gYS9tbS9odWdlX21lbW9yeS5jXFxuKysrIGIvbW0vaHVnZV9tZW1vcnkuY1xcbkBAIC0xMjY3LDYgKzEyNjcsOSBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICp2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdGNvbnN0IGludCBvcmRlciA9IEhQQUdFX1BNRF9PUkRFUjtcXG4gXFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4gXFxuK1xcdGlmICh2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fUkVTRVJWRURfVEhQKVxcbitcXHRcXHRnZnAgfD0gX19HRlBfUkVTRVJWRURfVEhQO1xcbitcXG4gXFx0Zm9saW8gPSB2bWFfYWxsb2NfZm9saW8oZ2ZwLCBvcmRlciwgdm1hLCBhZGRyIFxcdTAwMjYgSFBBR0VfUE1EX01BU0spO1xcbiBcXG4gXFx0aWYgKHVubGlrZWx5KCFmb2xpbykpIHtcXG5AQCAtMTM0NCw4ICsxMzQ3LDExIEBAIHN0YXRpYyB2bV9mYXVsdF90IF9fZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuIFxcdHZtX2ZhdWx0X3QgcmV0ID0gMDtcXG4gXFxuIFxcdGZvbGlvID0gdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kKHZtYSwgdm1mLVxcdTAwM2VhZGRyZXNzKTtcXG4tXFx0aWYgKHVubGlrZWx5KCFmb2xpbykpXFxuK1xcdGlmICh1bmxpa2VseSghZm9saW8pKSB7XFxuK1xcdFxcdGlmICh2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fUkVTRVJWRURfVEhQKVxcbitcXHRcXHRcXHRyZXR1cm4gVk1fRkFVTFRfT09NO1xcbiBcXHRcXHRyZXR1cm4gVk1fRkFVTFRfRkFMTEJBQ0s7XFxuK1xcdH1cXG4gXFxuIFxcdHBndGFibGUgPSBwdGVfYWxsb2Nfb25lKHZtYS1cXHUwMDNldm1fbW0pO1xcbiBcXHRpZiAodW5saWtlbHkoIXBndGFibGUpKSB7XFxuQEAgLTE0ODAsMTUgKzE0ODYsMTcgQEAgdm1fZmF1bHRfdCBkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4gXFx0dm1fZmF1bHRfdCByZXQ7XFxuIFxcbiBcXHRpZiAoIXRocF92bWFfc3VpdGFibGVfb3JkZXIodm1hLCBoYWRkciwgUE1EX09SREVSKSlcXG4tXFx0XFx0cmV0dXJuIFZNX0ZBVUxUX0ZBTExCQUNLO1xcbitcXHRcXHRyZXR1cm4gKHZtYS1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiBWTV9SRVNFUlZFRF9USFApID8gVk1fRkFVTFRfT09NIDpcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgVk1fRkFVTFRfRkFMTEJBQ0s7XFxuIFxcdHJldCA9IHZtZl9hbm9uX3ByZXBhcmUodm1mKTtcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0a2h1Z2VwYWdlZF9lbnRlcl92bWEodm1hLCB2bWEtXFx1MDAzZXZtX2ZsYWdzKTtcXG4gXFxuLVxcdGlmICghKHZtZi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBGQVVMVF9GTEFHX1dSSVRFKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHRcXHQhbW1fZm9yYmlkc196ZXJvcGFnZSh2bWEtXFx1MDAzZXZtX21tKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHRcXHR0cmFuc3BhcmVudF9odWdlcGFnZV91c2VfemVyb19wYWdlKCkpIHtcXG4rXFx0aWYgKCEodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX1JFU0VSVkVEX1RIUCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICEodm1mLVxcdTAwM2VmbGFncyBcXHUwMDI2IEZBVUxUX0ZMQUdfV1JJVEUpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAhbW1fZm9yYmlkc196ZXJvcGFnZSh2bWEtXFx1MDAzZXZtX21tKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgdHJhbnNwYXJlbnRfaHVnZXBhZ2VfdXNlX3plcm9fcGFnZSgpKSB7XFxuIFxcdFxcdHBndGFibGVfdCBwZ3RhYmxlO1xcbiBcXHRcXHRzdHJ1Y3QgZm9saW8gKnplcm9fZm9saW87XFxuIFxcdFxcdHZtX2ZhdWx0X3QgcmV0O1xcbmRpZmYgLS1naXQgYS9tbS9pbnRlcm5hbC5oIGIvbW0vaW50ZXJuYWwuaFxcbmluZGV4IDE4MWU3OWYxZDZhMjA3Li40YjJhMTNkMzUzNzcyMSAxMDA2NDRcXG4tLS0gYS9tbS9pbnRlcm5hbC5oXFxuKysrIGIvbW0vaW50ZXJuYWwuaFxcbkBAIC0xNDc3LDYgKzE0NzcsNyBAQCB1bnNpZ25lZCBpbnQgcmVjbGFpbV9jbGVhbl9wYWdlc19mcm9tX2xpc3Qoc3RydWN0IHpvbmUgKnpvbmUsXFxuICNkZWZpbmUgQUxMT0NfSElHSEFUT01JQ1xcdDB4MjAwIC8qIEFsbG93cyBhY2Nlc3MgdG8gTUlHUkFURV9ISUdIQVRPTUlDICovXFxuICNkZWZpbmUgQUxMT0NfVFJZTE9DS1xcdFxcdDB4NDAwIC8qIE9ubHkgdXNlIHNwaW5fdHJ5bG9jayBpbiBhbGxvY2F0aW9uIHBhdGggKi9cXG4gI2RlZmluZSBBTExPQ19LU1dBUERcXHRcXHQweDgwMCAvKiBhbGxvdyB3YWtpbmcgb2Yga3N3YXBkLCBfX0dGUF9LU1dBUERfUkVDTEFJTSBzZXQgKi9cXG4rI2RlZmluZSBBTExPQ19SRVNFUlZFRF9USFBcXHQweDEwMDAgLyogQWxsb3dzIGFjY2VzcyB0byByZXNlcnZlZCBUSFAgcGFnZWJsb2NrcyAqL1xcbiBcXG4gLyogRmxhZ3MgdGhhdCBhbGxvdyBhbGxvY2F0aW9ucyBiZWxvdyB0aGUgbWluIHdhdGVybWFyay4gKi9cXG4gI2RlZmluZSBBTExPQ19SRVNFUlZFUyAoQUxMT0NfTk9OX0JMT0NLfEFMTE9DX01JTl9SRVNFUlZFfEFMTE9DX0hJR0hBVE9NSUN8QUxMT0NfT09NKVxcbkBAIC0xOTUxLDQgKzE5NTIsOSBAQCBzdGF0aWMgaW5saW5lIGludCBnZXRfc3lzY3RsX21heF9tYXBfY291bnQodm9pZClcXG4gYm9vbCBtYXlfZXhwYW5kX3ZtKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzLFxcbiBcXHRcXHQgICB1bnNpZ25lZCBsb25nIG5wYWdlcyk7XFxuIFxcbit1bnNpZ25lZCBsb25nIHJlc2VydmVkX3RocF9wYWdlYmxvY2tzKHVuc2lnbmVkIGxvbmcgbnJfaHBhZ2VzKTtcXG4rdW5zaWduZWQgbG9uZyByZXNlcnZlZF90aHBfaHBhZ2VfbnIodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpO1xcbitpbnQgcmVzZXJ2ZWRfdGhwX2NoYXJnZSh1bnNpZ25lZCBsb25nIG5yX2hwYWdlcyk7XFxuK3ZvaWQgcmVzZXJ2ZWRfdGhwX3VuY2hhcmdlKHVuc2lnbmVkIGxvbmcgbnJfaHBhZ2VzKTtcXG4rXFxuICNlbmRpZlxcdC8qIF9fTU1fSU5URVJOQUxfSCAqL1xcbmRpZmYgLS1naXQgYS9tbS9raHVnZXBhZ2VkLmMgYi9tbS9raHVnZXBhZ2VkLmNcXG5pbmRleCA2MTdiY2E3NmRiNDliNi4uODAyOTNlOGMxZTRlNzYgMTAwNjQ0XFxuLS0tIGEvbW0va2h1Z2VwYWdlZC5jXFxuKysrIGIvbW0va2h1Z2VwYWdlZC5jXFxuQEAgLTQ1MSw2ICs0NTEsNyBAQCBpbnQgaHVnZXBhZ2VfbWFkdmlzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0c3dpdGNoIChhZHZpY2UpIHtcXG4gXFx0Y2FzZSBNQURWX0hVR0VQQUdFOlxcbiBcXHRcXHQqdm1fZmxhZ3MgXFx1MDAyNj0gflZNX05PSFVHRVBBR0U7XFxuK1xcdFxcdCp2bV9mbGFncyBcXHUwMDI2PSB+Vk1fUkVTRVJWRURfVEhQO1xcbiBcXHRcXHQqdm1fZmxhZ3MgfD0gVk1fSFVHRVBBR0U7XFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIElmIHRoZSB2bWEgYmVjb21lIGdvb2QgZm9yIGtodWdlcGFnZWQgdG8gc2NhbixcXG5AQCAtNDYxLDYgKzQ2Miw3IEBAIGludCBodWdlcGFnZV9tYWR2aXNlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBNQURWX05PSFVHRVBBR0U6XFxuIFxcdFxcdCp2bV9mbGFncyBcXHUwMDI2PSB+Vk1fSFVHRVBBR0U7XFxuK1xcdFxcdCp2bV9mbGFncyBcXHUwMDI2PSB+Vk1fUkVTRVJWRURfVEhQO1xcbiBcXHRcXHQqdm1fZmxhZ3MgfD0gVk1fTk9IVUdFUEFHRTtcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogU2V0dGluZyBWTV9OT0hVR0VQQUdFIHdpbGwgcHJldmVudCBraHVnZXBhZ2VkIGZyb20gc2Nhbm5pbmdcXG5AQCAtNDY4LDYgKzQ3MCwxMiBAQCBpbnQgaHVnZXBhZ2VfbWFkdmlzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0XFx0ICogaXQgZ290IHJlZ2lzdGVyZWQgYmVmb3JlIFZNX05PSFVHRVBBR0Ugd2FzIHNldC5cXG4gXFx0XFx0ICovXFxuIFxcdFxcdGJyZWFrO1xcbitcXHRjYXNlIE1BRFZfUkVTRVJWRURfVEhQOlxcbitcXHRcXHQqdm1fZmxhZ3MgXFx1MDAyNj0gfihWTV9IVUdFUEFHRSB8IFZNX05PSFVHRVBBR0UpO1xcbitcXHRcXHQqdm1fZmxhZ3MgfD0gVk1fUkVTRVJWRURfVEhQO1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG4gXFxuIFxcdHJldHVybiAwO1xcbmRpZmYgLS1naXQgYS9tbS9tYWR2aXNlLmMgYi9tbS9tYWR2aXNlLmNcXG5pbmRleCBjZDliYjA3NzA3MmNjYi4uZGQ5MTEwNWRiNjhjNzUgMTAwNjQ0XFxuLS0tIGEvbW0vbWFkdmlzZS5jXFxuKysrIGIvbW0vbWFkdmlzZS5jXFxuQEAgLTEzLDYgKzEzLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BhZ2UtaXNvbGF0aW9uLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wYWdlX2lkbGUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VzZXJmYXVsdGZkX2suaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2h1Z2VfbW0uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2h1Z2V0bGIuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZhbGxvYy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZmFkdmlzZS5oXFx1MDAzZVxcbkBAIC0xMzMxLDYgKzEzMzIsNjUgQEAgc3RhdGljIGJvb2wgY2FuX21hZHZpc2VfbW9kaWZ5KHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbiB9XFxuICNlbmRpZlxcbiBcXG4rc3RhdGljIGJvb2wgcmVzZXJ2ZWRfdGhwX21hZHZpc2VfYWxpZ25lZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4rXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yX3JhbmdlICpyYW5nZSlcXG4re1xcbitcXHRpZiAoISh2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fUkVTRVJWRURfVEhQKSlcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbitcXHRyZXR1cm4gSVNfQUxJR05FRChyYW5nZS1cXHUwMDNlc3RhcnQsIEhQQUdFX1BNRF9TSVpFKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgICAgSVNfQUxJR05FRChyYW5nZS1cXHUwMDNlZW5kLCBIUEFHRV9QTURfU0laRSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgbWFkdmlzZV9odWdlcGFnZV9wb2xpY3koc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IsXFxuK1xcdFxcdFxcdFxcdCAgIHZtX2ZsYWdzX3QgKm5ld19mbGFncyxcXG4rXFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyAqcmVzZXJ2ZWRfaHBhZ2VzLFxcbitcXHRcXHRcXHRcXHQgICBib29sICpjaGFyZ2VfcmVzZXJ2ZWRfdGhwLFxcbitcXHRcXHRcXHRcXHQgICBib29sICp1bmNoYXJnZV9yZXNlcnZlZF90aHApXFxuK3tcXG4rXFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSBtYWR2X2JlaGF2aW9yLVxcdTAwM2V2bWE7XFxuK1xcdHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yX3JhbmdlICpyYW5nZSA9IFxcdTAwMjZtYWR2X2JlaGF2aW9yLVxcdTAwM2VyYW5nZTtcXG4rXFx0dW5zaWduZWQgbG9uZyBocGFnZXM7XFxuK1xcdGludCBiZWhhdmlvciA9IG1hZHZfYmVoYXZpb3ItXFx1MDAzZWJlaGF2aW9yO1xcbitcXHRpbnQgZXJyb3I7XFxuK1xcbitcXHRzd2l0Y2ggKGJlaGF2aW9yKSB7XFxuK1xcdGNhc2UgTUFEVl9IVUdFUEFHRTpcXG4rXFx0Y2FzZSBNQURWX05PSFVHRVBBR0U6XFxuK1xcdFxcdGVycm9yID0gaHVnZXBhZ2VfbWFkdmlzZSh2bWEsIG5ld19mbGFncywgYmVoYXZpb3IpO1xcbitcXHRcXHRpZiAoZXJyb3IpXFxuK1xcdFxcdFxcdHJldHVybiBlcnJvcjtcXG4rXFx0XFx0KnVuY2hhcmdlX3Jlc2VydmVkX3RocCA9ICh2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fUkVTRVJWRURfVEhQKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHRcXHRcXHQgISgqbmV3X2ZsYWdzIFxcdTAwMjYgVk1fUkVTRVJWRURfVEhQKTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdGNhc2UgTUFEVl9SRVNFUlZFRF9USFA6XFxuK1xcdFxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0aWYgKCF2bWFfaXNfYW5vbnltb3VzKHZtYSkgfHwgKCpuZXdfZmxhZ3MgXFx1MDAyNiBWTV9TSEFSRUQpIHx8XFxuK1xcdFxcdCAgICAoKm5ld19mbGFncyBcXHUwMDI2IFZNX1NQRUNJQUwpKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0aWYgKCFJU19BTElHTkVEKHJhbmdlLVxcdTAwM2VzdGFydCwgSFBBR0VfUE1EX1NJWkUpIHx8XFxuK1xcdFxcdCAgICAhSVNfQUxJR05FRChyYW5nZS1cXHUwMDNlZW5kLCBIUEFHRV9QTURfU0laRSkpXFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0XFx0ZXJyb3IgPSBodWdlcGFnZV9tYWR2aXNlKHZtYSwgbmV3X2ZsYWdzLCBiZWhhdmlvcik7XFxuK1xcdFxcdGlmIChlcnJvcilcXG4rXFx0XFx0XFx0cmV0dXJuIGVycm9yO1xcbitcXG4rXFx0XFx0aWYgKCEodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX1JFU0VSVkVEX1RIUCkpIHtcXG4rXFx0XFx0XFx0aHBhZ2VzID0gcmVzZXJ2ZWRfdGhwX2hwYWdlX25yKHJhbmdlLVxcdTAwM2VzdGFydCwgcmFuZ2UtXFx1MDAzZWVuZCk7XFxuK1xcdFxcdFxcdGVycm9yID0gcmVzZXJ2ZWRfdGhwX2NoYXJnZShocGFnZXMpO1xcbitcXHRcXHRcXHRpZiAoZXJyb3IpXFxuK1xcdFxcdFxcdFxcdHJldHVybiBlcnJvcjtcXG4rXFx0XFx0XFx0KnJlc2VydmVkX2hwYWdlcyA9IGhwYWdlcztcXG4rXFx0XFx0XFx0KmNoYXJnZV9yZXNlcnZlZF90aHAgPSB0cnVlO1xcbitcXHRcXHR9XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbit9XFxuK1xcbiAvKlxcbiAgKiBBcHBseSBhbiBtYWR2aXNlIGJlaGF2aW9yIHRvIGEgcmVnaW9uIG9mIGEgdm1hLiAgbWFkdmlzZV91cGRhdGVfdm1hXFxuICAqIHdpbGwgaGFuZGxlIHNwbGl0dGluZyBhIHZtIGFyZWEgaW50byBzZXBhcmF0ZSBhcmVhcywgZWFjaCBhcmVhIHdpdGggaXRzIG93blxcbkBAIC0xMzQyLDYgKzE0MDIsOSBAQCBzdGF0aWMgaW50IG1hZHZpc2Vfdm1hX2JlaGF2aW9yKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbiBcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IG1hZHZfYmVoYXZpb3ItXFx1MDAzZXZtYTtcXG4gXFx0dm1fZmxhZ3NfdCBuZXdfZmxhZ3MgPSB2bWEtXFx1MDAzZXZtX2ZsYWdzO1xcbiBcXHRzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvcl9yYW5nZSAqcmFuZ2UgPSBcXHUwMDI2bWFkdl9iZWhhdmlvci1cXHUwMDNlcmFuZ2U7XFxuK1xcdHVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWRfaHBhZ2VzID0gMDtcXG4rXFx0Ym9vbCBjaGFyZ2VfcmVzZXJ2ZWRfdGhwID0gZmFsc2U7XFxuK1xcdGJvb2wgdW5jaGFyZ2VfcmVzZXJ2ZWRfdGhwID0gZmFsc2U7XFxuIFxcdGludCBlcnJvcjtcXG4gXFxuIFxcdGlmICh1bmxpa2VseSghY2FuX21hZHZpc2VfbW9kaWZ5KG1hZHZfYmVoYXZpb3IpKSlcXG5AQCAtMTM1MywxNCArMTQxNiwyMiBAQCBzdGF0aWMgaW50IG1hZHZpc2Vfdm1hX2JlaGF2aW9yKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbiBcXHRjYXNlIE1BRFZfV0lMTE5FRUQ6XFxuIFxcdFxcdHJldHVybiBtYWR2aXNlX3dpbGxuZWVkKG1hZHZfYmVoYXZpb3IpO1xcbiBcXHRjYXNlIE1BRFZfQ09MRDpcXG4rXFx0XFx0aWYgKCFyZXNlcnZlZF90aHBfbWFkdmlzZV9hbGlnbmVkKHZtYSwgcmFuZ2UpKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0XFx0cmV0dXJuIG1hZHZpc2VfY29sZChtYWR2X2JlaGF2aW9yKTtcXG4gXFx0Y2FzZSBNQURWX1BBR0VPVVQ6XFxuK1xcdFxcdGlmICghcmVzZXJ2ZWRfdGhwX21hZHZpc2VfYWxpZ25lZCh2bWEsIHJhbmdlKSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdFxcdHJldHVybiBtYWR2aXNlX3BhZ2VvdXQobWFkdl9iZWhhdmlvcik7XFxuIFxcdGNhc2UgTUFEVl9GUkVFOlxcbiBcXHRjYXNlIE1BRFZfRE9OVE5FRUQ6XFxuIFxcdGNhc2UgTUFEVl9ET05UTkVFRF9MT0NLRUQ6XFxuK1xcdFxcdGlmICghcmVzZXJ2ZWRfdGhwX21hZHZpc2VfYWxpZ25lZCh2bWEsIHJhbmdlKSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdFxcdHJldHVybiBtYWR2aXNlX2RvbnRuZWVkX2ZyZWUobWFkdl9iZWhhdmlvcik7XFxuIFxcdGNhc2UgTUFEVl9DT0xMQVBTRTpcXG4rXFx0XFx0aWYgKHZtYS1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiBWTV9SRVNFUlZFRF9USFApXFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHRcXHRyZXR1cm4gbWFkdmlzZV9jb2xsYXBzZSh2bWEsIHJhbmdlLVxcdTAwM2VzdGFydCwgcmFuZ2UtXFx1MDAzZWVuZCxcXG4gXFx0XFx0XFx0XFx1MDAyNm1hZHZfYmVoYXZpb3ItXFx1MDAzZWxvY2tfZHJvcHBlZCk7XFxuIFxcdGNhc2UgTUFEVl9HVUFSRF9JTlNUQUxMOlxcbkBAIC0xNDE2LDcgKzE0ODcsMTEgQEAgc3RhdGljIGludCBtYWR2aXNlX3ZtYV9iZWhhdmlvcihzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgTUFEVl9IVUdFUEFHRTpcXG4gXFx0Y2FzZSBNQURWX05PSFVHRVBBR0U6XFxuLVxcdFxcdGVycm9yID0gaHVnZXBhZ2VfbWFkdmlzZSh2bWEsIFxcdTAwMjZuZXdfZmxhZ3MsIGJlaGF2aW9yKTtcXG4rXFx0Y2FzZSBNQURWX1JFU0VSVkVEX1RIUDpcXG4rXFx0XFx0ZXJyb3IgPSBtYWR2aXNlX2h1Z2VwYWdlX3BvbGljeShtYWR2X2JlaGF2aW9yLCBcXHUwMDI2bmV3X2ZsYWdzLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2cmVzZXJ2ZWRfaHBhZ2VzLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2Y2hhcmdlX3Jlc2VydmVkX3RocCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx1MDAyNnVuY2hhcmdlX3Jlc2VydmVkX3RocCk7XFxuIFxcdFxcdGlmIChlcnJvcilcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcdFxcdGJyZWFrO1xcbkBAIC0xNDMxLDYgKzE1MDYsMTEgQEAgc3RhdGljIGludCBtYWR2aXNlX3ZtYV9iZWhhdmlvcihzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcXG4gXFx0Vk1fV0FSTl9PTl9PTkNFKG1hZHZfYmVoYXZpb3ItXFx1MDAzZWxvY2tfbW9kZSAhPSBNQURWSVNFX01NQVBfV1JJVEVfTE9DSyk7XFxuIFxcbiBcXHRlcnJvciA9IG1hZHZpc2VfdXBkYXRlX3ZtYShuZXdfZmxhZ3MsIG1hZHZfYmVoYXZpb3IpO1xcbitcXHRpZiAoZXJyb3IgXFx1MDAyNlxcdTAwMjYgY2hhcmdlX3Jlc2VydmVkX3RocClcXG4rXFx0XFx0cmVzZXJ2ZWRfdGhwX3VuY2hhcmdlKHJlc2VydmVkX2hwYWdlcyk7XFxuK1xcdGVsc2UgaWYgKCFlcnJvciBcXHUwMDI2XFx1MDAyNiB1bmNoYXJnZV9yZXNlcnZlZF90aHApXFxuK1xcdFxcdHJlc2VydmVkX3RocF91bmNoYXJnZShyZXNlcnZlZF90aHBfaHBhZ2VfbnIocmFuZ2UtXFx1MDAzZXN0YXJ0LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgcmFuZ2UtXFx1MDAzZWVuZCkpO1xcbiBvdXQ6XFxuIFxcdC8qXFxuIFxcdCAqIG1hZHZpc2UoKSByZXR1cm5zIEVBR0FJTiBpZiBrZXJuZWwgcmVzb3VyY2VzLCBzdWNoIGFzXFxuQEAgLTE1NDEsNiArMTYyMSw3IEBAIG1hZHZpc2VfYmVoYXZpb3JfdmFsaWQoaW50IGJlaGF2aW9yKVxcbiBcXHRjYXNlIE1BRFZfSFVHRVBBR0U6XFxuIFxcdGNhc2UgTUFEVl9OT0hVR0VQQUdFOlxcbiBcXHRjYXNlIE1BRFZfQ09MTEFQU0U6XFxuK1xcdGNhc2UgTUFEVl9SRVNFUlZFRF9USFA6XFxuICNlbmRpZlxcbiBcXHRjYXNlIE1BRFZfRE9OVERVTVA6XFxuIFxcdGNhc2UgTUFEVl9ET0RVTVA6XFxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmNcXG5pbmRleCBmZjMzOGMyYWJlOTIzMS4uMjI1ZmMxYWUyMjM4NmQgMTAwNjQ0XFxuLS0tIGEvbW0vbWVtb3J5LmNcXG4rKysgYi9tbS9tZW1vcnkuY1xcbkBAIC01Mjk3LDYgKzUyOTcsOSBAQCBzdGF0aWMgdm1fZmF1bHRfdCBkb19hbm9ueW1vdXNfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4gXFx0aWYgKHZtYS1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiBWTV9TSEFSRUQpXFxuIFxcdFxcdHJldHVybiBWTV9GQVVMVF9TSUdCVVM7XFxuIFxcbitcXHRpZiAodW5saWtlbHkodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX1JFU0VSVkVEX1RIUCkpXFxuK1xcdFxcdHJldHVybiBWTV9GQVVMVF9PT007XFxuK1xcbiBcXHQvKlxcbiBcXHQgKiBVc2UgcHRlX2FsbG9jKCkgaW5zdGVhZCBvZiBwdGVfYWxsb2NfbWFwKCksIHNvIHRoYXQgT09NIGNhblxcbiBcXHQgKiBiZSBkaXN0aW5ndWlzaGVkIGZyb20gYSB0cmFuc2llbnQgZmFpbHVyZSBvZiBwdGVfb2Zmc2V0X21hcCgpLlxcbmRpZmYgLS1naXQgYS9tbS9tbWFwLmMgYi9tbS9tbWFwLmNcXG5pbmRleCAyMzExYWU3YzJmZjQ1Yy4uNDgxOGIxNGVjMGZmNmMgMTAwNjQ0XFxuLS0tIGEvbW0vbW1hcC5jXFxuKysrIGIvbW0vbW1hcC5jXFxuQEAgLTEyNTEsNiArMTI1MSw3IEBAIHVuc2lnbmVkIGxvbmcgdGVhcl9kb3duX3ZtYXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSxcXG4gXFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgZW5kKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbnJfYWNjb3VudGVkID0gMDtcXG4rXFx0dW5zaWduZWQgbG9uZyBucl9yZXNlcnZlZF90aHAgPSAwO1xcbiBcXHRpbnQgY291bnQgPSAwO1xcbiBcXG4gXFx0bW1hcF9hc3NlcnRfd3JpdGVfbG9ja2VkKG1tKTtcXG5AQCAtMTI1OCw2ICsxMjU5LDEwIEBAIHVuc2lnbmVkIGxvbmcgdGVhcl9kb3duX3ZtYXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSxcXG4gXFx0ZG8ge1xcbiBcXHRcXHRpZiAodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX0FDQ09VTlQpXFxuIFxcdFxcdFxcdG5yX2FjY291bnRlZCArPSB2bWFfcGFnZXModm1hKTtcXG4rXFx0XFx0aWYgKHZtYS1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiBWTV9SRVNFUlZFRF9USFApXFxuK1xcdFxcdFxcdG5yX3Jlc2VydmVkX3RocCArPVxcbitcXHRcXHRcXHRcXHRyZXNlcnZlZF90aHBfaHBhZ2VfbnIodm1hLVxcdTAwM2V2bV9zdGFydCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgdm1hLVxcdTAwM2V2bV9lbmQpO1xcbiBcXHRcXHR2bWFfbWFya19kZXRhY2hlZCh2bWEpO1xcbiBcXHRcXHRyZW1vdmVfdm1hKHZtYSk7XFxuIFxcdFxcdGNvdW50Kys7XFxuQEAgLTEyNjYsNiArMTI3MSw3IEBAIHVuc2lnbmVkIGxvbmcgdGVhcl9kb3duX3ZtYXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSxcXG4gXFx0fSB3aGlsZSAodm1hIFxcdTAwMjZcXHUwMDI2IHZtYS1cXHUwMDNldm1fZW5kIFxcdTAwM2M9IGVuZCk7XFxuIFxcbiBcXHRWTV9XQVJOX09OX09OQ0UoY291bnQgIT0gbW0tXFx1MDAzZW1hcF9jb3VudCk7XFxuK1xcdHJlc2VydmVkX3RocF91bmNoYXJnZShucl9yZXNlcnZlZF90aHApO1xcbiBcXHRyZXR1cm4gbnJfYWNjb3VudGVkO1xcbiB9XFxuIFxcbkBAIC0xNzMzLDYgKzE3MzksNyBAQCBfX2xhdGVudF9lbnRyb3B5IGludCBkdXBfbW1hcChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IG1tX3N0cnVjdCAqb2xkbW0pXFxuIFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqbXBudCwgKnRtcDtcXG4gXFx0aW50IHJldHZhbDtcXG4gXFx0dW5zaWduZWQgbG9uZyBjaGFyZ2UgPSAwO1xcbitcXHR1bnNpZ25lZCBsb25nIHJlc2VydmVkX2NoYXJnZSA9IDA7XFxuIFxcdExJU1RfSEVBRCh1Zik7XFxuIFxcdFZNQV9JVEVSQVRPUih2bWksIG1tLCAwKTtcXG4gXFxuQEAgLTE3NzUsNiArMTc4Miw3IEBAIF9fbGF0ZW50X2VudHJvcHkgaW50IGR1cF9tbWFwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgbW1fc3RydWN0ICpvbGRtbSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdH1cXG4gXFx0XFx0Y2hhcmdlID0gMDtcXG4rXFx0XFx0cmVzZXJ2ZWRfY2hhcmdlID0gMDtcXG4gXFx0XFx0aWYgKG1wbnQtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fQUNDT1VOVCkge1xcbiBcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGxlbiA9IHZtYV9wYWdlcyhtcG50KTtcXG4gXFxuQEAgLTE3ODIsNiArMTc5MCwxNSBAQCBfX2xhdGVudF9lbnRyb3B5IGludCBkdXBfbW1hcChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IG1tX3N0cnVjdCAqb2xkbW0pXFxuIFxcdFxcdFxcdFxcdGdvdG8gZmFpbF9ub21lbTtcXG4gXFx0XFx0XFx0Y2hhcmdlID0gbGVuO1xcbiBcXHRcXHR9XFxuK1xcdFxcdGlmIChtcG50LVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX1JFU0VSVkVEX1RIUCkge1xcbitcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGxlbjtcXG4rXFxuK1xcdFxcdFxcdGxlbiA9IHJlc2VydmVkX3RocF9ocGFnZV9ucihtcG50LVxcdTAwM2V2bV9zdGFydCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgIG1wbnQtXFx1MDAzZXZtX2VuZCk7XFxuK1xcdFxcdFxcdGlmIChyZXNlcnZlZF90aHBfY2hhcmdlKGxlbikpXFxuK1xcdFxcdFxcdFxcdGdvdG8gZmFpbF9ub21lbTtcXG4rXFx0XFx0XFx0cmVzZXJ2ZWRfY2hhcmdlID0gbGVuO1xcbitcXHRcXHR9XFxuIFxcbiBcXHRcXHR0bXAgPSB2bV9hcmVhX2R1cChtcG50KTtcXG4gXFx0XFx0aWYgKCF0bXApXFxuQEAgLTE5MTYsNiArMTkzMyw3IEBAIF9fbGF0ZW50X2VudHJvcHkgaW50IGR1cF9tbWFwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgbW1fc3RydWN0ICpvbGRtbSlcXG4gXFx0dm1fYXJlYV9mcmVlKHRtcCk7XFxuIGZhaWxfbm9tZW06XFxuIFxcdHJldHZhbCA9IC1FTk9NRU07XFxuK1xcdHJlc2VydmVkX3RocF91bmNoYXJnZShyZXNlcnZlZF9jaGFyZ2UpO1xcbiBcXHR2bV91bmFjY3RfbWVtb3J5KGNoYXJnZSk7XFxuIFxcdGdvdG8gbG9vcF9vdXQ7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvbW0vbXJlbWFwLmMgYi9tbS9tcmVtYXAuY1xcbmluZGV4IGU5YzhiMWQwNTgzMmJlLi5hZTM3ZTBiM2NlNzg4ZSAxMDA2NDRcXG4tLS0gYS9tbS9tcmVtYXAuY1xcbisrKyBiL21tL21yZW1hcC5jXFxuQEAgLTI0LDYgKzI0LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tdV9ub3RpZmllci5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdWFjY2Vzcy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdXNlcmZhdWx0ZmRfay5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaHVnZV9tbS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtcG9saWN5LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wZ2FsbG9jLmhcXHUwMDNlXFxuIFxcbkBAIC02OSw2ICs3MCw3IEBAIHN0cnVjdCB2bWFfcmVtYXBfc3RydWN0IHtcXG4gXFx0ZW51bSBtcmVtYXBfdHlwZSByZW1hcF90eXBlO1xcdC8qIGV4cGFuZCwgc2hyaW5rLCBldGMuICovXFxuIFxcdGJvb2wgbW1hcF9sb2NrZWQ7XFx0XFx0LyogSXMgbW0gY3VycmVudGx5IHdyaXRlLWxvY2tlZD8gKi9cXG4gXFx0dW5zaWduZWQgbG9uZyBjaGFyZ2VkO1xcdFxcdC8qIElmIFZNX0FDQ09VTlQsICMgcGFnZXMgdG8gYWNjb3VudC4gKi9cXG4rXFx0dW5zaWduZWQgbG9uZyByZXNlcnZlZF90aHBfY2hhcmdlZDsgLyogSWYgVk1fUkVTRVJWRURfVEhQLCAjIGhwYWdlcy4gKi9cXG4gXFx0Ym9vbCB2bWlfbmVlZHNfaW52YWxpZGF0ZTtcXHQvKiBJcyB0aGUgVk1BIGl0ZXJhdG9yIGludmFsaWRhdGVkPyAqL1xcbiB9O1xcbiBcXG5AQCAtOTYyLDYgKzk2NCw5IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHZybV9zZXRfbmV3X2FkZHIoc3RydWN0IHZtYV9yZW1hcF9zdHJ1Y3QgKnZybSlcXG4gXFx0XFx0XFx0XFx0bWFwX2ZsYWdzKTtcXG4gXFx0aWYgKElTX0VSUl9WQUxVRShyZXMpKVxcbiBcXHRcXHRyZXR1cm4gcmVzO1xcbitcXHRpZiAoKHZtYS1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiBWTV9SRVNFUlZFRF9USFApIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAhSVNfQUxJR05FRChyZXMsIEhQQUdFX1BNRF9TSVpFKSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbiBcXHR2cm0tXFx1MDAzZW5ld19hZGRyID0gcmVzO1xcbiBcXHRyZXR1cm4gMDtcXG5AQCAtOTc3LDI0ICs5ODIsNDQgQEAgc3RhdGljIGJvb2wgdnJtX2NhbGNfY2hhcmdlKHN0cnVjdCB2bWFfcmVtYXBfc3RydWN0ICp2cm0pXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBjaGFyZ2VkO1xcbiBcXG4tXFx0aWYgKCEodnJtLVxcdTAwM2V2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fQUNDT1VOVCkpXFxuLVxcdFxcdHJldHVybiB0cnVlO1xcbitcXHR2cm0tXFx1MDAzZWNoYXJnZWQgPSAwO1xcbitcXHR2cm0tXFx1MDAzZXJlc2VydmVkX3RocF9jaGFyZ2VkID0gMDtcXG4gXFxuLVxcdC8qXFxuLVxcdCAqIElmIHdlIGRvbid0IHVubWFwIHRoZSBvbGQgbWFwcGluZywgdGhlbiB3ZSBhY2NvdW50IHRoZSBlbnRpcmV0eSBvZlxcbi1cXHQgKiB0aGUgbGVuZ3RoIG9mIHRoZSBuZXcgb25lLiBPdGhlcndpc2UgaXQncyBqdXN0IHRoZSBkZWx0YSBpbiBzaXplLlxcbi1cXHQgKi9cXG4tXFx0aWYgKHZybS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBNUkVNQVBfRE9OVFVOTUFQKVxcbi1cXHRcXHRjaGFyZ2VkID0gdnJtLVxcdTAwM2VuZXdfbGVuIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuLVxcdGVsc2VcXG4tXFx0XFx0Y2hhcmdlZCA9IHZybS1cXHUwMDNlZGVsdGEgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4rXFx0aWYgKHZybS1cXHUwMDNldm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX0FDQ09VTlQpIHtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogSWYgd2UgZG9uJ3QgdW5tYXAgdGhlIG9sZCBtYXBwaW5nLCB0aGVuIHdlIGFjY291bnQgdGhlXFxuK1xcdFxcdCAqIGVudGlyZXR5IG9mIHRoZSBsZW5ndGggb2YgdGhlIG5ldyBvbmUuIE90aGVyd2lzZSBpdCdzIGp1c3RcXG4rXFx0XFx0ICogdGhlIGRlbHRhIGluIHNpemUuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAodnJtLVxcdTAwM2VmbGFncyBcXHUwMDI2IE1SRU1BUF9ET05UVU5NQVApXFxuK1xcdFxcdFxcdGNoYXJnZWQgPSB2cm0tXFx1MDAzZW5ld19sZW4gXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRjaGFyZ2VkID0gdnJtLVxcdTAwM2VkZWx0YSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbiBcXG4gXFxuLVxcdC8qIFRoaXMgYWNjb3VudHMgJ2NoYXJnZWQnIHBhZ2VzIG9mIG1lbW9yeS4gKi9cXG4tXFx0aWYgKHNlY3VyaXR5X3ZtX2Vub3VnaF9tZW1vcnlfbW0oY3VycmVudC1cXHUwMDNlbW0sIGNoYXJnZWQpKVxcbi1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdFxcdC8qIFRoaXMgYWNjb3VudHMgJ2NoYXJnZWQnIHBhZ2VzIG9mIG1lbW9yeS4gKi9cXG4rXFx0XFx0aWYgKHNlY3VyaXR5X3ZtX2Vub3VnaF9tZW1vcnlfbW0oY3VycmVudC1cXHUwMDNlbW0sIGNoYXJnZWQpKVxcbitcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbi1cXHR2cm0tXFx1MDAzZWNoYXJnZWQgPSBjaGFyZ2VkO1xcbitcXHRcXHR2cm0tXFx1MDAzZWNoYXJnZWQgPSBjaGFyZ2VkO1xcbitcXHR9XFxuK1xcbitcXHRpZiAodnJtLVxcdTAwM2V2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fUkVTRVJWRURfVEhQKSB7XFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgaHBhZ2VzO1xcbitcXG4rXFx0XFx0aWYgKHZybS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBNUkVNQVBfRE9OVFVOTUFQKVxcbitcXHRcXHRcXHRocGFnZXMgPSByZXNlcnZlZF90aHBfaHBhZ2VfbnIoMCwgdnJtLVxcdTAwM2VuZXdfbGVuKTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRocGFnZXMgPSByZXNlcnZlZF90aHBfaHBhZ2VfbnIoMCwgdnJtLVxcdTAwM2VkZWx0YSk7XFxuK1xcbitcXHRcXHRpZiAocmVzZXJ2ZWRfdGhwX2NoYXJnZShocGFnZXMpKSB7XFxuK1xcdFxcdFxcdHZtX3VuYWNjdF9tZW1vcnkodnJtLVxcdTAwM2VjaGFyZ2VkKTtcXG4rXFx0XFx0XFx0dnJtLVxcdTAwM2VjaGFyZ2VkID0gMDtcXG4rXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHR2cm0tXFx1MDAzZXJlc2VydmVkX3RocF9jaGFyZ2VkID0gaHBhZ2VzO1xcbitcXHR9XFxuIFxcdHJldHVybiB0cnVlO1xcbiB9XFxuIFxcbkBAIC0xMDA0LDExICsxMDI5LDEwIEBAIHN0YXRpYyBib29sIHZybV9jYWxjX2NoYXJnZShzdHJ1Y3Qgdm1hX3JlbWFwX3N0cnVjdCAqdnJtKVxcbiAgKi9cXG4gc3RhdGljIHZvaWQgdnJtX3VuY2hhcmdlKHN0cnVjdCB2bWFfcmVtYXBfc3RydWN0ICp2cm0pXFxuIHtcXG4tXFx0aWYgKCEodnJtLVxcdTAwM2V2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fQUNDT1VOVCkpXFxuLVxcdFxcdHJldHVybjtcXG4tXFxuIFxcdHZtX3VuYWNjdF9tZW1vcnkodnJtLVxcdTAwM2VjaGFyZ2VkKTtcXG4gXFx0dnJtLVxcdTAwM2VjaGFyZ2VkID0gMDtcXG4rXFx0cmVzZXJ2ZWRfdGhwX3VuY2hhcmdlKHZybS1cXHUwMDNlcmVzZXJ2ZWRfdGhwX2NoYXJnZWQpO1xcbitcXHR2cm0tXFx1MDAzZXJlc2VydmVkX3RocF9jaGFyZ2VkID0gMDtcXG4gfVxcbiBcXG4gLypcXG5AQCAtMTE1Nyw4ICsxMTgxLDggQEAgc3RhdGljIHZvaWQgdW5tYXBfc291cmNlX3ZtYShzdHJ1Y3Qgdm1hX3JlbWFwX3N0cnVjdCAqdnJtKVxcbiBcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHZybS1cXHUwMDNldm1hO1xcbiBcXHRWTUFfSVRFUkFUT1Iodm1pLCBtbSwgYWRkcik7XFxuIFxcdGludCBlcnI7XFxuLVxcdHVuc2lnbmVkIGxvbmcgdm1fc3RhcnQ7XFxuLVxcdHVuc2lnbmVkIGxvbmcgdm1fZW5kO1xcbitcXHR1bnNpZ25lZCBsb25nIHZtX3N0YXJ0ID0gMDtcXG4rXFx0dW5zaWduZWQgbG9uZyB2bV9lbmQgPSAwO1xcbiBcXHQvKlxcbiBcXHQgKiBJdCBtaWdodCBzZWVtIG9kZCB0aGF0IHdlIGNoZWNrIGZvciBNUkVNQVBfRE9OVFVOTUFQIGhlcmUsIGdpdmVuIHRoaXNcXG4gXFx0ICogZnVuY3Rpb24gaW1wbGllcyB0aGF0IHdlIHVubWFwIHRoZSBvcmlnaW5hbCBWTUEsIHdoaWNoIHNlZW1zXFxuQEAgLTExNzAsNiArMTE5NCw4IEBAIHN0YXRpYyB2b2lkIHVubWFwX3NvdXJjZV92bWEoc3RydWN0IHZtYV9yZW1hcF9zdHJ1Y3QgKnZybSlcXG4gXFx0ICovXFxuIFxcdGJvb2wgYWNjb3VudGFibGVfbW92ZSA9ICh2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fQUNDT1VOVCkgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ISh2cm0tXFx1MDAzZWZsYWdzIFxcdTAwMjYgTVJFTUFQX0RPTlRVTk1BUCk7XFxuK1xcdGJvb2wgcmVzZXJ2ZWRfdGhwX21vdmUgPSAodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX1JFU0VSVkVEX1RIUCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ISh2cm0tXFx1MDAzZWZsYWdzIFxcdTAwMjYgTVJFTUFQX0RPTlRVTk1BUCk7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBTbyB3ZSBwZXJmb3JtIGEgdHJpY2sgaGVyZSB0byBwcmV2ZW50IGluY29ycmVjdCBhY2NvdW50aW5nLiBBbnkgbWVyZ2VcXG5AQCAtMTE5Miw2ICsxMjE4LDEzIEBAIHN0YXRpYyB2b2lkIHVubWFwX3NvdXJjZV92bWEoc3RydWN0IHZtYV9yZW1hcF9zdHJ1Y3QgKnZybSlcXG4gXFx0XFx0dm1fc3RhcnQgPSB2bWEtXFx1MDAzZXZtX3N0YXJ0O1xcbiBcXHRcXHR2bV9lbmQgPSB2bWEtXFx1MDAzZXZtX2VuZDtcXG4gXFx0fVxcbitcXHRpZiAocmVzZXJ2ZWRfdGhwX21vdmUpIHtcXG4rXFx0XFx0dm1fZmxhZ3NfY2xlYXIodm1hLCBWTV9SRVNFUlZFRF9USFApO1xcbitcXHRcXHRpZiAoIWFjY291bnRhYmxlX21vdmUpIHtcXG4rXFx0XFx0XFx0dm1fc3RhcnQgPSB2bWEtXFx1MDAzZXZtX3N0YXJ0O1xcbitcXHRcXHRcXHR2bV9lbmQgPSB2bWEtXFx1MDAzZXZtX2VuZDtcXG4rXFx0XFx0fVxcbitcXHR9XFxuIFxcbiBcXHRlcnIgPSBkb192bWlfbXVubWFwKFxcdTAwMjZ2bWksIG1tLCBhZGRyLCBsZW4sIHZybS1cXHUwMDNldWZfdW5tYXAsIC8qIHVubG9jaz0gKi9mYWxzZSk7XFxuIFxcdHZybS1cXHUwMDNldm1hID0gTlVMTDsgLyogSW52YWxpZGF0ZWQuICovXFxuQEAgLTEyMjcsMTkgKzEyNjAsMjcgQEAgc3RhdGljIHZvaWQgdW5tYXBfc291cmNlX3ZtYShzdHJ1Y3Qgdm1hX3JlbWFwX3N0cnVjdCAqdnJtKVxcbiBcXHQgKlxcbiBcXHQgKiBkb192bWlfbXVubWFwKCkgd2lsbCBoYXZlIHJlc3RvcmVkIHRoZSBWTUkgYmFjayB0byBhZGRyLlxcbiBcXHQgKi9cXG4tXFx0aWYgKGFjY291bnRhYmxlX21vdmUpIHtcXG4rXFx0aWYgKGFjY291bnRhYmxlX21vdmUgfHwgcmVzZXJ2ZWRfdGhwX21vdmUpIHtcXG4gXFx0XFx0dW5zaWduZWQgbG9uZyBlbmQgPSBhZGRyICsgbGVuO1xcbi1cXG4tXFx0XFx0aWYgKHZtX3N0YXJ0IFxcdTAwM2MgYWRkcikge1xcbi1cXHRcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnByZXYgPSB2bWFfcHJldihcXHUwMDI2dm1pKTtcXG4tXFxuLVxcdFxcdFxcdHZtX2ZsYWdzX3NldChwcmV2LCBWTV9BQ0NPVU5UKTsgLyogQWNxdWlyZXMgVk1BIGxvY2suICovXFxuK1xcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqcHJldiA9IE5VTEw7XFxuK1xcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqbmV4dCA9IE5VTEw7XFxuK1xcbitcXHRcXHRpZiAodm1fc3RhcnQgXFx1MDAzYyBhZGRyKVxcbitcXHRcXHRcXHRwcmV2ID0gdm1hX3ByZXYoXFx1MDAyNnZtaSk7XFxuK1xcdFxcdGlmICh2bV9lbmQgXFx1MDAzZSBlbmQpXFxuK1xcdFxcdFxcdG5leHQgPSB2bWFfbmV4dChcXHUwMDI2dm1pKTtcXG4rXFxuK1xcdFxcdGlmIChhY2NvdW50YWJsZV9tb3ZlKSB7XFxuK1xcdFxcdFxcdGlmIChwcmV2KVxcbitcXHRcXHRcXHRcXHR2bV9mbGFnc19zZXQocHJldiwgVk1fQUNDT1VOVCk7IC8qIEFjcXVpcmVzIFZNQSBsb2NrLiAqL1xcbitcXHRcXHRcXHRpZiAobmV4dClcXG4rXFx0XFx0XFx0XFx0dm1fZmxhZ3Nfc2V0KG5leHQsIFZNX0FDQ09VTlQpOyAvKiBBY3F1aXJlcyBWTUEgbG9jay4gKi9cXG4gXFx0XFx0fVxcbi1cXG4tXFx0XFx0aWYgKHZtX2VuZCBcXHUwMDNlIGVuZCkge1xcbi1cXHRcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKm5leHQgPSB2bWFfbmV4dChcXHUwMDI2dm1pKTtcXG4tXFxuLVxcdFxcdFxcdHZtX2ZsYWdzX3NldChuZXh0LCBWTV9BQ0NPVU5UKTsgLyogQWNxdWlyZXMgVk1BIGxvY2suICovXFxuK1xcdFxcdGlmIChyZXNlcnZlZF90aHBfbW92ZSkge1xcbitcXHRcXHRcXHRpZiAocHJldilcXG4rXFx0XFx0XFx0XFx0dm1fZmxhZ3Nfc2V0KHByZXYsIFZNX1JFU0VSVkVEX1RIUCk7XFxuK1xcdFxcdFxcdGlmIChuZXh0KVxcbitcXHRcXHRcXHRcXHR2bV9mbGFnc19zZXQobmV4dCwgVk1fUkVTRVJWRURfVEhQKTtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIH1cXG5AQCAtMTMwOSw3ICsxMzUwLDYgQEAgc3RhdGljIGludCBjb3B5X3ZtYV9hbmRfZGF0YShzdHJ1Y3Qgdm1hX3JlbWFwX3N0cnVjdCAqdnJtLFxcbiBcXHQqbmV3X3ZtYV9wdHIgPSBuZXdfdm1hO1xcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuLVxcbiAvKlxcbiAgKiBQZXJmb3JtIGZpbmFsIHRhc2tzIGZvciBNQURWX0RPTlRVTk1BUCBvcGVyYXRpb24sIGNsZWFyaW5nIG1sb2NrKCkgZmxhZyBvblxcbiAgKiByZW1haW5pbmcgVk1BIGJ5IGNvbnZlbnRpb24gKGl0IGNhbm5vdCBiZSBtbG9jaygpJ2QgYW55IGxvbmdlciwgYXMgcGFnZXMgaW5cXG5AQCAtMTU3Niw2ICsxNjE2LDIzIEBAIHN0YXRpYyBib29sIGFsaWduX2h1Z2V0bGIoc3RydWN0IHZtYV9yZW1hcF9zdHJ1Y3QgKnZybSlcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuK3N0YXRpYyBib29sIGNoZWNrX3Jlc2VydmVkX3RocF9hbGlnbm1lbnQoc3RydWN0IHZtYV9yZW1hcF9zdHJ1Y3QgKnZybSlcXG4re1xcbitcXHRpZiAoISh2cm0tXFx1MDAzZXZtYS1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiBWTV9SRVNFUlZFRF9USFApKVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFxuK1xcdGlmICghSVNfQUxJR05FRCh2cm0tXFx1MDAzZWFkZHIsIEhQQUdFX1BNRF9TSVpFKSB8fFxcbitcXHQgICAgIUlTX0FMSUdORUQodnJtLVxcdTAwM2VvbGRfbGVuLCBIUEFHRV9QTURfU0laRSkgfHxcXG4rXFx0ICAgICFJU19BTElHTkVEKHZybS1cXHUwMDNlbmV3X2xlbiwgSFBBR0VfUE1EX1NJWkUpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRpZiAoKHZybS1cXHUwMDNlcmVtYXBfdHlwZSA9PSBNUkVNQVBfRVhQQU5EIHx8IHZybV9pbXBsaWVzX25ld19hZGRyKHZybSkpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAhSVNfQUxJR05FRCh2cm0tXFx1MDAzZW5ld19hZGRyLCBIUEFHRV9QTURfU0laRSkpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuK1xcbiAvKlxcbiAgKiBXZSBhcmUgbXJlbWFwKCknaW5nIHdpdGhvdXQgc3BlY2lmeWluZyBhIGZpeGVkIGFkZHJlc3MgdG8gbW92ZSB0bywgYnV0IGFyZVxcbiAgKiByZXF1ZXN0aW5nIHRoYXQgdGhlIFZNQSdzIHNpemUgYmUgaW5jcmVhc2VkLlxcbkBAIC0xNzQ1LDYgKzE4MDIsOCBAQCBzdGF0aWMgaW50IGNoZWNrX3ByZXBfdm1hKHN0cnVjdCB2bWFfcmVtYXBfc3RydWN0ICp2cm0pXFxuIFxcdC8qIEZvciBjb252ZW5pZW5jZSwgd2Ugc2V0IG5ld19hZGRyIGV2ZW4gaWYgVk1BIHdvbid0IG1vdmUuICovXFxuIFxcdGlmICghdnJtX2ltcGxpZXNfbmV3X2FkZHIodnJtKSlcXG4gXFx0XFx0dnJtLVxcdTAwM2VuZXdfYWRkciA9IGFkZHI7XFxuK1xcdGlmICghY2hlY2tfcmVzZXJ2ZWRfdGhwX2FsaWdubWVudCh2cm0pKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuIFxcdC8qIEJlbG93IG9ubHkgbWVhbmluZ2Z1bCBpZiB3ZSBleHBhbmQgb3IgbW92ZSBhIFZNQS4gKi9cXG4gXFx0aWYgKCF2cm1fd2lsbF9tYXBfbmV3KHZybSkpXFxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuY1xcbmluZGV4IGVlOTAyYTQ2OGMyZjViLi42NjBlNTAxYmY2NzZiNiAxMDA2NDRcXG4tLS0gYS9tbS9wYWdlX2FsbG9jLmNcXG4rKysgYi9tbS9wYWdlX2FsbG9jLmNcXG5AQCAtMjYzLDYgKzI2Myw3IEBAIGNvbnN0IGNoYXIgKiBjb25zdCBtaWdyYXRldHlwZV9uYW1lc1tNSUdSQVRFX1RZUEVTXSA9IHtcXG4gI2lmZGVmIENPTkZJR19DTUFcXG4gXFx0XFxcIkNNQVxcXCIsXFxuICNlbmRpZlxcbitcXHRcXFwiUmVzZXJ2ZVRIUFxcXCIsXFxuICNpZmRlZiBDT05GSUdfTUVNT1JZX0lTT0xBVElPTlxcbiBcXHRcXFwiSXNvbGF0ZVxcXCIsXFxuICNlbmRpZlxcbkBAIC03ODQsNiArNzg1LDkgQEAgc3RhdGljIGlubGluZSB2b2lkIGFjY291bnRfZnJlZXBhZ2VzKHN0cnVjdCB6b25lICp6b25lLCBpbnQgbnJfcGFnZXMsXFxuIFxcdGVsc2UgaWYgKG1pZ3JhdGV0eXBlID09IE1JR1JBVEVfSElHSEFUT01JQylcXG4gXFx0XFx0V1JJVEVfT05DRSh6b25lLVxcdTAwM2Vucl9mcmVlX2hpZ2hhdG9taWMsXFxuIFxcdFxcdFxcdCAgIHpvbmUtXFx1MDAzZW5yX2ZyZWVfaGlnaGF0b21pYyArIG5yX3BhZ2VzKTtcXG4rXFx0ZWxzZSBpZiAobWlncmF0ZXR5cGUgPT0gTUlHUkFURV9SRVNFUlZFRF9USFApXFxuK1xcdFxcdFdSSVRFX09OQ0Uoem9uZS1cXHUwMDNlbnJfZnJlZV9yZXNlcnZlZF90aHAsXFxuK1xcdFxcdFxcdCAgIHpvbmUtXFx1MDAzZW5yX2ZyZWVfcmVzZXJ2ZWRfdGhwICsgbnJfcGFnZXMpO1xcbiB9XFxuIFxcbiAvKiBVc2VkIGZvciBwYWdlcyBub3Qgb24gYW5vdGhlciBsaXN0ICovXFxuQEAgLTI0NTYsNiArMjQ2MCw5IEBAIF9fcm1xdWV1ZShzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgaW50IG9yZGVyLCBpbnQgbWlncmF0ZXR5cGUsXFxuIHtcXG4gXFx0c3RydWN0IHBhZ2UgKnBhZ2U7XFxuIFxcbitcXHRpZiAoYWxsb2NfZmxhZ3MgXFx1MDAyNiBBTExPQ19SRVNFUlZFRF9USFApXFxuK1xcdFxcdHJldHVybiBfX3JtcXVldWVfc21hbGxlc3Qoem9uZSwgb3JkZXIsIE1JR1JBVEVfUkVTRVJWRURfVEhQKTtcXG4rXFxuIFxcdGlmIChJU19FTkFCTEVEKENPTkZJR19DTUEpKSB7XFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIEJhbGFuY2UgbW92YWJsZSBhbGxvY2F0aW9ucyBiZXR3ZWVuIHJlZ3VsYXIgYW5kIENNQSBhcmVhcyBieVxcbkBAIC0yOTYwLDcgKzI5NjcsOCBAQCBzdGF0aWMgdm9pZCBfX2ZyZWVfZnJvemVuX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuIFxcdHpvbmUgPSBwYWdlX3pvbmUocGFnZSk7XFxuIFxcdG1pZ3JhdGV0eXBlID0gZ2V0X3BmbmJsb2NrX21pZ3JhdGV0eXBlKHBhZ2UsIHBmbik7XFxuIFxcdGlmICh1bmxpa2VseShtaWdyYXRldHlwZSBcXHUwMDNlPSBNSUdSQVRFX1BDUFRZUEVTKSkge1xcbi1cXHRcXHRpZiAodW5saWtlbHkoaXNfbWlncmF0ZV9pc29sYXRlKG1pZ3JhdGV0eXBlKSkpIHtcXG4rXFx0XFx0aWYgKHVubGlrZWx5KGlzX21pZ3JhdGVfcmVzZXJ2ZWRfdGhwKG1pZ3JhdGV0eXBlKSB8fFxcbitcXHRcXHRcXHQgICAgIGlzX21pZ3JhdGVfaXNvbGF0ZShtaWdyYXRldHlwZSkpKSB7XFxuIFxcdFxcdFxcdGZyZWVfb25lX3BhZ2Uoem9uZSwgcGFnZSwgcGZuLCBvcmRlciwgZnBpX2ZsYWdzKTtcXG4gXFx0XFx0XFx0cmV0dXJuO1xcbiBcXHRcXHR9XFxuQEAgLTMwMzgsNiArMzA0Niw3IEBAIHZvaWQgZnJlZV91bnJlZl9mb2xpb3Moc3RydWN0IGZvbGlvX2JhdGNoICpmb2xpb3MpXFxuIFxcbiBcXHRcXHQvKiBEaWZmZXJlbnQgem9uZSByZXF1aXJlcyBhIGRpZmZlcmVudCBwY3AgbG9jayAqL1xcbiBcXHRcXHRpZiAoem9uZSAhPSBsb2NrZWRfem9uZSB8fFxcbitcXHRcXHQgICAgaXNfbWlncmF0ZV9yZXNlcnZlZF90aHAobWlncmF0ZXR5cGUpIHx8XFxuIFxcdFxcdCAgICBpc19taWdyYXRlX2lzb2xhdGUobWlncmF0ZXR5cGUpKSB7XFxuIFxcdFxcdFxcdGlmIChwY3ApIHtcXG4gXFx0XFx0XFx0XFx0cGNwX3NwaW5fdW5sb2NrKHBjcCk7XFxuQEAgLTMwNDUsNiArMzA1NCwxMiBAQCB2b2lkIGZyZWVfdW5yZWZfZm9saW9zKHN0cnVjdCBmb2xpb19iYXRjaCAqZm9saW9zKVxcbiBcXHRcXHRcXHRcXHRwY3AgPSBOVUxMO1xcbiBcXHRcXHRcXHR9XFxuIFxcbitcXHRcXHRcXHRpZiAoaXNfbWlncmF0ZV9yZXNlcnZlZF90aHAobWlncmF0ZXR5cGUpKSB7XFxuK1xcdFxcdFxcdFxcdGZyZWVfb25lX3BhZ2Uoem9uZSwgXFx1MDAyNmZvbGlvLVxcdTAwM2VwYWdlLCBwZm4sXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIG9yZGVyLCBGUElfTk9ORSk7XFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRcXHR9XFxuK1xcbiBcXHRcXHRcXHQvKlxcbiBcXHRcXHRcXHQgKiBGcmVlIGlzb2xhdGVkIHBhZ2VzIGRpcmVjdGx5IHRvIHRoZVxcbiBcXHRcXHRcXHQgKiBhbGxvY2F0b3IsIHNlZSBjb21tZW50IGluIGZyZWVfZnJvemVuX3BhZ2VzLlxcbkBAIC0zMjM1LDcgKzMyNTAsOCBAQCBzdHJ1Y3QgcGFnZSAqcm1xdWV1ZV9idWRkeShzdHJ1Y3Qgem9uZSAqcHJlZmVycmVkX3pvbmUsIHN0cnVjdCB6b25lICp6b25lLFxcbiBcXHRcXHRcXHQgKiByZXNlcnZlcyBhcyBmYWlsaW5nIG5vdyBpcyB3b3JzZSB0aGFuIGZhaWxpbmcgYVxcbiBcXHRcXHRcXHQgKiBoaWdoLW9yZGVyIGF0b21pYyBhbGxvY2F0aW9uIGluIHRoZSBmdXR1cmUuXFxuIFxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRpZiAoIXBhZ2UgXFx1MDAyNlxcdTAwMjYgKGFsbG9jX2ZsYWdzIFxcdTAwMjYgKEFMTE9DX09PTXxBTExPQ19OT05fQkxPQ0spKSlcXG4rXFx0XFx0XFx0aWYgKCFwYWdlIFxcdTAwMjZcXHUwMDI2ICEoYWxsb2NfZmxhZ3MgXFx1MDAyNiBBTExPQ19SRVNFUlZFRF9USFApIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCAgICAoYWxsb2NfZmxhZ3MgXFx1MDAyNiAoQUxMT0NfT09NfEFMTE9DX05PTl9CTE9DSykpKVxcbiBcXHRcXHRcXHRcXHRwYWdlID0gX19ybXF1ZXVlX3NtYWxsZXN0KHpvbmUsIG9yZGVyLCBNSUdSQVRFX0hJR0hBVE9NSUMpO1xcbiBcXG4gXFx0XFx0XFx0aWYgKCFwYWdlKSB7XFxuQEAgLTM0MDUsNyArMzQyMSw4IEBAIHN0cnVjdCBwYWdlICpybXF1ZXVlKHN0cnVjdCB6b25lICpwcmVmZXJyZWRfem9uZSxcXG4ge1xcbiBcXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG4gXFxuLVxcdGlmIChsaWtlbHkocGNwX2FsbG93ZWRfb3JkZXIob3JkZXIpKSkge1xcbitcXHRpZiAobGlrZWx5KHBjcF9hbGxvd2VkX29yZGVyKG9yZGVyKSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICEoYWxsb2NfZmxhZ3MgXFx1MDAyNiBBTExPQ19SRVNFUlZFRF9USFApKSB7XFxuIFxcdFxcdHBhZ2UgPSBybXF1ZXVlX3BjcGxpc3QocHJlZmVycmVkX3pvbmUsIHpvbmUsIG9yZGVyLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgbWlncmF0ZXR5cGUsIGFsbG9jX2ZsYWdzKTtcXG4gXFx0XFx0aWYgKGxpa2VseShwYWdlKSlcXG5AQCAtMzU1Niw2ICszNTczLDM1IEBAIHN0YXRpYyBib29sIHVucmVzZXJ2ZV9oaWdoYXRvbWljX3BhZ2VibG9jayhjb25zdCBzdHJ1Y3QgYWxsb2NfY29udGV4dCAqYWMsXFxuIFxcdHJldHVybiBmYWxzZTtcXG4gfVxcbiBcXG4rdW5zaWduZWQgbG9uZyByZXNlcnZlZF90aHBfcGFnZWJsb2Nrcyh1bnNpZ25lZCBsb25nIG5yX2hwYWdlcylcXG4re1xcbitcXHR1bnNpZ25lZCBpbnQgb3JkZXIgPSBtYXhfdCh1bnNpZ25lZCBpbnQsIEhQQUdFX1BNRF9PUkRFUixcXG4rXFx0XFx0XFx0XFx0ICAgcGFnZWJsb2NrX29yZGVyKTtcXG4rXFx0dW5zaWduZWQgbG9uZyBocGFnZXNfcGVyX2Jsb2NrID0gMVVMIFxcdTAwM2NcXHUwMDNjIChvcmRlciAtIEhQQUdFX1BNRF9PUkRFUik7XFxuK1xcdHVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWQgPSAwO1xcbitcXHRnZnBfdCBnZnAgPSAoR0ZQX0hJR0hVU0VSIHwgX19HRlBfQ09NUCB8IF9fR0ZQX05PTUVNQUxMT0MgfFxcbitcXHRcXHQgICAgIF9fR0ZQX05PV0FSTiB8IF9fR0ZQX05PUkVUUlkpO1xcbitcXG4rXFx0d2hpbGUgKHJlc2VydmVkIFxcdTAwM2MgbnJfaHBhZ2VzKSB7XFxuK1xcdFxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbitcXHRcXHRzdHJ1Y3Qgem9uZSAqem9uZTtcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4rXFxuK1xcdFxcdHBhZ2UgPSBhbGxvY19wYWdlcyhnZnAsIG9yZGVyKTtcXG4rXFx0XFx0aWYgKCFwYWdlKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFxuK1xcdFxcdHpvbmUgPSBwYWdlX3pvbmUocGFnZSk7XFxuK1xcdFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZ6b25lLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuK1xcdFxcdGNoYW5nZV9wYWdlYmxvY2tfcmFuZ2UocGFnZSwgb3JkZXIsIE1JR1JBVEVfUkVTRVJWRURfVEhQKTtcXG4rXFx0XFx0em9uZS1cXHUwMDNlbnJfcmVzZXJ2ZWRfdGhwICs9IDFVTCBcXHUwMDNjXFx1MDAzYyBvcmRlcjtcXG4rXFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2em9uZS1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbitcXHRcXHRfX2ZyZWVfcGFnZXMocGFnZSwgb3JkZXIpO1xcbitcXHRcXHRyZXNlcnZlZCArPSBocGFnZXNfcGVyX2Jsb2NrO1xcbitcXHR9XFxuK1xcdHJldHVybiByZXNlcnZlZDtcXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSBsb25nIF9fem9uZV93YXRlcm1hcmtfdW51c2FibGVfZnJlZShzdHJ1Y3Qgem9uZSAqeixcXG4gXFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IG9yZGVyLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXFxuIHtcXG5AQCAtMzU2OCw2ICszNjE0LDkgQEAgc3RhdGljIGlubGluZSBsb25nIF9fem9uZV93YXRlcm1hcmtfdW51c2FibGVfZnJlZShzdHJ1Y3Qgem9uZSAqeixcXG4gXFx0aWYgKGxpa2VseSghKGFsbG9jX2ZsYWdzIFxcdTAwMjYgQUxMT0NfUkVTRVJWRVMpKSlcXG4gXFx0XFx0dW51c2FibGVfZnJlZSArPSBSRUFEX09OQ0Uoei1cXHUwMDNlbnJfZnJlZV9oaWdoYXRvbWljKTtcXG4gXFxuK1xcdGlmICghKGFsbG9jX2ZsYWdzIFxcdTAwMjYgQUxMT0NfUkVTRVJWRURfVEhQKSlcXG4rXFx0XFx0dW51c2FibGVfZnJlZSArPSBSRUFEX09OQ0Uoei1cXHUwMDNlbnJfZnJlZV9yZXNlcnZlZF90aHApO1xcbitcXG4gI2lmZGVmIENPTkZJR19DTUFcXG4gXFx0LyogSWYgYWxsb2NhdGlvbiBjYW4ndCB1c2UgQ01BIGFyZWFzIGRvbid0IHVzZSBmcmVlIENNQSBwYWdlcyAqL1xcbiBcXHRpZiAoIShhbGxvY19mbGFncyBcXHUwMDI2IEFMTE9DX0NNQSkpXFxuQEAgLTM2NDIsNiArMzY5MSwxMiBAQCBib29sIF9fem9uZV93YXRlcm1hcmtfb2soc3RydWN0IHpvbmUgKnosIHVuc2lnbmVkIGludCBvcmRlciwgdW5zaWduZWQgbG9uZyBtYXJrLFxcbiBcXHRcXHRpZiAoIWFyZWEtXFx1MDAzZW5yX2ZyZWUpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4rXFx0XFx0aWYgKGFsbG9jX2ZsYWdzIFxcdTAwMjYgQUxMT0NfUkVTRVJWRURfVEhQKSB7XFxuK1xcdFxcdFxcdGlmICghZnJlZV9hcmVhX2VtcHR5KGFyZWEsIE1JR1JBVEVfUkVTRVJWRURfVEhQKSlcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR9XFxuK1xcbiBcXHRcXHRmb3IgKG10ID0gMDsgbXQgXFx1MDAzYyBNSUdSQVRFX1BDUFRZUEVTOyBtdCsrKSB7XFxuIFxcdFxcdFxcdGlmICghZnJlZV9hcmVhX2VtcHR5KGFyZWEsIG10KSlcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuQEAgLTM4NzYsNiArMzkzMSw5IEBAIGdldF9wYWdlX2Zyb21fZnJlZWxpc3QoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlciwgaW50IGFsbG9jX2ZsYWdzLFxcbiBcXG4gXFx0XFx0Y29uZF9hY2NlcHRfbWVtb3J5KHpvbmUsIG9yZGVyLCBhbGxvY19mbGFncyk7XFxuIFxcbitcXHRcXHRpZiAoYWxsb2NfZmxhZ3MgXFx1MDAyNiBBTExPQ19SRVNFUlZFRF9USFApXFxuK1xcdFxcdFxcdGdvdG8gdHJ5X3RoaXNfem9uZTtcXG4rXFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIERldGVjdCB3aGV0aGVyIHRoZSBudW1iZXIgb2YgZnJlZSBwYWdlcyBpcyBiZWxvdyBoaWdoXFxuIFxcdFxcdCAqIHdhdGVybWFyay4gIElmIHNvLCB3ZSB3aWxsIGRlY3JlYXNlIHBjcC1cXHUwMDNlaGlnaCBhbmQgZnJlZVxcbkBAIC01MDMzLDYgKzUwOTEsMTUgQEAgc3RhdGljIGlubGluZSBib29sIHByZXBhcmVfYWxsb2NfcGFnZXMoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcXG4gXFx0YWMtXFx1MDAzZW5vZGVtYXNrID0gbm9kZW1hc2s7XFxuIFxcdGFjLVxcdTAwM2VtaWdyYXRldHlwZSA9IGdmcF9taWdyYXRldHlwZShnZnBfbWFzayk7XFxuIFxcbitcXHRpZiAoZ2ZwX21hc2sgXFx1MDAyNiBfX0dGUF9SRVNFUlZFRF9USFApIHtcXG4rXFx0XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgfHxcXG4rXFx0XFx0ICAgIFdBUk5fT05fT05DRV9HRlAob3JkZXIgIT0gSFBBR0VfUE1EX09SREVSLCBnZnBfbWFzaykpXFxuK1xcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdFxcdGFjLVxcdTAwM2VtaWdyYXRldHlwZSA9IE1JR1JBVEVfUkVTRVJWRURfVEhQO1xcbitcXHRcXHQqYWxsb2NfZmxhZ3MgfD0gQUxMT0NfUkVTRVJWRURfVEhQO1xcbitcXHR9XFxuK1xcbiBcXHRpZiAoY3B1c2V0c19lbmFibGVkKCkpIHtcXG4gXFx0XFx0KmFsbG9jX2dmcCB8PSBfX0dGUF9IQVJEV0FMTDtcXG4gXFx0XFx0LypcXG5kaWZmIC0tZ2l0IGEvbW0vcmVzZXJ2ZWRfdGhwLmMgYi9tbS9yZXNlcnZlZF90aHAuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjkzMWM1MzljMTVhNzA5XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL21tL3Jlc2VydmVkX3RocC5jXFxuQEAgLTAsMCArMSwxMzMgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwiaW50ZXJuYWwuaFxcXCJcXG4rXFxuK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0socmVzZXJ2ZWRfdGhwX2xvY2spO1xcbitcXG4rc3RhdGljIHVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWRfdGhwX2NtZGxpbmVfc2l6ZSBfX2luaXRkYXRhID0gSFBBR0VfUE1EX1NJWkU7XFxuK3N0YXRpYyBib29sIHJlc2VydmVkX3RocF9jbWRsaW5lX3NpemVfdmFsaWQgX19pbml0ZGF0YSA9IHRydWU7XFxuK3N0YXRpYyB1bnNpZ25lZCBsb25nIHJlc2VydmVkX3RocF9yZXF1ZXN0ZWQgX19pbml0ZGF0YTtcXG4rc3RhdGljIHVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWRfdGhwX3RvdGFsO1xcbitzdGF0aWMgdW5zaWduZWQgbG9uZyByZXNlcnZlZF90aHBfdXNlZDtcXG4rXFxuK3N0YXRpYyBpbnQgX19pbml0IHNldHVwX3Jlc2VydmVkX3RocF9zaXplKGNoYXIgKnN0cilcXG4re1xcbitcXHR1bnNpZ25lZCBsb25nIHNpemU7XFxuK1xcdHNpemUgPSBtZW1wYXJzZShzdHIsIE5VTEwpO1xcbitcXHRpZiAoc2l6ZSAhPSBIUEFHRV9QTURfU0laRSkge1xcbitcXHRcXHRwcl93YXJuKFxcXCJ1bnN1cHBvcnRlZCB0aHBfcmVzZXJ2ZWRfc2l6ZT0lcywgb25seSAlbHUgaXMgc3VwcG9ydGVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRzdHIsIEhQQUdFX1BNRF9TSVpFKTtcXG4rXFx0XFx0cmVzZXJ2ZWRfdGhwX2NtZGxpbmVfc2l6ZV92YWxpZCA9IGZhbHNlO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXHRyZXNlcnZlZF90aHBfY21kbGluZV9zaXplID0gc2l6ZTtcXG4rXFx0cmVzZXJ2ZWRfdGhwX2NtZGxpbmVfc2l6ZV92YWxpZCA9IHRydWU7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK2Vhcmx5X3BhcmFtKFxcXCJ0aHBfcmVzZXJ2ZWRfc2l6ZVxcXCIsIHNldHVwX3Jlc2VydmVkX3RocF9zaXplKTtcXG4rc3RhdGljIGludCBfX2luaXQgc2V0dXBfcmVzZXJ2ZWRfdGhwX25yKGNoYXIgKnN0cilcXG4re1xcbitcXHRpbnQgY291bnQ7XFxuK1xcdGlmIChzc2NhbmYoc3RyLCBcXFwiJWx1JW5cXFwiLCBcXHUwMDI2cmVzZXJ2ZWRfdGhwX3JlcXVlc3RlZCwgXFx1MDAyNmNvdW50KSAhPSAxIHx8XFxuK1xcdCAgICBzdHJbY291bnRdKSB7XFxuK1xcdFxcdHByX3dhcm4oXFxcImludmFsaWQgdGhwX3Jlc2VydmVkX25yPSVzXFxcXG5cXFwiLCBzdHIpO1xcbitcXHRcXHRyZXNlcnZlZF90aHBfcmVxdWVzdGVkID0gMDtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rZWFybHlfcGFyYW0oXFxcInRocF9yZXNlcnZlZF9uclxcXCIsIHNldHVwX3Jlc2VydmVkX3RocF9ucik7XFxuK1xcbit1bnNpZ25lZCBsb25nIHJlc2VydmVkX3RocF9ocGFnZV9ucih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcXG4re1xcbitcXHRyZXR1cm4gKGVuZCAtIHN0YXJ0KSBcXHUwMDNlXFx1MDAzZSBIUEFHRV9QTURfU0hJRlQ7XFxuK31cXG4rXFxuK2ludCByZXNlcnZlZF90aHBfY2hhcmdlKHVuc2lnbmVkIGxvbmcgbnJfaHBhZ2VzKVxcbit7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXG4rXFx0aWYgKCFucl9ocGFnZXMpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0c3Bpbl9sb2NrKFxcdTAwMjZyZXNlcnZlZF90aHBfbG9jayk7XFxuK1xcdGlmIChucl9ocGFnZXMgXFx1MDAzZSByZXNlcnZlZF90aHBfdG90YWwgLSByZXNlcnZlZF90aHBfdXNlZClcXG4rXFx0XFx0cmV0ID0gLUVOT01FTTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRyZXNlcnZlZF90aHBfdXNlZCArPSBucl9ocGFnZXM7XFxuK1xcdHNwaW5fdW5sb2NrKFxcdTAwMjZyZXNlcnZlZF90aHBfbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbit2b2lkIHJlc2VydmVkX3RocF91bmNoYXJnZSh1bnNpZ25lZCBsb25nIG5yX2hwYWdlcylcXG4re1xcbitcXHRpZiAoIW5yX2hwYWdlcylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0c3Bpbl9sb2NrKFxcdTAwMjZyZXNlcnZlZF90aHBfbG9jayk7XFxuK1xcdGlmIChXQVJOX09OX09OQ0UobnJfaHBhZ2VzIFxcdTAwM2UgcmVzZXJ2ZWRfdGhwX3VzZWQpKVxcbitcXHRcXHRyZXNlcnZlZF90aHBfdXNlZCA9IDA7XFxuK1xcdGVsc2VcXG4rXFx0XFx0cmVzZXJ2ZWRfdGhwX3VzZWQgLT0gbnJfaHBhZ2VzO1xcbitcXHRzcGluX3VubG9jayhcXHUwMDI2cmVzZXJ2ZWRfdGhwX2xvY2spO1xcbit9XFxuK1xcbitzdGF0aWMgc3NpemVfdCB0b3RhbF9ocGFnZXNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4rXFx0XFx0XFx0XFx0IHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxcbit7XFxuK1xcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXFxcIiVsdVxcXFxuXFxcIiwgUkVBRF9PTkNFKHJlc2VydmVkX3RocF90b3RhbCkpO1xcbit9XFxuK3N0YXRpYyBzc2l6ZV90IGZyZWVfaHBhZ2VzX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuK1xcdFxcdFxcdFxcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxcbit7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZnJlZV9ocGFnZXM7XFxuK1xcbitcXHRzcGluX2xvY2soXFx1MDAyNnJlc2VydmVkX3RocF9sb2NrKTtcXG4rXFx0ZnJlZV9ocGFnZXMgPSByZXNlcnZlZF90aHBfdG90YWwgLSByZXNlcnZlZF90aHBfdXNlZDtcXG4rXFx0c3Bpbl91bmxvY2soXFx1MDAyNnJlc2VydmVkX3RocF9sb2NrKTtcXG4rXFxuK1xcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXFxcIiVsdVxcXFxuXFxcIiwgZnJlZV9ocGFnZXMpO1xcbit9XFxuK3N0YXRpYyBzc2l6ZV90IHVzZWRfaHBhZ2VzX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuK1xcdFxcdFxcdFxcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxcbit7XFxuK1xcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXFxcIiVsdVxcXFxuXFxcIiwgUkVBRF9PTkNFKHJlc2VydmVkX3RocF91c2VkKSk7XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgdG90YWxfaHBhZ2VzX2F0dHIgPSBfX0FUVFJfUk8odG90YWxfaHBhZ2VzKTtcXG4rc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBmcmVlX2hwYWdlc19hdHRyID0gX19BVFRSX1JPKGZyZWVfaHBhZ2VzKTtcXG4rc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSB1c2VkX2hwYWdlc19hdHRyID0gX19BVFRSX1JPKHVzZWRfaHBhZ2VzKTtcXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpyZXNlcnZlZF90aHBfYXR0cnNbXSA9IHtcXG4rXFx0XFx1MDAyNnRvdGFsX2hwYWdlc19hdHRyLmF0dHIsXFxuK1xcdFxcdTAwMjZmcmVlX2hwYWdlc19hdHRyLmF0dHIsXFxuK1xcdFxcdTAwMjZ1c2VkX2hwYWdlc19hdHRyLmF0dHIsXFxuK1xcdE5VTEwsXFxuK307XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCByZXNlcnZlZF90aHBfYXR0cl9ncm91cCA9IHtcXG4rXFx0LmF0dHJzID0gcmVzZXJ2ZWRfdGhwX2F0dHJzLFxcbit9O1xcbitcXG4rc3RhdGljIGludCBfX2luaXQgcmVzZXJ2ZWRfdGhwX2luaXQodm9pZClcXG4re1xcbitcXHRzdHJ1Y3Qga29iamVjdCAqa29iajtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmIChyZXNlcnZlZF90aHBfcmVxdWVzdGVkIFxcdTAwMjZcXHUwMDI2IHJlc2VydmVkX3RocF9jbWRsaW5lX3NpemVfdmFsaWQpIHtcXG4rXFx0XFx0cmVzZXJ2ZWRfdGhwX3RvdGFsID0gcmVzZXJ2ZWRfdGhwX3BhZ2VibG9ja3MocmVzZXJ2ZWRfdGhwX3JlcXVlc3RlZCk7XFxuK1xcdFxcdHByX2luZm8oXFxcInJlc2VydmVkICVsdS8lbHUgUE1EIFRIUCBwYWdlYmxvY2tzICglbHUgYnl0ZXMgZWFjaClcXFxcblxcXCIsXFxuK1xcdFxcdFxcdHJlc2VydmVkX3RocF90b3RhbCwgcmVzZXJ2ZWRfdGhwX3JlcXVlc3RlZCxcXG4rXFx0XFx0XFx0cmVzZXJ2ZWRfdGhwX2NtZGxpbmVfc2l6ZSk7XFxuK1xcdH1cXG4rXFx0a29iaiA9IGtvYmplY3RfY3JlYXRlX2FuZF9hZGQoXFxcInJlc2VydmVkX3RocFxcXCIsIG1tX2tvYmopO1xcbitcXHRpZiAoIWtvYmopXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHRyZXQgPSBzeXNmc19jcmVhdGVfZ3JvdXAoa29iaiwgXFx1MDAyNnJlc2VydmVkX3RocF9hdHRyX2dyb3VwKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0a29iamVjdF9wdXQoa29iaik7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rc3Vic3lzX2luaXRjYWxsKHJlc2VydmVkX3RocF9pbml0KTtcXG5cXFxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGVcXG5kaWZmIC0tZ2l0IGEvbW0vc2hvd19tZW0uYyBiL21tL3Nob3dfbWVtLmNcXG5pbmRleCA0M2FjYTVhMmFjOTkwYS4uZTkzODFhZmNhNGFjYWUgMTAwNjQ0XFxuLS0tIGEvbW0vc2hvd19tZW0uY1xcbisrKyBiL21tL3Nob3dfbWVtLmNcXG5AQCAtMTQyLDYgKzE0Miw3IEBAIHN0YXRpYyB2b2lkIHNob3dfbWlncmF0aW9uX3R5cGVzKHVuc2lnbmVkIGNoYXIgdHlwZSlcXG4gI2lmZGVmIENPTkZJR19DTUFcXG4gXFx0XFx0W01JR1JBVEVfQ01BXVxcdFxcdD0gJ0MnLFxcbiAjZW5kaWZcXG4rXFx0XFx0W01JR1JBVEVfUkVTRVJWRURfVEhQXVxcdD0gJ1QnLFxcbiAjaWZkZWYgQ09ORklHX01FTU9SWV9JU09MQVRJT05cXG4gXFx0XFx0W01JR1JBVEVfSVNPTEFURV1cXHQ9ICdJJyxcXG4gI2VuZGlmXFxuQEAgLTMwOCw2ICszMDksOCBAQCBzdGF0aWMgdm9pZCBzaG93X2ZyZWVfYXJlYXModW5zaWduZWQgaW50IGZpbHRlciwgbm9kZW1hc2tfdCAqbm9kZW1hc2ssIGludCBtYXhfelxcbiBcXHRcXHRcXHRcXFwiIGhpZ2g6JWx1a0JcXFwiXFxuIFxcdFxcdFxcdFxcXCIgcmVzZXJ2ZWRfaGlnaGF0b21pYzolbHVLQlxcXCJcXG4gXFx0XFx0XFx0XFxcIiBmcmVlX2hpZ2hhdG9taWM6JWx1S0JcXFwiXFxuK1xcdFxcdFxcdFxcXCIgcmVzZXJ2ZWRfdGhwOiVsdUtCXFxcIlxcbitcXHRcXHRcXHRcXFwiIGZyZWVfcmVzZXJ2ZWRfdGhwOiVsdUtCXFxcIlxcbiBcXHRcXHRcXHRcXFwiIGFjdGl2ZV9hbm9uOiVsdWtCXFxcIlxcbiBcXHRcXHRcXHRcXFwiIGluYWN0aXZlX2Fub246JWx1a0JcXFwiXFxuIFxcdFxcdFxcdFxcXCIgYWN0aXZlX2ZpbGU6JWx1a0JcXFwiXFxuQEAgLTMzMSw2ICszMzQsOCBAQCBzdGF0aWMgdm9pZCBzaG93X2ZyZWVfYXJlYXModW5zaWduZWQgaW50IGZpbHRlciwgbm9kZW1hc2tfdCAqbm9kZW1hc2ssIGludCBtYXhfelxcbiBcXHRcXHRcXHRLKGhpZ2hfd21hcmtfcGFnZXMoem9uZSkpLFxcbiBcXHRcXHRcXHRLKHpvbmUtXFx1MDAzZW5yX3Jlc2VydmVkX2hpZ2hhdG9taWMpLFxcbiBcXHRcXHRcXHRLKHpvbmUtXFx1MDAzZW5yX2ZyZWVfaGlnaGF0b21pYyksXFxuK1xcdFxcdFxcdEsoem9uZS1cXHUwMDNlbnJfcmVzZXJ2ZWRfdGhwKSxcXG4rXFx0XFx0XFx0Syh6b25lLVxcdTAwM2Vucl9mcmVlX3Jlc2VydmVkX3RocCksXFxuIFxcdFxcdFxcdEsoem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX1pPTkVfQUNUSVZFX0FOT04pKSxcXG4gXFx0XFx0XFx0Syh6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfWk9ORV9JTkFDVElWRV9BTk9OKSksXFxuIFxcdFxcdFxcdEsoem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX1pPTkVfQUNUSVZFX0ZJTEUpKSxcXG5kaWZmIC0tZ2l0IGEvbW0vdm1hLmMgYi9tbS92bWEuY1xcbmluZGV4IDllZWEyODUwODE4YTg1Li44YzRjZDdjOTdhOTg0YyAxMDA2NDRcXG4tLS0gYS9tbS92bWEuY1xcbisrKyBiL21tL3ZtYS5jXFxuQEAgLTcsNiArNyw4IEBAXFxuICNpbmNsdWRlIFxcXCJ2bWFfaW50ZXJuYWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInZtYS5oXFxcIlxcbiBcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2h1Z2VfbW0uaFxcdTAwM2VcXG4rXFxuIHN0cnVjdCBtbWFwX3N0YXRlIHtcXG4gXFx0c3RydWN0IG1tX3N0cnVjdCAqbW07XFxuIFxcdHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaTtcXG5AQCAtNTA3LDYgKzUwOSwxMCBAQCBfX3NwbGl0X3ZtYShzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWksIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHRXQVJOX09OKHZtYS1cXHUwMDNldm1fc3RhcnQgXFx1MDAzZT0gYWRkcik7XFxuIFxcdFdBUk5fT04odm1hLVxcdTAwM2V2bV9lbmQgXFx1MDAzYz0gYWRkcik7XFxuIFxcbitcXHRpZiAoKHZtYS1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiBWTV9SRVNFUlZFRF9USFApIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAhSVNfQUxJR05FRChhZGRyLCBIUEFHRV9QTURfU0laRSkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4gXFx0aWYgKHZtYS1cXHUwMDNldm1fb3BzIFxcdTAwMjZcXHUwMDI2IHZtYS1cXHUwMDNldm1fb3BzLVxcdTAwM2VtYXlfc3BsaXQpIHtcXG4gXFx0XFx0ZXJyID0gdm1hLVxcdTAwM2V2bV9vcHMtXFx1MDAzZW1heV9zcGxpdCh2bWEsIGFkZHIpO1xcbiBcXHRcXHRpZiAoZXJyKVxcbkBAIC0xMzYxLDYgKzEzNjcsNyBAQCBzdGF0aWMgdm9pZCB2bXNfY29tcGxldGVfbXVubWFwX3ZtYXMoc3RydWN0IHZtYV9tdW5tYXBfc3RydWN0ICp2bXMsXFxuIFxcdFxcdHJlbW92ZV92bWEodm1hKTtcXG4gXFxuIFxcdHZtX3VuYWNjdF9tZW1vcnkodm1zLVxcdTAwM2Vucl9hY2NvdW50ZWQpO1xcbitcXHRyZXNlcnZlZF90aHBfdW5jaGFyZ2Uodm1zLVxcdTAwM2Vucl9yZXNlcnZlZF90aHApO1xcbiBcXHR2YWxpZGF0ZV9tbShtbSk7XFxuIFxcdGlmICh2bXMtXFx1MDAzZXVubG9jaylcXG4gXFx0XFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XFxuQEAgLTE0MjMsNiArMTQzMCwxMSBAQCBzdGF0aWMgaW50IHZtc19nYXRoZXJfbXVubWFwX3ZtYXMoc3RydWN0IHZtYV9tdW5tYXBfc3RydWN0ICp2bXMsXFxuIFxcdFxcdFxcdGVycm9yID0gLUVQRVJNO1xcbiBcXHRcXHRcXHRnb3RvIHN0YXJ0X3NwbGl0X2ZhaWxlZDtcXG4gXFx0XFx0fVxcbitcXHRcXHRpZiAoKHZtcy1cXHUwMDNldm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX1JFU0VSVkVEX1RIUCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgICFJU19BTElHTkVEKHZtcy1cXHUwMDNlc3RhcnQsIEhQQUdFX1BNRF9TSVpFKSkge1xcbitcXHRcXHRcXHRlcnJvciA9IC1FSU5WQUw7XFxuK1xcdFxcdFxcdGdvdG8gc3RhcnRfc3BsaXRfZmFpbGVkO1xcbitcXHRcXHR9XFxuIFxcbiBcXHRcXHRlcnJvciA9IF9fc3BsaXRfdm1hKHZtcy1cXHUwMDNldm1pLCB2bXMtXFx1MDAzZXZtYSwgdm1zLVxcdTAwM2VzdGFydCwgMSk7XFxuIFxcdFxcdGlmIChlcnJvcilcXG5AQCAtMTQ0NSw2ICsxNDU3LDExIEBAIHN0YXRpYyBpbnQgdm1zX2dhdGhlcl9tdW5tYXBfdm1hcyhzdHJ1Y3Qgdm1hX211bm1hcF9zdHJ1Y3QgKnZtcyxcXG4gXFx0XFx0fVxcbiBcXHRcXHQvKiBEb2VzIGl0IHNwbGl0IHRoZSBlbmQ/ICovXFxuIFxcdFxcdGlmIChuZXh0LVxcdTAwM2V2bV9lbmQgXFx1MDAzZSB2bXMtXFx1MDAzZWVuZCkge1xcbitcXHRcXHRcXHRpZiAoKG5leHQtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fUkVTRVJWRURfVEhQKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgICAgIUlTX0FMSUdORUQodm1zLVxcdTAwM2VlbmQsIEhQQUdFX1BNRF9TSVpFKSkge1xcbitcXHRcXHRcXHRcXHRlcnJvciA9IC1FSU5WQUw7XFxuK1xcdFxcdFxcdFxcdGdvdG8gZW5kX3NwbGl0X2ZhaWxlZDtcXG4rXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRlcnJvciA9IF9fc3BsaXRfdm1hKHZtcy1cXHUwMDNldm1pLCBuZXh0LCB2bXMtXFx1MDAzZWVuZCwgMCk7XFxuIFxcdFxcdFxcdGlmIChlcnJvcilcXG4gXFx0XFx0XFx0XFx0Z290byBlbmRfc3BsaXRfZmFpbGVkO1xcbkBAIC0xNDY1LDYgKzE0ODIsMTEgQEAgc3RhdGljIGludCB2bXNfZ2F0aGVyX211bm1hcF92bWFzKHN0cnVjdCB2bWFfbXVubWFwX3N0cnVjdCAqdm1zLFxcbiBcXHRcXHRpZiAodm1hX3Rlc3QobmV4dCwgVk1BX0FDQ09VTlRfQklUKSlcXG4gXFx0XFx0XFx0dm1zLVxcdTAwM2Vucl9hY2NvdW50ZWQgKz0gbnJwYWdlcztcXG4gXFxuK1xcdFxcdGlmIChuZXh0LVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX1JFU0VSVkVEX1RIUClcXG4rXFx0XFx0XFx0dm1zLVxcdTAwM2Vucl9yZXNlcnZlZF90aHAgKz1cXG4rXFx0XFx0XFx0XFx0cmVzZXJ2ZWRfdGhwX2hwYWdlX25yKG5leHQtXFx1MDAzZXZtX3N0YXJ0LFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBuZXh0LVxcdTAwM2V2bV9lbmQpO1xcbitcXG4gXFx0XFx0aWYgKGlzX2V4ZWNfbWFwcGluZyhuZXh0LVxcdTAwM2V2bV9mbGFncykpXFxuIFxcdFxcdFxcdHZtcy1cXHUwMDNlZXhlY192bSArPSBucnBhZ2VzO1xcbiBcXHRcXHRlbHNlIGlmIChpc19zdGFja19tYXBwaW5nKG5leHQtXFx1MDAzZXZtX2ZsYWdzKSlcXG5AQCAtMTU2MCw2ICsxNTgyLDcgQEAgc3RhdGljIHZvaWQgaW5pdF92bWFfbXVubWFwKHN0cnVjdCB2bWFfbXVubWFwX3N0cnVjdCAqdm1zLFxcbiBcXHR2bXMtXFx1MDAzZXVmID0gdWY7XFxuIFxcdHZtcy1cXHUwMDNldm1hX2NvdW50ID0gMDtcXG4gXFx0dm1zLVxcdTAwM2Vucl9wYWdlcyA9IHZtcy1cXHUwMDNlbG9ja2VkX3ZtID0gdm1zLVxcdTAwM2Vucl9hY2NvdW50ZWQgPSAwO1xcbitcXHR2bXMtXFx1MDAzZW5yX3Jlc2VydmVkX3RocCA9IDA7XFxuIFxcdHZtcy1cXHUwMDNlZXhlY192bSA9IHZtcy1cXHUwMDNlc3RhY2tfdm0gPSB2bXMtXFx1MDAzZWRhdGFfdm0gPSAwO1xcbiBcXHR2bXMtXFx1MDAzZXVubWFwX3N0YXJ0ID0gRklSU1RfVVNFUl9BRERSRVNTO1xcbiBcXHR2bXMtXFx1MDAzZXVubWFwX2VuZCA9IFVTRVJfUEdUQUJMRVNfQ0VJTElORztcXG5kaWZmIC0tZ2l0IGEvbW0vdm1hLmggYi9tbS92bWEuaFxcbmluZGV4IDhlNGI2MWE3MzA0YzY4Li42OGU0NGFkZWU1Yzg5ZSAxMDA2NDRcXG4tLS0gYS9tbS92bWEuaFxcbisrKyBiL21tL3ZtYS5oXFxuQEAgLTQ4LDYgKzQ4LDcgQEAgc3RydWN0IHZtYV9tdW5tYXBfc3RydWN0IHtcXG4gXFx0dW5zaWduZWQgbG9uZyBucl9wYWdlczsgICAgICAgICAvKiBOdW1iZXIgb2YgcGFnZXMgYmVpbmcgcmVtb3ZlZCAqL1xcbiBcXHR1bnNpZ25lZCBsb25nIGxvY2tlZF92bTsgICAgICAgIC8qIE51bWJlciBvZiBsb2NrZWQgcGFnZXMgKi9cXG4gXFx0dW5zaWduZWQgbG9uZyBucl9hY2NvdW50ZWQ7ICAgICAvKiBOdW1iZXIgb2YgVk1fQUNDT1VOVCBwYWdlcyAqL1xcbitcXHR1bnNpZ25lZCBsb25nIG5yX3Jlc2VydmVkX3RocDsgIC8qIE51bWJlciBvZiByZXNlcnZlZCBQTUQgVEhQIHNsb3RzICovXFxuIFxcdHVuc2lnbmVkIGxvbmcgZXhlY192bTtcXG4gXFx0dW5zaWduZWQgbG9uZyBzdGFja192bTtcXG4gXFx0dW5zaWduZWQgbG9uZyBkYXRhX3ZtO1xcbmRpZmYgLS1naXQgYS90b29scy9pbmNsdWRlL2xpbnV4L2dmcF90eXBlcy5oIGIvdG9vbHMvaW5jbHVkZS9saW51eC9nZnBfdHlwZXMuaFxcbmluZGV4IDZjNzVkZjMwYTI4MWQxLi41M2ExZDIyZmNmOTU3ZSAxMDA2NDRcXG4tLS0gYS90b29scy9pbmNsdWRlL2xpbnV4L2dmcF90eXBlcy5oXFxuKysrIGIvdG9vbHMvaW5jbHVkZS9saW51eC9nZnBfdHlwZXMuaFxcbkBAIC0zMyw3ICszMyw3IEBAIGVudW0ge1xcbiBcXHRfX19HRlBfSU9fQklULFxcbiBcXHRfX19HRlBfRlNfQklULFxcbiBcXHRfX19HRlBfWkVST19CSVQsXFxuLVxcdF9fX0dGUF9VTlVTRURfQklULFxcdC8qIDB4MjAwdSB1bnVzZWQgKi9cXG4rXFx0X19fR0ZQX1JFU0VSVkVEX1RIUF9CSVQsXFxuIFxcdF9fX0dGUF9ESVJFQ1RfUkVDTEFJTV9CSVQsXFxuIFxcdF9fX0dGUF9LU1dBUERfUkVDTEFJTV9CSVQsXFxuIFxcdF9fX0dGUF9XUklURV9CSVQsXFxuQEAgLTY5LDcgKzY5LDcgQEAgZW51bSB7XFxuICNkZWZpbmUgX19fR0ZQX0lPXFx0XFx0QklUKF9fX0dGUF9JT19CSVQpXFxuICNkZWZpbmUgX19fR0ZQX0ZTXFx0XFx0QklUKF9fX0dGUF9GU19CSVQpXFxuICNkZWZpbmUgX19fR0ZQX1pFUk9cXHRcXHRCSVQoX19fR0ZQX1pFUk9fQklUKVxcbi0vKiAweDIwMHUgdW51c2VkICovXFxuKyNkZWZpbmUgX19fR0ZQX1JFU0VSVkVEX1RIUFxcdEJJVChfX19HRlBfUkVTRVJWRURfVEhQX0JJVClcXG4gI2RlZmluZSBfX19HRlBfRElSRUNUX1JFQ0xBSU1cXHRCSVQoX19fR0ZQX0RJUkVDVF9SRUNMQUlNX0JJVClcXG4gI2RlZmluZSBfX19HRlBfS1NXQVBEX1JFQ0xBSU1cXHRCSVQoX19fR0ZQX0tTV0FQRF9SRUNMQUlNX0JJVClcXG4gI2RlZmluZSBfX19HRlBfV1JJVEVcXHRcXHRCSVQoX19fR0ZQX1dSSVRFX0JJVClcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLWttZW0uYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1rbWVtLmNcXG5pbmRleCBlMWIyZjViYzFiYThkOC4uNDU3MzJhYWYxYTUyNWUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLWttZW0uY1xcbisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1rbWVtLmNcXG5AQCAtNjcyLDYgKzY3Miw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qge1xcbiBcXHR7IFxcXCJfX0dGUF9OT1JFVFJZXFxcIixcXHRcXHRcXFwiTlJcXFwiIH0sXFxuIFxcdHsgXFxcIl9fR0ZQX0NPTVBcXFwiLFxcdFxcdFxcdFxcXCJDXFxcIiB9LFxcbiBcXHR7IFxcXCJfX0dGUF9aRVJPXFxcIixcXHRcXHRcXHRcXFwiWlxcXCIgfSxcXG4rXFx0eyBcXFwiX19HRlBfUkVTRVJWRURfVEhQXFxcIixcXHRcXHRcXFwiUlRIUFxcXCIgfSxcXG4gXFx0eyBcXFwiX19HRlBfTk9NRU1BTExPQ1xcXCIsXFx0XFx0XFxcIk5NQVxcXCIgfSxcXG4gXFx0eyBcXFwiX19HRlBfTUVNQUxMT0NcXFwiLFxcdFxcdFxcXCJNQVxcXCIgfSxcXG4gXFx0eyBcXFwiX19HRlBfSEFSRFdBTExcXFwiLFxcdFxcdFxcXCJIV1xcXCIgfSxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaCBiL3Rvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmhcXG5pbmRleCBjZjczYmNkOWJiOWQ1Mi4uMDIyYjdhNTZiNmE5ZjMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmhcXG5AQCAtMTYwLDYgKzE2MCw3IEBAIGVudW0ge1xcbiAjZW5kaWZcXG4gXFx0REVDTEFSRV9WTUFfQklUKFVGRkRfTUlOT1IsIDQxKSxcXG4gXFx0REVDTEFSRV9WTUFfQklUKFNFQUxFRCwgNDIpLFxcbitcXHRERUNMQVJFX1ZNQV9CSVQoUkVTRVJWRURfVEhQLCA0MyksXFxuIFxcdC8qIEZsYWdzIHRoYXQgcmV1c2UgZmxhZ3MgYWJvdmUuICovXFxuIFxcdERFQ0xBUkVfVk1BX0JJVF9BTElBUyhQS0VZX0JJVDAsIEhJR0hfQVJDSF8wKSxcXG4gXFx0REVDTEFSRV9WTUFfQklUX0FMSUFTKFBLRVlfQklUMSwgSElHSF9BUkNIXzEpLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNzozOTo1Ni42MDQ2OTYwMzdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI2NDg4MzA3NzMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWFkdmlzZV9odWdlcGFnZV9wb2xpY3lcIixcbiAgICBcInJlc2VydmVkX3RocF9jaGFyZ2VcIixcbiAgICBcInJlc2VydmVkX3RocF91bmNoYXJnZVwiLFxuICAgIFwicmVzZXJ2ZWRfdGhwX3BhZ2VibG9ja3NcIixcbiAgICBcImNoZWNrX3Jlc2VydmVkX3RocF9hbGlnbm1lbnRcIixcbiAgICBcInZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgTUFEVl9SRVNFUlZFRF9USFAgbWFkdmlzZSBiZWhhdmlvciBhbmQgVk1fUkVTRVJWRURfVEhQIFZNQSBmbGFnLCBtb2RpZnlpbmcgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbmNsdWRpbmcgcGFnZSBmYXVsdCBoYW5kbGluZywgbXJlbWFwLCBhbmQgVk1BIHNwbGl0dGluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBrZXJuZWwncyBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDg4YzI4MTU1NjVkZjZjMDRhZDk0ZWJmYTQ4MDA1NGM4MTgzNmZlNzhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1biAyNyAwNzozOTo1NCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmggYi9hcmNoL2FscGhhL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oXG5pbmRleCAxZTcwMDQ2OGE2ODU4MC4uNjcyYTJmYzM0Mzg2MTQgMTAwNjQ0XG4tLS0gYS9hcmNoL2FscGhhL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oXG4rKysgYi9hcmNoL2FscGhhL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oXG5AQCAtNzgsNiArNzgsOCBAQFxuIFxuICNkZWZpbmUgTUFEVl9DT0xMQVBTRVx0MjVcdFx0LyogU3luY2hyb25vdXMgaHVnZXBhZ2UgY29sbGFwc2UgKi9cbiBcbisjZGVmaW5lIE1BRFZfUkVTRVJWRURfVEhQIDI2XHRcdC8qIFVzZSByZXNlcnZlZCB0cmFuc3BhcmVudCBodWdlcGFnZXMgKi9cbitcbiAjZGVmaW5lIE1BRFZfR1VBUkRfSU5TVEFMTCAxMDJcdFx0LyogZmF0YWwgc2lnbmFsIG9uIGFjY2VzcyB0byByYW5nZSAqL1xuICNkZWZpbmUgTUFEVl9HVUFSRF9SRU1PVkUgMTAzXHRcdC8qIHVuZ3VhcmQgcmFuZ2UgKi9cbiBcbmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmggYi9hcmNoL21pcHMvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmhcbmluZGV4IGI3MDBkYWUyOGM0ODJkLi5hOTRiZjc0ZGVlMjFjYSAxMDA2NDRcbi0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaFxuKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oXG5AQCAtMTA1LDYgKzEwNSw4IEBAXG4gXG4gI2RlZmluZSBNQURWX0NPTExBUFNFXHQyNVx0XHQvKiBTeW5jaHJvbm91cyBodWdlcGFnZSBjb2xsYXBzZSAqL1xuIFxuKyNkZWZpbmUgTUFEVl9SRVNFUlZFRF9USFAgMjZcdFx0LyogVXNlIHJlc2VydmVkIHRyYW5zcGFyZW50IGh1Z2VwYWdlcyAqL1xuK1xuICNkZWZpbmUgTUFEVl9HVUFSRF9JTlNUQUxMIDEwMlx0XHQvKiBmYXRhbCBzaWduYWwgb24gYWNjZXNzIHRvIHJhbmdlICovXG4gI2RlZmluZSBNQURWX0dVQVJEX1JFTU9WRSAxMDNcdFx0LyogdW5ndWFyZCByYW5nZSAqL1xuIFxuZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmhcbmluZGV4IGI2YTcwOTUwNjk4N2UwLi5mZTJmZGRlZmI2YzVkOSAxMDA2NDRcbi0tLSBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oXG4rKysgYi9hcmNoL3BhcmlzYy9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaFxuQEAgLTcyLDYgKzcyLDggQEBcbiBcbiAjZGVmaW5lIE1BRFZfQ09MTEFQU0VcdDI1XHRcdC8qIFN5bmNocm9ub3VzIGh1Z2VwYWdlIGNvbGxhcHNlICovXG4gXG4rI2RlZmluZSBNQURWX1JFU0VSVkVEX1RIUCAyNlx0XHQvKiBVc2UgcmVzZXJ2ZWQgdHJhbnNwYXJlbnQgaHVnZXBhZ2VzICovXG4rXG4gI2RlZmluZSBNQURWX0hXUE9JU09OICAgICAxMDBcdFx0LyogcG9pc29uIGEgcGFnZSBmb3IgdGVzdGluZyAqL1xuICNkZWZpbmUgTUFEVl9TT0ZUX09GRkxJTkUgMTAxXHRcdC8qIHNvZnQgb2ZmbGluZSBwYWdlIGZvciB0ZXN0aW5nICovXG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmggYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaFxuaW5kZXggOTlkNGNjZWU3ZjZlOGEuLmJiNjAzNTMwYmE3OTlmIDEwMDY0NFxuLS0tIGEvYXJjaC94dGVuc2EvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmhcbisrKyBiL2FyY2gveHRlbnNhL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oXG5AQCAtMTEzLDYgKzExMyw4IEBAXG4gXG4gI2RlZmluZSBNQURWX0NPTExBUFNFXHQyNVx0XHQvKiBTeW5jaHJvbm91cyBodWdlcGFnZSBjb2xsYXBzZSAqL1xuIFxuKyNkZWZpbmUgTUFEVl9SRVNFUlZFRF9USFAgMjZcdFx0LyogVXNlIHJlc2VydmVkIHRyYW5zcGFyZW50IGh1Z2VwYWdlcyAqL1xuK1xuICNkZWZpbmUgTUFEVl9HVUFSRF9JTlNUQUxMIDEwMlx0XHQvKiBmYXRhbCBzaWduYWwgb24gYWNjZXNzIHRvIHJhbmdlICovXG4gI2RlZmluZSBNQURWX0dVQVJEX1JFTU9WRSAxMDNcdFx0LyogdW5ndWFyZCByYW5nZSAqL1xuIFxuZGlmZiAtLWdpdCBhL2ZzL3Byb2MvdGFza19tbXUuYyBiL2ZzL3Byb2MvdGFza19tbXUuY1xuaW5kZXggZDMyNDA4ZjdjZDVlZDIuLjY1YzRiMmE2MWFlYWM3IDEwMDY0NFxuLS0tIGEvZnMvcHJvYy90YXNrX21tdS5jXG4rKysgYi9mcy9wcm9jL3Rhc2tfbW11LmNcbkBAIC0xMjQ1LDYgKzEyNDUsOSBAQCBzdGF0aWMgdm9pZCBzaG93X3NtYXBfdm1hX2ZsYWdzKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4gI2VuZGlmXG4gI2lmZGVmIENPTkZJR182NEJJVFxuIFx0XHRbaWxvZzIoVk1fU0VBTEVEKV0gPSBcInNsXCIsXG4rI2VuZGlmXG4rI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxuK1x0XHRbaWxvZzIoVk1fUkVTRVJWRURfVEhQKV0gPSBcInJ0XCIsXG4gI2VuZGlmXG4gXHR9O1xuIFx0c2l6ZV90IGk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9nZnAuaCBiL2luY2x1ZGUvbGludXgvZ2ZwLmhcbmluZGV4IGNkZjk1YTlmMGI4N2MxLi4yZDA1OTI5ZmQ4YzcyZCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZ2ZwLmhcbisrKyBiL2luY2x1ZGUvbGludXgvZ2ZwLmhcbkBAIC0zMCw2ICszMCw5IEBAIHN0YXRpYyBpbmxpbmUgaW50IGdmcF9taWdyYXRldHlwZShjb25zdCBnZnBfdCBnZnBfZmxhZ3MpXG4gXHRCVUlMRF9CVUdfT04oKChfX19HRlBfTU9WQUJMRSB8IF9fX0dGUF9SRUNMQUlNQUJMRSkgXHUwMDNlXHUwMDNlXG4gXHRcdCAgICAgIEdGUF9NT1ZBQkxFX1NISUZUKSAhPSBNSUdSQVRFX0hJR0hBVE9NSUMpO1xuIFxuK1x0aWYgKHVubGlrZWx5KGdmcF9mbGFncyBcdTAwMjYgX19HRlBfUkVTRVJWRURfVEhQKSlcbitcdFx0cmV0dXJuIE1JR1JBVEVfUkVTRVJWRURfVEhQO1xuK1xuIFx0aWYgKHVubGlrZWx5KHBhZ2VfZ3JvdXBfYnlfbW9iaWxpdHlfZGlzYWJsZWQpKVxuIFx0XHRyZXR1cm4gTUlHUkFURV9VTk1PVkFCTEU7XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9nZnBfdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvZ2ZwX3R5cGVzLmhcbmluZGV4IDU0Y2EwYzg4YmFiNmU4Li4xZjgyYTk0OTFkMzU3ZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZ2ZwX3R5cGVzLmhcbisrKyBiL2luY2x1ZGUvbGludXgvZ2ZwX3R5cGVzLmhcbkBAIC0zMyw3ICszMyw3IEBAIGVudW0ge1xuIFx0X19fR0ZQX0lPX0JJVCxcbiBcdF9fX0dGUF9GU19CSVQsXG4gXHRfX19HRlBfWkVST19CSVQsXG4tXHRfX19HRlBfVU5VU0VEX0JJVCxcdC8qIDB4MjAwdSB1bnVzZWQgKi9cbitcdF9fX0dGUF9SRVNFUlZFRF9USFBfQklULFxuIFx0X19fR0ZQX0RJUkVDVF9SRUNMQUlNX0JJVCxcbiBcdF9fX0dGUF9LU1dBUERfUkVDTEFJTV9CSVQsXG4gXHRfX19HRlBfV1JJVEVfQklULFxuQEAgLTY5LDcgKzY5LDcgQEAgZW51bSB7XG4gI2RlZmluZSBfX19HRlBfSU9cdFx0QklUKF9fX0dGUF9JT19CSVQpXG4gI2RlZmluZSBfX19HRlBfRlNcdFx0QklUKF9fX0dGUF9GU19CSVQpXG4gI2RlZmluZSBfX19HRlBfWkVST1x0XHRCSVQoX19fR0ZQX1pFUk9fQklUKVxuLS8qIDB4MjAwdSB1bnVzZWQgKi9cbisjZGVmaW5lIF9fX0dGUF9SRVNFUlZFRF9USFBcdEJJVChfX19HRlBfUkVTRVJWRURfVEhQX0JJVClcbiAjZGVmaW5lIF9fX0dGUF9ESVJFQ1RfUkVDTEFJTVx0QklUKF9fX0dGUF9ESVJFQ1RfUkVDTEFJTV9CSVQpXG4gI2RlZmluZSBfX19HRlBfS1NXQVBEX1JFQ0xBSU1cdEJJVChfX19HRlBfS1NXQVBEX1JFQ0xBSU1fQklUKVxuICNkZWZpbmUgX19fR0ZQX1dSSVRFXHRcdEJJVChfX19HRlBfV1JJVEVfQklUKVxuQEAgLTE0MSw2ICsxNDEsOSBAQCBlbnVtIHtcbiAgKiAlX19HRlBfTk9fT0JKX0VYVCBjYXVzZXMgc2xhYiBhbGxvY2F0aW9uIHRvIGhhdmUgbm8gb2JqZWN0IGV4dGVuc2lvbi5cbiAgKiBtYXJrX29ial9jb2RldGFnX2VtcHR5KCkgc2hvdWxkIGJlIGNhbGxlZCB1cG9uIGZyZWVpbmcgZm9yIG9iamVjdHMgYWxsb2NhdGVkXG4gICogd2l0aCB0aGlzIGZsYWcgdG8gaW5kaWNhdGUgdGhhdCB0aGVpciBOVUxMIHRhZ3MgYXJlIGV4cGVjdGVkIGFuZCBub3JtYWwuXG4rICpcbisgKiAlX19HRlBfUkVTRVJWRURfVEhQIGlzIGFuIGludGVybmFsIGZsYWcgZm9yIHJlc2VydmVkIFRIUCBmYXVsdHMuIEl0IHJlc3RyaWN0c1xuKyAqdGhlIGFsbG9jYXRpb24gdG8gJU1JR1JBVEVfUkVTRVJWRURfVEhQIHBhZ2VibG9ja3MuXG4gICovXG4gI2RlZmluZSBfX0dGUF9SRUNMQUlNQUJMRSAoKF9fZm9yY2UgZ2ZwX3QpX19fR0ZQX1JFQ0xBSU1BQkxFKVxuICNkZWZpbmUgX19HRlBfV1JJVEVcdCgoX19mb3JjZSBnZnBfdClfX19HRlBfV1JJVEUpXG5AQCAtMTQ4LDYgKzE1MSw3IEBAIGVudW0ge1xuICNkZWZpbmUgX19HRlBfVEhJU05PREVcdCgoX19mb3JjZSBnZnBfdClfX19HRlBfVEhJU05PREUpXG4gI2RlZmluZSBfX0dGUF9BQ0NPVU5UXHQoKF9fZm9yY2UgZ2ZwX3QpX19fR0ZQX0FDQ09VTlQpXG4gI2RlZmluZSBfX0dGUF9OT19PQkpfRVhUICAgKChfX2ZvcmNlIGdmcF90KV9fX0dGUF9OT19PQkpfRVhUKVxuKyNkZWZpbmUgX19HRlBfUkVTRVJWRURfVEhQICgoX19mb3JjZSBnZnBfdClfX19HRlBfUkVTRVJWRURfVEhQKVxuIFxuIC8qKlxuICAqIERPQzogV2F0ZXJtYXJrIG1vZGlmaWVyc1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHVnZV9tbS5oIGIvaW5jbHVkZS9saW51eC9odWdlX21tLmhcbmluZGV4IGFkMjBmN2Y4YzE3OTQ0Li40ZmU5NjUxY2Q4NmI1ZSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvaHVnZV9tbS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaFxuQEAgLTMzMCw2ICszMzAsOCBAQCB1bnNpZ25lZCBsb25nIHRocF92bWFfYWxsb3dhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcbiBcdFx0aWYgKHZtX2ZsYWdzIFx1MDAyNiBWTV9IVUdFUEFHRSlcbiBcdFx0XHRtYXNrIHw9IFJFQURfT05DRShodWdlX2Fub25fb3JkZXJzX21hZHZpc2UpO1xuK1x0XHRpZiAodm1fZmxhZ3MgXHUwMDI2IFZNX1JFU0VSVkVEX1RIUClcbitcdFx0XHRtYXNrIHw9IEJJVChQTURfT1JERVIpO1xuIFx0XHRpZiAoaHVnZXBhZ2VfZ2xvYmFsX2Fsd2F5cygpIHx8XG4gXHRcdCAgICAoKHZtX2ZsYWdzIFx1MDAyNiBWTV9IVUdFUEFHRSkgXHUwMDI2XHUwMDI2IGh1Z2VwYWdlX2dsb2JhbF9lbmFibGVkKCkpKVxuIFx0XHRcdG1hc2sgfD0gUkVBRF9PTkNFKGh1Z2VfYW5vbl9vcmRlcnNfaW5oZXJpdCk7XG5AQCAtMzcxLDcgKzM3Myw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB2bWFfdGhwX2Rpc2FibGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0ICogQXJlIFRIUHMgZGlzYWJsZWQgb25seSBmb3IgVk1BcyB3aGVyZSB3ZSBkaWRuJ3QgZ2V0IGFuIGV4cGxpY2l0XG4gXHQgKiBhZHZpc2UgdG8gdXNlIHRoZW0/XG4gXHQgKi9cbi1cdGlmICh2bV9mbGFncyBcdTAwMjYgVk1fSFVHRVBBR0UpXG4rXHRpZiAodm1fZmxhZ3MgXHUwMDI2IChWTV9IVUdFUEFHRSB8IFZNX1JFU0VSVkVEX1RIUCkpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdC8qXG4gXHQgKiBGb3JjaW5nIGEgY29sbGFwc2UgKGUuZy4sIG1hZHZfY29sbGFwc2UpLCBpcyBhIGNsZWFyIGFkdmljZSB0b1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaFxuaW5kZXggNDg1ZGY5YzJkYmRkYjMuLjI3OGNmNGJmZDRlYzViIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tLmhcbkBAIC0zNTMsNiArMzUzLDcgQEAgZW51bSB7XG4gI2VuZGlmXG4gXHRERUNMQVJFX1ZNQV9CSVQoVUZGRF9NSU5PUiwgNDEpLFxuIFx0REVDTEFSRV9WTUFfQklUKFNFQUxFRCwgNDIpLFxuK1x0REVDTEFSRV9WTUFfQklUKFJFU0VSVkVEX1RIUCwgNDMpLFxuIFx0LyogRmxhZ3MgdGhhdCByZXVzZSBmbGFncyBhYm92ZS4gKi9cbiBcdERFQ0xBUkVfVk1BX0JJVF9BTElBUyhQS0VZX0JJVDAsIEhJR0hfQVJDSF8wKSxcbiBcdERFQ0xBUkVfVk1BX0JJVF9BTElBUyhQS0VZX0JJVDEsIEhJR0hfQVJDSF8xKSxcbkBAIC01MjYsNiArNTI3LDEyIEBAIGVudW0ge1xuICNkZWZpbmUgVk1BX0RST1BQQUJMRVx0XHRFTVBUWV9WTUFfRkxBR1NcbiAjZW5kaWZcbiBcbisjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG4rI2RlZmluZSBWTV9SRVNFUlZFRF9USFBcdFx0SU5JVF9WTV9GTEFHKFJFU0VSVkVEX1RIUClcbisjZWxzZVxuKyNkZWZpbmUgVk1fUkVTRVJWRURfVEhQXHRcdFZNX05PTkVcbisjZW5kaWZcbitcbiAvKiBCaXRzIHNldCBpbiB0aGUgVk1BIHVudGlsIHRoZSBzdGFjayBpcyBpbiBpdHMgZmluYWwgbG9jYXRpb24gKi9cbiAjZGVmaW5lIFZNX1NUQUNLX0lOQ09NUExFVEVfU0VUVVAgKFZNX1JBTkRfUkVBRCB8IFZNX1NFUV9SRUFEIHwgVk1fU1RBQ0tfRUFSTFkpXG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaCBiL2luY2x1ZGUvbGludXgvbW16b25lLmhcbmluZGV4IGNhMjcxMjE4NzE0NzVjLi40NDE4ZDBjOWFjY2RjOCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW16b25lLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbW16b25lLmhcbkBAIC0xMzMsMTAgKzEzMyw5IEBAIGVudW0gbWlncmF0ZXR5cGUge1xuIFx0ICogX19mcmVlX3BhZ2VibG9ja19jbWEoKSBmdW5jdGlvbi5cbiBcdCAqL1xuIFx0TUlHUkFURV9DTUEsXG4tXHRfX01JR1JBVEVfVFlQRV9FTkQgPSBNSUdSQVRFX0NNQSxcbi0jZWxzZVxuLVx0X19NSUdSQVRFX1RZUEVfRU5EID0gTUlHUkFURV9ISUdIQVRPTUlDLFxuICNlbmRpZlxuK1x0TUlHUkFURV9SRVNFUlZFRF9USFAsXG4rXHRfX01JR1JBVEVfVFlQRV9FTkQgPSBNSUdSQVRFX1JFU0VSVkVEX1RIUCxcbiAjaWZkZWYgQ09ORklHX01FTU9SWV9JU09MQVRJT05cbiBcdE1JR1JBVEVfSVNPTEFURSxcdC8qIGNhbid0IGFsbG9jYXRlIGZyb20gaGVyZSAqL1xuICNlbmRpZlxuQEAgLTE2MSw2ICsxNjAsOSBAQCBleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pZ3JhdGV0eXBlX25hbWVzW01JR1JBVEVfVFlQRVNdO1xuICMgIGRlZmluZSBpc19taWdyYXRlX2NtYV9mb2xpbyhmb2xpbywgcGZuKSBmYWxzZVxuICNlbmRpZlxuIFxuKyNkZWZpbmUgaXNfbWlncmF0ZV9yZXNlcnZlZF90aHAobWlncmF0ZXR5cGUpIFxcXG4rXHR1bmxpa2VseSgobWlncmF0ZXR5cGUpID09IE1JR1JBVEVfUkVTRVJWRURfVEhQKVxuK1xuIHN0YXRpYyBpbmxpbmUgYm9vbCBpc19taWdyYXRlX21vdmFibGUoaW50IG10KVxuIHtcbiBcdHJldHVybiBpc19taWdyYXRlX2NtYShtdCkgfHwgbXQgPT0gTUlHUkFURV9NT1ZBQkxFO1xuQEAgLTk3NSw2ICs5NzcsOSBAQCBzdHJ1Y3Qgem9uZSB7XG4gXHR1bnNpZ25lZCBsb25nIG5yX3Jlc2VydmVkX2hpZ2hhdG9taWM7XG4gXHR1bnNpZ25lZCBsb25nIG5yX2ZyZWVfaGlnaGF0b21pYztcbiBcbitcdHVuc2lnbmVkIGxvbmcgbnJfcmVzZXJ2ZWRfdGhwO1xuK1x0dW5zaWduZWQgbG9uZyBucl9mcmVlX3Jlc2VydmVkX3RocDtcbitcbiBcdC8qXG4gXHQgKiBXZSBkb24ndCBrbm93IGlmIHRoZSBtZW1vcnkgdGhhdCB3ZSdyZSBnb2luZyB0byBhbGxvY2F0ZSB3aWxsIGJlXG4gXHQgKiBmcmVlYWJsZSBvci9hbmQgaXQgd2lsbCBiZSByZWxlYXNlZCBldmVudHVhbGx5LCBzbyB0byBhdm9pZCB0b3RhbGx5XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvbW1mbGFncy5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvbW1mbGFncy5oXG5pbmRleCBhNmU1YTQ0YzliNDI5OS4uM2RiNDBlYmQ3MDYwYmQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9tbWZsYWdzLmhcbisrKyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL21tZmxhZ3MuaFxuQEAgLTI0LDYgKzI0LDcgQEBcbiBcdFRSQUNFX0dGUF9FTShJTylcdFx0XHRcXFxuIFx0VFJBQ0VfR0ZQX0VNKEZTKVx0XHRcdFxcXG4gXHRUUkFDRV9HRlBfRU0oWkVSTylcdFx0XHRcXFxuK1x0VFJBQ0VfR0ZQX0VNKFJFU0VSVkVEX1RIUClcdFx0XFxcbiBcdFRSQUNFX0dGUF9FTShESVJFQ1RfUkVDTEFJTSlcdFx0XFxcbiBcdFRSQUNFX0dGUF9FTShLU1dBUERfUkVDTEFJTSlcdFx0XFxcbiBcdFRSQUNFX0dGUF9FTShXUklURSlcdFx0XHRcXFxuQEAgLTcyLDggKzczLDcgQEBcbiBcbiBUUkFDRV9HRlBfRkxBR1NcbiBcbi0vKiBKdXN0IGluIGNhc2UgdGhlc2UgYXJlIGV2ZXIgdXNlZCAqL1xuLVRSQUNFX0RFRklORV9FTlVNKF9fX0dGUF9VTlVTRURfQklUKTtcbisvKiBKdXN0IGluIGNhc2UgdGhpcyBpcyBldmVyIHVzZWQgKi9cbiBUUkFDRV9ERUZJTkVfRU5VTShfX19HRlBfTEFTVF9CSVQpO1xuIFxuICNkZWZpbmUgZ2ZwZmxhZ19zdHJpbmcoZmxhZykgeyhfX2ZvcmNlIHVuc2lnbmVkIGxvbmcpZmxhZywgI2ZsYWd9XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL21tYW4tY29tbW9uLmggYi9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvbW1hbi1jb21tb24uaFxuaW5kZXggZWYxYzI3ZmEzYzU3MGYuLmIzZDE0NDg5MzVlYWQxIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL21tYW4tY29tbW9uLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9tbWFuLWNvbW1vbi5oXG5AQCAtNzksNiArNzksOCBAQFxuIFxuICNkZWZpbmUgTUFEVl9DT0xMQVBTRVx0MjVcdFx0LyogU3luY2hyb25vdXMgaHVnZXBhZ2UgY29sbGFwc2UgKi9cbiBcbisjZGVmaW5lIE1BRFZfUkVTRVJWRURfVEhQIDI2XHRcdC8qIFVzZSByZXNlcnZlZCB0cmFuc3BhcmVudCBodWdlcGFnZXMgKi9cbitcbiAjZGVmaW5lIE1BRFZfR1VBUkRfSU5TVEFMTCAxMDJcdFx0LyogZmF0YWwgc2lnbmFsIG9uIGFjY2VzcyB0byByYW5nZSAqL1xuICNkZWZpbmUgTUFEVl9HVUFSRF9SRU1PVkUgMTAzXHRcdC8qIHVuZ3VhcmQgcmFuZ2UgKi9cbiBcbmRpZmYgLS1naXQgYS9tbS9NYWtlZmlsZSBiL21tL01ha2VmaWxlXG5pbmRleCBlZmY5ZjllN2UwNjFjMS4uZmQ3NGE3MzkyZTM0NjcgMTAwNjQ0XG4tLS0gYS9tbS9NYWtlZmlsZVxuKysrIGIvbW0vTWFrZWZpbGVcbkBAIC05OCw3ICs5OCw3IEBAIG9iai0kKENPTkZJR19NRU1URVNUKVx0XHQrPSBtZW10ZXN0Lm9cbiBvYmotJChDT05GSUdfTUlHUkFUSU9OKSArPSBtaWdyYXRlLm9cbiBvYmotJChDT05GSUdfTlVNQSkgKz0gbWVtb3J5LXRpZXJzLm9cbiBvYmotJChDT05GSUdfREVWSUNFX01JR1JBVElPTikgKz0gbWlncmF0ZV9kZXZpY2Uub1xuLW9iai0kKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgKz0gaHVnZV9tZW1vcnkubyBraHVnZXBhZ2VkLm9cbitvYmotJChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpICs9IGh1Z2VfbWVtb3J5Lm8ga2h1Z2VwYWdlZC5vIHJlc2VydmVkX3RocC5vXG4gb2JqLSQoQ09ORklHX1BBR0VfQ09VTlRFUikgKz0gcGFnZV9jb3VudGVyLm9cbiBvYmotJChDT05GSUdfTElWRVVQREFURV9NRU1GRCkgKz0gbWVtZmRfbHVvLm9cbiBvYmotJChDT05GSUdfTUVNQ0dfVjEpICs9IG1lbWNvbnRyb2wtdjEub1xuZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jXG5pbmRleCAyYmNjYjBhNTNhMGE2MC4uNjZkODVhMmZhODU1ZjMgMTAwNjQ0XG4tLS0gYS9tbS9odWdlX21lbW9yeS5jXG4rKysgYi9tbS9odWdlX21lbW9yeS5jXG5AQCAtMTI2Nyw2ICsxMjY3LDkgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0Y29uc3QgaW50IG9yZGVyID0gSFBBR0VfUE1EX09SREVSO1xuIFx0c3RydWN0IGZvbGlvICpmb2xpbztcbiBcbitcdGlmICh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1JFU0VSVkVEX1RIUClcbitcdFx0Z2ZwIHw9IF9fR0ZQX1JFU0VSVkVEX1RIUDtcbitcbiBcdGZvbGlvID0gdm1hX2FsbG9jX2ZvbGlvKGdmcCwgb3JkZXIsIHZtYSwgYWRkciBcdTAwMjYgSFBBR0VfUE1EX01BU0spO1xuIFxuIFx0aWYgKHVubGlrZWx5KCFmb2xpbykpIHtcbkBAIC0xMzQ0LDggKzEzNDcsMTEgQEAgc3RhdGljIHZtX2ZhdWx0X3QgX19kb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbiBcdHZtX2ZhdWx0X3QgcmV0ID0gMDtcbiBcbiBcdGZvbGlvID0gdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kKHZtYSwgdm1mLVx1MDAzZWFkZHJlc3MpO1xuLVx0aWYgKHVubGlrZWx5KCFmb2xpbykpXG4rXHRpZiAodW5saWtlbHkoIWZvbGlvKSkge1xuK1x0XHRpZiAodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9SRVNFUlZFRF9USFApXG4rXHRcdFx0cmV0dXJuIFZNX0ZBVUxUX09PTTtcbiBcdFx0cmV0dXJuIFZNX0ZBVUxUX0ZBTExCQUNLO1xuK1x0fVxuIFxuIFx0cGd0YWJsZSA9IHB0ZV9hbGxvY19vbmUodm1hLVx1MDAzZXZtX21tKTtcbiBcdGlmICh1bmxpa2VseSghcGd0YWJsZSkpIHtcbkBAIC0xNDgwLDE1ICsxNDg2LDE3IEBAIHZtX2ZhdWx0X3QgZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4gXHR2bV9mYXVsdF90IHJldDtcbiBcbiBcdGlmICghdGhwX3ZtYV9zdWl0YWJsZV9vcmRlcih2bWEsIGhhZGRyLCBQTURfT1JERVIpKVxuLVx0XHRyZXR1cm4gVk1fRkFVTFRfRkFMTEJBQ0s7XG4rXHRcdHJldHVybiAodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9SRVNFUlZFRF9USFApID8gVk1fRkFVTFRfT09NIDpcbitcdFx0XHRcdFx0XHRcdCAgIFZNX0ZBVUxUX0ZBTExCQUNLO1xuIFx0cmV0ID0gdm1mX2Fub25fcHJlcGFyZSh2bWYpO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcdGtodWdlcGFnZWRfZW50ZXJfdm1hKHZtYSwgdm1hLVx1MDAzZXZtX2ZsYWdzKTtcbiBcbi1cdGlmICghKHZtZi1cdTAwM2VmbGFncyBcdTAwMjYgRkFVTFRfRkxBR19XUklURSkgXHUwMDI2XHUwMDI2XG4tXHRcdFx0IW1tX2ZvcmJpZHNfemVyb3BhZ2Uodm1hLVx1MDAzZXZtX21tKSBcdTAwMjZcdTAwMjZcbi1cdFx0XHR0cmFuc3BhcmVudF9odWdlcGFnZV91c2VfemVyb19wYWdlKCkpIHtcbitcdGlmICghKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fUkVTRVJWRURfVEhQKSBcdTAwMjZcdTAwMjZcbitcdCAgICAhKHZtZi1cdTAwM2VmbGFncyBcdTAwMjYgRkFVTFRfRkxBR19XUklURSkgXHUwMDI2XHUwMDI2XG4rXHQgICAgIW1tX2ZvcmJpZHNfemVyb3BhZ2Uodm1hLVx1MDAzZXZtX21tKSBcdTAwMjZcdTAwMjZcbitcdCAgICB0cmFuc3BhcmVudF9odWdlcGFnZV91c2VfemVyb19wYWdlKCkpIHtcbiBcdFx0cGd0YWJsZV90IHBndGFibGU7XG4gXHRcdHN0cnVjdCBmb2xpbyAqemVyb19mb2xpbztcbiBcdFx0dm1fZmF1bHRfdCByZXQ7XG5kaWZmIC0tZ2l0IGEvbW0vaW50ZXJuYWwuaCBiL21tL2ludGVybmFsLmhcbmluZGV4IDE4MWU3OWYxZDZhMjA3Li40YjJhMTNkMzUzNzcyMSAxMDA2NDRcbi0tLSBhL21tL2ludGVybmFsLmhcbisrKyBiL21tL2ludGVybmFsLmhcbkBAIC0xNDc3LDYgKzE0NzcsNyBAQCB1bnNpZ25lZCBpbnQgcmVjbGFpbV9jbGVhbl9wYWdlc19mcm9tX2xpc3Qoc3RydWN0IHpvbmUgKnpvbmUsXG4gI2RlZmluZSBBTExPQ19ISUdIQVRPTUlDXHQweDIwMCAvKiBBbGxvd3MgYWNjZXNzIHRvIE1JR1JBVEVfSElHSEFUT01JQyAqL1xuICNkZWZpbmUgQUxMT0NfVFJZTE9DS1x0XHQweDQwMCAvKiBPbmx5IHVzZSBzcGluX3RyeWxvY2sgaW4gYWxsb2NhdGlvbiBwYXRoICovXG4gI2RlZmluZSBBTExPQ19LU1dBUERcdFx0MHg4MDAgLyogYWxsb3cgd2FraW5nIG9mIGtzd2FwZCwgX19HRlBfS1NXQVBEX1JFQ0xBSU0gc2V0ICovXG4rI2RlZmluZSBBTExPQ19SRVNFUlZFRF9USFBcdDB4MTAwMCAvKiBBbGxvd3MgYWNjZXNzIHRvIHJlc2VydmVkIFRIUCBwYWdlYmxvY2tzICovXG4gXG4gLyogRmxhZ3MgdGhhdCBhbGxvdyBhbGxvY2F0aW9ucyBiZWxvdyB0aGUgbWluIHdhdGVybWFyay4gKi9cbiAjZGVmaW5lIEFMTE9DX1JFU0VSVkVTIChBTExPQ19OT05fQkxPQ0t8QUxMT0NfTUlOX1JFU0VSVkV8QUxMT0NfSElHSEFUT01JQ3xBTExPQ19PT00pXG5AQCAtMTk1MSw0ICsxOTUyLDkgQEAgc3RhdGljIGlubGluZSBpbnQgZ2V0X3N5c2N0bF9tYXhfbWFwX2NvdW50KHZvaWQpXG4gYm9vbCBtYXlfZXhwYW5kX3ZtKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzLFxuIFx0XHQgICB1bnNpZ25lZCBsb25nIG5wYWdlcyk7XG4gXG4rdW5zaWduZWQgbG9uZyByZXNlcnZlZF90aHBfcGFnZWJsb2Nrcyh1bnNpZ25lZCBsb25nIG5yX2hwYWdlcyk7XG4rdW5zaWduZWQgbG9uZyByZXNlcnZlZF90aHBfaHBhZ2VfbnIodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpO1xuK2ludCByZXNlcnZlZF90aHBfY2hhcmdlKHVuc2lnbmVkIGxvbmcgbnJfaHBhZ2VzKTtcbit2b2lkIHJlc2VydmVkX3RocF91bmNoYXJnZSh1bnNpZ25lZCBsb25nIG5yX2hwYWdlcyk7XG4rXG4gI2VuZGlmXHQvKiBfX01NX0lOVEVSTkFMX0ggKi9cbmRpZmYgLS1naXQgYS9tbS9raHVnZXBhZ2VkLmMgYi9tbS9raHVnZXBhZ2VkLmNcbmluZGV4IDYxN2JjYTc2ZGI0OWI2Li44MDI5M2U4YzFlNGU3NiAxMDA2NDRcbi0tLSBhL21tL2todWdlcGFnZWQuY1xuKysrIGIvbW0va2h1Z2VwYWdlZC5jXG5AQCAtNDUxLDYgKzQ1MSw3IEBAIGludCBodWdlcGFnZV9tYWR2aXNlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0c3dpdGNoIChhZHZpY2UpIHtcbiBcdGNhc2UgTUFEVl9IVUdFUEFHRTpcbiBcdFx0KnZtX2ZsYWdzIFx1MDAyNj0gflZNX05PSFVHRVBBR0U7XG4rXHRcdCp2bV9mbGFncyBcdTAwMjY9IH5WTV9SRVNFUlZFRF9USFA7XG4gXHRcdCp2bV9mbGFncyB8PSBWTV9IVUdFUEFHRTtcbiBcdFx0LypcbiBcdFx0ICogSWYgdGhlIHZtYSBiZWNvbWUgZ29vZCBmb3Iga2h1Z2VwYWdlZCB0byBzY2FuLFxuQEAgLTQ2MSw2ICs0NjIsNyBAQCBpbnQgaHVnZXBhZ2VfbWFkdmlzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIE1BRFZfTk9IVUdFUEFHRTpcbiBcdFx0KnZtX2ZsYWdzIFx1MDAyNj0gflZNX0hVR0VQQUdFO1xuK1x0XHQqdm1fZmxhZ3MgXHUwMDI2PSB+Vk1fUkVTRVJWRURfVEhQO1xuIFx0XHQqdm1fZmxhZ3MgfD0gVk1fTk9IVUdFUEFHRTtcbiBcdFx0LypcbiBcdFx0ICogU2V0dGluZyBWTV9OT0hVR0VQQUdFIHdpbGwgcHJldmVudCBraHVnZXBhZ2VkIGZyb20gc2Nhbm5pbmdcbkBAIC00NjgsNiArNDcwLDEyIEBAIGludCBodWdlcGFnZV9tYWR2aXNlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHQgKiBpdCBnb3QgcmVnaXN0ZXJlZCBiZWZvcmUgVk1fTk9IVUdFUEFHRSB3YXMgc2V0LlxuIFx0XHQgKi9cbiBcdFx0YnJlYWs7XG4rXHRjYXNlIE1BRFZfUkVTRVJWRURfVEhQOlxuK1x0XHQqdm1fZmxhZ3MgXHUwMDI2PSB+KFZNX0hVR0VQQUdFIHwgVk1fTk9IVUdFUEFHRSk7XG4rXHRcdCp2bV9mbGFncyB8PSBWTV9SRVNFUlZFRF9USFA7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4gXHRyZXR1cm4gMDtcbmRpZmYgLS1naXQgYS9tbS9tYWR2aXNlLmMgYi9tbS9tYWR2aXNlLmNcbmluZGV4IGNkOWJiMDc3MDcyY2NiLi5kZDkxMTA1ZGI2OGM3NSAxMDA2NDRcbi0tLSBhL21tL21hZHZpc2UuY1xuKysrIGIvbW0vbWFkdmlzZS5jXG5AQCAtMTMsNiArMTMsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhZ2UtaXNvbGF0aW9uLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdlX2lkbGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VzZXJmYXVsdGZkX2suaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2h1Z2VfbW0uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2h1Z2V0bGIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZhbGxvYy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZmFkdmlzZS5oXHUwMDNlXG5AQCAtMTMzMSw2ICsxMzMyLDY1IEBAIHN0YXRpYyBib29sIGNhbl9tYWR2aXNlX21vZGlmeShzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcbiB9XG4gI2VuZGlmXG4gXG4rc3RhdGljIGJvb2wgcmVzZXJ2ZWRfdGhwX21hZHZpc2VfYWxpZ25lZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbitcdFx0XHRcdFx0IHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yX3JhbmdlICpyYW5nZSlcbit7XG4rXHRpZiAoISh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1JFU0VSVkVEX1RIUCkpXG4rXHRcdHJldHVybiB0cnVlO1xuK1xuK1x0cmV0dXJuIElTX0FMSUdORUQocmFuZ2UtXHUwMDNlc3RhcnQsIEhQQUdFX1BNRF9TSVpFKSBcdTAwMjZcdTAwMjZcbitcdCAgICAgICBJU19BTElHTkVEKHJhbmdlLVx1MDAzZWVuZCwgSFBBR0VfUE1EX1NJWkUpO1xuK31cbitcbitzdGF0aWMgaW50IG1hZHZpc2VfaHVnZXBhZ2VfcG9saWN5KHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yLFxuK1x0XHRcdFx0ICAgdm1fZmxhZ3NfdCAqbmV3X2ZsYWdzLFxuK1x0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyAqcmVzZXJ2ZWRfaHBhZ2VzLFxuK1x0XHRcdFx0ICAgYm9vbCAqY2hhcmdlX3Jlc2VydmVkX3RocCxcbitcdFx0XHRcdCAgIGJvb2wgKnVuY2hhcmdlX3Jlc2VydmVkX3RocClcbit7XG4rXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IG1hZHZfYmVoYXZpb3ItXHUwMDNldm1hO1xuK1x0c3RydWN0IG1hZHZpc2VfYmVoYXZpb3JfcmFuZ2UgKnJhbmdlID0gXHUwMDI2bWFkdl9iZWhhdmlvci1cdTAwM2VyYW5nZTtcbitcdHVuc2lnbmVkIGxvbmcgaHBhZ2VzO1xuK1x0aW50IGJlaGF2aW9yID0gbWFkdl9iZWhhdmlvci1cdTAwM2ViZWhhdmlvcjtcbitcdGludCBlcnJvcjtcbitcbitcdHN3aXRjaCAoYmVoYXZpb3IpIHtcbitcdGNhc2UgTUFEVl9IVUdFUEFHRTpcbitcdGNhc2UgTUFEVl9OT0hVR0VQQUdFOlxuK1x0XHRlcnJvciA9IGh1Z2VwYWdlX21hZHZpc2Uodm1hLCBuZXdfZmxhZ3MsIGJlaGF2aW9yKTtcbitcdFx0aWYgKGVycm9yKVxuK1x0XHRcdHJldHVybiBlcnJvcjtcbitcdFx0KnVuY2hhcmdlX3Jlc2VydmVkX3RocCA9ICh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1JFU0VSVkVEX1RIUCkgXHUwMDI2XHUwMDI2XG4rXHRcdFx0XHRcdCAhKCpuZXdfZmxhZ3MgXHUwMDI2IFZNX1JFU0VSVkVEX1RIUCk7XG4rXHRcdHJldHVybiAwO1xuK1x0Y2FzZSBNQURWX1JFU0VSVkVEX1RIUDpcbitcdFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR182NEJJVCkpXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdGlmICghdm1hX2lzX2Fub255bW91cyh2bWEpIHx8ICgqbmV3X2ZsYWdzIFx1MDAyNiBWTV9TSEFSRUQpIHx8XG4rXHRcdCAgICAoKm5ld19mbGFncyBcdTAwMjYgVk1fU1BFQ0lBTCkpXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdGlmICghSVNfQUxJR05FRChyYW5nZS1cdTAwM2VzdGFydCwgSFBBR0VfUE1EX1NJWkUpIHx8XG4rXHRcdCAgICAhSVNfQUxJR05FRChyYW5nZS1cdTAwM2VlbmQsIEhQQUdFX1BNRF9TSVpFKSlcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdFx0ZXJyb3IgPSBodWdlcGFnZV9tYWR2aXNlKHZtYSwgbmV3X2ZsYWdzLCBiZWhhdmlvcik7XG4rXHRcdGlmIChlcnJvcilcbitcdFx0XHRyZXR1cm4gZXJyb3I7XG4rXG4rXHRcdGlmICghKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fUkVTRVJWRURfVEhQKSkge1xuK1x0XHRcdGhwYWdlcyA9IHJlc2VydmVkX3RocF9ocGFnZV9ucihyYW5nZS1cdTAwM2VzdGFydCwgcmFuZ2UtXHUwMDNlZW5kKTtcbitcdFx0XHRlcnJvciA9IHJlc2VydmVkX3RocF9jaGFyZ2UoaHBhZ2VzKTtcbitcdFx0XHRpZiAoZXJyb3IpXG4rXHRcdFx0XHRyZXR1cm4gZXJyb3I7XG4rXHRcdFx0KnJlc2VydmVkX2hwYWdlcyA9IGhwYWdlcztcbitcdFx0XHQqY2hhcmdlX3Jlc2VydmVkX3RocCA9IHRydWU7XG4rXHRcdH1cbitcdFx0cmV0dXJuIDA7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbit9XG4rXG4gLypcbiAgKiBBcHBseSBhbiBtYWR2aXNlIGJlaGF2aW9yIHRvIGEgcmVnaW9uIG9mIGEgdm1hLiAgbWFkdmlzZV91cGRhdGVfdm1hXG4gICogd2lsbCBoYW5kbGUgc3BsaXR0aW5nIGEgdm0gYXJlYSBpbnRvIHNlcGFyYXRlIGFyZWFzLCBlYWNoIGFyZWEgd2l0aCBpdHMgb3duXG5AQCAtMTM0Miw2ICsxNDAyLDkgQEAgc3RhdGljIGludCBtYWR2aXNlX3ZtYV9iZWhhdmlvcihzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcbiBcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gbWFkdl9iZWhhdmlvci1cdTAwM2V2bWE7XG4gXHR2bV9mbGFnc190IG5ld19mbGFncyA9IHZtYS1cdTAwM2V2bV9mbGFncztcbiBcdHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yX3JhbmdlICpyYW5nZSA9IFx1MDAyNm1hZHZfYmVoYXZpb3ItXHUwMDNlcmFuZ2U7XG4rXHR1bnNpZ25lZCBsb25nIHJlc2VydmVkX2hwYWdlcyA9IDA7XG4rXHRib29sIGNoYXJnZV9yZXNlcnZlZF90aHAgPSBmYWxzZTtcbitcdGJvb2wgdW5jaGFyZ2VfcmVzZXJ2ZWRfdGhwID0gZmFsc2U7XG4gXHRpbnQgZXJyb3I7XG4gXG4gXHRpZiAodW5saWtlbHkoIWNhbl9tYWR2aXNlX21vZGlmeShtYWR2X2JlaGF2aW9yKSkpXG5AQCAtMTM1MywxNCArMTQxNiwyMiBAQCBzdGF0aWMgaW50IG1hZHZpc2Vfdm1hX2JlaGF2aW9yKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxuIFx0Y2FzZSBNQURWX1dJTExORUVEOlxuIFx0XHRyZXR1cm4gbWFkdmlzZV93aWxsbmVlZChtYWR2X2JlaGF2aW9yKTtcbiBcdGNhc2UgTUFEVl9DT0xEOlxuK1x0XHRpZiAoIXJlc2VydmVkX3RocF9tYWR2aXNlX2FsaWduZWQodm1hLCByYW5nZSkpXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdHJldHVybiBtYWR2aXNlX2NvbGQobWFkdl9iZWhhdmlvcik7XG4gXHRjYXNlIE1BRFZfUEFHRU9VVDpcbitcdFx0aWYgKCFyZXNlcnZlZF90aHBfbWFkdmlzZV9hbGlnbmVkKHZtYSwgcmFuZ2UpKVxuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHRyZXR1cm4gbWFkdmlzZV9wYWdlb3V0KG1hZHZfYmVoYXZpb3IpO1xuIFx0Y2FzZSBNQURWX0ZSRUU6XG4gXHRjYXNlIE1BRFZfRE9OVE5FRUQ6XG4gXHRjYXNlIE1BRFZfRE9OVE5FRURfTE9DS0VEOlxuK1x0XHRpZiAoIXJlc2VydmVkX3RocF9tYWR2aXNlX2FsaWduZWQodm1hLCByYW5nZSkpXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdHJldHVybiBtYWR2aXNlX2RvbnRuZWVkX2ZyZWUobWFkdl9iZWhhdmlvcik7XG4gXHRjYXNlIE1BRFZfQ09MTEFQU0U6XG4rXHRcdGlmICh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1JFU0VSVkVEX1RIUClcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0cmV0dXJuIG1hZHZpc2VfY29sbGFwc2Uodm1hLCByYW5nZS1cdTAwM2VzdGFydCwgcmFuZ2UtXHUwMDNlZW5kLFxuIFx0XHRcdFx1MDAyNm1hZHZfYmVoYXZpb3ItXHUwMDNlbG9ja19kcm9wcGVkKTtcbiBcdGNhc2UgTUFEVl9HVUFSRF9JTlNUQUxMOlxuQEAgLTE0MTYsNyArMTQ4NywxMSBAQCBzdGF0aWMgaW50IG1hZHZpc2Vfdm1hX2JlaGF2aW9yKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxuIFx0XHRicmVhaztcbiBcdGNhc2UgTUFEVl9IVUdFUEFHRTpcbiBcdGNhc2UgTUFEVl9OT0hVR0VQQUdFOlxuLVx0XHRlcnJvciA9IGh1Z2VwYWdlX21hZHZpc2Uodm1hLCBcdTAwMjZuZXdfZmxhZ3MsIGJlaGF2aW9yKTtcbitcdGNhc2UgTUFEVl9SRVNFUlZFRF9USFA6XG4rXHRcdGVycm9yID0gbWFkdmlzZV9odWdlcGFnZV9wb2xpY3kobWFkdl9iZWhhdmlvciwgXHUwMDI2bmV3X2ZsYWdzLFxuK1x0XHRcdFx0XHRcdFx1MDAyNnJlc2VydmVkX2hwYWdlcyxcbitcdFx0XHRcdFx0XHRcdTAwMjZjaGFyZ2VfcmVzZXJ2ZWRfdGhwLFxuK1x0XHRcdFx0XHRcdFx1MDAyNnVuY2hhcmdlX3Jlc2VydmVkX3RocCk7XG4gXHRcdGlmIChlcnJvcilcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0YnJlYWs7XG5AQCAtMTQzMSw2ICsxNTA2LDExIEBAIHN0YXRpYyBpbnQgbWFkdmlzZV92bWFfYmVoYXZpb3Ioc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXG4gXHRWTV9XQVJOX09OX09OQ0UobWFkdl9iZWhhdmlvci1cdTAwM2Vsb2NrX21vZGUgIT0gTUFEVklTRV9NTUFQX1dSSVRFX0xPQ0spO1xuIFxuIFx0ZXJyb3IgPSBtYWR2aXNlX3VwZGF0ZV92bWEobmV3X2ZsYWdzLCBtYWR2X2JlaGF2aW9yKTtcbitcdGlmIChlcnJvciBcdTAwMjZcdTAwMjYgY2hhcmdlX3Jlc2VydmVkX3RocClcbitcdFx0cmVzZXJ2ZWRfdGhwX3VuY2hhcmdlKHJlc2VydmVkX2hwYWdlcyk7XG4rXHRlbHNlIGlmICghZXJyb3IgXHUwMDI2XHUwMDI2IHVuY2hhcmdlX3Jlc2VydmVkX3RocClcbitcdFx0cmVzZXJ2ZWRfdGhwX3VuY2hhcmdlKHJlc2VydmVkX3RocF9ocGFnZV9ucihyYW5nZS1cdTAwM2VzdGFydCxcbitcdFx0XHRcdFx0XHRcdCAgICByYW5nZS1cdTAwM2VlbmQpKTtcbiBvdXQ6XG4gXHQvKlxuIFx0ICogbWFkdmlzZSgpIHJldHVybnMgRUFHQUlOIGlmIGtlcm5lbCByZXNvdXJjZXMsIHN1Y2ggYXNcbkBAIC0xNTQxLDYgKzE2MjEsNyBAQCBtYWR2aXNlX2JlaGF2aW9yX3ZhbGlkKGludCBiZWhhdmlvcilcbiBcdGNhc2UgTUFEVl9IVUdFUEFHRTpcbiBcdGNhc2UgTUFEVl9OT0hVR0VQQUdFOlxuIFx0Y2FzZSBNQURWX0NPTExBUFNFOlxuK1x0Y2FzZSBNQURWX1JFU0VSVkVEX1RIUDpcbiAjZW5kaWZcbiBcdGNhc2UgTUFEVl9ET05URFVNUDpcbiBcdGNhc2UgTUFEVl9ET0RVTVA6XG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuY1xuaW5kZXggZmYzMzhjMmFiZTkyMzEuLjIyNWZjMWFlMjIzODZkIDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LmNcbisrKyBiL21tL21lbW9yeS5jXG5AQCAtNTI5Nyw2ICs1Mjk3LDkgQEAgc3RhdGljIHZtX2ZhdWx0X3QgZG9fYW5vbnltb3VzX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4gXHRpZiAodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9TSEFSRUQpXG4gXHRcdHJldHVybiBWTV9GQVVMVF9TSUdCVVM7XG4gXG4rXHRpZiAodW5saWtlbHkodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9SRVNFUlZFRF9USFApKVxuK1x0XHRyZXR1cm4gVk1fRkFVTFRfT09NO1xuK1xuIFx0LypcbiBcdCAqIFVzZSBwdGVfYWxsb2MoKSBpbnN0ZWFkIG9mIHB0ZV9hbGxvY19tYXAoKSwgc28gdGhhdCBPT00gY2FuXG4gXHQgKiBiZSBkaXN0aW5ndWlzaGVkIGZyb20gYSB0cmFuc2llbnQgZmFpbHVyZSBvZiBwdGVfb2Zmc2V0X21hcCgpLlxuZGlmZiAtLWdpdCBhL21tL21tYXAuYyBiL21tL21tYXAuY1xuaW5kZXggMjMxMWFlN2MyZmY0NWMuLjQ4MThiMTRlYzBmZjZjIDEwMDY0NFxuLS0tIGEvbW0vbW1hcC5jXG4rKysgYi9tbS9tbWFwLmNcbkBAIC0xMjUxLDYgKzEyNTEsNyBAQCB1bnNpZ25lZCBsb25nIHRlYXJfZG93bl92bWFzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWksXG4gXHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGVuZClcbiB7XG4gXHR1bnNpZ25lZCBsb25nIG5yX2FjY291bnRlZCA9IDA7XG4rXHR1bnNpZ25lZCBsb25nIG5yX3Jlc2VydmVkX3RocCA9IDA7XG4gXHRpbnQgY291bnQgPSAwO1xuIFxuIFx0bW1hcF9hc3NlcnRfd3JpdGVfbG9ja2VkKG1tKTtcbkBAIC0xMjU4LDYgKzEyNTksMTAgQEAgdW5zaWduZWQgbG9uZyB0ZWFyX2Rvd25fdm1hcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHZtYV9pdGVyYXRvciAqdm1pLFxuIFx0ZG8ge1xuIFx0XHRpZiAodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9BQ0NPVU5UKVxuIFx0XHRcdG5yX2FjY291bnRlZCArPSB2bWFfcGFnZXModm1hKTtcbitcdFx0aWYgKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fUkVTRVJWRURfVEhQKVxuK1x0XHRcdG5yX3Jlc2VydmVkX3RocCArPVxuK1x0XHRcdFx0cmVzZXJ2ZWRfdGhwX2hwYWdlX25yKHZtYS1cdTAwM2V2bV9zdGFydCxcbitcdFx0XHRcdFx0XHQgICAgICB2bWEtXHUwMDNldm1fZW5kKTtcbiBcdFx0dm1hX21hcmtfZGV0YWNoZWQodm1hKTtcbiBcdFx0cmVtb3ZlX3ZtYSh2bWEpO1xuIFx0XHRjb3VudCsrO1xuQEAgLTEyNjYsNiArMTI3MSw3IEBAIHVuc2lnbmVkIGxvbmcgdGVhcl9kb3duX3ZtYXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSxcbiBcdH0gd2hpbGUgKHZtYSBcdTAwMjZcdTAwMjYgdm1hLVx1MDAzZXZtX2VuZCBcdTAwM2M9IGVuZCk7XG4gXG4gXHRWTV9XQVJOX09OX09OQ0UoY291bnQgIT0gbW0tXHUwMDNlbWFwX2NvdW50KTtcbitcdHJlc2VydmVkX3RocF91bmNoYXJnZShucl9yZXNlcnZlZF90aHApO1xuIFx0cmV0dXJuIG5yX2FjY291bnRlZDtcbiB9XG4gXG5AQCAtMTczMyw2ICsxNzM5LDcgQEAgX19sYXRlbnRfZW50cm9weSBpbnQgZHVwX21tYXAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm9sZG1tKVxuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICptcG50LCAqdG1wO1xuIFx0aW50IHJldHZhbDtcbiBcdHVuc2lnbmVkIGxvbmcgY2hhcmdlID0gMDtcbitcdHVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWRfY2hhcmdlID0gMDtcbiBcdExJU1RfSEVBRCh1Zik7XG4gXHRWTUFfSVRFUkFUT1Iodm1pLCBtbSwgMCk7XG4gXG5AQCAtMTc3NSw2ICsxNzgyLDcgQEAgX19sYXRlbnRfZW50cm9weSBpbnQgZHVwX21tYXAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm9sZG1tKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXHRcdGNoYXJnZSA9IDA7XG4rXHRcdHJlc2VydmVkX2NoYXJnZSA9IDA7XG4gXHRcdGlmIChtcG50LVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9BQ0NPVU5UKSB7XG4gXHRcdFx0dW5zaWduZWQgbG9uZyBsZW4gPSB2bWFfcGFnZXMobXBudCk7XG4gXG5AQCAtMTc4Miw2ICsxNzkwLDE1IEBAIF9fbGF0ZW50X2VudHJvcHkgaW50IGR1cF9tbWFwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgbW1fc3RydWN0ICpvbGRtbSlcbiBcdFx0XHRcdGdvdG8gZmFpbF9ub21lbTtcbiBcdFx0XHRjaGFyZ2UgPSBsZW47XG4gXHRcdH1cbitcdFx0aWYgKG1wbnQtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1JFU0VSVkVEX1RIUCkge1xuK1x0XHRcdHVuc2lnbmVkIGxvbmcgbGVuO1xuK1xuK1x0XHRcdGxlbiA9IHJlc2VydmVkX3RocF9ocGFnZV9ucihtcG50LVx1MDAzZXZtX3N0YXJ0LFxuK1x0XHRcdFx0XHRcdCAgICBtcG50LVx1MDAzZXZtX2VuZCk7XG4rXHRcdFx0aWYgKHJlc2VydmVkX3RocF9jaGFyZ2UobGVuKSlcbitcdFx0XHRcdGdvdG8gZmFpbF9ub21lbTtcbitcdFx0XHRyZXNlcnZlZF9jaGFyZ2UgPSBsZW47XG4rXHRcdH1cbiBcbiBcdFx0dG1wID0gdm1fYXJlYV9kdXAobXBudCk7XG4gXHRcdGlmICghdG1wKVxuQEAgLTE5MTYsNiArMTkzMyw3IEBAIF9fbGF0ZW50X2VudHJvcHkgaW50IGR1cF9tbWFwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgbW1fc3RydWN0ICpvbGRtbSlcbiBcdHZtX2FyZWFfZnJlZSh0bXApO1xuIGZhaWxfbm9tZW06XG4gXHRyZXR2YWwgPSAtRU5PTUVNO1xuK1x0cmVzZXJ2ZWRfdGhwX3VuY2hhcmdlKHJlc2VydmVkX2NoYXJnZSk7XG4gXHR2bV91bmFjY3RfbWVtb3J5KGNoYXJnZSk7XG4gXHRnb3RvIGxvb3Bfb3V0O1xuIH1cbmRpZmYgLS1naXQgYS9tbS9tcmVtYXAuYyBiL21tL21yZW1hcC5jXG5pbmRleCBlOWM4YjFkMDU4MzJiZS4uYWUzN2UwYjNjZTc4OGUgMTAwNjQ0XG4tLS0gYS9tbS9tcmVtYXAuY1xuKysrIGIvbW0vbXJlbWFwLmNcbkBAIC0yNCw2ICsyNCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW11X25vdGlmaWVyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91YWNjZXNzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91c2VyZmF1bHRmZF9rLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9odWdlX21tLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1wb2xpY3kuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BnYWxsb2MuaFx1MDAzZVxuIFxuQEAgLTY5LDYgKzcwLDcgQEAgc3RydWN0IHZtYV9yZW1hcF9zdHJ1Y3Qge1xuIFx0ZW51bSBtcmVtYXBfdHlwZSByZW1hcF90eXBlO1x0LyogZXhwYW5kLCBzaHJpbmssIGV0Yy4gKi9cbiBcdGJvb2wgbW1hcF9sb2NrZWQ7XHRcdC8qIElzIG1tIGN1cnJlbnRseSB3cml0ZS1sb2NrZWQ/ICovXG4gXHR1bnNpZ25lZCBsb25nIGNoYXJnZWQ7XHRcdC8qIElmIFZNX0FDQ09VTlQsICMgcGFnZXMgdG8gYWNjb3VudC4gKi9cbitcdHVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWRfdGhwX2NoYXJnZWQ7IC8qIElmIFZNX1JFU0VSVkVEX1RIUCwgIyBocGFnZXMuICovXG4gXHRib29sIHZtaV9uZWVkc19pbnZhbGlkYXRlO1x0LyogSXMgdGhlIFZNQSBpdGVyYXRvciBpbnZhbGlkYXRlZD8gKi9cbiB9O1xuIFxuQEAgLTk2Miw2ICs5NjQsOSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyB2cm1fc2V0X25ld19hZGRyKHN0cnVjdCB2bWFfcmVtYXBfc3RydWN0ICp2cm0pXG4gXHRcdFx0XHRtYXBfZmxhZ3MpO1xuIFx0aWYgKElTX0VSUl9WQUxVRShyZXMpKVxuIFx0XHRyZXR1cm4gcmVzO1xuK1x0aWYgKCh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1JFU0VSVkVEX1RIUCkgXHUwMDI2XHUwMDI2XG4rXHQgICAgIUlTX0FMSUdORUQocmVzLCBIUEFHRV9QTURfU0laRSkpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuIFx0dnJtLVx1MDAzZW5ld19hZGRyID0gcmVzO1xuIFx0cmV0dXJuIDA7XG5AQCAtOTc3LDI0ICs5ODIsNDQgQEAgc3RhdGljIGJvb2wgdnJtX2NhbGNfY2hhcmdlKHN0cnVjdCB2bWFfcmVtYXBfc3RydWN0ICp2cm0pXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBjaGFyZ2VkO1xuIFxuLVx0aWYgKCEodnJtLVx1MDAzZXZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fQUNDT1VOVCkpXG4tXHRcdHJldHVybiB0cnVlO1xuK1x0dnJtLVx1MDAzZWNoYXJnZWQgPSAwO1xuK1x0dnJtLVx1MDAzZXJlc2VydmVkX3RocF9jaGFyZ2VkID0gMDtcbiBcbi1cdC8qXG4tXHQgKiBJZiB3ZSBkb24ndCB1bm1hcCB0aGUgb2xkIG1hcHBpbmcsIHRoZW4gd2UgYWNjb3VudCB0aGUgZW50aXJldHkgb2Zcbi1cdCAqIHRoZSBsZW5ndGggb2YgdGhlIG5ldyBvbmUuIE90aGVyd2lzZSBpdCdzIGp1c3QgdGhlIGRlbHRhIGluIHNpemUuXG4tXHQgKi9cbi1cdGlmICh2cm0tXHUwMDNlZmxhZ3MgXHUwMDI2IE1SRU1BUF9ET05UVU5NQVApXG4tXHRcdGNoYXJnZWQgPSB2cm0tXHUwMDNlbmV3X2xlbiBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbi1cdGVsc2Vcbi1cdFx0Y2hhcmdlZCA9IHZybS1cdTAwM2VkZWx0YSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbitcdGlmICh2cm0tXHUwMDNldm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9BQ0NPVU5UKSB7XG4rXHRcdC8qXG4rXHRcdCAqIElmIHdlIGRvbid0IHVubWFwIHRoZSBvbGQgbWFwcGluZywgdGhlbiB3ZSBhY2NvdW50IHRoZVxuK1x0XHQgKiBlbnRpcmV0eSBvZiB0aGUgbGVuZ3RoIG9mIHRoZSBuZXcgb25lLiBPdGhlcndpc2UgaXQncyBqdXN0XG4rXHRcdCAqIHRoZSBkZWx0YSBpbiBzaXplLlxuK1x0XHQgKi9cbitcdFx0aWYgKHZybS1cdTAwM2VmbGFncyBcdTAwMjYgTVJFTUFQX0RPTlRVTk1BUClcbitcdFx0XHRjaGFyZ2VkID0gdnJtLVx1MDAzZW5ld19sZW4gXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4rXHRcdGVsc2VcbitcdFx0XHRjaGFyZ2VkID0gdnJtLVx1MDAzZWRlbHRhIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuIFxuIFxuLVx0LyogVGhpcyBhY2NvdW50cyAnY2hhcmdlZCcgcGFnZXMgb2YgbWVtb3J5LiAqL1xuLVx0aWYgKHNlY3VyaXR5X3ZtX2Vub3VnaF9tZW1vcnlfbW0oY3VycmVudC1cdTAwM2VtbSwgY2hhcmdlZCkpXG4tXHRcdHJldHVybiBmYWxzZTtcbitcdFx0LyogVGhpcyBhY2NvdW50cyAnY2hhcmdlZCcgcGFnZXMgb2YgbWVtb3J5LiAqL1xuK1x0XHRpZiAoc2VjdXJpdHlfdm1fZW5vdWdoX21lbW9yeV9tbShjdXJyZW50LVx1MDAzZW1tLCBjaGFyZ2VkKSlcbitcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4tXHR2cm0tXHUwMDNlY2hhcmdlZCA9IGNoYXJnZWQ7XG4rXHRcdHZybS1cdTAwM2VjaGFyZ2VkID0gY2hhcmdlZDtcbitcdH1cbitcbitcdGlmICh2cm0tXHUwMDNldm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9SRVNFUlZFRF9USFApIHtcbitcdFx0dW5zaWduZWQgbG9uZyBocGFnZXM7XG4rXG4rXHRcdGlmICh2cm0tXHUwMDNlZmxhZ3MgXHUwMDI2IE1SRU1BUF9ET05UVU5NQVApXG4rXHRcdFx0aHBhZ2VzID0gcmVzZXJ2ZWRfdGhwX2hwYWdlX25yKDAsIHZybS1cdTAwM2VuZXdfbGVuKTtcbitcdFx0ZWxzZVxuK1x0XHRcdGhwYWdlcyA9IHJlc2VydmVkX3RocF9ocGFnZV9ucigwLCB2cm0tXHUwMDNlZGVsdGEpO1xuK1xuK1x0XHRpZiAocmVzZXJ2ZWRfdGhwX2NoYXJnZShocGFnZXMpKSB7XG4rXHRcdFx0dm1fdW5hY2N0X21lbW9yeSh2cm0tXHUwMDNlY2hhcmdlZCk7XG4rXHRcdFx0dnJtLVx1MDAzZWNoYXJnZWQgPSAwO1xuK1x0XHRcdHJldHVybiBmYWxzZTtcbitcdFx0fVxuK1xuK1x0XHR2cm0tXHUwMDNlcmVzZXJ2ZWRfdGhwX2NoYXJnZWQgPSBocGFnZXM7XG4rXHR9XG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG5AQCAtMTAwNCwxMSArMTAyOSwxMCBAQCBzdGF0aWMgYm9vbCB2cm1fY2FsY19jaGFyZ2Uoc3RydWN0IHZtYV9yZW1hcF9zdHJ1Y3QgKnZybSlcbiAgKi9cbiBzdGF0aWMgdm9pZCB2cm1fdW5jaGFyZ2Uoc3RydWN0IHZtYV9yZW1hcF9zdHJ1Y3QgKnZybSlcbiB7XG4tXHRpZiAoISh2cm0tXHUwMDNldm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9BQ0NPVU5UKSlcbi1cdFx0cmV0dXJuO1xuLVxuIFx0dm1fdW5hY2N0X21lbW9yeSh2cm0tXHUwMDNlY2hhcmdlZCk7XG4gXHR2cm0tXHUwMDNlY2hhcmdlZCA9IDA7XG4rXHRyZXNlcnZlZF90aHBfdW5jaGFyZ2UodnJtLVx1MDAzZXJlc2VydmVkX3RocF9jaGFyZ2VkKTtcbitcdHZybS1cdTAwM2VyZXNlcnZlZF90aHBfY2hhcmdlZCA9IDA7XG4gfVxuIFxuIC8qXG5AQCAtMTE1Nyw4ICsxMTgxLDggQEAgc3RhdGljIHZvaWQgdW5tYXBfc291cmNlX3ZtYShzdHJ1Y3Qgdm1hX3JlbWFwX3N0cnVjdCAqdnJtKVxuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB2cm0tXHUwMDNldm1hO1xuIFx0Vk1BX0lURVJBVE9SKHZtaSwgbW0sIGFkZHIpO1xuIFx0aW50IGVycjtcbi1cdHVuc2lnbmVkIGxvbmcgdm1fc3RhcnQ7XG4tXHR1bnNpZ25lZCBsb25nIHZtX2VuZDtcbitcdHVuc2lnbmVkIGxvbmcgdm1fc3RhcnQgPSAwO1xuK1x0dW5zaWduZWQgbG9uZyB2bV9lbmQgPSAwO1xuIFx0LypcbiBcdCAqIEl0IG1pZ2h0IHNlZW0gb2RkIHRoYXQgd2UgY2hlY2sgZm9yIE1SRU1BUF9ET05UVU5NQVAgaGVyZSwgZ2l2ZW4gdGhpc1xuIFx0ICogZnVuY3Rpb24gaW1wbGllcyB0aGF0IHdlIHVubWFwIHRoZSBvcmlnaW5hbCBWTUEsIHdoaWNoIHNlZW1zXG5AQCAtMTE3MCw2ICsxMTk0LDggQEAgc3RhdGljIHZvaWQgdW5tYXBfc291cmNlX3ZtYShzdHJ1Y3Qgdm1hX3JlbWFwX3N0cnVjdCAqdnJtKVxuIFx0ICovXG4gXHRib29sIGFjY291bnRhYmxlX21vdmUgPSAodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9BQ0NPVU5UKSBcdTAwMjZcdTAwMjZcbiBcdFx0ISh2cm0tXHUwMDNlZmxhZ3MgXHUwMDI2IE1SRU1BUF9ET05UVU5NQVApO1xuK1x0Ym9vbCByZXNlcnZlZF90aHBfbW92ZSA9ICh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1JFU0VSVkVEX1RIUCkgXHUwMDI2XHUwMDI2XG4rXHRcdCEodnJtLVx1MDAzZWZsYWdzIFx1MDAyNiBNUkVNQVBfRE9OVFVOTUFQKTtcbiBcbiBcdC8qXG4gXHQgKiBTbyB3ZSBwZXJmb3JtIGEgdHJpY2sgaGVyZSB0byBwcmV2ZW50IGluY29ycmVjdCBhY2NvdW50aW5nLiBBbnkgbWVyZ2VcbkBAIC0xMTkyLDYgKzEyMTgsMTMgQEAgc3RhdGljIHZvaWQgdW5tYXBfc291cmNlX3ZtYShzdHJ1Y3Qgdm1hX3JlbWFwX3N0cnVjdCAqdnJtKVxuIFx0XHR2bV9zdGFydCA9IHZtYS1cdTAwM2V2bV9zdGFydDtcbiBcdFx0dm1fZW5kID0gdm1hLVx1MDAzZXZtX2VuZDtcbiBcdH1cbitcdGlmIChyZXNlcnZlZF90aHBfbW92ZSkge1xuK1x0XHR2bV9mbGFnc19jbGVhcih2bWEsIFZNX1JFU0VSVkVEX1RIUCk7XG4rXHRcdGlmICghYWNjb3VudGFibGVfbW92ZSkge1xuK1x0XHRcdHZtX3N0YXJ0ID0gdm1hLVx1MDAzZXZtX3N0YXJ0O1xuK1x0XHRcdHZtX2VuZCA9IHZtYS1cdTAwM2V2bV9lbmQ7XG4rXHRcdH1cbitcdH1cbiBcbiBcdGVyciA9IGRvX3ZtaV9tdW5tYXAoXHUwMDI2dm1pLCBtbSwgYWRkciwgbGVuLCB2cm0tXHUwMDNldWZfdW5tYXAsIC8qIHVubG9jaz0gKi9mYWxzZSk7XG4gXHR2cm0tXHUwMDNldm1hID0gTlVMTDsgLyogSW52YWxpZGF0ZWQuICovXG5AQCAtMTIyNywxOSArMTI2MCwyNyBAQCBzdGF0aWMgdm9pZCB1bm1hcF9zb3VyY2Vfdm1hKHN0cnVjdCB2bWFfcmVtYXBfc3RydWN0ICp2cm0pXG4gXHQgKlxuIFx0ICogZG9fdm1pX211bm1hcCgpIHdpbGwgaGF2ZSByZXN0b3JlZCB0aGUgVk1JIGJhY2sgdG8gYWRkci5cbiBcdCAqL1xuLVx0aWYgKGFjY291bnRhYmxlX21vdmUpIHtcbitcdGlmIChhY2NvdW50YWJsZV9tb3ZlIHx8IHJlc2VydmVkX3RocF9tb3ZlKSB7XG4gXHRcdHVuc2lnbmVkIGxvbmcgZW5kID0gYWRkciArIGxlbjtcbi1cbi1cdFx0aWYgKHZtX3N0YXJ0IFx1MDAzYyBhZGRyKSB7XG4tXHRcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICpwcmV2ID0gdm1hX3ByZXYoXHUwMDI2dm1pKTtcbi1cbi1cdFx0XHR2bV9mbGFnc19zZXQocHJldiwgVk1fQUNDT1VOVCk7IC8qIEFjcXVpcmVzIFZNQSBsb2NrLiAqL1xuK1x0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnByZXYgPSBOVUxMO1xuK1x0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKm5leHQgPSBOVUxMO1xuK1xuK1x0XHRpZiAodm1fc3RhcnQgXHUwMDNjIGFkZHIpXG4rXHRcdFx0cHJldiA9IHZtYV9wcmV2KFx1MDAyNnZtaSk7XG4rXHRcdGlmICh2bV9lbmQgXHUwMDNlIGVuZClcbitcdFx0XHRuZXh0ID0gdm1hX25leHQoXHUwMDI2dm1pKTtcbitcbitcdFx0aWYgKGFjY291bnRhYmxlX21vdmUpIHtcbitcdFx0XHRpZiAocHJldilcbitcdFx0XHRcdHZtX2ZsYWdzX3NldChwcmV2LCBWTV9BQ0NPVU5UKTsgLyogQWNxdWlyZXMgVk1BIGxvY2suICovXG4rXHRcdFx0aWYgKG5leHQpXG4rXHRcdFx0XHR2bV9mbGFnc19zZXQobmV4dCwgVk1fQUNDT1VOVCk7IC8qIEFjcXVpcmVzIFZNQSBsb2NrLiAqL1xuIFx0XHR9XG4tXG4tXHRcdGlmICh2bV9lbmQgXHUwMDNlIGVuZCkge1xuLVx0XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqbmV4dCA9IHZtYV9uZXh0KFx1MDAyNnZtaSk7XG4tXG4tXHRcdFx0dm1fZmxhZ3Nfc2V0KG5leHQsIFZNX0FDQ09VTlQpOyAvKiBBY3F1aXJlcyBWTUEgbG9jay4gKi9cbitcdFx0aWYgKHJlc2VydmVkX3RocF9tb3ZlKSB7XG4rXHRcdFx0aWYgKHByZXYpXG4rXHRcdFx0XHR2bV9mbGFnc19zZXQocHJldiwgVk1fUkVTRVJWRURfVEhQKTtcbitcdFx0XHRpZiAobmV4dClcbitcdFx0XHRcdHZtX2ZsYWdzX3NldChuZXh0LCBWTV9SRVNFUlZFRF9USFApO1xuIFx0XHR9XG4gXHR9XG4gfVxuQEAgLTEzMDksNyArMTM1MCw2IEBAIHN0YXRpYyBpbnQgY29weV92bWFfYW5kX2RhdGEoc3RydWN0IHZtYV9yZW1hcF9zdHJ1Y3QgKnZybSxcbiBcdCpuZXdfdm1hX3B0ciA9IG5ld192bWE7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbi1cbiAvKlxuICAqIFBlcmZvcm0gZmluYWwgdGFza3MgZm9yIE1BRFZfRE9OVFVOTUFQIG9wZXJhdGlvbiwgY2xlYXJpbmcgbWxvY2soKSBmbGFnIG9uXG4gICogcmVtYWluaW5nIFZNQSBieSBjb252ZW50aW9uIChpdCBjYW5ub3QgYmUgbWxvY2soKSdkIGFueSBsb25nZXIsIGFzIHBhZ2VzIGluXG5AQCAtMTU3Niw2ICsxNjE2LDIzIEBAIHN0YXRpYyBib29sIGFsaWduX2h1Z2V0bGIoc3RydWN0IHZtYV9yZW1hcF9zdHJ1Y3QgKnZybSlcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbitzdGF0aWMgYm9vbCBjaGVja19yZXNlcnZlZF90aHBfYWxpZ25tZW50KHN0cnVjdCB2bWFfcmVtYXBfc3RydWN0ICp2cm0pXG4re1xuK1x0aWYgKCEodnJtLVx1MDAzZXZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fUkVTRVJWRURfVEhQKSlcbitcdFx0cmV0dXJuIHRydWU7XG4rXG4rXHRpZiAoIUlTX0FMSUdORUQodnJtLVx1MDAzZWFkZHIsIEhQQUdFX1BNRF9TSVpFKSB8fFxuK1x0ICAgICFJU19BTElHTkVEKHZybS1cdTAwM2VvbGRfbGVuLCBIUEFHRV9QTURfU0laRSkgfHxcbitcdCAgICAhSVNfQUxJR05FRCh2cm0tXHUwMDNlbmV3X2xlbiwgSFBBR0VfUE1EX1NJWkUpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRpZiAoKHZybS1cdTAwM2VyZW1hcF90eXBlID09IE1SRU1BUF9FWFBBTkQgfHwgdnJtX2ltcGxpZXNfbmV3X2FkZHIodnJtKSkgXHUwMDI2XHUwMDI2XG4rXHQgICAgIUlTX0FMSUdORUQodnJtLVx1MDAzZW5ld19hZGRyLCBIUEFHRV9QTURfU0laRSkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdHJldHVybiB0cnVlO1xuK31cbitcbiAvKlxuICAqIFdlIGFyZSBtcmVtYXAoKSdpbmcgd2l0aG91dCBzcGVjaWZ5aW5nIGEgZml4ZWQgYWRkcmVzcyB0byBtb3ZlIHRvLCBidXQgYXJlXG4gICogcmVxdWVzdGluZyB0aGF0IHRoZSBWTUEncyBzaXplIGJlIGluY3JlYXNlZC5cbkBAIC0xNzQ1LDYgKzE4MDIsOCBAQCBzdGF0aWMgaW50IGNoZWNrX3ByZXBfdm1hKHN0cnVjdCB2bWFfcmVtYXBfc3RydWN0ICp2cm0pXG4gXHQvKiBGb3IgY29udmVuaWVuY2UsIHdlIHNldCBuZXdfYWRkciBldmVuIGlmIFZNQSB3b24ndCBtb3ZlLiAqL1xuIFx0aWYgKCF2cm1faW1wbGllc19uZXdfYWRkcih2cm0pKVxuIFx0XHR2cm0tXHUwMDNlbmV3X2FkZHIgPSBhZGRyO1xuK1x0aWYgKCFjaGVja19yZXNlcnZlZF90aHBfYWxpZ25tZW50KHZybSkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0LyogQmVsb3cgb25seSBtZWFuaW5nZnVsIGlmIHdlIGV4cGFuZCBvciBtb3ZlIGEgVk1BLiAqL1xuIFx0aWYgKCF2cm1fd2lsbF9tYXBfbmV3KHZybSkpXG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9hbGxvYy5jIGIvbW0vcGFnZV9hbGxvYy5jXG5pbmRleCBlZTkwMmE0NjhjMmY1Yi4uNjYwZTUwMWJmNjc2YjYgMTAwNjQ0XG4tLS0gYS9tbS9wYWdlX2FsbG9jLmNcbisrKyBiL21tL3BhZ2VfYWxsb2MuY1xuQEAgLTI2Myw2ICsyNjMsNyBAQCBjb25zdCBjaGFyICogY29uc3QgbWlncmF0ZXR5cGVfbmFtZXNbTUlHUkFURV9UWVBFU10gPSB7XG4gI2lmZGVmIENPTkZJR19DTUFcbiBcdFwiQ01BXCIsXG4gI2VuZGlmXG4rXHRcIlJlc2VydmVUSFBcIixcbiAjaWZkZWYgQ09ORklHX01FTU9SWV9JU09MQVRJT05cbiBcdFwiSXNvbGF0ZVwiLFxuICNlbmRpZlxuQEAgLTc4NCw2ICs3ODUsOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYWNjb3VudF9mcmVlcGFnZXMoc3RydWN0IHpvbmUgKnpvbmUsIGludCBucl9wYWdlcyxcbiBcdGVsc2UgaWYgKG1pZ3JhdGV0eXBlID09IE1JR1JBVEVfSElHSEFUT01JQylcbiBcdFx0V1JJVEVfT05DRSh6b25lLVx1MDAzZW5yX2ZyZWVfaGlnaGF0b21pYyxcbiBcdFx0XHQgICB6b25lLVx1MDAzZW5yX2ZyZWVfaGlnaGF0b21pYyArIG5yX3BhZ2VzKTtcbitcdGVsc2UgaWYgKG1pZ3JhdGV0eXBlID09IE1JR1JBVEVfUkVTRVJWRURfVEhQKVxuK1x0XHRXUklURV9PTkNFKHpvbmUtXHUwMDNlbnJfZnJlZV9yZXNlcnZlZF90aHAsXG4rXHRcdFx0ICAgem9uZS1cdTAwM2Vucl9mcmVlX3Jlc2VydmVkX3RocCArIG5yX3BhZ2VzKTtcbiB9XG4gXG4gLyogVXNlZCBmb3IgcGFnZXMgbm90IG9uIGFub3RoZXIgbGlzdCAqL1xuQEAgLTI0NTYsNiArMjQ2MCw5IEBAIF9fcm1xdWV1ZShzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgaW50IG9yZGVyLCBpbnQgbWlncmF0ZXR5cGUsXG4ge1xuIFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4gXG4rXHRpZiAoYWxsb2NfZmxhZ3MgXHUwMDI2IEFMTE9DX1JFU0VSVkVEX1RIUClcbitcdFx0cmV0dXJuIF9fcm1xdWV1ZV9zbWFsbGVzdCh6b25lLCBvcmRlciwgTUlHUkFURV9SRVNFUlZFRF9USFApO1xuK1xuIFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0NNQSkpIHtcbiBcdFx0LypcbiBcdFx0ICogQmFsYW5jZSBtb3ZhYmxlIGFsbG9jYXRpb25zIGJldHdlZW4gcmVndWxhciBhbmQgQ01BIGFyZWFzIGJ5XG5AQCAtMjk2MCw3ICsyOTY3LDggQEAgc3RhdGljIHZvaWQgX19mcmVlX2Zyb3plbl9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLFxuIFx0em9uZSA9IHBhZ2Vfem9uZShwYWdlKTtcbiBcdG1pZ3JhdGV0eXBlID0gZ2V0X3BmbmJsb2NrX21pZ3JhdGV0eXBlKHBhZ2UsIHBmbik7XG4gXHRpZiAodW5saWtlbHkobWlncmF0ZXR5cGUgXHUwMDNlPSBNSUdSQVRFX1BDUFRZUEVTKSkge1xuLVx0XHRpZiAodW5saWtlbHkoaXNfbWlncmF0ZV9pc29sYXRlKG1pZ3JhdGV0eXBlKSkpIHtcbitcdFx0aWYgKHVubGlrZWx5KGlzX21pZ3JhdGVfcmVzZXJ2ZWRfdGhwKG1pZ3JhdGV0eXBlKSB8fFxuK1x0XHRcdCAgICAgaXNfbWlncmF0ZV9pc29sYXRlKG1pZ3JhdGV0eXBlKSkpIHtcbiBcdFx0XHRmcmVlX29uZV9wYWdlKHpvbmUsIHBhZ2UsIHBmbiwgb3JkZXIsIGZwaV9mbGFncyk7XG4gXHRcdFx0cmV0dXJuO1xuIFx0XHR9XG5AQCAtMzAzOCw2ICszMDQ2LDcgQEAgdm9pZCBmcmVlX3VucmVmX2ZvbGlvcyhzdHJ1Y3QgZm9saW9fYmF0Y2ggKmZvbGlvcylcbiBcbiBcdFx0LyogRGlmZmVyZW50IHpvbmUgcmVxdWlyZXMgYSBkaWZmZXJlbnQgcGNwIGxvY2sgKi9cbiBcdFx0aWYgKHpvbmUgIT0gbG9ja2VkX3pvbmUgfHxcbitcdFx0ICAgIGlzX21pZ3JhdGVfcmVzZXJ2ZWRfdGhwKG1pZ3JhdGV0eXBlKSB8fFxuIFx0XHQgICAgaXNfbWlncmF0ZV9pc29sYXRlKG1pZ3JhdGV0eXBlKSkge1xuIFx0XHRcdGlmIChwY3ApIHtcbiBcdFx0XHRcdHBjcF9zcGluX3VubG9jayhwY3ApO1xuQEAgLTMwNDUsNiArMzA1NCwxMiBAQCB2b2lkIGZyZWVfdW5yZWZfZm9saW9zKHN0cnVjdCBmb2xpb19iYXRjaCAqZm9saW9zKVxuIFx0XHRcdFx0cGNwID0gTlVMTDtcbiBcdFx0XHR9XG4gXG4rXHRcdFx0aWYgKGlzX21pZ3JhdGVfcmVzZXJ2ZWRfdGhwKG1pZ3JhdGV0eXBlKSkge1xuK1x0XHRcdFx0ZnJlZV9vbmVfcGFnZSh6b25lLCBcdTAwMjZmb2xpby1cdTAwM2VwYWdlLCBwZm4sXG4rXHRcdFx0XHRcdCAgICAgIG9yZGVyLCBGUElfTk9ORSk7XG4rXHRcdFx0XHRjb250aW51ZTtcbitcdFx0XHR9XG4rXG4gXHRcdFx0LypcbiBcdFx0XHQgKiBGcmVlIGlzb2xhdGVkIHBhZ2VzIGRpcmVjdGx5IHRvIHRoZVxuIFx0XHRcdCAqIGFsbG9jYXRvciwgc2VlIGNvbW1lbnQgaW4gZnJlZV9mcm96ZW5fcGFnZXMuXG5AQCAtMzIzNSw3ICszMjUwLDggQEAgc3RydWN0IHBhZ2UgKnJtcXVldWVfYnVkZHkoc3RydWN0IHpvbmUgKnByZWZlcnJlZF96b25lLCBzdHJ1Y3Qgem9uZSAqem9uZSxcbiBcdFx0XHQgKiByZXNlcnZlcyBhcyBmYWlsaW5nIG5vdyBpcyB3b3JzZSB0aGFuIGZhaWxpbmcgYVxuIFx0XHRcdCAqIGhpZ2gtb3JkZXIgYXRvbWljIGFsbG9jYXRpb24gaW4gdGhlIGZ1dHVyZS5cbiBcdFx0XHQgKi9cbi1cdFx0XHRpZiAoIXBhZ2UgXHUwMDI2XHUwMDI2IChhbGxvY19mbGFncyBcdTAwMjYgKEFMTE9DX09PTXxBTExPQ19OT05fQkxPQ0spKSlcbitcdFx0XHRpZiAoIXBhZ2UgXHUwMDI2XHUwMDI2ICEoYWxsb2NfZmxhZ3MgXHUwMDI2IEFMTE9DX1JFU0VSVkVEX1RIUCkgXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICAgIChhbGxvY19mbGFncyBcdTAwMjYgKEFMTE9DX09PTXxBTExPQ19OT05fQkxPQ0spKSlcbiBcdFx0XHRcdHBhZ2UgPSBfX3JtcXVldWVfc21hbGxlc3Qoem9uZSwgb3JkZXIsIE1JR1JBVEVfSElHSEFUT01JQyk7XG4gXG4gXHRcdFx0aWYgKCFwYWdlKSB7XG5AQCAtMzQwNSw3ICszNDIxLDggQEAgc3RydWN0IHBhZ2UgKnJtcXVldWUoc3RydWN0IHpvbmUgKnByZWZlcnJlZF96b25lLFxuIHtcbiBcdHN0cnVjdCBwYWdlICpwYWdlO1xuIFxuLVx0aWYgKGxpa2VseShwY3BfYWxsb3dlZF9vcmRlcihvcmRlcikpKSB7XG4rXHRpZiAobGlrZWx5KHBjcF9hbGxvd2VkX29yZGVyKG9yZGVyKSkgXHUwMDI2XHUwMDI2XG4rXHQgICAgIShhbGxvY19mbGFncyBcdTAwMjYgQUxMT0NfUkVTRVJWRURfVEhQKSkge1xuIFx0XHRwYWdlID0gcm1xdWV1ZV9wY3BsaXN0KHByZWZlcnJlZF96b25lLCB6b25lLCBvcmRlcixcbiBcdFx0XHRcdCAgICAgICBtaWdyYXRldHlwZSwgYWxsb2NfZmxhZ3MpO1xuIFx0XHRpZiAobGlrZWx5KHBhZ2UpKVxuQEAgLTM1NTYsNiArMzU3MywzNSBAQCBzdGF0aWMgYm9vbCB1bnJlc2VydmVfaGlnaGF0b21pY19wYWdlYmxvY2soY29uc3Qgc3RydWN0IGFsbG9jX2NvbnRleHQgKmFjLFxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbit1bnNpZ25lZCBsb25nIHJlc2VydmVkX3RocF9wYWdlYmxvY2tzKHVuc2lnbmVkIGxvbmcgbnJfaHBhZ2VzKVxuK3tcbitcdHVuc2lnbmVkIGludCBvcmRlciA9IG1heF90KHVuc2lnbmVkIGludCwgSFBBR0VfUE1EX09SREVSLFxuK1x0XHRcdFx0ICAgcGFnZWJsb2NrX29yZGVyKTtcbitcdHVuc2lnbmVkIGxvbmcgaHBhZ2VzX3Blcl9ibG9jayA9IDFVTCBcdTAwM2NcdTAwM2MgKG9yZGVyIC0gSFBBR0VfUE1EX09SREVSKTtcbitcdHVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWQgPSAwO1xuK1x0Z2ZwX3QgZ2ZwID0gKEdGUF9ISUdIVVNFUiB8IF9fR0ZQX0NPTVAgfCBfX0dGUF9OT01FTUFMTE9DIHxcbitcdFx0ICAgICBfX0dGUF9OT1dBUk4gfCBfX0dGUF9OT1JFVFJZKTtcbitcbitcdHdoaWxlIChyZXNlcnZlZCBcdTAwM2MgbnJfaHBhZ2VzKSB7XG4rXHRcdHN0cnVjdCBwYWdlICpwYWdlO1xuK1x0XHRzdHJ1Y3Qgem9uZSAqem9uZTtcbitcdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbitcbitcdFx0cGFnZSA9IGFsbG9jX3BhZ2VzKGdmcCwgb3JkZXIpO1xuK1x0XHRpZiAoIXBhZ2UpXG4rXHRcdFx0YnJlYWs7XG4rXG4rXHRcdHpvbmUgPSBwYWdlX3pvbmUocGFnZSk7XG4rXHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnpvbmUtXHUwMDNlbG9jaywgZmxhZ3MpO1xuK1x0XHRjaGFuZ2VfcGFnZWJsb2NrX3JhbmdlKHBhZ2UsIG9yZGVyLCBNSUdSQVRFX1JFU0VSVkVEX1RIUCk7XG4rXHRcdHpvbmUtXHUwMDNlbnJfcmVzZXJ2ZWRfdGhwICs9IDFVTCBcdTAwM2NcdTAwM2Mgb3JkZXI7XG4rXHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2em9uZS1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXHRcdF9fZnJlZV9wYWdlcyhwYWdlLCBvcmRlcik7XG4rXHRcdHJlc2VydmVkICs9IGhwYWdlc19wZXJfYmxvY2s7XG4rXHR9XG4rXHRyZXR1cm4gcmVzZXJ2ZWQ7XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgbG9uZyBfX3pvbmVfd2F0ZXJtYXJrX3VudXNhYmxlX2ZyZWUoc3RydWN0IHpvbmUgKnosXG4gXHRcdFx0XHR1bnNpZ25lZCBpbnQgb3JkZXIsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncylcbiB7XG5AQCAtMzU2OCw2ICszNjE0LDkgQEAgc3RhdGljIGlubGluZSBsb25nIF9fem9uZV93YXRlcm1hcmtfdW51c2FibGVfZnJlZShzdHJ1Y3Qgem9uZSAqeixcbiBcdGlmIChsaWtlbHkoIShhbGxvY19mbGFncyBcdTAwMjYgQUxMT0NfUkVTRVJWRVMpKSlcbiBcdFx0dW51c2FibGVfZnJlZSArPSBSRUFEX09OQ0Uoei1cdTAwM2Vucl9mcmVlX2hpZ2hhdG9taWMpO1xuIFxuK1x0aWYgKCEoYWxsb2NfZmxhZ3MgXHUwMDI2IEFMTE9DX1JFU0VSVkVEX1RIUCkpXG4rXHRcdHVudXNhYmxlX2ZyZWUgKz0gUkVBRF9PTkNFKHotXHUwMDNlbnJfZnJlZV9yZXNlcnZlZF90aHApO1xuK1xuICNpZmRlZiBDT05GSUdfQ01BXG4gXHQvKiBJZiBhbGxvY2F0aW9uIGNhbid0IHVzZSBDTUEgYXJlYXMgZG9uJ3QgdXNlIGZyZWUgQ01BIHBhZ2VzICovXG4gXHRpZiAoIShhbGxvY19mbGFncyBcdTAwMjYgQUxMT0NfQ01BKSlcbkBAIC0zNjQyLDYgKzM2OTEsMTIgQEAgYm9vbCBfX3pvbmVfd2F0ZXJtYXJrX29rKHN0cnVjdCB6b25lICp6LCB1bnNpZ25lZCBpbnQgb3JkZXIsIHVuc2lnbmVkIGxvbmcgbWFyayxcbiBcdFx0aWYgKCFhcmVhLVx1MDAzZW5yX2ZyZWUpXG4gXHRcdFx0Y29udGludWU7XG4gXG4rXHRcdGlmIChhbGxvY19mbGFncyBcdTAwMjYgQUxMT0NfUkVTRVJWRURfVEhQKSB7XG4rXHRcdFx0aWYgKCFmcmVlX2FyZWFfZW1wdHkoYXJlYSwgTUlHUkFURV9SRVNFUlZFRF9USFApKVxuK1x0XHRcdFx0cmV0dXJuIHRydWU7XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbitcbiBcdFx0Zm9yIChtdCA9IDA7IG10IFx1MDAzYyBNSUdSQVRFX1BDUFRZUEVTOyBtdCsrKSB7XG4gXHRcdFx0aWYgKCFmcmVlX2FyZWFfZW1wdHkoYXJlYSwgbXQpKVxuIFx0XHRcdFx0cmV0dXJuIHRydWU7XG5AQCAtMzg3Niw2ICszOTMxLDkgQEAgZ2V0X3BhZ2VfZnJvbV9mcmVlbGlzdChnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLCBpbnQgYWxsb2NfZmxhZ3MsXG4gXG4gXHRcdGNvbmRfYWNjZXB0X21lbW9yeSh6b25lLCBvcmRlciwgYWxsb2NfZmxhZ3MpO1xuIFxuK1x0XHRpZiAoYWxsb2NfZmxhZ3MgXHUwMDI2IEFMTE9DX1JFU0VSVkVEX1RIUClcbitcdFx0XHRnb3RvIHRyeV90aGlzX3pvbmU7XG4rXG4gXHRcdC8qXG4gXHRcdCAqIERldGVjdCB3aGV0aGVyIHRoZSBudW1iZXIgb2YgZnJlZSBwYWdlcyBpcyBiZWxvdyBoaWdoXG4gXHRcdCAqIHdhdGVybWFyay4gIElmIHNvLCB3ZSB3aWxsIGRlY3JlYXNlIHBjcC1cdTAwM2VoaWdoIGFuZCBmcmVlXG5AQCAtNTAzMyw2ICs1MDkxLDE1IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwcmVwYXJlX2FsbG9jX3BhZ2VzKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4gXHRhYy1cdTAwM2Vub2RlbWFzayA9IG5vZGVtYXNrO1xuIFx0YWMtXHUwMDNlbWlncmF0ZXR5cGUgPSBnZnBfbWlncmF0ZXR5cGUoZ2ZwX21hc2spO1xuIFxuK1x0aWYgKGdmcF9tYXNrIFx1MDAyNiBfX0dGUF9SRVNFUlZFRF9USFApIHtcbitcdFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgfHxcbitcdFx0ICAgIFdBUk5fT05fT05DRV9HRlAob3JkZXIgIT0gSFBBR0VfUE1EX09SREVSLCBnZnBfbWFzaykpXG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0XHRhYy1cdTAwM2VtaWdyYXRldHlwZSA9IE1JR1JBVEVfUkVTRVJWRURfVEhQO1xuK1x0XHQqYWxsb2NfZmxhZ3MgfD0gQUxMT0NfUkVTRVJWRURfVEhQO1xuK1x0fVxuK1xuIFx0aWYgKGNwdXNldHNfZW5hYmxlZCgpKSB7XG4gXHRcdCphbGxvY19nZnAgfD0gX19HRlBfSEFSRFdBTEw7XG4gXHRcdC8qXG5kaWZmIC0tZ2l0IGEvbW0vcmVzZXJ2ZWRfdGhwLmMgYi9tbS9yZXNlcnZlZF90aHAuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi45MzFjNTM5YzE1YTcwOVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvbW0vcmVzZXJ2ZWRfdGhwLmNcbkBAIC0wLDAgKzEsMTMzIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tbS5oXHUwMDNlXG4rI2luY2x1ZGUgXCJpbnRlcm5hbC5oXCJcbitcbitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHJlc2VydmVkX3RocF9sb2NrKTtcbitcbitzdGF0aWMgdW5zaWduZWQgbG9uZyByZXNlcnZlZF90aHBfY21kbGluZV9zaXplIF9faW5pdGRhdGEgPSBIUEFHRV9QTURfU0laRTtcbitzdGF0aWMgYm9vbCByZXNlcnZlZF90aHBfY21kbGluZV9zaXplX3ZhbGlkIF9faW5pdGRhdGEgPSB0cnVlO1xuK3N0YXRpYyB1bnNpZ25lZCBsb25nIHJlc2VydmVkX3RocF9yZXF1ZXN0ZWQgX19pbml0ZGF0YTtcbitzdGF0aWMgdW5zaWduZWQgbG9uZyByZXNlcnZlZF90aHBfdG90YWw7XG4rc3RhdGljIHVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWRfdGhwX3VzZWQ7XG4rXG4rc3RhdGljIGludCBfX2luaXQgc2V0dXBfcmVzZXJ2ZWRfdGhwX3NpemUoY2hhciAqc3RyKVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgc2l6ZTtcbitcdHNpemUgPSBtZW1wYXJzZShzdHIsIE5VTEwpO1xuK1x0aWYgKHNpemUgIT0gSFBBR0VfUE1EX1NJWkUpIHtcbitcdFx0cHJfd2FybihcInVuc3VwcG9ydGVkIHRocF9yZXNlcnZlZF9zaXplPSVzLCBvbmx5ICVsdSBpcyBzdXBwb3J0ZWRcXG5cIixcbitcdFx0XHRzdHIsIEhQQUdFX1BNRF9TSVpFKTtcbitcdFx0cmVzZXJ2ZWRfdGhwX2NtZGxpbmVfc2l6ZV92YWxpZCA9IGZhbHNlO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcdHJlc2VydmVkX3RocF9jbWRsaW5lX3NpemUgPSBzaXplO1xuK1x0cmVzZXJ2ZWRfdGhwX2NtZGxpbmVfc2l6ZV92YWxpZCA9IHRydWU7XG4rXHRyZXR1cm4gMDtcbit9XG4rZWFybHlfcGFyYW0oXCJ0aHBfcmVzZXJ2ZWRfc2l6ZVwiLCBzZXR1cF9yZXNlcnZlZF90aHBfc2l6ZSk7XG4rc3RhdGljIGludCBfX2luaXQgc2V0dXBfcmVzZXJ2ZWRfdGhwX25yKGNoYXIgKnN0cilcbit7XG4rXHRpbnQgY291bnQ7XG4rXHRpZiAoc3NjYW5mKHN0ciwgXCIlbHUlblwiLCBcdTAwMjZyZXNlcnZlZF90aHBfcmVxdWVzdGVkLCBcdTAwMjZjb3VudCkgIT0gMSB8fFxuK1x0ICAgIHN0cltjb3VudF0pIHtcbitcdFx0cHJfd2FybihcImludmFsaWQgdGhwX3Jlc2VydmVkX25yPSVzXFxuXCIsIHN0cik7XG4rXHRcdHJlc2VydmVkX3RocF9yZXF1ZXN0ZWQgPSAwO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcdHJldHVybiAwO1xuK31cbitlYXJseV9wYXJhbShcInRocF9yZXNlcnZlZF9uclwiLCBzZXR1cF9yZXNlcnZlZF90aHBfbnIpO1xuK1xuK3Vuc2lnbmVkIGxvbmcgcmVzZXJ2ZWRfdGhwX2hwYWdlX25yKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxuK3tcbitcdHJldHVybiAoZW5kIC0gc3RhcnQpIFx1MDAzZVx1MDAzZSBIUEFHRV9QTURfU0hJRlQ7XG4rfVxuK1xuK2ludCByZXNlcnZlZF90aHBfY2hhcmdlKHVuc2lnbmVkIGxvbmcgbnJfaHBhZ2VzKVxuK3tcbitcdGludCByZXQgPSAwO1xuK1xuK1x0aWYgKCFucl9ocGFnZXMpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0c3Bpbl9sb2NrKFx1MDAyNnJlc2VydmVkX3RocF9sb2NrKTtcbitcdGlmIChucl9ocGFnZXMgXHUwMDNlIHJlc2VydmVkX3RocF90b3RhbCAtIHJlc2VydmVkX3RocF91c2VkKVxuK1x0XHRyZXQgPSAtRU5PTUVNO1xuK1x0ZWxzZVxuK1x0XHRyZXNlcnZlZF90aHBfdXNlZCArPSBucl9ocGFnZXM7XG4rXHRzcGluX3VubG9jayhcdTAwMjZyZXNlcnZlZF90aHBfbG9jayk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbit2b2lkIHJlc2VydmVkX3RocF91bmNoYXJnZSh1bnNpZ25lZCBsb25nIG5yX2hwYWdlcylcbit7XG4rXHRpZiAoIW5yX2hwYWdlcylcbitcdFx0cmV0dXJuO1xuK1xuK1x0c3Bpbl9sb2NrKFx1MDAyNnJlc2VydmVkX3RocF9sb2NrKTtcbitcdGlmIChXQVJOX09OX09OQ0UobnJfaHBhZ2VzIFx1MDAzZSByZXNlcnZlZF90aHBfdXNlZCkpXG4rXHRcdHJlc2VydmVkX3RocF91c2VkID0gMDtcbitcdGVsc2VcbitcdFx0cmVzZXJ2ZWRfdGhwX3VzZWQgLT0gbnJfaHBhZ2VzO1xuK1x0c3Bpbl91bmxvY2soXHUwMDI2cmVzZXJ2ZWRfdGhwX2xvY2spO1xuK31cbitcbitzdGF0aWMgc3NpemVfdCB0b3RhbF9ocGFnZXNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbitcdFx0XHRcdCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zilcbit7XG4rXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwiJWx1XFxuXCIsIFJFQURfT05DRShyZXNlcnZlZF90aHBfdG90YWwpKTtcbit9XG4rc3RhdGljIHNzaXplX3QgZnJlZV9ocGFnZXNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbitcdFx0XHRcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgZnJlZV9ocGFnZXM7XG4rXG4rXHRzcGluX2xvY2soXHUwMDI2cmVzZXJ2ZWRfdGhwX2xvY2spO1xuK1x0ZnJlZV9ocGFnZXMgPSByZXNlcnZlZF90aHBfdG90YWwgLSByZXNlcnZlZF90aHBfdXNlZDtcbitcdHNwaW5fdW5sb2NrKFx1MDAyNnJlc2VydmVkX3RocF9sb2NrKTtcbitcbitcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCIlbHVcXG5cIiwgZnJlZV9ocGFnZXMpO1xuK31cbitzdGF0aWMgc3NpemVfdCB1c2VkX2hwYWdlc19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuK1x0XHRcdFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXG4re1xuK1x0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcIiVsdVxcblwiLCBSRUFEX09OQ0UocmVzZXJ2ZWRfdGhwX3VzZWQpKTtcbit9XG4rXG4rc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSB0b3RhbF9ocGFnZXNfYXR0ciA9IF9fQVRUUl9STyh0b3RhbF9ocGFnZXMpO1xuK3N0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZnJlZV9ocGFnZXNfYXR0ciA9IF9fQVRUUl9STyhmcmVlX2hwYWdlcyk7XG4rc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSB1c2VkX2hwYWdlc19hdHRyID0gX19BVFRSX1JPKHVzZWRfaHBhZ2VzKTtcbitcbitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqcmVzZXJ2ZWRfdGhwX2F0dHJzW10gPSB7XG4rXHRcdTAwMjZ0b3RhbF9ocGFnZXNfYXR0ci5hdHRyLFxuK1x0XHUwMDI2ZnJlZV9ocGFnZXNfYXR0ci5hdHRyLFxuK1x0XHUwMDI2dXNlZF9ocGFnZXNfYXR0ci5hdHRyLFxuK1x0TlVMTCxcbit9O1xuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIHJlc2VydmVkX3RocF9hdHRyX2dyb3VwID0ge1xuK1x0LmF0dHJzID0gcmVzZXJ2ZWRfdGhwX2F0dHJzLFxuK307XG4rXG4rc3RhdGljIGludCBfX2luaXQgcmVzZXJ2ZWRfdGhwX2luaXQodm9pZClcbit7XG4rXHRzdHJ1Y3Qga29iamVjdCAqa29iajtcbitcdGludCByZXQ7XG4rXG4rXHRpZiAocmVzZXJ2ZWRfdGhwX3JlcXVlc3RlZCBcdTAwMjZcdTAwMjYgcmVzZXJ2ZWRfdGhwX2NtZGxpbmVfc2l6ZV92YWxpZCkge1xuK1x0XHRyZXNlcnZlZF90aHBfdG90YWwgPSByZXNlcnZlZF90aHBfcGFnZWJsb2NrcyhyZXNlcnZlZF90aHBfcmVxdWVzdGVkKTtcbitcdFx0cHJfaW5mbyhcInJlc2VydmVkICVsdS8lbHUgUE1EIFRIUCBwYWdlYmxvY2tzICglbHUgYnl0ZXMgZWFjaClcXG5cIixcbitcdFx0XHRyZXNlcnZlZF90aHBfdG90YWwsIHJlc2VydmVkX3RocF9yZXF1ZXN0ZWQsXG4rXHRcdFx0cmVzZXJ2ZWRfdGhwX2NtZGxpbmVfc2l6ZSk7XG4rXHR9XG4rXHRrb2JqID0ga29iamVjdF9jcmVhdGVfYW5kX2FkZChcInJlc2VydmVkX3RocFwiLCBtbV9rb2JqKTtcbitcdGlmICgha29iailcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHRyZXQgPSBzeXNmc19jcmVhdGVfZ3JvdXAoa29iaiwgXHUwMDI2cmVzZXJ2ZWRfdGhwX2F0dHJfZ3JvdXApO1xuK1x0aWYgKHJldClcbitcdFx0a29iamVjdF9wdXQoa29iaik7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitzdWJzeXNfaW5pdGNhbGwocmVzZXJ2ZWRfdGhwX2luaXQpO1xuXFwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZVxuZGlmZiAtLWdpdCBhL21tL3Nob3dfbWVtLmMgYi9tbS9zaG93X21lbS5jXG5pbmRleCA0M2FjYTVhMmFjOTkwYS4uZTkzODFhZmNhNGFjYWUgMTAwNjQ0XG4tLS0gYS9tbS9zaG93X21lbS5jXG4rKysgYi9tbS9zaG93X21lbS5jXG5AQCAtMTQyLDYgKzE0Miw3IEBAIHN0YXRpYyB2b2lkIHNob3dfbWlncmF0aW9uX3R5cGVzKHVuc2lnbmVkIGNoYXIgdHlwZSlcbiAjaWZkZWYgQ09ORklHX0NNQVxuIFx0XHRbTUlHUkFURV9DTUFdXHRcdD0gJ0MnLFxuICNlbmRpZlxuK1x0XHRbTUlHUkFURV9SRVNFUlZFRF9USFBdXHQ9ICdUJyxcbiAjaWZkZWYgQ09ORklHX01FTU9SWV9JU09MQVRJT05cbiBcdFx0W01JR1JBVEVfSVNPTEFURV1cdD0gJ0knLFxuICNlbmRpZlxuQEAgLTMwOCw2ICszMDksOCBAQCBzdGF0aWMgdm9pZCBzaG93X2ZyZWVfYXJlYXModW5zaWduZWQgaW50IGZpbHRlciwgbm9kZW1hc2tfdCAqbm9kZW1hc2ssIGludCBtYXhfelxuIFx0XHRcdFwiIGhpZ2g6JWx1a0JcIlxuIFx0XHRcdFwiIHJlc2VydmVkX2hpZ2hhdG9taWM6JWx1S0JcIlxuIFx0XHRcdFwiIGZyZWVfaGlnaGF0b21pYzolbHVLQlwiXG4rXHRcdFx0XCIgcmVzZXJ2ZWRfdGhwOiVsdUtCXCJcbitcdFx0XHRcIiBmcmVlX3Jlc2VydmVkX3RocDolbHVLQlwiXG4gXHRcdFx0XCIgYWN0aXZlX2Fub246JWx1a0JcIlxuIFx0XHRcdFwiIGluYWN0aXZlX2Fub246JWx1a0JcIlxuIFx0XHRcdFwiIGFjdGl2ZV9maWxlOiVsdWtCXCJcbkBAIC0zMzEsNiArMzM0LDggQEAgc3RhdGljIHZvaWQgc2hvd19mcmVlX2FyZWFzKHVuc2lnbmVkIGludCBmaWx0ZXIsIG5vZGVtYXNrX3QgKm5vZGVtYXNrLCBpbnQgbWF4X3pcbiBcdFx0XHRLKGhpZ2hfd21hcmtfcGFnZXMoem9uZSkpLFxuIFx0XHRcdEsoem9uZS1cdTAwM2Vucl9yZXNlcnZlZF9oaWdoYXRvbWljKSxcbiBcdFx0XHRLKHpvbmUtXHUwMDNlbnJfZnJlZV9oaWdoYXRvbWljKSxcbitcdFx0XHRLKHpvbmUtXHUwMDNlbnJfcmVzZXJ2ZWRfdGhwKSxcbitcdFx0XHRLKHpvbmUtXHUwMDNlbnJfZnJlZV9yZXNlcnZlZF90aHApLFxuIFx0XHRcdEsoem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX1pPTkVfQUNUSVZFX0FOT04pKSxcbiBcdFx0XHRLKHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9aT05FX0lOQUNUSVZFX0FOT04pKSxcbiBcdFx0XHRLKHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9aT05FX0FDVElWRV9GSUxFKSksXG5kaWZmIC0tZ2l0IGEvbW0vdm1hLmMgYi9tbS92bWEuY1xuaW5kZXggOWVlYTI4NTA4MThhODUuLjhjNGNkN2M5N2E5ODRjIDEwMDY0NFxuLS0tIGEvbW0vdm1hLmNcbisrKyBiL21tL3ZtYS5jXG5AQCAtNyw2ICs3LDggQEBcbiAjaW5jbHVkZSBcInZtYV9pbnRlcm5hbC5oXCJcbiAjaW5jbHVkZSBcInZtYS5oXCJcbiBcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9odWdlX21tLmhcdTAwM2VcbitcbiBzdHJ1Y3QgbW1hcF9zdGF0ZSB7XG4gXHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcbiBcdHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaTtcbkBAIC01MDcsNiArNTA5LDEwIEBAIF9fc3BsaXRfdm1hKHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRXQVJOX09OKHZtYS1cdTAwM2V2bV9zdGFydCBcdTAwM2U9IGFkZHIpO1xuIFx0V0FSTl9PTih2bWEtXHUwMDNldm1fZW5kIFx1MDAzYz0gYWRkcik7XG4gXG4rXHRpZiAoKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fUkVTRVJWRURfVEhQKSBcdTAwMjZcdTAwMjZcbitcdCAgICAhSVNfQUxJR05FRChhZGRyLCBIUEFHRV9QTURfU0laRSkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuIFx0aWYgKHZtYS1cdTAwM2V2bV9vcHMgXHUwMDI2XHUwMDI2IHZtYS1cdTAwM2V2bV9vcHMtXHUwMDNlbWF5X3NwbGl0KSB7XG4gXHRcdGVyciA9IHZtYS1cdTAwM2V2bV9vcHMtXHUwMDNlbWF5X3NwbGl0KHZtYSwgYWRkcik7XG4gXHRcdGlmIChlcnIpXG5AQCAtMTM2MSw2ICsxMzY3LDcgQEAgc3RhdGljIHZvaWQgdm1zX2NvbXBsZXRlX211bm1hcF92bWFzKHN0cnVjdCB2bWFfbXVubWFwX3N0cnVjdCAqdm1zLFxuIFx0XHRyZW1vdmVfdm1hKHZtYSk7XG4gXG4gXHR2bV91bmFjY3RfbWVtb3J5KHZtcy1cdTAwM2Vucl9hY2NvdW50ZWQpO1xuK1x0cmVzZXJ2ZWRfdGhwX3VuY2hhcmdlKHZtcy1cdTAwM2Vucl9yZXNlcnZlZF90aHApO1xuIFx0dmFsaWRhdGVfbW0obW0pO1xuIFx0aWYgKHZtcy1cdTAwM2V1bmxvY2spXG4gXHRcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xuQEAgLTE0MjMsNiArMTQzMCwxMSBAQCBzdGF0aWMgaW50IHZtc19nYXRoZXJfbXVubWFwX3ZtYXMoc3RydWN0IHZtYV9tdW5tYXBfc3RydWN0ICp2bXMsXG4gXHRcdFx0ZXJyb3IgPSAtRVBFUk07XG4gXHRcdFx0Z290byBzdGFydF9zcGxpdF9mYWlsZWQ7XG4gXHRcdH1cbitcdFx0aWYgKCh2bXMtXHUwMDNldm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9SRVNFUlZFRF9USFApIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgIUlTX0FMSUdORUQodm1zLVx1MDAzZXN0YXJ0LCBIUEFHRV9QTURfU0laRSkpIHtcbitcdFx0XHRlcnJvciA9IC1FSU5WQUw7XG4rXHRcdFx0Z290byBzdGFydF9zcGxpdF9mYWlsZWQ7XG4rXHRcdH1cbiBcbiBcdFx0ZXJyb3IgPSBfX3NwbGl0X3ZtYSh2bXMtXHUwMDNldm1pLCB2bXMtXHUwMDNldm1hLCB2bXMtXHUwMDNlc3RhcnQsIDEpO1xuIFx0XHRpZiAoZXJyb3IpXG5AQCAtMTQ0NSw2ICsxNDU3LDExIEBAIHN0YXRpYyBpbnQgdm1zX2dhdGhlcl9tdW5tYXBfdm1hcyhzdHJ1Y3Qgdm1hX211bm1hcF9zdHJ1Y3QgKnZtcyxcbiBcdFx0fVxuIFx0XHQvKiBEb2VzIGl0IHNwbGl0IHRoZSBlbmQ/ICovXG4gXHRcdGlmIChuZXh0LVx1MDAzZXZtX2VuZCBcdTAwM2Ugdm1zLVx1MDAzZWVuZCkge1xuK1x0XHRcdGlmICgobmV4dC1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fUkVTRVJWRURfVEhQKSBcdTAwMjZcdTAwMjZcbitcdFx0XHQgICAgIUlTX0FMSUdORUQodm1zLVx1MDAzZWVuZCwgSFBBR0VfUE1EX1NJWkUpKSB7XG4rXHRcdFx0XHRlcnJvciA9IC1FSU5WQUw7XG4rXHRcdFx0XHRnb3RvIGVuZF9zcGxpdF9mYWlsZWQ7XG4rXHRcdFx0fVxuIFx0XHRcdGVycm9yID0gX19zcGxpdF92bWEodm1zLVx1MDAzZXZtaSwgbmV4dCwgdm1zLVx1MDAzZWVuZCwgMCk7XG4gXHRcdFx0aWYgKGVycm9yKVxuIFx0XHRcdFx0Z290byBlbmRfc3BsaXRfZmFpbGVkO1xuQEAgLTE0NjUsNiArMTQ4MiwxMSBAQCBzdGF0aWMgaW50IHZtc19nYXRoZXJfbXVubWFwX3ZtYXMoc3RydWN0IHZtYV9tdW5tYXBfc3RydWN0ICp2bXMsXG4gXHRcdGlmICh2bWFfdGVzdChuZXh0LCBWTUFfQUNDT1VOVF9CSVQpKVxuIFx0XHRcdHZtcy1cdTAwM2Vucl9hY2NvdW50ZWQgKz0gbnJwYWdlcztcbiBcbitcdFx0aWYgKG5leHQtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1JFU0VSVkVEX1RIUClcbitcdFx0XHR2bXMtXHUwMDNlbnJfcmVzZXJ2ZWRfdGhwICs9XG4rXHRcdFx0XHRyZXNlcnZlZF90aHBfaHBhZ2VfbnIobmV4dC1cdTAwM2V2bV9zdGFydCxcbitcdFx0XHRcdFx0XHQgICAgICBuZXh0LVx1MDAzZXZtX2VuZCk7XG4rXG4gXHRcdGlmIChpc19leGVjX21hcHBpbmcobmV4dC1cdTAwM2V2bV9mbGFncykpXG4gXHRcdFx0dm1zLVx1MDAzZWV4ZWNfdm0gKz0gbnJwYWdlcztcbiBcdFx0ZWxzZSBpZiAoaXNfc3RhY2tfbWFwcGluZyhuZXh0LVx1MDAzZXZtX2ZsYWdzKSlcbkBAIC0xNTYwLDYgKzE1ODIsNyBAQCBzdGF0aWMgdm9pZCBpbml0X3ZtYV9tdW5tYXAoc3RydWN0IHZtYV9tdW5tYXBfc3RydWN0ICp2bXMsXG4gXHR2bXMtXHUwMDNldWYgPSB1ZjtcbiBcdHZtcy1cdTAwM2V2bWFfY291bnQgPSAwO1xuIFx0dm1zLVx1MDAzZW5yX3BhZ2VzID0gdm1zLVx1MDAzZWxvY2tlZF92bSA9IHZtcy1cdTAwM2Vucl9hY2NvdW50ZWQgPSAwO1xuK1x0dm1zLVx1MDAzZW5yX3Jlc2VydmVkX3RocCA9IDA7XG4gXHR2bXMtXHUwMDNlZXhlY192bSA9IHZtcy1cdTAwM2VzdGFja192bSA9IHZtcy1cdTAwM2VkYXRhX3ZtID0gMDtcbiBcdHZtcy1cdTAwM2V1bm1hcF9zdGFydCA9IEZJUlNUX1VTRVJfQUREUkVTUztcbiBcdHZtcy1cdTAwM2V1bm1hcF9lbmQgPSBVU0VSX1BHVEFCTEVTX0NFSUxJTkc7XG5kaWZmIC0tZ2l0IGEvbW0vdm1hLmggYi9tbS92bWEuaFxuaW5kZXggOGU0YjYxYTczMDRjNjguLjY4ZTQ0YWRlZTVjODllIDEwMDY0NFxuLS0tIGEvbW0vdm1hLmhcbisrKyBiL21tL3ZtYS5oXG5AQCAtNDgsNiArNDgsNyBAQCBzdHJ1Y3Qgdm1hX211bm1hcF9zdHJ1Y3Qge1xuIFx0dW5zaWduZWQgbG9uZyBucl9wYWdlczsgICAgICAgICAvKiBOdW1iZXIgb2YgcGFnZXMgYmVpbmcgcmVtb3ZlZCAqL1xuIFx0dW5zaWduZWQgbG9uZyBsb2NrZWRfdm07ICAgICAgICAvKiBOdW1iZXIgb2YgbG9ja2VkIHBhZ2VzICovXG4gXHR1bnNpZ25lZCBsb25nIG5yX2FjY291bnRlZDsgICAgIC8qIE51bWJlciBvZiBWTV9BQ0NPVU5UIHBhZ2VzICovXG4rXHR1bnNpZ25lZCBsb25nIG5yX3Jlc2VydmVkX3RocDsgIC8qIE51bWJlciBvZiByZXNlcnZlZCBQTUQgVEhQIHNsb3RzICovXG4gXHR1bnNpZ25lZCBsb25nIGV4ZWNfdm07XG4gXHR1bnNpZ25lZCBsb25nIHN0YWNrX3ZtO1xuIFx0dW5zaWduZWQgbG9uZyBkYXRhX3ZtO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL2luY2x1ZGUvbGludXgvZ2ZwX3R5cGVzLmggYi90b29scy9pbmNsdWRlL2xpbnV4L2dmcF90eXBlcy5oXG5pbmRleCA2Yzc1ZGYzMGEyODFkMS4uNTNhMWQyMmZjZjk1N2UgMTAwNjQ0XG4tLS0gYS90b29scy9pbmNsdWRlL2xpbnV4L2dmcF90eXBlcy5oXG4rKysgYi90b29scy9pbmNsdWRlL2xpbnV4L2dmcF90eXBlcy5oXG5AQCAtMzMsNyArMzMsNyBAQCBlbnVtIHtcbiBcdF9fX0dGUF9JT19CSVQsXG4gXHRfX19HRlBfRlNfQklULFxuIFx0X19fR0ZQX1pFUk9fQklULFxuLVx0X19fR0ZQX1VOVVNFRF9CSVQsXHQvKiAweDIwMHUgdW51c2VkICovXG4rXHRfX19HRlBfUkVTRVJWRURfVEhQX0JJVCxcbiBcdF9fX0dGUF9ESVJFQ1RfUkVDTEFJTV9CSVQsXG4gXHRfX19HRlBfS1NXQVBEX1JFQ0xBSU1fQklULFxuIFx0X19fR0ZQX1dSSVRFX0JJVCxcbkBAIC02OSw3ICs2OSw3IEBAIGVudW0ge1xuICNkZWZpbmUgX19fR0ZQX0lPXHRcdEJJVChfX19HRlBfSU9fQklUKVxuICNkZWZpbmUgX19fR0ZQX0ZTXHRcdEJJVChfX19HRlBfRlNfQklUKVxuICNkZWZpbmUgX19fR0ZQX1pFUk9cdFx0QklUKF9fX0dGUF9aRVJPX0JJVClcbi0vKiAweDIwMHUgdW51c2VkICovXG4rI2RlZmluZSBfX19HRlBfUkVTRVJWRURfVEhQXHRCSVQoX19fR0ZQX1JFU0VSVkVEX1RIUF9CSVQpXG4gI2RlZmluZSBfX19HRlBfRElSRUNUX1JFQ0xBSU1cdEJJVChfX19HRlBfRElSRUNUX1JFQ0xBSU1fQklUKVxuICNkZWZpbmUgX19fR0ZQX0tTV0FQRF9SRUNMQUlNXHRCSVQoX19fR0ZQX0tTV0FQRF9SRUNMQUlNX0JJVClcbiAjZGVmaW5lIF9fX0dGUF9XUklURVx0XHRCSVQoX19fR0ZQX1dSSVRFX0JJVClcbmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4ta21lbS5jIGIvdG9vbHMvcGVyZi9idWlsdGluLWttZW0uY1xuaW5kZXggZTFiMmY1YmMxYmE4ZDguLjQ1NzMyYWFmMWE1MjVlIDEwMDY0NFxuLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLWttZW0uY1xuKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLWttZW0uY1xuQEAgLTY3Miw2ICs2NzIsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHtcbiBcdHsgXCJfX0dGUF9OT1JFVFJZXCIsXHRcdFwiTlJcIiB9LFxuIFx0eyBcIl9fR0ZQX0NPTVBcIixcdFx0XHRcIkNcIiB9LFxuIFx0eyBcIl9fR0ZQX1pFUk9cIixcdFx0XHRcIlpcIiB9LFxuK1x0eyBcIl9fR0ZQX1JFU0VSVkVEX1RIUFwiLFx0XHRcIlJUSFBcIiB9LFxuIFx0eyBcIl9fR0ZQX05PTUVNQUxMT0NcIixcdFx0XCJOTUFcIiB9LFxuIFx0eyBcIl9fR0ZQX01FTUFMTE9DXCIsXHRcdFwiTUFcIiB9LFxuIFx0eyBcIl9fR0ZQX0hBUkRXQUxMXCIsXHRcdFwiSFdcIiB9LFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmggYi90b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oXG5pbmRleCBjZjczYmNkOWJiOWQ1Mi4uMDIyYjdhNTZiNmE5ZjMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oXG4rKysgYi90b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oXG5AQCAtMTYwLDYgKzE2MCw3IEBAIGVudW0ge1xuICNlbmRpZlxuIFx0REVDTEFSRV9WTUFfQklUKFVGRkRfTUlOT1IsIDQxKSxcbiBcdERFQ0xBUkVfVk1BX0JJVChTRUFMRUQsIDQyKSxcbitcdERFQ0xBUkVfVk1BX0JJVChSRVNFUlZFRF9USFAsIDQzKSxcbiBcdC8qIEZsYWdzIHRoYXQgcmV1c2UgZmxhZ3MgYWJvdmUuICovXG4gXHRERUNMQVJFX1ZNQV9CSVRfQUxJQVMoUEtFWV9CSVQwLCBISUdIX0FSQ0hfMCksXG4gXHRERUNMQVJFX1ZNQV9CSVRfQUxJQVMoUEtFWV9CSVQxLCBISUdIX0FSQ0hfMSksXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNzozOTo1Ni42MDQ2OTc1MTdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjQxMDQ0MTY4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgXCJNQURWX1JFU0VSVkVEX1RIUFwiIFBhdGNoIGZvciBGdXp6aW5nKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBXZSd2ZSBnb3QgYSBuZXcgcGF0Y2ggaW50cm9kdWNpbmcgYE1BRFZfUkVTRVJWRURfVEhQYCBhbmQgYFZNX1JFU0VSVkVEX1RIUGAsIHdoaWNoIGlzIGNsZWFybHkgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudC4gVGhpcyBzY3JlYW1zIFwiZnV6eiBtZSFcIlxuXG5NeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIHBpbnBvaW50IHRoZSBtb3N0IGludGVyZXN0aW5nIGZ1bmN0aW9ucywgc3BlY2lmaWNhbGx5IHRoZSBvbmVzIHRoYXQgYXJlIGRpcmVjdGx5IHRvdWNoZWQgYnkgdGhpcyBuZXcgbWFkdmlzZSBmbGFnLiBNb2RpZmllZCBvciBhZGRlZCBmdW5jdGlvbnMgYXJlOiBgbWFkdmlzZV9odWdlcGFnZV9wb2xpY3lgLCBgcmVzZXJ2ZWRfdGhwX21hZHZpc2VfYWxpZ25lZGAsIGByZXNlcnZlZF90aHBfY2hhcmdlYCwgYHJlc2VydmVkX3RocF91bmNoYXJnZWAsIGByZXNlcnZlZF90aHBfaHBhZ2VfbnJgLCBgcmVzZXJ2ZWRfdGhwX3BhZ2VibG9ja3NgLCBgY2hlY2tfcmVzZXJ2ZWRfdGhwX2FsaWdubWVudGAsIGB2cm1fY2FsY19jaGFyZ2VgLCBgdW5tYXBfc291cmNlX3ZtYWAsIGB2bXNfZ2F0aGVyX211bm1hcF92bWFzYCwgYF9fc3BsaXRfdm1hYCwgYGR1cF9tbWFwYCwgYHRlYXJfZG93bl92bWFzYCwgYGRvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlYCwgYF9fZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2VgLCBgdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kYCwgYW5kIGBodWdlcGFnZV9tYWR2aXNlYC5cblxuTG9va2luZyBhdCB0aGUgY29uZmlncywgdGhpcyBwYXRjaCBkZWZpbml0ZWx5IG5lZWRzIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuIEkgc2VlIGNoZWNrcyBmb3IgYENPTkZJR182NEJJVGAgd2l0aGluIGBtYWR2aXNlX2h1Z2VwYWdlX3BvbGljeWAsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIHNlZSB0aGF0IHRoaXMgcGF0Y2ggdXNlcyBgSFBBR0VfUE1EX1NJWkVgLCB3aGljaCBpcyBwYXJ0IG9mIHRoZSBUSFAgc2V0dXAuXG5cbkkgd2FudCB0byB0cmltIGRvd24gdGhlIGxpc3QgdG8gYmUgbW9yZSB0YXJnZXRlZC4gSSdsbCBmb2N1cyBvbjogYG1hZHZpc2VfaHVnZXBhZ2VfcG9saWN5YCwgYHJlc2VydmVkX3RocF9jaGFyZ2VgLCBgcmVzZXJ2ZWRfdGhwX3VuY2hhcmdlYCwgYHJlc2VydmVkX3RocF9wYWdlYmxvY2tzYCwgYGNoZWNrX3Jlc2VydmVkX3RocF9hbGlnbm1lbnRgLCBgaHVnZXBhZ2VfbWFkdmlzZWAuXG5cbkEgcXVpY2sgY2hlY2sgY29uZmlybXMgYSBmZXcgZnVuY3Rpb25zJyBwcm9wZXJ0aWVzLiBgbWFkdmlzZV9odWdlcGFnZV9wb2xpY3lgIGlzIHN0YXRpYywgYHJlc2VydmVkX3RocF9jaGFyZ2VgLCBgcmVzZXJ2ZWRfdGhwX3VuY2hhcmdlYCwgYHJlc2VydmVkX3RocF9wYWdlYmxvY2tzYCBhcmUgZ2xvYmFsLlxuXG5Ob3csIGxldCdzIGRpZyBkZWVwZXIuIFRoZSBgbW0vcmVzZXJ2ZWRfdGhwLmNgIGZpbGUgaXMgaW50ZXJlc3RpbmcuIEl0IGhhcyBmdW5jdGlvbnMgbGlrZSBgc2V0dXBfcmVzZXJ2ZWRfdGhwX3NpemVgLCBgc2V0dXBfcmVzZXJ2ZWRfdGhwX25yYCwgYW5kIGByZXNlcnZlZF90aHBfaW5pdGAuIEl0IHNlZW1zIHRvIHV0aWxpemUgYHRocF9yZXNlcnZlZF9zaXplYCBhbmQgYHRocF9yZXNlcnZlZF9ucmAgYm9vdCBwYXJhbWV0ZXJzLiBUaGlzIGlzIGEgY3J1Y2lhbCBvYnNlcnZhdGlvbi4gSWYgYHRocF9yZXNlcnZlZF9ucmAgaXNuJ3QgcHJvdmlkZWQsIGByZXNlcnZlZF90aHBfdG90YWxgIGJlY29tZXMgemVyby5cblxuQSBjYXJlZnVsIGxvb2sgYXQgYHJlc2VydmVkX3RocF9jaGFyZ2VgIHJldmVhbHMgdGhhdCB3aGVuIGByZXNlcnZlZF90aHBfdG90YWxgIGlzIHplcm8sIGFueSBhbGxvY2F0aW9uIHJlcXVlc3Qgd2lsbCByZXR1cm4gYC1FTk9NRU1gLiBUaGlzIG1ha2VzIHRoZSBgbWFkdmlzZShNQURWX1JFU0VSVkVEX1RIUClgIGNhbGxzIHRvIGZhaWwuIEkgd29uZGVyIGlmIHRoZXJlJ3MgYSB3YXkgdG8gdGVzdCBpdC5cblxuSXQgbG9va3MgbGlrZSB0aGUgYHJlc2VydmVkX3RocF90b3RhbGAgY2FuIG9ubHkgYmUgc2V0IGF0IGJvb3QgdGltZSB2aWEgYHRocF9yZXNlcnZlZF9ucmAsIGFuZCB0aGVyZSdzIG5vIHN5c2ZzIGludGVyZmFjZSBmb3IgY2hhbmdpbmcgaXQuIElmIGByZXNlcnZlZF90aHBfdG90YWwgPT0gMGAsIGBWTV9SRVNFUlZFRF9USFBgIHdpbGwgbmV2ZXIgZ2V0IHNldCwgYW5kIGFsbCB0aGUgbW9kaWZpY2F0aW9ucyB0byBgbW1hcC5jYCwgYG1yZW1hcC5jYCwgYHZtYS5jYCwgYW5kIGBodWdlX21lbW9yeS5jYCB3aWxsIGJlIHVucmVhY2hhYmxlLiBUaGlzIGlzIGNyaXRpY2FsLlxuXG5DYW4gd2UgYnlwYXNzIHRoaXM/IEl0IGFwcGVhcnMgbm90LiBgbWFkdmlzZWAgcmVxdWlyZXMgdGhlIHN0YXJ0IGFuZCBlbmQgb2YgdGhlIHJlZ2lvbiB0byBiZSBhbGlnbmVkIHdpdGggdGhlIGBIUEFHRV9QTURfU0laRWAsIHRoZXJlZm9yZSwgdGhlIG51bWJlciBvZiBodWdlcGFnZXMgcmVxdWVzdGVkIHdpbGwgYmUgYXQgbGVhc3Qgb25lIGh1Z2VwYWdlLiBBbmQgdGhpcyByZXF1ZXN0IHdpbGwgZmFpbCBpZiB3ZSBoYXZlbid0IHByb3ZpZGVkIGEgYm9vdCBwYXJhbWV0ZXIsIGFuZCB0aGVyZWZvcmUgaGF2ZSBub3Qgc2V0IGByZXNlcnZlZF90aHBfdG90YWxgLlxuXG5FdmVuIHRob3VnaCB3ZSBuZWVkIHRoYXQgYm9vdCBwYXJhbWV0ZXIsIGl0J3Mgc3RpbGwgd29ydGggZnV6emluZy4gVGhlIHBhdGNoIGlzIHN0aWxsIGRvaW5nIGZ1bmN0aW9uYWwgY2hhbmdlcy4gU3l6a2FsbGVyIG1pZ2h0IGhhdmUgdGhlIGFiaWxpdHkgdG8gc2V0IGJvb3QgcGFyYW1ldGVycyBvciBpdCdzIGp1c3QgYSBsaW1pdGF0aW9uLCBidXQgd2Ugc2hvdWxkIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuU28sIGhlcmUncyBteSBmb2N1c2VkIGxpc3Qgb2Ygc3ltYm9sczpcbi0gYG1hZHZpc2VfaHVnZXBhZ2VfcG9saWN5YFxuLSBgcmVzZXJ2ZWRfdGhwX2NoYXJnZWBcbi0gYHJlc2VydmVkX3RocF91bmNoYXJnZWBcbi0gYHJlc2VydmVkX3RocF9wYWdlYmxvY2tzYFxuLSBgY2hlY2tfcmVzZXJ2ZWRfdGhwX2FsaWdubWVudGBcbi0gYHZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZGBcblxuQW5kIHRoZSBrZXkgY29uZmlnIHJlcXVpcmVtZW50IGlzOlxuLSBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgXG5cbkluIHNob3J0OiB0aGUgcGF0Y2ggaXMgaW50cm9kdWNpbmcgYSBuZXcgYE1BRFZfUkVTRVJWRURfVEhQXG5cbiIsIklucHV0VG9rZW5zIjoxOTgyOCwiT3V0cHV0VG9rZW5zIjoxNzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzUxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDc6NDA6MjMuMDE1MTQxNDc0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Nzg1ODM0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtYWR2aXNlX2h1Z2VwYWdlX3BvbGljeVwiLFxuICAgIFwicmVzZXJ2ZWRfdGhwX2NoYXJnZVwiLFxuICAgIFwicmVzZXJ2ZWRfdGhwX3VuY2hhcmdlXCIsXG4gICAgXCJyZXNlcnZlZF90aHBfcGFnZWJsb2Nrc1wiLFxuICAgIFwiY2hlY2tfcmVzZXJ2ZWRfdGhwX2FsaWdubWVudFwiLFxuICAgIFwidm1hX2FsbG9jX2Fub25fZm9saW9fcG1kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBNQURWX1JFU0VSVkVEX1RIUCBtYWR2aXNlIGJlaGF2aW9yIGFuZCBWTV9SRVNFUlZFRF9USFAgVk1BIGZsYWcsIG1vZGlmeWluZyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGluY2x1ZGluZyBwYWdlIGZhdWx0IGhhbmRsaW5nLCBtcmVtYXAsIGFuZCBWTUEgc3BsaXR0aW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGtlcm5lbCdzIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtYWR2aXNlX2h1Z2VwYWdlX3BvbGljeVwiLFxuICAgIFwicmVzZXJ2ZWRfdGhwX2NoYXJnZVwiLFxuICAgIFwicmVzZXJ2ZWRfdGhwX3VuY2hhcmdlXCIsXG4gICAgXCJyZXNlcnZlZF90aHBfcGFnZWJsb2Nrc1wiLFxuICAgIFwiY2hlY2tfcmVzZXJ2ZWRfdGhwX2FsaWdubWVudFwiLFxuICAgIFwidm1hX2FsbG9jX2Fub25fZm9saW9fcG1kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBNQURWX1JFU0VSVkVEX1RIUCBtYWR2aXNlIGJlaGF2aW9yIGFuZCBWTV9SRVNFUlZFRF9USFAgVk1BIGZsYWcsIG1vZGlmeWluZyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGluY2x1ZGluZyBwYWdlIGZhdWx0IGhhbmRsaW5nLCBtcmVtYXAsIGFuZCBWTUEgc3BsaXR0aW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGtlcm5lbCdzIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow7rt7n[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-27 07:31:57 +0000 UTC FinishedAt: 2026-06-27 07:40:24 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "3d5670d672ae08b8c534b7beed6f57c8b44e7b43", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "3d5670d672ae08b8c534b7beed6f57c8b44e7b43", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE" ], "series_id": "48c38717-31b4-40a6-88aa-1b581e1fd93b" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "madvise_hugepage_policy", "reserved_thp_charge", "reserved_thp_uncharge", "reserved_thp_pageblocks", "check_reserved_thp_alignment", "vma_alloc_anon_folio_pmd" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA3OjM5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWFkdmlzZV9odWdlcGFnZV9wb2xpY3kmIzM0OywKICAgICYjMzQ7cmVzZXJ2ZWRfdGhwX2NoYXJnZSYjMzQ7LAogICAgJiMzNDtyZXNlcnZlZF90aHBfdW5jaGFyZ2UmIzM0OywKICAgICYjMzQ7cmVzZXJ2ZWRfdGhwX3BhZ2VibG9ja3MmIzM0OywKICAgICYjMzQ7Y2hlY2tfcmVzZXJ2ZWRfdGhwX2FsaWdubWVudCYjMzQ7LAogICAgJiMzNDt2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBNQURWX1JFU0VSVkVEX1RIUCBtYWR2aXNlIGJlaGF2aW9yIGFuZCBWTV9SRVNFUlZFRF9USFAgVk1BIGZsYWcsIG1vZGlmeWluZyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGluY2x1ZGluZyBwYWdlIGZhdWx0IGhhbmRsaW5nLCBtcmVtYXAsIGFuZCBWTUEgc3BsaXR0aW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGtlcm5lbCYjMzk7cyBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA3OjM5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgODhjMjgxNTU2NWRmNmMwNGFkOTRlYmZhNDgwMDU0YzgxODM2ZmU3OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgSnVuIDI3IDA3OjM5OjU0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmggYi9hcmNoL2FscGhhL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oXG5pbmRleCAxZTcwMDQ2OGE2ODU4MC4uNjcyYTJmYzM0Mzg2MTQgMTAwNjQ0XG4tLS0gYS9hcmNoL2FscGhhL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FscGhhL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oXG5AQCAtNzgsNiAmIzQzOzc4LDggQEBcbiBcbiAjZGVmaW5lIE1BRFZfQ09MTEFQU0VcdDI1XHRcdC8qIFN5bmNocm9ub3VzIGh1Z2VwYWdlIGNvbGxhcHNlICovXG4gXG4mIzQzOyNkZWZpbmUgTUFEVl9SRVNFUlZFRF9USFAgMjZcdFx0LyogVXNlIHJlc2VydmVkIHRyYW5zcGFyZW50IGh1Z2VwYWdlcyAqL1xuJiM0MztcbiAjZGVmaW5lIE1BRFZfR1VBUkRfSU5TVEFMTCAxMDJcdFx0LyogZmF0YWwgc2lnbmFsIG9uIGFjY2VzcyB0byByYW5nZSAqL1xuICNkZWZpbmUgTUFEVl9HVUFSRF9SRU1PVkUgMTAzXHRcdC8qIHVuZ3VhcmQgcmFuZ2UgKi9cbiBcbmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmggYi9hcmNoL21pcHMvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmhcbmluZGV4IGI3MDBkYWUyOGM0ODJkLi5hOTRiZjc0ZGVlMjFjYSAxMDA2NDRcbi0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9taXBzL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oXG5AQCAtMTA1LDYgJiM0MzsxMDUsOCBAQFxuIFxuICNkZWZpbmUgTUFEVl9DT0xMQVBTRVx0MjVcdFx0LyogU3luY2hyb25vdXMgaHVnZXBhZ2UgY29sbGFwc2UgKi9cbiBcbiYjNDM7I2RlZmluZSBNQURWX1JFU0VSVkVEX1RIUCAyNlx0XHQvKiBVc2UgcmVzZXJ2ZWQgdHJhbnNwYXJlbnQgaHVnZXBhZ2VzICovXG4mIzQzO1xuICNkZWZpbmUgTUFEVl9HVUFSRF9JTlNUQUxMIDEwMlx0XHQvKiBmYXRhbCBzaWduYWwgb24gYWNjZXNzIHRvIHJhbmdlICovXG4gI2RlZmluZSBNQURWX0dVQVJEX1JFTU9WRSAxMDNcdFx0LyogdW5ndWFyZCByYW5nZSAqL1xuIFxuZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmhcbmluZGV4IGI2YTcwOTUwNjk4N2UwLi5mZTJmZGRlZmI2YzVkOSAxMDA2NDRcbi0tLSBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3BhcmlzYy9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaFxuQEAgLTcyLDYgJiM0Mzs3Miw4IEBAXG4gXG4gI2RlZmluZSBNQURWX0NPTExBUFNFXHQyNVx0XHQvKiBTeW5jaHJvbm91cyBodWdlcGFnZSBjb2xsYXBzZSAqL1xuIFxuJiM0MzsjZGVmaW5lIE1BRFZfUkVTRVJWRURfVEhQIDI2XHRcdC8qIFVzZSByZXNlcnZlZCB0cmFuc3BhcmVudCBodWdlcGFnZXMgKi9cbiYjNDM7XG4gI2RlZmluZSBNQURWX0hXUE9JU09OICAgICAxMDBcdFx0LyogcG9pc29uIGEgcGFnZSBmb3IgdGVzdGluZyAqL1xuICNkZWZpbmUgTUFEVl9TT0ZUX09GRkxJTkUgMTAxXHRcdC8qIHNvZnQgb2ZmbGluZSBwYWdlIGZvciB0ZXN0aW5nICovXG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmggYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaFxuaW5kZXggOTlkNGNjZWU3ZjZlOGEuLmJiNjAzNTMwYmE3OTlmIDEwMDY0NFxuLS0tIGEvYXJjaC94dGVuc2EvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveHRlbnNhL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oXG5AQCAtMTEzLDYgJiM0MzsxMTMsOCBAQFxuIFxuICNkZWZpbmUgTUFEVl9DT0xMQVBTRVx0MjVcdFx0LyogU3luY2hyb25vdXMgaHVnZXBhZ2UgY29sbGFwc2UgKi9cbiBcbiYjNDM7I2RlZmluZSBNQURWX1JFU0VSVkVEX1RIUCAyNlx0XHQvKiBVc2UgcmVzZXJ2ZWQgdHJhbnNwYXJlbnQgaHVnZXBhZ2VzICovXG4mIzQzO1xuICNkZWZpbmUgTUFEVl9HVUFSRF9JTlNUQUxMIDEwMlx0XHQvKiBmYXRhbCBzaWduYWwgb24gYWNjZXNzIHRvIHJhbmdlICovXG4gI2RlZmluZSBNQURWX0dVQVJEX1JFTU9WRSAxMDNcdFx0LyogdW5ndWFyZCByYW5nZSAqL1xuIFxuZGlmZiAtLWdpdCBhL2ZzL3Byb2MvdGFza19tbXUuYyBiL2ZzL3Byb2MvdGFza19tbXUuY1xuaW5kZXggZDMyNDA4ZjdjZDVlZDIuLjY1YzRiMmE2MWFlYWM3IDEwMDY0NFxuLS0tIGEvZnMvcHJvYy90YXNrX21tdS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9wcm9jL3Rhc2tfbW11LmNcbkBAIC0xMjQ1LDYgJiM0MzsxMjQ1LDkgQEAgc3RhdGljIHZvaWQgc2hvd19zbWFwX3ZtYV9mbGFncyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuICNlbmRpZlxuICNpZmRlZiBDT05GSUdfNjRCSVRcbiBcdFx0W2lsb2cyKFZNX1NFQUxFRCldID0gXCYjMzQ7c2xcJiMzNDssXG4mIzQzOyNlbmRpZlxuJiM0MzsjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG4mIzQzO1x0XHRbaWxvZzIoVk1fUkVTRVJWRURfVEhQKV0gPSBcJiMzNDtydFwmIzM0OyxcbiAjZW5kaWZcbiBcdH07XG4gXHRzaXplX3QgaTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2dmcC5oIGIvaW5jbHVkZS9saW51eC9nZnAuaFxuaW5kZXggY2RmOTVhOWYwYjg3YzEuLjJkMDU5MjlmZDhjNzJkIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9nZnAuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9nZnAuaFxuQEAgLTMwLDYgJiM0MzszMCw5IEBAIHN0YXRpYyBpbmxpbmUgaW50IGdmcF9taWdyYXRldHlwZShjb25zdCBnZnBfdCBnZnBfZmxhZ3MpXG4gXHRCVUlMRF9CVUdfT04oKChfX19HRlBfTU9WQUJMRSB8IF9fX0dGUF9SRUNMQUlNQUJMRSkgXHUwMDNlXHUwMDNlXG4gXHRcdCAgICAgIEdGUF9NT1ZBQkxFX1NISUZUKSAhPSBNSUdSQVRFX0hJR0hBVE9NSUMpO1xuIFxuJiM0MztcdGlmICh1bmxpa2VseShnZnBfZmxhZ3MgXHUwMDI2IF9fR0ZQX1JFU0VSVkVEX1RIUCkpXG4mIzQzO1x0XHRyZXR1cm4gTUlHUkFURV9SRVNFUlZFRF9USFA7XG4mIzQzO1xuIFx0aWYgKHVubGlrZWx5KHBhZ2VfZ3JvdXBfYnlfbW9iaWxpdHlfZGlzYWJsZWQpKVxuIFx0XHRyZXR1cm4gTUlHUkFURV9VTk1PVkFCTEU7XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9nZnBfdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvZ2ZwX3R5cGVzLmhcbmluZGV4IDU0Y2EwYzg4YmFiNmU4Li4xZjgyYTk0OTFkMzU3ZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZ2ZwX3R5cGVzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZ2ZwX3R5cGVzLmhcbkBAIC0zMyw3ICYjNDM7MzMsNyBAQCBlbnVtIHtcbiBcdF9fX0dGUF9JT19CSVQsXG4gXHRfX19HRlBfRlNfQklULFxuIFx0X19fR0ZQX1pFUk9fQklULFxuLVx0X19fR0ZQX1VOVVNFRF9CSVQsXHQvKiAweDIwMHUgdW51c2VkICovXG4mIzQzO1x0X19fR0ZQX1JFU0VSVkVEX1RIUF9CSVQsXG4gXHRfX19HRlBfRElSRUNUX1JFQ0xBSU1fQklULFxuIFx0X19fR0ZQX0tTV0FQRF9SRUNMQUlNX0JJVCxcbiBcdF9fX0dGUF9XUklURV9CSVQsXG5AQCAtNjksNyAmIzQzOzY5LDcgQEAgZW51bSB7XG4gI2RlZmluZSBfX19HRlBfSU9cdFx0QklUKF9fX0dGUF9JT19CSVQpXG4gI2RlZmluZSBfX19HRlBfRlNcdFx0QklUKF9fX0dGUF9GU19CSVQpXG4gI2RlZmluZSBfX19HRlBfWkVST1x0XHRCSVQoX19fR0ZQX1pFUk9fQklUKVxuLS8qIDB4MjAwdSB1bnVzZWQgKi9cbiYjNDM7I2RlZmluZSBfX19HRlBfUkVTRVJWRURfVEhQXHRCSVQoX19fR0ZQX1JFU0VSVkVEX1RIUF9CSVQpXG4gI2RlZmluZSBfX19HRlBfRElSRUNUX1JFQ0xBSU1cdEJJVChfX19HRlBfRElSRUNUX1JFQ0xBSU1fQklUKVxuICNkZWZpbmUgX19fR0ZQX0tTV0FQRF9SRUNMQUlNXHRCSVQoX19fR0ZQX0tTV0FQRF9SRUNMQUlNX0JJVClcbiAjZGVmaW5lIF9fX0dGUF9XUklURVx0XHRCSVQoX19fR0ZQX1dSSVRFX0JJVClcbkBAIC0xNDEsNiAmIzQzOzE0MSw5IEBAIGVudW0ge1xuICAqICVfX0dGUF9OT19PQkpfRVhUIGNhdXNlcyBzbGFiIGFsbG9jYXRpb24gdG8gaGF2ZSBubyBvYmplY3QgZXh0ZW5zaW9uLlxuICAqIG1hcmtfb2JqX2NvZGV0YWdfZW1wdHkoKSBzaG91bGQgYmUgY2FsbGVkIHVwb24gZnJlZWluZyBmb3Igb2JqZWN0cyBhbGxvY2F0ZWRcbiAgKiB3aXRoIHRoaXMgZmxhZyB0byBpbmRpY2F0ZSB0aGF0IHRoZWlyIE5VTEwgdGFncyBhcmUgZXhwZWN0ZWQgYW5kIG5vcm1hbC5cbiYjNDM7ICpcbiYjNDM7ICogJV9fR0ZQX1JFU0VSVkVEX1RIUCBpcyBhbiBpbnRlcm5hbCBmbGFnIGZvciByZXNlcnZlZCBUSFAgZmF1bHRzLiBJdCByZXN0cmljdHNcbiYjNDM7ICp0aGUgYWxsb2NhdGlvbiB0byAlTUlHUkFURV9SRVNFUlZFRF9USFAgcGFnZWJsb2Nrcy5cbiAgKi9cbiAjZGVmaW5lIF9fR0ZQX1JFQ0xBSU1BQkxFICgoX19mb3JjZSBnZnBfdClfX19HRlBfUkVDTEFJTUFCTEUpXG4gI2RlZmluZSBfX0dGUF9XUklURVx0KChfX2ZvcmNlIGdmcF90KV9fX0dGUF9XUklURSlcbkBAIC0xNDgsNiAmIzQzOzE1MSw3IEBAIGVudW0ge1xuICNkZWZpbmUgX19HRlBfVEhJU05PREVcdCgoX19mb3JjZSBnZnBfdClfX19HRlBfVEhJU05PREUpXG4gI2RlZmluZSBfX0dGUF9BQ0NPVU5UXHQoKF9fZm9yY2UgZ2ZwX3QpX19fR0ZQX0FDQ09VTlQpXG4gI2RlZmluZSBfX0dGUF9OT19PQkpfRVhUICAgKChfX2ZvcmNlIGdmcF90KV9fX0dGUF9OT19PQkpfRVhUKVxuJiM0MzsjZGVmaW5lIF9fR0ZQX1JFU0VSVkVEX1RIUCAoKF9fZm9yY2UgZ2ZwX3QpX19fR0ZQX1JFU0VSVkVEX1RIUClcbiBcbiAvKipcbiAgKiBET0M6IFdhdGVybWFyayBtb2RpZmllcnNcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaCBiL2luY2x1ZGUvbGludXgvaHVnZV9tbS5oXG5pbmRleCBhZDIwZjdmOGMxNzk0NC4uNGZlOTY1MWNkODZiNWUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9odWdlX21tLmhcbkBAIC0zMzAsNiAmIzQzOzMzMCw4IEBAIHVuc2lnbmVkIGxvbmcgdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFxuIFx0XHRpZiAodm1fZmxhZ3MgXHUwMDI2IFZNX0hVR0VQQUdFKVxuIFx0XHRcdG1hc2sgfD0gUkVBRF9PTkNFKGh1Z2VfYW5vbl9vcmRlcnNfbWFkdmlzZSk7XG4mIzQzO1x0XHRpZiAodm1fZmxhZ3MgXHUwMDI2IFZNX1JFU0VSVkVEX1RIUClcbiYjNDM7XHRcdFx0bWFzayB8PSBCSVQoUE1EX09SREVSKTtcbiBcdFx0aWYgKGh1Z2VwYWdlX2dsb2JhbF9hbHdheXMoKSB8fFxuIFx0XHQgICAgKCh2bV9mbGFncyBcdTAwMjYgVk1fSFVHRVBBR0UpIFx1MDAyNlx1MDAyNiBodWdlcGFnZV9nbG9iYWxfZW5hYmxlZCgpKSlcbiBcdFx0XHRtYXNrIHw9IFJFQURfT05DRShodWdlX2Fub25fb3JkZXJzX2luaGVyaXQpO1xuQEAgLTM3MSw3ICYjNDM7MzczLDcgQEAgc3RhdGljIGlubGluZSBib29sIHZtYV90aHBfZGlzYWJsZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHQgKiBBcmUgVEhQcyBkaXNhYmxlZCBvbmx5IGZvciBWTUFzIHdoZXJlIHdlIGRpZG4mIzM5O3QgZ2V0IGFuIGV4cGxpY2l0XG4gXHQgKiBhZHZpc2UgdG8gdXNlIHRoZW0/XG4gXHQgKi9cbi1cdGlmICh2bV9mbGFncyBcdTAwMjYgVk1fSFVHRVBBR0UpXG4mIzQzO1x0aWYgKHZtX2ZsYWdzIFx1MDAyNiAoVk1fSFVHRVBBR0UgfCBWTV9SRVNFUlZFRF9USFApKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHQvKlxuIFx0ICogRm9yY2luZyBhIGNvbGxhcHNlIChlLmcuLCBtYWR2X2NvbGxhcHNlKSwgaXMgYSBjbGVhciBhZHZpY2UgdG9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmhcbmluZGV4IDQ4NWRmOWMyZGJkZGIzLi4yNzhjZjRiZmQ0ZWM1YiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW0uaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbS5oXG5AQCAtMzUzLDYgJiM0MzszNTMsNyBAQCBlbnVtIHtcbiAjZW5kaWZcbiBcdERFQ0xBUkVfVk1BX0JJVChVRkZEX01JTk9SLCA0MSksXG4gXHRERUNMQVJFX1ZNQV9CSVQoU0VBTEVELCA0MiksXG4mIzQzO1x0REVDTEFSRV9WTUFfQklUKFJFU0VSVkVEX1RIUCwgNDMpLFxuIFx0LyogRmxhZ3MgdGhhdCByZXVzZSBmbGFncyBhYm92ZS4gKi9cbiBcdERFQ0xBUkVfVk1BX0JJVF9BTElBUyhQS0VZX0JJVDAsIEhJR0hfQVJDSF8wKSxcbiBcdERFQ0xBUkVfVk1BX0JJVF9BTElBUyhQS0VZX0JJVDEsIEhJR0hfQVJDSF8xKSxcbkBAIC01MjYsNiAmIzQzOzUyNywxMiBAQCBlbnVtIHtcbiAjZGVmaW5lIFZNQV9EUk9QUEFCTEVcdFx0RU1QVFlfVk1BX0ZMQUdTXG4gI2VuZGlmXG4gXG4mIzQzOyNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcbiYjNDM7I2RlZmluZSBWTV9SRVNFUlZFRF9USFBcdFx0SU5JVF9WTV9GTEFHKFJFU0VSVkVEX1RIUClcbiYjNDM7I2Vsc2VcbiYjNDM7I2RlZmluZSBWTV9SRVNFUlZFRF9USFBcdFx0Vk1fTk9ORVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4gLyogQml0cyBzZXQgaW4gdGhlIFZNQSB1bnRpbCB0aGUgc3RhY2sgaXMgaW4gaXRzIGZpbmFsIGxvY2F0aW9uICovXG4gI2RlZmluZSBWTV9TVEFDS19JTkNPTVBMRVRFX1NFVFVQIChWTV9SQU5EX1JFQUQgfCBWTV9TRVFfUkVBRCB8IFZNX1NUQUNLX0VBUkxZKVxuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG5pbmRleCBjYTI3MTIxODcxNDc1Yy4uNDQxOGQwYzlhY2NkYzggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG5AQCAtMTMzLDEwICYjNDM7MTMzLDkgQEAgZW51bSBtaWdyYXRldHlwZSB7XG4gXHQgKiBfX2ZyZWVfcGFnZWJsb2NrX2NtYSgpIGZ1bmN0aW9uLlxuIFx0ICovXG4gXHRNSUdSQVRFX0NNQSxcbi1cdF9fTUlHUkFURV9UWVBFX0VORCA9IE1JR1JBVEVfQ01BLFxuLSNlbHNlXG4tXHRfX01JR1JBVEVfVFlQRV9FTkQgPSBNSUdSQVRFX0hJR0hBVE9NSUMsXG4gI2VuZGlmXG4mIzQzO1x0TUlHUkFURV9SRVNFUlZFRF9USFAsXG4mIzQzO1x0X19NSUdSQVRFX1RZUEVfRU5EID0gTUlHUkFURV9SRVNFUlZFRF9USFAsXG4gI2lmZGVmIENPTkZJR19NRU1PUllfSVNPTEFUSU9OXG4gXHRNSUdSQVRFX0lTT0xBVEUsXHQvKiBjYW4mIzM5O3QgYWxsb2NhdGUgZnJvbSBoZXJlICovXG4gI2VuZGlmXG5AQCAtMTYxLDYgJiM0MzsxNjAsOSBAQCBleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pZ3JhdGV0eXBlX25hbWVzW01JR1JBVEVfVFlQRVNdO1xuICMgIGRlZmluZSBpc19taWdyYXRlX2NtYV9mb2xpbyhmb2xpbywgcGZuKSBmYWxzZVxuICNlbmRpZlxuIFxuJiM0MzsjZGVmaW5lIGlzX21pZ3JhdGVfcmVzZXJ2ZWRfdGhwKG1pZ3JhdGV0eXBlKSBcXFxuJiM0MztcdHVubGlrZWx5KChtaWdyYXRldHlwZSkgPT0gTUlHUkFURV9SRVNFUlZFRF9USFApXG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgYm9vbCBpc19taWdyYXRlX21vdmFibGUoaW50IG10KVxuIHtcbiBcdHJldHVybiBpc19taWdyYXRlX2NtYShtdCkgfHwgbXQgPT0gTUlHUkFURV9NT1ZBQkxFO1xuQEAgLTk3NSw2ICYjNDM7OTc3LDkgQEAgc3RydWN0IHpvbmUge1xuIFx0dW5zaWduZWQgbG9uZyBucl9yZXNlcnZlZF9oaWdoYXRvbWljO1xuIFx0dW5zaWduZWQgbG9uZyBucl9mcmVlX2hpZ2hhdG9taWM7XG4gXG4mIzQzO1x0dW5zaWduZWQgbG9uZyBucl9yZXNlcnZlZF90aHA7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBucl9mcmVlX3Jlc2VydmVkX3RocDtcbiYjNDM7XG4gXHQvKlxuIFx0ICogV2UgZG9uJiMzOTt0IGtub3cgaWYgdGhlIG1lbW9yeSB0aGF0IHdlJiMzOTtyZSBnb2luZyB0byBhbGxvY2F0ZSB3aWxsIGJlXG4gXHQgKiBmcmVlYWJsZSBvci9hbmQgaXQgd2lsbCBiZSByZWxlYXNlZCBldmVudHVhbGx5LCBzbyB0byBhdm9pZCB0b3RhbGx5XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvbW1mbGFncy5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvbW1mbGFncy5oXG5pbmRleCBhNmU1YTQ0YzliNDI5OS4uM2RiNDBlYmQ3MDYwYmQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9tbWZsYWdzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL21tZmxhZ3MuaFxuQEAgLTI0LDYgJiM0MzsyNCw3IEBAXG4gXHRUUkFDRV9HRlBfRU0oSU8pXHRcdFx0XFxcbiBcdFRSQUNFX0dGUF9FTShGUylcdFx0XHRcXFxuIFx0VFJBQ0VfR0ZQX0VNKFpFUk8pXHRcdFx0XFxcbiYjNDM7XHRUUkFDRV9HRlBfRU0oUkVTRVJWRURfVEhQKVx0XHRcXFxuIFx0VFJBQ0VfR0ZQX0VNKERJUkVDVF9SRUNMQUlNKVx0XHRcXFxuIFx0VFJBQ0VfR0ZQX0VNKEtTV0FQRF9SRUNMQUlNKVx0XHRcXFxuIFx0VFJBQ0VfR0ZQX0VNKFdSSVRFKVx0XHRcdFxcXG5AQCAtNzIsOCAmIzQzOzczLDcgQEBcbiBcbiBUUkFDRV9HRlBfRkxBR1NcbiBcbi0vKiBKdXN0IGluIGNhc2UgdGhlc2UgYXJlIGV2ZXIgdXNlZCAqL1xuLVRSQUNFX0RFRklORV9FTlVNKF9fX0dGUF9VTlVTRURfQklUKTtcbiYjNDM7LyogSnVzdCBpbiBjYXNlIHRoaXMgaXMgZXZlciB1c2VkICovXG4gVFJBQ0VfREVGSU5FX0VOVU0oX19fR0ZQX0xBU1RfQklUKTtcbiBcbiAjZGVmaW5lIGdmcGZsYWdfc3RyaW5nKGZsYWcpIHsoX19mb3JjZSB1bnNpZ25lZCBsb25nKWZsYWcsICNmbGFnfVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9tbWFuLWNvbW1vbi5oIGIvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL21tYW4tY29tbW9uLmhcbmluZGV4IGVmMWMyN2ZhM2M1NzBmLi5iM2QxNDQ4OTM1ZWFkMSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9tbWFuLWNvbW1vbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvbW1hbi1jb21tb24uaFxuQEAgLTc5LDYgJiM0Mzs3OSw4IEBAXG4gXG4gI2RlZmluZSBNQURWX0NPTExBUFNFXHQyNVx0XHQvKiBTeW5jaHJvbm91cyBodWdlcGFnZSBjb2xsYXBzZSAqL1xuIFxuJiM0MzsjZGVmaW5lIE1BRFZfUkVTRVJWRURfVEhQIDI2XHRcdC8qIFVzZSByZXNlcnZlZCB0cmFuc3BhcmVudCBodWdlcGFnZXMgKi9cbiYjNDM7XG4gI2RlZmluZSBNQURWX0dVQVJEX0lOU1RBTEwgMTAyXHRcdC8qIGZhdGFsIHNpZ25hbCBvbiBhY2Nlc3MgdG8gcmFuZ2UgKi9cbiAjZGVmaW5lIE1BRFZfR1VBUkRfUkVNT1ZFIDEwM1x0XHQvKiB1bmd1YXJkIHJhbmdlICovXG4gXG5kaWZmIC0tZ2l0IGEvbW0vTWFrZWZpbGUgYi9tbS9NYWtlZmlsZVxuaW5kZXggZWZmOWY5ZTdlMDYxYzEuLmZkNzRhNzM5MmUzNDY3IDEwMDY0NFxuLS0tIGEvbW0vTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL21tL01ha2VmaWxlXG5AQCAtOTgsNyAmIzQzOzk4LDcgQEAgb2JqLSQoQ09ORklHX01FTVRFU1QpXHRcdCYjNDM7PSBtZW10ZXN0Lm9cbiBvYmotJChDT05GSUdfTUlHUkFUSU9OKSAmIzQzOz0gbWlncmF0ZS5vXG4gb2JqLSQoQ09ORklHX05VTUEpICYjNDM7PSBtZW1vcnktdGllcnMub1xuIG9iai0kKENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OKSAmIzQzOz0gbWlncmF0ZV9kZXZpY2Uub1xuLW9iai0kKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgJiM0Mzs9IGh1Z2VfbWVtb3J5Lm8ga2h1Z2VwYWdlZC5vXG4mIzQzO29iai0kKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgJiM0Mzs9IGh1Z2VfbWVtb3J5Lm8ga2h1Z2VwYWdlZC5vIHJlc2VydmVkX3RocC5vXG4gb2JqLSQoQ09ORklHX1BBR0VfQ09VTlRFUikgJiM0Mzs9IHBhZ2VfY291bnRlci5vXG4gb2JqLSQoQ09ORklHX0xJVkVVUERBVEVfTUVNRkQpICYjNDM7PSBtZW1mZF9sdW8ub1xuIG9iai0kKENPTkZJR19NRU1DR19WMSkgJiM0Mzs9IG1lbWNvbnRyb2wtdjEub1xuZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jXG5pbmRleCAyYmNjYjBhNTNhMGE2MC4uNjZkODVhMmZhODU1ZjMgMTAwNjQ0XG4tLS0gYS9tbS9odWdlX21lbW9yeS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdlX21lbW9yeS5jXG5AQCAtMTI2Nyw2ICYjNDM7MTI2Nyw5IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKnZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdGNvbnN0IGludCBvcmRlciA9IEhQQUdFX1BNRF9PUkRFUjtcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gXG4mIzQzO1x0aWYgKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fUkVTRVJWRURfVEhQKVxuJiM0MztcdFx0Z2ZwIHw9IF9fR0ZQX1JFU0VSVkVEX1RIUDtcbiYjNDM7XG4gXHRmb2xpbyA9IHZtYV9hbGxvY19mb2xpbyhnZnAsIG9yZGVyLCB2bWEsIGFkZHIgXHUwMDI2IEhQQUdFX1BNRF9NQVNLKTtcbiBcbiBcdGlmICh1bmxpa2VseSghZm9saW8pKSB7XG5AQCAtMTM0NCw4ICYjNDM7MTM0NywxMSBAQCBzdGF0aWMgdm1fZmF1bHRfdCBfX2RvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuIFx0dm1fZmF1bHRfdCByZXQgPSAwO1xuIFxuIFx0Zm9saW8gPSB2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWQodm1hLCB2bWYtXHUwMDNlYWRkcmVzcyk7XG4tXHRpZiAodW5saWtlbHkoIWZvbGlvKSlcbiYjNDM7XHRpZiAodW5saWtlbHkoIWZvbGlvKSkge1xuJiM0MztcdFx0aWYgKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fUkVTRVJWRURfVEhQKVxuJiM0MztcdFx0XHRyZXR1cm4gVk1fRkFVTFRfT09NO1xuIFx0XHRyZXR1cm4gVk1fRkFVTFRfRkFMTEJBQ0s7XG4mIzQzO1x0fVxuIFxuIFx0cGd0YWJsZSA9IHB0ZV9hbGxvY19vbmUodm1hLVx1MDAzZXZtX21tKTtcbiBcdGlmICh1bmxpa2VseSghcGd0YWJsZSkpIHtcbkBAIC0xNDgwLDE1ICYjNDM7MTQ4NiwxNyBAQCB2bV9mYXVsdF90IGRvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuIFx0dm1fZmF1bHRfdCByZXQ7XG4gXG4gXHRpZiAoIXRocF92bWFfc3VpdGFibGVfb3JkZXIodm1hLCBoYWRkciwgUE1EX09SREVSKSlcbi1cdFx0cmV0dXJuIFZNX0ZBVUxUX0ZBTExCQUNLO1xuJiM0MztcdFx0cmV0dXJuICh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1JFU0VSVkVEX1RIUCkgPyBWTV9GQVVMVF9PT00gOlxuJiM0MztcdFx0XHRcdFx0XHRcdCAgIFZNX0ZBVUxUX0ZBTExCQUNLO1xuIFx0cmV0ID0gdm1mX2Fub25fcHJlcGFyZSh2bWYpO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcdGtodWdlcGFnZWRfZW50ZXJfdm1hKHZtYSwgdm1hLVx1MDAzZXZtX2ZsYWdzKTtcbiBcbi1cdGlmICghKHZtZi1cdTAwM2VmbGFncyBcdTAwMjYgRkFVTFRfRkxBR19XUklURSkgXHUwMDI2XHUwMDI2XG4tXHRcdFx0IW1tX2ZvcmJpZHNfemVyb3BhZ2Uodm1hLVx1MDAzZXZtX21tKSBcdTAwMjZcdTAwMjZcbi1cdFx0XHR0cmFuc3BhcmVudF9odWdlcGFnZV91c2VfemVyb19wYWdlKCkpIHtcbiYjNDM7XHRpZiAoISh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1JFU0VSVkVEX1RIUCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICEodm1mLVx1MDAzZWZsYWdzIFx1MDAyNiBGQVVMVF9GTEFHX1dSSVRFKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIW1tX2ZvcmJpZHNfemVyb3BhZ2Uodm1hLVx1MDAzZXZtX21tKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgdHJhbnNwYXJlbnRfaHVnZXBhZ2VfdXNlX3plcm9fcGFnZSgpKSB7XG4gXHRcdHBndGFibGVfdCBwZ3RhYmxlO1xuIFx0XHRzdHJ1Y3QgZm9saW8gKnplcm9fZm9saW87XG4gXHRcdHZtX2ZhdWx0X3QgcmV0O1xuZGlmZiAtLWdpdCBhL21tL2ludGVybmFsLmggYi9tbS9pbnRlcm5hbC5oXG5pbmRleCAxODFlNzlmMWQ2YTIwNy4uNGIyYTEzZDM1Mzc3MjEgMTAwNjQ0XG4tLS0gYS9tbS9pbnRlcm5hbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9pbnRlcm5hbC5oXG5AQCAtMTQ3Nyw2ICYjNDM7MTQ3Nyw3IEBAIHVuc2lnbmVkIGludCByZWNsYWltX2NsZWFuX3BhZ2VzX2Zyb21fbGlzdChzdHJ1Y3Qgem9uZSAqem9uZSxcbiAjZGVmaW5lIEFMTE9DX0hJR0hBVE9NSUNcdDB4MjAwIC8qIEFsbG93cyBhY2Nlc3MgdG8gTUlHUkFURV9ISUdIQVRPTUlDICovXG4gI2RlZmluZSBBTExPQ19UUllMT0NLXHRcdDB4NDAwIC8qIE9ubHkgdXNlIHNwaW5fdHJ5bG9jayBpbiBhbGxvY2F0aW9uIHBhdGggKi9cbiAjZGVmaW5lIEFMTE9DX0tTV0FQRFx0XHQweDgwMCAvKiBhbGxvdyB3YWtpbmcgb2Yga3N3YXBkLCBfX0dGUF9LU1dBUERfUkVDTEFJTSBzZXQgKi9cbiYjNDM7I2RlZmluZSBBTExPQ19SRVNFUlZFRF9USFBcdDB4MTAwMCAvKiBBbGxvd3MgYWNjZXNzIHRvIHJlc2VydmVkIFRIUCBwYWdlYmxvY2tzICovXG4gXG4gLyogRmxhZ3MgdGhhdCBhbGxvdyBhbGxvY2F0aW9ucyBiZWxvdyB0aGUgbWluIHdhdGVybWFyay4gKi9cbiAjZGVmaW5lIEFMTE9DX1JFU0VSVkVTIChBTExPQ19OT05fQkxPQ0t8QUxMT0NfTUlOX1JFU0VSVkV8QUxMT0NfSElHSEFUT01JQ3xBTExPQ19PT00pXG5AQCAtMTk1MSw0ICYjNDM7MTk1Miw5IEBAIHN0YXRpYyBpbmxpbmUgaW50IGdldF9zeXNjdGxfbWF4X21hcF9jb3VudCh2b2lkKVxuIGJvb2wgbWF5X2V4cGFuZF92bShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncyxcbiBcdFx0ICAgdW5zaWduZWQgbG9uZyBucGFnZXMpO1xuIFxuJiM0Mzt1bnNpZ25lZCBsb25nIHJlc2VydmVkX3RocF9wYWdlYmxvY2tzKHVuc2lnbmVkIGxvbmcgbnJfaHBhZ2VzKTtcbiYjNDM7dW5zaWduZWQgbG9uZyByZXNlcnZlZF90aHBfaHBhZ2VfbnIodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpO1xuJiM0MztpbnQgcmVzZXJ2ZWRfdGhwX2NoYXJnZSh1bnNpZ25lZCBsb25nIG5yX2hwYWdlcyk7XG4mIzQzO3ZvaWQgcmVzZXJ2ZWRfdGhwX3VuY2hhcmdlKHVuc2lnbmVkIGxvbmcgbnJfaHBhZ2VzKTtcbiYjNDM7XG4gI2VuZGlmXHQvKiBfX01NX0lOVEVSTkFMX0ggKi9cbmRpZmYgLS1naXQgYS9tbS9raHVnZXBhZ2VkLmMgYi9tbS9raHVnZXBhZ2VkLmNcbmluZGV4IDYxN2JjYTc2ZGI0OWI2Li44MDI5M2U4YzFlNGU3NiAxMDA2NDRcbi0tLSBhL21tL2todWdlcGFnZWQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0va2h1Z2VwYWdlZC5jXG5AQCAtNDUxLDYgJiM0Mzs0NTEsNyBAQCBpbnQgaHVnZXBhZ2VfbWFkdmlzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdHN3aXRjaCAoYWR2aWNlKSB7XG4gXHRjYXNlIE1BRFZfSFVHRVBBR0U6XG4gXHRcdCp2bV9mbGFncyBcdTAwMjY9IH5WTV9OT0hVR0VQQUdFO1xuJiM0MztcdFx0KnZtX2ZsYWdzIFx1MDAyNj0gflZNX1JFU0VSVkVEX1RIUDtcbiBcdFx0KnZtX2ZsYWdzIHw9IFZNX0hVR0VQQUdFO1xuIFx0XHQvKlxuIFx0XHQgKiBJZiB0aGUgdm1hIGJlY29tZSBnb29kIGZvciBraHVnZXBhZ2VkIHRvIHNjYW4sXG5AQCAtNDYxLDYgJiM0Mzs0NjIsNyBAQCBpbnQgaHVnZXBhZ2VfbWFkdmlzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIE1BRFZfTk9IVUdFUEFHRTpcbiBcdFx0KnZtX2ZsYWdzIFx1MDAyNj0gflZNX0hVR0VQQUdFO1xuJiM0MztcdFx0KnZtX2ZsYWdzIFx1MDAyNj0gflZNX1JFU0VSVkVEX1RIUDtcbiBcdFx0KnZtX2ZsYWdzIHw9IFZNX05PSFVHRVBBR0U7XG4gXHRcdC8qXG4gXHRcdCAqIFNldHRpbmcgVk1fTk9IVUdFUEFHRSB3aWxsIHByZXZlbnQga2h1Z2VwYWdlZCBmcm9tIHNjYW5uaW5nXG5AQCAtNDY4LDYgJiM0Mzs0NzAsMTIgQEAgaW50IGh1Z2VwYWdlX21hZHZpc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdCAqIGl0IGdvdCByZWdpc3RlcmVkIGJlZm9yZSBWTV9OT0hVR0VQQUdFIHdhcyBzZXQuXG4gXHRcdCAqL1xuIFx0XHRicmVhaztcbiYjNDM7XHRjYXNlIE1BRFZfUkVTRVJWRURfVEhQOlxuJiM0MztcdFx0KnZtX2ZsYWdzIFx1MDAyNj0gfihWTV9IVUdFUEFHRSB8IFZNX05PSFVHRVBBR0UpO1xuJiM0MztcdFx0KnZtX2ZsYWdzIHw9IFZNX1JFU0VSVkVEX1RIUDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbiBcdHJldHVybiAwO1xuZGlmZiAtLWdpdCBhL21tL21hZHZpc2UuYyBiL21tL21hZHZpc2UuY1xuaW5kZXggY2Q5YmIwNzcwNzJjY2IuLmRkOTExMDVkYjY4Yzc1IDEwMDY0NFxuLS0tIGEvbW0vbWFkdmlzZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tYWR2aXNlLmNcbkBAIC0xMyw2ICYjNDM7MTMsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhZ2UtaXNvbGF0aW9uLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdlX2lkbGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VzZXJmYXVsdGZkX2suaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9odWdlX21tLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9odWdldGxiLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9mYWxsb2MuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZhZHZpc2UuaFx1MDAzZVxuQEAgLTEzMzEsNiAmIzQzOzEzMzIsNjUgQEAgc3RhdGljIGJvb2wgY2FuX21hZHZpc2VfbW9kaWZ5KHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxuIH1cbiAjZW5kaWZcbiBcbiYjNDM7c3RhdGljIGJvb2wgcmVzZXJ2ZWRfdGhwX21hZHZpc2VfYWxpZ25lZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiYjNDM7XHRcdFx0XHRcdCBzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvcl9yYW5nZSAqcmFuZ2UpXG4mIzQzO3tcbiYjNDM7XHRpZiAoISh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1JFU0VSVkVEX1RIUCkpXG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIElTX0FMSUdORUQocmFuZ2UtXHUwMDNlc3RhcnQsIEhQQUdFX1BNRF9TSVpFKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgICAgSVNfQUxJR05FRChyYW5nZS1cdTAwM2VlbmQsIEhQQUdFX1BNRF9TSVpFKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBtYWR2aXNlX2h1Z2VwYWdlX3BvbGljeShzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcixcbiYjNDM7XHRcdFx0XHQgICB2bV9mbGFnc190ICpuZXdfZmxhZ3MsXG4mIzQzO1x0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyAqcmVzZXJ2ZWRfaHBhZ2VzLFxuJiM0MztcdFx0XHRcdCAgIGJvb2wgKmNoYXJnZV9yZXNlcnZlZF90aHAsXG4mIzQzO1x0XHRcdFx0ICAgYm9vbCAqdW5jaGFyZ2VfcmVzZXJ2ZWRfdGhwKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSBtYWR2X2JlaGF2aW9yLVx1MDAzZXZtYTtcbiYjNDM7XHRzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvcl9yYW5nZSAqcmFuZ2UgPSBcdTAwMjZtYWR2X2JlaGF2aW9yLVx1MDAzZXJhbmdlO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgaHBhZ2VzO1xuJiM0MztcdGludCBiZWhhdmlvciA9IG1hZHZfYmVoYXZpb3ItXHUwMDNlYmVoYXZpb3I7XG4mIzQzO1x0aW50IGVycm9yO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKGJlaGF2aW9yKSB7XG4mIzQzO1x0Y2FzZSBNQURWX0hVR0VQQUdFOlxuJiM0MztcdGNhc2UgTUFEVl9OT0hVR0VQQUdFOlxuJiM0MztcdFx0ZXJyb3IgPSBodWdlcGFnZV9tYWR2aXNlKHZtYSwgbmV3X2ZsYWdzLCBiZWhhdmlvcik7XG4mIzQzO1x0XHRpZiAoZXJyb3IpXG4mIzQzO1x0XHRcdHJldHVybiBlcnJvcjtcbiYjNDM7XHRcdCp1bmNoYXJnZV9yZXNlcnZlZF90aHAgPSAodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9SRVNFUlZFRF9USFApIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHRcdFx0ICEoKm5ld19mbGFncyBcdTAwMjYgVk1fUkVTRVJWRURfVEhQKTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdGNhc2UgTUFEVl9SRVNFUlZFRF9USFA6XG4mIzQzO1x0XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHXzY0QklUKSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHRpZiAoIXZtYV9pc19hbm9ueW1vdXModm1hKSB8fCAoKm5ld19mbGFncyBcdTAwMjYgVk1fU0hBUkVEKSB8fFxuJiM0MztcdFx0ICAgICgqbmV3X2ZsYWdzIFx1MDAyNiBWTV9TUEVDSUFMKSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHRpZiAoIUlTX0FMSUdORUQocmFuZ2UtXHUwMDNlc3RhcnQsIEhQQUdFX1BNRF9TSVpFKSB8fFxuJiM0MztcdFx0ICAgICFJU19BTElHTkVEKHJhbmdlLVx1MDAzZWVuZCwgSFBBR0VfUE1EX1NJWkUpKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0XHRlcnJvciA9IGh1Z2VwYWdlX21hZHZpc2Uodm1hLCBuZXdfZmxhZ3MsIGJlaGF2aW9yKTtcbiYjNDM7XHRcdGlmIChlcnJvcilcbiYjNDM7XHRcdFx0cmV0dXJuIGVycm9yO1xuJiM0MztcbiYjNDM7XHRcdGlmICghKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fUkVTRVJWRURfVEhQKSkge1xuJiM0MztcdFx0XHRocGFnZXMgPSByZXNlcnZlZF90aHBfaHBhZ2VfbnIocmFuZ2UtXHUwMDNlc3RhcnQsIHJhbmdlLVx1MDAzZWVuZCk7XG4mIzQzO1x0XHRcdGVycm9yID0gcmVzZXJ2ZWRfdGhwX2NoYXJnZShocGFnZXMpO1xuJiM0MztcdFx0XHRpZiAoZXJyb3IpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIGVycm9yO1xuJiM0MztcdFx0XHQqcmVzZXJ2ZWRfaHBhZ2VzID0gaHBhZ2VzO1xuJiM0MztcdFx0XHQqY2hhcmdlX3Jlc2VydmVkX3RocCA9IHRydWU7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogQXBwbHkgYW4gbWFkdmlzZSBiZWhhdmlvciB0byBhIHJlZ2lvbiBvZiBhIHZtYS4gIG1hZHZpc2VfdXBkYXRlX3ZtYVxuICAqIHdpbGwgaGFuZGxlIHNwbGl0dGluZyBhIHZtIGFyZWEgaW50byBzZXBhcmF0ZSBhcmVhcywgZWFjaCBhcmVhIHdpdGggaXRzIG93blxuQEAgLTEzNDIsNiAmIzQzOzE0MDIsOSBAQCBzdGF0aWMgaW50IG1hZHZpc2Vfdm1hX2JlaGF2aW9yKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSBtYWR2X2JlaGF2aW9yLVx1MDAzZXZtYTtcbiBcdHZtX2ZsYWdzX3QgbmV3X2ZsYWdzID0gdm1hLVx1MDAzZXZtX2ZsYWdzO1xuIFx0c3RydWN0IG1hZHZpc2VfYmVoYXZpb3JfcmFuZ2UgKnJhbmdlID0gXHUwMDI2bWFkdl9iZWhhdmlvci1cdTAwM2VyYW5nZTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHJlc2VydmVkX2hwYWdlcyA9IDA7XG4mIzQzO1x0Ym9vbCBjaGFyZ2VfcmVzZXJ2ZWRfdGhwID0gZmFsc2U7XG4mIzQzO1x0Ym9vbCB1bmNoYXJnZV9yZXNlcnZlZF90aHAgPSBmYWxzZTtcbiBcdGludCBlcnJvcjtcbiBcbiBcdGlmICh1bmxpa2VseSghY2FuX21hZHZpc2VfbW9kaWZ5KG1hZHZfYmVoYXZpb3IpKSlcbkBAIC0xMzUzLDE0ICYjNDM7MTQxNiwyMiBAQCBzdGF0aWMgaW50IG1hZHZpc2Vfdm1hX2JlaGF2aW9yKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxuIFx0Y2FzZSBNQURWX1dJTExORUVEOlxuIFx0XHRyZXR1cm4gbWFkdmlzZV93aWxsbmVlZChtYWR2X2JlaGF2aW9yKTtcbiBcdGNhc2UgTUFEVl9DT0xEOlxuJiM0MztcdFx0aWYgKCFyZXNlcnZlZF90aHBfbWFkdmlzZV9hbGlnbmVkKHZtYSwgcmFuZ2UpKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0cmV0dXJuIG1hZHZpc2VfY29sZChtYWR2X2JlaGF2aW9yKTtcbiBcdGNhc2UgTUFEVl9QQUdFT1VUOlxuJiM0MztcdFx0aWYgKCFyZXNlcnZlZF90aHBfbWFkdmlzZV9hbGlnbmVkKHZtYSwgcmFuZ2UpKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0cmV0dXJuIG1hZHZpc2VfcGFnZW91dChtYWR2X2JlaGF2aW9yKTtcbiBcdGNhc2UgTUFEVl9GUkVFOlxuIFx0Y2FzZSBNQURWX0RPTlRORUVEOlxuIFx0Y2FzZSBNQURWX0RPTlRORUVEX0xPQ0tFRDpcbiYjNDM7XHRcdGlmICghcmVzZXJ2ZWRfdGhwX21hZHZpc2VfYWxpZ25lZCh2bWEsIHJhbmdlKSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdHJldHVybiBtYWR2aXNlX2RvbnRuZWVkX2ZyZWUobWFkdl9iZWhhdmlvcik7XG4gXHRjYXNlIE1BRFZfQ09MTEFQU0U6XG4mIzQzO1x0XHRpZiAodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9SRVNFUlZFRF9USFApXG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHRyZXR1cm4gbWFkdmlzZV9jb2xsYXBzZSh2bWEsIHJhbmdlLVx1MDAzZXN0YXJ0LCByYW5nZS1cdTAwM2VlbmQsXG4gXHRcdFx0XHUwMDI2bWFkdl9iZWhhdmlvci1cdTAwM2Vsb2NrX2Ryb3BwZWQpO1xuIFx0Y2FzZSBNQURWX0dVQVJEX0lOU1RBTEw6XG5AQCAtMTQxNiw3ICYjNDM7MTQ4NywxMSBAQCBzdGF0aWMgaW50IG1hZHZpc2Vfdm1hX2JlaGF2aW9yKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxuIFx0XHRicmVhaztcbiBcdGNhc2UgTUFEVl9IVUdFUEFHRTpcbiBcdGNhc2UgTUFEVl9OT0hVR0VQQUdFOlxuLVx0XHRlcnJvciA9IGh1Z2VwYWdlX21hZHZpc2Uodm1hLCBcdTAwMjZuZXdfZmxhZ3MsIGJlaGF2aW9yKTtcbiYjNDM7XHRjYXNlIE1BRFZfUkVTRVJWRURfVEhQOlxuJiM0MztcdFx0ZXJyb3IgPSBtYWR2aXNlX2h1Z2VwYWdlX3BvbGljeShtYWR2X2JlaGF2aW9yLCBcdTAwMjZuZXdfZmxhZ3MsXG4mIzQzO1x0XHRcdFx0XHRcdFx1MDAyNnJlc2VydmVkX2hwYWdlcyxcbiYjNDM7XHRcdFx0XHRcdFx0XHUwMDI2Y2hhcmdlX3Jlc2VydmVkX3RocCxcbiYjNDM7XHRcdFx0XHRcdFx0XHUwMDI2dW5jaGFyZ2VfcmVzZXJ2ZWRfdGhwKTtcbiBcdFx0aWYgKGVycm9yKVxuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHRicmVhaztcbkBAIC0xNDMxLDYgJiM0MzsxNTA2LDExIEBAIHN0YXRpYyBpbnQgbWFkdmlzZV92bWFfYmVoYXZpb3Ioc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXG4gXHRWTV9XQVJOX09OX09OQ0UobWFkdl9iZWhhdmlvci1cdTAwM2Vsb2NrX21vZGUgIT0gTUFEVklTRV9NTUFQX1dSSVRFX0xPQ0spO1xuIFxuIFx0ZXJyb3IgPSBtYWR2aXNlX3VwZGF0ZV92bWEobmV3X2ZsYWdzLCBtYWR2X2JlaGF2aW9yKTtcbiYjNDM7XHRpZiAoZXJyb3IgXHUwMDI2XHUwMDI2IGNoYXJnZV9yZXNlcnZlZF90aHApXG4mIzQzO1x0XHRyZXNlcnZlZF90aHBfdW5jaGFyZ2UocmVzZXJ2ZWRfaHBhZ2VzKTtcbiYjNDM7XHRlbHNlIGlmICghZXJyb3IgXHUwMDI2XHUwMDI2IHVuY2hhcmdlX3Jlc2VydmVkX3RocClcbiYjNDM7XHRcdHJlc2VydmVkX3RocF91bmNoYXJnZShyZXNlcnZlZF90aHBfaHBhZ2VfbnIocmFuZ2UtXHUwMDNlc3RhcnQsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgIHJhbmdlLVx1MDAzZWVuZCkpO1xuIG91dDpcbiBcdC8qXG4gXHQgKiBtYWR2aXNlKCkgcmV0dXJucyBFQUdBSU4gaWYga2VybmVsIHJlc291cmNlcywgc3VjaCBhc1xuQEAgLTE1NDEsNiAmIzQzOzE2MjEsNyBAQCBtYWR2aXNlX2JlaGF2aW9yX3ZhbGlkKGludCBiZWhhdmlvcilcbiBcdGNhc2UgTUFEVl9IVUdFUEFHRTpcbiBcdGNhc2UgTUFEVl9OT0hVR0VQQUdFOlxuIFx0Y2FzZSBNQURWX0NPTExBUFNFOlxuJiM0MztcdGNhc2UgTUFEVl9SRVNFUlZFRF9USFA6XG4gI2VuZGlmXG4gXHRjYXNlIE1BRFZfRE9OVERVTVA6XG4gXHRjYXNlIE1BRFZfRE9EVU1QOlxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmNcbmluZGV4IGZmMzM4YzJhYmU5MjMxLi4yMjVmYzFhZTIyMzg2ZCAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnkuY1xuQEAgLTUyOTcsNiAmIzQzOzUyOTcsOSBAQCBzdGF0aWMgdm1fZmF1bHRfdCBkb19hbm9ueW1vdXNfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbiBcdGlmICh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1NIQVJFRClcbiBcdFx0cmV0dXJuIFZNX0ZBVUxUX1NJR0JVUztcbiBcbiYjNDM7XHRpZiAodW5saWtlbHkodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9SRVNFUlZFRF9USFApKVxuJiM0MztcdFx0cmV0dXJuIFZNX0ZBVUxUX09PTTtcbiYjNDM7XG4gXHQvKlxuIFx0ICogVXNlIHB0ZV9hbGxvYygpIGluc3RlYWQgb2YgcHRlX2FsbG9jX21hcCgpLCBzbyB0aGF0IE9PTSBjYW5cbiBcdCAqIGJlIGRpc3Rpbmd1aXNoZWQgZnJvbSBhIHRyYW5zaWVudCBmYWlsdXJlIG9mIHB0ZV9vZmZzZXRfbWFwKCkuXG5kaWZmIC0tZ2l0IGEvbW0vbW1hcC5jIGIvbW0vbW1hcC5jXG5pbmRleCAyMzExYWU3YzJmZjQ1Yy4uNDgxOGIxNGVjMGZmNmMgMTAwNjQ0XG4tLS0gYS9tbS9tbWFwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21tYXAuY1xuQEAgLTEyNTEsNiAmIzQzOzEyNTEsNyBAQCB1bnNpZ25lZCBsb25nIHRlYXJfZG93bl92bWFzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWksXG4gXHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGVuZClcbiB7XG4gXHR1bnNpZ25lZCBsb25nIG5yX2FjY291bnRlZCA9IDA7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBucl9yZXNlcnZlZF90aHAgPSAwO1xuIFx0aW50IGNvdW50ID0gMDtcbiBcbiBcdG1tYXBfYXNzZXJ0X3dyaXRlX2xvY2tlZChtbSk7XG5AQCAtMTI1OCw2ICYjNDM7MTI1OSwxMCBAQCB1bnNpZ25lZCBsb25nIHRlYXJfZG93bl92bWFzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWksXG4gXHRkbyB7XG4gXHRcdGlmICh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX0FDQ09VTlQpXG4gXHRcdFx0bnJfYWNjb3VudGVkICYjNDM7PSB2bWFfcGFnZXModm1hKTtcbiYjNDM7XHRcdGlmICh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1JFU0VSVkVEX1RIUClcbiYjNDM7XHRcdFx0bnJfcmVzZXJ2ZWRfdGhwICYjNDM7PVxuJiM0MztcdFx0XHRcdHJlc2VydmVkX3RocF9ocGFnZV9ucih2bWEtXHUwMDNldm1fc3RhcnQsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgIHZtYS1cdTAwM2V2bV9lbmQpO1xuIFx0XHR2bWFfbWFya19kZXRhY2hlZCh2bWEpO1xuIFx0XHRyZW1vdmVfdm1hKHZtYSk7XG4gXHRcdGNvdW50JiM0MzsmIzQzOztcbkBAIC0xMjY2LDYgJiM0MzsxMjcxLDcgQEAgdW5zaWduZWQgbG9uZyB0ZWFyX2Rvd25fdm1hcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHZtYV9pdGVyYXRvciAqdm1pLFxuIFx0fSB3aGlsZSAodm1hIFx1MDAyNlx1MDAyNiB2bWEtXHUwMDNldm1fZW5kIFx1MDAzYz0gZW5kKTtcbiBcbiBcdFZNX1dBUk5fT05fT05DRShjb3VudCAhPSBtbS1cdTAwM2VtYXBfY291bnQpO1xuJiM0MztcdHJlc2VydmVkX3RocF91bmNoYXJnZShucl9yZXNlcnZlZF90aHApO1xuIFx0cmV0dXJuIG5yX2FjY291bnRlZDtcbiB9XG4gXG5AQCAtMTczMyw2ICYjNDM7MTczOSw3IEBAIF9fbGF0ZW50X2VudHJvcHkgaW50IGR1cF9tbWFwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgbW1fc3RydWN0ICpvbGRtbSlcbiBcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqbXBudCwgKnRtcDtcbiBcdGludCByZXR2YWw7XG4gXHR1bnNpZ25lZCBsb25nIGNoYXJnZSA9IDA7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyByZXNlcnZlZF9jaGFyZ2UgPSAwO1xuIFx0TElTVF9IRUFEKHVmKTtcbiBcdFZNQV9JVEVSQVRPUih2bWksIG1tLCAwKTtcbiBcbkBAIC0xNzc1LDYgJiM0MzsxNzgyLDcgQEAgX19sYXRlbnRfZW50cm9weSBpbnQgZHVwX21tYXAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm9sZG1tKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXHRcdGNoYXJnZSA9IDA7XG4mIzQzO1x0XHRyZXNlcnZlZF9jaGFyZ2UgPSAwO1xuIFx0XHRpZiAobXBudC1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fQUNDT1VOVCkge1xuIFx0XHRcdHVuc2lnbmVkIGxvbmcgbGVuID0gdm1hX3BhZ2VzKG1wbnQpO1xuIFxuQEAgLTE3ODIsNiAmIzQzOzE3OTAsMTUgQEAgX19sYXRlbnRfZW50cm9weSBpbnQgZHVwX21tYXAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm9sZG1tKVxuIFx0XHRcdFx0Z290byBmYWlsX25vbWVtO1xuIFx0XHRcdGNoYXJnZSA9IGxlbjtcbiBcdFx0fVxuJiM0MztcdFx0aWYgKG1wbnQtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1JFU0VSVkVEX1RIUCkge1xuJiM0MztcdFx0XHR1bnNpZ25lZCBsb25nIGxlbjtcbiYjNDM7XG4mIzQzO1x0XHRcdGxlbiA9IHJlc2VydmVkX3RocF9ocGFnZV9ucihtcG50LVx1MDAzZXZtX3N0YXJ0LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgbXBudC1cdTAwM2V2bV9lbmQpO1xuJiM0MztcdFx0XHRpZiAocmVzZXJ2ZWRfdGhwX2NoYXJnZShsZW4pKVxuJiM0MztcdFx0XHRcdGdvdG8gZmFpbF9ub21lbTtcbiYjNDM7XHRcdFx0cmVzZXJ2ZWRfY2hhcmdlID0gbGVuO1xuJiM0MztcdFx0fVxuIFxuIFx0XHR0bXAgPSB2bV9hcmVhX2R1cChtcG50KTtcbiBcdFx0aWYgKCF0bXApXG5AQCAtMTkxNiw2ICYjNDM7MTkzMyw3IEBAIF9fbGF0ZW50X2VudHJvcHkgaW50IGR1cF9tbWFwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgbW1fc3RydWN0ICpvbGRtbSlcbiBcdHZtX2FyZWFfZnJlZSh0bXApO1xuIGZhaWxfbm9tZW06XG4gXHRyZXR2YWwgPSAtRU5PTUVNO1xuJiM0MztcdHJlc2VydmVkX3RocF91bmNoYXJnZShyZXNlcnZlZF9jaGFyZ2UpO1xuIFx0dm1fdW5hY2N0X21lbW9yeShjaGFyZ2UpO1xuIFx0Z290byBsb29wX291dDtcbiB9XG5kaWZmIC0tZ2l0IGEvbW0vbXJlbWFwLmMgYi9tbS9tcmVtYXAuY1xuaW5kZXggZTljOGIxZDA1ODMyYmUuLmFlMzdlMGIzY2U3ODhlIDEwMDY0NFxuLS0tIGEvbW0vbXJlbWFwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21yZW1hcC5jXG5AQCAtMjQsNiAmIzQzOzI0LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tbXVfbm90aWZpZXIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VhY2Nlc3MuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VzZXJmYXVsdGZkX2suaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9odWdlX21tLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1wb2xpY3kuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BnYWxsb2MuaFx1MDAzZVxuIFxuQEAgLTY5LDYgJiM0Mzs3MCw3IEBAIHN0cnVjdCB2bWFfcmVtYXBfc3RydWN0IHtcbiBcdGVudW0gbXJlbWFwX3R5cGUgcmVtYXBfdHlwZTtcdC8qIGV4cGFuZCwgc2hyaW5rLCBldGMuICovXG4gXHRib29sIG1tYXBfbG9ja2VkO1x0XHQvKiBJcyBtbSBjdXJyZW50bHkgd3JpdGUtbG9ja2VkPyAqL1xuIFx0dW5zaWduZWQgbG9uZyBjaGFyZ2VkO1x0XHQvKiBJZiBWTV9BQ0NPVU5ULCAjIHBhZ2VzIHRvIGFjY291bnQuICovXG4mIzQzO1x0dW5zaWduZWQgbG9uZyByZXNlcnZlZF90aHBfY2hhcmdlZDsgLyogSWYgVk1fUkVTRVJWRURfVEhQLCAjIGhwYWdlcy4gKi9cbiBcdGJvb2wgdm1pX25lZWRzX2ludmFsaWRhdGU7XHQvKiBJcyB0aGUgVk1BIGl0ZXJhdG9yIGludmFsaWRhdGVkPyAqL1xuIH07XG4gXG5AQCAtOTYyLDYgJiM0Mzs5NjQsOSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyB2cm1fc2V0X25ld19hZGRyKHN0cnVjdCB2bWFfcmVtYXBfc3RydWN0ICp2cm0pXG4gXHRcdFx0XHRtYXBfZmxhZ3MpO1xuIFx0aWYgKElTX0VSUl9WQUxVRShyZXMpKVxuIFx0XHRyZXR1cm4gcmVzO1xuJiM0MztcdGlmICgodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9SRVNFUlZFRF9USFApIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAhSVNfQUxJR05FRChyZXMsIEhQQUdFX1BNRF9TSVpFKSlcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuIFxuIFx0dnJtLVx1MDAzZW5ld19hZGRyID0gcmVzO1xuIFx0cmV0dXJuIDA7XG5AQCAtOTc3LDI0ICYjNDM7OTgyLDQ0IEBAIHN0YXRpYyBib29sIHZybV9jYWxjX2NoYXJnZShzdHJ1Y3Qgdm1hX3JlbWFwX3N0cnVjdCAqdnJtKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgY2hhcmdlZDtcbiBcbi1cdGlmICghKHZybS1cdTAwM2V2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX0FDQ09VTlQpKVxuLVx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHR2cm0tXHUwMDNlY2hhcmdlZCA9IDA7XG4mIzQzO1x0dnJtLVx1MDAzZXJlc2VydmVkX3RocF9jaGFyZ2VkID0gMDtcbiBcbi1cdC8qXG4tXHQgKiBJZiB3ZSBkb24mIzM5O3QgdW5tYXAgdGhlIG9sZCBtYXBwaW5nLCB0aGVuIHdlIGFjY291bnQgdGhlIGVudGlyZXR5IG9mXG4tXHQgKiB0aGUgbGVuZ3RoIG9mIHRoZSBuZXcgb25lLiBPdGhlcndpc2UgaXQmIzM5O3MganVzdCB0aGUgZGVsdGEgaW4gc2l6ZS5cbi1cdCAqL1xuLVx0aWYgKHZybS1cdTAwM2VmbGFncyBcdTAwMjYgTVJFTUFQX0RPTlRVTk1BUClcbi1cdFx0Y2hhcmdlZCA9IHZybS1cdTAwM2VuZXdfbGVuIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuLVx0ZWxzZVxuLVx0XHRjaGFyZ2VkID0gdnJtLVx1MDAzZWRlbHRhIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuJiM0MztcdGlmICh2cm0tXHUwMDNldm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9BQ0NPVU5UKSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogSWYgd2UgZG9uJiMzOTt0IHVubWFwIHRoZSBvbGQgbWFwcGluZywgdGhlbiB3ZSBhY2NvdW50IHRoZVxuJiM0MztcdFx0ICogZW50aXJldHkgb2YgdGhlIGxlbmd0aCBvZiB0aGUgbmV3IG9uZS4gT3RoZXJ3aXNlIGl0JiMzOTtzIGp1c3RcbiYjNDM7XHRcdCAqIHRoZSBkZWx0YSBpbiBzaXplLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAodnJtLVx1MDAzZWZsYWdzIFx1MDAyNiBNUkVNQVBfRE9OVFVOTUFQKVxuJiM0MztcdFx0XHRjaGFyZ2VkID0gdnJtLVx1MDAzZW5ld19sZW4gXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdGNoYXJnZWQgPSB2cm0tXHUwMDNlZGVsdGEgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4gXG4gXG4tXHQvKiBUaGlzIGFjY291bnRzICYjMzk7Y2hhcmdlZCYjMzk7IHBhZ2VzIG9mIG1lbW9yeS4gKi9cbi1cdGlmIChzZWN1cml0eV92bV9lbm91Z2hfbWVtb3J5X21tKGN1cnJlbnQtXHUwMDNlbW0sIGNoYXJnZWQpKVxuLVx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0XHQvKiBUaGlzIGFjY291bnRzICYjMzk7Y2hhcmdlZCYjMzk7IHBhZ2VzIG9mIG1lbW9yeS4gKi9cbiYjNDM7XHRcdGlmIChzZWN1cml0eV92bV9lbm91Z2hfbWVtb3J5X21tKGN1cnJlbnQtXHUwMDNlbW0sIGNoYXJnZWQpKVxuJiM0MztcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4tXHR2cm0tXHUwMDNlY2hhcmdlZCA9IGNoYXJnZWQ7XG4mIzQzO1x0XHR2cm0tXHUwMDNlY2hhcmdlZCA9IGNoYXJnZWQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAodnJtLVx1MDAzZXZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fUkVTRVJWRURfVEhQKSB7XG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIGhwYWdlcztcbiYjNDM7XG4mIzQzO1x0XHRpZiAodnJtLVx1MDAzZWZsYWdzIFx1MDAyNiBNUkVNQVBfRE9OVFVOTUFQKVxuJiM0MztcdFx0XHRocGFnZXMgPSByZXNlcnZlZF90aHBfaHBhZ2VfbnIoMCwgdnJtLVx1MDAzZW5ld19sZW4pO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRocGFnZXMgPSByZXNlcnZlZF90aHBfaHBhZ2VfbnIoMCwgdnJtLVx1MDAzZWRlbHRhKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAocmVzZXJ2ZWRfdGhwX2NoYXJnZShocGFnZXMpKSB7XG4mIzQzO1x0XHRcdHZtX3VuYWNjdF9tZW1vcnkodnJtLVx1MDAzZWNoYXJnZWQpO1xuJiM0MztcdFx0XHR2cm0tXHUwMDNlY2hhcmdlZCA9IDA7XG4mIzQzO1x0XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHR2cm0tXHUwMDNlcmVzZXJ2ZWRfdGhwX2NoYXJnZWQgPSBocGFnZXM7XG4mIzQzO1x0fVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuQEAgLTEwMDQsMTEgJiM0MzsxMDI5LDEwIEBAIHN0YXRpYyBib29sIHZybV9jYWxjX2NoYXJnZShzdHJ1Y3Qgdm1hX3JlbWFwX3N0cnVjdCAqdnJtKVxuICAqL1xuIHN0YXRpYyB2b2lkIHZybV91bmNoYXJnZShzdHJ1Y3Qgdm1hX3JlbWFwX3N0cnVjdCAqdnJtKVxuIHtcbi1cdGlmICghKHZybS1cdTAwM2V2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX0FDQ09VTlQpKVxuLVx0XHRyZXR1cm47XG4tXG4gXHR2bV91bmFjY3RfbWVtb3J5KHZybS1cdTAwM2VjaGFyZ2VkKTtcbiBcdHZybS1cdTAwM2VjaGFyZ2VkID0gMDtcbiYjNDM7XHRyZXNlcnZlZF90aHBfdW5jaGFyZ2UodnJtLVx1MDAzZXJlc2VydmVkX3RocF9jaGFyZ2VkKTtcbiYjNDM7XHR2cm0tXHUwMDNlcmVzZXJ2ZWRfdGhwX2NoYXJnZWQgPSAwO1xuIH1cbiBcbiAvKlxuQEAgLTExNTcsOCAmIzQzOzExODEsOCBAQCBzdGF0aWMgdm9pZCB1bm1hcF9zb3VyY2Vfdm1hKHN0cnVjdCB2bWFfcmVtYXBfc3RydWN0ICp2cm0pXG4gXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHZybS1cdTAwM2V2bWE7XG4gXHRWTUFfSVRFUkFUT1Iodm1pLCBtbSwgYWRkcik7XG4gXHRpbnQgZXJyO1xuLVx0dW5zaWduZWQgbG9uZyB2bV9zdGFydDtcbi1cdHVuc2lnbmVkIGxvbmcgdm1fZW5kO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgdm1fc3RhcnQgPSAwO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgdm1fZW5kID0gMDtcbiBcdC8qXG4gXHQgKiBJdCBtaWdodCBzZWVtIG9kZCB0aGF0IHdlIGNoZWNrIGZvciBNUkVNQVBfRE9OVFVOTUFQIGhlcmUsIGdpdmVuIHRoaXNcbiBcdCAqIGZ1bmN0aW9uIGltcGxpZXMgdGhhdCB3ZSB1bm1hcCB0aGUgb3JpZ2luYWwgVk1BLCB3aGljaCBzZWVtc1xuQEAgLTExNzAsNiAmIzQzOzExOTQsOCBAQCBzdGF0aWMgdm9pZCB1bm1hcF9zb3VyY2Vfdm1hKHN0cnVjdCB2bWFfcmVtYXBfc3RydWN0ICp2cm0pXG4gXHQgKi9cbiBcdGJvb2wgYWNjb3VudGFibGVfbW92ZSA9ICh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX0FDQ09VTlQpIFx1MDAyNlx1MDAyNlxuIFx0XHQhKHZybS1cdTAwM2VmbGFncyBcdTAwMjYgTVJFTUFQX0RPTlRVTk1BUCk7XG4mIzQzO1x0Ym9vbCByZXNlcnZlZF90aHBfbW92ZSA9ICh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1JFU0VSVkVEX1RIUCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQhKHZybS1cdTAwM2VmbGFncyBcdTAwMjYgTVJFTUFQX0RPTlRVTk1BUCk7XG4gXG4gXHQvKlxuIFx0ICogU28gd2UgcGVyZm9ybSBhIHRyaWNrIGhlcmUgdG8gcHJldmVudCBpbmNvcnJlY3QgYWNjb3VudGluZy4gQW55IG1lcmdlXG5AQCAtMTE5Miw2ICYjNDM7MTIxOCwxMyBAQCBzdGF0aWMgdm9pZCB1bm1hcF9zb3VyY2Vfdm1hKHN0cnVjdCB2bWFfcmVtYXBfc3RydWN0ICp2cm0pXG4gXHRcdHZtX3N0YXJ0ID0gdm1hLVx1MDAzZXZtX3N0YXJ0O1xuIFx0XHR2bV9lbmQgPSB2bWEtXHUwMDNldm1fZW5kO1xuIFx0fVxuJiM0MztcdGlmIChyZXNlcnZlZF90aHBfbW92ZSkge1xuJiM0MztcdFx0dm1fZmxhZ3NfY2xlYXIodm1hLCBWTV9SRVNFUlZFRF9USFApO1xuJiM0MztcdFx0aWYgKCFhY2NvdW50YWJsZV9tb3ZlKSB7XG4mIzQzO1x0XHRcdHZtX3N0YXJ0ID0gdm1hLVx1MDAzZXZtX3N0YXJ0O1xuJiM0MztcdFx0XHR2bV9lbmQgPSB2bWEtXHUwMDNldm1fZW5kO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiBcbiBcdGVyciA9IGRvX3ZtaV9tdW5tYXAoXHUwMDI2dm1pLCBtbSwgYWRkciwgbGVuLCB2cm0tXHUwMDNldWZfdW5tYXAsIC8qIHVubG9jaz0gKi9mYWxzZSk7XG4gXHR2cm0tXHUwMDNldm1hID0gTlVMTDsgLyogSW52YWxpZGF0ZWQuICovXG5AQCAtMTIyNywxOSAmIzQzOzEyNjAsMjcgQEAgc3RhdGljIHZvaWQgdW5tYXBfc291cmNlX3ZtYShzdHJ1Y3Qgdm1hX3JlbWFwX3N0cnVjdCAqdnJtKVxuIFx0ICpcbiBcdCAqIGRvX3ZtaV9tdW5tYXAoKSB3aWxsIGhhdmUgcmVzdG9yZWQgdGhlIFZNSSBiYWNrIHRvIGFkZHIuXG4gXHQgKi9cbi1cdGlmIChhY2NvdW50YWJsZV9tb3ZlKSB7XG4mIzQzO1x0aWYgKGFjY291bnRhYmxlX21vdmUgfHwgcmVzZXJ2ZWRfdGhwX21vdmUpIHtcbiBcdFx0dW5zaWduZWQgbG9uZyBlbmQgPSBhZGRyICYjNDM7IGxlbjtcbi1cbi1cdFx0aWYgKHZtX3N0YXJ0IFx1MDAzYyBhZGRyKSB7XG4tXHRcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICpwcmV2ID0gdm1hX3ByZXYoXHUwMDI2dm1pKTtcbi1cbi1cdFx0XHR2bV9mbGFnc19zZXQocHJldiwgVk1fQUNDT1VOVCk7IC8qIEFjcXVpcmVzIFZNQSBsb2NrLiAqL1xuJiM0MztcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICpwcmV2ID0gTlVMTDtcbiYjNDM7XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqbmV4dCA9IE5VTEw7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHZtX3N0YXJ0IFx1MDAzYyBhZGRyKVxuJiM0MztcdFx0XHRwcmV2ID0gdm1hX3ByZXYoXHUwMDI2dm1pKTtcbiYjNDM7XHRcdGlmICh2bV9lbmQgXHUwMDNlIGVuZClcbiYjNDM7XHRcdFx0bmV4dCA9IHZtYV9uZXh0KFx1MDAyNnZtaSk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGFjY291bnRhYmxlX21vdmUpIHtcbiYjNDM7XHRcdFx0aWYgKHByZXYpXG4mIzQzO1x0XHRcdFx0dm1fZmxhZ3Nfc2V0KHByZXYsIFZNX0FDQ09VTlQpOyAvKiBBY3F1aXJlcyBWTUEgbG9jay4gKi9cbiYjNDM7XHRcdFx0aWYgKG5leHQpXG4mIzQzO1x0XHRcdFx0dm1fZmxhZ3Nfc2V0KG5leHQsIFZNX0FDQ09VTlQpOyAvKiBBY3F1aXJlcyBWTUEgbG9jay4gKi9cbiBcdFx0fVxuLVxuLVx0XHRpZiAodm1fZW5kIFx1MDAzZSBlbmQpIHtcbi1cdFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKm5leHQgPSB2bWFfbmV4dChcdTAwMjZ2bWkpO1xuLVxuLVx0XHRcdHZtX2ZsYWdzX3NldChuZXh0LCBWTV9BQ0NPVU5UKTsgLyogQWNxdWlyZXMgVk1BIGxvY2suICovXG4mIzQzO1x0XHRpZiAocmVzZXJ2ZWRfdGhwX21vdmUpIHtcbiYjNDM7XHRcdFx0aWYgKHByZXYpXG4mIzQzO1x0XHRcdFx0dm1fZmxhZ3Nfc2V0KHByZXYsIFZNX1JFU0VSVkVEX1RIUCk7XG4mIzQzO1x0XHRcdGlmIChuZXh0KVxuJiM0MztcdFx0XHRcdHZtX2ZsYWdzX3NldChuZXh0LCBWTV9SRVNFUlZFRF9USFApO1xuIFx0XHR9XG4gXHR9XG4gfVxuQEAgLTEzMDksNyAmIzQzOzEzNTAsNiBAQCBzdGF0aWMgaW50IGNvcHlfdm1hX2FuZF9kYXRhKHN0cnVjdCB2bWFfcmVtYXBfc3RydWN0ICp2cm0sXG4gXHQqbmV3X3ZtYV9wdHIgPSBuZXdfdm1hO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4tXG4gLypcbiAgKiBQZXJmb3JtIGZpbmFsIHRhc2tzIGZvciBNQURWX0RPTlRVTk1BUCBvcGVyYXRpb24sIGNsZWFyaW5nIG1sb2NrKCkgZmxhZyBvblxuICAqIHJlbWFpbmluZyBWTUEgYnkgY29udmVudGlvbiAoaXQgY2Fubm90IGJlIG1sb2NrKCkmIzM5O2QgYW55IGxvbmdlciwgYXMgcGFnZXMgaW5cbkBAIC0xNTc2LDYgJiM0MzsxNjE2LDIzIEBAIHN0YXRpYyBib29sIGFsaWduX2h1Z2V0bGIoc3RydWN0IHZtYV9yZW1hcF9zdHJ1Y3QgKnZybSlcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbiYjNDM7c3RhdGljIGJvb2wgY2hlY2tfcmVzZXJ2ZWRfdGhwX2FsaWdubWVudChzdHJ1Y3Qgdm1hX3JlbWFwX3N0cnVjdCAqdnJtKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCEodnJtLVx1MDAzZXZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fUkVTRVJWRURfVEhQKSlcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcbiYjNDM7XHRpZiAoIUlTX0FMSUdORUQodnJtLVx1MDAzZWFkZHIsIEhQQUdFX1BNRF9TSVpFKSB8fFxuJiM0MztcdCAgICAhSVNfQUxJR05FRCh2cm0tXHUwMDNlb2xkX2xlbiwgSFBBR0VfUE1EX1NJWkUpIHx8XG4mIzQzO1x0ICAgICFJU19BTElHTkVEKHZybS1cdTAwM2VuZXdfbGVuLCBIUEFHRV9QTURfU0laRSkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGlmICgodnJtLVx1MDAzZXJlbWFwX3R5cGUgPT0gTVJFTUFQX0VYUEFORCB8fCB2cm1faW1wbGllc19uZXdfYWRkcih2cm0pKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIUlTX0FMSUdORUQodnJtLVx1MDAzZW5ld19hZGRyLCBIUEFHRV9QTURfU0laRSkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogV2UgYXJlIG1yZW1hcCgpJiMzOTtpbmcgd2l0aG91dCBzcGVjaWZ5aW5nIGEgZml4ZWQgYWRkcmVzcyB0byBtb3ZlIHRvLCBidXQgYXJlXG4gICogcmVxdWVzdGluZyB0aGF0IHRoZSBWTUEmIzM5O3Mgc2l6ZSBiZSBpbmNyZWFzZWQuXG5AQCAtMTc0NSw2ICYjNDM7MTgwMiw4IEBAIHN0YXRpYyBpbnQgY2hlY2tfcHJlcF92bWEoc3RydWN0IHZtYV9yZW1hcF9zdHJ1Y3QgKnZybSlcbiBcdC8qIEZvciBjb252ZW5pZW5jZSwgd2Ugc2V0IG5ld19hZGRyIGV2ZW4gaWYgVk1BIHdvbiYjMzk7dCBtb3ZlLiAqL1xuIFx0aWYgKCF2cm1faW1wbGllc19uZXdfYWRkcih2cm0pKVxuIFx0XHR2cm0tXHUwMDNlbmV3X2FkZHIgPSBhZGRyO1xuJiM0MztcdGlmICghY2hlY2tfcmVzZXJ2ZWRfdGhwX2FsaWdubWVudCh2cm0pKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHQvKiBCZWxvdyBvbmx5IG1lYW5pbmdmdWwgaWYgd2UgZXhwYW5kIG9yIG1vdmUgYSBWTUEuICovXG4gXHRpZiAoIXZybV93aWxsX21hcF9uZXcodnJtKSlcbmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmNcbmluZGV4IGVlOTAyYTQ2OGMyZjViLi42NjBlNTAxYmY2NzZiNiAxMDA2NDRcbi0tLSBhL21tL3BhZ2VfYWxsb2MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZV9hbGxvYy5jXG5AQCAtMjYzLDYgJiM0MzsyNjMsNyBAQCBjb25zdCBjaGFyICogY29uc3QgbWlncmF0ZXR5cGVfbmFtZXNbTUlHUkFURV9UWVBFU10gPSB7XG4gI2lmZGVmIENPTkZJR19DTUFcbiBcdFwmIzM0O0NNQVwmIzM0OyxcbiAjZW5kaWZcbiYjNDM7XHRcJiMzNDtSZXNlcnZlVEhQXCYjMzQ7LFxuICNpZmRlZiBDT05GSUdfTUVNT1JZX0lTT0xBVElPTlxuIFx0XCYjMzQ7SXNvbGF0ZVwmIzM0OyxcbiAjZW5kaWZcbkBAIC03ODQsNiAmIzQzOzc4NSw5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBhY2NvdW50X2ZyZWVwYWdlcyhzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IG5yX3BhZ2VzLFxuIFx0ZWxzZSBpZiAobWlncmF0ZXR5cGUgPT0gTUlHUkFURV9ISUdIQVRPTUlDKVxuIFx0XHRXUklURV9PTkNFKHpvbmUtXHUwMDNlbnJfZnJlZV9oaWdoYXRvbWljLFxuIFx0XHRcdCAgIHpvbmUtXHUwMDNlbnJfZnJlZV9oaWdoYXRvbWljICYjNDM7IG5yX3BhZ2VzKTtcbiYjNDM7XHRlbHNlIGlmIChtaWdyYXRldHlwZSA9PSBNSUdSQVRFX1JFU0VSVkVEX1RIUClcbiYjNDM7XHRcdFdSSVRFX09OQ0Uoem9uZS1cdTAwM2Vucl9mcmVlX3Jlc2VydmVkX3RocCxcbiYjNDM7XHRcdFx0ICAgem9uZS1cdTAwM2Vucl9mcmVlX3Jlc2VydmVkX3RocCAmIzQzOyBucl9wYWdlcyk7XG4gfVxuIFxuIC8qIFVzZWQgZm9yIHBhZ2VzIG5vdCBvbiBhbm90aGVyIGxpc3QgKi9cbkBAIC0yNDU2LDYgJiM0MzsyNDYwLDkgQEAgX19ybXF1ZXVlKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBtaWdyYXRldHlwZSxcbiB7XG4gXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbiBcbiYjNDM7XHRpZiAoYWxsb2NfZmxhZ3MgXHUwMDI2IEFMTE9DX1JFU0VSVkVEX1RIUClcbiYjNDM7XHRcdHJldHVybiBfX3JtcXVldWVfc21hbGxlc3Qoem9uZSwgb3JkZXIsIE1JR1JBVEVfUkVTRVJWRURfVEhQKTtcbiYjNDM7XG4gXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQ01BKSkge1xuIFx0XHQvKlxuIFx0XHQgKiBCYWxhbmNlIG1vdmFibGUgYWxsb2NhdGlvbnMgYmV0d2VlbiByZWd1bGFyIGFuZCBDTUEgYXJlYXMgYnlcbkBAIC0yOTYwLDcgJiM0MzsyOTY3LDggQEAgc3RhdGljIHZvaWQgX19mcmVlX2Zyb3plbl9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLFxuIFx0em9uZSA9IHBhZ2Vfem9uZShwYWdlKTtcbiBcdG1pZ3JhdGV0eXBlID0gZ2V0X3BmbmJsb2NrX21pZ3JhdGV0eXBlKHBhZ2UsIHBmbik7XG4gXHRpZiAodW5saWtlbHkobWlncmF0ZXR5cGUgXHUwMDNlPSBNSUdSQVRFX1BDUFRZUEVTKSkge1xuLVx0XHRpZiAodW5saWtlbHkoaXNfbWlncmF0ZV9pc29sYXRlKG1pZ3JhdGV0eXBlKSkpIHtcbiYjNDM7XHRcdGlmICh1bmxpa2VseShpc19taWdyYXRlX3Jlc2VydmVkX3RocChtaWdyYXRldHlwZSkgfHxcbiYjNDM7XHRcdFx0ICAgICBpc19taWdyYXRlX2lzb2xhdGUobWlncmF0ZXR5cGUpKSkge1xuIFx0XHRcdGZyZWVfb25lX3BhZ2Uoem9uZSwgcGFnZSwgcGZuLCBvcmRlciwgZnBpX2ZsYWdzKTtcbiBcdFx0XHRyZXR1cm47XG4gXHRcdH1cbkBAIC0zMDM4LDYgJiM0MzszMDQ2LDcgQEAgdm9pZCBmcmVlX3VucmVmX2ZvbGlvcyhzdHJ1Y3QgZm9saW9fYmF0Y2ggKmZvbGlvcylcbiBcbiBcdFx0LyogRGlmZmVyZW50IHpvbmUgcmVxdWlyZXMgYSBkaWZmZXJlbnQgcGNwIGxvY2sgKi9cbiBcdFx0aWYgKHpvbmUgIT0gbG9ja2VkX3pvbmUgfHxcbiYjNDM7XHRcdCAgICBpc19taWdyYXRlX3Jlc2VydmVkX3RocChtaWdyYXRldHlwZSkgfHxcbiBcdFx0ICAgIGlzX21pZ3JhdGVfaXNvbGF0ZShtaWdyYXRldHlwZSkpIHtcbiBcdFx0XHRpZiAocGNwKSB7XG4gXHRcdFx0XHRwY3Bfc3Bpbl91bmxvY2socGNwKTtcbkBAIC0zMDQ1LDYgJiM0MzszMDU0LDEyIEBAIHZvaWQgZnJlZV91bnJlZl9mb2xpb3Moc3RydWN0IGZvbGlvX2JhdGNoICpmb2xpb3MpXG4gXHRcdFx0XHRwY3AgPSBOVUxMO1xuIFx0XHRcdH1cbiBcbiYjNDM7XHRcdFx0aWYgKGlzX21pZ3JhdGVfcmVzZXJ2ZWRfdGhwKG1pZ3JhdGV0eXBlKSkge1xuJiM0MztcdFx0XHRcdGZyZWVfb25lX3BhZ2Uoem9uZSwgXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSwgcGZuLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgb3JkZXIsIEZQSV9OT05FKTtcbiYjNDM7XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcbiBcdFx0XHQvKlxuIFx0XHRcdCAqIEZyZWUgaXNvbGF0ZWQgcGFnZXMgZGlyZWN0bHkgdG8gdGhlXG4gXHRcdFx0ICogYWxsb2NhdG9yLCBzZWUgY29tbWVudCBpbiBmcmVlX2Zyb3plbl9wYWdlcy5cbkBAIC0zMjM1LDcgJiM0MzszMjUwLDggQEAgc3RydWN0IHBhZ2UgKnJtcXVldWVfYnVkZHkoc3RydWN0IHpvbmUgKnByZWZlcnJlZF96b25lLCBzdHJ1Y3Qgem9uZSAqem9uZSxcbiBcdFx0XHQgKiByZXNlcnZlcyBhcyBmYWlsaW5nIG5vdyBpcyB3b3JzZSB0aGFuIGZhaWxpbmcgYVxuIFx0XHRcdCAqIGhpZ2gtb3JkZXIgYXRvbWljIGFsbG9jYXRpb24gaW4gdGhlIGZ1dHVyZS5cbiBcdFx0XHQgKi9cbi1cdFx0XHRpZiAoIXBhZ2UgXHUwMDI2XHUwMDI2IChhbGxvY19mbGFncyBcdTAwMjYgKEFMTE9DX09PTXxBTExPQ19OT05fQkxPQ0spKSlcbiYjNDM7XHRcdFx0aWYgKCFwYWdlIFx1MDAyNlx1MDAyNiAhKGFsbG9jX2ZsYWdzIFx1MDAyNiBBTExPQ19SRVNFUlZFRF9USFApIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgICAgKGFsbG9jX2ZsYWdzIFx1MDAyNiAoQUxMT0NfT09NfEFMTE9DX05PTl9CTE9DSykpKVxuIFx0XHRcdFx0cGFnZSA9IF9fcm1xdWV1ZV9zbWFsbGVzdCh6b25lLCBvcmRlciwgTUlHUkFURV9ISUdIQVRPTUlDKTtcbiBcbiBcdFx0XHRpZiAoIXBhZ2UpIHtcbkBAIC0zNDA1LDcgJiM0MzszNDIxLDggQEAgc3RydWN0IHBhZ2UgKnJtcXVldWUoc3RydWN0IHpvbmUgKnByZWZlcnJlZF96b25lLFxuIHtcbiBcdHN0cnVjdCBwYWdlICpwYWdlO1xuIFxuLVx0aWYgKGxpa2VseShwY3BfYWxsb3dlZF9vcmRlcihvcmRlcikpKSB7XG4mIzQzO1x0aWYgKGxpa2VseShwY3BfYWxsb3dlZF9vcmRlcihvcmRlcikpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAhKGFsbG9jX2ZsYWdzIFx1MDAyNiBBTExPQ19SRVNFUlZFRF9USFApKSB7XG4gXHRcdHBhZ2UgPSBybXF1ZXVlX3BjcGxpc3QocHJlZmVycmVkX3pvbmUsIHpvbmUsIG9yZGVyLFxuIFx0XHRcdFx0ICAgICAgIG1pZ3JhdGV0eXBlLCBhbGxvY19mbGFncyk7XG4gXHRcdGlmIChsaWtlbHkocGFnZSkpXG5AQCAtMzU1Niw2ICYjNDM7MzU3MywzNSBAQCBzdGF0aWMgYm9vbCB1bnJlc2VydmVfaGlnaGF0b21pY19wYWdlYmxvY2soY29uc3Qgc3RydWN0IGFsbG9jX2NvbnRleHQgKmFjLFxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbiYjNDM7dW5zaWduZWQgbG9uZyByZXNlcnZlZF90aHBfcGFnZWJsb2Nrcyh1bnNpZ25lZCBsb25nIG5yX2hwYWdlcylcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGludCBvcmRlciA9IG1heF90KHVuc2lnbmVkIGludCwgSFBBR0VfUE1EX09SREVSLFxuJiM0MztcdFx0XHRcdCAgIHBhZ2VibG9ja19vcmRlcik7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBocGFnZXNfcGVyX2Jsb2NrID0gMVVMIFx1MDAzY1x1MDAzYyAob3JkZXIgLSBIUEFHRV9QTURfT1JERVIpO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWQgPSAwO1xuJiM0MztcdGdmcF90IGdmcCA9IChHRlBfSElHSFVTRVIgfCBfX0dGUF9DT01QIHwgX19HRlBfTk9NRU1BTExPQyB8XG4mIzQzO1x0XHQgICAgIF9fR0ZQX05PV0FSTiB8IF9fR0ZQX05PUkVUUlkpO1xuJiM0MztcbiYjNDM7XHR3aGlsZSAocmVzZXJ2ZWQgXHUwMDNjIG5yX2hwYWdlcykge1xuJiM0MztcdFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4mIzQzO1x0XHRzdHJ1Y3Qgem9uZSAqem9uZTtcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4mIzQzO1xuJiM0MztcdFx0cGFnZSA9IGFsbG9jX3BhZ2VzKGdmcCwgb3JkZXIpO1xuJiM0MztcdFx0aWYgKCFwYWdlKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0XHR6b25lID0gcGFnZV96b25lKHBhZ2UpO1xuJiM0MztcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2em9uZS1cdTAwM2Vsb2NrLCBmbGFncyk7XG4mIzQzO1x0XHRjaGFuZ2VfcGFnZWJsb2NrX3JhbmdlKHBhZ2UsIG9yZGVyLCBNSUdSQVRFX1JFU0VSVkVEX1RIUCk7XG4mIzQzO1x0XHR6b25lLVx1MDAzZW5yX3Jlc2VydmVkX3RocCAmIzQzOz0gMVVMIFx1MDAzY1x1MDAzYyBvcmRlcjtcbiYjNDM7XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2em9uZS1cdTAwM2Vsb2NrLCBmbGFncyk7XG4mIzQzO1x0XHRfX2ZyZWVfcGFnZXMocGFnZSwgb3JkZXIpO1xuJiM0MztcdFx0cmVzZXJ2ZWQgJiM0Mzs9IGhwYWdlc19wZXJfYmxvY2s7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiByZXNlcnZlZDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW5saW5lIGxvbmcgX196b25lX3dhdGVybWFya191bnVzYWJsZV9mcmVlKHN0cnVjdCB6b25lICp6LFxuIFx0XHRcdFx0dW5zaWduZWQgaW50IG9yZGVyLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXG4ge1xuQEAgLTM1NjgsNiAmIzQzOzM2MTQsOSBAQCBzdGF0aWMgaW5saW5lIGxvbmcgX196b25lX3dhdGVybWFya191bnVzYWJsZV9mcmVlKHN0cnVjdCB6b25lICp6LFxuIFx0aWYgKGxpa2VseSghKGFsbG9jX2ZsYWdzIFx1MDAyNiBBTExPQ19SRVNFUlZFUykpKVxuIFx0XHR1bnVzYWJsZV9mcmVlICYjNDM7PSBSRUFEX09OQ0Uoei1cdTAwM2Vucl9mcmVlX2hpZ2hhdG9taWMpO1xuIFxuJiM0MztcdGlmICghKGFsbG9jX2ZsYWdzIFx1MDAyNiBBTExPQ19SRVNFUlZFRF9USFApKVxuJiM0MztcdFx0dW51c2FibGVfZnJlZSAmIzQzOz0gUkVBRF9PTkNFKHotXHUwMDNlbnJfZnJlZV9yZXNlcnZlZF90aHApO1xuJiM0MztcbiAjaWZkZWYgQ09ORklHX0NNQVxuIFx0LyogSWYgYWxsb2NhdGlvbiBjYW4mIzM5O3QgdXNlIENNQSBhcmVhcyBkb24mIzM5O3QgdXNlIGZyZWUgQ01BIHBhZ2VzICovXG4gXHRpZiAoIShhbGxvY19mbGFncyBcdTAwMjYgQUxMT0NfQ01BKSlcbkBAIC0zNjQyLDYgJiM0MzszNjkxLDEyIEBAIGJvb2wgX196b25lX3dhdGVybWFya19vayhzdHJ1Y3Qgem9uZSAqeiwgdW5zaWduZWQgaW50IG9yZGVyLCB1bnNpZ25lZCBsb25nIG1hcmssXG4gXHRcdGlmICghYXJlYS1cdTAwM2Vucl9mcmVlKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuJiM0MztcdFx0aWYgKGFsbG9jX2ZsYWdzIFx1MDAyNiBBTExPQ19SRVNFUlZFRF9USFApIHtcbiYjNDM7XHRcdFx0aWYgKCFmcmVlX2FyZWFfZW1wdHkoYXJlYSwgTUlHUkFURV9SRVNFUlZFRF9USFApKVxuJiM0MztcdFx0XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4gXHRcdGZvciAobXQgPSAwOyBtdCBcdTAwM2MgTUlHUkFURV9QQ1BUWVBFUzsgbXQmIzQzOyYjNDM7KSB7XG4gXHRcdFx0aWYgKCFmcmVlX2FyZWFfZW1wdHkoYXJlYSwgbXQpKVxuIFx0XHRcdFx0cmV0dXJuIHRydWU7XG5AQCAtMzg3Niw2ICYjNDM7MzkzMSw5IEBAIGdldF9wYWdlX2Zyb21fZnJlZWxpc3QoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlciwgaW50IGFsbG9jX2ZsYWdzLFxuIFxuIFx0XHRjb25kX2FjY2VwdF9tZW1vcnkoem9uZSwgb3JkZXIsIGFsbG9jX2ZsYWdzKTtcbiBcbiYjNDM7XHRcdGlmIChhbGxvY19mbGFncyBcdTAwMjYgQUxMT0NfUkVTRVJWRURfVEhQKVxuJiM0MztcdFx0XHRnb3RvIHRyeV90aGlzX3pvbmU7XG4mIzQzO1xuIFx0XHQvKlxuIFx0XHQgKiBEZXRlY3Qgd2hldGhlciB0aGUgbnVtYmVyIG9mIGZyZWUgcGFnZXMgaXMgYmVsb3cgaGlnaFxuIFx0XHQgKiB3YXRlcm1hcmsuICBJZiBzbywgd2Ugd2lsbCBkZWNyZWFzZSBwY3AtXHUwMDNlaGlnaCBhbmQgZnJlZVxuQEAgLTUwMzMsNiAmIzQzOzUwOTEsMTUgQEAgc3RhdGljIGlubGluZSBib29sIHByZXBhcmVfYWxsb2NfcGFnZXMoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcbiBcdGFjLVx1MDAzZW5vZGVtYXNrID0gbm9kZW1hc2s7XG4gXHRhYy1cdTAwM2VtaWdyYXRldHlwZSA9IGdmcF9taWdyYXRldHlwZShnZnBfbWFzayk7XG4gXG4mIzQzO1x0aWYgKGdmcF9tYXNrIFx1MDAyNiBfX0dGUF9SRVNFUlZFRF9USFApIHtcbiYjNDM7XHRcdGlmICghSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIHx8XG4mIzQzO1x0XHQgICAgV0FSTl9PTl9PTkNFX0dGUChvcmRlciAhPSBIUEFHRV9QTURfT1JERVIsIGdmcF9tYXNrKSlcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRcdGFjLVx1MDAzZW1pZ3JhdGV0eXBlID0gTUlHUkFURV9SRVNFUlZFRF9USFA7XG4mIzQzO1x0XHQqYWxsb2NfZmxhZ3MgfD0gQUxMT0NfUkVTRVJWRURfVEhQO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRpZiAoY3B1c2V0c19lbmFibGVkKCkpIHtcbiBcdFx0KmFsbG9jX2dmcCB8PSBfX0dGUF9IQVJEV0FMTDtcbiBcdFx0LypcbmRpZmYgLS1naXQgYS9tbS9yZXNlcnZlZF90aHAuYyBiL21tL3Jlc2VydmVkX3RocC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjkzMWM1MzljMTVhNzA5XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9yZXNlcnZlZF90aHAuY1xuQEAgLTAsMCAmIzQzOzEsMTMzIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tbS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFwmIzM0O2ludGVybmFsLmhcJiMzNDtcbiYjNDM7XG4mIzQzO3N0YXRpYyBERUZJTkVfU1BJTkxPQ0socmVzZXJ2ZWRfdGhwX2xvY2spO1xuJiM0MztcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWRfdGhwX2NtZGxpbmVfc2l6ZSBfX2luaXRkYXRhID0gSFBBR0VfUE1EX1NJWkU7XG4mIzQzO3N0YXRpYyBib29sIHJlc2VydmVkX3RocF9jbWRsaW5lX3NpemVfdmFsaWQgX19pbml0ZGF0YSA9IHRydWU7XG4mIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIHJlc2VydmVkX3RocF9yZXF1ZXN0ZWQgX19pbml0ZGF0YTtcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWRfdGhwX3RvdGFsO1xuJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyByZXNlcnZlZF90aHBfdXNlZDtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgX19pbml0IHNldHVwX3Jlc2VydmVkX3RocF9zaXplKGNoYXIgKnN0cilcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgc2l6ZTtcbiYjNDM7XHRzaXplID0gbWVtcGFyc2Uoc3RyLCBOVUxMKTtcbiYjNDM7XHRpZiAoc2l6ZSAhPSBIUEFHRV9QTURfU0laRSkge1xuJiM0MztcdFx0cHJfd2FybihcJiMzNDt1bnN1cHBvcnRlZCB0aHBfcmVzZXJ2ZWRfc2l6ZT0lcywgb25seSAlbHUgaXMgc3VwcG9ydGVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRzdHIsIEhQQUdFX1BNRF9TSVpFKTtcbiYjNDM7XHRcdHJlc2VydmVkX3RocF9jbWRsaW5lX3NpemVfdmFsaWQgPSBmYWxzZTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XHRyZXNlcnZlZF90aHBfY21kbGluZV9zaXplID0gc2l6ZTtcbiYjNDM7XHRyZXNlcnZlZF90aHBfY21kbGluZV9zaXplX3ZhbGlkID0gdHJ1ZTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztlYXJseV9wYXJhbShcJiMzNDt0aHBfcmVzZXJ2ZWRfc2l6ZVwmIzM0Oywgc2V0dXBfcmVzZXJ2ZWRfdGhwX3NpemUpO1xuJiM0MztzdGF0aWMgaW50IF9faW5pdCBzZXR1cF9yZXNlcnZlZF90aHBfbnIoY2hhciAqc3RyKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGNvdW50O1xuJiM0MztcdGlmIChzc2NhbmYoc3RyLCBcJiMzNDslbHUlblwmIzM0OywgXHUwMDI2cmVzZXJ2ZWRfdGhwX3JlcXVlc3RlZCwgXHUwMDI2Y291bnQpICE9IDEgfHxcbiYjNDM7XHQgICAgc3RyW2NvdW50XSkge1xuJiM0MztcdFx0cHJfd2FybihcJiMzNDtpbnZhbGlkIHRocF9yZXNlcnZlZF9ucj0lc1xcblwmIzM0Oywgc3RyKTtcbiYjNDM7XHRcdHJlc2VydmVkX3RocF9yZXF1ZXN0ZWQgPSAwO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO2Vhcmx5X3BhcmFtKFwmIzM0O3RocF9yZXNlcnZlZF9uclwmIzM0Oywgc2V0dXBfcmVzZXJ2ZWRfdGhwX25yKTtcbiYjNDM7XG4mIzQzO3Vuc2lnbmVkIGxvbmcgcmVzZXJ2ZWRfdGhwX2hwYWdlX25yKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIChlbmQgLSBzdGFydCkgXHUwMDNlXHUwMDNlIEhQQUdFX1BNRF9TSElGVDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHJlc2VydmVkX3RocF9jaGFyZ2UodW5zaWduZWQgbG9uZyBucl9ocGFnZXMpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFucl9ocGFnZXMpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0c3Bpbl9sb2NrKFx1MDAyNnJlc2VydmVkX3RocF9sb2NrKTtcbiYjNDM7XHRpZiAobnJfaHBhZ2VzIFx1MDAzZSByZXNlcnZlZF90aHBfdG90YWwgLSByZXNlcnZlZF90aHBfdXNlZClcbiYjNDM7XHRcdHJldCA9IC1FTk9NRU07XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0cmVzZXJ2ZWRfdGhwX3VzZWQgJiM0Mzs9IG5yX2hwYWdlcztcbiYjNDM7XHRzcGluX3VubG9jayhcdTAwMjZyZXNlcnZlZF90aHBfbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgcmVzZXJ2ZWRfdGhwX3VuY2hhcmdlKHVuc2lnbmVkIGxvbmcgbnJfaHBhZ2VzKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFucl9ocGFnZXMpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHNwaW5fbG9jayhcdTAwMjZyZXNlcnZlZF90aHBfbG9jayk7XG4mIzQzO1x0aWYgKFdBUk5fT05fT05DRShucl9ocGFnZXMgXHUwMDNlIHJlc2VydmVkX3RocF91c2VkKSlcbiYjNDM7XHRcdHJlc2VydmVkX3RocF91c2VkID0gMDtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRyZXNlcnZlZF90aHBfdXNlZCAtPSBucl9ocGFnZXM7XG4mIzQzO1x0c3Bpbl91bmxvY2soXHUwMDI2cmVzZXJ2ZWRfdGhwX2xvY2spO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3NpemVfdCB0b3RhbF9ocGFnZXNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbiYjNDM7XHRcdFx0XHQgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwmIzM0OyVsdVxcblwmIzM0OywgUkVBRF9PTkNFKHJlc2VydmVkX3RocF90b3RhbCkpO1xuJiM0Mzt9XG4mIzQzO3N0YXRpYyBzc2l6ZV90IGZyZWVfaHBhZ2VzX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4mIzQzO1x0XHRcdFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZyZWVfaHBhZ2VzO1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2soXHUwMDI2cmVzZXJ2ZWRfdGhwX2xvY2spO1xuJiM0MztcdGZyZWVfaHBhZ2VzID0gcmVzZXJ2ZWRfdGhwX3RvdGFsIC0gcmVzZXJ2ZWRfdGhwX3VzZWQ7XG4mIzQzO1x0c3Bpbl91bmxvY2soXHUwMDI2cmVzZXJ2ZWRfdGhwX2xvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwmIzM0OyVsdVxcblwmIzM0OywgZnJlZV9ocGFnZXMpO1xuJiM0Mzt9XG4mIzQzO3N0YXRpYyBzc2l6ZV90IHVzZWRfaHBhZ2VzX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4mIzQzO1x0XHRcdFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwmIzM0OyVsdVxcblwmIzM0OywgUkVBRF9PTkNFKHJlc2VydmVkX3RocF91c2VkKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgdG90YWxfaHBhZ2VzX2F0dHIgPSBfX0FUVFJfUk8odG90YWxfaHBhZ2VzKTtcbiYjNDM7c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBmcmVlX2hwYWdlc19hdHRyID0gX19BVFRSX1JPKGZyZWVfaHBhZ2VzKTtcbiYjNDM7c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSB1c2VkX2hwYWdlc19hdHRyID0gX19BVFRSX1JPKHVzZWRfaHBhZ2VzKTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpyZXNlcnZlZF90aHBfYXR0cnNbXSA9IHtcbiYjNDM7XHRcdTAwMjZ0b3RhbF9ocGFnZXNfYXR0ci5hdHRyLFxuJiM0MztcdFx1MDAyNmZyZWVfaHBhZ2VzX2F0dHIuYXR0cixcbiYjNDM7XHRcdTAwMjZ1c2VkX2hwYWdlc19hdHRyLmF0dHIsXG4mIzQzO1x0TlVMTCxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIHJlc2VydmVkX3RocF9hdHRyX2dyb3VwID0ge1xuJiM0MztcdC5hdHRycyA9IHJlc2VydmVkX3RocF9hdHRycyxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgX19pbml0IHJlc2VydmVkX3RocF9pbml0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga29iamVjdCAqa29iajtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAocmVzZXJ2ZWRfdGhwX3JlcXVlc3RlZCBcdTAwMjZcdTAwMjYgcmVzZXJ2ZWRfdGhwX2NtZGxpbmVfc2l6ZV92YWxpZCkge1xuJiM0MztcdFx0cmVzZXJ2ZWRfdGhwX3RvdGFsID0gcmVzZXJ2ZWRfdGhwX3BhZ2VibG9ja3MocmVzZXJ2ZWRfdGhwX3JlcXVlc3RlZCk7XG4mIzQzO1x0XHRwcl9pbmZvKFwmIzM0O3Jlc2VydmVkICVsdS8lbHUgUE1EIFRIUCBwYWdlYmxvY2tzICglbHUgYnl0ZXMgZWFjaClcXG5cJiMzNDssXG4mIzQzO1x0XHRcdHJlc2VydmVkX3RocF90b3RhbCwgcmVzZXJ2ZWRfdGhwX3JlcXVlc3RlZCxcbiYjNDM7XHRcdFx0cmVzZXJ2ZWRfdGhwX2NtZGxpbmVfc2l6ZSk7XG4mIzQzO1x0fVxuJiM0MztcdGtvYmogPSBrb2JqZWN0X2NyZWF0ZV9hbmRfYWRkKFwmIzM0O3Jlc2VydmVkX3RocFwmIzM0OywgbW1fa29iaik7XG4mIzQzO1x0aWYgKCFrb2JqKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0cmV0ID0gc3lzZnNfY3JlYXRlX2dyb3VwKGtvYmosIFx1MDAyNnJlc2VydmVkX3RocF9hdHRyX2dyb3VwKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0a29iamVjdF9wdXQoa29iaik7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztzdWJzeXNfaW5pdGNhbGwocmVzZXJ2ZWRfdGhwX2luaXQpO1xuXFwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZVxuZGlmZiAtLWdpdCBhL21tL3Nob3dfbWVtLmMgYi9tbS9zaG93X21lbS5jXG5pbmRleCA0M2FjYTVhMmFjOTkwYS4uZTkzODFhZmNhNGFjYWUgMTAwNjQ0XG4tLS0gYS9tbS9zaG93X21lbS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9zaG93X21lbS5jXG5AQCAtMTQyLDYgJiM0MzsxNDIsNyBAQCBzdGF0aWMgdm9pZCBzaG93X21pZ3JhdGlvbl90eXBlcyh1bnNpZ25lZCBjaGFyIHR5cGUpXG4gI2lmZGVmIENPTkZJR19DTUFcbiBcdFx0W01JR1JBVEVfQ01BXVx0XHQ9ICYjMzk7QyYjMzk7LFxuICNlbmRpZlxuJiM0MztcdFx0W01JR1JBVEVfUkVTRVJWRURfVEhQXVx0PSAmIzM5O1QmIzM5OyxcbiAjaWZkZWYgQ09ORklHX01FTU9SWV9JU09MQVRJT05cbiBcdFx0W01JR1JBVEVfSVNPTEFURV1cdD0gJiMzOTtJJiMzOTssXG4gI2VuZGlmXG5AQCAtMzA4LDYgJiM0MzszMDksOCBAQCBzdGF0aWMgdm9pZCBzaG93X2ZyZWVfYXJlYXModW5zaWduZWQgaW50IGZpbHRlciwgbm9kZW1hc2tfdCAqbm9kZW1hc2ssIGludCBtYXhfelxuIFx0XHRcdFwmIzM0OyBoaWdoOiVsdWtCXCYjMzQ7XG4gXHRcdFx0XCYjMzQ7IHJlc2VydmVkX2hpZ2hhdG9taWM6JWx1S0JcJiMzNDtcbiBcdFx0XHRcJiMzNDsgZnJlZV9oaWdoYXRvbWljOiVsdUtCXCYjMzQ7XG4mIzQzO1x0XHRcdFwmIzM0OyByZXNlcnZlZF90aHA6JWx1S0JcJiMzNDtcbiYjNDM7XHRcdFx0XCYjMzQ7IGZyZWVfcmVzZXJ2ZWRfdGhwOiVsdUtCXCYjMzQ7XG4gXHRcdFx0XCYjMzQ7IGFjdGl2ZV9hbm9uOiVsdWtCXCYjMzQ7XG4gXHRcdFx0XCYjMzQ7IGluYWN0aXZlX2Fub246JWx1a0JcJiMzNDtcbiBcdFx0XHRcJiMzNDsgYWN0aXZlX2ZpbGU6JWx1a0JcJiMzNDtcbkBAIC0zMzEsNiAmIzQzOzMzNCw4IEBAIHN0YXRpYyB2b2lkIHNob3dfZnJlZV9hcmVhcyh1bnNpZ25lZCBpbnQgZmlsdGVyLCBub2RlbWFza190ICpub2RlbWFzaywgaW50IG1heF96XG4gXHRcdFx0SyhoaWdoX3dtYXJrX3BhZ2VzKHpvbmUpKSxcbiBcdFx0XHRLKHpvbmUtXHUwMDNlbnJfcmVzZXJ2ZWRfaGlnaGF0b21pYyksXG4gXHRcdFx0Syh6b25lLVx1MDAzZW5yX2ZyZWVfaGlnaGF0b21pYyksXG4mIzQzO1x0XHRcdEsoem9uZS1cdTAwM2Vucl9yZXNlcnZlZF90aHApLFxuJiM0MztcdFx0XHRLKHpvbmUtXHUwMDNlbnJfZnJlZV9yZXNlcnZlZF90aHApLFxuIFx0XHRcdEsoem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX1pPTkVfQUNUSVZFX0FOT04pKSxcbiBcdFx0XHRLKHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9aT05FX0lOQUNUSVZFX0FOT04pKSxcbiBcdFx0XHRLKHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9aT05FX0FDVElWRV9GSUxFKSksXG5kaWZmIC0tZ2l0IGEvbW0vdm1hLmMgYi9tbS92bWEuY1xuaW5kZXggOWVlYTI4NTA4MThhODUuLjhjNGNkN2M5N2E5ODRjIDEwMDY0NFxuLS0tIGEvbW0vdm1hLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3ZtYS5jXG5AQCAtNyw2ICYjNDM7Nyw4IEBAXG4gI2luY2x1ZGUgXCYjMzQ7dm1hX2ludGVybmFsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt2bWEuaFwmIzM0O1xuIFxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9odWdlX21tLmhcdTAwM2VcbiYjNDM7XG4gc3RydWN0IG1tYXBfc3RhdGUge1xuIFx0c3RydWN0IG1tX3N0cnVjdCAqbW07XG4gXHRzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWk7XG5AQCAtNTA3LDYgJiM0Mzs1MDksMTAgQEAgX19zcGxpdF92bWEoc3RydWN0IHZtYV9pdGVyYXRvciAqdm1pLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFdBUk5fT04odm1hLVx1MDAzZXZtX3N0YXJ0IFx1MDAzZT0gYWRkcik7XG4gXHRXQVJOX09OKHZtYS1cdTAwM2V2bV9lbmQgXHUwMDNjPSBhZGRyKTtcbiBcbiYjNDM7XHRpZiAoKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fUkVTRVJWRURfVEhQKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIUlTX0FMSUdORUQoYWRkciwgSFBBR0VfUE1EX1NJWkUpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuIFx0aWYgKHZtYS1cdTAwM2V2bV9vcHMgXHUwMDI2XHUwMDI2IHZtYS1cdTAwM2V2bV9vcHMtXHUwMDNlbWF5X3NwbGl0KSB7XG4gXHRcdGVyciA9IHZtYS1cdTAwM2V2bV9vcHMtXHUwMDNlbWF5X3NwbGl0KHZtYSwgYWRkcik7XG4gXHRcdGlmIChlcnIpXG5AQCAtMTM2MSw2ICYjNDM7MTM2Nyw3IEBAIHN0YXRpYyB2b2lkIHZtc19jb21wbGV0ZV9tdW5tYXBfdm1hcyhzdHJ1Y3Qgdm1hX211bm1hcF9zdHJ1Y3QgKnZtcyxcbiBcdFx0cmVtb3ZlX3ZtYSh2bWEpO1xuIFxuIFx0dm1fdW5hY2N0X21lbW9yeSh2bXMtXHUwMDNlbnJfYWNjb3VudGVkKTtcbiYjNDM7XHRyZXNlcnZlZF90aHBfdW5jaGFyZ2Uodm1zLVx1MDAzZW5yX3Jlc2VydmVkX3RocCk7XG4gXHR2YWxpZGF0ZV9tbShtbSk7XG4gXHRpZiAodm1zLVx1MDAzZXVubG9jaylcbiBcdFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XG5AQCAtMTQyMyw2ICYjNDM7MTQzMCwxMSBAQCBzdGF0aWMgaW50IHZtc19nYXRoZXJfbXVubWFwX3ZtYXMoc3RydWN0IHZtYV9tdW5tYXBfc3RydWN0ICp2bXMsXG4gXHRcdFx0ZXJyb3IgPSAtRVBFUk07XG4gXHRcdFx0Z290byBzdGFydF9zcGxpdF9mYWlsZWQ7XG4gXHRcdH1cbiYjNDM7XHRcdGlmICgodm1zLVx1MDAzZXZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fUkVTRVJWRURfVEhQKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAhSVNfQUxJR05FRCh2bXMtXHUwMDNlc3RhcnQsIEhQQUdFX1BNRF9TSVpFKSkge1xuJiM0MztcdFx0XHRlcnJvciA9IC1FSU5WQUw7XG4mIzQzO1x0XHRcdGdvdG8gc3RhcnRfc3BsaXRfZmFpbGVkO1xuJiM0MztcdFx0fVxuIFxuIFx0XHRlcnJvciA9IF9fc3BsaXRfdm1hKHZtcy1cdTAwM2V2bWksIHZtcy1cdTAwM2V2bWEsIHZtcy1cdTAwM2VzdGFydCwgMSk7XG4gXHRcdGlmIChlcnJvcilcbkBAIC0xNDQ1LDYgJiM0MzsxNDU3LDExIEBAIHN0YXRpYyBpbnQgdm1zX2dhdGhlcl9tdW5tYXBfdm1hcyhzdHJ1Y3Qgdm1hX211bm1hcF9zdHJ1Y3QgKnZtcyxcbiBcdFx0fVxuIFx0XHQvKiBEb2VzIGl0IHNwbGl0IHRoZSBlbmQ/ICovXG4gXHRcdGlmIChuZXh0LVx1MDAzZXZtX2VuZCBcdTAwM2Ugdm1zLVx1MDAzZWVuZCkge1xuJiM0MztcdFx0XHRpZiAoKG5leHQtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1JFU0VSVkVEX1RIUCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCAgICAhSVNfQUxJR05FRCh2bXMtXHUwMDNlZW5kLCBIUEFHRV9QTURfU0laRSkpIHtcbiYjNDM7XHRcdFx0XHRlcnJvciA9IC1FSU5WQUw7XG4mIzQzO1x0XHRcdFx0Z290byBlbmRfc3BsaXRfZmFpbGVkO1xuJiM0MztcdFx0XHR9XG4gXHRcdFx0ZXJyb3IgPSBfX3NwbGl0X3ZtYSh2bXMtXHUwMDNldm1pLCBuZXh0LCB2bXMtXHUwMDNlZW5kLCAwKTtcbiBcdFx0XHRpZiAoZXJyb3IpXG4gXHRcdFx0XHRnb3RvIGVuZF9zcGxpdF9mYWlsZWQ7XG5AQCAtMTQ2NSw2ICYjNDM7MTQ4MiwxMSBAQCBzdGF0aWMgaW50IHZtc19nYXRoZXJfbXVubWFwX3ZtYXMoc3RydWN0IHZtYV9tdW5tYXBfc3RydWN0ICp2bXMsXG4gXHRcdGlmICh2bWFfdGVzdChuZXh0LCBWTUFfQUNDT1VOVF9CSVQpKVxuIFx0XHRcdHZtcy1cdTAwM2Vucl9hY2NvdW50ZWQgJiM0Mzs9IG5ycGFnZXM7XG4gXG4mIzQzO1x0XHRpZiAobmV4dC1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fUkVTRVJWRURfVEhQKVxuJiM0MztcdFx0XHR2bXMtXHUwMDNlbnJfcmVzZXJ2ZWRfdGhwICYjNDM7PVxuJiM0MztcdFx0XHRcdHJlc2VydmVkX3RocF9ocGFnZV9ucihuZXh0LVx1MDAzZXZtX3N0YXJ0LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICBuZXh0LVx1MDAzZXZtX2VuZCk7XG4mIzQzO1xuIFx0XHRpZiAoaXNfZXhlY19tYXBwaW5nKG5leHQtXHUwMDNldm1fZmxhZ3MpKVxuIFx0XHRcdHZtcy1cdTAwM2VleGVjX3ZtICYjNDM7PSBucnBhZ2VzO1xuIFx0XHRlbHNlIGlmIChpc19zdGFja19tYXBwaW5nKG5leHQtXHUwMDNldm1fZmxhZ3MpKVxuQEAgLTE1NjAsNiAmIzQzOzE1ODIsNyBAQCBzdGF0aWMgdm9pZCBpbml0X3ZtYV9tdW5tYXAoc3RydWN0IHZtYV9tdW5tYXBfc3RydWN0ICp2bXMsXG4gXHR2bXMtXHUwMDNldWYgPSB1ZjtcbiBcdHZtcy1cdTAwM2V2bWFfY291bnQgPSAwO1xuIFx0dm1zLVx1MDAzZW5yX3BhZ2VzID0gdm1zLVx1MDAzZWxvY2tlZF92bSA9IHZtcy1cdTAwM2Vucl9hY2NvdW50ZWQgPSAwO1xuJiM0MztcdHZtcy1cdTAwM2Vucl9yZXNlcnZlZF90aHAgPSAwO1xuIFx0dm1zLVx1MDAzZWV4ZWNfdm0gPSB2bXMtXHUwMDNlc3RhY2tfdm0gPSB2bXMtXHUwMDNlZGF0YV92bSA9IDA7XG4gXHR2bXMtXHUwMDNldW5tYXBfc3RhcnQgPSBGSVJTVF9VU0VSX0FERFJFU1M7XG4gXHR2bXMtXHUwMDNldW5tYXBfZW5kID0gVVNFUl9QR1RBQkxFU19DRUlMSU5HO1xuZGlmZiAtLWdpdCBhL21tL3ZtYS5oIGIvbW0vdm1hLmhcbmluZGV4IDhlNGI2MWE3MzA0YzY4Li42OGU0NGFkZWU1Yzg5ZSAxMDA2NDRcbi0tLSBhL21tL3ZtYS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS92bWEuaFxuQEAgLTQ4LDYgJiM0Mzs0OCw3IEBAIHN0cnVjdCB2bWFfbXVubWFwX3N0cnVjdCB7XG4gXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzOyAgICAgICAgIC8qIE51bWJlciBvZiBwYWdlcyBiZWluZyByZW1vdmVkICovXG4gXHR1bnNpZ25lZCBsb25nIGxvY2tlZF92bTsgICAgICAgIC8qIE51bWJlciBvZiBsb2NrZWQgcGFnZXMgKi9cbiBcdHVuc2lnbmVkIGxvbmcgbnJfYWNjb3VudGVkOyAgICAgLyogTnVtYmVyIG9mIFZNX0FDQ09VTlQgcGFnZXMgKi9cbiYjNDM7XHR1bnNpZ25lZCBsb25nIG5yX3Jlc2VydmVkX3RocDsgIC8qIE51bWJlciBvZiByZXNlcnZlZCBQTUQgVEhQIHNsb3RzICovXG4gXHR1bnNpZ25lZCBsb25nIGV4ZWNfdm07XG4gXHR1bnNpZ25lZCBsb25nIHN0YWNrX3ZtO1xuIFx0dW5zaWduZWQgbG9uZyBkYXRhX3ZtO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL2luY2x1ZGUvbGludXgvZ2ZwX3R5cGVzLmggYi90b29scy9pbmNsdWRlL2xpbnV4L2dmcF90eXBlcy5oXG5pbmRleCA2Yzc1ZGYzMGEyODFkMS4uNTNhMWQyMmZjZjk1N2UgMTAwNjQ0XG4tLS0gYS90b29scy9pbmNsdWRlL2xpbnV4L2dmcF90eXBlcy5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9pbmNsdWRlL2xpbnV4L2dmcF90eXBlcy5oXG5AQCAtMzMsNyAmIzQzOzMzLDcgQEAgZW51bSB7XG4gXHRfX19HRlBfSU9fQklULFxuIFx0X19fR0ZQX0ZTX0JJVCxcbiBcdF9fX0dGUF9aRVJPX0JJVCxcbi1cdF9fX0dGUF9VTlVTRURfQklULFx0LyogMHgyMDB1IHVudXNlZCAqL1xuJiM0MztcdF9fX0dGUF9SRVNFUlZFRF9USFBfQklULFxuIFx0X19fR0ZQX0RJUkVDVF9SRUNMQUlNX0JJVCxcbiBcdF9fX0dGUF9LU1dBUERfUkVDTEFJTV9CSVQsXG4gXHRfX19HRlBfV1JJVEVfQklULFxuQEAgLTY5LDcgJiM0Mzs2OSw3IEBAIGVudW0ge1xuICNkZWZpbmUgX19fR0ZQX0lPXHRcdEJJVChfX19HRlBfSU9fQklUKVxuICNkZWZpbmUgX19fR0ZQX0ZTXHRcdEJJVChfX19HRlBfRlNfQklUKVxuICNkZWZpbmUgX19fR0ZQX1pFUk9cdFx0QklUKF9fX0dGUF9aRVJPX0JJVClcbi0vKiAweDIwMHUgdW51c2VkICovXG4mIzQzOyNkZWZpbmUgX19fR0ZQX1JFU0VSVkVEX1RIUFx0QklUKF9fX0dGUF9SRVNFUlZFRF9USFBfQklUKVxuICNkZWZpbmUgX19fR0ZQX0RJUkVDVF9SRUNMQUlNXHRCSVQoX19fR0ZQX0RJUkVDVF9SRUNMQUlNX0JJVClcbiAjZGVmaW5lIF9fX0dGUF9LU1dBUERfUkVDTEFJTVx0QklUKF9fX0dGUF9LU1dBUERfUkVDTEFJTV9CSVQpXG4gI2RlZmluZSBfX19HRlBfV1JJVEVcdFx0QklUKF9fX0dGUF9XUklURV9CSVQpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLWttZW0uYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1rbWVtLmNcbmluZGV4IGUxYjJmNWJjMWJhOGQ4Li40NTczMmFhZjFhNTI1ZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1rbWVtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1rbWVtLmNcbkBAIC02NzIsNiAmIzQzOzY3Miw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qge1xuIFx0eyBcJiMzNDtfX0dGUF9OT1JFVFJZXCYjMzQ7LFx0XHRcJiMzNDtOUlwmIzM0OyB9LFxuIFx0eyBcJiMzNDtfX0dGUF9DT01QXCYjMzQ7LFx0XHRcdFwmIzM0O0NcJiMzNDsgfSxcbiBcdHsgXCYjMzQ7X19HRlBfWkVST1wmIzM0OyxcdFx0XHRcJiMzNDtaXCYjMzQ7IH0sXG4mIzQzO1x0eyBcJiMzNDtfX0dGUF9SRVNFUlZFRF9USFBcJiMzNDssXHRcdFwmIzM0O1JUSFBcJiMzNDsgfSxcbiBcdHsgXCYjMzQ7X19HRlBfTk9NRU1BTExPQ1wmIzM0OyxcdFx0XCYjMzQ7Tk1BXCYjMzQ7IH0sXG4gXHR7IFwmIzM0O19fR0ZQX01FTUFMTE9DXCYjMzQ7LFx0XHRcJiMzNDtNQVwmIzM0OyB9LFxuIFx0eyBcJiMzNDtfX0dGUF9IQVJEV0FMTFwmIzM0OyxcdFx0XCYjMzQ7SFdcJiMzNDsgfSxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oIGIvdG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaFxuaW5kZXggY2Y3M2JjZDliYjlkNTIuLjAyMmI3YTU2YjZhOWYzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaFxuQEAgLTE2MCw2ICYjNDM7MTYwLDcgQEAgZW51bSB7XG4gI2VuZGlmXG4gXHRERUNMQVJFX1ZNQV9CSVQoVUZGRF9NSU5PUiwgNDEpLFxuIFx0REVDTEFSRV9WTUFfQklUKFNFQUxFRCwgNDIpLFxuJiM0MztcdERFQ0xBUkVfVk1BX0JJVChSRVNFUlZFRF9USFAsIDQzKSxcbiBcdC8qIEZsYWdzIHRoYXQgcmV1c2UgZmxhZ3MgYWJvdmUuICovXG4gXHRERUNMQVJFX1ZNQV9CSVRfQUxJQVMoUEtFWV9CSVQwLCBISUdIX0FSQ0hfMCksXG4gXHRERUNMQVJFX1ZNQV9CSVRfQUxJQVMoUEtFWV9CSVQxLCBISUdIX0FSQ0hfMSksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDc6Mzk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttYWR2aXNlX2h1Z2VwYWdlX3BvbGljeSYjMzQ7LAogICAgJiMzNDtyZXNlcnZlZF90aHBfY2hhcmdlJiMzNDssCiAgICAmIzM0O3Jlc2VydmVkX3RocF91bmNoYXJnZSYjMzQ7LAogICAgJiMzNDtyZXNlcnZlZF90aHBfcGFnZWJsb2NrcyYjMzQ7LAogICAgJiMzNDtjaGVja19yZXNlcnZlZF90aHBfYWxpZ25tZW50JiMzNDssCiAgICAmIzM0O3ZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IE1BRFZfUkVTRVJWRURfVEhQIG1hZHZpc2UgYmVoYXZpb3IgYW5kIFZNX1JFU0VSVkVEX1RIUCBWTUEgZmxhZywgbW9kaWZ5aW5nIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgaW5jbHVkaW5nIHBhZ2UgZmF1bHQgaGFuZGxpbmcsIG1yZW1hcCwgYW5kIFZNQSBzcGxpdHRpbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUga2VybmVsJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDg4YzI4MTU1NjVkZjZjMDRhZDk0ZWJmYTQ4MDA1NGM4MTgzNmZlNzgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEp1biAyNyAwNzozOTo1NCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmggYi9hcmNoL2FscGhhL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oCmluZGV4IDFlNzAwNDY4YTY4NTgwLi42NzJhMmZjMzQzODYxNCAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FscGhhL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oCkBAIC03OCw2ICYjNDM7NzgsOCBAQAogCiAjZGVmaW5lIE1BRFZfQ09MTEFQU0UJMjUJCS8qIFN5bmNocm9ub3VzIGh1Z2VwYWdlIGNvbGxhcHNlICovCiAKJiM0MzsjZGVmaW5lIE1BRFZfUkVTRVJWRURfVEhQIDI2CQkvKiBVc2UgcmVzZXJ2ZWQgdHJhbnNwYXJlbnQgaHVnZXBhZ2VzICovCiYjNDM7CiAjZGVmaW5lIE1BRFZfR1VBUkRfSU5TVEFMTCAxMDIJCS8qIGZhdGFsIHNpZ25hbCBvbiBhY2Nlc3MgdG8gcmFuZ2UgKi8KICNkZWZpbmUgTUFEVl9HVUFSRF9SRU1PVkUgMTAzCQkvKiB1bmd1YXJkIHJhbmdlICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaCBiL2FyY2gvbWlwcy9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaAppbmRleCBiNzAwZGFlMjhjNDgyZC4uYTk0YmY3NGRlZTIxY2EgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL21pcHMvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmgKQEAgLTEwNSw2ICYjNDM7MTA1LDggQEAKIAogI2RlZmluZSBNQURWX0NPTExBUFNFCTI1CQkvKiBTeW5jaHJvbm91cyBodWdlcGFnZSBjb2xsYXBzZSAqLwogCiYjNDM7I2RlZmluZSBNQURWX1JFU0VSVkVEX1RIUCAyNgkJLyogVXNlIHJlc2VydmVkIHRyYW5zcGFyZW50IGh1Z2VwYWdlcyAqLwomIzQzOwogI2RlZmluZSBNQURWX0dVQVJEX0lOU1RBTEwgMTAyCQkvKiBmYXRhbCBzaWduYWwgb24gYWNjZXNzIHRvIHJhbmdlICovCiAjZGVmaW5lIE1BRFZfR1VBUkRfUkVNT1ZFIDEwMwkJLyogdW5ndWFyZCByYW5nZSAqLwogCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oCmluZGV4IGI2YTcwOTUwNjk4N2UwLi5mZTJmZGRlZmI2YzVkOSAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9wYXJpc2MvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmgKQEAgLTcyLDYgJiM0Mzs3Miw4IEBACiAKICNkZWZpbmUgTUFEVl9DT0xMQVBTRQkyNQkJLyogU3luY2hyb25vdXMgaHVnZXBhZ2UgY29sbGFwc2UgKi8KIAomIzQzOyNkZWZpbmUgTUFEVl9SRVNFUlZFRF9USFAgMjYJCS8qIFVzZSByZXNlcnZlZCB0cmFuc3BhcmVudCBodWdlcGFnZXMgKi8KJiM0MzsKICNkZWZpbmUgTUFEVl9IV1BPSVNPTiAgICAgMTAwCQkvKiBwb2lzb24gYSBwYWdlIGZvciB0ZXN0aW5nICovCiAjZGVmaW5lIE1BRFZfU09GVF9PRkZMSU5FIDEwMQkJLyogc29mdCBvZmZsaW5lIHBhZ2UgZm9yIHRlc3RpbmcgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmggYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaAppbmRleCA5OWQ0Y2NlZTdmNmU4YS4uYmI2MDM1MzBiYTc5OWYgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveHRlbnNhL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oCkBAIC0xMTMsNiAmIzQzOzExMyw4IEBACiAKICNkZWZpbmUgTUFEVl9DT0xMQVBTRQkyNQkJLyogU3luY2hyb25vdXMgaHVnZXBhZ2UgY29sbGFwc2UgKi8KIAomIzQzOyNkZWZpbmUgTUFEVl9SRVNFUlZFRF9USFAgMjYJCS8qIFVzZSByZXNlcnZlZCB0cmFuc3BhcmVudCBodWdlcGFnZXMgKi8KJiM0MzsKICNkZWZpbmUgTUFEVl9HVUFSRF9JTlNUQUxMIDEwMgkJLyogZmF0YWwgc2lnbmFsIG9uIGFjY2VzcyB0byByYW5nZSAqLwogI2RlZmluZSBNQURWX0dVQVJEX1JFTU9WRSAxMDMJCS8qIHVuZ3VhcmQgcmFuZ2UgKi8KIApkaWZmIC0tZ2l0IGEvZnMvcHJvYy90YXNrX21tdS5jIGIvZnMvcHJvYy90YXNrX21tdS5jCmluZGV4IGQzMjQwOGY3Y2Q1ZWQyLi42NWM0YjJhNjFhZWFjNyAxMDA2NDQKLS0tIGEvZnMvcHJvYy90YXNrX21tdS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3Byb2MvdGFza19tbXUuYwpAQCAtMTI0NSw2ICYjNDM7MTI0NSw5IEBAIHN0YXRpYyB2b2lkIHNob3dfc21hcF92bWFfZmxhZ3Moc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKICNlbmRpZgogI2lmZGVmIENPTkZJR182NEJJVAogCQlbaWxvZzIoVk1fU0VBTEVEKV0gPSAmIzM0O3NsJiMzNDssCiYjNDM7I2VuZGlmCiYjNDM7I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRQomIzQzOwkJW2lsb2cyKFZNX1JFU0VSVkVEX1RIUCldID0gJiMzNDtydCYjMzQ7LAogI2VuZGlmCiAJfTsKIAlzaXplX3QgaTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZ2ZwLmggYi9pbmNsdWRlL2xpbnV4L2dmcC5oCmluZGV4IGNkZjk1YTlmMGI4N2MxLi4yZDA1OTI5ZmQ4YzcyZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9nZnAuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2dmcC5oCkBAIC0zMCw2ICYjNDM7MzAsOSBAQCBzdGF0aWMgaW5saW5lIGludCBnZnBfbWlncmF0ZXR5cGUoY29uc3QgZ2ZwX3QgZ2ZwX2ZsYWdzKQogCUJVSUxEX0JVR19PTigoKF9fX0dGUF9NT1ZBQkxFIHwgX19fR0ZQX1JFQ0xBSU1BQkxFKSAmZ3Q7Jmd0OwogCQkgICAgICBHRlBfTU9WQUJMRV9TSElGVCkgIT0gTUlHUkFURV9ISUdIQVRPTUlDKTsKIAomIzQzOwlpZiAodW5saWtlbHkoZ2ZwX2ZsYWdzICZhbXA7IF9fR0ZQX1JFU0VSVkVEX1RIUCkpCiYjNDM7CQlyZXR1cm4gTUlHUkFURV9SRVNFUlZFRF9USFA7CiYjNDM7CiAJaWYgKHVubGlrZWx5KHBhZ2VfZ3JvdXBfYnlfbW9iaWxpdHlfZGlzYWJsZWQpKQogCQlyZXR1cm4gTUlHUkFURV9VTk1PVkFCTEU7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZ2ZwX3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L2dmcF90eXBlcy5oCmluZGV4IDU0Y2EwYzg4YmFiNmU4Li4xZjgyYTk0OTFkMzU3ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9nZnBfdHlwZXMuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2dmcF90eXBlcy5oCkBAIC0zMyw3ICYjNDM7MzMsNyBAQCBlbnVtIHsKIAlfX19HRlBfSU9fQklULAogCV9fX0dGUF9GU19CSVQsCiAJX19fR0ZQX1pFUk9fQklULAotCV9fX0dGUF9VTlVTRURfQklULAkvKiAweDIwMHUgdW51c2VkICovCiYjNDM7CV9fX0dGUF9SRVNFUlZFRF9USFBfQklULAogCV9fX0dGUF9ESVJFQ1RfUkVDTEFJTV9CSVQsCiAJX19fR0ZQX0tTV0FQRF9SRUNMQUlNX0JJVCwKIAlfX19HRlBfV1JJVEVfQklULApAQCAtNjksNyAmIzQzOzY5LDcgQEAgZW51bSB7CiAjZGVmaW5lIF9fX0dGUF9JTwkJQklUKF9fX0dGUF9JT19CSVQpCiAjZGVmaW5lIF9fX0dGUF9GUwkJQklUKF9fX0dGUF9GU19CSVQpCiAjZGVmaW5lIF9fX0dGUF9aRVJPCQlCSVQoX19fR0ZQX1pFUk9fQklUKQotLyogMHgyMDB1IHVudXNlZCAqLwomIzQzOyNkZWZpbmUgX19fR0ZQX1JFU0VSVkVEX1RIUAlCSVQoX19fR0ZQX1JFU0VSVkVEX1RIUF9CSVQpCiAjZGVmaW5lIF9fX0dGUF9ESVJFQ1RfUkVDTEFJTQlCSVQoX19fR0ZQX0RJUkVDVF9SRUNMQUlNX0JJVCkKICNkZWZpbmUgX19fR0ZQX0tTV0FQRF9SRUNMQUlNCUJJVChfX19HRlBfS1NXQVBEX1JFQ0xBSU1fQklUKQogI2RlZmluZSBfX19HRlBfV1JJVEUJCUJJVChfX19HRlBfV1JJVEVfQklUKQpAQCAtMTQxLDYgJiM0MzsxNDEsOSBAQCBlbnVtIHsKICAqICVfX0dGUF9OT19PQkpfRVhUIGNhdXNlcyBzbGFiIGFsbG9jYXRpb24gdG8gaGF2ZSBubyBvYmplY3QgZXh0ZW5zaW9uLgogICogbWFya19vYmpfY29kZXRhZ19lbXB0eSgpIHNob3VsZCBiZSBjYWxsZWQgdXBvbiBmcmVlaW5nIGZvciBvYmplY3RzIGFsbG9jYXRlZAogICogd2l0aCB0aGlzIGZsYWcgdG8gaW5kaWNhdGUgdGhhdCB0aGVpciBOVUxMIHRhZ3MgYXJlIGV4cGVjdGVkIGFuZCBub3JtYWwuCiYjNDM7ICoKJiM0MzsgKiAlX19HRlBfUkVTRVJWRURfVEhQIGlzIGFuIGludGVybmFsIGZsYWcgZm9yIHJlc2VydmVkIFRIUCBmYXVsdHMuIEl0IHJlc3RyaWN0cwomIzQzOyAqdGhlIGFsbG9jYXRpb24gdG8gJU1JR1JBVEVfUkVTRVJWRURfVEhQIHBhZ2VibG9ja3MuCiAgKi8KICNkZWZpbmUgX19HRlBfUkVDTEFJTUFCTEUgKChfX2ZvcmNlIGdmcF90KV9fX0dGUF9SRUNMQUlNQUJMRSkKICNkZWZpbmUgX19HRlBfV1JJVEUJKChfX2ZvcmNlIGdmcF90KV9fX0dGUF9XUklURSkKQEAgLTE0OCw2ICYjNDM7MTUxLDcgQEAgZW51bSB7CiAjZGVmaW5lIF9fR0ZQX1RISVNOT0RFCSgoX19mb3JjZSBnZnBfdClfX19HRlBfVEhJU05PREUpCiAjZGVmaW5lIF9fR0ZQX0FDQ09VTlQJKChfX2ZvcmNlIGdmcF90KV9fX0dGUF9BQ0NPVU5UKQogI2RlZmluZSBfX0dGUF9OT19PQkpfRVhUICAgKChfX2ZvcmNlIGdmcF90KV9fX0dGUF9OT19PQkpfRVhUKQomIzQzOyNkZWZpbmUgX19HRlBfUkVTRVJWRURfVEhQICgoX19mb3JjZSBnZnBfdClfX19HRlBfUkVTRVJWRURfVEhQKQogCiAvKioKICAqIERPQzogV2F0ZXJtYXJrIG1vZGlmaWVycwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9odWdlX21tLmggYi9pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaAppbmRleCBhZDIwZjdmOGMxNzk0NC4uNGZlOTY1MWNkODZiNWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaHVnZV9tbS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvaHVnZV9tbS5oCkBAIC0zMzAsNiAmIzQzOzMzMCw4IEBAIHVuc2lnbmVkIGxvbmcgdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCiAJCWlmICh2bV9mbGFncyAmYW1wOyBWTV9IVUdFUEFHRSkKIAkJCW1hc2sgfD0gUkVBRF9PTkNFKGh1Z2VfYW5vbl9vcmRlcnNfbWFkdmlzZSk7CiYjNDM7CQlpZiAodm1fZmxhZ3MgJmFtcDsgVk1fUkVTRVJWRURfVEhQKQomIzQzOwkJCW1hc2sgfD0gQklUKFBNRF9PUkRFUik7CiAJCWlmIChodWdlcGFnZV9nbG9iYWxfYWx3YXlzKCkgfHwKIAkJICAgICgodm1fZmxhZ3MgJmFtcDsgVk1fSFVHRVBBR0UpICZhbXA7JmFtcDsgaHVnZXBhZ2VfZ2xvYmFsX2VuYWJsZWQoKSkpCiAJCQltYXNrIHw9IFJFQURfT05DRShodWdlX2Fub25fb3JkZXJzX2luaGVyaXQpOwpAQCAtMzcxLDcgJiM0MzszNzMsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgdm1hX3RocF9kaXNhYmxlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkgKiBBcmUgVEhQcyBkaXNhYmxlZCBvbmx5IGZvciBWTUFzIHdoZXJlIHdlIGRpZG4mIzM5O3QgZ2V0IGFuIGV4cGxpY2l0CiAJICogYWR2aXNlIHRvIHVzZSB0aGVtPwogCSAqLwotCWlmICh2bV9mbGFncyAmYW1wOyBWTV9IVUdFUEFHRSkKJiM0MzsJaWYgKHZtX2ZsYWdzICZhbXA7IChWTV9IVUdFUEFHRSB8IFZNX1JFU0VSVkVEX1RIUCkpCiAJCXJldHVybiBmYWxzZTsKIAkvKgogCSAqIEZvcmNpbmcgYSBjb2xsYXBzZSAoZS5nLiwgbWFkdl9jb2xsYXBzZSksIGlzIGEgY2xlYXIgYWR2aWNlIHRvCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmgKaW5kZXggNDg1ZGY5YzJkYmRkYjMuLjI3OGNmNGJmZDRlYzViIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbS5oCkBAIC0zNTMsNiAmIzQzOzM1Myw3IEBAIGVudW0gewogI2VuZGlmCiAJREVDTEFSRV9WTUFfQklUKFVGRkRfTUlOT1IsIDQxKSwKIAlERUNMQVJFX1ZNQV9CSVQoU0VBTEVELCA0MiksCiYjNDM7CURFQ0xBUkVfVk1BX0JJVChSRVNFUlZFRF9USFAsIDQzKSwKIAkvKiBGbGFncyB0aGF0IHJldXNlIGZsYWdzIGFib3ZlLiAqLwogCURFQ0xBUkVfVk1BX0JJVF9BTElBUyhQS0VZX0JJVDAsIEhJR0hfQVJDSF8wKSwKIAlERUNMQVJFX1ZNQV9CSVRfQUxJQVMoUEtFWV9CSVQxLCBISUdIX0FSQ0hfMSksCkBAIC01MjYsNiAmIzQzOzUyNywxMiBAQCBlbnVtIHsKICNkZWZpbmUgVk1BX0RST1BQQUJMRQkJRU1QVFlfVk1BX0ZMQUdTCiAjZW5kaWYKIAomIzQzOyNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UKJiM0MzsjZGVmaW5lIFZNX1JFU0VSVkVEX1RIUAkJSU5JVF9WTV9GTEFHKFJFU0VSVkVEX1RIUCkKJiM0MzsjZWxzZQomIzQzOyNkZWZpbmUgVk1fUkVTRVJWRURfVEhQCQlWTV9OT05FCiYjNDM7I2VuZGlmCiYjNDM7CiAvKiBCaXRzIHNldCBpbiB0aGUgVk1BIHVudGlsIHRoZSBzdGFjayBpcyBpbiBpdHMgZmluYWwgbG9jYXRpb24gKi8KICNkZWZpbmUgVk1fU1RBQ0tfSU5DT01QTEVURV9TRVRVUCAoVk1fUkFORF9SRUFEIHwgVk1fU0VRX1JFQUQgfCBWTV9TVEFDS19FQVJMWSkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaCBiL2luY2x1ZGUvbGludXgvbW16b25lLmgKaW5kZXggY2EyNzEyMTg3MTQ3NWMuLjQ0MThkMGM5YWNjZGM4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW16b25lLmgKQEAgLTEzMywxMCAmIzQzOzEzMyw5IEBAIGVudW0gbWlncmF0ZXR5cGUgewogCSAqIF9fZnJlZV9wYWdlYmxvY2tfY21hKCkgZnVuY3Rpb24uCiAJICovCiAJTUlHUkFURV9DTUEsCi0JX19NSUdSQVRFX1RZUEVfRU5EID0gTUlHUkFURV9DTUEsCi0jZWxzZQotCV9fTUlHUkFURV9UWVBFX0VORCA9IE1JR1JBVEVfSElHSEFUT01JQywKICNlbmRpZgomIzQzOwlNSUdSQVRFX1JFU0VSVkVEX1RIUCwKJiM0MzsJX19NSUdSQVRFX1RZUEVfRU5EID0gTUlHUkFURV9SRVNFUlZFRF9USFAsCiAjaWZkZWYgQ09ORklHX01FTU9SWV9JU09MQVRJT04KIAlNSUdSQVRFX0lTT0xBVEUsCS8qIGNhbiYjMzk7dCBhbGxvY2F0ZSBmcm9tIGhlcmUgKi8KICNlbmRpZgpAQCAtMTYxLDYgJiM0MzsxNjAsOSBAQCBleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pZ3JhdGV0eXBlX25hbWVzW01JR1JBVEVfVFlQRVNdOwogIyAgZGVmaW5lIGlzX21pZ3JhdGVfY21hX2ZvbGlvKGZvbGlvLCBwZm4pIGZhbHNlCiAjZW5kaWYKIAomIzQzOyNkZWZpbmUgaXNfbWlncmF0ZV9yZXNlcnZlZF90aHAobWlncmF0ZXR5cGUpIFwKJiM0MzsJdW5saWtlbHkoKG1pZ3JhdGV0eXBlKSA9PSBNSUdSQVRFX1JFU0VSVkVEX1RIUCkKJiM0MzsKIHN0YXRpYyBpbmxpbmUgYm9vbCBpc19taWdyYXRlX21vdmFibGUoaW50IG10KQogewogCXJldHVybiBpc19taWdyYXRlX2NtYShtdCkgfHwgbXQgPT0gTUlHUkFURV9NT1ZBQkxFOwpAQCAtOTc1LDYgJiM0Mzs5NzcsOSBAQCBzdHJ1Y3Qgem9uZSB7CiAJdW5zaWduZWQgbG9uZyBucl9yZXNlcnZlZF9oaWdoYXRvbWljOwogCXVuc2lnbmVkIGxvbmcgbnJfZnJlZV9oaWdoYXRvbWljOwogCiYjNDM7CXVuc2lnbmVkIGxvbmcgbnJfcmVzZXJ2ZWRfdGhwOwomIzQzOwl1bnNpZ25lZCBsb25nIG5yX2ZyZWVfcmVzZXJ2ZWRfdGhwOwomIzQzOwogCS8qCiAJICogV2UgZG9uJiMzOTt0IGtub3cgaWYgdGhlIG1lbW9yeSB0aGF0IHdlJiMzOTtyZSBnb2luZyB0byBhbGxvY2F0ZSB3aWxsIGJlCiAJICogZnJlZWFibGUgb3IvYW5kIGl0IHdpbGwgYmUgcmVsZWFzZWQgZXZlbnR1YWxseSwgc28gdG8gYXZvaWQgdG90YWxseQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvbW1mbGFncy5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvbW1mbGFncy5oCmluZGV4IGE2ZTVhNDRjOWI0Mjk5Li4zZGI0MGViZDcwNjBiZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvbW1mbGFncy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL21tZmxhZ3MuaApAQCAtMjQsNiAmIzQzOzI0LDcgQEAKIAlUUkFDRV9HRlBfRU0oSU8pCQkJXAogCVRSQUNFX0dGUF9FTShGUykJCQlcCiAJVFJBQ0VfR0ZQX0VNKFpFUk8pCQkJXAomIzQzOwlUUkFDRV9HRlBfRU0oUkVTRVJWRURfVEhQKQkJXAogCVRSQUNFX0dGUF9FTShESVJFQ1RfUkVDTEFJTSkJCVwKIAlUUkFDRV9HRlBfRU0oS1NXQVBEX1JFQ0xBSU0pCQlcCiAJVFJBQ0VfR0ZQX0VNKFdSSVRFKQkJCVwKQEAgLTcyLDggJiM0Mzs3Myw3IEBACiAKIFRSQUNFX0dGUF9GTEFHUwogCi0vKiBKdXN0IGluIGNhc2UgdGhlc2UgYXJlIGV2ZXIgdXNlZCAqLwotVFJBQ0VfREVGSU5FX0VOVU0oX19fR0ZQX1VOVVNFRF9CSVQpOwomIzQzOy8qIEp1c3QgaW4gY2FzZSB0aGlzIGlzIGV2ZXIgdXNlZCAqLwogVFJBQ0VfREVGSU5FX0VOVU0oX19fR0ZQX0xBU1RfQklUKTsKIAogI2RlZmluZSBnZnBmbGFnX3N0cmluZyhmbGFnKSB7KF9fZm9yY2UgdW5zaWduZWQgbG9uZylmbGFnLCAjZmxhZ30KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9tbWFuLWNvbW1vbi5oIGIvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL21tYW4tY29tbW9uLmgKaW5kZXggZWYxYzI3ZmEzYzU3MGYuLmIzZDE0NDg5MzVlYWQxIDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvbW1hbi1jb21tb24uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvbW1hbi1jb21tb24uaApAQCAtNzksNiAmIzQzOzc5LDggQEAKIAogI2RlZmluZSBNQURWX0NPTExBUFNFCTI1CQkvKiBTeW5jaHJvbm91cyBodWdlcGFnZSBjb2xsYXBzZSAqLwogCiYjNDM7I2RlZmluZSBNQURWX1JFU0VSVkVEX1RIUCAyNgkJLyogVXNlIHJlc2VydmVkIHRyYW5zcGFyZW50IGh1Z2VwYWdlcyAqLwomIzQzOwogI2RlZmluZSBNQURWX0dVQVJEX0lOU1RBTEwgMTAyCQkvKiBmYXRhbCBzaWduYWwgb24gYWNjZXNzIHRvIHJhbmdlICovCiAjZGVmaW5lIE1BRFZfR1VBUkRfUkVNT1ZFIDEwMwkJLyogdW5ndWFyZCByYW5nZSAqLwogCmRpZmYgLS1naXQgYS9tbS9NYWtlZmlsZSBiL21tL01ha2VmaWxlCmluZGV4IGVmZjlmOWU3ZTA2MWMxLi5mZDc0YTczOTJlMzQ2NyAxMDA2NDQKLS0tIGEvbW0vTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvbW0vTWFrZWZpbGUKQEAgLTk4LDcgJiM0Mzs5OCw3IEBAIG9iai0kKENPTkZJR19NRU1URVNUKQkJJiM0Mzs9IG1lbXRlc3Qubwogb2JqLSQoQ09ORklHX01JR1JBVElPTikgJiM0Mzs9IG1pZ3JhdGUubwogb2JqLSQoQ09ORklHX05VTUEpICYjNDM7PSBtZW1vcnktdGllcnMubwogb2JqLSQoQ09ORklHX0RFVklDRV9NSUdSQVRJT04pICYjNDM7PSBtaWdyYXRlX2RldmljZS5vCi1vYmotJChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpICYjNDM7PSBodWdlX21lbW9yeS5vIGtodWdlcGFnZWQubwomIzQzO29iai0kKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgJiM0Mzs9IGh1Z2VfbWVtb3J5Lm8ga2h1Z2VwYWdlZC5vIHJlc2VydmVkX3RocC5vCiBvYmotJChDT05GSUdfUEFHRV9DT1VOVEVSKSAmIzQzOz0gcGFnZV9jb3VudGVyLm8KIG9iai0kKENPTkZJR19MSVZFVVBEQVRFX01FTUZEKSAmIzQzOz0gbWVtZmRfbHVvLm8KIG9iai0kKENPTkZJR19NRU1DR19WMSkgJiM0Mzs9IG1lbWNvbnRyb2wtdjEubwpkaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmMKaW5kZXggMmJjY2IwYTUzYTBhNjAuLjY2ZDg1YTJmYTg1NWYzIDEwMDY0NAotLS0gYS9tbS9odWdlX21lbW9yeS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2VfbWVtb3J5LmMKQEAgLTEyNjcsNiAmIzQzOzEyNjcsOSBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICp2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJY29uc3QgaW50IG9yZGVyID0gSFBBR0VfUE1EX09SREVSOwogCXN0cnVjdCBmb2xpbyAqZm9saW87CiAKJiM0MzsJaWYgKHZtYS0mZ3Q7dm1fZmxhZ3MgJmFtcDsgVk1fUkVTRVJWRURfVEhQKQomIzQzOwkJZ2ZwIHw9IF9fR0ZQX1JFU0VSVkVEX1RIUDsKJiM0MzsKIAlmb2xpbyA9IHZtYV9hbGxvY19mb2xpbyhnZnAsIG9yZGVyLCB2bWEsIGFkZHIgJmFtcDsgSFBBR0VfUE1EX01BU0spOwogCiAJaWYgKHVubGlrZWx5KCFmb2xpbykpIHsKQEAgLTEzNDQsOCAmIzQzOzEzNDcsMTEgQEAgc3RhdGljIHZtX2ZhdWx0X3QgX19kb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKIAl2bV9mYXVsdF90IHJldCA9IDA7CiAKIAlmb2xpbyA9IHZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZCh2bWEsIHZtZi0mZ3Q7YWRkcmVzcyk7Ci0JaWYgKHVubGlrZWx5KCFmb2xpbykpCiYjNDM7CWlmICh1bmxpa2VseSghZm9saW8pKSB7CiYjNDM7CQlpZiAodm1hLSZndDt2bV9mbGFncyAmYW1wOyBWTV9SRVNFUlZFRF9USFApCiYjNDM7CQkJcmV0dXJuIFZNX0ZBVUxUX09PTTsKIAkJcmV0dXJuIFZNX0ZBVUxUX0ZBTExCQUNLOwomIzQzOwl9CiAKIAlwZ3RhYmxlID0gcHRlX2FsbG9jX29uZSh2bWEtJmd0O3ZtX21tKTsKIAlpZiAodW5saWtlbHkoIXBndGFibGUpKSB7CkBAIC0xNDgwLDE1ICYjNDM7MTQ4NiwxNyBAQCB2bV9mYXVsdF90IGRvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKQogCXZtX2ZhdWx0X3QgcmV0OwogCiAJaWYgKCF0aHBfdm1hX3N1aXRhYmxlX29yZGVyKHZtYSwgaGFkZHIsIFBNRF9PUkRFUikpCi0JCXJldHVybiBWTV9GQVVMVF9GQUxMQkFDSzsKJiM0MzsJCXJldHVybiAodm1hLSZndDt2bV9mbGFncyAmYW1wOyBWTV9SRVNFUlZFRF9USFApID8gVk1fRkFVTFRfT09NIDoKJiM0MzsJCQkJCQkJICAgVk1fRkFVTFRfRkFMTEJBQ0s7CiAJcmV0ID0gdm1mX2Fub25fcHJlcGFyZSh2bWYpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAJa2h1Z2VwYWdlZF9lbnRlcl92bWEodm1hLCB2bWEtJmd0O3ZtX2ZsYWdzKTsKIAotCWlmICghKHZtZi0mZ3Q7ZmxhZ3MgJmFtcDsgRkFVTFRfRkxBR19XUklURSkgJmFtcDsmYW1wOwotCQkJIW1tX2ZvcmJpZHNfemVyb3BhZ2Uodm1hLSZndDt2bV9tbSkgJmFtcDsmYW1wOwotCQkJdHJhbnNwYXJlbnRfaHVnZXBhZ2VfdXNlX3plcm9fcGFnZSgpKSB7CiYjNDM7CWlmICghKHZtYS0mZ3Q7dm1fZmxhZ3MgJmFtcDsgVk1fUkVTRVJWRURfVEhQKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAhKHZtZi0mZ3Q7ZmxhZ3MgJmFtcDsgRkFVTFRfRkxBR19XUklURSkgJmFtcDsmYW1wOwomIzQzOwkgICAgIW1tX2ZvcmJpZHNfemVyb3BhZ2Uodm1hLSZndDt2bV9tbSkgJmFtcDsmYW1wOwomIzQzOwkgICAgdHJhbnNwYXJlbnRfaHVnZXBhZ2VfdXNlX3plcm9fcGFnZSgpKSB7CiAJCXBndGFibGVfdCBwZ3RhYmxlOwogCQlzdHJ1Y3QgZm9saW8gKnplcm9fZm9saW87CiAJCXZtX2ZhdWx0X3QgcmV0OwpkaWZmIC0tZ2l0IGEvbW0vaW50ZXJuYWwuaCBiL21tL2ludGVybmFsLmgKaW5kZXggMTgxZTc5ZjFkNmEyMDcuLjRiMmExM2QzNTM3NzIxIDEwMDY0NAotLS0gYS9tbS9pbnRlcm5hbC5oCiYjNDM7JiM0MzsmIzQzOyBiL21tL2ludGVybmFsLmgKQEAgLTE0NzcsNiAmIzQzOzE0NzcsNyBAQCB1bnNpZ25lZCBpbnQgcmVjbGFpbV9jbGVhbl9wYWdlc19mcm9tX2xpc3Qoc3RydWN0IHpvbmUgKnpvbmUsCiAjZGVmaW5lIEFMTE9DX0hJR0hBVE9NSUMJMHgyMDAgLyogQWxsb3dzIGFjY2VzcyB0byBNSUdSQVRFX0hJR0hBVE9NSUMgKi8KICNkZWZpbmUgQUxMT0NfVFJZTE9DSwkJMHg0MDAgLyogT25seSB1c2Ugc3Bpbl90cnlsb2NrIGluIGFsbG9jYXRpb24gcGF0aCAqLwogI2RlZmluZSBBTExPQ19LU1dBUEQJCTB4ODAwIC8qIGFsbG93IHdha2luZyBvZiBrc3dhcGQsIF9fR0ZQX0tTV0FQRF9SRUNMQUlNIHNldCAqLwomIzQzOyNkZWZpbmUgQUxMT0NfUkVTRVJWRURfVEhQCTB4MTAwMCAvKiBBbGxvd3MgYWNjZXNzIHRvIHJlc2VydmVkIFRIUCBwYWdlYmxvY2tzICovCiAKIC8qIEZsYWdzIHRoYXQgYWxsb3cgYWxsb2NhdGlvbnMgYmVsb3cgdGhlIG1pbiB3YXRlcm1hcmsuICovCiAjZGVmaW5lIEFMTE9DX1JFU0VSVkVTIChBTExPQ19OT05fQkxPQ0t8QUxMT0NfTUlOX1JFU0VSVkV8QUxMT0NfSElHSEFUT01JQ3xBTExPQ19PT00pCkBAIC0xOTUxLDQgJiM0MzsxOTUyLDkgQEAgc3RhdGljIGlubGluZSBpbnQgZ2V0X3N5c2N0bF9tYXhfbWFwX2NvdW50KHZvaWQpCiBib29sIG1heV9leHBhbmRfdm0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MsCiAJCSAgIHVuc2lnbmVkIGxvbmcgbnBhZ2VzKTsKIAomIzQzO3Vuc2lnbmVkIGxvbmcgcmVzZXJ2ZWRfdGhwX3BhZ2VibG9ja3ModW5zaWduZWQgbG9uZyBucl9ocGFnZXMpOwomIzQzO3Vuc2lnbmVkIGxvbmcgcmVzZXJ2ZWRfdGhwX2hwYWdlX25yKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTsKJiM0MztpbnQgcmVzZXJ2ZWRfdGhwX2NoYXJnZSh1bnNpZ25lZCBsb25nIG5yX2hwYWdlcyk7CiYjNDM7dm9pZCByZXNlcnZlZF90aHBfdW5jaGFyZ2UodW5zaWduZWQgbG9uZyBucl9ocGFnZXMpOwomIzQzOwogI2VuZGlmCS8qIF9fTU1fSU5URVJOQUxfSCAqLwpkaWZmIC0tZ2l0IGEvbW0va2h1Z2VwYWdlZC5jIGIvbW0va2h1Z2VwYWdlZC5jCmluZGV4IDYxN2JjYTc2ZGI0OWI2Li44MDI5M2U4YzFlNGU3NiAxMDA2NDQKLS0tIGEvbW0va2h1Z2VwYWdlZC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2todWdlcGFnZWQuYwpAQCAtNDUxLDYgJiM0Mzs0NTEsNyBAQCBpbnQgaHVnZXBhZ2VfbWFkdmlzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAlzd2l0Y2ggKGFkdmljZSkgewogCWNhc2UgTUFEVl9IVUdFUEFHRToKIAkJKnZtX2ZsYWdzICZhbXA7PSB+Vk1fTk9IVUdFUEFHRTsKJiM0MzsJCSp2bV9mbGFncyAmYW1wOz0gflZNX1JFU0VSVkVEX1RIUDsKIAkJKnZtX2ZsYWdzIHw9IFZNX0hVR0VQQUdFOwogCQkvKgogCQkgKiBJZiB0aGUgdm1hIGJlY29tZSBnb29kIGZvciBraHVnZXBhZ2VkIHRvIHNjYW4sCkBAIC00NjEsNiAmIzQzOzQ2Miw3IEBAIGludCBodWdlcGFnZV9tYWR2aXNlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQlicmVhazsKIAljYXNlIE1BRFZfTk9IVUdFUEFHRToKIAkJKnZtX2ZsYWdzICZhbXA7PSB+Vk1fSFVHRVBBR0U7CiYjNDM7CQkqdm1fZmxhZ3MgJmFtcDs9IH5WTV9SRVNFUlZFRF9USFA7CiAJCSp2bV9mbGFncyB8PSBWTV9OT0hVR0VQQUdFOwogCQkvKgogCQkgKiBTZXR0aW5nIFZNX05PSFVHRVBBR0Ugd2lsbCBwcmV2ZW50IGtodWdlcGFnZWQgZnJvbSBzY2FubmluZwpAQCAtNDY4LDYgJiM0Mzs0NzAsMTIgQEAgaW50IGh1Z2VwYWdlX21hZHZpc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCSAqIGl0IGdvdCByZWdpc3RlcmVkIGJlZm9yZSBWTV9OT0hVR0VQQUdFIHdhcyBzZXQuCiAJCSAqLwogCQlicmVhazsKJiM0MzsJY2FzZSBNQURWX1JFU0VSVkVEX1RIUDoKJiM0MzsJCSp2bV9mbGFncyAmYW1wOz0gfihWTV9IVUdFUEFHRSB8IFZNX05PSFVHRVBBR0UpOwomIzQzOwkJKnZtX2ZsYWdzIHw9IFZNX1JFU0VSVkVEX1RIUDsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9tbS9tYWR2aXNlLmMgYi9tbS9tYWR2aXNlLmMKaW5kZXggY2Q5YmIwNzcwNzJjY2IuLmRkOTExMDVkYjY4Yzc1IDEwMDY0NAotLS0gYS9tbS9tYWR2aXNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWFkdmlzZS5jCkBAIC0xMyw2ICYjNDM7MTMsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3BhZ2UtaXNvbGF0aW9uLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGFnZV9pZGxlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdXNlcmZhdWx0ZmRfay5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9odWdlX21tLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaHVnZXRsYi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2ZhbGxvYy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2ZhZHZpc2UuaCZndDsKQEAgLTEzMzEsNiAmIzQzOzEzMzIsNjUgQEAgc3RhdGljIGJvb2wgY2FuX21hZHZpc2VfbW9kaWZ5KHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKQogfQogI2VuZGlmCiAKJiM0MztzdGF0aWMgYm9vbCByZXNlcnZlZF90aHBfbWFkdmlzZV9hbGlnbmVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAomIzQzOwkJCQkJIHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yX3JhbmdlICpyYW5nZSkKJiM0Mzt7CiYjNDM7CWlmICghKHZtYS0mZ3Q7dm1fZmxhZ3MgJmFtcDsgVk1fUkVTRVJWRURfVEhQKSkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwlyZXR1cm4gSVNfQUxJR05FRChyYW5nZS0mZ3Q7c3RhcnQsIEhQQUdFX1BNRF9TSVpFKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAgICBJU19BTElHTkVEKHJhbmdlLSZndDtlbmQsIEhQQUdFX1BNRF9TSVpFKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBtYWR2aXNlX2h1Z2VwYWdlX3BvbGljeShzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvciwKJiM0MzsJCQkJICAgdm1fZmxhZ3NfdCAqbmV3X2ZsYWdzLAomIzQzOwkJCQkgICB1bnNpZ25lZCBsb25nICpyZXNlcnZlZF9ocGFnZXMsCiYjNDM7CQkJCSAgIGJvb2wgKmNoYXJnZV9yZXNlcnZlZF90aHAsCiYjNDM7CQkJCSAgIGJvb2wgKnVuY2hhcmdlX3Jlc2VydmVkX3RocCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gbWFkdl9iZWhhdmlvci0mZ3Q7dm1hOwomIzQzOwlzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvcl9yYW5nZSAqcmFuZ2UgPSAmYW1wO21hZHZfYmVoYXZpb3ItJmd0O3JhbmdlOwomIzQzOwl1bnNpZ25lZCBsb25nIGhwYWdlczsKJiM0MzsJaW50IGJlaGF2aW9yID0gbWFkdl9iZWhhdmlvci0mZ3Q7YmVoYXZpb3I7CiYjNDM7CWludCBlcnJvcjsKJiM0MzsKJiM0MzsJc3dpdGNoIChiZWhhdmlvcikgewomIzQzOwljYXNlIE1BRFZfSFVHRVBBR0U6CiYjNDM7CWNhc2UgTUFEVl9OT0hVR0VQQUdFOgomIzQzOwkJZXJyb3IgPSBodWdlcGFnZV9tYWR2aXNlKHZtYSwgbmV3X2ZsYWdzLCBiZWhhdmlvcik7CiYjNDM7CQlpZiAoZXJyb3IpCiYjNDM7CQkJcmV0dXJuIGVycm9yOwomIzQzOwkJKnVuY2hhcmdlX3Jlc2VydmVkX3RocCA9ICh2bWEtJmd0O3ZtX2ZsYWdzICZhbXA7IFZNX1JFU0VSVkVEX1RIUCkgJmFtcDsmYW1wOwomIzQzOwkJCQkJICEoKm5ld19mbGFncyAmYW1wOyBWTV9SRVNFUlZFRF9USFApOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CWNhc2UgTUFEVl9SRVNFUlZFRF9USFA6CiYjNDM7CQlpZiAoIUlTX0VOQUJMRUQoQ09ORklHXzY0QklUKSkKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCWlmICghdm1hX2lzX2Fub255bW91cyh2bWEpIHx8ICgqbmV3X2ZsYWdzICZhbXA7IFZNX1NIQVJFRCkgfHwKJiM0MzsJCSAgICAoKm5ld19mbGFncyAmYW1wOyBWTV9TUEVDSUFMKSkKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCWlmICghSVNfQUxJR05FRChyYW5nZS0mZ3Q7c3RhcnQsIEhQQUdFX1BNRF9TSVpFKSB8fAomIzQzOwkJICAgICFJU19BTElHTkVEKHJhbmdlLSZndDtlbmQsIEhQQUdFX1BNRF9TSVpFKSkKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJCWVycm9yID0gaHVnZXBhZ2VfbWFkdmlzZSh2bWEsIG5ld19mbGFncywgYmVoYXZpb3IpOwomIzQzOwkJaWYgKGVycm9yKQomIzQzOwkJCXJldHVybiBlcnJvcjsKJiM0MzsKJiM0MzsJCWlmICghKHZtYS0mZ3Q7dm1fZmxhZ3MgJmFtcDsgVk1fUkVTRVJWRURfVEhQKSkgewomIzQzOwkJCWhwYWdlcyA9IHJlc2VydmVkX3RocF9ocGFnZV9ucihyYW5nZS0mZ3Q7c3RhcnQsIHJhbmdlLSZndDtlbmQpOwomIzQzOwkJCWVycm9yID0gcmVzZXJ2ZWRfdGhwX2NoYXJnZShocGFnZXMpOwomIzQzOwkJCWlmIChlcnJvcikKJiM0MzsJCQkJcmV0dXJuIGVycm9yOwomIzQzOwkJCSpyZXNlcnZlZF9ocGFnZXMgPSBocGFnZXM7CiYjNDM7CQkJKmNoYXJnZV9yZXNlcnZlZF90aHAgPSB0cnVlOwomIzQzOwkJfQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzO30KJiM0MzsKIC8qCiAgKiBBcHBseSBhbiBtYWR2aXNlIGJlaGF2aW9yIHRvIGEgcmVnaW9uIG9mIGEgdm1hLiAgbWFkdmlzZV91cGRhdGVfdm1hCiAgKiB3aWxsIGhhbmRsZSBzcGxpdHRpbmcgYSB2bSBhcmVhIGludG8gc2VwYXJhdGUgYXJlYXMsIGVhY2ggYXJlYSB3aXRoIGl0cyBvd24KQEAgLTEzNDIsNiAmIzQzOzE0MDIsOSBAQCBzdGF0aWMgaW50IG1hZHZpc2Vfdm1hX2JlaGF2aW9yKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKQogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gbWFkdl9iZWhhdmlvci0mZ3Q7dm1hOwogCXZtX2ZsYWdzX3QgbmV3X2ZsYWdzID0gdm1hLSZndDt2bV9mbGFnczsKIAlzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvcl9yYW5nZSAqcmFuZ2UgPSAmYW1wO21hZHZfYmVoYXZpb3ItJmd0O3JhbmdlOwomIzQzOwl1bnNpZ25lZCBsb25nIHJlc2VydmVkX2hwYWdlcyA9IDA7CiYjNDM7CWJvb2wgY2hhcmdlX3Jlc2VydmVkX3RocCA9IGZhbHNlOwomIzQzOwlib29sIHVuY2hhcmdlX3Jlc2VydmVkX3RocCA9IGZhbHNlOwogCWludCBlcnJvcjsKIAogCWlmICh1bmxpa2VseSghY2FuX21hZHZpc2VfbW9kaWZ5KG1hZHZfYmVoYXZpb3IpKSkKQEAgLTEzNTMsMTQgJiM0MzsxNDE2LDIyIEBAIHN0YXRpYyBpbnQgbWFkdmlzZV92bWFfYmVoYXZpb3Ioc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpCiAJY2FzZSBNQURWX1dJTExORUVEOgogCQlyZXR1cm4gbWFkdmlzZV93aWxsbmVlZChtYWR2X2JlaGF2aW9yKTsKIAljYXNlIE1BRFZfQ09MRDoKJiM0MzsJCWlmICghcmVzZXJ2ZWRfdGhwX21hZHZpc2VfYWxpZ25lZCh2bWEsIHJhbmdlKSkKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKIAkJcmV0dXJuIG1hZHZpc2VfY29sZChtYWR2X2JlaGF2aW9yKTsKIAljYXNlIE1BRFZfUEFHRU9VVDoKJiM0MzsJCWlmICghcmVzZXJ2ZWRfdGhwX21hZHZpc2VfYWxpZ25lZCh2bWEsIHJhbmdlKSkKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKIAkJcmV0dXJuIG1hZHZpc2VfcGFnZW91dChtYWR2X2JlaGF2aW9yKTsKIAljYXNlIE1BRFZfRlJFRToKIAljYXNlIE1BRFZfRE9OVE5FRUQ6CiAJY2FzZSBNQURWX0RPTlRORUVEX0xPQ0tFRDoKJiM0MzsJCWlmICghcmVzZXJ2ZWRfdGhwX21hZHZpc2VfYWxpZ25lZCh2bWEsIHJhbmdlKSkKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKIAkJcmV0dXJuIG1hZHZpc2VfZG9udG5lZWRfZnJlZShtYWR2X2JlaGF2aW9yKTsKIAljYXNlIE1BRFZfQ09MTEFQU0U6CiYjNDM7CQlpZiAodm1hLSZndDt2bV9mbGFncyAmYW1wOyBWTV9SRVNFUlZFRF9USFApCiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiAJCXJldHVybiBtYWR2aXNlX2NvbGxhcHNlKHZtYSwgcmFuZ2UtJmd0O3N0YXJ0LCByYW5nZS0mZ3Q7ZW5kLAogCQkJJmFtcDttYWR2X2JlaGF2aW9yLSZndDtsb2NrX2Ryb3BwZWQpOwogCWNhc2UgTUFEVl9HVUFSRF9JTlNUQUxMOgpAQCAtMTQxNiw3ICYjNDM7MTQ4NywxMSBAQCBzdGF0aWMgaW50IG1hZHZpc2Vfdm1hX2JlaGF2aW9yKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKQogCQlicmVhazsKIAljYXNlIE1BRFZfSFVHRVBBR0U6CiAJY2FzZSBNQURWX05PSFVHRVBBR0U6Ci0JCWVycm9yID0gaHVnZXBhZ2VfbWFkdmlzZSh2bWEsICZhbXA7bmV3X2ZsYWdzLCBiZWhhdmlvcik7CiYjNDM7CWNhc2UgTUFEVl9SRVNFUlZFRF9USFA6CiYjNDM7CQllcnJvciA9IG1hZHZpc2VfaHVnZXBhZ2VfcG9saWN5KG1hZHZfYmVoYXZpb3IsICZhbXA7bmV3X2ZsYWdzLAomIzQzOwkJCQkJCSZhbXA7cmVzZXJ2ZWRfaHBhZ2VzLAomIzQzOwkJCQkJCSZhbXA7Y2hhcmdlX3Jlc2VydmVkX3RocCwKJiM0MzsJCQkJCQkmYW1wO3VuY2hhcmdlX3Jlc2VydmVkX3RocCk7CiAJCWlmIChlcnJvcikKIAkJCWdvdG8gb3V0OwogCQlicmVhazsKQEAgLTE0MzEsNiAmIzQzOzE1MDYsMTEgQEAgc3RhdGljIGludCBtYWR2aXNlX3ZtYV9iZWhhdmlvcihzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcikKIAlWTV9XQVJOX09OX09OQ0UobWFkdl9iZWhhdmlvci0mZ3Q7bG9ja19tb2RlICE9IE1BRFZJU0VfTU1BUF9XUklURV9MT0NLKTsKIAogCWVycm9yID0gbWFkdmlzZV91cGRhdGVfdm1hKG5ld19mbGFncywgbWFkdl9iZWhhdmlvcik7CiYjNDM7CWlmIChlcnJvciAmYW1wOyZhbXA7IGNoYXJnZV9yZXNlcnZlZF90aHApCiYjNDM7CQlyZXNlcnZlZF90aHBfdW5jaGFyZ2UocmVzZXJ2ZWRfaHBhZ2VzKTsKJiM0MzsJZWxzZSBpZiAoIWVycm9yICZhbXA7JmFtcDsgdW5jaGFyZ2VfcmVzZXJ2ZWRfdGhwKQomIzQzOwkJcmVzZXJ2ZWRfdGhwX3VuY2hhcmdlKHJlc2VydmVkX3RocF9ocGFnZV9ucihyYW5nZS0mZ3Q7c3RhcnQsCiYjNDM7CQkJCQkJCSAgICByYW5nZS0mZ3Q7ZW5kKSk7CiBvdXQ6CiAJLyoKIAkgKiBtYWR2aXNlKCkgcmV0dXJucyBFQUdBSU4gaWYga2VybmVsIHJlc291cmNlcywgc3VjaCBhcwpAQCAtMTU0MSw2ICYjNDM7MTYyMSw3IEBAIG1hZHZpc2VfYmVoYXZpb3JfdmFsaWQoaW50IGJlaGF2aW9yKQogCWNhc2UgTUFEVl9IVUdFUEFHRToKIAljYXNlIE1BRFZfTk9IVUdFUEFHRToKIAljYXNlIE1BRFZfQ09MTEFQU0U6CiYjNDM7CWNhc2UgTUFEVl9SRVNFUlZFRF9USFA6CiAjZW5kaWYKIAljYXNlIE1BRFZfRE9OVERVTVA6CiAJY2FzZSBNQURWX0RPRFVNUDoKZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmMKaW5kZXggZmYzMzhjMmFiZTkyMzEuLjIyNWZjMWFlMjIzODZkIDEwMDY0NAotLS0gYS9tbS9tZW1vcnkuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnkuYwpAQCAtNTI5Nyw2ICYjNDM7NTI5Nyw5IEBAIHN0YXRpYyB2bV9mYXVsdF90IGRvX2Fub255bW91c19wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKQogCWlmICh2bWEtJmd0O3ZtX2ZsYWdzICZhbXA7IFZNX1NIQVJFRCkKIAkJcmV0dXJuIFZNX0ZBVUxUX1NJR0JVUzsKIAomIzQzOwlpZiAodW5saWtlbHkodm1hLSZndDt2bV9mbGFncyAmYW1wOyBWTV9SRVNFUlZFRF9USFApKQomIzQzOwkJcmV0dXJuIFZNX0ZBVUxUX09PTTsKJiM0MzsKIAkvKgogCSAqIFVzZSBwdGVfYWxsb2MoKSBpbnN0ZWFkIG9mIHB0ZV9hbGxvY19tYXAoKSwgc28gdGhhdCBPT00gY2FuCiAJICogYmUgZGlzdGluZ3Vpc2hlZCBmcm9tIGEgdHJhbnNpZW50IGZhaWx1cmUgb2YgcHRlX29mZnNldF9tYXAoKS4KZGlmZiAtLWdpdCBhL21tL21tYXAuYyBiL21tL21tYXAuYwppbmRleCAyMzExYWU3YzJmZjQ1Yy4uNDgxOGIxNGVjMGZmNmMgMTAwNjQ0Ci0tLSBhL21tL21tYXAuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tbWFwLmMKQEAgLTEyNTEsNiAmIzQzOzEyNTEsNyBAQCB1bnNpZ25lZCBsb25nIHRlYXJfZG93bl92bWFzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWksCiAJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGVuZCkKIHsKIAl1bnNpZ25lZCBsb25nIG5yX2FjY291bnRlZCA9IDA7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbnJfcmVzZXJ2ZWRfdGhwID0gMDsKIAlpbnQgY291bnQgPSAwOwogCiAJbW1hcF9hc3NlcnRfd3JpdGVfbG9ja2VkKG1tKTsKQEAgLTEyNTgsNiAmIzQzOzEyNTksMTAgQEAgdW5zaWduZWQgbG9uZyB0ZWFyX2Rvd25fdm1hcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHZtYV9pdGVyYXRvciAqdm1pLAogCWRvIHsKIAkJaWYgKHZtYS0mZ3Q7dm1fZmxhZ3MgJmFtcDsgVk1fQUNDT1VOVCkKIAkJCW5yX2FjY291bnRlZCAmIzQzOz0gdm1hX3BhZ2VzKHZtYSk7CiYjNDM7CQlpZiAodm1hLSZndDt2bV9mbGFncyAmYW1wOyBWTV9SRVNFUlZFRF9USFApCiYjNDM7CQkJbnJfcmVzZXJ2ZWRfdGhwICYjNDM7PQomIzQzOwkJCQlyZXNlcnZlZF90aHBfaHBhZ2VfbnIodm1hLSZndDt2bV9zdGFydCwKJiM0MzsJCQkJCQkgICAgICB2bWEtJmd0O3ZtX2VuZCk7CiAJCXZtYV9tYXJrX2RldGFjaGVkKHZtYSk7CiAJCXJlbW92ZV92bWEodm1hKTsKIAkJY291bnQmIzQzOyYjNDM7OwpAQCAtMTI2Niw2ICYjNDM7MTI3MSw3IEBAIHVuc2lnbmVkIGxvbmcgdGVhcl9kb3duX3ZtYXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSwKIAl9IHdoaWxlICh2bWEgJmFtcDsmYW1wOyB2bWEtJmd0O3ZtX2VuZCAmbHQ7PSBlbmQpOwogCiAJVk1fV0FSTl9PTl9PTkNFKGNvdW50ICE9IG1tLSZndDttYXBfY291bnQpOwomIzQzOwlyZXNlcnZlZF90aHBfdW5jaGFyZ2UobnJfcmVzZXJ2ZWRfdGhwKTsKIAlyZXR1cm4gbnJfYWNjb3VudGVkOwogfQogCkBAIC0xNzMzLDYgJiM0MzsxNzM5LDcgQEAgX19sYXRlbnRfZW50cm9weSBpbnQgZHVwX21tYXAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm9sZG1tKQogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqbXBudCwgKnRtcDsKIAlpbnQgcmV0dmFsOwogCXVuc2lnbmVkIGxvbmcgY2hhcmdlID0gMDsKJiM0MzsJdW5zaWduZWQgbG9uZyByZXNlcnZlZF9jaGFyZ2UgPSAwOwogCUxJU1RfSEVBRCh1Zik7CiAJVk1BX0lURVJBVE9SKHZtaSwgbW0sIDApOwogCkBAIC0xNzc1LDYgJiM0MzsxNzgyLDcgQEAgX19sYXRlbnRfZW50cm9weSBpbnQgZHVwX21tYXAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm9sZG1tKQogCQkJY29udGludWU7CiAJCX0KIAkJY2hhcmdlID0gMDsKJiM0MzsJCXJlc2VydmVkX2NoYXJnZSA9IDA7CiAJCWlmIChtcG50LSZndDt2bV9mbGFncyAmYW1wOyBWTV9BQ0NPVU5UKSB7CiAJCQl1bnNpZ25lZCBsb25nIGxlbiA9IHZtYV9wYWdlcyhtcG50KTsKIApAQCAtMTc4Miw2ICYjNDM7MTc5MCwxNSBAQCBfX2xhdGVudF9lbnRyb3B5IGludCBkdXBfbW1hcChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IG1tX3N0cnVjdCAqb2xkbW0pCiAJCQkJZ290byBmYWlsX25vbWVtOwogCQkJY2hhcmdlID0gbGVuOwogCQl9CiYjNDM7CQlpZiAobXBudC0mZ3Q7dm1fZmxhZ3MgJmFtcDsgVk1fUkVTRVJWRURfVEhQKSB7CiYjNDM7CQkJdW5zaWduZWQgbG9uZyBsZW47CiYjNDM7CiYjNDM7CQkJbGVuID0gcmVzZXJ2ZWRfdGhwX2hwYWdlX25yKG1wbnQtJmd0O3ZtX3N0YXJ0LAomIzQzOwkJCQkJCSAgICBtcG50LSZndDt2bV9lbmQpOwomIzQzOwkJCWlmIChyZXNlcnZlZF90aHBfY2hhcmdlKGxlbikpCiYjNDM7CQkJCWdvdG8gZmFpbF9ub21lbTsKJiM0MzsJCQlyZXNlcnZlZF9jaGFyZ2UgPSBsZW47CiYjNDM7CQl9CiAKIAkJdG1wID0gdm1fYXJlYV9kdXAobXBudCk7CiAJCWlmICghdG1wKQpAQCAtMTkxNiw2ICYjNDM7MTkzMyw3IEBAIF9fbGF0ZW50X2VudHJvcHkgaW50IGR1cF9tbWFwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgbW1fc3RydWN0ICpvbGRtbSkKIAl2bV9hcmVhX2ZyZWUodG1wKTsKIGZhaWxfbm9tZW06CiAJcmV0dmFsID0gLUVOT01FTTsKJiM0MzsJcmVzZXJ2ZWRfdGhwX3VuY2hhcmdlKHJlc2VydmVkX2NoYXJnZSk7CiAJdm1fdW5hY2N0X21lbW9yeShjaGFyZ2UpOwogCWdvdG8gbG9vcF9vdXQ7CiB9CmRpZmYgLS1naXQgYS9tbS9tcmVtYXAuYyBiL21tL21yZW1hcC5jCmluZGV4IGU5YzhiMWQwNTgzMmJlLi5hZTM3ZTBiM2NlNzg4ZSAxMDA2NDQKLS0tIGEvbW0vbXJlbWFwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbXJlbWFwLmMKQEAgLTI0LDYgJiM0MzsyNCw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvbW11X25vdGlmaWVyLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdWFjY2Vzcy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3VzZXJmYXVsdGZkX2suaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaHVnZV9tbS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21lbXBvbGljeS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BnYWxsb2MuaCZndDsKIApAQCAtNjksNiAmIzQzOzcwLDcgQEAgc3RydWN0IHZtYV9yZW1hcF9zdHJ1Y3QgewogCWVudW0gbXJlbWFwX3R5cGUgcmVtYXBfdHlwZTsJLyogZXhwYW5kLCBzaHJpbmssIGV0Yy4gKi8KIAlib29sIG1tYXBfbG9ja2VkOwkJLyogSXMgbW0gY3VycmVudGx5IHdyaXRlLWxvY2tlZD8gKi8KIAl1bnNpZ25lZCBsb25nIGNoYXJnZWQ7CQkvKiBJZiBWTV9BQ0NPVU5ULCAjIHBhZ2VzIHRvIGFjY291bnQuICovCiYjNDM7CXVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWRfdGhwX2NoYXJnZWQ7IC8qIElmIFZNX1JFU0VSVkVEX1RIUCwgIyBocGFnZXMuICovCiAJYm9vbCB2bWlfbmVlZHNfaW52YWxpZGF0ZTsJLyogSXMgdGhlIFZNQSBpdGVyYXRvciBpbnZhbGlkYXRlZD8gKi8KIH07CiAKQEAgLTk2Miw2ICYjNDM7OTY0LDkgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgdnJtX3NldF9uZXdfYWRkcihzdHJ1Y3Qgdm1hX3JlbWFwX3N0cnVjdCAqdnJtKQogCQkJCW1hcF9mbGFncyk7CiAJaWYgKElTX0VSUl9WQUxVRShyZXMpKQogCQlyZXR1cm4gcmVzOwomIzQzOwlpZiAoKHZtYS0mZ3Q7dm1fZmxhZ3MgJmFtcDsgVk1fUkVTRVJWRURfVEhQKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAhSVNfQUxJR05FRChyZXMsIEhQQUdFX1BNRF9TSVpFKSkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwogCiAJdnJtLSZndDtuZXdfYWRkciA9IHJlczsKIAlyZXR1cm4gMDsKQEAgLTk3NywyNCAmIzQzOzk4Miw0NCBAQCBzdGF0aWMgYm9vbCB2cm1fY2FsY19jaGFyZ2Uoc3RydWN0IHZtYV9yZW1hcF9zdHJ1Y3QgKnZybSkKIHsKIAl1bnNpZ25lZCBsb25nIGNoYXJnZWQ7CiAKLQlpZiAoISh2cm0tJmd0O3ZtYS0mZ3Q7dm1fZmxhZ3MgJmFtcDsgVk1fQUNDT1VOVCkpCi0JCXJldHVybiB0cnVlOwomIzQzOwl2cm0tJmd0O2NoYXJnZWQgPSAwOwomIzQzOwl2cm0tJmd0O3Jlc2VydmVkX3RocF9jaGFyZ2VkID0gMDsKIAotCS8qCi0JICogSWYgd2UgZG9uJiMzOTt0IHVubWFwIHRoZSBvbGQgbWFwcGluZywgdGhlbiB3ZSBhY2NvdW50IHRoZSBlbnRpcmV0eSBvZgotCSAqIHRoZSBsZW5ndGggb2YgdGhlIG5ldyBvbmUuIE90aGVyd2lzZSBpdCYjMzk7cyBqdXN0IHRoZSBkZWx0YSBpbiBzaXplLgotCSAqLwotCWlmICh2cm0tJmd0O2ZsYWdzICZhbXA7IE1SRU1BUF9ET05UVU5NQVApCi0JCWNoYXJnZWQgPSB2cm0tJmd0O25ld19sZW4gJmd0OyZndDsgUEFHRV9TSElGVDsKLQllbHNlCi0JCWNoYXJnZWQgPSB2cm0tJmd0O2RlbHRhICZndDsmZ3Q7IFBBR0VfU0hJRlQ7CiYjNDM7CWlmICh2cm0tJmd0O3ZtYS0mZ3Q7dm1fZmxhZ3MgJmFtcDsgVk1fQUNDT1VOVCkgewomIzQzOwkJLyoKJiM0MzsJCSAqIElmIHdlIGRvbiYjMzk7dCB1bm1hcCB0aGUgb2xkIG1hcHBpbmcsIHRoZW4gd2UgYWNjb3VudCB0aGUKJiM0MzsJCSAqIGVudGlyZXR5IG9mIHRoZSBsZW5ndGggb2YgdGhlIG5ldyBvbmUuIE90aGVyd2lzZSBpdCYjMzk7cyBqdXN0CiYjNDM7CQkgKiB0aGUgZGVsdGEgaW4gc2l6ZS4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKHZybS0mZ3Q7ZmxhZ3MgJmFtcDsgTVJFTUFQX0RPTlRVTk1BUCkKJiM0MzsJCQljaGFyZ2VkID0gdnJtLSZndDtuZXdfbGVuICZndDsmZ3Q7IFBBR0VfU0hJRlQ7CiYjNDM7CQllbHNlCiYjNDM7CQkJY2hhcmdlZCA9IHZybS0mZ3Q7ZGVsdGEgJmd0OyZndDsgUEFHRV9TSElGVDsKIAogCi0JLyogVGhpcyBhY2NvdW50cyAmIzM5O2NoYXJnZWQmIzM5OyBwYWdlcyBvZiBtZW1vcnkuICovCi0JaWYgKHNlY3VyaXR5X3ZtX2Vub3VnaF9tZW1vcnlfbW0oY3VycmVudC0mZ3Q7bW0sIGNoYXJnZWQpKQotCQlyZXR1cm4gZmFsc2U7CiYjNDM7CQkvKiBUaGlzIGFjY291bnRzICYjMzk7Y2hhcmdlZCYjMzk7IHBhZ2VzIG9mIG1lbW9yeS4gKi8KJiM0MzsJCWlmIChzZWN1cml0eV92bV9lbm91Z2hfbWVtb3J5X21tKGN1cnJlbnQtJmd0O21tLCBjaGFyZ2VkKSkKJiM0MzsJCQlyZXR1cm4gZmFsc2U7CiAKLQl2cm0tJmd0O2NoYXJnZWQgPSBjaGFyZ2VkOwomIzQzOwkJdnJtLSZndDtjaGFyZ2VkID0gY2hhcmdlZDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAodnJtLSZndDt2bWEtJmd0O3ZtX2ZsYWdzICZhbXA7IFZNX1JFU0VSVkVEX1RIUCkgewomIzQzOwkJdW5zaWduZWQgbG9uZyBocGFnZXM7CiYjNDM7CiYjNDM7CQlpZiAodnJtLSZndDtmbGFncyAmYW1wOyBNUkVNQVBfRE9OVFVOTUFQKQomIzQzOwkJCWhwYWdlcyA9IHJlc2VydmVkX3RocF9ocGFnZV9ucigwLCB2cm0tJmd0O25ld19sZW4pOwomIzQzOwkJZWxzZQomIzQzOwkJCWhwYWdlcyA9IHJlc2VydmVkX3RocF9ocGFnZV9ucigwLCB2cm0tJmd0O2RlbHRhKTsKJiM0MzsKJiM0MzsJCWlmIChyZXNlcnZlZF90aHBfY2hhcmdlKGhwYWdlcykpIHsKJiM0MzsJCQl2bV91bmFjY3RfbWVtb3J5KHZybS0mZ3Q7Y2hhcmdlZCk7CiYjNDM7CQkJdnJtLSZndDtjaGFyZ2VkID0gMDsKJiM0MzsJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQl2cm0tJmd0O3Jlc2VydmVkX3RocF9jaGFyZ2VkID0gaHBhZ2VzOwomIzQzOwl9CiAJcmV0dXJuIHRydWU7CiB9CiAKQEAgLTEwMDQsMTEgJiM0MzsxMDI5LDEwIEBAIHN0YXRpYyBib29sIHZybV9jYWxjX2NoYXJnZShzdHJ1Y3Qgdm1hX3JlbWFwX3N0cnVjdCAqdnJtKQogICovCiBzdGF0aWMgdm9pZCB2cm1fdW5jaGFyZ2Uoc3RydWN0IHZtYV9yZW1hcF9zdHJ1Y3QgKnZybSkKIHsKLQlpZiAoISh2cm0tJmd0O3ZtYS0mZ3Q7dm1fZmxhZ3MgJmFtcDsgVk1fQUNDT1VOVCkpCi0JCXJldHVybjsKLQogCXZtX3VuYWNjdF9tZW1vcnkodnJtLSZndDtjaGFyZ2VkKTsKIAl2cm0tJmd0O2NoYXJnZWQgPSAwOwomIzQzOwlyZXNlcnZlZF90aHBfdW5jaGFyZ2UodnJtLSZndDtyZXNlcnZlZF90aHBfY2hhcmdlZCk7CiYjNDM7CXZybS0mZ3Q7cmVzZXJ2ZWRfdGhwX2NoYXJnZWQgPSAwOwogfQogCiAvKgpAQCAtMTE1Nyw4ICYjNDM7MTE4MSw4IEBAIHN0YXRpYyB2b2lkIHVubWFwX3NvdXJjZV92bWEoc3RydWN0IHZtYV9yZW1hcF9zdHJ1Y3QgKnZybSkKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHZybS0mZ3Q7dm1hOwogCVZNQV9JVEVSQVRPUih2bWksIG1tLCBhZGRyKTsKIAlpbnQgZXJyOwotCXVuc2lnbmVkIGxvbmcgdm1fc3RhcnQ7Ci0JdW5zaWduZWQgbG9uZyB2bV9lbmQ7CiYjNDM7CXVuc2lnbmVkIGxvbmcgdm1fc3RhcnQgPSAwOwomIzQzOwl1bnNpZ25lZCBsb25nIHZtX2VuZCA9IDA7CiAJLyoKIAkgKiBJdCBtaWdodCBzZWVtIG9kZCB0aGF0IHdlIGNoZWNrIGZvciBNUkVNQVBfRE9OVFVOTUFQIGhlcmUsIGdpdmVuIHRoaXMKIAkgKiBmdW5jdGlvbiBpbXBsaWVzIHRoYXQgd2UgdW5tYXAgdGhlIG9yaWdpbmFsIFZNQSwgd2hpY2ggc2VlbXMKQEAgLTExNzAsNiAmIzQzOzExOTQsOCBAQCBzdGF0aWMgdm9pZCB1bm1hcF9zb3VyY2Vfdm1hKHN0cnVjdCB2bWFfcmVtYXBfc3RydWN0ICp2cm0pCiAJICovCiAJYm9vbCBhY2NvdW50YWJsZV9tb3ZlID0gKHZtYS0mZ3Q7dm1fZmxhZ3MgJmFtcDsgVk1fQUNDT1VOVCkgJmFtcDsmYW1wOwogCQkhKHZybS0mZ3Q7ZmxhZ3MgJmFtcDsgTVJFTUFQX0RPTlRVTk1BUCk7CiYjNDM7CWJvb2wgcmVzZXJ2ZWRfdGhwX21vdmUgPSAodm1hLSZndDt2bV9mbGFncyAmYW1wOyBWTV9SRVNFUlZFRF9USFApICZhbXA7JmFtcDsKJiM0MzsJCSEodnJtLSZndDtmbGFncyAmYW1wOyBNUkVNQVBfRE9OVFVOTUFQKTsKIAogCS8qCiAJICogU28gd2UgcGVyZm9ybSBhIHRyaWNrIGhlcmUgdG8gcHJldmVudCBpbmNvcnJlY3QgYWNjb3VudGluZy4gQW55IG1lcmdlCkBAIC0xMTkyLDYgJiM0MzsxMjE4LDEzIEBAIHN0YXRpYyB2b2lkIHVubWFwX3NvdXJjZV92bWEoc3RydWN0IHZtYV9yZW1hcF9zdHJ1Y3QgKnZybSkKIAkJdm1fc3RhcnQgPSB2bWEtJmd0O3ZtX3N0YXJ0OwogCQl2bV9lbmQgPSB2bWEtJmd0O3ZtX2VuZDsKIAl9CiYjNDM7CWlmIChyZXNlcnZlZF90aHBfbW92ZSkgewomIzQzOwkJdm1fZmxhZ3NfY2xlYXIodm1hLCBWTV9SRVNFUlZFRF9USFApOwomIzQzOwkJaWYgKCFhY2NvdW50YWJsZV9tb3ZlKSB7CiYjNDM7CQkJdm1fc3RhcnQgPSB2bWEtJmd0O3ZtX3N0YXJ0OwomIzQzOwkJCXZtX2VuZCA9IHZtYS0mZ3Q7dm1fZW5kOwomIzQzOwkJfQomIzQzOwl9CiAKIAllcnIgPSBkb192bWlfbXVubWFwKCZhbXA7dm1pLCBtbSwgYWRkciwgbGVuLCB2cm0tJmd0O3VmX3VubWFwLCAvKiB1bmxvY2s9ICovZmFsc2UpOwogCXZybS0mZ3Q7dm1hID0gTlVMTDsgLyogSW52YWxpZGF0ZWQuICovCkBAIC0xMjI3LDE5ICYjNDM7MTI2MCwyNyBAQCBzdGF0aWMgdm9pZCB1bm1hcF9zb3VyY2Vfdm1hKHN0cnVjdCB2bWFfcmVtYXBfc3RydWN0ICp2cm0pCiAJICoKIAkgKiBkb192bWlfbXVubWFwKCkgd2lsbCBoYXZlIHJlc3RvcmVkIHRoZSBWTUkgYmFjayB0byBhZGRyLgogCSAqLwotCWlmIChhY2NvdW50YWJsZV9tb3ZlKSB7CiYjNDM7CWlmIChhY2NvdW50YWJsZV9tb3ZlIHx8IHJlc2VydmVkX3RocF9tb3ZlKSB7CiAJCXVuc2lnbmVkIGxvbmcgZW5kID0gYWRkciAmIzQzOyBsZW47Ci0KLQkJaWYgKHZtX3N0YXJ0ICZsdDsgYWRkcikgewotCQkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICpwcmV2ID0gdm1hX3ByZXYoJmFtcDt2bWkpOwotCi0JCQl2bV9mbGFnc19zZXQocHJldiwgVk1fQUNDT1VOVCk7IC8qIEFjcXVpcmVzIFZNQSBsb2NrLiAqLwomIzQzOwkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICpwcmV2ID0gTlVMTDsKJiM0MzsJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqbmV4dCA9IE5VTEw7CiYjNDM7CiYjNDM7CQlpZiAodm1fc3RhcnQgJmx0OyBhZGRyKQomIzQzOwkJCXByZXYgPSB2bWFfcHJldigmYW1wO3ZtaSk7CiYjNDM7CQlpZiAodm1fZW5kICZndDsgZW5kKQomIzQzOwkJCW5leHQgPSB2bWFfbmV4dCgmYW1wO3ZtaSk7CiYjNDM7CiYjNDM7CQlpZiAoYWNjb3VudGFibGVfbW92ZSkgewomIzQzOwkJCWlmIChwcmV2KQomIzQzOwkJCQl2bV9mbGFnc19zZXQocHJldiwgVk1fQUNDT1VOVCk7IC8qIEFjcXVpcmVzIFZNQSBsb2NrLiAqLwomIzQzOwkJCWlmIChuZXh0KQomIzQzOwkJCQl2bV9mbGFnc19zZXQobmV4dCwgVk1fQUNDT1VOVCk7IC8qIEFjcXVpcmVzIFZNQSBsb2NrLiAqLwogCQl9Ci0KLQkJaWYgKHZtX2VuZCAmZ3Q7IGVuZCkgewotCQkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICpuZXh0ID0gdm1hX25leHQoJmFtcDt2bWkpOwotCi0JCQl2bV9mbGFnc19zZXQobmV4dCwgVk1fQUNDT1VOVCk7IC8qIEFjcXVpcmVzIFZNQSBsb2NrLiAqLwomIzQzOwkJaWYgKHJlc2VydmVkX3RocF9tb3ZlKSB7CiYjNDM7CQkJaWYgKHByZXYpCiYjNDM7CQkJCXZtX2ZsYWdzX3NldChwcmV2LCBWTV9SRVNFUlZFRF9USFApOwomIzQzOwkJCWlmIChuZXh0KQomIzQzOwkJCQl2bV9mbGFnc19zZXQobmV4dCwgVk1fUkVTRVJWRURfVEhQKTsKIAkJfQogCX0KIH0KQEAgLTEzMDksNyAmIzQzOzEzNTAsNiBAQCBzdGF0aWMgaW50IGNvcHlfdm1hX2FuZF9kYXRhKHN0cnVjdCB2bWFfcmVtYXBfc3RydWN0ICp2cm0sCiAJKm5ld192bWFfcHRyID0gbmV3X3ZtYTsKIAlyZXR1cm4gZXJyOwogfQotCiAvKgogICogUGVyZm9ybSBmaW5hbCB0YXNrcyBmb3IgTUFEVl9ET05UVU5NQVAgb3BlcmF0aW9uLCBjbGVhcmluZyBtbG9jaygpIGZsYWcgb24KICAqIHJlbWFpbmluZyBWTUEgYnkgY29udmVudGlvbiAoaXQgY2Fubm90IGJlIG1sb2NrKCkmIzM5O2QgYW55IGxvbmdlciwgYXMgcGFnZXMgaW4KQEAgLTE1NzYsNiAmIzQzOzE2MTYsMjMgQEAgc3RhdGljIGJvb2wgYWxpZ25faHVnZXRsYihzdHJ1Y3Qgdm1hX3JlbWFwX3N0cnVjdCAqdnJtKQogCXJldHVybiB0cnVlOwogfQogCiYjNDM7c3RhdGljIGJvb2wgY2hlY2tfcmVzZXJ2ZWRfdGhwX2FsaWdubWVudChzdHJ1Y3Qgdm1hX3JlbWFwX3N0cnVjdCAqdnJtKQomIzQzO3sKJiM0MzsJaWYgKCEodnJtLSZndDt2bWEtJmd0O3ZtX2ZsYWdzICZhbXA7IFZNX1JFU0VSVkVEX1RIUCkpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsKJiM0MzsJaWYgKCFJU19BTElHTkVEKHZybS0mZ3Q7YWRkciwgSFBBR0VfUE1EX1NJWkUpIHx8CiYjNDM7CSAgICAhSVNfQUxJR05FRCh2cm0tJmd0O29sZF9sZW4sIEhQQUdFX1BNRF9TSVpFKSB8fAomIzQzOwkgICAgIUlTX0FMSUdORUQodnJtLSZndDtuZXdfbGVuLCBIUEFHRV9QTURfU0laRSkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWlmICgodnJtLSZndDtyZW1hcF90eXBlID09IE1SRU1BUF9FWFBBTkQgfHwgdnJtX2ltcGxpZXNfbmV3X2FkZHIodnJtKSkgJmFtcDsmYW1wOwomIzQzOwkgICAgIUlTX0FMSUdORUQodnJtLSZndDtuZXdfYWRkciwgSFBBR0VfUE1EX1NJWkUpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiAvKgogICogV2UgYXJlIG1yZW1hcCgpJiMzOTtpbmcgd2l0aG91dCBzcGVjaWZ5aW5nIGEgZml4ZWQgYWRkcmVzcyB0byBtb3ZlIHRvLCBidXQgYXJlCiAgKiByZXF1ZXN0aW5nIHRoYXQgdGhlIFZNQSYjMzk7cyBzaXplIGJlIGluY3JlYXNlZC4KQEAgLTE3NDUsNiAmIzQzOzE4MDIsOCBAQCBzdGF0aWMgaW50IGNoZWNrX3ByZXBfdm1hKHN0cnVjdCB2bWFfcmVtYXBfc3RydWN0ICp2cm0pCiAJLyogRm9yIGNvbnZlbmllbmNlLCB3ZSBzZXQgbmV3X2FkZHIgZXZlbiBpZiBWTUEgd29uJiMzOTt0IG1vdmUuICovCiAJaWYgKCF2cm1faW1wbGllc19uZXdfYWRkcih2cm0pKQogCQl2cm0tJmd0O25ld19hZGRyID0gYWRkcjsKJiM0MzsJaWYgKCFjaGVja19yZXNlcnZlZF90aHBfYWxpZ25tZW50KHZybSkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIEJlbG93IG9ubHkgbWVhbmluZ2Z1bCBpZiB3ZSBleHBhbmQgb3IgbW92ZSBhIFZNQS4gKi8KIAlpZiAoIXZybV93aWxsX21hcF9uZXcodnJtKSkKZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuYwppbmRleCBlZTkwMmE0NjhjMmY1Yi4uNjYwZTUwMWJmNjc2YjYgMTAwNjQ0Ci0tLSBhL21tL3BhZ2VfYWxsb2MuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX2FsbG9jLmMKQEAgLTI2Myw2ICYjNDM7MjYzLDcgQEAgY29uc3QgY2hhciAqIGNvbnN0IG1pZ3JhdGV0eXBlX25hbWVzW01JR1JBVEVfVFlQRVNdID0gewogI2lmZGVmIENPTkZJR19DTUEKIAkmIzM0O0NNQSYjMzQ7LAogI2VuZGlmCiYjNDM7CSYjMzQ7UmVzZXJ2ZVRIUCYjMzQ7LAogI2lmZGVmIENPTkZJR19NRU1PUllfSVNPTEFUSU9OCiAJJiMzNDtJc29sYXRlJiMzNDssCiAjZW5kaWYKQEAgLTc4NCw2ICYjNDM7Nzg1LDkgQEAgc3RhdGljIGlubGluZSB2b2lkIGFjY291bnRfZnJlZXBhZ2VzKHN0cnVjdCB6b25lICp6b25lLCBpbnQgbnJfcGFnZXMsCiAJZWxzZSBpZiAobWlncmF0ZXR5cGUgPT0gTUlHUkFURV9ISUdIQVRPTUlDKQogCQlXUklURV9PTkNFKHpvbmUtJmd0O25yX2ZyZWVfaGlnaGF0b21pYywKIAkJCSAgIHpvbmUtJmd0O25yX2ZyZWVfaGlnaGF0b21pYyAmIzQzOyBucl9wYWdlcyk7CiYjNDM7CWVsc2UgaWYgKG1pZ3JhdGV0eXBlID09IE1JR1JBVEVfUkVTRVJWRURfVEhQKQomIzQzOwkJV1JJVEVfT05DRSh6b25lLSZndDtucl9mcmVlX3Jlc2VydmVkX3RocCwKJiM0MzsJCQkgICB6b25lLSZndDtucl9mcmVlX3Jlc2VydmVkX3RocCAmIzQzOyBucl9wYWdlcyk7CiB9CiAKIC8qIFVzZWQgZm9yIHBhZ2VzIG5vdCBvbiBhbm90aGVyIGxpc3QgKi8KQEAgLTI0NTYsNiAmIzQzOzI0NjAsOSBAQCBfX3JtcXVldWUoc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGludCBvcmRlciwgaW50IG1pZ3JhdGV0eXBlLAogewogCXN0cnVjdCBwYWdlICpwYWdlOwogCiYjNDM7CWlmIChhbGxvY19mbGFncyAmYW1wOyBBTExPQ19SRVNFUlZFRF9USFApCiYjNDM7CQlyZXR1cm4gX19ybXF1ZXVlX3NtYWxsZXN0KHpvbmUsIG9yZGVyLCBNSUdSQVRFX1JFU0VSVkVEX1RIUCk7CiYjNDM7CiAJaWYgKElTX0VOQUJMRUQoQ09ORklHX0NNQSkpIHsKIAkJLyoKIAkJICogQmFsYW5jZSBtb3ZhYmxlIGFsbG9jYXRpb25zIGJldHdlZW4gcmVndWxhciBhbmQgQ01BIGFyZWFzIGJ5CkBAIC0yOTYwLDcgJiM0MzsyOTY3LDggQEAgc3RhdGljIHZvaWQgX19mcmVlX2Zyb3plbl9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLAogCXpvbmUgPSBwYWdlX3pvbmUocGFnZSk7CiAJbWlncmF0ZXR5cGUgPSBnZXRfcGZuYmxvY2tfbWlncmF0ZXR5cGUocGFnZSwgcGZuKTsKIAlpZiAodW5saWtlbHkobWlncmF0ZXR5cGUgJmd0Oz0gTUlHUkFURV9QQ1BUWVBFUykpIHsKLQkJaWYgKHVubGlrZWx5KGlzX21pZ3JhdGVfaXNvbGF0ZShtaWdyYXRldHlwZSkpKSB7CiYjNDM7CQlpZiAodW5saWtlbHkoaXNfbWlncmF0ZV9yZXNlcnZlZF90aHAobWlncmF0ZXR5cGUpIHx8CiYjNDM7CQkJICAgICBpc19taWdyYXRlX2lzb2xhdGUobWlncmF0ZXR5cGUpKSkgewogCQkJZnJlZV9vbmVfcGFnZSh6b25lLCBwYWdlLCBwZm4sIG9yZGVyLCBmcGlfZmxhZ3MpOwogCQkJcmV0dXJuOwogCQl9CkBAIC0zMDM4LDYgJiM0MzszMDQ2LDcgQEAgdm9pZCBmcmVlX3VucmVmX2ZvbGlvcyhzdHJ1Y3QgZm9saW9fYmF0Y2ggKmZvbGlvcykKIAogCQkvKiBEaWZmZXJlbnQgem9uZSByZXF1aXJlcyBhIGRpZmZlcmVudCBwY3AgbG9jayAqLwogCQlpZiAoem9uZSAhPSBsb2NrZWRfem9uZSB8fAomIzQzOwkJICAgIGlzX21pZ3JhdGVfcmVzZXJ2ZWRfdGhwKG1pZ3JhdGV0eXBlKSB8fAogCQkgICAgaXNfbWlncmF0ZV9pc29sYXRlKG1pZ3JhdGV0eXBlKSkgewogCQkJaWYgKHBjcCkgewogCQkJCXBjcF9zcGluX3VubG9jayhwY3ApOwpAQCAtMzA0NSw2ICYjNDM7MzA1NCwxMiBAQCB2b2lkIGZyZWVfdW5yZWZfZm9saW9zKHN0cnVjdCBmb2xpb19iYXRjaCAqZm9saW9zKQogCQkJCXBjcCA9IE5VTEw7CiAJCQl9CiAKJiM0MzsJCQlpZiAoaXNfbWlncmF0ZV9yZXNlcnZlZF90aHAobWlncmF0ZXR5cGUpKSB7CiYjNDM7CQkJCWZyZWVfb25lX3BhZ2Uoem9uZSwgJmFtcDtmb2xpby0mZ3Q7cGFnZSwgcGZuLAomIzQzOwkJCQkJICAgICAgb3JkZXIsIEZQSV9OT05FKTsKJiM0MzsJCQkJY29udGludWU7CiYjNDM7CQkJfQomIzQzOwogCQkJLyoKIAkJCSAqIEZyZWUgaXNvbGF0ZWQgcGFnZXMgZGlyZWN0bHkgdG8gdGhlCiAJCQkgKiBhbGxvY2F0b3IsIHNlZSBjb21tZW50IGluIGZyZWVfZnJvemVuX3BhZ2VzLgpAQCAtMzIzNSw3ICYjNDM7MzI1MCw4IEBAIHN0cnVjdCBwYWdlICpybXF1ZXVlX2J1ZGR5KHN0cnVjdCB6b25lICpwcmVmZXJyZWRfem9uZSwgc3RydWN0IHpvbmUgKnpvbmUsCiAJCQkgKiByZXNlcnZlcyBhcyBmYWlsaW5nIG5vdyBpcyB3b3JzZSB0aGFuIGZhaWxpbmcgYQogCQkJICogaGlnaC1vcmRlciBhdG9taWMgYWxsb2NhdGlvbiBpbiB0aGUgZnV0dXJlLgogCQkJICovCi0JCQlpZiAoIXBhZ2UgJmFtcDsmYW1wOyAoYWxsb2NfZmxhZ3MgJmFtcDsgKEFMTE9DX09PTXxBTExPQ19OT05fQkxPQ0spKSkKJiM0MzsJCQlpZiAoIXBhZ2UgJmFtcDsmYW1wOyAhKGFsbG9jX2ZsYWdzICZhbXA7IEFMTE9DX1JFU0VSVkVEX1RIUCkgJmFtcDsmYW1wOwomIzQzOwkJCSAgICAoYWxsb2NfZmxhZ3MgJmFtcDsgKEFMTE9DX09PTXxBTExPQ19OT05fQkxPQ0spKSkKIAkJCQlwYWdlID0gX19ybXF1ZXVlX3NtYWxsZXN0KHpvbmUsIG9yZGVyLCBNSUdSQVRFX0hJR0hBVE9NSUMpOwogCiAJCQlpZiAoIXBhZ2UpIHsKQEAgLTM0MDUsNyAmIzQzOzM0MjEsOCBAQCBzdHJ1Y3QgcGFnZSAqcm1xdWV1ZShzdHJ1Y3Qgem9uZSAqcHJlZmVycmVkX3pvbmUsCiB7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAKLQlpZiAobGlrZWx5KHBjcF9hbGxvd2VkX29yZGVyKG9yZGVyKSkpIHsKJiM0MzsJaWYgKGxpa2VseShwY3BfYWxsb3dlZF9vcmRlcihvcmRlcikpICZhbXA7JmFtcDsKJiM0MzsJICAgICEoYWxsb2NfZmxhZ3MgJmFtcDsgQUxMT0NfUkVTRVJWRURfVEhQKSkgewogCQlwYWdlID0gcm1xdWV1ZV9wY3BsaXN0KHByZWZlcnJlZF96b25lLCB6b25lLCBvcmRlciwKIAkJCQkgICAgICAgbWlncmF0ZXR5cGUsIGFsbG9jX2ZsYWdzKTsKIAkJaWYgKGxpa2VseShwYWdlKSkKQEAgLTM1NTYsNiAmIzQzOzM1NzMsMzUgQEAgc3RhdGljIGJvb2wgdW5yZXNlcnZlX2hpZ2hhdG9taWNfcGFnZWJsb2NrKGNvbnN0IHN0cnVjdCBhbGxvY19jb250ZXh0ICphYywKIAlyZXR1cm4gZmFsc2U7CiB9CiAKJiM0Mzt1bnNpZ25lZCBsb25nIHJlc2VydmVkX3RocF9wYWdlYmxvY2tzKHVuc2lnbmVkIGxvbmcgbnJfaHBhZ2VzKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgaW50IG9yZGVyID0gbWF4X3QodW5zaWduZWQgaW50LCBIUEFHRV9QTURfT1JERVIsCiYjNDM7CQkJCSAgIHBhZ2VibG9ja19vcmRlcik7CiYjNDM7CXVuc2lnbmVkIGxvbmcgaHBhZ2VzX3Blcl9ibG9jayA9IDFVTCAmbHQ7Jmx0OyAob3JkZXIgLSBIUEFHRV9QTURfT1JERVIpOwomIzQzOwl1bnNpZ25lZCBsb25nIHJlc2VydmVkID0gMDsKJiM0MzsJZ2ZwX3QgZ2ZwID0gKEdGUF9ISUdIVVNFUiB8IF9fR0ZQX0NPTVAgfCBfX0dGUF9OT01FTUFMTE9DIHwKJiM0MzsJCSAgICAgX19HRlBfTk9XQVJOIHwgX19HRlBfTk9SRVRSWSk7CiYjNDM7CiYjNDM7CXdoaWxlIChyZXNlcnZlZCAmbHQ7IG5yX2hwYWdlcykgewomIzQzOwkJc3RydWN0IHBhZ2UgKnBhZ2U7CiYjNDM7CQlzdHJ1Y3Qgem9uZSAqem9uZTsKJiM0MzsJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CiYjNDM7CQlwYWdlID0gYWxsb2NfcGFnZXMoZ2ZwLCBvcmRlcik7CiYjNDM7CQlpZiAoIXBhZ2UpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiYjNDM7CQl6b25lID0gcGFnZV96b25lKHBhZ2UpOwomIzQzOwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDt6b25lLSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CQljaGFuZ2VfcGFnZWJsb2NrX3JhbmdlKHBhZ2UsIG9yZGVyLCBNSUdSQVRFX1JFU0VSVkVEX1RIUCk7CiYjNDM7CQl6b25lLSZndDtucl9yZXNlcnZlZF90aHAgJiM0Mzs9IDFVTCAmbHQ7Jmx0OyBvcmRlcjsKJiM0MzsJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDt6b25lLSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CQlfX2ZyZWVfcGFnZXMocGFnZSwgb3JkZXIpOwomIzQzOwkJcmVzZXJ2ZWQgJiM0Mzs9IGhwYWdlc19wZXJfYmxvY2s7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIHJlc2VydmVkOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgbG9uZyBfX3pvbmVfd2F0ZXJtYXJrX3VudXNhYmxlX2ZyZWUoc3RydWN0IHpvbmUgKnosCiAJCQkJdW5zaWduZWQgaW50IG9yZGVyLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpCiB7CkBAIC0zNTY4LDYgJiM0MzszNjE0LDkgQEAgc3RhdGljIGlubGluZSBsb25nIF9fem9uZV93YXRlcm1hcmtfdW51c2FibGVfZnJlZShzdHJ1Y3Qgem9uZSAqeiwKIAlpZiAobGlrZWx5KCEoYWxsb2NfZmxhZ3MgJmFtcDsgQUxMT0NfUkVTRVJWRVMpKSkKIAkJdW51c2FibGVfZnJlZSAmIzQzOz0gUkVBRF9PTkNFKHotJmd0O25yX2ZyZWVfaGlnaGF0b21pYyk7CiAKJiM0MzsJaWYgKCEoYWxsb2NfZmxhZ3MgJmFtcDsgQUxMT0NfUkVTRVJWRURfVEhQKSkKJiM0MzsJCXVudXNhYmxlX2ZyZWUgJiM0Mzs9IFJFQURfT05DRSh6LSZndDtucl9mcmVlX3Jlc2VydmVkX3RocCk7CiYjNDM7CiAjaWZkZWYgQ09ORklHX0NNQQogCS8qIElmIGFsbG9jYXRpb24gY2FuJiMzOTt0IHVzZSBDTUEgYXJlYXMgZG9uJiMzOTt0IHVzZSBmcmVlIENNQSBwYWdlcyAqLwogCWlmICghKGFsbG9jX2ZsYWdzICZhbXA7IEFMTE9DX0NNQSkpCkBAIC0zNjQyLDYgJiM0MzszNjkxLDEyIEBAIGJvb2wgX196b25lX3dhdGVybWFya19vayhzdHJ1Y3Qgem9uZSAqeiwgdW5zaWduZWQgaW50IG9yZGVyLCB1bnNpZ25lZCBsb25nIG1hcmssCiAJCWlmICghYXJlYS0mZ3Q7bnJfZnJlZSkKIAkJCWNvbnRpbnVlOwogCiYjNDM7CQlpZiAoYWxsb2NfZmxhZ3MgJmFtcDsgQUxMT0NfUkVTRVJWRURfVEhQKSB7CiYjNDM7CQkJaWYgKCFmcmVlX2FyZWFfZW1wdHkoYXJlYSwgTUlHUkFURV9SRVNFUlZFRF9USFApKQomIzQzOwkJCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsKIAkJZm9yIChtdCA9IDA7IG10ICZsdDsgTUlHUkFURV9QQ1BUWVBFUzsgbXQmIzQzOyYjNDM7KSB7CiAJCQlpZiAoIWZyZWVfYXJlYV9lbXB0eShhcmVhLCBtdCkpCiAJCQkJcmV0dXJuIHRydWU7CkBAIC0zODc2LDYgJiM0MzszOTMxLDkgQEAgZ2V0X3BhZ2VfZnJvbV9mcmVlbGlzdChnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLCBpbnQgYWxsb2NfZmxhZ3MsCiAKIAkJY29uZF9hY2NlcHRfbWVtb3J5KHpvbmUsIG9yZGVyLCBhbGxvY19mbGFncyk7CiAKJiM0MzsJCWlmIChhbGxvY19mbGFncyAmYW1wOyBBTExPQ19SRVNFUlZFRF9USFApCiYjNDM7CQkJZ290byB0cnlfdGhpc196b25lOwomIzQzOwogCQkvKgogCQkgKiBEZXRlY3Qgd2hldGhlciB0aGUgbnVtYmVyIG9mIGZyZWUgcGFnZXMgaXMgYmVsb3cgaGlnaAogCQkgKiB3YXRlcm1hcmsuICBJZiBzbywgd2Ugd2lsbCBkZWNyZWFzZSBwY3AtJmd0O2hpZ2ggYW5kIGZyZWUKQEAgLTUwMzMsNiAmIzQzOzUwOTEsMTUgQEAgc3RhdGljIGlubGluZSBib29sIHByZXBhcmVfYWxsb2NfcGFnZXMoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlciwKIAlhYy0mZ3Q7bm9kZW1hc2sgPSBub2RlbWFzazsKIAlhYy0mZ3Q7bWlncmF0ZXR5cGUgPSBnZnBfbWlncmF0ZXR5cGUoZ2ZwX21hc2spOwogCiYjNDM7CWlmIChnZnBfbWFzayAmYW1wOyBfX0dGUF9SRVNFUlZFRF9USFApIHsKJiM0MzsJCWlmICghSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIHx8CiYjNDM7CQkgICAgV0FSTl9PTl9PTkNFX0dGUChvcmRlciAhPSBIUEFHRV9QTURfT1JERVIsIGdmcF9tYXNrKSkKJiM0MzsJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CQlhYy0mZ3Q7bWlncmF0ZXR5cGUgPSBNSUdSQVRFX1JFU0VSVkVEX1RIUDsKJiM0MzsJCSphbGxvY19mbGFncyB8PSBBTExPQ19SRVNFUlZFRF9USFA7CiYjNDM7CX0KJiM0MzsKIAlpZiAoY3B1c2V0c19lbmFibGVkKCkpIHsKIAkJKmFsbG9jX2dmcCB8PSBfX0dGUF9IQVJEV0FMTDsKIAkJLyoKZGlmZiAtLWdpdCBhL21tL3Jlc2VydmVkX3RocC5jIGIvbW0vcmVzZXJ2ZWRfdGhwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjkzMWM1MzljMTVhNzA5Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvbW0vcmVzZXJ2ZWRfdGhwLmMKQEAgLTAsMCAmIzQzOzEsMTMzIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbW0uaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O2ludGVybmFsLmgmIzM0OwomIzQzOwomIzQzO3N0YXRpYyBERUZJTkVfU1BJTkxPQ0socmVzZXJ2ZWRfdGhwX2xvY2spOwomIzQzOwomIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIHJlc2VydmVkX3RocF9jbWRsaW5lX3NpemUgX19pbml0ZGF0YSA9IEhQQUdFX1BNRF9TSVpFOwomIzQzO3N0YXRpYyBib29sIHJlc2VydmVkX3RocF9jbWRsaW5lX3NpemVfdmFsaWQgX19pbml0ZGF0YSA9IHRydWU7CiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWRfdGhwX3JlcXVlc3RlZCBfX2luaXRkYXRhOwomIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIHJlc2VydmVkX3RocF90b3RhbDsKJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyByZXNlcnZlZF90aHBfdXNlZDsKJiM0MzsKJiM0MztzdGF0aWMgaW50IF9faW5pdCBzZXR1cF9yZXNlcnZlZF90aHBfc2l6ZShjaGFyICpzdHIpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIHNpemU7CiYjNDM7CXNpemUgPSBtZW1wYXJzZShzdHIsIE5VTEwpOwomIzQzOwlpZiAoc2l6ZSAhPSBIUEFHRV9QTURfU0laRSkgewomIzQzOwkJcHJfd2FybigmIzM0O3Vuc3VwcG9ydGVkIHRocF9yZXNlcnZlZF9zaXplPSVzLCBvbmx5ICVsdSBpcyBzdXBwb3J0ZWRcbiYjMzQ7LAomIzQzOwkJCXN0ciwgSFBBR0VfUE1EX1NJWkUpOwomIzQzOwkJcmVzZXJ2ZWRfdGhwX2NtZGxpbmVfc2l6ZV92YWxpZCA9IGZhbHNlOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsJcmVzZXJ2ZWRfdGhwX2NtZGxpbmVfc2l6ZSA9IHNpemU7CiYjNDM7CXJlc2VydmVkX3RocF9jbWRsaW5lX3NpemVfdmFsaWQgPSB0cnVlOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7ZWFybHlfcGFyYW0oJiMzNDt0aHBfcmVzZXJ2ZWRfc2l6ZSYjMzQ7LCBzZXR1cF9yZXNlcnZlZF90aHBfc2l6ZSk7CiYjNDM7c3RhdGljIGludCBfX2luaXQgc2V0dXBfcmVzZXJ2ZWRfdGhwX25yKGNoYXIgKnN0cikKJiM0Mzt7CiYjNDM7CWludCBjb3VudDsKJiM0MzsJaWYgKHNzY2FuZihzdHIsICYjMzQ7JWx1JW4mIzM0OywgJmFtcDtyZXNlcnZlZF90aHBfcmVxdWVzdGVkLCAmYW1wO2NvdW50KSAhPSAxIHx8CiYjNDM7CSAgICBzdHJbY291bnRdKSB7CiYjNDM7CQlwcl93YXJuKCYjMzQ7aW52YWxpZCB0aHBfcmVzZXJ2ZWRfbnI9JXNcbiYjMzQ7LCBzdHIpOwomIzQzOwkJcmVzZXJ2ZWRfdGhwX3JlcXVlc3RlZCA9IDA7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7ZWFybHlfcGFyYW0oJiMzNDt0aHBfcmVzZXJ2ZWRfbnImIzM0Oywgc2V0dXBfcmVzZXJ2ZWRfdGhwX25yKTsKJiM0MzsKJiM0Mzt1bnNpZ25lZCBsb25nIHJlc2VydmVkX3RocF9ocGFnZV9ucih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKJiM0Mzt7CiYjNDM7CXJldHVybiAoZW5kIC0gc3RhcnQpICZndDsmZ3Q7IEhQQUdFX1BNRF9TSElGVDsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IHJlc2VydmVkX3RocF9jaGFyZ2UodW5zaWduZWQgbG9uZyBucl9ocGFnZXMpCiYjNDM7ewomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsKJiM0MzsJaWYgKCFucl9ocGFnZXMpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJc3Bpbl9sb2NrKCZhbXA7cmVzZXJ2ZWRfdGhwX2xvY2spOwomIzQzOwlpZiAobnJfaHBhZ2VzICZndDsgcmVzZXJ2ZWRfdGhwX3RvdGFsIC0gcmVzZXJ2ZWRfdGhwX3VzZWQpCiYjNDM7CQlyZXQgPSAtRU5PTUVNOwomIzQzOwllbHNlCiYjNDM7CQlyZXNlcnZlZF90aHBfdXNlZCAmIzQzOz0gbnJfaHBhZ2VzOwomIzQzOwlzcGluX3VubG9jaygmYW1wO3Jlc2VydmVkX3RocF9sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCByZXNlcnZlZF90aHBfdW5jaGFyZ2UodW5zaWduZWQgbG9uZyBucl9ocGFnZXMpCiYjNDM7ewomIzQzOwlpZiAoIW5yX2hwYWdlcykKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJc3Bpbl9sb2NrKCZhbXA7cmVzZXJ2ZWRfdGhwX2xvY2spOwomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKG5yX2hwYWdlcyAmZ3Q7IHJlc2VydmVkX3RocF91c2VkKSkKJiM0MzsJCXJlc2VydmVkX3RocF91c2VkID0gMDsKJiM0MzsJZWxzZQomIzQzOwkJcmVzZXJ2ZWRfdGhwX3VzZWQgLT0gbnJfaHBhZ2VzOwomIzQzOwlzcGluX3VubG9jaygmYW1wO3Jlc2VydmVkX3RocF9sb2NrKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHNzaXplX3QgdG90YWxfaHBhZ2VzX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosCiYjNDM7CQkJCSBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKJiM0Mzt7CiYjNDM7CXJldHVybiBzeXNmc19lbWl0KGJ1ZiwgJiMzNDslbHVcbiYjMzQ7LCBSRUFEX09OQ0UocmVzZXJ2ZWRfdGhwX3RvdGFsKSk7CiYjNDM7fQomIzQzO3N0YXRpYyBzc2l6ZV90IGZyZWVfaHBhZ2VzX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosCiYjNDM7CQkJCXN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbG9uZyBmcmVlX2hwYWdlczsKJiM0MzsKJiM0MzsJc3Bpbl9sb2NrKCZhbXA7cmVzZXJ2ZWRfdGhwX2xvY2spOwomIzQzOwlmcmVlX2hwYWdlcyA9IHJlc2VydmVkX3RocF90b3RhbCAtIHJlc2VydmVkX3RocF91c2VkOwomIzQzOwlzcGluX3VubG9jaygmYW1wO3Jlc2VydmVkX3RocF9sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCAmIzM0OyVsdVxuJiMzNDssIGZyZWVfaHBhZ2VzKTsKJiM0Mzt9CiYjNDM7c3RhdGljIHNzaXplX3QgdXNlZF9ocGFnZXNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwKJiM0MzsJCQkJc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiYjNDM7ewomIzQzOwlyZXR1cm4gc3lzZnNfZW1pdChidWYsICYjMzQ7JWx1XG4mIzM0OywgUkVBRF9PTkNFKHJlc2VydmVkX3RocF91c2VkKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgdG90YWxfaHBhZ2VzX2F0dHIgPSBfX0FUVFJfUk8odG90YWxfaHBhZ2VzKTsKJiM0MztzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGZyZWVfaHBhZ2VzX2F0dHIgPSBfX0FUVFJfUk8oZnJlZV9ocGFnZXMpOwomIzQzO3N0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgdXNlZF9ocGFnZXNfYXR0ciA9IF9fQVRUUl9STyh1c2VkX2hwYWdlcyk7CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnJlc2VydmVkX3RocF9hdHRyc1tdID0gewomIzQzOwkmYW1wO3RvdGFsX2hwYWdlc19hdHRyLmF0dHIsCiYjNDM7CSZhbXA7ZnJlZV9ocGFnZXNfYXR0ci5hdHRyLAomIzQzOwkmYW1wO3VzZWRfaHBhZ2VzX2F0dHIuYXR0ciwKJiM0MzsJTlVMTCwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIHJlc2VydmVkX3RocF9hdHRyX2dyb3VwID0gewomIzQzOwkuYXR0cnMgPSByZXNlcnZlZF90aHBfYXR0cnMsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IF9faW5pdCByZXNlcnZlZF90aHBfaW5pdCh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGtvYmplY3QgKmtvYmo7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmIChyZXNlcnZlZF90aHBfcmVxdWVzdGVkICZhbXA7JmFtcDsgcmVzZXJ2ZWRfdGhwX2NtZGxpbmVfc2l6ZV92YWxpZCkgewomIzQzOwkJcmVzZXJ2ZWRfdGhwX3RvdGFsID0gcmVzZXJ2ZWRfdGhwX3BhZ2VibG9ja3MocmVzZXJ2ZWRfdGhwX3JlcXVlc3RlZCk7CiYjNDM7CQlwcl9pbmZvKCYjMzQ7cmVzZXJ2ZWQgJWx1LyVsdSBQTUQgVEhQIHBhZ2VibG9ja3MgKCVsdSBieXRlcyBlYWNoKVxuJiMzNDssCiYjNDM7CQkJcmVzZXJ2ZWRfdGhwX3RvdGFsLCByZXNlcnZlZF90aHBfcmVxdWVzdGVkLAomIzQzOwkJCXJlc2VydmVkX3RocF9jbWRsaW5lX3NpemUpOwomIzQzOwl9CiYjNDM7CWtvYmogPSBrb2JqZWN0X2NyZWF0ZV9hbmRfYWRkKCYjMzQ7cmVzZXJ2ZWRfdGhwJiMzNDssIG1tX2tvYmopOwomIzQzOwlpZiAoIWtvYmopCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJcmV0ID0gc3lzZnNfY3JlYXRlX2dyb3VwKGtvYmosICZhbXA7cmVzZXJ2ZWRfdGhwX2F0dHJfZ3JvdXApOwomIzQzOwlpZiAocmV0KQomIzQzOwkJa29iamVjdF9wdXQoa29iaik7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzO3N1YnN5c19pbml0Y2FsbChyZXNlcnZlZF90aHBfaW5pdCk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbW0vc2hvd19tZW0uYyBiL21tL3Nob3dfbWVtLmMKaW5kZXggNDNhY2E1YTJhYzk5MGEuLmU5MzgxYWZjYTRhY2FlIDEwMDY0NAotLS0gYS9tbS9zaG93X21lbS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3Nob3dfbWVtLmMKQEAgLTE0Miw2ICYjNDM7MTQyLDcgQEAgc3RhdGljIHZvaWQgc2hvd19taWdyYXRpb25fdHlwZXModW5zaWduZWQgY2hhciB0eXBlKQogI2lmZGVmIENPTkZJR19DTUEKIAkJW01JR1JBVEVfQ01BXQkJPSAmIzM5O0MmIzM5OywKICNlbmRpZgomIzQzOwkJW01JR1JBVEVfUkVTRVJWRURfVEhQXQk9ICYjMzk7VCYjMzk7LAogI2lmZGVmIENPTkZJR19NRU1PUllfSVNPTEFUSU9OCiAJCVtNSUdSQVRFX0lTT0xBVEVdCT0gJiMzOTtJJiMzOTssCiAjZW5kaWYKQEAgLTMwOCw2ICYjNDM7MzA5LDggQEAgc3RhdGljIHZvaWQgc2hvd19mcmVlX2FyZWFzKHVuc2lnbmVkIGludCBmaWx0ZXIsIG5vZGVtYXNrX3QgKm5vZGVtYXNrLCBpbnQgbWF4X3oKIAkJCSYjMzQ7IGhpZ2g6JWx1a0ImIzM0OwogCQkJJiMzNDsgcmVzZXJ2ZWRfaGlnaGF0b21pYzolbHVLQiYjMzQ7CiAJCQkmIzM0OyBmcmVlX2hpZ2hhdG9taWM6JWx1S0ImIzM0OwomIzQzOwkJCSYjMzQ7IHJlc2VydmVkX3RocDolbHVLQiYjMzQ7CiYjNDM7CQkJJiMzNDsgZnJlZV9yZXNlcnZlZF90aHA6JWx1S0ImIzM0OwogCQkJJiMzNDsgYWN0aXZlX2Fub246JWx1a0ImIzM0OwogCQkJJiMzNDsgaW5hY3RpdmVfYW5vbjolbHVrQiYjMzQ7CiAJCQkmIzM0OyBhY3RpdmVfZmlsZTolbHVrQiYjMzQ7CkBAIC0zMzEsNiAmIzQzOzMzNCw4IEBAIHN0YXRpYyB2b2lkIHNob3dfZnJlZV9hcmVhcyh1bnNpZ25lZCBpbnQgZmlsdGVyLCBub2RlbWFza190ICpub2RlbWFzaywgaW50IG1heF96CiAJCQlLKGhpZ2hfd21hcmtfcGFnZXMoem9uZSkpLAogCQkJSyh6b25lLSZndDtucl9yZXNlcnZlZF9oaWdoYXRvbWljKSwKIAkJCUsoem9uZS0mZ3Q7bnJfZnJlZV9oaWdoYXRvbWljKSwKJiM0MzsJCQlLKHpvbmUtJmd0O25yX3Jlc2VydmVkX3RocCksCiYjNDM7CQkJSyh6b25lLSZndDtucl9mcmVlX3Jlc2VydmVkX3RocCksCiAJCQlLKHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9aT05FX0FDVElWRV9BTk9OKSksCiAJCQlLKHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9aT05FX0lOQUNUSVZFX0FOT04pKSwKIAkJCUsoem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX1pPTkVfQUNUSVZFX0ZJTEUpKSwKZGlmZiAtLWdpdCBhL21tL3ZtYS5jIGIvbW0vdm1hLmMKaW5kZXggOWVlYTI4NTA4MThhODUuLjhjNGNkN2M5N2E5ODRjIDEwMDY0NAotLS0gYS9tbS92bWEuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bWEuYwpAQCAtNyw2ICYjNDM7Nyw4IEBACiAjaW5jbHVkZSAmIzM0O3ZtYV9pbnRlcm5hbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7dm1hLmgmIzM0OwogCiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2h1Z2VfbW0uaCZndDsKJiM0MzsKIHN0cnVjdCBtbWFwX3N0YXRlIHsKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKIAlzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWk7CkBAIC01MDcsNiAmIzQzOzUwOSwxMCBAQCBfX3NwbGl0X3ZtYShzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWksIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCVdBUk5fT04odm1hLSZndDt2bV9zdGFydCAmZ3Q7PSBhZGRyKTsKIAlXQVJOX09OKHZtYS0mZ3Q7dm1fZW5kICZsdDs9IGFkZHIpOwogCiYjNDM7CWlmICgodm1hLSZndDt2bV9mbGFncyAmYW1wOyBWTV9SRVNFUlZFRF9USFApICZhbXA7JmFtcDsKJiM0MzsJICAgICFJU19BTElHTkVEKGFkZHIsIEhQQUdFX1BNRF9TSVpFKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwogCWlmICh2bWEtJmd0O3ZtX29wcyAmYW1wOyZhbXA7IHZtYS0mZ3Q7dm1fb3BzLSZndDttYXlfc3BsaXQpIHsKIAkJZXJyID0gdm1hLSZndDt2bV9vcHMtJmd0O21heV9zcGxpdCh2bWEsIGFkZHIpOwogCQlpZiAoZXJyKQpAQCAtMTM2MSw2ICYjNDM7MTM2Nyw3IEBAIHN0YXRpYyB2b2lkIHZtc19jb21wbGV0ZV9tdW5tYXBfdm1hcyhzdHJ1Y3Qgdm1hX211bm1hcF9zdHJ1Y3QgKnZtcywKIAkJcmVtb3ZlX3ZtYSh2bWEpOwogCiAJdm1fdW5hY2N0X21lbW9yeSh2bXMtJmd0O25yX2FjY291bnRlZCk7CiYjNDM7CXJlc2VydmVkX3RocF91bmNoYXJnZSh2bXMtJmd0O25yX3Jlc2VydmVkX3RocCk7CiAJdmFsaWRhdGVfbW0obW0pOwogCWlmICh2bXMtJmd0O3VubG9jaykKIAkJbW1hcF9yZWFkX3VubG9jayhtbSk7CkBAIC0xNDIzLDYgJiM0MzsxNDMwLDExIEBAIHN0YXRpYyBpbnQgdm1zX2dhdGhlcl9tdW5tYXBfdm1hcyhzdHJ1Y3Qgdm1hX211bm1hcF9zdHJ1Y3QgKnZtcywKIAkJCWVycm9yID0gLUVQRVJNOwogCQkJZ290byBzdGFydF9zcGxpdF9mYWlsZWQ7CiAJCX0KJiM0MzsJCWlmICgodm1zLSZndDt2bWEtJmd0O3ZtX2ZsYWdzICZhbXA7IFZNX1JFU0VSVkVEX1RIUCkgJmFtcDsmYW1wOwomIzQzOwkJICAgICFJU19BTElHTkVEKHZtcy0mZ3Q7c3RhcnQsIEhQQUdFX1BNRF9TSVpFKSkgewomIzQzOwkJCWVycm9yID0gLUVJTlZBTDsKJiM0MzsJCQlnb3RvIHN0YXJ0X3NwbGl0X2ZhaWxlZDsKJiM0MzsJCX0KIAogCQllcnJvciA9IF9fc3BsaXRfdm1hKHZtcy0mZ3Q7dm1pLCB2bXMtJmd0O3ZtYSwgdm1zLSZndDtzdGFydCwgMSk7CiAJCWlmIChlcnJvcikKQEAgLTE0NDUsNiAmIzQzOzE0NTcsMTEgQEAgc3RhdGljIGludCB2bXNfZ2F0aGVyX211bm1hcF92bWFzKHN0cnVjdCB2bWFfbXVubWFwX3N0cnVjdCAqdm1zLAogCQl9CiAJCS8qIERvZXMgaXQgc3BsaXQgdGhlIGVuZD8gKi8KIAkJaWYgKG5leHQtJmd0O3ZtX2VuZCAmZ3Q7IHZtcy0mZ3Q7ZW5kKSB7CiYjNDM7CQkJaWYgKChuZXh0LSZndDt2bV9mbGFncyAmYW1wOyBWTV9SRVNFUlZFRF9USFApICZhbXA7JmFtcDsKJiM0MzsJCQkgICAgIUlTX0FMSUdORUQodm1zLSZndDtlbmQsIEhQQUdFX1BNRF9TSVpFKSkgewomIzQzOwkJCQllcnJvciA9IC1FSU5WQUw7CiYjNDM7CQkJCWdvdG8gZW5kX3NwbGl0X2ZhaWxlZDsKJiM0MzsJCQl9CiAJCQllcnJvciA9IF9fc3BsaXRfdm1hKHZtcy0mZ3Q7dm1pLCBuZXh0LCB2bXMtJmd0O2VuZCwgMCk7CiAJCQlpZiAoZXJyb3IpCiAJCQkJZ290byBlbmRfc3BsaXRfZmFpbGVkOwpAQCAtMTQ2NSw2ICYjNDM7MTQ4MiwxMSBAQCBzdGF0aWMgaW50IHZtc19nYXRoZXJfbXVubWFwX3ZtYXMoc3RydWN0IHZtYV9tdW5tYXBfc3RydWN0ICp2bXMsCiAJCWlmICh2bWFfdGVzdChuZXh0LCBWTUFfQUNDT1VOVF9CSVQpKQogCQkJdm1zLSZndDtucl9hY2NvdW50ZWQgJiM0Mzs9IG5ycGFnZXM7CiAKJiM0MzsJCWlmIChuZXh0LSZndDt2bV9mbGFncyAmYW1wOyBWTV9SRVNFUlZFRF9USFApCiYjNDM7CQkJdm1zLSZndDtucl9yZXNlcnZlZF90aHAgJiM0Mzs9CiYjNDM7CQkJCXJlc2VydmVkX3RocF9ocGFnZV9ucihuZXh0LSZndDt2bV9zdGFydCwKJiM0MzsJCQkJCQkgICAgICBuZXh0LSZndDt2bV9lbmQpOwomIzQzOwogCQlpZiAoaXNfZXhlY19tYXBwaW5nKG5leHQtJmd0O3ZtX2ZsYWdzKSkKIAkJCXZtcy0mZ3Q7ZXhlY192bSAmIzQzOz0gbnJwYWdlczsKIAkJZWxzZSBpZiAoaXNfc3RhY2tfbWFwcGluZyhuZXh0LSZndDt2bV9mbGFncykpCkBAIC0xNTYwLDYgJiM0MzsxNTgyLDcgQEAgc3RhdGljIHZvaWQgaW5pdF92bWFfbXVubWFwKHN0cnVjdCB2bWFfbXVubWFwX3N0cnVjdCAqdm1zLAogCXZtcy0mZ3Q7dWYgPSB1ZjsKIAl2bXMtJmd0O3ZtYV9jb3VudCA9IDA7CiAJdm1zLSZndDtucl9wYWdlcyA9IHZtcy0mZ3Q7bG9ja2VkX3ZtID0gdm1zLSZndDtucl9hY2NvdW50ZWQgPSAwOwomIzQzOwl2bXMtJmd0O25yX3Jlc2VydmVkX3RocCA9IDA7CiAJdm1zLSZndDtleGVjX3ZtID0gdm1zLSZndDtzdGFja192bSA9IHZtcy0mZ3Q7ZGF0YV92bSA9IDA7CiAJdm1zLSZndDt1bm1hcF9zdGFydCA9IEZJUlNUX1VTRVJfQUREUkVTUzsKIAl2bXMtJmd0O3VubWFwX2VuZCA9IFVTRVJfUEdUQUJMRVNfQ0VJTElORzsKZGlmZiAtLWdpdCBhL21tL3ZtYS5oIGIvbW0vdm1hLmgKaW5kZXggOGU0YjYxYTczMDRjNjguLjY4ZTQ0YWRlZTVjODllIDEwMDY0NAotLS0gYS9tbS92bWEuaAomIzQzOyYjNDM7JiM0MzsgYi9tbS92bWEuaApAQCAtNDgsNiAmIzQzOzQ4LDcgQEAgc3RydWN0IHZtYV9tdW5tYXBfc3RydWN0IHsKIAl1bnNpZ25lZCBsb25nIG5yX3BhZ2VzOyAgICAgICAgIC8qIE51bWJlciBvZiBwYWdlcyBiZWluZyByZW1vdmVkICovCiAJdW5zaWduZWQgbG9uZyBsb2NrZWRfdm07ICAgICAgICAvKiBOdW1iZXIgb2YgbG9ja2VkIHBhZ2VzICovCiAJdW5zaWduZWQgbG9uZyBucl9hY2NvdW50ZWQ7ICAgICAvKiBOdW1iZXIgb2YgVk1fQUNDT1VOVCBwYWdlcyAqLwomIzQzOwl1bnNpZ25lZCBsb25nIG5yX3Jlc2VydmVkX3RocDsgIC8qIE51bWJlciBvZiByZXNlcnZlZCBQTUQgVEhQIHNsb3RzICovCiAJdW5zaWduZWQgbG9uZyBleGVjX3ZtOwogCXVuc2lnbmVkIGxvbmcgc3RhY2tfdm07CiAJdW5zaWduZWQgbG9uZyBkYXRhX3ZtOwpkaWZmIC0tZ2l0IGEvdG9vbHMvaW5jbHVkZS9saW51eC9nZnBfdHlwZXMuaCBiL3Rvb2xzL2luY2x1ZGUvbGludXgvZ2ZwX3R5cGVzLmgKaW5kZXggNmM3NWRmMzBhMjgxZDEuLjUzYTFkMjJmY2Y5NTdlIDEwMDY0NAotLS0gYS90b29scy9pbmNsdWRlL2xpbnV4L2dmcF90eXBlcy5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2luY2x1ZGUvbGludXgvZ2ZwX3R5cGVzLmgKQEAgLTMzLDcgJiM0MzszMyw3IEBAIGVudW0gewogCV9fX0dGUF9JT19CSVQsCiAJX19fR0ZQX0ZTX0JJVCwKIAlfX19HRlBfWkVST19CSVQsCi0JX19fR0ZQX1VOVVNFRF9CSVQsCS8qIDB4MjAwdSB1bnVzZWQgKi8KJiM0MzsJX19fR0ZQX1JFU0VSVkVEX1RIUF9CSVQsCiAJX19fR0ZQX0RJUkVDVF9SRUNMQUlNX0JJVCwKIAlfX19HRlBfS1NXQVBEX1JFQ0xBSU1fQklULAogCV9fX0dGUF9XUklURV9CSVQsCkBAIC02OSw3ICYjNDM7NjksNyBAQCBlbnVtIHsKICNkZWZpbmUgX19fR0ZQX0lPCQlCSVQoX19fR0ZQX0lPX0JJVCkKICNkZWZpbmUgX19fR0ZQX0ZTCQlCSVQoX19fR0ZQX0ZTX0JJVCkKICNkZWZpbmUgX19fR0ZQX1pFUk8JCUJJVChfX19HRlBfWkVST19CSVQpCi0vKiAweDIwMHUgdW51c2VkICovCiYjNDM7I2RlZmluZSBfX19HRlBfUkVTRVJWRURfVEhQCUJJVChfX19HRlBfUkVTRVJWRURfVEhQX0JJVCkKICNkZWZpbmUgX19fR0ZQX0RJUkVDVF9SRUNMQUlNCUJJVChfX19HRlBfRElSRUNUX1JFQ0xBSU1fQklUKQogI2RlZmluZSBfX19HRlBfS1NXQVBEX1JFQ0xBSU0JQklUKF9fX0dGUF9LU1dBUERfUkVDTEFJTV9CSVQpCiAjZGVmaW5lIF9fX0dGUF9XUklURQkJQklUKF9fX0dGUF9XUklURV9CSVQpCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4ta21lbS5jIGIvdG9vbHMvcGVyZi9idWlsdGluLWttZW0uYwppbmRleCBlMWIyZjViYzFiYThkOC4uNDU3MzJhYWYxYTUyNWUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1rbWVtLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvcGVyZi9idWlsdGluLWttZW0uYwpAQCAtNjcyLDYgJiM0Mzs2NzIsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHsKIAl7ICYjMzQ7X19HRlBfTk9SRVRSWSYjMzQ7LAkJJiMzNDtOUiYjMzQ7IH0sCiAJeyAmIzM0O19fR0ZQX0NPTVAmIzM0OywJCQkmIzM0O0MmIzM0OyB9LAogCXsgJiMzNDtfX0dGUF9aRVJPJiMzNDssCQkJJiMzNDtaJiMzNDsgfSwKJiM0MzsJeyAmIzM0O19fR0ZQX1JFU0VSVkVEX1RIUCYjMzQ7LAkJJiMzNDtSVEhQJiMzNDsgfSwKIAl7ICYjMzQ7X19HRlBfTk9NRU1BTExPQyYjMzQ7LAkJJiMzNDtOTUEmIzM0OyB9LAogCXsgJiMzNDtfX0dGUF9NRU1BTExPQyYjMzQ7LAkJJiMzNDtNQSYjMzQ7IH0sCiAJeyAmIzM0O19fR0ZQX0hBUkRXQUxMJiMzNDssCQkmIzM0O0hXJiMzNDsgfSwKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmggYi90b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oCmluZGV4IGNmNzNiY2Q5YmI5ZDUyLi4wMjJiN2E1NmI2YTlmMyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oCkBAIC0xNjAsNiAmIzQzOzE2MCw3IEBAIGVudW0gewogI2VuZGlmCiAJREVDTEFSRV9WTUFfQklUKFVGRkRfTUlOT1IsIDQxKSwKIAlERUNMQVJFX1ZNQV9CSVQoU0VBTEVELCA0MiksCiYjNDM7CURFQ0xBUkVfVk1BX0JJVChSRVNFUlZFRF9USFAsIDQzKSwKIAkvKiBGbGFncyB0aGF0IHJldXNlIGZsYWdzIGFib3ZlLiAqLwogCURFQ0xBUkVfVk1BX0JJVF9BTElBUyhQS0VZX0JJVDAsIEhJR0hfQVJDSF8wKSwKIAlERUNMQVJFX1ZNQV9CSVRfQUxJQVMoUEtFWV9CSVQxLCBISUdIX0FSQ0hfMSksCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA3OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5ODI4CgkJCQkJCQlvdXRwdXQ6IDE3NAoJCQkJCQkJdGhvdWdodHM6IDI3NTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlICYjMzQ7TUFEVl9SRVNFUlZFRF9USFAmIzM0OyBQYXRjaCBmb3IgRnV6emluZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBXZSYjMzk7dmUgZ290IGEgbmV3IHBhdGNoIGludHJvZHVjaW5nIGBNQURWX1JFU0VSVkVEX1RIUGAgYW5kIGBWTV9SRVNFUlZFRF9USFBgLCB3aGljaCBpcyBjbGVhcmx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQuIFRoaXMgc2NyZWFtcyAmIzM0O2Z1enogbWUhJiMzNDsKCk15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gcGlucG9pbnQgdGhlIG1vc3QgaW50ZXJlc3RpbmcgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgdGhlIG9uZXMgdGhhdCBhcmUgZGlyZWN0bHkgdG91Y2hlZCBieSB0aGlzIG5ldyBtYWR2aXNlIGZsYWcuIE1vZGlmaWVkIG9yIGFkZGVkIGZ1bmN0aW9ucyBhcmU6IGBtYWR2aXNlX2h1Z2VwYWdlX3BvbGljeWAsIGByZXNlcnZlZF90aHBfbWFkdmlzZV9hbGlnbmVkYCwgYHJlc2VydmVkX3RocF9jaGFyZ2VgLCBgcmVzZXJ2ZWRfdGhwX3VuY2hhcmdlYCwgYHJlc2VydmVkX3RocF9ocGFnZV9ucmAsIGByZXNlcnZlZF90aHBfcGFnZWJsb2Nrc2AsIGBjaGVja19yZXNlcnZlZF90aHBfYWxpZ25tZW50YCwgYHZybV9jYWxjX2NoYXJnZWAsIGB1bm1hcF9zb3VyY2Vfdm1hYCwgYHZtc19nYXRoZXJfbXVubWFwX3ZtYXNgLCBgX19zcGxpdF92bWFgLCBgZHVwX21tYXBgLCBgdGVhcl9kb3duX3ZtYXNgLCBgZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2VgLCBgX19kb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZWAsIGB2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWRgLCBhbmQgYGh1Z2VwYWdlX21hZHZpc2VgLgoKTG9va2luZyBhdCB0aGUgY29uZmlncywgdGhpcyBwYXRjaCBkZWZpbml0ZWx5IG5lZWRzIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuIEkgc2VlIGNoZWNrcyBmb3IgYENPTkZJR182NEJJVGAgd2l0aGluIGBtYWR2aXNlX2h1Z2VwYWdlX3BvbGljeWAsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIHNlZSB0aGF0IHRoaXMgcGF0Y2ggdXNlcyBgSFBBR0VfUE1EX1NJWkVgLCB3aGljaCBpcyBwYXJ0IG9mIHRoZSBUSFAgc2V0dXAuCgpJIHdhbnQgdG8gdHJpbSBkb3duIHRoZSBsaXN0IHRvIGJlIG1vcmUgdGFyZ2V0ZWQuIEkmIzM5O2xsIGZvY3VzIG9uOiBgbWFkdmlzZV9odWdlcGFnZV9wb2xpY3lgLCBgcmVzZXJ2ZWRfdGhwX2NoYXJnZWAsIGByZXNlcnZlZF90aHBfdW5jaGFyZ2VgLCBgcmVzZXJ2ZWRfdGhwX3BhZ2VibG9ja3NgLCBgY2hlY2tfcmVzZXJ2ZWRfdGhwX2FsaWdubWVudGAsIGBodWdlcGFnZV9tYWR2aXNlYC4KCkEgcXVpY2sgY2hlY2sgY29uZmlybXMgYSBmZXcgZnVuY3Rpb25zJiMzOTsgcHJvcGVydGllcy4gYG1hZHZpc2VfaHVnZXBhZ2VfcG9saWN5YCBpcyBzdGF0aWMsIGByZXNlcnZlZF90aHBfY2hhcmdlYCwgYHJlc2VydmVkX3RocF91bmNoYXJnZWAsIGByZXNlcnZlZF90aHBfcGFnZWJsb2Nrc2AgYXJlIGdsb2JhbC4KCk5vdywgbGV0JiMzOTtzIGRpZyBkZWVwZXIuIFRoZSBgbW0vcmVzZXJ2ZWRfdGhwLmNgIGZpbGUgaXMgaW50ZXJlc3RpbmcuIEl0IGhhcyBmdW5jdGlvbnMgbGlrZSBgc2V0dXBfcmVzZXJ2ZWRfdGhwX3NpemVgLCBgc2V0dXBfcmVzZXJ2ZWRfdGhwX25yYCwgYW5kIGByZXNlcnZlZF90aHBfaW5pdGAuIEl0IHNlZW1zIHRvIHV0aWxpemUgYHRocF9yZXNlcnZlZF9zaXplYCBhbmQgYHRocF9yZXNlcnZlZF9ucmAgYm9vdCBwYXJhbWV0ZXJzLiBUaGlzIGlzIGEgY3J1Y2lhbCBvYnNlcnZhdGlvbi4gSWYgYHRocF9yZXNlcnZlZF9ucmAgaXNuJiMzOTt0IHByb3ZpZGVkLCBgcmVzZXJ2ZWRfdGhwX3RvdGFsYCBiZWNvbWVzIHplcm8uCgpBIGNhcmVmdWwgbG9vayBhdCBgcmVzZXJ2ZWRfdGhwX2NoYXJnZWAgcmV2ZWFscyB0aGF0IHdoZW4gYHJlc2VydmVkX3RocF90b3RhbGAgaXMgemVybywgYW55IGFsbG9jYXRpb24gcmVxdWVzdCB3aWxsIHJldHVybiBgLUVOT01FTWAuIFRoaXMgbWFrZXMgdGhlIGBtYWR2aXNlKE1BRFZfUkVTRVJWRURfVEhQKWAgY2FsbHMgdG8gZmFpbC4gSSB3b25kZXIgaWYgdGhlcmUmIzM5O3MgYSB3YXkgdG8gdGVzdCBpdC4KCkl0IGxvb2tzIGxpa2UgdGhlIGByZXNlcnZlZF90aHBfdG90YWxgIGNhbiBvbmx5IGJlIHNldCBhdCBib290IHRpbWUgdmlhIGB0aHBfcmVzZXJ2ZWRfbnJgLCBhbmQgdGhlcmUmIzM5O3Mgbm8gc3lzZnMgaW50ZXJmYWNlIGZvciBjaGFuZ2luZyBpdC4gSWYgYHJlc2VydmVkX3RocF90b3RhbCA9PSAwYCwgYFZNX1JFU0VSVkVEX1RIUGAgd2lsbCBuZXZlciBnZXQgc2V0LCBhbmQgYWxsIHRoZSBtb2RpZmljYXRpb25zIHRvIGBtbWFwLmNgLCBgbXJlbWFwLmNgLCBgdm1hLmNgLCBhbmQgYGh1Z2VfbWVtb3J5LmNgIHdpbGwgYmUgdW5yZWFjaGFibGUuIFRoaXMgaXMgY3JpdGljYWwuCgpDYW4gd2UgYnlwYXNzIHRoaXM/IEl0IGFwcGVhcnMgbm90LiBgbWFkdmlzZWAgcmVxdWlyZXMgdGhlIHN0YXJ0IGFuZCBlbmQgb2YgdGhlIHJlZ2lvbiB0byBiZSBhbGlnbmVkIHdpdGggdGhlIGBIUEFHRV9QTURfU0laRWAsIHRoZXJlZm9yZSwgdGhlIG51bWJlciBvZiBodWdlcGFnZXMgcmVxdWVzdGVkIHdpbGwgYmUgYXQgbGVhc3Qgb25lIGh1Z2VwYWdlLiBBbmQgdGhpcyByZXF1ZXN0IHdpbGwgZmFpbCBpZiB3ZSBoYXZlbiYjMzk7dCBwcm92aWRlZCBhIGJvb3QgcGFyYW1ldGVyLCBhbmQgdGhlcmVmb3JlIGhhdmUgbm90IHNldCBgcmVzZXJ2ZWRfdGhwX3RvdGFsYC4KCkV2ZW4gdGhvdWdoIHdlIG5lZWQgdGhhdCBib290IHBhcmFtZXRlciwgaXQmIzM5O3Mgc3RpbGwgd29ydGggZnV6emluZy4gVGhlIHBhdGNoIGlzIHN0aWxsIGRvaW5nIGZ1bmN0aW9uYWwgY2hhbmdlcy4gU3l6a2FsbGVyIG1pZ2h0IGhhdmUgdGhlIGFiaWxpdHkgdG8gc2V0IGJvb3QgcGFyYW1ldGVycyBvciBpdCYjMzk7cyBqdXN0IGEgbGltaXRhdGlvbiwgYnV0IHdlIHNob3VsZCByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpTbywgaGVyZSYjMzk7cyBteSBmb2N1c2VkIGxpc3Qgb2Ygc3ltYm9sczoKLSBgbWFkdmlzZV9odWdlcGFnZV9wb2xpY3lgCi0gYHJlc2VydmVkX3RocF9jaGFyZ2VgCi0gYHJlc2VydmVkX3RocF91bmNoYXJnZWAKLSBgcmVzZXJ2ZWRfdGhwX3BhZ2VibG9ja3NgCi0gYGNoZWNrX3Jlc2VydmVkX3RocF9hbGlnbm1lbnRgCi0gYHZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZGAKCkFuZCB0aGUga2V5IGNvbmZpZyByZXF1aXJlbWVudCBpczoKLSBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgCgpJbiBzaG9ydDogdGhlIHBhdGNoIGlzIGludHJvZHVjaW5nIGEgbmV3IGBNQURWX1JFU0VSVkVEX1RIUAoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDc6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWFkdmlzZV9odWdlcGFnZV9wb2xpY3kmIzM0OywKICAgICYjMzQ7cmVzZXJ2ZWRfdGhwX2NoYXJnZSYjMzQ7LAogICAgJiMzNDtyZXNlcnZlZF90aHBfdW5jaGFyZ2UmIzM0OywKICAgICYjMzQ7cmVzZXJ2ZWRfdGhwX3BhZ2VibG9ja3MmIzM0OywKICAgICYjMzQ7Y2hlY2tfcmVzZXJ2ZWRfdGhwX2FsaWdubWVudCYjMzQ7LAogICAgJiMzNDt2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBNQURWX1JFU0VSVkVEX1RIUCBtYWR2aXNlIGJlaGF2aW9yIGFuZCBWTV9SRVNFUlZFRF9USFAgVk1BIGZsYWcsIG1vZGlmeWluZyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGluY2x1ZGluZyBwYWdlIGZhdWx0IGhhbmRsaW5nLCBtcmVtYXAsIGFuZCBWTUEgc3BsaXR0aW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGtlcm5lbCYjMzk7cyBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21hZHZpc2VfaHVnZXBhZ2VfcG9saWN5JiMzNDssCiAgICAmIzM0O3Jlc2VydmVkX3RocF9jaGFyZ2UmIzM0OywKICAgICYjMzQ7cmVzZXJ2ZWRfdGhwX3VuY2hhcmdlJiMzNDssCiAgICAmIzM0O3Jlc2VydmVkX3RocF9wYWdlYmxvY2tzJiMzNDssCiAgICAmIzM0O2NoZWNrX3Jlc2VydmVkX3RocF9hbGlnbm1lbnQmIzM0OywKICAgICYjMzQ7dm1hX2FsbG9jX2Fub25fZm9saW9fcG1kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgTUFEVl9SRVNFUlZFRF9USFAgbWFkdmlzZSBiZWhhdmlvciBhbmQgVk1fUkVTRVJWRURfVEhQIFZNQSBmbGFnLCBtb2RpZnlpbmcgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbmNsdWRpbmcgcGFnZSBmYXVsdCBoYW5kbGluZywgbXJlbWFwLCBhbmQgVk1BIHNwbGl0dGluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBrZXJuZWwmIzM5O3MgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDA3OjM5OjU2LjEwMDE2NzMwNloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2OTkyODQ0OTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWFkdmlzZV9odWdlcGFnZV9wb2xpY3lcIixcbiAgICBcInJlc2VydmVkX3RocF9jaGFyZ2VcIixcbiAgICBcInJlc2VydmVkX3RocF91bmNoYXJnZVwiLFxuICAgIFwicmVzZXJ2ZWRfdGhwX3BhZ2VibG9ja3NcIixcbiAgICBcImNoZWNrX3Jlc2VydmVkX3RocF9hbGlnbm1lbnRcIixcbiAgICBcInZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgTUFEVl9SRVNFUlZFRF9USFAgbWFkdmlzZSBiZWhhdmlvciBhbmQgVk1fUkVTRVJWRURfVEhQIFZNQSBmbGFnLCBtb2RpZnlpbmcgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbmNsdWRpbmcgcGFnZSBmYXVsdCBoYW5kbGluZywgbXJlbWFwLCBhbmQgVk1BIHNwbGl0dGluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBrZXJuZWwncyBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNzozOTo1Ni4xMDAxNzQ2MDZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMzc5NDE5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDg4YzI4MTU1NjVkZjZjMDRhZDk0ZWJmYTQ4MDA1NGM4MTgzNmZlNzhcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBKdW4gMjcgMDc6Mzk6NTQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaCBiL2FyY2gvYWxwaGEvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmhcXG5pbmRleCAxZTcwMDQ2OGE2ODU4MC4uNjcyYTJmYzM0Mzg2MTQgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hbHBoYS9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaFxcbisrKyBiL2FyY2gvYWxwaGEvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmhcXG5AQCAtNzgsNiArNzgsOCBAQFxcbiBcXG4gI2RlZmluZSBNQURWX0NPTExBUFNFXFx0MjVcXHRcXHQvKiBTeW5jaHJvbm91cyBodWdlcGFnZSBjb2xsYXBzZSAqL1xcbiBcXG4rI2RlZmluZSBNQURWX1JFU0VSVkVEX1RIUCAyNlxcdFxcdC8qIFVzZSByZXNlcnZlZCB0cmFuc3BhcmVudCBodWdlcGFnZXMgKi9cXG4rXFxuICNkZWZpbmUgTUFEVl9HVUFSRF9JTlNUQUxMIDEwMlxcdFxcdC8qIGZhdGFsIHNpZ25hbCBvbiBhY2Nlc3MgdG8gcmFuZ2UgKi9cXG4gI2RlZmluZSBNQURWX0dVQVJEX1JFTU9WRSAxMDNcXHRcXHQvKiB1bmd1YXJkIHJhbmdlICovXFxuIFxcbmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmggYi9hcmNoL21pcHMvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmhcXG5pbmRleCBiNzAwZGFlMjhjNDgyZC4uYTk0YmY3NGRlZTIxY2EgMTAwNjQ0XFxuLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oXFxuKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oXFxuQEAgLTEwNSw2ICsxMDUsOCBAQFxcbiBcXG4gI2RlZmluZSBNQURWX0NPTExBUFNFXFx0MjVcXHRcXHQvKiBTeW5jaHJvbm91cyBodWdlcGFnZSBjb2xsYXBzZSAqL1xcbiBcXG4rI2RlZmluZSBNQURWX1JFU0VSVkVEX1RIUCAyNlxcdFxcdC8qIFVzZSByZXNlcnZlZCB0cmFuc3BhcmVudCBodWdlcGFnZXMgKi9cXG4rXFxuICNkZWZpbmUgTUFEVl9HVUFSRF9JTlNUQUxMIDEwMlxcdFxcdC8qIGZhdGFsIHNpZ25hbCBvbiBhY2Nlc3MgdG8gcmFuZ2UgKi9cXG4gI2RlZmluZSBNQURWX0dVQVJEX1JFTU9WRSAxMDNcXHRcXHQvKiB1bmd1YXJkIHJhbmdlICovXFxuIFxcbmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oXFxuaW5kZXggYjZhNzA5NTA2OTg3ZTAuLmZlMmZkZGVmYjZjNWQ5IDEwMDY0NFxcbi0tLSBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oXFxuKysrIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmhcXG5AQCAtNzIsNiArNzIsOCBAQFxcbiBcXG4gI2RlZmluZSBNQURWX0NPTExBUFNFXFx0MjVcXHRcXHQvKiBTeW5jaHJvbm91cyBodWdlcGFnZSBjb2xsYXBzZSAqL1xcbiBcXG4rI2RlZmluZSBNQURWX1JFU0VSVkVEX1RIUCAyNlxcdFxcdC8qIFVzZSByZXNlcnZlZCB0cmFuc3BhcmVudCBodWdlcGFnZXMgKi9cXG4rXFxuICNkZWZpbmUgTUFEVl9IV1BPSVNPTiAgICAgMTAwXFx0XFx0LyogcG9pc29uIGEgcGFnZSBmb3IgdGVzdGluZyAqL1xcbiAjZGVmaW5lIE1BRFZfU09GVF9PRkZMSU5FIDEwMVxcdFxcdC8qIHNvZnQgb2ZmbGluZSBwYWdlIGZvciB0ZXN0aW5nICovXFxuIFxcbmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaCBiL2FyY2gveHRlbnNhL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oXFxuaW5kZXggOTlkNGNjZWU3ZjZlOGEuLmJiNjAzNTMwYmE3OTlmIDEwMDY0NFxcbi0tLSBhL2FyY2gveHRlbnNhL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oXFxuKysrIGIvYXJjaC94dGVuc2EvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmhcXG5AQCAtMTEzLDYgKzExMyw4IEBAXFxuIFxcbiAjZGVmaW5lIE1BRFZfQ09MTEFQU0VcXHQyNVxcdFxcdC8qIFN5bmNocm9ub3VzIGh1Z2VwYWdlIGNvbGxhcHNlICovXFxuIFxcbisjZGVmaW5lIE1BRFZfUkVTRVJWRURfVEhQIDI2XFx0XFx0LyogVXNlIHJlc2VydmVkIHRyYW5zcGFyZW50IGh1Z2VwYWdlcyAqL1xcbitcXG4gI2RlZmluZSBNQURWX0dVQVJEX0lOU1RBTEwgMTAyXFx0XFx0LyogZmF0YWwgc2lnbmFsIG9uIGFjY2VzcyB0byByYW5nZSAqL1xcbiAjZGVmaW5lIE1BRFZfR1VBUkRfUkVNT1ZFIDEwM1xcdFxcdC8qIHVuZ3VhcmQgcmFuZ2UgKi9cXG4gXFxuZGlmZiAtLWdpdCBhL2ZzL3Byb2MvdGFza19tbXUuYyBiL2ZzL3Byb2MvdGFza19tbXUuY1xcbmluZGV4IGQzMjQwOGY3Y2Q1ZWQyLi42NWM0YjJhNjFhZWFjNyAxMDA2NDRcXG4tLS0gYS9mcy9wcm9jL3Rhc2tfbW11LmNcXG4rKysgYi9mcy9wcm9jL3Rhc2tfbW11LmNcXG5AQCAtMTI0NSw2ICsxMjQ1LDkgQEAgc3RhdGljIHZvaWQgc2hvd19zbWFwX3ZtYV9mbGFncyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbiAjZW5kaWZcXG4gI2lmZGVmIENPTkZJR182NEJJVFxcbiBcXHRcXHRbaWxvZzIoVk1fU0VBTEVEKV0gPSBcXFwic2xcXFwiLFxcbisjZW5kaWZcXG4rI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbitcXHRcXHRbaWxvZzIoVk1fUkVTRVJWRURfVEhQKV0gPSBcXFwicnRcXFwiLFxcbiAjZW5kaWZcXG4gXFx0fTtcXG4gXFx0c2l6ZV90IGk7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZ2ZwLmggYi9pbmNsdWRlL2xpbnV4L2dmcC5oXFxuaW5kZXggY2RmOTVhOWYwYjg3YzEuLjJkMDU5MjlmZDhjNzJkIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvZ2ZwLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2dmcC5oXFxuQEAgLTMwLDYgKzMwLDkgQEAgc3RhdGljIGlubGluZSBpbnQgZ2ZwX21pZ3JhdGV0eXBlKGNvbnN0IGdmcF90IGdmcF9mbGFncylcXG4gXFx0QlVJTERfQlVHX09OKCgoX19fR0ZQX01PVkFCTEUgfCBfX19HRlBfUkVDTEFJTUFCTEUpIFxcdTAwM2VcXHUwMDNlXFxuIFxcdFxcdCAgICAgIEdGUF9NT1ZBQkxFX1NISUZUKSAhPSBNSUdSQVRFX0hJR0hBVE9NSUMpO1xcbiBcXG4rXFx0aWYgKHVubGlrZWx5KGdmcF9mbGFncyBcXHUwMDI2IF9fR0ZQX1JFU0VSVkVEX1RIUCkpXFxuK1xcdFxcdHJldHVybiBNSUdSQVRFX1JFU0VSVkVEX1RIUDtcXG4rXFxuIFxcdGlmICh1bmxpa2VseShwYWdlX2dyb3VwX2J5X21vYmlsaXR5X2Rpc2FibGVkKSlcXG4gXFx0XFx0cmV0dXJuIE1JR1JBVEVfVU5NT1ZBQkxFO1xcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9nZnBfdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvZ2ZwX3R5cGVzLmhcXG5pbmRleCA1NGNhMGM4OGJhYjZlOC4uMWY4MmE5NDkxZDM1N2YgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9nZnBfdHlwZXMuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvZ2ZwX3R5cGVzLmhcXG5AQCAtMzMsNyArMzMsNyBAQCBlbnVtIHtcXG4gXFx0X19fR0ZQX0lPX0JJVCxcXG4gXFx0X19fR0ZQX0ZTX0JJVCxcXG4gXFx0X19fR0ZQX1pFUk9fQklULFxcbi1cXHRfX19HRlBfVU5VU0VEX0JJVCxcXHQvKiAweDIwMHUgdW51c2VkICovXFxuK1xcdF9fX0dGUF9SRVNFUlZFRF9USFBfQklULFxcbiBcXHRfX19HRlBfRElSRUNUX1JFQ0xBSU1fQklULFxcbiBcXHRfX19HRlBfS1NXQVBEX1JFQ0xBSU1fQklULFxcbiBcXHRfX19HRlBfV1JJVEVfQklULFxcbkBAIC02OSw3ICs2OSw3IEBAIGVudW0ge1xcbiAjZGVmaW5lIF9fX0dGUF9JT1xcdFxcdEJJVChfX19HRlBfSU9fQklUKVxcbiAjZGVmaW5lIF9fX0dGUF9GU1xcdFxcdEJJVChfX19HRlBfRlNfQklUKVxcbiAjZGVmaW5lIF9fX0dGUF9aRVJPXFx0XFx0QklUKF9fX0dGUF9aRVJPX0JJVClcXG4tLyogMHgyMDB1IHVudXNlZCAqL1xcbisjZGVmaW5lIF9fX0dGUF9SRVNFUlZFRF9USFBcXHRCSVQoX19fR0ZQX1JFU0VSVkVEX1RIUF9CSVQpXFxuICNkZWZpbmUgX19fR0ZQX0RJUkVDVF9SRUNMQUlNXFx0QklUKF9fX0dGUF9ESVJFQ1RfUkVDTEFJTV9CSVQpXFxuICNkZWZpbmUgX19fR0ZQX0tTV0FQRF9SRUNMQUlNXFx0QklUKF9fX0dGUF9LU1dBUERfUkVDTEFJTV9CSVQpXFxuICNkZWZpbmUgX19fR0ZQX1dSSVRFXFx0XFx0QklUKF9fX0dGUF9XUklURV9CSVQpXFxuQEAgLTE0MSw2ICsxNDEsOSBAQCBlbnVtIHtcXG4gICogJV9fR0ZQX05PX09CSl9FWFQgY2F1c2VzIHNsYWIgYWxsb2NhdGlvbiB0byBoYXZlIG5vIG9iamVjdCBleHRlbnNpb24uXFxuICAqIG1hcmtfb2JqX2NvZGV0YWdfZW1wdHkoKSBzaG91bGQgYmUgY2FsbGVkIHVwb24gZnJlZWluZyBmb3Igb2JqZWN0cyBhbGxvY2F0ZWRcXG4gICogd2l0aCB0aGlzIGZsYWcgdG8gaW5kaWNhdGUgdGhhdCB0aGVpciBOVUxMIHRhZ3MgYXJlIGV4cGVjdGVkIGFuZCBub3JtYWwuXFxuKyAqXFxuKyAqICVfX0dGUF9SRVNFUlZFRF9USFAgaXMgYW4gaW50ZXJuYWwgZmxhZyBmb3IgcmVzZXJ2ZWQgVEhQIGZhdWx0cy4gSXQgcmVzdHJpY3RzXFxuKyAqdGhlIGFsbG9jYXRpb24gdG8gJU1JR1JBVEVfUkVTRVJWRURfVEhQIHBhZ2VibG9ja3MuXFxuICAqL1xcbiAjZGVmaW5lIF9fR0ZQX1JFQ0xBSU1BQkxFICgoX19mb3JjZSBnZnBfdClfX19HRlBfUkVDTEFJTUFCTEUpXFxuICNkZWZpbmUgX19HRlBfV1JJVEVcXHQoKF9fZm9yY2UgZ2ZwX3QpX19fR0ZQX1dSSVRFKVxcbkBAIC0xNDgsNiArMTUxLDcgQEAgZW51bSB7XFxuICNkZWZpbmUgX19HRlBfVEhJU05PREVcXHQoKF9fZm9yY2UgZ2ZwX3QpX19fR0ZQX1RISVNOT0RFKVxcbiAjZGVmaW5lIF9fR0ZQX0FDQ09VTlRcXHQoKF9fZm9yY2UgZ2ZwX3QpX19fR0ZQX0FDQ09VTlQpXFxuICNkZWZpbmUgX19HRlBfTk9fT0JKX0VYVCAgICgoX19mb3JjZSBnZnBfdClfX19HRlBfTk9fT0JKX0VYVClcXG4rI2RlZmluZSBfX0dGUF9SRVNFUlZFRF9USFAgKChfX2ZvcmNlIGdmcF90KV9fX0dGUF9SRVNFUlZFRF9USFApXFxuIFxcbiAvKipcXG4gICogRE9DOiBXYXRlcm1hcmsgbW9kaWZpZXJzXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHVnZV9tbS5oIGIvaW5jbHVkZS9saW51eC9odWdlX21tLmhcXG5pbmRleCBhZDIwZjdmOGMxNzk0NC4uNGZlOTY1MWNkODZiNWUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9odWdlX21tLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaFxcbkBAIC0zMzAsNiArMzMwLDggQEAgdW5zaWduZWQgbG9uZyB0aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcbiBcXHRcXHRpZiAodm1fZmxhZ3MgXFx1MDAyNiBWTV9IVUdFUEFHRSlcXG4gXFx0XFx0XFx0bWFzayB8PSBSRUFEX09OQ0UoaHVnZV9hbm9uX29yZGVyc19tYWR2aXNlKTtcXG4rXFx0XFx0aWYgKHZtX2ZsYWdzIFxcdTAwMjYgVk1fUkVTRVJWRURfVEhQKVxcbitcXHRcXHRcXHRtYXNrIHw9IEJJVChQTURfT1JERVIpO1xcbiBcXHRcXHRpZiAoaHVnZXBhZ2VfZ2xvYmFsX2Fsd2F5cygpIHx8XFxuIFxcdFxcdCAgICAoKHZtX2ZsYWdzIFxcdTAwMjYgVk1fSFVHRVBBR0UpIFxcdTAwMjZcXHUwMDI2IGh1Z2VwYWdlX2dsb2JhbF9lbmFibGVkKCkpKVxcbiBcXHRcXHRcXHRtYXNrIHw9IFJFQURfT05DRShodWdlX2Fub25fb3JkZXJzX2luaGVyaXQpO1xcbkBAIC0zNzEsNyArMzczLDcgQEAgc3RhdGljIGlubGluZSBib29sIHZtYV90aHBfZGlzYWJsZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdCAqIEFyZSBUSFBzIGRpc2FibGVkIG9ubHkgZm9yIFZNQXMgd2hlcmUgd2UgZGlkbid0IGdldCBhbiBleHBsaWNpdFxcbiBcXHQgKiBhZHZpc2UgdG8gdXNlIHRoZW0/XFxuIFxcdCAqL1xcbi1cXHRpZiAodm1fZmxhZ3MgXFx1MDAyNiBWTV9IVUdFUEFHRSlcXG4rXFx0aWYgKHZtX2ZsYWdzIFxcdTAwMjYgKFZNX0hVR0VQQUdFIHwgVk1fUkVTRVJWRURfVEhQKSlcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXHQvKlxcbiBcXHQgKiBGb3JjaW5nIGEgY29sbGFwc2UgKGUuZy4sIG1hZHZfY29sbGFwc2UpLCBpcyBhIGNsZWFyIGFkdmljZSB0b1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmhcXG5pbmRleCA0ODVkZjljMmRiZGRiMy4uMjc4Y2Y0YmZkNGVjNWIgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9tbS5oXFxuQEAgLTM1Myw2ICszNTMsNyBAQCBlbnVtIHtcXG4gI2VuZGlmXFxuIFxcdERFQ0xBUkVfVk1BX0JJVChVRkZEX01JTk9SLCA0MSksXFxuIFxcdERFQ0xBUkVfVk1BX0JJVChTRUFMRUQsIDQyKSxcXG4rXFx0REVDTEFSRV9WTUFfQklUKFJFU0VSVkVEX1RIUCwgNDMpLFxcbiBcXHQvKiBGbGFncyB0aGF0IHJldXNlIGZsYWdzIGFib3ZlLiAqL1xcbiBcXHRERUNMQVJFX1ZNQV9CSVRfQUxJQVMoUEtFWV9CSVQwLCBISUdIX0FSQ0hfMCksXFxuIFxcdERFQ0xBUkVfVk1BX0JJVF9BTElBUyhQS0VZX0JJVDEsIEhJR0hfQVJDSF8xKSxcXG5AQCAtNTI2LDYgKzUyNywxMiBAQCBlbnVtIHtcXG4gI2RlZmluZSBWTUFfRFJPUFBBQkxFXFx0XFx0RU1QVFlfVk1BX0ZMQUdTXFxuICNlbmRpZlxcbiBcXG4rI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbisjZGVmaW5lIFZNX1JFU0VSVkVEX1RIUFxcdFxcdElOSVRfVk1fRkxBRyhSRVNFUlZFRF9USFApXFxuKyNlbHNlXFxuKyNkZWZpbmUgVk1fUkVTRVJWRURfVEhQXFx0XFx0Vk1fTk9ORVxcbisjZW5kaWZcXG4rXFxuIC8qIEJpdHMgc2V0IGluIHRoZSBWTUEgdW50aWwgdGhlIHN0YWNrIGlzIGluIGl0cyBmaW5hbCBsb2NhdGlvbiAqL1xcbiAjZGVmaW5lIFZNX1NUQUNLX0lOQ09NUExFVEVfU0VUVVAgKFZNX1JBTkRfUkVBRCB8IFZNX1NFUV9SRUFEIHwgVk1fU1RBQ0tfRUFSTFkpXFxuIFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxcbmluZGV4IGNhMjcxMjE4NzE0NzVjLi40NDE4ZDBjOWFjY2RjOCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxcbkBAIC0xMzMsMTAgKzEzMyw5IEBAIGVudW0gbWlncmF0ZXR5cGUge1xcbiBcXHQgKiBfX2ZyZWVfcGFnZWJsb2NrX2NtYSgpIGZ1bmN0aW9uLlxcbiBcXHQgKi9cXG4gXFx0TUlHUkFURV9DTUEsXFxuLVxcdF9fTUlHUkFURV9UWVBFX0VORCA9IE1JR1JBVEVfQ01BLFxcbi0jZWxzZVxcbi1cXHRfX01JR1JBVEVfVFlQRV9FTkQgPSBNSUdSQVRFX0hJR0hBVE9NSUMsXFxuICNlbmRpZlxcbitcXHRNSUdSQVRFX1JFU0VSVkVEX1RIUCxcXG4rXFx0X19NSUdSQVRFX1RZUEVfRU5EID0gTUlHUkFURV9SRVNFUlZFRF9USFAsXFxuICNpZmRlZiBDT05GSUdfTUVNT1JZX0lTT0xBVElPTlxcbiBcXHRNSUdSQVRFX0lTT0xBVEUsXFx0LyogY2FuJ3QgYWxsb2NhdGUgZnJvbSBoZXJlICovXFxuICNlbmRpZlxcbkBAIC0xNjEsNiArMTYwLDkgQEAgZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaWdyYXRldHlwZV9uYW1lc1tNSUdSQVRFX1RZUEVTXTtcXG4gIyAgZGVmaW5lIGlzX21pZ3JhdGVfY21hX2ZvbGlvKGZvbGlvLCBwZm4pIGZhbHNlXFxuICNlbmRpZlxcbiBcXG4rI2RlZmluZSBpc19taWdyYXRlX3Jlc2VydmVkX3RocChtaWdyYXRldHlwZSkgXFxcXFxcbitcXHR1bmxpa2VseSgobWlncmF0ZXR5cGUpID09IE1JR1JBVEVfUkVTRVJWRURfVEhQKVxcbitcXG4gc3RhdGljIGlubGluZSBib29sIGlzX21pZ3JhdGVfbW92YWJsZShpbnQgbXQpXFxuIHtcXG4gXFx0cmV0dXJuIGlzX21pZ3JhdGVfY21hKG10KSB8fCBtdCA9PSBNSUdSQVRFX01PVkFCTEU7XFxuQEAgLTk3NSw2ICs5NzcsOSBAQCBzdHJ1Y3Qgem9uZSB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbnJfcmVzZXJ2ZWRfaGlnaGF0b21pYztcXG4gXFx0dW5zaWduZWQgbG9uZyBucl9mcmVlX2hpZ2hhdG9taWM7XFxuIFxcbitcXHR1bnNpZ25lZCBsb25nIG5yX3Jlc2VydmVkX3RocDtcXG4rXFx0dW5zaWduZWQgbG9uZyBucl9mcmVlX3Jlc2VydmVkX3RocDtcXG4rXFxuIFxcdC8qXFxuIFxcdCAqIFdlIGRvbid0IGtub3cgaWYgdGhlIG1lbW9yeSB0aGF0IHdlJ3JlIGdvaW5nIHRvIGFsbG9jYXRlIHdpbGwgYmVcXG4gXFx0ICogZnJlZWFibGUgb3IvYW5kIGl0IHdpbGwgYmUgcmVsZWFzZWQgZXZlbnR1YWxseSwgc28gdG8gYXZvaWQgdG90YWxseVxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9tbWZsYWdzLmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9tbWZsYWdzLmhcXG5pbmRleCBhNmU1YTQ0YzliNDI5OS4uM2RiNDBlYmQ3MDYwYmQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvbW1mbGFncy5oXFxuKysrIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvbW1mbGFncy5oXFxuQEAgLTI0LDYgKzI0LDcgQEBcXG4gXFx0VFJBQ0VfR0ZQX0VNKElPKVxcdFxcdFxcdFxcXFxcXG4gXFx0VFJBQ0VfR0ZQX0VNKEZTKVxcdFxcdFxcdFxcXFxcXG4gXFx0VFJBQ0VfR0ZQX0VNKFpFUk8pXFx0XFx0XFx0XFxcXFxcbitcXHRUUkFDRV9HRlBfRU0oUkVTRVJWRURfVEhQKVxcdFxcdFxcXFxcXG4gXFx0VFJBQ0VfR0ZQX0VNKERJUkVDVF9SRUNMQUlNKVxcdFxcdFxcXFxcXG4gXFx0VFJBQ0VfR0ZQX0VNKEtTV0FQRF9SRUNMQUlNKVxcdFxcdFxcXFxcXG4gXFx0VFJBQ0VfR0ZQX0VNKFdSSVRFKVxcdFxcdFxcdFxcXFxcXG5AQCAtNzIsOCArNzMsNyBAQFxcbiBcXG4gVFJBQ0VfR0ZQX0ZMQUdTXFxuIFxcbi0vKiBKdXN0IGluIGNhc2UgdGhlc2UgYXJlIGV2ZXIgdXNlZCAqL1xcbi1UUkFDRV9ERUZJTkVfRU5VTShfX19HRlBfVU5VU0VEX0JJVCk7XFxuKy8qIEp1c3QgaW4gY2FzZSB0aGlzIGlzIGV2ZXIgdXNlZCAqL1xcbiBUUkFDRV9ERUZJTkVfRU5VTShfX19HRlBfTEFTVF9CSVQpO1xcbiBcXG4gI2RlZmluZSBnZnBmbGFnX3N0cmluZyhmbGFnKSB7KF9fZm9yY2UgdW5zaWduZWQgbG9uZylmbGFnLCAjZmxhZ31cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL21tYW4tY29tbW9uLmggYi9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvbW1hbi1jb21tb24uaFxcbmluZGV4IGVmMWMyN2ZhM2M1NzBmLi5iM2QxNDQ4OTM1ZWFkMSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvbW1hbi1jb21tb24uaFxcbisrKyBiL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9tbWFuLWNvbW1vbi5oXFxuQEAgLTc5LDYgKzc5LDggQEBcXG4gXFxuICNkZWZpbmUgTUFEVl9DT0xMQVBTRVxcdDI1XFx0XFx0LyogU3luY2hyb25vdXMgaHVnZXBhZ2UgY29sbGFwc2UgKi9cXG4gXFxuKyNkZWZpbmUgTUFEVl9SRVNFUlZFRF9USFAgMjZcXHRcXHQvKiBVc2UgcmVzZXJ2ZWQgdHJhbnNwYXJlbnQgaHVnZXBhZ2VzICovXFxuK1xcbiAjZGVmaW5lIE1BRFZfR1VBUkRfSU5TVEFMTCAxMDJcXHRcXHQvKiBmYXRhbCBzaWduYWwgb24gYWNjZXNzIHRvIHJhbmdlICovXFxuICNkZWZpbmUgTUFEVl9HVUFSRF9SRU1PVkUgMTAzXFx0XFx0LyogdW5ndWFyZCByYW5nZSAqL1xcbiBcXG5kaWZmIC0tZ2l0IGEvbW0vTWFrZWZpbGUgYi9tbS9NYWtlZmlsZVxcbmluZGV4IGVmZjlmOWU3ZTA2MWMxLi5mZDc0YTczOTJlMzQ2NyAxMDA2NDRcXG4tLS0gYS9tbS9NYWtlZmlsZVxcbisrKyBiL21tL01ha2VmaWxlXFxuQEAgLTk4LDcgKzk4LDcgQEAgb2JqLSQoQ09ORklHX01FTVRFU1QpXFx0XFx0Kz0gbWVtdGVzdC5vXFxuIG9iai0kKENPTkZJR19NSUdSQVRJT04pICs9IG1pZ3JhdGUub1xcbiBvYmotJChDT05GSUdfTlVNQSkgKz0gbWVtb3J5LXRpZXJzLm9cXG4gb2JqLSQoQ09ORklHX0RFVklDRV9NSUdSQVRJT04pICs9IG1pZ3JhdGVfZGV2aWNlLm9cXG4tb2JqLSQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSArPSBodWdlX21lbW9yeS5vIGtodWdlcGFnZWQub1xcbitvYmotJChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpICs9IGh1Z2VfbWVtb3J5Lm8ga2h1Z2VwYWdlZC5vIHJlc2VydmVkX3RocC5vXFxuIG9iai0kKENPTkZJR19QQUdFX0NPVU5URVIpICs9IHBhZ2VfY291bnRlci5vXFxuIG9iai0kKENPTkZJR19MSVZFVVBEQVRFX01FTUZEKSArPSBtZW1mZF9sdW8ub1xcbiBvYmotJChDT05GSUdfTUVNQ0dfVjEpICs9IG1lbWNvbnRyb2wtdjEub1xcbmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuY1xcbmluZGV4IDJiY2NiMGE1M2EwYTYwLi42NmQ4NWEyZmE4NTVmMyAxMDA2NDRcXG4tLS0gYS9tbS9odWdlX21lbW9yeS5jXFxuKysrIGIvbW0vaHVnZV9tZW1vcnkuY1xcbkBAIC0xMjY3LDYgKzEyNjcsOSBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICp2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdGNvbnN0IGludCBvcmRlciA9IEhQQUdFX1BNRF9PUkRFUjtcXG4gXFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4gXFxuK1xcdGlmICh2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fUkVTRVJWRURfVEhQKVxcbitcXHRcXHRnZnAgfD0gX19HRlBfUkVTRVJWRURfVEhQO1xcbitcXG4gXFx0Zm9saW8gPSB2bWFfYWxsb2NfZm9saW8oZ2ZwLCBvcmRlciwgdm1hLCBhZGRyIFxcdTAwMjYgSFBBR0VfUE1EX01BU0spO1xcbiBcXG4gXFx0aWYgKHVubGlrZWx5KCFmb2xpbykpIHtcXG5AQCAtMTM0NCw4ICsxMzQ3LDExIEBAIHN0YXRpYyB2bV9mYXVsdF90IF9fZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuIFxcdHZtX2ZhdWx0X3QgcmV0ID0gMDtcXG4gXFxuIFxcdGZvbGlvID0gdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kKHZtYSwgdm1mLVxcdTAwM2VhZGRyZXNzKTtcXG4tXFx0aWYgKHVubGlrZWx5KCFmb2xpbykpXFxuK1xcdGlmICh1bmxpa2VseSghZm9saW8pKSB7XFxuK1xcdFxcdGlmICh2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fUkVTRVJWRURfVEhQKVxcbitcXHRcXHRcXHRyZXR1cm4gVk1fRkFVTFRfT09NO1xcbiBcXHRcXHRyZXR1cm4gVk1fRkFVTFRfRkFMTEJBQ0s7XFxuK1xcdH1cXG4gXFxuIFxcdHBndGFibGUgPSBwdGVfYWxsb2Nfb25lKHZtYS1cXHUwMDNldm1fbW0pO1xcbiBcXHRpZiAodW5saWtlbHkoIXBndGFibGUpKSB7XFxuQEAgLTE0ODAsMTUgKzE0ODYsMTcgQEAgdm1fZmF1bHRfdCBkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4gXFx0dm1fZmF1bHRfdCByZXQ7XFxuIFxcbiBcXHRpZiAoIXRocF92bWFfc3VpdGFibGVfb3JkZXIodm1hLCBoYWRkciwgUE1EX09SREVSKSlcXG4tXFx0XFx0cmV0dXJuIFZNX0ZBVUxUX0ZBTExCQUNLO1xcbitcXHRcXHRyZXR1cm4gKHZtYS1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiBWTV9SRVNFUlZFRF9USFApID8gVk1fRkFVTFRfT09NIDpcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgVk1fRkFVTFRfRkFMTEJBQ0s7XFxuIFxcdHJldCA9IHZtZl9hbm9uX3ByZXBhcmUodm1mKTtcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0a2h1Z2VwYWdlZF9lbnRlcl92bWEodm1hLCB2bWEtXFx1MDAzZXZtX2ZsYWdzKTtcXG4gXFxuLVxcdGlmICghKHZtZi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBGQVVMVF9GTEFHX1dSSVRFKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHRcXHQhbW1fZm9yYmlkc196ZXJvcGFnZSh2bWEtXFx1MDAzZXZtX21tKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHRcXHR0cmFuc3BhcmVudF9odWdlcGFnZV91c2VfemVyb19wYWdlKCkpIHtcXG4rXFx0aWYgKCEodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX1JFU0VSVkVEX1RIUCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICEodm1mLVxcdTAwM2VmbGFncyBcXHUwMDI2IEZBVUxUX0ZMQUdfV1JJVEUpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAhbW1fZm9yYmlkc196ZXJvcGFnZSh2bWEtXFx1MDAzZXZtX21tKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgdHJhbnNwYXJlbnRfaHVnZXBhZ2VfdXNlX3plcm9fcGFnZSgpKSB7XFxuIFxcdFxcdHBndGFibGVfdCBwZ3RhYmxlO1xcbiBcXHRcXHRzdHJ1Y3QgZm9saW8gKnplcm9fZm9saW87XFxuIFxcdFxcdHZtX2ZhdWx0X3QgcmV0O1xcbmRpZmYgLS1naXQgYS9tbS9pbnRlcm5hbC5oIGIvbW0vaW50ZXJuYWwuaFxcbmluZGV4IDE4MWU3OWYxZDZhMjA3Li40YjJhMTNkMzUzNzcyMSAxMDA2NDRcXG4tLS0gYS9tbS9pbnRlcm5hbC5oXFxuKysrIGIvbW0vaW50ZXJuYWwuaFxcbkBAIC0xNDc3LDYgKzE0NzcsNyBAQCB1bnNpZ25lZCBpbnQgcmVjbGFpbV9jbGVhbl9wYWdlc19mcm9tX2xpc3Qoc3RydWN0IHpvbmUgKnpvbmUsXFxuICNkZWZpbmUgQUxMT0NfSElHSEFUT01JQ1xcdDB4MjAwIC8qIEFsbG93cyBhY2Nlc3MgdG8gTUlHUkFURV9ISUdIQVRPTUlDICovXFxuICNkZWZpbmUgQUxMT0NfVFJZTE9DS1xcdFxcdDB4NDAwIC8qIE9ubHkgdXNlIHNwaW5fdHJ5bG9jayBpbiBhbGxvY2F0aW9uIHBhdGggKi9cXG4gI2RlZmluZSBBTExPQ19LU1dBUERcXHRcXHQweDgwMCAvKiBhbGxvdyB3YWtpbmcgb2Yga3N3YXBkLCBfX0dGUF9LU1dBUERfUkVDTEFJTSBzZXQgKi9cXG4rI2RlZmluZSBBTExPQ19SRVNFUlZFRF9USFBcXHQweDEwMDAgLyogQWxsb3dzIGFjY2VzcyB0byByZXNlcnZlZCBUSFAgcGFnZWJsb2NrcyAqL1xcbiBcXG4gLyogRmxhZ3MgdGhhdCBhbGxvdyBhbGxvY2F0aW9ucyBiZWxvdyB0aGUgbWluIHdhdGVybWFyay4gKi9cXG4gI2RlZmluZSBBTExPQ19SRVNFUlZFUyAoQUxMT0NfTk9OX0JMT0NLfEFMTE9DX01JTl9SRVNFUlZFfEFMTE9DX0hJR0hBVE9NSUN8QUxMT0NfT09NKVxcbkBAIC0xOTUxLDQgKzE5NTIsOSBAQCBzdGF0aWMgaW5saW5lIGludCBnZXRfc3lzY3RsX21heF9tYXBfY291bnQodm9pZClcXG4gYm9vbCBtYXlfZXhwYW5kX3ZtKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzLFxcbiBcXHRcXHQgICB1bnNpZ25lZCBsb25nIG5wYWdlcyk7XFxuIFxcbit1bnNpZ25lZCBsb25nIHJlc2VydmVkX3RocF9wYWdlYmxvY2tzKHVuc2lnbmVkIGxvbmcgbnJfaHBhZ2VzKTtcXG4rdW5zaWduZWQgbG9uZyByZXNlcnZlZF90aHBfaHBhZ2VfbnIodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpO1xcbitpbnQgcmVzZXJ2ZWRfdGhwX2NoYXJnZSh1bnNpZ25lZCBsb25nIG5yX2hwYWdlcyk7XFxuK3ZvaWQgcmVzZXJ2ZWRfdGhwX3VuY2hhcmdlKHVuc2lnbmVkIGxvbmcgbnJfaHBhZ2VzKTtcXG4rXFxuICNlbmRpZlxcdC8qIF9fTU1fSU5URVJOQUxfSCAqL1xcbmRpZmYgLS1naXQgYS9tbS9raHVnZXBhZ2VkLmMgYi9tbS9raHVnZXBhZ2VkLmNcXG5pbmRleCA2MTdiY2E3NmRiNDliNi4uODAyOTNlOGMxZTRlNzYgMTAwNjQ0XFxuLS0tIGEvbW0va2h1Z2VwYWdlZC5jXFxuKysrIGIvbW0va2h1Z2VwYWdlZC5jXFxuQEAgLTQ1MSw2ICs0NTEsNyBAQCBpbnQgaHVnZXBhZ2VfbWFkdmlzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0c3dpdGNoIChhZHZpY2UpIHtcXG4gXFx0Y2FzZSBNQURWX0hVR0VQQUdFOlxcbiBcXHRcXHQqdm1fZmxhZ3MgXFx1MDAyNj0gflZNX05PSFVHRVBBR0U7XFxuK1xcdFxcdCp2bV9mbGFncyBcXHUwMDI2PSB+Vk1fUkVTRVJWRURfVEhQO1xcbiBcXHRcXHQqdm1fZmxhZ3MgfD0gVk1fSFVHRVBBR0U7XFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIElmIHRoZSB2bWEgYmVjb21lIGdvb2QgZm9yIGtodWdlcGFnZWQgdG8gc2NhbixcXG5AQCAtNDYxLDYgKzQ2Miw3IEBAIGludCBodWdlcGFnZV9tYWR2aXNlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBNQURWX05PSFVHRVBBR0U6XFxuIFxcdFxcdCp2bV9mbGFncyBcXHUwMDI2PSB+Vk1fSFVHRVBBR0U7XFxuK1xcdFxcdCp2bV9mbGFncyBcXHUwMDI2PSB+Vk1fUkVTRVJWRURfVEhQO1xcbiBcXHRcXHQqdm1fZmxhZ3MgfD0gVk1fTk9IVUdFUEFHRTtcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogU2V0dGluZyBWTV9OT0hVR0VQQUdFIHdpbGwgcHJldmVudCBraHVnZXBhZ2VkIGZyb20gc2Nhbm5pbmdcXG5AQCAtNDY4LDYgKzQ3MCwxMiBAQCBpbnQgaHVnZXBhZ2VfbWFkdmlzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0XFx0ICogaXQgZ290IHJlZ2lzdGVyZWQgYmVmb3JlIFZNX05PSFVHRVBBR0Ugd2FzIHNldC5cXG4gXFx0XFx0ICovXFxuIFxcdFxcdGJyZWFrO1xcbitcXHRjYXNlIE1BRFZfUkVTRVJWRURfVEhQOlxcbitcXHRcXHQqdm1fZmxhZ3MgXFx1MDAyNj0gfihWTV9IVUdFUEFHRSB8IFZNX05PSFVHRVBBR0UpO1xcbitcXHRcXHQqdm1fZmxhZ3MgfD0gVk1fUkVTRVJWRURfVEhQO1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG4gXFxuIFxcdHJldHVybiAwO1xcbmRpZmYgLS1naXQgYS9tbS9tYWR2aXNlLmMgYi9tbS9tYWR2aXNlLmNcXG5pbmRleCBjZDliYjA3NzA3MmNjYi4uZGQ5MTEwNWRiNjhjNzUgMTAwNjQ0XFxuLS0tIGEvbW0vbWFkdmlzZS5jXFxuKysrIGIvbW0vbWFkdmlzZS5jXFxuQEAgLTEzLDYgKzEzLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BhZ2UtaXNvbGF0aW9uLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wYWdlX2lkbGUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VzZXJmYXVsdGZkX2suaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2h1Z2VfbW0uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2h1Z2V0bGIuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZhbGxvYy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZmFkdmlzZS5oXFx1MDAzZVxcbkBAIC0xMzMxLDYgKzEzMzIsNjUgQEAgc3RhdGljIGJvb2wgY2FuX21hZHZpc2VfbW9kaWZ5KHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbiB9XFxuICNlbmRpZlxcbiBcXG4rc3RhdGljIGJvb2wgcmVzZXJ2ZWRfdGhwX21hZHZpc2VfYWxpZ25lZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4rXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yX3JhbmdlICpyYW5nZSlcXG4re1xcbitcXHRpZiAoISh2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fUkVTRVJWRURfVEhQKSlcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbitcXHRyZXR1cm4gSVNfQUxJR05FRChyYW5nZS1cXHUwMDNlc3RhcnQsIEhQQUdFX1BNRF9TSVpFKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgICAgSVNfQUxJR05FRChyYW5nZS1cXHUwMDNlZW5kLCBIUEFHRV9QTURfU0laRSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgbWFkdmlzZV9odWdlcGFnZV9wb2xpY3koc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IsXFxuK1xcdFxcdFxcdFxcdCAgIHZtX2ZsYWdzX3QgKm5ld19mbGFncyxcXG4rXFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyAqcmVzZXJ2ZWRfaHBhZ2VzLFxcbitcXHRcXHRcXHRcXHQgICBib29sICpjaGFyZ2VfcmVzZXJ2ZWRfdGhwLFxcbitcXHRcXHRcXHRcXHQgICBib29sICp1bmNoYXJnZV9yZXNlcnZlZF90aHApXFxuK3tcXG4rXFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSBtYWR2X2JlaGF2aW9yLVxcdTAwM2V2bWE7XFxuK1xcdHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yX3JhbmdlICpyYW5nZSA9IFxcdTAwMjZtYWR2X2JlaGF2aW9yLVxcdTAwM2VyYW5nZTtcXG4rXFx0dW5zaWduZWQgbG9uZyBocGFnZXM7XFxuK1xcdGludCBiZWhhdmlvciA9IG1hZHZfYmVoYXZpb3ItXFx1MDAzZWJlaGF2aW9yO1xcbitcXHRpbnQgZXJyb3I7XFxuK1xcbitcXHRzd2l0Y2ggKGJlaGF2aW9yKSB7XFxuK1xcdGNhc2UgTUFEVl9IVUdFUEFHRTpcXG4rXFx0Y2FzZSBNQURWX05PSFVHRVBBR0U6XFxuK1xcdFxcdGVycm9yID0gaHVnZXBhZ2VfbWFkdmlzZSh2bWEsIG5ld19mbGFncywgYmVoYXZpb3IpO1xcbitcXHRcXHRpZiAoZXJyb3IpXFxuK1xcdFxcdFxcdHJldHVybiBlcnJvcjtcXG4rXFx0XFx0KnVuY2hhcmdlX3Jlc2VydmVkX3RocCA9ICh2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fUkVTRVJWRURfVEhQKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHRcXHRcXHQgISgqbmV3X2ZsYWdzIFxcdTAwMjYgVk1fUkVTRVJWRURfVEhQKTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdGNhc2UgTUFEVl9SRVNFUlZFRF9USFA6XFxuK1xcdFxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0aWYgKCF2bWFfaXNfYW5vbnltb3VzKHZtYSkgfHwgKCpuZXdfZmxhZ3MgXFx1MDAyNiBWTV9TSEFSRUQpIHx8XFxuK1xcdFxcdCAgICAoKm5ld19mbGFncyBcXHUwMDI2IFZNX1NQRUNJQUwpKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0aWYgKCFJU19BTElHTkVEKHJhbmdlLVxcdTAwM2VzdGFydCwgSFBBR0VfUE1EX1NJWkUpIHx8XFxuK1xcdFxcdCAgICAhSVNfQUxJR05FRChyYW5nZS1cXHUwMDNlZW5kLCBIUEFHRV9QTURfU0laRSkpXFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0XFx0ZXJyb3IgPSBodWdlcGFnZV9tYWR2aXNlKHZtYSwgbmV3X2ZsYWdzLCBiZWhhdmlvcik7XFxuK1xcdFxcdGlmIChlcnJvcilcXG4rXFx0XFx0XFx0cmV0dXJuIGVycm9yO1xcbitcXG4rXFx0XFx0aWYgKCEodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX1JFU0VSVkVEX1RIUCkpIHtcXG4rXFx0XFx0XFx0aHBhZ2VzID0gcmVzZXJ2ZWRfdGhwX2hwYWdlX25yKHJhbmdlLVxcdTAwM2VzdGFydCwgcmFuZ2UtXFx1MDAzZWVuZCk7XFxuK1xcdFxcdFxcdGVycm9yID0gcmVzZXJ2ZWRfdGhwX2NoYXJnZShocGFnZXMpO1xcbitcXHRcXHRcXHRpZiAoZXJyb3IpXFxuK1xcdFxcdFxcdFxcdHJldHVybiBlcnJvcjtcXG4rXFx0XFx0XFx0KnJlc2VydmVkX2hwYWdlcyA9IGhwYWdlcztcXG4rXFx0XFx0XFx0KmNoYXJnZV9yZXNlcnZlZF90aHAgPSB0cnVlO1xcbitcXHRcXHR9XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbit9XFxuK1xcbiAvKlxcbiAgKiBBcHBseSBhbiBtYWR2aXNlIGJlaGF2aW9yIHRvIGEgcmVnaW9uIG9mIGEgdm1hLiAgbWFkdmlzZV91cGRhdGVfdm1hXFxuICAqIHdpbGwgaGFuZGxlIHNwbGl0dGluZyBhIHZtIGFyZWEgaW50byBzZXBhcmF0ZSBhcmVhcywgZWFjaCBhcmVhIHdpdGggaXRzIG93blxcbkBAIC0xMzQyLDYgKzE0MDIsOSBAQCBzdGF0aWMgaW50IG1hZHZpc2Vfdm1hX2JlaGF2aW9yKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbiBcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IG1hZHZfYmVoYXZpb3ItXFx1MDAzZXZtYTtcXG4gXFx0dm1fZmxhZ3NfdCBuZXdfZmxhZ3MgPSB2bWEtXFx1MDAzZXZtX2ZsYWdzO1xcbiBcXHRzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvcl9yYW5nZSAqcmFuZ2UgPSBcXHUwMDI2bWFkdl9iZWhhdmlvci1cXHUwMDNlcmFuZ2U7XFxuK1xcdHVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWRfaHBhZ2VzID0gMDtcXG4rXFx0Ym9vbCBjaGFyZ2VfcmVzZXJ2ZWRfdGhwID0gZmFsc2U7XFxuK1xcdGJvb2wgdW5jaGFyZ2VfcmVzZXJ2ZWRfdGhwID0gZmFsc2U7XFxuIFxcdGludCBlcnJvcjtcXG4gXFxuIFxcdGlmICh1bmxpa2VseSghY2FuX21hZHZpc2VfbW9kaWZ5KG1hZHZfYmVoYXZpb3IpKSlcXG5AQCAtMTM1MywxNCArMTQxNiwyMiBAQCBzdGF0aWMgaW50IG1hZHZpc2Vfdm1hX2JlaGF2aW9yKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbiBcXHRjYXNlIE1BRFZfV0lMTE5FRUQ6XFxuIFxcdFxcdHJldHVybiBtYWR2aXNlX3dpbGxuZWVkKG1hZHZfYmVoYXZpb3IpO1xcbiBcXHRjYXNlIE1BRFZfQ09MRDpcXG4rXFx0XFx0aWYgKCFyZXNlcnZlZF90aHBfbWFkdmlzZV9hbGlnbmVkKHZtYSwgcmFuZ2UpKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0XFx0cmV0dXJuIG1hZHZpc2VfY29sZChtYWR2X2JlaGF2aW9yKTtcXG4gXFx0Y2FzZSBNQURWX1BBR0VPVVQ6XFxuK1xcdFxcdGlmICghcmVzZXJ2ZWRfdGhwX21hZHZpc2VfYWxpZ25lZCh2bWEsIHJhbmdlKSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdFxcdHJldHVybiBtYWR2aXNlX3BhZ2VvdXQobWFkdl9iZWhhdmlvcik7XFxuIFxcdGNhc2UgTUFEVl9GUkVFOlxcbiBcXHRjYXNlIE1BRFZfRE9OVE5FRUQ6XFxuIFxcdGNhc2UgTUFEVl9ET05UTkVFRF9MT0NLRUQ6XFxuK1xcdFxcdGlmICghcmVzZXJ2ZWRfdGhwX21hZHZpc2VfYWxpZ25lZCh2bWEsIHJhbmdlKSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdFxcdHJldHVybiBtYWR2aXNlX2RvbnRuZWVkX2ZyZWUobWFkdl9iZWhhdmlvcik7XFxuIFxcdGNhc2UgTUFEVl9DT0xMQVBTRTpcXG4rXFx0XFx0aWYgKHZtYS1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiBWTV9SRVNFUlZFRF9USFApXFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHRcXHRyZXR1cm4gbWFkdmlzZV9jb2xsYXBzZSh2bWEsIHJhbmdlLVxcdTAwM2VzdGFydCwgcmFuZ2UtXFx1MDAzZWVuZCxcXG4gXFx0XFx0XFx0XFx1MDAyNm1hZHZfYmVoYXZpb3ItXFx1MDAzZWxvY2tfZHJvcHBlZCk7XFxuIFxcdGNhc2UgTUFEVl9HVUFSRF9JTlNUQUxMOlxcbkBAIC0xNDE2LDcgKzE0ODcsMTEgQEAgc3RhdGljIGludCBtYWR2aXNlX3ZtYV9iZWhhdmlvcihzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgTUFEVl9IVUdFUEFHRTpcXG4gXFx0Y2FzZSBNQURWX05PSFVHRVBBR0U6XFxuLVxcdFxcdGVycm9yID0gaHVnZXBhZ2VfbWFkdmlzZSh2bWEsIFxcdTAwMjZuZXdfZmxhZ3MsIGJlaGF2aW9yKTtcXG4rXFx0Y2FzZSBNQURWX1JFU0VSVkVEX1RIUDpcXG4rXFx0XFx0ZXJyb3IgPSBtYWR2aXNlX2h1Z2VwYWdlX3BvbGljeShtYWR2X2JlaGF2aW9yLCBcXHUwMDI2bmV3X2ZsYWdzLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2cmVzZXJ2ZWRfaHBhZ2VzLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2Y2hhcmdlX3Jlc2VydmVkX3RocCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx1MDAyNnVuY2hhcmdlX3Jlc2VydmVkX3RocCk7XFxuIFxcdFxcdGlmIChlcnJvcilcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcdFxcdGJyZWFrO1xcbkBAIC0xNDMxLDYgKzE1MDYsMTEgQEAgc3RhdGljIGludCBtYWR2aXNlX3ZtYV9iZWhhdmlvcihzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcXG4gXFx0Vk1fV0FSTl9PTl9PTkNFKG1hZHZfYmVoYXZpb3ItXFx1MDAzZWxvY2tfbW9kZSAhPSBNQURWSVNFX01NQVBfV1JJVEVfTE9DSyk7XFxuIFxcbiBcXHRlcnJvciA9IG1hZHZpc2VfdXBkYXRlX3ZtYShuZXdfZmxhZ3MsIG1hZHZfYmVoYXZpb3IpO1xcbitcXHRpZiAoZXJyb3IgXFx1MDAyNlxcdTAwMjYgY2hhcmdlX3Jlc2VydmVkX3RocClcXG4rXFx0XFx0cmVzZXJ2ZWRfdGhwX3VuY2hhcmdlKHJlc2VydmVkX2hwYWdlcyk7XFxuK1xcdGVsc2UgaWYgKCFlcnJvciBcXHUwMDI2XFx1MDAyNiB1bmNoYXJnZV9yZXNlcnZlZF90aHApXFxuK1xcdFxcdHJlc2VydmVkX3RocF91bmNoYXJnZShyZXNlcnZlZF90aHBfaHBhZ2VfbnIocmFuZ2UtXFx1MDAzZXN0YXJ0LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgcmFuZ2UtXFx1MDAzZWVuZCkpO1xcbiBvdXQ6XFxuIFxcdC8qXFxuIFxcdCAqIG1hZHZpc2UoKSByZXR1cm5zIEVBR0FJTiBpZiBrZXJuZWwgcmVzb3VyY2VzLCBzdWNoIGFzXFxuQEAgLTE1NDEsNiArMTYyMSw3IEBAIG1hZHZpc2VfYmVoYXZpb3JfdmFsaWQoaW50IGJlaGF2aW9yKVxcbiBcXHRjYXNlIE1BRFZfSFVHRVBBR0U6XFxuIFxcdGNhc2UgTUFEVl9OT0hVR0VQQUdFOlxcbiBcXHRjYXNlIE1BRFZfQ09MTEFQU0U6XFxuK1xcdGNhc2UgTUFEVl9SRVNFUlZFRF9USFA6XFxuICNlbmRpZlxcbiBcXHRjYXNlIE1BRFZfRE9OVERVTVA6XFxuIFxcdGNhc2UgTUFEVl9ET0RVTVA6XFxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmNcXG5pbmRleCBmZjMzOGMyYWJlOTIzMS4uMjI1ZmMxYWUyMjM4NmQgMTAwNjQ0XFxuLS0tIGEvbW0vbWVtb3J5LmNcXG4rKysgYi9tbS9tZW1vcnkuY1xcbkBAIC01Mjk3LDYgKzUyOTcsOSBAQCBzdGF0aWMgdm1fZmF1bHRfdCBkb19hbm9ueW1vdXNfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4gXFx0aWYgKHZtYS1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiBWTV9TSEFSRUQpXFxuIFxcdFxcdHJldHVybiBWTV9GQVVMVF9TSUdCVVM7XFxuIFxcbitcXHRpZiAodW5saWtlbHkodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX1JFU0VSVkVEX1RIUCkpXFxuK1xcdFxcdHJldHVybiBWTV9GQVVMVF9PT007XFxuK1xcbiBcXHQvKlxcbiBcXHQgKiBVc2UgcHRlX2FsbG9jKCkgaW5zdGVhZCBvZiBwdGVfYWxsb2NfbWFwKCksIHNvIHRoYXQgT09NIGNhblxcbiBcXHQgKiBiZSBkaXN0aW5ndWlzaGVkIGZyb20gYSB0cmFuc2llbnQgZmFpbHVyZSBvZiBwdGVfb2Zmc2V0X21hcCgpLlxcbmRpZmYgLS1naXQgYS9tbS9tbWFwLmMgYi9tbS9tbWFwLmNcXG5pbmRleCAyMzExYWU3YzJmZjQ1Yy4uNDgxOGIxNGVjMGZmNmMgMTAwNjQ0XFxuLS0tIGEvbW0vbW1hcC5jXFxuKysrIGIvbW0vbW1hcC5jXFxuQEAgLTEyNTEsNiArMTI1MSw3IEBAIHVuc2lnbmVkIGxvbmcgdGVhcl9kb3duX3ZtYXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSxcXG4gXFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgZW5kKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbnJfYWNjb3VudGVkID0gMDtcXG4rXFx0dW5zaWduZWQgbG9uZyBucl9yZXNlcnZlZF90aHAgPSAwO1xcbiBcXHRpbnQgY291bnQgPSAwO1xcbiBcXG4gXFx0bW1hcF9hc3NlcnRfd3JpdGVfbG9ja2VkKG1tKTtcXG5AQCAtMTI1OCw2ICsxMjU5LDEwIEBAIHVuc2lnbmVkIGxvbmcgdGVhcl9kb3duX3ZtYXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSxcXG4gXFx0ZG8ge1xcbiBcXHRcXHRpZiAodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX0FDQ09VTlQpXFxuIFxcdFxcdFxcdG5yX2FjY291bnRlZCArPSB2bWFfcGFnZXModm1hKTtcXG4rXFx0XFx0aWYgKHZtYS1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiBWTV9SRVNFUlZFRF9USFApXFxuK1xcdFxcdFxcdG5yX3Jlc2VydmVkX3RocCArPVxcbitcXHRcXHRcXHRcXHRyZXNlcnZlZF90aHBfaHBhZ2VfbnIodm1hLVxcdTAwM2V2bV9zdGFydCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgdm1hLVxcdTAwM2V2bV9lbmQpO1xcbiBcXHRcXHR2bWFfbWFya19kZXRhY2hlZCh2bWEpO1xcbiBcXHRcXHRyZW1vdmVfdm1hKHZtYSk7XFxuIFxcdFxcdGNvdW50Kys7XFxuQEAgLTEyNjYsNiArMTI3MSw3IEBAIHVuc2lnbmVkIGxvbmcgdGVhcl9kb3duX3ZtYXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSxcXG4gXFx0fSB3aGlsZSAodm1hIFxcdTAwMjZcXHUwMDI2IHZtYS1cXHUwMDNldm1fZW5kIFxcdTAwM2M9IGVuZCk7XFxuIFxcbiBcXHRWTV9XQVJOX09OX09OQ0UoY291bnQgIT0gbW0tXFx1MDAzZW1hcF9jb3VudCk7XFxuK1xcdHJlc2VydmVkX3RocF91bmNoYXJnZShucl9yZXNlcnZlZF90aHApO1xcbiBcXHRyZXR1cm4gbnJfYWNjb3VudGVkO1xcbiB9XFxuIFxcbkBAIC0xNzMzLDYgKzE3MzksNyBAQCBfX2xhdGVudF9lbnRyb3B5IGludCBkdXBfbW1hcChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IG1tX3N0cnVjdCAqb2xkbW0pXFxuIFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqbXBudCwgKnRtcDtcXG4gXFx0aW50IHJldHZhbDtcXG4gXFx0dW5zaWduZWQgbG9uZyBjaGFyZ2UgPSAwO1xcbitcXHR1bnNpZ25lZCBsb25nIHJlc2VydmVkX2NoYXJnZSA9IDA7XFxuIFxcdExJU1RfSEVBRCh1Zik7XFxuIFxcdFZNQV9JVEVSQVRPUih2bWksIG1tLCAwKTtcXG4gXFxuQEAgLTE3NzUsNiArMTc4Miw3IEBAIF9fbGF0ZW50X2VudHJvcHkgaW50IGR1cF9tbWFwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgbW1fc3RydWN0ICpvbGRtbSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdH1cXG4gXFx0XFx0Y2hhcmdlID0gMDtcXG4rXFx0XFx0cmVzZXJ2ZWRfY2hhcmdlID0gMDtcXG4gXFx0XFx0aWYgKG1wbnQtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fQUNDT1VOVCkge1xcbiBcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGxlbiA9IHZtYV9wYWdlcyhtcG50KTtcXG4gXFxuQEAgLTE3ODIsNiArMTc5MCwxNSBAQCBfX2xhdGVudF9lbnRyb3B5IGludCBkdXBfbW1hcChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IG1tX3N0cnVjdCAqb2xkbW0pXFxuIFxcdFxcdFxcdFxcdGdvdG8gZmFpbF9ub21lbTtcXG4gXFx0XFx0XFx0Y2hhcmdlID0gbGVuO1xcbiBcXHRcXHR9XFxuK1xcdFxcdGlmIChtcG50LVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX1JFU0VSVkVEX1RIUCkge1xcbitcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGxlbjtcXG4rXFxuK1xcdFxcdFxcdGxlbiA9IHJlc2VydmVkX3RocF9ocGFnZV9ucihtcG50LVxcdTAwM2V2bV9zdGFydCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgIG1wbnQtXFx1MDAzZXZtX2VuZCk7XFxuK1xcdFxcdFxcdGlmIChyZXNlcnZlZF90aHBfY2hhcmdlKGxlbikpXFxuK1xcdFxcdFxcdFxcdGdvdG8gZmFpbF9ub21lbTtcXG4rXFx0XFx0XFx0cmVzZXJ2ZWRfY2hhcmdlID0gbGVuO1xcbitcXHRcXHR9XFxuIFxcbiBcXHRcXHR0bXAgPSB2bV9hcmVhX2R1cChtcG50KTtcXG4gXFx0XFx0aWYgKCF0bXApXFxuQEAgLTE5MTYsNiArMTkzMyw3IEBAIF9fbGF0ZW50X2VudHJvcHkgaW50IGR1cF9tbWFwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgbW1fc3RydWN0ICpvbGRtbSlcXG4gXFx0dm1fYXJlYV9mcmVlKHRtcCk7XFxuIGZhaWxfbm9tZW06XFxuIFxcdHJldHZhbCA9IC1FTk9NRU07XFxuK1xcdHJlc2VydmVkX3RocF91bmNoYXJnZShyZXNlcnZlZF9jaGFyZ2UpO1xcbiBcXHR2bV91bmFjY3RfbWVtb3J5KGNoYXJnZSk7XFxuIFxcdGdvdG8gbG9vcF9vdXQ7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvbW0vbXJlbWFwLmMgYi9tbS9tcmVtYXAuY1xcbmluZGV4IGU5YzhiMWQwNTgzMmJlLi5hZTM3ZTBiM2NlNzg4ZSAxMDA2NDRcXG4tLS0gYS9tbS9tcmVtYXAuY1xcbisrKyBiL21tL21yZW1hcC5jXFxuQEAgLTI0LDYgKzI0LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tdV9ub3RpZmllci5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdWFjY2Vzcy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdXNlcmZhdWx0ZmRfay5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaHVnZV9tbS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtcG9saWN5LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wZ2FsbG9jLmhcXHUwMDNlXFxuIFxcbkBAIC02OSw2ICs3MCw3IEBAIHN0cnVjdCB2bWFfcmVtYXBfc3RydWN0IHtcXG4gXFx0ZW51bSBtcmVtYXBfdHlwZSByZW1hcF90eXBlO1xcdC8qIGV4cGFuZCwgc2hyaW5rLCBldGMuICovXFxuIFxcdGJvb2wgbW1hcF9sb2NrZWQ7XFx0XFx0LyogSXMgbW0gY3VycmVudGx5IHdyaXRlLWxvY2tlZD8gKi9cXG4gXFx0dW5zaWduZWQgbG9uZyBjaGFyZ2VkO1xcdFxcdC8qIElmIFZNX0FDQ09VTlQsICMgcGFnZXMgdG8gYWNjb3VudC4gKi9cXG4rXFx0dW5zaWduZWQgbG9uZyByZXNlcnZlZF90aHBfY2hhcmdlZDsgLyogSWYgVk1fUkVTRVJWRURfVEhQLCAjIGhwYWdlcy4gKi9cXG4gXFx0Ym9vbCB2bWlfbmVlZHNfaW52YWxpZGF0ZTtcXHQvKiBJcyB0aGUgVk1BIGl0ZXJhdG9yIGludmFsaWRhdGVkPyAqL1xcbiB9O1xcbiBcXG5AQCAtOTYyLDYgKzk2NCw5IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHZybV9zZXRfbmV3X2FkZHIoc3RydWN0IHZtYV9yZW1hcF9zdHJ1Y3QgKnZybSlcXG4gXFx0XFx0XFx0XFx0bWFwX2ZsYWdzKTtcXG4gXFx0aWYgKElTX0VSUl9WQUxVRShyZXMpKVxcbiBcXHRcXHRyZXR1cm4gcmVzO1xcbitcXHRpZiAoKHZtYS1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiBWTV9SRVNFUlZFRF9USFApIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAhSVNfQUxJR05FRChyZXMsIEhQQUdFX1BNRF9TSVpFKSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbiBcXHR2cm0tXFx1MDAzZW5ld19hZGRyID0gcmVzO1xcbiBcXHRyZXR1cm4gMDtcXG5AQCAtOTc3LDI0ICs5ODIsNDQgQEAgc3RhdGljIGJvb2wgdnJtX2NhbGNfY2hhcmdlKHN0cnVjdCB2bWFfcmVtYXBfc3RydWN0ICp2cm0pXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBjaGFyZ2VkO1xcbiBcXG4tXFx0aWYgKCEodnJtLVxcdTAwM2V2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fQUNDT1VOVCkpXFxuLVxcdFxcdHJldHVybiB0cnVlO1xcbitcXHR2cm0tXFx1MDAzZWNoYXJnZWQgPSAwO1xcbitcXHR2cm0tXFx1MDAzZXJlc2VydmVkX3RocF9jaGFyZ2VkID0gMDtcXG4gXFxuLVxcdC8qXFxuLVxcdCAqIElmIHdlIGRvbid0IHVubWFwIHRoZSBvbGQgbWFwcGluZywgdGhlbiB3ZSBhY2NvdW50IHRoZSBlbnRpcmV0eSBvZlxcbi1cXHQgKiB0aGUgbGVuZ3RoIG9mIHRoZSBuZXcgb25lLiBPdGhlcndpc2UgaXQncyBqdXN0IHRoZSBkZWx0YSBpbiBzaXplLlxcbi1cXHQgKi9cXG4tXFx0aWYgKHZybS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBNUkVNQVBfRE9OVFVOTUFQKVxcbi1cXHRcXHRjaGFyZ2VkID0gdnJtLVxcdTAwM2VuZXdfbGVuIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuLVxcdGVsc2VcXG4tXFx0XFx0Y2hhcmdlZCA9IHZybS1cXHUwMDNlZGVsdGEgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4rXFx0aWYgKHZybS1cXHUwMDNldm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX0FDQ09VTlQpIHtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogSWYgd2UgZG9uJ3QgdW5tYXAgdGhlIG9sZCBtYXBwaW5nLCB0aGVuIHdlIGFjY291bnQgdGhlXFxuK1xcdFxcdCAqIGVudGlyZXR5IG9mIHRoZSBsZW5ndGggb2YgdGhlIG5ldyBvbmUuIE90aGVyd2lzZSBpdCdzIGp1c3RcXG4rXFx0XFx0ICogdGhlIGRlbHRhIGluIHNpemUuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAodnJtLVxcdTAwM2VmbGFncyBcXHUwMDI2IE1SRU1BUF9ET05UVU5NQVApXFxuK1xcdFxcdFxcdGNoYXJnZWQgPSB2cm0tXFx1MDAzZW5ld19sZW4gXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRjaGFyZ2VkID0gdnJtLVxcdTAwM2VkZWx0YSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbiBcXG4gXFxuLVxcdC8qIFRoaXMgYWNjb3VudHMgJ2NoYXJnZWQnIHBhZ2VzIG9mIG1lbW9yeS4gKi9cXG4tXFx0aWYgKHNlY3VyaXR5X3ZtX2Vub3VnaF9tZW1vcnlfbW0oY3VycmVudC1cXHUwMDNlbW0sIGNoYXJnZWQpKVxcbi1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdFxcdC8qIFRoaXMgYWNjb3VudHMgJ2NoYXJnZWQnIHBhZ2VzIG9mIG1lbW9yeS4gKi9cXG4rXFx0XFx0aWYgKHNlY3VyaXR5X3ZtX2Vub3VnaF9tZW1vcnlfbW0oY3VycmVudC1cXHUwMDNlbW0sIGNoYXJnZWQpKVxcbitcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbi1cXHR2cm0tXFx1MDAzZWNoYXJnZWQgPSBjaGFyZ2VkO1xcbitcXHRcXHR2cm0tXFx1MDAzZWNoYXJnZWQgPSBjaGFyZ2VkO1xcbitcXHR9XFxuK1xcbitcXHRpZiAodnJtLVxcdTAwM2V2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fUkVTRVJWRURfVEhQKSB7XFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgaHBhZ2VzO1xcbitcXG4rXFx0XFx0aWYgKHZybS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBNUkVNQVBfRE9OVFVOTUFQKVxcbitcXHRcXHRcXHRocGFnZXMgPSByZXNlcnZlZF90aHBfaHBhZ2VfbnIoMCwgdnJtLVxcdTAwM2VuZXdfbGVuKTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRocGFnZXMgPSByZXNlcnZlZF90aHBfaHBhZ2VfbnIoMCwgdnJtLVxcdTAwM2VkZWx0YSk7XFxuK1xcbitcXHRcXHRpZiAocmVzZXJ2ZWRfdGhwX2NoYXJnZShocGFnZXMpKSB7XFxuK1xcdFxcdFxcdHZtX3VuYWNjdF9tZW1vcnkodnJtLVxcdTAwM2VjaGFyZ2VkKTtcXG4rXFx0XFx0XFx0dnJtLVxcdTAwM2VjaGFyZ2VkID0gMDtcXG4rXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHR2cm0tXFx1MDAzZXJlc2VydmVkX3RocF9jaGFyZ2VkID0gaHBhZ2VzO1xcbitcXHR9XFxuIFxcdHJldHVybiB0cnVlO1xcbiB9XFxuIFxcbkBAIC0xMDA0LDExICsxMDI5LDEwIEBAIHN0YXRpYyBib29sIHZybV9jYWxjX2NoYXJnZShzdHJ1Y3Qgdm1hX3JlbWFwX3N0cnVjdCAqdnJtKVxcbiAgKi9cXG4gc3RhdGljIHZvaWQgdnJtX3VuY2hhcmdlKHN0cnVjdCB2bWFfcmVtYXBfc3RydWN0ICp2cm0pXFxuIHtcXG4tXFx0aWYgKCEodnJtLVxcdTAwM2V2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fQUNDT1VOVCkpXFxuLVxcdFxcdHJldHVybjtcXG4tXFxuIFxcdHZtX3VuYWNjdF9tZW1vcnkodnJtLVxcdTAwM2VjaGFyZ2VkKTtcXG4gXFx0dnJtLVxcdTAwM2VjaGFyZ2VkID0gMDtcXG4rXFx0cmVzZXJ2ZWRfdGhwX3VuY2hhcmdlKHZybS1cXHUwMDNlcmVzZXJ2ZWRfdGhwX2NoYXJnZWQpO1xcbitcXHR2cm0tXFx1MDAzZXJlc2VydmVkX3RocF9jaGFyZ2VkID0gMDtcXG4gfVxcbiBcXG4gLypcXG5AQCAtMTE1Nyw4ICsxMTgxLDggQEAgc3RhdGljIHZvaWQgdW5tYXBfc291cmNlX3ZtYShzdHJ1Y3Qgdm1hX3JlbWFwX3N0cnVjdCAqdnJtKVxcbiBcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHZybS1cXHUwMDNldm1hO1xcbiBcXHRWTUFfSVRFUkFUT1Iodm1pLCBtbSwgYWRkcik7XFxuIFxcdGludCBlcnI7XFxuLVxcdHVuc2lnbmVkIGxvbmcgdm1fc3RhcnQ7XFxuLVxcdHVuc2lnbmVkIGxvbmcgdm1fZW5kO1xcbitcXHR1bnNpZ25lZCBsb25nIHZtX3N0YXJ0ID0gMDtcXG4rXFx0dW5zaWduZWQgbG9uZyB2bV9lbmQgPSAwO1xcbiBcXHQvKlxcbiBcXHQgKiBJdCBtaWdodCBzZWVtIG9kZCB0aGF0IHdlIGNoZWNrIGZvciBNUkVNQVBfRE9OVFVOTUFQIGhlcmUsIGdpdmVuIHRoaXNcXG4gXFx0ICogZnVuY3Rpb24gaW1wbGllcyB0aGF0IHdlIHVubWFwIHRoZSBvcmlnaW5hbCBWTUEsIHdoaWNoIHNlZW1zXFxuQEAgLTExNzAsNiArMTE5NCw4IEBAIHN0YXRpYyB2b2lkIHVubWFwX3NvdXJjZV92bWEoc3RydWN0IHZtYV9yZW1hcF9zdHJ1Y3QgKnZybSlcXG4gXFx0ICovXFxuIFxcdGJvb2wgYWNjb3VudGFibGVfbW92ZSA9ICh2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fQUNDT1VOVCkgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ISh2cm0tXFx1MDAzZWZsYWdzIFxcdTAwMjYgTVJFTUFQX0RPTlRVTk1BUCk7XFxuK1xcdGJvb2wgcmVzZXJ2ZWRfdGhwX21vdmUgPSAodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX1JFU0VSVkVEX1RIUCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ISh2cm0tXFx1MDAzZWZsYWdzIFxcdTAwMjYgTVJFTUFQX0RPTlRVTk1BUCk7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBTbyB3ZSBwZXJmb3JtIGEgdHJpY2sgaGVyZSB0byBwcmV2ZW50IGluY29ycmVjdCBhY2NvdW50aW5nLiBBbnkgbWVyZ2VcXG5AQCAtMTE5Miw2ICsxMjE4LDEzIEBAIHN0YXRpYyB2b2lkIHVubWFwX3NvdXJjZV92bWEoc3RydWN0IHZtYV9yZW1hcF9zdHJ1Y3QgKnZybSlcXG4gXFx0XFx0dm1fc3RhcnQgPSB2bWEtXFx1MDAzZXZtX3N0YXJ0O1xcbiBcXHRcXHR2bV9lbmQgPSB2bWEtXFx1MDAzZXZtX2VuZDtcXG4gXFx0fVxcbitcXHRpZiAocmVzZXJ2ZWRfdGhwX21vdmUpIHtcXG4rXFx0XFx0dm1fZmxhZ3NfY2xlYXIodm1hLCBWTV9SRVNFUlZFRF9USFApO1xcbitcXHRcXHRpZiAoIWFjY291bnRhYmxlX21vdmUpIHtcXG4rXFx0XFx0XFx0dm1fc3RhcnQgPSB2bWEtXFx1MDAzZXZtX3N0YXJ0O1xcbitcXHRcXHRcXHR2bV9lbmQgPSB2bWEtXFx1MDAzZXZtX2VuZDtcXG4rXFx0XFx0fVxcbitcXHR9XFxuIFxcbiBcXHRlcnIgPSBkb192bWlfbXVubWFwKFxcdTAwMjZ2bWksIG1tLCBhZGRyLCBsZW4sIHZybS1cXHUwMDNldWZfdW5tYXAsIC8qIHVubG9jaz0gKi9mYWxzZSk7XFxuIFxcdHZybS1cXHUwMDNldm1hID0gTlVMTDsgLyogSW52YWxpZGF0ZWQuICovXFxuQEAgLTEyMjcsMTkgKzEyNjAsMjcgQEAgc3RhdGljIHZvaWQgdW5tYXBfc291cmNlX3ZtYShzdHJ1Y3Qgdm1hX3JlbWFwX3N0cnVjdCAqdnJtKVxcbiBcXHQgKlxcbiBcXHQgKiBkb192bWlfbXVubWFwKCkgd2lsbCBoYXZlIHJlc3RvcmVkIHRoZSBWTUkgYmFjayB0byBhZGRyLlxcbiBcXHQgKi9cXG4tXFx0aWYgKGFjY291bnRhYmxlX21vdmUpIHtcXG4rXFx0aWYgKGFjY291bnRhYmxlX21vdmUgfHwgcmVzZXJ2ZWRfdGhwX21vdmUpIHtcXG4gXFx0XFx0dW5zaWduZWQgbG9uZyBlbmQgPSBhZGRyICsgbGVuO1xcbi1cXG4tXFx0XFx0aWYgKHZtX3N0YXJ0IFxcdTAwM2MgYWRkcikge1xcbi1cXHRcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnByZXYgPSB2bWFfcHJldihcXHUwMDI2dm1pKTtcXG4tXFxuLVxcdFxcdFxcdHZtX2ZsYWdzX3NldChwcmV2LCBWTV9BQ0NPVU5UKTsgLyogQWNxdWlyZXMgVk1BIGxvY2suICovXFxuK1xcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqcHJldiA9IE5VTEw7XFxuK1xcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqbmV4dCA9IE5VTEw7XFxuK1xcbitcXHRcXHRpZiAodm1fc3RhcnQgXFx1MDAzYyBhZGRyKVxcbitcXHRcXHRcXHRwcmV2ID0gdm1hX3ByZXYoXFx1MDAyNnZtaSk7XFxuK1xcdFxcdGlmICh2bV9lbmQgXFx1MDAzZSBlbmQpXFxuK1xcdFxcdFxcdG5leHQgPSB2bWFfbmV4dChcXHUwMDI2dm1pKTtcXG4rXFxuK1xcdFxcdGlmIChhY2NvdW50YWJsZV9tb3ZlKSB7XFxuK1xcdFxcdFxcdGlmIChwcmV2KVxcbitcXHRcXHRcXHRcXHR2bV9mbGFnc19zZXQocHJldiwgVk1fQUNDT1VOVCk7IC8qIEFjcXVpcmVzIFZNQSBsb2NrLiAqL1xcbitcXHRcXHRcXHRpZiAobmV4dClcXG4rXFx0XFx0XFx0XFx0dm1fZmxhZ3Nfc2V0KG5leHQsIFZNX0FDQ09VTlQpOyAvKiBBY3F1aXJlcyBWTUEgbG9jay4gKi9cXG4gXFx0XFx0fVxcbi1cXG4tXFx0XFx0aWYgKHZtX2VuZCBcXHUwMDNlIGVuZCkge1xcbi1cXHRcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKm5leHQgPSB2bWFfbmV4dChcXHUwMDI2dm1pKTtcXG4tXFxuLVxcdFxcdFxcdHZtX2ZsYWdzX3NldChuZXh0LCBWTV9BQ0NPVU5UKTsgLyogQWNxdWlyZXMgVk1BIGxvY2suICovXFxuK1xcdFxcdGlmIChyZXNlcnZlZF90aHBfbW92ZSkge1xcbitcXHRcXHRcXHRpZiAocHJldilcXG4rXFx0XFx0XFx0XFx0dm1fZmxhZ3Nfc2V0KHByZXYsIFZNX1JFU0VSVkVEX1RIUCk7XFxuK1xcdFxcdFxcdGlmIChuZXh0KVxcbitcXHRcXHRcXHRcXHR2bV9mbGFnc19zZXQobmV4dCwgVk1fUkVTRVJWRURfVEhQKTtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIH1cXG5AQCAtMTMwOSw3ICsxMzUwLDYgQEAgc3RhdGljIGludCBjb3B5X3ZtYV9hbmRfZGF0YShzdHJ1Y3Qgdm1hX3JlbWFwX3N0cnVjdCAqdnJtLFxcbiBcXHQqbmV3X3ZtYV9wdHIgPSBuZXdfdm1hO1xcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuLVxcbiAvKlxcbiAgKiBQZXJmb3JtIGZpbmFsIHRhc2tzIGZvciBNQURWX0RPTlRVTk1BUCBvcGVyYXRpb24sIGNsZWFyaW5nIG1sb2NrKCkgZmxhZyBvblxcbiAgKiByZW1haW5pbmcgVk1BIGJ5IGNvbnZlbnRpb24gKGl0IGNhbm5vdCBiZSBtbG9jaygpJ2QgYW55IGxvbmdlciwgYXMgcGFnZXMgaW5cXG5AQCAtMTU3Niw2ICsxNjE2LDIzIEBAIHN0YXRpYyBib29sIGFsaWduX2h1Z2V0bGIoc3RydWN0IHZtYV9yZW1hcF9zdHJ1Y3QgKnZybSlcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuK3N0YXRpYyBib29sIGNoZWNrX3Jlc2VydmVkX3RocF9hbGlnbm1lbnQoc3RydWN0IHZtYV9yZW1hcF9zdHJ1Y3QgKnZybSlcXG4re1xcbitcXHRpZiAoISh2cm0tXFx1MDAzZXZtYS1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiBWTV9SRVNFUlZFRF9USFApKVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFxuK1xcdGlmICghSVNfQUxJR05FRCh2cm0tXFx1MDAzZWFkZHIsIEhQQUdFX1BNRF9TSVpFKSB8fFxcbitcXHQgICAgIUlTX0FMSUdORUQodnJtLVxcdTAwM2VvbGRfbGVuLCBIUEFHRV9QTURfU0laRSkgfHxcXG4rXFx0ICAgICFJU19BTElHTkVEKHZybS1cXHUwMDNlbmV3X2xlbiwgSFBBR0VfUE1EX1NJWkUpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRpZiAoKHZybS1cXHUwMDNlcmVtYXBfdHlwZSA9PSBNUkVNQVBfRVhQQU5EIHx8IHZybV9pbXBsaWVzX25ld19hZGRyKHZybSkpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAhSVNfQUxJR05FRCh2cm0tXFx1MDAzZW5ld19hZGRyLCBIUEFHRV9QTURfU0laRSkpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuK1xcbiAvKlxcbiAgKiBXZSBhcmUgbXJlbWFwKCknaW5nIHdpdGhvdXQgc3BlY2lmeWluZyBhIGZpeGVkIGFkZHJlc3MgdG8gbW92ZSB0bywgYnV0IGFyZVxcbiAgKiByZXF1ZXN0aW5nIHRoYXQgdGhlIFZNQSdzIHNpemUgYmUgaW5jcmVhc2VkLlxcbkBAIC0xNzQ1LDYgKzE4MDIsOCBAQCBzdGF0aWMgaW50IGNoZWNrX3ByZXBfdm1hKHN0cnVjdCB2bWFfcmVtYXBfc3RydWN0ICp2cm0pXFxuIFxcdC8qIEZvciBjb252ZW5pZW5jZSwgd2Ugc2V0IG5ld19hZGRyIGV2ZW4gaWYgVk1BIHdvbid0IG1vdmUuICovXFxuIFxcdGlmICghdnJtX2ltcGxpZXNfbmV3X2FkZHIodnJtKSlcXG4gXFx0XFx0dnJtLVxcdTAwM2VuZXdfYWRkciA9IGFkZHI7XFxuK1xcdGlmICghY2hlY2tfcmVzZXJ2ZWRfdGhwX2FsaWdubWVudCh2cm0pKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuIFxcdC8qIEJlbG93IG9ubHkgbWVhbmluZ2Z1bCBpZiB3ZSBleHBhbmQgb3IgbW92ZSBhIFZNQS4gKi9cXG4gXFx0aWYgKCF2cm1fd2lsbF9tYXBfbmV3KHZybSkpXFxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuY1xcbmluZGV4IGVlOTAyYTQ2OGMyZjViLi42NjBlNTAxYmY2NzZiNiAxMDA2NDRcXG4tLS0gYS9tbS9wYWdlX2FsbG9jLmNcXG4rKysgYi9tbS9wYWdlX2FsbG9jLmNcXG5AQCAtMjYzLDYgKzI2Myw3IEBAIGNvbnN0IGNoYXIgKiBjb25zdCBtaWdyYXRldHlwZV9uYW1lc1tNSUdSQVRFX1RZUEVTXSA9IHtcXG4gI2lmZGVmIENPTkZJR19DTUFcXG4gXFx0XFxcIkNNQVxcXCIsXFxuICNlbmRpZlxcbitcXHRcXFwiUmVzZXJ2ZVRIUFxcXCIsXFxuICNpZmRlZiBDT05GSUdfTUVNT1JZX0lTT0xBVElPTlxcbiBcXHRcXFwiSXNvbGF0ZVxcXCIsXFxuICNlbmRpZlxcbkBAIC03ODQsNiArNzg1LDkgQEAgc3RhdGljIGlubGluZSB2b2lkIGFjY291bnRfZnJlZXBhZ2VzKHN0cnVjdCB6b25lICp6b25lLCBpbnQgbnJfcGFnZXMsXFxuIFxcdGVsc2UgaWYgKG1pZ3JhdGV0eXBlID09IE1JR1JBVEVfSElHSEFUT01JQylcXG4gXFx0XFx0V1JJVEVfT05DRSh6b25lLVxcdTAwM2Vucl9mcmVlX2hpZ2hhdG9taWMsXFxuIFxcdFxcdFxcdCAgIHpvbmUtXFx1MDAzZW5yX2ZyZWVfaGlnaGF0b21pYyArIG5yX3BhZ2VzKTtcXG4rXFx0ZWxzZSBpZiAobWlncmF0ZXR5cGUgPT0gTUlHUkFURV9SRVNFUlZFRF9USFApXFxuK1xcdFxcdFdSSVRFX09OQ0Uoem9uZS1cXHUwMDNlbnJfZnJlZV9yZXNlcnZlZF90aHAsXFxuK1xcdFxcdFxcdCAgIHpvbmUtXFx1MDAzZW5yX2ZyZWVfcmVzZXJ2ZWRfdGhwICsgbnJfcGFnZXMpO1xcbiB9XFxuIFxcbiAvKiBVc2VkIGZvciBwYWdlcyBub3Qgb24gYW5vdGhlciBsaXN0ICovXFxuQEAgLTI0NTYsNiArMjQ2MCw5IEBAIF9fcm1xdWV1ZShzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgaW50IG9yZGVyLCBpbnQgbWlncmF0ZXR5cGUsXFxuIHtcXG4gXFx0c3RydWN0IHBhZ2UgKnBhZ2U7XFxuIFxcbitcXHRpZiAoYWxsb2NfZmxhZ3MgXFx1MDAyNiBBTExPQ19SRVNFUlZFRF9USFApXFxuK1xcdFxcdHJldHVybiBfX3JtcXVldWVfc21hbGxlc3Qoem9uZSwgb3JkZXIsIE1JR1JBVEVfUkVTRVJWRURfVEhQKTtcXG4rXFxuIFxcdGlmIChJU19FTkFCTEVEKENPTkZJR19DTUEpKSB7XFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIEJhbGFuY2UgbW92YWJsZSBhbGxvY2F0aW9ucyBiZXR3ZWVuIHJlZ3VsYXIgYW5kIENNQSBhcmVhcyBieVxcbkBAIC0yOTYwLDcgKzI5NjcsOCBAQCBzdGF0aWMgdm9pZCBfX2ZyZWVfZnJvemVuX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuIFxcdHpvbmUgPSBwYWdlX3pvbmUocGFnZSk7XFxuIFxcdG1pZ3JhdGV0eXBlID0gZ2V0X3BmbmJsb2NrX21pZ3JhdGV0eXBlKHBhZ2UsIHBmbik7XFxuIFxcdGlmICh1bmxpa2VseShtaWdyYXRldHlwZSBcXHUwMDNlPSBNSUdSQVRFX1BDUFRZUEVTKSkge1xcbi1cXHRcXHRpZiAodW5saWtlbHkoaXNfbWlncmF0ZV9pc29sYXRlKG1pZ3JhdGV0eXBlKSkpIHtcXG4rXFx0XFx0aWYgKHVubGlrZWx5KGlzX21pZ3JhdGVfcmVzZXJ2ZWRfdGhwKG1pZ3JhdGV0eXBlKSB8fFxcbitcXHRcXHRcXHQgICAgIGlzX21pZ3JhdGVfaXNvbGF0ZShtaWdyYXRldHlwZSkpKSB7XFxuIFxcdFxcdFxcdGZyZWVfb25lX3BhZ2Uoem9uZSwgcGFnZSwgcGZuLCBvcmRlciwgZnBpX2ZsYWdzKTtcXG4gXFx0XFx0XFx0cmV0dXJuO1xcbiBcXHRcXHR9XFxuQEAgLTMwMzgsNiArMzA0Niw3IEBAIHZvaWQgZnJlZV91bnJlZl9mb2xpb3Moc3RydWN0IGZvbGlvX2JhdGNoICpmb2xpb3MpXFxuIFxcbiBcXHRcXHQvKiBEaWZmZXJlbnQgem9uZSByZXF1aXJlcyBhIGRpZmZlcmVudCBwY3AgbG9jayAqL1xcbiBcXHRcXHRpZiAoem9uZSAhPSBsb2NrZWRfem9uZSB8fFxcbitcXHRcXHQgICAgaXNfbWlncmF0ZV9yZXNlcnZlZF90aHAobWlncmF0ZXR5cGUpIHx8XFxuIFxcdFxcdCAgICBpc19taWdyYXRlX2lzb2xhdGUobWlncmF0ZXR5cGUpKSB7XFxuIFxcdFxcdFxcdGlmIChwY3ApIHtcXG4gXFx0XFx0XFx0XFx0cGNwX3NwaW5fdW5sb2NrKHBjcCk7XFxuQEAgLTMwNDUsNiArMzA1NCwxMiBAQCB2b2lkIGZyZWVfdW5yZWZfZm9saW9zKHN0cnVjdCBmb2xpb19iYXRjaCAqZm9saW9zKVxcbiBcXHRcXHRcXHRcXHRwY3AgPSBOVUxMO1xcbiBcXHRcXHRcXHR9XFxuIFxcbitcXHRcXHRcXHRpZiAoaXNfbWlncmF0ZV9yZXNlcnZlZF90aHAobWlncmF0ZXR5cGUpKSB7XFxuK1xcdFxcdFxcdFxcdGZyZWVfb25lX3BhZ2Uoem9uZSwgXFx1MDAyNmZvbGlvLVxcdTAwM2VwYWdlLCBwZm4sXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIG9yZGVyLCBGUElfTk9ORSk7XFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRcXHR9XFxuK1xcbiBcXHRcXHRcXHQvKlxcbiBcXHRcXHRcXHQgKiBGcmVlIGlzb2xhdGVkIHBhZ2VzIGRpcmVjdGx5IHRvIHRoZVxcbiBcXHRcXHRcXHQgKiBhbGxvY2F0b3IsIHNlZSBjb21tZW50IGluIGZyZWVfZnJvemVuX3BhZ2VzLlxcbkBAIC0zMjM1LDcgKzMyNTAsOCBAQCBzdHJ1Y3QgcGFnZSAqcm1xdWV1ZV9idWRkeShzdHJ1Y3Qgem9uZSAqcHJlZmVycmVkX3pvbmUsIHN0cnVjdCB6b25lICp6b25lLFxcbiBcXHRcXHRcXHQgKiByZXNlcnZlcyBhcyBmYWlsaW5nIG5vdyBpcyB3b3JzZSB0aGFuIGZhaWxpbmcgYVxcbiBcXHRcXHRcXHQgKiBoaWdoLW9yZGVyIGF0b21pYyBhbGxvY2F0aW9uIGluIHRoZSBmdXR1cmUuXFxuIFxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRpZiAoIXBhZ2UgXFx1MDAyNlxcdTAwMjYgKGFsbG9jX2ZsYWdzIFxcdTAwMjYgKEFMTE9DX09PTXxBTExPQ19OT05fQkxPQ0spKSlcXG4rXFx0XFx0XFx0aWYgKCFwYWdlIFxcdTAwMjZcXHUwMDI2ICEoYWxsb2NfZmxhZ3MgXFx1MDAyNiBBTExPQ19SRVNFUlZFRF9USFApIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCAgICAoYWxsb2NfZmxhZ3MgXFx1MDAyNiAoQUxMT0NfT09NfEFMTE9DX05PTl9CTE9DSykpKVxcbiBcXHRcXHRcXHRcXHRwYWdlID0gX19ybXF1ZXVlX3NtYWxsZXN0KHpvbmUsIG9yZGVyLCBNSUdSQVRFX0hJR0hBVE9NSUMpO1xcbiBcXG4gXFx0XFx0XFx0aWYgKCFwYWdlKSB7XFxuQEAgLTM0MDUsNyArMzQyMSw4IEBAIHN0cnVjdCBwYWdlICpybXF1ZXVlKHN0cnVjdCB6b25lICpwcmVmZXJyZWRfem9uZSxcXG4ge1xcbiBcXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG4gXFxuLVxcdGlmIChsaWtlbHkocGNwX2FsbG93ZWRfb3JkZXIob3JkZXIpKSkge1xcbitcXHRpZiAobGlrZWx5KHBjcF9hbGxvd2VkX29yZGVyKG9yZGVyKSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICEoYWxsb2NfZmxhZ3MgXFx1MDAyNiBBTExPQ19SRVNFUlZFRF9USFApKSB7XFxuIFxcdFxcdHBhZ2UgPSBybXF1ZXVlX3BjcGxpc3QocHJlZmVycmVkX3pvbmUsIHpvbmUsIG9yZGVyLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgbWlncmF0ZXR5cGUsIGFsbG9jX2ZsYWdzKTtcXG4gXFx0XFx0aWYgKGxpa2VseShwYWdlKSlcXG5AQCAtMzU1Niw2ICszNTczLDM1IEBAIHN0YXRpYyBib29sIHVucmVzZXJ2ZV9oaWdoYXRvbWljX3BhZ2VibG9jayhjb25zdCBzdHJ1Y3QgYWxsb2NfY29udGV4dCAqYWMsXFxuIFxcdHJldHVybiBmYWxzZTtcXG4gfVxcbiBcXG4rdW5zaWduZWQgbG9uZyByZXNlcnZlZF90aHBfcGFnZWJsb2Nrcyh1bnNpZ25lZCBsb25nIG5yX2hwYWdlcylcXG4re1xcbitcXHR1bnNpZ25lZCBpbnQgb3JkZXIgPSBtYXhfdCh1bnNpZ25lZCBpbnQsIEhQQUdFX1BNRF9PUkRFUixcXG4rXFx0XFx0XFx0XFx0ICAgcGFnZWJsb2NrX29yZGVyKTtcXG4rXFx0dW5zaWduZWQgbG9uZyBocGFnZXNfcGVyX2Jsb2NrID0gMVVMIFxcdTAwM2NcXHUwMDNjIChvcmRlciAtIEhQQUdFX1BNRF9PUkRFUik7XFxuK1xcdHVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWQgPSAwO1xcbitcXHRnZnBfdCBnZnAgPSAoR0ZQX0hJR0hVU0VSIHwgX19HRlBfQ09NUCB8IF9fR0ZQX05PTUVNQUxMT0MgfFxcbitcXHRcXHQgICAgIF9fR0ZQX05PV0FSTiB8IF9fR0ZQX05PUkVUUlkpO1xcbitcXG4rXFx0d2hpbGUgKHJlc2VydmVkIFxcdTAwM2MgbnJfaHBhZ2VzKSB7XFxuK1xcdFxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbitcXHRcXHRzdHJ1Y3Qgem9uZSAqem9uZTtcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4rXFxuK1xcdFxcdHBhZ2UgPSBhbGxvY19wYWdlcyhnZnAsIG9yZGVyKTtcXG4rXFx0XFx0aWYgKCFwYWdlKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFxuK1xcdFxcdHpvbmUgPSBwYWdlX3pvbmUocGFnZSk7XFxuK1xcdFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZ6b25lLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuK1xcdFxcdGNoYW5nZV9wYWdlYmxvY2tfcmFuZ2UocGFnZSwgb3JkZXIsIE1JR1JBVEVfUkVTRVJWRURfVEhQKTtcXG4rXFx0XFx0em9uZS1cXHUwMDNlbnJfcmVzZXJ2ZWRfdGhwICs9IDFVTCBcXHUwMDNjXFx1MDAzYyBvcmRlcjtcXG4rXFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2em9uZS1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbitcXHRcXHRfX2ZyZWVfcGFnZXMocGFnZSwgb3JkZXIpO1xcbitcXHRcXHRyZXNlcnZlZCArPSBocGFnZXNfcGVyX2Jsb2NrO1xcbitcXHR9XFxuK1xcdHJldHVybiByZXNlcnZlZDtcXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSBsb25nIF9fem9uZV93YXRlcm1hcmtfdW51c2FibGVfZnJlZShzdHJ1Y3Qgem9uZSAqeixcXG4gXFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IG9yZGVyLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXFxuIHtcXG5AQCAtMzU2OCw2ICszNjE0LDkgQEAgc3RhdGljIGlubGluZSBsb25nIF9fem9uZV93YXRlcm1hcmtfdW51c2FibGVfZnJlZShzdHJ1Y3Qgem9uZSAqeixcXG4gXFx0aWYgKGxpa2VseSghKGFsbG9jX2ZsYWdzIFxcdTAwMjYgQUxMT0NfUkVTRVJWRVMpKSlcXG4gXFx0XFx0dW51c2FibGVfZnJlZSArPSBSRUFEX09OQ0Uoei1cXHUwMDNlbnJfZnJlZV9oaWdoYXRvbWljKTtcXG4gXFxuK1xcdGlmICghKGFsbG9jX2ZsYWdzIFxcdTAwMjYgQUxMT0NfUkVTRVJWRURfVEhQKSlcXG4rXFx0XFx0dW51c2FibGVfZnJlZSArPSBSRUFEX09OQ0Uoei1cXHUwMDNlbnJfZnJlZV9yZXNlcnZlZF90aHApO1xcbitcXG4gI2lmZGVmIENPTkZJR19DTUFcXG4gXFx0LyogSWYgYWxsb2NhdGlvbiBjYW4ndCB1c2UgQ01BIGFyZWFzIGRvbid0IHVzZSBmcmVlIENNQSBwYWdlcyAqL1xcbiBcXHRpZiAoIShhbGxvY19mbGFncyBcXHUwMDI2IEFMTE9DX0NNQSkpXFxuQEAgLTM2NDIsNiArMzY5MSwxMiBAQCBib29sIF9fem9uZV93YXRlcm1hcmtfb2soc3RydWN0IHpvbmUgKnosIHVuc2lnbmVkIGludCBvcmRlciwgdW5zaWduZWQgbG9uZyBtYXJrLFxcbiBcXHRcXHRpZiAoIWFyZWEtXFx1MDAzZW5yX2ZyZWUpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4rXFx0XFx0aWYgKGFsbG9jX2ZsYWdzIFxcdTAwMjYgQUxMT0NfUkVTRVJWRURfVEhQKSB7XFxuK1xcdFxcdFxcdGlmICghZnJlZV9hcmVhX2VtcHR5KGFyZWEsIE1JR1JBVEVfUkVTRVJWRURfVEhQKSlcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR9XFxuK1xcbiBcXHRcXHRmb3IgKG10ID0gMDsgbXQgXFx1MDAzYyBNSUdSQVRFX1BDUFRZUEVTOyBtdCsrKSB7XFxuIFxcdFxcdFxcdGlmICghZnJlZV9hcmVhX2VtcHR5KGFyZWEsIG10KSlcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuQEAgLTM4NzYsNiArMzkzMSw5IEBAIGdldF9wYWdlX2Zyb21fZnJlZWxpc3QoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlciwgaW50IGFsbG9jX2ZsYWdzLFxcbiBcXG4gXFx0XFx0Y29uZF9hY2NlcHRfbWVtb3J5KHpvbmUsIG9yZGVyLCBhbGxvY19mbGFncyk7XFxuIFxcbitcXHRcXHRpZiAoYWxsb2NfZmxhZ3MgXFx1MDAyNiBBTExPQ19SRVNFUlZFRF9USFApXFxuK1xcdFxcdFxcdGdvdG8gdHJ5X3RoaXNfem9uZTtcXG4rXFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIERldGVjdCB3aGV0aGVyIHRoZSBudW1iZXIgb2YgZnJlZSBwYWdlcyBpcyBiZWxvdyBoaWdoXFxuIFxcdFxcdCAqIHdhdGVybWFyay4gIElmIHNvLCB3ZSB3aWxsIGRlY3JlYXNlIHBjcC1cXHUwMDNlaGlnaCBhbmQgZnJlZVxcbkBAIC01MDMzLDYgKzUwOTEsMTUgQEAgc3RhdGljIGlubGluZSBib29sIHByZXBhcmVfYWxsb2NfcGFnZXMoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcXG4gXFx0YWMtXFx1MDAzZW5vZGVtYXNrID0gbm9kZW1hc2s7XFxuIFxcdGFjLVxcdTAwM2VtaWdyYXRldHlwZSA9IGdmcF9taWdyYXRldHlwZShnZnBfbWFzayk7XFxuIFxcbitcXHRpZiAoZ2ZwX21hc2sgXFx1MDAyNiBfX0dGUF9SRVNFUlZFRF9USFApIHtcXG4rXFx0XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgfHxcXG4rXFx0XFx0ICAgIFdBUk5fT05fT05DRV9HRlAob3JkZXIgIT0gSFBBR0VfUE1EX09SREVSLCBnZnBfbWFzaykpXFxuK1xcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdFxcdGFjLVxcdTAwM2VtaWdyYXRldHlwZSA9IE1JR1JBVEVfUkVTRVJWRURfVEhQO1xcbitcXHRcXHQqYWxsb2NfZmxhZ3MgfD0gQUxMT0NfUkVTRVJWRURfVEhQO1xcbitcXHR9XFxuK1xcbiBcXHRpZiAoY3B1c2V0c19lbmFibGVkKCkpIHtcXG4gXFx0XFx0KmFsbG9jX2dmcCB8PSBfX0dGUF9IQVJEV0FMTDtcXG4gXFx0XFx0LypcXG5kaWZmIC0tZ2l0IGEvbW0vcmVzZXJ2ZWRfdGhwLmMgYi9tbS9yZXNlcnZlZF90aHAuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjkzMWM1MzljMTVhNzA5XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL21tL3Jlc2VydmVkX3RocC5jXFxuQEAgLTAsMCArMSwxMzMgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwiaW50ZXJuYWwuaFxcXCJcXG4rXFxuK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0socmVzZXJ2ZWRfdGhwX2xvY2spO1xcbitcXG4rc3RhdGljIHVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWRfdGhwX2NtZGxpbmVfc2l6ZSBfX2luaXRkYXRhID0gSFBBR0VfUE1EX1NJWkU7XFxuK3N0YXRpYyBib29sIHJlc2VydmVkX3RocF9jbWRsaW5lX3NpemVfdmFsaWQgX19pbml0ZGF0YSA9IHRydWU7XFxuK3N0YXRpYyB1bnNpZ25lZCBsb25nIHJlc2VydmVkX3RocF9yZXF1ZXN0ZWQgX19pbml0ZGF0YTtcXG4rc3RhdGljIHVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWRfdGhwX3RvdGFsO1xcbitzdGF0aWMgdW5zaWduZWQgbG9uZyByZXNlcnZlZF90aHBfdXNlZDtcXG4rXFxuK3N0YXRpYyBpbnQgX19pbml0IHNldHVwX3Jlc2VydmVkX3RocF9zaXplKGNoYXIgKnN0cilcXG4re1xcbitcXHR1bnNpZ25lZCBsb25nIHNpemU7XFxuK1xcdHNpemUgPSBtZW1wYXJzZShzdHIsIE5VTEwpO1xcbitcXHRpZiAoc2l6ZSAhPSBIUEFHRV9QTURfU0laRSkge1xcbitcXHRcXHRwcl93YXJuKFxcXCJ1bnN1cHBvcnRlZCB0aHBfcmVzZXJ2ZWRfc2l6ZT0lcywgb25seSAlbHUgaXMgc3VwcG9ydGVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRzdHIsIEhQQUdFX1BNRF9TSVpFKTtcXG4rXFx0XFx0cmVzZXJ2ZWRfdGhwX2NtZGxpbmVfc2l6ZV92YWxpZCA9IGZhbHNlO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXHRyZXNlcnZlZF90aHBfY21kbGluZV9zaXplID0gc2l6ZTtcXG4rXFx0cmVzZXJ2ZWRfdGhwX2NtZGxpbmVfc2l6ZV92YWxpZCA9IHRydWU7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK2Vhcmx5X3BhcmFtKFxcXCJ0aHBfcmVzZXJ2ZWRfc2l6ZVxcXCIsIHNldHVwX3Jlc2VydmVkX3RocF9zaXplKTtcXG4rc3RhdGljIGludCBfX2luaXQgc2V0dXBfcmVzZXJ2ZWRfdGhwX25yKGNoYXIgKnN0cilcXG4re1xcbitcXHRpbnQgY291bnQ7XFxuK1xcdGlmIChzc2NhbmYoc3RyLCBcXFwiJWx1JW5cXFwiLCBcXHUwMDI2cmVzZXJ2ZWRfdGhwX3JlcXVlc3RlZCwgXFx1MDAyNmNvdW50KSAhPSAxIHx8XFxuK1xcdCAgICBzdHJbY291bnRdKSB7XFxuK1xcdFxcdHByX3dhcm4oXFxcImludmFsaWQgdGhwX3Jlc2VydmVkX25yPSVzXFxcXG5cXFwiLCBzdHIpO1xcbitcXHRcXHRyZXNlcnZlZF90aHBfcmVxdWVzdGVkID0gMDtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rZWFybHlfcGFyYW0oXFxcInRocF9yZXNlcnZlZF9uclxcXCIsIHNldHVwX3Jlc2VydmVkX3RocF9ucik7XFxuK1xcbit1bnNpZ25lZCBsb25nIHJlc2VydmVkX3RocF9ocGFnZV9ucih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcXG4re1xcbitcXHRyZXR1cm4gKGVuZCAtIHN0YXJ0KSBcXHUwMDNlXFx1MDAzZSBIUEFHRV9QTURfU0hJRlQ7XFxuK31cXG4rXFxuK2ludCByZXNlcnZlZF90aHBfY2hhcmdlKHVuc2lnbmVkIGxvbmcgbnJfaHBhZ2VzKVxcbit7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXG4rXFx0aWYgKCFucl9ocGFnZXMpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0c3Bpbl9sb2NrKFxcdTAwMjZyZXNlcnZlZF90aHBfbG9jayk7XFxuK1xcdGlmIChucl9ocGFnZXMgXFx1MDAzZSByZXNlcnZlZF90aHBfdG90YWwgLSByZXNlcnZlZF90aHBfdXNlZClcXG4rXFx0XFx0cmV0ID0gLUVOT01FTTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRyZXNlcnZlZF90aHBfdXNlZCArPSBucl9ocGFnZXM7XFxuK1xcdHNwaW5fdW5sb2NrKFxcdTAwMjZyZXNlcnZlZF90aHBfbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbit2b2lkIHJlc2VydmVkX3RocF91bmNoYXJnZSh1bnNpZ25lZCBsb25nIG5yX2hwYWdlcylcXG4re1xcbitcXHRpZiAoIW5yX2hwYWdlcylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0c3Bpbl9sb2NrKFxcdTAwMjZyZXNlcnZlZF90aHBfbG9jayk7XFxuK1xcdGlmIChXQVJOX09OX09OQ0UobnJfaHBhZ2VzIFxcdTAwM2UgcmVzZXJ2ZWRfdGhwX3VzZWQpKVxcbitcXHRcXHRyZXNlcnZlZF90aHBfdXNlZCA9IDA7XFxuK1xcdGVsc2VcXG4rXFx0XFx0cmVzZXJ2ZWRfdGhwX3VzZWQgLT0gbnJfaHBhZ2VzO1xcbitcXHRzcGluX3VubG9jayhcXHUwMDI2cmVzZXJ2ZWRfdGhwX2xvY2spO1xcbit9XFxuK1xcbitzdGF0aWMgc3NpemVfdCB0b3RhbF9ocGFnZXNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4rXFx0XFx0XFx0XFx0IHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxcbit7XFxuK1xcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXFxcIiVsdVxcXFxuXFxcIiwgUkVBRF9PTkNFKHJlc2VydmVkX3RocF90b3RhbCkpO1xcbit9XFxuK3N0YXRpYyBzc2l6ZV90IGZyZWVfaHBhZ2VzX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuK1xcdFxcdFxcdFxcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxcbit7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZnJlZV9ocGFnZXM7XFxuK1xcbitcXHRzcGluX2xvY2soXFx1MDAyNnJlc2VydmVkX3RocF9sb2NrKTtcXG4rXFx0ZnJlZV9ocGFnZXMgPSByZXNlcnZlZF90aHBfdG90YWwgLSByZXNlcnZlZF90aHBfdXNlZDtcXG4rXFx0c3Bpbl91bmxvY2soXFx1MDAyNnJlc2VydmVkX3RocF9sb2NrKTtcXG4rXFxuK1xcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXFxcIiVsdVxcXFxuXFxcIiwgZnJlZV9ocGFnZXMpO1xcbit9XFxuK3N0YXRpYyBzc2l6ZV90IHVzZWRfaHBhZ2VzX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuK1xcdFxcdFxcdFxcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxcbit7XFxuK1xcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXFxcIiVsdVxcXFxuXFxcIiwgUkVBRF9PTkNFKHJlc2VydmVkX3RocF91c2VkKSk7XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgdG90YWxfaHBhZ2VzX2F0dHIgPSBfX0FUVFJfUk8odG90YWxfaHBhZ2VzKTtcXG4rc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBmcmVlX2hwYWdlc19hdHRyID0gX19BVFRSX1JPKGZyZWVfaHBhZ2VzKTtcXG4rc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSB1c2VkX2hwYWdlc19hdHRyID0gX19BVFRSX1JPKHVzZWRfaHBhZ2VzKTtcXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpyZXNlcnZlZF90aHBfYXR0cnNbXSA9IHtcXG4rXFx0XFx1MDAyNnRvdGFsX2hwYWdlc19hdHRyLmF0dHIsXFxuK1xcdFxcdTAwMjZmcmVlX2hwYWdlc19hdHRyLmF0dHIsXFxuK1xcdFxcdTAwMjZ1c2VkX2hwYWdlc19hdHRyLmF0dHIsXFxuK1xcdE5VTEwsXFxuK307XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCByZXNlcnZlZF90aHBfYXR0cl9ncm91cCA9IHtcXG4rXFx0LmF0dHJzID0gcmVzZXJ2ZWRfdGhwX2F0dHJzLFxcbit9O1xcbitcXG4rc3RhdGljIGludCBfX2luaXQgcmVzZXJ2ZWRfdGhwX2luaXQodm9pZClcXG4re1xcbitcXHRzdHJ1Y3Qga29iamVjdCAqa29iajtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmIChyZXNlcnZlZF90aHBfcmVxdWVzdGVkIFxcdTAwMjZcXHUwMDI2IHJlc2VydmVkX3RocF9jbWRsaW5lX3NpemVfdmFsaWQpIHtcXG4rXFx0XFx0cmVzZXJ2ZWRfdGhwX3RvdGFsID0gcmVzZXJ2ZWRfdGhwX3BhZ2VibG9ja3MocmVzZXJ2ZWRfdGhwX3JlcXVlc3RlZCk7XFxuK1xcdFxcdHByX2luZm8oXFxcInJlc2VydmVkICVsdS8lbHUgUE1EIFRIUCBwYWdlYmxvY2tzICglbHUgYnl0ZXMgZWFjaClcXFxcblxcXCIsXFxuK1xcdFxcdFxcdHJlc2VydmVkX3RocF90b3RhbCwgcmVzZXJ2ZWRfdGhwX3JlcXVlc3RlZCxcXG4rXFx0XFx0XFx0cmVzZXJ2ZWRfdGhwX2NtZGxpbmVfc2l6ZSk7XFxuK1xcdH1cXG4rXFx0a29iaiA9IGtvYmplY3RfY3JlYXRlX2FuZF9hZGQoXFxcInJlc2VydmVkX3RocFxcXCIsIG1tX2tvYmopO1xcbitcXHRpZiAoIWtvYmopXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHRyZXQgPSBzeXNmc19jcmVhdGVfZ3JvdXAoa29iaiwgXFx1MDAyNnJlc2VydmVkX3RocF9hdHRyX2dyb3VwKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0a29iamVjdF9wdXQoa29iaik7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rc3Vic3lzX2luaXRjYWxsKHJlc2VydmVkX3RocF9pbml0KTtcXG5cXFxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGVcXG5kaWZmIC0tZ2l0IGEvbW0vc2hvd19tZW0uYyBiL21tL3Nob3dfbWVtLmNcXG5pbmRleCA0M2FjYTVhMmFjOTkwYS4uZTkzODFhZmNhNGFjYWUgMTAwNjQ0XFxuLS0tIGEvbW0vc2hvd19tZW0uY1xcbisrKyBiL21tL3Nob3dfbWVtLmNcXG5AQCAtMTQyLDYgKzE0Miw3IEBAIHN0YXRpYyB2b2lkIHNob3dfbWlncmF0aW9uX3R5cGVzKHVuc2lnbmVkIGNoYXIgdHlwZSlcXG4gI2lmZGVmIENPTkZJR19DTUFcXG4gXFx0XFx0W01JR1JBVEVfQ01BXVxcdFxcdD0gJ0MnLFxcbiAjZW5kaWZcXG4rXFx0XFx0W01JR1JBVEVfUkVTRVJWRURfVEhQXVxcdD0gJ1QnLFxcbiAjaWZkZWYgQ09ORklHX01FTU9SWV9JU09MQVRJT05cXG4gXFx0XFx0W01JR1JBVEVfSVNPTEFURV1cXHQ9ICdJJyxcXG4gI2VuZGlmXFxuQEAgLTMwOCw2ICszMDksOCBAQCBzdGF0aWMgdm9pZCBzaG93X2ZyZWVfYXJlYXModW5zaWduZWQgaW50IGZpbHRlciwgbm9kZW1hc2tfdCAqbm9kZW1hc2ssIGludCBtYXhfelxcbiBcXHRcXHRcXHRcXFwiIGhpZ2g6JWx1a0JcXFwiXFxuIFxcdFxcdFxcdFxcXCIgcmVzZXJ2ZWRfaGlnaGF0b21pYzolbHVLQlxcXCJcXG4gXFx0XFx0XFx0XFxcIiBmcmVlX2hpZ2hhdG9taWM6JWx1S0JcXFwiXFxuK1xcdFxcdFxcdFxcXCIgcmVzZXJ2ZWRfdGhwOiVsdUtCXFxcIlxcbitcXHRcXHRcXHRcXFwiIGZyZWVfcmVzZXJ2ZWRfdGhwOiVsdUtCXFxcIlxcbiBcXHRcXHRcXHRcXFwiIGFjdGl2ZV9hbm9uOiVsdWtCXFxcIlxcbiBcXHRcXHRcXHRcXFwiIGluYWN0aXZlX2Fub246JWx1a0JcXFwiXFxuIFxcdFxcdFxcdFxcXCIgYWN0aXZlX2ZpbGU6JWx1a0JcXFwiXFxuQEAgLTMzMSw2ICszMzQsOCBAQCBzdGF0aWMgdm9pZCBzaG93X2ZyZWVfYXJlYXModW5zaWduZWQgaW50IGZpbHRlciwgbm9kZW1hc2tfdCAqbm9kZW1hc2ssIGludCBtYXhfelxcbiBcXHRcXHRcXHRLKGhpZ2hfd21hcmtfcGFnZXMoem9uZSkpLFxcbiBcXHRcXHRcXHRLKHpvbmUtXFx1MDAzZW5yX3Jlc2VydmVkX2hpZ2hhdG9taWMpLFxcbiBcXHRcXHRcXHRLKHpvbmUtXFx1MDAzZW5yX2ZyZWVfaGlnaGF0b21pYyksXFxuK1xcdFxcdFxcdEsoem9uZS1cXHUwMDNlbnJfcmVzZXJ2ZWRfdGhwKSxcXG4rXFx0XFx0XFx0Syh6b25lLVxcdTAwM2Vucl9mcmVlX3Jlc2VydmVkX3RocCksXFxuIFxcdFxcdFxcdEsoem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX1pPTkVfQUNUSVZFX0FOT04pKSxcXG4gXFx0XFx0XFx0Syh6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfWk9ORV9JTkFDVElWRV9BTk9OKSksXFxuIFxcdFxcdFxcdEsoem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX1pPTkVfQUNUSVZFX0ZJTEUpKSxcXG5kaWZmIC0tZ2l0IGEvbW0vdm1hLmMgYi9tbS92bWEuY1xcbmluZGV4IDllZWEyODUwODE4YTg1Li44YzRjZDdjOTdhOTg0YyAxMDA2NDRcXG4tLS0gYS9tbS92bWEuY1xcbisrKyBiL21tL3ZtYS5jXFxuQEAgLTcsNiArNyw4IEBAXFxuICNpbmNsdWRlIFxcXCJ2bWFfaW50ZXJuYWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInZtYS5oXFxcIlxcbiBcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2h1Z2VfbW0uaFxcdTAwM2VcXG4rXFxuIHN0cnVjdCBtbWFwX3N0YXRlIHtcXG4gXFx0c3RydWN0IG1tX3N0cnVjdCAqbW07XFxuIFxcdHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaTtcXG5AQCAtNTA3LDYgKzUwOSwxMCBAQCBfX3NwbGl0X3ZtYShzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWksIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHRXQVJOX09OKHZtYS1cXHUwMDNldm1fc3RhcnQgXFx1MDAzZT0gYWRkcik7XFxuIFxcdFdBUk5fT04odm1hLVxcdTAwM2V2bV9lbmQgXFx1MDAzYz0gYWRkcik7XFxuIFxcbitcXHRpZiAoKHZtYS1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiBWTV9SRVNFUlZFRF9USFApIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAhSVNfQUxJR05FRChhZGRyLCBIUEFHRV9QTURfU0laRSkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4gXFx0aWYgKHZtYS1cXHUwMDNldm1fb3BzIFxcdTAwMjZcXHUwMDI2IHZtYS1cXHUwMDNldm1fb3BzLVxcdTAwM2VtYXlfc3BsaXQpIHtcXG4gXFx0XFx0ZXJyID0gdm1hLVxcdTAwM2V2bV9vcHMtXFx1MDAzZW1heV9zcGxpdCh2bWEsIGFkZHIpO1xcbiBcXHRcXHRpZiAoZXJyKVxcbkBAIC0xMzYxLDYgKzEzNjcsNyBAQCBzdGF0aWMgdm9pZCB2bXNfY29tcGxldGVfbXVubWFwX3ZtYXMoc3RydWN0IHZtYV9tdW5tYXBfc3RydWN0ICp2bXMsXFxuIFxcdFxcdHJlbW92ZV92bWEodm1hKTtcXG4gXFxuIFxcdHZtX3VuYWNjdF9tZW1vcnkodm1zLVxcdTAwM2Vucl9hY2NvdW50ZWQpO1xcbitcXHRyZXNlcnZlZF90aHBfdW5jaGFyZ2Uodm1zLVxcdTAwM2Vucl9yZXNlcnZlZF90aHApO1xcbiBcXHR2YWxpZGF0ZV9tbShtbSk7XFxuIFxcdGlmICh2bXMtXFx1MDAzZXVubG9jaylcXG4gXFx0XFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XFxuQEAgLTE0MjMsNiArMTQzMCwxMSBAQCBzdGF0aWMgaW50IHZtc19nYXRoZXJfbXVubWFwX3ZtYXMoc3RydWN0IHZtYV9tdW5tYXBfc3RydWN0ICp2bXMsXFxuIFxcdFxcdFxcdGVycm9yID0gLUVQRVJNO1xcbiBcXHRcXHRcXHRnb3RvIHN0YXJ0X3NwbGl0X2ZhaWxlZDtcXG4gXFx0XFx0fVxcbitcXHRcXHRpZiAoKHZtcy1cXHUwMDNldm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX1JFU0VSVkVEX1RIUCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgICFJU19BTElHTkVEKHZtcy1cXHUwMDNlc3RhcnQsIEhQQUdFX1BNRF9TSVpFKSkge1xcbitcXHRcXHRcXHRlcnJvciA9IC1FSU5WQUw7XFxuK1xcdFxcdFxcdGdvdG8gc3RhcnRfc3BsaXRfZmFpbGVkO1xcbitcXHRcXHR9XFxuIFxcbiBcXHRcXHRlcnJvciA9IF9fc3BsaXRfdm1hKHZtcy1cXHUwMDNldm1pLCB2bXMtXFx1MDAzZXZtYSwgdm1zLVxcdTAwM2VzdGFydCwgMSk7XFxuIFxcdFxcdGlmIChlcnJvcilcXG5AQCAtMTQ0NSw2ICsxNDU3LDExIEBAIHN0YXRpYyBpbnQgdm1zX2dhdGhlcl9tdW5tYXBfdm1hcyhzdHJ1Y3Qgdm1hX211bm1hcF9zdHJ1Y3QgKnZtcyxcXG4gXFx0XFx0fVxcbiBcXHRcXHQvKiBEb2VzIGl0IHNwbGl0IHRoZSBlbmQ/ICovXFxuIFxcdFxcdGlmIChuZXh0LVxcdTAwM2V2bV9lbmQgXFx1MDAzZSB2bXMtXFx1MDAzZWVuZCkge1xcbitcXHRcXHRcXHRpZiAoKG5leHQtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fUkVTRVJWRURfVEhQKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgICAgIUlTX0FMSUdORUQodm1zLVxcdTAwM2VlbmQsIEhQQUdFX1BNRF9TSVpFKSkge1xcbitcXHRcXHRcXHRcXHRlcnJvciA9IC1FSU5WQUw7XFxuK1xcdFxcdFxcdFxcdGdvdG8gZW5kX3NwbGl0X2ZhaWxlZDtcXG4rXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRlcnJvciA9IF9fc3BsaXRfdm1hKHZtcy1cXHUwMDNldm1pLCBuZXh0LCB2bXMtXFx1MDAzZWVuZCwgMCk7XFxuIFxcdFxcdFxcdGlmIChlcnJvcilcXG4gXFx0XFx0XFx0XFx0Z290byBlbmRfc3BsaXRfZmFpbGVkO1xcbkBAIC0xNDY1LDYgKzE0ODIsMTEgQEAgc3RhdGljIGludCB2bXNfZ2F0aGVyX211bm1hcF92bWFzKHN0cnVjdCB2bWFfbXVubWFwX3N0cnVjdCAqdm1zLFxcbiBcXHRcXHRpZiAodm1hX3Rlc3QobmV4dCwgVk1BX0FDQ09VTlRfQklUKSlcXG4gXFx0XFx0XFx0dm1zLVxcdTAwM2Vucl9hY2NvdW50ZWQgKz0gbnJwYWdlcztcXG4gXFxuK1xcdFxcdGlmIChuZXh0LVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX1JFU0VSVkVEX1RIUClcXG4rXFx0XFx0XFx0dm1zLVxcdTAwM2Vucl9yZXNlcnZlZF90aHAgKz1cXG4rXFx0XFx0XFx0XFx0cmVzZXJ2ZWRfdGhwX2hwYWdlX25yKG5leHQtXFx1MDAzZXZtX3N0YXJ0LFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBuZXh0LVxcdTAwM2V2bV9lbmQpO1xcbitcXG4gXFx0XFx0aWYgKGlzX2V4ZWNfbWFwcGluZyhuZXh0LVxcdTAwM2V2bV9mbGFncykpXFxuIFxcdFxcdFxcdHZtcy1cXHUwMDNlZXhlY192bSArPSBucnBhZ2VzO1xcbiBcXHRcXHRlbHNlIGlmIChpc19zdGFja19tYXBwaW5nKG5leHQtXFx1MDAzZXZtX2ZsYWdzKSlcXG5AQCAtMTU2MCw2ICsxNTgyLDcgQEAgc3RhdGljIHZvaWQgaW5pdF92bWFfbXVubWFwKHN0cnVjdCB2bWFfbXVubWFwX3N0cnVjdCAqdm1zLFxcbiBcXHR2bXMtXFx1MDAzZXVmID0gdWY7XFxuIFxcdHZtcy1cXHUwMDNldm1hX2NvdW50ID0gMDtcXG4gXFx0dm1zLVxcdTAwM2Vucl9wYWdlcyA9IHZtcy1cXHUwMDNlbG9ja2VkX3ZtID0gdm1zLVxcdTAwM2Vucl9hY2NvdW50ZWQgPSAwO1xcbitcXHR2bXMtXFx1MDAzZW5yX3Jlc2VydmVkX3RocCA9IDA7XFxuIFxcdHZtcy1cXHUwMDNlZXhlY192bSA9IHZtcy1cXHUwMDNlc3RhY2tfdm0gPSB2bXMtXFx1MDAzZWRhdGFfdm0gPSAwO1xcbiBcXHR2bXMtXFx1MDAzZXVubWFwX3N0YXJ0ID0gRklSU1RfVVNFUl9BRERSRVNTO1xcbiBcXHR2bXMtXFx1MDAzZXVubWFwX2VuZCA9IFVTRVJfUEdUQUJMRVNfQ0VJTElORztcXG5kaWZmIC0tZ2l0IGEvbW0vdm1hLmggYi9tbS92bWEuaFxcbmluZGV4IDhlNGI2MWE3MzA0YzY4Li42OGU0NGFkZWU1Yzg5ZSAxMDA2NDRcXG4tLS0gYS9tbS92bWEuaFxcbisrKyBiL21tL3ZtYS5oXFxuQEAgLTQ4LDYgKzQ4LDcgQEAgc3RydWN0IHZtYV9tdW5tYXBfc3RydWN0IHtcXG4gXFx0dW5zaWduZWQgbG9uZyBucl9wYWdlczsgICAgICAgICAvKiBOdW1iZXIgb2YgcGFnZXMgYmVpbmcgcmVtb3ZlZCAqL1xcbiBcXHR1bnNpZ25lZCBsb25nIGxvY2tlZF92bTsgICAgICAgIC8qIE51bWJlciBvZiBsb2NrZWQgcGFnZXMgKi9cXG4gXFx0dW5zaWduZWQgbG9uZyBucl9hY2NvdW50ZWQ7ICAgICAvKiBOdW1iZXIgb2YgVk1fQUNDT1VOVCBwYWdlcyAqL1xcbitcXHR1bnNpZ25lZCBsb25nIG5yX3Jlc2VydmVkX3RocDsgIC8qIE51bWJlciBvZiByZXNlcnZlZCBQTUQgVEhQIHNsb3RzICovXFxuIFxcdHVuc2lnbmVkIGxvbmcgZXhlY192bTtcXG4gXFx0dW5zaWduZWQgbG9uZyBzdGFja192bTtcXG4gXFx0dW5zaWduZWQgbG9uZyBkYXRhX3ZtO1xcbmRpZmYgLS1naXQgYS90b29scy9pbmNsdWRlL2xpbnV4L2dmcF90eXBlcy5oIGIvdG9vbHMvaW5jbHVkZS9saW51eC9nZnBfdHlwZXMuaFxcbmluZGV4IDZjNzVkZjMwYTI4MWQxLi41M2ExZDIyZmNmOTU3ZSAxMDA2NDRcXG4tLS0gYS90b29scy9pbmNsdWRlL2xpbnV4L2dmcF90eXBlcy5oXFxuKysrIGIvdG9vbHMvaW5jbHVkZS9saW51eC9nZnBfdHlwZXMuaFxcbkBAIC0zMyw3ICszMyw3IEBAIGVudW0ge1xcbiBcXHRfX19HRlBfSU9fQklULFxcbiBcXHRfX19HRlBfRlNfQklULFxcbiBcXHRfX19HRlBfWkVST19CSVQsXFxuLVxcdF9fX0dGUF9VTlVTRURfQklULFxcdC8qIDB4MjAwdSB1bnVzZWQgKi9cXG4rXFx0X19fR0ZQX1JFU0VSVkVEX1RIUF9CSVQsXFxuIFxcdF9fX0dGUF9ESVJFQ1RfUkVDTEFJTV9CSVQsXFxuIFxcdF9fX0dGUF9LU1dBUERfUkVDTEFJTV9CSVQsXFxuIFxcdF9fX0dGUF9XUklURV9CSVQsXFxuQEAgLTY5LDcgKzY5LDcgQEAgZW51bSB7XFxuICNkZWZpbmUgX19fR0ZQX0lPXFx0XFx0QklUKF9fX0dGUF9JT19CSVQpXFxuICNkZWZpbmUgX19fR0ZQX0ZTXFx0XFx0QklUKF9fX0dGUF9GU19CSVQpXFxuICNkZWZpbmUgX19fR0ZQX1pFUk9cXHRcXHRCSVQoX19fR0ZQX1pFUk9fQklUKVxcbi0vKiAweDIwMHUgdW51c2VkICovXFxuKyNkZWZpbmUgX19fR0ZQX1JFU0VSVkVEX1RIUFxcdEJJVChfX19HRlBfUkVTRVJWRURfVEhQX0JJVClcXG4gI2RlZmluZSBfX19HRlBfRElSRUNUX1JFQ0xBSU1cXHRCSVQoX19fR0ZQX0RJUkVDVF9SRUNMQUlNX0JJVClcXG4gI2RlZmluZSBfX19HRlBfS1NXQVBEX1JFQ0xBSU1cXHRCSVQoX19fR0ZQX0tTV0FQRF9SRUNMQUlNX0JJVClcXG4gI2RlZmluZSBfX19HRlBfV1JJVEVcXHRcXHRCSVQoX19fR0ZQX1dSSVRFX0JJVClcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLWttZW0uYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1rbWVtLmNcXG5pbmRleCBlMWIyZjViYzFiYThkOC4uNDU3MzJhYWYxYTUyNWUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLWttZW0uY1xcbisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1rbWVtLmNcXG5AQCAtNjcyLDYgKzY3Miw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qge1xcbiBcXHR7IFxcXCJfX0dGUF9OT1JFVFJZXFxcIixcXHRcXHRcXFwiTlJcXFwiIH0sXFxuIFxcdHsgXFxcIl9fR0ZQX0NPTVBcXFwiLFxcdFxcdFxcdFxcXCJDXFxcIiB9LFxcbiBcXHR7IFxcXCJfX0dGUF9aRVJPXFxcIixcXHRcXHRcXHRcXFwiWlxcXCIgfSxcXG4rXFx0eyBcXFwiX19HRlBfUkVTRVJWRURfVEhQXFxcIixcXHRcXHRcXFwiUlRIUFxcXCIgfSxcXG4gXFx0eyBcXFwiX19HRlBfTk9NRU1BTExPQ1xcXCIsXFx0XFx0XFxcIk5NQVxcXCIgfSxcXG4gXFx0eyBcXFwiX19HRlBfTUVNQUxMT0NcXFwiLFxcdFxcdFxcXCJNQVxcXCIgfSxcXG4gXFx0eyBcXFwiX19HRlBfSEFSRFdBTExcXFwiLFxcdFxcdFxcXCJIV1xcXCIgfSxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaCBiL3Rvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmhcXG5pbmRleCBjZjczYmNkOWJiOWQ1Mi4uMDIyYjdhNTZiNmE5ZjMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmhcXG5AQCAtMTYwLDYgKzE2MCw3IEBAIGVudW0ge1xcbiAjZW5kaWZcXG4gXFx0REVDTEFSRV9WTUFfQklUKFVGRkRfTUlOT1IsIDQxKSxcXG4gXFx0REVDTEFSRV9WTUFfQklUKFNFQUxFRCwgNDIpLFxcbitcXHRERUNMQVJFX1ZNQV9CSVQoUkVTRVJWRURfVEhQLCA0MyksXFxuIFxcdC8qIEZsYWdzIHRoYXQgcmV1c2UgZmxhZ3MgYWJvdmUuICovXFxuIFxcdERFQ0xBUkVfVk1BX0JJVF9BTElBUyhQS0VZX0JJVDAsIEhJR0hfQVJDSF8wKSxcXG4gXFx0REVDTEFSRV9WTUFfQklUX0FMSUFTKFBLRVlfQklUMSwgSElHSF9BUkNIXzEpLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNzozOTo1Ni42MDQ2OTYwMzdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI2NDg4MzA3NzMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWFkdmlzZV9odWdlcGFnZV9wb2xpY3lcIixcbiAgICBcInJlc2VydmVkX3RocF9jaGFyZ2VcIixcbiAgICBcInJlc2VydmVkX3RocF91bmNoYXJnZVwiLFxuICAgIFwicmVzZXJ2ZWRfdGhwX3BhZ2VibG9ja3NcIixcbiAgICBcImNoZWNrX3Jlc2VydmVkX3RocF9hbGlnbm1lbnRcIixcbiAgICBcInZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgTUFEVl9SRVNFUlZFRF9USFAgbWFkdmlzZSBiZWhhdmlvciBhbmQgVk1fUkVTRVJWRURfVEhQIFZNQSBmbGFnLCBtb2RpZnlpbmcgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbmNsdWRpbmcgcGFnZSBmYXVsdCBoYW5kbGluZywgbXJlbWFwLCBhbmQgVk1BIHNwbGl0dGluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBrZXJuZWwncyBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDg4YzI4MTU1NjVkZjZjMDRhZDk0ZWJmYTQ4MDA1NGM4MTgzNmZlNzhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1biAyNyAwNzozOTo1NCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmggYi9hcmNoL2FscGhhL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oXG5pbmRleCAxZTcwMDQ2OGE2ODU4MC4uNjcyYTJmYzM0Mzg2MTQgMTAwNjQ0XG4tLS0gYS9hcmNoL2FscGhhL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oXG4rKysgYi9hcmNoL2FscGhhL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oXG5AQCAtNzgsNiArNzgsOCBAQFxuIFxuICNkZWZpbmUgTUFEVl9DT0xMQVBTRVx0MjVcdFx0LyogU3luY2hyb25vdXMgaHVnZXBhZ2UgY29sbGFwc2UgKi9cbiBcbisjZGVmaW5lIE1BRFZfUkVTRVJWRURfVEhQIDI2XHRcdC8qIFVzZSByZXNlcnZlZCB0cmFuc3BhcmVudCBodWdlcGFnZXMgKi9cbitcbiAjZGVmaW5lIE1BRFZfR1VBUkRfSU5TVEFMTCAxMDJcdFx0LyogZmF0YWwgc2lnbmFsIG9uIGFjY2VzcyB0byByYW5nZSAqL1xuICNkZWZpbmUgTUFEVl9HVUFSRF9SRU1PVkUgMTAzXHRcdC8qIHVuZ3VhcmQgcmFuZ2UgKi9cbiBcbmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmggYi9hcmNoL21pcHMvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmhcbmluZGV4IGI3MDBkYWUyOGM0ODJkLi5hOTRiZjc0ZGVlMjFjYSAxMDA2NDRcbi0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaFxuKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oXG5AQCAtMTA1LDYgKzEwNSw4IEBAXG4gXG4gI2RlZmluZSBNQURWX0NPTExBUFNFXHQyNVx0XHQvKiBTeW5jaHJvbm91cyBodWdlcGFnZSBjb2xsYXBzZSAqL1xuIFxuKyNkZWZpbmUgTUFEVl9SRVNFUlZFRF9USFAgMjZcdFx0LyogVXNlIHJlc2VydmVkIHRyYW5zcGFyZW50IGh1Z2VwYWdlcyAqL1xuK1xuICNkZWZpbmUgTUFEVl9HVUFSRF9JTlNUQUxMIDEwMlx0XHQvKiBmYXRhbCBzaWduYWwgb24gYWNjZXNzIHRvIHJhbmdlICovXG4gI2RlZmluZSBNQURWX0dVQVJEX1JFTU9WRSAxMDNcdFx0LyogdW5ndWFyZCByYW5nZSAqL1xuIFxuZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmhcbmluZGV4IGI2YTcwOTUwNjk4N2UwLi5mZTJmZGRlZmI2YzVkOSAxMDA2NDRcbi0tLSBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oXG4rKysgYi9hcmNoL3BhcmlzYy9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaFxuQEAgLTcyLDYgKzcyLDggQEBcbiBcbiAjZGVmaW5lIE1BRFZfQ09MTEFQU0VcdDI1XHRcdC8qIFN5bmNocm9ub3VzIGh1Z2VwYWdlIGNvbGxhcHNlICovXG4gXG4rI2RlZmluZSBNQURWX1JFU0VSVkVEX1RIUCAyNlx0XHQvKiBVc2UgcmVzZXJ2ZWQgdHJhbnNwYXJlbnQgaHVnZXBhZ2VzICovXG4rXG4gI2RlZmluZSBNQURWX0hXUE9JU09OICAgICAxMDBcdFx0LyogcG9pc29uIGEgcGFnZSBmb3IgdGVzdGluZyAqL1xuICNkZWZpbmUgTUFEVl9TT0ZUX09GRkxJTkUgMTAxXHRcdC8qIHNvZnQgb2ZmbGluZSBwYWdlIGZvciB0ZXN0aW5nICovXG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmggYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaFxuaW5kZXggOTlkNGNjZWU3ZjZlOGEuLmJiNjAzNTMwYmE3OTlmIDEwMDY0NFxuLS0tIGEvYXJjaC94dGVuc2EvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmhcbisrKyBiL2FyY2gveHRlbnNhL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oXG5AQCAtMTEzLDYgKzExMyw4IEBAXG4gXG4gI2RlZmluZSBNQURWX0NPTExBUFNFXHQyNVx0XHQvKiBTeW5jaHJvbm91cyBodWdlcGFnZSBjb2xsYXBzZSAqL1xuIFxuKyNkZWZpbmUgTUFEVl9SRVNFUlZFRF9USFAgMjZcdFx0LyogVXNlIHJlc2VydmVkIHRyYW5zcGFyZW50IGh1Z2VwYWdlcyAqL1xuK1xuICNkZWZpbmUgTUFEVl9HVUFSRF9JTlNUQUxMIDEwMlx0XHQvKiBmYXRhbCBzaWduYWwgb24gYWNjZXNzIHRvIHJhbmdlICovXG4gI2RlZmluZSBNQURWX0dVQVJEX1JFTU9WRSAxMDNcdFx0LyogdW5ndWFyZCByYW5nZSAqL1xuIFxuZGlmZiAtLWdpdCBhL2ZzL3Byb2MvdGFza19tbXUuYyBiL2ZzL3Byb2MvdGFza19tbXUuY1xuaW5kZXggZDMyNDA4ZjdjZDVlZDIuLjY1YzRiMmE2MWFlYWM3IDEwMDY0NFxuLS0tIGEvZnMvcHJvYy90YXNrX21tdS5jXG4rKysgYi9mcy9wcm9jL3Rhc2tfbW11LmNcbkBAIC0xMjQ1LDYgKzEyNDUsOSBAQCBzdGF0aWMgdm9pZCBzaG93X3NtYXBfdm1hX2ZsYWdzKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4gI2VuZGlmXG4gI2lmZGVmIENPTkZJR182NEJJVFxuIFx0XHRbaWxvZzIoVk1fU0VBTEVEKV0gPSBcInNsXCIsXG4rI2VuZGlmXG4rI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxuK1x0XHRbaWxvZzIoVk1fUkVTRVJWRURfVEhQKV0gPSBcInJ0XCIsXG4gI2VuZGlmXG4gXHR9O1xuIFx0c2l6ZV90IGk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9nZnAuaCBiL2luY2x1ZGUvbGludXgvZ2ZwLmhcbmluZGV4IGNkZjk1YTlmMGI4N2MxLi4yZDA1OTI5ZmQ4YzcyZCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZ2ZwLmhcbisrKyBiL2luY2x1ZGUvbGludXgvZ2ZwLmhcbkBAIC0zMCw2ICszMCw5IEBAIHN0YXRpYyBpbmxpbmUgaW50IGdmcF9taWdyYXRldHlwZShjb25zdCBnZnBfdCBnZnBfZmxhZ3MpXG4gXHRCVUlMRF9CVUdfT04oKChfX19HRlBfTU9WQUJMRSB8IF9fX0dGUF9SRUNMQUlNQUJMRSkgXHUwMDNlXHUwMDNlXG4gXHRcdCAgICAgIEdGUF9NT1ZBQkxFX1NISUZUKSAhPSBNSUdSQVRFX0hJR0hBVE9NSUMpO1xuIFxuK1x0aWYgKHVubGlrZWx5KGdmcF9mbGFncyBcdTAwMjYgX19HRlBfUkVTRVJWRURfVEhQKSlcbitcdFx0cmV0dXJuIE1JR1JBVEVfUkVTRVJWRURfVEhQO1xuK1xuIFx0aWYgKHVubGlrZWx5KHBhZ2VfZ3JvdXBfYnlfbW9iaWxpdHlfZGlzYWJsZWQpKVxuIFx0XHRyZXR1cm4gTUlHUkFURV9VTk1PVkFCTEU7XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9nZnBfdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvZ2ZwX3R5cGVzLmhcbmluZGV4IDU0Y2EwYzg4YmFiNmU4Li4xZjgyYTk0OTFkMzU3ZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZ2ZwX3R5cGVzLmhcbisrKyBiL2luY2x1ZGUvbGludXgvZ2ZwX3R5cGVzLmhcbkBAIC0zMyw3ICszMyw3IEBAIGVudW0ge1xuIFx0X19fR0ZQX0lPX0JJVCxcbiBcdF9fX0dGUF9GU19CSVQsXG4gXHRfX19HRlBfWkVST19CSVQsXG4tXHRfX19HRlBfVU5VU0VEX0JJVCxcdC8qIDB4MjAwdSB1bnVzZWQgKi9cbitcdF9fX0dGUF9SRVNFUlZFRF9USFBfQklULFxuIFx0X19fR0ZQX0RJUkVDVF9SRUNMQUlNX0JJVCxcbiBcdF9fX0dGUF9LU1dBUERfUkVDTEFJTV9CSVQsXG4gXHRfX19HRlBfV1JJVEVfQklULFxuQEAgLTY5LDcgKzY5LDcgQEAgZW51bSB7XG4gI2RlZmluZSBfX19HRlBfSU9cdFx0QklUKF9fX0dGUF9JT19CSVQpXG4gI2RlZmluZSBfX19HRlBfRlNcdFx0QklUKF9fX0dGUF9GU19CSVQpXG4gI2RlZmluZSBfX19HRlBfWkVST1x0XHRCSVQoX19fR0ZQX1pFUk9fQklUKVxuLS8qIDB4MjAwdSB1bnVzZWQgKi9cbisjZGVmaW5lIF9fX0dGUF9SRVNFUlZFRF9USFBcdEJJVChfX19HRlBfUkVTRVJWRURfVEhQX0JJVClcbiAjZGVmaW5lIF9fX0dGUF9ESVJFQ1RfUkVDTEFJTVx0QklUKF9fX0dGUF9ESVJFQ1RfUkVDTEFJTV9CSVQpXG4gI2RlZmluZSBfX19HRlBfS1NXQVBEX1JFQ0xBSU1cdEJJVChfX19HRlBfS1NXQVBEX1JFQ0xBSU1fQklUKVxuICNkZWZpbmUgX19fR0ZQX1dSSVRFXHRcdEJJVChfX19HRlBfV1JJVEVfQklUKVxuQEAgLTE0MSw2ICsxNDEsOSBAQCBlbnVtIHtcbiAgKiAlX19HRlBfTk9fT0JKX0VYVCBjYXVzZXMgc2xhYiBhbGxvY2F0aW9uIHRvIGhhdmUgbm8gb2JqZWN0IGV4dGVuc2lvbi5cbiAgKiBtYXJrX29ial9jb2RldGFnX2VtcHR5KCkgc2hvdWxkIGJlIGNhbGxlZCB1cG9uIGZyZWVpbmcgZm9yIG9iamVjdHMgYWxsb2NhdGVkXG4gICogd2l0aCB0aGlzIGZsYWcgdG8gaW5kaWNhdGUgdGhhdCB0aGVpciBOVUxMIHRhZ3MgYXJlIGV4cGVjdGVkIGFuZCBub3JtYWwuXG4rICpcbisgKiAlX19HRlBfUkVTRVJWRURfVEhQIGlzIGFuIGludGVybmFsIGZsYWcgZm9yIHJlc2VydmVkIFRIUCBmYXVsdHMuIEl0IHJlc3RyaWN0c1xuKyAqdGhlIGFsbG9jYXRpb24gdG8gJU1JR1JBVEVfUkVTRVJWRURfVEhQIHBhZ2VibG9ja3MuXG4gICovXG4gI2RlZmluZSBfX0dGUF9SRUNMQUlNQUJMRSAoKF9fZm9yY2UgZ2ZwX3QpX19fR0ZQX1JFQ0xBSU1BQkxFKVxuICNkZWZpbmUgX19HRlBfV1JJVEVcdCgoX19mb3JjZSBnZnBfdClfX19HRlBfV1JJVEUpXG5AQCAtMTQ4LDYgKzE1MSw3IEBAIGVudW0ge1xuICNkZWZpbmUgX19HRlBfVEhJU05PREVcdCgoX19mb3JjZSBnZnBfdClfX19HRlBfVEhJU05PREUpXG4gI2RlZmluZSBfX0dGUF9BQ0NPVU5UXHQoKF9fZm9yY2UgZ2ZwX3QpX19fR0ZQX0FDQ09VTlQpXG4gI2RlZmluZSBfX0dGUF9OT19PQkpfRVhUICAgKChfX2ZvcmNlIGdmcF90KV9fX0dGUF9OT19PQkpfRVhUKVxuKyNkZWZpbmUgX19HRlBfUkVTRVJWRURfVEhQICgoX19mb3JjZSBnZnBfdClfX19HRlBfUkVTRVJWRURfVEhQKVxuIFxuIC8qKlxuICAqIERPQzogV2F0ZXJtYXJrIG1vZGlmaWVyc1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHVnZV9tbS5oIGIvaW5jbHVkZS9saW51eC9odWdlX21tLmhcbmluZGV4IGFkMjBmN2Y4YzE3OTQ0Li40ZmU5NjUxY2Q4NmI1ZSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvaHVnZV9tbS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaFxuQEAgLTMzMCw2ICszMzAsOCBAQCB1bnNpZ25lZCBsb25nIHRocF92bWFfYWxsb3dhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcbiBcdFx0aWYgKHZtX2ZsYWdzIFx1MDAyNiBWTV9IVUdFUEFHRSlcbiBcdFx0XHRtYXNrIHw9IFJFQURfT05DRShodWdlX2Fub25fb3JkZXJzX21hZHZpc2UpO1xuK1x0XHRpZiAodm1fZmxhZ3MgXHUwMDI2IFZNX1JFU0VSVkVEX1RIUClcbitcdFx0XHRtYXNrIHw9IEJJVChQTURfT1JERVIpO1xuIFx0XHRpZiAoaHVnZXBhZ2VfZ2xvYmFsX2Fsd2F5cygpIHx8XG4gXHRcdCAgICAoKHZtX2ZsYWdzIFx1MDAyNiBWTV9IVUdFUEFHRSkgXHUwMDI2XHUwMDI2IGh1Z2VwYWdlX2dsb2JhbF9lbmFibGVkKCkpKVxuIFx0XHRcdG1hc2sgfD0gUkVBRF9PTkNFKGh1Z2VfYW5vbl9vcmRlcnNfaW5oZXJpdCk7XG5AQCAtMzcxLDcgKzM3Myw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB2bWFfdGhwX2Rpc2FibGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0ICogQXJlIFRIUHMgZGlzYWJsZWQgb25seSBmb3IgVk1BcyB3aGVyZSB3ZSBkaWRuJ3QgZ2V0IGFuIGV4cGxpY2l0XG4gXHQgKiBhZHZpc2UgdG8gdXNlIHRoZW0/XG4gXHQgKi9cbi1cdGlmICh2bV9mbGFncyBcdTAwMjYgVk1fSFVHRVBBR0UpXG4rXHRpZiAodm1fZmxhZ3MgXHUwMDI2IChWTV9IVUdFUEFHRSB8IFZNX1JFU0VSVkVEX1RIUCkpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdC8qXG4gXHQgKiBGb3JjaW5nIGEgY29sbGFwc2UgKGUuZy4sIG1hZHZfY29sbGFwc2UpLCBpcyBhIGNsZWFyIGFkdmljZSB0b1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaFxuaW5kZXggNDg1ZGY5YzJkYmRkYjMuLjI3OGNmNGJmZDRlYzViIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tLmhcbkBAIC0zNTMsNiArMzUzLDcgQEAgZW51bSB7XG4gI2VuZGlmXG4gXHRERUNMQVJFX1ZNQV9CSVQoVUZGRF9NSU5PUiwgNDEpLFxuIFx0REVDTEFSRV9WTUFfQklUKFNFQUxFRCwgNDIpLFxuK1x0REVDTEFSRV9WTUFfQklUKFJFU0VSVkVEX1RIUCwgNDMpLFxuIFx0LyogRmxhZ3MgdGhhdCByZXVzZSBmbGFncyBhYm92ZS4gKi9cbiBcdERFQ0xBUkVfVk1BX0JJVF9BTElBUyhQS0VZX0JJVDAsIEhJR0hfQVJDSF8wKSxcbiBcdERFQ0xBUkVfVk1BX0JJVF9BTElBUyhQS0VZX0JJVDEsIEhJR0hfQVJDSF8xKSxcbkBAIC01MjYsNiArNTI3LDEyIEBAIGVudW0ge1xuICNkZWZpbmUgVk1BX0RST1BQQUJMRVx0XHRFTVBUWV9WTUFfRkxBR1NcbiAjZW5kaWZcbiBcbisjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG4rI2RlZmluZSBWTV9SRVNFUlZFRF9USFBcdFx0SU5JVF9WTV9GTEFHKFJFU0VSVkVEX1RIUClcbisjZWxzZVxuKyNkZWZpbmUgVk1fUkVTRVJWRURfVEhQXHRcdFZNX05PTkVcbisjZW5kaWZcbitcbiAvKiBCaXRzIHNldCBpbiB0aGUgVk1BIHVudGlsIHRoZSBzdGFjayBpcyBpbiBpdHMgZmluYWwgbG9jYXRpb24gKi9cbiAjZGVmaW5lIFZNX1NUQUNLX0lOQ09NUExFVEVfU0VUVVAgKFZNX1JBTkRfUkVBRCB8IFZNX1NFUV9SRUFEIHwgVk1fU1RBQ0tfRUFSTFkpXG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaCBiL2luY2x1ZGUvbGludXgvbW16b25lLmhcbmluZGV4IGNhMjcxMjE4NzE0NzVjLi40NDE4ZDBjOWFjY2RjOCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW16b25lLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbW16b25lLmhcbkBAIC0xMzMsMTAgKzEzMyw5IEBAIGVudW0gbWlncmF0ZXR5cGUge1xuIFx0ICogX19mcmVlX3BhZ2VibG9ja19jbWEoKSBmdW5jdGlvbi5cbiBcdCAqL1xuIFx0TUlHUkFURV9DTUEsXG4tXHRfX01JR1JBVEVfVFlQRV9FTkQgPSBNSUdSQVRFX0NNQSxcbi0jZWxzZVxuLVx0X19NSUdSQVRFX1RZUEVfRU5EID0gTUlHUkFURV9ISUdIQVRPTUlDLFxuICNlbmRpZlxuK1x0TUlHUkFURV9SRVNFUlZFRF9USFAsXG4rXHRfX01JR1JBVEVfVFlQRV9FTkQgPSBNSUdSQVRFX1JFU0VSVkVEX1RIUCxcbiAjaWZkZWYgQ09ORklHX01FTU9SWV9JU09MQVRJT05cbiBcdE1JR1JBVEVfSVNPTEFURSxcdC8qIGNhbid0IGFsbG9jYXRlIGZyb20gaGVyZSAqL1xuICNlbmRpZlxuQEAgLTE2MSw2ICsxNjAsOSBAQCBleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pZ3JhdGV0eXBlX25hbWVzW01JR1JBVEVfVFlQRVNdO1xuICMgIGRlZmluZSBpc19taWdyYXRlX2NtYV9mb2xpbyhmb2xpbywgcGZuKSBmYWxzZVxuICNlbmRpZlxuIFxuKyNkZWZpbmUgaXNfbWlncmF0ZV9yZXNlcnZlZF90aHAobWlncmF0ZXR5cGUpIFxcXG4rXHR1bmxpa2VseSgobWlncmF0ZXR5cGUpID09IE1JR1JBVEVfUkVTRVJWRURfVEhQKVxuK1xuIHN0YXRpYyBpbmxpbmUgYm9vbCBpc19taWdyYXRlX21vdmFibGUoaW50IG10KVxuIHtcbiBcdHJldHVybiBpc19taWdyYXRlX2NtYShtdCkgfHwgbXQgPT0gTUlHUkFURV9NT1ZBQkxFO1xuQEAgLTk3NSw2ICs5NzcsOSBAQCBzdHJ1Y3Qgem9uZSB7XG4gXHR1bnNpZ25lZCBsb25nIG5yX3Jlc2VydmVkX2hpZ2hhdG9taWM7XG4gXHR1bnNpZ25lZCBsb25nIG5yX2ZyZWVfaGlnaGF0b21pYztcbiBcbitcdHVuc2lnbmVkIGxvbmcgbnJfcmVzZXJ2ZWRfdGhwO1xuK1x0dW5zaWduZWQgbG9uZyBucl9mcmVlX3Jlc2VydmVkX3RocDtcbitcbiBcdC8qXG4gXHQgKiBXZSBkb24ndCBrbm93IGlmIHRoZSBtZW1vcnkgdGhhdCB3ZSdyZSBnb2luZyB0byBhbGxvY2F0ZSB3aWxsIGJlXG4gXHQgKiBmcmVlYWJsZSBvci9hbmQgaXQgd2lsbCBiZSByZWxlYXNlZCBldmVudHVhbGx5LCBzbyB0byBhdm9pZCB0b3RhbGx5XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvbW1mbGFncy5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvbW1mbGFncy5oXG5pbmRleCBhNmU1YTQ0YzliNDI5OS4uM2RiNDBlYmQ3MDYwYmQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9tbWZsYWdzLmhcbisrKyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL21tZmxhZ3MuaFxuQEAgLTI0LDYgKzI0LDcgQEBcbiBcdFRSQUNFX0dGUF9FTShJTylcdFx0XHRcXFxuIFx0VFJBQ0VfR0ZQX0VNKEZTKVx0XHRcdFxcXG4gXHRUUkFDRV9HRlBfRU0oWkVSTylcdFx0XHRcXFxuK1x0VFJBQ0VfR0ZQX0VNKFJFU0VSVkVEX1RIUClcdFx0XFxcbiBcdFRSQUNFX0dGUF9FTShESVJFQ1RfUkVDTEFJTSlcdFx0XFxcbiBcdFRSQUNFX0dGUF9FTShLU1dBUERfUkVDTEFJTSlcdFx0XFxcbiBcdFRSQUNFX0dGUF9FTShXUklURSlcdFx0XHRcXFxuQEAgLTcyLDggKzczLDcgQEBcbiBcbiBUUkFDRV9HRlBfRkxBR1NcbiBcbi0vKiBKdXN0IGluIGNhc2UgdGhlc2UgYXJlIGV2ZXIgdXNlZCAqL1xuLVRSQUNFX0RFRklORV9FTlVNKF9fX0dGUF9VTlVTRURfQklUKTtcbisvKiBKdXN0IGluIGNhc2UgdGhpcyBpcyBldmVyIHVzZWQgKi9cbiBUUkFDRV9ERUZJTkVfRU5VTShfX19HRlBfTEFTVF9CSVQpO1xuIFxuICNkZWZpbmUgZ2ZwZmxhZ19zdHJpbmcoZmxhZykgeyhfX2ZvcmNlIHVuc2lnbmVkIGxvbmcpZmxhZywgI2ZsYWd9XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL21tYW4tY29tbW9uLmggYi9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvbW1hbi1jb21tb24uaFxuaW5kZXggZWYxYzI3ZmEzYzU3MGYuLmIzZDE0NDg5MzVlYWQxIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL21tYW4tY29tbW9uLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9tbWFuLWNvbW1vbi5oXG5AQCAtNzksNiArNzksOCBAQFxuIFxuICNkZWZpbmUgTUFEVl9DT0xMQVBTRVx0MjVcdFx0LyogU3luY2hyb25vdXMgaHVnZXBhZ2UgY29sbGFwc2UgKi9cbiBcbisjZGVmaW5lIE1BRFZfUkVTRVJWRURfVEhQIDI2XHRcdC8qIFVzZSByZXNlcnZlZCB0cmFuc3BhcmVudCBodWdlcGFnZXMgKi9cbitcbiAjZGVmaW5lIE1BRFZfR1VBUkRfSU5TVEFMTCAxMDJcdFx0LyogZmF0YWwgc2lnbmFsIG9uIGFjY2VzcyB0byByYW5nZSAqL1xuICNkZWZpbmUgTUFEVl9HVUFSRF9SRU1PVkUgMTAzXHRcdC8qIHVuZ3VhcmQgcmFuZ2UgKi9cbiBcbmRpZmYgLS1naXQgYS9tbS9NYWtlZmlsZSBiL21tL01ha2VmaWxlXG5pbmRleCBlZmY5ZjllN2UwNjFjMS4uZmQ3NGE3MzkyZTM0NjcgMTAwNjQ0XG4tLS0gYS9tbS9NYWtlZmlsZVxuKysrIGIvbW0vTWFrZWZpbGVcbkBAIC05OCw3ICs5OCw3IEBAIG9iai0kKENPTkZJR19NRU1URVNUKVx0XHQrPSBtZW10ZXN0Lm9cbiBvYmotJChDT05GSUdfTUlHUkFUSU9OKSArPSBtaWdyYXRlLm9cbiBvYmotJChDT05GSUdfTlVNQSkgKz0gbWVtb3J5LXRpZXJzLm9cbiBvYmotJChDT05GSUdfREVWSUNFX01JR1JBVElPTikgKz0gbWlncmF0ZV9kZXZpY2Uub1xuLW9iai0kKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgKz0gaHVnZV9tZW1vcnkubyBraHVnZXBhZ2VkLm9cbitvYmotJChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpICs9IGh1Z2VfbWVtb3J5Lm8ga2h1Z2VwYWdlZC5vIHJlc2VydmVkX3RocC5vXG4gb2JqLSQoQ09ORklHX1BBR0VfQ09VTlRFUikgKz0gcGFnZV9jb3VudGVyLm9cbiBvYmotJChDT05GSUdfTElWRVVQREFURV9NRU1GRCkgKz0gbWVtZmRfbHVvLm9cbiBvYmotJChDT05GSUdfTUVNQ0dfVjEpICs9IG1lbWNvbnRyb2wtdjEub1xuZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jXG5pbmRleCAyYmNjYjBhNTNhMGE2MC4uNjZkODVhMmZhODU1ZjMgMTAwNjQ0XG4tLS0gYS9tbS9odWdlX21lbW9yeS5jXG4rKysgYi9tbS9odWdlX21lbW9yeS5jXG5AQCAtMTI2Nyw2ICsxMjY3LDkgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0Y29uc3QgaW50IG9yZGVyID0gSFBBR0VfUE1EX09SREVSO1xuIFx0c3RydWN0IGZvbGlvICpmb2xpbztcbiBcbitcdGlmICh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1JFU0VSVkVEX1RIUClcbitcdFx0Z2ZwIHw9IF9fR0ZQX1JFU0VSVkVEX1RIUDtcbitcbiBcdGZvbGlvID0gdm1hX2FsbG9jX2ZvbGlvKGdmcCwgb3JkZXIsIHZtYSwgYWRkciBcdTAwMjYgSFBBR0VfUE1EX01BU0spO1xuIFxuIFx0aWYgKHVubGlrZWx5KCFmb2xpbykpIHtcbkBAIC0xMzQ0LDggKzEzNDcsMTEgQEAgc3RhdGljIHZtX2ZhdWx0X3QgX19kb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbiBcdHZtX2ZhdWx0X3QgcmV0ID0gMDtcbiBcbiBcdGZvbGlvID0gdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kKHZtYSwgdm1mLVx1MDAzZWFkZHJlc3MpO1xuLVx0aWYgKHVubGlrZWx5KCFmb2xpbykpXG4rXHRpZiAodW5saWtlbHkoIWZvbGlvKSkge1xuK1x0XHRpZiAodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9SRVNFUlZFRF9USFApXG4rXHRcdFx0cmV0dXJuIFZNX0ZBVUxUX09PTTtcbiBcdFx0cmV0dXJuIFZNX0ZBVUxUX0ZBTExCQUNLO1xuK1x0fVxuIFxuIFx0cGd0YWJsZSA9IHB0ZV9hbGxvY19vbmUodm1hLVx1MDAzZXZtX21tKTtcbiBcdGlmICh1bmxpa2VseSghcGd0YWJsZSkpIHtcbkBAIC0xNDgwLDE1ICsxNDg2LDE3IEBAIHZtX2ZhdWx0X3QgZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4gXHR2bV9mYXVsdF90IHJldDtcbiBcbiBcdGlmICghdGhwX3ZtYV9zdWl0YWJsZV9vcmRlcih2bWEsIGhhZGRyLCBQTURfT1JERVIpKVxuLVx0XHRyZXR1cm4gVk1fRkFVTFRfRkFMTEJBQ0s7XG4rXHRcdHJldHVybiAodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9SRVNFUlZFRF9USFApID8gVk1fRkFVTFRfT09NIDpcbitcdFx0XHRcdFx0XHRcdCAgIFZNX0ZBVUxUX0ZBTExCQUNLO1xuIFx0cmV0ID0gdm1mX2Fub25fcHJlcGFyZSh2bWYpO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcdGtodWdlcGFnZWRfZW50ZXJfdm1hKHZtYSwgdm1hLVx1MDAzZXZtX2ZsYWdzKTtcbiBcbi1cdGlmICghKHZtZi1cdTAwM2VmbGFncyBcdTAwMjYgRkFVTFRfRkxBR19XUklURSkgXHUwMDI2XHUwMDI2XG4tXHRcdFx0IW1tX2ZvcmJpZHNfemVyb3BhZ2Uodm1hLVx1MDAzZXZtX21tKSBcdTAwMjZcdTAwMjZcbi1cdFx0XHR0cmFuc3BhcmVudF9odWdlcGFnZV91c2VfemVyb19wYWdlKCkpIHtcbitcdGlmICghKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fUkVTRVJWRURfVEhQKSBcdTAwMjZcdTAwMjZcbitcdCAgICAhKHZtZi1cdTAwM2VmbGFncyBcdTAwMjYgRkFVTFRfRkxBR19XUklURSkgXHUwMDI2XHUwMDI2XG4rXHQgICAgIW1tX2ZvcmJpZHNfemVyb3BhZ2Uodm1hLVx1MDAzZXZtX21tKSBcdTAwMjZcdTAwMjZcbitcdCAgICB0cmFuc3BhcmVudF9odWdlcGFnZV91c2VfemVyb19wYWdlKCkpIHtcbiBcdFx0cGd0YWJsZV90IHBndGFibGU7XG4gXHRcdHN0cnVjdCBmb2xpbyAqemVyb19mb2xpbztcbiBcdFx0dm1fZmF1bHRfdCByZXQ7XG5kaWZmIC0tZ2l0IGEvbW0vaW50ZXJuYWwuaCBiL21tL2ludGVybmFsLmhcbmluZGV4IDE4MWU3OWYxZDZhMjA3Li40YjJhMTNkMzUzNzcyMSAxMDA2NDRcbi0tLSBhL21tL2ludGVybmFsLmhcbisrKyBiL21tL2ludGVybmFsLmhcbkBAIC0xNDc3LDYgKzE0NzcsNyBAQCB1bnNpZ25lZCBpbnQgcmVjbGFpbV9jbGVhbl9wYWdlc19mcm9tX2xpc3Qoc3RydWN0IHpvbmUgKnpvbmUsXG4gI2RlZmluZSBBTExPQ19ISUdIQVRPTUlDXHQweDIwMCAvKiBBbGxvd3MgYWNjZXNzIHRvIE1JR1JBVEVfSElHSEFUT01JQyAqL1xuICNkZWZpbmUgQUxMT0NfVFJZTE9DS1x0XHQweDQwMCAvKiBPbmx5IHVzZSBzcGluX3RyeWxvY2sgaW4gYWxsb2NhdGlvbiBwYXRoICovXG4gI2RlZmluZSBBTExPQ19LU1dBUERcdFx0MHg4MDAgLyogYWxsb3cgd2FraW5nIG9mIGtzd2FwZCwgX19HRlBfS1NXQVBEX1JFQ0xBSU0gc2V0ICovXG4rI2RlZmluZSBBTExPQ19SRVNFUlZFRF9USFBcdDB4MTAwMCAvKiBBbGxvd3MgYWNjZXNzIHRvIHJlc2VydmVkIFRIUCBwYWdlYmxvY2tzICovXG4gXG4gLyogRmxhZ3MgdGhhdCBhbGxvdyBhbGxvY2F0aW9ucyBiZWxvdyB0aGUgbWluIHdhdGVybWFyay4gKi9cbiAjZGVmaW5lIEFMTE9DX1JFU0VSVkVTIChBTExPQ19OT05fQkxPQ0t8QUxMT0NfTUlOX1JFU0VSVkV8QUxMT0NfSElHSEFUT01JQ3xBTExPQ19PT00pXG5AQCAtMTk1MSw0ICsxOTUyLDkgQEAgc3RhdGljIGlubGluZSBpbnQgZ2V0X3N5c2N0bF9tYXhfbWFwX2NvdW50KHZvaWQpXG4gYm9vbCBtYXlfZXhwYW5kX3ZtKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzLFxuIFx0XHQgICB1bnNpZ25lZCBsb25nIG5wYWdlcyk7XG4gXG4rdW5zaWduZWQgbG9uZyByZXNlcnZlZF90aHBfcGFnZWJsb2Nrcyh1bnNpZ25lZCBsb25nIG5yX2hwYWdlcyk7XG4rdW5zaWduZWQgbG9uZyByZXNlcnZlZF90aHBfaHBhZ2VfbnIodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpO1xuK2ludCByZXNlcnZlZF90aHBfY2hhcmdlKHVuc2lnbmVkIGxvbmcgbnJfaHBhZ2VzKTtcbit2b2lkIHJlc2VydmVkX3RocF91bmNoYXJnZSh1bnNpZ25lZCBsb25nIG5yX2hwYWdlcyk7XG4rXG4gI2VuZGlmXHQvKiBfX01NX0lOVEVSTkFMX0ggKi9cbmRpZmYgLS1naXQgYS9tbS9raHVnZXBhZ2VkLmMgYi9tbS9raHVnZXBhZ2VkLmNcbmluZGV4IDYxN2JjYTc2ZGI0OWI2Li44MDI5M2U4YzFlNGU3NiAxMDA2NDRcbi0tLSBhL21tL2todWdlcGFnZWQuY1xuKysrIGIvbW0va2h1Z2VwYWdlZC5jXG5AQCAtNDUxLDYgKzQ1MSw3IEBAIGludCBodWdlcGFnZV9tYWR2aXNlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0c3dpdGNoIChhZHZpY2UpIHtcbiBcdGNhc2UgTUFEVl9IVUdFUEFHRTpcbiBcdFx0KnZtX2ZsYWdzIFx1MDAyNj0gflZNX05PSFVHRVBBR0U7XG4rXHRcdCp2bV9mbGFncyBcdTAwMjY9IH5WTV9SRVNFUlZFRF9USFA7XG4gXHRcdCp2bV9mbGFncyB8PSBWTV9IVUdFUEFHRTtcbiBcdFx0LypcbiBcdFx0ICogSWYgdGhlIHZtYSBiZWNvbWUgZ29vZCBmb3Iga2h1Z2VwYWdlZCB0byBzY2FuLFxuQEAgLTQ2MSw2ICs0NjIsNyBAQCBpbnQgaHVnZXBhZ2VfbWFkdmlzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIE1BRFZfTk9IVUdFUEFHRTpcbiBcdFx0KnZtX2ZsYWdzIFx1MDAyNj0gflZNX0hVR0VQQUdFO1xuK1x0XHQqdm1fZmxhZ3MgXHUwMDI2PSB+Vk1fUkVTRVJWRURfVEhQO1xuIFx0XHQqdm1fZmxhZ3MgfD0gVk1fTk9IVUdFUEFHRTtcbiBcdFx0LypcbiBcdFx0ICogU2V0dGluZyBWTV9OT0hVR0VQQUdFIHdpbGwgcHJldmVudCBraHVnZXBhZ2VkIGZyb20gc2Nhbm5pbmdcbkBAIC00NjgsNiArNDcwLDEyIEBAIGludCBodWdlcGFnZV9tYWR2aXNlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHQgKiBpdCBnb3QgcmVnaXN0ZXJlZCBiZWZvcmUgVk1fTk9IVUdFUEFHRSB3YXMgc2V0LlxuIFx0XHQgKi9cbiBcdFx0YnJlYWs7XG4rXHRjYXNlIE1BRFZfUkVTRVJWRURfVEhQOlxuK1x0XHQqdm1fZmxhZ3MgXHUwMDI2PSB+KFZNX0hVR0VQQUdFIHwgVk1fTk9IVUdFUEFHRSk7XG4rXHRcdCp2bV9mbGFncyB8PSBWTV9SRVNFUlZFRF9USFA7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4gXHRyZXR1cm4gMDtcbmRpZmYgLS1naXQgYS9tbS9tYWR2aXNlLmMgYi9tbS9tYWR2aXNlLmNcbmluZGV4IGNkOWJiMDc3MDcyY2NiLi5kZDkxMTA1ZGI2OGM3NSAxMDA2NDRcbi0tLSBhL21tL21hZHZpc2UuY1xuKysrIGIvbW0vbWFkdmlzZS5jXG5AQCAtMTMsNiArMTMsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhZ2UtaXNvbGF0aW9uLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdlX2lkbGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VzZXJmYXVsdGZkX2suaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2h1Z2VfbW0uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2h1Z2V0bGIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZhbGxvYy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZmFkdmlzZS5oXHUwMDNlXG5AQCAtMTMzMSw2ICsxMzMyLDY1IEBAIHN0YXRpYyBib29sIGNhbl9tYWR2aXNlX21vZGlmeShzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcbiB9XG4gI2VuZGlmXG4gXG4rc3RhdGljIGJvb2wgcmVzZXJ2ZWRfdGhwX21hZHZpc2VfYWxpZ25lZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbitcdFx0XHRcdFx0IHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yX3JhbmdlICpyYW5nZSlcbit7XG4rXHRpZiAoISh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1JFU0VSVkVEX1RIUCkpXG4rXHRcdHJldHVybiB0cnVlO1xuK1xuK1x0cmV0dXJuIElTX0FMSUdORUQocmFuZ2UtXHUwMDNlc3RhcnQsIEhQQUdFX1BNRF9TSVpFKSBcdTAwMjZcdTAwMjZcbitcdCAgICAgICBJU19BTElHTkVEKHJhbmdlLVx1MDAzZWVuZCwgSFBBR0VfUE1EX1NJWkUpO1xuK31cbitcbitzdGF0aWMgaW50IG1hZHZpc2VfaHVnZXBhZ2VfcG9saWN5KHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yLFxuK1x0XHRcdFx0ICAgdm1fZmxhZ3NfdCAqbmV3X2ZsYWdzLFxuK1x0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyAqcmVzZXJ2ZWRfaHBhZ2VzLFxuK1x0XHRcdFx0ICAgYm9vbCAqY2hhcmdlX3Jlc2VydmVkX3RocCxcbitcdFx0XHRcdCAgIGJvb2wgKnVuY2hhcmdlX3Jlc2VydmVkX3RocClcbit7XG4rXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IG1hZHZfYmVoYXZpb3ItXHUwMDNldm1hO1xuK1x0c3RydWN0IG1hZHZpc2VfYmVoYXZpb3JfcmFuZ2UgKnJhbmdlID0gXHUwMDI2bWFkdl9iZWhhdmlvci1cdTAwM2VyYW5nZTtcbitcdHVuc2lnbmVkIGxvbmcgaHBhZ2VzO1xuK1x0aW50IGJlaGF2aW9yID0gbWFkdl9iZWhhdmlvci1cdTAwM2ViZWhhdmlvcjtcbitcdGludCBlcnJvcjtcbitcbitcdHN3aXRjaCAoYmVoYXZpb3IpIHtcbitcdGNhc2UgTUFEVl9IVUdFUEFHRTpcbitcdGNhc2UgTUFEVl9OT0hVR0VQQUdFOlxuK1x0XHRlcnJvciA9IGh1Z2VwYWdlX21hZHZpc2Uodm1hLCBuZXdfZmxhZ3MsIGJlaGF2aW9yKTtcbitcdFx0aWYgKGVycm9yKVxuK1x0XHRcdHJldHVybiBlcnJvcjtcbitcdFx0KnVuY2hhcmdlX3Jlc2VydmVkX3RocCA9ICh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1JFU0VSVkVEX1RIUCkgXHUwMDI2XHUwMDI2XG4rXHRcdFx0XHRcdCAhKCpuZXdfZmxhZ3MgXHUwMDI2IFZNX1JFU0VSVkVEX1RIUCk7XG4rXHRcdHJldHVybiAwO1xuK1x0Y2FzZSBNQURWX1JFU0VSVkVEX1RIUDpcbitcdFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR182NEJJVCkpXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdGlmICghdm1hX2lzX2Fub255bW91cyh2bWEpIHx8ICgqbmV3X2ZsYWdzIFx1MDAyNiBWTV9TSEFSRUQpIHx8XG4rXHRcdCAgICAoKm5ld19mbGFncyBcdTAwMjYgVk1fU1BFQ0lBTCkpXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdGlmICghSVNfQUxJR05FRChyYW5nZS1cdTAwM2VzdGFydCwgSFBBR0VfUE1EX1NJWkUpIHx8XG4rXHRcdCAgICAhSVNfQUxJR05FRChyYW5nZS1cdTAwM2VlbmQsIEhQQUdFX1BNRF9TSVpFKSlcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdFx0ZXJyb3IgPSBodWdlcGFnZV9tYWR2aXNlKHZtYSwgbmV3X2ZsYWdzLCBiZWhhdmlvcik7XG4rXHRcdGlmIChlcnJvcilcbitcdFx0XHRyZXR1cm4gZXJyb3I7XG4rXG4rXHRcdGlmICghKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fUkVTRVJWRURfVEhQKSkge1xuK1x0XHRcdGhwYWdlcyA9IHJlc2VydmVkX3RocF9ocGFnZV9ucihyYW5nZS1cdTAwM2VzdGFydCwgcmFuZ2UtXHUwMDNlZW5kKTtcbitcdFx0XHRlcnJvciA9IHJlc2VydmVkX3RocF9jaGFyZ2UoaHBhZ2VzKTtcbitcdFx0XHRpZiAoZXJyb3IpXG4rXHRcdFx0XHRyZXR1cm4gZXJyb3I7XG4rXHRcdFx0KnJlc2VydmVkX2hwYWdlcyA9IGhwYWdlcztcbitcdFx0XHQqY2hhcmdlX3Jlc2VydmVkX3RocCA9IHRydWU7XG4rXHRcdH1cbitcdFx0cmV0dXJuIDA7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbit9XG4rXG4gLypcbiAgKiBBcHBseSBhbiBtYWR2aXNlIGJlaGF2aW9yIHRvIGEgcmVnaW9uIG9mIGEgdm1hLiAgbWFkdmlzZV91cGRhdGVfdm1hXG4gICogd2lsbCBoYW5kbGUgc3BsaXR0aW5nIGEgdm0gYXJlYSBpbnRvIHNlcGFyYXRlIGFyZWFzLCBlYWNoIGFyZWEgd2l0aCBpdHMgb3duXG5AQCAtMTM0Miw2ICsxNDAyLDkgQEAgc3RhdGljIGludCBtYWR2aXNlX3ZtYV9iZWhhdmlvcihzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcbiBcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gbWFkdl9iZWhhdmlvci1cdTAwM2V2bWE7XG4gXHR2bV9mbGFnc190IG5ld19mbGFncyA9IHZtYS1cdTAwM2V2bV9mbGFncztcbiBcdHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yX3JhbmdlICpyYW5nZSA9IFx1MDAyNm1hZHZfYmVoYXZpb3ItXHUwMDNlcmFuZ2U7XG4rXHR1bnNpZ25lZCBsb25nIHJlc2VydmVkX2hwYWdlcyA9IDA7XG4rXHRib29sIGNoYXJnZV9yZXNlcnZlZF90aHAgPSBmYWxzZTtcbitcdGJvb2wgdW5jaGFyZ2VfcmVzZXJ2ZWRfdGhwID0gZmFsc2U7XG4gXHRpbnQgZXJyb3I7XG4gXG4gXHRpZiAodW5saWtlbHkoIWNhbl9tYWR2aXNlX21vZGlmeShtYWR2X2JlaGF2aW9yKSkpXG5AQCAtMTM1MywxNCArMTQxNiwyMiBAQCBzdGF0aWMgaW50IG1hZHZpc2Vfdm1hX2JlaGF2aW9yKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxuIFx0Y2FzZSBNQURWX1dJTExORUVEOlxuIFx0XHRyZXR1cm4gbWFkdmlzZV93aWxsbmVlZChtYWR2X2JlaGF2aW9yKTtcbiBcdGNhc2UgTUFEVl9DT0xEOlxuK1x0XHRpZiAoIXJlc2VydmVkX3RocF9tYWR2aXNlX2FsaWduZWQodm1hLCByYW5nZSkpXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdHJldHVybiBtYWR2aXNlX2NvbGQobWFkdl9iZWhhdmlvcik7XG4gXHRjYXNlIE1BRFZfUEFHRU9VVDpcbitcdFx0aWYgKCFyZXNlcnZlZF90aHBfbWFkdmlzZV9hbGlnbmVkKHZtYSwgcmFuZ2UpKVxuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHRyZXR1cm4gbWFkdmlzZV9wYWdlb3V0KG1hZHZfYmVoYXZpb3IpO1xuIFx0Y2FzZSBNQURWX0ZSRUU6XG4gXHRjYXNlIE1BRFZfRE9OVE5FRUQ6XG4gXHRjYXNlIE1BRFZfRE9OVE5FRURfTE9DS0VEOlxuK1x0XHRpZiAoIXJlc2VydmVkX3RocF9tYWR2aXNlX2FsaWduZWQodm1hLCByYW5nZSkpXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdHJldHVybiBtYWR2aXNlX2RvbnRuZWVkX2ZyZWUobWFkdl9iZWhhdmlvcik7XG4gXHRjYXNlIE1BRFZfQ09MTEFQU0U6XG4rXHRcdGlmICh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1JFU0VSVkVEX1RIUClcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0cmV0dXJuIG1hZHZpc2VfY29sbGFwc2Uodm1hLCByYW5nZS1cdTAwM2VzdGFydCwgcmFuZ2UtXHUwMDNlZW5kLFxuIFx0XHRcdFx1MDAyNm1hZHZfYmVoYXZpb3ItXHUwMDNlbG9ja19kcm9wcGVkKTtcbiBcdGNhc2UgTUFEVl9HVUFSRF9JTlNUQUxMOlxuQEAgLTE0MTYsNyArMTQ4NywxMSBAQCBzdGF0aWMgaW50IG1hZHZpc2Vfdm1hX2JlaGF2aW9yKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxuIFx0XHRicmVhaztcbiBcdGNhc2UgTUFEVl9IVUdFUEFHRTpcbiBcdGNhc2UgTUFEVl9OT0hVR0VQQUdFOlxuLVx0XHRlcnJvciA9IGh1Z2VwYWdlX21hZHZpc2Uodm1hLCBcdTAwMjZuZXdfZmxhZ3MsIGJlaGF2aW9yKTtcbitcdGNhc2UgTUFEVl9SRVNFUlZFRF9USFA6XG4rXHRcdGVycm9yID0gbWFkdmlzZV9odWdlcGFnZV9wb2xpY3kobWFkdl9iZWhhdmlvciwgXHUwMDI2bmV3X2ZsYWdzLFxuK1x0XHRcdFx0XHRcdFx1MDAyNnJlc2VydmVkX2hwYWdlcyxcbitcdFx0XHRcdFx0XHRcdTAwMjZjaGFyZ2VfcmVzZXJ2ZWRfdGhwLFxuK1x0XHRcdFx0XHRcdFx1MDAyNnVuY2hhcmdlX3Jlc2VydmVkX3RocCk7XG4gXHRcdGlmIChlcnJvcilcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0YnJlYWs7XG5AQCAtMTQzMSw2ICsxNTA2LDExIEBAIHN0YXRpYyBpbnQgbWFkdmlzZV92bWFfYmVoYXZpb3Ioc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXG4gXHRWTV9XQVJOX09OX09OQ0UobWFkdl9iZWhhdmlvci1cdTAwM2Vsb2NrX21vZGUgIT0gTUFEVklTRV9NTUFQX1dSSVRFX0xPQ0spO1xuIFxuIFx0ZXJyb3IgPSBtYWR2aXNlX3VwZGF0ZV92bWEobmV3X2ZsYWdzLCBtYWR2X2JlaGF2aW9yKTtcbitcdGlmIChlcnJvciBcdTAwMjZcdTAwMjYgY2hhcmdlX3Jlc2VydmVkX3RocClcbitcdFx0cmVzZXJ2ZWRfdGhwX3VuY2hhcmdlKHJlc2VydmVkX2hwYWdlcyk7XG4rXHRlbHNlIGlmICghZXJyb3IgXHUwMDI2XHUwMDI2IHVuY2hhcmdlX3Jlc2VydmVkX3RocClcbitcdFx0cmVzZXJ2ZWRfdGhwX3VuY2hhcmdlKHJlc2VydmVkX3RocF9ocGFnZV9ucihyYW5nZS1cdTAwM2VzdGFydCxcbitcdFx0XHRcdFx0XHRcdCAgICByYW5nZS1cdTAwM2VlbmQpKTtcbiBvdXQ6XG4gXHQvKlxuIFx0ICogbWFkdmlzZSgpIHJldHVybnMgRUFHQUlOIGlmIGtlcm5lbCByZXNvdXJjZXMsIHN1Y2ggYXNcbkBAIC0xNTQxLDYgKzE2MjEsNyBAQCBtYWR2aXNlX2JlaGF2aW9yX3ZhbGlkKGludCBiZWhhdmlvcilcbiBcdGNhc2UgTUFEVl9IVUdFUEFHRTpcbiBcdGNhc2UgTUFEVl9OT0hVR0VQQUdFOlxuIFx0Y2FzZSBNQURWX0NPTExBUFNFOlxuK1x0Y2FzZSBNQURWX1JFU0VSVkVEX1RIUDpcbiAjZW5kaWZcbiBcdGNhc2UgTUFEVl9ET05URFVNUDpcbiBcdGNhc2UgTUFEVl9ET0RVTVA6XG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuY1xuaW5kZXggZmYzMzhjMmFiZTkyMzEuLjIyNWZjMWFlMjIzODZkIDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LmNcbisrKyBiL21tL21lbW9yeS5jXG5AQCAtNTI5Nyw2ICs1Mjk3LDkgQEAgc3RhdGljIHZtX2ZhdWx0X3QgZG9fYW5vbnltb3VzX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4gXHRpZiAodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9TSEFSRUQpXG4gXHRcdHJldHVybiBWTV9GQVVMVF9TSUdCVVM7XG4gXG4rXHRpZiAodW5saWtlbHkodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9SRVNFUlZFRF9USFApKVxuK1x0XHRyZXR1cm4gVk1fRkFVTFRfT09NO1xuK1xuIFx0LypcbiBcdCAqIFVzZSBwdGVfYWxsb2MoKSBpbnN0ZWFkIG9mIHB0ZV9hbGxvY19tYXAoKSwgc28gdGhhdCBPT00gY2FuXG4gXHQgKiBiZSBkaXN0aW5ndWlzaGVkIGZyb20gYSB0cmFuc2llbnQgZmFpbHVyZSBvZiBwdGVfb2Zmc2V0X21hcCgpLlxuZGlmZiAtLWdpdCBhL21tL21tYXAuYyBiL21tL21tYXAuY1xuaW5kZXggMjMxMWFlN2MyZmY0NWMuLjQ4MThiMTRlYzBmZjZjIDEwMDY0NFxuLS0tIGEvbW0vbW1hcC5jXG4rKysgYi9tbS9tbWFwLmNcbkBAIC0xMjUxLDYgKzEyNTEsNyBAQCB1bnNpZ25lZCBsb25nIHRlYXJfZG93bl92bWFzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWksXG4gXHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGVuZClcbiB7XG4gXHR1bnNpZ25lZCBsb25nIG5yX2FjY291bnRlZCA9IDA7XG4rXHR1bnNpZ25lZCBsb25nIG5yX3Jlc2VydmVkX3RocCA9IDA7XG4gXHRpbnQgY291bnQgPSAwO1xuIFxuIFx0bW1hcF9hc3NlcnRfd3JpdGVfbG9ja2VkKG1tKTtcbkBAIC0xMjU4LDYgKzEyNTksMTAgQEAgdW5zaWduZWQgbG9uZyB0ZWFyX2Rvd25fdm1hcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHZtYV9pdGVyYXRvciAqdm1pLFxuIFx0ZG8ge1xuIFx0XHRpZiAodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9BQ0NPVU5UKVxuIFx0XHRcdG5yX2FjY291bnRlZCArPSB2bWFfcGFnZXModm1hKTtcbitcdFx0aWYgKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fUkVTRVJWRURfVEhQKVxuK1x0XHRcdG5yX3Jlc2VydmVkX3RocCArPVxuK1x0XHRcdFx0cmVzZXJ2ZWRfdGhwX2hwYWdlX25yKHZtYS1cdTAwM2V2bV9zdGFydCxcbitcdFx0XHRcdFx0XHQgICAgICB2bWEtXHUwMDNldm1fZW5kKTtcbiBcdFx0dm1hX21hcmtfZGV0YWNoZWQodm1hKTtcbiBcdFx0cmVtb3ZlX3ZtYSh2bWEpO1xuIFx0XHRjb3VudCsrO1xuQEAgLTEyNjYsNiArMTI3MSw3IEBAIHVuc2lnbmVkIGxvbmcgdGVhcl9kb3duX3ZtYXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSxcbiBcdH0gd2hpbGUgKHZtYSBcdTAwMjZcdTAwMjYgdm1hLVx1MDAzZXZtX2VuZCBcdTAwM2M9IGVuZCk7XG4gXG4gXHRWTV9XQVJOX09OX09OQ0UoY291bnQgIT0gbW0tXHUwMDNlbWFwX2NvdW50KTtcbitcdHJlc2VydmVkX3RocF91bmNoYXJnZShucl9yZXNlcnZlZF90aHApO1xuIFx0cmV0dXJuIG5yX2FjY291bnRlZDtcbiB9XG4gXG5AQCAtMTczMyw2ICsxNzM5LDcgQEAgX19sYXRlbnRfZW50cm9weSBpbnQgZHVwX21tYXAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm9sZG1tKVxuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICptcG50LCAqdG1wO1xuIFx0aW50IHJldHZhbDtcbiBcdHVuc2lnbmVkIGxvbmcgY2hhcmdlID0gMDtcbitcdHVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWRfY2hhcmdlID0gMDtcbiBcdExJU1RfSEVBRCh1Zik7XG4gXHRWTUFfSVRFUkFUT1Iodm1pLCBtbSwgMCk7XG4gXG5AQCAtMTc3NSw2ICsxNzgyLDcgQEAgX19sYXRlbnRfZW50cm9weSBpbnQgZHVwX21tYXAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm9sZG1tKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXHRcdGNoYXJnZSA9IDA7XG4rXHRcdHJlc2VydmVkX2NoYXJnZSA9IDA7XG4gXHRcdGlmIChtcG50LVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9BQ0NPVU5UKSB7XG4gXHRcdFx0dW5zaWduZWQgbG9uZyBsZW4gPSB2bWFfcGFnZXMobXBudCk7XG4gXG5AQCAtMTc4Miw2ICsxNzkwLDE1IEBAIF9fbGF0ZW50X2VudHJvcHkgaW50IGR1cF9tbWFwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgbW1fc3RydWN0ICpvbGRtbSlcbiBcdFx0XHRcdGdvdG8gZmFpbF9ub21lbTtcbiBcdFx0XHRjaGFyZ2UgPSBsZW47XG4gXHRcdH1cbitcdFx0aWYgKG1wbnQtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1JFU0VSVkVEX1RIUCkge1xuK1x0XHRcdHVuc2lnbmVkIGxvbmcgbGVuO1xuK1xuK1x0XHRcdGxlbiA9IHJlc2VydmVkX3RocF9ocGFnZV9ucihtcG50LVx1MDAzZXZtX3N0YXJ0LFxuK1x0XHRcdFx0XHRcdCAgICBtcG50LVx1MDAzZXZtX2VuZCk7XG4rXHRcdFx0aWYgKHJlc2VydmVkX3RocF9jaGFyZ2UobGVuKSlcbitcdFx0XHRcdGdvdG8gZmFpbF9ub21lbTtcbitcdFx0XHRyZXNlcnZlZF9jaGFyZ2UgPSBsZW47XG4rXHRcdH1cbiBcbiBcdFx0dG1wID0gdm1fYXJlYV9kdXAobXBudCk7XG4gXHRcdGlmICghdG1wKVxuQEAgLTE5MTYsNiArMTkzMyw3IEBAIF9fbGF0ZW50X2VudHJvcHkgaW50IGR1cF9tbWFwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgbW1fc3RydWN0ICpvbGRtbSlcbiBcdHZtX2FyZWFfZnJlZSh0bXApO1xuIGZhaWxfbm9tZW06XG4gXHRyZXR2YWwgPSAtRU5PTUVNO1xuK1x0cmVzZXJ2ZWRfdGhwX3VuY2hhcmdlKHJlc2VydmVkX2NoYXJnZSk7XG4gXHR2bV91bmFjY3RfbWVtb3J5KGNoYXJnZSk7XG4gXHRnb3RvIGxvb3Bfb3V0O1xuIH1cbmRpZmYgLS1naXQgYS9tbS9tcmVtYXAuYyBiL21tL21yZW1hcC5jXG5pbmRleCBlOWM4YjFkMDU4MzJiZS4uYWUzN2UwYjNjZTc4OGUgMTAwNjQ0XG4tLS0gYS9tbS9tcmVtYXAuY1xuKysrIGIvbW0vbXJlbWFwLmNcbkBAIC0yNCw2ICsyNCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW11X25vdGlmaWVyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91YWNjZXNzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91c2VyZmF1bHRmZF9rLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9odWdlX21tLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1wb2xpY3kuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BnYWxsb2MuaFx1MDAzZVxuIFxuQEAgLTY5LDYgKzcwLDcgQEAgc3RydWN0IHZtYV9yZW1hcF9zdHJ1Y3Qge1xuIFx0ZW51bSBtcmVtYXBfdHlwZSByZW1hcF90eXBlO1x0LyogZXhwYW5kLCBzaHJpbmssIGV0Yy4gKi9cbiBcdGJvb2wgbW1hcF9sb2NrZWQ7XHRcdC8qIElzIG1tIGN1cnJlbnRseSB3cml0ZS1sb2NrZWQ/ICovXG4gXHR1bnNpZ25lZCBsb25nIGNoYXJnZWQ7XHRcdC8qIElmIFZNX0FDQ09VTlQsICMgcGFnZXMgdG8gYWNjb3VudC4gKi9cbitcdHVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWRfdGhwX2NoYXJnZWQ7IC8qIElmIFZNX1JFU0VSVkVEX1RIUCwgIyBocGFnZXMuICovXG4gXHRib29sIHZtaV9uZWVkc19pbnZhbGlkYXRlO1x0LyogSXMgdGhlIFZNQSBpdGVyYXRvciBpbnZhbGlkYXRlZD8gKi9cbiB9O1xuIFxuQEAgLTk2Miw2ICs5NjQsOSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyB2cm1fc2V0X25ld19hZGRyKHN0cnVjdCB2bWFfcmVtYXBfc3RydWN0ICp2cm0pXG4gXHRcdFx0XHRtYXBfZmxhZ3MpO1xuIFx0aWYgKElTX0VSUl9WQUxVRShyZXMpKVxuIFx0XHRyZXR1cm4gcmVzO1xuK1x0aWYgKCh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1JFU0VSVkVEX1RIUCkgXHUwMDI2XHUwMDI2XG4rXHQgICAgIUlTX0FMSUdORUQocmVzLCBIUEFHRV9QTURfU0laRSkpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuIFx0dnJtLVx1MDAzZW5ld19hZGRyID0gcmVzO1xuIFx0cmV0dXJuIDA7XG5AQCAtOTc3LDI0ICs5ODIsNDQgQEAgc3RhdGljIGJvb2wgdnJtX2NhbGNfY2hhcmdlKHN0cnVjdCB2bWFfcmVtYXBfc3RydWN0ICp2cm0pXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBjaGFyZ2VkO1xuIFxuLVx0aWYgKCEodnJtLVx1MDAzZXZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fQUNDT1VOVCkpXG4tXHRcdHJldHVybiB0cnVlO1xuK1x0dnJtLVx1MDAzZWNoYXJnZWQgPSAwO1xuK1x0dnJtLVx1MDAzZXJlc2VydmVkX3RocF9jaGFyZ2VkID0gMDtcbiBcbi1cdC8qXG4tXHQgKiBJZiB3ZSBkb24ndCB1bm1hcCB0aGUgb2xkIG1hcHBpbmcsIHRoZW4gd2UgYWNjb3VudCB0aGUgZW50aXJldHkgb2Zcbi1cdCAqIHRoZSBsZW5ndGggb2YgdGhlIG5ldyBvbmUuIE90aGVyd2lzZSBpdCdzIGp1c3QgdGhlIGRlbHRhIGluIHNpemUuXG4tXHQgKi9cbi1cdGlmICh2cm0tXHUwMDNlZmxhZ3MgXHUwMDI2IE1SRU1BUF9ET05UVU5NQVApXG4tXHRcdGNoYXJnZWQgPSB2cm0tXHUwMDNlbmV3X2xlbiBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbi1cdGVsc2Vcbi1cdFx0Y2hhcmdlZCA9IHZybS1cdTAwM2VkZWx0YSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbitcdGlmICh2cm0tXHUwMDNldm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9BQ0NPVU5UKSB7XG4rXHRcdC8qXG4rXHRcdCAqIElmIHdlIGRvbid0IHVubWFwIHRoZSBvbGQgbWFwcGluZywgdGhlbiB3ZSBhY2NvdW50IHRoZVxuK1x0XHQgKiBlbnRpcmV0eSBvZiB0aGUgbGVuZ3RoIG9mIHRoZSBuZXcgb25lLiBPdGhlcndpc2UgaXQncyBqdXN0XG4rXHRcdCAqIHRoZSBkZWx0YSBpbiBzaXplLlxuK1x0XHQgKi9cbitcdFx0aWYgKHZybS1cdTAwM2VmbGFncyBcdTAwMjYgTVJFTUFQX0RPTlRVTk1BUClcbitcdFx0XHRjaGFyZ2VkID0gdnJtLVx1MDAzZW5ld19sZW4gXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4rXHRcdGVsc2VcbitcdFx0XHRjaGFyZ2VkID0gdnJtLVx1MDAzZWRlbHRhIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuIFxuIFxuLVx0LyogVGhpcyBhY2NvdW50cyAnY2hhcmdlZCcgcGFnZXMgb2YgbWVtb3J5LiAqL1xuLVx0aWYgKHNlY3VyaXR5X3ZtX2Vub3VnaF9tZW1vcnlfbW0oY3VycmVudC1cdTAwM2VtbSwgY2hhcmdlZCkpXG4tXHRcdHJldHVybiBmYWxzZTtcbitcdFx0LyogVGhpcyBhY2NvdW50cyAnY2hhcmdlZCcgcGFnZXMgb2YgbWVtb3J5LiAqL1xuK1x0XHRpZiAoc2VjdXJpdHlfdm1fZW5vdWdoX21lbW9yeV9tbShjdXJyZW50LVx1MDAzZW1tLCBjaGFyZ2VkKSlcbitcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4tXHR2cm0tXHUwMDNlY2hhcmdlZCA9IGNoYXJnZWQ7XG4rXHRcdHZybS1cdTAwM2VjaGFyZ2VkID0gY2hhcmdlZDtcbitcdH1cbitcbitcdGlmICh2cm0tXHUwMDNldm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9SRVNFUlZFRF9USFApIHtcbitcdFx0dW5zaWduZWQgbG9uZyBocGFnZXM7XG4rXG4rXHRcdGlmICh2cm0tXHUwMDNlZmxhZ3MgXHUwMDI2IE1SRU1BUF9ET05UVU5NQVApXG4rXHRcdFx0aHBhZ2VzID0gcmVzZXJ2ZWRfdGhwX2hwYWdlX25yKDAsIHZybS1cdTAwM2VuZXdfbGVuKTtcbitcdFx0ZWxzZVxuK1x0XHRcdGhwYWdlcyA9IHJlc2VydmVkX3RocF9ocGFnZV9ucigwLCB2cm0tXHUwMDNlZGVsdGEpO1xuK1xuK1x0XHRpZiAocmVzZXJ2ZWRfdGhwX2NoYXJnZShocGFnZXMpKSB7XG4rXHRcdFx0dm1fdW5hY2N0X21lbW9yeSh2cm0tXHUwMDNlY2hhcmdlZCk7XG4rXHRcdFx0dnJtLVx1MDAzZWNoYXJnZWQgPSAwO1xuK1x0XHRcdHJldHVybiBmYWxzZTtcbitcdFx0fVxuK1xuK1x0XHR2cm0tXHUwMDNlcmVzZXJ2ZWRfdGhwX2NoYXJnZWQgPSBocGFnZXM7XG4rXHR9XG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG5AQCAtMTAwNCwxMSArMTAyOSwxMCBAQCBzdGF0aWMgYm9vbCB2cm1fY2FsY19jaGFyZ2Uoc3RydWN0IHZtYV9yZW1hcF9zdHJ1Y3QgKnZybSlcbiAgKi9cbiBzdGF0aWMgdm9pZCB2cm1fdW5jaGFyZ2Uoc3RydWN0IHZtYV9yZW1hcF9zdHJ1Y3QgKnZybSlcbiB7XG4tXHRpZiAoISh2cm0tXHUwMDNldm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9BQ0NPVU5UKSlcbi1cdFx0cmV0dXJuO1xuLVxuIFx0dm1fdW5hY2N0X21lbW9yeSh2cm0tXHUwMDNlY2hhcmdlZCk7XG4gXHR2cm0tXHUwMDNlY2hhcmdlZCA9IDA7XG4rXHRyZXNlcnZlZF90aHBfdW5jaGFyZ2UodnJtLVx1MDAzZXJlc2VydmVkX3RocF9jaGFyZ2VkKTtcbitcdHZybS1cdTAwM2VyZXNlcnZlZF90aHBfY2hhcmdlZCA9IDA7XG4gfVxuIFxuIC8qXG5AQCAtMTE1Nyw4ICsxMTgxLDggQEAgc3RhdGljIHZvaWQgdW5tYXBfc291cmNlX3ZtYShzdHJ1Y3Qgdm1hX3JlbWFwX3N0cnVjdCAqdnJtKVxuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB2cm0tXHUwMDNldm1hO1xuIFx0Vk1BX0lURVJBVE9SKHZtaSwgbW0sIGFkZHIpO1xuIFx0aW50IGVycjtcbi1cdHVuc2lnbmVkIGxvbmcgdm1fc3RhcnQ7XG4tXHR1bnNpZ25lZCBsb25nIHZtX2VuZDtcbitcdHVuc2lnbmVkIGxvbmcgdm1fc3RhcnQgPSAwO1xuK1x0dW5zaWduZWQgbG9uZyB2bV9lbmQgPSAwO1xuIFx0LypcbiBcdCAqIEl0IG1pZ2h0IHNlZW0gb2RkIHRoYXQgd2UgY2hlY2sgZm9yIE1SRU1BUF9ET05UVU5NQVAgaGVyZSwgZ2l2ZW4gdGhpc1xuIFx0ICogZnVuY3Rpb24gaW1wbGllcyB0aGF0IHdlIHVubWFwIHRoZSBvcmlnaW5hbCBWTUEsIHdoaWNoIHNlZW1zXG5AQCAtMTE3MCw2ICsxMTk0LDggQEAgc3RhdGljIHZvaWQgdW5tYXBfc291cmNlX3ZtYShzdHJ1Y3Qgdm1hX3JlbWFwX3N0cnVjdCAqdnJtKVxuIFx0ICovXG4gXHRib29sIGFjY291bnRhYmxlX21vdmUgPSAodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9BQ0NPVU5UKSBcdTAwMjZcdTAwMjZcbiBcdFx0ISh2cm0tXHUwMDNlZmxhZ3MgXHUwMDI2IE1SRU1BUF9ET05UVU5NQVApO1xuK1x0Ym9vbCByZXNlcnZlZF90aHBfbW92ZSA9ICh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1JFU0VSVkVEX1RIUCkgXHUwMDI2XHUwMDI2XG4rXHRcdCEodnJtLVx1MDAzZWZsYWdzIFx1MDAyNiBNUkVNQVBfRE9OVFVOTUFQKTtcbiBcbiBcdC8qXG4gXHQgKiBTbyB3ZSBwZXJmb3JtIGEgdHJpY2sgaGVyZSB0byBwcmV2ZW50IGluY29ycmVjdCBhY2NvdW50aW5nLiBBbnkgbWVyZ2VcbkBAIC0xMTkyLDYgKzEyMTgsMTMgQEAgc3RhdGljIHZvaWQgdW5tYXBfc291cmNlX3ZtYShzdHJ1Y3Qgdm1hX3JlbWFwX3N0cnVjdCAqdnJtKVxuIFx0XHR2bV9zdGFydCA9IHZtYS1cdTAwM2V2bV9zdGFydDtcbiBcdFx0dm1fZW5kID0gdm1hLVx1MDAzZXZtX2VuZDtcbiBcdH1cbitcdGlmIChyZXNlcnZlZF90aHBfbW92ZSkge1xuK1x0XHR2bV9mbGFnc19jbGVhcih2bWEsIFZNX1JFU0VSVkVEX1RIUCk7XG4rXHRcdGlmICghYWNjb3VudGFibGVfbW92ZSkge1xuK1x0XHRcdHZtX3N0YXJ0ID0gdm1hLVx1MDAzZXZtX3N0YXJ0O1xuK1x0XHRcdHZtX2VuZCA9IHZtYS1cdTAwM2V2bV9lbmQ7XG4rXHRcdH1cbitcdH1cbiBcbiBcdGVyciA9IGRvX3ZtaV9tdW5tYXAoXHUwMDI2dm1pLCBtbSwgYWRkciwgbGVuLCB2cm0tXHUwMDNldWZfdW5tYXAsIC8qIHVubG9jaz0gKi9mYWxzZSk7XG4gXHR2cm0tXHUwMDNldm1hID0gTlVMTDsgLyogSW52YWxpZGF0ZWQuICovXG5AQCAtMTIyNywxOSArMTI2MCwyNyBAQCBzdGF0aWMgdm9pZCB1bm1hcF9zb3VyY2Vfdm1hKHN0cnVjdCB2bWFfcmVtYXBfc3RydWN0ICp2cm0pXG4gXHQgKlxuIFx0ICogZG9fdm1pX211bm1hcCgpIHdpbGwgaGF2ZSByZXN0b3JlZCB0aGUgVk1JIGJhY2sgdG8gYWRkci5cbiBcdCAqL1xuLVx0aWYgKGFjY291bnRhYmxlX21vdmUpIHtcbitcdGlmIChhY2NvdW50YWJsZV9tb3ZlIHx8IHJlc2VydmVkX3RocF9tb3ZlKSB7XG4gXHRcdHVuc2lnbmVkIGxvbmcgZW5kID0gYWRkciArIGxlbjtcbi1cbi1cdFx0aWYgKHZtX3N0YXJ0IFx1MDAzYyBhZGRyKSB7XG4tXHRcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICpwcmV2ID0gdm1hX3ByZXYoXHUwMDI2dm1pKTtcbi1cbi1cdFx0XHR2bV9mbGFnc19zZXQocHJldiwgVk1fQUNDT1VOVCk7IC8qIEFjcXVpcmVzIFZNQSBsb2NrLiAqL1xuK1x0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnByZXYgPSBOVUxMO1xuK1x0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKm5leHQgPSBOVUxMO1xuK1xuK1x0XHRpZiAodm1fc3RhcnQgXHUwMDNjIGFkZHIpXG4rXHRcdFx0cHJldiA9IHZtYV9wcmV2KFx1MDAyNnZtaSk7XG4rXHRcdGlmICh2bV9lbmQgXHUwMDNlIGVuZClcbitcdFx0XHRuZXh0ID0gdm1hX25leHQoXHUwMDI2dm1pKTtcbitcbitcdFx0aWYgKGFjY291bnRhYmxlX21vdmUpIHtcbitcdFx0XHRpZiAocHJldilcbitcdFx0XHRcdHZtX2ZsYWdzX3NldChwcmV2LCBWTV9BQ0NPVU5UKTsgLyogQWNxdWlyZXMgVk1BIGxvY2suICovXG4rXHRcdFx0aWYgKG5leHQpXG4rXHRcdFx0XHR2bV9mbGFnc19zZXQobmV4dCwgVk1fQUNDT1VOVCk7IC8qIEFjcXVpcmVzIFZNQSBsb2NrLiAqL1xuIFx0XHR9XG4tXG4tXHRcdGlmICh2bV9lbmQgXHUwMDNlIGVuZCkge1xuLVx0XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqbmV4dCA9IHZtYV9uZXh0KFx1MDAyNnZtaSk7XG4tXG4tXHRcdFx0dm1fZmxhZ3Nfc2V0KG5leHQsIFZNX0FDQ09VTlQpOyAvKiBBY3F1aXJlcyBWTUEgbG9jay4gKi9cbitcdFx0aWYgKHJlc2VydmVkX3RocF9tb3ZlKSB7XG4rXHRcdFx0aWYgKHByZXYpXG4rXHRcdFx0XHR2bV9mbGFnc19zZXQocHJldiwgVk1fUkVTRVJWRURfVEhQKTtcbitcdFx0XHRpZiAobmV4dClcbitcdFx0XHRcdHZtX2ZsYWdzX3NldChuZXh0LCBWTV9SRVNFUlZFRF9USFApO1xuIFx0XHR9XG4gXHR9XG4gfVxuQEAgLTEzMDksNyArMTM1MCw2IEBAIHN0YXRpYyBpbnQgY29weV92bWFfYW5kX2RhdGEoc3RydWN0IHZtYV9yZW1hcF9zdHJ1Y3QgKnZybSxcbiBcdCpuZXdfdm1hX3B0ciA9IG5ld192bWE7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbi1cbiAvKlxuICAqIFBlcmZvcm0gZmluYWwgdGFza3MgZm9yIE1BRFZfRE9OVFVOTUFQIG9wZXJhdGlvbiwgY2xlYXJpbmcgbWxvY2soKSBmbGFnIG9uXG4gICogcmVtYWluaW5nIFZNQSBieSBjb252ZW50aW9uIChpdCBjYW5ub3QgYmUgbWxvY2soKSdkIGFueSBsb25nZXIsIGFzIHBhZ2VzIGluXG5AQCAtMTU3Niw2ICsxNjE2LDIzIEBAIHN0YXRpYyBib29sIGFsaWduX2h1Z2V0bGIoc3RydWN0IHZtYV9yZW1hcF9zdHJ1Y3QgKnZybSlcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbitzdGF0aWMgYm9vbCBjaGVja19yZXNlcnZlZF90aHBfYWxpZ25tZW50KHN0cnVjdCB2bWFfcmVtYXBfc3RydWN0ICp2cm0pXG4re1xuK1x0aWYgKCEodnJtLVx1MDAzZXZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fUkVTRVJWRURfVEhQKSlcbitcdFx0cmV0dXJuIHRydWU7XG4rXG4rXHRpZiAoIUlTX0FMSUdORUQodnJtLVx1MDAzZWFkZHIsIEhQQUdFX1BNRF9TSVpFKSB8fFxuK1x0ICAgICFJU19BTElHTkVEKHZybS1cdTAwM2VvbGRfbGVuLCBIUEFHRV9QTURfU0laRSkgfHxcbitcdCAgICAhSVNfQUxJR05FRCh2cm0tXHUwMDNlbmV3X2xlbiwgSFBBR0VfUE1EX1NJWkUpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRpZiAoKHZybS1cdTAwM2VyZW1hcF90eXBlID09IE1SRU1BUF9FWFBBTkQgfHwgdnJtX2ltcGxpZXNfbmV3X2FkZHIodnJtKSkgXHUwMDI2XHUwMDI2XG4rXHQgICAgIUlTX0FMSUdORUQodnJtLVx1MDAzZW5ld19hZGRyLCBIUEFHRV9QTURfU0laRSkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdHJldHVybiB0cnVlO1xuK31cbitcbiAvKlxuICAqIFdlIGFyZSBtcmVtYXAoKSdpbmcgd2l0aG91dCBzcGVjaWZ5aW5nIGEgZml4ZWQgYWRkcmVzcyB0byBtb3ZlIHRvLCBidXQgYXJlXG4gICogcmVxdWVzdGluZyB0aGF0IHRoZSBWTUEncyBzaXplIGJlIGluY3JlYXNlZC5cbkBAIC0xNzQ1LDYgKzE4MDIsOCBAQCBzdGF0aWMgaW50IGNoZWNrX3ByZXBfdm1hKHN0cnVjdCB2bWFfcmVtYXBfc3RydWN0ICp2cm0pXG4gXHQvKiBGb3IgY29udmVuaWVuY2UsIHdlIHNldCBuZXdfYWRkciBldmVuIGlmIFZNQSB3b24ndCBtb3ZlLiAqL1xuIFx0aWYgKCF2cm1faW1wbGllc19uZXdfYWRkcih2cm0pKVxuIFx0XHR2cm0tXHUwMDNlbmV3X2FkZHIgPSBhZGRyO1xuK1x0aWYgKCFjaGVja19yZXNlcnZlZF90aHBfYWxpZ25tZW50KHZybSkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0LyogQmVsb3cgb25seSBtZWFuaW5nZnVsIGlmIHdlIGV4cGFuZCBvciBtb3ZlIGEgVk1BLiAqL1xuIFx0aWYgKCF2cm1fd2lsbF9tYXBfbmV3KHZybSkpXG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9hbGxvYy5jIGIvbW0vcGFnZV9hbGxvYy5jXG5pbmRleCBlZTkwMmE0NjhjMmY1Yi4uNjYwZTUwMWJmNjc2YjYgMTAwNjQ0XG4tLS0gYS9tbS9wYWdlX2FsbG9jLmNcbisrKyBiL21tL3BhZ2VfYWxsb2MuY1xuQEAgLTI2Myw2ICsyNjMsNyBAQCBjb25zdCBjaGFyICogY29uc3QgbWlncmF0ZXR5cGVfbmFtZXNbTUlHUkFURV9UWVBFU10gPSB7XG4gI2lmZGVmIENPTkZJR19DTUFcbiBcdFwiQ01BXCIsXG4gI2VuZGlmXG4rXHRcIlJlc2VydmVUSFBcIixcbiAjaWZkZWYgQ09ORklHX01FTU9SWV9JU09MQVRJT05cbiBcdFwiSXNvbGF0ZVwiLFxuICNlbmRpZlxuQEAgLTc4NCw2ICs3ODUsOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYWNjb3VudF9mcmVlcGFnZXMoc3RydWN0IHpvbmUgKnpvbmUsIGludCBucl9wYWdlcyxcbiBcdGVsc2UgaWYgKG1pZ3JhdGV0eXBlID09IE1JR1JBVEVfSElHSEFUT01JQylcbiBcdFx0V1JJVEVfT05DRSh6b25lLVx1MDAzZW5yX2ZyZWVfaGlnaGF0b21pYyxcbiBcdFx0XHQgICB6b25lLVx1MDAzZW5yX2ZyZWVfaGlnaGF0b21pYyArIG5yX3BhZ2VzKTtcbitcdGVsc2UgaWYgKG1pZ3JhdGV0eXBlID09IE1JR1JBVEVfUkVTRVJWRURfVEhQKVxuK1x0XHRXUklURV9PTkNFKHpvbmUtXHUwMDNlbnJfZnJlZV9yZXNlcnZlZF90aHAsXG4rXHRcdFx0ICAgem9uZS1cdTAwM2Vucl9mcmVlX3Jlc2VydmVkX3RocCArIG5yX3BhZ2VzKTtcbiB9XG4gXG4gLyogVXNlZCBmb3IgcGFnZXMgbm90IG9uIGFub3RoZXIgbGlzdCAqL1xuQEAgLTI0NTYsNiArMjQ2MCw5IEBAIF9fcm1xdWV1ZShzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgaW50IG9yZGVyLCBpbnQgbWlncmF0ZXR5cGUsXG4ge1xuIFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4gXG4rXHRpZiAoYWxsb2NfZmxhZ3MgXHUwMDI2IEFMTE9DX1JFU0VSVkVEX1RIUClcbitcdFx0cmV0dXJuIF9fcm1xdWV1ZV9zbWFsbGVzdCh6b25lLCBvcmRlciwgTUlHUkFURV9SRVNFUlZFRF9USFApO1xuK1xuIFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0NNQSkpIHtcbiBcdFx0LypcbiBcdFx0ICogQmFsYW5jZSBtb3ZhYmxlIGFsbG9jYXRpb25zIGJldHdlZW4gcmVndWxhciBhbmQgQ01BIGFyZWFzIGJ5XG5AQCAtMjk2MCw3ICsyOTY3LDggQEAgc3RhdGljIHZvaWQgX19mcmVlX2Zyb3plbl9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLFxuIFx0em9uZSA9IHBhZ2Vfem9uZShwYWdlKTtcbiBcdG1pZ3JhdGV0eXBlID0gZ2V0X3BmbmJsb2NrX21pZ3JhdGV0eXBlKHBhZ2UsIHBmbik7XG4gXHRpZiAodW5saWtlbHkobWlncmF0ZXR5cGUgXHUwMDNlPSBNSUdSQVRFX1BDUFRZUEVTKSkge1xuLVx0XHRpZiAodW5saWtlbHkoaXNfbWlncmF0ZV9pc29sYXRlKG1pZ3JhdGV0eXBlKSkpIHtcbitcdFx0aWYgKHVubGlrZWx5KGlzX21pZ3JhdGVfcmVzZXJ2ZWRfdGhwKG1pZ3JhdGV0eXBlKSB8fFxuK1x0XHRcdCAgICAgaXNfbWlncmF0ZV9pc29sYXRlKG1pZ3JhdGV0eXBlKSkpIHtcbiBcdFx0XHRmcmVlX29uZV9wYWdlKHpvbmUsIHBhZ2UsIHBmbiwgb3JkZXIsIGZwaV9mbGFncyk7XG4gXHRcdFx0cmV0dXJuO1xuIFx0XHR9XG5AQCAtMzAzOCw2ICszMDQ2LDcgQEAgdm9pZCBmcmVlX3VucmVmX2ZvbGlvcyhzdHJ1Y3QgZm9saW9fYmF0Y2ggKmZvbGlvcylcbiBcbiBcdFx0LyogRGlmZmVyZW50IHpvbmUgcmVxdWlyZXMgYSBkaWZmZXJlbnQgcGNwIGxvY2sgKi9cbiBcdFx0aWYgKHpvbmUgIT0gbG9ja2VkX3pvbmUgfHxcbitcdFx0ICAgIGlzX21pZ3JhdGVfcmVzZXJ2ZWRfdGhwKG1pZ3JhdGV0eXBlKSB8fFxuIFx0XHQgICAgaXNfbWlncmF0ZV9pc29sYXRlKG1pZ3JhdGV0eXBlKSkge1xuIFx0XHRcdGlmIChwY3ApIHtcbiBcdFx0XHRcdHBjcF9zcGluX3VubG9jayhwY3ApO1xuQEAgLTMwNDUsNiArMzA1NCwxMiBAQCB2b2lkIGZyZWVfdW5yZWZfZm9saW9zKHN0cnVjdCBmb2xpb19iYXRjaCAqZm9saW9zKVxuIFx0XHRcdFx0cGNwID0gTlVMTDtcbiBcdFx0XHR9XG4gXG4rXHRcdFx0aWYgKGlzX21pZ3JhdGVfcmVzZXJ2ZWRfdGhwKG1pZ3JhdGV0eXBlKSkge1xuK1x0XHRcdFx0ZnJlZV9vbmVfcGFnZSh6b25lLCBcdTAwMjZmb2xpby1cdTAwM2VwYWdlLCBwZm4sXG4rXHRcdFx0XHRcdCAgICAgIG9yZGVyLCBGUElfTk9ORSk7XG4rXHRcdFx0XHRjb250aW51ZTtcbitcdFx0XHR9XG4rXG4gXHRcdFx0LypcbiBcdFx0XHQgKiBGcmVlIGlzb2xhdGVkIHBhZ2VzIGRpcmVjdGx5IHRvIHRoZVxuIFx0XHRcdCAqIGFsbG9jYXRvciwgc2VlIGNvbW1lbnQgaW4gZnJlZV9mcm96ZW5fcGFnZXMuXG5AQCAtMzIzNSw3ICszMjUwLDggQEAgc3RydWN0IHBhZ2UgKnJtcXVldWVfYnVkZHkoc3RydWN0IHpvbmUgKnByZWZlcnJlZF96b25lLCBzdHJ1Y3Qgem9uZSAqem9uZSxcbiBcdFx0XHQgKiByZXNlcnZlcyBhcyBmYWlsaW5nIG5vdyBpcyB3b3JzZSB0aGFuIGZhaWxpbmcgYVxuIFx0XHRcdCAqIGhpZ2gtb3JkZXIgYXRvbWljIGFsbG9jYXRpb24gaW4gdGhlIGZ1dHVyZS5cbiBcdFx0XHQgKi9cbi1cdFx0XHRpZiAoIXBhZ2UgXHUwMDI2XHUwMDI2IChhbGxvY19mbGFncyBcdTAwMjYgKEFMTE9DX09PTXxBTExPQ19OT05fQkxPQ0spKSlcbitcdFx0XHRpZiAoIXBhZ2UgXHUwMDI2XHUwMDI2ICEoYWxsb2NfZmxhZ3MgXHUwMDI2IEFMTE9DX1JFU0VSVkVEX1RIUCkgXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICAgIChhbGxvY19mbGFncyBcdTAwMjYgKEFMTE9DX09PTXxBTExPQ19OT05fQkxPQ0spKSlcbiBcdFx0XHRcdHBhZ2UgPSBfX3JtcXVldWVfc21hbGxlc3Qoem9uZSwgb3JkZXIsIE1JR1JBVEVfSElHSEFUT01JQyk7XG4gXG4gXHRcdFx0aWYgKCFwYWdlKSB7XG5AQCAtMzQwNSw3ICszNDIxLDggQEAgc3RydWN0IHBhZ2UgKnJtcXVldWUoc3RydWN0IHpvbmUgKnByZWZlcnJlZF96b25lLFxuIHtcbiBcdHN0cnVjdCBwYWdlICpwYWdlO1xuIFxuLVx0aWYgKGxpa2VseShwY3BfYWxsb3dlZF9vcmRlcihvcmRlcikpKSB7XG4rXHRpZiAobGlrZWx5KHBjcF9hbGxvd2VkX29yZGVyKG9yZGVyKSkgXHUwMDI2XHUwMDI2XG4rXHQgICAgIShhbGxvY19mbGFncyBcdTAwMjYgQUxMT0NfUkVTRVJWRURfVEhQKSkge1xuIFx0XHRwYWdlID0gcm1xdWV1ZV9wY3BsaXN0KHByZWZlcnJlZF96b25lLCB6b25lLCBvcmRlcixcbiBcdFx0XHRcdCAgICAgICBtaWdyYXRldHlwZSwgYWxsb2NfZmxhZ3MpO1xuIFx0XHRpZiAobGlrZWx5KHBhZ2UpKVxuQEAgLTM1NTYsNiArMzU3MywzNSBAQCBzdGF0aWMgYm9vbCB1bnJlc2VydmVfaGlnaGF0b21pY19wYWdlYmxvY2soY29uc3Qgc3RydWN0IGFsbG9jX2NvbnRleHQgKmFjLFxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbit1bnNpZ25lZCBsb25nIHJlc2VydmVkX3RocF9wYWdlYmxvY2tzKHVuc2lnbmVkIGxvbmcgbnJfaHBhZ2VzKVxuK3tcbitcdHVuc2lnbmVkIGludCBvcmRlciA9IG1heF90KHVuc2lnbmVkIGludCwgSFBBR0VfUE1EX09SREVSLFxuK1x0XHRcdFx0ICAgcGFnZWJsb2NrX29yZGVyKTtcbitcdHVuc2lnbmVkIGxvbmcgaHBhZ2VzX3Blcl9ibG9jayA9IDFVTCBcdTAwM2NcdTAwM2MgKG9yZGVyIC0gSFBBR0VfUE1EX09SREVSKTtcbitcdHVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWQgPSAwO1xuK1x0Z2ZwX3QgZ2ZwID0gKEdGUF9ISUdIVVNFUiB8IF9fR0ZQX0NPTVAgfCBfX0dGUF9OT01FTUFMTE9DIHxcbitcdFx0ICAgICBfX0dGUF9OT1dBUk4gfCBfX0dGUF9OT1JFVFJZKTtcbitcbitcdHdoaWxlIChyZXNlcnZlZCBcdTAwM2MgbnJfaHBhZ2VzKSB7XG4rXHRcdHN0cnVjdCBwYWdlICpwYWdlO1xuK1x0XHRzdHJ1Y3Qgem9uZSAqem9uZTtcbitcdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbitcbitcdFx0cGFnZSA9IGFsbG9jX3BhZ2VzKGdmcCwgb3JkZXIpO1xuK1x0XHRpZiAoIXBhZ2UpXG4rXHRcdFx0YnJlYWs7XG4rXG4rXHRcdHpvbmUgPSBwYWdlX3pvbmUocGFnZSk7XG4rXHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnpvbmUtXHUwMDNlbG9jaywgZmxhZ3MpO1xuK1x0XHRjaGFuZ2VfcGFnZWJsb2NrX3JhbmdlKHBhZ2UsIG9yZGVyLCBNSUdSQVRFX1JFU0VSVkVEX1RIUCk7XG4rXHRcdHpvbmUtXHUwMDNlbnJfcmVzZXJ2ZWRfdGhwICs9IDFVTCBcdTAwM2NcdTAwM2Mgb3JkZXI7XG4rXHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2em9uZS1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXHRcdF9fZnJlZV9wYWdlcyhwYWdlLCBvcmRlcik7XG4rXHRcdHJlc2VydmVkICs9IGhwYWdlc19wZXJfYmxvY2s7XG4rXHR9XG4rXHRyZXR1cm4gcmVzZXJ2ZWQ7XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgbG9uZyBfX3pvbmVfd2F0ZXJtYXJrX3VudXNhYmxlX2ZyZWUoc3RydWN0IHpvbmUgKnosXG4gXHRcdFx0XHR1bnNpZ25lZCBpbnQgb3JkZXIsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncylcbiB7XG5AQCAtMzU2OCw2ICszNjE0LDkgQEAgc3RhdGljIGlubGluZSBsb25nIF9fem9uZV93YXRlcm1hcmtfdW51c2FibGVfZnJlZShzdHJ1Y3Qgem9uZSAqeixcbiBcdGlmIChsaWtlbHkoIShhbGxvY19mbGFncyBcdTAwMjYgQUxMT0NfUkVTRVJWRVMpKSlcbiBcdFx0dW51c2FibGVfZnJlZSArPSBSRUFEX09OQ0Uoei1cdTAwM2Vucl9mcmVlX2hpZ2hhdG9taWMpO1xuIFxuK1x0aWYgKCEoYWxsb2NfZmxhZ3MgXHUwMDI2IEFMTE9DX1JFU0VSVkVEX1RIUCkpXG4rXHRcdHVudXNhYmxlX2ZyZWUgKz0gUkVBRF9PTkNFKHotXHUwMDNlbnJfZnJlZV9yZXNlcnZlZF90aHApO1xuK1xuICNpZmRlZiBDT05GSUdfQ01BXG4gXHQvKiBJZiBhbGxvY2F0aW9uIGNhbid0IHVzZSBDTUEgYXJlYXMgZG9uJ3QgdXNlIGZyZWUgQ01BIHBhZ2VzICovXG4gXHRpZiAoIShhbGxvY19mbGFncyBcdTAwMjYgQUxMT0NfQ01BKSlcbkBAIC0zNjQyLDYgKzM2OTEsMTIgQEAgYm9vbCBfX3pvbmVfd2F0ZXJtYXJrX29rKHN0cnVjdCB6b25lICp6LCB1bnNpZ25lZCBpbnQgb3JkZXIsIHVuc2lnbmVkIGxvbmcgbWFyayxcbiBcdFx0aWYgKCFhcmVhLVx1MDAzZW5yX2ZyZWUpXG4gXHRcdFx0Y29udGludWU7XG4gXG4rXHRcdGlmIChhbGxvY19mbGFncyBcdTAwMjYgQUxMT0NfUkVTRVJWRURfVEhQKSB7XG4rXHRcdFx0aWYgKCFmcmVlX2FyZWFfZW1wdHkoYXJlYSwgTUlHUkFURV9SRVNFUlZFRF9USFApKVxuK1x0XHRcdFx0cmV0dXJuIHRydWU7XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbitcbiBcdFx0Zm9yIChtdCA9IDA7IG10IFx1MDAzYyBNSUdSQVRFX1BDUFRZUEVTOyBtdCsrKSB7XG4gXHRcdFx0aWYgKCFmcmVlX2FyZWFfZW1wdHkoYXJlYSwgbXQpKVxuIFx0XHRcdFx0cmV0dXJuIHRydWU7XG5AQCAtMzg3Niw2ICszOTMxLDkgQEAgZ2V0X3BhZ2VfZnJvbV9mcmVlbGlzdChnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLCBpbnQgYWxsb2NfZmxhZ3MsXG4gXG4gXHRcdGNvbmRfYWNjZXB0X21lbW9yeSh6b25lLCBvcmRlciwgYWxsb2NfZmxhZ3MpO1xuIFxuK1x0XHRpZiAoYWxsb2NfZmxhZ3MgXHUwMDI2IEFMTE9DX1JFU0VSVkVEX1RIUClcbitcdFx0XHRnb3RvIHRyeV90aGlzX3pvbmU7XG4rXG4gXHRcdC8qXG4gXHRcdCAqIERldGVjdCB3aGV0aGVyIHRoZSBudW1iZXIgb2YgZnJlZSBwYWdlcyBpcyBiZWxvdyBoaWdoXG4gXHRcdCAqIHdhdGVybWFyay4gIElmIHNvLCB3ZSB3aWxsIGRlY3JlYXNlIHBjcC1cdTAwM2VoaWdoIGFuZCBmcmVlXG5AQCAtNTAzMyw2ICs1MDkxLDE1IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwcmVwYXJlX2FsbG9jX3BhZ2VzKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4gXHRhYy1cdTAwM2Vub2RlbWFzayA9IG5vZGVtYXNrO1xuIFx0YWMtXHUwMDNlbWlncmF0ZXR5cGUgPSBnZnBfbWlncmF0ZXR5cGUoZ2ZwX21hc2spO1xuIFxuK1x0aWYgKGdmcF9tYXNrIFx1MDAyNiBfX0dGUF9SRVNFUlZFRF9USFApIHtcbitcdFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgfHxcbitcdFx0ICAgIFdBUk5fT05fT05DRV9HRlAob3JkZXIgIT0gSFBBR0VfUE1EX09SREVSLCBnZnBfbWFzaykpXG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0XHRhYy1cdTAwM2VtaWdyYXRldHlwZSA9IE1JR1JBVEVfUkVTRVJWRURfVEhQO1xuK1x0XHQqYWxsb2NfZmxhZ3MgfD0gQUxMT0NfUkVTRVJWRURfVEhQO1xuK1x0fVxuK1xuIFx0aWYgKGNwdXNldHNfZW5hYmxlZCgpKSB7XG4gXHRcdCphbGxvY19nZnAgfD0gX19HRlBfSEFSRFdBTEw7XG4gXHRcdC8qXG5kaWZmIC0tZ2l0IGEvbW0vcmVzZXJ2ZWRfdGhwLmMgYi9tbS9yZXNlcnZlZF90aHAuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi45MzFjNTM5YzE1YTcwOVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvbW0vcmVzZXJ2ZWRfdGhwLmNcbkBAIC0wLDAgKzEsMTMzIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tbS5oXHUwMDNlXG4rI2luY2x1ZGUgXCJpbnRlcm5hbC5oXCJcbitcbitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHJlc2VydmVkX3RocF9sb2NrKTtcbitcbitzdGF0aWMgdW5zaWduZWQgbG9uZyByZXNlcnZlZF90aHBfY21kbGluZV9zaXplIF9faW5pdGRhdGEgPSBIUEFHRV9QTURfU0laRTtcbitzdGF0aWMgYm9vbCByZXNlcnZlZF90aHBfY21kbGluZV9zaXplX3ZhbGlkIF9faW5pdGRhdGEgPSB0cnVlO1xuK3N0YXRpYyB1bnNpZ25lZCBsb25nIHJlc2VydmVkX3RocF9yZXF1ZXN0ZWQgX19pbml0ZGF0YTtcbitzdGF0aWMgdW5zaWduZWQgbG9uZyByZXNlcnZlZF90aHBfdG90YWw7XG4rc3RhdGljIHVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWRfdGhwX3VzZWQ7XG4rXG4rc3RhdGljIGludCBfX2luaXQgc2V0dXBfcmVzZXJ2ZWRfdGhwX3NpemUoY2hhciAqc3RyKVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgc2l6ZTtcbitcdHNpemUgPSBtZW1wYXJzZShzdHIsIE5VTEwpO1xuK1x0aWYgKHNpemUgIT0gSFBBR0VfUE1EX1NJWkUpIHtcbitcdFx0cHJfd2FybihcInVuc3VwcG9ydGVkIHRocF9yZXNlcnZlZF9zaXplPSVzLCBvbmx5ICVsdSBpcyBzdXBwb3J0ZWRcXG5cIixcbitcdFx0XHRzdHIsIEhQQUdFX1BNRF9TSVpFKTtcbitcdFx0cmVzZXJ2ZWRfdGhwX2NtZGxpbmVfc2l6ZV92YWxpZCA9IGZhbHNlO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcdHJlc2VydmVkX3RocF9jbWRsaW5lX3NpemUgPSBzaXplO1xuK1x0cmVzZXJ2ZWRfdGhwX2NtZGxpbmVfc2l6ZV92YWxpZCA9IHRydWU7XG4rXHRyZXR1cm4gMDtcbit9XG4rZWFybHlfcGFyYW0oXCJ0aHBfcmVzZXJ2ZWRfc2l6ZVwiLCBzZXR1cF9yZXNlcnZlZF90aHBfc2l6ZSk7XG4rc3RhdGljIGludCBfX2luaXQgc2V0dXBfcmVzZXJ2ZWRfdGhwX25yKGNoYXIgKnN0cilcbit7XG4rXHRpbnQgY291bnQ7XG4rXHRpZiAoc3NjYW5mKHN0ciwgXCIlbHUlblwiLCBcdTAwMjZyZXNlcnZlZF90aHBfcmVxdWVzdGVkLCBcdTAwMjZjb3VudCkgIT0gMSB8fFxuK1x0ICAgIHN0cltjb3VudF0pIHtcbitcdFx0cHJfd2FybihcImludmFsaWQgdGhwX3Jlc2VydmVkX25yPSVzXFxuXCIsIHN0cik7XG4rXHRcdHJlc2VydmVkX3RocF9yZXF1ZXN0ZWQgPSAwO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcdHJldHVybiAwO1xuK31cbitlYXJseV9wYXJhbShcInRocF9yZXNlcnZlZF9uclwiLCBzZXR1cF9yZXNlcnZlZF90aHBfbnIpO1xuK1xuK3Vuc2lnbmVkIGxvbmcgcmVzZXJ2ZWRfdGhwX2hwYWdlX25yKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxuK3tcbitcdHJldHVybiAoZW5kIC0gc3RhcnQpIFx1MDAzZVx1MDAzZSBIUEFHRV9QTURfU0hJRlQ7XG4rfVxuK1xuK2ludCByZXNlcnZlZF90aHBfY2hhcmdlKHVuc2lnbmVkIGxvbmcgbnJfaHBhZ2VzKVxuK3tcbitcdGludCByZXQgPSAwO1xuK1xuK1x0aWYgKCFucl9ocGFnZXMpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0c3Bpbl9sb2NrKFx1MDAyNnJlc2VydmVkX3RocF9sb2NrKTtcbitcdGlmIChucl9ocGFnZXMgXHUwMDNlIHJlc2VydmVkX3RocF90b3RhbCAtIHJlc2VydmVkX3RocF91c2VkKVxuK1x0XHRyZXQgPSAtRU5PTUVNO1xuK1x0ZWxzZVxuK1x0XHRyZXNlcnZlZF90aHBfdXNlZCArPSBucl9ocGFnZXM7XG4rXHRzcGluX3VubG9jayhcdTAwMjZyZXNlcnZlZF90aHBfbG9jayk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbit2b2lkIHJlc2VydmVkX3RocF91bmNoYXJnZSh1bnNpZ25lZCBsb25nIG5yX2hwYWdlcylcbit7XG4rXHRpZiAoIW5yX2hwYWdlcylcbitcdFx0cmV0dXJuO1xuK1xuK1x0c3Bpbl9sb2NrKFx1MDAyNnJlc2VydmVkX3RocF9sb2NrKTtcbitcdGlmIChXQVJOX09OX09OQ0UobnJfaHBhZ2VzIFx1MDAzZSByZXNlcnZlZF90aHBfdXNlZCkpXG4rXHRcdHJlc2VydmVkX3RocF91c2VkID0gMDtcbitcdGVsc2VcbitcdFx0cmVzZXJ2ZWRfdGhwX3VzZWQgLT0gbnJfaHBhZ2VzO1xuK1x0c3Bpbl91bmxvY2soXHUwMDI2cmVzZXJ2ZWRfdGhwX2xvY2spO1xuK31cbitcbitzdGF0aWMgc3NpemVfdCB0b3RhbF9ocGFnZXNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbitcdFx0XHRcdCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zilcbit7XG4rXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwiJWx1XFxuXCIsIFJFQURfT05DRShyZXNlcnZlZF90aHBfdG90YWwpKTtcbit9XG4rc3RhdGljIHNzaXplX3QgZnJlZV9ocGFnZXNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbitcdFx0XHRcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgZnJlZV9ocGFnZXM7XG4rXG4rXHRzcGluX2xvY2soXHUwMDI2cmVzZXJ2ZWRfdGhwX2xvY2spO1xuK1x0ZnJlZV9ocGFnZXMgPSByZXNlcnZlZF90aHBfdG90YWwgLSByZXNlcnZlZF90aHBfdXNlZDtcbitcdHNwaW5fdW5sb2NrKFx1MDAyNnJlc2VydmVkX3RocF9sb2NrKTtcbitcbitcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCIlbHVcXG5cIiwgZnJlZV9ocGFnZXMpO1xuK31cbitzdGF0aWMgc3NpemVfdCB1c2VkX2hwYWdlc19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuK1x0XHRcdFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXG4re1xuK1x0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcIiVsdVxcblwiLCBSRUFEX09OQ0UocmVzZXJ2ZWRfdGhwX3VzZWQpKTtcbit9XG4rXG4rc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSB0b3RhbF9ocGFnZXNfYXR0ciA9IF9fQVRUUl9STyh0b3RhbF9ocGFnZXMpO1xuK3N0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZnJlZV9ocGFnZXNfYXR0ciA9IF9fQVRUUl9STyhmcmVlX2hwYWdlcyk7XG4rc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSB1c2VkX2hwYWdlc19hdHRyID0gX19BVFRSX1JPKHVzZWRfaHBhZ2VzKTtcbitcbitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqcmVzZXJ2ZWRfdGhwX2F0dHJzW10gPSB7XG4rXHRcdTAwMjZ0b3RhbF9ocGFnZXNfYXR0ci5hdHRyLFxuK1x0XHUwMDI2ZnJlZV9ocGFnZXNfYXR0ci5hdHRyLFxuK1x0XHUwMDI2dXNlZF9ocGFnZXNfYXR0ci5hdHRyLFxuK1x0TlVMTCxcbit9O1xuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIHJlc2VydmVkX3RocF9hdHRyX2dyb3VwID0ge1xuK1x0LmF0dHJzID0gcmVzZXJ2ZWRfdGhwX2F0dHJzLFxuK307XG4rXG4rc3RhdGljIGludCBfX2luaXQgcmVzZXJ2ZWRfdGhwX2luaXQodm9pZClcbit7XG4rXHRzdHJ1Y3Qga29iamVjdCAqa29iajtcbitcdGludCByZXQ7XG4rXG4rXHRpZiAocmVzZXJ2ZWRfdGhwX3JlcXVlc3RlZCBcdTAwMjZcdTAwMjYgcmVzZXJ2ZWRfdGhwX2NtZGxpbmVfc2l6ZV92YWxpZCkge1xuK1x0XHRyZXNlcnZlZF90aHBfdG90YWwgPSByZXNlcnZlZF90aHBfcGFnZWJsb2NrcyhyZXNlcnZlZF90aHBfcmVxdWVzdGVkKTtcbitcdFx0cHJfaW5mbyhcInJlc2VydmVkICVsdS8lbHUgUE1EIFRIUCBwYWdlYmxvY2tzICglbHUgYnl0ZXMgZWFjaClcXG5cIixcbitcdFx0XHRyZXNlcnZlZF90aHBfdG90YWwsIHJlc2VydmVkX3RocF9yZXF1ZXN0ZWQsXG4rXHRcdFx0cmVzZXJ2ZWRfdGhwX2NtZGxpbmVfc2l6ZSk7XG4rXHR9XG4rXHRrb2JqID0ga29iamVjdF9jcmVhdGVfYW5kX2FkZChcInJlc2VydmVkX3RocFwiLCBtbV9rb2JqKTtcbitcdGlmICgha29iailcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHRyZXQgPSBzeXNmc19jcmVhdGVfZ3JvdXAoa29iaiwgXHUwMDI2cmVzZXJ2ZWRfdGhwX2F0dHJfZ3JvdXApO1xuK1x0aWYgKHJldClcbitcdFx0a29iamVjdF9wdXQoa29iaik7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitzdWJzeXNfaW5pdGNhbGwocmVzZXJ2ZWRfdGhwX2luaXQpO1xuXFwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZVxuZGlmZiAtLWdpdCBhL21tL3Nob3dfbWVtLmMgYi9tbS9zaG93X21lbS5jXG5pbmRleCA0M2FjYTVhMmFjOTkwYS4uZTkzODFhZmNhNGFjYWUgMTAwNjQ0XG4tLS0gYS9tbS9zaG93X21lbS5jXG4rKysgYi9tbS9zaG93X21lbS5jXG5AQCAtMTQyLDYgKzE0Miw3IEBAIHN0YXRpYyB2b2lkIHNob3dfbWlncmF0aW9uX3R5cGVzKHVuc2lnbmVkIGNoYXIgdHlwZSlcbiAjaWZkZWYgQ09ORklHX0NNQVxuIFx0XHRbTUlHUkFURV9DTUFdXHRcdD0gJ0MnLFxuICNlbmRpZlxuK1x0XHRbTUlHUkFURV9SRVNFUlZFRF9USFBdXHQ9ICdUJyxcbiAjaWZkZWYgQ09ORklHX01FTU9SWV9JU09MQVRJT05cbiBcdFx0W01JR1JBVEVfSVNPTEFURV1cdD0gJ0knLFxuICNlbmRpZlxuQEAgLTMwOCw2ICszMDksOCBAQCBzdGF0aWMgdm9pZCBzaG93X2ZyZWVfYXJlYXModW5zaWduZWQgaW50IGZpbHRlciwgbm9kZW1hc2tfdCAqbm9kZW1hc2ssIGludCBtYXhfelxuIFx0XHRcdFwiIGhpZ2g6JWx1a0JcIlxuIFx0XHRcdFwiIHJlc2VydmVkX2hpZ2hhdG9taWM6JWx1S0JcIlxuIFx0XHRcdFwiIGZyZWVfaGlnaGF0b21pYzolbHVLQlwiXG4rXHRcdFx0XCIgcmVzZXJ2ZWRfdGhwOiVsdUtCXCJcbitcdFx0XHRcIiBmcmVlX3Jlc2VydmVkX3RocDolbHVLQlwiXG4gXHRcdFx0XCIgYWN0aXZlX2Fub246JWx1a0JcIlxuIFx0XHRcdFwiIGluYWN0aXZlX2Fub246JWx1a0JcIlxuIFx0XHRcdFwiIGFjdGl2ZV9maWxlOiVsdWtCXCJcbkBAIC0zMzEsNiArMzM0LDggQEAgc3RhdGljIHZvaWQgc2hvd19mcmVlX2FyZWFzKHVuc2lnbmVkIGludCBmaWx0ZXIsIG5vZGVtYXNrX3QgKm5vZGVtYXNrLCBpbnQgbWF4X3pcbiBcdFx0XHRLKGhpZ2hfd21hcmtfcGFnZXMoem9uZSkpLFxuIFx0XHRcdEsoem9uZS1cdTAwM2Vucl9yZXNlcnZlZF9oaWdoYXRvbWljKSxcbiBcdFx0XHRLKHpvbmUtXHUwMDNlbnJfZnJlZV9oaWdoYXRvbWljKSxcbitcdFx0XHRLKHpvbmUtXHUwMDNlbnJfcmVzZXJ2ZWRfdGhwKSxcbitcdFx0XHRLKHpvbmUtXHUwMDNlbnJfZnJlZV9yZXNlcnZlZF90aHApLFxuIFx0XHRcdEsoem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX1pPTkVfQUNUSVZFX0FOT04pKSxcbiBcdFx0XHRLKHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9aT05FX0lOQUNUSVZFX0FOT04pKSxcbiBcdFx0XHRLKHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9aT05FX0FDVElWRV9GSUxFKSksXG5kaWZmIC0tZ2l0IGEvbW0vdm1hLmMgYi9tbS92bWEuY1xuaW5kZXggOWVlYTI4NTA4MThhODUuLjhjNGNkN2M5N2E5ODRjIDEwMDY0NFxuLS0tIGEvbW0vdm1hLmNcbisrKyBiL21tL3ZtYS5jXG5AQCAtNyw2ICs3LDggQEBcbiAjaW5jbHVkZSBcInZtYV9pbnRlcm5hbC5oXCJcbiAjaW5jbHVkZSBcInZtYS5oXCJcbiBcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9odWdlX21tLmhcdTAwM2VcbitcbiBzdHJ1Y3QgbW1hcF9zdGF0ZSB7XG4gXHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcbiBcdHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaTtcbkBAIC01MDcsNiArNTA5LDEwIEBAIF9fc3BsaXRfdm1hKHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRXQVJOX09OKHZtYS1cdTAwM2V2bV9zdGFydCBcdTAwM2U9IGFkZHIpO1xuIFx0V0FSTl9PTih2bWEtXHUwMDNldm1fZW5kIFx1MDAzYz0gYWRkcik7XG4gXG4rXHRpZiAoKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fUkVTRVJWRURfVEhQKSBcdTAwMjZcdTAwMjZcbitcdCAgICAhSVNfQUxJR05FRChhZGRyLCBIUEFHRV9QTURfU0laRSkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuIFx0aWYgKHZtYS1cdTAwM2V2bV9vcHMgXHUwMDI2XHUwMDI2IHZtYS1cdTAwM2V2bV9vcHMtXHUwMDNlbWF5X3NwbGl0KSB7XG4gXHRcdGVyciA9IHZtYS1cdTAwM2V2bV9vcHMtXHUwMDNlbWF5X3NwbGl0KHZtYSwgYWRkcik7XG4gXHRcdGlmIChlcnIpXG5AQCAtMTM2MSw2ICsxMzY3LDcgQEAgc3RhdGljIHZvaWQgdm1zX2NvbXBsZXRlX211bm1hcF92bWFzKHN0cnVjdCB2bWFfbXVubWFwX3N0cnVjdCAqdm1zLFxuIFx0XHRyZW1vdmVfdm1hKHZtYSk7XG4gXG4gXHR2bV91bmFjY3RfbWVtb3J5KHZtcy1cdTAwM2Vucl9hY2NvdW50ZWQpO1xuK1x0cmVzZXJ2ZWRfdGhwX3VuY2hhcmdlKHZtcy1cdTAwM2Vucl9yZXNlcnZlZF90aHApO1xuIFx0dmFsaWRhdGVfbW0obW0pO1xuIFx0aWYgKHZtcy1cdTAwM2V1bmxvY2spXG4gXHRcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xuQEAgLTE0MjMsNiArMTQzMCwxMSBAQCBzdGF0aWMgaW50IHZtc19nYXRoZXJfbXVubWFwX3ZtYXMoc3RydWN0IHZtYV9tdW5tYXBfc3RydWN0ICp2bXMsXG4gXHRcdFx0ZXJyb3IgPSAtRVBFUk07XG4gXHRcdFx0Z290byBzdGFydF9zcGxpdF9mYWlsZWQ7XG4gXHRcdH1cbitcdFx0aWYgKCh2bXMtXHUwMDNldm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9SRVNFUlZFRF9USFApIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgIUlTX0FMSUdORUQodm1zLVx1MDAzZXN0YXJ0LCBIUEFHRV9QTURfU0laRSkpIHtcbitcdFx0XHRlcnJvciA9IC1FSU5WQUw7XG4rXHRcdFx0Z290byBzdGFydF9zcGxpdF9mYWlsZWQ7XG4rXHRcdH1cbiBcbiBcdFx0ZXJyb3IgPSBfX3NwbGl0X3ZtYSh2bXMtXHUwMDNldm1pLCB2bXMtXHUwMDNldm1hLCB2bXMtXHUwMDNlc3RhcnQsIDEpO1xuIFx0XHRpZiAoZXJyb3IpXG5AQCAtMTQ0NSw2ICsxNDU3LDExIEBAIHN0YXRpYyBpbnQgdm1zX2dhdGhlcl9tdW5tYXBfdm1hcyhzdHJ1Y3Qgdm1hX211bm1hcF9zdHJ1Y3QgKnZtcyxcbiBcdFx0fVxuIFx0XHQvKiBEb2VzIGl0IHNwbGl0IHRoZSBlbmQ/ICovXG4gXHRcdGlmIChuZXh0LVx1MDAzZXZtX2VuZCBcdTAwM2Ugdm1zLVx1MDAzZWVuZCkge1xuK1x0XHRcdGlmICgobmV4dC1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fUkVTRVJWRURfVEhQKSBcdTAwMjZcdTAwMjZcbitcdFx0XHQgICAgIUlTX0FMSUdORUQodm1zLVx1MDAzZWVuZCwgSFBBR0VfUE1EX1NJWkUpKSB7XG4rXHRcdFx0XHRlcnJvciA9IC1FSU5WQUw7XG4rXHRcdFx0XHRnb3RvIGVuZF9zcGxpdF9mYWlsZWQ7XG4rXHRcdFx0fVxuIFx0XHRcdGVycm9yID0gX19zcGxpdF92bWEodm1zLVx1MDAzZXZtaSwgbmV4dCwgdm1zLVx1MDAzZWVuZCwgMCk7XG4gXHRcdFx0aWYgKGVycm9yKVxuIFx0XHRcdFx0Z290byBlbmRfc3BsaXRfZmFpbGVkO1xuQEAgLTE0NjUsNiArMTQ4MiwxMSBAQCBzdGF0aWMgaW50IHZtc19nYXRoZXJfbXVubWFwX3ZtYXMoc3RydWN0IHZtYV9tdW5tYXBfc3RydWN0ICp2bXMsXG4gXHRcdGlmICh2bWFfdGVzdChuZXh0LCBWTUFfQUNDT1VOVF9CSVQpKVxuIFx0XHRcdHZtcy1cdTAwM2Vucl9hY2NvdW50ZWQgKz0gbnJwYWdlcztcbiBcbitcdFx0aWYgKG5leHQtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1JFU0VSVkVEX1RIUClcbitcdFx0XHR2bXMtXHUwMDNlbnJfcmVzZXJ2ZWRfdGhwICs9XG4rXHRcdFx0XHRyZXNlcnZlZF90aHBfaHBhZ2VfbnIobmV4dC1cdTAwM2V2bV9zdGFydCxcbitcdFx0XHRcdFx0XHQgICAgICBuZXh0LVx1MDAzZXZtX2VuZCk7XG4rXG4gXHRcdGlmIChpc19leGVjX21hcHBpbmcobmV4dC1cdTAwM2V2bV9mbGFncykpXG4gXHRcdFx0dm1zLVx1MDAzZWV4ZWNfdm0gKz0gbnJwYWdlcztcbiBcdFx0ZWxzZSBpZiAoaXNfc3RhY2tfbWFwcGluZyhuZXh0LVx1MDAzZXZtX2ZsYWdzKSlcbkBAIC0xNTYwLDYgKzE1ODIsNyBAQCBzdGF0aWMgdm9pZCBpbml0X3ZtYV9tdW5tYXAoc3RydWN0IHZtYV9tdW5tYXBfc3RydWN0ICp2bXMsXG4gXHR2bXMtXHUwMDNldWYgPSB1ZjtcbiBcdHZtcy1cdTAwM2V2bWFfY291bnQgPSAwO1xuIFx0dm1zLVx1MDAzZW5yX3BhZ2VzID0gdm1zLVx1MDAzZWxvY2tlZF92bSA9IHZtcy1cdTAwM2Vucl9hY2NvdW50ZWQgPSAwO1xuK1x0dm1zLVx1MDAzZW5yX3Jlc2VydmVkX3RocCA9IDA7XG4gXHR2bXMtXHUwMDNlZXhlY192bSA9IHZtcy1cdTAwM2VzdGFja192bSA9IHZtcy1cdTAwM2VkYXRhX3ZtID0gMDtcbiBcdHZtcy1cdTAwM2V1bm1hcF9zdGFydCA9IEZJUlNUX1VTRVJfQUREUkVTUztcbiBcdHZtcy1cdTAwM2V1bm1hcF9lbmQgPSBVU0VSX1BHVEFCTEVTX0NFSUxJTkc7XG5kaWZmIC0tZ2l0IGEvbW0vdm1hLmggYi9tbS92bWEuaFxuaW5kZXggOGU0YjYxYTczMDRjNjguLjY4ZTQ0YWRlZTVjODllIDEwMDY0NFxuLS0tIGEvbW0vdm1hLmhcbisrKyBiL21tL3ZtYS5oXG5AQCAtNDgsNiArNDgsNyBAQCBzdHJ1Y3Qgdm1hX211bm1hcF9zdHJ1Y3Qge1xuIFx0dW5zaWduZWQgbG9uZyBucl9wYWdlczsgICAgICAgICAvKiBOdW1iZXIgb2YgcGFnZXMgYmVpbmcgcmVtb3ZlZCAqL1xuIFx0dW5zaWduZWQgbG9uZyBsb2NrZWRfdm07ICAgICAgICAvKiBOdW1iZXIgb2YgbG9ja2VkIHBhZ2VzICovXG4gXHR1bnNpZ25lZCBsb25nIG5yX2FjY291bnRlZDsgICAgIC8qIE51bWJlciBvZiBWTV9BQ0NPVU5UIHBhZ2VzICovXG4rXHR1bnNpZ25lZCBsb25nIG5yX3Jlc2VydmVkX3RocDsgIC8qIE51bWJlciBvZiByZXNlcnZlZCBQTUQgVEhQIHNsb3RzICovXG4gXHR1bnNpZ25lZCBsb25nIGV4ZWNfdm07XG4gXHR1bnNpZ25lZCBsb25nIHN0YWNrX3ZtO1xuIFx0dW5zaWduZWQgbG9uZyBkYXRhX3ZtO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL2luY2x1ZGUvbGludXgvZ2ZwX3R5cGVzLmggYi90b29scy9pbmNsdWRlL2xpbnV4L2dmcF90eXBlcy5oXG5pbmRleCA2Yzc1ZGYzMGEyODFkMS4uNTNhMWQyMmZjZjk1N2UgMTAwNjQ0XG4tLS0gYS90b29scy9pbmNsdWRlL2xpbnV4L2dmcF90eXBlcy5oXG4rKysgYi90b29scy9pbmNsdWRlL2xpbnV4L2dmcF90eXBlcy5oXG5AQCAtMzMsNyArMzMsNyBAQCBlbnVtIHtcbiBcdF9fX0dGUF9JT19CSVQsXG4gXHRfX19HRlBfRlNfQklULFxuIFx0X19fR0ZQX1pFUk9fQklULFxuLVx0X19fR0ZQX1VOVVNFRF9CSVQsXHQvKiAweDIwMHUgdW51c2VkICovXG4rXHRfX19HRlBfUkVTRVJWRURfVEhQX0JJVCxcbiBcdF9fX0dGUF9ESVJFQ1RfUkVDTEFJTV9CSVQsXG4gXHRfX19HRlBfS1NXQVBEX1JFQ0xBSU1fQklULFxuIFx0X19fR0ZQX1dSSVRFX0JJVCxcbkBAIC02OSw3ICs2OSw3IEBAIGVudW0ge1xuICNkZWZpbmUgX19fR0ZQX0lPXHRcdEJJVChfX19HRlBfSU9fQklUKVxuICNkZWZpbmUgX19fR0ZQX0ZTXHRcdEJJVChfX19HRlBfRlNfQklUKVxuICNkZWZpbmUgX19fR0ZQX1pFUk9cdFx0QklUKF9fX0dGUF9aRVJPX0JJVClcbi0vKiAweDIwMHUgdW51c2VkICovXG4rI2RlZmluZSBfX19HRlBfUkVTRVJWRURfVEhQXHRCSVQoX19fR0ZQX1JFU0VSVkVEX1RIUF9CSVQpXG4gI2RlZmluZSBfX19HRlBfRElSRUNUX1JFQ0xBSU1cdEJJVChfX19HRlBfRElSRUNUX1JFQ0xBSU1fQklUKVxuICNkZWZpbmUgX19fR0ZQX0tTV0FQRF9SRUNMQUlNXHRCSVQoX19fR0ZQX0tTV0FQRF9SRUNMQUlNX0JJVClcbiAjZGVmaW5lIF9fX0dGUF9XUklURVx0XHRCSVQoX19fR0ZQX1dSSVRFX0JJVClcbmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4ta21lbS5jIGIvdG9vbHMvcGVyZi9idWlsdGluLWttZW0uY1xuaW5kZXggZTFiMmY1YmMxYmE4ZDguLjQ1NzMyYWFmMWE1MjVlIDEwMDY0NFxuLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLWttZW0uY1xuKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLWttZW0uY1xuQEAgLTY3Miw2ICs2NzIsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHtcbiBcdHsgXCJfX0dGUF9OT1JFVFJZXCIsXHRcdFwiTlJcIiB9LFxuIFx0eyBcIl9fR0ZQX0NPTVBcIixcdFx0XHRcIkNcIiB9LFxuIFx0eyBcIl9fR0ZQX1pFUk9cIixcdFx0XHRcIlpcIiB9LFxuK1x0eyBcIl9fR0ZQX1JFU0VSVkVEX1RIUFwiLFx0XHRcIlJUSFBcIiB9LFxuIFx0eyBcIl9fR0ZQX05PTUVNQUxMT0NcIixcdFx0XCJOTUFcIiB9LFxuIFx0eyBcIl9fR0ZQX01FTUFMTE9DXCIsXHRcdFwiTUFcIiB9LFxuIFx0eyBcIl9fR0ZQX0hBUkRXQUxMXCIsXHRcdFwiSFdcIiB9LFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmggYi90b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oXG5pbmRleCBjZjczYmNkOWJiOWQ1Mi4uMDIyYjdhNTZiNmE5ZjMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oXG4rKysgYi90b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oXG5AQCAtMTYwLDYgKzE2MCw3IEBAIGVudW0ge1xuICNlbmRpZlxuIFx0REVDTEFSRV9WTUFfQklUKFVGRkRfTUlOT1IsIDQxKSxcbiBcdERFQ0xBUkVfVk1BX0JJVChTRUFMRUQsIDQyKSxcbitcdERFQ0xBUkVfVk1BX0JJVChSRVNFUlZFRF9USFAsIDQzKSxcbiBcdC8qIEZsYWdzIHRoYXQgcmV1c2UgZmxhZ3MgYWJvdmUuICovXG4gXHRERUNMQVJFX1ZNQV9CSVRfQUxJQVMoUEtFWV9CSVQwLCBISUdIX0FSQ0hfMCksXG4gXHRERUNMQVJFX1ZNQV9CSVRfQUxJQVMoUEtFWV9CSVQxLCBISUdIX0FSQ0hfMSksXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNzozOTo1Ni42MDQ2OTc1MTdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjQxMDQ0MTY4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgXCJNQURWX1JFU0VSVkVEX1RIUFwiIFBhdGNoIGZvciBGdXp6aW5nKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBXZSd2ZSBnb3QgYSBuZXcgcGF0Y2ggaW50cm9kdWNpbmcgYE1BRFZfUkVTRVJWRURfVEhQYCBhbmQgYFZNX1JFU0VSVkVEX1RIUGAsIHdoaWNoIGlzIGNsZWFybHkgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudC4gVGhpcyBzY3JlYW1zIFwiZnV6eiBtZSFcIlxuXG5NeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIHBpbnBvaW50IHRoZSBtb3N0IGludGVyZXN0aW5nIGZ1bmN0aW9ucywgc3BlY2lmaWNhbGx5IHRoZSBvbmVzIHRoYXQgYXJlIGRpcmVjdGx5IHRvdWNoZWQgYnkgdGhpcyBuZXcgbWFkdmlzZSBmbGFnLiBNb2RpZmllZCBvciBhZGRlZCBmdW5jdGlvbnMgYXJlOiBgbWFkdmlzZV9odWdlcGFnZV9wb2xpY3lgLCBgcmVzZXJ2ZWRfdGhwX21hZHZpc2VfYWxpZ25lZGAsIGByZXNlcnZlZF90aHBfY2hhcmdlYCwgYHJlc2VydmVkX3RocF91bmNoYXJnZWAsIGByZXNlcnZlZF90aHBfaHBhZ2VfbnJgLCBgcmVzZXJ2ZWRfdGhwX3BhZ2VibG9ja3NgLCBgY2hlY2tfcmVzZXJ2ZWRfdGhwX2FsaWdubWVudGAsIGB2cm1fY2FsY19jaGFyZ2VgLCBgdW5tYXBfc291cmNlX3ZtYWAsIGB2bXNfZ2F0aGVyX211bm1hcF92bWFzYCwgYF9fc3BsaXRfdm1hYCwgYGR1cF9tbWFwYCwgYHRlYXJfZG93bl92bWFzYCwgYGRvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlYCwgYF9fZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2VgLCBgdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kYCwgYW5kIGBodWdlcGFnZV9tYWR2aXNlYC5cblxuTG9va2luZyBhdCB0aGUgY29uZmlncywgdGhpcyBwYXRjaCBkZWZpbml0ZWx5IG5lZWRzIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuIEkgc2VlIGNoZWNrcyBmb3IgYENPTkZJR182NEJJVGAgd2l0aGluIGBtYWR2aXNlX2h1Z2VwYWdlX3BvbGljeWAsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIHNlZSB0aGF0IHRoaXMgcGF0Y2ggdXNlcyBgSFBBR0VfUE1EX1NJWkVgLCB3aGljaCBpcyBwYXJ0IG9mIHRoZSBUSFAgc2V0dXAuXG5cbkkgd2FudCB0byB0cmltIGRvd24gdGhlIGxpc3QgdG8gYmUgbW9yZSB0YXJnZXRlZC4gSSdsbCBmb2N1cyBvbjogYG1hZHZpc2VfaHVnZXBhZ2VfcG9saWN5YCwgYHJlc2VydmVkX3RocF9jaGFyZ2VgLCBgcmVzZXJ2ZWRfdGhwX3VuY2hhcmdlYCwgYHJlc2VydmVkX3RocF9wYWdlYmxvY2tzYCwgYGNoZWNrX3Jlc2VydmVkX3RocF9hbGlnbm1lbnRgLCBgaHVnZXBhZ2VfbWFkdmlzZWAuXG5cbkEgcXVpY2sgY2hlY2sgY29uZmlybXMgYSBmZXcgZnVuY3Rpb25zJyBwcm9wZXJ0aWVzLiBgbWFkdmlzZV9odWdlcGFnZV9wb2xpY3lgIGlzIHN0YXRpYywgYHJlc2VydmVkX3RocF9jaGFyZ2VgLCBgcmVzZXJ2ZWRfdGhwX3VuY2hhcmdlYCwgYHJlc2VydmVkX3RocF9wYWdlYmxvY2tzYCBhcmUgZ2xvYmFsLlxuXG5Ob3csIGxldCdzIGRpZyBkZWVwZXIuIFRoZSBgbW0vcmVzZXJ2ZWRfdGhwLmNgIGZpbGUgaXMgaW50ZXJlc3RpbmcuIEl0IGhhcyBmdW5jdGlvbnMgbGlrZSBgc2V0dXBfcmVzZXJ2ZWRfdGhwX3NpemVgLCBgc2V0dXBfcmVzZXJ2ZWRfdGhwX25yYCwgYW5kIGByZXNlcnZlZF90aHBfaW5pdGAuIEl0IHNlZW1zIHRvIHV0aWxpemUgYHRocF9yZXNlcnZlZF9zaXplYCBhbmQgYHRocF9yZXNlcnZlZF9ucmAgYm9vdCBwYXJhbWV0ZXJzLiBUaGlzIGlzIGEgY3J1Y2lhbCBvYnNlcnZhdGlvbi4gSWYgYHRocF9yZXNlcnZlZF9ucmAgaXNuJ3QgcHJvdmlkZWQsIGByZXNlcnZlZF90aHBfdG90YWxgIGJlY29tZXMgemVyby5cblxuQSBjYXJlZnVsIGxvb2sgYXQgYHJlc2VydmVkX3RocF9jaGFyZ2VgIHJldmVhbHMgdGhhdCB3aGVuIGByZXNlcnZlZF90aHBfdG90YWxgIGlzIHplcm8sIGFueSBhbGxvY2F0aW9uIHJlcXVlc3Qgd2lsbCByZXR1cm4gYC1FTk9NRU1gLiBUaGlzIG1ha2VzIHRoZSBgbWFkdmlzZShNQURWX1JFU0VSVkVEX1RIUClgIGNhbGxzIHRvIGZhaWwuIEkgd29uZGVyIGlmIHRoZXJlJ3MgYSB3YXkgdG8gdGVzdCBpdC5cblxuSXQgbG9va3MgbGlrZSB0aGUgYHJlc2VydmVkX3RocF90b3RhbGAgY2FuIG9ubHkgYmUgc2V0IGF0IGJvb3QgdGltZSB2aWEgYHRocF9yZXNlcnZlZF9ucmAsIGFuZCB0aGVyZSdzIG5vIHN5c2ZzIGludGVyZmFjZSBmb3IgY2hhbmdpbmcgaXQuIElmIGByZXNlcnZlZF90aHBfdG90YWwgPT0gMGAsIGBWTV9SRVNFUlZFRF9USFBgIHdpbGwgbmV2ZXIgZ2V0IHNldCwgYW5kIGFsbCB0aGUgbW9kaWZpY2F0aW9ucyB0byBgbW1hcC5jYCwgYG1yZW1hcC5jYCwgYHZtYS5jYCwgYW5kIGBodWdlX21lbW9yeS5jYCB3aWxsIGJlIHVucmVhY2hhYmxlLiBUaGlzIGlzIGNyaXRpY2FsLlxuXG5DYW4gd2UgYnlwYXNzIHRoaXM/IEl0IGFwcGVhcnMgbm90LiBgbWFkdmlzZWAgcmVxdWlyZXMgdGhlIHN0YXJ0IGFuZCBlbmQgb2YgdGhlIHJlZ2lvbiB0byBiZSBhbGlnbmVkIHdpdGggdGhlIGBIUEFHRV9QTURfU0laRWAsIHRoZXJlZm9yZSwgdGhlIG51bWJlciBvZiBodWdlcGFnZXMgcmVxdWVzdGVkIHdpbGwgYmUgYXQgbGVhc3Qgb25lIGh1Z2VwYWdlLiBBbmQgdGhpcyByZXF1ZXN0IHdpbGwgZmFpbCBpZiB3ZSBoYXZlbid0IHByb3ZpZGVkIGEgYm9vdCBwYXJhbWV0ZXIsIGFuZCB0aGVyZWZvcmUgaGF2ZSBub3Qgc2V0IGByZXNlcnZlZF90aHBfdG90YWxgLlxuXG5FdmVuIHRob3VnaCB3ZSBuZWVkIHRoYXQgYm9vdCBwYXJhbWV0ZXIsIGl0J3Mgc3RpbGwgd29ydGggZnV6emluZy4gVGhlIHBhdGNoIGlzIHN0aWxsIGRvaW5nIGZ1bmN0aW9uYWwgY2hhbmdlcy4gU3l6a2FsbGVyIG1pZ2h0IGhhdmUgdGhlIGFiaWxpdHkgdG8gc2V0IGJvb3QgcGFyYW1ldGVycyBvciBpdCdzIGp1c3QgYSBsaW1pdGF0aW9uLCBidXQgd2Ugc2hvdWxkIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuU28sIGhlcmUncyBteSBmb2N1c2VkIGxpc3Qgb2Ygc3ltYm9sczpcbi0gYG1hZHZpc2VfaHVnZXBhZ2VfcG9saWN5YFxuLSBgcmVzZXJ2ZWRfdGhwX2NoYXJnZWBcbi0gYHJlc2VydmVkX3RocF91bmNoYXJnZWBcbi0gYHJlc2VydmVkX3RocF9wYWdlYmxvY2tzYFxuLSBgY2hlY2tfcmVzZXJ2ZWRfdGhwX2FsaWdubWVudGBcbi0gYHZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZGBcblxuQW5kIHRoZSBrZXkgY29uZmlnIHJlcXVpcmVtZW50IGlzOlxuLSBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgXG5cbkluIHNob3J0OiB0aGUgcGF0Y2ggaXMgaW50cm9kdWNpbmcgYSBuZXcgYE1BRFZfUkVTRVJWRURfVEhQXG5cbiIsIklucHV0VG9rZW5zIjoxOTgyOCwiT3V0cHV0VG9rZW5zIjoxNzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzUxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDc6NDA6MjMuMDE1MTQxNDc0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Nzg1ODM0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtYWR2aXNlX2h1Z2VwYWdlX3BvbGljeVwiLFxuICAgIFwicmVzZXJ2ZWRfdGhwX2NoYXJnZVwiLFxuICAgIFwicmVzZXJ2ZWRfdGhwX3VuY2hhcmdlXCIsXG4gICAgXCJyZXNlcnZlZF90aHBfcGFnZWJsb2Nrc1wiLFxuICAgIFwiY2hlY2tfcmVzZXJ2ZWRfdGhwX2FsaWdubWVudFwiLFxuICAgIFwidm1hX2FsbG9jX2Fub25fZm9saW9fcG1kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBNQURWX1JFU0VSVkVEX1RIUCBtYWR2aXNlIGJlaGF2aW9yIGFuZCBWTV9SRVNFUlZFRF9USFAgVk1BIGZsYWcsIG1vZGlmeWluZyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGluY2x1ZGluZyBwYWdlIGZhdWx0IGhhbmRsaW5nLCBtcmVtYXAsIGFuZCBWTUEgc3BsaXR0aW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGtlcm5lbCdzIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtYWR2aXNlX2h1Z2VwYWdlX3BvbGljeVwiLFxuICAgIFwicmVzZXJ2ZWRfdGhwX2NoYXJnZVwiLFxuICAgIFwicmVzZXJ2ZWRfdGhwX3VuY2hhcmdlXCIsXG4gICAgXCJyZXNlcnZlZF90aHBfcGFnZWJsb2Nrc1wiLFxuICAgIFwiY2hlY2tfcmVzZXJ2ZWRfdGhwX2FsaWdubWVudFwiLFxuICAgIFwidm1hX2FsbG9jX2Fub25fZm9saW9fcG1kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBNQURWX1JFU0VSVkVEX1RIUCBtYWR2aXNlIGJlaGF2aW9yIGFuZCBWTV9SRVNFUlZFRF9USFAgVk1BIGZsYWcsIG1vZGlmeWluZyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGluY2x1ZGluZyBwYWdlIGZhdWx0IGhhbmRsaW5nLCBtcmVtYXAsIGFuZCBWTUEgc3BsaXR0aW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGtlcm5lbCdzIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow7rt7n[1] Phase: Succeeded StartedAt: 2026-06-27 07:40:34 +0000 UTC FinishedAt: 2026-06-27 07:40:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7rt7n[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-27 07:40:34 +0000 UTC FinishedAt: 2026-06-27 07:40:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7rt7n[2] Phase: Succeeded StartedAt: 2026-06-27 07:40:34 +0000 UTC FinishedAt: 2026-06-27 08:38:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7rt7n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d5670d672ae08b8c534b7beed6f57c8b44e7b43","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_hugepage_policy","reserved_thp_charge","reserved_thp_uncharge","reserved_thp_pageblocks","check_reserved_thp_alignment","vma_alloc_anon_folio_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3d5670d672ae08b8c534b7beed6f57c8b44e7b43","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"48c38717-31b4-40a6-88aa-1b581e1fd93b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Failed StartedAt: 2026-06-27 07:40:34 +0000 UTC FinishedAt: 2026-06-27 08:38:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"3d5670d672ae08b8c534b7beed6f57c8b44e7b43","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_hugepage_policy","reserved_thp_charge","reserved_thp_uncharge","reserved_thp_pageblocks","check_reserved_thp_alignment","vma_alloc_anon_folio_pmd"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"3d5670d672ae08b8c534b7beed6f57c8b44e7b43","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"48c38717-31b4-40a6-88aa-1b581e1fd93b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow7rt7n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d5670d672ae08b8c534b7beed6f57c8b44e7b43","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_hugepage_policy","reserved_thp_charge","reserved_thp_uncharge","reserved_thp_pageblocks","check_reserved_thp_alignment","vma_alloc_anon_folio_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3d5670d672ae08b8c534b7beed6f57c8b44e7b43","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"48c38717-31b4-40a6-88aa-1b581e1fd93b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-06-27 07:40:34 +0000 UTC FinishedAt: 2026-06-27 07:40:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7rt7n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d5670d672ae08b8c534b7beed6f57c8b44e7b43","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_hugepage_policy","reserved_thp_charge","reserved_thp_uncharge","reserved_thp_pageblocks","check_reserved_thp_alignment","vma_alloc_anon_folio_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3d5670d672ae08b8c534b7beed6f57c8b44e7b43","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"48c38717-31b4-40a6-88aa-1b581e1fd93b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-06-27 07:40:34 +0000 UTC FinishedAt: 2026-06-27 07:40:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3d5670d672ae08b8c534b7beed6f57c8b44e7b43","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflow7rt7n/series-workflow7rt7n-convert-artifact-3890532096/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7rt7n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d5670d672ae08b8c534b7beed6f57c8b44e7b43","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_hugepage_policy","reserved_thp_charge","reserved_thp_uncharge","reserved_thp_pageblocks","check_reserved_thp_alignment","vma_alloc_anon_folio_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3d5670d672ae08b8c534b7beed6f57c8b44e7b43","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"48c38717-31b4-40a6-88aa-1b581e1fd93b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-06-27 07:40:44 +0000 UTC FinishedAt: 2026-06-27 08:00:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7rt7n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d5670d672ae08b8c534b7beed6f57c8b44e7b43","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_hugepage_policy","reserved_thp_charge","reserved_thp_uncharge","reserved_thp_pageblocks","check_reserved_thp_alignment","vma_alloc_anon_folio_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3d5670d672ae08b8c534b7beed6f57c8b44e7b43","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"48c38717-31b4-40a6-88aa-1b581e1fd93b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-06-27 07:40:44 +0000 UTC FinishedAt: 2026-06-27 08:00:05 +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:*8c83265c-2c8f-453d-afae-55bac977ff20,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-workflow7rt7n/series-workflow7rt7n-convert-artifact-3890532096/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": "c63a474e-1deb-4fe1-b284-7ead42bc7371", "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-workflow7rt7n/series-workflow7rt7n-build-action-3320977862/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7rt7n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d5670d672ae08b8c534b7beed6f57c8b44e7b43","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_hugepage_policy","reserved_thp_charge","reserved_thp_uncharge","reserved_thp_pageblocks","check_reserved_thp_alignment","vma_alloc_anon_folio_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3d5670d672ae08b8c534b7beed6f57c8b44e7b43","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"48c38717-31b4-40a6-88aa-1b581e1fd93b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-06-27 07:40:44 +0000 UTC FinishedAt: 2026-06-27 07:59:55 +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:*8c83265c-2c8f-453d-afae-55bac977ff20,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-workflow7rt7n/series-workflow7rt7n-convert-artifact-3890532096/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": "c63a474e-1deb-4fe1-b284-7ead42bc7371", "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-workflow7rt7n/series-workflow7rt7n-build-action-3320977862/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7rt7n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d5670d672ae08b8c534b7beed6f57c8b44e7b43","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_hugepage_policy","reserved_thp_charge","reserved_thp_uncharge","reserved_thp_pageblocks","check_reserved_thp_alignment","vma_alloc_anon_folio_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3d5670d672ae08b8c534b7beed6f57c8b44e7b43","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"48c38717-31b4-40a6-88aa-1b581e1fd93b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-06-27 08:00:05 +0000 UTC FinishedAt: 2026-06-27 08:00:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7rt7n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d5670d672ae08b8c534b7beed6f57c8b44e7b43","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_hugepage_policy","reserved_thp_charge","reserved_thp_uncharge","reserved_thp_pageblocks","check_reserved_thp_alignment","vma_alloc_anon_folio_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3d5670d672ae08b8c534b7beed6f57c8b44e7b43","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"48c38717-31b4-40a6-88aa-1b581e1fd93b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-06-27 08:00:05 +0000 UTC FinishedAt: 2026-06-27 08:00:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7rt7n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d5670d672ae08b8c534b7beed6f57c8b44e7b43","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_hugepage_policy","reserved_thp_charge","reserved_thp_uncharge","reserved_thp_pageblocks","check_reserved_thp_alignment","vma_alloc_anon_folio_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3d5670d672ae08b8c534b7beed6f57c8b44e7b43","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"48c38717-31b4-40a6-88aa-1b581e1fd93b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-06-27 08:00:05 +0000 UTC FinishedAt: 2026-06-27 08:00:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7rt7n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d5670d672ae08b8c534b7beed6f57c8b44e7b43","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_hugepage_policy","reserved_thp_charge","reserved_thp_uncharge","reserved_thp_pageblocks","check_reserved_thp_alignment","vma_alloc_anon_folio_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3d5670d672ae08b8c534b7beed6f57c8b44e7b43","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"48c38717-31b4-40a6-88aa-1b581e1fd93b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-06-27 08:00:05 +0000 UTC FinishedAt: 2026-06-27 08:00:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3d5670d672ae08b8c534b7beed6f57c8b44e7b43","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"48c38717-31b4-40a6-88aa-1b581e1fd93b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflow7rt7n/series-workflow7rt7n-convert-artifact-2699271335/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7rt7n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d5670d672ae08b8c534b7beed6f57c8b44e7b43","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_hugepage_policy","reserved_thp_charge","reserved_thp_uncharge","reserved_thp_pageblocks","check_reserved_thp_alignment","vma_alloc_anon_folio_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3d5670d672ae08b8c534b7beed6f57c8b44e7b43","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"48c38717-31b4-40a6-88aa-1b581e1fd93b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-06-27 08:00:15 +0000 UTC FinishedAt: 2026-06-27 08:02:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7rt7n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d5670d672ae08b8c534b7beed6f57c8b44e7b43","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_hugepage_policy","reserved_thp_charge","reserved_thp_uncharge","reserved_thp_pageblocks","check_reserved_thp_alignment","vma_alloc_anon_folio_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3d5670d672ae08b8c534b7beed6f57c8b44e7b43","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"48c38717-31b4-40a6-88aa-1b581e1fd93b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-06-27 08:00:15 +0000 UTC FinishedAt: 2026-06-27 08:02:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c63a474e-1deb-4fe1-b284-7ead42bc7371,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-workflow7rt7n/series-workflow7rt7n-build-action-3320977862/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-workflow7rt7n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d5670d672ae08b8c534b7beed6f57c8b44e7b43","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_hugepage_policy","reserved_thp_charge","reserved_thp_uncharge","reserved_thp_pageblocks","check_reserved_thp_alignment","vma_alloc_anon_folio_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3d5670d672ae08b8c534b7beed6f57c8b44e7b43","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"48c38717-31b4-40a6-88aa-1b581e1fd93b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-06-27 08:02:16 +0000 UTC FinishedAt: 2026-06-27 08:02:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7rt7n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d5670d672ae08b8c534b7beed6f57c8b44e7b43","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_hugepage_policy","reserved_thp_charge","reserved_thp_uncharge","reserved_thp_pageblocks","check_reserved_thp_alignment","vma_alloc_anon_folio_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3d5670d672ae08b8c534b7beed6f57c8b44e7b43","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"48c38717-31b4-40a6-88aa-1b581e1fd93b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-06-27 08:02:16 +0000 UTC FinishedAt: 2026-06-27 08:02:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7rt7n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d5670d672ae08b8c534b7beed6f57c8b44e7b43","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_hugepage_policy","reserved_thp_charge","reserved_thp_uncharge","reserved_thp_pageblocks","check_reserved_thp_alignment","vma_alloc_anon_folio_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3d5670d672ae08b8c534b7beed6f57c8b44e7b43","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"48c38717-31b4-40a6-88aa-1b581e1fd93b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-06-27 08:02:16 +0000 UTC FinishedAt: 2026-06-27 08:38:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7rt7n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d5670d672ae08b8c534b7beed6f57c8b44e7b43","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_hugepage_policy","reserved_thp_charge","reserved_thp_uncharge","reserved_thp_pageblocks","check_reserved_thp_alignment","vma_alloc_anon_folio_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3d5670d672ae08b8c534b7beed6f57c8b44e7b43","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"48c38717-31b4-40a6-88aa-1b581e1fd93b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-06-27 08:02:16 +0000 UTC FinishedAt: 2026-06-27 08:38:00 +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:*8c83265c-2c8f-453d-afae-55bac977ff20,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-workflow7rt7n/series-workflow7rt7n-convert-artifact-2699271335/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": "d4df29e3-76c2-4d82-b0b4-097beb267ffb", "success": false },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-workflow7rt7n/series-workflow7rt7n-build-action-355894638/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7rt7n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d5670d672ae08b8c534b7beed6f57c8b44e7b43","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_hugepage_policy","reserved_thp_charge","reserved_thp_uncharge","reserved_thp_pageblocks","check_reserved_thp_alignment","vma_alloc_anon_folio_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3d5670d672ae08b8c534b7beed6f57c8b44e7b43","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"48c38717-31b4-40a6-88aa-1b581e1fd93b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Failed StartedAt: 2026-06-27 08:02:16 +0000 UTC FinishedAt: 2026-06-27 08:14:43 +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:*8c83265c-2c8f-453d-afae-55bac977ff20,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-workflow7rt7n/series-workflow7rt7n-convert-artifact-2699271335/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow7rt7n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d5670d672ae08b8c534b7beed6f57c8b44e7b43","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_hugepage_policy","reserved_thp_charge","reserved_thp_uncharge","reserved_thp_pageblocks","check_reserved_thp_alignment","vma_alloc_anon_folio_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3d5670d672ae08b8c534b7beed6f57c8b44e7b43","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"48c38717-31b4-40a6-88aa-1b581e1fd93b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(1) Phase: Succeeded StartedAt: 2026-06-27 08:19:55 +0000 UTC FinishedAt: 2026-06-27 08:36:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*8c83265c-2c8f-453d-afae-55bac977ff20,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-workflow7rt7n/series-workflow7rt7n-convert-artifact-2699271335/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": "d4df29e3-76c2-4d82-b0b4-097beb267ffb", "success": false },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-workflow7rt7n/series-workflow7rt7n-build-action-355894638/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7rt7n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d5670d672ae08b8c534b7beed6f57c8b44e7b43","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_hugepage_policy","reserved_thp_charge","reserved_thp_uncharge","reserved_thp_pageblocks","check_reserved_thp_alignment","vma_alloc_anon_folio_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3d5670d672ae08b8c534b7beed6f57c8b44e7b43","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"48c38717-31b4-40a6-88aa-1b581e1fd93b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Failed StartedAt: 2026-06-27 08:38:00 +0000 UTC FinishedAt: 2026-06-27 08:38:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7rt7n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d5670d672ae08b8c534b7beed6f57c8b44e7b43","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_hugepage_policy","reserved_thp_charge","reserved_thp_uncharge","reserved_thp_pageblocks","check_reserved_thp_alignment","vma_alloc_anon_folio_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3d5670d672ae08b8c534b7beed6f57c8b44e7b43","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"48c38717-31b4-40a6-88aa-1b581e1fd93b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Failed StartedAt: 2026-06-27 08:38:00 +0000 UTC FinishedAt: 2026-06-27 08:38:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}