Name: series-workflows9qwx Phase: Succeeded StartedAt: 2026-07-19 19:06:04 +0000 UTC FinishedAt: 2026-07-20 00:02:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflows9qwx[0] Phase: Succeeded StartedAt: 2026-07-19 19:06:04 +0000 UTC FinishedAt: 2026-07-19 19:42:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflows9qwx[0].run-triage Phase: Succeeded StartedAt: 2026-07-19 19:06:04 +0000 UTC FinishedAt: 2026-07-19 19:42:06 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "890f8c4e827c918dac668a12eaf63180ba8a9e6d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ASYNC_MM_TEARDOWN" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "890f8c4e827c918dac668a12eaf63180ba8a9e6d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ASYNC_MM_TEARDOWN" ], "series_id": "a6b57b51-6ef1-47de-84cd-8ec884cc2bd9" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "mm_reaper", "async_mm_teardown_queue", "async_mm_teardown_reserve", "async_mm_teardown_eligible" ], "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+CgkJCTx0ZD4yMDI2LzA3LzE5IDE5OjQxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FTWU5DX01NX1RFQVJET1dOJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bW1fcmVhcGVyJiMzNDssCiAgICAmIzM0O2FzeW5jX21tX3RlYXJkb3duX3F1ZXVlJiMzNDssCiAgICAmIzM0O2FzeW5jX21tX3RlYXJkb3duX3Jlc2VydmUmIzM0OywKICAgICYjMzQ7YXN5bmNfbW1fdGVhcmRvd25fZWxpZ2libGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmZWF0dXJlIHRvIGFzeW5jaHJvbm91c2x5IHRlYXIgZG93biB0aGUgYWRkcmVzcyBzcGFjZSBvZiBleGl0aW5nIHByb2Nlc3NlcyB2aWEgYSBkZWRpY2F0ZWQga2VybmVsIHRocmVhZCAobW1fcmVhcGVyKS4gVGhpcyBtb2RpZmllcyBjb3JlIHByb2Nlc3MgZXhpdCBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMsIHdoaWNoIGlzIGhpZ2hseSBmdW5jdGlvbmFsIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE5IDE5OjQxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMTFlNWY1MTk3MjQ3MTI3N2MzMmI0MGZmOTRhYWJiZDg2YTA0NjFlYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gSnVsIDE5IDE5OjQxOjM4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL3ZtLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL3ZtLnJzdFxuaW5kZXggNWIzMThkMTdhYTRiNDQuLmNjZGE2Yzc1ZmUxZmI3IDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwvdm0ucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC92bS5yc3RcbkBAIC0yMiw2ICYjNDM7MjIsOSBAQCB0aGUgd3JpdGVvdXQgb2YgZGlydHkgZGF0YSB0byBkaXNrLlxuIEN1cnJlbnRseSwgdGhlc2UgZmlsZXMgYXJlIGluIC9wcm9jL3N5cy92bTpcbiBcbiAtIGFkbWluX3Jlc2VydmVfa2J5dGVzXG4mIzQzOy0gYXN5bmNfbW1fdGVhcmRvd25cbiYjNDM7LSBhc3luY19tbV90ZWFyZG93bl9tYXhfcGVuZGluZ19wYWdlc1xuJiM0MzstIGFzeW5jX21tX3RlYXJkb3duX3RocmVzaF9wYWdlc1xuIC0gY29tcGFjdF9tZW1vcnlcbiAtIGNvbXBhY3Rpb25fcHJvYWN0aXZlbmVzc1xuIC0gY29tcGFjdF91bmV2aWN0YWJsZV9hbGxvd2VkXG5AQCAtMTA4LDYgJiM0MzsxMTEsNDEgQEAgT24geDg2XzY0IHRoaXMgaXMgYWJvdXQgMTI4TUIuXG4gQ2hhbmdpbmcgdGhpcyB0YWtlcyBlZmZlY3Qgd2hlbmV2ZXIgYW4gYXBwbGljYXRpb24gcmVxdWVzdHMgbWVtb3J5LlxuIFxuIFxuJiM0Mzthc3luY19tbV90ZWFyZG93blxuJiM0Mzs9PT09PT09PT09PT09PT09PVxuJiM0MztcbiYjNDM7QXZhaWxhYmxlIG9ubHkgd2hlbiBDT05GSUdfQVNZTkNfTU1fVEVBUkRPV04gaXMgc2V0LiBDb250cm9scyB3aGV0aGVyIHRoZVxuJiM0MzthZGRyZXNzLXNwYWNlIHRlYXJkb3duIChleGl0X21tYXAoKSkgb2YgbGFyZ2UgZXhpdGluZyBwcm9jZXNzZXMgaXMgZGVmZXJyZWRcbiYjNDM7dG8gdGhlIG1tX3JlYXBlciBrZXJuZWwgdGhyZWFkIGluc3RlYWQgb2YgcnVubmluZyBvbiB0aGUgZXhpdGluZyBDUFUuXG4mIzQzO1xuJiM0MztXcml0aW5nIDEgZW5hYmxlcyBkZWZlcnJhbCwgMCBkaXNhYmxlcyBpdC4gRGlzYWJsaW5nIG1ha2VzIG1tcHV0X2V4aXQoKSB0ZWFyXG4mIzQzO2Rvd24gaW5saW5lIGFnYWluOyBpdCBkb2VzIG5vdCBkcmFpbiBtbXMgYWxyZWFkeSBxdWV1ZWQuIERlZmF1bHRzIHRvIDAuXG4mIzQzO1xuJiM0MztEZWZlcnJlZCB0ZWFyZG93biBjb25zdW1lcyBDUFUgaW4gdGhlIG1tX3JlYXBlciBrZXJuZWwgdGhyZWFkLCB3aGljaCBydW5zIGluXG4mIzQzO3RoZSByb290IGNncm91cDogdGhlIHRlYXJkb3duIHdvcmsgb2YgYSB0YXNrIGluIGEgQ1BVLWxpbWl0ZWQgY2dyb3VwIGlzIG5vdFxuJiM0MztjaGFyZ2VkIHRvIHRoYXQgY2dyb3VwLCBzaW1pbGFyIHRvIGtzd2FwZCBhbmQgdGhlIG9vbV9yZWFwZXIuIENvbnNpZGVyIHRoaXNcbiYjNDM7YmVmb3JlIGVuYWJsaW5nIHRoZSBmZWF0dXJlIG9uIHN5c3RlbXMgdGhhdCByZWx5IG9uIHN0cmljdCBwZXItY2dyb3VwIENQVVxuJiM0MzthY2NvdW50aW5nLlxuJiM0MztcbiYjNDM7XG4mIzQzO2FzeW5jX21tX3RlYXJkb3duX21heF9wZW5kaW5nX3BhZ2VzXG4mIzQzOz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4mIzQzO1xuJiM0MztBdmFpbGFibGUgb25seSB3aGVuIENPTkZJR19BU1lOQ19NTV9URUFSRE9XTiBpcyBzZXQuIEJhY2twcmVzc3VyZSBjYXAsIGluXG4mIzQzO3BhZ2VzLCBvbiB0aGUgdG90YWwgUlNTIG9mIG1tcyBxdWV1ZWQgZm9yIHRoZSBtbV9yZWFwZXIgYnV0IG5vdCB5ZXQgdG9yblxuJiM0Mztkb3duLiBBbiBleGl0IHRoYXQgd291bGQgcHVzaCB0aGUgdG90YWwgb3ZlciB0aGlzIGNhcCB0ZWFycyBkb3duXG4mIzQzO3N5bmNocm9ub3VzbHkgaW5zdGVhZCBvZiBxdWV1aW5nLiBEZWZhdWx0cyB0byB0b3RhbHJhbV9wYWdlcygpIC8gNC5cbiYjNDM7XG4mIzQzO1xuJiM0Mzthc3luY19tbV90ZWFyZG93bl90aHJlc2hfcGFnZXNcbiYjNDM7PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4mIzQzO1xuJiM0MztBdmFpbGFibGUgb25seSB3aGVuIENPTkZJR19BU1lOQ19NTV9URUFSRE9XTiBpcyBzZXQuIE1pbmltdW0gUlNTLCBpbiBwYWdlcyxcbiYjNDM7Zm9yIGFuIGV4aXRpbmcgbW0gdG8gYmUgZWxpZ2libGUgZm9yIGRlZmVycmFsIHRvIHRoZSBtbV9yZWFwZXIuIEV4aXRpbmcgbW1zXG4mIzQzO2JlbG93IHRoaXMgdGhyZXNob2xkIGFyZSBhbHdheXMgdG9ybiBkb3duIHN5bmNocm9ub3VzbHkuIERlZmF1bHRzIHRvIDY0TUJcbiYjNDM7d29ydGggb2YgcGFnZXMuXG4mIzQzO1xuJiM0MztcbiBjb21wYWN0X21lbW9yeVxuID09PT09PT09PT09PT09XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oIGIvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oXG5pbmRleCA5MzliNWVhOGM5ZTBiZS4uZWU2YzBhYzg0YjNkNTkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaFxuQEAgLTcsNiAmIzQzOzcsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2F1eHZlYy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva3JlZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbGlzdC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xsaXN0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zcGlubG9jay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmJ0cmVlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tYXBsZV90cmVlLmhcdTAwM2VcbkBAIC0xMzY3LDYgJiM0MzsxMzY4LDEwIEBAIHN0cnVjdCBtbV9zdHJ1Y3Qge1xuIFx0XHRhdG9taWNfbG9uZ190IGh1Z2V0bGJfdXNhZ2U7XG4gI2VuZGlmXG4gXHRcdHN0cnVjdCB3b3JrX3N0cnVjdCBhc3luY19wdXRfd29yaztcbiYjNDM7I2lmZGVmIENPTkZJR19BU1lOQ19NTV9URUFSRE9XTlxuJiM0MztcdFx0c3RydWN0IGxsaXN0X25vZGUgYXN5bmNfcmVhcF9ub2RlO1xuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBhc3luY19yZWFwX3JzcztcbiYjNDM7I2VuZGlmIC8qIENPTkZJR19BU1lOQ19NTV9URUFSRE9XTiAqL1xuIFxuICNpZmRlZiBDT05GSUdfSU9NTVVfTU1fREFUQVxuIFx0XHRzdHJ1Y3QgaW9tbXVfbW1fZGF0YSAqaW9tbXVfbW07XG5AQCAtMTk4NSw2ICYjNDM7MTk5MCwxNiBAQCBlbnVtIHtcbiAjZGVmaW5lIE1NRl9UT1BET1dOXHRcdDMxXHQvKiBtbSBzZWFyY2hlcyB0b3AgZG93biBieSBkZWZhdWx0ICovXG4gI2RlZmluZSBNTUZfVE9QRE9XTl9NQVNLXHRCSVQoTU1GX1RPUERPV04pXG4gXG4mIzQzOy8qXG4mIzQzOyAqIG1tIGlzIHRoZSB0YXJnZXQgb2YgYW4gaW4tZmxpZ2h0IE9PTSBraWxsLiBPbmx5IHdyaXR0ZW4gdW5kZXJcbiYjNDM7ICogQ09ORklHX0FTWU5DX01NX1RFQVJET1dOIHRvZGF5LiBTdGlja3k6IG5ldmVyIGNsZWFyZWQgLS0gdGhlIG1tIGlzXG4mIzQzOyAqIGR5aW5nIChfX29vbV9raWxsX3Byb2Nlc3MoKSBraWxscyBldmVyeSBwcm9jZXNzIHNoYXJpbmcgaXQpLCBhbmQgYVxuJiM0MzsgKiBoeXBvdGhldGljYWwgc3Vydml2aW5nIHNoYXJlciB3b3VsZCBtZXJlbHkga2VlcCB0ZWFyaW5nIGRvd25cbiYjNDM7ICogc3luY2hyb25vdXNseS4gQWJvdmUgYml0IDMxLCBzbyBpdCBpcyBvdXRzaWRlIE1NRl9JTklUX0xFR0FDWV9NQVNLJiMzOTtzXG4mIzQzOyAqIGRvbWFpbiBlbnRpcmVseSBhbmQgaXMgbmV2ZXIgaW5oZXJpdGVkIG9uIGZvcmsuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIE1NRl9PT01fVEFSR0VURURcdDMyXG4mIzQzO1xuICNkZWZpbmUgTU1GX0lOSVRfTEVHQUNZX01BU0tcdChNTUZfRFVNUF9GSUxURVJfTUFTSyB8XFxcbiBcdFx0XHRcdCBNTUZfRElTQUJMRV9USFBfTUFTSyB8IE1NRl9IQVNfTURXRV9NQVNLIHxcXFxuIFx0XHRcdFx0IE1NRl9WTV9NRVJHRV9BTllfTUFTSyB8IE1NRl9UT1BET1dOX01BU0spXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oIGIvaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oXG5pbmRleCAxMGJlOGE1NGI0MTZmOS4uMjBhZWIxZDdlZDMxYjAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc2NoZWQvbW0uaFxuQEAgLTE0Nyw2ICYjNDM7MTQ3LDEyIEBAIGV4dGVybiB2b2lkIG1tcHV0KHN0cnVjdCBtbV9zdHJ1Y3QgKik7XG4gdm9pZCBtbXB1dF9hc3luYyhzdHJ1Y3QgbW1fc3RydWN0ICopO1xuICNlbmRpZlxuIFxuJiM0MzsjaWZkZWYgQ09ORklHX0FTWU5DX01NX1RFQVJET1dOXG4mIzQzO3ZvaWQgbW1wdXRfZXhpdChzdHJ1Y3QgbW1fc3RydWN0ICopO1xuJiM0MzsjZWxzZVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbW1wdXRfZXhpdChzdHJ1Y3QgbW1fc3RydWN0ICptbSkgeyBtbXB1dChtbSk7IH1cbiYjNDM7I2VuZGlmXG4mIzQzO1xuIC8qIEdyYWIgYSByZWZlcmVuY2UgdG8gYSB0YXNrJiMzOTtzIG1tLCBpZiBpdCBpcyBub3QgYWxyZWFkeSBnb2luZyBhd2F5ICovXG4gZXh0ZXJuIHN0cnVjdCBtbV9zdHJ1Y3QgKmdldF90YXNrX21tKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayk7XG4gLypcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZtX2V2ZW50X2l0ZW0uaCBiL2luY2x1ZGUvbGludXgvdm1fZXZlbnRfaXRlbS5oXG5pbmRleCAyNjI4Y2NkYTA3NmEwNy4uZGU0ZGMyMGI3Zjg3ZGUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3ZtX2V2ZW50X2l0ZW0uaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC92bV9ldmVudF9pdGVtLmhcbkBAIC0xNzksNiAmIzQzOzE3OSwxMSBAQCBlbnVtIHZtX2V2ZW50X2l0ZW0geyBQR1BHSU4sIFBHUEdPVVQsIFBTV1BJTiwgUFNXUE9VVCxcbiBcdFx0TlJTV1BJTixcbiBcdFx0TlJTV1BPVVQsXG4gI2VuZGlmIC8qIENPTkZJR19TV0FQICovXG4mIzQzOyNpZmRlZiBDT05GSUdfQVNZTkNfTU1fVEVBUkRPV05cbiYjNDM7XHRcdEFTWU5DX01NX1RFQVJET1dOX1FVRVVFRCxcbiYjNDM7XHRcdEFTWU5DX01NX1RFQVJET1dOX1NZTkMsXG4mIzQzO1x0XHRBU1lOQ19NTV9URUFSRE9XTl9SRUpFQ1RFRCxcbiYjNDM7I2VuZGlmXG4gXHRcdE5SX1ZNX0VWRU5UX0lURU1TXG4gfTtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9tbV9yZWFwZXIuaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL21tX3JlYXBlci5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjMxNWJjZWQ3YzQyNTNkXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9tbV9yZWFwZXIuaFxuQEAgLTAsMCAmIzQzOzEsNzMgQEBcbiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbiYjNDM7I3VuZGVmIFRSQUNFX1NZU1RFTVxuJiM0MzsjZGVmaW5lIFRSQUNFX1NZU1RFTSBtbV9yZWFwZXJcbiYjNDM7XG4mIzQzOyNpZiAhZGVmaW5lZChfVFJBQ0VfTU1fUkVBUEVSX0gpIHx8IGRlZmluZWQoVFJBQ0VfSEVBREVSX01VTFRJX1JFQUQpXG4mIzQzOyNkZWZpbmUgX1RSQUNFX01NX1JFQVBFUl9IXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC90cmFjZXBvaW50LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC90b3BvbG9neS5oXHUwMDNlXG4mIzQzO1xuJiM0MztUUkFDRV9FVkVOVChtbV9hc3luY190ZWFyZG93bl9xdWV1ZSxcbiYjNDM7XG4mIzQzO1x0VFBfUFJPVE8oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgcnNzKSxcbiYjNDM7XG4mIzQzO1x0VFBfQVJHUyhtbSwgcnNzKSxcbiYjNDM7XG4mIzQzO1x0VFBfU1RSVUNUX19lbnRyeShcbiYjNDM7XHRcdF9fZmllbGQoc3RydWN0IG1tX3N0cnVjdCAqLCBtbSlcbiYjNDM7XHRcdF9fZmllbGQoaW50LCBwaWQpXG4mIzQzO1x0XHRfX2FycmF5KGNoYXIsIGNvbW0sIFRBU0tfQ09NTV9MRU4pXG4mIzQzO1x0XHRfX2ZpZWxkKHVuc2lnbmVkIGxvbmcsIHJzcylcbiYjNDM7XHRcdF9fZmllbGQoaW50LCBub2RlKVxuJiM0MztcdCksXG4mIzQzO1xuJiM0MztcdFRQX2Zhc3RfYXNzaWduKFxuJiM0MztcdFx0X19lbnRyeS1cdTAwM2VtbSA9IG1tO1xuJiM0MztcdFx0X19lbnRyeS1cdTAwM2VwaWQgPSBjdXJyZW50LVx1MDAzZXBpZDtcbiYjNDM7XHRcdG1lbWNweShfX2VudHJ5LVx1MDAzZWNvbW0sIGN1cnJlbnQtXHUwMDNlY29tbSwgVEFTS19DT01NX0xFTik7XG4mIzQzO1x0XHRfX2VudHJ5LVx1MDAzZXJzcyA9IHJzcztcbiYjNDM7XHRcdF9fZW50cnktXHUwMDNlbm9kZSA9IG51bWFfbm9kZV9pZCgpO1xuJiM0MztcdCksXG4mIzQzO1xuJiM0MztcdFRQX3ByaW50ayhcJiMzNDttbT0lcCBwaWQ9JWQgY29tbT0lcyByc3M9JWx1a0Igbm9kZT0lZFwmIzM0OyxcbiYjNDM7XHRcdF9fZW50cnktXHUwMDNlbW0sXG4mIzQzO1x0XHRfX2VudHJ5LVx1MDAzZXBpZCxcbiYjNDM7XHRcdF9fZW50cnktXHUwMDNlY29tbSxcbiYjNDM7XHRcdF9fZW50cnktXHUwMDNlcnNzIFx1MDAzY1x1MDAzYyAoUEFHRV9TSElGVCAtIDEwKSxcbiYjNDM7XHRcdF9fZW50cnktXHUwMDNlbm9kZVxuJiM0MztcdClcbiYjNDM7KTtcbiYjNDM7XG4mIzQzO1RSQUNFX0VWRU5UKG1tX2FzeW5jX3RlYXJkb3duX3JlYXAsXG4mIzQzO1xuJiM0MztcdFRQX1BST1RPKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGNoYXJnZWRfcnNzLCB1bnNpZ25lZCBsb25nIGxpdmVfcnNzKSxcbiYjNDM7XG4mIzQzO1x0VFBfQVJHUyhtbSwgY2hhcmdlZF9yc3MsIGxpdmVfcnNzKSxcbiYjNDM7XG4mIzQzO1x0VFBfU1RSVUNUX19lbnRyeShcbiYjNDM7XHRcdF9fZmllbGQoc3RydWN0IG1tX3N0cnVjdCAqLCBtbSlcbiYjNDM7XHRcdF9fZmllbGQodW5zaWduZWQgbG9uZywgY2hhcmdlZF9yc3MpXG4mIzQzO1x0XHRfX2ZpZWxkKHVuc2lnbmVkIGxvbmcsIGxpdmVfcnNzKVxuJiM0MztcdFx0X19maWVsZChpbnQsIG5vZGUpXG4mIzQzO1x0KSxcbiYjNDM7XG4mIzQzO1x0VFBfZmFzdF9hc3NpZ24oXG4mIzQzO1x0XHRfX2VudHJ5LVx1MDAzZW1tID0gbW07XG4mIzQzO1x0XHRfX2VudHJ5LVx1MDAzZWNoYXJnZWRfcnNzID0gY2hhcmdlZF9yc3M7XG4mIzQzO1x0XHRfX2VudHJ5LVx1MDAzZWxpdmVfcnNzID0gbGl2ZV9yc3M7XG4mIzQzO1x0XHRfX2VudHJ5LVx1MDAzZW5vZGUgPSBudW1hX25vZGVfaWQoKTtcbiYjNDM7XHQpLFxuJiM0MztcbiYjNDM7XHRUUF9wcmludGsoXCYjMzQ7bW09JXAgY2hhcmdlZF9yc3M9JWx1a0IgbGl2ZV9yc3M9JWx1a0Igbm9kZT0lZFwmIzM0OyxcbiYjNDM7XHRcdF9fZW50cnktXHUwMDNlbW0sXG4mIzQzO1x0XHRfX2VudHJ5LVx1MDAzZWNoYXJnZWRfcnNzIFx1MDAzY1x1MDAzYyAoUEFHRV9TSElGVCAtIDEwKSxcbiYjNDM7XHRcdF9fZW50cnktXHUwMDNlbGl2ZV9yc3MgXHUwMDNjXHUwMDNjIChQQUdFX1NISUZUIC0gMTApLFxuJiM0MztcdFx0X19lbnRyeS1cdTAwM2Vub2RlXG4mIzQzO1x0KVxuJiM0MzspO1xuJiM0MztcbiYjNDM7I2VuZGlmIC8qIF9UUkFDRV9NTV9SRUFQRVJfSCAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdHJhY2UvZGVmaW5lX3RyYWNlLmhcdTAwM2VcbmRpZmYgLS1naXQgYS9rZXJuZWwvZXhpdC5jIGIva2VybmVsL2V4aXQuY1xuaW5kZXggMTA1NjQyMmJjMTAxM2UuLjZmOTdkMjA0ZjlmY2FjIDEwMDY0NFxuLS0tIGEva2VybmVsL2V4aXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2V4aXQuY1xuQEAgLTYwNyw3ICYjNDM7NjA3LDcgQEAgc3RhdGljIHZvaWQgZXhpdF9tbSh2b2lkKVxuIFx0dGFza191bmxvY2soY3VycmVudCk7XG4gXHRtbWFwX3JlYWRfdW5sb2NrKG1tKTtcbiBcdG1tX3VwZGF0ZV9uZXh0X293bmVyKG1tKTtcbi1cdG1tcHV0KG1tKTtcbiYjNDM7XHRtbXB1dF9leGl0KG1tKTtcbiBcdGlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl9NRU1ESUUpKVxuIFx0XHRleGl0X29vbV92aWN0aW0oKTtcbiB9XG5kaWZmIC0tZ2l0IGEva2VybmVsL2ZvcmsuYyBiL2tlcm5lbC9mb3JrLmNcbmluZGV4IGYwZTJlMTMxYTlhNWFmLi40YmRmZmExODhmNTIyNCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9mb3JrLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9mb3JrLmNcbkBAIC0xMTIsNiAmIzQzOzExMiw4IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdW53aW5kX2RlZmVycmVkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wZ2FsbG9jLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91YWNjZXNzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvaXNvbGF0aW9uLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc2l6ZXMuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY2FzbS9tbXVfY29udGV4dC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2NhY2hlZmx1c2guaFx1MDAzZVxuQEAgLTEyNCw2ICYjNDM7MTI2LDkgQEBcbiBcbiAjZGVmaW5lIENSRUFURV9UUkFDRV9QT0lOVFNcbiAjaW5jbHVkZSBcdTAwM2N0cmFjZS9ldmVudHMvdGFzay5oXHUwMDNlXG4mIzQzOyNpZmRlZiBDT05GSUdfQVNZTkNfTU1fVEVBUkRPV05cbiYjNDM7I2luY2x1ZGUgXHUwMDNjdHJhY2UvZXZlbnRzL21tX3JlYXBlci5oXHUwMDNlXG4mIzQzOyNlbmRpZlxuIFxuICNpbmNsdWRlIFx1MDAzY2t1bml0L3Zpc2liaWxpdHkuaFx1MDAzZVxuIFxuQEAgLTM0MDcsMyAmIzQzOzM0MTIsMTk3IEBAIHN0YXRpYyBpbnQgX19pbml0IGluaXRfZm9ya19zeXNjdGwodm9pZClcbiB9XG4gXG4gc3Vic3lzX2luaXRjYWxsKGluaXRfZm9ya19zeXNjdGwpO1xuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR19BU1lOQ19NTV9URUFSRE9XTlxuJiM0MztzdGF0aWMgTExJU1RfSEVBRChtbV9yZWFwZXJfbGlzdCk7XG4mIzQzO3N0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChtbV9yZWFwZXJfd2FpdCk7XG4mIzQzO3N0YXRpYyBhdG9taWNfbG9uZ190IG1tX3JlYXBlcl9wZW5kaW5nX3BhZ2VzO1xuJiM0MztzdGF0aWMgREVGSU5FX1NUQVRJQ19LRVlfRkFMU0UoYXN5bmNfbW1fdGVhcmRvd25fa2V5KTtcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgc3lzY3RsX2FzeW5jX21tX3RlYXJkb3duX3RocmVzaF9wYWdlcztcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgc3lzY3RsX2FzeW5jX21tX3RlYXJkb3duX21heF9wZW5kaW5nX3BhZ2VzO1xuJiM0MzsjaWZkZWYgQ09ORklHX1NZU0NUTFxuJiM0MztzdGF0aWMgdTggc3lzY3RsX2FzeW5jX21tX3RlYXJkb3duX2VuYWJsZWQ7XG4mIzQzO3N0YXRpYyBERUZJTkVfTVVURVgoYXN5bmNfbW1fdGVhcmRvd25fbG9jayk7XG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgYXN5bmNfbW1fdGVhcmRvd25fZWxpZ2libGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgcnNzKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHJzcyBcdTAwM2MgUkVBRF9PTkNFKHN5c2N0bF9hc3luY19tbV90ZWFyZG93bl90aHJlc2hfcGFnZXMpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdGlmIChtbV9mbGFnc190ZXN0KE1NRl9PT01fU0tJUCwgbW0pKVx0LyogcmVhcGVkLCBvciBoaWRkZW4gZnJvbSB0aGUgcmVhcGVyICovXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBNTUZfT09NX1RBUkdFVEVEIGlzIHNldCBieSB0aGUgT09NIGtpbGxlciB3aGlsZSBzb21lIHRhc2sgc3RpbGxcbiYjNDM7XHQgKiBob2xkcyBhIGxpdmUgcmVmZXJlbmNlIHRvIHRoaXMgbW0gKHNlZSBtYXJrX29vbV92aWN0aW0oKSBhbmRcbiYjNDM7XHQgKiBfX29vbV9raWxsX3Byb2Nlc3MoKSksIGFuZCB0aGlzIGVsaWdpYmlsaXR5IGNoZWNrIGlzIHJlYWNoZWQgb25seVxuJiM0MztcdCAqIGZyb20gbW1wdXRfZXhpdCgpLCBhZnRlciBtbV91c2VycyBoYXMgZHJvcHBlZCB0byAwIC0tIHNvIG1hcmtpbmdcbiYjNDM7XHQgKiBhbmQgdGhpcyBjaGVjayBjYW4gbmV2ZXIgb3ZlcmxhcCBpbiB0aW1lLiBXaGljaGV2ZXIgdGhyZWFkXG4mIzQzO1x0ICogcGVyZm9ybXMgdGhlIGZpbmFsIGRlY3JlbWVudCBpcyB0aGVyZWZvcmUgZ3VhcmFudGVlZCB0byBvYnNlcnZlXG4mIzQzO1x0ICogdGhlIGZsYWcgYWxyZWFkeSBzZXQsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGF0IHRocmVhZCB3YXNcbiYjNDM7XHQgKiBpdHNlbGYgZXZlciBwYXNzZWQgdG8gbWFya19vb21fdmljdGltKCkgKGEgQ0xPTkVfVk0tc2hhcmluZ1xuJiM0MztcdCAqIHByb2Nlc3MgaW4gYW5vdGhlciB0aHJlYWQgZ3JvdXAgbmV2ZXIgaXMsIGJ1dCBzdGlsbCBvYnNlcnZlc1xuJiM0MztcdCAqIHRoaXMgZmxhZyBvbiB0aGUgc2hhcmVkIG1tKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAobW1fZmxhZ3NfdGVzdChNTUZfT09NX1RBUkdFVEVELCBtbSkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIENoYXJnZSByc3MgYWdhaW5zdCB0aGUgcGVuZGluZy10ZWFyZG93biBidWRnZXQuICBSZXR1cm5zIHRydWUgaWYgaXQgZml0c1xuJiM0MzsgKiB1bmRlciB0aGUgY2FwLCBpbiB3aGljaCBjYXNlIHRoZSBjYWxsZXIgZW5xdWV1ZXMgYW5kIHRoZSByZWFwZXIgcmVsZWFzZXNcbiYjNDM7ICogdGhlIHNhbWUgcnNzIGFmdGVyIF9fbW1wdXQoKS4gIE9uIG92ZXJzaG9vdCBub3RoaW5nIHN0YXlzIGNoYXJnZWQgYW5kIHRoZVxuJiM0MzsgKiBjYWxsZXIgbXVzdCB0ZWFyIGRvd24gc3luY2hyb25vdXNseS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBib29sIGFzeW5jX21tX3RlYXJkb3duX3Jlc2VydmUodW5zaWduZWQgbG9uZyByc3MpXG4mIzQzO3tcbiYjNDM7XHRpZiAoYXRvbWljX2xvbmdfYWRkX3JldHVybihyc3MsIFx1MDAyNm1tX3JlYXBlcl9wZW5kaW5nX3BhZ2VzKSBcdTAwM2VcbiYjNDM7XHQgICAgUkVBRF9PTkNFKHN5c2N0bF9hc3luY19tbV90ZWFyZG93bl9tYXhfcGVuZGluZ19wYWdlcykpIHtcbiYjNDM7XHRcdGF0b21pY19sb25nX3N1Yihyc3MsIFx1MDAyNm1tX3JlYXBlcl9wZW5kaW5nX3BhZ2VzKTtcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGFzeW5jX21tX3RlYXJkb3duX3F1ZXVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHJzcylcbiYjNDM7e1xuJiM0MztcdGNvdW50X3ZtX2V2ZW50KEFTWU5DX01NX1RFQVJET1dOX1FVRVVFRCk7XG4mIzQzO1x0dHJhY2VfbW1fYXN5bmNfdGVhcmRvd25fcXVldWUobW0sIHJzcyk7XG4mIzQzO1x0aWYgKGxsaXN0X2FkZChcdTAwMjZtbS1cdTAwM2Vhc3luY19yZWFwX25vZGUsIFx1MDAyNm1tX3JlYXBlcl9saXN0KSlcbiYjNDM7XHRcdHdha2VfdXAoXHUwMDI2bW1fcmVhcGVyX3dhaXQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG1tX3JlYXBlcih2b2lkICp1bnVzZWQpXG4mIzQzO3tcbiYjNDM7XHRzZXRfZnJlZXphYmxlKCk7XG4mIzQzO1x0d2hpbGUgKHRydWUpIHtcbiYjNDM7XHRcdHN0cnVjdCBsbGlzdF9ub2RlICpiYXRjaDtcbiYjNDM7XHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCAqbjtcbiYjNDM7XG4mIzQzO1x0XHR3YWl0X2V2ZW50X2ZyZWV6YWJsZShtbV9yZWFwZXJfd2FpdCwgIWxsaXN0X2VtcHR5KFx1MDAyNm1tX3JlYXBlcl9saXN0KSk7XG4mIzQzO1x0XHRiYXRjaCA9IGxsaXN0X2RlbF9hbGwoXHUwMDI2bW1fcmVhcGVyX2xpc3QpO1xuJiM0MztcdFx0bGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShtbSwgbiwgYmF0Y2gsIGFzeW5jX3JlYXBfbm9kZSkge1xuJiM0MztcdFx0XHR1bnNpZ25lZCBsb25nIHBhZ2VzID0gbW0tXHUwMDNlYXN5bmNfcmVhcF9yc3M7XG4mIzQzO1x0XHRcdHVuc2lnbmVkIGxvbmcgbGl2ZSA9IGdldF9tbV9yc3MobW0pO1xuJiM0MztcbiYjNDM7XHRcdFx0dHJhY2VfbW1fYXN5bmNfdGVhcmRvd25fcmVhcChtbSwgcGFnZXMsIGxpdmUpO1xuJiM0MztcbiYjNDM7XHRcdFx0X19tbXB1dChtbSk7IC8qIG1heSBmcmVlIG1tIHZpYSBtbWRyb3AgKi9cbiYjNDM7XHRcdFx0YXRvbWljX2xvbmdfc3ViKHBhZ2VzLCBcdTAwMjZtbV9yZWFwZXJfcGVuZGluZ19wYWdlcyk7XG4mIzQzO1x0XHRcdGNvbmRfcmVzY2hlZCgpO1xuJiM0MztcdFx0XHR0cnlfdG9fZnJlZXplKCk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIG1tcHV0X2V4aXQoc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4mIzQzO3tcbiYjNDM7XHRtaWdodF9zbGVlcCgpO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRnVsbHkgb3JkZXJlZCBSTVc6IGNvbWJpbmVkIHdpdGggZXhpdF9tbSgpIChvciBleGVjX21tYXAoKSwgdGhlXG4mIzQzO1x0ICogb3RoZXIgcGF0aCB0aGF0IHNoZWRzIC1cdTAwM2VtbSkgY2xlYXJpbmcgLVx1MDAzZW1tIHVuZGVyIHRhc2tfbG9jaygpIGJlZm9yZVxuJiM0MztcdCAqIHRoaXMgY2FsbCwgaXQgZ3VhcmFudGVlcyBNTUZfT09NX1RBUkdFVEVEIHNldCBhdCBhbnkgbWFyayBzaXRlIGlzXG4mIzQzO1x0ICogdmlzaWJsZSBoZXJlIC0tIHNlZSBtYXJrX29vbV92aWN0aW0oKS4gQW55IG5ldyBjYWxsZXIgb2ZcbiYjNDM7XHQgKiBtbXB1dF9leGl0KCkgb3V0c2lkZSBleGl0X21tKCkgbXVzdCByZS12ZXJpZnkgdGhhdCBhcmd1bWVudC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIWF0b21pY19kZWNfYW5kX3Rlc3QoXHUwMDI2bW0tXHUwMDNlbW1fdXNlcnMpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZhc3luY19tbV90ZWFyZG93bl9rZXkpKSB7XG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIHJzcyA9IGdldF9tbV9yc3MobW0pO1xuJiM0MztcbiYjNDM7XHRcdGlmIChhc3luY19tbV90ZWFyZG93bl9lbGlnaWJsZShtbSwgcnNzKSkge1xuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBleGl0X2FpbygpIGNhbiBibG9jayBpbmRlZmluaXRlbHkuIFJ1biBpdCBoZXJlIHNvIGEgc3R1Y2tcbiYjNDM7XHRcdFx0ICogQUlPIG9ubHkgaGFuZ3MgdGhpcyB0YXNrIChzYW1lIGFzIGhvdyBpdCB3b3VsZCBoYXBwZW4gaW5cbiYjNDM7XHRcdFx0ICogY2FzZSBvZiBzeW5jaHJvbm91cyBtbXB1dCgpKSBpbnN0ZWFkIG9mIHN0cmFuZGluZyBldmVyeVxuJiM0MztcdFx0XHQgKiB0ZWFyZG93biBxdWV1ZWQgYmVoaW5kIHRoaXMgbW1cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdGV4aXRfYWlvKG1tKTtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmIChhc3luY19tbV90ZWFyZG93bl9yZXNlcnZlKHJzcykpIHtcbiYjNDM7XHRcdFx0XHRtbS1cdTAwM2Vhc3luY19yZWFwX3JzcyA9IHJzcztcbiYjNDM7XHRcdFx0XHRhc3luY19tbV90ZWFyZG93bl9xdWV1ZShtbSwgcnNzKTtcbiYjNDM7XHRcdFx0XHRyZXR1cm47XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0Y291bnRfdm1fZXZlbnQoQVNZTkNfTU1fVEVBUkRPV05fUkVKRUNURUQpO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Y291bnRfdm1fZXZlbnQoQVNZTkNfTU1fVEVBUkRPV05fU1lOQyk7XG4mIzQzO1x0X19tbXB1dChtbSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOyNpZmRlZiBDT05GSUdfU1lTQ1RMXG4mIzQzO3N0YXRpYyBpbnQgYXN5bmNfbW1fdGVhcmRvd25fZW5hYmxlZF9oYW5kbGVyKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLFxuJiM0MztcdFx0XHRcdFx0ICAgICBpbnQgd3JpdGUsIHZvaWQgKmJ1ZmZlcixcbiYjNDM7XHRcdFx0XHRcdCAgICAgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFNlcmlhbGl6ZSBjb25jdXJyZW50IHdyaXRlcnMgc28gdGhlIHN0YXRpYyBrZXkgc3RhdGUgYWx3YXlzIG1hdGNoZXNcbiYjNDM7XHQgKiB0aGUgbGFzdCB2YWx1ZSB3cml0dGVuIHRvIHRoZSB2YXJpYWJsZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRndWFyZChtdXRleCkoXHUwMDI2YXN5bmNfbW1fdGVhcmRvd25fbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldCA9IHByb2NfZG91OHZlY19taW5tYXgodGFibGUsIHdyaXRlLCBidWZmZXIsIGxlbnAsIHBwb3MpO1xuJiM0MztcdGlmIChyZXQgfHwgIXdyaXRlKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKHN5c2N0bF9hc3luY19tbV90ZWFyZG93bl9lbmFibGVkKVxuJiM0MztcdFx0c3RhdGljX2JyYW5jaF9lbmFibGUoXHUwMDI2YXN5bmNfbW1fdGVhcmRvd25fa2V5KTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRzdGF0aWNfYnJhbmNoX2Rpc2FibGUoXHUwMDI2YXN5bmNfbW1fdGVhcmRvd25fa2V5KTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgYXN5bmNfbW1fdGVhcmRvd25fdGFibGVbXSA9IHtcbiYjNDM7XHR7XG4mIzQzO1x0XHQucHJvY25hbWVcdD0gXCYjMzQ7YXN5bmNfbW1fdGVhcmRvd25cJiMzNDssXG4mIzQzO1x0XHQuZGF0YVx0XHQ9IFx1MDAyNnN5c2N0bF9hc3luY19tbV90ZWFyZG93bl9lbmFibGVkLFxuJiM0MztcdFx0Lm1heGxlblx0XHQ9IHNpemVvZih1OCksXG4mIzQzO1x0XHQubW9kZVx0XHQ9IDA2NDQsXG4mIzQzO1x0XHQucHJvY19oYW5kbGVyXHQ9IGFzeW5jX21tX3RlYXJkb3duX2VuYWJsZWRfaGFuZGxlcixcbiYjNDM7XHRcdC5leHRyYTFcdFx0PSBTWVNDVExfWkVSTyxcbiYjNDM7XHRcdC5leHRyYTJcdFx0PSBTWVNDVExfT05FLFxuJiM0MztcdH0sXG4mIzQzO1x0e1xuJiM0MztcdFx0LnByb2NuYW1lXHQ9IFwmIzM0O2FzeW5jX21tX3RlYXJkb3duX3RocmVzaF9wYWdlc1wmIzM0OyxcbiYjNDM7XHRcdC5kYXRhXHRcdD0gXHUwMDI2c3lzY3RsX2FzeW5jX21tX3RlYXJkb3duX3RocmVzaF9wYWdlcyxcbiYjNDM7XHRcdC5tYXhsZW5cdFx0PSBzaXplb2YodW5zaWduZWQgbG9uZyksXG4mIzQzO1x0XHQubW9kZVx0XHQ9IDA2NDQsXG4mIzQzO1x0XHQucHJvY19oYW5kbGVyXHQ9IHByb2NfZG91bG9uZ3ZlY19taW5tYXgsXG4mIzQzO1x0fSxcbiYjNDM7XHR7XG4mIzQzO1x0XHQucHJvY25hbWVcdD0gXCYjMzQ7YXN5bmNfbW1fdGVhcmRvd25fbWF4X3BlbmRpbmdfcGFnZXNcJiMzNDssXG4mIzQzO1x0XHQuZGF0YVx0XHQ9IFx1MDAyNnN5c2N0bF9hc3luY19tbV90ZWFyZG93bl9tYXhfcGVuZGluZ19wYWdlcyxcbiYjNDM7XHRcdC5tYXhsZW5cdFx0PSBzaXplb2YodW5zaWduZWQgbG9uZyksXG4mIzQzO1x0XHQubW9kZVx0XHQ9IDA2NDQsXG4mIzQzO1x0XHQucHJvY19oYW5kbGVyXHQ9IHByb2NfZG91bG9uZ3ZlY19taW5tYXgsXG4mIzQzO1x0fSxcbiYjNDM7fTtcbiYjNDM7I2VuZGlmIC8qIENPTkZJR19TWVNDVEwgKi9cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgX19pbml0IG1tX3JlYXBlcl9pbml0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRoO1xuJiM0MztcbiYjNDM7XHR0aCA9IGt0aHJlYWRfY3JlYXRlKG1tX3JlYXBlciwgTlVMTCwgXCYjMzQ7bW1fcmVhcGVyXCYjMzQ7KTtcbiYjNDM7XHRpZiAoSVNfRVJSKHRoKSkge1xuJiM0MztcdFx0cHJfZXJyKFwmIzM0O21tX3JlYXBlcjogZmFpbGVkIHRvIHN0YXJ0IGt0aHJlYWQ6ICVsZFxcblwmIzM0OywgUFRSX0VSUih0aCkpO1xuJiM0MztcdFx0cmV0dXJuIFBUUl9FUlIodGgpO1xuJiM0MztcdH1cbiYjNDM7XHRzZXRfdXNlcl9uaWNlKHRoLCAxOSk7IC8qIG1pbmltaXplIGNvbXBldGl0aW9uIHdpdGggb3RoZXIgZmFpciBjbGFzcyB0YXNrcyAqL1xuJiM0MztcdGt0aHJlYWRfYWZmaW5lX3ByZWZlcnJlZCh0aCwgaG91c2VrZWVwaW5nX2NwdW1hc2soSEtfVFlQRV9LVEhSRUFEKSk7XG4mIzQzO1x0c3lzY3RsX2FzeW5jX21tX3RlYXJkb3duX3RocmVzaF9wYWdlcyAgICAgID0gU1pfNjRNIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuJiM0MztcdHN5c2N0bF9hc3luY19tbV90ZWFyZG93bl9tYXhfcGVuZGluZ19wYWdlcyA9IHRvdGFscmFtX3BhZ2VzKCkgLyA0OyAgLyogVE9ETzogcGxhY2Vob2xkZXIgKi9cbiYjNDM7XHR3YWtlX3VwX3Byb2Nlc3ModGgpO1xuJiM0MzsjaWZkZWYgQ09ORklHX1NZU0NUTFxuJiM0MztcdHJlZ2lzdGVyX3N5c2N0bF9pbml0KFwmIzM0O3ZtXCYjMzQ7LCBhc3luY19tbV90ZWFyZG93bl90YWJsZSk7XG4mIzQzOyNlbmRpZlxuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO3N1YnN5c19pbml0Y2FsbChtbV9yZWFwZXJfaW5pdCk7XG4mIzQzOyNlbmRpZlxuZGlmZiAtLWdpdCBhL21tL0tjb25maWcgYi9tbS9LY29uZmlnXG5pbmRleCBjNTJhYjZhZmNiMTU5Ni4uYTlkOTI1NDA2NjUzZjggMTAwNjQ0XG4tLS0gYS9tbS9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9LY29uZmlnXG5AQCAtMTUwMCw2ICYjNDM7MTUwMCwxOCBAQCBjb25maWcgTEFaWV9NTVVfTU9ERV9LVU5JVF9URVNUXG4gXG4gXHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gXG4mIzQzO2NvbmZpZyBBU1lOQ19NTV9URUFSRE9XTlxuJiM0MztcdGJvb2wgXCYjMzQ7QXN5bmMgb2ZmLUNQVSBhZGRyZXNzIHNwYWNlIHRlYXJkb3duIG9uIGV4aXRcJiMzNDtcbiYjNDM7XHRkZXBlbmRzIG9uIE1NVVxuJiM0MztcdGRlZmF1bHQgblxuJiM0MztcdGhlbHBcbiYjNDM7XHQgIERlZmVyIHRoZSBhZGRyZXNzIHNwYWNlIHRlYXJkb3duIChleGl0X21tYXAoKSkgb2YgbGFyZ2UgZXhpdGluZyBwcm9jZXNzZXNcbiYjNDM7XHQgIHRvIGEga2VybmVsIHRocmVhZCBpbnN0ZWFkIG9mIHJ1bm5pbmcgaXQgb24gdGhlIGV4aXRpbmcgQ1BVLiBUaGUgZmVhdHVyZVxuJiM0MztcdCAgaXMgb2ZmIGJ5IGRlZmF1bHQgYW5kIGlzIGVuYWJsZWQgYXQgcnVudGltZSB2aWEgdGhlIHZtLmFzeW5jX21tX3RlYXJkb3duXG4mIzQzO1x0ICBzeXNjdGwuXG4mIzQzO1xuJiM0MztcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiYjNDM7XG4gc291cmNlIFwmIzM0O21tL2RhbW9uL0tjb25maWdcJiMzNDtcbiBcbiBlbmRtZW51XG5kaWZmIC0tZ2l0IGEvbW0vb29tX2tpbGwuYyBiL21tL29vbV9raWxsLmNcbmluZGV4IDVmMzcyZjZlMjZmYTMyLi5iNTQ5MGQxYjFiZDI2MSAxMDA2NDRcbi0tLSBhL21tL29vbV9raWxsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL29vbV9raWxsLmNcbkBAIC03NTQsNiAmIzQzOzc1NCw0MCBAQCBzdGF0aWMgdm9pZCBtYXJrX29vbV92aWN0aW0oc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXG4gXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHRzay1cdTAwM2VtbTtcbiBcbiBcdFdBUk5fT04ob29tX2tpbGxlcl9kaXNhYmxlZCk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogTWFyayB0aGUgbW0gaXRzZWxmLCBub3QganVzdCB0aGlzIHRhc2svc2lnbmFsLCBhcyBhbiBPT00gdGFyZ2V0LFxuJiM0MztcdCAqIHNvIHRoZSBkZWZlcnJlZC10ZWFyZG93biBwYXRoIGNhbiB0ZXN0IGl0IGZyb20gdGhlIG1tIGFsb25lLiBTZXRcbiYjNDM7XHQgKiBhaGVhZCBvZiB0aGUgVElGX01FTURJRSB0ZXN0LWFuZC1zZXQgYmVsb3cgc28gdGhhdCBldmVyeSBjYWxsXG4mIzQzO1x0ICogbWFya3MgdGhlIG1tLCBpbmNsdWRpbmcgYSByZXBlYXQgbWFyayBvbiBhIHRhc2sgdGhhdCBpcyBhbHJlYWR5XG4mIzQzO1x0ICogVElGX01FTURJRS5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIFRoaXMgaXMgcmVsaWFibHkgdmlzaWJsZSB0byB3aGljaGV2ZXIgdGhyZWFkIGVuZHMgdXAgZHJvcHBpbmcgdGhlXG4mIzQzO1x0ICogbGFzdCByZWZlcmVuY2UgaW4gbW1wdXRfZXhpdCgpOiBtYXJraW5nIGFuZCBxdWV1aW5nIGZvciBhc3luY1xuJiM0MztcdCAqIHRlYXJkb3duIGNhbiBuZXZlciBvdmVybGFwIGluIHRpbWUuIEV2ZXJ5IGNhbGxlciByZWFjaGVzIHRoaXMgd2l0aFxuJiM0MztcdCAqIHRzay1cdTAwM2VtbSBzdGlsbCBzZXQgLS0gZWl0aGVyIHRzayBpcyBjdXJyZW50LCBtYXJraW5nIGl0c2VsZiBpblxuJiM0MztcdCAqIHByb2dyYW0gb3JkZXIsIG9yIHRzayBpcyB0YXNrX2xvY2soKWVkIGJ5IHRoZSBjYWxsZXIgKHRoZVxuJiM0MztcdCAqIHRhc2tfd2lsbF9mcmVlX21lbSgpIGZhc3QgcGF0aCBpbiBvb21fa2lsbF9wcm9jZXNzKCkpIC0tIHdoaWxlXG4mIzQzO1x0ICogbW1wdXRfZXhpdCgpLCB0aGUgb25seSBwYXRoIHRoYXQgcXVldWVzIGZvciB0ZWFyZG93biwgaXMgcmVhY2hlZFxuJiM0MztcdCAqIG9ubHkgYWZ0ZXIgbW1fdXNlcnMgaGl0cyAwLCB3aGljaCByZXF1aXJlcyB0c2smIzM5O3Mgb3duIGV4aXRfbW0oKSAob3JcbiYjNDM7XHQgKiBleGVjX21tYXAoKSwgdGhlIG90aGVyIHBhdGggdGhhdCBzaGVkcyAtXHUwMDNlbW0pIHRvIGhhdmUgYWxyZWFkeVxuJiM0MztcdCAqIGNsZWFyZWQgLVx1MDAzZW1tIHVuZGVyIHRoYXQgc2FtZSB0YXNrX2xvY2soKS4gUHJvZ3JhbSBvcmRlciBvclxuJiM0MztcdCAqIHRhc2tfbG9jaygpIHJlbGVhc2UvYWNxdWlyZSB0aGVyZWZvcmUgb3JkZXJzIHRoaXMgc3RvcmUgYmVmb3JlXG4mIzQzO1x0ICogdHNrJiMzOTtzIG93biBldmVudHVhbCBtbXB1dF9leGl0KCkuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBJZiBhIGRpZmZlcmVudCBDTE9ORV9WTSBzaGFyZXIgcGVyZm9ybXMgdGhlIGFjdHVhbCBmaW5hbCBkZWNyZW1lbnRcbiYjNDM7XHQgKiBpbnN0ZWFkLCB0aGUgb3JkZXJpbmcgZG9lcyBub3QgY29tZSBmcm9tIHRoaXMgc3RvcmU6XG4mIzQzO1x0ICogbW1fZmxhZ3Nfc2V0KCkgaXMgc2V0X2JpdCgpLCBhIG5vbi12YWx1ZS1yZXR1cm5pbmcgUk1XLCBzbyBpdCBpc1xuJiM0MztcdCAqIHVub3JkZXJlZCBhbmQgY29udHJpYnV0ZXMgbm90aGluZyBvbiBpdHMgb3duLiBJdCBjb21lcyBmcm9tIHRoZVxuJiM0MztcdCAqIG1hcmtpbmcgdGFzayYjMzk7cyBvd24gYXRvbWljX2RlY19hbmRfdGVzdCgpLCBhIHZhbHVlLXJldHVybmluZyBSTVdcbiYjNDM7XHQgKiBhbmQgdGhlcmVmb3JlIGZ1bGx5IG9yZGVyZWQgKGFuIHNtcF9tYigpIGJlZm9yZSBhbmQgYWZ0ZXIpLlxuJiM0MztcdCAqIERlY3JlbWVudHMgYXJlIHRvdGFsbHkgb3JkZXJlZCBpbiBtbV91c2VycyYjMzk7IG1vZGlmaWNhdGlvbiBvcmRlclxuJiM0MztcdCAqIHdpdGggdGhlIHplcm9pbmcgb25lIGxhc3QsIHNvIHRoZSBnZW5lcmFsIGJhcnJpZXJzIG9uIGJvdGggc2lkZXNcbiYjNDM7XHQgKiBtYWtlIHRoaXMgc3RvcmUgdmlzaWJsZSB0byB3aGljaGV2ZXIgdGhyZWFkIHBlcmZvcm1zIGl0LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChJU19FTkFCTEVEKENPTkZJR19BU1lOQ19NTV9URUFSRE9XTikpXG4mIzQzO1x0XHRtbV9mbGFnc19zZXQoTU1GX09PTV9UQVJHRVRFRCwgbW0pO1xuJiM0MztcbiBcdC8qIE9PTSBraWxsZXIgbWlnaHQgcmFjZSB3aXRoIG1lbWNnIE9PTSAqL1xuIFx0aWYgKHRlc3RfYW5kX3NldF90c2tfdGhyZWFkX2ZsYWcodHNrLCBUSUZfTUVNRElFKSlcbiBcdFx0cmV0dXJuO1xuQEAgLTkzMSw2ICYjNDM7OTY1LDMzIEBAIHN0YXRpYyB2b2lkIF9fb29tX2tpbGxfcHJvY2VzcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnZpY3RpbSwgY29uc3QgY2hhciAqbWVzc2FnZSlcbiBcdG1tID0gdmljdGltLVx1MDAzZW1tO1xuIFx0bW1ncmFiKG1tKTtcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFNldCB0aGlzIGJlZm9yZSBhbnkgU0lHS0lMTCBmb3IgdGhpcyBraWxsIGV2ZW50IGdvZXMgb3V0IGJlbG93LFxuJiM0MztcdCAqIHdoaWxlIHRhc2tfbG9jayh2aWN0aW0pIChoZWxkIHNpbmNlIGZpbmRfbG9ja190YXNrX21tKCkgYWJvdmUpIGlzXG4mIzQzO1x0ICogc3RpbGwgaGVsZC4gVGhpcyBpcyByZWxpYWJseSB2aXNpYmxlIHRvIHdoaWNoZXZlciB0aHJlYWQgZW5kcyB1cFxuJiM0MztcdCAqIHJ1bm5pbmcgbW1wdXRfZXhpdCgpIGFuZCBkcm9wcGluZyB0aGUgbGFzdCByZWZlcmVuY2UgdG8gdGhpcyBtbSAtLVxuJiM0MztcdCAqIHZpY3RpbSBpdHNlbGYsIGEgc2libGluZywgb3IgYSBDTE9ORV9WTSBzaGFyZXIgaW4gYW5vdGhlciB0aHJlYWRcbiYjNDM7XHQgKiBncm91cCAod2hpY2ggbWFya19vb21fdmljdGltKCkgbmV2ZXIgbWFya3MsIGJ1dCB3aGljaCBzdGlsbFxuJiM0MztcdCAqIG9ic2VydmVzIHRoaXMgc3RvcmUgb24gdGhlIHNoYXJlZCBtbSkuIE1hcmtpbmcgYW5kIHF1ZXVpbmcgZm9yXG4mIzQzO1x0ICogYXN5bmMgdGVhcmRvd24gY2FuIG5ldmVyIG92ZXJsYXA6IG1tcHV0X2V4aXQoKSBpcyByZWFjaGVkIG9ubHlcbiYjNDM7XHQgKiBhZnRlciBtbV91c2VycyBoaXRzIDAsIGFuZCB0aGF0IHJlcXVpcmVzIHZpY3RpbSYjMzk7cyBvd24gZXhpdF9tbSgpXG4mIzQzO1x0ICogKG9yIGV4ZWNfbW1hcCgpLCB0aGUgb3RoZXIgcGF0aCB0aGF0IHNoZWRzIC1cdTAwM2VtbSkgdG8gaGF2ZSBjbGVhcmVkXG4mIzQzO1x0ICogLVx1MDAzZW1tIHVuZGVyIHRoaXMgc2FtZSB0YXNrX2xvY2soKSBmaXJzdCwgd2hpY2ggcmVsZWFzZS9hY3F1aXJlXG4mIzQzO1x0ICogb3JkZXJzIGFmdGVyIHRoZSBzdG9yZSBhYm92ZS5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIElmIHNvbWUgb3RoZXIgc2hhcmVyIHBlcmZvcm1zIHRoZSBhY3R1YWwgZmluYWwgZGVjcmVtZW50IGluc3RlYWQsXG4mIzQzO1x0ICogdGhlIG9yZGVyaW5nIGRvZXMgbm90IGNvbWUgZnJvbSB0aGlzIHN0b3JlOiBtbV9mbGFnc19zZXQoKSBpc1xuJiM0MztcdCAqIHNldF9iaXQoKSwgYSBub24tdmFsdWUtcmV0dXJuaW5nIFJNVywgc28gaXQgaXMgdW5vcmRlcmVkIGFuZFxuJiM0MztcdCAqIGNvbnRyaWJ1dGVzIG5vdGhpbmcgb24gaXRzIG93bi4gSXQgY29tZXMgZnJvbSB0aGUgbWFya2luZyB0YXNrJiMzOTtzXG4mIzQzO1x0ICogb3duIGF0b21pY19kZWNfYW5kX3Rlc3QoKSwgYSB2YWx1ZS1yZXR1cm5pbmcgUk1XIGFuZCB0aGVyZWZvcmVcbiYjNDM7XHQgKiBmdWxseSBvcmRlcmVkIChhbiBzbXBfbWIoKSBiZWZvcmUgYW5kIGFmdGVyKS4gRGVjcmVtZW50cyBhcmVcbiYjNDM7XHQgKiB0b3RhbGx5IG9yZGVyZWQgaW4gbW1fdXNlcnMmIzM5OyBtb2RpZmljYXRpb24gb3JkZXIgd2l0aCB0aGUgemVyb2luZ1xuJiM0MztcdCAqIG9uZSBsYXN0LCBzbyB0aGUgZ2VuZXJhbCBiYXJyaWVycyBvbiBib3RoIHNpZGVzIG1ha2UgdGhpcyBzdG9yZVxuJiM0MztcdCAqIHZpc2libGUgdG8gd2hpY2hldmVyIHRocmVhZCBwZXJmb3JtcyBpdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQVNZTkNfTU1fVEVBUkRPV04pKVxuJiM0MztcdFx0bW1fZmxhZ3Nfc2V0KE1NRl9PT01fVEFSR0VURUQsIG1tKTtcbiYjNDM7XG4gXHQvKiBSYWlzZSBldmVudCBiZWZvcmUgc2VuZGluZyBzaWduYWw6IHRhc2sgcmVhcGVyIG11c3Qgc2VlIHRoaXMgKi9cbiBcdGNvdW50X3ZtX2V2ZW50KE9PTV9LSUxMKTtcbiBcdG1lbWNnX21lbW9yeV9ldmVudF9tbShtbSwgTUVNQ0dfT09NX0tJTEwpO1xuZGlmZiAtLWdpdCBhL21tL3Ztc3RhdC5jIGIvbW0vdm1zdGF0LmNcbmluZGV4IDRlMjZlNWZkNjY2NjI2Li5lM2ZmMzAwMjdjMjRlZCAxMDA2NDRcbi0tLSBhL21tL3Ztc3RhdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS92bXN0YXQuY1xuQEAgLTE0OTQsNiAmIzQzOzE0OTQsMTEgQEAgY29uc3QgY2hhciAqIGNvbnN0IHZtc3RhdF90ZXh0W10gPSB7XG4gXHRbSShOUlNXUElOKV1cdFx0XHRcdD0gXCYjMzQ7bnJzd3BpblwmIzM0OyxcbiBcdFtJKE5SU1dQT1VUKV1cdFx0XHRcdD0gXCYjMzQ7bnJzd3BvdXRcJiMzNDssXG4gI2VuZGlmIC8qIENPTkZJR19TV0FQICovXG4mIzQzOyNpZmRlZiBDT05GSUdfQVNZTkNfTU1fVEVBUkRPV05cbiYjNDM7XHRbSShBU1lOQ19NTV9URUFSRE9XTl9RVUVVRUQpXVx0PSBcJiMzNDthc3luY19tbV90ZWFyZG93bl9xdWV1ZWRcJiMzNDssXG4mIzQzO1x0W0koQVNZTkNfTU1fVEVBUkRPV05fU1lOQyldXHRcdD0gXCYjMzQ7YXN5bmNfbW1fdGVhcmRvd25fc3luY1wmIzM0OyxcbiYjNDM7XHRbSShBU1lOQ19NTV9URUFSRE9XTl9SRUpFQ1RFRCldXHQ9IFwmIzM0O2FzeW5jX21tX3RlYXJkb3duX3JlamVjdGVkXCYjMzQ7LFxuJiM0MzsjZW5kaWZcbiAjdW5kZWYgSVxuICNlbmRpZiAvKiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlMgKi9cbiB9O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE5IDE5OjQxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FTWU5DX01NX1RFQVJET1dOJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bW1fcmVhcGVyJiMzNDssCiAgICAmIzM0O2FzeW5jX21tX3RlYXJkb3duX3F1ZXVlJiMzNDssCiAgICAmIzM0O2FzeW5jX21tX3RlYXJkb3duX3Jlc2VydmUmIzM0OywKICAgICYjMzQ7YXN5bmNfbW1fdGVhcmRvd25fZWxpZ2libGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmZWF0dXJlIHRvIGFzeW5jaHJvbm91c2x5IHRlYXIgZG93biB0aGUgYWRkcmVzcyBzcGFjZSBvZiBleGl0aW5nIHByb2Nlc3NlcyB2aWEgYSBkZWRpY2F0ZWQga2VybmVsIHRocmVhZCAobW1fcmVhcGVyKS4gVGhpcyBtb2RpZmllcyBjb3JlIHByb2Nlc3MgZXhpdCBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMsIHdoaWNoIGlzIGhpZ2hseSBmdW5jdGlvbmFsIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxMWU1ZjUxOTcyNDcxMjc3YzMyYjQwZmY5NGFhYmJkODZhMDQ2MWVhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBKdWwgMTkgMTk6NDE6MzggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC92bS5yc3QgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC92bS5yc3QKaW5kZXggNWIzMThkMTdhYTRiNDQuLmNjZGE2Yzc1ZmUxZmI3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC92bS5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwvdm0ucnN0CkBAIC0yMiw2ICYjNDM7MjIsOSBAQCB0aGUgd3JpdGVvdXQgb2YgZGlydHkgZGF0YSB0byBkaXNrLgogQ3VycmVudGx5LCB0aGVzZSBmaWxlcyBhcmUgaW4gL3Byb2Mvc3lzL3ZtOgogCiAtIGFkbWluX3Jlc2VydmVfa2J5dGVzCiYjNDM7LSBhc3luY19tbV90ZWFyZG93bgomIzQzOy0gYXN5bmNfbW1fdGVhcmRvd25fbWF4X3BlbmRpbmdfcGFnZXMKJiM0MzstIGFzeW5jX21tX3RlYXJkb3duX3RocmVzaF9wYWdlcwogLSBjb21wYWN0X21lbW9yeQogLSBjb21wYWN0aW9uX3Byb2FjdGl2ZW5lc3MKIC0gY29tcGFjdF91bmV2aWN0YWJsZV9hbGxvd2VkCkBAIC0xMDgsNiAmIzQzOzExMSw0MSBAQCBPbiB4ODZfNjQgdGhpcyBpcyBhYm91dCAxMjhNQi4KIENoYW5naW5nIHRoaXMgdGFrZXMgZWZmZWN0IHdoZW5ldmVyIGFuIGFwcGxpY2F0aW9uIHJlcXVlc3RzIG1lbW9yeS4KIAogCiYjNDM7YXN5bmNfbW1fdGVhcmRvd24KJiM0Mzs9PT09PT09PT09PT09PT09PQomIzQzOwomIzQzO0F2YWlsYWJsZSBvbmx5IHdoZW4gQ09ORklHX0FTWU5DX01NX1RFQVJET1dOIGlzIHNldC4gQ29udHJvbHMgd2hldGhlciB0aGUKJiM0MzthZGRyZXNzLXNwYWNlIHRlYXJkb3duIChleGl0X21tYXAoKSkgb2YgbGFyZ2UgZXhpdGluZyBwcm9jZXNzZXMgaXMgZGVmZXJyZWQKJiM0Mzt0byB0aGUgbW1fcmVhcGVyIGtlcm5lbCB0aHJlYWQgaW5zdGVhZCBvZiBydW5uaW5nIG9uIHRoZSBleGl0aW5nIENQVS4KJiM0MzsKJiM0MztXcml0aW5nIDEgZW5hYmxlcyBkZWZlcnJhbCwgMCBkaXNhYmxlcyBpdC4gRGlzYWJsaW5nIG1ha2VzIG1tcHV0X2V4aXQoKSB0ZWFyCiYjNDM7ZG93biBpbmxpbmUgYWdhaW47IGl0IGRvZXMgbm90IGRyYWluIG1tcyBhbHJlYWR5IHF1ZXVlZC4gRGVmYXVsdHMgdG8gMC4KJiM0MzsKJiM0MztEZWZlcnJlZCB0ZWFyZG93biBjb25zdW1lcyBDUFUgaW4gdGhlIG1tX3JlYXBlciBrZXJuZWwgdGhyZWFkLCB3aGljaCBydW5zIGluCiYjNDM7dGhlIHJvb3QgY2dyb3VwOiB0aGUgdGVhcmRvd24gd29yayBvZiBhIHRhc2sgaW4gYSBDUFUtbGltaXRlZCBjZ3JvdXAgaXMgbm90CiYjNDM7Y2hhcmdlZCB0byB0aGF0IGNncm91cCwgc2ltaWxhciB0byBrc3dhcGQgYW5kIHRoZSBvb21fcmVhcGVyLiBDb25zaWRlciB0aGlzCiYjNDM7YmVmb3JlIGVuYWJsaW5nIHRoZSBmZWF0dXJlIG9uIHN5c3RlbXMgdGhhdCByZWx5IG9uIHN0cmljdCBwZXItY2dyb3VwIENQVQomIzQzO2FjY291bnRpbmcuCiYjNDM7CiYjNDM7CiYjNDM7YXN5bmNfbW1fdGVhcmRvd25fbWF4X3BlbmRpbmdfcGFnZXMKJiM0Mzs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQomIzQzOwomIzQzO0F2YWlsYWJsZSBvbmx5IHdoZW4gQ09ORklHX0FTWU5DX01NX1RFQVJET1dOIGlzIHNldC4gQmFja3ByZXNzdXJlIGNhcCwgaW4KJiM0MztwYWdlcywgb24gdGhlIHRvdGFsIFJTUyBvZiBtbXMgcXVldWVkIGZvciB0aGUgbW1fcmVhcGVyIGJ1dCBub3QgeWV0IHRvcm4KJiM0Mztkb3duLiBBbiBleGl0IHRoYXQgd291bGQgcHVzaCB0aGUgdG90YWwgb3ZlciB0aGlzIGNhcCB0ZWFycyBkb3duCiYjNDM7c3luY2hyb25vdXNseSBpbnN0ZWFkIG9mIHF1ZXVpbmcuIERlZmF1bHRzIHRvIHRvdGFscmFtX3BhZ2VzKCkgLyA0LgomIzQzOwomIzQzOwomIzQzO2FzeW5jX21tX3RlYXJkb3duX3RocmVzaF9wYWdlcwomIzQzOz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQomIzQzOwomIzQzO0F2YWlsYWJsZSBvbmx5IHdoZW4gQ09ORklHX0FTWU5DX01NX1RFQVJET1dOIGlzIHNldC4gTWluaW11bSBSU1MsIGluIHBhZ2VzLAomIzQzO2ZvciBhbiBleGl0aW5nIG1tIHRvIGJlIGVsaWdpYmxlIGZvciBkZWZlcnJhbCB0byB0aGUgbW1fcmVhcGVyLiBFeGl0aW5nIG1tcwomIzQzO2JlbG93IHRoaXMgdGhyZXNob2xkIGFyZSBhbHdheXMgdG9ybiBkb3duIHN5bmNocm9ub3VzbHkuIERlZmF1bHRzIHRvIDY0TUIKJiM0Mzt3b3J0aCBvZiBwYWdlcy4KJiM0MzsKJiM0MzsKIGNvbXBhY3RfbWVtb3J5CiA9PT09PT09PT09PT09PQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgKaW5kZXggOTM5YjVlYThjOWUwYmUuLmVlNmMwYWM4NGIzZDU5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oCkBAIC03LDYgJiM0Mzs3LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9hdXh2ZWMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9rcmVmLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbGlzdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9sbGlzdC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NwaW5sb2NrLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcmJ0cmVlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbWFwbGVfdHJlZS5oJmd0OwpAQCAtMTM2Nyw2ICYjNDM7MTM2OCwxMCBAQCBzdHJ1Y3QgbW1fc3RydWN0IHsKIAkJYXRvbWljX2xvbmdfdCBodWdldGxiX3VzYWdlOwogI2VuZGlmCiAJCXN0cnVjdCB3b3JrX3N0cnVjdCBhc3luY19wdXRfd29yazsKJiM0MzsjaWZkZWYgQ09ORklHX0FTWU5DX01NX1RFQVJET1dOCiYjNDM7CQlzdHJ1Y3QgbGxpc3Rfbm9kZSBhc3luY19yZWFwX25vZGU7CiYjNDM7CQl1bnNpZ25lZCBsb25nIGFzeW5jX3JlYXBfcnNzOwomIzQzOyNlbmRpZiAvKiBDT05GSUdfQVNZTkNfTU1fVEVBUkRPV04gKi8KIAogI2lmZGVmIENPTkZJR19JT01NVV9NTV9EQVRBCiAJCXN0cnVjdCBpb21tdV9tbV9kYXRhICppb21tdV9tbTsKQEAgLTE5ODUsNiAmIzQzOzE5OTAsMTYgQEAgZW51bSB7CiAjZGVmaW5lIE1NRl9UT1BET1dOCQkzMQkvKiBtbSBzZWFyY2hlcyB0b3AgZG93biBieSBkZWZhdWx0ICovCiAjZGVmaW5lIE1NRl9UT1BET1dOX01BU0sJQklUKE1NRl9UT1BET1dOKQogCiYjNDM7LyoKJiM0MzsgKiBtbSBpcyB0aGUgdGFyZ2V0IG9mIGFuIGluLWZsaWdodCBPT00ga2lsbC4gT25seSB3cml0dGVuIHVuZGVyCiYjNDM7ICogQ09ORklHX0FTWU5DX01NX1RFQVJET1dOIHRvZGF5LiBTdGlja3k6IG5ldmVyIGNsZWFyZWQgLS0gdGhlIG1tIGlzCiYjNDM7ICogZHlpbmcgKF9fb29tX2tpbGxfcHJvY2VzcygpIGtpbGxzIGV2ZXJ5IHByb2Nlc3Mgc2hhcmluZyBpdCksIGFuZCBhCiYjNDM7ICogaHlwb3RoZXRpY2FsIHN1cnZpdmluZyBzaGFyZXIgd291bGQgbWVyZWx5IGtlZXAgdGVhcmluZyBkb3duCiYjNDM7ICogc3luY2hyb25vdXNseS4gQWJvdmUgYml0IDMxLCBzbyBpdCBpcyBvdXRzaWRlIE1NRl9JTklUX0xFR0FDWV9NQVNLJiMzOTtzCiYjNDM7ICogZG9tYWluIGVudGlyZWx5IGFuZCBpcyBuZXZlciBpbmhlcml0ZWQgb24gZm9yay4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIE1NRl9PT01fVEFSR0VURUQJMzIKJiM0MzsKICNkZWZpbmUgTU1GX0lOSVRfTEVHQUNZX01BU0sJKE1NRl9EVU1QX0ZJTFRFUl9NQVNLIHxcCiAJCQkJIE1NRl9ESVNBQkxFX1RIUF9NQVNLIHwgTU1GX0hBU19NRFdFX01BU0sgfFwKIAkJCQkgTU1GX1ZNX01FUkdFX0FOWV9NQVNLIHwgTU1GX1RPUERPV05fTUFTSykKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NoZWQvbW0uaCBiL2luY2x1ZGUvbGludXgvc2NoZWQvbW0uaAppbmRleCAxMGJlOGE1NGI0MTZmOS4uMjBhZWIxZDdlZDMxYjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2NoZWQvbW0uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmgKQEAgLTE0Nyw2ICYjNDM7MTQ3LDEyIEBAIGV4dGVybiB2b2lkIG1tcHV0KHN0cnVjdCBtbV9zdHJ1Y3QgKik7CiB2b2lkIG1tcHV0X2FzeW5jKHN0cnVjdCBtbV9zdHJ1Y3QgKik7CiAjZW5kaWYKIAomIzQzOyNpZmRlZiBDT05GSUdfQVNZTkNfTU1fVEVBUkRPV04KJiM0Mzt2b2lkIG1tcHV0X2V4aXQoc3RydWN0IG1tX3N0cnVjdCAqKTsKJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBtbXB1dF9leGl0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKSB7IG1tcHV0KG1tKTsgfQomIzQzOyNlbmRpZgomIzQzOwogLyogR3JhYiBhIHJlZmVyZW5jZSB0byBhIHRhc2smIzM5O3MgbW0sIGlmIGl0IGlzIG5vdCBhbHJlYWR5IGdvaW5nIGF3YXkgKi8KIGV4dGVybiBzdHJ1Y3QgbW1fc3RydWN0ICpnZXRfdGFza19tbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spOwogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdm1fZXZlbnRfaXRlbS5oIGIvaW5jbHVkZS9saW51eC92bV9ldmVudF9pdGVtLmgKaW5kZXggMjYyOGNjZGEwNzZhMDcuLmRlNGRjMjBiN2Y4N2RlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3ZtX2V2ZW50X2l0ZW0uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3ZtX2V2ZW50X2l0ZW0uaApAQCAtMTc5LDYgJiM0MzsxNzksMTEgQEAgZW51bSB2bV9ldmVudF9pdGVtIHsgUEdQR0lOLCBQR1BHT1VULCBQU1dQSU4sIFBTV1BPVVQsCiAJCU5SU1dQSU4sCiAJCU5SU1dQT1VULAogI2VuZGlmIC8qIENPTkZJR19TV0FQICovCiYjNDM7I2lmZGVmIENPTkZJR19BU1lOQ19NTV9URUFSRE9XTgomIzQzOwkJQVNZTkNfTU1fVEVBUkRPV05fUVVFVUVELAomIzQzOwkJQVNZTkNfTU1fVEVBUkRPV05fU1lOQywKJiM0MzsJCUFTWU5DX01NX1RFQVJET1dOX1JFSkVDVEVELAomIzQzOyNlbmRpZgogCQlOUl9WTV9FVkVOVF9JVEVNUwogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvbW1fcmVhcGVyLmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9tbV9yZWFwZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uMzE1YmNlZDdjNDI1M2QKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9tbV9yZWFwZXIuaApAQCAtMCwwICYjNDM7MSw3MyBAQAomIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCiYjNDM7I3VuZGVmIFRSQUNFX1NZU1RFTQomIzQzOyNkZWZpbmUgVFJBQ0VfU1lTVEVNIG1tX3JlYXBlcgomIzQzOwomIzQzOyNpZiAhZGVmaW5lZChfVFJBQ0VfTU1fUkVBUEVSX0gpIHx8IGRlZmluZWQoVFJBQ0VfSEVBREVSX01VTFRJX1JFQUQpCiYjNDM7I2RlZmluZSBfVFJBQ0VfTU1fUkVBUEVSX0gKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdHJhY2Vwb2ludC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zY2hlZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC90b3BvbG9neS5oJmd0OwomIzQzOwomIzQzO1RSQUNFX0VWRU5UKG1tX2FzeW5jX3RlYXJkb3duX3F1ZXVlLAomIzQzOwomIzQzOwlUUF9QUk9UTyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyByc3MpLAomIzQzOwomIzQzOwlUUF9BUkdTKG1tLCByc3MpLAomIzQzOwomIzQzOwlUUF9TVFJVQ1RfX2VudHJ5KAomIzQzOwkJX19maWVsZChzdHJ1Y3QgbW1fc3RydWN0ICosIG1tKQomIzQzOwkJX19maWVsZChpbnQsIHBpZCkKJiM0MzsJCV9fYXJyYXkoY2hhciwgY29tbSwgVEFTS19DT01NX0xFTikKJiM0MzsJCV9fZmllbGQodW5zaWduZWQgbG9uZywgcnNzKQomIzQzOwkJX19maWVsZChpbnQsIG5vZGUpCiYjNDM7CSksCiYjNDM7CiYjNDM7CVRQX2Zhc3RfYXNzaWduKAomIzQzOwkJX19lbnRyeS0mZ3Q7bW0gPSBtbTsKJiM0MzsJCV9fZW50cnktJmd0O3BpZCA9IGN1cnJlbnQtJmd0O3BpZDsKJiM0MzsJCW1lbWNweShfX2VudHJ5LSZndDtjb21tLCBjdXJyZW50LSZndDtjb21tLCBUQVNLX0NPTU1fTEVOKTsKJiM0MzsJCV9fZW50cnktJmd0O3JzcyA9IHJzczsKJiM0MzsJCV9fZW50cnktJmd0O25vZGUgPSBudW1hX25vZGVfaWQoKTsKJiM0MzsJKSwKJiM0MzsKJiM0MzsJVFBfcHJpbnRrKCYjMzQ7bW09JXAgcGlkPSVkIGNvbW09JXMgcnNzPSVsdWtCIG5vZGU9JWQmIzM0OywKJiM0MzsJCV9fZW50cnktJmd0O21tLAomIzQzOwkJX19lbnRyeS0mZ3Q7cGlkLAomIzQzOwkJX19lbnRyeS0mZ3Q7Y29tbSwKJiM0MzsJCV9fZW50cnktJmd0O3JzcyAmbHQ7Jmx0OyAoUEFHRV9TSElGVCAtIDEwKSwKJiM0MzsJCV9fZW50cnktJmd0O25vZGUKJiM0MzsJKQomIzQzOyk7CiYjNDM7CiYjNDM7VFJBQ0VfRVZFTlQobW1fYXN5bmNfdGVhcmRvd25fcmVhcCwKJiM0MzsKJiM0MzsJVFBfUFJPVE8oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgY2hhcmdlZF9yc3MsIHVuc2lnbmVkIGxvbmcgbGl2ZV9yc3MpLAomIzQzOwomIzQzOwlUUF9BUkdTKG1tLCBjaGFyZ2VkX3JzcywgbGl2ZV9yc3MpLAomIzQzOwomIzQzOwlUUF9TVFJVQ1RfX2VudHJ5KAomIzQzOwkJX19maWVsZChzdHJ1Y3QgbW1fc3RydWN0ICosIG1tKQomIzQzOwkJX19maWVsZCh1bnNpZ25lZCBsb25nLCBjaGFyZ2VkX3JzcykKJiM0MzsJCV9fZmllbGQodW5zaWduZWQgbG9uZywgbGl2ZV9yc3MpCiYjNDM7CQlfX2ZpZWxkKGludCwgbm9kZSkKJiM0MzsJKSwKJiM0MzsKJiM0MzsJVFBfZmFzdF9hc3NpZ24oCiYjNDM7CQlfX2VudHJ5LSZndDttbSA9IG1tOwomIzQzOwkJX19lbnRyeS0mZ3Q7Y2hhcmdlZF9yc3MgPSBjaGFyZ2VkX3JzczsKJiM0MzsJCV9fZW50cnktJmd0O2xpdmVfcnNzID0gbGl2ZV9yc3M7CiYjNDM7CQlfX2VudHJ5LSZndDtub2RlID0gbnVtYV9ub2RlX2lkKCk7CiYjNDM7CSksCiYjNDM7CiYjNDM7CVRQX3ByaW50aygmIzM0O21tPSVwIGNoYXJnZWRfcnNzPSVsdWtCIGxpdmVfcnNzPSVsdWtCIG5vZGU9JWQmIzM0OywKJiM0MzsJCV9fZW50cnktJmd0O21tLAomIzQzOwkJX19lbnRyeS0mZ3Q7Y2hhcmdlZF9yc3MgJmx0OyZsdDsgKFBBR0VfU0hJRlQgLSAxMCksCiYjNDM7CQlfX2VudHJ5LSZndDtsaXZlX3JzcyAmbHQ7Jmx0OyAoUEFHRV9TSElGVCAtIDEwKSwKJiM0MzsJCV9fZW50cnktJmd0O25vZGUKJiM0MzsJKQomIzQzOyk7CiYjNDM7CiYjNDM7I2VuZGlmIC8qIF9UUkFDRV9NTV9SRUFQRVJfSCAqLwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDt0cmFjZS9kZWZpbmVfdHJhY2UuaCZndDsKZGlmZiAtLWdpdCBhL2tlcm5lbC9leGl0LmMgYi9rZXJuZWwvZXhpdC5jCmluZGV4IDEwNTY0MjJiYzEwMTNlLi42Zjk3ZDIwNGY5ZmNhYyAxMDA2NDQKLS0tIGEva2VybmVsL2V4aXQuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvZXhpdC5jCkBAIC02MDcsNyAmIzQzOzYwNyw3IEBAIHN0YXRpYyB2b2lkIGV4aXRfbW0odm9pZCkKIAl0YXNrX3VubG9jayhjdXJyZW50KTsKIAltbWFwX3JlYWRfdW5sb2NrKG1tKTsKIAltbV91cGRhdGVfbmV4dF9vd25lcihtbSk7Ci0JbW1wdXQobW0pOwomIzQzOwltbXB1dF9leGl0KG1tKTsKIAlpZiAodGVzdF90aHJlYWRfZmxhZyhUSUZfTUVNRElFKSkKIAkJZXhpdF9vb21fdmljdGltKCk7CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwvZm9yay5jIGIva2VybmVsL2ZvcmsuYwppbmRleCBmMGUyZTEzMWE5YTVhZi4uNGJkZmZhMTg4ZjUyMjQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9mb3JrLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2ZvcmsuYwpAQCAtMTEyLDYgJiM0MzsxMTIsOCBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3Vud2luZF9kZWZlcnJlZC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BnYWxsb2MuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC91YWNjZXNzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkL2lzb2xhdGlvbi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zaXplcy5oJmd0OwogCiAjaW5jbHVkZSAmbHQ7YXNtL21tdV9jb250ZXh0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL2NhY2hlZmx1c2guaCZndDsKQEAgLTEyNCw2ICYjNDM7MTI2LDkgQEAKIAogI2RlZmluZSBDUkVBVEVfVFJBQ0VfUE9JTlRTCiAjaW5jbHVkZSAmbHQ7dHJhY2UvZXZlbnRzL3Rhc2suaCZndDsKJiM0MzsjaWZkZWYgQ09ORklHX0FTWU5DX01NX1RFQVJET1dOCiYjNDM7I2luY2x1ZGUgJmx0O3RyYWNlL2V2ZW50cy9tbV9yZWFwZXIuaCZndDsKJiM0MzsjZW5kaWYKIAogI2luY2x1ZGUgJmx0O2t1bml0L3Zpc2liaWxpdHkuaCZndDsKIApAQCAtMzQwNywzICYjNDM7MzQxMiwxOTcgQEAgc3RhdGljIGludCBfX2luaXQgaW5pdF9mb3JrX3N5c2N0bCh2b2lkKQogfQogCiBzdWJzeXNfaW5pdGNhbGwoaW5pdF9mb3JrX3N5c2N0bCk7CiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19BU1lOQ19NTV9URUFSRE9XTgomIzQzO3N0YXRpYyBMTElTVF9IRUFEKG1tX3JlYXBlcl9saXN0KTsKJiM0MztzdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQobW1fcmVhcGVyX3dhaXQpOwomIzQzO3N0YXRpYyBhdG9taWNfbG9uZ190IG1tX3JlYXBlcl9wZW5kaW5nX3BhZ2VzOwomIzQzO3N0YXRpYyBERUZJTkVfU1RBVElDX0tFWV9GQUxTRShhc3luY19tbV90ZWFyZG93bl9rZXkpOwomIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIHN5c2N0bF9hc3luY19tbV90ZWFyZG93bl90aHJlc2hfcGFnZXM7CiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgc3lzY3RsX2FzeW5jX21tX3RlYXJkb3duX21heF9wZW5kaW5nX3BhZ2VzOwomIzQzOyNpZmRlZiBDT05GSUdfU1lTQ1RMCiYjNDM7c3RhdGljIHU4IHN5c2N0bF9hc3luY19tbV90ZWFyZG93bl9lbmFibGVkOwomIzQzO3N0YXRpYyBERUZJTkVfTVVURVgoYXN5bmNfbW1fdGVhcmRvd25fbG9jayk7CiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgYXN5bmNfbW1fdGVhcmRvd25fZWxpZ2libGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgcnNzKQomIzQzO3sKJiM0MzsJaWYgKHJzcyAmbHQ7IFJFQURfT05DRShzeXNjdGxfYXN5bmNfbW1fdGVhcmRvd25fdGhyZXNoX3BhZ2VzKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJaWYgKG1tX2ZsYWdzX3Rlc3QoTU1GX09PTV9TS0lQLCBtbSkpCS8qIHJlYXBlZCwgb3IgaGlkZGVuIGZyb20gdGhlIHJlYXBlciAqLwomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwkvKgomIzQzOwkgKiBNTUZfT09NX1RBUkdFVEVEIGlzIHNldCBieSB0aGUgT09NIGtpbGxlciB3aGlsZSBzb21lIHRhc2sgc3RpbGwKJiM0MzsJICogaG9sZHMgYSBsaXZlIHJlZmVyZW5jZSB0byB0aGlzIG1tIChzZWUgbWFya19vb21fdmljdGltKCkgYW5kCiYjNDM7CSAqIF9fb29tX2tpbGxfcHJvY2VzcygpKSwgYW5kIHRoaXMgZWxpZ2liaWxpdHkgY2hlY2sgaXMgcmVhY2hlZCBvbmx5CiYjNDM7CSAqIGZyb20gbW1wdXRfZXhpdCgpLCBhZnRlciBtbV91c2VycyBoYXMgZHJvcHBlZCB0byAwIC0tIHNvIG1hcmtpbmcKJiM0MzsJICogYW5kIHRoaXMgY2hlY2sgY2FuIG5ldmVyIG92ZXJsYXAgaW4gdGltZS4gV2hpY2hldmVyIHRocmVhZAomIzQzOwkgKiBwZXJmb3JtcyB0aGUgZmluYWwgZGVjcmVtZW50IGlzIHRoZXJlZm9yZSBndWFyYW50ZWVkIHRvIG9ic2VydmUKJiM0MzsJICogdGhlIGZsYWcgYWxyZWFkeSBzZXQsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGF0IHRocmVhZCB3YXMKJiM0MzsJICogaXRzZWxmIGV2ZXIgcGFzc2VkIHRvIG1hcmtfb29tX3ZpY3RpbSgpIChhIENMT05FX1ZNLXNoYXJpbmcKJiM0MzsJICogcHJvY2VzcyBpbiBhbm90aGVyIHRocmVhZCBncm91cCBuZXZlciBpcywgYnV0IHN0aWxsIG9ic2VydmVzCiYjNDM7CSAqIHRoaXMgZmxhZyBvbiB0aGUgc2hhcmVkIG1tKS4KJiM0MzsJICovCiYjNDM7CWlmIChtbV9mbGFnc190ZXN0KE1NRl9PT01fVEFSR0VURUQsIG1tKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogQ2hhcmdlIHJzcyBhZ2FpbnN0IHRoZSBwZW5kaW5nLXRlYXJkb3duIGJ1ZGdldC4gIFJldHVybnMgdHJ1ZSBpZiBpdCBmaXRzCiYjNDM7ICogdW5kZXIgdGhlIGNhcCwgaW4gd2hpY2ggY2FzZSB0aGUgY2FsbGVyIGVucXVldWVzIGFuZCB0aGUgcmVhcGVyIHJlbGVhc2VzCiYjNDM7ICogdGhlIHNhbWUgcnNzIGFmdGVyIF9fbW1wdXQoKS4gIE9uIG92ZXJzaG9vdCBub3RoaW5nIHN0YXlzIGNoYXJnZWQgYW5kIHRoZQomIzQzOyAqIGNhbGxlciBtdXN0IHRlYXIgZG93biBzeW5jaHJvbm91c2x5LgomIzQzOyAqLwomIzQzO3N0YXRpYyBib29sIGFzeW5jX21tX3RlYXJkb3duX3Jlc2VydmUodW5zaWduZWQgbG9uZyByc3MpCiYjNDM7ewomIzQzOwlpZiAoYXRvbWljX2xvbmdfYWRkX3JldHVybihyc3MsICZhbXA7bW1fcmVhcGVyX3BlbmRpbmdfcGFnZXMpICZndDsKJiM0MzsJICAgIFJFQURfT05DRShzeXNjdGxfYXN5bmNfbW1fdGVhcmRvd25fbWF4X3BlbmRpbmdfcGFnZXMpKSB7CiYjNDM7CQlhdG9taWNfbG9uZ19zdWIocnNzLCAmYW1wO21tX3JlYXBlcl9wZW5kaW5nX3BhZ2VzKTsKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgYXN5bmNfbW1fdGVhcmRvd25fcXVldWUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgcnNzKQomIzQzO3sKJiM0MzsJY291bnRfdm1fZXZlbnQoQVNZTkNfTU1fVEVBUkRPV05fUVVFVUVEKTsKJiM0MzsJdHJhY2VfbW1fYXN5bmNfdGVhcmRvd25fcXVldWUobW0sIHJzcyk7CiYjNDM7CWlmIChsbGlzdF9hZGQoJmFtcDttbS0mZ3Q7YXN5bmNfcmVhcF9ub2RlLCAmYW1wO21tX3JlYXBlcl9saXN0KSkKJiM0MzsJCXdha2VfdXAoJmFtcDttbV9yZWFwZXJfd2FpdCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgbW1fcmVhcGVyKHZvaWQgKnVudXNlZCkKJiM0Mzt7CiYjNDM7CXNldF9mcmVlemFibGUoKTsKJiM0MzsJd2hpbGUgKHRydWUpIHsKJiM0MzsJCXN0cnVjdCBsbGlzdF9ub2RlICpiYXRjaDsKJiM0MzsJCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCAqbjsKJiM0MzsKJiM0MzsJCXdhaXRfZXZlbnRfZnJlZXphYmxlKG1tX3JlYXBlcl93YWl0LCAhbGxpc3RfZW1wdHkoJmFtcDttbV9yZWFwZXJfbGlzdCkpOwomIzQzOwkJYmF0Y2ggPSBsbGlzdF9kZWxfYWxsKCZhbXA7bW1fcmVhcGVyX2xpc3QpOwomIzQzOwkJbGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShtbSwgbiwgYmF0Y2gsIGFzeW5jX3JlYXBfbm9kZSkgewomIzQzOwkJCXVuc2lnbmVkIGxvbmcgcGFnZXMgPSBtbS0mZ3Q7YXN5bmNfcmVhcF9yc3M7CiYjNDM7CQkJdW5zaWduZWQgbG9uZyBsaXZlID0gZ2V0X21tX3JzcyhtbSk7CiYjNDM7CiYjNDM7CQkJdHJhY2VfbW1fYXN5bmNfdGVhcmRvd25fcmVhcChtbSwgcGFnZXMsIGxpdmUpOwomIzQzOwomIzQzOwkJCV9fbW1wdXQobW0pOyAvKiBtYXkgZnJlZSBtbSB2aWEgbW1kcm9wICovCiYjNDM7CQkJYXRvbWljX2xvbmdfc3ViKHBhZ2VzLCAmYW1wO21tX3JlYXBlcl9wZW5kaW5nX3BhZ2VzKTsKJiM0MzsJCQljb25kX3Jlc2NoZWQoKTsKJiM0MzsJCQl0cnlfdG9fZnJlZXplKCk7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgbW1wdXRfZXhpdChzdHJ1Y3QgbW1fc3RydWN0ICptbSkKJiM0Mzt7CiYjNDM7CW1pZ2h0X3NsZWVwKCk7CiYjNDM7CS8qCiYjNDM7CSAqIEZ1bGx5IG9yZGVyZWQgUk1XOiBjb21iaW5lZCB3aXRoIGV4aXRfbW0oKSAob3IgZXhlY19tbWFwKCksIHRoZQomIzQzOwkgKiBvdGhlciBwYXRoIHRoYXQgc2hlZHMgLSZndDttbSkgY2xlYXJpbmcgLSZndDttbSB1bmRlciB0YXNrX2xvY2soKSBiZWZvcmUKJiM0MzsJICogdGhpcyBjYWxsLCBpdCBndWFyYW50ZWVzIE1NRl9PT01fVEFSR0VURUQgc2V0IGF0IGFueSBtYXJrIHNpdGUgaXMKJiM0MzsJICogdmlzaWJsZSBoZXJlIC0tIHNlZSBtYXJrX29vbV92aWN0aW0oKS4gQW55IG5ldyBjYWxsZXIgb2YKJiM0MzsJICogbW1wdXRfZXhpdCgpIG91dHNpZGUgZXhpdF9tbSgpIG11c3QgcmUtdmVyaWZ5IHRoYXQgYXJndW1lbnQuCiYjNDM7CSAqLwomIzQzOwlpZiAoIWF0b21pY19kZWNfYW5kX3Rlc3QoJmFtcDttbS0mZ3Q7bW1fdXNlcnMpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseSgmYW1wO2FzeW5jX21tX3RlYXJkb3duX2tleSkpIHsKJiM0MzsJCXVuc2lnbmVkIGxvbmcgcnNzID0gZ2V0X21tX3JzcyhtbSk7CiYjNDM7CiYjNDM7CQlpZiAoYXN5bmNfbW1fdGVhcmRvd25fZWxpZ2libGUobW0sIHJzcykpIHsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIGV4aXRfYWlvKCkgY2FuIGJsb2NrIGluZGVmaW5pdGVseS4gUnVuIGl0IGhlcmUgc28gYSBzdHVjawomIzQzOwkJCSAqIEFJTyBvbmx5IGhhbmdzIHRoaXMgdGFzayAoc2FtZSBhcyBob3cgaXQgd291bGQgaGFwcGVuIGluCiYjNDM7CQkJICogY2FzZSBvZiBzeW5jaHJvbm91cyBtbXB1dCgpKSBpbnN0ZWFkIG9mIHN0cmFuZGluZyBldmVyeQomIzQzOwkJCSAqIHRlYXJkb3duIHF1ZXVlZCBiZWhpbmQgdGhpcyBtbQomIzQzOwkJCSAqLwomIzQzOwkJCWV4aXRfYWlvKG1tKTsKJiM0MzsKJiM0MzsJCQlpZiAoYXN5bmNfbW1fdGVhcmRvd25fcmVzZXJ2ZShyc3MpKSB7CiYjNDM7CQkJCW1tLSZndDthc3luY19yZWFwX3JzcyA9IHJzczsKJiM0MzsJCQkJYXN5bmNfbW1fdGVhcmRvd25fcXVldWUobW0sIHJzcyk7CiYjNDM7CQkJCXJldHVybjsKJiM0MzsJCQl9CiYjNDM7CQkJY291bnRfdm1fZXZlbnQoQVNZTkNfTU1fVEVBUkRPV05fUkVKRUNURUQpOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CWNvdW50X3ZtX2V2ZW50KEFTWU5DX01NX1RFQVJET1dOX1NZTkMpOwomIzQzOwlfX21tcHV0KG1tKTsKJiM0Mzt9CiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19TWVNDVEwKJiM0MztzdGF0aWMgaW50IGFzeW5jX21tX3RlYXJkb3duX2VuYWJsZWRfaGFuZGxlcihjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwKJiM0MzsJCQkJCSAgICAgaW50IHdyaXRlLCB2b2lkICpidWZmZXIsCiYjNDM7CQkJCQkgICAgIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogU2VyaWFsaXplIGNvbmN1cnJlbnQgd3JpdGVycyBzbyB0aGUgc3RhdGljIGtleSBzdGF0ZSBhbHdheXMgbWF0Y2hlcwomIzQzOwkgKiB0aGUgbGFzdCB2YWx1ZSB3cml0dGVuIHRvIHRoZSB2YXJpYWJsZS4KJiM0MzsJICovCiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO2FzeW5jX21tX3RlYXJkb3duX2xvY2spOwomIzQzOwomIzQzOwlyZXQgPSBwcm9jX2RvdTh2ZWNfbWlubWF4KHRhYmxlLCB3cml0ZSwgYnVmZmVyLCBsZW5wLCBwcG9zKTsKJiM0MzsJaWYgKHJldCB8fCAhd3JpdGUpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlpZiAoc3lzY3RsX2FzeW5jX21tX3RlYXJkb3duX2VuYWJsZWQpCiYjNDM7CQlzdGF0aWNfYnJhbmNoX2VuYWJsZSgmYW1wO2FzeW5jX21tX3RlYXJkb3duX2tleSk7CiYjNDM7CWVsc2UKJiM0MzsJCXN0YXRpY19icmFuY2hfZGlzYWJsZSgmYW1wO2FzeW5jX21tX3RlYXJkb3duX2tleSk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBhc3luY19tbV90ZWFyZG93bl90YWJsZVtdID0gewomIzQzOwl7CiYjNDM7CQkucHJvY25hbWUJPSAmIzM0O2FzeW5jX21tX3RlYXJkb3duJiMzNDssCiYjNDM7CQkuZGF0YQkJPSAmYW1wO3N5c2N0bF9hc3luY19tbV90ZWFyZG93bl9lbmFibGVkLAomIzQzOwkJLm1heGxlbgkJPSBzaXplb2YodTgpLAomIzQzOwkJLm1vZGUJCT0gMDY0NCwKJiM0MzsJCS5wcm9jX2hhbmRsZXIJPSBhc3luY19tbV90ZWFyZG93bl9lbmFibGVkX2hhbmRsZXIsCiYjNDM7CQkuZXh0cmExCQk9IFNZU0NUTF9aRVJPLAomIzQzOwkJLmV4dHJhMgkJPSBTWVNDVExfT05FLAomIzQzOwl9LAomIzQzOwl7CiYjNDM7CQkucHJvY25hbWUJPSAmIzM0O2FzeW5jX21tX3RlYXJkb3duX3RocmVzaF9wYWdlcyYjMzQ7LAomIzQzOwkJLmRhdGEJCT0gJmFtcDtzeXNjdGxfYXN5bmNfbW1fdGVhcmRvd25fdGhyZXNoX3BhZ2VzLAomIzQzOwkJLm1heGxlbgkJPSBzaXplb2YodW5zaWduZWQgbG9uZyksCiYjNDM7CQkubW9kZQkJPSAwNjQ0LAomIzQzOwkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG91bG9uZ3ZlY19taW5tYXgsCiYjNDM7CX0sCiYjNDM7CXsKJiM0MzsJCS5wcm9jbmFtZQk9ICYjMzQ7YXN5bmNfbW1fdGVhcmRvd25fbWF4X3BlbmRpbmdfcGFnZXMmIzM0OywKJiM0MzsJCS5kYXRhCQk9ICZhbXA7c3lzY3RsX2FzeW5jX21tX3RlYXJkb3duX21heF9wZW5kaW5nX3BhZ2VzLAomIzQzOwkJLm1heGxlbgkJPSBzaXplb2YodW5zaWduZWQgbG9uZyksCiYjNDM7CQkubW9kZQkJPSAwNjQ0LAomIzQzOwkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG91bG9uZ3ZlY19taW5tYXgsCiYjNDM7CX0sCiYjNDM7fTsKJiM0MzsjZW5kaWYgLyogQ09ORklHX1NZU0NUTCAqLwomIzQzOwomIzQzO3N0YXRpYyBpbnQgX19pbml0IG1tX3JlYXBlcl9pbml0KHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRoOwomIzQzOwomIzQzOwl0aCA9IGt0aHJlYWRfY3JlYXRlKG1tX3JlYXBlciwgTlVMTCwgJiMzNDttbV9yZWFwZXImIzM0Oyk7CiYjNDM7CWlmIChJU19FUlIodGgpKSB7CiYjNDM7CQlwcl9lcnIoJiMzNDttbV9yZWFwZXI6IGZhaWxlZCB0byBzdGFydCBrdGhyZWFkOiAlbGRcbiYjMzQ7LCBQVFJfRVJSKHRoKSk7CiYjNDM7CQlyZXR1cm4gUFRSX0VSUih0aCk7CiYjNDM7CX0KJiM0MzsJc2V0X3VzZXJfbmljZSh0aCwgMTkpOyAvKiBtaW5pbWl6ZSBjb21wZXRpdGlvbiB3aXRoIG90aGVyIGZhaXIgY2xhc3MgdGFza3MgKi8KJiM0MzsJa3RocmVhZF9hZmZpbmVfcHJlZmVycmVkKHRoLCBob3VzZWtlZXBpbmdfY3B1bWFzayhIS19UWVBFX0tUSFJFQUQpKTsKJiM0MzsJc3lzY3RsX2FzeW5jX21tX3RlYXJkb3duX3RocmVzaF9wYWdlcyAgICAgID0gU1pfNjRNICZndDsmZ3Q7IFBBR0VfU0hJRlQ7CiYjNDM7CXN5c2N0bF9hc3luY19tbV90ZWFyZG93bl9tYXhfcGVuZGluZ19wYWdlcyA9IHRvdGFscmFtX3BhZ2VzKCkgLyA0OyAgLyogVE9ETzogcGxhY2Vob2xkZXIgKi8KJiM0MzsJd2FrZV91cF9wcm9jZXNzKHRoKTsKJiM0MzsjaWZkZWYgQ09ORklHX1NZU0NUTAomIzQzOwlyZWdpc3Rlcl9zeXNjdGxfaW5pdCgmIzM0O3ZtJiMzNDssIGFzeW5jX21tX3RlYXJkb3duX3RhYmxlKTsKJiM0MzsjZW5kaWYKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzO3N1YnN5c19pbml0Y2FsbChtbV9yZWFwZXJfaW5pdCk7CiYjNDM7I2VuZGlmCmRpZmYgLS1naXQgYS9tbS9LY29uZmlnIGIvbW0vS2NvbmZpZwppbmRleCBjNTJhYjZhZmNiMTU5Ni4uYTlkOTI1NDA2NjUzZjggMTAwNjQ0Ci0tLSBhL21tL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvbW0vS2NvbmZpZwpAQCAtMTUwMCw2ICYjNDM7MTUwMCwxOCBAQCBjb25maWcgTEFaWV9NTVVfTU9ERV9LVU5JVF9URVNUCiAKIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKJiM0Mztjb25maWcgQVNZTkNfTU1fVEVBUkRPV04KJiM0MzsJYm9vbCAmIzM0O0FzeW5jIG9mZi1DUFUgYWRkcmVzcyBzcGFjZSB0ZWFyZG93biBvbiBleGl0JiMzNDsKJiM0MzsJZGVwZW5kcyBvbiBNTVUKJiM0MzsJZGVmYXVsdCBuCiYjNDM7CWhlbHAKJiM0MzsJICBEZWZlciB0aGUgYWRkcmVzcyBzcGFjZSB0ZWFyZG93biAoZXhpdF9tbWFwKCkpIG9mIGxhcmdlIGV4aXRpbmcgcHJvY2Vzc2VzCiYjNDM7CSAgdG8gYSBrZXJuZWwgdGhyZWFkIGluc3RlYWQgb2YgcnVubmluZyBpdCBvbiB0aGUgZXhpdGluZyBDUFUuIFRoZSBmZWF0dXJlCiYjNDM7CSAgaXMgb2ZmIGJ5IGRlZmF1bHQgYW5kIGlzIGVuYWJsZWQgYXQgcnVudGltZSB2aWEgdGhlIHZtLmFzeW5jX21tX3RlYXJkb3duCiYjNDM7CSAgc3lzY3RsLgomIzQzOwomIzQzOwkgIElmIHVuc3VyZSwgc2F5IE4uCiYjNDM7CiBzb3VyY2UgJiMzNDttbS9kYW1vbi9LY29uZmlnJiMzNDsKIAogZW5kbWVudQpkaWZmIC0tZ2l0IGEvbW0vb29tX2tpbGwuYyBiL21tL29vbV9raWxsLmMKaW5kZXggNWYzNzJmNmUyNmZhMzIuLmI1NDkwZDFiMWJkMjYxIDEwMDY0NAotLS0gYS9tbS9vb21fa2lsbC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL29vbV9raWxsLmMKQEAgLTc1NCw2ICYjNDM7NzU0LDQwIEBAIHN0YXRpYyB2b2lkIG1hcmtfb29tX3ZpY3RpbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHRzay0mZ3Q7bW07CiAKIAlXQVJOX09OKG9vbV9raWxsZXJfZGlzYWJsZWQpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBNYXJrIHRoZSBtbSBpdHNlbGYsIG5vdCBqdXN0IHRoaXMgdGFzay9zaWduYWwsIGFzIGFuIE9PTSB0YXJnZXQsCiYjNDM7CSAqIHNvIHRoZSBkZWZlcnJlZC10ZWFyZG93biBwYXRoIGNhbiB0ZXN0IGl0IGZyb20gdGhlIG1tIGFsb25lLiBTZXQKJiM0MzsJICogYWhlYWQgb2YgdGhlIFRJRl9NRU1ESUUgdGVzdC1hbmQtc2V0IGJlbG93IHNvIHRoYXQgZXZlcnkgY2FsbAomIzQzOwkgKiBtYXJrcyB0aGUgbW0sIGluY2x1ZGluZyBhIHJlcGVhdCBtYXJrIG9uIGEgdGFzayB0aGF0IGlzIGFscmVhZHkKJiM0MzsJICogVElGX01FTURJRS4KJiM0MzsJICoKJiM0MzsJICogVGhpcyBpcyByZWxpYWJseSB2aXNpYmxlIHRvIHdoaWNoZXZlciB0aHJlYWQgZW5kcyB1cCBkcm9wcGluZyB0aGUKJiM0MzsJICogbGFzdCByZWZlcmVuY2UgaW4gbW1wdXRfZXhpdCgpOiBtYXJraW5nIGFuZCBxdWV1aW5nIGZvciBhc3luYwomIzQzOwkgKiB0ZWFyZG93biBjYW4gbmV2ZXIgb3ZlcmxhcCBpbiB0aW1lLiBFdmVyeSBjYWxsZXIgcmVhY2hlcyB0aGlzIHdpdGgKJiM0MzsJICogdHNrLSZndDttbSBzdGlsbCBzZXQgLS0gZWl0aGVyIHRzayBpcyBjdXJyZW50LCBtYXJraW5nIGl0c2VsZiBpbgomIzQzOwkgKiBwcm9ncmFtIG9yZGVyLCBvciB0c2sgaXMgdGFza19sb2NrKCllZCBieSB0aGUgY2FsbGVyICh0aGUKJiM0MzsJICogdGFza193aWxsX2ZyZWVfbWVtKCkgZmFzdCBwYXRoIGluIG9vbV9raWxsX3Byb2Nlc3MoKSkgLS0gd2hpbGUKJiM0MzsJICogbW1wdXRfZXhpdCgpLCB0aGUgb25seSBwYXRoIHRoYXQgcXVldWVzIGZvciB0ZWFyZG93biwgaXMgcmVhY2hlZAomIzQzOwkgKiBvbmx5IGFmdGVyIG1tX3VzZXJzIGhpdHMgMCwgd2hpY2ggcmVxdWlyZXMgdHNrJiMzOTtzIG93biBleGl0X21tKCkgKG9yCiYjNDM7CSAqIGV4ZWNfbW1hcCgpLCB0aGUgb3RoZXIgcGF0aCB0aGF0IHNoZWRzIC0mZ3Q7bW0pIHRvIGhhdmUgYWxyZWFkeQomIzQzOwkgKiBjbGVhcmVkIC0mZ3Q7bW0gdW5kZXIgdGhhdCBzYW1lIHRhc2tfbG9jaygpLiBQcm9ncmFtIG9yZGVyIG9yCiYjNDM7CSAqIHRhc2tfbG9jaygpIHJlbGVhc2UvYWNxdWlyZSB0aGVyZWZvcmUgb3JkZXJzIHRoaXMgc3RvcmUgYmVmb3JlCiYjNDM7CSAqIHRzayYjMzk7cyBvd24gZXZlbnR1YWwgbW1wdXRfZXhpdCgpLgomIzQzOwkgKgomIzQzOwkgKiBJZiBhIGRpZmZlcmVudCBDTE9ORV9WTSBzaGFyZXIgcGVyZm9ybXMgdGhlIGFjdHVhbCBmaW5hbCBkZWNyZW1lbnQKJiM0MzsJICogaW5zdGVhZCwgdGhlIG9yZGVyaW5nIGRvZXMgbm90IGNvbWUgZnJvbSB0aGlzIHN0b3JlOgomIzQzOwkgKiBtbV9mbGFnc19zZXQoKSBpcyBzZXRfYml0KCksIGEgbm9uLXZhbHVlLXJldHVybmluZyBSTVcsIHNvIGl0IGlzCiYjNDM7CSAqIHVub3JkZXJlZCBhbmQgY29udHJpYnV0ZXMgbm90aGluZyBvbiBpdHMgb3duLiBJdCBjb21lcyBmcm9tIHRoZQomIzQzOwkgKiBtYXJraW5nIHRhc2smIzM5O3Mgb3duIGF0b21pY19kZWNfYW5kX3Rlc3QoKSwgYSB2YWx1ZS1yZXR1cm5pbmcgUk1XCiYjNDM7CSAqIGFuZCB0aGVyZWZvcmUgZnVsbHkgb3JkZXJlZCAoYW4gc21wX21iKCkgYmVmb3JlIGFuZCBhZnRlcikuCiYjNDM7CSAqIERlY3JlbWVudHMgYXJlIHRvdGFsbHkgb3JkZXJlZCBpbiBtbV91c2VycyYjMzk7IG1vZGlmaWNhdGlvbiBvcmRlcgomIzQzOwkgKiB3aXRoIHRoZSB6ZXJvaW5nIG9uZSBsYXN0LCBzbyB0aGUgZ2VuZXJhbCBiYXJyaWVycyBvbiBib3RoIHNpZGVzCiYjNDM7CSAqIG1ha2UgdGhpcyBzdG9yZSB2aXNpYmxlIHRvIHdoaWNoZXZlciB0aHJlYWQgcGVyZm9ybXMgaXQuCiYjNDM7CSAqLwomIzQzOwlpZiAoSVNfRU5BQkxFRChDT05GSUdfQVNZTkNfTU1fVEVBUkRPV04pKQomIzQzOwkJbW1fZmxhZ3Nfc2V0KE1NRl9PT01fVEFSR0VURUQsIG1tKTsKJiM0MzsKIAkvKiBPT00ga2lsbGVyIG1pZ2h0IHJhY2Ugd2l0aCBtZW1jZyBPT00gKi8KIAlpZiAodGVzdF9hbmRfc2V0X3Rza190aHJlYWRfZmxhZyh0c2ssIFRJRl9NRU1ESUUpKQogCQlyZXR1cm47CkBAIC05MzEsNiAmIzQzOzk2NSwzMyBAQCBzdGF0aWMgdm9pZCBfX29vbV9raWxsX3Byb2Nlc3Moc3RydWN0IHRhc2tfc3RydWN0ICp2aWN0aW0sIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCiAJbW0gPSB2aWN0aW0tJmd0O21tOwogCW1tZ3JhYihtbSk7CiAKJiM0MzsJLyoKJiM0MzsJICogU2V0IHRoaXMgYmVmb3JlIGFueSBTSUdLSUxMIGZvciB0aGlzIGtpbGwgZXZlbnQgZ29lcyBvdXQgYmVsb3csCiYjNDM7CSAqIHdoaWxlIHRhc2tfbG9jayh2aWN0aW0pIChoZWxkIHNpbmNlIGZpbmRfbG9ja190YXNrX21tKCkgYWJvdmUpIGlzCiYjNDM7CSAqIHN0aWxsIGhlbGQuIFRoaXMgaXMgcmVsaWFibHkgdmlzaWJsZSB0byB3aGljaGV2ZXIgdGhyZWFkIGVuZHMgdXAKJiM0MzsJICogcnVubmluZyBtbXB1dF9leGl0KCkgYW5kIGRyb3BwaW5nIHRoZSBsYXN0IHJlZmVyZW5jZSB0byB0aGlzIG1tIC0tCiYjNDM7CSAqIHZpY3RpbSBpdHNlbGYsIGEgc2libGluZywgb3IgYSBDTE9ORV9WTSBzaGFyZXIgaW4gYW5vdGhlciB0aHJlYWQKJiM0MzsJICogZ3JvdXAgKHdoaWNoIG1hcmtfb29tX3ZpY3RpbSgpIG5ldmVyIG1hcmtzLCBidXQgd2hpY2ggc3RpbGwKJiM0MzsJICogb2JzZXJ2ZXMgdGhpcyBzdG9yZSBvbiB0aGUgc2hhcmVkIG1tKS4gTWFya2luZyBhbmQgcXVldWluZyBmb3IKJiM0MzsJICogYXN5bmMgdGVhcmRvd24gY2FuIG5ldmVyIG92ZXJsYXA6IG1tcHV0X2V4aXQoKSBpcyByZWFjaGVkIG9ubHkKJiM0MzsJICogYWZ0ZXIgbW1fdXNlcnMgaGl0cyAwLCBhbmQgdGhhdCByZXF1aXJlcyB2aWN0aW0mIzM5O3Mgb3duIGV4aXRfbW0oKQomIzQzOwkgKiAob3IgZXhlY19tbWFwKCksIHRoZSBvdGhlciBwYXRoIHRoYXQgc2hlZHMgLSZndDttbSkgdG8gaGF2ZSBjbGVhcmVkCiYjNDM7CSAqIC0mZ3Q7bW0gdW5kZXIgdGhpcyBzYW1lIHRhc2tfbG9jaygpIGZpcnN0LCB3aGljaCByZWxlYXNlL2FjcXVpcmUKJiM0MzsJICogb3JkZXJzIGFmdGVyIHRoZSBzdG9yZSBhYm92ZS4KJiM0MzsJICoKJiM0MzsJICogSWYgc29tZSBvdGhlciBzaGFyZXIgcGVyZm9ybXMgdGhlIGFjdHVhbCBmaW5hbCBkZWNyZW1lbnQgaW5zdGVhZCwKJiM0MzsJICogdGhlIG9yZGVyaW5nIGRvZXMgbm90IGNvbWUgZnJvbSB0aGlzIHN0b3JlOiBtbV9mbGFnc19zZXQoKSBpcwomIzQzOwkgKiBzZXRfYml0KCksIGEgbm9uLXZhbHVlLXJldHVybmluZyBSTVcsIHNvIGl0IGlzIHVub3JkZXJlZCBhbmQKJiM0MzsJICogY29udHJpYnV0ZXMgbm90aGluZyBvbiBpdHMgb3duLiBJdCBjb21lcyBmcm9tIHRoZSBtYXJraW5nIHRhc2smIzM5O3MKJiM0MzsJICogb3duIGF0b21pY19kZWNfYW5kX3Rlc3QoKSwgYSB2YWx1ZS1yZXR1cm5pbmcgUk1XIGFuZCB0aGVyZWZvcmUKJiM0MzsJICogZnVsbHkgb3JkZXJlZCAoYW4gc21wX21iKCkgYmVmb3JlIGFuZCBhZnRlcikuIERlY3JlbWVudHMgYXJlCiYjNDM7CSAqIHRvdGFsbHkgb3JkZXJlZCBpbiBtbV91c2VycyYjMzk7IG1vZGlmaWNhdGlvbiBvcmRlciB3aXRoIHRoZSB6ZXJvaW5nCiYjNDM7CSAqIG9uZSBsYXN0LCBzbyB0aGUgZ2VuZXJhbCBiYXJyaWVycyBvbiBib3RoIHNpZGVzIG1ha2UgdGhpcyBzdG9yZQomIzQzOwkgKiB2aXNpYmxlIHRvIHdoaWNoZXZlciB0aHJlYWQgcGVyZm9ybXMgaXQuCiYjNDM7CSAqLwomIzQzOwlpZiAoSVNfRU5BQkxFRChDT05GSUdfQVNZTkNfTU1fVEVBUkRPV04pKQomIzQzOwkJbW1fZmxhZ3Nfc2V0KE1NRl9PT01fVEFSR0VURUQsIG1tKTsKJiM0MzsKIAkvKiBSYWlzZSBldmVudCBiZWZvcmUgc2VuZGluZyBzaWduYWw6IHRhc2sgcmVhcGVyIG11c3Qgc2VlIHRoaXMgKi8KIAljb3VudF92bV9ldmVudChPT01fS0lMTCk7CiAJbWVtY2dfbWVtb3J5X2V2ZW50X21tKG1tLCBNRU1DR19PT01fS0lMTCk7CmRpZmYgLS1naXQgYS9tbS92bXN0YXQuYyBiL21tL3Ztc3RhdC5jCmluZGV4IDRlMjZlNWZkNjY2NjI2Li5lM2ZmMzAwMjdjMjRlZCAxMDA2NDQKLS0tIGEvbW0vdm1zdGF0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zdGF0LmMKQEAgLTE0OTQsNiAmIzQzOzE0OTQsMTEgQEAgY29uc3QgY2hhciAqIGNvbnN0IHZtc3RhdF90ZXh0W10gPSB7CiAJW0koTlJTV1BJTildCQkJCT0gJiMzNDtucnN3cGluJiMzNDssCiAJW0koTlJTV1BPVVQpXQkJCQk9ICYjMzQ7bnJzd3BvdXQmIzM0OywKICNlbmRpZiAvKiBDT05GSUdfU1dBUCAqLwomIzQzOyNpZmRlZiBDT05GSUdfQVNZTkNfTU1fVEVBUkRPV04KJiM0MzsJW0koQVNZTkNfTU1fVEVBUkRPV05fUVVFVUVEKV0JPSAmIzM0O2FzeW5jX21tX3RlYXJkb3duX3F1ZXVlZCYjMzQ7LAomIzQzOwlbSShBU1lOQ19NTV9URUFSRE9XTl9TWU5DKV0JCT0gJiMzNDthc3luY19tbV90ZWFyZG93bl9zeW5jJiMzNDssCiYjNDM7CVtJKEFTWU5DX01NX1RFQVJET1dOX1JFSkVDVEVEKV0JPSAmIzM0O2FzeW5jX21tX3RlYXJkb3duX3JlamVjdGVkJiMzNDssCiYjNDM7I2VuZGlmCiAjdW5kZWYgSQogI2VuZGlmIC8qIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUyAqLwogfTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTkgMTk6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODgxMwoJCQkJCQkJb3V0cHV0OiAxMzEKCQkJCQkJCXRob3VnaHRzOiAxMTI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRXZhbHVhdGlvbjogQXN5bmMgTU0gVGVhcmRvd24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2UgaGF2ZSBhIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2luZyBgQ09ORklHX0FTWU5DX01NX1RFQVJET1dOYC4gVGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBjaGFuZ2UuIEl0JiMzOTtzIGRlZmVycmluZyB0aGUgYWRkcmVzcyBzcGFjZSB0ZWFyZG93biAoYGV4aXRfbW1hcCgpYCkgb2YgZXhpdGluZyBwcm9jZXNzZXMgdG8gYSBrZXJuZWwgdGhyZWFkLCBgbW1fcmVhcGVyYC4gVGhpcyBmdW5kYW1lbnRhbGx5IGFsdGVycyBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHByb2Nlc3MgZXhpdCBhbmQgbWVtb3J5IG1hbmFnZW1lbnQuIFRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgKm5lZWRzKiBmdXp6aW5nLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBhZmZlY3RlZC4gYG1tcHV0X2V4aXRgLCBgbW1fcmVhcGVyYCwgYGFzeW5jX21tX3RlYXJkb3duX3F1ZXVlYCwgYGFzeW5jX21tX3RlYXJkb3duX3Jlc2VydmVgLCBhbmQgYGFzeW5jX21tX3RlYXJkb3duX2VsaWdpYmxlYCBpbW1lZGlhdGVseSBzdGFuZCBvdXQuIFRob3NlIGFyZSB0aGUga2V5IHBpZWNlcyBvZiB0aGUgbmV3IGxvZ2ljLiBUaGUgcGF0Y2ggYWxzbyBpbnRyb2R1Y2VzIGEgc3lzY3RsLCBgdm0uYXN5bmNfbW1fdGVhcmRvd25gLCB3aGljaCBpcyBpbXBvcnRhbnQgZm9yIGVuYWJsaW5nIHRoZSBmZWF0dXJlIGF0IHJ1bnRpbWUsIGFuZCBvZiBjb3Vyc2UsIHRoZSBgQ09ORklHX0FTWU5DX01NX1RFQVJET1dOYCBjb25maWcgb3B0aW9uLgoKVGhlIGNvZGUgbW9kaWZpY2F0aW9ucyBhcmUgaW4gYGtlcm5lbC9mb3JrLmNgLCBga2VybmVsL2V4aXQuY2AsIGFuZCBgbW0vb29tX2tpbGwuY2AuIExldCYjMzk7cyBlbnN1cmUgdGhlIHJlbGV2YW50IGNvZGUgcGF0aHMgY2FuIGJlIGV4ZWN1dGVkOyB0aGF0IGluY2x1ZGVzIHZlcmlmeWluZyB0aGUgc3lzY3RsIGFuZCBjb25maWcgb3B0aW9uLgoKQSBxdWljayByZXZpZXfigKYgdGhlIGNvbmZpZyBpcyBgQVNZTkNfTU1fVEVBUkRPV05gLiBPa2F5LCBnb29kLiBOb3csIGFib3V0IHRob3NlIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIGJlIGNhcmVmdWwuIFdoaWxlIGBtbXB1dF9leGl0YCBpcyBkaXJlY3RseSBpbnZvbHZlZCwgaXQmIzM5O3MgY2FsbGVkIGZyb20gYGV4aXRfbW1gLCB3aGljaCBpcyBhIGZyZXF1ZW50bHkgYWNjZXNzZWQgcGF0aC4gVGhlIG5ldyBsb2dpYyBpcyBpbiBgbW1wdXRfZXhpdGAgaXRzZWxmIHRob3VnaCwgc28gbGV0JiMzOTtzIGluY2x1ZGUgaXQuIGBtbV9yZWFwZXJgIGlzIHRoZSBrdGhyZWFkLCBpdCYjMzk7cyBkZWZpbml0ZWx5IG9uIHRoZSBsaXN0LiBgYXN5bmNfbW1fdGVhcmRvd25fcXVldWVgLCBgYXN5bmNfbW1fdGVhcmRvd25fcmVzZXJ2ZWAsIGFuZCBgYXN5bmNfbW1fdGVhcmRvd25fZWxpZ2libGVgIHNlZW0gdG8gYmUgdGhlIGNvcmUgb2YgdGhlIGFzeW5jIGxvZ2ljLgoKQWxyaWdodCwgdGhlIHBsYW4gaXMgdG8gY2FsbCBgc2V0LXJlc3VsdHNgIHdpdGg6CgoqICAgKipXb3J0aEZ1enppbmcqKjogYHRydWVgIChBYnNvbHV0ZWx5LiBUaGlzIGlzIGltcG9ydGFudC4pCiogICAqKkZvY3VzU3ltYm9scyoqOiBgWyYjMzQ7bW1fcmVhcGVyJiMzNDssICYjMzQ7YXN5bmNfbW1fdGVhcmRvd25fcXVldWUmIzM0OywgJiMzNDthc3luY19tbV90ZWFyZG93bl9yZXNlcnZlJiMzNDssICYjMzQ7YXN5bmNfbW1fdGVhcmRvd25fZWxpZ2libGUmIzM0OywgJiMzNDttbXB1dF9leGl0JiMzNDtdYCAoSSYjMzk7bSBsZWFuaW5nIHRvd2FyZHMgYG1tcHV0X2V4aXRgIGFzIHdlbGwgYmVjYXVzZSBpdCYjMzk7cyB3aGVyZSB0aGUgbmV3IGxvZ2ljIGludGVyc2VjdHMgd2l0aCB0aGUgaG90IHBhdGgpCiogICAqKkVuYWJsZUNvbmZpZ3MqKjogYFsmIzM0O0FTWU5DX01NX1RFQVJET1dOJiMzNDtdYCAoVGhpcyBpcyB0aGUgY3JpdGljYWwgY29uZmlnIHRvIGVuYWJsZSB0aGUgZmVhdHVyZS4pCiogICAqKlJlYXNvbmluZyoqOiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZlYXR1cmUgdG8gYXN5bmNocm9ub3VzbHkgdGVhciBkb3duIHRoZSBhZGRyZXNzIHNwYWNlIG9mIGV4aXRpbmcgcHJvY2Vzc2VzIHZpYSBhIGRlZGljYXRlZCBrZXJuZWwgdGhyZWFkIChgbW1fcmVhcGVyYCkuIFRoaXMgbW9kaWZpZXMgY29yZSBwcm9jZXNzIGV4aXQgYW5kIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLCB3aGljaCBpcyBoaWdobHkgZnVuY3Rpb25hbCBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OwoKSSYjMzk7bSBkb3VibGUtY2hlY2tpbmcgdGhlIGNvZGUgYWdhaW4gdG8gYmUgdGhvcm91Z2guIEl0JiMzOTtzIGVhc3kgdG8gbWlzcyBzb21ldGhpbmcgd2hlbiB5b3UmIzM5O3JlIGZvY3VzaW5nIG9uIHRoZSBjcml0aWNhbCBwYXRoLgoKV2FpdCBhIHNlY29uZOKApiBgbW1wdXRfZXhpdGAgaXMgaW52b2tlZCBvbiBldmVyeSB0YXNrIGV4aXQuIEkgd2FudCB0byBhdm9pZCBob3QgcGF0aHMsIGJ1dCBgbW1wdXRfZXhpdGAgaXMgdGhlIGVudHJ5IHBvaW50IGZvciB0aGUgbmV3IGxvZ2ljLiBgbW1fcmVhcGVyYCwgYGFzeW5jX21tX3RlYXJkb3duX3F1ZXVlYCwgYGFzeW5jX21tX3RlYXJkb3duX3Jlc2VydmVgLCBhbmQgYGFzeW5jX21tX3RlYXJkb3duX2VsaWdpYmxlYCBzZWVtcyBsaWtlIGEgYmV0dGVyIGZvY3VzLCBsZXQmIzM5O3Mga2VlcCBpdCB0aWdodCBvbiB0aGUgbmV3IGFkZGl0aW9ucy4KCk9uZSBtb3JlIHJldmlldy4gTm8gb3RoZXIgY3J1Y2lhbCBjb25maWcgZGVwZW5kZW5jaWVzLiBPa2F5LCBpdCBsb29rcyBsaWtlIGBBU1lOQ19NTV9URUFSRE9XTmAgaXMgdGhlIG1haW4gb25lLgoKTGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOSAxOTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QVNZTkNfTU1fVEVBUkRPV04mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttbV9yZWFwZXImIzM0OywKICAgICYjMzQ7YXN5bmNfbW1fdGVhcmRvd25fcXVldWUmIzM0OywKICAgICYjMzQ7YXN5bmNfbW1fdGVhcmRvd25fcmVzZXJ2ZSYjMzQ7LAogICAgJiMzNDthc3luY19tbV90ZWFyZG93bl9lbGlnaWJsZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZlYXR1cmUgdG8gYXN5bmNocm9ub3VzbHkgdGVhciBkb3duIHRoZSBhZGRyZXNzIHNwYWNlIG9mIGV4aXRpbmcgcHJvY2Vzc2VzIHZpYSBhIGRlZGljYXRlZCBrZXJuZWwgdGhyZWFkIChtbV9yZWFwZXIpLiBUaGlzIG1vZGlmaWVzIGNvcmUgcHJvY2VzcyBleGl0IGFuZCBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYywgd2hpY2ggaXMgaGlnaGx5IGZ1bmN0aW9uYWwgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FTWU5DX01NX1RFQVJET1dOJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bW1fcmVhcGVyJiMzNDssCiAgICAmIzM0O2FzeW5jX21tX3RlYXJkb3duX3F1ZXVlJiMzNDssCiAgICAmIzM0O2FzeW5jX21tX3RlYXJkb3duX3Jlc2VydmUmIzM0OywKICAgICYjMzQ7YXN5bmNfbW1fdGVhcmRvd25fZWxpZ2libGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmZWF0dXJlIHRvIGFzeW5jaHJvbm91c2x5IHRlYXIgZG93biB0aGUgYWRkcmVzcyBzcGFjZSBvZiBleGl0aW5nIHByb2Nlc3NlcyB2aWEgYSBkZWRpY2F0ZWQga2VybmVsIHRocmVhZCAobW1fcmVhcGVyKS4gVGhpcyBtb2RpZmllcyBjb3JlIHByb2Nlc3MgZXhpdCBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMsIHdoaWNoIGlzIGhpZ2hseSBmdW5jdGlvbmFsIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMTlUMTk6NDE6NDAuMzExNDc1MjYxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM5MTQ4MDUxNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQVNZTkNfTU1fVEVBUkRPV05cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtbV9yZWFwZXJcIixcbiAgICBcImFzeW5jX21tX3RlYXJkb3duX3F1ZXVlXCIsXG4gICAgXCJhc3luY19tbV90ZWFyZG93bl9yZXNlcnZlXCIsXG4gICAgXCJhc3luY19tbV90ZWFyZG93bl9lbGlnaWJsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmVhdHVyZSB0byBhc3luY2hyb25vdXNseSB0ZWFyIGRvd24gdGhlIGFkZHJlc3Mgc3BhY2Ugb2YgZXhpdGluZyBwcm9jZXNzZXMgdmlhIGEgZGVkaWNhdGVkIGtlcm5lbCB0aHJlYWQgKG1tX3JlYXBlcikuIFRoaXMgbW9kaWZpZXMgY29yZSBwcm9jZXNzIGV4aXQgYW5kIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLCB3aGljaCBpcyBoaWdobHkgZnVuY3Rpb25hbCBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTlUMTk6NDE6NDAuMzExNDc5NDIxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjYwNzk3NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxMWU1ZjUxOTcyNDcxMjc3YzMyYjQwZmY5NGFhYmJkODZhMDQ2MWVhXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gSnVsIDE5IDE5OjQxOjM4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL3ZtLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL3ZtLnJzdFxcbmluZGV4IDViMzE4ZDE3YWE0YjQ0Li5jY2RhNmM3NWZlMWZiNyAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC92bS5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC92bS5yc3RcXG5AQCAtMjIsNiArMjIsOSBAQCB0aGUgd3JpdGVvdXQgb2YgZGlydHkgZGF0YSB0byBkaXNrLlxcbiBDdXJyZW50bHksIHRoZXNlIGZpbGVzIGFyZSBpbiAvcHJvYy9zeXMvdm06XFxuIFxcbiAtIGFkbWluX3Jlc2VydmVfa2J5dGVzXFxuKy0gYXN5bmNfbW1fdGVhcmRvd25cXG4rLSBhc3luY19tbV90ZWFyZG93bl9tYXhfcGVuZGluZ19wYWdlc1xcbistIGFzeW5jX21tX3RlYXJkb3duX3RocmVzaF9wYWdlc1xcbiAtIGNvbXBhY3RfbWVtb3J5XFxuIC0gY29tcGFjdGlvbl9wcm9hY3RpdmVuZXNzXFxuIC0gY29tcGFjdF91bmV2aWN0YWJsZV9hbGxvd2VkXFxuQEAgLTEwOCw2ICsxMTEsNDEgQEAgT24geDg2XzY0IHRoaXMgaXMgYWJvdXQgMTI4TUIuXFxuIENoYW5naW5nIHRoaXMgdGFrZXMgZWZmZWN0IHdoZW5ldmVyIGFuIGFwcGxpY2F0aW9uIHJlcXVlc3RzIG1lbW9yeS5cXG4gXFxuIFxcbithc3luY19tbV90ZWFyZG93blxcbis9PT09PT09PT09PT09PT09PVxcbitcXG4rQXZhaWxhYmxlIG9ubHkgd2hlbiBDT05GSUdfQVNZTkNfTU1fVEVBUkRPV04gaXMgc2V0LiBDb250cm9scyB3aGV0aGVyIHRoZVxcbithZGRyZXNzLXNwYWNlIHRlYXJkb3duIChleGl0X21tYXAoKSkgb2YgbGFyZ2UgZXhpdGluZyBwcm9jZXNzZXMgaXMgZGVmZXJyZWRcXG4rdG8gdGhlIG1tX3JlYXBlciBrZXJuZWwgdGhyZWFkIGluc3RlYWQgb2YgcnVubmluZyBvbiB0aGUgZXhpdGluZyBDUFUuXFxuK1xcbitXcml0aW5nIDEgZW5hYmxlcyBkZWZlcnJhbCwgMCBkaXNhYmxlcyBpdC4gRGlzYWJsaW5nIG1ha2VzIG1tcHV0X2V4aXQoKSB0ZWFyXFxuK2Rvd24gaW5saW5lIGFnYWluOyBpdCBkb2VzIG5vdCBkcmFpbiBtbXMgYWxyZWFkeSBxdWV1ZWQuIERlZmF1bHRzIHRvIDAuXFxuK1xcbitEZWZlcnJlZCB0ZWFyZG93biBjb25zdW1lcyBDUFUgaW4gdGhlIG1tX3JlYXBlciBrZXJuZWwgdGhyZWFkLCB3aGljaCBydW5zIGluXFxuK3RoZSByb290IGNncm91cDogdGhlIHRlYXJkb3duIHdvcmsgb2YgYSB0YXNrIGluIGEgQ1BVLWxpbWl0ZWQgY2dyb3VwIGlzIG5vdFxcbitjaGFyZ2VkIHRvIHRoYXQgY2dyb3VwLCBzaW1pbGFyIHRvIGtzd2FwZCBhbmQgdGhlIG9vbV9yZWFwZXIuIENvbnNpZGVyIHRoaXNcXG4rYmVmb3JlIGVuYWJsaW5nIHRoZSBmZWF0dXJlIG9uIHN5c3RlbXMgdGhhdCByZWx5IG9uIHN0cmljdCBwZXItY2dyb3VwIENQVVxcbithY2NvdW50aW5nLlxcbitcXG4rXFxuK2FzeW5jX21tX3RlYXJkb3duX21heF9wZW5kaW5nX3BhZ2VzXFxuKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuK1xcbitBdmFpbGFibGUgb25seSB3aGVuIENPTkZJR19BU1lOQ19NTV9URUFSRE9XTiBpcyBzZXQuIEJhY2twcmVzc3VyZSBjYXAsIGluXFxuK3BhZ2VzLCBvbiB0aGUgdG90YWwgUlNTIG9mIG1tcyBxdWV1ZWQgZm9yIHRoZSBtbV9yZWFwZXIgYnV0IG5vdCB5ZXQgdG9yblxcbitkb3duLiBBbiBleGl0IHRoYXQgd291bGQgcHVzaCB0aGUgdG90YWwgb3ZlciB0aGlzIGNhcCB0ZWFycyBkb3duXFxuK3N5bmNocm9ub3VzbHkgaW5zdGVhZCBvZiBxdWV1aW5nLiBEZWZhdWx0cyB0byB0b3RhbHJhbV9wYWdlcygpIC8gNC5cXG4rXFxuK1xcbithc3luY19tbV90ZWFyZG93bl90aHJlc2hfcGFnZXNcXG4rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuK1xcbitBdmFpbGFibGUgb25seSB3aGVuIENPTkZJR19BU1lOQ19NTV9URUFSRE9XTiBpcyBzZXQuIE1pbmltdW0gUlNTLCBpbiBwYWdlcyxcXG4rZm9yIGFuIGV4aXRpbmcgbW0gdG8gYmUgZWxpZ2libGUgZm9yIGRlZmVycmFsIHRvIHRoZSBtbV9yZWFwZXIuIEV4aXRpbmcgbW1zXFxuK2JlbG93IHRoaXMgdGhyZXNob2xkIGFyZSBhbHdheXMgdG9ybiBkb3duIHN5bmNocm9ub3VzbHkuIERlZmF1bHRzIHRvIDY0TUJcXG4rd29ydGggb2YgcGFnZXMuXFxuK1xcbitcXG4gY29tcGFjdF9tZW1vcnlcXG4gPT09PT09PT09PT09PT1cXG4gXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaFxcbmluZGV4IDkzOWI1ZWE4YzllMGJlLi5lZTZjMGFjODRiM2Q1OSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmhcXG5AQCAtNyw2ICs3LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2F1eHZlYy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva3JlZi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbGlzdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbGxpc3QuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NwaW5sb2NrLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9yYnRyZWUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21hcGxlX3RyZWUuaFxcdTAwM2VcXG5AQCAtMTM2Nyw2ICsxMzY4LDEwIEBAIHN0cnVjdCBtbV9zdHJ1Y3Qge1xcbiBcXHRcXHRhdG9taWNfbG9uZ190IGh1Z2V0bGJfdXNhZ2U7XFxuICNlbmRpZlxcbiBcXHRcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgYXN5bmNfcHV0X3dvcms7XFxuKyNpZmRlZiBDT05GSUdfQVNZTkNfTU1fVEVBUkRPV05cXG4rXFx0XFx0c3RydWN0IGxsaXN0X25vZGUgYXN5bmNfcmVhcF9ub2RlO1xcbitcXHRcXHR1bnNpZ25lZCBsb25nIGFzeW5jX3JlYXBfcnNzO1xcbisjZW5kaWYgLyogQ09ORklHX0FTWU5DX01NX1RFQVJET1dOICovXFxuIFxcbiAjaWZkZWYgQ09ORklHX0lPTU1VX01NX0RBVEFcXG4gXFx0XFx0c3RydWN0IGlvbW11X21tX2RhdGEgKmlvbW11X21tO1xcbkBAIC0xOTg1LDYgKzE5OTAsMTYgQEAgZW51bSB7XFxuICNkZWZpbmUgTU1GX1RPUERPV05cXHRcXHQzMVxcdC8qIG1tIHNlYXJjaGVzIHRvcCBkb3duIGJ5IGRlZmF1bHQgKi9cXG4gI2RlZmluZSBNTUZfVE9QRE9XTl9NQVNLXFx0QklUKE1NRl9UT1BET1dOKVxcbiBcXG4rLypcXG4rICogbW0gaXMgdGhlIHRhcmdldCBvZiBhbiBpbi1mbGlnaHQgT09NIGtpbGwuIE9ubHkgd3JpdHRlbiB1bmRlclxcbisgKiBDT05GSUdfQVNZTkNfTU1fVEVBUkRPV04gdG9kYXkuIFN0aWNreTogbmV2ZXIgY2xlYXJlZCAtLSB0aGUgbW0gaXNcXG4rICogZHlpbmcgKF9fb29tX2tpbGxfcHJvY2VzcygpIGtpbGxzIGV2ZXJ5IHByb2Nlc3Mgc2hhcmluZyBpdCksIGFuZCBhXFxuKyAqIGh5cG90aGV0aWNhbCBzdXJ2aXZpbmcgc2hhcmVyIHdvdWxkIG1lcmVseSBrZWVwIHRlYXJpbmcgZG93blxcbisgKiBzeW5jaHJvbm91c2x5LiBBYm92ZSBiaXQgMzEsIHNvIGl0IGlzIG91dHNpZGUgTU1GX0lOSVRfTEVHQUNZX01BU0snc1xcbisgKiBkb21haW4gZW50aXJlbHkgYW5kIGlzIG5ldmVyIGluaGVyaXRlZCBvbiBmb3JrLlxcbisgKi9cXG4rI2RlZmluZSBNTUZfT09NX1RBUkdFVEVEXFx0MzJcXG4rXFxuICNkZWZpbmUgTU1GX0lOSVRfTEVHQUNZX01BU0tcXHQoTU1GX0RVTVBfRklMVEVSX01BU0sgfFxcXFxcXG4gXFx0XFx0XFx0XFx0IE1NRl9ESVNBQkxFX1RIUF9NQVNLIHwgTU1GX0hBU19NRFdFX01BU0sgfFxcXFxcXG4gXFx0XFx0XFx0XFx0IE1NRl9WTV9NRVJHRV9BTllfTUFTSyB8IE1NRl9UT1BET1dOX01BU0spXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NoZWQvbW0uaCBiL2luY2x1ZGUvbGludXgvc2NoZWQvbW0uaFxcbmluZGV4IDEwYmU4YTU0YjQxNmY5Li4yMGFlYjFkN2VkMzFiMCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmhcXG5AQCAtMTQ3LDYgKzE0NywxMiBAQCBleHRlcm4gdm9pZCBtbXB1dChzdHJ1Y3QgbW1fc3RydWN0ICopO1xcbiB2b2lkIG1tcHV0X2FzeW5jKHN0cnVjdCBtbV9zdHJ1Y3QgKik7XFxuICNlbmRpZlxcbiBcXG4rI2lmZGVmIENPTkZJR19BU1lOQ19NTV9URUFSRE9XTlxcbit2b2lkIG1tcHV0X2V4aXQoc3RydWN0IG1tX3N0cnVjdCAqKTtcXG4rI2Vsc2VcXG4rc3RhdGljIGlubGluZSB2b2lkIG1tcHV0X2V4aXQoc3RydWN0IG1tX3N0cnVjdCAqbW0pIHsgbW1wdXQobW0pOyB9XFxuKyNlbmRpZlxcbitcXG4gLyogR3JhYiBhIHJlZmVyZW5jZSB0byBhIHRhc2sncyBtbSwgaWYgaXQgaXMgbm90IGFscmVhZHkgZ29pbmcgYXdheSAqL1xcbiBleHRlcm4gc3RydWN0IG1tX3N0cnVjdCAqZ2V0X3Rhc2tfbW0oc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKTtcXG4gLypcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92bV9ldmVudF9pdGVtLmggYi9pbmNsdWRlL2xpbnV4L3ZtX2V2ZW50X2l0ZW0uaFxcbmluZGV4IDI2MjhjY2RhMDc2YTA3Li5kZTRkYzIwYjdmODdkZSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3ZtX2V2ZW50X2l0ZW0uaFxcbisrKyBiL2luY2x1ZGUvbGludXgvdm1fZXZlbnRfaXRlbS5oXFxuQEAgLTE3OSw2ICsxNzksMTEgQEAgZW51bSB2bV9ldmVudF9pdGVtIHsgUEdQR0lOLCBQR1BHT1VULCBQU1dQSU4sIFBTV1BPVVQsXFxuIFxcdFxcdE5SU1dQSU4sXFxuIFxcdFxcdE5SU1dQT1VULFxcbiAjZW5kaWYgLyogQ09ORklHX1NXQVAgKi9cXG4rI2lmZGVmIENPTkZJR19BU1lOQ19NTV9URUFSRE9XTlxcbitcXHRcXHRBU1lOQ19NTV9URUFSRE9XTl9RVUVVRUQsXFxuK1xcdFxcdEFTWU5DX01NX1RFQVJET1dOX1NZTkMsXFxuK1xcdFxcdEFTWU5DX01NX1RFQVJET1dOX1JFSkVDVEVELFxcbisjZW5kaWZcXG4gXFx0XFx0TlJfVk1fRVZFTlRfSVRFTVNcXG4gfTtcXG4gXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL21tX3JlYXBlci5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvbW1fcmVhcGVyLmhcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4zMTViY2VkN2M0MjUzZFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9tbV9yZWFwZXIuaFxcbkBAIC0wLDAgKzEsNzMgQEBcXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cXG4rI3VuZGVmIFRSQUNFX1NZU1RFTVxcbisjZGVmaW5lIFRSQUNFX1NZU1RFTSBtbV9yZWFwZXJcXG4rXFxuKyNpZiAhZGVmaW5lZChfVFJBQ0VfTU1fUkVBUEVSX0gpIHx8IGRlZmluZWQoVFJBQ0VfSEVBREVSX01VTFRJX1JFQUQpXFxuKyNkZWZpbmUgX1RSQUNFX01NX1JFQVBFUl9IXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdHJhY2Vwb2ludC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc2NoZWQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3RvcG9sb2d5LmhcXHUwMDNlXFxuK1xcbitUUkFDRV9FVkVOVChtbV9hc3luY190ZWFyZG93bl9xdWV1ZSxcXG4rXFxuK1xcdFRQX1BST1RPKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHJzcyksXFxuK1xcbitcXHRUUF9BUkdTKG1tLCByc3MpLFxcbitcXG4rXFx0VFBfU1RSVUNUX19lbnRyeShcXG4rXFx0XFx0X19maWVsZChzdHJ1Y3QgbW1fc3RydWN0ICosIG1tKVxcbitcXHRcXHRfX2ZpZWxkKGludCwgcGlkKVxcbitcXHRcXHRfX2FycmF5KGNoYXIsIGNvbW0sIFRBU0tfQ09NTV9MRU4pXFxuK1xcdFxcdF9fZmllbGQodW5zaWduZWQgbG9uZywgcnNzKVxcbitcXHRcXHRfX2ZpZWxkKGludCwgbm9kZSlcXG4rXFx0KSxcXG4rXFxuK1xcdFRQX2Zhc3RfYXNzaWduKFxcbitcXHRcXHRfX2VudHJ5LVxcdTAwM2VtbSA9IG1tO1xcbitcXHRcXHRfX2VudHJ5LVxcdTAwM2VwaWQgPSBjdXJyZW50LVxcdTAwM2VwaWQ7XFxuK1xcdFxcdG1lbWNweShfX2VudHJ5LVxcdTAwM2Vjb21tLCBjdXJyZW50LVxcdTAwM2Vjb21tLCBUQVNLX0NPTU1fTEVOKTtcXG4rXFx0XFx0X19lbnRyeS1cXHUwMDNlcnNzID0gcnNzO1xcbitcXHRcXHRfX2VudHJ5LVxcdTAwM2Vub2RlID0gbnVtYV9ub2RlX2lkKCk7XFxuK1xcdCksXFxuK1xcbitcXHRUUF9wcmludGsoXFxcIm1tPSVwIHBpZD0lZCBjb21tPSVzIHJzcz0lbHVrQiBub2RlPSVkXFxcIixcXG4rXFx0XFx0X19lbnRyeS1cXHUwMDNlbW0sXFxuK1xcdFxcdF9fZW50cnktXFx1MDAzZXBpZCxcXG4rXFx0XFx0X19lbnRyeS1cXHUwMDNlY29tbSxcXG4rXFx0XFx0X19lbnRyeS1cXHUwMDNlcnNzIFxcdTAwM2NcXHUwMDNjIChQQUdFX1NISUZUIC0gMTApLFxcbitcXHRcXHRfX2VudHJ5LVxcdTAwM2Vub2RlXFxuK1xcdClcXG4rKTtcXG4rXFxuK1RSQUNFX0VWRU5UKG1tX2FzeW5jX3RlYXJkb3duX3JlYXAsXFxuK1xcbitcXHRUUF9QUk9UTyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBjaGFyZ2VkX3JzcywgdW5zaWduZWQgbG9uZyBsaXZlX3JzcyksXFxuK1xcbitcXHRUUF9BUkdTKG1tLCBjaGFyZ2VkX3JzcywgbGl2ZV9yc3MpLFxcbitcXG4rXFx0VFBfU1RSVUNUX19lbnRyeShcXG4rXFx0XFx0X19maWVsZChzdHJ1Y3QgbW1fc3RydWN0ICosIG1tKVxcbitcXHRcXHRfX2ZpZWxkKHVuc2lnbmVkIGxvbmcsIGNoYXJnZWRfcnNzKVxcbitcXHRcXHRfX2ZpZWxkKHVuc2lnbmVkIGxvbmcsIGxpdmVfcnNzKVxcbitcXHRcXHRfX2ZpZWxkKGludCwgbm9kZSlcXG4rXFx0KSxcXG4rXFxuK1xcdFRQX2Zhc3RfYXNzaWduKFxcbitcXHRcXHRfX2VudHJ5LVxcdTAwM2VtbSA9IG1tO1xcbitcXHRcXHRfX2VudHJ5LVxcdTAwM2VjaGFyZ2VkX3JzcyA9IGNoYXJnZWRfcnNzO1xcbitcXHRcXHRfX2VudHJ5LVxcdTAwM2VsaXZlX3JzcyA9IGxpdmVfcnNzO1xcbitcXHRcXHRfX2VudHJ5LVxcdTAwM2Vub2RlID0gbnVtYV9ub2RlX2lkKCk7XFxuK1xcdCksXFxuK1xcbitcXHRUUF9wcmludGsoXFxcIm1tPSVwIGNoYXJnZWRfcnNzPSVsdWtCIGxpdmVfcnNzPSVsdWtCIG5vZGU9JWRcXFwiLFxcbitcXHRcXHRfX2VudHJ5LVxcdTAwM2VtbSxcXG4rXFx0XFx0X19lbnRyeS1cXHUwMDNlY2hhcmdlZF9yc3MgXFx1MDAzY1xcdTAwM2MgKFBBR0VfU0hJRlQgLSAxMCksXFxuK1xcdFxcdF9fZW50cnktXFx1MDAzZWxpdmVfcnNzIFxcdTAwM2NcXHUwMDNjIChQQUdFX1NISUZUIC0gMTApLFxcbitcXHRcXHRfX2VudHJ5LVxcdTAwM2Vub2RlXFxuK1xcdClcXG4rKTtcXG4rXFxuKyNlbmRpZiAvKiBfVFJBQ0VfTU1fUkVBUEVSX0ggKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2N0cmFjZS9kZWZpbmVfdHJhY2UuaFxcdTAwM2VcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2V4aXQuYyBiL2tlcm5lbC9leGl0LmNcXG5pbmRleCAxMDU2NDIyYmMxMDEzZS4uNmY5N2QyMDRmOWZjYWMgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2V4aXQuY1xcbisrKyBiL2tlcm5lbC9leGl0LmNcXG5AQCAtNjA3LDcgKzYwNyw3IEBAIHN0YXRpYyB2b2lkIGV4aXRfbW0odm9pZClcXG4gXFx0dGFza191bmxvY2soY3VycmVudCk7XFxuIFxcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xcbiBcXHRtbV91cGRhdGVfbmV4dF9vd25lcihtbSk7XFxuLVxcdG1tcHV0KG1tKTtcXG4rXFx0bW1wdXRfZXhpdChtbSk7XFxuIFxcdGlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl9NRU1ESUUpKVxcbiBcXHRcXHRleGl0X29vbV92aWN0aW0oKTtcXG4gfVxcbmRpZmYgLS1naXQgYS9rZXJuZWwvZm9yay5jIGIva2VybmVsL2ZvcmsuY1xcbmluZGV4IGYwZTJlMTMxYTlhNWFmLi40YmRmZmExODhmNTIyNCAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvZm9yay5jXFxuKysrIGIva2VybmVsL2ZvcmsuY1xcbkBAIC0xMTIsNiArMTEyLDggQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3Vud2luZF9kZWZlcnJlZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGdhbGxvYy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdWFjY2Vzcy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc2NoZWQvaXNvbGF0aW9uLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zaXplcy5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9tbXVfY29udGV4dC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2NhY2hlZmx1c2guaFxcdTAwM2VcXG5AQCAtMTI0LDYgKzEyNiw5IEBAXFxuIFxcbiAjZGVmaW5lIENSRUFURV9UUkFDRV9QT0lOVFNcXG4gI2luY2x1ZGUgXFx1MDAzY3RyYWNlL2V2ZW50cy90YXNrLmhcXHUwMDNlXFxuKyNpZmRlZiBDT05GSUdfQVNZTkNfTU1fVEVBUkRPV05cXG4rI2luY2x1ZGUgXFx1MDAzY3RyYWNlL2V2ZW50cy9tbV9yZWFwZXIuaFxcdTAwM2VcXG4rI2VuZGlmXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNja3VuaXQvdmlzaWJpbGl0eS5oXFx1MDAzZVxcbiBcXG5AQCAtMzQwNywzICszNDEyLDE5NyBAQCBzdGF0aWMgaW50IF9faW5pdCBpbml0X2Zvcmtfc3lzY3RsKHZvaWQpXFxuIH1cXG4gXFxuIHN1YnN5c19pbml0Y2FsbChpbml0X2Zvcmtfc3lzY3RsKTtcXG4rXFxuKyNpZmRlZiBDT05GSUdfQVNZTkNfTU1fVEVBUkRPV05cXG4rc3RhdGljIExMSVNUX0hFQUQobW1fcmVhcGVyX2xpc3QpO1xcbitzdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQobW1fcmVhcGVyX3dhaXQpO1xcbitzdGF0aWMgYXRvbWljX2xvbmdfdCBtbV9yZWFwZXJfcGVuZGluZ19wYWdlcztcXG4rc3RhdGljIERFRklORV9TVEFUSUNfS0VZX0ZBTFNFKGFzeW5jX21tX3RlYXJkb3duX2tleSk7XFxuK3N0YXRpYyB1bnNpZ25lZCBsb25nIHN5c2N0bF9hc3luY19tbV90ZWFyZG93bl90aHJlc2hfcGFnZXM7XFxuK3N0YXRpYyB1bnNpZ25lZCBsb25nIHN5c2N0bF9hc3luY19tbV90ZWFyZG93bl9tYXhfcGVuZGluZ19wYWdlcztcXG4rI2lmZGVmIENPTkZJR19TWVNDVExcXG4rc3RhdGljIHU4IHN5c2N0bF9hc3luY19tbV90ZWFyZG93bl9lbmFibGVkO1xcbitzdGF0aWMgREVGSU5FX01VVEVYKGFzeW5jX21tX3RlYXJkb3duX2xvY2spO1xcbisjZW5kaWZcXG4rXFxuK3N0YXRpYyBib29sIGFzeW5jX21tX3RlYXJkb3duX2VsaWdpYmxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHJzcylcXG4re1xcbitcXHRpZiAocnNzIFxcdTAwM2MgUkVBRF9PTkNFKHN5c2N0bF9hc3luY19tbV90ZWFyZG93bl90aHJlc2hfcGFnZXMpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdGlmIChtbV9mbGFnc190ZXN0KE1NRl9PT01fU0tJUCwgbW0pKVxcdC8qIHJlYXBlZCwgb3IgaGlkZGVuIGZyb20gdGhlIHJlYXBlciAqL1xcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdC8qXFxuK1xcdCAqIE1NRl9PT01fVEFSR0VURUQgaXMgc2V0IGJ5IHRoZSBPT00ga2lsbGVyIHdoaWxlIHNvbWUgdGFzayBzdGlsbFxcbitcXHQgKiBob2xkcyBhIGxpdmUgcmVmZXJlbmNlIHRvIHRoaXMgbW0gKHNlZSBtYXJrX29vbV92aWN0aW0oKSBhbmRcXG4rXFx0ICogX19vb21fa2lsbF9wcm9jZXNzKCkpLCBhbmQgdGhpcyBlbGlnaWJpbGl0eSBjaGVjayBpcyByZWFjaGVkIG9ubHlcXG4rXFx0ICogZnJvbSBtbXB1dF9leGl0KCksIGFmdGVyIG1tX3VzZXJzIGhhcyBkcm9wcGVkIHRvIDAgLS0gc28gbWFya2luZ1xcbitcXHQgKiBhbmQgdGhpcyBjaGVjayBjYW4gbmV2ZXIgb3ZlcmxhcCBpbiB0aW1lLiBXaGljaGV2ZXIgdGhyZWFkXFxuK1xcdCAqIHBlcmZvcm1zIHRoZSBmaW5hbCBkZWNyZW1lbnQgaXMgdGhlcmVmb3JlIGd1YXJhbnRlZWQgdG8gb2JzZXJ2ZVxcbitcXHQgKiB0aGUgZmxhZyBhbHJlYWR5IHNldCwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoYXQgdGhyZWFkIHdhc1xcbitcXHQgKiBpdHNlbGYgZXZlciBwYXNzZWQgdG8gbWFya19vb21fdmljdGltKCkgKGEgQ0xPTkVfVk0tc2hhcmluZ1xcbitcXHQgKiBwcm9jZXNzIGluIGFub3RoZXIgdGhyZWFkIGdyb3VwIG5ldmVyIGlzLCBidXQgc3RpbGwgb2JzZXJ2ZXNcXG4rXFx0ICogdGhpcyBmbGFnIG9uIHRoZSBzaGFyZWQgbW0pLlxcbitcXHQgKi9cXG4rXFx0aWYgKG1tX2ZsYWdzX3Rlc3QoTU1GX09PTV9UQVJHRVRFRCwgbW0pKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuK1xcbisvKlxcbisgKiBDaGFyZ2UgcnNzIGFnYWluc3QgdGhlIHBlbmRpbmctdGVhcmRvd24gYnVkZ2V0LiAgUmV0dXJucyB0cnVlIGlmIGl0IGZpdHNcXG4rICogdW5kZXIgdGhlIGNhcCwgaW4gd2hpY2ggY2FzZSB0aGUgY2FsbGVyIGVucXVldWVzIGFuZCB0aGUgcmVhcGVyIHJlbGVhc2VzXFxuKyAqIHRoZSBzYW1lIHJzcyBhZnRlciBfX21tcHV0KCkuICBPbiBvdmVyc2hvb3Qgbm90aGluZyBzdGF5cyBjaGFyZ2VkIGFuZCB0aGVcXG4rICogY2FsbGVyIG11c3QgdGVhciBkb3duIHN5bmNocm9ub3VzbHkuXFxuKyAqL1xcbitzdGF0aWMgYm9vbCBhc3luY19tbV90ZWFyZG93bl9yZXNlcnZlKHVuc2lnbmVkIGxvbmcgcnNzKVxcbit7XFxuK1xcdGlmIChhdG9taWNfbG9uZ19hZGRfcmV0dXJuKHJzcywgXFx1MDAyNm1tX3JlYXBlcl9wZW5kaW5nX3BhZ2VzKSBcXHUwMDNlXFxuK1xcdCAgICBSRUFEX09OQ0Uoc3lzY3RsX2FzeW5jX21tX3RlYXJkb3duX21heF9wZW5kaW5nX3BhZ2VzKSkge1xcbitcXHRcXHRhdG9taWNfbG9uZ19zdWIocnNzLCBcXHUwMDI2bW1fcmVhcGVyX3BlbmRpbmdfcGFnZXMpO1xcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGFzeW5jX21tX3RlYXJkb3duX3F1ZXVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHJzcylcXG4re1xcbitcXHRjb3VudF92bV9ldmVudChBU1lOQ19NTV9URUFSRE9XTl9RVUVVRUQpO1xcbitcXHR0cmFjZV9tbV9hc3luY190ZWFyZG93bl9xdWV1ZShtbSwgcnNzKTtcXG4rXFx0aWYgKGxsaXN0X2FkZChcXHUwMDI2bW0tXFx1MDAzZWFzeW5jX3JlYXBfbm9kZSwgXFx1MDAyNm1tX3JlYXBlcl9saXN0KSlcXG4rXFx0XFx0d2FrZV91cChcXHUwMDI2bW1fcmVhcGVyX3dhaXQpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG1tX3JlYXBlcih2b2lkICp1bnVzZWQpXFxuK3tcXG4rXFx0c2V0X2ZyZWV6YWJsZSgpO1xcbitcXHR3aGlsZSAodHJ1ZSkge1xcbitcXHRcXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqYmF0Y2g7XFxuK1xcdFxcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCAqbjtcXG4rXFxuK1xcdFxcdHdhaXRfZXZlbnRfZnJlZXphYmxlKG1tX3JlYXBlcl93YWl0LCAhbGxpc3RfZW1wdHkoXFx1MDAyNm1tX3JlYXBlcl9saXN0KSk7XFxuK1xcdFxcdGJhdGNoID0gbGxpc3RfZGVsX2FsbChcXHUwMDI2bW1fcmVhcGVyX2xpc3QpO1xcbitcXHRcXHRsbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG1tLCBuLCBiYXRjaCwgYXN5bmNfcmVhcF9ub2RlKSB7XFxuK1xcdFxcdFxcdHVuc2lnbmVkIGxvbmcgcGFnZXMgPSBtbS1cXHUwMDNlYXN5bmNfcmVhcF9yc3M7XFxuK1xcdFxcdFxcdHVuc2lnbmVkIGxvbmcgbGl2ZSA9IGdldF9tbV9yc3MobW0pO1xcbitcXG4rXFx0XFx0XFx0dHJhY2VfbW1fYXN5bmNfdGVhcmRvd25fcmVhcChtbSwgcGFnZXMsIGxpdmUpO1xcbitcXG4rXFx0XFx0XFx0X19tbXB1dChtbSk7IC8qIG1heSBmcmVlIG1tIHZpYSBtbWRyb3AgKi9cXG4rXFx0XFx0XFx0YXRvbWljX2xvbmdfc3ViKHBhZ2VzLCBcXHUwMDI2bW1fcmVhcGVyX3BlbmRpbmdfcGFnZXMpO1xcbitcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4rXFx0XFx0XFx0dHJ5X3RvX2ZyZWV6ZSgpO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3ZvaWQgbW1wdXRfZXhpdChzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4re1xcbitcXHRtaWdodF9zbGVlcCgpO1xcbitcXHQvKlxcbitcXHQgKiBGdWxseSBvcmRlcmVkIFJNVzogY29tYmluZWQgd2l0aCBleGl0X21tKCkgKG9yIGV4ZWNfbW1hcCgpLCB0aGVcXG4rXFx0ICogb3RoZXIgcGF0aCB0aGF0IHNoZWRzIC1cXHUwMDNlbW0pIGNsZWFyaW5nIC1cXHUwMDNlbW0gdW5kZXIgdGFza19sb2NrKCkgYmVmb3JlXFxuK1xcdCAqIHRoaXMgY2FsbCwgaXQgZ3VhcmFudGVlcyBNTUZfT09NX1RBUkdFVEVEIHNldCBhdCBhbnkgbWFyayBzaXRlIGlzXFxuK1xcdCAqIHZpc2libGUgaGVyZSAtLSBzZWUgbWFya19vb21fdmljdGltKCkuIEFueSBuZXcgY2FsbGVyIG9mXFxuK1xcdCAqIG1tcHV0X2V4aXQoKSBvdXRzaWRlIGV4aXRfbW0oKSBtdXN0IHJlLXZlcmlmeSB0aGF0IGFyZ3VtZW50LlxcbitcXHQgKi9cXG4rXFx0aWYgKCFhdG9taWNfZGVjX2FuZF90ZXN0KFxcdTAwMjZtbS1cXHUwMDNlbW1fdXNlcnMpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcXHUwMDI2YXN5bmNfbW1fdGVhcmRvd25fa2V5KSkge1xcbitcXHRcXHR1bnNpZ25lZCBsb25nIHJzcyA9IGdldF9tbV9yc3MobW0pO1xcbitcXG4rXFx0XFx0aWYgKGFzeW5jX21tX3RlYXJkb3duX2VsaWdpYmxlKG1tLCByc3MpKSB7XFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIGV4aXRfYWlvKCkgY2FuIGJsb2NrIGluZGVmaW5pdGVseS4gUnVuIGl0IGhlcmUgc28gYSBzdHVja1xcbitcXHRcXHRcXHQgKiBBSU8gb25seSBoYW5ncyB0aGlzIHRhc2sgKHNhbWUgYXMgaG93IGl0IHdvdWxkIGhhcHBlbiBpblxcbitcXHRcXHRcXHQgKiBjYXNlIG9mIHN5bmNocm9ub3VzIG1tcHV0KCkpIGluc3RlYWQgb2Ygc3RyYW5kaW5nIGV2ZXJ5XFxuK1xcdFxcdFxcdCAqIHRlYXJkb3duIHF1ZXVlZCBiZWhpbmQgdGhpcyBtbVxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0ZXhpdF9haW8obW0pO1xcbitcXG4rXFx0XFx0XFx0aWYgKGFzeW5jX21tX3RlYXJkb3duX3Jlc2VydmUocnNzKSkge1xcbitcXHRcXHRcXHRcXHRtbS1cXHUwMDNlYXN5bmNfcmVhcF9yc3MgPSByc3M7XFxuK1xcdFxcdFxcdFxcdGFzeW5jX21tX3RlYXJkb3duX3F1ZXVlKG1tLCByc3MpO1xcbitcXHRcXHRcXHRcXHRyZXR1cm47XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0Y291bnRfdm1fZXZlbnQoQVNZTkNfTU1fVEVBUkRPV05fUkVKRUNURUQpO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdGNvdW50X3ZtX2V2ZW50KEFTWU5DX01NX1RFQVJET1dOX1NZTkMpO1xcbitcXHRfX21tcHV0KG1tKTtcXG4rfVxcbitcXG4rI2lmZGVmIENPTkZJR19TWVNDVExcXG4rc3RhdGljIGludCBhc3luY19tbV90ZWFyZG93bl9lbmFibGVkX2hhbmRsZXIoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgaW50IHdyaXRlLCB2b2lkICpidWZmZXIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFNlcmlhbGl6ZSBjb25jdXJyZW50IHdyaXRlcnMgc28gdGhlIHN0YXRpYyBrZXkgc3RhdGUgYWx3YXlzIG1hdGNoZXNcXG4rXFx0ICogdGhlIGxhc3QgdmFsdWUgd3JpdHRlbiB0byB0aGUgdmFyaWFibGUuXFxuK1xcdCAqL1xcbitcXHRndWFyZChtdXRleCkoXFx1MDAyNmFzeW5jX21tX3RlYXJkb3duX2xvY2spO1xcbitcXG4rXFx0cmV0ID0gcHJvY19kb3U4dmVjX21pbm1heCh0YWJsZSwgd3JpdGUsIGJ1ZmZlciwgbGVucCwgcHBvcyk7XFxuK1xcdGlmIChyZXQgfHwgIXdyaXRlKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0aWYgKHN5c2N0bF9hc3luY19tbV90ZWFyZG93bl9lbmFibGVkKVxcbitcXHRcXHRzdGF0aWNfYnJhbmNoX2VuYWJsZShcXHUwMDI2YXN5bmNfbW1fdGVhcmRvd25fa2V5KTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRzdGF0aWNfYnJhbmNoX2Rpc2FibGUoXFx1MDAyNmFzeW5jX21tX3RlYXJkb3duX2tleSk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBhc3luY19tbV90ZWFyZG93bl90YWJsZVtdID0ge1xcbitcXHR7XFxuK1xcdFxcdC5wcm9jbmFtZVxcdD0gXFxcImFzeW5jX21tX3RlYXJkb3duXFxcIixcXG4rXFx0XFx0LmRhdGFcXHRcXHQ9IFxcdTAwMjZzeXNjdGxfYXN5bmNfbW1fdGVhcmRvd25fZW5hYmxlZCxcXG4rXFx0XFx0Lm1heGxlblxcdFxcdD0gc2l6ZW9mKHU4KSxcXG4rXFx0XFx0Lm1vZGVcXHRcXHQ9IDA2NDQsXFxuK1xcdFxcdC5wcm9jX2hhbmRsZXJcXHQ9IGFzeW5jX21tX3RlYXJkb3duX2VuYWJsZWRfaGFuZGxlcixcXG4rXFx0XFx0LmV4dHJhMVxcdFxcdD0gU1lTQ1RMX1pFUk8sXFxuK1xcdFxcdC5leHRyYTJcXHRcXHQ9IFNZU0NUTF9PTkUsXFxuK1xcdH0sXFxuK1xcdHtcXG4rXFx0XFx0LnByb2NuYW1lXFx0PSBcXFwiYXN5bmNfbW1fdGVhcmRvd25fdGhyZXNoX3BhZ2VzXFxcIixcXG4rXFx0XFx0LmRhdGFcXHRcXHQ9IFxcdTAwMjZzeXNjdGxfYXN5bmNfbW1fdGVhcmRvd25fdGhyZXNoX3BhZ2VzLFxcbitcXHRcXHQubWF4bGVuXFx0XFx0PSBzaXplb2YodW5zaWduZWQgbG9uZyksXFxuK1xcdFxcdC5tb2RlXFx0XFx0PSAwNjQ0LFxcbitcXHRcXHQucHJvY19oYW5kbGVyXFx0PSBwcm9jX2RvdWxvbmd2ZWNfbWlubWF4LFxcbitcXHR9LFxcbitcXHR7XFxuK1xcdFxcdC5wcm9jbmFtZVxcdD0gXFxcImFzeW5jX21tX3RlYXJkb3duX21heF9wZW5kaW5nX3BhZ2VzXFxcIixcXG4rXFx0XFx0LmRhdGFcXHRcXHQ9IFxcdTAwMjZzeXNjdGxfYXN5bmNfbW1fdGVhcmRvd25fbWF4X3BlbmRpbmdfcGFnZXMsXFxuK1xcdFxcdC5tYXhsZW5cXHRcXHQ9IHNpemVvZih1bnNpZ25lZCBsb25nKSxcXG4rXFx0XFx0Lm1vZGVcXHRcXHQ9IDA2NDQsXFxuK1xcdFxcdC5wcm9jX2hhbmRsZXJcXHQ9IHByb2NfZG91bG9uZ3ZlY19taW5tYXgsXFxuK1xcdH0sXFxuK307XFxuKyNlbmRpZiAvKiBDT05GSUdfU1lTQ1RMICovXFxuK1xcbitzdGF0aWMgaW50IF9faW5pdCBtbV9yZWFwZXJfaW5pdCh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdGg7XFxuK1xcbitcXHR0aCA9IGt0aHJlYWRfY3JlYXRlKG1tX3JlYXBlciwgTlVMTCwgXFxcIm1tX3JlYXBlclxcXCIpO1xcbitcXHRpZiAoSVNfRVJSKHRoKSkge1xcbitcXHRcXHRwcl9lcnIoXFxcIm1tX3JlYXBlcjogZmFpbGVkIHRvIHN0YXJ0IGt0aHJlYWQ6ICVsZFxcXFxuXFxcIiwgUFRSX0VSUih0aCkpO1xcbitcXHRcXHRyZXR1cm4gUFRSX0VSUih0aCk7XFxuK1xcdH1cXG4rXFx0c2V0X3VzZXJfbmljZSh0aCwgMTkpOyAvKiBtaW5pbWl6ZSBjb21wZXRpdGlvbiB3aXRoIG90aGVyIGZhaXIgY2xhc3MgdGFza3MgKi9cXG4rXFx0a3RocmVhZF9hZmZpbmVfcHJlZmVycmVkKHRoLCBob3VzZWtlZXBpbmdfY3B1bWFzayhIS19UWVBFX0tUSFJFQUQpKTtcXG4rXFx0c3lzY3RsX2FzeW5jX21tX3RlYXJkb3duX3RocmVzaF9wYWdlcyAgICAgID0gU1pfNjRNIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuK1xcdHN5c2N0bF9hc3luY19tbV90ZWFyZG93bl9tYXhfcGVuZGluZ19wYWdlcyA9IHRvdGFscmFtX3BhZ2VzKCkgLyA0OyAgLyogVE9ETzogcGxhY2Vob2xkZXIgKi9cXG4rXFx0d2FrZV91cF9wcm9jZXNzKHRoKTtcXG4rI2lmZGVmIENPTkZJR19TWVNDVExcXG4rXFx0cmVnaXN0ZXJfc3lzY3RsX2luaXQoXFxcInZtXFxcIiwgYXN5bmNfbW1fdGVhcmRvd25fdGFibGUpO1xcbisjZW5kaWZcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rc3Vic3lzX2luaXRjYWxsKG1tX3JlYXBlcl9pbml0KTtcXG4rI2VuZGlmXFxuZGlmZiAtLWdpdCBhL21tL0tjb25maWcgYi9tbS9LY29uZmlnXFxuaW5kZXggYzUyYWI2YWZjYjE1OTYuLmE5ZDkyNTQwNjY1M2Y4IDEwMDY0NFxcbi0tLSBhL21tL0tjb25maWdcXG4rKysgYi9tbS9LY29uZmlnXFxuQEAgLTE1MDAsNiArMTUwMCwxOCBAQCBjb25maWcgTEFaWV9NTVVfTU9ERV9LVU5JVF9URVNUXFxuIFxcbiBcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIFxcbitjb25maWcgQVNZTkNfTU1fVEVBUkRPV05cXG4rXFx0Ym9vbCBcXFwiQXN5bmMgb2ZmLUNQVSBhZGRyZXNzIHNwYWNlIHRlYXJkb3duIG9uIGV4aXRcXFwiXFxuK1xcdGRlcGVuZHMgb24gTU1VXFxuK1xcdGRlZmF1bHQgblxcbitcXHRoZWxwXFxuK1xcdCAgRGVmZXIgdGhlIGFkZHJlc3Mgc3BhY2UgdGVhcmRvd24gKGV4aXRfbW1hcCgpKSBvZiBsYXJnZSBleGl0aW5nIHByb2Nlc3Nlc1xcbitcXHQgIHRvIGEga2VybmVsIHRocmVhZCBpbnN0ZWFkIG9mIHJ1bm5pbmcgaXQgb24gdGhlIGV4aXRpbmcgQ1BVLiBUaGUgZmVhdHVyZVxcbitcXHQgIGlzIG9mZiBieSBkZWZhdWx0IGFuZCBpcyBlbmFibGVkIGF0IHJ1bnRpbWUgdmlhIHRoZSB2bS5hc3luY19tbV90ZWFyZG93blxcbitcXHQgIHN5c2N0bC5cXG4rXFxuK1xcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4rXFxuIHNvdXJjZSBcXFwibW0vZGFtb24vS2NvbmZpZ1xcXCJcXG4gXFxuIGVuZG1lbnVcXG5kaWZmIC0tZ2l0IGEvbW0vb29tX2tpbGwuYyBiL21tL29vbV9raWxsLmNcXG5pbmRleCA1ZjM3MmY2ZTI2ZmEzMi4uYjU0OTBkMWIxYmQyNjEgMTAwNjQ0XFxuLS0tIGEvbW0vb29tX2tpbGwuY1xcbisrKyBiL21tL29vbV9raWxsLmNcXG5AQCAtNzU0LDYgKzc1NCw0MCBAQCBzdGF0aWMgdm9pZCBtYXJrX29vbV92aWN0aW0oc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXFxuIFxcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gdHNrLVxcdTAwM2VtbTtcXG4gXFxuIFxcdFdBUk5fT04ob29tX2tpbGxlcl9kaXNhYmxlZCk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBNYXJrIHRoZSBtbSBpdHNlbGYsIG5vdCBqdXN0IHRoaXMgdGFzay9zaWduYWwsIGFzIGFuIE9PTSB0YXJnZXQsXFxuK1xcdCAqIHNvIHRoZSBkZWZlcnJlZC10ZWFyZG93biBwYXRoIGNhbiB0ZXN0IGl0IGZyb20gdGhlIG1tIGFsb25lLiBTZXRcXG4rXFx0ICogYWhlYWQgb2YgdGhlIFRJRl9NRU1ESUUgdGVzdC1hbmQtc2V0IGJlbG93IHNvIHRoYXQgZXZlcnkgY2FsbFxcbitcXHQgKiBtYXJrcyB0aGUgbW0sIGluY2x1ZGluZyBhIHJlcGVhdCBtYXJrIG9uIGEgdGFzayB0aGF0IGlzIGFscmVhZHlcXG4rXFx0ICogVElGX01FTURJRS5cXG4rXFx0ICpcXG4rXFx0ICogVGhpcyBpcyByZWxpYWJseSB2aXNpYmxlIHRvIHdoaWNoZXZlciB0aHJlYWQgZW5kcyB1cCBkcm9wcGluZyB0aGVcXG4rXFx0ICogbGFzdCByZWZlcmVuY2UgaW4gbW1wdXRfZXhpdCgpOiBtYXJraW5nIGFuZCBxdWV1aW5nIGZvciBhc3luY1xcbitcXHQgKiB0ZWFyZG93biBjYW4gbmV2ZXIgb3ZlcmxhcCBpbiB0aW1lLiBFdmVyeSBjYWxsZXIgcmVhY2hlcyB0aGlzIHdpdGhcXG4rXFx0ICogdHNrLVxcdTAwM2VtbSBzdGlsbCBzZXQgLS0gZWl0aGVyIHRzayBpcyBjdXJyZW50LCBtYXJraW5nIGl0c2VsZiBpblxcbitcXHQgKiBwcm9ncmFtIG9yZGVyLCBvciB0c2sgaXMgdGFza19sb2NrKCllZCBieSB0aGUgY2FsbGVyICh0aGVcXG4rXFx0ICogdGFza193aWxsX2ZyZWVfbWVtKCkgZmFzdCBwYXRoIGluIG9vbV9raWxsX3Byb2Nlc3MoKSkgLS0gd2hpbGVcXG4rXFx0ICogbW1wdXRfZXhpdCgpLCB0aGUgb25seSBwYXRoIHRoYXQgcXVldWVzIGZvciB0ZWFyZG93biwgaXMgcmVhY2hlZFxcbitcXHQgKiBvbmx5IGFmdGVyIG1tX3VzZXJzIGhpdHMgMCwgd2hpY2ggcmVxdWlyZXMgdHNrJ3Mgb3duIGV4aXRfbW0oKSAob3JcXG4rXFx0ICogZXhlY19tbWFwKCksIHRoZSBvdGhlciBwYXRoIHRoYXQgc2hlZHMgLVxcdTAwM2VtbSkgdG8gaGF2ZSBhbHJlYWR5XFxuK1xcdCAqIGNsZWFyZWQgLVxcdTAwM2VtbSB1bmRlciB0aGF0IHNhbWUgdGFza19sb2NrKCkuIFByb2dyYW0gb3JkZXIgb3JcXG4rXFx0ICogdGFza19sb2NrKCkgcmVsZWFzZS9hY3F1aXJlIHRoZXJlZm9yZSBvcmRlcnMgdGhpcyBzdG9yZSBiZWZvcmVcXG4rXFx0ICogdHNrJ3Mgb3duIGV2ZW50dWFsIG1tcHV0X2V4aXQoKS5cXG4rXFx0ICpcXG4rXFx0ICogSWYgYSBkaWZmZXJlbnQgQ0xPTkVfVk0gc2hhcmVyIHBlcmZvcm1zIHRoZSBhY3R1YWwgZmluYWwgZGVjcmVtZW50XFxuK1xcdCAqIGluc3RlYWQsIHRoZSBvcmRlcmluZyBkb2VzIG5vdCBjb21lIGZyb20gdGhpcyBzdG9yZTpcXG4rXFx0ICogbW1fZmxhZ3Nfc2V0KCkgaXMgc2V0X2JpdCgpLCBhIG5vbi12YWx1ZS1yZXR1cm5pbmcgUk1XLCBzbyBpdCBpc1xcbitcXHQgKiB1bm9yZGVyZWQgYW5kIGNvbnRyaWJ1dGVzIG5vdGhpbmcgb24gaXRzIG93bi4gSXQgY29tZXMgZnJvbSB0aGVcXG4rXFx0ICogbWFya2luZyB0YXNrJ3Mgb3duIGF0b21pY19kZWNfYW5kX3Rlc3QoKSwgYSB2YWx1ZS1yZXR1cm5pbmcgUk1XXFxuK1xcdCAqIGFuZCB0aGVyZWZvcmUgZnVsbHkgb3JkZXJlZCAoYW4gc21wX21iKCkgYmVmb3JlIGFuZCBhZnRlcikuXFxuK1xcdCAqIERlY3JlbWVudHMgYXJlIHRvdGFsbHkgb3JkZXJlZCBpbiBtbV91c2VycycgbW9kaWZpY2F0aW9uIG9yZGVyXFxuK1xcdCAqIHdpdGggdGhlIHplcm9pbmcgb25lIGxhc3QsIHNvIHRoZSBnZW5lcmFsIGJhcnJpZXJzIG9uIGJvdGggc2lkZXNcXG4rXFx0ICogbWFrZSB0aGlzIHN0b3JlIHZpc2libGUgdG8gd2hpY2hldmVyIHRocmVhZCBwZXJmb3JtcyBpdC5cXG4rXFx0ICovXFxuK1xcdGlmIChJU19FTkFCTEVEKENPTkZJR19BU1lOQ19NTV9URUFSRE9XTikpXFxuK1xcdFxcdG1tX2ZsYWdzX3NldChNTUZfT09NX1RBUkdFVEVELCBtbSk7XFxuK1xcbiBcXHQvKiBPT00ga2lsbGVyIG1pZ2h0IHJhY2Ugd2l0aCBtZW1jZyBPT00gKi9cXG4gXFx0aWYgKHRlc3RfYW5kX3NldF90c2tfdGhyZWFkX2ZsYWcodHNrLCBUSUZfTUVNRElFKSlcXG4gXFx0XFx0cmV0dXJuO1xcbkBAIC05MzEsNiArOTY1LDMzIEBAIHN0YXRpYyB2b2lkIF9fb29tX2tpbGxfcHJvY2VzcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnZpY3RpbSwgY29uc3QgY2hhciAqbWVzc2FnZSlcXG4gXFx0bW0gPSB2aWN0aW0tXFx1MDAzZW1tO1xcbiBcXHRtbWdyYWIobW0pO1xcbiBcXG4rXFx0LypcXG4rXFx0ICogU2V0IHRoaXMgYmVmb3JlIGFueSBTSUdLSUxMIGZvciB0aGlzIGtpbGwgZXZlbnQgZ29lcyBvdXQgYmVsb3csXFxuK1xcdCAqIHdoaWxlIHRhc2tfbG9jayh2aWN0aW0pIChoZWxkIHNpbmNlIGZpbmRfbG9ja190YXNrX21tKCkgYWJvdmUpIGlzXFxuK1xcdCAqIHN0aWxsIGhlbGQuIFRoaXMgaXMgcmVsaWFibHkgdmlzaWJsZSB0byB3aGljaGV2ZXIgdGhyZWFkIGVuZHMgdXBcXG4rXFx0ICogcnVubmluZyBtbXB1dF9leGl0KCkgYW5kIGRyb3BwaW5nIHRoZSBsYXN0IHJlZmVyZW5jZSB0byB0aGlzIG1tIC0tXFxuK1xcdCAqIHZpY3RpbSBpdHNlbGYsIGEgc2libGluZywgb3IgYSBDTE9ORV9WTSBzaGFyZXIgaW4gYW5vdGhlciB0aHJlYWRcXG4rXFx0ICogZ3JvdXAgKHdoaWNoIG1hcmtfb29tX3ZpY3RpbSgpIG5ldmVyIG1hcmtzLCBidXQgd2hpY2ggc3RpbGxcXG4rXFx0ICogb2JzZXJ2ZXMgdGhpcyBzdG9yZSBvbiB0aGUgc2hhcmVkIG1tKS4gTWFya2luZyBhbmQgcXVldWluZyBmb3JcXG4rXFx0ICogYXN5bmMgdGVhcmRvd24gY2FuIG5ldmVyIG92ZXJsYXA6IG1tcHV0X2V4aXQoKSBpcyByZWFjaGVkIG9ubHlcXG4rXFx0ICogYWZ0ZXIgbW1fdXNlcnMgaGl0cyAwLCBhbmQgdGhhdCByZXF1aXJlcyB2aWN0aW0ncyBvd24gZXhpdF9tbSgpXFxuK1xcdCAqIChvciBleGVjX21tYXAoKSwgdGhlIG90aGVyIHBhdGggdGhhdCBzaGVkcyAtXFx1MDAzZW1tKSB0byBoYXZlIGNsZWFyZWRcXG4rXFx0ICogLVxcdTAwM2VtbSB1bmRlciB0aGlzIHNhbWUgdGFza19sb2NrKCkgZmlyc3QsIHdoaWNoIHJlbGVhc2UvYWNxdWlyZVxcbitcXHQgKiBvcmRlcnMgYWZ0ZXIgdGhlIHN0b3JlIGFib3ZlLlxcbitcXHQgKlxcbitcXHQgKiBJZiBzb21lIG90aGVyIHNoYXJlciBwZXJmb3JtcyB0aGUgYWN0dWFsIGZpbmFsIGRlY3JlbWVudCBpbnN0ZWFkLFxcbitcXHQgKiB0aGUgb3JkZXJpbmcgZG9lcyBub3QgY29tZSBmcm9tIHRoaXMgc3RvcmU6IG1tX2ZsYWdzX3NldCgpIGlzXFxuK1xcdCAqIHNldF9iaXQoKSwgYSBub24tdmFsdWUtcmV0dXJuaW5nIFJNVywgc28gaXQgaXMgdW5vcmRlcmVkIGFuZFxcbitcXHQgKiBjb250cmlidXRlcyBub3RoaW5nIG9uIGl0cyBvd24uIEl0IGNvbWVzIGZyb20gdGhlIG1hcmtpbmcgdGFzaydzXFxuK1xcdCAqIG93biBhdG9taWNfZGVjX2FuZF90ZXN0KCksIGEgdmFsdWUtcmV0dXJuaW5nIFJNVyBhbmQgdGhlcmVmb3JlXFxuK1xcdCAqIGZ1bGx5IG9yZGVyZWQgKGFuIHNtcF9tYigpIGJlZm9yZSBhbmQgYWZ0ZXIpLiBEZWNyZW1lbnRzIGFyZVxcbitcXHQgKiB0b3RhbGx5IG9yZGVyZWQgaW4gbW1fdXNlcnMnIG1vZGlmaWNhdGlvbiBvcmRlciB3aXRoIHRoZSB6ZXJvaW5nXFxuK1xcdCAqIG9uZSBsYXN0LCBzbyB0aGUgZ2VuZXJhbCBiYXJyaWVycyBvbiBib3RoIHNpZGVzIG1ha2UgdGhpcyBzdG9yZVxcbitcXHQgKiB2aXNpYmxlIHRvIHdoaWNoZXZlciB0aHJlYWQgcGVyZm9ybXMgaXQuXFxuK1xcdCAqL1xcbitcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQVNZTkNfTU1fVEVBUkRPV04pKVxcbitcXHRcXHRtbV9mbGFnc19zZXQoTU1GX09PTV9UQVJHRVRFRCwgbW0pO1xcbitcXG4gXFx0LyogUmFpc2UgZXZlbnQgYmVmb3JlIHNlbmRpbmcgc2lnbmFsOiB0YXNrIHJlYXBlciBtdXN0IHNlZSB0aGlzICovXFxuIFxcdGNvdW50X3ZtX2V2ZW50KE9PTV9LSUxMKTtcXG4gXFx0bWVtY2dfbWVtb3J5X2V2ZW50X21tKG1tLCBNRU1DR19PT01fS0lMTCk7XFxuZGlmZiAtLWdpdCBhL21tL3Ztc3RhdC5jIGIvbW0vdm1zdGF0LmNcXG5pbmRleCA0ZTI2ZTVmZDY2NjYyNi4uZTNmZjMwMDI3YzI0ZWQgMTAwNjQ0XFxuLS0tIGEvbW0vdm1zdGF0LmNcXG4rKysgYi9tbS92bXN0YXQuY1xcbkBAIC0xNDk0LDYgKzE0OTQsMTEgQEAgY29uc3QgY2hhciAqIGNvbnN0IHZtc3RhdF90ZXh0W10gPSB7XFxuIFxcdFtJKE5SU1dQSU4pXVxcdFxcdFxcdFxcdD0gXFxcIm5yc3dwaW5cXFwiLFxcbiBcXHRbSShOUlNXUE9VVCldXFx0XFx0XFx0XFx0PSBcXFwibnJzd3BvdXRcXFwiLFxcbiAjZW5kaWYgLyogQ09ORklHX1NXQVAgKi9cXG4rI2lmZGVmIENPTkZJR19BU1lOQ19NTV9URUFSRE9XTlxcbitcXHRbSShBU1lOQ19NTV9URUFSRE9XTl9RVUVVRUQpXVxcdD0gXFxcImFzeW5jX21tX3RlYXJkb3duX3F1ZXVlZFxcXCIsXFxuK1xcdFtJKEFTWU5DX01NX1RFQVJET1dOX1NZTkMpXVxcdFxcdD0gXFxcImFzeW5jX21tX3RlYXJkb3duX3N5bmNcXFwiLFxcbitcXHRbSShBU1lOQ19NTV9URUFSRE9XTl9SRUpFQ1RFRCldXFx0PSBcXFwiYXN5bmNfbW1fdGVhcmRvd25fcmVqZWN0ZWRcXFwiLFxcbisjZW5kaWZcXG4gI3VuZGVmIElcXG4gI2VuZGlmIC8qIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUyAqL1xcbiB9O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOVQxOTo0MTo0MS4wMzgxODcyMDlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzMTg4MDg0NjIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFTWU5DX01NX1RFQVJET1dOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibW1fcmVhcGVyXCIsXG4gICAgXCJhc3luY19tbV90ZWFyZG93bl9xdWV1ZVwiLFxuICAgIFwiYXN5bmNfbW1fdGVhcmRvd25fcmVzZXJ2ZVwiLFxuICAgIFwiYXN5bmNfbW1fdGVhcmRvd25fZWxpZ2libGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZlYXR1cmUgdG8gYXN5bmNocm9ub3VzbHkgdGVhciBkb3duIHRoZSBhZGRyZXNzIHNwYWNlIG9mIGV4aXRpbmcgcHJvY2Vzc2VzIHZpYSBhIGRlZGljYXRlZCBrZXJuZWwgdGhyZWFkIChtbV9yZWFwZXIpLiBUaGlzIG1vZGlmaWVzIGNvcmUgcHJvY2VzcyBleGl0IGFuZCBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYywgd2hpY2ggaXMgaGlnaGx5IGZ1bmN0aW9uYWwgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMTFlNWY1MTk3MjQ3MTI3N2MzMmI0MGZmOTRhYWJiZDg2YTA0NjFlYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gSnVsIDE5IDE5OjQxOjM4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwvdm0ucnN0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwvdm0ucnN0XG5pbmRleCA1YjMxOGQxN2FhNGI0NC4uY2NkYTZjNzVmZTFmYjcgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC92bS5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL3ZtLnJzdFxuQEAgLTIyLDYgKzIyLDkgQEAgdGhlIHdyaXRlb3V0IG9mIGRpcnR5IGRhdGEgdG8gZGlzay5cbiBDdXJyZW50bHksIHRoZXNlIGZpbGVzIGFyZSBpbiAvcHJvYy9zeXMvdm06XG4gXG4gLSBhZG1pbl9yZXNlcnZlX2tieXRlc1xuKy0gYXN5bmNfbW1fdGVhcmRvd25cbistIGFzeW5jX21tX3RlYXJkb3duX21heF9wZW5kaW5nX3BhZ2VzXG4rLSBhc3luY19tbV90ZWFyZG93bl90aHJlc2hfcGFnZXNcbiAtIGNvbXBhY3RfbWVtb3J5XG4gLSBjb21wYWN0aW9uX3Byb2FjdGl2ZW5lc3NcbiAtIGNvbXBhY3RfdW5ldmljdGFibGVfYWxsb3dlZFxuQEAgLTEwOCw2ICsxMTEsNDEgQEAgT24geDg2XzY0IHRoaXMgaXMgYWJvdXQgMTI4TUIuXG4gQ2hhbmdpbmcgdGhpcyB0YWtlcyBlZmZlY3Qgd2hlbmV2ZXIgYW4gYXBwbGljYXRpb24gcmVxdWVzdHMgbWVtb3J5LlxuIFxuIFxuK2FzeW5jX21tX3RlYXJkb3duXG4rPT09PT09PT09PT09PT09PT1cbitcbitBdmFpbGFibGUgb25seSB3aGVuIENPTkZJR19BU1lOQ19NTV9URUFSRE9XTiBpcyBzZXQuIENvbnRyb2xzIHdoZXRoZXIgdGhlXG4rYWRkcmVzcy1zcGFjZSB0ZWFyZG93biAoZXhpdF9tbWFwKCkpIG9mIGxhcmdlIGV4aXRpbmcgcHJvY2Vzc2VzIGlzIGRlZmVycmVkXG4rdG8gdGhlIG1tX3JlYXBlciBrZXJuZWwgdGhyZWFkIGluc3RlYWQgb2YgcnVubmluZyBvbiB0aGUgZXhpdGluZyBDUFUuXG4rXG4rV3JpdGluZyAxIGVuYWJsZXMgZGVmZXJyYWwsIDAgZGlzYWJsZXMgaXQuIERpc2FibGluZyBtYWtlcyBtbXB1dF9leGl0KCkgdGVhclxuK2Rvd24gaW5saW5lIGFnYWluOyBpdCBkb2VzIG5vdCBkcmFpbiBtbXMgYWxyZWFkeSBxdWV1ZWQuIERlZmF1bHRzIHRvIDAuXG4rXG4rRGVmZXJyZWQgdGVhcmRvd24gY29uc3VtZXMgQ1BVIGluIHRoZSBtbV9yZWFwZXIga2VybmVsIHRocmVhZCwgd2hpY2ggcnVucyBpblxuK3RoZSByb290IGNncm91cDogdGhlIHRlYXJkb3duIHdvcmsgb2YgYSB0YXNrIGluIGEgQ1BVLWxpbWl0ZWQgY2dyb3VwIGlzIG5vdFxuK2NoYXJnZWQgdG8gdGhhdCBjZ3JvdXAsIHNpbWlsYXIgdG8ga3N3YXBkIGFuZCB0aGUgb29tX3JlYXBlci4gQ29uc2lkZXIgdGhpc1xuK2JlZm9yZSBlbmFibGluZyB0aGUgZmVhdHVyZSBvbiBzeXN0ZW1zIHRoYXQgcmVseSBvbiBzdHJpY3QgcGVyLWNncm91cCBDUFVcbithY2NvdW50aW5nLlxuK1xuK1xuK2FzeW5jX21tX3RlYXJkb3duX21heF9wZW5kaW5nX3BhZ2VzXG4rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbitcbitBdmFpbGFibGUgb25seSB3aGVuIENPTkZJR19BU1lOQ19NTV9URUFSRE9XTiBpcyBzZXQuIEJhY2twcmVzc3VyZSBjYXAsIGluXG4rcGFnZXMsIG9uIHRoZSB0b3RhbCBSU1Mgb2YgbW1zIHF1ZXVlZCBmb3IgdGhlIG1tX3JlYXBlciBidXQgbm90IHlldCB0b3JuXG4rZG93bi4gQW4gZXhpdCB0aGF0IHdvdWxkIHB1c2ggdGhlIHRvdGFsIG92ZXIgdGhpcyBjYXAgdGVhcnMgZG93blxuK3N5bmNocm9ub3VzbHkgaW5zdGVhZCBvZiBxdWV1aW5nLiBEZWZhdWx0cyB0byB0b3RhbHJhbV9wYWdlcygpIC8gNC5cbitcbitcbithc3luY19tbV90ZWFyZG93bl90aHJlc2hfcGFnZXNcbis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbitcbitBdmFpbGFibGUgb25seSB3aGVuIENPTkZJR19BU1lOQ19NTV9URUFSRE9XTiBpcyBzZXQuIE1pbmltdW0gUlNTLCBpbiBwYWdlcyxcbitmb3IgYW4gZXhpdGluZyBtbSB0byBiZSBlbGlnaWJsZSBmb3IgZGVmZXJyYWwgdG8gdGhlIG1tX3JlYXBlci4gRXhpdGluZyBtbXNcbitiZWxvdyB0aGlzIHRocmVzaG9sZCBhcmUgYWx3YXlzIHRvcm4gZG93biBzeW5jaHJvbm91c2x5LiBEZWZhdWx0cyB0byA2NE1CXG4rd29ydGggb2YgcGFnZXMuXG4rXG4rXG4gY29tcGFjdF9tZW1vcnlcbiA9PT09PT09PT09PT09PVxuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaFxuaW5kZXggOTM5YjVlYThjOWUwYmUuLmVlNmMwYWM4NGIzZDU5IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmhcbkBAIC03LDYgKzcsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2F1eHZlYy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva3JlZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbGlzdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbGxpc3QuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NwaW5sb2NrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yYnRyZWUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21hcGxlX3RyZWUuaFx1MDAzZVxuQEAgLTEzNjcsNiArMTM2OCwxMCBAQCBzdHJ1Y3QgbW1fc3RydWN0IHtcbiBcdFx0YXRvbWljX2xvbmdfdCBodWdldGxiX3VzYWdlO1xuICNlbmRpZlxuIFx0XHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgYXN5bmNfcHV0X3dvcms7XG4rI2lmZGVmIENPTkZJR19BU1lOQ19NTV9URUFSRE9XTlxuK1x0XHRzdHJ1Y3QgbGxpc3Rfbm9kZSBhc3luY19yZWFwX25vZGU7XG4rXHRcdHVuc2lnbmVkIGxvbmcgYXN5bmNfcmVhcF9yc3M7XG4rI2VuZGlmIC8qIENPTkZJR19BU1lOQ19NTV9URUFSRE9XTiAqL1xuIFxuICNpZmRlZiBDT05GSUdfSU9NTVVfTU1fREFUQVxuIFx0XHRzdHJ1Y3QgaW9tbXVfbW1fZGF0YSAqaW9tbXVfbW07XG5AQCAtMTk4NSw2ICsxOTkwLDE2IEBAIGVudW0ge1xuICNkZWZpbmUgTU1GX1RPUERPV05cdFx0MzFcdC8qIG1tIHNlYXJjaGVzIHRvcCBkb3duIGJ5IGRlZmF1bHQgKi9cbiAjZGVmaW5lIE1NRl9UT1BET1dOX01BU0tcdEJJVChNTUZfVE9QRE9XTilcbiBcbisvKlxuKyAqIG1tIGlzIHRoZSB0YXJnZXQgb2YgYW4gaW4tZmxpZ2h0IE9PTSBraWxsLiBPbmx5IHdyaXR0ZW4gdW5kZXJcbisgKiBDT05GSUdfQVNZTkNfTU1fVEVBUkRPV04gdG9kYXkuIFN0aWNreTogbmV2ZXIgY2xlYXJlZCAtLSB0aGUgbW0gaXNcbisgKiBkeWluZyAoX19vb21fa2lsbF9wcm9jZXNzKCkga2lsbHMgZXZlcnkgcHJvY2VzcyBzaGFyaW5nIGl0KSwgYW5kIGFcbisgKiBoeXBvdGhldGljYWwgc3Vydml2aW5nIHNoYXJlciB3b3VsZCBtZXJlbHkga2VlcCB0ZWFyaW5nIGRvd25cbisgKiBzeW5jaHJvbm91c2x5LiBBYm92ZSBiaXQgMzEsIHNvIGl0IGlzIG91dHNpZGUgTU1GX0lOSVRfTEVHQUNZX01BU0snc1xuKyAqIGRvbWFpbiBlbnRpcmVseSBhbmQgaXMgbmV2ZXIgaW5oZXJpdGVkIG9uIGZvcmsuXG4rICovXG4rI2RlZmluZSBNTUZfT09NX1RBUkdFVEVEXHQzMlxuK1xuICNkZWZpbmUgTU1GX0lOSVRfTEVHQUNZX01BU0tcdChNTUZfRFVNUF9GSUxURVJfTUFTSyB8XFxcbiBcdFx0XHRcdCBNTUZfRElTQUJMRV9USFBfTUFTSyB8IE1NRl9IQVNfTURXRV9NQVNLIHxcXFxuIFx0XHRcdFx0IE1NRl9WTV9NRVJHRV9BTllfTUFTSyB8IE1NRl9UT1BET1dOX01BU0spXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oIGIvaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oXG5pbmRleCAxMGJlOGE1NGI0MTZmOS4uMjBhZWIxZDdlZDMxYjAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmhcbisrKyBiL2luY2x1ZGUvbGludXgvc2NoZWQvbW0uaFxuQEAgLTE0Nyw2ICsxNDcsMTIgQEAgZXh0ZXJuIHZvaWQgbW1wdXQoc3RydWN0IG1tX3N0cnVjdCAqKTtcbiB2b2lkIG1tcHV0X2FzeW5jKHN0cnVjdCBtbV9zdHJ1Y3QgKik7XG4gI2VuZGlmXG4gXG4rI2lmZGVmIENPTkZJR19BU1lOQ19NTV9URUFSRE9XTlxuK3ZvaWQgbW1wdXRfZXhpdChzdHJ1Y3QgbW1fc3RydWN0ICopO1xuKyNlbHNlXG4rc3RhdGljIGlubGluZSB2b2lkIG1tcHV0X2V4aXQoc3RydWN0IG1tX3N0cnVjdCAqbW0pIHsgbW1wdXQobW0pOyB9XG4rI2VuZGlmXG4rXG4gLyogR3JhYiBhIHJlZmVyZW5jZSB0byBhIHRhc2sncyBtbSwgaWYgaXQgaXMgbm90IGFscmVhZHkgZ29pbmcgYXdheSAqL1xuIGV4dGVybiBzdHJ1Y3QgbW1fc3RydWN0ICpnZXRfdGFza19tbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spO1xuIC8qXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92bV9ldmVudF9pdGVtLmggYi9pbmNsdWRlL2xpbnV4L3ZtX2V2ZW50X2l0ZW0uaFxuaW5kZXggMjYyOGNjZGEwNzZhMDcuLmRlNGRjMjBiN2Y4N2RlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC92bV9ldmVudF9pdGVtLmhcbisrKyBiL2luY2x1ZGUvbGludXgvdm1fZXZlbnRfaXRlbS5oXG5AQCAtMTc5LDYgKzE3OSwxMSBAQCBlbnVtIHZtX2V2ZW50X2l0ZW0geyBQR1BHSU4sIFBHUEdPVVQsIFBTV1BJTiwgUFNXUE9VVCxcbiBcdFx0TlJTV1BJTixcbiBcdFx0TlJTV1BPVVQsXG4gI2VuZGlmIC8qIENPTkZJR19TV0FQICovXG4rI2lmZGVmIENPTkZJR19BU1lOQ19NTV9URUFSRE9XTlxuK1x0XHRBU1lOQ19NTV9URUFSRE9XTl9RVUVVRUQsXG4rXHRcdEFTWU5DX01NX1RFQVJET1dOX1NZTkMsXG4rXHRcdEFTWU5DX01NX1RFQVJET1dOX1JFSkVDVEVELFxuKyNlbmRpZlxuIFx0XHROUl9WTV9FVkVOVF9JVEVNU1xuIH07XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvbW1fcmVhcGVyLmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9tbV9yZWFwZXIuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4zMTViY2VkN2M0MjUzZFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvbW1fcmVhcGVyLmhcbkBAIC0wLDAgKzEsNzMgQEBcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xuKyN1bmRlZiBUUkFDRV9TWVNURU1cbisjZGVmaW5lIFRSQUNFX1NZU1RFTSBtbV9yZWFwZXJcbitcbisjaWYgIWRlZmluZWQoX1RSQUNFX01NX1JFQVBFUl9IKSB8fCBkZWZpbmVkKFRSQUNFX0hFQURFUl9NVUxUSV9SRUFEKVxuKyNkZWZpbmUgX1RSQUNFX01NX1JFQVBFUl9IXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvdHJhY2Vwb2ludC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3RvcG9sb2d5LmhcdTAwM2VcbitcbitUUkFDRV9FVkVOVChtbV9hc3luY190ZWFyZG93bl9xdWV1ZSxcbitcbitcdFRQX1BST1RPKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHJzcyksXG4rXG4rXHRUUF9BUkdTKG1tLCByc3MpLFxuK1xuK1x0VFBfU1RSVUNUX19lbnRyeShcbitcdFx0X19maWVsZChzdHJ1Y3QgbW1fc3RydWN0ICosIG1tKVxuK1x0XHRfX2ZpZWxkKGludCwgcGlkKVxuK1x0XHRfX2FycmF5KGNoYXIsIGNvbW0sIFRBU0tfQ09NTV9MRU4pXG4rXHRcdF9fZmllbGQodW5zaWduZWQgbG9uZywgcnNzKVxuK1x0XHRfX2ZpZWxkKGludCwgbm9kZSlcbitcdCksXG4rXG4rXHRUUF9mYXN0X2Fzc2lnbihcbitcdFx0X19lbnRyeS1cdTAwM2VtbSA9IG1tO1xuK1x0XHRfX2VudHJ5LVx1MDAzZXBpZCA9IGN1cnJlbnQtXHUwMDNlcGlkO1xuK1x0XHRtZW1jcHkoX19lbnRyeS1cdTAwM2Vjb21tLCBjdXJyZW50LVx1MDAzZWNvbW0sIFRBU0tfQ09NTV9MRU4pO1xuK1x0XHRfX2VudHJ5LVx1MDAzZXJzcyA9IHJzcztcbitcdFx0X19lbnRyeS1cdTAwM2Vub2RlID0gbnVtYV9ub2RlX2lkKCk7XG4rXHQpLFxuK1xuK1x0VFBfcHJpbnRrKFwibW09JXAgcGlkPSVkIGNvbW09JXMgcnNzPSVsdWtCIG5vZGU9JWRcIixcbitcdFx0X19lbnRyeS1cdTAwM2VtbSxcbitcdFx0X19lbnRyeS1cdTAwM2VwaWQsXG4rXHRcdF9fZW50cnktXHUwMDNlY29tbSxcbitcdFx0X19lbnRyeS1cdTAwM2Vyc3MgXHUwMDNjXHUwMDNjIChQQUdFX1NISUZUIC0gMTApLFxuK1x0XHRfX2VudHJ5LVx1MDAzZW5vZGVcbitcdClcbispO1xuK1xuK1RSQUNFX0VWRU5UKG1tX2FzeW5jX3RlYXJkb3duX3JlYXAsXG4rXG4rXHRUUF9QUk9UTyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBjaGFyZ2VkX3JzcywgdW5zaWduZWQgbG9uZyBsaXZlX3JzcyksXG4rXG4rXHRUUF9BUkdTKG1tLCBjaGFyZ2VkX3JzcywgbGl2ZV9yc3MpLFxuK1xuK1x0VFBfU1RSVUNUX19lbnRyeShcbitcdFx0X19maWVsZChzdHJ1Y3QgbW1fc3RydWN0ICosIG1tKVxuK1x0XHRfX2ZpZWxkKHVuc2lnbmVkIGxvbmcsIGNoYXJnZWRfcnNzKVxuK1x0XHRfX2ZpZWxkKHVuc2lnbmVkIGxvbmcsIGxpdmVfcnNzKVxuK1x0XHRfX2ZpZWxkKGludCwgbm9kZSlcbitcdCksXG4rXG4rXHRUUF9mYXN0X2Fzc2lnbihcbitcdFx0X19lbnRyeS1cdTAwM2VtbSA9IG1tO1xuK1x0XHRfX2VudHJ5LVx1MDAzZWNoYXJnZWRfcnNzID0gY2hhcmdlZF9yc3M7XG4rXHRcdF9fZW50cnktXHUwMDNlbGl2ZV9yc3MgPSBsaXZlX3JzcztcbitcdFx0X19lbnRyeS1cdTAwM2Vub2RlID0gbnVtYV9ub2RlX2lkKCk7XG4rXHQpLFxuK1xuK1x0VFBfcHJpbnRrKFwibW09JXAgY2hhcmdlZF9yc3M9JWx1a0IgbGl2ZV9yc3M9JWx1a0Igbm9kZT0lZFwiLFxuK1x0XHRfX2VudHJ5LVx1MDAzZW1tLFxuK1x0XHRfX2VudHJ5LVx1MDAzZWNoYXJnZWRfcnNzIFx1MDAzY1x1MDAzYyAoUEFHRV9TSElGVCAtIDEwKSxcbitcdFx0X19lbnRyeS1cdTAwM2VsaXZlX3JzcyBcdTAwM2NcdTAwM2MgKFBBR0VfU0hJRlQgLSAxMCksXG4rXHRcdF9fZW50cnktXHUwMDNlbm9kZVxuK1x0KVxuKyk7XG4rXG4rI2VuZGlmIC8qIF9UUkFDRV9NTV9SRUFQRVJfSCAqL1xuK1xuKyNpbmNsdWRlIFx1MDAzY3RyYWNlL2RlZmluZV90cmFjZS5oXHUwMDNlXG5kaWZmIC0tZ2l0IGEva2VybmVsL2V4aXQuYyBiL2tlcm5lbC9leGl0LmNcbmluZGV4IDEwNTY0MjJiYzEwMTNlLi42Zjk3ZDIwNGY5ZmNhYyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9leGl0LmNcbisrKyBiL2tlcm5lbC9leGl0LmNcbkBAIC02MDcsNyArNjA3LDcgQEAgc3RhdGljIHZvaWQgZXhpdF9tbSh2b2lkKVxuIFx0dGFza191bmxvY2soY3VycmVudCk7XG4gXHRtbWFwX3JlYWRfdW5sb2NrKG1tKTtcbiBcdG1tX3VwZGF0ZV9uZXh0X293bmVyKG1tKTtcbi1cdG1tcHV0KG1tKTtcbitcdG1tcHV0X2V4aXQobW0pO1xuIFx0aWYgKHRlc3RfdGhyZWFkX2ZsYWcoVElGX01FTURJRSkpXG4gXHRcdGV4aXRfb29tX3ZpY3RpbSgpO1xuIH1cbmRpZmYgLS1naXQgYS9rZXJuZWwvZm9yay5jIGIva2VybmVsL2ZvcmsuY1xuaW5kZXggZjBlMmUxMzFhOWE1YWYuLjRiZGZmYTE4OGY1MjI0IDEwMDY0NFxuLS0tIGEva2VybmVsL2ZvcmsuY1xuKysrIGIva2VybmVsL2ZvcmsuY1xuQEAgLTExMiw2ICsxMTIsOCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3Vud2luZF9kZWZlcnJlZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGdhbGxvYy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdWFjY2Vzcy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvaXNvbGF0aW9uLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zaXplcy5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXHUwMDNjYXNtL21tdV9jb250ZXh0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vY2FjaGVmbHVzaC5oXHUwMDNlXG5AQCAtMTI0LDYgKzEyNiw5IEBAXG4gXG4gI2RlZmluZSBDUkVBVEVfVFJBQ0VfUE9JTlRTXG4gI2luY2x1ZGUgXHUwMDNjdHJhY2UvZXZlbnRzL3Rhc2suaFx1MDAzZVxuKyNpZmRlZiBDT05GSUdfQVNZTkNfTU1fVEVBUkRPV05cbisjaW5jbHVkZSBcdTAwM2N0cmFjZS9ldmVudHMvbW1fcmVhcGVyLmhcdTAwM2VcbisjZW5kaWZcbiBcbiAjaW5jbHVkZSBcdTAwM2NrdW5pdC92aXNpYmlsaXR5LmhcdTAwM2VcbiBcbkBAIC0zNDA3LDMgKzM0MTIsMTk3IEBAIHN0YXRpYyBpbnQgX19pbml0IGluaXRfZm9ya19zeXNjdGwodm9pZClcbiB9XG4gXG4gc3Vic3lzX2luaXRjYWxsKGluaXRfZm9ya19zeXNjdGwpO1xuK1xuKyNpZmRlZiBDT05GSUdfQVNZTkNfTU1fVEVBUkRPV05cbitzdGF0aWMgTExJU1RfSEVBRChtbV9yZWFwZXJfbGlzdCk7XG4rc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKG1tX3JlYXBlcl93YWl0KTtcbitzdGF0aWMgYXRvbWljX2xvbmdfdCBtbV9yZWFwZXJfcGVuZGluZ19wYWdlcztcbitzdGF0aWMgREVGSU5FX1NUQVRJQ19LRVlfRkFMU0UoYXN5bmNfbW1fdGVhcmRvd25fa2V5KTtcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBzeXNjdGxfYXN5bmNfbW1fdGVhcmRvd25fdGhyZXNoX3BhZ2VzO1xuK3N0YXRpYyB1bnNpZ25lZCBsb25nIHN5c2N0bF9hc3luY19tbV90ZWFyZG93bl9tYXhfcGVuZGluZ19wYWdlcztcbisjaWZkZWYgQ09ORklHX1NZU0NUTFxuK3N0YXRpYyB1OCBzeXNjdGxfYXN5bmNfbW1fdGVhcmRvd25fZW5hYmxlZDtcbitzdGF0aWMgREVGSU5FX01VVEVYKGFzeW5jX21tX3RlYXJkb3duX2xvY2spO1xuKyNlbmRpZlxuK1xuK3N0YXRpYyBib29sIGFzeW5jX21tX3RlYXJkb3duX2VsaWdpYmxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHJzcylcbit7XG4rXHRpZiAocnNzIFx1MDAzYyBSRUFEX09OQ0Uoc3lzY3RsX2FzeW5jX21tX3RlYXJkb3duX3RocmVzaF9wYWdlcykpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcdGlmIChtbV9mbGFnc190ZXN0KE1NRl9PT01fU0tJUCwgbW0pKVx0LyogcmVhcGVkLCBvciBoaWRkZW4gZnJvbSB0aGUgcmVhcGVyICovXG4rXHRcdHJldHVybiBmYWxzZTtcbitcdC8qXG4rXHQgKiBNTUZfT09NX1RBUkdFVEVEIGlzIHNldCBieSB0aGUgT09NIGtpbGxlciB3aGlsZSBzb21lIHRhc2sgc3RpbGxcbitcdCAqIGhvbGRzIGEgbGl2ZSByZWZlcmVuY2UgdG8gdGhpcyBtbSAoc2VlIG1hcmtfb29tX3ZpY3RpbSgpIGFuZFxuK1x0ICogX19vb21fa2lsbF9wcm9jZXNzKCkpLCBhbmQgdGhpcyBlbGlnaWJpbGl0eSBjaGVjayBpcyByZWFjaGVkIG9ubHlcbitcdCAqIGZyb20gbW1wdXRfZXhpdCgpLCBhZnRlciBtbV91c2VycyBoYXMgZHJvcHBlZCB0byAwIC0tIHNvIG1hcmtpbmdcbitcdCAqIGFuZCB0aGlzIGNoZWNrIGNhbiBuZXZlciBvdmVybGFwIGluIHRpbWUuIFdoaWNoZXZlciB0aHJlYWRcbitcdCAqIHBlcmZvcm1zIHRoZSBmaW5hbCBkZWNyZW1lbnQgaXMgdGhlcmVmb3JlIGd1YXJhbnRlZWQgdG8gb2JzZXJ2ZVxuK1x0ICogdGhlIGZsYWcgYWxyZWFkeSBzZXQsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGF0IHRocmVhZCB3YXNcbitcdCAqIGl0c2VsZiBldmVyIHBhc3NlZCB0byBtYXJrX29vbV92aWN0aW0oKSAoYSBDTE9ORV9WTS1zaGFyaW5nXG4rXHQgKiBwcm9jZXNzIGluIGFub3RoZXIgdGhyZWFkIGdyb3VwIG5ldmVyIGlzLCBidXQgc3RpbGwgb2JzZXJ2ZXNcbitcdCAqIHRoaXMgZmxhZyBvbiB0aGUgc2hhcmVkIG1tKS5cbitcdCAqL1xuK1x0aWYgKG1tX2ZsYWdzX3Rlc3QoTU1GX09PTV9UQVJHRVRFRCwgbW0pKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4rLypcbisgKiBDaGFyZ2UgcnNzIGFnYWluc3QgdGhlIHBlbmRpbmctdGVhcmRvd24gYnVkZ2V0LiAgUmV0dXJucyB0cnVlIGlmIGl0IGZpdHNcbisgKiB1bmRlciB0aGUgY2FwLCBpbiB3aGljaCBjYXNlIHRoZSBjYWxsZXIgZW5xdWV1ZXMgYW5kIHRoZSByZWFwZXIgcmVsZWFzZXNcbisgKiB0aGUgc2FtZSByc3MgYWZ0ZXIgX19tbXB1dCgpLiAgT24gb3ZlcnNob290IG5vdGhpbmcgc3RheXMgY2hhcmdlZCBhbmQgdGhlXG4rICogY2FsbGVyIG11c3QgdGVhciBkb3duIHN5bmNocm9ub3VzbHkuXG4rICovXG4rc3RhdGljIGJvb2wgYXN5bmNfbW1fdGVhcmRvd25fcmVzZXJ2ZSh1bnNpZ25lZCBsb25nIHJzcylcbit7XG4rXHRpZiAoYXRvbWljX2xvbmdfYWRkX3JldHVybihyc3MsIFx1MDAyNm1tX3JlYXBlcl9wZW5kaW5nX3BhZ2VzKSBcdTAwM2VcbitcdCAgICBSRUFEX09OQ0Uoc3lzY3RsX2FzeW5jX21tX3RlYXJkb3duX21heF9wZW5kaW5nX3BhZ2VzKSkge1xuK1x0XHRhdG9taWNfbG9uZ19zdWIocnNzLCBcdTAwMjZtbV9yZWFwZXJfcGVuZGluZ19wYWdlcyk7XG4rXHRcdHJldHVybiBmYWxzZTtcbitcdH1cbitcdHJldHVybiB0cnVlO1xuK31cbitcbitzdGF0aWMgdm9pZCBhc3luY19tbV90ZWFyZG93bl9xdWV1ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyByc3MpXG4re1xuK1x0Y291bnRfdm1fZXZlbnQoQVNZTkNfTU1fVEVBUkRPV05fUVVFVUVEKTtcbitcdHRyYWNlX21tX2FzeW5jX3RlYXJkb3duX3F1ZXVlKG1tLCByc3MpO1xuK1x0aWYgKGxsaXN0X2FkZChcdTAwMjZtbS1cdTAwM2Vhc3luY19yZWFwX25vZGUsIFx1MDAyNm1tX3JlYXBlcl9saXN0KSlcbitcdFx0d2FrZV91cChcdTAwMjZtbV9yZWFwZXJfd2FpdCk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgbW1fcmVhcGVyKHZvaWQgKnVudXNlZClcbit7XG4rXHRzZXRfZnJlZXphYmxlKCk7XG4rXHR3aGlsZSAodHJ1ZSkge1xuK1x0XHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqYmF0Y2g7XG4rXHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCAqbjtcbitcbitcdFx0d2FpdF9ldmVudF9mcmVlemFibGUobW1fcmVhcGVyX3dhaXQsICFsbGlzdF9lbXB0eShcdTAwMjZtbV9yZWFwZXJfbGlzdCkpO1xuK1x0XHRiYXRjaCA9IGxsaXN0X2RlbF9hbGwoXHUwMDI2bW1fcmVhcGVyX2xpc3QpO1xuK1x0XHRsbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG1tLCBuLCBiYXRjaCwgYXN5bmNfcmVhcF9ub2RlKSB7XG4rXHRcdFx0dW5zaWduZWQgbG9uZyBwYWdlcyA9IG1tLVx1MDAzZWFzeW5jX3JlYXBfcnNzO1xuK1x0XHRcdHVuc2lnbmVkIGxvbmcgbGl2ZSA9IGdldF9tbV9yc3MobW0pO1xuK1xuK1x0XHRcdHRyYWNlX21tX2FzeW5jX3RlYXJkb3duX3JlYXAobW0sIHBhZ2VzLCBsaXZlKTtcbitcbitcdFx0XHRfX21tcHV0KG1tKTsgLyogbWF5IGZyZWUgbW0gdmlhIG1tZHJvcCAqL1xuK1x0XHRcdGF0b21pY19sb25nX3N1YihwYWdlcywgXHUwMDI2bW1fcmVhcGVyX3BlbmRpbmdfcGFnZXMpO1xuK1x0XHRcdGNvbmRfcmVzY2hlZCgpO1xuK1x0XHRcdHRyeV90b19mcmVlemUoKTtcbitcdFx0fVxuK1x0fVxuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3ZvaWQgbW1wdXRfZXhpdChzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbit7XG4rXHRtaWdodF9zbGVlcCgpO1xuK1x0LypcbitcdCAqIEZ1bGx5IG9yZGVyZWQgUk1XOiBjb21iaW5lZCB3aXRoIGV4aXRfbW0oKSAob3IgZXhlY19tbWFwKCksIHRoZVxuK1x0ICogb3RoZXIgcGF0aCB0aGF0IHNoZWRzIC1cdTAwM2VtbSkgY2xlYXJpbmcgLVx1MDAzZW1tIHVuZGVyIHRhc2tfbG9jaygpIGJlZm9yZVxuK1x0ICogdGhpcyBjYWxsLCBpdCBndWFyYW50ZWVzIE1NRl9PT01fVEFSR0VURUQgc2V0IGF0IGFueSBtYXJrIHNpdGUgaXNcbitcdCAqIHZpc2libGUgaGVyZSAtLSBzZWUgbWFya19vb21fdmljdGltKCkuIEFueSBuZXcgY2FsbGVyIG9mXG4rXHQgKiBtbXB1dF9leGl0KCkgb3V0c2lkZSBleGl0X21tKCkgbXVzdCByZS12ZXJpZnkgdGhhdCBhcmd1bWVudC5cbitcdCAqL1xuK1x0aWYgKCFhdG9taWNfZGVjX2FuZF90ZXN0KFx1MDAyNm1tLVx1MDAzZW1tX3VzZXJzKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2YXN5bmNfbW1fdGVhcmRvd25fa2V5KSkge1xuK1x0XHR1bnNpZ25lZCBsb25nIHJzcyA9IGdldF9tbV9yc3MobW0pO1xuK1xuK1x0XHRpZiAoYXN5bmNfbW1fdGVhcmRvd25fZWxpZ2libGUobW0sIHJzcykpIHtcbitcdFx0XHQvKlxuK1x0XHRcdCAqIGV4aXRfYWlvKCkgY2FuIGJsb2NrIGluZGVmaW5pdGVseS4gUnVuIGl0IGhlcmUgc28gYSBzdHVja1xuK1x0XHRcdCAqIEFJTyBvbmx5IGhhbmdzIHRoaXMgdGFzayAoc2FtZSBhcyBob3cgaXQgd291bGQgaGFwcGVuIGluXG4rXHRcdFx0ICogY2FzZSBvZiBzeW5jaHJvbm91cyBtbXB1dCgpKSBpbnN0ZWFkIG9mIHN0cmFuZGluZyBldmVyeVxuK1x0XHRcdCAqIHRlYXJkb3duIHF1ZXVlZCBiZWhpbmQgdGhpcyBtbVxuK1x0XHRcdCAqL1xuK1x0XHRcdGV4aXRfYWlvKG1tKTtcbitcbitcdFx0XHRpZiAoYXN5bmNfbW1fdGVhcmRvd25fcmVzZXJ2ZShyc3MpKSB7XG4rXHRcdFx0XHRtbS1cdTAwM2Vhc3luY19yZWFwX3JzcyA9IHJzcztcbitcdFx0XHRcdGFzeW5jX21tX3RlYXJkb3duX3F1ZXVlKG1tLCByc3MpO1xuK1x0XHRcdFx0cmV0dXJuO1xuK1x0XHRcdH1cbitcdFx0XHRjb3VudF92bV9ldmVudChBU1lOQ19NTV9URUFSRE9XTl9SRUpFQ1RFRCk7XG4rXHRcdH1cbitcdH1cbitcbitcdGNvdW50X3ZtX2V2ZW50KEFTWU5DX01NX1RFQVJET1dOX1NZTkMpO1xuK1x0X19tbXB1dChtbSk7XG4rfVxuK1xuKyNpZmRlZiBDT05GSUdfU1lTQ1RMXG4rc3RhdGljIGludCBhc3luY19tbV90ZWFyZG93bl9lbmFibGVkX2hhbmRsZXIoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsXG4rXHRcdFx0XHRcdCAgICAgaW50IHdyaXRlLCB2b2lkICpidWZmZXIsXG4rXHRcdFx0XHRcdCAgICAgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpXG4re1xuK1x0aW50IHJldDtcbitcbitcdC8qXG4rXHQgKiBTZXJpYWxpemUgY29uY3VycmVudCB3cml0ZXJzIHNvIHRoZSBzdGF0aWMga2V5IHN0YXRlIGFsd2F5cyBtYXRjaGVzXG4rXHQgKiB0aGUgbGFzdCB2YWx1ZSB3cml0dGVuIHRvIHRoZSB2YXJpYWJsZS5cbitcdCAqL1xuK1x0Z3VhcmQobXV0ZXgpKFx1MDAyNmFzeW5jX21tX3RlYXJkb3duX2xvY2spO1xuK1xuK1x0cmV0ID0gcHJvY19kb3U4dmVjX21pbm1heCh0YWJsZSwgd3JpdGUsIGJ1ZmZlciwgbGVucCwgcHBvcyk7XG4rXHRpZiAocmV0IHx8ICF3cml0ZSlcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGlmIChzeXNjdGxfYXN5bmNfbW1fdGVhcmRvd25fZW5hYmxlZClcbitcdFx0c3RhdGljX2JyYW5jaF9lbmFibGUoXHUwMDI2YXN5bmNfbW1fdGVhcmRvd25fa2V5KTtcbitcdGVsc2VcbitcdFx0c3RhdGljX2JyYW5jaF9kaXNhYmxlKFx1MDAyNmFzeW5jX21tX3RlYXJkb3duX2tleSk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgYXN5bmNfbW1fdGVhcmRvd25fdGFibGVbXSA9IHtcbitcdHtcbitcdFx0LnByb2NuYW1lXHQ9IFwiYXN5bmNfbW1fdGVhcmRvd25cIixcbitcdFx0LmRhdGFcdFx0PSBcdTAwMjZzeXNjdGxfYXN5bmNfbW1fdGVhcmRvd25fZW5hYmxlZCxcbitcdFx0Lm1heGxlblx0XHQ9IHNpemVvZih1OCksXG4rXHRcdC5tb2RlXHRcdD0gMDY0NCxcbitcdFx0LnByb2NfaGFuZGxlclx0PSBhc3luY19tbV90ZWFyZG93bl9lbmFibGVkX2hhbmRsZXIsXG4rXHRcdC5leHRyYTFcdFx0PSBTWVNDVExfWkVSTyxcbitcdFx0LmV4dHJhMlx0XHQ9IFNZU0NUTF9PTkUsXG4rXHR9LFxuK1x0e1xuK1x0XHQucHJvY25hbWVcdD0gXCJhc3luY19tbV90ZWFyZG93bl90aHJlc2hfcGFnZXNcIixcbitcdFx0LmRhdGFcdFx0PSBcdTAwMjZzeXNjdGxfYXN5bmNfbW1fdGVhcmRvd25fdGhyZXNoX3BhZ2VzLFxuK1x0XHQubWF4bGVuXHRcdD0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLFxuK1x0XHQubW9kZVx0XHQ9IDA2NDQsXG4rXHRcdC5wcm9jX2hhbmRsZXJcdD0gcHJvY19kb3Vsb25ndmVjX21pbm1heCxcbitcdH0sXG4rXHR7XG4rXHRcdC5wcm9jbmFtZVx0PSBcImFzeW5jX21tX3RlYXJkb3duX21heF9wZW5kaW5nX3BhZ2VzXCIsXG4rXHRcdC5kYXRhXHRcdD0gXHUwMDI2c3lzY3RsX2FzeW5jX21tX3RlYXJkb3duX21heF9wZW5kaW5nX3BhZ2VzLFxuK1x0XHQubWF4bGVuXHRcdD0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLFxuK1x0XHQubW9kZVx0XHQ9IDA2NDQsXG4rXHRcdC5wcm9jX2hhbmRsZXJcdD0gcHJvY19kb3Vsb25ndmVjX21pbm1heCxcbitcdH0sXG4rfTtcbisjZW5kaWYgLyogQ09ORklHX1NZU0NUTCAqL1xuK1xuK3N0YXRpYyBpbnQgX19pbml0IG1tX3JlYXBlcl9pbml0KHZvaWQpXG4re1xuK1x0c3RydWN0IHRhc2tfc3RydWN0ICp0aDtcbitcbitcdHRoID0ga3RocmVhZF9jcmVhdGUobW1fcmVhcGVyLCBOVUxMLCBcIm1tX3JlYXBlclwiKTtcbitcdGlmIChJU19FUlIodGgpKSB7XG4rXHRcdHByX2VycihcIm1tX3JlYXBlcjogZmFpbGVkIHRvIHN0YXJ0IGt0aHJlYWQ6ICVsZFxcblwiLCBQVFJfRVJSKHRoKSk7XG4rXHRcdHJldHVybiBQVFJfRVJSKHRoKTtcbitcdH1cbitcdHNldF91c2VyX25pY2UodGgsIDE5KTsgLyogbWluaW1pemUgY29tcGV0aXRpb24gd2l0aCBvdGhlciBmYWlyIGNsYXNzIHRhc2tzICovXG4rXHRrdGhyZWFkX2FmZmluZV9wcmVmZXJyZWQodGgsIGhvdXNla2VlcGluZ19jcHVtYXNrKEhLX1RZUEVfS1RIUkVBRCkpO1xuK1x0c3lzY3RsX2FzeW5jX21tX3RlYXJkb3duX3RocmVzaF9wYWdlcyAgICAgID0gU1pfNjRNIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuK1x0c3lzY3RsX2FzeW5jX21tX3RlYXJkb3duX21heF9wZW5kaW5nX3BhZ2VzID0gdG90YWxyYW1fcGFnZXMoKSAvIDQ7ICAvKiBUT0RPOiBwbGFjZWhvbGRlciAqL1xuK1x0d2FrZV91cF9wcm9jZXNzKHRoKTtcbisjaWZkZWYgQ09ORklHX1NZU0NUTFxuK1x0cmVnaXN0ZXJfc3lzY3RsX2luaXQoXCJ2bVwiLCBhc3luY19tbV90ZWFyZG93bl90YWJsZSk7XG4rI2VuZGlmXG4rXHRyZXR1cm4gMDtcbit9XG4rc3Vic3lzX2luaXRjYWxsKG1tX3JlYXBlcl9pbml0KTtcbisjZW5kaWZcbmRpZmYgLS1naXQgYS9tbS9LY29uZmlnIGIvbW0vS2NvbmZpZ1xuaW5kZXggYzUyYWI2YWZjYjE1OTYuLmE5ZDkyNTQwNjY1M2Y4IDEwMDY0NFxuLS0tIGEvbW0vS2NvbmZpZ1xuKysrIGIvbW0vS2NvbmZpZ1xuQEAgLTE1MDAsNiArMTUwMCwxOCBAQCBjb25maWcgTEFaWV9NTVVfTU9ERV9LVU5JVF9URVNUXG4gXG4gXHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gXG4rY29uZmlnIEFTWU5DX01NX1RFQVJET1dOXG4rXHRib29sIFwiQXN5bmMgb2ZmLUNQVSBhZGRyZXNzIHNwYWNlIHRlYXJkb3duIG9uIGV4aXRcIlxuK1x0ZGVwZW5kcyBvbiBNTVVcbitcdGRlZmF1bHQgblxuK1x0aGVscFxuK1x0ICBEZWZlciB0aGUgYWRkcmVzcyBzcGFjZSB0ZWFyZG93biAoZXhpdF9tbWFwKCkpIG9mIGxhcmdlIGV4aXRpbmcgcHJvY2Vzc2VzXG4rXHQgIHRvIGEga2VybmVsIHRocmVhZCBpbnN0ZWFkIG9mIHJ1bm5pbmcgaXQgb24gdGhlIGV4aXRpbmcgQ1BVLiBUaGUgZmVhdHVyZVxuK1x0ICBpcyBvZmYgYnkgZGVmYXVsdCBhbmQgaXMgZW5hYmxlZCBhdCBydW50aW1lIHZpYSB0aGUgdm0uYXN5bmNfbW1fdGVhcmRvd25cbitcdCAgc3lzY3RsLlxuK1xuK1x0ICBJZiB1bnN1cmUsIHNheSBOLlxuK1xuIHNvdXJjZSBcIm1tL2RhbW9uL0tjb25maWdcIlxuIFxuIGVuZG1lbnVcbmRpZmYgLS1naXQgYS9tbS9vb21fa2lsbC5jIGIvbW0vb29tX2tpbGwuY1xuaW5kZXggNWYzNzJmNmUyNmZhMzIuLmI1NDkwZDFiMWJkMjYxIDEwMDY0NFxuLS0tIGEvbW0vb29tX2tpbGwuY1xuKysrIGIvbW0vb29tX2tpbGwuY1xuQEAgLTc1NCw2ICs3NTQsNDAgQEAgc3RhdGljIHZvaWQgbWFya19vb21fdmljdGltKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxuIFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSB0c2stXHUwMDNlbW07XG4gXG4gXHRXQVJOX09OKG9vbV9raWxsZXJfZGlzYWJsZWQpO1xuK1xuK1x0LypcbitcdCAqIE1hcmsgdGhlIG1tIGl0c2VsZiwgbm90IGp1c3QgdGhpcyB0YXNrL3NpZ25hbCwgYXMgYW4gT09NIHRhcmdldCxcbitcdCAqIHNvIHRoZSBkZWZlcnJlZC10ZWFyZG93biBwYXRoIGNhbiB0ZXN0IGl0IGZyb20gdGhlIG1tIGFsb25lLiBTZXRcbitcdCAqIGFoZWFkIG9mIHRoZSBUSUZfTUVNRElFIHRlc3QtYW5kLXNldCBiZWxvdyBzbyB0aGF0IGV2ZXJ5IGNhbGxcbitcdCAqIG1hcmtzIHRoZSBtbSwgaW5jbHVkaW5nIGEgcmVwZWF0IG1hcmsgb24gYSB0YXNrIHRoYXQgaXMgYWxyZWFkeVxuK1x0ICogVElGX01FTURJRS5cbitcdCAqXG4rXHQgKiBUaGlzIGlzIHJlbGlhYmx5IHZpc2libGUgdG8gd2hpY2hldmVyIHRocmVhZCBlbmRzIHVwIGRyb3BwaW5nIHRoZVxuK1x0ICogbGFzdCByZWZlcmVuY2UgaW4gbW1wdXRfZXhpdCgpOiBtYXJraW5nIGFuZCBxdWV1aW5nIGZvciBhc3luY1xuK1x0ICogdGVhcmRvd24gY2FuIG5ldmVyIG92ZXJsYXAgaW4gdGltZS4gRXZlcnkgY2FsbGVyIHJlYWNoZXMgdGhpcyB3aXRoXG4rXHQgKiB0c2stXHUwMDNlbW0gc3RpbGwgc2V0IC0tIGVpdGhlciB0c2sgaXMgY3VycmVudCwgbWFya2luZyBpdHNlbGYgaW5cbitcdCAqIHByb2dyYW0gb3JkZXIsIG9yIHRzayBpcyB0YXNrX2xvY2soKWVkIGJ5IHRoZSBjYWxsZXIgKHRoZVxuK1x0ICogdGFza193aWxsX2ZyZWVfbWVtKCkgZmFzdCBwYXRoIGluIG9vbV9raWxsX3Byb2Nlc3MoKSkgLS0gd2hpbGVcbitcdCAqIG1tcHV0X2V4aXQoKSwgdGhlIG9ubHkgcGF0aCB0aGF0IHF1ZXVlcyBmb3IgdGVhcmRvd24sIGlzIHJlYWNoZWRcbitcdCAqIG9ubHkgYWZ0ZXIgbW1fdXNlcnMgaGl0cyAwLCB3aGljaCByZXF1aXJlcyB0c2sncyBvd24gZXhpdF9tbSgpIChvclxuK1x0ICogZXhlY19tbWFwKCksIHRoZSBvdGhlciBwYXRoIHRoYXQgc2hlZHMgLVx1MDAzZW1tKSB0byBoYXZlIGFscmVhZHlcbitcdCAqIGNsZWFyZWQgLVx1MDAzZW1tIHVuZGVyIHRoYXQgc2FtZSB0YXNrX2xvY2soKS4gUHJvZ3JhbSBvcmRlciBvclxuK1x0ICogdGFza19sb2NrKCkgcmVsZWFzZS9hY3F1aXJlIHRoZXJlZm9yZSBvcmRlcnMgdGhpcyBzdG9yZSBiZWZvcmVcbitcdCAqIHRzaydzIG93biBldmVudHVhbCBtbXB1dF9leGl0KCkuXG4rXHQgKlxuK1x0ICogSWYgYSBkaWZmZXJlbnQgQ0xPTkVfVk0gc2hhcmVyIHBlcmZvcm1zIHRoZSBhY3R1YWwgZmluYWwgZGVjcmVtZW50XG4rXHQgKiBpbnN0ZWFkLCB0aGUgb3JkZXJpbmcgZG9lcyBub3QgY29tZSBmcm9tIHRoaXMgc3RvcmU6XG4rXHQgKiBtbV9mbGFnc19zZXQoKSBpcyBzZXRfYml0KCksIGEgbm9uLXZhbHVlLXJldHVybmluZyBSTVcsIHNvIGl0IGlzXG4rXHQgKiB1bm9yZGVyZWQgYW5kIGNvbnRyaWJ1dGVzIG5vdGhpbmcgb24gaXRzIG93bi4gSXQgY29tZXMgZnJvbSB0aGVcbitcdCAqIG1hcmtpbmcgdGFzaydzIG93biBhdG9taWNfZGVjX2FuZF90ZXN0KCksIGEgdmFsdWUtcmV0dXJuaW5nIFJNV1xuK1x0ICogYW5kIHRoZXJlZm9yZSBmdWxseSBvcmRlcmVkIChhbiBzbXBfbWIoKSBiZWZvcmUgYW5kIGFmdGVyKS5cbitcdCAqIERlY3JlbWVudHMgYXJlIHRvdGFsbHkgb3JkZXJlZCBpbiBtbV91c2VycycgbW9kaWZpY2F0aW9uIG9yZGVyXG4rXHQgKiB3aXRoIHRoZSB6ZXJvaW5nIG9uZSBsYXN0LCBzbyB0aGUgZ2VuZXJhbCBiYXJyaWVycyBvbiBib3RoIHNpZGVzXG4rXHQgKiBtYWtlIHRoaXMgc3RvcmUgdmlzaWJsZSB0byB3aGljaGV2ZXIgdGhyZWFkIHBlcmZvcm1zIGl0LlxuK1x0ICovXG4rXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQVNZTkNfTU1fVEVBUkRPV04pKVxuK1x0XHRtbV9mbGFnc19zZXQoTU1GX09PTV9UQVJHRVRFRCwgbW0pO1xuK1xuIFx0LyogT09NIGtpbGxlciBtaWdodCByYWNlIHdpdGggbWVtY2cgT09NICovXG4gXHRpZiAodGVzdF9hbmRfc2V0X3Rza190aHJlYWRfZmxhZyh0c2ssIFRJRl9NRU1ESUUpKVxuIFx0XHRyZXR1cm47XG5AQCAtOTMxLDYgKzk2NSwzMyBAQCBzdGF0aWMgdm9pZCBfX29vbV9raWxsX3Byb2Nlc3Moc3RydWN0IHRhc2tfc3RydWN0ICp2aWN0aW0sIGNvbnN0IGNoYXIgKm1lc3NhZ2UpXG4gXHRtbSA9IHZpY3RpbS1cdTAwM2VtbTtcbiBcdG1tZ3JhYihtbSk7XG4gXG4rXHQvKlxuK1x0ICogU2V0IHRoaXMgYmVmb3JlIGFueSBTSUdLSUxMIGZvciB0aGlzIGtpbGwgZXZlbnQgZ29lcyBvdXQgYmVsb3csXG4rXHQgKiB3aGlsZSB0YXNrX2xvY2sodmljdGltKSAoaGVsZCBzaW5jZSBmaW5kX2xvY2tfdGFza19tbSgpIGFib3ZlKSBpc1xuK1x0ICogc3RpbGwgaGVsZC4gVGhpcyBpcyByZWxpYWJseSB2aXNpYmxlIHRvIHdoaWNoZXZlciB0aHJlYWQgZW5kcyB1cFxuK1x0ICogcnVubmluZyBtbXB1dF9leGl0KCkgYW5kIGRyb3BwaW5nIHRoZSBsYXN0IHJlZmVyZW5jZSB0byB0aGlzIG1tIC0tXG4rXHQgKiB2aWN0aW0gaXRzZWxmLCBhIHNpYmxpbmcsIG9yIGEgQ0xPTkVfVk0gc2hhcmVyIGluIGFub3RoZXIgdGhyZWFkXG4rXHQgKiBncm91cCAod2hpY2ggbWFya19vb21fdmljdGltKCkgbmV2ZXIgbWFya3MsIGJ1dCB3aGljaCBzdGlsbFxuK1x0ICogb2JzZXJ2ZXMgdGhpcyBzdG9yZSBvbiB0aGUgc2hhcmVkIG1tKS4gTWFya2luZyBhbmQgcXVldWluZyBmb3JcbitcdCAqIGFzeW5jIHRlYXJkb3duIGNhbiBuZXZlciBvdmVybGFwOiBtbXB1dF9leGl0KCkgaXMgcmVhY2hlZCBvbmx5XG4rXHQgKiBhZnRlciBtbV91c2VycyBoaXRzIDAsIGFuZCB0aGF0IHJlcXVpcmVzIHZpY3RpbSdzIG93biBleGl0X21tKClcbitcdCAqIChvciBleGVjX21tYXAoKSwgdGhlIG90aGVyIHBhdGggdGhhdCBzaGVkcyAtXHUwMDNlbW0pIHRvIGhhdmUgY2xlYXJlZFxuK1x0ICogLVx1MDAzZW1tIHVuZGVyIHRoaXMgc2FtZSB0YXNrX2xvY2soKSBmaXJzdCwgd2hpY2ggcmVsZWFzZS9hY3F1aXJlXG4rXHQgKiBvcmRlcnMgYWZ0ZXIgdGhlIHN0b3JlIGFib3ZlLlxuK1x0ICpcbitcdCAqIElmIHNvbWUgb3RoZXIgc2hhcmVyIHBlcmZvcm1zIHRoZSBhY3R1YWwgZmluYWwgZGVjcmVtZW50IGluc3RlYWQsXG4rXHQgKiB0aGUgb3JkZXJpbmcgZG9lcyBub3QgY29tZSBmcm9tIHRoaXMgc3RvcmU6IG1tX2ZsYWdzX3NldCgpIGlzXG4rXHQgKiBzZXRfYml0KCksIGEgbm9uLXZhbHVlLXJldHVybmluZyBSTVcsIHNvIGl0IGlzIHVub3JkZXJlZCBhbmRcbitcdCAqIGNvbnRyaWJ1dGVzIG5vdGhpbmcgb24gaXRzIG93bi4gSXQgY29tZXMgZnJvbSB0aGUgbWFya2luZyB0YXNrJ3NcbitcdCAqIG93biBhdG9taWNfZGVjX2FuZF90ZXN0KCksIGEgdmFsdWUtcmV0dXJuaW5nIFJNVyBhbmQgdGhlcmVmb3JlXG4rXHQgKiBmdWxseSBvcmRlcmVkIChhbiBzbXBfbWIoKSBiZWZvcmUgYW5kIGFmdGVyKS4gRGVjcmVtZW50cyBhcmVcbitcdCAqIHRvdGFsbHkgb3JkZXJlZCBpbiBtbV91c2VycycgbW9kaWZpY2F0aW9uIG9yZGVyIHdpdGggdGhlIHplcm9pbmdcbitcdCAqIG9uZSBsYXN0LCBzbyB0aGUgZ2VuZXJhbCBiYXJyaWVycyBvbiBib3RoIHNpZGVzIG1ha2UgdGhpcyBzdG9yZVxuK1x0ICogdmlzaWJsZSB0byB3aGljaGV2ZXIgdGhyZWFkIHBlcmZvcm1zIGl0LlxuK1x0ICovXG4rXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQVNZTkNfTU1fVEVBUkRPV04pKVxuK1x0XHRtbV9mbGFnc19zZXQoTU1GX09PTV9UQVJHRVRFRCwgbW0pO1xuK1xuIFx0LyogUmFpc2UgZXZlbnQgYmVmb3JlIHNlbmRpbmcgc2lnbmFsOiB0YXNrIHJlYXBlciBtdXN0IHNlZSB0aGlzICovXG4gXHRjb3VudF92bV9ldmVudChPT01fS0lMTCk7XG4gXHRtZW1jZ19tZW1vcnlfZXZlbnRfbW0obW0sIE1FTUNHX09PTV9LSUxMKTtcbmRpZmYgLS1naXQgYS9tbS92bXN0YXQuYyBiL21tL3Ztc3RhdC5jXG5pbmRleCA0ZTI2ZTVmZDY2NjYyNi4uZTNmZjMwMDI3YzI0ZWQgMTAwNjQ0XG4tLS0gYS9tbS92bXN0YXQuY1xuKysrIGIvbW0vdm1zdGF0LmNcbkBAIC0xNDk0LDYgKzE0OTQsMTEgQEAgY29uc3QgY2hhciAqIGNvbnN0IHZtc3RhdF90ZXh0W10gPSB7XG4gXHRbSShOUlNXUElOKV1cdFx0XHRcdD0gXCJucnN3cGluXCIsXG4gXHRbSShOUlNXUE9VVCldXHRcdFx0XHQ9IFwibnJzd3BvdXRcIixcbiAjZW5kaWYgLyogQ09ORklHX1NXQVAgKi9cbisjaWZkZWYgQ09ORklHX0FTWU5DX01NX1RFQVJET1dOXG4rXHRbSShBU1lOQ19NTV9URUFSRE9XTl9RVUVVRUQpXVx0PSBcImFzeW5jX21tX3RlYXJkb3duX3F1ZXVlZFwiLFxuK1x0W0koQVNZTkNfTU1fVEVBUkRPV05fU1lOQyldXHRcdD0gXCJhc3luY19tbV90ZWFyZG93bl9zeW5jXCIsXG4rXHRbSShBU1lOQ19NTV9URUFSRE9XTl9SRUpFQ1RFRCldXHQ9IFwiYXN5bmNfbW1fdGVhcmRvd25fcmVqZWN0ZWRcIixcbisjZW5kaWZcbiAjdW5kZWYgSVxuICNlbmRpZiAvKiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlMgKi9cbiB9O1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTlUMTk6NDE6NDEuMDM4MTg5ODE5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTMwMzc1NjAwNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBFdmFsdWF0aW9uOiBBc3luYyBNTSBUZWFyZG93bioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gV2UgaGF2ZSBhIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2luZyBgQ09ORklHX0FTWU5DX01NX1RFQVJET1dOYC4gVGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBjaGFuZ2UuIEl0J3MgZGVmZXJyaW5nIHRoZSBhZGRyZXNzIHNwYWNlIHRlYXJkb3duIChgZXhpdF9tbWFwKClgKSBvZiBleGl0aW5nIHByb2Nlc3NlcyB0byBhIGtlcm5lbCB0aHJlYWQsIGBtbV9yZWFwZXJgLiBUaGlzIGZ1bmRhbWVudGFsbHkgYWx0ZXJzIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgcHJvY2VzcyBleGl0IGFuZCBtZW1vcnkgbWFuYWdlbWVudC4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCAqbmVlZHMqIGZ1enppbmcuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgYWZmZWN0ZWQuIGBtbXB1dF9leGl0YCwgYG1tX3JlYXBlcmAsIGBhc3luY19tbV90ZWFyZG93bl9xdWV1ZWAsIGBhc3luY19tbV90ZWFyZG93bl9yZXNlcnZlYCwgYW5kIGBhc3luY19tbV90ZWFyZG93bl9lbGlnaWJsZWAgaW1tZWRpYXRlbHkgc3RhbmQgb3V0LiBUaG9zZSBhcmUgdGhlIGtleSBwaWVjZXMgb2YgdGhlIG5ldyBsb2dpYy4gVGhlIHBhdGNoIGFsc28gaW50cm9kdWNlcyBhIHN5c2N0bCwgYHZtLmFzeW5jX21tX3RlYXJkb3duYCwgd2hpY2ggaXMgaW1wb3J0YW50IGZvciBlbmFibGluZyB0aGUgZmVhdHVyZSBhdCBydW50aW1lLCBhbmQgb2YgY291cnNlLCB0aGUgYENPTkZJR19BU1lOQ19NTV9URUFSRE9XTmAgY29uZmlnIG9wdGlvbi5cblxuVGhlIGNvZGUgbW9kaWZpY2F0aW9ucyBhcmUgaW4gYGtlcm5lbC9mb3JrLmNgLCBga2VybmVsL2V4aXQuY2AsIGFuZCBgbW0vb29tX2tpbGwuY2AuIExldCdzIGVuc3VyZSB0aGUgcmVsZXZhbnQgY29kZSBwYXRocyBjYW4gYmUgZXhlY3V0ZWQ7IHRoYXQgaW5jbHVkZXMgdmVyaWZ5aW5nIHRoZSBzeXNjdGwgYW5kIGNvbmZpZyBvcHRpb24uXG5cbkEgcXVpY2sgcmV2aWV34oCmIHRoZSBjb25maWcgaXMgYEFTWU5DX01NX1RFQVJET1dOYC4gT2theSwgZ29vZC4gTm93LCBhYm91dCB0aG9zZSBmdW5jdGlvbnMuIEkgbmVlZCB0byBiZSBjYXJlZnVsLiBXaGlsZSBgbW1wdXRfZXhpdGAgaXMgZGlyZWN0bHkgaW52b2x2ZWQsIGl0J3MgY2FsbGVkIGZyb20gYGV4aXRfbW1gLCB3aGljaCBpcyBhIGZyZXF1ZW50bHkgYWNjZXNzZWQgcGF0aC4gVGhlIG5ldyBsb2dpYyBpcyBpbiBgbW1wdXRfZXhpdGAgaXRzZWxmIHRob3VnaCwgc28gbGV0J3MgaW5jbHVkZSBpdC4gYG1tX3JlYXBlcmAgaXMgdGhlIGt0aHJlYWQsIGl0J3MgZGVmaW5pdGVseSBvbiB0aGUgbGlzdC4gYGFzeW5jX21tX3RlYXJkb3duX3F1ZXVlYCwgYGFzeW5jX21tX3RlYXJkb3duX3Jlc2VydmVgLCBhbmQgYGFzeW5jX21tX3RlYXJkb3duX2VsaWdpYmxlYCBzZWVtIHRvIGJlIHRoZSBjb3JlIG9mIHRoZSBhc3luYyBsb2dpYy5cblxuQWxyaWdodCwgdGhlIHBsYW4gaXMgdG8gY2FsbCBgc2V0LXJlc3VsdHNgIHdpdGg6XG5cbiogICAqKldvcnRoRnV6emluZyoqOiBgdHJ1ZWAgKEFic29sdXRlbHkuIFRoaXMgaXMgaW1wb3J0YW50LilcbiogICAqKkZvY3VzU3ltYm9scyoqOiBgW1wibW1fcmVhcGVyXCIsIFwiYXN5bmNfbW1fdGVhcmRvd25fcXVldWVcIiwgXCJhc3luY19tbV90ZWFyZG93bl9yZXNlcnZlXCIsIFwiYXN5bmNfbW1fdGVhcmRvd25fZWxpZ2libGVcIiwgXCJtbXB1dF9leGl0XCJdYCAoSSdtIGxlYW5pbmcgdG93YXJkcyBgbW1wdXRfZXhpdGAgYXMgd2VsbCBiZWNhdXNlIGl0J3Mgd2hlcmUgdGhlIG5ldyBsb2dpYyBpbnRlcnNlY3RzIHdpdGggdGhlIGhvdCBwYXRoKVxuKiAgICoqRW5hYmxlQ29uZmlncyoqOiBgW1wiQVNZTkNfTU1fVEVBUkRPV05cIl1gIChUaGlzIGlzIHRoZSBjcml0aWNhbCBjb25maWcgdG8gZW5hYmxlIHRoZSBmZWF0dXJlLilcbiogICAqKlJlYXNvbmluZyoqOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZlYXR1cmUgdG8gYXN5bmNocm9ub3VzbHkgdGVhciBkb3duIHRoZSBhZGRyZXNzIHNwYWNlIG9mIGV4aXRpbmcgcHJvY2Vzc2VzIHZpYSBhIGRlZGljYXRlZCBrZXJuZWwgdGhyZWFkIChgbW1fcmVhcGVyYCkuIFRoaXMgbW9kaWZpZXMgY29yZSBwcm9jZXNzIGV4aXQgYW5kIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLCB3aGljaCBpcyBoaWdobHkgZnVuY3Rpb25hbCBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIlxuXG5JJ20gZG91YmxlLWNoZWNraW5nIHRoZSBjb2RlIGFnYWluIHRvIGJlIHRob3JvdWdoLiBJdCdzIGVhc3kgdG8gbWlzcyBzb21ldGhpbmcgd2hlbiB5b3UncmUgZm9jdXNpbmcgb24gdGhlIGNyaXRpY2FsIHBhdGguXG5cbldhaXQgYSBzZWNvbmTigKYgYG1tcHV0X2V4aXRgIGlzIGludm9rZWQgb24gZXZlcnkgdGFzayBleGl0LiBJIHdhbnQgdG8gYXZvaWQgaG90IHBhdGhzLCBidXQgYG1tcHV0X2V4aXRgIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgdGhlIG5ldyBsb2dpYy4gYG1tX3JlYXBlcmAsIGBhc3luY19tbV90ZWFyZG93bl9xdWV1ZWAsIGBhc3luY19tbV90ZWFyZG93bl9yZXNlcnZlYCwgYW5kIGBhc3luY19tbV90ZWFyZG93bl9lbGlnaWJsZWAgc2VlbXMgbGlrZSBhIGJldHRlciBmb2N1cywgbGV0J3Mga2VlcCBpdCB0aWdodCBvbiB0aGUgbmV3IGFkZGl0aW9ucy5cblxuT25lIG1vcmUgcmV2aWV3LiBObyBvdGhlciBjcnVjaWFsIGNvbmZpZyBkZXBlbmRlbmNpZXMuIE9rYXksIGl0IGxvb2tzIGxpa2UgYEFTWU5DX01NX1RFQVJET1dOYCBpcyB0aGUgbWFpbiBvbmUuXG5cbkxldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODgxMywiT3V0cHV0VG9rZW5zIjoxMzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTI1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTlUMTk6NDE6NTQuMDc1NzUzODc0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTA1MTI4NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFTWU5DX01NX1RFQVJET1dOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibW1fcmVhcGVyXCIsXG4gICAgXCJhc3luY19tbV90ZWFyZG93bl9xdWV1ZVwiLFxuICAgIFwiYXN5bmNfbW1fdGVhcmRvd25fcmVzZXJ2ZVwiLFxuICAgIFwiYXN5bmNfbW1fdGVhcmRvd25fZWxpZ2libGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZlYXR1cmUgdG8gYXN5bmNocm9ub3VzbHkgdGVhciBkb3duIHRoZSBhZGRyZXNzIHNwYWNlIG9mIGV4aXRpbmcgcHJvY2Vzc2VzIHZpYSBhIGRlZGljYXRlZCBrZXJuZWwgdGhyZWFkIChtbV9yZWFwZXIpLiBUaGlzIG1vZGlmaWVzIGNvcmUgcHJvY2VzcyBleGl0IGFuZCBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYywgd2hpY2ggaXMgaGlnaGx5IGZ1bmN0aW9uYWwgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQVNZTkNfTU1fVEVBUkRPV05cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtbV9yZWFwZXJcIixcbiAgICBcImFzeW5jX21tX3RlYXJkb3duX3F1ZXVlXCIsXG4gICAgXCJhc3luY19tbV90ZWFyZG93bl9yZXNlcnZlXCIsXG4gICAgXCJhc3luY19tbV90ZWFyZG93bl9lbGlnaWJsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmVhdHVyZSB0byBhc3luY2hyb25vdXNseSB0ZWFyIGRvd24gdGhlIGFkZHJlc3Mgc3BhY2Ugb2YgZXhpdGluZyBwcm9jZXNzZXMgdmlhIGEgZGVkaWNhdGVkIGtlcm5lbCB0aHJlYWQgKG1tX3JlYXBlcikuIFRoaXMgbW9kaWZpZXMgY29yZSBwcm9jZXNzIGV4aXQgYW5kIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLCB3aGljaCBpcyBoaWdobHkgZnVuY3Rpb25hbCBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflows9qwx[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-19 19:06:04 +0000 UTC FinishedAt: 2026-07-19 19:41:56 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "890f8c4e827c918dac668a12eaf63180ba8a9e6d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ASYNC_MM_TEARDOWN" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "890f8c4e827c918dac668a12eaf63180ba8a9e6d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ASYNC_MM_TEARDOWN" ], "series_id": "a6b57b51-6ef1-47de-84cd-8ec884cc2bd9" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "mm_reaper", "async_mm_teardown_queue", "async_mm_teardown_reserve", "async_mm_teardown_eligible" ], "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+CgkJCTx0ZD4yMDI2LzA3LzE5IDE5OjQxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FTWU5DX01NX1RFQVJET1dOJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bW1fcmVhcGVyJiMzNDssCiAgICAmIzM0O2FzeW5jX21tX3RlYXJkb3duX3F1ZXVlJiMzNDssCiAgICAmIzM0O2FzeW5jX21tX3RlYXJkb3duX3Jlc2VydmUmIzM0OywKICAgICYjMzQ7YXN5bmNfbW1fdGVhcmRvd25fZWxpZ2libGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmZWF0dXJlIHRvIGFzeW5jaHJvbm91c2x5IHRlYXIgZG93biB0aGUgYWRkcmVzcyBzcGFjZSBvZiBleGl0aW5nIHByb2Nlc3NlcyB2aWEgYSBkZWRpY2F0ZWQga2VybmVsIHRocmVhZCAobW1fcmVhcGVyKS4gVGhpcyBtb2RpZmllcyBjb3JlIHByb2Nlc3MgZXhpdCBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMsIHdoaWNoIGlzIGhpZ2hseSBmdW5jdGlvbmFsIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE5IDE5OjQxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMTFlNWY1MTk3MjQ3MTI3N2MzMmI0MGZmOTRhYWJiZDg2YTA0NjFlYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gSnVsIDE5IDE5OjQxOjM4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL3ZtLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL3ZtLnJzdFxuaW5kZXggNWIzMThkMTdhYTRiNDQuLmNjZGE2Yzc1ZmUxZmI3IDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwvdm0ucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC92bS5yc3RcbkBAIC0yMiw2ICYjNDM7MjIsOSBAQCB0aGUgd3JpdGVvdXQgb2YgZGlydHkgZGF0YSB0byBkaXNrLlxuIEN1cnJlbnRseSwgdGhlc2UgZmlsZXMgYXJlIGluIC9wcm9jL3N5cy92bTpcbiBcbiAtIGFkbWluX3Jlc2VydmVfa2J5dGVzXG4mIzQzOy0gYXN5bmNfbW1fdGVhcmRvd25cbiYjNDM7LSBhc3luY19tbV90ZWFyZG93bl9tYXhfcGVuZGluZ19wYWdlc1xuJiM0MzstIGFzeW5jX21tX3RlYXJkb3duX3RocmVzaF9wYWdlc1xuIC0gY29tcGFjdF9tZW1vcnlcbiAtIGNvbXBhY3Rpb25fcHJvYWN0aXZlbmVzc1xuIC0gY29tcGFjdF91bmV2aWN0YWJsZV9hbGxvd2VkXG5AQCAtMTA4LDYgJiM0MzsxMTEsNDEgQEAgT24geDg2XzY0IHRoaXMgaXMgYWJvdXQgMTI4TUIuXG4gQ2hhbmdpbmcgdGhpcyB0YWtlcyBlZmZlY3Qgd2hlbmV2ZXIgYW4gYXBwbGljYXRpb24gcmVxdWVzdHMgbWVtb3J5LlxuIFxuIFxuJiM0Mzthc3luY19tbV90ZWFyZG93blxuJiM0Mzs9PT09PT09PT09PT09PT09PVxuJiM0MztcbiYjNDM7QXZhaWxhYmxlIG9ubHkgd2hlbiBDT05GSUdfQVNZTkNfTU1fVEVBUkRPV04gaXMgc2V0LiBDb250cm9scyB3aGV0aGVyIHRoZVxuJiM0MzthZGRyZXNzLXNwYWNlIHRlYXJkb3duIChleGl0X21tYXAoKSkgb2YgbGFyZ2UgZXhpdGluZyBwcm9jZXNzZXMgaXMgZGVmZXJyZWRcbiYjNDM7dG8gdGhlIG1tX3JlYXBlciBrZXJuZWwgdGhyZWFkIGluc3RlYWQgb2YgcnVubmluZyBvbiB0aGUgZXhpdGluZyBDUFUuXG4mIzQzO1xuJiM0MztXcml0aW5nIDEgZW5hYmxlcyBkZWZlcnJhbCwgMCBkaXNhYmxlcyBpdC4gRGlzYWJsaW5nIG1ha2VzIG1tcHV0X2V4aXQoKSB0ZWFyXG4mIzQzO2Rvd24gaW5saW5lIGFnYWluOyBpdCBkb2VzIG5vdCBkcmFpbiBtbXMgYWxyZWFkeSBxdWV1ZWQuIERlZmF1bHRzIHRvIDAuXG4mIzQzO1xuJiM0MztEZWZlcnJlZCB0ZWFyZG93biBjb25zdW1lcyBDUFUgaW4gdGhlIG1tX3JlYXBlciBrZXJuZWwgdGhyZWFkLCB3aGljaCBydW5zIGluXG4mIzQzO3RoZSByb290IGNncm91cDogdGhlIHRlYXJkb3duIHdvcmsgb2YgYSB0YXNrIGluIGEgQ1BVLWxpbWl0ZWQgY2dyb3VwIGlzIG5vdFxuJiM0MztjaGFyZ2VkIHRvIHRoYXQgY2dyb3VwLCBzaW1pbGFyIHRvIGtzd2FwZCBhbmQgdGhlIG9vbV9yZWFwZXIuIENvbnNpZGVyIHRoaXNcbiYjNDM7YmVmb3JlIGVuYWJsaW5nIHRoZSBmZWF0dXJlIG9uIHN5c3RlbXMgdGhhdCByZWx5IG9uIHN0cmljdCBwZXItY2dyb3VwIENQVVxuJiM0MzthY2NvdW50aW5nLlxuJiM0MztcbiYjNDM7XG4mIzQzO2FzeW5jX21tX3RlYXJkb3duX21heF9wZW5kaW5nX3BhZ2VzXG4mIzQzOz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4mIzQzO1xuJiM0MztBdmFpbGFibGUgb25seSB3aGVuIENPTkZJR19BU1lOQ19NTV9URUFSRE9XTiBpcyBzZXQuIEJhY2twcmVzc3VyZSBjYXAsIGluXG4mIzQzO3BhZ2VzLCBvbiB0aGUgdG90YWwgUlNTIG9mIG1tcyBxdWV1ZWQgZm9yIHRoZSBtbV9yZWFwZXIgYnV0IG5vdCB5ZXQgdG9yblxuJiM0Mztkb3duLiBBbiBleGl0IHRoYXQgd291bGQgcHVzaCB0aGUgdG90YWwgb3ZlciB0aGlzIGNhcCB0ZWFycyBkb3duXG4mIzQzO3N5bmNocm9ub3VzbHkgaW5zdGVhZCBvZiBxdWV1aW5nLiBEZWZhdWx0cyB0byB0b3RhbHJhbV9wYWdlcygpIC8gNC5cbiYjNDM7XG4mIzQzO1xuJiM0Mzthc3luY19tbV90ZWFyZG93bl90aHJlc2hfcGFnZXNcbiYjNDM7PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4mIzQzO1xuJiM0MztBdmFpbGFibGUgb25seSB3aGVuIENPTkZJR19BU1lOQ19NTV9URUFSRE9XTiBpcyBzZXQuIE1pbmltdW0gUlNTLCBpbiBwYWdlcyxcbiYjNDM7Zm9yIGFuIGV4aXRpbmcgbW0gdG8gYmUgZWxpZ2libGUgZm9yIGRlZmVycmFsIHRvIHRoZSBtbV9yZWFwZXIuIEV4aXRpbmcgbW1zXG4mIzQzO2JlbG93IHRoaXMgdGhyZXNob2xkIGFyZSBhbHdheXMgdG9ybiBkb3duIHN5bmNocm9ub3VzbHkuIERlZmF1bHRzIHRvIDY0TUJcbiYjNDM7d29ydGggb2YgcGFnZXMuXG4mIzQzO1xuJiM0MztcbiBjb21wYWN0X21lbW9yeVxuID09PT09PT09PT09PT09XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oIGIvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oXG5pbmRleCA5MzliNWVhOGM5ZTBiZS4uZWU2YzBhYzg0YjNkNTkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaFxuQEAgLTcsNiAmIzQzOzcsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2F1eHZlYy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva3JlZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbGlzdC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xsaXN0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zcGlubG9jay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmJ0cmVlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tYXBsZV90cmVlLmhcdTAwM2VcbkBAIC0xMzY3LDYgJiM0MzsxMzY4LDEwIEBAIHN0cnVjdCBtbV9zdHJ1Y3Qge1xuIFx0XHRhdG9taWNfbG9uZ190IGh1Z2V0bGJfdXNhZ2U7XG4gI2VuZGlmXG4gXHRcdHN0cnVjdCB3b3JrX3N0cnVjdCBhc3luY19wdXRfd29yaztcbiYjNDM7I2lmZGVmIENPTkZJR19BU1lOQ19NTV9URUFSRE9XTlxuJiM0MztcdFx0c3RydWN0IGxsaXN0X25vZGUgYXN5bmNfcmVhcF9ub2RlO1xuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBhc3luY19yZWFwX3JzcztcbiYjNDM7I2VuZGlmIC8qIENPTkZJR19BU1lOQ19NTV9URUFSRE9XTiAqL1xuIFxuICNpZmRlZiBDT05GSUdfSU9NTVVfTU1fREFUQVxuIFx0XHRzdHJ1Y3QgaW9tbXVfbW1fZGF0YSAqaW9tbXVfbW07XG5AQCAtMTk4NSw2ICYjNDM7MTk5MCwxNiBAQCBlbnVtIHtcbiAjZGVmaW5lIE1NRl9UT1BET1dOXHRcdDMxXHQvKiBtbSBzZWFyY2hlcyB0b3AgZG93biBieSBkZWZhdWx0ICovXG4gI2RlZmluZSBNTUZfVE9QRE9XTl9NQVNLXHRCSVQoTU1GX1RPUERPV04pXG4gXG4mIzQzOy8qXG4mIzQzOyAqIG1tIGlzIHRoZSB0YXJnZXQgb2YgYW4gaW4tZmxpZ2h0IE9PTSBraWxsLiBPbmx5IHdyaXR0ZW4gdW5kZXJcbiYjNDM7ICogQ09ORklHX0FTWU5DX01NX1RFQVJET1dOIHRvZGF5LiBTdGlja3k6IG5ldmVyIGNsZWFyZWQgLS0gdGhlIG1tIGlzXG4mIzQzOyAqIGR5aW5nIChfX29vbV9raWxsX3Byb2Nlc3MoKSBraWxscyBldmVyeSBwcm9jZXNzIHNoYXJpbmcgaXQpLCBhbmQgYVxuJiM0MzsgKiBoeXBvdGhldGljYWwgc3Vydml2aW5nIHNoYXJlciB3b3VsZCBtZXJlbHkga2VlcCB0ZWFyaW5nIGRvd25cbiYjNDM7ICogc3luY2hyb25vdXNseS4gQWJvdmUgYml0IDMxLCBzbyBpdCBpcyBvdXRzaWRlIE1NRl9JTklUX0xFR0FDWV9NQVNLJiMzOTtzXG4mIzQzOyAqIGRvbWFpbiBlbnRpcmVseSBhbmQgaXMgbmV2ZXIgaW5oZXJpdGVkIG9uIGZvcmsuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIE1NRl9PT01fVEFSR0VURURcdDMyXG4mIzQzO1xuICNkZWZpbmUgTU1GX0lOSVRfTEVHQUNZX01BU0tcdChNTUZfRFVNUF9GSUxURVJfTUFTSyB8XFxcbiBcdFx0XHRcdCBNTUZfRElTQUJMRV9USFBfTUFTSyB8IE1NRl9IQVNfTURXRV9NQVNLIHxcXFxuIFx0XHRcdFx0IE1NRl9WTV9NRVJHRV9BTllfTUFTSyB8IE1NRl9UT1BET1dOX01BU0spXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oIGIvaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oXG5pbmRleCAxMGJlOGE1NGI0MTZmOS4uMjBhZWIxZDdlZDMxYjAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc2NoZWQvbW0uaFxuQEAgLTE0Nyw2ICYjNDM7MTQ3LDEyIEBAIGV4dGVybiB2b2lkIG1tcHV0KHN0cnVjdCBtbV9zdHJ1Y3QgKik7XG4gdm9pZCBtbXB1dF9hc3luYyhzdHJ1Y3QgbW1fc3RydWN0ICopO1xuICNlbmRpZlxuIFxuJiM0MzsjaWZkZWYgQ09ORklHX0FTWU5DX01NX1RFQVJET1dOXG4mIzQzO3ZvaWQgbW1wdXRfZXhpdChzdHJ1Y3QgbW1fc3RydWN0ICopO1xuJiM0MzsjZWxzZVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbW1wdXRfZXhpdChzdHJ1Y3QgbW1fc3RydWN0ICptbSkgeyBtbXB1dChtbSk7IH1cbiYjNDM7I2VuZGlmXG4mIzQzO1xuIC8qIEdyYWIgYSByZWZlcmVuY2UgdG8gYSB0YXNrJiMzOTtzIG1tLCBpZiBpdCBpcyBub3QgYWxyZWFkeSBnb2luZyBhd2F5ICovXG4gZXh0ZXJuIHN0cnVjdCBtbV9zdHJ1Y3QgKmdldF90YXNrX21tKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayk7XG4gLypcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZtX2V2ZW50X2l0ZW0uaCBiL2luY2x1ZGUvbGludXgvdm1fZXZlbnRfaXRlbS5oXG5pbmRleCAyNjI4Y2NkYTA3NmEwNy4uZGU0ZGMyMGI3Zjg3ZGUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3ZtX2V2ZW50X2l0ZW0uaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC92bV9ldmVudF9pdGVtLmhcbkBAIC0xNzksNiAmIzQzOzE3OSwxMSBAQCBlbnVtIHZtX2V2ZW50X2l0ZW0geyBQR1BHSU4sIFBHUEdPVVQsIFBTV1BJTiwgUFNXUE9VVCxcbiBcdFx0TlJTV1BJTixcbiBcdFx0TlJTV1BPVVQsXG4gI2VuZGlmIC8qIENPTkZJR19TV0FQICovXG4mIzQzOyNpZmRlZiBDT05GSUdfQVNZTkNfTU1fVEVBUkRPV05cbiYjNDM7XHRcdEFTWU5DX01NX1RFQVJET1dOX1FVRVVFRCxcbiYjNDM7XHRcdEFTWU5DX01NX1RFQVJET1dOX1NZTkMsXG4mIzQzO1x0XHRBU1lOQ19NTV9URUFSRE9XTl9SRUpFQ1RFRCxcbiYjNDM7I2VuZGlmXG4gXHRcdE5SX1ZNX0VWRU5UX0lURU1TXG4gfTtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9tbV9yZWFwZXIuaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL21tX3JlYXBlci5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjMxNWJjZWQ3YzQyNTNkXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9tbV9yZWFwZXIuaFxuQEAgLTAsMCAmIzQzOzEsNzMgQEBcbiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbiYjNDM7I3VuZGVmIFRSQUNFX1NZU1RFTVxuJiM0MzsjZGVmaW5lIFRSQUNFX1NZU1RFTSBtbV9yZWFwZXJcbiYjNDM7XG4mIzQzOyNpZiAhZGVmaW5lZChfVFJBQ0VfTU1fUkVBUEVSX0gpIHx8IGRlZmluZWQoVFJBQ0VfSEVBREVSX01VTFRJX1JFQUQpXG4mIzQzOyNkZWZpbmUgX1RSQUNFX01NX1JFQVBFUl9IXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC90cmFjZXBvaW50LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC90b3BvbG9neS5oXHUwMDNlXG4mIzQzO1xuJiM0MztUUkFDRV9FVkVOVChtbV9hc3luY190ZWFyZG93bl9xdWV1ZSxcbiYjNDM7XG4mIzQzO1x0VFBfUFJPVE8oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgcnNzKSxcbiYjNDM7XG4mIzQzO1x0VFBfQVJHUyhtbSwgcnNzKSxcbiYjNDM7XG4mIzQzO1x0VFBfU1RSVUNUX19lbnRyeShcbiYjNDM7XHRcdF9fZmllbGQoc3RydWN0IG1tX3N0cnVjdCAqLCBtbSlcbiYjNDM7XHRcdF9fZmllbGQoaW50LCBwaWQpXG4mIzQzO1x0XHRfX2FycmF5KGNoYXIsIGNvbW0sIFRBU0tfQ09NTV9MRU4pXG4mIzQzO1x0XHRfX2ZpZWxkKHVuc2lnbmVkIGxvbmcsIHJzcylcbiYjNDM7XHRcdF9fZmllbGQoaW50LCBub2RlKVxuJiM0MztcdCksXG4mIzQzO1xuJiM0MztcdFRQX2Zhc3RfYXNzaWduKFxuJiM0MztcdFx0X19lbnRyeS1cdTAwM2VtbSA9IG1tO1xuJiM0MztcdFx0X19lbnRyeS1cdTAwM2VwaWQgPSBjdXJyZW50LVx1MDAzZXBpZDtcbiYjNDM7XHRcdG1lbWNweShfX2VudHJ5LVx1MDAzZWNvbW0sIGN1cnJlbnQtXHUwMDNlY29tbSwgVEFTS19DT01NX0xFTik7XG4mIzQzO1x0XHRfX2VudHJ5LVx1MDAzZXJzcyA9IHJzcztcbiYjNDM7XHRcdF9fZW50cnktXHUwMDNlbm9kZSA9IG51bWFfbm9kZV9pZCgpO1xuJiM0MztcdCksXG4mIzQzO1xuJiM0MztcdFRQX3ByaW50ayhcJiMzNDttbT0lcCBwaWQ9JWQgY29tbT0lcyByc3M9JWx1a0Igbm9kZT0lZFwmIzM0OyxcbiYjNDM7XHRcdF9fZW50cnktXHUwMDNlbW0sXG4mIzQzO1x0XHRfX2VudHJ5LVx1MDAzZXBpZCxcbiYjNDM7XHRcdF9fZW50cnktXHUwMDNlY29tbSxcbiYjNDM7XHRcdF9fZW50cnktXHUwMDNlcnNzIFx1MDAzY1x1MDAzYyAoUEFHRV9TSElGVCAtIDEwKSxcbiYjNDM7XHRcdF9fZW50cnktXHUwMDNlbm9kZVxuJiM0MztcdClcbiYjNDM7KTtcbiYjNDM7XG4mIzQzO1RSQUNFX0VWRU5UKG1tX2FzeW5jX3RlYXJkb3duX3JlYXAsXG4mIzQzO1xuJiM0MztcdFRQX1BST1RPKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGNoYXJnZWRfcnNzLCB1bnNpZ25lZCBsb25nIGxpdmVfcnNzKSxcbiYjNDM7XG4mIzQzO1x0VFBfQVJHUyhtbSwgY2hhcmdlZF9yc3MsIGxpdmVfcnNzKSxcbiYjNDM7XG4mIzQzO1x0VFBfU1RSVUNUX19lbnRyeShcbiYjNDM7XHRcdF9fZmllbGQoc3RydWN0IG1tX3N0cnVjdCAqLCBtbSlcbiYjNDM7XHRcdF9fZmllbGQodW5zaWduZWQgbG9uZywgY2hhcmdlZF9yc3MpXG4mIzQzO1x0XHRfX2ZpZWxkKHVuc2lnbmVkIGxvbmcsIGxpdmVfcnNzKVxuJiM0MztcdFx0X19maWVsZChpbnQsIG5vZGUpXG4mIzQzO1x0KSxcbiYjNDM7XG4mIzQzO1x0VFBfZmFzdF9hc3NpZ24oXG4mIzQzO1x0XHRfX2VudHJ5LVx1MDAzZW1tID0gbW07XG4mIzQzO1x0XHRfX2VudHJ5LVx1MDAzZWNoYXJnZWRfcnNzID0gY2hhcmdlZF9yc3M7XG4mIzQzO1x0XHRfX2VudHJ5LVx1MDAzZWxpdmVfcnNzID0gbGl2ZV9yc3M7XG4mIzQzO1x0XHRfX2VudHJ5LVx1MDAzZW5vZGUgPSBudW1hX25vZGVfaWQoKTtcbiYjNDM7XHQpLFxuJiM0MztcbiYjNDM7XHRUUF9wcmludGsoXCYjMzQ7bW09JXAgY2hhcmdlZF9yc3M9JWx1a0IgbGl2ZV9yc3M9JWx1a0Igbm9kZT0lZFwmIzM0OyxcbiYjNDM7XHRcdF9fZW50cnktXHUwMDNlbW0sXG4mIzQzO1x0XHRfX2VudHJ5LVx1MDAzZWNoYXJnZWRfcnNzIFx1MDAzY1x1MDAzYyAoUEFHRV9TSElGVCAtIDEwKSxcbiYjNDM7XHRcdF9fZW50cnktXHUwMDNlbGl2ZV9yc3MgXHUwMDNjXHUwMDNjIChQQUdFX1NISUZUIC0gMTApLFxuJiM0MztcdFx0X19lbnRyeS1cdTAwM2Vub2RlXG4mIzQzO1x0KVxuJiM0MzspO1xuJiM0MztcbiYjNDM7I2VuZGlmIC8qIF9UUkFDRV9NTV9SRUFQRVJfSCAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdHJhY2UvZGVmaW5lX3RyYWNlLmhcdTAwM2VcbmRpZmYgLS1naXQgYS9rZXJuZWwvZXhpdC5jIGIva2VybmVsL2V4aXQuY1xuaW5kZXggMTA1NjQyMmJjMTAxM2UuLjZmOTdkMjA0ZjlmY2FjIDEwMDY0NFxuLS0tIGEva2VybmVsL2V4aXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2V4aXQuY1xuQEAgLTYwNyw3ICYjNDM7NjA3LDcgQEAgc3RhdGljIHZvaWQgZXhpdF9tbSh2b2lkKVxuIFx0dGFza191bmxvY2soY3VycmVudCk7XG4gXHRtbWFwX3JlYWRfdW5sb2NrKG1tKTtcbiBcdG1tX3VwZGF0ZV9uZXh0X293bmVyKG1tKTtcbi1cdG1tcHV0KG1tKTtcbiYjNDM7XHRtbXB1dF9leGl0KG1tKTtcbiBcdGlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl9NRU1ESUUpKVxuIFx0XHRleGl0X29vbV92aWN0aW0oKTtcbiB9XG5kaWZmIC0tZ2l0IGEva2VybmVsL2ZvcmsuYyBiL2tlcm5lbC9mb3JrLmNcbmluZGV4IGYwZTJlMTMxYTlhNWFmLi40YmRmZmExODhmNTIyNCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9mb3JrLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9mb3JrLmNcbkBAIC0xMTIsNiAmIzQzOzExMiw4IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdW53aW5kX2RlZmVycmVkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wZ2FsbG9jLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91YWNjZXNzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvaXNvbGF0aW9uLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc2l6ZXMuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY2FzbS9tbXVfY29udGV4dC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2NhY2hlZmx1c2guaFx1MDAzZVxuQEAgLTEyNCw2ICYjNDM7MTI2LDkgQEBcbiBcbiAjZGVmaW5lIENSRUFURV9UUkFDRV9QT0lOVFNcbiAjaW5jbHVkZSBcdTAwM2N0cmFjZS9ldmVudHMvdGFzay5oXHUwMDNlXG4mIzQzOyNpZmRlZiBDT05GSUdfQVNZTkNfTU1fVEVBUkRPV05cbiYjNDM7I2luY2x1ZGUgXHUwMDNjdHJhY2UvZXZlbnRzL21tX3JlYXBlci5oXHUwMDNlXG4mIzQzOyNlbmRpZlxuIFxuICNpbmNsdWRlIFx1MDAzY2t1bml0L3Zpc2liaWxpdHkuaFx1MDAzZVxuIFxuQEAgLTM0MDcsMyAmIzQzOzM0MTIsMTk3IEBAIHN0YXRpYyBpbnQgX19pbml0IGluaXRfZm9ya19zeXNjdGwodm9pZClcbiB9XG4gXG4gc3Vic3lzX2luaXRjYWxsKGluaXRfZm9ya19zeXNjdGwpO1xuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR19BU1lOQ19NTV9URUFSRE9XTlxuJiM0MztzdGF0aWMgTExJU1RfSEVBRChtbV9yZWFwZXJfbGlzdCk7XG4mIzQzO3N0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChtbV9yZWFwZXJfd2FpdCk7XG4mIzQzO3N0YXRpYyBhdG9taWNfbG9uZ190IG1tX3JlYXBlcl9wZW5kaW5nX3BhZ2VzO1xuJiM0MztzdGF0aWMgREVGSU5FX1NUQVRJQ19LRVlfRkFMU0UoYXN5bmNfbW1fdGVhcmRvd25fa2V5KTtcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgc3lzY3RsX2FzeW5jX21tX3RlYXJkb3duX3RocmVzaF9wYWdlcztcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgc3lzY3RsX2FzeW5jX21tX3RlYXJkb3duX21heF9wZW5kaW5nX3BhZ2VzO1xuJiM0MzsjaWZkZWYgQ09ORklHX1NZU0NUTFxuJiM0MztzdGF0aWMgdTggc3lzY3RsX2FzeW5jX21tX3RlYXJkb3duX2VuYWJsZWQ7XG4mIzQzO3N0YXRpYyBERUZJTkVfTVVURVgoYXN5bmNfbW1fdGVhcmRvd25fbG9jayk7XG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgYXN5bmNfbW1fdGVhcmRvd25fZWxpZ2libGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgcnNzKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHJzcyBcdTAwM2MgUkVBRF9PTkNFKHN5c2N0bF9hc3luY19tbV90ZWFyZG93bl90aHJlc2hfcGFnZXMpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdGlmIChtbV9mbGFnc190ZXN0KE1NRl9PT01fU0tJUCwgbW0pKVx0LyogcmVhcGVkLCBvciBoaWRkZW4gZnJvbSB0aGUgcmVhcGVyICovXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBNTUZfT09NX1RBUkdFVEVEIGlzIHNldCBieSB0aGUgT09NIGtpbGxlciB3aGlsZSBzb21lIHRhc2sgc3RpbGxcbiYjNDM7XHQgKiBob2xkcyBhIGxpdmUgcmVmZXJlbmNlIHRvIHRoaXMgbW0gKHNlZSBtYXJrX29vbV92aWN0aW0oKSBhbmRcbiYjNDM7XHQgKiBfX29vbV9raWxsX3Byb2Nlc3MoKSksIGFuZCB0aGlzIGVsaWdpYmlsaXR5IGNoZWNrIGlzIHJlYWNoZWQgb25seVxuJiM0MztcdCAqIGZyb20gbW1wdXRfZXhpdCgpLCBhZnRlciBtbV91c2VycyBoYXMgZHJvcHBlZCB0byAwIC0tIHNvIG1hcmtpbmdcbiYjNDM7XHQgKiBhbmQgdGhpcyBjaGVjayBjYW4gbmV2ZXIgb3ZlcmxhcCBpbiB0aW1lLiBXaGljaGV2ZXIgdGhyZWFkXG4mIzQzO1x0ICogcGVyZm9ybXMgdGhlIGZpbmFsIGRlY3JlbWVudCBpcyB0aGVyZWZvcmUgZ3VhcmFudGVlZCB0byBvYnNlcnZlXG4mIzQzO1x0ICogdGhlIGZsYWcgYWxyZWFkeSBzZXQsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGF0IHRocmVhZCB3YXNcbiYjNDM7XHQgKiBpdHNlbGYgZXZlciBwYXNzZWQgdG8gbWFya19vb21fdmljdGltKCkgKGEgQ0xPTkVfVk0tc2hhcmluZ1xuJiM0MztcdCAqIHByb2Nlc3MgaW4gYW5vdGhlciB0aHJlYWQgZ3JvdXAgbmV2ZXIgaXMsIGJ1dCBzdGlsbCBvYnNlcnZlc1xuJiM0MztcdCAqIHRoaXMgZmxhZyBvbiB0aGUgc2hhcmVkIG1tKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAobW1fZmxhZ3NfdGVzdChNTUZfT09NX1RBUkdFVEVELCBtbSkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIENoYXJnZSByc3MgYWdhaW5zdCB0aGUgcGVuZGluZy10ZWFyZG93biBidWRnZXQuICBSZXR1cm5zIHRydWUgaWYgaXQgZml0c1xuJiM0MzsgKiB1bmRlciB0aGUgY2FwLCBpbiB3aGljaCBjYXNlIHRoZSBjYWxsZXIgZW5xdWV1ZXMgYW5kIHRoZSByZWFwZXIgcmVsZWFzZXNcbiYjNDM7ICogdGhlIHNhbWUgcnNzIGFmdGVyIF9fbW1wdXQoKS4gIE9uIG92ZXJzaG9vdCBub3RoaW5nIHN0YXlzIGNoYXJnZWQgYW5kIHRoZVxuJiM0MzsgKiBjYWxsZXIgbXVzdCB0ZWFyIGRvd24gc3luY2hyb25vdXNseS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBib29sIGFzeW5jX21tX3RlYXJkb3duX3Jlc2VydmUodW5zaWduZWQgbG9uZyByc3MpXG4mIzQzO3tcbiYjNDM7XHRpZiAoYXRvbWljX2xvbmdfYWRkX3JldHVybihyc3MsIFx1MDAyNm1tX3JlYXBlcl9wZW5kaW5nX3BhZ2VzKSBcdTAwM2VcbiYjNDM7XHQgICAgUkVBRF9PTkNFKHN5c2N0bF9hc3luY19tbV90ZWFyZG93bl9tYXhfcGVuZGluZ19wYWdlcykpIHtcbiYjNDM7XHRcdGF0b21pY19sb25nX3N1Yihyc3MsIFx1MDAyNm1tX3JlYXBlcl9wZW5kaW5nX3BhZ2VzKTtcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGFzeW5jX21tX3RlYXJkb3duX3F1ZXVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHJzcylcbiYjNDM7e1xuJiM0MztcdGNvdW50X3ZtX2V2ZW50KEFTWU5DX01NX1RFQVJET1dOX1FVRVVFRCk7XG4mIzQzO1x0dHJhY2VfbW1fYXN5bmNfdGVhcmRvd25fcXVldWUobW0sIHJzcyk7XG4mIzQzO1x0aWYgKGxsaXN0X2FkZChcdTAwMjZtbS1cdTAwM2Vhc3luY19yZWFwX25vZGUsIFx1MDAyNm1tX3JlYXBlcl9saXN0KSlcbiYjNDM7XHRcdHdha2VfdXAoXHUwMDI2bW1fcmVhcGVyX3dhaXQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG1tX3JlYXBlcih2b2lkICp1bnVzZWQpXG4mIzQzO3tcbiYjNDM7XHRzZXRfZnJlZXphYmxlKCk7XG4mIzQzO1x0d2hpbGUgKHRydWUpIHtcbiYjNDM7XHRcdHN0cnVjdCBsbGlzdF9ub2RlICpiYXRjaDtcbiYjNDM7XHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCAqbjtcbiYjNDM7XG4mIzQzO1x0XHR3YWl0X2V2ZW50X2ZyZWV6YWJsZShtbV9yZWFwZXJfd2FpdCwgIWxsaXN0X2VtcHR5KFx1MDAyNm1tX3JlYXBlcl9saXN0KSk7XG4mIzQzO1x0XHRiYXRjaCA9IGxsaXN0X2RlbF9hbGwoXHUwMDI2bW1fcmVhcGVyX2xpc3QpO1xuJiM0MztcdFx0bGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShtbSwgbiwgYmF0Y2gsIGFzeW5jX3JlYXBfbm9kZSkge1xuJiM0MztcdFx0XHR1bnNpZ25lZCBsb25nIHBhZ2VzID0gbW0tXHUwMDNlYXN5bmNfcmVhcF9yc3M7XG4mIzQzO1x0XHRcdHVuc2lnbmVkIGxvbmcgbGl2ZSA9IGdldF9tbV9yc3MobW0pO1xuJiM0MztcbiYjNDM7XHRcdFx0dHJhY2VfbW1fYXN5bmNfdGVhcmRvd25fcmVhcChtbSwgcGFnZXMsIGxpdmUpO1xuJiM0MztcbiYjNDM7XHRcdFx0X19tbXB1dChtbSk7IC8qIG1heSBmcmVlIG1tIHZpYSBtbWRyb3AgKi9cbiYjNDM7XHRcdFx0YXRvbWljX2xvbmdfc3ViKHBhZ2VzLCBcdTAwMjZtbV9yZWFwZXJfcGVuZGluZ19wYWdlcyk7XG4mIzQzO1x0XHRcdGNvbmRfcmVzY2hlZCgpO1xuJiM0MztcdFx0XHR0cnlfdG9fZnJlZXplKCk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIG1tcHV0X2V4aXQoc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4mIzQzO3tcbiYjNDM7XHRtaWdodF9zbGVlcCgpO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRnVsbHkgb3JkZXJlZCBSTVc6IGNvbWJpbmVkIHdpdGggZXhpdF9tbSgpIChvciBleGVjX21tYXAoKSwgdGhlXG4mIzQzO1x0ICogb3RoZXIgcGF0aCB0aGF0IHNoZWRzIC1cdTAwM2VtbSkgY2xlYXJpbmcgLVx1MDAzZW1tIHVuZGVyIHRhc2tfbG9jaygpIGJlZm9yZVxuJiM0MztcdCAqIHRoaXMgY2FsbCwgaXQgZ3VhcmFudGVlcyBNTUZfT09NX1RBUkdFVEVEIHNldCBhdCBhbnkgbWFyayBzaXRlIGlzXG4mIzQzO1x0ICogdmlzaWJsZSBoZXJlIC0tIHNlZSBtYXJrX29vbV92aWN0aW0oKS4gQW55IG5ldyBjYWxsZXIgb2ZcbiYjNDM7XHQgKiBtbXB1dF9leGl0KCkgb3V0c2lkZSBleGl0X21tKCkgbXVzdCByZS12ZXJpZnkgdGhhdCBhcmd1bWVudC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIWF0b21pY19kZWNfYW5kX3Rlc3QoXHUwMDI2bW0tXHUwMDNlbW1fdXNlcnMpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZhc3luY19tbV90ZWFyZG93bl9rZXkpKSB7XG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIHJzcyA9IGdldF9tbV9yc3MobW0pO1xuJiM0MztcbiYjNDM7XHRcdGlmIChhc3luY19tbV90ZWFyZG93bl9lbGlnaWJsZShtbSwgcnNzKSkge1xuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBleGl0X2FpbygpIGNhbiBibG9jayBpbmRlZmluaXRlbHkuIFJ1biBpdCBoZXJlIHNvIGEgc3R1Y2tcbiYjNDM7XHRcdFx0ICogQUlPIG9ubHkgaGFuZ3MgdGhpcyB0YXNrIChzYW1lIGFzIGhvdyBpdCB3b3VsZCBoYXBwZW4gaW5cbiYjNDM7XHRcdFx0ICogY2FzZSBvZiBzeW5jaHJvbm91cyBtbXB1dCgpKSBpbnN0ZWFkIG9mIHN0cmFuZGluZyBldmVyeVxuJiM0MztcdFx0XHQgKiB0ZWFyZG93biBxdWV1ZWQgYmVoaW5kIHRoaXMgbW1cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdGV4aXRfYWlvKG1tKTtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmIChhc3luY19tbV90ZWFyZG93bl9yZXNlcnZlKHJzcykpIHtcbiYjNDM7XHRcdFx0XHRtbS1cdTAwM2Vhc3luY19yZWFwX3JzcyA9IHJzcztcbiYjNDM7XHRcdFx0XHRhc3luY19tbV90ZWFyZG93bl9xdWV1ZShtbSwgcnNzKTtcbiYjNDM7XHRcdFx0XHRyZXR1cm47XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0Y291bnRfdm1fZXZlbnQoQVNZTkNfTU1fVEVBUkRPV05fUkVKRUNURUQpO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Y291bnRfdm1fZXZlbnQoQVNZTkNfTU1fVEVBUkRPV05fU1lOQyk7XG4mIzQzO1x0X19tbXB1dChtbSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOyNpZmRlZiBDT05GSUdfU1lTQ1RMXG4mIzQzO3N0YXRpYyBpbnQgYXN5bmNfbW1fdGVhcmRvd25fZW5hYmxlZF9oYW5kbGVyKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLFxuJiM0MztcdFx0XHRcdFx0ICAgICBpbnQgd3JpdGUsIHZvaWQgKmJ1ZmZlcixcbiYjNDM7XHRcdFx0XHRcdCAgICAgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFNlcmlhbGl6ZSBjb25jdXJyZW50IHdyaXRlcnMgc28gdGhlIHN0YXRpYyBrZXkgc3RhdGUgYWx3YXlzIG1hdGNoZXNcbiYjNDM7XHQgKiB0aGUgbGFzdCB2YWx1ZSB3cml0dGVuIHRvIHRoZSB2YXJpYWJsZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRndWFyZChtdXRleCkoXHUwMDI2YXN5bmNfbW1fdGVhcmRvd25fbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldCA9IHByb2NfZG91OHZlY19taW5tYXgodGFibGUsIHdyaXRlLCBidWZmZXIsIGxlbnAsIHBwb3MpO1xuJiM0MztcdGlmIChyZXQgfHwgIXdyaXRlKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKHN5c2N0bF9hc3luY19tbV90ZWFyZG93bl9lbmFibGVkKVxuJiM0MztcdFx0c3RhdGljX2JyYW5jaF9lbmFibGUoXHUwMDI2YXN5bmNfbW1fdGVhcmRvd25fa2V5KTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRzdGF0aWNfYnJhbmNoX2Rpc2FibGUoXHUwMDI2YXN5bmNfbW1fdGVhcmRvd25fa2V5KTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgYXN5bmNfbW1fdGVhcmRvd25fdGFibGVbXSA9IHtcbiYjNDM7XHR7XG4mIzQzO1x0XHQucHJvY25hbWVcdD0gXCYjMzQ7YXN5bmNfbW1fdGVhcmRvd25cJiMzNDssXG4mIzQzO1x0XHQuZGF0YVx0XHQ9IFx1MDAyNnN5c2N0bF9hc3luY19tbV90ZWFyZG93bl9lbmFibGVkLFxuJiM0MztcdFx0Lm1heGxlblx0XHQ9IHNpemVvZih1OCksXG4mIzQzO1x0XHQubW9kZVx0XHQ9IDA2NDQsXG4mIzQzO1x0XHQucHJvY19oYW5kbGVyXHQ9IGFzeW5jX21tX3RlYXJkb3duX2VuYWJsZWRfaGFuZGxlcixcbiYjNDM7XHRcdC5leHRyYTFcdFx0PSBTWVNDVExfWkVSTyxcbiYjNDM7XHRcdC5leHRyYTJcdFx0PSBTWVNDVExfT05FLFxuJiM0MztcdH0sXG4mIzQzO1x0e1xuJiM0MztcdFx0LnByb2NuYW1lXHQ9IFwmIzM0O2FzeW5jX21tX3RlYXJkb3duX3RocmVzaF9wYWdlc1wmIzM0OyxcbiYjNDM7XHRcdC5kYXRhXHRcdD0gXHUwMDI2c3lzY3RsX2FzeW5jX21tX3RlYXJkb3duX3RocmVzaF9wYWdlcyxcbiYjNDM7XHRcdC5tYXhsZW5cdFx0PSBzaXplb2YodW5zaWduZWQgbG9uZyksXG4mIzQzO1x0XHQubW9kZVx0XHQ9IDA2NDQsXG4mIzQzO1x0XHQucHJvY19oYW5kbGVyXHQ9IHByb2NfZG91bG9uZ3ZlY19taW5tYXgsXG4mIzQzO1x0fSxcbiYjNDM7XHR7XG4mIzQzO1x0XHQucHJvY25hbWVcdD0gXCYjMzQ7YXN5bmNfbW1fdGVhcmRvd25fbWF4X3BlbmRpbmdfcGFnZXNcJiMzNDssXG4mIzQzO1x0XHQuZGF0YVx0XHQ9IFx1MDAyNnN5c2N0bF9hc3luY19tbV90ZWFyZG93bl9tYXhfcGVuZGluZ19wYWdlcyxcbiYjNDM7XHRcdC5tYXhsZW5cdFx0PSBzaXplb2YodW5zaWduZWQgbG9uZyksXG4mIzQzO1x0XHQubW9kZVx0XHQ9IDA2NDQsXG4mIzQzO1x0XHQucHJvY19oYW5kbGVyXHQ9IHByb2NfZG91bG9uZ3ZlY19taW5tYXgsXG4mIzQzO1x0fSxcbiYjNDM7fTtcbiYjNDM7I2VuZGlmIC8qIENPTkZJR19TWVNDVEwgKi9cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgX19pbml0IG1tX3JlYXBlcl9pbml0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRoO1xuJiM0MztcbiYjNDM7XHR0aCA9IGt0aHJlYWRfY3JlYXRlKG1tX3JlYXBlciwgTlVMTCwgXCYjMzQ7bW1fcmVhcGVyXCYjMzQ7KTtcbiYjNDM7XHRpZiAoSVNfRVJSKHRoKSkge1xuJiM0MztcdFx0cHJfZXJyKFwmIzM0O21tX3JlYXBlcjogZmFpbGVkIHRvIHN0YXJ0IGt0aHJlYWQ6ICVsZFxcblwmIzM0OywgUFRSX0VSUih0aCkpO1xuJiM0MztcdFx0cmV0dXJuIFBUUl9FUlIodGgpO1xuJiM0MztcdH1cbiYjNDM7XHRzZXRfdXNlcl9uaWNlKHRoLCAxOSk7IC8qIG1pbmltaXplIGNvbXBldGl0aW9uIHdpdGggb3RoZXIgZmFpciBjbGFzcyB0YXNrcyAqL1xuJiM0MztcdGt0aHJlYWRfYWZmaW5lX3ByZWZlcnJlZCh0aCwgaG91c2VrZWVwaW5nX2NwdW1hc2soSEtfVFlQRV9LVEhSRUFEKSk7XG4mIzQzO1x0c3lzY3RsX2FzeW5jX21tX3RlYXJkb3duX3RocmVzaF9wYWdlcyAgICAgID0gU1pfNjRNIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuJiM0MztcdHN5c2N0bF9hc3luY19tbV90ZWFyZG93bl9tYXhfcGVuZGluZ19wYWdlcyA9IHRvdGFscmFtX3BhZ2VzKCkgLyA0OyAgLyogVE9ETzogcGxhY2Vob2xkZXIgKi9cbiYjNDM7XHR3YWtlX3VwX3Byb2Nlc3ModGgpO1xuJiM0MzsjaWZkZWYgQ09ORklHX1NZU0NUTFxuJiM0MztcdHJlZ2lzdGVyX3N5c2N0bF9pbml0KFwmIzM0O3ZtXCYjMzQ7LCBhc3luY19tbV90ZWFyZG93bl90YWJsZSk7XG4mIzQzOyNlbmRpZlxuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO3N1YnN5c19pbml0Y2FsbChtbV9yZWFwZXJfaW5pdCk7XG4mIzQzOyNlbmRpZlxuZGlmZiAtLWdpdCBhL21tL0tjb25maWcgYi9tbS9LY29uZmlnXG5pbmRleCBjNTJhYjZhZmNiMTU5Ni4uYTlkOTI1NDA2NjUzZjggMTAwNjQ0XG4tLS0gYS9tbS9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9LY29uZmlnXG5AQCAtMTUwMCw2ICYjNDM7MTUwMCwxOCBAQCBjb25maWcgTEFaWV9NTVVfTU9ERV9LVU5JVF9URVNUXG4gXG4gXHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gXG4mIzQzO2NvbmZpZyBBU1lOQ19NTV9URUFSRE9XTlxuJiM0MztcdGJvb2wgXCYjMzQ7QXN5bmMgb2ZmLUNQVSBhZGRyZXNzIHNwYWNlIHRlYXJkb3duIG9uIGV4aXRcJiMzNDtcbiYjNDM7XHRkZXBlbmRzIG9uIE1NVVxuJiM0MztcdGRlZmF1bHQgblxuJiM0MztcdGhlbHBcbiYjNDM7XHQgIERlZmVyIHRoZSBhZGRyZXNzIHNwYWNlIHRlYXJkb3duIChleGl0X21tYXAoKSkgb2YgbGFyZ2UgZXhpdGluZyBwcm9jZXNzZXNcbiYjNDM7XHQgIHRvIGEga2VybmVsIHRocmVhZCBpbnN0ZWFkIG9mIHJ1bm5pbmcgaXQgb24gdGhlIGV4aXRpbmcgQ1BVLiBUaGUgZmVhdHVyZVxuJiM0MztcdCAgaXMgb2ZmIGJ5IGRlZmF1bHQgYW5kIGlzIGVuYWJsZWQgYXQgcnVudGltZSB2aWEgdGhlIHZtLmFzeW5jX21tX3RlYXJkb3duXG4mIzQzO1x0ICBzeXNjdGwuXG4mIzQzO1xuJiM0MztcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiYjNDM7XG4gc291cmNlIFwmIzM0O21tL2RhbW9uL0tjb25maWdcJiMzNDtcbiBcbiBlbmRtZW51XG5kaWZmIC0tZ2l0IGEvbW0vb29tX2tpbGwuYyBiL21tL29vbV9raWxsLmNcbmluZGV4IDVmMzcyZjZlMjZmYTMyLi5iNTQ5MGQxYjFiZDI2MSAxMDA2NDRcbi0tLSBhL21tL29vbV9raWxsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL29vbV9raWxsLmNcbkBAIC03NTQsNiAmIzQzOzc1NCw0MCBAQCBzdGF0aWMgdm9pZCBtYXJrX29vbV92aWN0aW0oc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXG4gXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHRzay1cdTAwM2VtbTtcbiBcbiBcdFdBUk5fT04ob29tX2tpbGxlcl9kaXNhYmxlZCk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogTWFyayB0aGUgbW0gaXRzZWxmLCBub3QganVzdCB0aGlzIHRhc2svc2lnbmFsLCBhcyBhbiBPT00gdGFyZ2V0LFxuJiM0MztcdCAqIHNvIHRoZSBkZWZlcnJlZC10ZWFyZG93biBwYXRoIGNhbiB0ZXN0IGl0IGZyb20gdGhlIG1tIGFsb25lLiBTZXRcbiYjNDM7XHQgKiBhaGVhZCBvZiB0aGUgVElGX01FTURJRSB0ZXN0LWFuZC1zZXQgYmVsb3cgc28gdGhhdCBldmVyeSBjYWxsXG4mIzQzO1x0ICogbWFya3MgdGhlIG1tLCBpbmNsdWRpbmcgYSByZXBlYXQgbWFyayBvbiBhIHRhc2sgdGhhdCBpcyBhbHJlYWR5XG4mIzQzO1x0ICogVElGX01FTURJRS5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIFRoaXMgaXMgcmVsaWFibHkgdmlzaWJsZSB0byB3aGljaGV2ZXIgdGhyZWFkIGVuZHMgdXAgZHJvcHBpbmcgdGhlXG4mIzQzO1x0ICogbGFzdCByZWZlcmVuY2UgaW4gbW1wdXRfZXhpdCgpOiBtYXJraW5nIGFuZCBxdWV1aW5nIGZvciBhc3luY1xuJiM0MztcdCAqIHRlYXJkb3duIGNhbiBuZXZlciBvdmVybGFwIGluIHRpbWUuIEV2ZXJ5IGNhbGxlciByZWFjaGVzIHRoaXMgd2l0aFxuJiM0MztcdCAqIHRzay1cdTAwM2VtbSBzdGlsbCBzZXQgLS0gZWl0aGVyIHRzayBpcyBjdXJyZW50LCBtYXJraW5nIGl0c2VsZiBpblxuJiM0MztcdCAqIHByb2dyYW0gb3JkZXIsIG9yIHRzayBpcyB0YXNrX2xvY2soKWVkIGJ5IHRoZSBjYWxsZXIgKHRoZVxuJiM0MztcdCAqIHRhc2tfd2lsbF9mcmVlX21lbSgpIGZhc3QgcGF0aCBpbiBvb21fa2lsbF9wcm9jZXNzKCkpIC0tIHdoaWxlXG4mIzQzO1x0ICogbW1wdXRfZXhpdCgpLCB0aGUgb25seSBwYXRoIHRoYXQgcXVldWVzIGZvciB0ZWFyZG93biwgaXMgcmVhY2hlZFxuJiM0MztcdCAqIG9ubHkgYWZ0ZXIgbW1fdXNlcnMgaGl0cyAwLCB3aGljaCByZXF1aXJlcyB0c2smIzM5O3Mgb3duIGV4aXRfbW0oKSAob3JcbiYjNDM7XHQgKiBleGVjX21tYXAoKSwgdGhlIG90aGVyIHBhdGggdGhhdCBzaGVkcyAtXHUwMDNlbW0pIHRvIGhhdmUgYWxyZWFkeVxuJiM0MztcdCAqIGNsZWFyZWQgLVx1MDAzZW1tIHVuZGVyIHRoYXQgc2FtZSB0YXNrX2xvY2soKS4gUHJvZ3JhbSBvcmRlciBvclxuJiM0MztcdCAqIHRhc2tfbG9jaygpIHJlbGVhc2UvYWNxdWlyZSB0aGVyZWZvcmUgb3JkZXJzIHRoaXMgc3RvcmUgYmVmb3JlXG4mIzQzO1x0ICogdHNrJiMzOTtzIG93biBldmVudHVhbCBtbXB1dF9leGl0KCkuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBJZiBhIGRpZmZlcmVudCBDTE9ORV9WTSBzaGFyZXIgcGVyZm9ybXMgdGhlIGFjdHVhbCBmaW5hbCBkZWNyZW1lbnRcbiYjNDM7XHQgKiBpbnN0ZWFkLCB0aGUgb3JkZXJpbmcgZG9lcyBub3QgY29tZSBmcm9tIHRoaXMgc3RvcmU6XG4mIzQzO1x0ICogbW1fZmxhZ3Nfc2V0KCkgaXMgc2V0X2JpdCgpLCBhIG5vbi12YWx1ZS1yZXR1cm5pbmcgUk1XLCBzbyBpdCBpc1xuJiM0MztcdCAqIHVub3JkZXJlZCBhbmQgY29udHJpYnV0ZXMgbm90aGluZyBvbiBpdHMgb3duLiBJdCBjb21lcyBmcm9tIHRoZVxuJiM0MztcdCAqIG1hcmtpbmcgdGFzayYjMzk7cyBvd24gYXRvbWljX2RlY19hbmRfdGVzdCgpLCBhIHZhbHVlLXJldHVybmluZyBSTVdcbiYjNDM7XHQgKiBhbmQgdGhlcmVmb3JlIGZ1bGx5IG9yZGVyZWQgKGFuIHNtcF9tYigpIGJlZm9yZSBhbmQgYWZ0ZXIpLlxuJiM0MztcdCAqIERlY3JlbWVudHMgYXJlIHRvdGFsbHkgb3JkZXJlZCBpbiBtbV91c2VycyYjMzk7IG1vZGlmaWNhdGlvbiBvcmRlclxuJiM0MztcdCAqIHdpdGggdGhlIHplcm9pbmcgb25lIGxhc3QsIHNvIHRoZSBnZW5lcmFsIGJhcnJpZXJzIG9uIGJvdGggc2lkZXNcbiYjNDM7XHQgKiBtYWtlIHRoaXMgc3RvcmUgdmlzaWJsZSB0byB3aGljaGV2ZXIgdGhyZWFkIHBlcmZvcm1zIGl0LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChJU19FTkFCTEVEKENPTkZJR19BU1lOQ19NTV9URUFSRE9XTikpXG4mIzQzO1x0XHRtbV9mbGFnc19zZXQoTU1GX09PTV9UQVJHRVRFRCwgbW0pO1xuJiM0MztcbiBcdC8qIE9PTSBraWxsZXIgbWlnaHQgcmFjZSB3aXRoIG1lbWNnIE9PTSAqL1xuIFx0aWYgKHRlc3RfYW5kX3NldF90c2tfdGhyZWFkX2ZsYWcodHNrLCBUSUZfTUVNRElFKSlcbiBcdFx0cmV0dXJuO1xuQEAgLTkzMSw2ICYjNDM7OTY1LDMzIEBAIHN0YXRpYyB2b2lkIF9fb29tX2tpbGxfcHJvY2VzcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnZpY3RpbSwgY29uc3QgY2hhciAqbWVzc2FnZSlcbiBcdG1tID0gdmljdGltLVx1MDAzZW1tO1xuIFx0bW1ncmFiKG1tKTtcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFNldCB0aGlzIGJlZm9yZSBhbnkgU0lHS0lMTCBmb3IgdGhpcyBraWxsIGV2ZW50IGdvZXMgb3V0IGJlbG93LFxuJiM0MztcdCAqIHdoaWxlIHRhc2tfbG9jayh2aWN0aW0pIChoZWxkIHNpbmNlIGZpbmRfbG9ja190YXNrX21tKCkgYWJvdmUpIGlzXG4mIzQzO1x0ICogc3RpbGwgaGVsZC4gVGhpcyBpcyByZWxpYWJseSB2aXNpYmxlIHRvIHdoaWNoZXZlciB0aHJlYWQgZW5kcyB1cFxuJiM0MztcdCAqIHJ1bm5pbmcgbW1wdXRfZXhpdCgpIGFuZCBkcm9wcGluZyB0aGUgbGFzdCByZWZlcmVuY2UgdG8gdGhpcyBtbSAtLVxuJiM0MztcdCAqIHZpY3RpbSBpdHNlbGYsIGEgc2libGluZywgb3IgYSBDTE9ORV9WTSBzaGFyZXIgaW4gYW5vdGhlciB0aHJlYWRcbiYjNDM7XHQgKiBncm91cCAod2hpY2ggbWFya19vb21fdmljdGltKCkgbmV2ZXIgbWFya3MsIGJ1dCB3aGljaCBzdGlsbFxuJiM0MztcdCAqIG9ic2VydmVzIHRoaXMgc3RvcmUgb24gdGhlIHNoYXJlZCBtbSkuIE1hcmtpbmcgYW5kIHF1ZXVpbmcgZm9yXG4mIzQzO1x0ICogYXN5bmMgdGVhcmRvd24gY2FuIG5ldmVyIG92ZXJsYXA6IG1tcHV0X2V4aXQoKSBpcyByZWFjaGVkIG9ubHlcbiYjNDM7XHQgKiBhZnRlciBtbV91c2VycyBoaXRzIDAsIGFuZCB0aGF0IHJlcXVpcmVzIHZpY3RpbSYjMzk7cyBvd24gZXhpdF9tbSgpXG4mIzQzO1x0ICogKG9yIGV4ZWNfbW1hcCgpLCB0aGUgb3RoZXIgcGF0aCB0aGF0IHNoZWRzIC1cdTAwM2VtbSkgdG8gaGF2ZSBjbGVhcmVkXG4mIzQzO1x0ICogLVx1MDAzZW1tIHVuZGVyIHRoaXMgc2FtZSB0YXNrX2xvY2soKSBmaXJzdCwgd2hpY2ggcmVsZWFzZS9hY3F1aXJlXG4mIzQzO1x0ICogb3JkZXJzIGFmdGVyIHRoZSBzdG9yZSBhYm92ZS5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIElmIHNvbWUgb3RoZXIgc2hhcmVyIHBlcmZvcm1zIHRoZSBhY3R1YWwgZmluYWwgZGVjcmVtZW50IGluc3RlYWQsXG4mIzQzO1x0ICogdGhlIG9yZGVyaW5nIGRvZXMgbm90IGNvbWUgZnJvbSB0aGlzIHN0b3JlOiBtbV9mbGFnc19zZXQoKSBpc1xuJiM0MztcdCAqIHNldF9iaXQoKSwgYSBub24tdmFsdWUtcmV0dXJuaW5nIFJNVywgc28gaXQgaXMgdW5vcmRlcmVkIGFuZFxuJiM0MztcdCAqIGNvbnRyaWJ1dGVzIG5vdGhpbmcgb24gaXRzIG93bi4gSXQgY29tZXMgZnJvbSB0aGUgbWFya2luZyB0YXNrJiMzOTtzXG4mIzQzO1x0ICogb3duIGF0b21pY19kZWNfYW5kX3Rlc3QoKSwgYSB2YWx1ZS1yZXR1cm5pbmcgUk1XIGFuZCB0aGVyZWZvcmVcbiYjNDM7XHQgKiBmdWxseSBvcmRlcmVkIChhbiBzbXBfbWIoKSBiZWZvcmUgYW5kIGFmdGVyKS4gRGVjcmVtZW50cyBhcmVcbiYjNDM7XHQgKiB0b3RhbGx5IG9yZGVyZWQgaW4gbW1fdXNlcnMmIzM5OyBtb2RpZmljYXRpb24gb3JkZXIgd2l0aCB0aGUgemVyb2luZ1xuJiM0MztcdCAqIG9uZSBsYXN0LCBzbyB0aGUgZ2VuZXJhbCBiYXJyaWVycyBvbiBib3RoIHNpZGVzIG1ha2UgdGhpcyBzdG9yZVxuJiM0MztcdCAqIHZpc2libGUgdG8gd2hpY2hldmVyIHRocmVhZCBwZXJmb3JtcyBpdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQVNZTkNfTU1fVEVBUkRPV04pKVxuJiM0MztcdFx0bW1fZmxhZ3Nfc2V0KE1NRl9PT01fVEFSR0VURUQsIG1tKTtcbiYjNDM7XG4gXHQvKiBSYWlzZSBldmVudCBiZWZvcmUgc2VuZGluZyBzaWduYWw6IHRhc2sgcmVhcGVyIG11c3Qgc2VlIHRoaXMgKi9cbiBcdGNvdW50X3ZtX2V2ZW50KE9PTV9LSUxMKTtcbiBcdG1lbWNnX21lbW9yeV9ldmVudF9tbShtbSwgTUVNQ0dfT09NX0tJTEwpO1xuZGlmZiAtLWdpdCBhL21tL3Ztc3RhdC5jIGIvbW0vdm1zdGF0LmNcbmluZGV4IDRlMjZlNWZkNjY2NjI2Li5lM2ZmMzAwMjdjMjRlZCAxMDA2NDRcbi0tLSBhL21tL3Ztc3RhdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS92bXN0YXQuY1xuQEAgLTE0OTQsNiAmIzQzOzE0OTQsMTEgQEAgY29uc3QgY2hhciAqIGNvbnN0IHZtc3RhdF90ZXh0W10gPSB7XG4gXHRbSShOUlNXUElOKV1cdFx0XHRcdD0gXCYjMzQ7bnJzd3BpblwmIzM0OyxcbiBcdFtJKE5SU1dQT1VUKV1cdFx0XHRcdD0gXCYjMzQ7bnJzd3BvdXRcJiMzNDssXG4gI2VuZGlmIC8qIENPTkZJR19TV0FQICovXG4mIzQzOyNpZmRlZiBDT05GSUdfQVNZTkNfTU1fVEVBUkRPV05cbiYjNDM7XHRbSShBU1lOQ19NTV9URUFSRE9XTl9RVUVVRUQpXVx0PSBcJiMzNDthc3luY19tbV90ZWFyZG93bl9xdWV1ZWRcJiMzNDssXG4mIzQzO1x0W0koQVNZTkNfTU1fVEVBUkRPV05fU1lOQyldXHRcdD0gXCYjMzQ7YXN5bmNfbW1fdGVhcmRvd25fc3luY1wmIzM0OyxcbiYjNDM7XHRbSShBU1lOQ19NTV9URUFSRE9XTl9SRUpFQ1RFRCldXHQ9IFwmIzM0O2FzeW5jX21tX3RlYXJkb3duX3JlamVjdGVkXCYjMzQ7LFxuJiM0MzsjZW5kaWZcbiAjdW5kZWYgSVxuICNlbmRpZiAvKiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlMgKi9cbiB9O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE5IDE5OjQxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FTWU5DX01NX1RFQVJET1dOJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bW1fcmVhcGVyJiMzNDssCiAgICAmIzM0O2FzeW5jX21tX3RlYXJkb3duX3F1ZXVlJiMzNDssCiAgICAmIzM0O2FzeW5jX21tX3RlYXJkb3duX3Jlc2VydmUmIzM0OywKICAgICYjMzQ7YXN5bmNfbW1fdGVhcmRvd25fZWxpZ2libGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmZWF0dXJlIHRvIGFzeW5jaHJvbm91c2x5IHRlYXIgZG93biB0aGUgYWRkcmVzcyBzcGFjZSBvZiBleGl0aW5nIHByb2Nlc3NlcyB2aWEgYSBkZWRpY2F0ZWQga2VybmVsIHRocmVhZCAobW1fcmVhcGVyKS4gVGhpcyBtb2RpZmllcyBjb3JlIHByb2Nlc3MgZXhpdCBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMsIHdoaWNoIGlzIGhpZ2hseSBmdW5jdGlvbmFsIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxMWU1ZjUxOTcyNDcxMjc3YzMyYjQwZmY5NGFhYmJkODZhMDQ2MWVhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBKdWwgMTkgMTk6NDE6MzggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC92bS5yc3QgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC92bS5yc3QKaW5kZXggNWIzMThkMTdhYTRiNDQuLmNjZGE2Yzc1ZmUxZmI3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC92bS5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwvdm0ucnN0CkBAIC0yMiw2ICYjNDM7MjIsOSBAQCB0aGUgd3JpdGVvdXQgb2YgZGlydHkgZGF0YSB0byBkaXNrLgogQ3VycmVudGx5LCB0aGVzZSBmaWxlcyBhcmUgaW4gL3Byb2Mvc3lzL3ZtOgogCiAtIGFkbWluX3Jlc2VydmVfa2J5dGVzCiYjNDM7LSBhc3luY19tbV90ZWFyZG93bgomIzQzOy0gYXN5bmNfbW1fdGVhcmRvd25fbWF4X3BlbmRpbmdfcGFnZXMKJiM0MzstIGFzeW5jX21tX3RlYXJkb3duX3RocmVzaF9wYWdlcwogLSBjb21wYWN0X21lbW9yeQogLSBjb21wYWN0aW9uX3Byb2FjdGl2ZW5lc3MKIC0gY29tcGFjdF91bmV2aWN0YWJsZV9hbGxvd2VkCkBAIC0xMDgsNiAmIzQzOzExMSw0MSBAQCBPbiB4ODZfNjQgdGhpcyBpcyBhYm91dCAxMjhNQi4KIENoYW5naW5nIHRoaXMgdGFrZXMgZWZmZWN0IHdoZW5ldmVyIGFuIGFwcGxpY2F0aW9uIHJlcXVlc3RzIG1lbW9yeS4KIAogCiYjNDM7YXN5bmNfbW1fdGVhcmRvd24KJiM0Mzs9PT09PT09PT09PT09PT09PQomIzQzOwomIzQzO0F2YWlsYWJsZSBvbmx5IHdoZW4gQ09ORklHX0FTWU5DX01NX1RFQVJET1dOIGlzIHNldC4gQ29udHJvbHMgd2hldGhlciB0aGUKJiM0MzthZGRyZXNzLXNwYWNlIHRlYXJkb3duIChleGl0X21tYXAoKSkgb2YgbGFyZ2UgZXhpdGluZyBwcm9jZXNzZXMgaXMgZGVmZXJyZWQKJiM0Mzt0byB0aGUgbW1fcmVhcGVyIGtlcm5lbCB0aHJlYWQgaW5zdGVhZCBvZiBydW5uaW5nIG9uIHRoZSBleGl0aW5nIENQVS4KJiM0MzsKJiM0MztXcml0aW5nIDEgZW5hYmxlcyBkZWZlcnJhbCwgMCBkaXNhYmxlcyBpdC4gRGlzYWJsaW5nIG1ha2VzIG1tcHV0X2V4aXQoKSB0ZWFyCiYjNDM7ZG93biBpbmxpbmUgYWdhaW47IGl0IGRvZXMgbm90IGRyYWluIG1tcyBhbHJlYWR5IHF1ZXVlZC4gRGVmYXVsdHMgdG8gMC4KJiM0MzsKJiM0MztEZWZlcnJlZCB0ZWFyZG93biBjb25zdW1lcyBDUFUgaW4gdGhlIG1tX3JlYXBlciBrZXJuZWwgdGhyZWFkLCB3aGljaCBydW5zIGluCiYjNDM7dGhlIHJvb3QgY2dyb3VwOiB0aGUgdGVhcmRvd24gd29yayBvZiBhIHRhc2sgaW4gYSBDUFUtbGltaXRlZCBjZ3JvdXAgaXMgbm90CiYjNDM7Y2hhcmdlZCB0byB0aGF0IGNncm91cCwgc2ltaWxhciB0byBrc3dhcGQgYW5kIHRoZSBvb21fcmVhcGVyLiBDb25zaWRlciB0aGlzCiYjNDM7YmVmb3JlIGVuYWJsaW5nIHRoZSBmZWF0dXJlIG9uIHN5c3RlbXMgdGhhdCByZWx5IG9uIHN0cmljdCBwZXItY2dyb3VwIENQVQomIzQzO2FjY291bnRpbmcuCiYjNDM7CiYjNDM7CiYjNDM7YXN5bmNfbW1fdGVhcmRvd25fbWF4X3BlbmRpbmdfcGFnZXMKJiM0Mzs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQomIzQzOwomIzQzO0F2YWlsYWJsZSBvbmx5IHdoZW4gQ09ORklHX0FTWU5DX01NX1RFQVJET1dOIGlzIHNldC4gQmFja3ByZXNzdXJlIGNhcCwgaW4KJiM0MztwYWdlcywgb24gdGhlIHRvdGFsIFJTUyBvZiBtbXMgcXVldWVkIGZvciB0aGUgbW1fcmVhcGVyIGJ1dCBub3QgeWV0IHRvcm4KJiM0Mztkb3duLiBBbiBleGl0IHRoYXQgd291bGQgcHVzaCB0aGUgdG90YWwgb3ZlciB0aGlzIGNhcCB0ZWFycyBkb3duCiYjNDM7c3luY2hyb25vdXNseSBpbnN0ZWFkIG9mIHF1ZXVpbmcuIERlZmF1bHRzIHRvIHRvdGFscmFtX3BhZ2VzKCkgLyA0LgomIzQzOwomIzQzOwomIzQzO2FzeW5jX21tX3RlYXJkb3duX3RocmVzaF9wYWdlcwomIzQzOz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQomIzQzOwomIzQzO0F2YWlsYWJsZSBvbmx5IHdoZW4gQ09ORklHX0FTWU5DX01NX1RFQVJET1dOIGlzIHNldC4gTWluaW11bSBSU1MsIGluIHBhZ2VzLAomIzQzO2ZvciBhbiBleGl0aW5nIG1tIHRvIGJlIGVsaWdpYmxlIGZvciBkZWZlcnJhbCB0byB0aGUgbW1fcmVhcGVyLiBFeGl0aW5nIG1tcwomIzQzO2JlbG93IHRoaXMgdGhyZXNob2xkIGFyZSBhbHdheXMgdG9ybiBkb3duIHN5bmNocm9ub3VzbHkuIERlZmF1bHRzIHRvIDY0TUIKJiM0Mzt3b3J0aCBvZiBwYWdlcy4KJiM0MzsKJiM0MzsKIGNvbXBhY3RfbWVtb3J5CiA9PT09PT09PT09PT09PQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgKaW5kZXggOTM5YjVlYThjOWUwYmUuLmVlNmMwYWM4NGIzZDU5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oCkBAIC03LDYgJiM0Mzs3LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9hdXh2ZWMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9rcmVmLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbGlzdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9sbGlzdC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NwaW5sb2NrLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcmJ0cmVlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbWFwbGVfdHJlZS5oJmd0OwpAQCAtMTM2Nyw2ICYjNDM7MTM2OCwxMCBAQCBzdHJ1Y3QgbW1fc3RydWN0IHsKIAkJYXRvbWljX2xvbmdfdCBodWdldGxiX3VzYWdlOwogI2VuZGlmCiAJCXN0cnVjdCB3b3JrX3N0cnVjdCBhc3luY19wdXRfd29yazsKJiM0MzsjaWZkZWYgQ09ORklHX0FTWU5DX01NX1RFQVJET1dOCiYjNDM7CQlzdHJ1Y3QgbGxpc3Rfbm9kZSBhc3luY19yZWFwX25vZGU7CiYjNDM7CQl1bnNpZ25lZCBsb25nIGFzeW5jX3JlYXBfcnNzOwomIzQzOyNlbmRpZiAvKiBDT05GSUdfQVNZTkNfTU1fVEVBUkRPV04gKi8KIAogI2lmZGVmIENPTkZJR19JT01NVV9NTV9EQVRBCiAJCXN0cnVjdCBpb21tdV9tbV9kYXRhICppb21tdV9tbTsKQEAgLTE5ODUsNiAmIzQzOzE5OTAsMTYgQEAgZW51bSB7CiAjZGVmaW5lIE1NRl9UT1BET1dOCQkzMQkvKiBtbSBzZWFyY2hlcyB0b3AgZG93biBieSBkZWZhdWx0ICovCiAjZGVmaW5lIE1NRl9UT1BET1dOX01BU0sJQklUKE1NRl9UT1BET1dOKQogCiYjNDM7LyoKJiM0MzsgKiBtbSBpcyB0aGUgdGFyZ2V0IG9mIGFuIGluLWZsaWdodCBPT00ga2lsbC4gT25seSB3cml0dGVuIHVuZGVyCiYjNDM7ICogQ09ORklHX0FTWU5DX01NX1RFQVJET1dOIHRvZGF5LiBTdGlja3k6IG5ldmVyIGNsZWFyZWQgLS0gdGhlIG1tIGlzCiYjNDM7ICogZHlpbmcgKF9fb29tX2tpbGxfcHJvY2VzcygpIGtpbGxzIGV2ZXJ5IHByb2Nlc3Mgc2hhcmluZyBpdCksIGFuZCBhCiYjNDM7ICogaHlwb3RoZXRpY2FsIHN1cnZpdmluZyBzaGFyZXIgd291bGQgbWVyZWx5IGtlZXAgdGVhcmluZyBkb3duCiYjNDM7ICogc3luY2hyb25vdXNseS4gQWJvdmUgYml0IDMxLCBzbyBpdCBpcyBvdXRzaWRlIE1NRl9JTklUX0xFR0FDWV9NQVNLJiMzOTtzCiYjNDM7ICogZG9tYWluIGVudGlyZWx5IGFuZCBpcyBuZXZlciBpbmhlcml0ZWQgb24gZm9yay4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIE1NRl9PT01fVEFSR0VURUQJMzIKJiM0MzsKICNkZWZpbmUgTU1GX0lOSVRfTEVHQUNZX01BU0sJKE1NRl9EVU1QX0ZJTFRFUl9NQVNLIHxcCiAJCQkJIE1NRl9ESVNBQkxFX1RIUF9NQVNLIHwgTU1GX0hBU19NRFdFX01BU0sgfFwKIAkJCQkgTU1GX1ZNX01FUkdFX0FOWV9NQVNLIHwgTU1GX1RPUERPV05fTUFTSykKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NoZWQvbW0uaCBiL2luY2x1ZGUvbGludXgvc2NoZWQvbW0uaAppbmRleCAxMGJlOGE1NGI0MTZmOS4uMjBhZWIxZDdlZDMxYjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2NoZWQvbW0uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmgKQEAgLTE0Nyw2ICYjNDM7MTQ3LDEyIEBAIGV4dGVybiB2b2lkIG1tcHV0KHN0cnVjdCBtbV9zdHJ1Y3QgKik7CiB2b2lkIG1tcHV0X2FzeW5jKHN0cnVjdCBtbV9zdHJ1Y3QgKik7CiAjZW5kaWYKIAomIzQzOyNpZmRlZiBDT05GSUdfQVNZTkNfTU1fVEVBUkRPV04KJiM0Mzt2b2lkIG1tcHV0X2V4aXQoc3RydWN0IG1tX3N0cnVjdCAqKTsKJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBtbXB1dF9leGl0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKSB7IG1tcHV0KG1tKTsgfQomIzQzOyNlbmRpZgomIzQzOwogLyogR3JhYiBhIHJlZmVyZW5jZSB0byBhIHRhc2smIzM5O3MgbW0sIGlmIGl0IGlzIG5vdCBhbHJlYWR5IGdvaW5nIGF3YXkgKi8KIGV4dGVybiBzdHJ1Y3QgbW1fc3RydWN0ICpnZXRfdGFza19tbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spOwogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdm1fZXZlbnRfaXRlbS5oIGIvaW5jbHVkZS9saW51eC92bV9ldmVudF9pdGVtLmgKaW5kZXggMjYyOGNjZGEwNzZhMDcuLmRlNGRjMjBiN2Y4N2RlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3ZtX2V2ZW50X2l0ZW0uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3ZtX2V2ZW50X2l0ZW0uaApAQCAtMTc5LDYgJiM0MzsxNzksMTEgQEAgZW51bSB2bV9ldmVudF9pdGVtIHsgUEdQR0lOLCBQR1BHT1VULCBQU1dQSU4sIFBTV1BPVVQsCiAJCU5SU1dQSU4sCiAJCU5SU1dQT1VULAogI2VuZGlmIC8qIENPTkZJR19TV0FQICovCiYjNDM7I2lmZGVmIENPTkZJR19BU1lOQ19NTV9URUFSRE9XTgomIzQzOwkJQVNZTkNfTU1fVEVBUkRPV05fUVVFVUVELAomIzQzOwkJQVNZTkNfTU1fVEVBUkRPV05fU1lOQywKJiM0MzsJCUFTWU5DX01NX1RFQVJET1dOX1JFSkVDVEVELAomIzQzOyNlbmRpZgogCQlOUl9WTV9FVkVOVF9JVEVNUwogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvbW1fcmVhcGVyLmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9tbV9yZWFwZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uMzE1YmNlZDdjNDI1M2QKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9tbV9yZWFwZXIuaApAQCAtMCwwICYjNDM7MSw3MyBAQAomIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCiYjNDM7I3VuZGVmIFRSQUNFX1NZU1RFTQomIzQzOyNkZWZpbmUgVFJBQ0VfU1lTVEVNIG1tX3JlYXBlcgomIzQzOwomIzQzOyNpZiAhZGVmaW5lZChfVFJBQ0VfTU1fUkVBUEVSX0gpIHx8IGRlZmluZWQoVFJBQ0VfSEVBREVSX01VTFRJX1JFQUQpCiYjNDM7I2RlZmluZSBfVFJBQ0VfTU1fUkVBUEVSX0gKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdHJhY2Vwb2ludC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zY2hlZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC90b3BvbG9neS5oJmd0OwomIzQzOwomIzQzO1RSQUNFX0VWRU5UKG1tX2FzeW5jX3RlYXJkb3duX3F1ZXVlLAomIzQzOwomIzQzOwlUUF9QUk9UTyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyByc3MpLAomIzQzOwomIzQzOwlUUF9BUkdTKG1tLCByc3MpLAomIzQzOwomIzQzOwlUUF9TVFJVQ1RfX2VudHJ5KAomIzQzOwkJX19maWVsZChzdHJ1Y3QgbW1fc3RydWN0ICosIG1tKQomIzQzOwkJX19maWVsZChpbnQsIHBpZCkKJiM0MzsJCV9fYXJyYXkoY2hhciwgY29tbSwgVEFTS19DT01NX0xFTikKJiM0MzsJCV9fZmllbGQodW5zaWduZWQgbG9uZywgcnNzKQomIzQzOwkJX19maWVsZChpbnQsIG5vZGUpCiYjNDM7CSksCiYjNDM7CiYjNDM7CVRQX2Zhc3RfYXNzaWduKAomIzQzOwkJX19lbnRyeS0mZ3Q7bW0gPSBtbTsKJiM0MzsJCV9fZW50cnktJmd0O3BpZCA9IGN1cnJlbnQtJmd0O3BpZDsKJiM0MzsJCW1lbWNweShfX2VudHJ5LSZndDtjb21tLCBjdXJyZW50LSZndDtjb21tLCBUQVNLX0NPTU1fTEVOKTsKJiM0MzsJCV9fZW50cnktJmd0O3JzcyA9IHJzczsKJiM0MzsJCV9fZW50cnktJmd0O25vZGUgPSBudW1hX25vZGVfaWQoKTsKJiM0MzsJKSwKJiM0MzsKJiM0MzsJVFBfcHJpbnRrKCYjMzQ7bW09JXAgcGlkPSVkIGNvbW09JXMgcnNzPSVsdWtCIG5vZGU9JWQmIzM0OywKJiM0MzsJCV9fZW50cnktJmd0O21tLAomIzQzOwkJX19lbnRyeS0mZ3Q7cGlkLAomIzQzOwkJX19lbnRyeS0mZ3Q7Y29tbSwKJiM0MzsJCV9fZW50cnktJmd0O3JzcyAmbHQ7Jmx0OyAoUEFHRV9TSElGVCAtIDEwKSwKJiM0MzsJCV9fZW50cnktJmd0O25vZGUKJiM0MzsJKQomIzQzOyk7CiYjNDM7CiYjNDM7VFJBQ0VfRVZFTlQobW1fYXN5bmNfdGVhcmRvd25fcmVhcCwKJiM0MzsKJiM0MzsJVFBfUFJPVE8oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgY2hhcmdlZF9yc3MsIHVuc2lnbmVkIGxvbmcgbGl2ZV9yc3MpLAomIzQzOwomIzQzOwlUUF9BUkdTKG1tLCBjaGFyZ2VkX3JzcywgbGl2ZV9yc3MpLAomIzQzOwomIzQzOwlUUF9TVFJVQ1RfX2VudHJ5KAomIzQzOwkJX19maWVsZChzdHJ1Y3QgbW1fc3RydWN0ICosIG1tKQomIzQzOwkJX19maWVsZCh1bnNpZ25lZCBsb25nLCBjaGFyZ2VkX3JzcykKJiM0MzsJCV9fZmllbGQodW5zaWduZWQgbG9uZywgbGl2ZV9yc3MpCiYjNDM7CQlfX2ZpZWxkKGludCwgbm9kZSkKJiM0MzsJKSwKJiM0MzsKJiM0MzsJVFBfZmFzdF9hc3NpZ24oCiYjNDM7CQlfX2VudHJ5LSZndDttbSA9IG1tOwomIzQzOwkJX19lbnRyeS0mZ3Q7Y2hhcmdlZF9yc3MgPSBjaGFyZ2VkX3JzczsKJiM0MzsJCV9fZW50cnktJmd0O2xpdmVfcnNzID0gbGl2ZV9yc3M7CiYjNDM7CQlfX2VudHJ5LSZndDtub2RlID0gbnVtYV9ub2RlX2lkKCk7CiYjNDM7CSksCiYjNDM7CiYjNDM7CVRQX3ByaW50aygmIzM0O21tPSVwIGNoYXJnZWRfcnNzPSVsdWtCIGxpdmVfcnNzPSVsdWtCIG5vZGU9JWQmIzM0OywKJiM0MzsJCV9fZW50cnktJmd0O21tLAomIzQzOwkJX19lbnRyeS0mZ3Q7Y2hhcmdlZF9yc3MgJmx0OyZsdDsgKFBBR0VfU0hJRlQgLSAxMCksCiYjNDM7CQlfX2VudHJ5LSZndDtsaXZlX3JzcyAmbHQ7Jmx0OyAoUEFHRV9TSElGVCAtIDEwKSwKJiM0MzsJCV9fZW50cnktJmd0O25vZGUKJiM0MzsJKQomIzQzOyk7CiYjNDM7CiYjNDM7I2VuZGlmIC8qIF9UUkFDRV9NTV9SRUFQRVJfSCAqLwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDt0cmFjZS9kZWZpbmVfdHJhY2UuaCZndDsKZGlmZiAtLWdpdCBhL2tlcm5lbC9leGl0LmMgYi9rZXJuZWwvZXhpdC5jCmluZGV4IDEwNTY0MjJiYzEwMTNlLi42Zjk3ZDIwNGY5ZmNhYyAxMDA2NDQKLS0tIGEva2VybmVsL2V4aXQuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvZXhpdC5jCkBAIC02MDcsNyAmIzQzOzYwNyw3IEBAIHN0YXRpYyB2b2lkIGV4aXRfbW0odm9pZCkKIAl0YXNrX3VubG9jayhjdXJyZW50KTsKIAltbWFwX3JlYWRfdW5sb2NrKG1tKTsKIAltbV91cGRhdGVfbmV4dF9vd25lcihtbSk7Ci0JbW1wdXQobW0pOwomIzQzOwltbXB1dF9leGl0KG1tKTsKIAlpZiAodGVzdF90aHJlYWRfZmxhZyhUSUZfTUVNRElFKSkKIAkJZXhpdF9vb21fdmljdGltKCk7CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwvZm9yay5jIGIva2VybmVsL2ZvcmsuYwppbmRleCBmMGUyZTEzMWE5YTVhZi4uNGJkZmZhMTg4ZjUyMjQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9mb3JrLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2ZvcmsuYwpAQCAtMTEyLDYgJiM0MzsxMTIsOCBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3Vud2luZF9kZWZlcnJlZC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BnYWxsb2MuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC91YWNjZXNzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkL2lzb2xhdGlvbi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zaXplcy5oJmd0OwogCiAjaW5jbHVkZSAmbHQ7YXNtL21tdV9jb250ZXh0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL2NhY2hlZmx1c2guaCZndDsKQEAgLTEyNCw2ICYjNDM7MTI2LDkgQEAKIAogI2RlZmluZSBDUkVBVEVfVFJBQ0VfUE9JTlRTCiAjaW5jbHVkZSAmbHQ7dHJhY2UvZXZlbnRzL3Rhc2suaCZndDsKJiM0MzsjaWZkZWYgQ09ORklHX0FTWU5DX01NX1RFQVJET1dOCiYjNDM7I2luY2x1ZGUgJmx0O3RyYWNlL2V2ZW50cy9tbV9yZWFwZXIuaCZndDsKJiM0MzsjZW5kaWYKIAogI2luY2x1ZGUgJmx0O2t1bml0L3Zpc2liaWxpdHkuaCZndDsKIApAQCAtMzQwNywzICYjNDM7MzQxMiwxOTcgQEAgc3RhdGljIGludCBfX2luaXQgaW5pdF9mb3JrX3N5c2N0bCh2b2lkKQogfQogCiBzdWJzeXNfaW5pdGNhbGwoaW5pdF9mb3JrX3N5c2N0bCk7CiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19BU1lOQ19NTV9URUFSRE9XTgomIzQzO3N0YXRpYyBMTElTVF9IRUFEKG1tX3JlYXBlcl9saXN0KTsKJiM0MztzdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQobW1fcmVhcGVyX3dhaXQpOwomIzQzO3N0YXRpYyBhdG9taWNfbG9uZ190IG1tX3JlYXBlcl9wZW5kaW5nX3BhZ2VzOwomIzQzO3N0YXRpYyBERUZJTkVfU1RBVElDX0tFWV9GQUxTRShhc3luY19tbV90ZWFyZG93bl9rZXkpOwomIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIHN5c2N0bF9hc3luY19tbV90ZWFyZG93bl90aHJlc2hfcGFnZXM7CiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgc3lzY3RsX2FzeW5jX21tX3RlYXJkb3duX21heF9wZW5kaW5nX3BhZ2VzOwomIzQzOyNpZmRlZiBDT05GSUdfU1lTQ1RMCiYjNDM7c3RhdGljIHU4IHN5c2N0bF9hc3luY19tbV90ZWFyZG93bl9lbmFibGVkOwomIzQzO3N0YXRpYyBERUZJTkVfTVVURVgoYXN5bmNfbW1fdGVhcmRvd25fbG9jayk7CiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgYXN5bmNfbW1fdGVhcmRvd25fZWxpZ2libGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgcnNzKQomIzQzO3sKJiM0MzsJaWYgKHJzcyAmbHQ7IFJFQURfT05DRShzeXNjdGxfYXN5bmNfbW1fdGVhcmRvd25fdGhyZXNoX3BhZ2VzKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJaWYgKG1tX2ZsYWdzX3Rlc3QoTU1GX09PTV9TS0lQLCBtbSkpCS8qIHJlYXBlZCwgb3IgaGlkZGVuIGZyb20gdGhlIHJlYXBlciAqLwomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwkvKgomIzQzOwkgKiBNTUZfT09NX1RBUkdFVEVEIGlzIHNldCBieSB0aGUgT09NIGtpbGxlciB3aGlsZSBzb21lIHRhc2sgc3RpbGwKJiM0MzsJICogaG9sZHMgYSBsaXZlIHJlZmVyZW5jZSB0byB0aGlzIG1tIChzZWUgbWFya19vb21fdmljdGltKCkgYW5kCiYjNDM7CSAqIF9fb29tX2tpbGxfcHJvY2VzcygpKSwgYW5kIHRoaXMgZWxpZ2liaWxpdHkgY2hlY2sgaXMgcmVhY2hlZCBvbmx5CiYjNDM7CSAqIGZyb20gbW1wdXRfZXhpdCgpLCBhZnRlciBtbV91c2VycyBoYXMgZHJvcHBlZCB0byAwIC0tIHNvIG1hcmtpbmcKJiM0MzsJICogYW5kIHRoaXMgY2hlY2sgY2FuIG5ldmVyIG92ZXJsYXAgaW4gdGltZS4gV2hpY2hldmVyIHRocmVhZAomIzQzOwkgKiBwZXJmb3JtcyB0aGUgZmluYWwgZGVjcmVtZW50IGlzIHRoZXJlZm9yZSBndWFyYW50ZWVkIHRvIG9ic2VydmUKJiM0MzsJICogdGhlIGZsYWcgYWxyZWFkeSBzZXQsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGF0IHRocmVhZCB3YXMKJiM0MzsJICogaXRzZWxmIGV2ZXIgcGFzc2VkIHRvIG1hcmtfb29tX3ZpY3RpbSgpIChhIENMT05FX1ZNLXNoYXJpbmcKJiM0MzsJICogcHJvY2VzcyBpbiBhbm90aGVyIHRocmVhZCBncm91cCBuZXZlciBpcywgYnV0IHN0aWxsIG9ic2VydmVzCiYjNDM7CSAqIHRoaXMgZmxhZyBvbiB0aGUgc2hhcmVkIG1tKS4KJiM0MzsJICovCiYjNDM7CWlmIChtbV9mbGFnc190ZXN0KE1NRl9PT01fVEFSR0VURUQsIG1tKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogQ2hhcmdlIHJzcyBhZ2FpbnN0IHRoZSBwZW5kaW5nLXRlYXJkb3duIGJ1ZGdldC4gIFJldHVybnMgdHJ1ZSBpZiBpdCBmaXRzCiYjNDM7ICogdW5kZXIgdGhlIGNhcCwgaW4gd2hpY2ggY2FzZSB0aGUgY2FsbGVyIGVucXVldWVzIGFuZCB0aGUgcmVhcGVyIHJlbGVhc2VzCiYjNDM7ICogdGhlIHNhbWUgcnNzIGFmdGVyIF9fbW1wdXQoKS4gIE9uIG92ZXJzaG9vdCBub3RoaW5nIHN0YXlzIGNoYXJnZWQgYW5kIHRoZQomIzQzOyAqIGNhbGxlciBtdXN0IHRlYXIgZG93biBzeW5jaHJvbm91c2x5LgomIzQzOyAqLwomIzQzO3N0YXRpYyBib29sIGFzeW5jX21tX3RlYXJkb3duX3Jlc2VydmUodW5zaWduZWQgbG9uZyByc3MpCiYjNDM7ewomIzQzOwlpZiAoYXRvbWljX2xvbmdfYWRkX3JldHVybihyc3MsICZhbXA7bW1fcmVhcGVyX3BlbmRpbmdfcGFnZXMpICZndDsKJiM0MzsJICAgIFJFQURfT05DRShzeXNjdGxfYXN5bmNfbW1fdGVhcmRvd25fbWF4X3BlbmRpbmdfcGFnZXMpKSB7CiYjNDM7CQlhdG9taWNfbG9uZ19zdWIocnNzLCAmYW1wO21tX3JlYXBlcl9wZW5kaW5nX3BhZ2VzKTsKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgYXN5bmNfbW1fdGVhcmRvd25fcXVldWUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgcnNzKQomIzQzO3sKJiM0MzsJY291bnRfdm1fZXZlbnQoQVNZTkNfTU1fVEVBUkRPV05fUVVFVUVEKTsKJiM0MzsJdHJhY2VfbW1fYXN5bmNfdGVhcmRvd25fcXVldWUobW0sIHJzcyk7CiYjNDM7CWlmIChsbGlzdF9hZGQoJmFtcDttbS0mZ3Q7YXN5bmNfcmVhcF9ub2RlLCAmYW1wO21tX3JlYXBlcl9saXN0KSkKJiM0MzsJCXdha2VfdXAoJmFtcDttbV9yZWFwZXJfd2FpdCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgbW1fcmVhcGVyKHZvaWQgKnVudXNlZCkKJiM0Mzt7CiYjNDM7CXNldF9mcmVlemFibGUoKTsKJiM0MzsJd2hpbGUgKHRydWUpIHsKJiM0MzsJCXN0cnVjdCBsbGlzdF9ub2RlICpiYXRjaDsKJiM0MzsJCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCAqbjsKJiM0MzsKJiM0MzsJCXdhaXRfZXZlbnRfZnJlZXphYmxlKG1tX3JlYXBlcl93YWl0LCAhbGxpc3RfZW1wdHkoJmFtcDttbV9yZWFwZXJfbGlzdCkpOwomIzQzOwkJYmF0Y2ggPSBsbGlzdF9kZWxfYWxsKCZhbXA7bW1fcmVhcGVyX2xpc3QpOwomIzQzOwkJbGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShtbSwgbiwgYmF0Y2gsIGFzeW5jX3JlYXBfbm9kZSkgewomIzQzOwkJCXVuc2lnbmVkIGxvbmcgcGFnZXMgPSBtbS0mZ3Q7YXN5bmNfcmVhcF9yc3M7CiYjNDM7CQkJdW5zaWduZWQgbG9uZyBsaXZlID0gZ2V0X21tX3JzcyhtbSk7CiYjNDM7CiYjNDM7CQkJdHJhY2VfbW1fYXN5bmNfdGVhcmRvd25fcmVhcChtbSwgcGFnZXMsIGxpdmUpOwomIzQzOwomIzQzOwkJCV9fbW1wdXQobW0pOyAvKiBtYXkgZnJlZSBtbSB2aWEgbW1kcm9wICovCiYjNDM7CQkJYXRvbWljX2xvbmdfc3ViKHBhZ2VzLCAmYW1wO21tX3JlYXBlcl9wZW5kaW5nX3BhZ2VzKTsKJiM0MzsJCQljb25kX3Jlc2NoZWQoKTsKJiM0MzsJCQl0cnlfdG9fZnJlZXplKCk7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgbW1wdXRfZXhpdChzdHJ1Y3QgbW1fc3RydWN0ICptbSkKJiM0Mzt7CiYjNDM7CW1pZ2h0X3NsZWVwKCk7CiYjNDM7CS8qCiYjNDM7CSAqIEZ1bGx5IG9yZGVyZWQgUk1XOiBjb21iaW5lZCB3aXRoIGV4aXRfbW0oKSAob3IgZXhlY19tbWFwKCksIHRoZQomIzQzOwkgKiBvdGhlciBwYXRoIHRoYXQgc2hlZHMgLSZndDttbSkgY2xlYXJpbmcgLSZndDttbSB1bmRlciB0YXNrX2xvY2soKSBiZWZvcmUKJiM0MzsJICogdGhpcyBjYWxsLCBpdCBndWFyYW50ZWVzIE1NRl9PT01fVEFSR0VURUQgc2V0IGF0IGFueSBtYXJrIHNpdGUgaXMKJiM0MzsJICogdmlzaWJsZSBoZXJlIC0tIHNlZSBtYXJrX29vbV92aWN0aW0oKS4gQW55IG5ldyBjYWxsZXIgb2YKJiM0MzsJICogbW1wdXRfZXhpdCgpIG91dHNpZGUgZXhpdF9tbSgpIG11c3QgcmUtdmVyaWZ5IHRoYXQgYXJndW1lbnQuCiYjNDM7CSAqLwomIzQzOwlpZiAoIWF0b21pY19kZWNfYW5kX3Rlc3QoJmFtcDttbS0mZ3Q7bW1fdXNlcnMpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseSgmYW1wO2FzeW5jX21tX3RlYXJkb3duX2tleSkpIHsKJiM0MzsJCXVuc2lnbmVkIGxvbmcgcnNzID0gZ2V0X21tX3JzcyhtbSk7CiYjNDM7CiYjNDM7CQlpZiAoYXN5bmNfbW1fdGVhcmRvd25fZWxpZ2libGUobW0sIHJzcykpIHsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIGV4aXRfYWlvKCkgY2FuIGJsb2NrIGluZGVmaW5pdGVseS4gUnVuIGl0IGhlcmUgc28gYSBzdHVjawomIzQzOwkJCSAqIEFJTyBvbmx5IGhhbmdzIHRoaXMgdGFzayAoc2FtZSBhcyBob3cgaXQgd291bGQgaGFwcGVuIGluCiYjNDM7CQkJICogY2FzZSBvZiBzeW5jaHJvbm91cyBtbXB1dCgpKSBpbnN0ZWFkIG9mIHN0cmFuZGluZyBldmVyeQomIzQzOwkJCSAqIHRlYXJkb3duIHF1ZXVlZCBiZWhpbmQgdGhpcyBtbQomIzQzOwkJCSAqLwomIzQzOwkJCWV4aXRfYWlvKG1tKTsKJiM0MzsKJiM0MzsJCQlpZiAoYXN5bmNfbW1fdGVhcmRvd25fcmVzZXJ2ZShyc3MpKSB7CiYjNDM7CQkJCW1tLSZndDthc3luY19yZWFwX3JzcyA9IHJzczsKJiM0MzsJCQkJYXN5bmNfbW1fdGVhcmRvd25fcXVldWUobW0sIHJzcyk7CiYjNDM7CQkJCXJldHVybjsKJiM0MzsJCQl9CiYjNDM7CQkJY291bnRfdm1fZXZlbnQoQVNZTkNfTU1fVEVBUkRPV05fUkVKRUNURUQpOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CWNvdW50X3ZtX2V2ZW50KEFTWU5DX01NX1RFQVJET1dOX1NZTkMpOwomIzQzOwlfX21tcHV0KG1tKTsKJiM0Mzt9CiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19TWVNDVEwKJiM0MztzdGF0aWMgaW50IGFzeW5jX21tX3RlYXJkb3duX2VuYWJsZWRfaGFuZGxlcihjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwKJiM0MzsJCQkJCSAgICAgaW50IHdyaXRlLCB2b2lkICpidWZmZXIsCiYjNDM7CQkJCQkgICAgIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogU2VyaWFsaXplIGNvbmN1cnJlbnQgd3JpdGVycyBzbyB0aGUgc3RhdGljIGtleSBzdGF0ZSBhbHdheXMgbWF0Y2hlcwomIzQzOwkgKiB0aGUgbGFzdCB2YWx1ZSB3cml0dGVuIHRvIHRoZSB2YXJpYWJsZS4KJiM0MzsJICovCiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO2FzeW5jX21tX3RlYXJkb3duX2xvY2spOwomIzQzOwomIzQzOwlyZXQgPSBwcm9jX2RvdTh2ZWNfbWlubWF4KHRhYmxlLCB3cml0ZSwgYnVmZmVyLCBsZW5wLCBwcG9zKTsKJiM0MzsJaWYgKHJldCB8fCAhd3JpdGUpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlpZiAoc3lzY3RsX2FzeW5jX21tX3RlYXJkb3duX2VuYWJsZWQpCiYjNDM7CQlzdGF0aWNfYnJhbmNoX2VuYWJsZSgmYW1wO2FzeW5jX21tX3RlYXJkb3duX2tleSk7CiYjNDM7CWVsc2UKJiM0MzsJCXN0YXRpY19icmFuY2hfZGlzYWJsZSgmYW1wO2FzeW5jX21tX3RlYXJkb3duX2tleSk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBhc3luY19tbV90ZWFyZG93bl90YWJsZVtdID0gewomIzQzOwl7CiYjNDM7CQkucHJvY25hbWUJPSAmIzM0O2FzeW5jX21tX3RlYXJkb3duJiMzNDssCiYjNDM7CQkuZGF0YQkJPSAmYW1wO3N5c2N0bF9hc3luY19tbV90ZWFyZG93bl9lbmFibGVkLAomIzQzOwkJLm1heGxlbgkJPSBzaXplb2YodTgpLAomIzQzOwkJLm1vZGUJCT0gMDY0NCwKJiM0MzsJCS5wcm9jX2hhbmRsZXIJPSBhc3luY19tbV90ZWFyZG93bl9lbmFibGVkX2hhbmRsZXIsCiYjNDM7CQkuZXh0cmExCQk9IFNZU0NUTF9aRVJPLAomIzQzOwkJLmV4dHJhMgkJPSBTWVNDVExfT05FLAomIzQzOwl9LAomIzQzOwl7CiYjNDM7CQkucHJvY25hbWUJPSAmIzM0O2FzeW5jX21tX3RlYXJkb3duX3RocmVzaF9wYWdlcyYjMzQ7LAomIzQzOwkJLmRhdGEJCT0gJmFtcDtzeXNjdGxfYXN5bmNfbW1fdGVhcmRvd25fdGhyZXNoX3BhZ2VzLAomIzQzOwkJLm1heGxlbgkJPSBzaXplb2YodW5zaWduZWQgbG9uZyksCiYjNDM7CQkubW9kZQkJPSAwNjQ0LAomIzQzOwkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG91bG9uZ3ZlY19taW5tYXgsCiYjNDM7CX0sCiYjNDM7CXsKJiM0MzsJCS5wcm9jbmFtZQk9ICYjMzQ7YXN5bmNfbW1fdGVhcmRvd25fbWF4X3BlbmRpbmdfcGFnZXMmIzM0OywKJiM0MzsJCS5kYXRhCQk9ICZhbXA7c3lzY3RsX2FzeW5jX21tX3RlYXJkb3duX21heF9wZW5kaW5nX3BhZ2VzLAomIzQzOwkJLm1heGxlbgkJPSBzaXplb2YodW5zaWduZWQgbG9uZyksCiYjNDM7CQkubW9kZQkJPSAwNjQ0LAomIzQzOwkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG91bG9uZ3ZlY19taW5tYXgsCiYjNDM7CX0sCiYjNDM7fTsKJiM0MzsjZW5kaWYgLyogQ09ORklHX1NZU0NUTCAqLwomIzQzOwomIzQzO3N0YXRpYyBpbnQgX19pbml0IG1tX3JlYXBlcl9pbml0KHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRoOwomIzQzOwomIzQzOwl0aCA9IGt0aHJlYWRfY3JlYXRlKG1tX3JlYXBlciwgTlVMTCwgJiMzNDttbV9yZWFwZXImIzM0Oyk7CiYjNDM7CWlmIChJU19FUlIodGgpKSB7CiYjNDM7CQlwcl9lcnIoJiMzNDttbV9yZWFwZXI6IGZhaWxlZCB0byBzdGFydCBrdGhyZWFkOiAlbGRcbiYjMzQ7LCBQVFJfRVJSKHRoKSk7CiYjNDM7CQlyZXR1cm4gUFRSX0VSUih0aCk7CiYjNDM7CX0KJiM0MzsJc2V0X3VzZXJfbmljZSh0aCwgMTkpOyAvKiBtaW5pbWl6ZSBjb21wZXRpdGlvbiB3aXRoIG90aGVyIGZhaXIgY2xhc3MgdGFza3MgKi8KJiM0MzsJa3RocmVhZF9hZmZpbmVfcHJlZmVycmVkKHRoLCBob3VzZWtlZXBpbmdfY3B1bWFzayhIS19UWVBFX0tUSFJFQUQpKTsKJiM0MzsJc3lzY3RsX2FzeW5jX21tX3RlYXJkb3duX3RocmVzaF9wYWdlcyAgICAgID0gU1pfNjRNICZndDsmZ3Q7IFBBR0VfU0hJRlQ7CiYjNDM7CXN5c2N0bF9hc3luY19tbV90ZWFyZG93bl9tYXhfcGVuZGluZ19wYWdlcyA9IHRvdGFscmFtX3BhZ2VzKCkgLyA0OyAgLyogVE9ETzogcGxhY2Vob2xkZXIgKi8KJiM0MzsJd2FrZV91cF9wcm9jZXNzKHRoKTsKJiM0MzsjaWZkZWYgQ09ORklHX1NZU0NUTAomIzQzOwlyZWdpc3Rlcl9zeXNjdGxfaW5pdCgmIzM0O3ZtJiMzNDssIGFzeW5jX21tX3RlYXJkb3duX3RhYmxlKTsKJiM0MzsjZW5kaWYKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzO3N1YnN5c19pbml0Y2FsbChtbV9yZWFwZXJfaW5pdCk7CiYjNDM7I2VuZGlmCmRpZmYgLS1naXQgYS9tbS9LY29uZmlnIGIvbW0vS2NvbmZpZwppbmRleCBjNTJhYjZhZmNiMTU5Ni4uYTlkOTI1NDA2NjUzZjggMTAwNjQ0Ci0tLSBhL21tL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvbW0vS2NvbmZpZwpAQCAtMTUwMCw2ICYjNDM7MTUwMCwxOCBAQCBjb25maWcgTEFaWV9NTVVfTU9ERV9LVU5JVF9URVNUCiAKIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKJiM0Mztjb25maWcgQVNZTkNfTU1fVEVBUkRPV04KJiM0MzsJYm9vbCAmIzM0O0FzeW5jIG9mZi1DUFUgYWRkcmVzcyBzcGFjZSB0ZWFyZG93biBvbiBleGl0JiMzNDsKJiM0MzsJZGVwZW5kcyBvbiBNTVUKJiM0MzsJZGVmYXVsdCBuCiYjNDM7CWhlbHAKJiM0MzsJICBEZWZlciB0aGUgYWRkcmVzcyBzcGFjZSB0ZWFyZG93biAoZXhpdF9tbWFwKCkpIG9mIGxhcmdlIGV4aXRpbmcgcHJvY2Vzc2VzCiYjNDM7CSAgdG8gYSBrZXJuZWwgdGhyZWFkIGluc3RlYWQgb2YgcnVubmluZyBpdCBvbiB0aGUgZXhpdGluZyBDUFUuIFRoZSBmZWF0dXJlCiYjNDM7CSAgaXMgb2ZmIGJ5IGRlZmF1bHQgYW5kIGlzIGVuYWJsZWQgYXQgcnVudGltZSB2aWEgdGhlIHZtLmFzeW5jX21tX3RlYXJkb3duCiYjNDM7CSAgc3lzY3RsLgomIzQzOwomIzQzOwkgIElmIHVuc3VyZSwgc2F5IE4uCiYjNDM7CiBzb3VyY2UgJiMzNDttbS9kYW1vbi9LY29uZmlnJiMzNDsKIAogZW5kbWVudQpkaWZmIC0tZ2l0IGEvbW0vb29tX2tpbGwuYyBiL21tL29vbV9raWxsLmMKaW5kZXggNWYzNzJmNmUyNmZhMzIuLmI1NDkwZDFiMWJkMjYxIDEwMDY0NAotLS0gYS9tbS9vb21fa2lsbC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL29vbV9raWxsLmMKQEAgLTc1NCw2ICYjNDM7NzU0LDQwIEBAIHN0YXRpYyB2b2lkIG1hcmtfb29tX3ZpY3RpbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHRzay0mZ3Q7bW07CiAKIAlXQVJOX09OKG9vbV9raWxsZXJfZGlzYWJsZWQpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBNYXJrIHRoZSBtbSBpdHNlbGYsIG5vdCBqdXN0IHRoaXMgdGFzay9zaWduYWwsIGFzIGFuIE9PTSB0YXJnZXQsCiYjNDM7CSAqIHNvIHRoZSBkZWZlcnJlZC10ZWFyZG93biBwYXRoIGNhbiB0ZXN0IGl0IGZyb20gdGhlIG1tIGFsb25lLiBTZXQKJiM0MzsJICogYWhlYWQgb2YgdGhlIFRJRl9NRU1ESUUgdGVzdC1hbmQtc2V0IGJlbG93IHNvIHRoYXQgZXZlcnkgY2FsbAomIzQzOwkgKiBtYXJrcyB0aGUgbW0sIGluY2x1ZGluZyBhIHJlcGVhdCBtYXJrIG9uIGEgdGFzayB0aGF0IGlzIGFscmVhZHkKJiM0MzsJICogVElGX01FTURJRS4KJiM0MzsJICoKJiM0MzsJICogVGhpcyBpcyByZWxpYWJseSB2aXNpYmxlIHRvIHdoaWNoZXZlciB0aHJlYWQgZW5kcyB1cCBkcm9wcGluZyB0aGUKJiM0MzsJICogbGFzdCByZWZlcmVuY2UgaW4gbW1wdXRfZXhpdCgpOiBtYXJraW5nIGFuZCBxdWV1aW5nIGZvciBhc3luYwomIzQzOwkgKiB0ZWFyZG93biBjYW4gbmV2ZXIgb3ZlcmxhcCBpbiB0aW1lLiBFdmVyeSBjYWxsZXIgcmVhY2hlcyB0aGlzIHdpdGgKJiM0MzsJICogdHNrLSZndDttbSBzdGlsbCBzZXQgLS0gZWl0aGVyIHRzayBpcyBjdXJyZW50LCBtYXJraW5nIGl0c2VsZiBpbgomIzQzOwkgKiBwcm9ncmFtIG9yZGVyLCBvciB0c2sgaXMgdGFza19sb2NrKCllZCBieSB0aGUgY2FsbGVyICh0aGUKJiM0MzsJICogdGFza193aWxsX2ZyZWVfbWVtKCkgZmFzdCBwYXRoIGluIG9vbV9raWxsX3Byb2Nlc3MoKSkgLS0gd2hpbGUKJiM0MzsJICogbW1wdXRfZXhpdCgpLCB0aGUgb25seSBwYXRoIHRoYXQgcXVldWVzIGZvciB0ZWFyZG93biwgaXMgcmVhY2hlZAomIzQzOwkgKiBvbmx5IGFmdGVyIG1tX3VzZXJzIGhpdHMgMCwgd2hpY2ggcmVxdWlyZXMgdHNrJiMzOTtzIG93biBleGl0X21tKCkgKG9yCiYjNDM7CSAqIGV4ZWNfbW1hcCgpLCB0aGUgb3RoZXIgcGF0aCB0aGF0IHNoZWRzIC0mZ3Q7bW0pIHRvIGhhdmUgYWxyZWFkeQomIzQzOwkgKiBjbGVhcmVkIC0mZ3Q7bW0gdW5kZXIgdGhhdCBzYW1lIHRhc2tfbG9jaygpLiBQcm9ncmFtIG9yZGVyIG9yCiYjNDM7CSAqIHRhc2tfbG9jaygpIHJlbGVhc2UvYWNxdWlyZSB0aGVyZWZvcmUgb3JkZXJzIHRoaXMgc3RvcmUgYmVmb3JlCiYjNDM7CSAqIHRzayYjMzk7cyBvd24gZXZlbnR1YWwgbW1wdXRfZXhpdCgpLgomIzQzOwkgKgomIzQzOwkgKiBJZiBhIGRpZmZlcmVudCBDTE9ORV9WTSBzaGFyZXIgcGVyZm9ybXMgdGhlIGFjdHVhbCBmaW5hbCBkZWNyZW1lbnQKJiM0MzsJICogaW5zdGVhZCwgdGhlIG9yZGVyaW5nIGRvZXMgbm90IGNvbWUgZnJvbSB0aGlzIHN0b3JlOgomIzQzOwkgKiBtbV9mbGFnc19zZXQoKSBpcyBzZXRfYml0KCksIGEgbm9uLXZhbHVlLXJldHVybmluZyBSTVcsIHNvIGl0IGlzCiYjNDM7CSAqIHVub3JkZXJlZCBhbmQgY29udHJpYnV0ZXMgbm90aGluZyBvbiBpdHMgb3duLiBJdCBjb21lcyBmcm9tIHRoZQomIzQzOwkgKiBtYXJraW5nIHRhc2smIzM5O3Mgb3duIGF0b21pY19kZWNfYW5kX3Rlc3QoKSwgYSB2YWx1ZS1yZXR1cm5pbmcgUk1XCiYjNDM7CSAqIGFuZCB0aGVyZWZvcmUgZnVsbHkgb3JkZXJlZCAoYW4gc21wX21iKCkgYmVmb3JlIGFuZCBhZnRlcikuCiYjNDM7CSAqIERlY3JlbWVudHMgYXJlIHRvdGFsbHkgb3JkZXJlZCBpbiBtbV91c2VycyYjMzk7IG1vZGlmaWNhdGlvbiBvcmRlcgomIzQzOwkgKiB3aXRoIHRoZSB6ZXJvaW5nIG9uZSBsYXN0LCBzbyB0aGUgZ2VuZXJhbCBiYXJyaWVycyBvbiBib3RoIHNpZGVzCiYjNDM7CSAqIG1ha2UgdGhpcyBzdG9yZSB2aXNpYmxlIHRvIHdoaWNoZXZlciB0aHJlYWQgcGVyZm9ybXMgaXQuCiYjNDM7CSAqLwomIzQzOwlpZiAoSVNfRU5BQkxFRChDT05GSUdfQVNZTkNfTU1fVEVBUkRPV04pKQomIzQzOwkJbW1fZmxhZ3Nfc2V0KE1NRl9PT01fVEFSR0VURUQsIG1tKTsKJiM0MzsKIAkvKiBPT00ga2lsbGVyIG1pZ2h0IHJhY2Ugd2l0aCBtZW1jZyBPT00gKi8KIAlpZiAodGVzdF9hbmRfc2V0X3Rza190aHJlYWRfZmxhZyh0c2ssIFRJRl9NRU1ESUUpKQogCQlyZXR1cm47CkBAIC05MzEsNiAmIzQzOzk2NSwzMyBAQCBzdGF0aWMgdm9pZCBfX29vbV9raWxsX3Byb2Nlc3Moc3RydWN0IHRhc2tfc3RydWN0ICp2aWN0aW0sIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCiAJbW0gPSB2aWN0aW0tJmd0O21tOwogCW1tZ3JhYihtbSk7CiAKJiM0MzsJLyoKJiM0MzsJICogU2V0IHRoaXMgYmVmb3JlIGFueSBTSUdLSUxMIGZvciB0aGlzIGtpbGwgZXZlbnQgZ29lcyBvdXQgYmVsb3csCiYjNDM7CSAqIHdoaWxlIHRhc2tfbG9jayh2aWN0aW0pIChoZWxkIHNpbmNlIGZpbmRfbG9ja190YXNrX21tKCkgYWJvdmUpIGlzCiYjNDM7CSAqIHN0aWxsIGhlbGQuIFRoaXMgaXMgcmVsaWFibHkgdmlzaWJsZSB0byB3aGljaGV2ZXIgdGhyZWFkIGVuZHMgdXAKJiM0MzsJICogcnVubmluZyBtbXB1dF9leGl0KCkgYW5kIGRyb3BwaW5nIHRoZSBsYXN0IHJlZmVyZW5jZSB0byB0aGlzIG1tIC0tCiYjNDM7CSAqIHZpY3RpbSBpdHNlbGYsIGEgc2libGluZywgb3IgYSBDTE9ORV9WTSBzaGFyZXIgaW4gYW5vdGhlciB0aHJlYWQKJiM0MzsJICogZ3JvdXAgKHdoaWNoIG1hcmtfb29tX3ZpY3RpbSgpIG5ldmVyIG1hcmtzLCBidXQgd2hpY2ggc3RpbGwKJiM0MzsJICogb2JzZXJ2ZXMgdGhpcyBzdG9yZSBvbiB0aGUgc2hhcmVkIG1tKS4gTWFya2luZyBhbmQgcXVldWluZyBmb3IKJiM0MzsJICogYXN5bmMgdGVhcmRvd24gY2FuIG5ldmVyIG92ZXJsYXA6IG1tcHV0X2V4aXQoKSBpcyByZWFjaGVkIG9ubHkKJiM0MzsJICogYWZ0ZXIgbW1fdXNlcnMgaGl0cyAwLCBhbmQgdGhhdCByZXF1aXJlcyB2aWN0aW0mIzM5O3Mgb3duIGV4aXRfbW0oKQomIzQzOwkgKiAob3IgZXhlY19tbWFwKCksIHRoZSBvdGhlciBwYXRoIHRoYXQgc2hlZHMgLSZndDttbSkgdG8gaGF2ZSBjbGVhcmVkCiYjNDM7CSAqIC0mZ3Q7bW0gdW5kZXIgdGhpcyBzYW1lIHRhc2tfbG9jaygpIGZpcnN0LCB3aGljaCByZWxlYXNlL2FjcXVpcmUKJiM0MzsJICogb3JkZXJzIGFmdGVyIHRoZSBzdG9yZSBhYm92ZS4KJiM0MzsJICoKJiM0MzsJICogSWYgc29tZSBvdGhlciBzaGFyZXIgcGVyZm9ybXMgdGhlIGFjdHVhbCBmaW5hbCBkZWNyZW1lbnQgaW5zdGVhZCwKJiM0MzsJICogdGhlIG9yZGVyaW5nIGRvZXMgbm90IGNvbWUgZnJvbSB0aGlzIHN0b3JlOiBtbV9mbGFnc19zZXQoKSBpcwomIzQzOwkgKiBzZXRfYml0KCksIGEgbm9uLXZhbHVlLXJldHVybmluZyBSTVcsIHNvIGl0IGlzIHVub3JkZXJlZCBhbmQKJiM0MzsJICogY29udHJpYnV0ZXMgbm90aGluZyBvbiBpdHMgb3duLiBJdCBjb21lcyBmcm9tIHRoZSBtYXJraW5nIHRhc2smIzM5O3MKJiM0MzsJICogb3duIGF0b21pY19kZWNfYW5kX3Rlc3QoKSwgYSB2YWx1ZS1yZXR1cm5pbmcgUk1XIGFuZCB0aGVyZWZvcmUKJiM0MzsJICogZnVsbHkgb3JkZXJlZCAoYW4gc21wX21iKCkgYmVmb3JlIGFuZCBhZnRlcikuIERlY3JlbWVudHMgYXJlCiYjNDM7CSAqIHRvdGFsbHkgb3JkZXJlZCBpbiBtbV91c2VycyYjMzk7IG1vZGlmaWNhdGlvbiBvcmRlciB3aXRoIHRoZSB6ZXJvaW5nCiYjNDM7CSAqIG9uZSBsYXN0LCBzbyB0aGUgZ2VuZXJhbCBiYXJyaWVycyBvbiBib3RoIHNpZGVzIG1ha2UgdGhpcyBzdG9yZQomIzQzOwkgKiB2aXNpYmxlIHRvIHdoaWNoZXZlciB0aHJlYWQgcGVyZm9ybXMgaXQuCiYjNDM7CSAqLwomIzQzOwlpZiAoSVNfRU5BQkxFRChDT05GSUdfQVNZTkNfTU1fVEVBUkRPV04pKQomIzQzOwkJbW1fZmxhZ3Nfc2V0KE1NRl9PT01fVEFSR0VURUQsIG1tKTsKJiM0MzsKIAkvKiBSYWlzZSBldmVudCBiZWZvcmUgc2VuZGluZyBzaWduYWw6IHRhc2sgcmVhcGVyIG11c3Qgc2VlIHRoaXMgKi8KIAljb3VudF92bV9ldmVudChPT01fS0lMTCk7CiAJbWVtY2dfbWVtb3J5X2V2ZW50X21tKG1tLCBNRU1DR19PT01fS0lMTCk7CmRpZmYgLS1naXQgYS9tbS92bXN0YXQuYyBiL21tL3Ztc3RhdC5jCmluZGV4IDRlMjZlNWZkNjY2NjI2Li5lM2ZmMzAwMjdjMjRlZCAxMDA2NDQKLS0tIGEvbW0vdm1zdGF0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zdGF0LmMKQEAgLTE0OTQsNiAmIzQzOzE0OTQsMTEgQEAgY29uc3QgY2hhciAqIGNvbnN0IHZtc3RhdF90ZXh0W10gPSB7CiAJW0koTlJTV1BJTildCQkJCT0gJiMzNDtucnN3cGluJiMzNDssCiAJW0koTlJTV1BPVVQpXQkJCQk9ICYjMzQ7bnJzd3BvdXQmIzM0OywKICNlbmRpZiAvKiBDT05GSUdfU1dBUCAqLwomIzQzOyNpZmRlZiBDT05GSUdfQVNZTkNfTU1fVEVBUkRPV04KJiM0MzsJW0koQVNZTkNfTU1fVEVBUkRPV05fUVVFVUVEKV0JPSAmIzM0O2FzeW5jX21tX3RlYXJkb3duX3F1ZXVlZCYjMzQ7LAomIzQzOwlbSShBU1lOQ19NTV9URUFSRE9XTl9TWU5DKV0JCT0gJiMzNDthc3luY19tbV90ZWFyZG93bl9zeW5jJiMzNDssCiYjNDM7CVtJKEFTWU5DX01NX1RFQVJET1dOX1JFSkVDVEVEKV0JPSAmIzM0O2FzeW5jX21tX3RlYXJkb3duX3JlamVjdGVkJiMzNDssCiYjNDM7I2VuZGlmCiAjdW5kZWYgSQogI2VuZGlmIC8qIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUyAqLwogfTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTkgMTk6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODgxMwoJCQkJCQkJb3V0cHV0OiAxMzEKCQkJCQkJCXRob3VnaHRzOiAxMTI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRXZhbHVhdGlvbjogQXN5bmMgTU0gVGVhcmRvd24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2UgaGF2ZSBhIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2luZyBgQ09ORklHX0FTWU5DX01NX1RFQVJET1dOYC4gVGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBjaGFuZ2UuIEl0JiMzOTtzIGRlZmVycmluZyB0aGUgYWRkcmVzcyBzcGFjZSB0ZWFyZG93biAoYGV4aXRfbW1hcCgpYCkgb2YgZXhpdGluZyBwcm9jZXNzZXMgdG8gYSBrZXJuZWwgdGhyZWFkLCBgbW1fcmVhcGVyYC4gVGhpcyBmdW5kYW1lbnRhbGx5IGFsdGVycyBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHByb2Nlc3MgZXhpdCBhbmQgbWVtb3J5IG1hbmFnZW1lbnQuIFRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgKm5lZWRzKiBmdXp6aW5nLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBhZmZlY3RlZC4gYG1tcHV0X2V4aXRgLCBgbW1fcmVhcGVyYCwgYGFzeW5jX21tX3RlYXJkb3duX3F1ZXVlYCwgYGFzeW5jX21tX3RlYXJkb3duX3Jlc2VydmVgLCBhbmQgYGFzeW5jX21tX3RlYXJkb3duX2VsaWdpYmxlYCBpbW1lZGlhdGVseSBzdGFuZCBvdXQuIFRob3NlIGFyZSB0aGUga2V5IHBpZWNlcyBvZiB0aGUgbmV3IGxvZ2ljLiBUaGUgcGF0Y2ggYWxzbyBpbnRyb2R1Y2VzIGEgc3lzY3RsLCBgdm0uYXN5bmNfbW1fdGVhcmRvd25gLCB3aGljaCBpcyBpbXBvcnRhbnQgZm9yIGVuYWJsaW5nIHRoZSBmZWF0dXJlIGF0IHJ1bnRpbWUsIGFuZCBvZiBjb3Vyc2UsIHRoZSBgQ09ORklHX0FTWU5DX01NX1RFQVJET1dOYCBjb25maWcgb3B0aW9uLgoKVGhlIGNvZGUgbW9kaWZpY2F0aW9ucyBhcmUgaW4gYGtlcm5lbC9mb3JrLmNgLCBga2VybmVsL2V4aXQuY2AsIGFuZCBgbW0vb29tX2tpbGwuY2AuIExldCYjMzk7cyBlbnN1cmUgdGhlIHJlbGV2YW50IGNvZGUgcGF0aHMgY2FuIGJlIGV4ZWN1dGVkOyB0aGF0IGluY2x1ZGVzIHZlcmlmeWluZyB0aGUgc3lzY3RsIGFuZCBjb25maWcgb3B0aW9uLgoKQSBxdWljayByZXZpZXfigKYgdGhlIGNvbmZpZyBpcyBgQVNZTkNfTU1fVEVBUkRPV05gLiBPa2F5LCBnb29kLiBOb3csIGFib3V0IHRob3NlIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIGJlIGNhcmVmdWwuIFdoaWxlIGBtbXB1dF9leGl0YCBpcyBkaXJlY3RseSBpbnZvbHZlZCwgaXQmIzM5O3MgY2FsbGVkIGZyb20gYGV4aXRfbW1gLCB3aGljaCBpcyBhIGZyZXF1ZW50bHkgYWNjZXNzZWQgcGF0aC4gVGhlIG5ldyBsb2dpYyBpcyBpbiBgbW1wdXRfZXhpdGAgaXRzZWxmIHRob3VnaCwgc28gbGV0JiMzOTtzIGluY2x1ZGUgaXQuIGBtbV9yZWFwZXJgIGlzIHRoZSBrdGhyZWFkLCBpdCYjMzk7cyBkZWZpbml0ZWx5IG9uIHRoZSBsaXN0LiBgYXN5bmNfbW1fdGVhcmRvd25fcXVldWVgLCBgYXN5bmNfbW1fdGVhcmRvd25fcmVzZXJ2ZWAsIGFuZCBgYXN5bmNfbW1fdGVhcmRvd25fZWxpZ2libGVgIHNlZW0gdG8gYmUgdGhlIGNvcmUgb2YgdGhlIGFzeW5jIGxvZ2ljLgoKQWxyaWdodCwgdGhlIHBsYW4gaXMgdG8gY2FsbCBgc2V0LXJlc3VsdHNgIHdpdGg6CgoqICAgKipXb3J0aEZ1enppbmcqKjogYHRydWVgIChBYnNvbHV0ZWx5LiBUaGlzIGlzIGltcG9ydGFudC4pCiogICAqKkZvY3VzU3ltYm9scyoqOiBgWyYjMzQ7bW1fcmVhcGVyJiMzNDssICYjMzQ7YXN5bmNfbW1fdGVhcmRvd25fcXVldWUmIzM0OywgJiMzNDthc3luY19tbV90ZWFyZG93bl9yZXNlcnZlJiMzNDssICYjMzQ7YXN5bmNfbW1fdGVhcmRvd25fZWxpZ2libGUmIzM0OywgJiMzNDttbXB1dF9leGl0JiMzNDtdYCAoSSYjMzk7bSBsZWFuaW5nIHRvd2FyZHMgYG1tcHV0X2V4aXRgIGFzIHdlbGwgYmVjYXVzZSBpdCYjMzk7cyB3aGVyZSB0aGUgbmV3IGxvZ2ljIGludGVyc2VjdHMgd2l0aCB0aGUgaG90IHBhdGgpCiogICAqKkVuYWJsZUNvbmZpZ3MqKjogYFsmIzM0O0FTWU5DX01NX1RFQVJET1dOJiMzNDtdYCAoVGhpcyBpcyB0aGUgY3JpdGljYWwgY29uZmlnIHRvIGVuYWJsZSB0aGUgZmVhdHVyZS4pCiogICAqKlJlYXNvbmluZyoqOiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZlYXR1cmUgdG8gYXN5bmNocm9ub3VzbHkgdGVhciBkb3duIHRoZSBhZGRyZXNzIHNwYWNlIG9mIGV4aXRpbmcgcHJvY2Vzc2VzIHZpYSBhIGRlZGljYXRlZCBrZXJuZWwgdGhyZWFkIChgbW1fcmVhcGVyYCkuIFRoaXMgbW9kaWZpZXMgY29yZSBwcm9jZXNzIGV4aXQgYW5kIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLCB3aGljaCBpcyBoaWdobHkgZnVuY3Rpb25hbCBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OwoKSSYjMzk7bSBkb3VibGUtY2hlY2tpbmcgdGhlIGNvZGUgYWdhaW4gdG8gYmUgdGhvcm91Z2guIEl0JiMzOTtzIGVhc3kgdG8gbWlzcyBzb21ldGhpbmcgd2hlbiB5b3UmIzM5O3JlIGZvY3VzaW5nIG9uIHRoZSBjcml0aWNhbCBwYXRoLgoKV2FpdCBhIHNlY29uZOKApiBgbW1wdXRfZXhpdGAgaXMgaW52b2tlZCBvbiBldmVyeSB0YXNrIGV4aXQuIEkgd2FudCB0byBhdm9pZCBob3QgcGF0aHMsIGJ1dCBgbW1wdXRfZXhpdGAgaXMgdGhlIGVudHJ5IHBvaW50IGZvciB0aGUgbmV3IGxvZ2ljLiBgbW1fcmVhcGVyYCwgYGFzeW5jX21tX3RlYXJkb3duX3F1ZXVlYCwgYGFzeW5jX21tX3RlYXJkb3duX3Jlc2VydmVgLCBhbmQgYGFzeW5jX21tX3RlYXJkb3duX2VsaWdpYmxlYCBzZWVtcyBsaWtlIGEgYmV0dGVyIGZvY3VzLCBsZXQmIzM5O3Mga2VlcCBpdCB0aWdodCBvbiB0aGUgbmV3IGFkZGl0aW9ucy4KCk9uZSBtb3JlIHJldmlldy4gTm8gb3RoZXIgY3J1Y2lhbCBjb25maWcgZGVwZW5kZW5jaWVzLiBPa2F5LCBpdCBsb29rcyBsaWtlIGBBU1lOQ19NTV9URUFSRE9XTmAgaXMgdGhlIG1haW4gb25lLgoKTGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOSAxOTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QVNZTkNfTU1fVEVBUkRPV04mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttbV9yZWFwZXImIzM0OywKICAgICYjMzQ7YXN5bmNfbW1fdGVhcmRvd25fcXVldWUmIzM0OywKICAgICYjMzQ7YXN5bmNfbW1fdGVhcmRvd25fcmVzZXJ2ZSYjMzQ7LAogICAgJiMzNDthc3luY19tbV90ZWFyZG93bl9lbGlnaWJsZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZlYXR1cmUgdG8gYXN5bmNocm9ub3VzbHkgdGVhciBkb3duIHRoZSBhZGRyZXNzIHNwYWNlIG9mIGV4aXRpbmcgcHJvY2Vzc2VzIHZpYSBhIGRlZGljYXRlZCBrZXJuZWwgdGhyZWFkIChtbV9yZWFwZXIpLiBUaGlzIG1vZGlmaWVzIGNvcmUgcHJvY2VzcyBleGl0IGFuZCBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYywgd2hpY2ggaXMgaGlnaGx5IGZ1bmN0aW9uYWwgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FTWU5DX01NX1RFQVJET1dOJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bW1fcmVhcGVyJiMzNDssCiAgICAmIzM0O2FzeW5jX21tX3RlYXJkb3duX3F1ZXVlJiMzNDssCiAgICAmIzM0O2FzeW5jX21tX3RlYXJkb3duX3Jlc2VydmUmIzM0OywKICAgICYjMzQ7YXN5bmNfbW1fdGVhcmRvd25fZWxpZ2libGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmZWF0dXJlIHRvIGFzeW5jaHJvbm91c2x5IHRlYXIgZG93biB0aGUgYWRkcmVzcyBzcGFjZSBvZiBleGl0aW5nIHByb2Nlc3NlcyB2aWEgYSBkZWRpY2F0ZWQga2VybmVsIHRocmVhZCAobW1fcmVhcGVyKS4gVGhpcyBtb2RpZmllcyBjb3JlIHByb2Nlc3MgZXhpdCBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMsIHdoaWNoIGlzIGhpZ2hseSBmdW5jdGlvbmFsIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMTlUMTk6NDE6NDAuMzExNDc1MjYxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM5MTQ4MDUxNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQVNZTkNfTU1fVEVBUkRPV05cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtbV9yZWFwZXJcIixcbiAgICBcImFzeW5jX21tX3RlYXJkb3duX3F1ZXVlXCIsXG4gICAgXCJhc3luY19tbV90ZWFyZG93bl9yZXNlcnZlXCIsXG4gICAgXCJhc3luY19tbV90ZWFyZG93bl9lbGlnaWJsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmVhdHVyZSB0byBhc3luY2hyb25vdXNseSB0ZWFyIGRvd24gdGhlIGFkZHJlc3Mgc3BhY2Ugb2YgZXhpdGluZyBwcm9jZXNzZXMgdmlhIGEgZGVkaWNhdGVkIGtlcm5lbCB0aHJlYWQgKG1tX3JlYXBlcikuIFRoaXMgbW9kaWZpZXMgY29yZSBwcm9jZXNzIGV4aXQgYW5kIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLCB3aGljaCBpcyBoaWdobHkgZnVuY3Rpb25hbCBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTlUMTk6NDE6NDAuMzExNDc5NDIxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjYwNzk3NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxMWU1ZjUxOTcyNDcxMjc3YzMyYjQwZmY5NGFhYmJkODZhMDQ2MWVhXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gSnVsIDE5IDE5OjQxOjM4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL3ZtLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL3ZtLnJzdFxcbmluZGV4IDViMzE4ZDE3YWE0YjQ0Li5jY2RhNmM3NWZlMWZiNyAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC92bS5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC92bS5yc3RcXG5AQCAtMjIsNiArMjIsOSBAQCB0aGUgd3JpdGVvdXQgb2YgZGlydHkgZGF0YSB0byBkaXNrLlxcbiBDdXJyZW50bHksIHRoZXNlIGZpbGVzIGFyZSBpbiAvcHJvYy9zeXMvdm06XFxuIFxcbiAtIGFkbWluX3Jlc2VydmVfa2J5dGVzXFxuKy0gYXN5bmNfbW1fdGVhcmRvd25cXG4rLSBhc3luY19tbV90ZWFyZG93bl9tYXhfcGVuZGluZ19wYWdlc1xcbistIGFzeW5jX21tX3RlYXJkb3duX3RocmVzaF9wYWdlc1xcbiAtIGNvbXBhY3RfbWVtb3J5XFxuIC0gY29tcGFjdGlvbl9wcm9hY3RpdmVuZXNzXFxuIC0gY29tcGFjdF91bmV2aWN0YWJsZV9hbGxvd2VkXFxuQEAgLTEwOCw2ICsxMTEsNDEgQEAgT24geDg2XzY0IHRoaXMgaXMgYWJvdXQgMTI4TUIuXFxuIENoYW5naW5nIHRoaXMgdGFrZXMgZWZmZWN0IHdoZW5ldmVyIGFuIGFwcGxpY2F0aW9uIHJlcXVlc3RzIG1lbW9yeS5cXG4gXFxuIFxcbithc3luY19tbV90ZWFyZG93blxcbis9PT09PT09PT09PT09PT09PVxcbitcXG4rQXZhaWxhYmxlIG9ubHkgd2hlbiBDT05GSUdfQVNZTkNfTU1fVEVBUkRPV04gaXMgc2V0LiBDb250cm9scyB3aGV0aGVyIHRoZVxcbithZGRyZXNzLXNwYWNlIHRlYXJkb3duIChleGl0X21tYXAoKSkgb2YgbGFyZ2UgZXhpdGluZyBwcm9jZXNzZXMgaXMgZGVmZXJyZWRcXG4rdG8gdGhlIG1tX3JlYXBlciBrZXJuZWwgdGhyZWFkIGluc3RlYWQgb2YgcnVubmluZyBvbiB0aGUgZXhpdGluZyBDUFUuXFxuK1xcbitXcml0aW5nIDEgZW5hYmxlcyBkZWZlcnJhbCwgMCBkaXNhYmxlcyBpdC4gRGlzYWJsaW5nIG1ha2VzIG1tcHV0X2V4aXQoKSB0ZWFyXFxuK2Rvd24gaW5saW5lIGFnYWluOyBpdCBkb2VzIG5vdCBkcmFpbiBtbXMgYWxyZWFkeSBxdWV1ZWQuIERlZmF1bHRzIHRvIDAuXFxuK1xcbitEZWZlcnJlZCB0ZWFyZG93biBjb25zdW1lcyBDUFUgaW4gdGhlIG1tX3JlYXBlciBrZXJuZWwgdGhyZWFkLCB3aGljaCBydW5zIGluXFxuK3RoZSByb290IGNncm91cDogdGhlIHRlYXJkb3duIHdvcmsgb2YgYSB0YXNrIGluIGEgQ1BVLWxpbWl0ZWQgY2dyb3VwIGlzIG5vdFxcbitjaGFyZ2VkIHRvIHRoYXQgY2dyb3VwLCBzaW1pbGFyIHRvIGtzd2FwZCBhbmQgdGhlIG9vbV9yZWFwZXIuIENvbnNpZGVyIHRoaXNcXG4rYmVmb3JlIGVuYWJsaW5nIHRoZSBmZWF0dXJlIG9uIHN5c3RlbXMgdGhhdCByZWx5IG9uIHN0cmljdCBwZXItY2dyb3VwIENQVVxcbithY2NvdW50aW5nLlxcbitcXG4rXFxuK2FzeW5jX21tX3RlYXJkb3duX21heF9wZW5kaW5nX3BhZ2VzXFxuKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuK1xcbitBdmFpbGFibGUgb25seSB3aGVuIENPTkZJR19BU1lOQ19NTV9URUFSRE9XTiBpcyBzZXQuIEJhY2twcmVzc3VyZSBjYXAsIGluXFxuK3BhZ2VzLCBvbiB0aGUgdG90YWwgUlNTIG9mIG1tcyBxdWV1ZWQgZm9yIHRoZSBtbV9yZWFwZXIgYnV0IG5vdCB5ZXQgdG9yblxcbitkb3duLiBBbiBleGl0IHRoYXQgd291bGQgcHVzaCB0aGUgdG90YWwgb3ZlciB0aGlzIGNhcCB0ZWFycyBkb3duXFxuK3N5bmNocm9ub3VzbHkgaW5zdGVhZCBvZiBxdWV1aW5nLiBEZWZhdWx0cyB0byB0b3RhbHJhbV9wYWdlcygpIC8gNC5cXG4rXFxuK1xcbithc3luY19tbV90ZWFyZG93bl90aHJlc2hfcGFnZXNcXG4rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuK1xcbitBdmFpbGFibGUgb25seSB3aGVuIENPTkZJR19BU1lOQ19NTV9URUFSRE9XTiBpcyBzZXQuIE1pbmltdW0gUlNTLCBpbiBwYWdlcyxcXG4rZm9yIGFuIGV4aXRpbmcgbW0gdG8gYmUgZWxpZ2libGUgZm9yIGRlZmVycmFsIHRvIHRoZSBtbV9yZWFwZXIuIEV4aXRpbmcgbW1zXFxuK2JlbG93IHRoaXMgdGhyZXNob2xkIGFyZSBhbHdheXMgdG9ybiBkb3duIHN5bmNocm9ub3VzbHkuIERlZmF1bHRzIHRvIDY0TUJcXG4rd29ydGggb2YgcGFnZXMuXFxuK1xcbitcXG4gY29tcGFjdF9tZW1vcnlcXG4gPT09PT09PT09PT09PT1cXG4gXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaFxcbmluZGV4IDkzOWI1ZWE4YzllMGJlLi5lZTZjMGFjODRiM2Q1OSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmhcXG5AQCAtNyw2ICs3LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2F1eHZlYy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva3JlZi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbGlzdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbGxpc3QuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NwaW5sb2NrLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9yYnRyZWUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21hcGxlX3RyZWUuaFxcdTAwM2VcXG5AQCAtMTM2Nyw2ICsxMzY4LDEwIEBAIHN0cnVjdCBtbV9zdHJ1Y3Qge1xcbiBcXHRcXHRhdG9taWNfbG9uZ190IGh1Z2V0bGJfdXNhZ2U7XFxuICNlbmRpZlxcbiBcXHRcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgYXN5bmNfcHV0X3dvcms7XFxuKyNpZmRlZiBDT05GSUdfQVNZTkNfTU1fVEVBUkRPV05cXG4rXFx0XFx0c3RydWN0IGxsaXN0X25vZGUgYXN5bmNfcmVhcF9ub2RlO1xcbitcXHRcXHR1bnNpZ25lZCBsb25nIGFzeW5jX3JlYXBfcnNzO1xcbisjZW5kaWYgLyogQ09ORklHX0FTWU5DX01NX1RFQVJET1dOICovXFxuIFxcbiAjaWZkZWYgQ09ORklHX0lPTU1VX01NX0RBVEFcXG4gXFx0XFx0c3RydWN0IGlvbW11X21tX2RhdGEgKmlvbW11X21tO1xcbkBAIC0xOTg1LDYgKzE5OTAsMTYgQEAgZW51bSB7XFxuICNkZWZpbmUgTU1GX1RPUERPV05cXHRcXHQzMVxcdC8qIG1tIHNlYXJjaGVzIHRvcCBkb3duIGJ5IGRlZmF1bHQgKi9cXG4gI2RlZmluZSBNTUZfVE9QRE9XTl9NQVNLXFx0QklUKE1NRl9UT1BET1dOKVxcbiBcXG4rLypcXG4rICogbW0gaXMgdGhlIHRhcmdldCBvZiBhbiBpbi1mbGlnaHQgT09NIGtpbGwuIE9ubHkgd3JpdHRlbiB1bmRlclxcbisgKiBDT05GSUdfQVNZTkNfTU1fVEVBUkRPV04gdG9kYXkuIFN0aWNreTogbmV2ZXIgY2xlYXJlZCAtLSB0aGUgbW0gaXNcXG4rICogZHlpbmcgKF9fb29tX2tpbGxfcHJvY2VzcygpIGtpbGxzIGV2ZXJ5IHByb2Nlc3Mgc2hhcmluZyBpdCksIGFuZCBhXFxuKyAqIGh5cG90aGV0aWNhbCBzdXJ2aXZpbmcgc2hhcmVyIHdvdWxkIG1lcmVseSBrZWVwIHRlYXJpbmcgZG93blxcbisgKiBzeW5jaHJvbm91c2x5LiBBYm92ZSBiaXQgMzEsIHNvIGl0IGlzIG91dHNpZGUgTU1GX0lOSVRfTEVHQUNZX01BU0snc1xcbisgKiBkb21haW4gZW50aXJlbHkgYW5kIGlzIG5ldmVyIGluaGVyaXRlZCBvbiBmb3JrLlxcbisgKi9cXG4rI2RlZmluZSBNTUZfT09NX1RBUkdFVEVEXFx0MzJcXG4rXFxuICNkZWZpbmUgTU1GX0lOSVRfTEVHQUNZX01BU0tcXHQoTU1GX0RVTVBfRklMVEVSX01BU0sgfFxcXFxcXG4gXFx0XFx0XFx0XFx0IE1NRl9ESVNBQkxFX1RIUF9NQVNLIHwgTU1GX0hBU19NRFdFX01BU0sgfFxcXFxcXG4gXFx0XFx0XFx0XFx0IE1NRl9WTV9NRVJHRV9BTllfTUFTSyB8IE1NRl9UT1BET1dOX01BU0spXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NoZWQvbW0uaCBiL2luY2x1ZGUvbGludXgvc2NoZWQvbW0uaFxcbmluZGV4IDEwYmU4YTU0YjQxNmY5Li4yMGFlYjFkN2VkMzFiMCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmhcXG5AQCAtMTQ3LDYgKzE0NywxMiBAQCBleHRlcm4gdm9pZCBtbXB1dChzdHJ1Y3QgbW1fc3RydWN0ICopO1xcbiB2b2lkIG1tcHV0X2FzeW5jKHN0cnVjdCBtbV9zdHJ1Y3QgKik7XFxuICNlbmRpZlxcbiBcXG4rI2lmZGVmIENPTkZJR19BU1lOQ19NTV9URUFSRE9XTlxcbit2b2lkIG1tcHV0X2V4aXQoc3RydWN0IG1tX3N0cnVjdCAqKTtcXG4rI2Vsc2VcXG4rc3RhdGljIGlubGluZSB2b2lkIG1tcHV0X2V4aXQoc3RydWN0IG1tX3N0cnVjdCAqbW0pIHsgbW1wdXQobW0pOyB9XFxuKyNlbmRpZlxcbitcXG4gLyogR3JhYiBhIHJlZmVyZW5jZSB0byBhIHRhc2sncyBtbSwgaWYgaXQgaXMgbm90IGFscmVhZHkgZ29pbmcgYXdheSAqL1xcbiBleHRlcm4gc3RydWN0IG1tX3N0cnVjdCAqZ2V0X3Rhc2tfbW0oc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKTtcXG4gLypcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92bV9ldmVudF9pdGVtLmggYi9pbmNsdWRlL2xpbnV4L3ZtX2V2ZW50X2l0ZW0uaFxcbmluZGV4IDI2MjhjY2RhMDc2YTA3Li5kZTRkYzIwYjdmODdkZSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3ZtX2V2ZW50X2l0ZW0uaFxcbisrKyBiL2luY2x1ZGUvbGludXgvdm1fZXZlbnRfaXRlbS5oXFxuQEAgLTE3OSw2ICsxNzksMTEgQEAgZW51bSB2bV9ldmVudF9pdGVtIHsgUEdQR0lOLCBQR1BHT1VULCBQU1dQSU4sIFBTV1BPVVQsXFxuIFxcdFxcdE5SU1dQSU4sXFxuIFxcdFxcdE5SU1dQT1VULFxcbiAjZW5kaWYgLyogQ09ORklHX1NXQVAgKi9cXG4rI2lmZGVmIENPTkZJR19BU1lOQ19NTV9URUFSRE9XTlxcbitcXHRcXHRBU1lOQ19NTV9URUFSRE9XTl9RVUVVRUQsXFxuK1xcdFxcdEFTWU5DX01NX1RFQVJET1dOX1NZTkMsXFxuK1xcdFxcdEFTWU5DX01NX1RFQVJET1dOX1JFSkVDVEVELFxcbisjZW5kaWZcXG4gXFx0XFx0TlJfVk1fRVZFTlRfSVRFTVNcXG4gfTtcXG4gXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL21tX3JlYXBlci5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvbW1fcmVhcGVyLmhcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4zMTViY2VkN2M0MjUzZFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9tbV9yZWFwZXIuaFxcbkBAIC0wLDAgKzEsNzMgQEBcXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cXG4rI3VuZGVmIFRSQUNFX1NZU1RFTVxcbisjZGVmaW5lIFRSQUNFX1NZU1RFTSBtbV9yZWFwZXJcXG4rXFxuKyNpZiAhZGVmaW5lZChfVFJBQ0VfTU1fUkVBUEVSX0gpIHx8IGRlZmluZWQoVFJBQ0VfSEVBREVSX01VTFRJX1JFQUQpXFxuKyNkZWZpbmUgX1RSQUNFX01NX1JFQVBFUl9IXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdHJhY2Vwb2ludC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc2NoZWQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3RvcG9sb2d5LmhcXHUwMDNlXFxuK1xcbitUUkFDRV9FVkVOVChtbV9hc3luY190ZWFyZG93bl9xdWV1ZSxcXG4rXFxuK1xcdFRQX1BST1RPKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHJzcyksXFxuK1xcbitcXHRUUF9BUkdTKG1tLCByc3MpLFxcbitcXG4rXFx0VFBfU1RSVUNUX19lbnRyeShcXG4rXFx0XFx0X19maWVsZChzdHJ1Y3QgbW1fc3RydWN0ICosIG1tKVxcbitcXHRcXHRfX2ZpZWxkKGludCwgcGlkKVxcbitcXHRcXHRfX2FycmF5KGNoYXIsIGNvbW0sIFRBU0tfQ09NTV9MRU4pXFxuK1xcdFxcdF9fZmllbGQodW5zaWduZWQgbG9uZywgcnNzKVxcbitcXHRcXHRfX2ZpZWxkKGludCwgbm9kZSlcXG4rXFx0KSxcXG4rXFxuK1xcdFRQX2Zhc3RfYXNzaWduKFxcbitcXHRcXHRfX2VudHJ5LVxcdTAwM2VtbSA9IG1tO1xcbitcXHRcXHRfX2VudHJ5LVxcdTAwM2VwaWQgPSBjdXJyZW50LVxcdTAwM2VwaWQ7XFxuK1xcdFxcdG1lbWNweShfX2VudHJ5LVxcdTAwM2Vjb21tLCBjdXJyZW50LVxcdTAwM2Vjb21tLCBUQVNLX0NPTU1fTEVOKTtcXG4rXFx0XFx0X19lbnRyeS1cXHUwMDNlcnNzID0gcnNzO1xcbitcXHRcXHRfX2VudHJ5LVxcdTAwM2Vub2RlID0gbnVtYV9ub2RlX2lkKCk7XFxuK1xcdCksXFxuK1xcbitcXHRUUF9wcmludGsoXFxcIm1tPSVwIHBpZD0lZCBjb21tPSVzIHJzcz0lbHVrQiBub2RlPSVkXFxcIixcXG4rXFx0XFx0X19lbnRyeS1cXHUwMDNlbW0sXFxuK1xcdFxcdF9fZW50cnktXFx1MDAzZXBpZCxcXG4rXFx0XFx0X19lbnRyeS1cXHUwMDNlY29tbSxcXG4rXFx0XFx0X19lbnRyeS1cXHUwMDNlcnNzIFxcdTAwM2NcXHUwMDNjIChQQUdFX1NISUZUIC0gMTApLFxcbitcXHRcXHRfX2VudHJ5LVxcdTAwM2Vub2RlXFxuK1xcdClcXG4rKTtcXG4rXFxuK1RSQUNFX0VWRU5UKG1tX2FzeW5jX3RlYXJkb3duX3JlYXAsXFxuK1xcbitcXHRUUF9QUk9UTyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBjaGFyZ2VkX3JzcywgdW5zaWduZWQgbG9uZyBsaXZlX3JzcyksXFxuK1xcbitcXHRUUF9BUkdTKG1tLCBjaGFyZ2VkX3JzcywgbGl2ZV9yc3MpLFxcbitcXG4rXFx0VFBfU1RSVUNUX19lbnRyeShcXG4rXFx0XFx0X19maWVsZChzdHJ1Y3QgbW1fc3RydWN0ICosIG1tKVxcbitcXHRcXHRfX2ZpZWxkKHVuc2lnbmVkIGxvbmcsIGNoYXJnZWRfcnNzKVxcbitcXHRcXHRfX2ZpZWxkKHVuc2lnbmVkIGxvbmcsIGxpdmVfcnNzKVxcbitcXHRcXHRfX2ZpZWxkKGludCwgbm9kZSlcXG4rXFx0KSxcXG4rXFxuK1xcdFRQX2Zhc3RfYXNzaWduKFxcbitcXHRcXHRfX2VudHJ5LVxcdTAwM2VtbSA9IG1tO1xcbitcXHRcXHRfX2VudHJ5LVxcdTAwM2VjaGFyZ2VkX3JzcyA9IGNoYXJnZWRfcnNzO1xcbitcXHRcXHRfX2VudHJ5LVxcdTAwM2VsaXZlX3JzcyA9IGxpdmVfcnNzO1xcbitcXHRcXHRfX2VudHJ5LVxcdTAwM2Vub2RlID0gbnVtYV9ub2RlX2lkKCk7XFxuK1xcdCksXFxuK1xcbitcXHRUUF9wcmludGsoXFxcIm1tPSVwIGNoYXJnZWRfcnNzPSVsdWtCIGxpdmVfcnNzPSVsdWtCIG5vZGU9JWRcXFwiLFxcbitcXHRcXHRfX2VudHJ5LVxcdTAwM2VtbSxcXG4rXFx0XFx0X19lbnRyeS1cXHUwMDNlY2hhcmdlZF9yc3MgXFx1MDAzY1xcdTAwM2MgKFBBR0VfU0hJRlQgLSAxMCksXFxuK1xcdFxcdF9fZW50cnktXFx1MDAzZWxpdmVfcnNzIFxcdTAwM2NcXHUwMDNjIChQQUdFX1NISUZUIC0gMTApLFxcbitcXHRcXHRfX2VudHJ5LVxcdTAwM2Vub2RlXFxuK1xcdClcXG4rKTtcXG4rXFxuKyNlbmRpZiAvKiBfVFJBQ0VfTU1fUkVBUEVSX0ggKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2N0cmFjZS9kZWZpbmVfdHJhY2UuaFxcdTAwM2VcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2V4aXQuYyBiL2tlcm5lbC9leGl0LmNcXG5pbmRleCAxMDU2NDIyYmMxMDEzZS4uNmY5N2QyMDRmOWZjYWMgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2V4aXQuY1xcbisrKyBiL2tlcm5lbC9leGl0LmNcXG5AQCAtNjA3LDcgKzYwNyw3IEBAIHN0YXRpYyB2b2lkIGV4aXRfbW0odm9pZClcXG4gXFx0dGFza191bmxvY2soY3VycmVudCk7XFxuIFxcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xcbiBcXHRtbV91cGRhdGVfbmV4dF9vd25lcihtbSk7XFxuLVxcdG1tcHV0KG1tKTtcXG4rXFx0bW1wdXRfZXhpdChtbSk7XFxuIFxcdGlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl9NRU1ESUUpKVxcbiBcXHRcXHRleGl0X29vbV92aWN0aW0oKTtcXG4gfVxcbmRpZmYgLS1naXQgYS9rZXJuZWwvZm9yay5jIGIva2VybmVsL2ZvcmsuY1xcbmluZGV4IGYwZTJlMTMxYTlhNWFmLi40YmRmZmExODhmNTIyNCAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvZm9yay5jXFxuKysrIGIva2VybmVsL2ZvcmsuY1xcbkBAIC0xMTIsNiArMTEyLDggQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3Vud2luZF9kZWZlcnJlZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGdhbGxvYy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdWFjY2Vzcy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc2NoZWQvaXNvbGF0aW9uLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zaXplcy5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9tbXVfY29udGV4dC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2NhY2hlZmx1c2guaFxcdTAwM2VcXG5AQCAtMTI0LDYgKzEyNiw5IEBAXFxuIFxcbiAjZGVmaW5lIENSRUFURV9UUkFDRV9QT0lOVFNcXG4gI2luY2x1ZGUgXFx1MDAzY3RyYWNlL2V2ZW50cy90YXNrLmhcXHUwMDNlXFxuKyNpZmRlZiBDT05GSUdfQVNZTkNfTU1fVEVBUkRPV05cXG4rI2luY2x1ZGUgXFx1MDAzY3RyYWNlL2V2ZW50cy9tbV9yZWFwZXIuaFxcdTAwM2VcXG4rI2VuZGlmXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNja3VuaXQvdmlzaWJpbGl0eS5oXFx1MDAzZVxcbiBcXG5AQCAtMzQwNywzICszNDEyLDE5NyBAQCBzdGF0aWMgaW50IF9faW5pdCBpbml0X2Zvcmtfc3lzY3RsKHZvaWQpXFxuIH1cXG4gXFxuIHN1YnN5c19pbml0Y2FsbChpbml0X2Zvcmtfc3lzY3RsKTtcXG4rXFxuKyNpZmRlZiBDT05GSUdfQVNZTkNfTU1fVEVBUkRPV05cXG4rc3RhdGljIExMSVNUX0hFQUQobW1fcmVhcGVyX2xpc3QpO1xcbitzdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQobW1fcmVhcGVyX3dhaXQpO1xcbitzdGF0aWMgYXRvbWljX2xvbmdfdCBtbV9yZWFwZXJfcGVuZGluZ19wYWdlcztcXG4rc3RhdGljIERFRklORV9TVEFUSUNfS0VZX0ZBTFNFKGFzeW5jX21tX3RlYXJkb3duX2tleSk7XFxuK3N0YXRpYyB1bnNpZ25lZCBsb25nIHN5c2N0bF9hc3luY19tbV90ZWFyZG93bl90aHJlc2hfcGFnZXM7XFxuK3N0YXRpYyB1bnNpZ25lZCBsb25nIHN5c2N0bF9hc3luY19tbV90ZWFyZG93bl9tYXhfcGVuZGluZ19wYWdlcztcXG4rI2lmZGVmIENPTkZJR19TWVNDVExcXG4rc3RhdGljIHU4IHN5c2N0bF9hc3luY19tbV90ZWFyZG93bl9lbmFibGVkO1xcbitzdGF0aWMgREVGSU5FX01VVEVYKGFzeW5jX21tX3RlYXJkb3duX2xvY2spO1xcbisjZW5kaWZcXG4rXFxuK3N0YXRpYyBib29sIGFzeW5jX21tX3RlYXJkb3duX2VsaWdpYmxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHJzcylcXG4re1xcbitcXHRpZiAocnNzIFxcdTAwM2MgUkVBRF9PTkNFKHN5c2N0bF9hc3luY19tbV90ZWFyZG93bl90aHJlc2hfcGFnZXMpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdGlmIChtbV9mbGFnc190ZXN0KE1NRl9PT01fU0tJUCwgbW0pKVxcdC8qIHJlYXBlZCwgb3IgaGlkZGVuIGZyb20gdGhlIHJlYXBlciAqL1xcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdC8qXFxuK1xcdCAqIE1NRl9PT01fVEFSR0VURUQgaXMgc2V0IGJ5IHRoZSBPT00ga2lsbGVyIHdoaWxlIHNvbWUgdGFzayBzdGlsbFxcbitcXHQgKiBob2xkcyBhIGxpdmUgcmVmZXJlbmNlIHRvIHRoaXMgbW0gKHNlZSBtYXJrX29vbV92aWN0aW0oKSBhbmRcXG4rXFx0ICogX19vb21fa2lsbF9wcm9jZXNzKCkpLCBhbmQgdGhpcyBlbGlnaWJpbGl0eSBjaGVjayBpcyByZWFjaGVkIG9ubHlcXG4rXFx0ICogZnJvbSBtbXB1dF9leGl0KCksIGFmdGVyIG1tX3VzZXJzIGhhcyBkcm9wcGVkIHRvIDAgLS0gc28gbWFya2luZ1xcbitcXHQgKiBhbmQgdGhpcyBjaGVjayBjYW4gbmV2ZXIgb3ZlcmxhcCBpbiB0aW1lLiBXaGljaGV2ZXIgdGhyZWFkXFxuK1xcdCAqIHBlcmZvcm1zIHRoZSBmaW5hbCBkZWNyZW1lbnQgaXMgdGhlcmVmb3JlIGd1YXJhbnRlZWQgdG8gb2JzZXJ2ZVxcbitcXHQgKiB0aGUgZmxhZyBhbHJlYWR5IHNldCwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoYXQgdGhyZWFkIHdhc1xcbitcXHQgKiBpdHNlbGYgZXZlciBwYXNzZWQgdG8gbWFya19vb21fdmljdGltKCkgKGEgQ0xPTkVfVk0tc2hhcmluZ1xcbitcXHQgKiBwcm9jZXNzIGluIGFub3RoZXIgdGhyZWFkIGdyb3VwIG5ldmVyIGlzLCBidXQgc3RpbGwgb2JzZXJ2ZXNcXG4rXFx0ICogdGhpcyBmbGFnIG9uIHRoZSBzaGFyZWQgbW0pLlxcbitcXHQgKi9cXG4rXFx0aWYgKG1tX2ZsYWdzX3Rlc3QoTU1GX09PTV9UQVJHRVRFRCwgbW0pKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuK1xcbisvKlxcbisgKiBDaGFyZ2UgcnNzIGFnYWluc3QgdGhlIHBlbmRpbmctdGVhcmRvd24gYnVkZ2V0LiAgUmV0dXJucyB0cnVlIGlmIGl0IGZpdHNcXG4rICogdW5kZXIgdGhlIGNhcCwgaW4gd2hpY2ggY2FzZSB0aGUgY2FsbGVyIGVucXVldWVzIGFuZCB0aGUgcmVhcGVyIHJlbGVhc2VzXFxuKyAqIHRoZSBzYW1lIHJzcyBhZnRlciBfX21tcHV0KCkuICBPbiBvdmVyc2hvb3Qgbm90aGluZyBzdGF5cyBjaGFyZ2VkIGFuZCB0aGVcXG4rICogY2FsbGVyIG11c3QgdGVhciBkb3duIHN5bmNocm9ub3VzbHkuXFxuKyAqL1xcbitzdGF0aWMgYm9vbCBhc3luY19tbV90ZWFyZG93bl9yZXNlcnZlKHVuc2lnbmVkIGxvbmcgcnNzKVxcbit7XFxuK1xcdGlmIChhdG9taWNfbG9uZ19hZGRfcmV0dXJuKHJzcywgXFx1MDAyNm1tX3JlYXBlcl9wZW5kaW5nX3BhZ2VzKSBcXHUwMDNlXFxuK1xcdCAgICBSRUFEX09OQ0Uoc3lzY3RsX2FzeW5jX21tX3RlYXJkb3duX21heF9wZW5kaW5nX3BhZ2VzKSkge1xcbitcXHRcXHRhdG9taWNfbG9uZ19zdWIocnNzLCBcXHUwMDI2bW1fcmVhcGVyX3BlbmRpbmdfcGFnZXMpO1xcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGFzeW5jX21tX3RlYXJkb3duX3F1ZXVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHJzcylcXG4re1xcbitcXHRjb3VudF92bV9ldmVudChBU1lOQ19NTV9URUFSRE9XTl9RVUVVRUQpO1xcbitcXHR0cmFjZV9tbV9hc3luY190ZWFyZG93bl9xdWV1ZShtbSwgcnNzKTtcXG4rXFx0aWYgKGxsaXN0X2FkZChcXHUwMDI2bW0tXFx1MDAzZWFzeW5jX3JlYXBfbm9kZSwgXFx1MDAyNm1tX3JlYXBlcl9saXN0KSlcXG4rXFx0XFx0d2FrZV91cChcXHUwMDI2bW1fcmVhcGVyX3dhaXQpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG1tX3JlYXBlcih2b2lkICp1bnVzZWQpXFxuK3tcXG4rXFx0c2V0X2ZyZWV6YWJsZSgpO1xcbitcXHR3aGlsZSAodHJ1ZSkge1xcbitcXHRcXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqYmF0Y2g7XFxuK1xcdFxcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCAqbjtcXG4rXFxuK1xcdFxcdHdhaXRfZXZlbnRfZnJlZXphYmxlKG1tX3JlYXBlcl93YWl0LCAhbGxpc3RfZW1wdHkoXFx1MDAyNm1tX3JlYXBlcl9saXN0KSk7XFxuK1xcdFxcdGJhdGNoID0gbGxpc3RfZGVsX2FsbChcXHUwMDI2bW1fcmVhcGVyX2xpc3QpO1xcbitcXHRcXHRsbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG1tLCBuLCBiYXRjaCwgYXN5bmNfcmVhcF9ub2RlKSB7XFxuK1xcdFxcdFxcdHVuc2lnbmVkIGxvbmcgcGFnZXMgPSBtbS1cXHUwMDNlYXN5bmNfcmVhcF9yc3M7XFxuK1xcdFxcdFxcdHVuc2lnbmVkIGxvbmcgbGl2ZSA9IGdldF9tbV9yc3MobW0pO1xcbitcXG4rXFx0XFx0XFx0dHJhY2VfbW1fYXN5bmNfdGVhcmRvd25fcmVhcChtbSwgcGFnZXMsIGxpdmUpO1xcbitcXG4rXFx0XFx0XFx0X19tbXB1dChtbSk7IC8qIG1heSBmcmVlIG1tIHZpYSBtbWRyb3AgKi9cXG4rXFx0XFx0XFx0YXRvbWljX2xvbmdfc3ViKHBhZ2VzLCBcXHUwMDI2bW1fcmVhcGVyX3BlbmRpbmdfcGFnZXMpO1xcbitcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4rXFx0XFx0XFx0dHJ5X3RvX2ZyZWV6ZSgpO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3ZvaWQgbW1wdXRfZXhpdChzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4re1xcbitcXHRtaWdodF9zbGVlcCgpO1xcbitcXHQvKlxcbitcXHQgKiBGdWxseSBvcmRlcmVkIFJNVzogY29tYmluZWQgd2l0aCBleGl0X21tKCkgKG9yIGV4ZWNfbW1hcCgpLCB0aGVcXG4rXFx0ICogb3RoZXIgcGF0aCB0aGF0IHNoZWRzIC1cXHUwMDNlbW0pIGNsZWFyaW5nIC1cXHUwMDNlbW0gdW5kZXIgdGFza19sb2NrKCkgYmVmb3JlXFxuK1xcdCAqIHRoaXMgY2FsbCwgaXQgZ3VhcmFudGVlcyBNTUZfT09NX1RBUkdFVEVEIHNldCBhdCBhbnkgbWFyayBzaXRlIGlzXFxuK1xcdCAqIHZpc2libGUgaGVyZSAtLSBzZWUgbWFya19vb21fdmljdGltKCkuIEFueSBuZXcgY2FsbGVyIG9mXFxuK1xcdCAqIG1tcHV0X2V4aXQoKSBvdXRzaWRlIGV4aXRfbW0oKSBtdXN0IHJlLXZlcmlmeSB0aGF0IGFyZ3VtZW50LlxcbitcXHQgKi9cXG4rXFx0aWYgKCFhdG9taWNfZGVjX2FuZF90ZXN0KFxcdTAwMjZtbS1cXHUwMDNlbW1fdXNlcnMpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcXHUwMDI2YXN5bmNfbW1fdGVhcmRvd25fa2V5KSkge1xcbitcXHRcXHR1bnNpZ25lZCBsb25nIHJzcyA9IGdldF9tbV9yc3MobW0pO1xcbitcXG4rXFx0XFx0aWYgKGFzeW5jX21tX3RlYXJkb3duX2VsaWdpYmxlKG1tLCByc3MpKSB7XFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIGV4aXRfYWlvKCkgY2FuIGJsb2NrIGluZGVmaW5pdGVseS4gUnVuIGl0IGhlcmUgc28gYSBzdHVja1xcbitcXHRcXHRcXHQgKiBBSU8gb25seSBoYW5ncyB0aGlzIHRhc2sgKHNhbWUgYXMgaG93IGl0IHdvdWxkIGhhcHBlbiBpblxcbitcXHRcXHRcXHQgKiBjYXNlIG9mIHN5bmNocm9ub3VzIG1tcHV0KCkpIGluc3RlYWQgb2Ygc3RyYW5kaW5nIGV2ZXJ5XFxuK1xcdFxcdFxcdCAqIHRlYXJkb3duIHF1ZXVlZCBiZWhpbmQgdGhpcyBtbVxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0ZXhpdF9haW8obW0pO1xcbitcXG4rXFx0XFx0XFx0aWYgKGFzeW5jX21tX3RlYXJkb3duX3Jlc2VydmUocnNzKSkge1xcbitcXHRcXHRcXHRcXHRtbS1cXHUwMDNlYXN5bmNfcmVhcF9yc3MgPSByc3M7XFxuK1xcdFxcdFxcdFxcdGFzeW5jX21tX3RlYXJkb3duX3F1ZXVlKG1tLCByc3MpO1xcbitcXHRcXHRcXHRcXHRyZXR1cm47XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0Y291bnRfdm1fZXZlbnQoQVNZTkNfTU1fVEVBUkRPV05fUkVKRUNURUQpO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdGNvdW50X3ZtX2V2ZW50KEFTWU5DX01NX1RFQVJET1dOX1NZTkMpO1xcbitcXHRfX21tcHV0KG1tKTtcXG4rfVxcbitcXG4rI2lmZGVmIENPTkZJR19TWVNDVExcXG4rc3RhdGljIGludCBhc3luY19tbV90ZWFyZG93bl9lbmFibGVkX2hhbmRsZXIoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgaW50IHdyaXRlLCB2b2lkICpidWZmZXIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFNlcmlhbGl6ZSBjb25jdXJyZW50IHdyaXRlcnMgc28gdGhlIHN0YXRpYyBrZXkgc3RhdGUgYWx3YXlzIG1hdGNoZXNcXG4rXFx0ICogdGhlIGxhc3QgdmFsdWUgd3JpdHRlbiB0byB0aGUgdmFyaWFibGUuXFxuK1xcdCAqL1xcbitcXHRndWFyZChtdXRleCkoXFx1MDAyNmFzeW5jX21tX3RlYXJkb3duX2xvY2spO1xcbitcXG4rXFx0cmV0ID0gcHJvY19kb3U4dmVjX21pbm1heCh0YWJsZSwgd3JpdGUsIGJ1ZmZlciwgbGVucCwgcHBvcyk7XFxuK1xcdGlmIChyZXQgfHwgIXdyaXRlKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0aWYgKHN5c2N0bF9hc3luY19tbV90ZWFyZG93bl9lbmFibGVkKVxcbitcXHRcXHRzdGF0aWNfYnJhbmNoX2VuYWJsZShcXHUwMDI2YXN5bmNfbW1fdGVhcmRvd25fa2V5KTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRzdGF0aWNfYnJhbmNoX2Rpc2FibGUoXFx1MDAyNmFzeW5jX21tX3RlYXJkb3duX2tleSk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBhc3luY19tbV90ZWFyZG93bl90YWJsZVtdID0ge1xcbitcXHR7XFxuK1xcdFxcdC5wcm9jbmFtZVxcdD0gXFxcImFzeW5jX21tX3RlYXJkb3duXFxcIixcXG4rXFx0XFx0LmRhdGFcXHRcXHQ9IFxcdTAwMjZzeXNjdGxfYXN5bmNfbW1fdGVhcmRvd25fZW5hYmxlZCxcXG4rXFx0XFx0Lm1heGxlblxcdFxcdD0gc2l6ZW9mKHU4KSxcXG4rXFx0XFx0Lm1vZGVcXHRcXHQ9IDA2NDQsXFxuK1xcdFxcdC5wcm9jX2hhbmRsZXJcXHQ9IGFzeW5jX21tX3RlYXJkb3duX2VuYWJsZWRfaGFuZGxlcixcXG4rXFx0XFx0LmV4dHJhMVxcdFxcdD0gU1lTQ1RMX1pFUk8sXFxuK1xcdFxcdC5leHRyYTJcXHRcXHQ9IFNZU0NUTF9PTkUsXFxuK1xcdH0sXFxuK1xcdHtcXG4rXFx0XFx0LnByb2NuYW1lXFx0PSBcXFwiYXN5bmNfbW1fdGVhcmRvd25fdGhyZXNoX3BhZ2VzXFxcIixcXG4rXFx0XFx0LmRhdGFcXHRcXHQ9IFxcdTAwMjZzeXNjdGxfYXN5bmNfbW1fdGVhcmRvd25fdGhyZXNoX3BhZ2VzLFxcbitcXHRcXHQubWF4bGVuXFx0XFx0PSBzaXplb2YodW5zaWduZWQgbG9uZyksXFxuK1xcdFxcdC5tb2RlXFx0XFx0PSAwNjQ0LFxcbitcXHRcXHQucHJvY19oYW5kbGVyXFx0PSBwcm9jX2RvdWxvbmd2ZWNfbWlubWF4LFxcbitcXHR9LFxcbitcXHR7XFxuK1xcdFxcdC5wcm9jbmFtZVxcdD0gXFxcImFzeW5jX21tX3RlYXJkb3duX21heF9wZW5kaW5nX3BhZ2VzXFxcIixcXG4rXFx0XFx0LmRhdGFcXHRcXHQ9IFxcdTAwMjZzeXNjdGxfYXN5bmNfbW1fdGVhcmRvd25fbWF4X3BlbmRpbmdfcGFnZXMsXFxuK1xcdFxcdC5tYXhsZW5cXHRcXHQ9IHNpemVvZih1bnNpZ25lZCBsb25nKSxcXG4rXFx0XFx0Lm1vZGVcXHRcXHQ9IDA2NDQsXFxuK1xcdFxcdC5wcm9jX2hhbmRsZXJcXHQ9IHByb2NfZG91bG9uZ3ZlY19taW5tYXgsXFxuK1xcdH0sXFxuK307XFxuKyNlbmRpZiAvKiBDT05GSUdfU1lTQ1RMICovXFxuK1xcbitzdGF0aWMgaW50IF9faW5pdCBtbV9yZWFwZXJfaW5pdCh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdGg7XFxuK1xcbitcXHR0aCA9IGt0aHJlYWRfY3JlYXRlKG1tX3JlYXBlciwgTlVMTCwgXFxcIm1tX3JlYXBlclxcXCIpO1xcbitcXHRpZiAoSVNfRVJSKHRoKSkge1xcbitcXHRcXHRwcl9lcnIoXFxcIm1tX3JlYXBlcjogZmFpbGVkIHRvIHN0YXJ0IGt0aHJlYWQ6ICVsZFxcXFxuXFxcIiwgUFRSX0VSUih0aCkpO1xcbitcXHRcXHRyZXR1cm4gUFRSX0VSUih0aCk7XFxuK1xcdH1cXG4rXFx0c2V0X3VzZXJfbmljZSh0aCwgMTkpOyAvKiBtaW5pbWl6ZSBjb21wZXRpdGlvbiB3aXRoIG90aGVyIGZhaXIgY2xhc3MgdGFza3MgKi9cXG4rXFx0a3RocmVhZF9hZmZpbmVfcHJlZmVycmVkKHRoLCBob3VzZWtlZXBpbmdfY3B1bWFzayhIS19UWVBFX0tUSFJFQUQpKTtcXG4rXFx0c3lzY3RsX2FzeW5jX21tX3RlYXJkb3duX3RocmVzaF9wYWdlcyAgICAgID0gU1pfNjRNIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuK1xcdHN5c2N0bF9hc3luY19tbV90ZWFyZG93bl9tYXhfcGVuZGluZ19wYWdlcyA9IHRvdGFscmFtX3BhZ2VzKCkgLyA0OyAgLyogVE9ETzogcGxhY2Vob2xkZXIgKi9cXG4rXFx0d2FrZV91cF9wcm9jZXNzKHRoKTtcXG4rI2lmZGVmIENPTkZJR19TWVNDVExcXG4rXFx0cmVnaXN0ZXJfc3lzY3RsX2luaXQoXFxcInZtXFxcIiwgYXN5bmNfbW1fdGVhcmRvd25fdGFibGUpO1xcbisjZW5kaWZcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rc3Vic3lzX2luaXRjYWxsKG1tX3JlYXBlcl9pbml0KTtcXG4rI2VuZGlmXFxuZGlmZiAtLWdpdCBhL21tL0tjb25maWcgYi9tbS9LY29uZmlnXFxuaW5kZXggYzUyYWI2YWZjYjE1OTYuLmE5ZDkyNTQwNjY1M2Y4IDEwMDY0NFxcbi0tLSBhL21tL0tjb25maWdcXG4rKysgYi9tbS9LY29uZmlnXFxuQEAgLTE1MDAsNiArMTUwMCwxOCBAQCBjb25maWcgTEFaWV9NTVVfTU9ERV9LVU5JVF9URVNUXFxuIFxcbiBcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIFxcbitjb25maWcgQVNZTkNfTU1fVEVBUkRPV05cXG4rXFx0Ym9vbCBcXFwiQXN5bmMgb2ZmLUNQVSBhZGRyZXNzIHNwYWNlIHRlYXJkb3duIG9uIGV4aXRcXFwiXFxuK1xcdGRlcGVuZHMgb24gTU1VXFxuK1xcdGRlZmF1bHQgblxcbitcXHRoZWxwXFxuK1xcdCAgRGVmZXIgdGhlIGFkZHJlc3Mgc3BhY2UgdGVhcmRvd24gKGV4aXRfbW1hcCgpKSBvZiBsYXJnZSBleGl0aW5nIHByb2Nlc3Nlc1xcbitcXHQgIHRvIGEga2VybmVsIHRocmVhZCBpbnN0ZWFkIG9mIHJ1bm5pbmcgaXQgb24gdGhlIGV4aXRpbmcgQ1BVLiBUaGUgZmVhdHVyZVxcbitcXHQgIGlzIG9mZiBieSBkZWZhdWx0IGFuZCBpcyBlbmFibGVkIGF0IHJ1bnRpbWUgdmlhIHRoZSB2bS5hc3luY19tbV90ZWFyZG93blxcbitcXHQgIHN5c2N0bC5cXG4rXFxuK1xcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4rXFxuIHNvdXJjZSBcXFwibW0vZGFtb24vS2NvbmZpZ1xcXCJcXG4gXFxuIGVuZG1lbnVcXG5kaWZmIC0tZ2l0IGEvbW0vb29tX2tpbGwuYyBiL21tL29vbV9raWxsLmNcXG5pbmRleCA1ZjM3MmY2ZTI2ZmEzMi4uYjU0OTBkMWIxYmQyNjEgMTAwNjQ0XFxuLS0tIGEvbW0vb29tX2tpbGwuY1xcbisrKyBiL21tL29vbV9raWxsLmNcXG5AQCAtNzU0LDYgKzc1NCw0MCBAQCBzdGF0aWMgdm9pZCBtYXJrX29vbV92aWN0aW0oc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXFxuIFxcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gdHNrLVxcdTAwM2VtbTtcXG4gXFxuIFxcdFdBUk5fT04ob29tX2tpbGxlcl9kaXNhYmxlZCk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBNYXJrIHRoZSBtbSBpdHNlbGYsIG5vdCBqdXN0IHRoaXMgdGFzay9zaWduYWwsIGFzIGFuIE9PTSB0YXJnZXQsXFxuK1xcdCAqIHNvIHRoZSBkZWZlcnJlZC10ZWFyZG93biBwYXRoIGNhbiB0ZXN0IGl0IGZyb20gdGhlIG1tIGFsb25lLiBTZXRcXG4rXFx0ICogYWhlYWQgb2YgdGhlIFRJRl9NRU1ESUUgdGVzdC1hbmQtc2V0IGJlbG93IHNvIHRoYXQgZXZlcnkgY2FsbFxcbitcXHQgKiBtYXJrcyB0aGUgbW0sIGluY2x1ZGluZyBhIHJlcGVhdCBtYXJrIG9uIGEgdGFzayB0aGF0IGlzIGFscmVhZHlcXG4rXFx0ICogVElGX01FTURJRS5cXG4rXFx0ICpcXG4rXFx0ICogVGhpcyBpcyByZWxpYWJseSB2aXNpYmxlIHRvIHdoaWNoZXZlciB0aHJlYWQgZW5kcyB1cCBkcm9wcGluZyB0aGVcXG4rXFx0ICogbGFzdCByZWZlcmVuY2UgaW4gbW1wdXRfZXhpdCgpOiBtYXJraW5nIGFuZCBxdWV1aW5nIGZvciBhc3luY1xcbitcXHQgKiB0ZWFyZG93biBjYW4gbmV2ZXIgb3ZlcmxhcCBpbiB0aW1lLiBFdmVyeSBjYWxsZXIgcmVhY2hlcyB0aGlzIHdpdGhcXG4rXFx0ICogdHNrLVxcdTAwM2VtbSBzdGlsbCBzZXQgLS0gZWl0aGVyIHRzayBpcyBjdXJyZW50LCBtYXJraW5nIGl0c2VsZiBpblxcbitcXHQgKiBwcm9ncmFtIG9yZGVyLCBvciB0c2sgaXMgdGFza19sb2NrKCllZCBieSB0aGUgY2FsbGVyICh0aGVcXG4rXFx0ICogdGFza193aWxsX2ZyZWVfbWVtKCkgZmFzdCBwYXRoIGluIG9vbV9raWxsX3Byb2Nlc3MoKSkgLS0gd2hpbGVcXG4rXFx0ICogbW1wdXRfZXhpdCgpLCB0aGUgb25seSBwYXRoIHRoYXQgcXVldWVzIGZvciB0ZWFyZG93biwgaXMgcmVhY2hlZFxcbitcXHQgKiBvbmx5IGFmdGVyIG1tX3VzZXJzIGhpdHMgMCwgd2hpY2ggcmVxdWlyZXMgdHNrJ3Mgb3duIGV4aXRfbW0oKSAob3JcXG4rXFx0ICogZXhlY19tbWFwKCksIHRoZSBvdGhlciBwYXRoIHRoYXQgc2hlZHMgLVxcdTAwM2VtbSkgdG8gaGF2ZSBhbHJlYWR5XFxuK1xcdCAqIGNsZWFyZWQgLVxcdTAwM2VtbSB1bmRlciB0aGF0IHNhbWUgdGFza19sb2NrKCkuIFByb2dyYW0gb3JkZXIgb3JcXG4rXFx0ICogdGFza19sb2NrKCkgcmVsZWFzZS9hY3F1aXJlIHRoZXJlZm9yZSBvcmRlcnMgdGhpcyBzdG9yZSBiZWZvcmVcXG4rXFx0ICogdHNrJ3Mgb3duIGV2ZW50dWFsIG1tcHV0X2V4aXQoKS5cXG4rXFx0ICpcXG4rXFx0ICogSWYgYSBkaWZmZXJlbnQgQ0xPTkVfVk0gc2hhcmVyIHBlcmZvcm1zIHRoZSBhY3R1YWwgZmluYWwgZGVjcmVtZW50XFxuK1xcdCAqIGluc3RlYWQsIHRoZSBvcmRlcmluZyBkb2VzIG5vdCBjb21lIGZyb20gdGhpcyBzdG9yZTpcXG4rXFx0ICogbW1fZmxhZ3Nfc2V0KCkgaXMgc2V0X2JpdCgpLCBhIG5vbi12YWx1ZS1yZXR1cm5pbmcgUk1XLCBzbyBpdCBpc1xcbitcXHQgKiB1bm9yZGVyZWQgYW5kIGNvbnRyaWJ1dGVzIG5vdGhpbmcgb24gaXRzIG93bi4gSXQgY29tZXMgZnJvbSB0aGVcXG4rXFx0ICogbWFya2luZyB0YXNrJ3Mgb3duIGF0b21pY19kZWNfYW5kX3Rlc3QoKSwgYSB2YWx1ZS1yZXR1cm5pbmcgUk1XXFxuK1xcdCAqIGFuZCB0aGVyZWZvcmUgZnVsbHkgb3JkZXJlZCAoYW4gc21wX21iKCkgYmVmb3JlIGFuZCBhZnRlcikuXFxuK1xcdCAqIERlY3JlbWVudHMgYXJlIHRvdGFsbHkgb3JkZXJlZCBpbiBtbV91c2VycycgbW9kaWZpY2F0aW9uIG9yZGVyXFxuK1xcdCAqIHdpdGggdGhlIHplcm9pbmcgb25lIGxhc3QsIHNvIHRoZSBnZW5lcmFsIGJhcnJpZXJzIG9uIGJvdGggc2lkZXNcXG4rXFx0ICogbWFrZSB0aGlzIHN0b3JlIHZpc2libGUgdG8gd2hpY2hldmVyIHRocmVhZCBwZXJmb3JtcyBpdC5cXG4rXFx0ICovXFxuK1xcdGlmIChJU19FTkFCTEVEKENPTkZJR19BU1lOQ19NTV9URUFSRE9XTikpXFxuK1xcdFxcdG1tX2ZsYWdzX3NldChNTUZfT09NX1RBUkdFVEVELCBtbSk7XFxuK1xcbiBcXHQvKiBPT00ga2lsbGVyIG1pZ2h0IHJhY2Ugd2l0aCBtZW1jZyBPT00gKi9cXG4gXFx0aWYgKHRlc3RfYW5kX3NldF90c2tfdGhyZWFkX2ZsYWcodHNrLCBUSUZfTUVNRElFKSlcXG4gXFx0XFx0cmV0dXJuO1xcbkBAIC05MzEsNiArOTY1LDMzIEBAIHN0YXRpYyB2b2lkIF9fb29tX2tpbGxfcHJvY2VzcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnZpY3RpbSwgY29uc3QgY2hhciAqbWVzc2FnZSlcXG4gXFx0bW0gPSB2aWN0aW0tXFx1MDAzZW1tO1xcbiBcXHRtbWdyYWIobW0pO1xcbiBcXG4rXFx0LypcXG4rXFx0ICogU2V0IHRoaXMgYmVmb3JlIGFueSBTSUdLSUxMIGZvciB0aGlzIGtpbGwgZXZlbnQgZ29lcyBvdXQgYmVsb3csXFxuK1xcdCAqIHdoaWxlIHRhc2tfbG9jayh2aWN0aW0pIChoZWxkIHNpbmNlIGZpbmRfbG9ja190YXNrX21tKCkgYWJvdmUpIGlzXFxuK1xcdCAqIHN0aWxsIGhlbGQuIFRoaXMgaXMgcmVsaWFibHkgdmlzaWJsZSB0byB3aGljaGV2ZXIgdGhyZWFkIGVuZHMgdXBcXG4rXFx0ICogcnVubmluZyBtbXB1dF9leGl0KCkgYW5kIGRyb3BwaW5nIHRoZSBsYXN0IHJlZmVyZW5jZSB0byB0aGlzIG1tIC0tXFxuK1xcdCAqIHZpY3RpbSBpdHNlbGYsIGEgc2libGluZywgb3IgYSBDTE9ORV9WTSBzaGFyZXIgaW4gYW5vdGhlciB0aHJlYWRcXG4rXFx0ICogZ3JvdXAgKHdoaWNoIG1hcmtfb29tX3ZpY3RpbSgpIG5ldmVyIG1hcmtzLCBidXQgd2hpY2ggc3RpbGxcXG4rXFx0ICogb2JzZXJ2ZXMgdGhpcyBzdG9yZSBvbiB0aGUgc2hhcmVkIG1tKS4gTWFya2luZyBhbmQgcXVldWluZyBmb3JcXG4rXFx0ICogYXN5bmMgdGVhcmRvd24gY2FuIG5ldmVyIG92ZXJsYXA6IG1tcHV0X2V4aXQoKSBpcyByZWFjaGVkIG9ubHlcXG4rXFx0ICogYWZ0ZXIgbW1fdXNlcnMgaGl0cyAwLCBhbmQgdGhhdCByZXF1aXJlcyB2aWN0aW0ncyBvd24gZXhpdF9tbSgpXFxuK1xcdCAqIChvciBleGVjX21tYXAoKSwgdGhlIG90aGVyIHBhdGggdGhhdCBzaGVkcyAtXFx1MDAzZW1tKSB0byBoYXZlIGNsZWFyZWRcXG4rXFx0ICogLVxcdTAwM2VtbSB1bmRlciB0aGlzIHNhbWUgdGFza19sb2NrKCkgZmlyc3QsIHdoaWNoIHJlbGVhc2UvYWNxdWlyZVxcbitcXHQgKiBvcmRlcnMgYWZ0ZXIgdGhlIHN0b3JlIGFib3ZlLlxcbitcXHQgKlxcbitcXHQgKiBJZiBzb21lIG90aGVyIHNoYXJlciBwZXJmb3JtcyB0aGUgYWN0dWFsIGZpbmFsIGRlY3JlbWVudCBpbnN0ZWFkLFxcbitcXHQgKiB0aGUgb3JkZXJpbmcgZG9lcyBub3QgY29tZSBmcm9tIHRoaXMgc3RvcmU6IG1tX2ZsYWdzX3NldCgpIGlzXFxuK1xcdCAqIHNldF9iaXQoKSwgYSBub24tdmFsdWUtcmV0dXJuaW5nIFJNVywgc28gaXQgaXMgdW5vcmRlcmVkIGFuZFxcbitcXHQgKiBjb250cmlidXRlcyBub3RoaW5nIG9uIGl0cyBvd24uIEl0IGNvbWVzIGZyb20gdGhlIG1hcmtpbmcgdGFzaydzXFxuK1xcdCAqIG93biBhdG9taWNfZGVjX2FuZF90ZXN0KCksIGEgdmFsdWUtcmV0dXJuaW5nIFJNVyBhbmQgdGhlcmVmb3JlXFxuK1xcdCAqIGZ1bGx5IG9yZGVyZWQgKGFuIHNtcF9tYigpIGJlZm9yZSBhbmQgYWZ0ZXIpLiBEZWNyZW1lbnRzIGFyZVxcbitcXHQgKiB0b3RhbGx5IG9yZGVyZWQgaW4gbW1fdXNlcnMnIG1vZGlmaWNhdGlvbiBvcmRlciB3aXRoIHRoZSB6ZXJvaW5nXFxuK1xcdCAqIG9uZSBsYXN0LCBzbyB0aGUgZ2VuZXJhbCBiYXJyaWVycyBvbiBib3RoIHNpZGVzIG1ha2UgdGhpcyBzdG9yZVxcbitcXHQgKiB2aXNpYmxlIHRvIHdoaWNoZXZlciB0aHJlYWQgcGVyZm9ybXMgaXQuXFxuK1xcdCAqL1xcbitcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQVNZTkNfTU1fVEVBUkRPV04pKVxcbitcXHRcXHRtbV9mbGFnc19zZXQoTU1GX09PTV9UQVJHRVRFRCwgbW0pO1xcbitcXG4gXFx0LyogUmFpc2UgZXZlbnQgYmVmb3JlIHNlbmRpbmcgc2lnbmFsOiB0YXNrIHJlYXBlciBtdXN0IHNlZSB0aGlzICovXFxuIFxcdGNvdW50X3ZtX2V2ZW50KE9PTV9LSUxMKTtcXG4gXFx0bWVtY2dfbWVtb3J5X2V2ZW50X21tKG1tLCBNRU1DR19PT01fS0lMTCk7XFxuZGlmZiAtLWdpdCBhL21tL3Ztc3RhdC5jIGIvbW0vdm1zdGF0LmNcXG5pbmRleCA0ZTI2ZTVmZDY2NjYyNi4uZTNmZjMwMDI3YzI0ZWQgMTAwNjQ0XFxuLS0tIGEvbW0vdm1zdGF0LmNcXG4rKysgYi9tbS92bXN0YXQuY1xcbkBAIC0xNDk0LDYgKzE0OTQsMTEgQEAgY29uc3QgY2hhciAqIGNvbnN0IHZtc3RhdF90ZXh0W10gPSB7XFxuIFxcdFtJKE5SU1dQSU4pXVxcdFxcdFxcdFxcdD0gXFxcIm5yc3dwaW5cXFwiLFxcbiBcXHRbSShOUlNXUE9VVCldXFx0XFx0XFx0XFx0PSBcXFwibnJzd3BvdXRcXFwiLFxcbiAjZW5kaWYgLyogQ09ORklHX1NXQVAgKi9cXG4rI2lmZGVmIENPTkZJR19BU1lOQ19NTV9URUFSRE9XTlxcbitcXHRbSShBU1lOQ19NTV9URUFSRE9XTl9RVUVVRUQpXVxcdD0gXFxcImFzeW5jX21tX3RlYXJkb3duX3F1ZXVlZFxcXCIsXFxuK1xcdFtJKEFTWU5DX01NX1RFQVJET1dOX1NZTkMpXVxcdFxcdD0gXFxcImFzeW5jX21tX3RlYXJkb3duX3N5bmNcXFwiLFxcbitcXHRbSShBU1lOQ19NTV9URUFSRE9XTl9SRUpFQ1RFRCldXFx0PSBcXFwiYXN5bmNfbW1fdGVhcmRvd25fcmVqZWN0ZWRcXFwiLFxcbisjZW5kaWZcXG4gI3VuZGVmIElcXG4gI2VuZGlmIC8qIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUyAqL1xcbiB9O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOVQxOTo0MTo0MS4wMzgxODcyMDlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzMTg4MDg0NjIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFTWU5DX01NX1RFQVJET1dOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibW1fcmVhcGVyXCIsXG4gICAgXCJhc3luY19tbV90ZWFyZG93bl9xdWV1ZVwiLFxuICAgIFwiYXN5bmNfbW1fdGVhcmRvd25fcmVzZXJ2ZVwiLFxuICAgIFwiYXN5bmNfbW1fdGVhcmRvd25fZWxpZ2libGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZlYXR1cmUgdG8gYXN5bmNocm9ub3VzbHkgdGVhciBkb3duIHRoZSBhZGRyZXNzIHNwYWNlIG9mIGV4aXRpbmcgcHJvY2Vzc2VzIHZpYSBhIGRlZGljYXRlZCBrZXJuZWwgdGhyZWFkIChtbV9yZWFwZXIpLiBUaGlzIG1vZGlmaWVzIGNvcmUgcHJvY2VzcyBleGl0IGFuZCBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYywgd2hpY2ggaXMgaGlnaGx5IGZ1bmN0aW9uYWwgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMTFlNWY1MTk3MjQ3MTI3N2MzMmI0MGZmOTRhYWJiZDg2YTA0NjFlYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gSnVsIDE5IDE5OjQxOjM4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwvdm0ucnN0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwvdm0ucnN0XG5pbmRleCA1YjMxOGQxN2FhNGI0NC4uY2NkYTZjNzVmZTFmYjcgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC92bS5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL3ZtLnJzdFxuQEAgLTIyLDYgKzIyLDkgQEAgdGhlIHdyaXRlb3V0IG9mIGRpcnR5IGRhdGEgdG8gZGlzay5cbiBDdXJyZW50bHksIHRoZXNlIGZpbGVzIGFyZSBpbiAvcHJvYy9zeXMvdm06XG4gXG4gLSBhZG1pbl9yZXNlcnZlX2tieXRlc1xuKy0gYXN5bmNfbW1fdGVhcmRvd25cbistIGFzeW5jX21tX3RlYXJkb3duX21heF9wZW5kaW5nX3BhZ2VzXG4rLSBhc3luY19tbV90ZWFyZG93bl90aHJlc2hfcGFnZXNcbiAtIGNvbXBhY3RfbWVtb3J5XG4gLSBjb21wYWN0aW9uX3Byb2FjdGl2ZW5lc3NcbiAtIGNvbXBhY3RfdW5ldmljdGFibGVfYWxsb3dlZFxuQEAgLTEwOCw2ICsxMTEsNDEgQEAgT24geDg2XzY0IHRoaXMgaXMgYWJvdXQgMTI4TUIuXG4gQ2hhbmdpbmcgdGhpcyB0YWtlcyBlZmZlY3Qgd2hlbmV2ZXIgYW4gYXBwbGljYXRpb24gcmVxdWVzdHMgbWVtb3J5LlxuIFxuIFxuK2FzeW5jX21tX3RlYXJkb3duXG4rPT09PT09PT09PT09PT09PT1cbitcbitBdmFpbGFibGUgb25seSB3aGVuIENPTkZJR19BU1lOQ19NTV9URUFSRE9XTiBpcyBzZXQuIENvbnRyb2xzIHdoZXRoZXIgdGhlXG4rYWRkcmVzcy1zcGFjZSB0ZWFyZG93biAoZXhpdF9tbWFwKCkpIG9mIGxhcmdlIGV4aXRpbmcgcHJvY2Vzc2VzIGlzIGRlZmVycmVkXG4rdG8gdGhlIG1tX3JlYXBlciBrZXJuZWwgdGhyZWFkIGluc3RlYWQgb2YgcnVubmluZyBvbiB0aGUgZXhpdGluZyBDUFUuXG4rXG4rV3JpdGluZyAxIGVuYWJsZXMgZGVmZXJyYWwsIDAgZGlzYWJsZXMgaXQuIERpc2FibGluZyBtYWtlcyBtbXB1dF9leGl0KCkgdGVhclxuK2Rvd24gaW5saW5lIGFnYWluOyBpdCBkb2VzIG5vdCBkcmFpbiBtbXMgYWxyZWFkeSBxdWV1ZWQuIERlZmF1bHRzIHRvIDAuXG4rXG4rRGVmZXJyZWQgdGVhcmRvd24gY29uc3VtZXMgQ1BVIGluIHRoZSBtbV9yZWFwZXIga2VybmVsIHRocmVhZCwgd2hpY2ggcnVucyBpblxuK3RoZSByb290IGNncm91cDogdGhlIHRlYXJkb3duIHdvcmsgb2YgYSB0YXNrIGluIGEgQ1BVLWxpbWl0ZWQgY2dyb3VwIGlzIG5vdFxuK2NoYXJnZWQgdG8gdGhhdCBjZ3JvdXAsIHNpbWlsYXIgdG8ga3N3YXBkIGFuZCB0aGUgb29tX3JlYXBlci4gQ29uc2lkZXIgdGhpc1xuK2JlZm9yZSBlbmFibGluZyB0aGUgZmVhdHVyZSBvbiBzeXN0ZW1zIHRoYXQgcmVseSBvbiBzdHJpY3QgcGVyLWNncm91cCBDUFVcbithY2NvdW50aW5nLlxuK1xuK1xuK2FzeW5jX21tX3RlYXJkb3duX21heF9wZW5kaW5nX3BhZ2VzXG4rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbitcbitBdmFpbGFibGUgb25seSB3aGVuIENPTkZJR19BU1lOQ19NTV9URUFSRE9XTiBpcyBzZXQuIEJhY2twcmVzc3VyZSBjYXAsIGluXG4rcGFnZXMsIG9uIHRoZSB0b3RhbCBSU1Mgb2YgbW1zIHF1ZXVlZCBmb3IgdGhlIG1tX3JlYXBlciBidXQgbm90IHlldCB0b3JuXG4rZG93bi4gQW4gZXhpdCB0aGF0IHdvdWxkIHB1c2ggdGhlIHRvdGFsIG92ZXIgdGhpcyBjYXAgdGVhcnMgZG93blxuK3N5bmNocm9ub3VzbHkgaW5zdGVhZCBvZiBxdWV1aW5nLiBEZWZhdWx0cyB0byB0b3RhbHJhbV9wYWdlcygpIC8gNC5cbitcbitcbithc3luY19tbV90ZWFyZG93bl90aHJlc2hfcGFnZXNcbis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbitcbitBdmFpbGFibGUgb25seSB3aGVuIENPTkZJR19BU1lOQ19NTV9URUFSRE9XTiBpcyBzZXQuIE1pbmltdW0gUlNTLCBpbiBwYWdlcyxcbitmb3IgYW4gZXhpdGluZyBtbSB0byBiZSBlbGlnaWJsZSBmb3IgZGVmZXJyYWwgdG8gdGhlIG1tX3JlYXBlci4gRXhpdGluZyBtbXNcbitiZWxvdyB0aGlzIHRocmVzaG9sZCBhcmUgYWx3YXlzIHRvcm4gZG93biBzeW5jaHJvbm91c2x5LiBEZWZhdWx0cyB0byA2NE1CXG4rd29ydGggb2YgcGFnZXMuXG4rXG4rXG4gY29tcGFjdF9tZW1vcnlcbiA9PT09PT09PT09PT09PVxuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaFxuaW5kZXggOTM5YjVlYThjOWUwYmUuLmVlNmMwYWM4NGIzZDU5IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmhcbkBAIC03LDYgKzcsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2F1eHZlYy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva3JlZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbGlzdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbGxpc3QuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NwaW5sb2NrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yYnRyZWUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21hcGxlX3RyZWUuaFx1MDAzZVxuQEAgLTEzNjcsNiArMTM2OCwxMCBAQCBzdHJ1Y3QgbW1fc3RydWN0IHtcbiBcdFx0YXRvbWljX2xvbmdfdCBodWdldGxiX3VzYWdlO1xuICNlbmRpZlxuIFx0XHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgYXN5bmNfcHV0X3dvcms7XG4rI2lmZGVmIENPTkZJR19BU1lOQ19NTV9URUFSRE9XTlxuK1x0XHRzdHJ1Y3QgbGxpc3Rfbm9kZSBhc3luY19yZWFwX25vZGU7XG4rXHRcdHVuc2lnbmVkIGxvbmcgYXN5bmNfcmVhcF9yc3M7XG4rI2VuZGlmIC8qIENPTkZJR19BU1lOQ19NTV9URUFSRE9XTiAqL1xuIFxuICNpZmRlZiBDT05GSUdfSU9NTVVfTU1fREFUQVxuIFx0XHRzdHJ1Y3QgaW9tbXVfbW1fZGF0YSAqaW9tbXVfbW07XG5AQCAtMTk4NSw2ICsxOTkwLDE2IEBAIGVudW0ge1xuICNkZWZpbmUgTU1GX1RPUERPV05cdFx0MzFcdC8qIG1tIHNlYXJjaGVzIHRvcCBkb3duIGJ5IGRlZmF1bHQgKi9cbiAjZGVmaW5lIE1NRl9UT1BET1dOX01BU0tcdEJJVChNTUZfVE9QRE9XTilcbiBcbisvKlxuKyAqIG1tIGlzIHRoZSB0YXJnZXQgb2YgYW4gaW4tZmxpZ2h0IE9PTSBraWxsLiBPbmx5IHdyaXR0ZW4gdW5kZXJcbisgKiBDT05GSUdfQVNZTkNfTU1fVEVBUkRPV04gdG9kYXkuIFN0aWNreTogbmV2ZXIgY2xlYXJlZCAtLSB0aGUgbW0gaXNcbisgKiBkeWluZyAoX19vb21fa2lsbF9wcm9jZXNzKCkga2lsbHMgZXZlcnkgcHJvY2VzcyBzaGFyaW5nIGl0KSwgYW5kIGFcbisgKiBoeXBvdGhldGljYWwgc3Vydml2aW5nIHNoYXJlciB3b3VsZCBtZXJlbHkga2VlcCB0ZWFyaW5nIGRvd25cbisgKiBzeW5jaHJvbm91c2x5LiBBYm92ZSBiaXQgMzEsIHNvIGl0IGlzIG91dHNpZGUgTU1GX0lOSVRfTEVHQUNZX01BU0snc1xuKyAqIGRvbWFpbiBlbnRpcmVseSBhbmQgaXMgbmV2ZXIgaW5oZXJpdGVkIG9uIGZvcmsuXG4rICovXG4rI2RlZmluZSBNTUZfT09NX1RBUkdFVEVEXHQzMlxuK1xuICNkZWZpbmUgTU1GX0lOSVRfTEVHQUNZX01BU0tcdChNTUZfRFVNUF9GSUxURVJfTUFTSyB8XFxcbiBcdFx0XHRcdCBNTUZfRElTQUJMRV9USFBfTUFTSyB8IE1NRl9IQVNfTURXRV9NQVNLIHxcXFxuIFx0XHRcdFx0IE1NRl9WTV9NRVJHRV9BTllfTUFTSyB8IE1NRl9UT1BET1dOX01BU0spXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oIGIvaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oXG5pbmRleCAxMGJlOGE1NGI0MTZmOS4uMjBhZWIxZDdlZDMxYjAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmhcbisrKyBiL2luY2x1ZGUvbGludXgvc2NoZWQvbW0uaFxuQEAgLTE0Nyw2ICsxNDcsMTIgQEAgZXh0ZXJuIHZvaWQgbW1wdXQoc3RydWN0IG1tX3N0cnVjdCAqKTtcbiB2b2lkIG1tcHV0X2FzeW5jKHN0cnVjdCBtbV9zdHJ1Y3QgKik7XG4gI2VuZGlmXG4gXG4rI2lmZGVmIENPTkZJR19BU1lOQ19NTV9URUFSRE9XTlxuK3ZvaWQgbW1wdXRfZXhpdChzdHJ1Y3QgbW1fc3RydWN0ICopO1xuKyNlbHNlXG4rc3RhdGljIGlubGluZSB2b2lkIG1tcHV0X2V4aXQoc3RydWN0IG1tX3N0cnVjdCAqbW0pIHsgbW1wdXQobW0pOyB9XG4rI2VuZGlmXG4rXG4gLyogR3JhYiBhIHJlZmVyZW5jZSB0byBhIHRhc2sncyBtbSwgaWYgaXQgaXMgbm90IGFscmVhZHkgZ29pbmcgYXdheSAqL1xuIGV4dGVybiBzdHJ1Y3QgbW1fc3RydWN0ICpnZXRfdGFza19tbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spO1xuIC8qXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92bV9ldmVudF9pdGVtLmggYi9pbmNsdWRlL2xpbnV4L3ZtX2V2ZW50X2l0ZW0uaFxuaW5kZXggMjYyOGNjZGEwNzZhMDcuLmRlNGRjMjBiN2Y4N2RlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC92bV9ldmVudF9pdGVtLmhcbisrKyBiL2luY2x1ZGUvbGludXgvdm1fZXZlbnRfaXRlbS5oXG5AQCAtMTc5LDYgKzE3OSwxMSBAQCBlbnVtIHZtX2V2ZW50X2l0ZW0geyBQR1BHSU4sIFBHUEdPVVQsIFBTV1BJTiwgUFNXUE9VVCxcbiBcdFx0TlJTV1BJTixcbiBcdFx0TlJTV1BPVVQsXG4gI2VuZGlmIC8qIENPTkZJR19TV0FQICovXG4rI2lmZGVmIENPTkZJR19BU1lOQ19NTV9URUFSRE9XTlxuK1x0XHRBU1lOQ19NTV9URUFSRE9XTl9RVUVVRUQsXG4rXHRcdEFTWU5DX01NX1RFQVJET1dOX1NZTkMsXG4rXHRcdEFTWU5DX01NX1RFQVJET1dOX1JFSkVDVEVELFxuKyNlbmRpZlxuIFx0XHROUl9WTV9FVkVOVF9JVEVNU1xuIH07XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvbW1fcmVhcGVyLmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9tbV9yZWFwZXIuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4zMTViY2VkN2M0MjUzZFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvbW1fcmVhcGVyLmhcbkBAIC0wLDAgKzEsNzMgQEBcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xuKyN1bmRlZiBUUkFDRV9TWVNURU1cbisjZGVmaW5lIFRSQUNFX1NZU1RFTSBtbV9yZWFwZXJcbitcbisjaWYgIWRlZmluZWQoX1RSQUNFX01NX1JFQVBFUl9IKSB8fCBkZWZpbmVkKFRSQUNFX0hFQURFUl9NVUxUSV9SRUFEKVxuKyNkZWZpbmUgX1RSQUNFX01NX1JFQVBFUl9IXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvdHJhY2Vwb2ludC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3RvcG9sb2d5LmhcdTAwM2VcbitcbitUUkFDRV9FVkVOVChtbV9hc3luY190ZWFyZG93bl9xdWV1ZSxcbitcbitcdFRQX1BST1RPKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHJzcyksXG4rXG4rXHRUUF9BUkdTKG1tLCByc3MpLFxuK1xuK1x0VFBfU1RSVUNUX19lbnRyeShcbitcdFx0X19maWVsZChzdHJ1Y3QgbW1fc3RydWN0ICosIG1tKVxuK1x0XHRfX2ZpZWxkKGludCwgcGlkKVxuK1x0XHRfX2FycmF5KGNoYXIsIGNvbW0sIFRBU0tfQ09NTV9MRU4pXG4rXHRcdF9fZmllbGQodW5zaWduZWQgbG9uZywgcnNzKVxuK1x0XHRfX2ZpZWxkKGludCwgbm9kZSlcbitcdCksXG4rXG4rXHRUUF9mYXN0X2Fzc2lnbihcbitcdFx0X19lbnRyeS1cdTAwM2VtbSA9IG1tO1xuK1x0XHRfX2VudHJ5LVx1MDAzZXBpZCA9IGN1cnJlbnQtXHUwMDNlcGlkO1xuK1x0XHRtZW1jcHkoX19lbnRyeS1cdTAwM2Vjb21tLCBjdXJyZW50LVx1MDAzZWNvbW0sIFRBU0tfQ09NTV9MRU4pO1xuK1x0XHRfX2VudHJ5LVx1MDAzZXJzcyA9IHJzcztcbitcdFx0X19lbnRyeS1cdTAwM2Vub2RlID0gbnVtYV9ub2RlX2lkKCk7XG4rXHQpLFxuK1xuK1x0VFBfcHJpbnRrKFwibW09JXAgcGlkPSVkIGNvbW09JXMgcnNzPSVsdWtCIG5vZGU9JWRcIixcbitcdFx0X19lbnRyeS1cdTAwM2VtbSxcbitcdFx0X19lbnRyeS1cdTAwM2VwaWQsXG4rXHRcdF9fZW50cnktXHUwMDNlY29tbSxcbitcdFx0X19lbnRyeS1cdTAwM2Vyc3MgXHUwMDNjXHUwMDNjIChQQUdFX1NISUZUIC0gMTApLFxuK1x0XHRfX2VudHJ5LVx1MDAzZW5vZGVcbitcdClcbispO1xuK1xuK1RSQUNFX0VWRU5UKG1tX2FzeW5jX3RlYXJkb3duX3JlYXAsXG4rXG4rXHRUUF9QUk9UTyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBjaGFyZ2VkX3JzcywgdW5zaWduZWQgbG9uZyBsaXZlX3JzcyksXG4rXG4rXHRUUF9BUkdTKG1tLCBjaGFyZ2VkX3JzcywgbGl2ZV9yc3MpLFxuK1xuK1x0VFBfU1RSVUNUX19lbnRyeShcbitcdFx0X19maWVsZChzdHJ1Y3QgbW1fc3RydWN0ICosIG1tKVxuK1x0XHRfX2ZpZWxkKHVuc2lnbmVkIGxvbmcsIGNoYXJnZWRfcnNzKVxuK1x0XHRfX2ZpZWxkKHVuc2lnbmVkIGxvbmcsIGxpdmVfcnNzKVxuK1x0XHRfX2ZpZWxkKGludCwgbm9kZSlcbitcdCksXG4rXG4rXHRUUF9mYXN0X2Fzc2lnbihcbitcdFx0X19lbnRyeS1cdTAwM2VtbSA9IG1tO1xuK1x0XHRfX2VudHJ5LVx1MDAzZWNoYXJnZWRfcnNzID0gY2hhcmdlZF9yc3M7XG4rXHRcdF9fZW50cnktXHUwMDNlbGl2ZV9yc3MgPSBsaXZlX3JzcztcbitcdFx0X19lbnRyeS1cdTAwM2Vub2RlID0gbnVtYV9ub2RlX2lkKCk7XG4rXHQpLFxuK1xuK1x0VFBfcHJpbnRrKFwibW09JXAgY2hhcmdlZF9yc3M9JWx1a0IgbGl2ZV9yc3M9JWx1a0Igbm9kZT0lZFwiLFxuK1x0XHRfX2VudHJ5LVx1MDAzZW1tLFxuK1x0XHRfX2VudHJ5LVx1MDAzZWNoYXJnZWRfcnNzIFx1MDAzY1x1MDAzYyAoUEFHRV9TSElGVCAtIDEwKSxcbitcdFx0X19lbnRyeS1cdTAwM2VsaXZlX3JzcyBcdTAwM2NcdTAwM2MgKFBBR0VfU0hJRlQgLSAxMCksXG4rXHRcdF9fZW50cnktXHUwMDNlbm9kZVxuK1x0KVxuKyk7XG4rXG4rI2VuZGlmIC8qIF9UUkFDRV9NTV9SRUFQRVJfSCAqL1xuK1xuKyNpbmNsdWRlIFx1MDAzY3RyYWNlL2RlZmluZV90cmFjZS5oXHUwMDNlXG5kaWZmIC0tZ2l0IGEva2VybmVsL2V4aXQuYyBiL2tlcm5lbC9leGl0LmNcbmluZGV4IDEwNTY0MjJiYzEwMTNlLi42Zjk3ZDIwNGY5ZmNhYyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9leGl0LmNcbisrKyBiL2tlcm5lbC9leGl0LmNcbkBAIC02MDcsNyArNjA3LDcgQEAgc3RhdGljIHZvaWQgZXhpdF9tbSh2b2lkKVxuIFx0dGFza191bmxvY2soY3VycmVudCk7XG4gXHRtbWFwX3JlYWRfdW5sb2NrKG1tKTtcbiBcdG1tX3VwZGF0ZV9uZXh0X293bmVyKG1tKTtcbi1cdG1tcHV0KG1tKTtcbitcdG1tcHV0X2V4aXQobW0pO1xuIFx0aWYgKHRlc3RfdGhyZWFkX2ZsYWcoVElGX01FTURJRSkpXG4gXHRcdGV4aXRfb29tX3ZpY3RpbSgpO1xuIH1cbmRpZmYgLS1naXQgYS9rZXJuZWwvZm9yay5jIGIva2VybmVsL2ZvcmsuY1xuaW5kZXggZjBlMmUxMzFhOWE1YWYuLjRiZGZmYTE4OGY1MjI0IDEwMDY0NFxuLS0tIGEva2VybmVsL2ZvcmsuY1xuKysrIGIva2VybmVsL2ZvcmsuY1xuQEAgLTExMiw2ICsxMTIsOCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3Vud2luZF9kZWZlcnJlZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGdhbGxvYy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdWFjY2Vzcy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvaXNvbGF0aW9uLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zaXplcy5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXHUwMDNjYXNtL21tdV9jb250ZXh0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vY2FjaGVmbHVzaC5oXHUwMDNlXG5AQCAtMTI0LDYgKzEyNiw5IEBAXG4gXG4gI2RlZmluZSBDUkVBVEVfVFJBQ0VfUE9JTlRTXG4gI2luY2x1ZGUgXHUwMDNjdHJhY2UvZXZlbnRzL3Rhc2suaFx1MDAzZVxuKyNpZmRlZiBDT05GSUdfQVNZTkNfTU1fVEVBUkRPV05cbisjaW5jbHVkZSBcdTAwM2N0cmFjZS9ldmVudHMvbW1fcmVhcGVyLmhcdTAwM2VcbisjZW5kaWZcbiBcbiAjaW5jbHVkZSBcdTAwM2NrdW5pdC92aXNpYmlsaXR5LmhcdTAwM2VcbiBcbkBAIC0zNDA3LDMgKzM0MTIsMTk3IEBAIHN0YXRpYyBpbnQgX19pbml0IGluaXRfZm9ya19zeXNjdGwodm9pZClcbiB9XG4gXG4gc3Vic3lzX2luaXRjYWxsKGluaXRfZm9ya19zeXNjdGwpO1xuK1xuKyNpZmRlZiBDT05GSUdfQVNZTkNfTU1fVEVBUkRPV05cbitzdGF0aWMgTExJU1RfSEVBRChtbV9yZWFwZXJfbGlzdCk7XG4rc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKG1tX3JlYXBlcl93YWl0KTtcbitzdGF0aWMgYXRvbWljX2xvbmdfdCBtbV9yZWFwZXJfcGVuZGluZ19wYWdlcztcbitzdGF0aWMgREVGSU5FX1NUQVRJQ19LRVlfRkFMU0UoYXN5bmNfbW1fdGVhcmRvd25fa2V5KTtcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBzeXNjdGxfYXN5bmNfbW1fdGVhcmRvd25fdGhyZXNoX3BhZ2VzO1xuK3N0YXRpYyB1bnNpZ25lZCBsb25nIHN5c2N0bF9hc3luY19tbV90ZWFyZG93bl9tYXhfcGVuZGluZ19wYWdlcztcbisjaWZkZWYgQ09ORklHX1NZU0NUTFxuK3N0YXRpYyB1OCBzeXNjdGxfYXN5bmNfbW1fdGVhcmRvd25fZW5hYmxlZDtcbitzdGF0aWMgREVGSU5FX01VVEVYKGFzeW5jX21tX3RlYXJkb3duX2xvY2spO1xuKyNlbmRpZlxuK1xuK3N0YXRpYyBib29sIGFzeW5jX21tX3RlYXJkb3duX2VsaWdpYmxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHJzcylcbit7XG4rXHRpZiAocnNzIFx1MDAzYyBSRUFEX09OQ0Uoc3lzY3RsX2FzeW5jX21tX3RlYXJkb3duX3RocmVzaF9wYWdlcykpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcdGlmIChtbV9mbGFnc190ZXN0KE1NRl9PT01fU0tJUCwgbW0pKVx0LyogcmVhcGVkLCBvciBoaWRkZW4gZnJvbSB0aGUgcmVhcGVyICovXG4rXHRcdHJldHVybiBmYWxzZTtcbitcdC8qXG4rXHQgKiBNTUZfT09NX1RBUkdFVEVEIGlzIHNldCBieSB0aGUgT09NIGtpbGxlciB3aGlsZSBzb21lIHRhc2sgc3RpbGxcbitcdCAqIGhvbGRzIGEgbGl2ZSByZWZlcmVuY2UgdG8gdGhpcyBtbSAoc2VlIG1hcmtfb29tX3ZpY3RpbSgpIGFuZFxuK1x0ICogX19vb21fa2lsbF9wcm9jZXNzKCkpLCBhbmQgdGhpcyBlbGlnaWJpbGl0eSBjaGVjayBpcyByZWFjaGVkIG9ubHlcbitcdCAqIGZyb20gbW1wdXRfZXhpdCgpLCBhZnRlciBtbV91c2VycyBoYXMgZHJvcHBlZCB0byAwIC0tIHNvIG1hcmtpbmdcbitcdCAqIGFuZCB0aGlzIGNoZWNrIGNhbiBuZXZlciBvdmVybGFwIGluIHRpbWUuIFdoaWNoZXZlciB0aHJlYWRcbitcdCAqIHBlcmZvcm1zIHRoZSBmaW5hbCBkZWNyZW1lbnQgaXMgdGhlcmVmb3JlIGd1YXJhbnRlZWQgdG8gb2JzZXJ2ZVxuK1x0ICogdGhlIGZsYWcgYWxyZWFkeSBzZXQsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGF0IHRocmVhZCB3YXNcbitcdCAqIGl0c2VsZiBldmVyIHBhc3NlZCB0byBtYXJrX29vbV92aWN0aW0oKSAoYSBDTE9ORV9WTS1zaGFyaW5nXG4rXHQgKiBwcm9jZXNzIGluIGFub3RoZXIgdGhyZWFkIGdyb3VwIG5ldmVyIGlzLCBidXQgc3RpbGwgb2JzZXJ2ZXNcbitcdCAqIHRoaXMgZmxhZyBvbiB0aGUgc2hhcmVkIG1tKS5cbitcdCAqL1xuK1x0aWYgKG1tX2ZsYWdzX3Rlc3QoTU1GX09PTV9UQVJHRVRFRCwgbW0pKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4rLypcbisgKiBDaGFyZ2UgcnNzIGFnYWluc3QgdGhlIHBlbmRpbmctdGVhcmRvd24gYnVkZ2V0LiAgUmV0dXJucyB0cnVlIGlmIGl0IGZpdHNcbisgKiB1bmRlciB0aGUgY2FwLCBpbiB3aGljaCBjYXNlIHRoZSBjYWxsZXIgZW5xdWV1ZXMgYW5kIHRoZSByZWFwZXIgcmVsZWFzZXNcbisgKiB0aGUgc2FtZSByc3MgYWZ0ZXIgX19tbXB1dCgpLiAgT24gb3ZlcnNob290IG5vdGhpbmcgc3RheXMgY2hhcmdlZCBhbmQgdGhlXG4rICogY2FsbGVyIG11c3QgdGVhciBkb3duIHN5bmNocm9ub3VzbHkuXG4rICovXG4rc3RhdGljIGJvb2wgYXN5bmNfbW1fdGVhcmRvd25fcmVzZXJ2ZSh1bnNpZ25lZCBsb25nIHJzcylcbit7XG4rXHRpZiAoYXRvbWljX2xvbmdfYWRkX3JldHVybihyc3MsIFx1MDAyNm1tX3JlYXBlcl9wZW5kaW5nX3BhZ2VzKSBcdTAwM2VcbitcdCAgICBSRUFEX09OQ0Uoc3lzY3RsX2FzeW5jX21tX3RlYXJkb3duX21heF9wZW5kaW5nX3BhZ2VzKSkge1xuK1x0XHRhdG9taWNfbG9uZ19zdWIocnNzLCBcdTAwMjZtbV9yZWFwZXJfcGVuZGluZ19wYWdlcyk7XG4rXHRcdHJldHVybiBmYWxzZTtcbitcdH1cbitcdHJldHVybiB0cnVlO1xuK31cbitcbitzdGF0aWMgdm9pZCBhc3luY19tbV90ZWFyZG93bl9xdWV1ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyByc3MpXG4re1xuK1x0Y291bnRfdm1fZXZlbnQoQVNZTkNfTU1fVEVBUkRPV05fUVVFVUVEKTtcbitcdHRyYWNlX21tX2FzeW5jX3RlYXJkb3duX3F1ZXVlKG1tLCByc3MpO1xuK1x0aWYgKGxsaXN0X2FkZChcdTAwMjZtbS1cdTAwM2Vhc3luY19yZWFwX25vZGUsIFx1MDAyNm1tX3JlYXBlcl9saXN0KSlcbitcdFx0d2FrZV91cChcdTAwMjZtbV9yZWFwZXJfd2FpdCk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgbW1fcmVhcGVyKHZvaWQgKnVudXNlZClcbit7XG4rXHRzZXRfZnJlZXphYmxlKCk7XG4rXHR3aGlsZSAodHJ1ZSkge1xuK1x0XHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqYmF0Y2g7XG4rXHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCAqbjtcbitcbitcdFx0d2FpdF9ldmVudF9mcmVlemFibGUobW1fcmVhcGVyX3dhaXQsICFsbGlzdF9lbXB0eShcdTAwMjZtbV9yZWFwZXJfbGlzdCkpO1xuK1x0XHRiYXRjaCA9IGxsaXN0X2RlbF9hbGwoXHUwMDI2bW1fcmVhcGVyX2xpc3QpO1xuK1x0XHRsbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG1tLCBuLCBiYXRjaCwgYXN5bmNfcmVhcF9ub2RlKSB7XG4rXHRcdFx0dW5zaWduZWQgbG9uZyBwYWdlcyA9IG1tLVx1MDAzZWFzeW5jX3JlYXBfcnNzO1xuK1x0XHRcdHVuc2lnbmVkIGxvbmcgbGl2ZSA9IGdldF9tbV9yc3MobW0pO1xuK1xuK1x0XHRcdHRyYWNlX21tX2FzeW5jX3RlYXJkb3duX3JlYXAobW0sIHBhZ2VzLCBsaXZlKTtcbitcbitcdFx0XHRfX21tcHV0KG1tKTsgLyogbWF5IGZyZWUgbW0gdmlhIG1tZHJvcCAqL1xuK1x0XHRcdGF0b21pY19sb25nX3N1YihwYWdlcywgXHUwMDI2bW1fcmVhcGVyX3BlbmRpbmdfcGFnZXMpO1xuK1x0XHRcdGNvbmRfcmVzY2hlZCgpO1xuK1x0XHRcdHRyeV90b19mcmVlemUoKTtcbitcdFx0fVxuK1x0fVxuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3ZvaWQgbW1wdXRfZXhpdChzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbit7XG4rXHRtaWdodF9zbGVlcCgpO1xuK1x0LypcbitcdCAqIEZ1bGx5IG9yZGVyZWQgUk1XOiBjb21iaW5lZCB3aXRoIGV4aXRfbW0oKSAob3IgZXhlY19tbWFwKCksIHRoZVxuK1x0ICogb3RoZXIgcGF0aCB0aGF0IHNoZWRzIC1cdTAwM2VtbSkgY2xlYXJpbmcgLVx1MDAzZW1tIHVuZGVyIHRhc2tfbG9jaygpIGJlZm9yZVxuK1x0ICogdGhpcyBjYWxsLCBpdCBndWFyYW50ZWVzIE1NRl9PT01fVEFSR0VURUQgc2V0IGF0IGFueSBtYXJrIHNpdGUgaXNcbitcdCAqIHZpc2libGUgaGVyZSAtLSBzZWUgbWFya19vb21fdmljdGltKCkuIEFueSBuZXcgY2FsbGVyIG9mXG4rXHQgKiBtbXB1dF9leGl0KCkgb3V0c2lkZSBleGl0X21tKCkgbXVzdCByZS12ZXJpZnkgdGhhdCBhcmd1bWVudC5cbitcdCAqL1xuK1x0aWYgKCFhdG9taWNfZGVjX2FuZF90ZXN0KFx1MDAyNm1tLVx1MDAzZW1tX3VzZXJzKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2YXN5bmNfbW1fdGVhcmRvd25fa2V5KSkge1xuK1x0XHR1bnNpZ25lZCBsb25nIHJzcyA9IGdldF9tbV9yc3MobW0pO1xuK1xuK1x0XHRpZiAoYXN5bmNfbW1fdGVhcmRvd25fZWxpZ2libGUobW0sIHJzcykpIHtcbitcdFx0XHQvKlxuK1x0XHRcdCAqIGV4aXRfYWlvKCkgY2FuIGJsb2NrIGluZGVmaW5pdGVseS4gUnVuIGl0IGhlcmUgc28gYSBzdHVja1xuK1x0XHRcdCAqIEFJTyBvbmx5IGhhbmdzIHRoaXMgdGFzayAoc2FtZSBhcyBob3cgaXQgd291bGQgaGFwcGVuIGluXG4rXHRcdFx0ICogY2FzZSBvZiBzeW5jaHJvbm91cyBtbXB1dCgpKSBpbnN0ZWFkIG9mIHN0cmFuZGluZyBldmVyeVxuK1x0XHRcdCAqIHRlYXJkb3duIHF1ZXVlZCBiZWhpbmQgdGhpcyBtbVxuK1x0XHRcdCAqL1xuK1x0XHRcdGV4aXRfYWlvKG1tKTtcbitcbitcdFx0XHRpZiAoYXN5bmNfbW1fdGVhcmRvd25fcmVzZXJ2ZShyc3MpKSB7XG4rXHRcdFx0XHRtbS1cdTAwM2Vhc3luY19yZWFwX3JzcyA9IHJzcztcbitcdFx0XHRcdGFzeW5jX21tX3RlYXJkb3duX3F1ZXVlKG1tLCByc3MpO1xuK1x0XHRcdFx0cmV0dXJuO1xuK1x0XHRcdH1cbitcdFx0XHRjb3VudF92bV9ldmVudChBU1lOQ19NTV9URUFSRE9XTl9SRUpFQ1RFRCk7XG4rXHRcdH1cbitcdH1cbitcbitcdGNvdW50X3ZtX2V2ZW50KEFTWU5DX01NX1RFQVJET1dOX1NZTkMpO1xuK1x0X19tbXB1dChtbSk7XG4rfVxuK1xuKyNpZmRlZiBDT05GSUdfU1lTQ1RMXG4rc3RhdGljIGludCBhc3luY19tbV90ZWFyZG93bl9lbmFibGVkX2hhbmRsZXIoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsXG4rXHRcdFx0XHRcdCAgICAgaW50IHdyaXRlLCB2b2lkICpidWZmZXIsXG4rXHRcdFx0XHRcdCAgICAgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpXG4re1xuK1x0aW50IHJldDtcbitcbitcdC8qXG4rXHQgKiBTZXJpYWxpemUgY29uY3VycmVudCB3cml0ZXJzIHNvIHRoZSBzdGF0aWMga2V5IHN0YXRlIGFsd2F5cyBtYXRjaGVzXG4rXHQgKiB0aGUgbGFzdCB2YWx1ZSB3cml0dGVuIHRvIHRoZSB2YXJpYWJsZS5cbitcdCAqL1xuK1x0Z3VhcmQobXV0ZXgpKFx1MDAyNmFzeW5jX21tX3RlYXJkb3duX2xvY2spO1xuK1xuK1x0cmV0ID0gcHJvY19kb3U4dmVjX21pbm1heCh0YWJsZSwgd3JpdGUsIGJ1ZmZlciwgbGVucCwgcHBvcyk7XG4rXHRpZiAocmV0IHx8ICF3cml0ZSlcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGlmIChzeXNjdGxfYXN5bmNfbW1fdGVhcmRvd25fZW5hYmxlZClcbitcdFx0c3RhdGljX2JyYW5jaF9lbmFibGUoXHUwMDI2YXN5bmNfbW1fdGVhcmRvd25fa2V5KTtcbitcdGVsc2VcbitcdFx0c3RhdGljX2JyYW5jaF9kaXNhYmxlKFx1MDAyNmFzeW5jX21tX3RlYXJkb3duX2tleSk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgYXN5bmNfbW1fdGVhcmRvd25fdGFibGVbXSA9IHtcbitcdHtcbitcdFx0LnByb2NuYW1lXHQ9IFwiYXN5bmNfbW1fdGVhcmRvd25cIixcbitcdFx0LmRhdGFcdFx0PSBcdTAwMjZzeXNjdGxfYXN5bmNfbW1fdGVhcmRvd25fZW5hYmxlZCxcbitcdFx0Lm1heGxlblx0XHQ9IHNpemVvZih1OCksXG4rXHRcdC5tb2RlXHRcdD0gMDY0NCxcbitcdFx0LnByb2NfaGFuZGxlclx0PSBhc3luY19tbV90ZWFyZG93bl9lbmFibGVkX2hhbmRsZXIsXG4rXHRcdC5leHRyYTFcdFx0PSBTWVNDVExfWkVSTyxcbitcdFx0LmV4dHJhMlx0XHQ9IFNZU0NUTF9PTkUsXG4rXHR9LFxuK1x0e1xuK1x0XHQucHJvY25hbWVcdD0gXCJhc3luY19tbV90ZWFyZG93bl90aHJlc2hfcGFnZXNcIixcbitcdFx0LmRhdGFcdFx0PSBcdTAwMjZzeXNjdGxfYXN5bmNfbW1fdGVhcmRvd25fdGhyZXNoX3BhZ2VzLFxuK1x0XHQubWF4bGVuXHRcdD0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLFxuK1x0XHQubW9kZVx0XHQ9IDA2NDQsXG4rXHRcdC5wcm9jX2hhbmRsZXJcdD0gcHJvY19kb3Vsb25ndmVjX21pbm1heCxcbitcdH0sXG4rXHR7XG4rXHRcdC5wcm9jbmFtZVx0PSBcImFzeW5jX21tX3RlYXJkb3duX21heF9wZW5kaW5nX3BhZ2VzXCIsXG4rXHRcdC5kYXRhXHRcdD0gXHUwMDI2c3lzY3RsX2FzeW5jX21tX3RlYXJkb3duX21heF9wZW5kaW5nX3BhZ2VzLFxuK1x0XHQubWF4bGVuXHRcdD0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLFxuK1x0XHQubW9kZVx0XHQ9IDA2NDQsXG4rXHRcdC5wcm9jX2hhbmRsZXJcdD0gcHJvY19kb3Vsb25ndmVjX21pbm1heCxcbitcdH0sXG4rfTtcbisjZW5kaWYgLyogQ09ORklHX1NZU0NUTCAqL1xuK1xuK3N0YXRpYyBpbnQgX19pbml0IG1tX3JlYXBlcl9pbml0KHZvaWQpXG4re1xuK1x0c3RydWN0IHRhc2tfc3RydWN0ICp0aDtcbitcbitcdHRoID0ga3RocmVhZF9jcmVhdGUobW1fcmVhcGVyLCBOVUxMLCBcIm1tX3JlYXBlclwiKTtcbitcdGlmIChJU19FUlIodGgpKSB7XG4rXHRcdHByX2VycihcIm1tX3JlYXBlcjogZmFpbGVkIHRvIHN0YXJ0IGt0aHJlYWQ6ICVsZFxcblwiLCBQVFJfRVJSKHRoKSk7XG4rXHRcdHJldHVybiBQVFJfRVJSKHRoKTtcbitcdH1cbitcdHNldF91c2VyX25pY2UodGgsIDE5KTsgLyogbWluaW1pemUgY29tcGV0aXRpb24gd2l0aCBvdGhlciBmYWlyIGNsYXNzIHRhc2tzICovXG4rXHRrdGhyZWFkX2FmZmluZV9wcmVmZXJyZWQodGgsIGhvdXNla2VlcGluZ19jcHVtYXNrKEhLX1RZUEVfS1RIUkVBRCkpO1xuK1x0c3lzY3RsX2FzeW5jX21tX3RlYXJkb3duX3RocmVzaF9wYWdlcyAgICAgID0gU1pfNjRNIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuK1x0c3lzY3RsX2FzeW5jX21tX3RlYXJkb3duX21heF9wZW5kaW5nX3BhZ2VzID0gdG90YWxyYW1fcGFnZXMoKSAvIDQ7ICAvKiBUT0RPOiBwbGFjZWhvbGRlciAqL1xuK1x0d2FrZV91cF9wcm9jZXNzKHRoKTtcbisjaWZkZWYgQ09ORklHX1NZU0NUTFxuK1x0cmVnaXN0ZXJfc3lzY3RsX2luaXQoXCJ2bVwiLCBhc3luY19tbV90ZWFyZG93bl90YWJsZSk7XG4rI2VuZGlmXG4rXHRyZXR1cm4gMDtcbit9XG4rc3Vic3lzX2luaXRjYWxsKG1tX3JlYXBlcl9pbml0KTtcbisjZW5kaWZcbmRpZmYgLS1naXQgYS9tbS9LY29uZmlnIGIvbW0vS2NvbmZpZ1xuaW5kZXggYzUyYWI2YWZjYjE1OTYuLmE5ZDkyNTQwNjY1M2Y4IDEwMDY0NFxuLS0tIGEvbW0vS2NvbmZpZ1xuKysrIGIvbW0vS2NvbmZpZ1xuQEAgLTE1MDAsNiArMTUwMCwxOCBAQCBjb25maWcgTEFaWV9NTVVfTU9ERV9LVU5JVF9URVNUXG4gXG4gXHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gXG4rY29uZmlnIEFTWU5DX01NX1RFQVJET1dOXG4rXHRib29sIFwiQXN5bmMgb2ZmLUNQVSBhZGRyZXNzIHNwYWNlIHRlYXJkb3duIG9uIGV4aXRcIlxuK1x0ZGVwZW5kcyBvbiBNTVVcbitcdGRlZmF1bHQgblxuK1x0aGVscFxuK1x0ICBEZWZlciB0aGUgYWRkcmVzcyBzcGFjZSB0ZWFyZG93biAoZXhpdF9tbWFwKCkpIG9mIGxhcmdlIGV4aXRpbmcgcHJvY2Vzc2VzXG4rXHQgIHRvIGEga2VybmVsIHRocmVhZCBpbnN0ZWFkIG9mIHJ1bm5pbmcgaXQgb24gdGhlIGV4aXRpbmcgQ1BVLiBUaGUgZmVhdHVyZVxuK1x0ICBpcyBvZmYgYnkgZGVmYXVsdCBhbmQgaXMgZW5hYmxlZCBhdCBydW50aW1lIHZpYSB0aGUgdm0uYXN5bmNfbW1fdGVhcmRvd25cbitcdCAgc3lzY3RsLlxuK1xuK1x0ICBJZiB1bnN1cmUsIHNheSBOLlxuK1xuIHNvdXJjZSBcIm1tL2RhbW9uL0tjb25maWdcIlxuIFxuIGVuZG1lbnVcbmRpZmYgLS1naXQgYS9tbS9vb21fa2lsbC5jIGIvbW0vb29tX2tpbGwuY1xuaW5kZXggNWYzNzJmNmUyNmZhMzIuLmI1NDkwZDFiMWJkMjYxIDEwMDY0NFxuLS0tIGEvbW0vb29tX2tpbGwuY1xuKysrIGIvbW0vb29tX2tpbGwuY1xuQEAgLTc1NCw2ICs3NTQsNDAgQEAgc3RhdGljIHZvaWQgbWFya19vb21fdmljdGltKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxuIFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSB0c2stXHUwMDNlbW07XG4gXG4gXHRXQVJOX09OKG9vbV9raWxsZXJfZGlzYWJsZWQpO1xuK1xuK1x0LypcbitcdCAqIE1hcmsgdGhlIG1tIGl0c2VsZiwgbm90IGp1c3QgdGhpcyB0YXNrL3NpZ25hbCwgYXMgYW4gT09NIHRhcmdldCxcbitcdCAqIHNvIHRoZSBkZWZlcnJlZC10ZWFyZG93biBwYXRoIGNhbiB0ZXN0IGl0IGZyb20gdGhlIG1tIGFsb25lLiBTZXRcbitcdCAqIGFoZWFkIG9mIHRoZSBUSUZfTUVNRElFIHRlc3QtYW5kLXNldCBiZWxvdyBzbyB0aGF0IGV2ZXJ5IGNhbGxcbitcdCAqIG1hcmtzIHRoZSBtbSwgaW5jbHVkaW5nIGEgcmVwZWF0IG1hcmsgb24gYSB0YXNrIHRoYXQgaXMgYWxyZWFkeVxuK1x0ICogVElGX01FTURJRS5cbitcdCAqXG4rXHQgKiBUaGlzIGlzIHJlbGlhYmx5IHZpc2libGUgdG8gd2hpY2hldmVyIHRocmVhZCBlbmRzIHVwIGRyb3BwaW5nIHRoZVxuK1x0ICogbGFzdCByZWZlcmVuY2UgaW4gbW1wdXRfZXhpdCgpOiBtYXJraW5nIGFuZCBxdWV1aW5nIGZvciBhc3luY1xuK1x0ICogdGVhcmRvd24gY2FuIG5ldmVyIG92ZXJsYXAgaW4gdGltZS4gRXZlcnkgY2FsbGVyIHJlYWNoZXMgdGhpcyB3aXRoXG4rXHQgKiB0c2stXHUwMDNlbW0gc3RpbGwgc2V0IC0tIGVpdGhlciB0c2sgaXMgY3VycmVudCwgbWFya2luZyBpdHNlbGYgaW5cbitcdCAqIHByb2dyYW0gb3JkZXIsIG9yIHRzayBpcyB0YXNrX2xvY2soKWVkIGJ5IHRoZSBjYWxsZXIgKHRoZVxuK1x0ICogdGFza193aWxsX2ZyZWVfbWVtKCkgZmFzdCBwYXRoIGluIG9vbV9raWxsX3Byb2Nlc3MoKSkgLS0gd2hpbGVcbitcdCAqIG1tcHV0X2V4aXQoKSwgdGhlIG9ubHkgcGF0aCB0aGF0IHF1ZXVlcyBmb3IgdGVhcmRvd24sIGlzIHJlYWNoZWRcbitcdCAqIG9ubHkgYWZ0ZXIgbW1fdXNlcnMgaGl0cyAwLCB3aGljaCByZXF1aXJlcyB0c2sncyBvd24gZXhpdF9tbSgpIChvclxuK1x0ICogZXhlY19tbWFwKCksIHRoZSBvdGhlciBwYXRoIHRoYXQgc2hlZHMgLVx1MDAzZW1tKSB0byBoYXZlIGFscmVhZHlcbitcdCAqIGNsZWFyZWQgLVx1MDAzZW1tIHVuZGVyIHRoYXQgc2FtZSB0YXNrX2xvY2soKS4gUHJvZ3JhbSBvcmRlciBvclxuK1x0ICogdGFza19sb2NrKCkgcmVsZWFzZS9hY3F1aXJlIHRoZXJlZm9yZSBvcmRlcnMgdGhpcyBzdG9yZSBiZWZvcmVcbitcdCAqIHRzaydzIG93biBldmVudHVhbCBtbXB1dF9leGl0KCkuXG4rXHQgKlxuK1x0ICogSWYgYSBkaWZmZXJlbnQgQ0xPTkVfVk0gc2hhcmVyIHBlcmZvcm1zIHRoZSBhY3R1YWwgZmluYWwgZGVjcmVtZW50XG4rXHQgKiBpbnN0ZWFkLCB0aGUgb3JkZXJpbmcgZG9lcyBub3QgY29tZSBmcm9tIHRoaXMgc3RvcmU6XG4rXHQgKiBtbV9mbGFnc19zZXQoKSBpcyBzZXRfYml0KCksIGEgbm9uLXZhbHVlLXJldHVybmluZyBSTVcsIHNvIGl0IGlzXG4rXHQgKiB1bm9yZGVyZWQgYW5kIGNvbnRyaWJ1dGVzIG5vdGhpbmcgb24gaXRzIG93bi4gSXQgY29tZXMgZnJvbSB0aGVcbitcdCAqIG1hcmtpbmcgdGFzaydzIG93biBhdG9taWNfZGVjX2FuZF90ZXN0KCksIGEgdmFsdWUtcmV0dXJuaW5nIFJNV1xuK1x0ICogYW5kIHRoZXJlZm9yZSBmdWxseSBvcmRlcmVkIChhbiBzbXBfbWIoKSBiZWZvcmUgYW5kIGFmdGVyKS5cbitcdCAqIERlY3JlbWVudHMgYXJlIHRvdGFsbHkgb3JkZXJlZCBpbiBtbV91c2VycycgbW9kaWZpY2F0aW9uIG9yZGVyXG4rXHQgKiB3aXRoIHRoZSB6ZXJvaW5nIG9uZSBsYXN0LCBzbyB0aGUgZ2VuZXJhbCBiYXJyaWVycyBvbiBib3RoIHNpZGVzXG4rXHQgKiBtYWtlIHRoaXMgc3RvcmUgdmlzaWJsZSB0byB3aGljaGV2ZXIgdGhyZWFkIHBlcmZvcm1zIGl0LlxuK1x0ICovXG4rXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQVNZTkNfTU1fVEVBUkRPV04pKVxuK1x0XHRtbV9mbGFnc19zZXQoTU1GX09PTV9UQVJHRVRFRCwgbW0pO1xuK1xuIFx0LyogT09NIGtpbGxlciBtaWdodCByYWNlIHdpdGggbWVtY2cgT09NICovXG4gXHRpZiAodGVzdF9hbmRfc2V0X3Rza190aHJlYWRfZmxhZyh0c2ssIFRJRl9NRU1ESUUpKVxuIFx0XHRyZXR1cm47XG5AQCAtOTMxLDYgKzk2NSwzMyBAQCBzdGF0aWMgdm9pZCBfX29vbV9raWxsX3Byb2Nlc3Moc3RydWN0IHRhc2tfc3RydWN0ICp2aWN0aW0sIGNvbnN0IGNoYXIgKm1lc3NhZ2UpXG4gXHRtbSA9IHZpY3RpbS1cdTAwM2VtbTtcbiBcdG1tZ3JhYihtbSk7XG4gXG4rXHQvKlxuK1x0ICogU2V0IHRoaXMgYmVmb3JlIGFueSBTSUdLSUxMIGZvciB0aGlzIGtpbGwgZXZlbnQgZ29lcyBvdXQgYmVsb3csXG4rXHQgKiB3aGlsZSB0YXNrX2xvY2sodmljdGltKSAoaGVsZCBzaW5jZSBmaW5kX2xvY2tfdGFza19tbSgpIGFib3ZlKSBpc1xuK1x0ICogc3RpbGwgaGVsZC4gVGhpcyBpcyByZWxpYWJseSB2aXNpYmxlIHRvIHdoaWNoZXZlciB0aHJlYWQgZW5kcyB1cFxuK1x0ICogcnVubmluZyBtbXB1dF9leGl0KCkgYW5kIGRyb3BwaW5nIHRoZSBsYXN0IHJlZmVyZW5jZSB0byB0aGlzIG1tIC0tXG4rXHQgKiB2aWN0aW0gaXRzZWxmLCBhIHNpYmxpbmcsIG9yIGEgQ0xPTkVfVk0gc2hhcmVyIGluIGFub3RoZXIgdGhyZWFkXG4rXHQgKiBncm91cCAod2hpY2ggbWFya19vb21fdmljdGltKCkgbmV2ZXIgbWFya3MsIGJ1dCB3aGljaCBzdGlsbFxuK1x0ICogb2JzZXJ2ZXMgdGhpcyBzdG9yZSBvbiB0aGUgc2hhcmVkIG1tKS4gTWFya2luZyBhbmQgcXVldWluZyBmb3JcbitcdCAqIGFzeW5jIHRlYXJkb3duIGNhbiBuZXZlciBvdmVybGFwOiBtbXB1dF9leGl0KCkgaXMgcmVhY2hlZCBvbmx5XG4rXHQgKiBhZnRlciBtbV91c2VycyBoaXRzIDAsIGFuZCB0aGF0IHJlcXVpcmVzIHZpY3RpbSdzIG93biBleGl0X21tKClcbitcdCAqIChvciBleGVjX21tYXAoKSwgdGhlIG90aGVyIHBhdGggdGhhdCBzaGVkcyAtXHUwMDNlbW0pIHRvIGhhdmUgY2xlYXJlZFxuK1x0ICogLVx1MDAzZW1tIHVuZGVyIHRoaXMgc2FtZSB0YXNrX2xvY2soKSBmaXJzdCwgd2hpY2ggcmVsZWFzZS9hY3F1aXJlXG4rXHQgKiBvcmRlcnMgYWZ0ZXIgdGhlIHN0b3JlIGFib3ZlLlxuK1x0ICpcbitcdCAqIElmIHNvbWUgb3RoZXIgc2hhcmVyIHBlcmZvcm1zIHRoZSBhY3R1YWwgZmluYWwgZGVjcmVtZW50IGluc3RlYWQsXG4rXHQgKiB0aGUgb3JkZXJpbmcgZG9lcyBub3QgY29tZSBmcm9tIHRoaXMgc3RvcmU6IG1tX2ZsYWdzX3NldCgpIGlzXG4rXHQgKiBzZXRfYml0KCksIGEgbm9uLXZhbHVlLXJldHVybmluZyBSTVcsIHNvIGl0IGlzIHVub3JkZXJlZCBhbmRcbitcdCAqIGNvbnRyaWJ1dGVzIG5vdGhpbmcgb24gaXRzIG93bi4gSXQgY29tZXMgZnJvbSB0aGUgbWFya2luZyB0YXNrJ3NcbitcdCAqIG93biBhdG9taWNfZGVjX2FuZF90ZXN0KCksIGEgdmFsdWUtcmV0dXJuaW5nIFJNVyBhbmQgdGhlcmVmb3JlXG4rXHQgKiBmdWxseSBvcmRlcmVkIChhbiBzbXBfbWIoKSBiZWZvcmUgYW5kIGFmdGVyKS4gRGVjcmVtZW50cyBhcmVcbitcdCAqIHRvdGFsbHkgb3JkZXJlZCBpbiBtbV91c2VycycgbW9kaWZpY2F0aW9uIG9yZGVyIHdpdGggdGhlIHplcm9pbmdcbitcdCAqIG9uZSBsYXN0LCBzbyB0aGUgZ2VuZXJhbCBiYXJyaWVycyBvbiBib3RoIHNpZGVzIG1ha2UgdGhpcyBzdG9yZVxuK1x0ICogdmlzaWJsZSB0byB3aGljaGV2ZXIgdGhyZWFkIHBlcmZvcm1zIGl0LlxuK1x0ICovXG4rXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQVNZTkNfTU1fVEVBUkRPV04pKVxuK1x0XHRtbV9mbGFnc19zZXQoTU1GX09PTV9UQVJHRVRFRCwgbW0pO1xuK1xuIFx0LyogUmFpc2UgZXZlbnQgYmVmb3JlIHNlbmRpbmcgc2lnbmFsOiB0YXNrIHJlYXBlciBtdXN0IHNlZSB0aGlzICovXG4gXHRjb3VudF92bV9ldmVudChPT01fS0lMTCk7XG4gXHRtZW1jZ19tZW1vcnlfZXZlbnRfbW0obW0sIE1FTUNHX09PTV9LSUxMKTtcbmRpZmYgLS1naXQgYS9tbS92bXN0YXQuYyBiL21tL3Ztc3RhdC5jXG5pbmRleCA0ZTI2ZTVmZDY2NjYyNi4uZTNmZjMwMDI3YzI0ZWQgMTAwNjQ0XG4tLS0gYS9tbS92bXN0YXQuY1xuKysrIGIvbW0vdm1zdGF0LmNcbkBAIC0xNDk0LDYgKzE0OTQsMTEgQEAgY29uc3QgY2hhciAqIGNvbnN0IHZtc3RhdF90ZXh0W10gPSB7XG4gXHRbSShOUlNXUElOKV1cdFx0XHRcdD0gXCJucnN3cGluXCIsXG4gXHRbSShOUlNXUE9VVCldXHRcdFx0XHQ9IFwibnJzd3BvdXRcIixcbiAjZW5kaWYgLyogQ09ORklHX1NXQVAgKi9cbisjaWZkZWYgQ09ORklHX0FTWU5DX01NX1RFQVJET1dOXG4rXHRbSShBU1lOQ19NTV9URUFSRE9XTl9RVUVVRUQpXVx0PSBcImFzeW5jX21tX3RlYXJkb3duX3F1ZXVlZFwiLFxuK1x0W0koQVNZTkNfTU1fVEVBUkRPV05fU1lOQyldXHRcdD0gXCJhc3luY19tbV90ZWFyZG93bl9zeW5jXCIsXG4rXHRbSShBU1lOQ19NTV9URUFSRE9XTl9SRUpFQ1RFRCldXHQ9IFwiYXN5bmNfbW1fdGVhcmRvd25fcmVqZWN0ZWRcIixcbisjZW5kaWZcbiAjdW5kZWYgSVxuICNlbmRpZiAvKiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlMgKi9cbiB9O1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTlUMTk6NDE6NDEuMDM4MTg5ODE5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTMwMzc1NjAwNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBFdmFsdWF0aW9uOiBBc3luYyBNTSBUZWFyZG93bioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gV2UgaGF2ZSBhIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2luZyBgQ09ORklHX0FTWU5DX01NX1RFQVJET1dOYC4gVGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBjaGFuZ2UuIEl0J3MgZGVmZXJyaW5nIHRoZSBhZGRyZXNzIHNwYWNlIHRlYXJkb3duIChgZXhpdF9tbWFwKClgKSBvZiBleGl0aW5nIHByb2Nlc3NlcyB0byBhIGtlcm5lbCB0aHJlYWQsIGBtbV9yZWFwZXJgLiBUaGlzIGZ1bmRhbWVudGFsbHkgYWx0ZXJzIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgcHJvY2VzcyBleGl0IGFuZCBtZW1vcnkgbWFuYWdlbWVudC4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCAqbmVlZHMqIGZ1enppbmcuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgYWZmZWN0ZWQuIGBtbXB1dF9leGl0YCwgYG1tX3JlYXBlcmAsIGBhc3luY19tbV90ZWFyZG93bl9xdWV1ZWAsIGBhc3luY19tbV90ZWFyZG93bl9yZXNlcnZlYCwgYW5kIGBhc3luY19tbV90ZWFyZG93bl9lbGlnaWJsZWAgaW1tZWRpYXRlbHkgc3RhbmQgb3V0LiBUaG9zZSBhcmUgdGhlIGtleSBwaWVjZXMgb2YgdGhlIG5ldyBsb2dpYy4gVGhlIHBhdGNoIGFsc28gaW50cm9kdWNlcyBhIHN5c2N0bCwgYHZtLmFzeW5jX21tX3RlYXJkb3duYCwgd2hpY2ggaXMgaW1wb3J0YW50IGZvciBlbmFibGluZyB0aGUgZmVhdHVyZSBhdCBydW50aW1lLCBhbmQgb2YgY291cnNlLCB0aGUgYENPTkZJR19BU1lOQ19NTV9URUFSRE9XTmAgY29uZmlnIG9wdGlvbi5cblxuVGhlIGNvZGUgbW9kaWZpY2F0aW9ucyBhcmUgaW4gYGtlcm5lbC9mb3JrLmNgLCBga2VybmVsL2V4aXQuY2AsIGFuZCBgbW0vb29tX2tpbGwuY2AuIExldCdzIGVuc3VyZSB0aGUgcmVsZXZhbnQgY29kZSBwYXRocyBjYW4gYmUgZXhlY3V0ZWQ7IHRoYXQgaW5jbHVkZXMgdmVyaWZ5aW5nIHRoZSBzeXNjdGwgYW5kIGNvbmZpZyBvcHRpb24uXG5cbkEgcXVpY2sgcmV2aWV34oCmIHRoZSBjb25maWcgaXMgYEFTWU5DX01NX1RFQVJET1dOYC4gT2theSwgZ29vZC4gTm93LCBhYm91dCB0aG9zZSBmdW5jdGlvbnMuIEkgbmVlZCB0byBiZSBjYXJlZnVsLiBXaGlsZSBgbW1wdXRfZXhpdGAgaXMgZGlyZWN0bHkgaW52b2x2ZWQsIGl0J3MgY2FsbGVkIGZyb20gYGV4aXRfbW1gLCB3aGljaCBpcyBhIGZyZXF1ZW50bHkgYWNjZXNzZWQgcGF0aC4gVGhlIG5ldyBsb2dpYyBpcyBpbiBgbW1wdXRfZXhpdGAgaXRzZWxmIHRob3VnaCwgc28gbGV0J3MgaW5jbHVkZSBpdC4gYG1tX3JlYXBlcmAgaXMgdGhlIGt0aHJlYWQsIGl0J3MgZGVmaW5pdGVseSBvbiB0aGUgbGlzdC4gYGFzeW5jX21tX3RlYXJkb3duX3F1ZXVlYCwgYGFzeW5jX21tX3RlYXJkb3duX3Jlc2VydmVgLCBhbmQgYGFzeW5jX21tX3RlYXJkb3duX2VsaWdpYmxlYCBzZWVtIHRvIGJlIHRoZSBjb3JlIG9mIHRoZSBhc3luYyBsb2dpYy5cblxuQWxyaWdodCwgdGhlIHBsYW4gaXMgdG8gY2FsbCBgc2V0LXJlc3VsdHNgIHdpdGg6XG5cbiogICAqKldvcnRoRnV6emluZyoqOiBgdHJ1ZWAgKEFic29sdXRlbHkuIFRoaXMgaXMgaW1wb3J0YW50LilcbiogICAqKkZvY3VzU3ltYm9scyoqOiBgW1wibW1fcmVhcGVyXCIsIFwiYXN5bmNfbW1fdGVhcmRvd25fcXVldWVcIiwgXCJhc3luY19tbV90ZWFyZG93bl9yZXNlcnZlXCIsIFwiYXN5bmNfbW1fdGVhcmRvd25fZWxpZ2libGVcIiwgXCJtbXB1dF9leGl0XCJdYCAoSSdtIGxlYW5pbmcgdG93YXJkcyBgbW1wdXRfZXhpdGAgYXMgd2VsbCBiZWNhdXNlIGl0J3Mgd2hlcmUgdGhlIG5ldyBsb2dpYyBpbnRlcnNlY3RzIHdpdGggdGhlIGhvdCBwYXRoKVxuKiAgICoqRW5hYmxlQ29uZmlncyoqOiBgW1wiQVNZTkNfTU1fVEVBUkRPV05cIl1gIChUaGlzIGlzIHRoZSBjcml0aWNhbCBjb25maWcgdG8gZW5hYmxlIHRoZSBmZWF0dXJlLilcbiogICAqKlJlYXNvbmluZyoqOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZlYXR1cmUgdG8gYXN5bmNocm9ub3VzbHkgdGVhciBkb3duIHRoZSBhZGRyZXNzIHNwYWNlIG9mIGV4aXRpbmcgcHJvY2Vzc2VzIHZpYSBhIGRlZGljYXRlZCBrZXJuZWwgdGhyZWFkIChgbW1fcmVhcGVyYCkuIFRoaXMgbW9kaWZpZXMgY29yZSBwcm9jZXNzIGV4aXQgYW5kIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLCB3aGljaCBpcyBoaWdobHkgZnVuY3Rpb25hbCBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIlxuXG5JJ20gZG91YmxlLWNoZWNraW5nIHRoZSBjb2RlIGFnYWluIHRvIGJlIHRob3JvdWdoLiBJdCdzIGVhc3kgdG8gbWlzcyBzb21ldGhpbmcgd2hlbiB5b3UncmUgZm9jdXNpbmcgb24gdGhlIGNyaXRpY2FsIHBhdGguXG5cbldhaXQgYSBzZWNvbmTigKYgYG1tcHV0X2V4aXRgIGlzIGludm9rZWQgb24gZXZlcnkgdGFzayBleGl0LiBJIHdhbnQgdG8gYXZvaWQgaG90IHBhdGhzLCBidXQgYG1tcHV0X2V4aXRgIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgdGhlIG5ldyBsb2dpYy4gYG1tX3JlYXBlcmAsIGBhc3luY19tbV90ZWFyZG93bl9xdWV1ZWAsIGBhc3luY19tbV90ZWFyZG93bl9yZXNlcnZlYCwgYW5kIGBhc3luY19tbV90ZWFyZG93bl9lbGlnaWJsZWAgc2VlbXMgbGlrZSBhIGJldHRlciBmb2N1cywgbGV0J3Mga2VlcCBpdCB0aWdodCBvbiB0aGUgbmV3IGFkZGl0aW9ucy5cblxuT25lIG1vcmUgcmV2aWV3LiBObyBvdGhlciBjcnVjaWFsIGNvbmZpZyBkZXBlbmRlbmNpZXMuIE9rYXksIGl0IGxvb2tzIGxpa2UgYEFTWU5DX01NX1RFQVJET1dOYCBpcyB0aGUgbWFpbiBvbmUuXG5cbkxldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODgxMywiT3V0cHV0VG9rZW5zIjoxMzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTI1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTlUMTk6NDE6NTQuMDc1NzUzODc0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTA1MTI4NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFTWU5DX01NX1RFQVJET1dOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibW1fcmVhcGVyXCIsXG4gICAgXCJhc3luY19tbV90ZWFyZG93bl9xdWV1ZVwiLFxuICAgIFwiYXN5bmNfbW1fdGVhcmRvd25fcmVzZXJ2ZVwiLFxuICAgIFwiYXN5bmNfbW1fdGVhcmRvd25fZWxpZ2libGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZlYXR1cmUgdG8gYXN5bmNocm9ub3VzbHkgdGVhciBkb3duIHRoZSBhZGRyZXNzIHNwYWNlIG9mIGV4aXRpbmcgcHJvY2Vzc2VzIHZpYSBhIGRlZGljYXRlZCBrZXJuZWwgdGhyZWFkIChtbV9yZWFwZXIpLiBUaGlzIG1vZGlmaWVzIGNvcmUgcHJvY2VzcyBleGl0IGFuZCBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYywgd2hpY2ggaXMgaGlnaGx5IGZ1bmN0aW9uYWwgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQVNZTkNfTU1fVEVBUkRPV05cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtbV9yZWFwZXJcIixcbiAgICBcImFzeW5jX21tX3RlYXJkb3duX3F1ZXVlXCIsXG4gICAgXCJhc3luY19tbV90ZWFyZG93bl9yZXNlcnZlXCIsXG4gICAgXCJhc3luY19tbV90ZWFyZG93bl9lbGlnaWJsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmVhdHVyZSB0byBhc3luY2hyb25vdXNseSB0ZWFyIGRvd24gdGhlIGFkZHJlc3Mgc3BhY2Ugb2YgZXhpdGluZyBwcm9jZXNzZXMgdmlhIGEgZGVkaWNhdGVkIGtlcm5lbCB0aHJlYWQgKG1tX3JlYXBlcikuIFRoaXMgbW9kaWZpZXMgY29yZSBwcm9jZXNzIGV4aXQgYW5kIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLCB3aGljaCBpcyBoaWdobHkgZnVuY3Rpb25hbCBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflows9qwx[1] Phase: Succeeded StartedAt: 2026-07-19 19:42:06 +0000 UTC FinishedAt: 2026-07-19 19:42:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflows9qwx[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-19 19:42:06 +0000 UTC FinishedAt: 2026-07-19 19:42:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflows9qwx[2] Phase: Succeeded StartedAt: 2026-07-19 19:42:06 +0000 UTC FinishedAt: 2026-07-20 00:02:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflows9qwx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"890f8c4e827c918dac668a12eaf63180ba8a9e6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["ASYNC_MM_TEARDOWN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mm_reaper","async_mm_teardown_queue","async_mm_teardown_reserve","async_mm_teardown_eligible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"890f8c4e827c918dac668a12eaf63180ba8a9e6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["ASYNC_MM_TEARDOWN"],"series_id":"a6b57b51-6ef1-47de-84cd-8ec884cc2bd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-19 19:42:06 +0000 UTC FinishedAt: 2026-07-20 00:02:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"890f8c4e827c918dac668a12eaf63180ba8a9e6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["ASYNC_MM_TEARDOWN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mm_reaper","async_mm_teardown_queue","async_mm_teardown_reserve","async_mm_teardown_eligible"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"890f8c4e827c918dac668a12eaf63180ba8a9e6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["ASYNC_MM_TEARDOWN"],"series_id":"a6b57b51-6ef1-47de-84cd-8ec884cc2bd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflows9qwx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"890f8c4e827c918dac668a12eaf63180ba8a9e6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["ASYNC_MM_TEARDOWN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mm_reaper","async_mm_teardown_queue","async_mm_teardown_reserve","async_mm_teardown_eligible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"890f8c4e827c918dac668a12eaf63180ba8a9e6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["ASYNC_MM_TEARDOWN"],"series_id":"a6b57b51-6ef1-47de-84cd-8ec884cc2bd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-19 19:42:06 +0000 UTC FinishedAt: 2026-07-19 19:42:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflows9qwx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"890f8c4e827c918dac668a12eaf63180ba8a9e6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["ASYNC_MM_TEARDOWN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mm_reaper","async_mm_teardown_queue","async_mm_teardown_reserve","async_mm_teardown_eligible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"890f8c4e827c918dac668a12eaf63180ba8a9e6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["ASYNC_MM_TEARDOWN"],"series_id":"a6b57b51-6ef1-47de-84cd-8ec884cc2bd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-19 19:42:06 +0000 UTC FinishedAt: 2026-07-19 19:42:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"890f8c4e827c918dac668a12eaf63180ba8a9e6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["ASYNC_MM_TEARDOWN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflows9qwx/series-workflows9qwx-convert-artifact-2761716789/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows9qwx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"890f8c4e827c918dac668a12eaf63180ba8a9e6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["ASYNC_MM_TEARDOWN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mm_reaper","async_mm_teardown_queue","async_mm_teardown_reserve","async_mm_teardown_eligible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"890f8c4e827c918dac668a12eaf63180ba8a9e6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["ASYNC_MM_TEARDOWN"],"series_id":"a6b57b51-6ef1-47de-84cd-8ec884cc2bd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-19 19:42:26 +0000 UTC FinishedAt: 2026-07-19 20:27:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflows9qwx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"890f8c4e827c918dac668a12eaf63180ba8a9e6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["ASYNC_MM_TEARDOWN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mm_reaper","async_mm_teardown_queue","async_mm_teardown_reserve","async_mm_teardown_eligible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"890f8c4e827c918dac668a12eaf63180ba8a9e6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["ASYNC_MM_TEARDOWN"],"series_id":"a6b57b51-6ef1-47de-84cd-8ec884cc2bd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-19 19:42:26 +0000 UTC FinishedAt: 2026-07-19 20:27:08 +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:*360664f3-a5b2-4ec1-85e7-23c3987308fa,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-workflows9qwx/series-workflows9qwx-convert-artifact-2761716789/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": "c1349cec-f58d-4bc7-95a5-1dbb6b4e1ff5", "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-workflows9qwx/series-workflows9qwx-build-action-4194971675/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows9qwx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"890f8c4e827c918dac668a12eaf63180ba8a9e6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["ASYNC_MM_TEARDOWN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mm_reaper","async_mm_teardown_queue","async_mm_teardown_reserve","async_mm_teardown_eligible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"890f8c4e827c918dac668a12eaf63180ba8a9e6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["ASYNC_MM_TEARDOWN"],"series_id":"a6b57b51-6ef1-47de-84cd-8ec884cc2bd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-19 19:42:26 +0000 UTC FinishedAt: 2026-07-19 20:26:58 +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:*360664f3-a5b2-4ec1-85e7-23c3987308fa,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-workflows9qwx/series-workflows9qwx-convert-artifact-2761716789/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": "c1349cec-f58d-4bc7-95a5-1dbb6b4e1ff5", "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-workflows9qwx/series-workflows9qwx-build-action-4194971675/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows9qwx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"890f8c4e827c918dac668a12eaf63180ba8a9e6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["ASYNC_MM_TEARDOWN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mm_reaper","async_mm_teardown_queue","async_mm_teardown_reserve","async_mm_teardown_eligible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"890f8c4e827c918dac668a12eaf63180ba8a9e6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["ASYNC_MM_TEARDOWN"],"series_id":"a6b57b51-6ef1-47de-84cd-8ec884cc2bd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-19 20:27:08 +0000 UTC FinishedAt: 2026-07-19 20:27:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflows9qwx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"890f8c4e827c918dac668a12eaf63180ba8a9e6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["ASYNC_MM_TEARDOWN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mm_reaper","async_mm_teardown_queue","async_mm_teardown_reserve","async_mm_teardown_eligible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"890f8c4e827c918dac668a12eaf63180ba8a9e6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["ASYNC_MM_TEARDOWN"],"series_id":"a6b57b51-6ef1-47de-84cd-8ec884cc2bd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-19 20:27:08 +0000 UTC FinishedAt: 2026-07-19 20:27:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflows9qwx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"890f8c4e827c918dac668a12eaf63180ba8a9e6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["ASYNC_MM_TEARDOWN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mm_reaper","async_mm_teardown_queue","async_mm_teardown_reserve","async_mm_teardown_eligible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"890f8c4e827c918dac668a12eaf63180ba8a9e6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["ASYNC_MM_TEARDOWN"],"series_id":"a6b57b51-6ef1-47de-84cd-8ec884cc2bd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-19 20:27:08 +0000 UTC FinishedAt: 2026-07-19 20:27:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflows9qwx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"890f8c4e827c918dac668a12eaf63180ba8a9e6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["ASYNC_MM_TEARDOWN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mm_reaper","async_mm_teardown_queue","async_mm_teardown_reserve","async_mm_teardown_eligible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"890f8c4e827c918dac668a12eaf63180ba8a9e6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["ASYNC_MM_TEARDOWN"],"series_id":"a6b57b51-6ef1-47de-84cd-8ec884cc2bd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-19 20:27:08 +0000 UTC FinishedAt: 2026-07-19 20:27:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"890f8c4e827c918dac668a12eaf63180ba8a9e6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["ASYNC_MM_TEARDOWN"],"series_id":"a6b57b51-6ef1-47de-84cd-8ec884cc2bd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflows9qwx/series-workflows9qwx-convert-artifact-3932119440/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows9qwx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"890f8c4e827c918dac668a12eaf63180ba8a9e6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["ASYNC_MM_TEARDOWN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mm_reaper","async_mm_teardown_queue","async_mm_teardown_reserve","async_mm_teardown_eligible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"890f8c4e827c918dac668a12eaf63180ba8a9e6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["ASYNC_MM_TEARDOWN"],"series_id":"a6b57b51-6ef1-47de-84cd-8ec884cc2bd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-19 20:27:18 +0000 UTC FinishedAt: 2026-07-19 20:29:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflows9qwx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"890f8c4e827c918dac668a12eaf63180ba8a9e6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["ASYNC_MM_TEARDOWN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mm_reaper","async_mm_teardown_queue","async_mm_teardown_reserve","async_mm_teardown_eligible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"890f8c4e827c918dac668a12eaf63180ba8a9e6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["ASYNC_MM_TEARDOWN"],"series_id":"a6b57b51-6ef1-47de-84cd-8ec884cc2bd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-19 20:27:18 +0000 UTC FinishedAt: 2026-07-19 20:29:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c1349cec-f58d-4bc7-95a5-1dbb6b4e1ff5,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-workflows9qwx/series-workflows9qwx-build-action-4194971675/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-workflows9qwx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"890f8c4e827c918dac668a12eaf63180ba8a9e6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["ASYNC_MM_TEARDOWN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mm_reaper","async_mm_teardown_queue","async_mm_teardown_reserve","async_mm_teardown_eligible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"890f8c4e827c918dac668a12eaf63180ba8a9e6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["ASYNC_MM_TEARDOWN"],"series_id":"a6b57b51-6ef1-47de-84cd-8ec884cc2bd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-19 20:29:31 +0000 UTC FinishedAt: 2026-07-19 20:29:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflows9qwx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"890f8c4e827c918dac668a12eaf63180ba8a9e6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["ASYNC_MM_TEARDOWN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mm_reaper","async_mm_teardown_queue","async_mm_teardown_reserve","async_mm_teardown_eligible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"890f8c4e827c918dac668a12eaf63180ba8a9e6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["ASYNC_MM_TEARDOWN"],"series_id":"a6b57b51-6ef1-47de-84cd-8ec884cc2bd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-19 20:29:31 +0000 UTC FinishedAt: 2026-07-19 20:29:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflows9qwx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"890f8c4e827c918dac668a12eaf63180ba8a9e6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["ASYNC_MM_TEARDOWN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mm_reaper","async_mm_teardown_queue","async_mm_teardown_reserve","async_mm_teardown_eligible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"890f8c4e827c918dac668a12eaf63180ba8a9e6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["ASYNC_MM_TEARDOWN"],"series_id":"a6b57b51-6ef1-47de-84cd-8ec884cc2bd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-19 20:29:31 +0000 UTC FinishedAt: 2026-07-19 20:57:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflows9qwx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"890f8c4e827c918dac668a12eaf63180ba8a9e6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["ASYNC_MM_TEARDOWN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mm_reaper","async_mm_teardown_queue","async_mm_teardown_reserve","async_mm_teardown_eligible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"890f8c4e827c918dac668a12eaf63180ba8a9e6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["ASYNC_MM_TEARDOWN"],"series_id":"a6b57b51-6ef1-47de-84cd-8ec884cc2bd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-19 20:29:31 +0000 UTC FinishedAt: 2026-07-19 20:57:37 +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:*360664f3-a5b2-4ec1-85e7-23c3987308fa,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-workflows9qwx/series-workflows9qwx-convert-artifact-3932119440/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": "e6589e40-a25c-4f1e-a55f-9f83afb30706", "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-workflows9qwx/series-workflows9qwx-build-action-4242890252/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows9qwx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"890f8c4e827c918dac668a12eaf63180ba8a9e6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["ASYNC_MM_TEARDOWN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mm_reaper","async_mm_teardown_queue","async_mm_teardown_reserve","async_mm_teardown_eligible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"890f8c4e827c918dac668a12eaf63180ba8a9e6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["ASYNC_MM_TEARDOWN"],"series_id":"a6b57b51-6ef1-47de-84cd-8ec884cc2bd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-19 20:29:31 +0000 UTC FinishedAt: 2026-07-19 20:57:27 +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:*360664f3-a5b2-4ec1-85e7-23c3987308fa,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-workflows9qwx/series-workflows9qwx-convert-artifact-3932119440/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": "e6589e40-a25c-4f1e-a55f-9f83afb30706", "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-workflows9qwx/series-workflows9qwx-build-action-4242890252/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows9qwx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"890f8c4e827c918dac668a12eaf63180ba8a9e6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["ASYNC_MM_TEARDOWN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mm_reaper","async_mm_teardown_queue","async_mm_teardown_reserve","async_mm_teardown_eligible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"890f8c4e827c918dac668a12eaf63180ba8a9e6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["ASYNC_MM_TEARDOWN"],"series_id":"a6b57b51-6ef1-47de-84cd-8ec884cc2bd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-19 20:57:37 +0000 UTC FinishedAt: 2026-07-19 20:57:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflows9qwx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"890f8c4e827c918dac668a12eaf63180ba8a9e6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["ASYNC_MM_TEARDOWN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mm_reaper","async_mm_teardown_queue","async_mm_teardown_reserve","async_mm_teardown_eligible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"890f8c4e827c918dac668a12eaf63180ba8a9e6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["ASYNC_MM_TEARDOWN"],"series_id":"a6b57b51-6ef1-47de-84cd-8ec884cc2bd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-19 20:57:37 +0000 UTC FinishedAt: 2026-07-19 20:57:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflows9qwx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"890f8c4e827c918dac668a12eaf63180ba8a9e6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["ASYNC_MM_TEARDOWN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mm_reaper","async_mm_teardown_queue","async_mm_teardown_reserve","async_mm_teardown_eligible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"890f8c4e827c918dac668a12eaf63180ba8a9e6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["ASYNC_MM_TEARDOWN"],"series_id":"a6b57b51-6ef1-47de-84cd-8ec884cc2bd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-19 20:57:37 +0000 UTC FinishedAt: 2026-07-19 20:59:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflows9qwx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"890f8c4e827c918dac668a12eaf63180ba8a9e6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["ASYNC_MM_TEARDOWN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mm_reaper","async_mm_teardown_queue","async_mm_teardown_reserve","async_mm_teardown_eligible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"890f8c4e827c918dac668a12eaf63180ba8a9e6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["ASYNC_MM_TEARDOWN"],"series_id":"a6b57b51-6ef1-47de-84cd-8ec884cc2bd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-19 20:57:37 +0000 UTC FinishedAt: 2026-07-19 20:59:39 +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:*e6589e40-a25c-4f1e-a55f-9f83afb30706,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-workflows9qwx/series-workflows9qwx-build-action-4242890252/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-workflows9qwx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"890f8c4e827c918dac668a12eaf63180ba8a9e6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["ASYNC_MM_TEARDOWN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mm_reaper","async_mm_teardown_queue","async_mm_teardown_reserve","async_mm_teardown_eligible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"890f8c4e827c918dac668a12eaf63180ba8a9e6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["ASYNC_MM_TEARDOWN"],"series_id":"a6b57b51-6ef1-47de-84cd-8ec884cc2bd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-19 20:59:49 +0000 UTC FinishedAt: 2026-07-20 00:02:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflows9qwx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"890f8c4e827c918dac668a12eaf63180ba8a9e6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["ASYNC_MM_TEARDOWN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mm_reaper","async_mm_teardown_queue","async_mm_teardown_reserve","async_mm_teardown_eligible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"890f8c4e827c918dac668a12eaf63180ba8a9e6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["ASYNC_MM_TEARDOWN"],"series_id":"a6b57b51-6ef1-47de-84cd-8ec884cc2bd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-19 20:59:49 +0000 UTC FinishedAt: 2026-07-20 00:02:05 +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":["mm_reaper","async_mm_teardown_queue","async_mm_teardown_reserve","async_mm_teardown_eligible"],"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:*c1349cec-f58d-4bc7-95a5-1dbb6b4e1ff5,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e6589e40-a25c-4f1e-a55f-9f83afb30706,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-workflows9qwx/series-workflows9qwx-build-action-4194971675/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-workflows9qwx/series-workflows9qwx-build-action-4242890252/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflows9qwx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"890f8c4e827c918dac668a12eaf63180ba8a9e6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["ASYNC_MM_TEARDOWN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mm_reaper","async_mm_teardown_queue","async_mm_teardown_reserve","async_mm_teardown_eligible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"890f8c4e827c918dac668a12eaf63180ba8a9e6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["ASYNC_MM_TEARDOWN"],"series_id":"a6b57b51-6ef1-47de-84cd-8ec884cc2bd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-19 20:59:49 +0000 UTC FinishedAt: 2026-07-19 20:59:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflows9qwx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"890f8c4e827c918dac668a12eaf63180ba8a9e6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["ASYNC_MM_TEARDOWN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mm_reaper","async_mm_teardown_queue","async_mm_teardown_reserve","async_mm_teardown_eligible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"890f8c4e827c918dac668a12eaf63180ba8a9e6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["ASYNC_MM_TEARDOWN"],"series_id":"a6b57b51-6ef1-47de-84cd-8ec884cc2bd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-19 20:59:49 +0000 UTC FinishedAt: 2026-07-19 20:59:54 +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":["mm_reaper","async_mm_teardown_queue","async_mm_teardown_reserve","async_mm_teardown_eligible"],"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-workflows9qwx/series-workflows9qwx-convert-artifact-2066669961/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows9qwx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"890f8c4e827c918dac668a12eaf63180ba8a9e6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["ASYNC_MM_TEARDOWN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mm_reaper","async_mm_teardown_queue","async_mm_teardown_reserve","async_mm_teardown_eligible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"890f8c4e827c918dac668a12eaf63180ba8a9e6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["ASYNC_MM_TEARDOWN"],"series_id":"a6b57b51-6ef1-47de-84cd-8ec884cc2bd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-19 20:59:49 +0000 UTC FinishedAt: 2026-07-19 20:59:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflows9qwx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"890f8c4e827c918dac668a12eaf63180ba8a9e6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["ASYNC_MM_TEARDOWN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mm_reaper","async_mm_teardown_queue","async_mm_teardown_reserve","async_mm_teardown_eligible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"890f8c4e827c918dac668a12eaf63180ba8a9e6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["ASYNC_MM_TEARDOWN"],"series_id":"a6b57b51-6ef1-47de-84cd-8ec884cc2bd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-19 20:59:49 +0000 UTC FinishedAt: 2026-07-19 20:59:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflows9qwx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"890f8c4e827c918dac668a12eaf63180ba8a9e6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["ASYNC_MM_TEARDOWN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mm_reaper","async_mm_teardown_queue","async_mm_teardown_reserve","async_mm_teardown_eligible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"890f8c4e827c918dac668a12eaf63180ba8a9e6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["ASYNC_MM_TEARDOWN"],"series_id":"a6b57b51-6ef1-47de-84cd-8ec884cc2bd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-19 20:59:49 +0000 UTC FinishedAt: 2026-07-19 20:59:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflows9qwx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"890f8c4e827c918dac668a12eaf63180ba8a9e6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["ASYNC_MM_TEARDOWN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mm_reaper","async_mm_teardown_queue","async_mm_teardown_reserve","async_mm_teardown_eligible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"890f8c4e827c918dac668a12eaf63180ba8a9e6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["ASYNC_MM_TEARDOWN"],"series_id":"a6b57b51-6ef1-47de-84cd-8ec884cc2bd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-19 20:59:59 +0000 UTC FinishedAt: 2026-07-20 00:02:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflows9qwx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"890f8c4e827c918dac668a12eaf63180ba8a9e6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["ASYNC_MM_TEARDOWN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mm_reaper","async_mm_teardown_queue","async_mm_teardown_reserve","async_mm_teardown_eligible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"890f8c4e827c918dac668a12eaf63180ba8a9e6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["ASYNC_MM_TEARDOWN"],"series_id":"a6b57b51-6ef1-47de-84cd-8ec884cc2bd9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-19 20:59:59 +0000 UTC FinishedAt: 2026-07-20 00:01:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c1349cec-f58d-4bc7-95a5-1dbb6b4e1ff5,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e6589e40-a25c-4f1e-a55f-9f83afb30706,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-workflows9qwx/series-workflows9qwx-build-action-4194971675/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-workflows9qwx/series-workflows9qwx-build-action-4242890252/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-workflows9qwx/series-workflows9qwx-convert-artifact-2066669961/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,}