Name: series-workflow9bxpc Phase: Succeeded StartedAt: 2026-08-25 19:01:35 +0000 UTC FinishedAt: 2026-08-25 22:51:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9bxpc[0] Phase: Succeeded StartedAt: 2026-08-25 19:01:35 +0000 UTC FinishedAt: 2026-08-25 19:05:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9bxpc[0].run-triage Phase: Succeeded StartedAt: 2026-08-25 19:01:35 +0000 UTC FinishedAt: 2026-08-25 19:05:30 +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": "169393fff5d1ec2690934067eeb95544ff5ebdd7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "LRU_GEN_ENABLED" ], "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": "169393fff5d1ec2690934067eeb95544ff5ebdd7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "LRU_GEN_ENABLED" ], "series_id": "d64100e7-beda-47c2-a8ac-9d7b44c6d31f" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "folio_migrate_flags", "lru_gen_look_around" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI1IDE5OjAzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Zm9saW9fbWlncmF0ZV9mbGFncyYjMzQ7LAogICAgJiMzNDtscnVfZ2VuX2xvb2tfYXJvdW5kJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBpbnRlcm5hbCBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCBzcGVjaWZpY2FsbHkgTFJVIGdlbmVyYXRpb24gYW5kIGZvbGlvIGZsYWdzIG1hbmlwdWxhdGlvbiwgYW5kIGNoYW5nZXMgYGxydV96b25lX3NpemVgIHRvIHVzZSBgYXRvbWljX2xvbmdfdGAuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgdGhhdCBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFsbG9jYXRlIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIG9yIG1vZGlmeSBib3VuZHMgY2hlY2tzIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgbmV3bHkgaW50cm9kdWNlZCBvdXQtcGFyYW1ldGVyIGBpc19maWxlYCBpbiBgZm9saW9fdXBkYXRlX2dlbmAgaXMgYWx3YXlzIGluaXRpYWxpemVkIGJlZm9yZSByZXR1cm5pbmcuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgcmFjZSBjb25kaXRpb25zLCB1c2UtYWZ0ZXItZnJlZSwgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcykgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgb3RoZXIgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgTXVsdGktR2VuIExSVSAoTUdMUlUpIHBhZ2UgZmxhZ3MgaGFuZGxpbmcgYW5kIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gYGxydV96b25lX3NpemVgIHVwZGF0ZXMgYnkgdXNpbmcgYXRvbWljIG9wZXJhdGlvbnMuIEl0IG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMsIHNwZWNpZmljYWxseSBwYWdlIG1pZ3JhdGlvbiAoYGZvbGlvX21pZ3JhdGVfZmxhZ3NgKSBhbmQgcGFnZSByZWNsYWltIGxvb2thcm91bmQgKGBscnVfZ2VuX2xvb2tfYXJvdW5kYCkuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBtYWtpbmcgdGhlbSB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE5OjAzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMjU5YTI1MjIzODc2ZDBmMjczYjM0ZmU2YWVmMzQzNjZiNzU2MDk5ZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDI1IDE5OjAzOjIxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbmluZGV4IDIxNWUyZTg3ZjQyYjIuLjdiODlkMGNiNWY2YzYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbkBAIC0xMTMsNyAmIzQzOzExMyw3IEBAIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlIHtcbiBcdC8qIEZpZWxkcyB3aGljaCBnZXQgdXBkYXRlZCBvZnRlbiBhdCB0aGUgZW5kLiAqL1xuIFx0c3RydWN0IGxydXZlY1x0XHRscnV2ZWM7XG4gXHRDQUNIRUxJTkVfUEFERElORyhfcGFkMl8pO1xuLVx0dW5zaWduZWQgbG9uZ1x0XHRscnVfem9uZV9zaXplW01BWF9OUl9aT05FU11bTlJfTFJVX0xJU1RTXTtcbiYjNDM7XHRhdG9taWNfbG9uZ190XHRcdGxydV96b25lX3NpemVbTUFYX05SX1pPTkVTXVtOUl9MUlVfTElTVFNdO1xuIFx0c3RydWN0IG1lbV9jZ3JvdXBfcmVjbGFpbV9pdGVyXHRpdGVyO1xuIFxuIFx0LypcbkBAIC05MDIsMTAgJiM0Mzs5MDIsMTUgQEAgc3RhdGljIGlubGluZVxuIHVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9nZXRfem9uZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRcdGVudW0gbHJ1X2xpc3QgbHJ1LCBpbnQgem9uZV9pZHgpXG4ge1xuJiM0MztcdGxvbmcgdmFsO1xuIFx0c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm16O1xuIFxuIFx0bXogPSBjb250YWluZXJfb2YobHJ1dmVjLCBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSwgbHJ1dmVjKTtcbi1cdHJldHVybiBSRUFEX09OQ0UobXotXHUwMDNlbHJ1X3pvbmVfc2l6ZVt6b25lX2lkeF1bbHJ1XSk7XG4mIzQzO1x0dmFsID0gYXRvbWljX2xvbmdfcmVhZChcdTAwMjZtei1cdTAwM2VscnVfem9uZV9zaXplW3pvbmVfaWR4XVtscnVdKTtcbiYjNDM7XHRpZiAoV0FSTl9PTl9PTkNFKHZhbCBcdTAwM2MgMCkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHZhbDtcbiB9XG4gXG4gdm9pZCBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzayk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaCBiL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmhcbmluZGV4IDYyMWM4NjUzZDhmN2UuLjhjZjgyOTg5ZWMyNjMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oXG5AQCAtMTAsNiAmIzQzOzEwLDExIEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdXNlcmZhdWx0ZmRfay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbGVhZm9wcy5oXHUwMDNlXG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2ZsYWdzX2lzX2ZpbGVfbHJ1KGNvbnN0IHVuc2lnbmVkIGxvbmcgKmZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuICF0ZXN0X2JpdChQR19zd2FwYmFja2VkLCBmbGFncyk7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogZm9saW9faXNfZmlsZV9scnUgLSBTaG91bGQgdGhlIGZvbGlvIGJlIG9uIGEgZmlsZSBMUlUgb3IgYW5vbiBMUlU/XG4gICogQGZvbGlvOiBUaGUgZm9saW8gdG8gdGVzdC5cbkBAIC0yNyw3ICYjNDM7MzIsNyBAQFxuICAqL1xuIHN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2lzX2ZpbGVfbHJ1KGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuLVx0cmV0dXJuICFmb2xpb190ZXN0X3N3YXBiYWNrZWQoZm9saW8pO1xuJiM0MztcdHJldHVybiBmb2xpb19mbGFnc19pc19maWxlX2xydShjb25zdF9mb2xpb19mbGFncyhmb2xpbywgMCkpO1xuIH1cbiBcbiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX191cGRhdGVfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuQEAgLTE0MiwxMCAmIzQzOzE0Nyw0MiBAQCBzdGF0aWMgaW5saW5lIGludCBscnVfdGllcl9mcm9tX3JlZnMoaW50IHJlZnMsIGJvb2wgd29ya2luZ3NldClcbiBcdHJldHVybiB3b3JraW5nc2V0ID8gTUFYX05SX1RJRVJTIC0gMSA6IG9yZGVyX2Jhc2VfMihyZWZzKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X3JlZnMoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7LyoqXG4mIzQzOyAqIGxydV9nZW5fZnJvbV9mbGFncyAtIFJldHVybiB0aGUgTFJVIGdlbmVyYXRpb24gbnVtYmVyIGZyb20gZm9saW8gZmxhZ3MuXG4mIzQzOyAqIEBmbGFnczogZm9saW8gZmxhZ3NcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogQSBudW1iZXIgYmV0d2VlbiAwIGFuZCAoTUFYX05SX0dFTlMgLSAxKSwgaW5jbHVzaXZlLiBSZXR1cm5zXG4mIzQzOyAqIC0xIGlmIHRoZSBmbGFncyBpbmRpY2F0ZSB0aGUgZm9saW8gaXMgb2ZmIHRoZSBsaXN0IChlLmcuLCBpc29sYXRlZCkuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIGludCBscnVfZ2VuX2Zyb21fZmxhZ3ModW5zaWduZWQgbG9uZyBmbGFncylcbiYjNDM7e1xuJiM0MztcdGludCBnZW4gPSAoKGZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spIFx1MDAzZVx1MDAzZSBMUlVfR0VOX1BHT0ZGKTtcbiYjNDM7XG4mIzQzO1x0QlVJTERfQlVHX09OKExSVV9HRU5fTUFTSyBcdTAwMjYgTFJVX1JFRlNfTUFTSyk7XG4mIzQzO1x0Z2VuIC09IDE7XG4mIzQzO1x0Vk1fV0FSTl9PTl9PTkNFKGdlbiAhPSAtMSBcdTAwMjZcdTAwMjYgZ2VuIFx1MDAzZT0gTUFYX05SX0dFTlMpO1xuJiM0MztcdHJldHVybiBnZW47XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBscnVfZ2VuX3NldF9mbGFncyAtIFNldCB0aGUgTFJVIGdlbmVyYXRpb24gbnVtYmVyIHRvIHNwZWNpZmllZCBmb2xpbyBmbGFncy5cbiYjNDM7ICogQGZsYWdzOiBwb2ludGVyIHRvIHRoZSBmb2xpbyBmbGFnc1xuJiM0MzsgKiBAZ2VuOiBnZW5lcmF0aW9uIG51bWJlciwgYmV0d2VlbiAwIGFuZCAoTUFYX05SX0dFTlMgLSAxKSwgaW5jbHVzaXZlLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGxydV9nZW5fc2V0X2ZsYWdzKHVuc2lnbmVkIGxvbmcgKmZsYWdzLCBpbnQgZ2VuKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tXHUwMDNlZmxhZ3MuZik7XG4mIzQzO1x0Vk1fV0FSTl9PTl9PTkNFKGdlbiBcdTAwM2U9IE1BWF9OUl9HRU5TIHx8IGdlbiBcdTAwM2MgMCk7XG4mIzQzO1xuJiM0MztcdCpmbGFncyBcdTAwMjY9IH5MUlVfR0VOX01BU0s7XG4mIzQzO1x0KmZsYWdzIHw9IChnZW4gJiM0MzsgMVVMKSBcdTAwM2NcdTAwM2MgTFJVX0dFTl9QR09GRjtcbiYjNDM7fVxuIFxuJiM0MzsvKipcbiYjNDM7ICogbHJ1X3JlZnNfZnJvbV9mbGFncyAtIFJldHVybiBMUlUgcmVmZXJlbmNlZCAvIGFjY2VzcyBjb3VudCBmcm9tIGZvbGlvIGZsYWdzLlxuJiM0MzsgKiBAZmxhZ3M6IGZvbGlvIGZsYWdzXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIGludCBscnVfcmVmc19mcm9tX2ZsYWdzKHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4mIzQzO3tcbiBcdGlmICghKGZsYWdzIFx1MDAyNiBCSVQoUEdfcmVmZXJlbmNlZCkpKVxuIFx0XHRyZXR1cm4gMDtcbiBcdC8qXG5AQCAtMTU1LDExICYjNDM7MTkyLDQwIEBAIHN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9yZWZzKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRyZXR1cm4gKChmbGFncyBcdTAwMjYgTFJVX1JFRlNfTUFTSykgXHUwMDNlXHUwMDNlIExSVV9SRUZTX1BHT0ZGKSAmIzQzOyAxO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfZ2VuKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzOy8qKlxuJiM0MzsgKiBscnVfcmVmc19zZXRfZmxhZ3MgLSBTZXQgdGhlIExSVSByZWZlcmVuY2VkIC8gYWNjZXNzIGNvdW50IHRvIHNwZWNpZmllZCBmb2xpbyBmbGFncy5cbiYjNDM7ICogQGZsYWdzOiBwb2ludGVyIHRvIHRoZSBmb2xpbyBmbGFnc1xuJiM0MzsgKiBAcmVmczogcmVmZXJlbmNlZCAvIGFjY2VzcyBjb3VudCBudW1iZXIsIGJldHdlZW4gMCBhbmQgTFJVX1JFRlNfTUFYLCBpbmNsdXNpdmUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbHJ1X3JlZnNfc2V0X2ZsYWdzKHVuc2lnbmVkIGxvbmcgKmZsYWdzLCB1bnNpZ25lZCBpbnQgcmVmcylcbiYjNDM7e1xuJiM0MztcdFZNX1dBUk5fT05fT05DRShyZWZzIFx1MDAzZSBMUlVfUkVGU19NQVgpO1xuJiM0MztcdEJVSUxEX0JVR19PTihMUlVfUkVGU19NQVggIT0gKExSVV9SRUZTX01BU0sgXHUwMDNlXHUwMDNlIExSVV9SRUZTX1BHT0ZGKSAmIzQzOyAxKTtcbiYjNDM7XG4mIzQzO1x0KmZsYWdzIFx1MDAyNj0gfkxSVV9SRUZTX0ZMQUdTO1xuJiM0MztcdGlmICghcmVmcylcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHQqZmxhZ3MgfD0gKEJJVChQR19yZWZlcmVuY2VkKSB8ICgocmVmcyAtIDFVTCkgXHUwMDNjXHUwMDNjIExSVV9SRUZTX1BHT0ZGKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9yZWZzKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gbHJ1X3JlZnNfZnJvbV9mbGFncyhSRUFEX09OQ0UoKmNvbnN0X2ZvbGlvX2ZsYWdzKGZvbGlvLCAwKSkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fc2V0X2xydV9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCByZWZzKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tXHUwMDNlZmxhZ3MuZik7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTtcbiBcbi1cdHJldHVybiAoKGZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spIFx1MDAzZVx1MDAzZSBMUlVfR0VOX1BHT0ZGKSAtIDE7XG4mIzQzO1x0ZG8ge1xuJiM0MztcdFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzO1xuJiM0MztcdFx0bHJ1X3JlZnNfc2V0X2ZsYWdzKFx1MDAyNm5ld19mbGFncywgcmVmcyk7XG4mIzQzO1x0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X2dlbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGxydV9nZW5fZnJvbV9mbGFncyhSRUFEX09OQ0UoKmNvbnN0X2ZvbGlvX2ZsYWdzKGZvbGlvLCAwKSkpO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9pc19hY3RpdmUoY29uc3Qgc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgZ2VuKVxuQEAgLTI3MCw3ICYjNDM7MzM2LDcgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fYWRkX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdGdlbiA9IGxydV9nZW5fZnJvbV9zZXEoc2VxKTtcbiBcdGZsYWdzID0gKGdlbiAmIzQzOyAxVUwpIFx1MDAzY1x1MDAzYyBMUlVfR0VOX1BHT0ZGO1xuIFx0Lyogc2VlIHRoZSBjb21tZW50IG9uIE1JTl9OUl9HRU5TIGFib3V0IFBHX2FjdGl2ZSAqL1xuLVx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfR0VOX01BU0sgfCBCSVQoUEdfYWN0aXZlKSwgZmxhZ3MpO1xuJiM0MztcdHNldF9tYXNrX2JpdHMoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBMUlVfR0VOX01BU0sgfCBCSVQoUEdfYWN0aXZlKSwgZmxhZ3MpO1xuIFxuIFx0bHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCAtMSwgZ2VuKTtcbiBcdC8qIGZvciBmb2xpb19yb3RhdGVfcmVjbGFpbWFibGUoKSAqL1xuQEAgLTI5NSw3ICYjNDM7MzYxLDcgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZGVsX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcbiBcdC8qIGZvciBmb2xpb19taWdyYXRlX2ZsYWdzKCkgKi9cbiBcdGZsYWdzID0gIXJlY2xhaW1pbmcgXHUwMDI2XHUwMDI2IGxydV9nZW5faXNfYWN0aXZlKGxydXZlYywgZ2VuKSA/IEJJVChQR19hY3RpdmUpIDogMDtcbi1cdGZsYWdzID0gc2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfR0VOX01BU0ssIGZsYWdzKTtcbiYjNDM7XHRmbGFncyA9IHNldF9tYXNrX2JpdHMoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBMUlVfR0VOX01BU0ssIGZsYWdzKTtcbiBcdGdlbiA9ICgoZmxhZ3MgXHUwMDI2IExSVV9HRU5fTUFTSykgXHUwMDNlXHUwMDNlIExSVV9HRU5fUEdPRkYpIC0gMTtcbiBcbiBcdGxydV9nZW5fdXBkYXRlX3NpemUobHJ1dmVjLCBmb2xpbywgZ2VuLCAtMSk7XG5AQCAtMzA0LDExICYjNDM7MzcwLDE5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2RlbF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfcmVmcyhzdHJ1Y3QgZm9saW8gKm5ldywgY29uc3Qgc3RydWN0IGZvbGlvICpvbGQpXG4mIzQzOy8qKlxuJiM0MzsgKiBmb2xpb19taWdyYXRlX2xydV9yZWZzIC0gY29weSB0aGUgcmVmZXJlbmNlIHN0YXRlIHRvIGEgbmV3IGZvbGlvXG4mIzQzOyAqIEBuZXc6IHRoZSBkZXN0aW5hdGlvbiBmb2xpb1xuJiM0MzsgKiBAb2xkOiB0aGUgc291cmNlIGZvbGlvXG4mIzQzOyAqXG4mIzQzOyAqIFRyYW5zZmVyIHRoZSByZWZlcmVuY2Ugc3RhdGUgdG8gQG5ldyBkdXJpbmcgbWlncmF0aW9uOiB0aGUgTUdMUlVcbiYjNDM7ICogcmVmcyBjb3VudCwgaW5jbHVkaW5nIFBHX3JlZmVyZW5jZWQsIG9yIGp1c3QgUEdfcmVmZXJlbmNlZCBmb3IgdGhlXG4mIzQzOyAqIGFjdGl2ZS9pbmFjdGl2ZSBMUlUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fbWlncmF0ZV9scnVfcmVmcyhzdHJ1Y3QgZm9saW8gKm5ldywgY29uc3Qgc3RydWN0IGZvbGlvICpvbGQpXG4ge1xuLVx0dW5zaWduZWQgbG9uZyByZWZzID0gUkVBRF9PTkNFKG9sZC1cdTAwM2VmbGFncy5mKSBcdTAwMjYgTFJVX1JFRlNfTUFTSztcbi1cbi1cdHNldF9tYXNrX2JpdHMoXHUwMDI2bmV3LVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX01BU0ssIHJlZnMpO1xuJiM0MztcdEJVSUxEX0JVR19PTihMUlVfUkVGU19NQVNLIFx1MDAyNiBCSVQoUEdfcmVmZXJlbmNlZCkpO1xuJiM0MztcdGZvbGlvX3NldF9scnVfcmVmcyhuZXcsIGZvbGlvX2xydV9yZWZzKG9sZCkpO1xuIH1cbiAjZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi9cbiBcbkBAIC0zMzcsOSAmIzQzOzQxMSwxMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9kZWxfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fbWlncmF0ZV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZClcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKVxuIHtcbi1cbiYjNDM7XHRpZiAoZm9saW9fdGVzdF9yZWZlcmVuY2VkKG9sZCkpXG4mIzQzO1x0XHRmb2xpb19zZXRfcmVmZXJlbmNlZChuZXcpO1xuIH1cbiAjZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxuaW5kZXggOTRmOWMzZmY1NDE2MC4uOWIyN2NmNTNiZGJjNyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW16b25lLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW16b25lLmhcbkBAIC00OTIsMTEgJiM0Mzs0OTIsMTQgQEAgZW51bSBscnV2ZWNfZmxhZ3Mge1xuICAqIGZvbGlvLVx1MDAzZWZsYWdzLCBtYXNrZWQgYnkgTFJVX1JFRlNfTUFTSy5cbiAgKi9cbiAjZGVmaW5lIE1BWF9OUl9USUVSU1x0XHQ0VVxuJiM0MzsjZGVmaW5lIExSVV9USUVSX01JTlx0XHQwVVxuJiM0MzsjZGVmaW5lIExSVV9USUVSX01BWFx0XHQoTUFYX05SX1RJRVJTIC0gMSlcbiBcbiAjaWZuZGVmIF9fR0VORVJBVElOR19CT1VORFNfSFxuIFxuICNkZWZpbmUgTFJVX0dFTl9NQVNLXHRcdCgoQklUKExSVV9HRU5fV0lEVEgpIC0gMSkgXHUwMDNjXHUwMDNjIExSVV9HRU5fUEdPRkYpXG4gI2RlZmluZSBMUlVfUkVGU19NQVNLXHRcdCgoQklUKExSVV9SRUZTX1dJRFRIKSAtIDEpIFx1MDAzY1x1MDAzYyBMUlVfUkVGU19QR09GRilcbiYjNDM7I2RlZmluZSBMUlVfUkVGU19NQVhcdFx0QklUKExSVV9SRUZTX1dJRFRIKVxuIFxuIC8qXG4gICogRm9yIGZvbGlvcyBhY2Nlc3NlZCBtdWx0aXBsZSB0aW1lcyB0aHJvdWdoIGZpbGUgZGVzY3JpcHRvcnMsXG5kaWZmIC0tZ2l0IGEvbW0vZm9saW8uYyBiL21tL2ZvbGlvLmNcbmluZGV4IGMwMmRjZWE5YzAzYzIuLmE5MzIwNTkwNTdhYzEgMTAwNjQ0XG4tLS0gYS9tbS9mb2xpby5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9mb2xpby5jXG5AQCAtMzUzLDI2ICYjNDM7MzUzLDI4IEBAIHN0YXRpYyB2b2lkIF9fbHJ1X2NhY2hlX2FjdGl2YXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXG4gc3RhdGljIHZvaWQgbHJ1X2dlbl9pbmNfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tXHUwMDNlZmxhZ3MuZik7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTtcbiYjNDM7XHRpbnQgcmVmcztcbiBcbiBcdGlmIChmb2xpb190ZXN0X3VuZXZpY3RhYmxlKGZvbGlvKSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0Lyogc2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTICovXG4tXHRpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykpIHtcbi1cdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19NQVNLLCBCSVQoUEdfcmVmZXJlbmNlZCkpO1xuJiM0MztcdGlmICghZm9saW9fbHJ1X3JlZnMoZm9saW8pKSB7XG4mIzQzO1x0XHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDEpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4gXHRkbyB7XG4tXHRcdGlmICgob2xkX2ZsYWdzIFx1MDAyNiBMUlVfUkVGU19NQVNLKSA9PSBMUlVfUkVGU19NQVNLKSB7XG4mIzQzO1x0XHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3M7XG4mIzQzO1x0XHRyZWZzID0gbHJ1X3JlZnNfZnJvbV9mbGFncyhvbGRfZmxhZ3MpO1xuJiM0MztcdFx0aWYgKHJlZnMgPT0gTFJVX1JFRlNfTUFYKSB7XG4gXHRcdFx0aWYgKCFmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pKVxuIFx0XHRcdFx0Zm9saW9fc2V0X3dvcmtpbmdzZXQoZm9saW8pO1xuIFx0XHRcdHJldHVybjtcbiBcdFx0fVxuLVxuLVx0XHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3MgJiM0MzsgQklUKExSVV9SRUZTX1BHT0ZGKTtcbi1cdH0gd2hpbGUgKCF0cnlfY21weGNoZyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xuJiM0MztcdFx0bHJ1X3JlZnNfc2V0X2ZsYWdzKFx1MDAyNm5ld19mbGFncywgcmVmcyAmIzQzOyAxKTtcbiYjNDM7XHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBscnVfZ2VuX2NsZWFyX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcbkBAIC0zODQsNyAmIzQzOzM4Niw4IEBAIHN0YXRpYyBib29sIGxydV9nZW5fY2xlYXJfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0aWYgKGdlbiBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHRydWU7XG4gXG4tXHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX0ZMQUdTIHwgQklUKFBHX3dvcmtpbmdzZXQpLCAwKTtcbiYjNDM7XHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xuJiM0MztcdGZvbGlvX2NsZWFyX3dvcmtpbmdzZXQoZm9saW8pO1xuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuIFx0c2VxID0gUkVBRF9PTkNFKGZvbGlvX2xydXZlYyhmb2xpbyktXHUwMDNlbHJ1Z2VuLm1pbl9zZXFbdHlwZV0pO1xuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuY1xuaW5kZXggMTFiODVmNGI2ODI4Yi4uYTc1NzJkZWQ1NmM5ZCAxMDA2NDRcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC5jXG5AQCAtMTUyOSwyOCAmIzQzOzE1MjksMTIgQEAgdm9pZCBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbHJ1X2xpc3QgbHJ1LFxuIFx0XHRcdFx0aW50IHppZCwgbG9uZyBucl9wYWdlcylcbiB7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXo7XG4tXHR1bnNpZ25lZCBsb25nICpscnVfc2l6ZTtcbi1cdGxvbmcgc2l6ZTtcbiBcbiBcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXG4gXHRcdHJldHVybjtcbiBcbiBcdG16ID0gY29udGFpbmVyX29mKGxydXZlYywgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUsIGxydXZlYyk7XG4tXHRscnVfc2l6ZSA9IFx1MDAyNm16LVx1MDAzZWxydV96b25lX3NpemVbemlkXVtscnVdO1xuLVxuLVx0aWYgKG5yX3BhZ2VzIFx1MDAzYyAwKVxuLVx0XHQqbHJ1X3NpemUgJiM0Mzs9IG5yX3BhZ2VzO1xuLVxuLVx0c2l6ZSA9ICpscnVfc2l6ZTtcbi1cdGlmIChXQVJOX09OQ0Uoc2l6ZSBcdTAwM2MgMCxcbi1cdFx0XCYjMzQ7JXMoJXAsICVkLCAlbGQpOiBscnVfc2l6ZSAlbGRcXG5cJiMzNDssXG4tXHRcdF9fZnVuY19fLCBscnV2ZWMsIGxydSwgbnJfcGFnZXMsIHNpemUpKSB7XG4tXHRcdFZNX0JVR19PTigxKTtcbi1cdFx0KmxydV9zaXplID0gMDtcbi1cdH1cbi1cbi1cdGlmIChucl9wYWdlcyBcdTAwM2UgMClcbi1cdFx0KmxydV9zaXplICYjNDM7PSBucl9wYWdlcztcbiYjNDM7XHRhdG9taWNfbG9uZ19hZGQobnJfcGFnZXMsIFx1MDAyNm16LVx1MDAzZWxydV96b25lX3NpemVbemlkXVtscnVdKTtcbiB9XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZS5jIGIvbW0vbWlncmF0ZS5jXG5pbmRleCAxNWI0NTgzMmJjZmE3Li5hMzY5ZDBjOTVjMzg2IDEwMDY0NFxuLS0tIGEvbW0vbWlncmF0ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9taWdyYXRlLmNcbkBAIC03NzYsOCAmIzQzOzc3Niw5IEBAIHZvaWQgZm9saW9fbWlncmF0ZV9mbGFncyhzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdGludCBjcHVwaWQ7XG4gXG4tXHRpZiAoZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSlcbi1cdFx0Zm9saW9fc2V0X3JlZmVyZW5jZWQobmV3Zm9saW8pO1xuJiM0MztcdC8qIENvcHkgdGhlIHJlZmVyZW5jZSBzdGF0ZSwgaW5jbHVkaW5nIFBHX3JlZmVyZW5jZWQgKi9cbiYjNDM7XHRmb2xpb19taWdyYXRlX2xydV9yZWZzKG5ld2ZvbGlvLCBmb2xpbyk7XG4mIzQzO1xuIFx0aWYgKGZvbGlvX3Rlc3RfdXB0b2RhdGUoZm9saW8pKVxuIFx0XHRmb2xpb19tYXJrX3VwdG9kYXRlKG5ld2ZvbGlvKTtcbiBcdGlmIChmb2xpb190ZXN0X2NsZWFyX2FjdGl2ZShmb2xpbykpIHtcbkBAIC04MDcsNyAmIzQzOzgwOCw2IEBAIHZvaWQgZm9saW9fbWlncmF0ZV9mbGFncyhzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0aWYgKGZvbGlvX3Rlc3RfaWRsZShmb2xpbykpXG4gXHRcdGZvbGlvX3NldF9pZGxlKG5ld2ZvbGlvKTtcbiBcbi1cdGZvbGlvX21pZ3JhdGVfcmVmcyhuZXdmb2xpbywgZm9saW8pO1xuIFx0LypcbiBcdCAqIENvcHkgTlVNQSBpbmZvcm1hdGlvbiB0byB0aGUgbmV3IHBhZ2UsIHRvIHByZXZlbnQgb3Zlci1lYWdlclxuIFx0ICogZnV0dXJlIG1pZ3JhdGlvbnMgb2YgdGhpcyBzYW1lIHBhZ2UuXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggNzNhODFiNGEzZTE2NC4uNmZkYTk0OGFlY2YyYyAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uY1xuQEAgLTg0MywxOSAmIzQzOzg0MywyMiBAQCBzdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXG4gXHRpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykgXHUwMDI2XHUwMDI2ICFmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pKSB7XG4gXHRcdC8qIEFjdGl2YXRlIGZpbGUtYmFja2VkIGV4ZWN1dGFibGUgZm9saW9zIGFmdGVyIGZpcnN0IHVzYWdlLiAqL1xuIFx0XHRpZiAoaXNfZXhlY19maWxlX2ZvbGlvKGZvbGlvLCB2bWFfZmxhZ3MpKSB7XG4tXHRcdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX3dvcmtpbmdzZXQpKTtcbiYjNDM7XHRcdFx0Zm9saW9fc2V0X3dvcmtpbmdzZXQoZm9saW8pO1xuJiM0MztcdFx0XHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xuIFx0XHRcdHJldHVybiB0cnVlO1xuIFx0XHR9XG4gXG4tXHRcdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgQklUKFBHX3JlZmVyZW5jZWQpKTtcbiYjNDM7XHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMSk7XG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbiBcbiBcdC8qIFByb21vdGUgb24gc2Vjb25kIGFjY2VzcyAqL1xuLVx0aWYgKGZvbGlvX2xydV9yZWZzKGZvbGlvKSBcdTAwM2UgMSlcbi1cdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX3dvcmtpbmdzZXQpKTtcbi1cdGVsc2VcbiYjNDM7XHRpZiAoZm9saW9fbHJ1X3JlZnMoZm9saW8pIFx1MDAzZSAxKSB7XG4mIzQzO1x0XHRmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7XG4mIzQzO1x0XHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xuJiM0MztcdH0gZWxzZSB7XG4gXHRcdGZvbGlvX21hcmtfYWNjZXNzZWQoZm9saW8pO1xuJiM0MztcdH1cbiBcdHJldHVybiB0cnVlO1xuIH1cbiAjZWxzZVxuQEAgLTMxOTUsOCAmIzQzOzMxOTgsOCBAQCBzdHJ1Y3QgY3RybF9wb3Mge1xuIFx0aW50IGdhaW47XG4gfTtcbiBcbi1zdGF0aWMgdm9pZCByZWFkX2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCB0aWVyLCBpbnQgZ2Fpbixcbi1cdFx0XHQgIHN0cnVjdCBjdHJsX3BvcyAqcG9zKVxuJiM0MztzdGF0aWMgdm9pZCByZWFkX2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCB0aWVyX21pbixcbiYjNDM7XHRcdFx0ICBpbnQgdGllcl9tYXgsIGludCBnYWluLCBzdHJ1Y3QgY3RybF9wb3MgKnBvcylcbiB7XG4gXHRpbnQgaTtcbiBcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xuQEAgLTMyMDUsNyAmIzQzOzMyMDgsNyBAQCBzdGF0aWMgdm9pZCByZWFkX2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCB0aWVyLCBpbnQgZ2FpbixcbiBcdHBvcy1cdTAwM2VnYWluID0gZ2FpbjtcbiBcdHBvcy1cdTAwM2VyZWZhdWx0ZWQgPSBwb3MtXHUwMDNldG90YWwgPSAwO1xuIFxuLVx0Zm9yIChpID0gdGllciAlIE1BWF9OUl9USUVSUzsgaSBcdTAwM2M9IG1pbih0aWVyLCBNQVhfTlJfVElFUlMgLSAxKTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRmb3IgKGkgPSB0aWVyX21pbjsgaSBcdTAwM2M9IHRpZXJfbWF4OyBpJiM0MzsmIzQzOykge1xuIFx0XHRwb3MtXHUwMDNlcmVmYXVsdGVkICYjNDM7PSBscnVnZW4tXHUwMDNlYXZnX3JlZmF1bHRlZFt0eXBlXVtpXSAmIzQzO1xuIFx0XHRcdFx0ICBhdG9taWNfbG9uZ19yZWFkKFx1MDAyNmxydWdlbi1cdTAwM2VyZWZhdWx0ZWRbaGlzdF1bdHlwZV1baV0pO1xuIFx0XHRwb3MtXHUwMDNldG90YWwgJiM0Mzs9IGxydWdlbi1cdTAwM2VhdmdfdG90YWxbdHlwZV1baV0gJiM0MztcbkBAIC0zMjY2LDExICYjNDM7MzI2OSwxMSBAQCBzdGF0aWMgYm9vbCBwb3NpdGl2ZV9jdHJsX2VycihzdHJ1Y3QgY3RybF9wb3MgKnNwLCBzdHJ1Y3QgY3RybF9wb3MgKnB2KVxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4gXG4gLyogcHJvbW90ZSBwYWdlcyBhY2Nlc3NlZCB0aHJvdWdoIHBhZ2UgdGFibGVzICovXG4tc3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBnZW4sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXG4mIzQzO3N0YXRpYyBpbnQgZm9saW9fdXBkYXRlX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbmV3X2dlbiwgaW50ICppc19maWxlLFxuJiM0MztcdFx0XHQgICAgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcbiB7XG4tXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVx1MDAzZWZsYWdzLmYpO1xuLVxuLVx0Vk1fV0FSTl9PTl9PTkNFKGdlbiBcdTAwM2U9IE1BWF9OUl9HRU5TKTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKCpmb2xpb19mbGFncyhmb2xpbywgMCkpO1xuJiM0MztcdGludCBvbGRfZ2VuO1xuIFxuIFx0LypcbiBcdCAqIFNlZSB0aGUgY29tbWVudCBvbiBMUlVfUkVGU19GTEFHUywgYW5kIGFjdGl2YXRlIGZpbGUtYmFja2VkXG5AQCAtMzI3OSwyMCAmIzQzOzMyODIsMjUgQEAgc3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBnZW4sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFcbiBcdCAqL1xuIFx0aWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pIFx1MDAyNlx1MDAyNiAhZm9saW9fdGVzdF93b3JraW5nc2V0KGZvbGlvKSBcdTAwMjZcdTAwMjZcbiBcdCAgICAhaXNfZXhlY19maWxlX2ZvbGlvKGZvbGlvLCB2bWFfZmxhZ3MpKSB7XG4tXHRcdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgQklUKFBHX3JlZmVyZW5jZWQpKTtcbiYjNDM7XHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMSk7XG4gXHRcdHJldHVybiAtMTtcbiBcdH1cbiBcbiBcdGRvIHtcbiYjNDM7XHRcdG9sZF9nZW4gPSBscnVfZ2VuX2Zyb21fZmxhZ3Mob2xkX2ZsYWdzKTtcbiYjNDM7XHRcdG5ld19mbGFncyA9IG9sZF9mbGFncztcbiYjNDM7XG4gXHRcdC8qIGxydV9nZW5fZGVsX2ZvbGlvKCkgaGFzIGlzb2xhdGVkIHRoaXMgcGFnZT8gKi9cbi1cdFx0aWYgKCEob2xkX2ZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spKVxuLVx0XHRcdHJldHVybiAtMTtcbiYjNDM7XHRcdGlmIChvbGRfZ2VuIFx1MDAzYyAwKVxuJiM0MztcdFx0XHRicmVhaztcbiBcbi1cdFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzIFx1MDAyNiB+KExSVV9HRU5fTUFTSyB8IExSVV9SRUZTX0ZMQUdTKTtcbi1cdFx0bmV3X2ZsYWdzIHw9ICgoZ2VuICYjNDM7IDFVTCkgXHUwMDNjXHUwMDNjIExSVV9HRU5fUEdPRkYpIHwgQklUKFBHX3dvcmtpbmdzZXQpO1xuLVx0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XG4mIzQzO1x0XHRscnVfZ2VuX3NldF9mbGFncyhcdTAwMjZuZXdfZmxhZ3MsIG5ld19nZW4pO1xuJiM0MztcdFx0bHJ1X3JlZnNfc2V0X2ZsYWdzKFx1MDAyNm5ld19mbGFncywgMCk7XG4mIzQzO1x0XHRuZXdfZmxhZ3MgfD0gQklUKFBHX3dvcmtpbmdzZXQpO1xuJiM0MztcdH0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksIFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XG4gXG4tXHRyZXR1cm4gKChvbGRfZmxhZ3MgXHUwMDI2IExSVV9HRU5fTUFTSykgXHUwMDNlXHUwMDNlIExSVV9HRU5fUEdPRkYpIC0gMTtcbiYjNDM7XHQqaXNfZmlsZSA9IGZvbGlvX2ZsYWdzX2lzX2ZpbGVfbHJ1KFx1MDAyNm9sZF9mbGFncyk7XG4mIzQzO1x0cmV0dXJuIG9sZF9nZW47XG4gfVxuIFxuIC8qIHByb3RlY3QgcGFnZXMgYWNjZXNzZWQgbXVsdGlwbGUgdGltZXMgdGhyb3VnaCBmaWxlIGRlc2NyaXB0b3JzICovXG5AQCAtMzMwMSwyMSAmIzQzOzMzMDksMjAgQEAgc3RhdGljIGludCBmb2xpb19pbmNfZ2VuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdGludCB0eXBlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pO1xuIFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG4gXHRpbnQgbmV3X2dlbiwgb2xkX2dlbiA9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLVx1MDAzZW1pbl9zZXFbdHlwZV0pO1xuLVx0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRShmb2xpby1cdTAwM2VmbGFncy5mKTtcbi1cbi1cdFZNX1dBUk5fT05fT05DRV9GT0xJTyghKG9sZF9mbGFncyBcdTAwMjYgTFJVX0dFTl9NQVNLKSwgZm9saW8pO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XG4gXG4gXHRkbyB7XG4tXHRcdG5ld19nZW4gPSAoKG9sZF9mbGFncyBcdTAwMjYgTFJVX0dFTl9NQVNLKSBcdTAwM2VcdTAwM2UgTFJVX0dFTl9QR09GRikgLSAxO1xuJiM0MztcdFx0bmV3X2dlbiA9IGxydV9nZW5fZnJvbV9mbGFncyhvbGRfZmxhZ3MpO1xuJiM0MztcbiBcdFx0LyogZm9saW9fdXBkYXRlX2dlbigpIGhhcyBwcm9tb3RlZCB0aGlzIHBhZ2U/ICovXG4gXHRcdGlmIChuZXdfZ2VuIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgbmV3X2dlbiAhPSBvbGRfZ2VuKVxuIFx0XHRcdHJldHVybiBuZXdfZ2VuO1xuIFxuJiM0MztcdFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzO1xuIFx0XHRuZXdfZ2VuID0gKG9sZF9nZW4gJiM0MzsgMSkgJSBNQVhfTlJfR0VOUztcbi1cbi1cdFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzIFx1MDAyNiB+KExSVV9HRU5fTUFTSyB8IExSVV9SRUZTX0ZMQUdTKTtcbi1cdFx0bmV3X2ZsYWdzIHw9IChuZXdfZ2VuICYjNDM7IDFVTCkgXHUwMDNjXHUwMDNjIExSVV9HRU5fUEdPRkY7XG4tXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbiYjNDM7XHRcdGxydV9nZW5fc2V0X2ZsYWdzKFx1MDAyNm5ld19mbGFncywgbmV3X2dlbik7XG4mIzQzO1x0XHRscnVfcmVmc19zZXRfZmxhZ3MoXHUwMDI2bmV3X2ZsYWdzLCAwKTtcbiYjNDM7XHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xuIFxuIFx0bHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTtcbiBcbkBAIC0zMzIzLDkgJiM0MzszMzMwLDggQEAgc3RhdGljIGludCBmb2xpb19pbmNfZ2VuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcbiB9XG4gXG4gc3RhdGljIHZvaWQgdXBkYXRlX2JhdGNoX3NpemUoc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaywgc3RydWN0IGZvbGlvICpmb2xpbyxcbi1cdFx0XHQgICAgICBpbnQgb2xkX2dlbiwgaW50IG5ld19nZW4pXG4mIzQzO1x0XHRcdCAgICAgIGludCBvbGRfZ2VuLCBpbnQgbmV3X2dlbiwgaW50IHR5cGUpXG4ge1xuLVx0aW50IHR5cGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7XG4gXHRpbnQgem9uZSA9IGZvbGlvX3pvbmVudW0oZm9saW8pO1xuIFx0aW50IGRlbHRhID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuIFxuQEAgLTM1MTIsMjIgJiM0MzszNTE4LDI0IEBAIHN0YXRpYyBib29sIHN1aXRhYmxlX3RvX3NjYW4oaW50IHRvdGFsLCBpbnQgeW91bmcpXG4gfVxuIFxuIHN0YXRpYyB2b2lkIHdhbGtfdXBkYXRlX2ZvbGlvKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLVx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbmV3X2dlbiwgYm9vbCBkaXJ0eSlcbiYjNDM7XHRcdHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBkaXJ0eSlcbiB7XG4tXHRpbnQgb2xkX2dlbjtcbiYjNDM7XHRpbnQgbmV3X2dlbiwgb2xkX2dlbiwgZmlsZTtcbiBcbiBcdGlmICghZm9saW8pXG4gXHRcdHJldHVybjtcbiBcbiYjNDM7XHRuZXdfZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShSRUFEX09OQ0UobHJ1dmVjLVx1MDAzZWxydWdlbi5tYXhfc2VxKSk7XG4mIzQzO1xuIFx0aWYgKGRpcnR5IFx1MDAyNlx1MDAyNiAhZm9saW9fdGVzdF9kaXJ0eShmb2xpbykgXHUwMDI2XHUwMDI2XG4gXHQgICAgIShmb2xpb190ZXN0X2Fub24oZm9saW8pIFx1MDAyNlx1MDAyNiBmb2xpb190ZXN0X3N3YXBiYWNrZWQoZm9saW8pIFx1MDAyNlx1MDAyNlxuIFx0ICAgICAgIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkpXG4gXHRcdGZvbGlvX21hcmtfZGlydHkoZm9saW8pO1xuIFxuIFx0aWYgKHdhbGspIHtcbi1cdFx0b2xkX2dlbiA9IGZvbGlvX3VwZGF0ZV9nZW4oZm9saW8sIG5ld19nZW4sIFx1MDAyNnZtYS1cdTAwM2VmbGFncyk7XG4mIzQzO1x0XHRvbGRfZ2VuID0gZm9saW9fdXBkYXRlX2dlbihmb2xpbywgbmV3X2dlbiwgXHUwMDI2ZmlsZSwgXHUwMDI2dm1hLVx1MDAzZWZsYWdzKTtcbiBcdFx0aWYgKG9sZF9nZW4gXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBvbGRfZ2VuICE9IG5ld19nZW4pXG4tXHRcdFx0dXBkYXRlX2JhdGNoX3NpemUod2FsaywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4pO1xuJiM0MztcdFx0XHR1cGRhdGVfYmF0Y2hfc2l6ZSh3YWxrLCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbiwgZmlsZSk7XG4gXHR9IGVsc2UgaWYgKGxydV9nZW5fc2V0X3JlZnMoZm9saW8sIFx1MDAyNnZtYS1cdTAwM2VmbGFncykpIHtcbiBcdFx0b2xkX2dlbiA9IGZvbGlvX2xydV9nZW4oZm9saW8pO1xuIFx0XHRpZiAob2xkX2dlbiBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IG9sZF9nZW4gIT0gbmV3X2dlbilcbkBAIC0zNTQ5LDggJiM0MzszNTU3LDYgQEAgc3RhdGljIGJvb2wgd2Fsa19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrID0gYXJncy1cdTAwM2Vwcml2YXRlO1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKHdhbGstXHUwMDNlbHJ1dmVjKTtcbiBcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQod2Fsay1cdTAwM2VscnV2ZWMpO1xuLVx0REVGSU5FX01BWF9TRVEod2Fsay1cdTAwM2VscnV2ZWMpO1xuLVx0aW50IGdlbiA9IGxydV9nZW5fZnJvbV9zZXEobWF4X3NlcSk7XG4gXHR1bnNpZ25lZCBpbnQgbnI7XG4gXHRwbWRfdCBwbWR2YWw7XG4gXG5AQCAtMzYwMSw3ICYjNDM7MzYwNyw3IEBAIHN0YXRpYyBib29sIHdhbGtfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRpZiAobGFzdCAhPSBmb2xpbykge1xuLVx0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtXHUwMDNldm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcbiYjNDM7XHRcdFx0d2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy1cdTAwM2V2bWEsIHdhbGstXHUwMDNlbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XG4gXG4gXHRcdFx0bGFzdCA9IGZvbGlvO1xuIFx0XHRcdGRpcnR5ID0gZmFsc2U7XG5AQCAtMzYxNCw3ICYjNDM7MzYyMCw3IEBAIHN0YXRpYyBib29sIHdhbGtfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0XHR3YWxrLVx1MDAzZW1tX3N0YXRzW01NX0xFQUZfWU9VTkddICYjNDM7PSBucjtcbiBcdH1cbiBcbi1cdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtXHUwMDNldm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcbiYjNDM7XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBhcmdzLVx1MDAzZXZtYSwgd2Fsay1cdTAwM2VscnV2ZWMsIGxhc3QsIGRpcnR5KTtcbiBcdGxhc3QgPSBOVUxMO1xuIFxuIFx0aWYgKGkgXHUwMDNjIFBUUlNfUEVSX1BURSBcdTAwMjZcdTAwMjYgZ2V0X25leHRfdm1hKFBNRF9NQVNLLCBQQUdFX1NJWkUsIGFyZ3MsIFx1MDAyNnN0YXJ0LCBcdTAwMjZlbmQpKVxuQEAgLTM2MzcsOCAmIzQzOzM2NDMsNiBAQCBzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYVxuIFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGFyZ3MtXHUwMDNlcHJpdmF0ZTtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyh3YWxrLVx1MDAzZWxydXZlYyk7XG4gXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KHdhbGstXHUwMDNlbHJ1dmVjKTtcbi1cdERFRklORV9NQVhfU0VRKHdhbGstXHUwMDNlbHJ1dmVjKTtcbi1cdGludCBnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpO1xuIFxuIFx0Vk1fV0FSTl9PTl9PTkNFKHB1ZF9sZWFmKCpwdWQpKTtcbiBcbkBAIC0zNjkyLDcgJiM0MzszNjk2LDcgQEAgc3RhdGljIHZvaWQgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IHZtX2FyZWFcbiBcdFx0XHRnb3RvIG5leHQ7XG4gXG4gXHRcdGlmIChsYXN0ICE9IGZvbGlvKSB7XG4tXHRcdFx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcbiYjNDM7XHRcdFx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCB3YWxrLVx1MDAzZWxydXZlYywgbGFzdCwgZGlydHkpO1xuIFxuIFx0XHRcdGxhc3QgPSBmb2xpbztcbiBcdFx0XHRkaXJ0eSA9IGZhbHNlO1xuQEAgLTM3MDYsNyAmIzQzOzM3MTAsNyBAQCBzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYVxuIFx0XHRpID0gaSBcdTAwM2UgTUlOX0xSVV9CQVRDSCA/IDAgOiBmaW5kX25leHRfYml0KGJpdG1hcCwgTUlOX0xSVV9CQVRDSCwgaSkgJiM0MzsgMTtcbiBcdH0gd2hpbGUgKGkgXHUwMDNjPSBNSU5fTFJVX0JBVENIKTtcbiBcbi1cdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XG4mIzQzO1x0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCB3YWxrLVx1MDAzZWxydXZlYywgbGFzdCwgZGlydHkpO1xuIFxuIFx0bGF6eV9tbXVfbW9kZV9kaXNhYmxlKCk7XG4gXHRzcGluX3VubG9jayhwdGwpO1xuQEAgLTQyNzAsOCAmIzQzOzQyNzQsNiBAQCBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXG4gXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gZm9saW9fcGdkYXQoZm9saW8pO1xuIFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjO1xuIFx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlO1xuLVx0dW5zaWduZWQgbG9uZyBtYXhfc2VxO1xuLVx0aW50IGdlbjtcbiBcbiBcdGxvY2tkZXBfYXNzZXJ0X2hlbGQocHZtdy1cdTAwM2VwdGwpO1xuIFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3RfbHJ1KGZvbGlvKSwgZm9saW8pO1xuQEAgLTQzMDgsOCAmIzQzOzQzMTAsNiBAQCBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXG4gXG4gXHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fZm9saW8oZm9saW8pO1xuIFx0bHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIHBnZGF0KTtcbi1cdG1heF9zZXEgPSBSRUFEX09OQ0UoKGxydXZlYyktXHUwMDNlbHJ1Z2VuLm1heF9zZXEpO1xuLVx0Z2VuID0gbHJ1X2dlbl9mcm9tX3NlcShtYXhfc2VxKTtcbiBcdG1tX3N0YXRlID0gZ2V0X21tX3N0YXRlKGxydXZlYyk7XG4gXG4gXHRsYXp5X21tdV9tb2RlX2VuYWJsZSgpO1xuQEAgLTQzNDEsNyAmIzQzOzQzNDEsNyBAQCBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGlmIChsYXN0ICE9IGZvbGlvKSB7XG4tXHRcdFx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcbiYjNDM7XHRcdFx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBscnV2ZWMsIGxhc3QsIGRpcnR5KTtcbiBcbiBcdFx0XHRsYXN0ID0gZm9saW87XG4gXHRcdFx0ZGlydHkgPSBmYWxzZTtcbkBAIC00MzUzLDEzICYjNDM7NDM1MywxNCBAQCBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXG4gXHRcdHlvdW5nICYjNDM7PSBucjtcbiBcdH1cbiBcbi1cdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XG4mIzQzO1x0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBscnV2ZWMsIGxhc3QsIGRpcnR5KTtcbiBcbiBcdGxhenlfbW11X21vZGVfZGlzYWJsZSgpO1xuIFxuIFx0LyogZmVlZGJhY2sgZnJvbSBybWFwIHdhbGtlcnMgdG8gcGFnZSB0YWJsZSB3YWxrZXJzICovXG4gXHRpZiAobW1fc3RhdGUgXHUwMDI2XHUwMDI2IHN1aXRhYmxlX3RvX3NjYW4oaSwgeW91bmcpKVxuLVx0XHR1cGRhdGVfYmxvb21fZmlsdGVyKG1tX3N0YXRlLCBtYXhfc2VxLCBwdm13LVx1MDAzZXBtZCk7XG4mIzQzO1x0XHR1cGRhdGVfYmxvb21fZmlsdGVyKG1tX3N0YXRlLCBSRUFEX09OQ0UobHJ1dmVjLVx1MDAzZWxydWdlbi5tYXhfc2VxKSxcbiYjNDM7XHRcdFx0XHQgICAgcHZtdy1cdTAwM2VwbWQpO1xuIFxuIFx0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xuIFxuQEAgLTQ3MTYsNyAmIzQzOzQ3MTcsNyBAQCBzdGF0aWMgYm9vbCBpc29sYXRlX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHNjYVxuIFxuIFx0Lyogc2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTICovXG4gXHRpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykpXG4tXHRcdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgMCk7XG4mIzQzO1x0XHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xuIFxuIFx0c3VjY2VzcyA9IGxydV9nZW5fZGVsX2ZvbGlvKGxydXZlYywgZm9saW8sIHRydWUpO1xuIFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFzdWNjZXNzLCBmb2xpbyk7XG5AQCAtNDgwOSw5ICYjNDM7NDgxMCw5IEBAIHN0YXRpYyBpbnQgZ2V0X3RpZXJfaWR4KHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUpXG4gXHQgKiBUaGlzIHZhbHVlIGlzIGNob3NlbiBiZWNhdXNlIGFueSBvdGhlciB0aWVyIHdvdWxkIGhhdmUgYXQgbGVhc3QgdHdpY2VcbiBcdCAqIGFzIG1hbnkgcmVmYXVsdHMgYXMgdGhlIGZpcnN0IHRpZXIuXG4gXHQgKi9cbi1cdHJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCAwLCAyLCBcdTAwMjZzcCk7XG4tXHRmb3IgKHRpZXIgPSAxOyB0aWVyIFx1MDAzYyBNQVhfTlJfVElFUlM7IHRpZXImIzQzOyYjNDM7KSB7XG4tXHRcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCB0aWVyLCAzLCBcdTAwMjZwdik7XG4mIzQzO1x0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIExSVV9USUVSX01JTiwgTFJVX1RJRVJfTUlOLCAyLCBcdTAwMjZzcCk7XG4mIzQzO1x0Zm9yICh0aWVyID0gTFJVX1RJRVJfTUlOICYjNDM7IDE7IHRpZXIgXHUwMDNjPSBMUlVfVElFUl9NQVg7IHRpZXImIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRyZWFkX2N0cmxfcG9zKGxydXZlYywgdHlwZSwgdGllciwgdGllciwgMywgXHUwMDI2cHYpO1xuIFx0XHRpZiAoIXBvc2l0aXZlX2N0cmxfZXJyKFx1MDAyNnNwLCBcdTAwMjZwdikpXG4gXHRcdFx0YnJlYWs7XG4gXHR9XG5AQCAtNDgzMiw4ICYjNDM7NDgzMywxMCBAQCBzdGF0aWMgaW50IGdldF90eXBlX3RvX3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcylcbiBcdCAqIENvbXBhcmUgdGhlIHN1bSBvZiBhbGwgdGllcnMgb2YgYW5vbiB3aXRoIHRoYXQgb2YgZmlsZSB0byBkZXRlcm1pbmVcbiBcdCAqIHdoaWNoIHR5cGUgdG8gc2Nhbi5cbiBcdCAqL1xuLVx0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fQU5PTiwgTUFYX05SX1RJRVJTLCBzd2FwcGluZXNzLCBcdTAwMjZzcCk7XG4tXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9GSUxFLCBNQVhfTlJfVElFUlMsIE1BWF9TV0FQUElORVNTIC0gc3dhcHBpbmVzcywgXHUwMDI2cHYpO1xuJiM0MztcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0FOT04sIExSVV9USUVSX01JTiwgTFJVX1RJRVJfTUFYLFxuJiM0MztcdFx0ICAgICAgc3dhcHBpbmVzcywgXHUwMDI2c3ApO1xuJiM0MztcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0ZJTEUsIExSVV9USUVSX01JTiwgTFJVX1RJRVJfTUFYLFxuJiM0MztcdFx0ICAgICAgTUFYX1NXQVBQSU5FU1MgLSBzd2FwcGluZXNzLCBcdTAwMjZwdik7XG4gXG4gXHRyZXR1cm4gcG9zaXRpdmVfY3RybF9lcnIoXHUwMDI2c3AsIFx1MDAyNnB2KTtcbiB9XG5AQCAtNDkzMiw4ICYjNDM7NDkzNSwxMCBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdFx0fVxuIFxuIFx0XHQvKiBkb24mIzM5O3QgYWRkIHJlamVjdGVkIGZvbGlvcyB0byB0aGUgb2xkZXN0IGdlbmVyYXRpb24gKi9cbi1cdFx0aWYgKGxydV9nZW5fZm9saW9fc2VxKGxydXZlYywgZm9saW8sIGZhbHNlKSA9PSBtaW5fc2VxW3R5cGVdKVxuLVx0XHRcdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MsIEJJVChQR19hY3RpdmUpKTtcbiYjNDM7XHRcdGlmIChscnVfZ2VuX2ZvbGlvX3NlcShscnV2ZWMsIGZvbGlvLCBmYWxzZSkgPT0gbWluX3NlcVt0eXBlXSkge1xuJiM0MztcdFx0XHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xuJiM0MztcdFx0XHRmb2xpb19zZXRfYWN0aXZlKGZvbGlvKTtcbiYjNDM7XHRcdH1cbiBcdH1cbiBcbiBcdG1vdmVfZm9saW9zX3RvX2xydShcdTAwMjZsaXN0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxOTowMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TFJVX0dFTiYjMzQ7LAogICAgJiMzNDtMUlVfR0VOX0VOQUJMRUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmb2xpb19taWdyYXRlX2ZsYWdzJiMzNDssCiAgICAmIzM0O2xydV9nZW5fbG9va19hcm91bmQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBwYWdlIGZsYWdzIGhhbmRsaW5nIGFuZCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIGBscnVfem9uZV9zaXplYCB1cGRhdGVzIGJ5IHVzaW5nIGF0b21pYyBvcGVyYXRpb25zLiBJdCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLCBzcGVjaWZpY2FsbHkgcGFnZSBtaWdyYXRpb24gKGBmb2xpb19taWdyYXRlX2ZsYWdzYCkgYW5kIHBhZ2UgcmVjbGFpbSBsb29rYXJvdW5kIChgbHJ1X2dlbl9sb29rX2Fyb3VuZGApLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgbWFraW5nIHRoZW0gd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDI1OWEyNTIyMzg3NmQwZjI3M2IzNGZlNmFlZjM0MzY2Yjc1NjA5OWUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAyNSAxOTowMzoyMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKaW5kZXggMjE1ZTJlODdmNDJiMi4uN2I4OWQwY2I1ZjZjNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKQEAgLTExMyw3ICYjNDM7MTEzLDcgQEAgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgewogCS8qIEZpZWxkcyB3aGljaCBnZXQgdXBkYXRlZCBvZnRlbiBhdCB0aGUgZW5kLiAqLwogCXN0cnVjdCBscnV2ZWMJCWxydXZlYzsKIAlDQUNIRUxJTkVfUEFERElORyhfcGFkMl8pOwotCXVuc2lnbmVkIGxvbmcJCWxydV96b25lX3NpemVbTUFYX05SX1pPTkVTXVtOUl9MUlVfTElTVFNdOwomIzQzOwlhdG9taWNfbG9uZ190CQlscnVfem9uZV9zaXplW01BWF9OUl9aT05FU11bTlJfTFJVX0xJU1RTXTsKIAlzdHJ1Y3QgbWVtX2Nncm91cF9yZWNsYWltX2l0ZXIJaXRlcjsKIAogCS8qCkBAIC05MDIsMTAgJiM0Mzs5MDIsMTUgQEAgc3RhdGljIGlubGluZQogdW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX2dldF96b25lX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywKIAkJZW51bSBscnVfbGlzdCBscnUsIGludCB6b25lX2lkeCkKIHsKJiM0MzsJbG9uZyB2YWw7CiAJc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm16OwogCiAJbXogPSBjb250YWluZXJfb2YobHJ1dmVjLCBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSwgbHJ1dmVjKTsKLQlyZXR1cm4gUkVBRF9PTkNFKG16LSZndDtscnVfem9uZV9zaXplW3pvbmVfaWR4XVtscnVdKTsKJiM0MzsJdmFsID0gYXRvbWljX2xvbmdfcmVhZCgmYW1wO216LSZndDtscnVfem9uZV9zaXplW3pvbmVfaWR4XVtscnVdKTsKJiM0MzsJaWYgKFdBUk5fT05fT05DRSh2YWwgJmx0OyAwKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlyZXR1cm4gdmFsOwogfQogCiB2b2lkIF9fbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKGdmcF90IGdmcF9tYXNrKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmggYi9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oCmluZGV4IDYyMWM4NjUzZDhmN2UuLjhjZjgyOTg5ZWMyNjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaApAQCAtMTAsNiAmIzQzOzEwLDExIEBACiAjaW5jbHVkZSAmbHQ7bGludXgvdXNlcmZhdWx0ZmRfay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2xlYWZvcHMuaCZndDsKIAomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2ZsYWdzX2lzX2ZpbGVfbHJ1KGNvbnN0IHVuc2lnbmVkIGxvbmcgKmZsYWdzKQomIzQzO3sKJiM0MzsJcmV0dXJuICF0ZXN0X2JpdChQR19zd2FwYmFja2VkLCBmbGFncyk7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBmb2xpb19pc19maWxlX2xydSAtIFNob3VsZCB0aGUgZm9saW8gYmUgb24gYSBmaWxlIExSVSBvciBhbm9uIExSVT8KICAqIEBmb2xpbzogVGhlIGZvbGlvIHRvIHRlc3QuCkBAIC0yNyw3ICYjNDM7MzIsNyBAQAogICovCiBzdGF0aWMgaW5saW5lIGludCBmb2xpb19pc19maWxlX2xydShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewotCXJldHVybiAhZm9saW9fdGVzdF9zd2FwYmFja2VkKGZvbGlvKTsKJiM0MzsJcmV0dXJuIGZvbGlvX2ZsYWdzX2lzX2ZpbGVfbHJ1KGNvbnN0X2ZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7CiB9CiAKIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX3VwZGF0ZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCkBAIC0xNDIsMTAgJiM0MzsxNDcsNDIgQEAgc3RhdGljIGlubGluZSBpbnQgbHJ1X3RpZXJfZnJvbV9yZWZzKGludCByZWZzLCBib29sIHdvcmtpbmdzZXQpCiAJcmV0dXJuIHdvcmtpbmdzZXQgPyBNQVhfTlJfVElFUlMgLSAxIDogb3JkZXJfYmFzZV8yKHJlZnMpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfcmVmcyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzOy8qKgomIzQzOyAqIGxydV9nZW5fZnJvbV9mbGFncyAtIFJldHVybiB0aGUgTFJVIGdlbmVyYXRpb24gbnVtYmVyIGZyb20gZm9saW8gZmxhZ3MuCiYjNDM7ICogQGZsYWdzOiBmb2xpbyBmbGFncwomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogQSBudW1iZXIgYmV0d2VlbiAwIGFuZCAoTUFYX05SX0dFTlMgLSAxKSwgaW5jbHVzaXZlLiBSZXR1cm5zCiYjNDM7ICogLTEgaWYgdGhlIGZsYWdzIGluZGljYXRlIHRoZSBmb2xpbyBpcyBvZmYgdGhlIGxpc3QgKGUuZy4sIGlzb2xhdGVkKS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIGludCBscnVfZ2VuX2Zyb21fZmxhZ3ModW5zaWduZWQgbG9uZyBmbGFncykKJiM0Mzt7CiYjNDM7CWludCBnZW4gPSAoKGZsYWdzICZhbXA7IExSVV9HRU5fTUFTSykgJmd0OyZndDsgTFJVX0dFTl9QR09GRik7CiYjNDM7CiYjNDM7CUJVSUxEX0JVR19PTihMUlVfR0VOX01BU0sgJmFtcDsgTFJVX1JFRlNfTUFTSyk7CiYjNDM7CWdlbiAtPSAxOwomIzQzOwlWTV9XQVJOX09OX09OQ0UoZ2VuICE9IC0xICZhbXA7JmFtcDsgZ2VuICZndDs9IE1BWF9OUl9HRU5TKTsKJiM0MzsJcmV0dXJuIGdlbjsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogbHJ1X2dlbl9zZXRfZmxhZ3MgLSBTZXQgdGhlIExSVSBnZW5lcmF0aW9uIG51bWJlciB0byBzcGVjaWZpZWQgZm9saW8gZmxhZ3MuCiYjNDM7ICogQGZsYWdzOiBwb2ludGVyIHRvIHRoZSBmb2xpbyBmbGFncwomIzQzOyAqIEBnZW46IGdlbmVyYXRpb24gbnVtYmVyLCBiZXR3ZWVuIDAgYW5kIChNQVhfTlJfR0VOUyAtIDEpLCBpbmNsdXNpdmUuCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGxydV9nZW5fc2V0X2ZsYWdzKHVuc2lnbmVkIGxvbmcgKmZsYWdzLCBpbnQgZ2VuKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tJmd0O2ZsYWdzLmYpOwomIzQzOwlWTV9XQVJOX09OX09OQ0UoZ2VuICZndDs9IE1BWF9OUl9HRU5TIHx8IGdlbiAmbHQ7IDApOwomIzQzOwomIzQzOwkqZmxhZ3MgJmFtcDs9IH5MUlVfR0VOX01BU0s7CiYjNDM7CSpmbGFncyB8PSAoZ2VuICYjNDM7IDFVTCkgJmx0OyZsdDsgTFJVX0dFTl9QR09GRjsKJiM0Mzt9CiAKJiM0MzsvKioKJiM0MzsgKiBscnVfcmVmc19mcm9tX2ZsYWdzIC0gUmV0dXJuIExSVSByZWZlcmVuY2VkIC8gYWNjZXNzIGNvdW50IGZyb20gZm9saW8gZmxhZ3MuCiYjNDM7ICogQGZsYWdzOiBmb2xpbyBmbGFncwomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGxydV9yZWZzX2Zyb21fZmxhZ3ModW5zaWduZWQgbG9uZyBmbGFncykKJiM0Mzt7CiAJaWYgKCEoZmxhZ3MgJmFtcDsgQklUKFBHX3JlZmVyZW5jZWQpKSkKIAkJcmV0dXJuIDA7CiAJLyoKQEAgLTE1NSwxMSAmIzQzOzE5Miw0MCBAQCBzdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfcmVmcyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCXJldHVybiAoKGZsYWdzICZhbXA7IExSVV9SRUZTX01BU0spICZndDsmZ3Q7IExSVV9SRUZTX1BHT0ZGKSAmIzQzOyAxOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfZ2VuKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7LyoqCiYjNDM7ICogbHJ1X3JlZnNfc2V0X2ZsYWdzIC0gU2V0IHRoZSBMUlUgcmVmZXJlbmNlZCAvIGFjY2VzcyBjb3VudCB0byBzcGVjaWZpZWQgZm9saW8gZmxhZ3MuCiYjNDM7ICogQGZsYWdzOiBwb2ludGVyIHRvIHRoZSBmb2xpbyBmbGFncwomIzQzOyAqIEByZWZzOiByZWZlcmVuY2VkIC8gYWNjZXNzIGNvdW50IG51bWJlciwgYmV0d2VlbiAwIGFuZCBMUlVfUkVGU19NQVgsIGluY2x1c2l2ZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbHJ1X3JlZnNfc2V0X2ZsYWdzKHVuc2lnbmVkIGxvbmcgKmZsYWdzLCB1bnNpZ25lZCBpbnQgcmVmcykKJiM0Mzt7CiYjNDM7CVZNX1dBUk5fT05fT05DRShyZWZzICZndDsgTFJVX1JFRlNfTUFYKTsKJiM0MzsJQlVJTERfQlVHX09OKExSVV9SRUZTX01BWCAhPSAoTFJVX1JFRlNfTUFTSyAmZ3Q7Jmd0OyBMUlVfUkVGU19QR09GRikgJiM0MzsgMSk7CiYjNDM7CiYjNDM7CSpmbGFncyAmYW1wOz0gfkxSVV9SRUZTX0ZMQUdTOwomIzQzOwlpZiAoIXJlZnMpCiYjNDM7CQlyZXR1cm47CiYjNDM7CSpmbGFncyB8PSAoQklUKFBHX3JlZmVyZW5jZWQpIHwgKChyZWZzIC0gMVVMKSAmbHQ7Jmx0OyBMUlVfUkVGU19QR09GRikpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfcmVmcyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJcmV0dXJuIGxydV9yZWZzX2Zyb21fZmxhZ3MoUkVBRF9PTkNFKCpjb25zdF9mb2xpb19mbGFncyhmb2xpbywgMCkpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3NldF9scnVfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgcmVmcykKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLSZndDtmbGFncy5mKTsKJiM0MzsJdW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTsKIAotCXJldHVybiAoKGZsYWdzICZhbXA7IExSVV9HRU5fTUFTSykgJmd0OyZndDsgTFJVX0dFTl9QR09GRikgLSAxOwomIzQzOwlkbyB7CiYjNDM7CQluZXdfZmxhZ3MgPSBvbGRfZmxhZ3M7CiYjNDM7CQlscnVfcmVmc19zZXRfZmxhZ3MoJmFtcDtuZXdfZmxhZ3MsIHJlZnMpOwomIzQzOwl9IHdoaWxlICghdHJ5X2NtcHhjaGcoZm9saW9fZmxhZ3MoZm9saW8sIDApLCAmYW1wO29sZF9mbGFncywgbmV3X2ZsYWdzKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9nZW4oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKJiM0Mzt7CiYjNDM7CXJldHVybiBscnVfZ2VuX2Zyb21fZmxhZ3MoUkVBRF9PTkNFKCpjb25zdF9mb2xpb19mbGFncyhmb2xpbywgMCkpKTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIGxydV9nZW5faXNfYWN0aXZlKGNvbnN0IHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IGdlbikKQEAgLTI3MCw3ICYjNDM7MzM2LDcgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fYWRkX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywKIAlnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKHNlcSk7CiAJZmxhZ3MgPSAoZ2VuICYjNDM7IDFVTCkgJmx0OyZsdDsgTFJVX0dFTl9QR09GRjsKIAkvKiBzZWUgdGhlIGNvbW1lbnQgb24gTUlOX05SX0dFTlMgYWJvdXQgUEdfYWN0aXZlICovCi0Jc2V0X21hc2tfYml0cygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCBMUlVfR0VOX01BU0sgfCBCSVQoUEdfYWN0aXZlKSwgZmxhZ3MpOwomIzQzOwlzZXRfbWFza19iaXRzKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgTFJVX0dFTl9NQVNLIHwgQklUKFBHX2FjdGl2ZSksIGZsYWdzKTsKIAogCWxydV9nZW5fdXBkYXRlX3NpemUobHJ1dmVjLCBmb2xpbywgLTEsIGdlbik7CiAJLyogZm9yIGZvbGlvX3JvdGF0ZV9yZWNsYWltYWJsZSgpICovCkBAIC0yOTUsNyAmIzQzOzM2MSw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2RlbF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sCiAKIAkvKiBmb3IgZm9saW9fbWlncmF0ZV9mbGFncygpICovCiAJZmxhZ3MgPSAhcmVjbGFpbWluZyAmYW1wOyZhbXA7IGxydV9nZW5faXNfYWN0aXZlKGxydXZlYywgZ2VuKSA/IEJJVChQR19hY3RpdmUpIDogMDsKLQlmbGFncyA9IHNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX0dFTl9NQVNLLCBmbGFncyk7CiYjNDM7CWZsYWdzID0gc2V0X21hc2tfYml0cyhmb2xpb19mbGFncyhmb2xpbywgMCksIExSVV9HRU5fTUFTSywgZmxhZ3MpOwogCWdlbiA9ICgoZmxhZ3MgJmFtcDsgTFJVX0dFTl9NQVNLKSAmZ3Q7Jmd0OyBMUlVfR0VOX1BHT0ZGKSAtIDE7CiAKIAlscnVfZ2VuX3VwZGF0ZV9zaXplKGxydXZlYywgZm9saW8sIGdlbiwgLTEpOwpAQCAtMzA0LDExICYjNDM7MzcwLDE5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2RlbF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19taWdyYXRlX3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKQomIzQzOy8qKgomIzQzOyAqIGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnMgLSBjb3B5IHRoZSByZWZlcmVuY2Ugc3RhdGUgdG8gYSBuZXcgZm9saW8KJiM0MzsgKiBAbmV3OiB0aGUgZGVzdGluYXRpb24gZm9saW8KJiM0MzsgKiBAb2xkOiB0aGUgc291cmNlIGZvbGlvCiYjNDM7ICoKJiM0MzsgKiBUcmFuc2ZlciB0aGUgcmVmZXJlbmNlIHN0YXRlIHRvIEBuZXcgZHVyaW5nIG1pZ3JhdGlvbjogdGhlIE1HTFJVCiYjNDM7ICogcmVmcyBjb3VudCwgaW5jbHVkaW5nIFBHX3JlZmVyZW5jZWQsIG9yIGp1c3QgUEdfcmVmZXJlbmNlZCBmb3IgdGhlCiYjNDM7ICogYWN0aXZlL2luYWN0aXZlIExSVS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fbWlncmF0ZV9scnVfcmVmcyhzdHJ1Y3QgZm9saW8gKm5ldywgY29uc3Qgc3RydWN0IGZvbGlvICpvbGQpCiB7Ci0JdW5zaWduZWQgbG9uZyByZWZzID0gUkVBRF9PTkNFKG9sZC0mZ3Q7ZmxhZ3MuZikgJmFtcDsgTFJVX1JFRlNfTUFTSzsKLQotCXNldF9tYXNrX2JpdHMoJmFtcDtuZXctJmd0O2ZsYWdzLmYsIExSVV9SRUZTX01BU0ssIHJlZnMpOwomIzQzOwlCVUlMRF9CVUdfT04oTFJVX1JFRlNfTUFTSyAmYW1wOyBCSVQoUEdfcmVmZXJlbmNlZCkpOwomIzQzOwlmb2xpb19zZXRfbHJ1X3JlZnMobmV3LCBmb2xpb19scnVfcmVmcyhvbGQpKTsKIH0KICNlbHNlIC8qICFDT05GSUdfTFJVX0dFTiAqLwogCkBAIC0zMzcsOSAmIzQzOzQxMSwxMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9kZWxfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCXJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfcmVmcyhzdHJ1Y3QgZm9saW8gKm5ldywgY29uc3Qgc3RydWN0IGZvbGlvICpvbGQpCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKQogewotCiYjNDM7CWlmIChmb2xpb190ZXN0X3JlZmVyZW5jZWQob2xkKSkKJiM0MzsJCWZvbGlvX3NldF9yZWZlcmVuY2VkKG5ldyk7CiB9CiAjZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaCBiL2luY2x1ZGUvbGludXgvbW16b25lLmgKaW5kZXggOTRmOWMzZmY1NDE2MC4uOWIyN2NmNTNiZGJjNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oCkBAIC00OTIsMTEgJiM0Mzs0OTIsMTQgQEAgZW51bSBscnV2ZWNfZmxhZ3MgewogICogZm9saW8tJmd0O2ZsYWdzLCBtYXNrZWQgYnkgTFJVX1JFRlNfTUFTSy4KICAqLwogI2RlZmluZSBNQVhfTlJfVElFUlMJCTRVCiYjNDM7I2RlZmluZSBMUlVfVElFUl9NSU4JCTBVCiYjNDM7I2RlZmluZSBMUlVfVElFUl9NQVgJCShNQVhfTlJfVElFUlMgLSAxKQogCiAjaWZuZGVmIF9fR0VORVJBVElOR19CT1VORFNfSAogCiAjZGVmaW5lIExSVV9HRU5fTUFTSwkJKChCSVQoTFJVX0dFTl9XSURUSCkgLSAxKSAmbHQ7Jmx0OyBMUlVfR0VOX1BHT0ZGKQogI2RlZmluZSBMUlVfUkVGU19NQVNLCQkoKEJJVChMUlVfUkVGU19XSURUSCkgLSAxKSAmbHQ7Jmx0OyBMUlVfUkVGU19QR09GRikKJiM0MzsjZGVmaW5lIExSVV9SRUZTX01BWAkJQklUKExSVV9SRUZTX1dJRFRIKQogCiAvKgogICogRm9yIGZvbGlvcyBhY2Nlc3NlZCBtdWx0aXBsZSB0aW1lcyB0aHJvdWdoIGZpbGUgZGVzY3JpcHRvcnMsCmRpZmYgLS1naXQgYS9tbS9mb2xpby5jIGIvbW0vZm9saW8uYwppbmRleCBjMDJkY2VhOWMwM2MyLi5hOTMyMDU5MDU3YWMxIDEwMDY0NAotLS0gYS9tbS9mb2xpby5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2ZvbGlvLmMKQEAgLTM1MywyNiAmIzQzOzM1MywyOCBAQCBzdGF0aWMgdm9pZCBfX2xydV9jYWNoZV9hY3RpdmF0ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCiBzdGF0aWMgdm9pZCBscnVfZ2VuX2luY19yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7Ci0JdW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRShmb2xpby0mZ3Q7ZmxhZ3MuZik7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7CiYjNDM7CWludCByZWZzOwogCiAJaWYgKGZvbGlvX3Rlc3RfdW5ldmljdGFibGUoZm9saW8pKQogCQlyZXR1cm47CiAKIAkvKiBzZWUgdGhlIGNvbW1lbnQgb24gTFJVX1JFRlNfRkxBR1MgKi8KLQlpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykpIHsKLQkJc2V0X21hc2tfYml0cygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCBMUlVfUkVGU19NQVNLLCBCSVQoUEdfcmVmZXJlbmNlZCkpOwomIzQzOwlpZiAoIWZvbGlvX2xydV9yZWZzKGZvbGlvKSkgewomIzQzOwkJZm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAxKTsKIAkJcmV0dXJuOwogCX0KIAogCWRvIHsKLQkJaWYgKChvbGRfZmxhZ3MgJmFtcDsgTFJVX1JFRlNfTUFTSykgPT0gTFJVX1JFRlNfTUFTSykgewomIzQzOwkJbmV3X2ZsYWdzID0gb2xkX2ZsYWdzOwomIzQzOwkJcmVmcyA9IGxydV9yZWZzX2Zyb21fZmxhZ3Mob2xkX2ZsYWdzKTsKJiM0MzsJCWlmIChyZWZzID09IExSVV9SRUZTX01BWCkgewogCQkJaWYgKCFmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pKQogCQkJCWZvbGlvX3NldF93b3JraW5nc2V0KGZvbGlvKTsKIAkJCXJldHVybjsKIAkJfQotCi0JCW5ld19mbGFncyA9IG9sZF9mbGFncyAmIzQzOyBCSVQoTFJVX1JFRlNfUEdPRkYpOwotCX0gd2hpbGUgKCF0cnlfY21weGNoZygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCAmYW1wO29sZF9mbGFncywgbmV3X2ZsYWdzKSk7CiYjNDM7CQlscnVfcmVmc19zZXRfZmxhZ3MoJmFtcDtuZXdfZmxhZ3MsIHJlZnMgJiM0MzsgMSk7CiYjNDM7CX0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksICZhbXA7b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTsKIH0KIAogc3RhdGljIGJvb2wgbHJ1X2dlbl9jbGVhcl9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pCkBAIC0zODQsNyAmIzQzOzM4Niw4IEBAIHN0YXRpYyBib29sIGxydV9nZW5fY2xlYXJfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCWlmIChnZW4gJmx0OyAwKQogCQlyZXR1cm4gdHJ1ZTsKIAotCXNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MgfCBCSVQoUEdfd29ya2luZ3NldCksIDApOwomIzQzOwlmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApOwomIzQzOwlmb2xpb19jbGVhcl93b3JraW5nc2V0KGZvbGlvKTsKIAogCXJjdV9yZWFkX2xvY2soKTsKIAlzZXEgPSBSRUFEX09OQ0UoZm9saW9fbHJ1dmVjKGZvbGlvKS0mZ3Q7bHJ1Z2VuLm1pbl9zZXFbdHlwZV0pOwpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jCmluZGV4IDExYjg1ZjRiNjgyOGIuLmE3NTcyZGVkNTZjOWQgMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLmMKQEAgLTE1MjksMjggJiM0MzsxNTI5LDEyIEBAIHZvaWQgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBlbnVtIGxydV9saXN0IGxydSwKIAkJCQlpbnQgemlkLCBsb25nIG5yX3BhZ2VzKQogewogCXN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICptejsKLQl1bnNpZ25lZCBsb25nICpscnVfc2l6ZTsKLQlsb25nIHNpemU7CiAKIAlpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKQogCQlyZXR1cm47CiAKIAlteiA9IGNvbnRhaW5lcl9vZihscnV2ZWMsIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlLCBscnV2ZWMpOwotCWxydV9zaXplID0gJmFtcDttei0mZ3Q7bHJ1X3pvbmVfc2l6ZVt6aWRdW2xydV07Ci0KLQlpZiAobnJfcGFnZXMgJmx0OyAwKQotCQkqbHJ1X3NpemUgJiM0Mzs9IG5yX3BhZ2VzOwotCi0Jc2l6ZSA9ICpscnVfc2l6ZTsKLQlpZiAoV0FSTl9PTkNFKHNpemUgJmx0OyAwLAotCQkmIzM0OyVzKCVwLCAlZCwgJWxkKTogbHJ1X3NpemUgJWxkXG4mIzM0OywKLQkJX19mdW5jX18sIGxydXZlYywgbHJ1LCBucl9wYWdlcywgc2l6ZSkpIHsKLQkJVk1fQlVHX09OKDEpOwotCQkqbHJ1X3NpemUgPSAwOwotCX0KLQotCWlmIChucl9wYWdlcyAmZ3Q7IDApCi0JCSpscnVfc2l6ZSAmIzQzOz0gbnJfcGFnZXM7CiYjNDM7CWF0b21pY19sb25nX2FkZChucl9wYWdlcywgJmFtcDttei0mZ3Q7bHJ1X3pvbmVfc2l6ZVt6aWRdW2xydV0pOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL21tL21pZ3JhdGUuYyBiL21tL21pZ3JhdGUuYwppbmRleCAxNWI0NTgzMmJjZmE3Li5hMzY5ZDBjOTVjMzg2IDEwMDY0NAotLS0gYS9tbS9taWdyYXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWlncmF0ZS5jCkBAIC03NzYsOCAmIzQzOzc3Niw5IEBAIHZvaWQgZm9saW9fbWlncmF0ZV9mbGFncyhzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewogCWludCBjcHVwaWQ7CiAKLQlpZiAoZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSkKLQkJZm9saW9fc2V0X3JlZmVyZW5jZWQobmV3Zm9saW8pOwomIzQzOwkvKiBDb3B5IHRoZSByZWZlcmVuY2Ugc3RhdGUsIGluY2x1ZGluZyBQR19yZWZlcmVuY2VkICovCiYjNDM7CWZvbGlvX21pZ3JhdGVfbHJ1X3JlZnMobmV3Zm9saW8sIGZvbGlvKTsKJiM0MzsKIAlpZiAoZm9saW9fdGVzdF91cHRvZGF0ZShmb2xpbykpCiAJCWZvbGlvX21hcmtfdXB0b2RhdGUobmV3Zm9saW8pOwogCWlmIChmb2xpb190ZXN0X2NsZWFyX2FjdGl2ZShmb2xpbykpIHsKQEAgLTgwNyw3ICYjNDM7ODA4LDYgQEAgdm9pZCBmb2xpb19taWdyYXRlX2ZsYWdzKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJaWYgKGZvbGlvX3Rlc3RfaWRsZShmb2xpbykpCiAJCWZvbGlvX3NldF9pZGxlKG5ld2ZvbGlvKTsKIAotCWZvbGlvX21pZ3JhdGVfcmVmcyhuZXdmb2xpbywgZm9saW8pOwogCS8qCiAJICogQ29weSBOVU1BIGluZm9ybWF0aW9uIHRvIHRoZSBuZXcgcGFnZSwgdG8gcHJldmVudCBvdmVyLWVhZ2VyCiAJICogZnV0dXJlIG1pZ3JhdGlvbnMgb2YgdGhpcyBzYW1lIHBhZ2UuCmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IDczYTgxYjRhM2UxNjQuLjZmZGE5NDhhZWNmMmMgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jCkBAIC04NDMsMTkgJiM0Mzs4NDMsMjIgQEAgc3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKQogCWlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSAmYW1wOyZhbXA7ICFmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pKSB7CiAJCS8qIEFjdGl2YXRlIGZpbGUtYmFja2VkIGV4ZWN1dGFibGUgZm9saW9zIGFmdGVyIGZpcnN0IHVzYWdlLiAqLwogCQlpZiAoaXNfZXhlY19maWxlX2ZvbGlvKGZvbGlvLCB2bWFfZmxhZ3MpKSB7Ci0JCQlzZXRfbWFza19iaXRzKCZhbXA7Zm9saW8tJmd0O2ZsYWdzLmYsIExSVV9SRUZTX0ZMQUdTLCBCSVQoUEdfd29ya2luZ3NldCkpOwomIzQzOwkJCWZvbGlvX3NldF93b3JraW5nc2V0KGZvbGlvKTsKJiM0MzsJCQlmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApOwogCQkJcmV0dXJuIHRydWU7CiAJCX0KIAotCQlzZXRfbWFza19iaXRzKCZhbXA7Zm9saW8tJmd0O2ZsYWdzLmYsIExSVV9SRUZTX01BU0ssIEJJVChQR19yZWZlcmVuY2VkKSk7CiYjNDM7CQlmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDEpOwogCQlyZXR1cm4gZmFsc2U7CiAJfQogCiAJLyogUHJvbW90ZSBvbiBzZWNvbmQgYWNjZXNzICovCi0JaWYgKGZvbGlvX2xydV9yZWZzKGZvbGlvKSAmZ3Q7IDEpCi0JCXNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MsIEJJVChQR193b3JraW5nc2V0KSk7Ci0JZWxzZQomIzQzOwlpZiAoZm9saW9fbHJ1X3JlZnMoZm9saW8pICZndDsgMSkgewomIzQzOwkJZm9saW9fc2V0X3dvcmtpbmdzZXQoZm9saW8pOwomIzQzOwkJZm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTsKJiM0MzsJfSBlbHNlIHsKIAkJZm9saW9fbWFya19hY2Nlc3NlZChmb2xpbyk7CiYjNDM7CX0KIAlyZXR1cm4gdHJ1ZTsKIH0KICNlbHNlCkBAIC0zMTk1LDggJiM0MzszMTk4LDggQEAgc3RydWN0IGN0cmxfcG9zIHsKIAlpbnQgZ2FpbjsKIH07CiAKLXN0YXRpYyB2b2lkIHJlYWRfY3RybF9wb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHRpZXIsIGludCBnYWluLAotCQkJICBzdHJ1Y3QgY3RybF9wb3MgKnBvcykKJiM0MztzdGF0aWMgdm9pZCByZWFkX2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCB0aWVyX21pbiwKJiM0MzsJCQkgIGludCB0aWVyX21heCwgaW50IGdhaW4sIHN0cnVjdCBjdHJsX3BvcyAqcG9zKQogewogCWludCBpOwogCXN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSAmYW1wO2xydXZlYy0mZ3Q7bHJ1Z2VuOwpAQCAtMzIwNSw3ICYjNDM7MzIwOCw3IEBAIHN0YXRpYyB2b2lkIHJlYWRfY3RybF9wb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHRpZXIsIGludCBnYWluLAogCXBvcy0mZ3Q7Z2FpbiA9IGdhaW47CiAJcG9zLSZndDtyZWZhdWx0ZWQgPSBwb3MtJmd0O3RvdGFsID0gMDsKIAotCWZvciAoaSA9IHRpZXIgJSBNQVhfTlJfVElFUlM7IGkgJmx0Oz0gbWluKHRpZXIsIE1BWF9OUl9USUVSUyAtIDEpOyBpJiM0MzsmIzQzOykgewomIzQzOwlmb3IgKGkgPSB0aWVyX21pbjsgaSAmbHQ7PSB0aWVyX21heDsgaSYjNDM7JiM0MzspIHsKIAkJcG9zLSZndDtyZWZhdWx0ZWQgJiM0Mzs9IGxydWdlbi0mZ3Q7YXZnX3JlZmF1bHRlZFt0eXBlXVtpXSAmIzQzOwogCQkJCSAgYXRvbWljX2xvbmdfcmVhZCgmYW1wO2xydWdlbi0mZ3Q7cmVmYXVsdGVkW2hpc3RdW3R5cGVdW2ldKTsKIAkJcG9zLSZndDt0b3RhbCAmIzQzOz0gbHJ1Z2VuLSZndDthdmdfdG90YWxbdHlwZV1baV0gJiM0MzsKQEAgLTMyNjYsMTEgJiM0MzszMjY5LDExIEBAIHN0YXRpYyBib29sIHBvc2l0aXZlX2N0cmxfZXJyKHN0cnVjdCBjdHJsX3BvcyAqc3AsIHN0cnVjdCBjdHJsX3BvcyAqcHYpCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKiBwcm9tb3RlIHBhZ2VzIGFjY2Vzc2VkIHRocm91Z2ggcGFnZSB0YWJsZXMgKi8KLXN0YXRpYyBpbnQgZm9saW9fdXBkYXRlX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgZ2VuLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKQomIzQzO3N0YXRpYyBpbnQgZm9saW9fdXBkYXRlX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbmV3X2dlbiwgaW50ICppc19maWxlLAomIzQzOwkJCSAgICBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKQogewotCXVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tJmd0O2ZsYWdzLmYpOwotCi0JVk1fV0FSTl9PTl9PTkNFKGdlbiAmZ3Q7PSBNQVhfTlJfR0VOUyk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7CiYjNDM7CWludCBvbGRfZ2VuOwogCiAJLyoKIAkgKiBTZWUgdGhlIGNvbW1lbnQgb24gTFJVX1JFRlNfRkxBR1MsIGFuZCBhY3RpdmF0ZSBmaWxlLWJhY2tlZApAQCAtMzI3OSwyMCAmIzQzOzMyODIsMjUgQEAgc3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBnZW4sIGNvbnN0IHZtYV9mbGFnc190ICp2bWEKIAkgKi8KIAlpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykgJmFtcDsmYW1wOyAhZm9saW9fdGVzdF93b3JraW5nc2V0KGZvbGlvKSAmYW1wOyZhbXA7CiAJICAgICFpc19leGVjX2ZpbGVfZm9saW8oZm9saW8sIHZtYV9mbGFncykpIHsKLQkJc2V0X21hc2tfYml0cygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCBMUlVfUkVGU19NQVNLLCBCSVQoUEdfcmVmZXJlbmNlZCkpOwomIzQzOwkJZm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAxKTsKIAkJcmV0dXJuIC0xOwogCX0KIAogCWRvIHsKJiM0MzsJCW9sZF9nZW4gPSBscnVfZ2VuX2Zyb21fZmxhZ3Mob2xkX2ZsYWdzKTsKJiM0MzsJCW5ld19mbGFncyA9IG9sZF9mbGFnczsKJiM0MzsKIAkJLyogbHJ1X2dlbl9kZWxfZm9saW8oKSBoYXMgaXNvbGF0ZWQgdGhpcyBwYWdlPyAqLwotCQlpZiAoIShvbGRfZmxhZ3MgJmFtcDsgTFJVX0dFTl9NQVNLKSkKLQkJCXJldHVybiAtMTsKJiM0MzsJCWlmIChvbGRfZ2VuICZsdDsgMCkKJiM0MzsJCQlicmVhazsKIAotCQluZXdfZmxhZ3MgPSBvbGRfZmxhZ3MgJmFtcDsgfihMUlVfR0VOX01BU0sgfCBMUlVfUkVGU19GTEFHUyk7Ci0JCW5ld19mbGFncyB8PSAoKGdlbiAmIzQzOyAxVUwpICZsdDsmbHQ7IExSVV9HRU5fUEdPRkYpIHwgQklUKFBHX3dvcmtpbmdzZXQpOwotCX0gd2hpbGUgKCF0cnlfY21weGNoZygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCAmYW1wO29sZF9mbGFncywgbmV3X2ZsYWdzKSk7CiYjNDM7CQlscnVfZ2VuX3NldF9mbGFncygmYW1wO25ld19mbGFncywgbmV3X2dlbik7CiYjNDM7CQlscnVfcmVmc19zZXRfZmxhZ3MoJmFtcDtuZXdfZmxhZ3MsIDApOwomIzQzOwkJbmV3X2ZsYWdzIHw9IEJJVChQR193b3JraW5nc2V0KTsKJiM0MzsJfSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgJmFtcDtvbGRfZmxhZ3MsIG5ld19mbGFncykpOwogCi0JcmV0dXJuICgob2xkX2ZsYWdzICZhbXA7IExSVV9HRU5fTUFTSykgJmd0OyZndDsgTFJVX0dFTl9QR09GRikgLSAxOwomIzQzOwkqaXNfZmlsZSA9IGZvbGlvX2ZsYWdzX2lzX2ZpbGVfbHJ1KCZhbXA7b2xkX2ZsYWdzKTsKJiM0MzsJcmV0dXJuIG9sZF9nZW47CiB9CiAKIC8qIHByb3RlY3QgcGFnZXMgYWNjZXNzZWQgbXVsdGlwbGUgdGltZXMgdGhyb3VnaCBmaWxlIGRlc2NyaXB0b3JzICovCkBAIC0zMzAxLDIxICYjNDM7MzMwOSwyMCBAQCBzdGF0aWMgaW50IGZvbGlvX2luY19nZW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCWludCB0eXBlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pOwogCXN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSAmYW1wO2xydXZlYy0mZ3Q7bHJ1Z2VuOwogCWludCBuZXdfZ2VuLCBvbGRfZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tJmd0O21pbl9zZXFbdHlwZV0pOwotCXVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tJmd0O2ZsYWdzLmYpOwotCi0JVk1fV0FSTl9PTl9PTkNFX0ZPTElPKCEob2xkX2ZsYWdzICZhbXA7IExSVV9HRU5fTUFTSyksIGZvbGlvKTsKJiM0MzsJdW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTsKIAogCWRvIHsKLQkJbmV3X2dlbiA9ICgob2xkX2ZsYWdzICZhbXA7IExSVV9HRU5fTUFTSykgJmd0OyZndDsgTFJVX0dFTl9QR09GRikgLSAxOwomIzQzOwkJbmV3X2dlbiA9IGxydV9nZW5fZnJvbV9mbGFncyhvbGRfZmxhZ3MpOwomIzQzOwogCQkvKiBmb2xpb191cGRhdGVfZ2VuKCkgaGFzIHByb21vdGVkIHRoaXMgcGFnZT8gKi8KIAkJaWYgKG5ld19nZW4gJmd0Oz0gMCAmYW1wOyZhbXA7IG5ld19nZW4gIT0gb2xkX2dlbikKIAkJCXJldHVybiBuZXdfZ2VuOwogCiYjNDM7CQluZXdfZmxhZ3MgPSBvbGRfZmxhZ3M7CiAJCW5ld19nZW4gPSAob2xkX2dlbiAmIzQzOyAxKSAlIE1BWF9OUl9HRU5TOwotCi0JCW5ld19mbGFncyA9IG9sZF9mbGFncyAmYW1wOyB+KExSVV9HRU5fTUFTSyB8IExSVV9SRUZTX0ZMQUdTKTsKLQkJbmV3X2ZsYWdzIHw9IChuZXdfZ2VuICYjNDM7IDFVTCkgJmx0OyZsdDsgTFJVX0dFTl9QR09GRjsKLQl9IHdoaWxlICghdHJ5X2NtcHhjaGcoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgJmFtcDtvbGRfZmxhZ3MsIG5ld19mbGFncykpOwomIzQzOwkJbHJ1X2dlbl9zZXRfZmxhZ3MoJmFtcDtuZXdfZmxhZ3MsIG5ld19nZW4pOwomIzQzOwkJbHJ1X3JlZnNfc2V0X2ZsYWdzKCZhbXA7bmV3X2ZsYWdzLCAwKTsKJiM0MzsJfSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgJmFtcDtvbGRfZmxhZ3MsIG5ld19mbGFncykpOwogCiAJbHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTsKIApAQCAtMzMyMyw5ICYjNDM7MzMzMCw4IEBAIHN0YXRpYyBpbnQgZm9saW9faW5jX2dlbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8pCiB9CiAKIHN0YXRpYyB2b2lkIHVwZGF0ZV9iYXRjaF9zaXplKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCBmb2xpbyAqZm9saW8sCi0JCQkgICAgICBpbnQgb2xkX2dlbiwgaW50IG5ld19nZW4pCiYjNDM7CQkJICAgICAgaW50IG9sZF9nZW4sIGludCBuZXdfZ2VuLCBpbnQgdHlwZSkKIHsKLQlpbnQgdHlwZSA9IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTsKIAlpbnQgem9uZSA9IGZvbGlvX3pvbmVudW0oZm9saW8pOwogCWludCBkZWx0YSA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsKIApAQCAtMzUxMiwyMiAmIzQzOzM1MTgsMjQgQEAgc3RhdGljIGJvb2wgc3VpdGFibGVfdG9fc2NhbihpbnQgdG90YWwsIGludCB5b3VuZykKIH0KIAogc3RhdGljIHZvaWQgd2Fsa191cGRhdGVfZm9saW8oc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JCXN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuZXdfZ2VuLCBib29sIGRpcnR5KQomIzQzOwkJc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIGRpcnR5KQogewotCWludCBvbGRfZ2VuOwomIzQzOwlpbnQgbmV3X2dlbiwgb2xkX2dlbiwgZmlsZTsKIAogCWlmICghZm9saW8pCiAJCXJldHVybjsKIAomIzQzOwluZXdfZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShSRUFEX09OQ0UobHJ1dmVjLSZndDtscnVnZW4ubWF4X3NlcSkpOwomIzQzOwogCWlmIChkaXJ0eSAmYW1wOyZhbXA7ICFmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSAmYW1wOyZhbXA7CiAJICAgICEoZm9saW9fdGVzdF9hbm9uKGZvbGlvKSAmYW1wOyZhbXA7IGZvbGlvX3Rlc3Rfc3dhcGJhY2tlZChmb2xpbykgJmFtcDsmYW1wOwogCSAgICAgICFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpKQogCQlmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTsKIAogCWlmICh3YWxrKSB7Ci0JCW9sZF9nZW4gPSBmb2xpb191cGRhdGVfZ2VuKGZvbGlvLCBuZXdfZ2VuLCAmYW1wO3ZtYS0mZ3Q7ZmxhZ3MpOwomIzQzOwkJb2xkX2dlbiA9IGZvbGlvX3VwZGF0ZV9nZW4oZm9saW8sIG5ld19nZW4sICZhbXA7ZmlsZSwgJmFtcDt2bWEtJmd0O2ZsYWdzKTsKIAkJaWYgKG9sZF9nZW4gJmd0Oz0gMCAmYW1wOyZhbXA7IG9sZF9nZW4gIT0gbmV3X2dlbikKLQkJCXVwZGF0ZV9iYXRjaF9zaXplKHdhbGssIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTsKJiM0MzsJCQl1cGRhdGVfYmF0Y2hfc2l6ZSh3YWxrLCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbiwgZmlsZSk7CiAJfSBlbHNlIGlmIChscnVfZ2VuX3NldF9yZWZzKGZvbGlvLCAmYW1wO3ZtYS0mZ3Q7ZmxhZ3MpKSB7CiAJCW9sZF9nZW4gPSBmb2xpb19scnVfZ2VuKGZvbGlvKTsKIAkJaWYgKG9sZF9nZW4gJmd0Oz0gMCAmYW1wOyZhbXA7IG9sZF9nZW4gIT0gbmV3X2dlbikKQEAgLTM1NDksOCAmIzQzOzM1NTcsNiBAQCBzdGF0aWMgYm9vbCB3YWxrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwKIAlzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrID0gYXJncy0mZ3Q7cHJpdmF0ZTsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cod2Fsay0mZ3Q7bHJ1dmVjKTsKIAlzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KHdhbGstJmd0O2xydXZlYyk7Ci0JREVGSU5FX01BWF9TRVEod2Fsay0mZ3Q7bHJ1dmVjKTsKLQlpbnQgZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShtYXhfc2VxKTsKIAl1bnNpZ25lZCBpbnQgbnI7CiAJcG1kX3QgcG1kdmFsOwogCkBAIC0zNjAxLDcgJiM0MzszNjA3LDcgQEAgc3RhdGljIGJvb2wgd2Fsa19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCiAJCQljb250aW51ZTsKIAogCQlpZiAobGFzdCAhPSBmb2xpbykgewotCQkJd2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy0mZ3Q7dm1hLCBsYXN0LCBnZW4sIGRpcnR5KTsKJiM0MzsJCQl3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBhcmdzLSZndDt2bWEsIHdhbGstJmd0O2xydXZlYywgbGFzdCwgZGlydHkpOwogCiAJCQlsYXN0ID0gZm9saW87CiAJCQlkaXJ0eSA9IGZhbHNlOwpAQCAtMzYxNCw3ICYjNDM7MzYyMCw3IEBAIHN0YXRpYyBib29sIHdhbGtfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLAogCQl3YWxrLSZndDttbV9zdGF0c1tNTV9MRUFGX1lPVU5HXSAmIzQzOz0gbnI7CiAJfQogCi0Jd2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy0mZ3Q7dm1hLCBsYXN0LCBnZW4sIGRpcnR5KTsKJiM0MzsJd2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy0mZ3Q7dm1hLCB3YWxrLSZndDtscnV2ZWMsIGxhc3QsIGRpcnR5KTsKIAlsYXN0ID0gTlVMTDsKIAogCWlmIChpICZsdDsgUFRSU19QRVJfUFRFICZhbXA7JmFtcDsgZ2V0X25leHRfdm1hKFBNRF9NQVNLLCBQQUdFX1NJWkUsIGFyZ3MsICZhbXA7c3RhcnQsICZhbXA7ZW5kKSkKQEAgLTM2MzcsOCAmIzQzOzM2NDMsNiBAQCBzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYQogCXN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGsgPSBhcmdzLSZndDtwcml2YXRlOwogCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyh3YWxrLSZndDtscnV2ZWMpOwogCXN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQod2Fsay0mZ3Q7bHJ1dmVjKTsKLQlERUZJTkVfTUFYX1NFUSh3YWxrLSZndDtscnV2ZWMpOwotCWludCBnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpOwogCiAJVk1fV0FSTl9PTl9PTkNFKHB1ZF9sZWFmKCpwdWQpKTsKIApAQCAtMzY5Miw3ICYjNDM7MzY5Niw3IEBAIHN0YXRpYyB2b2lkIHdhbGtfcG1kX3JhbmdlX2xvY2tlZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCB2bV9hcmVhCiAJCQlnb3RvIG5leHQ7CiAKIAkJaWYgKGxhc3QgIT0gZm9saW8pIHsKLQkJCXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7CiYjNDM7CQkJd2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCB3YWxrLSZndDtscnV2ZWMsIGxhc3QsIGRpcnR5KTsKIAogCQkJbGFzdCA9IGZvbGlvOwogCQkJZGlydHkgPSBmYWxzZTsKQEAgLTM3MDYsNyAmIzQzOzM3MTAsNyBAQCBzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYQogCQlpID0gaSAmZ3Q7IE1JTl9MUlVfQkFUQ0ggPyAwIDogZmluZF9uZXh0X2JpdChiaXRtYXAsIE1JTl9MUlVfQkFUQ0gsIGkpICYjNDM7IDE7CiAJfSB3aGlsZSAoaSAmbHQ7PSBNSU5fTFJVX0JBVENIKTsKIAotCXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7CiYjNDM7CXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgd2Fsay0mZ3Q7bHJ1dmVjLCBsYXN0LCBkaXJ0eSk7CiAKIAlsYXp5X21tdV9tb2RlX2Rpc2FibGUoKTsKIAlzcGluX3VubG9jayhwdGwpOwpAQCAtNDI3MCw4ICYjNDM7NDI3NCw2IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucikKIAlzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gZm9saW9fcGdkYXQoZm9saW8pOwogCXN0cnVjdCBscnV2ZWMgKmxydXZlYzsKIAlzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGU7Ci0JdW5zaWduZWQgbG9uZyBtYXhfc2VxOwotCWludCBnZW47CiAKIAlsb2NrZGVwX2Fzc2VydF9oZWxkKHB2bXctJmd0O3B0bCk7CiAJVk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3RfbHJ1KGZvbGlvKSwgZm9saW8pOwpAQCAtNDMwOCw4ICYjNDM7NDMxMCw2IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucikKIAogCW1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhmb2xpbyk7CiAJbHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIHBnZGF0KTsKLQltYXhfc2VxID0gUkVBRF9PTkNFKChscnV2ZWMpLSZndDtscnVnZW4ubWF4X3NlcSk7Ci0JZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShtYXhfc2VxKTsKIAltbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpOwogCiAJbGF6eV9tbXVfbW9kZV9lbmFibGUoKTsKQEAgLTQzNDEsNyAmIzQzOzQzNDEsNyBAQCBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpCiAJCQljb250aW51ZTsKIAogCQlpZiAobGFzdCAhPSBmb2xpbykgewotCQkJd2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTsKJiM0MzsJCQl3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxydXZlYywgbGFzdCwgZGlydHkpOwogCiAJCQlsYXN0ID0gZm9saW87CiAJCQlkaXJ0eSA9IGZhbHNlOwpAQCAtNDM1MywxMyAmIzQzOzQzNTMsMTQgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKQogCQl5b3VuZyAmIzQzOz0gbnI7CiAJfQogCi0Jd2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTsKJiM0MzsJd2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBscnV2ZWMsIGxhc3QsIGRpcnR5KTsKIAogCWxhenlfbW11X21vZGVfZGlzYWJsZSgpOwogCiAJLyogZmVlZGJhY2sgZnJvbSBybWFwIHdhbGtlcnMgdG8gcGFnZSB0YWJsZSB3YWxrZXJzICovCiAJaWYgKG1tX3N0YXRlICZhbXA7JmFtcDsgc3VpdGFibGVfdG9fc2NhbihpLCB5b3VuZykpCi0JCXVwZGF0ZV9ibG9vbV9maWx0ZXIobW1fc3RhdGUsIG1heF9zZXEsIHB2bXctJmd0O3BtZCk7CiYjNDM7CQl1cGRhdGVfYmxvb21fZmlsdGVyKG1tX3N0YXRlLCBSRUFEX09OQ0UobHJ1dmVjLSZndDtscnVnZW4ubWF4X3NlcSksCiYjNDM7CQkJCSAgICBwdm13LSZndDtwbWQpOwogCiAJbWVtX2Nncm91cF9wdXQobWVtY2cpOwogCkBAIC00NzE2LDcgJiM0Mzs0NzE3LDcgQEAgc3RhdGljIGJvb2wgaXNvbGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzY2EKIAogCS8qIHNlZSB0aGUgY29tbWVudCBvbiBMUlVfUkVGU19GTEFHUyAqLwogCWlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSkKLQkJc2V0X21hc2tfYml0cygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCBMUlVfUkVGU19NQVNLLCAwKTsKJiM0MzsJCWZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7CiAKIAlzdWNjZXNzID0gbHJ1X2dlbl9kZWxfZm9saW8obHJ1dmVjLCBmb2xpbywgdHJ1ZSk7CiAJVk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFzdWNjZXNzLCBmb2xpbyk7CkBAIC00ODA5LDkgJiM0Mzs0ODEwLDkgQEAgc3RhdGljIGludCBnZXRfdGllcl9pZHgoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSkKIAkgKiBUaGlzIHZhbHVlIGlzIGNob3NlbiBiZWNhdXNlIGFueSBvdGhlciB0aWVyIHdvdWxkIGhhdmUgYXQgbGVhc3QgdHdpY2UKIAkgKiBhcyBtYW55IHJlZmF1bHRzIGFzIHRoZSBmaXJzdCB0aWVyLgogCSAqLwotCXJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCAwLCAyLCAmYW1wO3NwKTsKLQlmb3IgKHRpZXIgPSAxOyB0aWVyICZsdDsgTUFYX05SX1RJRVJTOyB0aWVyJiM0MzsmIzQzOykgewotCQlyZWFkX2N0cmxfcG9zKGxydXZlYywgdHlwZSwgdGllciwgMywgJmFtcDtwdik7CiYjNDM7CXJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCBMUlVfVElFUl9NSU4sIExSVV9USUVSX01JTiwgMiwgJmFtcDtzcCk7CiYjNDM7CWZvciAodGllciA9IExSVV9USUVSX01JTiAmIzQzOyAxOyB0aWVyICZsdDs9IExSVV9USUVSX01BWDsgdGllciYjNDM7JiM0MzspIHsKJiM0MzsJCXJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCB0aWVyLCB0aWVyLCAzLCAmYW1wO3B2KTsKIAkJaWYgKCFwb3NpdGl2ZV9jdHJsX2VycigmYW1wO3NwLCAmYW1wO3B2KSkKIAkJCWJyZWFrOwogCX0KQEAgLTQ4MzIsOCAmIzQzOzQ4MzMsMTAgQEAgc3RhdGljIGludCBnZXRfdHlwZV90b19zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3MpCiAJICogQ29tcGFyZSB0aGUgc3VtIG9mIGFsbCB0aWVycyBvZiBhbm9uIHdpdGggdGhhdCBvZiBmaWxlIHRvIGRldGVybWluZQogCSAqIHdoaWNoIHR5cGUgdG8gc2Nhbi4KIAkgKi8KLQlyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9BTk9OLCBNQVhfTlJfVElFUlMsIHN3YXBwaW5lc3MsICZhbXA7c3ApOwotCXJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0ZJTEUsIE1BWF9OUl9USUVSUywgTUFYX1NXQVBQSU5FU1MgLSBzd2FwcGluZXNzLCAmYW1wO3B2KTsKJiM0MzsJcmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fQU5PTiwgTFJVX1RJRVJfTUlOLCBMUlVfVElFUl9NQVgsCiYjNDM7CQkgICAgICBzd2FwcGluZXNzLCAmYW1wO3NwKTsKJiM0MzsJcmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fRklMRSwgTFJVX1RJRVJfTUlOLCBMUlVfVElFUl9NQVgsCiYjNDM7CQkgICAgICBNQVhfU1dBUFBJTkVTUyAtIHN3YXBwaW5lc3MsICZhbXA7cHYpOwogCiAJcmV0dXJuIHBvc2l0aXZlX2N0cmxfZXJyKCZhbXA7c3AsICZhbXA7cHYpOwogfQpAQCAtNDkzMiw4ICYjNDM7NDkzNSwxMCBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYywKIAkJfQogCiAJCS8qIGRvbiYjMzk7dCBhZGQgcmVqZWN0ZWQgZm9saW9zIHRvIHRoZSBvbGRlc3QgZ2VuZXJhdGlvbiAqLwotCQlpZiAobHJ1X2dlbl9mb2xpb19zZXEobHJ1dmVjLCBmb2xpbywgZmFsc2UpID09IG1pbl9zZXFbdHlwZV0pCi0JCQlzZXRfbWFza19iaXRzKCZhbXA7Zm9saW8tJmd0O2ZsYWdzLmYsIExSVV9SRUZTX0ZMQUdTLCBCSVQoUEdfYWN0aXZlKSk7CiYjNDM7CQlpZiAobHJ1X2dlbl9mb2xpb19zZXEobHJ1dmVjLCBmb2xpbywgZmFsc2UpID09IG1pbl9zZXFbdHlwZV0pIHsKJiM0MzsJCQlmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApOwomIzQzOwkJCWZvbGlvX3NldF9hY3RpdmUoZm9saW8pOwomIzQzOwkJfQogCX0KIAogCW1vdmVfZm9saW9zX3RvX2xydSgmYW1wO2xpc3QpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxOTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTQwOAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDUzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoOiBNR0xSVSBSZWZhY3RvcmluZyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBpbiBmcm9udCBvZiBtZSwgYW5kIG15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHdoZXRoZXIgaXQgaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdGhhdCB3YXJyYW50IGZ1enppbmcuIEdpdmVuIG15IGV4cGVydGlzZSwgSSBxdWlja2x5IHplcm8gaW4gb24gdGhlIG1vZGlmaWVkIGZpbGVzOiBgaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhgLCBgaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaGAsIGBpbmNsdWRlL2xpbnV4L21tem9uZS5oYCwgYG1tL2ZvbGlvLmNgLCBgbW0vbWVtY29udHJvbC5jYCwgYG1tL21pZ3JhdGUuY2AsIGFuZCBgbW0vdm1zY2FuLmNgLiBUaGUgZmFjdCB0aGF0IGl0IHRvdWNoZXMgc28gbWFueSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFyZWFzIGltbWVkaWF0ZWx5IHJhaXNlcyBhIGZsYWcuIEl0JiMzOTtzIGNsZWFybHkgdGllZCB0byBMUlUgZ2VuZXJhdGlvbiAoTUdMUlUpLCBhbmQgbWVtY29udHJvbC4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBkZXRhaWxzLgoKQWxyaWdodCwgdGhlIGNoYW5nZXMgaW4gYGluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oYCBhcmUgYWJvdXQgYXRvbWljIG9wZXJhdGlvbnM7IGBscnVfem9uZV9zaXplYCBpcyBub3cgYW4gYGF0b21pY19sb25nX3RgIGFuZCBgbWVtX2Nncm91cF9nZXRfem9uZV9scnVfc2l6ZWAgbGV2ZXJhZ2VzIGBhdG9taWNfbG9uZ19yZWFkYC4gU21hcnQgbW92ZSwgdGhhdCYjMzk7cyBsaWtlbHkgZml4aW5nIGEgcmFjZSBjb25kaXRpb24uIFRoZSBjaGFuZ2VzIGluIGBpbmNsdWRlL2xpbnV4L21tX2lubGluZS5oYCBhcmUgaW5saW5lIGZ1bmN0aW9ucyBmb3IgYGZvbGlvX2ZsYWdzX2lzX2ZpbGVfbHJ1YCwgYGxydV9nZW5fZnJvbV9mbGFnc2AsIGBscnVfZ2VuX3NldF9mbGFnc2AsIGBscnVfcmVmc19mcm9tX2ZsYWdzYCwgYGxydV9yZWZzX3NldF9mbGFnc2AsIGBmb2xpb19zZXRfbHJ1X3JlZnNgLCBhbmQgcmVwbGFjaW5nIGBmb2xpb19taWdyYXRlX3JlZnNgIHdpdGggYGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnNgLgoKVGhlIG90aGVyIGZpbGUgY2hhbmdlcywgYG1tL2ZvbGlvLmNgLCBgbW0vbWVtY29udHJvbC5jYCwgYG1tL21pZ3JhdGUuY2AsIGFuZCBgbW0vdm1zY2FuLmNgIGFsbCBzZWVtIHRvIGJlIGFkanVzdGluZyB0byB0aGUgbmV3IGlubGluZSBmdW5jdGlvbnMgYW5kIHRoZSBhdG9taWMgb3BlcmF0aW9ucy4gYGxydV9nZW5faW5jX3JlZnNgIGFuZCBgbHJ1X2dlbl9jbGVhcl9yZWZzYCBhcmUgdXBkYXRlZCwgYW5kIGBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZWAgbm93IHVzZXMgYGF0b21pY19sb25nX2FkZGAuIFRoZSBtaWdyYXRpb24gYW5kIFZNIHNjYW5uaW5nIHVwZGF0ZXMgYXJlIGFsbCBpbnRlcmNvbm5lY3RlZCB3aXRoIHRoZSBMUlUgZ2VuZXJhdGlvbiBhbmQgZmxhZ3MuIFRoZSBgcmVhZF9jdHJsX3Bvc2AgdXBkYXRlIHdpdGggdGhlIGB0aWVyX21pbmAgYW5kIGB0aWVyX21heGAgcGFyYW1ldGVycyBsb29rcyBpbnRlcmVzdGluZywgdG9vLgoKU28sIGluIGVzc2VuY2UsIHRoaXMgaXMgYSByZWZhY3RvcmluZyBlZmZvcnQuIEl0IHNlZW1zIHRvIGJlIGNsZWFuaW5nIHVwIHRoZSBMUlUgZ2VuZXJhdGlvbiBmbGFncyBoYW5kbGluZywgaW1wcm92aW5nIGNvbmN1cnJlbmN5IHRocm91Z2ggYXRvbWljIG9wZXJhdGlvbnMgb24gYGxydV96b25lX3NpemVgLCBhbmQgcG90ZW50aWFsbHkgZml4aW5nIHRoYXQgcmFjZSBjb25kaXRpb24uCgpXYWl0IGEgbWludXRlLi4uIE1HTFJVLCB0aGF0JiMzOTtzIGEgYmlnIGRlYWwuIEdpdmVuIHRoZSBjaGFuZ2VzIHRvIHRoZSBjb3JlIE1NIGxvZ2ljLCB0aGF0IGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRoYXQgbmVlZHMgZnV6emluZy4gTm93LCB3aGF0JiMzOTtzIHRoZSByZWxldmFudCBjb25maWcgb3B0aW9uIGZvciBNR0xSVT8gQWgsIGl0JiMzOTtzIGBDT05GSUdfTFJVX0dFTmAuIEV4Y2VsbGVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxOTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTFJVX0dFTiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTEzOTM9Y29uZmlnIFBURV9NQVJLRVJfVUZGRF9XUFxuLS1cbm1tL0tjb25maWctMTQwMy0jIG11bHRpLWdlbiBMUlUge1xubW0vS2NvbmZpZzoxNDA0OmNvbmZpZyBMUlVfR0VOXG5tbS9LY29uZmlnLTE0MDUtXHRib29sIFwmIzM0O011bHRpLUdlbiBMUlVcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTE0MTItXG5tbS9LY29uZmlnOjE0MTM6Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxubW0vS2NvbmZpZy0xNDE0LVx0Ym9vbCBcJiMzNDtFbmFibGUgYnkgZGVmYXVsdFwmIzM0O1xuLS1cbm1tL0tjb25maWctMTQxOC1cbm1tL0tjb25maWc6MTQxOTpjb25maWcgTFJVX0dFTl9TVEFUU1xubW0vS2NvbmZpZy0xNDIwLVx0Ym9vbCBcJiMzNDtGdWxsIHN0YXRzIGZvciBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTE0MjctXG5tbS9LY29uZmlnOjE0Mjg6Y29uZmlnIExSVV9HRU5fV0FMS1NfTU1VXG5tbS9LY29uZmlnLTE0MjktXHRkZWZfYm9vbCB5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTk6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI3ODgKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipFbmFibGluZyBMUlUgR2VuZXJhdGlvbjogQSBRdWljayBDaGVjayoqCgpSaWdodCwgaXQgc2VlbXMgbGlrZSB3ZSBuZWVkIHRvIGdldCBgTFJVX0dFTmAgYW5kIGBMUlVfR0VOX0VOQUJMRURgIGFjdGl2YXRlZC4gU291bmRzIHByb21pc2luZyBmb3Igc29tZSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMsIG9yIHBlcmhhcHMgbmV3IGZ1bmN0aW9uYWxpdHkgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHJlYWxtLiBCZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhlIGltcGxpY2F0aW9ucywgbGV0IG1lIHF1aWNrbHkgdmVyaWZ5IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhlbXNlbHZlcy4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gY2hlY2sgYG1tL0tjb25maWdgLiBUaGF0JiMzOTtzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGRlZmluaXRpdmUgZG9jdW1lbnRhdGlvbiBhbmQgcGVyaGFwcyBkZXBlbmRlbmNpZXMgZm9yIGBMUlVfR0VOYC4gSSYjMzk7bGwgY29uZmlybSBpdHMgZXhpc3RlbmNlIHRoZXJlLCByZWFkIGFueSBhc3NvY2lhdGVkIGNvbW1lbnRzIGZvciBjb250ZXh0LCBhbmQgbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvYnZpb3VzIGNvbmZsaWN0cyBiZWZvcmUgcHJvY2VlZGluZy4gVGltZSB0byBzZWUgd2hhdCB0aGUga2VybmVsIGNvbmZpZyBoYXMgdG8gc2F5IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE5OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlcGVuZHMgb24uKkxSVV9HRU4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xNDEzPWNvbmZpZyBMUlVfR0VOX0VOQUJMRURcbm1tL0tjb25maWctMTQxNC1cdGJvb2wgXCYjMzQ7RW5hYmxlIGJ5IGRlZmF1bHRcJiMzNDtcbm1tL0tjb25maWc6MTQxNTpcdGRlcGVuZHMgb24gTFJVX0dFTlxubW0vS2NvbmZpZy0xNDE2LVx0aGVscFxuLS1cbm1tL0tjb25maWc9MTQxOT1jb25maWcgTFJVX0dFTl9TVEFUU1xubW0vS2NvbmZpZy0xNDIwLVx0Ym9vbCBcJiMzNDtGdWxsIHN0YXRzIGZvciBkZWJ1Z2dpbmdcJiMzNDtcbm1tL0tjb25maWc6MTQyMTpcdGRlcGVuZHMgb24gTFJVX0dFTlxubW0vS2NvbmZpZy0xNDIyLVx0aGVscFxuLS1cbm1tL0tjb25maWc9MTQyOD1jb25maWcgTFJVX0dFTl9XQUxLU19NTVVcbm1tL0tjb25maWctMTQyOS1cdGRlZl9ib29sIHlcbm1tL0tjb25maWc6MTQzMDpcdGRlcGVuZHMgb24gTFJVX0dFTiBcdTAwMjZcdTAwMjYgQVJDSF9IQVNfSFdfUFRFX1lPVU5HXG5tbS9LY29uZmlnLTE0MzEtIyB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTk6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMyMzcKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgRGVwZW5kZW5jeSBDaGFpbiBmb3IgYExSVV9HRU5gKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhpcy4gSSYjMzk7bSBzdGFydGluZyBieSB0YWtpbmcgYSBsb29rIGF0IGBjb25maWcgTFJVX0dFTmAgYW5kIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzLiBJdCYjMzk7cyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgd2hhdCBvdGhlciBjb21wb25lbnRzIG9yIGZlYXR1cmVzIGhpbmdlIG9uIHRoaXMgdG8gYWNjdXJhdGVseSBhc3Nlc3MgaXRzIGltcGFjdCBhbmQgcG90ZW50aWFsIGNvbmZsaWN0cy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7V2hhdCBkb3duc3RyZWFtIGVmZmVjdHMgd2lsbCBhIGNoYW5nZSBoZXJlIGNhdXNlPyYjMzQ7IEkgbmVlZCB0byBtZXRpY3Vsb3VzbHkgbWFwIHRoaXMgb3V0LiBJJiMzOTtsbCBuZWVkIHRvIGlkZW50aWZ5IHdoaWNoIG90aGVyIGZsYWdzLCBjb25maWd1cmF0aW9ucywgb3IgZXZlbiBjb2RlIG1vZHVsZXMgYXJlIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgbGlua2VkIHRvIGBMUlVfR0VOYC4gS25vd2luZyB0aGlzIHdpbGwgZGV0ZXJtaW5lIHRoZSBuZWNlc3NhcnkgcHJlY2F1dGlvbnMgcmVxdWlyZWQgd2hlbiB0d2Vha2luZyBgTFJVX0dFTmAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTk6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIExSVV9HRU4kJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTM5Mz1jb25maWcgUFRFX01BUktFUl9VRkZEX1dQXG4tLVxubW0vS2NvbmZpZy0xNDAzLSMgbXVsdGktZ2VuIExSVSB7XG5tbS9LY29uZmlnOjE0MDQ6Y29uZmlnIExSVV9HRU5cbm1tL0tjb25maWctMTQwNS1cdGJvb2wgXCYjMzQ7TXVsdGktR2VuIExSVVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE5OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNTEzCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBpbnRvIGBtbS9LY29uZmlnYCBMaW5lIDE0MDQqKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgY29uZmlndXJhdGlvbi4gSSYjMzk7bSBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIGxpbmUgMTQwNCBpbiBgbW0vS2NvbmZpZ2AuIEkmIzM5O20gZ3Vlc3NpbmcgdGhhdCYjMzk7cyB3aGVyZSBhIHBhcnRpY3VsYXIgb3B0aW9uIG9yIGdyb3VwIG9mIHJlbGF0ZWQgb3B0aW9ucyBmb3IgbWVtb3J5IG1hbmFnZW1lbnQgaXMgZGVmaW5lZC4gR2l2ZW4gdGhlIGNvbnRleHQgb2YgdGhlIGBtbS9gIGRpcmVjdG9yeSwgaXQmIzM5O3MgbGlrZWx5IGRlYWxpbmcgd2l0aCBzb21lIGFzcGVjdCBvZiBhbGxvY2F0aW9uLCB2aXJ0dWFsIG1lbW9yeSwgTlVNQSwgb3IgcGVyaGFwcyBzb21lIHNwZWNpZmljIGFyY2hpdGVjdHVyZS1yZWxhdGVkIG1lbW9yeSBoYW5kbGluZy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIGEgYGNvbmZpZ2AgZGVmaW5pdGlvbiwgcG90ZW50aWFsbHkgbmVzdGVkIHdpdGhpbiBhIGBtZW51YCwgYGNob2ljZWAsIG9yIGEgY29uZGl0aW9uYWwgYmxvY2sgdXNpbmcgYGlmYCBvciBgc2VsZWN0YC4gSG9wZWZ1bGx5LCB0aGVyZSBhcmUgY29tbWVudHMgdGhhdCBnaXZlIG1lIGEgY2x1ZSBhYm91dCB0aGUgaW50ZW50IG9mIHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24gb3IgZ3JvdXAuIEkmIzM5O20gYW50aWNpcGF0aW5nIHRoYXQgSSB3aWxsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc3Vycm91bmRpbmcgY29udGV4dCB0byBmdWxseSBncmFzcCBpdC4gSeKAmW0gaG9waW5nIHRoYXQgSSBoYXZlIHNvbWUgcHJpb3Iga25vd2xlZGdlIGFib3V0IHRoZSBwYXJ0aWN1bGFyIHN1YnN5c3RlbSB0aGF0JiMzOTtzIHRvdWNoZWQgYXQgdGhhdCBsaW5lIG9mIGNvZGUuIExldCYjMzk7cyBzZWUgd2hhdCBnZW1zIHdlIGNhbiBmaW5kLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE5OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTQwMDpcdFx0ICBwdXJwb3Nlcy4gIEl0IGlzIHJlcXVpcmVkIHRvIGVuYWJsZSB1c2VyZmF1bHRmZCB3cml0ZSBwcm90ZWN0aW9uIG9uXG4xNDAxOlx0XHQgIGZpbGUtYmFja2VkIG1lbW9yeSB0eXBlcyBsaWtlIHNobWVtIGFuZCBodWdldGxiZnMuXG4xNDAyOlx0XG4xNDAzOlx0IyBtdWx0aS1nZW4gTFJVIHtcbjE0MDQ6XHRjb25maWcgTFJVX0dFTlxuMTQwNTpcdFx0Ym9vbCBcJiMzNDtNdWx0aS1HZW4gTFJVXCYjMzQ7XG4xNDA2Olx0XHRkZXBlbmRzIG9uIE1NVVxuMTQwNzpcdFx0IyBtYWtlIHN1cmUgZm9saW8tXHUwMDNlZmxhZ3MgaGFzIGVub3VnaCBzcGFyZSBiaXRzXG4xNDA4Olx0XHRkZXBlbmRzIG9uIDY0QklUIHx8ICFTUEFSU0VNRU0gfHwgU1BBUlNFTUVNX1ZNRU1NQVBcbjE0MDk6XHRcdGhlbHBcbjE0MTA6XHRcdCAgQSBoaWdoIHBlcmZvcm1hbmNlIExSVSBpbXBsZW1lbnRhdGlvbiB0byBvdmVyY29tbWl0IG1lbW9yeS4gU2VlXG4xNDExOlx0XHQgIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdCBmb3IgZGV0YWlscy5cbjE0MTI6XHRcbjE0MTM6XHRjb25maWcgTFJVX0dFTl9FTkFCTEVEXG4xNDE0Olx0XHRib29sIFwmIzM0O0VuYWJsZSBieSBkZWZhdWx0XCYjMzQ7XG4xNDE1Olx0XHRkZXBlbmRzIG9uIExSVV9HRU5cbjE0MTY6XHRcdGhlbHBcbjE0MTc6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgbXVsdGktZ2VuIExSVSBieSBkZWZhdWx0LlxuMTQxODpcdFxuMTQxOTpcdGNvbmZpZyBMUlVfR0VOX1NUQVRTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE5OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MTEyCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTFJVIEdlbmVyYXRpb24gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggcmVsYXRlZCB0byBMUlUgZ2VuZXJhdGlvbi4gVGhlIGtleSBjb25maWd1cmF0aW9ucyBoZXJlIGFyZSBgTFJVX0dFTmAgYW5kIGBMUlVfR0VOX0VOQUJMRURgIOKAkyB0aGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4gTm93LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQgdGhpcyBwYXRjaCBhY3R1YWxseSAqZG9lcyouIEkgc2VlIGl0IG1vZGlmaWVzIHNldmVyYWwgZnVuY3Rpb25zLiBMZXQmIzM5O3Mgc2VlLi4uCgpTcGVjaWZpY2FsbHksIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGhhdmUgYmVlbiBtb2RpZmllZDogYG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplYCwgYGZvbGlvX21pZ3JhdGVfZmxhZ3NgLCBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAsIGBldmljdF9mb2xpb3NgLCBgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkYCwgYHdhbGtfcHRlX3JhbmdlYCwgYGZvbGlvX2luY19nZW5gLCBgZm9saW9fdXBkYXRlX2dlbmAsIGByZWFkX2N0cmxfcG9zYCwgYGxydV9nZW5fc2V0X3JlZnNgLCBgbHJ1X2dlbl9jbGVhcl9yZWZzYCwgYGxydV9nZW5faW5jX3JlZnNgLCBhbmQgYF9fbHJ1X2NhY2hlX2FjdGl2YXRlX2ZvbGlvYC4KCk5vdywgSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGltcG9ydGFudCBiaXRzLiBNeSBmb2N1cyBpcyBnb2luZyB0byBiZSBvbiB0aGUgbm9uLXN0YXRpYyBhbmQgbm9uLWlubGluZWQgZnVuY3Rpb25zLCBhcyB0aGVzZSBhcmUgdGhlIG9uZXMgbW9zdCBsaWtlbHkgdG8gaGF2ZSB3aWRlciBpbXBsaWNhdGlvbnMuIEkgY2FuIHNlZSB0aGUgbG9jYXRpb24gb2YgdGhlIGZ1bmN0aW9uczogYG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplYCBpcyBpbiBgbW0vbWVtY29udHJvbC5jYC4gYGZvbGlvX21pZ3JhdGVfZmxhZ3NgIGlzIGluIGBtbS9taWdyYXRlLmNgLiBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAgaXMgaW4gYG1tL3Ztc2Nhbi5jYC4gSXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgdGhlIHJlc3Qgb2YgdGhlbSBhcmUgc3RhdGljLCB3aGljaCBuYXJyb3dzIG15IGZvY3VzIGNvbnNpZGVyYWJseS4KClNvLCBsZXQmIzM5O3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IGBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZWAsIGBmb2xpb19taWdyYXRlX2ZsYWdzYCwgYW5kIGBscnVfZ2VuX2xvb2tfYXJvdW5kYC4gVGhlc2UgYXJlIHRoZSBvbmVzIHdoZXJlIHRoZSBjb2RlIGlzIGFjdHVhbGx5ICpleHBvc2VkKiBhbmQgY2FuIGJlIGNhbGxlZCBmcm9tIG90aGVyIG1vZHVsZXMsIHRoZXkgYXJlIHdvcnRoIGEgY2xvc2VyIGxvb2suIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGNvZGUgYW5kIHVuZGVyc3RhbmQgaG93IHRoZSBMUlUgZ2VuZXJhdGlvbiBsb2dpYyBpcyBiZWluZyBpbnRlZ3JhdGVkIHdpdGhpbiBtZW1vcnkgbWFuYWdlbWVudCwgbWlncmF0aW9uLCBhbmQgdGhlIFZNIHNjYW5uaW5nIHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE5OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14odm9pZHxib29sfGludHx1bnNpZ25lZCBsb25nKSBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD04OTE9c3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfb25saW5lKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC04OTctXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo4OTg6dm9pZCBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbHJ1X2xpc3QgbHJ1LFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtODk5LVx0XHRpbnQgemlkLCBsb25nIG5yX3BhZ2VzKTtcbi0tXG5tbS9tZW1jb250cm9sLmM9MTUwMT1zdHJ1Y3QgbHJ1dmVjICpmb2xpb19scnV2ZWNfbG9ja19pcnFzYXZlKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vbWVtY29udHJvbC5jLTE1MjctICovXG5tbS9tZW1jb250cm9sLmM6MTUyODp2b2lkIG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBscnVfbGlzdCBscnUsXG5tbS9tZW1jb250cm9sLmMtMTUyOS1cdFx0XHRcdGludCB6aWQsIGxvbmcgbnJfcGFnZXMpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE5OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MjQyCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGxpa2UgeW91cnNlbGY6CgoqKkNvbnNpZGVyaW5nIHRoZSBTY29wZSBvZiBgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVgKioKCk9rYXksIHNvIEkmIzM5O20gcHJvY2Vzc2luZyB0aGF0IGBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZWAgZnVuY3Rpb24uIFRoZSBrZXkgcmVhbGl6YXRpb24gaGVyZSBpcyB0aGF0IGl0JiMzOTtzICpleHBvcnRlZCogYW5kIHRoZXJlZm9yZSAqZ2xvYmFsKi4gVGhpcyBpbW1lZGlhdGVseSB0cmlnZ2VycyBhIHNldCBvZiBjb25zaWRlcmF0aW9ucyBpbiBteSBtaW5kLiBCZWNhdXNlIGl0JiMzOTtzIHZpc2libGUgb3V0c2lkZSB0aGUgaW1tZWRpYXRlIG1vZHVsZSBvciBzdWJzeXN0ZW0sIGl0IGltcGxpZXMgaXQmIzM5O3MgZGVzaWduZWQgdG8gYmUgaW52b2tlZCBmcm9tIGEgd2lkZXIgY29udGV4dCwgcG90ZW50aWFsbHkgYnkgb3RoZXIga2VybmVsIG1vZHVsZXMgb3IgZXZlbiB1c2Vyc3BhY2UsIHdoaWNoIGhhcyBzZXJpb3VzIHJhbWlmaWNhdGlvbnMgZm9yIHN0YWJpbGl0eSBhbmQgc3luY2hyb25pemF0aW9uLiBUaGUgaW1wbGljYXRpb25zIG9mIHRoaXMgYXJlIHNpZ25pZmljYW50LiBUaGlzIHN1Z2dlc3RzIGEgY2FyZWZ1bCByZXZpZXcgb2YgaXRzIHVzYWdlIHBhdHRlcm5zLCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGFuZCBsb2NraW5nIHN0cmF0ZWdpZXMgaXMgd2FycmFudGVkLCBnaXZlbiB0aGUgcG90ZW50aWFsIGZvciB1bmV4cGVjdGVkIGludGVyYWN0aW9ucy4gQW55IGNoYW5nZXMgdG8gdGhpcyBmdW5jdGlvbiBoYXZlIHRvIGJlIGNvbnNpZGVyZWQgY2FyZWZ1bGx5LiBUaGUgdmVyeSBmYWN0IHRoYXQgaXQmIzM5O3MgZ2xvYmFsIHNob3VsZCBtZWFuIHRoZXJlJiMzOTtzIGFuIGV4Y2VsbGVudCByZWFzb24sIGRvY3VtZW50ZWQsIGZvciB3aHkgdGhhdCYjMzk7cyB0aGUgY2FzZS4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBjYWxsIHNpdGVzIGFuZCB0aGluayBhYm91dCB0aGUgbG9ja2luZyBjb250ZXh0cyB0aG9yb3VnaGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxOTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKHZvaWR8Ym9vbHxpbnR8dW5zaWduZWQgbG9uZykgZm9saW9fbWlncmF0ZV9mbGFncyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21pZ3JhdGUuaD02OT12b2lkIHNvZnRsZWFmX2VudHJ5X3dhaXRfb25fbG9ja2VkKHNvZnRsZWFmX3QgZW50cnksIHNwaW5sb2NrX3QgKnB0bClcbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oLTcwLVx0XHRfX3JlbGVhc2VzKHB0bCk7XG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaDo3MTp2b2lkIGZvbGlvX21pZ3JhdGVfZmxhZ3Moc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpmb2xpbyk7XG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaC03Mi1pbnQgZm9saW9fbWlncmF0ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbm1tL21pZ3JhdGUuYz03Mzk9aW50IG1pZ3JhdGVfaHVnZV9wYWdlX21vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5tbS9taWdyYXRlLmMtNzc0LSAqL1xubW0vbWlncmF0ZS5jOjc3NTp2b2lkIGZvbGlvX21pZ3JhdGVfZmxhZ3Moc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL21pZ3JhdGUuYy03NzYte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxOTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTcyMQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDb25zaWRlcmluZyB0aGUgU2NvcGUgb2YgYGZvbGlvX21pZ3JhdGVfZmxhZ3NgKioKCkFscmlnaHQsIHNvIGBmb2xpb19taWdyYXRlX2ZsYWdzYC4uLiB0aGF0JiMzOTtzIGEgZ2xvYmFsIHZhcmlhYmxlLCBpc24mIzM5O3QgaXQ/IE9rYXksIHNvIHRoYXQgbWVhbnMgSSBuZWVkIHRvIGJlICp2ZXJ5KiBtaW5kZnVsIG9mIGl0cyBzY29wZSBhbmQgcG90ZW50aWFsIGltcGFjdC4gSXQmIzM5O3Mgbm90IGxvY2FsaXplZCwgc28gY2hhbmdlcyB0byBpdCBpbiBvbmUgcGFydCBvZiB0aGUgc3lzdGVtIHdpbGwgcmlwcGxlIHRocm91Z2hvdXQuIEkgbmVlZCB0byB0aGluayBhYm91dCBob3cgZGlmZmVyZW50IG1vZHVsZXMgb3IgZnVuY3Rpb25zIG1pZ2h0IGJlIHJlYWRpbmcgb3Igd3JpdGluZyB0byBpdC4gQW55IHJhY2UgY29uZGl0aW9ucyBvciB1bmludGVuZGVkIHNpZGUgZWZmZWN0cyBhcmUgYSBtYWpvciBjb25jZXJuLiBCZXN0IHByYWN0aWNlIHdvdWxkIHN1Z2dlc3QgcmVkdWNpbmcgaXRzIHNjb3BlIGlmIHBvc3NpYmxlLCByZWZhY3RvcmluZyB0byBwYXNzIGFzIGFuIGFyZ3VtZW50IGlmIGl0IG1ha2VzIHNlbnNlLiBJIGhhdmUgdG8gbWFrZSBzdXJlIGV2ZXJ5IGluc3RhbmNlIG9mIGl0cyB1c2UgaXMgd2VsbC1kb2N1bWVudGVkLCBzbyBmdXR1cmUgZGV2ZWxvcGVycywgaW5jbHVkaW5nIG15c2VsZiwgZG9uJiMzOTt0IHRyaXAgb3ZlciBpdC4gVGltZSB0byBhc3Nlc3MgYWxsIHRoZSBwbGFjZXMgdGhpcyBmbGFnIGlzIHVzZWQsIGZpZ3VyZSBvdXQgaXRzIHB1cnBvc2UsIGFuZCBlbnN1cmUgaXQmIzM5O3MgaGFuZGxlZCBzYWZlbHkgYW5kIGVmZmljaWVudGx5LCBvciBjb25zaWRlciBwb3RlbnRpYWwgYWx0ZXJuYXRpdmVzIHRvIHRoaXMgZ2xvYmFsIGRlcGVuZGVuY3kuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE5OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14odm9pZHxib29sfGludHx1bnNpZ25lZCBsb25nKSBscnVfZ2VuX2xvb2tfYXJvdW5kJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbW16b25lLmg9Njk0PXZvaWQgbHJ1X2dlbl9pbml0X2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpO1xuaW5jbHVkZS9saW51eC9tbXpvbmUuaDo2OTU6Ym9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKTtcbmluY2x1ZGUvbGludXgvbW16b25lLmgtNjk2LVxuLS1cbm1tL3Ztc2Nhbi5jPTQyMTM9c3RhdGljIHZvaWQgbHJ1X2dlbl9hZ2Vfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy00MjU5LSAqL1xubW0vdm1zY2FuLmM6NDI2MDpib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXG5tbS92bXNjYW4uYy00MjYxLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTk6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYxOTMKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAzNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gTFJVIGFuZCBmb2xpbyBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgd2l0aCBhbiBleWUgdG93YXJkcyBmdXp6aW5nLiBGaXJzdCwgSSBub3RpY2VkIHRoYXQgYGxydV9nZW5fbG9va19hcm91bmRgIGlzIGdsb2JhbCwgd2hpY2ggaW1tZWRpYXRlbHkgbWFrZXMgaXQgYSBwb3RlbnRpYWwgdGFyZ2V0LiBUaGVuLCBJIHF1aWNrbHkgc2Nhbm5lZCB0aHJvdWdoIGBtbS92bXNjYW4uY2AgYW5kIGBtbS9mb2xpby5jYCB0byBzZWUgd2hhdCBlbHNlIG1pZ2h0IGJlIGludGVyZXN0aW5nLCBhbmQgaXQgbG9va3MgbGlrZSBhIGxvdCBvZiB0aGUgc3VwcG9ydGluZyBmdW5jdGlvbnMgYXJlIGBzdGF0aWNgLCBsaWtlIGBldmljdF9mb2xpb3NgLCBgZ2V0X3R5cGVfdG9fc2NhbmAsIGBpc29sYXRlX2ZvbGlvYCwgYW5kIHNldmVyYWwgb3RoZXJzIGluIGJvdGggZmlsZXMuIFRoZXkgc2VlbSBwcmV0dHkgY29udGFpbmVkLgoKU28sIHRoZSBvbmVzIHRoYXQgYXJlICpub3QqIHN0YXRpYywgYW5kIHRoZXJlZm9yZSBoYXZlIGJyb2FkZXIgcmVhY2gsIGFyZSBgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVgLCBgZm9saW9fbWlncmF0ZV9mbGFnc2AsIGFuZCBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAuIFRoZXNlIHNlZW0gdG8gYmUgdGhlIHByaW1lIGNhbmRpZGF0ZXMgZm9yIGNsb3NlciBpbnNwZWN0aW9uLgoKTm93LCBsZXQmIzM5O3MgYXNzZXNzIHRoZWlyIGZ1enppbmcgcG90ZW50aWFsLiBgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVgIGlzIGEgY3J1Y2lhbCBmdW5jdGlvbiBmb3IgbWVtY2cgTFJVIHNpemUgdXBkYXRlcywgZXNzZW50aWFsIGZvciBtZW1vcnkgbWFuYWdlbWVudC4gYGZvbGlvX21pZ3JhdGVfZmxhZ3NgIGlzIGRlZXBseSBpbnZvbHZlZCBpbiBwYWdlIG1pZ3JhdGlvbiwgd2hpY2ggaXMgYSBrbm93biBhcmVhIGZvciBjb21wbGV4IGludGVyYWN0aW9ucy4gRmluYWxseSwgYGxydV9nZW5fbG9va19hcm91bmRgIGlzIGEgY29yZSBmdW5jdGlvbiBmb3IgTUdMUlUuIEFsbCB0aHJlZSBvZiB0aGVzZSBoYXZlIGEgc3Ryb25nIGNvbm5lY3Rpb24gdG8gY29yZSBrZXJuZWwgYmVoYXZpb3IuCgpIbW0sIGBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZWAgZmVlbHMgYSBsaXR0bGUgbW9yZSByb3V0aW5lIHRoYW4gdGhlIG90aGVyIHR3by4gSXQmIzM5O3MgcHJvYmFibHkgcXVpdGUgaG90LCBhcyBpdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHBhcnQgb2YgdGhlIG1lbWNnIHN1YnN5c3RlbSwgYnV0IG1heWJlIG5vdCBhcyBsaWtlbHkgdG8gcmV2ZWFsIHRyaWNreSBlZGdlIGNhc2VzLiBJdCYjMzk7cyBwcm9iYWJseSB3b3J0aCBpbnZlc3RpZ2F0aW5nIHdoZXJlIGl0JiMzOTtzIGNhbGxlZCBmcm9tIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE5OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTg5MT1zdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9vbmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTg5Ny1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjg5ODp2b2lkIG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBscnVfbGlzdCBscnUsXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC04OTktXHRcdGludCB6aWQsIGxvbmcgbnJfcGFnZXMpO1xuLS1cbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg9NTI9c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHVwZGF0ZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4tLVxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC01Ny0jaWZkZWYgQ09ORklHX01FTUNHXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oOjU4Olx0bWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUobHJ1dmVjLCBscnUsIHppZCwgbnJfcGFnZXMpO1xuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC01OS0jZW5kaWZcbi0tXG5tbS9mb2xpby5jPTExMjM9c3RhdGljIHZvaWQgbHJ1dmVjX3JlcGFyZW50X2xydShzdHJ1Y3QgbHJ1dmVjICpjaGlsZF9scnV2ZWMsXG4tLVxubW0vZm9saW8uYy0xMTQzLVx0XHQgKi9cbm1tL2ZvbGlvLmM6MTE0NDpcdFx0bWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUocGFyZW50X2xydXZlYywgbHJ1LCB6aWQsIHNpemUpO1xubW0vZm9saW8uYzoxMTQ1Olx0XHRtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZShjaGlsZF9scnV2ZWMsIGxydSwgemlkLCAtKGxvbmcpc2l6ZSk7XG5tbS9mb2xpby5jLTExNDYtXHR9XG4tLVxubW0vbWVtY29udHJvbC5jPTE1MDE9c3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjX2xvY2tfaXJxc2F2ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL21lbWNvbnRyb2wuYy0xNTE4LS8qKlxubW0vbWVtY29udHJvbC5jOjE1MTk6ICogbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUgLSBhY2NvdW50IGZvciBhZGRpbmcgb3IgcmVtb3ZpbmcgYW4gbHJ1IHBhZ2Vcbm1tL21lbWNvbnRyb2wuYy0xNTIwLSAqIEBscnV2ZWM6IG1lbV9jZ3JvdXAgcGVyIHpvbmUgbHJ1IHZlY3RvclxuLS1cbm1tL21lbWNvbnRyb2wuYy0xNTI3LSAqL1xubW0vbWVtY29udHJvbC5jOjE1Mjg6dm9pZCBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbHJ1X2xpc3QgbHJ1LFxubW0vbWVtY29udHJvbC5jLTE1MjktXHRcdFx0XHRpbnQgemlkLCBsb25nIG5yX3BhZ2VzKVxuLS1cbm1tL3Ztc2Nhbi5jPTE1OTI9dW5zaWduZWQgaW50IHJlY2xhaW1fY2xlYW5fcGFnZXNfZnJvbV9saXN0KHN0cnVjdCB6b25lICp6b25lLFxuLS1cbm1tL3Ztc2Nhbi5jLTE2NDQtICogVXBkYXRlIExSVSBzaXplcyBhZnRlciBpc29sYXRpbmcgcGFnZXMuIFRoZSBMUlUgc2l6ZSB1cGRhdGVzIG11c3Rcbm1tL3Ztc2Nhbi5jOjE2NDU6ICogYmUgY29tcGxldGUgYmVmb3JlIG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplIGR1ZSB0byBhIHNhbml0eSBjaGVjay5cbm1tL3Ztc2Nhbi5jLTE2NDYtICovXG4tLVxubW0vdm1zY2FuLmM9NDYyMT12b2lkIGxydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKVxuLS1cbm1tL3Ztc2Nhbi5jLTQ2NDItXHRcdFx0LyogTW92ZSB0aGUgYWNjb3VudGluZywgZG8gbm90IGR1cGxpY2F0ZSBpdC4gKi9cbm1tL3Ztc2Nhbi5jOjQ2NDM6XHRcdFx0bWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUocGFyZW50X2xydXZlYywgbHJ1LCB6aWQsIHNpemUpO1xubW0vdm1zY2FuLmM6NDY0NDpcdFx0XHRtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZShjaGlsZF9scnV2ZWMsIGxydSwgemlkLCAtKGxvbmcpc2l6ZSk7XG5tbS92bXNjYW4uYy00NjQ1LVx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE5OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3ODExCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogOTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEhvdCBQYXRoIEZ1bmN0aW9uYWxpdHkqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gc29tZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUsIGFuZCBhIGZldyBmdW5jdGlvbnMgYXJlIGltbWVkaWF0ZWx5IHN0YW5kaW5nIG91dC4gYG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplYCBpcyB0cmlnZ2VyZWQgZnJvbSBgdXBkYXRlX2xydV9zaXplYCwgd2hpY2gsIGJlY2F1c2UgaXQmIzM5O3MgYF9fYWx3YXlzX2lubGluZWAsIGlzIGNsZWFybHkgZGVzaWduZWQgZm9yIHNwZWVkIGFuZCB1c2VkICpldmVyeXdoZXJlKi4gVGhhdCBtYWtlcyBpdCBhIHNlcmlvdXMgaG90IHBhdGggSSBuZWVkIHRvIHVuZGVyc3RhbmQgY29tcGxldGVseS4gQWxzbywgYGZvbGlvX21pZ3JhdGVfZmxhZ3NgIGlzIGNsZWFybHkgY3J1Y2lhbCBkdXJpbmcgcGFnZSBtaWdyYXRpb24sIGFuZCB0aGVuIHRoZXJlJiMzOTtzIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCwgdXNlZCBkdXJpbmcgcGFnZSBmYXVsdCBsb29rYXJvdW5kLiBHaXZlbiB0aGUgY29udGV4dCwgYGxydV9nZW5fbG9va19hcm91bmRgIGlzIHRoZSBvbmUgSSB0aGluayBJIHNob3VsZCBiZSBpbnZlc3RpZ2F0aW5nIG5leHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE5OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xydV9nZW5fbG9va19hcm91bmQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9tbS9tdWx0aWdlbl9scnUucnN0PTE4Nz1jYW4gaW5jdXIgdGhlIGhpZ2hlc3QgQ1BVIGNvc3QgaW4gdGhlIHJlY2xhaW0gcGF0aC5cbkRvY3VtZW50YXRpb24vbW0vbXVsdGlnZW5fbHJ1LnJzdC0xODgtXG5Eb2N1bWVudGF0aW9uL21tL211bHRpZ2VuX2xydS5yc3Q6MTg5OmBgbHJ1X2dlbl9sb29rX2Fyb3VuZCgpYGAgZXhwbG9pdHMgc3BhdGlhbCBsb2NhbGl0eSB0byByZWR1Y2UgdGhlXG5Eb2N1bWVudGF0aW9uL21tL211bHRpZ2VuX2xydS5yc3QtMTkwLXRyaXBzIGludG8gdGhlIHJtYXAuIEl0IHNjYW5zIHRoZSBhZGphY2VudCBQVEVzIG9mIGEgeW91bmcgUFRFIGFuZFxuLS1cbkRvY3VtZW50YXRpb24vbW0vbXVsdGlnZW5fbHJ1LnJzdD0xOTk9aW4gdGhlIHNldC5cbkRvY3VtZW50YXRpb24vbW0vbXVsdGlnZW5fbHJ1LnJzdC0yMDAtXG5Eb2N1bWVudGF0aW9uL21tL211bHRpZ2VuX2xydS5yc3Q6MjAxOkluIHRoZSBldmljdGlvbiBwYXRoLCBzcGVjaWZpY2FsbHksIGluIGBgbHJ1X2dlbl9sb29rX2Fyb3VuZCgpYGAsIGlmIGFcbkRvY3VtZW50YXRpb24vbW0vbXVsdGlnZW5fbHJ1LnJzdC0yMDItUE1EIGhhcyBhIHN1ZmZpY2llbnQgbnVtYmVyIG9mIGhvdCBwYWdlcywgaXRzIGFkZHJlc3MgaXMgcGxhY2VkIGluIHRoZVxuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmg9Njk0PXZvaWQgbHJ1X2dlbl9pbml0X2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpO1xuaW5jbHVkZS9saW51eC9tbXpvbmUuaDo2OTU6Ym9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKTtcbmluY2x1ZGUvbGludXgvbW16b25lLmgtNjk2LVxuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmg9NzEzPXN0YXRpYyBpbmxpbmUgdm9pZCBscnVfZ2VuX2luaXRfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTcxNi1cbmluY2x1ZGUvbGludXgvbW16b25lLmg6NzE3OnN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtNzE4LVx0XHR1bnNpZ25lZCBpbnQgbnIpXG4tLVxubW0vcm1hcC5jPTkxOD1zdGF0aWMgYm9vbCBmb2xpb19yZWZlcmVuY2VkX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL3JtYXAuYy05ODItXHRcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSBcdTAwMjZcdTAwMjYgIWxydV9nZW5fc3dpdGNoaW5nKCkgXHUwMDI2XHUwMDI2IHB2bXcucHRlKSB7XG5tbS9ybWFwLmM6OTgzOlx0XHRcdGlmIChscnVfZ2VuX2xvb2tfYXJvdW5kKFx1MDAyNnB2bXcsIG5yKSlcbm1tL3JtYXAuYy05ODQtXHRcdFx0XHRyZWZlcmVuY2VkJiM0MzsmIzQzOztcbi0tXG5tbS92bXNjYW4uYz0yNzkxPXN0YXRpYyBib29sIF9fbWF5YmVfdW51c2VkIHNlcV9pc192YWxpZChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG4tLVxubW0vdm1zY2FuLmMtMjgyMC0gKiB3YWxrX3BtZF9yYW5nZSgpOyB0aGUgZXZpY3Rpb24gYWxzbyByZXBvcnQgdGhlbSB3aGVuIHdhbGtpbmcgdGhlIHJtYXBcbm1tL3Ztc2Nhbi5jOjI4MjE6ICogaW4gbHJ1X2dlbl9sb29rX2Fyb3VuZCgpLlxubW0vdm1zY2FuLmMtMjgyMi0gKlxuLS1cbm1tL3Ztc2Nhbi5jPTQwNzQ9c3RhdGljIGJvb2wgdHJ5X3RvX2luY19tYXhfc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsXG4tLVxubW0vdm1zY2FuLmMtNDA5My1cdCAqIElmIHRoZSBoYXJkd2FyZSBkb2VzbiYjMzk7dCBhdXRvbWF0aWNhbGx5IHNldCB0aGUgYWNjZXNzZWQgYml0LCBmYWxsYmFja1xubW0vdm1zY2FuLmM6NDA5NDpcdCAqIHRvIGxydV9nZW5fbG9va19hcm91bmQoKSwgd2hpY2ggb25seSBjbGVhcnMgdGhlIGFjY2Vzc2VkIGJpdCBpbiBhXG5tbS92bXNjYW4uYy00MDk1LVx0ICogaGFuZGZ1bCBvZiBQVEVzLiBTcHJlYWRpbmcgdGhlIHdvcmsgb3V0IG92ZXIgYSBwZXJpb2Qgb2YgdGltZSB1c3VhbGx5XG4tLVxubW0vdm1zY2FuLmM9NDIxMz1zdGF0aWMgdm9pZCBscnVfZ2VuX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTQyNTktICovXG5tbS92bXNjYW4uYzo0MjYwOmJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcbm1tL3Ztc2Nhbi5jLTQyNjEte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxOTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODk4OQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRoZSBleHBlcnQ6CgoqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBBIFF1aWNrIFNjYW4qKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZS4gVGhlIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCBmdW5jdGlvbiBjYWxsZWQgZnJvbSBgZm9saW9fcmVmZXJlbmNlZF9vbmVgIHdpdGhpbiBgbW0vcm1hcC5jYCBpcyBkZWZpbml0ZWx5IGNhdGNoaW5nIG15IGF0dGVudGlvbi4gR2l2ZW4gaXRzIGxvY2F0aW9uIGFuZCBsaWtlbHkgZnVuY3Rpb24gd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIGl0IHNlZW1zIGxpa2UgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuIEl0JiMzOTtzIGEga2V5IHBvaW50IG9mIGludGVyYWN0aW9uIHdpdGggdGhlIExSVSBhbmQgcmVmZXJlbmNlZCBmb2xpbyBmbGFncywgc3VnZ2VzdGluZyB0aGF0IHdlIGNvdWxkIGluZHVjZSBzb21lIGludGVyZXN0aW5nIGNvbmRpdGlvbnMuIE5vdywgdGhlIG5hdHVyYWwgc3RlcCBpcyB0byB0YWtlIGEgbG9vayBhdCBgZm9saW9fbWlncmF0ZV9mbGFnc2AsIHRvIHVuZGVyc3RhbmQgYW55IGZsYWdzIHRoYXQgYXJlIHJlbGV2YW50IGluIHRoaXMgY29udGV4dCBhbmQgc2VlIHdoYXQga2luZCBvZiBpbnB1dHMgd2UgY2FuIHRlc3QuIExldCYjMzk7cyBzZWUgd2hhdCB0aGF0IHJldmVhbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE5OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZvbGlvX21pZ3JhdGVfZmxhZ3MmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYWlvLmM9NDYwPXN0YXRpYyBpbnQgYWlvX21pZ3JhdGVfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZHN0LFxuLS1cbmZzL2Fpby5jLTUxMi1cdGZvbGlvX2NvcHkoZHN0LCBzcmMpO1xuZnMvYWlvLmM6NTEzOlx0Zm9saW9fbWlncmF0ZV9mbGFncyhkc3QsIHNyYyk7XG5mcy9haW8uYy01MTQtXHRCVUdfT04oY3R4LVx1MDAzZXJpbmdfZm9saW9zW2lkeF0gIT0gc3JjKTtcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYz0xMDI0PXN0YXRpYyBpbnQgaHVnZXRsYmZzX21pZ3JhdGVfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTAzOS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEwNDA6XHRmb2xpb19taWdyYXRlX2ZsYWdzKGRzdCwgc3JjKTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEwNDEtXG4tLVxuaW5jbHVkZS9saW51eC9taWdyYXRlLmg9Njk9dm9pZCBzb2Z0bGVhZl9lbnRyeV93YWl0X29uX2xvY2tlZChzb2Z0bGVhZl90IGVudHJ5LCBzcGlubG9ja190ICpwdGwpXG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaC03MC1cdFx0X19yZWxlYXNlcyhwdGwpO1xuaW5jbHVkZS9saW51eC9taWdyYXRlLmg6NzE6dm9pZCBmb2xpb19taWdyYXRlX2ZsYWdzKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuaW5jbHVkZS9saW51eC9taWdyYXRlLmgtNzItaW50IGZvbGlvX21pZ3JhdGVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oPTM1MT1zdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9kZWxfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIHJlY2xhaW1pbmcpXG4tLVxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC0zNjEtXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oOjM2MjpcdC8qIGZvciBmb2xpb19taWdyYXRlX2ZsYWdzKCkgKi9cbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtMzYzLVx0ZmxhZ3MgPSAhcmVjbGFpbWluZyBcdTAwMjZcdTAwMjYgbHJ1X2dlbl9pc19hY3RpdmUobHJ1dmVjLCBnZW4pID8gQklUKFBHX2FjdGl2ZSkgOiAwO1xuLS1cbm1tL21pZ3JhdGUuYz03Mzk9aW50IG1pZ3JhdGVfaHVnZV9wYWdlX21vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5tbS9taWdyYXRlLmMtNzc0LSAqL1xubW0vbWlncmF0ZS5jOjc3NTp2b2lkIGZvbGlvX21pZ3JhdGVfZmxhZ3Moc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL21pZ3JhdGUuYy03NzYte1xuLS1cbm1tL21pZ3JhdGUuYy04NjMtfVxubW0vbWlncmF0ZS5jOjg2NDpFWFBPUlRfU1lNQk9MKGZvbGlvX21pZ3JhdGVfZmxhZ3MpO1xubW0vbWlncmF0ZS5jLTg2NS1cbi0tXG5tbS9taWdyYXRlLmM9ODcwPXN0YXRpYyBpbnQgX19taWdyYXRlX2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmRzdCxcbi0tXG5tbS9taWdyYXRlLmMtODkwLVxubW0vbWlncmF0ZS5jOjg5MTpcdGZvbGlvX21pZ3JhdGVfZmxhZ3MoZHN0LCBzcmMpO1xubW0vbWlncmF0ZS5jLTg5Mi1cdHJldHVybiAwO1xuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmM9MTEwOT1zdGF0aWMgdm9pZCBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLFxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI1MS1cdFx0XHRlbHNlXG5tbS9taWdyYXRlX2RldmljZS5jOjEyNTI6XHRcdFx0XHRmb2xpb19taWdyYXRlX2ZsYWdzKG5ld2ZvbGlvLCBmb2xpbyk7XG5tbS9taWdyYXRlX2RldmljZS5jLTEyNTMtXHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTk6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk5OTEKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAzOTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgTWlncmF0aW9uIEhvdHNwb3RzKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCBhIGhhbmRsZSBvbiB0aGUgY29kZSBjaGFuZ2VzIHJlbGF0ZWQgdG8gZm9saW8gbWlncmF0aW9uLiBgZm9saW9fbWlncmF0ZV9mbGFnc2AgaW1tZWRpYXRlbHkgc3RhbmRzIG91dCBhcyBhIHN0cm9uZyBjYW5kaWRhdGUsIGdpdmVuIHRoYXQgaXQmIzM5O3MgZXhwb3J0ZWQgYW5kIHVzZWQgZGlyZWN0bHkgaW4gdGhlIG1pZ3JhdGlvbiBwcm9jZXNzLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4KCk5vdywgbGV0JiMzOTtzIGRpZyBhIGJpdCBkZWVwZXIgaW50byBwb3RlbnRpYWwgYm90dGxlbmVja3MuIGBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZWAgaXMgdGVtcHRpbmcsIGJ1dCBpdCYjMzk7cyBwYXJ0IG9mIHRoZSBgdXBkYXRlX2xydV9zaXplYCBjYWxsIGNoYWluLCBhbmQgdGhhdCYjMzk7cyBjYWxsZWQgZnJlcXVlbnRseSBmcm9tIGBscnV2ZWNfYWRkX2ZvbGlvYCwgYGxydXZlY19kZWxfZm9saW9gLCBhbmQgdGhlIGxpa2UuIEl0JiMzOTtzIHRvbyBob3QgYSBwYXRoIHRvIG1lc3Mgd2l0aCByaWdodCBub3cuIEkgbmVlZCB0byBhdm9pZCBpbXBhY3RpbmcgY3JpdGljYWwgcGVyZm9ybWFuY2UuCgpXaGF0IGVsc2U/IFdlbGwsIGEgYnVuY2ggb2Ygc3RhdGljIGZ1bmN0aW9ucyB3ZXJlIG1vZGlmaWVkLiBMZXQmIzM5O3Mgc2VlLi4uIGBmb2xpb191cGRhdGVfZ2VuYCwgYHdhbGtfcG1kX3JhbmdlX2xvY2tlZGAsIGB3YWxrX3B0ZV9yYW5nZWAsIGBmb2xpb19pbmNfZ2VuYCwgYW5kIGByZWFkX2N0cmxfcG9zYC4gU2luY2UgdGhleSYjMzk7cmUgc3RhdGljLCBJJiMzOTttIGxlc3Mgd29ycmllZCBhYm91dCB0aGVtIGJlaW5nIGV4cG9zZWQgYXMgdGhlIHByaW1hcnkgY2F1c2Ugb2YgcGVyZm9ybWFuY2UgZHJvcHMuIEJ1dCBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcuCgpBbHJpZ2h0LCBJJiMzOTtsbCByZXZpZXcgbm9uLXN0YXRpYyBmdW5jdGlvbnMgYWdhaW4uCmBmb2xpb19mbGFnc19pc19maWxlX2xydWAsIGBscnVfZ2VuX2Zyb21fZmxhZ3NgLCBgbHJ1X2dlbl9zZXRfZmxhZ3NgLCBgbHJ1X3JlZnNfZnJvbV9mbGFnc2AsIGBscnVfcmVmc19zZXRfZmxhZ3NgLCBgZm9saW9fbHJ1X3JlZnNgLCBgZm9saW9fc2V0X2xydV9yZWZzYCwgYGZvbGlvX2xydV9nZW5gLCBhbmQgYGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnNgIGFyZSBhbGwgaW5saW5lLCBzbyB0aGV5IGFyZSBwcm9iYWJseSBzYWZlLgoKSG9sZCBvbiwgdGhlIHBhdGNoIHRvdWNoZXMgYG1tL2ZvbGlvLmNgIGFzIHdlbGwuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZC4KYGxydV9nZW5faW5jX3JlZnNgIGFuZCBgbHJ1X2dlbl9jbGVhcl9yZWZzYCwgYm90aCBzdGF0aWMuCgpTbywgdGFraW5nIHN0b2NrLCBpdCBsb29rcyBsaWtlIGBmb2xpb19taWdyYXRlX2ZsYWdzYCBpcyB0aGUgcHJpbWFyeSBleHBvc2VkIHBvaW50IG9mIGludGVyZXN0LiBJdCYjMzk7cyB0aGUgY2xlYW5lc3Qgc3ltYm9sIHRvIGZvY3VzIG9uLiBBbmQgSSYjMzk7bSBub3cgZmFpcmx5IGNvbmZpZGVudCBpbiBhbHNvIHJldmlld2luZyBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAgYXMgd2VsbC4gVGhhdCBsb29rcyBsaWtlIGEgcG9zc2libGUgaG90c3BvdC4KCkZpbmFsbHksIEkgc2hvdWxkIGNvbmZpcm0gdGhhdCBgTFJVX0dFTmAgaXMgZW5hYmxlZCBpbiB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uLiBKdXN0IHRvIGJlIHN1cmUuIEkgbmVlZCB0byBjb25zaWRlciBhbGwgdGhlIGFuZ2xlcyB0byBlbnN1cmUgb3B0aW1hbCBwZXJmb3JtYW5jZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTk6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX0xSVV9HRU4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0PTEzPUJ1aWxkIHRoZSBrZXJuZWwgd2l0aCB0aGUgZm9sbG93aW5nIGNvbmZpZ3VyYXRpb25zLlxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0LTE0LVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0OjE1OiogYGBDT05GSUdfTFJVX0dFTj15YGBcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdDoxNjoqIGBgQ09ORklHX0xSVV9HRU5fRU5BQkxFRD15YGBcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdC0xNy1cbi0tXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3Q9Mjg9Zm9sbG93aW5nIGNvbXBvbmVudHMuIEl0cyBkZWZhdWx0IHZhbHVlIGRlcGVuZHMgb25cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdDoyOTpgYENPTkZJR19MUlVfR0VOX0VOQUJMRURgYC4gQWxsIHRoZSBjb21wb25lbnRzIHNob3VsZCBiZSBlbmFibGVkXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QtMzAtdW5sZXNzIHNvbWUgb2YgdGhlbSBoYXZlIHVuZm9yZXNlZW4gc2lkZSBlZmZlY3RzLiBXcml0aW5nIHRvXG4tLVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0PTg4PWNvbmNhdGVuYXRpb24gd2l0aCBkZWxpbWl0ZXJzIGBgLGBgIGFuZCBgYDtgYC5cbi0tXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QtOTAtYGAvc3lzL2tlcm5lbC9kZWJ1Zy9scnVfZ2VuX2Z1bGxgYCBwcm92aWRlcyBhZGRpdGlvbmFsIHN0YXRzIGZvclxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0OjkxOmRlYnVnZ2luZy4gYGBDT05GSUdfTFJVX0dFTl9TVEFUUz15YGAga2VlcHMgaGlzdG9yaWNhbCBzdGF0cyBmcm9tXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QtOTItZXZpY3RlZCBnZW5lcmF0aW9ucyBpbiB0aGlzIGZpbGUuXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MjAyPXN0cnVjdCBtZW1fY2dyb3VwIHtcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0yODMtXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoyODQ6I2lmZGVmIENPTkZJR19MUlVfR0VOX1dBTEtTX01NVVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMjg1LVx0LyogcGVyLW1lbWNnIG1tX3N0cnVjdCBsaXN0ICovXG4tLVxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaD04Nz1zdGF0aWMgX19hbHdheXNfaW5saW5lIGVudW0gbHJ1X2xpc3QgZm9saW9fbHJ1X2xpc3QoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTEwMi1cbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg6MTAzOiNpZmRlZiBDT05GSUdfTFJVX0dFTlxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC0xMDQtXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oPTEwNT1zdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9zd2l0Y2hpbmcodm9pZClcbi0tXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTExMC19XG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oOjExMTojaWZkZWYgQ09ORklHX0xSVV9HRU5fRU5BQkxFRFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC0xMTItc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZW5hYmxlZCh2b2lkKVxuLS1cbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg9MzgyPXN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19taWdyYXRlX2xydV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZClcbi0tXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTM4Ni19XG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oOjM4NzojZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi9cbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtMzg4LVxuLS1cbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg9NDE0PXN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19taWdyYXRlX2xydV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZClcbi0tXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTQxOC19XG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oOjQxOTojZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtNDIwLVxuLS1cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaD0xMTc1PXN0cnVjdCBtbV9zdHJ1Y3Qge1xuLS1cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xNDAyLSNlbmRpZiAvKiBDT05GSUdfS1NNICovXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg6MTQwMzojaWZkZWYgQ09ORklHX0xSVV9HRU5fV0FMS1NfTU1VXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTQwNC1cdFx0c3RydWN0IHtcbi0tXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTQxNy1cdFx0fSBscnVfZ2VuO1xuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjE0MTg6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOX1dBTEtTX01NVSAqL1xuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTE0MTktI2lmZGVmIENPTkZJR19NTV9JRFxuLS1cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaD0xNDgwPXN0YXRpYyBpbmxpbmUgY3B1bWFza190ICptbV9jcHVtYXNrKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xNDg0LVxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjE0ODU6I2lmZGVmIENPTkZJR19MUlVfR0VOXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTQ4Ni1cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaD0xNDg3PXN0cnVjdCBscnVfZ2VuX21tX2xpc3Qge1xuLS1cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xNDkzLVxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjE0OTQ6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTQ5NS1cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDoxNDk2OiNpZmRlZiBDT05GSUdfTFJVX0dFTl9XQUxLU19NTVVcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xNDk3LVxuLS1cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaD0xNTExPXN0YXRpYyBpbmxpbmUgdm9pZCBscnVfZ2VuX3VzZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTUyMC1cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDoxNTIxOiNlbHNlIC8qICFDT05GSUdfTFJVX0dFTl9XQUxLU19NTVUgKi9cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xNTIyLVxuLS1cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaD0xNTM5PXN0YXRpYyBpbmxpbmUgdm9pZCBscnVfZ2VuX3VzZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTU0Mi1cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDoxNTQzOiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTl9XQUxLU19NTVUgKi9cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xNTQ0LVxuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmg9NTI4PXN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsaztcbmluY2x1ZGUvbGludXgvbW16b25lLmgtNTI5LVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDo1MzA6I2lmZGVmIENPTkZJR19MUlVfR0VOXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTUzMS1cbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTUzNz1lbnVtIHtcbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTU0Ny0vKiB3aGV0aGVyIHRvIGtlZXAgaGlzdG9yaWNhbCBzdGF0cyBmcm9tIGV2aWN0ZWQgZ2VuZXJhdGlvbnMgKi9cbmluY2x1ZGUvbGludXgvbW16b25lLmg6NTQ4OiNpZmRlZiBDT05GSUdfTFJVX0dFTl9TVEFUU1xuaW5jbHVkZS9saW51eC9tbXpvbmUuaC01NDktI2RlZmluZSBOUl9ISVNUX0dFTlNcdFx0TUFYX05SX0dFTlNcbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTcwNT12b2lkIGxydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKTtcbmluY2x1ZGUvbGludXgvbW16b25lLmgtNzA2LVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDo3MDc6I2Vsc2UgLyogIUNPTkZJR19MUlVfR0VOICovXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTcwOC1cbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTc1Nz12b2lkIGxydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKVxuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmgtNzYwLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDo3NjE6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTc2Mi1cbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTc2OT1zdHJ1Y3QgbHJ1dmVjIHtcbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTc4OC1cdHVuc2lnbmVkIGxvbmdcdFx0XHRmbGFncztcbmluY2x1ZGUvbGludXgvbW16b25lLmg6Nzg5OiNpZmRlZiBDT05GSUdfTFJVX0dFTlxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC03OTAtXHQvKiBldmljdGFibGUgcGFnZXMgZGl2aWRlZCBpbnRvIGdlbmVyYXRpb25zICovXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTc5MS1cdHN0cnVjdCBscnVfZ2VuX2ZvbGlvXHRcdGxydWdlbjtcbmluY2x1ZGUvbGludXgvbW16b25lLmg6NzkyOiNpZmRlZiBDT05GSUdfTFJVX0dFTl9XQUxLU19NTVVcbmluY2x1ZGUvbGludXgvbW16b25lLmgtNzkzLVx0LyogdG8gY29uY3VycmVudGx5IGl0ZXJhdGUgbHJ1X2dlbl9tbV9saXN0ICovXG4tLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC03OTUtI2VuZGlmXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjc5NjojZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cbmluY2x1ZGUvbGludXgvbW16b25lLmgtNzk3LSNpZmRlZiBDT05GSUdfTUVNQ0dcbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTE0ODE9dHlwZWRlZiBzdHJ1Y3QgcGdsaXN0X2RhdGEge1xuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTU5OC1cbmluY2x1ZGUvbGludXgvbW16b25lLmg6MTU5OTojaWZkZWYgQ09ORklHX0xSVV9HRU5cbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTYwMC1cdC8qIGtzd2FwIG1tIHdhbGsgZGF0YSAqL1xuLS1cbmluY2x1ZGUvbGludXgvc2NoZWQuaD04MjY9c3RydWN0IHRhc2tfc3RydWN0IHtcbi0tXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMTAyNC0jZW5kaWZcbmluY2x1ZGUvbGludXgvc2NoZWQuaDoxMDI1OiNpZmRlZiBDT05GSUdfTFJVX0dFTlxuaW5jbHVkZS9saW51eC9zY2hlZC5oLTEwMjYtXHQvKiB3aGV0aGVyIHRoZSBMUlUgYWxnb3JpdGhtIG1heSBhcHBseSB0byB0aGlzIGFjY2VzcyAqL1xuLS1cbmluY2x1ZGUvbGludXgvc3dhcC5oPTE0Nj1zdHJ1Y3QgcmVjbGFpbV9zdGF0ZSB7XG4tLVxuaW5jbHVkZS9saW51eC9zd2FwLmgtMTQ4LVx0dW5zaWduZWQgbG9uZyByZWNsYWltZWQ7XG5pbmNsdWRlL2xpbnV4L3N3YXAuaDoxNDk6I2lmZGVmIENPTkZJR19MUlVfR0VOXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC0xNTAtXHQvKiBwZXItdGhyZWFkIG1tIHdhbGsgZGF0YSAqL1xuLS1cbmtlcm5lbC9ib3VuZHMuYz0xNz1pbnQgbWFpbih2b2lkKVxuLS1cbmtlcm5lbC9ib3VuZHMuYy0yNS1cdERFRklORShTUElOTE9DS19TSVpFLCBzaXplb2Yoc3BpbmxvY2tfdCkpO1xua2VybmVsL2JvdW5kcy5jOjI2OiNpZmRlZiBDT05GSUdfTFJVX0dFTlxua2VybmVsL2JvdW5kcy5jLTI3LVx0REVGSU5FKExSVV9HRU5fV0lEVEgsIG9yZGVyX2Jhc2VfMihNQVhfTlJfR0VOUyAmIzQzOyAxKSk7XG4tLVxua2VybmVsL2ZvcmsuYz0yNjk0PXBpZF90IGtlcm5lbF9jbG9uZShzdHJ1Y3Qga2VybmVsX2Nsb25lX2FyZ3MgKmFyZ3MpXG4tLVxua2VybmVsL2ZvcmsuYy0yNzcxLVxua2VybmVsL2ZvcmsuYzoyNzcyOlx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0xSVV9HRU5fV0FMS1NfTU1VKSBcdTAwMjZcdTAwMjYgIShjbG9uZV9mbGFncyBcdTAwMjYgQ0xPTkVfVk0pKSB7XG5rZXJuZWwvZm9yay5jLTI3NzMtXHRcdC8qIGxvY2sgdGhlIHRhc2sgdG8gc3luY2hyb25pemUgd2l0aCBtZW1jZyBtaWdyYXRpb24gKi9cbi0tXG5tbS9mb2xpby5jPTMyMj1zdGF0aWMgdm9pZCBfX2xydV9jYWNoZV9hY3RpdmF0ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2ZvbGlvLmMtMzUxLVxubW0vZm9saW8uYzozNTI6I2lmZGVmIENPTkZJR19MUlVfR0VOXG5tbS9mb2xpby5jLTM1My1cbi0tXG5tbS9mb2xpby5jPTM4MD1zdGF0aWMgYm9vbCBscnVfZ2VuX2NsZWFyX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9mb2xpby5jLTM5OC1cbm1tL2ZvbGlvLmM6Mzk5OiNlbHNlIC8qICFDT05GSUdfTFJVX0dFTiAqL1xubW0vZm9saW8uYy00MDAtXG4tLVxubW0vZm9saW8uYz00MDU9c3RhdGljIGJvb2wgbHJ1X2dlbl9jbGVhcl9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vZm9saW8uYy00MDktXG5tbS9mb2xpby5jOjQxMDojZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cbm1tL2ZvbGlvLmMtNDExLVxuLS1cbm1tL21lbWNvbnRyb2wuYz00NjEwPXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfZXhpdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spXG4tLVxubW0vbWVtY29udHJvbC5jLTQ2MjYtXG5tbS9tZW1jb250cm9sLmM6NDYyNzojaWZkZWYgQ09ORklHX0xSVV9HRU5cbm1tL21lbWNvbnRyb2wuYy00NjI4LXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfbHJ1X2dlbl9hdHRhY2goc3RydWN0IGNncm91cF90YXNrc2V0ICp0c2V0KVxuLS1cbm1tL21lbWNvbnRyb2wuYz00NjQ2PXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfbHJ1X2dlbl9hdHRhY2goc3RydWN0IGNncm91cF90YXNrc2V0ICp0c2V0KSB7fVxubW0vbWVtY29udHJvbC5jOjQ2NDc6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXG5tbS9tZW1jb250cm9sLmMtNDY0OC1cbi0tXG5tbS9tZW1vcnkuYz02NzI1PXN0YXRpYyBpbmxpbmUgdm9pZCBtbV9hY2NvdW50X2ZhdWx0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyxcbi0tXG5tbS9tZW1vcnkuYy02Nzc3LVxubW0vbWVtb3J5LmM6Njc3ODojaWZkZWYgQ09ORklHX0xSVV9HRU5cbm1tL21lbW9yeS5jLTY3Nzktc3RhdGljIHZvaWQgbHJ1X2dlbl9lbnRlcl9mYXVsdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5tbS9tZW1vcnkuYz02Nzk0PXN0YXRpYyB2b2lkIGxydV9nZW5fZXhpdF9mYXVsdCh2b2lkKVxuLS1cbm1tL21lbW9yeS5jLTY3OTYtfVxubW0vbWVtb3J5LmM6Njc5NzojZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cbm1tL21lbW9yeS5jLTY3OTgtXG4tLVxubW0vdm1zY2FuLmM9ODI3PWVudW0gZm9saW9fcmVmZXJlbmNlcyB7XG4tLVxubW0vdm1zY2FuLmMtODMyLVxubW0vdm1zY2FuLmM6ODMzOiNpZmRlZiBDT05GSUdfTFJVX0dFTlxubW0vdm1zY2FuLmMtODM0LS8qXG4tLVxubW0vdm1zY2FuLmM9ODY1PXN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcbi0tXG5tbS92bXNjYW4uYy04NjgtfVxubW0vdm1zY2FuLmM6ODY5OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xubW0vdm1zY2FuLmMtODcwLVxuLS1cbm1tL3Ztc2Nhbi5jPTI2ODM9c3RhdGljIGJvb2wgY2FuX2FnZV9hbm9uX3BhZ2VzKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbi0tXG5tbS92bXNjYW4uYy0yNjk0LVxubW0vdm1zY2FuLmM6MjY5NTojaWZkZWYgQ09ORklHX0xSVV9HRU5cbm1tL3Ztc2Nhbi5jLTI2OTYtXG5tbS92bXNjYW4uYz0yNjk3PURFRklORV9TVEFUSUNfS0VZX0ZBTFNFKGxydV9zd2l0Y2gpO1xubW0vdm1zY2FuLmM6MjY5ODojaWZkZWYgQ09ORklHX0xSVV9HRU5fRU5BQkxFRFxubW0vdm1zY2FuLmMtMjY5OS1ERUZJTkVfU1RBVElDX0tFWV9BUlJBWV9UUlVFKGxydV9nZW5fY2FwcywgTlJfTFJVX0dFTl9DQVBTKTtcbi0tXG5tbS92bXNjYW4uYz0yODgzPXN0YXRpYyB2b2lkIHJlc2V0X2Jsb29tX2ZpbHRlcihzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUsIHVuc2lnbmVkIGxvbmcgc2VxKVxuLS1cbm1tL3Ztc2Nhbi5jLTI5MDItXG5tbS92bXNjYW4uYzoyOTAzOiNpZmRlZiBDT05GSUdfTFJVX0dFTl9XQUxLU19NTVVcbm1tL3Ztc2Nhbi5jLTI5MDQtXG4tLVxubW0vdm1zY2FuLmM9MzAxMj12b2lkIGxydV9nZW5fbWlncmF0ZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5tbS92bXNjYW4uYy0zMDQwLVxubW0vdm1zY2FuLmM6MzA0MTojZWxzZSAvKiAhQ09ORklHX0xSVV9HRU5fV0FMS1NfTU1VICovXG5tbS92bXNjYW4uYy0zMDQyLVxuLS1cbm1tL3Ztc2Nhbi5jPTU5NTM9bGF0ZV9pbml0Y2FsbChpbml0X2xydV9nZW4pO1xubW0vdm1zY2FuLmMtNTk1NC1cbm1tL3Ztc2Nhbi5jOjU5NTU6I2Vsc2UgLyogIUNPTkZJR19MUlVfR0VOICovXG5tbS92bXNjYW4uYy01OTU2LVxuLS1cbm1tL3Ztc2Nhbi5jPTU5Njc9c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01OTcxLVxubW0vdm1zY2FuLmM6NTk3MjojZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cbm1tL3Ztc2Nhbi5jLTU5NzMtXG4tLVxubW0vd29ya2luZ3NldC5jPTIxMz1zdGF0aWMgdm9pZCB1bnBhY2tfc2hhZG93KHZvaWQgKnNoYWRvdywgaW50ICptZW1jZ2lkcCwgcGdfZGF0YV90ICoqcGdkYXQsXG4tLVxubW0vd29ya2luZ3NldC5jLTIzMi1cbm1tL3dvcmtpbmdzZXQuYzoyMzM6I2lmZGVmIENPTkZJR19MUlVfR0VOXG5tbS93b3JraW5nc2V0LmMtMjM0LVxuLS1cbm1tL3dvcmtpbmdzZXQuYz0yOTI9c3RhdGljIHZvaWQgbHJ1X2dlbl9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdylcbi0tXG5tbS93b3JraW5nc2V0LmMtMzM2LVxubW0vd29ya2luZ3NldC5jOjMzNzojZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi9cbm1tL3dvcmtpbmdzZXQuYy0zMzgtXG4tLVxubW0vd29ya2luZ3NldC5jPTM1MD1zdGF0aWMgdm9pZCBscnVfZ2VuX3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KVxuLS1cbm1tL3dvcmtpbmdzZXQuYy0zNTMtXG5tbS93b3JraW5nc2V0LmM6MzU0OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xubW0vd29ya2luZ3NldC5jLTM1NS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTk6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ5NTYKCQkJCQkJCW91dHB1dDogMTQ5CgkJCQkJCQl0aG91Z2h0czogNjI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBNR0xSVSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBNR0xSVSBwYXRjaCwgYW5kIGhlcmUmIzM5O3MgdGhlIGJyZWFrZG93biBvZiBteSB0aGlua2luZy4gRmlyc3QsIGBDT05GSUdfTFJVX0dFTmAgaXMgdGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbiBoZXJlLCBhbmQgYENPTkZJR19MUlVfR0VOX0VOQUJMRURgIGVuYWJsZXMgaXQgYnkgZGVmYXVsdC4gU28sIGZvciB0aGUgZnV6emluZyBzZXR1cCwgYExSVV9HRU5gIGFuZCBgTFJVX0dFTl9FTkFCTEVEYCBkZWZpbml0ZWx5IG5lZWQgdG8gYmUgaW5jbHVkZWQgaW4gYEVuYWJsZUNvbmZpZ3NgLiBUaGF0JiMzOTtzIGEgbm8tYnJhaW5lci4KCk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb246IGlzIHRoaXMgcGF0Y2ggaW50cm9kdWNpbmcgZnVuY3Rpb25hbCBjaGFuZ2VzIHNpZ25pZmljYW50IGVub3VnaCB0byB3YXJyYW50IGZ1enppbmc/IEFic29sdXRlbHkuIFRoZSBwYXRjaCB0b3VjaGVzIHRoZSB2ZXJ5IGhlYXJ0IG9mIG1lbW9yeSBtYW5hZ2VtZW50IOKAkyB0aGUgTFJVIGdlbmVyYXRpb24gbG9naWMuIFRoZSBjaGFuZ2VzIHRvIGBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZWAgaW1tZWRpYXRlbHkgY2F1Z2h0IG15IGV5ZTsgdXNpbmcgYXRvbWljIG9wZXJhdGlvbnMgaXMgYSBjcml0aWNhbCBmaXggZm9yIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uLiBBbHNvLCBjaGFuZ2VzIHRvIGBmb2xpb19taWdyYXRlX2ZsYWdzYCwgYGxydV9nZW5fbG9va19hcm91bmRgLCBhbmQgdGhlIHVwZGF0ZXMgaW4gYG1tL3Ztc2Nhbi5jYCBhbGwgc2NyZWFtICYjMzQ7ZnVuY3Rpb25hbCBpbXBhY3QuJiMzNDsgU28sIGBXb3J0aEZ1enppbmdgIGlzIGRlZmluaXRlbHkgdHJ1ZS4KClRoaXMgbGVhZHMgbWUgdG8gYEZvY3VzU3ltYm9sc2AuIEnigJltIGluaXRpYWxseSB0aGlua2luZyBgZm9saW9fbWlncmF0ZV9mbGFnc2AgYW5kIGBscnVfZ2VuX2xvb2tfYXJvdW5kYC4gQnV0IHdhaXQgYSBtaW51dGUsIGBmb2xpb19taWdyYXRlX2ZsYWdzYCBpcyBjYWxsZWQgZnJvbSBgbWlncmF0ZV9wYWdlc2AgYW5kIGBtaWdyYXRlX2RldmljZV9wYWdlc2AuIFBhZ2UgbWlncmF0aW9uIGlzbiYjMzk7dCBhcyBob3QgYXMgcGFnZSBmYXVsdHMgb3IgcmVjbGFpbSwgYnV0IGl0JiMzOTtzIHN0aWxsIGZ1bmRhbWVudGFsIHRvIG1lbW9yeSBtYW5hZ2VtZW50LiBBcyBmb3IgYGxydV9nZW5fbG9va19hcm91bmRgLCB0aGF0IG9uZSBpcyBjYWxsZWQgd2l0aGluIGBmb2xpb19yZWZlcmVuY2VkX29uZWAgZHVyaW5nIHJtYXAgd2Fsa2luZywgd2hpY2ggaXMgYWJzb2x1dGVseSBwYXJ0IG9mIHBhZ2UgcmVjbGFpbS4gSXQmIzM5O3MgYSBiaXQgaG90LCBnaXZlbiB0aGF0IGl0JiMzOTtzIHBhcnQgb2YgTUdMUlUuCgpMZXQmIzM5O3MgZG91YmxlIGNoZWNrLiBHb2luZyB0aHJvdWdoIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucywgSSBzZWUgdGhlIGZvbGxvd2luZyBpbmxpbmVzOiBgZm9saW9fbWlncmF0ZV9scnVfcmVmc2AsIGBmb2xpb19zZXRfbHJ1X3JlZnNgLCBgbHJ1X3JlZnNfc2V0X2ZsYWdzYCwgYGxydV9nZW5fc2V0X2ZsYWdzYCwgYGxydV9nZW5fZnJvbV9mbGFnc2AsIGFuZCBgZm9saW9fZmxhZ3NfaXNfZmlsZV9scnVgLiBUaG9zZSBkb24mIzM5O3QgY29uY2VybiBtZSwgc2luY2UgdGhleSBhcmUgaW5saW5lLiBUaHVzLCB0aGUgb25seSBub24tc3RhdGljIGZ1bmN0aW9ucyBhcmUgYG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplYCwgYGZvbGlvX21pZ3JhdGVfZmxhZ3NgLCBhbmQgYGxydV9nZW5fbG9va19hcm91bmRgLgoKUmlnaHQsIHNvIGFmdGVyIHJldmlld2luZywgYGZvbGlvX21pZ3JhdGVfZmxhZ3NgIGFuZCBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAgc3RheSBpbiBgRm9jdXNTeW1ib2xzYC4gSG93ZXZlciwgYG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplYCBpcyB0b28gaG90IHRvIGluY2x1ZGUuCgpUbyBzdW1tYXJpemUsIHRoaXMgcGF0Y2ggcmVmYWN0b3JzIE1HTFJVJiMzOTtzIHBhZ2UgZmxhZ3MgYW5kIGZpeGVzIGEgcmFjZS4gSXQgdG91Y2hlcyBjb3JlIGxvZ2ljOiBwYWdlIG1pZ3JhdGlvbiBhbmQgcmVjbGFpbS4gVGhlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwsIGFuZCB0aGF0IG1ha2VzIGl0IHJpcGUgZm9yIGZ1enppbmcuCgpPa2F5LCBJIHRoaW5rIEkgaGF2ZSBhIHNvbGlkIHVuZGVyc3RhbmRpbmcsIGFuZCBJJiMzOTttIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTk6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Zm9saW9fbWlncmF0ZV9mbGFncyYjMzQ7LAogICAgJiMzNDtscnVfZ2VuX2xvb2tfYXJvdW5kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBNdWx0aS1HZW4gTFJVIChNR0xSVSkgcGFnZSBmbGFncyBoYW5kbGluZyBhbmQgZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiBgbHJ1X3pvbmVfc2l6ZWAgdXBkYXRlcyBieSB1c2luZyBhdG9taWMgb3BlcmF0aW9ucy4gSXQgbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYywgc3BlY2lmaWNhbGx5IHBhZ2UgbWlncmF0aW9uIChgZm9saW9fbWlncmF0ZV9mbGFnc2ApIGFuZCBwYWdlIHJlY2xhaW0gbG9va2Fyb3VuZCAoYGxydV9nZW5fbG9va19hcm91bmRgKS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIG1ha2luZyB0aGVtIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Zm9saW9fbWlncmF0ZV9mbGFncyYjMzQ7LAogICAgJiMzNDtscnVfZ2VuX2xvb2tfYXJvdW5kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBNdWx0aS1HZW4gTFJVIChNR0xSVSkgcGFnZSBmbGFncyBoYW5kbGluZyBhbmQgZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiBgbHJ1X3pvbmVfc2l6ZWAgdXBkYXRlcyBieSB1c2luZyBhdG9taWMgb3BlcmF0aW9ucy4gSXQgbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYywgc3BlY2lmaWNhbGx5IHBhZ2UgbWlncmF0aW9uIChgZm9saW9fbWlncmF0ZV9mbGFnc2ApIGFuZCBwYWdlIHJlY2xhaW0gbG9va2Fyb3VuZCAoYGxydV9nZW5fbG9va19hcm91bmRgKS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIG1ha2luZyB0aGVtIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE5OjA1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTk6MDU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBpbnRlcm5hbCBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCBzcGVjaWZpY2FsbHkgTFJVIGdlbmVyYXRpb24gYW5kIGZvbGlvIGZsYWdzIG1hbmlwdWxhdGlvbiwgYW5kIGNoYW5nZXMgYGxydV96b25lX3NpemVgIHRvIHVzZSBgYXRvbWljX2xvbmdfdGAuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgdGhhdCBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFsbG9jYXRlIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIG9yIG1vZGlmeSBib3VuZHMgY2hlY2tzIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgbmV3bHkgaW50cm9kdWNlZCBvdXQtcGFyYW1ldGVyIGBpc19maWxlYCBpbiBgZm9saW9fdXBkYXRlX2dlbmAgaXMgYWx3YXlzIGluaXRpYWxpemVkIGJlZm9yZSByZXR1cm5pbmcuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgcmFjZSBjb25kaXRpb25zLCB1c2UtYWZ0ZXItZnJlZSwgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcykgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgb3RoZXIgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAyNTlhMjUyMjM4NzZkMGYyNzNiMzRmZTZhZWYzNDM2NmI3NTYwOTllCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMjUgMTk6MDM6MjEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCmluZGV4IDIxNWUyZTg3ZjQyYjIuLjdiODlkMGNiNWY2YzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCkBAIC0xMTMsNyAmIzQzOzExMyw3IEBAIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlIHsKIAkvKiBGaWVsZHMgd2hpY2ggZ2V0IHVwZGF0ZWQgb2Z0ZW4gYXQgdGhlIGVuZC4gKi8KIAlzdHJ1Y3QgbHJ1dmVjCQlscnV2ZWM7CiAJQ0FDSEVMSU5FX1BBRERJTkcoX3BhZDJfKTsKLQl1bnNpZ25lZCBsb25nCQlscnVfem9uZV9zaXplW01BWF9OUl9aT05FU11bTlJfTFJVX0xJU1RTXTsKJiM0MzsJYXRvbWljX2xvbmdfdAkJbHJ1X3pvbmVfc2l6ZVtNQVhfTlJfWk9ORVNdW05SX0xSVV9MSVNUU107CiAJc3RydWN0IG1lbV9jZ3JvdXBfcmVjbGFpbV9pdGVyCWl0ZXI7CiAKIAkvKgpAQCAtOTAyLDEwICYjNDM7OTAyLDE1IEBAIHN0YXRpYyBpbmxpbmUKIHVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9nZXRfem9uZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiAJCWVudW0gbHJ1X2xpc3QgbHJ1LCBpbnQgem9uZV9pZHgpCiB7CiYjNDM7CWxvbmcgdmFsOwogCXN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICptejsKIAogCW16ID0gY29udGFpbmVyX29mKGxydXZlYywgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUsIGxydXZlYyk7Ci0JcmV0dXJuIFJFQURfT05DRShtei0mZ3Q7bHJ1X3pvbmVfc2l6ZVt6b25lX2lkeF1bbHJ1XSk7CiYjNDM7CXZhbCA9IGF0b21pY19sb25nX3JlYWQoJmFtcDttei0mZ3Q7bHJ1X3pvbmVfc2l6ZVt6b25lX2lkeF1bbHJ1XSk7CiYjNDM7CWlmIChXQVJOX09OX09OQ0UodmFsICZsdDsgMCkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcmV0dXJuIHZhbDsKIH0KIAogdm9pZCBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzayk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oIGIvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaAppbmRleCA2MjFjODY1M2Q4ZjdlLi44Y2Y4Mjk4OWVjMjYzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmgKQEAgLTEwLDYgJiM0MzsxMCwxMSBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3VzZXJmYXVsdGZkX2suaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9sZWFmb3BzLmgmZ3Q7CiAKJiM0MztzdGF0aWMgaW5saW5lIGludCBmb2xpb19mbGFnc19pc19maWxlX2xydShjb25zdCB1bnNpZ25lZCBsb25nICpmbGFncykKJiM0Mzt7CiYjNDM7CXJldHVybiAhdGVzdF9iaXQoUEdfc3dhcGJhY2tlZCwgZmxhZ3MpOwomIzQzO30KJiM0MzsKIC8qKgogICogZm9saW9faXNfZmlsZV9scnUgLSBTaG91bGQgdGhlIGZvbGlvIGJlIG9uIGEgZmlsZSBMUlUgb3IgYW5vbiBMUlU/CiAgKiBAZm9saW86IFRoZSBmb2xpbyB0byB0ZXN0LgpAQCAtMjcsNyAmIzQzOzMyLDcgQEAKICAqLwogc3RhdGljIGlubGluZSBpbnQgZm9saW9faXNfZmlsZV9scnUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKIHsKLQlyZXR1cm4gIWZvbGlvX3Rlc3Rfc3dhcGJhY2tlZChmb2xpbyk7CiYjNDM7CXJldHVybiBmb2xpb19mbGFnc19pc19maWxlX2xydShjb25zdF9mb2xpb19mbGFncyhmb2xpbywgMCkpOwogfQogCiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX191cGRhdGVfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLApAQCAtMTQyLDEwICYjNDM7MTQ3LDQyIEBAIHN0YXRpYyBpbmxpbmUgaW50IGxydV90aWVyX2Zyb21fcmVmcyhpbnQgcmVmcywgYm9vbCB3b3JraW5nc2V0KQogCXJldHVybiB3b3JraW5nc2V0ID8gTUFYX05SX1RJRVJTIC0gMSA6IG9yZGVyX2Jhc2VfMihyZWZzKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X3JlZnMoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKJiM0MzsvKioKJiM0MzsgKiBscnVfZ2VuX2Zyb21fZmxhZ3MgLSBSZXR1cm4gdGhlIExSVSBnZW5lcmF0aW9uIG51bWJlciBmcm9tIGZvbGlvIGZsYWdzLgomIzQzOyAqIEBmbGFnczogZm9saW8gZmxhZ3MKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IEEgbnVtYmVyIGJldHdlZW4gMCBhbmQgKE1BWF9OUl9HRU5TIC0gMSksIGluY2x1c2l2ZS4gUmV0dXJucwomIzQzOyAqIC0xIGlmIHRoZSBmbGFncyBpbmRpY2F0ZSB0aGUgZm9saW8gaXMgb2ZmIHRoZSBsaXN0IChlLmcuLCBpc29sYXRlZCkuCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSBpbnQgbHJ1X2dlbl9mcm9tX2ZsYWdzKHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiYjNDM7ewomIzQzOwlpbnQgZ2VuID0gKChmbGFncyAmYW1wOyBMUlVfR0VOX01BU0spICZndDsmZ3Q7IExSVV9HRU5fUEdPRkYpOwomIzQzOwomIzQzOwlCVUlMRF9CVUdfT04oTFJVX0dFTl9NQVNLICZhbXA7IExSVV9SRUZTX01BU0spOwomIzQzOwlnZW4gLT0gMTsKJiM0MzsJVk1fV0FSTl9PTl9PTkNFKGdlbiAhPSAtMSAmYW1wOyZhbXA7IGdlbiAmZ3Q7PSBNQVhfTlJfR0VOUyk7CiYjNDM7CXJldHVybiBnZW47CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGxydV9nZW5fc2V0X2ZsYWdzIC0gU2V0IHRoZSBMUlUgZ2VuZXJhdGlvbiBudW1iZXIgdG8gc3BlY2lmaWVkIGZvbGlvIGZsYWdzLgomIzQzOyAqIEBmbGFnczogcG9pbnRlciB0byB0aGUgZm9saW8gZmxhZ3MKJiM0MzsgKiBAZ2VuOiBnZW5lcmF0aW9uIG51bWJlciwgYmV0d2VlbiAwIGFuZCAoTUFYX05SX0dFTlMgLSAxKSwgaW5jbHVzaXZlLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBscnVfZ2VuX3NldF9mbGFncyh1bnNpZ25lZCBsb25nICpmbGFncywgaW50IGdlbikKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLSZndDtmbGFncy5mKTsKJiM0MzsJVk1fV0FSTl9PTl9PTkNFKGdlbiAmZ3Q7PSBNQVhfTlJfR0VOUyB8fCBnZW4gJmx0OyAwKTsKJiM0MzsKJiM0MzsJKmZsYWdzICZhbXA7PSB+TFJVX0dFTl9NQVNLOwomIzQzOwkqZmxhZ3MgfD0gKGdlbiAmIzQzOyAxVUwpICZsdDsmbHQ7IExSVV9HRU5fUEdPRkY7CiYjNDM7fQogCiYjNDM7LyoqCiYjNDM7ICogbHJ1X3JlZnNfZnJvbV9mbGFncyAtIFJldHVybiBMUlUgcmVmZXJlbmNlZCAvIGFjY2VzcyBjb3VudCBmcm9tIGZvbGlvIGZsYWdzLgomIzQzOyAqIEBmbGFnczogZm9saW8gZmxhZ3MKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIGludCBscnVfcmVmc19mcm9tX2ZsYWdzKHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiYjNDM7ewogCWlmICghKGZsYWdzICZhbXA7IEJJVChQR19yZWZlcmVuY2VkKSkpCiAJCXJldHVybiAwOwogCS8qCkBAIC0xNTUsMTEgJiM0MzsxOTIsNDAgQEAgc3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X3JlZnMoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKIAlyZXR1cm4gKChmbGFncyAmYW1wOyBMUlVfUkVGU19NQVNLKSAmZ3Q7Jmd0OyBMUlVfUkVGU19QR09GRikgJiM0MzsgMTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X2dlbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzOy8qKgomIzQzOyAqIGxydV9yZWZzX3NldF9mbGFncyAtIFNldCB0aGUgTFJVIHJlZmVyZW5jZWQgLyBhY2Nlc3MgY291bnQgdG8gc3BlY2lmaWVkIGZvbGlvIGZsYWdzLgomIzQzOyAqIEBmbGFnczogcG9pbnRlciB0byB0aGUgZm9saW8gZmxhZ3MKJiM0MzsgKiBAcmVmczogcmVmZXJlbmNlZCAvIGFjY2VzcyBjb3VudCBudW1iZXIsIGJldHdlZW4gMCBhbmQgTFJVX1JFRlNfTUFYLCBpbmNsdXNpdmUuCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGxydV9yZWZzX3NldF9mbGFncyh1bnNpZ25lZCBsb25nICpmbGFncywgdW5zaWduZWQgaW50IHJlZnMpCiYjNDM7ewomIzQzOwlWTV9XQVJOX09OX09OQ0UocmVmcyAmZ3Q7IExSVV9SRUZTX01BWCk7CiYjNDM7CUJVSUxEX0JVR19PTihMUlVfUkVGU19NQVggIT0gKExSVV9SRUZTX01BU0sgJmd0OyZndDsgTFJVX1JFRlNfUEdPRkYpICYjNDM7IDEpOwomIzQzOwomIzQzOwkqZmxhZ3MgJmFtcDs9IH5MUlVfUkVGU19GTEFHUzsKJiM0MzsJaWYgKCFyZWZzKQomIzQzOwkJcmV0dXJuOwomIzQzOwkqZmxhZ3MgfD0gKEJJVChQR19yZWZlcmVuY2VkKSB8ICgocmVmcyAtIDFVTCkgJmx0OyZsdDsgTFJVX1JFRlNfUEdPRkYpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X3JlZnMoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKJiM0Mzt7CiYjNDM7CXJldHVybiBscnVfcmVmc19mcm9tX2ZsYWdzKFJFQURfT05DRSgqY29uc3RfZm9saW9fZmxhZ3MoZm9saW8sIDApKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19zZXRfbHJ1X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IHJlZnMpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFncyA9IFJFQURfT05DRShmb2xpby0mZ3Q7ZmxhZ3MuZik7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7CiAKLQlyZXR1cm4gKChmbGFncyAmYW1wOyBMUlVfR0VOX01BU0spICZndDsmZ3Q7IExSVV9HRU5fUEdPRkYpIC0gMTsKJiM0MzsJZG8gewomIzQzOwkJbmV3X2ZsYWdzID0gb2xkX2ZsYWdzOwomIzQzOwkJbHJ1X3JlZnNfc2V0X2ZsYWdzKCZhbXA7bmV3X2ZsYWdzLCByZWZzKTsKJiM0MzsJfSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgJmFtcDtvbGRfZmxhZ3MsIG5ld19mbGFncykpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfZ2VuKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7ewomIzQzOwlyZXR1cm4gbHJ1X2dlbl9mcm9tX2ZsYWdzKFJFQURfT05DRSgqY29uc3RfZm9saW9fZmxhZ3MoZm9saW8sIDApKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2lzX2FjdGl2ZShjb25zdCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBnZW4pCkBAIC0yNzAsNyAmIzQzOzMzNiw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2FkZF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShzZXEpOwogCWZsYWdzID0gKGdlbiAmIzQzOyAxVUwpICZsdDsmbHQ7IExSVV9HRU5fUEdPRkY7CiAJLyogc2VlIHRoZSBjb21tZW50IG9uIE1JTl9OUl9HRU5TIGFib3V0IFBHX2FjdGl2ZSAqLwotCXNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX0dFTl9NQVNLIHwgQklUKFBHX2FjdGl2ZSksIGZsYWdzKTsKJiM0MzsJc2V0X21hc2tfYml0cyhmb2xpb19mbGFncyhmb2xpbywgMCksIExSVV9HRU5fTUFTSyB8IEJJVChQR19hY3RpdmUpLCBmbGFncyk7CiAKIAlscnVfZ2VuX3VwZGF0ZV9zaXplKGxydXZlYywgZm9saW8sIC0xLCBnZW4pOwogCS8qIGZvciBmb2xpb19yb3RhdGVfcmVjbGFpbWFibGUoKSAqLwpAQCAtMjk1LDcgJiM0MzszNjEsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9kZWxfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCiAJLyogZm9yIGZvbGlvX21pZ3JhdGVfZmxhZ3MoKSAqLwogCWZsYWdzID0gIXJlY2xhaW1pbmcgJmFtcDsmYW1wOyBscnVfZ2VuX2lzX2FjdGl2ZShscnV2ZWMsIGdlbikgPyBCSVQoUEdfYWN0aXZlKSA6IDA7Ci0JZmxhZ3MgPSBzZXRfbWFza19iaXRzKCZhbXA7Zm9saW8tJmd0O2ZsYWdzLmYsIExSVV9HRU5fTUFTSywgZmxhZ3MpOwomIzQzOwlmbGFncyA9IHNldF9tYXNrX2JpdHMoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBMUlVfR0VOX01BU0ssIGZsYWdzKTsKIAlnZW4gPSAoKGZsYWdzICZhbXA7IExSVV9HRU5fTUFTSykgJmd0OyZndDsgTFJVX0dFTl9QR09GRikgLSAxOwogCiAJbHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCBnZW4sIC0xKTsKQEAgLTMwNCwxMSAmIzQzOzM3MCwxOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9kZWxfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCXJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fbWlncmF0ZV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZCkKJiM0MzsvKioKJiM0MzsgKiBmb2xpb19taWdyYXRlX2xydV9yZWZzIC0gY29weSB0aGUgcmVmZXJlbmNlIHN0YXRlIHRvIGEgbmV3IGZvbGlvCiYjNDM7ICogQG5ldzogdGhlIGRlc3RpbmF0aW9uIGZvbGlvCiYjNDM7ICogQG9sZDogdGhlIHNvdXJjZSBmb2xpbwomIzQzOyAqCiYjNDM7ICogVHJhbnNmZXIgdGhlIHJlZmVyZW5jZSBzdGF0ZSB0byBAbmV3IGR1cmluZyBtaWdyYXRpb246IHRoZSBNR0xSVQomIzQzOyAqIHJlZnMgY291bnQsIGluY2x1ZGluZyBQR19yZWZlcmVuY2VkLCBvciBqdXN0IFBHX3JlZmVyZW5jZWQgZm9yIHRoZQomIzQzOyAqIGFjdGl2ZS9pbmFjdGl2ZSBMUlUuCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKQogewotCXVuc2lnbmVkIGxvbmcgcmVmcyA9IFJFQURfT05DRShvbGQtJmd0O2ZsYWdzLmYpICZhbXA7IExSVV9SRUZTX01BU0s7Ci0KLQlzZXRfbWFza19iaXRzKCZhbXA7bmV3LSZndDtmbGFncy5mLCBMUlVfUkVGU19NQVNLLCByZWZzKTsKJiM0MzsJQlVJTERfQlVHX09OKExSVV9SRUZTX01BU0sgJmFtcDsgQklUKFBHX3JlZmVyZW5jZWQpKTsKJiM0MzsJZm9saW9fc2V0X2xydV9yZWZzKG5ldywgZm9saW9fbHJ1X3JlZnMob2xkKSk7CiB9CiAjZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi8KIApAQCAtMzM3LDkgJiM0Mzs0MTEsMTAgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZGVsX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywKIAlyZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19taWdyYXRlX3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19taWdyYXRlX2xydV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZCkKIHsKLQomIzQzOwlpZiAoZm9saW9fdGVzdF9yZWZlcmVuY2VkKG9sZCkpCiYjNDM7CQlmb2xpb19zZXRfcmVmZXJlbmNlZChuZXcpOwogfQogI2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oCmluZGV4IDk0ZjljM2ZmNTQxNjAuLjliMjdjZjUzYmRiYzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW16b25lLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaApAQCAtNDkyLDExICYjNDM7NDkyLDE0IEBAIGVudW0gbHJ1dmVjX2ZsYWdzIHsKICAqIGZvbGlvLSZndDtmbGFncywgbWFza2VkIGJ5IExSVV9SRUZTX01BU0suCiAgKi8KICNkZWZpbmUgTUFYX05SX1RJRVJTCQk0VQomIzQzOyNkZWZpbmUgTFJVX1RJRVJfTUlOCQkwVQomIzQzOyNkZWZpbmUgTFJVX1RJRVJfTUFYCQkoTUFYX05SX1RJRVJTIC0gMSkKIAogI2lmbmRlZiBfX0dFTkVSQVRJTkdfQk9VTkRTX0gKIAogI2RlZmluZSBMUlVfR0VOX01BU0sJCSgoQklUKExSVV9HRU5fV0lEVEgpIC0gMSkgJmx0OyZsdDsgTFJVX0dFTl9QR09GRikKICNkZWZpbmUgTFJVX1JFRlNfTUFTSwkJKChCSVQoTFJVX1JFRlNfV0lEVEgpIC0gMSkgJmx0OyZsdDsgTFJVX1JFRlNfUEdPRkYpCiYjNDM7I2RlZmluZSBMUlVfUkVGU19NQVgJCUJJVChMUlVfUkVGU19XSURUSCkKIAogLyoKICAqIEZvciBmb2xpb3MgYWNjZXNzZWQgbXVsdGlwbGUgdGltZXMgdGhyb3VnaCBmaWxlIGRlc2NyaXB0b3JzLApkaWZmIC0tZ2l0IGEvbW0vZm9saW8uYyBiL21tL2ZvbGlvLmMKaW5kZXggYzAyZGNlYTljMDNjMi4uYTkzMjA1OTA1N2FjMSAxMDA2NDQKLS0tIGEvbW0vZm9saW8uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9mb2xpby5jCkBAIC0zNTMsMjYgJiM0MzszNTMsMjggQEAgc3RhdGljIHZvaWQgX19scnVfY2FjaGVfYWN0aXZhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbykKIAogc3RhdGljIHZvaWQgbHJ1X2dlbl9pbmNfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewotCXVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tJmd0O2ZsYWdzLmYpOwomIzQzOwl1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKCpmb2xpb19mbGFncyhmb2xpbywgMCkpOwomIzQzOwlpbnQgcmVmczsKIAogCWlmIChmb2xpb190ZXN0X3VuZXZpY3RhYmxlKGZvbGlvKSkKIAkJcmV0dXJuOwogCiAJLyogc2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTICovCi0JaWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pKSB7Ci0JCXNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgQklUKFBHX3JlZmVyZW5jZWQpKTsKJiM0MzsJaWYgKCFmb2xpb19scnVfcmVmcyhmb2xpbykpIHsKJiM0MzsJCWZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMSk7CiAJCXJldHVybjsKIAl9CiAKIAlkbyB7Ci0JCWlmICgob2xkX2ZsYWdzICZhbXA7IExSVV9SRUZTX01BU0spID09IExSVV9SRUZTX01BU0spIHsKJiM0MzsJCW5ld19mbGFncyA9IG9sZF9mbGFnczsKJiM0MzsJCXJlZnMgPSBscnVfcmVmc19mcm9tX2ZsYWdzKG9sZF9mbGFncyk7CiYjNDM7CQlpZiAocmVmcyA9PSBMUlVfUkVGU19NQVgpIHsKIAkJCWlmICghZm9saW9fdGVzdF93b3JraW5nc2V0KGZvbGlvKSkKIAkJCQlmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7CiAJCQlyZXR1cm47CiAJCX0KLQotCQluZXdfZmxhZ3MgPSBvbGRfZmxhZ3MgJiM0MzsgQklUKExSVV9SRUZTX1BHT0ZGKTsKLQl9IHdoaWxlICghdHJ5X2NtcHhjaGcoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgJmFtcDtvbGRfZmxhZ3MsIG5ld19mbGFncykpOwomIzQzOwkJbHJ1X3JlZnNfc2V0X2ZsYWdzKCZhbXA7bmV3X2ZsYWdzLCByZWZzICYjNDM7IDEpOwomIzQzOwl9IHdoaWxlICghdHJ5X2NtcHhjaGcoZm9saW9fZmxhZ3MoZm9saW8sIDApLCAmYW1wO29sZF9mbGFncywgbmV3X2ZsYWdzKSk7CiB9CiAKIHN0YXRpYyBib29sIGxydV9nZW5fY2xlYXJfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQpAQCAtMzg0LDcgJiM0MzszODYsOCBAQCBzdGF0aWMgYm9vbCBscnVfZ2VuX2NsZWFyX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbykKIAlpZiAoZ2VuICZsdDsgMCkKIAkJcmV0dXJuIHRydWU7CiAKLQlzZXRfbWFza19iaXRzKCZhbXA7Zm9saW8tJmd0O2ZsYWdzLmYsIExSVV9SRUZTX0ZMQUdTIHwgQklUKFBHX3dvcmtpbmdzZXQpLCAwKTsKJiM0MzsJZm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTsKJiM0MzsJZm9saW9fY2xlYXJfd29ya2luZ3NldChmb2xpbyk7CiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJc2VxID0gUkVBRF9PTkNFKGZvbGlvX2xydXZlYyhmb2xpbyktJmd0O2xydWdlbi5taW5fc2VxW3R5cGVdKTsKZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuYwppbmRleCAxMWI4NWY0YjY4MjhiLi5hNzU3MmRlZDU2YzlkIDEwMDY0NAotLS0gYS9tbS9tZW1jb250cm9sLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC5jCkBAIC0xNTI5LDI4ICYjNDM7MTUyOSwxMiBAQCB2b2lkIG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBscnVfbGlzdCBscnUsCiAJCQkJaW50IHppZCwgbG9uZyBucl9wYWdlcykKIHsKIAlzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXo7Ci0JdW5zaWduZWQgbG9uZyAqbHJ1X3NpemU7Ci0JbG9uZyBzaXplOwogCiAJaWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSkKIAkJcmV0dXJuOwogCiAJbXogPSBjb250YWluZXJfb2YobHJ1dmVjLCBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSwgbHJ1dmVjKTsKLQlscnVfc2l6ZSA9ICZhbXA7bXotJmd0O2xydV96b25lX3NpemVbemlkXVtscnVdOwotCi0JaWYgKG5yX3BhZ2VzICZsdDsgMCkKLQkJKmxydV9zaXplICYjNDM7PSBucl9wYWdlczsKLQotCXNpemUgPSAqbHJ1X3NpemU7Ci0JaWYgKFdBUk5fT05DRShzaXplICZsdDsgMCwKLQkJJiMzNDslcyglcCwgJWQsICVsZCk6IGxydV9zaXplICVsZFxuJiMzNDssCi0JCV9fZnVuY19fLCBscnV2ZWMsIGxydSwgbnJfcGFnZXMsIHNpemUpKSB7Ci0JCVZNX0JVR19PTigxKTsKLQkJKmxydV9zaXplID0gMDsKLQl9Ci0KLQlpZiAobnJfcGFnZXMgJmd0OyAwKQotCQkqbHJ1X3NpemUgJiM0Mzs9IG5yX3BhZ2VzOwomIzQzOwlhdG9taWNfbG9uZ19hZGQobnJfcGFnZXMsICZhbXA7bXotJmd0O2xydV96b25lX3NpemVbemlkXVtscnVdKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9tbS9taWdyYXRlLmMgYi9tbS9taWdyYXRlLmMKaW5kZXggMTViNDU4MzJiY2ZhNy4uYTM2OWQwYzk1YzM4NiAxMDA2NDQKLS0tIGEvbW0vbWlncmF0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21pZ3JhdGUuYwpAQCAtNzc2LDggJiM0Mzs3NzYsOSBAQCB2b2lkIGZvbGlvX21pZ3JhdGVfZmxhZ3Moc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpmb2xpbykKIHsKIAlpbnQgY3B1cGlkOwogCi0JaWYgKGZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykpCi0JCWZvbGlvX3NldF9yZWZlcmVuY2VkKG5ld2ZvbGlvKTsKJiM0MzsJLyogQ29weSB0aGUgcmVmZXJlbmNlIHN0YXRlLCBpbmNsdWRpbmcgUEdfcmVmZXJlbmNlZCAqLwomIzQzOwlmb2xpb19taWdyYXRlX2xydV9yZWZzKG5ld2ZvbGlvLCBmb2xpbyk7CiYjNDM7CiAJaWYgKGZvbGlvX3Rlc3RfdXB0b2RhdGUoZm9saW8pKQogCQlmb2xpb19tYXJrX3VwdG9kYXRlKG5ld2ZvbGlvKTsKIAlpZiAoZm9saW9fdGVzdF9jbGVhcl9hY3RpdmUoZm9saW8pKSB7CkBAIC04MDcsNyAmIzQzOzgwOCw2IEBAIHZvaWQgZm9saW9fbWlncmF0ZV9mbGFncyhzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCWlmIChmb2xpb190ZXN0X2lkbGUoZm9saW8pKQogCQlmb2xpb19zZXRfaWRsZShuZXdmb2xpbyk7CiAKLQlmb2xpb19taWdyYXRlX3JlZnMobmV3Zm9saW8sIGZvbGlvKTsKIAkvKgogCSAqIENvcHkgTlVNQSBpbmZvcm1hdGlvbiB0byB0aGUgbmV3IHBhZ2UsIHRvIHByZXZlbnQgb3Zlci1lYWdlcgogCSAqIGZ1dHVyZSBtaWdyYXRpb25zIG9mIHRoaXMgc2FtZSBwYWdlLgpkaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uYwppbmRleCA3M2E4MWI0YTNlMTY0Li42ZmRhOTQ4YWVjZjJjIDEwMDY0NAotLS0gYS9tbS92bXNjYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uYwpAQCAtODQzLDE5ICYjNDM7ODQzLDIyIEBAIHN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncykKIAlpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykgJmFtcDsmYW1wOyAhZm9saW9fdGVzdF93b3JraW5nc2V0KGZvbGlvKSkgewogCQkvKiBBY3RpdmF0ZSBmaWxlLWJhY2tlZCBleGVjdXRhYmxlIGZvbGlvcyBhZnRlciBmaXJzdCB1c2FnZS4gKi8KIAkJaWYgKGlzX2V4ZWNfZmlsZV9mb2xpbyhmb2xpbywgdm1hX2ZsYWdzKSkgewotCQkJc2V0X21hc2tfYml0cygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX3dvcmtpbmdzZXQpKTsKJiM0MzsJCQlmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7CiYjNDM7CQkJZm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTsKIAkJCXJldHVybiB0cnVlOwogCQl9CiAKLQkJc2V0X21hc2tfYml0cygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCBMUlVfUkVGU19NQVNLLCBCSVQoUEdfcmVmZXJlbmNlZCkpOwomIzQzOwkJZm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAxKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KIAogCS8qIFByb21vdGUgb24gc2Vjb25kIGFjY2VzcyAqLwotCWlmIChmb2xpb19scnVfcmVmcyhmb2xpbykgJmd0OyAxKQotCQlzZXRfbWFza19iaXRzKCZhbXA7Zm9saW8tJmd0O2ZsYWdzLmYsIExSVV9SRUZTX0ZMQUdTLCBCSVQoUEdfd29ya2luZ3NldCkpOwotCWVsc2UKJiM0MzsJaWYgKGZvbGlvX2xydV9yZWZzKGZvbGlvKSAmZ3Q7IDEpIHsKJiM0MzsJCWZvbGlvX3NldF93b3JraW5nc2V0KGZvbGlvKTsKJiM0MzsJCWZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7CiYjNDM7CX0gZWxzZSB7CiAJCWZvbGlvX21hcmtfYWNjZXNzZWQoZm9saW8pOwomIzQzOwl9CiAJcmV0dXJuIHRydWU7CiB9CiAjZWxzZQpAQCAtMzE5NSw4ICYjNDM7MzE5OCw4IEBAIHN0cnVjdCBjdHJsX3BvcyB7CiAJaW50IGdhaW47CiB9OwogCi1zdGF0aWMgdm9pZCByZWFkX2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCB0aWVyLCBpbnQgZ2FpbiwKLQkJCSAgc3RydWN0IGN0cmxfcG9zICpwb3MpCiYjNDM7c3RhdGljIHZvaWQgcmVhZF9jdHJsX3BvcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgdGllcl9taW4sCiYjNDM7CQkJICBpbnQgdGllcl9tYXgsIGludCBnYWluLCBzdHJ1Y3QgY3RybF9wb3MgKnBvcykKIHsKIAlpbnQgaTsKIAlzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gJmFtcDtscnV2ZWMtJmd0O2xydWdlbjsKQEAgLTMyMDUsNyAmIzQzOzMyMDgsNyBAQCBzdGF0aWMgdm9pZCByZWFkX2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCB0aWVyLCBpbnQgZ2FpbiwKIAlwb3MtJmd0O2dhaW4gPSBnYWluOwogCXBvcy0mZ3Q7cmVmYXVsdGVkID0gcG9zLSZndDt0b3RhbCA9IDA7CiAKLQlmb3IgKGkgPSB0aWVyICUgTUFYX05SX1RJRVJTOyBpICZsdDs9IG1pbih0aWVyLCBNQVhfTlJfVElFUlMgLSAxKTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJZm9yIChpID0gdGllcl9taW47IGkgJmx0Oz0gdGllcl9tYXg7IGkmIzQzOyYjNDM7KSB7CiAJCXBvcy0mZ3Q7cmVmYXVsdGVkICYjNDM7PSBscnVnZW4tJmd0O2F2Z19yZWZhdWx0ZWRbdHlwZV1baV0gJiM0MzsKIAkJCQkgIGF0b21pY19sb25nX3JlYWQoJmFtcDtscnVnZW4tJmd0O3JlZmF1bHRlZFtoaXN0XVt0eXBlXVtpXSk7CiAJCXBvcy0mZ3Q7dG90YWwgJiM0Mzs9IGxydWdlbi0mZ3Q7YXZnX3RvdGFsW3R5cGVdW2ldICYjNDM7CkBAIC0zMjY2LDExICYjNDM7MzI2OSwxMSBAQCBzdGF0aWMgYm9vbCBwb3NpdGl2ZV9jdHJsX2VycihzdHJ1Y3QgY3RybF9wb3MgKnNwLCBzdHJ1Y3QgY3RybF9wb3MgKnB2KQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyogcHJvbW90ZSBwYWdlcyBhY2Nlc3NlZCB0aHJvdWdoIHBhZ2UgdGFibGVzICovCi1zdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGdlbiwgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncykKJiM0MztzdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5ld19nZW4sIGludCAqaXNfZmlsZSwKJiM0MzsJCQkgICAgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncykKIHsKLQl1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLSZndDtmbGFncy5mKTsKLQotCVZNX1dBUk5fT05fT05DRShnZW4gJmd0Oz0gTUFYX05SX0dFTlMpOwomIzQzOwl1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKCpmb2xpb19mbGFncyhmb2xpbywgMCkpOwomIzQzOwlpbnQgb2xkX2dlbjsKIAogCS8qCiAJICogU2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTLCBhbmQgYWN0aXZhdGUgZmlsZS1iYWNrZWQKQEAgLTMyNzksMjAgJiM0MzszMjgyLDI1IEBAIHN0YXRpYyBpbnQgZm9saW9fdXBkYXRlX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgZ2VuLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hCiAJICovCiAJaWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pICZhbXA7JmFtcDsgIWZvbGlvX3Rlc3Rfd29ya2luZ3NldChmb2xpbykgJmFtcDsmYW1wOwogCSAgICAhaXNfZXhlY19maWxlX2ZvbGlvKGZvbGlvLCB2bWFfZmxhZ3MpKSB7Ci0JCXNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgQklUKFBHX3JlZmVyZW5jZWQpKTsKJiM0MzsJCWZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMSk7CiAJCXJldHVybiAtMTsKIAl9CiAKIAlkbyB7CiYjNDM7CQlvbGRfZ2VuID0gbHJ1X2dlbl9mcm9tX2ZsYWdzKG9sZF9mbGFncyk7CiYjNDM7CQluZXdfZmxhZ3MgPSBvbGRfZmxhZ3M7CiYjNDM7CiAJCS8qIGxydV9nZW5fZGVsX2ZvbGlvKCkgaGFzIGlzb2xhdGVkIHRoaXMgcGFnZT8gKi8KLQkJaWYgKCEob2xkX2ZsYWdzICZhbXA7IExSVV9HRU5fTUFTSykpCi0JCQlyZXR1cm4gLTE7CiYjNDM7CQlpZiAob2xkX2dlbiAmbHQ7IDApCiYjNDM7CQkJYnJlYWs7CiAKLQkJbmV3X2ZsYWdzID0gb2xkX2ZsYWdzICZhbXA7IH4oTFJVX0dFTl9NQVNLIHwgTFJVX1JFRlNfRkxBR1MpOwotCQluZXdfZmxhZ3MgfD0gKChnZW4gJiM0MzsgMVVMKSAmbHQ7Jmx0OyBMUlVfR0VOX1BHT0ZGKSB8IEJJVChQR193b3JraW5nc2V0KTsKLQl9IHdoaWxlICghdHJ5X2NtcHhjaGcoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgJmFtcDtvbGRfZmxhZ3MsIG5ld19mbGFncykpOwomIzQzOwkJbHJ1X2dlbl9zZXRfZmxhZ3MoJmFtcDtuZXdfZmxhZ3MsIG5ld19nZW4pOwomIzQzOwkJbHJ1X3JlZnNfc2V0X2ZsYWdzKCZhbXA7bmV3X2ZsYWdzLCAwKTsKJiM0MzsJCW5ld19mbGFncyB8PSBCSVQoUEdfd29ya2luZ3NldCk7CiYjNDM7CX0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksICZhbXA7b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTsKIAotCXJldHVybiAoKG9sZF9mbGFncyAmYW1wOyBMUlVfR0VOX01BU0spICZndDsmZ3Q7IExSVV9HRU5fUEdPRkYpIC0gMTsKJiM0MzsJKmlzX2ZpbGUgPSBmb2xpb19mbGFnc19pc19maWxlX2xydSgmYW1wO29sZF9mbGFncyk7CiYjNDM7CXJldHVybiBvbGRfZ2VuOwogfQogCiAvKiBwcm90ZWN0IHBhZ2VzIGFjY2Vzc2VkIG11bHRpcGxlIHRpbWVzIHRocm91Z2ggZmlsZSBkZXNjcmlwdG9ycyAqLwpAQCAtMzMwMSwyMSAmIzQzOzMzMDksMjAgQEAgc3RhdGljIGludCBmb2xpb19pbmNfZ2VuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbykKIAlpbnQgdHlwZSA9IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTsKIAlzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gJmFtcDtscnV2ZWMtJmd0O2xydWdlbjsKIAlpbnQgbmV3X2dlbiwgb2xkX2dlbiA9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLSZndDttaW5fc2VxW3R5cGVdKTsKLQl1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLSZndDtmbGFncy5mKTsKLQotCVZNX1dBUk5fT05fT05DRV9GT0xJTyghKG9sZF9mbGFncyAmYW1wOyBMUlVfR0VOX01BU0spLCBmb2xpbyk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7CiAKIAlkbyB7Ci0JCW5ld19nZW4gPSAoKG9sZF9mbGFncyAmYW1wOyBMUlVfR0VOX01BU0spICZndDsmZ3Q7IExSVV9HRU5fUEdPRkYpIC0gMTsKJiM0MzsJCW5ld19nZW4gPSBscnVfZ2VuX2Zyb21fZmxhZ3Mob2xkX2ZsYWdzKTsKJiM0MzsKIAkJLyogZm9saW9fdXBkYXRlX2dlbigpIGhhcyBwcm9tb3RlZCB0aGlzIHBhZ2U/ICovCiAJCWlmIChuZXdfZ2VuICZndDs9IDAgJmFtcDsmYW1wOyBuZXdfZ2VuICE9IG9sZF9nZW4pCiAJCQlyZXR1cm4gbmV3X2dlbjsKIAomIzQzOwkJbmV3X2ZsYWdzID0gb2xkX2ZsYWdzOwogCQluZXdfZ2VuID0gKG9sZF9nZW4gJiM0MzsgMSkgJSBNQVhfTlJfR0VOUzsKLQotCQluZXdfZmxhZ3MgPSBvbGRfZmxhZ3MgJmFtcDsgfihMUlVfR0VOX01BU0sgfCBMUlVfUkVGU19GTEFHUyk7Ci0JCW5ld19mbGFncyB8PSAobmV3X2dlbiAmIzQzOyAxVUwpICZsdDsmbHQ7IExSVV9HRU5fUEdPRkY7Ci0JfSB3aGlsZSAoIXRyeV9jbXB4Y2hnKCZhbXA7Zm9saW8tJmd0O2ZsYWdzLmYsICZhbXA7b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTsKJiM0MzsJCWxydV9nZW5fc2V0X2ZsYWdzKCZhbXA7bmV3X2ZsYWdzLCBuZXdfZ2VuKTsKJiM0MzsJCWxydV9yZWZzX3NldF9mbGFncygmYW1wO25ld19mbGFncywgMCk7CiYjNDM7CX0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksICZhbXA7b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTsKIAogCWxydV9nZW5fdXBkYXRlX3NpemUobHJ1dmVjLCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbik7CiAKQEAgLTMzMjMsOSAmIzQzOzMzMzAsOCBAQCBzdGF0aWMgaW50IGZvbGlvX2luY19nZW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogfQogCiBzdGF0aWMgdm9pZCB1cGRhdGVfYmF0Y2hfc2l6ZShzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAotCQkJICAgICAgaW50IG9sZF9nZW4sIGludCBuZXdfZ2VuKQomIzQzOwkJCSAgICAgIGludCBvbGRfZ2VuLCBpbnQgbmV3X2dlbiwgaW50IHR5cGUpCiB7Ci0JaW50IHR5cGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7CiAJaW50IHpvbmUgPSBmb2xpb196b25lbnVtKGZvbGlvKTsKIAlpbnQgZGVsdGEgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7CiAKQEAgLTM1MTIsMjIgJiM0MzszNTE4LDI0IEBAIHN0YXRpYyBib29sIHN1aXRhYmxlX3RvX3NjYW4oaW50IHRvdGFsLCBpbnQgeW91bmcpCiB9CiAKIHN0YXRpYyB2b2lkIHdhbGtfdXBkYXRlX2ZvbGlvKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAotCQlzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbmV3X2dlbiwgYm9vbCBkaXJ0eSkKJiM0MzsJCXN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBkaXJ0eSkKIHsKLQlpbnQgb2xkX2dlbjsKJiM0MzsJaW50IG5ld19nZW4sIG9sZF9nZW4sIGZpbGU7CiAKIAlpZiAoIWZvbGlvKQogCQlyZXR1cm47CiAKJiM0MzsJbmV3X2dlbiA9IGxydV9nZW5fZnJvbV9zZXEoUkVBRF9PTkNFKGxydXZlYy0mZ3Q7bHJ1Z2VuLm1heF9zZXEpKTsKJiM0MzsKIAlpZiAoZGlydHkgJmFtcDsmYW1wOyAhZm9saW9fdGVzdF9kaXJ0eShmb2xpbykgJmFtcDsmYW1wOwogCSAgICAhKGZvbGlvX3Rlc3RfYW5vbihmb2xpbykgJmFtcDsmYW1wOyBmb2xpb190ZXN0X3N3YXBiYWNrZWQoZm9saW8pICZhbXA7JmFtcDsKIAkgICAgICAhZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKSkKIAkJZm9saW9fbWFya19kaXJ0eShmb2xpbyk7CiAKIAlpZiAod2FsaykgewotCQlvbGRfZ2VuID0gZm9saW9fdXBkYXRlX2dlbihmb2xpbywgbmV3X2dlbiwgJmFtcDt2bWEtJmd0O2ZsYWdzKTsKJiM0MzsJCW9sZF9nZW4gPSBmb2xpb191cGRhdGVfZ2VuKGZvbGlvLCBuZXdfZ2VuLCAmYW1wO2ZpbGUsICZhbXA7dm1hLSZndDtmbGFncyk7CiAJCWlmIChvbGRfZ2VuICZndDs9IDAgJmFtcDsmYW1wOyBvbGRfZ2VuICE9IG5ld19nZW4pCi0JCQl1cGRhdGVfYmF0Y2hfc2l6ZSh3YWxrLCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbik7CiYjNDM7CQkJdXBkYXRlX2JhdGNoX3NpemUod2FsaywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4sIGZpbGUpOwogCX0gZWxzZSBpZiAobHJ1X2dlbl9zZXRfcmVmcyhmb2xpbywgJmFtcDt2bWEtJmd0O2ZsYWdzKSkgewogCQlvbGRfZ2VuID0gZm9saW9fbHJ1X2dlbihmb2xpbyk7CiAJCWlmIChvbGRfZ2VuICZndDs9IDAgJmFtcDsmYW1wOyBvbGRfZ2VuICE9IG5ld19nZW4pCkBAIC0zNTQ5LDggJiM0MzszNTU3LDYgQEAgc3RhdGljIGJvb2wgd2Fsa19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCiAJc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGFyZ3MtJmd0O3ByaXZhdGU7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKHdhbGstJmd0O2xydXZlYyk7CiAJc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdCh3YWxrLSZndDtscnV2ZWMpOwotCURFRklORV9NQVhfU0VRKHdhbGstJmd0O2xydXZlYyk7Ci0JaW50IGdlbiA9IGxydV9nZW5fZnJvbV9zZXEobWF4X3NlcSk7CiAJdW5zaWduZWQgaW50IG5yOwogCXBtZF90IHBtZHZhbDsKIApAQCAtMzYwMSw3ICYjNDM7MzYwNyw3IEBAIHN0YXRpYyBib29sIHdhbGtfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLAogCQkJY29udGludWU7CiAKIAkJaWYgKGxhc3QgIT0gZm9saW8pIHsKLQkJCXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtJmd0O3ZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7CiYjNDM7CQkJd2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy0mZ3Q7dm1hLCB3YWxrLSZndDtscnV2ZWMsIGxhc3QsIGRpcnR5KTsKIAogCQkJbGFzdCA9IGZvbGlvOwogCQkJZGlydHkgPSBmYWxzZTsKQEAgLTM2MTQsNyAmIzQzOzM2MjAsNyBAQCBzdGF0aWMgYm9vbCB3YWxrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwKIAkJd2Fsay0mZ3Q7bW1fc3RhdHNbTU1fTEVBRl9ZT1VOR10gJiM0Mzs9IG5yOwogCX0KIAotCXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtJmd0O3ZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7CiYjNDM7CXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtJmd0O3ZtYSwgd2Fsay0mZ3Q7bHJ1dmVjLCBsYXN0LCBkaXJ0eSk7CiAJbGFzdCA9IE5VTEw7CiAKIAlpZiAoaSAmbHQ7IFBUUlNfUEVSX1BURSAmYW1wOyZhbXA7IGdldF9uZXh0X3ZtYShQTURfTUFTSywgUEFHRV9TSVpFLCBhcmdzLCAmYW1wO3N0YXJ0LCAmYW1wO2VuZCkpCkBAIC0zNjM3LDggJiM0MzszNjQzLDYgQEAgc3RhdGljIHZvaWQgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IHZtX2FyZWEKIAlzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrID0gYXJncy0mZ3Q7cHJpdmF0ZTsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cod2Fsay0mZ3Q7bHJ1dmVjKTsKIAlzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KHdhbGstJmd0O2xydXZlYyk7Ci0JREVGSU5FX01BWF9TRVEod2Fsay0mZ3Q7bHJ1dmVjKTsKLQlpbnQgZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShtYXhfc2VxKTsKIAogCVZNX1dBUk5fT05fT05DRShwdWRfbGVhZigqcHVkKSk7CiAKQEAgLTM2OTIsNyAmIzQzOzM2OTYsNyBAQCBzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYQogCQkJZ290byBuZXh0OwogCiAJCWlmIChsYXN0ICE9IGZvbGlvKSB7Ci0JCQl3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpOwomIzQzOwkJCXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgd2Fsay0mZ3Q7bHJ1dmVjLCBsYXN0LCBkaXJ0eSk7CiAKIAkJCWxhc3QgPSBmb2xpbzsKIAkJCWRpcnR5ID0gZmFsc2U7CkBAIC0zNzA2LDcgJiM0MzszNzEwLDcgQEAgc3RhdGljIHZvaWQgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IHZtX2FyZWEKIAkJaSA9IGkgJmd0OyBNSU5fTFJVX0JBVENIID8gMCA6IGZpbmRfbmV4dF9iaXQoYml0bWFwLCBNSU5fTFJVX0JBVENILCBpKSAmIzQzOyAxOwogCX0gd2hpbGUgKGkgJmx0Oz0gTUlOX0xSVV9CQVRDSCk7CiAKLQl3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpOwomIzQzOwl3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIHdhbGstJmd0O2xydXZlYywgbGFzdCwgZGlydHkpOwogCiAJbGF6eV9tbXVfbW9kZV9kaXNhYmxlKCk7CiAJc3Bpbl91bmxvY2socHRsKTsKQEAgLTQyNzAsOCAmIzQzOzQyNzQsNiBAQCBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpCiAJc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGZvbGlvX3BnZGF0KGZvbGlvKTsKIAlzdHJ1Y3QgbHJ1dmVjICpscnV2ZWM7CiAJc3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlOwotCXVuc2lnbmVkIGxvbmcgbWF4X3NlcTsKLQlpbnQgZ2VuOwogCiAJbG9ja2RlcF9hc3NlcnRfaGVsZChwdm13LSZndDtwdGwpOwogCVZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb190ZXN0X2xydShmb2xpbyksIGZvbGlvKTsKQEAgLTQzMDgsOCAmIzQzOzQzMTAsNiBAQCBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpCiAKIAltZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fZm9saW8oZm9saW8pOwogCWxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKG1lbWNnLCBwZ2RhdCk7Ci0JbWF4X3NlcSA9IFJFQURfT05DRSgobHJ1dmVjKS0mZ3Q7bHJ1Z2VuLm1heF9zZXEpOwotCWdlbiA9IGxydV9nZW5fZnJvbV9zZXEobWF4X3NlcSk7CiAJbW1fc3RhdGUgPSBnZXRfbW1fc3RhdGUobHJ1dmVjKTsKIAogCWxhenlfbW11X21vZGVfZW5hYmxlKCk7CkBAIC00MzQxLDcgJiM0Mzs0MzQxLDcgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKQogCQkJY29udGludWU7CiAKIAkJaWYgKGxhc3QgIT0gZm9saW8pIHsKLQkJCXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7CiYjNDM7CQkJd2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBscnV2ZWMsIGxhc3QsIGRpcnR5KTsKIAogCQkJbGFzdCA9IGZvbGlvOwogCQkJZGlydHkgPSBmYWxzZTsKQEAgLTQzNTMsMTMgJiM0Mzs0MzUzLDE0IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucikKIAkJeW91bmcgJiM0Mzs9IG5yOwogCX0KIAotCXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7CiYjNDM7CXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7CiAKIAlsYXp5X21tdV9tb2RlX2Rpc2FibGUoKTsKIAogCS8qIGZlZWRiYWNrIGZyb20gcm1hcCB3YWxrZXJzIHRvIHBhZ2UgdGFibGUgd2Fsa2VycyAqLwogCWlmIChtbV9zdGF0ZSAmYW1wOyZhbXA7IHN1aXRhYmxlX3RvX3NjYW4oaSwgeW91bmcpKQotCQl1cGRhdGVfYmxvb21fZmlsdGVyKG1tX3N0YXRlLCBtYXhfc2VxLCBwdm13LSZndDtwbWQpOwomIzQzOwkJdXBkYXRlX2Jsb29tX2ZpbHRlcihtbV9zdGF0ZSwgUkVBRF9PTkNFKGxydXZlYy0mZ3Q7bHJ1Z2VuLm1heF9zZXEpLAomIzQzOwkJCQkgICAgcHZtdy0mZ3Q7cG1kKTsKIAogCW1lbV9jZ3JvdXBfcHV0KG1lbWNnKTsKIApAQCAtNDcxNiw3ICYjNDM7NDcxNyw3IEBAIHN0YXRpYyBib29sIGlzb2xhdGVfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc2NhCiAKIAkvKiBzZWUgdGhlIGNvbW1lbnQgb24gTFJVX1JFRlNfRkxBR1MgKi8KIAlpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykpCi0JCXNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgMCk7CiYjNDM7CQlmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApOwogCiAJc3VjY2VzcyA9IGxydV9nZW5fZGVsX2ZvbGlvKGxydXZlYywgZm9saW8sIHRydWUpOwogCVZNX1dBUk5fT05fT05DRV9GT0xJTyghc3VjY2VzcywgZm9saW8pOwpAQCAtNDgwOSw5ICYjNDM7NDgxMCw5IEBAIHN0YXRpYyBpbnQgZ2V0X3RpZXJfaWR4KHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUpCiAJICogVGhpcyB2YWx1ZSBpcyBjaG9zZW4gYmVjYXVzZSBhbnkgb3RoZXIgdGllciB3b3VsZCBoYXZlIGF0IGxlYXN0IHR3aWNlCiAJICogYXMgbWFueSByZWZhdWx0cyBhcyB0aGUgZmlyc3QgdGllci4KIAkgKi8KLQlyZWFkX2N0cmxfcG9zKGxydXZlYywgdHlwZSwgMCwgMiwgJmFtcDtzcCk7Ci0JZm9yICh0aWVyID0gMTsgdGllciAmbHQ7IE1BWF9OUl9USUVSUzsgdGllciYjNDM7JiM0MzspIHsKLQkJcmVhZF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIHRpZXIsIDMsICZhbXA7cHYpOwomIzQzOwlyZWFkX2N0cmxfcG9zKGxydXZlYywgdHlwZSwgTFJVX1RJRVJfTUlOLCBMUlVfVElFUl9NSU4sIDIsICZhbXA7c3ApOwomIzQzOwlmb3IgKHRpZXIgPSBMUlVfVElFUl9NSU4gJiM0MzsgMTsgdGllciAmbHQ7PSBMUlVfVElFUl9NQVg7IHRpZXImIzQzOyYjNDM7KSB7CiYjNDM7CQlyZWFkX2N0cmxfcG9zKGxydXZlYywgdHlwZSwgdGllciwgdGllciwgMywgJmFtcDtwdik7CiAJCWlmICghcG9zaXRpdmVfY3RybF9lcnIoJmFtcDtzcCwgJmFtcDtwdikpCiAJCQlicmVhazsKIAl9CkBAIC00ODMyLDggJiM0Mzs0ODMzLDEwIEBAIHN0YXRpYyBpbnQgZ2V0X3R5cGVfdG9fc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBzd2FwcGluZXNzKQogCSAqIENvbXBhcmUgdGhlIHN1bSBvZiBhbGwgdGllcnMgb2YgYW5vbiB3aXRoIHRoYXQgb2YgZmlsZSB0byBkZXRlcm1pbmUKIAkgKiB3aGljaCB0eXBlIHRvIHNjYW4uCiAJICovCi0JcmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fQU5PTiwgTUFYX05SX1RJRVJTLCBzd2FwcGluZXNzLCAmYW1wO3NwKTsKLQlyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9GSUxFLCBNQVhfTlJfVElFUlMsIE1BWF9TV0FQUElORVNTIC0gc3dhcHBpbmVzcywgJmFtcDtwdik7CiYjNDM7CXJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0FOT04sIExSVV9USUVSX01JTiwgTFJVX1RJRVJfTUFYLAomIzQzOwkJICAgICAgc3dhcHBpbmVzcywgJmFtcDtzcCk7CiYjNDM7CXJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0ZJTEUsIExSVV9USUVSX01JTiwgTFJVX1RJRVJfTUFYLAomIzQzOwkJICAgICAgTUFYX1NXQVBQSU5FU1MgLSBzd2FwcGluZXNzLCAmYW1wO3B2KTsKIAogCXJldHVybiBwb3NpdGl2ZV9jdHJsX2VycigmYW1wO3NwLCAmYW1wO3B2KTsKIH0KQEAgLTQ5MzIsOCAmIzQzOzQ5MzUsMTAgQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiAJCX0KIAogCQkvKiBkb24mIzM5O3QgYWRkIHJlamVjdGVkIGZvbGlvcyB0byB0aGUgb2xkZXN0IGdlbmVyYXRpb24gKi8KLQkJaWYgKGxydV9nZW5fZm9saW9fc2VxKGxydXZlYywgZm9saW8sIGZhbHNlKSA9PSBtaW5fc2VxW3R5cGVdKQotCQkJc2V0X21hc2tfYml0cygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX2FjdGl2ZSkpOwomIzQzOwkJaWYgKGxydV9nZW5fZm9saW9fc2VxKGxydXZlYywgZm9saW8sIGZhbHNlKSA9PSBtaW5fc2VxW3R5cGVdKSB7CiYjNDM7CQkJZm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTsKJiM0MzsJCQlmb2xpb19zZXRfYWN0aXZlKGZvbGlvKTsKJiM0MzsJCX0KIAl9CiAKIAltb3ZlX2ZvbGlvc190b19scnUoJmFtcDtsaXN0KTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE5OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNDA1CgkJCQkJCQlvdXRwdXQ6IDE5NQoJCQkJCQkJdGhvdWdodHM6IDExODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGF0Y2ggQW5hbHlzaXM6IE1lbW9yeSBDb250cm9sIGFuZCBMUlUgR2VuZXJhdGlvbiBSZWZhY3RvcioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIHByaW1hcmlseSBmb2N1c2VzIG9uIHJlZmFjdG9yaW5nIHRoZSBtZW1vcnkgY29udHJvbCBhbmQgTFJVIGdlbmVyYXRpb24gY29kZSB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbC4gSXQgc2VlbXMgbGlrZSBhIGNvcmUgaW50ZXJuYWwgY2hhbmdlLCBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIGBscnVfem9uZV9zaXplYCBhbmQgaXRzIGFzc29jaWF0ZWQgZm9saW8gZmxhZyBtYW5pcHVsYXRpb24uCgpNeSBpbW1lZGlhdGUgY29uY2VybnMgYXJlIGFsd2F5cyBjZW50ZXJlZCBvbiBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzOiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgaW5mb3JtYXRpb24gbGVha3MsIGFuZCBhbnkgY2hhbmdlcyB0aGF0IG1pZ2h0IGludHJvZHVjZSB1bmV4cGVjdGVkIGJlaGF2aW9yIGluIHVzZXItc3BhY2UgaW50ZXJhY3Rpb25zLiBMZXQmIzM5O3MgZGlnIGluLiBJIHNlZSB0aGF0IGBscnVfem9uZV9zaXplYCBpcyBjaGFuZ2luZyBmcm9tIGEgc2ltcGxlIGFycmF5IG9mIGB1bnNpZ25lZCBsb25nYCB0byBhbiBhcnJheSBvZiBgYXRvbWljX2xvbmdfdGAuIFRoaXMgaXMgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIHJlZmFjdG9yaW5nIGFuZCwgYnkgaXRzZWxmLCBzaG91bGRuJiMzOTt0IHBvc2UgYW55IGltbWVkaWF0ZSByaXNrcy4KCkkmIzM5O20gc2VlaW5nIGhlbHBlciBmdW5jdGlvbnMgaW50cm9kdWNlZCBmb3Igc2V0dGluZyBhbmQgZ2V0dGluZyBMUlUgZ2VuZXJhdGlvbiBhbmQgcmVmZXJlbmNlcyBmcm9tIGZvbGlvIGZsYWdzLCByZXBsYWNpbmcgZGlyZWN0IGJpdCBtYW5pcHVsYXRpb25zLiBHb29kLiBUaGlzIG9mdGVuIGxlYWRzIHRvIG1vcmUgcm9idXN0IGFuZCBsZXNzIGVycm9yLXByb25lIGNvZGUuIEkmIzM5O20gYWxzbyBub3RpY2luZyB0aGUgbW9kaWZpY2F0aW9ucyB0byBmdW5jdGlvbnMgbGlrZSBgZm9saW9fdXBkYXRlX2dlbmAsIGBmb2xpb19pbmNfZ2VuYCwgYW5kIG90aGVycy4gVGhlIGNoYW5nZXMgdG8gYHJlYWRfY3RybF9wb3NgIGxvb2sgcmVhc29uYWJsZS4gSSBhbSBnb2luZyB0byBzZWUgaWYgYW55IHVzZXItc3BhY2UgY2hhbmdlcyBhcmUgYmVpbmcgbWFkZS4KCkkmIzM5O3ZlIGNhcmVmdWxseSBleGFtaW5lZCB0aGUgY29kZSBmb3IgYW55IG5ldyBzdHJ1Y3R1cmVzIGJlaW5nIHNlbnQgdG8gdXNlciBzcGFjZSwgdGhlIHByZXNlbmNlIG9mIGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgbWlnaHQgZGVwZW5kIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCB0aGUgYWxsb2NhdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcywgYW5kIGFueSBib3VuZHMgY2hlY2tzIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJJiMzOTttIG5vdCBzZWVpbmcgYW55dGhpbmcgdGhhdCByYWlzZXMgaW1tZWRpYXRlIHJlZCBmbGFncy4gTm8gZGlyZWN0IHVzZXItc3BhY2UgY29waWVzLCBubyBjb21wbGV4IGFsbG9jYXRpb25zLCBhbmQgbm8gb2J2aW91cyBtZW1vcnkgc2FmZXR5IGlzc3Vlcy4KCkhvd2V2ZXIsIEkgZGlkIGNhdGNoIHRoYXQgdGhlIGBtZW1fY2dyb3VwX2dldF96b25lX2xydV9zaXplYCBub3cgcmV0dXJucyBhIGBsb25nIHZhbGAgYW5kIGluY2x1ZGVzIGEgYFdBUk5fT05fT05DRWAgY2hlY2suIFRoaXMgaXMgc3RhbmRhcmQgZ29vZCBwcmFjdGljZSwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyB0aGUgb25seSB1c2Ugb2YgdGhpcyBhbmQgdGhhdCBpdCYjMzk7cyBiZWluZyBwcm9wZXJseSBoYW5kbGVkLiBUaGUgdXNlIG9mIGBhdG9taWNfbG9uZ19yZWFkYCBhbmQgdGhlIGBscnVfZ2VuXypfZmxhZ3NgIGhlbHBlciBmdW5jdGlvbnMgbG9vayBsaWtlIHN0YW5kYXJkIGFuZCBzYWZlIG9wZXJhdGlvbnMuCgpJJiMzOTttIG5vdyBmb2N1c2luZyBvbiBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVha3Mgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlLiBUaGUgcGF0Y2ggYXBwZWFycyB0byBiZSBlbnRpcmVseSBpbnRlcm5hbCB0byBtZW1vcnkgbWFuYWdlbWVudCAtIExSVSBnZW5lcmF0aW9uLCBmb2xpbyBmbGFncywgYW5kIG1lbWNnIExSVSBzaXplIHRyYWNraW5nLiBObyB1c2VyLXNwYWNlIGludGVyYWN0aW9uLiBHaXZlbiB0aGlzIGNvbnRleHQsIEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IGZvciBjaGVja2luZyBjb21tb24gaXNzdWVzIGxpa2Ugb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgb3IgdXNlLWFmdGVyLWZyZWUsIGFuZCBJIGRvbiYjMzk7dCBzZWUgYW55IGNoYW5nZXMgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIHRvIGRldGVjdCB1bmluaXRpYWxpemVkIG1lbW9yeS4KCkxldCYjMzk7cyBkbyBhIGRlZXBlciBkaXZlIGludG8gdGhlIGBmb2xpb191cGRhdGVfZ2VuYCBjaGFuZ2UuIFNwZWNpZmljYWxseSwgdGhlIGludHJvZHVjdGlvbiBvZiB0aGUgYGlzX2ZpbGVgIHBvaW50ZXI6CmBgYGMKLXN0YXRpYyBpbnQgZm9saW9fdXBkYXRlX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgZ2VuLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKQomIzQzO3N0YXRpYyBpbnQgZm9saW9fdXBkYXRlX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbmV3X2dlbiwgaW50ICppc19maWxlLAomIzQzOwkJCSAgICBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKQpgYGAKSSBhbSBub3cgbWFraW5nIHN1cmUgYGlzX2ZpbGVgIGlzIGluaXRpYWxpemVkIGFuZCB1c2VkIGNvcnJlY3RseS4gTXkgc2NhbiBmb3IgaXRzIHVzZSBpbiBgd2Fsa191cGRhdGVfZm9saW9gIGlzIHdoYXQgSSYjMzk7bSBsb29raW5nIGF0LgoKYGBgYwotc3RhdGljIHZvaWQgd2Fsa191cGRhdGVfZm9saW8oc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JCXN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuZXdfZ2VuLCBib29sIGRpcnR5KQomIzQzO3N0YXRpYyB2b2lkIHdhbGtfdXBkYXRlX2ZvbGlvKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAomIzQzOwkJc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIGRpcnR5KQogewotCWludCBvbGRfZ2VuOwomIzQzOwlpbnQgbmV3X2dlbiwgb2xkX2dlbiwgZmlsZTsKLi4uCiAJaWYgKHdhbGspIHsKLQkJb2xkX2dlbiA9IGZvbGlvX3VwZGF0ZV9nZW4oZm9saW8sIG5ld19nZW4sICZhbXA7dm1hLSZndDtmbGFncyk7CiYjNDM7CQlvbGRfZ2VuID0gZm9saW9fdXBkYXRlX2dlbihmb2xpbywgbmV3X2dlbiwgJmFtcDtmaWxlLCAmYW1wO3ZtYS0mZ3Q7ZmxhZ3MpOwogCQlpZiAob2xkX2dlbiAmZ3Q7PSAwICZhbXA7JmFtcDsgb2xkX2dlbiAhPSBuZXdfZ2VuKQotCQkJdXBkYXRlX2JhdGNoX3NpemUod2FsaywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4pOwomIzQzOwkJCXVwZGF0ZV9iYXRjaF9zaXplKHdhbGssIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuLCBmaWxlKTsKYGBgCgpUaGUgbmV3IGBmaWxlYCB2YXJpYWJsZSBpcyBpbnRyb2R1Y2VkIGFuZCBwYXNzZWQgYXMgdGhlIGBpc19maWxlYCBwYXJhbWV0ZXIsIHNvIEkgbmVlZCB0byBrbm93IHdoZXJlIGl0JiMzOTtzIGJlaW5nIHNldC4KSWYgYGZvbGlvX3VwZGF0ZV9nZW5gIHJldHVybnMgYCZsdDsgMGAsIGBvbGRfZ2VuICZndDs9IDBgIGlzIGZhbHNlLCBhbmQgYGZpbGVgIGlzIG5ldmVyIHVzZWQgc28gaXQgc2hvdWxkIG5vdCBiZSBhIHByb2JsZW0uIElmIGBmb2xpb191cGRhdGVfZ2VuYAoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE5OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgaW50ZXJuYWwgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSwgc3BlY2lmaWNhbGx5IExSVSBnZW5lcmF0aW9uIGFuZCBmb2xpbyBmbGFncyBtYW5pcHVsYXRpb24sIGFuZCBjaGFuZ2VzIGBscnVfem9uZV9zaXplYCB0byB1c2UgYGF0b21pY19sb25nX3RgLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIHRoYXQgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhbGxvY2F0ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBvciBtb2RpZnkgYm91bmRzIGNoZWNrcyBpbiBhIHdheSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIG5ld2x5IGludHJvZHVjZWQgb3V0LXBhcmFtZXRlciBgaXNfZmlsZWAgaW4gYGZvbGlvX3VwZGF0ZV9nZW5gIGlzIGFsd2F5cyBpbml0aWFsaXplZCBiZWZvcmUgcmV0dXJuaW5nLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIHJhY2UgY29uZGl0aW9ucywgdXNlLWFmdGVyLWZyZWUsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMpIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIG90aGVyIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgaW50ZXJuYWwgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSwgc3BlY2lmaWNhbGx5IExSVSBnZW5lcmF0aW9uIGFuZCBmb2xpbyBmbGFncyBtYW5pcHVsYXRpb24sIGFuZCBjaGFuZ2VzIGBscnVfem9uZV9zaXplYCB0byB1c2UgYGF0b21pY19sb25nX3RgLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIHRoYXQgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhbGxvY2F0ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBvciBtb2RpZnkgYm91bmRzIGNoZWNrcyBpbiBhIHdheSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIG5ld2x5IGludHJvZHVjZWQgb3V0LXBhcmFtZXRlciBgaXNfZmlsZWAgaW4gYGZvbGlvX3VwZGF0ZV9nZW5gIGlzIGFsd2F5cyBpbml0aWFsaXplZCBiZWZvcmUgcmV0dXJuaW5nLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIHJhY2UgY29uZGl0aW9ucywgdXNlLWFmdGVyLWZyZWUsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMpIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIG90aGVyIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTk6MDM6MjMuNTAzNjI0MzUzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE1OTg1NTY5MjM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxSVV9HRU5cIixcbiAgICBcIkxSVV9HRU5fRU5BQkxFRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZvbGlvX21pZ3JhdGVfZmxhZ3NcIixcbiAgICBcImxydV9nZW5fbG9va19hcm91bmRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgaW50ZXJuYWwgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSwgc3BlY2lmaWNhbGx5IExSVSBnZW5lcmF0aW9uIGFuZCBmb2xpbyBmbGFncyBtYW5pcHVsYXRpb24sIGFuZCBjaGFuZ2VzIGBscnVfem9uZV9zaXplYCB0byB1c2UgYGF0b21pY19sb25nX3RgLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIHRoYXQgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhbGxvY2F0ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBvciBtb2RpZnkgYm91bmRzIGNoZWNrcyBpbiBhIHdheSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIG5ld2x5IGludHJvZHVjZWQgb3V0LXBhcmFtZXRlciBgaXNfZmlsZWAgaW4gYGZvbGlvX3VwZGF0ZV9nZW5gIGlzIGFsd2F5cyBpbml0aWFsaXplZCBiZWZvcmUgcmV0dXJuaW5nLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIHJhY2UgY29uZGl0aW9ucywgdXNlLWFmdGVyLWZyZWUsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMpIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIG90aGVyIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgTXVsdGktR2VuIExSVSAoTUdMUlUpIHBhZ2UgZmxhZ3MgaGFuZGxpbmcgYW5kIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gYGxydV96b25lX3NpemVgIHVwZGF0ZXMgYnkgdXNpbmcgYXRvbWljIG9wZXJhdGlvbnMuIEl0IG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMsIHNwZWNpZmljYWxseSBwYWdlIG1pZ3JhdGlvbiAoYGZvbGlvX21pZ3JhdGVfZmxhZ3NgKSBhbmQgcGFnZSByZWNsYWltIGxvb2thcm91bmQgKGBscnVfZ2VuX2xvb2tfYXJvdW5kYCkuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBtYWtpbmcgdGhlbSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxOTowMzoyMy41MDM2Mjg4NjJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzODE2MjQ5MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAyNTlhMjUyMjM4NzZkMGYyNzNiMzRmZTZhZWYzNDM2NmI3NTYwOTllXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDI1IDE5OjAzOjIxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcXG5pbmRleCAyMTVlMmU4N2Y0MmIyLi43Yjg5ZDBjYjVmNmM2IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcXG5AQCAtMTEzLDcgKzExMyw3IEBAIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlIHtcXG4gXFx0LyogRmllbGRzIHdoaWNoIGdldCB1cGRhdGVkIG9mdGVuIGF0IHRoZSBlbmQuICovXFxuIFxcdHN0cnVjdCBscnV2ZWNcXHRcXHRscnV2ZWM7XFxuIFxcdENBQ0hFTElORV9QQURESU5HKF9wYWQyXyk7XFxuLVxcdHVuc2lnbmVkIGxvbmdcXHRcXHRscnVfem9uZV9zaXplW01BWF9OUl9aT05FU11bTlJfTFJVX0xJU1RTXTtcXG4rXFx0YXRvbWljX2xvbmdfdFxcdFxcdGxydV96b25lX3NpemVbTUFYX05SX1pPTkVTXVtOUl9MUlVfTElTVFNdO1xcbiBcXHRzdHJ1Y3QgbWVtX2Nncm91cF9yZWNsYWltX2l0ZXJcXHRpdGVyO1xcbiBcXG4gXFx0LypcXG5AQCAtOTAyLDEwICs5MDIsMTUgQEAgc3RhdGljIGlubGluZVxcbiB1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfZ2V0X3pvbmVfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbiBcXHRcXHRlbnVtIGxydV9saXN0IGxydSwgaW50IHpvbmVfaWR4KVxcbiB7XFxuK1xcdGxvbmcgdmFsO1xcbiBcXHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXo7XFxuIFxcbiBcXHRteiA9IGNvbnRhaW5lcl9vZihscnV2ZWMsIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlLCBscnV2ZWMpO1xcbi1cXHRyZXR1cm4gUkVBRF9PTkNFKG16LVxcdTAwM2VscnVfem9uZV9zaXplW3pvbmVfaWR4XVtscnVdKTtcXG4rXFx0dmFsID0gYXRvbWljX2xvbmdfcmVhZChcXHUwMDI2bXotXFx1MDAzZWxydV96b25lX3NpemVbem9uZV9pZHhdW2xydV0pO1xcbitcXHRpZiAoV0FSTl9PTl9PTkNFKHZhbCBcXHUwMDNjIDApKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdHJldHVybiB2YWw7XFxuIH1cXG4gXFxuIHZvaWQgX19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goZ2ZwX3QgZ2ZwX21hc2spO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oIGIvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaFxcbmluZGV4IDYyMWM4NjUzZDhmN2UuLjhjZjgyOTg5ZWMyNjMgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmhcXG5AQCAtMTAsNiArMTAsMTEgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VzZXJmYXVsdGZkX2suaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xlYWZvcHMuaFxcdTAwM2VcXG4gXFxuK3N0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2ZsYWdzX2lzX2ZpbGVfbHJ1KGNvbnN0IHVuc2lnbmVkIGxvbmcgKmZsYWdzKVxcbit7XFxuK1xcdHJldHVybiAhdGVzdF9iaXQoUEdfc3dhcGJhY2tlZCwgZmxhZ3MpO1xcbit9XFxuK1xcbiAvKipcXG4gICogZm9saW9faXNfZmlsZV9scnUgLSBTaG91bGQgdGhlIGZvbGlvIGJlIG9uIGEgZmlsZSBMUlUgb3IgYW5vbiBMUlU/XFxuICAqIEBmb2xpbzogVGhlIGZvbGlvIHRvIHRlc3QuXFxuQEAgLTI3LDcgKzMyLDcgQEBcXG4gICovXFxuIHN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2lzX2ZpbGVfbHJ1KGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4tXFx0cmV0dXJuICFmb2xpb190ZXN0X3N3YXBiYWNrZWQoZm9saW8pO1xcbitcXHRyZXR1cm4gZm9saW9fZmxhZ3NfaXNfZmlsZV9scnUoY29uc3RfZm9saW9fZmxhZ3MoZm9saW8sIDApKTtcXG4gfVxcbiBcXG4gc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIF9fdXBkYXRlX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG5AQCAtMTQyLDEwICsxNDcsNDIgQEAgc3RhdGljIGlubGluZSBpbnQgbHJ1X3RpZXJfZnJvbV9yZWZzKGludCByZWZzLCBib29sIHdvcmtpbmdzZXQpXFxuIFxcdHJldHVybiB3b3JraW5nc2V0ID8gTUFYX05SX1RJRVJTIC0gMSA6IG9yZGVyX2Jhc2VfMihyZWZzKTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X3JlZnMoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcXG4rLyoqXFxuKyAqIGxydV9nZW5fZnJvbV9mbGFncyAtIFJldHVybiB0aGUgTFJVIGdlbmVyYXRpb24gbnVtYmVyIGZyb20gZm9saW8gZmxhZ3MuXFxuKyAqIEBmbGFnczogZm9saW8gZmxhZ3NcXG4rICpcXG4rICogUmV0dXJuczogQSBudW1iZXIgYmV0d2VlbiAwIGFuZCAoTUFYX05SX0dFTlMgLSAxKSwgaW5jbHVzaXZlLiBSZXR1cm5zXFxuKyAqIC0xIGlmIHRoZSBmbGFncyBpbmRpY2F0ZSB0aGUgZm9saW8gaXMgb2ZmIHRoZSBsaXN0IChlLmcuLCBpc29sYXRlZCkuXFxuKyAqL1xcbitzdGF0aWMgaW5saW5lIGludCBscnVfZ2VuX2Zyb21fZmxhZ3ModW5zaWduZWQgbG9uZyBmbGFncylcXG4re1xcbitcXHRpbnQgZ2VuID0gKChmbGFncyBcXHUwMDI2IExSVV9HRU5fTUFTSykgXFx1MDAzZVxcdTAwM2UgTFJVX0dFTl9QR09GRik7XFxuK1xcbitcXHRCVUlMRF9CVUdfT04oTFJVX0dFTl9NQVNLIFxcdTAwMjYgTFJVX1JFRlNfTUFTSyk7XFxuK1xcdGdlbiAtPSAxO1xcbitcXHRWTV9XQVJOX09OX09OQ0UoZ2VuICE9IC0xIFxcdTAwMjZcXHUwMDI2IGdlbiBcXHUwMDNlPSBNQVhfTlJfR0VOUyk7XFxuK1xcdHJldHVybiBnZW47XFxuK31cXG4rXFxuKy8qKlxcbisgKiBscnVfZ2VuX3NldF9mbGFncyAtIFNldCB0aGUgTFJVIGdlbmVyYXRpb24gbnVtYmVyIHRvIHNwZWNpZmllZCBmb2xpbyBmbGFncy5cXG4rICogQGZsYWdzOiBwb2ludGVyIHRvIHRoZSBmb2xpbyBmbGFnc1xcbisgKiBAZ2VuOiBnZW5lcmF0aW9uIG51bWJlciwgYmV0d2VlbiAwIGFuZCAoTUFYX05SX0dFTlMgLSAxKSwgaW5jbHVzaXZlLlxcbisgKi9cXG4rc3RhdGljIGlubGluZSB2b2lkIGxydV9nZW5fc2V0X2ZsYWdzKHVuc2lnbmVkIGxvbmcgKmZsYWdzLCBpbnQgZ2VuKVxcbiB7XFxuLVxcdHVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tXFx1MDAzZWZsYWdzLmYpO1xcbitcXHRWTV9XQVJOX09OX09OQ0UoZ2VuIFxcdTAwM2U9IE1BWF9OUl9HRU5TIHx8IGdlbiBcXHUwMDNjIDApO1xcbitcXG4rXFx0KmZsYWdzIFxcdTAwMjY9IH5MUlVfR0VOX01BU0s7XFxuK1xcdCpmbGFncyB8PSAoZ2VuICsgMVVMKSBcXHUwMDNjXFx1MDAzYyBMUlVfR0VOX1BHT0ZGO1xcbit9XFxuIFxcbisvKipcXG4rICogbHJ1X3JlZnNfZnJvbV9mbGFncyAtIFJldHVybiBMUlUgcmVmZXJlbmNlZCAvIGFjY2VzcyBjb3VudCBmcm9tIGZvbGlvIGZsYWdzLlxcbisgKiBAZmxhZ3M6IGZvbGlvIGZsYWdzXFxuKyAqL1xcbitzdGF0aWMgaW5saW5lIGludCBscnVfcmVmc19mcm9tX2ZsYWdzKHVuc2lnbmVkIGxvbmcgZmxhZ3MpXFxuK3tcXG4gXFx0aWYgKCEoZmxhZ3MgXFx1MDAyNiBCSVQoUEdfcmVmZXJlbmNlZCkpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFx0LypcXG5AQCAtMTU1LDExICsxOTIsNDAgQEAgc3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X3JlZnMoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0cmV0dXJuICgoZmxhZ3MgXFx1MDAyNiBMUlVfUkVGU19NQVNLKSBcXHUwMDNlXFx1MDAzZSBMUlVfUkVGU19QR09GRikgKyAxO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfZ2VuKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuKy8qKlxcbisgKiBscnVfcmVmc19zZXRfZmxhZ3MgLSBTZXQgdGhlIExSVSByZWZlcmVuY2VkIC8gYWNjZXNzIGNvdW50IHRvIHNwZWNpZmllZCBmb2xpbyBmbGFncy5cXG4rICogQGZsYWdzOiBwb2ludGVyIHRvIHRoZSBmb2xpbyBmbGFnc1xcbisgKiBAcmVmczogcmVmZXJlbmNlZCAvIGFjY2VzcyBjb3VudCBudW1iZXIsIGJldHdlZW4gMCBhbmQgTFJVX1JFRlNfTUFYLCBpbmNsdXNpdmUuXFxuKyAqL1xcbitzdGF0aWMgaW5saW5lIHZvaWQgbHJ1X3JlZnNfc2V0X2ZsYWdzKHVuc2lnbmVkIGxvbmcgKmZsYWdzLCB1bnNpZ25lZCBpbnQgcmVmcylcXG4re1xcbitcXHRWTV9XQVJOX09OX09OQ0UocmVmcyBcXHUwMDNlIExSVV9SRUZTX01BWCk7XFxuK1xcdEJVSUxEX0JVR19PTihMUlVfUkVGU19NQVggIT0gKExSVV9SRUZTX01BU0sgXFx1MDAzZVxcdTAwM2UgTFJVX1JFRlNfUEdPRkYpICsgMSk7XFxuK1xcbitcXHQqZmxhZ3MgXFx1MDAyNj0gfkxSVV9SRUZTX0ZMQUdTO1xcbitcXHRpZiAoIXJlZnMpXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0KmZsYWdzIHw9IChCSVQoUEdfcmVmZXJlbmNlZCkgfCAoKHJlZnMgLSAxVUwpIFxcdTAwM2NcXHUwMDNjIExSVV9SRUZTX1BHT0ZGKSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9yZWZzKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3tcXG4rXFx0cmV0dXJuIGxydV9yZWZzX2Zyb21fZmxhZ3MoUkVBRF9PTkNFKCpjb25zdF9mb2xpb19mbGFncyhmb2xpbywgMCkpKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3NldF9scnVfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgcmVmcylcXG4ge1xcbi1cXHR1bnNpZ25lZCBsb25nIGZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVxcdTAwM2VmbGFncy5mKTtcXG4rXFx0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTtcXG4gXFxuLVxcdHJldHVybiAoKGZsYWdzIFxcdTAwMjYgTFJVX0dFTl9NQVNLKSBcXHUwMDNlXFx1MDAzZSBMUlVfR0VOX1BHT0ZGKSAtIDE7XFxuK1xcdGRvIHtcXG4rXFx0XFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzO1xcbitcXHRcXHRscnVfcmVmc19zZXRfZmxhZ3MoXFx1MDAyNm5ld19mbGFncywgcmVmcyk7XFxuK1xcdH0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksIFxcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfZ2VuKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3tcXG4rXFx0cmV0dXJuIGxydV9nZW5fZnJvbV9mbGFncyhSRUFEX09OQ0UoKmNvbnN0X2ZvbGlvX2ZsYWdzKGZvbGlvLCAwKSkpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9pc19hY3RpdmUoY29uc3Qgc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgZ2VuKVxcbkBAIC0yNzAsNyArMzM2LDcgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fYWRkX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4gXFx0Z2VuID0gbHJ1X2dlbl9mcm9tX3NlcShzZXEpO1xcbiBcXHRmbGFncyA9IChnZW4gKyAxVUwpIFxcdTAwM2NcXHUwMDNjIExSVV9HRU5fUEdPRkY7XFxuIFxcdC8qIHNlZSB0aGUgY29tbWVudCBvbiBNSU5fTlJfR0VOUyBhYm91dCBQR19hY3RpdmUgKi9cXG4tXFx0c2V0X21hc2tfYml0cyhcXHUwMDI2Zm9saW8tXFx1MDAzZWZsYWdzLmYsIExSVV9HRU5fTUFTSyB8IEJJVChQR19hY3RpdmUpLCBmbGFncyk7XFxuK1xcdHNldF9tYXNrX2JpdHMoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBMUlVfR0VOX01BU0sgfCBCSVQoUEdfYWN0aXZlKSwgZmxhZ3MpO1xcbiBcXG4gXFx0bHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCAtMSwgZ2VuKTtcXG4gXFx0LyogZm9yIGZvbGlvX3JvdGF0ZV9yZWNsYWltYWJsZSgpICovXFxuQEAgLTI5NSw3ICszNjEsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9kZWxfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiBcXG4gXFx0LyogZm9yIGZvbGlvX21pZ3JhdGVfZmxhZ3MoKSAqL1xcbiBcXHRmbGFncyA9ICFyZWNsYWltaW5nIFxcdTAwMjZcXHUwMDI2IGxydV9nZW5faXNfYWN0aXZlKGxydXZlYywgZ2VuKSA/IEJJVChQR19hY3RpdmUpIDogMDtcXG4tXFx0ZmxhZ3MgPSBzZXRfbWFza19iaXRzKFxcdTAwMjZmb2xpby1cXHUwMDNlZmxhZ3MuZiwgTFJVX0dFTl9NQVNLLCBmbGFncyk7XFxuK1xcdGZsYWdzID0gc2V0X21hc2tfYml0cyhmb2xpb19mbGFncyhmb2xpbywgMCksIExSVV9HRU5fTUFTSywgZmxhZ3MpO1xcbiBcXHRnZW4gPSAoKGZsYWdzIFxcdTAwMjYgTFJVX0dFTl9NQVNLKSBcXHUwMDNlXFx1MDAzZSBMUlVfR0VOX1BHT0ZGKSAtIDE7XFxuIFxcbiBcXHRscnVfZ2VuX3VwZGF0ZV9zaXplKGxydXZlYywgZm9saW8sIGdlbiwgLTEpO1xcbkBAIC0zMDQsMTEgKzM3MCwxOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9kZWxfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiBcXHRyZXR1cm4gdHJ1ZTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfcmVmcyhzdHJ1Y3QgZm9saW8gKm5ldywgY29uc3Qgc3RydWN0IGZvbGlvICpvbGQpXFxuKy8qKlxcbisgKiBmb2xpb19taWdyYXRlX2xydV9yZWZzIC0gY29weSB0aGUgcmVmZXJlbmNlIHN0YXRlIHRvIGEgbmV3IGZvbGlvXFxuKyAqIEBuZXc6IHRoZSBkZXN0aW5hdGlvbiBmb2xpb1xcbisgKiBAb2xkOiB0aGUgc291cmNlIGZvbGlvXFxuKyAqXFxuKyAqIFRyYW5zZmVyIHRoZSByZWZlcmVuY2Ugc3RhdGUgdG8gQG5ldyBkdXJpbmcgbWlncmF0aW9uOiB0aGUgTUdMUlVcXG4rICogcmVmcyBjb3VudCwgaW5jbHVkaW5nIFBHX3JlZmVyZW5jZWQsIG9yIGp1c3QgUEdfcmVmZXJlbmNlZCBmb3IgdGhlXFxuKyAqIGFjdGl2ZS9pbmFjdGl2ZSBMUlUuXFxuKyAqL1xcbitzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fbWlncmF0ZV9scnVfcmVmcyhzdHJ1Y3QgZm9saW8gKm5ldywgY29uc3Qgc3RydWN0IGZvbGlvICpvbGQpXFxuIHtcXG4tXFx0dW5zaWduZWQgbG9uZyByZWZzID0gUkVBRF9PTkNFKG9sZC1cXHUwMDNlZmxhZ3MuZikgXFx1MDAyNiBMUlVfUkVGU19NQVNLO1xcbi1cXG4tXFx0c2V0X21hc2tfYml0cyhcXHUwMDI2bmV3LVxcdTAwM2VmbGFncy5mLCBMUlVfUkVGU19NQVNLLCByZWZzKTtcXG4rXFx0QlVJTERfQlVHX09OKExSVV9SRUZTX01BU0sgXFx1MDAyNiBCSVQoUEdfcmVmZXJlbmNlZCkpO1xcbitcXHRmb2xpb19zZXRfbHJ1X3JlZnMobmV3LCBmb2xpb19scnVfcmVmcyhvbGQpKTtcXG4gfVxcbiAjZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi9cXG4gXFxuQEAgLTMzNyw5ICs0MTEsMTAgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZGVsX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4gXFx0cmV0dXJuIGZhbHNlO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fbWlncmF0ZV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZClcXG4rc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKVxcbiB7XFxuLVxcbitcXHRpZiAoZm9saW9fdGVzdF9yZWZlcmVuY2VkKG9sZCkpXFxuK1xcdFxcdGZvbGlvX3NldF9yZWZlcmVuY2VkKG5ldyk7XFxuIH1cXG4gI2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXFxuIFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxcbmluZGV4IDk0ZjljM2ZmNTQxNjAuLjliMjdjZjUzYmRiYzcgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbW16b25lLmhcXG5AQCAtNDkyLDExICs0OTIsMTQgQEAgZW51bSBscnV2ZWNfZmxhZ3Mge1xcbiAgKiBmb2xpby1cXHUwMDNlZmxhZ3MsIG1hc2tlZCBieSBMUlVfUkVGU19NQVNLLlxcbiAgKi9cXG4gI2RlZmluZSBNQVhfTlJfVElFUlNcXHRcXHQ0VVxcbisjZGVmaW5lIExSVV9USUVSX01JTlxcdFxcdDBVXFxuKyNkZWZpbmUgTFJVX1RJRVJfTUFYXFx0XFx0KE1BWF9OUl9USUVSUyAtIDEpXFxuIFxcbiAjaWZuZGVmIF9fR0VORVJBVElOR19CT1VORFNfSFxcbiBcXG4gI2RlZmluZSBMUlVfR0VOX01BU0tcXHRcXHQoKEJJVChMUlVfR0VOX1dJRFRIKSAtIDEpIFxcdTAwM2NcXHUwMDNjIExSVV9HRU5fUEdPRkYpXFxuICNkZWZpbmUgTFJVX1JFRlNfTUFTS1xcdFxcdCgoQklUKExSVV9SRUZTX1dJRFRIKSAtIDEpIFxcdTAwM2NcXHUwMDNjIExSVV9SRUZTX1BHT0ZGKVxcbisjZGVmaW5lIExSVV9SRUZTX01BWFxcdFxcdEJJVChMUlVfUkVGU19XSURUSClcXG4gXFxuIC8qXFxuICAqIEZvciBmb2xpb3MgYWNjZXNzZWQgbXVsdGlwbGUgdGltZXMgdGhyb3VnaCBmaWxlIGRlc2NyaXB0b3JzLFxcbmRpZmYgLS1naXQgYS9tbS9mb2xpby5jIGIvbW0vZm9saW8uY1xcbmluZGV4IGMwMmRjZWE5YzAzYzIuLmE5MzIwNTkwNTdhYzEgMTAwNjQ0XFxuLS0tIGEvbW0vZm9saW8uY1xcbisrKyBiL21tL2ZvbGlvLmNcXG5AQCAtMzUzLDI2ICszNTMsMjggQEAgc3RhdGljIHZvaWQgX19scnVfY2FjaGVfYWN0aXZhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFxuIHN0YXRpYyB2b2lkIGxydV9nZW5faW5jX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcXG4ge1xcbi1cXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVxcdTAwM2VmbGFncy5mKTtcXG4rXFx0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTtcXG4rXFx0aW50IHJlZnM7XFxuIFxcbiBcXHRpZiAoZm9saW9fdGVzdF91bmV2aWN0YWJsZShmb2xpbykpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdC8qIHNlZSB0aGUgY29tbWVudCBvbiBMUlVfUkVGU19GTEFHUyAqL1xcbi1cXHRpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykpIHtcXG4tXFx0XFx0c2V0X21hc2tfYml0cyhcXHUwMDI2Zm9saW8tXFx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX01BU0ssIEJJVChQR19yZWZlcmVuY2VkKSk7XFxuK1xcdGlmICghZm9saW9fbHJ1X3JlZnMoZm9saW8pKSB7XFxuK1xcdFxcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMSk7XFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG4gXFx0ZG8ge1xcbi1cXHRcXHRpZiAoKG9sZF9mbGFncyBcXHUwMDI2IExSVV9SRUZTX01BU0spID09IExSVV9SRUZTX01BU0spIHtcXG4rXFx0XFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzO1xcbitcXHRcXHRyZWZzID0gbHJ1X3JlZnNfZnJvbV9mbGFncyhvbGRfZmxhZ3MpO1xcbitcXHRcXHRpZiAocmVmcyA9PSBMUlVfUkVGU19NQVgpIHtcXG4gXFx0XFx0XFx0aWYgKCFmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pKVxcbiBcXHRcXHRcXHRcXHRmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7XFxuIFxcdFxcdFxcdHJldHVybjtcXG4gXFx0XFx0fVxcbi1cXG4tXFx0XFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzICsgQklUKExSVV9SRUZTX1BHT0ZGKTtcXG4tXFx0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKFxcdTAwMjZmb2xpby1cXHUwMDNlZmxhZ3MuZiwgXFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XFxuK1xcdFxcdGxydV9yZWZzX3NldF9mbGFncyhcXHUwMDI2bmV3X2ZsYWdzLCByZWZzICsgMSk7XFxuK1xcdH0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksIFxcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xcbiB9XFxuIFxcbiBzdGF0aWMgYm9vbCBscnVfZ2VuX2NsZWFyX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcXG5AQCAtMzg0LDcgKzM4Niw4IEBAIHN0YXRpYyBib29sIGxydV9nZW5fY2xlYXJfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiBcXHRpZiAoZ2VuIFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcbi1cXHRzZXRfbWFza19iaXRzKFxcdTAwMjZmb2xpby1cXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MgfCBCSVQoUEdfd29ya2luZ3NldCksIDApO1xcbitcXHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xcbitcXHRmb2xpb19jbGVhcl93b3JraW5nc2V0KGZvbGlvKTtcXG4gXFxuIFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gXFx0c2VxID0gUkVBRF9PTkNFKGZvbGlvX2xydXZlYyhmb2xpbyktXFx1MDAzZWxydWdlbi5taW5fc2VxW3R5cGVdKTtcXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXFxuaW5kZXggMTFiODVmNGI2ODI4Yi4uYTc1NzJkZWQ1NmM5ZCAxMDA2NDRcXG4tLS0gYS9tbS9tZW1jb250cm9sLmNcXG4rKysgYi9tbS9tZW1jb250cm9sLmNcXG5AQCAtMTUyOSwyOCArMTUyOSwxMiBAQCB2b2lkIG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBscnVfbGlzdCBscnUsXFxuIFxcdFxcdFxcdFxcdGludCB6aWQsIGxvbmcgbnJfcGFnZXMpXFxuIHtcXG4gXFx0c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm16O1xcbi1cXHR1bnNpZ25lZCBsb25nICpscnVfc2l6ZTtcXG4tXFx0bG9uZyBzaXplO1xcbiBcXG4gXFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0bXogPSBjb250YWluZXJfb2YobHJ1dmVjLCBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSwgbHJ1dmVjKTtcXG4tXFx0bHJ1X3NpemUgPSBcXHUwMDI2bXotXFx1MDAzZWxydV96b25lX3NpemVbemlkXVtscnVdO1xcbi1cXG4tXFx0aWYgKG5yX3BhZ2VzIFxcdTAwM2MgMClcXG4tXFx0XFx0KmxydV9zaXplICs9IG5yX3BhZ2VzO1xcbi1cXG4tXFx0c2l6ZSA9ICpscnVfc2l6ZTtcXG4tXFx0aWYgKFdBUk5fT05DRShzaXplIFxcdTAwM2MgMCxcXG4tXFx0XFx0XFxcIiVzKCVwLCAlZCwgJWxkKTogbHJ1X3NpemUgJWxkXFxcXG5cXFwiLFxcbi1cXHRcXHRfX2Z1bmNfXywgbHJ1dmVjLCBscnUsIG5yX3BhZ2VzLCBzaXplKSkge1xcbi1cXHRcXHRWTV9CVUdfT04oMSk7XFxuLVxcdFxcdCpscnVfc2l6ZSA9IDA7XFxuLVxcdH1cXG4tXFxuLVxcdGlmIChucl9wYWdlcyBcXHUwMDNlIDApXFxuLVxcdFxcdCpscnVfc2l6ZSArPSBucl9wYWdlcztcXG4rXFx0YXRvbWljX2xvbmdfYWRkKG5yX3BhZ2VzLCBcXHUwMDI2bXotXFx1MDAzZWxydV96b25lX3NpemVbemlkXVtscnVdKTtcXG4gfVxcbiBcXG4gLyoqXFxuZGlmZiAtLWdpdCBhL21tL21pZ3JhdGUuYyBiL21tL21pZ3JhdGUuY1xcbmluZGV4IDE1YjQ1ODMyYmNmYTcuLmEzNjlkMGM5NWMzODYgMTAwNjQ0XFxuLS0tIGEvbW0vbWlncmF0ZS5jXFxuKysrIGIvbW0vbWlncmF0ZS5jXFxuQEAgLTc3Niw4ICs3NzYsOSBAQCB2b2lkIGZvbGlvX21pZ3JhdGVfZmxhZ3Moc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpmb2xpbylcXG4ge1xcbiBcXHRpbnQgY3B1cGlkO1xcbiBcXG4tXFx0aWYgKGZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykpXFxuLVxcdFxcdGZvbGlvX3NldF9yZWZlcmVuY2VkKG5ld2ZvbGlvKTtcXG4rXFx0LyogQ29weSB0aGUgcmVmZXJlbmNlIHN0YXRlLCBpbmNsdWRpbmcgUEdfcmVmZXJlbmNlZCAqL1xcbitcXHRmb2xpb19taWdyYXRlX2xydV9yZWZzKG5ld2ZvbGlvLCBmb2xpbyk7XFxuK1xcbiBcXHRpZiAoZm9saW9fdGVzdF91cHRvZGF0ZShmb2xpbykpXFxuIFxcdFxcdGZvbGlvX21hcmtfdXB0b2RhdGUobmV3Zm9saW8pO1xcbiBcXHRpZiAoZm9saW9fdGVzdF9jbGVhcl9hY3RpdmUoZm9saW8pKSB7XFxuQEAgLTgwNyw3ICs4MDgsNiBAQCB2b2lkIGZvbGlvX21pZ3JhdGVfZmxhZ3Moc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0aWYgKGZvbGlvX3Rlc3RfaWRsZShmb2xpbykpXFxuIFxcdFxcdGZvbGlvX3NldF9pZGxlKG5ld2ZvbGlvKTtcXG4gXFxuLVxcdGZvbGlvX21pZ3JhdGVfcmVmcyhuZXdmb2xpbywgZm9saW8pO1xcbiBcXHQvKlxcbiBcXHQgKiBDb3B5IE5VTUEgaW5mb3JtYXRpb24gdG8gdGhlIG5ldyBwYWdlLCB0byBwcmV2ZW50IG92ZXItZWFnZXJcXG4gXFx0ICogZnV0dXJlIG1pZ3JhdGlvbnMgb2YgdGhpcyBzYW1lIHBhZ2UuXFxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcXG5pbmRleCA3M2E4MWI0YTNlMTY0Li42ZmRhOTQ4YWVjZjJjIDEwMDY0NFxcbi0tLSBhL21tL3Ztc2Nhbi5jXFxuKysrIGIvbW0vdm1zY2FuLmNcXG5AQCAtODQzLDE5ICs4NDMsMjIgQEAgc3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxcbiBcXHRpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykgXFx1MDAyNlxcdTAwMjYgIWZvbGlvX3Rlc3Rfd29ya2luZ3NldChmb2xpbykpIHtcXG4gXFx0XFx0LyogQWN0aXZhdGUgZmlsZS1iYWNrZWQgZXhlY3V0YWJsZSBmb2xpb3MgYWZ0ZXIgZmlyc3QgdXNhZ2UuICovXFxuIFxcdFxcdGlmIChpc19leGVjX2ZpbGVfZm9saW8oZm9saW8sIHZtYV9mbGFncykpIHtcXG4tXFx0XFx0XFx0c2V0X21hc2tfYml0cyhcXHUwMDI2Zm9saW8tXFx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX0ZMQUdTLCBCSVQoUEdfd29ya2luZ3NldCkpO1xcbitcXHRcXHRcXHRmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7XFxuK1xcdFxcdFxcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XFxuIFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXHRcXHR9XFxuIFxcbi1cXHRcXHRzZXRfbWFza19iaXRzKFxcdTAwMjZmb2xpby1cXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgQklUKFBHX3JlZmVyZW5jZWQpKTtcXG4rXFx0XFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAxKTtcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXHR9XFxuIFxcbiBcXHQvKiBQcm9tb3RlIG9uIHNlY29uZCBhY2Nlc3MgKi9cXG4tXFx0aWYgKGZvbGlvX2xydV9yZWZzKGZvbGlvKSBcXHUwMDNlIDEpXFxuLVxcdFxcdHNldF9tYXNrX2JpdHMoXFx1MDAyNmZvbGlvLVxcdTAwM2VmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX3dvcmtpbmdzZXQpKTtcXG4tXFx0ZWxzZVxcbitcXHRpZiAoZm9saW9fbHJ1X3JlZnMoZm9saW8pIFxcdTAwM2UgMSkge1xcbitcXHRcXHRmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7XFxuK1xcdFxcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XFxuK1xcdH0gZWxzZSB7XFxuIFxcdFxcdGZvbGlvX21hcmtfYWNjZXNzZWQoZm9saW8pO1xcbitcXHR9XFxuIFxcdHJldHVybiB0cnVlO1xcbiB9XFxuICNlbHNlXFxuQEAgLTMxOTUsOCArMzE5OCw4IEBAIHN0cnVjdCBjdHJsX3BvcyB7XFxuIFxcdGludCBnYWluO1xcbiB9O1xcbiBcXG4tc3RhdGljIHZvaWQgcmVhZF9jdHJsX3BvcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgdGllciwgaW50IGdhaW4sXFxuLVxcdFxcdFxcdCAgc3RydWN0IGN0cmxfcG9zICpwb3MpXFxuK3N0YXRpYyB2b2lkIHJlYWRfY3RybF9wb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHRpZXJfbWluLFxcbitcXHRcXHRcXHQgIGludCB0aWVyX21heCwgaW50IGdhaW4sIHN0cnVjdCBjdHJsX3BvcyAqcG9zKVxcbiB7XFxuIFxcdGludCBpO1xcbiBcXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXFx1MDAyNmxydXZlYy1cXHUwMDNlbHJ1Z2VuO1xcbkBAIC0zMjA1LDcgKzMyMDgsNyBAQCBzdGF0aWMgdm9pZCByZWFkX2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCB0aWVyLCBpbnQgZ2FpbixcXG4gXFx0cG9zLVxcdTAwM2VnYWluID0gZ2FpbjtcXG4gXFx0cG9zLVxcdTAwM2VyZWZhdWx0ZWQgPSBwb3MtXFx1MDAzZXRvdGFsID0gMDtcXG4gXFxuLVxcdGZvciAoaSA9IHRpZXIgJSBNQVhfTlJfVElFUlM7IGkgXFx1MDAzYz0gbWluKHRpZXIsIE1BWF9OUl9USUVSUyAtIDEpOyBpKyspIHtcXG4rXFx0Zm9yIChpID0gdGllcl9taW47IGkgXFx1MDAzYz0gdGllcl9tYXg7IGkrKykge1xcbiBcXHRcXHRwb3MtXFx1MDAzZXJlZmF1bHRlZCArPSBscnVnZW4tXFx1MDAzZWF2Z19yZWZhdWx0ZWRbdHlwZV1baV0gK1xcbiBcXHRcXHRcXHRcXHQgIGF0b21pY19sb25nX3JlYWQoXFx1MDAyNmxydWdlbi1cXHUwMDNlcmVmYXVsdGVkW2hpc3RdW3R5cGVdW2ldKTtcXG4gXFx0XFx0cG9zLVxcdTAwM2V0b3RhbCArPSBscnVnZW4tXFx1MDAzZWF2Z190b3RhbFt0eXBlXVtpXSArXFxuQEAgLTMyNjYsMTEgKzMyNjksMTEgQEAgc3RhdGljIGJvb2wgcG9zaXRpdmVfY3RybF9lcnIoc3RydWN0IGN0cmxfcG9zICpzcCwgc3RydWN0IGN0cmxfcG9zICpwdilcXG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG4gXFxuIC8qIHByb21vdGUgcGFnZXMgYWNjZXNzZWQgdGhyb3VnaCBwYWdlIHRhYmxlcyAqL1xcbi1zdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGdlbiwgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcXG4rc3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuZXdfZ2VuLCBpbnQgKmlzX2ZpbGUsXFxuK1xcdFxcdFxcdCAgICBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxcbiB7XFxuLVxcdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tXFx1MDAzZWZsYWdzLmYpO1xcbi1cXG4tXFx0Vk1fV0FSTl9PTl9PTkNFKGdlbiBcXHUwMDNlPSBNQVhfTlJfR0VOUyk7XFxuK1xcdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XFxuK1xcdGludCBvbGRfZ2VuO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogU2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTLCBhbmQgYWN0aXZhdGUgZmlsZS1iYWNrZWRcXG5AQCAtMzI3OSwyMCArMzI4MiwyNSBAQCBzdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGdlbiwgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYVxcbiBcXHQgKi9cXG4gXFx0aWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pIFxcdTAwMjZcXHUwMDI2ICFmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICAhaXNfZXhlY19maWxlX2ZvbGlvKGZvbGlvLCB2bWFfZmxhZ3MpKSB7XFxuLVxcdFxcdHNldF9tYXNrX2JpdHMoXFx1MDAyNmZvbGlvLVxcdTAwM2VmbGFncy5mLCBMUlVfUkVGU19NQVNLLCBCSVQoUEdfcmVmZXJlbmNlZCkpO1xcbitcXHRcXHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDEpO1xcbiBcXHRcXHRyZXR1cm4gLTE7XFxuIFxcdH1cXG4gXFxuIFxcdGRvIHtcXG4rXFx0XFx0b2xkX2dlbiA9IGxydV9nZW5fZnJvbV9mbGFncyhvbGRfZmxhZ3MpO1xcbitcXHRcXHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3M7XFxuK1xcbiBcXHRcXHQvKiBscnVfZ2VuX2RlbF9mb2xpbygpIGhhcyBpc29sYXRlZCB0aGlzIHBhZ2U/ICovXFxuLVxcdFxcdGlmICghKG9sZF9mbGFncyBcXHUwMDI2IExSVV9HRU5fTUFTSykpXFxuLVxcdFxcdFxcdHJldHVybiAtMTtcXG4rXFx0XFx0aWYgKG9sZF9nZW4gXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRicmVhaztcXG4gXFxuLVxcdFxcdG5ld19mbGFncyA9IG9sZF9mbGFncyBcXHUwMDI2IH4oTFJVX0dFTl9NQVNLIHwgTFJVX1JFRlNfRkxBR1MpO1xcbi1cXHRcXHRuZXdfZmxhZ3MgfD0gKChnZW4gKyAxVUwpIFxcdTAwM2NcXHUwMDNjIExSVV9HRU5fUEdPRkYpIHwgQklUKFBHX3dvcmtpbmdzZXQpO1xcbi1cXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoXFx1MDAyNmZvbGlvLVxcdTAwM2VmbGFncy5mLCBcXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcXG4rXFx0XFx0bHJ1X2dlbl9zZXRfZmxhZ3MoXFx1MDAyNm5ld19mbGFncywgbmV3X2dlbik7XFxuK1xcdFxcdGxydV9yZWZzX3NldF9mbGFncyhcXHUwMDI2bmV3X2ZsYWdzLCAwKTtcXG4rXFx0XFx0bmV3X2ZsYWdzIHw9IEJJVChQR193b3JraW5nc2V0KTtcXG4rXFx0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgXFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XFxuIFxcbi1cXHRyZXR1cm4gKChvbGRfZmxhZ3MgXFx1MDAyNiBMUlVfR0VOX01BU0spIFxcdTAwM2VcXHUwMDNlIExSVV9HRU5fUEdPRkYpIC0gMTtcXG4rXFx0KmlzX2ZpbGUgPSBmb2xpb19mbGFnc19pc19maWxlX2xydShcXHUwMDI2b2xkX2ZsYWdzKTtcXG4rXFx0cmV0dXJuIG9sZF9nZW47XFxuIH1cXG4gXFxuIC8qIHByb3RlY3QgcGFnZXMgYWNjZXNzZWQgbXVsdGlwbGUgdGltZXMgdGhyb3VnaCBmaWxlIGRlc2NyaXB0b3JzICovXFxuQEAgLTMzMDEsMjEgKzMzMDksMjAgQEAgc3RhdGljIGludCBmb2xpb19pbmNfZ2VuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0aW50IHR5cGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7XFxuIFxcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVnZW47XFxuIFxcdGludCBuZXdfZ2VuLCBvbGRfZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tXFx1MDAzZW1pbl9zZXFbdHlwZV0pO1xcbi1cXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVxcdTAwM2VmbGFncy5mKTtcXG4tXFxuLVxcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghKG9sZF9mbGFncyBcXHUwMDI2IExSVV9HRU5fTUFTSyksIGZvbGlvKTtcXG4rXFx0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTtcXG4gXFxuIFxcdGRvIHtcXG4tXFx0XFx0bmV3X2dlbiA9ICgob2xkX2ZsYWdzIFxcdTAwMjYgTFJVX0dFTl9NQVNLKSBcXHUwMDNlXFx1MDAzZSBMUlVfR0VOX1BHT0ZGKSAtIDE7XFxuK1xcdFxcdG5ld19nZW4gPSBscnVfZ2VuX2Zyb21fZmxhZ3Mob2xkX2ZsYWdzKTtcXG4rXFxuIFxcdFxcdC8qIGZvbGlvX3VwZGF0ZV9nZW4oKSBoYXMgcHJvbW90ZWQgdGhpcyBwYWdlPyAqL1xcbiBcXHRcXHRpZiAobmV3X2dlbiBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2IG5ld19nZW4gIT0gb2xkX2dlbilcXG4gXFx0XFx0XFx0cmV0dXJuIG5ld19nZW47XFxuIFxcbitcXHRcXHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3M7XFxuIFxcdFxcdG5ld19nZW4gPSAob2xkX2dlbiArIDEpICUgTUFYX05SX0dFTlM7XFxuLVxcbi1cXHRcXHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3MgXFx1MDAyNiB+KExSVV9HRU5fTUFTSyB8IExSVV9SRUZTX0ZMQUdTKTtcXG4tXFx0XFx0bmV3X2ZsYWdzIHw9IChuZXdfZ2VuICsgMVVMKSBcXHUwMDNjXFx1MDAzYyBMUlVfR0VOX1BHT0ZGO1xcbi1cXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoXFx1MDAyNmZvbGlvLVxcdTAwM2VmbGFncy5mLCBcXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcXG4rXFx0XFx0bHJ1X2dlbl9zZXRfZmxhZ3MoXFx1MDAyNm5ld19mbGFncywgbmV3X2dlbik7XFxuK1xcdFxcdGxydV9yZWZzX3NldF9mbGFncyhcXHUwMDI2bmV3X2ZsYWdzLCAwKTtcXG4rXFx0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgXFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XFxuIFxcbiBcXHRscnVfZ2VuX3VwZGF0ZV9zaXplKGxydXZlYywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4pO1xcbiBcXG5AQCAtMzMyMyw5ICszMzMwLDggQEAgc3RhdGljIGludCBmb2xpb19pbmNfZ2VuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgdXBkYXRlX2JhdGNoX3NpemUoc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaywgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tXFx0XFx0XFx0ICAgICAgaW50IG9sZF9nZW4sIGludCBuZXdfZ2VuKVxcbitcXHRcXHRcXHQgICAgICBpbnQgb2xkX2dlbiwgaW50IG5ld19nZW4sIGludCB0eXBlKVxcbiB7XFxuLVxcdGludCB0eXBlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pO1xcbiBcXHRpbnQgem9uZSA9IGZvbGlvX3pvbmVudW0oZm9saW8pO1xcbiBcXHRpbnQgZGVsdGEgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XFxuIFxcbkBAIC0zNTEyLDIyICszNTE4LDI0IEBAIHN0YXRpYyBib29sIHN1aXRhYmxlX3RvX3NjYW4oaW50IHRvdGFsLCBpbnQgeW91bmcpXFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHdhbGtfdXBkYXRlX2ZvbGlvKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi1cXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbmV3X2dlbiwgYm9vbCBkaXJ0eSlcXG4rXFx0XFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIGRpcnR5KVxcbiB7XFxuLVxcdGludCBvbGRfZ2VuO1xcbitcXHRpbnQgbmV3X2dlbiwgb2xkX2dlbiwgZmlsZTtcXG4gXFxuIFxcdGlmICghZm9saW8pXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuK1xcdG5ld19nZW4gPSBscnVfZ2VuX2Zyb21fc2VxKFJFQURfT05DRShscnV2ZWMtXFx1MDAzZWxydWdlbi5tYXhfc2VxKSk7XFxuK1xcbiBcXHRpZiAoZGlydHkgXFx1MDAyNlxcdTAwMjYgIWZvbGlvX3Rlc3RfZGlydHkoZm9saW8pIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICAhKGZvbGlvX3Rlc3RfYW5vbihmb2xpbykgXFx1MDAyNlxcdTAwMjYgZm9saW9fdGVzdF9zd2FwYmFja2VkKGZvbGlvKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgICAhZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKSlcXG4gXFx0XFx0Zm9saW9fbWFya19kaXJ0eShmb2xpbyk7XFxuIFxcbiBcXHRpZiAod2Fsaykge1xcbi1cXHRcXHRvbGRfZ2VuID0gZm9saW9fdXBkYXRlX2dlbihmb2xpbywgbmV3X2dlbiwgXFx1MDAyNnZtYS1cXHUwMDNlZmxhZ3MpO1xcbitcXHRcXHRvbGRfZ2VuID0gZm9saW9fdXBkYXRlX2dlbihmb2xpbywgbmV3X2dlbiwgXFx1MDAyNmZpbGUsIFxcdTAwMjZ2bWEtXFx1MDAzZWZsYWdzKTtcXG4gXFx0XFx0aWYgKG9sZF9nZW4gXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNiBvbGRfZ2VuICE9IG5ld19nZW4pXFxuLVxcdFxcdFxcdHVwZGF0ZV9iYXRjaF9zaXplKHdhbGssIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTtcXG4rXFx0XFx0XFx0dXBkYXRlX2JhdGNoX3NpemUod2FsaywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4sIGZpbGUpO1xcbiBcXHR9IGVsc2UgaWYgKGxydV9nZW5fc2V0X3JlZnMoZm9saW8sIFxcdTAwMjZ2bWEtXFx1MDAzZWZsYWdzKSkge1xcbiBcXHRcXHRvbGRfZ2VuID0gZm9saW9fbHJ1X2dlbihmb2xpbyk7XFxuIFxcdFxcdGlmIChvbGRfZ2VuIFxcdTAwM2U9IDAgXFx1MDAyNlxcdTAwMjYgb2xkX2dlbiAhPSBuZXdfZ2VuKVxcbkBAIC0zNTQ5LDggKzM1NTcsNiBAQCBzdGF0aWMgYm9vbCB3YWxrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG4gXFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGFyZ3MtXFx1MDAzZXByaXZhdGU7XFxuIFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyh3YWxrLVxcdTAwM2VscnV2ZWMpO1xcbiBcXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KHdhbGstXFx1MDAzZWxydXZlYyk7XFxuLVxcdERFRklORV9NQVhfU0VRKHdhbGstXFx1MDAzZWxydXZlYyk7XFxuLVxcdGludCBnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpO1xcbiBcXHR1bnNpZ25lZCBpbnQgbnI7XFxuIFxcdHBtZF90IHBtZHZhbDtcXG4gXFxuQEAgLTM2MDEsNyArMzYwNyw3IEBAIHN0YXRpYyBib29sIHdhbGtfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuIFxcdFxcdGlmIChsYXN0ICE9IGZvbGlvKSB7XFxuLVxcdFxcdFxcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtXFx1MDAzZXZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XFxuK1xcdFxcdFxcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtXFx1MDAzZXZtYSwgd2Fsay1cXHUwMDNlbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XFxuIFxcbiBcXHRcXHRcXHRsYXN0ID0gZm9saW87XFxuIFxcdFxcdFxcdGRpcnR5ID0gZmFsc2U7XFxuQEAgLTM2MTQsNyArMzYyMCw3IEBAIHN0YXRpYyBib29sIHdhbGtfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbiBcXHRcXHR3YWxrLVxcdTAwM2VtbV9zdGF0c1tNTV9MRUFGX1lPVU5HXSArPSBucjtcXG4gXFx0fVxcbiBcXG4tXFx0d2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy1cXHUwMDNldm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcXG4rXFx0d2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy1cXHUwMDNldm1hLCB3YWxrLVxcdTAwM2VscnV2ZWMsIGxhc3QsIGRpcnR5KTtcXG4gXFx0bGFzdCA9IE5VTEw7XFxuIFxcbiBcXHRpZiAoaSBcXHUwMDNjIFBUUlNfUEVSX1BURSBcXHUwMDI2XFx1MDAyNiBnZXRfbmV4dF92bWEoUE1EX01BU0ssIFBBR0VfU0laRSwgYXJncywgXFx1MDAyNnN0YXJ0LCBcXHUwMDI2ZW5kKSlcXG5AQCAtMzYzNyw4ICszNjQzLDYgQEAgc3RhdGljIHZvaWQgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IHZtX2FyZWFcXG4gXFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGFyZ3MtXFx1MDAzZXByaXZhdGU7XFxuIFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyh3YWxrLVxcdTAwM2VscnV2ZWMpO1xcbiBcXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KHdhbGstXFx1MDAzZWxydXZlYyk7XFxuLVxcdERFRklORV9NQVhfU0VRKHdhbGstXFx1MDAzZWxydXZlYyk7XFxuLVxcdGludCBnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpO1xcbiBcXG4gXFx0Vk1fV0FSTl9PTl9PTkNFKHB1ZF9sZWFmKCpwdWQpKTtcXG4gXFxuQEAgLTM2OTIsNyArMzY5Niw3IEBAIHN0YXRpYyB2b2lkIHdhbGtfcG1kX3JhbmdlX2xvY2tlZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCB2bV9hcmVhXFxuIFxcdFxcdFxcdGdvdG8gbmV4dDtcXG4gXFxuIFxcdFxcdGlmIChsYXN0ICE9IGZvbGlvKSB7XFxuLVxcdFxcdFxcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XFxuK1xcdFxcdFxcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgd2Fsay1cXHUwMDNlbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XFxuIFxcbiBcXHRcXHRcXHRsYXN0ID0gZm9saW87XFxuIFxcdFxcdFxcdGRpcnR5ID0gZmFsc2U7XFxuQEAgLTM3MDYsNyArMzcxMCw3IEBAIHN0YXRpYyB2b2lkIHdhbGtfcG1kX3JhbmdlX2xvY2tlZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCB2bV9hcmVhXFxuIFxcdFxcdGkgPSBpIFxcdTAwM2UgTUlOX0xSVV9CQVRDSCA/IDAgOiBmaW5kX25leHRfYml0KGJpdG1hcCwgTUlOX0xSVV9CQVRDSCwgaSkgKyAxO1xcbiBcXHR9IHdoaWxlIChpIFxcdTAwM2M9IE1JTl9MUlVfQkFUQ0gpO1xcbiBcXG4tXFx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcXG4rXFx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCB3YWxrLVxcdTAwM2VscnV2ZWMsIGxhc3QsIGRpcnR5KTtcXG4gXFxuIFxcdGxhenlfbW11X21vZGVfZGlzYWJsZSgpO1xcbiBcXHRzcGluX3VubG9jayhwdGwpO1xcbkBAIC00MjcwLDggKzQyNzQsNiBAQCBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXFxuIFxcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBmb2xpb19wZ2RhdChmb2xpbyk7XFxuIFxcdHN0cnVjdCBscnV2ZWMgKmxydXZlYztcXG4gXFx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlO1xcbi1cXHR1bnNpZ25lZCBsb25nIG1heF9zZXE7XFxuLVxcdGludCBnZW47XFxuIFxcbiBcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKHB2bXctXFx1MDAzZXB0bCk7XFxuIFxcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb190ZXN0X2xydShmb2xpbyksIGZvbGlvKTtcXG5AQCAtNDMwOCw4ICs0MzEwLDYgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxcbiBcXG4gXFx0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX2ZvbGlvKGZvbGlvKTtcXG4gXFx0bHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIHBnZGF0KTtcXG4tXFx0bWF4X3NlcSA9IFJFQURfT05DRSgobHJ1dmVjKS1cXHUwMDNlbHJ1Z2VuLm1heF9zZXEpO1xcbi1cXHRnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpO1xcbiBcXHRtbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xcbiBcXG4gXFx0bGF6eV9tbXVfbW9kZV9lbmFibGUoKTtcXG5AQCAtNDM0MSw3ICs0MzQxLDcgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuIFxcdFxcdGlmIChsYXN0ICE9IGZvbGlvKSB7XFxuLVxcdFxcdFxcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XFxuK1xcdFxcdFxcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XFxuIFxcbiBcXHRcXHRcXHRsYXN0ID0gZm9saW87XFxuIFxcdFxcdFxcdGRpcnR5ID0gZmFsc2U7XFxuQEAgLTQzNTMsMTMgKzQzNTMsMTQgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxcbiBcXHRcXHR5b3VuZyArPSBucjtcXG4gXFx0fVxcbiBcXG4tXFx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcXG4rXFx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBscnV2ZWMsIGxhc3QsIGRpcnR5KTtcXG4gXFxuIFxcdGxhenlfbW11X21vZGVfZGlzYWJsZSgpO1xcbiBcXG4gXFx0LyogZmVlZGJhY2sgZnJvbSBybWFwIHdhbGtlcnMgdG8gcGFnZSB0YWJsZSB3YWxrZXJzICovXFxuIFxcdGlmIChtbV9zdGF0ZSBcXHUwMDI2XFx1MDAyNiBzdWl0YWJsZV90b19zY2FuKGksIHlvdW5nKSlcXG4tXFx0XFx0dXBkYXRlX2Jsb29tX2ZpbHRlcihtbV9zdGF0ZSwgbWF4X3NlcSwgcHZtdy1cXHUwMDNlcG1kKTtcXG4rXFx0XFx0dXBkYXRlX2Jsb29tX2ZpbHRlcihtbV9zdGF0ZSwgUkVBRF9PTkNFKGxydXZlYy1cXHUwMDNlbHJ1Z2VuLm1heF9zZXEpLFxcbitcXHRcXHRcXHRcXHQgICAgcHZtdy1cXHUwMDNlcG1kKTtcXG4gXFxuIFxcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcXG4gXFxuQEAgLTQ3MTYsNyArNDcxNyw3IEBAIHN0YXRpYyBib29sIGlzb2xhdGVfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc2NhXFxuIFxcbiBcXHQvKiBzZWUgdGhlIGNvbW1lbnQgb24gTFJVX1JFRlNfRkxBR1MgKi9cXG4gXFx0aWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pKVxcbi1cXHRcXHRzZXRfbWFza19iaXRzKFxcdTAwMjZmb2xpby1cXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgMCk7XFxuK1xcdFxcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XFxuIFxcbiBcXHRzdWNjZXNzID0gbHJ1X2dlbl9kZWxfZm9saW8obHJ1dmVjLCBmb2xpbywgdHJ1ZSk7XFxuIFxcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghc3VjY2VzcywgZm9saW8pO1xcbkBAIC00ODA5LDkgKzQ4MTAsOSBAQCBzdGF0aWMgaW50IGdldF90aWVyX2lkeChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlKVxcbiBcXHQgKiBUaGlzIHZhbHVlIGlzIGNob3NlbiBiZWNhdXNlIGFueSBvdGhlciB0aWVyIHdvdWxkIGhhdmUgYXQgbGVhc3QgdHdpY2VcXG4gXFx0ICogYXMgbWFueSByZWZhdWx0cyBhcyB0aGUgZmlyc3QgdGllci5cXG4gXFx0ICovXFxuLVxcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCAwLCAyLCBcXHUwMDI2c3ApO1xcbi1cXHRmb3IgKHRpZXIgPSAxOyB0aWVyIFxcdTAwM2MgTUFYX05SX1RJRVJTOyB0aWVyKyspIHtcXG4tXFx0XFx0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIHRpZXIsIDMsIFxcdTAwMjZwdik7XFxuK1xcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCBMUlVfVElFUl9NSU4sIExSVV9USUVSX01JTiwgMiwgXFx1MDAyNnNwKTtcXG4rXFx0Zm9yICh0aWVyID0gTFJVX1RJRVJfTUlOICsgMTsgdGllciBcXHUwMDNjPSBMUlVfVElFUl9NQVg7IHRpZXIrKykge1xcbitcXHRcXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgdHlwZSwgdGllciwgdGllciwgMywgXFx1MDAyNnB2KTtcXG4gXFx0XFx0aWYgKCFwb3NpdGl2ZV9jdHJsX2VycihcXHUwMDI2c3AsIFxcdTAwMjZwdikpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuQEAgLTQ4MzIsOCArNDgzMywxMCBAQCBzdGF0aWMgaW50IGdldF90eXBlX3RvX3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcylcXG4gXFx0ICogQ29tcGFyZSB0aGUgc3VtIG9mIGFsbCB0aWVycyBvZiBhbm9uIHdpdGggdGhhdCBvZiBmaWxlIHRvIGRldGVybWluZVxcbiBcXHQgKiB3aGljaCB0eXBlIHRvIHNjYW4uXFxuIFxcdCAqL1xcbi1cXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9BTk9OLCBNQVhfTlJfVElFUlMsIHN3YXBwaW5lc3MsIFxcdTAwMjZzcCk7XFxuLVxcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0ZJTEUsIE1BWF9OUl9USUVSUywgTUFYX1NXQVBQSU5FU1MgLSBzd2FwcGluZXNzLCBcXHUwMDI2cHYpO1xcbitcXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9BTk9OLCBMUlVfVElFUl9NSU4sIExSVV9USUVSX01BWCxcXG4rXFx0XFx0ICAgICAgc3dhcHBpbmVzcywgXFx1MDAyNnNwKTtcXG4rXFx0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fRklMRSwgTFJVX1RJRVJfTUlOLCBMUlVfVElFUl9NQVgsXFxuK1xcdFxcdCAgICAgIE1BWF9TV0FQUElORVNTIC0gc3dhcHBpbmVzcywgXFx1MDAyNnB2KTtcXG4gXFxuIFxcdHJldHVybiBwb3NpdGl2ZV9jdHJsX2VycihcXHUwMDI2c3AsIFxcdTAwMjZwdik7XFxuIH1cXG5AQCAtNDkzMiw4ICs0OTM1LDEwIEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHQvKiBkb24ndCBhZGQgcmVqZWN0ZWQgZm9saW9zIHRvIHRoZSBvbGRlc3QgZ2VuZXJhdGlvbiAqL1xcbi1cXHRcXHRpZiAobHJ1X2dlbl9mb2xpb19zZXEobHJ1dmVjLCBmb2xpbywgZmFsc2UpID09IG1pbl9zZXFbdHlwZV0pXFxuLVxcdFxcdFxcdHNldF9tYXNrX2JpdHMoXFx1MDAyNmZvbGlvLVxcdTAwM2VmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX2FjdGl2ZSkpO1xcbitcXHRcXHRpZiAobHJ1X2dlbl9mb2xpb19zZXEobHJ1dmVjLCBmb2xpbywgZmFsc2UpID09IG1pbl9zZXFbdHlwZV0pIHtcXG4rXFx0XFx0XFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcXG4rXFx0XFx0XFx0Zm9saW9fc2V0X2FjdGl2ZShmb2xpbyk7XFxuK1xcdFxcdH1cXG4gXFx0fVxcbiBcXG4gXFx0bW92ZV9mb2xpb3NfdG9fbHJ1KFxcdTAwMjZsaXN0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTk6MDM6MjQuODg1ODkyNTYyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6OTcwMDE0ODgxMDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTFJVX0dFTlwiLFxuICAgIFwiTFJVX0dFTl9FTkFCTEVEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZm9saW9fbWlncmF0ZV9mbGFnc1wiLFxuICAgIFwibHJ1X2dlbl9sb29rX2Fyb3VuZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBNdWx0aS1HZW4gTFJVIChNR0xSVSkgcGFnZSBmbGFncyBoYW5kbGluZyBhbmQgZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiBgbHJ1X3pvbmVfc2l6ZWAgdXBkYXRlcyBieSB1c2luZyBhdG9taWMgb3BlcmF0aW9ucy4gSXQgbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYywgc3BlY2lmaWNhbGx5IHBhZ2UgbWlncmF0aW9uIChgZm9saW9fbWlncmF0ZV9mbGFnc2ApIGFuZCBwYWdlIHJlY2xhaW0gbG9va2Fyb3VuZCAoYGxydV9nZW5fbG9va19hcm91bmRgKS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIG1ha2luZyB0aGVtIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDI1OWEyNTIyMzg3NmQwZjI3M2IzNGZlNmFlZjM0MzY2Yjc1NjA5OWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAyNSAxOTowMzoyMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbmluZGV4IDIxNWUyZTg3ZjQyYjIuLjdiODlkMGNiNWY2YzYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuKysrIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbkBAIC0xMTMsNyArMTEzLDcgQEAgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUge1xuIFx0LyogRmllbGRzIHdoaWNoIGdldCB1cGRhdGVkIG9mdGVuIGF0IHRoZSBlbmQuICovXG4gXHRzdHJ1Y3QgbHJ1dmVjXHRcdGxydXZlYztcbiBcdENBQ0hFTElORV9QQURESU5HKF9wYWQyXyk7XG4tXHR1bnNpZ25lZCBsb25nXHRcdGxydV96b25lX3NpemVbTUFYX05SX1pPTkVTXVtOUl9MUlVfTElTVFNdO1xuK1x0YXRvbWljX2xvbmdfdFx0XHRscnVfem9uZV9zaXplW01BWF9OUl9aT05FU11bTlJfTFJVX0xJU1RTXTtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwX3JlY2xhaW1faXRlclx0aXRlcjtcbiBcbiBcdC8qXG5AQCAtOTAyLDEwICs5MDIsMTUgQEAgc3RhdGljIGlubGluZVxuIHVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9nZXRfem9uZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRcdGVudW0gbHJ1X2xpc3QgbHJ1LCBpbnQgem9uZV9pZHgpXG4ge1xuK1x0bG9uZyB2YWw7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXo7XG4gXG4gXHRteiA9IGNvbnRhaW5lcl9vZihscnV2ZWMsIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlLCBscnV2ZWMpO1xuLVx0cmV0dXJuIFJFQURfT05DRShtei1cdTAwM2VscnVfem9uZV9zaXplW3pvbmVfaWR4XVtscnVdKTtcbitcdHZhbCA9IGF0b21pY19sb25nX3JlYWQoXHUwMDI2bXotXHUwMDNlbHJ1X3pvbmVfc2l6ZVt6b25lX2lkeF1bbHJ1XSk7XG4rXHRpZiAoV0FSTl9PTl9PTkNFKHZhbCBcdTAwM2MgMCkpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0dXJuIHZhbDtcbiB9XG4gXG4gdm9pZCBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzayk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaCBiL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmhcbmluZGV4IDYyMWM4NjUzZDhmN2UuLjhjZjgyOTg5ZWMyNjMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oXG5AQCAtMTAsNiArMTAsMTEgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91c2VyZmF1bHRmZF9rLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9sZWFmb3BzLmhcdTAwM2VcbiBcbitzdGF0aWMgaW5saW5lIGludCBmb2xpb19mbGFnc19pc19maWxlX2xydShjb25zdCB1bnNpZ25lZCBsb25nICpmbGFncylcbit7XG4rXHRyZXR1cm4gIXRlc3RfYml0KFBHX3N3YXBiYWNrZWQsIGZsYWdzKTtcbit9XG4rXG4gLyoqXG4gICogZm9saW9faXNfZmlsZV9scnUgLSBTaG91bGQgdGhlIGZvbGlvIGJlIG9uIGEgZmlsZSBMUlUgb3IgYW5vbiBMUlU/XG4gICogQGZvbGlvOiBUaGUgZm9saW8gdG8gdGVzdC5cbkBAIC0yNyw3ICszMiw3IEBAXG4gICovXG4gc3RhdGljIGlubGluZSBpbnQgZm9saW9faXNfZmlsZV9scnUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4tXHRyZXR1cm4gIWZvbGlvX3Rlc3Rfc3dhcGJhY2tlZChmb2xpbyk7XG4rXHRyZXR1cm4gZm9saW9fZmxhZ3NfaXNfZmlsZV9scnUoY29uc3RfZm9saW9fZmxhZ3MoZm9saW8sIDApKTtcbiB9XG4gXG4gc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIF9fdXBkYXRlX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbkBAIC0xNDIsMTAgKzE0Nyw0MiBAQCBzdGF0aWMgaW5saW5lIGludCBscnVfdGllcl9mcm9tX3JlZnMoaW50IHJlZnMsIGJvb2wgd29ya2luZ3NldClcbiBcdHJldHVybiB3b3JraW5nc2V0ID8gTUFYX05SX1RJRVJTIC0gMSA6IG9yZGVyX2Jhc2VfMihyZWZzKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X3JlZnMoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbisvKipcbisgKiBscnVfZ2VuX2Zyb21fZmxhZ3MgLSBSZXR1cm4gdGhlIExSVSBnZW5lcmF0aW9uIG51bWJlciBmcm9tIGZvbGlvIGZsYWdzLlxuKyAqIEBmbGFnczogZm9saW8gZmxhZ3NcbisgKlxuKyAqIFJldHVybnM6IEEgbnVtYmVyIGJldHdlZW4gMCBhbmQgKE1BWF9OUl9HRU5TIC0gMSksIGluY2x1c2l2ZS4gUmV0dXJuc1xuKyAqIC0xIGlmIHRoZSBmbGFncyBpbmRpY2F0ZSB0aGUgZm9saW8gaXMgb2ZmIHRoZSBsaXN0IChlLmcuLCBpc29sYXRlZCkuXG4rICovXG4rc3RhdGljIGlubGluZSBpbnQgbHJ1X2dlbl9mcm9tX2ZsYWdzKHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4re1xuK1x0aW50IGdlbiA9ICgoZmxhZ3MgXHUwMDI2IExSVV9HRU5fTUFTSykgXHUwMDNlXHUwMDNlIExSVV9HRU5fUEdPRkYpO1xuK1xuK1x0QlVJTERfQlVHX09OKExSVV9HRU5fTUFTSyBcdTAwMjYgTFJVX1JFRlNfTUFTSyk7XG4rXHRnZW4gLT0gMTtcbitcdFZNX1dBUk5fT05fT05DRShnZW4gIT0gLTEgXHUwMDI2XHUwMDI2IGdlbiBcdTAwM2U9IE1BWF9OUl9HRU5TKTtcbitcdHJldHVybiBnZW47XG4rfVxuK1xuKy8qKlxuKyAqIGxydV9nZW5fc2V0X2ZsYWdzIC0gU2V0IHRoZSBMUlUgZ2VuZXJhdGlvbiBudW1iZXIgdG8gc3BlY2lmaWVkIGZvbGlvIGZsYWdzLlxuKyAqIEBmbGFnczogcG9pbnRlciB0byB0aGUgZm9saW8gZmxhZ3NcbisgKiBAZ2VuOiBnZW5lcmF0aW9uIG51bWJlciwgYmV0d2VlbiAwIGFuZCAoTUFYX05SX0dFTlMgLSAxKSwgaW5jbHVzaXZlLlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBscnVfZ2VuX3NldF9mbGFncyh1bnNpZ25lZCBsb25nICpmbGFncywgaW50IGdlbilcbiB7XG4tXHR1bnNpZ25lZCBsb25nIGZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVx1MDAzZWZsYWdzLmYpO1xuK1x0Vk1fV0FSTl9PTl9PTkNFKGdlbiBcdTAwM2U9IE1BWF9OUl9HRU5TIHx8IGdlbiBcdTAwM2MgMCk7XG4rXG4rXHQqZmxhZ3MgXHUwMDI2PSB+TFJVX0dFTl9NQVNLO1xuK1x0KmZsYWdzIHw9IChnZW4gKyAxVUwpIFx1MDAzY1x1MDAzYyBMUlVfR0VOX1BHT0ZGO1xuK31cbiBcbisvKipcbisgKiBscnVfcmVmc19mcm9tX2ZsYWdzIC0gUmV0dXJuIExSVSByZWZlcmVuY2VkIC8gYWNjZXNzIGNvdW50IGZyb20gZm9saW8gZmxhZ3MuXG4rICogQGZsYWdzOiBmb2xpbyBmbGFnc1xuKyAqL1xuK3N0YXRpYyBpbmxpbmUgaW50IGxydV9yZWZzX2Zyb21fZmxhZ3ModW5zaWduZWQgbG9uZyBmbGFncylcbit7XG4gXHRpZiAoIShmbGFncyBcdTAwMjYgQklUKFBHX3JlZmVyZW5jZWQpKSlcbiBcdFx0cmV0dXJuIDA7XG4gXHQvKlxuQEAgLTE1NSwxMSArMTkyLDQwIEBAIHN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9yZWZzKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRyZXR1cm4gKChmbGFncyBcdTAwMjYgTFJVX1JFRlNfTUFTSykgXHUwMDNlXHUwMDNlIExSVV9SRUZTX1BHT0ZGKSArIDE7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9nZW4oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbisvKipcbisgKiBscnVfcmVmc19zZXRfZmxhZ3MgLSBTZXQgdGhlIExSVSByZWZlcmVuY2VkIC8gYWNjZXNzIGNvdW50IHRvIHNwZWNpZmllZCBmb2xpbyBmbGFncy5cbisgKiBAZmxhZ3M6IHBvaW50ZXIgdG8gdGhlIGZvbGlvIGZsYWdzXG4rICogQHJlZnM6IHJlZmVyZW5jZWQgLyBhY2Nlc3MgY291bnQgbnVtYmVyLCBiZXR3ZWVuIDAgYW5kIExSVV9SRUZTX01BWCwgaW5jbHVzaXZlLlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBscnVfcmVmc19zZXRfZmxhZ3ModW5zaWduZWQgbG9uZyAqZmxhZ3MsIHVuc2lnbmVkIGludCByZWZzKVxuK3tcbitcdFZNX1dBUk5fT05fT05DRShyZWZzIFx1MDAzZSBMUlVfUkVGU19NQVgpO1xuK1x0QlVJTERfQlVHX09OKExSVV9SRUZTX01BWCAhPSAoTFJVX1JFRlNfTUFTSyBcdTAwM2VcdTAwM2UgTFJVX1JFRlNfUEdPRkYpICsgMSk7XG4rXG4rXHQqZmxhZ3MgXHUwMDI2PSB+TFJVX1JFRlNfRkxBR1M7XG4rXHRpZiAoIXJlZnMpXG4rXHRcdHJldHVybjtcbitcdCpmbGFncyB8PSAoQklUKFBHX3JlZmVyZW5jZWQpIHwgKChyZWZzIC0gMVVMKSBcdTAwM2NcdTAwM2MgTFJVX1JFRlNfUEdPRkYpKTtcbit9XG4rXG4rc3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X3JlZnMoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRyZXR1cm4gbHJ1X3JlZnNfZnJvbV9mbGFncyhSRUFEX09OQ0UoKmNvbnN0X2ZvbGlvX2ZsYWdzKGZvbGlvLCAwKSkpO1xuK31cbitcbitzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fc2V0X2xydV9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCByZWZzKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tXHUwMDNlZmxhZ3MuZik7XG4rXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKCpmb2xpb19mbGFncyhmb2xpbywgMCkpO1xuIFxuLVx0cmV0dXJuICgoZmxhZ3MgXHUwMDI2IExSVV9HRU5fTUFTSykgXHUwMDNlXHUwMDNlIExSVV9HRU5fUEdPRkYpIC0gMTtcbitcdGRvIHtcbitcdFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzO1xuK1x0XHRscnVfcmVmc19zZXRfZmxhZ3MoXHUwMDI2bmV3X2ZsYWdzLCByZWZzKTtcbitcdH0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksIFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9nZW4oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRyZXR1cm4gbHJ1X2dlbl9mcm9tX2ZsYWdzKFJFQURfT05DRSgqY29uc3RfZm9saW9fZmxhZ3MoZm9saW8sIDApKSk7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2lzX2FjdGl2ZShjb25zdCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBnZW4pXG5AQCAtMjcwLDcgKzMzNiw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2FkZF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKHNlcSk7XG4gXHRmbGFncyA9IChnZW4gKyAxVUwpIFx1MDAzY1x1MDAzYyBMUlVfR0VOX1BHT0ZGO1xuIFx0Lyogc2VlIHRoZSBjb21tZW50IG9uIE1JTl9OUl9HRU5TIGFib3V0IFBHX2FjdGl2ZSAqL1xuLVx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfR0VOX01BU0sgfCBCSVQoUEdfYWN0aXZlKSwgZmxhZ3MpO1xuK1x0c2V0X21hc2tfYml0cyhmb2xpb19mbGFncyhmb2xpbywgMCksIExSVV9HRU5fTUFTSyB8IEJJVChQR19hY3RpdmUpLCBmbGFncyk7XG4gXG4gXHRscnVfZ2VuX3VwZGF0ZV9zaXplKGxydXZlYywgZm9saW8sIC0xLCBnZW4pO1xuIFx0LyogZm9yIGZvbGlvX3JvdGF0ZV9yZWNsYWltYWJsZSgpICovXG5AQCAtMjk1LDcgKzM2MSw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2RlbF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXG4gXHQvKiBmb3IgZm9saW9fbWlncmF0ZV9mbGFncygpICovXG4gXHRmbGFncyA9ICFyZWNsYWltaW5nIFx1MDAyNlx1MDAyNiBscnVfZ2VuX2lzX2FjdGl2ZShscnV2ZWMsIGdlbikgPyBCSVQoUEdfYWN0aXZlKSA6IDA7XG4tXHRmbGFncyA9IHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX0dFTl9NQVNLLCBmbGFncyk7XG4rXHRmbGFncyA9IHNldF9tYXNrX2JpdHMoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBMUlVfR0VOX01BU0ssIGZsYWdzKTtcbiBcdGdlbiA9ICgoZmxhZ3MgXHUwMDI2IExSVV9HRU5fTUFTSykgXHUwMDNlXHUwMDNlIExSVV9HRU5fUEdPRkYpIC0gMTtcbiBcbiBcdGxydV9nZW5fdXBkYXRlX3NpemUobHJ1dmVjLCBmb2xpbywgZ2VuLCAtMSk7XG5AQCAtMzA0LDExICszNzAsMTkgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZGVsX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fbWlncmF0ZV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZClcbisvKipcbisgKiBmb2xpb19taWdyYXRlX2xydV9yZWZzIC0gY29weSB0aGUgcmVmZXJlbmNlIHN0YXRlIHRvIGEgbmV3IGZvbGlvXG4rICogQG5ldzogdGhlIGRlc3RpbmF0aW9uIGZvbGlvXG4rICogQG9sZDogdGhlIHNvdXJjZSBmb2xpb1xuKyAqXG4rICogVHJhbnNmZXIgdGhlIHJlZmVyZW5jZSBzdGF0ZSB0byBAbmV3IGR1cmluZyBtaWdyYXRpb246IHRoZSBNR0xSVVxuKyAqIHJlZnMgY291bnQsIGluY2x1ZGluZyBQR19yZWZlcmVuY2VkLCBvciBqdXN0IFBHX3JlZmVyZW5jZWQgZm9yIHRoZVxuKyAqIGFjdGl2ZS9pbmFjdGl2ZSBMUlUuXG4rICovXG4rc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgcmVmcyA9IFJFQURfT05DRShvbGQtXHUwMDNlZmxhZ3MuZikgXHUwMDI2IExSVV9SRUZTX01BU0s7XG4tXG4tXHRzZXRfbWFza19iaXRzKFx1MDAyNm5ldy1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19NQVNLLCByZWZzKTtcbitcdEJVSUxEX0JVR19PTihMUlVfUkVGU19NQVNLIFx1MDAyNiBCSVQoUEdfcmVmZXJlbmNlZCkpO1xuK1x0Zm9saW9fc2V0X2xydV9yZWZzKG5ldywgZm9saW9fbHJ1X3JlZnMob2xkKSk7XG4gfVxuICNlbHNlIC8qICFDT05GSUdfTFJVX0dFTiAqL1xuIFxuQEAgLTMzNyw5ICs0MTEsMTAgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZGVsX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfcmVmcyhzdHJ1Y3QgZm9saW8gKm5ldywgY29uc3Qgc3RydWN0IGZvbGlvICpvbGQpXG4rc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKVxuIHtcbi1cbitcdGlmIChmb2xpb190ZXN0X3JlZmVyZW5jZWQob2xkKSlcbitcdFx0Zm9saW9fc2V0X3JlZmVyZW5jZWQobmV3KTtcbiB9XG4gI2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaCBiL2luY2x1ZGUvbGludXgvbW16b25lLmhcbmluZGV4IDk0ZjljM2ZmNTQxNjAuLjliMjdjZjUzYmRiYzcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG5AQCAtNDkyLDExICs0OTIsMTQgQEAgZW51bSBscnV2ZWNfZmxhZ3Mge1xuICAqIGZvbGlvLVx1MDAzZWZsYWdzLCBtYXNrZWQgYnkgTFJVX1JFRlNfTUFTSy5cbiAgKi9cbiAjZGVmaW5lIE1BWF9OUl9USUVSU1x0XHQ0VVxuKyNkZWZpbmUgTFJVX1RJRVJfTUlOXHRcdDBVXG4rI2RlZmluZSBMUlVfVElFUl9NQVhcdFx0KE1BWF9OUl9USUVSUyAtIDEpXG4gXG4gI2lmbmRlZiBfX0dFTkVSQVRJTkdfQk9VTkRTX0hcbiBcbiAjZGVmaW5lIExSVV9HRU5fTUFTS1x0XHQoKEJJVChMUlVfR0VOX1dJRFRIKSAtIDEpIFx1MDAzY1x1MDAzYyBMUlVfR0VOX1BHT0ZGKVxuICNkZWZpbmUgTFJVX1JFRlNfTUFTS1x0XHQoKEJJVChMUlVfUkVGU19XSURUSCkgLSAxKSBcdTAwM2NcdTAwM2MgTFJVX1JFRlNfUEdPRkYpXG4rI2RlZmluZSBMUlVfUkVGU19NQVhcdFx0QklUKExSVV9SRUZTX1dJRFRIKVxuIFxuIC8qXG4gICogRm9yIGZvbGlvcyBhY2Nlc3NlZCBtdWx0aXBsZSB0aW1lcyB0aHJvdWdoIGZpbGUgZGVzY3JpcHRvcnMsXG5kaWZmIC0tZ2l0IGEvbW0vZm9saW8uYyBiL21tL2ZvbGlvLmNcbmluZGV4IGMwMmRjZWE5YzAzYzIuLmE5MzIwNTkwNTdhYzEgMTAwNjQ0XG4tLS0gYS9tbS9mb2xpby5jXG4rKysgYi9tbS9mb2xpby5jXG5AQCAtMzUzLDI2ICszNTMsMjggQEAgc3RhdGljIHZvaWQgX19scnVfY2FjaGVfYWN0aXZhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbiBcbiBzdGF0aWMgdm9pZCBscnVfZ2VuX2luY19yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuLVx0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRShmb2xpby1cdTAwM2VmbGFncy5mKTtcbitcdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XG4rXHRpbnQgcmVmcztcbiBcbiBcdGlmIChmb2xpb190ZXN0X3VuZXZpY3RhYmxlKGZvbGlvKSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0Lyogc2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTICovXG4tXHRpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykpIHtcbi1cdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19NQVNLLCBCSVQoUEdfcmVmZXJlbmNlZCkpO1xuK1x0aWYgKCFmb2xpb19scnVfcmVmcyhmb2xpbykpIHtcbitcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAxKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuIFx0ZG8ge1xuLVx0XHRpZiAoKG9sZF9mbGFncyBcdTAwMjYgTFJVX1JFRlNfTUFTSykgPT0gTFJVX1JFRlNfTUFTSykge1xuK1x0XHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3M7XG4rXHRcdHJlZnMgPSBscnVfcmVmc19mcm9tX2ZsYWdzKG9sZF9mbGFncyk7XG4rXHRcdGlmIChyZWZzID09IExSVV9SRUZTX01BWCkge1xuIFx0XHRcdGlmICghZm9saW9fdGVzdF93b3JraW5nc2V0KGZvbGlvKSlcbiBcdFx0XHRcdGZvbGlvX3NldF93b3JraW5nc2V0KGZvbGlvKTtcbiBcdFx0XHRyZXR1cm47XG4gXHRcdH1cbi1cbi1cdFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzICsgQklUKExSVV9SRUZTX1BHT0ZGKTtcbi1cdH0gd2hpbGUgKCF0cnlfY21weGNoZyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xuK1x0XHRscnVfcmVmc19zZXRfZmxhZ3MoXHUwMDI2bmV3X2ZsYWdzLCByZWZzICsgMSk7XG4rXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBscnVfZ2VuX2NsZWFyX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcbkBAIC0zODQsNyArMzg2LDggQEAgc3RhdGljIGJvb2wgbHJ1X2dlbl9jbGVhcl9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRpZiAoZ2VuIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbi1cdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MgfCBCSVQoUEdfd29ya2luZ3NldCksIDApO1xuK1x0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcbitcdGZvbGlvX2NsZWFyX3dvcmtpbmdzZXQoZm9saW8pO1xuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuIFx0c2VxID0gUkVBRF9PTkNFKGZvbGlvX2xydXZlYyhmb2xpbyktXHUwMDNlbHJ1Z2VuLm1pbl9zZXFbdHlwZV0pO1xuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuY1xuaW5kZXggMTFiODVmNGI2ODI4Yi4uYTc1NzJkZWQ1NmM5ZCAxMDA2NDRcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xuKysrIGIvbW0vbWVtY29udHJvbC5jXG5AQCAtMTUyOSwyOCArMTUyOSwxMiBAQCB2b2lkIG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBscnVfbGlzdCBscnUsXG4gXHRcdFx0XHRpbnQgemlkLCBsb25nIG5yX3BhZ2VzKVxuIHtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICptejtcbi1cdHVuc2lnbmVkIGxvbmcgKmxydV9zaXplO1xuLVx0bG9uZyBzaXplO1xuIFxuIFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0bXogPSBjb250YWluZXJfb2YobHJ1dmVjLCBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSwgbHJ1dmVjKTtcbi1cdGxydV9zaXplID0gXHUwMDI2bXotXHUwMDNlbHJ1X3pvbmVfc2l6ZVt6aWRdW2xydV07XG4tXG4tXHRpZiAobnJfcGFnZXMgXHUwMDNjIDApXG4tXHRcdCpscnVfc2l6ZSArPSBucl9wYWdlcztcbi1cbi1cdHNpemUgPSAqbHJ1X3NpemU7XG4tXHRpZiAoV0FSTl9PTkNFKHNpemUgXHUwMDNjIDAsXG4tXHRcdFwiJXMoJXAsICVkLCAlbGQpOiBscnVfc2l6ZSAlbGRcXG5cIixcbi1cdFx0X19mdW5jX18sIGxydXZlYywgbHJ1LCBucl9wYWdlcywgc2l6ZSkpIHtcbi1cdFx0Vk1fQlVHX09OKDEpO1xuLVx0XHQqbHJ1X3NpemUgPSAwO1xuLVx0fVxuLVxuLVx0aWYgKG5yX3BhZ2VzIFx1MDAzZSAwKVxuLVx0XHQqbHJ1X3NpemUgKz0gbnJfcGFnZXM7XG4rXHRhdG9taWNfbG9uZ19hZGQobnJfcGFnZXMsIFx1MDAyNm16LVx1MDAzZWxydV96b25lX3NpemVbemlkXVtscnVdKTtcbiB9XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZS5jIGIvbW0vbWlncmF0ZS5jXG5pbmRleCAxNWI0NTgzMmJjZmE3Li5hMzY5ZDBjOTVjMzg2IDEwMDY0NFxuLS0tIGEvbW0vbWlncmF0ZS5jXG4rKysgYi9tbS9taWdyYXRlLmNcbkBAIC03NzYsOCArNzc2LDkgQEAgdm9pZCBmb2xpb19taWdyYXRlX2ZsYWdzKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0aW50IGNwdXBpZDtcbiBcbi1cdGlmIChmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pKVxuLVx0XHRmb2xpb19zZXRfcmVmZXJlbmNlZChuZXdmb2xpbyk7XG4rXHQvKiBDb3B5IHRoZSByZWZlcmVuY2Ugc3RhdGUsIGluY2x1ZGluZyBQR19yZWZlcmVuY2VkICovXG4rXHRmb2xpb19taWdyYXRlX2xydV9yZWZzKG5ld2ZvbGlvLCBmb2xpbyk7XG4rXG4gXHRpZiAoZm9saW9fdGVzdF91cHRvZGF0ZShmb2xpbykpXG4gXHRcdGZvbGlvX21hcmtfdXB0b2RhdGUobmV3Zm9saW8pO1xuIFx0aWYgKGZvbGlvX3Rlc3RfY2xlYXJfYWN0aXZlKGZvbGlvKSkge1xuQEAgLTgwNyw3ICs4MDgsNiBAQCB2b2lkIGZvbGlvX21pZ3JhdGVfZmxhZ3Moc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdGlmIChmb2xpb190ZXN0X2lkbGUoZm9saW8pKVxuIFx0XHRmb2xpb19zZXRfaWRsZShuZXdmb2xpbyk7XG4gXG4tXHRmb2xpb19taWdyYXRlX3JlZnMobmV3Zm9saW8sIGZvbGlvKTtcbiBcdC8qXG4gXHQgKiBDb3B5IE5VTUEgaW5mb3JtYXRpb24gdG8gdGhlIG5ldyBwYWdlLCB0byBwcmV2ZW50IG92ZXItZWFnZXJcbiBcdCAqIGZ1dHVyZSBtaWdyYXRpb25zIG9mIHRoaXMgc2FtZSBwYWdlLlxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IDczYTgxYjRhM2UxNjQuLjZmZGE5NDhhZWNmMmMgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuKysrIGIvbW0vdm1zY2FuLmNcbkBAIC04NDMsMTkgKzg0MywyMiBAQCBzdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXG4gXHRpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykgXHUwMDI2XHUwMDI2ICFmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pKSB7XG4gXHRcdC8qIEFjdGl2YXRlIGZpbGUtYmFja2VkIGV4ZWN1dGFibGUgZm9saW9zIGFmdGVyIGZpcnN0IHVzYWdlLiAqL1xuIFx0XHRpZiAoaXNfZXhlY19maWxlX2ZvbGlvKGZvbGlvLCB2bWFfZmxhZ3MpKSB7XG4tXHRcdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX3dvcmtpbmdzZXQpKTtcbitcdFx0XHRmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7XG4rXHRcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcbiBcdFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdFx0fVxuIFxuLVx0XHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX01BU0ssIEJJVChQR19yZWZlcmVuY2VkKSk7XG4rXHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMSk7XG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbiBcbiBcdC8qIFByb21vdGUgb24gc2Vjb25kIGFjY2VzcyAqL1xuLVx0aWYgKGZvbGlvX2xydV9yZWZzKGZvbGlvKSBcdTAwM2UgMSlcbi1cdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX3dvcmtpbmdzZXQpKTtcbi1cdGVsc2VcbitcdGlmIChmb2xpb19scnVfcmVmcyhmb2xpbykgXHUwMDNlIDEpIHtcbitcdFx0Zm9saW9fc2V0X3dvcmtpbmdzZXQoZm9saW8pO1xuK1x0XHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xuK1x0fSBlbHNlIHtcbiBcdFx0Zm9saW9fbWFya19hY2Nlc3NlZChmb2xpbyk7XG4rXHR9XG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gI2Vsc2VcbkBAIC0zMTk1LDggKzMxOTgsOCBAQCBzdHJ1Y3QgY3RybF9wb3Mge1xuIFx0aW50IGdhaW47XG4gfTtcbiBcbi1zdGF0aWMgdm9pZCByZWFkX2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCB0aWVyLCBpbnQgZ2Fpbixcbi1cdFx0XHQgIHN0cnVjdCBjdHJsX3BvcyAqcG9zKVxuK3N0YXRpYyB2b2lkIHJlYWRfY3RybF9wb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHRpZXJfbWluLFxuK1x0XHRcdCAgaW50IHRpZXJfbWF4LCBpbnQgZ2Fpbiwgc3RydWN0IGN0cmxfcG9zICpwb3MpXG4ge1xuIFx0aW50IGk7XG4gXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbkBAIC0zMjA1LDcgKzMyMDgsNyBAQCBzdGF0aWMgdm9pZCByZWFkX2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCB0aWVyLCBpbnQgZ2FpbixcbiBcdHBvcy1cdTAwM2VnYWluID0gZ2FpbjtcbiBcdHBvcy1cdTAwM2VyZWZhdWx0ZWQgPSBwb3MtXHUwMDNldG90YWwgPSAwO1xuIFxuLVx0Zm9yIChpID0gdGllciAlIE1BWF9OUl9USUVSUzsgaSBcdTAwM2M9IG1pbih0aWVyLCBNQVhfTlJfVElFUlMgLSAxKTsgaSsrKSB7XG4rXHRmb3IgKGkgPSB0aWVyX21pbjsgaSBcdTAwM2M9IHRpZXJfbWF4OyBpKyspIHtcbiBcdFx0cG9zLVx1MDAzZXJlZmF1bHRlZCArPSBscnVnZW4tXHUwMDNlYXZnX3JlZmF1bHRlZFt0eXBlXVtpXSArXG4gXHRcdFx0XHQgIGF0b21pY19sb25nX3JlYWQoXHUwMDI2bHJ1Z2VuLVx1MDAzZXJlZmF1bHRlZFtoaXN0XVt0eXBlXVtpXSk7XG4gXHRcdHBvcy1cdTAwM2V0b3RhbCArPSBscnVnZW4tXHUwMDNlYXZnX3RvdGFsW3R5cGVdW2ldICtcbkBAIC0zMjY2LDExICszMjY5LDExIEBAIHN0YXRpYyBib29sIHBvc2l0aXZlX2N0cmxfZXJyKHN0cnVjdCBjdHJsX3BvcyAqc3AsIHN0cnVjdCBjdHJsX3BvcyAqcHYpXG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbiBcbiAvKiBwcm9tb3RlIHBhZ2VzIGFjY2Vzc2VkIHRocm91Z2ggcGFnZSB0YWJsZXMgKi9cbi1zdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGdlbiwgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcbitzdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5ld19nZW4sIGludCAqaXNfZmlsZSxcbitcdFx0XHQgICAgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcbiB7XG4tXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVx1MDAzZWZsYWdzLmYpO1xuLVxuLVx0Vk1fV0FSTl9PTl9PTkNFKGdlbiBcdTAwM2U9IE1BWF9OUl9HRU5TKTtcbitcdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XG4rXHRpbnQgb2xkX2dlbjtcbiBcbiBcdC8qXG4gXHQgKiBTZWUgdGhlIGNvbW1lbnQgb24gTFJVX1JFRlNfRkxBR1MsIGFuZCBhY3RpdmF0ZSBmaWxlLWJhY2tlZFxuQEAgLTMyNzksMjAgKzMyODIsMjUgQEAgc3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBnZW4sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFcbiBcdCAqL1xuIFx0aWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pIFx1MDAyNlx1MDAyNiAhZm9saW9fdGVzdF93b3JraW5nc2V0KGZvbGlvKSBcdTAwMjZcdTAwMjZcbiBcdCAgICAhaXNfZXhlY19maWxlX2ZvbGlvKGZvbGlvLCB2bWFfZmxhZ3MpKSB7XG4tXHRcdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgQklUKFBHX3JlZmVyZW5jZWQpKTtcbitcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAxKTtcbiBcdFx0cmV0dXJuIC0xO1xuIFx0fVxuIFxuIFx0ZG8ge1xuK1x0XHRvbGRfZ2VuID0gbHJ1X2dlbl9mcm9tX2ZsYWdzKG9sZF9mbGFncyk7XG4rXHRcdG5ld19mbGFncyA9IG9sZF9mbGFncztcbitcbiBcdFx0LyogbHJ1X2dlbl9kZWxfZm9saW8oKSBoYXMgaXNvbGF0ZWQgdGhpcyBwYWdlPyAqL1xuLVx0XHRpZiAoIShvbGRfZmxhZ3MgXHUwMDI2IExSVV9HRU5fTUFTSykpXG4tXHRcdFx0cmV0dXJuIC0xO1xuK1x0XHRpZiAob2xkX2dlbiBcdTAwM2MgMClcbitcdFx0XHRicmVhaztcbiBcbi1cdFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzIFx1MDAyNiB+KExSVV9HRU5fTUFTSyB8IExSVV9SRUZTX0ZMQUdTKTtcbi1cdFx0bmV3X2ZsYWdzIHw9ICgoZ2VuICsgMVVMKSBcdTAwM2NcdTAwM2MgTFJVX0dFTl9QR09GRikgfCBCSVQoUEdfd29ya2luZ3NldCk7XG4tXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbitcdFx0bHJ1X2dlbl9zZXRfZmxhZ3MoXHUwMDI2bmV3X2ZsYWdzLCBuZXdfZ2VuKTtcbitcdFx0bHJ1X3JlZnNfc2V0X2ZsYWdzKFx1MDAyNm5ld19mbGFncywgMCk7XG4rXHRcdG5ld19mbGFncyB8PSBCSVQoUEdfd29ya2luZ3NldCk7XG4rXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xuIFxuLVx0cmV0dXJuICgob2xkX2ZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spIFx1MDAzZVx1MDAzZSBMUlVfR0VOX1BHT0ZGKSAtIDE7XG4rXHQqaXNfZmlsZSA9IGZvbGlvX2ZsYWdzX2lzX2ZpbGVfbHJ1KFx1MDAyNm9sZF9mbGFncyk7XG4rXHRyZXR1cm4gb2xkX2dlbjtcbiB9XG4gXG4gLyogcHJvdGVjdCBwYWdlcyBhY2Nlc3NlZCBtdWx0aXBsZSB0aW1lcyB0aHJvdWdoIGZpbGUgZGVzY3JpcHRvcnMgKi9cbkBAIC0zMzAxLDIxICszMzA5LDIwIEBAIHN0YXRpYyBpbnQgZm9saW9faW5jX2dlbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRpbnQgdHlwZSA9IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTtcbiBcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xuIFx0aW50IG5ld19nZW4sIG9sZF9nZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGxydWdlbi1cdTAwM2VtaW5fc2VxW3R5cGVdKTtcbi1cdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tXHUwMDNlZmxhZ3MuZik7XG4tXG4tXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIShvbGRfZmxhZ3MgXHUwMDI2IExSVV9HRU5fTUFTSyksIGZvbGlvKTtcbitcdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XG4gXG4gXHRkbyB7XG4tXHRcdG5ld19nZW4gPSAoKG9sZF9mbGFncyBcdTAwMjYgTFJVX0dFTl9NQVNLKSBcdTAwM2VcdTAwM2UgTFJVX0dFTl9QR09GRikgLSAxO1xuK1x0XHRuZXdfZ2VuID0gbHJ1X2dlbl9mcm9tX2ZsYWdzKG9sZF9mbGFncyk7XG4rXG4gXHRcdC8qIGZvbGlvX3VwZGF0ZV9nZW4oKSBoYXMgcHJvbW90ZWQgdGhpcyBwYWdlPyAqL1xuIFx0XHRpZiAobmV3X2dlbiBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IG5ld19nZW4gIT0gb2xkX2dlbilcbiBcdFx0XHRyZXR1cm4gbmV3X2dlbjtcbiBcbitcdFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzO1xuIFx0XHRuZXdfZ2VuID0gKG9sZF9nZW4gKyAxKSAlIE1BWF9OUl9HRU5TO1xuLVxuLVx0XHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3MgXHUwMDI2IH4oTFJVX0dFTl9NQVNLIHwgTFJVX1JFRlNfRkxBR1MpO1xuLVx0XHRuZXdfZmxhZ3MgfD0gKG5ld19nZW4gKyAxVUwpIFx1MDAzY1x1MDAzYyBMUlVfR0VOX1BHT0ZGO1xuLVx0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XG4rXHRcdGxydV9nZW5fc2V0X2ZsYWdzKFx1MDAyNm5ld19mbGFncywgbmV3X2dlbik7XG4rXHRcdGxydV9yZWZzX3NldF9mbGFncyhcdTAwMjZuZXdfZmxhZ3MsIDApO1xuK1x0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbiBcbiBcdGxydV9nZW5fdXBkYXRlX3NpemUobHJ1dmVjLCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbik7XG4gXG5AQCAtMzMyMyw5ICszMzMwLDggQEAgc3RhdGljIGludCBmb2xpb19pbmNfZ2VuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcbiB9XG4gXG4gc3RhdGljIHZvaWQgdXBkYXRlX2JhdGNoX3NpemUoc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaywgc3RydWN0IGZvbGlvICpmb2xpbyxcbi1cdFx0XHQgICAgICBpbnQgb2xkX2dlbiwgaW50IG5ld19nZW4pXG4rXHRcdFx0ICAgICAgaW50IG9sZF9nZW4sIGludCBuZXdfZ2VuLCBpbnQgdHlwZSlcbiB7XG4tXHRpbnQgdHlwZSA9IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTtcbiBcdGludCB6b25lID0gZm9saW9fem9uZW51bShmb2xpbyk7XG4gXHRpbnQgZGVsdGEgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4gXG5AQCAtMzUxMiwyMiArMzUxOCwyNCBAQCBzdGF0aWMgYm9vbCBzdWl0YWJsZV90b19zY2FuKGludCB0b3RhbCwgaW50IHlvdW5nKVxuIH1cbiBcbiBzdGF0aWMgdm9pZCB3YWxrX3VwZGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi1cdFx0c3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5ld19nZW4sIGJvb2wgZGlydHkpXG4rXHRcdHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBkaXJ0eSlcbiB7XG4tXHRpbnQgb2xkX2dlbjtcbitcdGludCBuZXdfZ2VuLCBvbGRfZ2VuLCBmaWxlO1xuIFxuIFx0aWYgKCFmb2xpbylcbiBcdFx0cmV0dXJuO1xuIFxuK1x0bmV3X2dlbiA9IGxydV9nZW5fZnJvbV9zZXEoUkVBRF9PTkNFKGxydXZlYy1cdTAwM2VscnVnZW4ubWF4X3NlcSkpO1xuK1xuIFx0aWYgKGRpcnR5IFx1MDAyNlx1MDAyNiAhZm9saW9fdGVzdF9kaXJ0eShmb2xpbykgXHUwMDI2XHUwMDI2XG4gXHQgICAgIShmb2xpb190ZXN0X2Fub24oZm9saW8pIFx1MDAyNlx1MDAyNiBmb2xpb190ZXN0X3N3YXBiYWNrZWQoZm9saW8pIFx1MDAyNlx1MDAyNlxuIFx0ICAgICAgIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkpXG4gXHRcdGZvbGlvX21hcmtfZGlydHkoZm9saW8pO1xuIFxuIFx0aWYgKHdhbGspIHtcbi1cdFx0b2xkX2dlbiA9IGZvbGlvX3VwZGF0ZV9nZW4oZm9saW8sIG5ld19nZW4sIFx1MDAyNnZtYS1cdTAwM2VmbGFncyk7XG4rXHRcdG9sZF9nZW4gPSBmb2xpb191cGRhdGVfZ2VuKGZvbGlvLCBuZXdfZ2VuLCBcdTAwMjZmaWxlLCBcdTAwMjZ2bWEtXHUwMDNlZmxhZ3MpO1xuIFx0XHRpZiAob2xkX2dlbiBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IG9sZF9nZW4gIT0gbmV3X2dlbilcbi1cdFx0XHR1cGRhdGVfYmF0Y2hfc2l6ZSh3YWxrLCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbik7XG4rXHRcdFx0dXBkYXRlX2JhdGNoX3NpemUod2FsaywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4sIGZpbGUpO1xuIFx0fSBlbHNlIGlmIChscnVfZ2VuX3NldF9yZWZzKGZvbGlvLCBcdTAwMjZ2bWEtXHUwMDNlZmxhZ3MpKSB7XG4gXHRcdG9sZF9nZW4gPSBmb2xpb19scnVfZ2VuKGZvbGlvKTtcbiBcdFx0aWYgKG9sZF9nZW4gXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBvbGRfZ2VuICE9IG5ld19nZW4pXG5AQCAtMzU0OSw4ICszNTU3LDYgQEAgc3RhdGljIGJvb2wgd2Fsa19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrID0gYXJncy1cdTAwM2Vwcml2YXRlO1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKHdhbGstXHUwMDNlbHJ1dmVjKTtcbiBcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQod2Fsay1cdTAwM2VscnV2ZWMpO1xuLVx0REVGSU5FX01BWF9TRVEod2Fsay1cdTAwM2VscnV2ZWMpO1xuLVx0aW50IGdlbiA9IGxydV9nZW5fZnJvbV9zZXEobWF4X3NlcSk7XG4gXHR1bnNpZ25lZCBpbnQgbnI7XG4gXHRwbWRfdCBwbWR2YWw7XG4gXG5AQCAtMzYwMSw3ICszNjA3LDcgQEAgc3RhdGljIGJvb2wgd2Fsa19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGlmIChsYXN0ICE9IGZvbGlvKSB7XG4tXHRcdFx0d2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy1cdTAwM2V2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuK1x0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtXHUwMDNldm1hLCB3YWxrLVx1MDAzZWxydXZlYywgbGFzdCwgZGlydHkpO1xuIFxuIFx0XHRcdGxhc3QgPSBmb2xpbztcbiBcdFx0XHRkaXJ0eSA9IGZhbHNlO1xuQEAgLTM2MTQsNyArMzYyMCw3IEBAIHN0YXRpYyBib29sIHdhbGtfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0XHR3YWxrLVx1MDAzZW1tX3N0YXRzW01NX0xFQUZfWU9VTkddICs9IG5yO1xuIFx0fVxuIFxuLVx0d2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy1cdTAwM2V2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuK1x0d2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy1cdTAwM2V2bWEsIHdhbGstXHUwMDNlbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XG4gXHRsYXN0ID0gTlVMTDtcbiBcbiBcdGlmIChpIFx1MDAzYyBQVFJTX1BFUl9QVEUgXHUwMDI2XHUwMDI2IGdldF9uZXh0X3ZtYShQTURfTUFTSywgUEFHRV9TSVpFLCBhcmdzLCBcdTAwMjZzdGFydCwgXHUwMDI2ZW5kKSlcbkBAIC0zNjM3LDggKzM2NDMsNiBAQCBzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYVxuIFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGFyZ3MtXHUwMDNlcHJpdmF0ZTtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyh3YWxrLVx1MDAzZWxydXZlYyk7XG4gXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KHdhbGstXHUwMDNlbHJ1dmVjKTtcbi1cdERFRklORV9NQVhfU0VRKHdhbGstXHUwMDNlbHJ1dmVjKTtcbi1cdGludCBnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpO1xuIFxuIFx0Vk1fV0FSTl9PTl9PTkNFKHB1ZF9sZWFmKCpwdWQpKTtcbiBcbkBAIC0zNjkyLDcgKzM2OTYsNyBAQCBzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYVxuIFx0XHRcdGdvdG8gbmV4dDtcbiBcbiBcdFx0aWYgKGxhc3QgIT0gZm9saW8pIHtcbi1cdFx0XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuK1x0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgd2Fsay1cdTAwM2VscnV2ZWMsIGxhc3QsIGRpcnR5KTtcbiBcbiBcdFx0XHRsYXN0ID0gZm9saW87XG4gXHRcdFx0ZGlydHkgPSBmYWxzZTtcbkBAIC0zNzA2LDcgKzM3MTAsNyBAQCBzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYVxuIFx0XHRpID0gaSBcdTAwM2UgTUlOX0xSVV9CQVRDSCA/IDAgOiBmaW5kX25leHRfYml0KGJpdG1hcCwgTUlOX0xSVV9CQVRDSCwgaSkgKyAxO1xuIFx0fSB3aGlsZSAoaSBcdTAwM2M9IE1JTl9MUlVfQkFUQ0gpO1xuIFxuLVx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcbitcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgd2Fsay1cdTAwM2VscnV2ZWMsIGxhc3QsIGRpcnR5KTtcbiBcbiBcdGxhenlfbW11X21vZGVfZGlzYWJsZSgpO1xuIFx0c3Bpbl91bmxvY2socHRsKTtcbkBAIC00MjcwLDggKzQyNzQsNiBAQCBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXG4gXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gZm9saW9fcGdkYXQoZm9saW8pO1xuIFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjO1xuIFx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlO1xuLVx0dW5zaWduZWQgbG9uZyBtYXhfc2VxO1xuLVx0aW50IGdlbjtcbiBcbiBcdGxvY2tkZXBfYXNzZXJ0X2hlbGQocHZtdy1cdTAwM2VwdGwpO1xuIFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3RfbHJ1KGZvbGlvKSwgZm9saW8pO1xuQEAgLTQzMDgsOCArNDMxMCw2IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcbiBcbiBcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhmb2xpbyk7XG4gXHRscnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhtZW1jZywgcGdkYXQpO1xuLVx0bWF4X3NlcSA9IFJFQURfT05DRSgobHJ1dmVjKS1cdTAwM2VscnVnZW4ubWF4X3NlcSk7XG4tXHRnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpO1xuIFx0bW1fc3RhdGUgPSBnZXRfbW1fc3RhdGUobHJ1dmVjKTtcbiBcbiBcdGxhenlfbW11X21vZGVfZW5hYmxlKCk7XG5AQCAtNDM0MSw3ICs0MzQxLDcgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRpZiAobGFzdCAhPSBmb2xpbykge1xuLVx0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XG4rXHRcdFx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBscnV2ZWMsIGxhc3QsIGRpcnR5KTtcbiBcbiBcdFx0XHRsYXN0ID0gZm9saW87XG4gXHRcdFx0ZGlydHkgPSBmYWxzZTtcbkBAIC00MzUzLDEzICs0MzUzLDE0IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcbiBcdFx0eW91bmcgKz0gbnI7XG4gXHR9XG4gXG4tXHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuK1x0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBscnV2ZWMsIGxhc3QsIGRpcnR5KTtcbiBcbiBcdGxhenlfbW11X21vZGVfZGlzYWJsZSgpO1xuIFxuIFx0LyogZmVlZGJhY2sgZnJvbSBybWFwIHdhbGtlcnMgdG8gcGFnZSB0YWJsZSB3YWxrZXJzICovXG4gXHRpZiAobW1fc3RhdGUgXHUwMDI2XHUwMDI2IHN1aXRhYmxlX3RvX3NjYW4oaSwgeW91bmcpKVxuLVx0XHR1cGRhdGVfYmxvb21fZmlsdGVyKG1tX3N0YXRlLCBtYXhfc2VxLCBwdm13LVx1MDAzZXBtZCk7XG4rXHRcdHVwZGF0ZV9ibG9vbV9maWx0ZXIobW1fc3RhdGUsIFJFQURfT05DRShscnV2ZWMtXHUwMDNlbHJ1Z2VuLm1heF9zZXEpLFxuK1x0XHRcdFx0ICAgIHB2bXctXHUwMDNlcG1kKTtcbiBcbiBcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbiBcbkBAIC00NzE2LDcgKzQ3MTcsNyBAQCBzdGF0aWMgYm9vbCBpc29sYXRlX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHNjYVxuIFxuIFx0Lyogc2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTICovXG4gXHRpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykpXG4tXHRcdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgMCk7XG4rXHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XG4gXG4gXHRzdWNjZXNzID0gbHJ1X2dlbl9kZWxfZm9saW8obHJ1dmVjLCBmb2xpbywgdHJ1ZSk7XG4gXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIXN1Y2Nlc3MsIGZvbGlvKTtcbkBAIC00ODA5LDkgKzQ4MTAsOSBAQCBzdGF0aWMgaW50IGdldF90aWVyX2lkeChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlKVxuIFx0ICogVGhpcyB2YWx1ZSBpcyBjaG9zZW4gYmVjYXVzZSBhbnkgb3RoZXIgdGllciB3b3VsZCBoYXZlIGF0IGxlYXN0IHR3aWNlXG4gXHQgKiBhcyBtYW55IHJlZmF1bHRzIGFzIHRoZSBmaXJzdCB0aWVyLlxuIFx0ICovXG4tXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgdHlwZSwgMCwgMiwgXHUwMDI2c3ApO1xuLVx0Zm9yICh0aWVyID0gMTsgdGllciBcdTAwM2MgTUFYX05SX1RJRVJTOyB0aWVyKyspIHtcbi1cdFx0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIHRpZXIsIDMsIFx1MDAyNnB2KTtcbitcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCBMUlVfVElFUl9NSU4sIExSVV9USUVSX01JTiwgMiwgXHUwMDI2c3ApO1xuK1x0Zm9yICh0aWVyID0gTFJVX1RJRVJfTUlOICsgMTsgdGllciBcdTAwM2M9IExSVV9USUVSX01BWDsgdGllcisrKSB7XG4rXHRcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCB0aWVyLCB0aWVyLCAzLCBcdTAwMjZwdik7XG4gXHRcdGlmICghcG9zaXRpdmVfY3RybF9lcnIoXHUwMDI2c3AsIFx1MDAyNnB2KSlcbiBcdFx0XHRicmVhaztcbiBcdH1cbkBAIC00ODMyLDggKzQ4MzMsMTAgQEAgc3RhdGljIGludCBnZXRfdHlwZV90b19zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3MpXG4gXHQgKiBDb21wYXJlIHRoZSBzdW0gb2YgYWxsIHRpZXJzIG9mIGFub24gd2l0aCB0aGF0IG9mIGZpbGUgdG8gZGV0ZXJtaW5lXG4gXHQgKiB3aGljaCB0eXBlIHRvIHNjYW4uXG4gXHQgKi9cbi1cdHJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0FOT04sIE1BWF9OUl9USUVSUywgc3dhcHBpbmVzcywgXHUwMDI2c3ApO1xuLVx0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fRklMRSwgTUFYX05SX1RJRVJTLCBNQVhfU1dBUFBJTkVTUyAtIHN3YXBwaW5lc3MsIFx1MDAyNnB2KTtcbitcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0FOT04sIExSVV9USUVSX01JTiwgTFJVX1RJRVJfTUFYLFxuK1x0XHQgICAgICBzd2FwcGluZXNzLCBcdTAwMjZzcCk7XG4rXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9GSUxFLCBMUlVfVElFUl9NSU4sIExSVV9USUVSX01BWCxcbitcdFx0ICAgICAgTUFYX1NXQVBQSU5FU1MgLSBzd2FwcGluZXNzLCBcdTAwMjZwdik7XG4gXG4gXHRyZXR1cm4gcG9zaXRpdmVfY3RybF9lcnIoXHUwMDI2c3AsIFx1MDAyNnB2KTtcbiB9XG5AQCAtNDkzMiw4ICs0OTM1LDEwIEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHR9XG4gXG4gXHRcdC8qIGRvbid0IGFkZCByZWplY3RlZCBmb2xpb3MgdG8gdGhlIG9sZGVzdCBnZW5lcmF0aW9uICovXG4tXHRcdGlmIChscnVfZ2VuX2ZvbGlvX3NlcShscnV2ZWMsIGZvbGlvLCBmYWxzZSkgPT0gbWluX3NlcVt0eXBlXSlcbi1cdFx0XHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX0ZMQUdTLCBCSVQoUEdfYWN0aXZlKSk7XG4rXHRcdGlmIChscnVfZ2VuX2ZvbGlvX3NlcShscnV2ZWMsIGZvbGlvLCBmYWxzZSkgPT0gbWluX3NlcVt0eXBlXSkge1xuK1x0XHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XG4rXHRcdFx0Zm9saW9fc2V0X2FjdGl2ZShmb2xpbyk7XG4rXHRcdH1cbiBcdH1cbiBcbiBcdG1vdmVfZm9saW9zX3RvX2xydShcdTAwMjZsaXN0KTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE5OjAzOjI0Ljg4NTg5MzgxMloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk0MDUwNTQ3MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaDogTUdMUlUgUmVmYWN0b3JpbmcqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGluIGZyb250IG9mIG1lLCBhbmQgbXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgd2hldGhlciBpdCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0aGF0IHdhcnJhbnQgZnV6emluZy4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJIHF1aWNrbHkgemVybyBpbiBvbiB0aGUgbW9kaWZpZWQgZmlsZXM6IGBpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaGAsIGBpbmNsdWRlL2xpbnV4L21tX2lubGluZS5oYCwgYGluY2x1ZGUvbGludXgvbW16b25lLmhgLCBgbW0vZm9saW8uY2AsIGBtbS9tZW1jb250cm9sLmNgLCBgbW0vbWlncmF0ZS5jYCwgYW5kIGBtbS92bXNjYW4uY2AuIFRoZSBmYWN0IHRoYXQgaXQgdG91Y2hlcyBzbyBtYW55IGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYXJlYXMgaW1tZWRpYXRlbHkgcmFpc2VzIGEgZmxhZy4gSXQncyBjbGVhcmx5IHRpZWQgdG8gTFJVIGdlbmVyYXRpb24gKE1HTFJVKSwgYW5kIG1lbWNvbnRyb2wuIEkgbmVlZCB0byBkaWcgaW50byB0aGUgZGV0YWlscy5cblxuQWxyaWdodCwgdGhlIGNoYW5nZXMgaW4gYGluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oYCBhcmUgYWJvdXQgYXRvbWljIG9wZXJhdGlvbnM7IGBscnVfem9uZV9zaXplYCBpcyBub3cgYW4gYGF0b21pY19sb25nX3RgIGFuZCBgbWVtX2Nncm91cF9nZXRfem9uZV9scnVfc2l6ZWAgbGV2ZXJhZ2VzIGBhdG9taWNfbG9uZ19yZWFkYC4gU21hcnQgbW92ZSwgdGhhdCdzIGxpa2VseSBmaXhpbmcgYSByYWNlIGNvbmRpdGlvbi4gVGhlIGNoYW5nZXMgaW4gYGluY2x1ZGUvbGludXgvbW1faW5saW5lLmhgIGFyZSBpbmxpbmUgZnVuY3Rpb25zIGZvciBgZm9saW9fZmxhZ3NfaXNfZmlsZV9scnVgLCBgbHJ1X2dlbl9mcm9tX2ZsYWdzYCwgYGxydV9nZW5fc2V0X2ZsYWdzYCwgYGxydV9yZWZzX2Zyb21fZmxhZ3NgLCBgbHJ1X3JlZnNfc2V0X2ZsYWdzYCwgYGZvbGlvX3NldF9scnVfcmVmc2AsIGFuZCByZXBsYWNpbmcgYGZvbGlvX21pZ3JhdGVfcmVmc2Agd2l0aCBgZm9saW9fbWlncmF0ZV9scnVfcmVmc2AuXG5cblRoZSBvdGhlciBmaWxlIGNoYW5nZXMsIGBtbS9mb2xpby5jYCwgYG1tL21lbWNvbnRyb2wuY2AsIGBtbS9taWdyYXRlLmNgLCBhbmQgYG1tL3Ztc2Nhbi5jYCBhbGwgc2VlbSB0byBiZSBhZGp1c3RpbmcgdG8gdGhlIG5ldyBpbmxpbmUgZnVuY3Rpb25zIGFuZCB0aGUgYXRvbWljIG9wZXJhdGlvbnMuIGBscnVfZ2VuX2luY19yZWZzYCBhbmQgYGxydV9nZW5fY2xlYXJfcmVmc2AgYXJlIHVwZGF0ZWQsIGFuZCBgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVgIG5vdyB1c2VzIGBhdG9taWNfbG9uZ19hZGRgLiBUaGUgbWlncmF0aW9uIGFuZCBWTSBzY2FubmluZyB1cGRhdGVzIGFyZSBhbGwgaW50ZXJjb25uZWN0ZWQgd2l0aCB0aGUgTFJVIGdlbmVyYXRpb24gYW5kIGZsYWdzLiBUaGUgYHJlYWRfY3RybF9wb3NgIHVwZGF0ZSB3aXRoIHRoZSBgdGllcl9taW5gIGFuZCBgdGllcl9tYXhgIHBhcmFtZXRlcnMgbG9va3MgaW50ZXJlc3RpbmcsIHRvby5cblxuU28sIGluIGVzc2VuY2UsIHRoaXMgaXMgYSByZWZhY3RvcmluZyBlZmZvcnQuIEl0IHNlZW1zIHRvIGJlIGNsZWFuaW5nIHVwIHRoZSBMUlUgZ2VuZXJhdGlvbiBmbGFncyBoYW5kbGluZywgaW1wcm92aW5nIGNvbmN1cnJlbmN5IHRocm91Z2ggYXRvbWljIG9wZXJhdGlvbnMgb24gYGxydV96b25lX3NpemVgLCBhbmQgcG90ZW50aWFsbHkgZml4aW5nIHRoYXQgcmFjZSBjb25kaXRpb24uXG5cbldhaXQgYSBtaW51dGUuLi4gTUdMUlUsIHRoYXQncyBhIGJpZyBkZWFsLiBHaXZlbiB0aGUgY2hhbmdlcyB0byB0aGUgY29yZSBNTSBsb2dpYywgdGhhdCBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0IG5lZWRzIGZ1enppbmcuIE5vdywgd2hhdCdzIHRoZSByZWxldmFudCBjb25maWcgb3B0aW9uIGZvciBNR0xSVT8gQWgsIGl0J3MgYENPTkZJR19MUlVfR0VOYC4gRXhjZWxsZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTQwOCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzNSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE5OjAzOjM0LjI5MDk1MDc3NFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQ1ODY2MjI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBMUlVfR0VOXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTM5Mz1jb25maWcgUFRFX01BUktFUl9VRkZEX1dQXFxuLS1cXG5tbS9LY29uZmlnLTE0MDMtIyBtdWx0aS1nZW4gTFJVIHtcXG5tbS9LY29uZmlnOjE0MDQ6Y29uZmlnIExSVV9HRU5cXG5tbS9LY29uZmlnLTE0MDUtXFx0Ym9vbCBcXFwiTXVsdGktR2VuIExSVVxcXCJcXG4tLVxcbm1tL0tjb25maWctMTQxMi1cXG5tbS9LY29uZmlnOjE0MTM6Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxcbm1tL0tjb25maWctMTQxNC1cXHRib29sIFxcXCJFbmFibGUgYnkgZGVmYXVsdFxcXCJcXG4tLVxcbm1tL0tjb25maWctMTQxOC1cXG5tbS9LY29uZmlnOjE0MTk6Y29uZmlnIExSVV9HRU5fU1RBVFNcXG5tbS9LY29uZmlnLTE0MjAtXFx0Ym9vbCBcXFwiRnVsbCBzdGF0cyBmb3IgZGVidWdnaW5nXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xNDI3LVxcbm1tL0tjb25maWc6MTQyODpjb25maWcgTFJVX0dFTl9XQUxLU19NTVVcXG5tbS9LY29uZmlnLTE0MjktXFx0ZGVmX2Jvb2wgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxOTowMzozNS45MzY4MjA5N1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NjkxNTc4MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkVuYWJsaW5nIExSVSBHZW5lcmF0aW9uOiBBIFF1aWNrIENoZWNrKipcblxuUmlnaHQsIGl0IHNlZW1zIGxpa2Ugd2UgbmVlZCB0byBnZXQgYExSVV9HRU5gIGFuZCBgTFJVX0dFTl9FTkFCTEVEYCBhY3RpdmF0ZWQuIFNvdW5kcyBwcm9taXNpbmcgZm9yIHNvbWUgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnRzLCBvciBwZXJoYXBzIG5ldyBmdW5jdGlvbmFsaXR5IGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCByZWFsbS4gQmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIHRoZSBpbXBsaWNhdGlvbnMsIGxldCBtZSBxdWlja2x5IHZlcmlmeSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoZW1zZWx2ZXMuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNoZWNrIGBtbS9LY29uZmlnYC4gVGhhdCdzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGRlZmluaXRpdmUgZG9jdW1lbnRhdGlvbiBhbmQgcGVyaGFwcyBkZXBlbmRlbmNpZXMgZm9yIGBMUlVfR0VOYC4gSSdsbCBjb25maXJtIGl0cyBleGlzdGVuY2UgdGhlcmUsIHJlYWQgYW55IGFzc29jaWF0ZWQgY29tbWVudHMgZm9yIGNvbnRleHQsIGFuZCBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG9idmlvdXMgY29uZmxpY3RzIGJlZm9yZSBwcm9jZWVkaW5nLiBUaW1lIHRvIHNlZSB3aGF0IHRoZSBrZXJuZWwgY29uZmlnIGhhcyB0byBzYXkhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNzg4LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTk6MDM6MzkuNDA1OTgwNTk5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMzg3Mjg5MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVwZW5kcyBvbi4qTFJVX0dFTlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTE0MTM9Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxcbm1tL0tjb25maWctMTQxNC1cXHRib29sIFxcXCJFbmFibGUgYnkgZGVmYXVsdFxcXCJcXG5tbS9LY29uZmlnOjE0MTU6XFx0ZGVwZW5kcyBvbiBMUlVfR0VOXFxubW0vS2NvbmZpZy0xNDE2LVxcdGhlbHBcXG4tLVxcbm1tL0tjb25maWc9MTQxOT1jb25maWcgTFJVX0dFTl9TVEFUU1xcbm1tL0tjb25maWctMTQyMC1cXHRib29sIFxcXCJGdWxsIHN0YXRzIGZvciBkZWJ1Z2dpbmdcXFwiXFxubW0vS2NvbmZpZzoxNDIxOlxcdGRlcGVuZHMgb24gTFJVX0dFTlxcbm1tL0tjb25maWctMTQyMi1cXHRoZWxwXFxuLS1cXG5tbS9LY29uZmlnPTE0Mjg9Y29uZmlnIExSVV9HRU5fV0FMS1NfTU1VXFxubW0vS2NvbmZpZy0xNDI5LVxcdGRlZl9ib29sIHlcXG5tbS9LY29uZmlnOjE0MzA6XFx0ZGVwZW5kcyBvbiBMUlVfR0VOIFxcdTAwMjZcXHUwMDI2IEFSQ0hfSEFTX0hXX1BURV9ZT1VOR1xcbm1tL0tjb25maWctMTQzMS0jIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTk6MDM6NDEuNTQ0NzE2Njc3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIwNjc2ODMyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIERlcGVuZGVuY3kgQ2hhaW4gZm9yIGBMUlVfR0VOYCoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhpcy4gSSdtIHN0YXJ0aW5nIGJ5IHRha2luZyBhIGxvb2sgYXQgYGNvbmZpZyBMUlVfR0VOYCBhbmQgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMuIEl0J3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHdoYXQgb3RoZXIgY29tcG9uZW50cyBvciBmZWF0dXJlcyBoaW5nZSBvbiB0aGlzIHRvIGFjY3VyYXRlbHkgYXNzZXNzIGl0cyBpbXBhY3QgYW5kIHBvdGVudGlhbCBjb25mbGljdHMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIldoYXQgZG93bnN0cmVhbSBlZmZlY3RzIHdpbGwgYSBjaGFuZ2UgaGVyZSBjYXVzZT9cIiBJIG5lZWQgdG8gbWV0aWN1bG91c2x5IG1hcCB0aGlzIG91dC4gSSdsbCBuZWVkIHRvIGlkZW50aWZ5IHdoaWNoIG90aGVyIGZsYWdzLCBjb25maWd1cmF0aW9ucywgb3IgZXZlbiBjb2RlIG1vZHVsZXMgYXJlIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgbGlua2VkIHRvIGBMUlVfR0VOYC4gS25vd2luZyB0aGlzIHdpbGwgZGV0ZXJtaW5lIHRoZSBuZWNlc3NhcnkgcHJlY2F1dGlvbnMgcmVxdWlyZWQgd2hlbiB0d2Vha2luZyBgTFJVX0dFTmAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMjM3LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTk6MDM6NDQuNzUxNDg3ODQxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MDk0MjE2MzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIExSVV9HRU4kXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTM5Mz1jb25maWcgUFRFX01BUktFUl9VRkZEX1dQXFxuLS1cXG5tbS9LY29uZmlnLTE0MDMtIyBtdWx0aS1nZW4gTFJVIHtcXG5tbS9LY29uZmlnOjE0MDQ6Y29uZmlnIExSVV9HRU5cXG5tbS9LY29uZmlnLTE0MDUtXFx0Ym9vbCBcXFwiTXVsdGktR2VuIExSVVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTk6MDM6NDYuNjYwOTE0NjUzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODQ4OTA5NDE2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBpbnRvIGBtbS9LY29uZmlnYCBMaW5lIDE0MDQqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBjb25maWd1cmF0aW9uLiBJJ20gc3BlY2lmaWNhbGx5IHRhcmdldGluZyBsaW5lIDE0MDQgaW4gYG1tL0tjb25maWdgLiBJJ20gZ3Vlc3NpbmcgdGhhdCdzIHdoZXJlIGEgcGFydGljdWxhciBvcHRpb24gb3IgZ3JvdXAgb2YgcmVsYXRlZCBvcHRpb25zIGZvciBtZW1vcnkgbWFuYWdlbWVudCBpcyBkZWZpbmVkLiBHaXZlbiB0aGUgY29udGV4dCBvZiB0aGUgYG1tL2AgZGlyZWN0b3J5LCBpdCdzIGxpa2VseSBkZWFsaW5nIHdpdGggc29tZSBhc3BlY3Qgb2YgYWxsb2NhdGlvbiwgdmlydHVhbCBtZW1vcnksIE5VTUEsIG9yIHBlcmhhcHMgc29tZSBzcGVjaWZpYyBhcmNoaXRlY3R1cmUtcmVsYXRlZCBtZW1vcnkgaGFuZGxpbmcuIEknbSBleHBlY3RpbmcgdG8gc2VlIGEgYGNvbmZpZ2AgZGVmaW5pdGlvbiwgcG90ZW50aWFsbHkgbmVzdGVkIHdpdGhpbiBhIGBtZW51YCwgYGNob2ljZWAsIG9yIGEgY29uZGl0aW9uYWwgYmxvY2sgdXNpbmcgYGlmYCBvciBgc2VsZWN0YC4gSG9wZWZ1bGx5LCB0aGVyZSBhcmUgY29tbWVudHMgdGhhdCBnaXZlIG1lIGEgY2x1ZSBhYm91dCB0aGUgaW50ZW50IG9mIHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24gb3IgZ3JvdXAuIEknbSBhbnRpY2lwYXRpbmcgdGhhdCBJIHdpbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IHRvIGZ1bGx5IGdyYXNwIGl0LiBJ4oCZbSBob3BpbmcgdGhhdCBJIGhhdmUgc29tZSBwcmlvciBrbm93bGVkZ2UgYWJvdXQgdGhlIHBhcnRpY3VsYXIgc3Vic3lzdGVtIHRoYXQncyB0b3VjaGVkIGF0IHRoYXQgbGluZSBvZiBjb2RlLiBMZXQncyBzZWUgd2hhdCBnZW1zIHdlIGNhbiBmaW5kLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNTEzLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTk6MDM6NTUuMTUwMDExMDg4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNjgzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0MDAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE0MDA6XFx0XFx0ICBwdXJwb3Nlcy4gIEl0IGlzIHJlcXVpcmVkIHRvIGVuYWJsZSB1c2VyZmF1bHRmZCB3cml0ZSBwcm90ZWN0aW9uIG9uXFxuMTQwMTpcXHRcXHQgIGZpbGUtYmFja2VkIG1lbW9yeSB0eXBlcyBsaWtlIHNobWVtIGFuZCBodWdldGxiZnMuXFxuMTQwMjpcXHRcXG4xNDAzOlxcdCMgbXVsdGktZ2VuIExSVSB7XFxuMTQwNDpcXHRjb25maWcgTFJVX0dFTlxcbjE0MDU6XFx0XFx0Ym9vbCBcXFwiTXVsdGktR2VuIExSVVxcXCJcXG4xNDA2OlxcdFxcdGRlcGVuZHMgb24gTU1VXFxuMTQwNzpcXHRcXHQjIG1ha2Ugc3VyZSBmb2xpby1cXHUwMDNlZmxhZ3MgaGFzIGVub3VnaCBzcGFyZSBiaXRzXFxuMTQwODpcXHRcXHRkZXBlbmRzIG9uIDY0QklUIHx8ICFTUEFSU0VNRU0gfHwgU1BBUlNFTUVNX1ZNRU1NQVBcXG4xNDA5OlxcdFxcdGhlbHBcXG4xNDEwOlxcdFxcdCAgQSBoaWdoIHBlcmZvcm1hbmNlIExSVSBpbXBsZW1lbnRhdGlvbiB0byBvdmVyY29tbWl0IG1lbW9yeS4gU2VlXFxuMTQxMTpcXHRcXHQgIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdCBmb3IgZGV0YWlscy5cXG4xNDEyOlxcdFxcbjE0MTM6XFx0Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxcbjE0MTQ6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIGJ5IGRlZmF1bHRcXFwiXFxuMTQxNTpcXHRcXHRkZXBlbmRzIG9uIExSVV9HRU5cXG4xNDE2OlxcdFxcdGhlbHBcXG4xNDE3OlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgbXVsdGktZ2VuIExSVSBieSBkZWZhdWx0LlxcbjE0MTg6XFx0XFxuMTQxOTpcXHRjb25maWcgTFJVX0dFTl9TVEFUU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxOTowMzo1NS4xNTAxMjExNzhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzA5ODkyNTQ3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIExSVSBHZW5lcmF0aW9uIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCByZWxhdGVkIHRvIExSVSBnZW5lcmF0aW9uLiBUaGUga2V5IGNvbmZpZ3VyYXRpb25zIGhlcmUgYXJlIGBMUlVfR0VOYCBhbmQgYExSVV9HRU5fRU5BQkxFRGAg4oCTIHRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIE5vdywgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0IHRoaXMgcGF0Y2ggYWN0dWFsbHkgKmRvZXMqLiBJIHNlZSBpdCBtb2RpZmllcyBzZXZlcmFsIGZ1bmN0aW9ucy4gTGV0J3Mgc2VlLi4uXG5cblNwZWNpZmljYWxseSwgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgaGF2ZSBiZWVuIG1vZGlmaWVkOiBgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVgLCBgZm9saW9fbWlncmF0ZV9mbGFnc2AsIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCwgYGV2aWN0X2ZvbGlvc2AsIGB3YWxrX3BtZF9yYW5nZV9sb2NrZWRgLCBgd2Fsa19wdGVfcmFuZ2VgLCBgZm9saW9faW5jX2dlbmAsIGBmb2xpb191cGRhdGVfZ2VuYCwgYHJlYWRfY3RybF9wb3NgLCBgbHJ1X2dlbl9zZXRfcmVmc2AsIGBscnVfZ2VuX2NsZWFyX3JlZnNgLCBgbHJ1X2dlbl9pbmNfcmVmc2AsIGFuZCBgX19scnVfY2FjaGVfYWN0aXZhdGVfZm9saW9gLlxuXG5Ob3csIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBpbXBvcnRhbnQgYml0cy4gTXkgZm9jdXMgaXMgZ29pbmcgdG8gYmUgb24gdGhlIG5vbi1zdGF0aWMgYW5kIG5vbi1pbmxpbmVkIGZ1bmN0aW9ucywgYXMgdGhlc2UgYXJlIHRoZSBvbmVzIG1vc3QgbGlrZWx5IHRvIGhhdmUgd2lkZXIgaW1wbGljYXRpb25zLiBJIGNhbiBzZWUgdGhlIGxvY2F0aW9uIG9mIHRoZSBmdW5jdGlvbnM6IGBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZWAgaXMgaW4gYG1tL21lbWNvbnRyb2wuY2AuIGBmb2xpb19taWdyYXRlX2ZsYWdzYCBpcyBpbiBgbW0vbWlncmF0ZS5jYC4gYGxydV9nZW5fbG9va19hcm91bmRgIGlzIGluIGBtbS92bXNjYW4uY2AuIEl0J3MgcHJldHR5IGNsZWFyIHRoYXQgdGhlIHJlc3Qgb2YgdGhlbSBhcmUgc3RhdGljLCB3aGljaCBuYXJyb3dzIG15IGZvY3VzIGNvbnNpZGVyYWJseS5cblxuU28sIGxldCdzIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVgLCBgZm9saW9fbWlncmF0ZV9mbGFnc2AsIGFuZCBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAuIFRoZXNlIGFyZSB0aGUgb25lcyB3aGVyZSB0aGUgY29kZSBpcyBhY3R1YWxseSAqZXhwb3NlZCogYW5kIGNhbiBiZSBjYWxsZWQgZnJvbSBvdGhlciBtb2R1bGVzLCB0aGV5IGFyZSB3b3J0aCBhIGNsb3NlciBsb29rLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGNvZGUgYW5kIHVuZGVyc3RhbmQgaG93IHRoZSBMUlUgZ2VuZXJhdGlvbiBsb2dpYyBpcyBiZWluZyBpbnRlZ3JhdGVkIHdpdGhpbiBtZW1vcnkgbWFuYWdlbWVudCwgbWlncmF0aW9uLCBhbmQgdGhlIFZNIHNjYW5uaW5nIHByb2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MTEyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTk6MDQ6MDIuMjQ5MDQ5MDU0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzkxMTYzMjQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4odm9pZHxib29sfGludHx1bnNpZ25lZCBsb25nKSBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD04OTE9c3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfb25saW5lKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTg5Ny1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo4OTg6dm9pZCBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbHJ1X2xpc3QgbHJ1LFxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTg5OS1cXHRcXHRpbnQgemlkLCBsb25nIG5yX3BhZ2VzKTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0xNTAxPXN0cnVjdCBscnV2ZWMgKmZvbGlvX2xydXZlY19sb2NrX2lycXNhdmUoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xNTI3LSAqL1xcbm1tL21lbWNvbnRyb2wuYzoxNTI4OnZvaWQgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBlbnVtIGxydV9saXN0IGxydSxcXG5tbS9tZW1jb250cm9sLmMtMTUyOS1cXHRcXHRcXHRcXHRpbnQgemlkLCBsb25nIG5yX3BhZ2VzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxOTowNDowNC42NDAyMTcxMzlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY0MDE0NjQ0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBsaWtlIHlvdXJzZWxmOlxuXG4qKkNvbnNpZGVyaW5nIHRoZSBTY29wZSBvZiBgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVgKipcblxuT2theSwgc28gSSdtIHByb2Nlc3NpbmcgdGhhdCBgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVgIGZ1bmN0aW9uLiBUaGUga2V5IHJlYWxpemF0aW9uIGhlcmUgaXMgdGhhdCBpdCdzICpleHBvcnRlZCogYW5kIHRoZXJlZm9yZSAqZ2xvYmFsKi4gVGhpcyBpbW1lZGlhdGVseSB0cmlnZ2VycyBhIHNldCBvZiBjb25zaWRlcmF0aW9ucyBpbiBteSBtaW5kLiBCZWNhdXNlIGl0J3MgdmlzaWJsZSBvdXRzaWRlIHRoZSBpbW1lZGlhdGUgbW9kdWxlIG9yIHN1YnN5c3RlbSwgaXQgaW1wbGllcyBpdCdzIGRlc2lnbmVkIHRvIGJlIGludm9rZWQgZnJvbSBhIHdpZGVyIGNvbnRleHQsIHBvdGVudGlhbGx5IGJ5IG90aGVyIGtlcm5lbCBtb2R1bGVzIG9yIGV2ZW4gdXNlcnNwYWNlLCB3aGljaCBoYXMgc2VyaW91cyByYW1pZmljYXRpb25zIGZvciBzdGFiaWxpdHkgYW5kIHN5bmNocm9uaXphdGlvbi4gVGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGFyZSBzaWduaWZpY2FudC4gVGhpcyBzdWdnZXN0cyBhIGNhcmVmdWwgcmV2aWV3IG9mIGl0cyB1c2FnZSBwYXR0ZXJucywgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBhbmQgbG9ja2luZyBzdHJhdGVnaWVzIGlzIHdhcnJhbnRlZCwgZ2l2ZW4gdGhlIHBvdGVudGlhbCBmb3IgdW5leHBlY3RlZCBpbnRlcmFjdGlvbnMuIEFueSBjaGFuZ2VzIHRvIHRoaXMgZnVuY3Rpb24gaGF2ZSB0byBiZSBjb25zaWRlcmVkIGNhcmVmdWxseS4gVGhlIHZlcnkgZmFjdCB0aGF0IGl0J3MgZ2xvYmFsIHNob3VsZCBtZWFuIHRoZXJlJ3MgYW4gZXhjZWxsZW50IHJlYXNvbiwgZG9jdW1lbnRlZCwgZm9yIHdoeSB0aGF0J3MgdGhlIGNhc2UuIEkgbmVlZCB0byBkaWcgaW50byB0aGUgY2FsbCBzaXRlcyBhbmQgdGhpbmsgYWJvdXQgdGhlIGxvY2tpbmcgY29udGV4dHMgdGhvcm91Z2hseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUyNDIsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxOTowNDowOS4yODAzNjY3MjFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNjg2NTkzMjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXih2b2lkfGJvb2x8aW50fHVuc2lnbmVkIGxvbmcpIGZvbGlvX21pZ3JhdGVfZmxhZ3NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9taWdyYXRlLmg9Njk9dm9pZCBzb2Z0bGVhZl9lbnRyeV93YWl0X29uX2xvY2tlZChzb2Z0bGVhZl90IGVudHJ5LCBzcGlubG9ja190ICpwdGwpXFxuaW5jbHVkZS9saW51eC9taWdyYXRlLmgtNzAtXFx0XFx0X19yZWxlYXNlcyhwdGwpO1xcbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oOjcxOnZvaWQgZm9saW9fbWlncmF0ZV9mbGFncyhzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaC03Mi1pbnQgZm9saW9fbWlncmF0ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxubW0vbWlncmF0ZS5jPTczOT1pbnQgbWlncmF0ZV9odWdlX3BhZ2VfbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxubW0vbWlncmF0ZS5jLTc3NC0gKi9cXG5tbS9taWdyYXRlLmM6Nzc1OnZvaWQgZm9saW9fbWlncmF0ZV9mbGFncyhzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL21pZ3JhdGUuYy03NzYte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxOTowNDoxMS42NDkwMzEwOTZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAwMjY3MTk1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQ29uc2lkZXJpbmcgdGhlIFNjb3BlIG9mIGBmb2xpb19taWdyYXRlX2ZsYWdzYCoqXG5cbkFscmlnaHQsIHNvIGBmb2xpb19taWdyYXRlX2ZsYWdzYC4uLiB0aGF0J3MgYSBnbG9iYWwgdmFyaWFibGUsIGlzbid0IGl0PyBPa2F5LCBzbyB0aGF0IG1lYW5zIEkgbmVlZCB0byBiZSAqdmVyeSogbWluZGZ1bCBvZiBpdHMgc2NvcGUgYW5kIHBvdGVudGlhbCBpbXBhY3QuIEl0J3Mgbm90IGxvY2FsaXplZCwgc28gY2hhbmdlcyB0byBpdCBpbiBvbmUgcGFydCBvZiB0aGUgc3lzdGVtIHdpbGwgcmlwcGxlIHRocm91Z2hvdXQuIEkgbmVlZCB0byB0aGluayBhYm91dCBob3cgZGlmZmVyZW50IG1vZHVsZXMgb3IgZnVuY3Rpb25zIG1pZ2h0IGJlIHJlYWRpbmcgb3Igd3JpdGluZyB0byBpdC4gQW55IHJhY2UgY29uZGl0aW9ucyBvciB1bmludGVuZGVkIHNpZGUgZWZmZWN0cyBhcmUgYSBtYWpvciBjb25jZXJuLiBCZXN0IHByYWN0aWNlIHdvdWxkIHN1Z2dlc3QgcmVkdWNpbmcgaXRzIHNjb3BlIGlmIHBvc3NpYmxlLCByZWZhY3RvcmluZyB0byBwYXNzIGFzIGFuIGFyZ3VtZW50IGlmIGl0IG1ha2VzIHNlbnNlLiBJIGhhdmUgdG8gbWFrZSBzdXJlIGV2ZXJ5IGluc3RhbmNlIG9mIGl0cyB1c2UgaXMgd2VsbC1kb2N1bWVudGVkLCBzbyBmdXR1cmUgZGV2ZWxvcGVycywgaW5jbHVkaW5nIG15c2VsZiwgZG9uJ3QgdHJpcCBvdmVyIGl0LiBUaW1lIHRvIGFzc2VzcyBhbGwgdGhlIHBsYWNlcyB0aGlzIGZsYWcgaXMgdXNlZCwgZmlndXJlIG91dCBpdHMgcHVycG9zZSwgYW5kIGVuc3VyZSBpdCdzIGhhbmRsZWQgc2FmZWx5IGFuZCBlZmZpY2llbnRseSwgb3IgY29uc2lkZXIgcG90ZW50aWFsIGFsdGVybmF0aXZlcyB0byB0aGlzIGdsb2JhbCBkZXBlbmRlbmN5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTcyMSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE5OjA0OjE1LjY1MTcwNTI2N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMxODM0NTc4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKHZvaWR8Ym9vbHxpbnR8dW5zaWduZWQgbG9uZykgbHJ1X2dlbl9sb29rX2Fyb3VuZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L21tem9uZS5oPTY5ND12b2lkIGxydV9nZW5faW5pdF9scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjKTtcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjY5NTpib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpO1xcbmluY2x1ZGUvbGludXgvbW16b25lLmgtNjk2LVxcbi0tXFxubW0vdm1zY2FuLmM9NDIxMz1zdGF0aWMgdm9pZCBscnVfZ2VuX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNDI1OS0gKi9cXG5tbS92bXNjYW4uYzo0MjYwOmJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcXG5tbS92bXNjYW4uYy00MjYxLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTk6MDQ6MTcuOTcwMDU1MzczWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY2MzI5MTgzNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGZ1bmN0aW9ucyByZWxhdGVkIHRvIExSVSBhbmQgZm9saW8gbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IHdpdGggYW4gZXllIHRvd2FyZHMgZnV6emluZy4gRmlyc3QsIEkgbm90aWNlZCB0aGF0IGBscnVfZ2VuX2xvb2tfYXJvdW5kYCBpcyBnbG9iYWwsIHdoaWNoIGltbWVkaWF0ZWx5IG1ha2VzIGl0IGEgcG90ZW50aWFsIHRhcmdldC4gVGhlbiwgSSBxdWlja2x5IHNjYW5uZWQgdGhyb3VnaCBgbW0vdm1zY2FuLmNgIGFuZCBgbW0vZm9saW8uY2AgdG8gc2VlIHdoYXQgZWxzZSBtaWdodCBiZSBpbnRlcmVzdGluZywgYW5kIGl0IGxvb2tzIGxpa2UgYSBsb3Qgb2YgdGhlIHN1cHBvcnRpbmcgZnVuY3Rpb25zIGFyZSBgc3RhdGljYCwgbGlrZSBgZXZpY3RfZm9saW9zYCwgYGdldF90eXBlX3RvX3NjYW5gLCBgaXNvbGF0ZV9mb2xpb2AsIGFuZCBzZXZlcmFsIG90aGVycyBpbiBib3RoIGZpbGVzLiBUaGV5IHNlZW0gcHJldHR5IGNvbnRhaW5lZC5cblxuU28sIHRoZSBvbmVzIHRoYXQgYXJlICpub3QqIHN0YXRpYywgYW5kIHRoZXJlZm9yZSBoYXZlIGJyb2FkZXIgcmVhY2gsIGFyZSBgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVgLCBgZm9saW9fbWlncmF0ZV9mbGFnc2AsIGFuZCBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAuIFRoZXNlIHNlZW0gdG8gYmUgdGhlIHByaW1lIGNhbmRpZGF0ZXMgZm9yIGNsb3NlciBpbnNwZWN0aW9uLlxuXG5Ob3csIGxldCdzIGFzc2VzcyB0aGVpciBmdXp6aW5nIHBvdGVudGlhbC4gYG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplYCBpcyBhIGNydWNpYWwgZnVuY3Rpb24gZm9yIG1lbWNnIExSVSBzaXplIHVwZGF0ZXMsIGVzc2VudGlhbCBmb3IgbWVtb3J5IG1hbmFnZW1lbnQuIGBmb2xpb19taWdyYXRlX2ZsYWdzYCBpcyBkZWVwbHkgaW52b2x2ZWQgaW4gcGFnZSBtaWdyYXRpb24sIHdoaWNoIGlzIGEga25vd24gYXJlYSBmb3IgY29tcGxleCBpbnRlcmFjdGlvbnMuIEZpbmFsbHksIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCBpcyBhIGNvcmUgZnVuY3Rpb24gZm9yIE1HTFJVLiBBbGwgdGhyZWUgb2YgdGhlc2UgaGF2ZSBhIHN0cm9uZyBjb25uZWN0aW9uIHRvIGNvcmUga2VybmVsIGJlaGF2aW9yLlxuXG5IbW0sIGBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZWAgZmVlbHMgYSBsaXR0bGUgbW9yZSByb3V0aW5lIHRoYW4gdGhlIG90aGVyIHR3by4gSXQncyBwcm9iYWJseSBxdWl0ZSBob3QsIGFzIGl0J3MgYSBmdW5kYW1lbnRhbCBwYXJ0IG9mIHRoZSBtZW1jZyBzdWJzeXN0ZW0sIGJ1dCBtYXliZSBub3QgYXMgbGlrZWx5IHRvIHJldmVhbCB0cmlja3kgZWRnZSBjYXNlcy4gSXQncyBwcm9iYWJseSB3b3J0aCBpbnZlc3RpZ2F0aW5nIHdoZXJlIGl0J3MgY2FsbGVkIGZyb20gdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYxOTMsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTk6MDQ6MjQuNjAyOTc1MjU2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzgxOTc1ODc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTg5MT1zdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9vbmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtODk3LVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjg5ODp2b2lkIG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBscnVfbGlzdCBscnUsXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtODk5LVxcdFxcdGludCB6aWQsIGxvbmcgbnJfcGFnZXMpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaD01Mj1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgdXBkYXRlX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtNTctI2lmZGVmIENPTkZJR19NRU1DR1xcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg6NTg6XFx0bWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUobHJ1dmVjLCBscnUsIHppZCwgbnJfcGFnZXMpO1xcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtNTktI2VuZGlmXFxuLS1cXG5tbS9mb2xpby5jPTExMjM9c3RhdGljIHZvaWQgbHJ1dmVjX3JlcGFyZW50X2xydShzdHJ1Y3QgbHJ1dmVjICpjaGlsZF9scnV2ZWMsXFxuLS1cXG5tbS9mb2xpby5jLTExNDMtXFx0XFx0ICovXFxubW0vZm9saW8uYzoxMTQ0OlxcdFxcdG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKHBhcmVudF9scnV2ZWMsIGxydSwgemlkLCBzaXplKTtcXG5tbS9mb2xpby5jOjExNDU6XFx0XFx0bWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUoY2hpbGRfbHJ1dmVjLCBscnUsIHppZCwgLShsb25nKXNpemUpO1xcbm1tL2ZvbGlvLmMtMTE0Ni1cXHR9XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MTUwMT1zdHJ1Y3QgbHJ1dmVjICpmb2xpb19scnV2ZWNfbG9ja19pcnFzYXZlKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTUxOC0vKipcXG5tbS9tZW1jb250cm9sLmM6MTUxOTogKiBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZSAtIGFjY291bnQgZm9yIGFkZGluZyBvciByZW1vdmluZyBhbiBscnUgcGFnZVxcbm1tL21lbWNvbnRyb2wuYy0xNTIwLSAqIEBscnV2ZWM6IG1lbV9jZ3JvdXAgcGVyIHpvbmUgbHJ1IHZlY3Rvclxcbi0tXFxubW0vbWVtY29udHJvbC5jLTE1MjctICovXFxubW0vbWVtY29udHJvbC5jOjE1Mjg6dm9pZCBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbHJ1X2xpc3QgbHJ1LFxcbm1tL21lbWNvbnRyb2wuYy0xNTI5LVxcdFxcdFxcdFxcdGludCB6aWQsIGxvbmcgbnJfcGFnZXMpXFxuLS1cXG5tbS92bXNjYW4uYz0xNTkyPXVuc2lnbmVkIGludCByZWNsYWltX2NsZWFuX3BhZ2VzX2Zyb21fbGlzdChzdHJ1Y3Qgem9uZSAqem9uZSxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTE2NDQtICogVXBkYXRlIExSVSBzaXplcyBhZnRlciBpc29sYXRpbmcgcGFnZXMuIFRoZSBMUlUgc2l6ZSB1cGRhdGVzIG11c3RcXG5tbS92bXNjYW4uYzoxNjQ1OiAqIGJlIGNvbXBsZXRlIGJlZm9yZSBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZSBkdWUgdG8gYSBzYW5pdHkgY2hlY2suXFxubW0vdm1zY2FuLmMtMTY0Ni0gKi9cXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ2MjE9dm9pZCBscnVfZ2VuX3JlcGFyZW50X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50IG5pZClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ2NDItXFx0XFx0XFx0LyogTW92ZSB0aGUgYWNjb3VudGluZywgZG8gbm90IGR1cGxpY2F0ZSBpdC4gKi9cXG5tbS92bXNjYW4uYzo0NjQzOlxcdFxcdFxcdG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKHBhcmVudF9scnV2ZWMsIGxydSwgemlkLCBzaXplKTtcXG5tbS92bXNjYW4uYzo0NjQ0OlxcdFxcdFxcdG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKGNoaWxkX2xydXZlYywgbHJ1LCB6aWQsIC0obG9uZylzaXplKTtcXG5tbS92bXNjYW4uYy00NjQ1LVxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTk6MDQ6MjUuOTg0OTU5MDg1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3Nzk0ODkwNDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEhvdCBQYXRoIEZ1bmN0aW9uYWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHNvbWUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCBhbmQgYSBmZXcgZnVuY3Rpb25zIGFyZSBpbW1lZGlhdGVseSBzdGFuZGluZyBvdXQuIGBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZWAgaXMgdHJpZ2dlcmVkIGZyb20gYHVwZGF0ZV9scnVfc2l6ZWAsIHdoaWNoLCBiZWNhdXNlIGl0J3MgYF9fYWx3YXlzX2lubGluZWAsIGlzIGNsZWFybHkgZGVzaWduZWQgZm9yIHNwZWVkIGFuZCB1c2VkICpldmVyeXdoZXJlKi4gVGhhdCBtYWtlcyBpdCBhIHNlcmlvdXMgaG90IHBhdGggSSBuZWVkIHRvIHVuZGVyc3RhbmQgY29tcGxldGVseS4gQWxzbywgYGZvbGlvX21pZ3JhdGVfZmxhZ3NgIGlzIGNsZWFybHkgY3J1Y2lhbCBkdXJpbmcgcGFnZSBtaWdyYXRpb24sIGFuZCB0aGVuIHRoZXJlJ3MgYGxydV9nZW5fbG9va19hcm91bmRgLCB1c2VkIGR1cmluZyBwYWdlIGZhdWx0IGxvb2thcm91bmQuIEdpdmVuIHRoZSBjb250ZXh0LCBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAgaXMgdGhlIG9uZSBJIHRoaW5rIEkgc2hvdWxkIGJlIGludmVzdGlnYXRpbmcgbmV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc4MTEsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxOTowNDozMC43NjQ0NTA0NDVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNzAzNjM4NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibHJ1X2dlbl9sb29rX2Fyb3VuZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL21tL211bHRpZ2VuX2xydS5yc3Q9MTg3PWNhbiBpbmN1ciB0aGUgaGlnaGVzdCBDUFUgY29zdCBpbiB0aGUgcmVjbGFpbSBwYXRoLlxcbkRvY3VtZW50YXRpb24vbW0vbXVsdGlnZW5fbHJ1LnJzdC0xODgtXFxuRG9jdW1lbnRhdGlvbi9tbS9tdWx0aWdlbl9scnUucnN0OjE4OTpgYGxydV9nZW5fbG9va19hcm91bmQoKWBgIGV4cGxvaXRzIHNwYXRpYWwgbG9jYWxpdHkgdG8gcmVkdWNlIHRoZVxcbkRvY3VtZW50YXRpb24vbW0vbXVsdGlnZW5fbHJ1LnJzdC0xOTAtdHJpcHMgaW50byB0aGUgcm1hcC4gSXQgc2NhbnMgdGhlIGFkamFjZW50IFBURXMgb2YgYSB5b3VuZyBQVEUgYW5kXFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL211bHRpZ2VuX2xydS5yc3Q9MTk5PWluIHRoZSBzZXQuXFxuRG9jdW1lbnRhdGlvbi9tbS9tdWx0aWdlbl9scnUucnN0LTIwMC1cXG5Eb2N1bWVudGF0aW9uL21tL211bHRpZ2VuX2xydS5yc3Q6MjAxOkluIHRoZSBldmljdGlvbiBwYXRoLCBzcGVjaWZpY2FsbHksIGluIGBgbHJ1X2dlbl9sb29rX2Fyb3VuZCgpYGAsIGlmIGFcXG5Eb2N1bWVudGF0aW9uL21tL211bHRpZ2VuX2xydS5yc3QtMjAyLVBNRCBoYXMgYSBzdWZmaWNpZW50IG51bWJlciBvZiBob3QgcGFnZXMsIGl0cyBhZGRyZXNzIGlzIHBsYWNlZCBpbiB0aGVcXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmg9Njk0PXZvaWQgbHJ1X2dlbl9pbml0X2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpO1xcbmluY2x1ZGUvbGludXgvbW16b25lLmg6Njk1OmJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucik7XFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC02OTYtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTcxMz1zdGF0aWMgaW5saW5lIHZvaWQgbHJ1X2dlbl9pbml0X2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTcxNi1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjcxNzpzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC03MTgtXFx0XFx0dW5zaWduZWQgaW50IG5yKVxcbi0tXFxubW0vcm1hcC5jPTkxOD1zdGF0aWMgYm9vbCBmb2xpb19yZWZlcmVuY2VkX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vcm1hcC5jLTk4Mi1cXHRcXHRpZiAobHJ1X2dlbl9lbmFibGVkKCkgXFx1MDAyNlxcdTAwMjYgIWxydV9nZW5fc3dpdGNoaW5nKCkgXFx1MDAyNlxcdTAwMjYgcHZtdy5wdGUpIHtcXG5tbS9ybWFwLmM6OTgzOlxcdFxcdFxcdGlmIChscnVfZ2VuX2xvb2tfYXJvdW5kKFxcdTAwMjZwdm13LCBucikpXFxubW0vcm1hcC5jLTk4NC1cXHRcXHRcXHRcXHRyZWZlcmVuY2VkKys7XFxuLS1cXG5tbS92bXNjYW4uYz0yNzkxPXN0YXRpYyBib29sIF9fbWF5YmVfdW51c2VkIHNlcV9pc192YWxpZChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXFxuLS1cXG5tbS92bXNjYW4uYy0yODIwLSAqIHdhbGtfcG1kX3JhbmdlKCk7IHRoZSBldmljdGlvbiBhbHNvIHJlcG9ydCB0aGVtIHdoZW4gd2Fsa2luZyB0aGUgcm1hcFxcbm1tL3Ztc2Nhbi5jOjI4MjE6ICogaW4gbHJ1X2dlbl9sb29rX2Fyb3VuZCgpLlxcbm1tL3Ztc2Nhbi5jLTI4MjItICpcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQwNzQ9c3RhdGljIGJvb2wgdHJ5X3RvX2luY19tYXhfc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsXFxuLS1cXG5tbS92bXNjYW4uYy00MDkzLVxcdCAqIElmIHRoZSBoYXJkd2FyZSBkb2Vzbid0IGF1dG9tYXRpY2FsbHkgc2V0IHRoZSBhY2Nlc3NlZCBiaXQsIGZhbGxiYWNrXFxubW0vdm1zY2FuLmM6NDA5NDpcXHQgKiB0byBscnVfZ2VuX2xvb2tfYXJvdW5kKCksIHdoaWNoIG9ubHkgY2xlYXJzIHRoZSBhY2Nlc3NlZCBiaXQgaW4gYVxcbm1tL3Ztc2Nhbi5jLTQwOTUtXFx0ICogaGFuZGZ1bCBvZiBQVEVzLiBTcHJlYWRpbmcgdGhlIHdvcmsgb3V0IG92ZXIgYSBwZXJpb2Qgb2YgdGltZSB1c3VhbGx5XFxuLS1cXG5tbS92bXNjYW4uYz00MjEzPXN0YXRpYyB2b2lkIGxydV9nZW5fYWdlX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy00MjU5LSAqL1xcbm1tL3Ztc2Nhbi5jOjQyNjA6Ym9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxcbm1tL3Ztc2Nhbi5jLTQyNjEte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxOTowNDozMi4xMzQ4MTc2MTVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYyNDIxMzM5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRoZSBleHBlcnQ6XG5cbioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IEEgUXVpY2sgU2NhbioqXG5cbkFscmlnaHQsIGxldCdzIHNlZS4gVGhlIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCBmdW5jdGlvbiBjYWxsZWQgZnJvbSBgZm9saW9fcmVmZXJlbmNlZF9vbmVgIHdpdGhpbiBgbW0vcm1hcC5jYCBpcyBkZWZpbml0ZWx5IGNhdGNoaW5nIG15IGF0dGVudGlvbi4gR2l2ZW4gaXRzIGxvY2F0aW9uIGFuZCBsaWtlbHkgZnVuY3Rpb24gd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIGl0IHNlZW1zIGxpa2UgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuIEl0J3MgYSBrZXkgcG9pbnQgb2YgaW50ZXJhY3Rpb24gd2l0aCB0aGUgTFJVIGFuZCByZWZlcmVuY2VkIGZvbGlvIGZsYWdzLCBzdWdnZXN0aW5nIHRoYXQgd2UgY291bGQgaW5kdWNlIHNvbWUgaW50ZXJlc3RpbmcgY29uZGl0aW9ucy4gTm93LCB0aGUgbmF0dXJhbCBzdGVwIGlzIHRvIHRha2UgYSBsb29rIGF0IGBmb2xpb19taWdyYXRlX2ZsYWdzYCwgdG8gdW5kZXJzdGFuZCBhbnkgZmxhZ3MgdGhhdCBhcmUgcmVsZXZhbnQgaW4gdGhpcyBjb250ZXh0IGFuZCBzZWUgd2hhdCBraW5kIG9mIGlucHV0cyB3ZSBjYW4gdGVzdC4gTGV0J3Mgc2VlIHdoYXQgdGhhdCByZXZlYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODk4OSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE5OjA0OjM1Ljc1OTAzMzE1MloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQyMjc4MDk0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmb2xpb19taWdyYXRlX2ZsYWdzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2Fpby5jPTQ2MD1zdGF0aWMgaW50IGFpb19taWdyYXRlX2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmRzdCxcXG4tLVxcbmZzL2Fpby5jLTUxMi1cXHRmb2xpb19jb3B5KGRzdCwgc3JjKTtcXG5mcy9haW8uYzo1MTM6XFx0Zm9saW9fbWlncmF0ZV9mbGFncyhkc3QsIHNyYyk7XFxuZnMvYWlvLmMtNTE0LVxcdEJVR19PTihjdHgtXFx1MDAzZXJpbmdfZm9saW9zW2lkeF0gIT0gc3JjKTtcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jPTEwMjQ9c3RhdGljIGludCBodWdldGxiZnNfbWlncmF0ZV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEwMzktXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTA0MDpcXHRmb2xpb19taWdyYXRlX2ZsYWdzKGRzdCwgc3JjKTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMDQxLVxcbi0tXFxuaW5jbHVkZS9saW51eC9taWdyYXRlLmg9Njk9dm9pZCBzb2Z0bGVhZl9lbnRyeV93YWl0X29uX2xvY2tlZChzb2Z0bGVhZl90IGVudHJ5LCBzcGlubG9ja190ICpwdGwpXFxuaW5jbHVkZS9saW51eC9taWdyYXRlLmgtNzAtXFx0XFx0X19yZWxlYXNlcyhwdGwpO1xcbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oOjcxOnZvaWQgZm9saW9fbWlncmF0ZV9mbGFncyhzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaC03Mi1pbnQgZm9saW9fbWlncmF0ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaD0zNTE9c3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZGVsX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCByZWNsYWltaW5nKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC0zNjEtXFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaDozNjI6XFx0LyogZm9yIGZvbGlvX21pZ3JhdGVfZmxhZ3MoKSAqL1xcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtMzYzLVxcdGZsYWdzID0gIXJlY2xhaW1pbmcgXFx1MDAyNlxcdTAwMjYgbHJ1X2dlbl9pc19hY3RpdmUobHJ1dmVjLCBnZW4pID8gQklUKFBHX2FjdGl2ZSkgOiAwO1xcbi0tXFxubW0vbWlncmF0ZS5jPTczOT1pbnQgbWlncmF0ZV9odWdlX3BhZ2VfbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxubW0vbWlncmF0ZS5jLTc3NC0gKi9cXG5tbS9taWdyYXRlLmM6Nzc1OnZvaWQgZm9saW9fbWlncmF0ZV9mbGFncyhzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL21pZ3JhdGUuYy03NzYte1xcbi0tXFxubW0vbWlncmF0ZS5jLTg2My19XFxubW0vbWlncmF0ZS5jOjg2NDpFWFBPUlRfU1lNQk9MKGZvbGlvX21pZ3JhdGVfZmxhZ3MpO1xcbm1tL21pZ3JhdGUuYy04NjUtXFxuLS1cXG5tbS9taWdyYXRlLmM9ODcwPXN0YXRpYyBpbnQgX19taWdyYXRlX2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmRzdCxcXG4tLVxcbm1tL21pZ3JhdGUuYy04OTAtXFxubW0vbWlncmF0ZS5jOjg5MTpcXHRmb2xpb19taWdyYXRlX2ZsYWdzKGRzdCwgc3JjKTtcXG5tbS9taWdyYXRlLmMtODkyLVxcdHJldHVybiAwO1xcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYz0xMTA5PXN0YXRpYyB2b2lkIF9fbWlncmF0ZV9kZXZpY2VfcGFnZXModW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTEyNTEtXFx0XFx0XFx0ZWxzZVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTI1MjpcXHRcXHRcXHRcXHRmb2xpb19taWdyYXRlX2ZsYWdzKG5ld2ZvbGlvLCBmb2xpbyk7XFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjUzLVxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTk6MDQ6MzcuMTgxODIwMjUxWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyNDU2OTEyOTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIE1pZ3JhdGlvbiBIb3RzcG90cyoqXG5cbk9rYXksIHNvIEkndmUgZ290IGEgaGFuZGxlIG9uIHRoZSBjb2RlIGNoYW5nZXMgcmVsYXRlZCB0byBmb2xpbyBtaWdyYXRpb24uIGBmb2xpb19taWdyYXRlX2ZsYWdzYCBpbW1lZGlhdGVseSBzdGFuZHMgb3V0IGFzIGEgc3Ryb25nIGNhbmRpZGF0ZSwgZ2l2ZW4gdGhhdCBpdCdzIGV4cG9ydGVkIGFuZCB1c2VkIGRpcmVjdGx5IGluIHRoZSBtaWdyYXRpb24gcHJvY2Vzcy4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC5cblxuTm93LCBsZXQncyBkaWcgYSBiaXQgZGVlcGVyIGludG8gcG90ZW50aWFsIGJvdHRsZW5lY2tzLiBgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVgIGlzIHRlbXB0aW5nLCBidXQgaXQncyBwYXJ0IG9mIHRoZSBgdXBkYXRlX2xydV9zaXplYCBjYWxsIGNoYWluLCBhbmQgdGhhdCdzIGNhbGxlZCBmcmVxdWVudGx5IGZyb20gYGxydXZlY19hZGRfZm9saW9gLCBgbHJ1dmVjX2RlbF9mb2xpb2AsIGFuZCB0aGUgbGlrZS4gSXQncyB0b28gaG90IGEgcGF0aCB0byBtZXNzIHdpdGggcmlnaHQgbm93LiBJIG5lZWQgdG8gYXZvaWQgaW1wYWN0aW5nIGNyaXRpY2FsIHBlcmZvcm1hbmNlLlxuXG5XaGF0IGVsc2U/IFdlbGwsIGEgYnVuY2ggb2Ygc3RhdGljIGZ1bmN0aW9ucyB3ZXJlIG1vZGlmaWVkLiBMZXQncyBzZWUuLi4gYGZvbGlvX3VwZGF0ZV9nZW5gLCBgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkYCwgYHdhbGtfcHRlX3JhbmdlYCwgYGZvbGlvX2luY19nZW5gLCBhbmQgYHJlYWRfY3RybF9wb3NgLiBTaW5jZSB0aGV5J3JlIHN0YXRpYywgSSdtIGxlc3Mgd29ycmllZCBhYm91dCB0aGVtIGJlaW5nIGV4cG9zZWQgYXMgdGhlIHByaW1hcnkgY2F1c2Ugb2YgcGVyZm9ybWFuY2UgZHJvcHMuIEJ1dCBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IEknbSBub3QgbWlzc2luZyBhbnl0aGluZy5cblxuQWxyaWdodCwgSSdsbCByZXZpZXcgbm9uLXN0YXRpYyBmdW5jdGlvbnMgYWdhaW4uXG5gZm9saW9fZmxhZ3NfaXNfZmlsZV9scnVgLCBgbHJ1X2dlbl9mcm9tX2ZsYWdzYCwgYGxydV9nZW5fc2V0X2ZsYWdzYCwgYGxydV9yZWZzX2Zyb21fZmxhZ3NgLCBgbHJ1X3JlZnNfc2V0X2ZsYWdzYCwgYGZvbGlvX2xydV9yZWZzYCwgYGZvbGlvX3NldF9scnVfcmVmc2AsIGBmb2xpb19scnVfZ2VuYCwgYW5kIGBmb2xpb19taWdyYXRlX2xydV9yZWZzYCBhcmUgYWxsIGlubGluZSwgc28gdGhleSBhcmUgcHJvYmFibHkgc2FmZS5cblxuSG9sZCBvbiwgdGhlIHBhdGNoIHRvdWNoZXMgYG1tL2ZvbGlvLmNgIGFzIHdlbGwuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZC5cbmBscnVfZ2VuX2luY19yZWZzYCBhbmQgYGxydV9nZW5fY2xlYXJfcmVmc2AsIGJvdGggc3RhdGljLlxuXG5TbywgdGFraW5nIHN0b2NrLCBpdCBsb29rcyBsaWtlIGBmb2xpb19taWdyYXRlX2ZsYWdzYCBpcyB0aGUgcHJpbWFyeSBleHBvc2VkIHBvaW50IG9mIGludGVyZXN0LiBJdCdzIHRoZSBjbGVhbmVzdCBzeW1ib2wgdG8gZm9jdXMgb24uIEFuZCBJJ20gbm93IGZhaXJseSBjb25maWRlbnQgaW4gYWxzbyByZXZpZXdpbmcgYGxydV9nZW5fbG9va19hcm91bmRgIGFzIHdlbGwuIFRoYXQgbG9va3MgbGlrZSBhIHBvc3NpYmxlIGhvdHNwb3QuXG5cbkZpbmFsbHksIEkgc2hvdWxkIGNvbmZpcm0gdGhhdCBgTFJVX0dFTmAgaXMgZW5hYmxlZCBpbiB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uLiBKdXN0IHRvIGJlIHN1cmUuIEkgbmVlZCB0byBjb25zaWRlciBhbGwgdGhlIGFuZ2xlcyB0byBlbnN1cmUgb3B0aW1hbCBwZXJmb3JtYW5jZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk5OTEsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTk6MDQ6NDkuNjM4NzM0OTU4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDE5Mjk3ODYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19MUlVfR0VOXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdD0xMz1CdWlsZCB0aGUga2VybmVsIHdpdGggdGhlIGZvbGxvd2luZyBjb25maWd1cmF0aW9ucy5cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QtMTQtXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0OjE1OiogYGBDT05GSUdfTFJVX0dFTj15YGBcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3Q6MTY6KiBgYENPTkZJR19MUlVfR0VOX0VOQUJMRUQ9eWBgXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0LTE3LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0PTI4PWZvbGxvd2luZyBjb21wb25lbnRzLiBJdHMgZGVmYXVsdCB2YWx1ZSBkZXBlbmRzIG9uXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0OjI5OmBgQ09ORklHX0xSVV9HRU5fRU5BQkxFRGBgLiBBbGwgdGhlIGNvbXBvbmVudHMgc2hvdWxkIGJlIGVuYWJsZWRcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QtMzAtdW5sZXNzIHNvbWUgb2YgdGhlbSBoYXZlIHVuZm9yZXNlZW4gc2lkZSBlZmZlY3RzLiBXcml0aW5nIHRvXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3Q9ODg9Y29uY2F0ZW5hdGlvbiB3aXRoIGRlbGltaXRlcnMgYGAsYGAgYW5kIGBgO2BgLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0LTkwLWBgL3N5cy9rZXJuZWwvZGVidWcvbHJ1X2dlbl9mdWxsYGAgcHJvdmlkZXMgYWRkaXRpb25hbCBzdGF0cyBmb3JcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3Q6OTE6ZGVidWdnaW5nLiBgYENPTkZJR19MUlVfR0VOX1NUQVRTPXlgYCBrZWVwcyBoaXN0b3JpY2FsIHN0YXRzIGZyb21cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QtOTItZXZpY3RlZCBnZW5lcmF0aW9ucyBpbiB0aGlzIGZpbGUuXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0yMDI9c3RydWN0IG1lbV9jZ3JvdXAge1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMjgzLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjI4NDojaWZkZWYgQ09ORklHX0xSVV9HRU5fV0FMS1NfTU1VXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMjg1LVxcdC8qIHBlci1tZW1jZyBtbV9zdHJ1Y3QgbGlzdCAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaD04Nz1zdGF0aWMgX19hbHdheXNfaW5saW5lIGVudW0gbHJ1X2xpc3QgZm9saW9fbHJ1X2xpc3QoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtMTAyLVxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg6MTAzOiNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtMTA0LVxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg9MTA1PXN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX3N3aXRjaGluZyh2b2lkKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC0xMTAtfVxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg6MTExOiNpZmRlZiBDT05GSUdfTFJVX0dFTl9FTkFCTEVEXFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC0xMTItc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZW5hYmxlZCh2b2lkKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaD0zODI9c3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC0zODYtfVxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg6Mzg3OiNlbHNlIC8qICFDT05GSUdfTFJVX0dFTiAqL1xcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtMzg4LVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaD00MTQ9c3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC00MTgtfVxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg6NDE5OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtNDIwLVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oPTExNzU9c3RydWN0IG1tX3N0cnVjdCB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTQwMi0jZW5kaWYgLyogQ09ORklHX0tTTSAqL1xcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDoxNDAzOiNpZmRlZiBDT05GSUdfTFJVX0dFTl9XQUxLU19NTVVcXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTQwNC1cXHRcXHRzdHJ1Y3Qge1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTE0MTctXFx0XFx0fSBscnVfZ2VuO1xcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDoxNDE4OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTl9XQUxLU19NTVUgKi9cXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTQxOS0jaWZkZWYgQ09ORklHX01NX0lEXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg9MTQ4MD1zdGF0aWMgaW5saW5lIGNwdW1hc2tfdCAqbW1fY3B1bWFzayhzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xNDg0LVxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDoxNDg1OiNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xNDg2LVxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaD0xNDg3PXN0cnVjdCBscnVfZ2VuX21tX2xpc3Qge1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTE0OTMtXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjE0OTQ6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTE0OTUtXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjE0OTY6I2lmZGVmIENPTkZJR19MUlVfR0VOX1dBTEtTX01NVVxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xNDk3LVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oPTE1MTE9c3RhdGljIGlubGluZSB2b2lkIGxydV9nZW5fdXNlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTE1MjAtXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjE1MjE6I2Vsc2UgLyogIUNPTkZJR19MUlVfR0VOX1dBTEtTX01NVSAqL1xcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xNTIyLVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oPTE1Mzk9c3RhdGljIGlubGluZSB2b2lkIGxydV9nZW5fdXNlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTE1NDItXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjE1NDM6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOX1dBTEtTX01NVSAqL1xcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xNTQ0LVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD01Mjg9c3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrO1xcbmluY2x1ZGUvbGludXgvbW16b25lLmgtNTI5LVxcbmluY2x1ZGUvbGludXgvbW16b25lLmg6NTMwOiNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtNTMxLVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD01Mzc9ZW51bSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTU0Ny0vKiB3aGV0aGVyIHRvIGtlZXAgaGlzdG9yaWNhbCBzdGF0cyBmcm9tIGV2aWN0ZWQgZ2VuZXJhdGlvbnMgKi9cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjU0ODojaWZkZWYgQ09ORklHX0xSVV9HRU5fU1RBVFNcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTU0OS0jZGVmaW5lIE5SX0hJU1RfR0VOU1xcdFxcdE1BWF9OUl9HRU5TXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTcwNT12b2lkIGxydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKTtcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTcwNi1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjcwNzojZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi9cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTcwOC1cXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmg9NzU3PXZvaWQgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBuaWQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTc2MC1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjc2MTojZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTc2Mi1cXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmg9NzY5PXN0cnVjdCBscnV2ZWMge1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC03ODgtXFx0dW5zaWduZWQgbG9uZ1xcdFxcdFxcdGZsYWdzO1xcbmluY2x1ZGUvbGludXgvbW16b25lLmg6Nzg5OiNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtNzkwLVxcdC8qIGV2aWN0YWJsZSBwYWdlcyBkaXZpZGVkIGludG8gZ2VuZXJhdGlvbnMgKi9cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTc5MS1cXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpb1xcdFxcdGxydWdlbjtcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjc5MjojaWZkZWYgQ09ORklHX0xSVV9HRU5fV0FMS1NfTU1VXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC03OTMtXFx0LyogdG8gY29uY3VycmVudGx5IGl0ZXJhdGUgbHJ1X2dlbl9tbV9saXN0ICovXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTc5NS0jZW5kaWZcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjc5NjojZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTc5Ny0jaWZkZWYgQ09ORklHX01FTUNHXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTE0ODE9dHlwZWRlZiBzdHJ1Y3QgcGdsaXN0X2RhdGEge1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xNTk4LVxcbmluY2x1ZGUvbGludXgvbW16b25lLmg6MTU5OTojaWZkZWYgQ09ORklHX0xSVV9HRU5cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTE2MDAtXFx0Lyoga3N3YXAgbW0gd2FsayBkYXRhICovXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmg9ODI2PXN0cnVjdCB0YXNrX3N0cnVjdCB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMTAyNC0jZW5kaWZcXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmg6MTAyNTojaWZkZWYgQ09ORklHX0xSVV9HRU5cXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMTAyNi1cXHQvKiB3aGV0aGVyIHRoZSBMUlUgYWxnb3JpdGhtIG1heSBhcHBseSB0byB0aGlzIGFjY2VzcyAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9zd2FwLmg9MTQ2PXN0cnVjdCByZWNsYWltX3N0YXRlIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvc3dhcC5oLTE0OC1cXHR1bnNpZ25lZCBsb25nIHJlY2xhaW1lZDtcXG5pbmNsdWRlL2xpbnV4L3N3YXAuaDoxNDk6I2lmZGVmIENPTkZJR19MUlVfR0VOXFxuaW5jbHVkZS9saW51eC9zd2FwLmgtMTUwLVxcdC8qIHBlci10aHJlYWQgbW0gd2FsayBkYXRhICovXFxuLS1cXG5rZXJuZWwvYm91bmRzLmM9MTc9aW50IG1haW4odm9pZClcXG4tLVxcbmtlcm5lbC9ib3VuZHMuYy0yNS1cXHRERUZJTkUoU1BJTkxPQ0tfU0laRSwgc2l6ZW9mKHNwaW5sb2NrX3QpKTtcXG5rZXJuZWwvYm91bmRzLmM6MjY6I2lmZGVmIENPTkZJR19MUlVfR0VOXFxua2VybmVsL2JvdW5kcy5jLTI3LVxcdERFRklORShMUlVfR0VOX1dJRFRILCBvcmRlcl9iYXNlXzIoTUFYX05SX0dFTlMgKyAxKSk7XFxuLS1cXG5rZXJuZWwvZm9yay5jPTI2OTQ9cGlkX3Qga2VybmVsX2Nsb25lKHN0cnVjdCBrZXJuZWxfY2xvbmVfYXJncyAqYXJncylcXG4tLVxcbmtlcm5lbC9mb3JrLmMtMjc3MS1cXG5rZXJuZWwvZm9yay5jOjI3NzI6XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0xSVV9HRU5fV0FMS1NfTU1VKSBcXHUwMDI2XFx1MDAyNiAhKGNsb25lX2ZsYWdzIFxcdTAwMjYgQ0xPTkVfVk0pKSB7XFxua2VybmVsL2ZvcmsuYy0yNzczLVxcdFxcdC8qIGxvY2sgdGhlIHRhc2sgdG8gc3luY2hyb25pemUgd2l0aCBtZW1jZyBtaWdyYXRpb24gKi9cXG4tLVxcbm1tL2ZvbGlvLmM9MzIyPXN0YXRpYyB2b2lkIF9fbHJ1X2NhY2hlX2FjdGl2YXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9mb2xpby5jLTM1MS1cXG5tbS9mb2xpby5jOjM1MjojaWZkZWYgQ09ORklHX0xSVV9HRU5cXG5tbS9mb2xpby5jLTM1My1cXG4tLVxcbm1tL2ZvbGlvLmM9MzgwPXN0YXRpYyBib29sIGxydV9nZW5fY2xlYXJfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vZm9saW8uYy0zOTgtXFxubW0vZm9saW8uYzozOTk6I2Vsc2UgLyogIUNPTkZJR19MUlVfR0VOICovXFxubW0vZm9saW8uYy00MDAtXFxuLS1cXG5tbS9mb2xpby5jPTQwNT1zdGF0aWMgYm9vbCBscnVfZ2VuX2NsZWFyX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2ZvbGlvLmMtNDA5LVxcbm1tL2ZvbGlvLmM6NDEwOiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xcbm1tL2ZvbGlvLmMtNDExLVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTQ2MTA9c3RhdGljIHZvaWQgbWVtX2Nncm91cF9leGl0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00NjI2LVxcbm1tL21lbWNvbnRyb2wuYzo0NjI3OiNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbm1tL21lbWNvbnRyb2wuYy00NjI4LXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfbHJ1X2dlbl9hdHRhY2goc3RydWN0IGNncm91cF90YXNrc2V0ICp0c2V0KVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTQ2NDY9c3RhdGljIHZvaWQgbWVtX2Nncm91cF9scnVfZ2VuX2F0dGFjaChzdHJ1Y3QgY2dyb3VwX3Rhc2tzZXQgKnRzZXQpIHt9XFxubW0vbWVtY29udHJvbC5jOjQ2NDc6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXFxubW0vbWVtY29udHJvbC5jLTQ2NDgtXFxuLS1cXG5tbS9tZW1vcnkuYz02NzI1PXN0YXRpYyBpbmxpbmUgdm9pZCBtbV9hY2NvdW50X2ZhdWx0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyxcXG4tLVxcbm1tL21lbW9yeS5jLTY3NzctXFxubW0vbWVtb3J5LmM6Njc3ODojaWZkZWYgQ09ORklHX0xSVV9HRU5cXG5tbS9tZW1vcnkuYy02Nzc5LXN0YXRpYyB2b2lkIGxydV9nZW5fZW50ZXJfZmF1bHQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5tbS9tZW1vcnkuYz02Nzk0PXN0YXRpYyB2b2lkIGxydV9nZW5fZXhpdF9mYXVsdCh2b2lkKVxcbi0tXFxubW0vbWVtb3J5LmMtNjc5Ni19XFxubW0vbWVtb3J5LmM6Njc5NzojZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cXG5tbS9tZW1vcnkuYy02Nzk4LVxcbi0tXFxubW0vdm1zY2FuLmM9ODI3PWVudW0gZm9saW9fcmVmZXJlbmNlcyB7XFxuLS1cXG5tbS92bXNjYW4uYy04MzItXFxubW0vdm1zY2FuLmM6ODMzOiNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbm1tL3Ztc2Nhbi5jLTgzNC0vKlxcbi0tXFxubW0vdm1zY2FuLmM9ODY1PXN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTg2OC19XFxubW0vdm1zY2FuLmM6ODY5OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xcbm1tL3Ztc2Nhbi5jLTg3MC1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTI2ODM9c3RhdGljIGJvb2wgY2FuX2FnZV9hbm9uX3BhZ2VzKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI2OTQtXFxubW0vdm1zY2FuLmM6MjY5NTojaWZkZWYgQ09ORklHX0xSVV9HRU5cXG5tbS92bXNjYW4uYy0yNjk2LVxcbm1tL3Ztc2Nhbi5jPTI2OTc9REVGSU5FX1NUQVRJQ19LRVlfRkFMU0UobHJ1X3N3aXRjaCk7XFxubW0vdm1zY2FuLmM6MjY5ODojaWZkZWYgQ09ORklHX0xSVV9HRU5fRU5BQkxFRFxcbm1tL3Ztc2Nhbi5jLTI2OTktREVGSU5FX1NUQVRJQ19LRVlfQVJSQVlfVFJVRShscnVfZ2VuX2NhcHMsIE5SX0xSVV9HRU5fQ0FQUyk7XFxuLS1cXG5tbS92bXNjYW4uYz0yODgzPXN0YXRpYyB2b2lkIHJlc2V0X2Jsb29tX2ZpbHRlcihzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUsIHVuc2lnbmVkIGxvbmcgc2VxKVxcbi0tXFxubW0vdm1zY2FuLmMtMjkwMi1cXG5tbS92bXNjYW4uYzoyOTAzOiNpZmRlZiBDT05GSUdfTFJVX0dFTl9XQUxLU19NTVVcXG5tbS92bXNjYW4uYy0yOTA0LVxcbi0tXFxubW0vdm1zY2FuLmM9MzAxMj12b2lkIGxydV9nZW5fbWlncmF0ZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbm1tL3Ztc2Nhbi5jLTMwNDAtXFxubW0vdm1zY2FuLmM6MzA0MTojZWxzZSAvKiAhQ09ORklHX0xSVV9HRU5fV0FMS1NfTU1VICovXFxubW0vdm1zY2FuLmMtMzA0Mi1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTU5NTM9bGF0ZV9pbml0Y2FsbChpbml0X2xydV9nZW4pO1xcbm1tL3Ztc2Nhbi5jLTU5NTQtXFxubW0vdm1zY2FuLmM6NTk1NTojZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi9cXG5tbS92bXNjYW4uYy01OTU2LVxcbi0tXFxubW0vdm1zY2FuLmM9NTk2Nz1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTk3MS1cXG5tbS92bXNjYW4uYzo1OTcyOiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xcbm1tL3Ztc2Nhbi5jLTU5NzMtXFxuLS1cXG5tbS93b3JraW5nc2V0LmM9MjEzPXN0YXRpYyB2b2lkIHVucGFja19zaGFkb3codm9pZCAqc2hhZG93LCBpbnQgKm1lbWNnaWRwLCBwZ19kYXRhX3QgKipwZ2RhdCxcXG4tLVxcbm1tL3dvcmtpbmdzZXQuYy0yMzItXFxubW0vd29ya2luZ3NldC5jOjIzMzojaWZkZWYgQ09ORklHX0xSVV9HRU5cXG5tbS93b3JraW5nc2V0LmMtMjM0LVxcbi0tXFxubW0vd29ya2luZ3NldC5jPTI5Mj1zdGF0aWMgdm9pZCBscnVfZ2VuX3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KVxcbi0tXFxubW0vd29ya2luZ3NldC5jLTMzNi1cXG5tbS93b3JraW5nc2V0LmM6MzM3OiNlbHNlIC8qICFDT05GSUdfTFJVX0dFTiAqL1xcbm1tL3dvcmtpbmdzZXQuYy0zMzgtXFxuLS1cXG5tbS93b3JraW5nc2V0LmM9MzUwPXN0YXRpYyB2b2lkIGxydV9nZW5fcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXFxuLS1cXG5tbS93b3JraW5nc2V0LmMtMzUzLVxcbm1tL3dvcmtpbmdzZXQuYzozNTQ6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXFxubW0vd29ya2luZ3NldC5jLTM1NS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTk6MDQ6NTEuMDU4MDM3NDIxWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNzU2NTQ5MzY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBNR0xSVSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgTUdMUlUgcGF0Y2gsIGFuZCBoZXJlJ3MgdGhlIGJyZWFrZG93biBvZiBteSB0aGlua2luZy4gRmlyc3QsIGBDT05GSUdfTFJVX0dFTmAgaXMgdGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbiBoZXJlLCBhbmQgYENPTkZJR19MUlVfR0VOX0VOQUJMRURgIGVuYWJsZXMgaXQgYnkgZGVmYXVsdC4gU28sIGZvciB0aGUgZnV6emluZyBzZXR1cCwgYExSVV9HRU5gIGFuZCBgTFJVX0dFTl9FTkFCTEVEYCBkZWZpbml0ZWx5IG5lZWQgdG8gYmUgaW5jbHVkZWQgaW4gYEVuYWJsZUNvbmZpZ3NgLiBUaGF0J3MgYSBuby1icmFpbmVyLlxuXG5Ob3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBpcyB0aGlzIHBhdGNoIGludHJvZHVjaW5nIGZ1bmN0aW9uYWwgY2hhbmdlcyBzaWduaWZpY2FudCBlbm91Z2ggdG8gd2FycmFudCBmdXp6aW5nPyBBYnNvbHV0ZWx5LiBUaGUgcGF0Y2ggdG91Y2hlcyB0aGUgdmVyeSBoZWFydCBvZiBtZW1vcnkgbWFuYWdlbWVudCDigJMgdGhlIExSVSBnZW5lcmF0aW9uIGxvZ2ljLiBUaGUgY2hhbmdlcyB0byBgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVgIGltbWVkaWF0ZWx5IGNhdWdodCBteSBleWU7IHVzaW5nIGF0b21pYyBvcGVyYXRpb25zIGlzIGEgY3JpdGljYWwgZml4IGZvciBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbi4gQWxzbywgY2hhbmdlcyB0byBgZm9saW9fbWlncmF0ZV9mbGFnc2AsIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCwgYW5kIHRoZSB1cGRhdGVzIGluIGBtbS92bXNjYW4uY2AgYWxsIHNjcmVhbSBcImZ1bmN0aW9uYWwgaW1wYWN0LlwiIFNvLCBgV29ydGhGdXp6aW5nYCBpcyBkZWZpbml0ZWx5IHRydWUuXG5cblRoaXMgbGVhZHMgbWUgdG8gYEZvY3VzU3ltYm9sc2AuIEnigJltIGluaXRpYWxseSB0aGlua2luZyBgZm9saW9fbWlncmF0ZV9mbGFnc2AgYW5kIGBscnVfZ2VuX2xvb2tfYXJvdW5kYC4gQnV0IHdhaXQgYSBtaW51dGUsIGBmb2xpb19taWdyYXRlX2ZsYWdzYCBpcyBjYWxsZWQgZnJvbSBgbWlncmF0ZV9wYWdlc2AgYW5kIGBtaWdyYXRlX2RldmljZV9wYWdlc2AuIFBhZ2UgbWlncmF0aW9uIGlzbid0IGFzIGhvdCBhcyBwYWdlIGZhdWx0cyBvciByZWNsYWltLCBidXQgaXQncyBzdGlsbCBmdW5kYW1lbnRhbCB0byBtZW1vcnkgbWFuYWdlbWVudC4gQXMgZm9yIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCwgdGhhdCBvbmUgaXMgY2FsbGVkIHdpdGhpbiBgZm9saW9fcmVmZXJlbmNlZF9vbmVgIGR1cmluZyBybWFwIHdhbGtpbmcsIHdoaWNoIGlzIGFic29sdXRlbHkgcGFydCBvZiBwYWdlIHJlY2xhaW0uIEl0J3MgYSBiaXQgaG90LCBnaXZlbiB0aGF0IGl0J3MgcGFydCBvZiBNR0xSVS5cblxuTGV0J3MgZG91YmxlIGNoZWNrLiBHb2luZyB0aHJvdWdoIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucywgSSBzZWUgdGhlIGZvbGxvd2luZyBpbmxpbmVzOiBgZm9saW9fbWlncmF0ZV9scnVfcmVmc2AsIGBmb2xpb19zZXRfbHJ1X3JlZnNgLCBgbHJ1X3JlZnNfc2V0X2ZsYWdzYCwgYGxydV9nZW5fc2V0X2ZsYWdzYCwgYGxydV9nZW5fZnJvbV9mbGFnc2AsIGFuZCBgZm9saW9fZmxhZ3NfaXNfZmlsZV9scnVgLiBUaG9zZSBkb24ndCBjb25jZXJuIG1lLCBzaW5jZSB0aGV5IGFyZSBpbmxpbmUuIFRodXMsIHRoZSBvbmx5IG5vbi1zdGF0aWMgZnVuY3Rpb25zIGFyZSBgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVgLCBgZm9saW9fbWlncmF0ZV9mbGFnc2AsIGFuZCBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAuXG5cblJpZ2h0LCBzbyBhZnRlciByZXZpZXdpbmcsIGBmb2xpb19taWdyYXRlX2ZsYWdzYCBhbmQgYGxydV9nZW5fbG9va19hcm91bmRgIHN0YXkgaW4gYEZvY3VzU3ltYm9sc2AuIEhvd2V2ZXIsIGBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZWAgaXMgdG9vIGhvdCB0byBpbmNsdWRlLlxuXG5UbyBzdW1tYXJpemUsIHRoaXMgcGF0Y2ggcmVmYWN0b3JzIE1HTFJVJ3MgcGFnZSBmbGFncyBhbmQgZml4ZXMgYSByYWNlLiBJdCB0b3VjaGVzIGNvcmUgbG9naWM6IHBhZ2UgbWlncmF0aW9uIGFuZCByZWNsYWltLiBUaGUgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbCwgYW5kIHRoYXQgbWFrZXMgaXQgcmlwZSBmb3IgZnV6emluZy5cblxuT2theSwgSSB0aGluayBJIGhhdmUgYSBzb2xpZCB1bmRlcnN0YW5kaW5nLCBhbmQgSSdtIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ5NTYsIk91dHB1dFRva2VucyI6MTQ5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE5OjA1OjAxLjgxNDU4ODY0OVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyNzg4ODI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJMUlVfR0VOXCIsXG4gICAgXCJMUlVfR0VOX0VOQUJMRURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmb2xpb19taWdyYXRlX2ZsYWdzXCIsXG4gICAgXCJscnVfZ2VuX2xvb2tfYXJvdW5kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBwYWdlIGZsYWdzIGhhbmRsaW5nIGFuZCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIGBscnVfem9uZV9zaXplYCB1cGRhdGVzIGJ5IHVzaW5nIGF0b21pYyBvcGVyYXRpb25zLiBJdCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLCBzcGVjaWZpY2FsbHkgcGFnZSBtaWdyYXRpb24gKGBmb2xpb19taWdyYXRlX2ZsYWdzYCkgYW5kIHBhZ2UgcmVjbGFpbSBsb29rYXJvdW5kIChgbHJ1X2dlbl9sb29rX2Fyb3VuZGApLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgbWFraW5nIHRoZW0gd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJMUlVfR0VOXCIsXG4gICAgXCJMUlVfR0VOX0VOQUJMRURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmb2xpb19taWdyYXRlX2ZsYWdzXCIsXG4gICAgXCJscnVfZ2VuX2xvb2tfYXJvdW5kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBwYWdlIGZsYWdzIGhhbmRsaW5nIGFuZCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIGBscnVfem9uZV9zaXplYCB1cGRhdGVzIGJ5IHVzaW5nIGF0b21pYyBvcGVyYXRpb25zLiBJdCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLCBzcGVjaWZpY2FsbHkgcGFnZSBtaWdyYXRpb24gKGBmb2xpb19taWdyYXRlX2ZsYWdzYCkgYW5kIHBhZ2UgcmVjbGFpbSBsb29rYXJvdW5kIChgbHJ1X2dlbl9sb29rX2Fyb3VuZGApLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgbWFraW5nIHRoZW0gd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTk6MDU6MDEuODg3Mzg0NDc4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzYwMTgwMDk0MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE5OjA1OjAxLjg4Nzc5NTc3OFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNzYwMTM4NTI1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBpbnRlcm5hbCBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCBzcGVjaWZpY2FsbHkgTFJVIGdlbmVyYXRpb24gYW5kIGZvbGlvIGZsYWdzIG1hbmlwdWxhdGlvbiwgYW5kIGNoYW5nZXMgYGxydV96b25lX3NpemVgIHRvIHVzZSBgYXRvbWljX2xvbmdfdGAuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgdGhhdCBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFsbG9jYXRlIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIG9yIG1vZGlmeSBib3VuZHMgY2hlY2tzIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgbmV3bHkgaW50cm9kdWNlZCBvdXQtcGFyYW1ldGVyIGBpc19maWxlYCBpbiBgZm9saW9fdXBkYXRlX2dlbmAgaXMgYWx3YXlzIGluaXRpYWxpemVkIGJlZm9yZSByZXR1cm5pbmcuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgcmFjZSBjb25kaXRpb25zLCB1c2UtYWZ0ZXItZnJlZSwgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcykgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgb3RoZXIgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDI1OWEyNTIyMzg3NmQwZjI3M2IzNGZlNmFlZjM0MzY2Yjc1NjA5OWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAyNSAxOTowMzoyMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbmluZGV4IDIxNWUyZTg3ZjQyYjIuLjdiODlkMGNiNWY2YzYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuKysrIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbkBAIC0xMTMsNyArMTEzLDcgQEAgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUge1xuIFx0LyogRmllbGRzIHdoaWNoIGdldCB1cGRhdGVkIG9mdGVuIGF0IHRoZSBlbmQuICovXG4gXHRzdHJ1Y3QgbHJ1dmVjXHRcdGxydXZlYztcbiBcdENBQ0hFTElORV9QQURESU5HKF9wYWQyXyk7XG4tXHR1bnNpZ25lZCBsb25nXHRcdGxydV96b25lX3NpemVbTUFYX05SX1pPTkVTXVtOUl9MUlVfTElTVFNdO1xuK1x0YXRvbWljX2xvbmdfdFx0XHRscnVfem9uZV9zaXplW01BWF9OUl9aT05FU11bTlJfTFJVX0xJU1RTXTtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwX3JlY2xhaW1faXRlclx0aXRlcjtcbiBcbiBcdC8qXG5AQCAtOTAyLDEwICs5MDIsMTUgQEAgc3RhdGljIGlubGluZVxuIHVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9nZXRfem9uZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRcdGVudW0gbHJ1X2xpc3QgbHJ1LCBpbnQgem9uZV9pZHgpXG4ge1xuK1x0bG9uZyB2YWw7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXo7XG4gXG4gXHRteiA9IGNvbnRhaW5lcl9vZihscnV2ZWMsIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlLCBscnV2ZWMpO1xuLVx0cmV0dXJuIFJFQURfT05DRShtei1cdTAwM2VscnVfem9uZV9zaXplW3pvbmVfaWR4XVtscnVdKTtcbitcdHZhbCA9IGF0b21pY19sb25nX3JlYWQoXHUwMDI2bXotXHUwMDNlbHJ1X3pvbmVfc2l6ZVt6b25lX2lkeF1bbHJ1XSk7XG4rXHRpZiAoV0FSTl9PTl9PTkNFKHZhbCBcdTAwM2MgMCkpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0dXJuIHZhbDtcbiB9XG4gXG4gdm9pZCBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzayk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaCBiL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmhcbmluZGV4IDYyMWM4NjUzZDhmN2UuLjhjZjgyOTg5ZWMyNjMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oXG5AQCAtMTAsNiArMTAsMTEgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91c2VyZmF1bHRmZF9rLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9sZWFmb3BzLmhcdTAwM2VcbiBcbitzdGF0aWMgaW5saW5lIGludCBmb2xpb19mbGFnc19pc19maWxlX2xydShjb25zdCB1bnNpZ25lZCBsb25nICpmbGFncylcbit7XG4rXHRyZXR1cm4gIXRlc3RfYml0KFBHX3N3YXBiYWNrZWQsIGZsYWdzKTtcbit9XG4rXG4gLyoqXG4gICogZm9saW9faXNfZmlsZV9scnUgLSBTaG91bGQgdGhlIGZvbGlvIGJlIG9uIGEgZmlsZSBMUlUgb3IgYW5vbiBMUlU/XG4gICogQGZvbGlvOiBUaGUgZm9saW8gdG8gdGVzdC5cbkBAIC0yNyw3ICszMiw3IEBAXG4gICovXG4gc3RhdGljIGlubGluZSBpbnQgZm9saW9faXNfZmlsZV9scnUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4tXHRyZXR1cm4gIWZvbGlvX3Rlc3Rfc3dhcGJhY2tlZChmb2xpbyk7XG4rXHRyZXR1cm4gZm9saW9fZmxhZ3NfaXNfZmlsZV9scnUoY29uc3RfZm9saW9fZmxhZ3MoZm9saW8sIDApKTtcbiB9XG4gXG4gc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIF9fdXBkYXRlX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbkBAIC0xNDIsMTAgKzE0Nyw0MiBAQCBzdGF0aWMgaW5saW5lIGludCBscnVfdGllcl9mcm9tX3JlZnMoaW50IHJlZnMsIGJvb2wgd29ya2luZ3NldClcbiBcdHJldHVybiB3b3JraW5nc2V0ID8gTUFYX05SX1RJRVJTIC0gMSA6IG9yZGVyX2Jhc2VfMihyZWZzKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X3JlZnMoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbisvKipcbisgKiBscnVfZ2VuX2Zyb21fZmxhZ3MgLSBSZXR1cm4gdGhlIExSVSBnZW5lcmF0aW9uIG51bWJlciBmcm9tIGZvbGlvIGZsYWdzLlxuKyAqIEBmbGFnczogZm9saW8gZmxhZ3NcbisgKlxuKyAqIFJldHVybnM6IEEgbnVtYmVyIGJldHdlZW4gMCBhbmQgKE1BWF9OUl9HRU5TIC0gMSksIGluY2x1c2l2ZS4gUmV0dXJuc1xuKyAqIC0xIGlmIHRoZSBmbGFncyBpbmRpY2F0ZSB0aGUgZm9saW8gaXMgb2ZmIHRoZSBsaXN0IChlLmcuLCBpc29sYXRlZCkuXG4rICovXG4rc3RhdGljIGlubGluZSBpbnQgbHJ1X2dlbl9mcm9tX2ZsYWdzKHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4re1xuK1x0aW50IGdlbiA9ICgoZmxhZ3MgXHUwMDI2IExSVV9HRU5fTUFTSykgXHUwMDNlXHUwMDNlIExSVV9HRU5fUEdPRkYpO1xuK1xuK1x0QlVJTERfQlVHX09OKExSVV9HRU5fTUFTSyBcdTAwMjYgTFJVX1JFRlNfTUFTSyk7XG4rXHRnZW4gLT0gMTtcbitcdFZNX1dBUk5fT05fT05DRShnZW4gIT0gLTEgXHUwMDI2XHUwMDI2IGdlbiBcdTAwM2U9IE1BWF9OUl9HRU5TKTtcbitcdHJldHVybiBnZW47XG4rfVxuK1xuKy8qKlxuKyAqIGxydV9nZW5fc2V0X2ZsYWdzIC0gU2V0IHRoZSBMUlUgZ2VuZXJhdGlvbiBudW1iZXIgdG8gc3BlY2lmaWVkIGZvbGlvIGZsYWdzLlxuKyAqIEBmbGFnczogcG9pbnRlciB0byB0aGUgZm9saW8gZmxhZ3NcbisgKiBAZ2VuOiBnZW5lcmF0aW9uIG51bWJlciwgYmV0d2VlbiAwIGFuZCAoTUFYX05SX0dFTlMgLSAxKSwgaW5jbHVzaXZlLlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBscnVfZ2VuX3NldF9mbGFncyh1bnNpZ25lZCBsb25nICpmbGFncywgaW50IGdlbilcbiB7XG4tXHR1bnNpZ25lZCBsb25nIGZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVx1MDAzZWZsYWdzLmYpO1xuK1x0Vk1fV0FSTl9PTl9PTkNFKGdlbiBcdTAwM2U9IE1BWF9OUl9HRU5TIHx8IGdlbiBcdTAwM2MgMCk7XG4rXG4rXHQqZmxhZ3MgXHUwMDI2PSB+TFJVX0dFTl9NQVNLO1xuK1x0KmZsYWdzIHw9IChnZW4gKyAxVUwpIFx1MDAzY1x1MDAzYyBMUlVfR0VOX1BHT0ZGO1xuK31cbiBcbisvKipcbisgKiBscnVfcmVmc19mcm9tX2ZsYWdzIC0gUmV0dXJuIExSVSByZWZlcmVuY2VkIC8gYWNjZXNzIGNvdW50IGZyb20gZm9saW8gZmxhZ3MuXG4rICogQGZsYWdzOiBmb2xpbyBmbGFnc1xuKyAqL1xuK3N0YXRpYyBpbmxpbmUgaW50IGxydV9yZWZzX2Zyb21fZmxhZ3ModW5zaWduZWQgbG9uZyBmbGFncylcbit7XG4gXHRpZiAoIShmbGFncyBcdTAwMjYgQklUKFBHX3JlZmVyZW5jZWQpKSlcbiBcdFx0cmV0dXJuIDA7XG4gXHQvKlxuQEAgLTE1NSwxMSArMTkyLDQwIEBAIHN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9yZWZzKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRyZXR1cm4gKChmbGFncyBcdTAwMjYgTFJVX1JFRlNfTUFTSykgXHUwMDNlXHUwMDNlIExSVV9SRUZTX1BHT0ZGKSArIDE7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9nZW4oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbisvKipcbisgKiBscnVfcmVmc19zZXRfZmxhZ3MgLSBTZXQgdGhlIExSVSByZWZlcmVuY2VkIC8gYWNjZXNzIGNvdW50IHRvIHNwZWNpZmllZCBmb2xpbyBmbGFncy5cbisgKiBAZmxhZ3M6IHBvaW50ZXIgdG8gdGhlIGZvbGlvIGZsYWdzXG4rICogQHJlZnM6IHJlZmVyZW5jZWQgLyBhY2Nlc3MgY291bnQgbnVtYmVyLCBiZXR3ZWVuIDAgYW5kIExSVV9SRUZTX01BWCwgaW5jbHVzaXZlLlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBscnVfcmVmc19zZXRfZmxhZ3ModW5zaWduZWQgbG9uZyAqZmxhZ3MsIHVuc2lnbmVkIGludCByZWZzKVxuK3tcbitcdFZNX1dBUk5fT05fT05DRShyZWZzIFx1MDAzZSBMUlVfUkVGU19NQVgpO1xuK1x0QlVJTERfQlVHX09OKExSVV9SRUZTX01BWCAhPSAoTFJVX1JFRlNfTUFTSyBcdTAwM2VcdTAwM2UgTFJVX1JFRlNfUEdPRkYpICsgMSk7XG4rXG4rXHQqZmxhZ3MgXHUwMDI2PSB+TFJVX1JFRlNfRkxBR1M7XG4rXHRpZiAoIXJlZnMpXG4rXHRcdHJldHVybjtcbitcdCpmbGFncyB8PSAoQklUKFBHX3JlZmVyZW5jZWQpIHwgKChyZWZzIC0gMVVMKSBcdTAwM2NcdTAwM2MgTFJVX1JFRlNfUEdPRkYpKTtcbit9XG4rXG4rc3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X3JlZnMoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRyZXR1cm4gbHJ1X3JlZnNfZnJvbV9mbGFncyhSRUFEX09OQ0UoKmNvbnN0X2ZvbGlvX2ZsYWdzKGZvbGlvLCAwKSkpO1xuK31cbitcbitzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fc2V0X2xydV9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCByZWZzKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tXHUwMDNlZmxhZ3MuZik7XG4rXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKCpmb2xpb19mbGFncyhmb2xpbywgMCkpO1xuIFxuLVx0cmV0dXJuICgoZmxhZ3MgXHUwMDI2IExSVV9HRU5fTUFTSykgXHUwMDNlXHUwMDNlIExSVV9HRU5fUEdPRkYpIC0gMTtcbitcdGRvIHtcbitcdFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzO1xuK1x0XHRscnVfcmVmc19zZXRfZmxhZ3MoXHUwMDI2bmV3X2ZsYWdzLCByZWZzKTtcbitcdH0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksIFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9nZW4oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRyZXR1cm4gbHJ1X2dlbl9mcm9tX2ZsYWdzKFJFQURfT05DRSgqY29uc3RfZm9saW9fZmxhZ3MoZm9saW8sIDApKSk7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2lzX2FjdGl2ZShjb25zdCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBnZW4pXG5AQCAtMjcwLDcgKzMzNiw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2FkZF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKHNlcSk7XG4gXHRmbGFncyA9IChnZW4gKyAxVUwpIFx1MDAzY1x1MDAzYyBMUlVfR0VOX1BHT0ZGO1xuIFx0Lyogc2VlIHRoZSBjb21tZW50IG9uIE1JTl9OUl9HRU5TIGFib3V0IFBHX2FjdGl2ZSAqL1xuLVx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfR0VOX01BU0sgfCBCSVQoUEdfYWN0aXZlKSwgZmxhZ3MpO1xuK1x0c2V0X21hc2tfYml0cyhmb2xpb19mbGFncyhmb2xpbywgMCksIExSVV9HRU5fTUFTSyB8IEJJVChQR19hY3RpdmUpLCBmbGFncyk7XG4gXG4gXHRscnVfZ2VuX3VwZGF0ZV9zaXplKGxydXZlYywgZm9saW8sIC0xLCBnZW4pO1xuIFx0LyogZm9yIGZvbGlvX3JvdGF0ZV9yZWNsYWltYWJsZSgpICovXG5AQCAtMjk1LDcgKzM2MSw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2RlbF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXG4gXHQvKiBmb3IgZm9saW9fbWlncmF0ZV9mbGFncygpICovXG4gXHRmbGFncyA9ICFyZWNsYWltaW5nIFx1MDAyNlx1MDAyNiBscnVfZ2VuX2lzX2FjdGl2ZShscnV2ZWMsIGdlbikgPyBCSVQoUEdfYWN0aXZlKSA6IDA7XG4tXHRmbGFncyA9IHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX0dFTl9NQVNLLCBmbGFncyk7XG4rXHRmbGFncyA9IHNldF9tYXNrX2JpdHMoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBMUlVfR0VOX01BU0ssIGZsYWdzKTtcbiBcdGdlbiA9ICgoZmxhZ3MgXHUwMDI2IExSVV9HRU5fTUFTSykgXHUwMDNlXHUwMDNlIExSVV9HRU5fUEdPRkYpIC0gMTtcbiBcbiBcdGxydV9nZW5fdXBkYXRlX3NpemUobHJ1dmVjLCBmb2xpbywgZ2VuLCAtMSk7XG5AQCAtMzA0LDExICszNzAsMTkgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZGVsX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fbWlncmF0ZV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZClcbisvKipcbisgKiBmb2xpb19taWdyYXRlX2xydV9yZWZzIC0gY29weSB0aGUgcmVmZXJlbmNlIHN0YXRlIHRvIGEgbmV3IGZvbGlvXG4rICogQG5ldzogdGhlIGRlc3RpbmF0aW9uIGZvbGlvXG4rICogQG9sZDogdGhlIHNvdXJjZSBmb2xpb1xuKyAqXG4rICogVHJhbnNmZXIgdGhlIHJlZmVyZW5jZSBzdGF0ZSB0byBAbmV3IGR1cmluZyBtaWdyYXRpb246IHRoZSBNR0xSVVxuKyAqIHJlZnMgY291bnQsIGluY2x1ZGluZyBQR19yZWZlcmVuY2VkLCBvciBqdXN0IFBHX3JlZmVyZW5jZWQgZm9yIHRoZVxuKyAqIGFjdGl2ZS9pbmFjdGl2ZSBMUlUuXG4rICovXG4rc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgcmVmcyA9IFJFQURfT05DRShvbGQtXHUwMDNlZmxhZ3MuZikgXHUwMDI2IExSVV9SRUZTX01BU0s7XG4tXG4tXHRzZXRfbWFza19iaXRzKFx1MDAyNm5ldy1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19NQVNLLCByZWZzKTtcbitcdEJVSUxEX0JVR19PTihMUlVfUkVGU19NQVNLIFx1MDAyNiBCSVQoUEdfcmVmZXJlbmNlZCkpO1xuK1x0Zm9saW9fc2V0X2xydV9yZWZzKG5ldywgZm9saW9fbHJ1X3JlZnMob2xkKSk7XG4gfVxuICNlbHNlIC8qICFDT05GSUdfTFJVX0dFTiAqL1xuIFxuQEAgLTMzNyw5ICs0MTEsMTAgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZGVsX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfcmVmcyhzdHJ1Y3QgZm9saW8gKm5ldywgY29uc3Qgc3RydWN0IGZvbGlvICpvbGQpXG4rc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKVxuIHtcbi1cbitcdGlmIChmb2xpb190ZXN0X3JlZmVyZW5jZWQob2xkKSlcbitcdFx0Zm9saW9fc2V0X3JlZmVyZW5jZWQobmV3KTtcbiB9XG4gI2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaCBiL2luY2x1ZGUvbGludXgvbW16b25lLmhcbmluZGV4IDk0ZjljM2ZmNTQxNjAuLjliMjdjZjUzYmRiYzcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG5AQCAtNDkyLDExICs0OTIsMTQgQEAgZW51bSBscnV2ZWNfZmxhZ3Mge1xuICAqIGZvbGlvLVx1MDAzZWZsYWdzLCBtYXNrZWQgYnkgTFJVX1JFRlNfTUFTSy5cbiAgKi9cbiAjZGVmaW5lIE1BWF9OUl9USUVSU1x0XHQ0VVxuKyNkZWZpbmUgTFJVX1RJRVJfTUlOXHRcdDBVXG4rI2RlZmluZSBMUlVfVElFUl9NQVhcdFx0KE1BWF9OUl9USUVSUyAtIDEpXG4gXG4gI2lmbmRlZiBfX0dFTkVSQVRJTkdfQk9VTkRTX0hcbiBcbiAjZGVmaW5lIExSVV9HRU5fTUFTS1x0XHQoKEJJVChMUlVfR0VOX1dJRFRIKSAtIDEpIFx1MDAzY1x1MDAzYyBMUlVfR0VOX1BHT0ZGKVxuICNkZWZpbmUgTFJVX1JFRlNfTUFTS1x0XHQoKEJJVChMUlVfUkVGU19XSURUSCkgLSAxKSBcdTAwM2NcdTAwM2MgTFJVX1JFRlNfUEdPRkYpXG4rI2RlZmluZSBMUlVfUkVGU19NQVhcdFx0QklUKExSVV9SRUZTX1dJRFRIKVxuIFxuIC8qXG4gICogRm9yIGZvbGlvcyBhY2Nlc3NlZCBtdWx0aXBsZSB0aW1lcyB0aHJvdWdoIGZpbGUgZGVzY3JpcHRvcnMsXG5kaWZmIC0tZ2l0IGEvbW0vZm9saW8uYyBiL21tL2ZvbGlvLmNcbmluZGV4IGMwMmRjZWE5YzAzYzIuLmE5MzIwNTkwNTdhYzEgMTAwNjQ0XG4tLS0gYS9tbS9mb2xpby5jXG4rKysgYi9tbS9mb2xpby5jXG5AQCAtMzUzLDI2ICszNTMsMjggQEAgc3RhdGljIHZvaWQgX19scnVfY2FjaGVfYWN0aXZhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbiBcbiBzdGF0aWMgdm9pZCBscnVfZ2VuX2luY19yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuLVx0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRShmb2xpby1cdTAwM2VmbGFncy5mKTtcbitcdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XG4rXHRpbnQgcmVmcztcbiBcbiBcdGlmIChmb2xpb190ZXN0X3VuZXZpY3RhYmxlKGZvbGlvKSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0Lyogc2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTICovXG4tXHRpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykpIHtcbi1cdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19NQVNLLCBCSVQoUEdfcmVmZXJlbmNlZCkpO1xuK1x0aWYgKCFmb2xpb19scnVfcmVmcyhmb2xpbykpIHtcbitcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAxKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuIFx0ZG8ge1xuLVx0XHRpZiAoKG9sZF9mbGFncyBcdTAwMjYgTFJVX1JFRlNfTUFTSykgPT0gTFJVX1JFRlNfTUFTSykge1xuK1x0XHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3M7XG4rXHRcdHJlZnMgPSBscnVfcmVmc19mcm9tX2ZsYWdzKG9sZF9mbGFncyk7XG4rXHRcdGlmIChyZWZzID09IExSVV9SRUZTX01BWCkge1xuIFx0XHRcdGlmICghZm9saW9fdGVzdF93b3JraW5nc2V0KGZvbGlvKSlcbiBcdFx0XHRcdGZvbGlvX3NldF93b3JraW5nc2V0KGZvbGlvKTtcbiBcdFx0XHRyZXR1cm47XG4gXHRcdH1cbi1cbi1cdFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzICsgQklUKExSVV9SRUZTX1BHT0ZGKTtcbi1cdH0gd2hpbGUgKCF0cnlfY21weGNoZyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xuK1x0XHRscnVfcmVmc19zZXRfZmxhZ3MoXHUwMDI2bmV3X2ZsYWdzLCByZWZzICsgMSk7XG4rXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBscnVfZ2VuX2NsZWFyX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcbkBAIC0zODQsNyArMzg2LDggQEAgc3RhdGljIGJvb2wgbHJ1X2dlbl9jbGVhcl9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRpZiAoZ2VuIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbi1cdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MgfCBCSVQoUEdfd29ya2luZ3NldCksIDApO1xuK1x0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcbitcdGZvbGlvX2NsZWFyX3dvcmtpbmdzZXQoZm9saW8pO1xuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuIFx0c2VxID0gUkVBRF9PTkNFKGZvbGlvX2xydXZlYyhmb2xpbyktXHUwMDNlbHJ1Z2VuLm1pbl9zZXFbdHlwZV0pO1xuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuY1xuaW5kZXggMTFiODVmNGI2ODI4Yi4uYTc1NzJkZWQ1NmM5ZCAxMDA2NDRcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xuKysrIGIvbW0vbWVtY29udHJvbC5jXG5AQCAtMTUyOSwyOCArMTUyOSwxMiBAQCB2b2lkIG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBscnVfbGlzdCBscnUsXG4gXHRcdFx0XHRpbnQgemlkLCBsb25nIG5yX3BhZ2VzKVxuIHtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICptejtcbi1cdHVuc2lnbmVkIGxvbmcgKmxydV9zaXplO1xuLVx0bG9uZyBzaXplO1xuIFxuIFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0bXogPSBjb250YWluZXJfb2YobHJ1dmVjLCBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSwgbHJ1dmVjKTtcbi1cdGxydV9zaXplID0gXHUwMDI2bXotXHUwMDNlbHJ1X3pvbmVfc2l6ZVt6aWRdW2xydV07XG4tXG4tXHRpZiAobnJfcGFnZXMgXHUwMDNjIDApXG4tXHRcdCpscnVfc2l6ZSArPSBucl9wYWdlcztcbi1cbi1cdHNpemUgPSAqbHJ1X3NpemU7XG4tXHRpZiAoV0FSTl9PTkNFKHNpemUgXHUwMDNjIDAsXG4tXHRcdFwiJXMoJXAsICVkLCAlbGQpOiBscnVfc2l6ZSAlbGRcXG5cIixcbi1cdFx0X19mdW5jX18sIGxydXZlYywgbHJ1LCBucl9wYWdlcywgc2l6ZSkpIHtcbi1cdFx0Vk1fQlVHX09OKDEpO1xuLVx0XHQqbHJ1X3NpemUgPSAwO1xuLVx0fVxuLVxuLVx0aWYgKG5yX3BhZ2VzIFx1MDAzZSAwKVxuLVx0XHQqbHJ1X3NpemUgKz0gbnJfcGFnZXM7XG4rXHRhdG9taWNfbG9uZ19hZGQobnJfcGFnZXMsIFx1MDAyNm16LVx1MDAzZWxydV96b25lX3NpemVbemlkXVtscnVdKTtcbiB9XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZS5jIGIvbW0vbWlncmF0ZS5jXG5pbmRleCAxNWI0NTgzMmJjZmE3Li5hMzY5ZDBjOTVjMzg2IDEwMDY0NFxuLS0tIGEvbW0vbWlncmF0ZS5jXG4rKysgYi9tbS9taWdyYXRlLmNcbkBAIC03NzYsOCArNzc2LDkgQEAgdm9pZCBmb2xpb19taWdyYXRlX2ZsYWdzKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0aW50IGNwdXBpZDtcbiBcbi1cdGlmIChmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pKVxuLVx0XHRmb2xpb19zZXRfcmVmZXJlbmNlZChuZXdmb2xpbyk7XG4rXHQvKiBDb3B5IHRoZSByZWZlcmVuY2Ugc3RhdGUsIGluY2x1ZGluZyBQR19yZWZlcmVuY2VkICovXG4rXHRmb2xpb19taWdyYXRlX2xydV9yZWZzKG5ld2ZvbGlvLCBmb2xpbyk7XG4rXG4gXHRpZiAoZm9saW9fdGVzdF91cHRvZGF0ZShmb2xpbykpXG4gXHRcdGZvbGlvX21hcmtfdXB0b2RhdGUobmV3Zm9saW8pO1xuIFx0aWYgKGZvbGlvX3Rlc3RfY2xlYXJfYWN0aXZlKGZvbGlvKSkge1xuQEAgLTgwNyw3ICs4MDgsNiBAQCB2b2lkIGZvbGlvX21pZ3JhdGVfZmxhZ3Moc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdGlmIChmb2xpb190ZXN0X2lkbGUoZm9saW8pKVxuIFx0XHRmb2xpb19zZXRfaWRsZShuZXdmb2xpbyk7XG4gXG4tXHRmb2xpb19taWdyYXRlX3JlZnMobmV3Zm9saW8sIGZvbGlvKTtcbiBcdC8qXG4gXHQgKiBDb3B5IE5VTUEgaW5mb3JtYXRpb24gdG8gdGhlIG5ldyBwYWdlLCB0byBwcmV2ZW50IG92ZXItZWFnZXJcbiBcdCAqIGZ1dHVyZSBtaWdyYXRpb25zIG9mIHRoaXMgc2FtZSBwYWdlLlxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IDczYTgxYjRhM2UxNjQuLjZmZGE5NDhhZWNmMmMgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuKysrIGIvbW0vdm1zY2FuLmNcbkBAIC04NDMsMTkgKzg0MywyMiBAQCBzdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXG4gXHRpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykgXHUwMDI2XHUwMDI2ICFmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pKSB7XG4gXHRcdC8qIEFjdGl2YXRlIGZpbGUtYmFja2VkIGV4ZWN1dGFibGUgZm9saW9zIGFmdGVyIGZpcnN0IHVzYWdlLiAqL1xuIFx0XHRpZiAoaXNfZXhlY19maWxlX2ZvbGlvKGZvbGlvLCB2bWFfZmxhZ3MpKSB7XG4tXHRcdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX3dvcmtpbmdzZXQpKTtcbitcdFx0XHRmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7XG4rXHRcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcbiBcdFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdFx0fVxuIFxuLVx0XHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX01BU0ssIEJJVChQR19yZWZlcmVuY2VkKSk7XG4rXHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMSk7XG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbiBcbiBcdC8qIFByb21vdGUgb24gc2Vjb25kIGFjY2VzcyAqL1xuLVx0aWYgKGZvbGlvX2xydV9yZWZzKGZvbGlvKSBcdTAwM2UgMSlcbi1cdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX3dvcmtpbmdzZXQpKTtcbi1cdGVsc2VcbitcdGlmIChmb2xpb19scnVfcmVmcyhmb2xpbykgXHUwMDNlIDEpIHtcbitcdFx0Zm9saW9fc2V0X3dvcmtpbmdzZXQoZm9saW8pO1xuK1x0XHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xuK1x0fSBlbHNlIHtcbiBcdFx0Zm9saW9fbWFya19hY2Nlc3NlZChmb2xpbyk7XG4rXHR9XG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gI2Vsc2VcbkBAIC0zMTk1LDggKzMxOTgsOCBAQCBzdHJ1Y3QgY3RybF9wb3Mge1xuIFx0aW50IGdhaW47XG4gfTtcbiBcbi1zdGF0aWMgdm9pZCByZWFkX2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCB0aWVyLCBpbnQgZ2Fpbixcbi1cdFx0XHQgIHN0cnVjdCBjdHJsX3BvcyAqcG9zKVxuK3N0YXRpYyB2b2lkIHJlYWRfY3RybF9wb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHRpZXJfbWluLFxuK1x0XHRcdCAgaW50IHRpZXJfbWF4LCBpbnQgZ2Fpbiwgc3RydWN0IGN0cmxfcG9zICpwb3MpXG4ge1xuIFx0aW50IGk7XG4gXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbkBAIC0zMjA1LDcgKzMyMDgsNyBAQCBzdGF0aWMgdm9pZCByZWFkX2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCB0aWVyLCBpbnQgZ2FpbixcbiBcdHBvcy1cdTAwM2VnYWluID0gZ2FpbjtcbiBcdHBvcy1cdTAwM2VyZWZhdWx0ZWQgPSBwb3MtXHUwMDNldG90YWwgPSAwO1xuIFxuLVx0Zm9yIChpID0gdGllciAlIE1BWF9OUl9USUVSUzsgaSBcdTAwM2M9IG1pbih0aWVyLCBNQVhfTlJfVElFUlMgLSAxKTsgaSsrKSB7XG4rXHRmb3IgKGkgPSB0aWVyX21pbjsgaSBcdTAwM2M9IHRpZXJfbWF4OyBpKyspIHtcbiBcdFx0cG9zLVx1MDAzZXJlZmF1bHRlZCArPSBscnVnZW4tXHUwMDNlYXZnX3JlZmF1bHRlZFt0eXBlXVtpXSArXG4gXHRcdFx0XHQgIGF0b21pY19sb25nX3JlYWQoXHUwMDI2bHJ1Z2VuLVx1MDAzZXJlZmF1bHRlZFtoaXN0XVt0eXBlXVtpXSk7XG4gXHRcdHBvcy1cdTAwM2V0b3RhbCArPSBscnVnZW4tXHUwMDNlYXZnX3RvdGFsW3R5cGVdW2ldICtcbkBAIC0zMjY2LDExICszMjY5LDExIEBAIHN0YXRpYyBib29sIHBvc2l0aXZlX2N0cmxfZXJyKHN0cnVjdCBjdHJsX3BvcyAqc3AsIHN0cnVjdCBjdHJsX3BvcyAqcHYpXG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbiBcbiAvKiBwcm9tb3RlIHBhZ2VzIGFjY2Vzc2VkIHRocm91Z2ggcGFnZSB0YWJsZXMgKi9cbi1zdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGdlbiwgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcbitzdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5ld19nZW4sIGludCAqaXNfZmlsZSxcbitcdFx0XHQgICAgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcbiB7XG4tXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVx1MDAzZWZsYWdzLmYpO1xuLVxuLVx0Vk1fV0FSTl9PTl9PTkNFKGdlbiBcdTAwM2U9IE1BWF9OUl9HRU5TKTtcbitcdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XG4rXHRpbnQgb2xkX2dlbjtcbiBcbiBcdC8qXG4gXHQgKiBTZWUgdGhlIGNvbW1lbnQgb24gTFJVX1JFRlNfRkxBR1MsIGFuZCBhY3RpdmF0ZSBmaWxlLWJhY2tlZFxuQEAgLTMyNzksMjAgKzMyODIsMjUgQEAgc3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBnZW4sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFcbiBcdCAqL1xuIFx0aWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pIFx1MDAyNlx1MDAyNiAhZm9saW9fdGVzdF93b3JraW5nc2V0KGZvbGlvKSBcdTAwMjZcdTAwMjZcbiBcdCAgICAhaXNfZXhlY19maWxlX2ZvbGlvKGZvbGlvLCB2bWFfZmxhZ3MpKSB7XG4tXHRcdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgQklUKFBHX3JlZmVyZW5jZWQpKTtcbitcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAxKTtcbiBcdFx0cmV0dXJuIC0xO1xuIFx0fVxuIFxuIFx0ZG8ge1xuK1x0XHRvbGRfZ2VuID0gbHJ1X2dlbl9mcm9tX2ZsYWdzKG9sZF9mbGFncyk7XG4rXHRcdG5ld19mbGFncyA9IG9sZF9mbGFncztcbitcbiBcdFx0LyogbHJ1X2dlbl9kZWxfZm9saW8oKSBoYXMgaXNvbGF0ZWQgdGhpcyBwYWdlPyAqL1xuLVx0XHRpZiAoIShvbGRfZmxhZ3MgXHUwMDI2IExSVV9HRU5fTUFTSykpXG4tXHRcdFx0cmV0dXJuIC0xO1xuK1x0XHRpZiAob2xkX2dlbiBcdTAwM2MgMClcbitcdFx0XHRicmVhaztcbiBcbi1cdFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzIFx1MDAyNiB+KExSVV9HRU5fTUFTSyB8IExSVV9SRUZTX0ZMQUdTKTtcbi1cdFx0bmV3X2ZsYWdzIHw9ICgoZ2VuICsgMVVMKSBcdTAwM2NcdTAwM2MgTFJVX0dFTl9QR09GRikgfCBCSVQoUEdfd29ya2luZ3NldCk7XG4tXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbitcdFx0bHJ1X2dlbl9zZXRfZmxhZ3MoXHUwMDI2bmV3X2ZsYWdzLCBuZXdfZ2VuKTtcbitcdFx0bHJ1X3JlZnNfc2V0X2ZsYWdzKFx1MDAyNm5ld19mbGFncywgMCk7XG4rXHRcdG5ld19mbGFncyB8PSBCSVQoUEdfd29ya2luZ3NldCk7XG4rXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xuIFxuLVx0cmV0dXJuICgob2xkX2ZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spIFx1MDAzZVx1MDAzZSBMUlVfR0VOX1BHT0ZGKSAtIDE7XG4rXHQqaXNfZmlsZSA9IGZvbGlvX2ZsYWdzX2lzX2ZpbGVfbHJ1KFx1MDAyNm9sZF9mbGFncyk7XG4rXHRyZXR1cm4gb2xkX2dlbjtcbiB9XG4gXG4gLyogcHJvdGVjdCBwYWdlcyBhY2Nlc3NlZCBtdWx0aXBsZSB0aW1lcyB0aHJvdWdoIGZpbGUgZGVzY3JpcHRvcnMgKi9cbkBAIC0zMzAxLDIxICszMzA5LDIwIEBAIHN0YXRpYyBpbnQgZm9saW9faW5jX2dlbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRpbnQgdHlwZSA9IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTtcbiBcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xuIFx0aW50IG5ld19nZW4sIG9sZF9nZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGxydWdlbi1cdTAwM2VtaW5fc2VxW3R5cGVdKTtcbi1cdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tXHUwMDNlZmxhZ3MuZik7XG4tXG4tXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIShvbGRfZmxhZ3MgXHUwMDI2IExSVV9HRU5fTUFTSyksIGZvbGlvKTtcbitcdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XG4gXG4gXHRkbyB7XG4tXHRcdG5ld19nZW4gPSAoKG9sZF9mbGFncyBcdTAwMjYgTFJVX0dFTl9NQVNLKSBcdTAwM2VcdTAwM2UgTFJVX0dFTl9QR09GRikgLSAxO1xuK1x0XHRuZXdfZ2VuID0gbHJ1X2dlbl9mcm9tX2ZsYWdzKG9sZF9mbGFncyk7XG4rXG4gXHRcdC8qIGZvbGlvX3VwZGF0ZV9nZW4oKSBoYXMgcHJvbW90ZWQgdGhpcyBwYWdlPyAqL1xuIFx0XHRpZiAobmV3X2dlbiBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IG5ld19nZW4gIT0gb2xkX2dlbilcbiBcdFx0XHRyZXR1cm4gbmV3X2dlbjtcbiBcbitcdFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzO1xuIFx0XHRuZXdfZ2VuID0gKG9sZF9nZW4gKyAxKSAlIE1BWF9OUl9HRU5TO1xuLVxuLVx0XHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3MgXHUwMDI2IH4oTFJVX0dFTl9NQVNLIHwgTFJVX1JFRlNfRkxBR1MpO1xuLVx0XHRuZXdfZmxhZ3MgfD0gKG5ld19nZW4gKyAxVUwpIFx1MDAzY1x1MDAzYyBMUlVfR0VOX1BHT0ZGO1xuLVx0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XG4rXHRcdGxydV9nZW5fc2V0X2ZsYWdzKFx1MDAyNm5ld19mbGFncywgbmV3X2dlbik7XG4rXHRcdGxydV9yZWZzX3NldF9mbGFncyhcdTAwMjZuZXdfZmxhZ3MsIDApO1xuK1x0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbiBcbiBcdGxydV9nZW5fdXBkYXRlX3NpemUobHJ1dmVjLCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbik7XG4gXG5AQCAtMzMyMyw5ICszMzMwLDggQEAgc3RhdGljIGludCBmb2xpb19pbmNfZ2VuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcbiB9XG4gXG4gc3RhdGljIHZvaWQgdXBkYXRlX2JhdGNoX3NpemUoc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaywgc3RydWN0IGZvbGlvICpmb2xpbyxcbi1cdFx0XHQgICAgICBpbnQgb2xkX2dlbiwgaW50IG5ld19nZW4pXG4rXHRcdFx0ICAgICAgaW50IG9sZF9nZW4sIGludCBuZXdfZ2VuLCBpbnQgdHlwZSlcbiB7XG4tXHRpbnQgdHlwZSA9IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTtcbiBcdGludCB6b25lID0gZm9saW9fem9uZW51bShmb2xpbyk7XG4gXHRpbnQgZGVsdGEgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4gXG5AQCAtMzUxMiwyMiArMzUxOCwyNCBAQCBzdGF0aWMgYm9vbCBzdWl0YWJsZV90b19zY2FuKGludCB0b3RhbCwgaW50IHlvdW5nKVxuIH1cbiBcbiBzdGF0aWMgdm9pZCB3YWxrX3VwZGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi1cdFx0c3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5ld19nZW4sIGJvb2wgZGlydHkpXG4rXHRcdHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBkaXJ0eSlcbiB7XG4tXHRpbnQgb2xkX2dlbjtcbitcdGludCBuZXdfZ2VuLCBvbGRfZ2VuLCBmaWxlO1xuIFxuIFx0aWYgKCFmb2xpbylcbiBcdFx0cmV0dXJuO1xuIFxuK1x0bmV3X2dlbiA9IGxydV9nZW5fZnJvbV9zZXEoUkVBRF9PTkNFKGxydXZlYy1cdTAwM2VscnVnZW4ubWF4X3NlcSkpO1xuK1xuIFx0aWYgKGRpcnR5IFx1MDAyNlx1MDAyNiAhZm9saW9fdGVzdF9kaXJ0eShmb2xpbykgXHUwMDI2XHUwMDI2XG4gXHQgICAgIShmb2xpb190ZXN0X2Fub24oZm9saW8pIFx1MDAyNlx1MDAyNiBmb2xpb190ZXN0X3N3YXBiYWNrZWQoZm9saW8pIFx1MDAyNlx1MDAyNlxuIFx0ICAgICAgIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkpXG4gXHRcdGZvbGlvX21hcmtfZGlydHkoZm9saW8pO1xuIFxuIFx0aWYgKHdhbGspIHtcbi1cdFx0b2xkX2dlbiA9IGZvbGlvX3VwZGF0ZV9nZW4oZm9saW8sIG5ld19nZW4sIFx1MDAyNnZtYS1cdTAwM2VmbGFncyk7XG4rXHRcdG9sZF9nZW4gPSBmb2xpb191cGRhdGVfZ2VuKGZvbGlvLCBuZXdfZ2VuLCBcdTAwMjZmaWxlLCBcdTAwMjZ2bWEtXHUwMDNlZmxhZ3MpO1xuIFx0XHRpZiAob2xkX2dlbiBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IG9sZF9nZW4gIT0gbmV3X2dlbilcbi1cdFx0XHR1cGRhdGVfYmF0Y2hfc2l6ZSh3YWxrLCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbik7XG4rXHRcdFx0dXBkYXRlX2JhdGNoX3NpemUod2FsaywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4sIGZpbGUpO1xuIFx0fSBlbHNlIGlmIChscnVfZ2VuX3NldF9yZWZzKGZvbGlvLCBcdTAwMjZ2bWEtXHUwMDNlZmxhZ3MpKSB7XG4gXHRcdG9sZF9nZW4gPSBmb2xpb19scnVfZ2VuKGZvbGlvKTtcbiBcdFx0aWYgKG9sZF9nZW4gXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBvbGRfZ2VuICE9IG5ld19nZW4pXG5AQCAtMzU0OSw4ICszNTU3LDYgQEAgc3RhdGljIGJvb2wgd2Fsa19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrID0gYXJncy1cdTAwM2Vwcml2YXRlO1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKHdhbGstXHUwMDNlbHJ1dmVjKTtcbiBcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQod2Fsay1cdTAwM2VscnV2ZWMpO1xuLVx0REVGSU5FX01BWF9TRVEod2Fsay1cdTAwM2VscnV2ZWMpO1xuLVx0aW50IGdlbiA9IGxydV9nZW5fZnJvbV9zZXEobWF4X3NlcSk7XG4gXHR1bnNpZ25lZCBpbnQgbnI7XG4gXHRwbWRfdCBwbWR2YWw7XG4gXG5AQCAtMzYwMSw3ICszNjA3LDcgQEAgc3RhdGljIGJvb2wgd2Fsa19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGlmIChsYXN0ICE9IGZvbGlvKSB7XG4tXHRcdFx0d2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy1cdTAwM2V2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuK1x0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtXHUwMDNldm1hLCB3YWxrLVx1MDAzZWxydXZlYywgbGFzdCwgZGlydHkpO1xuIFxuIFx0XHRcdGxhc3QgPSBmb2xpbztcbiBcdFx0XHRkaXJ0eSA9IGZhbHNlO1xuQEAgLTM2MTQsNyArMzYyMCw3IEBAIHN0YXRpYyBib29sIHdhbGtfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0XHR3YWxrLVx1MDAzZW1tX3N0YXRzW01NX0xFQUZfWU9VTkddICs9IG5yO1xuIFx0fVxuIFxuLVx0d2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy1cdTAwM2V2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuK1x0d2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy1cdTAwM2V2bWEsIHdhbGstXHUwMDNlbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XG4gXHRsYXN0ID0gTlVMTDtcbiBcbiBcdGlmIChpIFx1MDAzYyBQVFJTX1BFUl9QVEUgXHUwMDI2XHUwMDI2IGdldF9uZXh0X3ZtYShQTURfTUFTSywgUEFHRV9TSVpFLCBhcmdzLCBcdTAwMjZzdGFydCwgXHUwMDI2ZW5kKSlcbkBAIC0zNjM3LDggKzM2NDMsNiBAQCBzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYVxuIFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGFyZ3MtXHUwMDNlcHJpdmF0ZTtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyh3YWxrLVx1MDAzZWxydXZlYyk7XG4gXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KHdhbGstXHUwMDNlbHJ1dmVjKTtcbi1cdERFRklORV9NQVhfU0VRKHdhbGstXHUwMDNlbHJ1dmVjKTtcbi1cdGludCBnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpO1xuIFxuIFx0Vk1fV0FSTl9PTl9PTkNFKHB1ZF9sZWFmKCpwdWQpKTtcbiBcbkBAIC0zNjkyLDcgKzM2OTYsNyBAQCBzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYVxuIFx0XHRcdGdvdG8gbmV4dDtcbiBcbiBcdFx0aWYgKGxhc3QgIT0gZm9saW8pIHtcbi1cdFx0XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuK1x0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgd2Fsay1cdTAwM2VscnV2ZWMsIGxhc3QsIGRpcnR5KTtcbiBcbiBcdFx0XHRsYXN0ID0gZm9saW87XG4gXHRcdFx0ZGlydHkgPSBmYWxzZTtcbkBAIC0zNzA2LDcgKzM3MTAsNyBAQCBzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYVxuIFx0XHRpID0gaSBcdTAwM2UgTUlOX0xSVV9CQVRDSCA/IDAgOiBmaW5kX25leHRfYml0KGJpdG1hcCwgTUlOX0xSVV9CQVRDSCwgaSkgKyAxO1xuIFx0fSB3aGlsZSAoaSBcdTAwM2M9IE1JTl9MUlVfQkFUQ0gpO1xuIFxuLVx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcbitcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgd2Fsay1cdTAwM2VscnV2ZWMsIGxhc3QsIGRpcnR5KTtcbiBcbiBcdGxhenlfbW11X21vZGVfZGlzYWJsZSgpO1xuIFx0c3Bpbl91bmxvY2socHRsKTtcbkBAIC00MjcwLDggKzQyNzQsNiBAQCBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXG4gXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gZm9saW9fcGdkYXQoZm9saW8pO1xuIFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjO1xuIFx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlO1xuLVx0dW5zaWduZWQgbG9uZyBtYXhfc2VxO1xuLVx0aW50IGdlbjtcbiBcbiBcdGxvY2tkZXBfYXNzZXJ0X2hlbGQocHZtdy1cdTAwM2VwdGwpO1xuIFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3RfbHJ1KGZvbGlvKSwgZm9saW8pO1xuQEAgLTQzMDgsOCArNDMxMCw2IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcbiBcbiBcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhmb2xpbyk7XG4gXHRscnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhtZW1jZywgcGdkYXQpO1xuLVx0bWF4X3NlcSA9IFJFQURfT05DRSgobHJ1dmVjKS1cdTAwM2VscnVnZW4ubWF4X3NlcSk7XG4tXHRnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpO1xuIFx0bW1fc3RhdGUgPSBnZXRfbW1fc3RhdGUobHJ1dmVjKTtcbiBcbiBcdGxhenlfbW11X21vZGVfZW5hYmxlKCk7XG5AQCAtNDM0MSw3ICs0MzQxLDcgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRpZiAobGFzdCAhPSBmb2xpbykge1xuLVx0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XG4rXHRcdFx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBscnV2ZWMsIGxhc3QsIGRpcnR5KTtcbiBcbiBcdFx0XHRsYXN0ID0gZm9saW87XG4gXHRcdFx0ZGlydHkgPSBmYWxzZTtcbkBAIC00MzUzLDEzICs0MzUzLDE0IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcbiBcdFx0eW91bmcgKz0gbnI7XG4gXHR9XG4gXG4tXHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuK1x0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBscnV2ZWMsIGxhc3QsIGRpcnR5KTtcbiBcbiBcdGxhenlfbW11X21vZGVfZGlzYWJsZSgpO1xuIFxuIFx0LyogZmVlZGJhY2sgZnJvbSBybWFwIHdhbGtlcnMgdG8gcGFnZSB0YWJsZSB3YWxrZXJzICovXG4gXHRpZiAobW1fc3RhdGUgXHUwMDI2XHUwMDI2IHN1aXRhYmxlX3RvX3NjYW4oaSwgeW91bmcpKVxuLVx0XHR1cGRhdGVfYmxvb21fZmlsdGVyKG1tX3N0YXRlLCBtYXhfc2VxLCBwdm13LVx1MDAzZXBtZCk7XG4rXHRcdHVwZGF0ZV9ibG9vbV9maWx0ZXIobW1fc3RhdGUsIFJFQURfT05DRShscnV2ZWMtXHUwMDNlbHJ1Z2VuLm1heF9zZXEpLFxuK1x0XHRcdFx0ICAgIHB2bXctXHUwMDNlcG1kKTtcbiBcbiBcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbiBcbkBAIC00NzE2LDcgKzQ3MTcsNyBAQCBzdGF0aWMgYm9vbCBpc29sYXRlX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHNjYVxuIFxuIFx0Lyogc2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTICovXG4gXHRpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykpXG4tXHRcdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgMCk7XG4rXHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XG4gXG4gXHRzdWNjZXNzID0gbHJ1X2dlbl9kZWxfZm9saW8obHJ1dmVjLCBmb2xpbywgdHJ1ZSk7XG4gXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIXN1Y2Nlc3MsIGZvbGlvKTtcbkBAIC00ODA5LDkgKzQ4MTAsOSBAQCBzdGF0aWMgaW50IGdldF90aWVyX2lkeChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlKVxuIFx0ICogVGhpcyB2YWx1ZSBpcyBjaG9zZW4gYmVjYXVzZSBhbnkgb3RoZXIgdGllciB3b3VsZCBoYXZlIGF0IGxlYXN0IHR3aWNlXG4gXHQgKiBhcyBtYW55IHJlZmF1bHRzIGFzIHRoZSBmaXJzdCB0aWVyLlxuIFx0ICovXG4tXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgdHlwZSwgMCwgMiwgXHUwMDI2c3ApO1xuLVx0Zm9yICh0aWVyID0gMTsgdGllciBcdTAwM2MgTUFYX05SX1RJRVJTOyB0aWVyKyspIHtcbi1cdFx0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIHRpZXIsIDMsIFx1MDAyNnB2KTtcbitcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCBMUlVfVElFUl9NSU4sIExSVV9USUVSX01JTiwgMiwgXHUwMDI2c3ApO1xuK1x0Zm9yICh0aWVyID0gTFJVX1RJRVJfTUlOICsgMTsgdGllciBcdTAwM2M9IExSVV9USUVSX01BWDsgdGllcisrKSB7XG4rXHRcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCB0aWVyLCB0aWVyLCAzLCBcdTAwMjZwdik7XG4gXHRcdGlmICghcG9zaXRpdmVfY3RybF9lcnIoXHUwMDI2c3AsIFx1MDAyNnB2KSlcbiBcdFx0XHRicmVhaztcbiBcdH1cbkBAIC00ODMyLDggKzQ4MzMsMTAgQEAgc3RhdGljIGludCBnZXRfdHlwZV90b19zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3MpXG4gXHQgKiBDb21wYXJlIHRoZSBzdW0gb2YgYWxsIHRpZXJzIG9mIGFub24gd2l0aCB0aGF0IG9mIGZpbGUgdG8gZGV0ZXJtaW5lXG4gXHQgKiB3aGljaCB0eXBlIHRvIHNjYW4uXG4gXHQgKi9cbi1cdHJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0FOT04sIE1BWF9OUl9USUVSUywgc3dhcHBpbmVzcywgXHUwMDI2c3ApO1xuLVx0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fRklMRSwgTUFYX05SX1RJRVJTLCBNQVhfU1dBUFBJTkVTUyAtIHN3YXBwaW5lc3MsIFx1MDAyNnB2KTtcbitcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0FOT04sIExSVV9USUVSX01JTiwgTFJVX1RJRVJfTUFYLFxuK1x0XHQgICAgICBzd2FwcGluZXNzLCBcdTAwMjZzcCk7XG4rXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9GSUxFLCBMUlVfVElFUl9NSU4sIExSVV9USUVSX01BWCxcbitcdFx0ICAgICAgTUFYX1NXQVBQSU5FU1MgLSBzd2FwcGluZXNzLCBcdTAwMjZwdik7XG4gXG4gXHRyZXR1cm4gcG9zaXRpdmVfY3RybF9lcnIoXHUwMDI2c3AsIFx1MDAyNnB2KTtcbiB9XG5AQCAtNDkzMiw4ICs0OTM1LDEwIEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHR9XG4gXG4gXHRcdC8qIGRvbid0IGFkZCByZWplY3RlZCBmb2xpb3MgdG8gdGhlIG9sZGVzdCBnZW5lcmF0aW9uICovXG4tXHRcdGlmIChscnVfZ2VuX2ZvbGlvX3NlcShscnV2ZWMsIGZvbGlvLCBmYWxzZSkgPT0gbWluX3NlcVt0eXBlXSlcbi1cdFx0XHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX0ZMQUdTLCBCSVQoUEdfYWN0aXZlKSk7XG4rXHRcdGlmIChscnVfZ2VuX2ZvbGlvX3NlcShscnV2ZWMsIGZvbGlvLCBmYWxzZSkgPT0gbWluX3NlcVt0eXBlXSkge1xuK1x0XHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XG4rXHRcdFx0Zm9saW9fc2V0X2FjdGl2ZShmb2xpbyk7XG4rXHRcdH1cbiBcdH1cbiBcbiBcdG1vdmVfZm9saW9zX3RvX2xydShcdTAwMjZsaXN0KTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE5OjA1OjAxLjg4Nzc5ODcxOFoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzYwMTM2MzE2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBBbmFseXNpczogTWVtb3J5IENvbnRyb2wgYW5kIExSVSBHZW5lcmF0aW9uIFJlZmFjdG9yKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIHByaW1hcmlseSBmb2N1c2VzIG9uIHJlZmFjdG9yaW5nIHRoZSBtZW1vcnkgY29udHJvbCBhbmQgTFJVIGdlbmVyYXRpb24gY29kZSB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbC4gSXQgc2VlbXMgbGlrZSBhIGNvcmUgaW50ZXJuYWwgY2hhbmdlLCBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIGBscnVfem9uZV9zaXplYCBhbmQgaXRzIGFzc29jaWF0ZWQgZm9saW8gZmxhZyBtYW5pcHVsYXRpb24uXG5cbk15IGltbWVkaWF0ZSBjb25jZXJucyBhcmUgYWx3YXlzIGNlbnRlcmVkIG9uIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXM6IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBpbmZvcm1hdGlvbiBsZWFrcywgYW5kIGFueSBjaGFuZ2VzIHRoYXQgbWlnaHQgaW50cm9kdWNlIHVuZXhwZWN0ZWQgYmVoYXZpb3IgaW4gdXNlci1zcGFjZSBpbnRlcmFjdGlvbnMuIExldCdzIGRpZyBpbi4gSSBzZWUgdGhhdCBgbHJ1X3pvbmVfc2l6ZWAgaXMgY2hhbmdpbmcgZnJvbSBhIHNpbXBsZSBhcnJheSBvZiBgdW5zaWduZWQgbG9uZ2AgdG8gYW4gYXJyYXkgb2YgYGF0b21pY19sb25nX3RgLiBUaGlzIGlzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCByZWZhY3RvcmluZyBhbmQsIGJ5IGl0c2VsZiwgc2hvdWxkbid0IHBvc2UgYW55IGltbWVkaWF0ZSByaXNrcy5cblxuSSdtIHNlZWluZyBoZWxwZXIgZnVuY3Rpb25zIGludHJvZHVjZWQgZm9yIHNldHRpbmcgYW5kIGdldHRpbmcgTFJVIGdlbmVyYXRpb24gYW5kIHJlZmVyZW5jZXMgZnJvbSBmb2xpbyBmbGFncywgcmVwbGFjaW5nIGRpcmVjdCBiaXQgbWFuaXB1bGF0aW9ucy4gR29vZC4gVGhpcyBvZnRlbiBsZWFkcyB0byBtb3JlIHJvYnVzdCBhbmQgbGVzcyBlcnJvci1wcm9uZSBjb2RlLiBJJ20gYWxzbyBub3RpY2luZyB0aGUgbW9kaWZpY2F0aW9ucyB0byBmdW5jdGlvbnMgbGlrZSBgZm9saW9fdXBkYXRlX2dlbmAsIGBmb2xpb19pbmNfZ2VuYCwgYW5kIG90aGVycy4gVGhlIGNoYW5nZXMgdG8gYHJlYWRfY3RybF9wb3NgIGxvb2sgcmVhc29uYWJsZS4gSSBhbSBnb2luZyB0byBzZWUgaWYgYW55IHVzZXItc3BhY2UgY2hhbmdlcyBhcmUgYmVpbmcgbWFkZS5cblxuSSd2ZSBjYXJlZnVsbHkgZXhhbWluZWQgdGhlIGNvZGUgZm9yIGFueSBuZXcgc3RydWN0dXJlcyBiZWluZyBzZW50IHRvIHVzZXIgc3BhY2UsIHRoZSBwcmVzZW5jZSBvZiBjb25kaXRpb25hbCBsb2dpYyB0aGF0IG1pZ2h0IGRlcGVuZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgdGhlIGFsbG9jYXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMsIGFuZCBhbnkgYm91bmRzIGNoZWNrcyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gSSdtIG5vdCBzZWVpbmcgYW55dGhpbmcgdGhhdCByYWlzZXMgaW1tZWRpYXRlIHJlZCBmbGFncy4gTm8gZGlyZWN0IHVzZXItc3BhY2UgY29waWVzLCBubyBjb21wbGV4IGFsbG9jYXRpb25zLCBhbmQgbm8gb2J2aW91cyBtZW1vcnkgc2FmZXR5IGlzc3Vlcy5cblxuSG93ZXZlciwgSSBkaWQgY2F0Y2ggdGhhdCB0aGUgYG1lbV9jZ3JvdXBfZ2V0X3pvbmVfbHJ1X3NpemVgIG5vdyByZXR1cm5zIGEgYGxvbmcgdmFsYCBhbmQgaW5jbHVkZXMgYSBgV0FSTl9PTl9PTkNFYCBjaGVjay4gVGhpcyBpcyBzdGFuZGFyZCBnb29kIHByYWN0aWNlLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIHRoZSBvbmx5IHVzZSBvZiB0aGlzIGFuZCB0aGF0IGl0J3MgYmVpbmcgcHJvcGVybHkgaGFuZGxlZC4gVGhlIHVzZSBvZiBgYXRvbWljX2xvbmdfcmVhZGAgYW5kIHRoZSBgbHJ1X2dlbl8qX2ZsYWdzYCBoZWxwZXIgZnVuY3Rpb25zIGxvb2sgbGlrZSBzdGFuZGFyZCBhbmQgc2FmZSBvcGVyYXRpb25zLlxuXG5JJ20gbm93IGZvY3VzaW5nIG9uIHBvdGVudGlhbCBpbmZvcm1hdGlvbiBsZWFrcyBvciB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2UuIFRoZSBwYXRjaCBhcHBlYXJzIHRvIGJlIGVudGlyZWx5IGludGVybmFsIHRvIG1lbW9yeSBtYW5hZ2VtZW50IC0gTFJVIGdlbmVyYXRpb24sIGZvbGlvIGZsYWdzLCBhbmQgbWVtY2cgTFJVIHNpemUgdHJhY2tpbmcuIE5vIHVzZXItc3BhY2UgaW50ZXJhY3Rpb24uIEdpdmVuIHRoaXMgY29udGV4dCwgS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgZm9yIGNoZWNraW5nIGNvbW1vbiBpc3N1ZXMgbGlrZSBvdXQtb2YtYm91bmRzIGFjY2VzcyBvciB1c2UtYWZ0ZXItZnJlZSwgYW5kIEkgZG9uJ3Qgc2VlIGFueSBjaGFuZ2VzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiB0byBkZXRlY3QgdW5pbml0aWFsaXplZCBtZW1vcnkuXG5cbkxldCdzIGRvIGEgZGVlcGVyIGRpdmUgaW50byB0aGUgYGZvbGlvX3VwZGF0ZV9nZW5gIGNoYW5nZS4gU3BlY2lmaWNhbGx5LCB0aGUgaW50cm9kdWN0aW9uIG9mIHRoZSBgaXNfZmlsZWAgcG9pbnRlcjpcbmBgYGNcbi1zdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGdlbiwgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcbitzdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5ld19nZW4sIGludCAqaXNfZmlsZSxcbitcdFx0XHQgICAgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcbmBgYFxuSSBhbSBub3cgbWFraW5nIHN1cmUgYGlzX2ZpbGVgIGlzIGluaXRpYWxpemVkIGFuZCB1c2VkIGNvcnJlY3RseS4gTXkgc2NhbiBmb3IgaXRzIHVzZSBpbiBgd2Fsa191cGRhdGVfZm9saW9gIGlzIHdoYXQgSSdtIGxvb2tpbmcgYXQuXG5cbmBgYGNcbi1zdGF0aWMgdm9pZCB3YWxrX3VwZGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi1cdFx0c3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5ld19nZW4sIGJvb2wgZGlydHkpXG4rc3RhdGljIHZvaWQgd2Fsa191cGRhdGVfZm9saW8oc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4rXHRcdHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBkaXJ0eSlcbiB7XG4tXHRpbnQgb2xkX2dlbjtcbitcdGludCBuZXdfZ2VuLCBvbGRfZ2VuLCBmaWxlO1xuLi4uXG4gXHRpZiAod2Fsaykge1xuLVx0XHRvbGRfZ2VuID0gZm9saW9fdXBkYXRlX2dlbihmb2xpbywgbmV3X2dlbiwgXHUwMDI2dm1hLVx1MDAzZWZsYWdzKTtcbitcdFx0b2xkX2dlbiA9IGZvbGlvX3VwZGF0ZV9nZW4oZm9saW8sIG5ld19nZW4sIFx1MDAyNmZpbGUsIFx1MDAyNnZtYS1cdTAwM2VmbGFncyk7XG4gXHRcdGlmIChvbGRfZ2VuIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgb2xkX2dlbiAhPSBuZXdfZ2VuKVxuLVx0XHRcdHVwZGF0ZV9iYXRjaF9zaXplKHdhbGssIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTtcbitcdFx0XHR1cGRhdGVfYmF0Y2hfc2l6ZSh3YWxrLCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbiwgZmlsZSk7XG5gYGBcblxuVGhlIG5ldyBgZmlsZWAgdmFyaWFibGUgaXMgaW50cm9kdWNlZCBhbmQgcGFzc2VkIGFzIHRoZSBgaXNfZmlsZWAgcGFyYW1ldGVyLCBzbyBJIG5lZWQgdG8ga25vdyB3aGVyZSBpdCdzIGJlaW5nIHNldC5cbklmIGBmb2xpb191cGRhdGVfZ2VuYCByZXR1cm5zIGBcdTAwM2MgMGAsIGBvbGRfZ2VuIFx1MDAzZT0gMGAgaXMgZmFsc2UsIGFuZCBgZmlsZWAgaXMgbmV2ZXIgdXNlZCBzbyBpdCBzaG91bGQgbm90IGJlIGEgcHJvYmxlbS4gSWYgYGZvbGlvX3VwZGF0ZV9nZW5gXG5cbiIsIklucHV0VG9rZW5zIjoxMTQwNSwiT3V0cHV0VG9rZW5zIjoxOTUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTg1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTk6MDU6MTkuNDg5MTY0ODc5WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGludGVybmFsIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUsIHNwZWNpZmljYWxseSBMUlUgZ2VuZXJhdGlvbiBhbmQgZm9saW8gZmxhZ3MgbWFuaXB1bGF0aW9uLCBhbmQgY2hhbmdlcyBgbHJ1X3pvbmVfc2l6ZWAgdG8gdXNlIGBhdG9taWNfbG9uZ190YC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyB0aGF0IGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWxsb2NhdGUgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgb3IgbW9kaWZ5IGJvdW5kcyBjaGVja3MgaW4gYSB3YXkgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBuZXdseSBpbnRyb2R1Y2VkIG91dC1wYXJhbWV0ZXIgYGlzX2ZpbGVgIGluIGBmb2xpb191cGRhdGVfZ2VuYCBpcyBhbHdheXMgaW5pdGlhbGl6ZWQgYmVmb3JlIHJldHVybmluZy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyByYWNlIGNvbmRpdGlvbnMsIHVzZS1hZnRlci1mcmVlLCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBvdGhlciBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBpbnRlcm5hbCBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCBzcGVjaWZpY2FsbHkgTFJVIGdlbmVyYXRpb24gYW5kIGZvbGlvIGZsYWdzIG1hbmlwdWxhdGlvbiwgYW5kIGNoYW5nZXMgYGxydV96b25lX3NpemVgIHRvIHVzZSBgYXRvbWljX2xvbmdfdGAuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgdGhhdCBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFsbG9jYXRlIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIG9yIG1vZGlmeSBib3VuZHMgY2hlY2tzIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgbmV3bHkgaW50cm9kdWNlZCBvdXQtcGFyYW1ldGVyIGBpc19maWxlYCBpbiBgZm9saW9fdXBkYXRlX2dlbmAgaXMgYWx3YXlzIGluaXRpYWxpemVkIGJlZm9yZSByZXR1cm5pbmcuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgcmFjZSBjb25kaXRpb25zLCB1c2UtYWZ0ZXItZnJlZSwgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcykgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgb3RoZXIgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow9bxpc[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-25 19:01:35 +0000 UTC FinishedAt: 2026-08-25 19:05:21 +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": "169393fff5d1ec2690934067eeb95544ff5ebdd7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "LRU_GEN_ENABLED" ], "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": "169393fff5d1ec2690934067eeb95544ff5ebdd7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "LRU_GEN_ENABLED" ], "series_id": "d64100e7-beda-47c2-a8ac-9d7b44c6d31f" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "folio_migrate_flags", "lru_gen_look_around" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI1IDE5OjAzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Zm9saW9fbWlncmF0ZV9mbGFncyYjMzQ7LAogICAgJiMzNDtscnVfZ2VuX2xvb2tfYXJvdW5kJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBpbnRlcm5hbCBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCBzcGVjaWZpY2FsbHkgTFJVIGdlbmVyYXRpb24gYW5kIGZvbGlvIGZsYWdzIG1hbmlwdWxhdGlvbiwgYW5kIGNoYW5nZXMgYGxydV96b25lX3NpemVgIHRvIHVzZSBgYXRvbWljX2xvbmdfdGAuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgdGhhdCBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFsbG9jYXRlIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIG9yIG1vZGlmeSBib3VuZHMgY2hlY2tzIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgbmV3bHkgaW50cm9kdWNlZCBvdXQtcGFyYW1ldGVyIGBpc19maWxlYCBpbiBgZm9saW9fdXBkYXRlX2dlbmAgaXMgYWx3YXlzIGluaXRpYWxpemVkIGJlZm9yZSByZXR1cm5pbmcuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgcmFjZSBjb25kaXRpb25zLCB1c2UtYWZ0ZXItZnJlZSwgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcykgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgb3RoZXIgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgTXVsdGktR2VuIExSVSAoTUdMUlUpIHBhZ2UgZmxhZ3MgaGFuZGxpbmcgYW5kIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gYGxydV96b25lX3NpemVgIHVwZGF0ZXMgYnkgdXNpbmcgYXRvbWljIG9wZXJhdGlvbnMuIEl0IG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMsIHNwZWNpZmljYWxseSBwYWdlIG1pZ3JhdGlvbiAoYGZvbGlvX21pZ3JhdGVfZmxhZ3NgKSBhbmQgcGFnZSByZWNsYWltIGxvb2thcm91bmQgKGBscnVfZ2VuX2xvb2tfYXJvdW5kYCkuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBtYWtpbmcgdGhlbSB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE5OjAzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMjU5YTI1MjIzODc2ZDBmMjczYjM0ZmU2YWVmMzQzNjZiNzU2MDk5ZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDI1IDE5OjAzOjIxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbmluZGV4IDIxNWUyZTg3ZjQyYjIuLjdiODlkMGNiNWY2YzYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbkBAIC0xMTMsNyAmIzQzOzExMyw3IEBAIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlIHtcbiBcdC8qIEZpZWxkcyB3aGljaCBnZXQgdXBkYXRlZCBvZnRlbiBhdCB0aGUgZW5kLiAqL1xuIFx0c3RydWN0IGxydXZlY1x0XHRscnV2ZWM7XG4gXHRDQUNIRUxJTkVfUEFERElORyhfcGFkMl8pO1xuLVx0dW5zaWduZWQgbG9uZ1x0XHRscnVfem9uZV9zaXplW01BWF9OUl9aT05FU11bTlJfTFJVX0xJU1RTXTtcbiYjNDM7XHRhdG9taWNfbG9uZ190XHRcdGxydV96b25lX3NpemVbTUFYX05SX1pPTkVTXVtOUl9MUlVfTElTVFNdO1xuIFx0c3RydWN0IG1lbV9jZ3JvdXBfcmVjbGFpbV9pdGVyXHRpdGVyO1xuIFxuIFx0LypcbkBAIC05MDIsMTAgJiM0Mzs5MDIsMTUgQEAgc3RhdGljIGlubGluZVxuIHVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9nZXRfem9uZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRcdGVudW0gbHJ1X2xpc3QgbHJ1LCBpbnQgem9uZV9pZHgpXG4ge1xuJiM0MztcdGxvbmcgdmFsO1xuIFx0c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm16O1xuIFxuIFx0bXogPSBjb250YWluZXJfb2YobHJ1dmVjLCBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSwgbHJ1dmVjKTtcbi1cdHJldHVybiBSRUFEX09OQ0UobXotXHUwMDNlbHJ1X3pvbmVfc2l6ZVt6b25lX2lkeF1bbHJ1XSk7XG4mIzQzO1x0dmFsID0gYXRvbWljX2xvbmdfcmVhZChcdTAwMjZtei1cdTAwM2VscnVfem9uZV9zaXplW3pvbmVfaWR4XVtscnVdKTtcbiYjNDM7XHRpZiAoV0FSTl9PTl9PTkNFKHZhbCBcdTAwM2MgMCkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHZhbDtcbiB9XG4gXG4gdm9pZCBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzayk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaCBiL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmhcbmluZGV4IDYyMWM4NjUzZDhmN2UuLjhjZjgyOTg5ZWMyNjMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oXG5AQCAtMTAsNiAmIzQzOzEwLDExIEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdXNlcmZhdWx0ZmRfay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbGVhZm9wcy5oXHUwMDNlXG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2ZsYWdzX2lzX2ZpbGVfbHJ1KGNvbnN0IHVuc2lnbmVkIGxvbmcgKmZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuICF0ZXN0X2JpdChQR19zd2FwYmFja2VkLCBmbGFncyk7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogZm9saW9faXNfZmlsZV9scnUgLSBTaG91bGQgdGhlIGZvbGlvIGJlIG9uIGEgZmlsZSBMUlUgb3IgYW5vbiBMUlU/XG4gICogQGZvbGlvOiBUaGUgZm9saW8gdG8gdGVzdC5cbkBAIC0yNyw3ICYjNDM7MzIsNyBAQFxuICAqL1xuIHN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2lzX2ZpbGVfbHJ1KGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuLVx0cmV0dXJuICFmb2xpb190ZXN0X3N3YXBiYWNrZWQoZm9saW8pO1xuJiM0MztcdHJldHVybiBmb2xpb19mbGFnc19pc19maWxlX2xydShjb25zdF9mb2xpb19mbGFncyhmb2xpbywgMCkpO1xuIH1cbiBcbiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX191cGRhdGVfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuQEAgLTE0MiwxMCAmIzQzOzE0Nyw0MiBAQCBzdGF0aWMgaW5saW5lIGludCBscnVfdGllcl9mcm9tX3JlZnMoaW50IHJlZnMsIGJvb2wgd29ya2luZ3NldClcbiBcdHJldHVybiB3b3JraW5nc2V0ID8gTUFYX05SX1RJRVJTIC0gMSA6IG9yZGVyX2Jhc2VfMihyZWZzKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X3JlZnMoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7LyoqXG4mIzQzOyAqIGxydV9nZW5fZnJvbV9mbGFncyAtIFJldHVybiB0aGUgTFJVIGdlbmVyYXRpb24gbnVtYmVyIGZyb20gZm9saW8gZmxhZ3MuXG4mIzQzOyAqIEBmbGFnczogZm9saW8gZmxhZ3NcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogQSBudW1iZXIgYmV0d2VlbiAwIGFuZCAoTUFYX05SX0dFTlMgLSAxKSwgaW5jbHVzaXZlLiBSZXR1cm5zXG4mIzQzOyAqIC0xIGlmIHRoZSBmbGFncyBpbmRpY2F0ZSB0aGUgZm9saW8gaXMgb2ZmIHRoZSBsaXN0IChlLmcuLCBpc29sYXRlZCkuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIGludCBscnVfZ2VuX2Zyb21fZmxhZ3ModW5zaWduZWQgbG9uZyBmbGFncylcbiYjNDM7e1xuJiM0MztcdGludCBnZW4gPSAoKGZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spIFx1MDAzZVx1MDAzZSBMUlVfR0VOX1BHT0ZGKTtcbiYjNDM7XG4mIzQzO1x0QlVJTERfQlVHX09OKExSVV9HRU5fTUFTSyBcdTAwMjYgTFJVX1JFRlNfTUFTSyk7XG4mIzQzO1x0Z2VuIC09IDE7XG4mIzQzO1x0Vk1fV0FSTl9PTl9PTkNFKGdlbiAhPSAtMSBcdTAwMjZcdTAwMjYgZ2VuIFx1MDAzZT0gTUFYX05SX0dFTlMpO1xuJiM0MztcdHJldHVybiBnZW47XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBscnVfZ2VuX3NldF9mbGFncyAtIFNldCB0aGUgTFJVIGdlbmVyYXRpb24gbnVtYmVyIHRvIHNwZWNpZmllZCBmb2xpbyBmbGFncy5cbiYjNDM7ICogQGZsYWdzOiBwb2ludGVyIHRvIHRoZSBmb2xpbyBmbGFnc1xuJiM0MzsgKiBAZ2VuOiBnZW5lcmF0aW9uIG51bWJlciwgYmV0d2VlbiAwIGFuZCAoTUFYX05SX0dFTlMgLSAxKSwgaW5jbHVzaXZlLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGxydV9nZW5fc2V0X2ZsYWdzKHVuc2lnbmVkIGxvbmcgKmZsYWdzLCBpbnQgZ2VuKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tXHUwMDNlZmxhZ3MuZik7XG4mIzQzO1x0Vk1fV0FSTl9PTl9PTkNFKGdlbiBcdTAwM2U9IE1BWF9OUl9HRU5TIHx8IGdlbiBcdTAwM2MgMCk7XG4mIzQzO1xuJiM0MztcdCpmbGFncyBcdTAwMjY9IH5MUlVfR0VOX01BU0s7XG4mIzQzO1x0KmZsYWdzIHw9IChnZW4gJiM0MzsgMVVMKSBcdTAwM2NcdTAwM2MgTFJVX0dFTl9QR09GRjtcbiYjNDM7fVxuIFxuJiM0MzsvKipcbiYjNDM7ICogbHJ1X3JlZnNfZnJvbV9mbGFncyAtIFJldHVybiBMUlUgcmVmZXJlbmNlZCAvIGFjY2VzcyBjb3VudCBmcm9tIGZvbGlvIGZsYWdzLlxuJiM0MzsgKiBAZmxhZ3M6IGZvbGlvIGZsYWdzXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIGludCBscnVfcmVmc19mcm9tX2ZsYWdzKHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4mIzQzO3tcbiBcdGlmICghKGZsYWdzIFx1MDAyNiBCSVQoUEdfcmVmZXJlbmNlZCkpKVxuIFx0XHRyZXR1cm4gMDtcbiBcdC8qXG5AQCAtMTU1LDExICYjNDM7MTkyLDQwIEBAIHN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9yZWZzKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRyZXR1cm4gKChmbGFncyBcdTAwMjYgTFJVX1JFRlNfTUFTSykgXHUwMDNlXHUwMDNlIExSVV9SRUZTX1BHT0ZGKSAmIzQzOyAxO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfZ2VuKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzOy8qKlxuJiM0MzsgKiBscnVfcmVmc19zZXRfZmxhZ3MgLSBTZXQgdGhlIExSVSByZWZlcmVuY2VkIC8gYWNjZXNzIGNvdW50IHRvIHNwZWNpZmllZCBmb2xpbyBmbGFncy5cbiYjNDM7ICogQGZsYWdzOiBwb2ludGVyIHRvIHRoZSBmb2xpbyBmbGFnc1xuJiM0MzsgKiBAcmVmczogcmVmZXJlbmNlZCAvIGFjY2VzcyBjb3VudCBudW1iZXIsIGJldHdlZW4gMCBhbmQgTFJVX1JFRlNfTUFYLCBpbmNsdXNpdmUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbHJ1X3JlZnNfc2V0X2ZsYWdzKHVuc2lnbmVkIGxvbmcgKmZsYWdzLCB1bnNpZ25lZCBpbnQgcmVmcylcbiYjNDM7e1xuJiM0MztcdFZNX1dBUk5fT05fT05DRShyZWZzIFx1MDAzZSBMUlVfUkVGU19NQVgpO1xuJiM0MztcdEJVSUxEX0JVR19PTihMUlVfUkVGU19NQVggIT0gKExSVV9SRUZTX01BU0sgXHUwMDNlXHUwMDNlIExSVV9SRUZTX1BHT0ZGKSAmIzQzOyAxKTtcbiYjNDM7XG4mIzQzO1x0KmZsYWdzIFx1MDAyNj0gfkxSVV9SRUZTX0ZMQUdTO1xuJiM0MztcdGlmICghcmVmcylcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHQqZmxhZ3MgfD0gKEJJVChQR19yZWZlcmVuY2VkKSB8ICgocmVmcyAtIDFVTCkgXHUwMDNjXHUwMDNjIExSVV9SRUZTX1BHT0ZGKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9yZWZzKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gbHJ1X3JlZnNfZnJvbV9mbGFncyhSRUFEX09OQ0UoKmNvbnN0X2ZvbGlvX2ZsYWdzKGZvbGlvLCAwKSkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fc2V0X2xydV9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCByZWZzKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tXHUwMDNlZmxhZ3MuZik7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTtcbiBcbi1cdHJldHVybiAoKGZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spIFx1MDAzZVx1MDAzZSBMUlVfR0VOX1BHT0ZGKSAtIDE7XG4mIzQzO1x0ZG8ge1xuJiM0MztcdFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzO1xuJiM0MztcdFx0bHJ1X3JlZnNfc2V0X2ZsYWdzKFx1MDAyNm5ld19mbGFncywgcmVmcyk7XG4mIzQzO1x0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X2dlbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGxydV9nZW5fZnJvbV9mbGFncyhSRUFEX09OQ0UoKmNvbnN0X2ZvbGlvX2ZsYWdzKGZvbGlvLCAwKSkpO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9pc19hY3RpdmUoY29uc3Qgc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgZ2VuKVxuQEAgLTI3MCw3ICYjNDM7MzM2LDcgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fYWRkX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdGdlbiA9IGxydV9nZW5fZnJvbV9zZXEoc2VxKTtcbiBcdGZsYWdzID0gKGdlbiAmIzQzOyAxVUwpIFx1MDAzY1x1MDAzYyBMUlVfR0VOX1BHT0ZGO1xuIFx0Lyogc2VlIHRoZSBjb21tZW50IG9uIE1JTl9OUl9HRU5TIGFib3V0IFBHX2FjdGl2ZSAqL1xuLVx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfR0VOX01BU0sgfCBCSVQoUEdfYWN0aXZlKSwgZmxhZ3MpO1xuJiM0MztcdHNldF9tYXNrX2JpdHMoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBMUlVfR0VOX01BU0sgfCBCSVQoUEdfYWN0aXZlKSwgZmxhZ3MpO1xuIFxuIFx0bHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCAtMSwgZ2VuKTtcbiBcdC8qIGZvciBmb2xpb19yb3RhdGVfcmVjbGFpbWFibGUoKSAqL1xuQEAgLTI5NSw3ICYjNDM7MzYxLDcgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZGVsX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcbiBcdC8qIGZvciBmb2xpb19taWdyYXRlX2ZsYWdzKCkgKi9cbiBcdGZsYWdzID0gIXJlY2xhaW1pbmcgXHUwMDI2XHUwMDI2IGxydV9nZW5faXNfYWN0aXZlKGxydXZlYywgZ2VuKSA/IEJJVChQR19hY3RpdmUpIDogMDtcbi1cdGZsYWdzID0gc2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfR0VOX01BU0ssIGZsYWdzKTtcbiYjNDM7XHRmbGFncyA9IHNldF9tYXNrX2JpdHMoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBMUlVfR0VOX01BU0ssIGZsYWdzKTtcbiBcdGdlbiA9ICgoZmxhZ3MgXHUwMDI2IExSVV9HRU5fTUFTSykgXHUwMDNlXHUwMDNlIExSVV9HRU5fUEdPRkYpIC0gMTtcbiBcbiBcdGxydV9nZW5fdXBkYXRlX3NpemUobHJ1dmVjLCBmb2xpbywgZ2VuLCAtMSk7XG5AQCAtMzA0LDExICYjNDM7MzcwLDE5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2RlbF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfcmVmcyhzdHJ1Y3QgZm9saW8gKm5ldywgY29uc3Qgc3RydWN0IGZvbGlvICpvbGQpXG4mIzQzOy8qKlxuJiM0MzsgKiBmb2xpb19taWdyYXRlX2xydV9yZWZzIC0gY29weSB0aGUgcmVmZXJlbmNlIHN0YXRlIHRvIGEgbmV3IGZvbGlvXG4mIzQzOyAqIEBuZXc6IHRoZSBkZXN0aW5hdGlvbiBmb2xpb1xuJiM0MzsgKiBAb2xkOiB0aGUgc291cmNlIGZvbGlvXG4mIzQzOyAqXG4mIzQzOyAqIFRyYW5zZmVyIHRoZSByZWZlcmVuY2Ugc3RhdGUgdG8gQG5ldyBkdXJpbmcgbWlncmF0aW9uOiB0aGUgTUdMUlVcbiYjNDM7ICogcmVmcyBjb3VudCwgaW5jbHVkaW5nIFBHX3JlZmVyZW5jZWQsIG9yIGp1c3QgUEdfcmVmZXJlbmNlZCBmb3IgdGhlXG4mIzQzOyAqIGFjdGl2ZS9pbmFjdGl2ZSBMUlUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fbWlncmF0ZV9scnVfcmVmcyhzdHJ1Y3QgZm9saW8gKm5ldywgY29uc3Qgc3RydWN0IGZvbGlvICpvbGQpXG4ge1xuLVx0dW5zaWduZWQgbG9uZyByZWZzID0gUkVBRF9PTkNFKG9sZC1cdTAwM2VmbGFncy5mKSBcdTAwMjYgTFJVX1JFRlNfTUFTSztcbi1cbi1cdHNldF9tYXNrX2JpdHMoXHUwMDI2bmV3LVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX01BU0ssIHJlZnMpO1xuJiM0MztcdEJVSUxEX0JVR19PTihMUlVfUkVGU19NQVNLIFx1MDAyNiBCSVQoUEdfcmVmZXJlbmNlZCkpO1xuJiM0MztcdGZvbGlvX3NldF9scnVfcmVmcyhuZXcsIGZvbGlvX2xydV9yZWZzKG9sZCkpO1xuIH1cbiAjZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi9cbiBcbkBAIC0zMzcsOSAmIzQzOzQxMSwxMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9kZWxfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fbWlncmF0ZV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZClcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKVxuIHtcbi1cbiYjNDM7XHRpZiAoZm9saW9fdGVzdF9yZWZlcmVuY2VkKG9sZCkpXG4mIzQzO1x0XHRmb2xpb19zZXRfcmVmZXJlbmNlZChuZXcpO1xuIH1cbiAjZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxuaW5kZXggOTRmOWMzZmY1NDE2MC4uOWIyN2NmNTNiZGJjNyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW16b25lLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW16b25lLmhcbkBAIC00OTIsMTEgJiM0Mzs0OTIsMTQgQEAgZW51bSBscnV2ZWNfZmxhZ3Mge1xuICAqIGZvbGlvLVx1MDAzZWZsYWdzLCBtYXNrZWQgYnkgTFJVX1JFRlNfTUFTSy5cbiAgKi9cbiAjZGVmaW5lIE1BWF9OUl9USUVSU1x0XHQ0VVxuJiM0MzsjZGVmaW5lIExSVV9USUVSX01JTlx0XHQwVVxuJiM0MzsjZGVmaW5lIExSVV9USUVSX01BWFx0XHQoTUFYX05SX1RJRVJTIC0gMSlcbiBcbiAjaWZuZGVmIF9fR0VORVJBVElOR19CT1VORFNfSFxuIFxuICNkZWZpbmUgTFJVX0dFTl9NQVNLXHRcdCgoQklUKExSVV9HRU5fV0lEVEgpIC0gMSkgXHUwMDNjXHUwMDNjIExSVV9HRU5fUEdPRkYpXG4gI2RlZmluZSBMUlVfUkVGU19NQVNLXHRcdCgoQklUKExSVV9SRUZTX1dJRFRIKSAtIDEpIFx1MDAzY1x1MDAzYyBMUlVfUkVGU19QR09GRilcbiYjNDM7I2RlZmluZSBMUlVfUkVGU19NQVhcdFx0QklUKExSVV9SRUZTX1dJRFRIKVxuIFxuIC8qXG4gICogRm9yIGZvbGlvcyBhY2Nlc3NlZCBtdWx0aXBsZSB0aW1lcyB0aHJvdWdoIGZpbGUgZGVzY3JpcHRvcnMsXG5kaWZmIC0tZ2l0IGEvbW0vZm9saW8uYyBiL21tL2ZvbGlvLmNcbmluZGV4IGMwMmRjZWE5YzAzYzIuLmE5MzIwNTkwNTdhYzEgMTAwNjQ0XG4tLS0gYS9tbS9mb2xpby5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9mb2xpby5jXG5AQCAtMzUzLDI2ICYjNDM7MzUzLDI4IEBAIHN0YXRpYyB2b2lkIF9fbHJ1X2NhY2hlX2FjdGl2YXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXG4gc3RhdGljIHZvaWQgbHJ1X2dlbl9pbmNfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tXHUwMDNlZmxhZ3MuZik7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTtcbiYjNDM7XHRpbnQgcmVmcztcbiBcbiBcdGlmIChmb2xpb190ZXN0X3VuZXZpY3RhYmxlKGZvbGlvKSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0Lyogc2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTICovXG4tXHRpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykpIHtcbi1cdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19NQVNLLCBCSVQoUEdfcmVmZXJlbmNlZCkpO1xuJiM0MztcdGlmICghZm9saW9fbHJ1X3JlZnMoZm9saW8pKSB7XG4mIzQzO1x0XHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDEpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4gXHRkbyB7XG4tXHRcdGlmICgob2xkX2ZsYWdzIFx1MDAyNiBMUlVfUkVGU19NQVNLKSA9PSBMUlVfUkVGU19NQVNLKSB7XG4mIzQzO1x0XHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3M7XG4mIzQzO1x0XHRyZWZzID0gbHJ1X3JlZnNfZnJvbV9mbGFncyhvbGRfZmxhZ3MpO1xuJiM0MztcdFx0aWYgKHJlZnMgPT0gTFJVX1JFRlNfTUFYKSB7XG4gXHRcdFx0aWYgKCFmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pKVxuIFx0XHRcdFx0Zm9saW9fc2V0X3dvcmtpbmdzZXQoZm9saW8pO1xuIFx0XHRcdHJldHVybjtcbiBcdFx0fVxuLVxuLVx0XHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3MgJiM0MzsgQklUKExSVV9SRUZTX1BHT0ZGKTtcbi1cdH0gd2hpbGUgKCF0cnlfY21weGNoZyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xuJiM0MztcdFx0bHJ1X3JlZnNfc2V0X2ZsYWdzKFx1MDAyNm5ld19mbGFncywgcmVmcyAmIzQzOyAxKTtcbiYjNDM7XHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBscnVfZ2VuX2NsZWFyX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcbkBAIC0zODQsNyAmIzQzOzM4Niw4IEBAIHN0YXRpYyBib29sIGxydV9nZW5fY2xlYXJfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0aWYgKGdlbiBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHRydWU7XG4gXG4tXHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX0ZMQUdTIHwgQklUKFBHX3dvcmtpbmdzZXQpLCAwKTtcbiYjNDM7XHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xuJiM0MztcdGZvbGlvX2NsZWFyX3dvcmtpbmdzZXQoZm9saW8pO1xuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuIFx0c2VxID0gUkVBRF9PTkNFKGZvbGlvX2xydXZlYyhmb2xpbyktXHUwMDNlbHJ1Z2VuLm1pbl9zZXFbdHlwZV0pO1xuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuY1xuaW5kZXggMTFiODVmNGI2ODI4Yi4uYTc1NzJkZWQ1NmM5ZCAxMDA2NDRcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC5jXG5AQCAtMTUyOSwyOCAmIzQzOzE1MjksMTIgQEAgdm9pZCBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbHJ1X2xpc3QgbHJ1LFxuIFx0XHRcdFx0aW50IHppZCwgbG9uZyBucl9wYWdlcylcbiB7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXo7XG4tXHR1bnNpZ25lZCBsb25nICpscnVfc2l6ZTtcbi1cdGxvbmcgc2l6ZTtcbiBcbiBcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXG4gXHRcdHJldHVybjtcbiBcbiBcdG16ID0gY29udGFpbmVyX29mKGxydXZlYywgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUsIGxydXZlYyk7XG4tXHRscnVfc2l6ZSA9IFx1MDAyNm16LVx1MDAzZWxydV96b25lX3NpemVbemlkXVtscnVdO1xuLVxuLVx0aWYgKG5yX3BhZ2VzIFx1MDAzYyAwKVxuLVx0XHQqbHJ1X3NpemUgJiM0Mzs9IG5yX3BhZ2VzO1xuLVxuLVx0c2l6ZSA9ICpscnVfc2l6ZTtcbi1cdGlmIChXQVJOX09OQ0Uoc2l6ZSBcdTAwM2MgMCxcbi1cdFx0XCYjMzQ7JXMoJXAsICVkLCAlbGQpOiBscnVfc2l6ZSAlbGRcXG5cJiMzNDssXG4tXHRcdF9fZnVuY19fLCBscnV2ZWMsIGxydSwgbnJfcGFnZXMsIHNpemUpKSB7XG4tXHRcdFZNX0JVR19PTigxKTtcbi1cdFx0KmxydV9zaXplID0gMDtcbi1cdH1cbi1cbi1cdGlmIChucl9wYWdlcyBcdTAwM2UgMClcbi1cdFx0KmxydV9zaXplICYjNDM7PSBucl9wYWdlcztcbiYjNDM7XHRhdG9taWNfbG9uZ19hZGQobnJfcGFnZXMsIFx1MDAyNm16LVx1MDAzZWxydV96b25lX3NpemVbemlkXVtscnVdKTtcbiB9XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZS5jIGIvbW0vbWlncmF0ZS5jXG5pbmRleCAxNWI0NTgzMmJjZmE3Li5hMzY5ZDBjOTVjMzg2IDEwMDY0NFxuLS0tIGEvbW0vbWlncmF0ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9taWdyYXRlLmNcbkBAIC03NzYsOCAmIzQzOzc3Niw5IEBAIHZvaWQgZm9saW9fbWlncmF0ZV9mbGFncyhzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdGludCBjcHVwaWQ7XG4gXG4tXHRpZiAoZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSlcbi1cdFx0Zm9saW9fc2V0X3JlZmVyZW5jZWQobmV3Zm9saW8pO1xuJiM0MztcdC8qIENvcHkgdGhlIHJlZmVyZW5jZSBzdGF0ZSwgaW5jbHVkaW5nIFBHX3JlZmVyZW5jZWQgKi9cbiYjNDM7XHRmb2xpb19taWdyYXRlX2xydV9yZWZzKG5ld2ZvbGlvLCBmb2xpbyk7XG4mIzQzO1xuIFx0aWYgKGZvbGlvX3Rlc3RfdXB0b2RhdGUoZm9saW8pKVxuIFx0XHRmb2xpb19tYXJrX3VwdG9kYXRlKG5ld2ZvbGlvKTtcbiBcdGlmIChmb2xpb190ZXN0X2NsZWFyX2FjdGl2ZShmb2xpbykpIHtcbkBAIC04MDcsNyAmIzQzOzgwOCw2IEBAIHZvaWQgZm9saW9fbWlncmF0ZV9mbGFncyhzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0aWYgKGZvbGlvX3Rlc3RfaWRsZShmb2xpbykpXG4gXHRcdGZvbGlvX3NldF9pZGxlKG5ld2ZvbGlvKTtcbiBcbi1cdGZvbGlvX21pZ3JhdGVfcmVmcyhuZXdmb2xpbywgZm9saW8pO1xuIFx0LypcbiBcdCAqIENvcHkgTlVNQSBpbmZvcm1hdGlvbiB0byB0aGUgbmV3IHBhZ2UsIHRvIHByZXZlbnQgb3Zlci1lYWdlclxuIFx0ICogZnV0dXJlIG1pZ3JhdGlvbnMgb2YgdGhpcyBzYW1lIHBhZ2UuXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggNzNhODFiNGEzZTE2NC4uNmZkYTk0OGFlY2YyYyAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uY1xuQEAgLTg0MywxOSAmIzQzOzg0MywyMiBAQCBzdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXG4gXHRpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykgXHUwMDI2XHUwMDI2ICFmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pKSB7XG4gXHRcdC8qIEFjdGl2YXRlIGZpbGUtYmFja2VkIGV4ZWN1dGFibGUgZm9saW9zIGFmdGVyIGZpcnN0IHVzYWdlLiAqL1xuIFx0XHRpZiAoaXNfZXhlY19maWxlX2ZvbGlvKGZvbGlvLCB2bWFfZmxhZ3MpKSB7XG4tXHRcdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX3dvcmtpbmdzZXQpKTtcbiYjNDM7XHRcdFx0Zm9saW9fc2V0X3dvcmtpbmdzZXQoZm9saW8pO1xuJiM0MztcdFx0XHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xuIFx0XHRcdHJldHVybiB0cnVlO1xuIFx0XHR9XG4gXG4tXHRcdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgQklUKFBHX3JlZmVyZW5jZWQpKTtcbiYjNDM7XHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMSk7XG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbiBcbiBcdC8qIFByb21vdGUgb24gc2Vjb25kIGFjY2VzcyAqL1xuLVx0aWYgKGZvbGlvX2xydV9yZWZzKGZvbGlvKSBcdTAwM2UgMSlcbi1cdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX3dvcmtpbmdzZXQpKTtcbi1cdGVsc2VcbiYjNDM7XHRpZiAoZm9saW9fbHJ1X3JlZnMoZm9saW8pIFx1MDAzZSAxKSB7XG4mIzQzO1x0XHRmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7XG4mIzQzO1x0XHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xuJiM0MztcdH0gZWxzZSB7XG4gXHRcdGZvbGlvX21hcmtfYWNjZXNzZWQoZm9saW8pO1xuJiM0MztcdH1cbiBcdHJldHVybiB0cnVlO1xuIH1cbiAjZWxzZVxuQEAgLTMxOTUsOCAmIzQzOzMxOTgsOCBAQCBzdHJ1Y3QgY3RybF9wb3Mge1xuIFx0aW50IGdhaW47XG4gfTtcbiBcbi1zdGF0aWMgdm9pZCByZWFkX2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCB0aWVyLCBpbnQgZ2Fpbixcbi1cdFx0XHQgIHN0cnVjdCBjdHJsX3BvcyAqcG9zKVxuJiM0MztzdGF0aWMgdm9pZCByZWFkX2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCB0aWVyX21pbixcbiYjNDM7XHRcdFx0ICBpbnQgdGllcl9tYXgsIGludCBnYWluLCBzdHJ1Y3QgY3RybF9wb3MgKnBvcylcbiB7XG4gXHRpbnQgaTtcbiBcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xuQEAgLTMyMDUsNyAmIzQzOzMyMDgsNyBAQCBzdGF0aWMgdm9pZCByZWFkX2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCB0aWVyLCBpbnQgZ2FpbixcbiBcdHBvcy1cdTAwM2VnYWluID0gZ2FpbjtcbiBcdHBvcy1cdTAwM2VyZWZhdWx0ZWQgPSBwb3MtXHUwMDNldG90YWwgPSAwO1xuIFxuLVx0Zm9yIChpID0gdGllciAlIE1BWF9OUl9USUVSUzsgaSBcdTAwM2M9IG1pbih0aWVyLCBNQVhfTlJfVElFUlMgLSAxKTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRmb3IgKGkgPSB0aWVyX21pbjsgaSBcdTAwM2M9IHRpZXJfbWF4OyBpJiM0MzsmIzQzOykge1xuIFx0XHRwb3MtXHUwMDNlcmVmYXVsdGVkICYjNDM7PSBscnVnZW4tXHUwMDNlYXZnX3JlZmF1bHRlZFt0eXBlXVtpXSAmIzQzO1xuIFx0XHRcdFx0ICBhdG9taWNfbG9uZ19yZWFkKFx1MDAyNmxydWdlbi1cdTAwM2VyZWZhdWx0ZWRbaGlzdF1bdHlwZV1baV0pO1xuIFx0XHRwb3MtXHUwMDNldG90YWwgJiM0Mzs9IGxydWdlbi1cdTAwM2VhdmdfdG90YWxbdHlwZV1baV0gJiM0MztcbkBAIC0zMjY2LDExICYjNDM7MzI2OSwxMSBAQCBzdGF0aWMgYm9vbCBwb3NpdGl2ZV9jdHJsX2VycihzdHJ1Y3QgY3RybF9wb3MgKnNwLCBzdHJ1Y3QgY3RybF9wb3MgKnB2KVxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4gXG4gLyogcHJvbW90ZSBwYWdlcyBhY2Nlc3NlZCB0aHJvdWdoIHBhZ2UgdGFibGVzICovXG4tc3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBnZW4sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXG4mIzQzO3N0YXRpYyBpbnQgZm9saW9fdXBkYXRlX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbmV3X2dlbiwgaW50ICppc19maWxlLFxuJiM0MztcdFx0XHQgICAgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcbiB7XG4tXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVx1MDAzZWZsYWdzLmYpO1xuLVxuLVx0Vk1fV0FSTl9PTl9PTkNFKGdlbiBcdTAwM2U9IE1BWF9OUl9HRU5TKTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKCpmb2xpb19mbGFncyhmb2xpbywgMCkpO1xuJiM0MztcdGludCBvbGRfZ2VuO1xuIFxuIFx0LypcbiBcdCAqIFNlZSB0aGUgY29tbWVudCBvbiBMUlVfUkVGU19GTEFHUywgYW5kIGFjdGl2YXRlIGZpbGUtYmFja2VkXG5AQCAtMzI3OSwyMCAmIzQzOzMyODIsMjUgQEAgc3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBnZW4sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFcbiBcdCAqL1xuIFx0aWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pIFx1MDAyNlx1MDAyNiAhZm9saW9fdGVzdF93b3JraW5nc2V0KGZvbGlvKSBcdTAwMjZcdTAwMjZcbiBcdCAgICAhaXNfZXhlY19maWxlX2ZvbGlvKGZvbGlvLCB2bWFfZmxhZ3MpKSB7XG4tXHRcdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgQklUKFBHX3JlZmVyZW5jZWQpKTtcbiYjNDM7XHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMSk7XG4gXHRcdHJldHVybiAtMTtcbiBcdH1cbiBcbiBcdGRvIHtcbiYjNDM7XHRcdG9sZF9nZW4gPSBscnVfZ2VuX2Zyb21fZmxhZ3Mob2xkX2ZsYWdzKTtcbiYjNDM7XHRcdG5ld19mbGFncyA9IG9sZF9mbGFncztcbiYjNDM7XG4gXHRcdC8qIGxydV9nZW5fZGVsX2ZvbGlvKCkgaGFzIGlzb2xhdGVkIHRoaXMgcGFnZT8gKi9cbi1cdFx0aWYgKCEob2xkX2ZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spKVxuLVx0XHRcdHJldHVybiAtMTtcbiYjNDM7XHRcdGlmIChvbGRfZ2VuIFx1MDAzYyAwKVxuJiM0MztcdFx0XHRicmVhaztcbiBcbi1cdFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzIFx1MDAyNiB+KExSVV9HRU5fTUFTSyB8IExSVV9SRUZTX0ZMQUdTKTtcbi1cdFx0bmV3X2ZsYWdzIHw9ICgoZ2VuICYjNDM7IDFVTCkgXHUwMDNjXHUwMDNjIExSVV9HRU5fUEdPRkYpIHwgQklUKFBHX3dvcmtpbmdzZXQpO1xuLVx0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XG4mIzQzO1x0XHRscnVfZ2VuX3NldF9mbGFncyhcdTAwMjZuZXdfZmxhZ3MsIG5ld19nZW4pO1xuJiM0MztcdFx0bHJ1X3JlZnNfc2V0X2ZsYWdzKFx1MDAyNm5ld19mbGFncywgMCk7XG4mIzQzO1x0XHRuZXdfZmxhZ3MgfD0gQklUKFBHX3dvcmtpbmdzZXQpO1xuJiM0MztcdH0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksIFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XG4gXG4tXHRyZXR1cm4gKChvbGRfZmxhZ3MgXHUwMDI2IExSVV9HRU5fTUFTSykgXHUwMDNlXHUwMDNlIExSVV9HRU5fUEdPRkYpIC0gMTtcbiYjNDM7XHQqaXNfZmlsZSA9IGZvbGlvX2ZsYWdzX2lzX2ZpbGVfbHJ1KFx1MDAyNm9sZF9mbGFncyk7XG4mIzQzO1x0cmV0dXJuIG9sZF9nZW47XG4gfVxuIFxuIC8qIHByb3RlY3QgcGFnZXMgYWNjZXNzZWQgbXVsdGlwbGUgdGltZXMgdGhyb3VnaCBmaWxlIGRlc2NyaXB0b3JzICovXG5AQCAtMzMwMSwyMSAmIzQzOzMzMDksMjAgQEAgc3RhdGljIGludCBmb2xpb19pbmNfZ2VuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdGludCB0eXBlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pO1xuIFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG4gXHRpbnQgbmV3X2dlbiwgb2xkX2dlbiA9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLVx1MDAzZW1pbl9zZXFbdHlwZV0pO1xuLVx0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRShmb2xpby1cdTAwM2VmbGFncy5mKTtcbi1cbi1cdFZNX1dBUk5fT05fT05DRV9GT0xJTyghKG9sZF9mbGFncyBcdTAwMjYgTFJVX0dFTl9NQVNLKSwgZm9saW8pO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XG4gXG4gXHRkbyB7XG4tXHRcdG5ld19nZW4gPSAoKG9sZF9mbGFncyBcdTAwMjYgTFJVX0dFTl9NQVNLKSBcdTAwM2VcdTAwM2UgTFJVX0dFTl9QR09GRikgLSAxO1xuJiM0MztcdFx0bmV3X2dlbiA9IGxydV9nZW5fZnJvbV9mbGFncyhvbGRfZmxhZ3MpO1xuJiM0MztcbiBcdFx0LyogZm9saW9fdXBkYXRlX2dlbigpIGhhcyBwcm9tb3RlZCB0aGlzIHBhZ2U/ICovXG4gXHRcdGlmIChuZXdfZ2VuIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgbmV3X2dlbiAhPSBvbGRfZ2VuKVxuIFx0XHRcdHJldHVybiBuZXdfZ2VuO1xuIFxuJiM0MztcdFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzO1xuIFx0XHRuZXdfZ2VuID0gKG9sZF9nZW4gJiM0MzsgMSkgJSBNQVhfTlJfR0VOUztcbi1cbi1cdFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzIFx1MDAyNiB+KExSVV9HRU5fTUFTSyB8IExSVV9SRUZTX0ZMQUdTKTtcbi1cdFx0bmV3X2ZsYWdzIHw9IChuZXdfZ2VuICYjNDM7IDFVTCkgXHUwMDNjXHUwMDNjIExSVV9HRU5fUEdPRkY7XG4tXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbiYjNDM7XHRcdGxydV9nZW5fc2V0X2ZsYWdzKFx1MDAyNm5ld19mbGFncywgbmV3X2dlbik7XG4mIzQzO1x0XHRscnVfcmVmc19zZXRfZmxhZ3MoXHUwMDI2bmV3X2ZsYWdzLCAwKTtcbiYjNDM7XHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xuIFxuIFx0bHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTtcbiBcbkBAIC0zMzIzLDkgJiM0MzszMzMwLDggQEAgc3RhdGljIGludCBmb2xpb19pbmNfZ2VuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcbiB9XG4gXG4gc3RhdGljIHZvaWQgdXBkYXRlX2JhdGNoX3NpemUoc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaywgc3RydWN0IGZvbGlvICpmb2xpbyxcbi1cdFx0XHQgICAgICBpbnQgb2xkX2dlbiwgaW50IG5ld19nZW4pXG4mIzQzO1x0XHRcdCAgICAgIGludCBvbGRfZ2VuLCBpbnQgbmV3X2dlbiwgaW50IHR5cGUpXG4ge1xuLVx0aW50IHR5cGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7XG4gXHRpbnQgem9uZSA9IGZvbGlvX3pvbmVudW0oZm9saW8pO1xuIFx0aW50IGRlbHRhID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuIFxuQEAgLTM1MTIsMjIgJiM0MzszNTE4LDI0IEBAIHN0YXRpYyBib29sIHN1aXRhYmxlX3RvX3NjYW4oaW50IHRvdGFsLCBpbnQgeW91bmcpXG4gfVxuIFxuIHN0YXRpYyB2b2lkIHdhbGtfdXBkYXRlX2ZvbGlvKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLVx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbmV3X2dlbiwgYm9vbCBkaXJ0eSlcbiYjNDM7XHRcdHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBkaXJ0eSlcbiB7XG4tXHRpbnQgb2xkX2dlbjtcbiYjNDM7XHRpbnQgbmV3X2dlbiwgb2xkX2dlbiwgZmlsZTtcbiBcbiBcdGlmICghZm9saW8pXG4gXHRcdHJldHVybjtcbiBcbiYjNDM7XHRuZXdfZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShSRUFEX09OQ0UobHJ1dmVjLVx1MDAzZWxydWdlbi5tYXhfc2VxKSk7XG4mIzQzO1xuIFx0aWYgKGRpcnR5IFx1MDAyNlx1MDAyNiAhZm9saW9fdGVzdF9kaXJ0eShmb2xpbykgXHUwMDI2XHUwMDI2XG4gXHQgICAgIShmb2xpb190ZXN0X2Fub24oZm9saW8pIFx1MDAyNlx1MDAyNiBmb2xpb190ZXN0X3N3YXBiYWNrZWQoZm9saW8pIFx1MDAyNlx1MDAyNlxuIFx0ICAgICAgIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkpXG4gXHRcdGZvbGlvX21hcmtfZGlydHkoZm9saW8pO1xuIFxuIFx0aWYgKHdhbGspIHtcbi1cdFx0b2xkX2dlbiA9IGZvbGlvX3VwZGF0ZV9nZW4oZm9saW8sIG5ld19nZW4sIFx1MDAyNnZtYS1cdTAwM2VmbGFncyk7XG4mIzQzO1x0XHRvbGRfZ2VuID0gZm9saW9fdXBkYXRlX2dlbihmb2xpbywgbmV3X2dlbiwgXHUwMDI2ZmlsZSwgXHUwMDI2dm1hLVx1MDAzZWZsYWdzKTtcbiBcdFx0aWYgKG9sZF9nZW4gXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBvbGRfZ2VuICE9IG5ld19nZW4pXG4tXHRcdFx0dXBkYXRlX2JhdGNoX3NpemUod2FsaywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4pO1xuJiM0MztcdFx0XHR1cGRhdGVfYmF0Y2hfc2l6ZSh3YWxrLCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbiwgZmlsZSk7XG4gXHR9IGVsc2UgaWYgKGxydV9nZW5fc2V0X3JlZnMoZm9saW8sIFx1MDAyNnZtYS1cdTAwM2VmbGFncykpIHtcbiBcdFx0b2xkX2dlbiA9IGZvbGlvX2xydV9nZW4oZm9saW8pO1xuIFx0XHRpZiAob2xkX2dlbiBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IG9sZF9nZW4gIT0gbmV3X2dlbilcbkBAIC0zNTQ5LDggJiM0MzszNTU3LDYgQEAgc3RhdGljIGJvb2wgd2Fsa19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrID0gYXJncy1cdTAwM2Vwcml2YXRlO1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKHdhbGstXHUwMDNlbHJ1dmVjKTtcbiBcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQod2Fsay1cdTAwM2VscnV2ZWMpO1xuLVx0REVGSU5FX01BWF9TRVEod2Fsay1cdTAwM2VscnV2ZWMpO1xuLVx0aW50IGdlbiA9IGxydV9nZW5fZnJvbV9zZXEobWF4X3NlcSk7XG4gXHR1bnNpZ25lZCBpbnQgbnI7XG4gXHRwbWRfdCBwbWR2YWw7XG4gXG5AQCAtMzYwMSw3ICYjNDM7MzYwNyw3IEBAIHN0YXRpYyBib29sIHdhbGtfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRpZiAobGFzdCAhPSBmb2xpbykge1xuLVx0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtXHUwMDNldm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcbiYjNDM7XHRcdFx0d2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy1cdTAwM2V2bWEsIHdhbGstXHUwMDNlbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XG4gXG4gXHRcdFx0bGFzdCA9IGZvbGlvO1xuIFx0XHRcdGRpcnR5ID0gZmFsc2U7XG5AQCAtMzYxNCw3ICYjNDM7MzYyMCw3IEBAIHN0YXRpYyBib29sIHdhbGtfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0XHR3YWxrLVx1MDAzZW1tX3N0YXRzW01NX0xFQUZfWU9VTkddICYjNDM7PSBucjtcbiBcdH1cbiBcbi1cdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtXHUwMDNldm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcbiYjNDM7XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBhcmdzLVx1MDAzZXZtYSwgd2Fsay1cdTAwM2VscnV2ZWMsIGxhc3QsIGRpcnR5KTtcbiBcdGxhc3QgPSBOVUxMO1xuIFxuIFx0aWYgKGkgXHUwMDNjIFBUUlNfUEVSX1BURSBcdTAwMjZcdTAwMjYgZ2V0X25leHRfdm1hKFBNRF9NQVNLLCBQQUdFX1NJWkUsIGFyZ3MsIFx1MDAyNnN0YXJ0LCBcdTAwMjZlbmQpKVxuQEAgLTM2MzcsOCAmIzQzOzM2NDMsNiBAQCBzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYVxuIFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGFyZ3MtXHUwMDNlcHJpdmF0ZTtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyh3YWxrLVx1MDAzZWxydXZlYyk7XG4gXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KHdhbGstXHUwMDNlbHJ1dmVjKTtcbi1cdERFRklORV9NQVhfU0VRKHdhbGstXHUwMDNlbHJ1dmVjKTtcbi1cdGludCBnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpO1xuIFxuIFx0Vk1fV0FSTl9PTl9PTkNFKHB1ZF9sZWFmKCpwdWQpKTtcbiBcbkBAIC0zNjkyLDcgJiM0MzszNjk2LDcgQEAgc3RhdGljIHZvaWQgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IHZtX2FyZWFcbiBcdFx0XHRnb3RvIG5leHQ7XG4gXG4gXHRcdGlmIChsYXN0ICE9IGZvbGlvKSB7XG4tXHRcdFx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcbiYjNDM7XHRcdFx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCB3YWxrLVx1MDAzZWxydXZlYywgbGFzdCwgZGlydHkpO1xuIFxuIFx0XHRcdGxhc3QgPSBmb2xpbztcbiBcdFx0XHRkaXJ0eSA9IGZhbHNlO1xuQEAgLTM3MDYsNyAmIzQzOzM3MTAsNyBAQCBzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYVxuIFx0XHRpID0gaSBcdTAwM2UgTUlOX0xSVV9CQVRDSCA/IDAgOiBmaW5kX25leHRfYml0KGJpdG1hcCwgTUlOX0xSVV9CQVRDSCwgaSkgJiM0MzsgMTtcbiBcdH0gd2hpbGUgKGkgXHUwMDNjPSBNSU5fTFJVX0JBVENIKTtcbiBcbi1cdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XG4mIzQzO1x0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCB3YWxrLVx1MDAzZWxydXZlYywgbGFzdCwgZGlydHkpO1xuIFxuIFx0bGF6eV9tbXVfbW9kZV9kaXNhYmxlKCk7XG4gXHRzcGluX3VubG9jayhwdGwpO1xuQEAgLTQyNzAsOCAmIzQzOzQyNzQsNiBAQCBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXG4gXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gZm9saW9fcGdkYXQoZm9saW8pO1xuIFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjO1xuIFx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlO1xuLVx0dW5zaWduZWQgbG9uZyBtYXhfc2VxO1xuLVx0aW50IGdlbjtcbiBcbiBcdGxvY2tkZXBfYXNzZXJ0X2hlbGQocHZtdy1cdTAwM2VwdGwpO1xuIFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3RfbHJ1KGZvbGlvKSwgZm9saW8pO1xuQEAgLTQzMDgsOCAmIzQzOzQzMTAsNiBAQCBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXG4gXG4gXHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fZm9saW8oZm9saW8pO1xuIFx0bHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIHBnZGF0KTtcbi1cdG1heF9zZXEgPSBSRUFEX09OQ0UoKGxydXZlYyktXHUwMDNlbHJ1Z2VuLm1heF9zZXEpO1xuLVx0Z2VuID0gbHJ1X2dlbl9mcm9tX3NlcShtYXhfc2VxKTtcbiBcdG1tX3N0YXRlID0gZ2V0X21tX3N0YXRlKGxydXZlYyk7XG4gXG4gXHRsYXp5X21tdV9tb2RlX2VuYWJsZSgpO1xuQEAgLTQzNDEsNyAmIzQzOzQzNDEsNyBAQCBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGlmIChsYXN0ICE9IGZvbGlvKSB7XG4tXHRcdFx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcbiYjNDM7XHRcdFx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBscnV2ZWMsIGxhc3QsIGRpcnR5KTtcbiBcbiBcdFx0XHRsYXN0ID0gZm9saW87XG4gXHRcdFx0ZGlydHkgPSBmYWxzZTtcbkBAIC00MzUzLDEzICYjNDM7NDM1MywxNCBAQCBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXG4gXHRcdHlvdW5nICYjNDM7PSBucjtcbiBcdH1cbiBcbi1cdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XG4mIzQzO1x0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBscnV2ZWMsIGxhc3QsIGRpcnR5KTtcbiBcbiBcdGxhenlfbW11X21vZGVfZGlzYWJsZSgpO1xuIFxuIFx0LyogZmVlZGJhY2sgZnJvbSBybWFwIHdhbGtlcnMgdG8gcGFnZSB0YWJsZSB3YWxrZXJzICovXG4gXHRpZiAobW1fc3RhdGUgXHUwMDI2XHUwMDI2IHN1aXRhYmxlX3RvX3NjYW4oaSwgeW91bmcpKVxuLVx0XHR1cGRhdGVfYmxvb21fZmlsdGVyKG1tX3N0YXRlLCBtYXhfc2VxLCBwdm13LVx1MDAzZXBtZCk7XG4mIzQzO1x0XHR1cGRhdGVfYmxvb21fZmlsdGVyKG1tX3N0YXRlLCBSRUFEX09OQ0UobHJ1dmVjLVx1MDAzZWxydWdlbi5tYXhfc2VxKSxcbiYjNDM7XHRcdFx0XHQgICAgcHZtdy1cdTAwM2VwbWQpO1xuIFxuIFx0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xuIFxuQEAgLTQ3MTYsNyAmIzQzOzQ3MTcsNyBAQCBzdGF0aWMgYm9vbCBpc29sYXRlX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHNjYVxuIFxuIFx0Lyogc2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTICovXG4gXHRpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykpXG4tXHRcdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgMCk7XG4mIzQzO1x0XHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xuIFxuIFx0c3VjY2VzcyA9IGxydV9nZW5fZGVsX2ZvbGlvKGxydXZlYywgZm9saW8sIHRydWUpO1xuIFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFzdWNjZXNzLCBmb2xpbyk7XG5AQCAtNDgwOSw5ICYjNDM7NDgxMCw5IEBAIHN0YXRpYyBpbnQgZ2V0X3RpZXJfaWR4KHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUpXG4gXHQgKiBUaGlzIHZhbHVlIGlzIGNob3NlbiBiZWNhdXNlIGFueSBvdGhlciB0aWVyIHdvdWxkIGhhdmUgYXQgbGVhc3QgdHdpY2VcbiBcdCAqIGFzIG1hbnkgcmVmYXVsdHMgYXMgdGhlIGZpcnN0IHRpZXIuXG4gXHQgKi9cbi1cdHJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCAwLCAyLCBcdTAwMjZzcCk7XG4tXHRmb3IgKHRpZXIgPSAxOyB0aWVyIFx1MDAzYyBNQVhfTlJfVElFUlM7IHRpZXImIzQzOyYjNDM7KSB7XG4tXHRcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCB0aWVyLCAzLCBcdTAwMjZwdik7XG4mIzQzO1x0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIExSVV9USUVSX01JTiwgTFJVX1RJRVJfTUlOLCAyLCBcdTAwMjZzcCk7XG4mIzQzO1x0Zm9yICh0aWVyID0gTFJVX1RJRVJfTUlOICYjNDM7IDE7IHRpZXIgXHUwMDNjPSBMUlVfVElFUl9NQVg7IHRpZXImIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRyZWFkX2N0cmxfcG9zKGxydXZlYywgdHlwZSwgdGllciwgdGllciwgMywgXHUwMDI2cHYpO1xuIFx0XHRpZiAoIXBvc2l0aXZlX2N0cmxfZXJyKFx1MDAyNnNwLCBcdTAwMjZwdikpXG4gXHRcdFx0YnJlYWs7XG4gXHR9XG5AQCAtNDgzMiw4ICYjNDM7NDgzMywxMCBAQCBzdGF0aWMgaW50IGdldF90eXBlX3RvX3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcylcbiBcdCAqIENvbXBhcmUgdGhlIHN1bSBvZiBhbGwgdGllcnMgb2YgYW5vbiB3aXRoIHRoYXQgb2YgZmlsZSB0byBkZXRlcm1pbmVcbiBcdCAqIHdoaWNoIHR5cGUgdG8gc2Nhbi5cbiBcdCAqL1xuLVx0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fQU5PTiwgTUFYX05SX1RJRVJTLCBzd2FwcGluZXNzLCBcdTAwMjZzcCk7XG4tXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9GSUxFLCBNQVhfTlJfVElFUlMsIE1BWF9TV0FQUElORVNTIC0gc3dhcHBpbmVzcywgXHUwMDI2cHYpO1xuJiM0MztcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0FOT04sIExSVV9USUVSX01JTiwgTFJVX1RJRVJfTUFYLFxuJiM0MztcdFx0ICAgICAgc3dhcHBpbmVzcywgXHUwMDI2c3ApO1xuJiM0MztcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0ZJTEUsIExSVV9USUVSX01JTiwgTFJVX1RJRVJfTUFYLFxuJiM0MztcdFx0ICAgICAgTUFYX1NXQVBQSU5FU1MgLSBzd2FwcGluZXNzLCBcdTAwMjZwdik7XG4gXG4gXHRyZXR1cm4gcG9zaXRpdmVfY3RybF9lcnIoXHUwMDI2c3AsIFx1MDAyNnB2KTtcbiB9XG5AQCAtNDkzMiw4ICYjNDM7NDkzNSwxMCBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdFx0fVxuIFxuIFx0XHQvKiBkb24mIzM5O3QgYWRkIHJlamVjdGVkIGZvbGlvcyB0byB0aGUgb2xkZXN0IGdlbmVyYXRpb24gKi9cbi1cdFx0aWYgKGxydV9nZW5fZm9saW9fc2VxKGxydXZlYywgZm9saW8sIGZhbHNlKSA9PSBtaW5fc2VxW3R5cGVdKVxuLVx0XHRcdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MsIEJJVChQR19hY3RpdmUpKTtcbiYjNDM7XHRcdGlmIChscnVfZ2VuX2ZvbGlvX3NlcShscnV2ZWMsIGZvbGlvLCBmYWxzZSkgPT0gbWluX3NlcVt0eXBlXSkge1xuJiM0MztcdFx0XHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xuJiM0MztcdFx0XHRmb2xpb19zZXRfYWN0aXZlKGZvbGlvKTtcbiYjNDM7XHRcdH1cbiBcdH1cbiBcbiBcdG1vdmVfZm9saW9zX3RvX2xydShcdTAwMjZsaXN0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxOTowMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TFJVX0dFTiYjMzQ7LAogICAgJiMzNDtMUlVfR0VOX0VOQUJMRUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmb2xpb19taWdyYXRlX2ZsYWdzJiMzNDssCiAgICAmIzM0O2xydV9nZW5fbG9va19hcm91bmQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBwYWdlIGZsYWdzIGhhbmRsaW5nIGFuZCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIGBscnVfem9uZV9zaXplYCB1cGRhdGVzIGJ5IHVzaW5nIGF0b21pYyBvcGVyYXRpb25zLiBJdCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLCBzcGVjaWZpY2FsbHkgcGFnZSBtaWdyYXRpb24gKGBmb2xpb19taWdyYXRlX2ZsYWdzYCkgYW5kIHBhZ2UgcmVjbGFpbSBsb29rYXJvdW5kIChgbHJ1X2dlbl9sb29rX2Fyb3VuZGApLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgbWFraW5nIHRoZW0gd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDI1OWEyNTIyMzg3NmQwZjI3M2IzNGZlNmFlZjM0MzY2Yjc1NjA5OWUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAyNSAxOTowMzoyMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKaW5kZXggMjE1ZTJlODdmNDJiMi4uN2I4OWQwY2I1ZjZjNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKQEAgLTExMyw3ICYjNDM7MTEzLDcgQEAgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgewogCS8qIEZpZWxkcyB3aGljaCBnZXQgdXBkYXRlZCBvZnRlbiBhdCB0aGUgZW5kLiAqLwogCXN0cnVjdCBscnV2ZWMJCWxydXZlYzsKIAlDQUNIRUxJTkVfUEFERElORyhfcGFkMl8pOwotCXVuc2lnbmVkIGxvbmcJCWxydV96b25lX3NpemVbTUFYX05SX1pPTkVTXVtOUl9MUlVfTElTVFNdOwomIzQzOwlhdG9taWNfbG9uZ190CQlscnVfem9uZV9zaXplW01BWF9OUl9aT05FU11bTlJfTFJVX0xJU1RTXTsKIAlzdHJ1Y3QgbWVtX2Nncm91cF9yZWNsYWltX2l0ZXIJaXRlcjsKIAogCS8qCkBAIC05MDIsMTAgJiM0Mzs5MDIsMTUgQEAgc3RhdGljIGlubGluZQogdW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX2dldF96b25lX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywKIAkJZW51bSBscnVfbGlzdCBscnUsIGludCB6b25lX2lkeCkKIHsKJiM0MzsJbG9uZyB2YWw7CiAJc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm16OwogCiAJbXogPSBjb250YWluZXJfb2YobHJ1dmVjLCBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSwgbHJ1dmVjKTsKLQlyZXR1cm4gUkVBRF9PTkNFKG16LSZndDtscnVfem9uZV9zaXplW3pvbmVfaWR4XVtscnVdKTsKJiM0MzsJdmFsID0gYXRvbWljX2xvbmdfcmVhZCgmYW1wO216LSZndDtscnVfem9uZV9zaXplW3pvbmVfaWR4XVtscnVdKTsKJiM0MzsJaWYgKFdBUk5fT05fT05DRSh2YWwgJmx0OyAwKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlyZXR1cm4gdmFsOwogfQogCiB2b2lkIF9fbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKGdmcF90IGdmcF9tYXNrKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmggYi9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oCmluZGV4IDYyMWM4NjUzZDhmN2UuLjhjZjgyOTg5ZWMyNjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaApAQCAtMTAsNiAmIzQzOzEwLDExIEBACiAjaW5jbHVkZSAmbHQ7bGludXgvdXNlcmZhdWx0ZmRfay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2xlYWZvcHMuaCZndDsKIAomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2ZsYWdzX2lzX2ZpbGVfbHJ1KGNvbnN0IHVuc2lnbmVkIGxvbmcgKmZsYWdzKQomIzQzO3sKJiM0MzsJcmV0dXJuICF0ZXN0X2JpdChQR19zd2FwYmFja2VkLCBmbGFncyk7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBmb2xpb19pc19maWxlX2xydSAtIFNob3VsZCB0aGUgZm9saW8gYmUgb24gYSBmaWxlIExSVSBvciBhbm9uIExSVT8KICAqIEBmb2xpbzogVGhlIGZvbGlvIHRvIHRlc3QuCkBAIC0yNyw3ICYjNDM7MzIsNyBAQAogICovCiBzdGF0aWMgaW5saW5lIGludCBmb2xpb19pc19maWxlX2xydShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewotCXJldHVybiAhZm9saW9fdGVzdF9zd2FwYmFja2VkKGZvbGlvKTsKJiM0MzsJcmV0dXJuIGZvbGlvX2ZsYWdzX2lzX2ZpbGVfbHJ1KGNvbnN0X2ZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7CiB9CiAKIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX3VwZGF0ZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCkBAIC0xNDIsMTAgJiM0MzsxNDcsNDIgQEAgc3RhdGljIGlubGluZSBpbnQgbHJ1X3RpZXJfZnJvbV9yZWZzKGludCByZWZzLCBib29sIHdvcmtpbmdzZXQpCiAJcmV0dXJuIHdvcmtpbmdzZXQgPyBNQVhfTlJfVElFUlMgLSAxIDogb3JkZXJfYmFzZV8yKHJlZnMpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfcmVmcyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzOy8qKgomIzQzOyAqIGxydV9nZW5fZnJvbV9mbGFncyAtIFJldHVybiB0aGUgTFJVIGdlbmVyYXRpb24gbnVtYmVyIGZyb20gZm9saW8gZmxhZ3MuCiYjNDM7ICogQGZsYWdzOiBmb2xpbyBmbGFncwomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogQSBudW1iZXIgYmV0d2VlbiAwIGFuZCAoTUFYX05SX0dFTlMgLSAxKSwgaW5jbHVzaXZlLiBSZXR1cm5zCiYjNDM7ICogLTEgaWYgdGhlIGZsYWdzIGluZGljYXRlIHRoZSBmb2xpbyBpcyBvZmYgdGhlIGxpc3QgKGUuZy4sIGlzb2xhdGVkKS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIGludCBscnVfZ2VuX2Zyb21fZmxhZ3ModW5zaWduZWQgbG9uZyBmbGFncykKJiM0Mzt7CiYjNDM7CWludCBnZW4gPSAoKGZsYWdzICZhbXA7IExSVV9HRU5fTUFTSykgJmd0OyZndDsgTFJVX0dFTl9QR09GRik7CiYjNDM7CiYjNDM7CUJVSUxEX0JVR19PTihMUlVfR0VOX01BU0sgJmFtcDsgTFJVX1JFRlNfTUFTSyk7CiYjNDM7CWdlbiAtPSAxOwomIzQzOwlWTV9XQVJOX09OX09OQ0UoZ2VuICE9IC0xICZhbXA7JmFtcDsgZ2VuICZndDs9IE1BWF9OUl9HRU5TKTsKJiM0MzsJcmV0dXJuIGdlbjsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogbHJ1X2dlbl9zZXRfZmxhZ3MgLSBTZXQgdGhlIExSVSBnZW5lcmF0aW9uIG51bWJlciB0byBzcGVjaWZpZWQgZm9saW8gZmxhZ3MuCiYjNDM7ICogQGZsYWdzOiBwb2ludGVyIHRvIHRoZSBmb2xpbyBmbGFncwomIzQzOyAqIEBnZW46IGdlbmVyYXRpb24gbnVtYmVyLCBiZXR3ZWVuIDAgYW5kIChNQVhfTlJfR0VOUyAtIDEpLCBpbmNsdXNpdmUuCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGxydV9nZW5fc2V0X2ZsYWdzKHVuc2lnbmVkIGxvbmcgKmZsYWdzLCBpbnQgZ2VuKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tJmd0O2ZsYWdzLmYpOwomIzQzOwlWTV9XQVJOX09OX09OQ0UoZ2VuICZndDs9IE1BWF9OUl9HRU5TIHx8IGdlbiAmbHQ7IDApOwomIzQzOwomIzQzOwkqZmxhZ3MgJmFtcDs9IH5MUlVfR0VOX01BU0s7CiYjNDM7CSpmbGFncyB8PSAoZ2VuICYjNDM7IDFVTCkgJmx0OyZsdDsgTFJVX0dFTl9QR09GRjsKJiM0Mzt9CiAKJiM0MzsvKioKJiM0MzsgKiBscnVfcmVmc19mcm9tX2ZsYWdzIC0gUmV0dXJuIExSVSByZWZlcmVuY2VkIC8gYWNjZXNzIGNvdW50IGZyb20gZm9saW8gZmxhZ3MuCiYjNDM7ICogQGZsYWdzOiBmb2xpbyBmbGFncwomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGxydV9yZWZzX2Zyb21fZmxhZ3ModW5zaWduZWQgbG9uZyBmbGFncykKJiM0Mzt7CiAJaWYgKCEoZmxhZ3MgJmFtcDsgQklUKFBHX3JlZmVyZW5jZWQpKSkKIAkJcmV0dXJuIDA7CiAJLyoKQEAgLTE1NSwxMSAmIzQzOzE5Miw0MCBAQCBzdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfcmVmcyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCXJldHVybiAoKGZsYWdzICZhbXA7IExSVV9SRUZTX01BU0spICZndDsmZ3Q7IExSVV9SRUZTX1BHT0ZGKSAmIzQzOyAxOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfZ2VuKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7LyoqCiYjNDM7ICogbHJ1X3JlZnNfc2V0X2ZsYWdzIC0gU2V0IHRoZSBMUlUgcmVmZXJlbmNlZCAvIGFjY2VzcyBjb3VudCB0byBzcGVjaWZpZWQgZm9saW8gZmxhZ3MuCiYjNDM7ICogQGZsYWdzOiBwb2ludGVyIHRvIHRoZSBmb2xpbyBmbGFncwomIzQzOyAqIEByZWZzOiByZWZlcmVuY2VkIC8gYWNjZXNzIGNvdW50IG51bWJlciwgYmV0d2VlbiAwIGFuZCBMUlVfUkVGU19NQVgsIGluY2x1c2l2ZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbHJ1X3JlZnNfc2V0X2ZsYWdzKHVuc2lnbmVkIGxvbmcgKmZsYWdzLCB1bnNpZ25lZCBpbnQgcmVmcykKJiM0Mzt7CiYjNDM7CVZNX1dBUk5fT05fT05DRShyZWZzICZndDsgTFJVX1JFRlNfTUFYKTsKJiM0MzsJQlVJTERfQlVHX09OKExSVV9SRUZTX01BWCAhPSAoTFJVX1JFRlNfTUFTSyAmZ3Q7Jmd0OyBMUlVfUkVGU19QR09GRikgJiM0MzsgMSk7CiYjNDM7CiYjNDM7CSpmbGFncyAmYW1wOz0gfkxSVV9SRUZTX0ZMQUdTOwomIzQzOwlpZiAoIXJlZnMpCiYjNDM7CQlyZXR1cm47CiYjNDM7CSpmbGFncyB8PSAoQklUKFBHX3JlZmVyZW5jZWQpIHwgKChyZWZzIC0gMVVMKSAmbHQ7Jmx0OyBMUlVfUkVGU19QR09GRikpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfcmVmcyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJcmV0dXJuIGxydV9yZWZzX2Zyb21fZmxhZ3MoUkVBRF9PTkNFKCpjb25zdF9mb2xpb19mbGFncyhmb2xpbywgMCkpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3NldF9scnVfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgcmVmcykKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLSZndDtmbGFncy5mKTsKJiM0MzsJdW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTsKIAotCXJldHVybiAoKGZsYWdzICZhbXA7IExSVV9HRU5fTUFTSykgJmd0OyZndDsgTFJVX0dFTl9QR09GRikgLSAxOwomIzQzOwlkbyB7CiYjNDM7CQluZXdfZmxhZ3MgPSBvbGRfZmxhZ3M7CiYjNDM7CQlscnVfcmVmc19zZXRfZmxhZ3MoJmFtcDtuZXdfZmxhZ3MsIHJlZnMpOwomIzQzOwl9IHdoaWxlICghdHJ5X2NtcHhjaGcoZm9saW9fZmxhZ3MoZm9saW8sIDApLCAmYW1wO29sZF9mbGFncywgbmV3X2ZsYWdzKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9nZW4oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKJiM0Mzt7CiYjNDM7CXJldHVybiBscnVfZ2VuX2Zyb21fZmxhZ3MoUkVBRF9PTkNFKCpjb25zdF9mb2xpb19mbGFncyhmb2xpbywgMCkpKTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIGxydV9nZW5faXNfYWN0aXZlKGNvbnN0IHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IGdlbikKQEAgLTI3MCw3ICYjNDM7MzM2LDcgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fYWRkX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywKIAlnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKHNlcSk7CiAJZmxhZ3MgPSAoZ2VuICYjNDM7IDFVTCkgJmx0OyZsdDsgTFJVX0dFTl9QR09GRjsKIAkvKiBzZWUgdGhlIGNvbW1lbnQgb24gTUlOX05SX0dFTlMgYWJvdXQgUEdfYWN0aXZlICovCi0Jc2V0X21hc2tfYml0cygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCBMUlVfR0VOX01BU0sgfCBCSVQoUEdfYWN0aXZlKSwgZmxhZ3MpOwomIzQzOwlzZXRfbWFza19iaXRzKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgTFJVX0dFTl9NQVNLIHwgQklUKFBHX2FjdGl2ZSksIGZsYWdzKTsKIAogCWxydV9nZW5fdXBkYXRlX3NpemUobHJ1dmVjLCBmb2xpbywgLTEsIGdlbik7CiAJLyogZm9yIGZvbGlvX3JvdGF0ZV9yZWNsYWltYWJsZSgpICovCkBAIC0yOTUsNyAmIzQzOzM2MSw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2RlbF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sCiAKIAkvKiBmb3IgZm9saW9fbWlncmF0ZV9mbGFncygpICovCiAJZmxhZ3MgPSAhcmVjbGFpbWluZyAmYW1wOyZhbXA7IGxydV9nZW5faXNfYWN0aXZlKGxydXZlYywgZ2VuKSA/IEJJVChQR19hY3RpdmUpIDogMDsKLQlmbGFncyA9IHNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX0dFTl9NQVNLLCBmbGFncyk7CiYjNDM7CWZsYWdzID0gc2V0X21hc2tfYml0cyhmb2xpb19mbGFncyhmb2xpbywgMCksIExSVV9HRU5fTUFTSywgZmxhZ3MpOwogCWdlbiA9ICgoZmxhZ3MgJmFtcDsgTFJVX0dFTl9NQVNLKSAmZ3Q7Jmd0OyBMUlVfR0VOX1BHT0ZGKSAtIDE7CiAKIAlscnVfZ2VuX3VwZGF0ZV9zaXplKGxydXZlYywgZm9saW8sIGdlbiwgLTEpOwpAQCAtMzA0LDExICYjNDM7MzcwLDE5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2RlbF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19taWdyYXRlX3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKQomIzQzOy8qKgomIzQzOyAqIGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnMgLSBjb3B5IHRoZSByZWZlcmVuY2Ugc3RhdGUgdG8gYSBuZXcgZm9saW8KJiM0MzsgKiBAbmV3OiB0aGUgZGVzdGluYXRpb24gZm9saW8KJiM0MzsgKiBAb2xkOiB0aGUgc291cmNlIGZvbGlvCiYjNDM7ICoKJiM0MzsgKiBUcmFuc2ZlciB0aGUgcmVmZXJlbmNlIHN0YXRlIHRvIEBuZXcgZHVyaW5nIG1pZ3JhdGlvbjogdGhlIE1HTFJVCiYjNDM7ICogcmVmcyBjb3VudCwgaW5jbHVkaW5nIFBHX3JlZmVyZW5jZWQsIG9yIGp1c3QgUEdfcmVmZXJlbmNlZCBmb3IgdGhlCiYjNDM7ICogYWN0aXZlL2luYWN0aXZlIExSVS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fbWlncmF0ZV9scnVfcmVmcyhzdHJ1Y3QgZm9saW8gKm5ldywgY29uc3Qgc3RydWN0IGZvbGlvICpvbGQpCiB7Ci0JdW5zaWduZWQgbG9uZyByZWZzID0gUkVBRF9PTkNFKG9sZC0mZ3Q7ZmxhZ3MuZikgJmFtcDsgTFJVX1JFRlNfTUFTSzsKLQotCXNldF9tYXNrX2JpdHMoJmFtcDtuZXctJmd0O2ZsYWdzLmYsIExSVV9SRUZTX01BU0ssIHJlZnMpOwomIzQzOwlCVUlMRF9CVUdfT04oTFJVX1JFRlNfTUFTSyAmYW1wOyBCSVQoUEdfcmVmZXJlbmNlZCkpOwomIzQzOwlmb2xpb19zZXRfbHJ1X3JlZnMobmV3LCBmb2xpb19scnVfcmVmcyhvbGQpKTsKIH0KICNlbHNlIC8qICFDT05GSUdfTFJVX0dFTiAqLwogCkBAIC0zMzcsOSAmIzQzOzQxMSwxMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9kZWxfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCXJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfcmVmcyhzdHJ1Y3QgZm9saW8gKm5ldywgY29uc3Qgc3RydWN0IGZvbGlvICpvbGQpCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKQogewotCiYjNDM7CWlmIChmb2xpb190ZXN0X3JlZmVyZW5jZWQob2xkKSkKJiM0MzsJCWZvbGlvX3NldF9yZWZlcmVuY2VkKG5ldyk7CiB9CiAjZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaCBiL2luY2x1ZGUvbGludXgvbW16b25lLmgKaW5kZXggOTRmOWMzZmY1NDE2MC4uOWIyN2NmNTNiZGJjNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oCkBAIC00OTIsMTEgJiM0Mzs0OTIsMTQgQEAgZW51bSBscnV2ZWNfZmxhZ3MgewogICogZm9saW8tJmd0O2ZsYWdzLCBtYXNrZWQgYnkgTFJVX1JFRlNfTUFTSy4KICAqLwogI2RlZmluZSBNQVhfTlJfVElFUlMJCTRVCiYjNDM7I2RlZmluZSBMUlVfVElFUl9NSU4JCTBVCiYjNDM7I2RlZmluZSBMUlVfVElFUl9NQVgJCShNQVhfTlJfVElFUlMgLSAxKQogCiAjaWZuZGVmIF9fR0VORVJBVElOR19CT1VORFNfSAogCiAjZGVmaW5lIExSVV9HRU5fTUFTSwkJKChCSVQoTFJVX0dFTl9XSURUSCkgLSAxKSAmbHQ7Jmx0OyBMUlVfR0VOX1BHT0ZGKQogI2RlZmluZSBMUlVfUkVGU19NQVNLCQkoKEJJVChMUlVfUkVGU19XSURUSCkgLSAxKSAmbHQ7Jmx0OyBMUlVfUkVGU19QR09GRikKJiM0MzsjZGVmaW5lIExSVV9SRUZTX01BWAkJQklUKExSVV9SRUZTX1dJRFRIKQogCiAvKgogICogRm9yIGZvbGlvcyBhY2Nlc3NlZCBtdWx0aXBsZSB0aW1lcyB0aHJvdWdoIGZpbGUgZGVzY3JpcHRvcnMsCmRpZmYgLS1naXQgYS9tbS9mb2xpby5jIGIvbW0vZm9saW8uYwppbmRleCBjMDJkY2VhOWMwM2MyLi5hOTMyMDU5MDU3YWMxIDEwMDY0NAotLS0gYS9tbS9mb2xpby5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2ZvbGlvLmMKQEAgLTM1MywyNiAmIzQzOzM1MywyOCBAQCBzdGF0aWMgdm9pZCBfX2xydV9jYWNoZV9hY3RpdmF0ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCiBzdGF0aWMgdm9pZCBscnVfZ2VuX2luY19yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7Ci0JdW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRShmb2xpby0mZ3Q7ZmxhZ3MuZik7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7CiYjNDM7CWludCByZWZzOwogCiAJaWYgKGZvbGlvX3Rlc3RfdW5ldmljdGFibGUoZm9saW8pKQogCQlyZXR1cm47CiAKIAkvKiBzZWUgdGhlIGNvbW1lbnQgb24gTFJVX1JFRlNfRkxBR1MgKi8KLQlpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykpIHsKLQkJc2V0X21hc2tfYml0cygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCBMUlVfUkVGU19NQVNLLCBCSVQoUEdfcmVmZXJlbmNlZCkpOwomIzQzOwlpZiAoIWZvbGlvX2xydV9yZWZzKGZvbGlvKSkgewomIzQzOwkJZm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAxKTsKIAkJcmV0dXJuOwogCX0KIAogCWRvIHsKLQkJaWYgKChvbGRfZmxhZ3MgJmFtcDsgTFJVX1JFRlNfTUFTSykgPT0gTFJVX1JFRlNfTUFTSykgewomIzQzOwkJbmV3X2ZsYWdzID0gb2xkX2ZsYWdzOwomIzQzOwkJcmVmcyA9IGxydV9yZWZzX2Zyb21fZmxhZ3Mob2xkX2ZsYWdzKTsKJiM0MzsJCWlmIChyZWZzID09IExSVV9SRUZTX01BWCkgewogCQkJaWYgKCFmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pKQogCQkJCWZvbGlvX3NldF93b3JraW5nc2V0KGZvbGlvKTsKIAkJCXJldHVybjsKIAkJfQotCi0JCW5ld19mbGFncyA9IG9sZF9mbGFncyAmIzQzOyBCSVQoTFJVX1JFRlNfUEdPRkYpOwotCX0gd2hpbGUgKCF0cnlfY21weGNoZygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCAmYW1wO29sZF9mbGFncywgbmV3X2ZsYWdzKSk7CiYjNDM7CQlscnVfcmVmc19zZXRfZmxhZ3MoJmFtcDtuZXdfZmxhZ3MsIHJlZnMgJiM0MzsgMSk7CiYjNDM7CX0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksICZhbXA7b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTsKIH0KIAogc3RhdGljIGJvb2wgbHJ1X2dlbl9jbGVhcl9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pCkBAIC0zODQsNyAmIzQzOzM4Niw4IEBAIHN0YXRpYyBib29sIGxydV9nZW5fY2xlYXJfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCWlmIChnZW4gJmx0OyAwKQogCQlyZXR1cm4gdHJ1ZTsKIAotCXNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MgfCBCSVQoUEdfd29ya2luZ3NldCksIDApOwomIzQzOwlmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApOwomIzQzOwlmb2xpb19jbGVhcl93b3JraW5nc2V0KGZvbGlvKTsKIAogCXJjdV9yZWFkX2xvY2soKTsKIAlzZXEgPSBSRUFEX09OQ0UoZm9saW9fbHJ1dmVjKGZvbGlvKS0mZ3Q7bHJ1Z2VuLm1pbl9zZXFbdHlwZV0pOwpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jCmluZGV4IDExYjg1ZjRiNjgyOGIuLmE3NTcyZGVkNTZjOWQgMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLmMKQEAgLTE1MjksMjggJiM0MzsxNTI5LDEyIEBAIHZvaWQgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBlbnVtIGxydV9saXN0IGxydSwKIAkJCQlpbnQgemlkLCBsb25nIG5yX3BhZ2VzKQogewogCXN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICptejsKLQl1bnNpZ25lZCBsb25nICpscnVfc2l6ZTsKLQlsb25nIHNpemU7CiAKIAlpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKQogCQlyZXR1cm47CiAKIAlteiA9IGNvbnRhaW5lcl9vZihscnV2ZWMsIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlLCBscnV2ZWMpOwotCWxydV9zaXplID0gJmFtcDttei0mZ3Q7bHJ1X3pvbmVfc2l6ZVt6aWRdW2xydV07Ci0KLQlpZiAobnJfcGFnZXMgJmx0OyAwKQotCQkqbHJ1X3NpemUgJiM0Mzs9IG5yX3BhZ2VzOwotCi0Jc2l6ZSA9ICpscnVfc2l6ZTsKLQlpZiAoV0FSTl9PTkNFKHNpemUgJmx0OyAwLAotCQkmIzM0OyVzKCVwLCAlZCwgJWxkKTogbHJ1X3NpemUgJWxkXG4mIzM0OywKLQkJX19mdW5jX18sIGxydXZlYywgbHJ1LCBucl9wYWdlcywgc2l6ZSkpIHsKLQkJVk1fQlVHX09OKDEpOwotCQkqbHJ1X3NpemUgPSAwOwotCX0KLQotCWlmIChucl9wYWdlcyAmZ3Q7IDApCi0JCSpscnVfc2l6ZSAmIzQzOz0gbnJfcGFnZXM7CiYjNDM7CWF0b21pY19sb25nX2FkZChucl9wYWdlcywgJmFtcDttei0mZ3Q7bHJ1X3pvbmVfc2l6ZVt6aWRdW2xydV0pOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL21tL21pZ3JhdGUuYyBiL21tL21pZ3JhdGUuYwppbmRleCAxNWI0NTgzMmJjZmE3Li5hMzY5ZDBjOTVjMzg2IDEwMDY0NAotLS0gYS9tbS9taWdyYXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWlncmF0ZS5jCkBAIC03NzYsOCAmIzQzOzc3Niw5IEBAIHZvaWQgZm9saW9fbWlncmF0ZV9mbGFncyhzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewogCWludCBjcHVwaWQ7CiAKLQlpZiAoZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSkKLQkJZm9saW9fc2V0X3JlZmVyZW5jZWQobmV3Zm9saW8pOwomIzQzOwkvKiBDb3B5IHRoZSByZWZlcmVuY2Ugc3RhdGUsIGluY2x1ZGluZyBQR19yZWZlcmVuY2VkICovCiYjNDM7CWZvbGlvX21pZ3JhdGVfbHJ1X3JlZnMobmV3Zm9saW8sIGZvbGlvKTsKJiM0MzsKIAlpZiAoZm9saW9fdGVzdF91cHRvZGF0ZShmb2xpbykpCiAJCWZvbGlvX21hcmtfdXB0b2RhdGUobmV3Zm9saW8pOwogCWlmIChmb2xpb190ZXN0X2NsZWFyX2FjdGl2ZShmb2xpbykpIHsKQEAgLTgwNyw3ICYjNDM7ODA4LDYgQEAgdm9pZCBmb2xpb19taWdyYXRlX2ZsYWdzKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJaWYgKGZvbGlvX3Rlc3RfaWRsZShmb2xpbykpCiAJCWZvbGlvX3NldF9pZGxlKG5ld2ZvbGlvKTsKIAotCWZvbGlvX21pZ3JhdGVfcmVmcyhuZXdmb2xpbywgZm9saW8pOwogCS8qCiAJICogQ29weSBOVU1BIGluZm9ybWF0aW9uIHRvIHRoZSBuZXcgcGFnZSwgdG8gcHJldmVudCBvdmVyLWVhZ2VyCiAJICogZnV0dXJlIG1pZ3JhdGlvbnMgb2YgdGhpcyBzYW1lIHBhZ2UuCmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IDczYTgxYjRhM2UxNjQuLjZmZGE5NDhhZWNmMmMgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jCkBAIC04NDMsMTkgJiM0Mzs4NDMsMjIgQEAgc3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKQogCWlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSAmYW1wOyZhbXA7ICFmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pKSB7CiAJCS8qIEFjdGl2YXRlIGZpbGUtYmFja2VkIGV4ZWN1dGFibGUgZm9saW9zIGFmdGVyIGZpcnN0IHVzYWdlLiAqLwogCQlpZiAoaXNfZXhlY19maWxlX2ZvbGlvKGZvbGlvLCB2bWFfZmxhZ3MpKSB7Ci0JCQlzZXRfbWFza19iaXRzKCZhbXA7Zm9saW8tJmd0O2ZsYWdzLmYsIExSVV9SRUZTX0ZMQUdTLCBCSVQoUEdfd29ya2luZ3NldCkpOwomIzQzOwkJCWZvbGlvX3NldF93b3JraW5nc2V0KGZvbGlvKTsKJiM0MzsJCQlmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApOwogCQkJcmV0dXJuIHRydWU7CiAJCX0KIAotCQlzZXRfbWFza19iaXRzKCZhbXA7Zm9saW8tJmd0O2ZsYWdzLmYsIExSVV9SRUZTX01BU0ssIEJJVChQR19yZWZlcmVuY2VkKSk7CiYjNDM7CQlmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDEpOwogCQlyZXR1cm4gZmFsc2U7CiAJfQogCiAJLyogUHJvbW90ZSBvbiBzZWNvbmQgYWNjZXNzICovCi0JaWYgKGZvbGlvX2xydV9yZWZzKGZvbGlvKSAmZ3Q7IDEpCi0JCXNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MsIEJJVChQR193b3JraW5nc2V0KSk7Ci0JZWxzZQomIzQzOwlpZiAoZm9saW9fbHJ1X3JlZnMoZm9saW8pICZndDsgMSkgewomIzQzOwkJZm9saW9fc2V0X3dvcmtpbmdzZXQoZm9saW8pOwomIzQzOwkJZm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTsKJiM0MzsJfSBlbHNlIHsKIAkJZm9saW9fbWFya19hY2Nlc3NlZChmb2xpbyk7CiYjNDM7CX0KIAlyZXR1cm4gdHJ1ZTsKIH0KICNlbHNlCkBAIC0zMTk1LDggJiM0MzszMTk4LDggQEAgc3RydWN0IGN0cmxfcG9zIHsKIAlpbnQgZ2FpbjsKIH07CiAKLXN0YXRpYyB2b2lkIHJlYWRfY3RybF9wb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHRpZXIsIGludCBnYWluLAotCQkJICBzdHJ1Y3QgY3RybF9wb3MgKnBvcykKJiM0MztzdGF0aWMgdm9pZCByZWFkX2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCB0aWVyX21pbiwKJiM0MzsJCQkgIGludCB0aWVyX21heCwgaW50IGdhaW4sIHN0cnVjdCBjdHJsX3BvcyAqcG9zKQogewogCWludCBpOwogCXN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSAmYW1wO2xydXZlYy0mZ3Q7bHJ1Z2VuOwpAQCAtMzIwNSw3ICYjNDM7MzIwOCw3IEBAIHN0YXRpYyB2b2lkIHJlYWRfY3RybF9wb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHRpZXIsIGludCBnYWluLAogCXBvcy0mZ3Q7Z2FpbiA9IGdhaW47CiAJcG9zLSZndDtyZWZhdWx0ZWQgPSBwb3MtJmd0O3RvdGFsID0gMDsKIAotCWZvciAoaSA9IHRpZXIgJSBNQVhfTlJfVElFUlM7IGkgJmx0Oz0gbWluKHRpZXIsIE1BWF9OUl9USUVSUyAtIDEpOyBpJiM0MzsmIzQzOykgewomIzQzOwlmb3IgKGkgPSB0aWVyX21pbjsgaSAmbHQ7PSB0aWVyX21heDsgaSYjNDM7JiM0MzspIHsKIAkJcG9zLSZndDtyZWZhdWx0ZWQgJiM0Mzs9IGxydWdlbi0mZ3Q7YXZnX3JlZmF1bHRlZFt0eXBlXVtpXSAmIzQzOwogCQkJCSAgYXRvbWljX2xvbmdfcmVhZCgmYW1wO2xydWdlbi0mZ3Q7cmVmYXVsdGVkW2hpc3RdW3R5cGVdW2ldKTsKIAkJcG9zLSZndDt0b3RhbCAmIzQzOz0gbHJ1Z2VuLSZndDthdmdfdG90YWxbdHlwZV1baV0gJiM0MzsKQEAgLTMyNjYsMTEgJiM0MzszMjY5LDExIEBAIHN0YXRpYyBib29sIHBvc2l0aXZlX2N0cmxfZXJyKHN0cnVjdCBjdHJsX3BvcyAqc3AsIHN0cnVjdCBjdHJsX3BvcyAqcHYpCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKiBwcm9tb3RlIHBhZ2VzIGFjY2Vzc2VkIHRocm91Z2ggcGFnZSB0YWJsZXMgKi8KLXN0YXRpYyBpbnQgZm9saW9fdXBkYXRlX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgZ2VuLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKQomIzQzO3N0YXRpYyBpbnQgZm9saW9fdXBkYXRlX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbmV3X2dlbiwgaW50ICppc19maWxlLAomIzQzOwkJCSAgICBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKQogewotCXVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tJmd0O2ZsYWdzLmYpOwotCi0JVk1fV0FSTl9PTl9PTkNFKGdlbiAmZ3Q7PSBNQVhfTlJfR0VOUyk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7CiYjNDM7CWludCBvbGRfZ2VuOwogCiAJLyoKIAkgKiBTZWUgdGhlIGNvbW1lbnQgb24gTFJVX1JFRlNfRkxBR1MsIGFuZCBhY3RpdmF0ZSBmaWxlLWJhY2tlZApAQCAtMzI3OSwyMCAmIzQzOzMyODIsMjUgQEAgc3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBnZW4sIGNvbnN0IHZtYV9mbGFnc190ICp2bWEKIAkgKi8KIAlpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykgJmFtcDsmYW1wOyAhZm9saW9fdGVzdF93b3JraW5nc2V0KGZvbGlvKSAmYW1wOyZhbXA7CiAJICAgICFpc19leGVjX2ZpbGVfZm9saW8oZm9saW8sIHZtYV9mbGFncykpIHsKLQkJc2V0X21hc2tfYml0cygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCBMUlVfUkVGU19NQVNLLCBCSVQoUEdfcmVmZXJlbmNlZCkpOwomIzQzOwkJZm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAxKTsKIAkJcmV0dXJuIC0xOwogCX0KIAogCWRvIHsKJiM0MzsJCW9sZF9nZW4gPSBscnVfZ2VuX2Zyb21fZmxhZ3Mob2xkX2ZsYWdzKTsKJiM0MzsJCW5ld19mbGFncyA9IG9sZF9mbGFnczsKJiM0MzsKIAkJLyogbHJ1X2dlbl9kZWxfZm9saW8oKSBoYXMgaXNvbGF0ZWQgdGhpcyBwYWdlPyAqLwotCQlpZiAoIShvbGRfZmxhZ3MgJmFtcDsgTFJVX0dFTl9NQVNLKSkKLQkJCXJldHVybiAtMTsKJiM0MzsJCWlmIChvbGRfZ2VuICZsdDsgMCkKJiM0MzsJCQlicmVhazsKIAotCQluZXdfZmxhZ3MgPSBvbGRfZmxhZ3MgJmFtcDsgfihMUlVfR0VOX01BU0sgfCBMUlVfUkVGU19GTEFHUyk7Ci0JCW5ld19mbGFncyB8PSAoKGdlbiAmIzQzOyAxVUwpICZsdDsmbHQ7IExSVV9HRU5fUEdPRkYpIHwgQklUKFBHX3dvcmtpbmdzZXQpOwotCX0gd2hpbGUgKCF0cnlfY21weGNoZygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCAmYW1wO29sZF9mbGFncywgbmV3X2ZsYWdzKSk7CiYjNDM7CQlscnVfZ2VuX3NldF9mbGFncygmYW1wO25ld19mbGFncywgbmV3X2dlbik7CiYjNDM7CQlscnVfcmVmc19zZXRfZmxhZ3MoJmFtcDtuZXdfZmxhZ3MsIDApOwomIzQzOwkJbmV3X2ZsYWdzIHw9IEJJVChQR193b3JraW5nc2V0KTsKJiM0MzsJfSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgJmFtcDtvbGRfZmxhZ3MsIG5ld19mbGFncykpOwogCi0JcmV0dXJuICgob2xkX2ZsYWdzICZhbXA7IExSVV9HRU5fTUFTSykgJmd0OyZndDsgTFJVX0dFTl9QR09GRikgLSAxOwomIzQzOwkqaXNfZmlsZSA9IGZvbGlvX2ZsYWdzX2lzX2ZpbGVfbHJ1KCZhbXA7b2xkX2ZsYWdzKTsKJiM0MzsJcmV0dXJuIG9sZF9nZW47CiB9CiAKIC8qIHByb3RlY3QgcGFnZXMgYWNjZXNzZWQgbXVsdGlwbGUgdGltZXMgdGhyb3VnaCBmaWxlIGRlc2NyaXB0b3JzICovCkBAIC0zMzAxLDIxICYjNDM7MzMwOSwyMCBAQCBzdGF0aWMgaW50IGZvbGlvX2luY19nZW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCWludCB0eXBlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pOwogCXN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSAmYW1wO2xydXZlYy0mZ3Q7bHJ1Z2VuOwogCWludCBuZXdfZ2VuLCBvbGRfZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tJmd0O21pbl9zZXFbdHlwZV0pOwotCXVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tJmd0O2ZsYWdzLmYpOwotCi0JVk1fV0FSTl9PTl9PTkNFX0ZPTElPKCEob2xkX2ZsYWdzICZhbXA7IExSVV9HRU5fTUFTSyksIGZvbGlvKTsKJiM0MzsJdW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTsKIAogCWRvIHsKLQkJbmV3X2dlbiA9ICgob2xkX2ZsYWdzICZhbXA7IExSVV9HRU5fTUFTSykgJmd0OyZndDsgTFJVX0dFTl9QR09GRikgLSAxOwomIzQzOwkJbmV3X2dlbiA9IGxydV9nZW5fZnJvbV9mbGFncyhvbGRfZmxhZ3MpOwomIzQzOwogCQkvKiBmb2xpb191cGRhdGVfZ2VuKCkgaGFzIHByb21vdGVkIHRoaXMgcGFnZT8gKi8KIAkJaWYgKG5ld19nZW4gJmd0Oz0gMCAmYW1wOyZhbXA7IG5ld19nZW4gIT0gb2xkX2dlbikKIAkJCXJldHVybiBuZXdfZ2VuOwogCiYjNDM7CQluZXdfZmxhZ3MgPSBvbGRfZmxhZ3M7CiAJCW5ld19nZW4gPSAob2xkX2dlbiAmIzQzOyAxKSAlIE1BWF9OUl9HRU5TOwotCi0JCW5ld19mbGFncyA9IG9sZF9mbGFncyAmYW1wOyB+KExSVV9HRU5fTUFTSyB8IExSVV9SRUZTX0ZMQUdTKTsKLQkJbmV3X2ZsYWdzIHw9IChuZXdfZ2VuICYjNDM7IDFVTCkgJmx0OyZsdDsgTFJVX0dFTl9QR09GRjsKLQl9IHdoaWxlICghdHJ5X2NtcHhjaGcoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgJmFtcDtvbGRfZmxhZ3MsIG5ld19mbGFncykpOwomIzQzOwkJbHJ1X2dlbl9zZXRfZmxhZ3MoJmFtcDtuZXdfZmxhZ3MsIG5ld19nZW4pOwomIzQzOwkJbHJ1X3JlZnNfc2V0X2ZsYWdzKCZhbXA7bmV3X2ZsYWdzLCAwKTsKJiM0MzsJfSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgJmFtcDtvbGRfZmxhZ3MsIG5ld19mbGFncykpOwogCiAJbHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTsKIApAQCAtMzMyMyw5ICYjNDM7MzMzMCw4IEBAIHN0YXRpYyBpbnQgZm9saW9faW5jX2dlbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8pCiB9CiAKIHN0YXRpYyB2b2lkIHVwZGF0ZV9iYXRjaF9zaXplKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCBmb2xpbyAqZm9saW8sCi0JCQkgICAgICBpbnQgb2xkX2dlbiwgaW50IG5ld19nZW4pCiYjNDM7CQkJICAgICAgaW50IG9sZF9nZW4sIGludCBuZXdfZ2VuLCBpbnQgdHlwZSkKIHsKLQlpbnQgdHlwZSA9IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTsKIAlpbnQgem9uZSA9IGZvbGlvX3pvbmVudW0oZm9saW8pOwogCWludCBkZWx0YSA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsKIApAQCAtMzUxMiwyMiAmIzQzOzM1MTgsMjQgQEAgc3RhdGljIGJvb2wgc3VpdGFibGVfdG9fc2NhbihpbnQgdG90YWwsIGludCB5b3VuZykKIH0KIAogc3RhdGljIHZvaWQgd2Fsa191cGRhdGVfZm9saW8oc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JCXN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuZXdfZ2VuLCBib29sIGRpcnR5KQomIzQzOwkJc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIGRpcnR5KQogewotCWludCBvbGRfZ2VuOwomIzQzOwlpbnQgbmV3X2dlbiwgb2xkX2dlbiwgZmlsZTsKIAogCWlmICghZm9saW8pCiAJCXJldHVybjsKIAomIzQzOwluZXdfZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShSRUFEX09OQ0UobHJ1dmVjLSZndDtscnVnZW4ubWF4X3NlcSkpOwomIzQzOwogCWlmIChkaXJ0eSAmYW1wOyZhbXA7ICFmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSAmYW1wOyZhbXA7CiAJICAgICEoZm9saW9fdGVzdF9hbm9uKGZvbGlvKSAmYW1wOyZhbXA7IGZvbGlvX3Rlc3Rfc3dhcGJhY2tlZChmb2xpbykgJmFtcDsmYW1wOwogCSAgICAgICFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpKQogCQlmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTsKIAogCWlmICh3YWxrKSB7Ci0JCW9sZF9nZW4gPSBmb2xpb191cGRhdGVfZ2VuKGZvbGlvLCBuZXdfZ2VuLCAmYW1wO3ZtYS0mZ3Q7ZmxhZ3MpOwomIzQzOwkJb2xkX2dlbiA9IGZvbGlvX3VwZGF0ZV9nZW4oZm9saW8sIG5ld19nZW4sICZhbXA7ZmlsZSwgJmFtcDt2bWEtJmd0O2ZsYWdzKTsKIAkJaWYgKG9sZF9nZW4gJmd0Oz0gMCAmYW1wOyZhbXA7IG9sZF9nZW4gIT0gbmV3X2dlbikKLQkJCXVwZGF0ZV9iYXRjaF9zaXplKHdhbGssIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTsKJiM0MzsJCQl1cGRhdGVfYmF0Y2hfc2l6ZSh3YWxrLCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbiwgZmlsZSk7CiAJfSBlbHNlIGlmIChscnVfZ2VuX3NldF9yZWZzKGZvbGlvLCAmYW1wO3ZtYS0mZ3Q7ZmxhZ3MpKSB7CiAJCW9sZF9nZW4gPSBmb2xpb19scnVfZ2VuKGZvbGlvKTsKIAkJaWYgKG9sZF9nZW4gJmd0Oz0gMCAmYW1wOyZhbXA7IG9sZF9nZW4gIT0gbmV3X2dlbikKQEAgLTM1NDksOCAmIzQzOzM1NTcsNiBAQCBzdGF0aWMgYm9vbCB3YWxrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwKIAlzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrID0gYXJncy0mZ3Q7cHJpdmF0ZTsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cod2Fsay0mZ3Q7bHJ1dmVjKTsKIAlzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KHdhbGstJmd0O2xydXZlYyk7Ci0JREVGSU5FX01BWF9TRVEod2Fsay0mZ3Q7bHJ1dmVjKTsKLQlpbnQgZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShtYXhfc2VxKTsKIAl1bnNpZ25lZCBpbnQgbnI7CiAJcG1kX3QgcG1kdmFsOwogCkBAIC0zNjAxLDcgJiM0MzszNjA3LDcgQEAgc3RhdGljIGJvb2wgd2Fsa19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCiAJCQljb250aW51ZTsKIAogCQlpZiAobGFzdCAhPSBmb2xpbykgewotCQkJd2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy0mZ3Q7dm1hLCBsYXN0LCBnZW4sIGRpcnR5KTsKJiM0MzsJCQl3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBhcmdzLSZndDt2bWEsIHdhbGstJmd0O2xydXZlYywgbGFzdCwgZGlydHkpOwogCiAJCQlsYXN0ID0gZm9saW87CiAJCQlkaXJ0eSA9IGZhbHNlOwpAQCAtMzYxNCw3ICYjNDM7MzYyMCw3IEBAIHN0YXRpYyBib29sIHdhbGtfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLAogCQl3YWxrLSZndDttbV9zdGF0c1tNTV9MRUFGX1lPVU5HXSAmIzQzOz0gbnI7CiAJfQogCi0Jd2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy0mZ3Q7dm1hLCBsYXN0LCBnZW4sIGRpcnR5KTsKJiM0MzsJd2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy0mZ3Q7dm1hLCB3YWxrLSZndDtscnV2ZWMsIGxhc3QsIGRpcnR5KTsKIAlsYXN0ID0gTlVMTDsKIAogCWlmIChpICZsdDsgUFRSU19QRVJfUFRFICZhbXA7JmFtcDsgZ2V0X25leHRfdm1hKFBNRF9NQVNLLCBQQUdFX1NJWkUsIGFyZ3MsICZhbXA7c3RhcnQsICZhbXA7ZW5kKSkKQEAgLTM2MzcsOCAmIzQzOzM2NDMsNiBAQCBzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYQogCXN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGsgPSBhcmdzLSZndDtwcml2YXRlOwogCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyh3YWxrLSZndDtscnV2ZWMpOwogCXN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQod2Fsay0mZ3Q7bHJ1dmVjKTsKLQlERUZJTkVfTUFYX1NFUSh3YWxrLSZndDtscnV2ZWMpOwotCWludCBnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpOwogCiAJVk1fV0FSTl9PTl9PTkNFKHB1ZF9sZWFmKCpwdWQpKTsKIApAQCAtMzY5Miw3ICYjNDM7MzY5Niw3IEBAIHN0YXRpYyB2b2lkIHdhbGtfcG1kX3JhbmdlX2xvY2tlZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCB2bV9hcmVhCiAJCQlnb3RvIG5leHQ7CiAKIAkJaWYgKGxhc3QgIT0gZm9saW8pIHsKLQkJCXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7CiYjNDM7CQkJd2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCB3YWxrLSZndDtscnV2ZWMsIGxhc3QsIGRpcnR5KTsKIAogCQkJbGFzdCA9IGZvbGlvOwogCQkJZGlydHkgPSBmYWxzZTsKQEAgLTM3MDYsNyAmIzQzOzM3MTAsNyBAQCBzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYQogCQlpID0gaSAmZ3Q7IE1JTl9MUlVfQkFUQ0ggPyAwIDogZmluZF9uZXh0X2JpdChiaXRtYXAsIE1JTl9MUlVfQkFUQ0gsIGkpICYjNDM7IDE7CiAJfSB3aGlsZSAoaSAmbHQ7PSBNSU5fTFJVX0JBVENIKTsKIAotCXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7CiYjNDM7CXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgd2Fsay0mZ3Q7bHJ1dmVjLCBsYXN0LCBkaXJ0eSk7CiAKIAlsYXp5X21tdV9tb2RlX2Rpc2FibGUoKTsKIAlzcGluX3VubG9jayhwdGwpOwpAQCAtNDI3MCw4ICYjNDM7NDI3NCw2IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucikKIAlzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gZm9saW9fcGdkYXQoZm9saW8pOwogCXN0cnVjdCBscnV2ZWMgKmxydXZlYzsKIAlzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGU7Ci0JdW5zaWduZWQgbG9uZyBtYXhfc2VxOwotCWludCBnZW47CiAKIAlsb2NrZGVwX2Fzc2VydF9oZWxkKHB2bXctJmd0O3B0bCk7CiAJVk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3RfbHJ1KGZvbGlvKSwgZm9saW8pOwpAQCAtNDMwOCw4ICYjNDM7NDMxMCw2IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucikKIAogCW1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhmb2xpbyk7CiAJbHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIHBnZGF0KTsKLQltYXhfc2VxID0gUkVBRF9PTkNFKChscnV2ZWMpLSZndDtscnVnZW4ubWF4X3NlcSk7Ci0JZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShtYXhfc2VxKTsKIAltbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpOwogCiAJbGF6eV9tbXVfbW9kZV9lbmFibGUoKTsKQEAgLTQzNDEsNyAmIzQzOzQzNDEsNyBAQCBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpCiAJCQljb250aW51ZTsKIAogCQlpZiAobGFzdCAhPSBmb2xpbykgewotCQkJd2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTsKJiM0MzsJCQl3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxydXZlYywgbGFzdCwgZGlydHkpOwogCiAJCQlsYXN0ID0gZm9saW87CiAJCQlkaXJ0eSA9IGZhbHNlOwpAQCAtNDM1MywxMyAmIzQzOzQzNTMsMTQgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKQogCQl5b3VuZyAmIzQzOz0gbnI7CiAJfQogCi0Jd2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTsKJiM0MzsJd2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBscnV2ZWMsIGxhc3QsIGRpcnR5KTsKIAogCWxhenlfbW11X21vZGVfZGlzYWJsZSgpOwogCiAJLyogZmVlZGJhY2sgZnJvbSBybWFwIHdhbGtlcnMgdG8gcGFnZSB0YWJsZSB3YWxrZXJzICovCiAJaWYgKG1tX3N0YXRlICZhbXA7JmFtcDsgc3VpdGFibGVfdG9fc2NhbihpLCB5b3VuZykpCi0JCXVwZGF0ZV9ibG9vbV9maWx0ZXIobW1fc3RhdGUsIG1heF9zZXEsIHB2bXctJmd0O3BtZCk7CiYjNDM7CQl1cGRhdGVfYmxvb21fZmlsdGVyKG1tX3N0YXRlLCBSRUFEX09OQ0UobHJ1dmVjLSZndDtscnVnZW4ubWF4X3NlcSksCiYjNDM7CQkJCSAgICBwdm13LSZndDtwbWQpOwogCiAJbWVtX2Nncm91cF9wdXQobWVtY2cpOwogCkBAIC00NzE2LDcgJiM0Mzs0NzE3LDcgQEAgc3RhdGljIGJvb2wgaXNvbGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzY2EKIAogCS8qIHNlZSB0aGUgY29tbWVudCBvbiBMUlVfUkVGU19GTEFHUyAqLwogCWlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSkKLQkJc2V0X21hc2tfYml0cygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCBMUlVfUkVGU19NQVNLLCAwKTsKJiM0MzsJCWZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7CiAKIAlzdWNjZXNzID0gbHJ1X2dlbl9kZWxfZm9saW8obHJ1dmVjLCBmb2xpbywgdHJ1ZSk7CiAJVk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFzdWNjZXNzLCBmb2xpbyk7CkBAIC00ODA5LDkgJiM0Mzs0ODEwLDkgQEAgc3RhdGljIGludCBnZXRfdGllcl9pZHgoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSkKIAkgKiBUaGlzIHZhbHVlIGlzIGNob3NlbiBiZWNhdXNlIGFueSBvdGhlciB0aWVyIHdvdWxkIGhhdmUgYXQgbGVhc3QgdHdpY2UKIAkgKiBhcyBtYW55IHJlZmF1bHRzIGFzIHRoZSBmaXJzdCB0aWVyLgogCSAqLwotCXJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCAwLCAyLCAmYW1wO3NwKTsKLQlmb3IgKHRpZXIgPSAxOyB0aWVyICZsdDsgTUFYX05SX1RJRVJTOyB0aWVyJiM0MzsmIzQzOykgewotCQlyZWFkX2N0cmxfcG9zKGxydXZlYywgdHlwZSwgdGllciwgMywgJmFtcDtwdik7CiYjNDM7CXJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCBMUlVfVElFUl9NSU4sIExSVV9USUVSX01JTiwgMiwgJmFtcDtzcCk7CiYjNDM7CWZvciAodGllciA9IExSVV9USUVSX01JTiAmIzQzOyAxOyB0aWVyICZsdDs9IExSVV9USUVSX01BWDsgdGllciYjNDM7JiM0MzspIHsKJiM0MzsJCXJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCB0aWVyLCB0aWVyLCAzLCAmYW1wO3B2KTsKIAkJaWYgKCFwb3NpdGl2ZV9jdHJsX2VycigmYW1wO3NwLCAmYW1wO3B2KSkKIAkJCWJyZWFrOwogCX0KQEAgLTQ4MzIsOCAmIzQzOzQ4MzMsMTAgQEAgc3RhdGljIGludCBnZXRfdHlwZV90b19zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3MpCiAJICogQ29tcGFyZSB0aGUgc3VtIG9mIGFsbCB0aWVycyBvZiBhbm9uIHdpdGggdGhhdCBvZiBmaWxlIHRvIGRldGVybWluZQogCSAqIHdoaWNoIHR5cGUgdG8gc2Nhbi4KIAkgKi8KLQlyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9BTk9OLCBNQVhfTlJfVElFUlMsIHN3YXBwaW5lc3MsICZhbXA7c3ApOwotCXJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0ZJTEUsIE1BWF9OUl9USUVSUywgTUFYX1NXQVBQSU5FU1MgLSBzd2FwcGluZXNzLCAmYW1wO3B2KTsKJiM0MzsJcmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fQU5PTiwgTFJVX1RJRVJfTUlOLCBMUlVfVElFUl9NQVgsCiYjNDM7CQkgICAgICBzd2FwcGluZXNzLCAmYW1wO3NwKTsKJiM0MzsJcmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fRklMRSwgTFJVX1RJRVJfTUlOLCBMUlVfVElFUl9NQVgsCiYjNDM7CQkgICAgICBNQVhfU1dBUFBJTkVTUyAtIHN3YXBwaW5lc3MsICZhbXA7cHYpOwogCiAJcmV0dXJuIHBvc2l0aXZlX2N0cmxfZXJyKCZhbXA7c3AsICZhbXA7cHYpOwogfQpAQCAtNDkzMiw4ICYjNDM7NDkzNSwxMCBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYywKIAkJfQogCiAJCS8qIGRvbiYjMzk7dCBhZGQgcmVqZWN0ZWQgZm9saW9zIHRvIHRoZSBvbGRlc3QgZ2VuZXJhdGlvbiAqLwotCQlpZiAobHJ1X2dlbl9mb2xpb19zZXEobHJ1dmVjLCBmb2xpbywgZmFsc2UpID09IG1pbl9zZXFbdHlwZV0pCi0JCQlzZXRfbWFza19iaXRzKCZhbXA7Zm9saW8tJmd0O2ZsYWdzLmYsIExSVV9SRUZTX0ZMQUdTLCBCSVQoUEdfYWN0aXZlKSk7CiYjNDM7CQlpZiAobHJ1X2dlbl9mb2xpb19zZXEobHJ1dmVjLCBmb2xpbywgZmFsc2UpID09IG1pbl9zZXFbdHlwZV0pIHsKJiM0MzsJCQlmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApOwomIzQzOwkJCWZvbGlvX3NldF9hY3RpdmUoZm9saW8pOwomIzQzOwkJfQogCX0KIAogCW1vdmVfZm9saW9zX3RvX2xydSgmYW1wO2xpc3QpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxOTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTQwOAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDUzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoOiBNR0xSVSBSZWZhY3RvcmluZyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBpbiBmcm9udCBvZiBtZSwgYW5kIG15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHdoZXRoZXIgaXQgaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdGhhdCB3YXJyYW50IGZ1enppbmcuIEdpdmVuIG15IGV4cGVydGlzZSwgSSBxdWlja2x5IHplcm8gaW4gb24gdGhlIG1vZGlmaWVkIGZpbGVzOiBgaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhgLCBgaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaGAsIGBpbmNsdWRlL2xpbnV4L21tem9uZS5oYCwgYG1tL2ZvbGlvLmNgLCBgbW0vbWVtY29udHJvbC5jYCwgYG1tL21pZ3JhdGUuY2AsIGFuZCBgbW0vdm1zY2FuLmNgLiBUaGUgZmFjdCB0aGF0IGl0IHRvdWNoZXMgc28gbWFueSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFyZWFzIGltbWVkaWF0ZWx5IHJhaXNlcyBhIGZsYWcuIEl0JiMzOTtzIGNsZWFybHkgdGllZCB0byBMUlUgZ2VuZXJhdGlvbiAoTUdMUlUpLCBhbmQgbWVtY29udHJvbC4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBkZXRhaWxzLgoKQWxyaWdodCwgdGhlIGNoYW5nZXMgaW4gYGluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oYCBhcmUgYWJvdXQgYXRvbWljIG9wZXJhdGlvbnM7IGBscnVfem9uZV9zaXplYCBpcyBub3cgYW4gYGF0b21pY19sb25nX3RgIGFuZCBgbWVtX2Nncm91cF9nZXRfem9uZV9scnVfc2l6ZWAgbGV2ZXJhZ2VzIGBhdG9taWNfbG9uZ19yZWFkYC4gU21hcnQgbW92ZSwgdGhhdCYjMzk7cyBsaWtlbHkgZml4aW5nIGEgcmFjZSBjb25kaXRpb24uIFRoZSBjaGFuZ2VzIGluIGBpbmNsdWRlL2xpbnV4L21tX2lubGluZS5oYCBhcmUgaW5saW5lIGZ1bmN0aW9ucyBmb3IgYGZvbGlvX2ZsYWdzX2lzX2ZpbGVfbHJ1YCwgYGxydV9nZW5fZnJvbV9mbGFnc2AsIGBscnVfZ2VuX3NldF9mbGFnc2AsIGBscnVfcmVmc19mcm9tX2ZsYWdzYCwgYGxydV9yZWZzX3NldF9mbGFnc2AsIGBmb2xpb19zZXRfbHJ1X3JlZnNgLCBhbmQgcmVwbGFjaW5nIGBmb2xpb19taWdyYXRlX3JlZnNgIHdpdGggYGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnNgLgoKVGhlIG90aGVyIGZpbGUgY2hhbmdlcywgYG1tL2ZvbGlvLmNgLCBgbW0vbWVtY29udHJvbC5jYCwgYG1tL21pZ3JhdGUuY2AsIGFuZCBgbW0vdm1zY2FuLmNgIGFsbCBzZWVtIHRvIGJlIGFkanVzdGluZyB0byB0aGUgbmV3IGlubGluZSBmdW5jdGlvbnMgYW5kIHRoZSBhdG9taWMgb3BlcmF0aW9ucy4gYGxydV9nZW5faW5jX3JlZnNgIGFuZCBgbHJ1X2dlbl9jbGVhcl9yZWZzYCBhcmUgdXBkYXRlZCwgYW5kIGBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZWAgbm93IHVzZXMgYGF0b21pY19sb25nX2FkZGAuIFRoZSBtaWdyYXRpb24gYW5kIFZNIHNjYW5uaW5nIHVwZGF0ZXMgYXJlIGFsbCBpbnRlcmNvbm5lY3RlZCB3aXRoIHRoZSBMUlUgZ2VuZXJhdGlvbiBhbmQgZmxhZ3MuIFRoZSBgcmVhZF9jdHJsX3Bvc2AgdXBkYXRlIHdpdGggdGhlIGB0aWVyX21pbmAgYW5kIGB0aWVyX21heGAgcGFyYW1ldGVycyBsb29rcyBpbnRlcmVzdGluZywgdG9vLgoKU28sIGluIGVzc2VuY2UsIHRoaXMgaXMgYSByZWZhY3RvcmluZyBlZmZvcnQuIEl0IHNlZW1zIHRvIGJlIGNsZWFuaW5nIHVwIHRoZSBMUlUgZ2VuZXJhdGlvbiBmbGFncyBoYW5kbGluZywgaW1wcm92aW5nIGNvbmN1cnJlbmN5IHRocm91Z2ggYXRvbWljIG9wZXJhdGlvbnMgb24gYGxydV96b25lX3NpemVgLCBhbmQgcG90ZW50aWFsbHkgZml4aW5nIHRoYXQgcmFjZSBjb25kaXRpb24uCgpXYWl0IGEgbWludXRlLi4uIE1HTFJVLCB0aGF0JiMzOTtzIGEgYmlnIGRlYWwuIEdpdmVuIHRoZSBjaGFuZ2VzIHRvIHRoZSBjb3JlIE1NIGxvZ2ljLCB0aGF0IGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRoYXQgbmVlZHMgZnV6emluZy4gTm93LCB3aGF0JiMzOTtzIHRoZSByZWxldmFudCBjb25maWcgb3B0aW9uIGZvciBNR0xSVT8gQWgsIGl0JiMzOTtzIGBDT05GSUdfTFJVX0dFTmAuIEV4Y2VsbGVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxOTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTFJVX0dFTiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTEzOTM9Y29uZmlnIFBURV9NQVJLRVJfVUZGRF9XUFxuLS1cbm1tL0tjb25maWctMTQwMy0jIG11bHRpLWdlbiBMUlUge1xubW0vS2NvbmZpZzoxNDA0OmNvbmZpZyBMUlVfR0VOXG5tbS9LY29uZmlnLTE0MDUtXHRib29sIFwmIzM0O011bHRpLUdlbiBMUlVcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTE0MTItXG5tbS9LY29uZmlnOjE0MTM6Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxubW0vS2NvbmZpZy0xNDE0LVx0Ym9vbCBcJiMzNDtFbmFibGUgYnkgZGVmYXVsdFwmIzM0O1xuLS1cbm1tL0tjb25maWctMTQxOC1cbm1tL0tjb25maWc6MTQxOTpjb25maWcgTFJVX0dFTl9TVEFUU1xubW0vS2NvbmZpZy0xNDIwLVx0Ym9vbCBcJiMzNDtGdWxsIHN0YXRzIGZvciBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTE0MjctXG5tbS9LY29uZmlnOjE0Mjg6Y29uZmlnIExSVV9HRU5fV0FMS1NfTU1VXG5tbS9LY29uZmlnLTE0MjktXHRkZWZfYm9vbCB5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTk6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI3ODgKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipFbmFibGluZyBMUlUgR2VuZXJhdGlvbjogQSBRdWljayBDaGVjayoqCgpSaWdodCwgaXQgc2VlbXMgbGlrZSB3ZSBuZWVkIHRvIGdldCBgTFJVX0dFTmAgYW5kIGBMUlVfR0VOX0VOQUJMRURgIGFjdGl2YXRlZC4gU291bmRzIHByb21pc2luZyBmb3Igc29tZSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMsIG9yIHBlcmhhcHMgbmV3IGZ1bmN0aW9uYWxpdHkgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHJlYWxtLiBCZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhlIGltcGxpY2F0aW9ucywgbGV0IG1lIHF1aWNrbHkgdmVyaWZ5IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhlbXNlbHZlcy4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gY2hlY2sgYG1tL0tjb25maWdgLiBUaGF0JiMzOTtzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGRlZmluaXRpdmUgZG9jdW1lbnRhdGlvbiBhbmQgcGVyaGFwcyBkZXBlbmRlbmNpZXMgZm9yIGBMUlVfR0VOYC4gSSYjMzk7bGwgY29uZmlybSBpdHMgZXhpc3RlbmNlIHRoZXJlLCByZWFkIGFueSBhc3NvY2lhdGVkIGNvbW1lbnRzIGZvciBjb250ZXh0LCBhbmQgbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvYnZpb3VzIGNvbmZsaWN0cyBiZWZvcmUgcHJvY2VlZGluZy4gVGltZSB0byBzZWUgd2hhdCB0aGUga2VybmVsIGNvbmZpZyBoYXMgdG8gc2F5IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE5OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlcGVuZHMgb24uKkxSVV9HRU4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xNDEzPWNvbmZpZyBMUlVfR0VOX0VOQUJMRURcbm1tL0tjb25maWctMTQxNC1cdGJvb2wgXCYjMzQ7RW5hYmxlIGJ5IGRlZmF1bHRcJiMzNDtcbm1tL0tjb25maWc6MTQxNTpcdGRlcGVuZHMgb24gTFJVX0dFTlxubW0vS2NvbmZpZy0xNDE2LVx0aGVscFxuLS1cbm1tL0tjb25maWc9MTQxOT1jb25maWcgTFJVX0dFTl9TVEFUU1xubW0vS2NvbmZpZy0xNDIwLVx0Ym9vbCBcJiMzNDtGdWxsIHN0YXRzIGZvciBkZWJ1Z2dpbmdcJiMzNDtcbm1tL0tjb25maWc6MTQyMTpcdGRlcGVuZHMgb24gTFJVX0dFTlxubW0vS2NvbmZpZy0xNDIyLVx0aGVscFxuLS1cbm1tL0tjb25maWc9MTQyOD1jb25maWcgTFJVX0dFTl9XQUxLU19NTVVcbm1tL0tjb25maWctMTQyOS1cdGRlZl9ib29sIHlcbm1tL0tjb25maWc6MTQzMDpcdGRlcGVuZHMgb24gTFJVX0dFTiBcdTAwMjZcdTAwMjYgQVJDSF9IQVNfSFdfUFRFX1lPVU5HXG5tbS9LY29uZmlnLTE0MzEtIyB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTk6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMyMzcKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgRGVwZW5kZW5jeSBDaGFpbiBmb3IgYExSVV9HRU5gKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhpcy4gSSYjMzk7bSBzdGFydGluZyBieSB0YWtpbmcgYSBsb29rIGF0IGBjb25maWcgTFJVX0dFTmAgYW5kIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzLiBJdCYjMzk7cyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgd2hhdCBvdGhlciBjb21wb25lbnRzIG9yIGZlYXR1cmVzIGhpbmdlIG9uIHRoaXMgdG8gYWNjdXJhdGVseSBhc3Nlc3MgaXRzIGltcGFjdCBhbmQgcG90ZW50aWFsIGNvbmZsaWN0cy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7V2hhdCBkb3duc3RyZWFtIGVmZmVjdHMgd2lsbCBhIGNoYW5nZSBoZXJlIGNhdXNlPyYjMzQ7IEkgbmVlZCB0byBtZXRpY3Vsb3VzbHkgbWFwIHRoaXMgb3V0LiBJJiMzOTtsbCBuZWVkIHRvIGlkZW50aWZ5IHdoaWNoIG90aGVyIGZsYWdzLCBjb25maWd1cmF0aW9ucywgb3IgZXZlbiBjb2RlIG1vZHVsZXMgYXJlIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgbGlua2VkIHRvIGBMUlVfR0VOYC4gS25vd2luZyB0aGlzIHdpbGwgZGV0ZXJtaW5lIHRoZSBuZWNlc3NhcnkgcHJlY2F1dGlvbnMgcmVxdWlyZWQgd2hlbiB0d2Vha2luZyBgTFJVX0dFTmAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTk6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIExSVV9HRU4kJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTM5Mz1jb25maWcgUFRFX01BUktFUl9VRkZEX1dQXG4tLVxubW0vS2NvbmZpZy0xNDAzLSMgbXVsdGktZ2VuIExSVSB7XG5tbS9LY29uZmlnOjE0MDQ6Y29uZmlnIExSVV9HRU5cbm1tL0tjb25maWctMTQwNS1cdGJvb2wgXCYjMzQ7TXVsdGktR2VuIExSVVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE5OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNTEzCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBpbnRvIGBtbS9LY29uZmlnYCBMaW5lIDE0MDQqKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgY29uZmlndXJhdGlvbi4gSSYjMzk7bSBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIGxpbmUgMTQwNCBpbiBgbW0vS2NvbmZpZ2AuIEkmIzM5O20gZ3Vlc3NpbmcgdGhhdCYjMzk7cyB3aGVyZSBhIHBhcnRpY3VsYXIgb3B0aW9uIG9yIGdyb3VwIG9mIHJlbGF0ZWQgb3B0aW9ucyBmb3IgbWVtb3J5IG1hbmFnZW1lbnQgaXMgZGVmaW5lZC4gR2l2ZW4gdGhlIGNvbnRleHQgb2YgdGhlIGBtbS9gIGRpcmVjdG9yeSwgaXQmIzM5O3MgbGlrZWx5IGRlYWxpbmcgd2l0aCBzb21lIGFzcGVjdCBvZiBhbGxvY2F0aW9uLCB2aXJ0dWFsIG1lbW9yeSwgTlVNQSwgb3IgcGVyaGFwcyBzb21lIHNwZWNpZmljIGFyY2hpdGVjdHVyZS1yZWxhdGVkIG1lbW9yeSBoYW5kbGluZy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIGEgYGNvbmZpZ2AgZGVmaW5pdGlvbiwgcG90ZW50aWFsbHkgbmVzdGVkIHdpdGhpbiBhIGBtZW51YCwgYGNob2ljZWAsIG9yIGEgY29uZGl0aW9uYWwgYmxvY2sgdXNpbmcgYGlmYCBvciBgc2VsZWN0YC4gSG9wZWZ1bGx5LCB0aGVyZSBhcmUgY29tbWVudHMgdGhhdCBnaXZlIG1lIGEgY2x1ZSBhYm91dCB0aGUgaW50ZW50IG9mIHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24gb3IgZ3JvdXAuIEkmIzM5O20gYW50aWNpcGF0aW5nIHRoYXQgSSB3aWxsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc3Vycm91bmRpbmcgY29udGV4dCB0byBmdWxseSBncmFzcCBpdC4gSeKAmW0gaG9waW5nIHRoYXQgSSBoYXZlIHNvbWUgcHJpb3Iga25vd2xlZGdlIGFib3V0IHRoZSBwYXJ0aWN1bGFyIHN1YnN5c3RlbSB0aGF0JiMzOTtzIHRvdWNoZWQgYXQgdGhhdCBsaW5lIG9mIGNvZGUuIExldCYjMzk7cyBzZWUgd2hhdCBnZW1zIHdlIGNhbiBmaW5kLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE5OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTQwMDpcdFx0ICBwdXJwb3Nlcy4gIEl0IGlzIHJlcXVpcmVkIHRvIGVuYWJsZSB1c2VyZmF1bHRmZCB3cml0ZSBwcm90ZWN0aW9uIG9uXG4xNDAxOlx0XHQgIGZpbGUtYmFja2VkIG1lbW9yeSB0eXBlcyBsaWtlIHNobWVtIGFuZCBodWdldGxiZnMuXG4xNDAyOlx0XG4xNDAzOlx0IyBtdWx0aS1nZW4gTFJVIHtcbjE0MDQ6XHRjb25maWcgTFJVX0dFTlxuMTQwNTpcdFx0Ym9vbCBcJiMzNDtNdWx0aS1HZW4gTFJVXCYjMzQ7XG4xNDA2Olx0XHRkZXBlbmRzIG9uIE1NVVxuMTQwNzpcdFx0IyBtYWtlIHN1cmUgZm9saW8tXHUwMDNlZmxhZ3MgaGFzIGVub3VnaCBzcGFyZSBiaXRzXG4xNDA4Olx0XHRkZXBlbmRzIG9uIDY0QklUIHx8ICFTUEFSU0VNRU0gfHwgU1BBUlNFTUVNX1ZNRU1NQVBcbjE0MDk6XHRcdGhlbHBcbjE0MTA6XHRcdCAgQSBoaWdoIHBlcmZvcm1hbmNlIExSVSBpbXBsZW1lbnRhdGlvbiB0byBvdmVyY29tbWl0IG1lbW9yeS4gU2VlXG4xNDExOlx0XHQgIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdCBmb3IgZGV0YWlscy5cbjE0MTI6XHRcbjE0MTM6XHRjb25maWcgTFJVX0dFTl9FTkFCTEVEXG4xNDE0Olx0XHRib29sIFwmIzM0O0VuYWJsZSBieSBkZWZhdWx0XCYjMzQ7XG4xNDE1Olx0XHRkZXBlbmRzIG9uIExSVV9HRU5cbjE0MTY6XHRcdGhlbHBcbjE0MTc6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgbXVsdGktZ2VuIExSVSBieSBkZWZhdWx0LlxuMTQxODpcdFxuMTQxOTpcdGNvbmZpZyBMUlVfR0VOX1NUQVRTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE5OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MTEyCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTFJVIEdlbmVyYXRpb24gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggcmVsYXRlZCB0byBMUlUgZ2VuZXJhdGlvbi4gVGhlIGtleSBjb25maWd1cmF0aW9ucyBoZXJlIGFyZSBgTFJVX0dFTmAgYW5kIGBMUlVfR0VOX0VOQUJMRURgIOKAkyB0aGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4gTm93LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQgdGhpcyBwYXRjaCBhY3R1YWxseSAqZG9lcyouIEkgc2VlIGl0IG1vZGlmaWVzIHNldmVyYWwgZnVuY3Rpb25zLiBMZXQmIzM5O3Mgc2VlLi4uCgpTcGVjaWZpY2FsbHksIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGhhdmUgYmVlbiBtb2RpZmllZDogYG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplYCwgYGZvbGlvX21pZ3JhdGVfZmxhZ3NgLCBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAsIGBldmljdF9mb2xpb3NgLCBgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkYCwgYHdhbGtfcHRlX3JhbmdlYCwgYGZvbGlvX2luY19nZW5gLCBgZm9saW9fdXBkYXRlX2dlbmAsIGByZWFkX2N0cmxfcG9zYCwgYGxydV9nZW5fc2V0X3JlZnNgLCBgbHJ1X2dlbl9jbGVhcl9yZWZzYCwgYGxydV9nZW5faW5jX3JlZnNgLCBhbmQgYF9fbHJ1X2NhY2hlX2FjdGl2YXRlX2ZvbGlvYC4KCk5vdywgSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGltcG9ydGFudCBiaXRzLiBNeSBmb2N1cyBpcyBnb2luZyB0byBiZSBvbiB0aGUgbm9uLXN0YXRpYyBhbmQgbm9uLWlubGluZWQgZnVuY3Rpb25zLCBhcyB0aGVzZSBhcmUgdGhlIG9uZXMgbW9zdCBsaWtlbHkgdG8gaGF2ZSB3aWRlciBpbXBsaWNhdGlvbnMuIEkgY2FuIHNlZSB0aGUgbG9jYXRpb24gb2YgdGhlIGZ1bmN0aW9uczogYG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplYCBpcyBpbiBgbW0vbWVtY29udHJvbC5jYC4gYGZvbGlvX21pZ3JhdGVfZmxhZ3NgIGlzIGluIGBtbS9taWdyYXRlLmNgLiBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAgaXMgaW4gYG1tL3Ztc2Nhbi5jYC4gSXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgdGhlIHJlc3Qgb2YgdGhlbSBhcmUgc3RhdGljLCB3aGljaCBuYXJyb3dzIG15IGZvY3VzIGNvbnNpZGVyYWJseS4KClNvLCBsZXQmIzM5O3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IGBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZWAsIGBmb2xpb19taWdyYXRlX2ZsYWdzYCwgYW5kIGBscnVfZ2VuX2xvb2tfYXJvdW5kYC4gVGhlc2UgYXJlIHRoZSBvbmVzIHdoZXJlIHRoZSBjb2RlIGlzIGFjdHVhbGx5ICpleHBvc2VkKiBhbmQgY2FuIGJlIGNhbGxlZCBmcm9tIG90aGVyIG1vZHVsZXMsIHRoZXkgYXJlIHdvcnRoIGEgY2xvc2VyIGxvb2suIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGNvZGUgYW5kIHVuZGVyc3RhbmQgaG93IHRoZSBMUlUgZ2VuZXJhdGlvbiBsb2dpYyBpcyBiZWluZyBpbnRlZ3JhdGVkIHdpdGhpbiBtZW1vcnkgbWFuYWdlbWVudCwgbWlncmF0aW9uLCBhbmQgdGhlIFZNIHNjYW5uaW5nIHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE5OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14odm9pZHxib29sfGludHx1bnNpZ25lZCBsb25nKSBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD04OTE9c3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfb25saW5lKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC04OTctXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo4OTg6dm9pZCBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbHJ1X2xpc3QgbHJ1LFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtODk5LVx0XHRpbnQgemlkLCBsb25nIG5yX3BhZ2VzKTtcbi0tXG5tbS9tZW1jb250cm9sLmM9MTUwMT1zdHJ1Y3QgbHJ1dmVjICpmb2xpb19scnV2ZWNfbG9ja19pcnFzYXZlKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vbWVtY29udHJvbC5jLTE1MjctICovXG5tbS9tZW1jb250cm9sLmM6MTUyODp2b2lkIG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBscnVfbGlzdCBscnUsXG5tbS9tZW1jb250cm9sLmMtMTUyOS1cdFx0XHRcdGludCB6aWQsIGxvbmcgbnJfcGFnZXMpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE5OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MjQyCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGxpa2UgeW91cnNlbGY6CgoqKkNvbnNpZGVyaW5nIHRoZSBTY29wZSBvZiBgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVgKioKCk9rYXksIHNvIEkmIzM5O20gcHJvY2Vzc2luZyB0aGF0IGBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZWAgZnVuY3Rpb24uIFRoZSBrZXkgcmVhbGl6YXRpb24gaGVyZSBpcyB0aGF0IGl0JiMzOTtzICpleHBvcnRlZCogYW5kIHRoZXJlZm9yZSAqZ2xvYmFsKi4gVGhpcyBpbW1lZGlhdGVseSB0cmlnZ2VycyBhIHNldCBvZiBjb25zaWRlcmF0aW9ucyBpbiBteSBtaW5kLiBCZWNhdXNlIGl0JiMzOTtzIHZpc2libGUgb3V0c2lkZSB0aGUgaW1tZWRpYXRlIG1vZHVsZSBvciBzdWJzeXN0ZW0sIGl0IGltcGxpZXMgaXQmIzM5O3MgZGVzaWduZWQgdG8gYmUgaW52b2tlZCBmcm9tIGEgd2lkZXIgY29udGV4dCwgcG90ZW50aWFsbHkgYnkgb3RoZXIga2VybmVsIG1vZHVsZXMgb3IgZXZlbiB1c2Vyc3BhY2UsIHdoaWNoIGhhcyBzZXJpb3VzIHJhbWlmaWNhdGlvbnMgZm9yIHN0YWJpbGl0eSBhbmQgc3luY2hyb25pemF0aW9uLiBUaGUgaW1wbGljYXRpb25zIG9mIHRoaXMgYXJlIHNpZ25pZmljYW50LiBUaGlzIHN1Z2dlc3RzIGEgY2FyZWZ1bCByZXZpZXcgb2YgaXRzIHVzYWdlIHBhdHRlcm5zLCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGFuZCBsb2NraW5nIHN0cmF0ZWdpZXMgaXMgd2FycmFudGVkLCBnaXZlbiB0aGUgcG90ZW50aWFsIGZvciB1bmV4cGVjdGVkIGludGVyYWN0aW9ucy4gQW55IGNoYW5nZXMgdG8gdGhpcyBmdW5jdGlvbiBoYXZlIHRvIGJlIGNvbnNpZGVyZWQgY2FyZWZ1bGx5LiBUaGUgdmVyeSBmYWN0IHRoYXQgaXQmIzM5O3MgZ2xvYmFsIHNob3VsZCBtZWFuIHRoZXJlJiMzOTtzIGFuIGV4Y2VsbGVudCByZWFzb24sIGRvY3VtZW50ZWQsIGZvciB3aHkgdGhhdCYjMzk7cyB0aGUgY2FzZS4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBjYWxsIHNpdGVzIGFuZCB0aGluayBhYm91dCB0aGUgbG9ja2luZyBjb250ZXh0cyB0aG9yb3VnaGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxOTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKHZvaWR8Ym9vbHxpbnR8dW5zaWduZWQgbG9uZykgZm9saW9fbWlncmF0ZV9mbGFncyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21pZ3JhdGUuaD02OT12b2lkIHNvZnRsZWFmX2VudHJ5X3dhaXRfb25fbG9ja2VkKHNvZnRsZWFmX3QgZW50cnksIHNwaW5sb2NrX3QgKnB0bClcbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oLTcwLVx0XHRfX3JlbGVhc2VzKHB0bCk7XG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaDo3MTp2b2lkIGZvbGlvX21pZ3JhdGVfZmxhZ3Moc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpmb2xpbyk7XG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaC03Mi1pbnQgZm9saW9fbWlncmF0ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbm1tL21pZ3JhdGUuYz03Mzk9aW50IG1pZ3JhdGVfaHVnZV9wYWdlX21vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5tbS9taWdyYXRlLmMtNzc0LSAqL1xubW0vbWlncmF0ZS5jOjc3NTp2b2lkIGZvbGlvX21pZ3JhdGVfZmxhZ3Moc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL21pZ3JhdGUuYy03NzYte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxOTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTcyMQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDb25zaWRlcmluZyB0aGUgU2NvcGUgb2YgYGZvbGlvX21pZ3JhdGVfZmxhZ3NgKioKCkFscmlnaHQsIHNvIGBmb2xpb19taWdyYXRlX2ZsYWdzYC4uLiB0aGF0JiMzOTtzIGEgZ2xvYmFsIHZhcmlhYmxlLCBpc24mIzM5O3QgaXQ/IE9rYXksIHNvIHRoYXQgbWVhbnMgSSBuZWVkIHRvIGJlICp2ZXJ5KiBtaW5kZnVsIG9mIGl0cyBzY29wZSBhbmQgcG90ZW50aWFsIGltcGFjdC4gSXQmIzM5O3Mgbm90IGxvY2FsaXplZCwgc28gY2hhbmdlcyB0byBpdCBpbiBvbmUgcGFydCBvZiB0aGUgc3lzdGVtIHdpbGwgcmlwcGxlIHRocm91Z2hvdXQuIEkgbmVlZCB0byB0aGluayBhYm91dCBob3cgZGlmZmVyZW50IG1vZHVsZXMgb3IgZnVuY3Rpb25zIG1pZ2h0IGJlIHJlYWRpbmcgb3Igd3JpdGluZyB0byBpdC4gQW55IHJhY2UgY29uZGl0aW9ucyBvciB1bmludGVuZGVkIHNpZGUgZWZmZWN0cyBhcmUgYSBtYWpvciBjb25jZXJuLiBCZXN0IHByYWN0aWNlIHdvdWxkIHN1Z2dlc3QgcmVkdWNpbmcgaXRzIHNjb3BlIGlmIHBvc3NpYmxlLCByZWZhY3RvcmluZyB0byBwYXNzIGFzIGFuIGFyZ3VtZW50IGlmIGl0IG1ha2VzIHNlbnNlLiBJIGhhdmUgdG8gbWFrZSBzdXJlIGV2ZXJ5IGluc3RhbmNlIG9mIGl0cyB1c2UgaXMgd2VsbC1kb2N1bWVudGVkLCBzbyBmdXR1cmUgZGV2ZWxvcGVycywgaW5jbHVkaW5nIG15c2VsZiwgZG9uJiMzOTt0IHRyaXAgb3ZlciBpdC4gVGltZSB0byBhc3Nlc3MgYWxsIHRoZSBwbGFjZXMgdGhpcyBmbGFnIGlzIHVzZWQsIGZpZ3VyZSBvdXQgaXRzIHB1cnBvc2UsIGFuZCBlbnN1cmUgaXQmIzM5O3MgaGFuZGxlZCBzYWZlbHkgYW5kIGVmZmljaWVudGx5LCBvciBjb25zaWRlciBwb3RlbnRpYWwgYWx0ZXJuYXRpdmVzIHRvIHRoaXMgZ2xvYmFsIGRlcGVuZGVuY3kuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE5OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14odm9pZHxib29sfGludHx1bnNpZ25lZCBsb25nKSBscnVfZ2VuX2xvb2tfYXJvdW5kJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbW16b25lLmg9Njk0PXZvaWQgbHJ1X2dlbl9pbml0X2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpO1xuaW5jbHVkZS9saW51eC9tbXpvbmUuaDo2OTU6Ym9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKTtcbmluY2x1ZGUvbGludXgvbW16b25lLmgtNjk2LVxuLS1cbm1tL3Ztc2Nhbi5jPTQyMTM9c3RhdGljIHZvaWQgbHJ1X2dlbl9hZ2Vfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy00MjU5LSAqL1xubW0vdm1zY2FuLmM6NDI2MDpib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXG5tbS92bXNjYW4uYy00MjYxLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTk6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYxOTMKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAzNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gTFJVIGFuZCBmb2xpbyBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgd2l0aCBhbiBleWUgdG93YXJkcyBmdXp6aW5nLiBGaXJzdCwgSSBub3RpY2VkIHRoYXQgYGxydV9nZW5fbG9va19hcm91bmRgIGlzIGdsb2JhbCwgd2hpY2ggaW1tZWRpYXRlbHkgbWFrZXMgaXQgYSBwb3RlbnRpYWwgdGFyZ2V0LiBUaGVuLCBJIHF1aWNrbHkgc2Nhbm5lZCB0aHJvdWdoIGBtbS92bXNjYW4uY2AgYW5kIGBtbS9mb2xpby5jYCB0byBzZWUgd2hhdCBlbHNlIG1pZ2h0IGJlIGludGVyZXN0aW5nLCBhbmQgaXQgbG9va3MgbGlrZSBhIGxvdCBvZiB0aGUgc3VwcG9ydGluZyBmdW5jdGlvbnMgYXJlIGBzdGF0aWNgLCBsaWtlIGBldmljdF9mb2xpb3NgLCBgZ2V0X3R5cGVfdG9fc2NhbmAsIGBpc29sYXRlX2ZvbGlvYCwgYW5kIHNldmVyYWwgb3RoZXJzIGluIGJvdGggZmlsZXMuIFRoZXkgc2VlbSBwcmV0dHkgY29udGFpbmVkLgoKU28sIHRoZSBvbmVzIHRoYXQgYXJlICpub3QqIHN0YXRpYywgYW5kIHRoZXJlZm9yZSBoYXZlIGJyb2FkZXIgcmVhY2gsIGFyZSBgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVgLCBgZm9saW9fbWlncmF0ZV9mbGFnc2AsIGFuZCBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAuIFRoZXNlIHNlZW0gdG8gYmUgdGhlIHByaW1lIGNhbmRpZGF0ZXMgZm9yIGNsb3NlciBpbnNwZWN0aW9uLgoKTm93LCBsZXQmIzM5O3MgYXNzZXNzIHRoZWlyIGZ1enppbmcgcG90ZW50aWFsLiBgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVgIGlzIGEgY3J1Y2lhbCBmdW5jdGlvbiBmb3IgbWVtY2cgTFJVIHNpemUgdXBkYXRlcywgZXNzZW50aWFsIGZvciBtZW1vcnkgbWFuYWdlbWVudC4gYGZvbGlvX21pZ3JhdGVfZmxhZ3NgIGlzIGRlZXBseSBpbnZvbHZlZCBpbiBwYWdlIG1pZ3JhdGlvbiwgd2hpY2ggaXMgYSBrbm93biBhcmVhIGZvciBjb21wbGV4IGludGVyYWN0aW9ucy4gRmluYWxseSwgYGxydV9nZW5fbG9va19hcm91bmRgIGlzIGEgY29yZSBmdW5jdGlvbiBmb3IgTUdMUlUuIEFsbCB0aHJlZSBvZiB0aGVzZSBoYXZlIGEgc3Ryb25nIGNvbm5lY3Rpb24gdG8gY29yZSBrZXJuZWwgYmVoYXZpb3IuCgpIbW0sIGBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZWAgZmVlbHMgYSBsaXR0bGUgbW9yZSByb3V0aW5lIHRoYW4gdGhlIG90aGVyIHR3by4gSXQmIzM5O3MgcHJvYmFibHkgcXVpdGUgaG90LCBhcyBpdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHBhcnQgb2YgdGhlIG1lbWNnIHN1YnN5c3RlbSwgYnV0IG1heWJlIG5vdCBhcyBsaWtlbHkgdG8gcmV2ZWFsIHRyaWNreSBlZGdlIGNhc2VzLiBJdCYjMzk7cyBwcm9iYWJseSB3b3J0aCBpbnZlc3RpZ2F0aW5nIHdoZXJlIGl0JiMzOTtzIGNhbGxlZCBmcm9tIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE5OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTg5MT1zdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9vbmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTg5Ny1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjg5ODp2b2lkIG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBscnVfbGlzdCBscnUsXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC04OTktXHRcdGludCB6aWQsIGxvbmcgbnJfcGFnZXMpO1xuLS1cbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg9NTI9c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHVwZGF0ZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4tLVxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC01Ny0jaWZkZWYgQ09ORklHX01FTUNHXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oOjU4Olx0bWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUobHJ1dmVjLCBscnUsIHppZCwgbnJfcGFnZXMpO1xuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC01OS0jZW5kaWZcbi0tXG5tbS9mb2xpby5jPTExMjM9c3RhdGljIHZvaWQgbHJ1dmVjX3JlcGFyZW50X2xydShzdHJ1Y3QgbHJ1dmVjICpjaGlsZF9scnV2ZWMsXG4tLVxubW0vZm9saW8uYy0xMTQzLVx0XHQgKi9cbm1tL2ZvbGlvLmM6MTE0NDpcdFx0bWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUocGFyZW50X2xydXZlYywgbHJ1LCB6aWQsIHNpemUpO1xubW0vZm9saW8uYzoxMTQ1Olx0XHRtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZShjaGlsZF9scnV2ZWMsIGxydSwgemlkLCAtKGxvbmcpc2l6ZSk7XG5tbS9mb2xpby5jLTExNDYtXHR9XG4tLVxubW0vbWVtY29udHJvbC5jPTE1MDE9c3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjX2xvY2tfaXJxc2F2ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL21lbWNvbnRyb2wuYy0xNTE4LS8qKlxubW0vbWVtY29udHJvbC5jOjE1MTk6ICogbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUgLSBhY2NvdW50IGZvciBhZGRpbmcgb3IgcmVtb3ZpbmcgYW4gbHJ1IHBhZ2Vcbm1tL21lbWNvbnRyb2wuYy0xNTIwLSAqIEBscnV2ZWM6IG1lbV9jZ3JvdXAgcGVyIHpvbmUgbHJ1IHZlY3RvclxuLS1cbm1tL21lbWNvbnRyb2wuYy0xNTI3LSAqL1xubW0vbWVtY29udHJvbC5jOjE1Mjg6dm9pZCBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbHJ1X2xpc3QgbHJ1LFxubW0vbWVtY29udHJvbC5jLTE1MjktXHRcdFx0XHRpbnQgemlkLCBsb25nIG5yX3BhZ2VzKVxuLS1cbm1tL3Ztc2Nhbi5jPTE1OTI9dW5zaWduZWQgaW50IHJlY2xhaW1fY2xlYW5fcGFnZXNfZnJvbV9saXN0KHN0cnVjdCB6b25lICp6b25lLFxuLS1cbm1tL3Ztc2Nhbi5jLTE2NDQtICogVXBkYXRlIExSVSBzaXplcyBhZnRlciBpc29sYXRpbmcgcGFnZXMuIFRoZSBMUlUgc2l6ZSB1cGRhdGVzIG11c3Rcbm1tL3Ztc2Nhbi5jOjE2NDU6ICogYmUgY29tcGxldGUgYmVmb3JlIG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplIGR1ZSB0byBhIHNhbml0eSBjaGVjay5cbm1tL3Ztc2Nhbi5jLTE2NDYtICovXG4tLVxubW0vdm1zY2FuLmM9NDYyMT12b2lkIGxydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKVxuLS1cbm1tL3Ztc2Nhbi5jLTQ2NDItXHRcdFx0LyogTW92ZSB0aGUgYWNjb3VudGluZywgZG8gbm90IGR1cGxpY2F0ZSBpdC4gKi9cbm1tL3Ztc2Nhbi5jOjQ2NDM6XHRcdFx0bWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUocGFyZW50X2xydXZlYywgbHJ1LCB6aWQsIHNpemUpO1xubW0vdm1zY2FuLmM6NDY0NDpcdFx0XHRtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZShjaGlsZF9scnV2ZWMsIGxydSwgemlkLCAtKGxvbmcpc2l6ZSk7XG5tbS92bXNjYW4uYy00NjQ1LVx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE5OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3ODExCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogOTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEhvdCBQYXRoIEZ1bmN0aW9uYWxpdHkqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gc29tZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUsIGFuZCBhIGZldyBmdW5jdGlvbnMgYXJlIGltbWVkaWF0ZWx5IHN0YW5kaW5nIG91dC4gYG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplYCBpcyB0cmlnZ2VyZWQgZnJvbSBgdXBkYXRlX2xydV9zaXplYCwgd2hpY2gsIGJlY2F1c2UgaXQmIzM5O3MgYF9fYWx3YXlzX2lubGluZWAsIGlzIGNsZWFybHkgZGVzaWduZWQgZm9yIHNwZWVkIGFuZCB1c2VkICpldmVyeXdoZXJlKi4gVGhhdCBtYWtlcyBpdCBhIHNlcmlvdXMgaG90IHBhdGggSSBuZWVkIHRvIHVuZGVyc3RhbmQgY29tcGxldGVseS4gQWxzbywgYGZvbGlvX21pZ3JhdGVfZmxhZ3NgIGlzIGNsZWFybHkgY3J1Y2lhbCBkdXJpbmcgcGFnZSBtaWdyYXRpb24sIGFuZCB0aGVuIHRoZXJlJiMzOTtzIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCwgdXNlZCBkdXJpbmcgcGFnZSBmYXVsdCBsb29rYXJvdW5kLiBHaXZlbiB0aGUgY29udGV4dCwgYGxydV9nZW5fbG9va19hcm91bmRgIGlzIHRoZSBvbmUgSSB0aGluayBJIHNob3VsZCBiZSBpbnZlc3RpZ2F0aW5nIG5leHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE5OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xydV9nZW5fbG9va19hcm91bmQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9tbS9tdWx0aWdlbl9scnUucnN0PTE4Nz1jYW4gaW5jdXIgdGhlIGhpZ2hlc3QgQ1BVIGNvc3QgaW4gdGhlIHJlY2xhaW0gcGF0aC5cbkRvY3VtZW50YXRpb24vbW0vbXVsdGlnZW5fbHJ1LnJzdC0xODgtXG5Eb2N1bWVudGF0aW9uL21tL211bHRpZ2VuX2xydS5yc3Q6MTg5OmBgbHJ1X2dlbl9sb29rX2Fyb3VuZCgpYGAgZXhwbG9pdHMgc3BhdGlhbCBsb2NhbGl0eSB0byByZWR1Y2UgdGhlXG5Eb2N1bWVudGF0aW9uL21tL211bHRpZ2VuX2xydS5yc3QtMTkwLXRyaXBzIGludG8gdGhlIHJtYXAuIEl0IHNjYW5zIHRoZSBhZGphY2VudCBQVEVzIG9mIGEgeW91bmcgUFRFIGFuZFxuLS1cbkRvY3VtZW50YXRpb24vbW0vbXVsdGlnZW5fbHJ1LnJzdD0xOTk9aW4gdGhlIHNldC5cbkRvY3VtZW50YXRpb24vbW0vbXVsdGlnZW5fbHJ1LnJzdC0yMDAtXG5Eb2N1bWVudGF0aW9uL21tL211bHRpZ2VuX2xydS5yc3Q6MjAxOkluIHRoZSBldmljdGlvbiBwYXRoLCBzcGVjaWZpY2FsbHksIGluIGBgbHJ1X2dlbl9sb29rX2Fyb3VuZCgpYGAsIGlmIGFcbkRvY3VtZW50YXRpb24vbW0vbXVsdGlnZW5fbHJ1LnJzdC0yMDItUE1EIGhhcyBhIHN1ZmZpY2llbnQgbnVtYmVyIG9mIGhvdCBwYWdlcywgaXRzIGFkZHJlc3MgaXMgcGxhY2VkIGluIHRoZVxuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmg9Njk0PXZvaWQgbHJ1X2dlbl9pbml0X2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpO1xuaW5jbHVkZS9saW51eC9tbXpvbmUuaDo2OTU6Ym9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKTtcbmluY2x1ZGUvbGludXgvbW16b25lLmgtNjk2LVxuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmg9NzEzPXN0YXRpYyBpbmxpbmUgdm9pZCBscnVfZ2VuX2luaXRfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTcxNi1cbmluY2x1ZGUvbGludXgvbW16b25lLmg6NzE3OnN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtNzE4LVx0XHR1bnNpZ25lZCBpbnQgbnIpXG4tLVxubW0vcm1hcC5jPTkxOD1zdGF0aWMgYm9vbCBmb2xpb19yZWZlcmVuY2VkX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL3JtYXAuYy05ODItXHRcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSBcdTAwMjZcdTAwMjYgIWxydV9nZW5fc3dpdGNoaW5nKCkgXHUwMDI2XHUwMDI2IHB2bXcucHRlKSB7XG5tbS9ybWFwLmM6OTgzOlx0XHRcdGlmIChscnVfZ2VuX2xvb2tfYXJvdW5kKFx1MDAyNnB2bXcsIG5yKSlcbm1tL3JtYXAuYy05ODQtXHRcdFx0XHRyZWZlcmVuY2VkJiM0MzsmIzQzOztcbi0tXG5tbS92bXNjYW4uYz0yNzkxPXN0YXRpYyBib29sIF9fbWF5YmVfdW51c2VkIHNlcV9pc192YWxpZChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG4tLVxubW0vdm1zY2FuLmMtMjgyMC0gKiB3YWxrX3BtZF9yYW5nZSgpOyB0aGUgZXZpY3Rpb24gYWxzbyByZXBvcnQgdGhlbSB3aGVuIHdhbGtpbmcgdGhlIHJtYXBcbm1tL3Ztc2Nhbi5jOjI4MjE6ICogaW4gbHJ1X2dlbl9sb29rX2Fyb3VuZCgpLlxubW0vdm1zY2FuLmMtMjgyMi0gKlxuLS1cbm1tL3Ztc2Nhbi5jPTQwNzQ9c3RhdGljIGJvb2wgdHJ5X3RvX2luY19tYXhfc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsXG4tLVxubW0vdm1zY2FuLmMtNDA5My1cdCAqIElmIHRoZSBoYXJkd2FyZSBkb2VzbiYjMzk7dCBhdXRvbWF0aWNhbGx5IHNldCB0aGUgYWNjZXNzZWQgYml0LCBmYWxsYmFja1xubW0vdm1zY2FuLmM6NDA5NDpcdCAqIHRvIGxydV9nZW5fbG9va19hcm91bmQoKSwgd2hpY2ggb25seSBjbGVhcnMgdGhlIGFjY2Vzc2VkIGJpdCBpbiBhXG5tbS92bXNjYW4uYy00MDk1LVx0ICogaGFuZGZ1bCBvZiBQVEVzLiBTcHJlYWRpbmcgdGhlIHdvcmsgb3V0IG92ZXIgYSBwZXJpb2Qgb2YgdGltZSB1c3VhbGx5XG4tLVxubW0vdm1zY2FuLmM9NDIxMz1zdGF0aWMgdm9pZCBscnVfZ2VuX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTQyNTktICovXG5tbS92bXNjYW4uYzo0MjYwOmJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcbm1tL3Ztc2Nhbi5jLTQyNjEte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxOTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODk4OQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRoZSBleHBlcnQ6CgoqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBBIFF1aWNrIFNjYW4qKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZS4gVGhlIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCBmdW5jdGlvbiBjYWxsZWQgZnJvbSBgZm9saW9fcmVmZXJlbmNlZF9vbmVgIHdpdGhpbiBgbW0vcm1hcC5jYCBpcyBkZWZpbml0ZWx5IGNhdGNoaW5nIG15IGF0dGVudGlvbi4gR2l2ZW4gaXRzIGxvY2F0aW9uIGFuZCBsaWtlbHkgZnVuY3Rpb24gd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIGl0IHNlZW1zIGxpa2UgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuIEl0JiMzOTtzIGEga2V5IHBvaW50IG9mIGludGVyYWN0aW9uIHdpdGggdGhlIExSVSBhbmQgcmVmZXJlbmNlZCBmb2xpbyBmbGFncywgc3VnZ2VzdGluZyB0aGF0IHdlIGNvdWxkIGluZHVjZSBzb21lIGludGVyZXN0aW5nIGNvbmRpdGlvbnMuIE5vdywgdGhlIG5hdHVyYWwgc3RlcCBpcyB0byB0YWtlIGEgbG9vayBhdCBgZm9saW9fbWlncmF0ZV9mbGFnc2AsIHRvIHVuZGVyc3RhbmQgYW55IGZsYWdzIHRoYXQgYXJlIHJlbGV2YW50IGluIHRoaXMgY29udGV4dCBhbmQgc2VlIHdoYXQga2luZCBvZiBpbnB1dHMgd2UgY2FuIHRlc3QuIExldCYjMzk7cyBzZWUgd2hhdCB0aGF0IHJldmVhbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE5OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZvbGlvX21pZ3JhdGVfZmxhZ3MmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYWlvLmM9NDYwPXN0YXRpYyBpbnQgYWlvX21pZ3JhdGVfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZHN0LFxuLS1cbmZzL2Fpby5jLTUxMi1cdGZvbGlvX2NvcHkoZHN0LCBzcmMpO1xuZnMvYWlvLmM6NTEzOlx0Zm9saW9fbWlncmF0ZV9mbGFncyhkc3QsIHNyYyk7XG5mcy9haW8uYy01MTQtXHRCVUdfT04oY3R4LVx1MDAzZXJpbmdfZm9saW9zW2lkeF0gIT0gc3JjKTtcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYz0xMDI0PXN0YXRpYyBpbnQgaHVnZXRsYmZzX21pZ3JhdGVfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTAzOS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEwNDA6XHRmb2xpb19taWdyYXRlX2ZsYWdzKGRzdCwgc3JjKTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEwNDEtXG4tLVxuaW5jbHVkZS9saW51eC9taWdyYXRlLmg9Njk9dm9pZCBzb2Z0bGVhZl9lbnRyeV93YWl0X29uX2xvY2tlZChzb2Z0bGVhZl90IGVudHJ5LCBzcGlubG9ja190ICpwdGwpXG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaC03MC1cdFx0X19yZWxlYXNlcyhwdGwpO1xuaW5jbHVkZS9saW51eC9taWdyYXRlLmg6NzE6dm9pZCBmb2xpb19taWdyYXRlX2ZsYWdzKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuaW5jbHVkZS9saW51eC9taWdyYXRlLmgtNzItaW50IGZvbGlvX21pZ3JhdGVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oPTM1MT1zdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9kZWxfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIHJlY2xhaW1pbmcpXG4tLVxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC0zNjEtXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oOjM2MjpcdC8qIGZvciBmb2xpb19taWdyYXRlX2ZsYWdzKCkgKi9cbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtMzYzLVx0ZmxhZ3MgPSAhcmVjbGFpbWluZyBcdTAwMjZcdTAwMjYgbHJ1X2dlbl9pc19hY3RpdmUobHJ1dmVjLCBnZW4pID8gQklUKFBHX2FjdGl2ZSkgOiAwO1xuLS1cbm1tL21pZ3JhdGUuYz03Mzk9aW50IG1pZ3JhdGVfaHVnZV9wYWdlX21vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5tbS9taWdyYXRlLmMtNzc0LSAqL1xubW0vbWlncmF0ZS5jOjc3NTp2b2lkIGZvbGlvX21pZ3JhdGVfZmxhZ3Moc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL21pZ3JhdGUuYy03NzYte1xuLS1cbm1tL21pZ3JhdGUuYy04NjMtfVxubW0vbWlncmF0ZS5jOjg2NDpFWFBPUlRfU1lNQk9MKGZvbGlvX21pZ3JhdGVfZmxhZ3MpO1xubW0vbWlncmF0ZS5jLTg2NS1cbi0tXG5tbS9taWdyYXRlLmM9ODcwPXN0YXRpYyBpbnQgX19taWdyYXRlX2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmRzdCxcbi0tXG5tbS9taWdyYXRlLmMtODkwLVxubW0vbWlncmF0ZS5jOjg5MTpcdGZvbGlvX21pZ3JhdGVfZmxhZ3MoZHN0LCBzcmMpO1xubW0vbWlncmF0ZS5jLTg5Mi1cdHJldHVybiAwO1xuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmM9MTEwOT1zdGF0aWMgdm9pZCBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLFxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI1MS1cdFx0XHRlbHNlXG5tbS9taWdyYXRlX2RldmljZS5jOjEyNTI6XHRcdFx0XHRmb2xpb19taWdyYXRlX2ZsYWdzKG5ld2ZvbGlvLCBmb2xpbyk7XG5tbS9taWdyYXRlX2RldmljZS5jLTEyNTMtXHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTk6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk5OTEKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAzOTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgTWlncmF0aW9uIEhvdHNwb3RzKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCBhIGhhbmRsZSBvbiB0aGUgY29kZSBjaGFuZ2VzIHJlbGF0ZWQgdG8gZm9saW8gbWlncmF0aW9uLiBgZm9saW9fbWlncmF0ZV9mbGFnc2AgaW1tZWRpYXRlbHkgc3RhbmRzIG91dCBhcyBhIHN0cm9uZyBjYW5kaWRhdGUsIGdpdmVuIHRoYXQgaXQmIzM5O3MgZXhwb3J0ZWQgYW5kIHVzZWQgZGlyZWN0bHkgaW4gdGhlIG1pZ3JhdGlvbiBwcm9jZXNzLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4KCk5vdywgbGV0JiMzOTtzIGRpZyBhIGJpdCBkZWVwZXIgaW50byBwb3RlbnRpYWwgYm90dGxlbmVja3MuIGBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZWAgaXMgdGVtcHRpbmcsIGJ1dCBpdCYjMzk7cyBwYXJ0IG9mIHRoZSBgdXBkYXRlX2xydV9zaXplYCBjYWxsIGNoYWluLCBhbmQgdGhhdCYjMzk7cyBjYWxsZWQgZnJlcXVlbnRseSBmcm9tIGBscnV2ZWNfYWRkX2ZvbGlvYCwgYGxydXZlY19kZWxfZm9saW9gLCBhbmQgdGhlIGxpa2UuIEl0JiMzOTtzIHRvbyBob3QgYSBwYXRoIHRvIG1lc3Mgd2l0aCByaWdodCBub3cuIEkgbmVlZCB0byBhdm9pZCBpbXBhY3RpbmcgY3JpdGljYWwgcGVyZm9ybWFuY2UuCgpXaGF0IGVsc2U/IFdlbGwsIGEgYnVuY2ggb2Ygc3RhdGljIGZ1bmN0aW9ucyB3ZXJlIG1vZGlmaWVkLiBMZXQmIzM5O3Mgc2VlLi4uIGBmb2xpb191cGRhdGVfZ2VuYCwgYHdhbGtfcG1kX3JhbmdlX2xvY2tlZGAsIGB3YWxrX3B0ZV9yYW5nZWAsIGBmb2xpb19pbmNfZ2VuYCwgYW5kIGByZWFkX2N0cmxfcG9zYC4gU2luY2UgdGhleSYjMzk7cmUgc3RhdGljLCBJJiMzOTttIGxlc3Mgd29ycmllZCBhYm91dCB0aGVtIGJlaW5nIGV4cG9zZWQgYXMgdGhlIHByaW1hcnkgY2F1c2Ugb2YgcGVyZm9ybWFuY2UgZHJvcHMuIEJ1dCBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcuCgpBbHJpZ2h0LCBJJiMzOTtsbCByZXZpZXcgbm9uLXN0YXRpYyBmdW5jdGlvbnMgYWdhaW4uCmBmb2xpb19mbGFnc19pc19maWxlX2xydWAsIGBscnVfZ2VuX2Zyb21fZmxhZ3NgLCBgbHJ1X2dlbl9zZXRfZmxhZ3NgLCBgbHJ1X3JlZnNfZnJvbV9mbGFnc2AsIGBscnVfcmVmc19zZXRfZmxhZ3NgLCBgZm9saW9fbHJ1X3JlZnNgLCBgZm9saW9fc2V0X2xydV9yZWZzYCwgYGZvbGlvX2xydV9nZW5gLCBhbmQgYGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnNgIGFyZSBhbGwgaW5saW5lLCBzbyB0aGV5IGFyZSBwcm9iYWJseSBzYWZlLgoKSG9sZCBvbiwgdGhlIHBhdGNoIHRvdWNoZXMgYG1tL2ZvbGlvLmNgIGFzIHdlbGwuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZC4KYGxydV9nZW5faW5jX3JlZnNgIGFuZCBgbHJ1X2dlbl9jbGVhcl9yZWZzYCwgYm90aCBzdGF0aWMuCgpTbywgdGFraW5nIHN0b2NrLCBpdCBsb29rcyBsaWtlIGBmb2xpb19taWdyYXRlX2ZsYWdzYCBpcyB0aGUgcHJpbWFyeSBleHBvc2VkIHBvaW50IG9mIGludGVyZXN0LiBJdCYjMzk7cyB0aGUgY2xlYW5lc3Qgc3ltYm9sIHRvIGZvY3VzIG9uLiBBbmQgSSYjMzk7bSBub3cgZmFpcmx5IGNvbmZpZGVudCBpbiBhbHNvIHJldmlld2luZyBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAgYXMgd2VsbC4gVGhhdCBsb29rcyBsaWtlIGEgcG9zc2libGUgaG90c3BvdC4KCkZpbmFsbHksIEkgc2hvdWxkIGNvbmZpcm0gdGhhdCBgTFJVX0dFTmAgaXMgZW5hYmxlZCBpbiB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uLiBKdXN0IHRvIGJlIHN1cmUuIEkgbmVlZCB0byBjb25zaWRlciBhbGwgdGhlIGFuZ2xlcyB0byBlbnN1cmUgb3B0aW1hbCBwZXJmb3JtYW5jZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTk6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX0xSVV9HRU4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0PTEzPUJ1aWxkIHRoZSBrZXJuZWwgd2l0aCB0aGUgZm9sbG93aW5nIGNvbmZpZ3VyYXRpb25zLlxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0LTE0LVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0OjE1OiogYGBDT05GSUdfTFJVX0dFTj15YGBcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdDoxNjoqIGBgQ09ORklHX0xSVV9HRU5fRU5BQkxFRD15YGBcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdC0xNy1cbi0tXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3Q9Mjg9Zm9sbG93aW5nIGNvbXBvbmVudHMuIEl0cyBkZWZhdWx0IHZhbHVlIGRlcGVuZHMgb25cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdDoyOTpgYENPTkZJR19MUlVfR0VOX0VOQUJMRURgYC4gQWxsIHRoZSBjb21wb25lbnRzIHNob3VsZCBiZSBlbmFibGVkXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QtMzAtdW5sZXNzIHNvbWUgb2YgdGhlbSBoYXZlIHVuZm9yZXNlZW4gc2lkZSBlZmZlY3RzLiBXcml0aW5nIHRvXG4tLVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0PTg4PWNvbmNhdGVuYXRpb24gd2l0aCBkZWxpbWl0ZXJzIGBgLGBgIGFuZCBgYDtgYC5cbi0tXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QtOTAtYGAvc3lzL2tlcm5lbC9kZWJ1Zy9scnVfZ2VuX2Z1bGxgYCBwcm92aWRlcyBhZGRpdGlvbmFsIHN0YXRzIGZvclxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0OjkxOmRlYnVnZ2luZy4gYGBDT05GSUdfTFJVX0dFTl9TVEFUUz15YGAga2VlcHMgaGlzdG9yaWNhbCBzdGF0cyBmcm9tXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QtOTItZXZpY3RlZCBnZW5lcmF0aW9ucyBpbiB0aGlzIGZpbGUuXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MjAyPXN0cnVjdCBtZW1fY2dyb3VwIHtcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0yODMtXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoyODQ6I2lmZGVmIENPTkZJR19MUlVfR0VOX1dBTEtTX01NVVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMjg1LVx0LyogcGVyLW1lbWNnIG1tX3N0cnVjdCBsaXN0ICovXG4tLVxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaD04Nz1zdGF0aWMgX19hbHdheXNfaW5saW5lIGVudW0gbHJ1X2xpc3QgZm9saW9fbHJ1X2xpc3QoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTEwMi1cbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg6MTAzOiNpZmRlZiBDT05GSUdfTFJVX0dFTlxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC0xMDQtXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oPTEwNT1zdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9zd2l0Y2hpbmcodm9pZClcbi0tXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTExMC19XG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oOjExMTojaWZkZWYgQ09ORklHX0xSVV9HRU5fRU5BQkxFRFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC0xMTItc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZW5hYmxlZCh2b2lkKVxuLS1cbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg9MzgyPXN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19taWdyYXRlX2xydV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZClcbi0tXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTM4Ni19XG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oOjM4NzojZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi9cbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtMzg4LVxuLS1cbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg9NDE0PXN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19taWdyYXRlX2xydV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZClcbi0tXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTQxOC19XG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oOjQxOTojZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtNDIwLVxuLS1cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaD0xMTc1PXN0cnVjdCBtbV9zdHJ1Y3Qge1xuLS1cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xNDAyLSNlbmRpZiAvKiBDT05GSUdfS1NNICovXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg6MTQwMzojaWZkZWYgQ09ORklHX0xSVV9HRU5fV0FMS1NfTU1VXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTQwNC1cdFx0c3RydWN0IHtcbi0tXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTQxNy1cdFx0fSBscnVfZ2VuO1xuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjE0MTg6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOX1dBTEtTX01NVSAqL1xuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTE0MTktI2lmZGVmIENPTkZJR19NTV9JRFxuLS1cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaD0xNDgwPXN0YXRpYyBpbmxpbmUgY3B1bWFza190ICptbV9jcHVtYXNrKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xNDg0LVxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjE0ODU6I2lmZGVmIENPTkZJR19MUlVfR0VOXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTQ4Ni1cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaD0xNDg3PXN0cnVjdCBscnVfZ2VuX21tX2xpc3Qge1xuLS1cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xNDkzLVxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjE0OTQ6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTQ5NS1cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDoxNDk2OiNpZmRlZiBDT05GSUdfTFJVX0dFTl9XQUxLU19NTVVcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xNDk3LVxuLS1cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaD0xNTExPXN0YXRpYyBpbmxpbmUgdm9pZCBscnVfZ2VuX3VzZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTUyMC1cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDoxNTIxOiNlbHNlIC8qICFDT05GSUdfTFJVX0dFTl9XQUxLU19NTVUgKi9cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xNTIyLVxuLS1cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaD0xNTM5PXN0YXRpYyBpbmxpbmUgdm9pZCBscnVfZ2VuX3VzZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTU0Mi1cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDoxNTQzOiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTl9XQUxLU19NTVUgKi9cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xNTQ0LVxuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmg9NTI4PXN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsaztcbmluY2x1ZGUvbGludXgvbW16b25lLmgtNTI5LVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDo1MzA6I2lmZGVmIENPTkZJR19MUlVfR0VOXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTUzMS1cbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTUzNz1lbnVtIHtcbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTU0Ny0vKiB3aGV0aGVyIHRvIGtlZXAgaGlzdG9yaWNhbCBzdGF0cyBmcm9tIGV2aWN0ZWQgZ2VuZXJhdGlvbnMgKi9cbmluY2x1ZGUvbGludXgvbW16b25lLmg6NTQ4OiNpZmRlZiBDT05GSUdfTFJVX0dFTl9TVEFUU1xuaW5jbHVkZS9saW51eC9tbXpvbmUuaC01NDktI2RlZmluZSBOUl9ISVNUX0dFTlNcdFx0TUFYX05SX0dFTlNcbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTcwNT12b2lkIGxydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKTtcbmluY2x1ZGUvbGludXgvbW16b25lLmgtNzA2LVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDo3MDc6I2Vsc2UgLyogIUNPTkZJR19MUlVfR0VOICovXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTcwOC1cbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTc1Nz12b2lkIGxydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKVxuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmgtNzYwLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDo3NjE6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTc2Mi1cbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTc2OT1zdHJ1Y3QgbHJ1dmVjIHtcbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTc4OC1cdHVuc2lnbmVkIGxvbmdcdFx0XHRmbGFncztcbmluY2x1ZGUvbGludXgvbW16b25lLmg6Nzg5OiNpZmRlZiBDT05GSUdfTFJVX0dFTlxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC03OTAtXHQvKiBldmljdGFibGUgcGFnZXMgZGl2aWRlZCBpbnRvIGdlbmVyYXRpb25zICovXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTc5MS1cdHN0cnVjdCBscnVfZ2VuX2ZvbGlvXHRcdGxydWdlbjtcbmluY2x1ZGUvbGludXgvbW16b25lLmg6NzkyOiNpZmRlZiBDT05GSUdfTFJVX0dFTl9XQUxLU19NTVVcbmluY2x1ZGUvbGludXgvbW16b25lLmgtNzkzLVx0LyogdG8gY29uY3VycmVudGx5IGl0ZXJhdGUgbHJ1X2dlbl9tbV9saXN0ICovXG4tLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC03OTUtI2VuZGlmXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjc5NjojZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cbmluY2x1ZGUvbGludXgvbW16b25lLmgtNzk3LSNpZmRlZiBDT05GSUdfTUVNQ0dcbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTE0ODE9dHlwZWRlZiBzdHJ1Y3QgcGdsaXN0X2RhdGEge1xuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTU5OC1cbmluY2x1ZGUvbGludXgvbW16b25lLmg6MTU5OTojaWZkZWYgQ09ORklHX0xSVV9HRU5cbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTYwMC1cdC8qIGtzd2FwIG1tIHdhbGsgZGF0YSAqL1xuLS1cbmluY2x1ZGUvbGludXgvc2NoZWQuaD04MjY9c3RydWN0IHRhc2tfc3RydWN0IHtcbi0tXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMTAyNC0jZW5kaWZcbmluY2x1ZGUvbGludXgvc2NoZWQuaDoxMDI1OiNpZmRlZiBDT05GSUdfTFJVX0dFTlxuaW5jbHVkZS9saW51eC9zY2hlZC5oLTEwMjYtXHQvKiB3aGV0aGVyIHRoZSBMUlUgYWxnb3JpdGhtIG1heSBhcHBseSB0byB0aGlzIGFjY2VzcyAqL1xuLS1cbmluY2x1ZGUvbGludXgvc3dhcC5oPTE0Nj1zdHJ1Y3QgcmVjbGFpbV9zdGF0ZSB7XG4tLVxuaW5jbHVkZS9saW51eC9zd2FwLmgtMTQ4LVx0dW5zaWduZWQgbG9uZyByZWNsYWltZWQ7XG5pbmNsdWRlL2xpbnV4L3N3YXAuaDoxNDk6I2lmZGVmIENPTkZJR19MUlVfR0VOXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC0xNTAtXHQvKiBwZXItdGhyZWFkIG1tIHdhbGsgZGF0YSAqL1xuLS1cbmtlcm5lbC9ib3VuZHMuYz0xNz1pbnQgbWFpbih2b2lkKVxuLS1cbmtlcm5lbC9ib3VuZHMuYy0yNS1cdERFRklORShTUElOTE9DS19TSVpFLCBzaXplb2Yoc3BpbmxvY2tfdCkpO1xua2VybmVsL2JvdW5kcy5jOjI2OiNpZmRlZiBDT05GSUdfTFJVX0dFTlxua2VybmVsL2JvdW5kcy5jLTI3LVx0REVGSU5FKExSVV9HRU5fV0lEVEgsIG9yZGVyX2Jhc2VfMihNQVhfTlJfR0VOUyAmIzQzOyAxKSk7XG4tLVxua2VybmVsL2ZvcmsuYz0yNjk0PXBpZF90IGtlcm5lbF9jbG9uZShzdHJ1Y3Qga2VybmVsX2Nsb25lX2FyZ3MgKmFyZ3MpXG4tLVxua2VybmVsL2ZvcmsuYy0yNzcxLVxua2VybmVsL2ZvcmsuYzoyNzcyOlx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0xSVV9HRU5fV0FMS1NfTU1VKSBcdTAwMjZcdTAwMjYgIShjbG9uZV9mbGFncyBcdTAwMjYgQ0xPTkVfVk0pKSB7XG5rZXJuZWwvZm9yay5jLTI3NzMtXHRcdC8qIGxvY2sgdGhlIHRhc2sgdG8gc3luY2hyb25pemUgd2l0aCBtZW1jZyBtaWdyYXRpb24gKi9cbi0tXG5tbS9mb2xpby5jPTMyMj1zdGF0aWMgdm9pZCBfX2xydV9jYWNoZV9hY3RpdmF0ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2ZvbGlvLmMtMzUxLVxubW0vZm9saW8uYzozNTI6I2lmZGVmIENPTkZJR19MUlVfR0VOXG5tbS9mb2xpby5jLTM1My1cbi0tXG5tbS9mb2xpby5jPTM4MD1zdGF0aWMgYm9vbCBscnVfZ2VuX2NsZWFyX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9mb2xpby5jLTM5OC1cbm1tL2ZvbGlvLmM6Mzk5OiNlbHNlIC8qICFDT05GSUdfTFJVX0dFTiAqL1xubW0vZm9saW8uYy00MDAtXG4tLVxubW0vZm9saW8uYz00MDU9c3RhdGljIGJvb2wgbHJ1X2dlbl9jbGVhcl9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vZm9saW8uYy00MDktXG5tbS9mb2xpby5jOjQxMDojZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cbm1tL2ZvbGlvLmMtNDExLVxuLS1cbm1tL21lbWNvbnRyb2wuYz00NjEwPXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfZXhpdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spXG4tLVxubW0vbWVtY29udHJvbC5jLTQ2MjYtXG5tbS9tZW1jb250cm9sLmM6NDYyNzojaWZkZWYgQ09ORklHX0xSVV9HRU5cbm1tL21lbWNvbnRyb2wuYy00NjI4LXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfbHJ1X2dlbl9hdHRhY2goc3RydWN0IGNncm91cF90YXNrc2V0ICp0c2V0KVxuLS1cbm1tL21lbWNvbnRyb2wuYz00NjQ2PXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfbHJ1X2dlbl9hdHRhY2goc3RydWN0IGNncm91cF90YXNrc2V0ICp0c2V0KSB7fVxubW0vbWVtY29udHJvbC5jOjQ2NDc6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXG5tbS9tZW1jb250cm9sLmMtNDY0OC1cbi0tXG5tbS9tZW1vcnkuYz02NzI1PXN0YXRpYyBpbmxpbmUgdm9pZCBtbV9hY2NvdW50X2ZhdWx0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyxcbi0tXG5tbS9tZW1vcnkuYy02Nzc3LVxubW0vbWVtb3J5LmM6Njc3ODojaWZkZWYgQ09ORklHX0xSVV9HRU5cbm1tL21lbW9yeS5jLTY3Nzktc3RhdGljIHZvaWQgbHJ1X2dlbl9lbnRlcl9mYXVsdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5tbS9tZW1vcnkuYz02Nzk0PXN0YXRpYyB2b2lkIGxydV9nZW5fZXhpdF9mYXVsdCh2b2lkKVxuLS1cbm1tL21lbW9yeS5jLTY3OTYtfVxubW0vbWVtb3J5LmM6Njc5NzojZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cbm1tL21lbW9yeS5jLTY3OTgtXG4tLVxubW0vdm1zY2FuLmM9ODI3PWVudW0gZm9saW9fcmVmZXJlbmNlcyB7XG4tLVxubW0vdm1zY2FuLmMtODMyLVxubW0vdm1zY2FuLmM6ODMzOiNpZmRlZiBDT05GSUdfTFJVX0dFTlxubW0vdm1zY2FuLmMtODM0LS8qXG4tLVxubW0vdm1zY2FuLmM9ODY1PXN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcbi0tXG5tbS92bXNjYW4uYy04NjgtfVxubW0vdm1zY2FuLmM6ODY5OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xubW0vdm1zY2FuLmMtODcwLVxuLS1cbm1tL3Ztc2Nhbi5jPTI2ODM9c3RhdGljIGJvb2wgY2FuX2FnZV9hbm9uX3BhZ2VzKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbi0tXG5tbS92bXNjYW4uYy0yNjk0LVxubW0vdm1zY2FuLmM6MjY5NTojaWZkZWYgQ09ORklHX0xSVV9HRU5cbm1tL3Ztc2Nhbi5jLTI2OTYtXG5tbS92bXNjYW4uYz0yNjk3PURFRklORV9TVEFUSUNfS0VZX0ZBTFNFKGxydV9zd2l0Y2gpO1xubW0vdm1zY2FuLmM6MjY5ODojaWZkZWYgQ09ORklHX0xSVV9HRU5fRU5BQkxFRFxubW0vdm1zY2FuLmMtMjY5OS1ERUZJTkVfU1RBVElDX0tFWV9BUlJBWV9UUlVFKGxydV9nZW5fY2FwcywgTlJfTFJVX0dFTl9DQVBTKTtcbi0tXG5tbS92bXNjYW4uYz0yODgzPXN0YXRpYyB2b2lkIHJlc2V0X2Jsb29tX2ZpbHRlcihzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUsIHVuc2lnbmVkIGxvbmcgc2VxKVxuLS1cbm1tL3Ztc2Nhbi5jLTI5MDItXG5tbS92bXNjYW4uYzoyOTAzOiNpZmRlZiBDT05GSUdfTFJVX0dFTl9XQUxLU19NTVVcbm1tL3Ztc2Nhbi5jLTI5MDQtXG4tLVxubW0vdm1zY2FuLmM9MzAxMj12b2lkIGxydV9nZW5fbWlncmF0ZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5tbS92bXNjYW4uYy0zMDQwLVxubW0vdm1zY2FuLmM6MzA0MTojZWxzZSAvKiAhQ09ORklHX0xSVV9HRU5fV0FMS1NfTU1VICovXG5tbS92bXNjYW4uYy0zMDQyLVxuLS1cbm1tL3Ztc2Nhbi5jPTU5NTM9bGF0ZV9pbml0Y2FsbChpbml0X2xydV9nZW4pO1xubW0vdm1zY2FuLmMtNTk1NC1cbm1tL3Ztc2Nhbi5jOjU5NTU6I2Vsc2UgLyogIUNPTkZJR19MUlVfR0VOICovXG5tbS92bXNjYW4uYy01OTU2LVxuLS1cbm1tL3Ztc2Nhbi5jPTU5Njc9c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01OTcxLVxubW0vdm1zY2FuLmM6NTk3MjojZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cbm1tL3Ztc2Nhbi5jLTU5NzMtXG4tLVxubW0vd29ya2luZ3NldC5jPTIxMz1zdGF0aWMgdm9pZCB1bnBhY2tfc2hhZG93KHZvaWQgKnNoYWRvdywgaW50ICptZW1jZ2lkcCwgcGdfZGF0YV90ICoqcGdkYXQsXG4tLVxubW0vd29ya2luZ3NldC5jLTIzMi1cbm1tL3dvcmtpbmdzZXQuYzoyMzM6I2lmZGVmIENPTkZJR19MUlVfR0VOXG5tbS93b3JraW5nc2V0LmMtMjM0LVxuLS1cbm1tL3dvcmtpbmdzZXQuYz0yOTI9c3RhdGljIHZvaWQgbHJ1X2dlbl9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdylcbi0tXG5tbS93b3JraW5nc2V0LmMtMzM2LVxubW0vd29ya2luZ3NldC5jOjMzNzojZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi9cbm1tL3dvcmtpbmdzZXQuYy0zMzgtXG4tLVxubW0vd29ya2luZ3NldC5jPTM1MD1zdGF0aWMgdm9pZCBscnVfZ2VuX3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KVxuLS1cbm1tL3dvcmtpbmdzZXQuYy0zNTMtXG5tbS93b3JraW5nc2V0LmM6MzU0OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xubW0vd29ya2luZ3NldC5jLTM1NS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTk6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ5NTYKCQkJCQkJCW91dHB1dDogMTQ5CgkJCQkJCQl0aG91Z2h0czogNjI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBNR0xSVSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBNR0xSVSBwYXRjaCwgYW5kIGhlcmUmIzM5O3MgdGhlIGJyZWFrZG93biBvZiBteSB0aGlua2luZy4gRmlyc3QsIGBDT05GSUdfTFJVX0dFTmAgaXMgdGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbiBoZXJlLCBhbmQgYENPTkZJR19MUlVfR0VOX0VOQUJMRURgIGVuYWJsZXMgaXQgYnkgZGVmYXVsdC4gU28sIGZvciB0aGUgZnV6emluZyBzZXR1cCwgYExSVV9HRU5gIGFuZCBgTFJVX0dFTl9FTkFCTEVEYCBkZWZpbml0ZWx5IG5lZWQgdG8gYmUgaW5jbHVkZWQgaW4gYEVuYWJsZUNvbmZpZ3NgLiBUaGF0JiMzOTtzIGEgbm8tYnJhaW5lci4KCk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb246IGlzIHRoaXMgcGF0Y2ggaW50cm9kdWNpbmcgZnVuY3Rpb25hbCBjaGFuZ2VzIHNpZ25pZmljYW50IGVub3VnaCB0byB3YXJyYW50IGZ1enppbmc/IEFic29sdXRlbHkuIFRoZSBwYXRjaCB0b3VjaGVzIHRoZSB2ZXJ5IGhlYXJ0IG9mIG1lbW9yeSBtYW5hZ2VtZW50IOKAkyB0aGUgTFJVIGdlbmVyYXRpb24gbG9naWMuIFRoZSBjaGFuZ2VzIHRvIGBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZWAgaW1tZWRpYXRlbHkgY2F1Z2h0IG15IGV5ZTsgdXNpbmcgYXRvbWljIG9wZXJhdGlvbnMgaXMgYSBjcml0aWNhbCBmaXggZm9yIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uLiBBbHNvLCBjaGFuZ2VzIHRvIGBmb2xpb19taWdyYXRlX2ZsYWdzYCwgYGxydV9nZW5fbG9va19hcm91bmRgLCBhbmQgdGhlIHVwZGF0ZXMgaW4gYG1tL3Ztc2Nhbi5jYCBhbGwgc2NyZWFtICYjMzQ7ZnVuY3Rpb25hbCBpbXBhY3QuJiMzNDsgU28sIGBXb3J0aEZ1enppbmdgIGlzIGRlZmluaXRlbHkgdHJ1ZS4KClRoaXMgbGVhZHMgbWUgdG8gYEZvY3VzU3ltYm9sc2AuIEnigJltIGluaXRpYWxseSB0aGlua2luZyBgZm9saW9fbWlncmF0ZV9mbGFnc2AgYW5kIGBscnVfZ2VuX2xvb2tfYXJvdW5kYC4gQnV0IHdhaXQgYSBtaW51dGUsIGBmb2xpb19taWdyYXRlX2ZsYWdzYCBpcyBjYWxsZWQgZnJvbSBgbWlncmF0ZV9wYWdlc2AgYW5kIGBtaWdyYXRlX2RldmljZV9wYWdlc2AuIFBhZ2UgbWlncmF0aW9uIGlzbiYjMzk7dCBhcyBob3QgYXMgcGFnZSBmYXVsdHMgb3IgcmVjbGFpbSwgYnV0IGl0JiMzOTtzIHN0aWxsIGZ1bmRhbWVudGFsIHRvIG1lbW9yeSBtYW5hZ2VtZW50LiBBcyBmb3IgYGxydV9nZW5fbG9va19hcm91bmRgLCB0aGF0IG9uZSBpcyBjYWxsZWQgd2l0aGluIGBmb2xpb19yZWZlcmVuY2VkX29uZWAgZHVyaW5nIHJtYXAgd2Fsa2luZywgd2hpY2ggaXMgYWJzb2x1dGVseSBwYXJ0IG9mIHBhZ2UgcmVjbGFpbS4gSXQmIzM5O3MgYSBiaXQgaG90LCBnaXZlbiB0aGF0IGl0JiMzOTtzIHBhcnQgb2YgTUdMUlUuCgpMZXQmIzM5O3MgZG91YmxlIGNoZWNrLiBHb2luZyB0aHJvdWdoIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucywgSSBzZWUgdGhlIGZvbGxvd2luZyBpbmxpbmVzOiBgZm9saW9fbWlncmF0ZV9scnVfcmVmc2AsIGBmb2xpb19zZXRfbHJ1X3JlZnNgLCBgbHJ1X3JlZnNfc2V0X2ZsYWdzYCwgYGxydV9nZW5fc2V0X2ZsYWdzYCwgYGxydV9nZW5fZnJvbV9mbGFnc2AsIGFuZCBgZm9saW9fZmxhZ3NfaXNfZmlsZV9scnVgLiBUaG9zZSBkb24mIzM5O3QgY29uY2VybiBtZSwgc2luY2UgdGhleSBhcmUgaW5saW5lLiBUaHVzLCB0aGUgb25seSBub24tc3RhdGljIGZ1bmN0aW9ucyBhcmUgYG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplYCwgYGZvbGlvX21pZ3JhdGVfZmxhZ3NgLCBhbmQgYGxydV9nZW5fbG9va19hcm91bmRgLgoKUmlnaHQsIHNvIGFmdGVyIHJldmlld2luZywgYGZvbGlvX21pZ3JhdGVfZmxhZ3NgIGFuZCBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAgc3RheSBpbiBgRm9jdXNTeW1ib2xzYC4gSG93ZXZlciwgYG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplYCBpcyB0b28gaG90IHRvIGluY2x1ZGUuCgpUbyBzdW1tYXJpemUsIHRoaXMgcGF0Y2ggcmVmYWN0b3JzIE1HTFJVJiMzOTtzIHBhZ2UgZmxhZ3MgYW5kIGZpeGVzIGEgcmFjZS4gSXQgdG91Y2hlcyBjb3JlIGxvZ2ljOiBwYWdlIG1pZ3JhdGlvbiBhbmQgcmVjbGFpbS4gVGhlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwsIGFuZCB0aGF0IG1ha2VzIGl0IHJpcGUgZm9yIGZ1enppbmcuCgpPa2F5LCBJIHRoaW5rIEkgaGF2ZSBhIHNvbGlkIHVuZGVyc3RhbmRpbmcsIGFuZCBJJiMzOTttIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTk6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Zm9saW9fbWlncmF0ZV9mbGFncyYjMzQ7LAogICAgJiMzNDtscnVfZ2VuX2xvb2tfYXJvdW5kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBNdWx0aS1HZW4gTFJVIChNR0xSVSkgcGFnZSBmbGFncyBoYW5kbGluZyBhbmQgZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiBgbHJ1X3pvbmVfc2l6ZWAgdXBkYXRlcyBieSB1c2luZyBhdG9taWMgb3BlcmF0aW9ucy4gSXQgbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYywgc3BlY2lmaWNhbGx5IHBhZ2UgbWlncmF0aW9uIChgZm9saW9fbWlncmF0ZV9mbGFnc2ApIGFuZCBwYWdlIHJlY2xhaW0gbG9va2Fyb3VuZCAoYGxydV9nZW5fbG9va19hcm91bmRgKS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIG1ha2luZyB0aGVtIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Zm9saW9fbWlncmF0ZV9mbGFncyYjMzQ7LAogICAgJiMzNDtscnVfZ2VuX2xvb2tfYXJvdW5kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBNdWx0aS1HZW4gTFJVIChNR0xSVSkgcGFnZSBmbGFncyBoYW5kbGluZyBhbmQgZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiBgbHJ1X3pvbmVfc2l6ZWAgdXBkYXRlcyBieSB1c2luZyBhdG9taWMgb3BlcmF0aW9ucy4gSXQgbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYywgc3BlY2lmaWNhbGx5IHBhZ2UgbWlncmF0aW9uIChgZm9saW9fbWlncmF0ZV9mbGFnc2ApIGFuZCBwYWdlIHJlY2xhaW0gbG9va2Fyb3VuZCAoYGxydV9nZW5fbG9va19hcm91bmRgKS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIG1ha2luZyB0aGVtIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE5OjA1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTk6MDU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBpbnRlcm5hbCBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCBzcGVjaWZpY2FsbHkgTFJVIGdlbmVyYXRpb24gYW5kIGZvbGlvIGZsYWdzIG1hbmlwdWxhdGlvbiwgYW5kIGNoYW5nZXMgYGxydV96b25lX3NpemVgIHRvIHVzZSBgYXRvbWljX2xvbmdfdGAuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgdGhhdCBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFsbG9jYXRlIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIG9yIG1vZGlmeSBib3VuZHMgY2hlY2tzIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgbmV3bHkgaW50cm9kdWNlZCBvdXQtcGFyYW1ldGVyIGBpc19maWxlYCBpbiBgZm9saW9fdXBkYXRlX2dlbmAgaXMgYWx3YXlzIGluaXRpYWxpemVkIGJlZm9yZSByZXR1cm5pbmcuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgcmFjZSBjb25kaXRpb25zLCB1c2UtYWZ0ZXItZnJlZSwgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcykgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgb3RoZXIgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAyNTlhMjUyMjM4NzZkMGYyNzNiMzRmZTZhZWYzNDM2NmI3NTYwOTllCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMjUgMTk6MDM6MjEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCmluZGV4IDIxNWUyZTg3ZjQyYjIuLjdiODlkMGNiNWY2YzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCkBAIC0xMTMsNyAmIzQzOzExMyw3IEBAIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlIHsKIAkvKiBGaWVsZHMgd2hpY2ggZ2V0IHVwZGF0ZWQgb2Z0ZW4gYXQgdGhlIGVuZC4gKi8KIAlzdHJ1Y3QgbHJ1dmVjCQlscnV2ZWM7CiAJQ0FDSEVMSU5FX1BBRERJTkcoX3BhZDJfKTsKLQl1bnNpZ25lZCBsb25nCQlscnVfem9uZV9zaXplW01BWF9OUl9aT05FU11bTlJfTFJVX0xJU1RTXTsKJiM0MzsJYXRvbWljX2xvbmdfdAkJbHJ1X3pvbmVfc2l6ZVtNQVhfTlJfWk9ORVNdW05SX0xSVV9MSVNUU107CiAJc3RydWN0IG1lbV9jZ3JvdXBfcmVjbGFpbV9pdGVyCWl0ZXI7CiAKIAkvKgpAQCAtOTAyLDEwICYjNDM7OTAyLDE1IEBAIHN0YXRpYyBpbmxpbmUKIHVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9nZXRfem9uZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiAJCWVudW0gbHJ1X2xpc3QgbHJ1LCBpbnQgem9uZV9pZHgpCiB7CiYjNDM7CWxvbmcgdmFsOwogCXN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICptejsKIAogCW16ID0gY29udGFpbmVyX29mKGxydXZlYywgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUsIGxydXZlYyk7Ci0JcmV0dXJuIFJFQURfT05DRShtei0mZ3Q7bHJ1X3pvbmVfc2l6ZVt6b25lX2lkeF1bbHJ1XSk7CiYjNDM7CXZhbCA9IGF0b21pY19sb25nX3JlYWQoJmFtcDttei0mZ3Q7bHJ1X3pvbmVfc2l6ZVt6b25lX2lkeF1bbHJ1XSk7CiYjNDM7CWlmIChXQVJOX09OX09OQ0UodmFsICZsdDsgMCkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcmV0dXJuIHZhbDsKIH0KIAogdm9pZCBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzayk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oIGIvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaAppbmRleCA2MjFjODY1M2Q4ZjdlLi44Y2Y4Mjk4OWVjMjYzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmgKQEAgLTEwLDYgJiM0MzsxMCwxMSBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3VzZXJmYXVsdGZkX2suaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9sZWFmb3BzLmgmZ3Q7CiAKJiM0MztzdGF0aWMgaW5saW5lIGludCBmb2xpb19mbGFnc19pc19maWxlX2xydShjb25zdCB1bnNpZ25lZCBsb25nICpmbGFncykKJiM0Mzt7CiYjNDM7CXJldHVybiAhdGVzdF9iaXQoUEdfc3dhcGJhY2tlZCwgZmxhZ3MpOwomIzQzO30KJiM0MzsKIC8qKgogICogZm9saW9faXNfZmlsZV9scnUgLSBTaG91bGQgdGhlIGZvbGlvIGJlIG9uIGEgZmlsZSBMUlUgb3IgYW5vbiBMUlU/CiAgKiBAZm9saW86IFRoZSBmb2xpbyB0byB0ZXN0LgpAQCAtMjcsNyAmIzQzOzMyLDcgQEAKICAqLwogc3RhdGljIGlubGluZSBpbnQgZm9saW9faXNfZmlsZV9scnUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKIHsKLQlyZXR1cm4gIWZvbGlvX3Rlc3Rfc3dhcGJhY2tlZChmb2xpbyk7CiYjNDM7CXJldHVybiBmb2xpb19mbGFnc19pc19maWxlX2xydShjb25zdF9mb2xpb19mbGFncyhmb2xpbywgMCkpOwogfQogCiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX191cGRhdGVfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLApAQCAtMTQyLDEwICYjNDM7MTQ3LDQyIEBAIHN0YXRpYyBpbmxpbmUgaW50IGxydV90aWVyX2Zyb21fcmVmcyhpbnQgcmVmcywgYm9vbCB3b3JraW5nc2V0KQogCXJldHVybiB3b3JraW5nc2V0ID8gTUFYX05SX1RJRVJTIC0gMSA6IG9yZGVyX2Jhc2VfMihyZWZzKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X3JlZnMoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKJiM0MzsvKioKJiM0MzsgKiBscnVfZ2VuX2Zyb21fZmxhZ3MgLSBSZXR1cm4gdGhlIExSVSBnZW5lcmF0aW9uIG51bWJlciBmcm9tIGZvbGlvIGZsYWdzLgomIzQzOyAqIEBmbGFnczogZm9saW8gZmxhZ3MKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IEEgbnVtYmVyIGJldHdlZW4gMCBhbmQgKE1BWF9OUl9HRU5TIC0gMSksIGluY2x1c2l2ZS4gUmV0dXJucwomIzQzOyAqIC0xIGlmIHRoZSBmbGFncyBpbmRpY2F0ZSB0aGUgZm9saW8gaXMgb2ZmIHRoZSBsaXN0IChlLmcuLCBpc29sYXRlZCkuCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSBpbnQgbHJ1X2dlbl9mcm9tX2ZsYWdzKHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiYjNDM7ewomIzQzOwlpbnQgZ2VuID0gKChmbGFncyAmYW1wOyBMUlVfR0VOX01BU0spICZndDsmZ3Q7IExSVV9HRU5fUEdPRkYpOwomIzQzOwomIzQzOwlCVUlMRF9CVUdfT04oTFJVX0dFTl9NQVNLICZhbXA7IExSVV9SRUZTX01BU0spOwomIzQzOwlnZW4gLT0gMTsKJiM0MzsJVk1fV0FSTl9PTl9PTkNFKGdlbiAhPSAtMSAmYW1wOyZhbXA7IGdlbiAmZ3Q7PSBNQVhfTlJfR0VOUyk7CiYjNDM7CXJldHVybiBnZW47CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGxydV9nZW5fc2V0X2ZsYWdzIC0gU2V0IHRoZSBMUlUgZ2VuZXJhdGlvbiBudW1iZXIgdG8gc3BlY2lmaWVkIGZvbGlvIGZsYWdzLgomIzQzOyAqIEBmbGFnczogcG9pbnRlciB0byB0aGUgZm9saW8gZmxhZ3MKJiM0MzsgKiBAZ2VuOiBnZW5lcmF0aW9uIG51bWJlciwgYmV0d2VlbiAwIGFuZCAoTUFYX05SX0dFTlMgLSAxKSwgaW5jbHVzaXZlLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBscnVfZ2VuX3NldF9mbGFncyh1bnNpZ25lZCBsb25nICpmbGFncywgaW50IGdlbikKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLSZndDtmbGFncy5mKTsKJiM0MzsJVk1fV0FSTl9PTl9PTkNFKGdlbiAmZ3Q7PSBNQVhfTlJfR0VOUyB8fCBnZW4gJmx0OyAwKTsKJiM0MzsKJiM0MzsJKmZsYWdzICZhbXA7PSB+TFJVX0dFTl9NQVNLOwomIzQzOwkqZmxhZ3MgfD0gKGdlbiAmIzQzOyAxVUwpICZsdDsmbHQ7IExSVV9HRU5fUEdPRkY7CiYjNDM7fQogCiYjNDM7LyoqCiYjNDM7ICogbHJ1X3JlZnNfZnJvbV9mbGFncyAtIFJldHVybiBMUlUgcmVmZXJlbmNlZCAvIGFjY2VzcyBjb3VudCBmcm9tIGZvbGlvIGZsYWdzLgomIzQzOyAqIEBmbGFnczogZm9saW8gZmxhZ3MKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIGludCBscnVfcmVmc19mcm9tX2ZsYWdzKHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiYjNDM7ewogCWlmICghKGZsYWdzICZhbXA7IEJJVChQR19yZWZlcmVuY2VkKSkpCiAJCXJldHVybiAwOwogCS8qCkBAIC0xNTUsMTEgJiM0MzsxOTIsNDAgQEAgc3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X3JlZnMoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKIAlyZXR1cm4gKChmbGFncyAmYW1wOyBMUlVfUkVGU19NQVNLKSAmZ3Q7Jmd0OyBMUlVfUkVGU19QR09GRikgJiM0MzsgMTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X2dlbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzOy8qKgomIzQzOyAqIGxydV9yZWZzX3NldF9mbGFncyAtIFNldCB0aGUgTFJVIHJlZmVyZW5jZWQgLyBhY2Nlc3MgY291bnQgdG8gc3BlY2lmaWVkIGZvbGlvIGZsYWdzLgomIzQzOyAqIEBmbGFnczogcG9pbnRlciB0byB0aGUgZm9saW8gZmxhZ3MKJiM0MzsgKiBAcmVmczogcmVmZXJlbmNlZCAvIGFjY2VzcyBjb3VudCBudW1iZXIsIGJldHdlZW4gMCBhbmQgTFJVX1JFRlNfTUFYLCBpbmNsdXNpdmUuCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGxydV9yZWZzX3NldF9mbGFncyh1bnNpZ25lZCBsb25nICpmbGFncywgdW5zaWduZWQgaW50IHJlZnMpCiYjNDM7ewomIzQzOwlWTV9XQVJOX09OX09OQ0UocmVmcyAmZ3Q7IExSVV9SRUZTX01BWCk7CiYjNDM7CUJVSUxEX0JVR19PTihMUlVfUkVGU19NQVggIT0gKExSVV9SRUZTX01BU0sgJmd0OyZndDsgTFJVX1JFRlNfUEdPRkYpICYjNDM7IDEpOwomIzQzOwomIzQzOwkqZmxhZ3MgJmFtcDs9IH5MUlVfUkVGU19GTEFHUzsKJiM0MzsJaWYgKCFyZWZzKQomIzQzOwkJcmV0dXJuOwomIzQzOwkqZmxhZ3MgfD0gKEJJVChQR19yZWZlcmVuY2VkKSB8ICgocmVmcyAtIDFVTCkgJmx0OyZsdDsgTFJVX1JFRlNfUEdPRkYpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X3JlZnMoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKJiM0Mzt7CiYjNDM7CXJldHVybiBscnVfcmVmc19mcm9tX2ZsYWdzKFJFQURfT05DRSgqY29uc3RfZm9saW9fZmxhZ3MoZm9saW8sIDApKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19zZXRfbHJ1X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IHJlZnMpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFncyA9IFJFQURfT05DRShmb2xpby0mZ3Q7ZmxhZ3MuZik7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7CiAKLQlyZXR1cm4gKChmbGFncyAmYW1wOyBMUlVfR0VOX01BU0spICZndDsmZ3Q7IExSVV9HRU5fUEdPRkYpIC0gMTsKJiM0MzsJZG8gewomIzQzOwkJbmV3X2ZsYWdzID0gb2xkX2ZsYWdzOwomIzQzOwkJbHJ1X3JlZnNfc2V0X2ZsYWdzKCZhbXA7bmV3X2ZsYWdzLCByZWZzKTsKJiM0MzsJfSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgJmFtcDtvbGRfZmxhZ3MsIG5ld19mbGFncykpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfZ2VuKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7ewomIzQzOwlyZXR1cm4gbHJ1X2dlbl9mcm9tX2ZsYWdzKFJFQURfT05DRSgqY29uc3RfZm9saW9fZmxhZ3MoZm9saW8sIDApKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2lzX2FjdGl2ZShjb25zdCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBnZW4pCkBAIC0yNzAsNyAmIzQzOzMzNiw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2FkZF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShzZXEpOwogCWZsYWdzID0gKGdlbiAmIzQzOyAxVUwpICZsdDsmbHQ7IExSVV9HRU5fUEdPRkY7CiAJLyogc2VlIHRoZSBjb21tZW50IG9uIE1JTl9OUl9HRU5TIGFib3V0IFBHX2FjdGl2ZSAqLwotCXNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX0dFTl9NQVNLIHwgQklUKFBHX2FjdGl2ZSksIGZsYWdzKTsKJiM0MzsJc2V0X21hc2tfYml0cyhmb2xpb19mbGFncyhmb2xpbywgMCksIExSVV9HRU5fTUFTSyB8IEJJVChQR19hY3RpdmUpLCBmbGFncyk7CiAKIAlscnVfZ2VuX3VwZGF0ZV9zaXplKGxydXZlYywgZm9saW8sIC0xLCBnZW4pOwogCS8qIGZvciBmb2xpb19yb3RhdGVfcmVjbGFpbWFibGUoKSAqLwpAQCAtMjk1LDcgJiM0MzszNjEsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9kZWxfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCiAJLyogZm9yIGZvbGlvX21pZ3JhdGVfZmxhZ3MoKSAqLwogCWZsYWdzID0gIXJlY2xhaW1pbmcgJmFtcDsmYW1wOyBscnVfZ2VuX2lzX2FjdGl2ZShscnV2ZWMsIGdlbikgPyBCSVQoUEdfYWN0aXZlKSA6IDA7Ci0JZmxhZ3MgPSBzZXRfbWFza19iaXRzKCZhbXA7Zm9saW8tJmd0O2ZsYWdzLmYsIExSVV9HRU5fTUFTSywgZmxhZ3MpOwomIzQzOwlmbGFncyA9IHNldF9tYXNrX2JpdHMoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBMUlVfR0VOX01BU0ssIGZsYWdzKTsKIAlnZW4gPSAoKGZsYWdzICZhbXA7IExSVV9HRU5fTUFTSykgJmd0OyZndDsgTFJVX0dFTl9QR09GRikgLSAxOwogCiAJbHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCBnZW4sIC0xKTsKQEAgLTMwNCwxMSAmIzQzOzM3MCwxOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9kZWxfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCXJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fbWlncmF0ZV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZCkKJiM0MzsvKioKJiM0MzsgKiBmb2xpb19taWdyYXRlX2xydV9yZWZzIC0gY29weSB0aGUgcmVmZXJlbmNlIHN0YXRlIHRvIGEgbmV3IGZvbGlvCiYjNDM7ICogQG5ldzogdGhlIGRlc3RpbmF0aW9uIGZvbGlvCiYjNDM7ICogQG9sZDogdGhlIHNvdXJjZSBmb2xpbwomIzQzOyAqCiYjNDM7ICogVHJhbnNmZXIgdGhlIHJlZmVyZW5jZSBzdGF0ZSB0byBAbmV3IGR1cmluZyBtaWdyYXRpb246IHRoZSBNR0xSVQomIzQzOyAqIHJlZnMgY291bnQsIGluY2x1ZGluZyBQR19yZWZlcmVuY2VkLCBvciBqdXN0IFBHX3JlZmVyZW5jZWQgZm9yIHRoZQomIzQzOyAqIGFjdGl2ZS9pbmFjdGl2ZSBMUlUuCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKQogewotCXVuc2lnbmVkIGxvbmcgcmVmcyA9IFJFQURfT05DRShvbGQtJmd0O2ZsYWdzLmYpICZhbXA7IExSVV9SRUZTX01BU0s7Ci0KLQlzZXRfbWFza19iaXRzKCZhbXA7bmV3LSZndDtmbGFncy5mLCBMUlVfUkVGU19NQVNLLCByZWZzKTsKJiM0MzsJQlVJTERfQlVHX09OKExSVV9SRUZTX01BU0sgJmFtcDsgQklUKFBHX3JlZmVyZW5jZWQpKTsKJiM0MzsJZm9saW9fc2V0X2xydV9yZWZzKG5ldywgZm9saW9fbHJ1X3JlZnMob2xkKSk7CiB9CiAjZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi8KIApAQCAtMzM3LDkgJiM0Mzs0MTEsMTAgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZGVsX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywKIAlyZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19taWdyYXRlX3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19taWdyYXRlX2xydV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZCkKIHsKLQomIzQzOwlpZiAoZm9saW9fdGVzdF9yZWZlcmVuY2VkKG9sZCkpCiYjNDM7CQlmb2xpb19zZXRfcmVmZXJlbmNlZChuZXcpOwogfQogI2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oCmluZGV4IDk0ZjljM2ZmNTQxNjAuLjliMjdjZjUzYmRiYzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW16b25lLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaApAQCAtNDkyLDExICYjNDM7NDkyLDE0IEBAIGVudW0gbHJ1dmVjX2ZsYWdzIHsKICAqIGZvbGlvLSZndDtmbGFncywgbWFza2VkIGJ5IExSVV9SRUZTX01BU0suCiAgKi8KICNkZWZpbmUgTUFYX05SX1RJRVJTCQk0VQomIzQzOyNkZWZpbmUgTFJVX1RJRVJfTUlOCQkwVQomIzQzOyNkZWZpbmUgTFJVX1RJRVJfTUFYCQkoTUFYX05SX1RJRVJTIC0gMSkKIAogI2lmbmRlZiBfX0dFTkVSQVRJTkdfQk9VTkRTX0gKIAogI2RlZmluZSBMUlVfR0VOX01BU0sJCSgoQklUKExSVV9HRU5fV0lEVEgpIC0gMSkgJmx0OyZsdDsgTFJVX0dFTl9QR09GRikKICNkZWZpbmUgTFJVX1JFRlNfTUFTSwkJKChCSVQoTFJVX1JFRlNfV0lEVEgpIC0gMSkgJmx0OyZsdDsgTFJVX1JFRlNfUEdPRkYpCiYjNDM7I2RlZmluZSBMUlVfUkVGU19NQVgJCUJJVChMUlVfUkVGU19XSURUSCkKIAogLyoKICAqIEZvciBmb2xpb3MgYWNjZXNzZWQgbXVsdGlwbGUgdGltZXMgdGhyb3VnaCBmaWxlIGRlc2NyaXB0b3JzLApkaWZmIC0tZ2l0IGEvbW0vZm9saW8uYyBiL21tL2ZvbGlvLmMKaW5kZXggYzAyZGNlYTljMDNjMi4uYTkzMjA1OTA1N2FjMSAxMDA2NDQKLS0tIGEvbW0vZm9saW8uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9mb2xpby5jCkBAIC0zNTMsMjYgJiM0MzszNTMsMjggQEAgc3RhdGljIHZvaWQgX19scnVfY2FjaGVfYWN0aXZhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbykKIAogc3RhdGljIHZvaWQgbHJ1X2dlbl9pbmNfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewotCXVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tJmd0O2ZsYWdzLmYpOwomIzQzOwl1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKCpmb2xpb19mbGFncyhmb2xpbywgMCkpOwomIzQzOwlpbnQgcmVmczsKIAogCWlmIChmb2xpb190ZXN0X3VuZXZpY3RhYmxlKGZvbGlvKSkKIAkJcmV0dXJuOwogCiAJLyogc2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTICovCi0JaWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pKSB7Ci0JCXNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgQklUKFBHX3JlZmVyZW5jZWQpKTsKJiM0MzsJaWYgKCFmb2xpb19scnVfcmVmcyhmb2xpbykpIHsKJiM0MzsJCWZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMSk7CiAJCXJldHVybjsKIAl9CiAKIAlkbyB7Ci0JCWlmICgob2xkX2ZsYWdzICZhbXA7IExSVV9SRUZTX01BU0spID09IExSVV9SRUZTX01BU0spIHsKJiM0MzsJCW5ld19mbGFncyA9IG9sZF9mbGFnczsKJiM0MzsJCXJlZnMgPSBscnVfcmVmc19mcm9tX2ZsYWdzKG9sZF9mbGFncyk7CiYjNDM7CQlpZiAocmVmcyA9PSBMUlVfUkVGU19NQVgpIHsKIAkJCWlmICghZm9saW9fdGVzdF93b3JraW5nc2V0KGZvbGlvKSkKIAkJCQlmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7CiAJCQlyZXR1cm47CiAJCX0KLQotCQluZXdfZmxhZ3MgPSBvbGRfZmxhZ3MgJiM0MzsgQklUKExSVV9SRUZTX1BHT0ZGKTsKLQl9IHdoaWxlICghdHJ5X2NtcHhjaGcoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgJmFtcDtvbGRfZmxhZ3MsIG5ld19mbGFncykpOwomIzQzOwkJbHJ1X3JlZnNfc2V0X2ZsYWdzKCZhbXA7bmV3X2ZsYWdzLCByZWZzICYjNDM7IDEpOwomIzQzOwl9IHdoaWxlICghdHJ5X2NtcHhjaGcoZm9saW9fZmxhZ3MoZm9saW8sIDApLCAmYW1wO29sZF9mbGFncywgbmV3X2ZsYWdzKSk7CiB9CiAKIHN0YXRpYyBib29sIGxydV9nZW5fY2xlYXJfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQpAQCAtMzg0LDcgJiM0MzszODYsOCBAQCBzdGF0aWMgYm9vbCBscnVfZ2VuX2NsZWFyX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbykKIAlpZiAoZ2VuICZsdDsgMCkKIAkJcmV0dXJuIHRydWU7CiAKLQlzZXRfbWFza19iaXRzKCZhbXA7Zm9saW8tJmd0O2ZsYWdzLmYsIExSVV9SRUZTX0ZMQUdTIHwgQklUKFBHX3dvcmtpbmdzZXQpLCAwKTsKJiM0MzsJZm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTsKJiM0MzsJZm9saW9fY2xlYXJfd29ya2luZ3NldChmb2xpbyk7CiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJc2VxID0gUkVBRF9PTkNFKGZvbGlvX2xydXZlYyhmb2xpbyktJmd0O2xydWdlbi5taW5fc2VxW3R5cGVdKTsKZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuYwppbmRleCAxMWI4NWY0YjY4MjhiLi5hNzU3MmRlZDU2YzlkIDEwMDY0NAotLS0gYS9tbS9tZW1jb250cm9sLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC5jCkBAIC0xNTI5LDI4ICYjNDM7MTUyOSwxMiBAQCB2b2lkIG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBscnVfbGlzdCBscnUsCiAJCQkJaW50IHppZCwgbG9uZyBucl9wYWdlcykKIHsKIAlzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXo7Ci0JdW5zaWduZWQgbG9uZyAqbHJ1X3NpemU7Ci0JbG9uZyBzaXplOwogCiAJaWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSkKIAkJcmV0dXJuOwogCiAJbXogPSBjb250YWluZXJfb2YobHJ1dmVjLCBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSwgbHJ1dmVjKTsKLQlscnVfc2l6ZSA9ICZhbXA7bXotJmd0O2xydV96b25lX3NpemVbemlkXVtscnVdOwotCi0JaWYgKG5yX3BhZ2VzICZsdDsgMCkKLQkJKmxydV9zaXplICYjNDM7PSBucl9wYWdlczsKLQotCXNpemUgPSAqbHJ1X3NpemU7Ci0JaWYgKFdBUk5fT05DRShzaXplICZsdDsgMCwKLQkJJiMzNDslcyglcCwgJWQsICVsZCk6IGxydV9zaXplICVsZFxuJiMzNDssCi0JCV9fZnVuY19fLCBscnV2ZWMsIGxydSwgbnJfcGFnZXMsIHNpemUpKSB7Ci0JCVZNX0JVR19PTigxKTsKLQkJKmxydV9zaXplID0gMDsKLQl9Ci0KLQlpZiAobnJfcGFnZXMgJmd0OyAwKQotCQkqbHJ1X3NpemUgJiM0Mzs9IG5yX3BhZ2VzOwomIzQzOwlhdG9taWNfbG9uZ19hZGQobnJfcGFnZXMsICZhbXA7bXotJmd0O2xydV96b25lX3NpemVbemlkXVtscnVdKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9tbS9taWdyYXRlLmMgYi9tbS9taWdyYXRlLmMKaW5kZXggMTViNDU4MzJiY2ZhNy4uYTM2OWQwYzk1YzM4NiAxMDA2NDQKLS0tIGEvbW0vbWlncmF0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21pZ3JhdGUuYwpAQCAtNzc2LDggJiM0Mzs3NzYsOSBAQCB2b2lkIGZvbGlvX21pZ3JhdGVfZmxhZ3Moc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpmb2xpbykKIHsKIAlpbnQgY3B1cGlkOwogCi0JaWYgKGZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykpCi0JCWZvbGlvX3NldF9yZWZlcmVuY2VkKG5ld2ZvbGlvKTsKJiM0MzsJLyogQ29weSB0aGUgcmVmZXJlbmNlIHN0YXRlLCBpbmNsdWRpbmcgUEdfcmVmZXJlbmNlZCAqLwomIzQzOwlmb2xpb19taWdyYXRlX2xydV9yZWZzKG5ld2ZvbGlvLCBmb2xpbyk7CiYjNDM7CiAJaWYgKGZvbGlvX3Rlc3RfdXB0b2RhdGUoZm9saW8pKQogCQlmb2xpb19tYXJrX3VwdG9kYXRlKG5ld2ZvbGlvKTsKIAlpZiAoZm9saW9fdGVzdF9jbGVhcl9hY3RpdmUoZm9saW8pKSB7CkBAIC04MDcsNyAmIzQzOzgwOCw2IEBAIHZvaWQgZm9saW9fbWlncmF0ZV9mbGFncyhzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCWlmIChmb2xpb190ZXN0X2lkbGUoZm9saW8pKQogCQlmb2xpb19zZXRfaWRsZShuZXdmb2xpbyk7CiAKLQlmb2xpb19taWdyYXRlX3JlZnMobmV3Zm9saW8sIGZvbGlvKTsKIAkvKgogCSAqIENvcHkgTlVNQSBpbmZvcm1hdGlvbiB0byB0aGUgbmV3IHBhZ2UsIHRvIHByZXZlbnQgb3Zlci1lYWdlcgogCSAqIGZ1dHVyZSBtaWdyYXRpb25zIG9mIHRoaXMgc2FtZSBwYWdlLgpkaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uYwppbmRleCA3M2E4MWI0YTNlMTY0Li42ZmRhOTQ4YWVjZjJjIDEwMDY0NAotLS0gYS9tbS92bXNjYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uYwpAQCAtODQzLDE5ICYjNDM7ODQzLDIyIEBAIHN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncykKIAlpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykgJmFtcDsmYW1wOyAhZm9saW9fdGVzdF93b3JraW5nc2V0KGZvbGlvKSkgewogCQkvKiBBY3RpdmF0ZSBmaWxlLWJhY2tlZCBleGVjdXRhYmxlIGZvbGlvcyBhZnRlciBmaXJzdCB1c2FnZS4gKi8KIAkJaWYgKGlzX2V4ZWNfZmlsZV9mb2xpbyhmb2xpbywgdm1hX2ZsYWdzKSkgewotCQkJc2V0X21hc2tfYml0cygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX3dvcmtpbmdzZXQpKTsKJiM0MzsJCQlmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7CiYjNDM7CQkJZm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTsKIAkJCXJldHVybiB0cnVlOwogCQl9CiAKLQkJc2V0X21hc2tfYml0cygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCBMUlVfUkVGU19NQVNLLCBCSVQoUEdfcmVmZXJlbmNlZCkpOwomIzQzOwkJZm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAxKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KIAogCS8qIFByb21vdGUgb24gc2Vjb25kIGFjY2VzcyAqLwotCWlmIChmb2xpb19scnVfcmVmcyhmb2xpbykgJmd0OyAxKQotCQlzZXRfbWFza19iaXRzKCZhbXA7Zm9saW8tJmd0O2ZsYWdzLmYsIExSVV9SRUZTX0ZMQUdTLCBCSVQoUEdfd29ya2luZ3NldCkpOwotCWVsc2UKJiM0MzsJaWYgKGZvbGlvX2xydV9yZWZzKGZvbGlvKSAmZ3Q7IDEpIHsKJiM0MzsJCWZvbGlvX3NldF93b3JraW5nc2V0KGZvbGlvKTsKJiM0MzsJCWZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7CiYjNDM7CX0gZWxzZSB7CiAJCWZvbGlvX21hcmtfYWNjZXNzZWQoZm9saW8pOwomIzQzOwl9CiAJcmV0dXJuIHRydWU7CiB9CiAjZWxzZQpAQCAtMzE5NSw4ICYjNDM7MzE5OCw4IEBAIHN0cnVjdCBjdHJsX3BvcyB7CiAJaW50IGdhaW47CiB9OwogCi1zdGF0aWMgdm9pZCByZWFkX2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCB0aWVyLCBpbnQgZ2FpbiwKLQkJCSAgc3RydWN0IGN0cmxfcG9zICpwb3MpCiYjNDM7c3RhdGljIHZvaWQgcmVhZF9jdHJsX3BvcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgdGllcl9taW4sCiYjNDM7CQkJICBpbnQgdGllcl9tYXgsIGludCBnYWluLCBzdHJ1Y3QgY3RybF9wb3MgKnBvcykKIHsKIAlpbnQgaTsKIAlzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gJmFtcDtscnV2ZWMtJmd0O2xydWdlbjsKQEAgLTMyMDUsNyAmIzQzOzMyMDgsNyBAQCBzdGF0aWMgdm9pZCByZWFkX2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCB0aWVyLCBpbnQgZ2FpbiwKIAlwb3MtJmd0O2dhaW4gPSBnYWluOwogCXBvcy0mZ3Q7cmVmYXVsdGVkID0gcG9zLSZndDt0b3RhbCA9IDA7CiAKLQlmb3IgKGkgPSB0aWVyICUgTUFYX05SX1RJRVJTOyBpICZsdDs9IG1pbih0aWVyLCBNQVhfTlJfVElFUlMgLSAxKTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJZm9yIChpID0gdGllcl9taW47IGkgJmx0Oz0gdGllcl9tYXg7IGkmIzQzOyYjNDM7KSB7CiAJCXBvcy0mZ3Q7cmVmYXVsdGVkICYjNDM7PSBscnVnZW4tJmd0O2F2Z19yZWZhdWx0ZWRbdHlwZV1baV0gJiM0MzsKIAkJCQkgIGF0b21pY19sb25nX3JlYWQoJmFtcDtscnVnZW4tJmd0O3JlZmF1bHRlZFtoaXN0XVt0eXBlXVtpXSk7CiAJCXBvcy0mZ3Q7dG90YWwgJiM0Mzs9IGxydWdlbi0mZ3Q7YXZnX3RvdGFsW3R5cGVdW2ldICYjNDM7CkBAIC0zMjY2LDExICYjNDM7MzI2OSwxMSBAQCBzdGF0aWMgYm9vbCBwb3NpdGl2ZV9jdHJsX2VycihzdHJ1Y3QgY3RybF9wb3MgKnNwLCBzdHJ1Y3QgY3RybF9wb3MgKnB2KQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyogcHJvbW90ZSBwYWdlcyBhY2Nlc3NlZCB0aHJvdWdoIHBhZ2UgdGFibGVzICovCi1zdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGdlbiwgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncykKJiM0MztzdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5ld19nZW4sIGludCAqaXNfZmlsZSwKJiM0MzsJCQkgICAgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncykKIHsKLQl1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLSZndDtmbGFncy5mKTsKLQotCVZNX1dBUk5fT05fT05DRShnZW4gJmd0Oz0gTUFYX05SX0dFTlMpOwomIzQzOwl1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKCpmb2xpb19mbGFncyhmb2xpbywgMCkpOwomIzQzOwlpbnQgb2xkX2dlbjsKIAogCS8qCiAJICogU2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTLCBhbmQgYWN0aXZhdGUgZmlsZS1iYWNrZWQKQEAgLTMyNzksMjAgJiM0MzszMjgyLDI1IEBAIHN0YXRpYyBpbnQgZm9saW9fdXBkYXRlX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgZ2VuLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hCiAJICovCiAJaWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pICZhbXA7JmFtcDsgIWZvbGlvX3Rlc3Rfd29ya2luZ3NldChmb2xpbykgJmFtcDsmYW1wOwogCSAgICAhaXNfZXhlY19maWxlX2ZvbGlvKGZvbGlvLCB2bWFfZmxhZ3MpKSB7Ci0JCXNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgQklUKFBHX3JlZmVyZW5jZWQpKTsKJiM0MzsJCWZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMSk7CiAJCXJldHVybiAtMTsKIAl9CiAKIAlkbyB7CiYjNDM7CQlvbGRfZ2VuID0gbHJ1X2dlbl9mcm9tX2ZsYWdzKG9sZF9mbGFncyk7CiYjNDM7CQluZXdfZmxhZ3MgPSBvbGRfZmxhZ3M7CiYjNDM7CiAJCS8qIGxydV9nZW5fZGVsX2ZvbGlvKCkgaGFzIGlzb2xhdGVkIHRoaXMgcGFnZT8gKi8KLQkJaWYgKCEob2xkX2ZsYWdzICZhbXA7IExSVV9HRU5fTUFTSykpCi0JCQlyZXR1cm4gLTE7CiYjNDM7CQlpZiAob2xkX2dlbiAmbHQ7IDApCiYjNDM7CQkJYnJlYWs7CiAKLQkJbmV3X2ZsYWdzID0gb2xkX2ZsYWdzICZhbXA7IH4oTFJVX0dFTl9NQVNLIHwgTFJVX1JFRlNfRkxBR1MpOwotCQluZXdfZmxhZ3MgfD0gKChnZW4gJiM0MzsgMVVMKSAmbHQ7Jmx0OyBMUlVfR0VOX1BHT0ZGKSB8IEJJVChQR193b3JraW5nc2V0KTsKLQl9IHdoaWxlICghdHJ5X2NtcHhjaGcoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgJmFtcDtvbGRfZmxhZ3MsIG5ld19mbGFncykpOwomIzQzOwkJbHJ1X2dlbl9zZXRfZmxhZ3MoJmFtcDtuZXdfZmxhZ3MsIG5ld19nZW4pOwomIzQzOwkJbHJ1X3JlZnNfc2V0X2ZsYWdzKCZhbXA7bmV3X2ZsYWdzLCAwKTsKJiM0MzsJCW5ld19mbGFncyB8PSBCSVQoUEdfd29ya2luZ3NldCk7CiYjNDM7CX0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksICZhbXA7b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTsKIAotCXJldHVybiAoKG9sZF9mbGFncyAmYW1wOyBMUlVfR0VOX01BU0spICZndDsmZ3Q7IExSVV9HRU5fUEdPRkYpIC0gMTsKJiM0MzsJKmlzX2ZpbGUgPSBmb2xpb19mbGFnc19pc19maWxlX2xydSgmYW1wO29sZF9mbGFncyk7CiYjNDM7CXJldHVybiBvbGRfZ2VuOwogfQogCiAvKiBwcm90ZWN0IHBhZ2VzIGFjY2Vzc2VkIG11bHRpcGxlIHRpbWVzIHRocm91Z2ggZmlsZSBkZXNjcmlwdG9ycyAqLwpAQCAtMzMwMSwyMSAmIzQzOzMzMDksMjAgQEAgc3RhdGljIGludCBmb2xpb19pbmNfZ2VuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbykKIAlpbnQgdHlwZSA9IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTsKIAlzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gJmFtcDtscnV2ZWMtJmd0O2xydWdlbjsKIAlpbnQgbmV3X2dlbiwgb2xkX2dlbiA9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLSZndDttaW5fc2VxW3R5cGVdKTsKLQl1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLSZndDtmbGFncy5mKTsKLQotCVZNX1dBUk5fT05fT05DRV9GT0xJTyghKG9sZF9mbGFncyAmYW1wOyBMUlVfR0VOX01BU0spLCBmb2xpbyk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7CiAKIAlkbyB7Ci0JCW5ld19nZW4gPSAoKG9sZF9mbGFncyAmYW1wOyBMUlVfR0VOX01BU0spICZndDsmZ3Q7IExSVV9HRU5fUEdPRkYpIC0gMTsKJiM0MzsJCW5ld19nZW4gPSBscnVfZ2VuX2Zyb21fZmxhZ3Mob2xkX2ZsYWdzKTsKJiM0MzsKIAkJLyogZm9saW9fdXBkYXRlX2dlbigpIGhhcyBwcm9tb3RlZCB0aGlzIHBhZ2U/ICovCiAJCWlmIChuZXdfZ2VuICZndDs9IDAgJmFtcDsmYW1wOyBuZXdfZ2VuICE9IG9sZF9nZW4pCiAJCQlyZXR1cm4gbmV3X2dlbjsKIAomIzQzOwkJbmV3X2ZsYWdzID0gb2xkX2ZsYWdzOwogCQluZXdfZ2VuID0gKG9sZF9nZW4gJiM0MzsgMSkgJSBNQVhfTlJfR0VOUzsKLQotCQluZXdfZmxhZ3MgPSBvbGRfZmxhZ3MgJmFtcDsgfihMUlVfR0VOX01BU0sgfCBMUlVfUkVGU19GTEFHUyk7Ci0JCW5ld19mbGFncyB8PSAobmV3X2dlbiAmIzQzOyAxVUwpICZsdDsmbHQ7IExSVV9HRU5fUEdPRkY7Ci0JfSB3aGlsZSAoIXRyeV9jbXB4Y2hnKCZhbXA7Zm9saW8tJmd0O2ZsYWdzLmYsICZhbXA7b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTsKJiM0MzsJCWxydV9nZW5fc2V0X2ZsYWdzKCZhbXA7bmV3X2ZsYWdzLCBuZXdfZ2VuKTsKJiM0MzsJCWxydV9yZWZzX3NldF9mbGFncygmYW1wO25ld19mbGFncywgMCk7CiYjNDM7CX0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksICZhbXA7b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTsKIAogCWxydV9nZW5fdXBkYXRlX3NpemUobHJ1dmVjLCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbik7CiAKQEAgLTMzMjMsOSAmIzQzOzMzMzAsOCBAQCBzdGF0aWMgaW50IGZvbGlvX2luY19nZW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogfQogCiBzdGF0aWMgdm9pZCB1cGRhdGVfYmF0Y2hfc2l6ZShzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAotCQkJICAgICAgaW50IG9sZF9nZW4sIGludCBuZXdfZ2VuKQomIzQzOwkJCSAgICAgIGludCBvbGRfZ2VuLCBpbnQgbmV3X2dlbiwgaW50IHR5cGUpCiB7Ci0JaW50IHR5cGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7CiAJaW50IHpvbmUgPSBmb2xpb196b25lbnVtKGZvbGlvKTsKIAlpbnQgZGVsdGEgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7CiAKQEAgLTM1MTIsMjIgJiM0MzszNTE4LDI0IEBAIHN0YXRpYyBib29sIHN1aXRhYmxlX3RvX3NjYW4oaW50IHRvdGFsLCBpbnQgeW91bmcpCiB9CiAKIHN0YXRpYyB2b2lkIHdhbGtfdXBkYXRlX2ZvbGlvKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAotCQlzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbmV3X2dlbiwgYm9vbCBkaXJ0eSkKJiM0MzsJCXN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBkaXJ0eSkKIHsKLQlpbnQgb2xkX2dlbjsKJiM0MzsJaW50IG5ld19nZW4sIG9sZF9nZW4sIGZpbGU7CiAKIAlpZiAoIWZvbGlvKQogCQlyZXR1cm47CiAKJiM0MzsJbmV3X2dlbiA9IGxydV9nZW5fZnJvbV9zZXEoUkVBRF9PTkNFKGxydXZlYy0mZ3Q7bHJ1Z2VuLm1heF9zZXEpKTsKJiM0MzsKIAlpZiAoZGlydHkgJmFtcDsmYW1wOyAhZm9saW9fdGVzdF9kaXJ0eShmb2xpbykgJmFtcDsmYW1wOwogCSAgICAhKGZvbGlvX3Rlc3RfYW5vbihmb2xpbykgJmFtcDsmYW1wOyBmb2xpb190ZXN0X3N3YXBiYWNrZWQoZm9saW8pICZhbXA7JmFtcDsKIAkgICAgICAhZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKSkKIAkJZm9saW9fbWFya19kaXJ0eShmb2xpbyk7CiAKIAlpZiAod2FsaykgewotCQlvbGRfZ2VuID0gZm9saW9fdXBkYXRlX2dlbihmb2xpbywgbmV3X2dlbiwgJmFtcDt2bWEtJmd0O2ZsYWdzKTsKJiM0MzsJCW9sZF9nZW4gPSBmb2xpb191cGRhdGVfZ2VuKGZvbGlvLCBuZXdfZ2VuLCAmYW1wO2ZpbGUsICZhbXA7dm1hLSZndDtmbGFncyk7CiAJCWlmIChvbGRfZ2VuICZndDs9IDAgJmFtcDsmYW1wOyBvbGRfZ2VuICE9IG5ld19nZW4pCi0JCQl1cGRhdGVfYmF0Y2hfc2l6ZSh3YWxrLCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbik7CiYjNDM7CQkJdXBkYXRlX2JhdGNoX3NpemUod2FsaywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4sIGZpbGUpOwogCX0gZWxzZSBpZiAobHJ1X2dlbl9zZXRfcmVmcyhmb2xpbywgJmFtcDt2bWEtJmd0O2ZsYWdzKSkgewogCQlvbGRfZ2VuID0gZm9saW9fbHJ1X2dlbihmb2xpbyk7CiAJCWlmIChvbGRfZ2VuICZndDs9IDAgJmFtcDsmYW1wOyBvbGRfZ2VuICE9IG5ld19nZW4pCkBAIC0zNTQ5LDggJiM0MzszNTU3LDYgQEAgc3RhdGljIGJvb2wgd2Fsa19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCiAJc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGFyZ3MtJmd0O3ByaXZhdGU7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKHdhbGstJmd0O2xydXZlYyk7CiAJc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdCh3YWxrLSZndDtscnV2ZWMpOwotCURFRklORV9NQVhfU0VRKHdhbGstJmd0O2xydXZlYyk7Ci0JaW50IGdlbiA9IGxydV9nZW5fZnJvbV9zZXEobWF4X3NlcSk7CiAJdW5zaWduZWQgaW50IG5yOwogCXBtZF90IHBtZHZhbDsKIApAQCAtMzYwMSw3ICYjNDM7MzYwNyw3IEBAIHN0YXRpYyBib29sIHdhbGtfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLAogCQkJY29udGludWU7CiAKIAkJaWYgKGxhc3QgIT0gZm9saW8pIHsKLQkJCXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtJmd0O3ZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7CiYjNDM7CQkJd2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy0mZ3Q7dm1hLCB3YWxrLSZndDtscnV2ZWMsIGxhc3QsIGRpcnR5KTsKIAogCQkJbGFzdCA9IGZvbGlvOwogCQkJZGlydHkgPSBmYWxzZTsKQEAgLTM2MTQsNyAmIzQzOzM2MjAsNyBAQCBzdGF0aWMgYm9vbCB3YWxrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwKIAkJd2Fsay0mZ3Q7bW1fc3RhdHNbTU1fTEVBRl9ZT1VOR10gJiM0Mzs9IG5yOwogCX0KIAotCXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtJmd0O3ZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7CiYjNDM7CXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtJmd0O3ZtYSwgd2Fsay0mZ3Q7bHJ1dmVjLCBsYXN0LCBkaXJ0eSk7CiAJbGFzdCA9IE5VTEw7CiAKIAlpZiAoaSAmbHQ7IFBUUlNfUEVSX1BURSAmYW1wOyZhbXA7IGdldF9uZXh0X3ZtYShQTURfTUFTSywgUEFHRV9TSVpFLCBhcmdzLCAmYW1wO3N0YXJ0LCAmYW1wO2VuZCkpCkBAIC0zNjM3LDggJiM0MzszNjQzLDYgQEAgc3RhdGljIHZvaWQgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IHZtX2FyZWEKIAlzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrID0gYXJncy0mZ3Q7cHJpdmF0ZTsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cod2Fsay0mZ3Q7bHJ1dmVjKTsKIAlzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KHdhbGstJmd0O2xydXZlYyk7Ci0JREVGSU5FX01BWF9TRVEod2Fsay0mZ3Q7bHJ1dmVjKTsKLQlpbnQgZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShtYXhfc2VxKTsKIAogCVZNX1dBUk5fT05fT05DRShwdWRfbGVhZigqcHVkKSk7CiAKQEAgLTM2OTIsNyAmIzQzOzM2OTYsNyBAQCBzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYQogCQkJZ290byBuZXh0OwogCiAJCWlmIChsYXN0ICE9IGZvbGlvKSB7Ci0JCQl3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpOwomIzQzOwkJCXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgd2Fsay0mZ3Q7bHJ1dmVjLCBsYXN0LCBkaXJ0eSk7CiAKIAkJCWxhc3QgPSBmb2xpbzsKIAkJCWRpcnR5ID0gZmFsc2U7CkBAIC0zNzA2LDcgJiM0MzszNzEwLDcgQEAgc3RhdGljIHZvaWQgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IHZtX2FyZWEKIAkJaSA9IGkgJmd0OyBNSU5fTFJVX0JBVENIID8gMCA6IGZpbmRfbmV4dF9iaXQoYml0bWFwLCBNSU5fTFJVX0JBVENILCBpKSAmIzQzOyAxOwogCX0gd2hpbGUgKGkgJmx0Oz0gTUlOX0xSVV9CQVRDSCk7CiAKLQl3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpOwomIzQzOwl3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIHdhbGstJmd0O2xydXZlYywgbGFzdCwgZGlydHkpOwogCiAJbGF6eV9tbXVfbW9kZV9kaXNhYmxlKCk7CiAJc3Bpbl91bmxvY2socHRsKTsKQEAgLTQyNzAsOCAmIzQzOzQyNzQsNiBAQCBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpCiAJc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGZvbGlvX3BnZGF0KGZvbGlvKTsKIAlzdHJ1Y3QgbHJ1dmVjICpscnV2ZWM7CiAJc3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlOwotCXVuc2lnbmVkIGxvbmcgbWF4X3NlcTsKLQlpbnQgZ2VuOwogCiAJbG9ja2RlcF9hc3NlcnRfaGVsZChwdm13LSZndDtwdGwpOwogCVZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb190ZXN0X2xydShmb2xpbyksIGZvbGlvKTsKQEAgLTQzMDgsOCAmIzQzOzQzMTAsNiBAQCBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpCiAKIAltZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fZm9saW8oZm9saW8pOwogCWxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKG1lbWNnLCBwZ2RhdCk7Ci0JbWF4X3NlcSA9IFJFQURfT05DRSgobHJ1dmVjKS0mZ3Q7bHJ1Z2VuLm1heF9zZXEpOwotCWdlbiA9IGxydV9nZW5fZnJvbV9zZXEobWF4X3NlcSk7CiAJbW1fc3RhdGUgPSBnZXRfbW1fc3RhdGUobHJ1dmVjKTsKIAogCWxhenlfbW11X21vZGVfZW5hYmxlKCk7CkBAIC00MzQxLDcgJiM0Mzs0MzQxLDcgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKQogCQkJY29udGludWU7CiAKIAkJaWYgKGxhc3QgIT0gZm9saW8pIHsKLQkJCXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7CiYjNDM7CQkJd2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBscnV2ZWMsIGxhc3QsIGRpcnR5KTsKIAogCQkJbGFzdCA9IGZvbGlvOwogCQkJZGlydHkgPSBmYWxzZTsKQEAgLTQzNTMsMTMgJiM0Mzs0MzUzLDE0IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucikKIAkJeW91bmcgJiM0Mzs9IG5yOwogCX0KIAotCXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7CiYjNDM7CXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7CiAKIAlsYXp5X21tdV9tb2RlX2Rpc2FibGUoKTsKIAogCS8qIGZlZWRiYWNrIGZyb20gcm1hcCB3YWxrZXJzIHRvIHBhZ2UgdGFibGUgd2Fsa2VycyAqLwogCWlmIChtbV9zdGF0ZSAmYW1wOyZhbXA7IHN1aXRhYmxlX3RvX3NjYW4oaSwgeW91bmcpKQotCQl1cGRhdGVfYmxvb21fZmlsdGVyKG1tX3N0YXRlLCBtYXhfc2VxLCBwdm13LSZndDtwbWQpOwomIzQzOwkJdXBkYXRlX2Jsb29tX2ZpbHRlcihtbV9zdGF0ZSwgUkVBRF9PTkNFKGxydXZlYy0mZ3Q7bHJ1Z2VuLm1heF9zZXEpLAomIzQzOwkJCQkgICAgcHZtdy0mZ3Q7cG1kKTsKIAogCW1lbV9jZ3JvdXBfcHV0KG1lbWNnKTsKIApAQCAtNDcxNiw3ICYjNDM7NDcxNyw3IEBAIHN0YXRpYyBib29sIGlzb2xhdGVfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc2NhCiAKIAkvKiBzZWUgdGhlIGNvbW1lbnQgb24gTFJVX1JFRlNfRkxBR1MgKi8KIAlpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykpCi0JCXNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgMCk7CiYjNDM7CQlmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApOwogCiAJc3VjY2VzcyA9IGxydV9nZW5fZGVsX2ZvbGlvKGxydXZlYywgZm9saW8sIHRydWUpOwogCVZNX1dBUk5fT05fT05DRV9GT0xJTyghc3VjY2VzcywgZm9saW8pOwpAQCAtNDgwOSw5ICYjNDM7NDgxMCw5IEBAIHN0YXRpYyBpbnQgZ2V0X3RpZXJfaWR4KHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUpCiAJICogVGhpcyB2YWx1ZSBpcyBjaG9zZW4gYmVjYXVzZSBhbnkgb3RoZXIgdGllciB3b3VsZCBoYXZlIGF0IGxlYXN0IHR3aWNlCiAJICogYXMgbWFueSByZWZhdWx0cyBhcyB0aGUgZmlyc3QgdGllci4KIAkgKi8KLQlyZWFkX2N0cmxfcG9zKGxydXZlYywgdHlwZSwgMCwgMiwgJmFtcDtzcCk7Ci0JZm9yICh0aWVyID0gMTsgdGllciAmbHQ7IE1BWF9OUl9USUVSUzsgdGllciYjNDM7JiM0MzspIHsKLQkJcmVhZF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIHRpZXIsIDMsICZhbXA7cHYpOwomIzQzOwlyZWFkX2N0cmxfcG9zKGxydXZlYywgdHlwZSwgTFJVX1RJRVJfTUlOLCBMUlVfVElFUl9NSU4sIDIsICZhbXA7c3ApOwomIzQzOwlmb3IgKHRpZXIgPSBMUlVfVElFUl9NSU4gJiM0MzsgMTsgdGllciAmbHQ7PSBMUlVfVElFUl9NQVg7IHRpZXImIzQzOyYjNDM7KSB7CiYjNDM7CQlyZWFkX2N0cmxfcG9zKGxydXZlYywgdHlwZSwgdGllciwgdGllciwgMywgJmFtcDtwdik7CiAJCWlmICghcG9zaXRpdmVfY3RybF9lcnIoJmFtcDtzcCwgJmFtcDtwdikpCiAJCQlicmVhazsKIAl9CkBAIC00ODMyLDggJiM0Mzs0ODMzLDEwIEBAIHN0YXRpYyBpbnQgZ2V0X3R5cGVfdG9fc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBzd2FwcGluZXNzKQogCSAqIENvbXBhcmUgdGhlIHN1bSBvZiBhbGwgdGllcnMgb2YgYW5vbiB3aXRoIHRoYXQgb2YgZmlsZSB0byBkZXRlcm1pbmUKIAkgKiB3aGljaCB0eXBlIHRvIHNjYW4uCiAJICovCi0JcmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fQU5PTiwgTUFYX05SX1RJRVJTLCBzd2FwcGluZXNzLCAmYW1wO3NwKTsKLQlyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9GSUxFLCBNQVhfTlJfVElFUlMsIE1BWF9TV0FQUElORVNTIC0gc3dhcHBpbmVzcywgJmFtcDtwdik7CiYjNDM7CXJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0FOT04sIExSVV9USUVSX01JTiwgTFJVX1RJRVJfTUFYLAomIzQzOwkJICAgICAgc3dhcHBpbmVzcywgJmFtcDtzcCk7CiYjNDM7CXJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0ZJTEUsIExSVV9USUVSX01JTiwgTFJVX1RJRVJfTUFYLAomIzQzOwkJICAgICAgTUFYX1NXQVBQSU5FU1MgLSBzd2FwcGluZXNzLCAmYW1wO3B2KTsKIAogCXJldHVybiBwb3NpdGl2ZV9jdHJsX2VycigmYW1wO3NwLCAmYW1wO3B2KTsKIH0KQEAgLTQ5MzIsOCAmIzQzOzQ5MzUsMTAgQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiAJCX0KIAogCQkvKiBkb24mIzM5O3QgYWRkIHJlamVjdGVkIGZvbGlvcyB0byB0aGUgb2xkZXN0IGdlbmVyYXRpb24gKi8KLQkJaWYgKGxydV9nZW5fZm9saW9fc2VxKGxydXZlYywgZm9saW8sIGZhbHNlKSA9PSBtaW5fc2VxW3R5cGVdKQotCQkJc2V0X21hc2tfYml0cygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX2FjdGl2ZSkpOwomIzQzOwkJaWYgKGxydV9nZW5fZm9saW9fc2VxKGxydXZlYywgZm9saW8sIGZhbHNlKSA9PSBtaW5fc2VxW3R5cGVdKSB7CiYjNDM7CQkJZm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTsKJiM0MzsJCQlmb2xpb19zZXRfYWN0aXZlKGZvbGlvKTsKJiM0MzsJCX0KIAl9CiAKIAltb3ZlX2ZvbGlvc190b19scnUoJmFtcDtsaXN0KTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE5OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNDA1CgkJCQkJCQlvdXRwdXQ6IDE5NQoJCQkJCQkJdGhvdWdodHM6IDExODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGF0Y2ggQW5hbHlzaXM6IE1lbW9yeSBDb250cm9sIGFuZCBMUlUgR2VuZXJhdGlvbiBSZWZhY3RvcioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIHByaW1hcmlseSBmb2N1c2VzIG9uIHJlZmFjdG9yaW5nIHRoZSBtZW1vcnkgY29udHJvbCBhbmQgTFJVIGdlbmVyYXRpb24gY29kZSB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbC4gSXQgc2VlbXMgbGlrZSBhIGNvcmUgaW50ZXJuYWwgY2hhbmdlLCBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIGBscnVfem9uZV9zaXplYCBhbmQgaXRzIGFzc29jaWF0ZWQgZm9saW8gZmxhZyBtYW5pcHVsYXRpb24uCgpNeSBpbW1lZGlhdGUgY29uY2VybnMgYXJlIGFsd2F5cyBjZW50ZXJlZCBvbiBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzOiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgaW5mb3JtYXRpb24gbGVha3MsIGFuZCBhbnkgY2hhbmdlcyB0aGF0IG1pZ2h0IGludHJvZHVjZSB1bmV4cGVjdGVkIGJlaGF2aW9yIGluIHVzZXItc3BhY2UgaW50ZXJhY3Rpb25zLiBMZXQmIzM5O3MgZGlnIGluLiBJIHNlZSB0aGF0IGBscnVfem9uZV9zaXplYCBpcyBjaGFuZ2luZyBmcm9tIGEgc2ltcGxlIGFycmF5IG9mIGB1bnNpZ25lZCBsb25nYCB0byBhbiBhcnJheSBvZiBgYXRvbWljX2xvbmdfdGAuIFRoaXMgaXMgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIHJlZmFjdG9yaW5nIGFuZCwgYnkgaXRzZWxmLCBzaG91bGRuJiMzOTt0IHBvc2UgYW55IGltbWVkaWF0ZSByaXNrcy4KCkkmIzM5O20gc2VlaW5nIGhlbHBlciBmdW5jdGlvbnMgaW50cm9kdWNlZCBmb3Igc2V0dGluZyBhbmQgZ2V0dGluZyBMUlUgZ2VuZXJhdGlvbiBhbmQgcmVmZXJlbmNlcyBmcm9tIGZvbGlvIGZsYWdzLCByZXBsYWNpbmcgZGlyZWN0IGJpdCBtYW5pcHVsYXRpb25zLiBHb29kLiBUaGlzIG9mdGVuIGxlYWRzIHRvIG1vcmUgcm9idXN0IGFuZCBsZXNzIGVycm9yLXByb25lIGNvZGUuIEkmIzM5O20gYWxzbyBub3RpY2luZyB0aGUgbW9kaWZpY2F0aW9ucyB0byBmdW5jdGlvbnMgbGlrZSBgZm9saW9fdXBkYXRlX2dlbmAsIGBmb2xpb19pbmNfZ2VuYCwgYW5kIG90aGVycy4gVGhlIGNoYW5nZXMgdG8gYHJlYWRfY3RybF9wb3NgIGxvb2sgcmVhc29uYWJsZS4gSSBhbSBnb2luZyB0byBzZWUgaWYgYW55IHVzZXItc3BhY2UgY2hhbmdlcyBhcmUgYmVpbmcgbWFkZS4KCkkmIzM5O3ZlIGNhcmVmdWxseSBleGFtaW5lZCB0aGUgY29kZSBmb3IgYW55IG5ldyBzdHJ1Y3R1cmVzIGJlaW5nIHNlbnQgdG8gdXNlciBzcGFjZSwgdGhlIHByZXNlbmNlIG9mIGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgbWlnaHQgZGVwZW5kIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCB0aGUgYWxsb2NhdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcywgYW5kIGFueSBib3VuZHMgY2hlY2tzIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJJiMzOTttIG5vdCBzZWVpbmcgYW55dGhpbmcgdGhhdCByYWlzZXMgaW1tZWRpYXRlIHJlZCBmbGFncy4gTm8gZGlyZWN0IHVzZXItc3BhY2UgY29waWVzLCBubyBjb21wbGV4IGFsbG9jYXRpb25zLCBhbmQgbm8gb2J2aW91cyBtZW1vcnkgc2FmZXR5IGlzc3Vlcy4KCkhvd2V2ZXIsIEkgZGlkIGNhdGNoIHRoYXQgdGhlIGBtZW1fY2dyb3VwX2dldF96b25lX2xydV9zaXplYCBub3cgcmV0dXJucyBhIGBsb25nIHZhbGAgYW5kIGluY2x1ZGVzIGEgYFdBUk5fT05fT05DRWAgY2hlY2suIFRoaXMgaXMgc3RhbmRhcmQgZ29vZCBwcmFjdGljZSwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyB0aGUgb25seSB1c2Ugb2YgdGhpcyBhbmQgdGhhdCBpdCYjMzk7cyBiZWluZyBwcm9wZXJseSBoYW5kbGVkLiBUaGUgdXNlIG9mIGBhdG9taWNfbG9uZ19yZWFkYCBhbmQgdGhlIGBscnVfZ2VuXypfZmxhZ3NgIGhlbHBlciBmdW5jdGlvbnMgbG9vayBsaWtlIHN0YW5kYXJkIGFuZCBzYWZlIG9wZXJhdGlvbnMuCgpJJiMzOTttIG5vdyBmb2N1c2luZyBvbiBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVha3Mgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlLiBUaGUgcGF0Y2ggYXBwZWFycyB0byBiZSBlbnRpcmVseSBpbnRlcm5hbCB0byBtZW1vcnkgbWFuYWdlbWVudCAtIExSVSBnZW5lcmF0aW9uLCBmb2xpbyBmbGFncywgYW5kIG1lbWNnIExSVSBzaXplIHRyYWNraW5nLiBObyB1c2VyLXNwYWNlIGludGVyYWN0aW9uLiBHaXZlbiB0aGlzIGNvbnRleHQsIEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IGZvciBjaGVja2luZyBjb21tb24gaXNzdWVzIGxpa2Ugb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgb3IgdXNlLWFmdGVyLWZyZWUsIGFuZCBJIGRvbiYjMzk7dCBzZWUgYW55IGNoYW5nZXMgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIHRvIGRldGVjdCB1bmluaXRpYWxpemVkIG1lbW9yeS4KCkxldCYjMzk7cyBkbyBhIGRlZXBlciBkaXZlIGludG8gdGhlIGBmb2xpb191cGRhdGVfZ2VuYCBjaGFuZ2UuIFNwZWNpZmljYWxseSwgdGhlIGludHJvZHVjdGlvbiBvZiB0aGUgYGlzX2ZpbGVgIHBvaW50ZXI6CmBgYGMKLXN0YXRpYyBpbnQgZm9saW9fdXBkYXRlX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgZ2VuLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKQomIzQzO3N0YXRpYyBpbnQgZm9saW9fdXBkYXRlX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbmV3X2dlbiwgaW50ICppc19maWxlLAomIzQzOwkJCSAgICBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKQpgYGAKSSBhbSBub3cgbWFraW5nIHN1cmUgYGlzX2ZpbGVgIGlzIGluaXRpYWxpemVkIGFuZCB1c2VkIGNvcnJlY3RseS4gTXkgc2NhbiBmb3IgaXRzIHVzZSBpbiBgd2Fsa191cGRhdGVfZm9saW9gIGlzIHdoYXQgSSYjMzk7bSBsb29raW5nIGF0LgoKYGBgYwotc3RhdGljIHZvaWQgd2Fsa191cGRhdGVfZm9saW8oc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JCXN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuZXdfZ2VuLCBib29sIGRpcnR5KQomIzQzO3N0YXRpYyB2b2lkIHdhbGtfdXBkYXRlX2ZvbGlvKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAomIzQzOwkJc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIGRpcnR5KQogewotCWludCBvbGRfZ2VuOwomIzQzOwlpbnQgbmV3X2dlbiwgb2xkX2dlbiwgZmlsZTsKLi4uCiAJaWYgKHdhbGspIHsKLQkJb2xkX2dlbiA9IGZvbGlvX3VwZGF0ZV9nZW4oZm9saW8sIG5ld19nZW4sICZhbXA7dm1hLSZndDtmbGFncyk7CiYjNDM7CQlvbGRfZ2VuID0gZm9saW9fdXBkYXRlX2dlbihmb2xpbywgbmV3X2dlbiwgJmFtcDtmaWxlLCAmYW1wO3ZtYS0mZ3Q7ZmxhZ3MpOwogCQlpZiAob2xkX2dlbiAmZ3Q7PSAwICZhbXA7JmFtcDsgb2xkX2dlbiAhPSBuZXdfZ2VuKQotCQkJdXBkYXRlX2JhdGNoX3NpemUod2FsaywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4pOwomIzQzOwkJCXVwZGF0ZV9iYXRjaF9zaXplKHdhbGssIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuLCBmaWxlKTsKYGBgCgpUaGUgbmV3IGBmaWxlYCB2YXJpYWJsZSBpcyBpbnRyb2R1Y2VkIGFuZCBwYXNzZWQgYXMgdGhlIGBpc19maWxlYCBwYXJhbWV0ZXIsIHNvIEkgbmVlZCB0byBrbm93IHdoZXJlIGl0JiMzOTtzIGJlaW5nIHNldC4KSWYgYGZvbGlvX3VwZGF0ZV9nZW5gIHJldHVybnMgYCZsdDsgMGAsIGBvbGRfZ2VuICZndDs9IDBgIGlzIGZhbHNlLCBhbmQgYGZpbGVgIGlzIG5ldmVyIHVzZWQgc28gaXQgc2hvdWxkIG5vdCBiZSBhIHByb2JsZW0uIElmIGBmb2xpb191cGRhdGVfZ2VuYAoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE5OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgaW50ZXJuYWwgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSwgc3BlY2lmaWNhbGx5IExSVSBnZW5lcmF0aW9uIGFuZCBmb2xpbyBmbGFncyBtYW5pcHVsYXRpb24sIGFuZCBjaGFuZ2VzIGBscnVfem9uZV9zaXplYCB0byB1c2UgYGF0b21pY19sb25nX3RgLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIHRoYXQgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhbGxvY2F0ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBvciBtb2RpZnkgYm91bmRzIGNoZWNrcyBpbiBhIHdheSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIG5ld2x5IGludHJvZHVjZWQgb3V0LXBhcmFtZXRlciBgaXNfZmlsZWAgaW4gYGZvbGlvX3VwZGF0ZV9nZW5gIGlzIGFsd2F5cyBpbml0aWFsaXplZCBiZWZvcmUgcmV0dXJuaW5nLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIHJhY2UgY29uZGl0aW9ucywgdXNlLWFmdGVyLWZyZWUsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMpIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIG90aGVyIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgaW50ZXJuYWwgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSwgc3BlY2lmaWNhbGx5IExSVSBnZW5lcmF0aW9uIGFuZCBmb2xpbyBmbGFncyBtYW5pcHVsYXRpb24sIGFuZCBjaGFuZ2VzIGBscnVfem9uZV9zaXplYCB0byB1c2UgYGF0b21pY19sb25nX3RgLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIHRoYXQgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhbGxvY2F0ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBvciBtb2RpZnkgYm91bmRzIGNoZWNrcyBpbiBhIHdheSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIG5ld2x5IGludHJvZHVjZWQgb3V0LXBhcmFtZXRlciBgaXNfZmlsZWAgaW4gYGZvbGlvX3VwZGF0ZV9nZW5gIGlzIGFsd2F5cyBpbml0aWFsaXplZCBiZWZvcmUgcmV0dXJuaW5nLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIHJhY2UgY29uZGl0aW9ucywgdXNlLWFmdGVyLWZyZWUsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMpIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIG90aGVyIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTk6MDM6MjMuNTAzNjI0MzUzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE1OTg1NTY5MjM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxSVV9HRU5cIixcbiAgICBcIkxSVV9HRU5fRU5BQkxFRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZvbGlvX21pZ3JhdGVfZmxhZ3NcIixcbiAgICBcImxydV9nZW5fbG9va19hcm91bmRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgaW50ZXJuYWwgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSwgc3BlY2lmaWNhbGx5IExSVSBnZW5lcmF0aW9uIGFuZCBmb2xpbyBmbGFncyBtYW5pcHVsYXRpb24sIGFuZCBjaGFuZ2VzIGBscnVfem9uZV9zaXplYCB0byB1c2UgYGF0b21pY19sb25nX3RgLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIHRoYXQgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhbGxvY2F0ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBvciBtb2RpZnkgYm91bmRzIGNoZWNrcyBpbiBhIHdheSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIG5ld2x5IGludHJvZHVjZWQgb3V0LXBhcmFtZXRlciBgaXNfZmlsZWAgaW4gYGZvbGlvX3VwZGF0ZV9nZW5gIGlzIGFsd2F5cyBpbml0aWFsaXplZCBiZWZvcmUgcmV0dXJuaW5nLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIHJhY2UgY29uZGl0aW9ucywgdXNlLWFmdGVyLWZyZWUsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMpIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIG90aGVyIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgTXVsdGktR2VuIExSVSAoTUdMUlUpIHBhZ2UgZmxhZ3MgaGFuZGxpbmcgYW5kIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gYGxydV96b25lX3NpemVgIHVwZGF0ZXMgYnkgdXNpbmcgYXRvbWljIG9wZXJhdGlvbnMuIEl0IG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMsIHNwZWNpZmljYWxseSBwYWdlIG1pZ3JhdGlvbiAoYGZvbGlvX21pZ3JhdGVfZmxhZ3NgKSBhbmQgcGFnZSByZWNsYWltIGxvb2thcm91bmQgKGBscnVfZ2VuX2xvb2tfYXJvdW5kYCkuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBtYWtpbmcgdGhlbSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxOTowMzoyMy41MDM2Mjg4NjJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzODE2MjQ5MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAyNTlhMjUyMjM4NzZkMGYyNzNiMzRmZTZhZWYzNDM2NmI3NTYwOTllXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDI1IDE5OjAzOjIxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcXG5pbmRleCAyMTVlMmU4N2Y0MmIyLi43Yjg5ZDBjYjVmNmM2IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcXG5AQCAtMTEzLDcgKzExMyw3IEBAIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlIHtcXG4gXFx0LyogRmllbGRzIHdoaWNoIGdldCB1cGRhdGVkIG9mdGVuIGF0IHRoZSBlbmQuICovXFxuIFxcdHN0cnVjdCBscnV2ZWNcXHRcXHRscnV2ZWM7XFxuIFxcdENBQ0hFTElORV9QQURESU5HKF9wYWQyXyk7XFxuLVxcdHVuc2lnbmVkIGxvbmdcXHRcXHRscnVfem9uZV9zaXplW01BWF9OUl9aT05FU11bTlJfTFJVX0xJU1RTXTtcXG4rXFx0YXRvbWljX2xvbmdfdFxcdFxcdGxydV96b25lX3NpemVbTUFYX05SX1pPTkVTXVtOUl9MUlVfTElTVFNdO1xcbiBcXHRzdHJ1Y3QgbWVtX2Nncm91cF9yZWNsYWltX2l0ZXJcXHRpdGVyO1xcbiBcXG4gXFx0LypcXG5AQCAtOTAyLDEwICs5MDIsMTUgQEAgc3RhdGljIGlubGluZVxcbiB1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfZ2V0X3pvbmVfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbiBcXHRcXHRlbnVtIGxydV9saXN0IGxydSwgaW50IHpvbmVfaWR4KVxcbiB7XFxuK1xcdGxvbmcgdmFsO1xcbiBcXHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXo7XFxuIFxcbiBcXHRteiA9IGNvbnRhaW5lcl9vZihscnV2ZWMsIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlLCBscnV2ZWMpO1xcbi1cXHRyZXR1cm4gUkVBRF9PTkNFKG16LVxcdTAwM2VscnVfem9uZV9zaXplW3pvbmVfaWR4XVtscnVdKTtcXG4rXFx0dmFsID0gYXRvbWljX2xvbmdfcmVhZChcXHUwMDI2bXotXFx1MDAzZWxydV96b25lX3NpemVbem9uZV9pZHhdW2xydV0pO1xcbitcXHRpZiAoV0FSTl9PTl9PTkNFKHZhbCBcXHUwMDNjIDApKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdHJldHVybiB2YWw7XFxuIH1cXG4gXFxuIHZvaWQgX19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goZ2ZwX3QgZ2ZwX21hc2spO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oIGIvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaFxcbmluZGV4IDYyMWM4NjUzZDhmN2UuLjhjZjgyOTg5ZWMyNjMgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmhcXG5AQCAtMTAsNiArMTAsMTEgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VzZXJmYXVsdGZkX2suaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xlYWZvcHMuaFxcdTAwM2VcXG4gXFxuK3N0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2ZsYWdzX2lzX2ZpbGVfbHJ1KGNvbnN0IHVuc2lnbmVkIGxvbmcgKmZsYWdzKVxcbit7XFxuK1xcdHJldHVybiAhdGVzdF9iaXQoUEdfc3dhcGJhY2tlZCwgZmxhZ3MpO1xcbit9XFxuK1xcbiAvKipcXG4gICogZm9saW9faXNfZmlsZV9scnUgLSBTaG91bGQgdGhlIGZvbGlvIGJlIG9uIGEgZmlsZSBMUlUgb3IgYW5vbiBMUlU/XFxuICAqIEBmb2xpbzogVGhlIGZvbGlvIHRvIHRlc3QuXFxuQEAgLTI3LDcgKzMyLDcgQEBcXG4gICovXFxuIHN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2lzX2ZpbGVfbHJ1KGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4tXFx0cmV0dXJuICFmb2xpb190ZXN0X3N3YXBiYWNrZWQoZm9saW8pO1xcbitcXHRyZXR1cm4gZm9saW9fZmxhZ3NfaXNfZmlsZV9scnUoY29uc3RfZm9saW9fZmxhZ3MoZm9saW8sIDApKTtcXG4gfVxcbiBcXG4gc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIF9fdXBkYXRlX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG5AQCAtMTQyLDEwICsxNDcsNDIgQEAgc3RhdGljIGlubGluZSBpbnQgbHJ1X3RpZXJfZnJvbV9yZWZzKGludCByZWZzLCBib29sIHdvcmtpbmdzZXQpXFxuIFxcdHJldHVybiB3b3JraW5nc2V0ID8gTUFYX05SX1RJRVJTIC0gMSA6IG9yZGVyX2Jhc2VfMihyZWZzKTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X3JlZnMoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcXG4rLyoqXFxuKyAqIGxydV9nZW5fZnJvbV9mbGFncyAtIFJldHVybiB0aGUgTFJVIGdlbmVyYXRpb24gbnVtYmVyIGZyb20gZm9saW8gZmxhZ3MuXFxuKyAqIEBmbGFnczogZm9saW8gZmxhZ3NcXG4rICpcXG4rICogUmV0dXJuczogQSBudW1iZXIgYmV0d2VlbiAwIGFuZCAoTUFYX05SX0dFTlMgLSAxKSwgaW5jbHVzaXZlLiBSZXR1cm5zXFxuKyAqIC0xIGlmIHRoZSBmbGFncyBpbmRpY2F0ZSB0aGUgZm9saW8gaXMgb2ZmIHRoZSBsaXN0IChlLmcuLCBpc29sYXRlZCkuXFxuKyAqL1xcbitzdGF0aWMgaW5saW5lIGludCBscnVfZ2VuX2Zyb21fZmxhZ3ModW5zaWduZWQgbG9uZyBmbGFncylcXG4re1xcbitcXHRpbnQgZ2VuID0gKChmbGFncyBcXHUwMDI2IExSVV9HRU5fTUFTSykgXFx1MDAzZVxcdTAwM2UgTFJVX0dFTl9QR09GRik7XFxuK1xcbitcXHRCVUlMRF9CVUdfT04oTFJVX0dFTl9NQVNLIFxcdTAwMjYgTFJVX1JFRlNfTUFTSyk7XFxuK1xcdGdlbiAtPSAxO1xcbitcXHRWTV9XQVJOX09OX09OQ0UoZ2VuICE9IC0xIFxcdTAwMjZcXHUwMDI2IGdlbiBcXHUwMDNlPSBNQVhfTlJfR0VOUyk7XFxuK1xcdHJldHVybiBnZW47XFxuK31cXG4rXFxuKy8qKlxcbisgKiBscnVfZ2VuX3NldF9mbGFncyAtIFNldCB0aGUgTFJVIGdlbmVyYXRpb24gbnVtYmVyIHRvIHNwZWNpZmllZCBmb2xpbyBmbGFncy5cXG4rICogQGZsYWdzOiBwb2ludGVyIHRvIHRoZSBmb2xpbyBmbGFnc1xcbisgKiBAZ2VuOiBnZW5lcmF0aW9uIG51bWJlciwgYmV0d2VlbiAwIGFuZCAoTUFYX05SX0dFTlMgLSAxKSwgaW5jbHVzaXZlLlxcbisgKi9cXG4rc3RhdGljIGlubGluZSB2b2lkIGxydV9nZW5fc2V0X2ZsYWdzKHVuc2lnbmVkIGxvbmcgKmZsYWdzLCBpbnQgZ2VuKVxcbiB7XFxuLVxcdHVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tXFx1MDAzZWZsYWdzLmYpO1xcbitcXHRWTV9XQVJOX09OX09OQ0UoZ2VuIFxcdTAwM2U9IE1BWF9OUl9HRU5TIHx8IGdlbiBcXHUwMDNjIDApO1xcbitcXG4rXFx0KmZsYWdzIFxcdTAwMjY9IH5MUlVfR0VOX01BU0s7XFxuK1xcdCpmbGFncyB8PSAoZ2VuICsgMVVMKSBcXHUwMDNjXFx1MDAzYyBMUlVfR0VOX1BHT0ZGO1xcbit9XFxuIFxcbisvKipcXG4rICogbHJ1X3JlZnNfZnJvbV9mbGFncyAtIFJldHVybiBMUlUgcmVmZXJlbmNlZCAvIGFjY2VzcyBjb3VudCBmcm9tIGZvbGlvIGZsYWdzLlxcbisgKiBAZmxhZ3M6IGZvbGlvIGZsYWdzXFxuKyAqL1xcbitzdGF0aWMgaW5saW5lIGludCBscnVfcmVmc19mcm9tX2ZsYWdzKHVuc2lnbmVkIGxvbmcgZmxhZ3MpXFxuK3tcXG4gXFx0aWYgKCEoZmxhZ3MgXFx1MDAyNiBCSVQoUEdfcmVmZXJlbmNlZCkpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFx0LypcXG5AQCAtMTU1LDExICsxOTIsNDAgQEAgc3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X3JlZnMoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0cmV0dXJuICgoZmxhZ3MgXFx1MDAyNiBMUlVfUkVGU19NQVNLKSBcXHUwMDNlXFx1MDAzZSBMUlVfUkVGU19QR09GRikgKyAxO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfZ2VuKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuKy8qKlxcbisgKiBscnVfcmVmc19zZXRfZmxhZ3MgLSBTZXQgdGhlIExSVSByZWZlcmVuY2VkIC8gYWNjZXNzIGNvdW50IHRvIHNwZWNpZmllZCBmb2xpbyBmbGFncy5cXG4rICogQGZsYWdzOiBwb2ludGVyIHRvIHRoZSBmb2xpbyBmbGFnc1xcbisgKiBAcmVmczogcmVmZXJlbmNlZCAvIGFjY2VzcyBjb3VudCBudW1iZXIsIGJldHdlZW4gMCBhbmQgTFJVX1JFRlNfTUFYLCBpbmNsdXNpdmUuXFxuKyAqL1xcbitzdGF0aWMgaW5saW5lIHZvaWQgbHJ1X3JlZnNfc2V0X2ZsYWdzKHVuc2lnbmVkIGxvbmcgKmZsYWdzLCB1bnNpZ25lZCBpbnQgcmVmcylcXG4re1xcbitcXHRWTV9XQVJOX09OX09OQ0UocmVmcyBcXHUwMDNlIExSVV9SRUZTX01BWCk7XFxuK1xcdEJVSUxEX0JVR19PTihMUlVfUkVGU19NQVggIT0gKExSVV9SRUZTX01BU0sgXFx1MDAzZVxcdTAwM2UgTFJVX1JFRlNfUEdPRkYpICsgMSk7XFxuK1xcbitcXHQqZmxhZ3MgXFx1MDAyNj0gfkxSVV9SRUZTX0ZMQUdTO1xcbitcXHRpZiAoIXJlZnMpXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0KmZsYWdzIHw9IChCSVQoUEdfcmVmZXJlbmNlZCkgfCAoKHJlZnMgLSAxVUwpIFxcdTAwM2NcXHUwMDNjIExSVV9SRUZTX1BHT0ZGKSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9yZWZzKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3tcXG4rXFx0cmV0dXJuIGxydV9yZWZzX2Zyb21fZmxhZ3MoUkVBRF9PTkNFKCpjb25zdF9mb2xpb19mbGFncyhmb2xpbywgMCkpKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3NldF9scnVfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgcmVmcylcXG4ge1xcbi1cXHR1bnNpZ25lZCBsb25nIGZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVxcdTAwM2VmbGFncy5mKTtcXG4rXFx0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTtcXG4gXFxuLVxcdHJldHVybiAoKGZsYWdzIFxcdTAwMjYgTFJVX0dFTl9NQVNLKSBcXHUwMDNlXFx1MDAzZSBMUlVfR0VOX1BHT0ZGKSAtIDE7XFxuK1xcdGRvIHtcXG4rXFx0XFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzO1xcbitcXHRcXHRscnVfcmVmc19zZXRfZmxhZ3MoXFx1MDAyNm5ld19mbGFncywgcmVmcyk7XFxuK1xcdH0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksIFxcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfZ2VuKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3tcXG4rXFx0cmV0dXJuIGxydV9nZW5fZnJvbV9mbGFncyhSRUFEX09OQ0UoKmNvbnN0X2ZvbGlvX2ZsYWdzKGZvbGlvLCAwKSkpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9pc19hY3RpdmUoY29uc3Qgc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgZ2VuKVxcbkBAIC0yNzAsNyArMzM2LDcgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fYWRkX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4gXFx0Z2VuID0gbHJ1X2dlbl9mcm9tX3NlcShzZXEpO1xcbiBcXHRmbGFncyA9IChnZW4gKyAxVUwpIFxcdTAwM2NcXHUwMDNjIExSVV9HRU5fUEdPRkY7XFxuIFxcdC8qIHNlZSB0aGUgY29tbWVudCBvbiBNSU5fTlJfR0VOUyBhYm91dCBQR19hY3RpdmUgKi9cXG4tXFx0c2V0X21hc2tfYml0cyhcXHUwMDI2Zm9saW8tXFx1MDAzZWZsYWdzLmYsIExSVV9HRU5fTUFTSyB8IEJJVChQR19hY3RpdmUpLCBmbGFncyk7XFxuK1xcdHNldF9tYXNrX2JpdHMoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBMUlVfR0VOX01BU0sgfCBCSVQoUEdfYWN0aXZlKSwgZmxhZ3MpO1xcbiBcXG4gXFx0bHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCAtMSwgZ2VuKTtcXG4gXFx0LyogZm9yIGZvbGlvX3JvdGF0ZV9yZWNsYWltYWJsZSgpICovXFxuQEAgLTI5NSw3ICszNjEsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9kZWxfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiBcXG4gXFx0LyogZm9yIGZvbGlvX21pZ3JhdGVfZmxhZ3MoKSAqL1xcbiBcXHRmbGFncyA9ICFyZWNsYWltaW5nIFxcdTAwMjZcXHUwMDI2IGxydV9nZW5faXNfYWN0aXZlKGxydXZlYywgZ2VuKSA/IEJJVChQR19hY3RpdmUpIDogMDtcXG4tXFx0ZmxhZ3MgPSBzZXRfbWFza19iaXRzKFxcdTAwMjZmb2xpby1cXHUwMDNlZmxhZ3MuZiwgTFJVX0dFTl9NQVNLLCBmbGFncyk7XFxuK1xcdGZsYWdzID0gc2V0X21hc2tfYml0cyhmb2xpb19mbGFncyhmb2xpbywgMCksIExSVV9HRU5fTUFTSywgZmxhZ3MpO1xcbiBcXHRnZW4gPSAoKGZsYWdzIFxcdTAwMjYgTFJVX0dFTl9NQVNLKSBcXHUwMDNlXFx1MDAzZSBMUlVfR0VOX1BHT0ZGKSAtIDE7XFxuIFxcbiBcXHRscnVfZ2VuX3VwZGF0ZV9zaXplKGxydXZlYywgZm9saW8sIGdlbiwgLTEpO1xcbkBAIC0zMDQsMTEgKzM3MCwxOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9kZWxfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiBcXHRyZXR1cm4gdHJ1ZTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfcmVmcyhzdHJ1Y3QgZm9saW8gKm5ldywgY29uc3Qgc3RydWN0IGZvbGlvICpvbGQpXFxuKy8qKlxcbisgKiBmb2xpb19taWdyYXRlX2xydV9yZWZzIC0gY29weSB0aGUgcmVmZXJlbmNlIHN0YXRlIHRvIGEgbmV3IGZvbGlvXFxuKyAqIEBuZXc6IHRoZSBkZXN0aW5hdGlvbiBmb2xpb1xcbisgKiBAb2xkOiB0aGUgc291cmNlIGZvbGlvXFxuKyAqXFxuKyAqIFRyYW5zZmVyIHRoZSByZWZlcmVuY2Ugc3RhdGUgdG8gQG5ldyBkdXJpbmcgbWlncmF0aW9uOiB0aGUgTUdMUlVcXG4rICogcmVmcyBjb3VudCwgaW5jbHVkaW5nIFBHX3JlZmVyZW5jZWQsIG9yIGp1c3QgUEdfcmVmZXJlbmNlZCBmb3IgdGhlXFxuKyAqIGFjdGl2ZS9pbmFjdGl2ZSBMUlUuXFxuKyAqL1xcbitzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fbWlncmF0ZV9scnVfcmVmcyhzdHJ1Y3QgZm9saW8gKm5ldywgY29uc3Qgc3RydWN0IGZvbGlvICpvbGQpXFxuIHtcXG4tXFx0dW5zaWduZWQgbG9uZyByZWZzID0gUkVBRF9PTkNFKG9sZC1cXHUwMDNlZmxhZ3MuZikgXFx1MDAyNiBMUlVfUkVGU19NQVNLO1xcbi1cXG4tXFx0c2V0X21hc2tfYml0cyhcXHUwMDI2bmV3LVxcdTAwM2VmbGFncy5mLCBMUlVfUkVGU19NQVNLLCByZWZzKTtcXG4rXFx0QlVJTERfQlVHX09OKExSVV9SRUZTX01BU0sgXFx1MDAyNiBCSVQoUEdfcmVmZXJlbmNlZCkpO1xcbitcXHRmb2xpb19zZXRfbHJ1X3JlZnMobmV3LCBmb2xpb19scnVfcmVmcyhvbGQpKTtcXG4gfVxcbiAjZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi9cXG4gXFxuQEAgLTMzNyw5ICs0MTEsMTAgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZGVsX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4gXFx0cmV0dXJuIGZhbHNlO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fbWlncmF0ZV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZClcXG4rc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKVxcbiB7XFxuLVxcbitcXHRpZiAoZm9saW9fdGVzdF9yZWZlcmVuY2VkKG9sZCkpXFxuK1xcdFxcdGZvbGlvX3NldF9yZWZlcmVuY2VkKG5ldyk7XFxuIH1cXG4gI2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXFxuIFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxcbmluZGV4IDk0ZjljM2ZmNTQxNjAuLjliMjdjZjUzYmRiYzcgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbW16b25lLmhcXG5AQCAtNDkyLDExICs0OTIsMTQgQEAgZW51bSBscnV2ZWNfZmxhZ3Mge1xcbiAgKiBmb2xpby1cXHUwMDNlZmxhZ3MsIG1hc2tlZCBieSBMUlVfUkVGU19NQVNLLlxcbiAgKi9cXG4gI2RlZmluZSBNQVhfTlJfVElFUlNcXHRcXHQ0VVxcbisjZGVmaW5lIExSVV9USUVSX01JTlxcdFxcdDBVXFxuKyNkZWZpbmUgTFJVX1RJRVJfTUFYXFx0XFx0KE1BWF9OUl9USUVSUyAtIDEpXFxuIFxcbiAjaWZuZGVmIF9fR0VORVJBVElOR19CT1VORFNfSFxcbiBcXG4gI2RlZmluZSBMUlVfR0VOX01BU0tcXHRcXHQoKEJJVChMUlVfR0VOX1dJRFRIKSAtIDEpIFxcdTAwM2NcXHUwMDNjIExSVV9HRU5fUEdPRkYpXFxuICNkZWZpbmUgTFJVX1JFRlNfTUFTS1xcdFxcdCgoQklUKExSVV9SRUZTX1dJRFRIKSAtIDEpIFxcdTAwM2NcXHUwMDNjIExSVV9SRUZTX1BHT0ZGKVxcbisjZGVmaW5lIExSVV9SRUZTX01BWFxcdFxcdEJJVChMUlVfUkVGU19XSURUSClcXG4gXFxuIC8qXFxuICAqIEZvciBmb2xpb3MgYWNjZXNzZWQgbXVsdGlwbGUgdGltZXMgdGhyb3VnaCBmaWxlIGRlc2NyaXB0b3JzLFxcbmRpZmYgLS1naXQgYS9tbS9mb2xpby5jIGIvbW0vZm9saW8uY1xcbmluZGV4IGMwMmRjZWE5YzAzYzIuLmE5MzIwNTkwNTdhYzEgMTAwNjQ0XFxuLS0tIGEvbW0vZm9saW8uY1xcbisrKyBiL21tL2ZvbGlvLmNcXG5AQCAtMzUzLDI2ICszNTMsMjggQEAgc3RhdGljIHZvaWQgX19scnVfY2FjaGVfYWN0aXZhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFxuIHN0YXRpYyB2b2lkIGxydV9nZW5faW5jX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcXG4ge1xcbi1cXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVxcdTAwM2VmbGFncy5mKTtcXG4rXFx0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTtcXG4rXFx0aW50IHJlZnM7XFxuIFxcbiBcXHRpZiAoZm9saW9fdGVzdF91bmV2aWN0YWJsZShmb2xpbykpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdC8qIHNlZSB0aGUgY29tbWVudCBvbiBMUlVfUkVGU19GTEFHUyAqL1xcbi1cXHRpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykpIHtcXG4tXFx0XFx0c2V0X21hc2tfYml0cyhcXHUwMDI2Zm9saW8tXFx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX01BU0ssIEJJVChQR19yZWZlcmVuY2VkKSk7XFxuK1xcdGlmICghZm9saW9fbHJ1X3JlZnMoZm9saW8pKSB7XFxuK1xcdFxcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMSk7XFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG4gXFx0ZG8ge1xcbi1cXHRcXHRpZiAoKG9sZF9mbGFncyBcXHUwMDI2IExSVV9SRUZTX01BU0spID09IExSVV9SRUZTX01BU0spIHtcXG4rXFx0XFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzO1xcbitcXHRcXHRyZWZzID0gbHJ1X3JlZnNfZnJvbV9mbGFncyhvbGRfZmxhZ3MpO1xcbitcXHRcXHRpZiAocmVmcyA9PSBMUlVfUkVGU19NQVgpIHtcXG4gXFx0XFx0XFx0aWYgKCFmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pKVxcbiBcXHRcXHRcXHRcXHRmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7XFxuIFxcdFxcdFxcdHJldHVybjtcXG4gXFx0XFx0fVxcbi1cXG4tXFx0XFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzICsgQklUKExSVV9SRUZTX1BHT0ZGKTtcXG4tXFx0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKFxcdTAwMjZmb2xpby1cXHUwMDNlZmxhZ3MuZiwgXFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XFxuK1xcdFxcdGxydV9yZWZzX3NldF9mbGFncyhcXHUwMDI2bmV3X2ZsYWdzLCByZWZzICsgMSk7XFxuK1xcdH0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksIFxcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xcbiB9XFxuIFxcbiBzdGF0aWMgYm9vbCBscnVfZ2VuX2NsZWFyX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcXG5AQCAtMzg0LDcgKzM4Niw4IEBAIHN0YXRpYyBib29sIGxydV9nZW5fY2xlYXJfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiBcXHRpZiAoZ2VuIFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcbi1cXHRzZXRfbWFza19iaXRzKFxcdTAwMjZmb2xpby1cXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MgfCBCSVQoUEdfd29ya2luZ3NldCksIDApO1xcbitcXHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xcbitcXHRmb2xpb19jbGVhcl93b3JraW5nc2V0KGZvbGlvKTtcXG4gXFxuIFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gXFx0c2VxID0gUkVBRF9PTkNFKGZvbGlvX2xydXZlYyhmb2xpbyktXFx1MDAzZWxydWdlbi5taW5fc2VxW3R5cGVdKTtcXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXFxuaW5kZXggMTFiODVmNGI2ODI4Yi4uYTc1NzJkZWQ1NmM5ZCAxMDA2NDRcXG4tLS0gYS9tbS9tZW1jb250cm9sLmNcXG4rKysgYi9tbS9tZW1jb250cm9sLmNcXG5AQCAtMTUyOSwyOCArMTUyOSwxMiBAQCB2b2lkIG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBscnVfbGlzdCBscnUsXFxuIFxcdFxcdFxcdFxcdGludCB6aWQsIGxvbmcgbnJfcGFnZXMpXFxuIHtcXG4gXFx0c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm16O1xcbi1cXHR1bnNpZ25lZCBsb25nICpscnVfc2l6ZTtcXG4tXFx0bG9uZyBzaXplO1xcbiBcXG4gXFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0bXogPSBjb250YWluZXJfb2YobHJ1dmVjLCBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSwgbHJ1dmVjKTtcXG4tXFx0bHJ1X3NpemUgPSBcXHUwMDI2bXotXFx1MDAzZWxydV96b25lX3NpemVbemlkXVtscnVdO1xcbi1cXG4tXFx0aWYgKG5yX3BhZ2VzIFxcdTAwM2MgMClcXG4tXFx0XFx0KmxydV9zaXplICs9IG5yX3BhZ2VzO1xcbi1cXG4tXFx0c2l6ZSA9ICpscnVfc2l6ZTtcXG4tXFx0aWYgKFdBUk5fT05DRShzaXplIFxcdTAwM2MgMCxcXG4tXFx0XFx0XFxcIiVzKCVwLCAlZCwgJWxkKTogbHJ1X3NpemUgJWxkXFxcXG5cXFwiLFxcbi1cXHRcXHRfX2Z1bmNfXywgbHJ1dmVjLCBscnUsIG5yX3BhZ2VzLCBzaXplKSkge1xcbi1cXHRcXHRWTV9CVUdfT04oMSk7XFxuLVxcdFxcdCpscnVfc2l6ZSA9IDA7XFxuLVxcdH1cXG4tXFxuLVxcdGlmIChucl9wYWdlcyBcXHUwMDNlIDApXFxuLVxcdFxcdCpscnVfc2l6ZSArPSBucl9wYWdlcztcXG4rXFx0YXRvbWljX2xvbmdfYWRkKG5yX3BhZ2VzLCBcXHUwMDI2bXotXFx1MDAzZWxydV96b25lX3NpemVbemlkXVtscnVdKTtcXG4gfVxcbiBcXG4gLyoqXFxuZGlmZiAtLWdpdCBhL21tL21pZ3JhdGUuYyBiL21tL21pZ3JhdGUuY1xcbmluZGV4IDE1YjQ1ODMyYmNmYTcuLmEzNjlkMGM5NWMzODYgMTAwNjQ0XFxuLS0tIGEvbW0vbWlncmF0ZS5jXFxuKysrIGIvbW0vbWlncmF0ZS5jXFxuQEAgLTc3Niw4ICs3NzYsOSBAQCB2b2lkIGZvbGlvX21pZ3JhdGVfZmxhZ3Moc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpmb2xpbylcXG4ge1xcbiBcXHRpbnQgY3B1cGlkO1xcbiBcXG4tXFx0aWYgKGZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykpXFxuLVxcdFxcdGZvbGlvX3NldF9yZWZlcmVuY2VkKG5ld2ZvbGlvKTtcXG4rXFx0LyogQ29weSB0aGUgcmVmZXJlbmNlIHN0YXRlLCBpbmNsdWRpbmcgUEdfcmVmZXJlbmNlZCAqL1xcbitcXHRmb2xpb19taWdyYXRlX2xydV9yZWZzKG5ld2ZvbGlvLCBmb2xpbyk7XFxuK1xcbiBcXHRpZiAoZm9saW9fdGVzdF91cHRvZGF0ZShmb2xpbykpXFxuIFxcdFxcdGZvbGlvX21hcmtfdXB0b2RhdGUobmV3Zm9saW8pO1xcbiBcXHRpZiAoZm9saW9fdGVzdF9jbGVhcl9hY3RpdmUoZm9saW8pKSB7XFxuQEAgLTgwNyw3ICs4MDgsNiBAQCB2b2lkIGZvbGlvX21pZ3JhdGVfZmxhZ3Moc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0aWYgKGZvbGlvX3Rlc3RfaWRsZShmb2xpbykpXFxuIFxcdFxcdGZvbGlvX3NldF9pZGxlKG5ld2ZvbGlvKTtcXG4gXFxuLVxcdGZvbGlvX21pZ3JhdGVfcmVmcyhuZXdmb2xpbywgZm9saW8pO1xcbiBcXHQvKlxcbiBcXHQgKiBDb3B5IE5VTUEgaW5mb3JtYXRpb24gdG8gdGhlIG5ldyBwYWdlLCB0byBwcmV2ZW50IG92ZXItZWFnZXJcXG4gXFx0ICogZnV0dXJlIG1pZ3JhdGlvbnMgb2YgdGhpcyBzYW1lIHBhZ2UuXFxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcXG5pbmRleCA3M2E4MWI0YTNlMTY0Li42ZmRhOTQ4YWVjZjJjIDEwMDY0NFxcbi0tLSBhL21tL3Ztc2Nhbi5jXFxuKysrIGIvbW0vdm1zY2FuLmNcXG5AQCAtODQzLDE5ICs4NDMsMjIgQEAgc3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxcbiBcXHRpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykgXFx1MDAyNlxcdTAwMjYgIWZvbGlvX3Rlc3Rfd29ya2luZ3NldChmb2xpbykpIHtcXG4gXFx0XFx0LyogQWN0aXZhdGUgZmlsZS1iYWNrZWQgZXhlY3V0YWJsZSBmb2xpb3MgYWZ0ZXIgZmlyc3QgdXNhZ2UuICovXFxuIFxcdFxcdGlmIChpc19leGVjX2ZpbGVfZm9saW8oZm9saW8sIHZtYV9mbGFncykpIHtcXG4tXFx0XFx0XFx0c2V0X21hc2tfYml0cyhcXHUwMDI2Zm9saW8tXFx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX0ZMQUdTLCBCSVQoUEdfd29ya2luZ3NldCkpO1xcbitcXHRcXHRcXHRmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7XFxuK1xcdFxcdFxcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XFxuIFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXHRcXHR9XFxuIFxcbi1cXHRcXHRzZXRfbWFza19iaXRzKFxcdTAwMjZmb2xpby1cXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgQklUKFBHX3JlZmVyZW5jZWQpKTtcXG4rXFx0XFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAxKTtcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXHR9XFxuIFxcbiBcXHQvKiBQcm9tb3RlIG9uIHNlY29uZCBhY2Nlc3MgKi9cXG4tXFx0aWYgKGZvbGlvX2xydV9yZWZzKGZvbGlvKSBcXHUwMDNlIDEpXFxuLVxcdFxcdHNldF9tYXNrX2JpdHMoXFx1MDAyNmZvbGlvLVxcdTAwM2VmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX3dvcmtpbmdzZXQpKTtcXG4tXFx0ZWxzZVxcbitcXHRpZiAoZm9saW9fbHJ1X3JlZnMoZm9saW8pIFxcdTAwM2UgMSkge1xcbitcXHRcXHRmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7XFxuK1xcdFxcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XFxuK1xcdH0gZWxzZSB7XFxuIFxcdFxcdGZvbGlvX21hcmtfYWNjZXNzZWQoZm9saW8pO1xcbitcXHR9XFxuIFxcdHJldHVybiB0cnVlO1xcbiB9XFxuICNlbHNlXFxuQEAgLTMxOTUsOCArMzE5OCw4IEBAIHN0cnVjdCBjdHJsX3BvcyB7XFxuIFxcdGludCBnYWluO1xcbiB9O1xcbiBcXG4tc3RhdGljIHZvaWQgcmVhZF9jdHJsX3BvcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgdGllciwgaW50IGdhaW4sXFxuLVxcdFxcdFxcdCAgc3RydWN0IGN0cmxfcG9zICpwb3MpXFxuK3N0YXRpYyB2b2lkIHJlYWRfY3RybF9wb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHRpZXJfbWluLFxcbitcXHRcXHRcXHQgIGludCB0aWVyX21heCwgaW50IGdhaW4sIHN0cnVjdCBjdHJsX3BvcyAqcG9zKVxcbiB7XFxuIFxcdGludCBpO1xcbiBcXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXFx1MDAyNmxydXZlYy1cXHUwMDNlbHJ1Z2VuO1xcbkBAIC0zMjA1LDcgKzMyMDgsNyBAQCBzdGF0aWMgdm9pZCByZWFkX2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCB0aWVyLCBpbnQgZ2FpbixcXG4gXFx0cG9zLVxcdTAwM2VnYWluID0gZ2FpbjtcXG4gXFx0cG9zLVxcdTAwM2VyZWZhdWx0ZWQgPSBwb3MtXFx1MDAzZXRvdGFsID0gMDtcXG4gXFxuLVxcdGZvciAoaSA9IHRpZXIgJSBNQVhfTlJfVElFUlM7IGkgXFx1MDAzYz0gbWluKHRpZXIsIE1BWF9OUl9USUVSUyAtIDEpOyBpKyspIHtcXG4rXFx0Zm9yIChpID0gdGllcl9taW47IGkgXFx1MDAzYz0gdGllcl9tYXg7IGkrKykge1xcbiBcXHRcXHRwb3MtXFx1MDAzZXJlZmF1bHRlZCArPSBscnVnZW4tXFx1MDAzZWF2Z19yZWZhdWx0ZWRbdHlwZV1baV0gK1xcbiBcXHRcXHRcXHRcXHQgIGF0b21pY19sb25nX3JlYWQoXFx1MDAyNmxydWdlbi1cXHUwMDNlcmVmYXVsdGVkW2hpc3RdW3R5cGVdW2ldKTtcXG4gXFx0XFx0cG9zLVxcdTAwM2V0b3RhbCArPSBscnVnZW4tXFx1MDAzZWF2Z190b3RhbFt0eXBlXVtpXSArXFxuQEAgLTMyNjYsMTEgKzMyNjksMTEgQEAgc3RhdGljIGJvb2wgcG9zaXRpdmVfY3RybF9lcnIoc3RydWN0IGN0cmxfcG9zICpzcCwgc3RydWN0IGN0cmxfcG9zICpwdilcXG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG4gXFxuIC8qIHByb21vdGUgcGFnZXMgYWNjZXNzZWQgdGhyb3VnaCBwYWdlIHRhYmxlcyAqL1xcbi1zdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGdlbiwgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcXG4rc3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuZXdfZ2VuLCBpbnQgKmlzX2ZpbGUsXFxuK1xcdFxcdFxcdCAgICBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxcbiB7XFxuLVxcdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tXFx1MDAzZWZsYWdzLmYpO1xcbi1cXG4tXFx0Vk1fV0FSTl9PTl9PTkNFKGdlbiBcXHUwMDNlPSBNQVhfTlJfR0VOUyk7XFxuK1xcdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XFxuK1xcdGludCBvbGRfZ2VuO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogU2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTLCBhbmQgYWN0aXZhdGUgZmlsZS1iYWNrZWRcXG5AQCAtMzI3OSwyMCArMzI4MiwyNSBAQCBzdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGdlbiwgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYVxcbiBcXHQgKi9cXG4gXFx0aWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pIFxcdTAwMjZcXHUwMDI2ICFmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICAhaXNfZXhlY19maWxlX2ZvbGlvKGZvbGlvLCB2bWFfZmxhZ3MpKSB7XFxuLVxcdFxcdHNldF9tYXNrX2JpdHMoXFx1MDAyNmZvbGlvLVxcdTAwM2VmbGFncy5mLCBMUlVfUkVGU19NQVNLLCBCSVQoUEdfcmVmZXJlbmNlZCkpO1xcbitcXHRcXHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDEpO1xcbiBcXHRcXHRyZXR1cm4gLTE7XFxuIFxcdH1cXG4gXFxuIFxcdGRvIHtcXG4rXFx0XFx0b2xkX2dlbiA9IGxydV9nZW5fZnJvbV9mbGFncyhvbGRfZmxhZ3MpO1xcbitcXHRcXHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3M7XFxuK1xcbiBcXHRcXHQvKiBscnVfZ2VuX2RlbF9mb2xpbygpIGhhcyBpc29sYXRlZCB0aGlzIHBhZ2U/ICovXFxuLVxcdFxcdGlmICghKG9sZF9mbGFncyBcXHUwMDI2IExSVV9HRU5fTUFTSykpXFxuLVxcdFxcdFxcdHJldHVybiAtMTtcXG4rXFx0XFx0aWYgKG9sZF9nZW4gXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRicmVhaztcXG4gXFxuLVxcdFxcdG5ld19mbGFncyA9IG9sZF9mbGFncyBcXHUwMDI2IH4oTFJVX0dFTl9NQVNLIHwgTFJVX1JFRlNfRkxBR1MpO1xcbi1cXHRcXHRuZXdfZmxhZ3MgfD0gKChnZW4gKyAxVUwpIFxcdTAwM2NcXHUwMDNjIExSVV9HRU5fUEdPRkYpIHwgQklUKFBHX3dvcmtpbmdzZXQpO1xcbi1cXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoXFx1MDAyNmZvbGlvLVxcdTAwM2VmbGFncy5mLCBcXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcXG4rXFx0XFx0bHJ1X2dlbl9zZXRfZmxhZ3MoXFx1MDAyNm5ld19mbGFncywgbmV3X2dlbik7XFxuK1xcdFxcdGxydV9yZWZzX3NldF9mbGFncyhcXHUwMDI2bmV3X2ZsYWdzLCAwKTtcXG4rXFx0XFx0bmV3X2ZsYWdzIHw9IEJJVChQR193b3JraW5nc2V0KTtcXG4rXFx0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgXFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XFxuIFxcbi1cXHRyZXR1cm4gKChvbGRfZmxhZ3MgXFx1MDAyNiBMUlVfR0VOX01BU0spIFxcdTAwM2VcXHUwMDNlIExSVV9HRU5fUEdPRkYpIC0gMTtcXG4rXFx0KmlzX2ZpbGUgPSBmb2xpb19mbGFnc19pc19maWxlX2xydShcXHUwMDI2b2xkX2ZsYWdzKTtcXG4rXFx0cmV0dXJuIG9sZF9nZW47XFxuIH1cXG4gXFxuIC8qIHByb3RlY3QgcGFnZXMgYWNjZXNzZWQgbXVsdGlwbGUgdGltZXMgdGhyb3VnaCBmaWxlIGRlc2NyaXB0b3JzICovXFxuQEAgLTMzMDEsMjEgKzMzMDksMjAgQEAgc3RhdGljIGludCBmb2xpb19pbmNfZ2VuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0aW50IHR5cGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7XFxuIFxcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVnZW47XFxuIFxcdGludCBuZXdfZ2VuLCBvbGRfZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tXFx1MDAzZW1pbl9zZXFbdHlwZV0pO1xcbi1cXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVxcdTAwM2VmbGFncy5mKTtcXG4tXFxuLVxcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghKG9sZF9mbGFncyBcXHUwMDI2IExSVV9HRU5fTUFTSyksIGZvbGlvKTtcXG4rXFx0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTtcXG4gXFxuIFxcdGRvIHtcXG4tXFx0XFx0bmV3X2dlbiA9ICgob2xkX2ZsYWdzIFxcdTAwMjYgTFJVX0dFTl9NQVNLKSBcXHUwMDNlXFx1MDAzZSBMUlVfR0VOX1BHT0ZGKSAtIDE7XFxuK1xcdFxcdG5ld19nZW4gPSBscnVfZ2VuX2Zyb21fZmxhZ3Mob2xkX2ZsYWdzKTtcXG4rXFxuIFxcdFxcdC8qIGZvbGlvX3VwZGF0ZV9nZW4oKSBoYXMgcHJvbW90ZWQgdGhpcyBwYWdlPyAqL1xcbiBcXHRcXHRpZiAobmV3X2dlbiBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2IG5ld19nZW4gIT0gb2xkX2dlbilcXG4gXFx0XFx0XFx0cmV0dXJuIG5ld19nZW47XFxuIFxcbitcXHRcXHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3M7XFxuIFxcdFxcdG5ld19nZW4gPSAob2xkX2dlbiArIDEpICUgTUFYX05SX0dFTlM7XFxuLVxcbi1cXHRcXHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3MgXFx1MDAyNiB+KExSVV9HRU5fTUFTSyB8IExSVV9SRUZTX0ZMQUdTKTtcXG4tXFx0XFx0bmV3X2ZsYWdzIHw9IChuZXdfZ2VuICsgMVVMKSBcXHUwMDNjXFx1MDAzYyBMUlVfR0VOX1BHT0ZGO1xcbi1cXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoXFx1MDAyNmZvbGlvLVxcdTAwM2VmbGFncy5mLCBcXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcXG4rXFx0XFx0bHJ1X2dlbl9zZXRfZmxhZ3MoXFx1MDAyNm5ld19mbGFncywgbmV3X2dlbik7XFxuK1xcdFxcdGxydV9yZWZzX3NldF9mbGFncyhcXHUwMDI2bmV3X2ZsYWdzLCAwKTtcXG4rXFx0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgXFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XFxuIFxcbiBcXHRscnVfZ2VuX3VwZGF0ZV9zaXplKGxydXZlYywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4pO1xcbiBcXG5AQCAtMzMyMyw5ICszMzMwLDggQEAgc3RhdGljIGludCBmb2xpb19pbmNfZ2VuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgdXBkYXRlX2JhdGNoX3NpemUoc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaywgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tXFx0XFx0XFx0ICAgICAgaW50IG9sZF9nZW4sIGludCBuZXdfZ2VuKVxcbitcXHRcXHRcXHQgICAgICBpbnQgb2xkX2dlbiwgaW50IG5ld19nZW4sIGludCB0eXBlKVxcbiB7XFxuLVxcdGludCB0eXBlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pO1xcbiBcXHRpbnQgem9uZSA9IGZvbGlvX3pvbmVudW0oZm9saW8pO1xcbiBcXHRpbnQgZGVsdGEgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XFxuIFxcbkBAIC0zNTEyLDIyICszNTE4LDI0IEBAIHN0YXRpYyBib29sIHN1aXRhYmxlX3RvX3NjYW4oaW50IHRvdGFsLCBpbnQgeW91bmcpXFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHdhbGtfdXBkYXRlX2ZvbGlvKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi1cXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbmV3X2dlbiwgYm9vbCBkaXJ0eSlcXG4rXFx0XFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIGRpcnR5KVxcbiB7XFxuLVxcdGludCBvbGRfZ2VuO1xcbitcXHRpbnQgbmV3X2dlbiwgb2xkX2dlbiwgZmlsZTtcXG4gXFxuIFxcdGlmICghZm9saW8pXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuK1xcdG5ld19nZW4gPSBscnVfZ2VuX2Zyb21fc2VxKFJFQURfT05DRShscnV2ZWMtXFx1MDAzZWxydWdlbi5tYXhfc2VxKSk7XFxuK1xcbiBcXHRpZiAoZGlydHkgXFx1MDAyNlxcdTAwMjYgIWZvbGlvX3Rlc3RfZGlydHkoZm9saW8pIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICAhKGZvbGlvX3Rlc3RfYW5vbihmb2xpbykgXFx1MDAyNlxcdTAwMjYgZm9saW9fdGVzdF9zd2FwYmFja2VkKGZvbGlvKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgICAhZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKSlcXG4gXFx0XFx0Zm9saW9fbWFya19kaXJ0eShmb2xpbyk7XFxuIFxcbiBcXHRpZiAod2Fsaykge1xcbi1cXHRcXHRvbGRfZ2VuID0gZm9saW9fdXBkYXRlX2dlbihmb2xpbywgbmV3X2dlbiwgXFx1MDAyNnZtYS1cXHUwMDNlZmxhZ3MpO1xcbitcXHRcXHRvbGRfZ2VuID0gZm9saW9fdXBkYXRlX2dlbihmb2xpbywgbmV3X2dlbiwgXFx1MDAyNmZpbGUsIFxcdTAwMjZ2bWEtXFx1MDAzZWZsYWdzKTtcXG4gXFx0XFx0aWYgKG9sZF9nZW4gXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNiBvbGRfZ2VuICE9IG5ld19nZW4pXFxuLVxcdFxcdFxcdHVwZGF0ZV9iYXRjaF9zaXplKHdhbGssIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTtcXG4rXFx0XFx0XFx0dXBkYXRlX2JhdGNoX3NpemUod2FsaywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4sIGZpbGUpO1xcbiBcXHR9IGVsc2UgaWYgKGxydV9nZW5fc2V0X3JlZnMoZm9saW8sIFxcdTAwMjZ2bWEtXFx1MDAzZWZsYWdzKSkge1xcbiBcXHRcXHRvbGRfZ2VuID0gZm9saW9fbHJ1X2dlbihmb2xpbyk7XFxuIFxcdFxcdGlmIChvbGRfZ2VuIFxcdTAwM2U9IDAgXFx1MDAyNlxcdTAwMjYgb2xkX2dlbiAhPSBuZXdfZ2VuKVxcbkBAIC0zNTQ5LDggKzM1NTcsNiBAQCBzdGF0aWMgYm9vbCB3YWxrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG4gXFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGFyZ3MtXFx1MDAzZXByaXZhdGU7XFxuIFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyh3YWxrLVxcdTAwM2VscnV2ZWMpO1xcbiBcXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KHdhbGstXFx1MDAzZWxydXZlYyk7XFxuLVxcdERFRklORV9NQVhfU0VRKHdhbGstXFx1MDAzZWxydXZlYyk7XFxuLVxcdGludCBnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpO1xcbiBcXHR1bnNpZ25lZCBpbnQgbnI7XFxuIFxcdHBtZF90IHBtZHZhbDtcXG4gXFxuQEAgLTM2MDEsNyArMzYwNyw3IEBAIHN0YXRpYyBib29sIHdhbGtfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuIFxcdFxcdGlmIChsYXN0ICE9IGZvbGlvKSB7XFxuLVxcdFxcdFxcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtXFx1MDAzZXZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XFxuK1xcdFxcdFxcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtXFx1MDAzZXZtYSwgd2Fsay1cXHUwMDNlbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XFxuIFxcbiBcXHRcXHRcXHRsYXN0ID0gZm9saW87XFxuIFxcdFxcdFxcdGRpcnR5ID0gZmFsc2U7XFxuQEAgLTM2MTQsNyArMzYyMCw3IEBAIHN0YXRpYyBib29sIHdhbGtfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbiBcXHRcXHR3YWxrLVxcdTAwM2VtbV9zdGF0c1tNTV9MRUFGX1lPVU5HXSArPSBucjtcXG4gXFx0fVxcbiBcXG4tXFx0d2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy1cXHUwMDNldm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcXG4rXFx0d2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy1cXHUwMDNldm1hLCB3YWxrLVxcdTAwM2VscnV2ZWMsIGxhc3QsIGRpcnR5KTtcXG4gXFx0bGFzdCA9IE5VTEw7XFxuIFxcbiBcXHRpZiAoaSBcXHUwMDNjIFBUUlNfUEVSX1BURSBcXHUwMDI2XFx1MDAyNiBnZXRfbmV4dF92bWEoUE1EX01BU0ssIFBBR0VfU0laRSwgYXJncywgXFx1MDAyNnN0YXJ0LCBcXHUwMDI2ZW5kKSlcXG5AQCAtMzYzNyw4ICszNjQzLDYgQEAgc3RhdGljIHZvaWQgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IHZtX2FyZWFcXG4gXFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGFyZ3MtXFx1MDAzZXByaXZhdGU7XFxuIFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyh3YWxrLVxcdTAwM2VscnV2ZWMpO1xcbiBcXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KHdhbGstXFx1MDAzZWxydXZlYyk7XFxuLVxcdERFRklORV9NQVhfU0VRKHdhbGstXFx1MDAzZWxydXZlYyk7XFxuLVxcdGludCBnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpO1xcbiBcXG4gXFx0Vk1fV0FSTl9PTl9PTkNFKHB1ZF9sZWFmKCpwdWQpKTtcXG4gXFxuQEAgLTM2OTIsNyArMzY5Niw3IEBAIHN0YXRpYyB2b2lkIHdhbGtfcG1kX3JhbmdlX2xvY2tlZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCB2bV9hcmVhXFxuIFxcdFxcdFxcdGdvdG8gbmV4dDtcXG4gXFxuIFxcdFxcdGlmIChsYXN0ICE9IGZvbGlvKSB7XFxuLVxcdFxcdFxcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XFxuK1xcdFxcdFxcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgd2Fsay1cXHUwMDNlbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XFxuIFxcbiBcXHRcXHRcXHRsYXN0ID0gZm9saW87XFxuIFxcdFxcdFxcdGRpcnR5ID0gZmFsc2U7XFxuQEAgLTM3MDYsNyArMzcxMCw3IEBAIHN0YXRpYyB2b2lkIHdhbGtfcG1kX3JhbmdlX2xvY2tlZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCB2bV9hcmVhXFxuIFxcdFxcdGkgPSBpIFxcdTAwM2UgTUlOX0xSVV9CQVRDSCA/IDAgOiBmaW5kX25leHRfYml0KGJpdG1hcCwgTUlOX0xSVV9CQVRDSCwgaSkgKyAxO1xcbiBcXHR9IHdoaWxlIChpIFxcdTAwM2M9IE1JTl9MUlVfQkFUQ0gpO1xcbiBcXG4tXFx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcXG4rXFx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCB3YWxrLVxcdTAwM2VscnV2ZWMsIGxhc3QsIGRpcnR5KTtcXG4gXFxuIFxcdGxhenlfbW11X21vZGVfZGlzYWJsZSgpO1xcbiBcXHRzcGluX3VubG9jayhwdGwpO1xcbkBAIC00MjcwLDggKzQyNzQsNiBAQCBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXFxuIFxcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBmb2xpb19wZ2RhdChmb2xpbyk7XFxuIFxcdHN0cnVjdCBscnV2ZWMgKmxydXZlYztcXG4gXFx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlO1xcbi1cXHR1bnNpZ25lZCBsb25nIG1heF9zZXE7XFxuLVxcdGludCBnZW47XFxuIFxcbiBcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKHB2bXctXFx1MDAzZXB0bCk7XFxuIFxcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb190ZXN0X2xydShmb2xpbyksIGZvbGlvKTtcXG5AQCAtNDMwOCw4ICs0MzEwLDYgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxcbiBcXG4gXFx0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX2ZvbGlvKGZvbGlvKTtcXG4gXFx0bHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIHBnZGF0KTtcXG4tXFx0bWF4X3NlcSA9IFJFQURfT05DRSgobHJ1dmVjKS1cXHUwMDNlbHJ1Z2VuLm1heF9zZXEpO1xcbi1cXHRnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpO1xcbiBcXHRtbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xcbiBcXG4gXFx0bGF6eV9tbXVfbW9kZV9lbmFibGUoKTtcXG5AQCAtNDM0MSw3ICs0MzQxLDcgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuIFxcdFxcdGlmIChsYXN0ICE9IGZvbGlvKSB7XFxuLVxcdFxcdFxcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XFxuK1xcdFxcdFxcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XFxuIFxcbiBcXHRcXHRcXHRsYXN0ID0gZm9saW87XFxuIFxcdFxcdFxcdGRpcnR5ID0gZmFsc2U7XFxuQEAgLTQzNTMsMTMgKzQzNTMsMTQgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxcbiBcXHRcXHR5b3VuZyArPSBucjtcXG4gXFx0fVxcbiBcXG4tXFx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcXG4rXFx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBscnV2ZWMsIGxhc3QsIGRpcnR5KTtcXG4gXFxuIFxcdGxhenlfbW11X21vZGVfZGlzYWJsZSgpO1xcbiBcXG4gXFx0LyogZmVlZGJhY2sgZnJvbSBybWFwIHdhbGtlcnMgdG8gcGFnZSB0YWJsZSB3YWxrZXJzICovXFxuIFxcdGlmIChtbV9zdGF0ZSBcXHUwMDI2XFx1MDAyNiBzdWl0YWJsZV90b19zY2FuKGksIHlvdW5nKSlcXG4tXFx0XFx0dXBkYXRlX2Jsb29tX2ZpbHRlcihtbV9zdGF0ZSwgbWF4X3NlcSwgcHZtdy1cXHUwMDNlcG1kKTtcXG4rXFx0XFx0dXBkYXRlX2Jsb29tX2ZpbHRlcihtbV9zdGF0ZSwgUkVBRF9PTkNFKGxydXZlYy1cXHUwMDNlbHJ1Z2VuLm1heF9zZXEpLFxcbitcXHRcXHRcXHRcXHQgICAgcHZtdy1cXHUwMDNlcG1kKTtcXG4gXFxuIFxcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcXG4gXFxuQEAgLTQ3MTYsNyArNDcxNyw3IEBAIHN0YXRpYyBib29sIGlzb2xhdGVfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc2NhXFxuIFxcbiBcXHQvKiBzZWUgdGhlIGNvbW1lbnQgb24gTFJVX1JFRlNfRkxBR1MgKi9cXG4gXFx0aWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pKVxcbi1cXHRcXHRzZXRfbWFza19iaXRzKFxcdTAwMjZmb2xpby1cXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgMCk7XFxuK1xcdFxcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XFxuIFxcbiBcXHRzdWNjZXNzID0gbHJ1X2dlbl9kZWxfZm9saW8obHJ1dmVjLCBmb2xpbywgdHJ1ZSk7XFxuIFxcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghc3VjY2VzcywgZm9saW8pO1xcbkBAIC00ODA5LDkgKzQ4MTAsOSBAQCBzdGF0aWMgaW50IGdldF90aWVyX2lkeChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlKVxcbiBcXHQgKiBUaGlzIHZhbHVlIGlzIGNob3NlbiBiZWNhdXNlIGFueSBvdGhlciB0aWVyIHdvdWxkIGhhdmUgYXQgbGVhc3QgdHdpY2VcXG4gXFx0ICogYXMgbWFueSByZWZhdWx0cyBhcyB0aGUgZmlyc3QgdGllci5cXG4gXFx0ICovXFxuLVxcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCAwLCAyLCBcXHUwMDI2c3ApO1xcbi1cXHRmb3IgKHRpZXIgPSAxOyB0aWVyIFxcdTAwM2MgTUFYX05SX1RJRVJTOyB0aWVyKyspIHtcXG4tXFx0XFx0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIHRpZXIsIDMsIFxcdTAwMjZwdik7XFxuK1xcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCBMUlVfVElFUl9NSU4sIExSVV9USUVSX01JTiwgMiwgXFx1MDAyNnNwKTtcXG4rXFx0Zm9yICh0aWVyID0gTFJVX1RJRVJfTUlOICsgMTsgdGllciBcXHUwMDNjPSBMUlVfVElFUl9NQVg7IHRpZXIrKykge1xcbitcXHRcXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgdHlwZSwgdGllciwgdGllciwgMywgXFx1MDAyNnB2KTtcXG4gXFx0XFx0aWYgKCFwb3NpdGl2ZV9jdHJsX2VycihcXHUwMDI2c3AsIFxcdTAwMjZwdikpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuQEAgLTQ4MzIsOCArNDgzMywxMCBAQCBzdGF0aWMgaW50IGdldF90eXBlX3RvX3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcylcXG4gXFx0ICogQ29tcGFyZSB0aGUgc3VtIG9mIGFsbCB0aWVycyBvZiBhbm9uIHdpdGggdGhhdCBvZiBmaWxlIHRvIGRldGVybWluZVxcbiBcXHQgKiB3aGljaCB0eXBlIHRvIHNjYW4uXFxuIFxcdCAqL1xcbi1cXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9BTk9OLCBNQVhfTlJfVElFUlMsIHN3YXBwaW5lc3MsIFxcdTAwMjZzcCk7XFxuLVxcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0ZJTEUsIE1BWF9OUl9USUVSUywgTUFYX1NXQVBQSU5FU1MgLSBzd2FwcGluZXNzLCBcXHUwMDI2cHYpO1xcbitcXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9BTk9OLCBMUlVfVElFUl9NSU4sIExSVV9USUVSX01BWCxcXG4rXFx0XFx0ICAgICAgc3dhcHBpbmVzcywgXFx1MDAyNnNwKTtcXG4rXFx0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fRklMRSwgTFJVX1RJRVJfTUlOLCBMUlVfVElFUl9NQVgsXFxuK1xcdFxcdCAgICAgIE1BWF9TV0FQUElORVNTIC0gc3dhcHBpbmVzcywgXFx1MDAyNnB2KTtcXG4gXFxuIFxcdHJldHVybiBwb3NpdGl2ZV9jdHJsX2VycihcXHUwMDI2c3AsIFxcdTAwMjZwdik7XFxuIH1cXG5AQCAtNDkzMiw4ICs0OTM1LDEwIEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHQvKiBkb24ndCBhZGQgcmVqZWN0ZWQgZm9saW9zIHRvIHRoZSBvbGRlc3QgZ2VuZXJhdGlvbiAqL1xcbi1cXHRcXHRpZiAobHJ1X2dlbl9mb2xpb19zZXEobHJ1dmVjLCBmb2xpbywgZmFsc2UpID09IG1pbl9zZXFbdHlwZV0pXFxuLVxcdFxcdFxcdHNldF9tYXNrX2JpdHMoXFx1MDAyNmZvbGlvLVxcdTAwM2VmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX2FjdGl2ZSkpO1xcbitcXHRcXHRpZiAobHJ1X2dlbl9mb2xpb19zZXEobHJ1dmVjLCBmb2xpbywgZmFsc2UpID09IG1pbl9zZXFbdHlwZV0pIHtcXG4rXFx0XFx0XFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcXG4rXFx0XFx0XFx0Zm9saW9fc2V0X2FjdGl2ZShmb2xpbyk7XFxuK1xcdFxcdH1cXG4gXFx0fVxcbiBcXG4gXFx0bW92ZV9mb2xpb3NfdG9fbHJ1KFxcdTAwMjZsaXN0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTk6MDM6MjQuODg1ODkyNTYyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6OTcwMDE0ODgxMDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTFJVX0dFTlwiLFxuICAgIFwiTFJVX0dFTl9FTkFCTEVEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZm9saW9fbWlncmF0ZV9mbGFnc1wiLFxuICAgIFwibHJ1X2dlbl9sb29rX2Fyb3VuZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBNdWx0aS1HZW4gTFJVIChNR0xSVSkgcGFnZSBmbGFncyBoYW5kbGluZyBhbmQgZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiBgbHJ1X3pvbmVfc2l6ZWAgdXBkYXRlcyBieSB1c2luZyBhdG9taWMgb3BlcmF0aW9ucy4gSXQgbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYywgc3BlY2lmaWNhbGx5IHBhZ2UgbWlncmF0aW9uIChgZm9saW9fbWlncmF0ZV9mbGFnc2ApIGFuZCBwYWdlIHJlY2xhaW0gbG9va2Fyb3VuZCAoYGxydV9nZW5fbG9va19hcm91bmRgKS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIG1ha2luZyB0aGVtIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDI1OWEyNTIyMzg3NmQwZjI3M2IzNGZlNmFlZjM0MzY2Yjc1NjA5OWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAyNSAxOTowMzoyMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbmluZGV4IDIxNWUyZTg3ZjQyYjIuLjdiODlkMGNiNWY2YzYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuKysrIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbkBAIC0xMTMsNyArMTEzLDcgQEAgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUge1xuIFx0LyogRmllbGRzIHdoaWNoIGdldCB1cGRhdGVkIG9mdGVuIGF0IHRoZSBlbmQuICovXG4gXHRzdHJ1Y3QgbHJ1dmVjXHRcdGxydXZlYztcbiBcdENBQ0hFTElORV9QQURESU5HKF9wYWQyXyk7XG4tXHR1bnNpZ25lZCBsb25nXHRcdGxydV96b25lX3NpemVbTUFYX05SX1pPTkVTXVtOUl9MUlVfTElTVFNdO1xuK1x0YXRvbWljX2xvbmdfdFx0XHRscnVfem9uZV9zaXplW01BWF9OUl9aT05FU11bTlJfTFJVX0xJU1RTXTtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwX3JlY2xhaW1faXRlclx0aXRlcjtcbiBcbiBcdC8qXG5AQCAtOTAyLDEwICs5MDIsMTUgQEAgc3RhdGljIGlubGluZVxuIHVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9nZXRfem9uZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRcdGVudW0gbHJ1X2xpc3QgbHJ1LCBpbnQgem9uZV9pZHgpXG4ge1xuK1x0bG9uZyB2YWw7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXo7XG4gXG4gXHRteiA9IGNvbnRhaW5lcl9vZihscnV2ZWMsIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlLCBscnV2ZWMpO1xuLVx0cmV0dXJuIFJFQURfT05DRShtei1cdTAwM2VscnVfem9uZV9zaXplW3pvbmVfaWR4XVtscnVdKTtcbitcdHZhbCA9IGF0b21pY19sb25nX3JlYWQoXHUwMDI2bXotXHUwMDNlbHJ1X3pvbmVfc2l6ZVt6b25lX2lkeF1bbHJ1XSk7XG4rXHRpZiAoV0FSTl9PTl9PTkNFKHZhbCBcdTAwM2MgMCkpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0dXJuIHZhbDtcbiB9XG4gXG4gdm9pZCBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzayk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaCBiL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmhcbmluZGV4IDYyMWM4NjUzZDhmN2UuLjhjZjgyOTg5ZWMyNjMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oXG5AQCAtMTAsNiArMTAsMTEgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91c2VyZmF1bHRmZF9rLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9sZWFmb3BzLmhcdTAwM2VcbiBcbitzdGF0aWMgaW5saW5lIGludCBmb2xpb19mbGFnc19pc19maWxlX2xydShjb25zdCB1bnNpZ25lZCBsb25nICpmbGFncylcbit7XG4rXHRyZXR1cm4gIXRlc3RfYml0KFBHX3N3YXBiYWNrZWQsIGZsYWdzKTtcbit9XG4rXG4gLyoqXG4gICogZm9saW9faXNfZmlsZV9scnUgLSBTaG91bGQgdGhlIGZvbGlvIGJlIG9uIGEgZmlsZSBMUlUgb3IgYW5vbiBMUlU/XG4gICogQGZvbGlvOiBUaGUgZm9saW8gdG8gdGVzdC5cbkBAIC0yNyw3ICszMiw3IEBAXG4gICovXG4gc3RhdGljIGlubGluZSBpbnQgZm9saW9faXNfZmlsZV9scnUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4tXHRyZXR1cm4gIWZvbGlvX3Rlc3Rfc3dhcGJhY2tlZChmb2xpbyk7XG4rXHRyZXR1cm4gZm9saW9fZmxhZ3NfaXNfZmlsZV9scnUoY29uc3RfZm9saW9fZmxhZ3MoZm9saW8sIDApKTtcbiB9XG4gXG4gc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIF9fdXBkYXRlX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbkBAIC0xNDIsMTAgKzE0Nyw0MiBAQCBzdGF0aWMgaW5saW5lIGludCBscnVfdGllcl9mcm9tX3JlZnMoaW50IHJlZnMsIGJvb2wgd29ya2luZ3NldClcbiBcdHJldHVybiB3b3JraW5nc2V0ID8gTUFYX05SX1RJRVJTIC0gMSA6IG9yZGVyX2Jhc2VfMihyZWZzKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X3JlZnMoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbisvKipcbisgKiBscnVfZ2VuX2Zyb21fZmxhZ3MgLSBSZXR1cm4gdGhlIExSVSBnZW5lcmF0aW9uIG51bWJlciBmcm9tIGZvbGlvIGZsYWdzLlxuKyAqIEBmbGFnczogZm9saW8gZmxhZ3NcbisgKlxuKyAqIFJldHVybnM6IEEgbnVtYmVyIGJldHdlZW4gMCBhbmQgKE1BWF9OUl9HRU5TIC0gMSksIGluY2x1c2l2ZS4gUmV0dXJuc1xuKyAqIC0xIGlmIHRoZSBmbGFncyBpbmRpY2F0ZSB0aGUgZm9saW8gaXMgb2ZmIHRoZSBsaXN0IChlLmcuLCBpc29sYXRlZCkuXG4rICovXG4rc3RhdGljIGlubGluZSBpbnQgbHJ1X2dlbl9mcm9tX2ZsYWdzKHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4re1xuK1x0aW50IGdlbiA9ICgoZmxhZ3MgXHUwMDI2IExSVV9HRU5fTUFTSykgXHUwMDNlXHUwMDNlIExSVV9HRU5fUEdPRkYpO1xuK1xuK1x0QlVJTERfQlVHX09OKExSVV9HRU5fTUFTSyBcdTAwMjYgTFJVX1JFRlNfTUFTSyk7XG4rXHRnZW4gLT0gMTtcbitcdFZNX1dBUk5fT05fT05DRShnZW4gIT0gLTEgXHUwMDI2XHUwMDI2IGdlbiBcdTAwM2U9IE1BWF9OUl9HRU5TKTtcbitcdHJldHVybiBnZW47XG4rfVxuK1xuKy8qKlxuKyAqIGxydV9nZW5fc2V0X2ZsYWdzIC0gU2V0IHRoZSBMUlUgZ2VuZXJhdGlvbiBudW1iZXIgdG8gc3BlY2lmaWVkIGZvbGlvIGZsYWdzLlxuKyAqIEBmbGFnczogcG9pbnRlciB0byB0aGUgZm9saW8gZmxhZ3NcbisgKiBAZ2VuOiBnZW5lcmF0aW9uIG51bWJlciwgYmV0d2VlbiAwIGFuZCAoTUFYX05SX0dFTlMgLSAxKSwgaW5jbHVzaXZlLlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBscnVfZ2VuX3NldF9mbGFncyh1bnNpZ25lZCBsb25nICpmbGFncywgaW50IGdlbilcbiB7XG4tXHR1bnNpZ25lZCBsb25nIGZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVx1MDAzZWZsYWdzLmYpO1xuK1x0Vk1fV0FSTl9PTl9PTkNFKGdlbiBcdTAwM2U9IE1BWF9OUl9HRU5TIHx8IGdlbiBcdTAwM2MgMCk7XG4rXG4rXHQqZmxhZ3MgXHUwMDI2PSB+TFJVX0dFTl9NQVNLO1xuK1x0KmZsYWdzIHw9IChnZW4gKyAxVUwpIFx1MDAzY1x1MDAzYyBMUlVfR0VOX1BHT0ZGO1xuK31cbiBcbisvKipcbisgKiBscnVfcmVmc19mcm9tX2ZsYWdzIC0gUmV0dXJuIExSVSByZWZlcmVuY2VkIC8gYWNjZXNzIGNvdW50IGZyb20gZm9saW8gZmxhZ3MuXG4rICogQGZsYWdzOiBmb2xpbyBmbGFnc1xuKyAqL1xuK3N0YXRpYyBpbmxpbmUgaW50IGxydV9yZWZzX2Zyb21fZmxhZ3ModW5zaWduZWQgbG9uZyBmbGFncylcbit7XG4gXHRpZiAoIShmbGFncyBcdTAwMjYgQklUKFBHX3JlZmVyZW5jZWQpKSlcbiBcdFx0cmV0dXJuIDA7XG4gXHQvKlxuQEAgLTE1NSwxMSArMTkyLDQwIEBAIHN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9yZWZzKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRyZXR1cm4gKChmbGFncyBcdTAwMjYgTFJVX1JFRlNfTUFTSykgXHUwMDNlXHUwMDNlIExSVV9SRUZTX1BHT0ZGKSArIDE7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9nZW4oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbisvKipcbisgKiBscnVfcmVmc19zZXRfZmxhZ3MgLSBTZXQgdGhlIExSVSByZWZlcmVuY2VkIC8gYWNjZXNzIGNvdW50IHRvIHNwZWNpZmllZCBmb2xpbyBmbGFncy5cbisgKiBAZmxhZ3M6IHBvaW50ZXIgdG8gdGhlIGZvbGlvIGZsYWdzXG4rICogQHJlZnM6IHJlZmVyZW5jZWQgLyBhY2Nlc3MgY291bnQgbnVtYmVyLCBiZXR3ZWVuIDAgYW5kIExSVV9SRUZTX01BWCwgaW5jbHVzaXZlLlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBscnVfcmVmc19zZXRfZmxhZ3ModW5zaWduZWQgbG9uZyAqZmxhZ3MsIHVuc2lnbmVkIGludCByZWZzKVxuK3tcbitcdFZNX1dBUk5fT05fT05DRShyZWZzIFx1MDAzZSBMUlVfUkVGU19NQVgpO1xuK1x0QlVJTERfQlVHX09OKExSVV9SRUZTX01BWCAhPSAoTFJVX1JFRlNfTUFTSyBcdTAwM2VcdTAwM2UgTFJVX1JFRlNfUEdPRkYpICsgMSk7XG4rXG4rXHQqZmxhZ3MgXHUwMDI2PSB+TFJVX1JFRlNfRkxBR1M7XG4rXHRpZiAoIXJlZnMpXG4rXHRcdHJldHVybjtcbitcdCpmbGFncyB8PSAoQklUKFBHX3JlZmVyZW5jZWQpIHwgKChyZWZzIC0gMVVMKSBcdTAwM2NcdTAwM2MgTFJVX1JFRlNfUEdPRkYpKTtcbit9XG4rXG4rc3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X3JlZnMoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRyZXR1cm4gbHJ1X3JlZnNfZnJvbV9mbGFncyhSRUFEX09OQ0UoKmNvbnN0X2ZvbGlvX2ZsYWdzKGZvbGlvLCAwKSkpO1xuK31cbitcbitzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fc2V0X2xydV9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCByZWZzKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tXHUwMDNlZmxhZ3MuZik7XG4rXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKCpmb2xpb19mbGFncyhmb2xpbywgMCkpO1xuIFxuLVx0cmV0dXJuICgoZmxhZ3MgXHUwMDI2IExSVV9HRU5fTUFTSykgXHUwMDNlXHUwMDNlIExSVV9HRU5fUEdPRkYpIC0gMTtcbitcdGRvIHtcbitcdFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzO1xuK1x0XHRscnVfcmVmc19zZXRfZmxhZ3MoXHUwMDI2bmV3X2ZsYWdzLCByZWZzKTtcbitcdH0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksIFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9nZW4oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRyZXR1cm4gbHJ1X2dlbl9mcm9tX2ZsYWdzKFJFQURfT05DRSgqY29uc3RfZm9saW9fZmxhZ3MoZm9saW8sIDApKSk7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2lzX2FjdGl2ZShjb25zdCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBnZW4pXG5AQCAtMjcwLDcgKzMzNiw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2FkZF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKHNlcSk7XG4gXHRmbGFncyA9IChnZW4gKyAxVUwpIFx1MDAzY1x1MDAzYyBMUlVfR0VOX1BHT0ZGO1xuIFx0Lyogc2VlIHRoZSBjb21tZW50IG9uIE1JTl9OUl9HRU5TIGFib3V0IFBHX2FjdGl2ZSAqL1xuLVx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfR0VOX01BU0sgfCBCSVQoUEdfYWN0aXZlKSwgZmxhZ3MpO1xuK1x0c2V0X21hc2tfYml0cyhmb2xpb19mbGFncyhmb2xpbywgMCksIExSVV9HRU5fTUFTSyB8IEJJVChQR19hY3RpdmUpLCBmbGFncyk7XG4gXG4gXHRscnVfZ2VuX3VwZGF0ZV9zaXplKGxydXZlYywgZm9saW8sIC0xLCBnZW4pO1xuIFx0LyogZm9yIGZvbGlvX3JvdGF0ZV9yZWNsYWltYWJsZSgpICovXG5AQCAtMjk1LDcgKzM2MSw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2RlbF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXG4gXHQvKiBmb3IgZm9saW9fbWlncmF0ZV9mbGFncygpICovXG4gXHRmbGFncyA9ICFyZWNsYWltaW5nIFx1MDAyNlx1MDAyNiBscnVfZ2VuX2lzX2FjdGl2ZShscnV2ZWMsIGdlbikgPyBCSVQoUEdfYWN0aXZlKSA6IDA7XG4tXHRmbGFncyA9IHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX0dFTl9NQVNLLCBmbGFncyk7XG4rXHRmbGFncyA9IHNldF9tYXNrX2JpdHMoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBMUlVfR0VOX01BU0ssIGZsYWdzKTtcbiBcdGdlbiA9ICgoZmxhZ3MgXHUwMDI2IExSVV9HRU5fTUFTSykgXHUwMDNlXHUwMDNlIExSVV9HRU5fUEdPRkYpIC0gMTtcbiBcbiBcdGxydV9nZW5fdXBkYXRlX3NpemUobHJ1dmVjLCBmb2xpbywgZ2VuLCAtMSk7XG5AQCAtMzA0LDExICszNzAsMTkgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZGVsX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fbWlncmF0ZV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZClcbisvKipcbisgKiBmb2xpb19taWdyYXRlX2xydV9yZWZzIC0gY29weSB0aGUgcmVmZXJlbmNlIHN0YXRlIHRvIGEgbmV3IGZvbGlvXG4rICogQG5ldzogdGhlIGRlc3RpbmF0aW9uIGZvbGlvXG4rICogQG9sZDogdGhlIHNvdXJjZSBmb2xpb1xuKyAqXG4rICogVHJhbnNmZXIgdGhlIHJlZmVyZW5jZSBzdGF0ZSB0byBAbmV3IGR1cmluZyBtaWdyYXRpb246IHRoZSBNR0xSVVxuKyAqIHJlZnMgY291bnQsIGluY2x1ZGluZyBQR19yZWZlcmVuY2VkLCBvciBqdXN0IFBHX3JlZmVyZW5jZWQgZm9yIHRoZVxuKyAqIGFjdGl2ZS9pbmFjdGl2ZSBMUlUuXG4rICovXG4rc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgcmVmcyA9IFJFQURfT05DRShvbGQtXHUwMDNlZmxhZ3MuZikgXHUwMDI2IExSVV9SRUZTX01BU0s7XG4tXG4tXHRzZXRfbWFza19iaXRzKFx1MDAyNm5ldy1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19NQVNLLCByZWZzKTtcbitcdEJVSUxEX0JVR19PTihMUlVfUkVGU19NQVNLIFx1MDAyNiBCSVQoUEdfcmVmZXJlbmNlZCkpO1xuK1x0Zm9saW9fc2V0X2xydV9yZWZzKG5ldywgZm9saW9fbHJ1X3JlZnMob2xkKSk7XG4gfVxuICNlbHNlIC8qICFDT05GSUdfTFJVX0dFTiAqL1xuIFxuQEAgLTMzNyw5ICs0MTEsMTAgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZGVsX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfcmVmcyhzdHJ1Y3QgZm9saW8gKm5ldywgY29uc3Qgc3RydWN0IGZvbGlvICpvbGQpXG4rc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKVxuIHtcbi1cbitcdGlmIChmb2xpb190ZXN0X3JlZmVyZW5jZWQob2xkKSlcbitcdFx0Zm9saW9fc2V0X3JlZmVyZW5jZWQobmV3KTtcbiB9XG4gI2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaCBiL2luY2x1ZGUvbGludXgvbW16b25lLmhcbmluZGV4IDk0ZjljM2ZmNTQxNjAuLjliMjdjZjUzYmRiYzcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG5AQCAtNDkyLDExICs0OTIsMTQgQEAgZW51bSBscnV2ZWNfZmxhZ3Mge1xuICAqIGZvbGlvLVx1MDAzZWZsYWdzLCBtYXNrZWQgYnkgTFJVX1JFRlNfTUFTSy5cbiAgKi9cbiAjZGVmaW5lIE1BWF9OUl9USUVSU1x0XHQ0VVxuKyNkZWZpbmUgTFJVX1RJRVJfTUlOXHRcdDBVXG4rI2RlZmluZSBMUlVfVElFUl9NQVhcdFx0KE1BWF9OUl9USUVSUyAtIDEpXG4gXG4gI2lmbmRlZiBfX0dFTkVSQVRJTkdfQk9VTkRTX0hcbiBcbiAjZGVmaW5lIExSVV9HRU5fTUFTS1x0XHQoKEJJVChMUlVfR0VOX1dJRFRIKSAtIDEpIFx1MDAzY1x1MDAzYyBMUlVfR0VOX1BHT0ZGKVxuICNkZWZpbmUgTFJVX1JFRlNfTUFTS1x0XHQoKEJJVChMUlVfUkVGU19XSURUSCkgLSAxKSBcdTAwM2NcdTAwM2MgTFJVX1JFRlNfUEdPRkYpXG4rI2RlZmluZSBMUlVfUkVGU19NQVhcdFx0QklUKExSVV9SRUZTX1dJRFRIKVxuIFxuIC8qXG4gICogRm9yIGZvbGlvcyBhY2Nlc3NlZCBtdWx0aXBsZSB0aW1lcyB0aHJvdWdoIGZpbGUgZGVzY3JpcHRvcnMsXG5kaWZmIC0tZ2l0IGEvbW0vZm9saW8uYyBiL21tL2ZvbGlvLmNcbmluZGV4IGMwMmRjZWE5YzAzYzIuLmE5MzIwNTkwNTdhYzEgMTAwNjQ0XG4tLS0gYS9tbS9mb2xpby5jXG4rKysgYi9tbS9mb2xpby5jXG5AQCAtMzUzLDI2ICszNTMsMjggQEAgc3RhdGljIHZvaWQgX19scnVfY2FjaGVfYWN0aXZhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbiBcbiBzdGF0aWMgdm9pZCBscnVfZ2VuX2luY19yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuLVx0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRShmb2xpby1cdTAwM2VmbGFncy5mKTtcbitcdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XG4rXHRpbnQgcmVmcztcbiBcbiBcdGlmIChmb2xpb190ZXN0X3VuZXZpY3RhYmxlKGZvbGlvKSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0Lyogc2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTICovXG4tXHRpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykpIHtcbi1cdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19NQVNLLCBCSVQoUEdfcmVmZXJlbmNlZCkpO1xuK1x0aWYgKCFmb2xpb19scnVfcmVmcyhmb2xpbykpIHtcbitcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAxKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuIFx0ZG8ge1xuLVx0XHRpZiAoKG9sZF9mbGFncyBcdTAwMjYgTFJVX1JFRlNfTUFTSykgPT0gTFJVX1JFRlNfTUFTSykge1xuK1x0XHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3M7XG4rXHRcdHJlZnMgPSBscnVfcmVmc19mcm9tX2ZsYWdzKG9sZF9mbGFncyk7XG4rXHRcdGlmIChyZWZzID09IExSVV9SRUZTX01BWCkge1xuIFx0XHRcdGlmICghZm9saW9fdGVzdF93b3JraW5nc2V0KGZvbGlvKSlcbiBcdFx0XHRcdGZvbGlvX3NldF93b3JraW5nc2V0KGZvbGlvKTtcbiBcdFx0XHRyZXR1cm47XG4gXHRcdH1cbi1cbi1cdFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzICsgQklUKExSVV9SRUZTX1BHT0ZGKTtcbi1cdH0gd2hpbGUgKCF0cnlfY21weGNoZyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xuK1x0XHRscnVfcmVmc19zZXRfZmxhZ3MoXHUwMDI2bmV3X2ZsYWdzLCByZWZzICsgMSk7XG4rXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBscnVfZ2VuX2NsZWFyX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcbkBAIC0zODQsNyArMzg2LDggQEAgc3RhdGljIGJvb2wgbHJ1X2dlbl9jbGVhcl9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRpZiAoZ2VuIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbi1cdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MgfCBCSVQoUEdfd29ya2luZ3NldCksIDApO1xuK1x0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcbitcdGZvbGlvX2NsZWFyX3dvcmtpbmdzZXQoZm9saW8pO1xuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuIFx0c2VxID0gUkVBRF9PTkNFKGZvbGlvX2xydXZlYyhmb2xpbyktXHUwMDNlbHJ1Z2VuLm1pbl9zZXFbdHlwZV0pO1xuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuY1xuaW5kZXggMTFiODVmNGI2ODI4Yi4uYTc1NzJkZWQ1NmM5ZCAxMDA2NDRcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xuKysrIGIvbW0vbWVtY29udHJvbC5jXG5AQCAtMTUyOSwyOCArMTUyOSwxMiBAQCB2b2lkIG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBscnVfbGlzdCBscnUsXG4gXHRcdFx0XHRpbnQgemlkLCBsb25nIG5yX3BhZ2VzKVxuIHtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICptejtcbi1cdHVuc2lnbmVkIGxvbmcgKmxydV9zaXplO1xuLVx0bG9uZyBzaXplO1xuIFxuIFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0bXogPSBjb250YWluZXJfb2YobHJ1dmVjLCBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSwgbHJ1dmVjKTtcbi1cdGxydV9zaXplID0gXHUwMDI2bXotXHUwMDNlbHJ1X3pvbmVfc2l6ZVt6aWRdW2xydV07XG4tXG4tXHRpZiAobnJfcGFnZXMgXHUwMDNjIDApXG4tXHRcdCpscnVfc2l6ZSArPSBucl9wYWdlcztcbi1cbi1cdHNpemUgPSAqbHJ1X3NpemU7XG4tXHRpZiAoV0FSTl9PTkNFKHNpemUgXHUwMDNjIDAsXG4tXHRcdFwiJXMoJXAsICVkLCAlbGQpOiBscnVfc2l6ZSAlbGRcXG5cIixcbi1cdFx0X19mdW5jX18sIGxydXZlYywgbHJ1LCBucl9wYWdlcywgc2l6ZSkpIHtcbi1cdFx0Vk1fQlVHX09OKDEpO1xuLVx0XHQqbHJ1X3NpemUgPSAwO1xuLVx0fVxuLVxuLVx0aWYgKG5yX3BhZ2VzIFx1MDAzZSAwKVxuLVx0XHQqbHJ1X3NpemUgKz0gbnJfcGFnZXM7XG4rXHRhdG9taWNfbG9uZ19hZGQobnJfcGFnZXMsIFx1MDAyNm16LVx1MDAzZWxydV96b25lX3NpemVbemlkXVtscnVdKTtcbiB9XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZS5jIGIvbW0vbWlncmF0ZS5jXG5pbmRleCAxNWI0NTgzMmJjZmE3Li5hMzY5ZDBjOTVjMzg2IDEwMDY0NFxuLS0tIGEvbW0vbWlncmF0ZS5jXG4rKysgYi9tbS9taWdyYXRlLmNcbkBAIC03NzYsOCArNzc2LDkgQEAgdm9pZCBmb2xpb19taWdyYXRlX2ZsYWdzKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0aW50IGNwdXBpZDtcbiBcbi1cdGlmIChmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pKVxuLVx0XHRmb2xpb19zZXRfcmVmZXJlbmNlZChuZXdmb2xpbyk7XG4rXHQvKiBDb3B5IHRoZSByZWZlcmVuY2Ugc3RhdGUsIGluY2x1ZGluZyBQR19yZWZlcmVuY2VkICovXG4rXHRmb2xpb19taWdyYXRlX2xydV9yZWZzKG5ld2ZvbGlvLCBmb2xpbyk7XG4rXG4gXHRpZiAoZm9saW9fdGVzdF91cHRvZGF0ZShmb2xpbykpXG4gXHRcdGZvbGlvX21hcmtfdXB0b2RhdGUobmV3Zm9saW8pO1xuIFx0aWYgKGZvbGlvX3Rlc3RfY2xlYXJfYWN0aXZlKGZvbGlvKSkge1xuQEAgLTgwNyw3ICs4MDgsNiBAQCB2b2lkIGZvbGlvX21pZ3JhdGVfZmxhZ3Moc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdGlmIChmb2xpb190ZXN0X2lkbGUoZm9saW8pKVxuIFx0XHRmb2xpb19zZXRfaWRsZShuZXdmb2xpbyk7XG4gXG4tXHRmb2xpb19taWdyYXRlX3JlZnMobmV3Zm9saW8sIGZvbGlvKTtcbiBcdC8qXG4gXHQgKiBDb3B5IE5VTUEgaW5mb3JtYXRpb24gdG8gdGhlIG5ldyBwYWdlLCB0byBwcmV2ZW50IG92ZXItZWFnZXJcbiBcdCAqIGZ1dHVyZSBtaWdyYXRpb25zIG9mIHRoaXMgc2FtZSBwYWdlLlxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IDczYTgxYjRhM2UxNjQuLjZmZGE5NDhhZWNmMmMgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuKysrIGIvbW0vdm1zY2FuLmNcbkBAIC04NDMsMTkgKzg0MywyMiBAQCBzdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXG4gXHRpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykgXHUwMDI2XHUwMDI2ICFmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pKSB7XG4gXHRcdC8qIEFjdGl2YXRlIGZpbGUtYmFja2VkIGV4ZWN1dGFibGUgZm9saW9zIGFmdGVyIGZpcnN0IHVzYWdlLiAqL1xuIFx0XHRpZiAoaXNfZXhlY19maWxlX2ZvbGlvKGZvbGlvLCB2bWFfZmxhZ3MpKSB7XG4tXHRcdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX3dvcmtpbmdzZXQpKTtcbitcdFx0XHRmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7XG4rXHRcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcbiBcdFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdFx0fVxuIFxuLVx0XHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX01BU0ssIEJJVChQR19yZWZlcmVuY2VkKSk7XG4rXHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMSk7XG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbiBcbiBcdC8qIFByb21vdGUgb24gc2Vjb25kIGFjY2VzcyAqL1xuLVx0aWYgKGZvbGlvX2xydV9yZWZzKGZvbGlvKSBcdTAwM2UgMSlcbi1cdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX3dvcmtpbmdzZXQpKTtcbi1cdGVsc2VcbitcdGlmIChmb2xpb19scnVfcmVmcyhmb2xpbykgXHUwMDNlIDEpIHtcbitcdFx0Zm9saW9fc2V0X3dvcmtpbmdzZXQoZm9saW8pO1xuK1x0XHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xuK1x0fSBlbHNlIHtcbiBcdFx0Zm9saW9fbWFya19hY2Nlc3NlZChmb2xpbyk7XG4rXHR9XG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gI2Vsc2VcbkBAIC0zMTk1LDggKzMxOTgsOCBAQCBzdHJ1Y3QgY3RybF9wb3Mge1xuIFx0aW50IGdhaW47XG4gfTtcbiBcbi1zdGF0aWMgdm9pZCByZWFkX2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCB0aWVyLCBpbnQgZ2Fpbixcbi1cdFx0XHQgIHN0cnVjdCBjdHJsX3BvcyAqcG9zKVxuK3N0YXRpYyB2b2lkIHJlYWRfY3RybF9wb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHRpZXJfbWluLFxuK1x0XHRcdCAgaW50IHRpZXJfbWF4LCBpbnQgZ2Fpbiwgc3RydWN0IGN0cmxfcG9zICpwb3MpXG4ge1xuIFx0aW50IGk7XG4gXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbkBAIC0zMjA1LDcgKzMyMDgsNyBAQCBzdGF0aWMgdm9pZCByZWFkX2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCB0aWVyLCBpbnQgZ2FpbixcbiBcdHBvcy1cdTAwM2VnYWluID0gZ2FpbjtcbiBcdHBvcy1cdTAwM2VyZWZhdWx0ZWQgPSBwb3MtXHUwMDNldG90YWwgPSAwO1xuIFxuLVx0Zm9yIChpID0gdGllciAlIE1BWF9OUl9USUVSUzsgaSBcdTAwM2M9IG1pbih0aWVyLCBNQVhfTlJfVElFUlMgLSAxKTsgaSsrKSB7XG4rXHRmb3IgKGkgPSB0aWVyX21pbjsgaSBcdTAwM2M9IHRpZXJfbWF4OyBpKyspIHtcbiBcdFx0cG9zLVx1MDAzZXJlZmF1bHRlZCArPSBscnVnZW4tXHUwMDNlYXZnX3JlZmF1bHRlZFt0eXBlXVtpXSArXG4gXHRcdFx0XHQgIGF0b21pY19sb25nX3JlYWQoXHUwMDI2bHJ1Z2VuLVx1MDAzZXJlZmF1bHRlZFtoaXN0XVt0eXBlXVtpXSk7XG4gXHRcdHBvcy1cdTAwM2V0b3RhbCArPSBscnVnZW4tXHUwMDNlYXZnX3RvdGFsW3R5cGVdW2ldICtcbkBAIC0zMjY2LDExICszMjY5LDExIEBAIHN0YXRpYyBib29sIHBvc2l0aXZlX2N0cmxfZXJyKHN0cnVjdCBjdHJsX3BvcyAqc3AsIHN0cnVjdCBjdHJsX3BvcyAqcHYpXG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbiBcbiAvKiBwcm9tb3RlIHBhZ2VzIGFjY2Vzc2VkIHRocm91Z2ggcGFnZSB0YWJsZXMgKi9cbi1zdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGdlbiwgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcbitzdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5ld19nZW4sIGludCAqaXNfZmlsZSxcbitcdFx0XHQgICAgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcbiB7XG4tXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVx1MDAzZWZsYWdzLmYpO1xuLVxuLVx0Vk1fV0FSTl9PTl9PTkNFKGdlbiBcdTAwM2U9IE1BWF9OUl9HRU5TKTtcbitcdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XG4rXHRpbnQgb2xkX2dlbjtcbiBcbiBcdC8qXG4gXHQgKiBTZWUgdGhlIGNvbW1lbnQgb24gTFJVX1JFRlNfRkxBR1MsIGFuZCBhY3RpdmF0ZSBmaWxlLWJhY2tlZFxuQEAgLTMyNzksMjAgKzMyODIsMjUgQEAgc3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBnZW4sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFcbiBcdCAqL1xuIFx0aWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pIFx1MDAyNlx1MDAyNiAhZm9saW9fdGVzdF93b3JraW5nc2V0KGZvbGlvKSBcdTAwMjZcdTAwMjZcbiBcdCAgICAhaXNfZXhlY19maWxlX2ZvbGlvKGZvbGlvLCB2bWFfZmxhZ3MpKSB7XG4tXHRcdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgQklUKFBHX3JlZmVyZW5jZWQpKTtcbitcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAxKTtcbiBcdFx0cmV0dXJuIC0xO1xuIFx0fVxuIFxuIFx0ZG8ge1xuK1x0XHRvbGRfZ2VuID0gbHJ1X2dlbl9mcm9tX2ZsYWdzKG9sZF9mbGFncyk7XG4rXHRcdG5ld19mbGFncyA9IG9sZF9mbGFncztcbitcbiBcdFx0LyogbHJ1X2dlbl9kZWxfZm9saW8oKSBoYXMgaXNvbGF0ZWQgdGhpcyBwYWdlPyAqL1xuLVx0XHRpZiAoIShvbGRfZmxhZ3MgXHUwMDI2IExSVV9HRU5fTUFTSykpXG4tXHRcdFx0cmV0dXJuIC0xO1xuK1x0XHRpZiAob2xkX2dlbiBcdTAwM2MgMClcbitcdFx0XHRicmVhaztcbiBcbi1cdFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzIFx1MDAyNiB+KExSVV9HRU5fTUFTSyB8IExSVV9SRUZTX0ZMQUdTKTtcbi1cdFx0bmV3X2ZsYWdzIHw9ICgoZ2VuICsgMVVMKSBcdTAwM2NcdTAwM2MgTFJVX0dFTl9QR09GRikgfCBCSVQoUEdfd29ya2luZ3NldCk7XG4tXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbitcdFx0bHJ1X2dlbl9zZXRfZmxhZ3MoXHUwMDI2bmV3X2ZsYWdzLCBuZXdfZ2VuKTtcbitcdFx0bHJ1X3JlZnNfc2V0X2ZsYWdzKFx1MDAyNm5ld19mbGFncywgMCk7XG4rXHRcdG5ld19mbGFncyB8PSBCSVQoUEdfd29ya2luZ3NldCk7XG4rXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xuIFxuLVx0cmV0dXJuICgob2xkX2ZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spIFx1MDAzZVx1MDAzZSBMUlVfR0VOX1BHT0ZGKSAtIDE7XG4rXHQqaXNfZmlsZSA9IGZvbGlvX2ZsYWdzX2lzX2ZpbGVfbHJ1KFx1MDAyNm9sZF9mbGFncyk7XG4rXHRyZXR1cm4gb2xkX2dlbjtcbiB9XG4gXG4gLyogcHJvdGVjdCBwYWdlcyBhY2Nlc3NlZCBtdWx0aXBsZSB0aW1lcyB0aHJvdWdoIGZpbGUgZGVzY3JpcHRvcnMgKi9cbkBAIC0zMzAxLDIxICszMzA5LDIwIEBAIHN0YXRpYyBpbnQgZm9saW9faW5jX2dlbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRpbnQgdHlwZSA9IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTtcbiBcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xuIFx0aW50IG5ld19nZW4sIG9sZF9nZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGxydWdlbi1cdTAwM2VtaW5fc2VxW3R5cGVdKTtcbi1cdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tXHUwMDNlZmxhZ3MuZik7XG4tXG4tXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIShvbGRfZmxhZ3MgXHUwMDI2IExSVV9HRU5fTUFTSyksIGZvbGlvKTtcbitcdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XG4gXG4gXHRkbyB7XG4tXHRcdG5ld19nZW4gPSAoKG9sZF9mbGFncyBcdTAwMjYgTFJVX0dFTl9NQVNLKSBcdTAwM2VcdTAwM2UgTFJVX0dFTl9QR09GRikgLSAxO1xuK1x0XHRuZXdfZ2VuID0gbHJ1X2dlbl9mcm9tX2ZsYWdzKG9sZF9mbGFncyk7XG4rXG4gXHRcdC8qIGZvbGlvX3VwZGF0ZV9nZW4oKSBoYXMgcHJvbW90ZWQgdGhpcyBwYWdlPyAqL1xuIFx0XHRpZiAobmV3X2dlbiBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IG5ld19nZW4gIT0gb2xkX2dlbilcbiBcdFx0XHRyZXR1cm4gbmV3X2dlbjtcbiBcbitcdFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzO1xuIFx0XHRuZXdfZ2VuID0gKG9sZF9nZW4gKyAxKSAlIE1BWF9OUl9HRU5TO1xuLVxuLVx0XHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3MgXHUwMDI2IH4oTFJVX0dFTl9NQVNLIHwgTFJVX1JFRlNfRkxBR1MpO1xuLVx0XHRuZXdfZmxhZ3MgfD0gKG5ld19nZW4gKyAxVUwpIFx1MDAzY1x1MDAzYyBMUlVfR0VOX1BHT0ZGO1xuLVx0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XG4rXHRcdGxydV9nZW5fc2V0X2ZsYWdzKFx1MDAyNm5ld19mbGFncywgbmV3X2dlbik7XG4rXHRcdGxydV9yZWZzX3NldF9mbGFncyhcdTAwMjZuZXdfZmxhZ3MsIDApO1xuK1x0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbiBcbiBcdGxydV9nZW5fdXBkYXRlX3NpemUobHJ1dmVjLCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbik7XG4gXG5AQCAtMzMyMyw5ICszMzMwLDggQEAgc3RhdGljIGludCBmb2xpb19pbmNfZ2VuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcbiB9XG4gXG4gc3RhdGljIHZvaWQgdXBkYXRlX2JhdGNoX3NpemUoc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaywgc3RydWN0IGZvbGlvICpmb2xpbyxcbi1cdFx0XHQgICAgICBpbnQgb2xkX2dlbiwgaW50IG5ld19nZW4pXG4rXHRcdFx0ICAgICAgaW50IG9sZF9nZW4sIGludCBuZXdfZ2VuLCBpbnQgdHlwZSlcbiB7XG4tXHRpbnQgdHlwZSA9IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTtcbiBcdGludCB6b25lID0gZm9saW9fem9uZW51bShmb2xpbyk7XG4gXHRpbnQgZGVsdGEgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4gXG5AQCAtMzUxMiwyMiArMzUxOCwyNCBAQCBzdGF0aWMgYm9vbCBzdWl0YWJsZV90b19zY2FuKGludCB0b3RhbCwgaW50IHlvdW5nKVxuIH1cbiBcbiBzdGF0aWMgdm9pZCB3YWxrX3VwZGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi1cdFx0c3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5ld19nZW4sIGJvb2wgZGlydHkpXG4rXHRcdHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBkaXJ0eSlcbiB7XG4tXHRpbnQgb2xkX2dlbjtcbitcdGludCBuZXdfZ2VuLCBvbGRfZ2VuLCBmaWxlO1xuIFxuIFx0aWYgKCFmb2xpbylcbiBcdFx0cmV0dXJuO1xuIFxuK1x0bmV3X2dlbiA9IGxydV9nZW5fZnJvbV9zZXEoUkVBRF9PTkNFKGxydXZlYy1cdTAwM2VscnVnZW4ubWF4X3NlcSkpO1xuK1xuIFx0aWYgKGRpcnR5IFx1MDAyNlx1MDAyNiAhZm9saW9fdGVzdF9kaXJ0eShmb2xpbykgXHUwMDI2XHUwMDI2XG4gXHQgICAgIShmb2xpb190ZXN0X2Fub24oZm9saW8pIFx1MDAyNlx1MDAyNiBmb2xpb190ZXN0X3N3YXBiYWNrZWQoZm9saW8pIFx1MDAyNlx1MDAyNlxuIFx0ICAgICAgIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkpXG4gXHRcdGZvbGlvX21hcmtfZGlydHkoZm9saW8pO1xuIFxuIFx0aWYgKHdhbGspIHtcbi1cdFx0b2xkX2dlbiA9IGZvbGlvX3VwZGF0ZV9nZW4oZm9saW8sIG5ld19nZW4sIFx1MDAyNnZtYS1cdTAwM2VmbGFncyk7XG4rXHRcdG9sZF9nZW4gPSBmb2xpb191cGRhdGVfZ2VuKGZvbGlvLCBuZXdfZ2VuLCBcdTAwMjZmaWxlLCBcdTAwMjZ2bWEtXHUwMDNlZmxhZ3MpO1xuIFx0XHRpZiAob2xkX2dlbiBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IG9sZF9nZW4gIT0gbmV3X2dlbilcbi1cdFx0XHR1cGRhdGVfYmF0Y2hfc2l6ZSh3YWxrLCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbik7XG4rXHRcdFx0dXBkYXRlX2JhdGNoX3NpemUod2FsaywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4sIGZpbGUpO1xuIFx0fSBlbHNlIGlmIChscnVfZ2VuX3NldF9yZWZzKGZvbGlvLCBcdTAwMjZ2bWEtXHUwMDNlZmxhZ3MpKSB7XG4gXHRcdG9sZF9nZW4gPSBmb2xpb19scnVfZ2VuKGZvbGlvKTtcbiBcdFx0aWYgKG9sZF9nZW4gXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBvbGRfZ2VuICE9IG5ld19nZW4pXG5AQCAtMzU0OSw4ICszNTU3LDYgQEAgc3RhdGljIGJvb2wgd2Fsa19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrID0gYXJncy1cdTAwM2Vwcml2YXRlO1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKHdhbGstXHUwMDNlbHJ1dmVjKTtcbiBcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQod2Fsay1cdTAwM2VscnV2ZWMpO1xuLVx0REVGSU5FX01BWF9TRVEod2Fsay1cdTAwM2VscnV2ZWMpO1xuLVx0aW50IGdlbiA9IGxydV9nZW5fZnJvbV9zZXEobWF4X3NlcSk7XG4gXHR1bnNpZ25lZCBpbnQgbnI7XG4gXHRwbWRfdCBwbWR2YWw7XG4gXG5AQCAtMzYwMSw3ICszNjA3LDcgQEAgc3RhdGljIGJvb2wgd2Fsa19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGlmIChsYXN0ICE9IGZvbGlvKSB7XG4tXHRcdFx0d2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy1cdTAwM2V2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuK1x0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtXHUwMDNldm1hLCB3YWxrLVx1MDAzZWxydXZlYywgbGFzdCwgZGlydHkpO1xuIFxuIFx0XHRcdGxhc3QgPSBmb2xpbztcbiBcdFx0XHRkaXJ0eSA9IGZhbHNlO1xuQEAgLTM2MTQsNyArMzYyMCw3IEBAIHN0YXRpYyBib29sIHdhbGtfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0XHR3YWxrLVx1MDAzZW1tX3N0YXRzW01NX0xFQUZfWU9VTkddICs9IG5yO1xuIFx0fVxuIFxuLVx0d2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy1cdTAwM2V2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuK1x0d2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy1cdTAwM2V2bWEsIHdhbGstXHUwMDNlbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XG4gXHRsYXN0ID0gTlVMTDtcbiBcbiBcdGlmIChpIFx1MDAzYyBQVFJTX1BFUl9QVEUgXHUwMDI2XHUwMDI2IGdldF9uZXh0X3ZtYShQTURfTUFTSywgUEFHRV9TSVpFLCBhcmdzLCBcdTAwMjZzdGFydCwgXHUwMDI2ZW5kKSlcbkBAIC0zNjM3LDggKzM2NDMsNiBAQCBzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYVxuIFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGFyZ3MtXHUwMDNlcHJpdmF0ZTtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyh3YWxrLVx1MDAzZWxydXZlYyk7XG4gXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KHdhbGstXHUwMDNlbHJ1dmVjKTtcbi1cdERFRklORV9NQVhfU0VRKHdhbGstXHUwMDNlbHJ1dmVjKTtcbi1cdGludCBnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpO1xuIFxuIFx0Vk1fV0FSTl9PTl9PTkNFKHB1ZF9sZWFmKCpwdWQpKTtcbiBcbkBAIC0zNjkyLDcgKzM2OTYsNyBAQCBzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYVxuIFx0XHRcdGdvdG8gbmV4dDtcbiBcbiBcdFx0aWYgKGxhc3QgIT0gZm9saW8pIHtcbi1cdFx0XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuK1x0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgd2Fsay1cdTAwM2VscnV2ZWMsIGxhc3QsIGRpcnR5KTtcbiBcbiBcdFx0XHRsYXN0ID0gZm9saW87XG4gXHRcdFx0ZGlydHkgPSBmYWxzZTtcbkBAIC0zNzA2LDcgKzM3MTAsNyBAQCBzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYVxuIFx0XHRpID0gaSBcdTAwM2UgTUlOX0xSVV9CQVRDSCA/IDAgOiBmaW5kX25leHRfYml0KGJpdG1hcCwgTUlOX0xSVV9CQVRDSCwgaSkgKyAxO1xuIFx0fSB3aGlsZSAoaSBcdTAwM2M9IE1JTl9MUlVfQkFUQ0gpO1xuIFxuLVx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcbitcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgd2Fsay1cdTAwM2VscnV2ZWMsIGxhc3QsIGRpcnR5KTtcbiBcbiBcdGxhenlfbW11X21vZGVfZGlzYWJsZSgpO1xuIFx0c3Bpbl91bmxvY2socHRsKTtcbkBAIC00MjcwLDggKzQyNzQsNiBAQCBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXG4gXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gZm9saW9fcGdkYXQoZm9saW8pO1xuIFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjO1xuIFx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlO1xuLVx0dW5zaWduZWQgbG9uZyBtYXhfc2VxO1xuLVx0aW50IGdlbjtcbiBcbiBcdGxvY2tkZXBfYXNzZXJ0X2hlbGQocHZtdy1cdTAwM2VwdGwpO1xuIFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3RfbHJ1KGZvbGlvKSwgZm9saW8pO1xuQEAgLTQzMDgsOCArNDMxMCw2IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcbiBcbiBcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhmb2xpbyk7XG4gXHRscnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhtZW1jZywgcGdkYXQpO1xuLVx0bWF4X3NlcSA9IFJFQURfT05DRSgobHJ1dmVjKS1cdTAwM2VscnVnZW4ubWF4X3NlcSk7XG4tXHRnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpO1xuIFx0bW1fc3RhdGUgPSBnZXRfbW1fc3RhdGUobHJ1dmVjKTtcbiBcbiBcdGxhenlfbW11X21vZGVfZW5hYmxlKCk7XG5AQCAtNDM0MSw3ICs0MzQxLDcgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRpZiAobGFzdCAhPSBmb2xpbykge1xuLVx0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XG4rXHRcdFx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBscnV2ZWMsIGxhc3QsIGRpcnR5KTtcbiBcbiBcdFx0XHRsYXN0ID0gZm9saW87XG4gXHRcdFx0ZGlydHkgPSBmYWxzZTtcbkBAIC00MzUzLDEzICs0MzUzLDE0IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcbiBcdFx0eW91bmcgKz0gbnI7XG4gXHR9XG4gXG4tXHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuK1x0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBscnV2ZWMsIGxhc3QsIGRpcnR5KTtcbiBcbiBcdGxhenlfbW11X21vZGVfZGlzYWJsZSgpO1xuIFxuIFx0LyogZmVlZGJhY2sgZnJvbSBybWFwIHdhbGtlcnMgdG8gcGFnZSB0YWJsZSB3YWxrZXJzICovXG4gXHRpZiAobW1fc3RhdGUgXHUwMDI2XHUwMDI2IHN1aXRhYmxlX3RvX3NjYW4oaSwgeW91bmcpKVxuLVx0XHR1cGRhdGVfYmxvb21fZmlsdGVyKG1tX3N0YXRlLCBtYXhfc2VxLCBwdm13LVx1MDAzZXBtZCk7XG4rXHRcdHVwZGF0ZV9ibG9vbV9maWx0ZXIobW1fc3RhdGUsIFJFQURfT05DRShscnV2ZWMtXHUwMDNlbHJ1Z2VuLm1heF9zZXEpLFxuK1x0XHRcdFx0ICAgIHB2bXctXHUwMDNlcG1kKTtcbiBcbiBcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbiBcbkBAIC00NzE2LDcgKzQ3MTcsNyBAQCBzdGF0aWMgYm9vbCBpc29sYXRlX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHNjYVxuIFxuIFx0Lyogc2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTICovXG4gXHRpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykpXG4tXHRcdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgMCk7XG4rXHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XG4gXG4gXHRzdWNjZXNzID0gbHJ1X2dlbl9kZWxfZm9saW8obHJ1dmVjLCBmb2xpbywgdHJ1ZSk7XG4gXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIXN1Y2Nlc3MsIGZvbGlvKTtcbkBAIC00ODA5LDkgKzQ4MTAsOSBAQCBzdGF0aWMgaW50IGdldF90aWVyX2lkeChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlKVxuIFx0ICogVGhpcyB2YWx1ZSBpcyBjaG9zZW4gYmVjYXVzZSBhbnkgb3RoZXIgdGllciB3b3VsZCBoYXZlIGF0IGxlYXN0IHR3aWNlXG4gXHQgKiBhcyBtYW55IHJlZmF1bHRzIGFzIHRoZSBmaXJzdCB0aWVyLlxuIFx0ICovXG4tXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgdHlwZSwgMCwgMiwgXHUwMDI2c3ApO1xuLVx0Zm9yICh0aWVyID0gMTsgdGllciBcdTAwM2MgTUFYX05SX1RJRVJTOyB0aWVyKyspIHtcbi1cdFx0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIHRpZXIsIDMsIFx1MDAyNnB2KTtcbitcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCBMUlVfVElFUl9NSU4sIExSVV9USUVSX01JTiwgMiwgXHUwMDI2c3ApO1xuK1x0Zm9yICh0aWVyID0gTFJVX1RJRVJfTUlOICsgMTsgdGllciBcdTAwM2M9IExSVV9USUVSX01BWDsgdGllcisrKSB7XG4rXHRcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCB0aWVyLCB0aWVyLCAzLCBcdTAwMjZwdik7XG4gXHRcdGlmICghcG9zaXRpdmVfY3RybF9lcnIoXHUwMDI2c3AsIFx1MDAyNnB2KSlcbiBcdFx0XHRicmVhaztcbiBcdH1cbkBAIC00ODMyLDggKzQ4MzMsMTAgQEAgc3RhdGljIGludCBnZXRfdHlwZV90b19zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3MpXG4gXHQgKiBDb21wYXJlIHRoZSBzdW0gb2YgYWxsIHRpZXJzIG9mIGFub24gd2l0aCB0aGF0IG9mIGZpbGUgdG8gZGV0ZXJtaW5lXG4gXHQgKiB3aGljaCB0eXBlIHRvIHNjYW4uXG4gXHQgKi9cbi1cdHJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0FOT04sIE1BWF9OUl9USUVSUywgc3dhcHBpbmVzcywgXHUwMDI2c3ApO1xuLVx0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fRklMRSwgTUFYX05SX1RJRVJTLCBNQVhfU1dBUFBJTkVTUyAtIHN3YXBwaW5lc3MsIFx1MDAyNnB2KTtcbitcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0FOT04sIExSVV9USUVSX01JTiwgTFJVX1RJRVJfTUFYLFxuK1x0XHQgICAgICBzd2FwcGluZXNzLCBcdTAwMjZzcCk7XG4rXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9GSUxFLCBMUlVfVElFUl9NSU4sIExSVV9USUVSX01BWCxcbitcdFx0ICAgICAgTUFYX1NXQVBQSU5FU1MgLSBzd2FwcGluZXNzLCBcdTAwMjZwdik7XG4gXG4gXHRyZXR1cm4gcG9zaXRpdmVfY3RybF9lcnIoXHUwMDI2c3AsIFx1MDAyNnB2KTtcbiB9XG5AQCAtNDkzMiw4ICs0OTM1LDEwIEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHR9XG4gXG4gXHRcdC8qIGRvbid0IGFkZCByZWplY3RlZCBmb2xpb3MgdG8gdGhlIG9sZGVzdCBnZW5lcmF0aW9uICovXG4tXHRcdGlmIChscnVfZ2VuX2ZvbGlvX3NlcShscnV2ZWMsIGZvbGlvLCBmYWxzZSkgPT0gbWluX3NlcVt0eXBlXSlcbi1cdFx0XHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX0ZMQUdTLCBCSVQoUEdfYWN0aXZlKSk7XG4rXHRcdGlmIChscnVfZ2VuX2ZvbGlvX3NlcShscnV2ZWMsIGZvbGlvLCBmYWxzZSkgPT0gbWluX3NlcVt0eXBlXSkge1xuK1x0XHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XG4rXHRcdFx0Zm9saW9fc2V0X2FjdGl2ZShmb2xpbyk7XG4rXHRcdH1cbiBcdH1cbiBcbiBcdG1vdmVfZm9saW9zX3RvX2xydShcdTAwMjZsaXN0KTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE5OjAzOjI0Ljg4NTg5MzgxMloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk0MDUwNTQ3MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaDogTUdMUlUgUmVmYWN0b3JpbmcqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGluIGZyb250IG9mIG1lLCBhbmQgbXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgd2hldGhlciBpdCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0aGF0IHdhcnJhbnQgZnV6emluZy4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJIHF1aWNrbHkgemVybyBpbiBvbiB0aGUgbW9kaWZpZWQgZmlsZXM6IGBpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaGAsIGBpbmNsdWRlL2xpbnV4L21tX2lubGluZS5oYCwgYGluY2x1ZGUvbGludXgvbW16b25lLmhgLCBgbW0vZm9saW8uY2AsIGBtbS9tZW1jb250cm9sLmNgLCBgbW0vbWlncmF0ZS5jYCwgYW5kIGBtbS92bXNjYW4uY2AuIFRoZSBmYWN0IHRoYXQgaXQgdG91Y2hlcyBzbyBtYW55IGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYXJlYXMgaW1tZWRpYXRlbHkgcmFpc2VzIGEgZmxhZy4gSXQncyBjbGVhcmx5IHRpZWQgdG8gTFJVIGdlbmVyYXRpb24gKE1HTFJVKSwgYW5kIG1lbWNvbnRyb2wuIEkgbmVlZCB0byBkaWcgaW50byB0aGUgZGV0YWlscy5cblxuQWxyaWdodCwgdGhlIGNoYW5nZXMgaW4gYGluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oYCBhcmUgYWJvdXQgYXRvbWljIG9wZXJhdGlvbnM7IGBscnVfem9uZV9zaXplYCBpcyBub3cgYW4gYGF0b21pY19sb25nX3RgIGFuZCBgbWVtX2Nncm91cF9nZXRfem9uZV9scnVfc2l6ZWAgbGV2ZXJhZ2VzIGBhdG9taWNfbG9uZ19yZWFkYC4gU21hcnQgbW92ZSwgdGhhdCdzIGxpa2VseSBmaXhpbmcgYSByYWNlIGNvbmRpdGlvbi4gVGhlIGNoYW5nZXMgaW4gYGluY2x1ZGUvbGludXgvbW1faW5saW5lLmhgIGFyZSBpbmxpbmUgZnVuY3Rpb25zIGZvciBgZm9saW9fZmxhZ3NfaXNfZmlsZV9scnVgLCBgbHJ1X2dlbl9mcm9tX2ZsYWdzYCwgYGxydV9nZW5fc2V0X2ZsYWdzYCwgYGxydV9yZWZzX2Zyb21fZmxhZ3NgLCBgbHJ1X3JlZnNfc2V0X2ZsYWdzYCwgYGZvbGlvX3NldF9scnVfcmVmc2AsIGFuZCByZXBsYWNpbmcgYGZvbGlvX21pZ3JhdGVfcmVmc2Agd2l0aCBgZm9saW9fbWlncmF0ZV9scnVfcmVmc2AuXG5cblRoZSBvdGhlciBmaWxlIGNoYW5nZXMsIGBtbS9mb2xpby5jYCwgYG1tL21lbWNvbnRyb2wuY2AsIGBtbS9taWdyYXRlLmNgLCBhbmQgYG1tL3Ztc2Nhbi5jYCBhbGwgc2VlbSB0byBiZSBhZGp1c3RpbmcgdG8gdGhlIG5ldyBpbmxpbmUgZnVuY3Rpb25zIGFuZCB0aGUgYXRvbWljIG9wZXJhdGlvbnMuIGBscnVfZ2VuX2luY19yZWZzYCBhbmQgYGxydV9nZW5fY2xlYXJfcmVmc2AgYXJlIHVwZGF0ZWQsIGFuZCBgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVgIG5vdyB1c2VzIGBhdG9taWNfbG9uZ19hZGRgLiBUaGUgbWlncmF0aW9uIGFuZCBWTSBzY2FubmluZyB1cGRhdGVzIGFyZSBhbGwgaW50ZXJjb25uZWN0ZWQgd2l0aCB0aGUgTFJVIGdlbmVyYXRpb24gYW5kIGZsYWdzLiBUaGUgYHJlYWRfY3RybF9wb3NgIHVwZGF0ZSB3aXRoIHRoZSBgdGllcl9taW5gIGFuZCBgdGllcl9tYXhgIHBhcmFtZXRlcnMgbG9va3MgaW50ZXJlc3RpbmcsIHRvby5cblxuU28sIGluIGVzc2VuY2UsIHRoaXMgaXMgYSByZWZhY3RvcmluZyBlZmZvcnQuIEl0IHNlZW1zIHRvIGJlIGNsZWFuaW5nIHVwIHRoZSBMUlUgZ2VuZXJhdGlvbiBmbGFncyBoYW5kbGluZywgaW1wcm92aW5nIGNvbmN1cnJlbmN5IHRocm91Z2ggYXRvbWljIG9wZXJhdGlvbnMgb24gYGxydV96b25lX3NpemVgLCBhbmQgcG90ZW50aWFsbHkgZml4aW5nIHRoYXQgcmFjZSBjb25kaXRpb24uXG5cbldhaXQgYSBtaW51dGUuLi4gTUdMUlUsIHRoYXQncyBhIGJpZyBkZWFsLiBHaXZlbiB0aGUgY2hhbmdlcyB0byB0aGUgY29yZSBNTSBsb2dpYywgdGhhdCBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0IG5lZWRzIGZ1enppbmcuIE5vdywgd2hhdCdzIHRoZSByZWxldmFudCBjb25maWcgb3B0aW9uIGZvciBNR0xSVT8gQWgsIGl0J3MgYENPTkZJR19MUlVfR0VOYC4gRXhjZWxsZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTQwOCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzNSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE5OjAzOjM0LjI5MDk1MDc3NFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQ1ODY2MjI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBMUlVfR0VOXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTM5Mz1jb25maWcgUFRFX01BUktFUl9VRkZEX1dQXFxuLS1cXG5tbS9LY29uZmlnLTE0MDMtIyBtdWx0aS1nZW4gTFJVIHtcXG5tbS9LY29uZmlnOjE0MDQ6Y29uZmlnIExSVV9HRU5cXG5tbS9LY29uZmlnLTE0MDUtXFx0Ym9vbCBcXFwiTXVsdGktR2VuIExSVVxcXCJcXG4tLVxcbm1tL0tjb25maWctMTQxMi1cXG5tbS9LY29uZmlnOjE0MTM6Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxcbm1tL0tjb25maWctMTQxNC1cXHRib29sIFxcXCJFbmFibGUgYnkgZGVmYXVsdFxcXCJcXG4tLVxcbm1tL0tjb25maWctMTQxOC1cXG5tbS9LY29uZmlnOjE0MTk6Y29uZmlnIExSVV9HRU5fU1RBVFNcXG5tbS9LY29uZmlnLTE0MjAtXFx0Ym9vbCBcXFwiRnVsbCBzdGF0cyBmb3IgZGVidWdnaW5nXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xNDI3LVxcbm1tL0tjb25maWc6MTQyODpjb25maWcgTFJVX0dFTl9XQUxLU19NTVVcXG5tbS9LY29uZmlnLTE0MjktXFx0ZGVmX2Jvb2wgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxOTowMzozNS45MzY4MjA5N1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NjkxNTc4MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkVuYWJsaW5nIExSVSBHZW5lcmF0aW9uOiBBIFF1aWNrIENoZWNrKipcblxuUmlnaHQsIGl0IHNlZW1zIGxpa2Ugd2UgbmVlZCB0byBnZXQgYExSVV9HRU5gIGFuZCBgTFJVX0dFTl9FTkFCTEVEYCBhY3RpdmF0ZWQuIFNvdW5kcyBwcm9taXNpbmcgZm9yIHNvbWUgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnRzLCBvciBwZXJoYXBzIG5ldyBmdW5jdGlvbmFsaXR5IGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCByZWFsbS4gQmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIHRoZSBpbXBsaWNhdGlvbnMsIGxldCBtZSBxdWlja2x5IHZlcmlmeSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoZW1zZWx2ZXMuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNoZWNrIGBtbS9LY29uZmlnYC4gVGhhdCdzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGRlZmluaXRpdmUgZG9jdW1lbnRhdGlvbiBhbmQgcGVyaGFwcyBkZXBlbmRlbmNpZXMgZm9yIGBMUlVfR0VOYC4gSSdsbCBjb25maXJtIGl0cyBleGlzdGVuY2UgdGhlcmUsIHJlYWQgYW55IGFzc29jaWF0ZWQgY29tbWVudHMgZm9yIGNvbnRleHQsIGFuZCBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG9idmlvdXMgY29uZmxpY3RzIGJlZm9yZSBwcm9jZWVkaW5nLiBUaW1lIHRvIHNlZSB3aGF0IHRoZSBrZXJuZWwgY29uZmlnIGhhcyB0byBzYXkhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNzg4LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTk6MDM6MzkuNDA1OTgwNTk5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMzg3Mjg5MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVwZW5kcyBvbi4qTFJVX0dFTlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTE0MTM9Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxcbm1tL0tjb25maWctMTQxNC1cXHRib29sIFxcXCJFbmFibGUgYnkgZGVmYXVsdFxcXCJcXG5tbS9LY29uZmlnOjE0MTU6XFx0ZGVwZW5kcyBvbiBMUlVfR0VOXFxubW0vS2NvbmZpZy0xNDE2LVxcdGhlbHBcXG4tLVxcbm1tL0tjb25maWc9MTQxOT1jb25maWcgTFJVX0dFTl9TVEFUU1xcbm1tL0tjb25maWctMTQyMC1cXHRib29sIFxcXCJGdWxsIHN0YXRzIGZvciBkZWJ1Z2dpbmdcXFwiXFxubW0vS2NvbmZpZzoxNDIxOlxcdGRlcGVuZHMgb24gTFJVX0dFTlxcbm1tL0tjb25maWctMTQyMi1cXHRoZWxwXFxuLS1cXG5tbS9LY29uZmlnPTE0Mjg9Y29uZmlnIExSVV9HRU5fV0FMS1NfTU1VXFxubW0vS2NvbmZpZy0xNDI5LVxcdGRlZl9ib29sIHlcXG5tbS9LY29uZmlnOjE0MzA6XFx0ZGVwZW5kcyBvbiBMUlVfR0VOIFxcdTAwMjZcXHUwMDI2IEFSQ0hfSEFTX0hXX1BURV9ZT1VOR1xcbm1tL0tjb25maWctMTQzMS0jIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTk6MDM6NDEuNTQ0NzE2Njc3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIwNjc2ODMyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIERlcGVuZGVuY3kgQ2hhaW4gZm9yIGBMUlVfR0VOYCoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhpcy4gSSdtIHN0YXJ0aW5nIGJ5IHRha2luZyBhIGxvb2sgYXQgYGNvbmZpZyBMUlVfR0VOYCBhbmQgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMuIEl0J3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHdoYXQgb3RoZXIgY29tcG9uZW50cyBvciBmZWF0dXJlcyBoaW5nZSBvbiB0aGlzIHRvIGFjY3VyYXRlbHkgYXNzZXNzIGl0cyBpbXBhY3QgYW5kIHBvdGVudGlhbCBjb25mbGljdHMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIldoYXQgZG93bnN0cmVhbSBlZmZlY3RzIHdpbGwgYSBjaGFuZ2UgaGVyZSBjYXVzZT9cIiBJIG5lZWQgdG8gbWV0aWN1bG91c2x5IG1hcCB0aGlzIG91dC4gSSdsbCBuZWVkIHRvIGlkZW50aWZ5IHdoaWNoIG90aGVyIGZsYWdzLCBjb25maWd1cmF0aW9ucywgb3IgZXZlbiBjb2RlIG1vZHVsZXMgYXJlIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgbGlua2VkIHRvIGBMUlVfR0VOYC4gS25vd2luZyB0aGlzIHdpbGwgZGV0ZXJtaW5lIHRoZSBuZWNlc3NhcnkgcHJlY2F1dGlvbnMgcmVxdWlyZWQgd2hlbiB0d2Vha2luZyBgTFJVX0dFTmAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMjM3LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTk6MDM6NDQuNzUxNDg3ODQxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MDk0MjE2MzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIExSVV9HRU4kXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTM5Mz1jb25maWcgUFRFX01BUktFUl9VRkZEX1dQXFxuLS1cXG5tbS9LY29uZmlnLTE0MDMtIyBtdWx0aS1nZW4gTFJVIHtcXG5tbS9LY29uZmlnOjE0MDQ6Y29uZmlnIExSVV9HRU5cXG5tbS9LY29uZmlnLTE0MDUtXFx0Ym9vbCBcXFwiTXVsdGktR2VuIExSVVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTk6MDM6NDYuNjYwOTE0NjUzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODQ4OTA5NDE2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBpbnRvIGBtbS9LY29uZmlnYCBMaW5lIDE0MDQqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBjb25maWd1cmF0aW9uLiBJJ20gc3BlY2lmaWNhbGx5IHRhcmdldGluZyBsaW5lIDE0MDQgaW4gYG1tL0tjb25maWdgLiBJJ20gZ3Vlc3NpbmcgdGhhdCdzIHdoZXJlIGEgcGFydGljdWxhciBvcHRpb24gb3IgZ3JvdXAgb2YgcmVsYXRlZCBvcHRpb25zIGZvciBtZW1vcnkgbWFuYWdlbWVudCBpcyBkZWZpbmVkLiBHaXZlbiB0aGUgY29udGV4dCBvZiB0aGUgYG1tL2AgZGlyZWN0b3J5LCBpdCdzIGxpa2VseSBkZWFsaW5nIHdpdGggc29tZSBhc3BlY3Qgb2YgYWxsb2NhdGlvbiwgdmlydHVhbCBtZW1vcnksIE5VTUEsIG9yIHBlcmhhcHMgc29tZSBzcGVjaWZpYyBhcmNoaXRlY3R1cmUtcmVsYXRlZCBtZW1vcnkgaGFuZGxpbmcuIEknbSBleHBlY3RpbmcgdG8gc2VlIGEgYGNvbmZpZ2AgZGVmaW5pdGlvbiwgcG90ZW50aWFsbHkgbmVzdGVkIHdpdGhpbiBhIGBtZW51YCwgYGNob2ljZWAsIG9yIGEgY29uZGl0aW9uYWwgYmxvY2sgdXNpbmcgYGlmYCBvciBgc2VsZWN0YC4gSG9wZWZ1bGx5LCB0aGVyZSBhcmUgY29tbWVudHMgdGhhdCBnaXZlIG1lIGEgY2x1ZSBhYm91dCB0aGUgaW50ZW50IG9mIHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24gb3IgZ3JvdXAuIEknbSBhbnRpY2lwYXRpbmcgdGhhdCBJIHdpbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IHRvIGZ1bGx5IGdyYXNwIGl0LiBJ4oCZbSBob3BpbmcgdGhhdCBJIGhhdmUgc29tZSBwcmlvciBrbm93bGVkZ2UgYWJvdXQgdGhlIHBhcnRpY3VsYXIgc3Vic3lzdGVtIHRoYXQncyB0b3VjaGVkIGF0IHRoYXQgbGluZSBvZiBjb2RlLiBMZXQncyBzZWUgd2hhdCBnZW1zIHdlIGNhbiBmaW5kLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNTEzLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTk6MDM6NTUuMTUwMDExMDg4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNjgzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0MDAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE0MDA6XFx0XFx0ICBwdXJwb3Nlcy4gIEl0IGlzIHJlcXVpcmVkIHRvIGVuYWJsZSB1c2VyZmF1bHRmZCB3cml0ZSBwcm90ZWN0aW9uIG9uXFxuMTQwMTpcXHRcXHQgIGZpbGUtYmFja2VkIG1lbW9yeSB0eXBlcyBsaWtlIHNobWVtIGFuZCBodWdldGxiZnMuXFxuMTQwMjpcXHRcXG4xNDAzOlxcdCMgbXVsdGktZ2VuIExSVSB7XFxuMTQwNDpcXHRjb25maWcgTFJVX0dFTlxcbjE0MDU6XFx0XFx0Ym9vbCBcXFwiTXVsdGktR2VuIExSVVxcXCJcXG4xNDA2OlxcdFxcdGRlcGVuZHMgb24gTU1VXFxuMTQwNzpcXHRcXHQjIG1ha2Ugc3VyZSBmb2xpby1cXHUwMDNlZmxhZ3MgaGFzIGVub3VnaCBzcGFyZSBiaXRzXFxuMTQwODpcXHRcXHRkZXBlbmRzIG9uIDY0QklUIHx8ICFTUEFSU0VNRU0gfHwgU1BBUlNFTUVNX1ZNRU1NQVBcXG4xNDA5OlxcdFxcdGhlbHBcXG4xNDEwOlxcdFxcdCAgQSBoaWdoIHBlcmZvcm1hbmNlIExSVSBpbXBsZW1lbnRhdGlvbiB0byBvdmVyY29tbWl0IG1lbW9yeS4gU2VlXFxuMTQxMTpcXHRcXHQgIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdCBmb3IgZGV0YWlscy5cXG4xNDEyOlxcdFxcbjE0MTM6XFx0Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxcbjE0MTQ6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIGJ5IGRlZmF1bHRcXFwiXFxuMTQxNTpcXHRcXHRkZXBlbmRzIG9uIExSVV9HRU5cXG4xNDE2OlxcdFxcdGhlbHBcXG4xNDE3OlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgbXVsdGktZ2VuIExSVSBieSBkZWZhdWx0LlxcbjE0MTg6XFx0XFxuMTQxOTpcXHRjb25maWcgTFJVX0dFTl9TVEFUU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxOTowMzo1NS4xNTAxMjExNzhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzA5ODkyNTQ3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIExSVSBHZW5lcmF0aW9uIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCByZWxhdGVkIHRvIExSVSBnZW5lcmF0aW9uLiBUaGUga2V5IGNvbmZpZ3VyYXRpb25zIGhlcmUgYXJlIGBMUlVfR0VOYCBhbmQgYExSVV9HRU5fRU5BQkxFRGAg4oCTIHRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIE5vdywgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0IHRoaXMgcGF0Y2ggYWN0dWFsbHkgKmRvZXMqLiBJIHNlZSBpdCBtb2RpZmllcyBzZXZlcmFsIGZ1bmN0aW9ucy4gTGV0J3Mgc2VlLi4uXG5cblNwZWNpZmljYWxseSwgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgaGF2ZSBiZWVuIG1vZGlmaWVkOiBgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVgLCBgZm9saW9fbWlncmF0ZV9mbGFnc2AsIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCwgYGV2aWN0X2ZvbGlvc2AsIGB3YWxrX3BtZF9yYW5nZV9sb2NrZWRgLCBgd2Fsa19wdGVfcmFuZ2VgLCBgZm9saW9faW5jX2dlbmAsIGBmb2xpb191cGRhdGVfZ2VuYCwgYHJlYWRfY3RybF9wb3NgLCBgbHJ1X2dlbl9zZXRfcmVmc2AsIGBscnVfZ2VuX2NsZWFyX3JlZnNgLCBgbHJ1X2dlbl9pbmNfcmVmc2AsIGFuZCBgX19scnVfY2FjaGVfYWN0aXZhdGVfZm9saW9gLlxuXG5Ob3csIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBpbXBvcnRhbnQgYml0cy4gTXkgZm9jdXMgaXMgZ29pbmcgdG8gYmUgb24gdGhlIG5vbi1zdGF0aWMgYW5kIG5vbi1pbmxpbmVkIGZ1bmN0aW9ucywgYXMgdGhlc2UgYXJlIHRoZSBvbmVzIG1vc3QgbGlrZWx5IHRvIGhhdmUgd2lkZXIgaW1wbGljYXRpb25zLiBJIGNhbiBzZWUgdGhlIGxvY2F0aW9uIG9mIHRoZSBmdW5jdGlvbnM6IGBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZWAgaXMgaW4gYG1tL21lbWNvbnRyb2wuY2AuIGBmb2xpb19taWdyYXRlX2ZsYWdzYCBpcyBpbiBgbW0vbWlncmF0ZS5jYC4gYGxydV9nZW5fbG9va19hcm91bmRgIGlzIGluIGBtbS92bXNjYW4uY2AuIEl0J3MgcHJldHR5IGNsZWFyIHRoYXQgdGhlIHJlc3Qgb2YgdGhlbSBhcmUgc3RhdGljLCB3aGljaCBuYXJyb3dzIG15IGZvY3VzIGNvbnNpZGVyYWJseS5cblxuU28sIGxldCdzIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVgLCBgZm9saW9fbWlncmF0ZV9mbGFnc2AsIGFuZCBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAuIFRoZXNlIGFyZSB0aGUgb25lcyB3aGVyZSB0aGUgY29kZSBpcyBhY3R1YWxseSAqZXhwb3NlZCogYW5kIGNhbiBiZSBjYWxsZWQgZnJvbSBvdGhlciBtb2R1bGVzLCB0aGV5IGFyZSB3b3J0aCBhIGNsb3NlciBsb29rLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGNvZGUgYW5kIHVuZGVyc3RhbmQgaG93IHRoZSBMUlUgZ2VuZXJhdGlvbiBsb2dpYyBpcyBiZWluZyBpbnRlZ3JhdGVkIHdpdGhpbiBtZW1vcnkgbWFuYWdlbWVudCwgbWlncmF0aW9uLCBhbmQgdGhlIFZNIHNjYW5uaW5nIHByb2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MTEyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTk6MDQ6MDIuMjQ5MDQ5MDU0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzkxMTYzMjQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4odm9pZHxib29sfGludHx1bnNpZ25lZCBsb25nKSBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD04OTE9c3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfb25saW5lKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTg5Ny1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo4OTg6dm9pZCBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbHJ1X2xpc3QgbHJ1LFxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTg5OS1cXHRcXHRpbnQgemlkLCBsb25nIG5yX3BhZ2VzKTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0xNTAxPXN0cnVjdCBscnV2ZWMgKmZvbGlvX2xydXZlY19sb2NrX2lycXNhdmUoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xNTI3LSAqL1xcbm1tL21lbWNvbnRyb2wuYzoxNTI4OnZvaWQgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBlbnVtIGxydV9saXN0IGxydSxcXG5tbS9tZW1jb250cm9sLmMtMTUyOS1cXHRcXHRcXHRcXHRpbnQgemlkLCBsb25nIG5yX3BhZ2VzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxOTowNDowNC42NDAyMTcxMzlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY0MDE0NjQ0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBsaWtlIHlvdXJzZWxmOlxuXG4qKkNvbnNpZGVyaW5nIHRoZSBTY29wZSBvZiBgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVgKipcblxuT2theSwgc28gSSdtIHByb2Nlc3NpbmcgdGhhdCBgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVgIGZ1bmN0aW9uLiBUaGUga2V5IHJlYWxpemF0aW9uIGhlcmUgaXMgdGhhdCBpdCdzICpleHBvcnRlZCogYW5kIHRoZXJlZm9yZSAqZ2xvYmFsKi4gVGhpcyBpbW1lZGlhdGVseSB0cmlnZ2VycyBhIHNldCBvZiBjb25zaWRlcmF0aW9ucyBpbiBteSBtaW5kLiBCZWNhdXNlIGl0J3MgdmlzaWJsZSBvdXRzaWRlIHRoZSBpbW1lZGlhdGUgbW9kdWxlIG9yIHN1YnN5c3RlbSwgaXQgaW1wbGllcyBpdCdzIGRlc2lnbmVkIHRvIGJlIGludm9rZWQgZnJvbSBhIHdpZGVyIGNvbnRleHQsIHBvdGVudGlhbGx5IGJ5IG90aGVyIGtlcm5lbCBtb2R1bGVzIG9yIGV2ZW4gdXNlcnNwYWNlLCB3aGljaCBoYXMgc2VyaW91cyByYW1pZmljYXRpb25zIGZvciBzdGFiaWxpdHkgYW5kIHN5bmNocm9uaXphdGlvbi4gVGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGFyZSBzaWduaWZpY2FudC4gVGhpcyBzdWdnZXN0cyBhIGNhcmVmdWwgcmV2aWV3IG9mIGl0cyB1c2FnZSBwYXR0ZXJucywgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBhbmQgbG9ja2luZyBzdHJhdGVnaWVzIGlzIHdhcnJhbnRlZCwgZ2l2ZW4gdGhlIHBvdGVudGlhbCBmb3IgdW5leHBlY3RlZCBpbnRlcmFjdGlvbnMuIEFueSBjaGFuZ2VzIHRvIHRoaXMgZnVuY3Rpb24gaGF2ZSB0byBiZSBjb25zaWRlcmVkIGNhcmVmdWxseS4gVGhlIHZlcnkgZmFjdCB0aGF0IGl0J3MgZ2xvYmFsIHNob3VsZCBtZWFuIHRoZXJlJ3MgYW4gZXhjZWxsZW50IHJlYXNvbiwgZG9jdW1lbnRlZCwgZm9yIHdoeSB0aGF0J3MgdGhlIGNhc2UuIEkgbmVlZCB0byBkaWcgaW50byB0aGUgY2FsbCBzaXRlcyBhbmQgdGhpbmsgYWJvdXQgdGhlIGxvY2tpbmcgY29udGV4dHMgdGhvcm91Z2hseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUyNDIsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxOTowNDowOS4yODAzNjY3MjFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNjg2NTkzMjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXih2b2lkfGJvb2x8aW50fHVuc2lnbmVkIGxvbmcpIGZvbGlvX21pZ3JhdGVfZmxhZ3NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9taWdyYXRlLmg9Njk9dm9pZCBzb2Z0bGVhZl9lbnRyeV93YWl0X29uX2xvY2tlZChzb2Z0bGVhZl90IGVudHJ5LCBzcGlubG9ja190ICpwdGwpXFxuaW5jbHVkZS9saW51eC9taWdyYXRlLmgtNzAtXFx0XFx0X19yZWxlYXNlcyhwdGwpO1xcbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oOjcxOnZvaWQgZm9saW9fbWlncmF0ZV9mbGFncyhzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaC03Mi1pbnQgZm9saW9fbWlncmF0ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxubW0vbWlncmF0ZS5jPTczOT1pbnQgbWlncmF0ZV9odWdlX3BhZ2VfbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxubW0vbWlncmF0ZS5jLTc3NC0gKi9cXG5tbS9taWdyYXRlLmM6Nzc1OnZvaWQgZm9saW9fbWlncmF0ZV9mbGFncyhzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL21pZ3JhdGUuYy03NzYte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxOTowNDoxMS42NDkwMzEwOTZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAwMjY3MTk1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQ29uc2lkZXJpbmcgdGhlIFNjb3BlIG9mIGBmb2xpb19taWdyYXRlX2ZsYWdzYCoqXG5cbkFscmlnaHQsIHNvIGBmb2xpb19taWdyYXRlX2ZsYWdzYC4uLiB0aGF0J3MgYSBnbG9iYWwgdmFyaWFibGUsIGlzbid0IGl0PyBPa2F5LCBzbyB0aGF0IG1lYW5zIEkgbmVlZCB0byBiZSAqdmVyeSogbWluZGZ1bCBvZiBpdHMgc2NvcGUgYW5kIHBvdGVudGlhbCBpbXBhY3QuIEl0J3Mgbm90IGxvY2FsaXplZCwgc28gY2hhbmdlcyB0byBpdCBpbiBvbmUgcGFydCBvZiB0aGUgc3lzdGVtIHdpbGwgcmlwcGxlIHRocm91Z2hvdXQuIEkgbmVlZCB0byB0aGluayBhYm91dCBob3cgZGlmZmVyZW50IG1vZHVsZXMgb3IgZnVuY3Rpb25zIG1pZ2h0IGJlIHJlYWRpbmcgb3Igd3JpdGluZyB0byBpdC4gQW55IHJhY2UgY29uZGl0aW9ucyBvciB1bmludGVuZGVkIHNpZGUgZWZmZWN0cyBhcmUgYSBtYWpvciBjb25jZXJuLiBCZXN0IHByYWN0aWNlIHdvdWxkIHN1Z2dlc3QgcmVkdWNpbmcgaXRzIHNjb3BlIGlmIHBvc3NpYmxlLCByZWZhY3RvcmluZyB0byBwYXNzIGFzIGFuIGFyZ3VtZW50IGlmIGl0IG1ha2VzIHNlbnNlLiBJIGhhdmUgdG8gbWFrZSBzdXJlIGV2ZXJ5IGluc3RhbmNlIG9mIGl0cyB1c2UgaXMgd2VsbC1kb2N1bWVudGVkLCBzbyBmdXR1cmUgZGV2ZWxvcGVycywgaW5jbHVkaW5nIG15c2VsZiwgZG9uJ3QgdHJpcCBvdmVyIGl0LiBUaW1lIHRvIGFzc2VzcyBhbGwgdGhlIHBsYWNlcyB0aGlzIGZsYWcgaXMgdXNlZCwgZmlndXJlIG91dCBpdHMgcHVycG9zZSwgYW5kIGVuc3VyZSBpdCdzIGhhbmRsZWQgc2FmZWx5IGFuZCBlZmZpY2llbnRseSwgb3IgY29uc2lkZXIgcG90ZW50aWFsIGFsdGVybmF0aXZlcyB0byB0aGlzIGdsb2JhbCBkZXBlbmRlbmN5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTcyMSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE5OjA0OjE1LjY1MTcwNTI2N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMxODM0NTc4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKHZvaWR8Ym9vbHxpbnR8dW5zaWduZWQgbG9uZykgbHJ1X2dlbl9sb29rX2Fyb3VuZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L21tem9uZS5oPTY5ND12b2lkIGxydV9nZW5faW5pdF9scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjKTtcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjY5NTpib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpO1xcbmluY2x1ZGUvbGludXgvbW16b25lLmgtNjk2LVxcbi0tXFxubW0vdm1zY2FuLmM9NDIxMz1zdGF0aWMgdm9pZCBscnVfZ2VuX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNDI1OS0gKi9cXG5tbS92bXNjYW4uYzo0MjYwOmJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcXG5tbS92bXNjYW4uYy00MjYxLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTk6MDQ6MTcuOTcwMDU1MzczWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY2MzI5MTgzNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGZ1bmN0aW9ucyByZWxhdGVkIHRvIExSVSBhbmQgZm9saW8gbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IHdpdGggYW4gZXllIHRvd2FyZHMgZnV6emluZy4gRmlyc3QsIEkgbm90aWNlZCB0aGF0IGBscnVfZ2VuX2xvb2tfYXJvdW5kYCBpcyBnbG9iYWwsIHdoaWNoIGltbWVkaWF0ZWx5IG1ha2VzIGl0IGEgcG90ZW50aWFsIHRhcmdldC4gVGhlbiwgSSBxdWlja2x5IHNjYW5uZWQgdGhyb3VnaCBgbW0vdm1zY2FuLmNgIGFuZCBgbW0vZm9saW8uY2AgdG8gc2VlIHdoYXQgZWxzZSBtaWdodCBiZSBpbnRlcmVzdGluZywgYW5kIGl0IGxvb2tzIGxpa2UgYSBsb3Qgb2YgdGhlIHN1cHBvcnRpbmcgZnVuY3Rpb25zIGFyZSBgc3RhdGljYCwgbGlrZSBgZXZpY3RfZm9saW9zYCwgYGdldF90eXBlX3RvX3NjYW5gLCBgaXNvbGF0ZV9mb2xpb2AsIGFuZCBzZXZlcmFsIG90aGVycyBpbiBib3RoIGZpbGVzLiBUaGV5IHNlZW0gcHJldHR5IGNvbnRhaW5lZC5cblxuU28sIHRoZSBvbmVzIHRoYXQgYXJlICpub3QqIHN0YXRpYywgYW5kIHRoZXJlZm9yZSBoYXZlIGJyb2FkZXIgcmVhY2gsIGFyZSBgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVgLCBgZm9saW9fbWlncmF0ZV9mbGFnc2AsIGFuZCBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAuIFRoZXNlIHNlZW0gdG8gYmUgdGhlIHByaW1lIGNhbmRpZGF0ZXMgZm9yIGNsb3NlciBpbnNwZWN0aW9uLlxuXG5Ob3csIGxldCdzIGFzc2VzcyB0aGVpciBmdXp6aW5nIHBvdGVudGlhbC4gYG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplYCBpcyBhIGNydWNpYWwgZnVuY3Rpb24gZm9yIG1lbWNnIExSVSBzaXplIHVwZGF0ZXMsIGVzc2VudGlhbCBmb3IgbWVtb3J5IG1hbmFnZW1lbnQuIGBmb2xpb19taWdyYXRlX2ZsYWdzYCBpcyBkZWVwbHkgaW52b2x2ZWQgaW4gcGFnZSBtaWdyYXRpb24sIHdoaWNoIGlzIGEga25vd24gYXJlYSBmb3IgY29tcGxleCBpbnRlcmFjdGlvbnMuIEZpbmFsbHksIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCBpcyBhIGNvcmUgZnVuY3Rpb24gZm9yIE1HTFJVLiBBbGwgdGhyZWUgb2YgdGhlc2UgaGF2ZSBhIHN0cm9uZyBjb25uZWN0aW9uIHRvIGNvcmUga2VybmVsIGJlaGF2aW9yLlxuXG5IbW0sIGBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZWAgZmVlbHMgYSBsaXR0bGUgbW9yZSByb3V0aW5lIHRoYW4gdGhlIG90aGVyIHR3by4gSXQncyBwcm9iYWJseSBxdWl0ZSBob3QsIGFzIGl0J3MgYSBmdW5kYW1lbnRhbCBwYXJ0IG9mIHRoZSBtZW1jZyBzdWJzeXN0ZW0sIGJ1dCBtYXliZSBub3QgYXMgbGlrZWx5IHRvIHJldmVhbCB0cmlja3kgZWRnZSBjYXNlcy4gSXQncyBwcm9iYWJseSB3b3J0aCBpbnZlc3RpZ2F0aW5nIHdoZXJlIGl0J3MgY2FsbGVkIGZyb20gdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYxOTMsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTk6MDQ6MjQuNjAyOTc1MjU2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzgxOTc1ODc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTg5MT1zdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9vbmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtODk3LVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjg5ODp2b2lkIG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBscnVfbGlzdCBscnUsXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtODk5LVxcdFxcdGludCB6aWQsIGxvbmcgbnJfcGFnZXMpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaD01Mj1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgdXBkYXRlX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtNTctI2lmZGVmIENPTkZJR19NRU1DR1xcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg6NTg6XFx0bWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUobHJ1dmVjLCBscnUsIHppZCwgbnJfcGFnZXMpO1xcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtNTktI2VuZGlmXFxuLS1cXG5tbS9mb2xpby5jPTExMjM9c3RhdGljIHZvaWQgbHJ1dmVjX3JlcGFyZW50X2xydShzdHJ1Y3QgbHJ1dmVjICpjaGlsZF9scnV2ZWMsXFxuLS1cXG5tbS9mb2xpby5jLTExNDMtXFx0XFx0ICovXFxubW0vZm9saW8uYzoxMTQ0OlxcdFxcdG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKHBhcmVudF9scnV2ZWMsIGxydSwgemlkLCBzaXplKTtcXG5tbS9mb2xpby5jOjExNDU6XFx0XFx0bWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUoY2hpbGRfbHJ1dmVjLCBscnUsIHppZCwgLShsb25nKXNpemUpO1xcbm1tL2ZvbGlvLmMtMTE0Ni1cXHR9XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MTUwMT1zdHJ1Y3QgbHJ1dmVjICpmb2xpb19scnV2ZWNfbG9ja19pcnFzYXZlKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTUxOC0vKipcXG5tbS9tZW1jb250cm9sLmM6MTUxOTogKiBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZSAtIGFjY291bnQgZm9yIGFkZGluZyBvciByZW1vdmluZyBhbiBscnUgcGFnZVxcbm1tL21lbWNvbnRyb2wuYy0xNTIwLSAqIEBscnV2ZWM6IG1lbV9jZ3JvdXAgcGVyIHpvbmUgbHJ1IHZlY3Rvclxcbi0tXFxubW0vbWVtY29udHJvbC5jLTE1MjctICovXFxubW0vbWVtY29udHJvbC5jOjE1Mjg6dm9pZCBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbHJ1X2xpc3QgbHJ1LFxcbm1tL21lbWNvbnRyb2wuYy0xNTI5LVxcdFxcdFxcdFxcdGludCB6aWQsIGxvbmcgbnJfcGFnZXMpXFxuLS1cXG5tbS92bXNjYW4uYz0xNTkyPXVuc2lnbmVkIGludCByZWNsYWltX2NsZWFuX3BhZ2VzX2Zyb21fbGlzdChzdHJ1Y3Qgem9uZSAqem9uZSxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTE2NDQtICogVXBkYXRlIExSVSBzaXplcyBhZnRlciBpc29sYXRpbmcgcGFnZXMuIFRoZSBMUlUgc2l6ZSB1cGRhdGVzIG11c3RcXG5tbS92bXNjYW4uYzoxNjQ1OiAqIGJlIGNvbXBsZXRlIGJlZm9yZSBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZSBkdWUgdG8gYSBzYW5pdHkgY2hlY2suXFxubW0vdm1zY2FuLmMtMTY0Ni0gKi9cXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ2MjE9dm9pZCBscnVfZ2VuX3JlcGFyZW50X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50IG5pZClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ2NDItXFx0XFx0XFx0LyogTW92ZSB0aGUgYWNjb3VudGluZywgZG8gbm90IGR1cGxpY2F0ZSBpdC4gKi9cXG5tbS92bXNjYW4uYzo0NjQzOlxcdFxcdFxcdG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKHBhcmVudF9scnV2ZWMsIGxydSwgemlkLCBzaXplKTtcXG5tbS92bXNjYW4uYzo0NjQ0OlxcdFxcdFxcdG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKGNoaWxkX2xydXZlYywgbHJ1LCB6aWQsIC0obG9uZylzaXplKTtcXG5tbS92bXNjYW4uYy00NjQ1LVxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTk6MDQ6MjUuOTg0OTU5MDg1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3Nzk0ODkwNDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEhvdCBQYXRoIEZ1bmN0aW9uYWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHNvbWUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCBhbmQgYSBmZXcgZnVuY3Rpb25zIGFyZSBpbW1lZGlhdGVseSBzdGFuZGluZyBvdXQuIGBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZWAgaXMgdHJpZ2dlcmVkIGZyb20gYHVwZGF0ZV9scnVfc2l6ZWAsIHdoaWNoLCBiZWNhdXNlIGl0J3MgYF9fYWx3YXlzX2lubGluZWAsIGlzIGNsZWFybHkgZGVzaWduZWQgZm9yIHNwZWVkIGFuZCB1c2VkICpldmVyeXdoZXJlKi4gVGhhdCBtYWtlcyBpdCBhIHNlcmlvdXMgaG90IHBhdGggSSBuZWVkIHRvIHVuZGVyc3RhbmQgY29tcGxldGVseS4gQWxzbywgYGZvbGlvX21pZ3JhdGVfZmxhZ3NgIGlzIGNsZWFybHkgY3J1Y2lhbCBkdXJpbmcgcGFnZSBtaWdyYXRpb24sIGFuZCB0aGVuIHRoZXJlJ3MgYGxydV9nZW5fbG9va19hcm91bmRgLCB1c2VkIGR1cmluZyBwYWdlIGZhdWx0IGxvb2thcm91bmQuIEdpdmVuIHRoZSBjb250ZXh0LCBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAgaXMgdGhlIG9uZSBJIHRoaW5rIEkgc2hvdWxkIGJlIGludmVzdGlnYXRpbmcgbmV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc4MTEsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxOTowNDozMC43NjQ0NTA0NDVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNzAzNjM4NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibHJ1X2dlbl9sb29rX2Fyb3VuZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL21tL211bHRpZ2VuX2xydS5yc3Q9MTg3PWNhbiBpbmN1ciB0aGUgaGlnaGVzdCBDUFUgY29zdCBpbiB0aGUgcmVjbGFpbSBwYXRoLlxcbkRvY3VtZW50YXRpb24vbW0vbXVsdGlnZW5fbHJ1LnJzdC0xODgtXFxuRG9jdW1lbnRhdGlvbi9tbS9tdWx0aWdlbl9scnUucnN0OjE4OTpgYGxydV9nZW5fbG9va19hcm91bmQoKWBgIGV4cGxvaXRzIHNwYXRpYWwgbG9jYWxpdHkgdG8gcmVkdWNlIHRoZVxcbkRvY3VtZW50YXRpb24vbW0vbXVsdGlnZW5fbHJ1LnJzdC0xOTAtdHJpcHMgaW50byB0aGUgcm1hcC4gSXQgc2NhbnMgdGhlIGFkamFjZW50IFBURXMgb2YgYSB5b3VuZyBQVEUgYW5kXFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL211bHRpZ2VuX2xydS5yc3Q9MTk5PWluIHRoZSBzZXQuXFxuRG9jdW1lbnRhdGlvbi9tbS9tdWx0aWdlbl9scnUucnN0LTIwMC1cXG5Eb2N1bWVudGF0aW9uL21tL211bHRpZ2VuX2xydS5yc3Q6MjAxOkluIHRoZSBldmljdGlvbiBwYXRoLCBzcGVjaWZpY2FsbHksIGluIGBgbHJ1X2dlbl9sb29rX2Fyb3VuZCgpYGAsIGlmIGFcXG5Eb2N1bWVudGF0aW9uL21tL211bHRpZ2VuX2xydS5yc3QtMjAyLVBNRCBoYXMgYSBzdWZmaWNpZW50IG51bWJlciBvZiBob3QgcGFnZXMsIGl0cyBhZGRyZXNzIGlzIHBsYWNlZCBpbiB0aGVcXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmg9Njk0PXZvaWQgbHJ1X2dlbl9pbml0X2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpO1xcbmluY2x1ZGUvbGludXgvbW16b25lLmg6Njk1OmJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucik7XFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC02OTYtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTcxMz1zdGF0aWMgaW5saW5lIHZvaWQgbHJ1X2dlbl9pbml0X2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTcxNi1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjcxNzpzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC03MTgtXFx0XFx0dW5zaWduZWQgaW50IG5yKVxcbi0tXFxubW0vcm1hcC5jPTkxOD1zdGF0aWMgYm9vbCBmb2xpb19yZWZlcmVuY2VkX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vcm1hcC5jLTk4Mi1cXHRcXHRpZiAobHJ1X2dlbl9lbmFibGVkKCkgXFx1MDAyNlxcdTAwMjYgIWxydV9nZW5fc3dpdGNoaW5nKCkgXFx1MDAyNlxcdTAwMjYgcHZtdy5wdGUpIHtcXG5tbS9ybWFwLmM6OTgzOlxcdFxcdFxcdGlmIChscnVfZ2VuX2xvb2tfYXJvdW5kKFxcdTAwMjZwdm13LCBucikpXFxubW0vcm1hcC5jLTk4NC1cXHRcXHRcXHRcXHRyZWZlcmVuY2VkKys7XFxuLS1cXG5tbS92bXNjYW4uYz0yNzkxPXN0YXRpYyBib29sIF9fbWF5YmVfdW51c2VkIHNlcV9pc192YWxpZChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXFxuLS1cXG5tbS92bXNjYW4uYy0yODIwLSAqIHdhbGtfcG1kX3JhbmdlKCk7IHRoZSBldmljdGlvbiBhbHNvIHJlcG9ydCB0aGVtIHdoZW4gd2Fsa2luZyB0aGUgcm1hcFxcbm1tL3Ztc2Nhbi5jOjI4MjE6ICogaW4gbHJ1X2dlbl9sb29rX2Fyb3VuZCgpLlxcbm1tL3Ztc2Nhbi5jLTI4MjItICpcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQwNzQ9c3RhdGljIGJvb2wgdHJ5X3RvX2luY19tYXhfc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsXFxuLS1cXG5tbS92bXNjYW4uYy00MDkzLVxcdCAqIElmIHRoZSBoYXJkd2FyZSBkb2Vzbid0IGF1dG9tYXRpY2FsbHkgc2V0IHRoZSBhY2Nlc3NlZCBiaXQsIGZhbGxiYWNrXFxubW0vdm1zY2FuLmM6NDA5NDpcXHQgKiB0byBscnVfZ2VuX2xvb2tfYXJvdW5kKCksIHdoaWNoIG9ubHkgY2xlYXJzIHRoZSBhY2Nlc3NlZCBiaXQgaW4gYVxcbm1tL3Ztc2Nhbi5jLTQwOTUtXFx0ICogaGFuZGZ1bCBvZiBQVEVzLiBTcHJlYWRpbmcgdGhlIHdvcmsgb3V0IG92ZXIgYSBwZXJpb2Qgb2YgdGltZSB1c3VhbGx5XFxuLS1cXG5tbS92bXNjYW4uYz00MjEzPXN0YXRpYyB2b2lkIGxydV9nZW5fYWdlX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy00MjU5LSAqL1xcbm1tL3Ztc2Nhbi5jOjQyNjA6Ym9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxcbm1tL3Ztc2Nhbi5jLTQyNjEte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxOTowNDozMi4xMzQ4MTc2MTVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYyNDIxMzM5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRoZSBleHBlcnQ6XG5cbioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IEEgUXVpY2sgU2NhbioqXG5cbkFscmlnaHQsIGxldCdzIHNlZS4gVGhlIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCBmdW5jdGlvbiBjYWxsZWQgZnJvbSBgZm9saW9fcmVmZXJlbmNlZF9vbmVgIHdpdGhpbiBgbW0vcm1hcC5jYCBpcyBkZWZpbml0ZWx5IGNhdGNoaW5nIG15IGF0dGVudGlvbi4gR2l2ZW4gaXRzIGxvY2F0aW9uIGFuZCBsaWtlbHkgZnVuY3Rpb24gd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIGl0IHNlZW1zIGxpa2UgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuIEl0J3MgYSBrZXkgcG9pbnQgb2YgaW50ZXJhY3Rpb24gd2l0aCB0aGUgTFJVIGFuZCByZWZlcmVuY2VkIGZvbGlvIGZsYWdzLCBzdWdnZXN0aW5nIHRoYXQgd2UgY291bGQgaW5kdWNlIHNvbWUgaW50ZXJlc3RpbmcgY29uZGl0aW9ucy4gTm93LCB0aGUgbmF0dXJhbCBzdGVwIGlzIHRvIHRha2UgYSBsb29rIGF0IGBmb2xpb19taWdyYXRlX2ZsYWdzYCwgdG8gdW5kZXJzdGFuZCBhbnkgZmxhZ3MgdGhhdCBhcmUgcmVsZXZhbnQgaW4gdGhpcyBjb250ZXh0IGFuZCBzZWUgd2hhdCBraW5kIG9mIGlucHV0cyB3ZSBjYW4gdGVzdC4gTGV0J3Mgc2VlIHdoYXQgdGhhdCByZXZlYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODk4OSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE5OjA0OjM1Ljc1OTAzMzE1MloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQyMjc4MDk0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmb2xpb19taWdyYXRlX2ZsYWdzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2Fpby5jPTQ2MD1zdGF0aWMgaW50IGFpb19taWdyYXRlX2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmRzdCxcXG4tLVxcbmZzL2Fpby5jLTUxMi1cXHRmb2xpb19jb3B5KGRzdCwgc3JjKTtcXG5mcy9haW8uYzo1MTM6XFx0Zm9saW9fbWlncmF0ZV9mbGFncyhkc3QsIHNyYyk7XFxuZnMvYWlvLmMtNTE0LVxcdEJVR19PTihjdHgtXFx1MDAzZXJpbmdfZm9saW9zW2lkeF0gIT0gc3JjKTtcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jPTEwMjQ9c3RhdGljIGludCBodWdldGxiZnNfbWlncmF0ZV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEwMzktXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTA0MDpcXHRmb2xpb19taWdyYXRlX2ZsYWdzKGRzdCwgc3JjKTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMDQxLVxcbi0tXFxuaW5jbHVkZS9saW51eC9taWdyYXRlLmg9Njk9dm9pZCBzb2Z0bGVhZl9lbnRyeV93YWl0X29uX2xvY2tlZChzb2Z0bGVhZl90IGVudHJ5LCBzcGlubG9ja190ICpwdGwpXFxuaW5jbHVkZS9saW51eC9taWdyYXRlLmgtNzAtXFx0XFx0X19yZWxlYXNlcyhwdGwpO1xcbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oOjcxOnZvaWQgZm9saW9fbWlncmF0ZV9mbGFncyhzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaC03Mi1pbnQgZm9saW9fbWlncmF0ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaD0zNTE9c3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZGVsX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCByZWNsYWltaW5nKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC0zNjEtXFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaDozNjI6XFx0LyogZm9yIGZvbGlvX21pZ3JhdGVfZmxhZ3MoKSAqL1xcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtMzYzLVxcdGZsYWdzID0gIXJlY2xhaW1pbmcgXFx1MDAyNlxcdTAwMjYgbHJ1X2dlbl9pc19hY3RpdmUobHJ1dmVjLCBnZW4pID8gQklUKFBHX2FjdGl2ZSkgOiAwO1xcbi0tXFxubW0vbWlncmF0ZS5jPTczOT1pbnQgbWlncmF0ZV9odWdlX3BhZ2VfbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxubW0vbWlncmF0ZS5jLTc3NC0gKi9cXG5tbS9taWdyYXRlLmM6Nzc1OnZvaWQgZm9saW9fbWlncmF0ZV9mbGFncyhzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL21pZ3JhdGUuYy03NzYte1xcbi0tXFxubW0vbWlncmF0ZS5jLTg2My19XFxubW0vbWlncmF0ZS5jOjg2NDpFWFBPUlRfU1lNQk9MKGZvbGlvX21pZ3JhdGVfZmxhZ3MpO1xcbm1tL21pZ3JhdGUuYy04NjUtXFxuLS1cXG5tbS9taWdyYXRlLmM9ODcwPXN0YXRpYyBpbnQgX19taWdyYXRlX2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmRzdCxcXG4tLVxcbm1tL21pZ3JhdGUuYy04OTAtXFxubW0vbWlncmF0ZS5jOjg5MTpcXHRmb2xpb19taWdyYXRlX2ZsYWdzKGRzdCwgc3JjKTtcXG5tbS9taWdyYXRlLmMtODkyLVxcdHJldHVybiAwO1xcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYz0xMTA5PXN0YXRpYyB2b2lkIF9fbWlncmF0ZV9kZXZpY2VfcGFnZXModW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTEyNTEtXFx0XFx0XFx0ZWxzZVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTI1MjpcXHRcXHRcXHRcXHRmb2xpb19taWdyYXRlX2ZsYWdzKG5ld2ZvbGlvLCBmb2xpbyk7XFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjUzLVxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTk6MDQ6MzcuMTgxODIwMjUxWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyNDU2OTEyOTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIE1pZ3JhdGlvbiBIb3RzcG90cyoqXG5cbk9rYXksIHNvIEkndmUgZ290IGEgaGFuZGxlIG9uIHRoZSBjb2RlIGNoYW5nZXMgcmVsYXRlZCB0byBmb2xpbyBtaWdyYXRpb24uIGBmb2xpb19taWdyYXRlX2ZsYWdzYCBpbW1lZGlhdGVseSBzdGFuZHMgb3V0IGFzIGEgc3Ryb25nIGNhbmRpZGF0ZSwgZ2l2ZW4gdGhhdCBpdCdzIGV4cG9ydGVkIGFuZCB1c2VkIGRpcmVjdGx5IGluIHRoZSBtaWdyYXRpb24gcHJvY2Vzcy4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC5cblxuTm93LCBsZXQncyBkaWcgYSBiaXQgZGVlcGVyIGludG8gcG90ZW50aWFsIGJvdHRsZW5lY2tzLiBgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVgIGlzIHRlbXB0aW5nLCBidXQgaXQncyBwYXJ0IG9mIHRoZSBgdXBkYXRlX2xydV9zaXplYCBjYWxsIGNoYWluLCBhbmQgdGhhdCdzIGNhbGxlZCBmcmVxdWVudGx5IGZyb20gYGxydXZlY19hZGRfZm9saW9gLCBgbHJ1dmVjX2RlbF9mb2xpb2AsIGFuZCB0aGUgbGlrZS4gSXQncyB0b28gaG90IGEgcGF0aCB0byBtZXNzIHdpdGggcmlnaHQgbm93LiBJIG5lZWQgdG8gYXZvaWQgaW1wYWN0aW5nIGNyaXRpY2FsIHBlcmZvcm1hbmNlLlxuXG5XaGF0IGVsc2U/IFdlbGwsIGEgYnVuY2ggb2Ygc3RhdGljIGZ1bmN0aW9ucyB3ZXJlIG1vZGlmaWVkLiBMZXQncyBzZWUuLi4gYGZvbGlvX3VwZGF0ZV9nZW5gLCBgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkYCwgYHdhbGtfcHRlX3JhbmdlYCwgYGZvbGlvX2luY19nZW5gLCBhbmQgYHJlYWRfY3RybF9wb3NgLiBTaW5jZSB0aGV5J3JlIHN0YXRpYywgSSdtIGxlc3Mgd29ycmllZCBhYm91dCB0aGVtIGJlaW5nIGV4cG9zZWQgYXMgdGhlIHByaW1hcnkgY2F1c2Ugb2YgcGVyZm9ybWFuY2UgZHJvcHMuIEJ1dCBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IEknbSBub3QgbWlzc2luZyBhbnl0aGluZy5cblxuQWxyaWdodCwgSSdsbCByZXZpZXcgbm9uLXN0YXRpYyBmdW5jdGlvbnMgYWdhaW4uXG5gZm9saW9fZmxhZ3NfaXNfZmlsZV9scnVgLCBgbHJ1X2dlbl9mcm9tX2ZsYWdzYCwgYGxydV9nZW5fc2V0X2ZsYWdzYCwgYGxydV9yZWZzX2Zyb21fZmxhZ3NgLCBgbHJ1X3JlZnNfc2V0X2ZsYWdzYCwgYGZvbGlvX2xydV9yZWZzYCwgYGZvbGlvX3NldF9scnVfcmVmc2AsIGBmb2xpb19scnVfZ2VuYCwgYW5kIGBmb2xpb19taWdyYXRlX2xydV9yZWZzYCBhcmUgYWxsIGlubGluZSwgc28gdGhleSBhcmUgcHJvYmFibHkgc2FmZS5cblxuSG9sZCBvbiwgdGhlIHBhdGNoIHRvdWNoZXMgYG1tL2ZvbGlvLmNgIGFzIHdlbGwuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZC5cbmBscnVfZ2VuX2luY19yZWZzYCBhbmQgYGxydV9nZW5fY2xlYXJfcmVmc2AsIGJvdGggc3RhdGljLlxuXG5TbywgdGFraW5nIHN0b2NrLCBpdCBsb29rcyBsaWtlIGBmb2xpb19taWdyYXRlX2ZsYWdzYCBpcyB0aGUgcHJpbWFyeSBleHBvc2VkIHBvaW50IG9mIGludGVyZXN0LiBJdCdzIHRoZSBjbGVhbmVzdCBzeW1ib2wgdG8gZm9jdXMgb24uIEFuZCBJJ20gbm93IGZhaXJseSBjb25maWRlbnQgaW4gYWxzbyByZXZpZXdpbmcgYGxydV9nZW5fbG9va19hcm91bmRgIGFzIHdlbGwuIFRoYXQgbG9va3MgbGlrZSBhIHBvc3NpYmxlIGhvdHNwb3QuXG5cbkZpbmFsbHksIEkgc2hvdWxkIGNvbmZpcm0gdGhhdCBgTFJVX0dFTmAgaXMgZW5hYmxlZCBpbiB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uLiBKdXN0IHRvIGJlIHN1cmUuIEkgbmVlZCB0byBjb25zaWRlciBhbGwgdGhlIGFuZ2xlcyB0byBlbnN1cmUgb3B0aW1hbCBwZXJmb3JtYW5jZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk5OTEsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTk6MDQ6NDkuNjM4NzM0OTU4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDE5Mjk3ODYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19MUlVfR0VOXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdD0xMz1CdWlsZCB0aGUga2VybmVsIHdpdGggdGhlIGZvbGxvd2luZyBjb25maWd1cmF0aW9ucy5cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QtMTQtXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0OjE1OiogYGBDT05GSUdfTFJVX0dFTj15YGBcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3Q6MTY6KiBgYENPTkZJR19MUlVfR0VOX0VOQUJMRUQ9eWBgXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0LTE3LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0PTI4PWZvbGxvd2luZyBjb21wb25lbnRzLiBJdHMgZGVmYXVsdCB2YWx1ZSBkZXBlbmRzIG9uXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0OjI5OmBgQ09ORklHX0xSVV9HRU5fRU5BQkxFRGBgLiBBbGwgdGhlIGNvbXBvbmVudHMgc2hvdWxkIGJlIGVuYWJsZWRcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QtMzAtdW5sZXNzIHNvbWUgb2YgdGhlbSBoYXZlIHVuZm9yZXNlZW4gc2lkZSBlZmZlY3RzLiBXcml0aW5nIHRvXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3Q9ODg9Y29uY2F0ZW5hdGlvbiB3aXRoIGRlbGltaXRlcnMgYGAsYGAgYW5kIGBgO2BgLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0LTkwLWBgL3N5cy9rZXJuZWwvZGVidWcvbHJ1X2dlbl9mdWxsYGAgcHJvdmlkZXMgYWRkaXRpb25hbCBzdGF0cyBmb3JcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3Q6OTE6ZGVidWdnaW5nLiBgYENPTkZJR19MUlVfR0VOX1NUQVRTPXlgYCBrZWVwcyBoaXN0b3JpY2FsIHN0YXRzIGZyb21cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QtOTItZXZpY3RlZCBnZW5lcmF0aW9ucyBpbiB0aGlzIGZpbGUuXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0yMDI9c3RydWN0IG1lbV9jZ3JvdXAge1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMjgzLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjI4NDojaWZkZWYgQ09ORklHX0xSVV9HRU5fV0FMS1NfTU1VXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMjg1LVxcdC8qIHBlci1tZW1jZyBtbV9zdHJ1Y3QgbGlzdCAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaD04Nz1zdGF0aWMgX19hbHdheXNfaW5saW5lIGVudW0gbHJ1X2xpc3QgZm9saW9fbHJ1X2xpc3QoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtMTAyLVxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg6MTAzOiNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtMTA0LVxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg9MTA1PXN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX3N3aXRjaGluZyh2b2lkKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC0xMTAtfVxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg6MTExOiNpZmRlZiBDT05GSUdfTFJVX0dFTl9FTkFCTEVEXFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC0xMTItc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZW5hYmxlZCh2b2lkKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaD0zODI9c3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC0zODYtfVxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg6Mzg3OiNlbHNlIC8qICFDT05GSUdfTFJVX0dFTiAqL1xcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtMzg4LVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaD00MTQ9c3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC00MTgtfVxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg6NDE5OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtNDIwLVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oPTExNzU9c3RydWN0IG1tX3N0cnVjdCB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTQwMi0jZW5kaWYgLyogQ09ORklHX0tTTSAqL1xcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDoxNDAzOiNpZmRlZiBDT05GSUdfTFJVX0dFTl9XQUxLU19NTVVcXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTQwNC1cXHRcXHRzdHJ1Y3Qge1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTE0MTctXFx0XFx0fSBscnVfZ2VuO1xcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDoxNDE4OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTl9XQUxLU19NTVUgKi9cXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTQxOS0jaWZkZWYgQ09ORklHX01NX0lEXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg9MTQ4MD1zdGF0aWMgaW5saW5lIGNwdW1hc2tfdCAqbW1fY3B1bWFzayhzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xNDg0LVxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDoxNDg1OiNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xNDg2LVxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaD0xNDg3PXN0cnVjdCBscnVfZ2VuX21tX2xpc3Qge1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTE0OTMtXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjE0OTQ6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTE0OTUtXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjE0OTY6I2lmZGVmIENPTkZJR19MUlVfR0VOX1dBTEtTX01NVVxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xNDk3LVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oPTE1MTE9c3RhdGljIGlubGluZSB2b2lkIGxydV9nZW5fdXNlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTE1MjAtXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjE1MjE6I2Vsc2UgLyogIUNPTkZJR19MUlVfR0VOX1dBTEtTX01NVSAqL1xcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xNTIyLVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oPTE1Mzk9c3RhdGljIGlubGluZSB2b2lkIGxydV9nZW5fdXNlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTE1NDItXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjE1NDM6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOX1dBTEtTX01NVSAqL1xcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xNTQ0LVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD01Mjg9c3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrO1xcbmluY2x1ZGUvbGludXgvbW16b25lLmgtNTI5LVxcbmluY2x1ZGUvbGludXgvbW16b25lLmg6NTMwOiNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtNTMxLVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD01Mzc9ZW51bSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTU0Ny0vKiB3aGV0aGVyIHRvIGtlZXAgaGlzdG9yaWNhbCBzdGF0cyBmcm9tIGV2aWN0ZWQgZ2VuZXJhdGlvbnMgKi9cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjU0ODojaWZkZWYgQ09ORklHX0xSVV9HRU5fU1RBVFNcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTU0OS0jZGVmaW5lIE5SX0hJU1RfR0VOU1xcdFxcdE1BWF9OUl9HRU5TXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTcwNT12b2lkIGxydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKTtcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTcwNi1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjcwNzojZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi9cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTcwOC1cXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmg9NzU3PXZvaWQgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBuaWQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTc2MC1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjc2MTojZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTc2Mi1cXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmg9NzY5PXN0cnVjdCBscnV2ZWMge1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC03ODgtXFx0dW5zaWduZWQgbG9uZ1xcdFxcdFxcdGZsYWdzO1xcbmluY2x1ZGUvbGludXgvbW16b25lLmg6Nzg5OiNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtNzkwLVxcdC8qIGV2aWN0YWJsZSBwYWdlcyBkaXZpZGVkIGludG8gZ2VuZXJhdGlvbnMgKi9cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTc5MS1cXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpb1xcdFxcdGxydWdlbjtcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjc5MjojaWZkZWYgQ09ORklHX0xSVV9HRU5fV0FMS1NfTU1VXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC03OTMtXFx0LyogdG8gY29uY3VycmVudGx5IGl0ZXJhdGUgbHJ1X2dlbl9tbV9saXN0ICovXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTc5NS0jZW5kaWZcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjc5NjojZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTc5Ny0jaWZkZWYgQ09ORklHX01FTUNHXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTE0ODE9dHlwZWRlZiBzdHJ1Y3QgcGdsaXN0X2RhdGEge1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xNTk4LVxcbmluY2x1ZGUvbGludXgvbW16b25lLmg6MTU5OTojaWZkZWYgQ09ORklHX0xSVV9HRU5cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTE2MDAtXFx0Lyoga3N3YXAgbW0gd2FsayBkYXRhICovXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmg9ODI2PXN0cnVjdCB0YXNrX3N0cnVjdCB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMTAyNC0jZW5kaWZcXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmg6MTAyNTojaWZkZWYgQ09ORklHX0xSVV9HRU5cXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMTAyNi1cXHQvKiB3aGV0aGVyIHRoZSBMUlUgYWxnb3JpdGhtIG1heSBhcHBseSB0byB0aGlzIGFjY2VzcyAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9zd2FwLmg9MTQ2PXN0cnVjdCByZWNsYWltX3N0YXRlIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvc3dhcC5oLTE0OC1cXHR1bnNpZ25lZCBsb25nIHJlY2xhaW1lZDtcXG5pbmNsdWRlL2xpbnV4L3N3YXAuaDoxNDk6I2lmZGVmIENPTkZJR19MUlVfR0VOXFxuaW5jbHVkZS9saW51eC9zd2FwLmgtMTUwLVxcdC8qIHBlci10aHJlYWQgbW0gd2FsayBkYXRhICovXFxuLS1cXG5rZXJuZWwvYm91bmRzLmM9MTc9aW50IG1haW4odm9pZClcXG4tLVxcbmtlcm5lbC9ib3VuZHMuYy0yNS1cXHRERUZJTkUoU1BJTkxPQ0tfU0laRSwgc2l6ZW9mKHNwaW5sb2NrX3QpKTtcXG5rZXJuZWwvYm91bmRzLmM6MjY6I2lmZGVmIENPTkZJR19MUlVfR0VOXFxua2VybmVsL2JvdW5kcy5jLTI3LVxcdERFRklORShMUlVfR0VOX1dJRFRILCBvcmRlcl9iYXNlXzIoTUFYX05SX0dFTlMgKyAxKSk7XFxuLS1cXG5rZXJuZWwvZm9yay5jPTI2OTQ9cGlkX3Qga2VybmVsX2Nsb25lKHN0cnVjdCBrZXJuZWxfY2xvbmVfYXJncyAqYXJncylcXG4tLVxcbmtlcm5lbC9mb3JrLmMtMjc3MS1cXG5rZXJuZWwvZm9yay5jOjI3NzI6XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0xSVV9HRU5fV0FMS1NfTU1VKSBcXHUwMDI2XFx1MDAyNiAhKGNsb25lX2ZsYWdzIFxcdTAwMjYgQ0xPTkVfVk0pKSB7XFxua2VybmVsL2ZvcmsuYy0yNzczLVxcdFxcdC8qIGxvY2sgdGhlIHRhc2sgdG8gc3luY2hyb25pemUgd2l0aCBtZW1jZyBtaWdyYXRpb24gKi9cXG4tLVxcbm1tL2ZvbGlvLmM9MzIyPXN0YXRpYyB2b2lkIF9fbHJ1X2NhY2hlX2FjdGl2YXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9mb2xpby5jLTM1MS1cXG5tbS9mb2xpby5jOjM1MjojaWZkZWYgQ09ORklHX0xSVV9HRU5cXG5tbS9mb2xpby5jLTM1My1cXG4tLVxcbm1tL2ZvbGlvLmM9MzgwPXN0YXRpYyBib29sIGxydV9nZW5fY2xlYXJfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vZm9saW8uYy0zOTgtXFxubW0vZm9saW8uYzozOTk6I2Vsc2UgLyogIUNPTkZJR19MUlVfR0VOICovXFxubW0vZm9saW8uYy00MDAtXFxuLS1cXG5tbS9mb2xpby5jPTQwNT1zdGF0aWMgYm9vbCBscnVfZ2VuX2NsZWFyX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2ZvbGlvLmMtNDA5LVxcbm1tL2ZvbGlvLmM6NDEwOiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xcbm1tL2ZvbGlvLmMtNDExLVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTQ2MTA9c3RhdGljIHZvaWQgbWVtX2Nncm91cF9leGl0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00NjI2LVxcbm1tL21lbWNvbnRyb2wuYzo0NjI3OiNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbm1tL21lbWNvbnRyb2wuYy00NjI4LXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfbHJ1X2dlbl9hdHRhY2goc3RydWN0IGNncm91cF90YXNrc2V0ICp0c2V0KVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTQ2NDY9c3RhdGljIHZvaWQgbWVtX2Nncm91cF9scnVfZ2VuX2F0dGFjaChzdHJ1Y3QgY2dyb3VwX3Rhc2tzZXQgKnRzZXQpIHt9XFxubW0vbWVtY29udHJvbC5jOjQ2NDc6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXFxubW0vbWVtY29udHJvbC5jLTQ2NDgtXFxuLS1cXG5tbS9tZW1vcnkuYz02NzI1PXN0YXRpYyBpbmxpbmUgdm9pZCBtbV9hY2NvdW50X2ZhdWx0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyxcXG4tLVxcbm1tL21lbW9yeS5jLTY3NzctXFxubW0vbWVtb3J5LmM6Njc3ODojaWZkZWYgQ09ORklHX0xSVV9HRU5cXG5tbS9tZW1vcnkuYy02Nzc5LXN0YXRpYyB2b2lkIGxydV9nZW5fZW50ZXJfZmF1bHQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5tbS9tZW1vcnkuYz02Nzk0PXN0YXRpYyB2b2lkIGxydV9nZW5fZXhpdF9mYXVsdCh2b2lkKVxcbi0tXFxubW0vbWVtb3J5LmMtNjc5Ni19XFxubW0vbWVtb3J5LmM6Njc5NzojZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cXG5tbS9tZW1vcnkuYy02Nzk4LVxcbi0tXFxubW0vdm1zY2FuLmM9ODI3PWVudW0gZm9saW9fcmVmZXJlbmNlcyB7XFxuLS1cXG5tbS92bXNjYW4uYy04MzItXFxubW0vdm1zY2FuLmM6ODMzOiNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbm1tL3Ztc2Nhbi5jLTgzNC0vKlxcbi0tXFxubW0vdm1zY2FuLmM9ODY1PXN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTg2OC19XFxubW0vdm1zY2FuLmM6ODY5OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xcbm1tL3Ztc2Nhbi5jLTg3MC1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTI2ODM9c3RhdGljIGJvb2wgY2FuX2FnZV9hbm9uX3BhZ2VzKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI2OTQtXFxubW0vdm1zY2FuLmM6MjY5NTojaWZkZWYgQ09ORklHX0xSVV9HRU5cXG5tbS92bXNjYW4uYy0yNjk2LVxcbm1tL3Ztc2Nhbi5jPTI2OTc9REVGSU5FX1NUQVRJQ19LRVlfRkFMU0UobHJ1X3N3aXRjaCk7XFxubW0vdm1zY2FuLmM6MjY5ODojaWZkZWYgQ09ORklHX0xSVV9HRU5fRU5BQkxFRFxcbm1tL3Ztc2Nhbi5jLTI2OTktREVGSU5FX1NUQVRJQ19LRVlfQVJSQVlfVFJVRShscnVfZ2VuX2NhcHMsIE5SX0xSVV9HRU5fQ0FQUyk7XFxuLS1cXG5tbS92bXNjYW4uYz0yODgzPXN0YXRpYyB2b2lkIHJlc2V0X2Jsb29tX2ZpbHRlcihzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUsIHVuc2lnbmVkIGxvbmcgc2VxKVxcbi0tXFxubW0vdm1zY2FuLmMtMjkwMi1cXG5tbS92bXNjYW4uYzoyOTAzOiNpZmRlZiBDT05GSUdfTFJVX0dFTl9XQUxLU19NTVVcXG5tbS92bXNjYW4uYy0yOTA0LVxcbi0tXFxubW0vdm1zY2FuLmM9MzAxMj12b2lkIGxydV9nZW5fbWlncmF0ZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbm1tL3Ztc2Nhbi5jLTMwNDAtXFxubW0vdm1zY2FuLmM6MzA0MTojZWxzZSAvKiAhQ09ORklHX0xSVV9HRU5fV0FMS1NfTU1VICovXFxubW0vdm1zY2FuLmMtMzA0Mi1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTU5NTM9bGF0ZV9pbml0Y2FsbChpbml0X2xydV9nZW4pO1xcbm1tL3Ztc2Nhbi5jLTU5NTQtXFxubW0vdm1zY2FuLmM6NTk1NTojZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi9cXG5tbS92bXNjYW4uYy01OTU2LVxcbi0tXFxubW0vdm1zY2FuLmM9NTk2Nz1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTk3MS1cXG5tbS92bXNjYW4uYzo1OTcyOiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xcbm1tL3Ztc2Nhbi5jLTU5NzMtXFxuLS1cXG5tbS93b3JraW5nc2V0LmM9MjEzPXN0YXRpYyB2b2lkIHVucGFja19zaGFkb3codm9pZCAqc2hhZG93LCBpbnQgKm1lbWNnaWRwLCBwZ19kYXRhX3QgKipwZ2RhdCxcXG4tLVxcbm1tL3dvcmtpbmdzZXQuYy0yMzItXFxubW0vd29ya2luZ3NldC5jOjIzMzojaWZkZWYgQ09ORklHX0xSVV9HRU5cXG5tbS93b3JraW5nc2V0LmMtMjM0LVxcbi0tXFxubW0vd29ya2luZ3NldC5jPTI5Mj1zdGF0aWMgdm9pZCBscnVfZ2VuX3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KVxcbi0tXFxubW0vd29ya2luZ3NldC5jLTMzNi1cXG5tbS93b3JraW5nc2V0LmM6MzM3OiNlbHNlIC8qICFDT05GSUdfTFJVX0dFTiAqL1xcbm1tL3dvcmtpbmdzZXQuYy0zMzgtXFxuLS1cXG5tbS93b3JraW5nc2V0LmM9MzUwPXN0YXRpYyB2b2lkIGxydV9nZW5fcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXFxuLS1cXG5tbS93b3JraW5nc2V0LmMtMzUzLVxcbm1tL3dvcmtpbmdzZXQuYzozNTQ6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXFxubW0vd29ya2luZ3NldC5jLTM1NS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTk6MDQ6NTEuMDU4MDM3NDIxWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNzU2NTQ5MzY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBNR0xSVSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgTUdMUlUgcGF0Y2gsIGFuZCBoZXJlJ3MgdGhlIGJyZWFrZG93biBvZiBteSB0aGlua2luZy4gRmlyc3QsIGBDT05GSUdfTFJVX0dFTmAgaXMgdGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbiBoZXJlLCBhbmQgYENPTkZJR19MUlVfR0VOX0VOQUJMRURgIGVuYWJsZXMgaXQgYnkgZGVmYXVsdC4gU28sIGZvciB0aGUgZnV6emluZyBzZXR1cCwgYExSVV9HRU5gIGFuZCBgTFJVX0dFTl9FTkFCTEVEYCBkZWZpbml0ZWx5IG5lZWQgdG8gYmUgaW5jbHVkZWQgaW4gYEVuYWJsZUNvbmZpZ3NgLiBUaGF0J3MgYSBuby1icmFpbmVyLlxuXG5Ob3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBpcyB0aGlzIHBhdGNoIGludHJvZHVjaW5nIGZ1bmN0aW9uYWwgY2hhbmdlcyBzaWduaWZpY2FudCBlbm91Z2ggdG8gd2FycmFudCBmdXp6aW5nPyBBYnNvbHV0ZWx5LiBUaGUgcGF0Y2ggdG91Y2hlcyB0aGUgdmVyeSBoZWFydCBvZiBtZW1vcnkgbWFuYWdlbWVudCDigJMgdGhlIExSVSBnZW5lcmF0aW9uIGxvZ2ljLiBUaGUgY2hhbmdlcyB0byBgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVgIGltbWVkaWF0ZWx5IGNhdWdodCBteSBleWU7IHVzaW5nIGF0b21pYyBvcGVyYXRpb25zIGlzIGEgY3JpdGljYWwgZml4IGZvciBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbi4gQWxzbywgY2hhbmdlcyB0byBgZm9saW9fbWlncmF0ZV9mbGFnc2AsIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCwgYW5kIHRoZSB1cGRhdGVzIGluIGBtbS92bXNjYW4uY2AgYWxsIHNjcmVhbSBcImZ1bmN0aW9uYWwgaW1wYWN0LlwiIFNvLCBgV29ydGhGdXp6aW5nYCBpcyBkZWZpbml0ZWx5IHRydWUuXG5cblRoaXMgbGVhZHMgbWUgdG8gYEZvY3VzU3ltYm9sc2AuIEnigJltIGluaXRpYWxseSB0aGlua2luZyBgZm9saW9fbWlncmF0ZV9mbGFnc2AgYW5kIGBscnVfZ2VuX2xvb2tfYXJvdW5kYC4gQnV0IHdhaXQgYSBtaW51dGUsIGBmb2xpb19taWdyYXRlX2ZsYWdzYCBpcyBjYWxsZWQgZnJvbSBgbWlncmF0ZV9wYWdlc2AgYW5kIGBtaWdyYXRlX2RldmljZV9wYWdlc2AuIFBhZ2UgbWlncmF0aW9uIGlzbid0IGFzIGhvdCBhcyBwYWdlIGZhdWx0cyBvciByZWNsYWltLCBidXQgaXQncyBzdGlsbCBmdW5kYW1lbnRhbCB0byBtZW1vcnkgbWFuYWdlbWVudC4gQXMgZm9yIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCwgdGhhdCBvbmUgaXMgY2FsbGVkIHdpdGhpbiBgZm9saW9fcmVmZXJlbmNlZF9vbmVgIGR1cmluZyBybWFwIHdhbGtpbmcsIHdoaWNoIGlzIGFic29sdXRlbHkgcGFydCBvZiBwYWdlIHJlY2xhaW0uIEl0J3MgYSBiaXQgaG90LCBnaXZlbiB0aGF0IGl0J3MgcGFydCBvZiBNR0xSVS5cblxuTGV0J3MgZG91YmxlIGNoZWNrLiBHb2luZyB0aHJvdWdoIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucywgSSBzZWUgdGhlIGZvbGxvd2luZyBpbmxpbmVzOiBgZm9saW9fbWlncmF0ZV9scnVfcmVmc2AsIGBmb2xpb19zZXRfbHJ1X3JlZnNgLCBgbHJ1X3JlZnNfc2V0X2ZsYWdzYCwgYGxydV9nZW5fc2V0X2ZsYWdzYCwgYGxydV9nZW5fZnJvbV9mbGFnc2AsIGFuZCBgZm9saW9fZmxhZ3NfaXNfZmlsZV9scnVgLiBUaG9zZSBkb24ndCBjb25jZXJuIG1lLCBzaW5jZSB0aGV5IGFyZSBpbmxpbmUuIFRodXMsIHRoZSBvbmx5IG5vbi1zdGF0aWMgZnVuY3Rpb25zIGFyZSBgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVgLCBgZm9saW9fbWlncmF0ZV9mbGFnc2AsIGFuZCBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAuXG5cblJpZ2h0LCBzbyBhZnRlciByZXZpZXdpbmcsIGBmb2xpb19taWdyYXRlX2ZsYWdzYCBhbmQgYGxydV9nZW5fbG9va19hcm91bmRgIHN0YXkgaW4gYEZvY3VzU3ltYm9sc2AuIEhvd2V2ZXIsIGBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZWAgaXMgdG9vIGhvdCB0byBpbmNsdWRlLlxuXG5UbyBzdW1tYXJpemUsIHRoaXMgcGF0Y2ggcmVmYWN0b3JzIE1HTFJVJ3MgcGFnZSBmbGFncyBhbmQgZml4ZXMgYSByYWNlLiBJdCB0b3VjaGVzIGNvcmUgbG9naWM6IHBhZ2UgbWlncmF0aW9uIGFuZCByZWNsYWltLiBUaGUgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbCwgYW5kIHRoYXQgbWFrZXMgaXQgcmlwZSBmb3IgZnV6emluZy5cblxuT2theSwgSSB0aGluayBJIGhhdmUgYSBzb2xpZCB1bmRlcnN0YW5kaW5nLCBhbmQgSSdtIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ5NTYsIk91dHB1dFRva2VucyI6MTQ5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE5OjA1OjAxLjgxNDU4ODY0OVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyNzg4ODI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJMUlVfR0VOXCIsXG4gICAgXCJMUlVfR0VOX0VOQUJMRURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmb2xpb19taWdyYXRlX2ZsYWdzXCIsXG4gICAgXCJscnVfZ2VuX2xvb2tfYXJvdW5kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBwYWdlIGZsYWdzIGhhbmRsaW5nIGFuZCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIGBscnVfem9uZV9zaXplYCB1cGRhdGVzIGJ5IHVzaW5nIGF0b21pYyBvcGVyYXRpb25zLiBJdCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLCBzcGVjaWZpY2FsbHkgcGFnZSBtaWdyYXRpb24gKGBmb2xpb19taWdyYXRlX2ZsYWdzYCkgYW5kIHBhZ2UgcmVjbGFpbSBsb29rYXJvdW5kIChgbHJ1X2dlbl9sb29rX2Fyb3VuZGApLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgbWFraW5nIHRoZW0gd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJMUlVfR0VOXCIsXG4gICAgXCJMUlVfR0VOX0VOQUJMRURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmb2xpb19taWdyYXRlX2ZsYWdzXCIsXG4gICAgXCJscnVfZ2VuX2xvb2tfYXJvdW5kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBwYWdlIGZsYWdzIGhhbmRsaW5nIGFuZCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIGBscnVfem9uZV9zaXplYCB1cGRhdGVzIGJ5IHVzaW5nIGF0b21pYyBvcGVyYXRpb25zLiBJdCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLCBzcGVjaWZpY2FsbHkgcGFnZSBtaWdyYXRpb24gKGBmb2xpb19taWdyYXRlX2ZsYWdzYCkgYW5kIHBhZ2UgcmVjbGFpbSBsb29rYXJvdW5kIChgbHJ1X2dlbl9sb29rX2Fyb3VuZGApLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgbWFraW5nIHRoZW0gd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTk6MDU6MDEuODg3Mzg0NDc4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzYwMTgwMDk0MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE5OjA1OjAxLjg4Nzc5NTc3OFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNzYwMTM4NTI1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBpbnRlcm5hbCBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCBzcGVjaWZpY2FsbHkgTFJVIGdlbmVyYXRpb24gYW5kIGZvbGlvIGZsYWdzIG1hbmlwdWxhdGlvbiwgYW5kIGNoYW5nZXMgYGxydV96b25lX3NpemVgIHRvIHVzZSBgYXRvbWljX2xvbmdfdGAuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgdGhhdCBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFsbG9jYXRlIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIG9yIG1vZGlmeSBib3VuZHMgY2hlY2tzIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgbmV3bHkgaW50cm9kdWNlZCBvdXQtcGFyYW1ldGVyIGBpc19maWxlYCBpbiBgZm9saW9fdXBkYXRlX2dlbmAgaXMgYWx3YXlzIGluaXRpYWxpemVkIGJlZm9yZSByZXR1cm5pbmcuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgcmFjZSBjb25kaXRpb25zLCB1c2UtYWZ0ZXItZnJlZSwgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcykgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgb3RoZXIgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDI1OWEyNTIyMzg3NmQwZjI3M2IzNGZlNmFlZjM0MzY2Yjc1NjA5OWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAyNSAxOTowMzoyMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbmluZGV4IDIxNWUyZTg3ZjQyYjIuLjdiODlkMGNiNWY2YzYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuKysrIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbkBAIC0xMTMsNyArMTEzLDcgQEAgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUge1xuIFx0LyogRmllbGRzIHdoaWNoIGdldCB1cGRhdGVkIG9mdGVuIGF0IHRoZSBlbmQuICovXG4gXHRzdHJ1Y3QgbHJ1dmVjXHRcdGxydXZlYztcbiBcdENBQ0hFTElORV9QQURESU5HKF9wYWQyXyk7XG4tXHR1bnNpZ25lZCBsb25nXHRcdGxydV96b25lX3NpemVbTUFYX05SX1pPTkVTXVtOUl9MUlVfTElTVFNdO1xuK1x0YXRvbWljX2xvbmdfdFx0XHRscnVfem9uZV9zaXplW01BWF9OUl9aT05FU11bTlJfTFJVX0xJU1RTXTtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwX3JlY2xhaW1faXRlclx0aXRlcjtcbiBcbiBcdC8qXG5AQCAtOTAyLDEwICs5MDIsMTUgQEAgc3RhdGljIGlubGluZVxuIHVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9nZXRfem9uZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRcdGVudW0gbHJ1X2xpc3QgbHJ1LCBpbnQgem9uZV9pZHgpXG4ge1xuK1x0bG9uZyB2YWw7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXo7XG4gXG4gXHRteiA9IGNvbnRhaW5lcl9vZihscnV2ZWMsIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlLCBscnV2ZWMpO1xuLVx0cmV0dXJuIFJFQURfT05DRShtei1cdTAwM2VscnVfem9uZV9zaXplW3pvbmVfaWR4XVtscnVdKTtcbitcdHZhbCA9IGF0b21pY19sb25nX3JlYWQoXHUwMDI2bXotXHUwMDNlbHJ1X3pvbmVfc2l6ZVt6b25lX2lkeF1bbHJ1XSk7XG4rXHRpZiAoV0FSTl9PTl9PTkNFKHZhbCBcdTAwM2MgMCkpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0dXJuIHZhbDtcbiB9XG4gXG4gdm9pZCBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzayk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaCBiL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmhcbmluZGV4IDYyMWM4NjUzZDhmN2UuLjhjZjgyOTg5ZWMyNjMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oXG5AQCAtMTAsNiArMTAsMTEgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91c2VyZmF1bHRmZF9rLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9sZWFmb3BzLmhcdTAwM2VcbiBcbitzdGF0aWMgaW5saW5lIGludCBmb2xpb19mbGFnc19pc19maWxlX2xydShjb25zdCB1bnNpZ25lZCBsb25nICpmbGFncylcbit7XG4rXHRyZXR1cm4gIXRlc3RfYml0KFBHX3N3YXBiYWNrZWQsIGZsYWdzKTtcbit9XG4rXG4gLyoqXG4gICogZm9saW9faXNfZmlsZV9scnUgLSBTaG91bGQgdGhlIGZvbGlvIGJlIG9uIGEgZmlsZSBMUlUgb3IgYW5vbiBMUlU/XG4gICogQGZvbGlvOiBUaGUgZm9saW8gdG8gdGVzdC5cbkBAIC0yNyw3ICszMiw3IEBAXG4gICovXG4gc3RhdGljIGlubGluZSBpbnQgZm9saW9faXNfZmlsZV9scnUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4tXHRyZXR1cm4gIWZvbGlvX3Rlc3Rfc3dhcGJhY2tlZChmb2xpbyk7XG4rXHRyZXR1cm4gZm9saW9fZmxhZ3NfaXNfZmlsZV9scnUoY29uc3RfZm9saW9fZmxhZ3MoZm9saW8sIDApKTtcbiB9XG4gXG4gc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIF9fdXBkYXRlX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbkBAIC0xNDIsMTAgKzE0Nyw0MiBAQCBzdGF0aWMgaW5saW5lIGludCBscnVfdGllcl9mcm9tX3JlZnMoaW50IHJlZnMsIGJvb2wgd29ya2luZ3NldClcbiBcdHJldHVybiB3b3JraW5nc2V0ID8gTUFYX05SX1RJRVJTIC0gMSA6IG9yZGVyX2Jhc2VfMihyZWZzKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X3JlZnMoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbisvKipcbisgKiBscnVfZ2VuX2Zyb21fZmxhZ3MgLSBSZXR1cm4gdGhlIExSVSBnZW5lcmF0aW9uIG51bWJlciBmcm9tIGZvbGlvIGZsYWdzLlxuKyAqIEBmbGFnczogZm9saW8gZmxhZ3NcbisgKlxuKyAqIFJldHVybnM6IEEgbnVtYmVyIGJldHdlZW4gMCBhbmQgKE1BWF9OUl9HRU5TIC0gMSksIGluY2x1c2l2ZS4gUmV0dXJuc1xuKyAqIC0xIGlmIHRoZSBmbGFncyBpbmRpY2F0ZSB0aGUgZm9saW8gaXMgb2ZmIHRoZSBsaXN0IChlLmcuLCBpc29sYXRlZCkuXG4rICovXG4rc3RhdGljIGlubGluZSBpbnQgbHJ1X2dlbl9mcm9tX2ZsYWdzKHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4re1xuK1x0aW50IGdlbiA9ICgoZmxhZ3MgXHUwMDI2IExSVV9HRU5fTUFTSykgXHUwMDNlXHUwMDNlIExSVV9HRU5fUEdPRkYpO1xuK1xuK1x0QlVJTERfQlVHX09OKExSVV9HRU5fTUFTSyBcdTAwMjYgTFJVX1JFRlNfTUFTSyk7XG4rXHRnZW4gLT0gMTtcbitcdFZNX1dBUk5fT05fT05DRShnZW4gIT0gLTEgXHUwMDI2XHUwMDI2IGdlbiBcdTAwM2U9IE1BWF9OUl9HRU5TKTtcbitcdHJldHVybiBnZW47XG4rfVxuK1xuKy8qKlxuKyAqIGxydV9nZW5fc2V0X2ZsYWdzIC0gU2V0IHRoZSBMUlUgZ2VuZXJhdGlvbiBudW1iZXIgdG8gc3BlY2lmaWVkIGZvbGlvIGZsYWdzLlxuKyAqIEBmbGFnczogcG9pbnRlciB0byB0aGUgZm9saW8gZmxhZ3NcbisgKiBAZ2VuOiBnZW5lcmF0aW9uIG51bWJlciwgYmV0d2VlbiAwIGFuZCAoTUFYX05SX0dFTlMgLSAxKSwgaW5jbHVzaXZlLlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBscnVfZ2VuX3NldF9mbGFncyh1bnNpZ25lZCBsb25nICpmbGFncywgaW50IGdlbilcbiB7XG4tXHR1bnNpZ25lZCBsb25nIGZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVx1MDAzZWZsYWdzLmYpO1xuK1x0Vk1fV0FSTl9PTl9PTkNFKGdlbiBcdTAwM2U9IE1BWF9OUl9HRU5TIHx8IGdlbiBcdTAwM2MgMCk7XG4rXG4rXHQqZmxhZ3MgXHUwMDI2PSB+TFJVX0dFTl9NQVNLO1xuK1x0KmZsYWdzIHw9IChnZW4gKyAxVUwpIFx1MDAzY1x1MDAzYyBMUlVfR0VOX1BHT0ZGO1xuK31cbiBcbisvKipcbisgKiBscnVfcmVmc19mcm9tX2ZsYWdzIC0gUmV0dXJuIExSVSByZWZlcmVuY2VkIC8gYWNjZXNzIGNvdW50IGZyb20gZm9saW8gZmxhZ3MuXG4rICogQGZsYWdzOiBmb2xpbyBmbGFnc1xuKyAqL1xuK3N0YXRpYyBpbmxpbmUgaW50IGxydV9yZWZzX2Zyb21fZmxhZ3ModW5zaWduZWQgbG9uZyBmbGFncylcbit7XG4gXHRpZiAoIShmbGFncyBcdTAwMjYgQklUKFBHX3JlZmVyZW5jZWQpKSlcbiBcdFx0cmV0dXJuIDA7XG4gXHQvKlxuQEAgLTE1NSwxMSArMTkyLDQwIEBAIHN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9yZWZzKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRyZXR1cm4gKChmbGFncyBcdTAwMjYgTFJVX1JFRlNfTUFTSykgXHUwMDNlXHUwMDNlIExSVV9SRUZTX1BHT0ZGKSArIDE7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9nZW4oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbisvKipcbisgKiBscnVfcmVmc19zZXRfZmxhZ3MgLSBTZXQgdGhlIExSVSByZWZlcmVuY2VkIC8gYWNjZXNzIGNvdW50IHRvIHNwZWNpZmllZCBmb2xpbyBmbGFncy5cbisgKiBAZmxhZ3M6IHBvaW50ZXIgdG8gdGhlIGZvbGlvIGZsYWdzXG4rICogQHJlZnM6IHJlZmVyZW5jZWQgLyBhY2Nlc3MgY291bnQgbnVtYmVyLCBiZXR3ZWVuIDAgYW5kIExSVV9SRUZTX01BWCwgaW5jbHVzaXZlLlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBscnVfcmVmc19zZXRfZmxhZ3ModW5zaWduZWQgbG9uZyAqZmxhZ3MsIHVuc2lnbmVkIGludCByZWZzKVxuK3tcbitcdFZNX1dBUk5fT05fT05DRShyZWZzIFx1MDAzZSBMUlVfUkVGU19NQVgpO1xuK1x0QlVJTERfQlVHX09OKExSVV9SRUZTX01BWCAhPSAoTFJVX1JFRlNfTUFTSyBcdTAwM2VcdTAwM2UgTFJVX1JFRlNfUEdPRkYpICsgMSk7XG4rXG4rXHQqZmxhZ3MgXHUwMDI2PSB+TFJVX1JFRlNfRkxBR1M7XG4rXHRpZiAoIXJlZnMpXG4rXHRcdHJldHVybjtcbitcdCpmbGFncyB8PSAoQklUKFBHX3JlZmVyZW5jZWQpIHwgKChyZWZzIC0gMVVMKSBcdTAwM2NcdTAwM2MgTFJVX1JFRlNfUEdPRkYpKTtcbit9XG4rXG4rc3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X3JlZnMoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRyZXR1cm4gbHJ1X3JlZnNfZnJvbV9mbGFncyhSRUFEX09OQ0UoKmNvbnN0X2ZvbGlvX2ZsYWdzKGZvbGlvLCAwKSkpO1xuK31cbitcbitzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fc2V0X2xydV9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCByZWZzKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tXHUwMDNlZmxhZ3MuZik7XG4rXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKCpmb2xpb19mbGFncyhmb2xpbywgMCkpO1xuIFxuLVx0cmV0dXJuICgoZmxhZ3MgXHUwMDI2IExSVV9HRU5fTUFTSykgXHUwMDNlXHUwMDNlIExSVV9HRU5fUEdPRkYpIC0gMTtcbitcdGRvIHtcbitcdFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzO1xuK1x0XHRscnVfcmVmc19zZXRfZmxhZ3MoXHUwMDI2bmV3X2ZsYWdzLCByZWZzKTtcbitcdH0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksIFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9nZW4oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRyZXR1cm4gbHJ1X2dlbl9mcm9tX2ZsYWdzKFJFQURfT05DRSgqY29uc3RfZm9saW9fZmxhZ3MoZm9saW8sIDApKSk7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2lzX2FjdGl2ZShjb25zdCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBnZW4pXG5AQCAtMjcwLDcgKzMzNiw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2FkZF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKHNlcSk7XG4gXHRmbGFncyA9IChnZW4gKyAxVUwpIFx1MDAzY1x1MDAzYyBMUlVfR0VOX1BHT0ZGO1xuIFx0Lyogc2VlIHRoZSBjb21tZW50IG9uIE1JTl9OUl9HRU5TIGFib3V0IFBHX2FjdGl2ZSAqL1xuLVx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfR0VOX01BU0sgfCBCSVQoUEdfYWN0aXZlKSwgZmxhZ3MpO1xuK1x0c2V0X21hc2tfYml0cyhmb2xpb19mbGFncyhmb2xpbywgMCksIExSVV9HRU5fTUFTSyB8IEJJVChQR19hY3RpdmUpLCBmbGFncyk7XG4gXG4gXHRscnVfZ2VuX3VwZGF0ZV9zaXplKGxydXZlYywgZm9saW8sIC0xLCBnZW4pO1xuIFx0LyogZm9yIGZvbGlvX3JvdGF0ZV9yZWNsYWltYWJsZSgpICovXG5AQCAtMjk1LDcgKzM2MSw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2RlbF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXG4gXHQvKiBmb3IgZm9saW9fbWlncmF0ZV9mbGFncygpICovXG4gXHRmbGFncyA9ICFyZWNsYWltaW5nIFx1MDAyNlx1MDAyNiBscnVfZ2VuX2lzX2FjdGl2ZShscnV2ZWMsIGdlbikgPyBCSVQoUEdfYWN0aXZlKSA6IDA7XG4tXHRmbGFncyA9IHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX0dFTl9NQVNLLCBmbGFncyk7XG4rXHRmbGFncyA9IHNldF9tYXNrX2JpdHMoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBMUlVfR0VOX01BU0ssIGZsYWdzKTtcbiBcdGdlbiA9ICgoZmxhZ3MgXHUwMDI2IExSVV9HRU5fTUFTSykgXHUwMDNlXHUwMDNlIExSVV9HRU5fUEdPRkYpIC0gMTtcbiBcbiBcdGxydV9nZW5fdXBkYXRlX3NpemUobHJ1dmVjLCBmb2xpbywgZ2VuLCAtMSk7XG5AQCAtMzA0LDExICszNzAsMTkgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZGVsX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fbWlncmF0ZV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZClcbisvKipcbisgKiBmb2xpb19taWdyYXRlX2xydV9yZWZzIC0gY29weSB0aGUgcmVmZXJlbmNlIHN0YXRlIHRvIGEgbmV3IGZvbGlvXG4rICogQG5ldzogdGhlIGRlc3RpbmF0aW9uIGZvbGlvXG4rICogQG9sZDogdGhlIHNvdXJjZSBmb2xpb1xuKyAqXG4rICogVHJhbnNmZXIgdGhlIHJlZmVyZW5jZSBzdGF0ZSB0byBAbmV3IGR1cmluZyBtaWdyYXRpb246IHRoZSBNR0xSVVxuKyAqIHJlZnMgY291bnQsIGluY2x1ZGluZyBQR19yZWZlcmVuY2VkLCBvciBqdXN0IFBHX3JlZmVyZW5jZWQgZm9yIHRoZVxuKyAqIGFjdGl2ZS9pbmFjdGl2ZSBMUlUuXG4rICovXG4rc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgcmVmcyA9IFJFQURfT05DRShvbGQtXHUwMDNlZmxhZ3MuZikgXHUwMDI2IExSVV9SRUZTX01BU0s7XG4tXG4tXHRzZXRfbWFza19iaXRzKFx1MDAyNm5ldy1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19NQVNLLCByZWZzKTtcbitcdEJVSUxEX0JVR19PTihMUlVfUkVGU19NQVNLIFx1MDAyNiBCSVQoUEdfcmVmZXJlbmNlZCkpO1xuK1x0Zm9saW9fc2V0X2xydV9yZWZzKG5ldywgZm9saW9fbHJ1X3JlZnMob2xkKSk7XG4gfVxuICNlbHNlIC8qICFDT05GSUdfTFJVX0dFTiAqL1xuIFxuQEAgLTMzNyw5ICs0MTEsMTAgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZGVsX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfcmVmcyhzdHJ1Y3QgZm9saW8gKm5ldywgY29uc3Qgc3RydWN0IGZvbGlvICpvbGQpXG4rc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKVxuIHtcbi1cbitcdGlmIChmb2xpb190ZXN0X3JlZmVyZW5jZWQob2xkKSlcbitcdFx0Zm9saW9fc2V0X3JlZmVyZW5jZWQobmV3KTtcbiB9XG4gI2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaCBiL2luY2x1ZGUvbGludXgvbW16b25lLmhcbmluZGV4IDk0ZjljM2ZmNTQxNjAuLjliMjdjZjUzYmRiYzcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG5AQCAtNDkyLDExICs0OTIsMTQgQEAgZW51bSBscnV2ZWNfZmxhZ3Mge1xuICAqIGZvbGlvLVx1MDAzZWZsYWdzLCBtYXNrZWQgYnkgTFJVX1JFRlNfTUFTSy5cbiAgKi9cbiAjZGVmaW5lIE1BWF9OUl9USUVSU1x0XHQ0VVxuKyNkZWZpbmUgTFJVX1RJRVJfTUlOXHRcdDBVXG4rI2RlZmluZSBMUlVfVElFUl9NQVhcdFx0KE1BWF9OUl9USUVSUyAtIDEpXG4gXG4gI2lmbmRlZiBfX0dFTkVSQVRJTkdfQk9VTkRTX0hcbiBcbiAjZGVmaW5lIExSVV9HRU5fTUFTS1x0XHQoKEJJVChMUlVfR0VOX1dJRFRIKSAtIDEpIFx1MDAzY1x1MDAzYyBMUlVfR0VOX1BHT0ZGKVxuICNkZWZpbmUgTFJVX1JFRlNfTUFTS1x0XHQoKEJJVChMUlVfUkVGU19XSURUSCkgLSAxKSBcdTAwM2NcdTAwM2MgTFJVX1JFRlNfUEdPRkYpXG4rI2RlZmluZSBMUlVfUkVGU19NQVhcdFx0QklUKExSVV9SRUZTX1dJRFRIKVxuIFxuIC8qXG4gICogRm9yIGZvbGlvcyBhY2Nlc3NlZCBtdWx0aXBsZSB0aW1lcyB0aHJvdWdoIGZpbGUgZGVzY3JpcHRvcnMsXG5kaWZmIC0tZ2l0IGEvbW0vZm9saW8uYyBiL21tL2ZvbGlvLmNcbmluZGV4IGMwMmRjZWE5YzAzYzIuLmE5MzIwNTkwNTdhYzEgMTAwNjQ0XG4tLS0gYS9tbS9mb2xpby5jXG4rKysgYi9tbS9mb2xpby5jXG5AQCAtMzUzLDI2ICszNTMsMjggQEAgc3RhdGljIHZvaWQgX19scnVfY2FjaGVfYWN0aXZhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbiBcbiBzdGF0aWMgdm9pZCBscnVfZ2VuX2luY19yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuLVx0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRShmb2xpby1cdTAwM2VmbGFncy5mKTtcbitcdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XG4rXHRpbnQgcmVmcztcbiBcbiBcdGlmIChmb2xpb190ZXN0X3VuZXZpY3RhYmxlKGZvbGlvKSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0Lyogc2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTICovXG4tXHRpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykpIHtcbi1cdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19NQVNLLCBCSVQoUEdfcmVmZXJlbmNlZCkpO1xuK1x0aWYgKCFmb2xpb19scnVfcmVmcyhmb2xpbykpIHtcbitcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAxKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuIFx0ZG8ge1xuLVx0XHRpZiAoKG9sZF9mbGFncyBcdTAwMjYgTFJVX1JFRlNfTUFTSykgPT0gTFJVX1JFRlNfTUFTSykge1xuK1x0XHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3M7XG4rXHRcdHJlZnMgPSBscnVfcmVmc19mcm9tX2ZsYWdzKG9sZF9mbGFncyk7XG4rXHRcdGlmIChyZWZzID09IExSVV9SRUZTX01BWCkge1xuIFx0XHRcdGlmICghZm9saW9fdGVzdF93b3JraW5nc2V0KGZvbGlvKSlcbiBcdFx0XHRcdGZvbGlvX3NldF93b3JraW5nc2V0KGZvbGlvKTtcbiBcdFx0XHRyZXR1cm47XG4gXHRcdH1cbi1cbi1cdFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzICsgQklUKExSVV9SRUZTX1BHT0ZGKTtcbi1cdH0gd2hpbGUgKCF0cnlfY21weGNoZyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xuK1x0XHRscnVfcmVmc19zZXRfZmxhZ3MoXHUwMDI2bmV3X2ZsYWdzLCByZWZzICsgMSk7XG4rXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBscnVfZ2VuX2NsZWFyX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcbkBAIC0zODQsNyArMzg2LDggQEAgc3RhdGljIGJvb2wgbHJ1X2dlbl9jbGVhcl9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRpZiAoZ2VuIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbi1cdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MgfCBCSVQoUEdfd29ya2luZ3NldCksIDApO1xuK1x0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcbitcdGZvbGlvX2NsZWFyX3dvcmtpbmdzZXQoZm9saW8pO1xuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuIFx0c2VxID0gUkVBRF9PTkNFKGZvbGlvX2xydXZlYyhmb2xpbyktXHUwMDNlbHJ1Z2VuLm1pbl9zZXFbdHlwZV0pO1xuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuY1xuaW5kZXggMTFiODVmNGI2ODI4Yi4uYTc1NzJkZWQ1NmM5ZCAxMDA2NDRcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xuKysrIGIvbW0vbWVtY29udHJvbC5jXG5AQCAtMTUyOSwyOCArMTUyOSwxMiBAQCB2b2lkIG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBscnVfbGlzdCBscnUsXG4gXHRcdFx0XHRpbnQgemlkLCBsb25nIG5yX3BhZ2VzKVxuIHtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICptejtcbi1cdHVuc2lnbmVkIGxvbmcgKmxydV9zaXplO1xuLVx0bG9uZyBzaXplO1xuIFxuIFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0bXogPSBjb250YWluZXJfb2YobHJ1dmVjLCBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSwgbHJ1dmVjKTtcbi1cdGxydV9zaXplID0gXHUwMDI2bXotXHUwMDNlbHJ1X3pvbmVfc2l6ZVt6aWRdW2xydV07XG4tXG4tXHRpZiAobnJfcGFnZXMgXHUwMDNjIDApXG4tXHRcdCpscnVfc2l6ZSArPSBucl9wYWdlcztcbi1cbi1cdHNpemUgPSAqbHJ1X3NpemU7XG4tXHRpZiAoV0FSTl9PTkNFKHNpemUgXHUwMDNjIDAsXG4tXHRcdFwiJXMoJXAsICVkLCAlbGQpOiBscnVfc2l6ZSAlbGRcXG5cIixcbi1cdFx0X19mdW5jX18sIGxydXZlYywgbHJ1LCBucl9wYWdlcywgc2l6ZSkpIHtcbi1cdFx0Vk1fQlVHX09OKDEpO1xuLVx0XHQqbHJ1X3NpemUgPSAwO1xuLVx0fVxuLVxuLVx0aWYgKG5yX3BhZ2VzIFx1MDAzZSAwKVxuLVx0XHQqbHJ1X3NpemUgKz0gbnJfcGFnZXM7XG4rXHRhdG9taWNfbG9uZ19hZGQobnJfcGFnZXMsIFx1MDAyNm16LVx1MDAzZWxydV96b25lX3NpemVbemlkXVtscnVdKTtcbiB9XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZS5jIGIvbW0vbWlncmF0ZS5jXG5pbmRleCAxNWI0NTgzMmJjZmE3Li5hMzY5ZDBjOTVjMzg2IDEwMDY0NFxuLS0tIGEvbW0vbWlncmF0ZS5jXG4rKysgYi9tbS9taWdyYXRlLmNcbkBAIC03NzYsOCArNzc2LDkgQEAgdm9pZCBmb2xpb19taWdyYXRlX2ZsYWdzKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0aW50IGNwdXBpZDtcbiBcbi1cdGlmIChmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pKVxuLVx0XHRmb2xpb19zZXRfcmVmZXJlbmNlZChuZXdmb2xpbyk7XG4rXHQvKiBDb3B5IHRoZSByZWZlcmVuY2Ugc3RhdGUsIGluY2x1ZGluZyBQR19yZWZlcmVuY2VkICovXG4rXHRmb2xpb19taWdyYXRlX2xydV9yZWZzKG5ld2ZvbGlvLCBmb2xpbyk7XG4rXG4gXHRpZiAoZm9saW9fdGVzdF91cHRvZGF0ZShmb2xpbykpXG4gXHRcdGZvbGlvX21hcmtfdXB0b2RhdGUobmV3Zm9saW8pO1xuIFx0aWYgKGZvbGlvX3Rlc3RfY2xlYXJfYWN0aXZlKGZvbGlvKSkge1xuQEAgLTgwNyw3ICs4MDgsNiBAQCB2b2lkIGZvbGlvX21pZ3JhdGVfZmxhZ3Moc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdGlmIChmb2xpb190ZXN0X2lkbGUoZm9saW8pKVxuIFx0XHRmb2xpb19zZXRfaWRsZShuZXdmb2xpbyk7XG4gXG4tXHRmb2xpb19taWdyYXRlX3JlZnMobmV3Zm9saW8sIGZvbGlvKTtcbiBcdC8qXG4gXHQgKiBDb3B5IE5VTUEgaW5mb3JtYXRpb24gdG8gdGhlIG5ldyBwYWdlLCB0byBwcmV2ZW50IG92ZXItZWFnZXJcbiBcdCAqIGZ1dHVyZSBtaWdyYXRpb25zIG9mIHRoaXMgc2FtZSBwYWdlLlxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IDczYTgxYjRhM2UxNjQuLjZmZGE5NDhhZWNmMmMgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuKysrIGIvbW0vdm1zY2FuLmNcbkBAIC04NDMsMTkgKzg0MywyMiBAQCBzdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXG4gXHRpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykgXHUwMDI2XHUwMDI2ICFmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pKSB7XG4gXHRcdC8qIEFjdGl2YXRlIGZpbGUtYmFja2VkIGV4ZWN1dGFibGUgZm9saW9zIGFmdGVyIGZpcnN0IHVzYWdlLiAqL1xuIFx0XHRpZiAoaXNfZXhlY19maWxlX2ZvbGlvKGZvbGlvLCB2bWFfZmxhZ3MpKSB7XG4tXHRcdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX3dvcmtpbmdzZXQpKTtcbitcdFx0XHRmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7XG4rXHRcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcbiBcdFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdFx0fVxuIFxuLVx0XHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX01BU0ssIEJJVChQR19yZWZlcmVuY2VkKSk7XG4rXHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMSk7XG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbiBcbiBcdC8qIFByb21vdGUgb24gc2Vjb25kIGFjY2VzcyAqL1xuLVx0aWYgKGZvbGlvX2xydV9yZWZzKGZvbGlvKSBcdTAwM2UgMSlcbi1cdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX3dvcmtpbmdzZXQpKTtcbi1cdGVsc2VcbitcdGlmIChmb2xpb19scnVfcmVmcyhmb2xpbykgXHUwMDNlIDEpIHtcbitcdFx0Zm9saW9fc2V0X3dvcmtpbmdzZXQoZm9saW8pO1xuK1x0XHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xuK1x0fSBlbHNlIHtcbiBcdFx0Zm9saW9fbWFya19hY2Nlc3NlZChmb2xpbyk7XG4rXHR9XG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gI2Vsc2VcbkBAIC0zMTk1LDggKzMxOTgsOCBAQCBzdHJ1Y3QgY3RybF9wb3Mge1xuIFx0aW50IGdhaW47XG4gfTtcbiBcbi1zdGF0aWMgdm9pZCByZWFkX2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCB0aWVyLCBpbnQgZ2Fpbixcbi1cdFx0XHQgIHN0cnVjdCBjdHJsX3BvcyAqcG9zKVxuK3N0YXRpYyB2b2lkIHJlYWRfY3RybF9wb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHRpZXJfbWluLFxuK1x0XHRcdCAgaW50IHRpZXJfbWF4LCBpbnQgZ2Fpbiwgc3RydWN0IGN0cmxfcG9zICpwb3MpXG4ge1xuIFx0aW50IGk7XG4gXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbkBAIC0zMjA1LDcgKzMyMDgsNyBAQCBzdGF0aWMgdm9pZCByZWFkX2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCB0aWVyLCBpbnQgZ2FpbixcbiBcdHBvcy1cdTAwM2VnYWluID0gZ2FpbjtcbiBcdHBvcy1cdTAwM2VyZWZhdWx0ZWQgPSBwb3MtXHUwMDNldG90YWwgPSAwO1xuIFxuLVx0Zm9yIChpID0gdGllciAlIE1BWF9OUl9USUVSUzsgaSBcdTAwM2M9IG1pbih0aWVyLCBNQVhfTlJfVElFUlMgLSAxKTsgaSsrKSB7XG4rXHRmb3IgKGkgPSB0aWVyX21pbjsgaSBcdTAwM2M9IHRpZXJfbWF4OyBpKyspIHtcbiBcdFx0cG9zLVx1MDAzZXJlZmF1bHRlZCArPSBscnVnZW4tXHUwMDNlYXZnX3JlZmF1bHRlZFt0eXBlXVtpXSArXG4gXHRcdFx0XHQgIGF0b21pY19sb25nX3JlYWQoXHUwMDI2bHJ1Z2VuLVx1MDAzZXJlZmF1bHRlZFtoaXN0XVt0eXBlXVtpXSk7XG4gXHRcdHBvcy1cdTAwM2V0b3RhbCArPSBscnVnZW4tXHUwMDNlYXZnX3RvdGFsW3R5cGVdW2ldICtcbkBAIC0zMjY2LDExICszMjY5LDExIEBAIHN0YXRpYyBib29sIHBvc2l0aXZlX2N0cmxfZXJyKHN0cnVjdCBjdHJsX3BvcyAqc3AsIHN0cnVjdCBjdHJsX3BvcyAqcHYpXG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbiBcbiAvKiBwcm9tb3RlIHBhZ2VzIGFjY2Vzc2VkIHRocm91Z2ggcGFnZSB0YWJsZXMgKi9cbi1zdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGdlbiwgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcbitzdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5ld19nZW4sIGludCAqaXNfZmlsZSxcbitcdFx0XHQgICAgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcbiB7XG4tXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVx1MDAzZWZsYWdzLmYpO1xuLVxuLVx0Vk1fV0FSTl9PTl9PTkNFKGdlbiBcdTAwM2U9IE1BWF9OUl9HRU5TKTtcbitcdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XG4rXHRpbnQgb2xkX2dlbjtcbiBcbiBcdC8qXG4gXHQgKiBTZWUgdGhlIGNvbW1lbnQgb24gTFJVX1JFRlNfRkxBR1MsIGFuZCBhY3RpdmF0ZSBmaWxlLWJhY2tlZFxuQEAgLTMyNzksMjAgKzMyODIsMjUgQEAgc3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBnZW4sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFcbiBcdCAqL1xuIFx0aWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pIFx1MDAyNlx1MDAyNiAhZm9saW9fdGVzdF93b3JraW5nc2V0KGZvbGlvKSBcdTAwMjZcdTAwMjZcbiBcdCAgICAhaXNfZXhlY19maWxlX2ZvbGlvKGZvbGlvLCB2bWFfZmxhZ3MpKSB7XG4tXHRcdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgQklUKFBHX3JlZmVyZW5jZWQpKTtcbitcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAxKTtcbiBcdFx0cmV0dXJuIC0xO1xuIFx0fVxuIFxuIFx0ZG8ge1xuK1x0XHRvbGRfZ2VuID0gbHJ1X2dlbl9mcm9tX2ZsYWdzKG9sZF9mbGFncyk7XG4rXHRcdG5ld19mbGFncyA9IG9sZF9mbGFncztcbitcbiBcdFx0LyogbHJ1X2dlbl9kZWxfZm9saW8oKSBoYXMgaXNvbGF0ZWQgdGhpcyBwYWdlPyAqL1xuLVx0XHRpZiAoIShvbGRfZmxhZ3MgXHUwMDI2IExSVV9HRU5fTUFTSykpXG4tXHRcdFx0cmV0dXJuIC0xO1xuK1x0XHRpZiAob2xkX2dlbiBcdTAwM2MgMClcbitcdFx0XHRicmVhaztcbiBcbi1cdFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzIFx1MDAyNiB+KExSVV9HRU5fTUFTSyB8IExSVV9SRUZTX0ZMQUdTKTtcbi1cdFx0bmV3X2ZsYWdzIHw9ICgoZ2VuICsgMVVMKSBcdTAwM2NcdTAwM2MgTFJVX0dFTl9QR09GRikgfCBCSVQoUEdfd29ya2luZ3NldCk7XG4tXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbitcdFx0bHJ1X2dlbl9zZXRfZmxhZ3MoXHUwMDI2bmV3X2ZsYWdzLCBuZXdfZ2VuKTtcbitcdFx0bHJ1X3JlZnNfc2V0X2ZsYWdzKFx1MDAyNm5ld19mbGFncywgMCk7XG4rXHRcdG5ld19mbGFncyB8PSBCSVQoUEdfd29ya2luZ3NldCk7XG4rXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xuIFxuLVx0cmV0dXJuICgob2xkX2ZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spIFx1MDAzZVx1MDAzZSBMUlVfR0VOX1BHT0ZGKSAtIDE7XG4rXHQqaXNfZmlsZSA9IGZvbGlvX2ZsYWdzX2lzX2ZpbGVfbHJ1KFx1MDAyNm9sZF9mbGFncyk7XG4rXHRyZXR1cm4gb2xkX2dlbjtcbiB9XG4gXG4gLyogcHJvdGVjdCBwYWdlcyBhY2Nlc3NlZCBtdWx0aXBsZSB0aW1lcyB0aHJvdWdoIGZpbGUgZGVzY3JpcHRvcnMgKi9cbkBAIC0zMzAxLDIxICszMzA5LDIwIEBAIHN0YXRpYyBpbnQgZm9saW9faW5jX2dlbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRpbnQgdHlwZSA9IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTtcbiBcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xuIFx0aW50IG5ld19nZW4sIG9sZF9nZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGxydWdlbi1cdTAwM2VtaW5fc2VxW3R5cGVdKTtcbi1cdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tXHUwMDNlZmxhZ3MuZik7XG4tXG4tXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIShvbGRfZmxhZ3MgXHUwMDI2IExSVV9HRU5fTUFTSyksIGZvbGlvKTtcbitcdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XG4gXG4gXHRkbyB7XG4tXHRcdG5ld19nZW4gPSAoKG9sZF9mbGFncyBcdTAwMjYgTFJVX0dFTl9NQVNLKSBcdTAwM2VcdTAwM2UgTFJVX0dFTl9QR09GRikgLSAxO1xuK1x0XHRuZXdfZ2VuID0gbHJ1X2dlbl9mcm9tX2ZsYWdzKG9sZF9mbGFncyk7XG4rXG4gXHRcdC8qIGZvbGlvX3VwZGF0ZV9nZW4oKSBoYXMgcHJvbW90ZWQgdGhpcyBwYWdlPyAqL1xuIFx0XHRpZiAobmV3X2dlbiBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IG5ld19nZW4gIT0gb2xkX2dlbilcbiBcdFx0XHRyZXR1cm4gbmV3X2dlbjtcbiBcbitcdFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzO1xuIFx0XHRuZXdfZ2VuID0gKG9sZF9nZW4gKyAxKSAlIE1BWF9OUl9HRU5TO1xuLVxuLVx0XHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3MgXHUwMDI2IH4oTFJVX0dFTl9NQVNLIHwgTFJVX1JFRlNfRkxBR1MpO1xuLVx0XHRuZXdfZmxhZ3MgfD0gKG5ld19nZW4gKyAxVUwpIFx1MDAzY1x1MDAzYyBMUlVfR0VOX1BHT0ZGO1xuLVx0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XG4rXHRcdGxydV9nZW5fc2V0X2ZsYWdzKFx1MDAyNm5ld19mbGFncywgbmV3X2dlbik7XG4rXHRcdGxydV9yZWZzX3NldF9mbGFncyhcdTAwMjZuZXdfZmxhZ3MsIDApO1xuK1x0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbiBcbiBcdGxydV9nZW5fdXBkYXRlX3NpemUobHJ1dmVjLCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbik7XG4gXG5AQCAtMzMyMyw5ICszMzMwLDggQEAgc3RhdGljIGludCBmb2xpb19pbmNfZ2VuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcbiB9XG4gXG4gc3RhdGljIHZvaWQgdXBkYXRlX2JhdGNoX3NpemUoc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaywgc3RydWN0IGZvbGlvICpmb2xpbyxcbi1cdFx0XHQgICAgICBpbnQgb2xkX2dlbiwgaW50IG5ld19nZW4pXG4rXHRcdFx0ICAgICAgaW50IG9sZF9nZW4sIGludCBuZXdfZ2VuLCBpbnQgdHlwZSlcbiB7XG4tXHRpbnQgdHlwZSA9IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTtcbiBcdGludCB6b25lID0gZm9saW9fem9uZW51bShmb2xpbyk7XG4gXHRpbnQgZGVsdGEgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4gXG5AQCAtMzUxMiwyMiArMzUxOCwyNCBAQCBzdGF0aWMgYm9vbCBzdWl0YWJsZV90b19zY2FuKGludCB0b3RhbCwgaW50IHlvdW5nKVxuIH1cbiBcbiBzdGF0aWMgdm9pZCB3YWxrX3VwZGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi1cdFx0c3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5ld19nZW4sIGJvb2wgZGlydHkpXG4rXHRcdHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBkaXJ0eSlcbiB7XG4tXHRpbnQgb2xkX2dlbjtcbitcdGludCBuZXdfZ2VuLCBvbGRfZ2VuLCBmaWxlO1xuIFxuIFx0aWYgKCFmb2xpbylcbiBcdFx0cmV0dXJuO1xuIFxuK1x0bmV3X2dlbiA9IGxydV9nZW5fZnJvbV9zZXEoUkVBRF9PTkNFKGxydXZlYy1cdTAwM2VscnVnZW4ubWF4X3NlcSkpO1xuK1xuIFx0aWYgKGRpcnR5IFx1MDAyNlx1MDAyNiAhZm9saW9fdGVzdF9kaXJ0eShmb2xpbykgXHUwMDI2XHUwMDI2XG4gXHQgICAgIShmb2xpb190ZXN0X2Fub24oZm9saW8pIFx1MDAyNlx1MDAyNiBmb2xpb190ZXN0X3N3YXBiYWNrZWQoZm9saW8pIFx1MDAyNlx1MDAyNlxuIFx0ICAgICAgIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkpXG4gXHRcdGZvbGlvX21hcmtfZGlydHkoZm9saW8pO1xuIFxuIFx0aWYgKHdhbGspIHtcbi1cdFx0b2xkX2dlbiA9IGZvbGlvX3VwZGF0ZV9nZW4oZm9saW8sIG5ld19nZW4sIFx1MDAyNnZtYS1cdTAwM2VmbGFncyk7XG4rXHRcdG9sZF9nZW4gPSBmb2xpb191cGRhdGVfZ2VuKGZvbGlvLCBuZXdfZ2VuLCBcdTAwMjZmaWxlLCBcdTAwMjZ2bWEtXHUwMDNlZmxhZ3MpO1xuIFx0XHRpZiAob2xkX2dlbiBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IG9sZF9nZW4gIT0gbmV3X2dlbilcbi1cdFx0XHR1cGRhdGVfYmF0Y2hfc2l6ZSh3YWxrLCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbik7XG4rXHRcdFx0dXBkYXRlX2JhdGNoX3NpemUod2FsaywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4sIGZpbGUpO1xuIFx0fSBlbHNlIGlmIChscnVfZ2VuX3NldF9yZWZzKGZvbGlvLCBcdTAwMjZ2bWEtXHUwMDNlZmxhZ3MpKSB7XG4gXHRcdG9sZF9nZW4gPSBmb2xpb19scnVfZ2VuKGZvbGlvKTtcbiBcdFx0aWYgKG9sZF9nZW4gXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBvbGRfZ2VuICE9IG5ld19nZW4pXG5AQCAtMzU0OSw4ICszNTU3LDYgQEAgc3RhdGljIGJvb2wgd2Fsa19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrID0gYXJncy1cdTAwM2Vwcml2YXRlO1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKHdhbGstXHUwMDNlbHJ1dmVjKTtcbiBcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQod2Fsay1cdTAwM2VscnV2ZWMpO1xuLVx0REVGSU5FX01BWF9TRVEod2Fsay1cdTAwM2VscnV2ZWMpO1xuLVx0aW50IGdlbiA9IGxydV9nZW5fZnJvbV9zZXEobWF4X3NlcSk7XG4gXHR1bnNpZ25lZCBpbnQgbnI7XG4gXHRwbWRfdCBwbWR2YWw7XG4gXG5AQCAtMzYwMSw3ICszNjA3LDcgQEAgc3RhdGljIGJvb2wgd2Fsa19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGlmIChsYXN0ICE9IGZvbGlvKSB7XG4tXHRcdFx0d2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy1cdTAwM2V2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuK1x0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtXHUwMDNldm1hLCB3YWxrLVx1MDAzZWxydXZlYywgbGFzdCwgZGlydHkpO1xuIFxuIFx0XHRcdGxhc3QgPSBmb2xpbztcbiBcdFx0XHRkaXJ0eSA9IGZhbHNlO1xuQEAgLTM2MTQsNyArMzYyMCw3IEBAIHN0YXRpYyBib29sIHdhbGtfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0XHR3YWxrLVx1MDAzZW1tX3N0YXRzW01NX0xFQUZfWU9VTkddICs9IG5yO1xuIFx0fVxuIFxuLVx0d2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy1cdTAwM2V2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuK1x0d2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy1cdTAwM2V2bWEsIHdhbGstXHUwMDNlbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XG4gXHRsYXN0ID0gTlVMTDtcbiBcbiBcdGlmIChpIFx1MDAzYyBQVFJTX1BFUl9QVEUgXHUwMDI2XHUwMDI2IGdldF9uZXh0X3ZtYShQTURfTUFTSywgUEFHRV9TSVpFLCBhcmdzLCBcdTAwMjZzdGFydCwgXHUwMDI2ZW5kKSlcbkBAIC0zNjM3LDggKzM2NDMsNiBAQCBzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYVxuIFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGFyZ3MtXHUwMDNlcHJpdmF0ZTtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyh3YWxrLVx1MDAzZWxydXZlYyk7XG4gXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KHdhbGstXHUwMDNlbHJ1dmVjKTtcbi1cdERFRklORV9NQVhfU0VRKHdhbGstXHUwMDNlbHJ1dmVjKTtcbi1cdGludCBnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpO1xuIFxuIFx0Vk1fV0FSTl9PTl9PTkNFKHB1ZF9sZWFmKCpwdWQpKTtcbiBcbkBAIC0zNjkyLDcgKzM2OTYsNyBAQCBzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYVxuIFx0XHRcdGdvdG8gbmV4dDtcbiBcbiBcdFx0aWYgKGxhc3QgIT0gZm9saW8pIHtcbi1cdFx0XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuK1x0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgd2Fsay1cdTAwM2VscnV2ZWMsIGxhc3QsIGRpcnR5KTtcbiBcbiBcdFx0XHRsYXN0ID0gZm9saW87XG4gXHRcdFx0ZGlydHkgPSBmYWxzZTtcbkBAIC0zNzA2LDcgKzM3MTAsNyBAQCBzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYVxuIFx0XHRpID0gaSBcdTAwM2UgTUlOX0xSVV9CQVRDSCA/IDAgOiBmaW5kX25leHRfYml0KGJpdG1hcCwgTUlOX0xSVV9CQVRDSCwgaSkgKyAxO1xuIFx0fSB3aGlsZSAoaSBcdTAwM2M9IE1JTl9MUlVfQkFUQ0gpO1xuIFxuLVx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcbitcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgd2Fsay1cdTAwM2VscnV2ZWMsIGxhc3QsIGRpcnR5KTtcbiBcbiBcdGxhenlfbW11X21vZGVfZGlzYWJsZSgpO1xuIFx0c3Bpbl91bmxvY2socHRsKTtcbkBAIC00MjcwLDggKzQyNzQsNiBAQCBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXG4gXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gZm9saW9fcGdkYXQoZm9saW8pO1xuIFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjO1xuIFx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlO1xuLVx0dW5zaWduZWQgbG9uZyBtYXhfc2VxO1xuLVx0aW50IGdlbjtcbiBcbiBcdGxvY2tkZXBfYXNzZXJ0X2hlbGQocHZtdy1cdTAwM2VwdGwpO1xuIFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3RfbHJ1KGZvbGlvKSwgZm9saW8pO1xuQEAgLTQzMDgsOCArNDMxMCw2IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcbiBcbiBcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhmb2xpbyk7XG4gXHRscnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhtZW1jZywgcGdkYXQpO1xuLVx0bWF4X3NlcSA9IFJFQURfT05DRSgobHJ1dmVjKS1cdTAwM2VscnVnZW4ubWF4X3NlcSk7XG4tXHRnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpO1xuIFx0bW1fc3RhdGUgPSBnZXRfbW1fc3RhdGUobHJ1dmVjKTtcbiBcbiBcdGxhenlfbW11X21vZGVfZW5hYmxlKCk7XG5AQCAtNDM0MSw3ICs0MzQxLDcgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRpZiAobGFzdCAhPSBmb2xpbykge1xuLVx0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XG4rXHRcdFx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBscnV2ZWMsIGxhc3QsIGRpcnR5KTtcbiBcbiBcdFx0XHRsYXN0ID0gZm9saW87XG4gXHRcdFx0ZGlydHkgPSBmYWxzZTtcbkBAIC00MzUzLDEzICs0MzUzLDE0IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcbiBcdFx0eW91bmcgKz0gbnI7XG4gXHR9XG4gXG4tXHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuK1x0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBscnV2ZWMsIGxhc3QsIGRpcnR5KTtcbiBcbiBcdGxhenlfbW11X21vZGVfZGlzYWJsZSgpO1xuIFxuIFx0LyogZmVlZGJhY2sgZnJvbSBybWFwIHdhbGtlcnMgdG8gcGFnZSB0YWJsZSB3YWxrZXJzICovXG4gXHRpZiAobW1fc3RhdGUgXHUwMDI2XHUwMDI2IHN1aXRhYmxlX3RvX3NjYW4oaSwgeW91bmcpKVxuLVx0XHR1cGRhdGVfYmxvb21fZmlsdGVyKG1tX3N0YXRlLCBtYXhfc2VxLCBwdm13LVx1MDAzZXBtZCk7XG4rXHRcdHVwZGF0ZV9ibG9vbV9maWx0ZXIobW1fc3RhdGUsIFJFQURfT05DRShscnV2ZWMtXHUwMDNlbHJ1Z2VuLm1heF9zZXEpLFxuK1x0XHRcdFx0ICAgIHB2bXctXHUwMDNlcG1kKTtcbiBcbiBcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbiBcbkBAIC00NzE2LDcgKzQ3MTcsNyBAQCBzdGF0aWMgYm9vbCBpc29sYXRlX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHNjYVxuIFxuIFx0Lyogc2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTICovXG4gXHRpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykpXG4tXHRcdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgMCk7XG4rXHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XG4gXG4gXHRzdWNjZXNzID0gbHJ1X2dlbl9kZWxfZm9saW8obHJ1dmVjLCBmb2xpbywgdHJ1ZSk7XG4gXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIXN1Y2Nlc3MsIGZvbGlvKTtcbkBAIC00ODA5LDkgKzQ4MTAsOSBAQCBzdGF0aWMgaW50IGdldF90aWVyX2lkeChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlKVxuIFx0ICogVGhpcyB2YWx1ZSBpcyBjaG9zZW4gYmVjYXVzZSBhbnkgb3RoZXIgdGllciB3b3VsZCBoYXZlIGF0IGxlYXN0IHR3aWNlXG4gXHQgKiBhcyBtYW55IHJlZmF1bHRzIGFzIHRoZSBmaXJzdCB0aWVyLlxuIFx0ICovXG4tXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgdHlwZSwgMCwgMiwgXHUwMDI2c3ApO1xuLVx0Zm9yICh0aWVyID0gMTsgdGllciBcdTAwM2MgTUFYX05SX1RJRVJTOyB0aWVyKyspIHtcbi1cdFx0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIHRpZXIsIDMsIFx1MDAyNnB2KTtcbitcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCBMUlVfVElFUl9NSU4sIExSVV9USUVSX01JTiwgMiwgXHUwMDI2c3ApO1xuK1x0Zm9yICh0aWVyID0gTFJVX1RJRVJfTUlOICsgMTsgdGllciBcdTAwM2M9IExSVV9USUVSX01BWDsgdGllcisrKSB7XG4rXHRcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCB0aWVyLCB0aWVyLCAzLCBcdTAwMjZwdik7XG4gXHRcdGlmICghcG9zaXRpdmVfY3RybF9lcnIoXHUwMDI2c3AsIFx1MDAyNnB2KSlcbiBcdFx0XHRicmVhaztcbiBcdH1cbkBAIC00ODMyLDggKzQ4MzMsMTAgQEAgc3RhdGljIGludCBnZXRfdHlwZV90b19zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3MpXG4gXHQgKiBDb21wYXJlIHRoZSBzdW0gb2YgYWxsIHRpZXJzIG9mIGFub24gd2l0aCB0aGF0IG9mIGZpbGUgdG8gZGV0ZXJtaW5lXG4gXHQgKiB3aGljaCB0eXBlIHRvIHNjYW4uXG4gXHQgKi9cbi1cdHJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0FOT04sIE1BWF9OUl9USUVSUywgc3dhcHBpbmVzcywgXHUwMDI2c3ApO1xuLVx0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fRklMRSwgTUFYX05SX1RJRVJTLCBNQVhfU1dBUFBJTkVTUyAtIHN3YXBwaW5lc3MsIFx1MDAyNnB2KTtcbitcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0FOT04sIExSVV9USUVSX01JTiwgTFJVX1RJRVJfTUFYLFxuK1x0XHQgICAgICBzd2FwcGluZXNzLCBcdTAwMjZzcCk7XG4rXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9GSUxFLCBMUlVfVElFUl9NSU4sIExSVV9USUVSX01BWCxcbitcdFx0ICAgICAgTUFYX1NXQVBQSU5FU1MgLSBzd2FwcGluZXNzLCBcdTAwMjZwdik7XG4gXG4gXHRyZXR1cm4gcG9zaXRpdmVfY3RybF9lcnIoXHUwMDI2c3AsIFx1MDAyNnB2KTtcbiB9XG5AQCAtNDkzMiw4ICs0OTM1LDEwIEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHR9XG4gXG4gXHRcdC8qIGRvbid0IGFkZCByZWplY3RlZCBmb2xpb3MgdG8gdGhlIG9sZGVzdCBnZW5lcmF0aW9uICovXG4tXHRcdGlmIChscnVfZ2VuX2ZvbGlvX3NlcShscnV2ZWMsIGZvbGlvLCBmYWxzZSkgPT0gbWluX3NlcVt0eXBlXSlcbi1cdFx0XHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX0ZMQUdTLCBCSVQoUEdfYWN0aXZlKSk7XG4rXHRcdGlmIChscnVfZ2VuX2ZvbGlvX3NlcShscnV2ZWMsIGZvbGlvLCBmYWxzZSkgPT0gbWluX3NlcVt0eXBlXSkge1xuK1x0XHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XG4rXHRcdFx0Zm9saW9fc2V0X2FjdGl2ZShmb2xpbyk7XG4rXHRcdH1cbiBcdH1cbiBcbiBcdG1vdmVfZm9saW9zX3RvX2xydShcdTAwMjZsaXN0KTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE5OjA1OjAxLjg4Nzc5ODcxOFoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzYwMTM2MzE2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBBbmFseXNpczogTWVtb3J5IENvbnRyb2wgYW5kIExSVSBHZW5lcmF0aW9uIFJlZmFjdG9yKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIHByaW1hcmlseSBmb2N1c2VzIG9uIHJlZmFjdG9yaW5nIHRoZSBtZW1vcnkgY29udHJvbCBhbmQgTFJVIGdlbmVyYXRpb24gY29kZSB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbC4gSXQgc2VlbXMgbGlrZSBhIGNvcmUgaW50ZXJuYWwgY2hhbmdlLCBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIGBscnVfem9uZV9zaXplYCBhbmQgaXRzIGFzc29jaWF0ZWQgZm9saW8gZmxhZyBtYW5pcHVsYXRpb24uXG5cbk15IGltbWVkaWF0ZSBjb25jZXJucyBhcmUgYWx3YXlzIGNlbnRlcmVkIG9uIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXM6IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBpbmZvcm1hdGlvbiBsZWFrcywgYW5kIGFueSBjaGFuZ2VzIHRoYXQgbWlnaHQgaW50cm9kdWNlIHVuZXhwZWN0ZWQgYmVoYXZpb3IgaW4gdXNlci1zcGFjZSBpbnRlcmFjdGlvbnMuIExldCdzIGRpZyBpbi4gSSBzZWUgdGhhdCBgbHJ1X3pvbmVfc2l6ZWAgaXMgY2hhbmdpbmcgZnJvbSBhIHNpbXBsZSBhcnJheSBvZiBgdW5zaWduZWQgbG9uZ2AgdG8gYW4gYXJyYXkgb2YgYGF0b21pY19sb25nX3RgLiBUaGlzIGlzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCByZWZhY3RvcmluZyBhbmQsIGJ5IGl0c2VsZiwgc2hvdWxkbid0IHBvc2UgYW55IGltbWVkaWF0ZSByaXNrcy5cblxuSSdtIHNlZWluZyBoZWxwZXIgZnVuY3Rpb25zIGludHJvZHVjZWQgZm9yIHNldHRpbmcgYW5kIGdldHRpbmcgTFJVIGdlbmVyYXRpb24gYW5kIHJlZmVyZW5jZXMgZnJvbSBmb2xpbyBmbGFncywgcmVwbGFjaW5nIGRpcmVjdCBiaXQgbWFuaXB1bGF0aW9ucy4gR29vZC4gVGhpcyBvZnRlbiBsZWFkcyB0byBtb3JlIHJvYnVzdCBhbmQgbGVzcyBlcnJvci1wcm9uZSBjb2RlLiBJJ20gYWxzbyBub3RpY2luZyB0aGUgbW9kaWZpY2F0aW9ucyB0byBmdW5jdGlvbnMgbGlrZSBgZm9saW9fdXBkYXRlX2dlbmAsIGBmb2xpb19pbmNfZ2VuYCwgYW5kIG90aGVycy4gVGhlIGNoYW5nZXMgdG8gYHJlYWRfY3RybF9wb3NgIGxvb2sgcmVhc29uYWJsZS4gSSBhbSBnb2luZyB0byBzZWUgaWYgYW55IHVzZXItc3BhY2UgY2hhbmdlcyBhcmUgYmVpbmcgbWFkZS5cblxuSSd2ZSBjYXJlZnVsbHkgZXhhbWluZWQgdGhlIGNvZGUgZm9yIGFueSBuZXcgc3RydWN0dXJlcyBiZWluZyBzZW50IHRvIHVzZXIgc3BhY2UsIHRoZSBwcmVzZW5jZSBvZiBjb25kaXRpb25hbCBsb2dpYyB0aGF0IG1pZ2h0IGRlcGVuZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgdGhlIGFsbG9jYXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMsIGFuZCBhbnkgYm91bmRzIGNoZWNrcyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gSSdtIG5vdCBzZWVpbmcgYW55dGhpbmcgdGhhdCByYWlzZXMgaW1tZWRpYXRlIHJlZCBmbGFncy4gTm8gZGlyZWN0IHVzZXItc3BhY2UgY29waWVzLCBubyBjb21wbGV4IGFsbG9jYXRpb25zLCBhbmQgbm8gb2J2aW91cyBtZW1vcnkgc2FmZXR5IGlzc3Vlcy5cblxuSG93ZXZlciwgSSBkaWQgY2F0Y2ggdGhhdCB0aGUgYG1lbV9jZ3JvdXBfZ2V0X3pvbmVfbHJ1X3NpemVgIG5vdyByZXR1cm5zIGEgYGxvbmcgdmFsYCBhbmQgaW5jbHVkZXMgYSBgV0FSTl9PTl9PTkNFYCBjaGVjay4gVGhpcyBpcyBzdGFuZGFyZCBnb29kIHByYWN0aWNlLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIHRoZSBvbmx5IHVzZSBvZiB0aGlzIGFuZCB0aGF0IGl0J3MgYmVpbmcgcHJvcGVybHkgaGFuZGxlZC4gVGhlIHVzZSBvZiBgYXRvbWljX2xvbmdfcmVhZGAgYW5kIHRoZSBgbHJ1X2dlbl8qX2ZsYWdzYCBoZWxwZXIgZnVuY3Rpb25zIGxvb2sgbGlrZSBzdGFuZGFyZCBhbmQgc2FmZSBvcGVyYXRpb25zLlxuXG5JJ20gbm93IGZvY3VzaW5nIG9uIHBvdGVudGlhbCBpbmZvcm1hdGlvbiBsZWFrcyBvciB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2UuIFRoZSBwYXRjaCBhcHBlYXJzIHRvIGJlIGVudGlyZWx5IGludGVybmFsIHRvIG1lbW9yeSBtYW5hZ2VtZW50IC0gTFJVIGdlbmVyYXRpb24sIGZvbGlvIGZsYWdzLCBhbmQgbWVtY2cgTFJVIHNpemUgdHJhY2tpbmcuIE5vIHVzZXItc3BhY2UgaW50ZXJhY3Rpb24uIEdpdmVuIHRoaXMgY29udGV4dCwgS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgZm9yIGNoZWNraW5nIGNvbW1vbiBpc3N1ZXMgbGlrZSBvdXQtb2YtYm91bmRzIGFjY2VzcyBvciB1c2UtYWZ0ZXItZnJlZSwgYW5kIEkgZG9uJ3Qgc2VlIGFueSBjaGFuZ2VzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiB0byBkZXRlY3QgdW5pbml0aWFsaXplZCBtZW1vcnkuXG5cbkxldCdzIGRvIGEgZGVlcGVyIGRpdmUgaW50byB0aGUgYGZvbGlvX3VwZGF0ZV9nZW5gIGNoYW5nZS4gU3BlY2lmaWNhbGx5LCB0aGUgaW50cm9kdWN0aW9uIG9mIHRoZSBgaXNfZmlsZWAgcG9pbnRlcjpcbmBgYGNcbi1zdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGdlbiwgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcbitzdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5ld19nZW4sIGludCAqaXNfZmlsZSxcbitcdFx0XHQgICAgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcbmBgYFxuSSBhbSBub3cgbWFraW5nIHN1cmUgYGlzX2ZpbGVgIGlzIGluaXRpYWxpemVkIGFuZCB1c2VkIGNvcnJlY3RseS4gTXkgc2NhbiBmb3IgaXRzIHVzZSBpbiBgd2Fsa191cGRhdGVfZm9saW9gIGlzIHdoYXQgSSdtIGxvb2tpbmcgYXQuXG5cbmBgYGNcbi1zdGF0aWMgdm9pZCB3YWxrX3VwZGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi1cdFx0c3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5ld19nZW4sIGJvb2wgZGlydHkpXG4rc3RhdGljIHZvaWQgd2Fsa191cGRhdGVfZm9saW8oc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4rXHRcdHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBkaXJ0eSlcbiB7XG4tXHRpbnQgb2xkX2dlbjtcbitcdGludCBuZXdfZ2VuLCBvbGRfZ2VuLCBmaWxlO1xuLi4uXG4gXHRpZiAod2Fsaykge1xuLVx0XHRvbGRfZ2VuID0gZm9saW9fdXBkYXRlX2dlbihmb2xpbywgbmV3X2dlbiwgXHUwMDI2dm1hLVx1MDAzZWZsYWdzKTtcbitcdFx0b2xkX2dlbiA9IGZvbGlvX3VwZGF0ZV9nZW4oZm9saW8sIG5ld19nZW4sIFx1MDAyNmZpbGUsIFx1MDAyNnZtYS1cdTAwM2VmbGFncyk7XG4gXHRcdGlmIChvbGRfZ2VuIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgb2xkX2dlbiAhPSBuZXdfZ2VuKVxuLVx0XHRcdHVwZGF0ZV9iYXRjaF9zaXplKHdhbGssIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTtcbitcdFx0XHR1cGRhdGVfYmF0Y2hfc2l6ZSh3YWxrLCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbiwgZmlsZSk7XG5gYGBcblxuVGhlIG5ldyBgZmlsZWAgdmFyaWFibGUgaXMgaW50cm9kdWNlZCBhbmQgcGFzc2VkIGFzIHRoZSBgaXNfZmlsZWAgcGFyYW1ldGVyLCBzbyBJIG5lZWQgdG8ga25vdyB3aGVyZSBpdCdzIGJlaW5nIHNldC5cbklmIGBmb2xpb191cGRhdGVfZ2VuYCByZXR1cm5zIGBcdTAwM2MgMGAsIGBvbGRfZ2VuIFx1MDAzZT0gMGAgaXMgZmFsc2UsIGFuZCBgZmlsZWAgaXMgbmV2ZXIgdXNlZCBzbyBpdCBzaG91bGQgbm90IGJlIGEgcHJvYmxlbS4gSWYgYGZvbGlvX3VwZGF0ZV9nZW5gXG5cbiIsIklucHV0VG9rZW5zIjoxMTQwNSwiT3V0cHV0VG9rZW5zIjoxOTUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTg1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTk6MDU6MTkuNDg5MTY0ODc5WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGludGVybmFsIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUsIHNwZWNpZmljYWxseSBMUlUgZ2VuZXJhdGlvbiBhbmQgZm9saW8gZmxhZ3MgbWFuaXB1bGF0aW9uLCBhbmQgY2hhbmdlcyBgbHJ1X3pvbmVfc2l6ZWAgdG8gdXNlIGBhdG9taWNfbG9uZ190YC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyB0aGF0IGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWxsb2NhdGUgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgb3IgbW9kaWZ5IGJvdW5kcyBjaGVja3MgaW4gYSB3YXkgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBuZXdseSBpbnRyb2R1Y2VkIG91dC1wYXJhbWV0ZXIgYGlzX2ZpbGVgIGluIGBmb2xpb191cGRhdGVfZ2VuYCBpcyBhbHdheXMgaW5pdGlhbGl6ZWQgYmVmb3JlIHJldHVybmluZy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyByYWNlIGNvbmRpdGlvbnMsIHVzZS1hZnRlci1mcmVlLCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBvdGhlciBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBpbnRlcm5hbCBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCBzcGVjaWZpY2FsbHkgTFJVIGdlbmVyYXRpb24gYW5kIGZvbGlvIGZsYWdzIG1hbmlwdWxhdGlvbiwgYW5kIGNoYW5nZXMgYGxydV96b25lX3NpemVgIHRvIHVzZSBgYXRvbWljX2xvbmdfdGAuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgdGhhdCBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFsbG9jYXRlIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIG9yIG1vZGlmeSBib3VuZHMgY2hlY2tzIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgbmV3bHkgaW50cm9kdWNlZCBvdXQtcGFyYW1ldGVyIGBpc19maWxlYCBpbiBgZm9saW9fdXBkYXRlX2dlbmAgaXMgYWx3YXlzIGluaXRpYWxpemVkIGJlZm9yZSByZXR1cm5pbmcuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgcmFjZSBjb25kaXRpb25zLCB1c2UtYWZ0ZXItZnJlZSwgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcykgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgb3RoZXIgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow9bxpc[1] Phase: Succeeded StartedAt: 2026-08-25 19:05:30 +0000 UTC FinishedAt: 2026-08-25 19:05:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9bxpc[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-25 19:05:30 +0000 UTC FinishedAt: 2026-08-25 19:05:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9bxpc[2] Phase: Succeeded StartedAt: 2026-08-25 19:05:30 +0000 UTC FinishedAt: 2026-08-25 22:51:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9bxpc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"169393fff5d1ec2690934067eeb95544ff5ebdd7","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["folio_migrate_flags","lru_gen_look_around"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"169393fff5d1ec2690934067eeb95544ff5ebdd7","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"d64100e7-beda-47c2-a8ac-9d7b44c6d31f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-25 19:05:30 +0000 UTC FinishedAt: 2026-08-25 22:51:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"169393fff5d1ec2690934067eeb95544ff5ebdd7","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["folio_migrate_flags","lru_gen_look_around"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"169393fff5d1ec2690934067eeb95544ff5ebdd7","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"d64100e7-beda-47c2-a8ac-9d7b44c6d31f","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-workflow9bxpc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"169393fff5d1ec2690934067eeb95544ff5ebdd7","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["folio_migrate_flags","lru_gen_look_around"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"169393fff5d1ec2690934067eeb95544ff5ebdd7","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"d64100e7-beda-47c2-a8ac-9d7b44c6d31f","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-08-25 19:05:30 +0000 UTC FinishedAt: 2026-08-25 19:05:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9bxpc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"169393fff5d1ec2690934067eeb95544ff5ebdd7","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["folio_migrate_flags","lru_gen_look_around"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"169393fff5d1ec2690934067eeb95544ff5ebdd7","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"d64100e7-beda-47c2-a8ac-9d7b44c6d31f","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-08-25 19:05:30 +0000 UTC FinishedAt: 2026-08-25 19:05:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"169393fff5d1ec2690934067eeb95544ff5ebdd7","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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-workflow9bxpc/series-workflow9bxpc-convert-artifact-2509195477/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9bxpc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"169393fff5d1ec2690934067eeb95544ff5ebdd7","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["folio_migrate_flags","lru_gen_look_around"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"169393fff5d1ec2690934067eeb95544ff5ebdd7","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"d64100e7-beda-47c2-a8ac-9d7b44c6d31f","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-08-25 19:05:40 +0000 UTC FinishedAt: 2026-08-25 19:21:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9bxpc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"169393fff5d1ec2690934067eeb95544ff5ebdd7","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["folio_migrate_flags","lru_gen_look_around"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"169393fff5d1ec2690934067eeb95544ff5ebdd7","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"d64100e7-beda-47c2-a8ac-9d7b44c6d31f","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-08-25 19:05:40 +0000 UTC FinishedAt: 2026-08-25 19:21:30 +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:*7118a3af-cf8d-4e1d-b38c-c3d97d9bb011,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-workflow9bxpc/series-workflow9bxpc-convert-artifact-2509195477/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": "6b7e31b6-de68-48e5-b775-81f980fc9121", "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-workflow9bxpc/series-workflow9bxpc-build-action-1602941755/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9bxpc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"169393fff5d1ec2690934067eeb95544ff5ebdd7","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["folio_migrate_flags","lru_gen_look_around"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"169393fff5d1ec2690934067eeb95544ff5ebdd7","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"d64100e7-beda-47c2-a8ac-9d7b44c6d31f","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-08-25 19:05:40 +0000 UTC FinishedAt: 2026-08-25 19:21:20 +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:*7118a3af-cf8d-4e1d-b38c-c3d97d9bb011,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-workflow9bxpc/series-workflow9bxpc-convert-artifact-2509195477/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": "6b7e31b6-de68-48e5-b775-81f980fc9121", "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-workflow9bxpc/series-workflow9bxpc-build-action-1602941755/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9bxpc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"169393fff5d1ec2690934067eeb95544ff5ebdd7","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["folio_migrate_flags","lru_gen_look_around"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"169393fff5d1ec2690934067eeb95544ff5ebdd7","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"d64100e7-beda-47c2-a8ac-9d7b44c6d31f","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-08-25 19:21:30 +0000 UTC FinishedAt: 2026-08-25 19:21:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9bxpc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"169393fff5d1ec2690934067eeb95544ff5ebdd7","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["folio_migrate_flags","lru_gen_look_around"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"169393fff5d1ec2690934067eeb95544ff5ebdd7","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"d64100e7-beda-47c2-a8ac-9d7b44c6d31f","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-08-25 19:21:30 +0000 UTC FinishedAt: 2026-08-25 19:21:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9bxpc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"169393fff5d1ec2690934067eeb95544ff5ebdd7","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["folio_migrate_flags","lru_gen_look_around"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"169393fff5d1ec2690934067eeb95544ff5ebdd7","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"d64100e7-beda-47c2-a8ac-9d7b44c6d31f","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-08-25 19:21:30 +0000 UTC FinishedAt: 2026-08-25 19:21:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9bxpc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"169393fff5d1ec2690934067eeb95544ff5ebdd7","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["folio_migrate_flags","lru_gen_look_around"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"169393fff5d1ec2690934067eeb95544ff5ebdd7","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"d64100e7-beda-47c2-a8ac-9d7b44c6d31f","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-08-25 19:21:30 +0000 UTC FinishedAt: 2026-08-25 19:21:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"169393fff5d1ec2690934067eeb95544ff5ebdd7","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"d64100e7-beda-47c2-a8ac-9d7b44c6d31f","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-workflow9bxpc/series-workflow9bxpc-convert-artifact-2591333040/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9bxpc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"169393fff5d1ec2690934067eeb95544ff5ebdd7","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["folio_migrate_flags","lru_gen_look_around"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"169393fff5d1ec2690934067eeb95544ff5ebdd7","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"d64100e7-beda-47c2-a8ac-9d7b44c6d31f","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-08-25 19:21:40 +0000 UTC FinishedAt: 2026-08-25 19:23:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9bxpc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"169393fff5d1ec2690934067eeb95544ff5ebdd7","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["folio_migrate_flags","lru_gen_look_around"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"169393fff5d1ec2690934067eeb95544ff5ebdd7","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"d64100e7-beda-47c2-a8ac-9d7b44c6d31f","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-08-25 19:21:40 +0000 UTC FinishedAt: 2026-08-25 19:23:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6b7e31b6-de68-48e5-b775-81f980fc9121,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-workflow9bxpc/series-workflow9bxpc-build-action-1602941755/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-workflow9bxpc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"169393fff5d1ec2690934067eeb95544ff5ebdd7","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["folio_migrate_flags","lru_gen_look_around"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"169393fff5d1ec2690934067eeb95544ff5ebdd7","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"d64100e7-beda-47c2-a8ac-9d7b44c6d31f","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-08-25 19:23:37 +0000 UTC FinishedAt: 2026-08-25 19:23:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9bxpc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"169393fff5d1ec2690934067eeb95544ff5ebdd7","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["folio_migrate_flags","lru_gen_look_around"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"169393fff5d1ec2690934067eeb95544ff5ebdd7","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"d64100e7-beda-47c2-a8ac-9d7b44c6d31f","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-08-25 19:23:37 +0000 UTC FinishedAt: 2026-08-25 19:23:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9bxpc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"169393fff5d1ec2690934067eeb95544ff5ebdd7","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["folio_migrate_flags","lru_gen_look_around"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"169393fff5d1ec2690934067eeb95544ff5ebdd7","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"d64100e7-beda-47c2-a8ac-9d7b44c6d31f","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-08-25 19:23:37 +0000 UTC FinishedAt: 2026-08-25 19:44:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9bxpc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"169393fff5d1ec2690934067eeb95544ff5ebdd7","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["folio_migrate_flags","lru_gen_look_around"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"169393fff5d1ec2690934067eeb95544ff5ebdd7","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"d64100e7-beda-47c2-a8ac-9d7b44c6d31f","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-08-25 19:23:37 +0000 UTC FinishedAt: 2026-08-25 19:44:34 +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:*7118a3af-cf8d-4e1d-b38c-c3d97d9bb011,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-workflow9bxpc/series-workflow9bxpc-convert-artifact-2591333040/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": "0ddca876-4752-4033-8da2-a9cfca64c78c", "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-workflow9bxpc/series-workflow9bxpc-build-action-3856299180/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9bxpc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"169393fff5d1ec2690934067eeb95544ff5ebdd7","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["folio_migrate_flags","lru_gen_look_around"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"169393fff5d1ec2690934067eeb95544ff5ebdd7","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"d64100e7-beda-47c2-a8ac-9d7b44c6d31f","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: Succeeded StartedAt: 2026-08-25 19:23:37 +0000 UTC FinishedAt: 2026-08-25 19:44:16 +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:*7118a3af-cf8d-4e1d-b38c-c3d97d9bb011,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-workflow9bxpc/series-workflow9bxpc-convert-artifact-2591333040/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": "0ddca876-4752-4033-8da2-a9cfca64c78c", "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-workflow9bxpc/series-workflow9bxpc-build-action-3856299180/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9bxpc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"169393fff5d1ec2690934067eeb95544ff5ebdd7","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["folio_migrate_flags","lru_gen_look_around"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"169393fff5d1ec2690934067eeb95544ff5ebdd7","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"d64100e7-beda-47c2-a8ac-9d7b44c6d31f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-25 19:44:34 +0000 UTC FinishedAt: 2026-08-25 19:44:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9bxpc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"169393fff5d1ec2690934067eeb95544ff5ebdd7","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["folio_migrate_flags","lru_gen_look_around"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"169393fff5d1ec2690934067eeb95544ff5ebdd7","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"d64100e7-beda-47c2-a8ac-9d7b44c6d31f","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: Skipped StartedAt: 2026-08-25 19:44:35 +0000 UTC FinishedAt: 2026-08-25 19:44:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9bxpc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"169393fff5d1ec2690934067eeb95544ff5ebdd7","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["folio_migrate_flags","lru_gen_look_around"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"169393fff5d1ec2690934067eeb95544ff5ebdd7","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"d64100e7-beda-47c2-a8ac-9d7b44c6d31f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-25 19:44:35 +0000 UTC FinishedAt: 2026-08-25 19:46:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9bxpc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"169393fff5d1ec2690934067eeb95544ff5ebdd7","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["folio_migrate_flags","lru_gen_look_around"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"169393fff5d1ec2690934067eeb95544ff5ebdd7","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"d64100e7-beda-47c2-a8ac-9d7b44c6d31f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-25 19:44:37 +0000 UTC FinishedAt: 2026-08-25 19:46:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0ddca876-4752-4033-8da2-a9cfca64c78c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9bxpc/series-workflow9bxpc-build-action-3856299180/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-workflow9bxpc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"169393fff5d1ec2690934067eeb95544ff5ebdd7","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["folio_migrate_flags","lru_gen_look_around"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"169393fff5d1ec2690934067eeb95544ff5ebdd7","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"d64100e7-beda-47c2-a8ac-9d7b44c6d31f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-25 19:46:16 +0000 UTC FinishedAt: 2026-08-25 22:51:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9bxpc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"169393fff5d1ec2690934067eeb95544ff5ebdd7","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["folio_migrate_flags","lru_gen_look_around"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"169393fff5d1ec2690934067eeb95544ff5ebdd7","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"d64100e7-beda-47c2-a8ac-9d7b44c6d31f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-25 19:46:16 +0000 UTC FinishedAt: 2026-08-25 22:51:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_migrate_flags","lru_gen_look_around"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*6b7e31b6-de68-48e5-b775-81f980fc9121,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0ddca876-4752-4033-8da2-a9cfca64c78c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9bxpc/series-workflow9bxpc-build-action-1602941755/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9bxpc/series-workflow9bxpc-build-action-3856299180/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow9bxpc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"169393fff5d1ec2690934067eeb95544ff5ebdd7","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["folio_migrate_flags","lru_gen_look_around"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"169393fff5d1ec2690934067eeb95544ff5ebdd7","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"d64100e7-beda-47c2-a8ac-9d7b44c6d31f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-25 19:46:16 +0000 UTC FinishedAt: 2026-08-25 19:46:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9bxpc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"169393fff5d1ec2690934067eeb95544ff5ebdd7","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["folio_migrate_flags","lru_gen_look_around"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"169393fff5d1ec2690934067eeb95544ff5ebdd7","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"d64100e7-beda-47c2-a8ac-9d7b44c6d31f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-25 19:46:16 +0000 UTC FinishedAt: 2026-08-25 19:46:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_migrate_flags","lru_gen_look_around"],"skip_cover_check":true},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-workflow9bxpc/series-workflow9bxpc-convert-artifact-3315791657/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9bxpc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"169393fff5d1ec2690934067eeb95544ff5ebdd7","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["folio_migrate_flags","lru_gen_look_around"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"169393fff5d1ec2690934067eeb95544ff5ebdd7","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"d64100e7-beda-47c2-a8ac-9d7b44c6d31f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-25 19:46:16 +0000 UTC FinishedAt: 2026-08-25 19:46:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9bxpc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"169393fff5d1ec2690934067eeb95544ff5ebdd7","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["folio_migrate_flags","lru_gen_look_around"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"169393fff5d1ec2690934067eeb95544ff5ebdd7","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"d64100e7-beda-47c2-a8ac-9d7b44c6d31f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-25 19:46:16 +0000 UTC FinishedAt: 2026-08-25 19:46:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9bxpc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"169393fff5d1ec2690934067eeb95544ff5ebdd7","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["folio_migrate_flags","lru_gen_look_around"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"169393fff5d1ec2690934067eeb95544ff5ebdd7","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"d64100e7-beda-47c2-a8ac-9d7b44c6d31f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-25 19:46:16 +0000 UTC FinishedAt: 2026-08-25 19:46:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9bxpc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"169393fff5d1ec2690934067eeb95544ff5ebdd7","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["folio_migrate_flags","lru_gen_look_around"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"169393fff5d1ec2690934067eeb95544ff5ebdd7","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"d64100e7-beda-47c2-a8ac-9d7b44c6d31f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-25 19:46:27 +0000 UTC FinishedAt: 2026-08-25 22:51:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9bxpc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"169393fff5d1ec2690934067eeb95544ff5ebdd7","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["folio_migrate_flags","lru_gen_look_around"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"169393fff5d1ec2690934067eeb95544ff5ebdd7","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"d64100e7-beda-47c2-a8ac-9d7b44c6d31f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-25 19:46:27 +0000 UTC FinishedAt: 2026-08-25 22:51:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6b7e31b6-de68-48e5-b775-81f980fc9121,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0ddca876-4752-4033-8da2-a9cfca64c78c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9bxpc/series-workflow9bxpc-build-action-1602941755/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9bxpc/series-workflow9bxpc-build-action-3856299180/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9bxpc/series-workflow9bxpc-convert-artifact-3315791657/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}