Name: series-workflowjqvhf Phase: Succeeded StartedAt: 2026-08-24 15:15:37 +0000 UTC FinishedAt: 2026-08-24 19:56:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjqvhf[0] Phase: Succeeded StartedAt: 2026-08-24 15:15:37 +0000 UTC FinishedAt: 2026-08-24 16:10:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjqvhf[0].run-triage Phase: Succeeded StartedAt: 2026-08-24 15:15:37 +0000 UTC FinishedAt: 2026-08-24 16:10:10 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "e7f630142df2afccce90555e4972e60008222311", "config_name": "upstream-apparmor-kasan.config", "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "e7f630142df2afccce90555e4972e60008222311", "config_name": "upstream-apparmor-kasan.config", "series_id": "1936dda0-2e34-423f-80e0-95f570103cff" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "__kmem_cache_shrink", "__kmem_cache_shutdown", "__kmem_cache_empty", "kmem_cache_shrink", "kmem_cache_destroy" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI0IDE1OjQ3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fa21lbV9jYWNoZV9zaHJpbmsmIzM0OywKICAgICYjMzQ7X19rbWVtX2NhY2hlX3NodXRkb3duJiMzNDssCiAgICAmIzM0O19fa21lbV9jYWNoZV9lbXB0eSYjMzQ7LAogICAgJiMzNDtrbWVtX2NhY2hlX3NocmluayYjMzQ7LAogICAgJiMzNDtrbWVtX2NhY2hlX2Rlc3Ryb3kmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW50ZXJuYWwgU0xVQiBhbGxvY2F0b3IgbG9naWMgdG8gaW50cm9kdWNlIGEgbG9ja2xlc3MgXCYjMzQ7cGFya2luZ1wmIzM0OyBtZWNoYW5pc20gZm9yIHNsYWJzIHRvIHJlZHVjZSBsb2NrIGNvbnRlbnRpb24gb24gdGhlIG5vZGUmIzM5O3MgbGlzdF9sb2NrLiBJdCBhZGRzIGFuIGxsaXN0IGZvciBwYXJrZWQgc2xhYnMgYW5kIGRlbGF5ZWQgd29yayB0byB1bnBhcmsgdGhlbS4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgaW50ZXJuYWwgbWVtb3J5IG1hbmFnZW1lbnQgc3RydWN0dXJlcyAoc3RydWN0IGttZW1fY2FjaGVfbm9kZSwgc3RydWN0IHNsYWIpIGFuZCBmcmVlbGlzdCBvcGVyYXRpb25zLiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgbWFuaWZlc3QgYXMgbGlzdCBjb3JydXB0aW9ucywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBvciBjb25jdXJyZW5jeSBpc3N1ZXMgKHJhY2UgY29uZGl0aW9ucykuIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLCBzbHViX2RlYnVnLCBsaXN0IGRlYnVnZ2luZywgYW5kIExPQ0tERVAuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcyBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFsdGVyIG1lbW9yeSBpbml0aWFsaXphdGlvbiBvciBib3VuZHMgY2hlY2tpbmcgaW4gYSB3YXkgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgY2F1c2UgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbG9ja2xlc3MgcGFya2luZyBtZWNoYW5pc20gZm9yIHNsYWJzIGluIHRoZSBTTFVCIGFsbG9jYXRvciYjMzk7cyBmcmVlIHNsb3dwYXRoIHRvIHJlZHVjZSBsaXN0X2xvY2sgY29udGVudGlvbi4gVGhpcyBpcyBhIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhZmZlY3RzIHNsYWIgYWxsb2NhdGlvbiBhbmQgZnJlZWluZyBsb2dpYy4gSXQgaXMgcmVhY2hhYmxlIGJ5IGRlZmF1bHQgYW5kIHNob3VsZCBiZSBmdXp6ZWQuIFNpbmNlIGFsbG9jYXRpb24gYW5kIGZyZWVpbmcgYXJlIGhvdCBwYXRocywgd2UgZm9jdXMgb24gY2FjaGUgc2hyaW5raW5nIGFuZCBkZXN0cnVjdGlvbiBwYXRocyB3aGljaCBhbHNvIGludGVyYWN0IHdpdGggdGhlIG5ldyB1bnBhcmtpbmcgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTU6NDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA1YmJlOGJmMjExZmQ3MGJmMmNhYTI5ZWIzN2Y3MmRiM2Q2OTY0NDQ0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMjQgMTU6NDc6MDUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vc2x1Yi5jIGIvbW0vc2x1Yi5jXG5pbmRleCBiMGNkMDU3MmUyZjI2Li4yN2E3OGQ2M2Y1Mzc2IDEwMDY0NFxuLS0tIGEvbW0vc2x1Yi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9zbHViLmNcbkBAIC00OSw2ICYjNDM7NDksNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NvcnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lycV93b3JrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rcHJvYmVzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbGxpc3QuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlYnVnZnMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3RyYWNlL2V2ZW50cy9rbWVtLmhcdTAwM2VcbiBcbkBAIC0xMjIsNiAmIzQzOzEyMyw4IEBAXG4gICogICAoTm90ZSB0aGF0IHRoZSB0b3RhbCBudW1iZXIgb2Ygc2xhYnMgaXMgYW4gYXRvbWljIHZhbHVlIHRoYXQgbWF5IGJlXG4gICogICBtb2RpZmllZCB3aXRob3V0IHRha2luZyB0aGUgbGlzdCBsb2NrKS5cbiAgKlxuJiM0MzsgKiAgIFNsYWJzIG1heSBiZSBwdXNoZWQgdG8gbm9kZS1cdTAwM2VwYXJrZWRfc2xhYnMgd2l0aG91dCBhY3F1aXJpbmcgbGlzdF9sb2NrLlxuJiM0MzsgKlxuICAqICAgVGhlIGxpc3RfbG9jayBpcyBhIGNlbnRyYWxpemVkIGxvY2sgYW5kIHRodXMgd2UgYXZvaWQgdGFraW5nIGl0IGFzXG4gICogICBtdWNoIGFzIHBvc3NpYmxlLiBBcyBsb25nIGFzIFNMVUIgZG9lcyBub3QgaGF2ZSB0byBoYW5kbGUgcGFydGlhbFxuICAqICAgc2xhYnMsIG9wZXJhdGlvbnMgY2FuIGNvbnRpbnVlIHdpdGhvdXQgYW55IGNlbnRyYWxpemVkIGxvY2suXG5AQCAtMzY4LDYgJiM0MzszNzEsOSBAQCBlbnVtIHN0YXRfaXRlbSB7XG4gXHRGUkVFX1NMT1dQQVRILFx0XHQvKiBGcmVlIHRvIGEgc2xhYiAqL1xuIFx0RlJFRV9BRERfUEFSVElBTCxcdC8qIEZyZWVpbmcgbW92ZXMgc2xhYiB0byBwYXJ0aWFsIGxpc3QgKi9cbiBcdEZSRUVfUkVNT1ZFX1BBUlRJQUwsXHQvKiBGcmVlaW5nIHJlbW92ZXMgbGFzdCBvYmplY3QgKi9cbiYjNDM7XHRQQVJLX1NMQUIsXHRcdC8qIFNsYWJzIHBhcmtlZCBvbnRvIHRoZSBsbGlzdCBieSBmcmVlIHNsb3dwYXRoICovXG4mIzQzO1x0VU5QQVJLX1NMQUIsXHRcdC8qIFNsYWJzIHVucGFya2VkIGZyb20gdGhlIGxsaXN0ICovXG4mIzQzO1x0VU5QQVJLX0VWRU5ULFx0XHQvKiBVbnBhcmsgZXZlbnRzICovXG4gXHRBTExPQ19TTEFCLFx0XHQvKiBOZXcgc2xhYiBhY3F1aXJlZCBmcm9tIHBhZ2UgYWxsb2NhdG9yICovXG4gXHRBTExPQ19OT0RFX01JU01BVENILFx0LyogUmVxdWVzdGVkIG5vZGUgZGlmZmVyZW50IGZyb20gY3B1IHNoZWFmICovXG4gXHRGUkVFX1NMQUIsXHRcdC8qIFNsYWIgZnJlZWQgdG8gdGhlIHBhZ2UgYWxsb2NhdG9yICovXG5AQCAtNDYyLDYgJiM0Mzs0NjgsMTQgQEAgc3RydWN0IGttZW1fY2FjaGVfbm9kZSB7XG4gXHRhdG9taWNfbG9uZ190IHRvdGFsX29iamVjdHM7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGZ1bGw7XG4gI2VuZGlmXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBJZiBuZWl0aGVyIHNoZWFmIHJlZmlsbCBub3IgdGhlIGFsbG9jIHNsb3dwYXRoIHBlcmZvcm1zIHRoZSB1bnBhcmssXG4mIzQzO1x0ICogdW5wYXJrX3dvcmtfZm4gdGFrZXMgY2FyZSBvZiBpdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzdHJ1Y3QgZGVsYXllZF93b3JrIHVucGFya193b3JrO1xuJiM0MztcbiYjNDM7XHQvKiBVc2VkIHRvIGxpbmsgcGFya2VkIHNsYWJzICovXG4mIzQzO1x0c3RydWN0IGxsaXN0X2hlYWQgcGFya2VkX3NsYWJzIF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7XG4gfTtcbiBcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBrbWVtX2NhY2hlX25vZGUgKmdldF9ub2RlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBpbnQgbm9kZSlcbkBAIC01MDksNiAmIzQzOzUyMywxMiBAQCBzdGF0aWMgbm9kZW1hc2tfdCBzbGFiX2Jhcm5fbm9kZXM7XG4gICovXG4gc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpmbHVzaHdxO1xuIFxuJiM0MzsvKlxuJiM0MzsgKiBDZWlsaW5nIG9uIGhvdyBsb25nIHNsYWJzIHN0YXkgcGFya2VkIHdoZW4gbm8gc2hlYWYgcmVmaWxsIG9yIGFsbG9jXG4mIzQzOyAqIHNsb3dwYXRoIHVucGFya3MgdGhlbS5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgVU5QQVJLX0RFTEFZXHQoSFopXG4mIzQzO1xuIHN0cnVjdCBzbHViX2ZsdXNoX3dvcmsge1xuIFx0c3RydWN0IHdvcmtfc3RydWN0IHdvcms7XG4gXHRzdHJ1Y3Qga21lbV9jYWNoZSAqcztcbkBAIC0zNjIzLDYgJiM0MzszNjQzLDEyMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcmVtb3ZlX3BhcnRpYWwoc3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbixcbiBcdGNsZWFyX25vZGVfcGFydGlhbF9zdGF0ZShuLCBzbGFiKTtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIEEgc2xhYiBwYXJrZWQgb24gbi1cdTAwM2VwYXJrZWRfc2xhYnMgaXMgbm90IG9uIHBhcnRpYWwgbGlzdCwgc28gaXRzIHNsYWJfbGlzdCBpc1xuJiM0MzsgKiBmcmVlIGFuZCB3ZSByZXVzZSBpdCBhcyB0aGUgbGxpc3Rfbm9kZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IGxsaXN0X25vZGUgKnNsYWJfdG9fcGFya2VkX2xsbm9kZShzdHJ1Y3Qgc2xhYiAqc2xhYilcbiYjNDM7e1xuJiM0MztcdHJldHVybiAoc3RydWN0IGxsaXN0X25vZGUgKilcdTAwMjZzbGFiLVx1MDAzZXNsYWJfbGlzdDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2xhYiAqcGFya2VkX2xsbm9kZV90b19zbGFiKHN0cnVjdCBsbGlzdF9ub2RlICpub2RlKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGNvbnRhaW5lcl9vZigoc3RydWN0IGxpc3RfaGVhZCAqKW5vZGUsIHN0cnVjdCBzbGFiLCBzbGFiX2xpc3QpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBNb3ZlIHNsYWJzIHBhcmtlZCBvbiBuLVx1MDAzZXBhcmtlZF9zbGFicyB0byBuLVx1MDAzZXBhcnRpYWwuIENhbGxlZCB3aXRoIHRoZVxuJiM0MzsgKiBsaXN0X2xvY2sgaGVsZCwgYnkgdGhlIHBhdGhzIHRoYXQgY29uc3VtZSB0aGUgcGFydGlhbCBsaXN0LCBvbiBiZWhhbGYgb2YgdGhlXG4mIzQzOyAqIGNwdXMgdGhhdCBjb3VsZCBub3QgZ2V0IHRoZSBsb2NrIHdoZW4gcGFya2luZy5cbiYjNDM7ICpcbiYjNDM7ICogSWYgQGRpc2NhcmQgaXMgbm90IE5VTEwsIHB1dCBlbXB0eSBzbGFicyBiZXlvbmQgbWluX3BhcnRpYWwgb24gQGRpc2NhcmQsIHRoZVxuJiM0MzsgKiBjYWxsZXIgc2hvdWxkIGNhbGwgZGlzY2FyZF9zbGFiKCkgYWZ0ZXIgZHJvcHBpbmcgdGhlIGxvY2suICBDYWxsZXJzIHRoYXQgbWF5XG4mIzQzOyAqIG5vdCBmcmVlIHBhZ2VzIGluIHRoZWlyIGNvbnRleHQgc2hvdWxkIHBhc3MgTlVMTC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIHVucGFya19zbGFicyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbixcbiYjNDM7XHRcdFx0IHN0cnVjdCBsaXN0X2hlYWQgKmRpc2NhcmQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqcG9zLCAqbmV4dDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGFkZGVkID0gMCwgZGlzY2FyZGVkID0gMDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGhlYWRyb29tID0gMDtcbiYjNDM7XHRMSVNUX0hFQUQodG9fYWRkKTtcbiYjNDM7XG4mIzQzO1x0c2xhYl9sb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNm4tXHUwMDNlbGlzdF9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0cG9zID0gbGxpc3RfZGVsX2FsbChcdTAwMjZuLVx1MDAzZXBhcmtlZF9zbGFicyk7XG4mIzQzO1x0aWYgKGxpa2VseSghcG9zKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBDYWxjdWxhdGUgaG93IG1hbnkgbW9yZSBzbGFicyB0aGUgcGFydGlhbCBsaXN0IHdhbnRzIGJlZm9yZSBpdCBoYXNcbiYjNDM7XHQgKiByZWFjaGVkIG1pbl9wYXJ0aWFsLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChzLVx1MDAzZW1pbl9wYXJ0aWFsIFx1MDAzZSBuLVx1MDAzZW5yX3BhcnRpYWwpXG4mIzQzO1x0XHRoZWFkcm9vbSA9IHMtXHUwMDNlbWluX3BhcnRpYWwgLSBuLVx1MDAzZW5yX3BhcnRpYWw7XG4mIzQzO1xuJiM0MztcdGZvciAoOyBwb3M7IHBvcyA9IG5leHQpIHtcbiYjNDM7XHRcdHN0cnVjdCBzbGFiICpzbGFiID0gcGFya2VkX2xsbm9kZV90b19zbGFiKHBvcyk7XG4mIzQzO1x0XHRzdHJ1Y3QgZnJlZWxpc3RfY291bnRlcnMgZmxjO1xuJiM0MztcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBCYWNrIHVwIHRoZSBwb2ludGVyLCBiZWNhdXNlIHRoZSBsaXN0X2FkZF90YWlsKCkgYmVsb3dcbiYjNDM7XHRcdCAqIG92ZXJ3cml0ZXMgdGhlIGxsaXN0IGxpbmthZ2UuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdG5leHQgPSBwb3MtXHUwMDNlbmV4dDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoZGlzY2FyZCkge1xuJiM0MztcdFx0XHRmbGMuY291bnRlcnMgPSBkYXRhX3JhY2UoUkVBRF9PTkNFKHNsYWItXHUwMDNlY291bnRlcnMpKTtcbiYjNDM7XHRcdFx0aWYgKCFmbGMuaW51c2UgXHUwMDI2XHUwMDI2IGFkZGVkIFx1MDAzZT0gaGVhZHJvb20pIHtcbiYjNDM7XHRcdFx0XHRsaXN0X2FkZF90YWlsKFx1MDAyNnNsYWItXHUwMDNlc2xhYl9saXN0LCBkaXNjYXJkKTtcbiYjNDM7XHRcdFx0XHRkaXNjYXJkZWQmIzQzOyYjNDM7O1xuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0c2xhYl9zZXRfbm9kZV9wYXJ0aWFsKHNsYWIpO1xuJiM0MztcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZzbGFiLVx1MDAzZXNsYWJfbGlzdCwgXHUwMDI2dG9fYWRkKTtcbiYjNDM7XHRcdGFkZGVkJiM0MzsmIzQzOztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG4tXHUwMDNlbnJfcGFydGlhbCAmIzQzOz0gYWRkZWQ7XG4mIzQzO1x0bGlzdF9zcGxpY2VfdGFpbChcdTAwMjZ0b19hZGQsIFx1MDAyNm4tXHUwMDNlcGFydGlhbCk7XG4mIzQzO1xuJiM0MztcdHN0YXRfYWRkKHMsIEZSRUVfQUREX1BBUlRJQUwsIGFkZGVkKTtcbiYjNDM7XHRzdGF0X2FkZChzLCBVTlBBUktfU0xBQiwgYWRkZWQgJiM0MzsgZGlzY2FyZGVkKTtcbiYjNDM7XHRpZiAodW5saWtlbHkoZGlzY2FyZGVkKSlcbiYjNDM7XHRcdHN0YXRfYWRkKHMsIEZSRUVfU0xBQiwgZGlzY2FyZGVkKTtcbiYjNDM7XHRzdGF0KHMsIFVOUEFSS19FVkVOVCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFBhcmtlZCBzbGFicyBhcmUgbm9ybWFsbHkgdW5wYXJrZWQgYnkgc2hlYWYgcmVmaWxsIG9yIHRoZSBhbGxvYyBzbG93cGF0aCwgYnV0XG4mIzQzOyAqIHdoZW4gdGhlIHN5c3RlbSBleHBlcmllbmNlcyBhIGhlYXZ5IGJ1cnN0IG9mIGZyZWVzLCBhYnJ1cHRseSBnb2VzIGlkbGUsXG4mIzQzOyAqIGFuZCBuZWl0aGVyIHNoZWFmIHJlZmlsbCBub3IgdGhlIGFsbG9jIHNsb3dwYXRoIGlzIHJlYWNoZWQsXG4mIzQzOyAqIHNvbWUgcGFya2VkIHNsYWJzIG1heSBiZSBsZWZ0IHN0cmFuZGVkIGluIHRoZSBwYXJrZWQgbGxpc3QuIFRoaXMgZnVuY3Rpb25cbiYjNDM7ICogc2VydmVzIGFzIGEgbGFzdC1yZXNvcnQgZmFsbGJhY2suXG4mIzQzOyAqIFRoaXMgd29yayBpcyBzY2hlZHVsZWQgYnkgdGhlIGxsaXN0X2FkZCgpIHRoYXQgbWFrZXMgdGhlIHBhcmtlZCBsbGlzdCBub24tZW1wdHkuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCB1bnBhcmtfd29ya19mbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlICpuID0gY29udGFpbmVyX29mKHRvX2RlbGF5ZWRfd29yayh3b3JrKSxcbiYjNDM7XHRcdFx0XHRcdFx0IHN0cnVjdCBrbWVtX2NhY2hlX25vZGUsXG4mIzQzO1x0XHRcdFx0XHRcdCB1bnBhcmtfd29yayk7XG4mIzQzO1x0c3RydWN0IGxsaXN0X25vZGUgKmZpcnN0O1xuJiM0MztcdHN0cnVjdCBrbWVtX2NhY2hlICpzO1xuJiM0MztcdHN0cnVjdCBzbGFiICpzbGFiLCAqdDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuJiM0MztcdExJU1RfSEVBRChkaXNjYXJkKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGxpa2VseShsbGlzdF9lbXB0eShcdTAwMjZuLVx1MDAzZXBhcmtlZF9zbGFicykpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZuLVx1MDAzZWxpc3RfbG9jaywgZmxhZ3MpO1xuJiM0MztcbiYjNDM7XHRmaXJzdCA9IFJFQURfT05DRShuLVx1MDAzZXBhcmtlZF9zbGFicy5maXJzdCk7XG4mIzQzO1x0aWYgKHVubGlrZWx5KCFmaXJzdCkpIHtcbiYjNDM7XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2bi1cdTAwM2VsaXN0X2xvY2ssIGZsYWdzKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1x0cyA9IHBhcmtlZF9sbG5vZGVfdG9fc2xhYihmaXJzdCktXHUwMDNlc2xhYl9jYWNoZTtcbiYjNDM7XG4mIzQzO1x0dW5wYXJrX3NsYWJzKHMsIG4sIFx1MDAyNmRpc2NhcmQpO1xuJiM0MztcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2bi1cdTAwM2VsaXN0X2xvY2ssIGZsYWdzKTtcbiYjNDM7XG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNsYWIsIHQsIFx1MDAyNmRpc2NhcmQsIHNsYWJfbGlzdClcbiYjNDM7XHRcdGRpc2NhcmRfc2xhYihzLCBzbGFiKTtcbiYjNDM7fVxuJiM0MztcbiAvKlxuICAqIENhbGxlZCBvbmx5IGZvciBrbWVtX2NhY2hlX2RlYnVnKCkgY2FjaGVzIGluc3RlYWQgb2YgcmVtb3ZlX3BhcnRpYWwoKSwgd2l0aCBhXG4gICogc2xhYiBmcm9tIHRoZSBuLVx1MDAzZXBhcnRpYWwgbGlzdC4gUmVtb3ZlIG9ubHkgYSBzaW5nbGUgb2JqZWN0IGZyb20gdGhlIHNsYWIsIGRvXG5AQCAtMzgxOCw5ICYjNDM7Mzk1NCwxMyBAQCBzdGF0aWMgYm9vbCBnZXRfcGFydGlhbF9ub2RlX2J1bGsoc3RydWN0IGttZW1fY2FjaGUgKnMsXG4gXHRzdHJ1Y3Qgc2xhYiAqZmlyc3QgPSBOVUxMLCAqbGFzdCA9IE5VTEw7XG4gXHR1bnNpZ25lZCBpbnQgdG90YWxfZnJlZSA9IDA7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuJiM0MztcdExJU1RfSEVBRChkaXNjYXJkKTtcbiBcbi1cdC8qIFJhY3kgY2hlY2sgdG8gYXZvaWQgdGFraW5nIHRoZSBsb2NrIHVubmVjZXNzYXJpbHkuICovXG4tXHRpZiAoIW4gfHwgZGF0YV9yYWNlKCFuLVx1MDAzZW5yX3BhcnRpYWwpKVxuJiM0MztcdC8qXG4mIzQzO1x0ICogUmFjeSBjaGVjayB0byBhdm9pZCB0YWtpbmcgdGhlIGxvY2sgdW5uZWNlc3NhcmlseS5cbiYjNDM7XHQgKiBUaGUgcGFya2VkX3NsYWJzIGxsaXN0IG11c3QgYWxzbyBiZSBhY2NvdW50ZWQgZm9yLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICghbiB8fCAoIWRhdGFfcmFjZShuLVx1MDAzZW5yX3BhcnRpYWwpIFx1MDAyNlx1MDAyNiBsbGlzdF9lbXB0eShcdTAwMjZuLVx1MDAzZXBhcmtlZF9zbGFicykpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZwYy1cdTAwM2VzbGFicyk7XG5AQCAtMzgzMCw2ICYjNDM7Mzk3MCw5IEBAIHN0YXRpYyBib29sIGdldF9wYXJ0aWFsX25vZGVfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbiBcdGVsc2UgaWYgKCFzcGluX3RyeWxvY2tfaXJxc2F2ZShcdTAwMjZuLVx1MDAzZWxpc3RfbG9jaywgZmxhZ3MpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4mIzQzO1x0LyogSWYgdGhlcmUgYXJlIHBhcmtlZCBzbGFicywgbW92ZSB0aGVtIHRvIHRoZSBwYXJ0aWFsIGxpc3QgZmlyc3QuICovXG4mIzQzO1x0dW5wYXJrX3NsYWJzKHMsIG4sIGFsbG93X3NwaW4gPyBcdTAwMjZkaXNjYXJkIDogTlVMTCk7XG4mIzQzO1xuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNsYWIsIHNsYWIyLCBcdTAwMjZuLVx1MDAzZXBhcnRpYWwsIHNsYWJfbGlzdCkge1xuIFx0XHRzdHJ1Y3QgZnJlZWxpc3RfY291bnRlcnMgZmxjO1xuIFx0XHR1bnNpZ25lZCBpbnQgc2xhYl9mcmVlO1xuQEAgLTM4NzQsNiAmIzQzOzQwMTcsMTAgQEAgc3RhdGljIGJvb2wgZ2V0X3BhcnRpYWxfbm9kZV9idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLFxuIFx0XHRcdFx0ICAgIFx1MDAyNmxhc3QtXHUwMDNlc2xhYl9saXN0KTtcbiBcbiBcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2bi1cdTAwM2VsaXN0X2xvY2ssIGZsYWdzKTtcbiYjNDM7XG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNsYWIsIHNsYWIyLCBcdTAwMjZkaXNjYXJkLCBzbGFiX2xpc3QpXG4mIzQzO1x0XHRkaXNjYXJkX3NsYWIocywgc2xhYik7XG4mIzQzO1xuIFx0cmV0dXJuIHRvdGFsX2ZyZWUgXHUwMDNlIDA7XG4gfVxuIFxuQEAgLTM4ODUsMjMgJiM0Mzs0MDMyLDI5IEBAIHN0YXRpYyB2b2lkICpnZXRfZnJvbV9wYXJ0aWFsX25vZGUoc3RydWN0IGttZW1fY2FjaGUgKnMsXG4gXHRcdFx0XHQgICBnZnBfdCBnZnBfZmxhZ3MsXG4gXHRcdFx0XHQgICBjb25zdCBzdHJ1Y3Qgc2xhYl9hbGxvY19jb250ZXh0ICphYylcbiB7XG4mIzQzO1x0Ym9vbCBhbGxvd19zcGluID0gYWxsb2NfZmxhZ3NfYWxsb3dfc3Bpbm5pbmcoYWMtXHUwMDNlYWxsb2NfZmxhZ3MpO1xuIFx0c3RydWN0IHNsYWIgKnNsYWIsICpzbGFiMjtcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXHR2b2lkICpvYmplY3QgPSBOVUxMO1xuJiM0MztcdExJU1RfSEVBRChkaXNjYXJkKTtcbiBcbiBcdC8qXG4gXHQgKiBSYWN5IGNoZWNrLiBJZiB3ZSBtaXN0YWtlbmx5IHNlZSBubyBwYXJ0aWFsIHNsYWJzIHRoZW4gd2VcbiBcdCAqIGp1c3QgYWxsb2NhdGUgYW4gZW1wdHkgc2xhYi4gSWYgd2UgbWlzdGFrZW5seSB0cnkgdG8gZ2V0IGFcbiBcdCAqIHBhcnRpYWwgc2xhYiBhbmQgdGhlcmUgaXMgbm9uZSBhdmFpbGFibGUgdGhlbiBnZXRfZnJvbV9wYXJ0aWFsKClcbi1cdCAqIHdpbGwgcmV0dXJuIE5VTEwuXG4mIzQzO1x0ICogd2lsbCByZXR1cm4gTlVMTC4gQWxzbyB0YWtlIHRoZSBwYXJrZWRfc2xhYnMgbGxpc3QgaW50byBhY2NvdW50LlxuIFx0ICovXG4tXHRpZiAoIW4gfHwgIW4tXHUwMDNlbnJfcGFydGlhbClcbiYjNDM7XHRpZiAoIW4gfHwgKCFkYXRhX3JhY2Uobi1cdTAwM2Vucl9wYXJ0aWFsKSBcdTAwMjZcdTAwMjYgbGxpc3RfZW1wdHkoXHUwMDI2bi1cdTAwM2VwYXJrZWRfc2xhYnMpKSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4tXHRpZiAoYWxsb2NfZmxhZ3NfYWxsb3dfc3Bpbm5pbmcoYWMtXHUwMDNlYWxsb2NfZmxhZ3MpKVxuJiM0MztcdGlmIChhbGxvd19zcGluKVxuIFx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZuLVx1MDAzZWxpc3RfbG9jaywgZmxhZ3MpO1xuIFx0ZWxzZSBpZiAoIXNwaW5fdHJ5bG9ja19pcnFzYXZlKFx1MDAyNm4tXHUwMDNlbGlzdF9sb2NrLCBmbGFncykpXG4gXHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiYjNDM7XHQvKiBJZiB0aGVyZSBhcmUgcGFya2VkIHNsYWJzLCBtb3ZlIHRoZW0gdG8gdGhlIHBhcnRpYWwgbGlzdCBmaXJzdC4gKi9cbiYjNDM7XHR1bnBhcmtfc2xhYnMocywgbiwgYWxsb3dfc3BpbiA/IFx1MDAyNmRpc2NhcmQgOiBOVUxMKTtcbiYjNDM7XG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2xhYiwgc2xhYjIsIFx1MDAyNm4tXHUwMDNlcGFydGlhbCwgc2xhYl9saXN0KSB7XG4gXG4gXHRcdHN0cnVjdCBmcmVlbGlzdF9jb3VudGVycyBvbGQsIG5ldztcbkBAIC0zOTM5LDYgJiM0Mzs0MDkyLDEwIEBAIHN0YXRpYyB2b2lkICpnZXRfZnJvbV9wYXJ0aWFsX25vZGUoc3RydWN0IGttZW1fY2FjaGUgKnMsXG4gXHRcdGJyZWFrO1xuIFx0fVxuIFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZuLVx1MDAzZWxpc3RfbG9jaywgZmxhZ3MpO1xuJiM0MztcbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2xhYiwgc2xhYjIsIFx1MDAyNmRpc2NhcmQsIHNsYWJfbGlzdClcbiYjNDM7XHRcdGRpc2NhcmRfc2xhYihzLCBzbGFiKTtcbiYjNDM7XG4gXHRyZXR1cm4gb2JqZWN0O1xuIH1cbiBcbkBAIC0zOTk0LDggJiM0Mzs0MTUxLDEzIEBAIHN0YXRpYyB2b2lkICpnZXRfZnJvbV9hbnlfcGFydGlhbChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwX2ZsYWdzLFxuIFxuIFx0XHRcdG4gPSBnZXRfbm9kZShzLCB6b25lX3RvX25pZCh6b25lKSk7XG4gXG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIFBhcmtlZCBzbGFicyBtYWtlIHRoZSBub2RlIHdvcnRoIHZpc2l0aW5nIGV2ZW4gaWZcbiYjNDM7XHRcdFx0ICogbnJfcGFydGlhbCBsb29rcyBsb3cuXG4mIzQzO1x0XHRcdCAqL1xuIFx0XHRcdGlmIChuIFx1MDAyNlx1MDAyNiBjcHVzZXRfem9uZV9hbGxvd2VkKHpvbmUsIGdmcF9mbGFncykgXHUwMDI2XHUwMDI2XG4tXHRcdFx0XHRcdG4tXHUwMDNlbnJfcGFydGlhbCBcdTAwM2Ugcy1cdTAwM2VtaW5fcGFydGlhbCkge1xuJiM0MztcdFx0XHRcdFx0KG4tXHUwMDNlbnJfcGFydGlhbCBcdTAwM2Ugcy1cdTAwM2VtaW5fcGFydGlhbCB8fFxuJiM0MztcdFx0XHRcdFx0ICFsbGlzdF9lbXB0eShcdTAwMjZuLVx1MDAzZXBhcmtlZF9zbGFicykpKSB7XG4gXG4gXHRcdFx0XHR2b2lkICpvYmplY3QgPSBnZXRfZnJvbV9wYXJ0aWFsX25vZGUocywgbixcbiBcdFx0XHRcdFx0XHRcdFx0Z2ZwX2ZsYWdzLCBhYyk7XG5AQCAtNTcxOSw3ICYjNDM7NTg4MSw3IEBAIHN0YXRpYyB2b2lkIF9fc2xhYl9mcmVlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYixcbiBcdFx0XHR1bnNpZ25lZCBsb25nIGFkZHIpXG4gXG4ge1xuLVx0Ym9vbCB3YXNfZnVsbDtcbiYjNDM7XHRib29sIHdhc19mdWxsLCBwYXJrID0gZmFsc2U7XG4gXHRzdHJ1Y3QgZnJlZWxpc3RfY291bnRlcnMgb2xkLCBuZXc7XG4gXHRzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlICpuID0gTlVMTDtcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG5AQCAtNTczMSwxMCAmIzQzOzU4OTMsMTEgQEAgc3RhdGljIHZvaWQgX19zbGFiX2ZyZWUoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLFxuIFx0fVxuIFxuIFx0ZG8ge1xuLVx0XHRpZiAodW5saWtlbHkobikpIHtcbiYjNDM7XHRcdGlmICh1bmxpa2VseShuIFx1MDAyNlx1MDAyNiAhcGFyaykpXG4gXHRcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZuLVx1MDAzZWxpc3RfbG9jaywgZmxhZ3MpO1xuLVx0XHRcdG4gPSBOVUxMO1xuLVx0XHR9XG4mIzQzO1xuJiM0MztcdFx0cGFyayA9IGZhbHNlO1xuJiM0MztcdFx0biA9IE5VTEw7XG4gXG4gXHRcdG9sZC5mcmVlbGlzdCA9IHNsYWItXHUwMDNlZnJlZWxpc3Q7XG4gXHRcdG9sZC5jb3VudGVycyA9IHNsYWItXHUwMDNlY291bnRlcnM7XG5AQCAtNTc0OCw3NiAmIzQzOzU5MTEsMTE0IEBAIHN0YXRpYyB2b2lkIF9fc2xhYl9mcmVlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYixcbiBcdFx0bmV3LmludXNlIC09IGNudDtcbiBcbiBcdFx0Lypcbi1cdFx0ICogTWlnaHQgbmVlZCB0byBiZSB0YWtlbiBvZmYgKGR1ZSB0byBiZWNvbWluZyBlbXB0eSkgb3IgYWRkZWRcbi1cdFx0ICogdG8gKGR1ZSB0byBub3QgYmVpbmcgZnVsbCBhbnltb3JlKSB0aGUgcGFydGlhbCBsaXN0LlxuLVx0XHQgKiBVbmxlc3MgaXQmIzM5O3MgZnJvemVuLlxuJiM0MztcdFx0ICogcGFydGlhbC1cdTAwM2VwYXJ0aWFsOiB0aGUgc2xhYiB3YXMgb24gdGhlIG5vZGUgcGFydGlhbCBsaXN0IGFuZFxuJiM0MztcdFx0ICogd2lsbCBzdGlsbCBzdGF5IHRoZXJlLCBzbyB3ZSBuZWVkIG5vIGxpc3QgaGFuZGxpbmcgYW5kIG5vXG4mIzQzO1x0XHQgKiBsaXN0X2xvY2suXG4mIzQzO1x0XHQgKlxuJiM0MztcdFx0ICogTm90ZSB0aGF0IFwmIzM0O2NvbnRpbnVlO1wmIzM0OyBpbiBhIGRvLXdoaWxlIGdvZXMgb24gdG8gZXZhbHVhdGUgdGhlXG4mIzQzO1x0XHQgKiBjb25kaXRpb24gYmVsb3csIHNvIHdlIGRvIHBlcmZvcm0gdGhlIGZyZWVsaXN0IHVwZGF0ZS5cbiBcdFx0ICovXG4tXHRcdGlmICghbmV3LmludXNlIHx8IHdhc19mdWxsKSB7XG4mIzQzO1x0XHRpZiAoIXdhc19mdWxsIFx1MDAyNlx1MDAyNiBuZXcuaW51c2UpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRcdG4gPSBnZXRfbm9kZShzLCBzbGFiX25pZChzbGFiKSk7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogVGhlIHNsYWIgbWlnaHQgbmVlZCB0byBiZSB0YWtlbiBvZmYgKGR1ZSB0byBiZWNvbWluZyBlbXB0eSlcbiYjNDM7XHRcdCAqIG9yIGFkZGVkIHRvIChkdWUgdG8gbm90IGJlaW5nIGZ1bGwgYW55bW9yZSkgdGhlIHBhcnRpYWxcbiYjNDM7XHRcdCAqIGxpc3QuXG4mIzQzO1x0XHQgKlxuJiM0MztcdFx0ICogRm9yIHRoZSBmdWxsIC1cdTAwM2UgcGFydGlhbC9lbXB0eSB0cmFuc2l0aW9uLCB1c2VcbiYjNDM7XHRcdCAqIHNwaW5fdHJ5bG9ja19pcnFzYXZlKCkgYW5kIHRoZSBwYXJraW5nIG1lY2hhbmlzbSB0byByZWR1Y2VcbiYjNDM7XHRcdCAqIGxvY2sgY29udGVudGlvbi5cbiYjNDM7XHRcdCAqXG4mIzQzO1x0XHQgKiBJZiB0aGUgY21weGNoZyBkb2VzIG5vdCBzdWNjZWVkIHRoZW4gd2Ugd2lsbCByZXRyeS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0biA9IGdldF9ub2RlKHMsIHNsYWJfbmlkKHNsYWIpKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIXdhc19mdWxsKSB7XG4gXHRcdFx0Lypcbi1cdFx0XHQgKiBTcGVjdWxhdGl2ZWx5IGFjcXVpcmUgdGhlIGxpc3RfbG9jay5cbi1cdFx0XHQgKiBJZiB0aGUgY21weGNoZyBkb2VzIG5vdCBzdWNjZWVkIHRoZW4gd2UgbWF5XG4tXHRcdFx0ICogZHJvcCB0aGUgbGlzdF9sb2NrIHdpdGhvdXQgYW55IHByb2Nlc3NpbmcuXG4tXHRcdFx0ICpcbi1cdFx0XHQgKiBPdGhlcndpc2UgdGhlIGxpc3RfbG9jayB3aWxsIHN5bmNocm9uaXplIHdpdGhcbi1cdFx0XHQgKiBvdGhlciBwcm9jZXNzb3JzIHVwZGF0aW5nIHRoZSBsaXN0IG9mIHNsYWJzLlxuJiM0MztcdFx0XHQgKiBwYXJ0aWFsLVx1MDAzZWVtcHR5OiBzcGVjdWxhdGl2ZWx5IGFjcXVpcmUgbGlzdF9sb2NrXG4mIzQzO1x0XHRcdCAqIHByaW9yIHRvIGNtcHhjaGcoKSwgYXMgcGVyZm9ybWluZyBjbXB4Y2hnKCkgYmVmb3JlXG4mIzQzO1x0XHRcdCAqIGxvY2sgYWNxdWlzaXRpb24gcmFjZXMgd2l0aCBjb25jdXJyZW50IG9wZXJhdGlvbnNcbiYjNDM7XHRcdFx0ICogKGUuZy4sIHRoZSBzaHJpbmtlcikuXG4gXHRcdFx0ICovXG4gXHRcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2bi1cdTAwM2VsaXN0X2xvY2ssIGZsYWdzKTtcbi1cbi1cdFx0XHRvbl9ub2RlX3BhcnRpYWwgPSBzbGFiX3Rlc3Rfbm9kZV9wYXJ0aWFsKHNsYWIpO1xuJiM0MztcdFx0fSBlbHNlIGlmICghc3Bpbl90cnlsb2NrX2lycXNhdmUoXHUwMDI2bi1cdTAwM2VsaXN0X2xvY2ssIGZsYWdzKSkge1xuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBmdWxsLVx1MDAzZXBhcnRpYWwvZW1wdHk6IHRoZSBzbGFiIGlzIGZ1bGwsIHNvIGl0IGlzIG9uXG4mIzQzO1x0XHRcdCAqIG5vIGxpc3Q7IGlmIHRoZSBsaXN0X2xvY2sgaXMgY29udGVuZGVkLCB0aGVuIHdlXG4mIzQzO1x0XHRcdCAqIHBhcmsgdGhlIHNsYWIgd2l0aG91dCB3YWl0aW5nIGZvciB0aGUgbG9jay5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdHBhcmsgPSB0cnVlO1xuIFx0XHR9XG4gXG4gXHR9IHdoaWxlICghc2xhYl91cGRhdGVfZnJlZWxpc3Qocywgc2xhYiwgXHUwMDI2b2xkLCBcdTAwMjZuZXcsIFwmIzM0O19fc2xhYl9mcmVlXCYjMzQ7KSk7XG4gXG4tXHRpZiAobGlrZWx5KCFuKSkge1xuLVx0XHQvKlxuLVx0XHQgKiBXZSBkaWRuJiMzOTt0IHRha2UgdGhlIGxpc3RfbG9jayBiZWNhdXNlIHRoZSBzbGFiIHdhcyBhbHJlYWR5IG9uXG4tXHRcdCAqIHRoZSBwYXJ0aWFsIGxpc3QgYW5kIHdpbGwgcmVtYWluIHRoZXJlLlxuLVx0XHQgKi9cbiYjNDM7XHQvKiBwYXJ0aWFsLVx1MDAzZXBhcnRpYWw6IHdlIGRpZG4mIzM5O3QgdGFrZSB0aGUgbGlzdF9sb2NrLiAqL1xuJiM0MztcdGlmIChsaWtlbHkoIW4pKVxuIFx0XHRyZXR1cm47XG4tXHR9XG4gXG4gXHQvKlxuLVx0ICogVGhpcyBzbGFiIHdhcyBwYXJ0aWFsbHkgZW1wdHkgYnV0IG5vdCBvbiB0aGUgcGVyLW5vZGUgcGFydGlhbCBsaXN0LFxuLVx0ICogaW4gd2hpY2ggY2FzZSB3ZSBzaG91bGRuJiMzOTt0IG1hbmlwdWxhdGUgaXRzIGxpc3QsIGp1c3QgcmV0dXJuLlxuJiM0MztcdCAqIFBhcmsgdGhlIHNsYWIuIElmIHRoaXMgcGFyayBtYWtlcyB0aGUgcGFya2VkIGxsaXN0IG5vbi1lbXB0eSxcbiYjNDM7XHQgKiB0aGVuIHNjaGVkdWxlIHVucGFya193b3JrLlxuIFx0ICovXG4mIzQzO1x0aWYgKHVubGlrZWx5KHBhcmspKSB7XG4mIzQzO1x0XHRpZiAobGxpc3RfYWRkKHNsYWJfdG9fcGFya2VkX2xsbm9kZShzbGFiKSwgXHUwMDI2bi1cdTAwM2VwYXJrZWRfc2xhYnMpKVxuJiM0MztcdFx0XHRxdWV1ZV9kZWxheWVkX3dvcmsoZmx1c2h3cSwgXHUwMDI2bi1cdTAwM2V1bnBhcmtfd29yayxcbiYjNDM7XHRcdFx0XHRcdCAgIFVOUEFSS19ERUxBWSk7XG4mIzQzO1x0XHRzdGF0KHMsIFBBUktfU0xBQik7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRvbl9ub2RlX3BhcnRpYWwgPSBzbGFiX3Rlc3Rfbm9kZV9wYXJ0aWFsKHNsYWIpO1xuJiM0MztcbiBcdGlmICghd2FzX2Z1bGwgXHUwMDI2XHUwMDI2ICFvbl9ub2RlX3BhcnRpYWwpIHtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBwYXJ0aWFsLVx1MDAzZWVtcHR5LCBvZmZsaXN0OiB0aGUgc2xhYiBoYXMgYmVlbiB0YWtlbiBvZmYgdGhlXG4mIzQzO1x0XHQgKiBwYXJ0aWFsIGxpc3QgYnkgYSBidWxrIHJlZmlsbCwgb3IgcGFya2VkIGR1cmluZyBpdHMgZnVsbCAtXHUwMDNlXG4mIzQzO1x0XHQgKiBwYXJ0aWFsL2VtcHR5IHRyYW5zaXRpb24uIEl0IHdpbGwgYmUgcHV0IGJhY2sgYnkgb3RoZXIgcGF0aHMsXG4mIzQzO1x0XHQgKiBzbyB0aGlzIHNsYWImIzM5O3MgbGlzdCBoYW5kbGluZyBpcyBub3Qgb3VycyB0byBkby5cbiYjNDM7XHRcdCAqL1xuIFx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNm4tXHUwMDNlbGlzdF9sb2NrLCBmbGFncyk7XG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbiBcdC8qXG4tXHQgKiBJZiBzbGFiIGJlY2FtZSBlbXB0eSwgc2hvdWxkIHdlIGFkZC9rZWVwIGl0IG9uIHRoZSBwYXJ0aWFsIGxpc3Qgb3Igd2Vcbi1cdCAqIGhhdmUgZW5vdWdoP1xuJiM0MztcdCAqIGZ1bGwvcGFydGlhbC1cdTAwM2VlbXB0eSwgZXhjZWVkOiB3ZSBoYXZlIGVub3VnaCBwYXJ0aWFsIHNsYWJzIGFscmVhZHkuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBQYXJrZWQgc2xhYnMgYXJlIGFsc28gY291bnRlZCBhcyBwYXJ0aWFsIHNsYWJzLiBXZSBkb24mIzM5O3RcbiYjNDM7XHQgKiBrZWVwIGFuIGV4YWN0IGNvdW50IG9mIHBhcmtlZCBzbGFicywgc28gd2UgdHJlYXQgYW55IHBhcmtlZFxuJiM0MztcdCAqIHNsYWIgYXMgcm91Z2hseSBleGNlZWRpbmcuXG4gXHQgKi9cbi1cdGlmICh1bmxpa2VseSghbmV3LmludXNlIFx1MDAyNlx1MDAyNiBuLVx1MDAzZW5yX3BhcnRpYWwgXHUwMDNlPSBzLVx1MDAzZW1pbl9wYXJ0aWFsKSlcbi1cdFx0Z290byBzbGFiX2VtcHR5O1xuJiM0MztcdGlmICh1bmxpa2VseSghbmV3LmludXNlIFx1MDAyNlx1MDAyNiAobi1cdTAwM2Vucl9wYXJ0aWFsIFx1MDAzZT0gcy1cdTAwM2VtaW5fcGFydGlhbCB8fFxuJiM0MztcdFx0XHRcdCAgICAhbGxpc3RfZW1wdHkoXHUwMDI2bi1cdTAwM2VwYXJrZWRfc2xhYnMpKSkpIHtcbiYjNDM7XHRcdC8qIHBhcnRpYWwtXHUwMDNlZW1wdHksIG9ubGlzdCwgZXhjZWVkICovXG4mIzQzO1x0XHRpZiAobGlrZWx5KCF3YXNfZnVsbCkpIHtcbiYjNDM7XHRcdFx0cmVtb3ZlX3BhcnRpYWwobiwgc2xhYik7XG4mIzQzO1x0XHRcdHN0YXQocywgRlJFRV9SRU1PVkVfUEFSVElBTCk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHQvKiBlbHNlIGZ1bGwtXHUwMDNlZW1wdHksIGV4Y2VlZDogaXQgaXMgb24gbm8gbGlzdCB0byByZW1vdmUgZnJvbSAqL1xuJiM0MztcbiYjNDM7XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2bi1cdTAwM2VsaXN0X2xvY2ssIGZsYWdzKTtcbiYjNDM7XHRcdHN0YXQocywgRlJFRV9TTEFCKTtcbiYjNDM7XHRcdGRpc2NhcmRfc2xhYihzLCBzbGFiKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4gXG4gXHQvKlxuLVx0ICogT2JqZWN0cyBsZWZ0IGluIHRoZSBzbGFiLiBJZiBpdCB3YXMgbm90IG9uIHRoZSBwYXJ0aWFsIGxpc3QgYmVmb3JlXG4tXHQgKiB0aGVuIGFkZCBpdC5cbiYjNDM7XHQgKiBBdCB0aGlzIHBvaW50LCBvbmx5IHRocmVlIGNhc2VzIHJlbWFpbjpcbiYjNDM7XHQgKiAgIGZ1bGwtXHUwMDNlcGFydGlhbFxuJiM0MztcdCAqICAgZnVsbC1cdTAwM2VlbXB0eSwgbm90IGV4Y2VlZFxuJiM0MztcdCAqICAgcGFydGlhbC1cdTAwM2VlbXB0eSwgb25saXN0LCBub3QgZXhjZWVkXG4gXHQgKi9cbiYjNDM7XG4mIzQzO1x0LyogZnVsbC1cdTAwM2VwYXJ0aWFsOyBmdWxsLVx1MDAzZWVtcHR5LCBub3QgZXhjZWVkICovXG4gXHRpZiAodW5saWtlbHkod2FzX2Z1bGwpKSB7XG4gXHRcdGFkZF9wYXJ0aWFsKG4sIHNsYWIsIEFERF9UT19UQUlMKTtcbiBcdFx0c3RhdChzLCBGUkVFX0FERF9QQVJUSUFMKTtcbiBcdH1cbi1cdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2bi1cdTAwM2VsaXN0X2xvY2ssIGZsYWdzKTtcbi1cdHJldHVybjtcbi1cbi1zbGFiX2VtcHR5OlxuLVx0Lypcbi1cdCAqIFRoZSBzbGFiIGNvdWxkIGhhdmUgYSBzaW5nbGUgb2JqZWN0IGFuZCB0aHVzIGdvIGZyb20gZnVsbCB0byBlbXB0eSBpblxuLVx0ICogYSBzaW5nbGUgZnJlZSwgYnV0IG1vcmUgbGlrZWx5IGl0IHdhcyBvbiB0aGUgcGFydGlhbCBsaXN0LiBSZW1vdmUgaXQuXG4tXHQgKi9cbi1cdGlmIChsaWtlbHkoIXdhc19mdWxsKSkge1xuLVx0XHRyZW1vdmVfcGFydGlhbChuLCBzbGFiKTtcbi1cdFx0c3RhdChzLCBGUkVFX1JFTU9WRV9QQVJUSUFMKTtcbi1cdH1cbiYjNDM7XHQvKiBlbHNlIHBhcnRpYWwtXHUwMDNlZW1wdHksIG9ubGlzdCwgbm90IGV4Y2VlZDogaXQgc3RheXMgb24gcGFydGlhbCBsaXN0ICovXG4gXG4gXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNm4tXHUwMDNlbGlzdF9sb2NrLCBmbGFncyk7XG4tXHRzdGF0KHMsIEZSRUVfU0xBQik7XG4tXHRkaXNjYXJkX3NsYWIocywgc2xhYik7XG4gfVxuIFxuIC8qXG5AQCAtNzM1Nyw4ICYjNDM7NzU1OCwxMyBAQCBfX3JlZmlsbF9vYmplY3RzX2FueShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqKnAsIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG1pblxuIFxuIFx0XHRcdG4gPSBnZXRfbm9kZShzLCB6b25lX3RvX25pZCh6b25lKSk7XG4gXG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIFBhcmtlZCBzbGFicyBtYWtlIHRoZSBub2RlIHdvcnRoIHRyeWluZ1xuJiM0MztcdFx0XHQgKiBldmVuIGlmIG5yX3BhcnRpYWwgbG9va3MgbG93LlxuJiM0MztcdFx0XHQgKi9cbiBcdFx0XHRpZiAoIW4gfHwgIWNwdXNldF96b25lX2FsbG93ZWQoem9uZSwgZ2ZwKSB8fFxuLVx0XHRcdFx0XHRuLVx1MDAzZW5yX3BhcnRpYWwgXHUwMDNjPSBzLVx1MDAzZW1pbl9wYXJ0aWFsKVxuJiM0MztcdFx0XHRcdFx0KG4tXHUwMDNlbnJfcGFydGlhbCBcdTAwM2M9IHMtXHUwMDNlbWluX3BhcnRpYWwgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdFx0XHQgbGxpc3RfZW1wdHkoXHUwMDI2bi1cdTAwM2VwYXJrZWRfc2xhYnMpKSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRcdHIgPSBfX3JlZmlsbF9vYmplY3RzX25vZGUocywgcCwgZ2ZwLCBtaW4sIG1heCwgbixcbkBAIC03Njc5LDYgJiM0Mzs3ODg1LDggQEAgaW5pdF9rbWVtX2NhY2hlX25vZGUoc3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbilcbiBcdG4tXHUwMDNlbnJfcGFydGlhbCA9IDA7XG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZuLVx1MDAzZWxpc3RfbG9jayk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZuLVx1MDAzZXBhcnRpYWwpO1xuJiM0MztcdGluaXRfbGxpc3RfaGVhZChcdTAwMjZuLVx1MDAzZXBhcmtlZF9zbGFicyk7XG4mIzQzO1x0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2bi1cdTAwM2V1bnBhcmtfd29yaywgdW5wYXJrX3dvcmtfZm4pO1xuICNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xuIFx0YXRvbWljX2xvbmdfc2V0KFx1MDAyNm4tXHUwMDNlbnJfc2xhYnMsIDApO1xuIFx0YXRvbWljX2xvbmdfc2V0KFx1MDAyNm4tXHUwMDNldG90YWxfb2JqZWN0cywgMCk7XG5AQCAtNzgxMiw2ICYjNDM7ODAyMCw3IEBAIHN0YXRpYyB2b2lkIGZyZWVfa21lbV9jYWNoZV9ub2RlcyhzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbiBcdH1cbiBcbiBcdGZvcl9lYWNoX2ttZW1fY2FjaGVfbm9kZShzLCBub2RlLCBuKSB7XG4mIzQzO1x0XHRjYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoXHUwMDI2bi1cdTAwM2V1bnBhcmtfd29yayk7XG4gXHRcdHMtXHUwMDNlcGVyX25vZGVbbm9kZV0ubm9kZSA9IE5VTEw7XG4gXHRcdGttZW1fY2FjaGVfZnJlZShrbWVtX2NhY2hlX25vZGUsIG4pO1xuIFx0fVxuQEAgLTgxMTIsNiAmIzQzOzgzMjEsMTAgQEAgc3RhdGljIHZvaWQgZnJlZV9wYXJ0aWFsKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlICpuKVxuIFxuIFx0QlVHX09OKGlycXNfZGlzYWJsZWQoKSk7XG4gXHRzcGluX2xvY2tfaXJxKFx1MDAyNm4tXHUwMDNlbGlzdF9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0LyogVW5wYXJrIHNsYWJzIHNvIHRoZSB3YWxrIGNhbiBmaW5kIHRoZW0uICovXG4mIzQzO1x0dW5wYXJrX3NsYWJzKHMsIG4sIE5VTEwpO1xuJiM0MztcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzbGFiLCBoLCBcdTAwMjZuLVx1MDAzZXBhcnRpYWwsIHNsYWJfbGlzdCkge1xuIFx0XHRpZiAoIXNsYWItXHUwMDNlaW51c2UpIHtcbiBcdFx0XHRyZW1vdmVfcGFydGlhbChuLCBzbGFiKTtcbkBAIC04MzgzLDYgJiM0Mzs4NTk2LDkgQEAgc3RhdGljIGludCBfX2ttZW1fY2FjaGVfZG9fc2hyaW5rKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxuIFxuIFx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZuLVx1MDAzZWxpc3RfbG9jaywgZmxhZ3MpO1xuIFxuJiM0MztcdFx0LyogUGFya2VkIHNsYWJzIGFyZSBzaHJpbmsgY2FuZGlkYXRlcyBhcyB3ZWxsLiAqL1xuJiM0MztcdFx0dW5wYXJrX3NsYWJzKHMsIG4sIE5VTEwpO1xuJiM0MztcbiBcdFx0LypcbiBcdFx0ICogQnVpbGQgbGlzdHMgb2Ygc2xhYnMgdG8gZGlzY2FyZCBvciBwcm9tb3RlLlxuIFx0XHQgKlxuQEAgLTk1MjIsNiAmIzQzOzk3MzgsOSBAQCBTVEFUX0FUVFIoRlJFRV9GQVNUUEFUSCwgZnJlZV9mYXN0cGF0aCk7XG4gU1RBVF9BVFRSKEZSRUVfU0xPV1BBVEgsIGZyZWVfc2xvd3BhdGgpO1xuIFNUQVRfQVRUUihGUkVFX0FERF9QQVJUSUFMLCBmcmVlX2FkZF9wYXJ0aWFsKTtcbiBTVEFUX0FUVFIoRlJFRV9SRU1PVkVfUEFSVElBTCwgZnJlZV9yZW1vdmVfcGFydGlhbCk7XG4mIzQzO1NUQVRfQVRUUihQQVJLX1NMQUIsIHBhcmtfc2xhYik7XG4mIzQzO1NUQVRfQVRUUihVTlBBUktfU0xBQiwgdW5wYXJrX3NsYWIpO1xuJiM0MztTVEFUX0FUVFIoVU5QQVJLX0VWRU5ULCB1bnBhcmtfZXZlbnQpO1xuIFNUQVRfQVRUUihBTExPQ19TTEFCLCBhbGxvY19zbGFiKTtcbiBTVEFUX0FUVFIoQUxMT0NfTk9ERV9NSVNNQVRDSCwgYWxsb2Nfbm9kZV9taXNtYXRjaCk7XG4gU1RBVF9BVFRSKEZSRUVfU0xBQiwgZnJlZV9zbGFiKTtcbkBAIC05NjEwLDYgJiM0Mzs5ODI5LDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGUgKmNvbnN0IHNsYWJfYXR0cnNbXSA9IHtcbiBcdFx1MDAyNmZyZWVfc2xvd3BhdGhfYXR0ci5hdHRyLFxuIFx0XHUwMDI2ZnJlZV9hZGRfcGFydGlhbF9hdHRyLmF0dHIsXG4gXHRcdTAwMjZmcmVlX3JlbW92ZV9wYXJ0aWFsX2F0dHIuYXR0cixcbiYjNDM7XHRcdTAwMjZwYXJrX3NsYWJfYXR0ci5hdHRyLFxuJiM0MztcdFx1MDAyNnVucGFya19zbGFiX2F0dHIuYXR0cixcbiYjNDM7XHRcdTAwMjZ1bnBhcmtfZXZlbnRfYXR0ci5hdHRyLFxuIFx0XHUwMDI2YWxsb2Nfc2xhYl9hdHRyLmF0dHIsXG4gXHRcdTAwMjZhbGxvY19ub2RlX21pc21hdGNoX2F0dHIuYXR0cixcbiBcdFx1MDAyNmZyZWVfc2xhYl9hdHRyLmF0dHIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTU6NDc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fa21lbV9jYWNoZV9zaHJpbmsmIzM0OywKICAgICYjMzQ7X19rbWVtX2NhY2hlX3NodXRkb3duJiMzNDssCiAgICAmIzM0O19fa21lbV9jYWNoZV9lbXB0eSYjMzQ7LAogICAgJiMzNDtrbWVtX2NhY2hlX3NocmluayYjMzQ7LAogICAgJiMzNDtrbWVtX2NhY2hlX2Rlc3Ryb3kmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGxvY2tsZXNzIHBhcmtpbmcgbWVjaGFuaXNtIGZvciBzbGFicyBpbiB0aGUgU0xVQiBhbGxvY2F0b3ImIzM5O3MgZnJlZSBzbG93cGF0aCB0byByZWR1Y2UgbGlzdF9sb2NrIGNvbnRlbnRpb24uIFRoaXMgaXMgYSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWZmZWN0cyBzbGFiIGFsbG9jYXRpb24gYW5kIGZyZWVpbmcgbG9naWMuIEl0IGlzIHJlYWNoYWJsZSBieSBkZWZhdWx0IGFuZCBzaG91bGQgYmUgZnV6emVkLiBTaW5jZSBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIGFyZSBob3QgcGF0aHMsIHdlIGZvY3VzIG9uIGNhY2hlIHNocmlua2luZyBhbmQgZGVzdHJ1Y3Rpb24gcGF0aHMgd2hpY2ggYWxzbyBpbnRlcmFjdCB3aXRoIHRoZSBuZXcgdW5wYXJraW5nIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNWJiZThiZjIxMWZkNzBiZjJjYWEyOWViMzdmNzJkYjNkNjk2NDQ0NApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDI0IDE1OjQ3OjA1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vc2x1Yi5jIGIvbW0vc2x1Yi5jCmluZGV4IGIwY2QwNTcyZTJmMjYuLjI3YTc4ZDYzZjUzNzYgMTAwNjQ0Ci0tLSBhL21tL3NsdWIuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9zbHViLmMKQEAgLTQ5LDYgJiM0Mzs0OSw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvc29ydC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2lycV93b3JrLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgva3Byb2Jlcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9sbGlzdC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2RlYnVnZnMuaCZndDsKICNpbmNsdWRlICZsdDt0cmFjZS9ldmVudHMva21lbS5oJmd0OwogCkBAIC0xMjIsNiAmIzQzOzEyMyw4IEBACiAgKiAgIChOb3RlIHRoYXQgdGhlIHRvdGFsIG51bWJlciBvZiBzbGFicyBpcyBhbiBhdG9taWMgdmFsdWUgdGhhdCBtYXkgYmUKICAqICAgbW9kaWZpZWQgd2l0aG91dCB0YWtpbmcgdGhlIGxpc3QgbG9jaykuCiAgKgomIzQzOyAqICAgU2xhYnMgbWF5IGJlIHB1c2hlZCB0byBub2RlLSZndDtwYXJrZWRfc2xhYnMgd2l0aG91dCBhY3F1aXJpbmcgbGlzdF9sb2NrLgomIzQzOyAqCiAgKiAgIFRoZSBsaXN0X2xvY2sgaXMgYSBjZW50cmFsaXplZCBsb2NrIGFuZCB0aHVzIHdlIGF2b2lkIHRha2luZyBpdCBhcwogICogICBtdWNoIGFzIHBvc3NpYmxlLiBBcyBsb25nIGFzIFNMVUIgZG9lcyBub3QgaGF2ZSB0byBoYW5kbGUgcGFydGlhbAogICogICBzbGFicywgb3BlcmF0aW9ucyBjYW4gY29udGludWUgd2l0aG91dCBhbnkgY2VudHJhbGl6ZWQgbG9jay4KQEAgLTM2OCw2ICYjNDM7MzcxLDkgQEAgZW51bSBzdGF0X2l0ZW0gewogCUZSRUVfU0xPV1BBVEgsCQkvKiBGcmVlIHRvIGEgc2xhYiAqLwogCUZSRUVfQUREX1BBUlRJQUwsCS8qIEZyZWVpbmcgbW92ZXMgc2xhYiB0byBwYXJ0aWFsIGxpc3QgKi8KIAlGUkVFX1JFTU9WRV9QQVJUSUFMLAkvKiBGcmVlaW5nIHJlbW92ZXMgbGFzdCBvYmplY3QgKi8KJiM0MzsJUEFSS19TTEFCLAkJLyogU2xhYnMgcGFya2VkIG9udG8gdGhlIGxsaXN0IGJ5IGZyZWUgc2xvd3BhdGggKi8KJiM0MzsJVU5QQVJLX1NMQUIsCQkvKiBTbGFicyB1bnBhcmtlZCBmcm9tIHRoZSBsbGlzdCAqLwomIzQzOwlVTlBBUktfRVZFTlQsCQkvKiBVbnBhcmsgZXZlbnRzICovCiAJQUxMT0NfU0xBQiwJCS8qIE5ldyBzbGFiIGFjcXVpcmVkIGZyb20gcGFnZSBhbGxvY2F0b3IgKi8KIAlBTExPQ19OT0RFX01JU01BVENILAkvKiBSZXF1ZXN0ZWQgbm9kZSBkaWZmZXJlbnQgZnJvbSBjcHUgc2hlYWYgKi8KIAlGUkVFX1NMQUIsCQkvKiBTbGFiIGZyZWVkIHRvIHRoZSBwYWdlIGFsbG9jYXRvciAqLwpAQCAtNDYyLDYgJiM0Mzs0NjgsMTQgQEAgc3RydWN0IGttZW1fY2FjaGVfbm9kZSB7CiAJYXRvbWljX2xvbmdfdCB0b3RhbF9vYmplY3RzOwogCXN0cnVjdCBsaXN0X2hlYWQgZnVsbDsKICNlbmRpZgomIzQzOwkvKgomIzQzOwkgKiBJZiBuZWl0aGVyIHNoZWFmIHJlZmlsbCBub3IgdGhlIGFsbG9jIHNsb3dwYXRoIHBlcmZvcm1zIHRoZSB1bnBhcmssCiYjNDM7CSAqIHVucGFya193b3JrX2ZuIHRha2VzIGNhcmUgb2YgaXQuCiYjNDM7CSAqLwomIzQzOwlzdHJ1Y3QgZGVsYXllZF93b3JrIHVucGFya193b3JrOwomIzQzOwomIzQzOwkvKiBVc2VkIHRvIGxpbmsgcGFya2VkIHNsYWJzICovCiYjNDM7CXN0cnVjdCBsbGlzdF9oZWFkIHBhcmtlZF9zbGFicyBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOwogfTsKIAogc3RhdGljIGlubGluZSBzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlICpnZXRfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgaW50IG5vZGUpCkBAIC01MDksNiAmIzQzOzUyMywxMiBAQCBzdGF0aWMgbm9kZW1hc2tfdCBzbGFiX2Jhcm5fbm9kZXM7CiAgKi8KIHN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqZmx1c2h3cTsKIAomIzQzOy8qCiYjNDM7ICogQ2VpbGluZyBvbiBob3cgbG9uZyBzbGFicyBzdGF5IHBhcmtlZCB3aGVuIG5vIHNoZWFmIHJlZmlsbCBvciBhbGxvYwomIzQzOyAqIHNsb3dwYXRoIHVucGFya3MgdGhlbS4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIFVOUEFSS19ERUxBWQkoSFopCiYjNDM7CiBzdHJ1Y3Qgc2x1Yl9mbHVzaF93b3JrIHsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKIAlzdHJ1Y3Qga21lbV9jYWNoZSAqczsKQEAgLTM2MjMsNiAmIzQzOzM2NDMsMTIyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCByZW1vdmVfcGFydGlhbChzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlICpuLAogCWNsZWFyX25vZGVfcGFydGlhbF9zdGF0ZShuLCBzbGFiKTsKIH0KIAomIzQzOy8qCiYjNDM7ICogQSBzbGFiIHBhcmtlZCBvbiBuLSZndDtwYXJrZWRfc2xhYnMgaXMgbm90IG9uIHBhcnRpYWwgbGlzdCwgc28gaXRzIHNsYWJfbGlzdCBpcwomIzQzOyAqIGZyZWUgYW5kIHdlIHJldXNlIGl0IGFzIHRoZSBsbGlzdF9ub2RlLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IGxsaXN0X25vZGUgKnNsYWJfdG9fcGFya2VkX2xsbm9kZShzdHJ1Y3Qgc2xhYiAqc2xhYikKJiM0Mzt7CiYjNDM7CXJldHVybiAoc3RydWN0IGxsaXN0X25vZGUgKikmYW1wO3NsYWItJmd0O3NsYWJfbGlzdDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2xhYiAqcGFya2VkX2xsbm9kZV90b19zbGFiKHN0cnVjdCBsbGlzdF9ub2RlICpub2RlKQomIzQzO3sKJiM0MzsJcmV0dXJuIGNvbnRhaW5lcl9vZigoc3RydWN0IGxpc3RfaGVhZCAqKW5vZGUsIHN0cnVjdCBzbGFiLCBzbGFiX2xpc3QpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIE1vdmUgc2xhYnMgcGFya2VkIG9uIG4tJmd0O3BhcmtlZF9zbGFicyB0byBuLSZndDtwYXJ0aWFsLiBDYWxsZWQgd2l0aCB0aGUKJiM0MzsgKiBsaXN0X2xvY2sgaGVsZCwgYnkgdGhlIHBhdGhzIHRoYXQgY29uc3VtZSB0aGUgcGFydGlhbCBsaXN0LCBvbiBiZWhhbGYgb2YgdGhlCiYjNDM7ICogY3B1cyB0aGF0IGNvdWxkIG5vdCBnZXQgdGhlIGxvY2sgd2hlbiBwYXJraW5nLgomIzQzOyAqCiYjNDM7ICogSWYgQGRpc2NhcmQgaXMgbm90IE5VTEwsIHB1dCBlbXB0eSBzbGFicyBiZXlvbmQgbWluX3BhcnRpYWwgb24gQGRpc2NhcmQsIHRoZQomIzQzOyAqIGNhbGxlciBzaG91bGQgY2FsbCBkaXNjYXJkX3NsYWIoKSBhZnRlciBkcm9wcGluZyB0aGUgbG9jay4gIENhbGxlcnMgdGhhdCBtYXkKJiM0MzsgKiBub3QgZnJlZSBwYWdlcyBpbiB0aGVpciBjb250ZXh0IHNob3VsZCBwYXNzIE5VTEwuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgdW5wYXJrX3NsYWJzKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlICpuLAomIzQzOwkJCSBzdHJ1Y3QgbGlzdF9oZWFkICpkaXNjYXJkKQomIzQzO3sKJiM0MzsJc3RydWN0IGxsaXN0X25vZGUgKnBvcywgKm5leHQ7CiYjNDM7CXVuc2lnbmVkIGxvbmcgYWRkZWQgPSAwLCBkaXNjYXJkZWQgPSAwOwomIzQzOwl1bnNpZ25lZCBsb25nIGhlYWRyb29tID0gMDsKJiM0MzsJTElTVF9IRUFEKHRvX2FkZCk7CiYjNDM7CiYjNDM7CXNsYWJfbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO24tJmd0O2xpc3RfbG9jayk7CiYjNDM7CiYjNDM7CXBvcyA9IGxsaXN0X2RlbF9hbGwoJmFtcDtuLSZndDtwYXJrZWRfc2xhYnMpOwomIzQzOwlpZiAobGlrZWx5KCFwb3MpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBDYWxjdWxhdGUgaG93IG1hbnkgbW9yZSBzbGFicyB0aGUgcGFydGlhbCBsaXN0IHdhbnRzIGJlZm9yZSBpdCBoYXMKJiM0MzsJICogcmVhY2hlZCBtaW5fcGFydGlhbC4KJiM0MzsJICovCiYjNDM7CWlmIChzLSZndDttaW5fcGFydGlhbCAmZ3Q7IG4tJmd0O25yX3BhcnRpYWwpCiYjNDM7CQloZWFkcm9vbSA9IHMtJmd0O21pbl9wYXJ0aWFsIC0gbi0mZ3Q7bnJfcGFydGlhbDsKJiM0MzsKJiM0MzsJZm9yICg7IHBvczsgcG9zID0gbmV4dCkgewomIzQzOwkJc3RydWN0IHNsYWIgKnNsYWIgPSBwYXJrZWRfbGxub2RlX3RvX3NsYWIocG9zKTsKJiM0MzsJCXN0cnVjdCBmcmVlbGlzdF9jb3VudGVycyBmbGM7CiYjNDM7CiYjNDM7CQkvKgomIzQzOwkJICogQmFjayB1cCB0aGUgcG9pbnRlciwgYmVjYXVzZSB0aGUgbGlzdF9hZGRfdGFpbCgpIGJlbG93CiYjNDM7CQkgKiBvdmVyd3JpdGVzIHRoZSBsbGlzdCBsaW5rYWdlLgomIzQzOwkJICovCiYjNDM7CQluZXh0ID0gcG9zLSZndDtuZXh0OwomIzQzOwomIzQzOwkJaWYgKGRpc2NhcmQpIHsKJiM0MzsJCQlmbGMuY291bnRlcnMgPSBkYXRhX3JhY2UoUkVBRF9PTkNFKHNsYWItJmd0O2NvdW50ZXJzKSk7CiYjNDM7CQkJaWYgKCFmbGMuaW51c2UgJmFtcDsmYW1wOyBhZGRlZCAmZ3Q7PSBoZWFkcm9vbSkgewomIzQzOwkJCQlsaXN0X2FkZF90YWlsKCZhbXA7c2xhYi0mZ3Q7c2xhYl9saXN0LCBkaXNjYXJkKTsKJiM0MzsJCQkJZGlzY2FyZGVkJiM0MzsmIzQzOzsKJiM0MzsJCQkJY29udGludWU7CiYjNDM7CQkJfQomIzQzOwkJfQomIzQzOwomIzQzOwkJc2xhYl9zZXRfbm9kZV9wYXJ0aWFsKHNsYWIpOwomIzQzOwkJbGlzdF9hZGRfdGFpbCgmYW1wO3NsYWItJmd0O3NsYWJfbGlzdCwgJmFtcDt0b19hZGQpOwomIzQzOwkJYWRkZWQmIzQzOyYjNDM7OwomIzQzOwl9CiYjNDM7CiYjNDM7CW4tJmd0O25yX3BhcnRpYWwgJiM0Mzs9IGFkZGVkOwomIzQzOwlsaXN0X3NwbGljZV90YWlsKCZhbXA7dG9fYWRkLCAmYW1wO24tJmd0O3BhcnRpYWwpOwomIzQzOwomIzQzOwlzdGF0X2FkZChzLCBGUkVFX0FERF9QQVJUSUFMLCBhZGRlZCk7CiYjNDM7CXN0YXRfYWRkKHMsIFVOUEFSS19TTEFCLCBhZGRlZCAmIzQzOyBkaXNjYXJkZWQpOwomIzQzOwlpZiAodW5saWtlbHkoZGlzY2FyZGVkKSkKJiM0MzsJCXN0YXRfYWRkKHMsIEZSRUVfU0xBQiwgZGlzY2FyZGVkKTsKJiM0MzsJc3RhdChzLCBVTlBBUktfRVZFTlQpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFBhcmtlZCBzbGFicyBhcmUgbm9ybWFsbHkgdW5wYXJrZWQgYnkgc2hlYWYgcmVmaWxsIG9yIHRoZSBhbGxvYyBzbG93cGF0aCwgYnV0CiYjNDM7ICogd2hlbiB0aGUgc3lzdGVtIGV4cGVyaWVuY2VzIGEgaGVhdnkgYnVyc3Qgb2YgZnJlZXMsIGFicnVwdGx5IGdvZXMgaWRsZSwKJiM0MzsgKiBhbmQgbmVpdGhlciBzaGVhZiByZWZpbGwgbm9yIHRoZSBhbGxvYyBzbG93cGF0aCBpcyByZWFjaGVkLAomIzQzOyAqIHNvbWUgcGFya2VkIHNsYWJzIG1heSBiZSBsZWZ0IHN0cmFuZGVkIGluIHRoZSBwYXJrZWQgbGxpc3QuIFRoaXMgZnVuY3Rpb24KJiM0MzsgKiBzZXJ2ZXMgYXMgYSBsYXN0LXJlc29ydCBmYWxsYmFjay4KJiM0MzsgKiBUaGlzIHdvcmsgaXMgc2NoZWR1bGVkIGJ5IHRoZSBsbGlzdF9hZGQoKSB0aGF0IG1ha2VzIHRoZSBwYXJrZWQgbGxpc3Qgbm9uLWVtcHR5LgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHVucGFya193b3JrX2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrbWVtX2NhY2hlX25vZGUgKm4gPSBjb250YWluZXJfb2YodG9fZGVsYXllZF93b3JrKHdvcmspLAomIzQzOwkJCQkJCSBzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlLAomIzQzOwkJCQkJCSB1bnBhcmtfd29yayk7CiYjNDM7CXN0cnVjdCBsbGlzdF9ub2RlICpmaXJzdDsKJiM0MzsJc3RydWN0IGttZW1fY2FjaGUgKnM7CiYjNDM7CXN0cnVjdCBzbGFiICpzbGFiLCAqdDsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsJTElTVF9IRUFEKGRpc2NhcmQpOwomIzQzOwomIzQzOwlpZiAobGlrZWx5KGxsaXN0X2VtcHR5KCZhbXA7bi0mZ3Q7cGFya2VkX3NsYWJzKSkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7bi0mZ3Q7bGlzdF9sb2NrLCBmbGFncyk7CiYjNDM7CiYjNDM7CWZpcnN0ID0gUkVBRF9PTkNFKG4tJmd0O3BhcmtlZF9zbGFicy5maXJzdCk7CiYjNDM7CWlmICh1bmxpa2VseSghZmlyc3QpKSB7CiYjNDM7CQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7bi0mZ3Q7bGlzdF9sb2NrLCBmbGFncyk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsJcyA9IHBhcmtlZF9sbG5vZGVfdG9fc2xhYihmaXJzdCktJmd0O3NsYWJfY2FjaGU7CiYjNDM7CiYjNDM7CXVucGFya19zbGFicyhzLCBuLCAmYW1wO2Rpc2NhcmQpOwomIzQzOwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7bi0mZ3Q7bGlzdF9sb2NrLCBmbGFncyk7CiYjNDM7CiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzbGFiLCB0LCAmYW1wO2Rpc2NhcmQsIHNsYWJfbGlzdCkKJiM0MzsJCWRpc2NhcmRfc2xhYihzLCBzbGFiKTsKJiM0Mzt9CiYjNDM7CiAvKgogICogQ2FsbGVkIG9ubHkgZm9yIGttZW1fY2FjaGVfZGVidWcoKSBjYWNoZXMgaW5zdGVhZCBvZiByZW1vdmVfcGFydGlhbCgpLCB3aXRoIGEKICAqIHNsYWIgZnJvbSB0aGUgbi0mZ3Q7cGFydGlhbCBsaXN0LiBSZW1vdmUgb25seSBhIHNpbmdsZSBvYmplY3QgZnJvbSB0aGUgc2xhYiwgZG8KQEAgLTM4MTgsOSAmIzQzOzM5NTQsMTMgQEAgc3RhdGljIGJvb2wgZ2V0X3BhcnRpYWxfbm9kZV9idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLAogCXN0cnVjdCBzbGFiICpmaXJzdCA9IE5VTEwsICpsYXN0ID0gTlVMTDsKIAl1bnNpZ25lZCBpbnQgdG90YWxfZnJlZSA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsJTElTVF9IRUFEKGRpc2NhcmQpOwogCi0JLyogUmFjeSBjaGVjayB0byBhdm9pZCB0YWtpbmcgdGhlIGxvY2sgdW5uZWNlc3NhcmlseS4gKi8KLQlpZiAoIW4gfHwgZGF0YV9yYWNlKCFuLSZndDtucl9wYXJ0aWFsKSkKJiM0MzsJLyoKJiM0MzsJICogUmFjeSBjaGVjayB0byBhdm9pZCB0YWtpbmcgdGhlIGxvY2sgdW5uZWNlc3NhcmlseS4KJiM0MzsJICogVGhlIHBhcmtlZF9zbGFicyBsbGlzdCBtdXN0IGFsc28gYmUgYWNjb3VudGVkIGZvci4KJiM0MzsJICovCiYjNDM7CWlmICghbiB8fCAoIWRhdGFfcmFjZShuLSZndDtucl9wYXJ0aWFsKSAmYW1wOyZhbXA7IGxsaXN0X2VtcHR5KCZhbXA7bi0mZ3Q7cGFya2VkX3NsYWJzKSkpCiAJCXJldHVybiBmYWxzZTsKIAogCUlOSVRfTElTVF9IRUFEKCZhbXA7cGMtJmd0O3NsYWJzKTsKQEAgLTM4MzAsNiAmIzQzOzM5NzAsOSBAQCBzdGF0aWMgYm9vbCBnZXRfcGFydGlhbF9ub2RlX2J1bGsoc3RydWN0IGttZW1fY2FjaGUgKnMsCiAJZWxzZSBpZiAoIXNwaW5fdHJ5bG9ja19pcnFzYXZlKCZhbXA7bi0mZ3Q7bGlzdF9sb2NrLCBmbGFncykpCiAJCXJldHVybiBmYWxzZTsKIAomIzQzOwkvKiBJZiB0aGVyZSBhcmUgcGFya2VkIHNsYWJzLCBtb3ZlIHRoZW0gdG8gdGhlIHBhcnRpYWwgbGlzdCBmaXJzdC4gKi8KJiM0MzsJdW5wYXJrX3NsYWJzKHMsIG4sIGFsbG93X3NwaW4gPyAmYW1wO2Rpc2NhcmQgOiBOVUxMKTsKJiM0MzsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2xhYiwgc2xhYjIsICZhbXA7bi0mZ3Q7cGFydGlhbCwgc2xhYl9saXN0KSB7CiAJCXN0cnVjdCBmcmVlbGlzdF9jb3VudGVycyBmbGM7CiAJCXVuc2lnbmVkIGludCBzbGFiX2ZyZWU7CkBAIC0zODc0LDYgJiM0Mzs0MDE3LDEwIEBAIHN0YXRpYyBib29sIGdldF9wYXJ0aWFsX25vZGVfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywKIAkJCQkgICAgJmFtcDtsYXN0LSZndDtzbGFiX2xpc3QpOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO24tJmd0O2xpc3RfbG9jaywgZmxhZ3MpOwomIzQzOwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2xhYiwgc2xhYjIsICZhbXA7ZGlzY2FyZCwgc2xhYl9saXN0KQomIzQzOwkJZGlzY2FyZF9zbGFiKHMsIHNsYWIpOwomIzQzOwogCXJldHVybiB0b3RhbF9mcmVlICZndDsgMDsKIH0KIApAQCAtMzg4NSwyMyAmIzQzOzQwMzIsMjkgQEAgc3RhdGljIHZvaWQgKmdldF9mcm9tX3BhcnRpYWxfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywKIAkJCQkgICBnZnBfdCBnZnBfZmxhZ3MsCiAJCQkJICAgY29uc3Qgc3RydWN0IHNsYWJfYWxsb2NfY29udGV4dCAqYWMpCiB7CiYjNDM7CWJvb2wgYWxsb3dfc3BpbiA9IGFsbG9jX2ZsYWdzX2FsbG93X3NwaW5uaW5nKGFjLSZndDthbGxvY19mbGFncyk7CiAJc3RydWN0IHNsYWIgKnNsYWIsICpzbGFiMjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXZvaWQgKm9iamVjdCA9IE5VTEw7CiYjNDM7CUxJU1RfSEVBRChkaXNjYXJkKTsKIAogCS8qCiAJICogUmFjeSBjaGVjay4gSWYgd2UgbWlzdGFrZW5seSBzZWUgbm8gcGFydGlhbCBzbGFicyB0aGVuIHdlCiAJICoganVzdCBhbGxvY2F0ZSBhbiBlbXB0eSBzbGFiLiBJZiB3ZSBtaXN0YWtlbmx5IHRyeSB0byBnZXQgYQogCSAqIHBhcnRpYWwgc2xhYiBhbmQgdGhlcmUgaXMgbm9uZSBhdmFpbGFibGUgdGhlbiBnZXRfZnJvbV9wYXJ0aWFsKCkKLQkgKiB3aWxsIHJldHVybiBOVUxMLgomIzQzOwkgKiB3aWxsIHJldHVybiBOVUxMLiBBbHNvIHRha2UgdGhlIHBhcmtlZF9zbGFicyBsbGlzdCBpbnRvIGFjY291bnQuCiAJICovCi0JaWYgKCFuIHx8ICFuLSZndDtucl9wYXJ0aWFsKQomIzQzOwlpZiAoIW4gfHwgKCFkYXRhX3JhY2Uobi0mZ3Q7bnJfcGFydGlhbCkgJmFtcDsmYW1wOyBsbGlzdF9lbXB0eSgmYW1wO24tJmd0O3BhcmtlZF9zbGFicykpKQogCQlyZXR1cm4gTlVMTDsKIAotCWlmIChhbGxvY19mbGFnc19hbGxvd19zcGlubmluZyhhYy0mZ3Q7YWxsb2NfZmxhZ3MpKQomIzQzOwlpZiAoYWxsb3dfc3BpbikKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtuLSZndDtsaXN0X2xvY2ssIGZsYWdzKTsKIAllbHNlIGlmICghc3Bpbl90cnlsb2NrX2lycXNhdmUoJmFtcDtuLSZndDtsaXN0X2xvY2ssIGZsYWdzKSkKIAkJcmV0dXJuIE5VTEw7CiYjNDM7CiYjNDM7CS8qIElmIHRoZXJlIGFyZSBwYXJrZWQgc2xhYnMsIG1vdmUgdGhlbSB0byB0aGUgcGFydGlhbCBsaXN0IGZpcnN0LiAqLwomIzQzOwl1bnBhcmtfc2xhYnMocywgbiwgYWxsb3dfc3BpbiA/ICZhbXA7ZGlzY2FyZCA6IE5VTEwpOwomIzQzOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzbGFiLCBzbGFiMiwgJmFtcDtuLSZndDtwYXJ0aWFsLCBzbGFiX2xpc3QpIHsKIAogCQlzdHJ1Y3QgZnJlZWxpc3RfY291bnRlcnMgb2xkLCBuZXc7CkBAIC0zOTM5LDYgJiM0Mzs0MDkyLDEwIEBAIHN0YXRpYyB2b2lkICpnZXRfZnJvbV9wYXJ0aWFsX25vZGUoc3RydWN0IGttZW1fY2FjaGUgKnMsCiAJCWJyZWFrOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7bi0mZ3Q7bGlzdF9sb2NrLCBmbGFncyk7CiYjNDM7CiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzbGFiLCBzbGFiMiwgJmFtcDtkaXNjYXJkLCBzbGFiX2xpc3QpCiYjNDM7CQlkaXNjYXJkX3NsYWIocywgc2xhYik7CiYjNDM7CiAJcmV0dXJuIG9iamVjdDsKIH0KIApAQCAtMzk5NCw4ICYjNDM7NDE1MSwxMyBAQCBzdGF0aWMgdm9pZCAqZ2V0X2Zyb21fYW55X3BhcnRpYWwoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcF9mbGFncywKIAogCQkJbiA9IGdldF9ub2RlKHMsIHpvbmVfdG9fbmlkKHpvbmUpKTsKIAomIzQzOwkJCS8qCiYjNDM7CQkJICogUGFya2VkIHNsYWJzIG1ha2UgdGhlIG5vZGUgd29ydGggdmlzaXRpbmcgZXZlbiBpZgomIzQzOwkJCSAqIG5yX3BhcnRpYWwgbG9va3MgbG93LgomIzQzOwkJCSAqLwogCQkJaWYgKG4gJmFtcDsmYW1wOyBjcHVzZXRfem9uZV9hbGxvd2VkKHpvbmUsIGdmcF9mbGFncykgJmFtcDsmYW1wOwotCQkJCQluLSZndDtucl9wYXJ0aWFsICZndDsgcy0mZ3Q7bWluX3BhcnRpYWwpIHsKJiM0MzsJCQkJCShuLSZndDtucl9wYXJ0aWFsICZndDsgcy0mZ3Q7bWluX3BhcnRpYWwgfHwKJiM0MzsJCQkJCSAhbGxpc3RfZW1wdHkoJmFtcDtuLSZndDtwYXJrZWRfc2xhYnMpKSkgewogCiAJCQkJdm9pZCAqb2JqZWN0ID0gZ2V0X2Zyb21fcGFydGlhbF9ub2RlKHMsIG4sCiAJCQkJCQkJCWdmcF9mbGFncywgYWMpOwpAQCAtNTcxOSw3ICYjNDM7NTg4MSw3IEBAIHN0YXRpYyB2b2lkIF9fc2xhYl9mcmVlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwKIAkJCXVuc2lnbmVkIGxvbmcgYWRkcikKIAogewotCWJvb2wgd2FzX2Z1bGw7CiYjNDM7CWJvb2wgd2FzX2Z1bGwsIHBhcmsgPSBmYWxzZTsKIAlzdHJ1Y3QgZnJlZWxpc3RfY291bnRlcnMgb2xkLCBuZXc7CiAJc3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbiA9IE5VTEw7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTU3MzEsMTAgJiM0Mzs1ODkzLDExIEBAIHN0YXRpYyB2b2lkIF9fc2xhYl9mcmVlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwKIAl9CiAKIAlkbyB7Ci0JCWlmICh1bmxpa2VseShuKSkgewomIzQzOwkJaWYgKHVubGlrZWx5KG4gJmFtcDsmYW1wOyAhcGFyaykpCiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7bi0mZ3Q7bGlzdF9sb2NrLCBmbGFncyk7Ci0JCQluID0gTlVMTDsKLQkJfQomIzQzOwomIzQzOwkJcGFyayA9IGZhbHNlOwomIzQzOwkJbiA9IE5VTEw7CiAKIAkJb2xkLmZyZWVsaXN0ID0gc2xhYi0mZ3Q7ZnJlZWxpc3Q7CiAJCW9sZC5jb3VudGVycyA9IHNsYWItJmd0O2NvdW50ZXJzOwpAQCAtNTc0OCw3NiAmIzQzOzU5MTEsMTE0IEBAIHN0YXRpYyB2b2lkIF9fc2xhYl9mcmVlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwKIAkJbmV3LmludXNlIC09IGNudDsKIAogCQkvKgotCQkgKiBNaWdodCBuZWVkIHRvIGJlIHRha2VuIG9mZiAoZHVlIHRvIGJlY29taW5nIGVtcHR5KSBvciBhZGRlZAotCQkgKiB0byAoZHVlIHRvIG5vdCBiZWluZyBmdWxsIGFueW1vcmUpIHRoZSBwYXJ0aWFsIGxpc3QuCi0JCSAqIFVubGVzcyBpdCYjMzk7cyBmcm96ZW4uCiYjNDM7CQkgKiBwYXJ0aWFsLSZndDtwYXJ0aWFsOiB0aGUgc2xhYiB3YXMgb24gdGhlIG5vZGUgcGFydGlhbCBsaXN0IGFuZAomIzQzOwkJICogd2lsbCBzdGlsbCBzdGF5IHRoZXJlLCBzbyB3ZSBuZWVkIG5vIGxpc3QgaGFuZGxpbmcgYW5kIG5vCiYjNDM7CQkgKiBsaXN0X2xvY2suCiYjNDM7CQkgKgomIzQzOwkJICogTm90ZSB0aGF0ICYjMzQ7Y29udGludWU7JiMzNDsgaW4gYSBkby13aGlsZSBnb2VzIG9uIHRvIGV2YWx1YXRlIHRoZQomIzQzOwkJICogY29uZGl0aW9uIGJlbG93LCBzbyB3ZSBkbyBwZXJmb3JtIHRoZSBmcmVlbGlzdCB1cGRhdGUuCiAJCSAqLwotCQlpZiAoIW5ldy5pbnVzZSB8fCB3YXNfZnVsbCkgewomIzQzOwkJaWYgKCF3YXNfZnVsbCAmYW1wOyZhbXA7IG5ldy5pbnVzZSkKJiM0MzsJCQljb250aW51ZTsKIAotCQkJbiA9IGdldF9ub2RlKHMsIHNsYWJfbmlkKHNsYWIpKTsKJiM0MzsJCS8qCiYjNDM7CQkgKiBUaGUgc2xhYiBtaWdodCBuZWVkIHRvIGJlIHRha2VuIG9mZiAoZHVlIHRvIGJlY29taW5nIGVtcHR5KQomIzQzOwkJICogb3IgYWRkZWQgdG8gKGR1ZSB0byBub3QgYmVpbmcgZnVsbCBhbnltb3JlKSB0aGUgcGFydGlhbAomIzQzOwkJICogbGlzdC4KJiM0MzsJCSAqCiYjNDM7CQkgKiBGb3IgdGhlIGZ1bGwgLSZndDsgcGFydGlhbC9lbXB0eSB0cmFuc2l0aW9uLCB1c2UKJiM0MzsJCSAqIHNwaW5fdHJ5bG9ja19pcnFzYXZlKCkgYW5kIHRoZSBwYXJraW5nIG1lY2hhbmlzbSB0byByZWR1Y2UKJiM0MzsJCSAqIGxvY2sgY29udGVudGlvbi4KJiM0MzsJCSAqCiYjNDM7CQkgKiBJZiB0aGUgY21weGNoZyBkb2VzIG5vdCBzdWNjZWVkIHRoZW4gd2Ugd2lsbCByZXRyeS4KJiM0MzsJCSAqLwomIzQzOwkJbiA9IGdldF9ub2RlKHMsIHNsYWJfbmlkKHNsYWIpKTsKJiM0MzsKJiM0MzsJCWlmICghd2FzX2Z1bGwpIHsKIAkJCS8qCi0JCQkgKiBTcGVjdWxhdGl2ZWx5IGFjcXVpcmUgdGhlIGxpc3RfbG9jay4KLQkJCSAqIElmIHRoZSBjbXB4Y2hnIGRvZXMgbm90IHN1Y2NlZWQgdGhlbiB3ZSBtYXkKLQkJCSAqIGRyb3AgdGhlIGxpc3RfbG9jayB3aXRob3V0IGFueSBwcm9jZXNzaW5nLgotCQkJICoKLQkJCSAqIE90aGVyd2lzZSB0aGUgbGlzdF9sb2NrIHdpbGwgc3luY2hyb25pemUgd2l0aAotCQkJICogb3RoZXIgcHJvY2Vzc29ycyB1cGRhdGluZyB0aGUgbGlzdCBvZiBzbGFicy4KJiM0MzsJCQkgKiBwYXJ0aWFsLSZndDtlbXB0eTogc3BlY3VsYXRpdmVseSBhY3F1aXJlIGxpc3RfbG9jawomIzQzOwkJCSAqIHByaW9yIHRvIGNtcHhjaGcoKSwgYXMgcGVyZm9ybWluZyBjbXB4Y2hnKCkgYmVmb3JlCiYjNDM7CQkJICogbG9jayBhY3F1aXNpdGlvbiByYWNlcyB3aXRoIGNvbmN1cnJlbnQgb3BlcmF0aW9ucwomIzQzOwkJCSAqIChlLmcuLCB0aGUgc2hyaW5rZXIpLgogCQkJICovCiAJCQlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO24tJmd0O2xpc3RfbG9jaywgZmxhZ3MpOwotCi0JCQlvbl9ub2RlX3BhcnRpYWwgPSBzbGFiX3Rlc3Rfbm9kZV9wYXJ0aWFsKHNsYWIpOwomIzQzOwkJfSBlbHNlIGlmICghc3Bpbl90cnlsb2NrX2lycXNhdmUoJmFtcDtuLSZndDtsaXN0X2xvY2ssIGZsYWdzKSkgewomIzQzOwkJCS8qCiYjNDM7CQkJICogZnVsbC0mZ3Q7cGFydGlhbC9lbXB0eTogdGhlIHNsYWIgaXMgZnVsbCwgc28gaXQgaXMgb24KJiM0MzsJCQkgKiBubyBsaXN0OyBpZiB0aGUgbGlzdF9sb2NrIGlzIGNvbnRlbmRlZCwgdGhlbiB3ZQomIzQzOwkJCSAqIHBhcmsgdGhlIHNsYWIgd2l0aG91dCB3YWl0aW5nIGZvciB0aGUgbG9jay4KJiM0MzsJCQkgKi8KJiM0MzsJCQlwYXJrID0gdHJ1ZTsKIAkJfQogCiAJfSB3aGlsZSAoIXNsYWJfdXBkYXRlX2ZyZWVsaXN0KHMsIHNsYWIsICZhbXA7b2xkLCAmYW1wO25ldywgJiMzNDtfX3NsYWJfZnJlZSYjMzQ7KSk7CiAKLQlpZiAobGlrZWx5KCFuKSkgewotCQkvKgotCQkgKiBXZSBkaWRuJiMzOTt0IHRha2UgdGhlIGxpc3RfbG9jayBiZWNhdXNlIHRoZSBzbGFiIHdhcyBhbHJlYWR5IG9uCi0JCSAqIHRoZSBwYXJ0aWFsIGxpc3QgYW5kIHdpbGwgcmVtYWluIHRoZXJlLgotCQkgKi8KJiM0MzsJLyogcGFydGlhbC0mZ3Q7cGFydGlhbDogd2UgZGlkbiYjMzk7dCB0YWtlIHRoZSBsaXN0X2xvY2suICovCiYjNDM7CWlmIChsaWtlbHkoIW4pKQogCQlyZXR1cm47Ci0JfQogCiAJLyoKLQkgKiBUaGlzIHNsYWIgd2FzIHBhcnRpYWxseSBlbXB0eSBidXQgbm90IG9uIHRoZSBwZXItbm9kZSBwYXJ0aWFsIGxpc3QsCi0JICogaW4gd2hpY2ggY2FzZSB3ZSBzaG91bGRuJiMzOTt0IG1hbmlwdWxhdGUgaXRzIGxpc3QsIGp1c3QgcmV0dXJuLgomIzQzOwkgKiBQYXJrIHRoZSBzbGFiLiBJZiB0aGlzIHBhcmsgbWFrZXMgdGhlIHBhcmtlZCBsbGlzdCBub24tZW1wdHksCiYjNDM7CSAqIHRoZW4gc2NoZWR1bGUgdW5wYXJrX3dvcmsuCiAJICovCiYjNDM7CWlmICh1bmxpa2VseShwYXJrKSkgewomIzQzOwkJaWYgKGxsaXN0X2FkZChzbGFiX3RvX3BhcmtlZF9sbG5vZGUoc2xhYiksICZhbXA7bi0mZ3Q7cGFya2VkX3NsYWJzKSkKJiM0MzsJCQlxdWV1ZV9kZWxheWVkX3dvcmsoZmx1c2h3cSwgJmFtcDtuLSZndDt1bnBhcmtfd29yaywKJiM0MzsJCQkJCSAgIFVOUEFSS19ERUxBWSk7CiYjNDM7CQlzdGF0KHMsIFBBUktfU0xBQik7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJb25fbm9kZV9wYXJ0aWFsID0gc2xhYl90ZXN0X25vZGVfcGFydGlhbChzbGFiKTsKJiM0MzsKIAlpZiAoIXdhc19mdWxsICZhbXA7JmFtcDsgIW9uX25vZGVfcGFydGlhbCkgewomIzQzOwkJLyoKJiM0MzsJCSAqIHBhcnRpYWwtJmd0O2VtcHR5LCBvZmZsaXN0OiB0aGUgc2xhYiBoYXMgYmVlbiB0YWtlbiBvZmYgdGhlCiYjNDM7CQkgKiBwYXJ0aWFsIGxpc3QgYnkgYSBidWxrIHJlZmlsbCwgb3IgcGFya2VkIGR1cmluZyBpdHMgZnVsbCAtJmd0OwomIzQzOwkJICogcGFydGlhbC9lbXB0eSB0cmFuc2l0aW9uLiBJdCB3aWxsIGJlIHB1dCBiYWNrIGJ5IG90aGVyIHBhdGhzLAomIzQzOwkJICogc28gdGhpcyBzbGFiJiMzOTtzIGxpc3QgaGFuZGxpbmcgaXMgbm90IG91cnMgdG8gZG8uCiYjNDM7CQkgKi8KIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO24tJmd0O2xpc3RfbG9jaywgZmxhZ3MpOwogCQlyZXR1cm47CiAJfQogCiAJLyoKLQkgKiBJZiBzbGFiIGJlY2FtZSBlbXB0eSwgc2hvdWxkIHdlIGFkZC9rZWVwIGl0IG9uIHRoZSBwYXJ0aWFsIGxpc3Qgb3Igd2UKLQkgKiBoYXZlIGVub3VnaD8KJiM0MzsJICogZnVsbC9wYXJ0aWFsLSZndDtlbXB0eSwgZXhjZWVkOiB3ZSBoYXZlIGVub3VnaCBwYXJ0aWFsIHNsYWJzIGFscmVhZHkuCiYjNDM7CSAqCiYjNDM7CSAqIFBhcmtlZCBzbGFicyBhcmUgYWxzbyBjb3VudGVkIGFzIHBhcnRpYWwgc2xhYnMuIFdlIGRvbiYjMzk7dAomIzQzOwkgKiBrZWVwIGFuIGV4YWN0IGNvdW50IG9mIHBhcmtlZCBzbGFicywgc28gd2UgdHJlYXQgYW55IHBhcmtlZAomIzQzOwkgKiBzbGFiIGFzIHJvdWdobHkgZXhjZWVkaW5nLgogCSAqLwotCWlmICh1bmxpa2VseSghbmV3LmludXNlICZhbXA7JmFtcDsgbi0mZ3Q7bnJfcGFydGlhbCAmZ3Q7PSBzLSZndDttaW5fcGFydGlhbCkpCi0JCWdvdG8gc2xhYl9lbXB0eTsKJiM0MzsJaWYgKHVubGlrZWx5KCFuZXcuaW51c2UgJmFtcDsmYW1wOyAobi0mZ3Q7bnJfcGFydGlhbCAmZ3Q7PSBzLSZndDttaW5fcGFydGlhbCB8fAomIzQzOwkJCQkgICAgIWxsaXN0X2VtcHR5KCZhbXA7bi0mZ3Q7cGFya2VkX3NsYWJzKSkpKSB7CiYjNDM7CQkvKiBwYXJ0aWFsLSZndDtlbXB0eSwgb25saXN0LCBleGNlZWQgKi8KJiM0MzsJCWlmIChsaWtlbHkoIXdhc19mdWxsKSkgewomIzQzOwkJCXJlbW92ZV9wYXJ0aWFsKG4sIHNsYWIpOwomIzQzOwkJCXN0YXQocywgRlJFRV9SRU1PVkVfUEFSVElBTCk7CiYjNDM7CQl9CiYjNDM7CQkvKiBlbHNlIGZ1bGwtJmd0O2VtcHR5LCBleGNlZWQ6IGl0IGlzIG9uIG5vIGxpc3QgdG8gcmVtb3ZlIGZyb20gKi8KJiM0MzsKJiM0MzsJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtuLSZndDtsaXN0X2xvY2ssIGZsYWdzKTsKJiM0MzsJCXN0YXQocywgRlJFRV9TTEFCKTsKJiM0MzsJCWRpc2NhcmRfc2xhYihzLCBzbGFiKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQogCiAJLyoKLQkgKiBPYmplY3RzIGxlZnQgaW4gdGhlIHNsYWIuIElmIGl0IHdhcyBub3Qgb24gdGhlIHBhcnRpYWwgbGlzdCBiZWZvcmUKLQkgKiB0aGVuIGFkZCBpdC4KJiM0MzsJICogQXQgdGhpcyBwb2ludCwgb25seSB0aHJlZSBjYXNlcyByZW1haW46CiYjNDM7CSAqICAgZnVsbC0mZ3Q7cGFydGlhbAomIzQzOwkgKiAgIGZ1bGwtJmd0O2VtcHR5LCBub3QgZXhjZWVkCiYjNDM7CSAqICAgcGFydGlhbC0mZ3Q7ZW1wdHksIG9ubGlzdCwgbm90IGV4Y2VlZAogCSAqLwomIzQzOwomIzQzOwkvKiBmdWxsLSZndDtwYXJ0aWFsOyBmdWxsLSZndDtlbXB0eSwgbm90IGV4Y2VlZCAqLwogCWlmICh1bmxpa2VseSh3YXNfZnVsbCkpIHsKIAkJYWRkX3BhcnRpYWwobiwgc2xhYiwgQUREX1RPX1RBSUwpOwogCQlzdGF0KHMsIEZSRUVfQUREX1BBUlRJQUwpOwogCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7bi0mZ3Q7bGlzdF9sb2NrLCBmbGFncyk7Ci0JcmV0dXJuOwotCi1zbGFiX2VtcHR5OgotCS8qCi0JICogVGhlIHNsYWIgY291bGQgaGF2ZSBhIHNpbmdsZSBvYmplY3QgYW5kIHRodXMgZ28gZnJvbSBmdWxsIHRvIGVtcHR5IGluCi0JICogYSBzaW5nbGUgZnJlZSwgYnV0IG1vcmUgbGlrZWx5IGl0IHdhcyBvbiB0aGUgcGFydGlhbCBsaXN0LiBSZW1vdmUgaXQuCi0JICovCi0JaWYgKGxpa2VseSghd2FzX2Z1bGwpKSB7Ci0JCXJlbW92ZV9wYXJ0aWFsKG4sIHNsYWIpOwotCQlzdGF0KHMsIEZSRUVfUkVNT1ZFX1BBUlRJQUwpOwotCX0KJiM0MzsJLyogZWxzZSBwYXJ0aWFsLSZndDtlbXB0eSwgb25saXN0LCBub3QgZXhjZWVkOiBpdCBzdGF5cyBvbiBwYXJ0aWFsIGxpc3QgKi8KIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtuLSZndDtsaXN0X2xvY2ssIGZsYWdzKTsKLQlzdGF0KHMsIEZSRUVfU0xBQik7Ci0JZGlzY2FyZF9zbGFiKHMsIHNsYWIpOwogfQogCiAvKgpAQCAtNzM1Nyw4ICYjNDM7NzU1OCwxMyBAQCBfX3JlZmlsbF9vYmplY3RzX2FueShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqKnAsIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG1pbgogCiAJCQluID0gZ2V0X25vZGUocywgem9uZV90b19uaWQoem9uZSkpOwogCiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBQYXJrZWQgc2xhYnMgbWFrZSB0aGUgbm9kZSB3b3J0aCB0cnlpbmcKJiM0MzsJCQkgKiBldmVuIGlmIG5yX3BhcnRpYWwgbG9va3MgbG93LgomIzQzOwkJCSAqLwogCQkJaWYgKCFuIHx8ICFjcHVzZXRfem9uZV9hbGxvd2VkKHpvbmUsIGdmcCkgfHwKLQkJCQkJbi0mZ3Q7bnJfcGFydGlhbCAmbHQ7PSBzLSZndDttaW5fcGFydGlhbCkKJiM0MzsJCQkJCShuLSZndDtucl9wYXJ0aWFsICZsdDs9IHMtJmd0O21pbl9wYXJ0aWFsICZhbXA7JmFtcDsKJiM0MzsJCQkJCSBsbGlzdF9lbXB0eSgmYW1wO24tJmd0O3BhcmtlZF9zbGFicykpKQogCQkJCWNvbnRpbnVlOwogCiAJCQlyID0gX19yZWZpbGxfb2JqZWN0c19ub2RlKHMsIHAsIGdmcCwgbWluLCBtYXgsIG4sCkBAIC03Njc5LDYgJiM0Mzs3ODg1LDggQEAgaW5pdF9rbWVtX2NhY2hlX25vZGUoc3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbikKIAluLSZndDtucl9wYXJ0aWFsID0gMDsKIAlzcGluX2xvY2tfaW5pdCgmYW1wO24tJmd0O2xpc3RfbG9jayk7CiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtuLSZndDtwYXJ0aWFsKTsKJiM0MzsJaW5pdF9sbGlzdF9oZWFkKCZhbXA7bi0mZ3Q7cGFya2VkX3NsYWJzKTsKJiM0MzsJSU5JVF9ERUxBWUVEX1dPUksoJmFtcDtuLSZndDt1bnBhcmtfd29yaywgdW5wYXJrX3dvcmtfZm4pOwogI2lmZGVmIENPTkZJR19TTFVCX0RFQlVHCiAJYXRvbWljX2xvbmdfc2V0KCZhbXA7bi0mZ3Q7bnJfc2xhYnMsIDApOwogCWF0b21pY19sb25nX3NldCgmYW1wO24tJmd0O3RvdGFsX29iamVjdHMsIDApOwpAQCAtNzgxMiw2ICYjNDM7ODAyMCw3IEBAIHN0YXRpYyB2b2lkIGZyZWVfa21lbV9jYWNoZV9ub2RlcyhzdHJ1Y3Qga21lbV9jYWNoZSAqcykKIAl9CiAKIAlmb3JfZWFjaF9rbWVtX2NhY2hlX25vZGUocywgbm9kZSwgbikgewomIzQzOwkJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZhbXA7bi0mZ3Q7dW5wYXJrX3dvcmspOwogCQlzLSZndDtwZXJfbm9kZVtub2RlXS5ub2RlID0gTlVMTDsKIAkJa21lbV9jYWNoZV9mcmVlKGttZW1fY2FjaGVfbm9kZSwgbik7CiAJfQpAQCAtODExMiw2ICYjNDM7ODMyMSwxMCBAQCBzdGF0aWMgdm9pZCBmcmVlX3BhcnRpYWwoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBrbWVtX2NhY2hlX25vZGUgKm4pCiAKIAlCVUdfT04oaXJxc19kaXNhYmxlZCgpKTsKIAlzcGluX2xvY2tfaXJxKCZhbXA7bi0mZ3Q7bGlzdF9sb2NrKTsKJiM0MzsKJiM0MzsJLyogVW5wYXJrIHNsYWJzIHNvIHRoZSB3YWxrIGNhbiBmaW5kIHRoZW0uICovCiYjNDM7CXVucGFya19zbGFicyhzLCBuLCBOVUxMKTsKJiM0MzsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2xhYiwgaCwgJmFtcDtuLSZndDtwYXJ0aWFsLCBzbGFiX2xpc3QpIHsKIAkJaWYgKCFzbGFiLSZndDtpbnVzZSkgewogCQkJcmVtb3ZlX3BhcnRpYWwobiwgc2xhYik7CkBAIC04MzgzLDYgJiM0Mzs4NTk2LDkgQEAgc3RhdGljIGludCBfX2ttZW1fY2FjaGVfZG9fc2hyaW5rKHN0cnVjdCBrbWVtX2NhY2hlICpzKQogCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7bi0mZ3Q7bGlzdF9sb2NrLCBmbGFncyk7CiAKJiM0MzsJCS8qIFBhcmtlZCBzbGFicyBhcmUgc2hyaW5rIGNhbmRpZGF0ZXMgYXMgd2VsbC4gKi8KJiM0MzsJCXVucGFya19zbGFicyhzLCBuLCBOVUxMKTsKJiM0MzsKIAkJLyoKIAkJICogQnVpbGQgbGlzdHMgb2Ygc2xhYnMgdG8gZGlzY2FyZCBvciBwcm9tb3RlLgogCQkgKgpAQCAtOTUyMiw2ICYjNDM7OTczOCw5IEBAIFNUQVRfQVRUUihGUkVFX0ZBU1RQQVRILCBmcmVlX2Zhc3RwYXRoKTsKIFNUQVRfQVRUUihGUkVFX1NMT1dQQVRILCBmcmVlX3Nsb3dwYXRoKTsKIFNUQVRfQVRUUihGUkVFX0FERF9QQVJUSUFMLCBmcmVlX2FkZF9wYXJ0aWFsKTsKIFNUQVRfQVRUUihGUkVFX1JFTU9WRV9QQVJUSUFMLCBmcmVlX3JlbW92ZV9wYXJ0aWFsKTsKJiM0MztTVEFUX0FUVFIoUEFSS19TTEFCLCBwYXJrX3NsYWIpOwomIzQzO1NUQVRfQVRUUihVTlBBUktfU0xBQiwgdW5wYXJrX3NsYWIpOwomIzQzO1NUQVRfQVRUUihVTlBBUktfRVZFTlQsIHVucGFya19ldmVudCk7CiBTVEFUX0FUVFIoQUxMT0NfU0xBQiwgYWxsb2Nfc2xhYik7CiBTVEFUX0FUVFIoQUxMT0NfTk9ERV9NSVNNQVRDSCwgYWxsb2Nfbm9kZV9taXNtYXRjaCk7CiBTVEFUX0FUVFIoRlJFRV9TTEFCLCBmcmVlX3NsYWIpOwpAQCAtOTYxMCw2ICYjNDM7OTgyOSw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlICpjb25zdCBzbGFiX2F0dHJzW10gPSB7CiAJJmFtcDtmcmVlX3Nsb3dwYXRoX2F0dHIuYXR0ciwKIAkmYW1wO2ZyZWVfYWRkX3BhcnRpYWxfYXR0ci5hdHRyLAogCSZhbXA7ZnJlZV9yZW1vdmVfcGFydGlhbF9hdHRyLmF0dHIsCiYjNDM7CSZhbXA7cGFya19zbGFiX2F0dHIuYXR0ciwKJiM0MzsJJmFtcDt1bnBhcmtfc2xhYl9hdHRyLmF0dHIsCiYjNDM7CSZhbXA7dW5wYXJrX2V2ZW50X2F0dHIuYXR0ciwKIAkmYW1wO2FsbG9jX3NsYWJfYXR0ci5hdHRyLAogCSZhbXA7YWxsb2Nfbm9kZV9taXNtYXRjaF9hdHRyLmF0dHIsCiAJJmFtcDtmcmVlX3NsYWJfYXR0ci5hdHRyLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNTo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTg4CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMzU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIENvcmUgU0xVQiBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IGZ1bmRhbWVudGFsbHkgYWx0ZXJzIHRoZSBTTFVCIGFsbG9jYXRvciwgc3BlY2lmaWNhbGx5IHRoZSBgbW0vc2x1Yi5jYCBmaWxlLiBUaGlzIGludHJvZHVjZXMgYSBuZXcgbWV0aG9kIGZvciAmIzM0O3BhcmtpbmcmIzM0OyBzbGFicyBvbiBhIGxvY2tsZXNzIGxpc3QgKGBsbGlzdGApIHdpdGhpbiB0aGUgZnJlZSBzbG93cGF0aCwgd2hpY2ggaXMgYSBzbWFydCBtb3ZlIHRvIG1pdGlnYXRlIGNvbnRlbnRpb24gb24gdGhlIGBsaXN0X2xvY2tgLiBUaGlzIGlzIGEgcHJldHR5IHNpZ25pZmljYW50IGNoYW5nZSwgcmVhbGx5IGRpZ2dpbmcgaW50byBhIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29tcG9uZW50LiBJdOKAmXMgYWRkaW5nIGBwYXJrZWRfc2xhYnNgIHRvIHRoZSBga21lbV9jYWNoZV9ub2RlYCBzdHJ1Y3R1cmUgYW5kIGEgZGVsYXllZCB3b3JrIGl0ZW0sIGB1bnBhcmtfd29ya2AsIHRvIGhhbmRsZSB1bnBhcmtpbmcgc2xhYnMgaWYgb3RoZXIgcHJvY2Vzc2VzIGRvbiYjMzk7dCB0YWtlIGNhcmUgb2YgaXQuIFRoZSBwYXRjaCB0b3VjaGVzIGEgd2hvbGUgaG9zdCBvZiBmdW5jdGlvbnM6IGBfX3NsYWJfZnJlZWAsIGBnZXRfcGFydGlhbF9ub2RlX2J1bGtgLCBgZ2V0X2Zyb21fcGFydGlhbF9ub2RlYCwgYGdldF9mcm9tX2FueV9wYXJ0aWFsYCwgYF9fcmVmaWxsX29iamVjdHNfYW55YCwgYGZyZWVfcGFydGlhbGAsIGFuZCBgX19rbWVtX2NhY2hlX2RvX3Nocmlua2AuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGRlbWFuZHMgY2FyZWZ1bCBmdXp6aW5nLiBUaGlzIGxldmVsIG9mIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbW9kaWZpY2F0aW9ucyAqYWx3YXlzKiB3YXJyYW50cyBpbnRlbnNlIHNjcnV0aW55LgoKTm93LCBsZXQmIzM5O3Mgc2VlIGFib3V0IHRoZSBjb25maWd1cmF0aW9uLiBTTFVCIGlzIHRoZSBkZWZhdWx0IGFsbG9jYXRvciB0aGVzZSBkYXlzLCByaWdodD8gTGV0IG1lIGp1c3QgbWFrZSBzdXJlIHRoZXJlIGFyZSBubyAqc3BlY2lmaWMqIGNvbmZpZyBvcHRpb25zIHRoYXQgdGhpcyBwYXRjaCBtaWdodCBiZSBnYXRlZCBiZWhpbmQuIE9rYXksIHNvIGl04oCZcyBtb2RpZnlpbmcgYG1tL3NsdWIuY2AgLSBlYXN5IGVub3VnaCB0byBjaGVjay4gYENPTkZJR19TTFVCYCBpcyB0aGUgcHJpbWFyeSBvbmUsIGFuZCBpdCYjMzk7cyBhbG1vc3QgYWx3YXlzIGVuYWJsZWQgbm93IHRoYXQgYENPTkZJR19TTEFCYCBpcyBoaXN0b3J5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZG9uJiMzOTt0IG1pc3MgYW55dGhpbmcgdGhvdWdoLiBgQ09ORklHX1NMVUJfREVCVUdg4oCmIHRoZSBwYXRjaCBzZWVtcyB0byB0b3VjaCBzb21lIHN0YXRzLCBidXQgbm90IHN0cmljdGx5IHVuZGVyIHRoYXQgb3B0aW9uLiBBaCwgcmlnaHQsIHRoZSBzdGF0cyBhcmUgcHJvYmFibHkgdW5kZXIgYENPTkZJR19TTFVCX1NUQVRTYC4gSeKAmWxsIGRvdWJsZS1jaGVjayBgbW0vc2x1Yi5jYCBmb3IgYFNUQVRfQVRUUmAgdG8gbWFrZSBzdXJlLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBwaWN0dXJlIG9mIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNTo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtTVEFUX0FUVFImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9zbHViLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc2x1Yi5jPTk3MTA9c3RhdGljIHZvaWQgY2xlYXJfc3RhdChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZW51bSBzdGF0X2l0ZW0gc2kpXG4tLVxubW0vc2x1Yi5jLTk3MTctXG5tbS9zbHViLmM6OTcxODojZGVmaW5lIFNUQVRfQVRUUihzaSwgdGV4dCkgXHRcdFx0XHRcdFxcXG5tbS9zbHViLmMtOTcxOS1zdGF0aWMgc3NpemVfdCB0ZXh0IyNfc2hvdyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgY2hhciAqYnVmKVx0XFxcbi0tXG5tbS9zbHViLmM9OTczMT1TTEFCX0FUVFIodGV4dCk7XHRcdFx0XHRcdFx0XFxcbm1tL3NsdWIuYy05NzMyLVxubW0vc2x1Yi5jOjk3MzM6U1RBVF9BVFRSKEFMTE9DX0ZBU1RQQVRILCBhbGxvY19mYXN0cGF0aCk7XG5tbS9zbHViLmM6OTczNDpTVEFUX0FUVFIoQUxMT0NfU0xPV1BBVEgsIGFsbG9jX3Nsb3dwYXRoKTtcbm1tL3NsdWIuYzo5NzM1OlNUQVRfQVRUUihGUkVFX1JDVV9TSEVBRiwgZnJlZV9yY3Vfc2hlYWYpO1xubW0vc2x1Yi5jOjk3MzY6U1RBVF9BVFRSKEZSRUVfUkNVX1NIRUFGX0ZBSUwsIGZyZWVfcmN1X3NoZWFmX2ZhaWwpO1xubW0vc2x1Yi5jOjk3Mzc6U1RBVF9BVFRSKEZSRUVfRkFTVFBBVEgsIGZyZWVfZmFzdHBhdGgpO1xubW0vc2x1Yi5jOjk3Mzg6U1RBVF9BVFRSKEZSRUVfU0xPV1BBVEgsIGZyZWVfc2xvd3BhdGgpO1xubW0vc2x1Yi5jOjk3Mzk6U1RBVF9BVFRSKEZSRUVfQUREX1BBUlRJQUwsIGZyZWVfYWRkX3BhcnRpYWwpO1xubW0vc2x1Yi5jOjk3NDA6U1RBVF9BVFRSKEZSRUVfUkVNT1ZFX1BBUlRJQUwsIGZyZWVfcmVtb3ZlX3BhcnRpYWwpO1xubW0vc2x1Yi5jOjk3NDE6U1RBVF9BVFRSKFBBUktfU0xBQiwgcGFya19zbGFiKTtcbm1tL3NsdWIuYzo5NzQyOlNUQVRfQVRUUihVTlBBUktfU0xBQiwgdW5wYXJrX3NsYWIpO1xubW0vc2x1Yi5jOjk3NDM6U1RBVF9BVFRSKFVOUEFSS19FVkVOVCwgdW5wYXJrX2V2ZW50KTtcbm1tL3NsdWIuYzo5NzQ0OlNUQVRfQVRUUihBTExPQ19TTEFCLCBhbGxvY19zbGFiKTtcbm1tL3NsdWIuYzo5NzQ1OlNUQVRfQVRUUihBTExPQ19OT0RFX01JU01BVENILCBhbGxvY19ub2RlX21pc21hdGNoKTtcbm1tL3NsdWIuYzo5NzQ2OlNUQVRfQVRUUihGUkVFX1NMQUIsIGZyZWVfc2xhYik7XG5tbS9zbHViLmM6OTc0NzpTVEFUX0FUVFIoT1JERVJfRkFMTEJBQ0ssIG9yZGVyX2ZhbGxiYWNrKTtcbm1tL3NsdWIuYzo5NzQ4OlNUQVRfQVRUUihDTVBYQ0hHX0RPVUJMRV9GQUlMLCBjbXB4Y2hnX2RvdWJsZV9mYWlsKTtcbm1tL3NsdWIuYzo5NzQ5OlNUQVRfQVRUUihTSEVBRl9GTFVTSCwgc2hlYWZfZmx1c2gpO1xubW0vc2x1Yi5jOjk3NTA6U1RBVF9BVFRSKFNIRUFGX1JFRklMTCwgc2hlYWZfcmVmaWxsKTtcbm1tL3NsdWIuYzo5NzUxOlNUQVRfQVRUUihTSEVBRl9BTExPQywgc2hlYWZfYWxsb2MpO1xubW0vc2x1Yi5jOjk3NTI6U1RBVF9BVFRSKFNIRUFGX0ZSRUUsIHNoZWFmX2ZyZWUpO1xubW0vc2x1Yi5jOjk3NTM6U1RBVF9BVFRSKEJBUk5fR0VULCBiYXJuX2dldCk7XG5tbS9zbHViLmM6OTc1NDpTVEFUX0FUVFIoQkFSTl9HRVRfRkFJTCwgYmFybl9nZXRfZmFpbCk7XG5tbS9zbHViLmM6OTc1NTpTVEFUX0FUVFIoQkFSTl9QVVQsIGJhcm5fcHV0KTtcbm1tL3NsdWIuYzo5NzU2OlNUQVRfQVRUUihCQVJOX1BVVF9GQUlMLCBiYXJuX3B1dF9mYWlsKTtcbm1tL3NsdWIuYzo5NzU3OlNUQVRfQVRUUihTSEVBRl9QUkVGSUxMX0ZBU1QsIHNoZWFmX3ByZWZpbGxfZmFzdCk7XG5tbS9zbHViLmM6OTc1ODpTVEFUX0FUVFIoU0hFQUZfUFJFRklMTF9TTE9XLCBzaGVhZl9wcmVmaWxsX3Nsb3cpO1xubW0vc2x1Yi5jOjk3NTk6U1RBVF9BVFRSKFNIRUFGX1BSRUZJTExfT1ZFUlNJWkUsIHNoZWFmX3ByZWZpbGxfb3ZlcnNpemUpO1xubW0vc2x1Yi5jOjk3NjA6U1RBVF9BVFRSKFNIRUFGX1JFVFVSTl9GQVNULCBzaGVhZl9yZXR1cm5fZmFzdCk7XG5tbS9zbHViLmM6OTc2MTpTVEFUX0FUVFIoU0hFQUZfUkVUVVJOX1NMT1csIHNoZWFmX3JldHVybl9zbG93KTtcbm1tL3NsdWIuYy05NzYyLSNlbmRpZlx0LyogQ09ORklHX1NMVUJfU1RBVFMgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNTo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDAyMQoJCQkJCQkJb3V0cHV0OiA5MQoJCQkJCQkJdGhvdWdodHM6IDE5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNMVUIgQ29kZSBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBTTFVCIHBhdGNoLiBGaXJzdCB0aGluZywgSSBzZWUgdGhlIHN0YXRzIGFyZSwgYXMgdXN1YWwsIGNvbnRyb2xsZWQgYnkgYENPTkZJR19TTFVCX1NUQVRTYC4gTm8gc3VycHJpc2VzIHRoZXJlLiBUaGUgY29yZSBTTFVCIGxvZ2ljIGl0c2VsZiwgYXMgSSYjMzk7ZCBleHBlY3QsIGlzIGFsbCByZXNpZGluZyBpbiBgbW0vc2x1Yi5jYC4gTm93LCB0aGUga2V5IGlzIHRvIHBpbnBvaW50IHdoYXQgKnNwZWNpZmljYWxseSogaGFzIGJlZW4gdG91Y2hlZCBpbiB0aGlzIHBhdGNoLiBMZXQmIzM5O3Mgc2VlLi4uIGl0IGxvb2tzIGxpa2UgdGhlIG1vZGlmaWNhdGlvbiBsaXN0IGluY2x1ZGVzIGBfX3NsYWJfZnJlZWAsIGBnZXRfcGFydGlhbF9ub2RlX2J1bGtgLCBgZ2V0X2Zyb21fcGFydGlhbF9ub2RlYCwgYGdldF9mcm9tX2FueV9wYXJ0aWFsYCwgYF9fcmVmaWxsX29iamVjdHNfYW55YCwgYGZyZWVfcGFydGlhbGAsIGFuZCBgX19rbWVtX2NhY2hlX2RvX3Nocmlua2AuIEludGVyZXN0aW5nLCBhbmQgbm93IHRoZXJlIGFyZSBuZXcgYWRkaXRpb25zOiBgdW5wYXJrX3NsYWJzYCBhbmQgYHVucGFya193b3JrX2ZuYC4gSGFuZyBvbiwgdGhlc2UgbmV3IGFkZGl0aW9ucyBhcmUgYHN0YXRpY2AuIEhtbSwgYW5kIGxldCBtZSBjaGVjayBvbiB0aGUgb3RoZXIgbW9kaWZpZWQgZnVuY3Rpb25zLiBBaCwgYF9fc2xhYl9mcmVlYCBpcyBhbHNvIGBzdGF0aWNgLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gbm90IG1pc3NpbmcgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zLCB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zIGNhbiBiZSBmb3VuZCBpbiBgbW0vc2x1Yi5jYC4gUmlnaHQsIEkgc2hvdWxkIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aG9zZSBub24tc3RhdGljIGVudHJpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTU6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XihzdGF0aWMgKT8odm9pZHxib29sfHZvaWQgXFwqfGludCkgKF9fc2xhYl9mcmVlfGdldF9wYXJ0aWFsX25vZGVfYnVsa3xnZXRfZnJvbV9wYXJ0aWFsX25vZGV8Z2V0X2Zyb21fYW55X3BhcnRpYWx8X19yZWZpbGxfb2JqZWN0c19hbnl8ZnJlZV9wYXJ0aWFsfF9fa21lbV9jYWNoZV9kb19zaHJpbmspXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc2x1Yi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3NsdWIuYz0zOTQ2PXN0YXRpYyBpbmxpbmUgYm9vbCBwZm1lbWFsbG9jX21hdGNoKHN0cnVjdCBzbGFiICpzbGFiLCBnZnBfdCBnZnBmbGFncyk7XG5tbS9zbHViLmMtMzk0Ny1cbm1tL3NsdWIuYzozOTQ4OnN0YXRpYyBib29sIGdldF9wYXJ0aWFsX25vZGVfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbm1tL3NsdWIuYy0zOTQ5LVx0XHRcdFx0ICBzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlICpuLFxuLS1cbm1tL3NsdWIuYz01ODUwPXN0YXRpYyBib29sIF9fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYixcbi0tXG5tbS9zbHViLmMtNTg3OC0gKi9cbm1tL3NsdWIuYzo1ODc5OnN0YXRpYyB2b2lkIF9fc2xhYl9mcmVlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYixcbm1tL3NsdWIuYy01ODgwLVx0XHRcdHZvaWQgKmhlYWQsIHZvaWQgKnRhaWwsIGludCBjbnQsXG4tLVxubW0vc2x1Yi5jPTgyODU9c3RhdGljIHZvaWQgbGlzdF9zbGFiX29iamVjdHMoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiKVxuLS1cbm1tL3NsdWIuYy04MzE2LSAqL1xubW0vc2x1Yi5jOjgzMTc6c3RhdGljIHZvaWQgZnJlZV9wYXJ0aWFsKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlICpuKVxubW0vc2x1Yi5jLTgzMTgte1xuLS1cbm1tL3NsdWIuYz04NTIxPXZvaWQgX19jaGVja19oZWFwX29iamVjdChjb25zdCB2b2lkICpwdHIsIHVuc2lnbmVkIGxvbmcgbixcbi0tXG5tbS9zbHViLmMtODU3Mi0gKi9cbm1tL3NsdWIuYzo4NTczOnN0YXRpYyBpbnQgX19rbWVtX2NhY2hlX2RvX3NocmluayhzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbm1tL3NsdWIuYy04NTc0LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNTo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTAwMQoJCQkJCQkJb3V0cHV0OiA2NQoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDaGVja2luZyBLZXkgUmV0cmlldmFsIE1ldGhvZHMqKgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB3ZSYjMzk7cmUgcHVsbGluZyBkYXRhIGZyb20gdGhlc2UgcGFydGlhbCBub2RlcywgZXNwZWNpYWxseSB3aXRoIHRoaXMgbmV3IGFyY2hpdGVjdHVyZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGdyYXNwIHRoZSBjb3JlIGxvZ2ljIGJlaGluZCBkYXRhIHJldHJpZXZhbC4KCk15IGZvY3VzIHNob3VsZCBiZSBvbiBob3cgd2UmIzM5O3JlIGdldHRpbmcgdGhlIG9iamVjdHMgd2UgbmVlZCwgYW5kIGhvdyB3ZSBoYW5kbGUgc2l0dWF0aW9ucyB3aGVyZSB0aGUgb2JqZWN0IGlzbiYjMzk7dCBpbW1lZGlhdGVseSBhdmFpbGFibGUuIEkgd2FudCB0byBtYWtlIHN1cmUgdGhlIHByb2Nlc3MgaXMgb3B0aW1pemVkLCByb2J1c3QsIGFuZCBoYW5kbGVzIGVkZ2UgY2FzZXMgZWZmZWN0aXZlbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTU6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKHN0YXRpYyApPyh2b2lkfGJvb2x8dm9pZCBcXCp8aW50KSAoZ2V0X2Zyb21fcGFydGlhbF9ub2RlfGdldF9mcm9tX2FueV9wYXJ0aWFsfF9fcmVmaWxsX29iamVjdHNfYW55KVxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3NsdWIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTU6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEyMzMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgYGdldF9mcm9tX3BhcnRpYWxfbm9kZWAgU2lnbmF0dXJlKioKCk9rYXksIHNvIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBleGFjdCBzaWduYXR1cmUgb2YgdGhpcyBgZ2V0X2Zyb21fcGFydGlhbF9ub2RlYCBmdW5jdGlvbi4gSSYjMzk7bSBhbHJlYWR5IGZhbWlsaWFyIHdpdGggdGhlIGdlbmVyYWwgY29uY2VwdCBvZiBwYXJ0aWFsIG5vZGVzIGFuZCBob3cgdGhleSYjMzk7cmUgdXNlZCBpbiB0aGUgc3lzdGVtLCBidXQgcHJlY2lzaW9uIGlzIGtleS4gV2hhdCBhcmUgdGhlIGlucHV0IHR5cGVzPyBBcmUgdGhlcmUgYW55IG9wdGlvbmFsIHBhcmFtZXRlcnMgb3IgZGVmYXVsdCB2YWx1ZXMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBBcmUgdGhlcmUgYW55IHNwZWNpZmljIGRhdGEgc3RydWN0dXJlcyBpdCBleHBlY3RzIGFzIGlucHV0LCBiZXlvbmQgdGhlIG9idmlvdXMgbm9kZSByZXByZXNlbnRhdGlvbj8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyB0byBkZXRlcm1pbmUgaWYgdGhlIGZ1bmN0aW9uIGlzIGJlaW5nIGNhbGxlZCBjb3JyZWN0bHkgaW4gdGhlIHJlbGV2YW50IGNvbnRleHQuIEFueSBwb3RlbnRpYWwgdHlwZSBtaXNtYXRjaGVzIG9yIGluY29ycmVjdCBhc3N1bXB0aW9ucyBtYWRlIGFib3V0IHRoZSBleHBlY3RlZCBmb3JtYXQgY291bGQgbGVhZCB0byBzdWJ0bGUsIGhhcmQtdG8tZGVidWcgaXNzdWVzIGRvd24gdGhlIGxpbmUuIEkgd2FudCB0byBjaGVjayBmb3IgZWRnZSBjYXNlcywgYW5kIHRoaW5rIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgZm9yIHBlcmZvcm1hbmNlIHVuZGVyIGxvYWQuIEkmIzM5O20gbG9va2luZyBhdCBkYXRhIGFsaWdubWVudCwgYW5kIG1lbW9yeSB1c2FnZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTU6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2V0X2Zyb21fcGFydGlhbF9ub2RlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc2x1Yi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3NsdWIuYz0zOTQ4PXN0YXRpYyBib29sIGdldF9wYXJ0aWFsX25vZGVfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbi0tXG5tbS9zbHViLmMtNDAyOS0gKi9cbm1tL3NsdWIuYzo0MDMwOnN0YXRpYyB2b2lkICpnZXRfZnJvbV9wYXJ0aWFsX25vZGUoc3RydWN0IGttZW1fY2FjaGUgKnMsXG5tbS9zbHViLmMtNDAzMS1cdFx0XHRcdCAgIHN0cnVjdCBrbWVtX2NhY2hlX25vZGUgKm4sXG4tLVxubW0vc2x1Yi5jLTQwODUtXG5tbS9zbHViLmM6NDA4NjpcdFx0fSB3aGlsZSAoIV9fc2xhYl91cGRhdGVfZnJlZWxpc3Qocywgc2xhYiwgXHUwMDI2b2xkLCBcdTAwMjZuZXcsIFwmIzM0O2dldF9mcm9tX3BhcnRpYWxfbm9kZVwmIzM0OykpO1xubW0vc2x1Yi5jLTQwODctXG4tLVxubW0vc2x1Yi5jPTQxMDU9c3RhdGljIHZvaWQgKmdldF9mcm9tX2FueV9wYXJ0aWFsKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnBfZmxhZ3MsXG4tLVxubW0vc2x1Yi5jLTQxNjEtXG5tbS9zbHViLmM6NDE2MjpcdFx0XHRcdHZvaWQgKm9iamVjdCA9IGdldF9mcm9tX3BhcnRpYWxfbm9kZShzLCBuLFxubW0vc2x1Yi5jLTQxNjMtXHRcdFx0XHRcdFx0XHRcdGdmcF9mbGFncywgYWMpO1xuLS1cbm1tL3NsdWIuYz00MTg1PXN0YXRpYyB2b2lkICpnZXRfZnJvbV9wYXJ0aWFsKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBpbnQgbm9kZSwgZ2ZwX3QgZmxhZ3MsXG4tLVxubW0vc2x1Yi5jLTQxOTMtXG5tbS9zbHViLmM6NDE5NDpcdG9iamVjdCA9IGdldF9mcm9tX3BhcnRpYWxfbm9kZShzLCBnZXRfbm9kZShzLCBzZWFyY2hub2RlKSwgZmxhZ3MsIGFjKTtcbm1tL3NsdWIuYy00MTk1LVx0aWYgKG9iamVjdCB8fCAobm9kZSAhPSBOVU1BX05PX05PREUgXHUwMDI2XHUwMDI2IChmbGFncyBcdTAwMjYgX19HRlBfVEhJU05PREUpKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTU6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjVtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE5MTMKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiA1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNMVUIgQWxsb2NhdG9yKioKCk9rYXksIHNvIGV2ZXJ5dGhpbmcgSSYjMzk7bSBsb29raW5nIGF0IGluIHRoaXMgY29kZSBzZWVtcyB0byBiZSBzdGF0aWMsIHdoaWNoIGlzbiYjMzk7dCB1bnVzdWFsIGZvciBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9ucy4gR2l2ZW4gdGhhdCB0aGUgU0xVQiBhbGxvY2F0b3IgaXMgc3VjaCBhIGNyaXRpY2FsIGNvbXBvbmVudCwgaXQmIzM5O3MgcHJldHR5IG11Y2ggYSBnaXZlbiB0aGF0IGl0JiMzOTtzIGdvaW5nIHRvIGJlIHN1YmplY3RlZCB0byBoZWF2eSBmdXp6aW5nLiBCdXQgSSBuZWVkIHRvIGJlIHRob3JvdWdoLiBJIHdvbmRlciBpZiB0aGVyZSBhcmUgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiBgbW0vc2x1Yi5jYCB0aGF0IEkgc2hvdWxkIHBheSBleHRyYSBhdHRlbnRpb24gdG8uIExldCBtZSBxdWlja2x5IHNjYW4gdGhhdCBmaWxlIGFuZCBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSB2aXNpYmxlIGJleW9uZCBpdHMgc3RhdGljIHNjb3BlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKHZvaWR8Ym9vbHx2b2lkIFxcKnxpbnQpIFthLXpBLVowLTlfXSYjNDM7XFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc2x1Yi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3NsdWIuYz00MTU9c3RhdGljIGlubGluZVxubW0vc2x1Yi5jOjQxNjp2b2lkIHN0YXRfYWRkKGNvbnN0IHN0cnVjdCBrbWVtX2NhY2hlICpzLCBlbnVtIHN0YXRfaXRlbSBzaSwgaW50IHYpXG5tbS9zbHViLmMtNDE3LXtcbi0tXG5tbS9zbHViLmM9OTgxPXN0YXRpYyBib29sIHNsYWJfYWRkX2t1bml0X2Vycm9ycyh2b2lkKVxuLS1cbm1tL3NsdWIuYy05OTYtXG5tbS9zbHViLmM6OTk3OmJvb2wgc2xhYl9pbl9rdW5pdF90ZXN0KHZvaWQpXG5tbS9zbHViLmMtOTk4LXtcbi0tXG5tbS9zbHViLmM9MTEzOT1zdGF0aWMgdm9pZCBwcmludF90cmFjayhjb25zdCBjaGFyICpzLCBzdHJ1Y3QgdHJhY2sgKnQsIHVuc2lnbmVkIGxvbmcgcHJfdGltZSlcbi0tXG5tbS9zbHViLmMtMTE1Ni1cbm1tL3NsdWIuYzoxMTU3OnZvaWQgcHJpbnRfdHJhY2tpbmcoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iamVjdClcbm1tL3NsdWIuYy0xMTU4LXtcbi0tXG5tbS9zbHViLmM9MTE2Nz1zdGF0aWMgdm9pZCBwcmludF9zbGFiX2luZm8oY29uc3Qgc3RydWN0IHNsYWIgKnNsYWIpXG4tLVxubW0vc2x1Yi5jLTExNzMtXG5tbS9zbHViLmM6MTE3NDp2b2lkIHNraXBfb3JpZ19zaXplX2NoZWNrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBjb25zdCB2b2lkICpvYmplY3QpXG5tbS9zbHViLmMtMTE3NS17XG4tLVxubW0vc2x1Yi5jPTE3NTQ9c3RhdGljXG5tbS9zbHViLmM6MTc1NTp2b2lkIHNldHVwX3NsYWJfZGVidWcoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICphZGRyKVxubW0vc2x1Yi5jLTE3NTYte1xuLS1cbm1tL3NsdWIuYz0yMDU2PXN0YXRpYyBpbmxpbmVcbm1tL3NsdWIuYzoyMDU3OnZvaWQgc2V0dXBfc2xhYl9kZWJ1ZyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHZvaWQgKmFkZHIpIHt9XG5tbS9zbHViLmMtMjA1OC1cbi0tXG5tbS9zbHViLmM9MjE3OD1zdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiKVxuLS1cbm1tL3NsdWIuYy0yMTgyLVxubW0vc2x1Yi5jOjIxODM6aW50IGFsbG9jX3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIsIHN0cnVjdCBrbWVtX2NhY2hlICpzLFxubW0vc2x1Yi5jLTIxODQtXHRcdFx0Z2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXG4tLVxubW0vc2x1Yi5jPTI1MjU9c3RhdGljIF9fZmFzdHBhdGhfaW5saW5lXG5tbS9zbHViLmM6MjUyNjpib29sIG1lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncyxcbm1tL3NsdWIuYy0yNTI3LVx0XHRcdFx0c2l6ZV90IHNpemUsIHZvaWQgKipwLFxuLS1cbm1tL3NsdWIuYz0yNTUwPXN0YXRpYyBfX2Zhc3RwYXRoX2lubGluZVxubW0vc2x1Yi5jOjI1NTE6dm9pZCBtZW1jZ19zbGFiX2ZyZWVfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHZvaWQgKipwLFxubW0vc2x1Yi5jLTI1NTItXHRcdFx0ICBpbnQgb2JqZWN0cylcbi0tXG5tbS9zbHViLmM9MjU3MT1zdGF0aWMgX19mYXN0cGF0aF9pbmxpbmVcbm1tL3NsdWIuYzoyNTcyOmJvb2wgbWVtY2dfc2xhYl9wb3N0X2NoYXJnZSh2b2lkICpwLCBnZnBfdCBmbGFncylcbm1tL3NsdWIuYy0yNTczLXtcbi0tXG5tbS9zbHViLmM9MjY4NT1zdGF0aWMgX19hbHdheXNfaW5saW5lXG5tbS9zbHViLmM6MjY4Njpib29sIHNsYWJfZnJlZV9ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICp4LCBib29sIGluaXQsXG5tbS9zbHViLmMtMjY4Ny1cdFx0ICAgIGJvb2wgYWZ0ZXJfcmN1X2RlbGF5KVxuLS1cbm1tL3NsdWIuYz0yNzcwPXN0YXRpYyBfX2Zhc3RwYXRoX2lubGluZVxubW0vc2x1Yi5jOjI3NzE6Ym9vbCBzbGFiX2ZyZWVfZnJlZWxpc3RfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqKmhlYWQsIHZvaWQgKip0YWlsLFxubW0vc2x1Yi5jLTI3NzItXHRcdFx0ICAgICBpbnQgKmNudClcbi0tXG5tbS9zbHViLmM9NDI4ND1zdGF0aWMgdm9pZCBmbHVzaF9yY3Vfc2hlYWYoc3RydWN0IHdvcmtfc3RydWN0ICp3KVxuLS1cbm1tL3NsdWIuYy00MzA3LS8qIG5lZWRlZCBmb3Iga3ZmcmVlX3JjdV9iYXJyaWVyKCkgKi9cbm1tL3NsdWIuYzo0MzA4OnZvaWQgZmx1c2hfcmN1X3NoZWF2ZXNfb25fY2FjaGUoc3RydWN0IGttZW1fY2FjaGUgKnMpXG5tbS9zbHViLmMtNDMwOS17XG4tLVxubW0vc2x1Yi5jLTQzMzgtXG5tbS9zbHViLmM6NDMzOTp2b2lkIGZsdXNoX2FsbF9yY3Vfc2hlYXZlcyh2b2lkKVxubW0vc2x1Yi5jLTQzNDAte1xuLS1cbm1tL3NsdWIuYz00ODA0PXN0YXRpYyBfX2Zhc3RwYXRoX2lubGluZVxubW0vc2x1Yi5jOjQ4MDU6Ym9vbCBzbGFiX3Bvc3RfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZmxhZ3MsIHNpemVfdCBzaXplLFxubW0vc2x1Yi5jLTQ4MDYtXHRcdFx0ICB2b2lkICoqcCwgY29uc3Qgc3RydWN0IHNsYWJfYWxsb2NfY29udGV4dCAqYWMpXG4tLVxubW0vc2x1Yi5jPTUxOTU9RVhQT1JUX1NZTUJPTChrbWVtX2NhY2hlX2FsbG9jX2xydV9ub3Byb2YpO1xubW0vc2x1Yi5jLTUxOTYtXG5tbS9zbHViLmM6NTE5Nzpib29sIGttZW1fY2FjaGVfY2hhcmdlKHZvaWQgKm9ianAsIGdmcF90IGdmcGZsYWdzKVxubW0vc2x1Yi5jLTUxOTgte1xuLS1cbm1tL3NsdWIuYz01MjcxPWttZW1fY2FjaGVfcHJlZmlsbF9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgc2l6ZSlcbi0tXG5tbS9zbHViLmMtNTM1My0gKi9cbm1tL3NsdWIuYzo1MzU0OnZvaWQga21lbV9jYWNoZV9yZXR1cm5fc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcCxcbm1tL3NsdWIuYy01MzU1LVx0XHRcdCAgICAgc3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmKVxuLS1cbm1tL3NsdWIuYy01NDExLSAqL1xubW0vc2x1Yi5jOjU0MTI6aW50IGttZW1fY2FjaGVfcmVmaWxsX3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnAsXG5tbS9zbHViLmMtNTQxMy1cdFx0XHQgICAgc3RydWN0IHNsYWJfc2hlYWYgKipzaGVhZnAsIHVuc2lnbmVkIGludCBzaXplKVxuLS1cbm1tL3NsdWIuYz02MjExPXN0YXRpYyBfX2Zhc3RwYXRoX2lubGluZVxubW0vc2x1Yi5jOjYyMTI6Ym9vbCBmcmVlX3RvX3BjcyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqZWN0LCBib29sIGFsbG93X3NwaW4pXG5tbS9zbHViLmMtNjIxMy17XG4tLVxubW0vc2x1Yi5jPTYzMDY9c3RhdGljIERFRklORV9XQUlUX09WRVJSSURFX01BUChrZnJlZV9yY3Vfc2hlYWZfbWFwLCBMRF9XQUlUX0NPTkZJRyk7XG5tbS9zbHViLmMtNjMwNy1cbm1tL3NsdWIuYzo2MzA4OmJvb2wgX19rZnJlZV9yY3Vfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iaiwgdW5zaWduZWQgaW50IGZyZWVfZmxhZ3MpXG5tbS9zbHViLmMtNjMwOS17XG4tLVxubW0vc2x1Yi5jPTY2NjU9c3RhdGljIHZvaWQgZGVmZXJfZnJlZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqaGVhZClcbi0tXG5tbS9zbHViLmMtNjY3Ny1cbm1tL3NsdWIuYzo2Njc4OnZvaWQgZGVmZXJfa2ZyZWVfcmN1KHN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgKmhlYWQpXG5tbS9zbHViLmMtNjY3OS17XG4tLVxubW0vc2x1Yi5jLTY2ODktLyogTXVzdCBiZSBjYWxsZWQgYmVmb3JlIGZsdXNoX3JjdV9zaGVhdmVzX29uX2NhY2hlKCkgKi9cbm1tL3NsdWIuYzo2NjkwOnZvaWQgZGVmZXJyZWRfd29ya19iYXJyaWVyKHZvaWQpXG5tbS9zbHViLmMtNjY5MS17XG4tLVxubW0vc2x1Yi5jPTY2OTg9c3RhdGljIF9fZmFzdHBhdGhfaW5saW5lXG5tbS9zbHViLmM6NjY5OTp2b2lkIHNsYWJfZnJlZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHZvaWQgKm9iamVjdCxcbm1tL3NsdWIuYy02NzAwLVx0ICAgICAgIHVuc2lnbmVkIGxvbmcgYWRkcilcbi0tXG5tbS9zbHViLmM9NjcxNz1zdGF0aWMgbm9pbmxpbmVcbm1tL3NsdWIuYzo2NzE4OnZvaWQgbWVtY2dfYWxsb2NfYWJvcnRfc2luZ2xlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmplY3QpXG5tbS9zbHViLmMtNjcxOS17XG4tLVxubW0vc2x1Yi5jPTY3Mjk9c3RhdGljIF9fZmFzdHBhdGhfaW5saW5lXG5tbS9zbHViLmM6NjczMDp2b2lkIHNsYWJfZnJlZV9idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdm9pZCAqaGVhZCxcbm1tL3NsdWIuYy02NzMxLVx0XHQgICAgdm9pZCAqdGFpbCwgdm9pZCAqKnAsIGludCBjbnQsIHVuc2lnbmVkIGxvbmcgYWRkcilcbi0tXG5tbS9zbHViLmM9Njc0Nj1zdGF0aWMgdm9pZCBzbGFiX2ZyZWVfYWZ0ZXJfcmN1X2RlYnVnKHN0cnVjdCByY3VfaGVhZCAqcmN1X2hlYWQpXG4tLVxubW0vc2x1Yi5jLTY3NzQtI2lmZGVmIENPTkZJR19LQVNBTl9HRU5FUklDXG5tbS9zbHViLmM6Njc3NTp2b2lkIF9fX2NhY2hlX2ZyZWUoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlLCB2b2lkICp4LCB1bnNpZ25lZCBsb25nIGFkZHIpXG5tbS9zbHViLmMtNjc3Ni17XG4tLVxubW0vc2x1Yi5jPTY3ODI9c3RhdGljIG5vaW5saW5lIHZvaWQgd2Fybl9mcmVlX2JhZF9vYmooc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iailcbi0tXG5tbS9zbHViLmMtNjgxMS0gKi9cbm1tL3NsdWIuYzo2ODEyOnZvaWQga21lbV9jYWNoZV9mcmVlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICp4KVxubW0vc2x1Yi5jLTY4MTMte1xuLS1cbm1tL3NsdWIuYz02OTI2PXN0YXRpYyB2b2lkIGZyZWVfbGFyZ2Vfa21hbGxvYyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdm9pZCAqb2JqZWN0KVxuLS1cbm1tL3NsdWIuYy02OTUxLSAqL1xubW0vc2x1Yi5jOjY5NTI6dm9pZCBrdmZyZWVfcmN1X2NiKHN0cnVjdCByY3VfaGVhZCAqaGVhZClcbm1tL3NsdWIuYy02OTUzLXtcbi0tXG5tbS9zbHViLmMtNjk3Ni0gKi9cbm1tL3NsdWIuYzo2OTc3OnZvaWQga2ZyZWUoY29uc3Qgdm9pZCAqb2JqZWN0KVxubW0vc2x1Yi5jLTY5Nzgte1xuLS1cbm1tL3NsdWIuYz03MDAwPUVYUE9SVF9TWU1CT0woa2ZyZWUpO1xuLS1cbm1tL3NsdWIuYy03MDEwLSAqL1xubW0vc2x1Yi5jOjcwMTE6dm9pZCBrZnJlZV9ub2xvY2soY29uc3Qgdm9pZCAqb2JqZWN0KVxubW0vc2x1Yi5jLTcwMTIte1xuLS1cbm1tL3NsdWIuYz03MjQzPUVYUE9SVF9TWU1CT0woX19rdm1hbGxvY19ub2RlX25vcHJvZik7XG4tLVxubW0vc2x1Yi5jLTcyNTQtICovXG5tbS9zbHViLmM6NzI1NTp2b2lkIGt2ZnJlZShjb25zdCB2b2lkICphZGRyKVxubW0vc2x1Yi5jLTcyNTYte1xuLS1cbm1tL3NsdWIuYz03MjYyPUVYUE9SVF9TWU1CT0woa3ZmcmVlKTtcbi0tXG5tbS9zbHViLmMtNzI3MC0gKi9cbm1tL3NsdWIuYzo3MjcxOnZvaWQga3ZmcmVlX2F0b21pYyhjb25zdCB2b2lkICphZGRyKVxubW0vc2x1Yi5jLTcyNzIte1xuLS1cbm1tL3NsdWIuYz03Mjc4PUVYUE9SVF9TWU1CT0woa3ZmcmVlX2F0b21pYyk7XG4tLVxubW0vc2x1Yi5jLTcyODgtICovXG5tbS9zbHViLmM6NzI4OTp2b2lkIGt2ZnJlZV9zZW5zaXRpdmUoY29uc3Qgdm9pZCAqYWRkciwgc2l6ZV90IGxlbilcbm1tL3NsdWIuYy03MjkwLXtcbi0tXG5tbS9zbHViLmM9NzM0Nz1zdGF0aWMgaW5saW5lXG5tbS9zbHViLmM6NzM0ODppbnQgYnVpbGRfZGV0YWNoZWRfZnJlZWxpc3Qoc3RydWN0IGttZW1fY2FjaGUgKnMsIHNpemVfdCBzaXplLFxubW0vc2x1Yi5jLTczNDktXHRcdFx0ICAgIHZvaWQgKipwLCBzdHJ1Y3QgZGV0YWNoZWRfZnJlZWxpc3QgKmRmKVxuLS1cbm1tL3NsdWIuYz03NDEyPXN0YXRpYyB2b2lkIF9fa21lbV9jYWNoZV9mcmVlX2J1bGsoc3RydWN0IGttZW1fY2FjaGUgKnMsIHNpemVfdCBzaXplLCB2b2lkICoqcClcbi0tXG5tbS9zbHViLmMtNzQzMi0vKiBOb3RlIHRoYXQgaW50ZXJydXB0cyBtdXN0IGJlIGVuYWJsZWQgd2hlbiBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uICovXG5tbS9zbHViLmM6NzQzMzp2b2lkIGttZW1fY2FjaGVfZnJlZV9idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzaXplX3Qgc2l6ZSwgdm9pZCAqKnApXG5tbS9zbHViLmMtNzQzNC17XG4tLVxubW0vc2x1Yi5jPTc2Mzc9c3RhdGljIGJvb2wgX19rbWVtX2NhY2hlX2FsbG9jX2J1bGsoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGZsYWdzLFxuLS1cbm1tL3NsdWIuYy03Njg2LSAqL1xubW0vc2x1Yi5jOjc2ODc6Ym9vbCBrbWVtX2NhY2hlX2FsbG9jX2J1bGtfbm9wcm9mKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncyxcbm1tL3NsdWIuYy03Njg4LVx0XHRzaXplX3Qgc2l6ZSwgdm9pZCAqKnApXG4tLVxubW0vc2x1Yi5jPTgwMDU9c3RhdGljIHZvaWQgZnJlZV9rbWVtX2NhY2hlX25vZGVzKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxuLS1cbm1tL3NsdWIuYy04MDI4LVxubW0vc2x1Yi5jOjgwMjk6dm9pZCBfX2ttZW1fY2FjaGVfcmVsZWFzZShzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbm1tL3NsdWIuYy04MDMwLXtcbi0tXG5tbS9zbHViLmM9ODMxNz1zdGF0aWMgdm9pZCBmcmVlX3BhcnRpYWwoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBrbWVtX2NhY2hlX25vZGUgKm4pXG4tLVxubW0vc2x1Yi5jLTgzNDEtXG5tbS9zbHViLmM6ODM0Mjpib29sIF9fa21lbV9jYWNoZV9lbXB0eShzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbm1tL3NsdWIuYy04MzQzLXtcbi0tXG5tbS9zbHViLmMtODM1NS0gKi9cbm1tL3NsdWIuYzo4MzU2OmludCBfX2ttZW1fY2FjaGVfc2h1dGRvd24oc3RydWN0IGttZW1fY2FjaGUgKnMpXG5tbS9zbHViLmMtODM1Ny17XG4tLVxubW0vc2x1Yi5jLTgzODMtI2lmZGVmIENPTkZJR19QUklOVEtcbm1tL3NsdWIuYzo4Mzg0OnZvaWQgX19rbWVtX29ial9pbmZvKHN0cnVjdCBrbWVtX29ial9pbmZvICprcHAsIHZvaWQgKm9iamVjdCwgc3RydWN0IHNsYWIgKnNsYWIpXG5tbS9zbHViLmMtODM4NS17XG4tLVxubW0vc2x1Yi5jPTg1MDg9X19jb3JlX3BhcmFtX2NiKHNsYWJfc3RyaWN0X251bWEsIFx1MDAyNnBhcmFtX29wc19zbGFiX3N0cmljdF9udW1hLCBOVUxMLCAwKTtcbi0tXG5tbS9zbHViLmMtODUyMC0gKi9cbm1tL3NsdWIuYzo4NTIxOnZvaWQgX19jaGVja19oZWFwX29iamVjdChjb25zdCB2b2lkICpwdHIsIHVuc2lnbmVkIGxvbmcgbixcbm1tL3NsdWIuYy04NTIyLVx0XHRcdCBjb25zdCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgYm9vbCB0b191c2VyKVxuLS1cbm1tL3NsdWIuYz04NTczPXN0YXRpYyBpbnQgX19rbWVtX2NhY2hlX2RvX3NocmluayhzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbi0tXG5tbS9zbHViLmMtODY0NC1cbm1tL3NsdWIuYzo4NjQ1OmludCBfX2ttZW1fY2FjaGVfc2hyaW5rKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxubW0vc2x1Yi5jLTg2NDYte1xuLS1cbm1tL3NsdWIuYz04OTIxPXZvaWQgX19pbml0IGttZW1fY2FjaGVfaW5pdF9sYXRlKHZvaWQpXG4tLVxubW0vc2x1Yi5jLTg5MzAtXG5tbS9zbHViLmM6ODkzMTppbnQgZG9fa21lbV9jYWNoZV9jcmVhdGUoc3RydWN0IGttZW1fY2FjaGUgKnMsIGNvbnN0IGNoYXIgKm5hbWUsXG5tbS9zbHViLmMtODkzMi1cdFx0XHQgdW5zaWduZWQgaW50IHNpemUsIHN0cnVjdCBrbWVtX2NhY2hlX2FyZ3MgKmFyZ3MsXG4tLVxubW0vc2x1Yi5jPTk5Njg9c3RhdGljIGludCBzeXNmc19zbGFiX2FkZChzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbi0tXG5tbS9zbHViLmMtMTAwMTYtXG5tbS9zbHViLmM6MTAwMTc6dm9pZCBzeXNmc19zbGFiX3VubGluayhzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbm1tL3NsdWIuYy0xMDAxOC17XG4tLVxubW0vc2x1Yi5jLTEwMDIyLVxubW0vc2x1Yi5jOjEwMDIzOnZvaWQgc3lzZnNfc2xhYl9yZWxlYXNlKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxubW0vc2x1Yi5jLTEwMDI0LXtcbi0tXG5tbS9zbHViLmM9MTAwMzg9c3RhdGljIHN0cnVjdCBzYXZlZF9hbGlhcyAqYWxpYXNfbGlzdDtcbm1tL3NsdWIuYy0xMDAzOS1cbm1tL3NsdWIuYzoxMDA0MDppbnQgc3lzZnNfc2xhYl9hbGlhcyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgY29uc3QgY2hhciAqbmFtZSlcbm1tL3NsdWIuYy0xMDA0MS17XG4tLVxubW0vc2x1Yi5jPTEwMzAyPXN0YXRpYyB2b2lkIGRlYnVnZnNfc2xhYl9hZGQoc3RydWN0IGttZW1fY2FjaGUgKnMpXG4tLVxubW0vc2x1Yi5jLTEwMzE3LVxubW0vc2x1Yi5jOjEwMzE4OnZvaWQgZGVidWdmc19zbGFiX3JlbGVhc2Uoc3RydWN0IGttZW1fY2FjaGUgKnMpXG5tbS9zbHViLmMtMTAzMTkte1xuLS1cbm1tL3NsdWIuYz0xMDMyNj1zdGF0aWMgdm9pZCBfX2luaXQgc2xhYl9kZWJ1Z2ZzX3Jvb3RfaW5pdCh2b2lkKVxuLS1cbm1tL3NsdWIuYy0xMDMzNC0jaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcbm1tL3NsdWIuYzoxMDMzNTp2b2lkIGdldF9zbGFiaW5mbyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWJpbmZvICpzaW5mbylcbm1tL3NsdWIuYy0xMDMzNi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE1OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xMm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjMwMAoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDQ1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgU0xVQiBQYXRjaCBDb3ZlcmFnZSBmb3IgRnV6emluZyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byB0aGUgU0xVQiBjb3JlLiBNeSBwcmltYXJ5IGNvbmNlcm4gaGVyZSBpcyBob3cgdG8gYmVzdCB0ZXN0IHRoZSBtb2RpZmllZCBsb2dpYyB3aXRob3V0IGdldHRpbmcgc2tld2VkIHJlc3VsdHMgZnJvbSBmdXp6aW5nIGV4dHJlbWVseSBjb21tb24gaG90IHBhdGhzLiBUaGUgcHJvbXB0IHNwZWNpZmljYWxseSB0ZWxscyBtZSB0byBhdm9pZCB0aG9zZSBhbmQgZm9jdXMgb24gZGlzdGluY3QgQVBJIGVudHJ5IHBvaW50cy4gUmlnaHQsIHNvIEkmIzM5O3ZlIGdvdCB0byBmaW5kIHRoZSByaWdodCBlbnRyeSBwb2ludHMgdGhhdCAqdHJpZ2dlciogdGhlIG5ldyBsb2dpYyAoYHVucGFya19zbGFic2Agc3BlY2lmaWNhbGx5KSwgYnV0IGFyZW4mIzM5O3QgdGhlbXNlbHZlcyBjb25zdGFudGx5IGhhbW1lcmVkLgoKTGV0JiMzOTtzIHNlZS4uLiB0aGUgY29kZSBmbG93LiBga2ZyZWVgLCBga21lbV9jYWNoZV9mcmVlYCwgdGhlIGJ1bGsgYWxsb2MvZnJlZSBmdW5jdGlvbnMuLi4gdGhvc2UgYXJlIGFsbCBvdXQuIFRoZXkmIzM5O3JlIGJhc2ljYWxseSB0aGUgZW5naW5lIHJvb20gb2YgbWVtb3J5IG1hbmFnZW1lbnQuIExpc3RpbmcgdGhlbSB3b3VsZCBiZSB1c2VsZXNzLiBUaGUgcHJvbXB0IGlzIHZlcnkgc3BlY2lmaWMgYWJvdXQgdGhhdCwgYW5kIEkgYWdyZWUsIHNrZXdpbmcgaXMgdGhlIGVuZW15IG9mIHVzZWZ1bCBmdXp6aW5nLgoKSG1tLCB0aGlua2luZy4uLiBJIHJlbWVtYmVyIHNvbWUgbGVzcy1mcmVxdWVudGx5IGNhbGxlZCBmdW5jdGlvbnMuIExldCBtZSBjaGVjay4uLiBBaCwgYF9fa21lbV9jYWNoZV9zaHJpbmtgLCB0aGF0IGNhbGxzIGBfX2ttZW1fY2FjaGVfZG9fc2hyaW5rYCwgd2hpY2ggaGl0cyBgdW5wYXJrX3NsYWJzYC4gVGhhdCBsb29rcyBwcm9taXNpbmcuIGBfX2ttZW1fY2FjaGVfZW1wdHlgIGNhbGxzIGBmcmVlX3BhcnRpYWxgIHdoaWNoLCBhZ2FpbiwgY2FsbHMgYHVucGFya19zbGFic2AuIEFuZCBgX19rbWVtX2NhY2hlX3NodXRkb3duYCBjYWxscyBgZnJlZV9wYXJ0aWFsYCBhcyB3ZWxsLgoKTm93LCBhcmUgdGhlc2UgdGhlIHJpZ2h0IGVudHJ5IHBvaW50cz8gQXJlIHRoZXkgbm9uLXN0YXRpYyBmdW5jdGlvbnM/IExldCBtZSB2ZXJpZnk6IFl1cCwgYGludCBfX2ttZW1fY2FjaGVfc2hyaW5rKHN0cnVjdCBrbWVtX2NhY2hlICpzKWAsIHRoYXQmIzM5O3MgZ29vZC4gQW5kIGBpbnQgX19rbWVtX2NhY2hlX3NodXRkb3duKHN0cnVjdCBrbWVtX2NhY2hlICpzKWAuIEFuZCBgYm9vbCBfX2ttZW1fY2FjaGVfZW1wdHkoc3RydWN0IGttZW1fY2FjaGUgKnMpYC4gRXhjZWxsZW50LiBUaGV5IGFyZSBub24tc3RhdGljIGFuZCB0aGV5JiMzOTtyZSBkaXJlY3RseSByZWxhdGVkIHRvIHRoZSBjb3JlIGxvZ2ljIG9mIHRoZSBwYXRjaC4gVGhvc2Ugc2VlbSB0byBiZSBpZGVhbCBjYW5kaWRhdGVzLCBiZWNhdXNlIHRoZXkmIzM5O3JlIG5vdCBob3QgcGF0aHMsIGJ1dCBzdGlsbCBleGVyY2lzZSB0aGUgbmV3IGNvZGUuCgpSaWdodCwgbGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGF0IHRob3NlIGFyZSB0aGUgcmlnaHQgY2FsbHMuIFRoZW4sIGxldCYjMzk7cyBtb3ZlIG9uIHRvIGFjdHVhbGx5IHZlcmlmeWluZyB0aGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNjowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKGludHxib29sKSBfX2ttZW1fY2FjaGVfKHNocmlua3xzaHV0ZG93bnxlbXB0eSlcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9zbHViLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc2x1Yi5jPTgzMTc9c3RhdGljIHZvaWQgZnJlZV9wYXJ0aWFsKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlICpuKVxuLS1cbm1tL3NsdWIuYy04MzQxLVxubW0vc2x1Yi5jOjgzNDI6Ym9vbCBfX2ttZW1fY2FjaGVfZW1wdHkoc3RydWN0IGttZW1fY2FjaGUgKnMpXG5tbS9zbHViLmMtODM0My17XG4tLVxubW0vc2x1Yi5jLTgzNTUtICovXG5tbS9zbHViLmM6ODM1NjppbnQgX19rbWVtX2NhY2hlX3NodXRkb3duKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxubW0vc2x1Yi5jLTgzNTcte1xuLS1cbm1tL3NsdWIuYz04NTczPXN0YXRpYyBpbnQgX19rbWVtX2NhY2hlX2RvX3NocmluayhzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbi0tXG5tbS9zbHViLmMtODY0NC1cbm1tL3NsdWIuYzo4NjQ1OmludCBfX2ttZW1fY2FjaGVfc2hyaW5rKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxubW0vc2x1Yi5jLTg2NDYte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNjowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzQ5MQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS2VybmVsIE1lbW9yeSBNYW5hZ2VtZW50IEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBsaXN0IG9mIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGFnYWluLiBUaGUgaW5pdGlhbCBwcmVtaXNlIGlzIHNvbGlkOyB5ZXMsIHRoZSBmdW5jdGlvbnMgd2UmIzM5O3JlIGFmdGVyIGFyZSBnZW5lcmFsbHkgbm9uLXN0YXRpYy4gTm93LCBJJiMzOTttIHRyeWluZyB0byByZWZpbmUgdGhlIGxpc3QgZm9yIHJlbGV2YW5jZSBhbmQgdGhpcyBpcyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLiBJIHRob3VnaHQgYWJvdXQgYHVucGFya193b3JrX2ZuYCwgYnV0IHRoYXQmIzM5O3MgYSB3b3JrcXVldWUgZnVuY3Rpb24g4oCTIHN0YXRpYyBhbmQgbm90IGRpcmVjdGx5IGNhbGxhYmxlLiBOb3QgcmVsZXZhbnQgaGVyZSwgc28gbGV0JiMzOTtzIG1vdmUgb24uCgpUaGUgY29yZSBvZiB0aGUgb2JqZWN0IGRlYWxsb2NhdGlvbiBwcm9jZXNzIGlzIGNsZWFybHkgd2l0aGluIGBfX3NsYWJfZnJlZWAuIEl0JiMzOTtzIGNhbGxlZCBieSBga2ZyZWVgIGFuZCBga21lbV9jYWNoZV9mcmVlYCwgdHdvICp2ZXJ5KiBob3QgcGF0aHMuIFdlJiMzOTtyZSBleHBsaWNpdGx5IHRyeWluZyB0byBleGNsdWRlIHRoZXNlIHNpbmNlIHRoZXNlIGFyZSBiYXNpYyBmdW5jdGlvbnMsIGJ1dCBvbmVzIHRoYXQgYXJlIHNvIGNvbW1vbmx5IHVzZWQgYXMgdG8gbm90IGJlIHVzZWZ1bCBpbiB0aGlzIGNvbnRleHQuCgpIbW0sIHNvLCB3aGF0IGVsc2UgaXMgb3V0IHRoZXJlIHRoYXQgaXMgKm5vdCogc3RhdGljPyBMZXQgbWUgc2VlLi4uIEkmIzM5O3ZlIGdvdCBpdCEgYGttZW1fY2FjaGVfc2hyaW5rYCwgd2hpY2gsIGNvbnZlbmllbnRseSwgd3JhcHMgYF9fa21lbV9jYWNoZV9zaHJpbmtgLCBpcyBhIHByaW1lIGNhbmRpZGF0ZS4gSXQmIzM5O3Mgbm90IGEgaG90IHBhdGgsIGJ1dCByZWxhdGVkIHRvIHRoZSBzbGFiIGFsbG9jYXRvci4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBpdCYjMzk7cyBsb2NhdGVkIGluIGBtbS9zbGFiX2NvbW1vbi5jYCB0byBjb25maXJtIGl0IGZpdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE2OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15pbnQga21lbV9jYWNoZV9zaHJpbmtcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc2xhYl9jb21tb24uYz01OTg9RVhQT1JUX1NZTUJPTChrbWVtX2NhY2hlX2Rlc3Ryb3kpO1xuLS1cbm1tL3NsYWJfY29tbW9uLmMtNjA4LSAqL1xubW0vc2xhYl9jb21tb24uYzo2MDk6aW50IGttZW1fY2FjaGVfc2hyaW5rKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXApXG5tbS9zbGFiX2NvbW1vbi5jLTYxMC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE2OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MDMyCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMzcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBDb2RlIENoYW5nZXMqKgoKT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIGBrbWVtX2NhY2hlX3Nocmlua2AgaXMgaW4gYG1tL3NsYWJfY29tbW9uLmNgLCBhbmQgYF9fa21lbV9jYWNoZV9zaHJpbmtgIGlzIGluIGBtbS9zbHViLmNgLiBJJiMzOTtsbCBhbHNvIGFkZCBgX19rbWVtX2NhY2hlX3NodXRkb3duYCBhbmQgYF9fa21lbV9jYWNoZV9lbXB0eWAgdG8gdGhlIGxpc3QsIGFzIEkgYW0gdHJ5aW5nIHRvIGxpc3QgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyBwcm9jZXNzLgoKSG9sZCBvbiwgdGhlIHBhdGNoIHRvdWNoZXMgYGdldF9mcm9tX2FueV9wYXJ0aWFsYCBhbmQgYF9fcmVmaWxsX29iamVjdHNfYW55YCB0b28uIFRob3NlIGFyZSBpbnZvbHZlZCBpbiBhbGxvY2F0aW9uLCBhbmQgdGhhdCYjMzk7cyBhIGhvdCBwYXRoLiBObyBuZWVkIHRvIGxpc3QgYWxsb2NhdGlvbiBmdW5jdGlvbnMuCgpBcmUgdGhlcmUgYW55IGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGhlcmU/IEdpdmVuIHRoZSBjaGFuZ2VzIGFyZSBpbiBgbW0vc2x1Yi5jYCwgYW5kIFNMVUIgaXMgdGhlIGRlZmF1bHQgc2xhYiBhbGxvY2F0b3Igbm93LCBpdCBzZWVtcyB0aGlzIGlzIGNvcmUgbG9naWMuIEJ1dCB3YWl0LCBgQ09ORklHX1NMVUJfU1RBVFNgIGlzIG1vZGlmaWVkIHRvIGFkZCBzdGF0cywgYnV0IHRoZSBjb3JlIGxvZ2ljIGl0c2VsZiBpc24mIzM5O3QgZ2F0ZWQgYnkgdGhhdCBjb25maWcuIFNvLCBJIGRvbiYjMzk7dCBuZWVkIHRvIHNwZWNpZnkgYEVuYWJsZUNvbmZpZ3NgIGF0IGFsbC4KCkkgc2hvdWxkIGRvdWJsZS1jaGVjayBmb3Igb3RoZXIgcmVsYXRlZCBmdW5jdGlvbnMuIGBrbWVtX2NhY2hlX2ZyZWVfYnVsa2AgYW5kIGBrbWVtX2NhY2hlX2FsbG9jX2J1bGtfbm9wcm9mYCBhcmUgYWxzbyB1c2VkIGR1cmluZyBjYWNoZSBjbGVhbnVwLCBidXQgYXJlIGxlc3MgY3JpdGljYWwgdGhhbiBga2ZyZWVgLCB0aGUgaG90IHBhdGguIFRoZXJlZm9yZSwgSSB3aWxsIGxpc3QgYF9fa21lbV9jYWNoZV9zaHJpbmtgLCBgX19rbWVtX2NhY2hlX3NodXRkb3duYCwgYF9fa21lbV9jYWNoZV9lbXB0eWAuCgpBY3R1YWxseSwgc2luY2UgYF9fa21lbV9jYWNoZV9lbXB0eWAgYW5kIGBfX2ttZW1fY2FjaGVfc2h1dGRvd25gIGFyZSBjYWxsZWQgd2hlbiB0aGUgY2FjaGUgaXMgYmVpbmcgZGVzdHJveWVkLCBga21lbV9jYWNoZV9kZXN0cm95YCBpcyB0aGUgcHVibGljIEFQSS4gU28sIEkgdGhpbmsgYSBtb3JlIHVzZWZ1bCBsaXN0IGlzIGBrbWVtX2NhY2hlX2Rlc3Ryb3lgIGFuZCBga21lbV9jYWNoZV9zaHJpbmtgIGZvciB0aGlzIHBhcnRpY3VsYXIgY2FzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTY6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XnZvaWQga21lbV9jYWNoZV9kZXN0cm95XFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3NsYWJfY29tbW9uLmM9NTI3PXZvaWQgc2xhYl9rbWVtX2NhY2hlX3JlbGVhc2Uoc3RydWN0IGttZW1fY2FjaGUgKnMpXG4tLVxubW0vc2xhYl9jb21tb24uYy01MzMtXG5tbS9zbGFiX2NvbW1vbi5jOjUzNDp2b2lkIGttZW1fY2FjaGVfZGVzdHJveShzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbm1tL3NsYWJfY29tbW9uLmMtNTM1LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTY6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg5MjkKCQkJCQkJCW91dHB1dDogMTU5CgkJCQkJCQl0aG91Z2h0czogMjcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFNMVUIgQ2hhbmdlcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQsIHllYWgsIGBrbWVtX2NhY2hlX2Rlc3Ryb3lgIGFuZCBga21lbV9jYWNoZV9zaHJpbmtgIHNlZW0gbGlrZSBvYnZpb3VzIGZ1bmN0aW9ucyB0byBmb2N1cyBvbiBmb3IgZnV6emluZy4gR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgY2hhbmdlcywgSSYjMzk7bGwgYWxzbyBhZGQgYF9fa21lbV9jYWNoZV9zaHJpbmtgLCBgX19rbWVtX2NhY2hlX3NodXRkb3duYCwgYW5kIGBfX2ttZW1fY2FjaGVfZW1wdHlgIHRvIHRoZSBsaXN0LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgY292ZXIgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eS4KCkxldCBtZSByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWNzIG9mIHRoaXMgcGF0Y2jigKYgcmlnaHQsIGl0JiMzOTtzIGFib3V0IGFkZGluZyBgcGFya2VkX3NsYWJzYCB0byBgc3RydWN0IGttZW1fY2FjaGVfbm9kZWAuIEl0IGFsc28gYWRkcyBgdW5wYXJrX3dvcmtgLCB3aGljaCBpcyBzY2hlZHVsZWQgd2hlbiBhIHNsYWIgZ2V0cyBwYXJrZWQuIEZyb20gd2hhdCBJIGNhbiBzZWUsIHNsYWJzIGFyZSBnZXR0aW5nIHVucGFya2VkIGluIGBnZXRfcGFydGlhbF9ub2RlX2J1bGtgLCBgZ2V0X2Zyb21fcGFydGlhbF9ub2RlYCwgYGZyZWVfcGFydGlhbGAsIGFuZCBgX19rbWVtX2NhY2hlX2RvX3Nocmlua2AuIFRoZW4sIHNsYWJzIGFyZSBwYXJrZWQgaW4gYF9fc2xhYl9mcmVlYCB3aGVuIGBsaXN0X2xvY2tgIGlzIGNvbnRlbmRlZC4KClRoaXMgaXMgYSBwcmV0dHkgZnVuZGFtZW50YWwgc2hpZnQgaW4gaG93IHRoZSBTTFVCIGFsbG9jYXRvciBvcGVyYXRlcywgYW5kIHRoYXQgbWFrZXMgaXQgcHJpbWUgdGVycml0b3J5IGZvciBmdXp6aW5nLiBJIGRvbiYjMzk7dCBzZWUgYW55IGRlcGVuZGVuY2llcyBvbiBzcGVjaWZpYyBrZXJuZWwgY29uZmlncywgc28gdGhhdCYjMzk7cyBnb29kLiBTaW5jZSBpdCB0b3VjaGVzIHRoZSBjb3JlIFNMVUIgbG9naWMsIHRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBteSB0aW1lLiBNeSBmb2N1cyB3aWxsIGJlIG9uIHRob3NlIHN5bWJvbHMgSSBtZW50aW9uZWQ6IGBfX2ttZW1fY2FjaGVfc2hyaW5rYCwgYF9fa21lbV9jYWNoZV9zaHV0ZG93bmAsIGBfX2ttZW1fY2FjaGVfZW1wdHlgLCBga21lbV9jYWNoZV9zaHJpbmtgLCBhbmQgYGttZW1fY2FjaGVfZGVzdHJveWAuCgpBbHJpZ2h0LCBJJiMzOTttIGNvbmZpZGVudCBpbiBteSBhc3Nlc3NtZW50LiBJJiMzOTtsbCBtYWtlIHN1cmUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTY6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fa21lbV9jYWNoZV9zaHJpbmsmIzM0OywKICAgICYjMzQ7X19rbWVtX2NhY2hlX3NodXRkb3duJiMzNDssCiAgICAmIzM0O19fa21lbV9jYWNoZV9lbXB0eSYjMzQ7LAogICAgJiMzNDtrbWVtX2NhY2hlX3NocmluayYjMzQ7LAogICAgJiMzNDtrbWVtX2NhY2hlX2Rlc3Ryb3kmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGxvY2tsZXNzIHBhcmtpbmcgbWVjaGFuaXNtIGZvciBzbGFicyBpbiB0aGUgU0xVQiBhbGxvY2F0b3ImIzM5O3MgZnJlZSBzbG93cGF0aCB0byByZWR1Y2UgbGlzdF9sb2NrIGNvbnRlbnRpb24uIFRoaXMgaXMgYSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWZmZWN0cyBzbGFiIGFsbG9jYXRpb24gYW5kIGZyZWVpbmcgbG9naWMuIEl0IGlzIHJlYWNoYWJsZSBieSBkZWZhdWx0IGFuZCBzaG91bGQgYmUgZnV6emVkLiBTaW5jZSBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIGFyZSBob3QgcGF0aHMsIHdlIGZvY3VzIG9uIGNhY2hlIHNocmlua2luZyBhbmQgZGVzdHJ1Y3Rpb24gcGF0aHMgd2hpY2ggYWxzbyBpbnRlcmFjdCB3aXRoIHRoZSBuZXcgdW5wYXJraW5nIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fa21lbV9jYWNoZV9zaHJpbmsmIzM0OywKICAgICYjMzQ7X19rbWVtX2NhY2hlX3NodXRkb3duJiMzNDssCiAgICAmIzM0O19fa21lbV9jYWNoZV9lbXB0eSYjMzQ7LAogICAgJiMzNDtrbWVtX2NhY2hlX3NocmluayYjMzQ7LAogICAgJiMzNDtrbWVtX2NhY2hlX2Rlc3Ryb3kmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGxvY2tsZXNzIHBhcmtpbmcgbWVjaGFuaXNtIGZvciBzbGFicyBpbiB0aGUgU0xVQiBhbGxvY2F0b3ImIzM5O3MgZnJlZSBzbG93cGF0aCB0byByZWR1Y2UgbGlzdF9sb2NrIGNvbnRlbnRpb24uIFRoaXMgaXMgYSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWZmZWN0cyBzbGFiIGFsbG9jYXRpb24gYW5kIGZyZWVpbmcgbG9naWMuIEl0IGlzIHJlYWNoYWJsZSBieSBkZWZhdWx0IGFuZCBzaG91bGQgYmUgZnV6emVkLiBTaW5jZSBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIGFyZSBob3QgcGF0aHMsIHdlIGZvY3VzIG9uIGNhY2hlIHNocmlua2luZyBhbmQgZGVzdHJ1Y3Rpb24gcGF0aHMgd2hpY2ggYWxzbyBpbnRlcmFjdCB3aXRoIHRoZSBuZXcgdW5wYXJraW5nIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNjowODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE2OjA4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbnRlcm5hbCBTTFVCIGFsbG9jYXRvciBsb2dpYyB0byBpbnRyb2R1Y2UgYSBsb2NrbGVzcyBcJiMzNDtwYXJraW5nXCYjMzQ7IG1lY2hhbmlzbSBmb3Igc2xhYnMgdG8gcmVkdWNlIGxvY2sgY29udGVudGlvbiBvbiB0aGUgbm9kZSYjMzk7cyBsaXN0X2xvY2suIEl0IGFkZHMgYW4gbGxpc3QgZm9yIHBhcmtlZCBzbGFicyBhbmQgZGVsYXllZCB3b3JrIHRvIHVucGFyayB0aGVtLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBpbnRlcm5hbCBtZW1vcnkgbWFuYWdlbWVudCBzdHJ1Y3R1cmVzIChzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlLCBzdHJ1Y3Qgc2xhYikgYW5kIGZyZWVsaXN0IG9wZXJhdGlvbnMuIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBtYW5pZmVzdCBhcyBsaXN0IGNvcnJ1cHRpb25zLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIG9yIGNvbmN1cnJlbmN5IGlzc3VlcyAocmFjZSBjb25kaXRpb25zKS4gVGhlc2UgdHlwZXMgb2YgYnVncyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4sIHNsdWJfZGVidWcsIGxpc3QgZGVidWdnaW5nLCBhbmQgTE9DS0RFUC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWx0ZXIgbWVtb3J5IGluaXRpYWxpemF0aW9uIG9yIGJvdW5kcyBjaGVja2luZyBpbiBhIHdheSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBjYXVzZSBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDViYmU4YmYyMTFmZDcwYmYyY2FhMjllYjM3ZjcyZGIzZDY5NjQ0NDQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAyNCAxNTo0NzowNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL3NsdWIuYyBiL21tL3NsdWIuYwppbmRleCBiMGNkMDU3MmUyZjI2Li4yN2E3OGQ2M2Y1Mzc2IDEwMDY0NAotLS0gYS9tbS9zbHViLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc2x1Yi5jCkBAIC00OSw2ICYjNDM7NDksNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3NvcnQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pcnFfd29yay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2twcm9iZXMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbGxpc3QuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9kZWJ1Z2ZzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7dHJhY2UvZXZlbnRzL2ttZW0uaCZndDsKIApAQCAtMTIyLDYgJiM0MzsxMjMsOCBAQAogICogICAoTm90ZSB0aGF0IHRoZSB0b3RhbCBudW1iZXIgb2Ygc2xhYnMgaXMgYW4gYXRvbWljIHZhbHVlIHRoYXQgbWF5IGJlCiAgKiAgIG1vZGlmaWVkIHdpdGhvdXQgdGFraW5nIHRoZSBsaXN0IGxvY2spLgogICoKJiM0MzsgKiAgIFNsYWJzIG1heSBiZSBwdXNoZWQgdG8gbm9kZS0mZ3Q7cGFya2VkX3NsYWJzIHdpdGhvdXQgYWNxdWlyaW5nIGxpc3RfbG9jay4KJiM0MzsgKgogICogICBUaGUgbGlzdF9sb2NrIGlzIGEgY2VudHJhbGl6ZWQgbG9jayBhbmQgdGh1cyB3ZSBhdm9pZCB0YWtpbmcgaXQgYXMKICAqICAgbXVjaCBhcyBwb3NzaWJsZS4gQXMgbG9uZyBhcyBTTFVCIGRvZXMgbm90IGhhdmUgdG8gaGFuZGxlIHBhcnRpYWwKICAqICAgc2xhYnMsIG9wZXJhdGlvbnMgY2FuIGNvbnRpbnVlIHdpdGhvdXQgYW55IGNlbnRyYWxpemVkIGxvY2suCkBAIC0zNjgsNiAmIzQzOzM3MSw5IEBAIGVudW0gc3RhdF9pdGVtIHsKIAlGUkVFX1NMT1dQQVRILAkJLyogRnJlZSB0byBhIHNsYWIgKi8KIAlGUkVFX0FERF9QQVJUSUFMLAkvKiBGcmVlaW5nIG1vdmVzIHNsYWIgdG8gcGFydGlhbCBsaXN0ICovCiAJRlJFRV9SRU1PVkVfUEFSVElBTCwJLyogRnJlZWluZyByZW1vdmVzIGxhc3Qgb2JqZWN0ICovCiYjNDM7CVBBUktfU0xBQiwJCS8qIFNsYWJzIHBhcmtlZCBvbnRvIHRoZSBsbGlzdCBieSBmcmVlIHNsb3dwYXRoICovCiYjNDM7CVVOUEFSS19TTEFCLAkJLyogU2xhYnMgdW5wYXJrZWQgZnJvbSB0aGUgbGxpc3QgKi8KJiM0MzsJVU5QQVJLX0VWRU5ULAkJLyogVW5wYXJrIGV2ZW50cyAqLwogCUFMTE9DX1NMQUIsCQkvKiBOZXcgc2xhYiBhY3F1aXJlZCBmcm9tIHBhZ2UgYWxsb2NhdG9yICovCiAJQUxMT0NfTk9ERV9NSVNNQVRDSCwJLyogUmVxdWVzdGVkIG5vZGUgZGlmZmVyZW50IGZyb20gY3B1IHNoZWFmICovCiAJRlJFRV9TTEFCLAkJLyogU2xhYiBmcmVlZCB0byB0aGUgcGFnZSBhbGxvY2F0b3IgKi8KQEAgLTQ2Miw2ICYjNDM7NDY4LDE0IEBAIHN0cnVjdCBrbWVtX2NhY2hlX25vZGUgewogCWF0b21pY19sb25nX3QgdG90YWxfb2JqZWN0czsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGZ1bGw7CiAjZW5kaWYKJiM0MzsJLyoKJiM0MzsJICogSWYgbmVpdGhlciBzaGVhZiByZWZpbGwgbm9yIHRoZSBhbGxvYyBzbG93cGF0aCBwZXJmb3JtcyB0aGUgdW5wYXJrLAomIzQzOwkgKiB1bnBhcmtfd29ya19mbiB0YWtlcyBjYXJlIG9mIGl0LgomIzQzOwkgKi8KJiM0MzsJc3RydWN0IGRlbGF5ZWRfd29yayB1bnBhcmtfd29yazsKJiM0MzsKJiM0MzsJLyogVXNlZCB0byBsaW5rIHBhcmtlZCBzbGFicyAqLwomIzQzOwlzdHJ1Y3QgbGxpc3RfaGVhZCBwYXJrZWRfc2xhYnMgX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsKIH07CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGttZW1fY2FjaGVfbm9kZSAqZ2V0X25vZGUoc3RydWN0IGttZW1fY2FjaGUgKnMsIGludCBub2RlKQpAQCAtNTA5LDYgJiM0Mzs1MjMsMTIgQEAgc3RhdGljIG5vZGVtYXNrX3Qgc2xhYl9iYXJuX25vZGVzOwogICovCiBzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmZsdXNod3E7CiAKJiM0MzsvKgomIzQzOyAqIENlaWxpbmcgb24gaG93IGxvbmcgc2xhYnMgc3RheSBwYXJrZWQgd2hlbiBubyBzaGVhZiByZWZpbGwgb3IgYWxsb2MKJiM0MzsgKiBzbG93cGF0aCB1bnBhcmtzIHRoZW0uCiYjNDM7ICovCiYjNDM7I2RlZmluZSBVTlBBUktfREVMQVkJKEhaKQomIzQzOwogc3RydWN0IHNsdWJfZmx1c2hfd29yayB7CiAJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CiAJc3RydWN0IGttZW1fY2FjaGUgKnM7CkBAIC0zNjIzLDYgJiM0MzszNjQzLDEyMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcmVtb3ZlX3BhcnRpYWwoc3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbiwKIAljbGVhcl9ub2RlX3BhcnRpYWxfc3RhdGUobiwgc2xhYik7CiB9CiAKJiM0MzsvKgomIzQzOyAqIEEgc2xhYiBwYXJrZWQgb24gbi0mZ3Q7cGFya2VkX3NsYWJzIGlzIG5vdCBvbiBwYXJ0aWFsIGxpc3QsIHNvIGl0cyBzbGFiX2xpc3QgaXMKJiM0MzsgKiBmcmVlIGFuZCB3ZSByZXVzZSBpdCBhcyB0aGUgbGxpc3Rfbm9kZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBsbGlzdF9ub2RlICpzbGFiX3RvX3BhcmtlZF9sbG5vZGUoc3RydWN0IHNsYWIgKnNsYWIpCiYjNDM7ewomIzQzOwlyZXR1cm4gKHN0cnVjdCBsbGlzdF9ub2RlICopJmFtcDtzbGFiLSZndDtzbGFiX2xpc3Q7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IHNsYWIgKnBhcmtlZF9sbG5vZGVfdG9fc2xhYihzdHJ1Y3QgbGxpc3Rfbm9kZSAqbm9kZSkKJiM0Mzt7CiYjNDM7CXJldHVybiBjb250YWluZXJfb2YoKHN0cnVjdCBsaXN0X2hlYWQgKilub2RlLCBzdHJ1Y3Qgc2xhYiwgc2xhYl9saXN0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBNb3ZlIHNsYWJzIHBhcmtlZCBvbiBuLSZndDtwYXJrZWRfc2xhYnMgdG8gbi0mZ3Q7cGFydGlhbC4gQ2FsbGVkIHdpdGggdGhlCiYjNDM7ICogbGlzdF9sb2NrIGhlbGQsIGJ5IHRoZSBwYXRocyB0aGF0IGNvbnN1bWUgdGhlIHBhcnRpYWwgbGlzdCwgb24gYmVoYWxmIG9mIHRoZQomIzQzOyAqIGNwdXMgdGhhdCBjb3VsZCBub3QgZ2V0IHRoZSBsb2NrIHdoZW4gcGFya2luZy4KJiM0MzsgKgomIzQzOyAqIElmIEBkaXNjYXJkIGlzIG5vdCBOVUxMLCBwdXQgZW1wdHkgc2xhYnMgYmV5b25kIG1pbl9wYXJ0aWFsIG9uIEBkaXNjYXJkLCB0aGUKJiM0MzsgKiBjYWxsZXIgc2hvdWxkIGNhbGwgZGlzY2FyZF9zbGFiKCkgYWZ0ZXIgZHJvcHBpbmcgdGhlIGxvY2suICBDYWxsZXJzIHRoYXQgbWF5CiYjNDM7ICogbm90IGZyZWUgcGFnZXMgaW4gdGhlaXIgY29udGV4dCBzaG91bGQgcGFzcyBOVUxMLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHVucGFya19zbGFicyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbiwKJiM0MzsJCQkgc3RydWN0IGxpc3RfaGVhZCAqZGlzY2FyZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBsbGlzdF9ub2RlICpwb3MsICpuZXh0OwomIzQzOwl1bnNpZ25lZCBsb25nIGFkZGVkID0gMCwgZGlzY2FyZGVkID0gMDsKJiM0MzsJdW5zaWduZWQgbG9uZyBoZWFkcm9vbSA9IDA7CiYjNDM7CUxJU1RfSEVBRCh0b19hZGQpOwomIzQzOwomIzQzOwlzbGFiX2xvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtuLSZndDtsaXN0X2xvY2spOwomIzQzOwomIzQzOwlwb3MgPSBsbGlzdF9kZWxfYWxsKCZhbXA7bi0mZ3Q7cGFya2VkX3NsYWJzKTsKJiM0MzsJaWYgKGxpa2VseSghcG9zKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogQ2FsY3VsYXRlIGhvdyBtYW55IG1vcmUgc2xhYnMgdGhlIHBhcnRpYWwgbGlzdCB3YW50cyBiZWZvcmUgaXQgaGFzCiYjNDM7CSAqIHJlYWNoZWQgbWluX3BhcnRpYWwuCiYjNDM7CSAqLwomIzQzOwlpZiAocy0mZ3Q7bWluX3BhcnRpYWwgJmd0OyBuLSZndDtucl9wYXJ0aWFsKQomIzQzOwkJaGVhZHJvb20gPSBzLSZndDttaW5fcGFydGlhbCAtIG4tJmd0O25yX3BhcnRpYWw7CiYjNDM7CiYjNDM7CWZvciAoOyBwb3M7IHBvcyA9IG5leHQpIHsKJiM0MzsJCXN0cnVjdCBzbGFiICpzbGFiID0gcGFya2VkX2xsbm9kZV90b19zbGFiKHBvcyk7CiYjNDM7CQlzdHJ1Y3QgZnJlZWxpc3RfY291bnRlcnMgZmxjOwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIEJhY2sgdXAgdGhlIHBvaW50ZXIsIGJlY2F1c2UgdGhlIGxpc3RfYWRkX3RhaWwoKSBiZWxvdwomIzQzOwkJICogb3ZlcndyaXRlcyB0aGUgbGxpc3QgbGlua2FnZS4KJiM0MzsJCSAqLwomIzQzOwkJbmV4dCA9IHBvcy0mZ3Q7bmV4dDsKJiM0MzsKJiM0MzsJCWlmIChkaXNjYXJkKSB7CiYjNDM7CQkJZmxjLmNvdW50ZXJzID0gZGF0YV9yYWNlKFJFQURfT05DRShzbGFiLSZndDtjb3VudGVycykpOwomIzQzOwkJCWlmICghZmxjLmludXNlICZhbXA7JmFtcDsgYWRkZWQgJmd0Oz0gaGVhZHJvb20pIHsKJiM0MzsJCQkJbGlzdF9hZGRfdGFpbCgmYW1wO3NsYWItJmd0O3NsYWJfbGlzdCwgZGlzY2FyZCk7CiYjNDM7CQkJCWRpc2NhcmRlZCYjNDM7JiM0Mzs7CiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwkJCX0KJiM0MzsJCX0KJiM0MzsKJiM0MzsJCXNsYWJfc2V0X25vZGVfcGFydGlhbChzbGFiKTsKJiM0MzsJCWxpc3RfYWRkX3RhaWwoJmFtcDtzbGFiLSZndDtzbGFiX2xpc3QsICZhbXA7dG9fYWRkKTsKJiM0MzsJCWFkZGVkJiM0MzsmIzQzOzsKJiM0MzsJfQomIzQzOwomIzQzOwluLSZndDtucl9wYXJ0aWFsICYjNDM7PSBhZGRlZDsKJiM0MzsJbGlzdF9zcGxpY2VfdGFpbCgmYW1wO3RvX2FkZCwgJmFtcDtuLSZndDtwYXJ0aWFsKTsKJiM0MzsKJiM0MzsJc3RhdF9hZGQocywgRlJFRV9BRERfUEFSVElBTCwgYWRkZWQpOwomIzQzOwlzdGF0X2FkZChzLCBVTlBBUktfU0xBQiwgYWRkZWQgJiM0MzsgZGlzY2FyZGVkKTsKJiM0MzsJaWYgKHVubGlrZWx5KGRpc2NhcmRlZCkpCiYjNDM7CQlzdGF0X2FkZChzLCBGUkVFX1NMQUIsIGRpc2NhcmRlZCk7CiYjNDM7CXN0YXQocywgVU5QQVJLX0VWRU5UKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBQYXJrZWQgc2xhYnMgYXJlIG5vcm1hbGx5IHVucGFya2VkIGJ5IHNoZWFmIHJlZmlsbCBvciB0aGUgYWxsb2Mgc2xvd3BhdGgsIGJ1dAomIzQzOyAqIHdoZW4gdGhlIHN5c3RlbSBleHBlcmllbmNlcyBhIGhlYXZ5IGJ1cnN0IG9mIGZyZWVzLCBhYnJ1cHRseSBnb2VzIGlkbGUsCiYjNDM7ICogYW5kIG5laXRoZXIgc2hlYWYgcmVmaWxsIG5vciB0aGUgYWxsb2Mgc2xvd3BhdGggaXMgcmVhY2hlZCwKJiM0MzsgKiBzb21lIHBhcmtlZCBzbGFicyBtYXkgYmUgbGVmdCBzdHJhbmRlZCBpbiB0aGUgcGFya2VkIGxsaXN0LiBUaGlzIGZ1bmN0aW9uCiYjNDM7ICogc2VydmVzIGFzIGEgbGFzdC1yZXNvcnQgZmFsbGJhY2suCiYjNDM7ICogVGhpcyB3b3JrIGlzIHNjaGVkdWxlZCBieSB0aGUgbGxpc3RfYWRkKCkgdGhhdCBtYWtlcyB0aGUgcGFya2VkIGxsaXN0IG5vbi1lbXB0eS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCB1bnBhcmtfd29ya19mbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlICpuID0gY29udGFpbmVyX29mKHRvX2RlbGF5ZWRfd29yayh3b3JrKSwKJiM0MzsJCQkJCQkgc3RydWN0IGttZW1fY2FjaGVfbm9kZSwKJiM0MzsJCQkJCQkgdW5wYXJrX3dvcmspOwomIzQzOwlzdHJ1Y3QgbGxpc3Rfbm9kZSAqZmlyc3Q7CiYjNDM7CXN0cnVjdCBrbWVtX2NhY2hlICpzOwomIzQzOwlzdHJ1Y3Qgc2xhYiAqc2xhYiwgKnQ7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CUxJU1RfSEVBRChkaXNjYXJkKTsKJiM0MzsKJiM0MzsJaWYgKGxpa2VseShsbGlzdF9lbXB0eSgmYW1wO24tJmd0O3BhcmtlZF9zbGFicykpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO24tJmd0O2xpc3RfbG9jaywgZmxhZ3MpOwomIzQzOwomIzQzOwlmaXJzdCA9IFJFQURfT05DRShuLSZndDtwYXJrZWRfc2xhYnMuZmlyc3QpOwomIzQzOwlpZiAodW5saWtlbHkoIWZpcnN0KSkgewomIzQzOwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO24tJmd0O2xpc3RfbG9jaywgZmxhZ3MpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CXMgPSBwYXJrZWRfbGxub2RlX3RvX3NsYWIoZmlyc3QpLSZndDtzbGFiX2NhY2hlOwomIzQzOwomIzQzOwl1bnBhcmtfc2xhYnMocywgbiwgJmFtcDtkaXNjYXJkKTsKJiM0MzsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO24tJmd0O2xpc3RfbG9jaywgZmxhZ3MpOwomIzQzOwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2xhYiwgdCwgJmFtcDtkaXNjYXJkLCBzbGFiX2xpc3QpCiYjNDM7CQlkaXNjYXJkX3NsYWIocywgc2xhYik7CiYjNDM7fQomIzQzOwogLyoKICAqIENhbGxlZCBvbmx5IGZvciBrbWVtX2NhY2hlX2RlYnVnKCkgY2FjaGVzIGluc3RlYWQgb2YgcmVtb3ZlX3BhcnRpYWwoKSwgd2l0aCBhCiAgKiBzbGFiIGZyb20gdGhlIG4tJmd0O3BhcnRpYWwgbGlzdC4gUmVtb3ZlIG9ubHkgYSBzaW5nbGUgb2JqZWN0IGZyb20gdGhlIHNsYWIsIGRvCkBAIC0zODE4LDkgJiM0MzszOTU0LDEzIEBAIHN0YXRpYyBib29sIGdldF9wYXJ0aWFsX25vZGVfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywKIAlzdHJ1Y3Qgc2xhYiAqZmlyc3QgPSBOVUxMLCAqbGFzdCA9IE5VTEw7CiAJdW5zaWduZWQgaW50IHRvdGFsX2ZyZWUgPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CUxJU1RfSEVBRChkaXNjYXJkKTsKIAotCS8qIFJhY3kgY2hlY2sgdG8gYXZvaWQgdGFraW5nIHRoZSBsb2NrIHVubmVjZXNzYXJpbHkuICovCi0JaWYgKCFuIHx8IGRhdGFfcmFjZSghbi0mZ3Q7bnJfcGFydGlhbCkpCiYjNDM7CS8qCiYjNDM7CSAqIFJhY3kgY2hlY2sgdG8gYXZvaWQgdGFraW5nIHRoZSBsb2NrIHVubmVjZXNzYXJpbHkuCiYjNDM7CSAqIFRoZSBwYXJrZWRfc2xhYnMgbGxpc3QgbXVzdCBhbHNvIGJlIGFjY291bnRlZCBmb3IuCiYjNDM7CSAqLwomIzQzOwlpZiAoIW4gfHwgKCFkYXRhX3JhY2Uobi0mZ3Q7bnJfcGFydGlhbCkgJmFtcDsmYW1wOyBsbGlzdF9lbXB0eSgmYW1wO24tJmd0O3BhcmtlZF9zbGFicykpKQogCQlyZXR1cm4gZmFsc2U7CiAKIAlJTklUX0xJU1RfSEVBRCgmYW1wO3BjLSZndDtzbGFicyk7CkBAIC0zODMwLDYgJiM0MzszOTcwLDkgQEAgc3RhdGljIGJvb2wgZ2V0X3BhcnRpYWxfbm9kZV9idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLAogCWVsc2UgaWYgKCFzcGluX3RyeWxvY2tfaXJxc2F2ZSgmYW1wO24tJmd0O2xpc3RfbG9jaywgZmxhZ3MpKQogCQlyZXR1cm4gZmFsc2U7CiAKJiM0MzsJLyogSWYgdGhlcmUgYXJlIHBhcmtlZCBzbGFicywgbW92ZSB0aGVtIHRvIHRoZSBwYXJ0aWFsIGxpc3QgZmlyc3QuICovCiYjNDM7CXVucGFya19zbGFicyhzLCBuLCBhbGxvd19zcGluID8gJmFtcDtkaXNjYXJkIDogTlVMTCk7CiYjNDM7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNsYWIsIHNsYWIyLCAmYW1wO24tJmd0O3BhcnRpYWwsIHNsYWJfbGlzdCkgewogCQlzdHJ1Y3QgZnJlZWxpc3RfY291bnRlcnMgZmxjOwogCQl1bnNpZ25lZCBpbnQgc2xhYl9mcmVlOwpAQCAtMzg3NCw2ICYjNDM7NDAxNywxMCBAQCBzdGF0aWMgYm9vbCBnZXRfcGFydGlhbF9ub2RlX2J1bGsoc3RydWN0IGttZW1fY2FjaGUgKnMsCiAJCQkJICAgICZhbXA7bGFzdC0mZ3Q7c2xhYl9saXN0KTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtuLSZndDtsaXN0X2xvY2ssIGZsYWdzKTsKJiM0MzsKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNsYWIsIHNsYWIyLCAmYW1wO2Rpc2NhcmQsIHNsYWJfbGlzdCkKJiM0MzsJCWRpc2NhcmRfc2xhYihzLCBzbGFiKTsKJiM0MzsKIAlyZXR1cm4gdG90YWxfZnJlZSAmZ3Q7IDA7CiB9CiAKQEAgLTM4ODUsMjMgJiM0Mzs0MDMyLDI5IEBAIHN0YXRpYyB2b2lkICpnZXRfZnJvbV9wYXJ0aWFsX25vZGUoc3RydWN0IGttZW1fY2FjaGUgKnMsCiAJCQkJICAgZ2ZwX3QgZ2ZwX2ZsYWdzLAogCQkJCSAgIGNvbnN0IHN0cnVjdCBzbGFiX2FsbG9jX2NvbnRleHQgKmFjKQogewomIzQzOwlib29sIGFsbG93X3NwaW4gPSBhbGxvY19mbGFnc19hbGxvd19zcGlubmluZyhhYy0mZ3Q7YWxsb2NfZmxhZ3MpOwogCXN0cnVjdCBzbGFiICpzbGFiLCAqc2xhYjI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl2b2lkICpvYmplY3QgPSBOVUxMOwomIzQzOwlMSVNUX0hFQUQoZGlzY2FyZCk7CiAKIAkvKgogCSAqIFJhY3kgY2hlY2suIElmIHdlIG1pc3Rha2VubHkgc2VlIG5vIHBhcnRpYWwgc2xhYnMgdGhlbiB3ZQogCSAqIGp1c3QgYWxsb2NhdGUgYW4gZW1wdHkgc2xhYi4gSWYgd2UgbWlzdGFrZW5seSB0cnkgdG8gZ2V0IGEKIAkgKiBwYXJ0aWFsIHNsYWIgYW5kIHRoZXJlIGlzIG5vbmUgYXZhaWxhYmxlIHRoZW4gZ2V0X2Zyb21fcGFydGlhbCgpCi0JICogd2lsbCByZXR1cm4gTlVMTC4KJiM0MzsJICogd2lsbCByZXR1cm4gTlVMTC4gQWxzbyB0YWtlIHRoZSBwYXJrZWRfc2xhYnMgbGxpc3QgaW50byBhY2NvdW50LgogCSAqLwotCWlmICghbiB8fCAhbi0mZ3Q7bnJfcGFydGlhbCkKJiM0MzsJaWYgKCFuIHx8ICghZGF0YV9yYWNlKG4tJmd0O25yX3BhcnRpYWwpICZhbXA7JmFtcDsgbGxpc3RfZW1wdHkoJmFtcDtuLSZndDtwYXJrZWRfc2xhYnMpKSkKIAkJcmV0dXJuIE5VTEw7CiAKLQlpZiAoYWxsb2NfZmxhZ3NfYWxsb3dfc3Bpbm5pbmcoYWMtJmd0O2FsbG9jX2ZsYWdzKSkKJiM0MzsJaWYgKGFsbG93X3NwaW4pCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7bi0mZ3Q7bGlzdF9sb2NrLCBmbGFncyk7CiAJZWxzZSBpZiAoIXNwaW5fdHJ5bG9ja19pcnFzYXZlKCZhbXA7bi0mZ3Q7bGlzdF9sb2NrLCBmbGFncykpCiAJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwkvKiBJZiB0aGVyZSBhcmUgcGFya2VkIHNsYWJzLCBtb3ZlIHRoZW0gdG8gdGhlIHBhcnRpYWwgbGlzdCBmaXJzdC4gKi8KJiM0MzsJdW5wYXJrX3NsYWJzKHMsIG4sIGFsbG93X3NwaW4gPyAmYW1wO2Rpc2NhcmQgOiBOVUxMKTsKJiM0MzsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2xhYiwgc2xhYjIsICZhbXA7bi0mZ3Q7cGFydGlhbCwgc2xhYl9saXN0KSB7CiAKIAkJc3RydWN0IGZyZWVsaXN0X2NvdW50ZXJzIG9sZCwgbmV3OwpAQCAtMzkzOSw2ICYjNDM7NDA5MiwxMCBAQCBzdGF0aWMgdm9pZCAqZ2V0X2Zyb21fcGFydGlhbF9ub2RlKHN0cnVjdCBrbWVtX2NhY2hlICpzLAogCQlicmVhazsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO24tJmd0O2xpc3RfbG9jaywgZmxhZ3MpOwomIzQzOwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2xhYiwgc2xhYjIsICZhbXA7ZGlzY2FyZCwgc2xhYl9saXN0KQomIzQzOwkJZGlzY2FyZF9zbGFiKHMsIHNsYWIpOwomIzQzOwogCXJldHVybiBvYmplY3Q7CiB9CiAKQEAgLTM5OTQsOCAmIzQzOzQxNTEsMTMgQEAgc3RhdGljIHZvaWQgKmdldF9mcm9tX2FueV9wYXJ0aWFsKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnBfZmxhZ3MsCiAKIAkJCW4gPSBnZXRfbm9kZShzLCB6b25lX3RvX25pZCh6b25lKSk7CiAKJiM0MzsJCQkvKgomIzQzOwkJCSAqIFBhcmtlZCBzbGFicyBtYWtlIHRoZSBub2RlIHdvcnRoIHZpc2l0aW5nIGV2ZW4gaWYKJiM0MzsJCQkgKiBucl9wYXJ0aWFsIGxvb2tzIGxvdy4KJiM0MzsJCQkgKi8KIAkJCWlmIChuICZhbXA7JmFtcDsgY3B1c2V0X3pvbmVfYWxsb3dlZCh6b25lLCBnZnBfZmxhZ3MpICZhbXA7JmFtcDsKLQkJCQkJbi0mZ3Q7bnJfcGFydGlhbCAmZ3Q7IHMtJmd0O21pbl9wYXJ0aWFsKSB7CiYjNDM7CQkJCQkobi0mZ3Q7bnJfcGFydGlhbCAmZ3Q7IHMtJmd0O21pbl9wYXJ0aWFsIHx8CiYjNDM7CQkJCQkgIWxsaXN0X2VtcHR5KCZhbXA7bi0mZ3Q7cGFya2VkX3NsYWJzKSkpIHsKIAogCQkJCXZvaWQgKm9iamVjdCA9IGdldF9mcm9tX3BhcnRpYWxfbm9kZShzLCBuLAogCQkJCQkJCQlnZnBfZmxhZ3MsIGFjKTsKQEAgLTU3MTksNyAmIzQzOzU4ODEsNyBAQCBzdGF0aWMgdm9pZCBfX3NsYWJfZnJlZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsCiAJCQl1bnNpZ25lZCBsb25nIGFkZHIpCiAKIHsKLQlib29sIHdhc19mdWxsOwomIzQzOwlib29sIHdhc19mdWxsLCBwYXJrID0gZmFsc2U7CiAJc3RydWN0IGZyZWVsaXN0X2NvdW50ZXJzIG9sZCwgbmV3OwogCXN0cnVjdCBrbWVtX2NhY2hlX25vZGUgKm4gPSBOVUxMOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC01NzMxLDEwICYjNDM7NTg5MywxMSBAQCBzdGF0aWMgdm9pZCBfX3NsYWJfZnJlZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsCiAJfQogCiAJZG8gewotCQlpZiAodW5saWtlbHkobikpIHsKJiM0MzsJCWlmICh1bmxpa2VseShuICZhbXA7JmFtcDsgIXBhcmspKQogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO24tJmd0O2xpc3RfbG9jaywgZmxhZ3MpOwotCQkJbiA9IE5VTEw7Ci0JCX0KJiM0MzsKJiM0MzsJCXBhcmsgPSBmYWxzZTsKJiM0MzsJCW4gPSBOVUxMOwogCiAJCW9sZC5mcmVlbGlzdCA9IHNsYWItJmd0O2ZyZWVsaXN0OwogCQlvbGQuY291bnRlcnMgPSBzbGFiLSZndDtjb3VudGVyczsKQEAgLTU3NDgsNzYgJiM0Mzs1OTExLDExNCBAQCBzdGF0aWMgdm9pZCBfX3NsYWJfZnJlZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsCiAJCW5ldy5pbnVzZSAtPSBjbnQ7CiAKIAkJLyoKLQkJICogTWlnaHQgbmVlZCB0byBiZSB0YWtlbiBvZmYgKGR1ZSB0byBiZWNvbWluZyBlbXB0eSkgb3IgYWRkZWQKLQkJICogdG8gKGR1ZSB0byBub3QgYmVpbmcgZnVsbCBhbnltb3JlKSB0aGUgcGFydGlhbCBsaXN0LgotCQkgKiBVbmxlc3MgaXQmIzM5O3MgZnJvemVuLgomIzQzOwkJICogcGFydGlhbC0mZ3Q7cGFydGlhbDogdGhlIHNsYWIgd2FzIG9uIHRoZSBub2RlIHBhcnRpYWwgbGlzdCBhbmQKJiM0MzsJCSAqIHdpbGwgc3RpbGwgc3RheSB0aGVyZSwgc28gd2UgbmVlZCBubyBsaXN0IGhhbmRsaW5nIGFuZCBubwomIzQzOwkJICogbGlzdF9sb2NrLgomIzQzOwkJICoKJiM0MzsJCSAqIE5vdGUgdGhhdCAmIzM0O2NvbnRpbnVlOyYjMzQ7IGluIGEgZG8td2hpbGUgZ29lcyBvbiB0byBldmFsdWF0ZSB0aGUKJiM0MzsJCSAqIGNvbmRpdGlvbiBiZWxvdywgc28gd2UgZG8gcGVyZm9ybSB0aGUgZnJlZWxpc3QgdXBkYXRlLgogCQkgKi8KLQkJaWYgKCFuZXcuaW51c2UgfHwgd2FzX2Z1bGwpIHsKJiM0MzsJCWlmICghd2FzX2Z1bGwgJmFtcDsmYW1wOyBuZXcuaW51c2UpCiYjNDM7CQkJY29udGludWU7CiAKLQkJCW4gPSBnZXRfbm9kZShzLCBzbGFiX25pZChzbGFiKSk7CiYjNDM7CQkvKgomIzQzOwkJICogVGhlIHNsYWIgbWlnaHQgbmVlZCB0byBiZSB0YWtlbiBvZmYgKGR1ZSB0byBiZWNvbWluZyBlbXB0eSkKJiM0MzsJCSAqIG9yIGFkZGVkIHRvIChkdWUgdG8gbm90IGJlaW5nIGZ1bGwgYW55bW9yZSkgdGhlIHBhcnRpYWwKJiM0MzsJCSAqIGxpc3QuCiYjNDM7CQkgKgomIzQzOwkJICogRm9yIHRoZSBmdWxsIC0mZ3Q7IHBhcnRpYWwvZW1wdHkgdHJhbnNpdGlvbiwgdXNlCiYjNDM7CQkgKiBzcGluX3RyeWxvY2tfaXJxc2F2ZSgpIGFuZCB0aGUgcGFya2luZyBtZWNoYW5pc20gdG8gcmVkdWNlCiYjNDM7CQkgKiBsb2NrIGNvbnRlbnRpb24uCiYjNDM7CQkgKgomIzQzOwkJICogSWYgdGhlIGNtcHhjaGcgZG9lcyBub3Qgc3VjY2VlZCB0aGVuIHdlIHdpbGwgcmV0cnkuCiYjNDM7CQkgKi8KJiM0MzsJCW4gPSBnZXRfbm9kZShzLCBzbGFiX25pZChzbGFiKSk7CiYjNDM7CiYjNDM7CQlpZiAoIXdhc19mdWxsKSB7CiAJCQkvKgotCQkJICogU3BlY3VsYXRpdmVseSBhY3F1aXJlIHRoZSBsaXN0X2xvY2suCi0JCQkgKiBJZiB0aGUgY21weGNoZyBkb2VzIG5vdCBzdWNjZWVkIHRoZW4gd2UgbWF5Ci0JCQkgKiBkcm9wIHRoZSBsaXN0X2xvY2sgd2l0aG91dCBhbnkgcHJvY2Vzc2luZy4KLQkJCSAqCi0JCQkgKiBPdGhlcndpc2UgdGhlIGxpc3RfbG9jayB3aWxsIHN5bmNocm9uaXplIHdpdGgKLQkJCSAqIG90aGVyIHByb2Nlc3NvcnMgdXBkYXRpbmcgdGhlIGxpc3Qgb2Ygc2xhYnMuCiYjNDM7CQkJICogcGFydGlhbC0mZ3Q7ZW1wdHk6IHNwZWN1bGF0aXZlbHkgYWNxdWlyZSBsaXN0X2xvY2sKJiM0MzsJCQkgKiBwcmlvciB0byBjbXB4Y2hnKCksIGFzIHBlcmZvcm1pbmcgY21weGNoZygpIGJlZm9yZQomIzQzOwkJCSAqIGxvY2sgYWNxdWlzaXRpb24gcmFjZXMgd2l0aCBjb25jdXJyZW50IG9wZXJhdGlvbnMKJiM0MzsJCQkgKiAoZS5nLiwgdGhlIHNocmlua2VyKS4KIAkJCSAqLwogCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtuLSZndDtsaXN0X2xvY2ssIGZsYWdzKTsKLQotCQkJb25fbm9kZV9wYXJ0aWFsID0gc2xhYl90ZXN0X25vZGVfcGFydGlhbChzbGFiKTsKJiM0MzsJCX0gZWxzZSBpZiAoIXNwaW5fdHJ5bG9ja19pcnFzYXZlKCZhbXA7bi0mZ3Q7bGlzdF9sb2NrLCBmbGFncykpIHsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIGZ1bGwtJmd0O3BhcnRpYWwvZW1wdHk6IHRoZSBzbGFiIGlzIGZ1bGwsIHNvIGl0IGlzIG9uCiYjNDM7CQkJICogbm8gbGlzdDsgaWYgdGhlIGxpc3RfbG9jayBpcyBjb250ZW5kZWQsIHRoZW4gd2UKJiM0MzsJCQkgKiBwYXJrIHRoZSBzbGFiIHdpdGhvdXQgd2FpdGluZyBmb3IgdGhlIGxvY2suCiYjNDM7CQkJICovCiYjNDM7CQkJcGFyayA9IHRydWU7CiAJCX0KIAogCX0gd2hpbGUgKCFzbGFiX3VwZGF0ZV9mcmVlbGlzdChzLCBzbGFiLCAmYW1wO29sZCwgJmFtcDtuZXcsICYjMzQ7X19zbGFiX2ZyZWUmIzM0OykpOwogCi0JaWYgKGxpa2VseSghbikpIHsKLQkJLyoKLQkJICogV2UgZGlkbiYjMzk7dCB0YWtlIHRoZSBsaXN0X2xvY2sgYmVjYXVzZSB0aGUgc2xhYiB3YXMgYWxyZWFkeSBvbgotCQkgKiB0aGUgcGFydGlhbCBsaXN0IGFuZCB3aWxsIHJlbWFpbiB0aGVyZS4KLQkJICovCiYjNDM7CS8qIHBhcnRpYWwtJmd0O3BhcnRpYWw6IHdlIGRpZG4mIzM5O3QgdGFrZSB0aGUgbGlzdF9sb2NrLiAqLwomIzQzOwlpZiAobGlrZWx5KCFuKSkKIAkJcmV0dXJuOwotCX0KIAogCS8qCi0JICogVGhpcyBzbGFiIHdhcyBwYXJ0aWFsbHkgZW1wdHkgYnV0IG5vdCBvbiB0aGUgcGVyLW5vZGUgcGFydGlhbCBsaXN0LAotCSAqIGluIHdoaWNoIGNhc2Ugd2Ugc2hvdWxkbiYjMzk7dCBtYW5pcHVsYXRlIGl0cyBsaXN0LCBqdXN0IHJldHVybi4KJiM0MzsJICogUGFyayB0aGUgc2xhYi4gSWYgdGhpcyBwYXJrIG1ha2VzIHRoZSBwYXJrZWQgbGxpc3Qgbm9uLWVtcHR5LAomIzQzOwkgKiB0aGVuIHNjaGVkdWxlIHVucGFya193b3JrLgogCSAqLwomIzQzOwlpZiAodW5saWtlbHkocGFyaykpIHsKJiM0MzsJCWlmIChsbGlzdF9hZGQoc2xhYl90b19wYXJrZWRfbGxub2RlKHNsYWIpLCAmYW1wO24tJmd0O3BhcmtlZF9zbGFicykpCiYjNDM7CQkJcXVldWVfZGVsYXllZF93b3JrKGZsdXNod3EsICZhbXA7bi0mZ3Q7dW5wYXJrX3dvcmssCiYjNDM7CQkJCQkgICBVTlBBUktfREVMQVkpOwomIzQzOwkJc3RhdChzLCBQQVJLX1NMQUIpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CW9uX25vZGVfcGFydGlhbCA9IHNsYWJfdGVzdF9ub2RlX3BhcnRpYWwoc2xhYik7CiYjNDM7CiAJaWYgKCF3YXNfZnVsbCAmYW1wOyZhbXA7ICFvbl9ub2RlX3BhcnRpYWwpIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiBwYXJ0aWFsLSZndDtlbXB0eSwgb2ZmbGlzdDogdGhlIHNsYWIgaGFzIGJlZW4gdGFrZW4gb2ZmIHRoZQomIzQzOwkJICogcGFydGlhbCBsaXN0IGJ5IGEgYnVsayByZWZpbGwsIG9yIHBhcmtlZCBkdXJpbmcgaXRzIGZ1bGwgLSZndDsKJiM0MzsJCSAqIHBhcnRpYWwvZW1wdHkgdHJhbnNpdGlvbi4gSXQgd2lsbCBiZSBwdXQgYmFjayBieSBvdGhlciBwYXRocywKJiM0MzsJCSAqIHNvIHRoaXMgc2xhYiYjMzk7cyBsaXN0IGhhbmRsaW5nIGlzIG5vdCBvdXJzIHRvIGRvLgomIzQzOwkJICovCiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtuLSZndDtsaXN0X2xvY2ssIGZsYWdzKTsKIAkJcmV0dXJuOwogCX0KIAogCS8qCi0JICogSWYgc2xhYiBiZWNhbWUgZW1wdHksIHNob3VsZCB3ZSBhZGQva2VlcCBpdCBvbiB0aGUgcGFydGlhbCBsaXN0IG9yIHdlCi0JICogaGF2ZSBlbm91Z2g/CiYjNDM7CSAqIGZ1bGwvcGFydGlhbC0mZ3Q7ZW1wdHksIGV4Y2VlZDogd2UgaGF2ZSBlbm91Z2ggcGFydGlhbCBzbGFicyBhbHJlYWR5LgomIzQzOwkgKgomIzQzOwkgKiBQYXJrZWQgc2xhYnMgYXJlIGFsc28gY291bnRlZCBhcyBwYXJ0aWFsIHNsYWJzLiBXZSBkb24mIzM5O3QKJiM0MzsJICoga2VlcCBhbiBleGFjdCBjb3VudCBvZiBwYXJrZWQgc2xhYnMsIHNvIHdlIHRyZWF0IGFueSBwYXJrZWQKJiM0MzsJICogc2xhYiBhcyByb3VnaGx5IGV4Y2VlZGluZy4KIAkgKi8KLQlpZiAodW5saWtlbHkoIW5ldy5pbnVzZSAmYW1wOyZhbXA7IG4tJmd0O25yX3BhcnRpYWwgJmd0Oz0gcy0mZ3Q7bWluX3BhcnRpYWwpKQotCQlnb3RvIHNsYWJfZW1wdHk7CiYjNDM7CWlmICh1bmxpa2VseSghbmV3LmludXNlICZhbXA7JmFtcDsgKG4tJmd0O25yX3BhcnRpYWwgJmd0Oz0gcy0mZ3Q7bWluX3BhcnRpYWwgfHwKJiM0MzsJCQkJICAgICFsbGlzdF9lbXB0eSgmYW1wO24tJmd0O3BhcmtlZF9zbGFicykpKSkgewomIzQzOwkJLyogcGFydGlhbC0mZ3Q7ZW1wdHksIG9ubGlzdCwgZXhjZWVkICovCiYjNDM7CQlpZiAobGlrZWx5KCF3YXNfZnVsbCkpIHsKJiM0MzsJCQlyZW1vdmVfcGFydGlhbChuLCBzbGFiKTsKJiM0MzsJCQlzdGF0KHMsIEZSRUVfUkVNT1ZFX1BBUlRJQUwpOwomIzQzOwkJfQomIzQzOwkJLyogZWxzZSBmdWxsLSZndDtlbXB0eSwgZXhjZWVkOiBpdCBpcyBvbiBubyBsaXN0IHRvIHJlbW92ZSBmcm9tICovCiYjNDM7CiYjNDM7CQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7bi0mZ3Q7bGlzdF9sb2NrLCBmbGFncyk7CiYjNDM7CQlzdGF0KHMsIEZSRUVfU0xBQik7CiYjNDM7CQlkaXNjYXJkX3NsYWIocywgc2xhYik7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KIAogCS8qCi0JICogT2JqZWN0cyBsZWZ0IGluIHRoZSBzbGFiLiBJZiBpdCB3YXMgbm90IG9uIHRoZSBwYXJ0aWFsIGxpc3QgYmVmb3JlCi0JICogdGhlbiBhZGQgaXQuCiYjNDM7CSAqIEF0IHRoaXMgcG9pbnQsIG9ubHkgdGhyZWUgY2FzZXMgcmVtYWluOgomIzQzOwkgKiAgIGZ1bGwtJmd0O3BhcnRpYWwKJiM0MzsJICogICBmdWxsLSZndDtlbXB0eSwgbm90IGV4Y2VlZAomIzQzOwkgKiAgIHBhcnRpYWwtJmd0O2VtcHR5LCBvbmxpc3QsIG5vdCBleGNlZWQKIAkgKi8KJiM0MzsKJiM0MzsJLyogZnVsbC0mZ3Q7cGFydGlhbDsgZnVsbC0mZ3Q7ZW1wdHksIG5vdCBleGNlZWQgKi8KIAlpZiAodW5saWtlbHkod2FzX2Z1bGwpKSB7CiAJCWFkZF9wYXJ0aWFsKG4sIHNsYWIsIEFERF9UT19UQUlMKTsKIAkJc3RhdChzLCBGUkVFX0FERF9QQVJUSUFMKTsKIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO24tJmd0O2xpc3RfbG9jaywgZmxhZ3MpOwotCXJldHVybjsKLQotc2xhYl9lbXB0eToKLQkvKgotCSAqIFRoZSBzbGFiIGNvdWxkIGhhdmUgYSBzaW5nbGUgb2JqZWN0IGFuZCB0aHVzIGdvIGZyb20gZnVsbCB0byBlbXB0eSBpbgotCSAqIGEgc2luZ2xlIGZyZWUsIGJ1dCBtb3JlIGxpa2VseSBpdCB3YXMgb24gdGhlIHBhcnRpYWwgbGlzdC4gUmVtb3ZlIGl0LgotCSAqLwotCWlmIChsaWtlbHkoIXdhc19mdWxsKSkgewotCQlyZW1vdmVfcGFydGlhbChuLCBzbGFiKTsKLQkJc3RhdChzLCBGUkVFX1JFTU9WRV9QQVJUSUFMKTsKLQl9CiYjNDM7CS8qIGVsc2UgcGFydGlhbC0mZ3Q7ZW1wdHksIG9ubGlzdCwgbm90IGV4Y2VlZDogaXQgc3RheXMgb24gcGFydGlhbCBsaXN0ICovCiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7bi0mZ3Q7bGlzdF9sb2NrLCBmbGFncyk7Ci0Jc3RhdChzLCBGUkVFX1NMQUIpOwotCWRpc2NhcmRfc2xhYihzLCBzbGFiKTsKIH0KIAogLyoKQEAgLTczNTcsOCAmIzQzOzc1NTgsMTMgQEAgX19yZWZpbGxfb2JqZWN0c19hbnkoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKipwLCBnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBtaW4KIAogCQkJbiA9IGdldF9ub2RlKHMsIHpvbmVfdG9fbmlkKHpvbmUpKTsKIAomIzQzOwkJCS8qCiYjNDM7CQkJICogUGFya2VkIHNsYWJzIG1ha2UgdGhlIG5vZGUgd29ydGggdHJ5aW5nCiYjNDM7CQkJICogZXZlbiBpZiBucl9wYXJ0aWFsIGxvb2tzIGxvdy4KJiM0MzsJCQkgKi8KIAkJCWlmICghbiB8fCAhY3B1c2V0X3pvbmVfYWxsb3dlZCh6b25lLCBnZnApIHx8Ci0JCQkJCW4tJmd0O25yX3BhcnRpYWwgJmx0Oz0gcy0mZ3Q7bWluX3BhcnRpYWwpCiYjNDM7CQkJCQkobi0mZ3Q7bnJfcGFydGlhbCAmbHQ7PSBzLSZndDttaW5fcGFydGlhbCAmYW1wOyZhbXA7CiYjNDM7CQkJCQkgbGxpc3RfZW1wdHkoJmFtcDtuLSZndDtwYXJrZWRfc2xhYnMpKSkKIAkJCQljb250aW51ZTsKIAogCQkJciA9IF9fcmVmaWxsX29iamVjdHNfbm9kZShzLCBwLCBnZnAsIG1pbiwgbWF4LCBuLApAQCAtNzY3OSw2ICYjNDM7Nzg4NSw4IEBAIGluaXRfa21lbV9jYWNoZV9ub2RlKHN0cnVjdCBrbWVtX2NhY2hlX25vZGUgKm4pCiAJbi0mZ3Q7bnJfcGFydGlhbCA9IDA7CiAJc3Bpbl9sb2NrX2luaXQoJmFtcDtuLSZndDtsaXN0X2xvY2spOwogCUlOSVRfTElTVF9IRUFEKCZhbXA7bi0mZ3Q7cGFydGlhbCk7CiYjNDM7CWluaXRfbGxpc3RfaGVhZCgmYW1wO24tJmd0O3BhcmtlZF9zbGFicyk7CiYjNDM7CUlOSVRfREVMQVlFRF9XT1JLKCZhbXA7bi0mZ3Q7dW5wYXJrX3dvcmssIHVucGFya193b3JrX2ZuKTsKICNpZmRlZiBDT05GSUdfU0xVQl9ERUJVRwogCWF0b21pY19sb25nX3NldCgmYW1wO24tJmd0O25yX3NsYWJzLCAwKTsKIAlhdG9taWNfbG9uZ19zZXQoJmFtcDtuLSZndDt0b3RhbF9vYmplY3RzLCAwKTsKQEAgLTc4MTIsNiAmIzQzOzgwMjAsNyBAQCBzdGF0aWMgdm9pZCBmcmVlX2ttZW1fY2FjaGVfbm9kZXMoc3RydWN0IGttZW1fY2FjaGUgKnMpCiAJfQogCiAJZm9yX2VhY2hfa21lbV9jYWNoZV9ub2RlKHMsIG5vZGUsIG4pIHsKJiM0MzsJCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmYW1wO24tJmd0O3VucGFya193b3JrKTsKIAkJcy0mZ3Q7cGVyX25vZGVbbm9kZV0ubm9kZSA9IE5VTEw7CiAJCWttZW1fY2FjaGVfZnJlZShrbWVtX2NhY2hlX25vZGUsIG4pOwogCX0KQEAgLTgxMTIsNiAmIzQzOzgzMjEsMTAgQEAgc3RhdGljIHZvaWQgZnJlZV9wYXJ0aWFsKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlICpuKQogCiAJQlVHX09OKGlycXNfZGlzYWJsZWQoKSk7CiAJc3Bpbl9sb2NrX2lycSgmYW1wO24tJmd0O2xpc3RfbG9jayk7CiYjNDM7CiYjNDM7CS8qIFVucGFyayBzbGFicyBzbyB0aGUgd2FsayBjYW4gZmluZCB0aGVtLiAqLwomIzQzOwl1bnBhcmtfc2xhYnMocywgbiwgTlVMTCk7CiYjNDM7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNsYWIsIGgsICZhbXA7bi0mZ3Q7cGFydGlhbCwgc2xhYl9saXN0KSB7CiAJCWlmICghc2xhYi0mZ3Q7aW51c2UpIHsKIAkJCXJlbW92ZV9wYXJ0aWFsKG4sIHNsYWIpOwpAQCAtODM4Myw2ICYjNDM7ODU5Niw5IEBAIHN0YXRpYyBpbnQgX19rbWVtX2NhY2hlX2RvX3NocmluayhzdHJ1Y3Qga21lbV9jYWNoZSAqcykKIAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO24tJmd0O2xpc3RfbG9jaywgZmxhZ3MpOwogCiYjNDM7CQkvKiBQYXJrZWQgc2xhYnMgYXJlIHNocmluayBjYW5kaWRhdGVzIGFzIHdlbGwuICovCiYjNDM7CQl1bnBhcmtfc2xhYnMocywgbiwgTlVMTCk7CiYjNDM7CiAJCS8qCiAJCSAqIEJ1aWxkIGxpc3RzIG9mIHNsYWJzIHRvIGRpc2NhcmQgb3IgcHJvbW90ZS4KIAkJICoKQEAgLTk1MjIsNiAmIzQzOzk3MzgsOSBAQCBTVEFUX0FUVFIoRlJFRV9GQVNUUEFUSCwgZnJlZV9mYXN0cGF0aCk7CiBTVEFUX0FUVFIoRlJFRV9TTE9XUEFUSCwgZnJlZV9zbG93cGF0aCk7CiBTVEFUX0FUVFIoRlJFRV9BRERfUEFSVElBTCwgZnJlZV9hZGRfcGFydGlhbCk7CiBTVEFUX0FUVFIoRlJFRV9SRU1PVkVfUEFSVElBTCwgZnJlZV9yZW1vdmVfcGFydGlhbCk7CiYjNDM7U1RBVF9BVFRSKFBBUktfU0xBQiwgcGFya19zbGFiKTsKJiM0MztTVEFUX0FUVFIoVU5QQVJLX1NMQUIsIHVucGFya19zbGFiKTsKJiM0MztTVEFUX0FUVFIoVU5QQVJLX0VWRU5ULCB1bnBhcmtfZXZlbnQpOwogU1RBVF9BVFRSKEFMTE9DX1NMQUIsIGFsbG9jX3NsYWIpOwogU1RBVF9BVFRSKEFMTE9DX05PREVfTUlTTUFUQ0gsIGFsbG9jX25vZGVfbWlzbWF0Y2gpOwogU1RBVF9BVFRSKEZSRUVfU0xBQiwgZnJlZV9zbGFiKTsKQEAgLTk2MTAsNiAmIzQzOzk4MjksOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZSAqY29uc3Qgc2xhYl9hdHRyc1tdID0gewogCSZhbXA7ZnJlZV9zbG93cGF0aF9hdHRyLmF0dHIsCiAJJmFtcDtmcmVlX2FkZF9wYXJ0aWFsX2F0dHIuYXR0ciwKIAkmYW1wO2ZyZWVfcmVtb3ZlX3BhcnRpYWxfYXR0ci5hdHRyLAomIzQzOwkmYW1wO3Bhcmtfc2xhYl9hdHRyLmF0dHIsCiYjNDM7CSZhbXA7dW5wYXJrX3NsYWJfYXR0ci5hdHRyLAomIzQzOwkmYW1wO3VucGFya19ldmVudF9hdHRyLmF0dHIsCiAJJmFtcDthbGxvY19zbGFiX2F0dHIuYXR0ciwKIAkmYW1wO2FsbG9jX25vZGVfbWlzbWF0Y2hfYXR0ci5hdHRyLAogCSZhbXA7ZnJlZV9zbGFiX2F0dHIuYXR0ciwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE2OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgxODUKCQkJCQkJCW91dHB1dDogMjAzCgkJCQkJCQl0aG91Z2h0czogNTE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFwcGxpY2FiaWxpdHkgQXNzZXNzbWVudCBmb3IgU0xVQiBTbGFiIFBhcmtpbmcgT3B0aW1pemF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgYSAmIzM0O3BhcmtpbmcmIzM0OyBtZWNoYW5pc20gZm9yIHNsYWJzIHdpdGhpbiB0aGUgU0xVQiBhbGxvY2F0b3IuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgYWRkaW5nIGBwYXJrZWRfc2xhYnNgIHRvIGBrbWVtX2NhY2hlX25vZGVgIHRvIGhvbGQgc2xhYnMgd2l0aG91dCBsb2NraW5nLiBUaGUgZ29hbCBpcyB0byByZWR1Y2UgbG9jayBjb250ZW50aW9uIG9uIGBuLSZndDtsaXN0X2xvY2tgIGR1cmluZyB0aGUgc2xhYiBmcmVlaW5nIHByb2Nlc3MuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXaGVyZSBkb2VzIEtNU0FOIGZpdCBpbj8mIzM0OyBUaGlzIGlzIGludGVybmFsIFNMVUIgYWxsb2NhdG9yIGxvZ2ljLiBJdCYjMzk7cyB0b3VjaGluZyBmcmVlbGlzdHMsIHBhcnRpYWwgbGlzdHMsIGFuZCBzbGFiIHN0YXRlcyDigJMgYWxsIHZlcnkgaW50ZXJuYWwgZGV0YWlscy4gSXQmIzM5O3Mgbm90IGV4cG9zaW5nIG5ldyBkYXRhIHN0cnVjdHVyZXMgdG8gdXNlcnNwYWNlLCBhbmQgaXQmIzM5O3Mgbm90IGNoYW5naW5nIGhvdyBtZW1vcnkgaXMgaW5pdGlhbGl6ZWQgb3IgemVyb2VkLiBObyBuZXcgYm91bmRzIGNoZWNrcyBvciBsZW5ndGggY2FsY3VsYXRpb25zIGFyZSBpbnRyb2R1Y2VkIHRoYXQgY291bGQgbGVhZCB0byBpbmZvcm1hdGlvbiBsZWFrcyB2aWEgdW5pbml0aWFsaXplZCBtZW1vcnkuCgpUaGUgbGlrZWx5IGJ1Z3Mgd291bGQgYmUgdGhpbmdzIGxpa2UgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlcywgbGlzdCBjb3JydXB0aW9uIChsbGlzdCBvciBgbGlzdF9oZWFkYCBwcm9ibGVtcyksIG1lbW9yeSBsZWFrcyAodW5wYXJrZWQgc2xhYnMpLCBhbmQgY29uY3VycmVuY3kgaXNzdWVzIChyYWNlcyBiZXR3ZWVuIHBhcmtpbmcgYW5kIHVucGFya2luZykuIE5vdywgdGhlIGJlYXV0eSBvZiB0aGlzIGlzIHRoYXQgS0FTQU4gaXMgcGVyZmVjdGx5IGVxdWlwcGVkIHRvIGNhdGNoIHRoZSBVQUYgYW5kIGRvdWJsZS1mcmVlIGlzc3VlcywgYW5kIHRoZSBrZXJuZWwgZGVidWdnaW5nIHRvb2xzIChsaXN0IGRlYnVnZ2luZywgbG9ja2RlcCwgc2x1Yl9kZWJ1ZykgYXJlIHdlbGwtc3VpdGVkIGZvciB0cmFja2luZyB0aGUgcmVzdC4gVGhlcmUmIzM5O3Mgbm8gcmlzayBoZXJlIG9mIGluZm9ybWF0aW9uIGxlYWtzIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBUaGUgbW9kaWZpZWQgc3RydWN0dXJlcywgYGttZW1fY2FjaGVfbm9kZWAgYW5kIGBzbGFiYCwgYXJlICppbnRlcm5hbCogdG8gdGhlIGFsbG9jYXRvci4gVGhleSYjMzk7cmUgbm90IGJlaW5nIHNlbnQgdG8gb3IgZXhwb3NlZCB0byB1c2Vyc3BhY2UuCgpUaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBpcyBkZWZpbml0ZWx5IGBmYWxzZWAuCgpMZXQmIzM5O3MgZG8gYSBxdWljayBkb3VibGUtY2hlY2sgYWdhaW5zdCB0aGUgS01TQU4gcnVsZXMgdG8gYmUgYWJzb2x1dGVseSBzdXJlOgoKMS4gICoqS2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlcnNwYWNlOioqIE5vcGUuCjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzOioqIE5vcGUuIFRoZSB2YXJpYWJsZXMgaGVyZSBhcmUgYWxsIGludGVybmFsIHN0YXRlIHZhcmlhYmxlcyB0aGF0IGFyZSBmdWxseSBpbml0aWFsaXplZC4KMy4gICoqQ29tcGxleCBkYXRhIHN0cnVjdHVyZSBhbGxvY2F0aW9uL2luaXRpYWxpemF0aW9uOioqIE5vcGUuCjQuICAqKkJvdW5kcyBjaGVja3MgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBieXRlczoqKiBOb3BlLgoKU28sIHllYWgsIEkmIzM5O20gY29uZmlkZW50IGluIG15IGFzc2Vzc21lbnQuIGBOZWVkc0tNU0FOPWZhbHNlYCBpcyB0aGUgcmlnaHQgY2FsbCBoZXJlLiBJJiMzOTtsbCBmb3JtdWxhdGUgdGhlIHJlYXNvbmluZyBmb3IgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE2OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbnRlcm5hbCBTTFVCIGFsbG9jYXRvciBsb2dpYyB0byBpbnRyb2R1Y2UgYSBsb2NrbGVzcyBcJiMzNDtwYXJraW5nXCYjMzQ7IG1lY2hhbmlzbSBmb3Igc2xhYnMgdG8gcmVkdWNlIGxvY2sgY29udGVudGlvbiBvbiB0aGUgbm9kZSYjMzk7cyBsaXN0X2xvY2suIEl0IGFkZHMgYW4gbGxpc3QgZm9yIHBhcmtlZCBzbGFicyBhbmQgZGVsYXllZCB3b3JrIHRvIHVucGFyayB0aGVtLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBpbnRlcm5hbCBtZW1vcnkgbWFuYWdlbWVudCBzdHJ1Y3R1cmVzIChzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlLCBzdHJ1Y3Qgc2xhYikgYW5kIGZyZWVsaXN0IG9wZXJhdGlvbnMuIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBtYW5pZmVzdCBhcyBsaXN0IGNvcnJ1cHRpb25zLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIG9yIGNvbmN1cnJlbmN5IGlzc3VlcyAocmFjZSBjb25kaXRpb25zKS4gVGhlc2UgdHlwZXMgb2YgYnVncyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4sIHNsdWJfZGVidWcsIGxpc3QgZGVidWdnaW5nLCBhbmQgTE9DS0RFUC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWx0ZXIgbWVtb3J5IGluaXRpYWxpemF0aW9uIG9yIGJvdW5kcyBjaGVja2luZyBpbiBhIHdheSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBjYXVzZSBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW50ZXJuYWwgU0xVQiBhbGxvY2F0b3IgbG9naWMgdG8gaW50cm9kdWNlIGEgbG9ja2xlc3MgXCYjMzQ7cGFya2luZ1wmIzM0OyBtZWNoYW5pc20gZm9yIHNsYWJzIHRvIHJlZHVjZSBsb2NrIGNvbnRlbnRpb24gb24gdGhlIG5vZGUmIzM5O3MgbGlzdF9sb2NrLiBJdCBhZGRzIGFuIGxsaXN0IGZvciBwYXJrZWQgc2xhYnMgYW5kIGRlbGF5ZWQgd29yayB0byB1bnBhcmsgdGhlbS4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgaW50ZXJuYWwgbWVtb3J5IG1hbmFnZW1lbnQgc3RydWN0dXJlcyAoc3RydWN0IGttZW1fY2FjaGVfbm9kZSwgc3RydWN0IHNsYWIpIGFuZCBmcmVlbGlzdCBvcGVyYXRpb25zLiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgbWFuaWZlc3QgYXMgbGlzdCBjb3JydXB0aW9ucywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBvciBjb25jdXJyZW5jeSBpc3N1ZXMgKHJhY2UgY29uZGl0aW9ucykuIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLCBzbHViX2RlYnVnLCBsaXN0IGRlYnVnZ2luZywgYW5kIExPQ0tERVAuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcyBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFsdGVyIG1lbW9yeSBpbml0aWFsaXphdGlvbiBvciBib3VuZHMgY2hlY2tpbmcgaW4gYSB3YXkgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgY2F1c2UgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNTo0NzowNy41MTY4MDA3MzhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzcxOTU5NDY0MjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fa21lbV9jYWNoZV9zaHJpbmtcIixcbiAgICBcIl9fa21lbV9jYWNoZV9zaHV0ZG93blwiLFxuICAgIFwiX19rbWVtX2NhY2hlX2VtcHR5XCIsXG4gICAgXCJrbWVtX2NhY2hlX3Nocmlua1wiLFxuICAgIFwia21lbV9jYWNoZV9kZXN0cm95XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW50ZXJuYWwgU0xVQiBhbGxvY2F0b3IgbG9naWMgdG8gaW50cm9kdWNlIGEgbG9ja2xlc3MgXFxcInBhcmtpbmdcXFwiIG1lY2hhbmlzbSBmb3Igc2xhYnMgdG8gcmVkdWNlIGxvY2sgY29udGVudGlvbiBvbiB0aGUgbm9kZSdzIGxpc3RfbG9jay4gSXQgYWRkcyBhbiBsbGlzdCBmb3IgcGFya2VkIHNsYWJzIGFuZCBkZWxheWVkIHdvcmsgdG8gdW5wYXJrIHRoZW0uIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGludGVybmFsIG1lbW9yeSBtYW5hZ2VtZW50IHN0cnVjdHVyZXMgKHN0cnVjdCBrbWVtX2NhY2hlX25vZGUsIHN0cnVjdCBzbGFiKSBhbmQgZnJlZWxpc3Qgb3BlcmF0aW9ucy4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIG1hbmlmZXN0IGFzIGxpc3QgY29ycnVwdGlvbnMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgb3IgY29uY3VycmVuY3kgaXNzdWVzIChyYWNlIGNvbmRpdGlvbnMpLiBUaGVzZSB0eXBlcyBvZiBidWdzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiwgc2x1Yl9kZWJ1ZywgbGlzdCBkZWJ1Z2dpbmcsIGFuZCBMT0NLREVQLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgZXhwb3NlZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhbHRlciBtZW1vcnkgaW5pdGlhbGl6YXRpb24gb3IgYm91bmRzIGNoZWNraW5nIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGNhdXNlIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbG9ja2xlc3MgcGFya2luZyBtZWNoYW5pc20gZm9yIHNsYWJzIGluIHRoZSBTTFVCIGFsbG9jYXRvcidzIGZyZWUgc2xvd3BhdGggdG8gcmVkdWNlIGxpc3RfbG9jayBjb250ZW50aW9uLiBUaGlzIGlzIGEgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFmZmVjdHMgc2xhYiBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIGxvZ2ljLiBJdCBpcyByZWFjaGFibGUgYnkgZGVmYXVsdCBhbmQgc2hvdWxkIGJlIGZ1enplZC4gU2luY2UgYWxsb2NhdGlvbiBhbmQgZnJlZWluZyBhcmUgaG90IHBhdGhzLCB3ZSBmb2N1cyBvbiBjYWNoZSBzaHJpbmtpbmcgYW5kIGRlc3RydWN0aW9uIHBhdGhzIHdoaWNoIGFsc28gaW50ZXJhY3Qgd2l0aCB0aGUgbmV3IHVucGFya2luZyBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTU6NDc6MDcuNTE2ODA3NTc4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjkxMTkyODY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNWJiZThiZjIxMWZkNzBiZjJjYWEyOWViMzdmNzJkYjNkNjk2NDQ0NFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAyNCAxNTo0NzowNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9zbHViLmMgYi9tbS9zbHViLmNcXG5pbmRleCBiMGNkMDU3MmUyZjI2Li4yN2E3OGQ2M2Y1Mzc2IDEwMDY0NFxcbi0tLSBhL21tL3NsdWIuY1xcbisrKyBiL21tL3NsdWIuY1xcbkBAIC00OSw2ICs0OSw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zb3J0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pcnFfd29yay5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva3Byb2Jlcy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbGxpc3QuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RlYnVnZnMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3RyYWNlL2V2ZW50cy9rbWVtLmhcXHUwMDNlXFxuIFxcbkBAIC0xMjIsNiArMTIzLDggQEBcXG4gICogICAoTm90ZSB0aGF0IHRoZSB0b3RhbCBudW1iZXIgb2Ygc2xhYnMgaXMgYW4gYXRvbWljIHZhbHVlIHRoYXQgbWF5IGJlXFxuICAqICAgbW9kaWZpZWQgd2l0aG91dCB0YWtpbmcgdGhlIGxpc3QgbG9jaykuXFxuICAqXFxuKyAqICAgU2xhYnMgbWF5IGJlIHB1c2hlZCB0byBub2RlLVxcdTAwM2VwYXJrZWRfc2xhYnMgd2l0aG91dCBhY3F1aXJpbmcgbGlzdF9sb2NrLlxcbisgKlxcbiAgKiAgIFRoZSBsaXN0X2xvY2sgaXMgYSBjZW50cmFsaXplZCBsb2NrIGFuZCB0aHVzIHdlIGF2b2lkIHRha2luZyBpdCBhc1xcbiAgKiAgIG11Y2ggYXMgcG9zc2libGUuIEFzIGxvbmcgYXMgU0xVQiBkb2VzIG5vdCBoYXZlIHRvIGhhbmRsZSBwYXJ0aWFsXFxuICAqICAgc2xhYnMsIG9wZXJhdGlvbnMgY2FuIGNvbnRpbnVlIHdpdGhvdXQgYW55IGNlbnRyYWxpemVkIGxvY2suXFxuQEAgLTM2OCw2ICszNzEsOSBAQCBlbnVtIHN0YXRfaXRlbSB7XFxuIFxcdEZSRUVfU0xPV1BBVEgsXFx0XFx0LyogRnJlZSB0byBhIHNsYWIgKi9cXG4gXFx0RlJFRV9BRERfUEFSVElBTCxcXHQvKiBGcmVlaW5nIG1vdmVzIHNsYWIgdG8gcGFydGlhbCBsaXN0ICovXFxuIFxcdEZSRUVfUkVNT1ZFX1BBUlRJQUwsXFx0LyogRnJlZWluZyByZW1vdmVzIGxhc3Qgb2JqZWN0ICovXFxuK1xcdFBBUktfU0xBQixcXHRcXHQvKiBTbGFicyBwYXJrZWQgb250byB0aGUgbGxpc3QgYnkgZnJlZSBzbG93cGF0aCAqL1xcbitcXHRVTlBBUktfU0xBQixcXHRcXHQvKiBTbGFicyB1bnBhcmtlZCBmcm9tIHRoZSBsbGlzdCAqL1xcbitcXHRVTlBBUktfRVZFTlQsXFx0XFx0LyogVW5wYXJrIGV2ZW50cyAqL1xcbiBcXHRBTExPQ19TTEFCLFxcdFxcdC8qIE5ldyBzbGFiIGFjcXVpcmVkIGZyb20gcGFnZSBhbGxvY2F0b3IgKi9cXG4gXFx0QUxMT0NfTk9ERV9NSVNNQVRDSCxcXHQvKiBSZXF1ZXN0ZWQgbm9kZSBkaWZmZXJlbnQgZnJvbSBjcHUgc2hlYWYgKi9cXG4gXFx0RlJFRV9TTEFCLFxcdFxcdC8qIFNsYWIgZnJlZWQgdG8gdGhlIHBhZ2UgYWxsb2NhdG9yICovXFxuQEAgLTQ2Miw2ICs0NjgsMTQgQEAgc3RydWN0IGttZW1fY2FjaGVfbm9kZSB7XFxuIFxcdGF0b21pY19sb25nX3QgdG90YWxfb2JqZWN0cztcXG4gXFx0c3RydWN0IGxpc3RfaGVhZCBmdWxsO1xcbiAjZW5kaWZcXG4rXFx0LypcXG4rXFx0ICogSWYgbmVpdGhlciBzaGVhZiByZWZpbGwgbm9yIHRoZSBhbGxvYyBzbG93cGF0aCBwZXJmb3JtcyB0aGUgdW5wYXJrLFxcbitcXHQgKiB1bnBhcmtfd29ya19mbiB0YWtlcyBjYXJlIG9mIGl0LlxcbitcXHQgKi9cXG4rXFx0c3RydWN0IGRlbGF5ZWRfd29yayB1bnBhcmtfd29yaztcXG4rXFxuK1xcdC8qIFVzZWQgdG8gbGluayBwYXJrZWQgc2xhYnMgKi9cXG4rXFx0c3RydWN0IGxsaXN0X2hlYWQgcGFya2VkX3NsYWJzIF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7XFxuIH07XFxuIFxcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBrbWVtX2NhY2hlX25vZGUgKmdldF9ub2RlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBpbnQgbm9kZSlcXG5AQCAtNTA5LDYgKzUyMywxMiBAQCBzdGF0aWMgbm9kZW1hc2tfdCBzbGFiX2Jhcm5fbm9kZXM7XFxuICAqL1xcbiBzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmZsdXNod3E7XFxuIFxcbisvKlxcbisgKiBDZWlsaW5nIG9uIGhvdyBsb25nIHNsYWJzIHN0YXkgcGFya2VkIHdoZW4gbm8gc2hlYWYgcmVmaWxsIG9yIGFsbG9jXFxuKyAqIHNsb3dwYXRoIHVucGFya3MgdGhlbS5cXG4rICovXFxuKyNkZWZpbmUgVU5QQVJLX0RFTEFZXFx0KEhaKVxcbitcXG4gc3RydWN0IHNsdWJfZmx1c2hfd29yayB7XFxuIFxcdHN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrO1xcbiBcXHRzdHJ1Y3Qga21lbV9jYWNoZSAqcztcXG5AQCAtMzYyMyw2ICszNjQzLDEyMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcmVtb3ZlX3BhcnRpYWwoc3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbixcXG4gXFx0Y2xlYXJfbm9kZV9wYXJ0aWFsX3N0YXRlKG4sIHNsYWIpO1xcbiB9XFxuIFxcbisvKlxcbisgKiBBIHNsYWIgcGFya2VkIG9uIG4tXFx1MDAzZXBhcmtlZF9zbGFicyBpcyBub3Qgb24gcGFydGlhbCBsaXN0LCBzbyBpdHMgc2xhYl9saXN0IGlzXFxuKyAqIGZyZWUgYW5kIHdlIHJldXNlIGl0IGFzIHRoZSBsbGlzdF9ub2RlLlxcbisgKi9cXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgbGxpc3Rfbm9kZSAqc2xhYl90b19wYXJrZWRfbGxub2RlKHN0cnVjdCBzbGFiICpzbGFiKVxcbit7XFxuK1xcdHJldHVybiAoc3RydWN0IGxsaXN0X25vZGUgKilcXHUwMDI2c2xhYi1cXHUwMDNlc2xhYl9saXN0O1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBzbGFiICpwYXJrZWRfbGxub2RlX3RvX3NsYWIoc3RydWN0IGxsaXN0X25vZGUgKm5vZGUpXFxuK3tcXG4rXFx0cmV0dXJuIGNvbnRhaW5lcl9vZigoc3RydWN0IGxpc3RfaGVhZCAqKW5vZGUsIHN0cnVjdCBzbGFiLCBzbGFiX2xpc3QpO1xcbit9XFxuK1xcbisvKlxcbisgKiBNb3ZlIHNsYWJzIHBhcmtlZCBvbiBuLVxcdTAwM2VwYXJrZWRfc2xhYnMgdG8gbi1cXHUwMDNlcGFydGlhbC4gQ2FsbGVkIHdpdGggdGhlXFxuKyAqIGxpc3RfbG9jayBoZWxkLCBieSB0aGUgcGF0aHMgdGhhdCBjb25zdW1lIHRoZSBwYXJ0aWFsIGxpc3QsIG9uIGJlaGFsZiBvZiB0aGVcXG4rICogY3B1cyB0aGF0IGNvdWxkIG5vdCBnZXQgdGhlIGxvY2sgd2hlbiBwYXJraW5nLlxcbisgKlxcbisgKiBJZiBAZGlzY2FyZCBpcyBub3QgTlVMTCwgcHV0IGVtcHR5IHNsYWJzIGJleW9uZCBtaW5fcGFydGlhbCBvbiBAZGlzY2FyZCwgdGhlXFxuKyAqIGNhbGxlciBzaG91bGQgY2FsbCBkaXNjYXJkX3NsYWIoKSBhZnRlciBkcm9wcGluZyB0aGUgbG9jay4gIENhbGxlcnMgdGhhdCBtYXlcXG4rICogbm90IGZyZWUgcGFnZXMgaW4gdGhlaXIgY29udGV4dCBzaG91bGQgcGFzcyBOVUxMLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgdW5wYXJrX3NsYWJzKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlICpuLFxcbitcXHRcXHRcXHQgc3RydWN0IGxpc3RfaGVhZCAqZGlzY2FyZClcXG4re1xcbitcXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqcG9zLCAqbmV4dDtcXG4rXFx0dW5zaWduZWQgbG9uZyBhZGRlZCA9IDAsIGRpc2NhcmRlZCA9IDA7XFxuK1xcdHVuc2lnbmVkIGxvbmcgaGVhZHJvb20gPSAwO1xcbitcXHRMSVNUX0hFQUQodG9fYWRkKTtcXG4rXFxuK1xcdHNsYWJfbG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2bi1cXHUwMDNlbGlzdF9sb2NrKTtcXG4rXFxuK1xcdHBvcyA9IGxsaXN0X2RlbF9hbGwoXFx1MDAyNm4tXFx1MDAzZXBhcmtlZF9zbGFicyk7XFxuK1xcdGlmIChsaWtlbHkoIXBvcykpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIENhbGN1bGF0ZSBob3cgbWFueSBtb3JlIHNsYWJzIHRoZSBwYXJ0aWFsIGxpc3Qgd2FudHMgYmVmb3JlIGl0IGhhc1xcbitcXHQgKiByZWFjaGVkIG1pbl9wYXJ0aWFsLlxcbitcXHQgKi9cXG4rXFx0aWYgKHMtXFx1MDAzZW1pbl9wYXJ0aWFsIFxcdTAwM2Ugbi1cXHUwMDNlbnJfcGFydGlhbClcXG4rXFx0XFx0aGVhZHJvb20gPSBzLVxcdTAwM2VtaW5fcGFydGlhbCAtIG4tXFx1MDAzZW5yX3BhcnRpYWw7XFxuK1xcbitcXHRmb3IgKDsgcG9zOyBwb3MgPSBuZXh0KSB7XFxuK1xcdFxcdHN0cnVjdCBzbGFiICpzbGFiID0gcGFya2VkX2xsbm9kZV90b19zbGFiKHBvcyk7XFxuK1xcdFxcdHN0cnVjdCBmcmVlbGlzdF9jb3VudGVycyBmbGM7XFxuK1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBCYWNrIHVwIHRoZSBwb2ludGVyLCBiZWNhdXNlIHRoZSBsaXN0X2FkZF90YWlsKCkgYmVsb3dcXG4rXFx0XFx0ICogb3ZlcndyaXRlcyB0aGUgbGxpc3QgbGlua2FnZS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdG5leHQgPSBwb3MtXFx1MDAzZW5leHQ7XFxuK1xcbitcXHRcXHRpZiAoZGlzY2FyZCkge1xcbitcXHRcXHRcXHRmbGMuY291bnRlcnMgPSBkYXRhX3JhY2UoUkVBRF9PTkNFKHNsYWItXFx1MDAzZWNvdW50ZXJzKSk7XFxuK1xcdFxcdFxcdGlmICghZmxjLmludXNlIFxcdTAwMjZcXHUwMDI2IGFkZGVkIFxcdTAwM2U9IGhlYWRyb29tKSB7XFxuK1xcdFxcdFxcdFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNnNsYWItXFx1MDAzZXNsYWJfbGlzdCwgZGlzY2FyZCk7XFxuK1xcdFxcdFxcdFxcdGRpc2NhcmRlZCsrO1xcbitcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRzbGFiX3NldF9ub2RlX3BhcnRpYWwoc2xhYik7XFxuK1xcdFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNnNsYWItXFx1MDAzZXNsYWJfbGlzdCwgXFx1MDAyNnRvX2FkZCk7XFxuK1xcdFxcdGFkZGVkKys7XFxuK1xcdH1cXG4rXFxuK1xcdG4tXFx1MDAzZW5yX3BhcnRpYWwgKz0gYWRkZWQ7XFxuK1xcdGxpc3Rfc3BsaWNlX3RhaWwoXFx1MDAyNnRvX2FkZCwgXFx1MDAyNm4tXFx1MDAzZXBhcnRpYWwpO1xcbitcXG4rXFx0c3RhdF9hZGQocywgRlJFRV9BRERfUEFSVElBTCwgYWRkZWQpO1xcbitcXHRzdGF0X2FkZChzLCBVTlBBUktfU0xBQiwgYWRkZWQgKyBkaXNjYXJkZWQpO1xcbitcXHRpZiAodW5saWtlbHkoZGlzY2FyZGVkKSlcXG4rXFx0XFx0c3RhdF9hZGQocywgRlJFRV9TTEFCLCBkaXNjYXJkZWQpO1xcbitcXHRzdGF0KHMsIFVOUEFSS19FVkVOVCk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFBhcmtlZCBzbGFicyBhcmUgbm9ybWFsbHkgdW5wYXJrZWQgYnkgc2hlYWYgcmVmaWxsIG9yIHRoZSBhbGxvYyBzbG93cGF0aCwgYnV0XFxuKyAqIHdoZW4gdGhlIHN5c3RlbSBleHBlcmllbmNlcyBhIGhlYXZ5IGJ1cnN0IG9mIGZyZWVzLCBhYnJ1cHRseSBnb2VzIGlkbGUsXFxuKyAqIGFuZCBuZWl0aGVyIHNoZWFmIHJlZmlsbCBub3IgdGhlIGFsbG9jIHNsb3dwYXRoIGlzIHJlYWNoZWQsXFxuKyAqIHNvbWUgcGFya2VkIHNsYWJzIG1heSBiZSBsZWZ0IHN0cmFuZGVkIGluIHRoZSBwYXJrZWQgbGxpc3QuIFRoaXMgZnVuY3Rpb25cXG4rICogc2VydmVzIGFzIGEgbGFzdC1yZXNvcnQgZmFsbGJhY2suXFxuKyAqIFRoaXMgd29yayBpcyBzY2hlZHVsZWQgYnkgdGhlIGxsaXN0X2FkZCgpIHRoYXQgbWFrZXMgdGhlIHBhcmtlZCBsbGlzdCBub24tZW1wdHkuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCB1bnBhcmtfd29ya19mbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuK3tcXG4rXFx0c3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbiA9IGNvbnRhaW5lcl9vZih0b19kZWxheWVkX3dvcmsod29yayksXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgdW5wYXJrX3dvcmspO1xcbitcXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqZmlyc3Q7XFxuK1xcdHN0cnVjdCBrbWVtX2NhY2hlICpzO1xcbitcXHRzdHJ1Y3Qgc2xhYiAqc2xhYiwgKnQ7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuK1xcdExJU1RfSEVBRChkaXNjYXJkKTtcXG4rXFxuK1xcdGlmIChsaWtlbHkobGxpc3RfZW1wdHkoXFx1MDAyNm4tXFx1MDAzZXBhcmtlZF9zbGFicykpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2bi1cXHUwMDNlbGlzdF9sb2NrLCBmbGFncyk7XFxuK1xcbitcXHRmaXJzdCA9IFJFQURfT05DRShuLVxcdTAwM2VwYXJrZWRfc2xhYnMuZmlyc3QpO1xcbitcXHRpZiAodW5saWtlbHkoIWZpcnN0KSkge1xcbitcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZuLVxcdTAwM2VsaXN0X2xvY2ssIGZsYWdzKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcdHMgPSBwYXJrZWRfbGxub2RlX3RvX3NsYWIoZmlyc3QpLVxcdTAwM2VzbGFiX2NhY2hlO1xcbitcXG4rXFx0dW5wYXJrX3NsYWJzKHMsIG4sIFxcdTAwMjZkaXNjYXJkKTtcXG4rXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2bi1cXHUwMDNlbGlzdF9sb2NrLCBmbGFncyk7XFxuK1xcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2xhYiwgdCwgXFx1MDAyNmRpc2NhcmQsIHNsYWJfbGlzdClcXG4rXFx0XFx0ZGlzY2FyZF9zbGFiKHMsIHNsYWIpO1xcbit9XFxuK1xcbiAvKlxcbiAgKiBDYWxsZWQgb25seSBmb3Iga21lbV9jYWNoZV9kZWJ1ZygpIGNhY2hlcyBpbnN0ZWFkIG9mIHJlbW92ZV9wYXJ0aWFsKCksIHdpdGggYVxcbiAgKiBzbGFiIGZyb20gdGhlIG4tXFx1MDAzZXBhcnRpYWwgbGlzdC4gUmVtb3ZlIG9ubHkgYSBzaW5nbGUgb2JqZWN0IGZyb20gdGhlIHNsYWIsIGRvXFxuQEAgLTM4MTgsOSArMzk1NCwxMyBAQCBzdGF0aWMgYm9vbCBnZXRfcGFydGlhbF9ub2RlX2J1bGsoc3RydWN0IGttZW1fY2FjaGUgKnMsXFxuIFxcdHN0cnVjdCBzbGFiICpmaXJzdCA9IE5VTEwsICpsYXN0ID0gTlVMTDtcXG4gXFx0dW5zaWduZWQgaW50IHRvdGFsX2ZyZWUgPSAwO1xcbiBcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbitcXHRMSVNUX0hFQUQoZGlzY2FyZCk7XFxuIFxcbi1cXHQvKiBSYWN5IGNoZWNrIHRvIGF2b2lkIHRha2luZyB0aGUgbG9jayB1bm5lY2Vzc2FyaWx5LiAqL1xcbi1cXHRpZiAoIW4gfHwgZGF0YV9yYWNlKCFuLVxcdTAwM2Vucl9wYXJ0aWFsKSlcXG4rXFx0LypcXG4rXFx0ICogUmFjeSBjaGVjayB0byBhdm9pZCB0YWtpbmcgdGhlIGxvY2sgdW5uZWNlc3NhcmlseS5cXG4rXFx0ICogVGhlIHBhcmtlZF9zbGFicyBsbGlzdCBtdXN0IGFsc28gYmUgYWNjb3VudGVkIGZvci5cXG4rXFx0ICovXFxuK1xcdGlmICghbiB8fCAoIWRhdGFfcmFjZShuLVxcdTAwM2Vucl9wYXJ0aWFsKSBcXHUwMDI2XFx1MDAyNiBsbGlzdF9lbXB0eShcXHUwMDI2bi1cXHUwMDNlcGFya2VkX3NsYWJzKSkpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuIFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZwYy1cXHUwMDNlc2xhYnMpO1xcbkBAIC0zODMwLDYgKzM5NzAsOSBAQCBzdGF0aWMgYm9vbCBnZXRfcGFydGlhbF9ub2RlX2J1bGsoc3RydWN0IGttZW1fY2FjaGUgKnMsXFxuIFxcdGVsc2UgaWYgKCFzcGluX3RyeWxvY2tfaXJxc2F2ZShcXHUwMDI2bi1cXHUwMDNlbGlzdF9sb2NrLCBmbGFncykpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuK1xcdC8qIElmIHRoZXJlIGFyZSBwYXJrZWQgc2xhYnMsIG1vdmUgdGhlbSB0byB0aGUgcGFydGlhbCBsaXN0IGZpcnN0LiAqL1xcbitcXHR1bnBhcmtfc2xhYnMocywgbiwgYWxsb3dfc3BpbiA/IFxcdTAwMjZkaXNjYXJkIDogTlVMTCk7XFxuK1xcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2xhYiwgc2xhYjIsIFxcdTAwMjZuLVxcdTAwM2VwYXJ0aWFsLCBzbGFiX2xpc3QpIHtcXG4gXFx0XFx0c3RydWN0IGZyZWVsaXN0X2NvdW50ZXJzIGZsYztcXG4gXFx0XFx0dW5zaWduZWQgaW50IHNsYWJfZnJlZTtcXG5AQCAtMzg3NCw2ICs0MDE3LDEwIEBAIHN0YXRpYyBib29sIGdldF9wYXJ0aWFsX25vZGVfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG4gXFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZsYXN0LVxcdTAwM2VzbGFiX2xpc3QpO1xcbiBcXG4gXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2bi1cXHUwMDNlbGlzdF9sb2NrLCBmbGFncyk7XFxuK1xcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2xhYiwgc2xhYjIsIFxcdTAwMjZkaXNjYXJkLCBzbGFiX2xpc3QpXFxuK1xcdFxcdGRpc2NhcmRfc2xhYihzLCBzbGFiKTtcXG4rXFxuIFxcdHJldHVybiB0b3RhbF9mcmVlIFxcdTAwM2UgMDtcXG4gfVxcbiBcXG5AQCAtMzg4NSwyMyArNDAzMiwyOSBAQCBzdGF0aWMgdm9pZCAqZ2V0X2Zyb21fcGFydGlhbF9ub2RlKHN0cnVjdCBrbWVtX2NhY2hlICpzLFxcbiBcXHRcXHRcXHRcXHQgICBnZnBfdCBnZnBfZmxhZ3MsXFxuIFxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBzbGFiX2FsbG9jX2NvbnRleHQgKmFjKVxcbiB7XFxuK1xcdGJvb2wgYWxsb3dfc3BpbiA9IGFsbG9jX2ZsYWdzX2FsbG93X3NwaW5uaW5nKGFjLVxcdTAwM2VhbGxvY19mbGFncyk7XFxuIFxcdHN0cnVjdCBzbGFiICpzbGFiLCAqc2xhYjI7XFxuIFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIFxcdHZvaWQgKm9iamVjdCA9IE5VTEw7XFxuK1xcdExJU1RfSEVBRChkaXNjYXJkKTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIFJhY3kgY2hlY2suIElmIHdlIG1pc3Rha2VubHkgc2VlIG5vIHBhcnRpYWwgc2xhYnMgdGhlbiB3ZVxcbiBcXHQgKiBqdXN0IGFsbG9jYXRlIGFuIGVtcHR5IHNsYWIuIElmIHdlIG1pc3Rha2VubHkgdHJ5IHRvIGdldCBhXFxuIFxcdCAqIHBhcnRpYWwgc2xhYiBhbmQgdGhlcmUgaXMgbm9uZSBhdmFpbGFibGUgdGhlbiBnZXRfZnJvbV9wYXJ0aWFsKClcXG4tXFx0ICogd2lsbCByZXR1cm4gTlVMTC5cXG4rXFx0ICogd2lsbCByZXR1cm4gTlVMTC4gQWxzbyB0YWtlIHRoZSBwYXJrZWRfc2xhYnMgbGxpc3QgaW50byBhY2NvdW50LlxcbiBcXHQgKi9cXG4tXFx0aWYgKCFuIHx8ICFuLVxcdTAwM2Vucl9wYXJ0aWFsKVxcbitcXHRpZiAoIW4gfHwgKCFkYXRhX3JhY2Uobi1cXHUwMDNlbnJfcGFydGlhbCkgXFx1MDAyNlxcdTAwMjYgbGxpc3RfZW1wdHkoXFx1MDAyNm4tXFx1MDAzZXBhcmtlZF9zbGFicykpKVxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFxuLVxcdGlmIChhbGxvY19mbGFnc19hbGxvd19zcGlubmluZyhhYy1cXHUwMDNlYWxsb2NfZmxhZ3MpKVxcbitcXHRpZiAoYWxsb3dfc3BpbilcXG4gXFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNm4tXFx1MDAzZWxpc3RfbG9jaywgZmxhZ3MpO1xcbiBcXHRlbHNlIGlmICghc3Bpbl90cnlsb2NrX2lycXNhdmUoXFx1MDAyNm4tXFx1MDAzZWxpc3RfbG9jaywgZmxhZ3MpKVxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFxuK1xcdC8qIElmIHRoZXJlIGFyZSBwYXJrZWQgc2xhYnMsIG1vdmUgdGhlbSB0byB0aGUgcGFydGlhbCBsaXN0IGZpcnN0LiAqL1xcbitcXHR1bnBhcmtfc2xhYnMocywgbiwgYWxsb3dfc3BpbiA/IFxcdTAwMjZkaXNjYXJkIDogTlVMTCk7XFxuK1xcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2xhYiwgc2xhYjIsIFxcdTAwMjZuLVxcdTAwM2VwYXJ0aWFsLCBzbGFiX2xpc3QpIHtcXG4gXFxuIFxcdFxcdHN0cnVjdCBmcmVlbGlzdF9jb3VudGVycyBvbGQsIG5ldztcXG5AQCAtMzkzOSw2ICs0MDkyLDEwIEBAIHN0YXRpYyB2b2lkICpnZXRfZnJvbV9wYXJ0aWFsX25vZGUoc3RydWN0IGttZW1fY2FjaGUgKnMsXFxuIFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuIFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNm4tXFx1MDAzZWxpc3RfbG9jaywgZmxhZ3MpO1xcbitcXG4rXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNsYWIsIHNsYWIyLCBcXHUwMDI2ZGlzY2FyZCwgc2xhYl9saXN0KVxcbitcXHRcXHRkaXNjYXJkX3NsYWIocywgc2xhYik7XFxuK1xcbiBcXHRyZXR1cm4gb2JqZWN0O1xcbiB9XFxuIFxcbkBAIC0zOTk0LDggKzQxNTEsMTMgQEAgc3RhdGljIHZvaWQgKmdldF9mcm9tX2FueV9wYXJ0aWFsKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnBfZmxhZ3MsXFxuIFxcbiBcXHRcXHRcXHRuID0gZ2V0X25vZGUocywgem9uZV90b19uaWQoem9uZSkpO1xcbiBcXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogUGFya2VkIHNsYWJzIG1ha2UgdGhlIG5vZGUgd29ydGggdmlzaXRpbmcgZXZlbiBpZlxcbitcXHRcXHRcXHQgKiBucl9wYXJ0aWFsIGxvb2tzIGxvdy5cXG4rXFx0XFx0XFx0ICovXFxuIFxcdFxcdFxcdGlmIChuIFxcdTAwMjZcXHUwMDI2IGNwdXNldF96b25lX2FsbG93ZWQoem9uZSwgZ2ZwX2ZsYWdzKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHRcXHRcXHRcXHRuLVxcdTAwM2Vucl9wYXJ0aWFsIFxcdTAwM2Ugcy1cXHUwMDNlbWluX3BhcnRpYWwpIHtcXG4rXFx0XFx0XFx0XFx0XFx0KG4tXFx1MDAzZW5yX3BhcnRpYWwgXFx1MDAzZSBzLVxcdTAwM2VtaW5fcGFydGlhbCB8fFxcbitcXHRcXHRcXHRcXHRcXHQgIWxsaXN0X2VtcHR5KFxcdTAwMjZuLVxcdTAwM2VwYXJrZWRfc2xhYnMpKSkge1xcbiBcXG4gXFx0XFx0XFx0XFx0dm9pZCAqb2JqZWN0ID0gZ2V0X2Zyb21fcGFydGlhbF9ub2RlKHMsIG4sXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGdmcF9mbGFncywgYWMpO1xcbkBAIC01NzE5LDcgKzU4ODEsNyBAQCBzdGF0aWMgdm9pZCBfX3NsYWJfZnJlZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsXFxuIFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkcilcXG4gXFxuIHtcXG4tXFx0Ym9vbCB3YXNfZnVsbDtcXG4rXFx0Ym9vbCB3YXNfZnVsbCwgcGFyayA9IGZhbHNlO1xcbiBcXHRzdHJ1Y3QgZnJlZWxpc3RfY291bnRlcnMgb2xkLCBuZXc7XFxuIFxcdHN0cnVjdCBrbWVtX2NhY2hlX25vZGUgKm4gPSBOVUxMO1xcbiBcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbkBAIC01NzMxLDEwICs1ODkzLDExIEBAIHN0YXRpYyB2b2lkIF9fc2xhYl9mcmVlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYixcXG4gXFx0fVxcbiBcXG4gXFx0ZG8ge1xcbi1cXHRcXHRpZiAodW5saWtlbHkobikpIHtcXG4rXFx0XFx0aWYgKHVubGlrZWx5KG4gXFx1MDAyNlxcdTAwMjYgIXBhcmspKVxcbiBcXHRcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZuLVxcdTAwM2VsaXN0X2xvY2ssIGZsYWdzKTtcXG4tXFx0XFx0XFx0biA9IE5VTEw7XFxuLVxcdFxcdH1cXG4rXFxuK1xcdFxcdHBhcmsgPSBmYWxzZTtcXG4rXFx0XFx0biA9IE5VTEw7XFxuIFxcbiBcXHRcXHRvbGQuZnJlZWxpc3QgPSBzbGFiLVxcdTAwM2VmcmVlbGlzdDtcXG4gXFx0XFx0b2xkLmNvdW50ZXJzID0gc2xhYi1cXHUwMDNlY291bnRlcnM7XFxuQEAgLTU3NDgsNzYgKzU5MTEsMTE0IEBAIHN0YXRpYyB2b2lkIF9fc2xhYl9mcmVlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYixcXG4gXFx0XFx0bmV3LmludXNlIC09IGNudDtcXG4gXFxuIFxcdFxcdC8qXFxuLVxcdFxcdCAqIE1pZ2h0IG5lZWQgdG8gYmUgdGFrZW4gb2ZmIChkdWUgdG8gYmVjb21pbmcgZW1wdHkpIG9yIGFkZGVkXFxuLVxcdFxcdCAqIHRvIChkdWUgdG8gbm90IGJlaW5nIGZ1bGwgYW55bW9yZSkgdGhlIHBhcnRpYWwgbGlzdC5cXG4tXFx0XFx0ICogVW5sZXNzIGl0J3MgZnJvemVuLlxcbitcXHRcXHQgKiBwYXJ0aWFsLVxcdTAwM2VwYXJ0aWFsOiB0aGUgc2xhYiB3YXMgb24gdGhlIG5vZGUgcGFydGlhbCBsaXN0IGFuZFxcbitcXHRcXHQgKiB3aWxsIHN0aWxsIHN0YXkgdGhlcmUsIHNvIHdlIG5lZWQgbm8gbGlzdCBoYW5kbGluZyBhbmQgbm9cXG4rXFx0XFx0ICogbGlzdF9sb2NrLlxcbitcXHRcXHQgKlxcbitcXHRcXHQgKiBOb3RlIHRoYXQgXFxcImNvbnRpbnVlO1xcXCIgaW4gYSBkby13aGlsZSBnb2VzIG9uIHRvIGV2YWx1YXRlIHRoZVxcbitcXHRcXHQgKiBjb25kaXRpb24gYmVsb3csIHNvIHdlIGRvIHBlcmZvcm0gdGhlIGZyZWVsaXN0IHVwZGF0ZS5cXG4gXFx0XFx0ICovXFxuLVxcdFxcdGlmICghbmV3LmludXNlIHx8IHdhc19mdWxsKSB7XFxuK1xcdFxcdGlmICghd2FzX2Z1bGwgXFx1MDAyNlxcdTAwMjYgbmV3LmludXNlKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuLVxcdFxcdFxcdG4gPSBnZXRfbm9kZShzLCBzbGFiX25pZChzbGFiKSk7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFRoZSBzbGFiIG1pZ2h0IG5lZWQgdG8gYmUgdGFrZW4gb2ZmIChkdWUgdG8gYmVjb21pbmcgZW1wdHkpXFxuK1xcdFxcdCAqIG9yIGFkZGVkIHRvIChkdWUgdG8gbm90IGJlaW5nIGZ1bGwgYW55bW9yZSkgdGhlIHBhcnRpYWxcXG4rXFx0XFx0ICogbGlzdC5cXG4rXFx0XFx0ICpcXG4rXFx0XFx0ICogRm9yIHRoZSBmdWxsIC1cXHUwMDNlIHBhcnRpYWwvZW1wdHkgdHJhbnNpdGlvbiwgdXNlXFxuK1xcdFxcdCAqIHNwaW5fdHJ5bG9ja19pcnFzYXZlKCkgYW5kIHRoZSBwYXJraW5nIG1lY2hhbmlzbSB0byByZWR1Y2VcXG4rXFx0XFx0ICogbG9jayBjb250ZW50aW9uLlxcbitcXHRcXHQgKlxcbitcXHRcXHQgKiBJZiB0aGUgY21weGNoZyBkb2VzIG5vdCBzdWNjZWVkIHRoZW4gd2Ugd2lsbCByZXRyeS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdG4gPSBnZXRfbm9kZShzLCBzbGFiX25pZChzbGFiKSk7XFxuK1xcbitcXHRcXHRpZiAoIXdhc19mdWxsKSB7XFxuIFxcdFxcdFxcdC8qXFxuLVxcdFxcdFxcdCAqIFNwZWN1bGF0aXZlbHkgYWNxdWlyZSB0aGUgbGlzdF9sb2NrLlxcbi1cXHRcXHRcXHQgKiBJZiB0aGUgY21weGNoZyBkb2VzIG5vdCBzdWNjZWVkIHRoZW4gd2UgbWF5XFxuLVxcdFxcdFxcdCAqIGRyb3AgdGhlIGxpc3RfbG9jayB3aXRob3V0IGFueSBwcm9jZXNzaW5nLlxcbi1cXHRcXHRcXHQgKlxcbi1cXHRcXHRcXHQgKiBPdGhlcndpc2UgdGhlIGxpc3RfbG9jayB3aWxsIHN5bmNocm9uaXplIHdpdGhcXG4tXFx0XFx0XFx0ICogb3RoZXIgcHJvY2Vzc29ycyB1cGRhdGluZyB0aGUgbGlzdCBvZiBzbGFicy5cXG4rXFx0XFx0XFx0ICogcGFydGlhbC1cXHUwMDNlZW1wdHk6IHNwZWN1bGF0aXZlbHkgYWNxdWlyZSBsaXN0X2xvY2tcXG4rXFx0XFx0XFx0ICogcHJpb3IgdG8gY21weGNoZygpLCBhcyBwZXJmb3JtaW5nIGNtcHhjaGcoKSBiZWZvcmVcXG4rXFx0XFx0XFx0ICogbG9jayBhY3F1aXNpdGlvbiByYWNlcyB3aXRoIGNvbmN1cnJlbnQgb3BlcmF0aW9uc1xcbitcXHRcXHRcXHQgKiAoZS5nLiwgdGhlIHNocmlua2VyKS5cXG4gXFx0XFx0XFx0ICovXFxuIFxcdFxcdFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZuLVxcdTAwM2VsaXN0X2xvY2ssIGZsYWdzKTtcXG4tXFxuLVxcdFxcdFxcdG9uX25vZGVfcGFydGlhbCA9IHNsYWJfdGVzdF9ub2RlX3BhcnRpYWwoc2xhYik7XFxuK1xcdFxcdH0gZWxzZSBpZiAoIXNwaW5fdHJ5bG9ja19pcnFzYXZlKFxcdTAwMjZuLVxcdTAwM2VsaXN0X2xvY2ssIGZsYWdzKSkge1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBmdWxsLVxcdTAwM2VwYXJ0aWFsL2VtcHR5OiB0aGUgc2xhYiBpcyBmdWxsLCBzbyBpdCBpcyBvblxcbitcXHRcXHRcXHQgKiBubyBsaXN0OyBpZiB0aGUgbGlzdF9sb2NrIGlzIGNvbnRlbmRlZCwgdGhlbiB3ZVxcbitcXHRcXHRcXHQgKiBwYXJrIHRoZSBzbGFiIHdpdGhvdXQgd2FpdGluZyBmb3IgdGhlIGxvY2suXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRwYXJrID0gdHJ1ZTtcXG4gXFx0XFx0fVxcbiBcXG4gXFx0fSB3aGlsZSAoIXNsYWJfdXBkYXRlX2ZyZWVsaXN0KHMsIHNsYWIsIFxcdTAwMjZvbGQsIFxcdTAwMjZuZXcsIFxcXCJfX3NsYWJfZnJlZVxcXCIpKTtcXG4gXFxuLVxcdGlmIChsaWtlbHkoIW4pKSB7XFxuLVxcdFxcdC8qXFxuLVxcdFxcdCAqIFdlIGRpZG4ndCB0YWtlIHRoZSBsaXN0X2xvY2sgYmVjYXVzZSB0aGUgc2xhYiB3YXMgYWxyZWFkeSBvblxcbi1cXHRcXHQgKiB0aGUgcGFydGlhbCBsaXN0IGFuZCB3aWxsIHJlbWFpbiB0aGVyZS5cXG4tXFx0XFx0ICovXFxuK1xcdC8qIHBhcnRpYWwtXFx1MDAzZXBhcnRpYWw6IHdlIGRpZG4ndCB0YWtlIHRoZSBsaXN0X2xvY2suICovXFxuK1xcdGlmIChsaWtlbHkoIW4pKVxcbiBcXHRcXHRyZXR1cm47XFxuLVxcdH1cXG4gXFxuIFxcdC8qXFxuLVxcdCAqIFRoaXMgc2xhYiB3YXMgcGFydGlhbGx5IGVtcHR5IGJ1dCBub3Qgb24gdGhlIHBlci1ub2RlIHBhcnRpYWwgbGlzdCxcXG4tXFx0ICogaW4gd2hpY2ggY2FzZSB3ZSBzaG91bGRuJ3QgbWFuaXB1bGF0ZSBpdHMgbGlzdCwganVzdCByZXR1cm4uXFxuK1xcdCAqIFBhcmsgdGhlIHNsYWIuIElmIHRoaXMgcGFyayBtYWtlcyB0aGUgcGFya2VkIGxsaXN0IG5vbi1lbXB0eSxcXG4rXFx0ICogdGhlbiBzY2hlZHVsZSB1bnBhcmtfd29yay5cXG4gXFx0ICovXFxuK1xcdGlmICh1bmxpa2VseShwYXJrKSkge1xcbitcXHRcXHRpZiAobGxpc3RfYWRkKHNsYWJfdG9fcGFya2VkX2xsbm9kZShzbGFiKSwgXFx1MDAyNm4tXFx1MDAzZXBhcmtlZF9zbGFicykpXFxuK1xcdFxcdFxcdHF1ZXVlX2RlbGF5ZWRfd29yayhmbHVzaHdxLCBcXHUwMDI2bi1cXHUwMDNldW5wYXJrX3dvcmssXFxuK1xcdFxcdFxcdFxcdFxcdCAgIFVOUEFSS19ERUxBWSk7XFxuK1xcdFxcdHN0YXQocywgUEFSS19TTEFCKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRvbl9ub2RlX3BhcnRpYWwgPSBzbGFiX3Rlc3Rfbm9kZV9wYXJ0aWFsKHNsYWIpO1xcbitcXG4gXFx0aWYgKCF3YXNfZnVsbCBcXHUwMDI2XFx1MDAyNiAhb25fbm9kZV9wYXJ0aWFsKSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIHBhcnRpYWwtXFx1MDAzZWVtcHR5LCBvZmZsaXN0OiB0aGUgc2xhYiBoYXMgYmVlbiB0YWtlbiBvZmYgdGhlXFxuK1xcdFxcdCAqIHBhcnRpYWwgbGlzdCBieSBhIGJ1bGsgcmVmaWxsLCBvciBwYXJrZWQgZHVyaW5nIGl0cyBmdWxsIC1cXHUwMDNlXFxuK1xcdFxcdCAqIHBhcnRpYWwvZW1wdHkgdHJhbnNpdGlvbi4gSXQgd2lsbCBiZSBwdXQgYmFjayBieSBvdGhlciBwYXRocyxcXG4rXFx0XFx0ICogc28gdGhpcyBzbGFiJ3MgbGlzdCBoYW5kbGluZyBpcyBub3Qgb3VycyB0byBkby5cXG4rXFx0XFx0ICovXFxuIFxcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNm4tXFx1MDAzZWxpc3RfbG9jaywgZmxhZ3MpO1xcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4gXFxuIFxcdC8qXFxuLVxcdCAqIElmIHNsYWIgYmVjYW1lIGVtcHR5LCBzaG91bGQgd2UgYWRkL2tlZXAgaXQgb24gdGhlIHBhcnRpYWwgbGlzdCBvciB3ZVxcbi1cXHQgKiBoYXZlIGVub3VnaD9cXG4rXFx0ICogZnVsbC9wYXJ0aWFsLVxcdTAwM2VlbXB0eSwgZXhjZWVkOiB3ZSBoYXZlIGVub3VnaCBwYXJ0aWFsIHNsYWJzIGFscmVhZHkuXFxuK1xcdCAqXFxuK1xcdCAqIFBhcmtlZCBzbGFicyBhcmUgYWxzbyBjb3VudGVkIGFzIHBhcnRpYWwgc2xhYnMuIFdlIGRvbid0XFxuK1xcdCAqIGtlZXAgYW4gZXhhY3QgY291bnQgb2YgcGFya2VkIHNsYWJzLCBzbyB3ZSB0cmVhdCBhbnkgcGFya2VkXFxuK1xcdCAqIHNsYWIgYXMgcm91Z2hseSBleGNlZWRpbmcuXFxuIFxcdCAqL1xcbi1cXHRpZiAodW5saWtlbHkoIW5ldy5pbnVzZSBcXHUwMDI2XFx1MDAyNiBuLVxcdTAwM2Vucl9wYXJ0aWFsIFxcdTAwM2U9IHMtXFx1MDAzZW1pbl9wYXJ0aWFsKSlcXG4tXFx0XFx0Z290byBzbGFiX2VtcHR5O1xcbitcXHRpZiAodW5saWtlbHkoIW5ldy5pbnVzZSBcXHUwMDI2XFx1MDAyNiAobi1cXHUwMDNlbnJfcGFydGlhbCBcXHUwMDNlPSBzLVxcdTAwM2VtaW5fcGFydGlhbCB8fFxcbitcXHRcXHRcXHRcXHQgICAgIWxsaXN0X2VtcHR5KFxcdTAwMjZuLVxcdTAwM2VwYXJrZWRfc2xhYnMpKSkpIHtcXG4rXFx0XFx0LyogcGFydGlhbC1cXHUwMDNlZW1wdHksIG9ubGlzdCwgZXhjZWVkICovXFxuK1xcdFxcdGlmIChsaWtlbHkoIXdhc19mdWxsKSkge1xcbitcXHRcXHRcXHRyZW1vdmVfcGFydGlhbChuLCBzbGFiKTtcXG4rXFx0XFx0XFx0c3RhdChzLCBGUkVFX1JFTU9WRV9QQVJUSUFMKTtcXG4rXFx0XFx0fVxcbitcXHRcXHQvKiBlbHNlIGZ1bGwtXFx1MDAzZWVtcHR5LCBleGNlZWQ6IGl0IGlzIG9uIG5vIGxpc3QgdG8gcmVtb3ZlIGZyb20gKi9cXG4rXFxuK1xcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNm4tXFx1MDAzZWxpc3RfbG9jaywgZmxhZ3MpO1xcbitcXHRcXHRzdGF0KHMsIEZSRUVfU0xBQik7XFxuK1xcdFxcdGRpc2NhcmRfc2xhYihzLCBzbGFiKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuIFxcbiBcXHQvKlxcbi1cXHQgKiBPYmplY3RzIGxlZnQgaW4gdGhlIHNsYWIuIElmIGl0IHdhcyBub3Qgb24gdGhlIHBhcnRpYWwgbGlzdCBiZWZvcmVcXG4tXFx0ICogdGhlbiBhZGQgaXQuXFxuK1xcdCAqIEF0IHRoaXMgcG9pbnQsIG9ubHkgdGhyZWUgY2FzZXMgcmVtYWluOlxcbitcXHQgKiAgIGZ1bGwtXFx1MDAzZXBhcnRpYWxcXG4rXFx0ICogICBmdWxsLVxcdTAwM2VlbXB0eSwgbm90IGV4Y2VlZFxcbitcXHQgKiAgIHBhcnRpYWwtXFx1MDAzZWVtcHR5LCBvbmxpc3QsIG5vdCBleGNlZWRcXG4gXFx0ICovXFxuK1xcbitcXHQvKiBmdWxsLVxcdTAwM2VwYXJ0aWFsOyBmdWxsLVxcdTAwM2VlbXB0eSwgbm90IGV4Y2VlZCAqL1xcbiBcXHRpZiAodW5saWtlbHkod2FzX2Z1bGwpKSB7XFxuIFxcdFxcdGFkZF9wYXJ0aWFsKG4sIHNsYWIsIEFERF9UT19UQUlMKTtcXG4gXFx0XFx0c3RhdChzLCBGUkVFX0FERF9QQVJUSUFMKTtcXG4gXFx0fVxcbi1cXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZuLVxcdTAwM2VsaXN0X2xvY2ssIGZsYWdzKTtcXG4tXFx0cmV0dXJuO1xcbi1cXG4tc2xhYl9lbXB0eTpcXG4tXFx0LypcXG4tXFx0ICogVGhlIHNsYWIgY291bGQgaGF2ZSBhIHNpbmdsZSBvYmplY3QgYW5kIHRodXMgZ28gZnJvbSBmdWxsIHRvIGVtcHR5IGluXFxuLVxcdCAqIGEgc2luZ2xlIGZyZWUsIGJ1dCBtb3JlIGxpa2VseSBpdCB3YXMgb24gdGhlIHBhcnRpYWwgbGlzdC4gUmVtb3ZlIGl0Llxcbi1cXHQgKi9cXG4tXFx0aWYgKGxpa2VseSghd2FzX2Z1bGwpKSB7XFxuLVxcdFxcdHJlbW92ZV9wYXJ0aWFsKG4sIHNsYWIpO1xcbi1cXHRcXHRzdGF0KHMsIEZSRUVfUkVNT1ZFX1BBUlRJQUwpO1xcbi1cXHR9XFxuK1xcdC8qIGVsc2UgcGFydGlhbC1cXHUwMDNlZW1wdHksIG9ubGlzdCwgbm90IGV4Y2VlZDogaXQgc3RheXMgb24gcGFydGlhbCBsaXN0ICovXFxuIFxcbiBcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZuLVxcdTAwM2VsaXN0X2xvY2ssIGZsYWdzKTtcXG4tXFx0c3RhdChzLCBGUkVFX1NMQUIpO1xcbi1cXHRkaXNjYXJkX3NsYWIocywgc2xhYik7XFxuIH1cXG4gXFxuIC8qXFxuQEAgLTczNTcsOCArNzU1OCwxMyBAQCBfX3JlZmlsbF9vYmplY3RzX2FueShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqKnAsIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG1pblxcbiBcXG4gXFx0XFx0XFx0biA9IGdldF9ub2RlKHMsIHpvbmVfdG9fbmlkKHpvbmUpKTtcXG4gXFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIFBhcmtlZCBzbGFicyBtYWtlIHRoZSBub2RlIHdvcnRoIHRyeWluZ1xcbitcXHRcXHRcXHQgKiBldmVuIGlmIG5yX3BhcnRpYWwgbG9va3MgbG93LlxcbitcXHRcXHRcXHQgKi9cXG4gXFx0XFx0XFx0aWYgKCFuIHx8ICFjcHVzZXRfem9uZV9hbGxvd2VkKHpvbmUsIGdmcCkgfHxcXG4tXFx0XFx0XFx0XFx0XFx0bi1cXHUwMDNlbnJfcGFydGlhbCBcXHUwMDNjPSBzLVxcdTAwM2VtaW5fcGFydGlhbClcXG4rXFx0XFx0XFx0XFx0XFx0KG4tXFx1MDAzZW5yX3BhcnRpYWwgXFx1MDAzYz0gcy1cXHUwMDNlbWluX3BhcnRpYWwgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0XFx0XFx0IGxsaXN0X2VtcHR5KFxcdTAwMjZuLVxcdTAwM2VwYXJrZWRfc2xhYnMpKSlcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuIFxcbiBcXHRcXHRcXHRyID0gX19yZWZpbGxfb2JqZWN0c19ub2RlKHMsIHAsIGdmcCwgbWluLCBtYXgsIG4sXFxuQEAgLTc2NzksNiArNzg4NSw4IEBAIGluaXRfa21lbV9jYWNoZV9ub2RlKHN0cnVjdCBrbWVtX2NhY2hlX25vZGUgKm4pXFxuIFxcdG4tXFx1MDAzZW5yX3BhcnRpYWwgPSAwO1xcbiBcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2bi1cXHUwMDNlbGlzdF9sb2NrKTtcXG4gXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNm4tXFx1MDAzZXBhcnRpYWwpO1xcbitcXHRpbml0X2xsaXN0X2hlYWQoXFx1MDAyNm4tXFx1MDAzZXBhcmtlZF9zbGFicyk7XFxuK1xcdElOSVRfREVMQVlFRF9XT1JLKFxcdTAwMjZuLVxcdTAwM2V1bnBhcmtfd29yaywgdW5wYXJrX3dvcmtfZm4pO1xcbiAjaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcXG4gXFx0YXRvbWljX2xvbmdfc2V0KFxcdTAwMjZuLVxcdTAwM2Vucl9zbGFicywgMCk7XFxuIFxcdGF0b21pY19sb25nX3NldChcXHUwMDI2bi1cXHUwMDNldG90YWxfb2JqZWN0cywgMCk7XFxuQEAgLTc4MTIsNiArODAyMCw3IEBAIHN0YXRpYyB2b2lkIGZyZWVfa21lbV9jYWNoZV9ub2RlcyhzdHJ1Y3Qga21lbV9jYWNoZSAqcylcXG4gXFx0fVxcbiBcXG4gXFx0Zm9yX2VhY2hfa21lbV9jYWNoZV9ub2RlKHMsIG5vZGUsIG4pIHtcXG4rXFx0XFx0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFxcdTAwMjZuLVxcdTAwM2V1bnBhcmtfd29yayk7XFxuIFxcdFxcdHMtXFx1MDAzZXBlcl9ub2RlW25vZGVdLm5vZGUgPSBOVUxMO1xcbiBcXHRcXHRrbWVtX2NhY2hlX2ZyZWUoa21lbV9jYWNoZV9ub2RlLCBuKTtcXG4gXFx0fVxcbkBAIC04MTEyLDYgKzgzMjEsMTAgQEAgc3RhdGljIHZvaWQgZnJlZV9wYXJ0aWFsKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlICpuKVxcbiBcXG4gXFx0QlVHX09OKGlycXNfZGlzYWJsZWQoKSk7XFxuIFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNm4tXFx1MDAzZWxpc3RfbG9jayk7XFxuK1xcbitcXHQvKiBVbnBhcmsgc2xhYnMgc28gdGhlIHdhbGsgY2FuIGZpbmQgdGhlbS4gKi9cXG4rXFx0dW5wYXJrX3NsYWJzKHMsIG4sIE5VTEwpO1xcbitcXG4gXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNsYWIsIGgsIFxcdTAwMjZuLVxcdTAwM2VwYXJ0aWFsLCBzbGFiX2xpc3QpIHtcXG4gXFx0XFx0aWYgKCFzbGFiLVxcdTAwM2VpbnVzZSkge1xcbiBcXHRcXHRcXHRyZW1vdmVfcGFydGlhbChuLCBzbGFiKTtcXG5AQCAtODM4Myw2ICs4NTk2LDkgQEAgc3RhdGljIGludCBfX2ttZW1fY2FjaGVfZG9fc2hyaW5rKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxcbiBcXG4gXFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNm4tXFx1MDAzZWxpc3RfbG9jaywgZmxhZ3MpO1xcbiBcXG4rXFx0XFx0LyogUGFya2VkIHNsYWJzIGFyZSBzaHJpbmsgY2FuZGlkYXRlcyBhcyB3ZWxsLiAqL1xcbitcXHRcXHR1bnBhcmtfc2xhYnMocywgbiwgTlVMTCk7XFxuK1xcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBCdWlsZCBsaXN0cyBvZiBzbGFicyB0byBkaXNjYXJkIG9yIHByb21vdGUuXFxuIFxcdFxcdCAqXFxuQEAgLTk1MjIsNiArOTczOCw5IEBAIFNUQVRfQVRUUihGUkVFX0ZBU1RQQVRILCBmcmVlX2Zhc3RwYXRoKTtcXG4gU1RBVF9BVFRSKEZSRUVfU0xPV1BBVEgsIGZyZWVfc2xvd3BhdGgpO1xcbiBTVEFUX0FUVFIoRlJFRV9BRERfUEFSVElBTCwgZnJlZV9hZGRfcGFydGlhbCk7XFxuIFNUQVRfQVRUUihGUkVFX1JFTU9WRV9QQVJUSUFMLCBmcmVlX3JlbW92ZV9wYXJ0aWFsKTtcXG4rU1RBVF9BVFRSKFBBUktfU0xBQiwgcGFya19zbGFiKTtcXG4rU1RBVF9BVFRSKFVOUEFSS19TTEFCLCB1bnBhcmtfc2xhYik7XFxuK1NUQVRfQVRUUihVTlBBUktfRVZFTlQsIHVucGFya19ldmVudCk7XFxuIFNUQVRfQVRUUihBTExPQ19TTEFCLCBhbGxvY19zbGFiKTtcXG4gU1RBVF9BVFRSKEFMTE9DX05PREVfTUlTTUFUQ0gsIGFsbG9jX25vZGVfbWlzbWF0Y2gpO1xcbiBTVEFUX0FUVFIoRlJFRV9TTEFCLCBmcmVlX3NsYWIpO1xcbkBAIC05NjEwLDYgKzk4MjksOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZSAqY29uc3Qgc2xhYl9hdHRyc1tdID0ge1xcbiBcXHRcXHUwMDI2ZnJlZV9zbG93cGF0aF9hdHRyLmF0dHIsXFxuIFxcdFxcdTAwMjZmcmVlX2FkZF9wYXJ0aWFsX2F0dHIuYXR0cixcXG4gXFx0XFx1MDAyNmZyZWVfcmVtb3ZlX3BhcnRpYWxfYXR0ci5hdHRyLFxcbitcXHRcXHUwMDI2cGFya19zbGFiX2F0dHIuYXR0cixcXG4rXFx0XFx1MDAyNnVucGFya19zbGFiX2F0dHIuYXR0cixcXG4rXFx0XFx1MDAyNnVucGFya19ldmVudF9hdHRyLmF0dHIsXFxuIFxcdFxcdTAwMjZhbGxvY19zbGFiX2F0dHIuYXR0cixcXG4gXFx0XFx1MDAyNmFsbG9jX25vZGVfbWlzbWF0Y2hfYXR0ci5hdHRyLFxcbiBcXHRcXHUwMDI2ZnJlZV9zbGFiX2F0dHIuYXR0cixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTU6NDc6MDkuMjA5MDIzNzE0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTMwNzQ4NTIyNTE2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2ttZW1fY2FjaGVfc2hyaW5rXCIsXG4gICAgXCJfX2ttZW1fY2FjaGVfc2h1dGRvd25cIixcbiAgICBcIl9fa21lbV9jYWNoZV9lbXB0eVwiLFxuICAgIFwia21lbV9jYWNoZV9zaHJpbmtcIixcbiAgICBcImttZW1fY2FjaGVfZGVzdHJveVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBsb2NrbGVzcyBwYXJraW5nIG1lY2hhbmlzbSBmb3Igc2xhYnMgaW4gdGhlIFNMVUIgYWxsb2NhdG9yJ3MgZnJlZSBzbG93cGF0aCB0byByZWR1Y2UgbGlzdF9sb2NrIGNvbnRlbnRpb24uIFRoaXMgaXMgYSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWZmZWN0cyBzbGFiIGFsbG9jYXRpb24gYW5kIGZyZWVpbmcgbG9naWMuIEl0IGlzIHJlYWNoYWJsZSBieSBkZWZhdWx0IGFuZCBzaG91bGQgYmUgZnV6emVkLiBTaW5jZSBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIGFyZSBob3QgcGF0aHMsIHdlIGZvY3VzIG9uIGNhY2hlIHNocmlua2luZyBhbmQgZGVzdHJ1Y3Rpb24gcGF0aHMgd2hpY2ggYWxzbyBpbnRlcmFjdCB3aXRoIHRoZSBuZXcgdW5wYXJraW5nIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1YmJlOGJmMjExZmQ3MGJmMmNhYTI5ZWIzN2Y3MmRiM2Q2OTY0NDQ0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMjQgMTU6NDc6MDUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9zbHViLmMgYi9tbS9zbHViLmNcbmluZGV4IGIwY2QwNTcyZTJmMjYuLjI3YTc4ZDYzZjUzNzYgMTAwNjQ0XG4tLS0gYS9tbS9zbHViLmNcbisrKyBiL21tL3NsdWIuY1xuQEAgLTQ5LDYgKzQ5LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zb3J0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pcnFfd29yay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva3Byb2Jlcy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbGxpc3QuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlYnVnZnMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3RyYWNlL2V2ZW50cy9rbWVtLmhcdTAwM2VcbiBcbkBAIC0xMjIsNiArMTIzLDggQEBcbiAgKiAgIChOb3RlIHRoYXQgdGhlIHRvdGFsIG51bWJlciBvZiBzbGFicyBpcyBhbiBhdG9taWMgdmFsdWUgdGhhdCBtYXkgYmVcbiAgKiAgIG1vZGlmaWVkIHdpdGhvdXQgdGFraW5nIHRoZSBsaXN0IGxvY2spLlxuICAqXG4rICogICBTbGFicyBtYXkgYmUgcHVzaGVkIHRvIG5vZGUtXHUwMDNlcGFya2VkX3NsYWJzIHdpdGhvdXQgYWNxdWlyaW5nIGxpc3RfbG9jay5cbisgKlxuICAqICAgVGhlIGxpc3RfbG9jayBpcyBhIGNlbnRyYWxpemVkIGxvY2sgYW5kIHRodXMgd2UgYXZvaWQgdGFraW5nIGl0IGFzXG4gICogICBtdWNoIGFzIHBvc3NpYmxlLiBBcyBsb25nIGFzIFNMVUIgZG9lcyBub3QgaGF2ZSB0byBoYW5kbGUgcGFydGlhbFxuICAqICAgc2xhYnMsIG9wZXJhdGlvbnMgY2FuIGNvbnRpbnVlIHdpdGhvdXQgYW55IGNlbnRyYWxpemVkIGxvY2suXG5AQCAtMzY4LDYgKzM3MSw5IEBAIGVudW0gc3RhdF9pdGVtIHtcbiBcdEZSRUVfU0xPV1BBVEgsXHRcdC8qIEZyZWUgdG8gYSBzbGFiICovXG4gXHRGUkVFX0FERF9QQVJUSUFMLFx0LyogRnJlZWluZyBtb3ZlcyBzbGFiIHRvIHBhcnRpYWwgbGlzdCAqL1xuIFx0RlJFRV9SRU1PVkVfUEFSVElBTCxcdC8qIEZyZWVpbmcgcmVtb3ZlcyBsYXN0IG9iamVjdCAqL1xuK1x0UEFSS19TTEFCLFx0XHQvKiBTbGFicyBwYXJrZWQgb250byB0aGUgbGxpc3QgYnkgZnJlZSBzbG93cGF0aCAqL1xuK1x0VU5QQVJLX1NMQUIsXHRcdC8qIFNsYWJzIHVucGFya2VkIGZyb20gdGhlIGxsaXN0ICovXG4rXHRVTlBBUktfRVZFTlQsXHRcdC8qIFVucGFyayBldmVudHMgKi9cbiBcdEFMTE9DX1NMQUIsXHRcdC8qIE5ldyBzbGFiIGFjcXVpcmVkIGZyb20gcGFnZSBhbGxvY2F0b3IgKi9cbiBcdEFMTE9DX05PREVfTUlTTUFUQ0gsXHQvKiBSZXF1ZXN0ZWQgbm9kZSBkaWZmZXJlbnQgZnJvbSBjcHUgc2hlYWYgKi9cbiBcdEZSRUVfU0xBQixcdFx0LyogU2xhYiBmcmVlZCB0byB0aGUgcGFnZSBhbGxvY2F0b3IgKi9cbkBAIC00NjIsNiArNDY4LDE0IEBAIHN0cnVjdCBrbWVtX2NhY2hlX25vZGUge1xuIFx0YXRvbWljX2xvbmdfdCB0b3RhbF9vYmplY3RzO1xuIFx0c3RydWN0IGxpc3RfaGVhZCBmdWxsO1xuICNlbmRpZlxuK1x0LypcbitcdCAqIElmIG5laXRoZXIgc2hlYWYgcmVmaWxsIG5vciB0aGUgYWxsb2Mgc2xvd3BhdGggcGVyZm9ybXMgdGhlIHVucGFyayxcbitcdCAqIHVucGFya193b3JrX2ZuIHRha2VzIGNhcmUgb2YgaXQuXG4rXHQgKi9cbitcdHN0cnVjdCBkZWxheWVkX3dvcmsgdW5wYXJrX3dvcms7XG4rXG4rXHQvKiBVc2VkIHRvIGxpbmsgcGFya2VkIHNsYWJzICovXG4rXHRzdHJ1Y3QgbGxpc3RfaGVhZCBwYXJrZWRfc2xhYnMgX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDtcbiB9O1xuIFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGttZW1fY2FjaGVfbm9kZSAqZ2V0X25vZGUoc3RydWN0IGttZW1fY2FjaGUgKnMsIGludCBub2RlKVxuQEAgLTUwOSw2ICs1MjMsMTIgQEAgc3RhdGljIG5vZGVtYXNrX3Qgc2xhYl9iYXJuX25vZGVzO1xuICAqL1xuIHN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqZmx1c2h3cTtcbiBcbisvKlxuKyAqIENlaWxpbmcgb24gaG93IGxvbmcgc2xhYnMgc3RheSBwYXJrZWQgd2hlbiBubyBzaGVhZiByZWZpbGwgb3IgYWxsb2NcbisgKiBzbG93cGF0aCB1bnBhcmtzIHRoZW0uXG4rICovXG4rI2RlZmluZSBVTlBBUktfREVMQVlcdChIWilcbitcbiBzdHJ1Y3Qgc2x1Yl9mbHVzaF93b3JrIHtcbiBcdHN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrO1xuIFx0c3RydWN0IGttZW1fY2FjaGUgKnM7XG5AQCAtMzYyMyw2ICszNjQzLDEyMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcmVtb3ZlX3BhcnRpYWwoc3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbixcbiBcdGNsZWFyX25vZGVfcGFydGlhbF9zdGF0ZShuLCBzbGFiKTtcbiB9XG4gXG4rLypcbisgKiBBIHNsYWIgcGFya2VkIG9uIG4tXHUwMDNlcGFya2VkX3NsYWJzIGlzIG5vdCBvbiBwYXJ0aWFsIGxpc3QsIHNvIGl0cyBzbGFiX2xpc3QgaXNcbisgKiBmcmVlIGFuZCB3ZSByZXVzZSBpdCBhcyB0aGUgbGxpc3Rfbm9kZS5cbisgKi9cbitzdGF0aWMgaW5saW5lIHN0cnVjdCBsbGlzdF9ub2RlICpzbGFiX3RvX3BhcmtlZF9sbG5vZGUoc3RydWN0IHNsYWIgKnNsYWIpXG4re1xuK1x0cmV0dXJuIChzdHJ1Y3QgbGxpc3Rfbm9kZSAqKVx1MDAyNnNsYWItXHUwMDNlc2xhYl9saXN0O1xuK31cbitcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBzbGFiICpwYXJrZWRfbGxub2RlX3RvX3NsYWIoc3RydWN0IGxsaXN0X25vZGUgKm5vZGUpXG4re1xuK1x0cmV0dXJuIGNvbnRhaW5lcl9vZigoc3RydWN0IGxpc3RfaGVhZCAqKW5vZGUsIHN0cnVjdCBzbGFiLCBzbGFiX2xpc3QpO1xuK31cbitcbisvKlxuKyAqIE1vdmUgc2xhYnMgcGFya2VkIG9uIG4tXHUwMDNlcGFya2VkX3NsYWJzIHRvIG4tXHUwMDNlcGFydGlhbC4gQ2FsbGVkIHdpdGggdGhlXG4rICogbGlzdF9sb2NrIGhlbGQsIGJ5IHRoZSBwYXRocyB0aGF0IGNvbnN1bWUgdGhlIHBhcnRpYWwgbGlzdCwgb24gYmVoYWxmIG9mIHRoZVxuKyAqIGNwdXMgdGhhdCBjb3VsZCBub3QgZ2V0IHRoZSBsb2NrIHdoZW4gcGFya2luZy5cbisgKlxuKyAqIElmIEBkaXNjYXJkIGlzIG5vdCBOVUxMLCBwdXQgZW1wdHkgc2xhYnMgYmV5b25kIG1pbl9wYXJ0aWFsIG9uIEBkaXNjYXJkLCB0aGVcbisgKiBjYWxsZXIgc2hvdWxkIGNhbGwgZGlzY2FyZF9zbGFiKCkgYWZ0ZXIgZHJvcHBpbmcgdGhlIGxvY2suICBDYWxsZXJzIHRoYXQgbWF5XG4rICogbm90IGZyZWUgcGFnZXMgaW4gdGhlaXIgY29udGV4dCBzaG91bGQgcGFzcyBOVUxMLlxuKyAqL1xuK3N0YXRpYyB2b2lkIHVucGFya19zbGFicyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbixcbitcdFx0XHQgc3RydWN0IGxpc3RfaGVhZCAqZGlzY2FyZClcbit7XG4rXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqcG9zLCAqbmV4dDtcbitcdHVuc2lnbmVkIGxvbmcgYWRkZWQgPSAwLCBkaXNjYXJkZWQgPSAwO1xuK1x0dW5zaWduZWQgbG9uZyBoZWFkcm9vbSA9IDA7XG4rXHRMSVNUX0hFQUQodG9fYWRkKTtcbitcbitcdHNsYWJfbG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZuLVx1MDAzZWxpc3RfbG9jayk7XG4rXG4rXHRwb3MgPSBsbGlzdF9kZWxfYWxsKFx1MDAyNm4tXHUwMDNlcGFya2VkX3NsYWJzKTtcbitcdGlmIChsaWtlbHkoIXBvcykpXG4rXHRcdHJldHVybjtcbitcbitcdC8qXG4rXHQgKiBDYWxjdWxhdGUgaG93IG1hbnkgbW9yZSBzbGFicyB0aGUgcGFydGlhbCBsaXN0IHdhbnRzIGJlZm9yZSBpdCBoYXNcbitcdCAqIHJlYWNoZWQgbWluX3BhcnRpYWwuXG4rXHQgKi9cbitcdGlmIChzLVx1MDAzZW1pbl9wYXJ0aWFsIFx1MDAzZSBuLVx1MDAzZW5yX3BhcnRpYWwpXG4rXHRcdGhlYWRyb29tID0gcy1cdTAwM2VtaW5fcGFydGlhbCAtIG4tXHUwMDNlbnJfcGFydGlhbDtcbitcbitcdGZvciAoOyBwb3M7IHBvcyA9IG5leHQpIHtcbitcdFx0c3RydWN0IHNsYWIgKnNsYWIgPSBwYXJrZWRfbGxub2RlX3RvX3NsYWIocG9zKTtcbitcdFx0c3RydWN0IGZyZWVsaXN0X2NvdW50ZXJzIGZsYztcbitcbitcdFx0LypcbitcdFx0ICogQmFjayB1cCB0aGUgcG9pbnRlciwgYmVjYXVzZSB0aGUgbGlzdF9hZGRfdGFpbCgpIGJlbG93XG4rXHRcdCAqIG92ZXJ3cml0ZXMgdGhlIGxsaXN0IGxpbmthZ2UuXG4rXHRcdCAqL1xuK1x0XHRuZXh0ID0gcG9zLVx1MDAzZW5leHQ7XG4rXG4rXHRcdGlmIChkaXNjYXJkKSB7XG4rXHRcdFx0ZmxjLmNvdW50ZXJzID0gZGF0YV9yYWNlKFJFQURfT05DRShzbGFiLVx1MDAzZWNvdW50ZXJzKSk7XG4rXHRcdFx0aWYgKCFmbGMuaW51c2UgXHUwMDI2XHUwMDI2IGFkZGVkIFx1MDAzZT0gaGVhZHJvb20pIHtcbitcdFx0XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2c2xhYi1cdTAwM2VzbGFiX2xpc3QsIGRpc2NhcmQpO1xuK1x0XHRcdFx0ZGlzY2FyZGVkKys7XG4rXHRcdFx0XHRjb250aW51ZTtcbitcdFx0XHR9XG4rXHRcdH1cbitcbitcdFx0c2xhYl9zZXRfbm9kZV9wYXJ0aWFsKHNsYWIpO1xuK1x0XHRsaXN0X2FkZF90YWlsKFx1MDAyNnNsYWItXHUwMDNlc2xhYl9saXN0LCBcdTAwMjZ0b19hZGQpO1xuK1x0XHRhZGRlZCsrO1xuK1x0fVxuK1xuK1x0bi1cdTAwM2Vucl9wYXJ0aWFsICs9IGFkZGVkO1xuK1x0bGlzdF9zcGxpY2VfdGFpbChcdTAwMjZ0b19hZGQsIFx1MDAyNm4tXHUwMDNlcGFydGlhbCk7XG4rXG4rXHRzdGF0X2FkZChzLCBGUkVFX0FERF9QQVJUSUFMLCBhZGRlZCk7XG4rXHRzdGF0X2FkZChzLCBVTlBBUktfU0xBQiwgYWRkZWQgKyBkaXNjYXJkZWQpO1xuK1x0aWYgKHVubGlrZWx5KGRpc2NhcmRlZCkpXG4rXHRcdHN0YXRfYWRkKHMsIEZSRUVfU0xBQiwgZGlzY2FyZGVkKTtcbitcdHN0YXQocywgVU5QQVJLX0VWRU5UKTtcbit9XG4rXG4rLypcbisgKiBQYXJrZWQgc2xhYnMgYXJlIG5vcm1hbGx5IHVucGFya2VkIGJ5IHNoZWFmIHJlZmlsbCBvciB0aGUgYWxsb2Mgc2xvd3BhdGgsIGJ1dFxuKyAqIHdoZW4gdGhlIHN5c3RlbSBleHBlcmllbmNlcyBhIGhlYXZ5IGJ1cnN0IG9mIGZyZWVzLCBhYnJ1cHRseSBnb2VzIGlkbGUsXG4rICogYW5kIG5laXRoZXIgc2hlYWYgcmVmaWxsIG5vciB0aGUgYWxsb2Mgc2xvd3BhdGggaXMgcmVhY2hlZCxcbisgKiBzb21lIHBhcmtlZCBzbGFicyBtYXkgYmUgbGVmdCBzdHJhbmRlZCBpbiB0aGUgcGFya2VkIGxsaXN0LiBUaGlzIGZ1bmN0aW9uXG4rICogc2VydmVzIGFzIGEgbGFzdC1yZXNvcnQgZmFsbGJhY2suXG4rICogVGhpcyB3b3JrIGlzIHNjaGVkdWxlZCBieSB0aGUgbGxpc3RfYWRkKCkgdGhhdCBtYWtlcyB0aGUgcGFya2VkIGxsaXN0IG5vbi1lbXB0eS5cbisgKi9cbitzdGF0aWMgdm9pZCB1bnBhcmtfd29ya19mbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4re1xuK1x0c3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbiA9IGNvbnRhaW5lcl9vZih0b19kZWxheWVkX3dvcmsod29yayksXG4rXHRcdFx0XHRcdFx0IHN0cnVjdCBrbWVtX2NhY2hlX25vZGUsXG4rXHRcdFx0XHRcdFx0IHVucGFya193b3JrKTtcbitcdHN0cnVjdCBsbGlzdF9ub2RlICpmaXJzdDtcbitcdHN0cnVjdCBrbWVtX2NhY2hlICpzO1xuK1x0c3RydWN0IHNsYWIgKnNsYWIsICp0O1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbitcdExJU1RfSEVBRChkaXNjYXJkKTtcbitcbitcdGlmIChsaWtlbHkobGxpc3RfZW1wdHkoXHUwMDI2bi1cdTAwM2VwYXJrZWRfc2xhYnMpKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2bi1cdTAwM2VsaXN0X2xvY2ssIGZsYWdzKTtcbitcbitcdGZpcnN0ID0gUkVBRF9PTkNFKG4tXHUwMDNlcGFya2VkX3NsYWJzLmZpcnN0KTtcbitcdGlmICh1bmxpa2VseSghZmlyc3QpKSB7XG4rXHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2bi1cdTAwM2VsaXN0X2xvY2ssIGZsYWdzKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1x0cyA9IHBhcmtlZF9sbG5vZGVfdG9fc2xhYihmaXJzdCktXHUwMDNlc2xhYl9jYWNoZTtcbitcbitcdHVucGFya19zbGFicyhzLCBuLCBcdTAwMjZkaXNjYXJkKTtcbitcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2bi1cdTAwM2VsaXN0X2xvY2ssIGZsYWdzKTtcbitcbitcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzbGFiLCB0LCBcdTAwMjZkaXNjYXJkLCBzbGFiX2xpc3QpXG4rXHRcdGRpc2NhcmRfc2xhYihzLCBzbGFiKTtcbit9XG4rXG4gLypcbiAgKiBDYWxsZWQgb25seSBmb3Iga21lbV9jYWNoZV9kZWJ1ZygpIGNhY2hlcyBpbnN0ZWFkIG9mIHJlbW92ZV9wYXJ0aWFsKCksIHdpdGggYVxuICAqIHNsYWIgZnJvbSB0aGUgbi1cdTAwM2VwYXJ0aWFsIGxpc3QuIFJlbW92ZSBvbmx5IGEgc2luZ2xlIG9iamVjdCBmcm9tIHRoZSBzbGFiLCBkb1xuQEAgLTM4MTgsOSArMzk1NCwxMyBAQCBzdGF0aWMgYm9vbCBnZXRfcGFydGlhbF9ub2RlX2J1bGsoc3RydWN0IGttZW1fY2FjaGUgKnMsXG4gXHRzdHJ1Y3Qgc2xhYiAqZmlyc3QgPSBOVUxMLCAqbGFzdCA9IE5VTEw7XG4gXHR1bnNpZ25lZCBpbnQgdG90YWxfZnJlZSA9IDA7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuK1x0TElTVF9IRUFEKGRpc2NhcmQpO1xuIFxuLVx0LyogUmFjeSBjaGVjayB0byBhdm9pZCB0YWtpbmcgdGhlIGxvY2sgdW5uZWNlc3NhcmlseS4gKi9cbi1cdGlmICghbiB8fCBkYXRhX3JhY2UoIW4tXHUwMDNlbnJfcGFydGlhbCkpXG4rXHQvKlxuK1x0ICogUmFjeSBjaGVjayB0byBhdm9pZCB0YWtpbmcgdGhlIGxvY2sgdW5uZWNlc3NhcmlseS5cbitcdCAqIFRoZSBwYXJrZWRfc2xhYnMgbGxpc3QgbXVzdCBhbHNvIGJlIGFjY291bnRlZCBmb3IuXG4rXHQgKi9cbitcdGlmICghbiB8fCAoIWRhdGFfcmFjZShuLVx1MDAzZW5yX3BhcnRpYWwpIFx1MDAyNlx1MDAyNiBsbGlzdF9lbXB0eShcdTAwMjZuLVx1MDAzZXBhcmtlZF9zbGFicykpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZwYy1cdTAwM2VzbGFicyk7XG5AQCAtMzgzMCw2ICszOTcwLDkgQEAgc3RhdGljIGJvb2wgZ2V0X3BhcnRpYWxfbm9kZV9idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLFxuIFx0ZWxzZSBpZiAoIXNwaW5fdHJ5bG9ja19pcnFzYXZlKFx1MDAyNm4tXHUwMDNlbGlzdF9sb2NrLCBmbGFncykpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbitcdC8qIElmIHRoZXJlIGFyZSBwYXJrZWQgc2xhYnMsIG1vdmUgdGhlbSB0byB0aGUgcGFydGlhbCBsaXN0IGZpcnN0LiAqL1xuK1x0dW5wYXJrX3NsYWJzKHMsIG4sIGFsbG93X3NwaW4gPyBcdTAwMjZkaXNjYXJkIDogTlVMTCk7XG4rXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2xhYiwgc2xhYjIsIFx1MDAyNm4tXHUwMDNlcGFydGlhbCwgc2xhYl9saXN0KSB7XG4gXHRcdHN0cnVjdCBmcmVlbGlzdF9jb3VudGVycyBmbGM7XG4gXHRcdHVuc2lnbmVkIGludCBzbGFiX2ZyZWU7XG5AQCAtMzg3NCw2ICs0MDE3LDEwIEBAIHN0YXRpYyBib29sIGdldF9wYXJ0aWFsX25vZGVfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbiBcdFx0XHRcdCAgICBcdTAwMjZsYXN0LVx1MDAzZXNsYWJfbGlzdCk7XG4gXG4gXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNm4tXHUwMDNlbGlzdF9sb2NrLCBmbGFncyk7XG4rXG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2xhYiwgc2xhYjIsIFx1MDAyNmRpc2NhcmQsIHNsYWJfbGlzdClcbitcdFx0ZGlzY2FyZF9zbGFiKHMsIHNsYWIpO1xuK1xuIFx0cmV0dXJuIHRvdGFsX2ZyZWUgXHUwMDNlIDA7XG4gfVxuIFxuQEAgLTM4ODUsMjMgKzQwMzIsMjkgQEAgc3RhdGljIHZvaWQgKmdldF9mcm9tX3BhcnRpYWxfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbiBcdFx0XHRcdCAgIGdmcF90IGdmcF9mbGFncyxcbiBcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBzbGFiX2FsbG9jX2NvbnRleHQgKmFjKVxuIHtcbitcdGJvb2wgYWxsb3dfc3BpbiA9IGFsbG9jX2ZsYWdzX2FsbG93X3NwaW5uaW5nKGFjLVx1MDAzZWFsbG9jX2ZsYWdzKTtcbiBcdHN0cnVjdCBzbGFiICpzbGFiLCAqc2xhYjI7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0dm9pZCAqb2JqZWN0ID0gTlVMTDtcbitcdExJU1RfSEVBRChkaXNjYXJkKTtcbiBcbiBcdC8qXG4gXHQgKiBSYWN5IGNoZWNrLiBJZiB3ZSBtaXN0YWtlbmx5IHNlZSBubyBwYXJ0aWFsIHNsYWJzIHRoZW4gd2VcbiBcdCAqIGp1c3QgYWxsb2NhdGUgYW4gZW1wdHkgc2xhYi4gSWYgd2UgbWlzdGFrZW5seSB0cnkgdG8gZ2V0IGFcbiBcdCAqIHBhcnRpYWwgc2xhYiBhbmQgdGhlcmUgaXMgbm9uZSBhdmFpbGFibGUgdGhlbiBnZXRfZnJvbV9wYXJ0aWFsKClcbi1cdCAqIHdpbGwgcmV0dXJuIE5VTEwuXG4rXHQgKiB3aWxsIHJldHVybiBOVUxMLiBBbHNvIHRha2UgdGhlIHBhcmtlZF9zbGFicyBsbGlzdCBpbnRvIGFjY291bnQuXG4gXHQgKi9cbi1cdGlmICghbiB8fCAhbi1cdTAwM2Vucl9wYXJ0aWFsKVxuK1x0aWYgKCFuIHx8ICghZGF0YV9yYWNlKG4tXHUwMDNlbnJfcGFydGlhbCkgXHUwMDI2XHUwMDI2IGxsaXN0X2VtcHR5KFx1MDAyNm4tXHUwMDNlcGFya2VkX3NsYWJzKSkpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuLVx0aWYgKGFsbG9jX2ZsYWdzX2FsbG93X3NwaW5uaW5nKGFjLVx1MDAzZWFsbG9jX2ZsYWdzKSlcbitcdGlmIChhbGxvd19zcGluKVxuIFx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZuLVx1MDAzZWxpc3RfbG9jaywgZmxhZ3MpO1xuIFx0ZWxzZSBpZiAoIXNwaW5fdHJ5bG9ja19pcnFzYXZlKFx1MDAyNm4tXHUwMDNlbGlzdF9sb2NrLCBmbGFncykpXG4gXHRcdHJldHVybiBOVUxMO1xuK1xuK1x0LyogSWYgdGhlcmUgYXJlIHBhcmtlZCBzbGFicywgbW92ZSB0aGVtIHRvIHRoZSBwYXJ0aWFsIGxpc3QgZmlyc3QuICovXG4rXHR1bnBhcmtfc2xhYnMocywgbiwgYWxsb3dfc3BpbiA/IFx1MDAyNmRpc2NhcmQgOiBOVUxMKTtcbitcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzbGFiLCBzbGFiMiwgXHUwMDI2bi1cdTAwM2VwYXJ0aWFsLCBzbGFiX2xpc3QpIHtcbiBcbiBcdFx0c3RydWN0IGZyZWVsaXN0X2NvdW50ZXJzIG9sZCwgbmV3O1xuQEAgLTM5MzksNiArNDA5MiwxMCBAQCBzdGF0aWMgdm9pZCAqZ2V0X2Zyb21fcGFydGlhbF9ub2RlKHN0cnVjdCBrbWVtX2NhY2hlICpzLFxuIFx0XHRicmVhaztcbiBcdH1cbiBcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2bi1cdTAwM2VsaXN0X2xvY2ssIGZsYWdzKTtcbitcbitcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzbGFiLCBzbGFiMiwgXHUwMDI2ZGlzY2FyZCwgc2xhYl9saXN0KVxuK1x0XHRkaXNjYXJkX3NsYWIocywgc2xhYik7XG4rXG4gXHRyZXR1cm4gb2JqZWN0O1xuIH1cbiBcbkBAIC0zOTk0LDggKzQxNTEsMTMgQEAgc3RhdGljIHZvaWQgKmdldF9mcm9tX2FueV9wYXJ0aWFsKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnBfZmxhZ3MsXG4gXG4gXHRcdFx0biA9IGdldF9ub2RlKHMsIHpvbmVfdG9fbmlkKHpvbmUpKTtcbiBcbitcdFx0XHQvKlxuK1x0XHRcdCAqIFBhcmtlZCBzbGFicyBtYWtlIHRoZSBub2RlIHdvcnRoIHZpc2l0aW5nIGV2ZW4gaWZcbitcdFx0XHQgKiBucl9wYXJ0aWFsIGxvb2tzIGxvdy5cbitcdFx0XHQgKi9cbiBcdFx0XHRpZiAobiBcdTAwMjZcdTAwMjYgY3B1c2V0X3pvbmVfYWxsb3dlZCh6b25lLCBnZnBfZmxhZ3MpIFx1MDAyNlx1MDAyNlxuLVx0XHRcdFx0XHRuLVx1MDAzZW5yX3BhcnRpYWwgXHUwMDNlIHMtXHUwMDNlbWluX3BhcnRpYWwpIHtcbitcdFx0XHRcdFx0KG4tXHUwMDNlbnJfcGFydGlhbCBcdTAwM2Ugcy1cdTAwM2VtaW5fcGFydGlhbCB8fFxuK1x0XHRcdFx0XHQgIWxsaXN0X2VtcHR5KFx1MDAyNm4tXHUwMDNlcGFya2VkX3NsYWJzKSkpIHtcbiBcbiBcdFx0XHRcdHZvaWQgKm9iamVjdCA9IGdldF9mcm9tX3BhcnRpYWxfbm9kZShzLCBuLFxuIFx0XHRcdFx0XHRcdFx0XHRnZnBfZmxhZ3MsIGFjKTtcbkBAIC01NzE5LDcgKzU4ODEsNyBAQCBzdGF0aWMgdm9pZCBfX3NsYWJfZnJlZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsXG4gXHRcdFx0dW5zaWduZWQgbG9uZyBhZGRyKVxuIFxuIHtcbi1cdGJvb2wgd2FzX2Z1bGw7XG4rXHRib29sIHdhc19mdWxsLCBwYXJrID0gZmFsc2U7XG4gXHRzdHJ1Y3QgZnJlZWxpc3RfY291bnRlcnMgb2xkLCBuZXc7XG4gXHRzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlICpuID0gTlVMTDtcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG5AQCAtNTczMSwxMCArNTg5MywxMSBAQCBzdGF0aWMgdm9pZCBfX3NsYWJfZnJlZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsXG4gXHR9XG4gXG4gXHRkbyB7XG4tXHRcdGlmICh1bmxpa2VseShuKSkge1xuK1x0XHRpZiAodW5saWtlbHkobiBcdTAwMjZcdTAwMjYgIXBhcmspKVxuIFx0XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2bi1cdTAwM2VsaXN0X2xvY2ssIGZsYWdzKTtcbi1cdFx0XHRuID0gTlVMTDtcbi1cdFx0fVxuK1xuK1x0XHRwYXJrID0gZmFsc2U7XG4rXHRcdG4gPSBOVUxMO1xuIFxuIFx0XHRvbGQuZnJlZWxpc3QgPSBzbGFiLVx1MDAzZWZyZWVsaXN0O1xuIFx0XHRvbGQuY291bnRlcnMgPSBzbGFiLVx1MDAzZWNvdW50ZXJzO1xuQEAgLTU3NDgsNzYgKzU5MTEsMTE0IEBAIHN0YXRpYyB2b2lkIF9fc2xhYl9mcmVlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYixcbiBcdFx0bmV3LmludXNlIC09IGNudDtcbiBcbiBcdFx0Lypcbi1cdFx0ICogTWlnaHQgbmVlZCB0byBiZSB0YWtlbiBvZmYgKGR1ZSB0byBiZWNvbWluZyBlbXB0eSkgb3IgYWRkZWRcbi1cdFx0ICogdG8gKGR1ZSB0byBub3QgYmVpbmcgZnVsbCBhbnltb3JlKSB0aGUgcGFydGlhbCBsaXN0LlxuLVx0XHQgKiBVbmxlc3MgaXQncyBmcm96ZW4uXG4rXHRcdCAqIHBhcnRpYWwtXHUwMDNlcGFydGlhbDogdGhlIHNsYWIgd2FzIG9uIHRoZSBub2RlIHBhcnRpYWwgbGlzdCBhbmRcbitcdFx0ICogd2lsbCBzdGlsbCBzdGF5IHRoZXJlLCBzbyB3ZSBuZWVkIG5vIGxpc3QgaGFuZGxpbmcgYW5kIG5vXG4rXHRcdCAqIGxpc3RfbG9jay5cbitcdFx0ICpcbitcdFx0ICogTm90ZSB0aGF0IFwiY29udGludWU7XCIgaW4gYSBkby13aGlsZSBnb2VzIG9uIHRvIGV2YWx1YXRlIHRoZVxuK1x0XHQgKiBjb25kaXRpb24gYmVsb3csIHNvIHdlIGRvIHBlcmZvcm0gdGhlIGZyZWVsaXN0IHVwZGF0ZS5cbiBcdFx0ICovXG4tXHRcdGlmICghbmV3LmludXNlIHx8IHdhc19mdWxsKSB7XG4rXHRcdGlmICghd2FzX2Z1bGwgXHUwMDI2XHUwMDI2IG5ldy5pbnVzZSlcbitcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0XHRuID0gZ2V0X25vZGUocywgc2xhYl9uaWQoc2xhYikpO1xuK1x0XHQvKlxuK1x0XHQgKiBUaGUgc2xhYiBtaWdodCBuZWVkIHRvIGJlIHRha2VuIG9mZiAoZHVlIHRvIGJlY29taW5nIGVtcHR5KVxuK1x0XHQgKiBvciBhZGRlZCB0byAoZHVlIHRvIG5vdCBiZWluZyBmdWxsIGFueW1vcmUpIHRoZSBwYXJ0aWFsXG4rXHRcdCAqIGxpc3QuXG4rXHRcdCAqXG4rXHRcdCAqIEZvciB0aGUgZnVsbCAtXHUwMDNlIHBhcnRpYWwvZW1wdHkgdHJhbnNpdGlvbiwgdXNlXG4rXHRcdCAqIHNwaW5fdHJ5bG9ja19pcnFzYXZlKCkgYW5kIHRoZSBwYXJraW5nIG1lY2hhbmlzbSB0byByZWR1Y2VcbitcdFx0ICogbG9jayBjb250ZW50aW9uLlxuK1x0XHQgKlxuK1x0XHQgKiBJZiB0aGUgY21weGNoZyBkb2VzIG5vdCBzdWNjZWVkIHRoZW4gd2Ugd2lsbCByZXRyeS5cbitcdFx0ICovXG4rXHRcdG4gPSBnZXRfbm9kZShzLCBzbGFiX25pZChzbGFiKSk7XG4rXG4rXHRcdGlmICghd2FzX2Z1bGwpIHtcbiBcdFx0XHQvKlxuLVx0XHRcdCAqIFNwZWN1bGF0aXZlbHkgYWNxdWlyZSB0aGUgbGlzdF9sb2NrLlxuLVx0XHRcdCAqIElmIHRoZSBjbXB4Y2hnIGRvZXMgbm90IHN1Y2NlZWQgdGhlbiB3ZSBtYXlcbi1cdFx0XHQgKiBkcm9wIHRoZSBsaXN0X2xvY2sgd2l0aG91dCBhbnkgcHJvY2Vzc2luZy5cbi1cdFx0XHQgKlxuLVx0XHRcdCAqIE90aGVyd2lzZSB0aGUgbGlzdF9sb2NrIHdpbGwgc3luY2hyb25pemUgd2l0aFxuLVx0XHRcdCAqIG90aGVyIHByb2Nlc3NvcnMgdXBkYXRpbmcgdGhlIGxpc3Qgb2Ygc2xhYnMuXG4rXHRcdFx0ICogcGFydGlhbC1cdTAwM2VlbXB0eTogc3BlY3VsYXRpdmVseSBhY3F1aXJlIGxpc3RfbG9ja1xuK1x0XHRcdCAqIHByaW9yIHRvIGNtcHhjaGcoKSwgYXMgcGVyZm9ybWluZyBjbXB4Y2hnKCkgYmVmb3JlXG4rXHRcdFx0ICogbG9jayBhY3F1aXNpdGlvbiByYWNlcyB3aXRoIGNvbmN1cnJlbnQgb3BlcmF0aW9uc1xuK1x0XHRcdCAqIChlLmcuLCB0aGUgc2hyaW5rZXIpLlxuIFx0XHRcdCAqL1xuIFx0XHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNm4tXHUwMDNlbGlzdF9sb2NrLCBmbGFncyk7XG4tXG4tXHRcdFx0b25fbm9kZV9wYXJ0aWFsID0gc2xhYl90ZXN0X25vZGVfcGFydGlhbChzbGFiKTtcbitcdFx0fSBlbHNlIGlmICghc3Bpbl90cnlsb2NrX2lycXNhdmUoXHUwMDI2bi1cdTAwM2VsaXN0X2xvY2ssIGZsYWdzKSkge1xuK1x0XHRcdC8qXG4rXHRcdFx0ICogZnVsbC1cdTAwM2VwYXJ0aWFsL2VtcHR5OiB0aGUgc2xhYiBpcyBmdWxsLCBzbyBpdCBpcyBvblxuK1x0XHRcdCAqIG5vIGxpc3Q7IGlmIHRoZSBsaXN0X2xvY2sgaXMgY29udGVuZGVkLCB0aGVuIHdlXG4rXHRcdFx0ICogcGFyayB0aGUgc2xhYiB3aXRob3V0IHdhaXRpbmcgZm9yIHRoZSBsb2NrLlxuK1x0XHRcdCAqL1xuK1x0XHRcdHBhcmsgPSB0cnVlO1xuIFx0XHR9XG4gXG4gXHR9IHdoaWxlICghc2xhYl91cGRhdGVfZnJlZWxpc3Qocywgc2xhYiwgXHUwMDI2b2xkLCBcdTAwMjZuZXcsIFwiX19zbGFiX2ZyZWVcIikpO1xuIFxuLVx0aWYgKGxpa2VseSghbikpIHtcbi1cdFx0Lypcbi1cdFx0ICogV2UgZGlkbid0IHRha2UgdGhlIGxpc3RfbG9jayBiZWNhdXNlIHRoZSBzbGFiIHdhcyBhbHJlYWR5IG9uXG4tXHRcdCAqIHRoZSBwYXJ0aWFsIGxpc3QgYW5kIHdpbGwgcmVtYWluIHRoZXJlLlxuLVx0XHQgKi9cbitcdC8qIHBhcnRpYWwtXHUwMDNlcGFydGlhbDogd2UgZGlkbid0IHRha2UgdGhlIGxpc3RfbG9jay4gKi9cbitcdGlmIChsaWtlbHkoIW4pKVxuIFx0XHRyZXR1cm47XG4tXHR9XG4gXG4gXHQvKlxuLVx0ICogVGhpcyBzbGFiIHdhcyBwYXJ0aWFsbHkgZW1wdHkgYnV0IG5vdCBvbiB0aGUgcGVyLW5vZGUgcGFydGlhbCBsaXN0LFxuLVx0ICogaW4gd2hpY2ggY2FzZSB3ZSBzaG91bGRuJ3QgbWFuaXB1bGF0ZSBpdHMgbGlzdCwganVzdCByZXR1cm4uXG4rXHQgKiBQYXJrIHRoZSBzbGFiLiBJZiB0aGlzIHBhcmsgbWFrZXMgdGhlIHBhcmtlZCBsbGlzdCBub24tZW1wdHksXG4rXHQgKiB0aGVuIHNjaGVkdWxlIHVucGFya193b3JrLlxuIFx0ICovXG4rXHRpZiAodW5saWtlbHkocGFyaykpIHtcbitcdFx0aWYgKGxsaXN0X2FkZChzbGFiX3RvX3BhcmtlZF9sbG5vZGUoc2xhYiksIFx1MDAyNm4tXHUwMDNlcGFya2VkX3NsYWJzKSlcbitcdFx0XHRxdWV1ZV9kZWxheWVkX3dvcmsoZmx1c2h3cSwgXHUwMDI2bi1cdTAwM2V1bnBhcmtfd29yayxcbitcdFx0XHRcdFx0ICAgVU5QQVJLX0RFTEFZKTtcbitcdFx0c3RhdChzLCBQQVJLX1NMQUIpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRvbl9ub2RlX3BhcnRpYWwgPSBzbGFiX3Rlc3Rfbm9kZV9wYXJ0aWFsKHNsYWIpO1xuK1xuIFx0aWYgKCF3YXNfZnVsbCBcdTAwMjZcdTAwMjYgIW9uX25vZGVfcGFydGlhbCkge1xuK1x0XHQvKlxuK1x0XHQgKiBwYXJ0aWFsLVx1MDAzZWVtcHR5LCBvZmZsaXN0OiB0aGUgc2xhYiBoYXMgYmVlbiB0YWtlbiBvZmYgdGhlXG4rXHRcdCAqIHBhcnRpYWwgbGlzdCBieSBhIGJ1bGsgcmVmaWxsLCBvciBwYXJrZWQgZHVyaW5nIGl0cyBmdWxsIC1cdTAwM2VcbitcdFx0ICogcGFydGlhbC9lbXB0eSB0cmFuc2l0aW9uLiBJdCB3aWxsIGJlIHB1dCBiYWNrIGJ5IG90aGVyIHBhdGhzLFxuK1x0XHQgKiBzbyB0aGlzIHNsYWIncyBsaXN0IGhhbmRsaW5nIGlzIG5vdCBvdXJzIHRvIGRvLlxuK1x0XHQgKi9cbiBcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZuLVx1MDAzZWxpc3RfbG9jaywgZmxhZ3MpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4gXHQvKlxuLVx0ICogSWYgc2xhYiBiZWNhbWUgZW1wdHksIHNob3VsZCB3ZSBhZGQva2VlcCBpdCBvbiB0aGUgcGFydGlhbCBsaXN0IG9yIHdlXG4tXHQgKiBoYXZlIGVub3VnaD9cbitcdCAqIGZ1bGwvcGFydGlhbC1cdTAwM2VlbXB0eSwgZXhjZWVkOiB3ZSBoYXZlIGVub3VnaCBwYXJ0aWFsIHNsYWJzIGFscmVhZHkuXG4rXHQgKlxuK1x0ICogUGFya2VkIHNsYWJzIGFyZSBhbHNvIGNvdW50ZWQgYXMgcGFydGlhbCBzbGFicy4gV2UgZG9uJ3RcbitcdCAqIGtlZXAgYW4gZXhhY3QgY291bnQgb2YgcGFya2VkIHNsYWJzLCBzbyB3ZSB0cmVhdCBhbnkgcGFya2VkXG4rXHQgKiBzbGFiIGFzIHJvdWdobHkgZXhjZWVkaW5nLlxuIFx0ICovXG4tXHRpZiAodW5saWtlbHkoIW5ldy5pbnVzZSBcdTAwMjZcdTAwMjYgbi1cdTAwM2Vucl9wYXJ0aWFsIFx1MDAzZT0gcy1cdTAwM2VtaW5fcGFydGlhbCkpXG4tXHRcdGdvdG8gc2xhYl9lbXB0eTtcbitcdGlmICh1bmxpa2VseSghbmV3LmludXNlIFx1MDAyNlx1MDAyNiAobi1cdTAwM2Vucl9wYXJ0aWFsIFx1MDAzZT0gcy1cdTAwM2VtaW5fcGFydGlhbCB8fFxuK1x0XHRcdFx0ICAgICFsbGlzdF9lbXB0eShcdTAwMjZuLVx1MDAzZXBhcmtlZF9zbGFicykpKSkge1xuK1x0XHQvKiBwYXJ0aWFsLVx1MDAzZWVtcHR5LCBvbmxpc3QsIGV4Y2VlZCAqL1xuK1x0XHRpZiAobGlrZWx5KCF3YXNfZnVsbCkpIHtcbitcdFx0XHRyZW1vdmVfcGFydGlhbChuLCBzbGFiKTtcbitcdFx0XHRzdGF0KHMsIEZSRUVfUkVNT1ZFX1BBUlRJQUwpO1xuK1x0XHR9XG4rXHRcdC8qIGVsc2UgZnVsbC1cdTAwM2VlbXB0eSwgZXhjZWVkOiBpdCBpcyBvbiBubyBsaXN0IHRvIHJlbW92ZSBmcm9tICovXG4rXG4rXHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2bi1cdTAwM2VsaXN0X2xvY2ssIGZsYWdzKTtcbitcdFx0c3RhdChzLCBGUkVFX1NMQUIpO1xuK1x0XHRkaXNjYXJkX3NsYWIocywgc2xhYik7XG4rXHRcdHJldHVybjtcbitcdH1cbiBcbiBcdC8qXG4tXHQgKiBPYmplY3RzIGxlZnQgaW4gdGhlIHNsYWIuIElmIGl0IHdhcyBub3Qgb24gdGhlIHBhcnRpYWwgbGlzdCBiZWZvcmVcbi1cdCAqIHRoZW4gYWRkIGl0LlxuK1x0ICogQXQgdGhpcyBwb2ludCwgb25seSB0aHJlZSBjYXNlcyByZW1haW46XG4rXHQgKiAgIGZ1bGwtXHUwMDNlcGFydGlhbFxuK1x0ICogICBmdWxsLVx1MDAzZWVtcHR5LCBub3QgZXhjZWVkXG4rXHQgKiAgIHBhcnRpYWwtXHUwMDNlZW1wdHksIG9ubGlzdCwgbm90IGV4Y2VlZFxuIFx0ICovXG4rXG4rXHQvKiBmdWxsLVx1MDAzZXBhcnRpYWw7IGZ1bGwtXHUwMDNlZW1wdHksIG5vdCBleGNlZWQgKi9cbiBcdGlmICh1bmxpa2VseSh3YXNfZnVsbCkpIHtcbiBcdFx0YWRkX3BhcnRpYWwobiwgc2xhYiwgQUREX1RPX1RBSUwpO1xuIFx0XHRzdGF0KHMsIEZSRUVfQUREX1BBUlRJQUwpO1xuIFx0fVxuLVx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZuLVx1MDAzZWxpc3RfbG9jaywgZmxhZ3MpO1xuLVx0cmV0dXJuO1xuLVxuLXNsYWJfZW1wdHk6XG4tXHQvKlxuLVx0ICogVGhlIHNsYWIgY291bGQgaGF2ZSBhIHNpbmdsZSBvYmplY3QgYW5kIHRodXMgZ28gZnJvbSBmdWxsIHRvIGVtcHR5IGluXG4tXHQgKiBhIHNpbmdsZSBmcmVlLCBidXQgbW9yZSBsaWtlbHkgaXQgd2FzIG9uIHRoZSBwYXJ0aWFsIGxpc3QuIFJlbW92ZSBpdC5cbi1cdCAqL1xuLVx0aWYgKGxpa2VseSghd2FzX2Z1bGwpKSB7XG4tXHRcdHJlbW92ZV9wYXJ0aWFsKG4sIHNsYWIpO1xuLVx0XHRzdGF0KHMsIEZSRUVfUkVNT1ZFX1BBUlRJQUwpO1xuLVx0fVxuK1x0LyogZWxzZSBwYXJ0aWFsLVx1MDAzZWVtcHR5LCBvbmxpc3QsIG5vdCBleGNlZWQ6IGl0IHN0YXlzIG9uIHBhcnRpYWwgbGlzdCAqL1xuIFxuIFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZuLVx1MDAzZWxpc3RfbG9jaywgZmxhZ3MpO1xuLVx0c3RhdChzLCBGUkVFX1NMQUIpO1xuLVx0ZGlzY2FyZF9zbGFiKHMsIHNsYWIpO1xuIH1cbiBcbiAvKlxuQEAgLTczNTcsOCArNzU1OCwxMyBAQCBfX3JlZmlsbF9vYmplY3RzX2FueShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqKnAsIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG1pblxuIFxuIFx0XHRcdG4gPSBnZXRfbm9kZShzLCB6b25lX3RvX25pZCh6b25lKSk7XG4gXG4rXHRcdFx0LypcbitcdFx0XHQgKiBQYXJrZWQgc2xhYnMgbWFrZSB0aGUgbm9kZSB3b3J0aCB0cnlpbmdcbitcdFx0XHQgKiBldmVuIGlmIG5yX3BhcnRpYWwgbG9va3MgbG93LlxuK1x0XHRcdCAqL1xuIFx0XHRcdGlmICghbiB8fCAhY3B1c2V0X3pvbmVfYWxsb3dlZCh6b25lLCBnZnApIHx8XG4tXHRcdFx0XHRcdG4tXHUwMDNlbnJfcGFydGlhbCBcdTAwM2M9IHMtXHUwMDNlbWluX3BhcnRpYWwpXG4rXHRcdFx0XHRcdChuLVx1MDAzZW5yX3BhcnRpYWwgXHUwMDNjPSBzLVx1MDAzZW1pbl9wYXJ0aWFsIFx1MDAyNlx1MDAyNlxuK1x0XHRcdFx0XHQgbGxpc3RfZW1wdHkoXHUwMDI2bi1cdTAwM2VwYXJrZWRfc2xhYnMpKSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRcdHIgPSBfX3JlZmlsbF9vYmplY3RzX25vZGUocywgcCwgZ2ZwLCBtaW4sIG1heCwgbixcbkBAIC03Njc5LDYgKzc4ODUsOCBAQCBpbml0X2ttZW1fY2FjaGVfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlICpuKVxuIFx0bi1cdTAwM2Vucl9wYXJ0aWFsID0gMDtcbiBcdHNwaW5fbG9ja19pbml0KFx1MDAyNm4tXHUwMDNlbGlzdF9sb2NrKTtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNm4tXHUwMDNlcGFydGlhbCk7XG4rXHRpbml0X2xsaXN0X2hlYWQoXHUwMDI2bi1cdTAwM2VwYXJrZWRfc2xhYnMpO1xuK1x0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2bi1cdTAwM2V1bnBhcmtfd29yaywgdW5wYXJrX3dvcmtfZm4pO1xuICNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xuIFx0YXRvbWljX2xvbmdfc2V0KFx1MDAyNm4tXHUwMDNlbnJfc2xhYnMsIDApO1xuIFx0YXRvbWljX2xvbmdfc2V0KFx1MDAyNm4tXHUwMDNldG90YWxfb2JqZWN0cywgMCk7XG5AQCAtNzgxMiw2ICs4MDIwLDcgQEAgc3RhdGljIHZvaWQgZnJlZV9rbWVtX2NhY2hlX25vZGVzKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxuIFx0fVxuIFxuIFx0Zm9yX2VhY2hfa21lbV9jYWNoZV9ub2RlKHMsIG5vZGUsIG4pIHtcbitcdFx0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNm4tXHUwMDNldW5wYXJrX3dvcmspO1xuIFx0XHRzLVx1MDAzZXBlcl9ub2RlW25vZGVdLm5vZGUgPSBOVUxMO1xuIFx0XHRrbWVtX2NhY2hlX2ZyZWUoa21lbV9jYWNoZV9ub2RlLCBuKTtcbiBcdH1cbkBAIC04MTEyLDYgKzgzMjEsMTAgQEAgc3RhdGljIHZvaWQgZnJlZV9wYXJ0aWFsKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlICpuKVxuIFxuIFx0QlVHX09OKGlycXNfZGlzYWJsZWQoKSk7XG4gXHRzcGluX2xvY2tfaXJxKFx1MDAyNm4tXHUwMDNlbGlzdF9sb2NrKTtcbitcbitcdC8qIFVucGFyayBzbGFicyBzbyB0aGUgd2FsayBjYW4gZmluZCB0aGVtLiAqL1xuK1x0dW5wYXJrX3NsYWJzKHMsIG4sIE5VTEwpO1xuK1xuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNsYWIsIGgsIFx1MDAyNm4tXHUwMDNlcGFydGlhbCwgc2xhYl9saXN0KSB7XG4gXHRcdGlmICghc2xhYi1cdTAwM2VpbnVzZSkge1xuIFx0XHRcdHJlbW92ZV9wYXJ0aWFsKG4sIHNsYWIpO1xuQEAgLTgzODMsNiArODU5Niw5IEBAIHN0YXRpYyBpbnQgX19rbWVtX2NhY2hlX2RvX3NocmluayhzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbiBcbiBcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2bi1cdTAwM2VsaXN0X2xvY2ssIGZsYWdzKTtcbiBcbitcdFx0LyogUGFya2VkIHNsYWJzIGFyZSBzaHJpbmsgY2FuZGlkYXRlcyBhcyB3ZWxsLiAqL1xuK1x0XHR1bnBhcmtfc2xhYnMocywgbiwgTlVMTCk7XG4rXG4gXHRcdC8qXG4gXHRcdCAqIEJ1aWxkIGxpc3RzIG9mIHNsYWJzIHRvIGRpc2NhcmQgb3IgcHJvbW90ZS5cbiBcdFx0ICpcbkBAIC05NTIyLDYgKzk3MzgsOSBAQCBTVEFUX0FUVFIoRlJFRV9GQVNUUEFUSCwgZnJlZV9mYXN0cGF0aCk7XG4gU1RBVF9BVFRSKEZSRUVfU0xPV1BBVEgsIGZyZWVfc2xvd3BhdGgpO1xuIFNUQVRfQVRUUihGUkVFX0FERF9QQVJUSUFMLCBmcmVlX2FkZF9wYXJ0aWFsKTtcbiBTVEFUX0FUVFIoRlJFRV9SRU1PVkVfUEFSVElBTCwgZnJlZV9yZW1vdmVfcGFydGlhbCk7XG4rU1RBVF9BVFRSKFBBUktfU0xBQiwgcGFya19zbGFiKTtcbitTVEFUX0FUVFIoVU5QQVJLX1NMQUIsIHVucGFya19zbGFiKTtcbitTVEFUX0FUVFIoVU5QQVJLX0VWRU5ULCB1bnBhcmtfZXZlbnQpO1xuIFNUQVRfQVRUUihBTExPQ19TTEFCLCBhbGxvY19zbGFiKTtcbiBTVEFUX0FUVFIoQUxMT0NfTk9ERV9NSVNNQVRDSCwgYWxsb2Nfbm9kZV9taXNtYXRjaCk7XG4gU1RBVF9BVFRSKEZSRUVfU0xBQiwgZnJlZV9zbGFiKTtcbkBAIC05NjEwLDYgKzk4MjksOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZSAqY29uc3Qgc2xhYl9hdHRyc1tdID0ge1xuIFx0XHUwMDI2ZnJlZV9zbG93cGF0aF9hdHRyLmF0dHIsXG4gXHRcdTAwMjZmcmVlX2FkZF9wYXJ0aWFsX2F0dHIuYXR0cixcbiBcdFx1MDAyNmZyZWVfcmVtb3ZlX3BhcnRpYWxfYXR0ci5hdHRyLFxuK1x0XHUwMDI2cGFya19zbGFiX2F0dHIuYXR0cixcbitcdFx1MDAyNnVucGFya19zbGFiX2F0dHIuYXR0cixcbitcdFx1MDAyNnVucGFya19ldmVudF9hdHRyLmF0dHIsXG4gXHRcdTAwMjZhbGxvY19zbGFiX2F0dHIuYXR0cixcbiBcdFx1MDAyNmFsbG9jX25vZGVfbWlzbWF0Y2hfYXR0ci5hdHRyLFxuIFx0XHUwMDI2ZnJlZV9zbGFiX2F0dHIuYXR0cixcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE1OjQ3OjA5LjIwOTAyNTg3NFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc4MTczMzUxMDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgQ29yZSBTTFVCIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IGZ1bmRhbWVudGFsbHkgYWx0ZXJzIHRoZSBTTFVCIGFsbG9jYXRvciwgc3BlY2lmaWNhbGx5IHRoZSBgbW0vc2x1Yi5jYCBmaWxlLiBUaGlzIGludHJvZHVjZXMgYSBuZXcgbWV0aG9kIGZvciBcInBhcmtpbmdcIiBzbGFicyBvbiBhIGxvY2tsZXNzIGxpc3QgKGBsbGlzdGApIHdpdGhpbiB0aGUgZnJlZSBzbG93cGF0aCwgd2hpY2ggaXMgYSBzbWFydCBtb3ZlIHRvIG1pdGlnYXRlIGNvbnRlbnRpb24gb24gdGhlIGBsaXN0X2xvY2tgLiBUaGlzIGlzIGEgcHJldHR5IHNpZ25pZmljYW50IGNoYW5nZSwgcmVhbGx5IGRpZ2dpbmcgaW50byBhIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29tcG9uZW50LiBJdOKAmXMgYWRkaW5nIGBwYXJrZWRfc2xhYnNgIHRvIHRoZSBga21lbV9jYWNoZV9ub2RlYCBzdHJ1Y3R1cmUgYW5kIGEgZGVsYXllZCB3b3JrIGl0ZW0sIGB1bnBhcmtfd29ya2AsIHRvIGhhbmRsZSB1bnBhcmtpbmcgc2xhYnMgaWYgb3RoZXIgcHJvY2Vzc2VzIGRvbid0IHRha2UgY2FyZSBvZiBpdC4gVGhlIHBhdGNoIHRvdWNoZXMgYSB3aG9sZSBob3N0IG9mIGZ1bmN0aW9uczogYF9fc2xhYl9mcmVlYCwgYGdldF9wYXJ0aWFsX25vZGVfYnVsa2AsIGBnZXRfZnJvbV9wYXJ0aWFsX25vZGVgLCBgZ2V0X2Zyb21fYW55X3BhcnRpYWxgLCBgX19yZWZpbGxfb2JqZWN0c19hbnlgLCBgZnJlZV9wYXJ0aWFsYCwgYW5kIGBfX2ttZW1fY2FjaGVfZG9fc2hyaW5rYC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBkZW1hbmRzIGNhcmVmdWwgZnV6emluZy4gVGhpcyBsZXZlbCBvZiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IG1vZGlmaWNhdGlvbnMgKmFsd2F5cyogd2FycmFudHMgaW50ZW5zZSBzY3J1dGlueS5cblxuTm93LCBsZXQncyBzZWUgYWJvdXQgdGhlIGNvbmZpZ3VyYXRpb24uIFNMVUIgaXMgdGhlIGRlZmF1bHQgYWxsb2NhdG9yIHRoZXNlIGRheXMsIHJpZ2h0PyBMZXQgbWUganVzdCBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vICpzcGVjaWZpYyogY29uZmlnIG9wdGlvbnMgdGhhdCB0aGlzIHBhdGNoIG1pZ2h0IGJlIGdhdGVkIGJlaGluZC4gT2theSwgc28gaXTigJlzIG1vZGlmeWluZyBgbW0vc2x1Yi5jYCAtIGVhc3kgZW5vdWdoIHRvIGNoZWNrLiBgQ09ORklHX1NMVUJgIGlzIHRoZSBwcmltYXJ5IG9uZSwgYW5kIGl0J3MgYWxtb3N0IGFsd2F5cyBlbmFibGVkIG5vdyB0aGF0IGBDT05GSUdfU0xBQmAgaXMgaGlzdG9yeS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbid0IG1pc3MgYW55dGhpbmcgdGhvdWdoLiBgQ09ORklHX1NMVUJfREVCVUdg4oCmIHRoZSBwYXRjaCBzZWVtcyB0byB0b3VjaCBzb21lIHN0YXRzLCBidXQgbm90IHN0cmljdGx5IHVuZGVyIHRoYXQgb3B0aW9uLiBBaCwgcmlnaHQsIHRoZSBzdGF0cyBhcmUgcHJvYmFibHkgdW5kZXIgYENPTkZJR19TTFVCX1NUQVRTYC4gSeKAmWxsIGRvdWJsZS1jaGVjayBgbW0vc2x1Yi5jYCBmb3IgYFNUQVRfQVRUUmAgdG8gbWFrZSBzdXJlLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBwaWN0dXJlIG9mIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODE4OCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE1OjQ3OjE3LjAyNjM2Mzk0OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTM2OTAyODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiU1RBVF9BVFRSXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3NsdWIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zbHViLmM9OTcxMD1zdGF0aWMgdm9pZCBjbGVhcl9zdGF0KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBlbnVtIHN0YXRfaXRlbSBzaSlcXG4tLVxcbm1tL3NsdWIuYy05NzE3LVxcbm1tL3NsdWIuYzo5NzE4OiNkZWZpbmUgU1RBVF9BVFRSKHNpLCB0ZXh0KSBcXHRcXHRcXHRcXHRcXHRcXFxcXFxubW0vc2x1Yi5jLTk3MTktc3RhdGljIHNzaXplX3QgdGV4dCMjX3Nob3coc3RydWN0IGttZW1fY2FjaGUgKnMsIGNoYXIgKmJ1ZilcXHRcXFxcXFxuLS1cXG5tbS9zbHViLmM9OTczMT1TTEFCX0FUVFIodGV4dCk7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbm1tL3NsdWIuYy05NzMyLVxcbm1tL3NsdWIuYzo5NzMzOlNUQVRfQVRUUihBTExPQ19GQVNUUEFUSCwgYWxsb2NfZmFzdHBhdGgpO1xcbm1tL3NsdWIuYzo5NzM0OlNUQVRfQVRUUihBTExPQ19TTE9XUEFUSCwgYWxsb2Nfc2xvd3BhdGgpO1xcbm1tL3NsdWIuYzo5NzM1OlNUQVRfQVRUUihGUkVFX1JDVV9TSEVBRiwgZnJlZV9yY3Vfc2hlYWYpO1xcbm1tL3NsdWIuYzo5NzM2OlNUQVRfQVRUUihGUkVFX1JDVV9TSEVBRl9GQUlMLCBmcmVlX3JjdV9zaGVhZl9mYWlsKTtcXG5tbS9zbHViLmM6OTczNzpTVEFUX0FUVFIoRlJFRV9GQVNUUEFUSCwgZnJlZV9mYXN0cGF0aCk7XFxubW0vc2x1Yi5jOjk3Mzg6U1RBVF9BVFRSKEZSRUVfU0xPV1BBVEgsIGZyZWVfc2xvd3BhdGgpO1xcbm1tL3NsdWIuYzo5NzM5OlNUQVRfQVRUUihGUkVFX0FERF9QQVJUSUFMLCBmcmVlX2FkZF9wYXJ0aWFsKTtcXG5tbS9zbHViLmM6OTc0MDpTVEFUX0FUVFIoRlJFRV9SRU1PVkVfUEFSVElBTCwgZnJlZV9yZW1vdmVfcGFydGlhbCk7XFxubW0vc2x1Yi5jOjk3NDE6U1RBVF9BVFRSKFBBUktfU0xBQiwgcGFya19zbGFiKTtcXG5tbS9zbHViLmM6OTc0MjpTVEFUX0FUVFIoVU5QQVJLX1NMQUIsIHVucGFya19zbGFiKTtcXG5tbS9zbHViLmM6OTc0MzpTVEFUX0FUVFIoVU5QQVJLX0VWRU5ULCB1bnBhcmtfZXZlbnQpO1xcbm1tL3NsdWIuYzo5NzQ0OlNUQVRfQVRUUihBTExPQ19TTEFCLCBhbGxvY19zbGFiKTtcXG5tbS9zbHViLmM6OTc0NTpTVEFUX0FUVFIoQUxMT0NfTk9ERV9NSVNNQVRDSCwgYWxsb2Nfbm9kZV9taXNtYXRjaCk7XFxubW0vc2x1Yi5jOjk3NDY6U1RBVF9BVFRSKEZSRUVfU0xBQiwgZnJlZV9zbGFiKTtcXG5tbS9zbHViLmM6OTc0NzpTVEFUX0FUVFIoT1JERVJfRkFMTEJBQ0ssIG9yZGVyX2ZhbGxiYWNrKTtcXG5tbS9zbHViLmM6OTc0ODpTVEFUX0FUVFIoQ01QWENIR19ET1VCTEVfRkFJTCwgY21weGNoZ19kb3VibGVfZmFpbCk7XFxubW0vc2x1Yi5jOjk3NDk6U1RBVF9BVFRSKFNIRUFGX0ZMVVNILCBzaGVhZl9mbHVzaCk7XFxubW0vc2x1Yi5jOjk3NTA6U1RBVF9BVFRSKFNIRUFGX1JFRklMTCwgc2hlYWZfcmVmaWxsKTtcXG5tbS9zbHViLmM6OTc1MTpTVEFUX0FUVFIoU0hFQUZfQUxMT0MsIHNoZWFmX2FsbG9jKTtcXG5tbS9zbHViLmM6OTc1MjpTVEFUX0FUVFIoU0hFQUZfRlJFRSwgc2hlYWZfZnJlZSk7XFxubW0vc2x1Yi5jOjk3NTM6U1RBVF9BVFRSKEJBUk5fR0VULCBiYXJuX2dldCk7XFxubW0vc2x1Yi5jOjk3NTQ6U1RBVF9BVFRSKEJBUk5fR0VUX0ZBSUwsIGJhcm5fZ2V0X2ZhaWwpO1xcbm1tL3NsdWIuYzo5NzU1OlNUQVRfQVRUUihCQVJOX1BVVCwgYmFybl9wdXQpO1xcbm1tL3NsdWIuYzo5NzU2OlNUQVRfQVRUUihCQVJOX1BVVF9GQUlMLCBiYXJuX3B1dF9mYWlsKTtcXG5tbS9zbHViLmM6OTc1NzpTVEFUX0FUVFIoU0hFQUZfUFJFRklMTF9GQVNULCBzaGVhZl9wcmVmaWxsX2Zhc3QpO1xcbm1tL3NsdWIuYzo5NzU4OlNUQVRfQVRUUihTSEVBRl9QUkVGSUxMX1NMT1csIHNoZWFmX3ByZWZpbGxfc2xvdyk7XFxubW0vc2x1Yi5jOjk3NTk6U1RBVF9BVFRSKFNIRUFGX1BSRUZJTExfT1ZFUlNJWkUsIHNoZWFmX3ByZWZpbGxfb3ZlcnNpemUpO1xcbm1tL3NsdWIuYzo5NzYwOlNUQVRfQVRUUihTSEVBRl9SRVRVUk5fRkFTVCwgc2hlYWZfcmV0dXJuX2Zhc3QpO1xcbm1tL3NsdWIuYzo5NzYxOlNUQVRfQVRUUihTSEVBRl9SRVRVUk5fU0xPVywgc2hlYWZfcmV0dXJuX3Nsb3cpO1xcbm1tL3NsdWIuYy05NzYyLSNlbmRpZlxcdC8qIENPTkZJR19TTFVCX1NUQVRTICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE1OjQ3OjE3LjE0MDA1ODQ2OFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4Njc1NzAxMDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTTFVCIENvZGUgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIFNMVUIgcGF0Y2guIEZpcnN0IHRoaW5nLCBJIHNlZSB0aGUgc3RhdHMgYXJlLCBhcyB1c3VhbCwgY29udHJvbGxlZCBieSBgQ09ORklHX1NMVUJfU1RBVFNgLiBObyBzdXJwcmlzZXMgdGhlcmUuIFRoZSBjb3JlIFNMVUIgbG9naWMgaXRzZWxmLCBhcyBJJ2QgZXhwZWN0LCBpcyBhbGwgcmVzaWRpbmcgaW4gYG1tL3NsdWIuY2AuIE5vdywgdGhlIGtleSBpcyB0byBwaW5wb2ludCB3aGF0ICpzcGVjaWZpY2FsbHkqIGhhcyBiZWVuIHRvdWNoZWQgaW4gdGhpcyBwYXRjaC4gTGV0J3Mgc2VlLi4uIGl0IGxvb2tzIGxpa2UgdGhlIG1vZGlmaWNhdGlvbiBsaXN0IGluY2x1ZGVzIGBfX3NsYWJfZnJlZWAsIGBnZXRfcGFydGlhbF9ub2RlX2J1bGtgLCBgZ2V0X2Zyb21fcGFydGlhbF9ub2RlYCwgYGdldF9mcm9tX2FueV9wYXJ0aWFsYCwgYF9fcmVmaWxsX29iamVjdHNfYW55YCwgYGZyZWVfcGFydGlhbGAsIGFuZCBgX19rbWVtX2NhY2hlX2RvX3Nocmlua2AuIEludGVyZXN0aW5nLCBhbmQgbm93IHRoZXJlIGFyZSBuZXcgYWRkaXRpb25zOiBgdW5wYXJrX3NsYWJzYCBhbmQgYHVucGFya193b3JrX2ZuYC4gSGFuZyBvbiwgdGhlc2UgbmV3IGFkZGl0aW9ucyBhcmUgYHN0YXRpY2AuIEhtbSwgYW5kIGxldCBtZSBjaGVjayBvbiB0aGUgb3RoZXIgbW9kaWZpZWQgZnVuY3Rpb25zLiBBaCwgYF9fc2xhYl9mcmVlYCBpcyBhbHNvIGBzdGF0aWNgLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gbm90IG1pc3NpbmcgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zLCB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zIGNhbiBiZSBmb3VuZCBpbiBgbW0vc2x1Yi5jYC4gUmlnaHQsIEkgc2hvdWxkIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aG9zZSBub24tc3RhdGljIGVudHJpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDIxLCJPdXRwdXRUb2tlbnMiOjkxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE1OjQ3OjIzLjAwNzYzMTMzNFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTMxNjA5OTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXihzdGF0aWMgKT8odm9pZHxib29sfHZvaWQgXFxcXCp8aW50KSAoX19zbGFiX2ZyZWV8Z2V0X3BhcnRpYWxfbm9kZV9idWxrfGdldF9mcm9tX3BhcnRpYWxfbm9kZXxnZXRfZnJvbV9hbnlfcGFydGlhbHxfX3JlZmlsbF9vYmplY3RzX2FueXxmcmVlX3BhcnRpYWx8X19rbWVtX2NhY2hlX2RvX3NocmluaylcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zbHViLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc2x1Yi5jPTM5NDY9c3RhdGljIGlubGluZSBib29sIHBmbWVtYWxsb2NfbWF0Y2goc3RydWN0IHNsYWIgKnNsYWIsIGdmcF90IGdmcGZsYWdzKTtcXG5tbS9zbHViLmMtMzk0Ny1cXG5tbS9zbHViLmM6Mzk0ODpzdGF0aWMgYm9vbCBnZXRfcGFydGlhbF9ub2RlX2J1bGsoc3RydWN0IGttZW1fY2FjaGUgKnMsXFxubW0vc2x1Yi5jLTM5NDktXFx0XFx0XFx0XFx0ICBzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlICpuLFxcbi0tXFxubW0vc2x1Yi5jPTU4NTA9c3RhdGljIGJvb2wgX19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3Qoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLFxcbi0tXFxubW0vc2x1Yi5jLTU4NzgtICovXFxubW0vc2x1Yi5jOjU4Nzk6c3RhdGljIHZvaWQgX19zbGFiX2ZyZWUoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLFxcbm1tL3NsdWIuYy01ODgwLVxcdFxcdFxcdHZvaWQgKmhlYWQsIHZvaWQgKnRhaWwsIGludCBjbnQsXFxuLS1cXG5tbS9zbHViLmM9ODI4NT1zdGF0aWMgdm9pZCBsaXN0X3NsYWJfb2JqZWN0cyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIpXFxuLS1cXG5tbS9zbHViLmMtODMxNi0gKi9cXG5tbS9zbHViLmM6ODMxNzpzdGF0aWMgdm9pZCBmcmVlX3BhcnRpYWwoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBrbWVtX2NhY2hlX25vZGUgKm4pXFxubW0vc2x1Yi5jLTgzMTgte1xcbi0tXFxubW0vc2x1Yi5jPTg1MjE9dm9pZCBfX2NoZWNrX2hlYXBfb2JqZWN0KGNvbnN0IHZvaWQgKnB0ciwgdW5zaWduZWQgbG9uZyBuLFxcbi0tXFxubW0vc2x1Yi5jLTg1NzItICovXFxubW0vc2x1Yi5jOjg1NzM6c3RhdGljIGludCBfX2ttZW1fY2FjaGVfZG9fc2hyaW5rKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxcbm1tL3NsdWIuYy04NTc0LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTU6NDc6MjMuMzYwNzk3NDI1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU3MjMwODY0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQ2hlY2tpbmcgS2V5IFJldHJpZXZhbCBNZXRob2RzKipcblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB3ZSdyZSBwdWxsaW5nIGRhdGEgZnJvbSB0aGVzZSBwYXJ0aWFsIG5vZGVzLCBlc3BlY2lhbGx5IHdpdGggdGhpcyBuZXcgYXJjaGl0ZWN0dXJlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZ3Jhc3AgdGhlIGNvcmUgbG9naWMgYmVoaW5kIGRhdGEgcmV0cmlldmFsLlxuXG5NeSBmb2N1cyBzaG91bGQgYmUgb24gaG93IHdlJ3JlIGdldHRpbmcgdGhlIG9iamVjdHMgd2UgbmVlZCwgYW5kIGhvdyB3ZSBoYW5kbGUgc2l0dWF0aW9ucyB3aGVyZSB0aGUgb2JqZWN0IGlzbid0IGltbWVkaWF0ZWx5IGF2YWlsYWJsZS4gSSB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgcHJvY2VzcyBpcyBvcHRpbWl6ZWQsIHJvYnVzdCwgYW5kIGhhbmRsZXMgZWRnZSBjYXNlcyBlZmZlY3RpdmVseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwMDEsIk91dHB1dFRva2VucyI6NjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNTo0NzoyNi45MzMxMDgxNjNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI5MDc5Nzk3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKHN0YXRpYyApPyh2b2lkfGJvb2x8dm9pZCBcXFxcKnxpbnQpIChnZXRfZnJvbV9wYXJ0aWFsX25vZGV8Z2V0X2Zyb21fYW55X3BhcnRpYWx8X19yZWZpbGxfb2JqZWN0c19hbnkpXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vc2x1Yi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNTo0NzoyNy4zNjIyMDUxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjM0Njk4MzE3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIGBnZXRfZnJvbV9wYXJ0aWFsX25vZGVgIFNpZ25hdHVyZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBleGFjdCBzaWduYXR1cmUgb2YgdGhpcyBgZ2V0X2Zyb21fcGFydGlhbF9ub2RlYCBmdW5jdGlvbi4gSSdtIGFscmVhZHkgZmFtaWxpYXIgd2l0aCB0aGUgZ2VuZXJhbCBjb25jZXB0IG9mIHBhcnRpYWwgbm9kZXMgYW5kIGhvdyB0aGV5J3JlIHVzZWQgaW4gdGhlIHN5c3RlbSwgYnV0IHByZWNpc2lvbiBpcyBrZXkuIFdoYXQgYXJlIHRoZSBpbnB1dCB0eXBlcz8gQXJlIHRoZXJlIGFueSBvcHRpb25hbCBwYXJhbWV0ZXJzIG9yIGRlZmF1bHQgdmFsdWVzIEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBkYXRhIHN0cnVjdHVyZXMgaXQgZXhwZWN0cyBhcyBpbnB1dCwgYmV5b25kIHRoZSBvYnZpb3VzIG5vZGUgcmVwcmVzZW50YXRpb24/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgdG8gZGV0ZXJtaW5lIGlmIHRoZSBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQgY29ycmVjdGx5IGluIHRoZSByZWxldmFudCBjb250ZXh0LiBBbnkgcG90ZW50aWFsIHR5cGUgbWlzbWF0Y2hlcyBvciBpbmNvcnJlY3QgYXNzdW1wdGlvbnMgbWFkZSBhYm91dCB0aGUgZXhwZWN0ZWQgZm9ybWF0IGNvdWxkIGxlYWQgdG8gc3VidGxlLCBoYXJkLXRvLWRlYnVnIGlzc3VlcyBkb3duIHRoZSBsaW5lLiBJIHdhbnQgdG8gY2hlY2sgZm9yIGVkZ2UgY2FzZXMsIGFuZCB0aGluayBhYm91dCB0aGUgaW1wbGljYXRpb25zIGZvciBwZXJmb3JtYW5jZSB1bmRlciBsb2FkLiBJJ20gbG9va2luZyBhdCBkYXRhIGFsaWdubWVudCwgYW5kIG1lbW9yeSB1c2FnZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyMzMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNTo0NzozMy43MDkxOTE0NDhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk0NDAzNDE2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnZXRfZnJvbV9wYXJ0aWFsX25vZGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vc2x1Yi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3NsdWIuYz0zOTQ4PXN0YXRpYyBib29sIGdldF9wYXJ0aWFsX25vZGVfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG4tLVxcbm1tL3NsdWIuYy00MDI5LSAqL1xcbm1tL3NsdWIuYzo0MDMwOnN0YXRpYyB2b2lkICpnZXRfZnJvbV9wYXJ0aWFsX25vZGUoc3RydWN0IGttZW1fY2FjaGUgKnMsXFxubW0vc2x1Yi5jLTQwMzEtXFx0XFx0XFx0XFx0ICAgc3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbixcXG4tLVxcbm1tL3NsdWIuYy00MDg1LVxcbm1tL3NsdWIuYzo0MDg2OlxcdFxcdH0gd2hpbGUgKCFfX3NsYWJfdXBkYXRlX2ZyZWVsaXN0KHMsIHNsYWIsIFxcdTAwMjZvbGQsIFxcdTAwMjZuZXcsIFxcXCJnZXRfZnJvbV9wYXJ0aWFsX25vZGVcXFwiKSk7XFxubW0vc2x1Yi5jLTQwODctXFxuLS1cXG5tbS9zbHViLmM9NDEwNT1zdGF0aWMgdm9pZCAqZ2V0X2Zyb21fYW55X3BhcnRpYWwoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcF9mbGFncyxcXG4tLVxcbm1tL3NsdWIuYy00MTYxLVxcbm1tL3NsdWIuYzo0MTYyOlxcdFxcdFxcdFxcdHZvaWQgKm9iamVjdCA9IGdldF9mcm9tX3BhcnRpYWxfbm9kZShzLCBuLFxcbm1tL3NsdWIuYy00MTYzLVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGdmcF9mbGFncywgYWMpO1xcbi0tXFxubW0vc2x1Yi5jPTQxODU9c3RhdGljIHZvaWQgKmdldF9mcm9tX3BhcnRpYWwoc3RydWN0IGttZW1fY2FjaGUgKnMsIGludCBub2RlLCBnZnBfdCBmbGFncyxcXG4tLVxcbm1tL3NsdWIuYy00MTkzLVxcbm1tL3NsdWIuYzo0MTk0OlxcdG9iamVjdCA9IGdldF9mcm9tX3BhcnRpYWxfbm9kZShzLCBnZXRfbm9kZShzLCBzZWFyY2hub2RlKSwgZmxhZ3MsIGFjKTtcXG5tbS9zbHViLmMtNDE5NS1cXHRpZiAob2JqZWN0IHx8IChub2RlICE9IE5VTUFfTk9fTk9ERSBcXHUwMDI2XFx1MDAyNiAoZmxhZ3MgXFx1MDAyNiBfX0dGUF9USElTTk9ERSkpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNTo0NzozNC42NTMyMzQyNDlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA2MDcyOTI1NDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU0xVQiBBbGxvY2F0b3IqKlxuXG5Pa2F5LCBzbyBldmVyeXRoaW5nIEknbSBsb29raW5nIGF0IGluIHRoaXMgY29kZSBzZWVtcyB0byBiZSBzdGF0aWMsIHdoaWNoIGlzbid0IHVudXN1YWwgZm9yIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25zLiBHaXZlbiB0aGF0IHRoZSBTTFVCIGFsbG9jYXRvciBpcyBzdWNoIGEgY3JpdGljYWwgY29tcG9uZW50LCBpdCdzIHByZXR0eSBtdWNoIGEgZ2l2ZW4gdGhhdCBpdCdzIGdvaW5nIHRvIGJlIHN1YmplY3RlZCB0byBoZWF2eSBmdXp6aW5nLiBCdXQgSSBuZWVkIHRvIGJlIHRob3JvdWdoLiBJIHdvbmRlciBpZiB0aGVyZSBhcmUgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiBgbW0vc2x1Yi5jYCB0aGF0IEkgc2hvdWxkIHBheSBleHRyYSBhdHRlbnRpb24gdG8uIExldCBtZSBxdWlja2x5IHNjYW4gdGhhdCBmaWxlIGFuZCBzZWUgd2hhdCdzIGFjdHVhbGx5IHZpc2libGUgYmV5b25kIGl0cyBzdGF0aWMgc2NvcGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExOTEzLCJPdXRwdXRUb2tlbnMiOjQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTU6NTI6NDAuNzI2MTYyMzY4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzU1ODA1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKHZvaWR8Ym9vbHx2b2lkIFxcXFwqfGludCkgW2EtekEtWjAtOV9dK1xcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3NsdWIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zbHViLmM9NDE1PXN0YXRpYyBpbmxpbmVcXG5tbS9zbHViLmM6NDE2OnZvaWQgc3RhdF9hZGQoY29uc3Qgc3RydWN0IGttZW1fY2FjaGUgKnMsIGVudW0gc3RhdF9pdGVtIHNpLCBpbnQgdilcXG5tbS9zbHViLmMtNDE3LXtcXG4tLVxcbm1tL3NsdWIuYz05ODE9c3RhdGljIGJvb2wgc2xhYl9hZGRfa3VuaXRfZXJyb3JzKHZvaWQpXFxuLS1cXG5tbS9zbHViLmMtOTk2LVxcbm1tL3NsdWIuYzo5OTc6Ym9vbCBzbGFiX2luX2t1bml0X3Rlc3Qodm9pZClcXG5tbS9zbHViLmMtOTk4LXtcXG4tLVxcbm1tL3NsdWIuYz0xMTM5PXN0YXRpYyB2b2lkIHByaW50X3RyYWNrKGNvbnN0IGNoYXIgKnMsIHN0cnVjdCB0cmFjayAqdCwgdW5zaWduZWQgbG9uZyBwcl90aW1lKVxcbi0tXFxubW0vc2x1Yi5jLTExNTYtXFxubW0vc2x1Yi5jOjExNTc6dm9pZCBwcmludF90cmFja2luZyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqZWN0KVxcbm1tL3NsdWIuYy0xMTU4LXtcXG4tLVxcbm1tL3NsdWIuYz0xMTY3PXN0YXRpYyB2b2lkIHByaW50X3NsYWJfaW5mbyhjb25zdCBzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4tLVxcbm1tL3NsdWIuYy0xMTczLVxcbm1tL3NsdWIuYzoxMTc0OnZvaWQgc2tpcF9vcmlnX3NpemVfY2hlY2soc3RydWN0IGttZW1fY2FjaGUgKnMsIGNvbnN0IHZvaWQgKm9iamVjdClcXG5tbS9zbHViLmMtMTE3NS17XFxuLS1cXG5tbS9zbHViLmM9MTc1ND1zdGF0aWNcXG5tbS9zbHViLmM6MTc1NTp2b2lkIHNldHVwX3NsYWJfZGVidWcoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICphZGRyKVxcbm1tL3NsdWIuYy0xNzU2LXtcXG4tLVxcbm1tL3NsdWIuYz0yMDU2PXN0YXRpYyBpbmxpbmVcXG5tbS9zbHViLmM6MjA1Nzp2b2lkIHNldHVwX3NsYWJfZGVidWcoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICphZGRyKSB7fVxcbm1tL3NsdWIuYy0yMDU4LVxcbi0tXFxubW0vc2x1Yi5jPTIxNzg9c3RhdGljIGlubGluZSB2b2lkIGluaXRfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4tLVxcbm1tL3NsdWIuYy0yMTgyLVxcbm1tL3NsdWIuYzoyMTgzOmludCBhbGxvY19zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG5tbS9zbHViLmMtMjE4NC1cXHRcXHRcXHRnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncylcXG4tLVxcbm1tL3NsdWIuYz0yNTI1PXN0YXRpYyBfX2Zhc3RwYXRoX2lubGluZVxcbm1tL3NsdWIuYzoyNTI2OmJvb2wgbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGZsYWdzLFxcbm1tL3NsdWIuYy0yNTI3LVxcdFxcdFxcdFxcdHNpemVfdCBzaXplLCB2b2lkICoqcCxcXG4tLVxcbm1tL3NsdWIuYz0yNTUwPXN0YXRpYyBfX2Zhc3RwYXRoX2lubGluZVxcbm1tL3NsdWIuYzoyNTUxOnZvaWQgbWVtY2dfc2xhYl9mcmVlX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICoqcCxcXG5tbS9zbHViLmMtMjU1Mi1cXHRcXHRcXHQgIGludCBvYmplY3RzKVxcbi0tXFxubW0vc2x1Yi5jPTI1NzE9c3RhdGljIF9fZmFzdHBhdGhfaW5saW5lXFxubW0vc2x1Yi5jOjI1NzI6Ym9vbCBtZW1jZ19zbGFiX3Bvc3RfY2hhcmdlKHZvaWQgKnAsIGdmcF90IGZsYWdzKVxcbm1tL3NsdWIuYy0yNTczLXtcXG4tLVxcbm1tL3NsdWIuYz0yNjg1PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmVcXG5tbS9zbHViLmM6MjY4Njpib29sIHNsYWJfZnJlZV9ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICp4LCBib29sIGluaXQsXFxubW0vc2x1Yi5jLTI2ODctXFx0XFx0ICAgIGJvb2wgYWZ0ZXJfcmN1X2RlbGF5KVxcbi0tXFxubW0vc2x1Yi5jPTI3NzA9c3RhdGljIF9fZmFzdHBhdGhfaW5saW5lXFxubW0vc2x1Yi5jOjI3NzE6Ym9vbCBzbGFiX2ZyZWVfZnJlZWxpc3RfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqKmhlYWQsIHZvaWQgKip0YWlsLFxcbm1tL3NsdWIuYy0yNzcyLVxcdFxcdFxcdCAgICAgaW50ICpjbnQpXFxuLS1cXG5tbS9zbHViLmM9NDI4ND1zdGF0aWMgdm9pZCBmbHVzaF9yY3Vfc2hlYWYoc3RydWN0IHdvcmtfc3RydWN0ICp3KVxcbi0tXFxubW0vc2x1Yi5jLTQzMDctLyogbmVlZGVkIGZvciBrdmZyZWVfcmN1X2JhcnJpZXIoKSAqL1xcbm1tL3NsdWIuYzo0MzA4OnZvaWQgZmx1c2hfcmN1X3NoZWF2ZXNfb25fY2FjaGUoc3RydWN0IGttZW1fY2FjaGUgKnMpXFxubW0vc2x1Yi5jLTQzMDkte1xcbi0tXFxubW0vc2x1Yi5jLTQzMzgtXFxubW0vc2x1Yi5jOjQzMzk6dm9pZCBmbHVzaF9hbGxfcmN1X3NoZWF2ZXModm9pZClcXG5tbS9zbHViLmMtNDM0MC17XFxuLS1cXG5tbS9zbHViLmM9NDgwND1zdGF0aWMgX19mYXN0cGF0aF9pbmxpbmVcXG5tbS9zbHViLmM6NDgwNTpib29sIHNsYWJfcG9zdF9hbGxvY19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncywgc2l6ZV90IHNpemUsXFxubW0vc2x1Yi5jLTQ4MDYtXFx0XFx0XFx0ICB2b2lkICoqcCwgY29uc3Qgc3RydWN0IHNsYWJfYWxsb2NfY29udGV4dCAqYWMpXFxuLS1cXG5tbS9zbHViLmM9NTE5NT1FWFBPUlRfU1lNQk9MKGttZW1fY2FjaGVfYWxsb2NfbHJ1X25vcHJvZik7XFxubW0vc2x1Yi5jLTUxOTYtXFxubW0vc2x1Yi5jOjUxOTc6Ym9vbCBrbWVtX2NhY2hlX2NoYXJnZSh2b2lkICpvYmpwLCBnZnBfdCBnZnBmbGFncylcXG5tbS9zbHViLmMtNTE5OC17XFxuLS1cXG5tbS9zbHViLmM9NTI3MT1rbWVtX2NhY2hlX3ByZWZpbGxfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IHNpemUpXFxuLS1cXG5tbS9zbHViLmMtNTM1My0gKi9cXG5tbS9zbHViLmM6NTM1NDp2b2lkIGttZW1fY2FjaGVfcmV0dXJuX3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnAsXFxubW0vc2x1Yi5jLTUzNTUtXFx0XFx0XFx0ICAgICBzdHJ1Y3Qgc2xhYl9zaGVhZiAqc2hlYWYpXFxuLS1cXG5tbS9zbHViLmMtNTQxMS0gKi9cXG5tbS9zbHViLmM6NTQxMjppbnQga21lbV9jYWNoZV9yZWZpbGxfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcCxcXG5tbS9zbHViLmMtNTQxMy1cXHRcXHRcXHQgICAgc3RydWN0IHNsYWJfc2hlYWYgKipzaGVhZnAsIHVuc2lnbmVkIGludCBzaXplKVxcbi0tXFxubW0vc2x1Yi5jPTYyMTE9c3RhdGljIF9fZmFzdHBhdGhfaW5saW5lXFxubW0vc2x1Yi5jOjYyMTI6Ym9vbCBmcmVlX3RvX3BjcyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqZWN0LCBib29sIGFsbG93X3NwaW4pXFxubW0vc2x1Yi5jLTYyMTMte1xcbi0tXFxubW0vc2x1Yi5jPTYzMDY9c3RhdGljIERFRklORV9XQUlUX09WRVJSSURFX01BUChrZnJlZV9yY3Vfc2hlYWZfbWFwLCBMRF9XQUlUX0NPTkZJRyk7XFxubW0vc2x1Yi5jLTYzMDctXFxubW0vc2x1Yi5jOjYzMDg6Ym9vbCBfX2tmcmVlX3JjdV9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqLCB1bnNpZ25lZCBpbnQgZnJlZV9mbGFncylcXG5tbS9zbHViLmMtNjMwOS17XFxuLS1cXG5tbS9zbHViLmM9NjY2NT1zdGF0aWMgdm9pZCBkZWZlcl9mcmVlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpoZWFkKVxcbi0tXFxubW0vc2x1Yi5jLTY2NzctXFxubW0vc2x1Yi5jOjY2Nzg6dm9pZCBkZWZlcl9rZnJlZV9yY3Uoc3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqaGVhZClcXG5tbS9zbHViLmMtNjY3OS17XFxuLS1cXG5tbS9zbHViLmMtNjY4OS0vKiBNdXN0IGJlIGNhbGxlZCBiZWZvcmUgZmx1c2hfcmN1X3NoZWF2ZXNfb25fY2FjaGUoKSAqL1xcbm1tL3NsdWIuYzo2NjkwOnZvaWQgZGVmZXJyZWRfd29ya19iYXJyaWVyKHZvaWQpXFxubW0vc2x1Yi5jLTY2OTEte1xcbi0tXFxubW0vc2x1Yi5jPTY2OTg9c3RhdGljIF9fZmFzdHBhdGhfaW5saW5lXFxubW0vc2x1Yi5jOjY2OTk6dm9pZCBzbGFiX2ZyZWUoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICpvYmplY3QsXFxubW0vc2x1Yi5jLTY3MDAtXFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgYWRkcilcXG4tLVxcbm1tL3NsdWIuYz02NzE3PXN0YXRpYyBub2lubGluZVxcbm1tL3NsdWIuYzo2NzE4OnZvaWQgbWVtY2dfYWxsb2NfYWJvcnRfc2luZ2xlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmplY3QpXFxubW0vc2x1Yi5jLTY3MTkte1xcbi0tXFxubW0vc2x1Yi5jPTY3Mjk9c3RhdGljIF9fZmFzdHBhdGhfaW5saW5lXFxubW0vc2x1Yi5jOjY3MzA6dm9pZCBzbGFiX2ZyZWVfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHZvaWQgKmhlYWQsXFxubW0vc2x1Yi5jLTY3MzEtXFx0XFx0ICAgIHZvaWQgKnRhaWwsIHZvaWQgKipwLCBpbnQgY250LCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuLS1cXG5tbS9zbHViLmM9Njc0Nj1zdGF0aWMgdm9pZCBzbGFiX2ZyZWVfYWZ0ZXJfcmN1X2RlYnVnKHN0cnVjdCByY3VfaGVhZCAqcmN1X2hlYWQpXFxuLS1cXG5tbS9zbHViLmMtNjc3NC0jaWZkZWYgQ09ORklHX0tBU0FOX0dFTkVSSUNcXG5tbS9zbHViLmM6Njc3NTp2b2lkIF9fX2NhY2hlX2ZyZWUoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlLCB2b2lkICp4LCB1bnNpZ25lZCBsb25nIGFkZHIpXFxubW0vc2x1Yi5jLTY3NzYte1xcbi0tXFxubW0vc2x1Yi5jPTY3ODI9c3RhdGljIG5vaW5saW5lIHZvaWQgd2Fybl9mcmVlX2JhZF9vYmooc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iailcXG4tLVxcbm1tL3NsdWIuYy02ODExLSAqL1xcbm1tL3NsdWIuYzo2ODEyOnZvaWQga21lbV9jYWNoZV9mcmVlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICp4KVxcbm1tL3NsdWIuYy02ODEzLXtcXG4tLVxcbm1tL3NsdWIuYz02OTI2PXN0YXRpYyB2b2lkIGZyZWVfbGFyZ2Vfa21hbGxvYyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdm9pZCAqb2JqZWN0KVxcbi0tXFxubW0vc2x1Yi5jLTY5NTEtICovXFxubW0vc2x1Yi5jOjY5NTI6dm9pZCBrdmZyZWVfcmN1X2NiKHN0cnVjdCByY3VfaGVhZCAqaGVhZClcXG5tbS9zbHViLmMtNjk1My17XFxuLS1cXG5tbS9zbHViLmMtNjk3Ni0gKi9cXG5tbS9zbHViLmM6Njk3Nzp2b2lkIGtmcmVlKGNvbnN0IHZvaWQgKm9iamVjdClcXG5tbS9zbHViLmMtNjk3OC17XFxuLS1cXG5tbS9zbHViLmM9NzAwMD1FWFBPUlRfU1lNQk9MKGtmcmVlKTtcXG4tLVxcbm1tL3NsdWIuYy03MDEwLSAqL1xcbm1tL3NsdWIuYzo3MDExOnZvaWQga2ZyZWVfbm9sb2NrKGNvbnN0IHZvaWQgKm9iamVjdClcXG5tbS9zbHViLmMtNzAxMi17XFxuLS1cXG5tbS9zbHViLmM9NzI0Mz1FWFBPUlRfU1lNQk9MKF9fa3ZtYWxsb2Nfbm9kZV9ub3Byb2YpO1xcbi0tXFxubW0vc2x1Yi5jLTcyNTQtICovXFxubW0vc2x1Yi5jOjcyNTU6dm9pZCBrdmZyZWUoY29uc3Qgdm9pZCAqYWRkcilcXG5tbS9zbHViLmMtNzI1Ni17XFxuLS1cXG5tbS9zbHViLmM9NzI2Mj1FWFBPUlRfU1lNQk9MKGt2ZnJlZSk7XFxuLS1cXG5tbS9zbHViLmMtNzI3MC0gKi9cXG5tbS9zbHViLmM6NzI3MTp2b2lkIGt2ZnJlZV9hdG9taWMoY29uc3Qgdm9pZCAqYWRkcilcXG5tbS9zbHViLmMtNzI3Mi17XFxuLS1cXG5tbS9zbHViLmM9NzI3OD1FWFBPUlRfU1lNQk9MKGt2ZnJlZV9hdG9taWMpO1xcbi0tXFxubW0vc2x1Yi5jLTcyODgtICovXFxubW0vc2x1Yi5jOjcyODk6dm9pZCBrdmZyZWVfc2Vuc2l0aXZlKGNvbnN0IHZvaWQgKmFkZHIsIHNpemVfdCBsZW4pXFxubW0vc2x1Yi5jLTcyOTAte1xcbi0tXFxubW0vc2x1Yi5jPTczNDc9c3RhdGljIGlubGluZVxcbm1tL3NsdWIuYzo3MzQ4OmludCBidWlsZF9kZXRhY2hlZF9mcmVlbGlzdChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc2l6ZV90IHNpemUsXFxubW0vc2x1Yi5jLTczNDktXFx0XFx0XFx0ICAgIHZvaWQgKipwLCBzdHJ1Y3QgZGV0YWNoZWRfZnJlZWxpc3QgKmRmKVxcbi0tXFxubW0vc2x1Yi5jPTc0MTI9c3RhdGljIHZvaWQgX19rbWVtX2NhY2hlX2ZyZWVfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc2l6ZV90IHNpemUsIHZvaWQgKipwKVxcbi0tXFxubW0vc2x1Yi5jLTc0MzItLyogTm90ZSB0aGF0IGludGVycnVwdHMgbXVzdCBiZSBlbmFibGVkIHdoZW4gY2FsbGluZyB0aGlzIGZ1bmN0aW9uLiAqL1xcbm1tL3NsdWIuYzo3NDMzOnZvaWQga21lbV9jYWNoZV9mcmVlX2J1bGsoc3RydWN0IGttZW1fY2FjaGUgKnMsIHNpemVfdCBzaXplLCB2b2lkICoqcClcXG5tbS9zbHViLmMtNzQzNC17XFxuLS1cXG5tbS9zbHViLmM9NzYzNz1zdGF0aWMgYm9vbCBfX2ttZW1fY2FjaGVfYWxsb2NfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZmxhZ3MsXFxuLS1cXG5tbS9zbHViLmMtNzY4Ni0gKi9cXG5tbS9zbHViLmM6NzY4Nzpib29sIGttZW1fY2FjaGVfYWxsb2NfYnVsa19ub3Byb2Yoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGZsYWdzLFxcbm1tL3NsdWIuYy03Njg4LVxcdFxcdHNpemVfdCBzaXplLCB2b2lkICoqcClcXG4tLVxcbm1tL3NsdWIuYz04MDA1PXN0YXRpYyB2b2lkIGZyZWVfa21lbV9jYWNoZV9ub2RlcyhzdHJ1Y3Qga21lbV9jYWNoZSAqcylcXG4tLVxcbm1tL3NsdWIuYy04MDI4LVxcbm1tL3NsdWIuYzo4MDI5OnZvaWQgX19rbWVtX2NhY2hlX3JlbGVhc2Uoc3RydWN0IGttZW1fY2FjaGUgKnMpXFxubW0vc2x1Yi5jLTgwMzAte1xcbi0tXFxubW0vc2x1Yi5jPTgzMTc9c3RhdGljIHZvaWQgZnJlZV9wYXJ0aWFsKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlICpuKVxcbi0tXFxubW0vc2x1Yi5jLTgzNDEtXFxubW0vc2x1Yi5jOjgzNDI6Ym9vbCBfX2ttZW1fY2FjaGVfZW1wdHkoc3RydWN0IGttZW1fY2FjaGUgKnMpXFxubW0vc2x1Yi5jLTgzNDMte1xcbi0tXFxubW0vc2x1Yi5jLTgzNTUtICovXFxubW0vc2x1Yi5jOjgzNTY6aW50IF9fa21lbV9jYWNoZV9zaHV0ZG93bihzdHJ1Y3Qga21lbV9jYWNoZSAqcylcXG5tbS9zbHViLmMtODM1Ny17XFxuLS1cXG5tbS9zbHViLmMtODM4My0jaWZkZWYgQ09ORklHX1BSSU5US1xcbm1tL3NsdWIuYzo4Mzg0OnZvaWQgX19rbWVtX29ial9pbmZvKHN0cnVjdCBrbWVtX29ial9pbmZvICprcHAsIHZvaWQgKm9iamVjdCwgc3RydWN0IHNsYWIgKnNsYWIpXFxubW0vc2x1Yi5jLTgzODUte1xcbi0tXFxubW0vc2x1Yi5jPTg1MDg9X19jb3JlX3BhcmFtX2NiKHNsYWJfc3RyaWN0X251bWEsIFxcdTAwMjZwYXJhbV9vcHNfc2xhYl9zdHJpY3RfbnVtYSwgTlVMTCwgMCk7XFxuLS1cXG5tbS9zbHViLmMtODUyMC0gKi9cXG5tbS9zbHViLmM6ODUyMTp2b2lkIF9fY2hlY2tfaGVhcF9vYmplY3QoY29uc3Qgdm9pZCAqcHRyLCB1bnNpZ25lZCBsb25nIG4sXFxubW0vc2x1Yi5jLTg1MjItXFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBzbGFiICpzbGFiLCBib29sIHRvX3VzZXIpXFxuLS1cXG5tbS9zbHViLmM9ODU3Mz1zdGF0aWMgaW50IF9fa21lbV9jYWNoZV9kb19zaHJpbmsoc3RydWN0IGttZW1fY2FjaGUgKnMpXFxuLS1cXG5tbS9zbHViLmMtODY0NC1cXG5tbS9zbHViLmM6ODY0NTppbnQgX19rbWVtX2NhY2hlX3NocmluayhzdHJ1Y3Qga21lbV9jYWNoZSAqcylcXG5tbS9zbHViLmMtODY0Ni17XFxuLS1cXG5tbS9zbHViLmM9ODkyMT12b2lkIF9faW5pdCBrbWVtX2NhY2hlX2luaXRfbGF0ZSh2b2lkKVxcbi0tXFxubW0vc2x1Yi5jLTg5MzAtXFxubW0vc2x1Yi5jOjg5MzE6aW50IGRvX2ttZW1fY2FjaGVfY3JlYXRlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBjb25zdCBjaGFyICpuYW1lLFxcbm1tL3NsdWIuYy04OTMyLVxcdFxcdFxcdCB1bnNpZ25lZCBpbnQgc2l6ZSwgc3RydWN0IGttZW1fY2FjaGVfYXJncyAqYXJncyxcXG4tLVxcbm1tL3NsdWIuYz05OTY4PXN0YXRpYyBpbnQgc3lzZnNfc2xhYl9hZGQoc3RydWN0IGttZW1fY2FjaGUgKnMpXFxuLS1cXG5tbS9zbHViLmMtMTAwMTYtXFxubW0vc2x1Yi5jOjEwMDE3OnZvaWQgc3lzZnNfc2xhYl91bmxpbmsoc3RydWN0IGttZW1fY2FjaGUgKnMpXFxubW0vc2x1Yi5jLTEwMDE4LXtcXG4tLVxcbm1tL3NsdWIuYy0xMDAyMi1cXG5tbS9zbHViLmM6MTAwMjM6dm9pZCBzeXNmc19zbGFiX3JlbGVhc2Uoc3RydWN0IGttZW1fY2FjaGUgKnMpXFxubW0vc2x1Yi5jLTEwMDI0LXtcXG4tLVxcbm1tL3NsdWIuYz0xMDAzOD1zdGF0aWMgc3RydWN0IHNhdmVkX2FsaWFzICphbGlhc19saXN0O1xcbm1tL3NsdWIuYy0xMDAzOS1cXG5tbS9zbHViLmM6MTAwNDA6aW50IHN5c2ZzX3NsYWJfYWxpYXMoc3RydWN0IGttZW1fY2FjaGUgKnMsIGNvbnN0IGNoYXIgKm5hbWUpXFxubW0vc2x1Yi5jLTEwMDQxLXtcXG4tLVxcbm1tL3NsdWIuYz0xMDMwMj1zdGF0aWMgdm9pZCBkZWJ1Z2ZzX3NsYWJfYWRkKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxcbi0tXFxubW0vc2x1Yi5jLTEwMzE3LVxcbm1tL3NsdWIuYzoxMDMxODp2b2lkIGRlYnVnZnNfc2xhYl9yZWxlYXNlKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxcbm1tL3NsdWIuYy0xMDMxOS17XFxuLS1cXG5tbS9zbHViLmM9MTAzMjY9c3RhdGljIHZvaWQgX19pbml0IHNsYWJfZGVidWdmc19yb290X2luaXQodm9pZClcXG4tLVxcbm1tL3NsdWIuYy0xMDMzNC0jaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcXG5tbS9zbHViLmM6MTAzMzU6dm9pZCBnZXRfc2xhYmluZm8oc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiaW5mbyAqc2luZm8pXFxubW0vc2x1Yi5jLTEwMzM2LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTU6NTI6NDAuNzczNzIyNTczWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcyMDA2MzA1MzkwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgU0xVQiBQYXRjaCBDb3ZlcmFnZSBmb3IgRnV6emluZyoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBpbnRvIHRoZSBTTFVCIGNvcmUuIE15IHByaW1hcnkgY29uY2VybiBoZXJlIGlzIGhvdyB0byBiZXN0IHRlc3QgdGhlIG1vZGlmaWVkIGxvZ2ljIHdpdGhvdXQgZ2V0dGluZyBza2V3ZWQgcmVzdWx0cyBmcm9tIGZ1enppbmcgZXh0cmVtZWx5IGNvbW1vbiBob3QgcGF0aHMuIFRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IHRlbGxzIG1lIHRvIGF2b2lkIHRob3NlIGFuZCBmb2N1cyBvbiBkaXN0aW5jdCBBUEkgZW50cnkgcG9pbnRzLiBSaWdodCwgc28gSSd2ZSBnb3QgdG8gZmluZCB0aGUgcmlnaHQgZW50cnkgcG9pbnRzIHRoYXQgKnRyaWdnZXIqIHRoZSBuZXcgbG9naWMgKGB1bnBhcmtfc2xhYnNgIHNwZWNpZmljYWxseSksIGJ1dCBhcmVuJ3QgdGhlbXNlbHZlcyBjb25zdGFudGx5IGhhbW1lcmVkLlxuXG5MZXQncyBzZWUuLi4gdGhlIGNvZGUgZmxvdy4gYGtmcmVlYCwgYGttZW1fY2FjaGVfZnJlZWAsIHRoZSBidWxrIGFsbG9jL2ZyZWUgZnVuY3Rpb25zLi4uIHRob3NlIGFyZSBhbGwgb3V0LiBUaGV5J3JlIGJhc2ljYWxseSB0aGUgZW5naW5lIHJvb20gb2YgbWVtb3J5IG1hbmFnZW1lbnQuIExpc3RpbmcgdGhlbSB3b3VsZCBiZSB1c2VsZXNzLiBUaGUgcHJvbXB0IGlzIHZlcnkgc3BlY2lmaWMgYWJvdXQgdGhhdCwgYW5kIEkgYWdyZWUsIHNrZXdpbmcgaXMgdGhlIGVuZW15IG9mIHVzZWZ1bCBmdXp6aW5nLlxuXG5IbW0sIHRoaW5raW5nLi4uIEkgcmVtZW1iZXIgc29tZSBsZXNzLWZyZXF1ZW50bHkgY2FsbGVkIGZ1bmN0aW9ucy4gTGV0IG1lIGNoZWNrLi4uIEFoLCBgX19rbWVtX2NhY2hlX3Nocmlua2AsIHRoYXQgY2FsbHMgYF9fa21lbV9jYWNoZV9kb19zaHJpbmtgLCB3aGljaCBoaXRzIGB1bnBhcmtfc2xhYnNgLiBUaGF0IGxvb2tzIHByb21pc2luZy4gYF9fa21lbV9jYWNoZV9lbXB0eWAgY2FsbHMgYGZyZWVfcGFydGlhbGAgd2hpY2gsIGFnYWluLCBjYWxscyBgdW5wYXJrX3NsYWJzYC4gQW5kIGBfX2ttZW1fY2FjaGVfc2h1dGRvd25gIGNhbGxzIGBmcmVlX3BhcnRpYWxgIGFzIHdlbGwuXG5cbk5vdywgYXJlIHRoZXNlIHRoZSByaWdodCBlbnRyeSBwb2ludHM/IEFyZSB0aGV5IG5vbi1zdGF0aWMgZnVuY3Rpb25zPyBMZXQgbWUgdmVyaWZ5OiBZdXAsIGBpbnQgX19rbWVtX2NhY2hlX3NocmluayhzdHJ1Y3Qga21lbV9jYWNoZSAqcylgLCB0aGF0J3MgZ29vZC4gQW5kIGBpbnQgX19rbWVtX2NhY2hlX3NodXRkb3duKHN0cnVjdCBrbWVtX2NhY2hlICpzKWAuIEFuZCBgYm9vbCBfX2ttZW1fY2FjaGVfZW1wdHkoc3RydWN0IGttZW1fY2FjaGUgKnMpYC4gRXhjZWxsZW50LiBUaGV5IGFyZSBub24tc3RhdGljIGFuZCB0aGV5J3JlIGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhlIGNvcmUgbG9naWMgb2YgdGhlIHBhdGNoLiBUaG9zZSBzZWVtIHRvIGJlIGlkZWFsIGNhbmRpZGF0ZXMsIGJlY2F1c2UgdGhleSdyZSBub3QgaG90IHBhdGhzLCBidXQgc3RpbGwgZXhlcmNpc2UgdGhlIG5ldyBjb2RlLlxuXG5SaWdodCwgbGV0J3MgbWFrZSBzdXJlIHRoYXQgdGhvc2UgYXJlIHRoZSByaWdodCBjYWxscy4gVGhlbiwgbGV0J3MgbW92ZSBvbiB0byBhY3R1YWxseSB2ZXJpZnlpbmcgdGhlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYzMDAsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTY6MDQ6NDAuODM2Nzc5ODgxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTcwNDQ4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKGludHxib29sKSBfX2ttZW1fY2FjaGVfKHNocmlua3xzaHV0ZG93bnxlbXB0eSlcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zbHViLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc2x1Yi5jPTgzMTc9c3RhdGljIHZvaWQgZnJlZV9wYXJ0aWFsKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlICpuKVxcbi0tXFxubW0vc2x1Yi5jLTgzNDEtXFxubW0vc2x1Yi5jOjgzNDI6Ym9vbCBfX2ttZW1fY2FjaGVfZW1wdHkoc3RydWN0IGttZW1fY2FjaGUgKnMpXFxubW0vc2x1Yi5jLTgzNDMte1xcbi0tXFxubW0vc2x1Yi5jLTgzNTUtICovXFxubW0vc2x1Yi5jOjgzNTY6aW50IF9fa21lbV9jYWNoZV9zaHV0ZG93bihzdHJ1Y3Qga21lbV9jYWNoZSAqcylcXG5tbS9zbHViLmMtODM1Ny17XFxuLS1cXG5tbS9zbHViLmM9ODU3Mz1zdGF0aWMgaW50IF9fa21lbV9jYWNoZV9kb19zaHJpbmsoc3RydWN0IGttZW1fY2FjaGUgKnMpXFxuLS1cXG5tbS9zbHViLmMtODY0NC1cXG5tbS9zbHViLmM6ODY0NTppbnQgX19rbWVtX2NhY2hlX3NocmluayhzdHJ1Y3Qga21lbV9jYWNoZSAqcylcXG5tbS9zbHViLmMtODY0Ni17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE2OjA0OjQwLjg4NjQ4OTMwN1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5ODEwNjc3MDk3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgS2VybmVsIE1lbW9yeSBNYW5hZ2VtZW50IEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgbGlzdCBvZiBub24tc3RhdGljIGZ1bmN0aW9ucyBhZ2Fpbi4gVGhlIGluaXRpYWwgcHJlbWlzZSBpcyBzb2xpZDsgeWVzLCB0aGUgZnVuY3Rpb25zIHdlJ3JlIGFmdGVyIGFyZSBnZW5lcmFsbHkgbm9uLXN0YXRpYy4gTm93LCBJJ20gdHJ5aW5nIHRvIHJlZmluZSB0aGUgbGlzdCBmb3IgcmVsZXZhbmNlIGFuZCB0aGlzIGlzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuIEkgdGhvdWdodCBhYm91dCBgdW5wYXJrX3dvcmtfZm5gLCBidXQgdGhhdCdzIGEgd29ya3F1ZXVlIGZ1bmN0aW9uIOKAkyBzdGF0aWMgYW5kIG5vdCBkaXJlY3RseSBjYWxsYWJsZS4gTm90IHJlbGV2YW50IGhlcmUsIHNvIGxldCdzIG1vdmUgb24uXG5cblRoZSBjb3JlIG9mIHRoZSBvYmplY3QgZGVhbGxvY2F0aW9uIHByb2Nlc3MgaXMgY2xlYXJseSB3aXRoaW4gYF9fc2xhYl9mcmVlYC4gSXQncyBjYWxsZWQgYnkgYGtmcmVlYCBhbmQgYGttZW1fY2FjaGVfZnJlZWAsIHR3byAqdmVyeSogaG90IHBhdGhzLiBXZSdyZSBleHBsaWNpdGx5IHRyeWluZyB0byBleGNsdWRlIHRoZXNlIHNpbmNlIHRoZXNlIGFyZSBiYXNpYyBmdW5jdGlvbnMsIGJ1dCBvbmVzIHRoYXQgYXJlIHNvIGNvbW1vbmx5IHVzZWQgYXMgdG8gbm90IGJlIHVzZWZ1bCBpbiB0aGlzIGNvbnRleHQuXG5cbkhtbSwgc28sIHdoYXQgZWxzZSBpcyBvdXQgdGhlcmUgdGhhdCBpcyAqbm90KiBzdGF0aWM/IExldCBtZSBzZWUuLi4gSSd2ZSBnb3QgaXQhIGBrbWVtX2NhY2hlX3Nocmlua2AsIHdoaWNoLCBjb252ZW5pZW50bHksIHdyYXBzIGBfX2ttZW1fY2FjaGVfc2hyaW5rYCwgaXMgYSBwcmltZSBjYW5kaWRhdGUuIEl0J3Mgbm90IGEgaG90IHBhdGgsIGJ1dCByZWxhdGVkIHRvIHRoZSBzbGFiIGFsbG9jYXRvci4gTGV0J3MgbWFrZSBzdXJlIGl0J3MgbG9jYXRlZCBpbiBgbW0vc2xhYl9jb21tb24uY2AgdG8gY29uZmlybSBpdCBmaXRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzQ5MSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNjowNjoxOC45OTMyNjMzNjlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NDU3NTU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5pbnQga21lbV9jYWNoZV9zaHJpbmtcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc2xhYl9jb21tb24uYz01OTg9RVhQT1JUX1NZTUJPTChrbWVtX2NhY2hlX2Rlc3Ryb3kpO1xcbi0tXFxubW0vc2xhYl9jb21tb24uYy02MDgtICovXFxubW0vc2xhYl9jb21tb24uYzo2MDk6aW50IGttZW1fY2FjaGVfc2hyaW5rKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXApXFxubW0vc2xhYl9jb21tb24uYy02MTAte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNjowNjoxOS4wNDI3MjQ5NjVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTMzNTUwNzc2NzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBDb2RlIENoYW5nZXMqKlxuXG5Pa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgYGttZW1fY2FjaGVfc2hyaW5rYCBpcyBpbiBgbW0vc2xhYl9jb21tb24uY2AsIGFuZCBgX19rbWVtX2NhY2hlX3Nocmlua2AgaXMgaW4gYG1tL3NsdWIuY2AuIEknbGwgYWxzbyBhZGQgYF9fa21lbV9jYWNoZV9zaHV0ZG93bmAgYW5kIGBfX2ttZW1fY2FjaGVfZW1wdHlgIHRvIHRoZSBsaXN0LCBhcyBJIGFtIHRyeWluZyB0byBsaXN0IGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoaXMgcHJvY2Vzcy5cblxuSG9sZCBvbiwgdGhlIHBhdGNoIHRvdWNoZXMgYGdldF9mcm9tX2FueV9wYXJ0aWFsYCBhbmQgYF9fcmVmaWxsX29iamVjdHNfYW55YCB0b28uIFRob3NlIGFyZSBpbnZvbHZlZCBpbiBhbGxvY2F0aW9uLCBhbmQgdGhhdCdzIGEgaG90IHBhdGguIE5vIG5lZWQgdG8gbGlzdCBhbGxvY2F0aW9uIGZ1bmN0aW9ucy5cblxuQXJlIHRoZXJlIGFueSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBoZXJlPyBHaXZlbiB0aGUgY2hhbmdlcyBhcmUgaW4gYG1tL3NsdWIuY2AsIGFuZCBTTFVCIGlzIHRoZSBkZWZhdWx0IHNsYWIgYWxsb2NhdG9yIG5vdywgaXQgc2VlbXMgdGhpcyBpcyBjb3JlIGxvZ2ljLiBCdXQgd2FpdCwgYENPTkZJR19TTFVCX1NUQVRTYCBpcyBtb2RpZmllZCB0byBhZGQgc3RhdHMsIGJ1dCB0aGUgY29yZSBsb2dpYyBpdHNlbGYgaXNuJ3QgZ2F0ZWQgYnkgdGhhdCBjb25maWcuIFNvLCBJIGRvbid0IG5lZWQgdG8gc3BlY2lmeSBgRW5hYmxlQ29uZmlnc2AgYXQgYWxsLlxuXG5JIHNob3VsZCBkb3VibGUtY2hlY2sgZm9yIG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zLiBga21lbV9jYWNoZV9mcmVlX2J1bGtgIGFuZCBga21lbV9jYWNoZV9hbGxvY19idWxrX25vcHJvZmAgYXJlIGFsc28gdXNlZCBkdXJpbmcgY2FjaGUgY2xlYW51cCwgYnV0IGFyZSBsZXNzIGNyaXRpY2FsIHRoYW4gYGtmcmVlYCwgdGhlIGhvdCBwYXRoLiBUaGVyZWZvcmUsIEkgd2lsbCBsaXN0IGBfX2ttZW1fY2FjaGVfc2hyaW5rYCwgYF9fa21lbV9jYWNoZV9zaHV0ZG93bmAsIGBfX2ttZW1fY2FjaGVfZW1wdHlgLlxuXG5BY3R1YWxseSwgc2luY2UgYF9fa21lbV9jYWNoZV9lbXB0eWAgYW5kIGBfX2ttZW1fY2FjaGVfc2h1dGRvd25gIGFyZSBjYWxsZWQgd2hlbiB0aGUgY2FjaGUgaXMgYmVpbmcgZGVzdHJveWVkLCBga21lbV9jYWNoZV9kZXN0cm95YCBpcyB0aGUgcHVibGljIEFQSS4gU28sIEkgdGhpbmsgYSBtb3JlIHVzZWZ1bCBsaXN0IGlzIGBrbWVtX2NhY2hlX2Rlc3Ryb3lgIGFuZCBga21lbV9jYWNoZV9zaHJpbmtgIGZvciB0aGlzIHBhcnRpY3VsYXIgY2FzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgwMzIsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTY6MDg6MzIuNTkzNTA0NDc1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTQ4NjU5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJedm9pZCBrbWVtX2NhY2hlX2Rlc3Ryb3lcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc2xhYl9jb21tb24uYz01Mjc9dm9pZCBzbGFiX2ttZW1fY2FjaGVfcmVsZWFzZShzdHJ1Y3Qga21lbV9jYWNoZSAqcylcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmMtNTMzLVxcbm1tL3NsYWJfY29tbW9uLmM6NTM0OnZvaWQga21lbV9jYWNoZV9kZXN0cm95KHN0cnVjdCBrbWVtX2NhY2hlICpzKVxcbm1tL3NsYWJfY29tbW9uLmMtNTM1LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTY6MDg6MzIuNjQyOTk3MTQxWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI0MDUxMjE4NDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFNMVUIgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kLCB5ZWFoLCBga21lbV9jYWNoZV9kZXN0cm95YCBhbmQgYGttZW1fY2FjaGVfc2hyaW5rYCBzZWVtIGxpa2Ugb2J2aW91cyBmdW5jdGlvbnMgdG8gZm9jdXMgb24gZm9yIGZ1enppbmcuIEdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZXMsIEknbGwgYWxzbyBhZGQgYF9fa21lbV9jYWNoZV9zaHJpbmtgLCBgX19rbWVtX2NhY2hlX3NodXRkb3duYCwgYW5kIGBfX2ttZW1fY2FjaGVfZW1wdHlgIHRvIHRoZSBsaXN0LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgY292ZXIgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eS5cblxuTGV0IG1lIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3Mgb2YgdGhpcyBwYXRjaOKApiByaWdodCwgaXQncyBhYm91dCBhZGRpbmcgYHBhcmtlZF9zbGFic2AgdG8gYHN0cnVjdCBrbWVtX2NhY2hlX25vZGVgLiBJdCBhbHNvIGFkZHMgYHVucGFya193b3JrYCwgd2hpY2ggaXMgc2NoZWR1bGVkIHdoZW4gYSBzbGFiIGdldHMgcGFya2VkLiBGcm9tIHdoYXQgSSBjYW4gc2VlLCBzbGFicyBhcmUgZ2V0dGluZyB1bnBhcmtlZCBpbiBgZ2V0X3BhcnRpYWxfbm9kZV9idWxrYCwgYGdldF9mcm9tX3BhcnRpYWxfbm9kZWAsIGBmcmVlX3BhcnRpYWxgLCBhbmQgYF9fa21lbV9jYWNoZV9kb19zaHJpbmtgLiBUaGVuLCBzbGFicyBhcmUgcGFya2VkIGluIGBfX3NsYWJfZnJlZWAgd2hlbiBgbGlzdF9sb2NrYCBpcyBjb250ZW5kZWQuXG5cblRoaXMgaXMgYSBwcmV0dHkgZnVuZGFtZW50YWwgc2hpZnQgaW4gaG93IHRoZSBTTFVCIGFsbG9jYXRvciBvcGVyYXRlcywgYW5kIHRoYXQgbWFrZXMgaXQgcHJpbWUgdGVycml0b3J5IGZvciBmdXp6aW5nLiBJIGRvbid0IHNlZSBhbnkgZGVwZW5kZW5jaWVzIG9uIHNwZWNpZmljIGtlcm5lbCBjb25maWdzLCBzbyB0aGF0J3MgZ29vZC4gU2luY2UgaXQgdG91Y2hlcyB0aGUgY29yZSBTTFVCIGxvZ2ljLCB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggbXkgdGltZS4gTXkgZm9jdXMgd2lsbCBiZSBvbiB0aG9zZSBzeW1ib2xzIEkgbWVudGlvbmVkOiBgX19rbWVtX2NhY2hlX3Nocmlua2AsIGBfX2ttZW1fY2FjaGVfc2h1dGRvd25gLCBgX19rbWVtX2NhY2hlX2VtcHR5YCwgYGttZW1fY2FjaGVfc2hyaW5rYCwgYW5kIGBrbWVtX2NhY2hlX2Rlc3Ryb3lgLlxuXG5BbHJpZ2h0LCBJJ20gY29uZmlkZW50IGluIG15IGFzc2Vzc21lbnQuIEknbGwgbWFrZSBzdXJlIHRvIGNhbGwgYHNldC1yZXN1bHRzYCBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4OTI5LCJPdXRwdXRUb2tlbnMiOjE1OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNjowODo1Ni42OTQyMTkwNTFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODEwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fa21lbV9jYWNoZV9zaHJpbmtcIixcbiAgICBcIl9fa21lbV9jYWNoZV9zaHV0ZG93blwiLFxuICAgIFwiX19rbWVtX2NhY2hlX2VtcHR5XCIsXG4gICAgXCJrbWVtX2NhY2hlX3Nocmlua1wiLFxuICAgIFwia21lbV9jYWNoZV9kZXN0cm95XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGxvY2tsZXNzIHBhcmtpbmcgbWVjaGFuaXNtIGZvciBzbGFicyBpbiB0aGUgU0xVQiBhbGxvY2F0b3IncyBmcmVlIHNsb3dwYXRoIHRvIHJlZHVjZSBsaXN0X2xvY2sgY29udGVudGlvbi4gVGhpcyBpcyBhIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhZmZlY3RzIHNsYWIgYWxsb2NhdGlvbiBhbmQgZnJlZWluZyBsb2dpYy4gSXQgaXMgcmVhY2hhYmxlIGJ5IGRlZmF1bHQgYW5kIHNob3VsZCBiZSBmdXp6ZWQuIFNpbmNlIGFsbG9jYXRpb24gYW5kIGZyZWVpbmcgYXJlIGhvdCBwYXRocywgd2UgZm9jdXMgb24gY2FjaGUgc2hyaW5raW5nIGFuZCBkZXN0cnVjdGlvbiBwYXRocyB3aGljaCBhbHNvIGludGVyYWN0IHdpdGggdGhlIG5ldyB1bnBhcmtpbmcgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19rbWVtX2NhY2hlX3Nocmlua1wiLFxuICAgIFwiX19rbWVtX2NhY2hlX3NodXRkb3duXCIsXG4gICAgXCJfX2ttZW1fY2FjaGVfZW1wdHlcIixcbiAgICBcImttZW1fY2FjaGVfc2hyaW5rXCIsXG4gICAgXCJrbWVtX2NhY2hlX2Rlc3Ryb3lcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbG9ja2xlc3MgcGFya2luZyBtZWNoYW5pc20gZm9yIHNsYWJzIGluIHRoZSBTTFVCIGFsbG9jYXRvcidzIGZyZWUgc2xvd3BhdGggdG8gcmVkdWNlIGxpc3RfbG9jayBjb250ZW50aW9uLiBUaGlzIGlzIGEgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFmZmVjdHMgc2xhYiBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIGxvZ2ljLiBJdCBpcyByZWFjaGFibGUgYnkgZGVmYXVsdCBhbmQgc2hvdWxkIGJlIGZ1enplZC4gU2luY2UgYWxsb2NhdGlvbiBhbmQgZnJlZWluZyBhcmUgaG90IHBhdGhzLCB3ZSBmb2N1cyBvbiBjYWNoZSBzaHJpbmtpbmcgYW5kIGRlc3RydWN0aW9uIHBhdGhzIHdoaWNoIGFsc28gaW50ZXJhY3Qgd2l0aCB0aGUgbmV3IHVucGFya2luZyBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTY6MDg6NTYuNjk0MjUxMjExWiIsIlNlcSI6MjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Mjc4MjAwNDE5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE2OjA4OjU2LjY5NDcwMzI1MVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo2Mjc4MTU0ODI2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGludGVybmFsIFNMVUIgYWxsb2NhdG9yIGxvZ2ljIHRvIGludHJvZHVjZSBhIGxvY2tsZXNzIFxcXCJwYXJraW5nXFxcIiBtZWNoYW5pc20gZm9yIHNsYWJzIHRvIHJlZHVjZSBsb2NrIGNvbnRlbnRpb24gb24gdGhlIG5vZGUncyBsaXN0X2xvY2suIEl0IGFkZHMgYW4gbGxpc3QgZm9yIHBhcmtlZCBzbGFicyBhbmQgZGVsYXllZCB3b3JrIHRvIHVucGFyayB0aGVtLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBpbnRlcm5hbCBtZW1vcnkgbWFuYWdlbWVudCBzdHJ1Y3R1cmVzIChzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlLCBzdHJ1Y3Qgc2xhYikgYW5kIGZyZWVsaXN0IG9wZXJhdGlvbnMuIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBtYW5pZmVzdCBhcyBsaXN0IGNvcnJ1cHRpb25zLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIG9yIGNvbmN1cnJlbmN5IGlzc3VlcyAocmFjZSBjb25kaXRpb25zKS4gVGhlc2UgdHlwZXMgb2YgYnVncyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4sIHNsdWJfZGVidWcsIGxpc3QgZGVidWdnaW5nLCBhbmQgTE9DS0RFUC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWx0ZXIgbWVtb3J5IGluaXRpYWxpemF0aW9uIG9yIGJvdW5kcyBjaGVja2luZyBpbiBhIHdheSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBjYXVzZSBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNWJiZThiZjIxMWZkNzBiZjJjYWEyOWViMzdmNzJkYjNkNjk2NDQ0NFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDI0IDE1OjQ3OjA1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vc2x1Yi5jIGIvbW0vc2x1Yi5jXG5pbmRleCBiMGNkMDU3MmUyZjI2Li4yN2E3OGQ2M2Y1Mzc2IDEwMDY0NFxuLS0tIGEvbW0vc2x1Yi5jXG4rKysgYi9tbS9zbHViLmNcbkBAIC00OSw2ICs0OSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc29ydC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaXJxX3dvcmsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2twcm9iZXMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xsaXN0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWJ1Z2ZzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N0cmFjZS9ldmVudHMva21lbS5oXHUwMDNlXG4gXG5AQCAtMTIyLDYgKzEyMyw4IEBAXG4gICogICAoTm90ZSB0aGF0IHRoZSB0b3RhbCBudW1iZXIgb2Ygc2xhYnMgaXMgYW4gYXRvbWljIHZhbHVlIHRoYXQgbWF5IGJlXG4gICogICBtb2RpZmllZCB3aXRob3V0IHRha2luZyB0aGUgbGlzdCBsb2NrKS5cbiAgKlxuKyAqICAgU2xhYnMgbWF5IGJlIHB1c2hlZCB0byBub2RlLVx1MDAzZXBhcmtlZF9zbGFicyB3aXRob3V0IGFjcXVpcmluZyBsaXN0X2xvY2suXG4rICpcbiAgKiAgIFRoZSBsaXN0X2xvY2sgaXMgYSBjZW50cmFsaXplZCBsb2NrIGFuZCB0aHVzIHdlIGF2b2lkIHRha2luZyBpdCBhc1xuICAqICAgbXVjaCBhcyBwb3NzaWJsZS4gQXMgbG9uZyBhcyBTTFVCIGRvZXMgbm90IGhhdmUgdG8gaGFuZGxlIHBhcnRpYWxcbiAgKiAgIHNsYWJzLCBvcGVyYXRpb25zIGNhbiBjb250aW51ZSB3aXRob3V0IGFueSBjZW50cmFsaXplZCBsb2NrLlxuQEAgLTM2OCw2ICszNzEsOSBAQCBlbnVtIHN0YXRfaXRlbSB7XG4gXHRGUkVFX1NMT1dQQVRILFx0XHQvKiBGcmVlIHRvIGEgc2xhYiAqL1xuIFx0RlJFRV9BRERfUEFSVElBTCxcdC8qIEZyZWVpbmcgbW92ZXMgc2xhYiB0byBwYXJ0aWFsIGxpc3QgKi9cbiBcdEZSRUVfUkVNT1ZFX1BBUlRJQUwsXHQvKiBGcmVlaW5nIHJlbW92ZXMgbGFzdCBvYmplY3QgKi9cbitcdFBBUktfU0xBQixcdFx0LyogU2xhYnMgcGFya2VkIG9udG8gdGhlIGxsaXN0IGJ5IGZyZWUgc2xvd3BhdGggKi9cbitcdFVOUEFSS19TTEFCLFx0XHQvKiBTbGFicyB1bnBhcmtlZCBmcm9tIHRoZSBsbGlzdCAqL1xuK1x0VU5QQVJLX0VWRU5ULFx0XHQvKiBVbnBhcmsgZXZlbnRzICovXG4gXHRBTExPQ19TTEFCLFx0XHQvKiBOZXcgc2xhYiBhY3F1aXJlZCBmcm9tIHBhZ2UgYWxsb2NhdG9yICovXG4gXHRBTExPQ19OT0RFX01JU01BVENILFx0LyogUmVxdWVzdGVkIG5vZGUgZGlmZmVyZW50IGZyb20gY3B1IHNoZWFmICovXG4gXHRGUkVFX1NMQUIsXHRcdC8qIFNsYWIgZnJlZWQgdG8gdGhlIHBhZ2UgYWxsb2NhdG9yICovXG5AQCAtNDYyLDYgKzQ2OCwxNCBAQCBzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlIHtcbiBcdGF0b21pY19sb25nX3QgdG90YWxfb2JqZWN0cztcbiBcdHN0cnVjdCBsaXN0X2hlYWQgZnVsbDtcbiAjZW5kaWZcbitcdC8qXG4rXHQgKiBJZiBuZWl0aGVyIHNoZWFmIHJlZmlsbCBub3IgdGhlIGFsbG9jIHNsb3dwYXRoIHBlcmZvcm1zIHRoZSB1bnBhcmssXG4rXHQgKiB1bnBhcmtfd29ya19mbiB0YWtlcyBjYXJlIG9mIGl0LlxuK1x0ICovXG4rXHRzdHJ1Y3QgZGVsYXllZF93b3JrIHVucGFya193b3JrO1xuK1xuK1x0LyogVXNlZCB0byBsaW5rIHBhcmtlZCBzbGFicyAqL1xuK1x0c3RydWN0IGxsaXN0X2hlYWQgcGFya2VkX3NsYWJzIF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7XG4gfTtcbiBcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBrbWVtX2NhY2hlX25vZGUgKmdldF9ub2RlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBpbnQgbm9kZSlcbkBAIC01MDksNiArNTIzLDEyIEBAIHN0YXRpYyBub2RlbWFza190IHNsYWJfYmFybl9ub2RlcztcbiAgKi9cbiBzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmZsdXNod3E7XG4gXG4rLypcbisgKiBDZWlsaW5nIG9uIGhvdyBsb25nIHNsYWJzIHN0YXkgcGFya2VkIHdoZW4gbm8gc2hlYWYgcmVmaWxsIG9yIGFsbG9jXG4rICogc2xvd3BhdGggdW5wYXJrcyB0aGVtLlxuKyAqL1xuKyNkZWZpbmUgVU5QQVJLX0RFTEFZXHQoSFopXG4rXG4gc3RydWN0IHNsdWJfZmx1c2hfd29yayB7XG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yaztcbiBcdHN0cnVjdCBrbWVtX2NhY2hlICpzO1xuQEAgLTM2MjMsNiArMzY0MywxMjIgQEAgc3RhdGljIGlubGluZSB2b2lkIHJlbW92ZV9wYXJ0aWFsKHN0cnVjdCBrbWVtX2NhY2hlX25vZGUgKm4sXG4gXHRjbGVhcl9ub2RlX3BhcnRpYWxfc3RhdGUobiwgc2xhYik7XG4gfVxuIFxuKy8qXG4rICogQSBzbGFiIHBhcmtlZCBvbiBuLVx1MDAzZXBhcmtlZF9zbGFicyBpcyBub3Qgb24gcGFydGlhbCBsaXN0LCBzbyBpdHMgc2xhYl9saXN0IGlzXG4rICogZnJlZSBhbmQgd2UgcmV1c2UgaXQgYXMgdGhlIGxsaXN0X25vZGUuXG4rICovXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgbGxpc3Rfbm9kZSAqc2xhYl90b19wYXJrZWRfbGxub2RlKHN0cnVjdCBzbGFiICpzbGFiKVxuK3tcbitcdHJldHVybiAoc3RydWN0IGxsaXN0X25vZGUgKilcdTAwMjZzbGFiLVx1MDAzZXNsYWJfbGlzdDtcbit9XG4rXG4rc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2xhYiAqcGFya2VkX2xsbm9kZV90b19zbGFiKHN0cnVjdCBsbGlzdF9ub2RlICpub2RlKVxuK3tcbitcdHJldHVybiBjb250YWluZXJfb2YoKHN0cnVjdCBsaXN0X2hlYWQgKilub2RlLCBzdHJ1Y3Qgc2xhYiwgc2xhYl9saXN0KTtcbit9XG4rXG4rLypcbisgKiBNb3ZlIHNsYWJzIHBhcmtlZCBvbiBuLVx1MDAzZXBhcmtlZF9zbGFicyB0byBuLVx1MDAzZXBhcnRpYWwuIENhbGxlZCB3aXRoIHRoZVxuKyAqIGxpc3RfbG9jayBoZWxkLCBieSB0aGUgcGF0aHMgdGhhdCBjb25zdW1lIHRoZSBwYXJ0aWFsIGxpc3QsIG9uIGJlaGFsZiBvZiB0aGVcbisgKiBjcHVzIHRoYXQgY291bGQgbm90IGdldCB0aGUgbG9jayB3aGVuIHBhcmtpbmcuXG4rICpcbisgKiBJZiBAZGlzY2FyZCBpcyBub3QgTlVMTCwgcHV0IGVtcHR5IHNsYWJzIGJleW9uZCBtaW5fcGFydGlhbCBvbiBAZGlzY2FyZCwgdGhlXG4rICogY2FsbGVyIHNob3VsZCBjYWxsIGRpc2NhcmRfc2xhYigpIGFmdGVyIGRyb3BwaW5nIHRoZSBsb2NrLiAgQ2FsbGVycyB0aGF0IG1heVxuKyAqIG5vdCBmcmVlIHBhZ2VzIGluIHRoZWlyIGNvbnRleHQgc2hvdWxkIHBhc3MgTlVMTC5cbisgKi9cbitzdGF0aWMgdm9pZCB1bnBhcmtfc2xhYnMoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBrbWVtX2NhY2hlX25vZGUgKm4sXG4rXHRcdFx0IHN0cnVjdCBsaXN0X2hlYWQgKmRpc2NhcmQpXG4re1xuK1x0c3RydWN0IGxsaXN0X25vZGUgKnBvcywgKm5leHQ7XG4rXHR1bnNpZ25lZCBsb25nIGFkZGVkID0gMCwgZGlzY2FyZGVkID0gMDtcbitcdHVuc2lnbmVkIGxvbmcgaGVhZHJvb20gPSAwO1xuK1x0TElTVF9IRUFEKHRvX2FkZCk7XG4rXG4rXHRzbGFiX2xvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2bi1cdTAwM2VsaXN0X2xvY2spO1xuK1xuK1x0cG9zID0gbGxpc3RfZGVsX2FsbChcdTAwMjZuLVx1MDAzZXBhcmtlZF9zbGFicyk7XG4rXHRpZiAobGlrZWx5KCFwb3MpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHQvKlxuK1x0ICogQ2FsY3VsYXRlIGhvdyBtYW55IG1vcmUgc2xhYnMgdGhlIHBhcnRpYWwgbGlzdCB3YW50cyBiZWZvcmUgaXQgaGFzXG4rXHQgKiByZWFjaGVkIG1pbl9wYXJ0aWFsLlxuK1x0ICovXG4rXHRpZiAocy1cdTAwM2VtaW5fcGFydGlhbCBcdTAwM2Ugbi1cdTAwM2Vucl9wYXJ0aWFsKVxuK1x0XHRoZWFkcm9vbSA9IHMtXHUwMDNlbWluX3BhcnRpYWwgLSBuLVx1MDAzZW5yX3BhcnRpYWw7XG4rXG4rXHRmb3IgKDsgcG9zOyBwb3MgPSBuZXh0KSB7XG4rXHRcdHN0cnVjdCBzbGFiICpzbGFiID0gcGFya2VkX2xsbm9kZV90b19zbGFiKHBvcyk7XG4rXHRcdHN0cnVjdCBmcmVlbGlzdF9jb3VudGVycyBmbGM7XG4rXG4rXHRcdC8qXG4rXHRcdCAqIEJhY2sgdXAgdGhlIHBvaW50ZXIsIGJlY2F1c2UgdGhlIGxpc3RfYWRkX3RhaWwoKSBiZWxvd1xuK1x0XHQgKiBvdmVyd3JpdGVzIHRoZSBsbGlzdCBsaW5rYWdlLlxuK1x0XHQgKi9cbitcdFx0bmV4dCA9IHBvcy1cdTAwM2VuZXh0O1xuK1xuK1x0XHRpZiAoZGlzY2FyZCkge1xuK1x0XHRcdGZsYy5jb3VudGVycyA9IGRhdGFfcmFjZShSRUFEX09OQ0Uoc2xhYi1cdTAwM2Vjb3VudGVycykpO1xuK1x0XHRcdGlmICghZmxjLmludXNlIFx1MDAyNlx1MDAyNiBhZGRlZCBcdTAwM2U9IGhlYWRyb29tKSB7XG4rXHRcdFx0XHRsaXN0X2FkZF90YWlsKFx1MDAyNnNsYWItXHUwMDNlc2xhYl9saXN0LCBkaXNjYXJkKTtcbitcdFx0XHRcdGRpc2NhcmRlZCsrO1xuK1x0XHRcdFx0Y29udGludWU7XG4rXHRcdFx0fVxuK1x0XHR9XG4rXG4rXHRcdHNsYWJfc2V0X25vZGVfcGFydGlhbChzbGFiKTtcbitcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZzbGFiLVx1MDAzZXNsYWJfbGlzdCwgXHUwMDI2dG9fYWRkKTtcbitcdFx0YWRkZWQrKztcbitcdH1cbitcbitcdG4tXHUwMDNlbnJfcGFydGlhbCArPSBhZGRlZDtcbitcdGxpc3Rfc3BsaWNlX3RhaWwoXHUwMDI2dG9fYWRkLCBcdTAwMjZuLVx1MDAzZXBhcnRpYWwpO1xuK1xuK1x0c3RhdF9hZGQocywgRlJFRV9BRERfUEFSVElBTCwgYWRkZWQpO1xuK1x0c3RhdF9hZGQocywgVU5QQVJLX1NMQUIsIGFkZGVkICsgZGlzY2FyZGVkKTtcbitcdGlmICh1bmxpa2VseShkaXNjYXJkZWQpKVxuK1x0XHRzdGF0X2FkZChzLCBGUkVFX1NMQUIsIGRpc2NhcmRlZCk7XG4rXHRzdGF0KHMsIFVOUEFSS19FVkVOVCk7XG4rfVxuK1xuKy8qXG4rICogUGFya2VkIHNsYWJzIGFyZSBub3JtYWxseSB1bnBhcmtlZCBieSBzaGVhZiByZWZpbGwgb3IgdGhlIGFsbG9jIHNsb3dwYXRoLCBidXRcbisgKiB3aGVuIHRoZSBzeXN0ZW0gZXhwZXJpZW5jZXMgYSBoZWF2eSBidXJzdCBvZiBmcmVlcywgYWJydXB0bHkgZ29lcyBpZGxlLFxuKyAqIGFuZCBuZWl0aGVyIHNoZWFmIHJlZmlsbCBub3IgdGhlIGFsbG9jIHNsb3dwYXRoIGlzIHJlYWNoZWQsXG4rICogc29tZSBwYXJrZWQgc2xhYnMgbWF5IGJlIGxlZnQgc3RyYW5kZWQgaW4gdGhlIHBhcmtlZCBsbGlzdC4gVGhpcyBmdW5jdGlvblxuKyAqIHNlcnZlcyBhcyBhIGxhc3QtcmVzb3J0IGZhbGxiYWNrLlxuKyAqIFRoaXMgd29yayBpcyBzY2hlZHVsZWQgYnkgdGhlIGxsaXN0X2FkZCgpIHRoYXQgbWFrZXMgdGhlIHBhcmtlZCBsbGlzdCBub24tZW1wdHkuXG4rICovXG4rc3RhdGljIHZvaWQgdW5wYXJrX3dvcmtfZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuK3tcbitcdHN0cnVjdCBrbWVtX2NhY2hlX25vZGUgKm4gPSBjb250YWluZXJfb2YodG9fZGVsYXllZF93b3JrKHdvcmspLFxuK1x0XHRcdFx0XHRcdCBzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlLFxuK1x0XHRcdFx0XHRcdCB1bnBhcmtfd29yayk7XG4rXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqZmlyc3Q7XG4rXHRzdHJ1Y3Qga21lbV9jYWNoZSAqcztcbitcdHN0cnVjdCBzbGFiICpzbGFiLCAqdDtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXHRMSVNUX0hFQUQoZGlzY2FyZCk7XG4rXG4rXHRpZiAobGlrZWx5KGxsaXN0X2VtcHR5KFx1MDAyNm4tXHUwMDNlcGFya2VkX3NsYWJzKSkpXG4rXHRcdHJldHVybjtcbitcbitcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNm4tXHUwMDNlbGlzdF9sb2NrLCBmbGFncyk7XG4rXG4rXHRmaXJzdCA9IFJFQURfT05DRShuLVx1MDAzZXBhcmtlZF9zbGFicy5maXJzdCk7XG4rXHRpZiAodW5saWtlbHkoIWZpcnN0KSkge1xuK1x0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNm4tXHUwMDNlbGlzdF9sb2NrLCBmbGFncyk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcdHMgPSBwYXJrZWRfbGxub2RlX3RvX3NsYWIoZmlyc3QpLVx1MDAzZXNsYWJfY2FjaGU7XG4rXG4rXHR1bnBhcmtfc2xhYnMocywgbiwgXHUwMDI2ZGlzY2FyZCk7XG4rXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNm4tXHUwMDNlbGlzdF9sb2NrLCBmbGFncyk7XG4rXG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2xhYiwgdCwgXHUwMDI2ZGlzY2FyZCwgc2xhYl9saXN0KVxuK1x0XHRkaXNjYXJkX3NsYWIocywgc2xhYik7XG4rfVxuK1xuIC8qXG4gICogQ2FsbGVkIG9ubHkgZm9yIGttZW1fY2FjaGVfZGVidWcoKSBjYWNoZXMgaW5zdGVhZCBvZiByZW1vdmVfcGFydGlhbCgpLCB3aXRoIGFcbiAgKiBzbGFiIGZyb20gdGhlIG4tXHUwMDNlcGFydGlhbCBsaXN0LiBSZW1vdmUgb25seSBhIHNpbmdsZSBvYmplY3QgZnJvbSB0aGUgc2xhYiwgZG9cbkBAIC0zODE4LDkgKzM5NTQsMTMgQEAgc3RhdGljIGJvb2wgZ2V0X3BhcnRpYWxfbm9kZV9idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLFxuIFx0c3RydWN0IHNsYWIgKmZpcnN0ID0gTlVMTCwgKmxhc3QgPSBOVUxMO1xuIFx0dW5zaWduZWQgaW50IHRvdGFsX2ZyZWUgPSAwO1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbitcdExJU1RfSEVBRChkaXNjYXJkKTtcbiBcbi1cdC8qIFJhY3kgY2hlY2sgdG8gYXZvaWQgdGFraW5nIHRoZSBsb2NrIHVubmVjZXNzYXJpbHkuICovXG4tXHRpZiAoIW4gfHwgZGF0YV9yYWNlKCFuLVx1MDAzZW5yX3BhcnRpYWwpKVxuK1x0LypcbitcdCAqIFJhY3kgY2hlY2sgdG8gYXZvaWQgdGFraW5nIHRoZSBsb2NrIHVubmVjZXNzYXJpbHkuXG4rXHQgKiBUaGUgcGFya2VkX3NsYWJzIGxsaXN0IG11c3QgYWxzbyBiZSBhY2NvdW50ZWQgZm9yLlxuK1x0ICovXG4rXHRpZiAoIW4gfHwgKCFkYXRhX3JhY2Uobi1cdTAwM2Vucl9wYXJ0aWFsKSBcdTAwMjZcdTAwMjYgbGxpc3RfZW1wdHkoXHUwMDI2bi1cdTAwM2VwYXJrZWRfc2xhYnMpKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2cGMtXHUwMDNlc2xhYnMpO1xuQEAgLTM4MzAsNiArMzk3MCw5IEBAIHN0YXRpYyBib29sIGdldF9wYXJ0aWFsX25vZGVfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbiBcdGVsc2UgaWYgKCFzcGluX3RyeWxvY2tfaXJxc2F2ZShcdTAwMjZuLVx1MDAzZWxpc3RfbG9jaywgZmxhZ3MpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4rXHQvKiBJZiB0aGVyZSBhcmUgcGFya2VkIHNsYWJzLCBtb3ZlIHRoZW0gdG8gdGhlIHBhcnRpYWwgbGlzdCBmaXJzdC4gKi9cbitcdHVucGFya19zbGFicyhzLCBuLCBhbGxvd19zcGluID8gXHUwMDI2ZGlzY2FyZCA6IE5VTEwpO1xuK1xuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNsYWIsIHNsYWIyLCBcdTAwMjZuLVx1MDAzZXBhcnRpYWwsIHNsYWJfbGlzdCkge1xuIFx0XHRzdHJ1Y3QgZnJlZWxpc3RfY291bnRlcnMgZmxjO1xuIFx0XHR1bnNpZ25lZCBpbnQgc2xhYl9mcmVlO1xuQEAgLTM4NzQsNiArNDAxNywxMCBAQCBzdGF0aWMgYm9vbCBnZXRfcGFydGlhbF9ub2RlX2J1bGsoc3RydWN0IGttZW1fY2FjaGUgKnMsXG4gXHRcdFx0XHQgICAgXHUwMDI2bGFzdC1cdTAwM2VzbGFiX2xpc3QpO1xuIFxuIFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZuLVx1MDAzZWxpc3RfbG9jaywgZmxhZ3MpO1xuK1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNsYWIsIHNsYWIyLCBcdTAwMjZkaXNjYXJkLCBzbGFiX2xpc3QpXG4rXHRcdGRpc2NhcmRfc2xhYihzLCBzbGFiKTtcbitcbiBcdHJldHVybiB0b3RhbF9mcmVlIFx1MDAzZSAwO1xuIH1cbiBcbkBAIC0zODg1LDIzICs0MDMyLDI5IEBAIHN0YXRpYyB2b2lkICpnZXRfZnJvbV9wYXJ0aWFsX25vZGUoc3RydWN0IGttZW1fY2FjaGUgKnMsXG4gXHRcdFx0XHQgICBnZnBfdCBnZnBfZmxhZ3MsXG4gXHRcdFx0XHQgICBjb25zdCBzdHJ1Y3Qgc2xhYl9hbGxvY19jb250ZXh0ICphYylcbiB7XG4rXHRib29sIGFsbG93X3NwaW4gPSBhbGxvY19mbGFnc19hbGxvd19zcGlubmluZyhhYy1cdTAwM2VhbGxvY19mbGFncyk7XG4gXHRzdHJ1Y3Qgc2xhYiAqc2xhYiwgKnNsYWIyO1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdHZvaWQgKm9iamVjdCA9IE5VTEw7XG4rXHRMSVNUX0hFQUQoZGlzY2FyZCk7XG4gXG4gXHQvKlxuIFx0ICogUmFjeSBjaGVjay4gSWYgd2UgbWlzdGFrZW5seSBzZWUgbm8gcGFydGlhbCBzbGFicyB0aGVuIHdlXG4gXHQgKiBqdXN0IGFsbG9jYXRlIGFuIGVtcHR5IHNsYWIuIElmIHdlIG1pc3Rha2VubHkgdHJ5IHRvIGdldCBhXG4gXHQgKiBwYXJ0aWFsIHNsYWIgYW5kIHRoZXJlIGlzIG5vbmUgYXZhaWxhYmxlIHRoZW4gZ2V0X2Zyb21fcGFydGlhbCgpXG4tXHQgKiB3aWxsIHJldHVybiBOVUxMLlxuK1x0ICogd2lsbCByZXR1cm4gTlVMTC4gQWxzbyB0YWtlIHRoZSBwYXJrZWRfc2xhYnMgbGxpc3QgaW50byBhY2NvdW50LlxuIFx0ICovXG4tXHRpZiAoIW4gfHwgIW4tXHUwMDNlbnJfcGFydGlhbClcbitcdGlmICghbiB8fCAoIWRhdGFfcmFjZShuLVx1MDAzZW5yX3BhcnRpYWwpIFx1MDAyNlx1MDAyNiBsbGlzdF9lbXB0eShcdTAwMjZuLVx1MDAzZXBhcmtlZF9zbGFicykpKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbi1cdGlmIChhbGxvY19mbGFnc19hbGxvd19zcGlubmluZyhhYy1cdTAwM2VhbGxvY19mbGFncykpXG4rXHRpZiAoYWxsb3dfc3BpbilcbiBcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2bi1cdTAwM2VsaXN0X2xvY2ssIGZsYWdzKTtcbiBcdGVsc2UgaWYgKCFzcGluX3RyeWxvY2tfaXJxc2F2ZShcdTAwMjZuLVx1MDAzZWxpc3RfbG9jaywgZmxhZ3MpKVxuIFx0XHRyZXR1cm4gTlVMTDtcbitcbitcdC8qIElmIHRoZXJlIGFyZSBwYXJrZWQgc2xhYnMsIG1vdmUgdGhlbSB0byB0aGUgcGFydGlhbCBsaXN0IGZpcnN0LiAqL1xuK1x0dW5wYXJrX3NsYWJzKHMsIG4sIGFsbG93X3NwaW4gPyBcdTAwMjZkaXNjYXJkIDogTlVMTCk7XG4rXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2xhYiwgc2xhYjIsIFx1MDAyNm4tXHUwMDNlcGFydGlhbCwgc2xhYl9saXN0KSB7XG4gXG4gXHRcdHN0cnVjdCBmcmVlbGlzdF9jb3VudGVycyBvbGQsIG5ldztcbkBAIC0zOTM5LDYgKzQwOTIsMTAgQEAgc3RhdGljIHZvaWQgKmdldF9mcm9tX3BhcnRpYWxfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbiBcdFx0YnJlYWs7XG4gXHR9XG4gXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNm4tXHUwMDNlbGlzdF9sb2NrLCBmbGFncyk7XG4rXG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2xhYiwgc2xhYjIsIFx1MDAyNmRpc2NhcmQsIHNsYWJfbGlzdClcbitcdFx0ZGlzY2FyZF9zbGFiKHMsIHNsYWIpO1xuK1xuIFx0cmV0dXJuIG9iamVjdDtcbiB9XG4gXG5AQCAtMzk5NCw4ICs0MTUxLDEzIEBAIHN0YXRpYyB2b2lkICpnZXRfZnJvbV9hbnlfcGFydGlhbChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwX2ZsYWdzLFxuIFxuIFx0XHRcdG4gPSBnZXRfbm9kZShzLCB6b25lX3RvX25pZCh6b25lKSk7XG4gXG4rXHRcdFx0LypcbitcdFx0XHQgKiBQYXJrZWQgc2xhYnMgbWFrZSB0aGUgbm9kZSB3b3J0aCB2aXNpdGluZyBldmVuIGlmXG4rXHRcdFx0ICogbnJfcGFydGlhbCBsb29rcyBsb3cuXG4rXHRcdFx0ICovXG4gXHRcdFx0aWYgKG4gXHUwMDI2XHUwMDI2IGNwdXNldF96b25lX2FsbG93ZWQoem9uZSwgZ2ZwX2ZsYWdzKSBcdTAwMjZcdTAwMjZcbi1cdFx0XHRcdFx0bi1cdTAwM2Vucl9wYXJ0aWFsIFx1MDAzZSBzLVx1MDAzZW1pbl9wYXJ0aWFsKSB7XG4rXHRcdFx0XHRcdChuLVx1MDAzZW5yX3BhcnRpYWwgXHUwMDNlIHMtXHUwMDNlbWluX3BhcnRpYWwgfHxcbitcdFx0XHRcdFx0ICFsbGlzdF9lbXB0eShcdTAwMjZuLVx1MDAzZXBhcmtlZF9zbGFicykpKSB7XG4gXG4gXHRcdFx0XHR2b2lkICpvYmplY3QgPSBnZXRfZnJvbV9wYXJ0aWFsX25vZGUocywgbixcbiBcdFx0XHRcdFx0XHRcdFx0Z2ZwX2ZsYWdzLCBhYyk7XG5AQCAtNTcxOSw3ICs1ODgxLDcgQEAgc3RhdGljIHZvaWQgX19zbGFiX2ZyZWUoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLFxuIFx0XHRcdHVuc2lnbmVkIGxvbmcgYWRkcilcbiBcbiB7XG4tXHRib29sIHdhc19mdWxsO1xuK1x0Ym9vbCB3YXNfZnVsbCwgcGFyayA9IGZhbHNlO1xuIFx0c3RydWN0IGZyZWVsaXN0X2NvdW50ZXJzIG9sZCwgbmV3O1xuIFx0c3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbiA9IE5VTEw7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuQEAgLTU3MzEsMTAgKzU4OTMsMTEgQEAgc3RhdGljIHZvaWQgX19zbGFiX2ZyZWUoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLFxuIFx0fVxuIFxuIFx0ZG8ge1xuLVx0XHRpZiAodW5saWtlbHkobikpIHtcbitcdFx0aWYgKHVubGlrZWx5KG4gXHUwMDI2XHUwMDI2ICFwYXJrKSlcbiBcdFx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNm4tXHUwMDNlbGlzdF9sb2NrLCBmbGFncyk7XG4tXHRcdFx0biA9IE5VTEw7XG4tXHRcdH1cbitcbitcdFx0cGFyayA9IGZhbHNlO1xuK1x0XHRuID0gTlVMTDtcbiBcbiBcdFx0b2xkLmZyZWVsaXN0ID0gc2xhYi1cdTAwM2VmcmVlbGlzdDtcbiBcdFx0b2xkLmNvdW50ZXJzID0gc2xhYi1cdTAwM2Vjb3VudGVycztcbkBAIC01NzQ4LDc2ICs1OTExLDExNCBAQCBzdGF0aWMgdm9pZCBfX3NsYWJfZnJlZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsXG4gXHRcdG5ldy5pbnVzZSAtPSBjbnQ7XG4gXG4gXHRcdC8qXG4tXHRcdCAqIE1pZ2h0IG5lZWQgdG8gYmUgdGFrZW4gb2ZmIChkdWUgdG8gYmVjb21pbmcgZW1wdHkpIG9yIGFkZGVkXG4tXHRcdCAqIHRvIChkdWUgdG8gbm90IGJlaW5nIGZ1bGwgYW55bW9yZSkgdGhlIHBhcnRpYWwgbGlzdC5cbi1cdFx0ICogVW5sZXNzIGl0J3MgZnJvemVuLlxuK1x0XHQgKiBwYXJ0aWFsLVx1MDAzZXBhcnRpYWw6IHRoZSBzbGFiIHdhcyBvbiB0aGUgbm9kZSBwYXJ0aWFsIGxpc3QgYW5kXG4rXHRcdCAqIHdpbGwgc3RpbGwgc3RheSB0aGVyZSwgc28gd2UgbmVlZCBubyBsaXN0IGhhbmRsaW5nIGFuZCBub1xuK1x0XHQgKiBsaXN0X2xvY2suXG4rXHRcdCAqXG4rXHRcdCAqIE5vdGUgdGhhdCBcImNvbnRpbnVlO1wiIGluIGEgZG8td2hpbGUgZ29lcyBvbiB0byBldmFsdWF0ZSB0aGVcbitcdFx0ICogY29uZGl0aW9uIGJlbG93LCBzbyB3ZSBkbyBwZXJmb3JtIHRoZSBmcmVlbGlzdCB1cGRhdGUuXG4gXHRcdCAqL1xuLVx0XHRpZiAoIW5ldy5pbnVzZSB8fCB3YXNfZnVsbCkge1xuK1x0XHRpZiAoIXdhc19mdWxsIFx1MDAyNlx1MDAyNiBuZXcuaW51c2UpXG4rXHRcdFx0Y29udGludWU7XG4gXG4tXHRcdFx0biA9IGdldF9ub2RlKHMsIHNsYWJfbmlkKHNsYWIpKTtcbitcdFx0LypcbitcdFx0ICogVGhlIHNsYWIgbWlnaHQgbmVlZCB0byBiZSB0YWtlbiBvZmYgKGR1ZSB0byBiZWNvbWluZyBlbXB0eSlcbitcdFx0ICogb3IgYWRkZWQgdG8gKGR1ZSB0byBub3QgYmVpbmcgZnVsbCBhbnltb3JlKSB0aGUgcGFydGlhbFxuK1x0XHQgKiBsaXN0LlxuK1x0XHQgKlxuK1x0XHQgKiBGb3IgdGhlIGZ1bGwgLVx1MDAzZSBwYXJ0aWFsL2VtcHR5IHRyYW5zaXRpb24sIHVzZVxuK1x0XHQgKiBzcGluX3RyeWxvY2tfaXJxc2F2ZSgpIGFuZCB0aGUgcGFya2luZyBtZWNoYW5pc20gdG8gcmVkdWNlXG4rXHRcdCAqIGxvY2sgY29udGVudGlvbi5cbitcdFx0ICpcbitcdFx0ICogSWYgdGhlIGNtcHhjaGcgZG9lcyBub3Qgc3VjY2VlZCB0aGVuIHdlIHdpbGwgcmV0cnkuXG4rXHRcdCAqL1xuK1x0XHRuID0gZ2V0X25vZGUocywgc2xhYl9uaWQoc2xhYikpO1xuK1xuK1x0XHRpZiAoIXdhc19mdWxsKSB7XG4gXHRcdFx0Lypcbi1cdFx0XHQgKiBTcGVjdWxhdGl2ZWx5IGFjcXVpcmUgdGhlIGxpc3RfbG9jay5cbi1cdFx0XHQgKiBJZiB0aGUgY21weGNoZyBkb2VzIG5vdCBzdWNjZWVkIHRoZW4gd2UgbWF5XG4tXHRcdFx0ICogZHJvcCB0aGUgbGlzdF9sb2NrIHdpdGhvdXQgYW55IHByb2Nlc3NpbmcuXG4tXHRcdFx0ICpcbi1cdFx0XHQgKiBPdGhlcndpc2UgdGhlIGxpc3RfbG9jayB3aWxsIHN5bmNocm9uaXplIHdpdGhcbi1cdFx0XHQgKiBvdGhlciBwcm9jZXNzb3JzIHVwZGF0aW5nIHRoZSBsaXN0IG9mIHNsYWJzLlxuK1x0XHRcdCAqIHBhcnRpYWwtXHUwMDNlZW1wdHk6IHNwZWN1bGF0aXZlbHkgYWNxdWlyZSBsaXN0X2xvY2tcbitcdFx0XHQgKiBwcmlvciB0byBjbXB4Y2hnKCksIGFzIHBlcmZvcm1pbmcgY21weGNoZygpIGJlZm9yZVxuK1x0XHRcdCAqIGxvY2sgYWNxdWlzaXRpb24gcmFjZXMgd2l0aCBjb25jdXJyZW50IG9wZXJhdGlvbnNcbitcdFx0XHQgKiAoZS5nLiwgdGhlIHNocmlua2VyKS5cbiBcdFx0XHQgKi9cbiBcdFx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZuLVx1MDAzZWxpc3RfbG9jaywgZmxhZ3MpO1xuLVxuLVx0XHRcdG9uX25vZGVfcGFydGlhbCA9IHNsYWJfdGVzdF9ub2RlX3BhcnRpYWwoc2xhYik7XG4rXHRcdH0gZWxzZSBpZiAoIXNwaW5fdHJ5bG9ja19pcnFzYXZlKFx1MDAyNm4tXHUwMDNlbGlzdF9sb2NrLCBmbGFncykpIHtcbitcdFx0XHQvKlxuK1x0XHRcdCAqIGZ1bGwtXHUwMDNlcGFydGlhbC9lbXB0eTogdGhlIHNsYWIgaXMgZnVsbCwgc28gaXQgaXMgb25cbitcdFx0XHQgKiBubyBsaXN0OyBpZiB0aGUgbGlzdF9sb2NrIGlzIGNvbnRlbmRlZCwgdGhlbiB3ZVxuK1x0XHRcdCAqIHBhcmsgdGhlIHNsYWIgd2l0aG91dCB3YWl0aW5nIGZvciB0aGUgbG9jay5cbitcdFx0XHQgKi9cbitcdFx0XHRwYXJrID0gdHJ1ZTtcbiBcdFx0fVxuIFxuIFx0fSB3aGlsZSAoIXNsYWJfdXBkYXRlX2ZyZWVsaXN0KHMsIHNsYWIsIFx1MDAyNm9sZCwgXHUwMDI2bmV3LCBcIl9fc2xhYl9mcmVlXCIpKTtcbiBcbi1cdGlmIChsaWtlbHkoIW4pKSB7XG4tXHRcdC8qXG4tXHRcdCAqIFdlIGRpZG4ndCB0YWtlIHRoZSBsaXN0X2xvY2sgYmVjYXVzZSB0aGUgc2xhYiB3YXMgYWxyZWFkeSBvblxuLVx0XHQgKiB0aGUgcGFydGlhbCBsaXN0IGFuZCB3aWxsIHJlbWFpbiB0aGVyZS5cbi1cdFx0ICovXG4rXHQvKiBwYXJ0aWFsLVx1MDAzZXBhcnRpYWw6IHdlIGRpZG4ndCB0YWtlIHRoZSBsaXN0X2xvY2suICovXG4rXHRpZiAobGlrZWx5KCFuKSlcbiBcdFx0cmV0dXJuO1xuLVx0fVxuIFxuIFx0Lypcbi1cdCAqIFRoaXMgc2xhYiB3YXMgcGFydGlhbGx5IGVtcHR5IGJ1dCBub3Qgb24gdGhlIHBlci1ub2RlIHBhcnRpYWwgbGlzdCxcbi1cdCAqIGluIHdoaWNoIGNhc2Ugd2Ugc2hvdWxkbid0IG1hbmlwdWxhdGUgaXRzIGxpc3QsIGp1c3QgcmV0dXJuLlxuK1x0ICogUGFyayB0aGUgc2xhYi4gSWYgdGhpcyBwYXJrIG1ha2VzIHRoZSBwYXJrZWQgbGxpc3Qgbm9uLWVtcHR5LFxuK1x0ICogdGhlbiBzY2hlZHVsZSB1bnBhcmtfd29yay5cbiBcdCAqL1xuK1x0aWYgKHVubGlrZWx5KHBhcmspKSB7XG4rXHRcdGlmIChsbGlzdF9hZGQoc2xhYl90b19wYXJrZWRfbGxub2RlKHNsYWIpLCBcdTAwMjZuLVx1MDAzZXBhcmtlZF9zbGFicykpXG4rXHRcdFx0cXVldWVfZGVsYXllZF93b3JrKGZsdXNod3EsIFx1MDAyNm4tXHUwMDNldW5wYXJrX3dvcmssXG4rXHRcdFx0XHRcdCAgIFVOUEFSS19ERUxBWSk7XG4rXHRcdHN0YXQocywgUEFSS19TTEFCKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0b25fbm9kZV9wYXJ0aWFsID0gc2xhYl90ZXN0X25vZGVfcGFydGlhbChzbGFiKTtcbitcbiBcdGlmICghd2FzX2Z1bGwgXHUwMDI2XHUwMDI2ICFvbl9ub2RlX3BhcnRpYWwpIHtcbitcdFx0LypcbitcdFx0ICogcGFydGlhbC1cdTAwM2VlbXB0eSwgb2ZmbGlzdDogdGhlIHNsYWIgaGFzIGJlZW4gdGFrZW4gb2ZmIHRoZVxuK1x0XHQgKiBwYXJ0aWFsIGxpc3QgYnkgYSBidWxrIHJlZmlsbCwgb3IgcGFya2VkIGR1cmluZyBpdHMgZnVsbCAtXHUwMDNlXG4rXHRcdCAqIHBhcnRpYWwvZW1wdHkgdHJhbnNpdGlvbi4gSXQgd2lsbCBiZSBwdXQgYmFjayBieSBvdGhlciBwYXRocyxcbitcdFx0ICogc28gdGhpcyBzbGFiJ3MgbGlzdCBoYW5kbGluZyBpcyBub3Qgb3VycyB0byBkby5cbitcdFx0ICovXG4gXHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2bi1cdTAwM2VsaXN0X2xvY2ssIGZsYWdzKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuIFx0Lypcbi1cdCAqIElmIHNsYWIgYmVjYW1lIGVtcHR5LCBzaG91bGQgd2UgYWRkL2tlZXAgaXQgb24gdGhlIHBhcnRpYWwgbGlzdCBvciB3ZVxuLVx0ICogaGF2ZSBlbm91Z2g/XG4rXHQgKiBmdWxsL3BhcnRpYWwtXHUwMDNlZW1wdHksIGV4Y2VlZDogd2UgaGF2ZSBlbm91Z2ggcGFydGlhbCBzbGFicyBhbHJlYWR5LlxuK1x0ICpcbitcdCAqIFBhcmtlZCBzbGFicyBhcmUgYWxzbyBjb3VudGVkIGFzIHBhcnRpYWwgc2xhYnMuIFdlIGRvbid0XG4rXHQgKiBrZWVwIGFuIGV4YWN0IGNvdW50IG9mIHBhcmtlZCBzbGFicywgc28gd2UgdHJlYXQgYW55IHBhcmtlZFxuK1x0ICogc2xhYiBhcyByb3VnaGx5IGV4Y2VlZGluZy5cbiBcdCAqL1xuLVx0aWYgKHVubGlrZWx5KCFuZXcuaW51c2UgXHUwMDI2XHUwMDI2IG4tXHUwMDNlbnJfcGFydGlhbCBcdTAwM2U9IHMtXHUwMDNlbWluX3BhcnRpYWwpKVxuLVx0XHRnb3RvIHNsYWJfZW1wdHk7XG4rXHRpZiAodW5saWtlbHkoIW5ldy5pbnVzZSBcdTAwMjZcdTAwMjYgKG4tXHUwMDNlbnJfcGFydGlhbCBcdTAwM2U9IHMtXHUwMDNlbWluX3BhcnRpYWwgfHxcbitcdFx0XHRcdCAgICAhbGxpc3RfZW1wdHkoXHUwMDI2bi1cdTAwM2VwYXJrZWRfc2xhYnMpKSkpIHtcbitcdFx0LyogcGFydGlhbC1cdTAwM2VlbXB0eSwgb25saXN0LCBleGNlZWQgKi9cbitcdFx0aWYgKGxpa2VseSghd2FzX2Z1bGwpKSB7XG4rXHRcdFx0cmVtb3ZlX3BhcnRpYWwobiwgc2xhYik7XG4rXHRcdFx0c3RhdChzLCBGUkVFX1JFTU9WRV9QQVJUSUFMKTtcbitcdFx0fVxuK1x0XHQvKiBlbHNlIGZ1bGwtXHUwMDNlZW1wdHksIGV4Y2VlZDogaXQgaXMgb24gbm8gbGlzdCB0byByZW1vdmUgZnJvbSAqL1xuK1xuK1x0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNm4tXHUwMDNlbGlzdF9sb2NrLCBmbGFncyk7XG4rXHRcdHN0YXQocywgRlJFRV9TTEFCKTtcbitcdFx0ZGlzY2FyZF9zbGFiKHMsIHNsYWIpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4gXG4gXHQvKlxuLVx0ICogT2JqZWN0cyBsZWZ0IGluIHRoZSBzbGFiLiBJZiBpdCB3YXMgbm90IG9uIHRoZSBwYXJ0aWFsIGxpc3QgYmVmb3JlXG4tXHQgKiB0aGVuIGFkZCBpdC5cbitcdCAqIEF0IHRoaXMgcG9pbnQsIG9ubHkgdGhyZWUgY2FzZXMgcmVtYWluOlxuK1x0ICogICBmdWxsLVx1MDAzZXBhcnRpYWxcbitcdCAqICAgZnVsbC1cdTAwM2VlbXB0eSwgbm90IGV4Y2VlZFxuK1x0ICogICBwYXJ0aWFsLVx1MDAzZWVtcHR5LCBvbmxpc3QsIG5vdCBleGNlZWRcbiBcdCAqL1xuK1xuK1x0LyogZnVsbC1cdTAwM2VwYXJ0aWFsOyBmdWxsLVx1MDAzZWVtcHR5LCBub3QgZXhjZWVkICovXG4gXHRpZiAodW5saWtlbHkod2FzX2Z1bGwpKSB7XG4gXHRcdGFkZF9wYXJ0aWFsKG4sIHNsYWIsIEFERF9UT19UQUlMKTtcbiBcdFx0c3RhdChzLCBGUkVFX0FERF9QQVJUSUFMKTtcbiBcdH1cbi1cdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2bi1cdTAwM2VsaXN0X2xvY2ssIGZsYWdzKTtcbi1cdHJldHVybjtcbi1cbi1zbGFiX2VtcHR5OlxuLVx0Lypcbi1cdCAqIFRoZSBzbGFiIGNvdWxkIGhhdmUgYSBzaW5nbGUgb2JqZWN0IGFuZCB0aHVzIGdvIGZyb20gZnVsbCB0byBlbXB0eSBpblxuLVx0ICogYSBzaW5nbGUgZnJlZSwgYnV0IG1vcmUgbGlrZWx5IGl0IHdhcyBvbiB0aGUgcGFydGlhbCBsaXN0LiBSZW1vdmUgaXQuXG4tXHQgKi9cbi1cdGlmIChsaWtlbHkoIXdhc19mdWxsKSkge1xuLVx0XHRyZW1vdmVfcGFydGlhbChuLCBzbGFiKTtcbi1cdFx0c3RhdChzLCBGUkVFX1JFTU9WRV9QQVJUSUFMKTtcbi1cdH1cbitcdC8qIGVsc2UgcGFydGlhbC1cdTAwM2VlbXB0eSwgb25saXN0LCBub3QgZXhjZWVkOiBpdCBzdGF5cyBvbiBwYXJ0aWFsIGxpc3QgKi9cbiBcbiBcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2bi1cdTAwM2VsaXN0X2xvY2ssIGZsYWdzKTtcbi1cdHN0YXQocywgRlJFRV9TTEFCKTtcbi1cdGRpc2NhcmRfc2xhYihzLCBzbGFiKTtcbiB9XG4gXG4gLypcbkBAIC03MzU3LDggKzc1NTgsMTMgQEAgX19yZWZpbGxfb2JqZWN0c19hbnkoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKipwLCBnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBtaW5cbiBcbiBcdFx0XHRuID0gZ2V0X25vZGUocywgem9uZV90b19uaWQoem9uZSkpO1xuIFxuK1x0XHRcdC8qXG4rXHRcdFx0ICogUGFya2VkIHNsYWJzIG1ha2UgdGhlIG5vZGUgd29ydGggdHJ5aW5nXG4rXHRcdFx0ICogZXZlbiBpZiBucl9wYXJ0aWFsIGxvb2tzIGxvdy5cbitcdFx0XHQgKi9cbiBcdFx0XHRpZiAoIW4gfHwgIWNwdXNldF96b25lX2FsbG93ZWQoem9uZSwgZ2ZwKSB8fFxuLVx0XHRcdFx0XHRuLVx1MDAzZW5yX3BhcnRpYWwgXHUwMDNjPSBzLVx1MDAzZW1pbl9wYXJ0aWFsKVxuK1x0XHRcdFx0XHQobi1cdTAwM2Vucl9wYXJ0aWFsIFx1MDAzYz0gcy1cdTAwM2VtaW5fcGFydGlhbCBcdTAwMjZcdTAwMjZcbitcdFx0XHRcdFx0IGxsaXN0X2VtcHR5KFx1MDAyNm4tXHUwMDNlcGFya2VkX3NsYWJzKSkpXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0XHRyID0gX19yZWZpbGxfb2JqZWN0c19ub2RlKHMsIHAsIGdmcCwgbWluLCBtYXgsIG4sXG5AQCAtNzY3OSw2ICs3ODg1LDggQEAgaW5pdF9rbWVtX2NhY2hlX25vZGUoc3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbilcbiBcdG4tXHUwMDNlbnJfcGFydGlhbCA9IDA7XG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZuLVx1MDAzZWxpc3RfbG9jayk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZuLVx1MDAzZXBhcnRpYWwpO1xuK1x0aW5pdF9sbGlzdF9oZWFkKFx1MDAyNm4tXHUwMDNlcGFya2VkX3NsYWJzKTtcbitcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNm4tXHUwMDNldW5wYXJrX3dvcmssIHVucGFya193b3JrX2ZuKTtcbiAjaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcbiBcdGF0b21pY19sb25nX3NldChcdTAwMjZuLVx1MDAzZW5yX3NsYWJzLCAwKTtcbiBcdGF0b21pY19sb25nX3NldChcdTAwMjZuLVx1MDAzZXRvdGFsX29iamVjdHMsIDApO1xuQEAgLTc4MTIsNiArODAyMCw3IEBAIHN0YXRpYyB2b2lkIGZyZWVfa21lbV9jYWNoZV9ub2RlcyhzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbiBcdH1cbiBcbiBcdGZvcl9lYWNoX2ttZW1fY2FjaGVfbm9kZShzLCBub2RlLCBuKSB7XG4rXHRcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcdTAwMjZuLVx1MDAzZXVucGFya193b3JrKTtcbiBcdFx0cy1cdTAwM2VwZXJfbm9kZVtub2RlXS5ub2RlID0gTlVMTDtcbiBcdFx0a21lbV9jYWNoZV9mcmVlKGttZW1fY2FjaGVfbm9kZSwgbik7XG4gXHR9XG5AQCAtODExMiw2ICs4MzIxLDEwIEBAIHN0YXRpYyB2b2lkIGZyZWVfcGFydGlhbChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbilcbiBcbiBcdEJVR19PTihpcnFzX2Rpc2FibGVkKCkpO1xuIFx0c3Bpbl9sb2NrX2lycShcdTAwMjZuLVx1MDAzZWxpc3RfbG9jayk7XG4rXG4rXHQvKiBVbnBhcmsgc2xhYnMgc28gdGhlIHdhbGsgY2FuIGZpbmQgdGhlbS4gKi9cbitcdHVucGFya19zbGFicyhzLCBuLCBOVUxMKTtcbitcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzbGFiLCBoLCBcdTAwMjZuLVx1MDAzZXBhcnRpYWwsIHNsYWJfbGlzdCkge1xuIFx0XHRpZiAoIXNsYWItXHUwMDNlaW51c2UpIHtcbiBcdFx0XHRyZW1vdmVfcGFydGlhbChuLCBzbGFiKTtcbkBAIC04MzgzLDYgKzg1OTYsOSBAQCBzdGF0aWMgaW50IF9fa21lbV9jYWNoZV9kb19zaHJpbmsoc3RydWN0IGttZW1fY2FjaGUgKnMpXG4gXG4gXHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNm4tXHUwMDNlbGlzdF9sb2NrLCBmbGFncyk7XG4gXG4rXHRcdC8qIFBhcmtlZCBzbGFicyBhcmUgc2hyaW5rIGNhbmRpZGF0ZXMgYXMgd2VsbC4gKi9cbitcdFx0dW5wYXJrX3NsYWJzKHMsIG4sIE5VTEwpO1xuK1xuIFx0XHQvKlxuIFx0XHQgKiBCdWlsZCBsaXN0cyBvZiBzbGFicyB0byBkaXNjYXJkIG9yIHByb21vdGUuXG4gXHRcdCAqXG5AQCAtOTUyMiw2ICs5NzM4LDkgQEAgU1RBVF9BVFRSKEZSRUVfRkFTVFBBVEgsIGZyZWVfZmFzdHBhdGgpO1xuIFNUQVRfQVRUUihGUkVFX1NMT1dQQVRILCBmcmVlX3Nsb3dwYXRoKTtcbiBTVEFUX0FUVFIoRlJFRV9BRERfUEFSVElBTCwgZnJlZV9hZGRfcGFydGlhbCk7XG4gU1RBVF9BVFRSKEZSRUVfUkVNT1ZFX1BBUlRJQUwsIGZyZWVfcmVtb3ZlX3BhcnRpYWwpO1xuK1NUQVRfQVRUUihQQVJLX1NMQUIsIHBhcmtfc2xhYik7XG4rU1RBVF9BVFRSKFVOUEFSS19TTEFCLCB1bnBhcmtfc2xhYik7XG4rU1RBVF9BVFRSKFVOUEFSS19FVkVOVCwgdW5wYXJrX2V2ZW50KTtcbiBTVEFUX0FUVFIoQUxMT0NfU0xBQiwgYWxsb2Nfc2xhYik7XG4gU1RBVF9BVFRSKEFMTE9DX05PREVfTUlTTUFUQ0gsIGFsbG9jX25vZGVfbWlzbWF0Y2gpO1xuIFNUQVRfQVRUUihGUkVFX1NMQUIsIGZyZWVfc2xhYik7XG5AQCAtOTYxMCw2ICs5ODI5LDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGUgKmNvbnN0IHNsYWJfYXR0cnNbXSA9IHtcbiBcdFx1MDAyNmZyZWVfc2xvd3BhdGhfYXR0ci5hdHRyLFxuIFx0XHUwMDI2ZnJlZV9hZGRfcGFydGlhbF9hdHRyLmF0dHIsXG4gXHRcdTAwMjZmcmVlX3JlbW92ZV9wYXJ0aWFsX2F0dHIuYXR0cixcbitcdFx1MDAyNnBhcmtfc2xhYl9hdHRyLmF0dHIsXG4rXHRcdTAwMjZ1bnBhcmtfc2xhYl9hdHRyLmF0dHIsXG4rXHRcdTAwMjZ1bnBhcmtfZXZlbnRfYXR0ci5hdHRyLFxuIFx0XHUwMDI2YWxsb2Nfc2xhYl9hdHRyLmF0dHIsXG4gXHRcdTAwMjZhbGxvY19ub2RlX21pc21hdGNoX2F0dHIuYXR0cixcbiBcdFx1MDAyNmZyZWVfc2xhYl9hdHRyLmF0dHIsXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNjowODo1Ni42OTQ3MDM5ODFaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjI3ODE1MjQwODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXBwbGljYWJpbGl0eSBBc3Nlc3NtZW50IGZvciBTTFVCIFNsYWIgUGFya2luZyBPcHRpbWl6YXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgYSBcInBhcmtpbmdcIiBtZWNoYW5pc20gZm9yIHNsYWJzIHdpdGhpbiB0aGUgU0xVQiBhbGxvY2F0b3IuIFNwZWNpZmljYWxseSwgaXQncyBhZGRpbmcgYHBhcmtlZF9zbGFic2AgdG8gYGttZW1fY2FjaGVfbm9kZWAgdG8gaG9sZCBzbGFicyB3aXRob3V0IGxvY2tpbmcuIFRoZSBnb2FsIGlzIHRvIHJlZHVjZSBsb2NrIGNvbnRlbnRpb24gb24gYG4tXHUwMDNlbGlzdF9sb2NrYCBkdXJpbmcgdGhlIHNsYWIgZnJlZWluZyBwcm9jZXNzLlxuXG5NeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXaGVyZSBkb2VzIEtNU0FOIGZpdCBpbj9cIiBUaGlzIGlzIGludGVybmFsIFNMVUIgYWxsb2NhdG9yIGxvZ2ljLiBJdCdzIHRvdWNoaW5nIGZyZWVsaXN0cywgcGFydGlhbCBsaXN0cywgYW5kIHNsYWIgc3RhdGVzIOKAkyBhbGwgdmVyeSBpbnRlcm5hbCBkZXRhaWxzLiBJdCdzIG5vdCBleHBvc2luZyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHRvIHVzZXJzcGFjZSwgYW5kIGl0J3Mgbm90IGNoYW5naW5nIGhvdyBtZW1vcnkgaXMgaW5pdGlhbGl6ZWQgb3IgemVyb2VkLiBObyBuZXcgYm91bmRzIGNoZWNrcyBvciBsZW5ndGggY2FsY3VsYXRpb25zIGFyZSBpbnRyb2R1Y2VkIHRoYXQgY291bGQgbGVhZCB0byBpbmZvcm1hdGlvbiBsZWFrcyB2aWEgdW5pbml0aWFsaXplZCBtZW1vcnkuXG5cblRoZSBsaWtlbHkgYnVncyB3b3VsZCBiZSB0aGluZ3MgbGlrZSB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWVzLCBsaXN0IGNvcnJ1cHRpb24gKGxsaXN0IG9yIGBsaXN0X2hlYWRgIHByb2JsZW1zKSwgbWVtb3J5IGxlYWtzICh1bnBhcmtlZCBzbGFicyksIGFuZCBjb25jdXJyZW5jeSBpc3N1ZXMgKHJhY2VzIGJldHdlZW4gcGFya2luZyBhbmQgdW5wYXJraW5nKS4gTm93LCB0aGUgYmVhdXR5IG9mIHRoaXMgaXMgdGhhdCBLQVNBTiBpcyBwZXJmZWN0bHkgZXF1aXBwZWQgdG8gY2F0Y2ggdGhlIFVBRiBhbmQgZG91YmxlLWZyZWUgaXNzdWVzLCBhbmQgdGhlIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgKGxpc3QgZGVidWdnaW5nLCBsb2NrZGVwLCBzbHViX2RlYnVnKSBhcmUgd2VsbC1zdWl0ZWQgZm9yIHRyYWNraW5nIHRoZSByZXN0LiBUaGVyZSdzIG5vIHJpc2sgaGVyZSBvZiBpbmZvcm1hdGlvbiBsZWFrcyBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gVGhlIG1vZGlmaWVkIHN0cnVjdHVyZXMsIGBrbWVtX2NhY2hlX25vZGVgIGFuZCBgc2xhYmAsIGFyZSAqaW50ZXJuYWwqIHRvIHRoZSBhbGxvY2F0b3IuIFRoZXkncmUgbm90IGJlaW5nIHNlbnQgdG8gb3IgZXhwb3NlZCB0byB1c2Vyc3BhY2UuXG5cblRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIGlzIGRlZmluaXRlbHkgYGZhbHNlYC5cblxuTGV0J3MgZG8gYSBxdWljayBkb3VibGUtY2hlY2sgYWdhaW5zdCB0aGUgS01TQU4gcnVsZXMgdG8gYmUgYWJzb2x1dGVseSBzdXJlOlxuXG4xLiAgKipLZXJuZWwgc3RydWN0dXJlcyB0byB1c2Vyc3BhY2U6KiogTm9wZS5cbjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzOioqIE5vcGUuIFRoZSB2YXJpYWJsZXMgaGVyZSBhcmUgYWxsIGludGVybmFsIHN0YXRlIHZhcmlhYmxlcyB0aGF0IGFyZSBmdWxseSBpbml0aWFsaXplZC5cbjMuICAqKkNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbi9pbml0aWFsaXphdGlvbjoqKiBOb3BlLlxuNC4gICoqQm91bmRzIGNoZWNrcyBleHBvc2luZyB1bmluaXRpYWxpemVkIGJ5dGVzOioqIE5vcGUuXG5cblNvLCB5ZWFoLCBJJ20gY29uZmlkZW50IGluIG15IGFzc2Vzc21lbnQuIGBOZWVkc0tNU0FOPWZhbHNlYCBpcyB0aGUgcmlnaHQgY2FsbCBoZXJlLiBJJ2xsIGZvcm11bGF0ZSB0aGUgcmVhc29uaW5nIGZvciBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODE4NSwiT3V0cHV0VG9rZW5zIjoyMDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MTUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNjowOTo1OS40NzYyMzE1NVoiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGludGVybmFsIFNMVUIgYWxsb2NhdG9yIGxvZ2ljIHRvIGludHJvZHVjZSBhIGxvY2tsZXNzIFxcXCJwYXJraW5nXFxcIiBtZWNoYW5pc20gZm9yIHNsYWJzIHRvIHJlZHVjZSBsb2NrIGNvbnRlbnRpb24gb24gdGhlIG5vZGUncyBsaXN0X2xvY2suIEl0IGFkZHMgYW4gbGxpc3QgZm9yIHBhcmtlZCBzbGFicyBhbmQgZGVsYXllZCB3b3JrIHRvIHVucGFyayB0aGVtLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBpbnRlcm5hbCBtZW1vcnkgbWFuYWdlbWVudCBzdHJ1Y3R1cmVzIChzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlLCBzdHJ1Y3Qgc2xhYikgYW5kIGZyZWVsaXN0IG9wZXJhdGlvbnMuIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBtYW5pZmVzdCBhcyBsaXN0IGNvcnJ1cHRpb25zLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIG9yIGNvbmN1cnJlbmN5IGlzc3VlcyAocmFjZSBjb25kaXRpb25zKS4gVGhlc2UgdHlwZXMgb2YgYnVncyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4sIHNsdWJfZGVidWcsIGxpc3QgZGVidWdnaW5nLCBhbmQgTE9DS0RFUC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWx0ZXIgbWVtb3J5IGluaXRpYWxpemF0aW9uIG9yIGJvdW5kcyBjaGVja2luZyBpbiBhIHdheSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBjYXVzZSBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGludGVybmFsIFNMVUIgYWxsb2NhdG9yIGxvZ2ljIHRvIGludHJvZHVjZSBhIGxvY2tsZXNzIFxcXCJwYXJraW5nXFxcIiBtZWNoYW5pc20gZm9yIHNsYWJzIHRvIHJlZHVjZSBsb2NrIGNvbnRlbnRpb24gb24gdGhlIG5vZGUncyBsaXN0X2xvY2suIEl0IGFkZHMgYW4gbGxpc3QgZm9yIHBhcmtlZCBzbGFicyBhbmQgZGVsYXllZCB3b3JrIHRvIHVucGFyayB0aGVtLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBpbnRlcm5hbCBtZW1vcnkgbWFuYWdlbWVudCBzdHJ1Y3R1cmVzIChzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlLCBzdHJ1Y3Qgc2xhYikgYW5kIGZyZWVsaXN0IG9wZXJhdGlvbnMuIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBtYW5pZmVzdCBhcyBsaXN0IGNvcnJ1cHRpb25zLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIG9yIGNvbmN1cnJlbmN5IGlzc3VlcyAocmFjZSBjb25kaXRpb25zKS4gVGhlc2UgdHlwZXMgb2YgYnVncyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4sIHNsdWJfZGVidWcsIGxpc3QgZGVidWdnaW5nLCBhbmQgTE9DS0RFUC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWx0ZXIgbWVtb3J5IGluaXRpYWxpemF0aW9uIG9yIGJvdW5kcyBjaGVja2luZyBpbiBhIHdheSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBjYXVzZSBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowjqvhf[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-24 15:15:37 +0000 UTC FinishedAt: 2026-08-24 16:10:00 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "e7f630142df2afccce90555e4972e60008222311", "config_name": "upstream-apparmor-kasan.config", "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "e7f630142df2afccce90555e4972e60008222311", "config_name": "upstream-apparmor-kasan.config", "series_id": "1936dda0-2e34-423f-80e0-95f570103cff" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "__kmem_cache_shrink", "__kmem_cache_shutdown", "__kmem_cache_empty", "kmem_cache_shrink", "kmem_cache_destroy" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI0IDE1OjQ3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fa21lbV9jYWNoZV9zaHJpbmsmIzM0OywKICAgICYjMzQ7X19rbWVtX2NhY2hlX3NodXRkb3duJiMzNDssCiAgICAmIzM0O19fa21lbV9jYWNoZV9lbXB0eSYjMzQ7LAogICAgJiMzNDtrbWVtX2NhY2hlX3NocmluayYjMzQ7LAogICAgJiMzNDtrbWVtX2NhY2hlX2Rlc3Ryb3kmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW50ZXJuYWwgU0xVQiBhbGxvY2F0b3IgbG9naWMgdG8gaW50cm9kdWNlIGEgbG9ja2xlc3MgXCYjMzQ7cGFya2luZ1wmIzM0OyBtZWNoYW5pc20gZm9yIHNsYWJzIHRvIHJlZHVjZSBsb2NrIGNvbnRlbnRpb24gb24gdGhlIG5vZGUmIzM5O3MgbGlzdF9sb2NrLiBJdCBhZGRzIGFuIGxsaXN0IGZvciBwYXJrZWQgc2xhYnMgYW5kIGRlbGF5ZWQgd29yayB0byB1bnBhcmsgdGhlbS4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgaW50ZXJuYWwgbWVtb3J5IG1hbmFnZW1lbnQgc3RydWN0dXJlcyAoc3RydWN0IGttZW1fY2FjaGVfbm9kZSwgc3RydWN0IHNsYWIpIGFuZCBmcmVlbGlzdCBvcGVyYXRpb25zLiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgbWFuaWZlc3QgYXMgbGlzdCBjb3JydXB0aW9ucywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBvciBjb25jdXJyZW5jeSBpc3N1ZXMgKHJhY2UgY29uZGl0aW9ucykuIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLCBzbHViX2RlYnVnLCBsaXN0IGRlYnVnZ2luZywgYW5kIExPQ0tERVAuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcyBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFsdGVyIG1lbW9yeSBpbml0aWFsaXphdGlvbiBvciBib3VuZHMgY2hlY2tpbmcgaW4gYSB3YXkgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgY2F1c2UgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbG9ja2xlc3MgcGFya2luZyBtZWNoYW5pc20gZm9yIHNsYWJzIGluIHRoZSBTTFVCIGFsbG9jYXRvciYjMzk7cyBmcmVlIHNsb3dwYXRoIHRvIHJlZHVjZSBsaXN0X2xvY2sgY29udGVudGlvbi4gVGhpcyBpcyBhIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhZmZlY3RzIHNsYWIgYWxsb2NhdGlvbiBhbmQgZnJlZWluZyBsb2dpYy4gSXQgaXMgcmVhY2hhYmxlIGJ5IGRlZmF1bHQgYW5kIHNob3VsZCBiZSBmdXp6ZWQuIFNpbmNlIGFsbG9jYXRpb24gYW5kIGZyZWVpbmcgYXJlIGhvdCBwYXRocywgd2UgZm9jdXMgb24gY2FjaGUgc2hyaW5raW5nIGFuZCBkZXN0cnVjdGlvbiBwYXRocyB3aGljaCBhbHNvIGludGVyYWN0IHdpdGggdGhlIG5ldyB1bnBhcmtpbmcgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTU6NDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA1YmJlOGJmMjExZmQ3MGJmMmNhYTI5ZWIzN2Y3MmRiM2Q2OTY0NDQ0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMjQgMTU6NDc6MDUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vc2x1Yi5jIGIvbW0vc2x1Yi5jXG5pbmRleCBiMGNkMDU3MmUyZjI2Li4yN2E3OGQ2M2Y1Mzc2IDEwMDY0NFxuLS0tIGEvbW0vc2x1Yi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9zbHViLmNcbkBAIC00OSw2ICYjNDM7NDksNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NvcnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lycV93b3JrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rcHJvYmVzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbGxpc3QuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlYnVnZnMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3RyYWNlL2V2ZW50cy9rbWVtLmhcdTAwM2VcbiBcbkBAIC0xMjIsNiAmIzQzOzEyMyw4IEBAXG4gICogICAoTm90ZSB0aGF0IHRoZSB0b3RhbCBudW1iZXIgb2Ygc2xhYnMgaXMgYW4gYXRvbWljIHZhbHVlIHRoYXQgbWF5IGJlXG4gICogICBtb2RpZmllZCB3aXRob3V0IHRha2luZyB0aGUgbGlzdCBsb2NrKS5cbiAgKlxuJiM0MzsgKiAgIFNsYWJzIG1heSBiZSBwdXNoZWQgdG8gbm9kZS1cdTAwM2VwYXJrZWRfc2xhYnMgd2l0aG91dCBhY3F1aXJpbmcgbGlzdF9sb2NrLlxuJiM0MzsgKlxuICAqICAgVGhlIGxpc3RfbG9jayBpcyBhIGNlbnRyYWxpemVkIGxvY2sgYW5kIHRodXMgd2UgYXZvaWQgdGFraW5nIGl0IGFzXG4gICogICBtdWNoIGFzIHBvc3NpYmxlLiBBcyBsb25nIGFzIFNMVUIgZG9lcyBub3QgaGF2ZSB0byBoYW5kbGUgcGFydGlhbFxuICAqICAgc2xhYnMsIG9wZXJhdGlvbnMgY2FuIGNvbnRpbnVlIHdpdGhvdXQgYW55IGNlbnRyYWxpemVkIGxvY2suXG5AQCAtMzY4LDYgJiM0MzszNzEsOSBAQCBlbnVtIHN0YXRfaXRlbSB7XG4gXHRGUkVFX1NMT1dQQVRILFx0XHQvKiBGcmVlIHRvIGEgc2xhYiAqL1xuIFx0RlJFRV9BRERfUEFSVElBTCxcdC8qIEZyZWVpbmcgbW92ZXMgc2xhYiB0byBwYXJ0aWFsIGxpc3QgKi9cbiBcdEZSRUVfUkVNT1ZFX1BBUlRJQUwsXHQvKiBGcmVlaW5nIHJlbW92ZXMgbGFzdCBvYmplY3QgKi9cbiYjNDM7XHRQQVJLX1NMQUIsXHRcdC8qIFNsYWJzIHBhcmtlZCBvbnRvIHRoZSBsbGlzdCBieSBmcmVlIHNsb3dwYXRoICovXG4mIzQzO1x0VU5QQVJLX1NMQUIsXHRcdC8qIFNsYWJzIHVucGFya2VkIGZyb20gdGhlIGxsaXN0ICovXG4mIzQzO1x0VU5QQVJLX0VWRU5ULFx0XHQvKiBVbnBhcmsgZXZlbnRzICovXG4gXHRBTExPQ19TTEFCLFx0XHQvKiBOZXcgc2xhYiBhY3F1aXJlZCBmcm9tIHBhZ2UgYWxsb2NhdG9yICovXG4gXHRBTExPQ19OT0RFX01JU01BVENILFx0LyogUmVxdWVzdGVkIG5vZGUgZGlmZmVyZW50IGZyb20gY3B1IHNoZWFmICovXG4gXHRGUkVFX1NMQUIsXHRcdC8qIFNsYWIgZnJlZWQgdG8gdGhlIHBhZ2UgYWxsb2NhdG9yICovXG5AQCAtNDYyLDYgJiM0Mzs0NjgsMTQgQEAgc3RydWN0IGttZW1fY2FjaGVfbm9kZSB7XG4gXHRhdG9taWNfbG9uZ190IHRvdGFsX29iamVjdHM7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGZ1bGw7XG4gI2VuZGlmXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBJZiBuZWl0aGVyIHNoZWFmIHJlZmlsbCBub3IgdGhlIGFsbG9jIHNsb3dwYXRoIHBlcmZvcm1zIHRoZSB1bnBhcmssXG4mIzQzO1x0ICogdW5wYXJrX3dvcmtfZm4gdGFrZXMgY2FyZSBvZiBpdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzdHJ1Y3QgZGVsYXllZF93b3JrIHVucGFya193b3JrO1xuJiM0MztcbiYjNDM7XHQvKiBVc2VkIHRvIGxpbmsgcGFya2VkIHNsYWJzICovXG4mIzQzO1x0c3RydWN0IGxsaXN0X2hlYWQgcGFya2VkX3NsYWJzIF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7XG4gfTtcbiBcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBrbWVtX2NhY2hlX25vZGUgKmdldF9ub2RlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBpbnQgbm9kZSlcbkBAIC01MDksNiAmIzQzOzUyMywxMiBAQCBzdGF0aWMgbm9kZW1hc2tfdCBzbGFiX2Jhcm5fbm9kZXM7XG4gICovXG4gc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpmbHVzaHdxO1xuIFxuJiM0MzsvKlxuJiM0MzsgKiBDZWlsaW5nIG9uIGhvdyBsb25nIHNsYWJzIHN0YXkgcGFya2VkIHdoZW4gbm8gc2hlYWYgcmVmaWxsIG9yIGFsbG9jXG4mIzQzOyAqIHNsb3dwYXRoIHVucGFya3MgdGhlbS5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgVU5QQVJLX0RFTEFZXHQoSFopXG4mIzQzO1xuIHN0cnVjdCBzbHViX2ZsdXNoX3dvcmsge1xuIFx0c3RydWN0IHdvcmtfc3RydWN0IHdvcms7XG4gXHRzdHJ1Y3Qga21lbV9jYWNoZSAqcztcbkBAIC0zNjIzLDYgJiM0MzszNjQzLDEyMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcmVtb3ZlX3BhcnRpYWwoc3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbixcbiBcdGNsZWFyX25vZGVfcGFydGlhbF9zdGF0ZShuLCBzbGFiKTtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIEEgc2xhYiBwYXJrZWQgb24gbi1cdTAwM2VwYXJrZWRfc2xhYnMgaXMgbm90IG9uIHBhcnRpYWwgbGlzdCwgc28gaXRzIHNsYWJfbGlzdCBpc1xuJiM0MzsgKiBmcmVlIGFuZCB3ZSByZXVzZSBpdCBhcyB0aGUgbGxpc3Rfbm9kZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IGxsaXN0X25vZGUgKnNsYWJfdG9fcGFya2VkX2xsbm9kZShzdHJ1Y3Qgc2xhYiAqc2xhYilcbiYjNDM7e1xuJiM0MztcdHJldHVybiAoc3RydWN0IGxsaXN0X25vZGUgKilcdTAwMjZzbGFiLVx1MDAzZXNsYWJfbGlzdDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2xhYiAqcGFya2VkX2xsbm9kZV90b19zbGFiKHN0cnVjdCBsbGlzdF9ub2RlICpub2RlKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGNvbnRhaW5lcl9vZigoc3RydWN0IGxpc3RfaGVhZCAqKW5vZGUsIHN0cnVjdCBzbGFiLCBzbGFiX2xpc3QpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBNb3ZlIHNsYWJzIHBhcmtlZCBvbiBuLVx1MDAzZXBhcmtlZF9zbGFicyB0byBuLVx1MDAzZXBhcnRpYWwuIENhbGxlZCB3aXRoIHRoZVxuJiM0MzsgKiBsaXN0X2xvY2sgaGVsZCwgYnkgdGhlIHBhdGhzIHRoYXQgY29uc3VtZSB0aGUgcGFydGlhbCBsaXN0LCBvbiBiZWhhbGYgb2YgdGhlXG4mIzQzOyAqIGNwdXMgdGhhdCBjb3VsZCBub3QgZ2V0IHRoZSBsb2NrIHdoZW4gcGFya2luZy5cbiYjNDM7ICpcbiYjNDM7ICogSWYgQGRpc2NhcmQgaXMgbm90IE5VTEwsIHB1dCBlbXB0eSBzbGFicyBiZXlvbmQgbWluX3BhcnRpYWwgb24gQGRpc2NhcmQsIHRoZVxuJiM0MzsgKiBjYWxsZXIgc2hvdWxkIGNhbGwgZGlzY2FyZF9zbGFiKCkgYWZ0ZXIgZHJvcHBpbmcgdGhlIGxvY2suICBDYWxsZXJzIHRoYXQgbWF5XG4mIzQzOyAqIG5vdCBmcmVlIHBhZ2VzIGluIHRoZWlyIGNvbnRleHQgc2hvdWxkIHBhc3MgTlVMTC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIHVucGFya19zbGFicyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbixcbiYjNDM7XHRcdFx0IHN0cnVjdCBsaXN0X2hlYWQgKmRpc2NhcmQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqcG9zLCAqbmV4dDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGFkZGVkID0gMCwgZGlzY2FyZGVkID0gMDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGhlYWRyb29tID0gMDtcbiYjNDM7XHRMSVNUX0hFQUQodG9fYWRkKTtcbiYjNDM7XG4mIzQzO1x0c2xhYl9sb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNm4tXHUwMDNlbGlzdF9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0cG9zID0gbGxpc3RfZGVsX2FsbChcdTAwMjZuLVx1MDAzZXBhcmtlZF9zbGFicyk7XG4mIzQzO1x0aWYgKGxpa2VseSghcG9zKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBDYWxjdWxhdGUgaG93IG1hbnkgbW9yZSBzbGFicyB0aGUgcGFydGlhbCBsaXN0IHdhbnRzIGJlZm9yZSBpdCBoYXNcbiYjNDM7XHQgKiByZWFjaGVkIG1pbl9wYXJ0aWFsLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChzLVx1MDAzZW1pbl9wYXJ0aWFsIFx1MDAzZSBuLVx1MDAzZW5yX3BhcnRpYWwpXG4mIzQzO1x0XHRoZWFkcm9vbSA9IHMtXHUwMDNlbWluX3BhcnRpYWwgLSBuLVx1MDAzZW5yX3BhcnRpYWw7XG4mIzQzO1xuJiM0MztcdGZvciAoOyBwb3M7IHBvcyA9IG5leHQpIHtcbiYjNDM7XHRcdHN0cnVjdCBzbGFiICpzbGFiID0gcGFya2VkX2xsbm9kZV90b19zbGFiKHBvcyk7XG4mIzQzO1x0XHRzdHJ1Y3QgZnJlZWxpc3RfY291bnRlcnMgZmxjO1xuJiM0MztcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBCYWNrIHVwIHRoZSBwb2ludGVyLCBiZWNhdXNlIHRoZSBsaXN0X2FkZF90YWlsKCkgYmVsb3dcbiYjNDM7XHRcdCAqIG92ZXJ3cml0ZXMgdGhlIGxsaXN0IGxpbmthZ2UuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdG5leHQgPSBwb3MtXHUwMDNlbmV4dDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoZGlzY2FyZCkge1xuJiM0MztcdFx0XHRmbGMuY291bnRlcnMgPSBkYXRhX3JhY2UoUkVBRF9PTkNFKHNsYWItXHUwMDNlY291bnRlcnMpKTtcbiYjNDM7XHRcdFx0aWYgKCFmbGMuaW51c2UgXHUwMDI2XHUwMDI2IGFkZGVkIFx1MDAzZT0gaGVhZHJvb20pIHtcbiYjNDM7XHRcdFx0XHRsaXN0X2FkZF90YWlsKFx1MDAyNnNsYWItXHUwMDNlc2xhYl9saXN0LCBkaXNjYXJkKTtcbiYjNDM7XHRcdFx0XHRkaXNjYXJkZWQmIzQzOyYjNDM7O1xuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0c2xhYl9zZXRfbm9kZV9wYXJ0aWFsKHNsYWIpO1xuJiM0MztcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZzbGFiLVx1MDAzZXNsYWJfbGlzdCwgXHUwMDI2dG9fYWRkKTtcbiYjNDM7XHRcdGFkZGVkJiM0MzsmIzQzOztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG4tXHUwMDNlbnJfcGFydGlhbCAmIzQzOz0gYWRkZWQ7XG4mIzQzO1x0bGlzdF9zcGxpY2VfdGFpbChcdTAwMjZ0b19hZGQsIFx1MDAyNm4tXHUwMDNlcGFydGlhbCk7XG4mIzQzO1xuJiM0MztcdHN0YXRfYWRkKHMsIEZSRUVfQUREX1BBUlRJQUwsIGFkZGVkKTtcbiYjNDM7XHRzdGF0X2FkZChzLCBVTlBBUktfU0xBQiwgYWRkZWQgJiM0MzsgZGlzY2FyZGVkKTtcbiYjNDM7XHRpZiAodW5saWtlbHkoZGlzY2FyZGVkKSlcbiYjNDM7XHRcdHN0YXRfYWRkKHMsIEZSRUVfU0xBQiwgZGlzY2FyZGVkKTtcbiYjNDM7XHRzdGF0KHMsIFVOUEFSS19FVkVOVCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFBhcmtlZCBzbGFicyBhcmUgbm9ybWFsbHkgdW5wYXJrZWQgYnkgc2hlYWYgcmVmaWxsIG9yIHRoZSBhbGxvYyBzbG93cGF0aCwgYnV0XG4mIzQzOyAqIHdoZW4gdGhlIHN5c3RlbSBleHBlcmllbmNlcyBhIGhlYXZ5IGJ1cnN0IG9mIGZyZWVzLCBhYnJ1cHRseSBnb2VzIGlkbGUsXG4mIzQzOyAqIGFuZCBuZWl0aGVyIHNoZWFmIHJlZmlsbCBub3IgdGhlIGFsbG9jIHNsb3dwYXRoIGlzIHJlYWNoZWQsXG4mIzQzOyAqIHNvbWUgcGFya2VkIHNsYWJzIG1heSBiZSBsZWZ0IHN0cmFuZGVkIGluIHRoZSBwYXJrZWQgbGxpc3QuIFRoaXMgZnVuY3Rpb25cbiYjNDM7ICogc2VydmVzIGFzIGEgbGFzdC1yZXNvcnQgZmFsbGJhY2suXG4mIzQzOyAqIFRoaXMgd29yayBpcyBzY2hlZHVsZWQgYnkgdGhlIGxsaXN0X2FkZCgpIHRoYXQgbWFrZXMgdGhlIHBhcmtlZCBsbGlzdCBub24tZW1wdHkuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCB1bnBhcmtfd29ya19mbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlICpuID0gY29udGFpbmVyX29mKHRvX2RlbGF5ZWRfd29yayh3b3JrKSxcbiYjNDM7XHRcdFx0XHRcdFx0IHN0cnVjdCBrbWVtX2NhY2hlX25vZGUsXG4mIzQzO1x0XHRcdFx0XHRcdCB1bnBhcmtfd29yayk7XG4mIzQzO1x0c3RydWN0IGxsaXN0X25vZGUgKmZpcnN0O1xuJiM0MztcdHN0cnVjdCBrbWVtX2NhY2hlICpzO1xuJiM0MztcdHN0cnVjdCBzbGFiICpzbGFiLCAqdDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuJiM0MztcdExJU1RfSEVBRChkaXNjYXJkKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGxpa2VseShsbGlzdF9lbXB0eShcdTAwMjZuLVx1MDAzZXBhcmtlZF9zbGFicykpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZuLVx1MDAzZWxpc3RfbG9jaywgZmxhZ3MpO1xuJiM0MztcbiYjNDM7XHRmaXJzdCA9IFJFQURfT05DRShuLVx1MDAzZXBhcmtlZF9zbGFicy5maXJzdCk7XG4mIzQzO1x0aWYgKHVubGlrZWx5KCFmaXJzdCkpIHtcbiYjNDM7XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2bi1cdTAwM2VsaXN0X2xvY2ssIGZsYWdzKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1x0cyA9IHBhcmtlZF9sbG5vZGVfdG9fc2xhYihmaXJzdCktXHUwMDNlc2xhYl9jYWNoZTtcbiYjNDM7XG4mIzQzO1x0dW5wYXJrX3NsYWJzKHMsIG4sIFx1MDAyNmRpc2NhcmQpO1xuJiM0MztcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2bi1cdTAwM2VsaXN0X2xvY2ssIGZsYWdzKTtcbiYjNDM7XG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNsYWIsIHQsIFx1MDAyNmRpc2NhcmQsIHNsYWJfbGlzdClcbiYjNDM7XHRcdGRpc2NhcmRfc2xhYihzLCBzbGFiKTtcbiYjNDM7fVxuJiM0MztcbiAvKlxuICAqIENhbGxlZCBvbmx5IGZvciBrbWVtX2NhY2hlX2RlYnVnKCkgY2FjaGVzIGluc3RlYWQgb2YgcmVtb3ZlX3BhcnRpYWwoKSwgd2l0aCBhXG4gICogc2xhYiBmcm9tIHRoZSBuLVx1MDAzZXBhcnRpYWwgbGlzdC4gUmVtb3ZlIG9ubHkgYSBzaW5nbGUgb2JqZWN0IGZyb20gdGhlIHNsYWIsIGRvXG5AQCAtMzgxOCw5ICYjNDM7Mzk1NCwxMyBAQCBzdGF0aWMgYm9vbCBnZXRfcGFydGlhbF9ub2RlX2J1bGsoc3RydWN0IGttZW1fY2FjaGUgKnMsXG4gXHRzdHJ1Y3Qgc2xhYiAqZmlyc3QgPSBOVUxMLCAqbGFzdCA9IE5VTEw7XG4gXHR1bnNpZ25lZCBpbnQgdG90YWxfZnJlZSA9IDA7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuJiM0MztcdExJU1RfSEVBRChkaXNjYXJkKTtcbiBcbi1cdC8qIFJhY3kgY2hlY2sgdG8gYXZvaWQgdGFraW5nIHRoZSBsb2NrIHVubmVjZXNzYXJpbHkuICovXG4tXHRpZiAoIW4gfHwgZGF0YV9yYWNlKCFuLVx1MDAzZW5yX3BhcnRpYWwpKVxuJiM0MztcdC8qXG4mIzQzO1x0ICogUmFjeSBjaGVjayB0byBhdm9pZCB0YWtpbmcgdGhlIGxvY2sgdW5uZWNlc3NhcmlseS5cbiYjNDM7XHQgKiBUaGUgcGFya2VkX3NsYWJzIGxsaXN0IG11c3QgYWxzbyBiZSBhY2NvdW50ZWQgZm9yLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICghbiB8fCAoIWRhdGFfcmFjZShuLVx1MDAzZW5yX3BhcnRpYWwpIFx1MDAyNlx1MDAyNiBsbGlzdF9lbXB0eShcdTAwMjZuLVx1MDAzZXBhcmtlZF9zbGFicykpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZwYy1cdTAwM2VzbGFicyk7XG5AQCAtMzgzMCw2ICYjNDM7Mzk3MCw5IEBAIHN0YXRpYyBib29sIGdldF9wYXJ0aWFsX25vZGVfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbiBcdGVsc2UgaWYgKCFzcGluX3RyeWxvY2tfaXJxc2F2ZShcdTAwMjZuLVx1MDAzZWxpc3RfbG9jaywgZmxhZ3MpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4mIzQzO1x0LyogSWYgdGhlcmUgYXJlIHBhcmtlZCBzbGFicywgbW92ZSB0aGVtIHRvIHRoZSBwYXJ0aWFsIGxpc3QgZmlyc3QuICovXG4mIzQzO1x0dW5wYXJrX3NsYWJzKHMsIG4sIGFsbG93X3NwaW4gPyBcdTAwMjZkaXNjYXJkIDogTlVMTCk7XG4mIzQzO1xuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNsYWIsIHNsYWIyLCBcdTAwMjZuLVx1MDAzZXBhcnRpYWwsIHNsYWJfbGlzdCkge1xuIFx0XHRzdHJ1Y3QgZnJlZWxpc3RfY291bnRlcnMgZmxjO1xuIFx0XHR1bnNpZ25lZCBpbnQgc2xhYl9mcmVlO1xuQEAgLTM4NzQsNiAmIzQzOzQwMTcsMTAgQEAgc3RhdGljIGJvb2wgZ2V0X3BhcnRpYWxfbm9kZV9idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLFxuIFx0XHRcdFx0ICAgIFx1MDAyNmxhc3QtXHUwMDNlc2xhYl9saXN0KTtcbiBcbiBcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2bi1cdTAwM2VsaXN0X2xvY2ssIGZsYWdzKTtcbiYjNDM7XG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNsYWIsIHNsYWIyLCBcdTAwMjZkaXNjYXJkLCBzbGFiX2xpc3QpXG4mIzQzO1x0XHRkaXNjYXJkX3NsYWIocywgc2xhYik7XG4mIzQzO1xuIFx0cmV0dXJuIHRvdGFsX2ZyZWUgXHUwMDNlIDA7XG4gfVxuIFxuQEAgLTM4ODUsMjMgJiM0Mzs0MDMyLDI5IEBAIHN0YXRpYyB2b2lkICpnZXRfZnJvbV9wYXJ0aWFsX25vZGUoc3RydWN0IGttZW1fY2FjaGUgKnMsXG4gXHRcdFx0XHQgICBnZnBfdCBnZnBfZmxhZ3MsXG4gXHRcdFx0XHQgICBjb25zdCBzdHJ1Y3Qgc2xhYl9hbGxvY19jb250ZXh0ICphYylcbiB7XG4mIzQzO1x0Ym9vbCBhbGxvd19zcGluID0gYWxsb2NfZmxhZ3NfYWxsb3dfc3Bpbm5pbmcoYWMtXHUwMDNlYWxsb2NfZmxhZ3MpO1xuIFx0c3RydWN0IHNsYWIgKnNsYWIsICpzbGFiMjtcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXHR2b2lkICpvYmplY3QgPSBOVUxMO1xuJiM0MztcdExJU1RfSEVBRChkaXNjYXJkKTtcbiBcbiBcdC8qXG4gXHQgKiBSYWN5IGNoZWNrLiBJZiB3ZSBtaXN0YWtlbmx5IHNlZSBubyBwYXJ0aWFsIHNsYWJzIHRoZW4gd2VcbiBcdCAqIGp1c3QgYWxsb2NhdGUgYW4gZW1wdHkgc2xhYi4gSWYgd2UgbWlzdGFrZW5seSB0cnkgdG8gZ2V0IGFcbiBcdCAqIHBhcnRpYWwgc2xhYiBhbmQgdGhlcmUgaXMgbm9uZSBhdmFpbGFibGUgdGhlbiBnZXRfZnJvbV9wYXJ0aWFsKClcbi1cdCAqIHdpbGwgcmV0dXJuIE5VTEwuXG4mIzQzO1x0ICogd2lsbCByZXR1cm4gTlVMTC4gQWxzbyB0YWtlIHRoZSBwYXJrZWRfc2xhYnMgbGxpc3QgaW50byBhY2NvdW50LlxuIFx0ICovXG4tXHRpZiAoIW4gfHwgIW4tXHUwMDNlbnJfcGFydGlhbClcbiYjNDM7XHRpZiAoIW4gfHwgKCFkYXRhX3JhY2Uobi1cdTAwM2Vucl9wYXJ0aWFsKSBcdTAwMjZcdTAwMjYgbGxpc3RfZW1wdHkoXHUwMDI2bi1cdTAwM2VwYXJrZWRfc2xhYnMpKSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4tXHRpZiAoYWxsb2NfZmxhZ3NfYWxsb3dfc3Bpbm5pbmcoYWMtXHUwMDNlYWxsb2NfZmxhZ3MpKVxuJiM0MztcdGlmIChhbGxvd19zcGluKVxuIFx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZuLVx1MDAzZWxpc3RfbG9jaywgZmxhZ3MpO1xuIFx0ZWxzZSBpZiAoIXNwaW5fdHJ5bG9ja19pcnFzYXZlKFx1MDAyNm4tXHUwMDNlbGlzdF9sb2NrLCBmbGFncykpXG4gXHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiYjNDM7XHQvKiBJZiB0aGVyZSBhcmUgcGFya2VkIHNsYWJzLCBtb3ZlIHRoZW0gdG8gdGhlIHBhcnRpYWwgbGlzdCBmaXJzdC4gKi9cbiYjNDM7XHR1bnBhcmtfc2xhYnMocywgbiwgYWxsb3dfc3BpbiA/IFx1MDAyNmRpc2NhcmQgOiBOVUxMKTtcbiYjNDM7XG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2xhYiwgc2xhYjIsIFx1MDAyNm4tXHUwMDNlcGFydGlhbCwgc2xhYl9saXN0KSB7XG4gXG4gXHRcdHN0cnVjdCBmcmVlbGlzdF9jb3VudGVycyBvbGQsIG5ldztcbkBAIC0zOTM5LDYgJiM0Mzs0MDkyLDEwIEBAIHN0YXRpYyB2b2lkICpnZXRfZnJvbV9wYXJ0aWFsX25vZGUoc3RydWN0IGttZW1fY2FjaGUgKnMsXG4gXHRcdGJyZWFrO1xuIFx0fVxuIFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZuLVx1MDAzZWxpc3RfbG9jaywgZmxhZ3MpO1xuJiM0MztcbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2xhYiwgc2xhYjIsIFx1MDAyNmRpc2NhcmQsIHNsYWJfbGlzdClcbiYjNDM7XHRcdGRpc2NhcmRfc2xhYihzLCBzbGFiKTtcbiYjNDM7XG4gXHRyZXR1cm4gb2JqZWN0O1xuIH1cbiBcbkBAIC0zOTk0LDggJiM0Mzs0MTUxLDEzIEBAIHN0YXRpYyB2b2lkICpnZXRfZnJvbV9hbnlfcGFydGlhbChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwX2ZsYWdzLFxuIFxuIFx0XHRcdG4gPSBnZXRfbm9kZShzLCB6b25lX3RvX25pZCh6b25lKSk7XG4gXG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIFBhcmtlZCBzbGFicyBtYWtlIHRoZSBub2RlIHdvcnRoIHZpc2l0aW5nIGV2ZW4gaWZcbiYjNDM7XHRcdFx0ICogbnJfcGFydGlhbCBsb29rcyBsb3cuXG4mIzQzO1x0XHRcdCAqL1xuIFx0XHRcdGlmIChuIFx1MDAyNlx1MDAyNiBjcHVzZXRfem9uZV9hbGxvd2VkKHpvbmUsIGdmcF9mbGFncykgXHUwMDI2XHUwMDI2XG4tXHRcdFx0XHRcdG4tXHUwMDNlbnJfcGFydGlhbCBcdTAwM2Ugcy1cdTAwM2VtaW5fcGFydGlhbCkge1xuJiM0MztcdFx0XHRcdFx0KG4tXHUwMDNlbnJfcGFydGlhbCBcdTAwM2Ugcy1cdTAwM2VtaW5fcGFydGlhbCB8fFxuJiM0MztcdFx0XHRcdFx0ICFsbGlzdF9lbXB0eShcdTAwMjZuLVx1MDAzZXBhcmtlZF9zbGFicykpKSB7XG4gXG4gXHRcdFx0XHR2b2lkICpvYmplY3QgPSBnZXRfZnJvbV9wYXJ0aWFsX25vZGUocywgbixcbiBcdFx0XHRcdFx0XHRcdFx0Z2ZwX2ZsYWdzLCBhYyk7XG5AQCAtNTcxOSw3ICYjNDM7NTg4MSw3IEBAIHN0YXRpYyB2b2lkIF9fc2xhYl9mcmVlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYixcbiBcdFx0XHR1bnNpZ25lZCBsb25nIGFkZHIpXG4gXG4ge1xuLVx0Ym9vbCB3YXNfZnVsbDtcbiYjNDM7XHRib29sIHdhc19mdWxsLCBwYXJrID0gZmFsc2U7XG4gXHRzdHJ1Y3QgZnJlZWxpc3RfY291bnRlcnMgb2xkLCBuZXc7XG4gXHRzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlICpuID0gTlVMTDtcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG5AQCAtNTczMSwxMCAmIzQzOzU4OTMsMTEgQEAgc3RhdGljIHZvaWQgX19zbGFiX2ZyZWUoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLFxuIFx0fVxuIFxuIFx0ZG8ge1xuLVx0XHRpZiAodW5saWtlbHkobikpIHtcbiYjNDM7XHRcdGlmICh1bmxpa2VseShuIFx1MDAyNlx1MDAyNiAhcGFyaykpXG4gXHRcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZuLVx1MDAzZWxpc3RfbG9jaywgZmxhZ3MpO1xuLVx0XHRcdG4gPSBOVUxMO1xuLVx0XHR9XG4mIzQzO1xuJiM0MztcdFx0cGFyayA9IGZhbHNlO1xuJiM0MztcdFx0biA9IE5VTEw7XG4gXG4gXHRcdG9sZC5mcmVlbGlzdCA9IHNsYWItXHUwMDNlZnJlZWxpc3Q7XG4gXHRcdG9sZC5jb3VudGVycyA9IHNsYWItXHUwMDNlY291bnRlcnM7XG5AQCAtNTc0OCw3NiAmIzQzOzU5MTEsMTE0IEBAIHN0YXRpYyB2b2lkIF9fc2xhYl9mcmVlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYixcbiBcdFx0bmV3LmludXNlIC09IGNudDtcbiBcbiBcdFx0Lypcbi1cdFx0ICogTWlnaHQgbmVlZCB0byBiZSB0YWtlbiBvZmYgKGR1ZSB0byBiZWNvbWluZyBlbXB0eSkgb3IgYWRkZWRcbi1cdFx0ICogdG8gKGR1ZSB0byBub3QgYmVpbmcgZnVsbCBhbnltb3JlKSB0aGUgcGFydGlhbCBsaXN0LlxuLVx0XHQgKiBVbmxlc3MgaXQmIzM5O3MgZnJvemVuLlxuJiM0MztcdFx0ICogcGFydGlhbC1cdTAwM2VwYXJ0aWFsOiB0aGUgc2xhYiB3YXMgb24gdGhlIG5vZGUgcGFydGlhbCBsaXN0IGFuZFxuJiM0MztcdFx0ICogd2lsbCBzdGlsbCBzdGF5IHRoZXJlLCBzbyB3ZSBuZWVkIG5vIGxpc3QgaGFuZGxpbmcgYW5kIG5vXG4mIzQzO1x0XHQgKiBsaXN0X2xvY2suXG4mIzQzO1x0XHQgKlxuJiM0MztcdFx0ICogTm90ZSB0aGF0IFwmIzM0O2NvbnRpbnVlO1wmIzM0OyBpbiBhIGRvLXdoaWxlIGdvZXMgb24gdG8gZXZhbHVhdGUgdGhlXG4mIzQzO1x0XHQgKiBjb25kaXRpb24gYmVsb3csIHNvIHdlIGRvIHBlcmZvcm0gdGhlIGZyZWVsaXN0IHVwZGF0ZS5cbiBcdFx0ICovXG4tXHRcdGlmICghbmV3LmludXNlIHx8IHdhc19mdWxsKSB7XG4mIzQzO1x0XHRpZiAoIXdhc19mdWxsIFx1MDAyNlx1MDAyNiBuZXcuaW51c2UpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRcdG4gPSBnZXRfbm9kZShzLCBzbGFiX25pZChzbGFiKSk7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogVGhlIHNsYWIgbWlnaHQgbmVlZCB0byBiZSB0YWtlbiBvZmYgKGR1ZSB0byBiZWNvbWluZyBlbXB0eSlcbiYjNDM7XHRcdCAqIG9yIGFkZGVkIHRvIChkdWUgdG8gbm90IGJlaW5nIGZ1bGwgYW55bW9yZSkgdGhlIHBhcnRpYWxcbiYjNDM7XHRcdCAqIGxpc3QuXG4mIzQzO1x0XHQgKlxuJiM0MztcdFx0ICogRm9yIHRoZSBmdWxsIC1cdTAwM2UgcGFydGlhbC9lbXB0eSB0cmFuc2l0aW9uLCB1c2VcbiYjNDM7XHRcdCAqIHNwaW5fdHJ5bG9ja19pcnFzYXZlKCkgYW5kIHRoZSBwYXJraW5nIG1lY2hhbmlzbSB0byByZWR1Y2VcbiYjNDM7XHRcdCAqIGxvY2sgY29udGVudGlvbi5cbiYjNDM7XHRcdCAqXG4mIzQzO1x0XHQgKiBJZiB0aGUgY21weGNoZyBkb2VzIG5vdCBzdWNjZWVkIHRoZW4gd2Ugd2lsbCByZXRyeS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0biA9IGdldF9ub2RlKHMsIHNsYWJfbmlkKHNsYWIpKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIXdhc19mdWxsKSB7XG4gXHRcdFx0Lypcbi1cdFx0XHQgKiBTcGVjdWxhdGl2ZWx5IGFjcXVpcmUgdGhlIGxpc3RfbG9jay5cbi1cdFx0XHQgKiBJZiB0aGUgY21weGNoZyBkb2VzIG5vdCBzdWNjZWVkIHRoZW4gd2UgbWF5XG4tXHRcdFx0ICogZHJvcCB0aGUgbGlzdF9sb2NrIHdpdGhvdXQgYW55IHByb2Nlc3NpbmcuXG4tXHRcdFx0ICpcbi1cdFx0XHQgKiBPdGhlcndpc2UgdGhlIGxpc3RfbG9jayB3aWxsIHN5bmNocm9uaXplIHdpdGhcbi1cdFx0XHQgKiBvdGhlciBwcm9jZXNzb3JzIHVwZGF0aW5nIHRoZSBsaXN0IG9mIHNsYWJzLlxuJiM0MztcdFx0XHQgKiBwYXJ0aWFsLVx1MDAzZWVtcHR5OiBzcGVjdWxhdGl2ZWx5IGFjcXVpcmUgbGlzdF9sb2NrXG4mIzQzO1x0XHRcdCAqIHByaW9yIHRvIGNtcHhjaGcoKSwgYXMgcGVyZm9ybWluZyBjbXB4Y2hnKCkgYmVmb3JlXG4mIzQzO1x0XHRcdCAqIGxvY2sgYWNxdWlzaXRpb24gcmFjZXMgd2l0aCBjb25jdXJyZW50IG9wZXJhdGlvbnNcbiYjNDM7XHRcdFx0ICogKGUuZy4sIHRoZSBzaHJpbmtlcikuXG4gXHRcdFx0ICovXG4gXHRcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2bi1cdTAwM2VsaXN0X2xvY2ssIGZsYWdzKTtcbi1cbi1cdFx0XHRvbl9ub2RlX3BhcnRpYWwgPSBzbGFiX3Rlc3Rfbm9kZV9wYXJ0aWFsKHNsYWIpO1xuJiM0MztcdFx0fSBlbHNlIGlmICghc3Bpbl90cnlsb2NrX2lycXNhdmUoXHUwMDI2bi1cdTAwM2VsaXN0X2xvY2ssIGZsYWdzKSkge1xuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBmdWxsLVx1MDAzZXBhcnRpYWwvZW1wdHk6IHRoZSBzbGFiIGlzIGZ1bGwsIHNvIGl0IGlzIG9uXG4mIzQzO1x0XHRcdCAqIG5vIGxpc3Q7IGlmIHRoZSBsaXN0X2xvY2sgaXMgY29udGVuZGVkLCB0aGVuIHdlXG4mIzQzO1x0XHRcdCAqIHBhcmsgdGhlIHNsYWIgd2l0aG91dCB3YWl0aW5nIGZvciB0aGUgbG9jay5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdHBhcmsgPSB0cnVlO1xuIFx0XHR9XG4gXG4gXHR9IHdoaWxlICghc2xhYl91cGRhdGVfZnJlZWxpc3Qocywgc2xhYiwgXHUwMDI2b2xkLCBcdTAwMjZuZXcsIFwmIzM0O19fc2xhYl9mcmVlXCYjMzQ7KSk7XG4gXG4tXHRpZiAobGlrZWx5KCFuKSkge1xuLVx0XHQvKlxuLVx0XHQgKiBXZSBkaWRuJiMzOTt0IHRha2UgdGhlIGxpc3RfbG9jayBiZWNhdXNlIHRoZSBzbGFiIHdhcyBhbHJlYWR5IG9uXG4tXHRcdCAqIHRoZSBwYXJ0aWFsIGxpc3QgYW5kIHdpbGwgcmVtYWluIHRoZXJlLlxuLVx0XHQgKi9cbiYjNDM7XHQvKiBwYXJ0aWFsLVx1MDAzZXBhcnRpYWw6IHdlIGRpZG4mIzM5O3QgdGFrZSB0aGUgbGlzdF9sb2NrLiAqL1xuJiM0MztcdGlmIChsaWtlbHkoIW4pKVxuIFx0XHRyZXR1cm47XG4tXHR9XG4gXG4gXHQvKlxuLVx0ICogVGhpcyBzbGFiIHdhcyBwYXJ0aWFsbHkgZW1wdHkgYnV0IG5vdCBvbiB0aGUgcGVyLW5vZGUgcGFydGlhbCBsaXN0LFxuLVx0ICogaW4gd2hpY2ggY2FzZSB3ZSBzaG91bGRuJiMzOTt0IG1hbmlwdWxhdGUgaXRzIGxpc3QsIGp1c3QgcmV0dXJuLlxuJiM0MztcdCAqIFBhcmsgdGhlIHNsYWIuIElmIHRoaXMgcGFyayBtYWtlcyB0aGUgcGFya2VkIGxsaXN0IG5vbi1lbXB0eSxcbiYjNDM7XHQgKiB0aGVuIHNjaGVkdWxlIHVucGFya193b3JrLlxuIFx0ICovXG4mIzQzO1x0aWYgKHVubGlrZWx5KHBhcmspKSB7XG4mIzQzO1x0XHRpZiAobGxpc3RfYWRkKHNsYWJfdG9fcGFya2VkX2xsbm9kZShzbGFiKSwgXHUwMDI2bi1cdTAwM2VwYXJrZWRfc2xhYnMpKVxuJiM0MztcdFx0XHRxdWV1ZV9kZWxheWVkX3dvcmsoZmx1c2h3cSwgXHUwMDI2bi1cdTAwM2V1bnBhcmtfd29yayxcbiYjNDM7XHRcdFx0XHRcdCAgIFVOUEFSS19ERUxBWSk7XG4mIzQzO1x0XHRzdGF0KHMsIFBBUktfU0xBQik7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRvbl9ub2RlX3BhcnRpYWwgPSBzbGFiX3Rlc3Rfbm9kZV9wYXJ0aWFsKHNsYWIpO1xuJiM0MztcbiBcdGlmICghd2FzX2Z1bGwgXHUwMDI2XHUwMDI2ICFvbl9ub2RlX3BhcnRpYWwpIHtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBwYXJ0aWFsLVx1MDAzZWVtcHR5LCBvZmZsaXN0OiB0aGUgc2xhYiBoYXMgYmVlbiB0YWtlbiBvZmYgdGhlXG4mIzQzO1x0XHQgKiBwYXJ0aWFsIGxpc3QgYnkgYSBidWxrIHJlZmlsbCwgb3IgcGFya2VkIGR1cmluZyBpdHMgZnVsbCAtXHUwMDNlXG4mIzQzO1x0XHQgKiBwYXJ0aWFsL2VtcHR5IHRyYW5zaXRpb24uIEl0IHdpbGwgYmUgcHV0IGJhY2sgYnkgb3RoZXIgcGF0aHMsXG4mIzQzO1x0XHQgKiBzbyB0aGlzIHNsYWImIzM5O3MgbGlzdCBoYW5kbGluZyBpcyBub3Qgb3VycyB0byBkby5cbiYjNDM7XHRcdCAqL1xuIFx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNm4tXHUwMDNlbGlzdF9sb2NrLCBmbGFncyk7XG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbiBcdC8qXG4tXHQgKiBJZiBzbGFiIGJlY2FtZSBlbXB0eSwgc2hvdWxkIHdlIGFkZC9rZWVwIGl0IG9uIHRoZSBwYXJ0aWFsIGxpc3Qgb3Igd2Vcbi1cdCAqIGhhdmUgZW5vdWdoP1xuJiM0MztcdCAqIGZ1bGwvcGFydGlhbC1cdTAwM2VlbXB0eSwgZXhjZWVkOiB3ZSBoYXZlIGVub3VnaCBwYXJ0aWFsIHNsYWJzIGFscmVhZHkuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBQYXJrZWQgc2xhYnMgYXJlIGFsc28gY291bnRlZCBhcyBwYXJ0aWFsIHNsYWJzLiBXZSBkb24mIzM5O3RcbiYjNDM7XHQgKiBrZWVwIGFuIGV4YWN0IGNvdW50IG9mIHBhcmtlZCBzbGFicywgc28gd2UgdHJlYXQgYW55IHBhcmtlZFxuJiM0MztcdCAqIHNsYWIgYXMgcm91Z2hseSBleGNlZWRpbmcuXG4gXHQgKi9cbi1cdGlmICh1bmxpa2VseSghbmV3LmludXNlIFx1MDAyNlx1MDAyNiBuLVx1MDAzZW5yX3BhcnRpYWwgXHUwMDNlPSBzLVx1MDAzZW1pbl9wYXJ0aWFsKSlcbi1cdFx0Z290byBzbGFiX2VtcHR5O1xuJiM0MztcdGlmICh1bmxpa2VseSghbmV3LmludXNlIFx1MDAyNlx1MDAyNiAobi1cdTAwM2Vucl9wYXJ0aWFsIFx1MDAzZT0gcy1cdTAwM2VtaW5fcGFydGlhbCB8fFxuJiM0MztcdFx0XHRcdCAgICAhbGxpc3RfZW1wdHkoXHUwMDI2bi1cdTAwM2VwYXJrZWRfc2xhYnMpKSkpIHtcbiYjNDM7XHRcdC8qIHBhcnRpYWwtXHUwMDNlZW1wdHksIG9ubGlzdCwgZXhjZWVkICovXG4mIzQzO1x0XHRpZiAobGlrZWx5KCF3YXNfZnVsbCkpIHtcbiYjNDM7XHRcdFx0cmVtb3ZlX3BhcnRpYWwobiwgc2xhYik7XG4mIzQzO1x0XHRcdHN0YXQocywgRlJFRV9SRU1PVkVfUEFSVElBTCk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHQvKiBlbHNlIGZ1bGwtXHUwMDNlZW1wdHksIGV4Y2VlZDogaXQgaXMgb24gbm8gbGlzdCB0byByZW1vdmUgZnJvbSAqL1xuJiM0MztcbiYjNDM7XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2bi1cdTAwM2VsaXN0X2xvY2ssIGZsYWdzKTtcbiYjNDM7XHRcdHN0YXQocywgRlJFRV9TTEFCKTtcbiYjNDM7XHRcdGRpc2NhcmRfc2xhYihzLCBzbGFiKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4gXG4gXHQvKlxuLVx0ICogT2JqZWN0cyBsZWZ0IGluIHRoZSBzbGFiLiBJZiBpdCB3YXMgbm90IG9uIHRoZSBwYXJ0aWFsIGxpc3QgYmVmb3JlXG4tXHQgKiB0aGVuIGFkZCBpdC5cbiYjNDM7XHQgKiBBdCB0aGlzIHBvaW50LCBvbmx5IHRocmVlIGNhc2VzIHJlbWFpbjpcbiYjNDM7XHQgKiAgIGZ1bGwtXHUwMDNlcGFydGlhbFxuJiM0MztcdCAqICAgZnVsbC1cdTAwM2VlbXB0eSwgbm90IGV4Y2VlZFxuJiM0MztcdCAqICAgcGFydGlhbC1cdTAwM2VlbXB0eSwgb25saXN0LCBub3QgZXhjZWVkXG4gXHQgKi9cbiYjNDM7XG4mIzQzO1x0LyogZnVsbC1cdTAwM2VwYXJ0aWFsOyBmdWxsLVx1MDAzZWVtcHR5LCBub3QgZXhjZWVkICovXG4gXHRpZiAodW5saWtlbHkod2FzX2Z1bGwpKSB7XG4gXHRcdGFkZF9wYXJ0aWFsKG4sIHNsYWIsIEFERF9UT19UQUlMKTtcbiBcdFx0c3RhdChzLCBGUkVFX0FERF9QQVJUSUFMKTtcbiBcdH1cbi1cdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2bi1cdTAwM2VsaXN0X2xvY2ssIGZsYWdzKTtcbi1cdHJldHVybjtcbi1cbi1zbGFiX2VtcHR5OlxuLVx0Lypcbi1cdCAqIFRoZSBzbGFiIGNvdWxkIGhhdmUgYSBzaW5nbGUgb2JqZWN0IGFuZCB0aHVzIGdvIGZyb20gZnVsbCB0byBlbXB0eSBpblxuLVx0ICogYSBzaW5nbGUgZnJlZSwgYnV0IG1vcmUgbGlrZWx5IGl0IHdhcyBvbiB0aGUgcGFydGlhbCBsaXN0LiBSZW1vdmUgaXQuXG4tXHQgKi9cbi1cdGlmIChsaWtlbHkoIXdhc19mdWxsKSkge1xuLVx0XHRyZW1vdmVfcGFydGlhbChuLCBzbGFiKTtcbi1cdFx0c3RhdChzLCBGUkVFX1JFTU9WRV9QQVJUSUFMKTtcbi1cdH1cbiYjNDM7XHQvKiBlbHNlIHBhcnRpYWwtXHUwMDNlZW1wdHksIG9ubGlzdCwgbm90IGV4Y2VlZDogaXQgc3RheXMgb24gcGFydGlhbCBsaXN0ICovXG4gXG4gXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNm4tXHUwMDNlbGlzdF9sb2NrLCBmbGFncyk7XG4tXHRzdGF0KHMsIEZSRUVfU0xBQik7XG4tXHRkaXNjYXJkX3NsYWIocywgc2xhYik7XG4gfVxuIFxuIC8qXG5AQCAtNzM1Nyw4ICYjNDM7NzU1OCwxMyBAQCBfX3JlZmlsbF9vYmplY3RzX2FueShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqKnAsIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG1pblxuIFxuIFx0XHRcdG4gPSBnZXRfbm9kZShzLCB6b25lX3RvX25pZCh6b25lKSk7XG4gXG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIFBhcmtlZCBzbGFicyBtYWtlIHRoZSBub2RlIHdvcnRoIHRyeWluZ1xuJiM0MztcdFx0XHQgKiBldmVuIGlmIG5yX3BhcnRpYWwgbG9va3MgbG93LlxuJiM0MztcdFx0XHQgKi9cbiBcdFx0XHRpZiAoIW4gfHwgIWNwdXNldF96b25lX2FsbG93ZWQoem9uZSwgZ2ZwKSB8fFxuLVx0XHRcdFx0XHRuLVx1MDAzZW5yX3BhcnRpYWwgXHUwMDNjPSBzLVx1MDAzZW1pbl9wYXJ0aWFsKVxuJiM0MztcdFx0XHRcdFx0KG4tXHUwMDNlbnJfcGFydGlhbCBcdTAwM2M9IHMtXHUwMDNlbWluX3BhcnRpYWwgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdFx0XHQgbGxpc3RfZW1wdHkoXHUwMDI2bi1cdTAwM2VwYXJrZWRfc2xhYnMpKSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRcdHIgPSBfX3JlZmlsbF9vYmplY3RzX25vZGUocywgcCwgZ2ZwLCBtaW4sIG1heCwgbixcbkBAIC03Njc5LDYgJiM0Mzs3ODg1LDggQEAgaW5pdF9rbWVtX2NhY2hlX25vZGUoc3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbilcbiBcdG4tXHUwMDNlbnJfcGFydGlhbCA9IDA7XG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZuLVx1MDAzZWxpc3RfbG9jayk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZuLVx1MDAzZXBhcnRpYWwpO1xuJiM0MztcdGluaXRfbGxpc3RfaGVhZChcdTAwMjZuLVx1MDAzZXBhcmtlZF9zbGFicyk7XG4mIzQzO1x0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2bi1cdTAwM2V1bnBhcmtfd29yaywgdW5wYXJrX3dvcmtfZm4pO1xuICNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xuIFx0YXRvbWljX2xvbmdfc2V0KFx1MDAyNm4tXHUwMDNlbnJfc2xhYnMsIDApO1xuIFx0YXRvbWljX2xvbmdfc2V0KFx1MDAyNm4tXHUwMDNldG90YWxfb2JqZWN0cywgMCk7XG5AQCAtNzgxMiw2ICYjNDM7ODAyMCw3IEBAIHN0YXRpYyB2b2lkIGZyZWVfa21lbV9jYWNoZV9ub2RlcyhzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbiBcdH1cbiBcbiBcdGZvcl9lYWNoX2ttZW1fY2FjaGVfbm9kZShzLCBub2RlLCBuKSB7XG4mIzQzO1x0XHRjYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoXHUwMDI2bi1cdTAwM2V1bnBhcmtfd29yayk7XG4gXHRcdHMtXHUwMDNlcGVyX25vZGVbbm9kZV0ubm9kZSA9IE5VTEw7XG4gXHRcdGttZW1fY2FjaGVfZnJlZShrbWVtX2NhY2hlX25vZGUsIG4pO1xuIFx0fVxuQEAgLTgxMTIsNiAmIzQzOzgzMjEsMTAgQEAgc3RhdGljIHZvaWQgZnJlZV9wYXJ0aWFsKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlICpuKVxuIFxuIFx0QlVHX09OKGlycXNfZGlzYWJsZWQoKSk7XG4gXHRzcGluX2xvY2tfaXJxKFx1MDAyNm4tXHUwMDNlbGlzdF9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0LyogVW5wYXJrIHNsYWJzIHNvIHRoZSB3YWxrIGNhbiBmaW5kIHRoZW0uICovXG4mIzQzO1x0dW5wYXJrX3NsYWJzKHMsIG4sIE5VTEwpO1xuJiM0MztcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzbGFiLCBoLCBcdTAwMjZuLVx1MDAzZXBhcnRpYWwsIHNsYWJfbGlzdCkge1xuIFx0XHRpZiAoIXNsYWItXHUwMDNlaW51c2UpIHtcbiBcdFx0XHRyZW1vdmVfcGFydGlhbChuLCBzbGFiKTtcbkBAIC04MzgzLDYgJiM0Mzs4NTk2LDkgQEAgc3RhdGljIGludCBfX2ttZW1fY2FjaGVfZG9fc2hyaW5rKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxuIFxuIFx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZuLVx1MDAzZWxpc3RfbG9jaywgZmxhZ3MpO1xuIFxuJiM0MztcdFx0LyogUGFya2VkIHNsYWJzIGFyZSBzaHJpbmsgY2FuZGlkYXRlcyBhcyB3ZWxsLiAqL1xuJiM0MztcdFx0dW5wYXJrX3NsYWJzKHMsIG4sIE5VTEwpO1xuJiM0MztcbiBcdFx0LypcbiBcdFx0ICogQnVpbGQgbGlzdHMgb2Ygc2xhYnMgdG8gZGlzY2FyZCBvciBwcm9tb3RlLlxuIFx0XHQgKlxuQEAgLTk1MjIsNiAmIzQzOzk3MzgsOSBAQCBTVEFUX0FUVFIoRlJFRV9GQVNUUEFUSCwgZnJlZV9mYXN0cGF0aCk7XG4gU1RBVF9BVFRSKEZSRUVfU0xPV1BBVEgsIGZyZWVfc2xvd3BhdGgpO1xuIFNUQVRfQVRUUihGUkVFX0FERF9QQVJUSUFMLCBmcmVlX2FkZF9wYXJ0aWFsKTtcbiBTVEFUX0FUVFIoRlJFRV9SRU1PVkVfUEFSVElBTCwgZnJlZV9yZW1vdmVfcGFydGlhbCk7XG4mIzQzO1NUQVRfQVRUUihQQVJLX1NMQUIsIHBhcmtfc2xhYik7XG4mIzQzO1NUQVRfQVRUUihVTlBBUktfU0xBQiwgdW5wYXJrX3NsYWIpO1xuJiM0MztTVEFUX0FUVFIoVU5QQVJLX0VWRU5ULCB1bnBhcmtfZXZlbnQpO1xuIFNUQVRfQVRUUihBTExPQ19TTEFCLCBhbGxvY19zbGFiKTtcbiBTVEFUX0FUVFIoQUxMT0NfTk9ERV9NSVNNQVRDSCwgYWxsb2Nfbm9kZV9taXNtYXRjaCk7XG4gU1RBVF9BVFRSKEZSRUVfU0xBQiwgZnJlZV9zbGFiKTtcbkBAIC05NjEwLDYgJiM0Mzs5ODI5LDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGUgKmNvbnN0IHNsYWJfYXR0cnNbXSA9IHtcbiBcdFx1MDAyNmZyZWVfc2xvd3BhdGhfYXR0ci5hdHRyLFxuIFx0XHUwMDI2ZnJlZV9hZGRfcGFydGlhbF9hdHRyLmF0dHIsXG4gXHRcdTAwMjZmcmVlX3JlbW92ZV9wYXJ0aWFsX2F0dHIuYXR0cixcbiYjNDM7XHRcdTAwMjZwYXJrX3NsYWJfYXR0ci5hdHRyLFxuJiM0MztcdFx1MDAyNnVucGFya19zbGFiX2F0dHIuYXR0cixcbiYjNDM7XHRcdTAwMjZ1bnBhcmtfZXZlbnRfYXR0ci5hdHRyLFxuIFx0XHUwMDI2YWxsb2Nfc2xhYl9hdHRyLmF0dHIsXG4gXHRcdTAwMjZhbGxvY19ub2RlX21pc21hdGNoX2F0dHIuYXR0cixcbiBcdFx1MDAyNmZyZWVfc2xhYl9hdHRyLmF0dHIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTU6NDc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fa21lbV9jYWNoZV9zaHJpbmsmIzM0OywKICAgICYjMzQ7X19rbWVtX2NhY2hlX3NodXRkb3duJiMzNDssCiAgICAmIzM0O19fa21lbV9jYWNoZV9lbXB0eSYjMzQ7LAogICAgJiMzNDtrbWVtX2NhY2hlX3NocmluayYjMzQ7LAogICAgJiMzNDtrbWVtX2NhY2hlX2Rlc3Ryb3kmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGxvY2tsZXNzIHBhcmtpbmcgbWVjaGFuaXNtIGZvciBzbGFicyBpbiB0aGUgU0xVQiBhbGxvY2F0b3ImIzM5O3MgZnJlZSBzbG93cGF0aCB0byByZWR1Y2UgbGlzdF9sb2NrIGNvbnRlbnRpb24uIFRoaXMgaXMgYSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWZmZWN0cyBzbGFiIGFsbG9jYXRpb24gYW5kIGZyZWVpbmcgbG9naWMuIEl0IGlzIHJlYWNoYWJsZSBieSBkZWZhdWx0IGFuZCBzaG91bGQgYmUgZnV6emVkLiBTaW5jZSBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIGFyZSBob3QgcGF0aHMsIHdlIGZvY3VzIG9uIGNhY2hlIHNocmlua2luZyBhbmQgZGVzdHJ1Y3Rpb24gcGF0aHMgd2hpY2ggYWxzbyBpbnRlcmFjdCB3aXRoIHRoZSBuZXcgdW5wYXJraW5nIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNWJiZThiZjIxMWZkNzBiZjJjYWEyOWViMzdmNzJkYjNkNjk2NDQ0NApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDI0IDE1OjQ3OjA1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vc2x1Yi5jIGIvbW0vc2x1Yi5jCmluZGV4IGIwY2QwNTcyZTJmMjYuLjI3YTc4ZDYzZjUzNzYgMTAwNjQ0Ci0tLSBhL21tL3NsdWIuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9zbHViLmMKQEAgLTQ5LDYgJiM0Mzs0OSw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvc29ydC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2lycV93b3JrLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgva3Byb2Jlcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9sbGlzdC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2RlYnVnZnMuaCZndDsKICNpbmNsdWRlICZsdDt0cmFjZS9ldmVudHMva21lbS5oJmd0OwogCkBAIC0xMjIsNiAmIzQzOzEyMyw4IEBACiAgKiAgIChOb3RlIHRoYXQgdGhlIHRvdGFsIG51bWJlciBvZiBzbGFicyBpcyBhbiBhdG9taWMgdmFsdWUgdGhhdCBtYXkgYmUKICAqICAgbW9kaWZpZWQgd2l0aG91dCB0YWtpbmcgdGhlIGxpc3QgbG9jaykuCiAgKgomIzQzOyAqICAgU2xhYnMgbWF5IGJlIHB1c2hlZCB0byBub2RlLSZndDtwYXJrZWRfc2xhYnMgd2l0aG91dCBhY3F1aXJpbmcgbGlzdF9sb2NrLgomIzQzOyAqCiAgKiAgIFRoZSBsaXN0X2xvY2sgaXMgYSBjZW50cmFsaXplZCBsb2NrIGFuZCB0aHVzIHdlIGF2b2lkIHRha2luZyBpdCBhcwogICogICBtdWNoIGFzIHBvc3NpYmxlLiBBcyBsb25nIGFzIFNMVUIgZG9lcyBub3QgaGF2ZSB0byBoYW5kbGUgcGFydGlhbAogICogICBzbGFicywgb3BlcmF0aW9ucyBjYW4gY29udGludWUgd2l0aG91dCBhbnkgY2VudHJhbGl6ZWQgbG9jay4KQEAgLTM2OCw2ICYjNDM7MzcxLDkgQEAgZW51bSBzdGF0X2l0ZW0gewogCUZSRUVfU0xPV1BBVEgsCQkvKiBGcmVlIHRvIGEgc2xhYiAqLwogCUZSRUVfQUREX1BBUlRJQUwsCS8qIEZyZWVpbmcgbW92ZXMgc2xhYiB0byBwYXJ0aWFsIGxpc3QgKi8KIAlGUkVFX1JFTU9WRV9QQVJUSUFMLAkvKiBGcmVlaW5nIHJlbW92ZXMgbGFzdCBvYmplY3QgKi8KJiM0MzsJUEFSS19TTEFCLAkJLyogU2xhYnMgcGFya2VkIG9udG8gdGhlIGxsaXN0IGJ5IGZyZWUgc2xvd3BhdGggKi8KJiM0MzsJVU5QQVJLX1NMQUIsCQkvKiBTbGFicyB1bnBhcmtlZCBmcm9tIHRoZSBsbGlzdCAqLwomIzQzOwlVTlBBUktfRVZFTlQsCQkvKiBVbnBhcmsgZXZlbnRzICovCiAJQUxMT0NfU0xBQiwJCS8qIE5ldyBzbGFiIGFjcXVpcmVkIGZyb20gcGFnZSBhbGxvY2F0b3IgKi8KIAlBTExPQ19OT0RFX01JU01BVENILAkvKiBSZXF1ZXN0ZWQgbm9kZSBkaWZmZXJlbnQgZnJvbSBjcHUgc2hlYWYgKi8KIAlGUkVFX1NMQUIsCQkvKiBTbGFiIGZyZWVkIHRvIHRoZSBwYWdlIGFsbG9jYXRvciAqLwpAQCAtNDYyLDYgJiM0Mzs0NjgsMTQgQEAgc3RydWN0IGttZW1fY2FjaGVfbm9kZSB7CiAJYXRvbWljX2xvbmdfdCB0b3RhbF9vYmplY3RzOwogCXN0cnVjdCBsaXN0X2hlYWQgZnVsbDsKICNlbmRpZgomIzQzOwkvKgomIzQzOwkgKiBJZiBuZWl0aGVyIHNoZWFmIHJlZmlsbCBub3IgdGhlIGFsbG9jIHNsb3dwYXRoIHBlcmZvcm1zIHRoZSB1bnBhcmssCiYjNDM7CSAqIHVucGFya193b3JrX2ZuIHRha2VzIGNhcmUgb2YgaXQuCiYjNDM7CSAqLwomIzQzOwlzdHJ1Y3QgZGVsYXllZF93b3JrIHVucGFya193b3JrOwomIzQzOwomIzQzOwkvKiBVc2VkIHRvIGxpbmsgcGFya2VkIHNsYWJzICovCiYjNDM7CXN0cnVjdCBsbGlzdF9oZWFkIHBhcmtlZF9zbGFicyBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOwogfTsKIAogc3RhdGljIGlubGluZSBzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlICpnZXRfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgaW50IG5vZGUpCkBAIC01MDksNiAmIzQzOzUyMywxMiBAQCBzdGF0aWMgbm9kZW1hc2tfdCBzbGFiX2Jhcm5fbm9kZXM7CiAgKi8KIHN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqZmx1c2h3cTsKIAomIzQzOy8qCiYjNDM7ICogQ2VpbGluZyBvbiBob3cgbG9uZyBzbGFicyBzdGF5IHBhcmtlZCB3aGVuIG5vIHNoZWFmIHJlZmlsbCBvciBhbGxvYwomIzQzOyAqIHNsb3dwYXRoIHVucGFya3MgdGhlbS4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIFVOUEFSS19ERUxBWQkoSFopCiYjNDM7CiBzdHJ1Y3Qgc2x1Yl9mbHVzaF93b3JrIHsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKIAlzdHJ1Y3Qga21lbV9jYWNoZSAqczsKQEAgLTM2MjMsNiAmIzQzOzM2NDMsMTIyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCByZW1vdmVfcGFydGlhbChzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlICpuLAogCWNsZWFyX25vZGVfcGFydGlhbF9zdGF0ZShuLCBzbGFiKTsKIH0KIAomIzQzOy8qCiYjNDM7ICogQSBzbGFiIHBhcmtlZCBvbiBuLSZndDtwYXJrZWRfc2xhYnMgaXMgbm90IG9uIHBhcnRpYWwgbGlzdCwgc28gaXRzIHNsYWJfbGlzdCBpcwomIzQzOyAqIGZyZWUgYW5kIHdlIHJldXNlIGl0IGFzIHRoZSBsbGlzdF9ub2RlLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IGxsaXN0X25vZGUgKnNsYWJfdG9fcGFya2VkX2xsbm9kZShzdHJ1Y3Qgc2xhYiAqc2xhYikKJiM0Mzt7CiYjNDM7CXJldHVybiAoc3RydWN0IGxsaXN0X25vZGUgKikmYW1wO3NsYWItJmd0O3NsYWJfbGlzdDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2xhYiAqcGFya2VkX2xsbm9kZV90b19zbGFiKHN0cnVjdCBsbGlzdF9ub2RlICpub2RlKQomIzQzO3sKJiM0MzsJcmV0dXJuIGNvbnRhaW5lcl9vZigoc3RydWN0IGxpc3RfaGVhZCAqKW5vZGUsIHN0cnVjdCBzbGFiLCBzbGFiX2xpc3QpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIE1vdmUgc2xhYnMgcGFya2VkIG9uIG4tJmd0O3BhcmtlZF9zbGFicyB0byBuLSZndDtwYXJ0aWFsLiBDYWxsZWQgd2l0aCB0aGUKJiM0MzsgKiBsaXN0X2xvY2sgaGVsZCwgYnkgdGhlIHBhdGhzIHRoYXQgY29uc3VtZSB0aGUgcGFydGlhbCBsaXN0LCBvbiBiZWhhbGYgb2YgdGhlCiYjNDM7ICogY3B1cyB0aGF0IGNvdWxkIG5vdCBnZXQgdGhlIGxvY2sgd2hlbiBwYXJraW5nLgomIzQzOyAqCiYjNDM7ICogSWYgQGRpc2NhcmQgaXMgbm90IE5VTEwsIHB1dCBlbXB0eSBzbGFicyBiZXlvbmQgbWluX3BhcnRpYWwgb24gQGRpc2NhcmQsIHRoZQomIzQzOyAqIGNhbGxlciBzaG91bGQgY2FsbCBkaXNjYXJkX3NsYWIoKSBhZnRlciBkcm9wcGluZyB0aGUgbG9jay4gIENhbGxlcnMgdGhhdCBtYXkKJiM0MzsgKiBub3QgZnJlZSBwYWdlcyBpbiB0aGVpciBjb250ZXh0IHNob3VsZCBwYXNzIE5VTEwuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgdW5wYXJrX3NsYWJzKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlICpuLAomIzQzOwkJCSBzdHJ1Y3QgbGlzdF9oZWFkICpkaXNjYXJkKQomIzQzO3sKJiM0MzsJc3RydWN0IGxsaXN0X25vZGUgKnBvcywgKm5leHQ7CiYjNDM7CXVuc2lnbmVkIGxvbmcgYWRkZWQgPSAwLCBkaXNjYXJkZWQgPSAwOwomIzQzOwl1bnNpZ25lZCBsb25nIGhlYWRyb29tID0gMDsKJiM0MzsJTElTVF9IRUFEKHRvX2FkZCk7CiYjNDM7CiYjNDM7CXNsYWJfbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO24tJmd0O2xpc3RfbG9jayk7CiYjNDM7CiYjNDM7CXBvcyA9IGxsaXN0X2RlbF9hbGwoJmFtcDtuLSZndDtwYXJrZWRfc2xhYnMpOwomIzQzOwlpZiAobGlrZWx5KCFwb3MpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBDYWxjdWxhdGUgaG93IG1hbnkgbW9yZSBzbGFicyB0aGUgcGFydGlhbCBsaXN0IHdhbnRzIGJlZm9yZSBpdCBoYXMKJiM0MzsJICogcmVhY2hlZCBtaW5fcGFydGlhbC4KJiM0MzsJICovCiYjNDM7CWlmIChzLSZndDttaW5fcGFydGlhbCAmZ3Q7IG4tJmd0O25yX3BhcnRpYWwpCiYjNDM7CQloZWFkcm9vbSA9IHMtJmd0O21pbl9wYXJ0aWFsIC0gbi0mZ3Q7bnJfcGFydGlhbDsKJiM0MzsKJiM0MzsJZm9yICg7IHBvczsgcG9zID0gbmV4dCkgewomIzQzOwkJc3RydWN0IHNsYWIgKnNsYWIgPSBwYXJrZWRfbGxub2RlX3RvX3NsYWIocG9zKTsKJiM0MzsJCXN0cnVjdCBmcmVlbGlzdF9jb3VudGVycyBmbGM7CiYjNDM7CiYjNDM7CQkvKgomIzQzOwkJICogQmFjayB1cCB0aGUgcG9pbnRlciwgYmVjYXVzZSB0aGUgbGlzdF9hZGRfdGFpbCgpIGJlbG93CiYjNDM7CQkgKiBvdmVyd3JpdGVzIHRoZSBsbGlzdCBsaW5rYWdlLgomIzQzOwkJICovCiYjNDM7CQluZXh0ID0gcG9zLSZndDtuZXh0OwomIzQzOwomIzQzOwkJaWYgKGRpc2NhcmQpIHsKJiM0MzsJCQlmbGMuY291bnRlcnMgPSBkYXRhX3JhY2UoUkVBRF9PTkNFKHNsYWItJmd0O2NvdW50ZXJzKSk7CiYjNDM7CQkJaWYgKCFmbGMuaW51c2UgJmFtcDsmYW1wOyBhZGRlZCAmZ3Q7PSBoZWFkcm9vbSkgewomIzQzOwkJCQlsaXN0X2FkZF90YWlsKCZhbXA7c2xhYi0mZ3Q7c2xhYl9saXN0LCBkaXNjYXJkKTsKJiM0MzsJCQkJZGlzY2FyZGVkJiM0MzsmIzQzOzsKJiM0MzsJCQkJY29udGludWU7CiYjNDM7CQkJfQomIzQzOwkJfQomIzQzOwomIzQzOwkJc2xhYl9zZXRfbm9kZV9wYXJ0aWFsKHNsYWIpOwomIzQzOwkJbGlzdF9hZGRfdGFpbCgmYW1wO3NsYWItJmd0O3NsYWJfbGlzdCwgJmFtcDt0b19hZGQpOwomIzQzOwkJYWRkZWQmIzQzOyYjNDM7OwomIzQzOwl9CiYjNDM7CiYjNDM7CW4tJmd0O25yX3BhcnRpYWwgJiM0Mzs9IGFkZGVkOwomIzQzOwlsaXN0X3NwbGljZV90YWlsKCZhbXA7dG9fYWRkLCAmYW1wO24tJmd0O3BhcnRpYWwpOwomIzQzOwomIzQzOwlzdGF0X2FkZChzLCBGUkVFX0FERF9QQVJUSUFMLCBhZGRlZCk7CiYjNDM7CXN0YXRfYWRkKHMsIFVOUEFSS19TTEFCLCBhZGRlZCAmIzQzOyBkaXNjYXJkZWQpOwomIzQzOwlpZiAodW5saWtlbHkoZGlzY2FyZGVkKSkKJiM0MzsJCXN0YXRfYWRkKHMsIEZSRUVfU0xBQiwgZGlzY2FyZGVkKTsKJiM0MzsJc3RhdChzLCBVTlBBUktfRVZFTlQpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFBhcmtlZCBzbGFicyBhcmUgbm9ybWFsbHkgdW5wYXJrZWQgYnkgc2hlYWYgcmVmaWxsIG9yIHRoZSBhbGxvYyBzbG93cGF0aCwgYnV0CiYjNDM7ICogd2hlbiB0aGUgc3lzdGVtIGV4cGVyaWVuY2VzIGEgaGVhdnkgYnVyc3Qgb2YgZnJlZXMsIGFicnVwdGx5IGdvZXMgaWRsZSwKJiM0MzsgKiBhbmQgbmVpdGhlciBzaGVhZiByZWZpbGwgbm9yIHRoZSBhbGxvYyBzbG93cGF0aCBpcyByZWFjaGVkLAomIzQzOyAqIHNvbWUgcGFya2VkIHNsYWJzIG1heSBiZSBsZWZ0IHN0cmFuZGVkIGluIHRoZSBwYXJrZWQgbGxpc3QuIFRoaXMgZnVuY3Rpb24KJiM0MzsgKiBzZXJ2ZXMgYXMgYSBsYXN0LXJlc29ydCBmYWxsYmFjay4KJiM0MzsgKiBUaGlzIHdvcmsgaXMgc2NoZWR1bGVkIGJ5IHRoZSBsbGlzdF9hZGQoKSB0aGF0IG1ha2VzIHRoZSBwYXJrZWQgbGxpc3Qgbm9uLWVtcHR5LgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHVucGFya193b3JrX2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrbWVtX2NhY2hlX25vZGUgKm4gPSBjb250YWluZXJfb2YodG9fZGVsYXllZF93b3JrKHdvcmspLAomIzQzOwkJCQkJCSBzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlLAomIzQzOwkJCQkJCSB1bnBhcmtfd29yayk7CiYjNDM7CXN0cnVjdCBsbGlzdF9ub2RlICpmaXJzdDsKJiM0MzsJc3RydWN0IGttZW1fY2FjaGUgKnM7CiYjNDM7CXN0cnVjdCBzbGFiICpzbGFiLCAqdDsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsJTElTVF9IRUFEKGRpc2NhcmQpOwomIzQzOwomIzQzOwlpZiAobGlrZWx5KGxsaXN0X2VtcHR5KCZhbXA7bi0mZ3Q7cGFya2VkX3NsYWJzKSkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7bi0mZ3Q7bGlzdF9sb2NrLCBmbGFncyk7CiYjNDM7CiYjNDM7CWZpcnN0ID0gUkVBRF9PTkNFKG4tJmd0O3BhcmtlZF9zbGFicy5maXJzdCk7CiYjNDM7CWlmICh1bmxpa2VseSghZmlyc3QpKSB7CiYjNDM7CQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7bi0mZ3Q7bGlzdF9sb2NrLCBmbGFncyk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsJcyA9IHBhcmtlZF9sbG5vZGVfdG9fc2xhYihmaXJzdCktJmd0O3NsYWJfY2FjaGU7CiYjNDM7CiYjNDM7CXVucGFya19zbGFicyhzLCBuLCAmYW1wO2Rpc2NhcmQpOwomIzQzOwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7bi0mZ3Q7bGlzdF9sb2NrLCBmbGFncyk7CiYjNDM7CiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzbGFiLCB0LCAmYW1wO2Rpc2NhcmQsIHNsYWJfbGlzdCkKJiM0MzsJCWRpc2NhcmRfc2xhYihzLCBzbGFiKTsKJiM0Mzt9CiYjNDM7CiAvKgogICogQ2FsbGVkIG9ubHkgZm9yIGttZW1fY2FjaGVfZGVidWcoKSBjYWNoZXMgaW5zdGVhZCBvZiByZW1vdmVfcGFydGlhbCgpLCB3aXRoIGEKICAqIHNsYWIgZnJvbSB0aGUgbi0mZ3Q7cGFydGlhbCBsaXN0LiBSZW1vdmUgb25seSBhIHNpbmdsZSBvYmplY3QgZnJvbSB0aGUgc2xhYiwgZG8KQEAgLTM4MTgsOSAmIzQzOzM5NTQsMTMgQEAgc3RhdGljIGJvb2wgZ2V0X3BhcnRpYWxfbm9kZV9idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLAogCXN0cnVjdCBzbGFiICpmaXJzdCA9IE5VTEwsICpsYXN0ID0gTlVMTDsKIAl1bnNpZ25lZCBpbnQgdG90YWxfZnJlZSA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsJTElTVF9IRUFEKGRpc2NhcmQpOwogCi0JLyogUmFjeSBjaGVjayB0byBhdm9pZCB0YWtpbmcgdGhlIGxvY2sgdW5uZWNlc3NhcmlseS4gKi8KLQlpZiAoIW4gfHwgZGF0YV9yYWNlKCFuLSZndDtucl9wYXJ0aWFsKSkKJiM0MzsJLyoKJiM0MzsJICogUmFjeSBjaGVjayB0byBhdm9pZCB0YWtpbmcgdGhlIGxvY2sgdW5uZWNlc3NhcmlseS4KJiM0MzsJICogVGhlIHBhcmtlZF9zbGFicyBsbGlzdCBtdXN0IGFsc28gYmUgYWNjb3VudGVkIGZvci4KJiM0MzsJICovCiYjNDM7CWlmICghbiB8fCAoIWRhdGFfcmFjZShuLSZndDtucl9wYXJ0aWFsKSAmYW1wOyZhbXA7IGxsaXN0X2VtcHR5KCZhbXA7bi0mZ3Q7cGFya2VkX3NsYWJzKSkpCiAJCXJldHVybiBmYWxzZTsKIAogCUlOSVRfTElTVF9IRUFEKCZhbXA7cGMtJmd0O3NsYWJzKTsKQEAgLTM4MzAsNiAmIzQzOzM5NzAsOSBAQCBzdGF0aWMgYm9vbCBnZXRfcGFydGlhbF9ub2RlX2J1bGsoc3RydWN0IGttZW1fY2FjaGUgKnMsCiAJZWxzZSBpZiAoIXNwaW5fdHJ5bG9ja19pcnFzYXZlKCZhbXA7bi0mZ3Q7bGlzdF9sb2NrLCBmbGFncykpCiAJCXJldHVybiBmYWxzZTsKIAomIzQzOwkvKiBJZiB0aGVyZSBhcmUgcGFya2VkIHNsYWJzLCBtb3ZlIHRoZW0gdG8gdGhlIHBhcnRpYWwgbGlzdCBmaXJzdC4gKi8KJiM0MzsJdW5wYXJrX3NsYWJzKHMsIG4sIGFsbG93X3NwaW4gPyAmYW1wO2Rpc2NhcmQgOiBOVUxMKTsKJiM0MzsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2xhYiwgc2xhYjIsICZhbXA7bi0mZ3Q7cGFydGlhbCwgc2xhYl9saXN0KSB7CiAJCXN0cnVjdCBmcmVlbGlzdF9jb3VudGVycyBmbGM7CiAJCXVuc2lnbmVkIGludCBzbGFiX2ZyZWU7CkBAIC0zODc0LDYgJiM0Mzs0MDE3LDEwIEBAIHN0YXRpYyBib29sIGdldF9wYXJ0aWFsX25vZGVfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywKIAkJCQkgICAgJmFtcDtsYXN0LSZndDtzbGFiX2xpc3QpOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO24tJmd0O2xpc3RfbG9jaywgZmxhZ3MpOwomIzQzOwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2xhYiwgc2xhYjIsICZhbXA7ZGlzY2FyZCwgc2xhYl9saXN0KQomIzQzOwkJZGlzY2FyZF9zbGFiKHMsIHNsYWIpOwomIzQzOwogCXJldHVybiB0b3RhbF9mcmVlICZndDsgMDsKIH0KIApAQCAtMzg4NSwyMyAmIzQzOzQwMzIsMjkgQEAgc3RhdGljIHZvaWQgKmdldF9mcm9tX3BhcnRpYWxfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywKIAkJCQkgICBnZnBfdCBnZnBfZmxhZ3MsCiAJCQkJICAgY29uc3Qgc3RydWN0IHNsYWJfYWxsb2NfY29udGV4dCAqYWMpCiB7CiYjNDM7CWJvb2wgYWxsb3dfc3BpbiA9IGFsbG9jX2ZsYWdzX2FsbG93X3NwaW5uaW5nKGFjLSZndDthbGxvY19mbGFncyk7CiAJc3RydWN0IHNsYWIgKnNsYWIsICpzbGFiMjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXZvaWQgKm9iamVjdCA9IE5VTEw7CiYjNDM7CUxJU1RfSEVBRChkaXNjYXJkKTsKIAogCS8qCiAJICogUmFjeSBjaGVjay4gSWYgd2UgbWlzdGFrZW5seSBzZWUgbm8gcGFydGlhbCBzbGFicyB0aGVuIHdlCiAJICoganVzdCBhbGxvY2F0ZSBhbiBlbXB0eSBzbGFiLiBJZiB3ZSBtaXN0YWtlbmx5IHRyeSB0byBnZXQgYQogCSAqIHBhcnRpYWwgc2xhYiBhbmQgdGhlcmUgaXMgbm9uZSBhdmFpbGFibGUgdGhlbiBnZXRfZnJvbV9wYXJ0aWFsKCkKLQkgKiB3aWxsIHJldHVybiBOVUxMLgomIzQzOwkgKiB3aWxsIHJldHVybiBOVUxMLiBBbHNvIHRha2UgdGhlIHBhcmtlZF9zbGFicyBsbGlzdCBpbnRvIGFjY291bnQuCiAJICovCi0JaWYgKCFuIHx8ICFuLSZndDtucl9wYXJ0aWFsKQomIzQzOwlpZiAoIW4gfHwgKCFkYXRhX3JhY2Uobi0mZ3Q7bnJfcGFydGlhbCkgJmFtcDsmYW1wOyBsbGlzdF9lbXB0eSgmYW1wO24tJmd0O3BhcmtlZF9zbGFicykpKQogCQlyZXR1cm4gTlVMTDsKIAotCWlmIChhbGxvY19mbGFnc19hbGxvd19zcGlubmluZyhhYy0mZ3Q7YWxsb2NfZmxhZ3MpKQomIzQzOwlpZiAoYWxsb3dfc3BpbikKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtuLSZndDtsaXN0X2xvY2ssIGZsYWdzKTsKIAllbHNlIGlmICghc3Bpbl90cnlsb2NrX2lycXNhdmUoJmFtcDtuLSZndDtsaXN0X2xvY2ssIGZsYWdzKSkKIAkJcmV0dXJuIE5VTEw7CiYjNDM7CiYjNDM7CS8qIElmIHRoZXJlIGFyZSBwYXJrZWQgc2xhYnMsIG1vdmUgdGhlbSB0byB0aGUgcGFydGlhbCBsaXN0IGZpcnN0LiAqLwomIzQzOwl1bnBhcmtfc2xhYnMocywgbiwgYWxsb3dfc3BpbiA/ICZhbXA7ZGlzY2FyZCA6IE5VTEwpOwomIzQzOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzbGFiLCBzbGFiMiwgJmFtcDtuLSZndDtwYXJ0aWFsLCBzbGFiX2xpc3QpIHsKIAogCQlzdHJ1Y3QgZnJlZWxpc3RfY291bnRlcnMgb2xkLCBuZXc7CkBAIC0zOTM5LDYgJiM0Mzs0MDkyLDEwIEBAIHN0YXRpYyB2b2lkICpnZXRfZnJvbV9wYXJ0aWFsX25vZGUoc3RydWN0IGttZW1fY2FjaGUgKnMsCiAJCWJyZWFrOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7bi0mZ3Q7bGlzdF9sb2NrLCBmbGFncyk7CiYjNDM7CiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzbGFiLCBzbGFiMiwgJmFtcDtkaXNjYXJkLCBzbGFiX2xpc3QpCiYjNDM7CQlkaXNjYXJkX3NsYWIocywgc2xhYik7CiYjNDM7CiAJcmV0dXJuIG9iamVjdDsKIH0KIApAQCAtMzk5NCw4ICYjNDM7NDE1MSwxMyBAQCBzdGF0aWMgdm9pZCAqZ2V0X2Zyb21fYW55X3BhcnRpYWwoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcF9mbGFncywKIAogCQkJbiA9IGdldF9ub2RlKHMsIHpvbmVfdG9fbmlkKHpvbmUpKTsKIAomIzQzOwkJCS8qCiYjNDM7CQkJICogUGFya2VkIHNsYWJzIG1ha2UgdGhlIG5vZGUgd29ydGggdmlzaXRpbmcgZXZlbiBpZgomIzQzOwkJCSAqIG5yX3BhcnRpYWwgbG9va3MgbG93LgomIzQzOwkJCSAqLwogCQkJaWYgKG4gJmFtcDsmYW1wOyBjcHVzZXRfem9uZV9hbGxvd2VkKHpvbmUsIGdmcF9mbGFncykgJmFtcDsmYW1wOwotCQkJCQluLSZndDtucl9wYXJ0aWFsICZndDsgcy0mZ3Q7bWluX3BhcnRpYWwpIHsKJiM0MzsJCQkJCShuLSZndDtucl9wYXJ0aWFsICZndDsgcy0mZ3Q7bWluX3BhcnRpYWwgfHwKJiM0MzsJCQkJCSAhbGxpc3RfZW1wdHkoJmFtcDtuLSZndDtwYXJrZWRfc2xhYnMpKSkgewogCiAJCQkJdm9pZCAqb2JqZWN0ID0gZ2V0X2Zyb21fcGFydGlhbF9ub2RlKHMsIG4sCiAJCQkJCQkJCWdmcF9mbGFncywgYWMpOwpAQCAtNTcxOSw3ICYjNDM7NTg4MSw3IEBAIHN0YXRpYyB2b2lkIF9fc2xhYl9mcmVlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwKIAkJCXVuc2lnbmVkIGxvbmcgYWRkcikKIAogewotCWJvb2wgd2FzX2Z1bGw7CiYjNDM7CWJvb2wgd2FzX2Z1bGwsIHBhcmsgPSBmYWxzZTsKIAlzdHJ1Y3QgZnJlZWxpc3RfY291bnRlcnMgb2xkLCBuZXc7CiAJc3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbiA9IE5VTEw7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTU3MzEsMTAgJiM0Mzs1ODkzLDExIEBAIHN0YXRpYyB2b2lkIF9fc2xhYl9mcmVlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwKIAl9CiAKIAlkbyB7Ci0JCWlmICh1bmxpa2VseShuKSkgewomIzQzOwkJaWYgKHVubGlrZWx5KG4gJmFtcDsmYW1wOyAhcGFyaykpCiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7bi0mZ3Q7bGlzdF9sb2NrLCBmbGFncyk7Ci0JCQluID0gTlVMTDsKLQkJfQomIzQzOwomIzQzOwkJcGFyayA9IGZhbHNlOwomIzQzOwkJbiA9IE5VTEw7CiAKIAkJb2xkLmZyZWVsaXN0ID0gc2xhYi0mZ3Q7ZnJlZWxpc3Q7CiAJCW9sZC5jb3VudGVycyA9IHNsYWItJmd0O2NvdW50ZXJzOwpAQCAtNTc0OCw3NiAmIzQzOzU5MTEsMTE0IEBAIHN0YXRpYyB2b2lkIF9fc2xhYl9mcmVlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwKIAkJbmV3LmludXNlIC09IGNudDsKIAogCQkvKgotCQkgKiBNaWdodCBuZWVkIHRvIGJlIHRha2VuIG9mZiAoZHVlIHRvIGJlY29taW5nIGVtcHR5KSBvciBhZGRlZAotCQkgKiB0byAoZHVlIHRvIG5vdCBiZWluZyBmdWxsIGFueW1vcmUpIHRoZSBwYXJ0aWFsIGxpc3QuCi0JCSAqIFVubGVzcyBpdCYjMzk7cyBmcm96ZW4uCiYjNDM7CQkgKiBwYXJ0aWFsLSZndDtwYXJ0aWFsOiB0aGUgc2xhYiB3YXMgb24gdGhlIG5vZGUgcGFydGlhbCBsaXN0IGFuZAomIzQzOwkJICogd2lsbCBzdGlsbCBzdGF5IHRoZXJlLCBzbyB3ZSBuZWVkIG5vIGxpc3QgaGFuZGxpbmcgYW5kIG5vCiYjNDM7CQkgKiBsaXN0X2xvY2suCiYjNDM7CQkgKgomIzQzOwkJICogTm90ZSB0aGF0ICYjMzQ7Y29udGludWU7JiMzNDsgaW4gYSBkby13aGlsZSBnb2VzIG9uIHRvIGV2YWx1YXRlIHRoZQomIzQzOwkJICogY29uZGl0aW9uIGJlbG93LCBzbyB3ZSBkbyBwZXJmb3JtIHRoZSBmcmVlbGlzdCB1cGRhdGUuCiAJCSAqLwotCQlpZiAoIW5ldy5pbnVzZSB8fCB3YXNfZnVsbCkgewomIzQzOwkJaWYgKCF3YXNfZnVsbCAmYW1wOyZhbXA7IG5ldy5pbnVzZSkKJiM0MzsJCQljb250aW51ZTsKIAotCQkJbiA9IGdldF9ub2RlKHMsIHNsYWJfbmlkKHNsYWIpKTsKJiM0MzsJCS8qCiYjNDM7CQkgKiBUaGUgc2xhYiBtaWdodCBuZWVkIHRvIGJlIHRha2VuIG9mZiAoZHVlIHRvIGJlY29taW5nIGVtcHR5KQomIzQzOwkJICogb3IgYWRkZWQgdG8gKGR1ZSB0byBub3QgYmVpbmcgZnVsbCBhbnltb3JlKSB0aGUgcGFydGlhbAomIzQzOwkJICogbGlzdC4KJiM0MzsJCSAqCiYjNDM7CQkgKiBGb3IgdGhlIGZ1bGwgLSZndDsgcGFydGlhbC9lbXB0eSB0cmFuc2l0aW9uLCB1c2UKJiM0MzsJCSAqIHNwaW5fdHJ5bG9ja19pcnFzYXZlKCkgYW5kIHRoZSBwYXJraW5nIG1lY2hhbmlzbSB0byByZWR1Y2UKJiM0MzsJCSAqIGxvY2sgY29udGVudGlvbi4KJiM0MzsJCSAqCiYjNDM7CQkgKiBJZiB0aGUgY21weGNoZyBkb2VzIG5vdCBzdWNjZWVkIHRoZW4gd2Ugd2lsbCByZXRyeS4KJiM0MzsJCSAqLwomIzQzOwkJbiA9IGdldF9ub2RlKHMsIHNsYWJfbmlkKHNsYWIpKTsKJiM0MzsKJiM0MzsJCWlmICghd2FzX2Z1bGwpIHsKIAkJCS8qCi0JCQkgKiBTcGVjdWxhdGl2ZWx5IGFjcXVpcmUgdGhlIGxpc3RfbG9jay4KLQkJCSAqIElmIHRoZSBjbXB4Y2hnIGRvZXMgbm90IHN1Y2NlZWQgdGhlbiB3ZSBtYXkKLQkJCSAqIGRyb3AgdGhlIGxpc3RfbG9jayB3aXRob3V0IGFueSBwcm9jZXNzaW5nLgotCQkJICoKLQkJCSAqIE90aGVyd2lzZSB0aGUgbGlzdF9sb2NrIHdpbGwgc3luY2hyb25pemUgd2l0aAotCQkJICogb3RoZXIgcHJvY2Vzc29ycyB1cGRhdGluZyB0aGUgbGlzdCBvZiBzbGFicy4KJiM0MzsJCQkgKiBwYXJ0aWFsLSZndDtlbXB0eTogc3BlY3VsYXRpdmVseSBhY3F1aXJlIGxpc3RfbG9jawomIzQzOwkJCSAqIHByaW9yIHRvIGNtcHhjaGcoKSwgYXMgcGVyZm9ybWluZyBjbXB4Y2hnKCkgYmVmb3JlCiYjNDM7CQkJICogbG9jayBhY3F1aXNpdGlvbiByYWNlcyB3aXRoIGNvbmN1cnJlbnQgb3BlcmF0aW9ucwomIzQzOwkJCSAqIChlLmcuLCB0aGUgc2hyaW5rZXIpLgogCQkJICovCiAJCQlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO24tJmd0O2xpc3RfbG9jaywgZmxhZ3MpOwotCi0JCQlvbl9ub2RlX3BhcnRpYWwgPSBzbGFiX3Rlc3Rfbm9kZV9wYXJ0aWFsKHNsYWIpOwomIzQzOwkJfSBlbHNlIGlmICghc3Bpbl90cnlsb2NrX2lycXNhdmUoJmFtcDtuLSZndDtsaXN0X2xvY2ssIGZsYWdzKSkgewomIzQzOwkJCS8qCiYjNDM7CQkJICogZnVsbC0mZ3Q7cGFydGlhbC9lbXB0eTogdGhlIHNsYWIgaXMgZnVsbCwgc28gaXQgaXMgb24KJiM0MzsJCQkgKiBubyBsaXN0OyBpZiB0aGUgbGlzdF9sb2NrIGlzIGNvbnRlbmRlZCwgdGhlbiB3ZQomIzQzOwkJCSAqIHBhcmsgdGhlIHNsYWIgd2l0aG91dCB3YWl0aW5nIGZvciB0aGUgbG9jay4KJiM0MzsJCQkgKi8KJiM0MzsJCQlwYXJrID0gdHJ1ZTsKIAkJfQogCiAJfSB3aGlsZSAoIXNsYWJfdXBkYXRlX2ZyZWVsaXN0KHMsIHNsYWIsICZhbXA7b2xkLCAmYW1wO25ldywgJiMzNDtfX3NsYWJfZnJlZSYjMzQ7KSk7CiAKLQlpZiAobGlrZWx5KCFuKSkgewotCQkvKgotCQkgKiBXZSBkaWRuJiMzOTt0IHRha2UgdGhlIGxpc3RfbG9jayBiZWNhdXNlIHRoZSBzbGFiIHdhcyBhbHJlYWR5IG9uCi0JCSAqIHRoZSBwYXJ0aWFsIGxpc3QgYW5kIHdpbGwgcmVtYWluIHRoZXJlLgotCQkgKi8KJiM0MzsJLyogcGFydGlhbC0mZ3Q7cGFydGlhbDogd2UgZGlkbiYjMzk7dCB0YWtlIHRoZSBsaXN0X2xvY2suICovCiYjNDM7CWlmIChsaWtlbHkoIW4pKQogCQlyZXR1cm47Ci0JfQogCiAJLyoKLQkgKiBUaGlzIHNsYWIgd2FzIHBhcnRpYWxseSBlbXB0eSBidXQgbm90IG9uIHRoZSBwZXItbm9kZSBwYXJ0aWFsIGxpc3QsCi0JICogaW4gd2hpY2ggY2FzZSB3ZSBzaG91bGRuJiMzOTt0IG1hbmlwdWxhdGUgaXRzIGxpc3QsIGp1c3QgcmV0dXJuLgomIzQzOwkgKiBQYXJrIHRoZSBzbGFiLiBJZiB0aGlzIHBhcmsgbWFrZXMgdGhlIHBhcmtlZCBsbGlzdCBub24tZW1wdHksCiYjNDM7CSAqIHRoZW4gc2NoZWR1bGUgdW5wYXJrX3dvcmsuCiAJICovCiYjNDM7CWlmICh1bmxpa2VseShwYXJrKSkgewomIzQzOwkJaWYgKGxsaXN0X2FkZChzbGFiX3RvX3BhcmtlZF9sbG5vZGUoc2xhYiksICZhbXA7bi0mZ3Q7cGFya2VkX3NsYWJzKSkKJiM0MzsJCQlxdWV1ZV9kZWxheWVkX3dvcmsoZmx1c2h3cSwgJmFtcDtuLSZndDt1bnBhcmtfd29yaywKJiM0MzsJCQkJCSAgIFVOUEFSS19ERUxBWSk7CiYjNDM7CQlzdGF0KHMsIFBBUktfU0xBQik7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJb25fbm9kZV9wYXJ0aWFsID0gc2xhYl90ZXN0X25vZGVfcGFydGlhbChzbGFiKTsKJiM0MzsKIAlpZiAoIXdhc19mdWxsICZhbXA7JmFtcDsgIW9uX25vZGVfcGFydGlhbCkgewomIzQzOwkJLyoKJiM0MzsJCSAqIHBhcnRpYWwtJmd0O2VtcHR5LCBvZmZsaXN0OiB0aGUgc2xhYiBoYXMgYmVlbiB0YWtlbiBvZmYgdGhlCiYjNDM7CQkgKiBwYXJ0aWFsIGxpc3QgYnkgYSBidWxrIHJlZmlsbCwgb3IgcGFya2VkIGR1cmluZyBpdHMgZnVsbCAtJmd0OwomIzQzOwkJICogcGFydGlhbC9lbXB0eSB0cmFuc2l0aW9uLiBJdCB3aWxsIGJlIHB1dCBiYWNrIGJ5IG90aGVyIHBhdGhzLAomIzQzOwkJICogc28gdGhpcyBzbGFiJiMzOTtzIGxpc3QgaGFuZGxpbmcgaXMgbm90IG91cnMgdG8gZG8uCiYjNDM7CQkgKi8KIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO24tJmd0O2xpc3RfbG9jaywgZmxhZ3MpOwogCQlyZXR1cm47CiAJfQogCiAJLyoKLQkgKiBJZiBzbGFiIGJlY2FtZSBlbXB0eSwgc2hvdWxkIHdlIGFkZC9rZWVwIGl0IG9uIHRoZSBwYXJ0aWFsIGxpc3Qgb3Igd2UKLQkgKiBoYXZlIGVub3VnaD8KJiM0MzsJICogZnVsbC9wYXJ0aWFsLSZndDtlbXB0eSwgZXhjZWVkOiB3ZSBoYXZlIGVub3VnaCBwYXJ0aWFsIHNsYWJzIGFscmVhZHkuCiYjNDM7CSAqCiYjNDM7CSAqIFBhcmtlZCBzbGFicyBhcmUgYWxzbyBjb3VudGVkIGFzIHBhcnRpYWwgc2xhYnMuIFdlIGRvbiYjMzk7dAomIzQzOwkgKiBrZWVwIGFuIGV4YWN0IGNvdW50IG9mIHBhcmtlZCBzbGFicywgc28gd2UgdHJlYXQgYW55IHBhcmtlZAomIzQzOwkgKiBzbGFiIGFzIHJvdWdobHkgZXhjZWVkaW5nLgogCSAqLwotCWlmICh1bmxpa2VseSghbmV3LmludXNlICZhbXA7JmFtcDsgbi0mZ3Q7bnJfcGFydGlhbCAmZ3Q7PSBzLSZndDttaW5fcGFydGlhbCkpCi0JCWdvdG8gc2xhYl9lbXB0eTsKJiM0MzsJaWYgKHVubGlrZWx5KCFuZXcuaW51c2UgJmFtcDsmYW1wOyAobi0mZ3Q7bnJfcGFydGlhbCAmZ3Q7PSBzLSZndDttaW5fcGFydGlhbCB8fAomIzQzOwkJCQkgICAgIWxsaXN0X2VtcHR5KCZhbXA7bi0mZ3Q7cGFya2VkX3NsYWJzKSkpKSB7CiYjNDM7CQkvKiBwYXJ0aWFsLSZndDtlbXB0eSwgb25saXN0LCBleGNlZWQgKi8KJiM0MzsJCWlmIChsaWtlbHkoIXdhc19mdWxsKSkgewomIzQzOwkJCXJlbW92ZV9wYXJ0aWFsKG4sIHNsYWIpOwomIzQzOwkJCXN0YXQocywgRlJFRV9SRU1PVkVfUEFSVElBTCk7CiYjNDM7CQl9CiYjNDM7CQkvKiBlbHNlIGZ1bGwtJmd0O2VtcHR5LCBleGNlZWQ6IGl0IGlzIG9uIG5vIGxpc3QgdG8gcmVtb3ZlIGZyb20gKi8KJiM0MzsKJiM0MzsJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtuLSZndDtsaXN0X2xvY2ssIGZsYWdzKTsKJiM0MzsJCXN0YXQocywgRlJFRV9TTEFCKTsKJiM0MzsJCWRpc2NhcmRfc2xhYihzLCBzbGFiKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQogCiAJLyoKLQkgKiBPYmplY3RzIGxlZnQgaW4gdGhlIHNsYWIuIElmIGl0IHdhcyBub3Qgb24gdGhlIHBhcnRpYWwgbGlzdCBiZWZvcmUKLQkgKiB0aGVuIGFkZCBpdC4KJiM0MzsJICogQXQgdGhpcyBwb2ludCwgb25seSB0aHJlZSBjYXNlcyByZW1haW46CiYjNDM7CSAqICAgZnVsbC0mZ3Q7cGFydGlhbAomIzQzOwkgKiAgIGZ1bGwtJmd0O2VtcHR5LCBub3QgZXhjZWVkCiYjNDM7CSAqICAgcGFydGlhbC0mZ3Q7ZW1wdHksIG9ubGlzdCwgbm90IGV4Y2VlZAogCSAqLwomIzQzOwomIzQzOwkvKiBmdWxsLSZndDtwYXJ0aWFsOyBmdWxsLSZndDtlbXB0eSwgbm90IGV4Y2VlZCAqLwogCWlmICh1bmxpa2VseSh3YXNfZnVsbCkpIHsKIAkJYWRkX3BhcnRpYWwobiwgc2xhYiwgQUREX1RPX1RBSUwpOwogCQlzdGF0KHMsIEZSRUVfQUREX1BBUlRJQUwpOwogCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7bi0mZ3Q7bGlzdF9sb2NrLCBmbGFncyk7Ci0JcmV0dXJuOwotCi1zbGFiX2VtcHR5OgotCS8qCi0JICogVGhlIHNsYWIgY291bGQgaGF2ZSBhIHNpbmdsZSBvYmplY3QgYW5kIHRodXMgZ28gZnJvbSBmdWxsIHRvIGVtcHR5IGluCi0JICogYSBzaW5nbGUgZnJlZSwgYnV0IG1vcmUgbGlrZWx5IGl0IHdhcyBvbiB0aGUgcGFydGlhbCBsaXN0LiBSZW1vdmUgaXQuCi0JICovCi0JaWYgKGxpa2VseSghd2FzX2Z1bGwpKSB7Ci0JCXJlbW92ZV9wYXJ0aWFsKG4sIHNsYWIpOwotCQlzdGF0KHMsIEZSRUVfUkVNT1ZFX1BBUlRJQUwpOwotCX0KJiM0MzsJLyogZWxzZSBwYXJ0aWFsLSZndDtlbXB0eSwgb25saXN0LCBub3QgZXhjZWVkOiBpdCBzdGF5cyBvbiBwYXJ0aWFsIGxpc3QgKi8KIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtuLSZndDtsaXN0X2xvY2ssIGZsYWdzKTsKLQlzdGF0KHMsIEZSRUVfU0xBQik7Ci0JZGlzY2FyZF9zbGFiKHMsIHNsYWIpOwogfQogCiAvKgpAQCAtNzM1Nyw4ICYjNDM7NzU1OCwxMyBAQCBfX3JlZmlsbF9vYmplY3RzX2FueShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqKnAsIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG1pbgogCiAJCQluID0gZ2V0X25vZGUocywgem9uZV90b19uaWQoem9uZSkpOwogCiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBQYXJrZWQgc2xhYnMgbWFrZSB0aGUgbm9kZSB3b3J0aCB0cnlpbmcKJiM0MzsJCQkgKiBldmVuIGlmIG5yX3BhcnRpYWwgbG9va3MgbG93LgomIzQzOwkJCSAqLwogCQkJaWYgKCFuIHx8ICFjcHVzZXRfem9uZV9hbGxvd2VkKHpvbmUsIGdmcCkgfHwKLQkJCQkJbi0mZ3Q7bnJfcGFydGlhbCAmbHQ7PSBzLSZndDttaW5fcGFydGlhbCkKJiM0MzsJCQkJCShuLSZndDtucl9wYXJ0aWFsICZsdDs9IHMtJmd0O21pbl9wYXJ0aWFsICZhbXA7JmFtcDsKJiM0MzsJCQkJCSBsbGlzdF9lbXB0eSgmYW1wO24tJmd0O3BhcmtlZF9zbGFicykpKQogCQkJCWNvbnRpbnVlOwogCiAJCQlyID0gX19yZWZpbGxfb2JqZWN0c19ub2RlKHMsIHAsIGdmcCwgbWluLCBtYXgsIG4sCkBAIC03Njc5LDYgJiM0Mzs3ODg1LDggQEAgaW5pdF9rbWVtX2NhY2hlX25vZGUoc3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbikKIAluLSZndDtucl9wYXJ0aWFsID0gMDsKIAlzcGluX2xvY2tfaW5pdCgmYW1wO24tJmd0O2xpc3RfbG9jayk7CiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtuLSZndDtwYXJ0aWFsKTsKJiM0MzsJaW5pdF9sbGlzdF9oZWFkKCZhbXA7bi0mZ3Q7cGFya2VkX3NsYWJzKTsKJiM0MzsJSU5JVF9ERUxBWUVEX1dPUksoJmFtcDtuLSZndDt1bnBhcmtfd29yaywgdW5wYXJrX3dvcmtfZm4pOwogI2lmZGVmIENPTkZJR19TTFVCX0RFQlVHCiAJYXRvbWljX2xvbmdfc2V0KCZhbXA7bi0mZ3Q7bnJfc2xhYnMsIDApOwogCWF0b21pY19sb25nX3NldCgmYW1wO24tJmd0O3RvdGFsX29iamVjdHMsIDApOwpAQCAtNzgxMiw2ICYjNDM7ODAyMCw3IEBAIHN0YXRpYyB2b2lkIGZyZWVfa21lbV9jYWNoZV9ub2RlcyhzdHJ1Y3Qga21lbV9jYWNoZSAqcykKIAl9CiAKIAlmb3JfZWFjaF9rbWVtX2NhY2hlX25vZGUocywgbm9kZSwgbikgewomIzQzOwkJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZhbXA7bi0mZ3Q7dW5wYXJrX3dvcmspOwogCQlzLSZndDtwZXJfbm9kZVtub2RlXS5ub2RlID0gTlVMTDsKIAkJa21lbV9jYWNoZV9mcmVlKGttZW1fY2FjaGVfbm9kZSwgbik7CiAJfQpAQCAtODExMiw2ICYjNDM7ODMyMSwxMCBAQCBzdGF0aWMgdm9pZCBmcmVlX3BhcnRpYWwoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBrbWVtX2NhY2hlX25vZGUgKm4pCiAKIAlCVUdfT04oaXJxc19kaXNhYmxlZCgpKTsKIAlzcGluX2xvY2tfaXJxKCZhbXA7bi0mZ3Q7bGlzdF9sb2NrKTsKJiM0MzsKJiM0MzsJLyogVW5wYXJrIHNsYWJzIHNvIHRoZSB3YWxrIGNhbiBmaW5kIHRoZW0uICovCiYjNDM7CXVucGFya19zbGFicyhzLCBuLCBOVUxMKTsKJiM0MzsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2xhYiwgaCwgJmFtcDtuLSZndDtwYXJ0aWFsLCBzbGFiX2xpc3QpIHsKIAkJaWYgKCFzbGFiLSZndDtpbnVzZSkgewogCQkJcmVtb3ZlX3BhcnRpYWwobiwgc2xhYik7CkBAIC04MzgzLDYgJiM0Mzs4NTk2LDkgQEAgc3RhdGljIGludCBfX2ttZW1fY2FjaGVfZG9fc2hyaW5rKHN0cnVjdCBrbWVtX2NhY2hlICpzKQogCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7bi0mZ3Q7bGlzdF9sb2NrLCBmbGFncyk7CiAKJiM0MzsJCS8qIFBhcmtlZCBzbGFicyBhcmUgc2hyaW5rIGNhbmRpZGF0ZXMgYXMgd2VsbC4gKi8KJiM0MzsJCXVucGFya19zbGFicyhzLCBuLCBOVUxMKTsKJiM0MzsKIAkJLyoKIAkJICogQnVpbGQgbGlzdHMgb2Ygc2xhYnMgdG8gZGlzY2FyZCBvciBwcm9tb3RlLgogCQkgKgpAQCAtOTUyMiw2ICYjNDM7OTczOCw5IEBAIFNUQVRfQVRUUihGUkVFX0ZBU1RQQVRILCBmcmVlX2Zhc3RwYXRoKTsKIFNUQVRfQVRUUihGUkVFX1NMT1dQQVRILCBmcmVlX3Nsb3dwYXRoKTsKIFNUQVRfQVRUUihGUkVFX0FERF9QQVJUSUFMLCBmcmVlX2FkZF9wYXJ0aWFsKTsKIFNUQVRfQVRUUihGUkVFX1JFTU9WRV9QQVJUSUFMLCBmcmVlX3JlbW92ZV9wYXJ0aWFsKTsKJiM0MztTVEFUX0FUVFIoUEFSS19TTEFCLCBwYXJrX3NsYWIpOwomIzQzO1NUQVRfQVRUUihVTlBBUktfU0xBQiwgdW5wYXJrX3NsYWIpOwomIzQzO1NUQVRfQVRUUihVTlBBUktfRVZFTlQsIHVucGFya19ldmVudCk7CiBTVEFUX0FUVFIoQUxMT0NfU0xBQiwgYWxsb2Nfc2xhYik7CiBTVEFUX0FUVFIoQUxMT0NfTk9ERV9NSVNNQVRDSCwgYWxsb2Nfbm9kZV9taXNtYXRjaCk7CiBTVEFUX0FUVFIoRlJFRV9TTEFCLCBmcmVlX3NsYWIpOwpAQCAtOTYxMCw2ICYjNDM7OTgyOSw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlICpjb25zdCBzbGFiX2F0dHJzW10gPSB7CiAJJmFtcDtmcmVlX3Nsb3dwYXRoX2F0dHIuYXR0ciwKIAkmYW1wO2ZyZWVfYWRkX3BhcnRpYWxfYXR0ci5hdHRyLAogCSZhbXA7ZnJlZV9yZW1vdmVfcGFydGlhbF9hdHRyLmF0dHIsCiYjNDM7CSZhbXA7cGFya19zbGFiX2F0dHIuYXR0ciwKJiM0MzsJJmFtcDt1bnBhcmtfc2xhYl9hdHRyLmF0dHIsCiYjNDM7CSZhbXA7dW5wYXJrX2V2ZW50X2F0dHIuYXR0ciwKIAkmYW1wO2FsbG9jX3NsYWJfYXR0ci5hdHRyLAogCSZhbXA7YWxsb2Nfbm9kZV9taXNtYXRjaF9hdHRyLmF0dHIsCiAJJmFtcDtmcmVlX3NsYWJfYXR0ci5hdHRyLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNTo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTg4CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMzU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIENvcmUgU0xVQiBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IGZ1bmRhbWVudGFsbHkgYWx0ZXJzIHRoZSBTTFVCIGFsbG9jYXRvciwgc3BlY2lmaWNhbGx5IHRoZSBgbW0vc2x1Yi5jYCBmaWxlLiBUaGlzIGludHJvZHVjZXMgYSBuZXcgbWV0aG9kIGZvciAmIzM0O3BhcmtpbmcmIzM0OyBzbGFicyBvbiBhIGxvY2tsZXNzIGxpc3QgKGBsbGlzdGApIHdpdGhpbiB0aGUgZnJlZSBzbG93cGF0aCwgd2hpY2ggaXMgYSBzbWFydCBtb3ZlIHRvIG1pdGlnYXRlIGNvbnRlbnRpb24gb24gdGhlIGBsaXN0X2xvY2tgLiBUaGlzIGlzIGEgcHJldHR5IHNpZ25pZmljYW50IGNoYW5nZSwgcmVhbGx5IGRpZ2dpbmcgaW50byBhIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29tcG9uZW50LiBJdOKAmXMgYWRkaW5nIGBwYXJrZWRfc2xhYnNgIHRvIHRoZSBga21lbV9jYWNoZV9ub2RlYCBzdHJ1Y3R1cmUgYW5kIGEgZGVsYXllZCB3b3JrIGl0ZW0sIGB1bnBhcmtfd29ya2AsIHRvIGhhbmRsZSB1bnBhcmtpbmcgc2xhYnMgaWYgb3RoZXIgcHJvY2Vzc2VzIGRvbiYjMzk7dCB0YWtlIGNhcmUgb2YgaXQuIFRoZSBwYXRjaCB0b3VjaGVzIGEgd2hvbGUgaG9zdCBvZiBmdW5jdGlvbnM6IGBfX3NsYWJfZnJlZWAsIGBnZXRfcGFydGlhbF9ub2RlX2J1bGtgLCBgZ2V0X2Zyb21fcGFydGlhbF9ub2RlYCwgYGdldF9mcm9tX2FueV9wYXJ0aWFsYCwgYF9fcmVmaWxsX29iamVjdHNfYW55YCwgYGZyZWVfcGFydGlhbGAsIGFuZCBgX19rbWVtX2NhY2hlX2RvX3Nocmlua2AuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGRlbWFuZHMgY2FyZWZ1bCBmdXp6aW5nLiBUaGlzIGxldmVsIG9mIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbW9kaWZpY2F0aW9ucyAqYWx3YXlzKiB3YXJyYW50cyBpbnRlbnNlIHNjcnV0aW55LgoKTm93LCBsZXQmIzM5O3Mgc2VlIGFib3V0IHRoZSBjb25maWd1cmF0aW9uLiBTTFVCIGlzIHRoZSBkZWZhdWx0IGFsbG9jYXRvciB0aGVzZSBkYXlzLCByaWdodD8gTGV0IG1lIGp1c3QgbWFrZSBzdXJlIHRoZXJlIGFyZSBubyAqc3BlY2lmaWMqIGNvbmZpZyBvcHRpb25zIHRoYXQgdGhpcyBwYXRjaCBtaWdodCBiZSBnYXRlZCBiZWhpbmQuIE9rYXksIHNvIGl04oCZcyBtb2RpZnlpbmcgYG1tL3NsdWIuY2AgLSBlYXN5IGVub3VnaCB0byBjaGVjay4gYENPTkZJR19TTFVCYCBpcyB0aGUgcHJpbWFyeSBvbmUsIGFuZCBpdCYjMzk7cyBhbG1vc3QgYWx3YXlzIGVuYWJsZWQgbm93IHRoYXQgYENPTkZJR19TTEFCYCBpcyBoaXN0b3J5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZG9uJiMzOTt0IG1pc3MgYW55dGhpbmcgdGhvdWdoLiBgQ09ORklHX1NMVUJfREVCVUdg4oCmIHRoZSBwYXRjaCBzZWVtcyB0byB0b3VjaCBzb21lIHN0YXRzLCBidXQgbm90IHN0cmljdGx5IHVuZGVyIHRoYXQgb3B0aW9uLiBBaCwgcmlnaHQsIHRoZSBzdGF0cyBhcmUgcHJvYmFibHkgdW5kZXIgYENPTkZJR19TTFVCX1NUQVRTYC4gSeKAmWxsIGRvdWJsZS1jaGVjayBgbW0vc2x1Yi5jYCBmb3IgYFNUQVRfQVRUUmAgdG8gbWFrZSBzdXJlLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBwaWN0dXJlIG9mIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNTo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtTVEFUX0FUVFImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9zbHViLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc2x1Yi5jPTk3MTA9c3RhdGljIHZvaWQgY2xlYXJfc3RhdChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZW51bSBzdGF0X2l0ZW0gc2kpXG4tLVxubW0vc2x1Yi5jLTk3MTctXG5tbS9zbHViLmM6OTcxODojZGVmaW5lIFNUQVRfQVRUUihzaSwgdGV4dCkgXHRcdFx0XHRcdFxcXG5tbS9zbHViLmMtOTcxOS1zdGF0aWMgc3NpemVfdCB0ZXh0IyNfc2hvdyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgY2hhciAqYnVmKVx0XFxcbi0tXG5tbS9zbHViLmM9OTczMT1TTEFCX0FUVFIodGV4dCk7XHRcdFx0XHRcdFx0XFxcbm1tL3NsdWIuYy05NzMyLVxubW0vc2x1Yi5jOjk3MzM6U1RBVF9BVFRSKEFMTE9DX0ZBU1RQQVRILCBhbGxvY19mYXN0cGF0aCk7XG5tbS9zbHViLmM6OTczNDpTVEFUX0FUVFIoQUxMT0NfU0xPV1BBVEgsIGFsbG9jX3Nsb3dwYXRoKTtcbm1tL3NsdWIuYzo5NzM1OlNUQVRfQVRUUihGUkVFX1JDVV9TSEVBRiwgZnJlZV9yY3Vfc2hlYWYpO1xubW0vc2x1Yi5jOjk3MzY6U1RBVF9BVFRSKEZSRUVfUkNVX1NIRUFGX0ZBSUwsIGZyZWVfcmN1X3NoZWFmX2ZhaWwpO1xubW0vc2x1Yi5jOjk3Mzc6U1RBVF9BVFRSKEZSRUVfRkFTVFBBVEgsIGZyZWVfZmFzdHBhdGgpO1xubW0vc2x1Yi5jOjk3Mzg6U1RBVF9BVFRSKEZSRUVfU0xPV1BBVEgsIGZyZWVfc2xvd3BhdGgpO1xubW0vc2x1Yi5jOjk3Mzk6U1RBVF9BVFRSKEZSRUVfQUREX1BBUlRJQUwsIGZyZWVfYWRkX3BhcnRpYWwpO1xubW0vc2x1Yi5jOjk3NDA6U1RBVF9BVFRSKEZSRUVfUkVNT1ZFX1BBUlRJQUwsIGZyZWVfcmVtb3ZlX3BhcnRpYWwpO1xubW0vc2x1Yi5jOjk3NDE6U1RBVF9BVFRSKFBBUktfU0xBQiwgcGFya19zbGFiKTtcbm1tL3NsdWIuYzo5NzQyOlNUQVRfQVRUUihVTlBBUktfU0xBQiwgdW5wYXJrX3NsYWIpO1xubW0vc2x1Yi5jOjk3NDM6U1RBVF9BVFRSKFVOUEFSS19FVkVOVCwgdW5wYXJrX2V2ZW50KTtcbm1tL3NsdWIuYzo5NzQ0OlNUQVRfQVRUUihBTExPQ19TTEFCLCBhbGxvY19zbGFiKTtcbm1tL3NsdWIuYzo5NzQ1OlNUQVRfQVRUUihBTExPQ19OT0RFX01JU01BVENILCBhbGxvY19ub2RlX21pc21hdGNoKTtcbm1tL3NsdWIuYzo5NzQ2OlNUQVRfQVRUUihGUkVFX1NMQUIsIGZyZWVfc2xhYik7XG5tbS9zbHViLmM6OTc0NzpTVEFUX0FUVFIoT1JERVJfRkFMTEJBQ0ssIG9yZGVyX2ZhbGxiYWNrKTtcbm1tL3NsdWIuYzo5NzQ4OlNUQVRfQVRUUihDTVBYQ0hHX0RPVUJMRV9GQUlMLCBjbXB4Y2hnX2RvdWJsZV9mYWlsKTtcbm1tL3NsdWIuYzo5NzQ5OlNUQVRfQVRUUihTSEVBRl9GTFVTSCwgc2hlYWZfZmx1c2gpO1xubW0vc2x1Yi5jOjk3NTA6U1RBVF9BVFRSKFNIRUFGX1JFRklMTCwgc2hlYWZfcmVmaWxsKTtcbm1tL3NsdWIuYzo5NzUxOlNUQVRfQVRUUihTSEVBRl9BTExPQywgc2hlYWZfYWxsb2MpO1xubW0vc2x1Yi5jOjk3NTI6U1RBVF9BVFRSKFNIRUFGX0ZSRUUsIHNoZWFmX2ZyZWUpO1xubW0vc2x1Yi5jOjk3NTM6U1RBVF9BVFRSKEJBUk5fR0VULCBiYXJuX2dldCk7XG5tbS9zbHViLmM6OTc1NDpTVEFUX0FUVFIoQkFSTl9HRVRfRkFJTCwgYmFybl9nZXRfZmFpbCk7XG5tbS9zbHViLmM6OTc1NTpTVEFUX0FUVFIoQkFSTl9QVVQsIGJhcm5fcHV0KTtcbm1tL3NsdWIuYzo5NzU2OlNUQVRfQVRUUihCQVJOX1BVVF9GQUlMLCBiYXJuX3B1dF9mYWlsKTtcbm1tL3NsdWIuYzo5NzU3OlNUQVRfQVRUUihTSEVBRl9QUkVGSUxMX0ZBU1QsIHNoZWFmX3ByZWZpbGxfZmFzdCk7XG5tbS9zbHViLmM6OTc1ODpTVEFUX0FUVFIoU0hFQUZfUFJFRklMTF9TTE9XLCBzaGVhZl9wcmVmaWxsX3Nsb3cpO1xubW0vc2x1Yi5jOjk3NTk6U1RBVF9BVFRSKFNIRUFGX1BSRUZJTExfT1ZFUlNJWkUsIHNoZWFmX3ByZWZpbGxfb3ZlcnNpemUpO1xubW0vc2x1Yi5jOjk3NjA6U1RBVF9BVFRSKFNIRUFGX1JFVFVSTl9GQVNULCBzaGVhZl9yZXR1cm5fZmFzdCk7XG5tbS9zbHViLmM6OTc2MTpTVEFUX0FUVFIoU0hFQUZfUkVUVVJOX1NMT1csIHNoZWFmX3JldHVybl9zbG93KTtcbm1tL3NsdWIuYy05NzYyLSNlbmRpZlx0LyogQ09ORklHX1NMVUJfU1RBVFMgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNTo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDAyMQoJCQkJCQkJb3V0cHV0OiA5MQoJCQkJCQkJdGhvdWdodHM6IDE5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNMVUIgQ29kZSBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBTTFVCIHBhdGNoLiBGaXJzdCB0aGluZywgSSBzZWUgdGhlIHN0YXRzIGFyZSwgYXMgdXN1YWwsIGNvbnRyb2xsZWQgYnkgYENPTkZJR19TTFVCX1NUQVRTYC4gTm8gc3VycHJpc2VzIHRoZXJlLiBUaGUgY29yZSBTTFVCIGxvZ2ljIGl0c2VsZiwgYXMgSSYjMzk7ZCBleHBlY3QsIGlzIGFsbCByZXNpZGluZyBpbiBgbW0vc2x1Yi5jYC4gTm93LCB0aGUga2V5IGlzIHRvIHBpbnBvaW50IHdoYXQgKnNwZWNpZmljYWxseSogaGFzIGJlZW4gdG91Y2hlZCBpbiB0aGlzIHBhdGNoLiBMZXQmIzM5O3Mgc2VlLi4uIGl0IGxvb2tzIGxpa2UgdGhlIG1vZGlmaWNhdGlvbiBsaXN0IGluY2x1ZGVzIGBfX3NsYWJfZnJlZWAsIGBnZXRfcGFydGlhbF9ub2RlX2J1bGtgLCBgZ2V0X2Zyb21fcGFydGlhbF9ub2RlYCwgYGdldF9mcm9tX2FueV9wYXJ0aWFsYCwgYF9fcmVmaWxsX29iamVjdHNfYW55YCwgYGZyZWVfcGFydGlhbGAsIGFuZCBgX19rbWVtX2NhY2hlX2RvX3Nocmlua2AuIEludGVyZXN0aW5nLCBhbmQgbm93IHRoZXJlIGFyZSBuZXcgYWRkaXRpb25zOiBgdW5wYXJrX3NsYWJzYCBhbmQgYHVucGFya193b3JrX2ZuYC4gSGFuZyBvbiwgdGhlc2UgbmV3IGFkZGl0aW9ucyBhcmUgYHN0YXRpY2AuIEhtbSwgYW5kIGxldCBtZSBjaGVjayBvbiB0aGUgb3RoZXIgbW9kaWZpZWQgZnVuY3Rpb25zLiBBaCwgYF9fc2xhYl9mcmVlYCBpcyBhbHNvIGBzdGF0aWNgLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gbm90IG1pc3NpbmcgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zLCB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zIGNhbiBiZSBmb3VuZCBpbiBgbW0vc2x1Yi5jYC4gUmlnaHQsIEkgc2hvdWxkIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aG9zZSBub24tc3RhdGljIGVudHJpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTU6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XihzdGF0aWMgKT8odm9pZHxib29sfHZvaWQgXFwqfGludCkgKF9fc2xhYl9mcmVlfGdldF9wYXJ0aWFsX25vZGVfYnVsa3xnZXRfZnJvbV9wYXJ0aWFsX25vZGV8Z2V0X2Zyb21fYW55X3BhcnRpYWx8X19yZWZpbGxfb2JqZWN0c19hbnl8ZnJlZV9wYXJ0aWFsfF9fa21lbV9jYWNoZV9kb19zaHJpbmspXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc2x1Yi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3NsdWIuYz0zOTQ2PXN0YXRpYyBpbmxpbmUgYm9vbCBwZm1lbWFsbG9jX21hdGNoKHN0cnVjdCBzbGFiICpzbGFiLCBnZnBfdCBnZnBmbGFncyk7XG5tbS9zbHViLmMtMzk0Ny1cbm1tL3NsdWIuYzozOTQ4OnN0YXRpYyBib29sIGdldF9wYXJ0aWFsX25vZGVfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbm1tL3NsdWIuYy0zOTQ5LVx0XHRcdFx0ICBzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlICpuLFxuLS1cbm1tL3NsdWIuYz01ODUwPXN0YXRpYyBib29sIF9fc2xhYl90cnlfcmV0dXJuX2ZyZWVsaXN0KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYixcbi0tXG5tbS9zbHViLmMtNTg3OC0gKi9cbm1tL3NsdWIuYzo1ODc5OnN0YXRpYyB2b2lkIF9fc2xhYl9mcmVlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYixcbm1tL3NsdWIuYy01ODgwLVx0XHRcdHZvaWQgKmhlYWQsIHZvaWQgKnRhaWwsIGludCBjbnQsXG4tLVxubW0vc2x1Yi5jPTgyODU9c3RhdGljIHZvaWQgbGlzdF9zbGFiX29iamVjdHMoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiKVxuLS1cbm1tL3NsdWIuYy04MzE2LSAqL1xubW0vc2x1Yi5jOjgzMTc6c3RhdGljIHZvaWQgZnJlZV9wYXJ0aWFsKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlICpuKVxubW0vc2x1Yi5jLTgzMTgte1xuLS1cbm1tL3NsdWIuYz04NTIxPXZvaWQgX19jaGVja19oZWFwX29iamVjdChjb25zdCB2b2lkICpwdHIsIHVuc2lnbmVkIGxvbmcgbixcbi0tXG5tbS9zbHViLmMtODU3Mi0gKi9cbm1tL3NsdWIuYzo4NTczOnN0YXRpYyBpbnQgX19rbWVtX2NhY2hlX2RvX3NocmluayhzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbm1tL3NsdWIuYy04NTc0LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNTo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTAwMQoJCQkJCQkJb3V0cHV0OiA2NQoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDaGVja2luZyBLZXkgUmV0cmlldmFsIE1ldGhvZHMqKgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB3ZSYjMzk7cmUgcHVsbGluZyBkYXRhIGZyb20gdGhlc2UgcGFydGlhbCBub2RlcywgZXNwZWNpYWxseSB3aXRoIHRoaXMgbmV3IGFyY2hpdGVjdHVyZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGdyYXNwIHRoZSBjb3JlIGxvZ2ljIGJlaGluZCBkYXRhIHJldHJpZXZhbC4KCk15IGZvY3VzIHNob3VsZCBiZSBvbiBob3cgd2UmIzM5O3JlIGdldHRpbmcgdGhlIG9iamVjdHMgd2UgbmVlZCwgYW5kIGhvdyB3ZSBoYW5kbGUgc2l0dWF0aW9ucyB3aGVyZSB0aGUgb2JqZWN0IGlzbiYjMzk7dCBpbW1lZGlhdGVseSBhdmFpbGFibGUuIEkgd2FudCB0byBtYWtlIHN1cmUgdGhlIHByb2Nlc3MgaXMgb3B0aW1pemVkLCByb2J1c3QsIGFuZCBoYW5kbGVzIGVkZ2UgY2FzZXMgZWZmZWN0aXZlbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTU6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKHN0YXRpYyApPyh2b2lkfGJvb2x8dm9pZCBcXCp8aW50KSAoZ2V0X2Zyb21fcGFydGlhbF9ub2RlfGdldF9mcm9tX2FueV9wYXJ0aWFsfF9fcmVmaWxsX29iamVjdHNfYW55KVxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3NsdWIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTU6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEyMzMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgYGdldF9mcm9tX3BhcnRpYWxfbm9kZWAgU2lnbmF0dXJlKioKCk9rYXksIHNvIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBleGFjdCBzaWduYXR1cmUgb2YgdGhpcyBgZ2V0X2Zyb21fcGFydGlhbF9ub2RlYCBmdW5jdGlvbi4gSSYjMzk7bSBhbHJlYWR5IGZhbWlsaWFyIHdpdGggdGhlIGdlbmVyYWwgY29uY2VwdCBvZiBwYXJ0aWFsIG5vZGVzIGFuZCBob3cgdGhleSYjMzk7cmUgdXNlZCBpbiB0aGUgc3lzdGVtLCBidXQgcHJlY2lzaW9uIGlzIGtleS4gV2hhdCBhcmUgdGhlIGlucHV0IHR5cGVzPyBBcmUgdGhlcmUgYW55IG9wdGlvbmFsIHBhcmFtZXRlcnMgb3IgZGVmYXVsdCB2YWx1ZXMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBBcmUgdGhlcmUgYW55IHNwZWNpZmljIGRhdGEgc3RydWN0dXJlcyBpdCBleHBlY3RzIGFzIGlucHV0LCBiZXlvbmQgdGhlIG9idmlvdXMgbm9kZSByZXByZXNlbnRhdGlvbj8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyB0byBkZXRlcm1pbmUgaWYgdGhlIGZ1bmN0aW9uIGlzIGJlaW5nIGNhbGxlZCBjb3JyZWN0bHkgaW4gdGhlIHJlbGV2YW50IGNvbnRleHQuIEFueSBwb3RlbnRpYWwgdHlwZSBtaXNtYXRjaGVzIG9yIGluY29ycmVjdCBhc3N1bXB0aW9ucyBtYWRlIGFib3V0IHRoZSBleHBlY3RlZCBmb3JtYXQgY291bGQgbGVhZCB0byBzdWJ0bGUsIGhhcmQtdG8tZGVidWcgaXNzdWVzIGRvd24gdGhlIGxpbmUuIEkgd2FudCB0byBjaGVjayBmb3IgZWRnZSBjYXNlcywgYW5kIHRoaW5rIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgZm9yIHBlcmZvcm1hbmNlIHVuZGVyIGxvYWQuIEkmIzM5O20gbG9va2luZyBhdCBkYXRhIGFsaWdubWVudCwgYW5kIG1lbW9yeSB1c2FnZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTU6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2V0X2Zyb21fcGFydGlhbF9ub2RlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc2x1Yi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3NsdWIuYz0zOTQ4PXN0YXRpYyBib29sIGdldF9wYXJ0aWFsX25vZGVfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbi0tXG5tbS9zbHViLmMtNDAyOS0gKi9cbm1tL3NsdWIuYzo0MDMwOnN0YXRpYyB2b2lkICpnZXRfZnJvbV9wYXJ0aWFsX25vZGUoc3RydWN0IGttZW1fY2FjaGUgKnMsXG5tbS9zbHViLmMtNDAzMS1cdFx0XHRcdCAgIHN0cnVjdCBrbWVtX2NhY2hlX25vZGUgKm4sXG4tLVxubW0vc2x1Yi5jLTQwODUtXG5tbS9zbHViLmM6NDA4NjpcdFx0fSB3aGlsZSAoIV9fc2xhYl91cGRhdGVfZnJlZWxpc3Qocywgc2xhYiwgXHUwMDI2b2xkLCBcdTAwMjZuZXcsIFwmIzM0O2dldF9mcm9tX3BhcnRpYWxfbm9kZVwmIzM0OykpO1xubW0vc2x1Yi5jLTQwODctXG4tLVxubW0vc2x1Yi5jPTQxMDU9c3RhdGljIHZvaWQgKmdldF9mcm9tX2FueV9wYXJ0aWFsKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnBfZmxhZ3MsXG4tLVxubW0vc2x1Yi5jLTQxNjEtXG5tbS9zbHViLmM6NDE2MjpcdFx0XHRcdHZvaWQgKm9iamVjdCA9IGdldF9mcm9tX3BhcnRpYWxfbm9kZShzLCBuLFxubW0vc2x1Yi5jLTQxNjMtXHRcdFx0XHRcdFx0XHRcdGdmcF9mbGFncywgYWMpO1xuLS1cbm1tL3NsdWIuYz00MTg1PXN0YXRpYyB2b2lkICpnZXRfZnJvbV9wYXJ0aWFsKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBpbnQgbm9kZSwgZ2ZwX3QgZmxhZ3MsXG4tLVxubW0vc2x1Yi5jLTQxOTMtXG5tbS9zbHViLmM6NDE5NDpcdG9iamVjdCA9IGdldF9mcm9tX3BhcnRpYWxfbm9kZShzLCBnZXRfbm9kZShzLCBzZWFyY2hub2RlKSwgZmxhZ3MsIGFjKTtcbm1tL3NsdWIuYy00MTk1LVx0aWYgKG9iamVjdCB8fCAobm9kZSAhPSBOVU1BX05PX05PREUgXHUwMDI2XHUwMDI2IChmbGFncyBcdTAwMjYgX19HRlBfVEhJU05PREUpKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTU6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjVtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE5MTMKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiA1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNMVUIgQWxsb2NhdG9yKioKCk9rYXksIHNvIGV2ZXJ5dGhpbmcgSSYjMzk7bSBsb29raW5nIGF0IGluIHRoaXMgY29kZSBzZWVtcyB0byBiZSBzdGF0aWMsIHdoaWNoIGlzbiYjMzk7dCB1bnVzdWFsIGZvciBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9ucy4gR2l2ZW4gdGhhdCB0aGUgU0xVQiBhbGxvY2F0b3IgaXMgc3VjaCBhIGNyaXRpY2FsIGNvbXBvbmVudCwgaXQmIzM5O3MgcHJldHR5IG11Y2ggYSBnaXZlbiB0aGF0IGl0JiMzOTtzIGdvaW5nIHRvIGJlIHN1YmplY3RlZCB0byBoZWF2eSBmdXp6aW5nLiBCdXQgSSBuZWVkIHRvIGJlIHRob3JvdWdoLiBJIHdvbmRlciBpZiB0aGVyZSBhcmUgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiBgbW0vc2x1Yi5jYCB0aGF0IEkgc2hvdWxkIHBheSBleHRyYSBhdHRlbnRpb24gdG8uIExldCBtZSBxdWlja2x5IHNjYW4gdGhhdCBmaWxlIGFuZCBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSB2aXNpYmxlIGJleW9uZCBpdHMgc3RhdGljIHNjb3BlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKHZvaWR8Ym9vbHx2b2lkIFxcKnxpbnQpIFthLXpBLVowLTlfXSYjNDM7XFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc2x1Yi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3NsdWIuYz00MTU9c3RhdGljIGlubGluZVxubW0vc2x1Yi5jOjQxNjp2b2lkIHN0YXRfYWRkKGNvbnN0IHN0cnVjdCBrbWVtX2NhY2hlICpzLCBlbnVtIHN0YXRfaXRlbSBzaSwgaW50IHYpXG5tbS9zbHViLmMtNDE3LXtcbi0tXG5tbS9zbHViLmM9OTgxPXN0YXRpYyBib29sIHNsYWJfYWRkX2t1bml0X2Vycm9ycyh2b2lkKVxuLS1cbm1tL3NsdWIuYy05OTYtXG5tbS9zbHViLmM6OTk3OmJvb2wgc2xhYl9pbl9rdW5pdF90ZXN0KHZvaWQpXG5tbS9zbHViLmMtOTk4LXtcbi0tXG5tbS9zbHViLmM9MTEzOT1zdGF0aWMgdm9pZCBwcmludF90cmFjayhjb25zdCBjaGFyICpzLCBzdHJ1Y3QgdHJhY2sgKnQsIHVuc2lnbmVkIGxvbmcgcHJfdGltZSlcbi0tXG5tbS9zbHViLmMtMTE1Ni1cbm1tL3NsdWIuYzoxMTU3OnZvaWQgcHJpbnRfdHJhY2tpbmcoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iamVjdClcbm1tL3NsdWIuYy0xMTU4LXtcbi0tXG5tbS9zbHViLmM9MTE2Nz1zdGF0aWMgdm9pZCBwcmludF9zbGFiX2luZm8oY29uc3Qgc3RydWN0IHNsYWIgKnNsYWIpXG4tLVxubW0vc2x1Yi5jLTExNzMtXG5tbS9zbHViLmM6MTE3NDp2b2lkIHNraXBfb3JpZ19zaXplX2NoZWNrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBjb25zdCB2b2lkICpvYmplY3QpXG5tbS9zbHViLmMtMTE3NS17XG4tLVxubW0vc2x1Yi5jPTE3NTQ9c3RhdGljXG5tbS9zbHViLmM6MTc1NTp2b2lkIHNldHVwX3NsYWJfZGVidWcoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICphZGRyKVxubW0vc2x1Yi5jLTE3NTYte1xuLS1cbm1tL3NsdWIuYz0yMDU2PXN0YXRpYyBpbmxpbmVcbm1tL3NsdWIuYzoyMDU3OnZvaWQgc2V0dXBfc2xhYl9kZWJ1ZyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHZvaWQgKmFkZHIpIHt9XG5tbS9zbHViLmMtMjA1OC1cbi0tXG5tbS9zbHViLmM9MjE3OD1zdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiKVxuLS1cbm1tL3NsdWIuYy0yMTgyLVxubW0vc2x1Yi5jOjIxODM6aW50IGFsbG9jX3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIsIHN0cnVjdCBrbWVtX2NhY2hlICpzLFxubW0vc2x1Yi5jLTIxODQtXHRcdFx0Z2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXG4tLVxubW0vc2x1Yi5jPTI1MjU9c3RhdGljIF9fZmFzdHBhdGhfaW5saW5lXG5tbS9zbHViLmM6MjUyNjpib29sIG1lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncyxcbm1tL3NsdWIuYy0yNTI3LVx0XHRcdFx0c2l6ZV90IHNpemUsIHZvaWQgKipwLFxuLS1cbm1tL3NsdWIuYz0yNTUwPXN0YXRpYyBfX2Zhc3RwYXRoX2lubGluZVxubW0vc2x1Yi5jOjI1NTE6dm9pZCBtZW1jZ19zbGFiX2ZyZWVfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHZvaWQgKipwLFxubW0vc2x1Yi5jLTI1NTItXHRcdFx0ICBpbnQgb2JqZWN0cylcbi0tXG5tbS9zbHViLmM9MjU3MT1zdGF0aWMgX19mYXN0cGF0aF9pbmxpbmVcbm1tL3NsdWIuYzoyNTcyOmJvb2wgbWVtY2dfc2xhYl9wb3N0X2NoYXJnZSh2b2lkICpwLCBnZnBfdCBmbGFncylcbm1tL3NsdWIuYy0yNTczLXtcbi0tXG5tbS9zbHViLmM9MjY4NT1zdGF0aWMgX19hbHdheXNfaW5saW5lXG5tbS9zbHViLmM6MjY4Njpib29sIHNsYWJfZnJlZV9ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICp4LCBib29sIGluaXQsXG5tbS9zbHViLmMtMjY4Ny1cdFx0ICAgIGJvb2wgYWZ0ZXJfcmN1X2RlbGF5KVxuLS1cbm1tL3NsdWIuYz0yNzcwPXN0YXRpYyBfX2Zhc3RwYXRoX2lubGluZVxubW0vc2x1Yi5jOjI3NzE6Ym9vbCBzbGFiX2ZyZWVfZnJlZWxpc3RfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqKmhlYWQsIHZvaWQgKip0YWlsLFxubW0vc2x1Yi5jLTI3NzItXHRcdFx0ICAgICBpbnQgKmNudClcbi0tXG5tbS9zbHViLmM9NDI4ND1zdGF0aWMgdm9pZCBmbHVzaF9yY3Vfc2hlYWYoc3RydWN0IHdvcmtfc3RydWN0ICp3KVxuLS1cbm1tL3NsdWIuYy00MzA3LS8qIG5lZWRlZCBmb3Iga3ZmcmVlX3JjdV9iYXJyaWVyKCkgKi9cbm1tL3NsdWIuYzo0MzA4OnZvaWQgZmx1c2hfcmN1X3NoZWF2ZXNfb25fY2FjaGUoc3RydWN0IGttZW1fY2FjaGUgKnMpXG5tbS9zbHViLmMtNDMwOS17XG4tLVxubW0vc2x1Yi5jLTQzMzgtXG5tbS9zbHViLmM6NDMzOTp2b2lkIGZsdXNoX2FsbF9yY3Vfc2hlYXZlcyh2b2lkKVxubW0vc2x1Yi5jLTQzNDAte1xuLS1cbm1tL3NsdWIuYz00ODA0PXN0YXRpYyBfX2Zhc3RwYXRoX2lubGluZVxubW0vc2x1Yi5jOjQ4MDU6Ym9vbCBzbGFiX3Bvc3RfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZmxhZ3MsIHNpemVfdCBzaXplLFxubW0vc2x1Yi5jLTQ4MDYtXHRcdFx0ICB2b2lkICoqcCwgY29uc3Qgc3RydWN0IHNsYWJfYWxsb2NfY29udGV4dCAqYWMpXG4tLVxubW0vc2x1Yi5jPTUxOTU9RVhQT1JUX1NZTUJPTChrbWVtX2NhY2hlX2FsbG9jX2xydV9ub3Byb2YpO1xubW0vc2x1Yi5jLTUxOTYtXG5tbS9zbHViLmM6NTE5Nzpib29sIGttZW1fY2FjaGVfY2hhcmdlKHZvaWQgKm9ianAsIGdmcF90IGdmcGZsYWdzKVxubW0vc2x1Yi5jLTUxOTgte1xuLS1cbm1tL3NsdWIuYz01MjcxPWttZW1fY2FjaGVfcHJlZmlsbF9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgc2l6ZSlcbi0tXG5tbS9zbHViLmMtNTM1My0gKi9cbm1tL3NsdWIuYzo1MzU0OnZvaWQga21lbV9jYWNoZV9yZXR1cm5fc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcCxcbm1tL3NsdWIuYy01MzU1LVx0XHRcdCAgICAgc3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmKVxuLS1cbm1tL3NsdWIuYy01NDExLSAqL1xubW0vc2x1Yi5jOjU0MTI6aW50IGttZW1fY2FjaGVfcmVmaWxsX3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnAsXG5tbS9zbHViLmMtNTQxMy1cdFx0XHQgICAgc3RydWN0IHNsYWJfc2hlYWYgKipzaGVhZnAsIHVuc2lnbmVkIGludCBzaXplKVxuLS1cbm1tL3NsdWIuYz02MjExPXN0YXRpYyBfX2Zhc3RwYXRoX2lubGluZVxubW0vc2x1Yi5jOjYyMTI6Ym9vbCBmcmVlX3RvX3BjcyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqZWN0LCBib29sIGFsbG93X3NwaW4pXG5tbS9zbHViLmMtNjIxMy17XG4tLVxubW0vc2x1Yi5jPTYzMDY9c3RhdGljIERFRklORV9XQUlUX09WRVJSSURFX01BUChrZnJlZV9yY3Vfc2hlYWZfbWFwLCBMRF9XQUlUX0NPTkZJRyk7XG5tbS9zbHViLmMtNjMwNy1cbm1tL3NsdWIuYzo2MzA4OmJvb2wgX19rZnJlZV9yY3Vfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iaiwgdW5zaWduZWQgaW50IGZyZWVfZmxhZ3MpXG5tbS9zbHViLmMtNjMwOS17XG4tLVxubW0vc2x1Yi5jPTY2NjU9c3RhdGljIHZvaWQgZGVmZXJfZnJlZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqaGVhZClcbi0tXG5tbS9zbHViLmMtNjY3Ny1cbm1tL3NsdWIuYzo2Njc4OnZvaWQgZGVmZXJfa2ZyZWVfcmN1KHN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgKmhlYWQpXG5tbS9zbHViLmMtNjY3OS17XG4tLVxubW0vc2x1Yi5jLTY2ODktLyogTXVzdCBiZSBjYWxsZWQgYmVmb3JlIGZsdXNoX3JjdV9zaGVhdmVzX29uX2NhY2hlKCkgKi9cbm1tL3NsdWIuYzo2NjkwOnZvaWQgZGVmZXJyZWRfd29ya19iYXJyaWVyKHZvaWQpXG5tbS9zbHViLmMtNjY5MS17XG4tLVxubW0vc2x1Yi5jPTY2OTg9c3RhdGljIF9fZmFzdHBhdGhfaW5saW5lXG5tbS9zbHViLmM6NjY5OTp2b2lkIHNsYWJfZnJlZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHZvaWQgKm9iamVjdCxcbm1tL3NsdWIuYy02NzAwLVx0ICAgICAgIHVuc2lnbmVkIGxvbmcgYWRkcilcbi0tXG5tbS9zbHViLmM9NjcxNz1zdGF0aWMgbm9pbmxpbmVcbm1tL3NsdWIuYzo2NzE4OnZvaWQgbWVtY2dfYWxsb2NfYWJvcnRfc2luZ2xlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmplY3QpXG5tbS9zbHViLmMtNjcxOS17XG4tLVxubW0vc2x1Yi5jPTY3Mjk9c3RhdGljIF9fZmFzdHBhdGhfaW5saW5lXG5tbS9zbHViLmM6NjczMDp2b2lkIHNsYWJfZnJlZV9idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdm9pZCAqaGVhZCxcbm1tL3NsdWIuYy02NzMxLVx0XHQgICAgdm9pZCAqdGFpbCwgdm9pZCAqKnAsIGludCBjbnQsIHVuc2lnbmVkIGxvbmcgYWRkcilcbi0tXG5tbS9zbHViLmM9Njc0Nj1zdGF0aWMgdm9pZCBzbGFiX2ZyZWVfYWZ0ZXJfcmN1X2RlYnVnKHN0cnVjdCByY3VfaGVhZCAqcmN1X2hlYWQpXG4tLVxubW0vc2x1Yi5jLTY3NzQtI2lmZGVmIENPTkZJR19LQVNBTl9HRU5FUklDXG5tbS9zbHViLmM6Njc3NTp2b2lkIF9fX2NhY2hlX2ZyZWUoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlLCB2b2lkICp4LCB1bnNpZ25lZCBsb25nIGFkZHIpXG5tbS9zbHViLmMtNjc3Ni17XG4tLVxubW0vc2x1Yi5jPTY3ODI9c3RhdGljIG5vaW5saW5lIHZvaWQgd2Fybl9mcmVlX2JhZF9vYmooc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iailcbi0tXG5tbS9zbHViLmMtNjgxMS0gKi9cbm1tL3NsdWIuYzo2ODEyOnZvaWQga21lbV9jYWNoZV9mcmVlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICp4KVxubW0vc2x1Yi5jLTY4MTMte1xuLS1cbm1tL3NsdWIuYz02OTI2PXN0YXRpYyB2b2lkIGZyZWVfbGFyZ2Vfa21hbGxvYyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdm9pZCAqb2JqZWN0KVxuLS1cbm1tL3NsdWIuYy02OTUxLSAqL1xubW0vc2x1Yi5jOjY5NTI6dm9pZCBrdmZyZWVfcmN1X2NiKHN0cnVjdCByY3VfaGVhZCAqaGVhZClcbm1tL3NsdWIuYy02OTUzLXtcbi0tXG5tbS9zbHViLmMtNjk3Ni0gKi9cbm1tL3NsdWIuYzo2OTc3OnZvaWQga2ZyZWUoY29uc3Qgdm9pZCAqb2JqZWN0KVxubW0vc2x1Yi5jLTY5Nzgte1xuLS1cbm1tL3NsdWIuYz03MDAwPUVYUE9SVF9TWU1CT0woa2ZyZWUpO1xuLS1cbm1tL3NsdWIuYy03MDEwLSAqL1xubW0vc2x1Yi5jOjcwMTE6dm9pZCBrZnJlZV9ub2xvY2soY29uc3Qgdm9pZCAqb2JqZWN0KVxubW0vc2x1Yi5jLTcwMTIte1xuLS1cbm1tL3NsdWIuYz03MjQzPUVYUE9SVF9TWU1CT0woX19rdm1hbGxvY19ub2RlX25vcHJvZik7XG4tLVxubW0vc2x1Yi5jLTcyNTQtICovXG5tbS9zbHViLmM6NzI1NTp2b2lkIGt2ZnJlZShjb25zdCB2b2lkICphZGRyKVxubW0vc2x1Yi5jLTcyNTYte1xuLS1cbm1tL3NsdWIuYz03MjYyPUVYUE9SVF9TWU1CT0woa3ZmcmVlKTtcbi0tXG5tbS9zbHViLmMtNzI3MC0gKi9cbm1tL3NsdWIuYzo3MjcxOnZvaWQga3ZmcmVlX2F0b21pYyhjb25zdCB2b2lkICphZGRyKVxubW0vc2x1Yi5jLTcyNzIte1xuLS1cbm1tL3NsdWIuYz03Mjc4PUVYUE9SVF9TWU1CT0woa3ZmcmVlX2F0b21pYyk7XG4tLVxubW0vc2x1Yi5jLTcyODgtICovXG5tbS9zbHViLmM6NzI4OTp2b2lkIGt2ZnJlZV9zZW5zaXRpdmUoY29uc3Qgdm9pZCAqYWRkciwgc2l6ZV90IGxlbilcbm1tL3NsdWIuYy03MjkwLXtcbi0tXG5tbS9zbHViLmM9NzM0Nz1zdGF0aWMgaW5saW5lXG5tbS9zbHViLmM6NzM0ODppbnQgYnVpbGRfZGV0YWNoZWRfZnJlZWxpc3Qoc3RydWN0IGttZW1fY2FjaGUgKnMsIHNpemVfdCBzaXplLFxubW0vc2x1Yi5jLTczNDktXHRcdFx0ICAgIHZvaWQgKipwLCBzdHJ1Y3QgZGV0YWNoZWRfZnJlZWxpc3QgKmRmKVxuLS1cbm1tL3NsdWIuYz03NDEyPXN0YXRpYyB2b2lkIF9fa21lbV9jYWNoZV9mcmVlX2J1bGsoc3RydWN0IGttZW1fY2FjaGUgKnMsIHNpemVfdCBzaXplLCB2b2lkICoqcClcbi0tXG5tbS9zbHViLmMtNzQzMi0vKiBOb3RlIHRoYXQgaW50ZXJydXB0cyBtdXN0IGJlIGVuYWJsZWQgd2hlbiBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uICovXG5tbS9zbHViLmM6NzQzMzp2b2lkIGttZW1fY2FjaGVfZnJlZV9idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzaXplX3Qgc2l6ZSwgdm9pZCAqKnApXG5tbS9zbHViLmMtNzQzNC17XG4tLVxubW0vc2x1Yi5jPTc2Mzc9c3RhdGljIGJvb2wgX19rbWVtX2NhY2hlX2FsbG9jX2J1bGsoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGZsYWdzLFxuLS1cbm1tL3NsdWIuYy03Njg2LSAqL1xubW0vc2x1Yi5jOjc2ODc6Ym9vbCBrbWVtX2NhY2hlX2FsbG9jX2J1bGtfbm9wcm9mKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncyxcbm1tL3NsdWIuYy03Njg4LVx0XHRzaXplX3Qgc2l6ZSwgdm9pZCAqKnApXG4tLVxubW0vc2x1Yi5jPTgwMDU9c3RhdGljIHZvaWQgZnJlZV9rbWVtX2NhY2hlX25vZGVzKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxuLS1cbm1tL3NsdWIuYy04MDI4LVxubW0vc2x1Yi5jOjgwMjk6dm9pZCBfX2ttZW1fY2FjaGVfcmVsZWFzZShzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbm1tL3NsdWIuYy04MDMwLXtcbi0tXG5tbS9zbHViLmM9ODMxNz1zdGF0aWMgdm9pZCBmcmVlX3BhcnRpYWwoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBrbWVtX2NhY2hlX25vZGUgKm4pXG4tLVxubW0vc2x1Yi5jLTgzNDEtXG5tbS9zbHViLmM6ODM0Mjpib29sIF9fa21lbV9jYWNoZV9lbXB0eShzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbm1tL3NsdWIuYy04MzQzLXtcbi0tXG5tbS9zbHViLmMtODM1NS0gKi9cbm1tL3NsdWIuYzo4MzU2OmludCBfX2ttZW1fY2FjaGVfc2h1dGRvd24oc3RydWN0IGttZW1fY2FjaGUgKnMpXG5tbS9zbHViLmMtODM1Ny17XG4tLVxubW0vc2x1Yi5jLTgzODMtI2lmZGVmIENPTkZJR19QUklOVEtcbm1tL3NsdWIuYzo4Mzg0OnZvaWQgX19rbWVtX29ial9pbmZvKHN0cnVjdCBrbWVtX29ial9pbmZvICprcHAsIHZvaWQgKm9iamVjdCwgc3RydWN0IHNsYWIgKnNsYWIpXG5tbS9zbHViLmMtODM4NS17XG4tLVxubW0vc2x1Yi5jPTg1MDg9X19jb3JlX3BhcmFtX2NiKHNsYWJfc3RyaWN0X251bWEsIFx1MDAyNnBhcmFtX29wc19zbGFiX3N0cmljdF9udW1hLCBOVUxMLCAwKTtcbi0tXG5tbS9zbHViLmMtODUyMC0gKi9cbm1tL3NsdWIuYzo4NTIxOnZvaWQgX19jaGVja19oZWFwX29iamVjdChjb25zdCB2b2lkICpwdHIsIHVuc2lnbmVkIGxvbmcgbixcbm1tL3NsdWIuYy04NTIyLVx0XHRcdCBjb25zdCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgYm9vbCB0b191c2VyKVxuLS1cbm1tL3NsdWIuYz04NTczPXN0YXRpYyBpbnQgX19rbWVtX2NhY2hlX2RvX3NocmluayhzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbi0tXG5tbS9zbHViLmMtODY0NC1cbm1tL3NsdWIuYzo4NjQ1OmludCBfX2ttZW1fY2FjaGVfc2hyaW5rKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxubW0vc2x1Yi5jLTg2NDYte1xuLS1cbm1tL3NsdWIuYz04OTIxPXZvaWQgX19pbml0IGttZW1fY2FjaGVfaW5pdF9sYXRlKHZvaWQpXG4tLVxubW0vc2x1Yi5jLTg5MzAtXG5tbS9zbHViLmM6ODkzMTppbnQgZG9fa21lbV9jYWNoZV9jcmVhdGUoc3RydWN0IGttZW1fY2FjaGUgKnMsIGNvbnN0IGNoYXIgKm5hbWUsXG5tbS9zbHViLmMtODkzMi1cdFx0XHQgdW5zaWduZWQgaW50IHNpemUsIHN0cnVjdCBrbWVtX2NhY2hlX2FyZ3MgKmFyZ3MsXG4tLVxubW0vc2x1Yi5jPTk5Njg9c3RhdGljIGludCBzeXNmc19zbGFiX2FkZChzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbi0tXG5tbS9zbHViLmMtMTAwMTYtXG5tbS9zbHViLmM6MTAwMTc6dm9pZCBzeXNmc19zbGFiX3VubGluayhzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbm1tL3NsdWIuYy0xMDAxOC17XG4tLVxubW0vc2x1Yi5jLTEwMDIyLVxubW0vc2x1Yi5jOjEwMDIzOnZvaWQgc3lzZnNfc2xhYl9yZWxlYXNlKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxubW0vc2x1Yi5jLTEwMDI0LXtcbi0tXG5tbS9zbHViLmM9MTAwMzg9c3RhdGljIHN0cnVjdCBzYXZlZF9hbGlhcyAqYWxpYXNfbGlzdDtcbm1tL3NsdWIuYy0xMDAzOS1cbm1tL3NsdWIuYzoxMDA0MDppbnQgc3lzZnNfc2xhYl9hbGlhcyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgY29uc3QgY2hhciAqbmFtZSlcbm1tL3NsdWIuYy0xMDA0MS17XG4tLVxubW0vc2x1Yi5jPTEwMzAyPXN0YXRpYyB2b2lkIGRlYnVnZnNfc2xhYl9hZGQoc3RydWN0IGttZW1fY2FjaGUgKnMpXG4tLVxubW0vc2x1Yi5jLTEwMzE3LVxubW0vc2x1Yi5jOjEwMzE4OnZvaWQgZGVidWdmc19zbGFiX3JlbGVhc2Uoc3RydWN0IGttZW1fY2FjaGUgKnMpXG5tbS9zbHViLmMtMTAzMTkte1xuLS1cbm1tL3NsdWIuYz0xMDMyNj1zdGF0aWMgdm9pZCBfX2luaXQgc2xhYl9kZWJ1Z2ZzX3Jvb3RfaW5pdCh2b2lkKVxuLS1cbm1tL3NsdWIuYy0xMDMzNC0jaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcbm1tL3NsdWIuYzoxMDMzNTp2b2lkIGdldF9zbGFiaW5mbyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWJpbmZvICpzaW5mbylcbm1tL3NsdWIuYy0xMDMzNi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE1OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xMm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjMwMAoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDQ1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgU0xVQiBQYXRjaCBDb3ZlcmFnZSBmb3IgRnV6emluZyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byB0aGUgU0xVQiBjb3JlLiBNeSBwcmltYXJ5IGNvbmNlcm4gaGVyZSBpcyBob3cgdG8gYmVzdCB0ZXN0IHRoZSBtb2RpZmllZCBsb2dpYyB3aXRob3V0IGdldHRpbmcgc2tld2VkIHJlc3VsdHMgZnJvbSBmdXp6aW5nIGV4dHJlbWVseSBjb21tb24gaG90IHBhdGhzLiBUaGUgcHJvbXB0IHNwZWNpZmljYWxseSB0ZWxscyBtZSB0byBhdm9pZCB0aG9zZSBhbmQgZm9jdXMgb24gZGlzdGluY3QgQVBJIGVudHJ5IHBvaW50cy4gUmlnaHQsIHNvIEkmIzM5O3ZlIGdvdCB0byBmaW5kIHRoZSByaWdodCBlbnRyeSBwb2ludHMgdGhhdCAqdHJpZ2dlciogdGhlIG5ldyBsb2dpYyAoYHVucGFya19zbGFic2Agc3BlY2lmaWNhbGx5KSwgYnV0IGFyZW4mIzM5O3QgdGhlbXNlbHZlcyBjb25zdGFudGx5IGhhbW1lcmVkLgoKTGV0JiMzOTtzIHNlZS4uLiB0aGUgY29kZSBmbG93LiBga2ZyZWVgLCBga21lbV9jYWNoZV9mcmVlYCwgdGhlIGJ1bGsgYWxsb2MvZnJlZSBmdW5jdGlvbnMuLi4gdGhvc2UgYXJlIGFsbCBvdXQuIFRoZXkmIzM5O3JlIGJhc2ljYWxseSB0aGUgZW5naW5lIHJvb20gb2YgbWVtb3J5IG1hbmFnZW1lbnQuIExpc3RpbmcgdGhlbSB3b3VsZCBiZSB1c2VsZXNzLiBUaGUgcHJvbXB0IGlzIHZlcnkgc3BlY2lmaWMgYWJvdXQgdGhhdCwgYW5kIEkgYWdyZWUsIHNrZXdpbmcgaXMgdGhlIGVuZW15IG9mIHVzZWZ1bCBmdXp6aW5nLgoKSG1tLCB0aGlua2luZy4uLiBJIHJlbWVtYmVyIHNvbWUgbGVzcy1mcmVxdWVudGx5IGNhbGxlZCBmdW5jdGlvbnMuIExldCBtZSBjaGVjay4uLiBBaCwgYF9fa21lbV9jYWNoZV9zaHJpbmtgLCB0aGF0IGNhbGxzIGBfX2ttZW1fY2FjaGVfZG9fc2hyaW5rYCwgd2hpY2ggaGl0cyBgdW5wYXJrX3NsYWJzYC4gVGhhdCBsb29rcyBwcm9taXNpbmcuIGBfX2ttZW1fY2FjaGVfZW1wdHlgIGNhbGxzIGBmcmVlX3BhcnRpYWxgIHdoaWNoLCBhZ2FpbiwgY2FsbHMgYHVucGFya19zbGFic2AuIEFuZCBgX19rbWVtX2NhY2hlX3NodXRkb3duYCBjYWxscyBgZnJlZV9wYXJ0aWFsYCBhcyB3ZWxsLgoKTm93LCBhcmUgdGhlc2UgdGhlIHJpZ2h0IGVudHJ5IHBvaW50cz8gQXJlIHRoZXkgbm9uLXN0YXRpYyBmdW5jdGlvbnM/IExldCBtZSB2ZXJpZnk6IFl1cCwgYGludCBfX2ttZW1fY2FjaGVfc2hyaW5rKHN0cnVjdCBrbWVtX2NhY2hlICpzKWAsIHRoYXQmIzM5O3MgZ29vZC4gQW5kIGBpbnQgX19rbWVtX2NhY2hlX3NodXRkb3duKHN0cnVjdCBrbWVtX2NhY2hlICpzKWAuIEFuZCBgYm9vbCBfX2ttZW1fY2FjaGVfZW1wdHkoc3RydWN0IGttZW1fY2FjaGUgKnMpYC4gRXhjZWxsZW50LiBUaGV5IGFyZSBub24tc3RhdGljIGFuZCB0aGV5JiMzOTtyZSBkaXJlY3RseSByZWxhdGVkIHRvIHRoZSBjb3JlIGxvZ2ljIG9mIHRoZSBwYXRjaC4gVGhvc2Ugc2VlbSB0byBiZSBpZGVhbCBjYW5kaWRhdGVzLCBiZWNhdXNlIHRoZXkmIzM5O3JlIG5vdCBob3QgcGF0aHMsIGJ1dCBzdGlsbCBleGVyY2lzZSB0aGUgbmV3IGNvZGUuCgpSaWdodCwgbGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGF0IHRob3NlIGFyZSB0aGUgcmlnaHQgY2FsbHMuIFRoZW4sIGxldCYjMzk7cyBtb3ZlIG9uIHRvIGFjdHVhbGx5IHZlcmlmeWluZyB0aGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNjowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKGludHxib29sKSBfX2ttZW1fY2FjaGVfKHNocmlua3xzaHV0ZG93bnxlbXB0eSlcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9zbHViLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc2x1Yi5jPTgzMTc9c3RhdGljIHZvaWQgZnJlZV9wYXJ0aWFsKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlICpuKVxuLS1cbm1tL3NsdWIuYy04MzQxLVxubW0vc2x1Yi5jOjgzNDI6Ym9vbCBfX2ttZW1fY2FjaGVfZW1wdHkoc3RydWN0IGttZW1fY2FjaGUgKnMpXG5tbS9zbHViLmMtODM0My17XG4tLVxubW0vc2x1Yi5jLTgzNTUtICovXG5tbS9zbHViLmM6ODM1NjppbnQgX19rbWVtX2NhY2hlX3NodXRkb3duKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxubW0vc2x1Yi5jLTgzNTcte1xuLS1cbm1tL3NsdWIuYz04NTczPXN0YXRpYyBpbnQgX19rbWVtX2NhY2hlX2RvX3NocmluayhzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbi0tXG5tbS9zbHViLmMtODY0NC1cbm1tL3NsdWIuYzo4NjQ1OmludCBfX2ttZW1fY2FjaGVfc2hyaW5rKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxubW0vc2x1Yi5jLTg2NDYte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNjowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzQ5MQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS2VybmVsIE1lbW9yeSBNYW5hZ2VtZW50IEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBsaXN0IG9mIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGFnYWluLiBUaGUgaW5pdGlhbCBwcmVtaXNlIGlzIHNvbGlkOyB5ZXMsIHRoZSBmdW5jdGlvbnMgd2UmIzM5O3JlIGFmdGVyIGFyZSBnZW5lcmFsbHkgbm9uLXN0YXRpYy4gTm93LCBJJiMzOTttIHRyeWluZyB0byByZWZpbmUgdGhlIGxpc3QgZm9yIHJlbGV2YW5jZSBhbmQgdGhpcyBpcyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLiBJIHRob3VnaHQgYWJvdXQgYHVucGFya193b3JrX2ZuYCwgYnV0IHRoYXQmIzM5O3MgYSB3b3JrcXVldWUgZnVuY3Rpb24g4oCTIHN0YXRpYyBhbmQgbm90IGRpcmVjdGx5IGNhbGxhYmxlLiBOb3QgcmVsZXZhbnQgaGVyZSwgc28gbGV0JiMzOTtzIG1vdmUgb24uCgpUaGUgY29yZSBvZiB0aGUgb2JqZWN0IGRlYWxsb2NhdGlvbiBwcm9jZXNzIGlzIGNsZWFybHkgd2l0aGluIGBfX3NsYWJfZnJlZWAuIEl0JiMzOTtzIGNhbGxlZCBieSBga2ZyZWVgIGFuZCBga21lbV9jYWNoZV9mcmVlYCwgdHdvICp2ZXJ5KiBob3QgcGF0aHMuIFdlJiMzOTtyZSBleHBsaWNpdGx5IHRyeWluZyB0byBleGNsdWRlIHRoZXNlIHNpbmNlIHRoZXNlIGFyZSBiYXNpYyBmdW5jdGlvbnMsIGJ1dCBvbmVzIHRoYXQgYXJlIHNvIGNvbW1vbmx5IHVzZWQgYXMgdG8gbm90IGJlIHVzZWZ1bCBpbiB0aGlzIGNvbnRleHQuCgpIbW0sIHNvLCB3aGF0IGVsc2UgaXMgb3V0IHRoZXJlIHRoYXQgaXMgKm5vdCogc3RhdGljPyBMZXQgbWUgc2VlLi4uIEkmIzM5O3ZlIGdvdCBpdCEgYGttZW1fY2FjaGVfc2hyaW5rYCwgd2hpY2gsIGNvbnZlbmllbnRseSwgd3JhcHMgYF9fa21lbV9jYWNoZV9zaHJpbmtgLCBpcyBhIHByaW1lIGNhbmRpZGF0ZS4gSXQmIzM5O3Mgbm90IGEgaG90IHBhdGgsIGJ1dCByZWxhdGVkIHRvIHRoZSBzbGFiIGFsbG9jYXRvci4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBpdCYjMzk7cyBsb2NhdGVkIGluIGBtbS9zbGFiX2NvbW1vbi5jYCB0byBjb25maXJtIGl0IGZpdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE2OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15pbnQga21lbV9jYWNoZV9zaHJpbmtcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc2xhYl9jb21tb24uYz01OTg9RVhQT1JUX1NZTUJPTChrbWVtX2NhY2hlX2Rlc3Ryb3kpO1xuLS1cbm1tL3NsYWJfY29tbW9uLmMtNjA4LSAqL1xubW0vc2xhYl9jb21tb24uYzo2MDk6aW50IGttZW1fY2FjaGVfc2hyaW5rKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXApXG5tbS9zbGFiX2NvbW1vbi5jLTYxMC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE2OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MDMyCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMzcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBDb2RlIENoYW5nZXMqKgoKT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIGBrbWVtX2NhY2hlX3Nocmlua2AgaXMgaW4gYG1tL3NsYWJfY29tbW9uLmNgLCBhbmQgYF9fa21lbV9jYWNoZV9zaHJpbmtgIGlzIGluIGBtbS9zbHViLmNgLiBJJiMzOTtsbCBhbHNvIGFkZCBgX19rbWVtX2NhY2hlX3NodXRkb3duYCBhbmQgYF9fa21lbV9jYWNoZV9lbXB0eWAgdG8gdGhlIGxpc3QsIGFzIEkgYW0gdHJ5aW5nIHRvIGxpc3QgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyBwcm9jZXNzLgoKSG9sZCBvbiwgdGhlIHBhdGNoIHRvdWNoZXMgYGdldF9mcm9tX2FueV9wYXJ0aWFsYCBhbmQgYF9fcmVmaWxsX29iamVjdHNfYW55YCB0b28uIFRob3NlIGFyZSBpbnZvbHZlZCBpbiBhbGxvY2F0aW9uLCBhbmQgdGhhdCYjMzk7cyBhIGhvdCBwYXRoLiBObyBuZWVkIHRvIGxpc3QgYWxsb2NhdGlvbiBmdW5jdGlvbnMuCgpBcmUgdGhlcmUgYW55IGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGhlcmU/IEdpdmVuIHRoZSBjaGFuZ2VzIGFyZSBpbiBgbW0vc2x1Yi5jYCwgYW5kIFNMVUIgaXMgdGhlIGRlZmF1bHQgc2xhYiBhbGxvY2F0b3Igbm93LCBpdCBzZWVtcyB0aGlzIGlzIGNvcmUgbG9naWMuIEJ1dCB3YWl0LCBgQ09ORklHX1NMVUJfU1RBVFNgIGlzIG1vZGlmaWVkIHRvIGFkZCBzdGF0cywgYnV0IHRoZSBjb3JlIGxvZ2ljIGl0c2VsZiBpc24mIzM5O3QgZ2F0ZWQgYnkgdGhhdCBjb25maWcuIFNvLCBJIGRvbiYjMzk7dCBuZWVkIHRvIHNwZWNpZnkgYEVuYWJsZUNvbmZpZ3NgIGF0IGFsbC4KCkkgc2hvdWxkIGRvdWJsZS1jaGVjayBmb3Igb3RoZXIgcmVsYXRlZCBmdW5jdGlvbnMuIGBrbWVtX2NhY2hlX2ZyZWVfYnVsa2AgYW5kIGBrbWVtX2NhY2hlX2FsbG9jX2J1bGtfbm9wcm9mYCBhcmUgYWxzbyB1c2VkIGR1cmluZyBjYWNoZSBjbGVhbnVwLCBidXQgYXJlIGxlc3MgY3JpdGljYWwgdGhhbiBga2ZyZWVgLCB0aGUgaG90IHBhdGguIFRoZXJlZm9yZSwgSSB3aWxsIGxpc3QgYF9fa21lbV9jYWNoZV9zaHJpbmtgLCBgX19rbWVtX2NhY2hlX3NodXRkb3duYCwgYF9fa21lbV9jYWNoZV9lbXB0eWAuCgpBY3R1YWxseSwgc2luY2UgYF9fa21lbV9jYWNoZV9lbXB0eWAgYW5kIGBfX2ttZW1fY2FjaGVfc2h1dGRvd25gIGFyZSBjYWxsZWQgd2hlbiB0aGUgY2FjaGUgaXMgYmVpbmcgZGVzdHJveWVkLCBga21lbV9jYWNoZV9kZXN0cm95YCBpcyB0aGUgcHVibGljIEFQSS4gU28sIEkgdGhpbmsgYSBtb3JlIHVzZWZ1bCBsaXN0IGlzIGBrbWVtX2NhY2hlX2Rlc3Ryb3lgIGFuZCBga21lbV9jYWNoZV9zaHJpbmtgIGZvciB0aGlzIHBhcnRpY3VsYXIgY2FzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTY6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XnZvaWQga21lbV9jYWNoZV9kZXN0cm95XFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3NsYWJfY29tbW9uLmM9NTI3PXZvaWQgc2xhYl9rbWVtX2NhY2hlX3JlbGVhc2Uoc3RydWN0IGttZW1fY2FjaGUgKnMpXG4tLVxubW0vc2xhYl9jb21tb24uYy01MzMtXG5tbS9zbGFiX2NvbW1vbi5jOjUzNDp2b2lkIGttZW1fY2FjaGVfZGVzdHJveShzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbm1tL3NsYWJfY29tbW9uLmMtNTM1LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTY6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg5MjkKCQkJCQkJCW91dHB1dDogMTU5CgkJCQkJCQl0aG91Z2h0czogMjcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFNMVUIgQ2hhbmdlcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQsIHllYWgsIGBrbWVtX2NhY2hlX2Rlc3Ryb3lgIGFuZCBga21lbV9jYWNoZV9zaHJpbmtgIHNlZW0gbGlrZSBvYnZpb3VzIGZ1bmN0aW9ucyB0byBmb2N1cyBvbiBmb3IgZnV6emluZy4gR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgY2hhbmdlcywgSSYjMzk7bGwgYWxzbyBhZGQgYF9fa21lbV9jYWNoZV9zaHJpbmtgLCBgX19rbWVtX2NhY2hlX3NodXRkb3duYCwgYW5kIGBfX2ttZW1fY2FjaGVfZW1wdHlgIHRvIHRoZSBsaXN0LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgY292ZXIgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eS4KCkxldCBtZSByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWNzIG9mIHRoaXMgcGF0Y2jigKYgcmlnaHQsIGl0JiMzOTtzIGFib3V0IGFkZGluZyBgcGFya2VkX3NsYWJzYCB0byBgc3RydWN0IGttZW1fY2FjaGVfbm9kZWAuIEl0IGFsc28gYWRkcyBgdW5wYXJrX3dvcmtgLCB3aGljaCBpcyBzY2hlZHVsZWQgd2hlbiBhIHNsYWIgZ2V0cyBwYXJrZWQuIEZyb20gd2hhdCBJIGNhbiBzZWUsIHNsYWJzIGFyZSBnZXR0aW5nIHVucGFya2VkIGluIGBnZXRfcGFydGlhbF9ub2RlX2J1bGtgLCBgZ2V0X2Zyb21fcGFydGlhbF9ub2RlYCwgYGZyZWVfcGFydGlhbGAsIGFuZCBgX19rbWVtX2NhY2hlX2RvX3Nocmlua2AuIFRoZW4sIHNsYWJzIGFyZSBwYXJrZWQgaW4gYF9fc2xhYl9mcmVlYCB3aGVuIGBsaXN0X2xvY2tgIGlzIGNvbnRlbmRlZC4KClRoaXMgaXMgYSBwcmV0dHkgZnVuZGFtZW50YWwgc2hpZnQgaW4gaG93IHRoZSBTTFVCIGFsbG9jYXRvciBvcGVyYXRlcywgYW5kIHRoYXQgbWFrZXMgaXQgcHJpbWUgdGVycml0b3J5IGZvciBmdXp6aW5nLiBJIGRvbiYjMzk7dCBzZWUgYW55IGRlcGVuZGVuY2llcyBvbiBzcGVjaWZpYyBrZXJuZWwgY29uZmlncywgc28gdGhhdCYjMzk7cyBnb29kLiBTaW5jZSBpdCB0b3VjaGVzIHRoZSBjb3JlIFNMVUIgbG9naWMsIHRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBteSB0aW1lLiBNeSBmb2N1cyB3aWxsIGJlIG9uIHRob3NlIHN5bWJvbHMgSSBtZW50aW9uZWQ6IGBfX2ttZW1fY2FjaGVfc2hyaW5rYCwgYF9fa21lbV9jYWNoZV9zaHV0ZG93bmAsIGBfX2ttZW1fY2FjaGVfZW1wdHlgLCBga21lbV9jYWNoZV9zaHJpbmtgLCBhbmQgYGttZW1fY2FjaGVfZGVzdHJveWAuCgpBbHJpZ2h0LCBJJiMzOTttIGNvbmZpZGVudCBpbiBteSBhc3Nlc3NtZW50LiBJJiMzOTtsbCBtYWtlIHN1cmUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTY6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fa21lbV9jYWNoZV9zaHJpbmsmIzM0OywKICAgICYjMzQ7X19rbWVtX2NhY2hlX3NodXRkb3duJiMzNDssCiAgICAmIzM0O19fa21lbV9jYWNoZV9lbXB0eSYjMzQ7LAogICAgJiMzNDtrbWVtX2NhY2hlX3NocmluayYjMzQ7LAogICAgJiMzNDtrbWVtX2NhY2hlX2Rlc3Ryb3kmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGxvY2tsZXNzIHBhcmtpbmcgbWVjaGFuaXNtIGZvciBzbGFicyBpbiB0aGUgU0xVQiBhbGxvY2F0b3ImIzM5O3MgZnJlZSBzbG93cGF0aCB0byByZWR1Y2UgbGlzdF9sb2NrIGNvbnRlbnRpb24uIFRoaXMgaXMgYSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWZmZWN0cyBzbGFiIGFsbG9jYXRpb24gYW5kIGZyZWVpbmcgbG9naWMuIEl0IGlzIHJlYWNoYWJsZSBieSBkZWZhdWx0IGFuZCBzaG91bGQgYmUgZnV6emVkLiBTaW5jZSBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIGFyZSBob3QgcGF0aHMsIHdlIGZvY3VzIG9uIGNhY2hlIHNocmlua2luZyBhbmQgZGVzdHJ1Y3Rpb24gcGF0aHMgd2hpY2ggYWxzbyBpbnRlcmFjdCB3aXRoIHRoZSBuZXcgdW5wYXJraW5nIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fa21lbV9jYWNoZV9zaHJpbmsmIzM0OywKICAgICYjMzQ7X19rbWVtX2NhY2hlX3NodXRkb3duJiMzNDssCiAgICAmIzM0O19fa21lbV9jYWNoZV9lbXB0eSYjMzQ7LAogICAgJiMzNDtrbWVtX2NhY2hlX3NocmluayYjMzQ7LAogICAgJiMzNDtrbWVtX2NhY2hlX2Rlc3Ryb3kmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGxvY2tsZXNzIHBhcmtpbmcgbWVjaGFuaXNtIGZvciBzbGFicyBpbiB0aGUgU0xVQiBhbGxvY2F0b3ImIzM5O3MgZnJlZSBzbG93cGF0aCB0byByZWR1Y2UgbGlzdF9sb2NrIGNvbnRlbnRpb24uIFRoaXMgaXMgYSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWZmZWN0cyBzbGFiIGFsbG9jYXRpb24gYW5kIGZyZWVpbmcgbG9naWMuIEl0IGlzIHJlYWNoYWJsZSBieSBkZWZhdWx0IGFuZCBzaG91bGQgYmUgZnV6emVkLiBTaW5jZSBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIGFyZSBob3QgcGF0aHMsIHdlIGZvY3VzIG9uIGNhY2hlIHNocmlua2luZyBhbmQgZGVzdHJ1Y3Rpb24gcGF0aHMgd2hpY2ggYWxzbyBpbnRlcmFjdCB3aXRoIHRoZSBuZXcgdW5wYXJraW5nIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNjowODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE2OjA4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbnRlcm5hbCBTTFVCIGFsbG9jYXRvciBsb2dpYyB0byBpbnRyb2R1Y2UgYSBsb2NrbGVzcyBcJiMzNDtwYXJraW5nXCYjMzQ7IG1lY2hhbmlzbSBmb3Igc2xhYnMgdG8gcmVkdWNlIGxvY2sgY29udGVudGlvbiBvbiB0aGUgbm9kZSYjMzk7cyBsaXN0X2xvY2suIEl0IGFkZHMgYW4gbGxpc3QgZm9yIHBhcmtlZCBzbGFicyBhbmQgZGVsYXllZCB3b3JrIHRvIHVucGFyayB0aGVtLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBpbnRlcm5hbCBtZW1vcnkgbWFuYWdlbWVudCBzdHJ1Y3R1cmVzIChzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlLCBzdHJ1Y3Qgc2xhYikgYW5kIGZyZWVsaXN0IG9wZXJhdGlvbnMuIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBtYW5pZmVzdCBhcyBsaXN0IGNvcnJ1cHRpb25zLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIG9yIGNvbmN1cnJlbmN5IGlzc3VlcyAocmFjZSBjb25kaXRpb25zKS4gVGhlc2UgdHlwZXMgb2YgYnVncyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4sIHNsdWJfZGVidWcsIGxpc3QgZGVidWdnaW5nLCBhbmQgTE9DS0RFUC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWx0ZXIgbWVtb3J5IGluaXRpYWxpemF0aW9uIG9yIGJvdW5kcyBjaGVja2luZyBpbiBhIHdheSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBjYXVzZSBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDViYmU4YmYyMTFmZDcwYmYyY2FhMjllYjM3ZjcyZGIzZDY5NjQ0NDQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAyNCAxNTo0NzowNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL3NsdWIuYyBiL21tL3NsdWIuYwppbmRleCBiMGNkMDU3MmUyZjI2Li4yN2E3OGQ2M2Y1Mzc2IDEwMDY0NAotLS0gYS9tbS9zbHViLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc2x1Yi5jCkBAIC00OSw2ICYjNDM7NDksNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3NvcnQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pcnFfd29yay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2twcm9iZXMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbGxpc3QuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9kZWJ1Z2ZzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7dHJhY2UvZXZlbnRzL2ttZW0uaCZndDsKIApAQCAtMTIyLDYgJiM0MzsxMjMsOCBAQAogICogICAoTm90ZSB0aGF0IHRoZSB0b3RhbCBudW1iZXIgb2Ygc2xhYnMgaXMgYW4gYXRvbWljIHZhbHVlIHRoYXQgbWF5IGJlCiAgKiAgIG1vZGlmaWVkIHdpdGhvdXQgdGFraW5nIHRoZSBsaXN0IGxvY2spLgogICoKJiM0MzsgKiAgIFNsYWJzIG1heSBiZSBwdXNoZWQgdG8gbm9kZS0mZ3Q7cGFya2VkX3NsYWJzIHdpdGhvdXQgYWNxdWlyaW5nIGxpc3RfbG9jay4KJiM0MzsgKgogICogICBUaGUgbGlzdF9sb2NrIGlzIGEgY2VudHJhbGl6ZWQgbG9jayBhbmQgdGh1cyB3ZSBhdm9pZCB0YWtpbmcgaXQgYXMKICAqICAgbXVjaCBhcyBwb3NzaWJsZS4gQXMgbG9uZyBhcyBTTFVCIGRvZXMgbm90IGhhdmUgdG8gaGFuZGxlIHBhcnRpYWwKICAqICAgc2xhYnMsIG9wZXJhdGlvbnMgY2FuIGNvbnRpbnVlIHdpdGhvdXQgYW55IGNlbnRyYWxpemVkIGxvY2suCkBAIC0zNjgsNiAmIzQzOzM3MSw5IEBAIGVudW0gc3RhdF9pdGVtIHsKIAlGUkVFX1NMT1dQQVRILAkJLyogRnJlZSB0byBhIHNsYWIgKi8KIAlGUkVFX0FERF9QQVJUSUFMLAkvKiBGcmVlaW5nIG1vdmVzIHNsYWIgdG8gcGFydGlhbCBsaXN0ICovCiAJRlJFRV9SRU1PVkVfUEFSVElBTCwJLyogRnJlZWluZyByZW1vdmVzIGxhc3Qgb2JqZWN0ICovCiYjNDM7CVBBUktfU0xBQiwJCS8qIFNsYWJzIHBhcmtlZCBvbnRvIHRoZSBsbGlzdCBieSBmcmVlIHNsb3dwYXRoICovCiYjNDM7CVVOUEFSS19TTEFCLAkJLyogU2xhYnMgdW5wYXJrZWQgZnJvbSB0aGUgbGxpc3QgKi8KJiM0MzsJVU5QQVJLX0VWRU5ULAkJLyogVW5wYXJrIGV2ZW50cyAqLwogCUFMTE9DX1NMQUIsCQkvKiBOZXcgc2xhYiBhY3F1aXJlZCBmcm9tIHBhZ2UgYWxsb2NhdG9yICovCiAJQUxMT0NfTk9ERV9NSVNNQVRDSCwJLyogUmVxdWVzdGVkIG5vZGUgZGlmZmVyZW50IGZyb20gY3B1IHNoZWFmICovCiAJRlJFRV9TTEFCLAkJLyogU2xhYiBmcmVlZCB0byB0aGUgcGFnZSBhbGxvY2F0b3IgKi8KQEAgLTQ2Miw2ICYjNDM7NDY4LDE0IEBAIHN0cnVjdCBrbWVtX2NhY2hlX25vZGUgewogCWF0b21pY19sb25nX3QgdG90YWxfb2JqZWN0czsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGZ1bGw7CiAjZW5kaWYKJiM0MzsJLyoKJiM0MzsJICogSWYgbmVpdGhlciBzaGVhZiByZWZpbGwgbm9yIHRoZSBhbGxvYyBzbG93cGF0aCBwZXJmb3JtcyB0aGUgdW5wYXJrLAomIzQzOwkgKiB1bnBhcmtfd29ya19mbiB0YWtlcyBjYXJlIG9mIGl0LgomIzQzOwkgKi8KJiM0MzsJc3RydWN0IGRlbGF5ZWRfd29yayB1bnBhcmtfd29yazsKJiM0MzsKJiM0MzsJLyogVXNlZCB0byBsaW5rIHBhcmtlZCBzbGFicyAqLwomIzQzOwlzdHJ1Y3QgbGxpc3RfaGVhZCBwYXJrZWRfc2xhYnMgX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsKIH07CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGttZW1fY2FjaGVfbm9kZSAqZ2V0X25vZGUoc3RydWN0IGttZW1fY2FjaGUgKnMsIGludCBub2RlKQpAQCAtNTA5LDYgJiM0Mzs1MjMsMTIgQEAgc3RhdGljIG5vZGVtYXNrX3Qgc2xhYl9iYXJuX25vZGVzOwogICovCiBzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmZsdXNod3E7CiAKJiM0MzsvKgomIzQzOyAqIENlaWxpbmcgb24gaG93IGxvbmcgc2xhYnMgc3RheSBwYXJrZWQgd2hlbiBubyBzaGVhZiByZWZpbGwgb3IgYWxsb2MKJiM0MzsgKiBzbG93cGF0aCB1bnBhcmtzIHRoZW0uCiYjNDM7ICovCiYjNDM7I2RlZmluZSBVTlBBUktfREVMQVkJKEhaKQomIzQzOwogc3RydWN0IHNsdWJfZmx1c2hfd29yayB7CiAJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CiAJc3RydWN0IGttZW1fY2FjaGUgKnM7CkBAIC0zNjIzLDYgJiM0MzszNjQzLDEyMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcmVtb3ZlX3BhcnRpYWwoc3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbiwKIAljbGVhcl9ub2RlX3BhcnRpYWxfc3RhdGUobiwgc2xhYik7CiB9CiAKJiM0MzsvKgomIzQzOyAqIEEgc2xhYiBwYXJrZWQgb24gbi0mZ3Q7cGFya2VkX3NsYWJzIGlzIG5vdCBvbiBwYXJ0aWFsIGxpc3QsIHNvIGl0cyBzbGFiX2xpc3QgaXMKJiM0MzsgKiBmcmVlIGFuZCB3ZSByZXVzZSBpdCBhcyB0aGUgbGxpc3Rfbm9kZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBsbGlzdF9ub2RlICpzbGFiX3RvX3BhcmtlZF9sbG5vZGUoc3RydWN0IHNsYWIgKnNsYWIpCiYjNDM7ewomIzQzOwlyZXR1cm4gKHN0cnVjdCBsbGlzdF9ub2RlICopJmFtcDtzbGFiLSZndDtzbGFiX2xpc3Q7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IHNsYWIgKnBhcmtlZF9sbG5vZGVfdG9fc2xhYihzdHJ1Y3QgbGxpc3Rfbm9kZSAqbm9kZSkKJiM0Mzt7CiYjNDM7CXJldHVybiBjb250YWluZXJfb2YoKHN0cnVjdCBsaXN0X2hlYWQgKilub2RlLCBzdHJ1Y3Qgc2xhYiwgc2xhYl9saXN0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBNb3ZlIHNsYWJzIHBhcmtlZCBvbiBuLSZndDtwYXJrZWRfc2xhYnMgdG8gbi0mZ3Q7cGFydGlhbC4gQ2FsbGVkIHdpdGggdGhlCiYjNDM7ICogbGlzdF9sb2NrIGhlbGQsIGJ5IHRoZSBwYXRocyB0aGF0IGNvbnN1bWUgdGhlIHBhcnRpYWwgbGlzdCwgb24gYmVoYWxmIG9mIHRoZQomIzQzOyAqIGNwdXMgdGhhdCBjb3VsZCBub3QgZ2V0IHRoZSBsb2NrIHdoZW4gcGFya2luZy4KJiM0MzsgKgomIzQzOyAqIElmIEBkaXNjYXJkIGlzIG5vdCBOVUxMLCBwdXQgZW1wdHkgc2xhYnMgYmV5b25kIG1pbl9wYXJ0aWFsIG9uIEBkaXNjYXJkLCB0aGUKJiM0MzsgKiBjYWxsZXIgc2hvdWxkIGNhbGwgZGlzY2FyZF9zbGFiKCkgYWZ0ZXIgZHJvcHBpbmcgdGhlIGxvY2suICBDYWxsZXJzIHRoYXQgbWF5CiYjNDM7ICogbm90IGZyZWUgcGFnZXMgaW4gdGhlaXIgY29udGV4dCBzaG91bGQgcGFzcyBOVUxMLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHVucGFya19zbGFicyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbiwKJiM0MzsJCQkgc3RydWN0IGxpc3RfaGVhZCAqZGlzY2FyZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBsbGlzdF9ub2RlICpwb3MsICpuZXh0OwomIzQzOwl1bnNpZ25lZCBsb25nIGFkZGVkID0gMCwgZGlzY2FyZGVkID0gMDsKJiM0MzsJdW5zaWduZWQgbG9uZyBoZWFkcm9vbSA9IDA7CiYjNDM7CUxJU1RfSEVBRCh0b19hZGQpOwomIzQzOwomIzQzOwlzbGFiX2xvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtuLSZndDtsaXN0X2xvY2spOwomIzQzOwomIzQzOwlwb3MgPSBsbGlzdF9kZWxfYWxsKCZhbXA7bi0mZ3Q7cGFya2VkX3NsYWJzKTsKJiM0MzsJaWYgKGxpa2VseSghcG9zKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogQ2FsY3VsYXRlIGhvdyBtYW55IG1vcmUgc2xhYnMgdGhlIHBhcnRpYWwgbGlzdCB3YW50cyBiZWZvcmUgaXQgaGFzCiYjNDM7CSAqIHJlYWNoZWQgbWluX3BhcnRpYWwuCiYjNDM7CSAqLwomIzQzOwlpZiAocy0mZ3Q7bWluX3BhcnRpYWwgJmd0OyBuLSZndDtucl9wYXJ0aWFsKQomIzQzOwkJaGVhZHJvb20gPSBzLSZndDttaW5fcGFydGlhbCAtIG4tJmd0O25yX3BhcnRpYWw7CiYjNDM7CiYjNDM7CWZvciAoOyBwb3M7IHBvcyA9IG5leHQpIHsKJiM0MzsJCXN0cnVjdCBzbGFiICpzbGFiID0gcGFya2VkX2xsbm9kZV90b19zbGFiKHBvcyk7CiYjNDM7CQlzdHJ1Y3QgZnJlZWxpc3RfY291bnRlcnMgZmxjOwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIEJhY2sgdXAgdGhlIHBvaW50ZXIsIGJlY2F1c2UgdGhlIGxpc3RfYWRkX3RhaWwoKSBiZWxvdwomIzQzOwkJICogb3ZlcndyaXRlcyB0aGUgbGxpc3QgbGlua2FnZS4KJiM0MzsJCSAqLwomIzQzOwkJbmV4dCA9IHBvcy0mZ3Q7bmV4dDsKJiM0MzsKJiM0MzsJCWlmIChkaXNjYXJkKSB7CiYjNDM7CQkJZmxjLmNvdW50ZXJzID0gZGF0YV9yYWNlKFJFQURfT05DRShzbGFiLSZndDtjb3VudGVycykpOwomIzQzOwkJCWlmICghZmxjLmludXNlICZhbXA7JmFtcDsgYWRkZWQgJmd0Oz0gaGVhZHJvb20pIHsKJiM0MzsJCQkJbGlzdF9hZGRfdGFpbCgmYW1wO3NsYWItJmd0O3NsYWJfbGlzdCwgZGlzY2FyZCk7CiYjNDM7CQkJCWRpc2NhcmRlZCYjNDM7JiM0Mzs7CiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwkJCX0KJiM0MzsJCX0KJiM0MzsKJiM0MzsJCXNsYWJfc2V0X25vZGVfcGFydGlhbChzbGFiKTsKJiM0MzsJCWxpc3RfYWRkX3RhaWwoJmFtcDtzbGFiLSZndDtzbGFiX2xpc3QsICZhbXA7dG9fYWRkKTsKJiM0MzsJCWFkZGVkJiM0MzsmIzQzOzsKJiM0MzsJfQomIzQzOwomIzQzOwluLSZndDtucl9wYXJ0aWFsICYjNDM7PSBhZGRlZDsKJiM0MzsJbGlzdF9zcGxpY2VfdGFpbCgmYW1wO3RvX2FkZCwgJmFtcDtuLSZndDtwYXJ0aWFsKTsKJiM0MzsKJiM0MzsJc3RhdF9hZGQocywgRlJFRV9BRERfUEFSVElBTCwgYWRkZWQpOwomIzQzOwlzdGF0X2FkZChzLCBVTlBBUktfU0xBQiwgYWRkZWQgJiM0MzsgZGlzY2FyZGVkKTsKJiM0MzsJaWYgKHVubGlrZWx5KGRpc2NhcmRlZCkpCiYjNDM7CQlzdGF0X2FkZChzLCBGUkVFX1NMQUIsIGRpc2NhcmRlZCk7CiYjNDM7CXN0YXQocywgVU5QQVJLX0VWRU5UKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBQYXJrZWQgc2xhYnMgYXJlIG5vcm1hbGx5IHVucGFya2VkIGJ5IHNoZWFmIHJlZmlsbCBvciB0aGUgYWxsb2Mgc2xvd3BhdGgsIGJ1dAomIzQzOyAqIHdoZW4gdGhlIHN5c3RlbSBleHBlcmllbmNlcyBhIGhlYXZ5IGJ1cnN0IG9mIGZyZWVzLCBhYnJ1cHRseSBnb2VzIGlkbGUsCiYjNDM7ICogYW5kIG5laXRoZXIgc2hlYWYgcmVmaWxsIG5vciB0aGUgYWxsb2Mgc2xvd3BhdGggaXMgcmVhY2hlZCwKJiM0MzsgKiBzb21lIHBhcmtlZCBzbGFicyBtYXkgYmUgbGVmdCBzdHJhbmRlZCBpbiB0aGUgcGFya2VkIGxsaXN0LiBUaGlzIGZ1bmN0aW9uCiYjNDM7ICogc2VydmVzIGFzIGEgbGFzdC1yZXNvcnQgZmFsbGJhY2suCiYjNDM7ICogVGhpcyB3b3JrIGlzIHNjaGVkdWxlZCBieSB0aGUgbGxpc3RfYWRkKCkgdGhhdCBtYWtlcyB0aGUgcGFya2VkIGxsaXN0IG5vbi1lbXB0eS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCB1bnBhcmtfd29ya19mbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlICpuID0gY29udGFpbmVyX29mKHRvX2RlbGF5ZWRfd29yayh3b3JrKSwKJiM0MzsJCQkJCQkgc3RydWN0IGttZW1fY2FjaGVfbm9kZSwKJiM0MzsJCQkJCQkgdW5wYXJrX3dvcmspOwomIzQzOwlzdHJ1Y3QgbGxpc3Rfbm9kZSAqZmlyc3Q7CiYjNDM7CXN0cnVjdCBrbWVtX2NhY2hlICpzOwomIzQzOwlzdHJ1Y3Qgc2xhYiAqc2xhYiwgKnQ7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CUxJU1RfSEVBRChkaXNjYXJkKTsKJiM0MzsKJiM0MzsJaWYgKGxpa2VseShsbGlzdF9lbXB0eSgmYW1wO24tJmd0O3BhcmtlZF9zbGFicykpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO24tJmd0O2xpc3RfbG9jaywgZmxhZ3MpOwomIzQzOwomIzQzOwlmaXJzdCA9IFJFQURfT05DRShuLSZndDtwYXJrZWRfc2xhYnMuZmlyc3QpOwomIzQzOwlpZiAodW5saWtlbHkoIWZpcnN0KSkgewomIzQzOwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO24tJmd0O2xpc3RfbG9jaywgZmxhZ3MpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CXMgPSBwYXJrZWRfbGxub2RlX3RvX3NsYWIoZmlyc3QpLSZndDtzbGFiX2NhY2hlOwomIzQzOwomIzQzOwl1bnBhcmtfc2xhYnMocywgbiwgJmFtcDtkaXNjYXJkKTsKJiM0MzsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO24tJmd0O2xpc3RfbG9jaywgZmxhZ3MpOwomIzQzOwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2xhYiwgdCwgJmFtcDtkaXNjYXJkLCBzbGFiX2xpc3QpCiYjNDM7CQlkaXNjYXJkX3NsYWIocywgc2xhYik7CiYjNDM7fQomIzQzOwogLyoKICAqIENhbGxlZCBvbmx5IGZvciBrbWVtX2NhY2hlX2RlYnVnKCkgY2FjaGVzIGluc3RlYWQgb2YgcmVtb3ZlX3BhcnRpYWwoKSwgd2l0aCBhCiAgKiBzbGFiIGZyb20gdGhlIG4tJmd0O3BhcnRpYWwgbGlzdC4gUmVtb3ZlIG9ubHkgYSBzaW5nbGUgb2JqZWN0IGZyb20gdGhlIHNsYWIsIGRvCkBAIC0zODE4LDkgJiM0MzszOTU0LDEzIEBAIHN0YXRpYyBib29sIGdldF9wYXJ0aWFsX25vZGVfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywKIAlzdHJ1Y3Qgc2xhYiAqZmlyc3QgPSBOVUxMLCAqbGFzdCA9IE5VTEw7CiAJdW5zaWduZWQgaW50IHRvdGFsX2ZyZWUgPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CUxJU1RfSEVBRChkaXNjYXJkKTsKIAotCS8qIFJhY3kgY2hlY2sgdG8gYXZvaWQgdGFraW5nIHRoZSBsb2NrIHVubmVjZXNzYXJpbHkuICovCi0JaWYgKCFuIHx8IGRhdGFfcmFjZSghbi0mZ3Q7bnJfcGFydGlhbCkpCiYjNDM7CS8qCiYjNDM7CSAqIFJhY3kgY2hlY2sgdG8gYXZvaWQgdGFraW5nIHRoZSBsb2NrIHVubmVjZXNzYXJpbHkuCiYjNDM7CSAqIFRoZSBwYXJrZWRfc2xhYnMgbGxpc3QgbXVzdCBhbHNvIGJlIGFjY291bnRlZCBmb3IuCiYjNDM7CSAqLwomIzQzOwlpZiAoIW4gfHwgKCFkYXRhX3JhY2Uobi0mZ3Q7bnJfcGFydGlhbCkgJmFtcDsmYW1wOyBsbGlzdF9lbXB0eSgmYW1wO24tJmd0O3BhcmtlZF9zbGFicykpKQogCQlyZXR1cm4gZmFsc2U7CiAKIAlJTklUX0xJU1RfSEVBRCgmYW1wO3BjLSZndDtzbGFicyk7CkBAIC0zODMwLDYgJiM0MzszOTcwLDkgQEAgc3RhdGljIGJvb2wgZ2V0X3BhcnRpYWxfbm9kZV9idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLAogCWVsc2UgaWYgKCFzcGluX3RyeWxvY2tfaXJxc2F2ZSgmYW1wO24tJmd0O2xpc3RfbG9jaywgZmxhZ3MpKQogCQlyZXR1cm4gZmFsc2U7CiAKJiM0MzsJLyogSWYgdGhlcmUgYXJlIHBhcmtlZCBzbGFicywgbW92ZSB0aGVtIHRvIHRoZSBwYXJ0aWFsIGxpc3QgZmlyc3QuICovCiYjNDM7CXVucGFya19zbGFicyhzLCBuLCBhbGxvd19zcGluID8gJmFtcDtkaXNjYXJkIDogTlVMTCk7CiYjNDM7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNsYWIsIHNsYWIyLCAmYW1wO24tJmd0O3BhcnRpYWwsIHNsYWJfbGlzdCkgewogCQlzdHJ1Y3QgZnJlZWxpc3RfY291bnRlcnMgZmxjOwogCQl1bnNpZ25lZCBpbnQgc2xhYl9mcmVlOwpAQCAtMzg3NCw2ICYjNDM7NDAxNywxMCBAQCBzdGF0aWMgYm9vbCBnZXRfcGFydGlhbF9ub2RlX2J1bGsoc3RydWN0IGttZW1fY2FjaGUgKnMsCiAJCQkJICAgICZhbXA7bGFzdC0mZ3Q7c2xhYl9saXN0KTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtuLSZndDtsaXN0X2xvY2ssIGZsYWdzKTsKJiM0MzsKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNsYWIsIHNsYWIyLCAmYW1wO2Rpc2NhcmQsIHNsYWJfbGlzdCkKJiM0MzsJCWRpc2NhcmRfc2xhYihzLCBzbGFiKTsKJiM0MzsKIAlyZXR1cm4gdG90YWxfZnJlZSAmZ3Q7IDA7CiB9CiAKQEAgLTM4ODUsMjMgJiM0Mzs0MDMyLDI5IEBAIHN0YXRpYyB2b2lkICpnZXRfZnJvbV9wYXJ0aWFsX25vZGUoc3RydWN0IGttZW1fY2FjaGUgKnMsCiAJCQkJICAgZ2ZwX3QgZ2ZwX2ZsYWdzLAogCQkJCSAgIGNvbnN0IHN0cnVjdCBzbGFiX2FsbG9jX2NvbnRleHQgKmFjKQogewomIzQzOwlib29sIGFsbG93X3NwaW4gPSBhbGxvY19mbGFnc19hbGxvd19zcGlubmluZyhhYy0mZ3Q7YWxsb2NfZmxhZ3MpOwogCXN0cnVjdCBzbGFiICpzbGFiLCAqc2xhYjI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl2b2lkICpvYmplY3QgPSBOVUxMOwomIzQzOwlMSVNUX0hFQUQoZGlzY2FyZCk7CiAKIAkvKgogCSAqIFJhY3kgY2hlY2suIElmIHdlIG1pc3Rha2VubHkgc2VlIG5vIHBhcnRpYWwgc2xhYnMgdGhlbiB3ZQogCSAqIGp1c3QgYWxsb2NhdGUgYW4gZW1wdHkgc2xhYi4gSWYgd2UgbWlzdGFrZW5seSB0cnkgdG8gZ2V0IGEKIAkgKiBwYXJ0aWFsIHNsYWIgYW5kIHRoZXJlIGlzIG5vbmUgYXZhaWxhYmxlIHRoZW4gZ2V0X2Zyb21fcGFydGlhbCgpCi0JICogd2lsbCByZXR1cm4gTlVMTC4KJiM0MzsJICogd2lsbCByZXR1cm4gTlVMTC4gQWxzbyB0YWtlIHRoZSBwYXJrZWRfc2xhYnMgbGxpc3QgaW50byBhY2NvdW50LgogCSAqLwotCWlmICghbiB8fCAhbi0mZ3Q7bnJfcGFydGlhbCkKJiM0MzsJaWYgKCFuIHx8ICghZGF0YV9yYWNlKG4tJmd0O25yX3BhcnRpYWwpICZhbXA7JmFtcDsgbGxpc3RfZW1wdHkoJmFtcDtuLSZndDtwYXJrZWRfc2xhYnMpKSkKIAkJcmV0dXJuIE5VTEw7CiAKLQlpZiAoYWxsb2NfZmxhZ3NfYWxsb3dfc3Bpbm5pbmcoYWMtJmd0O2FsbG9jX2ZsYWdzKSkKJiM0MzsJaWYgKGFsbG93X3NwaW4pCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7bi0mZ3Q7bGlzdF9sb2NrLCBmbGFncyk7CiAJZWxzZSBpZiAoIXNwaW5fdHJ5bG9ja19pcnFzYXZlKCZhbXA7bi0mZ3Q7bGlzdF9sb2NrLCBmbGFncykpCiAJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwkvKiBJZiB0aGVyZSBhcmUgcGFya2VkIHNsYWJzLCBtb3ZlIHRoZW0gdG8gdGhlIHBhcnRpYWwgbGlzdCBmaXJzdC4gKi8KJiM0MzsJdW5wYXJrX3NsYWJzKHMsIG4sIGFsbG93X3NwaW4gPyAmYW1wO2Rpc2NhcmQgOiBOVUxMKTsKJiM0MzsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2xhYiwgc2xhYjIsICZhbXA7bi0mZ3Q7cGFydGlhbCwgc2xhYl9saXN0KSB7CiAKIAkJc3RydWN0IGZyZWVsaXN0X2NvdW50ZXJzIG9sZCwgbmV3OwpAQCAtMzkzOSw2ICYjNDM7NDA5MiwxMCBAQCBzdGF0aWMgdm9pZCAqZ2V0X2Zyb21fcGFydGlhbF9ub2RlKHN0cnVjdCBrbWVtX2NhY2hlICpzLAogCQlicmVhazsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO24tJmd0O2xpc3RfbG9jaywgZmxhZ3MpOwomIzQzOwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2xhYiwgc2xhYjIsICZhbXA7ZGlzY2FyZCwgc2xhYl9saXN0KQomIzQzOwkJZGlzY2FyZF9zbGFiKHMsIHNsYWIpOwomIzQzOwogCXJldHVybiBvYmplY3Q7CiB9CiAKQEAgLTM5OTQsOCAmIzQzOzQxNTEsMTMgQEAgc3RhdGljIHZvaWQgKmdldF9mcm9tX2FueV9wYXJ0aWFsKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnBfZmxhZ3MsCiAKIAkJCW4gPSBnZXRfbm9kZShzLCB6b25lX3RvX25pZCh6b25lKSk7CiAKJiM0MzsJCQkvKgomIzQzOwkJCSAqIFBhcmtlZCBzbGFicyBtYWtlIHRoZSBub2RlIHdvcnRoIHZpc2l0aW5nIGV2ZW4gaWYKJiM0MzsJCQkgKiBucl9wYXJ0aWFsIGxvb2tzIGxvdy4KJiM0MzsJCQkgKi8KIAkJCWlmIChuICZhbXA7JmFtcDsgY3B1c2V0X3pvbmVfYWxsb3dlZCh6b25lLCBnZnBfZmxhZ3MpICZhbXA7JmFtcDsKLQkJCQkJbi0mZ3Q7bnJfcGFydGlhbCAmZ3Q7IHMtJmd0O21pbl9wYXJ0aWFsKSB7CiYjNDM7CQkJCQkobi0mZ3Q7bnJfcGFydGlhbCAmZ3Q7IHMtJmd0O21pbl9wYXJ0aWFsIHx8CiYjNDM7CQkJCQkgIWxsaXN0X2VtcHR5KCZhbXA7bi0mZ3Q7cGFya2VkX3NsYWJzKSkpIHsKIAogCQkJCXZvaWQgKm9iamVjdCA9IGdldF9mcm9tX3BhcnRpYWxfbm9kZShzLCBuLAogCQkJCQkJCQlnZnBfZmxhZ3MsIGFjKTsKQEAgLTU3MTksNyAmIzQzOzU4ODEsNyBAQCBzdGF0aWMgdm9pZCBfX3NsYWJfZnJlZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsCiAJCQl1bnNpZ25lZCBsb25nIGFkZHIpCiAKIHsKLQlib29sIHdhc19mdWxsOwomIzQzOwlib29sIHdhc19mdWxsLCBwYXJrID0gZmFsc2U7CiAJc3RydWN0IGZyZWVsaXN0X2NvdW50ZXJzIG9sZCwgbmV3OwogCXN0cnVjdCBrbWVtX2NhY2hlX25vZGUgKm4gPSBOVUxMOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC01NzMxLDEwICYjNDM7NTg5MywxMSBAQCBzdGF0aWMgdm9pZCBfX3NsYWJfZnJlZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsCiAJfQogCiAJZG8gewotCQlpZiAodW5saWtlbHkobikpIHsKJiM0MzsJCWlmICh1bmxpa2VseShuICZhbXA7JmFtcDsgIXBhcmspKQogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO24tJmd0O2xpc3RfbG9jaywgZmxhZ3MpOwotCQkJbiA9IE5VTEw7Ci0JCX0KJiM0MzsKJiM0MzsJCXBhcmsgPSBmYWxzZTsKJiM0MzsJCW4gPSBOVUxMOwogCiAJCW9sZC5mcmVlbGlzdCA9IHNsYWItJmd0O2ZyZWVsaXN0OwogCQlvbGQuY291bnRlcnMgPSBzbGFiLSZndDtjb3VudGVyczsKQEAgLTU3NDgsNzYgJiM0Mzs1OTExLDExNCBAQCBzdGF0aWMgdm9pZCBfX3NsYWJfZnJlZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsCiAJCW5ldy5pbnVzZSAtPSBjbnQ7CiAKIAkJLyoKLQkJICogTWlnaHQgbmVlZCB0byBiZSB0YWtlbiBvZmYgKGR1ZSB0byBiZWNvbWluZyBlbXB0eSkgb3IgYWRkZWQKLQkJICogdG8gKGR1ZSB0byBub3QgYmVpbmcgZnVsbCBhbnltb3JlKSB0aGUgcGFydGlhbCBsaXN0LgotCQkgKiBVbmxlc3MgaXQmIzM5O3MgZnJvemVuLgomIzQzOwkJICogcGFydGlhbC0mZ3Q7cGFydGlhbDogdGhlIHNsYWIgd2FzIG9uIHRoZSBub2RlIHBhcnRpYWwgbGlzdCBhbmQKJiM0MzsJCSAqIHdpbGwgc3RpbGwgc3RheSB0aGVyZSwgc28gd2UgbmVlZCBubyBsaXN0IGhhbmRsaW5nIGFuZCBubwomIzQzOwkJICogbGlzdF9sb2NrLgomIzQzOwkJICoKJiM0MzsJCSAqIE5vdGUgdGhhdCAmIzM0O2NvbnRpbnVlOyYjMzQ7IGluIGEgZG8td2hpbGUgZ29lcyBvbiB0byBldmFsdWF0ZSB0aGUKJiM0MzsJCSAqIGNvbmRpdGlvbiBiZWxvdywgc28gd2UgZG8gcGVyZm9ybSB0aGUgZnJlZWxpc3QgdXBkYXRlLgogCQkgKi8KLQkJaWYgKCFuZXcuaW51c2UgfHwgd2FzX2Z1bGwpIHsKJiM0MzsJCWlmICghd2FzX2Z1bGwgJmFtcDsmYW1wOyBuZXcuaW51c2UpCiYjNDM7CQkJY29udGludWU7CiAKLQkJCW4gPSBnZXRfbm9kZShzLCBzbGFiX25pZChzbGFiKSk7CiYjNDM7CQkvKgomIzQzOwkJICogVGhlIHNsYWIgbWlnaHQgbmVlZCB0byBiZSB0YWtlbiBvZmYgKGR1ZSB0byBiZWNvbWluZyBlbXB0eSkKJiM0MzsJCSAqIG9yIGFkZGVkIHRvIChkdWUgdG8gbm90IGJlaW5nIGZ1bGwgYW55bW9yZSkgdGhlIHBhcnRpYWwKJiM0MzsJCSAqIGxpc3QuCiYjNDM7CQkgKgomIzQzOwkJICogRm9yIHRoZSBmdWxsIC0mZ3Q7IHBhcnRpYWwvZW1wdHkgdHJhbnNpdGlvbiwgdXNlCiYjNDM7CQkgKiBzcGluX3RyeWxvY2tfaXJxc2F2ZSgpIGFuZCB0aGUgcGFya2luZyBtZWNoYW5pc20gdG8gcmVkdWNlCiYjNDM7CQkgKiBsb2NrIGNvbnRlbnRpb24uCiYjNDM7CQkgKgomIzQzOwkJICogSWYgdGhlIGNtcHhjaGcgZG9lcyBub3Qgc3VjY2VlZCB0aGVuIHdlIHdpbGwgcmV0cnkuCiYjNDM7CQkgKi8KJiM0MzsJCW4gPSBnZXRfbm9kZShzLCBzbGFiX25pZChzbGFiKSk7CiYjNDM7CiYjNDM7CQlpZiAoIXdhc19mdWxsKSB7CiAJCQkvKgotCQkJICogU3BlY3VsYXRpdmVseSBhY3F1aXJlIHRoZSBsaXN0X2xvY2suCi0JCQkgKiBJZiB0aGUgY21weGNoZyBkb2VzIG5vdCBzdWNjZWVkIHRoZW4gd2UgbWF5Ci0JCQkgKiBkcm9wIHRoZSBsaXN0X2xvY2sgd2l0aG91dCBhbnkgcHJvY2Vzc2luZy4KLQkJCSAqCi0JCQkgKiBPdGhlcndpc2UgdGhlIGxpc3RfbG9jayB3aWxsIHN5bmNocm9uaXplIHdpdGgKLQkJCSAqIG90aGVyIHByb2Nlc3NvcnMgdXBkYXRpbmcgdGhlIGxpc3Qgb2Ygc2xhYnMuCiYjNDM7CQkJICogcGFydGlhbC0mZ3Q7ZW1wdHk6IHNwZWN1bGF0aXZlbHkgYWNxdWlyZSBsaXN0X2xvY2sKJiM0MzsJCQkgKiBwcmlvciB0byBjbXB4Y2hnKCksIGFzIHBlcmZvcm1pbmcgY21weGNoZygpIGJlZm9yZQomIzQzOwkJCSAqIGxvY2sgYWNxdWlzaXRpb24gcmFjZXMgd2l0aCBjb25jdXJyZW50IG9wZXJhdGlvbnMKJiM0MzsJCQkgKiAoZS5nLiwgdGhlIHNocmlua2VyKS4KIAkJCSAqLwogCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtuLSZndDtsaXN0X2xvY2ssIGZsYWdzKTsKLQotCQkJb25fbm9kZV9wYXJ0aWFsID0gc2xhYl90ZXN0X25vZGVfcGFydGlhbChzbGFiKTsKJiM0MzsJCX0gZWxzZSBpZiAoIXNwaW5fdHJ5bG9ja19pcnFzYXZlKCZhbXA7bi0mZ3Q7bGlzdF9sb2NrLCBmbGFncykpIHsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIGZ1bGwtJmd0O3BhcnRpYWwvZW1wdHk6IHRoZSBzbGFiIGlzIGZ1bGwsIHNvIGl0IGlzIG9uCiYjNDM7CQkJICogbm8gbGlzdDsgaWYgdGhlIGxpc3RfbG9jayBpcyBjb250ZW5kZWQsIHRoZW4gd2UKJiM0MzsJCQkgKiBwYXJrIHRoZSBzbGFiIHdpdGhvdXQgd2FpdGluZyBmb3IgdGhlIGxvY2suCiYjNDM7CQkJICovCiYjNDM7CQkJcGFyayA9IHRydWU7CiAJCX0KIAogCX0gd2hpbGUgKCFzbGFiX3VwZGF0ZV9mcmVlbGlzdChzLCBzbGFiLCAmYW1wO29sZCwgJmFtcDtuZXcsICYjMzQ7X19zbGFiX2ZyZWUmIzM0OykpOwogCi0JaWYgKGxpa2VseSghbikpIHsKLQkJLyoKLQkJICogV2UgZGlkbiYjMzk7dCB0YWtlIHRoZSBsaXN0X2xvY2sgYmVjYXVzZSB0aGUgc2xhYiB3YXMgYWxyZWFkeSBvbgotCQkgKiB0aGUgcGFydGlhbCBsaXN0IGFuZCB3aWxsIHJlbWFpbiB0aGVyZS4KLQkJICovCiYjNDM7CS8qIHBhcnRpYWwtJmd0O3BhcnRpYWw6IHdlIGRpZG4mIzM5O3QgdGFrZSB0aGUgbGlzdF9sb2NrLiAqLwomIzQzOwlpZiAobGlrZWx5KCFuKSkKIAkJcmV0dXJuOwotCX0KIAogCS8qCi0JICogVGhpcyBzbGFiIHdhcyBwYXJ0aWFsbHkgZW1wdHkgYnV0IG5vdCBvbiB0aGUgcGVyLW5vZGUgcGFydGlhbCBsaXN0LAotCSAqIGluIHdoaWNoIGNhc2Ugd2Ugc2hvdWxkbiYjMzk7dCBtYW5pcHVsYXRlIGl0cyBsaXN0LCBqdXN0IHJldHVybi4KJiM0MzsJICogUGFyayB0aGUgc2xhYi4gSWYgdGhpcyBwYXJrIG1ha2VzIHRoZSBwYXJrZWQgbGxpc3Qgbm9uLWVtcHR5LAomIzQzOwkgKiB0aGVuIHNjaGVkdWxlIHVucGFya193b3JrLgogCSAqLwomIzQzOwlpZiAodW5saWtlbHkocGFyaykpIHsKJiM0MzsJCWlmIChsbGlzdF9hZGQoc2xhYl90b19wYXJrZWRfbGxub2RlKHNsYWIpLCAmYW1wO24tJmd0O3BhcmtlZF9zbGFicykpCiYjNDM7CQkJcXVldWVfZGVsYXllZF93b3JrKGZsdXNod3EsICZhbXA7bi0mZ3Q7dW5wYXJrX3dvcmssCiYjNDM7CQkJCQkgICBVTlBBUktfREVMQVkpOwomIzQzOwkJc3RhdChzLCBQQVJLX1NMQUIpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CW9uX25vZGVfcGFydGlhbCA9IHNsYWJfdGVzdF9ub2RlX3BhcnRpYWwoc2xhYik7CiYjNDM7CiAJaWYgKCF3YXNfZnVsbCAmYW1wOyZhbXA7ICFvbl9ub2RlX3BhcnRpYWwpIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiBwYXJ0aWFsLSZndDtlbXB0eSwgb2ZmbGlzdDogdGhlIHNsYWIgaGFzIGJlZW4gdGFrZW4gb2ZmIHRoZQomIzQzOwkJICogcGFydGlhbCBsaXN0IGJ5IGEgYnVsayByZWZpbGwsIG9yIHBhcmtlZCBkdXJpbmcgaXRzIGZ1bGwgLSZndDsKJiM0MzsJCSAqIHBhcnRpYWwvZW1wdHkgdHJhbnNpdGlvbi4gSXQgd2lsbCBiZSBwdXQgYmFjayBieSBvdGhlciBwYXRocywKJiM0MzsJCSAqIHNvIHRoaXMgc2xhYiYjMzk7cyBsaXN0IGhhbmRsaW5nIGlzIG5vdCBvdXJzIHRvIGRvLgomIzQzOwkJICovCiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtuLSZndDtsaXN0X2xvY2ssIGZsYWdzKTsKIAkJcmV0dXJuOwogCX0KIAogCS8qCi0JICogSWYgc2xhYiBiZWNhbWUgZW1wdHksIHNob3VsZCB3ZSBhZGQva2VlcCBpdCBvbiB0aGUgcGFydGlhbCBsaXN0IG9yIHdlCi0JICogaGF2ZSBlbm91Z2g/CiYjNDM7CSAqIGZ1bGwvcGFydGlhbC0mZ3Q7ZW1wdHksIGV4Y2VlZDogd2UgaGF2ZSBlbm91Z2ggcGFydGlhbCBzbGFicyBhbHJlYWR5LgomIzQzOwkgKgomIzQzOwkgKiBQYXJrZWQgc2xhYnMgYXJlIGFsc28gY291bnRlZCBhcyBwYXJ0aWFsIHNsYWJzLiBXZSBkb24mIzM5O3QKJiM0MzsJICoga2VlcCBhbiBleGFjdCBjb3VudCBvZiBwYXJrZWQgc2xhYnMsIHNvIHdlIHRyZWF0IGFueSBwYXJrZWQKJiM0MzsJICogc2xhYiBhcyByb3VnaGx5IGV4Y2VlZGluZy4KIAkgKi8KLQlpZiAodW5saWtlbHkoIW5ldy5pbnVzZSAmYW1wOyZhbXA7IG4tJmd0O25yX3BhcnRpYWwgJmd0Oz0gcy0mZ3Q7bWluX3BhcnRpYWwpKQotCQlnb3RvIHNsYWJfZW1wdHk7CiYjNDM7CWlmICh1bmxpa2VseSghbmV3LmludXNlICZhbXA7JmFtcDsgKG4tJmd0O25yX3BhcnRpYWwgJmd0Oz0gcy0mZ3Q7bWluX3BhcnRpYWwgfHwKJiM0MzsJCQkJICAgICFsbGlzdF9lbXB0eSgmYW1wO24tJmd0O3BhcmtlZF9zbGFicykpKSkgewomIzQzOwkJLyogcGFydGlhbC0mZ3Q7ZW1wdHksIG9ubGlzdCwgZXhjZWVkICovCiYjNDM7CQlpZiAobGlrZWx5KCF3YXNfZnVsbCkpIHsKJiM0MzsJCQlyZW1vdmVfcGFydGlhbChuLCBzbGFiKTsKJiM0MzsJCQlzdGF0KHMsIEZSRUVfUkVNT1ZFX1BBUlRJQUwpOwomIzQzOwkJfQomIzQzOwkJLyogZWxzZSBmdWxsLSZndDtlbXB0eSwgZXhjZWVkOiBpdCBpcyBvbiBubyBsaXN0IHRvIHJlbW92ZSBmcm9tICovCiYjNDM7CiYjNDM7CQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7bi0mZ3Q7bGlzdF9sb2NrLCBmbGFncyk7CiYjNDM7CQlzdGF0KHMsIEZSRUVfU0xBQik7CiYjNDM7CQlkaXNjYXJkX3NsYWIocywgc2xhYik7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KIAogCS8qCi0JICogT2JqZWN0cyBsZWZ0IGluIHRoZSBzbGFiLiBJZiBpdCB3YXMgbm90IG9uIHRoZSBwYXJ0aWFsIGxpc3QgYmVmb3JlCi0JICogdGhlbiBhZGQgaXQuCiYjNDM7CSAqIEF0IHRoaXMgcG9pbnQsIG9ubHkgdGhyZWUgY2FzZXMgcmVtYWluOgomIzQzOwkgKiAgIGZ1bGwtJmd0O3BhcnRpYWwKJiM0MzsJICogICBmdWxsLSZndDtlbXB0eSwgbm90IGV4Y2VlZAomIzQzOwkgKiAgIHBhcnRpYWwtJmd0O2VtcHR5LCBvbmxpc3QsIG5vdCBleGNlZWQKIAkgKi8KJiM0MzsKJiM0MzsJLyogZnVsbC0mZ3Q7cGFydGlhbDsgZnVsbC0mZ3Q7ZW1wdHksIG5vdCBleGNlZWQgKi8KIAlpZiAodW5saWtlbHkod2FzX2Z1bGwpKSB7CiAJCWFkZF9wYXJ0aWFsKG4sIHNsYWIsIEFERF9UT19UQUlMKTsKIAkJc3RhdChzLCBGUkVFX0FERF9QQVJUSUFMKTsKIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO24tJmd0O2xpc3RfbG9jaywgZmxhZ3MpOwotCXJldHVybjsKLQotc2xhYl9lbXB0eToKLQkvKgotCSAqIFRoZSBzbGFiIGNvdWxkIGhhdmUgYSBzaW5nbGUgb2JqZWN0IGFuZCB0aHVzIGdvIGZyb20gZnVsbCB0byBlbXB0eSBpbgotCSAqIGEgc2luZ2xlIGZyZWUsIGJ1dCBtb3JlIGxpa2VseSBpdCB3YXMgb24gdGhlIHBhcnRpYWwgbGlzdC4gUmVtb3ZlIGl0LgotCSAqLwotCWlmIChsaWtlbHkoIXdhc19mdWxsKSkgewotCQlyZW1vdmVfcGFydGlhbChuLCBzbGFiKTsKLQkJc3RhdChzLCBGUkVFX1JFTU9WRV9QQVJUSUFMKTsKLQl9CiYjNDM7CS8qIGVsc2UgcGFydGlhbC0mZ3Q7ZW1wdHksIG9ubGlzdCwgbm90IGV4Y2VlZDogaXQgc3RheXMgb24gcGFydGlhbCBsaXN0ICovCiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7bi0mZ3Q7bGlzdF9sb2NrLCBmbGFncyk7Ci0Jc3RhdChzLCBGUkVFX1NMQUIpOwotCWRpc2NhcmRfc2xhYihzLCBzbGFiKTsKIH0KIAogLyoKQEAgLTczNTcsOCAmIzQzOzc1NTgsMTMgQEAgX19yZWZpbGxfb2JqZWN0c19hbnkoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKipwLCBnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBtaW4KIAogCQkJbiA9IGdldF9ub2RlKHMsIHpvbmVfdG9fbmlkKHpvbmUpKTsKIAomIzQzOwkJCS8qCiYjNDM7CQkJICogUGFya2VkIHNsYWJzIG1ha2UgdGhlIG5vZGUgd29ydGggdHJ5aW5nCiYjNDM7CQkJICogZXZlbiBpZiBucl9wYXJ0aWFsIGxvb2tzIGxvdy4KJiM0MzsJCQkgKi8KIAkJCWlmICghbiB8fCAhY3B1c2V0X3pvbmVfYWxsb3dlZCh6b25lLCBnZnApIHx8Ci0JCQkJCW4tJmd0O25yX3BhcnRpYWwgJmx0Oz0gcy0mZ3Q7bWluX3BhcnRpYWwpCiYjNDM7CQkJCQkobi0mZ3Q7bnJfcGFydGlhbCAmbHQ7PSBzLSZndDttaW5fcGFydGlhbCAmYW1wOyZhbXA7CiYjNDM7CQkJCQkgbGxpc3RfZW1wdHkoJmFtcDtuLSZndDtwYXJrZWRfc2xhYnMpKSkKIAkJCQljb250aW51ZTsKIAogCQkJciA9IF9fcmVmaWxsX29iamVjdHNfbm9kZShzLCBwLCBnZnAsIG1pbiwgbWF4LCBuLApAQCAtNzY3OSw2ICYjNDM7Nzg4NSw4IEBAIGluaXRfa21lbV9jYWNoZV9ub2RlKHN0cnVjdCBrbWVtX2NhY2hlX25vZGUgKm4pCiAJbi0mZ3Q7bnJfcGFydGlhbCA9IDA7CiAJc3Bpbl9sb2NrX2luaXQoJmFtcDtuLSZndDtsaXN0X2xvY2spOwogCUlOSVRfTElTVF9IRUFEKCZhbXA7bi0mZ3Q7cGFydGlhbCk7CiYjNDM7CWluaXRfbGxpc3RfaGVhZCgmYW1wO24tJmd0O3BhcmtlZF9zbGFicyk7CiYjNDM7CUlOSVRfREVMQVlFRF9XT1JLKCZhbXA7bi0mZ3Q7dW5wYXJrX3dvcmssIHVucGFya193b3JrX2ZuKTsKICNpZmRlZiBDT05GSUdfU0xVQl9ERUJVRwogCWF0b21pY19sb25nX3NldCgmYW1wO24tJmd0O25yX3NsYWJzLCAwKTsKIAlhdG9taWNfbG9uZ19zZXQoJmFtcDtuLSZndDt0b3RhbF9vYmplY3RzLCAwKTsKQEAgLTc4MTIsNiAmIzQzOzgwMjAsNyBAQCBzdGF0aWMgdm9pZCBmcmVlX2ttZW1fY2FjaGVfbm9kZXMoc3RydWN0IGttZW1fY2FjaGUgKnMpCiAJfQogCiAJZm9yX2VhY2hfa21lbV9jYWNoZV9ub2RlKHMsIG5vZGUsIG4pIHsKJiM0MzsJCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmYW1wO24tJmd0O3VucGFya193b3JrKTsKIAkJcy0mZ3Q7cGVyX25vZGVbbm9kZV0ubm9kZSA9IE5VTEw7CiAJCWttZW1fY2FjaGVfZnJlZShrbWVtX2NhY2hlX25vZGUsIG4pOwogCX0KQEAgLTgxMTIsNiAmIzQzOzgzMjEsMTAgQEAgc3RhdGljIHZvaWQgZnJlZV9wYXJ0aWFsKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlICpuKQogCiAJQlVHX09OKGlycXNfZGlzYWJsZWQoKSk7CiAJc3Bpbl9sb2NrX2lycSgmYW1wO24tJmd0O2xpc3RfbG9jayk7CiYjNDM7CiYjNDM7CS8qIFVucGFyayBzbGFicyBzbyB0aGUgd2FsayBjYW4gZmluZCB0aGVtLiAqLwomIzQzOwl1bnBhcmtfc2xhYnMocywgbiwgTlVMTCk7CiYjNDM7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNsYWIsIGgsICZhbXA7bi0mZ3Q7cGFydGlhbCwgc2xhYl9saXN0KSB7CiAJCWlmICghc2xhYi0mZ3Q7aW51c2UpIHsKIAkJCXJlbW92ZV9wYXJ0aWFsKG4sIHNsYWIpOwpAQCAtODM4Myw2ICYjNDM7ODU5Niw5IEBAIHN0YXRpYyBpbnQgX19rbWVtX2NhY2hlX2RvX3NocmluayhzdHJ1Y3Qga21lbV9jYWNoZSAqcykKIAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO24tJmd0O2xpc3RfbG9jaywgZmxhZ3MpOwogCiYjNDM7CQkvKiBQYXJrZWQgc2xhYnMgYXJlIHNocmluayBjYW5kaWRhdGVzIGFzIHdlbGwuICovCiYjNDM7CQl1bnBhcmtfc2xhYnMocywgbiwgTlVMTCk7CiYjNDM7CiAJCS8qCiAJCSAqIEJ1aWxkIGxpc3RzIG9mIHNsYWJzIHRvIGRpc2NhcmQgb3IgcHJvbW90ZS4KIAkJICoKQEAgLTk1MjIsNiAmIzQzOzk3MzgsOSBAQCBTVEFUX0FUVFIoRlJFRV9GQVNUUEFUSCwgZnJlZV9mYXN0cGF0aCk7CiBTVEFUX0FUVFIoRlJFRV9TTE9XUEFUSCwgZnJlZV9zbG93cGF0aCk7CiBTVEFUX0FUVFIoRlJFRV9BRERfUEFSVElBTCwgZnJlZV9hZGRfcGFydGlhbCk7CiBTVEFUX0FUVFIoRlJFRV9SRU1PVkVfUEFSVElBTCwgZnJlZV9yZW1vdmVfcGFydGlhbCk7CiYjNDM7U1RBVF9BVFRSKFBBUktfU0xBQiwgcGFya19zbGFiKTsKJiM0MztTVEFUX0FUVFIoVU5QQVJLX1NMQUIsIHVucGFya19zbGFiKTsKJiM0MztTVEFUX0FUVFIoVU5QQVJLX0VWRU5ULCB1bnBhcmtfZXZlbnQpOwogU1RBVF9BVFRSKEFMTE9DX1NMQUIsIGFsbG9jX3NsYWIpOwogU1RBVF9BVFRSKEFMTE9DX05PREVfTUlTTUFUQ0gsIGFsbG9jX25vZGVfbWlzbWF0Y2gpOwogU1RBVF9BVFRSKEZSRUVfU0xBQiwgZnJlZV9zbGFiKTsKQEAgLTk2MTAsNiAmIzQzOzk4MjksOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZSAqY29uc3Qgc2xhYl9hdHRyc1tdID0gewogCSZhbXA7ZnJlZV9zbG93cGF0aF9hdHRyLmF0dHIsCiAJJmFtcDtmcmVlX2FkZF9wYXJ0aWFsX2F0dHIuYXR0ciwKIAkmYW1wO2ZyZWVfcmVtb3ZlX3BhcnRpYWxfYXR0ci5hdHRyLAomIzQzOwkmYW1wO3Bhcmtfc2xhYl9hdHRyLmF0dHIsCiYjNDM7CSZhbXA7dW5wYXJrX3NsYWJfYXR0ci5hdHRyLAomIzQzOwkmYW1wO3VucGFya19ldmVudF9hdHRyLmF0dHIsCiAJJmFtcDthbGxvY19zbGFiX2F0dHIuYXR0ciwKIAkmYW1wO2FsbG9jX25vZGVfbWlzbWF0Y2hfYXR0ci5hdHRyLAogCSZhbXA7ZnJlZV9zbGFiX2F0dHIuYXR0ciwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE2OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgxODUKCQkJCQkJCW91dHB1dDogMjAzCgkJCQkJCQl0aG91Z2h0czogNTE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFwcGxpY2FiaWxpdHkgQXNzZXNzbWVudCBmb3IgU0xVQiBTbGFiIFBhcmtpbmcgT3B0aW1pemF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgYSAmIzM0O3BhcmtpbmcmIzM0OyBtZWNoYW5pc20gZm9yIHNsYWJzIHdpdGhpbiB0aGUgU0xVQiBhbGxvY2F0b3IuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgYWRkaW5nIGBwYXJrZWRfc2xhYnNgIHRvIGBrbWVtX2NhY2hlX25vZGVgIHRvIGhvbGQgc2xhYnMgd2l0aG91dCBsb2NraW5nLiBUaGUgZ29hbCBpcyB0byByZWR1Y2UgbG9jayBjb250ZW50aW9uIG9uIGBuLSZndDtsaXN0X2xvY2tgIGR1cmluZyB0aGUgc2xhYiBmcmVlaW5nIHByb2Nlc3MuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXaGVyZSBkb2VzIEtNU0FOIGZpdCBpbj8mIzM0OyBUaGlzIGlzIGludGVybmFsIFNMVUIgYWxsb2NhdG9yIGxvZ2ljLiBJdCYjMzk7cyB0b3VjaGluZyBmcmVlbGlzdHMsIHBhcnRpYWwgbGlzdHMsIGFuZCBzbGFiIHN0YXRlcyDigJMgYWxsIHZlcnkgaW50ZXJuYWwgZGV0YWlscy4gSXQmIzM5O3Mgbm90IGV4cG9zaW5nIG5ldyBkYXRhIHN0cnVjdHVyZXMgdG8gdXNlcnNwYWNlLCBhbmQgaXQmIzM5O3Mgbm90IGNoYW5naW5nIGhvdyBtZW1vcnkgaXMgaW5pdGlhbGl6ZWQgb3IgemVyb2VkLiBObyBuZXcgYm91bmRzIGNoZWNrcyBvciBsZW5ndGggY2FsY3VsYXRpb25zIGFyZSBpbnRyb2R1Y2VkIHRoYXQgY291bGQgbGVhZCB0byBpbmZvcm1hdGlvbiBsZWFrcyB2aWEgdW5pbml0aWFsaXplZCBtZW1vcnkuCgpUaGUgbGlrZWx5IGJ1Z3Mgd291bGQgYmUgdGhpbmdzIGxpa2UgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlcywgbGlzdCBjb3JydXB0aW9uIChsbGlzdCBvciBgbGlzdF9oZWFkYCBwcm9ibGVtcyksIG1lbW9yeSBsZWFrcyAodW5wYXJrZWQgc2xhYnMpLCBhbmQgY29uY3VycmVuY3kgaXNzdWVzIChyYWNlcyBiZXR3ZWVuIHBhcmtpbmcgYW5kIHVucGFya2luZykuIE5vdywgdGhlIGJlYXV0eSBvZiB0aGlzIGlzIHRoYXQgS0FTQU4gaXMgcGVyZmVjdGx5IGVxdWlwcGVkIHRvIGNhdGNoIHRoZSBVQUYgYW5kIGRvdWJsZS1mcmVlIGlzc3VlcywgYW5kIHRoZSBrZXJuZWwgZGVidWdnaW5nIHRvb2xzIChsaXN0IGRlYnVnZ2luZywgbG9ja2RlcCwgc2x1Yl9kZWJ1ZykgYXJlIHdlbGwtc3VpdGVkIGZvciB0cmFja2luZyB0aGUgcmVzdC4gVGhlcmUmIzM5O3Mgbm8gcmlzayBoZXJlIG9mIGluZm9ybWF0aW9uIGxlYWtzIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBUaGUgbW9kaWZpZWQgc3RydWN0dXJlcywgYGttZW1fY2FjaGVfbm9kZWAgYW5kIGBzbGFiYCwgYXJlICppbnRlcm5hbCogdG8gdGhlIGFsbG9jYXRvci4gVGhleSYjMzk7cmUgbm90IGJlaW5nIHNlbnQgdG8gb3IgZXhwb3NlZCB0byB1c2Vyc3BhY2UuCgpUaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBpcyBkZWZpbml0ZWx5IGBmYWxzZWAuCgpMZXQmIzM5O3MgZG8gYSBxdWljayBkb3VibGUtY2hlY2sgYWdhaW5zdCB0aGUgS01TQU4gcnVsZXMgdG8gYmUgYWJzb2x1dGVseSBzdXJlOgoKMS4gICoqS2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlcnNwYWNlOioqIE5vcGUuCjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzOioqIE5vcGUuIFRoZSB2YXJpYWJsZXMgaGVyZSBhcmUgYWxsIGludGVybmFsIHN0YXRlIHZhcmlhYmxlcyB0aGF0IGFyZSBmdWxseSBpbml0aWFsaXplZC4KMy4gICoqQ29tcGxleCBkYXRhIHN0cnVjdHVyZSBhbGxvY2F0aW9uL2luaXRpYWxpemF0aW9uOioqIE5vcGUuCjQuICAqKkJvdW5kcyBjaGVja3MgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBieXRlczoqKiBOb3BlLgoKU28sIHllYWgsIEkmIzM5O20gY29uZmlkZW50IGluIG15IGFzc2Vzc21lbnQuIGBOZWVkc0tNU0FOPWZhbHNlYCBpcyB0aGUgcmlnaHQgY2FsbCBoZXJlLiBJJiMzOTtsbCBmb3JtdWxhdGUgdGhlIHJlYXNvbmluZyBmb3IgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE2OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbnRlcm5hbCBTTFVCIGFsbG9jYXRvciBsb2dpYyB0byBpbnRyb2R1Y2UgYSBsb2NrbGVzcyBcJiMzNDtwYXJraW5nXCYjMzQ7IG1lY2hhbmlzbSBmb3Igc2xhYnMgdG8gcmVkdWNlIGxvY2sgY29udGVudGlvbiBvbiB0aGUgbm9kZSYjMzk7cyBsaXN0X2xvY2suIEl0IGFkZHMgYW4gbGxpc3QgZm9yIHBhcmtlZCBzbGFicyBhbmQgZGVsYXllZCB3b3JrIHRvIHVucGFyayB0aGVtLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBpbnRlcm5hbCBtZW1vcnkgbWFuYWdlbWVudCBzdHJ1Y3R1cmVzIChzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlLCBzdHJ1Y3Qgc2xhYikgYW5kIGZyZWVsaXN0IG9wZXJhdGlvbnMuIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBtYW5pZmVzdCBhcyBsaXN0IGNvcnJ1cHRpb25zLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIG9yIGNvbmN1cnJlbmN5IGlzc3VlcyAocmFjZSBjb25kaXRpb25zKS4gVGhlc2UgdHlwZXMgb2YgYnVncyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4sIHNsdWJfZGVidWcsIGxpc3QgZGVidWdnaW5nLCBhbmQgTE9DS0RFUC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWx0ZXIgbWVtb3J5IGluaXRpYWxpemF0aW9uIG9yIGJvdW5kcyBjaGVja2luZyBpbiBhIHdheSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBjYXVzZSBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW50ZXJuYWwgU0xVQiBhbGxvY2F0b3IgbG9naWMgdG8gaW50cm9kdWNlIGEgbG9ja2xlc3MgXCYjMzQ7cGFya2luZ1wmIzM0OyBtZWNoYW5pc20gZm9yIHNsYWJzIHRvIHJlZHVjZSBsb2NrIGNvbnRlbnRpb24gb24gdGhlIG5vZGUmIzM5O3MgbGlzdF9sb2NrLiBJdCBhZGRzIGFuIGxsaXN0IGZvciBwYXJrZWQgc2xhYnMgYW5kIGRlbGF5ZWQgd29yayB0byB1bnBhcmsgdGhlbS4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgaW50ZXJuYWwgbWVtb3J5IG1hbmFnZW1lbnQgc3RydWN0dXJlcyAoc3RydWN0IGttZW1fY2FjaGVfbm9kZSwgc3RydWN0IHNsYWIpIGFuZCBmcmVlbGlzdCBvcGVyYXRpb25zLiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgbWFuaWZlc3QgYXMgbGlzdCBjb3JydXB0aW9ucywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBvciBjb25jdXJyZW5jeSBpc3N1ZXMgKHJhY2UgY29uZGl0aW9ucykuIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLCBzbHViX2RlYnVnLCBsaXN0IGRlYnVnZ2luZywgYW5kIExPQ0tERVAuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcyBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFsdGVyIG1lbW9yeSBpbml0aWFsaXphdGlvbiBvciBib3VuZHMgY2hlY2tpbmcgaW4gYSB3YXkgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgY2F1c2UgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNTo0NzowNy41MTY4MDA3MzhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzcxOTU5NDY0MjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fa21lbV9jYWNoZV9zaHJpbmtcIixcbiAgICBcIl9fa21lbV9jYWNoZV9zaHV0ZG93blwiLFxuICAgIFwiX19rbWVtX2NhY2hlX2VtcHR5XCIsXG4gICAgXCJrbWVtX2NhY2hlX3Nocmlua1wiLFxuICAgIFwia21lbV9jYWNoZV9kZXN0cm95XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW50ZXJuYWwgU0xVQiBhbGxvY2F0b3IgbG9naWMgdG8gaW50cm9kdWNlIGEgbG9ja2xlc3MgXFxcInBhcmtpbmdcXFwiIG1lY2hhbmlzbSBmb3Igc2xhYnMgdG8gcmVkdWNlIGxvY2sgY29udGVudGlvbiBvbiB0aGUgbm9kZSdzIGxpc3RfbG9jay4gSXQgYWRkcyBhbiBsbGlzdCBmb3IgcGFya2VkIHNsYWJzIGFuZCBkZWxheWVkIHdvcmsgdG8gdW5wYXJrIHRoZW0uIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGludGVybmFsIG1lbW9yeSBtYW5hZ2VtZW50IHN0cnVjdHVyZXMgKHN0cnVjdCBrbWVtX2NhY2hlX25vZGUsIHN0cnVjdCBzbGFiKSBhbmQgZnJlZWxpc3Qgb3BlcmF0aW9ucy4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIG1hbmlmZXN0IGFzIGxpc3QgY29ycnVwdGlvbnMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgb3IgY29uY3VycmVuY3kgaXNzdWVzIChyYWNlIGNvbmRpdGlvbnMpLiBUaGVzZSB0eXBlcyBvZiBidWdzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiwgc2x1Yl9kZWJ1ZywgbGlzdCBkZWJ1Z2dpbmcsIGFuZCBMT0NLREVQLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgZXhwb3NlZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhbHRlciBtZW1vcnkgaW5pdGlhbGl6YXRpb24gb3IgYm91bmRzIGNoZWNraW5nIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGNhdXNlIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbG9ja2xlc3MgcGFya2luZyBtZWNoYW5pc20gZm9yIHNsYWJzIGluIHRoZSBTTFVCIGFsbG9jYXRvcidzIGZyZWUgc2xvd3BhdGggdG8gcmVkdWNlIGxpc3RfbG9jayBjb250ZW50aW9uLiBUaGlzIGlzIGEgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFmZmVjdHMgc2xhYiBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIGxvZ2ljLiBJdCBpcyByZWFjaGFibGUgYnkgZGVmYXVsdCBhbmQgc2hvdWxkIGJlIGZ1enplZC4gU2luY2UgYWxsb2NhdGlvbiBhbmQgZnJlZWluZyBhcmUgaG90IHBhdGhzLCB3ZSBmb2N1cyBvbiBjYWNoZSBzaHJpbmtpbmcgYW5kIGRlc3RydWN0aW9uIHBhdGhzIHdoaWNoIGFsc28gaW50ZXJhY3Qgd2l0aCB0aGUgbmV3IHVucGFya2luZyBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTU6NDc6MDcuNTE2ODA3NTc4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjkxMTkyODY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNWJiZThiZjIxMWZkNzBiZjJjYWEyOWViMzdmNzJkYjNkNjk2NDQ0NFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAyNCAxNTo0NzowNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9zbHViLmMgYi9tbS9zbHViLmNcXG5pbmRleCBiMGNkMDU3MmUyZjI2Li4yN2E3OGQ2M2Y1Mzc2IDEwMDY0NFxcbi0tLSBhL21tL3NsdWIuY1xcbisrKyBiL21tL3NsdWIuY1xcbkBAIC00OSw2ICs0OSw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zb3J0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pcnFfd29yay5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva3Byb2Jlcy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbGxpc3QuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RlYnVnZnMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3RyYWNlL2V2ZW50cy9rbWVtLmhcXHUwMDNlXFxuIFxcbkBAIC0xMjIsNiArMTIzLDggQEBcXG4gICogICAoTm90ZSB0aGF0IHRoZSB0b3RhbCBudW1iZXIgb2Ygc2xhYnMgaXMgYW4gYXRvbWljIHZhbHVlIHRoYXQgbWF5IGJlXFxuICAqICAgbW9kaWZpZWQgd2l0aG91dCB0YWtpbmcgdGhlIGxpc3QgbG9jaykuXFxuICAqXFxuKyAqICAgU2xhYnMgbWF5IGJlIHB1c2hlZCB0byBub2RlLVxcdTAwM2VwYXJrZWRfc2xhYnMgd2l0aG91dCBhY3F1aXJpbmcgbGlzdF9sb2NrLlxcbisgKlxcbiAgKiAgIFRoZSBsaXN0X2xvY2sgaXMgYSBjZW50cmFsaXplZCBsb2NrIGFuZCB0aHVzIHdlIGF2b2lkIHRha2luZyBpdCBhc1xcbiAgKiAgIG11Y2ggYXMgcG9zc2libGUuIEFzIGxvbmcgYXMgU0xVQiBkb2VzIG5vdCBoYXZlIHRvIGhhbmRsZSBwYXJ0aWFsXFxuICAqICAgc2xhYnMsIG9wZXJhdGlvbnMgY2FuIGNvbnRpbnVlIHdpdGhvdXQgYW55IGNlbnRyYWxpemVkIGxvY2suXFxuQEAgLTM2OCw2ICszNzEsOSBAQCBlbnVtIHN0YXRfaXRlbSB7XFxuIFxcdEZSRUVfU0xPV1BBVEgsXFx0XFx0LyogRnJlZSB0byBhIHNsYWIgKi9cXG4gXFx0RlJFRV9BRERfUEFSVElBTCxcXHQvKiBGcmVlaW5nIG1vdmVzIHNsYWIgdG8gcGFydGlhbCBsaXN0ICovXFxuIFxcdEZSRUVfUkVNT1ZFX1BBUlRJQUwsXFx0LyogRnJlZWluZyByZW1vdmVzIGxhc3Qgb2JqZWN0ICovXFxuK1xcdFBBUktfU0xBQixcXHRcXHQvKiBTbGFicyBwYXJrZWQgb250byB0aGUgbGxpc3QgYnkgZnJlZSBzbG93cGF0aCAqL1xcbitcXHRVTlBBUktfU0xBQixcXHRcXHQvKiBTbGFicyB1bnBhcmtlZCBmcm9tIHRoZSBsbGlzdCAqL1xcbitcXHRVTlBBUktfRVZFTlQsXFx0XFx0LyogVW5wYXJrIGV2ZW50cyAqL1xcbiBcXHRBTExPQ19TTEFCLFxcdFxcdC8qIE5ldyBzbGFiIGFjcXVpcmVkIGZyb20gcGFnZSBhbGxvY2F0b3IgKi9cXG4gXFx0QUxMT0NfTk9ERV9NSVNNQVRDSCxcXHQvKiBSZXF1ZXN0ZWQgbm9kZSBkaWZmZXJlbnQgZnJvbSBjcHUgc2hlYWYgKi9cXG4gXFx0RlJFRV9TTEFCLFxcdFxcdC8qIFNsYWIgZnJlZWQgdG8gdGhlIHBhZ2UgYWxsb2NhdG9yICovXFxuQEAgLTQ2Miw2ICs0NjgsMTQgQEAgc3RydWN0IGttZW1fY2FjaGVfbm9kZSB7XFxuIFxcdGF0b21pY19sb25nX3QgdG90YWxfb2JqZWN0cztcXG4gXFx0c3RydWN0IGxpc3RfaGVhZCBmdWxsO1xcbiAjZW5kaWZcXG4rXFx0LypcXG4rXFx0ICogSWYgbmVpdGhlciBzaGVhZiByZWZpbGwgbm9yIHRoZSBhbGxvYyBzbG93cGF0aCBwZXJmb3JtcyB0aGUgdW5wYXJrLFxcbitcXHQgKiB1bnBhcmtfd29ya19mbiB0YWtlcyBjYXJlIG9mIGl0LlxcbitcXHQgKi9cXG4rXFx0c3RydWN0IGRlbGF5ZWRfd29yayB1bnBhcmtfd29yaztcXG4rXFxuK1xcdC8qIFVzZWQgdG8gbGluayBwYXJrZWQgc2xhYnMgKi9cXG4rXFx0c3RydWN0IGxsaXN0X2hlYWQgcGFya2VkX3NsYWJzIF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7XFxuIH07XFxuIFxcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBrbWVtX2NhY2hlX25vZGUgKmdldF9ub2RlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBpbnQgbm9kZSlcXG5AQCAtNTA5LDYgKzUyMywxMiBAQCBzdGF0aWMgbm9kZW1hc2tfdCBzbGFiX2Jhcm5fbm9kZXM7XFxuICAqL1xcbiBzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmZsdXNod3E7XFxuIFxcbisvKlxcbisgKiBDZWlsaW5nIG9uIGhvdyBsb25nIHNsYWJzIHN0YXkgcGFya2VkIHdoZW4gbm8gc2hlYWYgcmVmaWxsIG9yIGFsbG9jXFxuKyAqIHNsb3dwYXRoIHVucGFya3MgdGhlbS5cXG4rICovXFxuKyNkZWZpbmUgVU5QQVJLX0RFTEFZXFx0KEhaKVxcbitcXG4gc3RydWN0IHNsdWJfZmx1c2hfd29yayB7XFxuIFxcdHN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrO1xcbiBcXHRzdHJ1Y3Qga21lbV9jYWNoZSAqcztcXG5AQCAtMzYyMyw2ICszNjQzLDEyMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcmVtb3ZlX3BhcnRpYWwoc3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbixcXG4gXFx0Y2xlYXJfbm9kZV9wYXJ0aWFsX3N0YXRlKG4sIHNsYWIpO1xcbiB9XFxuIFxcbisvKlxcbisgKiBBIHNsYWIgcGFya2VkIG9uIG4tXFx1MDAzZXBhcmtlZF9zbGFicyBpcyBub3Qgb24gcGFydGlhbCBsaXN0LCBzbyBpdHMgc2xhYl9saXN0IGlzXFxuKyAqIGZyZWUgYW5kIHdlIHJldXNlIGl0IGFzIHRoZSBsbGlzdF9ub2RlLlxcbisgKi9cXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgbGxpc3Rfbm9kZSAqc2xhYl90b19wYXJrZWRfbGxub2RlKHN0cnVjdCBzbGFiICpzbGFiKVxcbit7XFxuK1xcdHJldHVybiAoc3RydWN0IGxsaXN0X25vZGUgKilcXHUwMDI2c2xhYi1cXHUwMDNlc2xhYl9saXN0O1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBzbGFiICpwYXJrZWRfbGxub2RlX3RvX3NsYWIoc3RydWN0IGxsaXN0X25vZGUgKm5vZGUpXFxuK3tcXG4rXFx0cmV0dXJuIGNvbnRhaW5lcl9vZigoc3RydWN0IGxpc3RfaGVhZCAqKW5vZGUsIHN0cnVjdCBzbGFiLCBzbGFiX2xpc3QpO1xcbit9XFxuK1xcbisvKlxcbisgKiBNb3ZlIHNsYWJzIHBhcmtlZCBvbiBuLVxcdTAwM2VwYXJrZWRfc2xhYnMgdG8gbi1cXHUwMDNlcGFydGlhbC4gQ2FsbGVkIHdpdGggdGhlXFxuKyAqIGxpc3RfbG9jayBoZWxkLCBieSB0aGUgcGF0aHMgdGhhdCBjb25zdW1lIHRoZSBwYXJ0aWFsIGxpc3QsIG9uIGJlaGFsZiBvZiB0aGVcXG4rICogY3B1cyB0aGF0IGNvdWxkIG5vdCBnZXQgdGhlIGxvY2sgd2hlbiBwYXJraW5nLlxcbisgKlxcbisgKiBJZiBAZGlzY2FyZCBpcyBub3QgTlVMTCwgcHV0IGVtcHR5IHNsYWJzIGJleW9uZCBtaW5fcGFydGlhbCBvbiBAZGlzY2FyZCwgdGhlXFxuKyAqIGNhbGxlciBzaG91bGQgY2FsbCBkaXNjYXJkX3NsYWIoKSBhZnRlciBkcm9wcGluZyB0aGUgbG9jay4gIENhbGxlcnMgdGhhdCBtYXlcXG4rICogbm90IGZyZWUgcGFnZXMgaW4gdGhlaXIgY29udGV4dCBzaG91bGQgcGFzcyBOVUxMLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgdW5wYXJrX3NsYWJzKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlICpuLFxcbitcXHRcXHRcXHQgc3RydWN0IGxpc3RfaGVhZCAqZGlzY2FyZClcXG4re1xcbitcXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqcG9zLCAqbmV4dDtcXG4rXFx0dW5zaWduZWQgbG9uZyBhZGRlZCA9IDAsIGRpc2NhcmRlZCA9IDA7XFxuK1xcdHVuc2lnbmVkIGxvbmcgaGVhZHJvb20gPSAwO1xcbitcXHRMSVNUX0hFQUQodG9fYWRkKTtcXG4rXFxuK1xcdHNsYWJfbG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2bi1cXHUwMDNlbGlzdF9sb2NrKTtcXG4rXFxuK1xcdHBvcyA9IGxsaXN0X2RlbF9hbGwoXFx1MDAyNm4tXFx1MDAzZXBhcmtlZF9zbGFicyk7XFxuK1xcdGlmIChsaWtlbHkoIXBvcykpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIENhbGN1bGF0ZSBob3cgbWFueSBtb3JlIHNsYWJzIHRoZSBwYXJ0aWFsIGxpc3Qgd2FudHMgYmVmb3JlIGl0IGhhc1xcbitcXHQgKiByZWFjaGVkIG1pbl9wYXJ0aWFsLlxcbitcXHQgKi9cXG4rXFx0aWYgKHMtXFx1MDAzZW1pbl9wYXJ0aWFsIFxcdTAwM2Ugbi1cXHUwMDNlbnJfcGFydGlhbClcXG4rXFx0XFx0aGVhZHJvb20gPSBzLVxcdTAwM2VtaW5fcGFydGlhbCAtIG4tXFx1MDAzZW5yX3BhcnRpYWw7XFxuK1xcbitcXHRmb3IgKDsgcG9zOyBwb3MgPSBuZXh0KSB7XFxuK1xcdFxcdHN0cnVjdCBzbGFiICpzbGFiID0gcGFya2VkX2xsbm9kZV90b19zbGFiKHBvcyk7XFxuK1xcdFxcdHN0cnVjdCBmcmVlbGlzdF9jb3VudGVycyBmbGM7XFxuK1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBCYWNrIHVwIHRoZSBwb2ludGVyLCBiZWNhdXNlIHRoZSBsaXN0X2FkZF90YWlsKCkgYmVsb3dcXG4rXFx0XFx0ICogb3ZlcndyaXRlcyB0aGUgbGxpc3QgbGlua2FnZS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdG5leHQgPSBwb3MtXFx1MDAzZW5leHQ7XFxuK1xcbitcXHRcXHRpZiAoZGlzY2FyZCkge1xcbitcXHRcXHRcXHRmbGMuY291bnRlcnMgPSBkYXRhX3JhY2UoUkVBRF9PTkNFKHNsYWItXFx1MDAzZWNvdW50ZXJzKSk7XFxuK1xcdFxcdFxcdGlmICghZmxjLmludXNlIFxcdTAwMjZcXHUwMDI2IGFkZGVkIFxcdTAwM2U9IGhlYWRyb29tKSB7XFxuK1xcdFxcdFxcdFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNnNsYWItXFx1MDAzZXNsYWJfbGlzdCwgZGlzY2FyZCk7XFxuK1xcdFxcdFxcdFxcdGRpc2NhcmRlZCsrO1xcbitcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRzbGFiX3NldF9ub2RlX3BhcnRpYWwoc2xhYik7XFxuK1xcdFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNnNsYWItXFx1MDAzZXNsYWJfbGlzdCwgXFx1MDAyNnRvX2FkZCk7XFxuK1xcdFxcdGFkZGVkKys7XFxuK1xcdH1cXG4rXFxuK1xcdG4tXFx1MDAzZW5yX3BhcnRpYWwgKz0gYWRkZWQ7XFxuK1xcdGxpc3Rfc3BsaWNlX3RhaWwoXFx1MDAyNnRvX2FkZCwgXFx1MDAyNm4tXFx1MDAzZXBhcnRpYWwpO1xcbitcXG4rXFx0c3RhdF9hZGQocywgRlJFRV9BRERfUEFSVElBTCwgYWRkZWQpO1xcbitcXHRzdGF0X2FkZChzLCBVTlBBUktfU0xBQiwgYWRkZWQgKyBkaXNjYXJkZWQpO1xcbitcXHRpZiAodW5saWtlbHkoZGlzY2FyZGVkKSlcXG4rXFx0XFx0c3RhdF9hZGQocywgRlJFRV9TTEFCLCBkaXNjYXJkZWQpO1xcbitcXHRzdGF0KHMsIFVOUEFSS19FVkVOVCk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFBhcmtlZCBzbGFicyBhcmUgbm9ybWFsbHkgdW5wYXJrZWQgYnkgc2hlYWYgcmVmaWxsIG9yIHRoZSBhbGxvYyBzbG93cGF0aCwgYnV0XFxuKyAqIHdoZW4gdGhlIHN5c3RlbSBleHBlcmllbmNlcyBhIGhlYXZ5IGJ1cnN0IG9mIGZyZWVzLCBhYnJ1cHRseSBnb2VzIGlkbGUsXFxuKyAqIGFuZCBuZWl0aGVyIHNoZWFmIHJlZmlsbCBub3IgdGhlIGFsbG9jIHNsb3dwYXRoIGlzIHJlYWNoZWQsXFxuKyAqIHNvbWUgcGFya2VkIHNsYWJzIG1heSBiZSBsZWZ0IHN0cmFuZGVkIGluIHRoZSBwYXJrZWQgbGxpc3QuIFRoaXMgZnVuY3Rpb25cXG4rICogc2VydmVzIGFzIGEgbGFzdC1yZXNvcnQgZmFsbGJhY2suXFxuKyAqIFRoaXMgd29yayBpcyBzY2hlZHVsZWQgYnkgdGhlIGxsaXN0X2FkZCgpIHRoYXQgbWFrZXMgdGhlIHBhcmtlZCBsbGlzdCBub24tZW1wdHkuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCB1bnBhcmtfd29ya19mbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuK3tcXG4rXFx0c3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbiA9IGNvbnRhaW5lcl9vZih0b19kZWxheWVkX3dvcmsod29yayksXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgdW5wYXJrX3dvcmspO1xcbitcXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqZmlyc3Q7XFxuK1xcdHN0cnVjdCBrbWVtX2NhY2hlICpzO1xcbitcXHRzdHJ1Y3Qgc2xhYiAqc2xhYiwgKnQ7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuK1xcdExJU1RfSEVBRChkaXNjYXJkKTtcXG4rXFxuK1xcdGlmIChsaWtlbHkobGxpc3RfZW1wdHkoXFx1MDAyNm4tXFx1MDAzZXBhcmtlZF9zbGFicykpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2bi1cXHUwMDNlbGlzdF9sb2NrLCBmbGFncyk7XFxuK1xcbitcXHRmaXJzdCA9IFJFQURfT05DRShuLVxcdTAwM2VwYXJrZWRfc2xhYnMuZmlyc3QpO1xcbitcXHRpZiAodW5saWtlbHkoIWZpcnN0KSkge1xcbitcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZuLVxcdTAwM2VsaXN0X2xvY2ssIGZsYWdzKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcdHMgPSBwYXJrZWRfbGxub2RlX3RvX3NsYWIoZmlyc3QpLVxcdTAwM2VzbGFiX2NhY2hlO1xcbitcXG4rXFx0dW5wYXJrX3NsYWJzKHMsIG4sIFxcdTAwMjZkaXNjYXJkKTtcXG4rXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2bi1cXHUwMDNlbGlzdF9sb2NrLCBmbGFncyk7XFxuK1xcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2xhYiwgdCwgXFx1MDAyNmRpc2NhcmQsIHNsYWJfbGlzdClcXG4rXFx0XFx0ZGlzY2FyZF9zbGFiKHMsIHNsYWIpO1xcbit9XFxuK1xcbiAvKlxcbiAgKiBDYWxsZWQgb25seSBmb3Iga21lbV9jYWNoZV9kZWJ1ZygpIGNhY2hlcyBpbnN0ZWFkIG9mIHJlbW92ZV9wYXJ0aWFsKCksIHdpdGggYVxcbiAgKiBzbGFiIGZyb20gdGhlIG4tXFx1MDAzZXBhcnRpYWwgbGlzdC4gUmVtb3ZlIG9ubHkgYSBzaW5nbGUgb2JqZWN0IGZyb20gdGhlIHNsYWIsIGRvXFxuQEAgLTM4MTgsOSArMzk1NCwxMyBAQCBzdGF0aWMgYm9vbCBnZXRfcGFydGlhbF9ub2RlX2J1bGsoc3RydWN0IGttZW1fY2FjaGUgKnMsXFxuIFxcdHN0cnVjdCBzbGFiICpmaXJzdCA9IE5VTEwsICpsYXN0ID0gTlVMTDtcXG4gXFx0dW5zaWduZWQgaW50IHRvdGFsX2ZyZWUgPSAwO1xcbiBcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbitcXHRMSVNUX0hFQUQoZGlzY2FyZCk7XFxuIFxcbi1cXHQvKiBSYWN5IGNoZWNrIHRvIGF2b2lkIHRha2luZyB0aGUgbG9jayB1bm5lY2Vzc2FyaWx5LiAqL1xcbi1cXHRpZiAoIW4gfHwgZGF0YV9yYWNlKCFuLVxcdTAwM2Vucl9wYXJ0aWFsKSlcXG4rXFx0LypcXG4rXFx0ICogUmFjeSBjaGVjayB0byBhdm9pZCB0YWtpbmcgdGhlIGxvY2sgdW5uZWNlc3NhcmlseS5cXG4rXFx0ICogVGhlIHBhcmtlZF9zbGFicyBsbGlzdCBtdXN0IGFsc28gYmUgYWNjb3VudGVkIGZvci5cXG4rXFx0ICovXFxuK1xcdGlmICghbiB8fCAoIWRhdGFfcmFjZShuLVxcdTAwM2Vucl9wYXJ0aWFsKSBcXHUwMDI2XFx1MDAyNiBsbGlzdF9lbXB0eShcXHUwMDI2bi1cXHUwMDNlcGFya2VkX3NsYWJzKSkpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuIFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZwYy1cXHUwMDNlc2xhYnMpO1xcbkBAIC0zODMwLDYgKzM5NzAsOSBAQCBzdGF0aWMgYm9vbCBnZXRfcGFydGlhbF9ub2RlX2J1bGsoc3RydWN0IGttZW1fY2FjaGUgKnMsXFxuIFxcdGVsc2UgaWYgKCFzcGluX3RyeWxvY2tfaXJxc2F2ZShcXHUwMDI2bi1cXHUwMDNlbGlzdF9sb2NrLCBmbGFncykpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuK1xcdC8qIElmIHRoZXJlIGFyZSBwYXJrZWQgc2xhYnMsIG1vdmUgdGhlbSB0byB0aGUgcGFydGlhbCBsaXN0IGZpcnN0LiAqL1xcbitcXHR1bnBhcmtfc2xhYnMocywgbiwgYWxsb3dfc3BpbiA/IFxcdTAwMjZkaXNjYXJkIDogTlVMTCk7XFxuK1xcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2xhYiwgc2xhYjIsIFxcdTAwMjZuLVxcdTAwM2VwYXJ0aWFsLCBzbGFiX2xpc3QpIHtcXG4gXFx0XFx0c3RydWN0IGZyZWVsaXN0X2NvdW50ZXJzIGZsYztcXG4gXFx0XFx0dW5zaWduZWQgaW50IHNsYWJfZnJlZTtcXG5AQCAtMzg3NCw2ICs0MDE3LDEwIEBAIHN0YXRpYyBib29sIGdldF9wYXJ0aWFsX25vZGVfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG4gXFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZsYXN0LVxcdTAwM2VzbGFiX2xpc3QpO1xcbiBcXG4gXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2bi1cXHUwMDNlbGlzdF9sb2NrLCBmbGFncyk7XFxuK1xcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2xhYiwgc2xhYjIsIFxcdTAwMjZkaXNjYXJkLCBzbGFiX2xpc3QpXFxuK1xcdFxcdGRpc2NhcmRfc2xhYihzLCBzbGFiKTtcXG4rXFxuIFxcdHJldHVybiB0b3RhbF9mcmVlIFxcdTAwM2UgMDtcXG4gfVxcbiBcXG5AQCAtMzg4NSwyMyArNDAzMiwyOSBAQCBzdGF0aWMgdm9pZCAqZ2V0X2Zyb21fcGFydGlhbF9ub2RlKHN0cnVjdCBrbWVtX2NhY2hlICpzLFxcbiBcXHRcXHRcXHRcXHQgICBnZnBfdCBnZnBfZmxhZ3MsXFxuIFxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBzbGFiX2FsbG9jX2NvbnRleHQgKmFjKVxcbiB7XFxuK1xcdGJvb2wgYWxsb3dfc3BpbiA9IGFsbG9jX2ZsYWdzX2FsbG93X3NwaW5uaW5nKGFjLVxcdTAwM2VhbGxvY19mbGFncyk7XFxuIFxcdHN0cnVjdCBzbGFiICpzbGFiLCAqc2xhYjI7XFxuIFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIFxcdHZvaWQgKm9iamVjdCA9IE5VTEw7XFxuK1xcdExJU1RfSEVBRChkaXNjYXJkKTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIFJhY3kgY2hlY2suIElmIHdlIG1pc3Rha2VubHkgc2VlIG5vIHBhcnRpYWwgc2xhYnMgdGhlbiB3ZVxcbiBcXHQgKiBqdXN0IGFsbG9jYXRlIGFuIGVtcHR5IHNsYWIuIElmIHdlIG1pc3Rha2VubHkgdHJ5IHRvIGdldCBhXFxuIFxcdCAqIHBhcnRpYWwgc2xhYiBhbmQgdGhlcmUgaXMgbm9uZSBhdmFpbGFibGUgdGhlbiBnZXRfZnJvbV9wYXJ0aWFsKClcXG4tXFx0ICogd2lsbCByZXR1cm4gTlVMTC5cXG4rXFx0ICogd2lsbCByZXR1cm4gTlVMTC4gQWxzbyB0YWtlIHRoZSBwYXJrZWRfc2xhYnMgbGxpc3QgaW50byBhY2NvdW50LlxcbiBcXHQgKi9cXG4tXFx0aWYgKCFuIHx8ICFuLVxcdTAwM2Vucl9wYXJ0aWFsKVxcbitcXHRpZiAoIW4gfHwgKCFkYXRhX3JhY2Uobi1cXHUwMDNlbnJfcGFydGlhbCkgXFx1MDAyNlxcdTAwMjYgbGxpc3RfZW1wdHkoXFx1MDAyNm4tXFx1MDAzZXBhcmtlZF9zbGFicykpKVxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFxuLVxcdGlmIChhbGxvY19mbGFnc19hbGxvd19zcGlubmluZyhhYy1cXHUwMDNlYWxsb2NfZmxhZ3MpKVxcbitcXHRpZiAoYWxsb3dfc3BpbilcXG4gXFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNm4tXFx1MDAzZWxpc3RfbG9jaywgZmxhZ3MpO1xcbiBcXHRlbHNlIGlmICghc3Bpbl90cnlsb2NrX2lycXNhdmUoXFx1MDAyNm4tXFx1MDAzZWxpc3RfbG9jaywgZmxhZ3MpKVxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFxuK1xcdC8qIElmIHRoZXJlIGFyZSBwYXJrZWQgc2xhYnMsIG1vdmUgdGhlbSB0byB0aGUgcGFydGlhbCBsaXN0IGZpcnN0LiAqL1xcbitcXHR1bnBhcmtfc2xhYnMocywgbiwgYWxsb3dfc3BpbiA/IFxcdTAwMjZkaXNjYXJkIDogTlVMTCk7XFxuK1xcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2xhYiwgc2xhYjIsIFxcdTAwMjZuLVxcdTAwM2VwYXJ0aWFsLCBzbGFiX2xpc3QpIHtcXG4gXFxuIFxcdFxcdHN0cnVjdCBmcmVlbGlzdF9jb3VudGVycyBvbGQsIG5ldztcXG5AQCAtMzkzOSw2ICs0MDkyLDEwIEBAIHN0YXRpYyB2b2lkICpnZXRfZnJvbV9wYXJ0aWFsX25vZGUoc3RydWN0IGttZW1fY2FjaGUgKnMsXFxuIFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuIFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNm4tXFx1MDAzZWxpc3RfbG9jaywgZmxhZ3MpO1xcbitcXG4rXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNsYWIsIHNsYWIyLCBcXHUwMDI2ZGlzY2FyZCwgc2xhYl9saXN0KVxcbitcXHRcXHRkaXNjYXJkX3NsYWIocywgc2xhYik7XFxuK1xcbiBcXHRyZXR1cm4gb2JqZWN0O1xcbiB9XFxuIFxcbkBAIC0zOTk0LDggKzQxNTEsMTMgQEAgc3RhdGljIHZvaWQgKmdldF9mcm9tX2FueV9wYXJ0aWFsKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnBfZmxhZ3MsXFxuIFxcbiBcXHRcXHRcXHRuID0gZ2V0X25vZGUocywgem9uZV90b19uaWQoem9uZSkpO1xcbiBcXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogUGFya2VkIHNsYWJzIG1ha2UgdGhlIG5vZGUgd29ydGggdmlzaXRpbmcgZXZlbiBpZlxcbitcXHRcXHRcXHQgKiBucl9wYXJ0aWFsIGxvb2tzIGxvdy5cXG4rXFx0XFx0XFx0ICovXFxuIFxcdFxcdFxcdGlmIChuIFxcdTAwMjZcXHUwMDI2IGNwdXNldF96b25lX2FsbG93ZWQoem9uZSwgZ2ZwX2ZsYWdzKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHRcXHRcXHRcXHRuLVxcdTAwM2Vucl9wYXJ0aWFsIFxcdTAwM2Ugcy1cXHUwMDNlbWluX3BhcnRpYWwpIHtcXG4rXFx0XFx0XFx0XFx0XFx0KG4tXFx1MDAzZW5yX3BhcnRpYWwgXFx1MDAzZSBzLVxcdTAwM2VtaW5fcGFydGlhbCB8fFxcbitcXHRcXHRcXHRcXHRcXHQgIWxsaXN0X2VtcHR5KFxcdTAwMjZuLVxcdTAwM2VwYXJrZWRfc2xhYnMpKSkge1xcbiBcXG4gXFx0XFx0XFx0XFx0dm9pZCAqb2JqZWN0ID0gZ2V0X2Zyb21fcGFydGlhbF9ub2RlKHMsIG4sXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGdmcF9mbGFncywgYWMpO1xcbkBAIC01NzE5LDcgKzU4ODEsNyBAQCBzdGF0aWMgdm9pZCBfX3NsYWJfZnJlZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsXFxuIFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkcilcXG4gXFxuIHtcXG4tXFx0Ym9vbCB3YXNfZnVsbDtcXG4rXFx0Ym9vbCB3YXNfZnVsbCwgcGFyayA9IGZhbHNlO1xcbiBcXHRzdHJ1Y3QgZnJlZWxpc3RfY291bnRlcnMgb2xkLCBuZXc7XFxuIFxcdHN0cnVjdCBrbWVtX2NhY2hlX25vZGUgKm4gPSBOVUxMO1xcbiBcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbkBAIC01NzMxLDEwICs1ODkzLDExIEBAIHN0YXRpYyB2b2lkIF9fc2xhYl9mcmVlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYixcXG4gXFx0fVxcbiBcXG4gXFx0ZG8ge1xcbi1cXHRcXHRpZiAodW5saWtlbHkobikpIHtcXG4rXFx0XFx0aWYgKHVubGlrZWx5KG4gXFx1MDAyNlxcdTAwMjYgIXBhcmspKVxcbiBcXHRcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZuLVxcdTAwM2VsaXN0X2xvY2ssIGZsYWdzKTtcXG4tXFx0XFx0XFx0biA9IE5VTEw7XFxuLVxcdFxcdH1cXG4rXFxuK1xcdFxcdHBhcmsgPSBmYWxzZTtcXG4rXFx0XFx0biA9IE5VTEw7XFxuIFxcbiBcXHRcXHRvbGQuZnJlZWxpc3QgPSBzbGFiLVxcdTAwM2VmcmVlbGlzdDtcXG4gXFx0XFx0b2xkLmNvdW50ZXJzID0gc2xhYi1cXHUwMDNlY291bnRlcnM7XFxuQEAgLTU3NDgsNzYgKzU5MTEsMTE0IEBAIHN0YXRpYyB2b2lkIF9fc2xhYl9mcmVlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYixcXG4gXFx0XFx0bmV3LmludXNlIC09IGNudDtcXG4gXFxuIFxcdFxcdC8qXFxuLVxcdFxcdCAqIE1pZ2h0IG5lZWQgdG8gYmUgdGFrZW4gb2ZmIChkdWUgdG8gYmVjb21pbmcgZW1wdHkpIG9yIGFkZGVkXFxuLVxcdFxcdCAqIHRvIChkdWUgdG8gbm90IGJlaW5nIGZ1bGwgYW55bW9yZSkgdGhlIHBhcnRpYWwgbGlzdC5cXG4tXFx0XFx0ICogVW5sZXNzIGl0J3MgZnJvemVuLlxcbitcXHRcXHQgKiBwYXJ0aWFsLVxcdTAwM2VwYXJ0aWFsOiB0aGUgc2xhYiB3YXMgb24gdGhlIG5vZGUgcGFydGlhbCBsaXN0IGFuZFxcbitcXHRcXHQgKiB3aWxsIHN0aWxsIHN0YXkgdGhlcmUsIHNvIHdlIG5lZWQgbm8gbGlzdCBoYW5kbGluZyBhbmQgbm9cXG4rXFx0XFx0ICogbGlzdF9sb2NrLlxcbitcXHRcXHQgKlxcbitcXHRcXHQgKiBOb3RlIHRoYXQgXFxcImNvbnRpbnVlO1xcXCIgaW4gYSBkby13aGlsZSBnb2VzIG9uIHRvIGV2YWx1YXRlIHRoZVxcbitcXHRcXHQgKiBjb25kaXRpb24gYmVsb3csIHNvIHdlIGRvIHBlcmZvcm0gdGhlIGZyZWVsaXN0IHVwZGF0ZS5cXG4gXFx0XFx0ICovXFxuLVxcdFxcdGlmICghbmV3LmludXNlIHx8IHdhc19mdWxsKSB7XFxuK1xcdFxcdGlmICghd2FzX2Z1bGwgXFx1MDAyNlxcdTAwMjYgbmV3LmludXNlKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuLVxcdFxcdFxcdG4gPSBnZXRfbm9kZShzLCBzbGFiX25pZChzbGFiKSk7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFRoZSBzbGFiIG1pZ2h0IG5lZWQgdG8gYmUgdGFrZW4gb2ZmIChkdWUgdG8gYmVjb21pbmcgZW1wdHkpXFxuK1xcdFxcdCAqIG9yIGFkZGVkIHRvIChkdWUgdG8gbm90IGJlaW5nIGZ1bGwgYW55bW9yZSkgdGhlIHBhcnRpYWxcXG4rXFx0XFx0ICogbGlzdC5cXG4rXFx0XFx0ICpcXG4rXFx0XFx0ICogRm9yIHRoZSBmdWxsIC1cXHUwMDNlIHBhcnRpYWwvZW1wdHkgdHJhbnNpdGlvbiwgdXNlXFxuK1xcdFxcdCAqIHNwaW5fdHJ5bG9ja19pcnFzYXZlKCkgYW5kIHRoZSBwYXJraW5nIG1lY2hhbmlzbSB0byByZWR1Y2VcXG4rXFx0XFx0ICogbG9jayBjb250ZW50aW9uLlxcbitcXHRcXHQgKlxcbitcXHRcXHQgKiBJZiB0aGUgY21weGNoZyBkb2VzIG5vdCBzdWNjZWVkIHRoZW4gd2Ugd2lsbCByZXRyeS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdG4gPSBnZXRfbm9kZShzLCBzbGFiX25pZChzbGFiKSk7XFxuK1xcbitcXHRcXHRpZiAoIXdhc19mdWxsKSB7XFxuIFxcdFxcdFxcdC8qXFxuLVxcdFxcdFxcdCAqIFNwZWN1bGF0aXZlbHkgYWNxdWlyZSB0aGUgbGlzdF9sb2NrLlxcbi1cXHRcXHRcXHQgKiBJZiB0aGUgY21weGNoZyBkb2VzIG5vdCBzdWNjZWVkIHRoZW4gd2UgbWF5XFxuLVxcdFxcdFxcdCAqIGRyb3AgdGhlIGxpc3RfbG9jayB3aXRob3V0IGFueSBwcm9jZXNzaW5nLlxcbi1cXHRcXHRcXHQgKlxcbi1cXHRcXHRcXHQgKiBPdGhlcndpc2UgdGhlIGxpc3RfbG9jayB3aWxsIHN5bmNocm9uaXplIHdpdGhcXG4tXFx0XFx0XFx0ICogb3RoZXIgcHJvY2Vzc29ycyB1cGRhdGluZyB0aGUgbGlzdCBvZiBzbGFicy5cXG4rXFx0XFx0XFx0ICogcGFydGlhbC1cXHUwMDNlZW1wdHk6IHNwZWN1bGF0aXZlbHkgYWNxdWlyZSBsaXN0X2xvY2tcXG4rXFx0XFx0XFx0ICogcHJpb3IgdG8gY21weGNoZygpLCBhcyBwZXJmb3JtaW5nIGNtcHhjaGcoKSBiZWZvcmVcXG4rXFx0XFx0XFx0ICogbG9jayBhY3F1aXNpdGlvbiByYWNlcyB3aXRoIGNvbmN1cnJlbnQgb3BlcmF0aW9uc1xcbitcXHRcXHRcXHQgKiAoZS5nLiwgdGhlIHNocmlua2VyKS5cXG4gXFx0XFx0XFx0ICovXFxuIFxcdFxcdFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZuLVxcdTAwM2VsaXN0X2xvY2ssIGZsYWdzKTtcXG4tXFxuLVxcdFxcdFxcdG9uX25vZGVfcGFydGlhbCA9IHNsYWJfdGVzdF9ub2RlX3BhcnRpYWwoc2xhYik7XFxuK1xcdFxcdH0gZWxzZSBpZiAoIXNwaW5fdHJ5bG9ja19pcnFzYXZlKFxcdTAwMjZuLVxcdTAwM2VsaXN0X2xvY2ssIGZsYWdzKSkge1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBmdWxsLVxcdTAwM2VwYXJ0aWFsL2VtcHR5OiB0aGUgc2xhYiBpcyBmdWxsLCBzbyBpdCBpcyBvblxcbitcXHRcXHRcXHQgKiBubyBsaXN0OyBpZiB0aGUgbGlzdF9sb2NrIGlzIGNvbnRlbmRlZCwgdGhlbiB3ZVxcbitcXHRcXHRcXHQgKiBwYXJrIHRoZSBzbGFiIHdpdGhvdXQgd2FpdGluZyBmb3IgdGhlIGxvY2suXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRwYXJrID0gdHJ1ZTtcXG4gXFx0XFx0fVxcbiBcXG4gXFx0fSB3aGlsZSAoIXNsYWJfdXBkYXRlX2ZyZWVsaXN0KHMsIHNsYWIsIFxcdTAwMjZvbGQsIFxcdTAwMjZuZXcsIFxcXCJfX3NsYWJfZnJlZVxcXCIpKTtcXG4gXFxuLVxcdGlmIChsaWtlbHkoIW4pKSB7XFxuLVxcdFxcdC8qXFxuLVxcdFxcdCAqIFdlIGRpZG4ndCB0YWtlIHRoZSBsaXN0X2xvY2sgYmVjYXVzZSB0aGUgc2xhYiB3YXMgYWxyZWFkeSBvblxcbi1cXHRcXHQgKiB0aGUgcGFydGlhbCBsaXN0IGFuZCB3aWxsIHJlbWFpbiB0aGVyZS5cXG4tXFx0XFx0ICovXFxuK1xcdC8qIHBhcnRpYWwtXFx1MDAzZXBhcnRpYWw6IHdlIGRpZG4ndCB0YWtlIHRoZSBsaXN0X2xvY2suICovXFxuK1xcdGlmIChsaWtlbHkoIW4pKVxcbiBcXHRcXHRyZXR1cm47XFxuLVxcdH1cXG4gXFxuIFxcdC8qXFxuLVxcdCAqIFRoaXMgc2xhYiB3YXMgcGFydGlhbGx5IGVtcHR5IGJ1dCBub3Qgb24gdGhlIHBlci1ub2RlIHBhcnRpYWwgbGlzdCxcXG4tXFx0ICogaW4gd2hpY2ggY2FzZSB3ZSBzaG91bGRuJ3QgbWFuaXB1bGF0ZSBpdHMgbGlzdCwganVzdCByZXR1cm4uXFxuK1xcdCAqIFBhcmsgdGhlIHNsYWIuIElmIHRoaXMgcGFyayBtYWtlcyB0aGUgcGFya2VkIGxsaXN0IG5vbi1lbXB0eSxcXG4rXFx0ICogdGhlbiBzY2hlZHVsZSB1bnBhcmtfd29yay5cXG4gXFx0ICovXFxuK1xcdGlmICh1bmxpa2VseShwYXJrKSkge1xcbitcXHRcXHRpZiAobGxpc3RfYWRkKHNsYWJfdG9fcGFya2VkX2xsbm9kZShzbGFiKSwgXFx1MDAyNm4tXFx1MDAzZXBhcmtlZF9zbGFicykpXFxuK1xcdFxcdFxcdHF1ZXVlX2RlbGF5ZWRfd29yayhmbHVzaHdxLCBcXHUwMDI2bi1cXHUwMDNldW5wYXJrX3dvcmssXFxuK1xcdFxcdFxcdFxcdFxcdCAgIFVOUEFSS19ERUxBWSk7XFxuK1xcdFxcdHN0YXQocywgUEFSS19TTEFCKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRvbl9ub2RlX3BhcnRpYWwgPSBzbGFiX3Rlc3Rfbm9kZV9wYXJ0aWFsKHNsYWIpO1xcbitcXG4gXFx0aWYgKCF3YXNfZnVsbCBcXHUwMDI2XFx1MDAyNiAhb25fbm9kZV9wYXJ0aWFsKSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIHBhcnRpYWwtXFx1MDAzZWVtcHR5LCBvZmZsaXN0OiB0aGUgc2xhYiBoYXMgYmVlbiB0YWtlbiBvZmYgdGhlXFxuK1xcdFxcdCAqIHBhcnRpYWwgbGlzdCBieSBhIGJ1bGsgcmVmaWxsLCBvciBwYXJrZWQgZHVyaW5nIGl0cyBmdWxsIC1cXHUwMDNlXFxuK1xcdFxcdCAqIHBhcnRpYWwvZW1wdHkgdHJhbnNpdGlvbi4gSXQgd2lsbCBiZSBwdXQgYmFjayBieSBvdGhlciBwYXRocyxcXG4rXFx0XFx0ICogc28gdGhpcyBzbGFiJ3MgbGlzdCBoYW5kbGluZyBpcyBub3Qgb3VycyB0byBkby5cXG4rXFx0XFx0ICovXFxuIFxcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNm4tXFx1MDAzZWxpc3RfbG9jaywgZmxhZ3MpO1xcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4gXFxuIFxcdC8qXFxuLVxcdCAqIElmIHNsYWIgYmVjYW1lIGVtcHR5LCBzaG91bGQgd2UgYWRkL2tlZXAgaXQgb24gdGhlIHBhcnRpYWwgbGlzdCBvciB3ZVxcbi1cXHQgKiBoYXZlIGVub3VnaD9cXG4rXFx0ICogZnVsbC9wYXJ0aWFsLVxcdTAwM2VlbXB0eSwgZXhjZWVkOiB3ZSBoYXZlIGVub3VnaCBwYXJ0aWFsIHNsYWJzIGFscmVhZHkuXFxuK1xcdCAqXFxuK1xcdCAqIFBhcmtlZCBzbGFicyBhcmUgYWxzbyBjb3VudGVkIGFzIHBhcnRpYWwgc2xhYnMuIFdlIGRvbid0XFxuK1xcdCAqIGtlZXAgYW4gZXhhY3QgY291bnQgb2YgcGFya2VkIHNsYWJzLCBzbyB3ZSB0cmVhdCBhbnkgcGFya2VkXFxuK1xcdCAqIHNsYWIgYXMgcm91Z2hseSBleGNlZWRpbmcuXFxuIFxcdCAqL1xcbi1cXHRpZiAodW5saWtlbHkoIW5ldy5pbnVzZSBcXHUwMDI2XFx1MDAyNiBuLVxcdTAwM2Vucl9wYXJ0aWFsIFxcdTAwM2U9IHMtXFx1MDAzZW1pbl9wYXJ0aWFsKSlcXG4tXFx0XFx0Z290byBzbGFiX2VtcHR5O1xcbitcXHRpZiAodW5saWtlbHkoIW5ldy5pbnVzZSBcXHUwMDI2XFx1MDAyNiAobi1cXHUwMDNlbnJfcGFydGlhbCBcXHUwMDNlPSBzLVxcdTAwM2VtaW5fcGFydGlhbCB8fFxcbitcXHRcXHRcXHRcXHQgICAgIWxsaXN0X2VtcHR5KFxcdTAwMjZuLVxcdTAwM2VwYXJrZWRfc2xhYnMpKSkpIHtcXG4rXFx0XFx0LyogcGFydGlhbC1cXHUwMDNlZW1wdHksIG9ubGlzdCwgZXhjZWVkICovXFxuK1xcdFxcdGlmIChsaWtlbHkoIXdhc19mdWxsKSkge1xcbitcXHRcXHRcXHRyZW1vdmVfcGFydGlhbChuLCBzbGFiKTtcXG4rXFx0XFx0XFx0c3RhdChzLCBGUkVFX1JFTU9WRV9QQVJUSUFMKTtcXG4rXFx0XFx0fVxcbitcXHRcXHQvKiBlbHNlIGZ1bGwtXFx1MDAzZWVtcHR5LCBleGNlZWQ6IGl0IGlzIG9uIG5vIGxpc3QgdG8gcmVtb3ZlIGZyb20gKi9cXG4rXFxuK1xcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNm4tXFx1MDAzZWxpc3RfbG9jaywgZmxhZ3MpO1xcbitcXHRcXHRzdGF0KHMsIEZSRUVfU0xBQik7XFxuK1xcdFxcdGRpc2NhcmRfc2xhYihzLCBzbGFiKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuIFxcbiBcXHQvKlxcbi1cXHQgKiBPYmplY3RzIGxlZnQgaW4gdGhlIHNsYWIuIElmIGl0IHdhcyBub3Qgb24gdGhlIHBhcnRpYWwgbGlzdCBiZWZvcmVcXG4tXFx0ICogdGhlbiBhZGQgaXQuXFxuK1xcdCAqIEF0IHRoaXMgcG9pbnQsIG9ubHkgdGhyZWUgY2FzZXMgcmVtYWluOlxcbitcXHQgKiAgIGZ1bGwtXFx1MDAzZXBhcnRpYWxcXG4rXFx0ICogICBmdWxsLVxcdTAwM2VlbXB0eSwgbm90IGV4Y2VlZFxcbitcXHQgKiAgIHBhcnRpYWwtXFx1MDAzZWVtcHR5LCBvbmxpc3QsIG5vdCBleGNlZWRcXG4gXFx0ICovXFxuK1xcbitcXHQvKiBmdWxsLVxcdTAwM2VwYXJ0aWFsOyBmdWxsLVxcdTAwM2VlbXB0eSwgbm90IGV4Y2VlZCAqL1xcbiBcXHRpZiAodW5saWtlbHkod2FzX2Z1bGwpKSB7XFxuIFxcdFxcdGFkZF9wYXJ0aWFsKG4sIHNsYWIsIEFERF9UT19UQUlMKTtcXG4gXFx0XFx0c3RhdChzLCBGUkVFX0FERF9QQVJUSUFMKTtcXG4gXFx0fVxcbi1cXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZuLVxcdTAwM2VsaXN0X2xvY2ssIGZsYWdzKTtcXG4tXFx0cmV0dXJuO1xcbi1cXG4tc2xhYl9lbXB0eTpcXG4tXFx0LypcXG4tXFx0ICogVGhlIHNsYWIgY291bGQgaGF2ZSBhIHNpbmdsZSBvYmplY3QgYW5kIHRodXMgZ28gZnJvbSBmdWxsIHRvIGVtcHR5IGluXFxuLVxcdCAqIGEgc2luZ2xlIGZyZWUsIGJ1dCBtb3JlIGxpa2VseSBpdCB3YXMgb24gdGhlIHBhcnRpYWwgbGlzdC4gUmVtb3ZlIGl0Llxcbi1cXHQgKi9cXG4tXFx0aWYgKGxpa2VseSghd2FzX2Z1bGwpKSB7XFxuLVxcdFxcdHJlbW92ZV9wYXJ0aWFsKG4sIHNsYWIpO1xcbi1cXHRcXHRzdGF0KHMsIEZSRUVfUkVNT1ZFX1BBUlRJQUwpO1xcbi1cXHR9XFxuK1xcdC8qIGVsc2UgcGFydGlhbC1cXHUwMDNlZW1wdHksIG9ubGlzdCwgbm90IGV4Y2VlZDogaXQgc3RheXMgb24gcGFydGlhbCBsaXN0ICovXFxuIFxcbiBcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZuLVxcdTAwM2VsaXN0X2xvY2ssIGZsYWdzKTtcXG4tXFx0c3RhdChzLCBGUkVFX1NMQUIpO1xcbi1cXHRkaXNjYXJkX3NsYWIocywgc2xhYik7XFxuIH1cXG4gXFxuIC8qXFxuQEAgLTczNTcsOCArNzU1OCwxMyBAQCBfX3JlZmlsbF9vYmplY3RzX2FueShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqKnAsIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG1pblxcbiBcXG4gXFx0XFx0XFx0biA9IGdldF9ub2RlKHMsIHpvbmVfdG9fbmlkKHpvbmUpKTtcXG4gXFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIFBhcmtlZCBzbGFicyBtYWtlIHRoZSBub2RlIHdvcnRoIHRyeWluZ1xcbitcXHRcXHRcXHQgKiBldmVuIGlmIG5yX3BhcnRpYWwgbG9va3MgbG93LlxcbitcXHRcXHRcXHQgKi9cXG4gXFx0XFx0XFx0aWYgKCFuIHx8ICFjcHVzZXRfem9uZV9hbGxvd2VkKHpvbmUsIGdmcCkgfHxcXG4tXFx0XFx0XFx0XFx0XFx0bi1cXHUwMDNlbnJfcGFydGlhbCBcXHUwMDNjPSBzLVxcdTAwM2VtaW5fcGFydGlhbClcXG4rXFx0XFx0XFx0XFx0XFx0KG4tXFx1MDAzZW5yX3BhcnRpYWwgXFx1MDAzYz0gcy1cXHUwMDNlbWluX3BhcnRpYWwgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0XFx0XFx0IGxsaXN0X2VtcHR5KFxcdTAwMjZuLVxcdTAwM2VwYXJrZWRfc2xhYnMpKSlcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuIFxcbiBcXHRcXHRcXHRyID0gX19yZWZpbGxfb2JqZWN0c19ub2RlKHMsIHAsIGdmcCwgbWluLCBtYXgsIG4sXFxuQEAgLTc2NzksNiArNzg4NSw4IEBAIGluaXRfa21lbV9jYWNoZV9ub2RlKHN0cnVjdCBrbWVtX2NhY2hlX25vZGUgKm4pXFxuIFxcdG4tXFx1MDAzZW5yX3BhcnRpYWwgPSAwO1xcbiBcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2bi1cXHUwMDNlbGlzdF9sb2NrKTtcXG4gXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNm4tXFx1MDAzZXBhcnRpYWwpO1xcbitcXHRpbml0X2xsaXN0X2hlYWQoXFx1MDAyNm4tXFx1MDAzZXBhcmtlZF9zbGFicyk7XFxuK1xcdElOSVRfREVMQVlFRF9XT1JLKFxcdTAwMjZuLVxcdTAwM2V1bnBhcmtfd29yaywgdW5wYXJrX3dvcmtfZm4pO1xcbiAjaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcXG4gXFx0YXRvbWljX2xvbmdfc2V0KFxcdTAwMjZuLVxcdTAwM2Vucl9zbGFicywgMCk7XFxuIFxcdGF0b21pY19sb25nX3NldChcXHUwMDI2bi1cXHUwMDNldG90YWxfb2JqZWN0cywgMCk7XFxuQEAgLTc4MTIsNiArODAyMCw3IEBAIHN0YXRpYyB2b2lkIGZyZWVfa21lbV9jYWNoZV9ub2RlcyhzdHJ1Y3Qga21lbV9jYWNoZSAqcylcXG4gXFx0fVxcbiBcXG4gXFx0Zm9yX2VhY2hfa21lbV9jYWNoZV9ub2RlKHMsIG5vZGUsIG4pIHtcXG4rXFx0XFx0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFxcdTAwMjZuLVxcdTAwM2V1bnBhcmtfd29yayk7XFxuIFxcdFxcdHMtXFx1MDAzZXBlcl9ub2RlW25vZGVdLm5vZGUgPSBOVUxMO1xcbiBcXHRcXHRrbWVtX2NhY2hlX2ZyZWUoa21lbV9jYWNoZV9ub2RlLCBuKTtcXG4gXFx0fVxcbkBAIC04MTEyLDYgKzgzMjEsMTAgQEAgc3RhdGljIHZvaWQgZnJlZV9wYXJ0aWFsKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlICpuKVxcbiBcXG4gXFx0QlVHX09OKGlycXNfZGlzYWJsZWQoKSk7XFxuIFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNm4tXFx1MDAzZWxpc3RfbG9jayk7XFxuK1xcbitcXHQvKiBVbnBhcmsgc2xhYnMgc28gdGhlIHdhbGsgY2FuIGZpbmQgdGhlbS4gKi9cXG4rXFx0dW5wYXJrX3NsYWJzKHMsIG4sIE5VTEwpO1xcbitcXG4gXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNsYWIsIGgsIFxcdTAwMjZuLVxcdTAwM2VwYXJ0aWFsLCBzbGFiX2xpc3QpIHtcXG4gXFx0XFx0aWYgKCFzbGFiLVxcdTAwM2VpbnVzZSkge1xcbiBcXHRcXHRcXHRyZW1vdmVfcGFydGlhbChuLCBzbGFiKTtcXG5AQCAtODM4Myw2ICs4NTk2LDkgQEAgc3RhdGljIGludCBfX2ttZW1fY2FjaGVfZG9fc2hyaW5rKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxcbiBcXG4gXFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNm4tXFx1MDAzZWxpc3RfbG9jaywgZmxhZ3MpO1xcbiBcXG4rXFx0XFx0LyogUGFya2VkIHNsYWJzIGFyZSBzaHJpbmsgY2FuZGlkYXRlcyBhcyB3ZWxsLiAqL1xcbitcXHRcXHR1bnBhcmtfc2xhYnMocywgbiwgTlVMTCk7XFxuK1xcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBCdWlsZCBsaXN0cyBvZiBzbGFicyB0byBkaXNjYXJkIG9yIHByb21vdGUuXFxuIFxcdFxcdCAqXFxuQEAgLTk1MjIsNiArOTczOCw5IEBAIFNUQVRfQVRUUihGUkVFX0ZBU1RQQVRILCBmcmVlX2Zhc3RwYXRoKTtcXG4gU1RBVF9BVFRSKEZSRUVfU0xPV1BBVEgsIGZyZWVfc2xvd3BhdGgpO1xcbiBTVEFUX0FUVFIoRlJFRV9BRERfUEFSVElBTCwgZnJlZV9hZGRfcGFydGlhbCk7XFxuIFNUQVRfQVRUUihGUkVFX1JFTU9WRV9QQVJUSUFMLCBmcmVlX3JlbW92ZV9wYXJ0aWFsKTtcXG4rU1RBVF9BVFRSKFBBUktfU0xBQiwgcGFya19zbGFiKTtcXG4rU1RBVF9BVFRSKFVOUEFSS19TTEFCLCB1bnBhcmtfc2xhYik7XFxuK1NUQVRfQVRUUihVTlBBUktfRVZFTlQsIHVucGFya19ldmVudCk7XFxuIFNUQVRfQVRUUihBTExPQ19TTEFCLCBhbGxvY19zbGFiKTtcXG4gU1RBVF9BVFRSKEFMTE9DX05PREVfTUlTTUFUQ0gsIGFsbG9jX25vZGVfbWlzbWF0Y2gpO1xcbiBTVEFUX0FUVFIoRlJFRV9TTEFCLCBmcmVlX3NsYWIpO1xcbkBAIC05NjEwLDYgKzk4MjksOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZSAqY29uc3Qgc2xhYl9hdHRyc1tdID0ge1xcbiBcXHRcXHUwMDI2ZnJlZV9zbG93cGF0aF9hdHRyLmF0dHIsXFxuIFxcdFxcdTAwMjZmcmVlX2FkZF9wYXJ0aWFsX2F0dHIuYXR0cixcXG4gXFx0XFx1MDAyNmZyZWVfcmVtb3ZlX3BhcnRpYWxfYXR0ci5hdHRyLFxcbitcXHRcXHUwMDI2cGFya19zbGFiX2F0dHIuYXR0cixcXG4rXFx0XFx1MDAyNnVucGFya19zbGFiX2F0dHIuYXR0cixcXG4rXFx0XFx1MDAyNnVucGFya19ldmVudF9hdHRyLmF0dHIsXFxuIFxcdFxcdTAwMjZhbGxvY19zbGFiX2F0dHIuYXR0cixcXG4gXFx0XFx1MDAyNmFsbG9jX25vZGVfbWlzbWF0Y2hfYXR0ci5hdHRyLFxcbiBcXHRcXHUwMDI2ZnJlZV9zbGFiX2F0dHIuYXR0cixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTU6NDc6MDkuMjA5MDIzNzE0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTMwNzQ4NTIyNTE2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2ttZW1fY2FjaGVfc2hyaW5rXCIsXG4gICAgXCJfX2ttZW1fY2FjaGVfc2h1dGRvd25cIixcbiAgICBcIl9fa21lbV9jYWNoZV9lbXB0eVwiLFxuICAgIFwia21lbV9jYWNoZV9zaHJpbmtcIixcbiAgICBcImttZW1fY2FjaGVfZGVzdHJveVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBsb2NrbGVzcyBwYXJraW5nIG1lY2hhbmlzbSBmb3Igc2xhYnMgaW4gdGhlIFNMVUIgYWxsb2NhdG9yJ3MgZnJlZSBzbG93cGF0aCB0byByZWR1Y2UgbGlzdF9sb2NrIGNvbnRlbnRpb24uIFRoaXMgaXMgYSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWZmZWN0cyBzbGFiIGFsbG9jYXRpb24gYW5kIGZyZWVpbmcgbG9naWMuIEl0IGlzIHJlYWNoYWJsZSBieSBkZWZhdWx0IGFuZCBzaG91bGQgYmUgZnV6emVkLiBTaW5jZSBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIGFyZSBob3QgcGF0aHMsIHdlIGZvY3VzIG9uIGNhY2hlIHNocmlua2luZyBhbmQgZGVzdHJ1Y3Rpb24gcGF0aHMgd2hpY2ggYWxzbyBpbnRlcmFjdCB3aXRoIHRoZSBuZXcgdW5wYXJraW5nIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1YmJlOGJmMjExZmQ3MGJmMmNhYTI5ZWIzN2Y3MmRiM2Q2OTY0NDQ0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMjQgMTU6NDc6MDUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9zbHViLmMgYi9tbS9zbHViLmNcbmluZGV4IGIwY2QwNTcyZTJmMjYuLjI3YTc4ZDYzZjUzNzYgMTAwNjQ0XG4tLS0gYS9tbS9zbHViLmNcbisrKyBiL21tL3NsdWIuY1xuQEAgLTQ5LDYgKzQ5LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zb3J0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pcnFfd29yay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva3Byb2Jlcy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbGxpc3QuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlYnVnZnMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3RyYWNlL2V2ZW50cy9rbWVtLmhcdTAwM2VcbiBcbkBAIC0xMjIsNiArMTIzLDggQEBcbiAgKiAgIChOb3RlIHRoYXQgdGhlIHRvdGFsIG51bWJlciBvZiBzbGFicyBpcyBhbiBhdG9taWMgdmFsdWUgdGhhdCBtYXkgYmVcbiAgKiAgIG1vZGlmaWVkIHdpdGhvdXQgdGFraW5nIHRoZSBsaXN0IGxvY2spLlxuICAqXG4rICogICBTbGFicyBtYXkgYmUgcHVzaGVkIHRvIG5vZGUtXHUwMDNlcGFya2VkX3NsYWJzIHdpdGhvdXQgYWNxdWlyaW5nIGxpc3RfbG9jay5cbisgKlxuICAqICAgVGhlIGxpc3RfbG9jayBpcyBhIGNlbnRyYWxpemVkIGxvY2sgYW5kIHRodXMgd2UgYXZvaWQgdGFraW5nIGl0IGFzXG4gICogICBtdWNoIGFzIHBvc3NpYmxlLiBBcyBsb25nIGFzIFNMVUIgZG9lcyBub3QgaGF2ZSB0byBoYW5kbGUgcGFydGlhbFxuICAqICAgc2xhYnMsIG9wZXJhdGlvbnMgY2FuIGNvbnRpbnVlIHdpdGhvdXQgYW55IGNlbnRyYWxpemVkIGxvY2suXG5AQCAtMzY4LDYgKzM3MSw5IEBAIGVudW0gc3RhdF9pdGVtIHtcbiBcdEZSRUVfU0xPV1BBVEgsXHRcdC8qIEZyZWUgdG8gYSBzbGFiICovXG4gXHRGUkVFX0FERF9QQVJUSUFMLFx0LyogRnJlZWluZyBtb3ZlcyBzbGFiIHRvIHBhcnRpYWwgbGlzdCAqL1xuIFx0RlJFRV9SRU1PVkVfUEFSVElBTCxcdC8qIEZyZWVpbmcgcmVtb3ZlcyBsYXN0IG9iamVjdCAqL1xuK1x0UEFSS19TTEFCLFx0XHQvKiBTbGFicyBwYXJrZWQgb250byB0aGUgbGxpc3QgYnkgZnJlZSBzbG93cGF0aCAqL1xuK1x0VU5QQVJLX1NMQUIsXHRcdC8qIFNsYWJzIHVucGFya2VkIGZyb20gdGhlIGxsaXN0ICovXG4rXHRVTlBBUktfRVZFTlQsXHRcdC8qIFVucGFyayBldmVudHMgKi9cbiBcdEFMTE9DX1NMQUIsXHRcdC8qIE5ldyBzbGFiIGFjcXVpcmVkIGZyb20gcGFnZSBhbGxvY2F0b3IgKi9cbiBcdEFMTE9DX05PREVfTUlTTUFUQ0gsXHQvKiBSZXF1ZXN0ZWQgbm9kZSBkaWZmZXJlbnQgZnJvbSBjcHUgc2hlYWYgKi9cbiBcdEZSRUVfU0xBQixcdFx0LyogU2xhYiBmcmVlZCB0byB0aGUgcGFnZSBhbGxvY2F0b3IgKi9cbkBAIC00NjIsNiArNDY4LDE0IEBAIHN0cnVjdCBrbWVtX2NhY2hlX25vZGUge1xuIFx0YXRvbWljX2xvbmdfdCB0b3RhbF9vYmplY3RzO1xuIFx0c3RydWN0IGxpc3RfaGVhZCBmdWxsO1xuICNlbmRpZlxuK1x0LypcbitcdCAqIElmIG5laXRoZXIgc2hlYWYgcmVmaWxsIG5vciB0aGUgYWxsb2Mgc2xvd3BhdGggcGVyZm9ybXMgdGhlIHVucGFyayxcbitcdCAqIHVucGFya193b3JrX2ZuIHRha2VzIGNhcmUgb2YgaXQuXG4rXHQgKi9cbitcdHN0cnVjdCBkZWxheWVkX3dvcmsgdW5wYXJrX3dvcms7XG4rXG4rXHQvKiBVc2VkIHRvIGxpbmsgcGFya2VkIHNsYWJzICovXG4rXHRzdHJ1Y3QgbGxpc3RfaGVhZCBwYXJrZWRfc2xhYnMgX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDtcbiB9O1xuIFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGttZW1fY2FjaGVfbm9kZSAqZ2V0X25vZGUoc3RydWN0IGttZW1fY2FjaGUgKnMsIGludCBub2RlKVxuQEAgLTUwOSw2ICs1MjMsMTIgQEAgc3RhdGljIG5vZGVtYXNrX3Qgc2xhYl9iYXJuX25vZGVzO1xuICAqL1xuIHN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqZmx1c2h3cTtcbiBcbisvKlxuKyAqIENlaWxpbmcgb24gaG93IGxvbmcgc2xhYnMgc3RheSBwYXJrZWQgd2hlbiBubyBzaGVhZiByZWZpbGwgb3IgYWxsb2NcbisgKiBzbG93cGF0aCB1bnBhcmtzIHRoZW0uXG4rICovXG4rI2RlZmluZSBVTlBBUktfREVMQVlcdChIWilcbitcbiBzdHJ1Y3Qgc2x1Yl9mbHVzaF93b3JrIHtcbiBcdHN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrO1xuIFx0c3RydWN0IGttZW1fY2FjaGUgKnM7XG5AQCAtMzYyMyw2ICszNjQzLDEyMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcmVtb3ZlX3BhcnRpYWwoc3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbixcbiBcdGNsZWFyX25vZGVfcGFydGlhbF9zdGF0ZShuLCBzbGFiKTtcbiB9XG4gXG4rLypcbisgKiBBIHNsYWIgcGFya2VkIG9uIG4tXHUwMDNlcGFya2VkX3NsYWJzIGlzIG5vdCBvbiBwYXJ0aWFsIGxpc3QsIHNvIGl0cyBzbGFiX2xpc3QgaXNcbisgKiBmcmVlIGFuZCB3ZSByZXVzZSBpdCBhcyB0aGUgbGxpc3Rfbm9kZS5cbisgKi9cbitzdGF0aWMgaW5saW5lIHN0cnVjdCBsbGlzdF9ub2RlICpzbGFiX3RvX3BhcmtlZF9sbG5vZGUoc3RydWN0IHNsYWIgKnNsYWIpXG4re1xuK1x0cmV0dXJuIChzdHJ1Y3QgbGxpc3Rfbm9kZSAqKVx1MDAyNnNsYWItXHUwMDNlc2xhYl9saXN0O1xuK31cbitcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBzbGFiICpwYXJrZWRfbGxub2RlX3RvX3NsYWIoc3RydWN0IGxsaXN0X25vZGUgKm5vZGUpXG4re1xuK1x0cmV0dXJuIGNvbnRhaW5lcl9vZigoc3RydWN0IGxpc3RfaGVhZCAqKW5vZGUsIHN0cnVjdCBzbGFiLCBzbGFiX2xpc3QpO1xuK31cbitcbisvKlxuKyAqIE1vdmUgc2xhYnMgcGFya2VkIG9uIG4tXHUwMDNlcGFya2VkX3NsYWJzIHRvIG4tXHUwMDNlcGFydGlhbC4gQ2FsbGVkIHdpdGggdGhlXG4rICogbGlzdF9sb2NrIGhlbGQsIGJ5IHRoZSBwYXRocyB0aGF0IGNvbnN1bWUgdGhlIHBhcnRpYWwgbGlzdCwgb24gYmVoYWxmIG9mIHRoZVxuKyAqIGNwdXMgdGhhdCBjb3VsZCBub3QgZ2V0IHRoZSBsb2NrIHdoZW4gcGFya2luZy5cbisgKlxuKyAqIElmIEBkaXNjYXJkIGlzIG5vdCBOVUxMLCBwdXQgZW1wdHkgc2xhYnMgYmV5b25kIG1pbl9wYXJ0aWFsIG9uIEBkaXNjYXJkLCB0aGVcbisgKiBjYWxsZXIgc2hvdWxkIGNhbGwgZGlzY2FyZF9zbGFiKCkgYWZ0ZXIgZHJvcHBpbmcgdGhlIGxvY2suICBDYWxsZXJzIHRoYXQgbWF5XG4rICogbm90IGZyZWUgcGFnZXMgaW4gdGhlaXIgY29udGV4dCBzaG91bGQgcGFzcyBOVUxMLlxuKyAqL1xuK3N0YXRpYyB2b2lkIHVucGFya19zbGFicyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbixcbitcdFx0XHQgc3RydWN0IGxpc3RfaGVhZCAqZGlzY2FyZClcbit7XG4rXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqcG9zLCAqbmV4dDtcbitcdHVuc2lnbmVkIGxvbmcgYWRkZWQgPSAwLCBkaXNjYXJkZWQgPSAwO1xuK1x0dW5zaWduZWQgbG9uZyBoZWFkcm9vbSA9IDA7XG4rXHRMSVNUX0hFQUQodG9fYWRkKTtcbitcbitcdHNsYWJfbG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZuLVx1MDAzZWxpc3RfbG9jayk7XG4rXG4rXHRwb3MgPSBsbGlzdF9kZWxfYWxsKFx1MDAyNm4tXHUwMDNlcGFya2VkX3NsYWJzKTtcbitcdGlmIChsaWtlbHkoIXBvcykpXG4rXHRcdHJldHVybjtcbitcbitcdC8qXG4rXHQgKiBDYWxjdWxhdGUgaG93IG1hbnkgbW9yZSBzbGFicyB0aGUgcGFydGlhbCBsaXN0IHdhbnRzIGJlZm9yZSBpdCBoYXNcbitcdCAqIHJlYWNoZWQgbWluX3BhcnRpYWwuXG4rXHQgKi9cbitcdGlmIChzLVx1MDAzZW1pbl9wYXJ0aWFsIFx1MDAzZSBuLVx1MDAzZW5yX3BhcnRpYWwpXG4rXHRcdGhlYWRyb29tID0gcy1cdTAwM2VtaW5fcGFydGlhbCAtIG4tXHUwMDNlbnJfcGFydGlhbDtcbitcbitcdGZvciAoOyBwb3M7IHBvcyA9IG5leHQpIHtcbitcdFx0c3RydWN0IHNsYWIgKnNsYWIgPSBwYXJrZWRfbGxub2RlX3RvX3NsYWIocG9zKTtcbitcdFx0c3RydWN0IGZyZWVsaXN0X2NvdW50ZXJzIGZsYztcbitcbitcdFx0LypcbitcdFx0ICogQmFjayB1cCB0aGUgcG9pbnRlciwgYmVjYXVzZSB0aGUgbGlzdF9hZGRfdGFpbCgpIGJlbG93XG4rXHRcdCAqIG92ZXJ3cml0ZXMgdGhlIGxsaXN0IGxpbmthZ2UuXG4rXHRcdCAqL1xuK1x0XHRuZXh0ID0gcG9zLVx1MDAzZW5leHQ7XG4rXG4rXHRcdGlmIChkaXNjYXJkKSB7XG4rXHRcdFx0ZmxjLmNvdW50ZXJzID0gZGF0YV9yYWNlKFJFQURfT05DRShzbGFiLVx1MDAzZWNvdW50ZXJzKSk7XG4rXHRcdFx0aWYgKCFmbGMuaW51c2UgXHUwMDI2XHUwMDI2IGFkZGVkIFx1MDAzZT0gaGVhZHJvb20pIHtcbitcdFx0XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2c2xhYi1cdTAwM2VzbGFiX2xpc3QsIGRpc2NhcmQpO1xuK1x0XHRcdFx0ZGlzY2FyZGVkKys7XG4rXHRcdFx0XHRjb250aW51ZTtcbitcdFx0XHR9XG4rXHRcdH1cbitcbitcdFx0c2xhYl9zZXRfbm9kZV9wYXJ0aWFsKHNsYWIpO1xuK1x0XHRsaXN0X2FkZF90YWlsKFx1MDAyNnNsYWItXHUwMDNlc2xhYl9saXN0LCBcdTAwMjZ0b19hZGQpO1xuK1x0XHRhZGRlZCsrO1xuK1x0fVxuK1xuK1x0bi1cdTAwM2Vucl9wYXJ0aWFsICs9IGFkZGVkO1xuK1x0bGlzdF9zcGxpY2VfdGFpbChcdTAwMjZ0b19hZGQsIFx1MDAyNm4tXHUwMDNlcGFydGlhbCk7XG4rXG4rXHRzdGF0X2FkZChzLCBGUkVFX0FERF9QQVJUSUFMLCBhZGRlZCk7XG4rXHRzdGF0X2FkZChzLCBVTlBBUktfU0xBQiwgYWRkZWQgKyBkaXNjYXJkZWQpO1xuK1x0aWYgKHVubGlrZWx5KGRpc2NhcmRlZCkpXG4rXHRcdHN0YXRfYWRkKHMsIEZSRUVfU0xBQiwgZGlzY2FyZGVkKTtcbitcdHN0YXQocywgVU5QQVJLX0VWRU5UKTtcbit9XG4rXG4rLypcbisgKiBQYXJrZWQgc2xhYnMgYXJlIG5vcm1hbGx5IHVucGFya2VkIGJ5IHNoZWFmIHJlZmlsbCBvciB0aGUgYWxsb2Mgc2xvd3BhdGgsIGJ1dFxuKyAqIHdoZW4gdGhlIHN5c3RlbSBleHBlcmllbmNlcyBhIGhlYXZ5IGJ1cnN0IG9mIGZyZWVzLCBhYnJ1cHRseSBnb2VzIGlkbGUsXG4rICogYW5kIG5laXRoZXIgc2hlYWYgcmVmaWxsIG5vciB0aGUgYWxsb2Mgc2xvd3BhdGggaXMgcmVhY2hlZCxcbisgKiBzb21lIHBhcmtlZCBzbGFicyBtYXkgYmUgbGVmdCBzdHJhbmRlZCBpbiB0aGUgcGFya2VkIGxsaXN0LiBUaGlzIGZ1bmN0aW9uXG4rICogc2VydmVzIGFzIGEgbGFzdC1yZXNvcnQgZmFsbGJhY2suXG4rICogVGhpcyB3b3JrIGlzIHNjaGVkdWxlZCBieSB0aGUgbGxpc3RfYWRkKCkgdGhhdCBtYWtlcyB0aGUgcGFya2VkIGxsaXN0IG5vbi1lbXB0eS5cbisgKi9cbitzdGF0aWMgdm9pZCB1bnBhcmtfd29ya19mbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4re1xuK1x0c3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbiA9IGNvbnRhaW5lcl9vZih0b19kZWxheWVkX3dvcmsod29yayksXG4rXHRcdFx0XHRcdFx0IHN0cnVjdCBrbWVtX2NhY2hlX25vZGUsXG4rXHRcdFx0XHRcdFx0IHVucGFya193b3JrKTtcbitcdHN0cnVjdCBsbGlzdF9ub2RlICpmaXJzdDtcbitcdHN0cnVjdCBrbWVtX2NhY2hlICpzO1xuK1x0c3RydWN0IHNsYWIgKnNsYWIsICp0O1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbitcdExJU1RfSEVBRChkaXNjYXJkKTtcbitcbitcdGlmIChsaWtlbHkobGxpc3RfZW1wdHkoXHUwMDI2bi1cdTAwM2VwYXJrZWRfc2xhYnMpKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2bi1cdTAwM2VsaXN0X2xvY2ssIGZsYWdzKTtcbitcbitcdGZpcnN0ID0gUkVBRF9PTkNFKG4tXHUwMDNlcGFya2VkX3NsYWJzLmZpcnN0KTtcbitcdGlmICh1bmxpa2VseSghZmlyc3QpKSB7XG4rXHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2bi1cdTAwM2VsaXN0X2xvY2ssIGZsYWdzKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1x0cyA9IHBhcmtlZF9sbG5vZGVfdG9fc2xhYihmaXJzdCktXHUwMDNlc2xhYl9jYWNoZTtcbitcbitcdHVucGFya19zbGFicyhzLCBuLCBcdTAwMjZkaXNjYXJkKTtcbitcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2bi1cdTAwM2VsaXN0X2xvY2ssIGZsYWdzKTtcbitcbitcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzbGFiLCB0LCBcdTAwMjZkaXNjYXJkLCBzbGFiX2xpc3QpXG4rXHRcdGRpc2NhcmRfc2xhYihzLCBzbGFiKTtcbit9XG4rXG4gLypcbiAgKiBDYWxsZWQgb25seSBmb3Iga21lbV9jYWNoZV9kZWJ1ZygpIGNhY2hlcyBpbnN0ZWFkIG9mIHJlbW92ZV9wYXJ0aWFsKCksIHdpdGggYVxuICAqIHNsYWIgZnJvbSB0aGUgbi1cdTAwM2VwYXJ0aWFsIGxpc3QuIFJlbW92ZSBvbmx5IGEgc2luZ2xlIG9iamVjdCBmcm9tIHRoZSBzbGFiLCBkb1xuQEAgLTM4MTgsOSArMzk1NCwxMyBAQCBzdGF0aWMgYm9vbCBnZXRfcGFydGlhbF9ub2RlX2J1bGsoc3RydWN0IGttZW1fY2FjaGUgKnMsXG4gXHRzdHJ1Y3Qgc2xhYiAqZmlyc3QgPSBOVUxMLCAqbGFzdCA9IE5VTEw7XG4gXHR1bnNpZ25lZCBpbnQgdG90YWxfZnJlZSA9IDA7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuK1x0TElTVF9IRUFEKGRpc2NhcmQpO1xuIFxuLVx0LyogUmFjeSBjaGVjayB0byBhdm9pZCB0YWtpbmcgdGhlIGxvY2sgdW5uZWNlc3NhcmlseS4gKi9cbi1cdGlmICghbiB8fCBkYXRhX3JhY2UoIW4tXHUwMDNlbnJfcGFydGlhbCkpXG4rXHQvKlxuK1x0ICogUmFjeSBjaGVjayB0byBhdm9pZCB0YWtpbmcgdGhlIGxvY2sgdW5uZWNlc3NhcmlseS5cbitcdCAqIFRoZSBwYXJrZWRfc2xhYnMgbGxpc3QgbXVzdCBhbHNvIGJlIGFjY291bnRlZCBmb3IuXG4rXHQgKi9cbitcdGlmICghbiB8fCAoIWRhdGFfcmFjZShuLVx1MDAzZW5yX3BhcnRpYWwpIFx1MDAyNlx1MDAyNiBsbGlzdF9lbXB0eShcdTAwMjZuLVx1MDAzZXBhcmtlZF9zbGFicykpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZwYy1cdTAwM2VzbGFicyk7XG5AQCAtMzgzMCw2ICszOTcwLDkgQEAgc3RhdGljIGJvb2wgZ2V0X3BhcnRpYWxfbm9kZV9idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLFxuIFx0ZWxzZSBpZiAoIXNwaW5fdHJ5bG9ja19pcnFzYXZlKFx1MDAyNm4tXHUwMDNlbGlzdF9sb2NrLCBmbGFncykpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbitcdC8qIElmIHRoZXJlIGFyZSBwYXJrZWQgc2xhYnMsIG1vdmUgdGhlbSB0byB0aGUgcGFydGlhbCBsaXN0IGZpcnN0LiAqL1xuK1x0dW5wYXJrX3NsYWJzKHMsIG4sIGFsbG93X3NwaW4gPyBcdTAwMjZkaXNjYXJkIDogTlVMTCk7XG4rXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2xhYiwgc2xhYjIsIFx1MDAyNm4tXHUwMDNlcGFydGlhbCwgc2xhYl9saXN0KSB7XG4gXHRcdHN0cnVjdCBmcmVlbGlzdF9jb3VudGVycyBmbGM7XG4gXHRcdHVuc2lnbmVkIGludCBzbGFiX2ZyZWU7XG5AQCAtMzg3NCw2ICs0MDE3LDEwIEBAIHN0YXRpYyBib29sIGdldF9wYXJ0aWFsX25vZGVfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbiBcdFx0XHRcdCAgICBcdTAwMjZsYXN0LVx1MDAzZXNsYWJfbGlzdCk7XG4gXG4gXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNm4tXHUwMDNlbGlzdF9sb2NrLCBmbGFncyk7XG4rXG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2xhYiwgc2xhYjIsIFx1MDAyNmRpc2NhcmQsIHNsYWJfbGlzdClcbitcdFx0ZGlzY2FyZF9zbGFiKHMsIHNsYWIpO1xuK1xuIFx0cmV0dXJuIHRvdGFsX2ZyZWUgXHUwMDNlIDA7XG4gfVxuIFxuQEAgLTM4ODUsMjMgKzQwMzIsMjkgQEAgc3RhdGljIHZvaWQgKmdldF9mcm9tX3BhcnRpYWxfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbiBcdFx0XHRcdCAgIGdmcF90IGdmcF9mbGFncyxcbiBcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBzbGFiX2FsbG9jX2NvbnRleHQgKmFjKVxuIHtcbitcdGJvb2wgYWxsb3dfc3BpbiA9IGFsbG9jX2ZsYWdzX2FsbG93X3NwaW5uaW5nKGFjLVx1MDAzZWFsbG9jX2ZsYWdzKTtcbiBcdHN0cnVjdCBzbGFiICpzbGFiLCAqc2xhYjI7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0dm9pZCAqb2JqZWN0ID0gTlVMTDtcbitcdExJU1RfSEVBRChkaXNjYXJkKTtcbiBcbiBcdC8qXG4gXHQgKiBSYWN5IGNoZWNrLiBJZiB3ZSBtaXN0YWtlbmx5IHNlZSBubyBwYXJ0aWFsIHNsYWJzIHRoZW4gd2VcbiBcdCAqIGp1c3QgYWxsb2NhdGUgYW4gZW1wdHkgc2xhYi4gSWYgd2UgbWlzdGFrZW5seSB0cnkgdG8gZ2V0IGFcbiBcdCAqIHBhcnRpYWwgc2xhYiBhbmQgdGhlcmUgaXMgbm9uZSBhdmFpbGFibGUgdGhlbiBnZXRfZnJvbV9wYXJ0aWFsKClcbi1cdCAqIHdpbGwgcmV0dXJuIE5VTEwuXG4rXHQgKiB3aWxsIHJldHVybiBOVUxMLiBBbHNvIHRha2UgdGhlIHBhcmtlZF9zbGFicyBsbGlzdCBpbnRvIGFjY291bnQuXG4gXHQgKi9cbi1cdGlmICghbiB8fCAhbi1cdTAwM2Vucl9wYXJ0aWFsKVxuK1x0aWYgKCFuIHx8ICghZGF0YV9yYWNlKG4tXHUwMDNlbnJfcGFydGlhbCkgXHUwMDI2XHUwMDI2IGxsaXN0X2VtcHR5KFx1MDAyNm4tXHUwMDNlcGFya2VkX3NsYWJzKSkpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuLVx0aWYgKGFsbG9jX2ZsYWdzX2FsbG93X3NwaW5uaW5nKGFjLVx1MDAzZWFsbG9jX2ZsYWdzKSlcbitcdGlmIChhbGxvd19zcGluKVxuIFx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZuLVx1MDAzZWxpc3RfbG9jaywgZmxhZ3MpO1xuIFx0ZWxzZSBpZiAoIXNwaW5fdHJ5bG9ja19pcnFzYXZlKFx1MDAyNm4tXHUwMDNlbGlzdF9sb2NrLCBmbGFncykpXG4gXHRcdHJldHVybiBOVUxMO1xuK1xuK1x0LyogSWYgdGhlcmUgYXJlIHBhcmtlZCBzbGFicywgbW92ZSB0aGVtIHRvIHRoZSBwYXJ0aWFsIGxpc3QgZmlyc3QuICovXG4rXHR1bnBhcmtfc2xhYnMocywgbiwgYWxsb3dfc3BpbiA/IFx1MDAyNmRpc2NhcmQgOiBOVUxMKTtcbitcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzbGFiLCBzbGFiMiwgXHUwMDI2bi1cdTAwM2VwYXJ0aWFsLCBzbGFiX2xpc3QpIHtcbiBcbiBcdFx0c3RydWN0IGZyZWVsaXN0X2NvdW50ZXJzIG9sZCwgbmV3O1xuQEAgLTM5MzksNiArNDA5MiwxMCBAQCBzdGF0aWMgdm9pZCAqZ2V0X2Zyb21fcGFydGlhbF9ub2RlKHN0cnVjdCBrbWVtX2NhY2hlICpzLFxuIFx0XHRicmVhaztcbiBcdH1cbiBcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2bi1cdTAwM2VsaXN0X2xvY2ssIGZsYWdzKTtcbitcbitcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzbGFiLCBzbGFiMiwgXHUwMDI2ZGlzY2FyZCwgc2xhYl9saXN0KVxuK1x0XHRkaXNjYXJkX3NsYWIocywgc2xhYik7XG4rXG4gXHRyZXR1cm4gb2JqZWN0O1xuIH1cbiBcbkBAIC0zOTk0LDggKzQxNTEsMTMgQEAgc3RhdGljIHZvaWQgKmdldF9mcm9tX2FueV9wYXJ0aWFsKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnBfZmxhZ3MsXG4gXG4gXHRcdFx0biA9IGdldF9ub2RlKHMsIHpvbmVfdG9fbmlkKHpvbmUpKTtcbiBcbitcdFx0XHQvKlxuK1x0XHRcdCAqIFBhcmtlZCBzbGFicyBtYWtlIHRoZSBub2RlIHdvcnRoIHZpc2l0aW5nIGV2ZW4gaWZcbitcdFx0XHQgKiBucl9wYXJ0aWFsIGxvb2tzIGxvdy5cbitcdFx0XHQgKi9cbiBcdFx0XHRpZiAobiBcdTAwMjZcdTAwMjYgY3B1c2V0X3pvbmVfYWxsb3dlZCh6b25lLCBnZnBfZmxhZ3MpIFx1MDAyNlx1MDAyNlxuLVx0XHRcdFx0XHRuLVx1MDAzZW5yX3BhcnRpYWwgXHUwMDNlIHMtXHUwMDNlbWluX3BhcnRpYWwpIHtcbitcdFx0XHRcdFx0KG4tXHUwMDNlbnJfcGFydGlhbCBcdTAwM2Ugcy1cdTAwM2VtaW5fcGFydGlhbCB8fFxuK1x0XHRcdFx0XHQgIWxsaXN0X2VtcHR5KFx1MDAyNm4tXHUwMDNlcGFya2VkX3NsYWJzKSkpIHtcbiBcbiBcdFx0XHRcdHZvaWQgKm9iamVjdCA9IGdldF9mcm9tX3BhcnRpYWxfbm9kZShzLCBuLFxuIFx0XHRcdFx0XHRcdFx0XHRnZnBfZmxhZ3MsIGFjKTtcbkBAIC01NzE5LDcgKzU4ODEsNyBAQCBzdGF0aWMgdm9pZCBfX3NsYWJfZnJlZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsXG4gXHRcdFx0dW5zaWduZWQgbG9uZyBhZGRyKVxuIFxuIHtcbi1cdGJvb2wgd2FzX2Z1bGw7XG4rXHRib29sIHdhc19mdWxsLCBwYXJrID0gZmFsc2U7XG4gXHRzdHJ1Y3QgZnJlZWxpc3RfY291bnRlcnMgb2xkLCBuZXc7XG4gXHRzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlICpuID0gTlVMTDtcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG5AQCAtNTczMSwxMCArNTg5MywxMSBAQCBzdGF0aWMgdm9pZCBfX3NsYWJfZnJlZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsXG4gXHR9XG4gXG4gXHRkbyB7XG4tXHRcdGlmICh1bmxpa2VseShuKSkge1xuK1x0XHRpZiAodW5saWtlbHkobiBcdTAwMjZcdTAwMjYgIXBhcmspKVxuIFx0XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2bi1cdTAwM2VsaXN0X2xvY2ssIGZsYWdzKTtcbi1cdFx0XHRuID0gTlVMTDtcbi1cdFx0fVxuK1xuK1x0XHRwYXJrID0gZmFsc2U7XG4rXHRcdG4gPSBOVUxMO1xuIFxuIFx0XHRvbGQuZnJlZWxpc3QgPSBzbGFiLVx1MDAzZWZyZWVsaXN0O1xuIFx0XHRvbGQuY291bnRlcnMgPSBzbGFiLVx1MDAzZWNvdW50ZXJzO1xuQEAgLTU3NDgsNzYgKzU5MTEsMTE0IEBAIHN0YXRpYyB2b2lkIF9fc2xhYl9mcmVlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYixcbiBcdFx0bmV3LmludXNlIC09IGNudDtcbiBcbiBcdFx0Lypcbi1cdFx0ICogTWlnaHQgbmVlZCB0byBiZSB0YWtlbiBvZmYgKGR1ZSB0byBiZWNvbWluZyBlbXB0eSkgb3IgYWRkZWRcbi1cdFx0ICogdG8gKGR1ZSB0byBub3QgYmVpbmcgZnVsbCBhbnltb3JlKSB0aGUgcGFydGlhbCBsaXN0LlxuLVx0XHQgKiBVbmxlc3MgaXQncyBmcm96ZW4uXG4rXHRcdCAqIHBhcnRpYWwtXHUwMDNlcGFydGlhbDogdGhlIHNsYWIgd2FzIG9uIHRoZSBub2RlIHBhcnRpYWwgbGlzdCBhbmRcbitcdFx0ICogd2lsbCBzdGlsbCBzdGF5IHRoZXJlLCBzbyB3ZSBuZWVkIG5vIGxpc3QgaGFuZGxpbmcgYW5kIG5vXG4rXHRcdCAqIGxpc3RfbG9jay5cbitcdFx0ICpcbitcdFx0ICogTm90ZSB0aGF0IFwiY29udGludWU7XCIgaW4gYSBkby13aGlsZSBnb2VzIG9uIHRvIGV2YWx1YXRlIHRoZVxuK1x0XHQgKiBjb25kaXRpb24gYmVsb3csIHNvIHdlIGRvIHBlcmZvcm0gdGhlIGZyZWVsaXN0IHVwZGF0ZS5cbiBcdFx0ICovXG4tXHRcdGlmICghbmV3LmludXNlIHx8IHdhc19mdWxsKSB7XG4rXHRcdGlmICghd2FzX2Z1bGwgXHUwMDI2XHUwMDI2IG5ldy5pbnVzZSlcbitcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0XHRuID0gZ2V0X25vZGUocywgc2xhYl9uaWQoc2xhYikpO1xuK1x0XHQvKlxuK1x0XHQgKiBUaGUgc2xhYiBtaWdodCBuZWVkIHRvIGJlIHRha2VuIG9mZiAoZHVlIHRvIGJlY29taW5nIGVtcHR5KVxuK1x0XHQgKiBvciBhZGRlZCB0byAoZHVlIHRvIG5vdCBiZWluZyBmdWxsIGFueW1vcmUpIHRoZSBwYXJ0aWFsXG4rXHRcdCAqIGxpc3QuXG4rXHRcdCAqXG4rXHRcdCAqIEZvciB0aGUgZnVsbCAtXHUwMDNlIHBhcnRpYWwvZW1wdHkgdHJhbnNpdGlvbiwgdXNlXG4rXHRcdCAqIHNwaW5fdHJ5bG9ja19pcnFzYXZlKCkgYW5kIHRoZSBwYXJraW5nIG1lY2hhbmlzbSB0byByZWR1Y2VcbitcdFx0ICogbG9jayBjb250ZW50aW9uLlxuK1x0XHQgKlxuK1x0XHQgKiBJZiB0aGUgY21weGNoZyBkb2VzIG5vdCBzdWNjZWVkIHRoZW4gd2Ugd2lsbCByZXRyeS5cbitcdFx0ICovXG4rXHRcdG4gPSBnZXRfbm9kZShzLCBzbGFiX25pZChzbGFiKSk7XG4rXG4rXHRcdGlmICghd2FzX2Z1bGwpIHtcbiBcdFx0XHQvKlxuLVx0XHRcdCAqIFNwZWN1bGF0aXZlbHkgYWNxdWlyZSB0aGUgbGlzdF9sb2NrLlxuLVx0XHRcdCAqIElmIHRoZSBjbXB4Y2hnIGRvZXMgbm90IHN1Y2NlZWQgdGhlbiB3ZSBtYXlcbi1cdFx0XHQgKiBkcm9wIHRoZSBsaXN0X2xvY2sgd2l0aG91dCBhbnkgcHJvY2Vzc2luZy5cbi1cdFx0XHQgKlxuLVx0XHRcdCAqIE90aGVyd2lzZSB0aGUgbGlzdF9sb2NrIHdpbGwgc3luY2hyb25pemUgd2l0aFxuLVx0XHRcdCAqIG90aGVyIHByb2Nlc3NvcnMgdXBkYXRpbmcgdGhlIGxpc3Qgb2Ygc2xhYnMuXG4rXHRcdFx0ICogcGFydGlhbC1cdTAwM2VlbXB0eTogc3BlY3VsYXRpdmVseSBhY3F1aXJlIGxpc3RfbG9ja1xuK1x0XHRcdCAqIHByaW9yIHRvIGNtcHhjaGcoKSwgYXMgcGVyZm9ybWluZyBjbXB4Y2hnKCkgYmVmb3JlXG4rXHRcdFx0ICogbG9jayBhY3F1aXNpdGlvbiByYWNlcyB3aXRoIGNvbmN1cnJlbnQgb3BlcmF0aW9uc1xuK1x0XHRcdCAqIChlLmcuLCB0aGUgc2hyaW5rZXIpLlxuIFx0XHRcdCAqL1xuIFx0XHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNm4tXHUwMDNlbGlzdF9sb2NrLCBmbGFncyk7XG4tXG4tXHRcdFx0b25fbm9kZV9wYXJ0aWFsID0gc2xhYl90ZXN0X25vZGVfcGFydGlhbChzbGFiKTtcbitcdFx0fSBlbHNlIGlmICghc3Bpbl90cnlsb2NrX2lycXNhdmUoXHUwMDI2bi1cdTAwM2VsaXN0X2xvY2ssIGZsYWdzKSkge1xuK1x0XHRcdC8qXG4rXHRcdFx0ICogZnVsbC1cdTAwM2VwYXJ0aWFsL2VtcHR5OiB0aGUgc2xhYiBpcyBmdWxsLCBzbyBpdCBpcyBvblxuK1x0XHRcdCAqIG5vIGxpc3Q7IGlmIHRoZSBsaXN0X2xvY2sgaXMgY29udGVuZGVkLCB0aGVuIHdlXG4rXHRcdFx0ICogcGFyayB0aGUgc2xhYiB3aXRob3V0IHdhaXRpbmcgZm9yIHRoZSBsb2NrLlxuK1x0XHRcdCAqL1xuK1x0XHRcdHBhcmsgPSB0cnVlO1xuIFx0XHR9XG4gXG4gXHR9IHdoaWxlICghc2xhYl91cGRhdGVfZnJlZWxpc3Qocywgc2xhYiwgXHUwMDI2b2xkLCBcdTAwMjZuZXcsIFwiX19zbGFiX2ZyZWVcIikpO1xuIFxuLVx0aWYgKGxpa2VseSghbikpIHtcbi1cdFx0Lypcbi1cdFx0ICogV2UgZGlkbid0IHRha2UgdGhlIGxpc3RfbG9jayBiZWNhdXNlIHRoZSBzbGFiIHdhcyBhbHJlYWR5IG9uXG4tXHRcdCAqIHRoZSBwYXJ0aWFsIGxpc3QgYW5kIHdpbGwgcmVtYWluIHRoZXJlLlxuLVx0XHQgKi9cbitcdC8qIHBhcnRpYWwtXHUwMDNlcGFydGlhbDogd2UgZGlkbid0IHRha2UgdGhlIGxpc3RfbG9jay4gKi9cbitcdGlmIChsaWtlbHkoIW4pKVxuIFx0XHRyZXR1cm47XG4tXHR9XG4gXG4gXHQvKlxuLVx0ICogVGhpcyBzbGFiIHdhcyBwYXJ0aWFsbHkgZW1wdHkgYnV0IG5vdCBvbiB0aGUgcGVyLW5vZGUgcGFydGlhbCBsaXN0LFxuLVx0ICogaW4gd2hpY2ggY2FzZSB3ZSBzaG91bGRuJ3QgbWFuaXB1bGF0ZSBpdHMgbGlzdCwganVzdCByZXR1cm4uXG4rXHQgKiBQYXJrIHRoZSBzbGFiLiBJZiB0aGlzIHBhcmsgbWFrZXMgdGhlIHBhcmtlZCBsbGlzdCBub24tZW1wdHksXG4rXHQgKiB0aGVuIHNjaGVkdWxlIHVucGFya193b3JrLlxuIFx0ICovXG4rXHRpZiAodW5saWtlbHkocGFyaykpIHtcbitcdFx0aWYgKGxsaXN0X2FkZChzbGFiX3RvX3BhcmtlZF9sbG5vZGUoc2xhYiksIFx1MDAyNm4tXHUwMDNlcGFya2VkX3NsYWJzKSlcbitcdFx0XHRxdWV1ZV9kZWxheWVkX3dvcmsoZmx1c2h3cSwgXHUwMDI2bi1cdTAwM2V1bnBhcmtfd29yayxcbitcdFx0XHRcdFx0ICAgVU5QQVJLX0RFTEFZKTtcbitcdFx0c3RhdChzLCBQQVJLX1NMQUIpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRvbl9ub2RlX3BhcnRpYWwgPSBzbGFiX3Rlc3Rfbm9kZV9wYXJ0aWFsKHNsYWIpO1xuK1xuIFx0aWYgKCF3YXNfZnVsbCBcdTAwMjZcdTAwMjYgIW9uX25vZGVfcGFydGlhbCkge1xuK1x0XHQvKlxuK1x0XHQgKiBwYXJ0aWFsLVx1MDAzZWVtcHR5LCBvZmZsaXN0OiB0aGUgc2xhYiBoYXMgYmVlbiB0YWtlbiBvZmYgdGhlXG4rXHRcdCAqIHBhcnRpYWwgbGlzdCBieSBhIGJ1bGsgcmVmaWxsLCBvciBwYXJrZWQgZHVyaW5nIGl0cyBmdWxsIC1cdTAwM2VcbitcdFx0ICogcGFydGlhbC9lbXB0eSB0cmFuc2l0aW9uLiBJdCB3aWxsIGJlIHB1dCBiYWNrIGJ5IG90aGVyIHBhdGhzLFxuK1x0XHQgKiBzbyB0aGlzIHNsYWIncyBsaXN0IGhhbmRsaW5nIGlzIG5vdCBvdXJzIHRvIGRvLlxuK1x0XHQgKi9cbiBcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZuLVx1MDAzZWxpc3RfbG9jaywgZmxhZ3MpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4gXHQvKlxuLVx0ICogSWYgc2xhYiBiZWNhbWUgZW1wdHksIHNob3VsZCB3ZSBhZGQva2VlcCBpdCBvbiB0aGUgcGFydGlhbCBsaXN0IG9yIHdlXG4tXHQgKiBoYXZlIGVub3VnaD9cbitcdCAqIGZ1bGwvcGFydGlhbC1cdTAwM2VlbXB0eSwgZXhjZWVkOiB3ZSBoYXZlIGVub3VnaCBwYXJ0aWFsIHNsYWJzIGFscmVhZHkuXG4rXHQgKlxuK1x0ICogUGFya2VkIHNsYWJzIGFyZSBhbHNvIGNvdW50ZWQgYXMgcGFydGlhbCBzbGFicy4gV2UgZG9uJ3RcbitcdCAqIGtlZXAgYW4gZXhhY3QgY291bnQgb2YgcGFya2VkIHNsYWJzLCBzbyB3ZSB0cmVhdCBhbnkgcGFya2VkXG4rXHQgKiBzbGFiIGFzIHJvdWdobHkgZXhjZWVkaW5nLlxuIFx0ICovXG4tXHRpZiAodW5saWtlbHkoIW5ldy5pbnVzZSBcdTAwMjZcdTAwMjYgbi1cdTAwM2Vucl9wYXJ0aWFsIFx1MDAzZT0gcy1cdTAwM2VtaW5fcGFydGlhbCkpXG4tXHRcdGdvdG8gc2xhYl9lbXB0eTtcbitcdGlmICh1bmxpa2VseSghbmV3LmludXNlIFx1MDAyNlx1MDAyNiAobi1cdTAwM2Vucl9wYXJ0aWFsIFx1MDAzZT0gcy1cdTAwM2VtaW5fcGFydGlhbCB8fFxuK1x0XHRcdFx0ICAgICFsbGlzdF9lbXB0eShcdTAwMjZuLVx1MDAzZXBhcmtlZF9zbGFicykpKSkge1xuK1x0XHQvKiBwYXJ0aWFsLVx1MDAzZWVtcHR5LCBvbmxpc3QsIGV4Y2VlZCAqL1xuK1x0XHRpZiAobGlrZWx5KCF3YXNfZnVsbCkpIHtcbitcdFx0XHRyZW1vdmVfcGFydGlhbChuLCBzbGFiKTtcbitcdFx0XHRzdGF0KHMsIEZSRUVfUkVNT1ZFX1BBUlRJQUwpO1xuK1x0XHR9XG4rXHRcdC8qIGVsc2UgZnVsbC1cdTAwM2VlbXB0eSwgZXhjZWVkOiBpdCBpcyBvbiBubyBsaXN0IHRvIHJlbW92ZSBmcm9tICovXG4rXG4rXHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2bi1cdTAwM2VsaXN0X2xvY2ssIGZsYWdzKTtcbitcdFx0c3RhdChzLCBGUkVFX1NMQUIpO1xuK1x0XHRkaXNjYXJkX3NsYWIocywgc2xhYik7XG4rXHRcdHJldHVybjtcbitcdH1cbiBcbiBcdC8qXG4tXHQgKiBPYmplY3RzIGxlZnQgaW4gdGhlIHNsYWIuIElmIGl0IHdhcyBub3Qgb24gdGhlIHBhcnRpYWwgbGlzdCBiZWZvcmVcbi1cdCAqIHRoZW4gYWRkIGl0LlxuK1x0ICogQXQgdGhpcyBwb2ludCwgb25seSB0aHJlZSBjYXNlcyByZW1haW46XG4rXHQgKiAgIGZ1bGwtXHUwMDNlcGFydGlhbFxuK1x0ICogICBmdWxsLVx1MDAzZWVtcHR5LCBub3QgZXhjZWVkXG4rXHQgKiAgIHBhcnRpYWwtXHUwMDNlZW1wdHksIG9ubGlzdCwgbm90IGV4Y2VlZFxuIFx0ICovXG4rXG4rXHQvKiBmdWxsLVx1MDAzZXBhcnRpYWw7IGZ1bGwtXHUwMDNlZW1wdHksIG5vdCBleGNlZWQgKi9cbiBcdGlmICh1bmxpa2VseSh3YXNfZnVsbCkpIHtcbiBcdFx0YWRkX3BhcnRpYWwobiwgc2xhYiwgQUREX1RPX1RBSUwpO1xuIFx0XHRzdGF0KHMsIEZSRUVfQUREX1BBUlRJQUwpO1xuIFx0fVxuLVx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZuLVx1MDAzZWxpc3RfbG9jaywgZmxhZ3MpO1xuLVx0cmV0dXJuO1xuLVxuLXNsYWJfZW1wdHk6XG4tXHQvKlxuLVx0ICogVGhlIHNsYWIgY291bGQgaGF2ZSBhIHNpbmdsZSBvYmplY3QgYW5kIHRodXMgZ28gZnJvbSBmdWxsIHRvIGVtcHR5IGluXG4tXHQgKiBhIHNpbmdsZSBmcmVlLCBidXQgbW9yZSBsaWtlbHkgaXQgd2FzIG9uIHRoZSBwYXJ0aWFsIGxpc3QuIFJlbW92ZSBpdC5cbi1cdCAqL1xuLVx0aWYgKGxpa2VseSghd2FzX2Z1bGwpKSB7XG4tXHRcdHJlbW92ZV9wYXJ0aWFsKG4sIHNsYWIpO1xuLVx0XHRzdGF0KHMsIEZSRUVfUkVNT1ZFX1BBUlRJQUwpO1xuLVx0fVxuK1x0LyogZWxzZSBwYXJ0aWFsLVx1MDAzZWVtcHR5LCBvbmxpc3QsIG5vdCBleGNlZWQ6IGl0IHN0YXlzIG9uIHBhcnRpYWwgbGlzdCAqL1xuIFxuIFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZuLVx1MDAzZWxpc3RfbG9jaywgZmxhZ3MpO1xuLVx0c3RhdChzLCBGUkVFX1NMQUIpO1xuLVx0ZGlzY2FyZF9zbGFiKHMsIHNsYWIpO1xuIH1cbiBcbiAvKlxuQEAgLTczNTcsOCArNzU1OCwxMyBAQCBfX3JlZmlsbF9vYmplY3RzX2FueShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqKnAsIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG1pblxuIFxuIFx0XHRcdG4gPSBnZXRfbm9kZShzLCB6b25lX3RvX25pZCh6b25lKSk7XG4gXG4rXHRcdFx0LypcbitcdFx0XHQgKiBQYXJrZWQgc2xhYnMgbWFrZSB0aGUgbm9kZSB3b3J0aCB0cnlpbmdcbitcdFx0XHQgKiBldmVuIGlmIG5yX3BhcnRpYWwgbG9va3MgbG93LlxuK1x0XHRcdCAqL1xuIFx0XHRcdGlmICghbiB8fCAhY3B1c2V0X3pvbmVfYWxsb3dlZCh6b25lLCBnZnApIHx8XG4tXHRcdFx0XHRcdG4tXHUwMDNlbnJfcGFydGlhbCBcdTAwM2M9IHMtXHUwMDNlbWluX3BhcnRpYWwpXG4rXHRcdFx0XHRcdChuLVx1MDAzZW5yX3BhcnRpYWwgXHUwMDNjPSBzLVx1MDAzZW1pbl9wYXJ0aWFsIFx1MDAyNlx1MDAyNlxuK1x0XHRcdFx0XHQgbGxpc3RfZW1wdHkoXHUwMDI2bi1cdTAwM2VwYXJrZWRfc2xhYnMpKSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRcdHIgPSBfX3JlZmlsbF9vYmplY3RzX25vZGUocywgcCwgZ2ZwLCBtaW4sIG1heCwgbixcbkBAIC03Njc5LDYgKzc4ODUsOCBAQCBpbml0X2ttZW1fY2FjaGVfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlICpuKVxuIFx0bi1cdTAwM2Vucl9wYXJ0aWFsID0gMDtcbiBcdHNwaW5fbG9ja19pbml0KFx1MDAyNm4tXHUwMDNlbGlzdF9sb2NrKTtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNm4tXHUwMDNlcGFydGlhbCk7XG4rXHRpbml0X2xsaXN0X2hlYWQoXHUwMDI2bi1cdTAwM2VwYXJrZWRfc2xhYnMpO1xuK1x0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2bi1cdTAwM2V1bnBhcmtfd29yaywgdW5wYXJrX3dvcmtfZm4pO1xuICNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xuIFx0YXRvbWljX2xvbmdfc2V0KFx1MDAyNm4tXHUwMDNlbnJfc2xhYnMsIDApO1xuIFx0YXRvbWljX2xvbmdfc2V0KFx1MDAyNm4tXHUwMDNldG90YWxfb2JqZWN0cywgMCk7XG5AQCAtNzgxMiw2ICs4MDIwLDcgQEAgc3RhdGljIHZvaWQgZnJlZV9rbWVtX2NhY2hlX25vZGVzKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxuIFx0fVxuIFxuIFx0Zm9yX2VhY2hfa21lbV9jYWNoZV9ub2RlKHMsIG5vZGUsIG4pIHtcbitcdFx0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNm4tXHUwMDNldW5wYXJrX3dvcmspO1xuIFx0XHRzLVx1MDAzZXBlcl9ub2RlW25vZGVdLm5vZGUgPSBOVUxMO1xuIFx0XHRrbWVtX2NhY2hlX2ZyZWUoa21lbV9jYWNoZV9ub2RlLCBuKTtcbiBcdH1cbkBAIC04MTEyLDYgKzgzMjEsMTAgQEAgc3RhdGljIHZvaWQgZnJlZV9wYXJ0aWFsKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlICpuKVxuIFxuIFx0QlVHX09OKGlycXNfZGlzYWJsZWQoKSk7XG4gXHRzcGluX2xvY2tfaXJxKFx1MDAyNm4tXHUwMDNlbGlzdF9sb2NrKTtcbitcbitcdC8qIFVucGFyayBzbGFicyBzbyB0aGUgd2FsayBjYW4gZmluZCB0aGVtLiAqL1xuK1x0dW5wYXJrX3NsYWJzKHMsIG4sIE5VTEwpO1xuK1xuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNsYWIsIGgsIFx1MDAyNm4tXHUwMDNlcGFydGlhbCwgc2xhYl9saXN0KSB7XG4gXHRcdGlmICghc2xhYi1cdTAwM2VpbnVzZSkge1xuIFx0XHRcdHJlbW92ZV9wYXJ0aWFsKG4sIHNsYWIpO1xuQEAgLTgzODMsNiArODU5Niw5IEBAIHN0YXRpYyBpbnQgX19rbWVtX2NhY2hlX2RvX3NocmluayhzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbiBcbiBcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2bi1cdTAwM2VsaXN0X2xvY2ssIGZsYWdzKTtcbiBcbitcdFx0LyogUGFya2VkIHNsYWJzIGFyZSBzaHJpbmsgY2FuZGlkYXRlcyBhcyB3ZWxsLiAqL1xuK1x0XHR1bnBhcmtfc2xhYnMocywgbiwgTlVMTCk7XG4rXG4gXHRcdC8qXG4gXHRcdCAqIEJ1aWxkIGxpc3RzIG9mIHNsYWJzIHRvIGRpc2NhcmQgb3IgcHJvbW90ZS5cbiBcdFx0ICpcbkBAIC05NTIyLDYgKzk3MzgsOSBAQCBTVEFUX0FUVFIoRlJFRV9GQVNUUEFUSCwgZnJlZV9mYXN0cGF0aCk7XG4gU1RBVF9BVFRSKEZSRUVfU0xPV1BBVEgsIGZyZWVfc2xvd3BhdGgpO1xuIFNUQVRfQVRUUihGUkVFX0FERF9QQVJUSUFMLCBmcmVlX2FkZF9wYXJ0aWFsKTtcbiBTVEFUX0FUVFIoRlJFRV9SRU1PVkVfUEFSVElBTCwgZnJlZV9yZW1vdmVfcGFydGlhbCk7XG4rU1RBVF9BVFRSKFBBUktfU0xBQiwgcGFya19zbGFiKTtcbitTVEFUX0FUVFIoVU5QQVJLX1NMQUIsIHVucGFya19zbGFiKTtcbitTVEFUX0FUVFIoVU5QQVJLX0VWRU5ULCB1bnBhcmtfZXZlbnQpO1xuIFNUQVRfQVRUUihBTExPQ19TTEFCLCBhbGxvY19zbGFiKTtcbiBTVEFUX0FUVFIoQUxMT0NfTk9ERV9NSVNNQVRDSCwgYWxsb2Nfbm9kZV9taXNtYXRjaCk7XG4gU1RBVF9BVFRSKEZSRUVfU0xBQiwgZnJlZV9zbGFiKTtcbkBAIC05NjEwLDYgKzk4MjksOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZSAqY29uc3Qgc2xhYl9hdHRyc1tdID0ge1xuIFx0XHUwMDI2ZnJlZV9zbG93cGF0aF9hdHRyLmF0dHIsXG4gXHRcdTAwMjZmcmVlX2FkZF9wYXJ0aWFsX2F0dHIuYXR0cixcbiBcdFx1MDAyNmZyZWVfcmVtb3ZlX3BhcnRpYWxfYXR0ci5hdHRyLFxuK1x0XHUwMDI2cGFya19zbGFiX2F0dHIuYXR0cixcbitcdFx1MDAyNnVucGFya19zbGFiX2F0dHIuYXR0cixcbitcdFx1MDAyNnVucGFya19ldmVudF9hdHRyLmF0dHIsXG4gXHRcdTAwMjZhbGxvY19zbGFiX2F0dHIuYXR0cixcbiBcdFx1MDAyNmFsbG9jX25vZGVfbWlzbWF0Y2hfYXR0ci5hdHRyLFxuIFx0XHUwMDI2ZnJlZV9zbGFiX2F0dHIuYXR0cixcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE1OjQ3OjA5LjIwOTAyNTg3NFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc4MTczMzUxMDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgQ29yZSBTTFVCIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IGZ1bmRhbWVudGFsbHkgYWx0ZXJzIHRoZSBTTFVCIGFsbG9jYXRvciwgc3BlY2lmaWNhbGx5IHRoZSBgbW0vc2x1Yi5jYCBmaWxlLiBUaGlzIGludHJvZHVjZXMgYSBuZXcgbWV0aG9kIGZvciBcInBhcmtpbmdcIiBzbGFicyBvbiBhIGxvY2tsZXNzIGxpc3QgKGBsbGlzdGApIHdpdGhpbiB0aGUgZnJlZSBzbG93cGF0aCwgd2hpY2ggaXMgYSBzbWFydCBtb3ZlIHRvIG1pdGlnYXRlIGNvbnRlbnRpb24gb24gdGhlIGBsaXN0X2xvY2tgLiBUaGlzIGlzIGEgcHJldHR5IHNpZ25pZmljYW50IGNoYW5nZSwgcmVhbGx5IGRpZ2dpbmcgaW50byBhIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29tcG9uZW50LiBJdOKAmXMgYWRkaW5nIGBwYXJrZWRfc2xhYnNgIHRvIHRoZSBga21lbV9jYWNoZV9ub2RlYCBzdHJ1Y3R1cmUgYW5kIGEgZGVsYXllZCB3b3JrIGl0ZW0sIGB1bnBhcmtfd29ya2AsIHRvIGhhbmRsZSB1bnBhcmtpbmcgc2xhYnMgaWYgb3RoZXIgcHJvY2Vzc2VzIGRvbid0IHRha2UgY2FyZSBvZiBpdC4gVGhlIHBhdGNoIHRvdWNoZXMgYSB3aG9sZSBob3N0IG9mIGZ1bmN0aW9uczogYF9fc2xhYl9mcmVlYCwgYGdldF9wYXJ0aWFsX25vZGVfYnVsa2AsIGBnZXRfZnJvbV9wYXJ0aWFsX25vZGVgLCBgZ2V0X2Zyb21fYW55X3BhcnRpYWxgLCBgX19yZWZpbGxfb2JqZWN0c19hbnlgLCBgZnJlZV9wYXJ0aWFsYCwgYW5kIGBfX2ttZW1fY2FjaGVfZG9fc2hyaW5rYC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBkZW1hbmRzIGNhcmVmdWwgZnV6emluZy4gVGhpcyBsZXZlbCBvZiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IG1vZGlmaWNhdGlvbnMgKmFsd2F5cyogd2FycmFudHMgaW50ZW5zZSBzY3J1dGlueS5cblxuTm93LCBsZXQncyBzZWUgYWJvdXQgdGhlIGNvbmZpZ3VyYXRpb24uIFNMVUIgaXMgdGhlIGRlZmF1bHQgYWxsb2NhdG9yIHRoZXNlIGRheXMsIHJpZ2h0PyBMZXQgbWUganVzdCBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vICpzcGVjaWZpYyogY29uZmlnIG9wdGlvbnMgdGhhdCB0aGlzIHBhdGNoIG1pZ2h0IGJlIGdhdGVkIGJlaGluZC4gT2theSwgc28gaXTigJlzIG1vZGlmeWluZyBgbW0vc2x1Yi5jYCAtIGVhc3kgZW5vdWdoIHRvIGNoZWNrLiBgQ09ORklHX1NMVUJgIGlzIHRoZSBwcmltYXJ5IG9uZSwgYW5kIGl0J3MgYWxtb3N0IGFsd2F5cyBlbmFibGVkIG5vdyB0aGF0IGBDT05GSUdfU0xBQmAgaXMgaGlzdG9yeS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbid0IG1pc3MgYW55dGhpbmcgdGhvdWdoLiBgQ09ORklHX1NMVUJfREVCVUdg4oCmIHRoZSBwYXRjaCBzZWVtcyB0byB0b3VjaCBzb21lIHN0YXRzLCBidXQgbm90IHN0cmljdGx5IHVuZGVyIHRoYXQgb3B0aW9uLiBBaCwgcmlnaHQsIHRoZSBzdGF0cyBhcmUgcHJvYmFibHkgdW5kZXIgYENPTkZJR19TTFVCX1NUQVRTYC4gSeKAmWxsIGRvdWJsZS1jaGVjayBgbW0vc2x1Yi5jYCBmb3IgYFNUQVRfQVRUUmAgdG8gbWFrZSBzdXJlLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBwaWN0dXJlIG9mIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODE4OCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE1OjQ3OjE3LjAyNjM2Mzk0OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTM2OTAyODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiU1RBVF9BVFRSXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3NsdWIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zbHViLmM9OTcxMD1zdGF0aWMgdm9pZCBjbGVhcl9zdGF0KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBlbnVtIHN0YXRfaXRlbSBzaSlcXG4tLVxcbm1tL3NsdWIuYy05NzE3LVxcbm1tL3NsdWIuYzo5NzE4OiNkZWZpbmUgU1RBVF9BVFRSKHNpLCB0ZXh0KSBcXHRcXHRcXHRcXHRcXHRcXFxcXFxubW0vc2x1Yi5jLTk3MTktc3RhdGljIHNzaXplX3QgdGV4dCMjX3Nob3coc3RydWN0IGttZW1fY2FjaGUgKnMsIGNoYXIgKmJ1ZilcXHRcXFxcXFxuLS1cXG5tbS9zbHViLmM9OTczMT1TTEFCX0FUVFIodGV4dCk7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbm1tL3NsdWIuYy05NzMyLVxcbm1tL3NsdWIuYzo5NzMzOlNUQVRfQVRUUihBTExPQ19GQVNUUEFUSCwgYWxsb2NfZmFzdHBhdGgpO1xcbm1tL3NsdWIuYzo5NzM0OlNUQVRfQVRUUihBTExPQ19TTE9XUEFUSCwgYWxsb2Nfc2xvd3BhdGgpO1xcbm1tL3NsdWIuYzo5NzM1OlNUQVRfQVRUUihGUkVFX1JDVV9TSEVBRiwgZnJlZV9yY3Vfc2hlYWYpO1xcbm1tL3NsdWIuYzo5NzM2OlNUQVRfQVRUUihGUkVFX1JDVV9TSEVBRl9GQUlMLCBmcmVlX3JjdV9zaGVhZl9mYWlsKTtcXG5tbS9zbHViLmM6OTczNzpTVEFUX0FUVFIoRlJFRV9GQVNUUEFUSCwgZnJlZV9mYXN0cGF0aCk7XFxubW0vc2x1Yi5jOjk3Mzg6U1RBVF9BVFRSKEZSRUVfU0xPV1BBVEgsIGZyZWVfc2xvd3BhdGgpO1xcbm1tL3NsdWIuYzo5NzM5OlNUQVRfQVRUUihGUkVFX0FERF9QQVJUSUFMLCBmcmVlX2FkZF9wYXJ0aWFsKTtcXG5tbS9zbHViLmM6OTc0MDpTVEFUX0FUVFIoRlJFRV9SRU1PVkVfUEFSVElBTCwgZnJlZV9yZW1vdmVfcGFydGlhbCk7XFxubW0vc2x1Yi5jOjk3NDE6U1RBVF9BVFRSKFBBUktfU0xBQiwgcGFya19zbGFiKTtcXG5tbS9zbHViLmM6OTc0MjpTVEFUX0FUVFIoVU5QQVJLX1NMQUIsIHVucGFya19zbGFiKTtcXG5tbS9zbHViLmM6OTc0MzpTVEFUX0FUVFIoVU5QQVJLX0VWRU5ULCB1bnBhcmtfZXZlbnQpO1xcbm1tL3NsdWIuYzo5NzQ0OlNUQVRfQVRUUihBTExPQ19TTEFCLCBhbGxvY19zbGFiKTtcXG5tbS9zbHViLmM6OTc0NTpTVEFUX0FUVFIoQUxMT0NfTk9ERV9NSVNNQVRDSCwgYWxsb2Nfbm9kZV9taXNtYXRjaCk7XFxubW0vc2x1Yi5jOjk3NDY6U1RBVF9BVFRSKEZSRUVfU0xBQiwgZnJlZV9zbGFiKTtcXG5tbS9zbHViLmM6OTc0NzpTVEFUX0FUVFIoT1JERVJfRkFMTEJBQ0ssIG9yZGVyX2ZhbGxiYWNrKTtcXG5tbS9zbHViLmM6OTc0ODpTVEFUX0FUVFIoQ01QWENIR19ET1VCTEVfRkFJTCwgY21weGNoZ19kb3VibGVfZmFpbCk7XFxubW0vc2x1Yi5jOjk3NDk6U1RBVF9BVFRSKFNIRUFGX0ZMVVNILCBzaGVhZl9mbHVzaCk7XFxubW0vc2x1Yi5jOjk3NTA6U1RBVF9BVFRSKFNIRUFGX1JFRklMTCwgc2hlYWZfcmVmaWxsKTtcXG5tbS9zbHViLmM6OTc1MTpTVEFUX0FUVFIoU0hFQUZfQUxMT0MsIHNoZWFmX2FsbG9jKTtcXG5tbS9zbHViLmM6OTc1MjpTVEFUX0FUVFIoU0hFQUZfRlJFRSwgc2hlYWZfZnJlZSk7XFxubW0vc2x1Yi5jOjk3NTM6U1RBVF9BVFRSKEJBUk5fR0VULCBiYXJuX2dldCk7XFxubW0vc2x1Yi5jOjk3NTQ6U1RBVF9BVFRSKEJBUk5fR0VUX0ZBSUwsIGJhcm5fZ2V0X2ZhaWwpO1xcbm1tL3NsdWIuYzo5NzU1OlNUQVRfQVRUUihCQVJOX1BVVCwgYmFybl9wdXQpO1xcbm1tL3NsdWIuYzo5NzU2OlNUQVRfQVRUUihCQVJOX1BVVF9GQUlMLCBiYXJuX3B1dF9mYWlsKTtcXG5tbS9zbHViLmM6OTc1NzpTVEFUX0FUVFIoU0hFQUZfUFJFRklMTF9GQVNULCBzaGVhZl9wcmVmaWxsX2Zhc3QpO1xcbm1tL3NsdWIuYzo5NzU4OlNUQVRfQVRUUihTSEVBRl9QUkVGSUxMX1NMT1csIHNoZWFmX3ByZWZpbGxfc2xvdyk7XFxubW0vc2x1Yi5jOjk3NTk6U1RBVF9BVFRSKFNIRUFGX1BSRUZJTExfT1ZFUlNJWkUsIHNoZWFmX3ByZWZpbGxfb3ZlcnNpemUpO1xcbm1tL3NsdWIuYzo5NzYwOlNUQVRfQVRUUihTSEVBRl9SRVRVUk5fRkFTVCwgc2hlYWZfcmV0dXJuX2Zhc3QpO1xcbm1tL3NsdWIuYzo5NzYxOlNUQVRfQVRUUihTSEVBRl9SRVRVUk5fU0xPVywgc2hlYWZfcmV0dXJuX3Nsb3cpO1xcbm1tL3NsdWIuYy05NzYyLSNlbmRpZlxcdC8qIENPTkZJR19TTFVCX1NUQVRTICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE1OjQ3OjE3LjE0MDA1ODQ2OFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4Njc1NzAxMDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTTFVCIENvZGUgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIFNMVUIgcGF0Y2guIEZpcnN0IHRoaW5nLCBJIHNlZSB0aGUgc3RhdHMgYXJlLCBhcyB1c3VhbCwgY29udHJvbGxlZCBieSBgQ09ORklHX1NMVUJfU1RBVFNgLiBObyBzdXJwcmlzZXMgdGhlcmUuIFRoZSBjb3JlIFNMVUIgbG9naWMgaXRzZWxmLCBhcyBJJ2QgZXhwZWN0LCBpcyBhbGwgcmVzaWRpbmcgaW4gYG1tL3NsdWIuY2AuIE5vdywgdGhlIGtleSBpcyB0byBwaW5wb2ludCB3aGF0ICpzcGVjaWZpY2FsbHkqIGhhcyBiZWVuIHRvdWNoZWQgaW4gdGhpcyBwYXRjaC4gTGV0J3Mgc2VlLi4uIGl0IGxvb2tzIGxpa2UgdGhlIG1vZGlmaWNhdGlvbiBsaXN0IGluY2x1ZGVzIGBfX3NsYWJfZnJlZWAsIGBnZXRfcGFydGlhbF9ub2RlX2J1bGtgLCBgZ2V0X2Zyb21fcGFydGlhbF9ub2RlYCwgYGdldF9mcm9tX2FueV9wYXJ0aWFsYCwgYF9fcmVmaWxsX29iamVjdHNfYW55YCwgYGZyZWVfcGFydGlhbGAsIGFuZCBgX19rbWVtX2NhY2hlX2RvX3Nocmlua2AuIEludGVyZXN0aW5nLCBhbmQgbm93IHRoZXJlIGFyZSBuZXcgYWRkaXRpb25zOiBgdW5wYXJrX3NsYWJzYCBhbmQgYHVucGFya193b3JrX2ZuYC4gSGFuZyBvbiwgdGhlc2UgbmV3IGFkZGl0aW9ucyBhcmUgYHN0YXRpY2AuIEhtbSwgYW5kIGxldCBtZSBjaGVjayBvbiB0aGUgb3RoZXIgbW9kaWZpZWQgZnVuY3Rpb25zLiBBaCwgYF9fc2xhYl9mcmVlYCBpcyBhbHNvIGBzdGF0aWNgLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gbm90IG1pc3NpbmcgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zLCB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zIGNhbiBiZSBmb3VuZCBpbiBgbW0vc2x1Yi5jYC4gUmlnaHQsIEkgc2hvdWxkIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aG9zZSBub24tc3RhdGljIGVudHJpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDIxLCJPdXRwdXRUb2tlbnMiOjkxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE1OjQ3OjIzLjAwNzYzMTMzNFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTMxNjA5OTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXihzdGF0aWMgKT8odm9pZHxib29sfHZvaWQgXFxcXCp8aW50KSAoX19zbGFiX2ZyZWV8Z2V0X3BhcnRpYWxfbm9kZV9idWxrfGdldF9mcm9tX3BhcnRpYWxfbm9kZXxnZXRfZnJvbV9hbnlfcGFydGlhbHxfX3JlZmlsbF9vYmplY3RzX2FueXxmcmVlX3BhcnRpYWx8X19rbWVtX2NhY2hlX2RvX3NocmluaylcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zbHViLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc2x1Yi5jPTM5NDY9c3RhdGljIGlubGluZSBib29sIHBmbWVtYWxsb2NfbWF0Y2goc3RydWN0IHNsYWIgKnNsYWIsIGdmcF90IGdmcGZsYWdzKTtcXG5tbS9zbHViLmMtMzk0Ny1cXG5tbS9zbHViLmM6Mzk0ODpzdGF0aWMgYm9vbCBnZXRfcGFydGlhbF9ub2RlX2J1bGsoc3RydWN0IGttZW1fY2FjaGUgKnMsXFxubW0vc2x1Yi5jLTM5NDktXFx0XFx0XFx0XFx0ICBzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlICpuLFxcbi0tXFxubW0vc2x1Yi5jPTU4NTA9c3RhdGljIGJvb2wgX19zbGFiX3RyeV9yZXR1cm5fZnJlZWxpc3Qoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLFxcbi0tXFxubW0vc2x1Yi5jLTU4NzgtICovXFxubW0vc2x1Yi5jOjU4Nzk6c3RhdGljIHZvaWQgX19zbGFiX2ZyZWUoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLFxcbm1tL3NsdWIuYy01ODgwLVxcdFxcdFxcdHZvaWQgKmhlYWQsIHZvaWQgKnRhaWwsIGludCBjbnQsXFxuLS1cXG5tbS9zbHViLmM9ODI4NT1zdGF0aWMgdm9pZCBsaXN0X3NsYWJfb2JqZWN0cyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIpXFxuLS1cXG5tbS9zbHViLmMtODMxNi0gKi9cXG5tbS9zbHViLmM6ODMxNzpzdGF0aWMgdm9pZCBmcmVlX3BhcnRpYWwoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBrbWVtX2NhY2hlX25vZGUgKm4pXFxubW0vc2x1Yi5jLTgzMTgte1xcbi0tXFxubW0vc2x1Yi5jPTg1MjE9dm9pZCBfX2NoZWNrX2hlYXBfb2JqZWN0KGNvbnN0IHZvaWQgKnB0ciwgdW5zaWduZWQgbG9uZyBuLFxcbi0tXFxubW0vc2x1Yi5jLTg1NzItICovXFxubW0vc2x1Yi5jOjg1NzM6c3RhdGljIGludCBfX2ttZW1fY2FjaGVfZG9fc2hyaW5rKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxcbm1tL3NsdWIuYy04NTc0LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTU6NDc6MjMuMzYwNzk3NDI1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU3MjMwODY0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQ2hlY2tpbmcgS2V5IFJldHJpZXZhbCBNZXRob2RzKipcblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB3ZSdyZSBwdWxsaW5nIGRhdGEgZnJvbSB0aGVzZSBwYXJ0aWFsIG5vZGVzLCBlc3BlY2lhbGx5IHdpdGggdGhpcyBuZXcgYXJjaGl0ZWN0dXJlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZ3Jhc3AgdGhlIGNvcmUgbG9naWMgYmVoaW5kIGRhdGEgcmV0cmlldmFsLlxuXG5NeSBmb2N1cyBzaG91bGQgYmUgb24gaG93IHdlJ3JlIGdldHRpbmcgdGhlIG9iamVjdHMgd2UgbmVlZCwgYW5kIGhvdyB3ZSBoYW5kbGUgc2l0dWF0aW9ucyB3aGVyZSB0aGUgb2JqZWN0IGlzbid0IGltbWVkaWF0ZWx5IGF2YWlsYWJsZS4gSSB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgcHJvY2VzcyBpcyBvcHRpbWl6ZWQsIHJvYnVzdCwgYW5kIGhhbmRsZXMgZWRnZSBjYXNlcyBlZmZlY3RpdmVseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwMDEsIk91dHB1dFRva2VucyI6NjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNTo0NzoyNi45MzMxMDgxNjNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI5MDc5Nzk3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKHN0YXRpYyApPyh2b2lkfGJvb2x8dm9pZCBcXFxcKnxpbnQpIChnZXRfZnJvbV9wYXJ0aWFsX25vZGV8Z2V0X2Zyb21fYW55X3BhcnRpYWx8X19yZWZpbGxfb2JqZWN0c19hbnkpXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vc2x1Yi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNTo0NzoyNy4zNjIyMDUxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjM0Njk4MzE3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIGBnZXRfZnJvbV9wYXJ0aWFsX25vZGVgIFNpZ25hdHVyZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBleGFjdCBzaWduYXR1cmUgb2YgdGhpcyBgZ2V0X2Zyb21fcGFydGlhbF9ub2RlYCBmdW5jdGlvbi4gSSdtIGFscmVhZHkgZmFtaWxpYXIgd2l0aCB0aGUgZ2VuZXJhbCBjb25jZXB0IG9mIHBhcnRpYWwgbm9kZXMgYW5kIGhvdyB0aGV5J3JlIHVzZWQgaW4gdGhlIHN5c3RlbSwgYnV0IHByZWNpc2lvbiBpcyBrZXkuIFdoYXQgYXJlIHRoZSBpbnB1dCB0eXBlcz8gQXJlIHRoZXJlIGFueSBvcHRpb25hbCBwYXJhbWV0ZXJzIG9yIGRlZmF1bHQgdmFsdWVzIEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBkYXRhIHN0cnVjdHVyZXMgaXQgZXhwZWN0cyBhcyBpbnB1dCwgYmV5b25kIHRoZSBvYnZpb3VzIG5vZGUgcmVwcmVzZW50YXRpb24/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgdG8gZGV0ZXJtaW5lIGlmIHRoZSBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQgY29ycmVjdGx5IGluIHRoZSByZWxldmFudCBjb250ZXh0LiBBbnkgcG90ZW50aWFsIHR5cGUgbWlzbWF0Y2hlcyBvciBpbmNvcnJlY3QgYXNzdW1wdGlvbnMgbWFkZSBhYm91dCB0aGUgZXhwZWN0ZWQgZm9ybWF0IGNvdWxkIGxlYWQgdG8gc3VidGxlLCBoYXJkLXRvLWRlYnVnIGlzc3VlcyBkb3duIHRoZSBsaW5lLiBJIHdhbnQgdG8gY2hlY2sgZm9yIGVkZ2UgY2FzZXMsIGFuZCB0aGluayBhYm91dCB0aGUgaW1wbGljYXRpb25zIGZvciBwZXJmb3JtYW5jZSB1bmRlciBsb2FkLiBJJ20gbG9va2luZyBhdCBkYXRhIGFsaWdubWVudCwgYW5kIG1lbW9yeSB1c2FnZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyMzMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNTo0NzozMy43MDkxOTE0NDhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk0NDAzNDE2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnZXRfZnJvbV9wYXJ0aWFsX25vZGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vc2x1Yi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3NsdWIuYz0zOTQ4PXN0YXRpYyBib29sIGdldF9wYXJ0aWFsX25vZGVfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG4tLVxcbm1tL3NsdWIuYy00MDI5LSAqL1xcbm1tL3NsdWIuYzo0MDMwOnN0YXRpYyB2b2lkICpnZXRfZnJvbV9wYXJ0aWFsX25vZGUoc3RydWN0IGttZW1fY2FjaGUgKnMsXFxubW0vc2x1Yi5jLTQwMzEtXFx0XFx0XFx0XFx0ICAgc3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbixcXG4tLVxcbm1tL3NsdWIuYy00MDg1LVxcbm1tL3NsdWIuYzo0MDg2OlxcdFxcdH0gd2hpbGUgKCFfX3NsYWJfdXBkYXRlX2ZyZWVsaXN0KHMsIHNsYWIsIFxcdTAwMjZvbGQsIFxcdTAwMjZuZXcsIFxcXCJnZXRfZnJvbV9wYXJ0aWFsX25vZGVcXFwiKSk7XFxubW0vc2x1Yi5jLTQwODctXFxuLS1cXG5tbS9zbHViLmM9NDEwNT1zdGF0aWMgdm9pZCAqZ2V0X2Zyb21fYW55X3BhcnRpYWwoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcF9mbGFncyxcXG4tLVxcbm1tL3NsdWIuYy00MTYxLVxcbm1tL3NsdWIuYzo0MTYyOlxcdFxcdFxcdFxcdHZvaWQgKm9iamVjdCA9IGdldF9mcm9tX3BhcnRpYWxfbm9kZShzLCBuLFxcbm1tL3NsdWIuYy00MTYzLVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGdmcF9mbGFncywgYWMpO1xcbi0tXFxubW0vc2x1Yi5jPTQxODU9c3RhdGljIHZvaWQgKmdldF9mcm9tX3BhcnRpYWwoc3RydWN0IGttZW1fY2FjaGUgKnMsIGludCBub2RlLCBnZnBfdCBmbGFncyxcXG4tLVxcbm1tL3NsdWIuYy00MTkzLVxcbm1tL3NsdWIuYzo0MTk0OlxcdG9iamVjdCA9IGdldF9mcm9tX3BhcnRpYWxfbm9kZShzLCBnZXRfbm9kZShzLCBzZWFyY2hub2RlKSwgZmxhZ3MsIGFjKTtcXG5tbS9zbHViLmMtNDE5NS1cXHRpZiAob2JqZWN0IHx8IChub2RlICE9IE5VTUFfTk9fTk9ERSBcXHUwMDI2XFx1MDAyNiAoZmxhZ3MgXFx1MDAyNiBfX0dGUF9USElTTk9ERSkpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNTo0NzozNC42NTMyMzQyNDlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA2MDcyOTI1NDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU0xVQiBBbGxvY2F0b3IqKlxuXG5Pa2F5LCBzbyBldmVyeXRoaW5nIEknbSBsb29raW5nIGF0IGluIHRoaXMgY29kZSBzZWVtcyB0byBiZSBzdGF0aWMsIHdoaWNoIGlzbid0IHVudXN1YWwgZm9yIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25zLiBHaXZlbiB0aGF0IHRoZSBTTFVCIGFsbG9jYXRvciBpcyBzdWNoIGEgY3JpdGljYWwgY29tcG9uZW50LCBpdCdzIHByZXR0eSBtdWNoIGEgZ2l2ZW4gdGhhdCBpdCdzIGdvaW5nIHRvIGJlIHN1YmplY3RlZCB0byBoZWF2eSBmdXp6aW5nLiBCdXQgSSBuZWVkIHRvIGJlIHRob3JvdWdoLiBJIHdvbmRlciBpZiB0aGVyZSBhcmUgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiBgbW0vc2x1Yi5jYCB0aGF0IEkgc2hvdWxkIHBheSBleHRyYSBhdHRlbnRpb24gdG8uIExldCBtZSBxdWlja2x5IHNjYW4gdGhhdCBmaWxlIGFuZCBzZWUgd2hhdCdzIGFjdHVhbGx5IHZpc2libGUgYmV5b25kIGl0cyBzdGF0aWMgc2NvcGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExOTEzLCJPdXRwdXRUb2tlbnMiOjQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTU6NTI6NDAuNzI2MTYyMzY4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzU1ODA1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKHZvaWR8Ym9vbHx2b2lkIFxcXFwqfGludCkgW2EtekEtWjAtOV9dK1xcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3NsdWIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zbHViLmM9NDE1PXN0YXRpYyBpbmxpbmVcXG5tbS9zbHViLmM6NDE2OnZvaWQgc3RhdF9hZGQoY29uc3Qgc3RydWN0IGttZW1fY2FjaGUgKnMsIGVudW0gc3RhdF9pdGVtIHNpLCBpbnQgdilcXG5tbS9zbHViLmMtNDE3LXtcXG4tLVxcbm1tL3NsdWIuYz05ODE9c3RhdGljIGJvb2wgc2xhYl9hZGRfa3VuaXRfZXJyb3JzKHZvaWQpXFxuLS1cXG5tbS9zbHViLmMtOTk2LVxcbm1tL3NsdWIuYzo5OTc6Ym9vbCBzbGFiX2luX2t1bml0X3Rlc3Qodm9pZClcXG5tbS9zbHViLmMtOTk4LXtcXG4tLVxcbm1tL3NsdWIuYz0xMTM5PXN0YXRpYyB2b2lkIHByaW50X3RyYWNrKGNvbnN0IGNoYXIgKnMsIHN0cnVjdCB0cmFjayAqdCwgdW5zaWduZWQgbG9uZyBwcl90aW1lKVxcbi0tXFxubW0vc2x1Yi5jLTExNTYtXFxubW0vc2x1Yi5jOjExNTc6dm9pZCBwcmludF90cmFja2luZyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqZWN0KVxcbm1tL3NsdWIuYy0xMTU4LXtcXG4tLVxcbm1tL3NsdWIuYz0xMTY3PXN0YXRpYyB2b2lkIHByaW50X3NsYWJfaW5mbyhjb25zdCBzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4tLVxcbm1tL3NsdWIuYy0xMTczLVxcbm1tL3NsdWIuYzoxMTc0OnZvaWQgc2tpcF9vcmlnX3NpemVfY2hlY2soc3RydWN0IGttZW1fY2FjaGUgKnMsIGNvbnN0IHZvaWQgKm9iamVjdClcXG5tbS9zbHViLmMtMTE3NS17XFxuLS1cXG5tbS9zbHViLmM9MTc1ND1zdGF0aWNcXG5tbS9zbHViLmM6MTc1NTp2b2lkIHNldHVwX3NsYWJfZGVidWcoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICphZGRyKVxcbm1tL3NsdWIuYy0xNzU2LXtcXG4tLVxcbm1tL3NsdWIuYz0yMDU2PXN0YXRpYyBpbmxpbmVcXG5tbS9zbHViLmM6MjA1Nzp2b2lkIHNldHVwX3NsYWJfZGVidWcoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICphZGRyKSB7fVxcbm1tL3NsdWIuYy0yMDU4LVxcbi0tXFxubW0vc2x1Yi5jPTIxNzg9c3RhdGljIGlubGluZSB2b2lkIGluaXRfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4tLVxcbm1tL3NsdWIuYy0yMTgyLVxcbm1tL3NsdWIuYzoyMTgzOmludCBhbGxvY19zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG5tbS9zbHViLmMtMjE4NC1cXHRcXHRcXHRnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncylcXG4tLVxcbm1tL3NsdWIuYz0yNTI1PXN0YXRpYyBfX2Zhc3RwYXRoX2lubGluZVxcbm1tL3NsdWIuYzoyNTI2OmJvb2wgbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGZsYWdzLFxcbm1tL3NsdWIuYy0yNTI3LVxcdFxcdFxcdFxcdHNpemVfdCBzaXplLCB2b2lkICoqcCxcXG4tLVxcbm1tL3NsdWIuYz0yNTUwPXN0YXRpYyBfX2Zhc3RwYXRoX2lubGluZVxcbm1tL3NsdWIuYzoyNTUxOnZvaWQgbWVtY2dfc2xhYl9mcmVlX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICoqcCxcXG5tbS9zbHViLmMtMjU1Mi1cXHRcXHRcXHQgIGludCBvYmplY3RzKVxcbi0tXFxubW0vc2x1Yi5jPTI1NzE9c3RhdGljIF9fZmFzdHBhdGhfaW5saW5lXFxubW0vc2x1Yi5jOjI1NzI6Ym9vbCBtZW1jZ19zbGFiX3Bvc3RfY2hhcmdlKHZvaWQgKnAsIGdmcF90IGZsYWdzKVxcbm1tL3NsdWIuYy0yNTczLXtcXG4tLVxcbm1tL3NsdWIuYz0yNjg1PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmVcXG5tbS9zbHViLmM6MjY4Njpib29sIHNsYWJfZnJlZV9ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICp4LCBib29sIGluaXQsXFxubW0vc2x1Yi5jLTI2ODctXFx0XFx0ICAgIGJvb2wgYWZ0ZXJfcmN1X2RlbGF5KVxcbi0tXFxubW0vc2x1Yi5jPTI3NzA9c3RhdGljIF9fZmFzdHBhdGhfaW5saW5lXFxubW0vc2x1Yi5jOjI3NzE6Ym9vbCBzbGFiX2ZyZWVfZnJlZWxpc3RfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqKmhlYWQsIHZvaWQgKip0YWlsLFxcbm1tL3NsdWIuYy0yNzcyLVxcdFxcdFxcdCAgICAgaW50ICpjbnQpXFxuLS1cXG5tbS9zbHViLmM9NDI4ND1zdGF0aWMgdm9pZCBmbHVzaF9yY3Vfc2hlYWYoc3RydWN0IHdvcmtfc3RydWN0ICp3KVxcbi0tXFxubW0vc2x1Yi5jLTQzMDctLyogbmVlZGVkIGZvciBrdmZyZWVfcmN1X2JhcnJpZXIoKSAqL1xcbm1tL3NsdWIuYzo0MzA4OnZvaWQgZmx1c2hfcmN1X3NoZWF2ZXNfb25fY2FjaGUoc3RydWN0IGttZW1fY2FjaGUgKnMpXFxubW0vc2x1Yi5jLTQzMDkte1xcbi0tXFxubW0vc2x1Yi5jLTQzMzgtXFxubW0vc2x1Yi5jOjQzMzk6dm9pZCBmbHVzaF9hbGxfcmN1X3NoZWF2ZXModm9pZClcXG5tbS9zbHViLmMtNDM0MC17XFxuLS1cXG5tbS9zbHViLmM9NDgwND1zdGF0aWMgX19mYXN0cGF0aF9pbmxpbmVcXG5tbS9zbHViLmM6NDgwNTpib29sIHNsYWJfcG9zdF9hbGxvY19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncywgc2l6ZV90IHNpemUsXFxubW0vc2x1Yi5jLTQ4MDYtXFx0XFx0XFx0ICB2b2lkICoqcCwgY29uc3Qgc3RydWN0IHNsYWJfYWxsb2NfY29udGV4dCAqYWMpXFxuLS1cXG5tbS9zbHViLmM9NTE5NT1FWFBPUlRfU1lNQk9MKGttZW1fY2FjaGVfYWxsb2NfbHJ1X25vcHJvZik7XFxubW0vc2x1Yi5jLTUxOTYtXFxubW0vc2x1Yi5jOjUxOTc6Ym9vbCBrbWVtX2NhY2hlX2NoYXJnZSh2b2lkICpvYmpwLCBnZnBfdCBnZnBmbGFncylcXG5tbS9zbHViLmMtNTE5OC17XFxuLS1cXG5tbS9zbHViLmM9NTI3MT1rbWVtX2NhY2hlX3ByZWZpbGxfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IHNpemUpXFxuLS1cXG5tbS9zbHViLmMtNTM1My0gKi9cXG5tbS9zbHViLmM6NTM1NDp2b2lkIGttZW1fY2FjaGVfcmV0dXJuX3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnAsXFxubW0vc2x1Yi5jLTUzNTUtXFx0XFx0XFx0ICAgICBzdHJ1Y3Qgc2xhYl9zaGVhZiAqc2hlYWYpXFxuLS1cXG5tbS9zbHViLmMtNTQxMS0gKi9cXG5tbS9zbHViLmM6NTQxMjppbnQga21lbV9jYWNoZV9yZWZpbGxfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcCxcXG5tbS9zbHViLmMtNTQxMy1cXHRcXHRcXHQgICAgc3RydWN0IHNsYWJfc2hlYWYgKipzaGVhZnAsIHVuc2lnbmVkIGludCBzaXplKVxcbi0tXFxubW0vc2x1Yi5jPTYyMTE9c3RhdGljIF9fZmFzdHBhdGhfaW5saW5lXFxubW0vc2x1Yi5jOjYyMTI6Ym9vbCBmcmVlX3RvX3BjcyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqZWN0LCBib29sIGFsbG93X3NwaW4pXFxubW0vc2x1Yi5jLTYyMTMte1xcbi0tXFxubW0vc2x1Yi5jPTYzMDY9c3RhdGljIERFRklORV9XQUlUX09WRVJSSURFX01BUChrZnJlZV9yY3Vfc2hlYWZfbWFwLCBMRF9XQUlUX0NPTkZJRyk7XFxubW0vc2x1Yi5jLTYzMDctXFxubW0vc2x1Yi5jOjYzMDg6Ym9vbCBfX2tmcmVlX3JjdV9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqLCB1bnNpZ25lZCBpbnQgZnJlZV9mbGFncylcXG5tbS9zbHViLmMtNjMwOS17XFxuLS1cXG5tbS9zbHViLmM9NjY2NT1zdGF0aWMgdm9pZCBkZWZlcl9mcmVlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpoZWFkKVxcbi0tXFxubW0vc2x1Yi5jLTY2NzctXFxubW0vc2x1Yi5jOjY2Nzg6dm9pZCBkZWZlcl9rZnJlZV9yY3Uoc3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqaGVhZClcXG5tbS9zbHViLmMtNjY3OS17XFxuLS1cXG5tbS9zbHViLmMtNjY4OS0vKiBNdXN0IGJlIGNhbGxlZCBiZWZvcmUgZmx1c2hfcmN1X3NoZWF2ZXNfb25fY2FjaGUoKSAqL1xcbm1tL3NsdWIuYzo2NjkwOnZvaWQgZGVmZXJyZWRfd29ya19iYXJyaWVyKHZvaWQpXFxubW0vc2x1Yi5jLTY2OTEte1xcbi0tXFxubW0vc2x1Yi5jPTY2OTg9c3RhdGljIF9fZmFzdHBhdGhfaW5saW5lXFxubW0vc2x1Yi5jOjY2OTk6dm9pZCBzbGFiX2ZyZWUoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICpvYmplY3QsXFxubW0vc2x1Yi5jLTY3MDAtXFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgYWRkcilcXG4tLVxcbm1tL3NsdWIuYz02NzE3PXN0YXRpYyBub2lubGluZVxcbm1tL3NsdWIuYzo2NzE4OnZvaWQgbWVtY2dfYWxsb2NfYWJvcnRfc2luZ2xlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmplY3QpXFxubW0vc2x1Yi5jLTY3MTkte1xcbi0tXFxubW0vc2x1Yi5jPTY3Mjk9c3RhdGljIF9fZmFzdHBhdGhfaW5saW5lXFxubW0vc2x1Yi5jOjY3MzA6dm9pZCBzbGFiX2ZyZWVfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHZvaWQgKmhlYWQsXFxubW0vc2x1Yi5jLTY3MzEtXFx0XFx0ICAgIHZvaWQgKnRhaWwsIHZvaWQgKipwLCBpbnQgY250LCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuLS1cXG5tbS9zbHViLmM9Njc0Nj1zdGF0aWMgdm9pZCBzbGFiX2ZyZWVfYWZ0ZXJfcmN1X2RlYnVnKHN0cnVjdCByY3VfaGVhZCAqcmN1X2hlYWQpXFxuLS1cXG5tbS9zbHViLmMtNjc3NC0jaWZkZWYgQ09ORklHX0tBU0FOX0dFTkVSSUNcXG5tbS9zbHViLmM6Njc3NTp2b2lkIF9fX2NhY2hlX2ZyZWUoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlLCB2b2lkICp4LCB1bnNpZ25lZCBsb25nIGFkZHIpXFxubW0vc2x1Yi5jLTY3NzYte1xcbi0tXFxubW0vc2x1Yi5jPTY3ODI9c3RhdGljIG5vaW5saW5lIHZvaWQgd2Fybl9mcmVlX2JhZF9vYmooc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iailcXG4tLVxcbm1tL3NsdWIuYy02ODExLSAqL1xcbm1tL3NsdWIuYzo2ODEyOnZvaWQga21lbV9jYWNoZV9mcmVlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICp4KVxcbm1tL3NsdWIuYy02ODEzLXtcXG4tLVxcbm1tL3NsdWIuYz02OTI2PXN0YXRpYyB2b2lkIGZyZWVfbGFyZ2Vfa21hbGxvYyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdm9pZCAqb2JqZWN0KVxcbi0tXFxubW0vc2x1Yi5jLTY5NTEtICovXFxubW0vc2x1Yi5jOjY5NTI6dm9pZCBrdmZyZWVfcmN1X2NiKHN0cnVjdCByY3VfaGVhZCAqaGVhZClcXG5tbS9zbHViLmMtNjk1My17XFxuLS1cXG5tbS9zbHViLmMtNjk3Ni0gKi9cXG5tbS9zbHViLmM6Njk3Nzp2b2lkIGtmcmVlKGNvbnN0IHZvaWQgKm9iamVjdClcXG5tbS9zbHViLmMtNjk3OC17XFxuLS1cXG5tbS9zbHViLmM9NzAwMD1FWFBPUlRfU1lNQk9MKGtmcmVlKTtcXG4tLVxcbm1tL3NsdWIuYy03MDEwLSAqL1xcbm1tL3NsdWIuYzo3MDExOnZvaWQga2ZyZWVfbm9sb2NrKGNvbnN0IHZvaWQgKm9iamVjdClcXG5tbS9zbHViLmMtNzAxMi17XFxuLS1cXG5tbS9zbHViLmM9NzI0Mz1FWFBPUlRfU1lNQk9MKF9fa3ZtYWxsb2Nfbm9kZV9ub3Byb2YpO1xcbi0tXFxubW0vc2x1Yi5jLTcyNTQtICovXFxubW0vc2x1Yi5jOjcyNTU6dm9pZCBrdmZyZWUoY29uc3Qgdm9pZCAqYWRkcilcXG5tbS9zbHViLmMtNzI1Ni17XFxuLS1cXG5tbS9zbHViLmM9NzI2Mj1FWFBPUlRfU1lNQk9MKGt2ZnJlZSk7XFxuLS1cXG5tbS9zbHViLmMtNzI3MC0gKi9cXG5tbS9zbHViLmM6NzI3MTp2b2lkIGt2ZnJlZV9hdG9taWMoY29uc3Qgdm9pZCAqYWRkcilcXG5tbS9zbHViLmMtNzI3Mi17XFxuLS1cXG5tbS9zbHViLmM9NzI3OD1FWFBPUlRfU1lNQk9MKGt2ZnJlZV9hdG9taWMpO1xcbi0tXFxubW0vc2x1Yi5jLTcyODgtICovXFxubW0vc2x1Yi5jOjcyODk6dm9pZCBrdmZyZWVfc2Vuc2l0aXZlKGNvbnN0IHZvaWQgKmFkZHIsIHNpemVfdCBsZW4pXFxubW0vc2x1Yi5jLTcyOTAte1xcbi0tXFxubW0vc2x1Yi5jPTczNDc9c3RhdGljIGlubGluZVxcbm1tL3NsdWIuYzo3MzQ4OmludCBidWlsZF9kZXRhY2hlZF9mcmVlbGlzdChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc2l6ZV90IHNpemUsXFxubW0vc2x1Yi5jLTczNDktXFx0XFx0XFx0ICAgIHZvaWQgKipwLCBzdHJ1Y3QgZGV0YWNoZWRfZnJlZWxpc3QgKmRmKVxcbi0tXFxubW0vc2x1Yi5jPTc0MTI9c3RhdGljIHZvaWQgX19rbWVtX2NhY2hlX2ZyZWVfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc2l6ZV90IHNpemUsIHZvaWQgKipwKVxcbi0tXFxubW0vc2x1Yi5jLTc0MzItLyogTm90ZSB0aGF0IGludGVycnVwdHMgbXVzdCBiZSBlbmFibGVkIHdoZW4gY2FsbGluZyB0aGlzIGZ1bmN0aW9uLiAqL1xcbm1tL3NsdWIuYzo3NDMzOnZvaWQga21lbV9jYWNoZV9mcmVlX2J1bGsoc3RydWN0IGttZW1fY2FjaGUgKnMsIHNpemVfdCBzaXplLCB2b2lkICoqcClcXG5tbS9zbHViLmMtNzQzNC17XFxuLS1cXG5tbS9zbHViLmM9NzYzNz1zdGF0aWMgYm9vbCBfX2ttZW1fY2FjaGVfYWxsb2NfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZmxhZ3MsXFxuLS1cXG5tbS9zbHViLmMtNzY4Ni0gKi9cXG5tbS9zbHViLmM6NzY4Nzpib29sIGttZW1fY2FjaGVfYWxsb2NfYnVsa19ub3Byb2Yoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGZsYWdzLFxcbm1tL3NsdWIuYy03Njg4LVxcdFxcdHNpemVfdCBzaXplLCB2b2lkICoqcClcXG4tLVxcbm1tL3NsdWIuYz04MDA1PXN0YXRpYyB2b2lkIGZyZWVfa21lbV9jYWNoZV9ub2RlcyhzdHJ1Y3Qga21lbV9jYWNoZSAqcylcXG4tLVxcbm1tL3NsdWIuYy04MDI4LVxcbm1tL3NsdWIuYzo4MDI5OnZvaWQgX19rbWVtX2NhY2hlX3JlbGVhc2Uoc3RydWN0IGttZW1fY2FjaGUgKnMpXFxubW0vc2x1Yi5jLTgwMzAte1xcbi0tXFxubW0vc2x1Yi5jPTgzMTc9c3RhdGljIHZvaWQgZnJlZV9wYXJ0aWFsKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlICpuKVxcbi0tXFxubW0vc2x1Yi5jLTgzNDEtXFxubW0vc2x1Yi5jOjgzNDI6Ym9vbCBfX2ttZW1fY2FjaGVfZW1wdHkoc3RydWN0IGttZW1fY2FjaGUgKnMpXFxubW0vc2x1Yi5jLTgzNDMte1xcbi0tXFxubW0vc2x1Yi5jLTgzNTUtICovXFxubW0vc2x1Yi5jOjgzNTY6aW50IF9fa21lbV9jYWNoZV9zaHV0ZG93bihzdHJ1Y3Qga21lbV9jYWNoZSAqcylcXG5tbS9zbHViLmMtODM1Ny17XFxuLS1cXG5tbS9zbHViLmMtODM4My0jaWZkZWYgQ09ORklHX1BSSU5US1xcbm1tL3NsdWIuYzo4Mzg0OnZvaWQgX19rbWVtX29ial9pbmZvKHN0cnVjdCBrbWVtX29ial9pbmZvICprcHAsIHZvaWQgKm9iamVjdCwgc3RydWN0IHNsYWIgKnNsYWIpXFxubW0vc2x1Yi5jLTgzODUte1xcbi0tXFxubW0vc2x1Yi5jPTg1MDg9X19jb3JlX3BhcmFtX2NiKHNsYWJfc3RyaWN0X251bWEsIFxcdTAwMjZwYXJhbV9vcHNfc2xhYl9zdHJpY3RfbnVtYSwgTlVMTCwgMCk7XFxuLS1cXG5tbS9zbHViLmMtODUyMC0gKi9cXG5tbS9zbHViLmM6ODUyMTp2b2lkIF9fY2hlY2tfaGVhcF9vYmplY3QoY29uc3Qgdm9pZCAqcHRyLCB1bnNpZ25lZCBsb25nIG4sXFxubW0vc2x1Yi5jLTg1MjItXFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBzbGFiICpzbGFiLCBib29sIHRvX3VzZXIpXFxuLS1cXG5tbS9zbHViLmM9ODU3Mz1zdGF0aWMgaW50IF9fa21lbV9jYWNoZV9kb19zaHJpbmsoc3RydWN0IGttZW1fY2FjaGUgKnMpXFxuLS1cXG5tbS9zbHViLmMtODY0NC1cXG5tbS9zbHViLmM6ODY0NTppbnQgX19rbWVtX2NhY2hlX3NocmluayhzdHJ1Y3Qga21lbV9jYWNoZSAqcylcXG5tbS9zbHViLmMtODY0Ni17XFxuLS1cXG5tbS9zbHViLmM9ODkyMT12b2lkIF9faW5pdCBrbWVtX2NhY2hlX2luaXRfbGF0ZSh2b2lkKVxcbi0tXFxubW0vc2x1Yi5jLTg5MzAtXFxubW0vc2x1Yi5jOjg5MzE6aW50IGRvX2ttZW1fY2FjaGVfY3JlYXRlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBjb25zdCBjaGFyICpuYW1lLFxcbm1tL3NsdWIuYy04OTMyLVxcdFxcdFxcdCB1bnNpZ25lZCBpbnQgc2l6ZSwgc3RydWN0IGttZW1fY2FjaGVfYXJncyAqYXJncyxcXG4tLVxcbm1tL3NsdWIuYz05OTY4PXN0YXRpYyBpbnQgc3lzZnNfc2xhYl9hZGQoc3RydWN0IGttZW1fY2FjaGUgKnMpXFxuLS1cXG5tbS9zbHViLmMtMTAwMTYtXFxubW0vc2x1Yi5jOjEwMDE3OnZvaWQgc3lzZnNfc2xhYl91bmxpbmsoc3RydWN0IGttZW1fY2FjaGUgKnMpXFxubW0vc2x1Yi5jLTEwMDE4LXtcXG4tLVxcbm1tL3NsdWIuYy0xMDAyMi1cXG5tbS9zbHViLmM6MTAwMjM6dm9pZCBzeXNmc19zbGFiX3JlbGVhc2Uoc3RydWN0IGttZW1fY2FjaGUgKnMpXFxubW0vc2x1Yi5jLTEwMDI0LXtcXG4tLVxcbm1tL3NsdWIuYz0xMDAzOD1zdGF0aWMgc3RydWN0IHNhdmVkX2FsaWFzICphbGlhc19saXN0O1xcbm1tL3NsdWIuYy0xMDAzOS1cXG5tbS9zbHViLmM6MTAwNDA6aW50IHN5c2ZzX3NsYWJfYWxpYXMoc3RydWN0IGttZW1fY2FjaGUgKnMsIGNvbnN0IGNoYXIgKm5hbWUpXFxubW0vc2x1Yi5jLTEwMDQxLXtcXG4tLVxcbm1tL3NsdWIuYz0xMDMwMj1zdGF0aWMgdm9pZCBkZWJ1Z2ZzX3NsYWJfYWRkKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxcbi0tXFxubW0vc2x1Yi5jLTEwMzE3LVxcbm1tL3NsdWIuYzoxMDMxODp2b2lkIGRlYnVnZnNfc2xhYl9yZWxlYXNlKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxcbm1tL3NsdWIuYy0xMDMxOS17XFxuLS1cXG5tbS9zbHViLmM9MTAzMjY9c3RhdGljIHZvaWQgX19pbml0IHNsYWJfZGVidWdmc19yb290X2luaXQodm9pZClcXG4tLVxcbm1tL3NsdWIuYy0xMDMzNC0jaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcXG5tbS9zbHViLmM6MTAzMzU6dm9pZCBnZXRfc2xhYmluZm8oc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiaW5mbyAqc2luZm8pXFxubW0vc2x1Yi5jLTEwMzM2LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTU6NTI6NDAuNzczNzIyNTczWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcyMDA2MzA1MzkwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgU0xVQiBQYXRjaCBDb3ZlcmFnZSBmb3IgRnV6emluZyoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBpbnRvIHRoZSBTTFVCIGNvcmUuIE15IHByaW1hcnkgY29uY2VybiBoZXJlIGlzIGhvdyB0byBiZXN0IHRlc3QgdGhlIG1vZGlmaWVkIGxvZ2ljIHdpdGhvdXQgZ2V0dGluZyBza2V3ZWQgcmVzdWx0cyBmcm9tIGZ1enppbmcgZXh0cmVtZWx5IGNvbW1vbiBob3QgcGF0aHMuIFRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IHRlbGxzIG1lIHRvIGF2b2lkIHRob3NlIGFuZCBmb2N1cyBvbiBkaXN0aW5jdCBBUEkgZW50cnkgcG9pbnRzLiBSaWdodCwgc28gSSd2ZSBnb3QgdG8gZmluZCB0aGUgcmlnaHQgZW50cnkgcG9pbnRzIHRoYXQgKnRyaWdnZXIqIHRoZSBuZXcgbG9naWMgKGB1bnBhcmtfc2xhYnNgIHNwZWNpZmljYWxseSksIGJ1dCBhcmVuJ3QgdGhlbXNlbHZlcyBjb25zdGFudGx5IGhhbW1lcmVkLlxuXG5MZXQncyBzZWUuLi4gdGhlIGNvZGUgZmxvdy4gYGtmcmVlYCwgYGttZW1fY2FjaGVfZnJlZWAsIHRoZSBidWxrIGFsbG9jL2ZyZWUgZnVuY3Rpb25zLi4uIHRob3NlIGFyZSBhbGwgb3V0LiBUaGV5J3JlIGJhc2ljYWxseSB0aGUgZW5naW5lIHJvb20gb2YgbWVtb3J5IG1hbmFnZW1lbnQuIExpc3RpbmcgdGhlbSB3b3VsZCBiZSB1c2VsZXNzLiBUaGUgcHJvbXB0IGlzIHZlcnkgc3BlY2lmaWMgYWJvdXQgdGhhdCwgYW5kIEkgYWdyZWUsIHNrZXdpbmcgaXMgdGhlIGVuZW15IG9mIHVzZWZ1bCBmdXp6aW5nLlxuXG5IbW0sIHRoaW5raW5nLi4uIEkgcmVtZW1iZXIgc29tZSBsZXNzLWZyZXF1ZW50bHkgY2FsbGVkIGZ1bmN0aW9ucy4gTGV0IG1lIGNoZWNrLi4uIEFoLCBgX19rbWVtX2NhY2hlX3Nocmlua2AsIHRoYXQgY2FsbHMgYF9fa21lbV9jYWNoZV9kb19zaHJpbmtgLCB3aGljaCBoaXRzIGB1bnBhcmtfc2xhYnNgLiBUaGF0IGxvb2tzIHByb21pc2luZy4gYF9fa21lbV9jYWNoZV9lbXB0eWAgY2FsbHMgYGZyZWVfcGFydGlhbGAgd2hpY2gsIGFnYWluLCBjYWxscyBgdW5wYXJrX3NsYWJzYC4gQW5kIGBfX2ttZW1fY2FjaGVfc2h1dGRvd25gIGNhbGxzIGBmcmVlX3BhcnRpYWxgIGFzIHdlbGwuXG5cbk5vdywgYXJlIHRoZXNlIHRoZSByaWdodCBlbnRyeSBwb2ludHM/IEFyZSB0aGV5IG5vbi1zdGF0aWMgZnVuY3Rpb25zPyBMZXQgbWUgdmVyaWZ5OiBZdXAsIGBpbnQgX19rbWVtX2NhY2hlX3NocmluayhzdHJ1Y3Qga21lbV9jYWNoZSAqcylgLCB0aGF0J3MgZ29vZC4gQW5kIGBpbnQgX19rbWVtX2NhY2hlX3NodXRkb3duKHN0cnVjdCBrbWVtX2NhY2hlICpzKWAuIEFuZCBgYm9vbCBfX2ttZW1fY2FjaGVfZW1wdHkoc3RydWN0IGttZW1fY2FjaGUgKnMpYC4gRXhjZWxsZW50LiBUaGV5IGFyZSBub24tc3RhdGljIGFuZCB0aGV5J3JlIGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhlIGNvcmUgbG9naWMgb2YgdGhlIHBhdGNoLiBUaG9zZSBzZWVtIHRvIGJlIGlkZWFsIGNhbmRpZGF0ZXMsIGJlY2F1c2UgdGhleSdyZSBub3QgaG90IHBhdGhzLCBidXQgc3RpbGwgZXhlcmNpc2UgdGhlIG5ldyBjb2RlLlxuXG5SaWdodCwgbGV0J3MgbWFrZSBzdXJlIHRoYXQgdGhvc2UgYXJlIHRoZSByaWdodCBjYWxscy4gVGhlbiwgbGV0J3MgbW92ZSBvbiB0byBhY3R1YWxseSB2ZXJpZnlpbmcgdGhlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYzMDAsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTY6MDQ6NDAuODM2Nzc5ODgxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTcwNDQ4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKGludHxib29sKSBfX2ttZW1fY2FjaGVfKHNocmlua3xzaHV0ZG93bnxlbXB0eSlcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zbHViLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc2x1Yi5jPTgzMTc9c3RhdGljIHZvaWQgZnJlZV9wYXJ0aWFsKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlICpuKVxcbi0tXFxubW0vc2x1Yi5jLTgzNDEtXFxubW0vc2x1Yi5jOjgzNDI6Ym9vbCBfX2ttZW1fY2FjaGVfZW1wdHkoc3RydWN0IGttZW1fY2FjaGUgKnMpXFxubW0vc2x1Yi5jLTgzNDMte1xcbi0tXFxubW0vc2x1Yi5jLTgzNTUtICovXFxubW0vc2x1Yi5jOjgzNTY6aW50IF9fa21lbV9jYWNoZV9zaHV0ZG93bihzdHJ1Y3Qga21lbV9jYWNoZSAqcylcXG5tbS9zbHViLmMtODM1Ny17XFxuLS1cXG5tbS9zbHViLmM9ODU3Mz1zdGF0aWMgaW50IF9fa21lbV9jYWNoZV9kb19zaHJpbmsoc3RydWN0IGttZW1fY2FjaGUgKnMpXFxuLS1cXG5tbS9zbHViLmMtODY0NC1cXG5tbS9zbHViLmM6ODY0NTppbnQgX19rbWVtX2NhY2hlX3NocmluayhzdHJ1Y3Qga21lbV9jYWNoZSAqcylcXG5tbS9zbHViLmMtODY0Ni17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE2OjA0OjQwLjg4NjQ4OTMwN1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5ODEwNjc3MDk3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgS2VybmVsIE1lbW9yeSBNYW5hZ2VtZW50IEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgbGlzdCBvZiBub24tc3RhdGljIGZ1bmN0aW9ucyBhZ2Fpbi4gVGhlIGluaXRpYWwgcHJlbWlzZSBpcyBzb2xpZDsgeWVzLCB0aGUgZnVuY3Rpb25zIHdlJ3JlIGFmdGVyIGFyZSBnZW5lcmFsbHkgbm9uLXN0YXRpYy4gTm93LCBJJ20gdHJ5aW5nIHRvIHJlZmluZSB0aGUgbGlzdCBmb3IgcmVsZXZhbmNlIGFuZCB0aGlzIGlzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuIEkgdGhvdWdodCBhYm91dCBgdW5wYXJrX3dvcmtfZm5gLCBidXQgdGhhdCdzIGEgd29ya3F1ZXVlIGZ1bmN0aW9uIOKAkyBzdGF0aWMgYW5kIG5vdCBkaXJlY3RseSBjYWxsYWJsZS4gTm90IHJlbGV2YW50IGhlcmUsIHNvIGxldCdzIG1vdmUgb24uXG5cblRoZSBjb3JlIG9mIHRoZSBvYmplY3QgZGVhbGxvY2F0aW9uIHByb2Nlc3MgaXMgY2xlYXJseSB3aXRoaW4gYF9fc2xhYl9mcmVlYC4gSXQncyBjYWxsZWQgYnkgYGtmcmVlYCBhbmQgYGttZW1fY2FjaGVfZnJlZWAsIHR3byAqdmVyeSogaG90IHBhdGhzLiBXZSdyZSBleHBsaWNpdGx5IHRyeWluZyB0byBleGNsdWRlIHRoZXNlIHNpbmNlIHRoZXNlIGFyZSBiYXNpYyBmdW5jdGlvbnMsIGJ1dCBvbmVzIHRoYXQgYXJlIHNvIGNvbW1vbmx5IHVzZWQgYXMgdG8gbm90IGJlIHVzZWZ1bCBpbiB0aGlzIGNvbnRleHQuXG5cbkhtbSwgc28sIHdoYXQgZWxzZSBpcyBvdXQgdGhlcmUgdGhhdCBpcyAqbm90KiBzdGF0aWM/IExldCBtZSBzZWUuLi4gSSd2ZSBnb3QgaXQhIGBrbWVtX2NhY2hlX3Nocmlua2AsIHdoaWNoLCBjb252ZW5pZW50bHksIHdyYXBzIGBfX2ttZW1fY2FjaGVfc2hyaW5rYCwgaXMgYSBwcmltZSBjYW5kaWRhdGUuIEl0J3Mgbm90IGEgaG90IHBhdGgsIGJ1dCByZWxhdGVkIHRvIHRoZSBzbGFiIGFsbG9jYXRvci4gTGV0J3MgbWFrZSBzdXJlIGl0J3MgbG9jYXRlZCBpbiBgbW0vc2xhYl9jb21tb24uY2AgdG8gY29uZmlybSBpdCBmaXRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzQ5MSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNjowNjoxOC45OTMyNjMzNjlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NDU3NTU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5pbnQga21lbV9jYWNoZV9zaHJpbmtcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc2xhYl9jb21tb24uYz01OTg9RVhQT1JUX1NZTUJPTChrbWVtX2NhY2hlX2Rlc3Ryb3kpO1xcbi0tXFxubW0vc2xhYl9jb21tb24uYy02MDgtICovXFxubW0vc2xhYl9jb21tb24uYzo2MDk6aW50IGttZW1fY2FjaGVfc2hyaW5rKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXApXFxubW0vc2xhYl9jb21tb24uYy02MTAte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNjowNjoxOS4wNDI3MjQ5NjVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTMzNTUwNzc2NzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBDb2RlIENoYW5nZXMqKlxuXG5Pa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgYGttZW1fY2FjaGVfc2hyaW5rYCBpcyBpbiBgbW0vc2xhYl9jb21tb24uY2AsIGFuZCBgX19rbWVtX2NhY2hlX3Nocmlua2AgaXMgaW4gYG1tL3NsdWIuY2AuIEknbGwgYWxzbyBhZGQgYF9fa21lbV9jYWNoZV9zaHV0ZG93bmAgYW5kIGBfX2ttZW1fY2FjaGVfZW1wdHlgIHRvIHRoZSBsaXN0LCBhcyBJIGFtIHRyeWluZyB0byBsaXN0IGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoaXMgcHJvY2Vzcy5cblxuSG9sZCBvbiwgdGhlIHBhdGNoIHRvdWNoZXMgYGdldF9mcm9tX2FueV9wYXJ0aWFsYCBhbmQgYF9fcmVmaWxsX29iamVjdHNfYW55YCB0b28uIFRob3NlIGFyZSBpbnZvbHZlZCBpbiBhbGxvY2F0aW9uLCBhbmQgdGhhdCdzIGEgaG90IHBhdGguIE5vIG5lZWQgdG8gbGlzdCBhbGxvY2F0aW9uIGZ1bmN0aW9ucy5cblxuQXJlIHRoZXJlIGFueSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBoZXJlPyBHaXZlbiB0aGUgY2hhbmdlcyBhcmUgaW4gYG1tL3NsdWIuY2AsIGFuZCBTTFVCIGlzIHRoZSBkZWZhdWx0IHNsYWIgYWxsb2NhdG9yIG5vdywgaXQgc2VlbXMgdGhpcyBpcyBjb3JlIGxvZ2ljLiBCdXQgd2FpdCwgYENPTkZJR19TTFVCX1NUQVRTYCBpcyBtb2RpZmllZCB0byBhZGQgc3RhdHMsIGJ1dCB0aGUgY29yZSBsb2dpYyBpdHNlbGYgaXNuJ3QgZ2F0ZWQgYnkgdGhhdCBjb25maWcuIFNvLCBJIGRvbid0IG5lZWQgdG8gc3BlY2lmeSBgRW5hYmxlQ29uZmlnc2AgYXQgYWxsLlxuXG5JIHNob3VsZCBkb3VibGUtY2hlY2sgZm9yIG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zLiBga21lbV9jYWNoZV9mcmVlX2J1bGtgIGFuZCBga21lbV9jYWNoZV9hbGxvY19idWxrX25vcHJvZmAgYXJlIGFsc28gdXNlZCBkdXJpbmcgY2FjaGUgY2xlYW51cCwgYnV0IGFyZSBsZXNzIGNyaXRpY2FsIHRoYW4gYGtmcmVlYCwgdGhlIGhvdCBwYXRoLiBUaGVyZWZvcmUsIEkgd2lsbCBsaXN0IGBfX2ttZW1fY2FjaGVfc2hyaW5rYCwgYF9fa21lbV9jYWNoZV9zaHV0ZG93bmAsIGBfX2ttZW1fY2FjaGVfZW1wdHlgLlxuXG5BY3R1YWxseSwgc2luY2UgYF9fa21lbV9jYWNoZV9lbXB0eWAgYW5kIGBfX2ttZW1fY2FjaGVfc2h1dGRvd25gIGFyZSBjYWxsZWQgd2hlbiB0aGUgY2FjaGUgaXMgYmVpbmcgZGVzdHJveWVkLCBga21lbV9jYWNoZV9kZXN0cm95YCBpcyB0aGUgcHVibGljIEFQSS4gU28sIEkgdGhpbmsgYSBtb3JlIHVzZWZ1bCBsaXN0IGlzIGBrbWVtX2NhY2hlX2Rlc3Ryb3lgIGFuZCBga21lbV9jYWNoZV9zaHJpbmtgIGZvciB0aGlzIHBhcnRpY3VsYXIgY2FzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgwMzIsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTY6MDg6MzIuNTkzNTA0NDc1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTQ4NjU5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJedm9pZCBrbWVtX2NhY2hlX2Rlc3Ryb3lcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc2xhYl9jb21tb24uYz01Mjc9dm9pZCBzbGFiX2ttZW1fY2FjaGVfcmVsZWFzZShzdHJ1Y3Qga21lbV9jYWNoZSAqcylcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmMtNTMzLVxcbm1tL3NsYWJfY29tbW9uLmM6NTM0OnZvaWQga21lbV9jYWNoZV9kZXN0cm95KHN0cnVjdCBrbWVtX2NhY2hlICpzKVxcbm1tL3NsYWJfY29tbW9uLmMtNTM1LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTY6MDg6MzIuNjQyOTk3MTQxWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI0MDUxMjE4NDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFNMVUIgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kLCB5ZWFoLCBga21lbV9jYWNoZV9kZXN0cm95YCBhbmQgYGttZW1fY2FjaGVfc2hyaW5rYCBzZWVtIGxpa2Ugb2J2aW91cyBmdW5jdGlvbnMgdG8gZm9jdXMgb24gZm9yIGZ1enppbmcuIEdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZXMsIEknbGwgYWxzbyBhZGQgYF9fa21lbV9jYWNoZV9zaHJpbmtgLCBgX19rbWVtX2NhY2hlX3NodXRkb3duYCwgYW5kIGBfX2ttZW1fY2FjaGVfZW1wdHlgIHRvIHRoZSBsaXN0LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgY292ZXIgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eS5cblxuTGV0IG1lIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3Mgb2YgdGhpcyBwYXRjaOKApiByaWdodCwgaXQncyBhYm91dCBhZGRpbmcgYHBhcmtlZF9zbGFic2AgdG8gYHN0cnVjdCBrbWVtX2NhY2hlX25vZGVgLiBJdCBhbHNvIGFkZHMgYHVucGFya193b3JrYCwgd2hpY2ggaXMgc2NoZWR1bGVkIHdoZW4gYSBzbGFiIGdldHMgcGFya2VkLiBGcm9tIHdoYXQgSSBjYW4gc2VlLCBzbGFicyBhcmUgZ2V0dGluZyB1bnBhcmtlZCBpbiBgZ2V0X3BhcnRpYWxfbm9kZV9idWxrYCwgYGdldF9mcm9tX3BhcnRpYWxfbm9kZWAsIGBmcmVlX3BhcnRpYWxgLCBhbmQgYF9fa21lbV9jYWNoZV9kb19zaHJpbmtgLiBUaGVuLCBzbGFicyBhcmUgcGFya2VkIGluIGBfX3NsYWJfZnJlZWAgd2hlbiBgbGlzdF9sb2NrYCBpcyBjb250ZW5kZWQuXG5cblRoaXMgaXMgYSBwcmV0dHkgZnVuZGFtZW50YWwgc2hpZnQgaW4gaG93IHRoZSBTTFVCIGFsbG9jYXRvciBvcGVyYXRlcywgYW5kIHRoYXQgbWFrZXMgaXQgcHJpbWUgdGVycml0b3J5IGZvciBmdXp6aW5nLiBJIGRvbid0IHNlZSBhbnkgZGVwZW5kZW5jaWVzIG9uIHNwZWNpZmljIGtlcm5lbCBjb25maWdzLCBzbyB0aGF0J3MgZ29vZC4gU2luY2UgaXQgdG91Y2hlcyB0aGUgY29yZSBTTFVCIGxvZ2ljLCB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggbXkgdGltZS4gTXkgZm9jdXMgd2lsbCBiZSBvbiB0aG9zZSBzeW1ib2xzIEkgbWVudGlvbmVkOiBgX19rbWVtX2NhY2hlX3Nocmlua2AsIGBfX2ttZW1fY2FjaGVfc2h1dGRvd25gLCBgX19rbWVtX2NhY2hlX2VtcHR5YCwgYGttZW1fY2FjaGVfc2hyaW5rYCwgYW5kIGBrbWVtX2NhY2hlX2Rlc3Ryb3lgLlxuXG5BbHJpZ2h0LCBJJ20gY29uZmlkZW50IGluIG15IGFzc2Vzc21lbnQuIEknbGwgbWFrZSBzdXJlIHRvIGNhbGwgYHNldC1yZXN1bHRzYCBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4OTI5LCJPdXRwdXRUb2tlbnMiOjE1OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNjowODo1Ni42OTQyMTkwNTFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODEwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fa21lbV9jYWNoZV9zaHJpbmtcIixcbiAgICBcIl9fa21lbV9jYWNoZV9zaHV0ZG93blwiLFxuICAgIFwiX19rbWVtX2NhY2hlX2VtcHR5XCIsXG4gICAgXCJrbWVtX2NhY2hlX3Nocmlua1wiLFxuICAgIFwia21lbV9jYWNoZV9kZXN0cm95XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGxvY2tsZXNzIHBhcmtpbmcgbWVjaGFuaXNtIGZvciBzbGFicyBpbiB0aGUgU0xVQiBhbGxvY2F0b3IncyBmcmVlIHNsb3dwYXRoIHRvIHJlZHVjZSBsaXN0X2xvY2sgY29udGVudGlvbi4gVGhpcyBpcyBhIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhZmZlY3RzIHNsYWIgYWxsb2NhdGlvbiBhbmQgZnJlZWluZyBsb2dpYy4gSXQgaXMgcmVhY2hhYmxlIGJ5IGRlZmF1bHQgYW5kIHNob3VsZCBiZSBmdXp6ZWQuIFNpbmNlIGFsbG9jYXRpb24gYW5kIGZyZWVpbmcgYXJlIGhvdCBwYXRocywgd2UgZm9jdXMgb24gY2FjaGUgc2hyaW5raW5nIGFuZCBkZXN0cnVjdGlvbiBwYXRocyB3aGljaCBhbHNvIGludGVyYWN0IHdpdGggdGhlIG5ldyB1bnBhcmtpbmcgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19rbWVtX2NhY2hlX3Nocmlua1wiLFxuICAgIFwiX19rbWVtX2NhY2hlX3NodXRkb3duXCIsXG4gICAgXCJfX2ttZW1fY2FjaGVfZW1wdHlcIixcbiAgICBcImttZW1fY2FjaGVfc2hyaW5rXCIsXG4gICAgXCJrbWVtX2NhY2hlX2Rlc3Ryb3lcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbG9ja2xlc3MgcGFya2luZyBtZWNoYW5pc20gZm9yIHNsYWJzIGluIHRoZSBTTFVCIGFsbG9jYXRvcidzIGZyZWUgc2xvd3BhdGggdG8gcmVkdWNlIGxpc3RfbG9jayBjb250ZW50aW9uLiBUaGlzIGlzIGEgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFmZmVjdHMgc2xhYiBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIGxvZ2ljLiBJdCBpcyByZWFjaGFibGUgYnkgZGVmYXVsdCBhbmQgc2hvdWxkIGJlIGZ1enplZC4gU2luY2UgYWxsb2NhdGlvbiBhbmQgZnJlZWluZyBhcmUgaG90IHBhdGhzLCB3ZSBmb2N1cyBvbiBjYWNoZSBzaHJpbmtpbmcgYW5kIGRlc3RydWN0aW9uIHBhdGhzIHdoaWNoIGFsc28gaW50ZXJhY3Qgd2l0aCB0aGUgbmV3IHVucGFya2luZyBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTY6MDg6NTYuNjk0MjUxMjExWiIsIlNlcSI6MjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Mjc4MjAwNDE5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE2OjA4OjU2LjY5NDcwMzI1MVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo2Mjc4MTU0ODI2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGludGVybmFsIFNMVUIgYWxsb2NhdG9yIGxvZ2ljIHRvIGludHJvZHVjZSBhIGxvY2tsZXNzIFxcXCJwYXJraW5nXFxcIiBtZWNoYW5pc20gZm9yIHNsYWJzIHRvIHJlZHVjZSBsb2NrIGNvbnRlbnRpb24gb24gdGhlIG5vZGUncyBsaXN0X2xvY2suIEl0IGFkZHMgYW4gbGxpc3QgZm9yIHBhcmtlZCBzbGFicyBhbmQgZGVsYXllZCB3b3JrIHRvIHVucGFyayB0aGVtLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBpbnRlcm5hbCBtZW1vcnkgbWFuYWdlbWVudCBzdHJ1Y3R1cmVzIChzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlLCBzdHJ1Y3Qgc2xhYikgYW5kIGZyZWVsaXN0IG9wZXJhdGlvbnMuIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBtYW5pZmVzdCBhcyBsaXN0IGNvcnJ1cHRpb25zLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIG9yIGNvbmN1cnJlbmN5IGlzc3VlcyAocmFjZSBjb25kaXRpb25zKS4gVGhlc2UgdHlwZXMgb2YgYnVncyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4sIHNsdWJfZGVidWcsIGxpc3QgZGVidWdnaW5nLCBhbmQgTE9DS0RFUC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWx0ZXIgbWVtb3J5IGluaXRpYWxpemF0aW9uIG9yIGJvdW5kcyBjaGVja2luZyBpbiBhIHdheSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBjYXVzZSBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNWJiZThiZjIxMWZkNzBiZjJjYWEyOWViMzdmNzJkYjNkNjk2NDQ0NFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDI0IDE1OjQ3OjA1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vc2x1Yi5jIGIvbW0vc2x1Yi5jXG5pbmRleCBiMGNkMDU3MmUyZjI2Li4yN2E3OGQ2M2Y1Mzc2IDEwMDY0NFxuLS0tIGEvbW0vc2x1Yi5jXG4rKysgYi9tbS9zbHViLmNcbkBAIC00OSw2ICs0OSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc29ydC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaXJxX3dvcmsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2twcm9iZXMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xsaXN0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWJ1Z2ZzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N0cmFjZS9ldmVudHMva21lbS5oXHUwMDNlXG4gXG5AQCAtMTIyLDYgKzEyMyw4IEBAXG4gICogICAoTm90ZSB0aGF0IHRoZSB0b3RhbCBudW1iZXIgb2Ygc2xhYnMgaXMgYW4gYXRvbWljIHZhbHVlIHRoYXQgbWF5IGJlXG4gICogICBtb2RpZmllZCB3aXRob3V0IHRha2luZyB0aGUgbGlzdCBsb2NrKS5cbiAgKlxuKyAqICAgU2xhYnMgbWF5IGJlIHB1c2hlZCB0byBub2RlLVx1MDAzZXBhcmtlZF9zbGFicyB3aXRob3V0IGFjcXVpcmluZyBsaXN0X2xvY2suXG4rICpcbiAgKiAgIFRoZSBsaXN0X2xvY2sgaXMgYSBjZW50cmFsaXplZCBsb2NrIGFuZCB0aHVzIHdlIGF2b2lkIHRha2luZyBpdCBhc1xuICAqICAgbXVjaCBhcyBwb3NzaWJsZS4gQXMgbG9uZyBhcyBTTFVCIGRvZXMgbm90IGhhdmUgdG8gaGFuZGxlIHBhcnRpYWxcbiAgKiAgIHNsYWJzLCBvcGVyYXRpb25zIGNhbiBjb250aW51ZSB3aXRob3V0IGFueSBjZW50cmFsaXplZCBsb2NrLlxuQEAgLTM2OCw2ICszNzEsOSBAQCBlbnVtIHN0YXRfaXRlbSB7XG4gXHRGUkVFX1NMT1dQQVRILFx0XHQvKiBGcmVlIHRvIGEgc2xhYiAqL1xuIFx0RlJFRV9BRERfUEFSVElBTCxcdC8qIEZyZWVpbmcgbW92ZXMgc2xhYiB0byBwYXJ0aWFsIGxpc3QgKi9cbiBcdEZSRUVfUkVNT1ZFX1BBUlRJQUwsXHQvKiBGcmVlaW5nIHJlbW92ZXMgbGFzdCBvYmplY3QgKi9cbitcdFBBUktfU0xBQixcdFx0LyogU2xhYnMgcGFya2VkIG9udG8gdGhlIGxsaXN0IGJ5IGZyZWUgc2xvd3BhdGggKi9cbitcdFVOUEFSS19TTEFCLFx0XHQvKiBTbGFicyB1bnBhcmtlZCBmcm9tIHRoZSBsbGlzdCAqL1xuK1x0VU5QQVJLX0VWRU5ULFx0XHQvKiBVbnBhcmsgZXZlbnRzICovXG4gXHRBTExPQ19TTEFCLFx0XHQvKiBOZXcgc2xhYiBhY3F1aXJlZCBmcm9tIHBhZ2UgYWxsb2NhdG9yICovXG4gXHRBTExPQ19OT0RFX01JU01BVENILFx0LyogUmVxdWVzdGVkIG5vZGUgZGlmZmVyZW50IGZyb20gY3B1IHNoZWFmICovXG4gXHRGUkVFX1NMQUIsXHRcdC8qIFNsYWIgZnJlZWQgdG8gdGhlIHBhZ2UgYWxsb2NhdG9yICovXG5AQCAtNDYyLDYgKzQ2OCwxNCBAQCBzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlIHtcbiBcdGF0b21pY19sb25nX3QgdG90YWxfb2JqZWN0cztcbiBcdHN0cnVjdCBsaXN0X2hlYWQgZnVsbDtcbiAjZW5kaWZcbitcdC8qXG4rXHQgKiBJZiBuZWl0aGVyIHNoZWFmIHJlZmlsbCBub3IgdGhlIGFsbG9jIHNsb3dwYXRoIHBlcmZvcm1zIHRoZSB1bnBhcmssXG4rXHQgKiB1bnBhcmtfd29ya19mbiB0YWtlcyBjYXJlIG9mIGl0LlxuK1x0ICovXG4rXHRzdHJ1Y3QgZGVsYXllZF93b3JrIHVucGFya193b3JrO1xuK1xuK1x0LyogVXNlZCB0byBsaW5rIHBhcmtlZCBzbGFicyAqL1xuK1x0c3RydWN0IGxsaXN0X2hlYWQgcGFya2VkX3NsYWJzIF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7XG4gfTtcbiBcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBrbWVtX2NhY2hlX25vZGUgKmdldF9ub2RlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBpbnQgbm9kZSlcbkBAIC01MDksNiArNTIzLDEyIEBAIHN0YXRpYyBub2RlbWFza190IHNsYWJfYmFybl9ub2RlcztcbiAgKi9cbiBzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmZsdXNod3E7XG4gXG4rLypcbisgKiBDZWlsaW5nIG9uIGhvdyBsb25nIHNsYWJzIHN0YXkgcGFya2VkIHdoZW4gbm8gc2hlYWYgcmVmaWxsIG9yIGFsbG9jXG4rICogc2xvd3BhdGggdW5wYXJrcyB0aGVtLlxuKyAqL1xuKyNkZWZpbmUgVU5QQVJLX0RFTEFZXHQoSFopXG4rXG4gc3RydWN0IHNsdWJfZmx1c2hfd29yayB7XG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yaztcbiBcdHN0cnVjdCBrbWVtX2NhY2hlICpzO1xuQEAgLTM2MjMsNiArMzY0MywxMjIgQEAgc3RhdGljIGlubGluZSB2b2lkIHJlbW92ZV9wYXJ0aWFsKHN0cnVjdCBrbWVtX2NhY2hlX25vZGUgKm4sXG4gXHRjbGVhcl9ub2RlX3BhcnRpYWxfc3RhdGUobiwgc2xhYik7XG4gfVxuIFxuKy8qXG4rICogQSBzbGFiIHBhcmtlZCBvbiBuLVx1MDAzZXBhcmtlZF9zbGFicyBpcyBub3Qgb24gcGFydGlhbCBsaXN0LCBzbyBpdHMgc2xhYl9saXN0IGlzXG4rICogZnJlZSBhbmQgd2UgcmV1c2UgaXQgYXMgdGhlIGxsaXN0X25vZGUuXG4rICovXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgbGxpc3Rfbm9kZSAqc2xhYl90b19wYXJrZWRfbGxub2RlKHN0cnVjdCBzbGFiICpzbGFiKVxuK3tcbitcdHJldHVybiAoc3RydWN0IGxsaXN0X25vZGUgKilcdTAwMjZzbGFiLVx1MDAzZXNsYWJfbGlzdDtcbit9XG4rXG4rc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2xhYiAqcGFya2VkX2xsbm9kZV90b19zbGFiKHN0cnVjdCBsbGlzdF9ub2RlICpub2RlKVxuK3tcbitcdHJldHVybiBjb250YWluZXJfb2YoKHN0cnVjdCBsaXN0X2hlYWQgKilub2RlLCBzdHJ1Y3Qgc2xhYiwgc2xhYl9saXN0KTtcbit9XG4rXG4rLypcbisgKiBNb3ZlIHNsYWJzIHBhcmtlZCBvbiBuLVx1MDAzZXBhcmtlZF9zbGFicyB0byBuLVx1MDAzZXBhcnRpYWwuIENhbGxlZCB3aXRoIHRoZVxuKyAqIGxpc3RfbG9jayBoZWxkLCBieSB0aGUgcGF0aHMgdGhhdCBjb25zdW1lIHRoZSBwYXJ0aWFsIGxpc3QsIG9uIGJlaGFsZiBvZiB0aGVcbisgKiBjcHVzIHRoYXQgY291bGQgbm90IGdldCB0aGUgbG9jayB3aGVuIHBhcmtpbmcuXG4rICpcbisgKiBJZiBAZGlzY2FyZCBpcyBub3QgTlVMTCwgcHV0IGVtcHR5IHNsYWJzIGJleW9uZCBtaW5fcGFydGlhbCBvbiBAZGlzY2FyZCwgdGhlXG4rICogY2FsbGVyIHNob3VsZCBjYWxsIGRpc2NhcmRfc2xhYigpIGFmdGVyIGRyb3BwaW5nIHRoZSBsb2NrLiAgQ2FsbGVycyB0aGF0IG1heVxuKyAqIG5vdCBmcmVlIHBhZ2VzIGluIHRoZWlyIGNvbnRleHQgc2hvdWxkIHBhc3MgTlVMTC5cbisgKi9cbitzdGF0aWMgdm9pZCB1bnBhcmtfc2xhYnMoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBrbWVtX2NhY2hlX25vZGUgKm4sXG4rXHRcdFx0IHN0cnVjdCBsaXN0X2hlYWQgKmRpc2NhcmQpXG4re1xuK1x0c3RydWN0IGxsaXN0X25vZGUgKnBvcywgKm5leHQ7XG4rXHR1bnNpZ25lZCBsb25nIGFkZGVkID0gMCwgZGlzY2FyZGVkID0gMDtcbitcdHVuc2lnbmVkIGxvbmcgaGVhZHJvb20gPSAwO1xuK1x0TElTVF9IRUFEKHRvX2FkZCk7XG4rXG4rXHRzbGFiX2xvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2bi1cdTAwM2VsaXN0X2xvY2spO1xuK1xuK1x0cG9zID0gbGxpc3RfZGVsX2FsbChcdTAwMjZuLVx1MDAzZXBhcmtlZF9zbGFicyk7XG4rXHRpZiAobGlrZWx5KCFwb3MpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHQvKlxuK1x0ICogQ2FsY3VsYXRlIGhvdyBtYW55IG1vcmUgc2xhYnMgdGhlIHBhcnRpYWwgbGlzdCB3YW50cyBiZWZvcmUgaXQgaGFzXG4rXHQgKiByZWFjaGVkIG1pbl9wYXJ0aWFsLlxuK1x0ICovXG4rXHRpZiAocy1cdTAwM2VtaW5fcGFydGlhbCBcdTAwM2Ugbi1cdTAwM2Vucl9wYXJ0aWFsKVxuK1x0XHRoZWFkcm9vbSA9IHMtXHUwMDNlbWluX3BhcnRpYWwgLSBuLVx1MDAzZW5yX3BhcnRpYWw7XG4rXG4rXHRmb3IgKDsgcG9zOyBwb3MgPSBuZXh0KSB7XG4rXHRcdHN0cnVjdCBzbGFiICpzbGFiID0gcGFya2VkX2xsbm9kZV90b19zbGFiKHBvcyk7XG4rXHRcdHN0cnVjdCBmcmVlbGlzdF9jb3VudGVycyBmbGM7XG4rXG4rXHRcdC8qXG4rXHRcdCAqIEJhY2sgdXAgdGhlIHBvaW50ZXIsIGJlY2F1c2UgdGhlIGxpc3RfYWRkX3RhaWwoKSBiZWxvd1xuK1x0XHQgKiBvdmVyd3JpdGVzIHRoZSBsbGlzdCBsaW5rYWdlLlxuK1x0XHQgKi9cbitcdFx0bmV4dCA9IHBvcy1cdTAwM2VuZXh0O1xuK1xuK1x0XHRpZiAoZGlzY2FyZCkge1xuK1x0XHRcdGZsYy5jb3VudGVycyA9IGRhdGFfcmFjZShSRUFEX09OQ0Uoc2xhYi1cdTAwM2Vjb3VudGVycykpO1xuK1x0XHRcdGlmICghZmxjLmludXNlIFx1MDAyNlx1MDAyNiBhZGRlZCBcdTAwM2U9IGhlYWRyb29tKSB7XG4rXHRcdFx0XHRsaXN0X2FkZF90YWlsKFx1MDAyNnNsYWItXHUwMDNlc2xhYl9saXN0LCBkaXNjYXJkKTtcbitcdFx0XHRcdGRpc2NhcmRlZCsrO1xuK1x0XHRcdFx0Y29udGludWU7XG4rXHRcdFx0fVxuK1x0XHR9XG4rXG4rXHRcdHNsYWJfc2V0X25vZGVfcGFydGlhbChzbGFiKTtcbitcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZzbGFiLVx1MDAzZXNsYWJfbGlzdCwgXHUwMDI2dG9fYWRkKTtcbitcdFx0YWRkZWQrKztcbitcdH1cbitcbitcdG4tXHUwMDNlbnJfcGFydGlhbCArPSBhZGRlZDtcbitcdGxpc3Rfc3BsaWNlX3RhaWwoXHUwMDI2dG9fYWRkLCBcdTAwMjZuLVx1MDAzZXBhcnRpYWwpO1xuK1xuK1x0c3RhdF9hZGQocywgRlJFRV9BRERfUEFSVElBTCwgYWRkZWQpO1xuK1x0c3RhdF9hZGQocywgVU5QQVJLX1NMQUIsIGFkZGVkICsgZGlzY2FyZGVkKTtcbitcdGlmICh1bmxpa2VseShkaXNjYXJkZWQpKVxuK1x0XHRzdGF0X2FkZChzLCBGUkVFX1NMQUIsIGRpc2NhcmRlZCk7XG4rXHRzdGF0KHMsIFVOUEFSS19FVkVOVCk7XG4rfVxuK1xuKy8qXG4rICogUGFya2VkIHNsYWJzIGFyZSBub3JtYWxseSB1bnBhcmtlZCBieSBzaGVhZiByZWZpbGwgb3IgdGhlIGFsbG9jIHNsb3dwYXRoLCBidXRcbisgKiB3aGVuIHRoZSBzeXN0ZW0gZXhwZXJpZW5jZXMgYSBoZWF2eSBidXJzdCBvZiBmcmVlcywgYWJydXB0bHkgZ29lcyBpZGxlLFxuKyAqIGFuZCBuZWl0aGVyIHNoZWFmIHJlZmlsbCBub3IgdGhlIGFsbG9jIHNsb3dwYXRoIGlzIHJlYWNoZWQsXG4rICogc29tZSBwYXJrZWQgc2xhYnMgbWF5IGJlIGxlZnQgc3RyYW5kZWQgaW4gdGhlIHBhcmtlZCBsbGlzdC4gVGhpcyBmdW5jdGlvblxuKyAqIHNlcnZlcyBhcyBhIGxhc3QtcmVzb3J0IGZhbGxiYWNrLlxuKyAqIFRoaXMgd29yayBpcyBzY2hlZHVsZWQgYnkgdGhlIGxsaXN0X2FkZCgpIHRoYXQgbWFrZXMgdGhlIHBhcmtlZCBsbGlzdCBub24tZW1wdHkuXG4rICovXG4rc3RhdGljIHZvaWQgdW5wYXJrX3dvcmtfZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuK3tcbitcdHN0cnVjdCBrbWVtX2NhY2hlX25vZGUgKm4gPSBjb250YWluZXJfb2YodG9fZGVsYXllZF93b3JrKHdvcmspLFxuK1x0XHRcdFx0XHRcdCBzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlLFxuK1x0XHRcdFx0XHRcdCB1bnBhcmtfd29yayk7XG4rXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqZmlyc3Q7XG4rXHRzdHJ1Y3Qga21lbV9jYWNoZSAqcztcbitcdHN0cnVjdCBzbGFiICpzbGFiLCAqdDtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXHRMSVNUX0hFQUQoZGlzY2FyZCk7XG4rXG4rXHRpZiAobGlrZWx5KGxsaXN0X2VtcHR5KFx1MDAyNm4tXHUwMDNlcGFya2VkX3NsYWJzKSkpXG4rXHRcdHJldHVybjtcbitcbitcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNm4tXHUwMDNlbGlzdF9sb2NrLCBmbGFncyk7XG4rXG4rXHRmaXJzdCA9IFJFQURfT05DRShuLVx1MDAzZXBhcmtlZF9zbGFicy5maXJzdCk7XG4rXHRpZiAodW5saWtlbHkoIWZpcnN0KSkge1xuK1x0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNm4tXHUwMDNlbGlzdF9sb2NrLCBmbGFncyk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcdHMgPSBwYXJrZWRfbGxub2RlX3RvX3NsYWIoZmlyc3QpLVx1MDAzZXNsYWJfY2FjaGU7XG4rXG4rXHR1bnBhcmtfc2xhYnMocywgbiwgXHUwMDI2ZGlzY2FyZCk7XG4rXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNm4tXHUwMDNlbGlzdF9sb2NrLCBmbGFncyk7XG4rXG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2xhYiwgdCwgXHUwMDI2ZGlzY2FyZCwgc2xhYl9saXN0KVxuK1x0XHRkaXNjYXJkX3NsYWIocywgc2xhYik7XG4rfVxuK1xuIC8qXG4gICogQ2FsbGVkIG9ubHkgZm9yIGttZW1fY2FjaGVfZGVidWcoKSBjYWNoZXMgaW5zdGVhZCBvZiByZW1vdmVfcGFydGlhbCgpLCB3aXRoIGFcbiAgKiBzbGFiIGZyb20gdGhlIG4tXHUwMDNlcGFydGlhbCBsaXN0LiBSZW1vdmUgb25seSBhIHNpbmdsZSBvYmplY3QgZnJvbSB0aGUgc2xhYiwgZG9cbkBAIC0zODE4LDkgKzM5NTQsMTMgQEAgc3RhdGljIGJvb2wgZ2V0X3BhcnRpYWxfbm9kZV9idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLFxuIFx0c3RydWN0IHNsYWIgKmZpcnN0ID0gTlVMTCwgKmxhc3QgPSBOVUxMO1xuIFx0dW5zaWduZWQgaW50IHRvdGFsX2ZyZWUgPSAwO1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbitcdExJU1RfSEVBRChkaXNjYXJkKTtcbiBcbi1cdC8qIFJhY3kgY2hlY2sgdG8gYXZvaWQgdGFraW5nIHRoZSBsb2NrIHVubmVjZXNzYXJpbHkuICovXG4tXHRpZiAoIW4gfHwgZGF0YV9yYWNlKCFuLVx1MDAzZW5yX3BhcnRpYWwpKVxuK1x0LypcbitcdCAqIFJhY3kgY2hlY2sgdG8gYXZvaWQgdGFraW5nIHRoZSBsb2NrIHVubmVjZXNzYXJpbHkuXG4rXHQgKiBUaGUgcGFya2VkX3NsYWJzIGxsaXN0IG11c3QgYWxzbyBiZSBhY2NvdW50ZWQgZm9yLlxuK1x0ICovXG4rXHRpZiAoIW4gfHwgKCFkYXRhX3JhY2Uobi1cdTAwM2Vucl9wYXJ0aWFsKSBcdTAwMjZcdTAwMjYgbGxpc3RfZW1wdHkoXHUwMDI2bi1cdTAwM2VwYXJrZWRfc2xhYnMpKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2cGMtXHUwMDNlc2xhYnMpO1xuQEAgLTM4MzAsNiArMzk3MCw5IEBAIHN0YXRpYyBib29sIGdldF9wYXJ0aWFsX25vZGVfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbiBcdGVsc2UgaWYgKCFzcGluX3RyeWxvY2tfaXJxc2F2ZShcdTAwMjZuLVx1MDAzZWxpc3RfbG9jaywgZmxhZ3MpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4rXHQvKiBJZiB0aGVyZSBhcmUgcGFya2VkIHNsYWJzLCBtb3ZlIHRoZW0gdG8gdGhlIHBhcnRpYWwgbGlzdCBmaXJzdC4gKi9cbitcdHVucGFya19zbGFicyhzLCBuLCBhbGxvd19zcGluID8gXHUwMDI2ZGlzY2FyZCA6IE5VTEwpO1xuK1xuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNsYWIsIHNsYWIyLCBcdTAwMjZuLVx1MDAzZXBhcnRpYWwsIHNsYWJfbGlzdCkge1xuIFx0XHRzdHJ1Y3QgZnJlZWxpc3RfY291bnRlcnMgZmxjO1xuIFx0XHR1bnNpZ25lZCBpbnQgc2xhYl9mcmVlO1xuQEAgLTM4NzQsNiArNDAxNywxMCBAQCBzdGF0aWMgYm9vbCBnZXRfcGFydGlhbF9ub2RlX2J1bGsoc3RydWN0IGttZW1fY2FjaGUgKnMsXG4gXHRcdFx0XHQgICAgXHUwMDI2bGFzdC1cdTAwM2VzbGFiX2xpc3QpO1xuIFxuIFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZuLVx1MDAzZWxpc3RfbG9jaywgZmxhZ3MpO1xuK1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNsYWIsIHNsYWIyLCBcdTAwMjZkaXNjYXJkLCBzbGFiX2xpc3QpXG4rXHRcdGRpc2NhcmRfc2xhYihzLCBzbGFiKTtcbitcbiBcdHJldHVybiB0b3RhbF9mcmVlIFx1MDAzZSAwO1xuIH1cbiBcbkBAIC0zODg1LDIzICs0MDMyLDI5IEBAIHN0YXRpYyB2b2lkICpnZXRfZnJvbV9wYXJ0aWFsX25vZGUoc3RydWN0IGttZW1fY2FjaGUgKnMsXG4gXHRcdFx0XHQgICBnZnBfdCBnZnBfZmxhZ3MsXG4gXHRcdFx0XHQgICBjb25zdCBzdHJ1Y3Qgc2xhYl9hbGxvY19jb250ZXh0ICphYylcbiB7XG4rXHRib29sIGFsbG93X3NwaW4gPSBhbGxvY19mbGFnc19hbGxvd19zcGlubmluZyhhYy1cdTAwM2VhbGxvY19mbGFncyk7XG4gXHRzdHJ1Y3Qgc2xhYiAqc2xhYiwgKnNsYWIyO1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdHZvaWQgKm9iamVjdCA9IE5VTEw7XG4rXHRMSVNUX0hFQUQoZGlzY2FyZCk7XG4gXG4gXHQvKlxuIFx0ICogUmFjeSBjaGVjay4gSWYgd2UgbWlzdGFrZW5seSBzZWUgbm8gcGFydGlhbCBzbGFicyB0aGVuIHdlXG4gXHQgKiBqdXN0IGFsbG9jYXRlIGFuIGVtcHR5IHNsYWIuIElmIHdlIG1pc3Rha2VubHkgdHJ5IHRvIGdldCBhXG4gXHQgKiBwYXJ0aWFsIHNsYWIgYW5kIHRoZXJlIGlzIG5vbmUgYXZhaWxhYmxlIHRoZW4gZ2V0X2Zyb21fcGFydGlhbCgpXG4tXHQgKiB3aWxsIHJldHVybiBOVUxMLlxuK1x0ICogd2lsbCByZXR1cm4gTlVMTC4gQWxzbyB0YWtlIHRoZSBwYXJrZWRfc2xhYnMgbGxpc3QgaW50byBhY2NvdW50LlxuIFx0ICovXG4tXHRpZiAoIW4gfHwgIW4tXHUwMDNlbnJfcGFydGlhbClcbitcdGlmICghbiB8fCAoIWRhdGFfcmFjZShuLVx1MDAzZW5yX3BhcnRpYWwpIFx1MDAyNlx1MDAyNiBsbGlzdF9lbXB0eShcdTAwMjZuLVx1MDAzZXBhcmtlZF9zbGFicykpKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbi1cdGlmIChhbGxvY19mbGFnc19hbGxvd19zcGlubmluZyhhYy1cdTAwM2VhbGxvY19mbGFncykpXG4rXHRpZiAoYWxsb3dfc3BpbilcbiBcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2bi1cdTAwM2VsaXN0X2xvY2ssIGZsYWdzKTtcbiBcdGVsc2UgaWYgKCFzcGluX3RyeWxvY2tfaXJxc2F2ZShcdTAwMjZuLVx1MDAzZWxpc3RfbG9jaywgZmxhZ3MpKVxuIFx0XHRyZXR1cm4gTlVMTDtcbitcbitcdC8qIElmIHRoZXJlIGFyZSBwYXJrZWQgc2xhYnMsIG1vdmUgdGhlbSB0byB0aGUgcGFydGlhbCBsaXN0IGZpcnN0LiAqL1xuK1x0dW5wYXJrX3NsYWJzKHMsIG4sIGFsbG93X3NwaW4gPyBcdTAwMjZkaXNjYXJkIDogTlVMTCk7XG4rXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2xhYiwgc2xhYjIsIFx1MDAyNm4tXHUwMDNlcGFydGlhbCwgc2xhYl9saXN0KSB7XG4gXG4gXHRcdHN0cnVjdCBmcmVlbGlzdF9jb3VudGVycyBvbGQsIG5ldztcbkBAIC0zOTM5LDYgKzQwOTIsMTAgQEAgc3RhdGljIHZvaWQgKmdldF9mcm9tX3BhcnRpYWxfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbiBcdFx0YnJlYWs7XG4gXHR9XG4gXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNm4tXHUwMDNlbGlzdF9sb2NrLCBmbGFncyk7XG4rXG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2xhYiwgc2xhYjIsIFx1MDAyNmRpc2NhcmQsIHNsYWJfbGlzdClcbitcdFx0ZGlzY2FyZF9zbGFiKHMsIHNsYWIpO1xuK1xuIFx0cmV0dXJuIG9iamVjdDtcbiB9XG4gXG5AQCAtMzk5NCw4ICs0MTUxLDEzIEBAIHN0YXRpYyB2b2lkICpnZXRfZnJvbV9hbnlfcGFydGlhbChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwX2ZsYWdzLFxuIFxuIFx0XHRcdG4gPSBnZXRfbm9kZShzLCB6b25lX3RvX25pZCh6b25lKSk7XG4gXG4rXHRcdFx0LypcbitcdFx0XHQgKiBQYXJrZWQgc2xhYnMgbWFrZSB0aGUgbm9kZSB3b3J0aCB2aXNpdGluZyBldmVuIGlmXG4rXHRcdFx0ICogbnJfcGFydGlhbCBsb29rcyBsb3cuXG4rXHRcdFx0ICovXG4gXHRcdFx0aWYgKG4gXHUwMDI2XHUwMDI2IGNwdXNldF96b25lX2FsbG93ZWQoem9uZSwgZ2ZwX2ZsYWdzKSBcdTAwMjZcdTAwMjZcbi1cdFx0XHRcdFx0bi1cdTAwM2Vucl9wYXJ0aWFsIFx1MDAzZSBzLVx1MDAzZW1pbl9wYXJ0aWFsKSB7XG4rXHRcdFx0XHRcdChuLVx1MDAzZW5yX3BhcnRpYWwgXHUwMDNlIHMtXHUwMDNlbWluX3BhcnRpYWwgfHxcbitcdFx0XHRcdFx0ICFsbGlzdF9lbXB0eShcdTAwMjZuLVx1MDAzZXBhcmtlZF9zbGFicykpKSB7XG4gXG4gXHRcdFx0XHR2b2lkICpvYmplY3QgPSBnZXRfZnJvbV9wYXJ0aWFsX25vZGUocywgbixcbiBcdFx0XHRcdFx0XHRcdFx0Z2ZwX2ZsYWdzLCBhYyk7XG5AQCAtNTcxOSw3ICs1ODgxLDcgQEAgc3RhdGljIHZvaWQgX19zbGFiX2ZyZWUoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLFxuIFx0XHRcdHVuc2lnbmVkIGxvbmcgYWRkcilcbiBcbiB7XG4tXHRib29sIHdhc19mdWxsO1xuK1x0Ym9vbCB3YXNfZnVsbCwgcGFyayA9IGZhbHNlO1xuIFx0c3RydWN0IGZyZWVsaXN0X2NvdW50ZXJzIG9sZCwgbmV3O1xuIFx0c3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbiA9IE5VTEw7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuQEAgLTU3MzEsMTAgKzU4OTMsMTEgQEAgc3RhdGljIHZvaWQgX19zbGFiX2ZyZWUoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLFxuIFx0fVxuIFxuIFx0ZG8ge1xuLVx0XHRpZiAodW5saWtlbHkobikpIHtcbitcdFx0aWYgKHVubGlrZWx5KG4gXHUwMDI2XHUwMDI2ICFwYXJrKSlcbiBcdFx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNm4tXHUwMDNlbGlzdF9sb2NrLCBmbGFncyk7XG4tXHRcdFx0biA9IE5VTEw7XG4tXHRcdH1cbitcbitcdFx0cGFyayA9IGZhbHNlO1xuK1x0XHRuID0gTlVMTDtcbiBcbiBcdFx0b2xkLmZyZWVsaXN0ID0gc2xhYi1cdTAwM2VmcmVlbGlzdDtcbiBcdFx0b2xkLmNvdW50ZXJzID0gc2xhYi1cdTAwM2Vjb3VudGVycztcbkBAIC01NzQ4LDc2ICs1OTExLDExNCBAQCBzdGF0aWMgdm9pZCBfX3NsYWJfZnJlZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsXG4gXHRcdG5ldy5pbnVzZSAtPSBjbnQ7XG4gXG4gXHRcdC8qXG4tXHRcdCAqIE1pZ2h0IG5lZWQgdG8gYmUgdGFrZW4gb2ZmIChkdWUgdG8gYmVjb21pbmcgZW1wdHkpIG9yIGFkZGVkXG4tXHRcdCAqIHRvIChkdWUgdG8gbm90IGJlaW5nIGZ1bGwgYW55bW9yZSkgdGhlIHBhcnRpYWwgbGlzdC5cbi1cdFx0ICogVW5sZXNzIGl0J3MgZnJvemVuLlxuK1x0XHQgKiBwYXJ0aWFsLVx1MDAzZXBhcnRpYWw6IHRoZSBzbGFiIHdhcyBvbiB0aGUgbm9kZSBwYXJ0aWFsIGxpc3QgYW5kXG4rXHRcdCAqIHdpbGwgc3RpbGwgc3RheSB0aGVyZSwgc28gd2UgbmVlZCBubyBsaXN0IGhhbmRsaW5nIGFuZCBub1xuK1x0XHQgKiBsaXN0X2xvY2suXG4rXHRcdCAqXG4rXHRcdCAqIE5vdGUgdGhhdCBcImNvbnRpbnVlO1wiIGluIGEgZG8td2hpbGUgZ29lcyBvbiB0byBldmFsdWF0ZSB0aGVcbitcdFx0ICogY29uZGl0aW9uIGJlbG93LCBzbyB3ZSBkbyBwZXJmb3JtIHRoZSBmcmVlbGlzdCB1cGRhdGUuXG4gXHRcdCAqL1xuLVx0XHRpZiAoIW5ldy5pbnVzZSB8fCB3YXNfZnVsbCkge1xuK1x0XHRpZiAoIXdhc19mdWxsIFx1MDAyNlx1MDAyNiBuZXcuaW51c2UpXG4rXHRcdFx0Y29udGludWU7XG4gXG4tXHRcdFx0biA9IGdldF9ub2RlKHMsIHNsYWJfbmlkKHNsYWIpKTtcbitcdFx0LypcbitcdFx0ICogVGhlIHNsYWIgbWlnaHQgbmVlZCB0byBiZSB0YWtlbiBvZmYgKGR1ZSB0byBiZWNvbWluZyBlbXB0eSlcbitcdFx0ICogb3IgYWRkZWQgdG8gKGR1ZSB0byBub3QgYmVpbmcgZnVsbCBhbnltb3JlKSB0aGUgcGFydGlhbFxuK1x0XHQgKiBsaXN0LlxuK1x0XHQgKlxuK1x0XHQgKiBGb3IgdGhlIGZ1bGwgLVx1MDAzZSBwYXJ0aWFsL2VtcHR5IHRyYW5zaXRpb24sIHVzZVxuK1x0XHQgKiBzcGluX3RyeWxvY2tfaXJxc2F2ZSgpIGFuZCB0aGUgcGFya2luZyBtZWNoYW5pc20gdG8gcmVkdWNlXG4rXHRcdCAqIGxvY2sgY29udGVudGlvbi5cbitcdFx0ICpcbitcdFx0ICogSWYgdGhlIGNtcHhjaGcgZG9lcyBub3Qgc3VjY2VlZCB0aGVuIHdlIHdpbGwgcmV0cnkuXG4rXHRcdCAqL1xuK1x0XHRuID0gZ2V0X25vZGUocywgc2xhYl9uaWQoc2xhYikpO1xuK1xuK1x0XHRpZiAoIXdhc19mdWxsKSB7XG4gXHRcdFx0Lypcbi1cdFx0XHQgKiBTcGVjdWxhdGl2ZWx5IGFjcXVpcmUgdGhlIGxpc3RfbG9jay5cbi1cdFx0XHQgKiBJZiB0aGUgY21weGNoZyBkb2VzIG5vdCBzdWNjZWVkIHRoZW4gd2UgbWF5XG4tXHRcdFx0ICogZHJvcCB0aGUgbGlzdF9sb2NrIHdpdGhvdXQgYW55IHByb2Nlc3NpbmcuXG4tXHRcdFx0ICpcbi1cdFx0XHQgKiBPdGhlcndpc2UgdGhlIGxpc3RfbG9jayB3aWxsIHN5bmNocm9uaXplIHdpdGhcbi1cdFx0XHQgKiBvdGhlciBwcm9jZXNzb3JzIHVwZGF0aW5nIHRoZSBsaXN0IG9mIHNsYWJzLlxuK1x0XHRcdCAqIHBhcnRpYWwtXHUwMDNlZW1wdHk6IHNwZWN1bGF0aXZlbHkgYWNxdWlyZSBsaXN0X2xvY2tcbitcdFx0XHQgKiBwcmlvciB0byBjbXB4Y2hnKCksIGFzIHBlcmZvcm1pbmcgY21weGNoZygpIGJlZm9yZVxuK1x0XHRcdCAqIGxvY2sgYWNxdWlzaXRpb24gcmFjZXMgd2l0aCBjb25jdXJyZW50IG9wZXJhdGlvbnNcbitcdFx0XHQgKiAoZS5nLiwgdGhlIHNocmlua2VyKS5cbiBcdFx0XHQgKi9cbiBcdFx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZuLVx1MDAzZWxpc3RfbG9jaywgZmxhZ3MpO1xuLVxuLVx0XHRcdG9uX25vZGVfcGFydGlhbCA9IHNsYWJfdGVzdF9ub2RlX3BhcnRpYWwoc2xhYik7XG4rXHRcdH0gZWxzZSBpZiAoIXNwaW5fdHJ5bG9ja19pcnFzYXZlKFx1MDAyNm4tXHUwMDNlbGlzdF9sb2NrLCBmbGFncykpIHtcbitcdFx0XHQvKlxuK1x0XHRcdCAqIGZ1bGwtXHUwMDNlcGFydGlhbC9lbXB0eTogdGhlIHNsYWIgaXMgZnVsbCwgc28gaXQgaXMgb25cbitcdFx0XHQgKiBubyBsaXN0OyBpZiB0aGUgbGlzdF9sb2NrIGlzIGNvbnRlbmRlZCwgdGhlbiB3ZVxuK1x0XHRcdCAqIHBhcmsgdGhlIHNsYWIgd2l0aG91dCB3YWl0aW5nIGZvciB0aGUgbG9jay5cbitcdFx0XHQgKi9cbitcdFx0XHRwYXJrID0gdHJ1ZTtcbiBcdFx0fVxuIFxuIFx0fSB3aGlsZSAoIXNsYWJfdXBkYXRlX2ZyZWVsaXN0KHMsIHNsYWIsIFx1MDAyNm9sZCwgXHUwMDI2bmV3LCBcIl9fc2xhYl9mcmVlXCIpKTtcbiBcbi1cdGlmIChsaWtlbHkoIW4pKSB7XG4tXHRcdC8qXG4tXHRcdCAqIFdlIGRpZG4ndCB0YWtlIHRoZSBsaXN0X2xvY2sgYmVjYXVzZSB0aGUgc2xhYiB3YXMgYWxyZWFkeSBvblxuLVx0XHQgKiB0aGUgcGFydGlhbCBsaXN0IGFuZCB3aWxsIHJlbWFpbiB0aGVyZS5cbi1cdFx0ICovXG4rXHQvKiBwYXJ0aWFsLVx1MDAzZXBhcnRpYWw6IHdlIGRpZG4ndCB0YWtlIHRoZSBsaXN0X2xvY2suICovXG4rXHRpZiAobGlrZWx5KCFuKSlcbiBcdFx0cmV0dXJuO1xuLVx0fVxuIFxuIFx0Lypcbi1cdCAqIFRoaXMgc2xhYiB3YXMgcGFydGlhbGx5IGVtcHR5IGJ1dCBub3Qgb24gdGhlIHBlci1ub2RlIHBhcnRpYWwgbGlzdCxcbi1cdCAqIGluIHdoaWNoIGNhc2Ugd2Ugc2hvdWxkbid0IG1hbmlwdWxhdGUgaXRzIGxpc3QsIGp1c3QgcmV0dXJuLlxuK1x0ICogUGFyayB0aGUgc2xhYi4gSWYgdGhpcyBwYXJrIG1ha2VzIHRoZSBwYXJrZWQgbGxpc3Qgbm9uLWVtcHR5LFxuK1x0ICogdGhlbiBzY2hlZHVsZSB1bnBhcmtfd29yay5cbiBcdCAqL1xuK1x0aWYgKHVubGlrZWx5KHBhcmspKSB7XG4rXHRcdGlmIChsbGlzdF9hZGQoc2xhYl90b19wYXJrZWRfbGxub2RlKHNsYWIpLCBcdTAwMjZuLVx1MDAzZXBhcmtlZF9zbGFicykpXG4rXHRcdFx0cXVldWVfZGVsYXllZF93b3JrKGZsdXNod3EsIFx1MDAyNm4tXHUwMDNldW5wYXJrX3dvcmssXG4rXHRcdFx0XHRcdCAgIFVOUEFSS19ERUxBWSk7XG4rXHRcdHN0YXQocywgUEFSS19TTEFCKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0b25fbm9kZV9wYXJ0aWFsID0gc2xhYl90ZXN0X25vZGVfcGFydGlhbChzbGFiKTtcbitcbiBcdGlmICghd2FzX2Z1bGwgXHUwMDI2XHUwMDI2ICFvbl9ub2RlX3BhcnRpYWwpIHtcbitcdFx0LypcbitcdFx0ICogcGFydGlhbC1cdTAwM2VlbXB0eSwgb2ZmbGlzdDogdGhlIHNsYWIgaGFzIGJlZW4gdGFrZW4gb2ZmIHRoZVxuK1x0XHQgKiBwYXJ0aWFsIGxpc3QgYnkgYSBidWxrIHJlZmlsbCwgb3IgcGFya2VkIGR1cmluZyBpdHMgZnVsbCAtXHUwMDNlXG4rXHRcdCAqIHBhcnRpYWwvZW1wdHkgdHJhbnNpdGlvbi4gSXQgd2lsbCBiZSBwdXQgYmFjayBieSBvdGhlciBwYXRocyxcbitcdFx0ICogc28gdGhpcyBzbGFiJ3MgbGlzdCBoYW5kbGluZyBpcyBub3Qgb3VycyB0byBkby5cbitcdFx0ICovXG4gXHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2bi1cdTAwM2VsaXN0X2xvY2ssIGZsYWdzKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuIFx0Lypcbi1cdCAqIElmIHNsYWIgYmVjYW1lIGVtcHR5LCBzaG91bGQgd2UgYWRkL2tlZXAgaXQgb24gdGhlIHBhcnRpYWwgbGlzdCBvciB3ZVxuLVx0ICogaGF2ZSBlbm91Z2g/XG4rXHQgKiBmdWxsL3BhcnRpYWwtXHUwMDNlZW1wdHksIGV4Y2VlZDogd2UgaGF2ZSBlbm91Z2ggcGFydGlhbCBzbGFicyBhbHJlYWR5LlxuK1x0ICpcbitcdCAqIFBhcmtlZCBzbGFicyBhcmUgYWxzbyBjb3VudGVkIGFzIHBhcnRpYWwgc2xhYnMuIFdlIGRvbid0XG4rXHQgKiBrZWVwIGFuIGV4YWN0IGNvdW50IG9mIHBhcmtlZCBzbGFicywgc28gd2UgdHJlYXQgYW55IHBhcmtlZFxuK1x0ICogc2xhYiBhcyByb3VnaGx5IGV4Y2VlZGluZy5cbiBcdCAqL1xuLVx0aWYgKHVubGlrZWx5KCFuZXcuaW51c2UgXHUwMDI2XHUwMDI2IG4tXHUwMDNlbnJfcGFydGlhbCBcdTAwM2U9IHMtXHUwMDNlbWluX3BhcnRpYWwpKVxuLVx0XHRnb3RvIHNsYWJfZW1wdHk7XG4rXHRpZiAodW5saWtlbHkoIW5ldy5pbnVzZSBcdTAwMjZcdTAwMjYgKG4tXHUwMDNlbnJfcGFydGlhbCBcdTAwM2U9IHMtXHUwMDNlbWluX3BhcnRpYWwgfHxcbitcdFx0XHRcdCAgICAhbGxpc3RfZW1wdHkoXHUwMDI2bi1cdTAwM2VwYXJrZWRfc2xhYnMpKSkpIHtcbitcdFx0LyogcGFydGlhbC1cdTAwM2VlbXB0eSwgb25saXN0LCBleGNlZWQgKi9cbitcdFx0aWYgKGxpa2VseSghd2FzX2Z1bGwpKSB7XG4rXHRcdFx0cmVtb3ZlX3BhcnRpYWwobiwgc2xhYik7XG4rXHRcdFx0c3RhdChzLCBGUkVFX1JFTU9WRV9QQVJUSUFMKTtcbitcdFx0fVxuK1x0XHQvKiBlbHNlIGZ1bGwtXHUwMDNlZW1wdHksIGV4Y2VlZDogaXQgaXMgb24gbm8gbGlzdCB0byByZW1vdmUgZnJvbSAqL1xuK1xuK1x0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNm4tXHUwMDNlbGlzdF9sb2NrLCBmbGFncyk7XG4rXHRcdHN0YXQocywgRlJFRV9TTEFCKTtcbitcdFx0ZGlzY2FyZF9zbGFiKHMsIHNsYWIpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4gXG4gXHQvKlxuLVx0ICogT2JqZWN0cyBsZWZ0IGluIHRoZSBzbGFiLiBJZiBpdCB3YXMgbm90IG9uIHRoZSBwYXJ0aWFsIGxpc3QgYmVmb3JlXG4tXHQgKiB0aGVuIGFkZCBpdC5cbitcdCAqIEF0IHRoaXMgcG9pbnQsIG9ubHkgdGhyZWUgY2FzZXMgcmVtYWluOlxuK1x0ICogICBmdWxsLVx1MDAzZXBhcnRpYWxcbitcdCAqICAgZnVsbC1cdTAwM2VlbXB0eSwgbm90IGV4Y2VlZFxuK1x0ICogICBwYXJ0aWFsLVx1MDAzZWVtcHR5LCBvbmxpc3QsIG5vdCBleGNlZWRcbiBcdCAqL1xuK1xuK1x0LyogZnVsbC1cdTAwM2VwYXJ0aWFsOyBmdWxsLVx1MDAzZWVtcHR5LCBub3QgZXhjZWVkICovXG4gXHRpZiAodW5saWtlbHkod2FzX2Z1bGwpKSB7XG4gXHRcdGFkZF9wYXJ0aWFsKG4sIHNsYWIsIEFERF9UT19UQUlMKTtcbiBcdFx0c3RhdChzLCBGUkVFX0FERF9QQVJUSUFMKTtcbiBcdH1cbi1cdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2bi1cdTAwM2VsaXN0X2xvY2ssIGZsYWdzKTtcbi1cdHJldHVybjtcbi1cbi1zbGFiX2VtcHR5OlxuLVx0Lypcbi1cdCAqIFRoZSBzbGFiIGNvdWxkIGhhdmUgYSBzaW5nbGUgb2JqZWN0IGFuZCB0aHVzIGdvIGZyb20gZnVsbCB0byBlbXB0eSBpblxuLVx0ICogYSBzaW5nbGUgZnJlZSwgYnV0IG1vcmUgbGlrZWx5IGl0IHdhcyBvbiB0aGUgcGFydGlhbCBsaXN0LiBSZW1vdmUgaXQuXG4tXHQgKi9cbi1cdGlmIChsaWtlbHkoIXdhc19mdWxsKSkge1xuLVx0XHRyZW1vdmVfcGFydGlhbChuLCBzbGFiKTtcbi1cdFx0c3RhdChzLCBGUkVFX1JFTU9WRV9QQVJUSUFMKTtcbi1cdH1cbitcdC8qIGVsc2UgcGFydGlhbC1cdTAwM2VlbXB0eSwgb25saXN0LCBub3QgZXhjZWVkOiBpdCBzdGF5cyBvbiBwYXJ0aWFsIGxpc3QgKi9cbiBcbiBcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2bi1cdTAwM2VsaXN0X2xvY2ssIGZsYWdzKTtcbi1cdHN0YXQocywgRlJFRV9TTEFCKTtcbi1cdGRpc2NhcmRfc2xhYihzLCBzbGFiKTtcbiB9XG4gXG4gLypcbkBAIC03MzU3LDggKzc1NTgsMTMgQEAgX19yZWZpbGxfb2JqZWN0c19hbnkoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKipwLCBnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBtaW5cbiBcbiBcdFx0XHRuID0gZ2V0X25vZGUocywgem9uZV90b19uaWQoem9uZSkpO1xuIFxuK1x0XHRcdC8qXG4rXHRcdFx0ICogUGFya2VkIHNsYWJzIG1ha2UgdGhlIG5vZGUgd29ydGggdHJ5aW5nXG4rXHRcdFx0ICogZXZlbiBpZiBucl9wYXJ0aWFsIGxvb2tzIGxvdy5cbitcdFx0XHQgKi9cbiBcdFx0XHRpZiAoIW4gfHwgIWNwdXNldF96b25lX2FsbG93ZWQoem9uZSwgZ2ZwKSB8fFxuLVx0XHRcdFx0XHRuLVx1MDAzZW5yX3BhcnRpYWwgXHUwMDNjPSBzLVx1MDAzZW1pbl9wYXJ0aWFsKVxuK1x0XHRcdFx0XHQobi1cdTAwM2Vucl9wYXJ0aWFsIFx1MDAzYz0gcy1cdTAwM2VtaW5fcGFydGlhbCBcdTAwMjZcdTAwMjZcbitcdFx0XHRcdFx0IGxsaXN0X2VtcHR5KFx1MDAyNm4tXHUwMDNlcGFya2VkX3NsYWJzKSkpXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0XHRyID0gX19yZWZpbGxfb2JqZWN0c19ub2RlKHMsIHAsIGdmcCwgbWluLCBtYXgsIG4sXG5AQCAtNzY3OSw2ICs3ODg1LDggQEAgaW5pdF9rbWVtX2NhY2hlX25vZGUoc3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbilcbiBcdG4tXHUwMDNlbnJfcGFydGlhbCA9IDA7XG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZuLVx1MDAzZWxpc3RfbG9jayk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZuLVx1MDAzZXBhcnRpYWwpO1xuK1x0aW5pdF9sbGlzdF9oZWFkKFx1MDAyNm4tXHUwMDNlcGFya2VkX3NsYWJzKTtcbitcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNm4tXHUwMDNldW5wYXJrX3dvcmssIHVucGFya193b3JrX2ZuKTtcbiAjaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcbiBcdGF0b21pY19sb25nX3NldChcdTAwMjZuLVx1MDAzZW5yX3NsYWJzLCAwKTtcbiBcdGF0b21pY19sb25nX3NldChcdTAwMjZuLVx1MDAzZXRvdGFsX29iamVjdHMsIDApO1xuQEAgLTc4MTIsNiArODAyMCw3IEBAIHN0YXRpYyB2b2lkIGZyZWVfa21lbV9jYWNoZV9ub2RlcyhzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbiBcdH1cbiBcbiBcdGZvcl9lYWNoX2ttZW1fY2FjaGVfbm9kZShzLCBub2RlLCBuKSB7XG4rXHRcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcdTAwMjZuLVx1MDAzZXVucGFya193b3JrKTtcbiBcdFx0cy1cdTAwM2VwZXJfbm9kZVtub2RlXS5ub2RlID0gTlVMTDtcbiBcdFx0a21lbV9jYWNoZV9mcmVlKGttZW1fY2FjaGVfbm9kZSwgbik7XG4gXHR9XG5AQCAtODExMiw2ICs4MzIxLDEwIEBAIHN0YXRpYyB2b2lkIGZyZWVfcGFydGlhbChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbilcbiBcbiBcdEJVR19PTihpcnFzX2Rpc2FibGVkKCkpO1xuIFx0c3Bpbl9sb2NrX2lycShcdTAwMjZuLVx1MDAzZWxpc3RfbG9jayk7XG4rXG4rXHQvKiBVbnBhcmsgc2xhYnMgc28gdGhlIHdhbGsgY2FuIGZpbmQgdGhlbS4gKi9cbitcdHVucGFya19zbGFicyhzLCBuLCBOVUxMKTtcbitcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzbGFiLCBoLCBcdTAwMjZuLVx1MDAzZXBhcnRpYWwsIHNsYWJfbGlzdCkge1xuIFx0XHRpZiAoIXNsYWItXHUwMDNlaW51c2UpIHtcbiBcdFx0XHRyZW1vdmVfcGFydGlhbChuLCBzbGFiKTtcbkBAIC04MzgzLDYgKzg1OTYsOSBAQCBzdGF0aWMgaW50IF9fa21lbV9jYWNoZV9kb19zaHJpbmsoc3RydWN0IGttZW1fY2FjaGUgKnMpXG4gXG4gXHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNm4tXHUwMDNlbGlzdF9sb2NrLCBmbGFncyk7XG4gXG4rXHRcdC8qIFBhcmtlZCBzbGFicyBhcmUgc2hyaW5rIGNhbmRpZGF0ZXMgYXMgd2VsbC4gKi9cbitcdFx0dW5wYXJrX3NsYWJzKHMsIG4sIE5VTEwpO1xuK1xuIFx0XHQvKlxuIFx0XHQgKiBCdWlsZCBsaXN0cyBvZiBzbGFicyB0byBkaXNjYXJkIG9yIHByb21vdGUuXG4gXHRcdCAqXG5AQCAtOTUyMiw2ICs5NzM4LDkgQEAgU1RBVF9BVFRSKEZSRUVfRkFTVFBBVEgsIGZyZWVfZmFzdHBhdGgpO1xuIFNUQVRfQVRUUihGUkVFX1NMT1dQQVRILCBmcmVlX3Nsb3dwYXRoKTtcbiBTVEFUX0FUVFIoRlJFRV9BRERfUEFSVElBTCwgZnJlZV9hZGRfcGFydGlhbCk7XG4gU1RBVF9BVFRSKEZSRUVfUkVNT1ZFX1BBUlRJQUwsIGZyZWVfcmVtb3ZlX3BhcnRpYWwpO1xuK1NUQVRfQVRUUihQQVJLX1NMQUIsIHBhcmtfc2xhYik7XG4rU1RBVF9BVFRSKFVOUEFSS19TTEFCLCB1bnBhcmtfc2xhYik7XG4rU1RBVF9BVFRSKFVOUEFSS19FVkVOVCwgdW5wYXJrX2V2ZW50KTtcbiBTVEFUX0FUVFIoQUxMT0NfU0xBQiwgYWxsb2Nfc2xhYik7XG4gU1RBVF9BVFRSKEFMTE9DX05PREVfTUlTTUFUQ0gsIGFsbG9jX25vZGVfbWlzbWF0Y2gpO1xuIFNUQVRfQVRUUihGUkVFX1NMQUIsIGZyZWVfc2xhYik7XG5AQCAtOTYxMCw2ICs5ODI5LDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGUgKmNvbnN0IHNsYWJfYXR0cnNbXSA9IHtcbiBcdFx1MDAyNmZyZWVfc2xvd3BhdGhfYXR0ci5hdHRyLFxuIFx0XHUwMDI2ZnJlZV9hZGRfcGFydGlhbF9hdHRyLmF0dHIsXG4gXHRcdTAwMjZmcmVlX3JlbW92ZV9wYXJ0aWFsX2F0dHIuYXR0cixcbitcdFx1MDAyNnBhcmtfc2xhYl9hdHRyLmF0dHIsXG4rXHRcdTAwMjZ1bnBhcmtfc2xhYl9hdHRyLmF0dHIsXG4rXHRcdTAwMjZ1bnBhcmtfZXZlbnRfYXR0ci5hdHRyLFxuIFx0XHUwMDI2YWxsb2Nfc2xhYl9hdHRyLmF0dHIsXG4gXHRcdTAwMjZhbGxvY19ub2RlX21pc21hdGNoX2F0dHIuYXR0cixcbiBcdFx1MDAyNmZyZWVfc2xhYl9hdHRyLmF0dHIsXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNjowODo1Ni42OTQ3MDM5ODFaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjI3ODE1MjQwODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXBwbGljYWJpbGl0eSBBc3Nlc3NtZW50IGZvciBTTFVCIFNsYWIgUGFya2luZyBPcHRpbWl6YXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgYSBcInBhcmtpbmdcIiBtZWNoYW5pc20gZm9yIHNsYWJzIHdpdGhpbiB0aGUgU0xVQiBhbGxvY2F0b3IuIFNwZWNpZmljYWxseSwgaXQncyBhZGRpbmcgYHBhcmtlZF9zbGFic2AgdG8gYGttZW1fY2FjaGVfbm9kZWAgdG8gaG9sZCBzbGFicyB3aXRob3V0IGxvY2tpbmcuIFRoZSBnb2FsIGlzIHRvIHJlZHVjZSBsb2NrIGNvbnRlbnRpb24gb24gYG4tXHUwMDNlbGlzdF9sb2NrYCBkdXJpbmcgdGhlIHNsYWIgZnJlZWluZyBwcm9jZXNzLlxuXG5NeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXaGVyZSBkb2VzIEtNU0FOIGZpdCBpbj9cIiBUaGlzIGlzIGludGVybmFsIFNMVUIgYWxsb2NhdG9yIGxvZ2ljLiBJdCdzIHRvdWNoaW5nIGZyZWVsaXN0cywgcGFydGlhbCBsaXN0cywgYW5kIHNsYWIgc3RhdGVzIOKAkyBhbGwgdmVyeSBpbnRlcm5hbCBkZXRhaWxzLiBJdCdzIG5vdCBleHBvc2luZyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHRvIHVzZXJzcGFjZSwgYW5kIGl0J3Mgbm90IGNoYW5naW5nIGhvdyBtZW1vcnkgaXMgaW5pdGlhbGl6ZWQgb3IgemVyb2VkLiBObyBuZXcgYm91bmRzIGNoZWNrcyBvciBsZW5ndGggY2FsY3VsYXRpb25zIGFyZSBpbnRyb2R1Y2VkIHRoYXQgY291bGQgbGVhZCB0byBpbmZvcm1hdGlvbiBsZWFrcyB2aWEgdW5pbml0aWFsaXplZCBtZW1vcnkuXG5cblRoZSBsaWtlbHkgYnVncyB3b3VsZCBiZSB0aGluZ3MgbGlrZSB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWVzLCBsaXN0IGNvcnJ1cHRpb24gKGxsaXN0IG9yIGBsaXN0X2hlYWRgIHByb2JsZW1zKSwgbWVtb3J5IGxlYWtzICh1bnBhcmtlZCBzbGFicyksIGFuZCBjb25jdXJyZW5jeSBpc3N1ZXMgKHJhY2VzIGJldHdlZW4gcGFya2luZyBhbmQgdW5wYXJraW5nKS4gTm93LCB0aGUgYmVhdXR5IG9mIHRoaXMgaXMgdGhhdCBLQVNBTiBpcyBwZXJmZWN0bHkgZXF1aXBwZWQgdG8gY2F0Y2ggdGhlIFVBRiBhbmQgZG91YmxlLWZyZWUgaXNzdWVzLCBhbmQgdGhlIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgKGxpc3QgZGVidWdnaW5nLCBsb2NrZGVwLCBzbHViX2RlYnVnKSBhcmUgd2VsbC1zdWl0ZWQgZm9yIHRyYWNraW5nIHRoZSByZXN0LiBUaGVyZSdzIG5vIHJpc2sgaGVyZSBvZiBpbmZvcm1hdGlvbiBsZWFrcyBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gVGhlIG1vZGlmaWVkIHN0cnVjdHVyZXMsIGBrbWVtX2NhY2hlX25vZGVgIGFuZCBgc2xhYmAsIGFyZSAqaW50ZXJuYWwqIHRvIHRoZSBhbGxvY2F0b3IuIFRoZXkncmUgbm90IGJlaW5nIHNlbnQgdG8gb3IgZXhwb3NlZCB0byB1c2Vyc3BhY2UuXG5cblRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIGlzIGRlZmluaXRlbHkgYGZhbHNlYC5cblxuTGV0J3MgZG8gYSBxdWljayBkb3VibGUtY2hlY2sgYWdhaW5zdCB0aGUgS01TQU4gcnVsZXMgdG8gYmUgYWJzb2x1dGVseSBzdXJlOlxuXG4xLiAgKipLZXJuZWwgc3RydWN0dXJlcyB0byB1c2Vyc3BhY2U6KiogTm9wZS5cbjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzOioqIE5vcGUuIFRoZSB2YXJpYWJsZXMgaGVyZSBhcmUgYWxsIGludGVybmFsIHN0YXRlIHZhcmlhYmxlcyB0aGF0IGFyZSBmdWxseSBpbml0aWFsaXplZC5cbjMuICAqKkNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbi9pbml0aWFsaXphdGlvbjoqKiBOb3BlLlxuNC4gICoqQm91bmRzIGNoZWNrcyBleHBvc2luZyB1bmluaXRpYWxpemVkIGJ5dGVzOioqIE5vcGUuXG5cblNvLCB5ZWFoLCBJJ20gY29uZmlkZW50IGluIG15IGFzc2Vzc21lbnQuIGBOZWVkc0tNU0FOPWZhbHNlYCBpcyB0aGUgcmlnaHQgY2FsbCBoZXJlLiBJJ2xsIGZvcm11bGF0ZSB0aGUgcmVhc29uaW5nIGZvciBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODE4NSwiT3V0cHV0VG9rZW5zIjoyMDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MTUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNjowOTo1OS40NzYyMzE1NVoiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGludGVybmFsIFNMVUIgYWxsb2NhdG9yIGxvZ2ljIHRvIGludHJvZHVjZSBhIGxvY2tsZXNzIFxcXCJwYXJraW5nXFxcIiBtZWNoYW5pc20gZm9yIHNsYWJzIHRvIHJlZHVjZSBsb2NrIGNvbnRlbnRpb24gb24gdGhlIG5vZGUncyBsaXN0X2xvY2suIEl0IGFkZHMgYW4gbGxpc3QgZm9yIHBhcmtlZCBzbGFicyBhbmQgZGVsYXllZCB3b3JrIHRvIHVucGFyayB0aGVtLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBpbnRlcm5hbCBtZW1vcnkgbWFuYWdlbWVudCBzdHJ1Y3R1cmVzIChzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlLCBzdHJ1Y3Qgc2xhYikgYW5kIGZyZWVsaXN0IG9wZXJhdGlvbnMuIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBtYW5pZmVzdCBhcyBsaXN0IGNvcnJ1cHRpb25zLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIG9yIGNvbmN1cnJlbmN5IGlzc3VlcyAocmFjZSBjb25kaXRpb25zKS4gVGhlc2UgdHlwZXMgb2YgYnVncyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4sIHNsdWJfZGVidWcsIGxpc3QgZGVidWdnaW5nLCBhbmQgTE9DS0RFUC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWx0ZXIgbWVtb3J5IGluaXRpYWxpemF0aW9uIG9yIGJvdW5kcyBjaGVja2luZyBpbiBhIHdheSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBjYXVzZSBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGludGVybmFsIFNMVUIgYWxsb2NhdG9yIGxvZ2ljIHRvIGludHJvZHVjZSBhIGxvY2tsZXNzIFxcXCJwYXJraW5nXFxcIiBtZWNoYW5pc20gZm9yIHNsYWJzIHRvIHJlZHVjZSBsb2NrIGNvbnRlbnRpb24gb24gdGhlIG5vZGUncyBsaXN0X2xvY2suIEl0IGFkZHMgYW4gbGxpc3QgZm9yIHBhcmtlZCBzbGFicyBhbmQgZGVsYXllZCB3b3JrIHRvIHVucGFyayB0aGVtLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBpbnRlcm5hbCBtZW1vcnkgbWFuYWdlbWVudCBzdHJ1Y3R1cmVzIChzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlLCBzdHJ1Y3Qgc2xhYikgYW5kIGZyZWVsaXN0IG9wZXJhdGlvbnMuIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBtYW5pZmVzdCBhcyBsaXN0IGNvcnJ1cHRpb25zLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIG9yIGNvbmN1cnJlbmN5IGlzc3VlcyAocmFjZSBjb25kaXRpb25zKS4gVGhlc2UgdHlwZXMgb2YgYnVncyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4sIHNsdWJfZGVidWcsIGxpc3QgZGVidWdnaW5nLCBhbmQgTE9DS0RFUC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWx0ZXIgbWVtb3J5IGluaXRpYWxpemF0aW9uIG9yIGJvdW5kcyBjaGVja2luZyBpbiBhIHdheSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBjYXVzZSBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowjqvhf[1] Phase: Succeeded StartedAt: 2026-08-24 16:10:10 +0000 UTC FinishedAt: 2026-08-24 16:10:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjqvhf[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-24 16:10:10 +0000 UTC FinishedAt: 2026-08-24 16:10:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjqvhf[2] Phase: Succeeded StartedAt: 2026-08-24 16:10:10 +0000 UTC FinishedAt: 2026-08-24 19:56:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjqvhf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e7f630142df2afccce90555e4972e60008222311","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__kmem_cache_shrink","__kmem_cache_shutdown","__kmem_cache_empty","kmem_cache_shrink","kmem_cache_destroy"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e7f630142df2afccce90555e4972e60008222311","config_name":"upstream-apparmor-kasan.config","series_id":"1936dda0-2e34-423f-80e0-95f570103cff","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-24 16:10:10 +0000 UTC FinishedAt: 2026-08-24 19:56:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"e7f630142df2afccce90555e4972e60008222311","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__kmem_cache_shrink","__kmem_cache_shutdown","__kmem_cache_empty","kmem_cache_shrink","kmem_cache_destroy"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"e7f630142df2afccce90555e4972e60008222311","config_name":"upstream-apparmor-kasan.config","series_id":"1936dda0-2e34-423f-80e0-95f570103cff","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowjqvhf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e7f630142df2afccce90555e4972e60008222311","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__kmem_cache_shrink","__kmem_cache_shutdown","__kmem_cache_empty","kmem_cache_shrink","kmem_cache_destroy"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e7f630142df2afccce90555e4972e60008222311","config_name":"upstream-apparmor-kasan.config","series_id":"1936dda0-2e34-423f-80e0-95f570103cff","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-24 16:10:10 +0000 UTC FinishedAt: 2026-08-24 16:10:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjqvhf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e7f630142df2afccce90555e4972e60008222311","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__kmem_cache_shrink","__kmem_cache_shutdown","__kmem_cache_empty","kmem_cache_shrink","kmem_cache_destroy"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e7f630142df2afccce90555e4972e60008222311","config_name":"upstream-apparmor-kasan.config","series_id":"1936dda0-2e34-423f-80e0-95f570103cff","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-24 16:10:10 +0000 UTC FinishedAt: 2026-08-24 16:10:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e7f630142df2afccce90555e4972e60008222311","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjqvhf/series-workflowjqvhf-convert-artifact-3033685988/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjqvhf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e7f630142df2afccce90555e4972e60008222311","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__kmem_cache_shrink","__kmem_cache_shutdown","__kmem_cache_empty","kmem_cache_shrink","kmem_cache_destroy"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e7f630142df2afccce90555e4972e60008222311","config_name":"upstream-apparmor-kasan.config","series_id":"1936dda0-2e34-423f-80e0-95f570103cff","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-24 16:10:20 +0000 UTC FinishedAt: 2026-08-24 16:26:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjqvhf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e7f630142df2afccce90555e4972e60008222311","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__kmem_cache_shrink","__kmem_cache_shutdown","__kmem_cache_empty","kmem_cache_shrink","kmem_cache_destroy"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e7f630142df2afccce90555e4972e60008222311","config_name":"upstream-apparmor-kasan.config","series_id":"1936dda0-2e34-423f-80e0-95f570103cff","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-24 16:10:20 +0000 UTC FinishedAt: 2026-08-24 16:26:33 +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:*153c107f-d11c-4cd9-a64c-5a209864a6c2,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-workflowjqvhf/series-workflowjqvhf-convert-artifact-3033685988/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": "302d63f8-7476-4b66-ab08-c008394bbd18", "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-workflowjqvhf/series-workflowjqvhf-build-action-3757965346/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjqvhf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e7f630142df2afccce90555e4972e60008222311","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__kmem_cache_shrink","__kmem_cache_shutdown","__kmem_cache_empty","kmem_cache_shrink","kmem_cache_destroy"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e7f630142df2afccce90555e4972e60008222311","config_name":"upstream-apparmor-kasan.config","series_id":"1936dda0-2e34-423f-80e0-95f570103cff","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-24 16:10:20 +0000 UTC FinishedAt: 2026-08-24 16:26:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*153c107f-d11c-4cd9-a64c-5a209864a6c2,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-workflowjqvhf/series-workflowjqvhf-convert-artifact-3033685988/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": "302d63f8-7476-4b66-ab08-c008394bbd18", "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-workflowjqvhf/series-workflowjqvhf-build-action-3757965346/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjqvhf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e7f630142df2afccce90555e4972e60008222311","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__kmem_cache_shrink","__kmem_cache_shutdown","__kmem_cache_empty","kmem_cache_shrink","kmem_cache_destroy"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e7f630142df2afccce90555e4972e60008222311","config_name":"upstream-apparmor-kasan.config","series_id":"1936dda0-2e34-423f-80e0-95f570103cff","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-24 16:26:33 +0000 UTC FinishedAt: 2026-08-24 16:26:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjqvhf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e7f630142df2afccce90555e4972e60008222311","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__kmem_cache_shrink","__kmem_cache_shutdown","__kmem_cache_empty","kmem_cache_shrink","kmem_cache_destroy"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e7f630142df2afccce90555e4972e60008222311","config_name":"upstream-apparmor-kasan.config","series_id":"1936dda0-2e34-423f-80e0-95f570103cff","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-24 16:26:33 +0000 UTC FinishedAt: 2026-08-24 16:26:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjqvhf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e7f630142df2afccce90555e4972e60008222311","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__kmem_cache_shrink","__kmem_cache_shutdown","__kmem_cache_empty","kmem_cache_shrink","kmem_cache_destroy"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e7f630142df2afccce90555e4972e60008222311","config_name":"upstream-apparmor-kasan.config","series_id":"1936dda0-2e34-423f-80e0-95f570103cff","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-24 16:26:33 +0000 UTC FinishedAt: 2026-08-24 16:26:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjqvhf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e7f630142df2afccce90555e4972e60008222311","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__kmem_cache_shrink","__kmem_cache_shutdown","__kmem_cache_empty","kmem_cache_shrink","kmem_cache_destroy"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e7f630142df2afccce90555e4972e60008222311","config_name":"upstream-apparmor-kasan.config","series_id":"1936dda0-2e34-423f-80e0-95f570103cff","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-24 16:26:33 +0000 UTC FinishedAt: 2026-08-24 16:26:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e7f630142df2afccce90555e4972e60008222311","config_name":"upstream-apparmor-kasan.config","series_id":"1936dda0-2e34-423f-80e0-95f570103cff","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjqvhf/series-workflowjqvhf-convert-artifact-1847862243/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjqvhf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e7f630142df2afccce90555e4972e60008222311","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__kmem_cache_shrink","__kmem_cache_shutdown","__kmem_cache_empty","kmem_cache_shrink","kmem_cache_destroy"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e7f630142df2afccce90555e4972e60008222311","config_name":"upstream-apparmor-kasan.config","series_id":"1936dda0-2e34-423f-80e0-95f570103cff","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-24 16:26:43 +0000 UTC FinishedAt: 2026-08-24 16:28:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjqvhf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e7f630142df2afccce90555e4972e60008222311","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__kmem_cache_shrink","__kmem_cache_shutdown","__kmem_cache_empty","kmem_cache_shrink","kmem_cache_destroy"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e7f630142df2afccce90555e4972e60008222311","config_name":"upstream-apparmor-kasan.config","series_id":"1936dda0-2e34-423f-80e0-95f570103cff","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-24 16:26:43 +0000 UTC FinishedAt: 2026-08-24 16:28:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*302d63f8-7476-4b66-ab08-c008394bbd18,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-workflowjqvhf/series-workflowjqvhf-build-action-3757965346/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-workflowjqvhf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e7f630142df2afccce90555e4972e60008222311","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__kmem_cache_shrink","__kmem_cache_shutdown","__kmem_cache_empty","kmem_cache_shrink","kmem_cache_destroy"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e7f630142df2afccce90555e4972e60008222311","config_name":"upstream-apparmor-kasan.config","series_id":"1936dda0-2e34-423f-80e0-95f570103cff","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-24 16:28:41 +0000 UTC FinishedAt: 2026-08-24 16:28:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjqvhf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e7f630142df2afccce90555e4972e60008222311","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__kmem_cache_shrink","__kmem_cache_shutdown","__kmem_cache_empty","kmem_cache_shrink","kmem_cache_destroy"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e7f630142df2afccce90555e4972e60008222311","config_name":"upstream-apparmor-kasan.config","series_id":"1936dda0-2e34-423f-80e0-95f570103cff","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-24 16:28:41 +0000 UTC FinishedAt: 2026-08-24 16:28:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjqvhf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e7f630142df2afccce90555e4972e60008222311","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__kmem_cache_shrink","__kmem_cache_shutdown","__kmem_cache_empty","kmem_cache_shrink","kmem_cache_destroy"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e7f630142df2afccce90555e4972e60008222311","config_name":"upstream-apparmor-kasan.config","series_id":"1936dda0-2e34-423f-80e0-95f570103cff","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-24 16:28:41 +0000 UTC FinishedAt: 2026-08-24 16:48:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjqvhf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e7f630142df2afccce90555e4972e60008222311","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__kmem_cache_shrink","__kmem_cache_shutdown","__kmem_cache_empty","kmem_cache_shrink","kmem_cache_destroy"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e7f630142df2afccce90555e4972e60008222311","config_name":"upstream-apparmor-kasan.config","series_id":"1936dda0-2e34-423f-80e0-95f570103cff","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-24 16:28:41 +0000 UTC FinishedAt: 2026-08-24 16:48:49 +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:*153c107f-d11c-4cd9-a64c-5a209864a6c2,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-workflowjqvhf/series-workflowjqvhf-convert-artifact-1847862243/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": "8634ffe7-e5c2-4e9d-847c-a9b2bbc11813", "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-workflowjqvhf/series-workflowjqvhf-build-action-4231622807/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjqvhf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e7f630142df2afccce90555e4972e60008222311","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__kmem_cache_shrink","__kmem_cache_shutdown","__kmem_cache_empty","kmem_cache_shrink","kmem_cache_destroy"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e7f630142df2afccce90555e4972e60008222311","config_name":"upstream-apparmor-kasan.config","series_id":"1936dda0-2e34-423f-80e0-95f570103cff","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-24 16:28:41 +0000 UTC FinishedAt: 2026-08-24 16:48:28 +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:*153c107f-d11c-4cd9-a64c-5a209864a6c2,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-workflowjqvhf/series-workflowjqvhf-convert-artifact-1847862243/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": "8634ffe7-e5c2-4e9d-847c-a9b2bbc11813", "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-workflowjqvhf/series-workflowjqvhf-build-action-4231622807/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjqvhf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e7f630142df2afccce90555e4972e60008222311","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__kmem_cache_shrink","__kmem_cache_shutdown","__kmem_cache_empty","kmem_cache_shrink","kmem_cache_destroy"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e7f630142df2afccce90555e4972e60008222311","config_name":"upstream-apparmor-kasan.config","series_id":"1936dda0-2e34-423f-80e0-95f570103cff","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-24 16:48:49 +0000 UTC FinishedAt: 2026-08-24 16:48:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjqvhf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e7f630142df2afccce90555e4972e60008222311","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__kmem_cache_shrink","__kmem_cache_shutdown","__kmem_cache_empty","kmem_cache_shrink","kmem_cache_destroy"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e7f630142df2afccce90555e4972e60008222311","config_name":"upstream-apparmor-kasan.config","series_id":"1936dda0-2e34-423f-80e0-95f570103cff","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-24 16:48:49 +0000 UTC FinishedAt: 2026-08-24 16:48:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjqvhf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e7f630142df2afccce90555e4972e60008222311","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__kmem_cache_shrink","__kmem_cache_shutdown","__kmem_cache_empty","kmem_cache_shrink","kmem_cache_destroy"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e7f630142df2afccce90555e4972e60008222311","config_name":"upstream-apparmor-kasan.config","series_id":"1936dda0-2e34-423f-80e0-95f570103cff","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-24 16:48:49 +0000 UTC FinishedAt: 2026-08-24 16:50:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjqvhf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e7f630142df2afccce90555e4972e60008222311","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__kmem_cache_shrink","__kmem_cache_shutdown","__kmem_cache_empty","kmem_cache_shrink","kmem_cache_destroy"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e7f630142df2afccce90555e4972e60008222311","config_name":"upstream-apparmor-kasan.config","series_id":"1936dda0-2e34-423f-80e0-95f570103cff","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-24 16:48:49 +0000 UTC FinishedAt: 2026-08-24 16:50:26 +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:*8634ffe7-e5c2-4e9d-847c-a9b2bbc11813,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-workflowjqvhf/series-workflowjqvhf-build-action-4231622807/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-workflowjqvhf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e7f630142df2afccce90555e4972e60008222311","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__kmem_cache_shrink","__kmem_cache_shutdown","__kmem_cache_empty","kmem_cache_shrink","kmem_cache_destroy"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e7f630142df2afccce90555e4972e60008222311","config_name":"upstream-apparmor-kasan.config","series_id":"1936dda0-2e34-423f-80e0-95f570103cff","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-24 16:50:36 +0000 UTC FinishedAt: 2026-08-24 19:56:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjqvhf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e7f630142df2afccce90555e4972e60008222311","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__kmem_cache_shrink","__kmem_cache_shutdown","__kmem_cache_empty","kmem_cache_shrink","kmem_cache_destroy"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e7f630142df2afccce90555e4972e60008222311","config_name":"upstream-apparmor-kasan.config","series_id":"1936dda0-2e34-423f-80e0-95f570103cff","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-24 16:50:36 +0000 UTC FinishedAt: 2026-08-24 19:56:42 +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":["__kmem_cache_shrink","__kmem_cache_shutdown","__kmem_cache_empty","kmem_cache_shrink","kmem_cache_destroy"],"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:*302d63f8-7476-4b66-ab08-c008394bbd18,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8634ffe7-e5c2-4e9d-847c-a9b2bbc11813,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-workflowjqvhf/series-workflowjqvhf-build-action-3757965346/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-workflowjqvhf/series-workflowjqvhf-build-action-4231622807/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowjqvhf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e7f630142df2afccce90555e4972e60008222311","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__kmem_cache_shrink","__kmem_cache_shutdown","__kmem_cache_empty","kmem_cache_shrink","kmem_cache_destroy"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e7f630142df2afccce90555e4972e60008222311","config_name":"upstream-apparmor-kasan.config","series_id":"1936dda0-2e34-423f-80e0-95f570103cff","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-24 16:50:36 +0000 UTC FinishedAt: 2026-08-24 16:50:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjqvhf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e7f630142df2afccce90555e4972e60008222311","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__kmem_cache_shrink","__kmem_cache_shutdown","__kmem_cache_empty","kmem_cache_shrink","kmem_cache_destroy"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e7f630142df2afccce90555e4972e60008222311","config_name":"upstream-apparmor-kasan.config","series_id":"1936dda0-2e34-423f-80e0-95f570103cff","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-24 16:50:36 +0000 UTC FinishedAt: 2026-08-24 16:50:41 +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":["__kmem_cache_shrink","__kmem_cache_shutdown","__kmem_cache_empty","kmem_cache_shrink","kmem_cache_destroy"],"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-workflowjqvhf/series-workflowjqvhf-convert-artifact-465087484/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjqvhf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e7f630142df2afccce90555e4972e60008222311","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__kmem_cache_shrink","__kmem_cache_shutdown","__kmem_cache_empty","kmem_cache_shrink","kmem_cache_destroy"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e7f630142df2afccce90555e4972e60008222311","config_name":"upstream-apparmor-kasan.config","series_id":"1936dda0-2e34-423f-80e0-95f570103cff","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-24 16:50:36 +0000 UTC FinishedAt: 2026-08-24 16:50:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjqvhf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e7f630142df2afccce90555e4972e60008222311","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__kmem_cache_shrink","__kmem_cache_shutdown","__kmem_cache_empty","kmem_cache_shrink","kmem_cache_destroy"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e7f630142df2afccce90555e4972e60008222311","config_name":"upstream-apparmor-kasan.config","series_id":"1936dda0-2e34-423f-80e0-95f570103cff","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-24 16:50:36 +0000 UTC FinishedAt: 2026-08-24 16:50:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjqvhf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e7f630142df2afccce90555e4972e60008222311","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__kmem_cache_shrink","__kmem_cache_shutdown","__kmem_cache_empty","kmem_cache_shrink","kmem_cache_destroy"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e7f630142df2afccce90555e4972e60008222311","config_name":"upstream-apparmor-kasan.config","series_id":"1936dda0-2e34-423f-80e0-95f570103cff","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-24 16:50:36 +0000 UTC FinishedAt: 2026-08-24 16:50:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjqvhf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e7f630142df2afccce90555e4972e60008222311","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__kmem_cache_shrink","__kmem_cache_shutdown","__kmem_cache_empty","kmem_cache_shrink","kmem_cache_destroy"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e7f630142df2afccce90555e4972e60008222311","config_name":"upstream-apparmor-kasan.config","series_id":"1936dda0-2e34-423f-80e0-95f570103cff","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-24 16:50:46 +0000 UTC FinishedAt: 2026-08-24 19:56:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjqvhf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e7f630142df2afccce90555e4972e60008222311","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__kmem_cache_shrink","__kmem_cache_shutdown","__kmem_cache_empty","kmem_cache_shrink","kmem_cache_destroy"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e7f630142df2afccce90555e4972e60008222311","config_name":"upstream-apparmor-kasan.config","series_id":"1936dda0-2e34-423f-80e0-95f570103cff","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-24 16:50:46 +0000 UTC FinishedAt: 2026-08-24 19:56:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*302d63f8-7476-4b66-ab08-c008394bbd18,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8634ffe7-e5c2-4e9d-847c-a9b2bbc11813,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-workflowjqvhf/series-workflowjqvhf-build-action-3757965346/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-workflowjqvhf/series-workflowjqvhf-build-action-4231622807/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-workflowjqvhf/series-workflowjqvhf-convert-artifact-465087484/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,}