Name: series-workflowwrxkr Phase: Succeeded StartedAt: 2026-09-14 14:08:17 +0000 UTC FinishedAt: 2026-09-14 19:24:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrxkr[0] Phase: Succeeded StartedAt: 2026-09-14 14:08:17 +0000 UTC FinishedAt: 2026-09-14 15:02:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrxkr[0].run-triage Phase: Succeeded StartedAt: 2026-09-14 14:08:17 +0000 UTC FinishedAt: 2026-09-14 15:02:47 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "136a77f66b51dad3846c393753d92ad026e484e7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CRASH_DUMP", "KEXEC" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "136a77f66b51dad3846c393753d92ad026e484e7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CRASH_DUMP", "KEXEC" ], "series_id": "ce0d30d5-15a8-4d38-82b4-35d92cab1f42" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "boost_watermark", "try_to_claim_block" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "", "base_commit": "136a77f66b51dad3846c393753d92ad026e484e7", "base_tree": "mm-new" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE0OjMxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MzBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDUkFTSF9EVU1QJiMzNDssCiAgICAmIzM0O0tFWEVDJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Ym9vc3Rfd2F0ZXJtYXJrJiMzNDssCiAgICAmIzM0O3RyeV90b19jbGFpbV9ibG9jayYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBjaGVjayBmb3IgYGlzX2tkdW1wX2tlcm5lbCgpYCBpbiBgYm9vc3Rfd2F0ZXJtYXJrKClgIHdpdGhpbiBgbW0vcGFnZV9hbGxvYy5jYCB0byBwcmV2ZW50IHdhdGVybWFyayBib29zdGluZyBkdXJpbmcga2R1bXAgY2FwdHVyZSBrZXJuZWwgZXhlY3V0aW9uLiBUaGlzIGlzIGEgcHVyZWx5IGFsZ29yaXRobWljIC8gcG9saWN5IGNoZWNrIGluIHRoZSBwYWdlIGFsbG9jYXRvciByZWNsYWltIGhldXJpc3RpY3MgcmV0dXJuaW5nIGEgYm9vbGVhbiB2YWx1ZS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkYXRhIGNvcHlpbmcgdG8gdXNlciBzcGFjZSwgdW5pbml0aWFsaXplZCB2YXJpYWJsZSB1c2FnZSwgb3IgYnVmZmVyIG1hbmlwdWxhdGlvbnMuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGluIG1tL3BhZ2VfYWxsb2MuYyBieSBhZGRpbmcgYW4gaXNfa2R1bXBfa2VybmVsKCkgY2hlY2sgaW5zaWRlIGJvb3N0X3dhdGVybWFyaygpIHRvIGRpc2FibGUgd2F0ZXJtYXJrIGJvb3N0aW5nIGluIGtkdW1wIGtlcm5lbHMuIFRoaXMgY29kZSBpcyBsb2NhdGVkIGluIHRoZSBjb3JlIHBhZ2UgYWxsb2NhdG9yJiMzOTtzIGFudGktZnJhZ21lbnRhdGlvbiBmYWxsYmFjayBwYXRoIGFuZCBleGVjdXRlcyBkdXJpbmcgcGFnZWJsb2NrIGNsYWltaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE0OjMxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZjBiNGVlNDQ5NTUzNTBmMTI5ODcxNTdjYTU1MzJmNmM0ODYwNTQ1ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDE0IDE0OjMxOjUyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuY1xuaW5kZXggMTJmYWM5MDg0YzQ4My4uMjc2ZmE3MTY5Yjk5MyAxMDA2NDRcbi0tLSBhL21tL3BhZ2VfYWxsb2MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZV9hbGxvYy5jXG5AQCAtMzcsNiAmIzQzOzM3LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC92bXN0YXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZhdWx0LWluamVjdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY29tcGFjdGlvbi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NyYXNoX2R1bXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3RyYWNlL2V2ZW50cy9rbWVtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N0cmFjZS9ldmVudHMvb29tLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wcmVmZXRjaC5oXHUwMDNlXG5AQCAtMjE3OCw2ICYjNDM7MjE3OSwxNCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYm9vc3Rfd2F0ZXJtYXJrKHN0cnVjdCB6b25lICp6b25lKVxuIFxuIFx0aWYgKCF3YXRlcm1hcmtfYm9vc3RfZmFjdG9yKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQSBrZHVtcCBjYXB0dXJlIGtlcm5lbCBleGl0cyBiZWZvcmUgYSBib29zdCBjYW4gcGF5IG9mZiwgd2hpbGVcbiYjNDM7XHQgKiB0aGUgcmFpc2VkIHdhdGVybWFyayBjYW4gZXhjZWVkIHRoZSBtZW1vcnkgbGVmdCBmb3IgdGhlIGR1bXAuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGlzX2tkdW1wX2tlcm5lbCgpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiBcdC8qXG4gXHQgKiBEb24mIzM5O3QgYm90aGVyIGluIHpvbmVzIHRoYXQgYXJlIHVubGlrZWx5IHRvIHByb2R1Y2UgcmVzdWx0cy5cbiBcdCAqIE9uIHNtYWxsIG1hY2hpbmVzLCBpbmNsdWRpbmcga2R1bXAgY2FwdHVyZSBrZXJuZWxzIHJ1bm5pbmdcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxNDozMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4yN208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q1JBU0hfRFVNUCYjMzQ7LAogICAgJiMzNDtLRVhFQyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Jvb3N0X3dhdGVybWFyayYjMzQ7LAogICAgJiMzNDt0cnlfdG9fY2xhaW1fYmxvY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiBtbS9wYWdlX2FsbG9jLmMgYnkgYWRkaW5nIGFuIGlzX2tkdW1wX2tlcm5lbCgpIGNoZWNrIGluc2lkZSBib29zdF93YXRlcm1hcmsoKSB0byBkaXNhYmxlIHdhdGVybWFyayBib29zdGluZyBpbiBrZHVtcCBrZXJuZWxzLiBUaGlzIGNvZGUgaXMgbG9jYXRlZCBpbiB0aGUgY29yZSBwYWdlIGFsbG9jYXRvciYjMzk7cyBhbnRpLWZyYWdtZW50YXRpb24gZmFsbGJhY2sgcGF0aCBhbmQgZXhlY3V0ZXMgZHVyaW5nIHBhZ2VibG9jayBjbGFpbWluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGYwYjRlZTQ0OTU1MzUwZjEyOTg3MTU3Y2E1NTMyZjZjNDg2MDU0NWYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCAxNCAxNDozMTo1MiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuYwppbmRleCAxMmZhYzkwODRjNDgzLi4yNzZmYTcxNjliOTkzIDEwMDY0NAotLS0gYS9tbS9wYWdlX2FsbG9jLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZV9hbGxvYy5jCkBAIC0zNyw2ICYjNDM7MzcsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3Ztc3RhdC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2ZhdWx0LWluamVjdC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2NvbXBhY3Rpb24uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvY3Jhc2hfZHVtcC5oJmd0OwogI2luY2x1ZGUgJmx0O3RyYWNlL2V2ZW50cy9rbWVtLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7dHJhY2UvZXZlbnRzL29vbS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3ByZWZldGNoLmgmZ3Q7CkBAIC0yMTc4LDYgJiM0MzsyMTc5LDE0IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBib29zdF93YXRlcm1hcmsoc3RydWN0IHpvbmUgKnpvbmUpCiAKIAlpZiAoIXdhdGVybWFya19ib29zdF9mYWN0b3IpCiAJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogQSBrZHVtcCBjYXB0dXJlIGtlcm5lbCBleGl0cyBiZWZvcmUgYSBib29zdCBjYW4gcGF5IG9mZiwgd2hpbGUKJiM0MzsJICogdGhlIHJhaXNlZCB3YXRlcm1hcmsgY2FuIGV4Y2VlZCB0aGUgbWVtb3J5IGxlZnQgZm9yIHRoZSBkdW1wLgomIzQzOwkgKi8KJiM0MzsJaWYgKGlzX2tkdW1wX2tlcm5lbCgpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwogCS8qCiAJICogRG9uJiMzOTt0IGJvdGhlciBpbiB6b25lcyB0aGF0IGFyZSB1bmxpa2VseSB0byBwcm9kdWNlIHJlc3VsdHMuCiAJICogT24gc21hbGwgbWFjaGluZXMsIGluY2x1ZGluZyBrZHVtcCBjYXB0dXJlIGtlcm5lbHMgcnVubmluZwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxNDozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTg1CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNDAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBNZW1vcnkgQWxsb2NhdGlvbiBpbiB0aGUgQ29udGV4dCBvZiBLZHVtcCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGRpZmZgIGluIGBtbS9wYWdlX2FsbG9jLmNgLiBMb29rcyBsaWtlIHdlJiMzOTtyZSBhZGRpbmcgYSBgI2luY2x1ZGUgJmx0O2xpbnV4L2NyYXNoX2R1bXAuaCZndDtgIGFuZCBtb2RpZnlpbmcgdGhlIHdhdGVybWFyayBib29zdGluZyBsb2dpYy4gSW50ZXJlc3RpbmcuIEkmIzM5O20gZm9jdXNpbmcgb24gbGluZXMgMjE3OCBvbndhcmQuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBub3RpbmcgdGhlIGFkZGl0aW9uIG9mIGEgY2hlY2sgZm9yIGBpc19rZHVtcF9rZXJuZWwoKWAuIFRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2UsIGFzIEkgc2VlIGl0LCB0aGUga2VybmVsIGR1bXAgY2FwdHVyZSBwcm9jZXNzIChrZHVtcCkgaGFzIHNvbWUgdW5pcXVlIG1lbW9yeSBtYW5hZ2VtZW50IGNvbnNpZGVyYXRpb25zLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhlIHdhdGVybWFyayBib29zdGluZywgd2hpY2ggdXN1YWxseSBoZWxwcyB0byBwcmV2ZW50IGFsbG9jYXRpb24gZmFpbHVyZXMsIG1pZ2h0IGJlIGNvdW50ZXJwcm9kdWN0aXZlIG9yIGV2ZW4gcHJvYmxlbWF0aWMgZHVyaW5nIGEga2R1bXAgc2NlbmFyaW8uIFRoZSBjb21tZW50IGNsYXJpZmllcyB0aGlzOiB0aGUga2R1bXAga2VybmVsIGNhbiBleGl0IGJlZm9yZSBhIGJvb3N0IGNhbiBwcm92aWRlIGl0cyB1c3VhbCBiZW5lZml0LCBhbmQgZnVydGhlcm1vcmUsIGFuIG92ZXJseSBhZ2dyZXNzaXZlIHdhdGVybWFyayBpbmNyZWFzZSAqY291bGQqIGxlYWQgdG8gdGhlIHJhaXNlZCB3YXRlcm1hcmsgZXhjZWVkaW5nIHRoZSBtZW1vcnkgYXZhaWxhYmxlIGZvciB0aGUgYWN0dWFsIGNyYXNoIGR1bXAuIEl0JiMzOTtzIGEgdHJhZGUtb2ZmLiBXZSBkb24mIzM5O3Qgd2FudCB0byBzdGFydmUgdGhlIGR1bXAgcHJvY2Vzcy4gU28sIHRoZSBjb2RlIG5vdyBleHBsaWNpdGx5IGRpc2FibGVzIHdhdGVybWFyayBib29zdGluZyB3aGVuIGBpc19rZHVtcF9rZXJuZWwoKWAgcmV0dXJucyB0cnVlLiBTZWVtcyBzZW5zaWJsZSwgY29uc2lkZXJpbmcgdGhlIHBvdGVudGlhbCBjb25mbGljdC4gSSBuZWVkIHRvIGtlZXAgdGhpcyBpbiBtaW5kIHdoZW4gZXZhbHVhdGluZyBtZW1vcnkgbWFuYWdlbWVudCBiZWhhdmlvcnMgZHVyaW5nIGNyYXNoIHNjZW5hcmlvcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxNDozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3BhZ2VfYWxsb2MuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxNzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjE3MDpcdHtcbjIxNzE6XHRcdHJldHVybiBfX21vdmVfZnJlZXBhZ2VzX2Jsb2NrX2lzb2xhdGUoem9uZSwgcGFnZSwgZmFsc2UpO1xuMjE3MjpcdH1cbjIxNzM6XHRcbjIxNzQ6XHQjZW5kaWYgLyogQ09ORklHX01FTU9SWV9JU09MQVRJT04gKi9cbjIxNzU6XHRcbjIxNzY6XHRzdGF0aWMgaW5saW5lIGJvb2wgYm9vc3Rfd2F0ZXJtYXJrKHN0cnVjdCB6b25lICp6b25lKVxuMjE3NzpcdHtcbjIxNzg6XHRcdHVuc2lnbmVkIGxvbmcgbWF4X2Jvb3N0O1xuMjE3OTpcdFxuMjE4MDpcdFx0aWYgKCF3YXRlcm1hcmtfYm9vc3RfZmFjdG9yKVxuMjE4MTpcdFx0XHRyZXR1cm4gZmFsc2U7XG4yMTgyOlx0XG4yMTgzOlx0XHQvKlxuMjE4NDpcdFx0ICogQSBrZHVtcCBjYXB0dXJlIGtlcm5lbCBleGl0cyBiZWZvcmUgYSBib29zdCBjYW4gcGF5IG9mZiwgd2hpbGVcbjIxODU6XHRcdCAqIHRoZSByYWlzZWQgd2F0ZXJtYXJrIGNhbiBleGNlZWQgdGhlIG1lbW9yeSBsZWZ0IGZvciB0aGUgZHVtcC5cbjIxODY6XHRcdCAqL1xuMjE4NzpcdFx0aWYgKGlzX2tkdW1wX2tlcm5lbCgpKVxuMjE4ODpcdFx0XHRyZXR1cm4gZmFsc2U7XG4yMTg5Olx0XG4yMTkwOlx0XHQvKlxuMjE5MTpcdFx0ICogRG9uJiMzOTt0IGJvdGhlciBpbiB6b25lcyB0aGF0IGFyZSB1bmxpa2VseSB0byBwcm9kdWNlIHJlc3VsdHMuXG4yMTkyOlx0XHQgKiBPbiBzbWFsbCBtYWNoaW5lcywgaW5jbHVkaW5nIGtkdW1wIGNhcHR1cmUga2VybmVscyBydW5uaW5nXG4yMTkzOlx0XHQgKiBpbiBhIHNtYWxsIGFyZWEsIGJvb3N0aW5nIHRoZSB3YXRlcm1hcmsgY2FuIGNhdXNlIGFuIG91dCBvZlxuMjE5NDpcdFx0ICogbWVtb3J5IHNpdHVhdGlvbiBpbW1lZGlhdGVseS5cbjIxOTU6XHRcdCAqL1xuMjE5NjpcdFx0aWYgKChwYWdlYmxvY2tfbnJfcGFnZXMgKiA0KSBcdTAwM2Ugem9uZV9tYW5hZ2VkX3BhZ2VzKHpvbmUpKVxuMjE5NzpcdFx0XHRyZXR1cm4gZmFsc2U7XG4yMTk4Olx0XG4yMTk5Olx0XHRtYXhfYm9vc3QgPSBtdWx0X2ZyYWMoem9uZS1cdTAwM2Vfd2F0ZXJtYXJrW1dNQVJLX0hJR0hdLFxuMjIwMDpcdFx0XHRcdHdhdGVybWFya19ib29zdF9mYWN0b3IsIDEwMDAwKTtcbjIyMDE6XHRcbjIyMDI6XHRcdC8qXG4yMjAzOlx0XHQgKiBoaWdoIHdhdGVybWFyayBtYXkgYmUgdW5pbml0aWFsaXNlZCBpZiBmcmFnbWVudGF0aW9uIG9jY3Vyc1xuMjIwNDpcdFx0ICogdmVyeSBlYXJseSBpbiBib290IHNvIGRvIG5vdCBib29zdC4gV2UgZG8gbm90IGZhbGxcbjIyMDU6XHRcdCAqIHRocm91Z2ggYW5kIGJvb3N0IGJ5IHBhZ2VibG9ja19ucl9wYWdlcyBhcyBmYWlsaW5nXG4yMjA2Olx0XHQgKiBhbGxvY2F0aW9ucyB0aGF0IGVhcmx5IG1lYW5zIHRoYXQgcmVjbGFpbSBpcyBub3QgZ29pbmdcbjIyMDc6XHRcdCAqIHRvIGhlbHAgYW5kIGl0IG1heSBldmVuIGJlIGltcG9zc2libGUgdG8gcmVjbGFpbSB0aGVcbjIyMDg6XHRcdCAqIGJvb3N0ZWQgd2F0ZXJtYXJrIHJlc3VsdGluZyBpbiBhIGhhbmcuXG4yMjA5Olx0XHQgKi9cbjIyMTA6XHRcdGlmICghbWF4X2Jvb3N0KVxuMjIxMTpcdFx0XHRyZXR1cm4gZmFsc2U7XG4yMjEyOlx0XG4yMjEzOlx0XHRtYXhfYm9vc3QgPSBtYXgocGFnZWJsb2NrX25yX3BhZ2VzLCBtYXhfYm9vc3QpO1xuMjIxNDpcdFxuMjIxNTpcdFx0em9uZS1cdTAwM2V3YXRlcm1hcmtfYm9vc3QgPSBtaW4oem9uZS1cdTAwM2V3YXRlcm1hcmtfYm9vc3QgJiM0MzsgcGFnZWJsb2NrX25yX3BhZ2VzLFxuMjIxNjpcdFx0XHRtYXhfYm9vc3QpO1xuMjIxNzpcdFxuMjIxODpcdFx0cmV0dXJuIHRydWU7XG4yMjE5Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE0OjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzODMKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBEdW1wIExhbmRzY2FwZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGggdGhpcyBgaXNfa2R1bXBfa2VybmVsKClgIGZ1bmN0aW9uLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBrbm93IHdoYXQgaXQgKmlzKi4gSXMgaXQgYSBtYWNybywgYSBmdW5jdGlvbiBkZWZpbmVkIGluIGEgaGVhZGVyLCBvciBzb21ldGhpbmcgZWxzZT8gSSBuZWVkIHRvIGZpbmQgaXRzIGRlZmluaXRpb24uIEkmIzM5O20gZ3Vlc3NpbmcgaXQmIzM5O3MgcHJvYmFibHkgcmVsYXRlZCB0byBrZXJuZWwgY3Jhc2ggZHVtcHMsIGFuZCB0aGF0IGxlYWRzIG1lIHRvIHRoZSBuZXh0IHRoaW5nOiB3aGF0JiMzOTtzIGBDUkFTSF9EVU1QYD8gSXMgaXQgYSBjb25maWd1cmF0aW9uIG9wdGlvbiwgYSBjb21waWxlLXRpbWUgZmxhZywgYSBzdHJ1Y3QgbWVtYmVyLCBhIHN5bWJvbD8gS25vd2luZyB0aGF0IHdpbGwgcHJvdmlkZSBjcml0aWNhbCBjb250ZXh0LiBJIGltYWdpbmUgdGhhdCBgaXNfa2R1bXBfa2VybmVsKClgIGlzIHNvbWVob3cgcmVsYXRlZCB0byB0aGUgYENSQVNIX0RVTVBgIG1lY2hhbmlzbS4gVGhhdCYjMzk7cyBteSBpbW1lZGlhdGUgdGhvdWdodC4gSSYjMzk7bSBnb2luZyB0byB0cmFjayB0aGVzZSB0d28gZG93biBzbyBJIGhhdmUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIHN5c3RlbSBoYW5kbGVzIGNyYXNoIGR1bXBzLiBUaGlzIHNob3VsZCBwcm92aWRlIHRoZSBpbmZvcm1hdGlvbiBJJiMzOTtsbCBuZWVkIHRvIGFuc3dlciB0aGUgcXVlc3Rpb24gYXQgaGFuZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxNDozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpc19rZHVtcF9rZXJuZWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaD0zNj12b2lkIHZtY29yZV9jbGVhbnVwKHZvaWQpO1xuLS1cbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oLTU2LVxuaW5jbHVkZS9saW51eC9jcmFzaF9kdW1wLmg6NTc6I2lmbmRlZiBpc19rZHVtcF9rZXJuZWxcbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oLTU4LS8qXG5pbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaDo1OTogKiBpc19rZHVtcF9rZXJuZWwoKSBjaGVja3Mgd2hldGhlciB0aGlzIGtlcm5lbCBpcyBib290aW5nIGFmdGVyIGEgcGFuaWMgb2ZcbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oLTYwLSAqIHByZXZpb3VzIGtlcm5lbCBvciBub3QuIFRoaXMgaXMgZGV0ZXJtaW5lZCBieSBjaGVja2luZyBpZiBwcmV2aW91cyBrZXJuZWxcbi0tXG5pbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaC02Ny1cbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oOjY4OnN0YXRpYyBpbmxpbmUgYm9vbCBpc19rZHVtcF9rZXJuZWwodm9pZClcbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oLTY5LXtcbi0tXG5pbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaD04Mj1zdGF0aWMgaW5saW5lIGludCBpc192bWNvcmVfdXNhYmxlKHZvaWQpXG4tLVxuaW5jbHVkZS9saW51eC9jcmFzaF9kdW1wLmgtODgtLyogdm1jb3JlX3VudXNhYmxlKCkgbWFya3MgdGhlIHZtY29yZSBhcyB1bnVzYWJsZSxcbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oOjg5OiAqIHdpdGhvdXQgZGlzdHVyYmluZyB0aGUgbG9naWMgb2YgaXNfa2R1bXBfa2VybmVsKClcbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oLTkwLSAqL1xuLS1cbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oPTE1MD1zdGF0aWMgaW5saW5lIHZvaWQgdm1jb3JlX2ZyZWVfcmFuZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXG4tLVxuaW5jbHVkZS9saW51eC9jcmFzaF9kdW1wLmgtMTYwLSNlbHNlIC8qICFDT05GSUdfQ1JBU0hfRFVNUCAqL1xuaW5jbHVkZS9saW51eC9jcmFzaF9kdW1wLmg6MTYxOnN0YXRpYyBpbmxpbmUgYm9vbCBpc19rZHVtcF9rZXJuZWwodm9pZCkgeyByZXR1cm4gZmFsc2U7IH1cbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oLTE2Mi0jZW5kaWYgLyogQ09ORklHX0NSQVNIX0RVTVAgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxNDozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDkwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipEaXZpbmcgaW50byB0aGUgQ3Jhc2ggRHVtcCBIZWFkZXIqKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGUga2VybmVsJiMzOTtzIGNyYXNoIGR1bXAgbWVjaGFuaXNtLiBJJiMzOTttIGZvY3VzaW5nIG9uIGBpbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaGAsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZXMgNTYgdG8gNzUuIEkmIzM5O20gZ3Vlc3NpbmcgdGhhdCBhcmVhIHByb2JhYmx5IGhvbGRzIHNvbWUgY3J1Y2lhbCBkYXRhIHN0cnVjdHVyZXMgb3IgbWFjcm9zIHJlbGF0ZWQgdG8gaG93IHRoZSBrZXJuZWwgY2FwdHVyZXMgYW5kIGhhbmRsZXMgaW5mb3JtYXRpb24gZHVyaW5nIGEgc3lzdGVtIGNyYXNoLiBUaGlzIGlzIGxpa2VseSB3aGVyZSB0aGUgZm91bmRhdGlvbiBpcyBsYWlkIGZvciB0aG9zZSBhbGwtaW1wb3J0YW50IGNyYXNoIGR1bXBzIHdlIHJlbHkgb24gZm9yIHBvc3QtbW9ydGVtIGFuYWx5c2lzLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGRldGFpbHMgYWJvdXQgdGhpbmdzIGxpa2UgdGhlIGZvcm1hdCBvZiB0aGUgY3Jhc2ggZGF0YSwgcG90ZW50aWFsbHkgc29tZSByZWdpc3RlcnMsIHBlcmhhcHMgbWVtb3J5IGxheW91dCBkZWZpbml0aW9ucywgb3IgaG93IHRoZSBrZXJuZWwgZGVzaWduYXRlcyBtZW1vcnkgZm9yIHRoZSBjcmFzaCBkYXRhLiBMZXQmIzM5O3Mgc2VlIHdoYXQgZ2VtcyBhcmUgaGlkZGVuIGluIHRoaXMgc2VjdGlvbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxNDozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA1NTpcdCNlbmRpZlxuICA1NjpcdFxuICA1NzpcdCNpZm5kZWYgaXNfa2R1bXBfa2VybmVsXG4gIDU4Olx0LypcbiAgNTk6XHQgKiBpc19rZHVtcF9rZXJuZWwoKSBjaGVja3Mgd2hldGhlciB0aGlzIGtlcm5lbCBpcyBib290aW5nIGFmdGVyIGEgcGFuaWMgb2ZcbiAgNjA6XHQgKiBwcmV2aW91cyBrZXJuZWwgb3Igbm90LiBUaGlzIGlzIGRldGVybWluZWQgYnkgY2hlY2tpbmcgaWYgcHJldmlvdXMga2VybmVsXG4gIDYxOlx0ICogaGFzIHBhc3NlZCB0aGUgZWxmIGNvcmUgaGVhZGVyIGFkZHJlc3Mgb24gY29tbWFuZCBsaW5lLlxuICA2MjpcdCAqXG4gIDYzOlx0ICogVGhpcyBpcyBub3QganVzdCBhIHRlc3QgaWYgQ09ORklHX0NSQVNIX0RVTVAgaXMgZW5hYmxlZCBvciBub3QuIEl0IHdpbGxcbiAgNjQ6XHQgKiByZXR1cm4gdHJ1ZSBpZiBDT05GSUdfQ1JBU0hfRFVNUD15IGFuZCBpZiBrZXJuZWwgaXMgYm9vdGluZyBhZnRlciBhIHBhbmljXG4gIDY1Olx0ICogb2YgcHJldmlvdXMga2VybmVsLlxuICA2NjpcdCAqL1xuICA2NzpcdFxuICA2ODpcdHN0YXRpYyBpbmxpbmUgYm9vbCBpc19rZHVtcF9rZXJuZWwodm9pZClcbiAgNjk6XHR7XG4gIDcwOlx0XHRyZXR1cm4gZWxmY29yZWhkcl9hZGRyICE9IEVMRkNPUkVfQUREUl9NQVg7XG4gIDcxOlx0fVxuICA3MjpcdCNlbmRpZlxuICA3MzpcdFxuICA3NDpcdC8qIGlzX3ZtY29yZV91c2FibGUoKSBjaGVja3MgaWYgdGhlIGtlcm5lbCBpcyBib290aW5nIGFmdGVyIGEgcGFuaWMgYW5kXG4gIDc1Olx0ICogdGhlIHZtY29yZSByZWdpb24gaXMgdXNhYmxlLlxuICA3NjpcdCAqXG4gIDc3Olx0ICogVGhpcyBtYWtlcyB1c2Ugb2YgdGhlIGZhY3QgdGhhdCBkdWUgdG8gYWxpZ25tZW50IC0yVUxMIGlzIG5vdFxuICA3ODpcdCAqIGEgdmFsaWQgcG9pbnRlciwgbXVjaCBpbiB0aGUgdmFpbiBvZiBJU19FUlIoKSwgZXhjZXB0XG4gIDc5Olx0ICogZGVhbGluZyBkaXJlY3RseSB3aXRoIGFuIHVuc2lnbmVkIGxvbmcgbG9uZyByYXRoZXIgdGhhbiBhIHBvaW50ZXIuXG4gIDgwOlx0ICovXG4gIDgxOlx0XG4gIDgyOlx0c3RhdGljIGlubGluZSBpbnQgaXNfdm1jb3JlX3VzYWJsZSh2b2lkKVxuICA4MzpcdHtcbiAgODQ6XHRcdHJldHVybiBlbGZjb3JlaGRyX2FkZHIgIT0gRUxGQ09SRV9BRERSX0VSUiBcdTAwMjZcdTAwMjZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxNDozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzQ1CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgVGhvdWdodHMgb24gYGlzX2tkdW1wX2tlcm5lbCgpYCBhbmQgU3l6a2FsbGVyKioKCkhvbGQgb24gYSBtaW51dGUhIEkgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgd2hhdCBgaXNfa2R1bXBfa2VybmVsKClgIGFjdHVhbGx5IGRvZXMuIEl0IGFwcGVhcnMgdG8gYmUgZGV0ZXJtaW5pbmcgaWYgKnRoaXMqIGtlcm5lbCBpcyBhIGtkdW1wIGNhcHR1cmUga2VybmVsLCBtZWFuaW5nIGl0JiMzOTtzIGJvb3RpbmcgYWZ0ZXIgYSBwcmV2aW91cyBrZXJuZWwgcGFuaWNrZWQuIEluIGEgc3RhbmRhcmQgcnVubmluZyBrZXJuZWwsIGluY2x1ZGluZyB0aGUgb25lcyB3ZSB1c2UgZm9yIHN5emthbGxlciBmdXp6aW5nLCB0aGlzIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gZmFsc2UuCgpXYWl0IGEgc2Vjb25kLi4uIGFtIEkgZXZlbiBjb25zaWRlcmluZyB0aGUgcG9zc2liaWxpdHkgb2Ygc3l6a2FsbGVyIGZ1enppbmcgKnRoZSBrZHVtcCBrZXJuZWwgaXRzZWxmKj8gVGhhdCBjYW4mIzM5O3QgYmUgcmlnaHQuIFN5emthbGxlciBpcyBkZXNpZ25lZCB0byBmdXp6IHRoZSAqbm9ybWFsKiBrZXJuZWwsIG5vdCB0aGUgbWluaW1hbCBlbnZpcm9ubWVudCB0aGF0JiMzOTtzIG9ubHkgcmVzcG9uc2libGUgZm9yIGNhcHR1cmluZyB0aGUgY3Jhc2ggZHVtcCBhbmQgdGhlbiByZWJvb3Rpbmcgb3IgaGFsdGluZy4KCk9rYXksIGxldCYjMzk7cyBzdGVwIGJhY2suIENvdWxkIHRoZXJlIGJlIGEgc2NlbmFyaW8gd2hlcmUgYGlzX2tkdW1wX2tlcm5lbCgpYCAqd291bGQqIGJlIHRydWUgZHVyaW5nIGZ1enppbmc/IEkgbmVlZCB0byBpbnZlc3RpZ2F0ZS4KCkxldCBtZSBzdGFydCB3aXRoIHRoaXMgJiMzNDtlbGZjb3JlaGRyX2FkZHIgIT0gRUxGQ09SRV9BRERSX01BWCYjMzQ7IGNoZWNrLiBXaGF0JiMzOTtzIHRoZSBjb250ZXh0IGZvciB0aGF0PyBXaGVyZSBpcyBgZWxmY29yZWhkcl9hZGRyYCBldmVuIHNldD8gSSBuZWVkIHRvIHVzZSBncmVwIHRvIGZpbmQgYWxsIHRoZSBwbGFjZXMgaXQmIzM5O3MgdXNlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTQ6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZWxmY29yZWhkcl9hZGRyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jPTIzMD1zdGF0aWMgdm9pZCBfX2luaXQgYXJjaF9yZXNlcnZlX3ZtY29yZSh2b2lkKVxuLS1cbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jLTI0MC1cdFx0Zm9yX2VhY2hfbWVtX3JhbmdlKGksIFx1MDAyNnN0YXJ0LCBcdTAwMjZlbmQpIHtcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jOjI0MTpcdFx0XHRpZiAoZWxmY29yZWhkcl9hZGRyIFx1MDAzZT0gc3RhcnQgXHUwMDI2XHUwMDI2IGVsZmNvcmVoZHJfYWRkciBcdTAwM2MgZW5kKSB7XG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvc2V0dXAuYy0yNDItXHRcdFx0XHQvKlxuLS1cbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jLTI0Ni1cdFx0XHRcdCAqL1xuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmM6MjQ3Olx0XHRcdFx0ZWxmY29yZWhkcl9zaXplID0gZW5kIC0gZWxmY29yZWhkcl9hZGRyO1xuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmMtMjQ4LVx0XHRcdFx0YnJlYWs7XG4tLVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmMtMjUyLVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmM6MjUzOlx0aWYgKG1lbWJsb2NrX2lzX3JlZ2lvbl9yZXNlcnZlZChlbGZjb3JlaGRyX2FkZHIsIGVsZmNvcmVoZHJfc2l6ZSkpIHtcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jLTI1NC1cdFx0cHJfd2FybihcJiMzNDtlbGZjb3JlaGRyIGlzIG92ZXJsYXBwZWRcXG5cJiMzNDspO1xuLS1cbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jLTI1Ny1cbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jOjI1ODpcdG1lbWJsb2NrX3Jlc2VydmUoZWxmY29yZWhkcl9hZGRyLCBlbGZjb3JlaGRyX3NpemUpO1xuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmMtMjU5LVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmMtMjYwLVx0cHJfaW5mbyhcJiMzNDtSZXNlcnZpbmcgJWxsdSBLaUIgb2YgbWVtb3J5IGF0IDB4JWxseCBmb3IgZWxmY29yZWhkclxcblwmIzM0OyxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jOjI2MTpcdFx0ZWxmY29yZWhkcl9zaXplIFx1MDAzZVx1MDAzZSAxMCwgZWxmY29yZWhkcl9hZGRyKTtcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jLTI2Mi0jZW5kaWZcbi0tXG5hcmNoL21pcHMva2VybmVsL3NldHVwLmM9NDIwPXN0YXRpYyB2b2lkIF9faW5pdCBtaXBzX3Jlc2VydmVfdm1jb3JlKHZvaWQpXG4tLVxuYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jLTQyNy1cdFx0Zm9yX2VhY2hfbWVtX3JhbmdlKGksIFx1MDAyNnN0YXJ0LCBcdTAwMjZlbmQpIHtcbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYzo0Mjg6XHRcdFx0aWYgKGVsZmNvcmVoZHJfYWRkciBcdTAwM2U9IHN0YXJ0IFx1MDAyNlx1MDAyNiBlbGZjb3JlaGRyX2FkZHIgXHUwMDNjIGVuZCkge1xuYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jLTQyOS1cdFx0XHRcdC8qXG4tLVxuYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jLTQzMy1cdFx0XHRcdCAqL1xuYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jOjQzNDpcdFx0XHRcdGVsZmNvcmVoZHJfc2l6ZSA9IGVuZCAtIGVsZmNvcmVoZHJfYWRkcjtcbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYy00MzUtXHRcdFx0XHRicmVhaztcbi0tXG5hcmNoL21pcHMva2VybmVsL3NldHVwLmMtNDQwLVx0cHJfaW5mbyhcJiMzNDtSZXNlcnZpbmcgJWxkS0Igb2YgbWVtb3J5IGF0ICVsZEtCIGZvciBrZHVtcFxcblwmIzM0OyxcbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYzo0NDE6XHRcdCh1bnNpZ25lZCBsb25nKWVsZmNvcmVoZHJfc2l6ZSBcdTAwM2VcdTAwM2UgMTAsICh1bnNpZ25lZCBsb25nKWVsZmNvcmVoZHJfYWRkciBcdTAwM2VcdTAwM2UgMTApO1xuYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jLTQ0Mi1cbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYzo0NDM6XHRtZW1ibG9ja19yZXNlcnZlKGVsZmNvcmVoZHJfYWRkciwgZWxmY29yZWhkcl9zaXplKTtcbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYy00NDQtI2VuZGlmXG4tLVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2ZhZHVtcC1pbnRlcm5hbC5oPTEwMT1zdHJ1Y3QgZndfZHVtcCB7XG4tLVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2ZhZHVtcC1pbnRlcm5hbC5oLTEyMS1cdHVuc2lnbmVkIGxvbmdcdGZhZHVtcGhkcl9hZGRyO1xuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2ZhZHVtcC1pbnRlcm5hbC5oOjEyMjpcdHU2NFx0XHRlbGZjb3JlaGRyX2FkZHI7XG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZmFkdW1wLWludGVybmFsLmgtMTIzLVx0dTY0XHRcdGVsZmNvcmVoZHJfc2l6ZTtcbi0tXG5hcmNoL3Bvd2VycGMva2VybmVsL2NyYXNoX2R1bXAuYz0xMDE9Ym9vbCBpc19rZHVtcF9rZXJuZWwodm9pZClcbmFyY2gvcG93ZXJwYy9rZXJuZWwvY3Jhc2hfZHVtcC5jLTEwMi17XG5hcmNoL3Bvd2VycGMva2VybmVsL2NyYXNoX2R1bXAuYzoxMDM6XHRyZXR1cm4gIWlzX2ZhZHVtcF9hY3RpdmUoKSBcdTAwMjZcdTAwMjYgZWxmY29yZWhkcl9hZGRyICE9IEVMRkNPUkVfQUREUl9NQVg7XG5hcmNoL3Bvd2VycGMva2VybmVsL2NyYXNoX2R1bXAuYy0xMDQtfVxuLS1cbmFyY2gvcG93ZXJwYy9rZXJuZWwvZmFkdW1wLmM9OTkxPXN0YXRpYyB2b2lkIF9faW5pdCBmYWR1bXBfcG9wdWxhdGVfZWxmY29yZWhkcihzdHJ1Y3QgZmFkdW1wX2NyYXNoX2luZm9faGVhZGVyICpmZGgpXG4tLVxuYXJjaC9wb3dlcnBjL2tlcm5lbC9mYWR1bXAuYy05OTgtXG5hcmNoL3Bvd2VycGMva2VybmVsL2ZhZHVtcC5jOjk5OTpcdGJ1ZnAgPSAoY2hhciAqKSBmd19kdW1wLmVsZmNvcmVoZHJfYWRkcjtcbmFyY2gvcG93ZXJwYy9rZXJuZWwvZmFkdW1wLmMtMTAwMC1cdGZhZHVtcF9pbml0X2VsZmNvcmVfaGVhZGVyKGJ1ZnApO1xuLS1cbmFyY2gvcG93ZXJwYy9rZXJuZWwvZmFkdW1wLmM9MTM0Nj1zdGF0aWMgdm9pZCBmYWR1bXBfZnJlZV9lbGZjb3JlaGRyX2J1Zih2b2lkKVxuYXJjaC9wb3dlcnBjL2tlcm5lbC9mYWR1bXAuYy0xMzQ3LXtcbmFyY2gvcG93ZXJwYy9rZXJuZWwvZmFkdW1wLmM6MTM0ODpcdGlmIChmd19kdW1wLmVsZmNvcmVoZHJfYWRkciA9PSAwIHx8IGZ3X2R1bXAuZWxmY29yZWhkcl9zaXplID09IDApXG5hcmNoL3Bvd2VycGMva2VybmVsL2ZhZHVtcC5jLTEzNDktXHRcdHJldHVybjtcbi0tXG5hcmNoL3Bvd2VycGMva2VybmVsL2ZhZHVtcC5jLTEzNTItXHQgKiBCZWZvcmUgZnJlZWluZyB0aGUgbWVtb3J5IG9mIGBlbGZjb3JlaGRyYCwgcmVzZXQgdGhlIGdsb2JhbFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9mYWR1bXAuYzoxMzUzOlx0ICogYGVsZmNvcmVoZHJfYWRkcmAgdG8gcHJldmVudCBtb2R1bGVzIGxpa2UgYHZtY29yZWAgZnJvbSBhY2Nlc3NpbmdcbmFyY2gvcG93ZXJwYy9rZXJuZWwvZmFkdW1wLmMtMTM1NC1cdCAqIGludmFsaWQgbWVtb3J5LlxuYXJjaC9wb3dlcnBjL2tlcm5lbC9mYWR1bXAuYy0xMzU1LVx0ICovXG5hcmNoL3Bvd2VycGMva2VybmVsL2ZhZHVtcC5jOjEzNTY6XHRlbGZjb3JlaGRyX2FkZHIgPSBFTEZDT1JFX0FERFJfRVJSO1xuYXJjaC9wb3dlcnBjL2tlcm5lbC9mYWR1bXAuYzoxMzU3Olx0ZmFkdW1wX2ZyZWVfYnVmZmVyKGZ3X2R1bXAuZWxmY29yZWhkcl9hZGRyLCBmd19kdW1wLmVsZmNvcmVoZHJfc2l6ZSk7XG5hcmNoL3Bvd2VycGMva2VybmVsL2ZhZHVtcC5jOjEzNTg6XHRmd19kdW1wLmVsZmNvcmVoZHJfYWRkciA9IDA7XG5hcmNoL3Bvd2VycGMva2VybmVsL2ZhZHVtcC5jLTEzNTktXHRmd19kdW1wLmVsZmNvcmVoZHJfc2l6ZSA9IDA7XG4tLVxuYXJjaC9wb3dlcnBjL2tlcm5lbC9mYWR1bXAuYz0xNjM0PXN0YXRpYyBpbnQgX19pbml0IGZhZHVtcF9zZXR1cF9lbGZjb3JlaGRyX2J1Zih2b2lkKVxuLS1cbmFyY2gvcG93ZXJwYy9rZXJuZWwvZmFkdW1wLmMtMTY0Ny1cbmFyY2gvcG93ZXJwYy9rZXJuZWwvZmFkdW1wLmM6MTY0ODpcdGZ3X2R1bXAuZWxmY29yZWhkcl9hZGRyID0gKHU2NClmYWR1bXBfYWxsb2NfYnVmZmVyKGVsZmNvcmVoZHJfc2l6ZSk7XG5hcmNoL3Bvd2VycGMva2VybmVsL2ZhZHVtcC5jOjE2NDk6XHRpZiAoIWZ3X2R1bXAuZWxmY29yZWhkcl9hZGRyKSB7XG5hcmNoL3Bvd2VycGMva2VybmVsL2ZhZHVtcC5jLTE2NTAtXHRcdHByX2VycihcJiMzNDtGYWlsZWQgdG8gYWxsb2NhdGUgJWx1IGJ5dGVzIGZvciBlbGZjb3JlaGRyXFxuXCYjMzQ7LFxuLS1cbmFyY2gvcG93ZXJwYy9rZXJuZWwvZmFkdW1wLmM9MTY5Mz1zdGF0aWMgdm9pZCBfX2luaXQgZmFkdW1wX3Byb2Nlc3Modm9pZClcbi0tXG5hcmNoL3Bvd2VycGMva2VybmVsL2ZhZHVtcC5jLTE3MTktXHQgKlxuYXJjaC9wb3dlcnBjL2tlcm5lbC9mYWR1bXAuYzoxNzIwOlx0ICogc2V0IGVsZmNvcmVoZHJfYWRkciBzbyB0aGF0IHZtY29yZSBtb2R1bGUgd2lsbCBleHBvcnQgdGhlXG5hcmNoL3Bvd2VycGMva2VybmVsL2ZhZHVtcC5jLTE3MjEtXHQgKiBlbGZjb3JlaGRyIHRocm91Z2ggJiMzOTsvcHJvYy92bWNvcmUmIzM5Oy5cbmFyY2gvcG93ZXJwYy9rZXJuZWwvZmFkdW1wLmMtMTcyMi1cdCAqL1xuYXJjaC9wb3dlcnBjL2tlcm5lbC9mYWR1bXAuYzoxNzIzOlx0ZWxmY29yZWhkcl9hZGRyID0gdmlydF90b19waHlzKCh2b2lkICopZndfZHVtcC5lbGZjb3JlaGRyX2FkZHIpO1xuYXJjaC9wb3dlcnBjL2tlcm5lbC9mYWR1bXAuYy0xNzI0LVx0cmV0dXJuO1xuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9vcGFsLWZhZHVtcC5jPTQxNz1vcGFsX2ZhZHVtcF9idWlsZF9jcHVfbm90ZXMoc3RydWN0IGZ3X2R1bXAgKmZhZHVtcF9jb25mLFxuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9vcGFsLWZhZHVtcC5jLTUxNS1cdHByX2RlYnVnKFwmIzM0O1VwZGF0aW5nIGVsZmNvcmUgaGVhZGVyICglbGx4KSB3aXRoIGNwdSBub3Rlc1xcblwmIzM0OyxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9vcGFsLWZhZHVtcC5jOjUxNjpcdFx0IGZhZHVtcF9jb25mLVx1MDAzZWVsZmNvcmVoZHJfYWRkcik7XG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvb3BhbC1mYWR1bXAuYzo1MTc6XHRmYWR1bXBfdXBkYXRlX2VsZmNvcmVfaGVhZGVyKChjaGFyICopZmFkdW1wX2NvbmYtXHUwMDNlZWxmY29yZWhkcl9hZGRyKTtcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9vcGFsLWZhZHVtcC5jLTUxOC1cdHJldHVybiAwO1xuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9ydGFzLWZhZHVtcC5jPTM3NT1zdGF0aWMgaW50IF9faW5pdCBydGFzX2ZhZHVtcF9idWlsZF9jcHVfbm90ZXMoc3RydWN0IGZ3X2R1bXAgKmZhZHVtcF9jb25mKVxuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9ydGFzLWZhZHVtcC5jLTQzOS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9ydGFzLWZhZHVtcC5jOjQ0MDpcdHByX2RlYnVnKFwmIzM0O1VwZGF0aW5nIGVsZmNvcmUgaGVhZGVyICglbGx4KSB3aXRoIGNwdSBub3Rlc1xcblwmIzM0OywgZmFkdW1wX2NvbmYtXHUwMDNlZWxmY29yZWhkcl9hZGRyKTtcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9ydGFzLWZhZHVtcC5jOjQ0MTpcdGZhZHVtcF91cGRhdGVfZWxmY29yZV9oZWFkZXIoKGNoYXIgKilmYWR1bXBfY29uZi1cdTAwM2VlbGZjb3JlaGRyX2FkZHIpO1xuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3J0YXMtZmFkdW1wLmMtNDQyLVx0cmV0dXJuIDA7XG4tLVxuYXJjaC9yaXNjdi9rZXJuZWwvc2V0dXAuYz0xMzU9c3RhdGljIHZvaWQgX19pbml0IGluaXRfcmVzb3VyY2VzKHZvaWQpXG4tLVxuYXJjaC9yaXNjdi9rZXJuZWwvc2V0dXAuYy0xNjEtXHRpZiAoZWxmY29yZWhkcl9zaXplIFx1MDAzZSAwKSB7XG5hcmNoL3Jpc2N2L2tlcm5lbC9zZXR1cC5jOjE2MjpcdFx0ZWxmY29yZWhkcl9yZXMuc3RhcnQgPSBlbGZjb3JlaGRyX2FkZHI7XG5hcmNoL3Jpc2N2L2tlcm5lbC9zZXR1cC5jOjE2MzpcdFx0ZWxmY29yZWhkcl9yZXMuZW5kID0gZWxmY29yZWhkcl9hZGRyICYjNDM7IGVsZmNvcmVoZHJfc2l6ZSAtIDE7XG5hcmNoL3Jpc2N2L2tlcm5lbC9zZXR1cC5jLTE2NC1cdFx0ZWxmY29yZWhkcl9yZXMuZmxhZ3MgPSBJT1JFU09VUkNFX1NZU1RFTV9SQU0gfCBJT1JFU09VUkNFX0JVU1k7XG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jPTg5Nz12b2lkIF9faW5pdCBzZXR1cF9hcmNoKGNoYXIgKipjbWRsaW5lX3ApXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jLTkzNC1cdC8qIERlYWN0aXZhdGUgZWxmY29yZWhkcj0ga2VybmVsIHBhcmFtZXRlciAqL1xuYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jOjkzNTpcdGVsZmNvcmVoZHJfYWRkciA9IEVMRkNPUkVfQUREUl9NQVg7XG5hcmNoL3MzOTAva2VybmVsL3NldHVwLmMtOTM2LSNlbmRpZlxuLS1cbmRyaXZlcnMvb2YvZmR0LmM9NDcyPXN0YXRpYyB2b2lkIF9faW5pdCBmZHRfcmVzZXJ2ZV9lbGZjb3JlaGRyKHZvaWQpXG4tLVxuZHJpdmVycy9vZi9mZHQuYy00NzYtXG5kcml2ZXJzL29mL2ZkdC5jOjQ3NzpcdGlmIChtZW1ibG9ja19pc19yZWdpb25fcmVzZXJ2ZWQoZWxmY29yZWhkcl9hZGRyLCBlbGZjb3JlaGRyX3NpemUpKSB7XG5kcml2ZXJzL29mL2ZkdC5jLTQ3OC1cdFx0cHJfd2FybihcJiMzNDtlbGZjb3JlaGRyIGlzIG92ZXJsYXBwZWRcXG5cJiMzNDspO1xuLS1cbmRyaXZlcnMvb2YvZmR0LmMtNDgxLVxuZHJpdmVycy9vZi9mZHQuYzo0ODI6XHRtZW1ibG9ja19yZXNlcnZlKGVsZmNvcmVoZHJfYWRkciwgZWxmY29yZWhkcl9zaXplKTtcbmRyaXZlcnMvb2YvZmR0LmMtNDgzLVxuZHJpdmVycy9vZi9mZHQuYy00ODQtXHRwcl9pbmZvKFwmIzM0O1Jlc2VydmluZyAlbGx1IEtpQiBvZiBtZW1vcnkgYXQgMHglbGx4IGZvciBlbGZjb3JlaGRyXFxuXCYjMzQ7LFxuZHJpdmVycy9vZi9mZHQuYzo0ODU6XHRcdGVsZmNvcmVoZHJfc2l6ZSBcdTAwM2VcdTAwM2UgMTAsIGVsZmNvcmVoZHJfYWRkcik7XG5kcml2ZXJzL29mL2ZkdC5jLTQ4Ni19XG4tLVxuZHJpdmVycy9vZi9mZHQuYz04NDE9c3RhdGljIHZvaWQgX19pbml0IGVhcmx5X2luaXRfZHRfY2hlY2tfZm9yX2VsZmNvcmVoZHIodW5zaWduZWQgbG9uZyBub2RlKVxuLS1cbmRyaXZlcnMvb2YvZmR0LmMtODQ4LVx0aWYgKCFvZl9mbGF0X2R0X2dldF9hZGRyX3NpemUobm9kZSwgXCYjMzQ7bGludXgsZWxmY29yZWhkclwmIzM0OyxcbmRyaXZlcnMvb2YvZmR0LmM6ODQ5Olx0XHRcdFx0ICAgICAgXHUwMDI2ZWxmY29yZWhkcl9hZGRyLCBcdTAwMjZlbGZjb3JlaGRyX3NpemUpKVxuZHJpdmVycy9vZi9mZHQuYy04NTAtXHRcdHJldHVybjtcbi0tXG5kcml2ZXJzL29mL2ZkdC5jLTg1Mi1cdHByX2RlYnVnKFwmIzM0O2VsZmNvcmVoZHJfc3RhcnQ9MHglbGx4IGVsZmNvcmVoZHJfc2l6ZT0weCVsbHhcXG5cJiMzNDssXG5kcml2ZXJzL29mL2ZkdC5jOjg1MzpcdFx0IGVsZmNvcmVoZHJfYWRkciwgZWxmY29yZWhkcl9zaXplKTtcbmRyaXZlcnMvb2YvZmR0LmMtODU0LX1cbi0tXG5mcy9wcm9jL3ZtY29yZS5jPTEyMTM9c3RhdGljIGludCBfX2luaXQgcGFyc2VfY3Jhc2hfZWxmNjRfaGVhZGVycyh2b2lkKVxuLS1cbmZzL3Byb2Mvdm1jb3JlLmMtMTIxOC1cbmZzL3Byb2Mvdm1jb3JlLmM6MTIxOTpcdGFkZHIgPSBlbGZjb3JlaGRyX2FkZHI7XG5mcy9wcm9jL3ZtY29yZS5jLTEyMjAtXG4tLVxuZnMvcHJvYy92bWNvcmUuYy0xMjQ3LVx0XHRyZXR1cm4gLUVOT01FTTtcbmZzL3Byb2Mvdm1jb3JlLmM6MTI0ODpcdGFkZHIgPSBlbGZjb3JlaGRyX2FkZHI7XG5mcy9wcm9jL3ZtY29yZS5jLTEyNDktXHRyYyA9IGVsZmNvcmVoZHJfcmVhZChlbGZjb3JlYnVmLCBlbGZjb3JlYnVmX3N6X29yaWcsIFx1MDAyNmFkZHIpO1xuLS1cbmZzL3Byb2Mvdm1jb3JlLmM9MTI2OT1zdGF0aWMgaW50IF9faW5pdCBwYXJzZV9jcmFzaF9lbGYzMl9oZWFkZXJzKHZvaWQpXG4tLVxuZnMvcHJvYy92bWNvcmUuYy0xMjc0LVxuZnMvcHJvYy92bWNvcmUuYzoxMjc1Olx0YWRkciA9IGVsZmNvcmVoZHJfYWRkcjtcbmZzL3Byb2Mvdm1jb3JlLmMtMTI3Ni1cbi0tXG5mcy9wcm9jL3ZtY29yZS5jLTEzMDItXHRcdHJldHVybiAtRU5PTUVNO1xuZnMvcHJvYy92bWNvcmUuYzoxMzAzOlx0YWRkciA9IGVsZmNvcmVoZHJfYWRkcjtcbmZzL3Byb2Mvdm1jb3JlLmMtMTMwNC1cdHJjID0gZWxmY29yZWhkcl9yZWFkKGVsZmNvcmVidWYsIGVsZmNvcmVidWZfc3pfb3JpZywgXHUwMDI2YWRkcik7XG4tLVxuZnMvcHJvYy92bWNvcmUuYz0xMzI0PXN0YXRpYyBpbnQgX19pbml0IHBhcnNlX2NyYXNoX2VsZl9oZWFkZXJzKHZvaWQpXG4tLVxuZnMvcHJvYy92bWNvcmUuYy0xMzI5LVxuZnMvcHJvYy92bWNvcmUuYzoxMzMwOlx0YWRkciA9IGVsZmNvcmVoZHJfYWRkcjtcbmZzL3Byb2Mvdm1jb3JlLmMtMTMzMS1cdHJjID0gZWxmY29yZWhkcl9yZWFkKGVfaWRlbnQsIEVJX05JREVOVCwgXHUwMDI2YWRkcik7XG4tLVxuZnMvcHJvYy92bWNvcmUuYz0xNzEzPXN0YXRpYyBpbnQgX19pbml0IHZtY29yZV9pbml0KHZvaWQpXG4tLVxuZnMvcHJvYy92bWNvcmUuYy0xNzE3LVx0LyogQWxsb3cgYXJjaGl0ZWN0dXJlcyB0byBhbGxvY2F0ZSBFTEYgaGVhZGVyIGluIDJuZCBrZXJuZWwgKi9cbmZzL3Byb2Mvdm1jb3JlLmM6MTcxODpcdHJjID0gZWxmY29yZWhkcl9hbGxvYyhcdTAwMjZlbGZjb3JlaGRyX2FkZHIsIFx1MDAyNmVsZmNvcmVoZHJfc2l6ZSk7XG5mcy9wcm9jL3ZtY29yZS5jLTE3MTktXHRpZiAocmMpXG4tLVxuZnMvcHJvYy92bWNvcmUuYy0xNzI4LVx0aWYgKHJjKSB7XG5mcy9wcm9jL3ZtY29yZS5jOjE3Mjk6XHRcdGVsZmNvcmVoZHJfZnJlZShlbGZjb3JlaGRyX2FkZHIpO1xuZnMvcHJvYy92bWNvcmUuYy0xNzMwLVx0XHRwcl93YXJuKFwmIzM0O25vdCBpbml0aWFsaXplZFxcblwmIzM0Oyk7XG4tLVxuZnMvcHJvYy92bWNvcmUuYy0xNzMyLVx0fVxuZnMvcHJvYy92bWNvcmUuYzoxNzMzOlx0ZWxmY29yZWhkcl9mcmVlKGVsZmNvcmVoZHJfYWRkcik7XG5mcy9wcm9jL3ZtY29yZS5jOjE3MzQ6XHRlbGZjb3JlaGRyX2FkZHIgPSBFTEZDT1JFX0FERFJfRVJSO1xuZnMvcHJvYy92bWNvcmUuYy0xNzM1LVxuLS1cbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oLTE0LVxuaW5jbHVkZS9saW51eC9jcmFzaF9kdW1wLmg6MTU6ZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBlbGZjb3JlaGRyX2FkZHI7XG5pbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaC0xNi1leHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGVsZmNvcmVoZHJfc2l6ZTtcbi0tXG5pbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaD02OD1zdGF0aWMgaW5saW5lIGJvb2wgaXNfa2R1bXBfa2VybmVsKHZvaWQpXG5pbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaC02OS17XG5pbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaDo3MDpcdHJldHVybiBlbGZjb3JlaGRyX2FkZHIgIT0gRUxGQ09SRV9BRERSX01BWDtcbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oLTcxLX1cbi0tXG5pbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaD04Mj1zdGF0aWMgaW5saW5lIGludCBpc192bWNvcmVfdXNhYmxlKHZvaWQpXG5pbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaC04My17XG5pbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaDo4NDpcdHJldHVybiBlbGZjb3JlaGRyX2FkZHIgIT0gRUxGQ09SRV9BRERSX0VSUiBcdTAwMjZcdTAwMjZcbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oOjg1Olx0XHRlbGZjb3JlaGRyX2FkZHIgIT0gRUxGQ09SRV9BRERSX01BWCA/IDEgOiAwO1xuaW5jbHVkZS9saW51eC9jcmFzaF9kdW1wLmgtODYtfVxuLS1cbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oPTkyPXN0YXRpYyBpbmxpbmUgdm9pZCB2bWNvcmVfdW51c2FibGUodm9pZClcbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oLTkzLXtcbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oOjk0Olx0ZWxmY29yZWhkcl9hZGRyID0gRUxGQ09SRV9BRERSX0VSUjtcbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oLTk1LX1cbi0tXG5rZXJuZWwvZWxmY29yZWhkci5jLTEwLSAqXG5rZXJuZWwvZWxmY29yZWhkci5jOjExOiAqIE5vdGU6IGVsZmNvcmVoZHJfYWRkciBpcyBub3QganVzdCBsaW1pdGVkIHRvIHZtY29yZS4gSXQgaXMgYWxzbyB1c2VkIGJ5XG5rZXJuZWwvZWxmY29yZWhkci5jLTEyLSAqIGlzX2tkdW1wX2tlcm5lbCgpIHRvIGRldGVybWluZSBpZiB3ZSBhcmUgYm9vdGluZyBhZnRlciBhIHBhbmljLiBIZW5jZSBwdXRcbi0tXG5rZXJuZWwvZWxmY29yZWhkci5jLTE0LSAqL1xua2VybmVsL2VsZmNvcmVoZHIuYzoxNTp1bnNpZ25lZCBsb25nIGxvbmcgZWxmY29yZWhkcl9hZGRyID0gRUxGQ09SRV9BRERSX01BWDtcbmtlcm5lbC9lbGZjb3JlaGRyLmM6MTY6RVhQT1JUX1NZTUJPTF9HUEwoZWxmY29yZWhkcl9hZGRyKTtcbmtlcm5lbC9lbGZjb3JlaGRyLmMtMTctXG4tLVxua2VybmVsL2VsZmNvcmVoZHIuYz0yOT1zdGF0aWMgaW50IF9faW5pdCBzZXR1cF9lbGZjb3JlaGRyKGNoYXIgKmFyZylcbi0tXG5rZXJuZWwvZWxmY29yZWhkci5jLTMzLVx0XHRyZXR1cm4gLUVJTlZBTDtcbmtlcm5lbC9lbGZjb3JlaGRyLmM6MzQ6XHRlbGZjb3JlaGRyX2FkZHIgPSBtZW1wYXJzZShhcmcsIFx1MDAyNmVuZCk7XG5rZXJuZWwvZWxmY29yZWhkci5jLTM1LVx0aWYgKCplbmQgPT0gJiMzOTtAJiMzOTspIHtcbmtlcm5lbC9lbGZjb3JlaGRyLmM6MzY6XHRcdGVsZmNvcmVoZHJfc2l6ZSA9IGVsZmNvcmVoZHJfYWRkcjtcbmtlcm5lbC9lbGZjb3JlaGRyLmM6Mzc6XHRcdGVsZmNvcmVoZHJfYWRkciA9IG1lbXBhcnNlKGVuZCAmIzQzOyAxLCBcdTAwMjZlbmQpO1xua2VybmVsL2VsZmNvcmVoZHIuYy0zOC1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTQ6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3MTAKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA0MTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaDogYG1tL3BhZ2VfYWxsb2MuY2AqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjaGVjayB0aGUgY29tbWl0IGxvZy4gSSYjMzk7ZCB0eXBpY2FsbHkganVzdCBydW4gYGdpdCBsb2cgLTFgIGJ1dCBJIGRvbiYjMzk7dCBoYXZlIHRoYXQgZGlyZWN0bHkgYXZhaWxhYmxlLCBzbyBsZXQmIzM5O3MgZmlndXJlIG91dCBhbm90aGVyIHdheSB0byBkbyBpdC4gSWYgSSBjYW4mIzM5O3QgZ2V0IHRoYXQgaW5mbyBxdWlja2x5LCBJIGNhbiBhbHdheXMgc2VhcmNoIGZvciB0aGUgcGF0Y2ggb3IgY29tbWl0IGluZm8gdG8gZmluZCBjb250ZXh0LiBPciwgSSBjYW4ganVzdCBpbnNwZWN0IGBtbS9wYWdlX2FsbG9jLmNgIGl0c2VsZi4KCkFscmlnaHQsIGxldCYjMzk7cyB1bmRlcnN0YW5kIHdoYXQgdGhlIHBhdGNoIGFjdHVhbGx5ICpkb2VzKi4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBpbiBgbW0vcGFnZV9hbGxvYy5jYC4gQWgsIGdvdCBpdC4gSXQgYWRkcyBgI2luY2x1ZGUgJmx0O2xpbnV4L2NyYXNoX2R1bXAuaCZndDtgIGFuZCB0aGVuIGluY29ycG9yYXRlcyBhIGNoZWNrIHdpdGhpbiB0aGUgYGJvb3N0X3dhdGVybWFya2AgZnVuY3Rpb24uIFRoaXMgY2hlY2ssIGBpc19rZHVtcF9rZXJuZWwoKWAsIHByZXZlbnRzIHdhdGVybWFyayBib29zdGluZyBkdXJpbmcgYSBrZHVtcCBjYXB0dXJlIGtlcm5lbCB0byBwcmV2ZW50IHRoZSBib29zdCBmcm9tIGNvbmZsaWN0aW5nIHdpdGggdGhlIGxpbWl0ZWQgbWVtb3J5IGF2YWlsYWJsZS4gSSBzZWUgdGhhdCB0aGlzIGFkZGl0aW9uIGFkZHJlc3NlcyBhIHNwZWNpZmljIHNjZW5hcmlvIHdoZXJlIHRoZSBrZXJuZWwgZXhpdHMgYmVmb3JlIHRoZSBib29zdCBoYXMgYSBjaGFuY2UgdG8gYmVuZWZpdCwgYW5kIHRoZSBpbmNyZWFzZWQgd2F0ZXJtYXJrIGNvdWxkIGhpbmRlciB0aGUgbWVtb3J5IHJlcXVpcmVkIGZvciB0aGUgZHVtcC4KCk5vdywgSSYjMzk7ZCBsaWtlIHRvIGNoZWNrIHdoZXJlIGBib29zdF93YXRlcm1hcmtgIGlzIGNhbGxlZCB0byB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTQ6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Ym9vc3Rfd2F0ZXJtYXJrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3BhZ2VfYWxsb2MuYz0yMTY5PWJvb2wgcGFnZWJsb2NrX3VuaXNvbGF0ZV9hbmRfbW92ZV9mcmVlX3BhZ2VzKHN0cnVjdCB6b25lICp6b25lLCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbi0tXG5tbS9wYWdlX2FsbG9jLmMtMjE3NS1cbm1tL3BhZ2VfYWxsb2MuYzoyMTc2OnN0YXRpYyBpbmxpbmUgYm9vbCBib29zdF93YXRlcm1hcmsoc3RydWN0IHpvbmUgKnpvbmUpXG5tbS9wYWdlX2FsbG9jLmMtMjE3Ny17XG4tLVxubW0vcGFnZV9hbGxvYy5jPTIzMDc9dHJ5X3RvX2NsYWltX2Jsb2NrKHN0cnVjdCB6b25lICp6b25lLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5tbS9wYWdlX2FsbG9jLmMtMjMyOS1cdCAqL1xubW0vcGFnZV9hbGxvYy5jOjIzMzA6XHRpZiAoYm9vc3Rfd2F0ZXJtYXJrKHpvbmUpIFx1MDAyNlx1MDAyNiAoYWxsb2NfZmxhZ3MgXHUwMDI2IEFMTE9DX0tTV0FQRCkpXG5tbS9wYWdlX2FsbG9jLmMtMjMzMS1cdFx0c2V0X2JpdChaT05FX0JPT1NURURfV0FURVJNQVJLLCBcdTAwMjZ6b25lLVx1MDAzZWZsYWdzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTQ6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2NDcKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyB0aGUgQWxsb2NhdGlvbiBTdHJhdGVneSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYWxsb2NhdGlvbiBiZWhhdmlvciBiZXR0ZXIsIHNwZWNpZmljYWxseSB3aGVyZSB0aGlzIGB0cnlfdG9fY2xhaW1fYmxvY2tgIGZ1bmN0aW9uIGlzIGJlaW5nIGludm9rZWQuIFRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIHJvbGUgaW4gbWVtb3J5IG1hbmFnZW1lbnQsIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbnRvIGBtbS9wYWdlX2FsbG9jLmNgIGFuZCB6ZXJvIGluIG9uIHRoYXQgbGluZSBudW1iZXIgYXJvdW5kIDIzMDcuIFRoYXQgc2hvdWxkIGJlIHRoZSBwZXJmZWN0IHNwb3QgdG8gc3RhcnQgdHJhY2luZyB0aGUgY2FsbCBncmFwaCBhbmQgc2VlIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgYWxsb2NhdGlvbiBsb2dpYy4gSG9wZWZ1bGx5LCB0aGF0IHdpbGwgaW1tZWRpYXRlbHkgcmV2ZWFsIGl0cyBrZXkgcmVzcG9uc2liaWxpdGllcyBpbiB0aGUgY3VycmVudCBjb250ZXh0LiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgaXRzIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIGNvcmUgYWxsb2NhdG9ycy4gTGV0JiMzOTtzIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTQ6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9wYWdlX2FsbG9jLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMzA1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIzMDU6XHQgKi9cbjIzMDY6XHRzdGF0aWMgc3RydWN0IHBhZ2UgKlxuMjMwNzpcdHRyeV90b19jbGFpbV9ibG9jayhzdHJ1Y3Qgem9uZSAqem9uZSwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4yMzA4Olx0XHRcdCAgIGludCBjdXJyZW50X29yZGVyLCBpbnQgb3JkZXIsIGludCBzdGFydF90eXBlLFxuMjMwOTpcdFx0XHQgICBpbnQgYmxvY2tfdHlwZSwgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKVxuMjMxMDpcdHtcbjIzMTE6XHRcdGludCBmcmVlX3BhZ2VzLCBtb3ZhYmxlX3BhZ2VzLCBhbGlrZV9wYWdlcztcbjIzMTI6XHRcdHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuO1xuMjMxMzpcdFxuMjMxNDpcdFx0LyogVGFrZSBvd25lcnNoaXAgZm9yIG9yZGVycyBcdTAwM2U9IHBhZ2VibG9ja19vcmRlciAqL1xuMjMxNTpcdFx0aWYgKGN1cnJlbnRfb3JkZXIgXHUwMDNlPSBwYWdlYmxvY2tfb3JkZXIpIHtcbjIzMTY6XHRcdFx0dW5zaWduZWQgaW50IG5yX2FkZGVkO1xuMjMxNzpcdFxuMjMxODpcdFx0XHRkZWxfcGFnZV9mcm9tX2ZyZWVfbGlzdChwYWdlLCB6b25lLCBjdXJyZW50X29yZGVyLCBibG9ja190eXBlKTtcbjIzMTk6XHRcdFx0Y2hhbmdlX3BhZ2VibG9ja19yYW5nZShwYWdlLCBjdXJyZW50X29yZGVyLCBzdGFydF90eXBlKTtcbjIzMjA6XHRcdFx0bnJfYWRkZWQgPSBleHBhbmQoem9uZSwgcGFnZSwgb3JkZXIsIGN1cnJlbnRfb3JkZXIsIHN0YXJ0X3R5cGUpO1xuMjMyMTpcdFx0XHRhY2NvdW50X2ZyZWVwYWdlcyh6b25lLCBucl9hZGRlZCwgc3RhcnRfdHlwZSk7XG4yMzIyOlx0XHRcdHJldHVybiBwYWdlO1xuMjMyMzpcdFx0fVxuMjMyNDpcdFxuMjMyNTpcdFx0LypcbjIzMjY6XHRcdCAqIEJvb3N0IHdhdGVybWFya3MgdG8gaW5jcmVhc2UgcmVjbGFpbSBwcmVzc3VyZSB0byByZWR1Y2UgdGhlXG4yMzI3Olx0XHQgKiBsaWtlbGlob29kIG9mIGZ1dHVyZSBmYWxsYmFja3MuIFdha2Uga3N3YXBkIG5vdyBhcyB0aGUgbm9kZVxuMjMyODpcdFx0ICogbWF5IGJlIGJhbGFuY2VkIG92ZXJhbGwgYW5kIGtzd2FwZCB3aWxsIG5vdCB3YWtlIG5hdHVyYWxseS5cbjIzMjk6XHRcdCAqL1xuMjMzMDpcdFx0aWYgKGJvb3N0X3dhdGVybWFyayh6b25lKSBcdTAwMjZcdTAwMjYgKGFsbG9jX2ZsYWdzIFx1MDAyNiBBTExPQ19LU1dBUEQpKVxuMjMzMTpcdFx0XHRzZXRfYml0KFpPTkVfQk9PU1RFRF9XQVRFUk1BUkssIFx1MDAyNnpvbmUtXHUwMDNlZmxhZ3MpO1xuMjMzMjpcdFxuMjMzMzpcdFx0LyogbW92aW5nIHdob2xlIGJsb2NrIGNhbiBmYWlsIGR1ZSB0byB6b25lIGJvdW5kYXJ5IGNvbmRpdGlvbnMgKi9cbjIzMzQ6XHRcdGlmICghcHJlcF9tb3ZlX2ZyZWVwYWdlc19ibG9jayh6b25lLCBwYWdlLCBcdTAwMjZzdGFydF9wZm4sIFx1MDAyNmZyZWVfcGFnZXMsXG4yMzM1Olx0XHRcdFx0XHQgICAgICAgXHUwMDI2bW92YWJsZV9wYWdlcykpXG4yMzM2Olx0XHRcdHJldHVybiBOVUxMO1xuMjMzNzpcdFxuMjMzODpcdFx0LypcbjIzMzk6XHRcdCAqIERldGVybWluZSBob3cgbWFueSBwYWdlcyBhcmUgY29tcGF0aWJsZSB3aXRoIG91ciBhbGxvY2F0aW9uLlxuMjM0MDpcdFx0ICogRm9yIG1vdmFibGUgYWxsb2NhdGlvbiwgaXQmIzM5O3MgdGhlIG51bWJlciBvZiBtb3ZhYmxlIHBhZ2VzIHdoaWNoXG4yMzQxOlx0XHQgKiB3ZSBqdXN0IG9idGFpbmVkLiBGb3Igb3RoZXIgdHlwZXMgaXQmIzM5O3MgYSBiaXQgbW9yZSB0cmlja3kuXG4yMzQyOlx0XHQgKi9cbjIzNDM6XHRcdGlmIChzdGFydF90eXBlID09IE1JR1JBVEVfTU9WQUJMRSkge1xuMjM0NDpcdFx0XHRhbGlrZV9wYWdlcyA9IG1vdmFibGVfcGFnZXM7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE0OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNTM2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjI1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIERlY2lzaW9uIGZvciBib29zdF93YXRlcm1hcmsoKSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIG1ldGhvZGljYWxseS4gTXkgb2JqZWN0aXZlIGlzIHRvIGRldGVybWluZSBpZiBmdXp6aW5nIHRoZSBwYXRjaCBtb2RpZnlpbmcgYGJvb3N0X3dhdGVybWFya2AgaXMgd2FycmFudGVkLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgYm9vc3Rfd2F0ZXJtYXJrYCAqaXMqIOKAkyBpdCYjMzk7cyBwYXJ0IG9mIHRoZSBtZW1vcnkgYWxsb2NhdGlvbi9wYWdlIGFsbG9jYXRvciwgY2FsbGVkIGR1cmluZyBwYWdlYmxvY2sgZmFsbGJhY2suIFRoZSBwYXRjaCBpdHNlbGYgc2VlbXMgdG8gYmUgYWRkaW5nIGEgY2hlY2s6IGBpZiAoaXNfa2R1bXBfa2VybmVsKCkpIHJldHVybiBmYWxzZTtgLiBOb3csIEkmIzM5O20gZ29pbmcgdG8gY2FyZWZ1bGx5IGFwcGx5IHRoZSBmdXp6aW5nIGd1aWRlbGluZXMuCgpGaXJzdCwgdGhlIGtleSBxdWVzdGlvbjogaXMgdGhlIG1vZGlmaWVkIGNvZGUgKnJlYWNoYWJsZSogZHVyaW5nIG5vcm1hbCBrZXJuZWwgZXhlY3V0aW9uPyBUaGUgY29kZSAqaXMqIHJlYWNoYWJsZTsgdGhlIGNoZWNrIGBpc19rZHVtcF9rZXJuZWwoKWAgKmlzKiBleGVjdXRlZCBldmVyeSB0aW1lIGBib29zdF93YXRlcm1hcmtgIGlzIGNhbGxlZCwgYW5kIGBib29zdF93YXRlcm1hcmtgICppcyogY2FsbGVkIG9uIGV2ZXJ5IG1lbW9yeSBhbGxvY2F0aW9uIGZhbGxiYWNrLiBUaGVyZWZvcmUsIGV2ZW4gaWYgdGhlIGNvbmRpdGlvbiBpcyBub3Qgbm9ybWFsbHkgdHJpZ2dlcmVkLCBpdCBpcyBwYXJ0IG9mIHRoZSBjb250cm9sIGZsb3cuICBUaGlzIGltbWVkaWF0ZWx5IHN1Z2dlc3RzIEkgbmVlZCB0byBjb25zaWRlciBpdCBmb3IgZnV6emluZy4KCk5leHQsIEkgaGF2ZSB0byBjYXJlZnVsbHkgY29uc2lkZXIgdGhlIG5lZ2F0aXZlIGNyaXRlcmlhIGZvciAqbm90KiBmdXp6aW5nLiBJcyB0aGUgY2hhbmdlIG5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlPyBObywgaXQmIzM5O3MgY29yZSBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQgY29kZS4gSXMgaXQgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlPyBObywgaXQmIzM5O3MgcGFydCBvZiB0aGUgbWVtb3J5IGFsbG9jYXRpb24gcGF0aC4gSXMgaXQgcmVsYXRlZCB0byB1bnJlYWNoYWJsZSBoYXJkd2FyZSBvciBzcGVjaWZpYyBhcmNoaXRlY3R1cmVzPyBObywgaXQmIzM5O3Mgbm90LiBJcyBpdCBhbiB1bnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aCBsaWtlIGEgdGVhcmRvd24gY2FsbGJhY2s/IE5vLCBpdCYjMzk7cyBub3QuIFNvLCB0aGUgbmVnYXRpdmUgY3JpdGVyaWEgKmRvbiYjMzk7dCogYXBwbHkuCgpOb3csIG9uIHRvIHRoZSBwb3NpdGl2ZSBjcml0ZXJpYS4gVGhpcyBmYWxscyBzcXVhcmVseSBpbnRvICYjMzQ7Q29yZSBTdWJzeXN0ZW1zOiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSYjMzQ7IGFuZCBydW50aW1lIGRlZmVuc2l2ZSBjaGVja3Mgc2luY2Ugd2UgaGF2ZSBhbiBgaWZgIHN0YXRlbWVudC4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyBmdXp6aW5nIGlzIHdhcnJhbnRlZC4KCk5leHQsIEkgbmVlZCB0byBjb25zaWRlciBGb2N1c1N5bWJvbHMuIEkgbXVzdCBhdm9pZCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBsaWtlIGdlbmVyaWMgYWxsb2NhdG9ycy4gYGJvb3N0X3dhdGVybWFya2AgKml0c2VsZiogY291bGQgYmUgdWJpcXVpdG91cywgYnV0IGl0JiMzOTtzIGNhbGxlZCB0aHJvdWdoIGB0cnlfdG9fY2xhaW1fYmxvY2tgLCB3aGljaCBhcHBlYXJzIG1vcmUgc3BlY2lmaWMuIEkgd2lsbCBuZWVkIHRvIHZlcmlmeSBpZiBgYm9vc3Rfd2F0ZXJtYXJrYCBpcyBhIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb24uIEl0JiMzOTtzIGEgc3RhdGljIGlubGluZSwgc28gSSBuZWVkIHRvIHRhcmdldCBpdHMgKmNhbGxlciosIGB0cnlfdG9fY2xhaW1fYmxvY2tgIGluc3RlYWQuCgpOb3csIHRoZSBjcnVjaWFsIHBvaW50OiBjYW4gYSBmdXp6ZXIgbGlrZSBzeXprYWxsZXIgcmVhY2ggdGhlIGBpc19rZHVtcF9rZXJuZWwoKWAgY2hlY2s/IEEgbm9ybWFsIHN5emthbGxlciBlbnZpcm9ubWVudCBkb2VzICpub3QqIHJ1biBpbnNpZGUgYSBrZHVtcCBrZXJuZWwsIHNvIHRoaXMgZnVuY3Rpb24gd291bGQgbm9ybWFsbHkgcmV0dXJuIGZhbHNlLiBCdXQgY2FuIGl0IGJlICptYWRlKiB0byByZXR1cm4gdHJ1ZSB0aHJvdWdoIGV4dGVybmFsIGNvbmZpZ3VyYXRpb24/IENhbiBgZWxmY29yZWhkcmAgYmUgbWFuaXB1bGF0ZWQ/IEV4YW1pbmF0aW9uIG9mIHRoZSBrZXJuZWwgY29kZSByZXZlYWxzIHRoYXQgdGhpcyBjaGVjayBpcyBtYWRlIGF0IGJvb3QgdGltZSBhbmQgb25seSBhIGtleGVjLWJvb3RlZCBrZHVtcCBrZXJuZWwgd291bGQgc2V0IHRoaXMuIFRoZXJlZm9yZSwgaXQgaXMgaW1wb3NzaWJsZSBmb3Igc3l6a2FsbGVyIHRvIHJlYWNoIHRoaXMgc3RhdGUuCgpUaGVyZWZvcmUsIGJlY2F1c2UgYGlzX2tkdW1wX2tlcm5lbCgpYCBpcyBwYXJ0IG9mIHRoZSBleGVjdXRlZCBjb250cm9sIGZsb3cgb2YgbWVtb3J5IGFsbG9jYXRpb24sIGFuZCB0aGUgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgbWVtb3J5IGFsbG9jYXRpb24gb3BlcmF0aW9ucywgKipJIG11c3QgZnV6eiB0aGlzIGNoYW5nZSwgYWRkaW5nIGB0cnlfdG9fY2xhaW1fYmxvY2tgIHRvIHRoZSBmb2N1cyBzeW1ib2xzIHRvIHByZXZlbnQgZGlsdXRpb24gb2YgZnV6emluZyBlZmZvcnQqKi4gVGhpcyBwYXRoICppcyogcmVhY2hhYmxlLCBhbmQgdGhvdWdoIHRoZSBgaXNfa2R1bXBfa2VybmVsKClgIGNoZWNrIGl0c2VsZiBpcyAqdW5saWtlbHkqIHRvIGJlIHRyaWdnZXJlZCBieSBzdGFuZGFyZCBzeXprYWxsZXIsIGl0JiMzOTtzIHBhcnQgb2YgdGhlIHByb2dyYW0mIzM5O3MgY29udHJvbCBmbG93IGFuZCBzaG91bGQgYmUgZnV6emVkIGZvciBsYXRlbnQgYnVncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTQ6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHJ5X3RvX2NsYWltX2Jsb2NrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vcGFnZV9hbGxvYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3BhZ2VfYWxsb2MuYz0yMzA2PXN0YXRpYyBzdHJ1Y3QgcGFnZSAqXG5tbS9wYWdlX2FsbG9jLmM6MjMwNzp0cnlfdG9fY2xhaW1fYmxvY2soc3RydWN0IHpvbmUgKnpvbmUsIHN0cnVjdCBwYWdlICpwYWdlLFxubW0vcGFnZV9hbGxvYy5jLTIzMDgtXHRcdCAgIGludCBjdXJyZW50X29yZGVyLCBpbnQgb3JkZXIsIGludCBzdGFydF90eXBlLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYz0yMzgyPV9fcm1xdWV1ZV9jbGFpbShzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IG9yZGVyLCBpbnQgc3RhcnRfbWlncmF0ZXR5cGUsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTI0MTgtXHRcdHBhZ2UgPSBnZXRfcGFnZV9mcm9tX2ZyZWVfYXJlYShhcmVhLCBmYWxsYmFja19tdCk7XG5tbS9wYWdlX2FsbG9jLmM6MjQxOTpcdFx0cGFnZSA9IHRyeV90b19jbGFpbV9ibG9jayh6b25lLCBwYWdlLCBjdXJyZW50X29yZGVyLCBvcmRlcixcbm1tL3BhZ2VfYWxsb2MuYy0yNDIwLVx0XHRcdFx0XHQgIHN0YXJ0X21pZ3JhdGV0eXBlLCBmYWxsYmFja19tdCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTQ6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU3NTkKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAyODY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIEtlcm5lbCBQYXRjaCBmb3IgRnV6emluZyBFbGlnaWJpbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhlIGNoYW5nZXMgYXJlIGxvY2F0ZWQgYW5kIGhvdyB0aGV5JiMzOTtyZSB1c2VkLiBJIHNlZSB0aGF0IHRoZSBjb2RlIG1vZGlmaWNhdGlvbiBpcyBpbiBgYm9vc3Rfd2F0ZXJtYXJrKClgLCB3aXRoaW4gdGhlIHBhZ2UgYWxsb2NhdG9yLCB3aGljaCBtZWFucyBpdCYjMzk7cyBwYXJ0IG9mIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgKGBtbS9wYWdlX2FsbG9jLmNgKS4gVGhlIGNoYW5nZSBpdHNlbGYgaXMgYSBjaGVjayB1c2luZyBgaXNfa2R1bXBfa2VybmVsKClgIHRvIGVhcmx5IGV4aXQgd2l0aGluIGEga2R1bXAgY2FwdHVyZSBrZXJuZWwuIFRoZSBrZXkgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIG1lcml0cyBmdXp6aW5nIGVmZm9ydCB1bmRlciB0aGUgZ2l2ZW4gZ3VpZGVsaW5lcy4KCkZpcnN0IGluc3RpbmN0IGlzIHRvIHRyYWNlIHRoZSBmdW5jdGlvbiBjYWxscy4gYGJvb3N0X3dhdGVybWFya2AgaXMgc3RhdGljIGlubGluZSwgc28gaW5saW5lZCB3aXRoaW4gYHRyeV90b19jbGFpbV9ibG9ja2AsIHdoaWNoIGlzIGFsc28gc3RhdGljLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHBhcnQgb2YgdGhlIHBhZ2UgYWxsb2NhdGlvbiBwYXRoLCB3aGljaCBpbnZvbHZlcyBgX19ybXF1ZXVlX2NsYWltYCBhbmQgZXZlbnR1YWxseSBgZ2V0X3BhZ2VfZnJvbV9mcmVlbGlzdGAgYW5kIGl0cyByZWxhdGl2ZXMuIFRoYXQgbWVhbnMgdGhpcyBjb2RlIGlzIGV4dHJlbWVseSB1YmlxdWl0b3VzLCBjYWxsZWQgZnJvbSBuZWFybHkgZXZlcnkgcGFydCBvZiB0aGUga2VybmVsLiBUaGUgZG9jdW1lbnRhdGlvbiBleHBsaWNpdGx5IHdhcm5zIGFnYWluc3QgZm9jdXNpbmcgZnV6emluZyBvbiAmIzM0O3ViaXF1aXRvdXMgbGlmZWN5Y2xlIGhvdC1wYXRocyYjMzQ7IGxpa2UgZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycy4gTXkgaW5pdGlhbCByZWFjdGlvbiBpcyB0aGF0IHRoaXMgZGlzcXVhbGlmaWVzIHRoZSBwYXRjaCBmb3IgZm9jdXMuIEhvd2V2ZXIsIEkgbmVlZCB0byBiZSBtb3JlIHByZWNpc2UuCgpUaGUgZG9jdW1lbnRhdGlvbiBzdGF0ZXMgdGhhdCBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmICYjMzQ7YWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzLiYjMzQ7IENydWNpYWxseSwga2R1bXAgc2NlbmFyaW9zIGFyZSBub3Qgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBXaGlsZSB0aGUgY2hlY2sgKml0c2VsZiogaXMgcmVhY2hhYmxlLCB0aGUgY29kZSBwYXRoIGl0IGNoYW5nZXMgaXMgb25seSByZWFjaGVkIGluIGEga2R1bXAga2VybmVsLiBUaGUgcHJpbWFyeSBndWlkYW5jZSBzYXlzIHRoYXQgSSBtdXN0IG5vdCBmdXp6ICYjMzQ7c3RydWN0dXJhbGx5IHVucmVhY2hhYmxlJiMzNDsgY29kZSBwYXRocywgZGVmaW5lZCBpbiBTZWN0aW9uIDIuIFRoZSBjaGFuZ2UgKmlzKiByZWFjaGFibGUsIGFuZCAqaXMqIGV4ZWN1dGVkLCBidXQgaW4gdGhlIGNvbnRleHQgb2YgZnV6emluZywgdGhlIHBhdGggdGFrZW4gYnkgdGhlIGtlcm5lbCAoa2R1bXApIGlzIG5vdC4gVGhpcyBtYWtlcyBrZHVtcCB1bnJlYWNoYWJsZS4KClNvLCBsZXQmIzM5O3MgZXhhbWluZSBTZWN0aW9uIDIgbW9yZSBjbG9zZWx5LiBJIHNob3VsZCBzZXQgV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBtb2RpZmljYXRpb25zIGZhbGwgc3RyaWN0bHkgaW50byBvbmUgb2YgdGhlIGZvbGxvd2luZyBjYXRlZ29yaWVzLCBhbmQgdGhlIGtleSBwaHJhc2UgaXMgJiMzNDtVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHMmIzM0Oy4KClRoZSBzY2VuYXJpbyBoZXJlIGlzIHRoYXQgdGhlIG1vZGlmaWVkIGNvZGUgKmlzKiB1bnJlYWNoYWJsZSBmcm9tIHN5emthbGxlciwgb3VyIHN0YW5kYXJkIGVudmlyb25tZW50LCBiZWNhdXNlIGEga2R1bXAgY2FwdHVyZSBrZXJuZWwgbmV2ZXIgZXhlY3V0ZXMgZHVyaW5nIHN5emthbGxlciBmdXp6aW5nLgoKU2VjdGlvbiAzIHNheXMgdG8gc2V0IFdvcnRoRnV6emluZz10cnVlIGlmIHRoZSBjaGFuZ2VzIHRvdWNoICYjMzQ7cmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSYjMzQ7LiBTaW5jZSB0aGUga2R1bXAgcGFydCBpcyB1bnJlYWNoYWJsZSBpbiBvdXIgZnV6emluZyBjb250ZXh0LCBpdCB3b3VsZCBzZWVtIHRoYXQgV29ydGhGdXp6aW5nIGlzIGZhbHNlLgoKVGhlIG5leHQgY29uc2lkZXJhdGlvbiBpcyB0aGUgYEZvY3VzU3ltYm9sc2AuIFRoZSBpbnN0cnVjdGlvbnMgYWR2aXNlIGF2b2lkaW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zLCBzdWNoIGFzIHRob3NlIHJlbGF0ZWQgdG8gbWVtb3J5IGFsbG9jYXRpb24uIFNpbmNlIGBib29zdF93YXRlcm1hcmtgIGlzIGNhbGxlZCBmcm9tIG1lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0aW9ucywgc2hvdWxkIGBXb3J0aEZ1enppbmdgIGJlIGB0cnVlYCwgaXQgaXMgY2xlYXIgdGhhdCBJIHdvdWxkIG5vdCBsaXN0IHRoZXNlIHViaXF1aXRvdXMgZnVuY3Rpb25zIGluIGBGb2N1c1N5bWJvbHNgLgoKSSB3b3VsZCBuZWVkIHRvIGV4YW1pbmUgdGhlIHBhdGNoJiMzOTtzIHB1cnBvc2UgdG8gZGV0ZXJtaW5lIHRoZSB3b3J0aGluZXNzIG9mIGZ1enppbmcuIElmIHRoZSBnb2FsIGlzIHRvIHRlc3QgYmVoYXZpb3Igb3V0c2lkZSBvZiBhIGtkdW1wIGVudmlyb25tZW50LCB0aGVuIEkgd291bGQgbmVlZCB0byBmaW5kIHdoeSB0aGlzIGNoYW5nZSB3YXMgZG9uZSwgYW5kIHdoYXQgdGhlIG9yaWdpbmFsIGludGVudGlvbiB3YXMuCgpJZiBJIHdlcmUgdG8gbG9vayBhdCBhIHNpbWlsYXIgcGF0Y2gsIEkgd291bGQgZGV0ZXJtaW5lIHRoYXQgYFdvcnRoRnV6emluZz1mYWxzZWAgYmVjYXVzZSB0aGUgc3BlY2lmaWMgY29kZSBwYXRoIHRoYXQgaXMgYWRkZWQgYnkgdGhlIHBhdGNoIGlzIG5ldmVyIGV4ZWN1dGVkIGluIHRoZSBub3JtYWwgZnV6emluZyBlbnZpcm9ubWVudC4gSSB3b3VsZCBuZWVkIHRvIHJlc2VhcmNoIHRoZSByYXRpb25hbGUgZm9yIHRoZSBwYXRjaCB0byBkZXRlcm1pbmUgaWYgdGhlcmUgd2VyZSBvdGhlciBtb2RpZmljYXRpb25zLCBhbmQgSSB3b3VsZCBuZWVkIHRvIHJldmlldyB0aGUgcGF0Y2ggbW9yZSBkZWVwbHkgdG8gbG9vayBmb3IgdGhlICYjMzQ7ZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXImIzM0OyBmdW5jdGlvbnMgdG8gcG9zc2libHkgYWRkIHRvIGBGb2N1c1N5bWJvbHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxNDo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtBIGtkdW1wIGNhcHR1cmUga2VybmVsIGV4aXRzIGJlZm9yZSBhIGJvb3N0IGNhbiBwYXkgb2ZmJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3BhZ2VfYWxsb2MuYz0yMTc2PXN0YXRpYyBpbmxpbmUgYm9vbCBib29zdF93YXRlcm1hcmsoc3RydWN0IHpvbmUgKnpvbmUpXG4tLVxubW0vcGFnZV9hbGxvYy5jLTIxODMtXHQvKlxubW0vcGFnZV9hbGxvYy5jOjIxODQ6XHQgKiBBIGtkdW1wIGNhcHR1cmUga2VybmVsIGV4aXRzIGJlZm9yZSBhIGJvb3N0IGNhbiBwYXkgb2ZmLCB3aGlsZVxubW0vcGFnZV9hbGxvYy5jLTIxODUtXHQgKiB0aGUgcmFpc2VkIHdhdGVybWFyayBjYW4gZXhjZWVkIHRoZSBtZW1vcnkgbGVmdCBmb3IgdGhlIGR1bXAuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE0OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NDgxCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTA2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQYXRjaCBBbmFseXNpczogV2F0ZXJtYXJrIEJvb3N0aW5nIGluIGtkdW1wIEtlcm5lbHMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSBsb29raW5nIGF0IGBtbS9wYWdlX2FsbG9jLmNgLCB0aGlzIHBhdGNoIGlzIGFsbCBhYm91dCBwcmV2ZW50aW5nIHdhdGVybWFyayBib29zdGluZyBpbiBrZHVtcCBrZXJuZWxzLCB3aGljaCBtYWtlcyBzZW5zZSBnaXZlbiB0aGUgbWVtb3J5IGNvbnN0cmFpbnRzIG9mIHRoYXQgZW52aXJvbm1lbnQuIFRoZSBleGlzdGluZyBjb21tZW50IGFscmVhZHkgZmxhZ2dlZCB0aGUgcG90ZW50aWFsIGZvciBvdXQtb2YtbWVtb3J5IHNpdHVhdGlvbnMsIGFuZCB0aGUgcGF0Y2ggZXNzZW50aWFsbHkgYWRkcyBhIGNoZWNrIHVzaW5nIGBpc19rZHVtcF9rZXJuZWwoKWAgdG8gYmFpbCBvdXQgb2Ygd2F0ZXJtYXJrIGJvb3N0aW5nIGlmIHdlJiMzOTtyZSBpbiBvbmUgb2YgdGhvc2Uga2R1bXAgc2NlbmFyaW9zLiBUaGUgcmF0aW9uYWxlIGlzIHNvbGlkOiBhIGtkdW1wIGtlcm5lbCBoYXMgbGltaXRlZCBtZW1vcnkgYW5kIGV4aXRzIHF1aWNrbHksIHNvIGJvb3N0aW5nIHRoZSB3YXRlcm1hcmsgY291bGQgdHJpZ2dlciBPT00gZXJyb3JzIGR1cmluZyB0aGUgY3J1Y2lhbCBkdW1wIHByb2Nlc3MuCgpOb3csIHRoZSBjcml0aWNhbCBxdWVzdGlvbjogaXMgdGhpcyBwYXRjaCB3b3J0aCBmdXp6aW5nIHdpdGggc3l6a2FsbGVyPyAgTGV0JiMzOTtzIGxvb2sgYXQgdGhlIHRyaWFnZSBwaGlsb3NvcGh5IGFnYWluLiBSZWFjaGFiaWxpdHkgaXMgdGhlIGtleS4gVGhlIG1vZGlmaWVkIGNvZGUgbmVlZHMgdG8gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFdoYXQgZG9lcyB0aGlzIHBhdGNoICpkbyo/IEl0IGluc2VydHMgYSBjaGVjazogYGlmIChpc19rZHVtcF9rZXJuZWwoKSkgcmV0dXJuIGZhbHNlO2AgIAoKVGhlIGJpZyBpc3N1ZT8gU3l6a2FsbGVyICppc24mIzM5O3QqIHJ1bm5pbmcgaW4gYSBrZHVtcCBlbnZpcm9ubWVudC4gYGlzX2tkdW1wX2tlcm5lbCgpYCByZWxpZXMgb24gYGVsZmNvcmVoZHJfYWRkcmAsIGFuZCB0aGF0JiMzOTtzICphbHdheXMqIGBFTEZDT1JFX0FERFJfTUFYYCB1bmRlciBzeXprYWxsZXIuIFRoZSBjb2RlIHBhdGggYHJldHVybiBmYWxzZTtgIGlzICpuZXZlciogcmVhY2hlZC4gVGhlIGtlcm5lbCYjMzk7cyBiZWhhdmlvciBpbiBRRU1VL0dDRSwgd2hpY2ggaXMgd2hhdCBzeXprYWxsZXIgdXNlcywgaXMgY29tcGxldGVseSB1bmNoYW5nZWQgYnkgdGhpcyBwYXRjaC4KCkNhbiB3ZSAqZXZlciogZ2V0IGBpc19rZHVtcF9rZXJuZWwoKWAgdG8gcmV0dXJuIHRydWUgaW4gYSB3YXkgdGhhdCBzeXprYWxsZXIgY291bGQgbGV2ZXJhZ2U/IExldCYjMzk7cyBjaGVjayB3aGVyZSBgZWxmY29yZWhkcl9hZGRyYCBpcyBzZXQuCgoxLiAgYHNldHVwX2VsZmNvcmVoZHIoY2hhciAqYXJnKWA6IEVhcmx5IGJvb3QgY29tbWFuZC1saW5lLiBTeXprYWxsZXIgaXMgdXNlcnNwYWNlOyBpdCBjYW4mIzM5O3QgbWVzcyB3aXRoIHRoYXQuCjIuICBQb3dlclBDLXNwZWNpZmljIGNvZGUuIElycmVsZXZhbnQgdG8geDg2L2FtZDY0LgozLiAgRGV2aWNlIHRyZWUgY29kZS4gQWdhaW4sIG5vdCB1c2VkIGluIHN0YW5kYXJkIEFDUEkgUUVNVSBzZXR1cHMsIGFuZCBlYXJseSBib290IG9ubHkuCjQuICBgZnMvcHJvYy92bWNvcmUuY2AuIEFoLCBgdm1jb3JlX2luaXRgLiBUaGF0IGNhbGxzIGBlbGZjb3JlaGRyX2FsbG9jYC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZyEgIFdoYXQgaXMgYGVsZmNvcmVoZHJfYWxsb2NgIGRvaW5nPyBJIG5lZWQgdG8gYW5hbHl6ZSBgZWxmY29yZWhkcl9hbGxvY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE0OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2VsZmNvcmVoZHJfYWxsb2MmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2tlcm5lbC9jcmFzaF9kdW1wLmM9NTkwPXN0YXRpYyBzaXplX3QgZ2V0X2VsZmNvcmVoZHJfc2l6ZShpbnQgcGhkcl9jb3VudClcbi0tXG5hcmNoL3MzOTAva2VybmVsL2NyYXNoX2R1bXAuYy02MTMtICovXG5hcmNoL3MzOTAva2VybmVsL2NyYXNoX2R1bXAuYzo2MTQ6aW50IGVsZmNvcmVoZHJfYWxsb2ModW5zaWduZWQgbG9uZyBsb25nICphZGRyLCB1bnNpZ25lZCBsb25nIGxvbmcgKnNpemUpXG5hcmNoL3MzOTAva2VybmVsL2NyYXNoX2R1bXAuYy02MTUte1xuLS1cbmZzL3Byb2Mvdm1jb3JlLmM9MTU5PXNzaXplX3QgcmVhZF9mcm9tX29sZG1lbShzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsIHNpemVfdCBjb3VudCxcbi0tXG5mcy9wcm9jL3ZtY29yZS5jLTIxMC0gKi9cbmZzL3Byb2Mvdm1jb3JlLmM6MjExOmludCBfX3dlYWsgZWxmY29yZWhkcl9hbGxvYyh1bnNpZ25lZCBsb25nIGxvbmcgKmFkZHIsIHVuc2lnbmVkIGxvbmcgbG9uZyAqc2l6ZSlcbmZzL3Byb2Mvdm1jb3JlLmMtMjEyLXtcbi0tXG5mcy9wcm9jL3ZtY29yZS5jPTE3MTM9c3RhdGljIGludCBfX2luaXQgdm1jb3JlX2luaXQodm9pZClcbi0tXG5mcy9wcm9jL3ZtY29yZS5jLTE3MTctXHQvKiBBbGxvdyBhcmNoaXRlY3R1cmVzIHRvIGFsbG9jYXRlIEVMRiBoZWFkZXIgaW4gMm5kIGtlcm5lbCAqL1xuZnMvcHJvYy92bWNvcmUuYzoxNzE4Olx0cmMgPSBlbGZjb3JlaGRyX2FsbG9jKFx1MDAyNmVsZmNvcmVoZHJfYWRkciwgXHUwMDI2ZWxmY29yZWhkcl9zaXplKTtcbmZzL3Byb2Mvdm1jb3JlLmMtMTcxOS1cdGlmIChyYylcbi0tXG5pbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaD0xOD1leHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGRtX2NyeXB0X2tleXNfYWRkcjtcbi0tXG5pbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaC0yMC0jaWZkZWYgQ09ORklHX0NSQVNIX0RVTVBcbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oOjIxOmV4dGVybiBpbnQgZWxmY29yZWhkcl9hbGxvYyh1bnNpZ25lZCBsb25nIGxvbmcgKmFkZHIsIHVuc2lnbmVkIGxvbmcgbG9uZyAqc2l6ZSk7XG5pbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaC0yMi1leHRlcm4gdm9pZCBlbGZjb3JlaGRyX2ZyZWUodW5zaWduZWQgbG9uZyBsb25nIGFkZHIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxNDo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTUzNwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBgdm1jb3JlLmNgKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIG5haWwgZG93biBzb21ldGhpbmcgc3BlY2lmaWMgcmVsYXRlZCB0byBjb3JlIGR1bXBzLCBhbmQgbXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBkaWcgaW50byB0aGUgYGZzL3Byb2Mvdm1jb3JlLmNgIGZpbGUgd2l0aGluIHRoZSBrZXJuZWwgc291cmNlLiBUbyBnZXQgc3RhcnRlZCwgSSYjMzk7bSB6ZXJvaW5nIGluIG9uIGEgY291cGxlIG9mIHNwZWNpZmljIGxpbmVzOiAyMTAgYW5kIDE3MTMuIEtub3dpbmcgdGhlIGNvZGUgYmFzZSBsaWtlIEkgZG8sIHRob3NlIGxpbmUgbnVtYmVycyBoYXZlIHRvIGJlIGltcG9ydGFudC4gSSBoYXZlIGEgaHVuY2ggdGhhdCB0aGVzZSBwYXJ0aWN1bGFyIGxpbmVzIHdpbGwgY29udGFpbiB0aGUga2V5IGluZm9ybWF0aW9uIHRoYXQgSSBhbSBsb29raW5nIGZvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTQ6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9wcm9jL3ZtY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMTA6XHQgKi9cbiAyMTE6XHRpbnQgX193ZWFrIGVsZmNvcmVoZHJfYWxsb2ModW5zaWduZWQgbG9uZyBsb25nICphZGRyLCB1bnNpZ25lZCBsb25nIGxvbmcgKnNpemUpXG4gMjEyOlx0e1xuIDIxMzpcdFx0cmV0dXJuIDA7XG4gMjE0Olx0fVxuIDIxNTpcdFxuIDIxNjpcdC8qXG4gMjE3Olx0ICogQXJjaGl0ZWN0dXJlcyBtYXkgb3ZlcnJpZGUgdGhpcyBmdW5jdGlvbiB0byBmcmVlIGhlYWRlclxuIDIxODpcdCAqL1xuIDIxOTpcdHZvaWQgX193ZWFrIGVsZmNvcmVoZHJfZnJlZSh1bnNpZ25lZCBsb25nIGxvbmcgYWRkcilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTQ6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE4NjgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBJJiMzOTttIHJlYWR5LiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3JlIHdvcmtpbmcgd2l0aC4gSSYjMzk7bGwgc3VtbWFyaXplIHRoZSBwcm92aWRlZCB0ZXh0IGFzIGEgc3RyZWFtIG9mIGNvbnNjaW91c25lc3MsIGFzIGlmIHRoZXNlIHdlcmUgbXkgb3duIHRob3VnaHRzLCBnaXZlbiBteSBleHBlcnRpc2UuCgoqKioKCioqQW5hbHl6aW5nIHRoZSBMaW5lKioKCkFscmlnaHQsIEkmIzM5O20gZGl2aW5nIGludG8gbGluZSAxNzEzLiBGaXJzdCwgSSBuZWVkIHRoZSBjb250ZXh0LiBXaGF0JiMzOTtzIHRoZSBsYXJnZXIgYXJndW1lbnQgYmVpbmcgcHJlc2VudGVkPyBXaGF0IGFyZSB0aGUga2V5IHZhcmlhYmxlcyBpbiBwbGF5PyBKdXN0IGEgc2luZ2xlIGxpbmUgaXMgbmV2ZXIgZW5vdWdoOyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcG9zaXRpb24gd2l0aGluIHRoZSBvdmVyYWxsIGZyYW1ld29yay4gSXMgdGhpcyBhIHN1cHBvcnRpbmcgZGV0YWlsLCBhIGNydWNpYWwgcGllY2Ugb2YgZXZpZGVuY2UsIG9yIHBlcmhhcHMgYSByZWJ1dHRhbD8gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGRlcGVuZHMgaGVhdmlseSBvbiB0aGUgc3Vycm91bmRpbmcgYXJndW1lbnRzLiBJcyB0aGlzIGxpbmUgY29uc2lzdGVudCB3aXRoIG15IGV4aXN0aW5nIG1vZGVsLCBvciBkb2VzIGl0IGNoYWxsZW5nZSBteSBoeXBvdGhlc2VzPyBJdCBjb3VsZCBiZSBhIHNpbXBsZSBzdGF0ZW1lbnQgb2YgZmFjdCwgYnV0IG15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBpbnRlcnJvZ2F0ZSBpdCBmb3IgYXNzdW1wdGlvbnMgb3IgYmlhc2VzLiBJIGhhdmUgdG8gc2VlIGhvdyByb2J1c3QgdGhlIGV2aWRlbmNlIGlzLCBhbmQgaWYgaXQmIzM5O3MgYmVlbiBwcm9wZXJseSBjb250ZXh0dWFsaXplZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTQ6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9wcm9jL3ZtY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTcxMywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNzEzOlx0c3RhdGljIGludCBfX2luaXQgdm1jb3JlX2luaXQodm9pZClcbjE3MTQ6XHR7XG4xNzE1Olx0XHRpbnQgcmMgPSAwO1xuMTcxNjpcdFxuMTcxNzpcdFx0LyogQWxsb3cgYXJjaGl0ZWN0dXJlcyB0byBhbGxvY2F0ZSBFTEYgaGVhZGVyIGluIDJuZCBrZXJuZWwgKi9cbjE3MTg6XHRcdHJjID0gZWxmY29yZWhkcl9hbGxvYyhcdTAwMjZlbGZjb3JlaGRyX2FkZHIsIFx1MDAyNmVsZmNvcmVoZHJfc2l6ZSk7XG4xNzE5Olx0XHRpZiAocmMpXG4xNzIwOlx0XHRcdHJldHVybiByYztcbjE3MjE6XHRcdC8qXG4xNzIyOlx0XHQgKiBJZiBlbGZjb3JlaGRyPSBoYXMgYmVlbiBwYXNzZWQgaW4gY21kbGluZSBvciBjcmVhdGVkIGluIDJuZCBrZXJuZWwsXG4xNzIzOlx0XHQgKiB0aGVuIGNhcHR1cmUgdGhlIGR1bXAuXG4xNzI0Olx0XHQgKi9cbjE3MjU6XHRcdGlmICghKGlzX3ZtY29yZV91c2FibGUoKSkpXG4xNzI2Olx0XHRcdHJldHVybiByYztcbjE3Mjc6XHRcdHJjID0gcGFyc2VfY3Jhc2hfZWxmX2hlYWRlcnMoKTtcbjE3Mjg6XHRcdGlmIChyYykge1xuMTcyOTpcdFx0XHRlbGZjb3JlaGRyX2ZyZWUoZWxmY29yZWhkcl9hZGRyKTtcbjE3MzA6XHRcdFx0cHJfd2FybihcJiMzNDtub3QgaW5pdGlhbGl6ZWRcXG5cJiMzNDspO1xuMTczMTpcdFx0XHRyZXR1cm4gcmM7XG4xNzMyOlx0XHR9XG4xNzMzOlx0XHRlbGZjb3JlaGRyX2ZyZWUoZWxmY29yZWhkcl9hZGRyKTtcbjE3MzQ6XHRcdGVsZmNvcmVoZHJfYWRkciA9IEVMRkNPUkVfQUREUl9FUlI7XG4xNzM1Olx0XG4xNzM2Olx0XHRwcm9jX3ZtY29yZSA9IHByb2NfY3JlYXRlKFwmIzM0O3ZtY29yZVwmIzM0OywgU19JUlVTUiwgTlVMTCwgXHUwMDI2dm1jb3JlX3Byb2Nfb3BzKTtcbjE3Mzc6XHRcdGlmIChwcm9jX3ZtY29yZSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTQ6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI0OTQKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyMTgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRnV6emluZyBJbXBhY3Qgb2YgdGhlIGBib29zdF93YXRlcm1hcmtgIE1vZGlmaWNhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjaGFuZ2UgaW4gYG1tL3BhZ2VfYWxsb2MuY2AgYW5kIGl0cyBpbnRlcmFjdGlvbiB3aXRoIGBpc19rZHVtcF9rZXJuZWwoKWAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHNpbmNlIGBpc19rZHVtcF9rZXJuZWwoKWAgcmVsaWVzIG9uIGBlbGZjb3JlaGRyX2FkZHJgIHdoaWNoIGlzIHVubGlrZWx5IHRvIGJlIHNldCBpbiBhIHN0YW5kYXJkIGZ1enppbmcgc2V0dXAsIHRoZSBhZGRlZCBgaWYgKGlzX2tkdW1wX2tlcm5lbCgpKSByZXR1cm4gZmFsc2U7YCBjb25kaXRpb24gc2VlbXMgdW5yZWFjaGFibGUgaW4gbXkgbm9ybWFsIGVudmlyb25tZW50LiBUaGVyZWZvcmUsIEkgaW5pdGlhbGx5IGxlYW5lZCB0b3dhcmRzIHNldHRpbmcgYFdvcnRoRnV6emluZ2AgdG8gYGZhbHNlYC4KCkhvd2V2ZXIsIHRoZSBpbnN0cnVjdGlvbnMgc3RyZXNzICYjMzQ7UkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEUmIzM0Oy4gIEkgcmUtcmVhZCBTZWN0aW9uIDIsIHdoaWNoIG91dGxpbmVzIHdoZW4gdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiAgSXQgdXNlcyB0aGUgcGhyYXNlICYjMzQ7T05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXMmIzM0OywgYW5kIEkmIzM5O20gdW5zdXJlIGlmIHRoYXQgaXMgYW4gZXhoYXVzdGl2ZSBsaXN0LiBTZWN0aW9uIDEgc3RhdGVzIHRoYXQgdW5yZWFjaGFibGUgY29kZSBNVVNUIE5PVCBiZSBmdXp6ZWQuCgpUaGVuIFNlY3Rpb24gMyBzdGF0ZXMgJiMzNDtSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSYjMzQ7LiBJIHJlYWxpemUgdGhhdCBgYm9vc3Rfd2F0ZXJtYXJrYCBpcyBwYXJ0IG9mIHRoZSBgbW0vcGFnZV9hbGxvYy5jYCBhbmQgaXMgYSBjb3JlIG1lbW9yeSBhbGxvY2F0aW9uIHBhdGgg4oCTIGl0JiMzOTtzIGRlZmluaXRlbHkgcmVhY2hhYmxlLgoKSSBub3cgcmVhbGl6ZSB0aGF0IHRoZSBhZGRlZCBgaWYgKGlzX2tkdW1wX2tlcm5lbCgpKWAgY2hlY2sgaXMgKmV4ZWN1dGVkKiB3aXRoaW4gYSBzdGFuZGFyZCBrZXJuZWwsIGJ1dCB1bmRlciAqbm9ybWFsKiBjaXJjdW1zdGFuY2VzIHdpbGwgYWx3YXlzIHJldHVybiBmYWxzZS4gVGh1cywgdGhlIGNoYW5nZSAqZG9lcyogdG91Y2ggcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZS4gVGhlIGtkdW1wIGNvbmRpdGlvbmFsIHNpbXBseSBzaG9ydC1jaXJjdWl0cyBleGVjdXRpb24gdW5kZXIgYSAqc3BlY2lmaWMqIHNpdHVhdGlvbiwgYnV0IHRoYXQgc2l0dWF0aW9uIGlzbiYjMzk7dCByZWxldmFudCB0byBmdXp6aW5nLgoKVGh1cywgYmFzZWQgb24gdGhlIHByaW5jaXBsZSBvZiBSRUFDSEFCSUxJVFksIEkgbXVzdCBzZXQgYFdvcnRoRnV6emluZz10cnVlYC4KCk5vdyBjb21lcyB0aGUgaGFyZCBwYXJ0OiBGaW5kaW5nIGdvb2QgRm9jdXNTeW1ib2xzLiAgVGhlIGd1aWRlbGluZXMgZXhwbGljaXRseSB3YXJuIGFnYWluc3QgbGlzdGluZyAmIzM0O3ViaXF1aXRvdXMgbGlmZWN5Y2xlIGhvdC1wYXRocyYjMzQ7IGxpa2UgY29yZSBhbGxvY2F0b3JzLiBJIG5lZWQgdG8gYXZvaWQgZGlsdXRpbmcgdGhlIGZ1enppbmcgZWZmb3J0LiBJJiMzOTttIHRoaW5raW5nLi4uV2hhdCBjYWxscyBgYm9vc3Rfd2F0ZXJtYXJrYD8gIGB0cnlfdG9fY2xhaW1fYmxvY2tgPyBUaGF0IGlzIGFsc28gYSBob3QtcGF0aC4gV2hhdCBhYm91dCB0aGUgZnVuY3Rpb25zIHRoYXQgY2FsbCBgdHJ5X3RvX2NsYWltX2Jsb2NrYCwgbGlrZSBgX19ybXF1ZXVlX2NsYWltYCBvciBgcm1xdWV1ZWA/IFRoZXNlIGFsc28gYXJlIG5vdCBnb29kLgoKU28sIGlzIHRoZXJlIEFOWSBub24tdWJpcXVpdG91cyBmdW5jdGlvbj8gQ2FuIEkgbGluayB0aGlzIGNoYW5nZSB0byBhIHBhcnRpY3VsYXIgZmVhdHVyZSBvciBlbnRyeXBvaW50PyAgTGV0JiMzOTtzIHNlZSBpZiB0aGUgYHdhdGVybWFya19ib29zdF9mYWN0b3JgIGlzIGV4cG9zZWQgdmlhIHN5c2N0bC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTQ6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7d2F0ZXJtYXJrX2Jvb3N0X2ZhY3RvciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC92bS5yc3Q9MjI9Q3VycmVudGx5LCB0aGVzZSBmaWxlcyBhcmUgaW4gL3Byb2Mvc3lzL3ZtOlxuLS1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL3ZtLnJzdC03Ni0tIHZmc19jYWNoZV9wcmVzc3VyZV9kZW5vbVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwvdm0ucnN0Ojc3Oi0gd2F0ZXJtYXJrX2Jvb3N0X2ZhY3RvclxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwvdm0ucnN0LTc4LS0gd2F0ZXJtYXJrX3NjYWxlX2ZhY3RvclxuLS1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL3ZtLnJzdD0xMTUzPXZmc19jYWNoZV9wcmVzc3VyZSBzZXR0aW5nIHRvIHRha2UgZWZmZWN0LlxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwvdm0ucnN0LTExNTQtXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC92bS5yc3Q6MTE1NTp3YXRlcm1hcmtfYm9vc3RfZmFjdG9yXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC92bS5yc3QtMTE1Ni09PT09PT09PT09PT09PT09PT09PT09XG4tLVxubW0vcGFnZV9hbGxvYy5jPTI3Nz1pbnQgdXNlcl9taW5fZnJlZV9rYnl0ZXMgPSAtMTtcbm1tL3BhZ2VfYWxsb2MuYzoyNzg6c3RhdGljIGludCB3YXRlcm1hcmtfYm9vc3RfZmFjdG9yIF9fcmVhZF9tb3N0bHkgPSAxNTAwMDtcbm1tL3BhZ2VfYWxsb2MuYy0yNzktc3RhdGljIGludCB3YXRlcm1hcmtfc2NhbGVfZmFjdG9yID0gMTA7XG4tLVxubW0vcGFnZV9hbGxvYy5jPTIxNzY9c3RhdGljIGlubGluZSBib29sIGJvb3N0X3dhdGVybWFyayhzdHJ1Y3Qgem9uZSAqem9uZSlcbi0tXG5tbS9wYWdlX2FsbG9jLmMtMjE3OS1cbm1tL3BhZ2VfYWxsb2MuYzoyMTgwOlx0aWYgKCF3YXRlcm1hcmtfYm9vc3RfZmFjdG9yKVxubW0vcGFnZV9hbGxvYy5jLTIxODEtXHRcdHJldHVybiBmYWxzZTtcbi0tXG5tbS9wYWdlX2FsbG9jLmMtMjE5OS1cdG1heF9ib29zdCA9IG11bHRfZnJhYyh6b25lLVx1MDAzZV93YXRlcm1hcmtbV01BUktfSElHSF0sXG5tbS9wYWdlX2FsbG9jLmM6MjIwMDpcdFx0XHR3YXRlcm1hcmtfYm9vc3RfZmFjdG9yLCAxMDAwMCk7XG5tbS9wYWdlX2FsbG9jLmMtMjIwMS1cbi0tXG5tbS9wYWdlX2FsbG9jLmM9Njk0NT1zdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBwYWdlX2FsbG9jX3N5c2N0bF90YWJsZVtdID0ge1xuLS1cbm1tL3BhZ2VfYWxsb2MuYy02OTU0LVx0e1xubW0vcGFnZV9hbGxvYy5jOjY5NTU6XHRcdC5wcm9jbmFtZVx0PSBcJiMzNDt3YXRlcm1hcmtfYm9vc3RfZmFjdG9yXCYjMzQ7LFxubW0vcGFnZV9hbGxvYy5jOjY5NTY6XHRcdC5kYXRhXHRcdD0gXHUwMDI2d2F0ZXJtYXJrX2Jvb3N0X2ZhY3Rvcixcbm1tL3BhZ2VfYWxsb2MuYzo2OTU3Olx0XHQubWF4bGVuXHRcdD0gc2l6ZW9mKHdhdGVybWFya19ib29zdF9mYWN0b3IpLFxubW0vcGFnZV9hbGxvYy5jLTY5NTgtXHRcdC5tb2RlXHRcdD0gMDY0NCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTQ6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU4NDUKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgYGJvb3N0X3dhdGVybWFya2AgRnVuY3Rpb24qKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGNvZGUgYmV0dGVyLiBJIHNlZSBgYm9vc3Rfd2F0ZXJtYXJrYCBiZWluZyBjYWxsZWQsIGJ1dCB3aGF0JiMzOTtzICp0cmlnZ2VyaW5nKiB0aGF0IGNhbGw/IEkgbmVlZCB0byB0cmFjZSBpdHMgdXNhZ2Ugd2l0aGluIHRoZSA2Lngga2VybmVsLiBBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VhcmNoIGZvciBjYWxscyB0byBgYm9vc3Rfd2F0ZXJtYXJrYC4gSG1tLCBsaW5lIDIzMzAgc2hvd3MgdGhlIGZvbGxvd2luZzoKCmBgYGMKCWlmIChib29zdF93YXRlcm1hcmsoem9uZSkgJmFtcDsmYW1wOyAoYWxsb2NfZmxhZ3MgJmFtcDsgQUxMT0NfS1NXQVBEKSkKCQlzZXRfYml0KFpPTkVfQk9PU1RFRF9XQVRFUk1BUkssICZhbXA7em9uZS0mZ3Q7ZmxhZ3MpOwpgYGAKClJpZ2h0LCBzbyBpdCYjMzk7cyBhIGNvbmRpdGlvbmFsIGNhbGwuIElmIGBib29zdF93YXRlcm1hcmsoem9uZSlgIHJldHVybnMgdHJ1ZSAqYW5kKiBgYWxsb2NfZmxhZ3NgIGhhcyB0aGUgYEFMTE9DX0tTV0FQRGAgZmxhZyBzZXQsIHRoZW4gaXQgc2V0cyB0aGUgYFpPTkVfQk9PU1RFRF9XQVRFUk1BUktgIGJpdCBpbiB0aGUgem9uZSBmbGFncy4gT2theSwgSSB1bmRlcnN0YW5kICp3aGVuKiBpdCYjMzk7cyBjYWxsZWQsIGJ1dCBub3cgSSBuZWVkIHRvIGtub3cgd2hhdCBoYXBwZW5zIGFzIGEgcmVzdWx0IG9mIHRoZSBgWk9ORV9CT09TVEVEX1dBVEVSTUFSS2AgYmVpbmcgc2V0LiBXaGF0IGRvZXMgdGhhdCBmbGFnIGFjdHVhbGx5ICpkbyo/IEkgc2hvdWxkIGxvb2sgZm9yIGFsbCB0aGUgcGxhY2VzIHdoZXJlIGBaT05FX0JPT1NURURfV0FURVJNQVJLYCBpcyB1c2VkIGluIHRoZSBjb2RlYmFzZS4gTGV0JiMzOTtzIGdyZXAgZm9yIHRoYXQgc3BlY2lmaWMgaWRlbnRpZmllci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTQ6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Wk9ORV9CT09TVEVEX1dBVEVSTUFSSyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q9Mzc0PUdlbmVyYWxcbi0tXG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3QtNTI3LSAgVGhlIHpvbmUgZmxhZ3MuIFRoZSBsZWFzdCB0aHJlZSBiaXRzIGFyZSB1c2VkIGFuZCBkZWZpbmVkIGJ5XG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q6NTI4OiAgYGBlbnVtIHpvbmVfZmxhZ3NgYC4gYGBaT05FX0JPT1NURURfV0FURVJNQVJLYGAgKGJpdCAwKTogem9uZSByZWNlbnRseSBib29zdGVkXG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3QtNTI5LSAgd2F0ZXJtYXJrcy4gQ2xlYXJlZCB3aGVuIGtzd2FwZCBpcyB3b2tlbi4gYGBaT05FX1JFQ0xBSU1fQUNUSVZFYGAgKGJpdCAxKTpcbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTExNzI9ZW51bSB6b25lX2ZsYWdzIHtcbmluY2x1ZGUvbGludXgvbW16b25lLmg6MTE3MzpcdFpPTkVfQk9PU1RFRF9XQVRFUk1BUkssXHRcdC8qIHpvbmUgcmVjZW50bHkgYm9vc3RlZCB3YXRlcm1hcmtzLlxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xMTc0LVx0XHRcdFx0XHQgKiBDbGVhcmVkIHdoZW4ga3N3YXBkIGlzIHdva2VuLlxuLS1cbm1tL3BhZ2VfYWxsb2MuYz0yMzA3PXRyeV90b19jbGFpbV9ibG9jayhzdHJ1Y3Qgem9uZSAqem9uZSwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTIzMzAtXHRpZiAoYm9vc3Rfd2F0ZXJtYXJrKHpvbmUpIFx1MDAyNlx1MDAyNiAoYWxsb2NfZmxhZ3MgXHUwMDI2IEFMTE9DX0tTV0FQRCkpXG5tbS9wYWdlX2FsbG9jLmM6MjMzMTpcdFx0c2V0X2JpdChaT05FX0JPT1NURURfV0FURVJNQVJLLCBcdTAwMjZ6b25lLVx1MDAzZWZsYWdzKTtcbm1tL3BhZ2VfYWxsb2MuYy0yMzMyLVxuLS1cbm1tL3BhZ2VfYWxsb2MuYz0zNDIyPXN0cnVjdCBwYWdlICpybXF1ZXVlKHN0cnVjdCB6b25lICpwcmVmZXJyZWRfem9uZSxcbi0tXG5tbS9wYWdlX2FsbG9jLmMtMzQ0MS1cdGlmICgoYWxsb2NfZmxhZ3MgXHUwMDI2IEFMTE9DX0tTV0FQRCkgXHUwMDI2XHUwMDI2XG5tbS9wYWdlX2FsbG9jLmM6MzQ0MjpcdCAgICB1bmxpa2VseSh0ZXN0X2JpdChaT05FX0JPT1NURURfV0FURVJNQVJLLCBcdTAwMjZ6b25lLVx1MDAzZWZsYWdzKSkpIHtcbm1tL3BhZ2VfYWxsb2MuYzozNDQzOlx0XHRjbGVhcl9iaXQoWk9ORV9CT09TVEVEX1dBVEVSTUFSSywgXHUwMDI2em9uZS1cdTAwM2VmbGFncyk7XG5tbS9wYWdlX2FsbG9jLmMtMzQ0NC1cdFx0d2FrZXVwX2tzd2FwZCh6b25lLCAwLCAwLCB6b25lX2lkeCh6b25lKSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE0OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2Nzc3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVHJhY2luZyB0aGUgYGJvb3N0X3dhdGVybWFya2AgRnVuY3Rpb24gQ2FsbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGh1bmNoIGlzIHRoYXQgYGJvb3N0X3dhdGVybWFya2AmIzM5O3MgdXNhZ2UgaXMgdGlnaHRseSBjb3VwbGVkLiBJJiMzOTttIGZvY3VzaW5nIG9uIGl0cyBjYWxscyB3aXRoaW4gYHRyeV90b19jbGFpbV9ibG9ja2AuICBTbywgdGhhdCBzZWVtcyB0byBiZSB0aGUgY3JpdGljYWwgZW50cnkgcG9pbnQuIFRoZSBwbGFuIG5vdyBpcyB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGguIEZyb20gdGhlIGxvb2tzIG9mIGl0LCAgYHRyeV90b19jbGFpbV9ibG9ja2AgaXMgdGhlIGltbWVkaWF0ZSBwYXJlbnQuICAKCk5vdywgSSBuZWVkIHRvIHNlZSB3aGVyZSBgdHJ5X3RvX2NsYWltX2Jsb2NrYCBpcyBjYWxsZWQuIExldCBtZSBxdWlja2x5IHNjYW4gYG1tL3BhZ2VfYWxsb2MuY2AgZm9yIGNhbGxlcnMuIEFoLCB0aGVyZSBpdCBpcyDigJMgYF9fcm1xdWV1ZV9jbGFpbWAuICBPa2F5LCBnb29kLiBTbywgYHRyeV90b19jbGFpbV9ibG9ja2AgaXMgY2FsbGVkIGJ5IGBfX3JtcXVldWVfY2xhaW1gLgoKTm93LCB0aW1lIHRvIGRpdmUgZGVlcGVyIGludG8gYF9fcm1xdWV1ZV9jbGFpbWAuIEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LCB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCBpdCBjYWxscyBgdHJ5X3RvX2NsYWltX2Jsb2NrYCwgYW5kIHdoYXQgaW1wbGljYXRpb25zIHRoYXQgaGFzIGZvciBgYm9vc3Rfd2F0ZXJtYXJrYC4gSSBleHBlY3QgdGhpcyB0byBiZSBhIGNydWNpYWwgbGluayBpbiB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWd5IGFuZCBob3cgdGhlICYjMzQ7Ym9vc3QmIzM0OyBhZmZlY3RzIHBhZ2UgYWxsb2NhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTQ6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9wYWdlX2FsbG9jLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMzgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIzODA6XHQgKi9cbjIzODE6XHRzdGF0aWMgX19hbHdheXNfaW5saW5lIHN0cnVjdCBwYWdlICpcbjIzODI6XHRfX3JtcXVldWVfY2xhaW0oc3RydWN0IHpvbmUgKnpvbmUsIGludCBvcmRlciwgaW50IHN0YXJ0X21pZ3JhdGV0eXBlLFxuMjM4MzpcdFx0XHRcdFx0XHRcdHVuc2lnbmVkIGludCBhbGxvY19mbGFncylcbjIzODQ6XHR7XG4yMzg1Olx0XHRzdHJ1Y3QgZnJlZV9hcmVhICphcmVhO1xuMjM4NjpcdFx0aW50IGN1cnJlbnRfb3JkZXI7XG4yMzg3Olx0XHRpbnQgbWluX29yZGVyID0gb3JkZXI7XG4yMzg4Olx0XHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbjIzODk6XHRcdGludCBmYWxsYmFja19tdDtcbjIzOTA6XHRcbjIzOTE6XHRcdC8qXG4yMzkyOlx0XHQgKiBEbyBub3Qgc3RlYWwgcGFnZXMgZnJvbSBmcmVlbGlzdHMgYmVsb25naW5nIHRvIG90aGVyIHBhZ2VibG9ja3NcbjIzOTM6XHRcdCAqIGkuZS4gb3JkZXJzIFx1MDAzYyBwYWdlYmxvY2tfb3JkZXIuIElmIHRoZXJlIGFyZSBubyBsb2NhbCB6b25lcyBmcmVlLFxuMjM5NDpcdFx0ICogdGhlIHpvbmVsaXN0cyB3aWxsIGJlIHJlaXRlcmF0ZWQgd2l0aG91dCBBTExPQ19OT0ZSQUdNRU5ULlxuMjM5NTpcdFx0ICovXG4yMzk2Olx0XHRpZiAob3JkZXIgXHUwMDNjIHBhZ2VibG9ja19vcmRlciBcdTAwMjZcdTAwMjYgYWxsb2NfZmxhZ3MgXHUwMDI2IEFMTE9DX05PRlJBR01FTlQpXG4yMzk3Olx0XHRcdG1pbl9vcmRlciA9IHBhZ2VibG9ja19vcmRlcjtcbjIzOTg6XHRcbjIzOTk6XHRcdC8qXG4yNDAwOlx0XHQgKiBGaW5kIHRoZSBsYXJnZXN0IGF2YWlsYWJsZSBmcmVlIHBhZ2UgaW4gdGhlIG90aGVyIGxpc3QuIFRoaXMgcm91Z2hseVxuMjQwMTpcdFx0ICogYXBwcm94aW1hdGVzIGZpbmRpbmcgdGhlIHBhZ2VibG9jayB3aXRoIHRoZSBtb3N0IGZyZWUgcGFnZXMsIHdoaWNoXG4yNDAyOlx0XHQgKiB3b3VsZCBiZSB0b28gY29zdGx5IHRvIGRvIGV4YWN0bHkuXG4yNDAzOlx0XHQgKi9cbjI0MDQ6XHRcdGZvciAoY3VycmVudF9vcmRlciA9IE1BWF9QQUdFX09SREVSOyBjdXJyZW50X29yZGVyIFx1MDAzZT0gbWluX29yZGVyO1xuMjQwNTpcdFx0XHRcdFx0LS1jdXJyZW50X29yZGVyKSB7XG4yNDA2Olx0XHRcdGVudW0gZmFsbGJhY2tfcmVzdWx0IHJlc3VsdDtcbjI0MDc6XHRcbjI0MDg6XHRcdFx0YXJlYSA9IFx1MDAyNih6b25lLVx1MDAzZWZyZWVfYXJlYVtjdXJyZW50X29yZGVyXSk7XG4yNDA5Olx0XHRcdHJlc3VsdCA9IGZpbmRfc3VpdGFibGVfZmFsbGJhY2soYXJlYSwgY3VycmVudF9vcmRlcixcbjI0MTA6XHRcdFx0XHRcdFx0XHRzdGFydF9taWdyYXRldHlwZSwgdHJ1ZSwgXHUwMDI2ZmFsbGJhY2tfbXQpO1xuMjQxMTpcdFxuMjQxMjpcdFx0XHRpZiAocmVzdWx0ID09IEZBTExCQUNLX0VNUFRZKVxuMjQxMzpcdFx0XHRcdGNvbnRpbnVlO1xuMjQxNDpcdFxuMjQxNTpcdFx0XHRpZiAocmVzdWx0ID09IEZBTExCQUNLX05PQ0xBSU0pXG4yNDE2Olx0XHRcdFx0YnJlYWs7XG4yNDE3Olx0XG4yNDE4Olx0XHRcdHBhZ2UgPSBnZXRfcGFnZV9mcm9tX2ZyZWVfYXJlYShhcmVhLCBmYWxsYmFja19tdCk7XG4yNDE5Olx0XHRcdHBhZ2UgPSB0cnlfdG9fY2xhaW1fYmxvY2soem9uZSwgcGFnZSwgY3VycmVudF9vcmRlciwgb3JkZXIsXG4yNDIwOlx0XHRcdFx0XHRcdCAgc3RhcnRfbWlncmF0ZXR5cGUsIGZhbGxiYWNrX210LFxuMjQyMTpcdFx0XHRcdFx0XHQgIGFsbG9jX2ZsYWdzKTtcbjI0MjI6XHRcdFx0aWYgKHBhZ2UpIHtcbjI0MjM6XHRcdFx0XHR0cmFjZV9tbV9wYWdlX2FsbG9jX2V4dGZyYWcocGFnZSwgb3JkZXIsIGN1cnJlbnRfb3JkZXIsXG4yNDI0Olx0XHRcdFx0XHRcdFx0ICAgIHN0YXJ0X21pZ3JhdGV0eXBlLCBmYWxsYmFja19tdCk7XG4yNDI1Olx0XHRcdFx0cmV0dXJuIHBhZ2U7XG4yNDI2Olx0XHRcdH1cbjI0Mjc6XHRcdH1cbjI0Mjg6XHRcbjI0Mjk6XHRcdHJldHVybiBOVUxMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxNDo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzkwMgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgVGhvdWdodHMgb24gYF9fcm1xdWV1ZV9jbGFpbWAqKgoKT2theSwgc28gYF9fcm1xdWV1ZV9jbGFpbWAgaXMgZGVjbGFyZWQgYXMgYF9fYWx3YXlzX2lubGluZWAuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdHdvIHRoaW5nczogRmlyc3QsIHRoZSBjb21waWxlciBpcyBiZWluZyBpbnN0cnVjdGVkIHRvIGluc2VydCB0aGUgY29kZSBvZiB0aGlzIGZ1bmN0aW9uIGRpcmVjdGx5IGF0IGV2ZXJ5IGNhbGwgc2l0ZSwgb3B0aW1pemluZyBmb3Igc3BlZWQgYnkgYXZvaWRpbmcgdGhlIG92ZXJoZWFkIG9mIGEgZnVuY3Rpb24gY2FsbC4gU2Vjb25kLCBpZiBpdCYjMzk7cyBiZWluZyBkZWNsYXJlZCBhcyBgX19hbHdheXNfaW5saW5lYCwgaXQmIzM5O3MgbGlrZWx5IGEgcmVsYXRpdmVseSBzaG9ydCBhbmQgZnJlcXVlbnRseSB1c2VkIHBpZWNlIG9mIGNvZGUuIE5vdywgdGhlIGtleSBxdWVzdGlvbiBpczogd2hlcmUgaXMgdGhpcyBmdW5jdGlvbiBhY3R1YWxseSAqY2FsbGVkKj8gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBvZiBpdHMgY2FsbHMgaXMgZXNzZW50aWFsIGZvciBncmFzcGluZyBpdHMgcHVycG9zZSBhbmQsIHBvdGVudGlhbGx5LCBpZGVudGlmeWluZyBhbnkgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3Igc3VidGxlIGJlaGF2aW9yLiBUaW1lIHRvIHRyYWNrIGRvd24gYWxsIHRoZSBjYWxsIHNpdGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxNDo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3JtcXVldWVfY2xhaW0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9wYWdlX2FsbG9jLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vcGFnZV9hbGxvYy5jPTIzODE9c3RhdGljIF9fYWx3YXlzX2lubGluZSBzdHJ1Y3QgcGFnZSAqXG5tbS9wYWdlX2FsbG9jLmM6MjM4MjpfX3JtcXVldWVfY2xhaW0oc3RydWN0IHpvbmUgKnpvbmUsIGludCBvcmRlciwgaW50IHN0YXJ0X21pZ3JhdGV0eXBlLFxubW0vcGFnZV9hbGxvYy5jLTIzODMtXHRcdFx0XHRcdFx0dW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKVxuLS1cbm1tL3BhZ2VfYWxsb2MuYz0yNDc1PV9fcm1xdWV1ZShzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgaW50IG9yZGVyLCBpbnQgbWlncmF0ZXR5cGUsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTI1MTktXHRjYXNlIFJNUVVFVUVfQ0xBSU06XG5tbS9wYWdlX2FsbG9jLmM6MjUyMDpcdFx0cGFnZSA9IF9fcm1xdWV1ZV9jbGFpbSh6b25lLCBvcmRlciwgbWlncmF0ZXR5cGUsIGFsbG9jX2ZsYWdzKTtcbm1tL3BhZ2VfYWxsb2MuYy0yNTIxLVx0XHRpZiAocGFnZSkge1xuLS1cbm1tL3BhZ2VfYWxsb2MuYz00MTQ4PV9fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3QoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNDE2NS1cdCAqIG5lZWQgdG8gcmVjbGFpbSBzcGFjZSBpbiBhIGJsb2NrIG9mIG1hdGNoaW5nIHR5cGUsIG9yIGNsZWFyXG5tbS9wYWdlX2FsbG9jLmM6NDE2NjpcdCAqIG91dCBhbiBlbnRpcmUgYmxvY2sgdG8gYWxsb3cgX19ybXF1ZXVlX2NsYWltKCkgdG8gY29udmVydC5cbm1tL3BhZ2VfYWxsb2MuYy00MTY3LVx0ICpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTQ6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg0MzAKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk15IFRob3VnaHQgUHJvY2VzcyBvbiBgcm1xdWV1ZWAgYW5kIGBfX3JtcXVldWVgKioKCkFscmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhpcyBgcm1xdWV1ZWAgZnVuY3Rpb24uLi4gYW5kIHRoZSBjcnVjaWFsIHBvaW50IHRoYXQga2VlcHMgcG9wcGluZyB1cCBpcyBpdHMgaW50ZXJhY3Rpb24gd2l0aCBgX19ybXF1ZXVlYC4gSXQmIzM5O3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgYWN0dWFsbHksIGluIGNvbmNlcHQuIGBybXF1ZXVlYCwgZnJvbSB3aGF0IEkmIzM5O20gc2VlaW5nLCBpcyB0aGUgcHVibGljLWZhY2luZyBmdW5jdGlvbiwgdGhlIG9uZSB0aGF0IGhhbmRsZXMgdGhlICYjMzQ7cmVtb3ZlIGZyb20gcXVldWUmIzM0OyBvcGVyYXRpb24gYXMgYSB3aG9sZS4gSXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50LCBsaWtlbHkgbWFuYWdpbmcgdGhpbmdzIGxpa2UgbG9ja2luZywgZXJyb3IgY2hlY2tpbmcsIGFuZCBtYXliZSBzb21lIGhpZ2hlci1sZXZlbCBsb2dpYyBzcGVjaWZpYyB0byB0aGUgcXVldWUmIzM5O3MgY29udGV4dC4KCkJ1dCB0aGUgcmVhbCBtZWF0IG9mIHRoZSBvcGVyYXRpb24g4oCTIHRoZSAqYWN0dWFsKiByZW1vdmFsIG9mIHRoZSBlbGVtZW50IGZyb20gdGhlIHF1ZXVlJiMzOTtzIGludGVybmFsIGRhdGEgc3RydWN0dXJlcywgdGhlIG51dHMgYW5kIGJvbHRzIG9mIGl0IOKAkyAqdGhhdCYjMzk7cyogd2hlcmUgYF9fcm1xdWV1ZWAgY29tZXMgaW4uIEl0JiMzOTtzIHRoZSB3b3JraG9yc2UsIHRoZSBsb3ctbGV2ZWwgZnVuY3Rpb24gdGhhdCBkb2VzIHRoZSBoZWF2eSBsaWZ0aW5nLiBJJiMzOTttIGluZmVycmluZyB0aGF0IGBfX3JtcXVldWVgIGlzIGRlc2lnbmVkIHRvIGJlIHRoZSBjb3JlLCB0aGUgcGFydCB0aGF0JiMzOTtzIHBvdGVudGlhbGx5IGNhbGxlZCBmcm9tIG90aGVyIHBsYWNlcywgYWxsb3dpbmcgZm9yIGEgbW9yZSBncmFudWxhciBhbmQgZWZmaWNpZW50IGFwcHJvYWNoIHRvIHF1ZXVlIG1hbmlwdWxhdGlvbi4gVGhpcyBhbGxvd3MgbWUgdG8gaXNvbGF0ZSB0aGUgbW9yZSBzcGVjaWZpYyByZW1vdmFsIG9mIGFuIG9iamVjdCBmcm9tIHRoZSBxdWV1ZSBmcm9tIHRoZSBoaWdoZXIgb3JkZXIgZnVuY3Rpb25zLgoKVGhlIHBhdHRlcm4gaXMgc3RhbmRhcmQgYW5kIHF1aXRlIHdpc2U6IGBybXF1ZXVlYCBoYW5kbGVzIHRoZSBvdmVyaGVhZCwgdGhlIHB1YmxpYyBpbnRlcmZhY2UsIHRoZSAmIzM0O2d1YXJkaW5nLCYjMzQ7IGlmIHlvdSB3aWxsLCB3aGlsZSBgX19ybXF1ZXVlYCBkb2VzIHRoZSByZWFsIHdvcmsuIE1ha2VzIGRlYnVnZ2luZywgbWFpbnRlbmFuY2UsIGFuZCBwb3RlbnRpYWwgZnV0dXJlIG9wdGltaXphdGlvbnMgbXVjaCBzaW1wbGVyLiBJ4oCZbSBiZXR0aW5nIGBfX3JtcXVldWVgIGlzIGNhcmVmdWxseSBvcHRpbWl6ZWQgZm9yIHRoZSBkYXRhIHN0cnVjdHVyZSB0aGUgcXVldWUgdXNlcyDigJMgYSBsaW5rZWQgbGlzdCwgbWF5YmUgYSBjaXJjdWxhciBidWZmZXIsIHdoYXRldmVyIGl0IGlzLiBJdCYjMzk7cyB0aGUgcGVyZm9ybWFuY2UtY3JpdGljYWwgcGFydCwgdGhlIG9uZSB5b3UmIzM5O2QgcmVhbGx5IHdhbnQgdG8gc2NydXRpbml6ZSBmb3IgYW55IGJvdHRsZW5lY2tzLiBVbmRlcnN0YW5kaW5nIHRoZSBkaXZpc2lvbiBvZiBsYWJvciBiZXR3ZWVuIHRoZXNlIHR3byBpcyBrZXkgdG8gYW55IHJlYWwgYW5hbHlzaXMgb2YgdGhlIHF1ZXVlJiMzOTtzIHBlcmZvcm1hbmNlIGFuZCBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTQ6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19ybXF1ZXVlXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vcGFnZV9hbGxvYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3BhZ2VfYWxsb2MuYz0yNDc0PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgc3RydWN0IHBhZ2UgKlxubW0vcGFnZV9hbGxvYy5jOjI0NzU6X19ybXF1ZXVlKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBtaWdyYXRldHlwZSxcbm1tL3BhZ2VfYWxsb2MuYy0yNDc2LVx0ICB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MsIGVudW0gcm1xdWV1ZV9tb2RlICptb2RlKVxuLS1cbm1tL3BhZ2VfYWxsb2MuYz0yNTQ0PXN0YXRpYyBpbnQgcm1xdWV1ZV9idWxrKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTI1NTgtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjb3VudDsgJiM0MzsmIzQzO2kpIHtcbm1tL3BhZ2VfYWxsb2MuYzoyNTU5Olx0XHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IF9fcm1xdWV1ZSh6b25lLCBvcmRlciwgbWlncmF0ZXR5cGUsXG5tbS9wYWdlX2FsbG9jLmMtMjU2MC1cdFx0XHRcdFx0ICAgICAgYWxsb2NfZmxhZ3MsIFx1MDAyNnJtcW0pO1xuLS1cbm1tL3BhZ2VfYWxsb2MuYz0zMjMwPXN0cnVjdCBwYWdlICpybXF1ZXVlX2J1ZGR5KHN0cnVjdCB6b25lICpwcmVmZXJyZWRfem9uZSwgc3RydWN0IHpvbmUgKnpvbmUsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTMyNDktXG5tbS9wYWdlX2FsbG9jLmM6MzI1MDpcdFx0XHRwYWdlID0gX19ybXF1ZXVlKHpvbmUsIG9yZGVyLCBtaWdyYXRldHlwZSwgYWxsb2NfZmxhZ3MsIFx1MDAyNnJtcW0pO1xubW0vcGFnZV9hbGxvYy5jLTMyNTEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE0OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5MjAxCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogODY3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCBmb3IgRnV6emluZyBFbGlnaWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgaW4gYG1tL3BhZ2VfYWxsb2MuY2AsIHNwZWNpZmljYWxseSB0aGUgYGJvb3N0X3dhdGVybWFya2AgZnVuY3Rpb24uIEl0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZDogaXQgYWRkcyBhIGNoZWNrIGZvciBgaXNfa2R1bXBfa2VybmVsKClgIGFuZCByZXR1cm5zIGVhcmx5IGlmIGl0JiMzOTtzIGEga2R1bXAga2VybmVsLiBUaGUgY29yZSBvZiBteSBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgbWVyaXRzIGZ1enppbmcuCgpNeSBpbW1lZGlhdGUgaW5zdGluY3QsIGdpdmVuIG15IGV4cGVyaWVuY2UsIGlzIHRvIHNheSAqbm8qLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBjb2RlIHRoYXQgaXMgZnVuY3Rpb25hbGx5IHVucmVhY2hhYmxlIHdpdGhpbiB0aGUgc3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudCBJJiMzOTttIGZhbWlsaWFyIHdpdGgsIHdoaWNoIGlzIEdDRSBvciBRRU1VIHVzaW5nIHN5emthbGxlci4gVGhlIGBpc19rZHVtcF9rZXJuZWwoKWAgZnVuY3Rpb24gcmVsaWVzIG9uIHRoZSBgZWxmY29yZWhkcl9hZGRyYCB2YXJpYWJsZS4gSW4gYSBzdGFuZGFyZCBzeXprYWxsZXIgc2V0dXAsIGBlbGZjb3JlaGRyX2FkZHJgIGlzIGFsd2F5cyBlcXVhbCB0byBgRUxGQ09SRV9BRERSX01BWGAsIHNvIGBpc19rZHVtcF9rZXJuZWwoKWAgKmFsd2F5cyogcmV0dXJucyBmYWxzZS4gVGhlIG5ldyBgcmV0dXJuIGZhbHNlO2AgcGF0aCBpcyBuZXZlciB0YWtlbiB1bmRlciBmdXp6aW5nIGNvbmRpdGlvbnMuIEl0JiMzOTtzIGVzc2VudGlhbGx5IGRlYWQgY29kZSBpbiBteSB3b3JsZC4KCk5vdywgbXkgbWluZCBzdGFydHMgZ29pbmcgdGhyb3VnaCB0aGUgdHJpYWdlIHBoaWxvc29waHkuIEFtIEkgbWlzc2luZyBzb21ldGhpbmc/IEkgc3RhcnQgZ29pbmcgdGhyb3VnaCB0aGUgY3JpdGVyaWEsIHdoaWNoIGlzIGEga2V5IHBhcnQgb2YgbXkgdHJpYWdlIHN5c3RlbS4gSXQgc2F5cyBmdXp6aW5nIHNob3VsZCBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywgYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zLiBJdCBlbXBoYXNpemVzICpyZWFjaGFiaWxpdHkqOiAmIzM0O0Z1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLi4uJiMzNDsgVGhpcyBzZWVtcyBwcmV0dHkgY2xlYXI6IGlmIHRoZSBjb2RlIGRvZXNuJiMzOTt0IGV4ZWN1dGUgaW4gYSBzdGFuZGFyZCBlbnZpcm9ubWVudCwgaXQmIzM5O3Mgbm90IHdvcnRoIGZ1enppbmcuIFRoZSBwYXRjaCAqYWRkcyogYSBjaGVjaywgYnV0IHRoYXQgY2hlY2sgaXMgbmV2ZXIgdHJ1ZSBpbiB0aGUgZnV6emluZyBlbnZpcm9ubWVudCBJJiMzOTttIHVzaW5nLgoKQnV0IHRoZSB0cmlhZ2Ugc3lzdGVtIGFsc28gaGFzIG5lZ2F0aXZlIGNyaXRlcmlhLCB0aGluZ3MgdGhhdCBhdXRvbWF0aWNhbGx5IHNheSAmIzM0O25vdCB3b3J0aCBmdXp6aW5nJiMzNDsuIFRoZXJlIGFyZSB0aHJlZSBtYWluIGFyZWFzOiBub24ta2VybmVsIGNoYW5nZXMsIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZSwgYW5kIHVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRocy4gVGhpcyBkb2VzbiYjMzk7dCBmYWxsIHVuZGVyIG5vbi1rZXJuZWwgb3IgaGFyZHdhcmUuIEl0IGxvb2tzIGxpa2UgaXQgKm1pZ2h0KiBmYWxsIHVuZGVyIHVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRocy4gTm93IEkgYW0gdGhpbmtpbmcgdGhhdCB0aGlzICptaWdodCogYmUgYW4gdW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGggYmVjYXVzZSBpdCB3aWxsIG5ldmVyIGJlIHRydWUgdW5kZXIgb3VyIGZ1enppbmcgc2V0dXAuIEkgbm90aWNlIHRoZSBidWxsZXQgZXhhbXBsZXMgb2YgdW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzLCBhbmQgdGhpbmssIGFyZSB0aGUgYnVsbGV0IGV4YW1wbGVzIGV4aGF1c3RpdmUgb3IganVzdCBleGFtcGxlcz8KCk5vdywgaGVyZSYjMzk7cyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nIGFuZCB3aGVyZSBJIHJlYWxseSBuZWVkIHRvIGJlIGNhcmVmdWwuIFRoZSBwYXRjaCAqZG9lcyogdG91Y2ggZXhlY3V0YWJsZSBjb2Rl4oCUdGhlIGBpZmAgc3RhdGVtZW50IGl0c2VsZiwgdGhlIENQVSAqZXhlY3V0ZXMqIHRoZSBjaGVjayEgRXZlbiB0aG91Z2ggdGhlIGJyYW5jaCBpcyAqbmV2ZXIqIHRha2VuLCB0aGUgYGlmYCAqaXMqIHJlYWNoZWQgYW5kIGV4ZWN1dGVkLiBEb2VzIHRoYXQgbWFrZSB0aGlzICYjMzQ7V29ydGhGdXp6aW5nPXRydWUmIzM0Oz8gVGhlIHRyaWFnZSBkb2Mgc2F5cyAmIzM0O1JldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLi4uJiMzNDsuIFRoaXMgaXMgaW4gYSBjb3JlIHN1YnN5c3RlbSAoYG1tL2ApLgoKQnV0IHRoZW4gSSByZW1lbWJlciBJIGhhdmUgdG8gdGhpbmsgYWJvdXQgJiMzNDtGb2N1c1N5bWJvbHMmIzM0Oy4gSSBjYW4mIzM5O3QganVzdCBsaXN0IGFueSBvbGQgZnVuY3Rpb24uIEkgY2FuJiMzOTt0IGxpc3QgJiMzNDtnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMmIzM0Oy4gSSBhbSBsb29raW5nIGF0IGBib29zdF93YXRlcm1hcmsoKWAsIHdoaWNoIGlzIGBzdGF0aWMgaW5saW5lYCwgYW5kIGlzIG9ubHkgY2FsbGVkIHdpdGhpbiB0aGUgYWxsb2NhdGlvbiBmYWxsYmFjayBwYXRoLiBUaGF0JiMzOTtzIGEgbm8tZ28gZm9yIEZvY3VzU3ltYm9scy4gSSBhbSBzdGFydGluZyB0byB0aGluayB0aGF0IGV2ZW4gaWYgJiMzNDtXb3J0aEZ1enppbmcmIzM0OyBpcyB0cnVlLCB0aGUgRm9jdXNTeW1ib2xzIGFuZCBjb25maWd1cmF0aW9ucyBhcmUgbWVhbmluZ2xlc3MgaW4gdGhpcyBjYXNlLgoKVGhlbiwgdGhlcmUgaXMgYW4gaW1wb3J0YW50IGRldGFpbDogdGhlIGNvZGUgaXRzZWxmIG9ubHkgY2hlY2tzIGBpc19rZHVtcF9rZXJuZWwoKWAgKmlmKiBgQ09ORklHX0NSQVNIX0RVTVBgIGlzIGVuYWJsZWQhIEFuZCwgaWYgaXQgaXMgZGlzYWJsZWQsIGBpc19rZHVtcF9rZXJuZWwoKWAgKmFsd2F5cyogcmV0dXJucyBgZmFsc2VgLgoKU28sIGZyb20gYSBwcmFjdGljYWwgc3RhbmRwb2ludCwgdGhlIHBhdGNoIGRvZXNuJiMzOTt0IGFkZCBhbnkgKm5ldyogZnVuY3Rpb25hbGl0eSBvciBwb3RlbnRpYWwgYnVncyB0byB3aGF0IEkmIzM5O20gZnV6emluZy4gVW5kZXIgc3RhbmRhcmQgc3l6a2FsbGVyLCB0aGUgcGF0Y2ggaGFzIG5vIGVmZmVjdCBvbiByZWFjaGFiaWxpdHkuIFRoZSBjb21wYXJpc29uIGluc2lkZSB0aGUgYGlmYCBpcyBleGVjdXRlZCwgYnV0IHRoZSBzdWJzZXF1ZW50IGNvbmRpdGlvbmFsIGByZXR1cm4gZmFsc2U7YCBpcyBub3QuIFVsdGltYXRlbHksIGV2ZW4gdGhvdWdoIHRoZSBjaGVjayBpbnN0cnVjdGlvbiBpdHNlbGYgZXhlY3V0ZXMsIHRoZSB1bnJlYWNoYWJsZSBjb250cm9sIGZsb3cgcmVuZGVycyBpdCB1c2VsZXNzIGZvciBzdGFuZGFyZCBmdXp6aW5nLiBUaGUgcGF0Y2ggKm1pZ2h0KiBiZSByZWxldmFudCBmb3IgYSBrZHVtcCBjYXB0dXJlIGtlcm5lbCAod2hpY2ggaXMgbm90IGZ1enplZCBieSBzeXprYWxsZXIpLCBidXQgaXQgZG9lc24mIzM5O3QgYWRkIGFueSBuZXcgZnV6emluZyB0YXJnZXRzIGluIG15IGRvbWFpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTQ6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENSQVNIX0RVTVAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL0tjb25maWcua2V4ZWM9ODk9Y29uZmlnIEtFWEVDX0pVTVBcbi0tXG5rZXJuZWwvS2NvbmZpZy5rZXhlYy05Ni1cbmtlcm5lbC9LY29uZmlnLmtleGVjOjk3OmNvbmZpZyBDUkFTSF9EVU1QXG5rZXJuZWwvS2NvbmZpZy5rZXhlYy05OC1cdGJvb2wgXCYjMzQ7a2VybmVsIGNyYXNoIGR1bXBzXCYjMzQ7XG4tLVxua2VybmVsL0tjb25maWcua2V4ZWM9MTI5PWNvbmZpZyBDUkFTSF9ETV9DUllQVF9DT05GSUdTXG4tLVxua2VybmVsL0tjb25maWcua2V4ZWMtMTM1LVxua2VybmVsL0tjb25maWcua2V4ZWM6MTM2OmNvbmZpZyBDUkFTSF9EVU1QX0tVTklUX1RFU1Rcbmtlcm5lbC9LY29uZmlnLmtleGVjLTEzNy1cdHRyaXN0YXRlIFwmIzM0O1VuaXQgVGVzdHMgZm9yIGtlcm5lbCBjcmFzaCBkdW1wc1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE0OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4OTQ5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBLZXhlYyBLY29uZmlnKioKCk9rYXksIHNvIEkgbmVlZCB0byB6ZXJvIGluIG9uIHNvbWV0aGluZyByZWxhdGVkIHRvIGBrZXhlY2AgY29uZmlndXJhdGlvbi4gSSByZWNhbGwgYSBzcGVjaWZpYyBzZWN0aW9uIHdpdGhpbiB0aGUgYGtlcm5lbC9LY29uZmlnLmtleGVjYCBmaWxlLCBhbmQgSSYjMzk7bSBwcmV0dHkgc3VyZSB0aGUga2V5IHNldHRpbmdzIEkmIzM5O20gaW50ZXJlc3RlZCBpbiBhcmUgYXJvdW5kIGxpbmUgOTcuIExldCYjMzk7cyBuYXZpZ2F0ZSB0aGVyZSBhbmQgc2VlIHdoYXQmIzM5O3Mgd2hhdC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgd2l0aGluIHRoYXQgcmFuZ2UuIEl0JiMzOTtzIHRpbWUgdG8gZXhhbWluZSB0aGUgb3B0aW9ucyBhdmFpbGFibGUgdGhlcmUgdG8gdW5kZXJzdGFuZCBob3cgdGhleSBhcmUgaW50ZXJhY3RpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE0OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL0tjb25maWcua2V4ZWMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDkwOlx0XHRib29sIFwmIzM0O2tleGVjIGp1bXBcJiMzNDtcbiAgOTE6XHRcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19LRVhFQ19KVU1QXG4gIDkyOlx0XHRkZXBlbmRzIG9uIEtFWEVDIFx1MDAyNlx1MDAyNiBISUJFUk5BVElPTlxuICA5MzpcdFx0aGVscFxuICA5NDpcdFx0ICBKdW1wIGJldHdlZW4gb3JpZ2luYWwga2VybmVsIGFuZCBrZXhlY2VkIGtlcm5lbCBhbmQgaW52b2tlXG4gIDk1Olx0XHQgIGNvZGUgaW4gcGh5c2ljYWwgYWRkcmVzcyBtb2RlIHZpYSBLRVhFQ1xuICA5NjpcdFxuICA5NzpcdGNvbmZpZyBDUkFTSF9EVU1QXG4gIDk4Olx0XHRib29sIFwmIzM0O2tlcm5lbCBjcmFzaCBkdW1wc1wmIzM0O1xuICA5OTpcdFx0ZGVmYXVsdCBBUkNIX0RFRkFVTFRfQ1JBU0hfRFVNUFxuIDEwMDpcdFx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX0NSQVNIX0RVTVBcbiAxMDE6XHRcdGRlcGVuZHMgb24gS0VYRUNfQ09SRVxuIDEwMjpcdFx0c2VsZWN0IFZNQ09SRV9JTkZPXG4gMTAzOlx0XHRzZWxlY3QgQ1JBU0hfUkVTRVJWRVxuIDEwNDpcdFx0aGVscFxuIDEwNTpcdFx0ICBHZW5lcmF0ZSBjcmFzaCBkdW1wIGFmdGVyIGJlaW5nIHN0YXJ0ZWQgYnkga2V4ZWMuXG4gMTA2Olx0XHQgIFRoaXMgc2hvdWxkIGJlIG5vcm1hbGx5IG9ubHkgc2V0IGluIHNwZWNpYWwgY3Jhc2ggZHVtcCBrZXJuZWxzXG4gMTA3Olx0XHQgIHdoaWNoIGFyZSBsb2FkZWQgaW4gdGhlIG1haW4ga2VybmVsIHdpdGgga2V4ZWMtdG9vbHMgaW50b1xuIDEwODpcdFx0ICBhIHNwZWNpYWxseSByZXNlcnZlZCByZWdpb24gYW5kIHRoZW4gbGF0ZXIgZXhlY3V0ZWQgYWZ0ZXJcbiAxMDk6XHRcdCAgYSBjcmFzaCBieSBrZHVtcC9rZXhlYy4gVGhlIGNyYXNoIGR1bXAga2VybmVsIG11c3QgYmUgY29tcGlsZWRcbiAxMTA6XHRcdCAgdG8gYSBtZW1vcnkgYWRkcmVzcyBub3QgdXNlZCBieSB0aGUgbWFpbiBrZXJuZWwgb3IgQklPUyB1c2luZ1xuIDExMTpcdFx0ICBQSFlTSUNBTF9TVEFSVCwgb3IgaXQgbXVzdCBiZSBidWlsdCBhcyBhIHJlbG9jYXRhYmxlIGltYWdlXG4gMTEyOlx0XHQgIChDT05GSUdfUkVMT0NBVEFCTEU9eSkuXG4gMTEzOlx0XHQgIEZvciBtb3JlIGRldGFpbHMgc2VlIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2R1bXAva2R1bXAucnN0XG4gMTE0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE0OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5NTMzCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzUyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIERlY2lzaW9uIGZvciBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBXZSYjMzk7cmUgbG9va2luZyBhdCBhIHBhdGNoIG1vZGlmeWluZyBgbW0vcGFnZV9hbGxvYy5jYCBhbmQgbmVlZCB0byBkZWNpZGUgaWYgaXQmIzM5O3Mgd29ydGggZnV6emluZy4gSSBuZWVkIHRvIGZvbGxvdyB0aGUgcnVsZXMgdmVyeSBjYXJlZnVsbHkgaGVyZSwgcGFydGljdWxhcmx5IHRoZSAmIzM0O09OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkuLi4mIzM0OyB3b3JkaW5nIGluIFNlY3Rpb24gMi4KClRoZSBjb3JlIG9mIHRoZSBtYXR0ZXIgaXMgd2hldGhlciB0aGlzIHBhdGNoIGZhbGxzIGludG8gdGhlICYjMzQ7V29ydGhGdXp6aW5nPWZhbHNlJiMzNDsgY2F0ZWdvcmllcy4gIFdlIGFyZSBleHBsaWNpdGx5IHRvbGQgdG8gdHJlYXQgTkZDSSBvciByZWZhY3RvcmluZyBjbGFpbXMgd2l0aCBza2VwdGljaXNtLCB3aGljaCBpcyBzbWFydC4gIFdlIG5lZWQgdG8gbG9vayBhdCB3aGF0JiMzOTtzIGJlaW5nIG1vZGlmaWVkLiBJIHNlZSBgYm9vc3Rfd2F0ZXJtYXJrYCBpcyBtb2RpZmllZCwgd2hpY2ggaXMgd2l0aGluIG1lbW9yeSBtYW5hZ2VtZW50LCBhIGNvcmUgc3Vic3lzdGVtLiBTZWN0aW9uIDMgY2xlYXJseSBzdGF0ZXMgdGhhdCAmIzM0O0FueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLi4uJiMzNDsgdHJpZ2dlcnMgYFdvcnRoRnV6emluZz10cnVlYC4KCkkgZG8gc2VlIHRoZSBtZW50aW9uIG9mIGtkdW1wLCBidXQgdGhlIGRlc2NyaXB0aW9uIGlzIGNhcmVmdWwgdG8gc2F5IHRoYXQgY3Jhc2ggZHVtcCBrZXJuZWxzIGFyZSBzcGVjaWFsIGNhc2VzIGxvYWRlZCB2aWEga2V4ZWMgYW5kIHRoYXQgdGhpcyBzaG91bGRuJiMzOTt0IG5vcm1hbGx5IGJlIHNldCBpbiBtYWluIGtlcm5lbHMuIEV2ZW4gaWYgYSBWTSBpc24mIzM5O3QgY29uZmlndXJlZCBmb3Iga2R1bXAsIHdlIG5lZWQgdG8gY29uc2lkZXIgaWYgaXQgKmNvdWxkKiBiZSBjb25maWd1cmVkIGZvciBrZHVtcC4KCk5vdyBsZXQmIzM5O3MgZGVsdmUgaW50byBTZWN0aW9uIDIuICBUaGUgJiMzNDtVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHMmIzM0OyBjYXRlZ29yeSBuZWVkcyBhIHZlcnkgY2xvc2UgbG9vay4gIERvZXMgbW9kaWZ5aW5nIGBtbS9wYWdlX2FsbG9jLmNgIG1lYW4gaXQmIzM5O3MgdW5yZWFjaGFibGUgZHVlIHRvIGJlaW5nIGEgZHJpdmVyIHRlYXJkb3duIG9yIGFyY2gtZXhjbHVzaXZlIGNvZGU/ICAqTm8sIGl0IGRvZXNuJiMzOTt0Ki4gVGhlIGNvZGUgY2xlYXJseSBpc24mIzM5O3QgZXhjbHVzaXZlIHRvIGFuIGFyY2hpdGVjdHVyZSwgYW5kIGBtbS9wYWdlX2FsbG9jLmNgIGlzIG5vdCBhIGRyaXZlciB0ZWFyZG93biBjYWxsYmFjay4gVGhlICYjMzQ7c3RyaWN0bHkmIzM0OyBpcyB0aGUga2V5LgoKU28sIGlmIGl0IGRvZXMgbm90IGZhbGwgKnN0cmljdGx5KiB3aXRoaW4gb25lIG9mIHRoZSBgV29ydGhGdXp6aW5nPWZhbHNlYCBjYXRlZ29yaWVzLCB0aGVuIGl0ICptdXN0KiBiZSBgV29ydGhGdXp6aW5nPXRydWVgLgoKTm93IGxldCYjMzk7cyBjb25zaWRlciB0aGUgRm9jdXNTeW1ib2xzIGFuZCBFbmFibGVDb25maWdzLiBgYm9vc3Rfd2F0ZXJtYXJrYCBpcyBhIHN0YXRpYyBpbmxpbmUsIHNvIGNvdmVyYWdlIGZpbHRlcnMgY2FuJiMzOTt0IHRhcmdldCBpdCBkaXJlY3RseS4gSG93ZXZlciwgdGhlIGRvY3VtZW50YXRpb24gZ2l2ZXMgZ29vZCBhZHZpY2U6IHdlIG11c3QgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIgZnVuY3Rpb25zLgoKU2luY2UgdGhlIHBhdGNoIHNwZWNpZmljYWxseSBtb2RpZmllcyBgYm9vc3Rfd2F0ZXJtYXJrYCBhbmQgYHRyeV90b19jbGFpbV9ibG9ja2AsIHRoYXQgbG9naWMgbmVlZHMgc3BlY2lmaWMgdGVzdGluZy4gU28gSSBhbSBnb2luZyB0byBmb2N1cyBvbiB0aG9zZSBjYWxsZXJzLiAgVGhleSBhcmUgKm5vdCogdWJpcXVpdG91cyBmdW5jdGlvbnMuIFRoZXkgYXJlICpzcGVjaWZpYyogdG8gd2F0ZXJtYXJrIGJvb3N0aW5nIGFuZCBwYWdlYmxvY2sgY2xhaW1pbmcsIG5vdCB0byBzb21ldGhpbmcgbGlrZSBga21hbGxvY2AuCgpGaW5hbGx5LCByZW1lbWJlciwgdGhlIGdvYWwgaGVyZSBpcyB0byBmaW5kIGJ1Z3MuIFNvIEkgTVVTVCBOT1QgbWFrZSBhc3N1bXB0aW9ucyBhYm91dCBrZHVtcCBrZXJuZWxzIG9yIHN5emthbGxlciBWTXMgdG8gZ2V0IGEgZmFsc2UgbmVnYXRpdmUuIFRoZSBpbnN0cnVjdGlvbnMgdmVyeSBjbGVhcmx5IGVtcGhhc2l6ZSB0aGF0IHdlICptdXN0KiBmdXp6IHJlYWNoYWJsZSBjb2RlLCBzbyBrZHVtcCBpc24mIzM5O3QgYW4gZXhjdXNlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBmdXp6aW5nIGlzIGFzICplZmZlY3RpdmUqIGFzIHBvc3NpYmxlLgoKSGVyZSYjMzk7cyBteSBldmFsdWF0aW9uOgoKKiAgICoqV29ydGhGdXp6aW5nKio6IGB0cnVlYAoqICAgKipFbmFibGVDb25maWdzKio6IE5vbmUuCiogICAqKkZvY3VzU3ltYm9scyoqOiBgdHJ5X3RvX2NsYWltX2Jsb2NrYAoqICAgKipSZWFzb25pbmcqKjogVGhlIHBhdGNoIG1vZGlmaWVzIGBtbS9wYWdlX2FsbG9jLmNgLCBzcGVjaWZpY2FsbHkgYGJvb3N0X3dhdGVybWFya2AgYW5kIGB0cnlfdG9fY2xhaW1fYmxvY2tgIGluIG1lbW9yeSBtYW5hZ2VtZW50LiBUaGlzIGRvZXNuJiMzOTt0IGZhbGwgaW50byB0aGUgZXhwbGljaXRseSBkZWZpbmVkICYjMzQ7V29ydGhGdXp6aW5nPWZhbHNlJiMzNDsgY2F0ZWdvcmllcywgYW5kIGJlY2F1c2UgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaXQgbXVzdCBiZSBmdXp6ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE0OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3dhdGVybWFya19ib29zdF9mYWN0b3ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9wYWdlX2FsbG9jLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vcGFnZV9hbGxvYy5jPTI3Nz1pbnQgdXNlcl9taW5fZnJlZV9rYnl0ZXMgPSAtMTtcbm1tL3BhZ2VfYWxsb2MuYzoyNzg6c3RhdGljIGludCB3YXRlcm1hcmtfYm9vc3RfZmFjdG9yIF9fcmVhZF9tb3N0bHkgPSAxNTAwMDtcbm1tL3BhZ2VfYWxsb2MuYy0yNzktc3RhdGljIGludCB3YXRlcm1hcmtfc2NhbGVfZmFjdG9yID0gMTA7XG4tLVxubW0vcGFnZV9hbGxvYy5jPTIxNzY9c3RhdGljIGlubGluZSBib29sIGJvb3N0X3dhdGVybWFyayhzdHJ1Y3Qgem9uZSAqem9uZSlcbi0tXG5tbS9wYWdlX2FsbG9jLmMtMjE3OS1cbm1tL3BhZ2VfYWxsb2MuYzoyMTgwOlx0aWYgKCF3YXRlcm1hcmtfYm9vc3RfZmFjdG9yKVxubW0vcGFnZV9hbGxvYy5jLTIxODEtXHRcdHJldHVybiBmYWxzZTtcbi0tXG5tbS9wYWdlX2FsbG9jLmMtMjE5OS1cdG1heF9ib29zdCA9IG11bHRfZnJhYyh6b25lLVx1MDAzZV93YXRlcm1hcmtbV01BUktfSElHSF0sXG5tbS9wYWdlX2FsbG9jLmM6MjIwMDpcdFx0XHR3YXRlcm1hcmtfYm9vc3RfZmFjdG9yLCAxMDAwMCk7XG5tbS9wYWdlX2FsbG9jLmMtMjIwMS1cbi0tXG5tbS9wYWdlX2FsbG9jLmM9Njk0NT1zdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBwYWdlX2FsbG9jX3N5c2N0bF90YWJsZVtdID0ge1xuLS1cbm1tL3BhZ2VfYWxsb2MuYy02OTU0LVx0e1xubW0vcGFnZV9hbGxvYy5jOjY5NTU6XHRcdC5wcm9jbmFtZVx0PSBcJiMzNDt3YXRlcm1hcmtfYm9vc3RfZmFjdG9yXCYjMzQ7LFxubW0vcGFnZV9hbGxvYy5jOjY5NTY6XHRcdC5kYXRhXHRcdD0gXHUwMDI2d2F0ZXJtYXJrX2Jvb3N0X2ZhY3Rvcixcbm1tL3BhZ2VfYWxsb2MuYzo2OTU3Olx0XHQubWF4bGVuXHRcdD0gc2l6ZW9mKHdhdGVybWFya19ib29zdF9mYWN0b3IpLFxubW0vcGFnZV9hbGxvYy5jLTY5NTgtXHRcdC5tb2RlXHRcdD0gMDY0NCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTQ6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQyMDgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzNDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIFdvcnRoRnV6emluZywgRm9jdXNTeW1ib2xzLCBhbmQgRW5hYmxlQ29uZmlncyoqCgpPa2F5LCBoZXJlJiMzOTtzIHRoZSBicmVha2Rvd24gb2YgbXkgdGhvdWdodCBwcm9jZXNzLiBGaXJzdCwgSSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoLCBzcGVjaWZpY2FsbHkgdGhlIGNoYW5nZXMgd2l0aGluIGBtbS9wYWdlX2FsbG9jLmNgIGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCBgaW5jbHVkZS9saW51eC9jcmFzaF9kdW1wLmhgLCB3YXJyYW50cyBmdXp6aW5nLiBUaGUga2V5IGZ1bmN0aW9uIGJlaW5nIG1vZGlmaWVkIGhlcmUgaXMgYGJvb3N0X3dhdGVybWFya2AgY2FsbGVkIGJ5IGB0cnlfdG9fY2xhaW1fYmxvY2tgLgoKVGhlIGNydWNpYWwgcXVlc3Rpb24gaXMsIGFjY29yZGluZyB0byB0aGUgcHJvdmlkZWQgdHJpYWdlIHJ1bGVzLCBzaG91bGQgYFdvcnRoRnV6emluZ2AgYmUgYHRydWVgIG9yIGBmYWxzZWA/IFRoZSBuZWdhdGl2ZSBjcml0ZXJpYSAod2hlbiB0byByZXR1cm4gZmFsc2UpIHByb3ZpZGUgYSB2ZXJ5IHNwZWNpZmljIHNldCBvZiBjb25kaXRpb25zLiBJJiMzOTt2ZSBjYXJlZnVsbHkgcmV2aWV3ZWQgdGhlc2UsIGFuZCBpdCYjMzk7cyBjbGVhciB0aGF0IHRoZSBtb2RpZmllZCBjb2RlICpkb2VzbiYjMzk7dCogZmFsbCB1bmRlciBhbnkgb2YgdGhvc2UgY2F0ZWdvcmllcy4gSXQgaXNuJiMzOTt0IG5vbi1rZXJuZWwgY29kZSwgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlLCBvciB1bnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHMuIFRoZSBjb2RlIGZhbGxzIHNxdWFyZWx5IGludG8gJiMzNDtDb3JlIFN1YnN5c3RlbXM6IEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLi4uJiMzNDsgLSBhcyB0aGUgcGF0Y2ggbW9kaWZpZXMgYGJvb3N0X3dhdGVybWFyaygpYCBpbiBgbW0vcGFnZV9hbGxvYy5jYCwgcGFydCBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBFdmVuIHRob3VnaCB0aGUgYGlmIChpc19rZHVtcF9rZXJuZWwoKSlgIGNoZWNrIG1pZ2h0IG9mdGVuIGV2YWx1YXRlIHRvIGBmYWxzZWAsIHRoZSBjb2RlIHBhdGggaXMgc3RpbGwgcmVhY2hhYmxlIGFuZCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhIHJ1bnRpbWUgY2hlY2suIFRoZXJlZm9yZSwgYmFzZWQgb24gdGhlIHByaW5jaXBsZSB0byBub3QgdHJ1c3QgY2xhaW1zIG9mICYjMzQ7bm8gZnVuY3Rpb25hbCBjaGFuZ2UmIzM0OywgSSYjMzk7bSBjb25maWRlbnQgYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIGB0cnVlYC4KCk5leHQsIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgYEZvY3VzU3ltYm9sc2AuIFRoZSBnb2FsIGhlcmUgaXMgdG8gZ3VpZGUgdGhlIGZ1enplciB0b3dhcmRzIHRoZSBzcGVjaWZpYyBjb2RlIGNoYW5nZXMsIGF2b2lkaW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zLiBgYm9vc3Rfd2F0ZXJtYXJrKClgIGFuZCBpdHMgY2FsbGVyLCBgdHJ5X3RvX2NsYWltX2Jsb2NrKClgLCBhcmUgdGhlIG1vc3QgcmVsZXZhbnQgZnVuY3Rpb25zIGltcGFjdGVkIGJ5IHRoaXMgcGF0Y2gsIHdoZXJlIGBib29zdF93YXRlcm1hcmtgIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGNvbnRhaW5zIHRoZSBjaGFuZ2UuIEkgYmVsaWV2ZSBib3RoIGZ1bmN0aW9ucyBhcmUgbmVjZXNzYXJ5IHRvIHByb3ZpZGUgYWRlcXVhdGUgY292ZXJhZ2UgZm9yIGZ1enppbmcuIGBpc19rZHVtcF9rZXJuZWwoKWAgaXRzZWxmLCBiZWluZyBhIHN0YXRpYyBpbmxpbmUsIGlzIG5vdCBhIGRpc3RpbmN0IHN5bWJvbCBhbmQgc2hvdWxkbiYjMzk7dCBiZSBsaXN0ZWQuCgpGaW5hbGx5LCBJIG5lZWQgdG8gZGV0ZXJtaW5lIGBFbmFibGVDb25maWdzYC4gVGhlIGNvcmUgY29kZSBpbiBgbW0vcGFnZV9hbGxvYy5jYCBpcyBhbHdheXMgYnVpbHQgaW50byB0aGUga2VybmVsLiBUaGUgY2hlY2sgaXM6CgpgYGBjCmlmIChpc19rZHVtcF9rZXJuZWwoKSkKYGBgClRoZSBgaXNfa2R1bXBfa2VybmVsKClgIGlzIG9ubHkgZGVwZW5kZW50IG9uIGBDT05GSUdfQ1JBU0hfRFVNUGAgd2hpY2ggaXRzZWxmIGRlcGVuZHMgb24gYEtFWEVDX0NPUkVgLiBUaGVyZWZvcmUsIGBDT05GSUdfQ1JBU0hfRFVNUD15YCBhbmQgdGhlcmVmb3JlIGBLRVhFQ19DT1JFPXlgLiBJZiwgaG93ZXZlciwgYENPTkZJR19DUkFTSF9EVU1QYCBpcyBub3QgZW5hYmxlZCwgdGhlbiBgaXNfa2R1bXBfa2VybmVsYCByZXNvbHZlcyB0byBgZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxNDo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS0VYRUNfQ09SRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9LY29uZmlnLmtleGVjJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9LY29uZmlnLmtleGVjPTg9Y29uZmlnIFZNQ09SRV9JTkZPXG4tLVxua2VybmVsL0tjb25maWcua2V4ZWMtMTAtXG5rZXJuZWwvS2NvbmZpZy5rZXhlYzoxMTpjb25maWcgS0VYRUNfQ09SRVxua2VybmVsL0tjb25maWcua2V4ZWMtMTItXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE0OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4MzEyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyB0aGUgYEtFWEVDX0NPUkVgIFNlbGVjdGlvbi9TZXR0aW5nKioKCkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgb3JpZ2luIGFuZCBpbXBsaWNhdGlvbnMgb2YgYEtFWEVDX0NPUkVgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGNvbmRpdGlvbmFsIGxvZ2ljLiBXaGVyZSBkb2VzIHRoaXMgc3BlY2lmaWMgbWFjcm8gZ2V0IHNlbGVjdGVkIG9yIGRlZmluZWQgd2l0aGluIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtPyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBhbmQgaG93IGBLRVhFQ19DT1JFYCBpcyBiZWluZyB0dXJuZWQgb24gb3Igb2ZmLiBUaGF0IG1lYW5zIEkmIzM5O20gZ29pbmcgdG8gaGF2ZSB0byBkaWcgdGhyb3VnaCBLY29uZmlnIGZpbGVzLCBNYWtlZmlsZXMsIGFuZCBhbnkgcmVsZXZhbnQgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24uIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGRlcGVuZGVuY2llcywgdGhlIGJ1aWxkLXRpbWUgY29uZGl0aW9ucywgYW5kIGFueSBpbnRlcmFjdGlvbnMgdGhpcyBzZXR0aW5nIGhhcyB3aXRoIG90aGVyIGZlYXR1cmVzLiBVbmRlcnN0YW5kaW5nIHRoZSBzZWxlY3Rpb24gcHJvY2VzcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgb3ZlcmFsbCBiZWhhdmlvciBvZiB0aGUgc3lzdGVtLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGltbWVkaWF0ZSBpbXBhY3RzIGFyZSB0b28sIGFuZCBob3cgaXQgZWZmZWN0cyBmdW5jdGlvbmFsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxNDo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgS0VYRUNfQ09SRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9LY29uZmlnLmtleGVjJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9LY29uZmlnLmtleGVjPTIwPWNvbmZpZyBLRVhFQ1xuLS1cbmtlcm5lbC9LY29uZmlnLmtleGVjLTIyLVx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX0tFWEVDXG5rZXJuZWwvS2NvbmZpZy5rZXhlYzoyMzpcdHNlbGVjdCBLRVhFQ19DT1JFXG5rZXJuZWwvS2NvbmZpZy5rZXhlYy0yNC1cdGhlbHBcbi0tXG5rZXJuZWwvS2NvbmZpZy5rZXhlYz0zOD1jb25maWcgS0VYRUNfRklMRVxuLS1cbmtlcm5lbC9LY29uZmlnLmtleGVjLTQxLVx0c2VsZWN0IENSWVBUT19MSUJfU0hBMjU2XG5rZXJuZWwvS2NvbmZpZy5rZXhlYzo0MjpcdHNlbGVjdCBLRVhFQ19DT1JFXG5rZXJuZWwvS2NvbmZpZy5rZXhlYy00My1cdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTQ6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDg3MDUKCQkJCQkJCW91dHB1dDogMTI0CgkJCQkJCQl0aG91Z2h0czogMjczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJiMzOTtzIEltcGFjdCoqCgpPa2F5LCBzbyB0aGlzIGBDUkFTSF9EVU1QYCBmZWF0dXJlIHJlbGllcyBvbiBgS0VYRUNfQ09SRWAsIHdoaWNoIGl0c2VsZiBjYW4gYmUgZW5hYmxlZCBlaXRoZXIgdGhyb3VnaCBgS0VYRUNgIG9yIGBLRVhFQ19GSUxFYC4gVGhpcyBpcyBpbXBvcnRhbnQsIGJlY2F1c2UgYENSQVNIX0RVTVBgIGlzIHdoYXQgZW5hYmxlcyB0aGUgcmF0aGVyIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIG9mIGBpc19rZHVtcF9rZXJuZWwoKWAuIEkgbmVlZCB0byBlbnN1cmUgSSYjMzk7dmUgZ290IGV2ZXJ5dGhpbmcgc3RyYWlnaHQuCgpMZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIGZ1cnRoZXIgdG8gYmUgYWJzb2x1dGVseSBzdXJlOgoKKiAgICoqYFdvcnRoRnV6emluZ2A6IFRydWUuKiogVGhpcyBpcyBnb29kLiBUaGUgcGF0Y2ggdG91Y2hlcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgaW4gYG1tL3BhZ2VfYWxsb2MuY2AsIHNwZWNpZmljYWxseSB0aGUgYGJvb3N0X3dhdGVybWFya2AgZnVuY3Rpb24uIFRoZSBrZXkgaGVyZSBpcyB0aGF0IGl0IGludHJvZHVjZXMgYSBjaGVjayBmb3IgYGlzX2tkdW1wX2tlcm5lbCgpYCBkdXJpbmcgcGFnZWJsb2NrIGNsYWltaW5nIGFuZCB3YXRlcm1hcmsgYm9vc3RpbmcuIFRoaXMgY29kZSBwYXRoIGlzLCBjcnVjaWFsbHksIGV4ZWN1dGVkIGR1cmluZyBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgcGFnZSBtaWdyYXRpb24sIHBhcnRpY3VsYXJseSB1bmRlciBmcmFnbWVudGF0aW9uIHNjZW5hcmlvcy4gVGhpcyBpcyBhIHNvbGlkIHBvaW50IHRvIGZvY3VzIG9uIGZvciBwb3RlbnRpYWwgaXNzdWVzLgoqICAgKipgRW5hYmxlQ29uZmlnc2A6IFsmIzM0O0NSQVNIX0RVTVAmIzM0OywgJiMzNDtLRVhFQ19DT1JFJiMzNDtdIChvciBbJiMzNDtDUkFTSF9EVU1QJiMzNDssICYjMzQ7S0VYRUMmIzM0O10pLioqIEV4Y2VsbGVudDsgaXQgbWF0Y2hlcyB0aGUgZGVwZW5kZW5jaWVzLiBUaGlzIGNvbmZpcm1zIHRoYXQgdGhlc2UgY29uZmlndXJhdGlvbnMgYXJlIG5lY2Vzc2FyeSBhbmQgc3VmZmljaWVudCBmb3IgdGhlIGNvZGUgcGF0aCB0byBiZSBhY3RpdmUuCiogICAqKmBGb2N1c1N5bWJvbHNgOiBbJiMzNDtib29zdF93YXRlcm1hcmsmIzM0OywgJiMzNDt0cnlfdG9fY2xhaW1fYmxvY2smIzM0O10uKiogUGVyZmVjdC4gVGhlIHBhdGNoIGRpcmVjdGx5IG1vZGlmaWVzIGBib29zdF93YXRlcm1hcmtgLCBhbmQgYHRyeV90b19jbGFpbV9ibG9ja2AgaXMgYSBrZXkgY2FsbGVyLCBidXQgaXMgbm90IGNhbGxlZCBldmVyeXdoZXJlLiBUaGlzIGlzIGEgdmVyeSB0YXJnZXRlZCBmb2N1cy4gSSBhbSBoYXBweSB0aGF0IGl0IGRvZXMgbm90IGNhbGwgdWJpcXVpdG91cyBhbGxvY2F0b3JzLCBzdWNoIGFzIGBhbGxvY19wYWdlc2Agb3IgYGdldF9wYWdlX2Zyb21fZnJlZWxpc3RgLiBUaGlzIGlzIGEgdXNlZnVsIHJlZmluZW1lbnQuCgpJdCYjMzk7cyBhbGwgY3J5c3RhbCBjbGVhciwgYW5kIHRoZSBwcm92aWRlZCBpbmZvcm1hdGlvbiBsaW5lcyB1cCBwZXJmZWN0bHkuIFRoZXJlJiMzOTtzIG5vIGNvbnRyYWRpY3Rpb24gaW4gdGhlIGRhdGEuIFdpdGggbXkgYW5hbHlzaXMgY29tcGxldGUsIEkgYW0gY29uZmlkZW50IHRvIG5vdyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE0OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDUkFTSF9EVU1QJiMzNDssCiAgICAmIzM0O0tFWEVDJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Ym9vc3Rfd2F0ZXJtYXJrJiMzNDssCiAgICAmIzM0O3RyeV90b19jbGFpbV9ibG9jayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGluIG1tL3BhZ2VfYWxsb2MuYyBieSBhZGRpbmcgYW4gaXNfa2R1bXBfa2VybmVsKCkgY2hlY2sgaW5zaWRlIGJvb3N0X3dhdGVybWFyaygpIHRvIGRpc2FibGUgd2F0ZXJtYXJrIGJvb3N0aW5nIGluIGtkdW1wIGtlcm5lbHMuIFRoaXMgY29kZSBpcyBsb2NhdGVkIGluIHRoZSBjb3JlIHBhZ2UgYWxsb2NhdG9yJiMzOTtzIGFudGktZnJhZ21lbnRhdGlvbiBmYWxsYmFjayBwYXRoIGFuZCBleGVjdXRlcyBkdXJpbmcgcGFnZWJsb2NrIGNsYWltaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDUkFTSF9EVU1QJiMzNDssCiAgICAmIzM0O0tFWEVDJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Ym9vc3Rfd2F0ZXJtYXJrJiMzNDssCiAgICAmIzM0O3RyeV90b19jbGFpbV9ibG9jayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGluIG1tL3BhZ2VfYWxsb2MuYyBieSBhZGRpbmcgYW4gaXNfa2R1bXBfa2VybmVsKCkgY2hlY2sgaW5zaWRlIGJvb3N0X3dhdGVybWFyaygpIHRvIGRpc2FibGUgd2F0ZXJtYXJrIGJvb3N0aW5nIGluIGtkdW1wIGtlcm5lbHMuIFRoaXMgY29kZSBpcyBsb2NhdGVkIGluIHRoZSBjb3JlIHBhZ2UgYWxsb2NhdG9yJiMzOTtzIGFudGktZnJhZ21lbnRhdGlvbiBmYWxsYmFjayBwYXRoIGFuZCBleGVjdXRlcyBkdXJpbmcgcGFnZWJsb2NrIGNsYWltaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxNDo1OTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE0OjU5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGZvciBgaXNfa2R1bXBfa2VybmVsKClgIGluIGBib29zdF93YXRlcm1hcmsoKWAgd2l0aGluIGBtbS9wYWdlX2FsbG9jLmNgIHRvIHByZXZlbnQgd2F0ZXJtYXJrIGJvb3N0aW5nIGR1cmluZyBrZHVtcCBjYXB0dXJlIGtlcm5lbCBleGVjdXRpb24uIFRoaXMgaXMgYSBwdXJlbHkgYWxnb3JpdGhtaWMgLyBwb2xpY3kgY2hlY2sgaW4gdGhlIHBhZ2UgYWxsb2NhdG9yIHJlY2xhaW0gaGV1cmlzdGljcyByZXR1cm5pbmcgYSBib29sZWFuIHZhbHVlLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRhdGEgY29weWluZyB0byB1c2VyIHNwYWNlLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHVzYWdlLCBvciBidWZmZXIgbWFuaXB1bGF0aW9ucy4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBvciBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmMGI0ZWU0NDk1NTM1MGYxMjk4NzE1N2NhNTUzMmY2YzQ4NjA1NDVmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgMTQgMTQ6MzE6NTIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmMKaW5kZXggMTJmYWM5MDg0YzQ4My4uMjc2ZmE3MTY5Yjk5MyAxMDA2NDQKLS0tIGEvbW0vcGFnZV9hbGxvYy5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3BhZ2VfYWxsb2MuYwpAQCAtMzcsNiAmIzQzOzM3LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC92bXN0YXQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9mYXVsdC1pbmplY3QuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9jb21wYWN0aW9uLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2NyYXNoX2R1bXAuaCZndDsKICNpbmNsdWRlICZsdDt0cmFjZS9ldmVudHMva21lbS5oJmd0OwogI2luY2x1ZGUgJmx0O3RyYWNlL2V2ZW50cy9vb20uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wcmVmZXRjaC5oJmd0OwpAQCAtMjE3OCw2ICYjNDM7MjE3OSwxNCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYm9vc3Rfd2F0ZXJtYXJrKHN0cnVjdCB6b25lICp6b25lKQogCiAJaWYgKCF3YXRlcm1hcmtfYm9vc3RfZmFjdG9yKQogCQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEEga2R1bXAgY2FwdHVyZSBrZXJuZWwgZXhpdHMgYmVmb3JlIGEgYm9vc3QgY2FuIHBheSBvZmYsIHdoaWxlCiYjNDM7CSAqIHRoZSByYWlzZWQgd2F0ZXJtYXJrIGNhbiBleGNlZWQgdGhlIG1lbW9yeSBsZWZ0IGZvciB0aGUgZHVtcC4KJiM0MzsJICovCiYjNDM7CWlmIChpc19rZHVtcF9rZXJuZWwoKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKIAkvKgogCSAqIERvbiYjMzk7dCBib3RoZXIgaW4gem9uZXMgdGhhdCBhcmUgdW5saWtlbHkgdG8gcHJvZHVjZSByZXN1bHRzLgogCSAqIE9uIHNtYWxsIG1hY2hpbmVzLCBpbmNsdWRpbmcga2R1bXAgY2FwdHVyZSBrZXJuZWxzIHJ1bm5pbmcKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE0OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxOTcKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaDogYGJvb3N0X3dhdGVybWFya2AgaW4gYG1tL3BhZ2VfYWxsb2MuY2AqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSB0b3VjaGluZyB0aGUgYG1tL3BhZ2VfYWxsb2MuY2AgZmlsZSwgc3BlY2lmaWNhbGx5IHRoZSBgYm9vc3Rfd2F0ZXJtYXJrYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhlIGFkZGl0aW9uIG9mIGAjaW5jbHVkZSAmbHQ7bGludXgvY3Jhc2hfZHVtcC5oJmd0O2AgaXMgYSBjbHVlIHRvIHdoYXQmIzM5O3MgZ29pbmcgb24uIEkmIzM5O20gYXNzdW1pbmcgaXQmIzM5O3MgcmVsYXRlZCB0byBjcmFzaCBkdW1wcyBvciBrZHVtcCwgZ2l2ZW4gdGhlIGNvbnRleHQuCgpMb29raW5nIGNsb3NlciBhdCB0aGUgZGlmZiwgdGhleSYjMzk7dmUgYWRkZWQgYSBjaGVjayB3aXRoaW4gYGJvb3N0X3dhdGVybWFya2AuIFRoZSBjb3JlIG9mIHRoZSBtb2RpZmljYXRpb24gaXMgYSBjb25kaXRpb25hbCBjaGVjazogYGlmIChpc19rZHVtcF9rZXJuZWwoKSkgcmV0dXJuIGZhbHNlO2AuIE5vdywgdGhpcyBpcyBpbnRlcmVzdGluZy4gVGhlIGNvbW1lbnRzIHRlbGwgbWUgdGhhdCB0aGUgYGJvb3N0X3dhdGVybWFya2AgbWVjaGFuaXNtIGNhbiBpbnRlcmZlcmUgd2l0aCBrZHVtcCBjYXB0dXJlcyBpZiBhIHdhdGVybWFyayBpcyByYWlzZWQuIFRoZSByYWlzZWQgd2F0ZXJtYXJrIGNhbiBjb25zdW1lIG1lbW9yeSB0aGF0IHRoZSBjcmFzaCBrZXJuZWwgbmVlZHMuIEkga25vdyB0aGF0IGJvb3N0IHdpbGwgaW5jcmVhc2UgdGhlIHdhdGVybWFyay4gVGhpcyB3aWxsIHN0b3AgdGhpcyBtZWNoYW5pc20gaW4gYSBrZHVtcCBzY2VuYXJpby4gVGhlIGdvYWwgaXMgdG8gZW5zdXJlIHRoZSBrZHVtcCBrZXJuZWwgaGFzIGVub3VnaCBtZW1vcnkgdG8gZG8gaXRzIGpvYiBieSBwcmV2ZW50aW5nIHRoZSBib29zdGluZyBvZiB0aGUgd2F0ZXJtYXJrLiBUaGlzIG1ha2VzIHRvdGFsIHNlbnNlLiBXZSBuZWVkIHRvIGJlIGNhcmVmdWwgd2l0aCBtZW1vcnkgYWxsb2NhdGlvbiBkdXJpbmcgYSBjcmFzaCBkdW1wLiBHaXZlbiB0aGUgcG90ZW50aWFsIGZvciBpbnN0YWJpbGl0eSwgdGhpcyBzZWVtcyBsaWtlIGEgcHJ1ZGVudCBjaGFuZ2UuIExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBlbnN1cmUgdGhpcyBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHVuZm9yZXNlZW4gc2lkZSBlZmZlY3RzLCBidXQgb24gdGhlIHN1cmZhY2UsIHRoaXMgbG9va3MgZ29vZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTU6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Ym9vc3Rfd2F0ZXJtYXJrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vcGFnZV9hbGxvYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3BhZ2VfYWxsb2MuYz0yMTY5PWJvb2wgcGFnZWJsb2NrX3VuaXNvbGF0ZV9hbmRfbW92ZV9mcmVlX3BhZ2VzKHN0cnVjdCB6b25lICp6b25lLCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbi0tXG5tbS9wYWdlX2FsbG9jLmMtMjE3NS1cbm1tL3BhZ2VfYWxsb2MuYzoyMTc2OnN0YXRpYyBpbmxpbmUgYm9vbCBib29zdF93YXRlcm1hcmsoc3RydWN0IHpvbmUgKnpvbmUpXG5tbS9wYWdlX2FsbG9jLmMtMjE3Ny17XG4tLVxubW0vcGFnZV9hbGxvYy5jPTIzMDc9dHJ5X3RvX2NsYWltX2Jsb2NrKHN0cnVjdCB6b25lICp6b25lLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5tbS9wYWdlX2FsbG9jLmMtMjMyOS1cdCAqL1xubW0vcGFnZV9hbGxvYy5jOjIzMzA6XHRpZiAoYm9vc3Rfd2F0ZXJtYXJrKHpvbmUpIFx1MDAyNlx1MDAyNiAoYWxsb2NfZmxhZ3MgXHUwMDI2IEFMTE9DX0tTV0FQRCkpXG5tbS9wYWdlX2FsbG9jLmMtMjMzMS1cdFx0c2V0X2JpdChaT05FX0JPT1NURURfV0FURVJNQVJLLCBcdTAwMjZ6b25lLVx1MDAzZWZsYWdzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTU6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE0NQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzLCBnZWFyZWQgdG93YXJkcyBhbiBleHBlcnQ6CgoqKkRpdmluZyBpbnRvIGBtbS9wYWdlX2FsbG9jLmNgIEFyb3VuZCBMaW5lIDIxNzYqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gZm9jdXNpbmcgb24gYG1tL3BhZ2VfYWxsb2MuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAyMTc2LiBUaGF0IGxpa2VseSBtZWFucyBJJiMzOTttIGluIHRoZSBtaWRkbGUgb2YgYSBjcml0aWNhbCBzZWN0aW9uIG9mIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBwcm9jZXNzLCBvciBwZXJoYXBzIGRlYWxsb2NhdGlvbiwgb3IgZXZlbiBoYW5kbGluZyBzb21lIGtpbmQgb2YgcGFnZSBtZXRhZGF0YSBtb2RpZmljYXRpb24uIEkga25vdyB0aGlzIG1vZHVsZSBsaWtlIHRoZSBiYWNrIG9mIG15IGhhbmQsIGJ1dCBwaW5wb2ludGluZyBhIHNwZWNpZmljIGxpbmUgaGVscHMgbWUgemVybyBpbiBvbiB0aGUgZXhhY3QgY29udGV4dC4gSSYjMzk7bGwgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvZiB0aGUgc3Vycm91bmRpbmcgY29kZTsgSSBuZWVkIHRoZSB3aWRlciBwaWN0dXJlLiBJJiMzOTttIGFudGljaXBhdGluZyBwb3NzaWJseSBjaGVja2luZyBzb21lIGZsYWdzLCBsb29raW5nIGZvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBvciBtYXliZSBqdXN0IHdhbnRpbmcgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGFsbG9jYXRpb24gc3RyYXRlZ2llcyBhcmUgaW1wbGVtZW50ZWQgaW4gdGhpcyBzcG90LiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGFkamFjZW50IGxpbmVzIHJldmVhbCBhbmQgdGhlbiBmb3JtIGEgaHlwb3RoZXNpcyBhYm91dCB3aHkgdGhlIGF1dGhvciB3b3VsZCBpbmNsdWRlIGNvZGUgYXQgdGhhdCBsb2NhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTU6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9wYWdlX2FsbG9jLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIxNzA6XHR7XG4yMTcxOlx0XHRyZXR1cm4gX19tb3ZlX2ZyZWVwYWdlc19ibG9ja19pc29sYXRlKHpvbmUsIHBhZ2UsIGZhbHNlKTtcbjIxNzI6XHR9XG4yMTczOlx0XG4yMTc0Olx0I2VuZGlmIC8qIENPTkZJR19NRU1PUllfSVNPTEFUSU9OICovXG4yMTc1Olx0XG4yMTc2Olx0c3RhdGljIGlubGluZSBib29sIGJvb3N0X3dhdGVybWFyayhzdHJ1Y3Qgem9uZSAqem9uZSlcbjIxNzc6XHR7XG4yMTc4Olx0XHR1bnNpZ25lZCBsb25nIG1heF9ib29zdDtcbjIxNzk6XHRcbjIxODA6XHRcdGlmICghd2F0ZXJtYXJrX2Jvb3N0X2ZhY3RvcilcbjIxODE6XHRcdFx0cmV0dXJuIGZhbHNlO1xuMjE4MjpcdFxuMjE4MzpcdFx0LypcbjIxODQ6XHRcdCAqIEEga2R1bXAgY2FwdHVyZSBrZXJuZWwgZXhpdHMgYmVmb3JlIGEgYm9vc3QgY2FuIHBheSBvZmYsIHdoaWxlXG4yMTg1Olx0XHQgKiB0aGUgcmFpc2VkIHdhdGVybWFyayBjYW4gZXhjZWVkIHRoZSBtZW1vcnkgbGVmdCBmb3IgdGhlIGR1bXAuXG4yMTg2Olx0XHQgKi9cbjIxODc6XHRcdGlmIChpc19rZHVtcF9rZXJuZWwoKSlcbjIxODg6XHRcdFx0cmV0dXJuIGZhbHNlO1xuMjE4OTpcdFxuMjE5MDpcdFx0LypcbjIxOTE6XHRcdCAqIERvbiYjMzk7dCBib3RoZXIgaW4gem9uZXMgdGhhdCBhcmUgdW5saWtlbHkgdG8gcHJvZHVjZSByZXN1bHRzLlxuMjE5MjpcdFx0ICogT24gc21hbGwgbWFjaGluZXMsIGluY2x1ZGluZyBrZHVtcCBjYXB0dXJlIGtlcm5lbHMgcnVubmluZ1xuMjE5MzpcdFx0ICogaW4gYSBzbWFsbCBhcmVhLCBib29zdGluZyB0aGUgd2F0ZXJtYXJrIGNhbiBjYXVzZSBhbiBvdXQgb2ZcbjIxOTQ6XHRcdCAqIG1lbW9yeSBzaXR1YXRpb24gaW1tZWRpYXRlbHkuXG4yMTk1Olx0XHQgKi9cbjIxOTY6XHRcdGlmICgocGFnZWJsb2NrX25yX3BhZ2VzICogNCkgXHUwMDNlIHpvbmVfbWFuYWdlZF9wYWdlcyh6b25lKSlcbjIxOTc6XHRcdFx0cmV0dXJuIGZhbHNlO1xuMjE5ODpcdFxuMjE5OTpcdFx0bWF4X2Jvb3N0ID0gbXVsdF9mcmFjKHpvbmUtXHUwMDNlX3dhdGVybWFya1tXTUFSS19ISUdIXSxcbjIyMDA6XHRcdFx0XHR3YXRlcm1hcmtfYm9vc3RfZmFjdG9yLCAxMDAwMCk7XG4yMjAxOlx0XG4yMjAyOlx0XHQvKlxuMjIwMzpcdFx0ICogaGlnaCB3YXRlcm1hcmsgbWF5IGJlIHVuaW5pdGlhbGlzZWQgaWYgZnJhZ21lbnRhdGlvbiBvY2N1cnNcbjIyMDQ6XHRcdCAqIHZlcnkgZWFybHkgaW4gYm9vdCBzbyBkbyBub3QgYm9vc3QuIFdlIGRvIG5vdCBmYWxsXG4yMjA1Olx0XHQgKiB0aHJvdWdoIGFuZCBib29zdCBieSBwYWdlYmxvY2tfbnJfcGFnZXMgYXMgZmFpbGluZ1xuMjIwNjpcdFx0ICogYWxsb2NhdGlvbnMgdGhhdCBlYXJseSBtZWFucyB0aGF0IHJlY2xhaW0gaXMgbm90IGdvaW5nXG4yMjA3Olx0XHQgKiB0byBoZWxwIGFuZCBpdCBtYXkgZXZlbiBiZSBpbXBvc3NpYmxlIHRvIHJlY2xhaW0gdGhlXG4yMjA4Olx0XHQgKiBib29zdGVkIHdhdGVybWFyayByZXN1bHRpbmcgaW4gYSBoYW5nLlxuMjIwOTpcdFx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE1OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5ODgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgYGlzX2tkdW1wX2tlcm5lbCgpYCBGdW5jdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBndXRzIG9mIGBpc19rZHVtcF9rZXJuZWwoKWAgYW5kIHVuZGVyc3RhbmQgd2hhdCBpdCYjMzk7cyByZWFsbHkgZG9pbmcuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBleGFjdCBjcml0ZXJpYSBpdCB1c2VzIHRvIGlkZW50aWZ5IGEga2VybmVsIGFzIGEga2R1bXAga2VybmVsLiBBcmUgd2UgdGFsa2luZyBhYm91dCBhIHNpbXBsZSBjaGVjayBvbiBhIG1vZHVsZSwgYSBzcGVjaWZpYyBmbGFnIGluIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lLCBvciBzb21ldGhpbmcgbW9yZSBzb3BoaXN0aWNhdGVkPyBXaGF0IGtlcm5lbCBzdHJ1Y3R1cmVzIGlzIGl0IHByb2Jpbmc/IElzIGl0IHBvdGVudGlhbGx5IHJlYWRpbmcgZnJvbSBzb21ldGhpbmcgaW4gdGhlIG1lbW9yeSBzcGFjZT8gSSBuZWVkIHRvIGtub3cgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMuIFVuZGVyc3RhbmRpbmcgdGhpcyBmdW5jdGlvbiBpcyBjcnVjaWFsIGZvciBbKippbnNlcnQgdXNlciYjMzk7cyBmaWVsZCBvZiBleHBlcnRpc2UsIGUuZy4sIG1lbW9yeSBkdW1wIGFuYWx5c2lzLCBrZXJuZWwgc2VjdXJpdHksIGNyYXNoIGFuYWx5c2lzLCBldGMuIC0gYXNzdW1lIHRoYXQgdGhpcyBpcyB0aGUgdXNlciYjMzk7cyBmb2N1cyoqXSBiZWNhdXNlIHRoZSBvdXRwdXQgb2YgdGhpcyBpcyBjcml0aWNhbCBmb3IgWyoqZXhwbGFpbiB3aHkgdW5kZXJzdGFuZGluZyB0aGUgb3V0cHV0IGlzIGltcG9ydGFudCB0byB0aGUgdXNlciYjMzk7cyBmaWVsZCBvZiBleHBlcnRpc2UqKl0uIEFueSBlcnJvcnMgb3IgcXVpcmtzIGluIGl0cyBsb2dpYyBjb3VsZCBsZWFkIHRvIFsqKmV4cGxhaW4gY29uc2VxdWVuY2VzIG9mIGZhaWx1cmUgYmFzZWQgb24gdXNlciYjMzk7cyBmaWVsZCBvZiBleHBlcnRpc2UqKl0uIFRpbWUgdG8gZ2V0IHRvIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxNTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpc19rZHVtcF9rZXJuZWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaD0zNj12b2lkIHZtY29yZV9jbGVhbnVwKHZvaWQpO1xuLS1cbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oLTU2LVxuaW5jbHVkZS9saW51eC9jcmFzaF9kdW1wLmg6NTc6I2lmbmRlZiBpc19rZHVtcF9rZXJuZWxcbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oLTU4LS8qXG5pbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaDo1OTogKiBpc19rZHVtcF9rZXJuZWwoKSBjaGVja3Mgd2hldGhlciB0aGlzIGtlcm5lbCBpcyBib290aW5nIGFmdGVyIGEgcGFuaWMgb2ZcbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oLTYwLSAqIHByZXZpb3VzIGtlcm5lbCBvciBub3QuIFRoaXMgaXMgZGV0ZXJtaW5lZCBieSBjaGVja2luZyBpZiBwcmV2aW91cyBrZXJuZWxcbi0tXG5pbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaC02Ny1cbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oOjY4OnN0YXRpYyBpbmxpbmUgYm9vbCBpc19rZHVtcF9rZXJuZWwodm9pZClcbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oLTY5LXtcbi0tXG5pbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaD04Mj1zdGF0aWMgaW5saW5lIGludCBpc192bWNvcmVfdXNhYmxlKHZvaWQpXG4tLVxuaW5jbHVkZS9saW51eC9jcmFzaF9kdW1wLmgtODgtLyogdm1jb3JlX3VudXNhYmxlKCkgbWFya3MgdGhlIHZtY29yZSBhcyB1bnVzYWJsZSxcbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oOjg5OiAqIHdpdGhvdXQgZGlzdHVyYmluZyB0aGUgbG9naWMgb2YgaXNfa2R1bXBfa2VybmVsKClcbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oLTkwLSAqL1xuLS1cbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oPTE1MD1zdGF0aWMgaW5saW5lIHZvaWQgdm1jb3JlX2ZyZWVfcmFuZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXG4tLVxuaW5jbHVkZS9saW51eC9jcmFzaF9kdW1wLmgtMTYwLSNlbHNlIC8qICFDT05GSUdfQ1JBU0hfRFVNUCAqL1xuaW5jbHVkZS9saW51eC9jcmFzaF9kdW1wLmg6MTYxOnN0YXRpYyBpbmxpbmUgYm9vbCBpc19rZHVtcF9rZXJuZWwodm9pZCkgeyByZXR1cm4gZmFsc2U7IH1cbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oLTE2Mi0jZW5kaWYgLyogQ09ORklHX0NSQVNIX0RVTVAgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTU6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDY5NAoJCQkJCQkJb3V0cHV0OiAxNDEKCQkJCQkJCXRob3VnaHRzOiA0MDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgU2FmZXR5KioKCk9rYXksIHRoaXMgcGF0Y2ggaXMgaW5jcmVkaWJseSBzaW1wbGUuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGEgc2luZ2xlIGBpZmAgc3RhdGVtZW50IHdpdGhpbiBgYm9vc3Rfd2F0ZXJtYXJrKClgIGluIGBtbS9wYWdlX2FsbG9jLmNgLiBJdCYjMzk7cyBqdXN0IGEgY2hlY2s6IGBpZiAoaXNfa2R1bXBfa2VybmVsKCkpIHJldHVybiBmYWxzZTtgLiBNeSBpbml0aWFsIGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgdW5pbml0aWFsaXplZCBtZW1vcnkuIEJ1dCBsZXQmIzM5O3MgYnJlYWsgaXQgZG93bjoKCiogICAqKk5vIEFsbG9jYXRpb24gSXNzdWVzOioqIE5vIHN0YWNrIG9yIGhlYXAgYWxsb2NhdGlvbnMgYXJlIHRvdWNoZWQuIFRoYXTigJlzIGEgYmlnIHJlbGllZi4KKiAgICoqTm8gVXNlciBTcGFjZSBFeHBvc3VyZToqKiBXZSYjMzk7cmUgbm90IGNvcHlpbmcgYW55dGhpbmcgdG8gdXNlciBzcGFjZS4gQWJzb2x1dGVseSBubyByaXNrIG9mIGxlYWtpbmcgdW5pbml0aWFsaXplZCBkYXRhIHRocm91Z2ggYSBgY29weV90b191c2VyYCBvciBzb21ldGhpbmcgc2ltaWxhci4KKiAgICoqTm8gVW5pbml0aWFsaXplZCBSZWFkczoqKiBUaGUgYGlzX2tkdW1wX2tlcm5lbCgpYCBmdW5jdGlvbiBpdHNlbGYgaXMgdGhlIGtleSBoZXJlLiBJdCYjMzk7cyBzYWZlLiBJdCYjMzk7cyBub3QgcmVhZGluZyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBicmFuY2hpbmcgYmFzZWQgb24gcG90ZW50aWFsbHkgZ2FyYmFnZSBkYXRhLiBJdCYjMzk7cyBsaWtlbHkgY2hlY2tpbmcgc29tZXRoaW5nIGxpa2UgYGVsZmNvcmVoZHJfYWRkciAhPSBFTEZDT1JFX0FERFJfTUFYYCwgYSBwcmV0dHkgZGlyZWN0IGNvbXBhcmlzb24uCiogICAqKk5vIFN0cnVjdHVyZSBNYW5pcHVsYXRpb246KiogVGhpcyBkb2VzbuKAmXQgdG91Y2ggYW55IGRhdGEgYnVmZmVycywgbW9kaWZ5IGFueSBzdHJ1Y3R1cmUgcGFkZGluZywgb3IgYW55dGhpbmcgb2YgdGhhdCBzb3J0LiBJdCYjMzk7cyBhbiBlYXJseSByZXR1cm4uCgpTbywgaW4gc2hvcnQsIHRoZXJlIGlzIHplcm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Mgd2l0aCB0aGlzIGNoYW5nZS4gS01TQU4gaXMgbm90IG5lY2Vzc2FyeSwgYWJzb2x1dGVseSBub3QgbmVlZGVkLCBoZXJlLgoKTm93LCBsZXQgbWUgcnVuIHRocm91Z2ggbXkgbWVudGFsIGNoZWNrbGlzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW46CgoxLiAgKipVc2VyLVNwYWNlIEV4cG9zdXJlPyoqIE5vcGUuCjIuICAqKkNvbmRpdGlvbmFsIExvZ2ljIERlcGVuZGVudCBvbiBVbmluaXRpYWxpemVkIERhdGE/KiogTm8sIHRoZSBjaGVjayBpcyBjbGVhbi4KMy4gICoqQ29tcGxleCBEYXRhIFN0cnVjdHVyZSBJbml0aWFsaXphdGlvbj8qKiBOb3RoaW5nIGNvbXBsZXggaXMgaGFwcGVuaW5nLCBkZWZpbml0ZWx5IG5vdCBhbiBpc3N1ZSBoZXJlLgo0LiAgKipCb3VuZHMgQ2hlY2tzL1VuaW5pdGlhbGl6ZWQgQnVmZmVyIEFjY2Vzcz8qKiBObyBib3VuZHMgY2hlY2tzIGludm9sdmVkLCBhbmQgaXQgZG9lcyBub3QgYWZmZWN0IGFueSBleGlzdGluZyBidWZmZXJzLgoKVGhlcmVmb3JlLCBgTmVlZHNLTVNBTj1mYWxzZWAgaXMgdGhlIGNvcnJlY3QgY2FsbC4gTGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYCBhbmQgbW92ZSBvbiB0byB0aGUgbmV4dCBvbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE1OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBjaGVjayBmb3IgYGlzX2tkdW1wX2tlcm5lbCgpYCBpbiBgYm9vc3Rfd2F0ZXJtYXJrKClgIHdpdGhpbiBgbW0vcGFnZV9hbGxvYy5jYCB0byBwcmV2ZW50IHdhdGVybWFyayBib29zdGluZyBkdXJpbmcga2R1bXAgY2FwdHVyZSBrZXJuZWwgZXhlY3V0aW9uLiBUaGlzIGlzIGEgcHVyZWx5IGFsZ29yaXRobWljIC8gcG9saWN5IGNoZWNrIGluIHRoZSBwYWdlIGFsbG9jYXRvciByZWNsYWltIGhldXJpc3RpY3MgcmV0dXJuaW5nIGEgYm9vbGVhbiB2YWx1ZS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkYXRhIGNvcHlpbmcgdG8gdXNlciBzcGFjZSwgdW5pbml0aWFsaXplZCB2YXJpYWJsZSB1c2FnZSwgb3IgYnVmZmVyIG1hbmlwdWxhdGlvbnMuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGZvciBgaXNfa2R1bXBfa2VybmVsKClgIGluIGBib29zdF93YXRlcm1hcmsoKWAgd2l0aGluIGBtbS9wYWdlX2FsbG9jLmNgIHRvIHByZXZlbnQgd2F0ZXJtYXJrIGJvb3N0aW5nIGR1cmluZyBrZHVtcCBjYXB0dXJlIGtlcm5lbCBleGVjdXRpb24uIFRoaXMgaXMgYSBwdXJlbHkgYWxnb3JpdGhtaWMgLyBwb2xpY3kgY2hlY2sgaW4gdGhlIHBhZ2UgYWxsb2NhdG9yIHJlY2xhaW0gaGV1cmlzdGljcyByZXR1cm5pbmcgYSBib29sZWFuIHZhbHVlLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRhdGEgY29weWluZyB0byB1c2VyIHNwYWNlLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHVzYWdlLCBvciBidWZmZXIgbWFuaXB1bGF0aW9ucy4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBvciBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE0OjMxOjUyLjg2NDc3Mjc1NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MjI2NDcwOTg0MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ1JBU0hfRFVNUFwiLFxuICAgIFwiS0VYRUNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJib29zdF93YXRlcm1hcmtcIixcbiAgICBcInRyeV90b19jbGFpbV9ibG9ja1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGZvciBgaXNfa2R1bXBfa2VybmVsKClgIGluIGBib29zdF93YXRlcm1hcmsoKWAgd2l0aGluIGBtbS9wYWdlX2FsbG9jLmNgIHRvIHByZXZlbnQgd2F0ZXJtYXJrIGJvb3N0aW5nIGR1cmluZyBrZHVtcCBjYXB0dXJlIGtlcm5lbCBleGVjdXRpb24uIFRoaXMgaXMgYSBwdXJlbHkgYWxnb3JpdGhtaWMgLyBwb2xpY3kgY2hlY2sgaW4gdGhlIHBhZ2UgYWxsb2NhdG9yIHJlY2xhaW0gaGV1cmlzdGljcyByZXR1cm5pbmcgYSBib29sZWFuIHZhbHVlLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRhdGEgY29weWluZyB0byB1c2VyIHNwYWNlLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHVzYWdlLCBvciBidWZmZXIgbWFuaXB1bGF0aW9ucy4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBvciBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiBtbS9wYWdlX2FsbG9jLmMgYnkgYWRkaW5nIGFuIGlzX2tkdW1wX2tlcm5lbCgpIGNoZWNrIGluc2lkZSBib29zdF93YXRlcm1hcmsoKSB0byBkaXNhYmxlIHdhdGVybWFyayBib29zdGluZyBpbiBrZHVtcCBrZXJuZWxzLiBUaGlzIGNvZGUgaXMgbG9jYXRlZCBpbiB0aGUgY29yZSBwYWdlIGFsbG9jYXRvcidzIGFudGktZnJhZ21lbnRhdGlvbiBmYWxsYmFjayBwYXRoIGFuZCBleGVjdXRlcyBkdXJpbmcgcGFnZWJsb2NrIGNsYWltaW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxNDozMTo1Mi44NjQ3NzczMzVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNTk3MTQxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGYwYjRlZTQ0OTU1MzUwZjEyOTg3MTU3Y2E1NTMyZjZjNDg2MDU0NWZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBTZXAgMTQgMTQ6MzE6NTIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9hbGxvYy5jIGIvbW0vcGFnZV9hbGxvYy5jXFxuaW5kZXggMTJmYWM5MDg0YzQ4My4uMjc2ZmE3MTY5Yjk5MyAxMDA2NDRcXG4tLS0gYS9tbS9wYWdlX2FsbG9jLmNcXG4rKysgYi9tbS9wYWdlX2FsbG9jLmNcXG5AQCAtMzcsNiArMzcsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdm1zdGF0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9mYXVsdC1pbmplY3QuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NvbXBhY3Rpb24uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NyYXNoX2R1bXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3RyYWNlL2V2ZW50cy9rbWVtLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2N0cmFjZS9ldmVudHMvb29tLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wcmVmZXRjaC5oXFx1MDAzZVxcbkBAIC0yMTc4LDYgKzIxNzksMTQgQEAgc3RhdGljIGlubGluZSBib29sIGJvb3N0X3dhdGVybWFyayhzdHJ1Y3Qgem9uZSAqem9uZSlcXG4gXFxuIFxcdGlmICghd2F0ZXJtYXJrX2Jvb3N0X2ZhY3RvcilcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0LypcXG4rXFx0ICogQSBrZHVtcCBjYXB0dXJlIGtlcm5lbCBleGl0cyBiZWZvcmUgYSBib29zdCBjYW4gcGF5IG9mZiwgd2hpbGVcXG4rXFx0ICogdGhlIHJhaXNlZCB3YXRlcm1hcmsgY2FuIGV4Y2VlZCB0aGUgbWVtb3J5IGxlZnQgZm9yIHRoZSBkdW1wLlxcbitcXHQgKi9cXG4rXFx0aWYgKGlzX2tkdW1wX2tlcm5lbCgpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbiBcXHQvKlxcbiBcXHQgKiBEb24ndCBib3RoZXIgaW4gem9uZXMgdGhhdCBhcmUgdW5saWtlbHkgdG8gcHJvZHVjZSByZXN1bHRzLlxcbiBcXHQgKiBPbiBzbWFsbCBtYWNoaW5lcywgaW5jbHVkaW5nIGtkdW1wIGNhcHR1cmUga2VybmVscyBydW5uaW5nXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE0OjMxOjUzLjM5MTQwOTI5OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTY1NzAxNzA5ODEyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDUkFTSF9EVU1QXCIsXG4gICAgXCJLRVhFQ1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJvb3N0X3dhdGVybWFya1wiLFxuICAgIFwidHJ5X3RvX2NsYWltX2Jsb2NrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiBtbS9wYWdlX2FsbG9jLmMgYnkgYWRkaW5nIGFuIGlzX2tkdW1wX2tlcm5lbCgpIGNoZWNrIGluc2lkZSBib29zdF93YXRlcm1hcmsoKSB0byBkaXNhYmxlIHdhdGVybWFyayBib29zdGluZyBpbiBrZHVtcCBrZXJuZWxzLiBUaGlzIGNvZGUgaXMgbG9jYXRlZCBpbiB0aGUgY29yZSBwYWdlIGFsbG9jYXRvcidzIGFudGktZnJhZ21lbnRhdGlvbiBmYWxsYmFjayBwYXRoIGFuZCBleGVjdXRlcyBkdXJpbmcgcGFnZWJsb2NrIGNsYWltaW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGYwYjRlZTQ0OTU1MzUwZjEyOTg3MTU3Y2E1NTMyZjZjNDg2MDU0NWZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCAxNCAxNDozMTo1MiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuY1xuaW5kZXggMTJmYWM5MDg0YzQ4My4uMjc2ZmE3MTY5Yjk5MyAxMDA2NDRcbi0tLSBhL21tL3BhZ2VfYWxsb2MuY1xuKysrIGIvbW0vcGFnZV9hbGxvYy5jXG5AQCAtMzcsNiArMzcsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3Ztc3RhdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZmF1bHQtaW5qZWN0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jb21wYWN0aW9uLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jcmFzaF9kdW1wLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N0cmFjZS9ldmVudHMva21lbS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdHJhY2UvZXZlbnRzL29vbS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHJlZmV0Y2guaFx1MDAzZVxuQEAgLTIxNzgsNiArMjE3OSwxNCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYm9vc3Rfd2F0ZXJtYXJrKHN0cnVjdCB6b25lICp6b25lKVxuIFxuIFx0aWYgKCF3YXRlcm1hcmtfYm9vc3RfZmFjdG9yKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHQvKlxuK1x0ICogQSBrZHVtcCBjYXB0dXJlIGtlcm5lbCBleGl0cyBiZWZvcmUgYSBib29zdCBjYW4gcGF5IG9mZiwgd2hpbGVcbitcdCAqIHRoZSByYWlzZWQgd2F0ZXJtYXJrIGNhbiBleGNlZWQgdGhlIG1lbW9yeSBsZWZ0IGZvciB0aGUgZHVtcC5cbitcdCAqL1xuK1x0aWYgKGlzX2tkdW1wX2tlcm5lbCgpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4gXHQvKlxuIFx0ICogRG9uJ3QgYm90aGVyIGluIHpvbmVzIHRoYXQgYXJlIHVubGlrZWx5IHRvIHByb2R1Y2UgcmVzdWx0cy5cbiBcdCAqIE9uIHNtYWxsIG1hY2hpbmVzLCBpbmNsdWRpbmcga2R1bXAgY2FwdHVyZSBrZXJuZWxzIHJ1bm5pbmdcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE0OjMxOjUzLjM5MTQxMTMwOFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQzMzkxMzMxMDA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNZW1vcnkgQWxsb2NhdGlvbiBpbiB0aGUgQ29udGV4dCBvZiBLZHVtcCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBkaWZmYCBpbiBgbW0vcGFnZV9hbGxvYy5jYC4gTG9va3MgbGlrZSB3ZSdyZSBhZGRpbmcgYSBgI2luY2x1ZGUgXHUwMDNjbGludXgvY3Jhc2hfZHVtcC5oXHUwMDNlYCBhbmQgbW9kaWZ5aW5nIHRoZSB3YXRlcm1hcmsgYm9vc3RpbmcgbG9naWMuIEludGVyZXN0aW5nLiBJJ20gZm9jdXNpbmcgb24gbGluZXMgMjE3OCBvbndhcmQuIFNwZWNpZmljYWxseSwgSSdtIG5vdGluZyB0aGUgYWRkaXRpb24gb2YgYSBjaGVjayBmb3IgYGlzX2tkdW1wX2tlcm5lbCgpYC4gVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSwgYXMgSSBzZWUgaXQsIHRoZSBrZXJuZWwgZHVtcCBjYXB0dXJlIHByb2Nlc3MgKGtkdW1wKSBoYXMgc29tZSB1bmlxdWUgbWVtb3J5IG1hbmFnZW1lbnQgY29uc2lkZXJhdGlvbnMuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoZSB3YXRlcm1hcmsgYm9vc3RpbmcsIHdoaWNoIHVzdWFsbHkgaGVscHMgdG8gcHJldmVudCBhbGxvY2F0aW9uIGZhaWx1cmVzLCBtaWdodCBiZSBjb3VudGVycHJvZHVjdGl2ZSBvciBldmVuIHByb2JsZW1hdGljIGR1cmluZyBhIGtkdW1wIHNjZW5hcmlvLiBUaGUgY29tbWVudCBjbGFyaWZpZXMgdGhpczogdGhlIGtkdW1wIGtlcm5lbCBjYW4gZXhpdCBiZWZvcmUgYSBib29zdCBjYW4gcHJvdmlkZSBpdHMgdXN1YWwgYmVuZWZpdCwgYW5kIGZ1cnRoZXJtb3JlLCBhbiBvdmVybHkgYWdncmVzc2l2ZSB3YXRlcm1hcmsgaW5jcmVhc2UgKmNvdWxkKiBsZWFkIHRvIHRoZSByYWlzZWQgd2F0ZXJtYXJrIGV4Y2VlZGluZyB0aGUgbWVtb3J5IGF2YWlsYWJsZSBmb3IgdGhlIGFjdHVhbCBjcmFzaCBkdW1wLiBJdCdzIGEgdHJhZGUtb2ZmLiBXZSBkb24ndCB3YW50IHRvIHN0YXJ2ZSB0aGUgZHVtcCBwcm9jZXNzLiBTbywgdGhlIGNvZGUgbm93IGV4cGxpY2l0bHkgZGlzYWJsZXMgd2F0ZXJtYXJrIGJvb3N0aW5nIHdoZW4gYGlzX2tkdW1wX2tlcm5lbCgpYCByZXR1cm5zIHRydWUuIFNlZW1zIHNlbnNpYmxlLCBjb25zaWRlcmluZyB0aGUgcG90ZW50aWFsIGNvbmZsaWN0LiBJIG5lZWQgdG8ga2VlcCB0aGlzIGluIG1pbmQgd2hlbiBldmFsdWF0aW5nIG1lbW9yeSBtYW5hZ2VtZW50IGJlaGF2aW9ycyBkdXJpbmcgY3Jhc2ggc2NlbmFyaW9zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTg1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTQ6MzI6MzYuNzgyNzQ0Nzc1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUyMTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3BhZ2VfYWxsb2MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTcwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMTcwOlxcdHtcXG4yMTcxOlxcdFxcdHJldHVybiBfX21vdmVfZnJlZXBhZ2VzX2Jsb2NrX2lzb2xhdGUoem9uZSwgcGFnZSwgZmFsc2UpO1xcbjIxNzI6XFx0fVxcbjIxNzM6XFx0XFxuMjE3NDpcXHQjZW5kaWYgLyogQ09ORklHX01FTU9SWV9JU09MQVRJT04gKi9cXG4yMTc1OlxcdFxcbjIxNzY6XFx0c3RhdGljIGlubGluZSBib29sIGJvb3N0X3dhdGVybWFyayhzdHJ1Y3Qgem9uZSAqem9uZSlcXG4yMTc3OlxcdHtcXG4yMTc4OlxcdFxcdHVuc2lnbmVkIGxvbmcgbWF4X2Jvb3N0O1xcbjIxNzk6XFx0XFxuMjE4MDpcXHRcXHRpZiAoIXdhdGVybWFya19ib29zdF9mYWN0b3IpXFxuMjE4MTpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMjE4MjpcXHRcXG4yMTgzOlxcdFxcdC8qXFxuMjE4NDpcXHRcXHQgKiBBIGtkdW1wIGNhcHR1cmUga2VybmVsIGV4aXRzIGJlZm9yZSBhIGJvb3N0IGNhbiBwYXkgb2ZmLCB3aGlsZVxcbjIxODU6XFx0XFx0ICogdGhlIHJhaXNlZCB3YXRlcm1hcmsgY2FuIGV4Y2VlZCB0aGUgbWVtb3J5IGxlZnQgZm9yIHRoZSBkdW1wLlxcbjIxODY6XFx0XFx0ICovXFxuMjE4NzpcXHRcXHRpZiAoaXNfa2R1bXBfa2VybmVsKCkpXFxuMjE4ODpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMjE4OTpcXHRcXG4yMTkwOlxcdFxcdC8qXFxuMjE5MTpcXHRcXHQgKiBEb24ndCBib3RoZXIgaW4gem9uZXMgdGhhdCBhcmUgdW5saWtlbHkgdG8gcHJvZHVjZSByZXN1bHRzLlxcbjIxOTI6XFx0XFx0ICogT24gc21hbGwgbWFjaGluZXMsIGluY2x1ZGluZyBrZHVtcCBjYXB0dXJlIGtlcm5lbHMgcnVubmluZ1xcbjIxOTM6XFx0XFx0ICogaW4gYSBzbWFsbCBhcmVhLCBib29zdGluZyB0aGUgd2F0ZXJtYXJrIGNhbiBjYXVzZSBhbiBvdXQgb2ZcXG4yMTk0OlxcdFxcdCAqIG1lbW9yeSBzaXR1YXRpb24gaW1tZWRpYXRlbHkuXFxuMjE5NTpcXHRcXHQgKi9cXG4yMTk2OlxcdFxcdGlmICgocGFnZWJsb2NrX25yX3BhZ2VzICogNCkgXFx1MDAzZSB6b25lX21hbmFnZWRfcGFnZXMoem9uZSkpXFxuMjE5NzpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMjE5ODpcXHRcXG4yMTk5OlxcdFxcdG1heF9ib29zdCA9IG11bHRfZnJhYyh6b25lLVxcdTAwM2Vfd2F0ZXJtYXJrW1dNQVJLX0hJR0hdLFxcbjIyMDA6XFx0XFx0XFx0XFx0d2F0ZXJtYXJrX2Jvb3N0X2ZhY3RvciwgMTAwMDApO1xcbjIyMDE6XFx0XFxuMjIwMjpcXHRcXHQvKlxcbjIyMDM6XFx0XFx0ICogaGlnaCB3YXRlcm1hcmsgbWF5IGJlIHVuaW5pdGlhbGlzZWQgaWYgZnJhZ21lbnRhdGlvbiBvY2N1cnNcXG4yMjA0OlxcdFxcdCAqIHZlcnkgZWFybHkgaW4gYm9vdCBzbyBkbyBub3QgYm9vc3QuIFdlIGRvIG5vdCBmYWxsXFxuMjIwNTpcXHRcXHQgKiB0aHJvdWdoIGFuZCBib29zdCBieSBwYWdlYmxvY2tfbnJfcGFnZXMgYXMgZmFpbGluZ1xcbjIyMDY6XFx0XFx0ICogYWxsb2NhdGlvbnMgdGhhdCBlYXJseSBtZWFucyB0aGF0IHJlY2xhaW0gaXMgbm90IGdvaW5nXFxuMjIwNzpcXHRcXHQgKiB0byBoZWxwIGFuZCBpdCBtYXkgZXZlbiBiZSBpbXBvc3NpYmxlIHRvIHJlY2xhaW0gdGhlXFxuMjIwODpcXHRcXHQgKiBib29zdGVkIHdhdGVybWFyayByZXN1bHRpbmcgaW4gYSBoYW5nLlxcbjIyMDk6XFx0XFx0ICovXFxuMjIxMDpcXHRcXHRpZiAoIW1heF9ib29zdClcXG4yMjExOlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4yMjEyOlxcdFxcbjIyMTM6XFx0XFx0bWF4X2Jvb3N0ID0gbWF4KHBhZ2VibG9ja19ucl9wYWdlcywgbWF4X2Jvb3N0KTtcXG4yMjE0OlxcdFxcbjIyMTU6XFx0XFx0em9uZS1cXHUwMDNld2F0ZXJtYXJrX2Jvb3N0ID0gbWluKHpvbmUtXFx1MDAzZXdhdGVybWFya19ib29zdCArIHBhZ2VibG9ja19ucl9wYWdlcyxcXG4yMjE2OlxcdFxcdFxcdG1heF9ib29zdCk7XFxuMjIxNzpcXHRcXG4yMjE4OlxcdFxcdHJldHVybiB0cnVlO1xcbjIyMTk6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxNDozMjozNi43ODI5OTk3MTVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0OTU1MTMxMDI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIER1bXAgTGFuZHNjYXBlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCdzIGdvaW5nIG9uIHdpdGggdGhpcyBgaXNfa2R1bXBfa2VybmVsKClgIGZ1bmN0aW9uLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBrbm93IHdoYXQgaXQgKmlzKi4gSXMgaXQgYSBtYWNybywgYSBmdW5jdGlvbiBkZWZpbmVkIGluIGEgaGVhZGVyLCBvciBzb21ldGhpbmcgZWxzZT8gSSBuZWVkIHRvIGZpbmQgaXRzIGRlZmluaXRpb24uIEknbSBndWVzc2luZyBpdCdzIHByb2JhYmx5IHJlbGF0ZWQgdG8ga2VybmVsIGNyYXNoIGR1bXBzLCBhbmQgdGhhdCBsZWFkcyBtZSB0byB0aGUgbmV4dCB0aGluZzogd2hhdCdzIGBDUkFTSF9EVU1QYD8gSXMgaXQgYSBjb25maWd1cmF0aW9uIG9wdGlvbiwgYSBjb21waWxlLXRpbWUgZmxhZywgYSBzdHJ1Y3QgbWVtYmVyLCBhIHN5bWJvbD8gS25vd2luZyB0aGF0IHdpbGwgcHJvdmlkZSBjcml0aWNhbCBjb250ZXh0LiBJIGltYWdpbmUgdGhhdCBgaXNfa2R1bXBfa2VybmVsKClgIGlzIHNvbWVob3cgcmVsYXRlZCB0byB0aGUgYENSQVNIX0RVTVBgIG1lY2hhbmlzbS4gVGhhdCdzIG15IGltbWVkaWF0ZSB0aG91Z2h0LiBJJ20gZ29pbmcgdG8gdHJhY2sgdGhlc2UgdHdvIGRvd24gc28gSSBoYXZlIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyBjcmFzaCBkdW1wcy4gVGhpcyBzaG91bGQgcHJvdmlkZSB0aGUgaW5mb3JtYXRpb24gSSdsbCBuZWVkIHRvIGFuc3dlciB0aGUgcXVlc3Rpb24gYXQgaGFuZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM4MywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTQ6MzI6NDEuNzM4MTMzMTIxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1MDkwNjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlzX2tkdW1wX2tlcm5lbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaD0zNj12b2lkIHZtY29yZV9jbGVhbnVwKHZvaWQpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9jcmFzaF9kdW1wLmgtNTYtXFxuaW5jbHVkZS9saW51eC9jcmFzaF9kdW1wLmg6NTc6I2lmbmRlZiBpc19rZHVtcF9rZXJuZWxcXG5pbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaC01OC0vKlxcbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oOjU5OiAqIGlzX2tkdW1wX2tlcm5lbCgpIGNoZWNrcyB3aGV0aGVyIHRoaXMga2VybmVsIGlzIGJvb3RpbmcgYWZ0ZXIgYSBwYW5pYyBvZlxcbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oLTYwLSAqIHByZXZpb3VzIGtlcm5lbCBvciBub3QuIFRoaXMgaXMgZGV0ZXJtaW5lZCBieSBjaGVja2luZyBpZiBwcmV2aW91cyBrZXJuZWxcXG4tLVxcbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oLTY3LVxcbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oOjY4OnN0YXRpYyBpbmxpbmUgYm9vbCBpc19rZHVtcF9rZXJuZWwodm9pZClcXG5pbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaC02OS17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaD04Mj1zdGF0aWMgaW5saW5lIGludCBpc192bWNvcmVfdXNhYmxlKHZvaWQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaC04OC0vKiB2bWNvcmVfdW51c2FibGUoKSBtYXJrcyB0aGUgdm1jb3JlIGFzIHVudXNhYmxlLFxcbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oOjg5OiAqIHdpdGhvdXQgZGlzdHVyYmluZyB0aGUgbG9naWMgb2YgaXNfa2R1bXBfa2VybmVsKClcXG5pbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaC05MC0gKi9cXG4tLVxcbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oPTE1MD1zdGF0aWMgaW5saW5lIHZvaWQgdm1jb3JlX2ZyZWVfcmFuZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaC0xNjAtI2Vsc2UgLyogIUNPTkZJR19DUkFTSF9EVU1QICovXFxuaW5jbHVkZS9saW51eC9jcmFzaF9kdW1wLmg6MTYxOnN0YXRpYyBpbmxpbmUgYm9vbCBpc19rZHVtcF9rZXJuZWwodm9pZCkgeyByZXR1cm4gZmFsc2U7IH1cXG5pbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaC0xNjItI2VuZGlmIC8qIENPTkZJR19DUkFTSF9EVU1QICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE0OjMyOjQxLjgyMzIzMDg4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzkwMzI3NTMyMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRGl2aW5nIGludG8gdGhlIENyYXNoIER1bXAgSGVhZGVyKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGUga2VybmVsJ3MgY3Jhc2ggZHVtcCBtZWNoYW5pc20uIEknbSBmb2N1c2luZyBvbiBgaW5jbHVkZS9saW51eC9jcmFzaF9kdW1wLmhgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmVzIDU2IHRvIDc1LiBJJ20gZ3Vlc3NpbmcgdGhhdCBhcmVhIHByb2JhYmx5IGhvbGRzIHNvbWUgY3J1Y2lhbCBkYXRhIHN0cnVjdHVyZXMgb3IgbWFjcm9zIHJlbGF0ZWQgdG8gaG93IHRoZSBrZXJuZWwgY2FwdHVyZXMgYW5kIGhhbmRsZXMgaW5mb3JtYXRpb24gZHVyaW5nIGEgc3lzdGVtIGNyYXNoLiBUaGlzIGlzIGxpa2VseSB3aGVyZSB0aGUgZm91bmRhdGlvbiBpcyBsYWlkIGZvciB0aG9zZSBhbGwtaW1wb3J0YW50IGNyYXNoIGR1bXBzIHdlIHJlbHkgb24gZm9yIHBvc3QtbW9ydGVtIGFuYWx5c2lzLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgZGV0YWlscyBhYm91dCB0aGluZ3MgbGlrZSB0aGUgZm9ybWF0IG9mIHRoZSBjcmFzaCBkYXRhLCBwb3RlbnRpYWxseSBzb21lIHJlZ2lzdGVycywgcGVyaGFwcyBtZW1vcnkgbGF5b3V0IGRlZmluaXRpb25zLCBvciBob3cgdGhlIGtlcm5lbCBkZXNpZ25hdGVzIG1lbW9yeSBmb3IgdGhlIGNyYXNoIGRhdGEuIExldCdzIHNlZSB3aGF0IGdlbXMgYXJlIGhpZGRlbiBpbiB0aGlzIHNlY3Rpb24hXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwOTAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxNDozMzoyMC44NTU5ODYzODVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDI1MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9jcmFzaF9kdW1wLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNTUsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNTU6XFx0I2VuZGlmXFxuICA1NjpcXHRcXG4gIDU3OlxcdCNpZm5kZWYgaXNfa2R1bXBfa2VybmVsXFxuICA1ODpcXHQvKlxcbiAgNTk6XFx0ICogaXNfa2R1bXBfa2VybmVsKCkgY2hlY2tzIHdoZXRoZXIgdGhpcyBrZXJuZWwgaXMgYm9vdGluZyBhZnRlciBhIHBhbmljIG9mXFxuICA2MDpcXHQgKiBwcmV2aW91cyBrZXJuZWwgb3Igbm90LiBUaGlzIGlzIGRldGVybWluZWQgYnkgY2hlY2tpbmcgaWYgcHJldmlvdXMga2VybmVsXFxuICA2MTpcXHQgKiBoYXMgcGFzc2VkIHRoZSBlbGYgY29yZSBoZWFkZXIgYWRkcmVzcyBvbiBjb21tYW5kIGxpbmUuXFxuICA2MjpcXHQgKlxcbiAgNjM6XFx0ICogVGhpcyBpcyBub3QganVzdCBhIHRlc3QgaWYgQ09ORklHX0NSQVNIX0RVTVAgaXMgZW5hYmxlZCBvciBub3QuIEl0IHdpbGxcXG4gIDY0OlxcdCAqIHJldHVybiB0cnVlIGlmIENPTkZJR19DUkFTSF9EVU1QPXkgYW5kIGlmIGtlcm5lbCBpcyBib290aW5nIGFmdGVyIGEgcGFuaWNcXG4gIDY1OlxcdCAqIG9mIHByZXZpb3VzIGtlcm5lbC5cXG4gIDY2OlxcdCAqL1xcbiAgNjc6XFx0XFxuICA2ODpcXHRzdGF0aWMgaW5saW5lIGJvb2wgaXNfa2R1bXBfa2VybmVsKHZvaWQpXFxuICA2OTpcXHR7XFxuICA3MDpcXHRcXHRyZXR1cm4gZWxmY29yZWhkcl9hZGRyICE9IEVMRkNPUkVfQUREUl9NQVg7XFxuICA3MTpcXHR9XFxuICA3MjpcXHQjZW5kaWZcXG4gIDczOlxcdFxcbiAgNzQ6XFx0LyogaXNfdm1jb3JlX3VzYWJsZSgpIGNoZWNrcyBpZiB0aGUga2VybmVsIGlzIGJvb3RpbmcgYWZ0ZXIgYSBwYW5pYyBhbmRcXG4gIDc1OlxcdCAqIHRoZSB2bWNvcmUgcmVnaW9uIGlzIHVzYWJsZS5cXG4gIDc2OlxcdCAqXFxuICA3NzpcXHQgKiBUaGlzIG1ha2VzIHVzZSBvZiB0aGUgZmFjdCB0aGF0IGR1ZSB0byBhbGlnbm1lbnQgLTJVTEwgaXMgbm90XFxuICA3ODpcXHQgKiBhIHZhbGlkIHBvaW50ZXIsIG11Y2ggaW4gdGhlIHZhaW4gb2YgSVNfRVJSKCksIGV4Y2VwdFxcbiAgNzk6XFx0ICogZGVhbGluZyBkaXJlY3RseSB3aXRoIGFuIHVuc2lnbmVkIGxvbmcgbG9uZyByYXRoZXIgdGhhbiBhIHBvaW50ZXIuXFxuICA4MDpcXHQgKi9cXG4gIDgxOlxcdFxcbiAgODI6XFx0c3RhdGljIGlubGluZSBpbnQgaXNfdm1jb3JlX3VzYWJsZSh2b2lkKVxcbiAgODM6XFx0e1xcbiAgODQ6XFx0XFx0cmV0dXJuIGVsZmNvcmVoZHJfYWRkciAhPSBFTEZDT1JFX0FERFJfRVJSIFxcdTAwMjZcXHUwMDI2XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE0OjMzOjIwLjg1NjA5MDU1NVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI0NTg0Nzk4ODA2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIFRob3VnaHRzIG9uIGBpc19rZHVtcF9rZXJuZWwoKWAgYW5kIFN5emthbGxlcioqXG5cbkhvbGQgb24gYSBtaW51dGUhIEkgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgd2hhdCBgaXNfa2R1bXBfa2VybmVsKClgIGFjdHVhbGx5IGRvZXMuIEl0IGFwcGVhcnMgdG8gYmUgZGV0ZXJtaW5pbmcgaWYgKnRoaXMqIGtlcm5lbCBpcyBhIGtkdW1wIGNhcHR1cmUga2VybmVsLCBtZWFuaW5nIGl0J3MgYm9vdGluZyBhZnRlciBhIHByZXZpb3VzIGtlcm5lbCBwYW5pY2tlZC4gSW4gYSBzdGFuZGFyZCBydW5uaW5nIGtlcm5lbCwgaW5jbHVkaW5nIHRoZSBvbmVzIHdlIHVzZSBmb3Igc3l6a2FsbGVyIGZ1enppbmcsIHRoaXMgZnVuY3Rpb24gc2hvdWxkIHJldHVybiBmYWxzZS5cblxuV2FpdCBhIHNlY29uZC4uLiBhbSBJIGV2ZW4gY29uc2lkZXJpbmcgdGhlIHBvc3NpYmlsaXR5IG9mIHN5emthbGxlciBmdXp6aW5nICp0aGUga2R1bXAga2VybmVsIGl0c2VsZio/IFRoYXQgY2FuJ3QgYmUgcmlnaHQuIFN5emthbGxlciBpcyBkZXNpZ25lZCB0byBmdXp6IHRoZSAqbm9ybWFsKiBrZXJuZWwsIG5vdCB0aGUgbWluaW1hbCBlbnZpcm9ubWVudCB0aGF0J3Mgb25seSByZXNwb25zaWJsZSBmb3IgY2FwdHVyaW5nIHRoZSBjcmFzaCBkdW1wIGFuZCB0aGVuIHJlYm9vdGluZyBvciBoYWx0aW5nLlxuXG5Pa2F5LCBsZXQncyBzdGVwIGJhY2suIENvdWxkIHRoZXJlIGJlIGEgc2NlbmFyaW8gd2hlcmUgYGlzX2tkdW1wX2tlcm5lbCgpYCAqd291bGQqIGJlIHRydWUgZHVyaW5nIGZ1enppbmc/IEkgbmVlZCB0byBpbnZlc3RpZ2F0ZS5cblxuTGV0IG1lIHN0YXJ0IHdpdGggdGhpcyBcImVsZmNvcmVoZHJfYWRkciAhPSBFTEZDT1JFX0FERFJfTUFYXCIgY2hlY2suIFdoYXQncyB0aGUgY29udGV4dCBmb3IgdGhhdD8gV2hlcmUgaXMgYGVsZmNvcmVoZHJfYWRkcmAgZXZlbiBzZXQ/IEkgbmVlZCB0byB1c2UgZ3JlcCB0byBmaW5kIGFsbCB0aGUgcGxhY2VzIGl0J3MgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTc0NSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE0OjM3OjI2LjcwNDA4MTE5MloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY5Njk4Mzg2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJlbGZjb3JlaGRyX2FkZHJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmM9MjMwPXN0YXRpYyB2b2lkIF9faW5pdCBhcmNoX3Jlc2VydmVfdm1jb3JlKHZvaWQpXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvc2V0dXAuYy0yNDAtXFx0XFx0Zm9yX2VhY2hfbWVtX3JhbmdlKGksIFxcdTAwMjZzdGFydCwgXFx1MDAyNmVuZCkge1xcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jOjI0MTpcXHRcXHRcXHRpZiAoZWxmY29yZWhkcl9hZGRyIFxcdTAwM2U9IHN0YXJ0IFxcdTAwMjZcXHUwMDI2IGVsZmNvcmVoZHJfYWRkciBcXHUwMDNjIGVuZCkge1xcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jLTI0Mi1cXHRcXHRcXHRcXHQvKlxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmMtMjQ2LVxcdFxcdFxcdFxcdCAqL1xcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jOjI0NzpcXHRcXHRcXHRcXHRlbGZjb3JlaGRyX3NpemUgPSBlbmQgLSBlbGZjb3JlaGRyX2FkZHI7XFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmMtMjQ4LVxcdFxcdFxcdFxcdGJyZWFrO1xcbi0tXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmMtMjUyLVxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jOjI1MzpcXHRpZiAobWVtYmxvY2tfaXNfcmVnaW9uX3Jlc2VydmVkKGVsZmNvcmVoZHJfYWRkciwgZWxmY29yZWhkcl9zaXplKSkge1xcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jLTI1NC1cXHRcXHRwcl93YXJuKFxcXCJlbGZjb3JlaGRyIGlzIG92ZXJsYXBwZWRcXFxcblxcXCIpO1xcbi0tXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmMtMjU3LVxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jOjI1ODpcXHRtZW1ibG9ja19yZXNlcnZlKGVsZmNvcmVoZHJfYWRkciwgZWxmY29yZWhkcl9zaXplKTtcXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvc2V0dXAuYy0yNTktXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmMtMjYwLVxcdHByX2luZm8oXFxcIlJlc2VydmluZyAlbGx1IEtpQiBvZiBtZW1vcnkgYXQgMHglbGx4IGZvciBlbGZjb3JlaGRyXFxcXG5cXFwiLFxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jOjI2MTpcXHRcXHRlbGZjb3JlaGRyX3NpemUgXFx1MDAzZVxcdTAwM2UgMTAsIGVsZmNvcmVoZHJfYWRkcik7XFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmMtMjYyLSNlbmRpZlxcbi0tXFxuYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jPTQyMD1zdGF0aWMgdm9pZCBfX2luaXQgbWlwc19yZXNlcnZlX3ZtY29yZSh2b2lkKVxcbi0tXFxuYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jLTQyNy1cXHRcXHRmb3JfZWFjaF9tZW1fcmFuZ2UoaSwgXFx1MDAyNnN0YXJ0LCBcXHUwMDI2ZW5kKSB7XFxuYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jOjQyODpcXHRcXHRcXHRpZiAoZWxmY29yZWhkcl9hZGRyIFxcdTAwM2U9IHN0YXJ0IFxcdTAwMjZcXHUwMDI2IGVsZmNvcmVoZHJfYWRkciBcXHUwMDNjIGVuZCkge1xcbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYy00MjktXFx0XFx0XFx0XFx0LypcXG4tLVxcbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYy00MzMtXFx0XFx0XFx0XFx0ICovXFxuYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jOjQzNDpcXHRcXHRcXHRcXHRlbGZjb3JlaGRyX3NpemUgPSBlbmQgLSBlbGZjb3JlaGRyX2FkZHI7XFxuYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jLTQzNS1cXHRcXHRcXHRcXHRicmVhaztcXG4tLVxcbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYy00NDAtXFx0cHJfaW5mbyhcXFwiUmVzZXJ2aW5nICVsZEtCIG9mIG1lbW9yeSBhdCAlbGRLQiBmb3Iga2R1bXBcXFxcblxcXCIsXFxuYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jOjQ0MTpcXHRcXHQodW5zaWduZWQgbG9uZyllbGZjb3JlaGRyX3NpemUgXFx1MDAzZVxcdTAwM2UgMTAsICh1bnNpZ25lZCBsb25nKWVsZmNvcmVoZHJfYWRkciBcXHUwMDNlXFx1MDAzZSAxMCk7XFxuYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jLTQ0Mi1cXG5hcmNoL21pcHMva2VybmVsL3NldHVwLmM6NDQzOlxcdG1lbWJsb2NrX3Jlc2VydmUoZWxmY29yZWhkcl9hZGRyLCBlbGZjb3JlaGRyX3NpemUpO1xcbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYy00NDQtI2VuZGlmXFxuLS1cXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZmFkdW1wLWludGVybmFsLmg9MTAxPXN0cnVjdCBmd19kdW1wIHtcXG4tLVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9mYWR1bXAtaW50ZXJuYWwuaC0xMjEtXFx0dW5zaWduZWQgbG9uZ1xcdGZhZHVtcGhkcl9hZGRyO1xcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9mYWR1bXAtaW50ZXJuYWwuaDoxMjI6XFx0dTY0XFx0XFx0ZWxmY29yZWhkcl9hZGRyO1xcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9mYWR1bXAtaW50ZXJuYWwuaC0xMjMtXFx0dTY0XFx0XFx0ZWxmY29yZWhkcl9zaXplO1xcbi0tXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9jcmFzaF9kdW1wLmM9MTAxPWJvb2wgaXNfa2R1bXBfa2VybmVsKHZvaWQpXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9jcmFzaF9kdW1wLmMtMTAyLXtcXG5hcmNoL3Bvd2VycGMva2VybmVsL2NyYXNoX2R1bXAuYzoxMDM6XFx0cmV0dXJuICFpc19mYWR1bXBfYWN0aXZlKCkgXFx1MDAyNlxcdTAwMjYgZWxmY29yZWhkcl9hZGRyICE9IEVMRkNPUkVfQUREUl9NQVg7XFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9jcmFzaF9kdW1wLmMtMTA0LX1cXG4tLVxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvZmFkdW1wLmM9OTkxPXN0YXRpYyB2b2lkIF9faW5pdCBmYWR1bXBfcG9wdWxhdGVfZWxmY29yZWhkcihzdHJ1Y3QgZmFkdW1wX2NyYXNoX2luZm9faGVhZGVyICpmZGgpXFxuLS1cXG5hcmNoL3Bvd2VycGMva2VybmVsL2ZhZHVtcC5jLTk5OC1cXG5hcmNoL3Bvd2VycGMva2VybmVsL2ZhZHVtcC5jOjk5OTpcXHRidWZwID0gKGNoYXIgKikgZndfZHVtcC5lbGZjb3JlaGRyX2FkZHI7XFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9mYWR1bXAuYy0xMDAwLVxcdGZhZHVtcF9pbml0X2VsZmNvcmVfaGVhZGVyKGJ1ZnApO1xcbi0tXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9mYWR1bXAuYz0xMzQ2PXN0YXRpYyB2b2lkIGZhZHVtcF9mcmVlX2VsZmNvcmVoZHJfYnVmKHZvaWQpXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9mYWR1bXAuYy0xMzQ3LXtcXG5hcmNoL3Bvd2VycGMva2VybmVsL2ZhZHVtcC5jOjEzNDg6XFx0aWYgKGZ3X2R1bXAuZWxmY29yZWhkcl9hZGRyID09IDAgfHwgZndfZHVtcC5lbGZjb3JlaGRyX3NpemUgPT0gMClcXG5hcmNoL3Bvd2VycGMva2VybmVsL2ZhZHVtcC5jLTEzNDktXFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9mYWR1bXAuYy0xMzUyLVxcdCAqIEJlZm9yZSBmcmVlaW5nIHRoZSBtZW1vcnkgb2YgYGVsZmNvcmVoZHJgLCByZXNldCB0aGUgZ2xvYmFsXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9mYWR1bXAuYzoxMzUzOlxcdCAqIGBlbGZjb3JlaGRyX2FkZHJgIHRvIHByZXZlbnQgbW9kdWxlcyBsaWtlIGB2bWNvcmVgIGZyb20gYWNjZXNzaW5nXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9mYWR1bXAuYy0xMzU0LVxcdCAqIGludmFsaWQgbWVtb3J5LlxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvZmFkdW1wLmMtMTM1NS1cXHQgKi9cXG5hcmNoL3Bvd2VycGMva2VybmVsL2ZhZHVtcC5jOjEzNTY6XFx0ZWxmY29yZWhkcl9hZGRyID0gRUxGQ09SRV9BRERSX0VSUjtcXG5hcmNoL3Bvd2VycGMva2VybmVsL2ZhZHVtcC5jOjEzNTc6XFx0ZmFkdW1wX2ZyZWVfYnVmZmVyKGZ3X2R1bXAuZWxmY29yZWhkcl9hZGRyLCBmd19kdW1wLmVsZmNvcmVoZHJfc2l6ZSk7XFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9mYWR1bXAuYzoxMzU4OlxcdGZ3X2R1bXAuZWxmY29yZWhkcl9hZGRyID0gMDtcXG5hcmNoL3Bvd2VycGMva2VybmVsL2ZhZHVtcC5jLTEzNTktXFx0ZndfZHVtcC5lbGZjb3JlaGRyX3NpemUgPSAwO1xcbi0tXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9mYWR1bXAuYz0xNjM0PXN0YXRpYyBpbnQgX19pbml0IGZhZHVtcF9zZXR1cF9lbGZjb3JlaGRyX2J1Zih2b2lkKVxcbi0tXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9mYWR1bXAuYy0xNjQ3LVxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvZmFkdW1wLmM6MTY0ODpcXHRmd19kdW1wLmVsZmNvcmVoZHJfYWRkciA9ICh1NjQpZmFkdW1wX2FsbG9jX2J1ZmZlcihlbGZjb3JlaGRyX3NpemUpO1xcbmFyY2gvcG93ZXJwYy9rZXJuZWwvZmFkdW1wLmM6MTY0OTpcXHRpZiAoIWZ3X2R1bXAuZWxmY29yZWhkcl9hZGRyKSB7XFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9mYWR1bXAuYy0xNjUwLVxcdFxcdHByX2VycihcXFwiRmFpbGVkIHRvIGFsbG9jYXRlICVsdSBieXRlcyBmb3IgZWxmY29yZWhkclxcXFxuXFxcIixcXG4tLVxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvZmFkdW1wLmM9MTY5Mz1zdGF0aWMgdm9pZCBfX2luaXQgZmFkdW1wX3Byb2Nlc3Modm9pZClcXG4tLVxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvZmFkdW1wLmMtMTcxOS1cXHQgKlxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvZmFkdW1wLmM6MTcyMDpcXHQgKiBzZXQgZWxmY29yZWhkcl9hZGRyIHNvIHRoYXQgdm1jb3JlIG1vZHVsZSB3aWxsIGV4cG9ydCB0aGVcXG5hcmNoL3Bvd2VycGMva2VybmVsL2ZhZHVtcC5jLTE3MjEtXFx0ICogZWxmY29yZWhkciB0aHJvdWdoICcvcHJvYy92bWNvcmUnLlxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvZmFkdW1wLmMtMTcyMi1cXHQgKi9cXG5hcmNoL3Bvd2VycGMva2VybmVsL2ZhZHVtcC5jOjE3MjM6XFx0ZWxmY29yZWhkcl9hZGRyID0gdmlydF90b19waHlzKCh2b2lkICopZndfZHVtcC5lbGZjb3JlaGRyX2FkZHIpO1xcbmFyY2gvcG93ZXJwYy9rZXJuZWwvZmFkdW1wLmMtMTcyNC1cXHRyZXR1cm47XFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvb3BhbC1mYWR1bXAuYz00MTc9b3BhbF9mYWR1bXBfYnVpbGRfY3B1X25vdGVzKHN0cnVjdCBmd19kdW1wICpmYWR1bXBfY29uZixcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9vcGFsLWZhZHVtcC5jLTUxNS1cXHRwcl9kZWJ1ZyhcXFwiVXBkYXRpbmcgZWxmY29yZSBoZWFkZXIgKCVsbHgpIHdpdGggY3B1IG5vdGVzXFxcXG5cXFwiLFxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9vcGFsLWZhZHVtcC5jOjUxNjpcXHRcXHQgZmFkdW1wX2NvbmYtXFx1MDAzZWVsZmNvcmVoZHJfYWRkcik7XFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L29wYWwtZmFkdW1wLmM6NTE3OlxcdGZhZHVtcF91cGRhdGVfZWxmY29yZV9oZWFkZXIoKGNoYXIgKilmYWR1bXBfY29uZi1cXHUwMDNlZWxmY29yZWhkcl9hZGRyKTtcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvb3BhbC1mYWR1bXAuYy01MTgtXFx0cmV0dXJuIDA7XFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcnRhcy1mYWR1bXAuYz0zNzU9c3RhdGljIGludCBfX2luaXQgcnRhc19mYWR1bXBfYnVpbGRfY3B1X25vdGVzKHN0cnVjdCBmd19kdW1wICpmYWR1bXBfY29uZilcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9ydGFzLWZhZHVtcC5jLTQzOS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcnRhcy1mYWR1bXAuYzo0NDA6XFx0cHJfZGVidWcoXFxcIlVwZGF0aW5nIGVsZmNvcmUgaGVhZGVyICglbGx4KSB3aXRoIGNwdSBub3Rlc1xcXFxuXFxcIiwgZmFkdW1wX2NvbmYtXFx1MDAzZWVsZmNvcmVoZHJfYWRkcik7XFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3J0YXMtZmFkdW1wLmM6NDQxOlxcdGZhZHVtcF91cGRhdGVfZWxmY29yZV9oZWFkZXIoKGNoYXIgKilmYWR1bXBfY29uZi1cXHUwMDNlZWxmY29yZWhkcl9hZGRyKTtcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcnRhcy1mYWR1bXAuYy00NDItXFx0cmV0dXJuIDA7XFxuLS1cXG5hcmNoL3Jpc2N2L2tlcm5lbC9zZXR1cC5jPTEzNT1zdGF0aWMgdm9pZCBfX2luaXQgaW5pdF9yZXNvdXJjZXModm9pZClcXG4tLVxcbmFyY2gvcmlzY3Yva2VybmVsL3NldHVwLmMtMTYxLVxcdGlmIChlbGZjb3JlaGRyX3NpemUgXFx1MDAzZSAwKSB7XFxuYXJjaC9yaXNjdi9rZXJuZWwvc2V0dXAuYzoxNjI6XFx0XFx0ZWxmY29yZWhkcl9yZXMuc3RhcnQgPSBlbGZjb3JlaGRyX2FkZHI7XFxuYXJjaC9yaXNjdi9rZXJuZWwvc2V0dXAuYzoxNjM6XFx0XFx0ZWxmY29yZWhkcl9yZXMuZW5kID0gZWxmY29yZWhkcl9hZGRyICsgZWxmY29yZWhkcl9zaXplIC0gMTtcXG5hcmNoL3Jpc2N2L2tlcm5lbC9zZXR1cC5jLTE2NC1cXHRcXHRlbGZjb3JlaGRyX3Jlcy5mbGFncyA9IElPUkVTT1VSQ0VfU1lTVEVNX1JBTSB8IElPUkVTT1VSQ0VfQlVTWTtcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvc2V0dXAuYz04OTc9dm9pZCBfX2luaXQgc2V0dXBfYXJjaChjaGFyICoqY21kbGluZV9wKVxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jLTkzNC1cXHQvKiBEZWFjdGl2YXRlIGVsZmNvcmVoZHI9IGtlcm5lbCBwYXJhbWV0ZXIgKi9cXG5hcmNoL3MzOTAva2VybmVsL3NldHVwLmM6OTM1OlxcdGVsZmNvcmVoZHJfYWRkciA9IEVMRkNPUkVfQUREUl9NQVg7XFxuYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jLTkzNi0jZW5kaWZcXG4tLVxcbmRyaXZlcnMvb2YvZmR0LmM9NDcyPXN0YXRpYyB2b2lkIF9faW5pdCBmZHRfcmVzZXJ2ZV9lbGZjb3JlaGRyKHZvaWQpXFxuLS1cXG5kcml2ZXJzL29mL2ZkdC5jLTQ3Ni1cXG5kcml2ZXJzL29mL2ZkdC5jOjQ3NzpcXHRpZiAobWVtYmxvY2tfaXNfcmVnaW9uX3Jlc2VydmVkKGVsZmNvcmVoZHJfYWRkciwgZWxmY29yZWhkcl9zaXplKSkge1xcbmRyaXZlcnMvb2YvZmR0LmMtNDc4LVxcdFxcdHByX3dhcm4oXFxcImVsZmNvcmVoZHIgaXMgb3ZlcmxhcHBlZFxcXFxuXFxcIik7XFxuLS1cXG5kcml2ZXJzL29mL2ZkdC5jLTQ4MS1cXG5kcml2ZXJzL29mL2ZkdC5jOjQ4MjpcXHRtZW1ibG9ja19yZXNlcnZlKGVsZmNvcmVoZHJfYWRkciwgZWxmY29yZWhkcl9zaXplKTtcXG5kcml2ZXJzL29mL2ZkdC5jLTQ4My1cXG5kcml2ZXJzL29mL2ZkdC5jLTQ4NC1cXHRwcl9pbmZvKFxcXCJSZXNlcnZpbmcgJWxsdSBLaUIgb2YgbWVtb3J5IGF0IDB4JWxseCBmb3IgZWxmY29yZWhkclxcXFxuXFxcIixcXG5kcml2ZXJzL29mL2ZkdC5jOjQ4NTpcXHRcXHRlbGZjb3JlaGRyX3NpemUgXFx1MDAzZVxcdTAwM2UgMTAsIGVsZmNvcmVoZHJfYWRkcik7XFxuZHJpdmVycy9vZi9mZHQuYy00ODYtfVxcbi0tXFxuZHJpdmVycy9vZi9mZHQuYz04NDE9c3RhdGljIHZvaWQgX19pbml0IGVhcmx5X2luaXRfZHRfY2hlY2tfZm9yX2VsZmNvcmVoZHIodW5zaWduZWQgbG9uZyBub2RlKVxcbi0tXFxuZHJpdmVycy9vZi9mZHQuYy04NDgtXFx0aWYgKCFvZl9mbGF0X2R0X2dldF9hZGRyX3NpemUobm9kZSwgXFxcImxpbnV4LGVsZmNvcmVoZHJcXFwiLFxcbmRyaXZlcnMvb2YvZmR0LmM6ODQ5OlxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZlbGZjb3JlaGRyX2FkZHIsIFxcdTAwMjZlbGZjb3JlaGRyX3NpemUpKVxcbmRyaXZlcnMvb2YvZmR0LmMtODUwLVxcdFxcdHJldHVybjtcXG4tLVxcbmRyaXZlcnMvb2YvZmR0LmMtODUyLVxcdHByX2RlYnVnKFxcXCJlbGZjb3JlaGRyX3N0YXJ0PTB4JWxseCBlbGZjb3JlaGRyX3NpemU9MHglbGx4XFxcXG5cXFwiLFxcbmRyaXZlcnMvb2YvZmR0LmM6ODUzOlxcdFxcdCBlbGZjb3JlaGRyX2FkZHIsIGVsZmNvcmVoZHJfc2l6ZSk7XFxuZHJpdmVycy9vZi9mZHQuYy04NTQtfVxcbi0tXFxuZnMvcHJvYy92bWNvcmUuYz0xMjEzPXN0YXRpYyBpbnQgX19pbml0IHBhcnNlX2NyYXNoX2VsZjY0X2hlYWRlcnModm9pZClcXG4tLVxcbmZzL3Byb2Mvdm1jb3JlLmMtMTIxOC1cXG5mcy9wcm9jL3ZtY29yZS5jOjEyMTk6XFx0YWRkciA9IGVsZmNvcmVoZHJfYWRkcjtcXG5mcy9wcm9jL3ZtY29yZS5jLTEyMjAtXFxuLS1cXG5mcy9wcm9jL3ZtY29yZS5jLTEyNDctXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuZnMvcHJvYy92bWNvcmUuYzoxMjQ4OlxcdGFkZHIgPSBlbGZjb3JlaGRyX2FkZHI7XFxuZnMvcHJvYy92bWNvcmUuYy0xMjQ5LVxcdHJjID0gZWxmY29yZWhkcl9yZWFkKGVsZmNvcmVidWYsIGVsZmNvcmVidWZfc3pfb3JpZywgXFx1MDAyNmFkZHIpO1xcbi0tXFxuZnMvcHJvYy92bWNvcmUuYz0xMjY5PXN0YXRpYyBpbnQgX19pbml0IHBhcnNlX2NyYXNoX2VsZjMyX2hlYWRlcnModm9pZClcXG4tLVxcbmZzL3Byb2Mvdm1jb3JlLmMtMTI3NC1cXG5mcy9wcm9jL3ZtY29yZS5jOjEyNzU6XFx0YWRkciA9IGVsZmNvcmVoZHJfYWRkcjtcXG5mcy9wcm9jL3ZtY29yZS5jLTEyNzYtXFxuLS1cXG5mcy9wcm9jL3ZtY29yZS5jLTEzMDItXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuZnMvcHJvYy92bWNvcmUuYzoxMzAzOlxcdGFkZHIgPSBlbGZjb3JlaGRyX2FkZHI7XFxuZnMvcHJvYy92bWNvcmUuYy0xMzA0LVxcdHJjID0gZWxmY29yZWhkcl9yZWFkKGVsZmNvcmVidWYsIGVsZmNvcmVidWZfc3pfb3JpZywgXFx1MDAyNmFkZHIpO1xcbi0tXFxuZnMvcHJvYy92bWNvcmUuYz0xMzI0PXN0YXRpYyBpbnQgX19pbml0IHBhcnNlX2NyYXNoX2VsZl9oZWFkZXJzKHZvaWQpXFxuLS1cXG5mcy9wcm9jL3ZtY29yZS5jLTEzMjktXFxuZnMvcHJvYy92bWNvcmUuYzoxMzMwOlxcdGFkZHIgPSBlbGZjb3JlaGRyX2FkZHI7XFxuZnMvcHJvYy92bWNvcmUuYy0xMzMxLVxcdHJjID0gZWxmY29yZWhkcl9yZWFkKGVfaWRlbnQsIEVJX05JREVOVCwgXFx1MDAyNmFkZHIpO1xcbi0tXFxuZnMvcHJvYy92bWNvcmUuYz0xNzEzPXN0YXRpYyBpbnQgX19pbml0IHZtY29yZV9pbml0KHZvaWQpXFxuLS1cXG5mcy9wcm9jL3ZtY29yZS5jLTE3MTctXFx0LyogQWxsb3cgYXJjaGl0ZWN0dXJlcyB0byBhbGxvY2F0ZSBFTEYgaGVhZGVyIGluIDJuZCBrZXJuZWwgKi9cXG5mcy9wcm9jL3ZtY29yZS5jOjE3MTg6XFx0cmMgPSBlbGZjb3JlaGRyX2FsbG9jKFxcdTAwMjZlbGZjb3JlaGRyX2FkZHIsIFxcdTAwMjZlbGZjb3JlaGRyX3NpemUpO1xcbmZzL3Byb2Mvdm1jb3JlLmMtMTcxOS1cXHRpZiAocmMpXFxuLS1cXG5mcy9wcm9jL3ZtY29yZS5jLTE3MjgtXFx0aWYgKHJjKSB7XFxuZnMvcHJvYy92bWNvcmUuYzoxNzI5OlxcdFxcdGVsZmNvcmVoZHJfZnJlZShlbGZjb3JlaGRyX2FkZHIpO1xcbmZzL3Byb2Mvdm1jb3JlLmMtMTczMC1cXHRcXHRwcl93YXJuKFxcXCJub3QgaW5pdGlhbGl6ZWRcXFxcblxcXCIpO1xcbi0tXFxuZnMvcHJvYy92bWNvcmUuYy0xNzMyLVxcdH1cXG5mcy9wcm9jL3ZtY29yZS5jOjE3MzM6XFx0ZWxmY29yZWhkcl9mcmVlKGVsZmNvcmVoZHJfYWRkcik7XFxuZnMvcHJvYy92bWNvcmUuYzoxNzM0OlxcdGVsZmNvcmVoZHJfYWRkciA9IEVMRkNPUkVfQUREUl9FUlI7XFxuZnMvcHJvYy92bWNvcmUuYy0xNzM1LVxcbi0tXFxuaW5jbHVkZS9saW51eC9jcmFzaF9kdW1wLmgtMTQtXFxuaW5jbHVkZS9saW51eC9jcmFzaF9kdW1wLmg6MTU6ZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBlbGZjb3JlaGRyX2FkZHI7XFxuaW5jbHVkZS9saW51eC9jcmFzaF9kdW1wLmgtMTYtZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBlbGZjb3JlaGRyX3NpemU7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaD02OD1zdGF0aWMgaW5saW5lIGJvb2wgaXNfa2R1bXBfa2VybmVsKHZvaWQpXFxuaW5jbHVkZS9saW51eC9jcmFzaF9kdW1wLmgtNjkte1xcbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oOjcwOlxcdHJldHVybiBlbGZjb3JlaGRyX2FkZHIgIT0gRUxGQ09SRV9BRERSX01BWDtcXG5pbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaC03MS19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaD04Mj1zdGF0aWMgaW5saW5lIGludCBpc192bWNvcmVfdXNhYmxlKHZvaWQpXFxuaW5jbHVkZS9saW51eC9jcmFzaF9kdW1wLmgtODMte1xcbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oOjg0OlxcdHJldHVybiBlbGZjb3JlaGRyX2FkZHIgIT0gRUxGQ09SRV9BRERSX0VSUiBcXHUwMDI2XFx1MDAyNlxcbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oOjg1OlxcdFxcdGVsZmNvcmVoZHJfYWRkciAhPSBFTEZDT1JFX0FERFJfTUFYID8gMSA6IDA7XFxuaW5jbHVkZS9saW51eC9jcmFzaF9kdW1wLmgtODYtfVxcbi0tXFxuaW5jbHVkZS9saW51eC9jcmFzaF9kdW1wLmg9OTI9c3RhdGljIGlubGluZSB2b2lkIHZtY29yZV91bnVzYWJsZSh2b2lkKVxcbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oLTkzLXtcXG5pbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaDo5NDpcXHRlbGZjb3JlaGRyX2FkZHIgPSBFTEZDT1JFX0FERFJfRVJSO1xcbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oLTk1LX1cXG4tLVxcbmtlcm5lbC9lbGZjb3JlaGRyLmMtMTAtICpcXG5rZXJuZWwvZWxmY29yZWhkci5jOjExOiAqIE5vdGU6IGVsZmNvcmVoZHJfYWRkciBpcyBub3QganVzdCBsaW1pdGVkIHRvIHZtY29yZS4gSXQgaXMgYWxzbyB1c2VkIGJ5XFxua2VybmVsL2VsZmNvcmVoZHIuYy0xMi0gKiBpc19rZHVtcF9rZXJuZWwoKSB0byBkZXRlcm1pbmUgaWYgd2UgYXJlIGJvb3RpbmcgYWZ0ZXIgYSBwYW5pYy4gSGVuY2UgcHV0XFxuLS1cXG5rZXJuZWwvZWxmY29yZWhkci5jLTE0LSAqL1xcbmtlcm5lbC9lbGZjb3JlaGRyLmM6MTU6dW5zaWduZWQgbG9uZyBsb25nIGVsZmNvcmVoZHJfYWRkciA9IEVMRkNPUkVfQUREUl9NQVg7XFxua2VybmVsL2VsZmNvcmVoZHIuYzoxNjpFWFBPUlRfU1lNQk9MX0dQTChlbGZjb3JlaGRyX2FkZHIpO1xcbmtlcm5lbC9lbGZjb3JlaGRyLmMtMTctXFxuLS1cXG5rZXJuZWwvZWxmY29yZWhkci5jPTI5PXN0YXRpYyBpbnQgX19pbml0IHNldHVwX2VsZmNvcmVoZHIoY2hhciAqYXJnKVxcbi0tXFxua2VybmVsL2VsZmNvcmVoZHIuYy0zMy1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5rZXJuZWwvZWxmY29yZWhkci5jOjM0OlxcdGVsZmNvcmVoZHJfYWRkciA9IG1lbXBhcnNlKGFyZywgXFx1MDAyNmVuZCk7XFxua2VybmVsL2VsZmNvcmVoZHIuYy0zNS1cXHRpZiAoKmVuZCA9PSAnQCcpIHtcXG5rZXJuZWwvZWxmY29yZWhkci5jOjM2OlxcdFxcdGVsZmNvcmVoZHJfc2l6ZSA9IGVsZmNvcmVoZHJfYWRkcjtcXG5rZXJuZWwvZWxmY29yZWhkci5jOjM3OlxcdFxcdGVsZmNvcmVoZHJfYWRkciA9IG1lbXBhcnNlKGVuZCArIDEsIFxcdTAwMjZlbmQpO1xcbmtlcm5lbC9lbGZjb3JlaGRyLmMtMzgtXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxNDozNzoyOC40MDEwNzIxNzdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTI4NDYyMzc1NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaDogYG1tL3BhZ2VfYWxsb2MuY2AqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gY2hlY2sgdGhlIGNvbW1pdCBsb2cuIEknZCB0eXBpY2FsbHkganVzdCBydW4gYGdpdCBsb2cgLTFgIGJ1dCBJIGRvbid0IGhhdmUgdGhhdCBkaXJlY3RseSBhdmFpbGFibGUsIHNvIGxldCdzIGZpZ3VyZSBvdXQgYW5vdGhlciB3YXkgdG8gZG8gaXQuIElmIEkgY2FuJ3QgZ2V0IHRoYXQgaW5mbyBxdWlja2x5LCBJIGNhbiBhbHdheXMgc2VhcmNoIGZvciB0aGUgcGF0Y2ggb3IgY29tbWl0IGluZm8gdG8gZmluZCBjb250ZXh0LiBPciwgSSBjYW4ganVzdCBpbnNwZWN0IGBtbS9wYWdlX2FsbG9jLmNgIGl0c2VsZi5cblxuQWxyaWdodCwgbGV0J3MgdW5kZXJzdGFuZCB3aGF0IHRoZSBwYXRjaCBhY3R1YWxseSAqZG9lcyouIEl0IGxvb2tzIGxpa2UgaXQncyBpbiBgbW0vcGFnZV9hbGxvYy5jYC4gQWgsIGdvdCBpdC4gSXQgYWRkcyBgI2luY2x1ZGUgXHUwMDNjbGludXgvY3Jhc2hfZHVtcC5oXHUwMDNlYCBhbmQgdGhlbiBpbmNvcnBvcmF0ZXMgYSBjaGVjayB3aXRoaW4gdGhlIGBib29zdF93YXRlcm1hcmtgIGZ1bmN0aW9uLiBUaGlzIGNoZWNrLCBgaXNfa2R1bXBfa2VybmVsKClgLCBwcmV2ZW50cyB3YXRlcm1hcmsgYm9vc3RpbmcgZHVyaW5nIGEga2R1bXAgY2FwdHVyZSBrZXJuZWwgdG8gcHJldmVudCB0aGUgYm9vc3QgZnJvbSBjb25mbGljdGluZyB3aXRoIHRoZSBsaW1pdGVkIG1lbW9yeSBhdmFpbGFibGUuIEkgc2VlIHRoYXQgdGhpcyBhZGRpdGlvbiBhZGRyZXNzZXMgYSBzcGVjaWZpYyBzY2VuYXJpbyB3aGVyZSB0aGUga2VybmVsIGV4aXRzIGJlZm9yZSB0aGUgYm9vc3QgaGFzIGEgY2hhbmNlIHRvIGJlbmVmaXQsIGFuZCB0aGUgaW5jcmVhc2VkIHdhdGVybWFyayBjb3VsZCBoaW5kZXIgdGhlIG1lbW9yeSByZXF1aXJlZCBmb3IgdGhlIGR1bXAuXG5cbk5vdywgSSdkIGxpa2UgdG8gY2hlY2sgd2hlcmUgYGJvb3N0X3dhdGVybWFya2AgaXMgY2FsbGVkIHRvIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDcxMCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxNDozNzo0MS4yNDczMTI3OTRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4OTQ5MDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJvb3N0X3dhdGVybWFya1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vcGFnZV9hbGxvYy5jPTIxNjk9Ym9vbCBwYWdlYmxvY2tfdW5pc29sYXRlX2FuZF9tb3ZlX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmUgKnpvbmUsIHN0cnVjdCBwYWdlICpwYWdlKVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTIxNzUtXFxubW0vcGFnZV9hbGxvYy5jOjIxNzY6c3RhdGljIGlubGluZSBib29sIGJvb3N0X3dhdGVybWFyayhzdHJ1Y3Qgem9uZSAqem9uZSlcXG5tbS9wYWdlX2FsbG9jLmMtMjE3Ny17XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9MjMwNz10cnlfdG9fY2xhaW1fYmxvY2soc3RydWN0IHpvbmUgKnpvbmUsIHN0cnVjdCBwYWdlICpwYWdlLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTIzMjktXFx0ICovXFxubW0vcGFnZV9hbGxvYy5jOjIzMzA6XFx0aWYgKGJvb3N0X3dhdGVybWFyayh6b25lKSBcXHUwMDI2XFx1MDAyNiAoYWxsb2NfZmxhZ3MgXFx1MDAyNiBBTExPQ19LU1dBUEQpKVxcbm1tL3BhZ2VfYWxsb2MuYy0yMzMxLVxcdFxcdHNldF9iaXQoWk9ORV9CT09TVEVEX1dBVEVSTUFSSywgXFx1MDAyNnpvbmUtXFx1MDAzZWZsYWdzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTQ6Mzc6NDEuMjk2MjY2Mjk0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM0MDg2NTQxMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBBbGxvY2F0aW9uIFN0cmF0ZWd5KipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGFsbG9jYXRpb24gYmVoYXZpb3IgYmV0dGVyLCBzcGVjaWZpY2FsbHkgd2hlcmUgdGhpcyBgdHJ5X3RvX2NsYWltX2Jsb2NrYCBmdW5jdGlvbiBpcyBiZWluZyBpbnZva2VkLiBUbyBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyByb2xlIGluIG1lbW9yeSBtYW5hZ2VtZW50LCBJJ20gZ29pbmcgdG8ganVtcCBpbnRvIGBtbS9wYWdlX2FsbG9jLmNgIGFuZCB6ZXJvIGluIG9uIHRoYXQgbGluZSBudW1iZXIgYXJvdW5kIDIzMDcuIFRoYXQgc2hvdWxkIGJlIHRoZSBwZXJmZWN0IHNwb3QgdG8gc3RhcnQgdHJhY2luZyB0aGUgY2FsbCBncmFwaCBhbmQgc2VlIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgYWxsb2NhdGlvbiBsb2dpYy4gSG9wZWZ1bGx5LCB0aGF0IHdpbGwgaW1tZWRpYXRlbHkgcmV2ZWFsIGl0cyBrZXkgcmVzcG9uc2liaWxpdGllcyBpbiB0aGUgY3VycmVudCBjb250ZXh0LiBJJ20gZXhwZWN0aW5nIHRvIHNlZSBpdHMgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgY29yZSBhbGxvY2F0b3JzLiBMZXQncyBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjQ3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTQ6Mzc6NDQuNzA0OTIyMjQyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MzY1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9wYWdlX2FsbG9jLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjMwNSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjMwNTpcXHQgKi9cXG4yMzA2OlxcdHN0YXRpYyBzdHJ1Y3QgcGFnZSAqXFxuMjMwNzpcXHR0cnlfdG9fY2xhaW1fYmxvY2soc3RydWN0IHpvbmUgKnpvbmUsIHN0cnVjdCBwYWdlICpwYWdlLFxcbjIzMDg6XFx0XFx0XFx0ICAgaW50IGN1cnJlbnRfb3JkZXIsIGludCBvcmRlciwgaW50IHN0YXJ0X3R5cGUsXFxuMjMwOTpcXHRcXHRcXHQgICBpbnQgYmxvY2tfdHlwZSwgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKVxcbjIzMTA6XFx0e1xcbjIzMTE6XFx0XFx0aW50IGZyZWVfcGFnZXMsIG1vdmFibGVfcGFnZXMsIGFsaWtlX3BhZ2VzO1xcbjIzMTI6XFx0XFx0dW5zaWduZWQgbG9uZyBzdGFydF9wZm47XFxuMjMxMzpcXHRcXG4yMzE0OlxcdFxcdC8qIFRha2Ugb3duZXJzaGlwIGZvciBvcmRlcnMgXFx1MDAzZT0gcGFnZWJsb2NrX29yZGVyICovXFxuMjMxNTpcXHRcXHRpZiAoY3VycmVudF9vcmRlciBcXHUwMDNlPSBwYWdlYmxvY2tfb3JkZXIpIHtcXG4yMzE2OlxcdFxcdFxcdHVuc2lnbmVkIGludCBucl9hZGRlZDtcXG4yMzE3OlxcdFxcbjIzMTg6XFx0XFx0XFx0ZGVsX3BhZ2VfZnJvbV9mcmVlX2xpc3QocGFnZSwgem9uZSwgY3VycmVudF9vcmRlciwgYmxvY2tfdHlwZSk7XFxuMjMxOTpcXHRcXHRcXHRjaGFuZ2VfcGFnZWJsb2NrX3JhbmdlKHBhZ2UsIGN1cnJlbnRfb3JkZXIsIHN0YXJ0X3R5cGUpO1xcbjIzMjA6XFx0XFx0XFx0bnJfYWRkZWQgPSBleHBhbmQoem9uZSwgcGFnZSwgb3JkZXIsIGN1cnJlbnRfb3JkZXIsIHN0YXJ0X3R5cGUpO1xcbjIzMjE6XFx0XFx0XFx0YWNjb3VudF9mcmVlcGFnZXMoem9uZSwgbnJfYWRkZWQsIHN0YXJ0X3R5cGUpO1xcbjIzMjI6XFx0XFx0XFx0cmV0dXJuIHBhZ2U7XFxuMjMyMzpcXHRcXHR9XFxuMjMyNDpcXHRcXG4yMzI1OlxcdFxcdC8qXFxuMjMyNjpcXHRcXHQgKiBCb29zdCB3YXRlcm1hcmtzIHRvIGluY3JlYXNlIHJlY2xhaW0gcHJlc3N1cmUgdG8gcmVkdWNlIHRoZVxcbjIzMjc6XFx0XFx0ICogbGlrZWxpaG9vZCBvZiBmdXR1cmUgZmFsbGJhY2tzLiBXYWtlIGtzd2FwZCBub3cgYXMgdGhlIG5vZGVcXG4yMzI4OlxcdFxcdCAqIG1heSBiZSBiYWxhbmNlZCBvdmVyYWxsIGFuZCBrc3dhcGQgd2lsbCBub3Qgd2FrZSBuYXR1cmFsbHkuXFxuMjMyOTpcXHRcXHQgKi9cXG4yMzMwOlxcdFxcdGlmIChib29zdF93YXRlcm1hcmsoem9uZSkgXFx1MDAyNlxcdTAwMjYgKGFsbG9jX2ZsYWdzIFxcdTAwMjYgQUxMT0NfS1NXQVBEKSlcXG4yMzMxOlxcdFxcdFxcdHNldF9iaXQoWk9ORV9CT09TVEVEX1dBVEVSTUFSSywgXFx1MDAyNnpvbmUtXFx1MDAzZWZsYWdzKTtcXG4yMzMyOlxcdFxcbjIzMzM6XFx0XFx0LyogbW92aW5nIHdob2xlIGJsb2NrIGNhbiBmYWlsIGR1ZSB0byB6b25lIGJvdW5kYXJ5IGNvbmRpdGlvbnMgKi9cXG4yMzM0OlxcdFxcdGlmICghcHJlcF9tb3ZlX2ZyZWVwYWdlc19ibG9jayh6b25lLCBwYWdlLCBcXHUwMDI2c3RhcnRfcGZuLCBcXHUwMDI2ZnJlZV9wYWdlcyxcXG4yMzM1OlxcdFxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2bW92YWJsZV9wYWdlcykpXFxuMjMzNjpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4yMzM3OlxcdFxcbjIzMzg6XFx0XFx0LypcXG4yMzM5OlxcdFxcdCAqIERldGVybWluZSBob3cgbWFueSBwYWdlcyBhcmUgY29tcGF0aWJsZSB3aXRoIG91ciBhbGxvY2F0aW9uLlxcbjIzNDA6XFx0XFx0ICogRm9yIG1vdmFibGUgYWxsb2NhdGlvbiwgaXQncyB0aGUgbnVtYmVyIG9mIG1vdmFibGUgcGFnZXMgd2hpY2hcXG4yMzQxOlxcdFxcdCAqIHdlIGp1c3Qgb2J0YWluZWQuIEZvciBvdGhlciB0eXBlcyBpdCdzIGEgYml0IG1vcmUgdHJpY2t5LlxcbjIzNDI6XFx0XFx0ICovXFxuMjM0MzpcXHRcXHRpZiAoc3RhcnRfdHlwZSA9PSBNSUdSQVRFX01PVkFCTEUpIHtcXG4yMzQ0OlxcdFxcdFxcdGFsaWtlX3BhZ2VzID0gbW92YWJsZV9wYWdlcztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTQ6Mzc6NDQuNzA1MzY4MTEzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE0MDY3OTI3NDUyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIERlY2lzaW9uIGZvciBib29zdF93YXRlcm1hcmsoKSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBtZXRob2RpY2FsbHkuIE15IG9iamVjdGl2ZSBpcyB0byBkZXRlcm1pbmUgaWYgZnV6emluZyB0aGUgcGF0Y2ggbW9kaWZ5aW5nIGBib29zdF93YXRlcm1hcmtgIGlzIHdhcnJhbnRlZC4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYGJvb3N0X3dhdGVybWFya2AgKmlzKiDigJMgaXQncyBwYXJ0IG9mIHRoZSBtZW1vcnkgYWxsb2NhdGlvbi9wYWdlIGFsbG9jYXRvciwgY2FsbGVkIGR1cmluZyBwYWdlYmxvY2sgZmFsbGJhY2suIFRoZSBwYXRjaCBpdHNlbGYgc2VlbXMgdG8gYmUgYWRkaW5nIGEgY2hlY2s6IGBpZiAoaXNfa2R1bXBfa2VybmVsKCkpIHJldHVybiBmYWxzZTtgLiBOb3csIEknbSBnb2luZyB0byBjYXJlZnVsbHkgYXBwbHkgdGhlIGZ1enppbmcgZ3VpZGVsaW5lcy5cblxuRmlyc3QsIHRoZSBrZXkgcXVlc3Rpb246IGlzIHRoZSBtb2RpZmllZCBjb2RlICpyZWFjaGFibGUqIGR1cmluZyBub3JtYWwga2VybmVsIGV4ZWN1dGlvbj8gVGhlIGNvZGUgKmlzKiByZWFjaGFibGU7IHRoZSBjaGVjayBgaXNfa2R1bXBfa2VybmVsKClgICppcyogZXhlY3V0ZWQgZXZlcnkgdGltZSBgYm9vc3Rfd2F0ZXJtYXJrYCBpcyBjYWxsZWQsIGFuZCBgYm9vc3Rfd2F0ZXJtYXJrYCAqaXMqIGNhbGxlZCBvbiBldmVyeSBtZW1vcnkgYWxsb2NhdGlvbiBmYWxsYmFjay4gVGhlcmVmb3JlLCBldmVuIGlmIHRoZSBjb25kaXRpb24gaXMgbm90IG5vcm1hbGx5IHRyaWdnZXJlZCwgaXQgaXMgcGFydCBvZiB0aGUgY29udHJvbCBmbG93LiAgVGhpcyBpbW1lZGlhdGVseSBzdWdnZXN0cyBJIG5lZWQgdG8gY29uc2lkZXIgaXQgZm9yIGZ1enppbmcuXG5cbk5leHQsIEkgaGF2ZSB0byBjYXJlZnVsbHkgY29uc2lkZXIgdGhlIG5lZ2F0aXZlIGNyaXRlcmlhIGZvciAqbm90KiBmdXp6aW5nLiBJcyB0aGUgY2hhbmdlIG5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlPyBObywgaXQncyBjb3JlIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLiBJcyBpdCBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGU/IE5vLCBpdCdzIHBhcnQgb2YgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIHBhdGguIElzIGl0IHJlbGF0ZWQgdG8gdW5yZWFjaGFibGUgaGFyZHdhcmUgb3Igc3BlY2lmaWMgYXJjaGl0ZWN0dXJlcz8gTm8sIGl0J3Mgbm90LiBJcyBpdCBhbiB1bnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aCBsaWtlIGEgdGVhcmRvd24gY2FsbGJhY2s/IE5vLCBpdCdzIG5vdC4gU28sIHRoZSBuZWdhdGl2ZSBjcml0ZXJpYSAqZG9uJ3QqIGFwcGx5LlxuXG5Ob3csIG9uIHRvIHRoZSBwb3NpdGl2ZSBjcml0ZXJpYS4gVGhpcyBmYWxscyBzcXVhcmVseSBpbnRvIFwiQ29yZSBTdWJzeXN0ZW1zOiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKVwiIGFuZCBydW50aW1lIGRlZmVuc2l2ZSBjaGVja3Mgc2luY2Ugd2UgaGF2ZSBhbiBgaWZgIHN0YXRlbWVudC4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyBmdXp6aW5nIGlzIHdhcnJhbnRlZC5cblxuTmV4dCwgSSBuZWVkIHRvIGNvbnNpZGVyIEZvY3VzU3ltYm9scy4gSSBtdXN0IGF2b2lkIHViaXF1aXRvdXMgZnVuY3Rpb25zIGxpa2UgZ2VuZXJpYyBhbGxvY2F0b3JzLiBgYm9vc3Rfd2F0ZXJtYXJrYCAqaXRzZWxmKiBjb3VsZCBiZSB1YmlxdWl0b3VzLCBidXQgaXQncyBjYWxsZWQgdGhyb3VnaCBgdHJ5X3RvX2NsYWltX2Jsb2NrYCwgd2hpY2ggYXBwZWFycyBtb3JlIHNwZWNpZmljLiBJIHdpbGwgbmVlZCB0byB2ZXJpZnkgaWYgYGJvb3N0X3dhdGVybWFya2AgaXMgYSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9uLiBJdCdzIGEgc3RhdGljIGlubGluZSwgc28gSSBuZWVkIHRvIHRhcmdldCBpdHMgKmNhbGxlciosIGB0cnlfdG9fY2xhaW1fYmxvY2tgIGluc3RlYWQuXG5cbk5vdywgdGhlIGNydWNpYWwgcG9pbnQ6IGNhbiBhIGZ1enplciBsaWtlIHN5emthbGxlciByZWFjaCB0aGUgYGlzX2tkdW1wX2tlcm5lbCgpYCBjaGVjaz8gQSBub3JtYWwgc3l6a2FsbGVyIGVudmlyb25tZW50IGRvZXMgKm5vdCogcnVuIGluc2lkZSBhIGtkdW1wIGtlcm5lbCwgc28gdGhpcyBmdW5jdGlvbiB3b3VsZCBub3JtYWxseSByZXR1cm4gZmFsc2UuIEJ1dCBjYW4gaXQgYmUgKm1hZGUqIHRvIHJldHVybiB0cnVlIHRocm91Z2ggZXh0ZXJuYWwgY29uZmlndXJhdGlvbj8gQ2FuIGBlbGZjb3JlaGRyYCBiZSBtYW5pcHVsYXRlZD8gRXhhbWluYXRpb24gb2YgdGhlIGtlcm5lbCBjb2RlIHJldmVhbHMgdGhhdCB0aGlzIGNoZWNrIGlzIG1hZGUgYXQgYm9vdCB0aW1lIGFuZCBvbmx5IGEga2V4ZWMtYm9vdGVkIGtkdW1wIGtlcm5lbCB3b3VsZCBzZXQgdGhpcy4gVGhlcmVmb3JlLCBpdCBpcyBpbXBvc3NpYmxlIGZvciBzeXprYWxsZXIgdG8gcmVhY2ggdGhpcyBzdGF0ZS5cblxuVGhlcmVmb3JlLCBiZWNhdXNlIGBpc19rZHVtcF9rZXJuZWwoKWAgaXMgcGFydCBvZiB0aGUgZXhlY3V0ZWQgY29udHJvbCBmbG93IG9mIG1lbW9yeSBhbGxvY2F0aW9uLCBhbmQgdGhlIGNvZGUgcGF0aCBpcyByZWFjaGFibGUgdmlhIHN0YW5kYXJkIG1lbW9yeSBhbGxvY2F0aW9uIG9wZXJhdGlvbnMsICoqSSBtdXN0IGZ1enogdGhpcyBjaGFuZ2UsIGFkZGluZyBgdHJ5X3RvX2NsYWltX2Jsb2NrYCB0byB0aGUgZm9jdXMgc3ltYm9scyB0byBwcmV2ZW50IGRpbHV0aW9uIG9mIGZ1enppbmcgZWZmb3J0KiouIFRoaXMgcGF0aCAqaXMqIHJlYWNoYWJsZSwgYW5kIHRob3VnaCB0aGUgYGlzX2tkdW1wX2tlcm5lbCgpYCBjaGVjayBpdHNlbGYgaXMgKnVubGlrZWx5KiB0byBiZSB0cmlnZ2VyZWQgYnkgc3RhbmRhcmQgc3l6a2FsbGVyLCBpdCdzIHBhcnQgb2YgdGhlIHByb2dyYW0ncyBjb250cm9sIGZsb3cgYW5kIHNob3VsZCBiZSBmdXp6ZWQgZm9yIGxhdGVudCBidWdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjUzNiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyNTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxNDo0MDowNS4zODQ2NTI2MzJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MjMyODc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRyeV90b19jbGFpbV9ibG9ja1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9wYWdlX2FsbG9jLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vcGFnZV9hbGxvYy5jPTIzMDY9c3RhdGljIHN0cnVjdCBwYWdlICpcXG5tbS9wYWdlX2FsbG9jLmM6MjMwNzp0cnlfdG9fY2xhaW1fYmxvY2soc3RydWN0IHpvbmUgKnpvbmUsIHN0cnVjdCBwYWdlICpwYWdlLFxcbm1tL3BhZ2VfYWxsb2MuYy0yMzA4LVxcdFxcdCAgIGludCBjdXJyZW50X29yZGVyLCBpbnQgb3JkZXIsIGludCBzdGFydF90eXBlLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTIzODI9X19ybXF1ZXVlX2NsYWltKHN0cnVjdCB6b25lICp6b25lLCBpbnQgb3JkZXIsIGludCBzdGFydF9taWdyYXRldHlwZSxcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy0yNDE4LVxcdFxcdHBhZ2UgPSBnZXRfcGFnZV9mcm9tX2ZyZWVfYXJlYShhcmVhLCBmYWxsYmFja19tdCk7XFxubW0vcGFnZV9hbGxvYy5jOjI0MTk6XFx0XFx0cGFnZSA9IHRyeV90b19jbGFpbV9ibG9jayh6b25lLCBwYWdlLCBjdXJyZW50X29yZGVyLCBvcmRlcixcXG5tbS9wYWdlX2FsbG9jLmMtMjQyMC1cXHRcXHRcXHRcXHRcXHQgIHN0YXJ0X21pZ3JhdGV0eXBlLCBmYWxsYmFja19tdCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTQ6NDA6MDUuNDI5ODkxODAxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI4NDEyNTgzNzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIEtlcm5lbCBQYXRjaCBmb3IgRnV6emluZyBFbGlnaWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIHRoZSBjaGFuZ2VzIGFyZSBsb2NhdGVkIGFuZCBob3cgdGhleSdyZSB1c2VkLiBJIHNlZSB0aGF0IHRoZSBjb2RlIG1vZGlmaWNhdGlvbiBpcyBpbiBgYm9vc3Rfd2F0ZXJtYXJrKClgLCB3aXRoaW4gdGhlIHBhZ2UgYWxsb2NhdG9yLCB3aGljaCBtZWFucyBpdCdzIHBhcnQgb2YgY29yZSBtZW1vcnkgbWFuYWdlbWVudCAoYG1tL3BhZ2VfYWxsb2MuY2ApLiBUaGUgY2hhbmdlIGl0c2VsZiBpcyBhIGNoZWNrIHVzaW5nIGBpc19rZHVtcF9rZXJuZWwoKWAgdG8gZWFybHkgZXhpdCB3aXRoaW4gYSBrZHVtcCBjYXB0dXJlIGtlcm5lbC4gVGhlIGtleSBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgbWVyaXRzIGZ1enppbmcgZWZmb3J0IHVuZGVyIHRoZSBnaXZlbiBndWlkZWxpbmVzLlxuXG5GaXJzdCBpbnN0aW5jdCBpcyB0byB0cmFjZSB0aGUgZnVuY3Rpb24gY2FsbHMuIGBib29zdF93YXRlcm1hcmtgIGlzIHN0YXRpYyBpbmxpbmUsIHNvIGlubGluZWQgd2l0aGluIGB0cnlfdG9fY2xhaW1fYmxvY2tgLCB3aGljaCBpcyBhbHNvIHN0YXRpYy4gVGhlc2UgZnVuY3Rpb25zIGFyZSBwYXJ0IG9mIHRoZSBwYWdlIGFsbG9jYXRpb24gcGF0aCwgd2hpY2ggaW52b2x2ZXMgYF9fcm1xdWV1ZV9jbGFpbWAgYW5kIGV2ZW50dWFsbHkgYGdldF9wYWdlX2Zyb21fZnJlZWxpc3RgIGFuZCBpdHMgcmVsYXRpdmVzLiBUaGF0IG1lYW5zIHRoaXMgY29kZSBpcyBleHRyZW1lbHkgdWJpcXVpdG91cywgY2FsbGVkIGZyb20gbmVhcmx5IGV2ZXJ5IHBhcnQgb2YgdGhlIGtlcm5lbC4gVGhlIGRvY3VtZW50YXRpb24gZXhwbGljaXRseSB3YXJucyBhZ2FpbnN0IGZvY3VzaW5nIGZ1enppbmcgb24gXCJ1YmlxdWl0b3VzIGxpZmVjeWNsZSBob3QtcGF0aHNcIiBsaWtlIGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMuIE15IGluaXRpYWwgcmVhY3Rpb24gaXMgdGhhdCB0aGlzIGRpc3F1YWxpZmllcyB0aGUgcGF0Y2ggZm9yIGZvY3VzLiBIb3dldmVyLCBJIG5lZWQgdG8gYmUgbW9yZSBwcmVjaXNlLlxuXG5UaGUgZG9jdW1lbnRhdGlvbiBzdGF0ZXMgdGhhdCBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIFwiYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzLlwiIENydWNpYWxseSwga2R1bXAgc2NlbmFyaW9zIGFyZSBub3Qgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBXaGlsZSB0aGUgY2hlY2sgKml0c2VsZiogaXMgcmVhY2hhYmxlLCB0aGUgY29kZSBwYXRoIGl0IGNoYW5nZXMgaXMgb25seSByZWFjaGVkIGluIGEga2R1bXAga2VybmVsLiBUaGUgcHJpbWFyeSBndWlkYW5jZSBzYXlzIHRoYXQgSSBtdXN0IG5vdCBmdXp6IFwic3RydWN0dXJhbGx5IHVucmVhY2hhYmxlXCIgY29kZSBwYXRocywgZGVmaW5lZCBpbiBTZWN0aW9uIDIuIFRoZSBjaGFuZ2UgKmlzKiByZWFjaGFibGUsIGFuZCAqaXMqIGV4ZWN1dGVkLCBidXQgaW4gdGhlIGNvbnRleHQgb2YgZnV6emluZywgdGhlIHBhdGggdGFrZW4gYnkgdGhlIGtlcm5lbCAoa2R1bXApIGlzIG5vdC4gVGhpcyBtYWtlcyBrZHVtcCB1bnJlYWNoYWJsZS5cblxuU28sIGxldCdzIGV4YW1pbmUgU2VjdGlvbiAyIG1vcmUgY2xvc2VseS4gSSBzaG91bGQgc2V0IFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgbW9kaWZpY2F0aW9ucyBmYWxsIHN0cmljdGx5IGludG8gb25lIG9mIHRoZSBmb2xsb3dpbmcgY2F0ZWdvcmllcywgYW5kIHRoZSBrZXkgcGhyYXNlIGlzIFwiVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzXCIuXG5cblRoZSBzY2VuYXJpbyBoZXJlIGlzIHRoYXQgdGhlIG1vZGlmaWVkIGNvZGUgKmlzKiB1bnJlYWNoYWJsZSBmcm9tIHN5emthbGxlciwgb3VyIHN0YW5kYXJkIGVudmlyb25tZW50LCBiZWNhdXNlIGEga2R1bXAgY2FwdHVyZSBrZXJuZWwgbmV2ZXIgZXhlY3V0ZXMgZHVyaW5nIHN5emthbGxlciBmdXp6aW5nLlxuXG5TZWN0aW9uIDMgc2F5cyB0byBzZXQgV29ydGhGdXp6aW5nPXRydWUgaWYgdGhlIGNoYW5nZXMgdG91Y2ggXCJyZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlXCIuIFNpbmNlIHRoZSBrZHVtcCBwYXJ0IGlzIHVucmVhY2hhYmxlIGluIG91ciBmdXp6aW5nIGNvbnRleHQsIGl0IHdvdWxkIHNlZW0gdGhhdCBXb3J0aEZ1enppbmcgaXMgZmFsc2UuXG5cblRoZSBuZXh0IGNvbnNpZGVyYXRpb24gaXMgdGhlIGBGb2N1c1N5bWJvbHNgLiBUaGUgaW5zdHJ1Y3Rpb25zIGFkdmlzZSBhdm9pZGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucywgc3VjaCBhcyB0aG9zZSByZWxhdGVkIHRvIG1lbW9yeSBhbGxvY2F0aW9uLiBTaW5jZSBgYm9vc3Rfd2F0ZXJtYXJrYCBpcyBjYWxsZWQgZnJvbSBtZW1vcnkgYWxsb2NhdGlvbiBmdW5jdGlvbnMsIHNob3VsZCBgV29ydGhGdXp6aW5nYCBiZSBgdHJ1ZWAsIGl0IGlzIGNsZWFyIHRoYXQgSSB3b3VsZCBub3QgbGlzdCB0aGVzZSB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBpbiBgRm9jdXNTeW1ib2xzYC5cblxuSSB3b3VsZCBuZWVkIHRvIGV4YW1pbmUgdGhlIHBhdGNoJ3MgcHVycG9zZSB0byBkZXRlcm1pbmUgdGhlIHdvcnRoaW5lc3Mgb2YgZnV6emluZy4gSWYgdGhlIGdvYWwgaXMgdG8gdGVzdCBiZWhhdmlvciBvdXRzaWRlIG9mIGEga2R1bXAgZW52aXJvbm1lbnQsIHRoZW4gSSB3b3VsZCBuZWVkIHRvIGZpbmQgd2h5IHRoaXMgY2hhbmdlIHdhcyBkb25lLCBhbmQgd2hhdCB0aGUgb3JpZ2luYWwgaW50ZW50aW9uIHdhcy5cblxuSWYgSSB3ZXJlIHRvIGxvb2sgYXQgYSBzaW1pbGFyIHBhdGNoLCBJIHdvdWxkIGRldGVybWluZSB0aGF0IGBXb3J0aEZ1enppbmc9ZmFsc2VgIGJlY2F1c2UgdGhlIHNwZWNpZmljIGNvZGUgcGF0aCB0aGF0IGlzIGFkZGVkIGJ5IHRoZSBwYXRjaCBpcyBuZXZlciBleGVjdXRlZCBpbiB0aGUgbm9ybWFsIGZ1enppbmcgZW52aXJvbm1lbnQuIEkgd291bGQgbmVlZCB0byByZXNlYXJjaCB0aGUgcmF0aW9uYWxlIGZvciB0aGUgcGF0Y2ggdG8gZGV0ZXJtaW5lIGlmIHRoZXJlIHdlcmUgb3RoZXIgbW9kaWZpY2F0aW9ucywgYW5kIEkgd291bGQgbmVlZCB0byByZXZpZXcgdGhlIHBhdGNoIG1vcmUgZGVlcGx5IHRvIGxvb2sgZm9yIHRoZSBcImZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXCIgZnVuY3Rpb25zIHRvIHBvc3NpYmx5IGFkZCB0byBgRm9jdXNTeW1ib2xzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU3NTksIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODY0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE0OjQwOjMzLjg0MjQ3ODk2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzYwNjkzNzI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkEga2R1bXAgY2FwdHVyZSBrZXJuZWwgZXhpdHMgYmVmb3JlIGEgYm9vc3QgY2FuIHBheSBvZmZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vcGFnZV9hbGxvYy5jPTIxNzY9c3RhdGljIGlubGluZSBib29sIGJvb3N0X3dhdGVybWFyayhzdHJ1Y3Qgem9uZSAqem9uZSlcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy0yMTgzLVxcdC8qXFxubW0vcGFnZV9hbGxvYy5jOjIxODQ6XFx0ICogQSBrZHVtcCBjYXB0dXJlIGtlcm5lbCBleGl0cyBiZWZvcmUgYSBib29zdCBjYW4gcGF5IG9mZiwgd2hpbGVcXG5tbS9wYWdlX2FsbG9jLmMtMjE4NS1cXHQgKiB0aGUgcmFpc2VkIHdhdGVybWFyayBjYW4gZXhjZWVkIHRoZSBtZW1vcnkgbGVmdCBmb3IgdGhlIGR1bXAuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE0OjQwOjM1LjYwMzE4NDAxN1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo4NzEwMTQ1NDM5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBBbmFseXNpczogV2F0ZXJtYXJrIEJvb3N0aW5nIGluIGtkdW1wIEtlcm5lbHMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZyb20gbG9va2luZyBhdCBgbW0vcGFnZV9hbGxvYy5jYCwgdGhpcyBwYXRjaCBpcyBhbGwgYWJvdXQgcHJldmVudGluZyB3YXRlcm1hcmsgYm9vc3RpbmcgaW4ga2R1bXAga2VybmVscywgd2hpY2ggbWFrZXMgc2Vuc2UgZ2l2ZW4gdGhlIG1lbW9yeSBjb25zdHJhaW50cyBvZiB0aGF0IGVudmlyb25tZW50LiBUaGUgZXhpc3RpbmcgY29tbWVudCBhbHJlYWR5IGZsYWdnZWQgdGhlIHBvdGVudGlhbCBmb3Igb3V0LW9mLW1lbW9yeSBzaXR1YXRpb25zLCBhbmQgdGhlIHBhdGNoIGVzc2VudGlhbGx5IGFkZHMgYSBjaGVjayB1c2luZyBgaXNfa2R1bXBfa2VybmVsKClgIHRvIGJhaWwgb3V0IG9mIHdhdGVybWFyayBib29zdGluZyBpZiB3ZSdyZSBpbiBvbmUgb2YgdGhvc2Uga2R1bXAgc2NlbmFyaW9zLiBUaGUgcmF0aW9uYWxlIGlzIHNvbGlkOiBhIGtkdW1wIGtlcm5lbCBoYXMgbGltaXRlZCBtZW1vcnkgYW5kIGV4aXRzIHF1aWNrbHksIHNvIGJvb3N0aW5nIHRoZSB3YXRlcm1hcmsgY291bGQgdHJpZ2dlciBPT00gZXJyb3JzIGR1cmluZyB0aGUgY3J1Y2lhbCBkdW1wIHByb2Nlc3MuXG5cbk5vdywgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uOiBpcyB0aGlzIHBhdGNoIHdvcnRoIGZ1enppbmcgd2l0aCBzeXprYWxsZXI/ICBMZXQncyBsb29rIGF0IHRoZSB0cmlhZ2UgcGhpbG9zb3BoeSBhZ2Fpbi4gUmVhY2hhYmlsaXR5IGlzIHRoZSBrZXkuIFRoZSBtb2RpZmllZCBjb2RlIG5lZWRzIHRvIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBXaGF0IGRvZXMgdGhpcyBwYXRjaCAqZG8qPyBJdCBpbnNlcnRzIGEgY2hlY2s6IGBpZiAoaXNfa2R1bXBfa2VybmVsKCkpIHJldHVybiBmYWxzZTtgICBcblxuVGhlIGJpZyBpc3N1ZT8gU3l6a2FsbGVyICppc24ndCogcnVubmluZyBpbiBhIGtkdW1wIGVudmlyb25tZW50LiBgaXNfa2R1bXBfa2VybmVsKClgIHJlbGllcyBvbiBgZWxmY29yZWhkcl9hZGRyYCwgYW5kIHRoYXQncyAqYWx3YXlzKiBgRUxGQ09SRV9BRERSX01BWGAgdW5kZXIgc3l6a2FsbGVyLiBUaGUgY29kZSBwYXRoIGByZXR1cm4gZmFsc2U7YCBpcyAqbmV2ZXIqIHJlYWNoZWQuIFRoZSBrZXJuZWwncyBiZWhhdmlvciBpbiBRRU1VL0dDRSwgd2hpY2ggaXMgd2hhdCBzeXprYWxsZXIgdXNlcywgaXMgY29tcGxldGVseSB1bmNoYW5nZWQgYnkgdGhpcyBwYXRjaC5cblxuQ2FuIHdlICpldmVyKiBnZXQgYGlzX2tkdW1wX2tlcm5lbCgpYCB0byByZXR1cm4gdHJ1ZSBpbiBhIHdheSB0aGF0IHN5emthbGxlciBjb3VsZCBsZXZlcmFnZT8gTGV0J3MgY2hlY2sgd2hlcmUgYGVsZmNvcmVoZHJfYWRkcmAgaXMgc2V0LlxuXG4xLiAgYHNldHVwX2VsZmNvcmVoZHIoY2hhciAqYXJnKWA6IEVhcmx5IGJvb3QgY29tbWFuZC1saW5lLiBTeXprYWxsZXIgaXMgdXNlcnNwYWNlOyBpdCBjYW4ndCBtZXNzIHdpdGggdGhhdC5cbjIuICBQb3dlclBDLXNwZWNpZmljIGNvZGUuIElycmVsZXZhbnQgdG8geDg2L2FtZDY0LlxuMy4gIERldmljZSB0cmVlIGNvZGUuIEFnYWluLCBub3QgdXNlZCBpbiBzdGFuZGFyZCBBQ1BJIFFFTVUgc2V0dXBzLCBhbmQgZWFybHkgYm9vdCBvbmx5LlxuNC4gIGBmcy9wcm9jL3ZtY29yZS5jYC4gQWgsIGB2bWNvcmVfaW5pdGAuIFRoYXQgY2FsbHMgYGVsZmNvcmVoZHJfYWxsb2NgLiBUaGF0J3MgaW50ZXJlc3RpbmchICBXaGF0IGlzIGBlbGZjb3JlaGRyX2FsbG9jYCBkb2luZz8gSSBuZWVkIHRvIGFuYWx5emUgYGVsZmNvcmVoZHJfYWxsb2NgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTQ4MSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTQ6NDI6MDIuNzA0NjQwOTMxWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjAxNDg0ODU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVsZmNvcmVoZHJfYWxsb2NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2tlcm5lbC9jcmFzaF9kdW1wLmM9NTkwPXN0YXRpYyBzaXplX3QgZ2V0X2VsZmNvcmVoZHJfc2l6ZShpbnQgcGhkcl9jb3VudClcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvY3Jhc2hfZHVtcC5jLTYxMy0gKi9cXG5hcmNoL3MzOTAva2VybmVsL2NyYXNoX2R1bXAuYzo2MTQ6aW50IGVsZmNvcmVoZHJfYWxsb2ModW5zaWduZWQgbG9uZyBsb25nICphZGRyLCB1bnNpZ25lZCBsb25nIGxvbmcgKnNpemUpXFxuYXJjaC9zMzkwL2tlcm5lbC9jcmFzaF9kdW1wLmMtNjE1LXtcXG4tLVxcbmZzL3Byb2Mvdm1jb3JlLmM9MTU5PXNzaXplX3QgcmVhZF9mcm9tX29sZG1lbShzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsIHNpemVfdCBjb3VudCxcXG4tLVxcbmZzL3Byb2Mvdm1jb3JlLmMtMjEwLSAqL1xcbmZzL3Byb2Mvdm1jb3JlLmM6MjExOmludCBfX3dlYWsgZWxmY29yZWhkcl9hbGxvYyh1bnNpZ25lZCBsb25nIGxvbmcgKmFkZHIsIHVuc2lnbmVkIGxvbmcgbG9uZyAqc2l6ZSlcXG5mcy9wcm9jL3ZtY29yZS5jLTIxMi17XFxuLS1cXG5mcy9wcm9jL3ZtY29yZS5jPTE3MTM9c3RhdGljIGludCBfX2luaXQgdm1jb3JlX2luaXQodm9pZClcXG4tLVxcbmZzL3Byb2Mvdm1jb3JlLmMtMTcxNy1cXHQvKiBBbGxvdyBhcmNoaXRlY3R1cmVzIHRvIGFsbG9jYXRlIEVMRiBoZWFkZXIgaW4gMm5kIGtlcm5lbCAqL1xcbmZzL3Byb2Mvdm1jb3JlLmM6MTcxODpcXHRyYyA9IGVsZmNvcmVoZHJfYWxsb2MoXFx1MDAyNmVsZmNvcmVoZHJfYWRkciwgXFx1MDAyNmVsZmNvcmVoZHJfc2l6ZSk7XFxuZnMvcHJvYy92bWNvcmUuYy0xNzE5LVxcdGlmIChyYylcXG4tLVxcbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oPTE4PWV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgZG1fY3J5cHRfa2V5c19hZGRyO1xcbi0tXFxuaW5jbHVkZS9saW51eC9jcmFzaF9kdW1wLmgtMjAtI2lmZGVmIENPTkZJR19DUkFTSF9EVU1QXFxuaW5jbHVkZS9saW51eC9jcmFzaF9kdW1wLmg6MjE6ZXh0ZXJuIGludCBlbGZjb3JlaGRyX2FsbG9jKHVuc2lnbmVkIGxvbmcgbG9uZyAqYWRkciwgdW5zaWduZWQgbG9uZyBsb25nICpzaXplKTtcXG5pbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaC0yMi1leHRlcm4gdm9pZCBlbGZjb3JlaGRyX2ZyZWUodW5zaWduZWQgbG9uZyBsb25nIGFkZHIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxNDo0MjowNC4zMDYxMzQwMTZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjIwMTY0NjA1NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBgdm1jb3JlLmNgKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBuYWlsIGRvd24gc29tZXRoaW5nIHNwZWNpZmljIHJlbGF0ZWQgdG8gY29yZSBkdW1wcywgYW5kIG15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZGlnIGludG8gdGhlIGBmcy9wcm9jL3ZtY29yZS5jYCBmaWxlIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZS4gVG8gZ2V0IHN0YXJ0ZWQsIEknbSB6ZXJvaW5nIGluIG9uIGEgY291cGxlIG9mIHNwZWNpZmljIGxpbmVzOiAyMTAgYW5kIDE3MTMuIEtub3dpbmcgdGhlIGNvZGUgYmFzZSBsaWtlIEkgZG8sIHRob3NlIGxpbmUgbnVtYmVycyBoYXZlIHRvIGJlIGltcG9ydGFudC4gSSBoYXZlIGEgaHVuY2ggdGhhdCB0aGVzZSBwYXJ0aWN1bGFyIGxpbmVzIHdpbGwgY29udGFpbiB0aGUga2V5IGluZm9ybWF0aW9uIHRoYXQgSSBhbSBsb29raW5nIGZvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE1MzcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxNDo0MjoyNi4zMjI1OTc1MzZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA1MTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL3Byb2Mvdm1jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjEwLFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjEwOlxcdCAqL1xcbiAyMTE6XFx0aW50IF9fd2VhayBlbGZjb3JlaGRyX2FsbG9jKHVuc2lnbmVkIGxvbmcgbG9uZyAqYWRkciwgdW5zaWduZWQgbG9uZyBsb25nICpzaXplKVxcbiAyMTI6XFx0e1xcbiAyMTM6XFx0XFx0cmV0dXJuIDA7XFxuIDIxNDpcXHR9XFxuIDIxNTpcXHRcXG4gMjE2OlxcdC8qXFxuIDIxNzpcXHQgKiBBcmNoaXRlY3R1cmVzIG1heSBvdmVycmlkZSB0aGlzIGZ1bmN0aW9uIHRvIGZyZWUgaGVhZGVyXFxuIDIxODpcXHQgKi9cXG4gMjE5OlxcdHZvaWQgX193ZWFrIGVsZmNvcmVoZHJfZnJlZSh1bnNpZ25lZCBsb25nIGxvbmcgYWRkcilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTQ6NDI6MjYuMzIyNzA0Mzg2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI0NzQzNjkxMzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBJJ20gcmVhZHkuIExldCdzIHNlZSB3aGF0IHdlJ3JlIHdvcmtpbmcgd2l0aC4gSSdsbCBzdW1tYXJpemUgdGhlIHByb3ZpZGVkIHRleHQgYXMgYSBzdHJlYW0gb2YgY29uc2Npb3VzbmVzcywgYXMgaWYgdGhlc2Ugd2VyZSBteSBvd24gdGhvdWdodHMsIGdpdmVuIG15IGV4cGVydGlzZS5cblxuKioqXG5cbioqQW5hbHl6aW5nIHRoZSBMaW5lKipcblxuQWxyaWdodCwgSSdtIGRpdmluZyBpbnRvIGxpbmUgMTcxMy4gRmlyc3QsIEkgbmVlZCB0aGUgY29udGV4dC4gV2hhdCdzIHRoZSBsYXJnZXIgYXJndW1lbnQgYmVpbmcgcHJlc2VudGVkPyBXaGF0IGFyZSB0aGUga2V5IHZhcmlhYmxlcyBpbiBwbGF5PyBKdXN0IGEgc2luZ2xlIGxpbmUgaXMgbmV2ZXIgZW5vdWdoOyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcG9zaXRpb24gd2l0aGluIHRoZSBvdmVyYWxsIGZyYW1ld29yay4gSXMgdGhpcyBhIHN1cHBvcnRpbmcgZGV0YWlsLCBhIGNydWNpYWwgcGllY2Ugb2YgZXZpZGVuY2UsIG9yIHBlcmhhcHMgYSByZWJ1dHRhbD8gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGRlcGVuZHMgaGVhdmlseSBvbiB0aGUgc3Vycm91bmRpbmcgYXJndW1lbnRzLiBJcyB0aGlzIGxpbmUgY29uc2lzdGVudCB3aXRoIG15IGV4aXN0aW5nIG1vZGVsLCBvciBkb2VzIGl0IGNoYWxsZW5nZSBteSBoeXBvdGhlc2VzPyBJdCBjb3VsZCBiZSBhIHNpbXBsZSBzdGF0ZW1lbnQgb2YgZmFjdCwgYnV0IG15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBpbnRlcnJvZ2F0ZSBpdCBmb3IgYXNzdW1wdGlvbnMgb3IgYmlhc2VzLiBJIGhhdmUgdG8gc2VlIGhvdyByb2J1c3QgdGhlIGV2aWRlbmNlIGlzLCBhbmQgaWYgaXQncyBiZWVuIHByb3Blcmx5IGNvbnRleHR1YWxpemVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTg2OCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxNDo0Mjo1MS4wNjYzOTgwMDVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTkyMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvcHJvYy92bWNvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNzEzLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNzEzOlxcdHN0YXRpYyBpbnQgX19pbml0IHZtY29yZV9pbml0KHZvaWQpXFxuMTcxNDpcXHR7XFxuMTcxNTpcXHRcXHRpbnQgcmMgPSAwO1xcbjE3MTY6XFx0XFxuMTcxNzpcXHRcXHQvKiBBbGxvdyBhcmNoaXRlY3R1cmVzIHRvIGFsbG9jYXRlIEVMRiBoZWFkZXIgaW4gMm5kIGtlcm5lbCAqL1xcbjE3MTg6XFx0XFx0cmMgPSBlbGZjb3JlaGRyX2FsbG9jKFxcdTAwMjZlbGZjb3JlaGRyX2FkZHIsIFxcdTAwMjZlbGZjb3JlaGRyX3NpemUpO1xcbjE3MTk6XFx0XFx0aWYgKHJjKVxcbjE3MjA6XFx0XFx0XFx0cmV0dXJuIHJjO1xcbjE3MjE6XFx0XFx0LypcXG4xNzIyOlxcdFxcdCAqIElmIGVsZmNvcmVoZHI9IGhhcyBiZWVuIHBhc3NlZCBpbiBjbWRsaW5lIG9yIGNyZWF0ZWQgaW4gMm5kIGtlcm5lbCxcXG4xNzIzOlxcdFxcdCAqIHRoZW4gY2FwdHVyZSB0aGUgZHVtcC5cXG4xNzI0OlxcdFxcdCAqL1xcbjE3MjU6XFx0XFx0aWYgKCEoaXNfdm1jb3JlX3VzYWJsZSgpKSlcXG4xNzI2OlxcdFxcdFxcdHJldHVybiByYztcXG4xNzI3OlxcdFxcdHJjID0gcGFyc2VfY3Jhc2hfZWxmX2hlYWRlcnMoKTtcXG4xNzI4OlxcdFxcdGlmIChyYykge1xcbjE3Mjk6XFx0XFx0XFx0ZWxmY29yZWhkcl9mcmVlKGVsZmNvcmVoZHJfYWRkcik7XFxuMTczMDpcXHRcXHRcXHRwcl93YXJuKFxcXCJub3QgaW5pdGlhbGl6ZWRcXFxcblxcXCIpO1xcbjE3MzE6XFx0XFx0XFx0cmV0dXJuIHJjO1xcbjE3MzI6XFx0XFx0fVxcbjE3MzM6XFx0XFx0ZWxmY29yZWhkcl9mcmVlKGVsZmNvcmVoZHJfYWRkcik7XFxuMTczNDpcXHRcXHRlbGZjb3JlaGRyX2FkZHIgPSBFTEZDT1JFX0FERFJfRVJSO1xcbjE3MzU6XFx0XFxuMTczNjpcXHRcXHRwcm9jX3ZtY29yZSA9IHByb2NfY3JlYXRlKFxcXCJ2bWNvcmVcXFwiLCBTX0lSVVNSLCBOVUxMLCBcXHUwMDI2dm1jb3JlX3Byb2Nfb3BzKTtcXG4xNzM3OlxcdFxcdGlmIChwcm9jX3ZtY29yZSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTQ6NDI6NTEuMDY2NDk5MDA1WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE2NjMzNzkxNjc2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEZ1enppbmcgSW1wYWN0IG9mIHRoZSBgYm9vc3Rfd2F0ZXJtYXJrYCBNb2RpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNoYW5nZSBpbiBgbW0vcGFnZV9hbGxvYy5jYCBhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggYGlzX2tkdW1wX2tlcm5lbCgpYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgc2luY2UgYGlzX2tkdW1wX2tlcm5lbCgpYCByZWxpZXMgb24gYGVsZmNvcmVoZHJfYWRkcmAgd2hpY2ggaXMgdW5saWtlbHkgdG8gYmUgc2V0IGluIGEgc3RhbmRhcmQgZnV6emluZyBzZXR1cCwgdGhlIGFkZGVkIGBpZiAoaXNfa2R1bXBfa2VybmVsKCkpIHJldHVybiBmYWxzZTtgIGNvbmRpdGlvbiBzZWVtcyB1bnJlYWNoYWJsZSBpbiBteSBub3JtYWwgZW52aXJvbm1lbnQuIFRoZXJlZm9yZSwgSSBpbml0aWFsbHkgbGVhbmVkIHRvd2FyZHMgc2V0dGluZyBgV29ydGhGdXp6aW5nYCB0byBgZmFsc2VgLlxuXG5Ib3dldmVyLCB0aGUgaW5zdHJ1Y3Rpb25zIHN0cmVzcyBcIlJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFXCIuICBJIHJlLXJlYWQgU2VjdGlvbiAyLCB3aGljaCBvdXRsaW5lcyB3aGVuIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYC4gIEl0IHVzZXMgdGhlIHBocmFzZSBcIk9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzXCIsIGFuZCBJJ20gdW5zdXJlIGlmIHRoYXQgaXMgYW4gZXhoYXVzdGl2ZSBsaXN0LiBTZWN0aW9uIDEgc3RhdGVzIHRoYXQgdW5yZWFjaGFibGUgY29kZSBNVVNUIE5PVCBiZSBmdXp6ZWQuXG5cblRoZW4gU2VjdGlvbiAzIHN0YXRlcyBcIlJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlXCIuIEkgcmVhbGl6ZSB0aGF0IGBib29zdF93YXRlcm1hcmtgIGlzIHBhcnQgb2YgdGhlIGBtbS9wYWdlX2FsbG9jLmNgIGFuZCBpcyBhIGNvcmUgbWVtb3J5IGFsbG9jYXRpb24gcGF0aCDigJMgaXQncyBkZWZpbml0ZWx5IHJlYWNoYWJsZS5cblxuSSBub3cgcmVhbGl6ZSB0aGF0IHRoZSBhZGRlZCBgaWYgKGlzX2tkdW1wX2tlcm5lbCgpKWAgY2hlY2sgaXMgKmV4ZWN1dGVkKiB3aXRoaW4gYSBzdGFuZGFyZCBrZXJuZWwsIGJ1dCB1bmRlciAqbm9ybWFsKiBjaXJjdW1zdGFuY2VzIHdpbGwgYWx3YXlzIHJldHVybiBmYWxzZS4gVGh1cywgdGhlIGNoYW5nZSAqZG9lcyogdG91Y2ggcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZS4gVGhlIGtkdW1wIGNvbmRpdGlvbmFsIHNpbXBseSBzaG9ydC1jaXJjdWl0cyBleGVjdXRpb24gdW5kZXIgYSAqc3BlY2lmaWMqIHNpdHVhdGlvbiwgYnV0IHRoYXQgc2l0dWF0aW9uIGlzbid0IHJlbGV2YW50IHRvIGZ1enppbmcuXG5cblRodXMsIGJhc2VkIG9uIHRoZSBwcmluY2lwbGUgb2YgUkVBQ0hBQklMSVRZLCBJIG11c3Qgc2V0IGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cbk5vdyBjb21lcyB0aGUgaGFyZCBwYXJ0OiBGaW5kaW5nIGdvb2QgRm9jdXNTeW1ib2xzLiAgVGhlIGd1aWRlbGluZXMgZXhwbGljaXRseSB3YXJuIGFnYWluc3QgbGlzdGluZyBcInViaXF1aXRvdXMgbGlmZWN5Y2xlIGhvdC1wYXRoc1wiIGxpa2UgY29yZSBhbGxvY2F0b3JzLiBJIG5lZWQgdG8gYXZvaWQgZGlsdXRpbmcgdGhlIGZ1enppbmcgZWZmb3J0LiBJJ20gdGhpbmtpbmcuLi5XaGF0IGNhbGxzIGBib29zdF93YXRlcm1hcmtgPyAgYHRyeV90b19jbGFpbV9ibG9ja2A/IFRoYXQgaXMgYWxzbyBhIGhvdC1wYXRoLiBXaGF0IGFib3V0IHRoZSBmdW5jdGlvbnMgdGhhdCBjYWxsIGB0cnlfdG9fY2xhaW1fYmxvY2tgLCBsaWtlIGBfX3JtcXVldWVfY2xhaW1gIG9yIGBybXF1ZXVlYD8gVGhlc2UgYWxzbyBhcmUgbm90IGdvb2QuXG5cblNvLCBpcyB0aGVyZSBBTlkgbm9uLXViaXF1aXRvdXMgZnVuY3Rpb24/IENhbiBJIGxpbmsgdGhpcyBjaGFuZ2UgdG8gYSBwYXJ0aWN1bGFyIGZlYXR1cmUgb3IgZW50cnlwb2ludD8gIExldCdzIHNlZSBpZiB0aGUgYHdhdGVybWFya19ib29zdF9mYWN0b3JgIGlzIGV4cG9zZWQgdmlhIHN5c2N0bC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI0OTQsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTgwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTQ6NDU6MzcuNDA0NDE4NjhaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTU1NjUyNTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwid2F0ZXJtYXJrX2Jvb3N0X2ZhY3RvclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC92bS5yc3Q9MjI9Q3VycmVudGx5LCB0aGVzZSBmaWxlcyBhcmUgaW4gL3Byb2Mvc3lzL3ZtOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwvdm0ucnN0LTc2LS0gdmZzX2NhY2hlX3ByZXNzdXJlX2Rlbm9tXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwvdm0ucnN0Ojc3Oi0gd2F0ZXJtYXJrX2Jvb3N0X2ZhY3RvclxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL3ZtLnJzdC03OC0tIHdhdGVybWFya19zY2FsZV9mYWN0b3JcXG4tLVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL3ZtLnJzdD0xMTUzPXZmc19jYWNoZV9wcmVzc3VyZSBzZXR0aW5nIHRvIHRha2UgZWZmZWN0LlxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL3ZtLnJzdC0xMTU0LVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL3ZtLnJzdDoxMTU1OndhdGVybWFya19ib29zdF9mYWN0b3JcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC92bS5yc3QtMTE1Ni09PT09PT09PT09PT09PT09PT09PT09XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9Mjc3PWludCB1c2VyX21pbl9mcmVlX2tieXRlcyA9IC0xO1xcbm1tL3BhZ2VfYWxsb2MuYzoyNzg6c3RhdGljIGludCB3YXRlcm1hcmtfYm9vc3RfZmFjdG9yIF9fcmVhZF9tb3N0bHkgPSAxNTAwMDtcXG5tbS9wYWdlX2FsbG9jLmMtMjc5LXN0YXRpYyBpbnQgd2F0ZXJtYXJrX3NjYWxlX2ZhY3RvciA9IDEwO1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTIxNzY9c3RhdGljIGlubGluZSBib29sIGJvb3N0X3dhdGVybWFyayhzdHJ1Y3Qgem9uZSAqem9uZSlcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy0yMTc5LVxcbm1tL3BhZ2VfYWxsb2MuYzoyMTgwOlxcdGlmICghd2F0ZXJtYXJrX2Jvb3N0X2ZhY3RvcilcXG5tbS9wYWdlX2FsbG9jLmMtMjE4MS1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtMjE5OS1cXHRtYXhfYm9vc3QgPSBtdWx0X2ZyYWMoem9uZS1cXHUwMDNlX3dhdGVybWFya1tXTUFSS19ISUdIXSxcXG5tbS9wYWdlX2FsbG9jLmM6MjIwMDpcXHRcXHRcXHR3YXRlcm1hcmtfYm9vc3RfZmFjdG9yLCAxMDAwMCk7XFxubW0vcGFnZV9hbGxvYy5jLTIyMDEtXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9Njk0NT1zdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBwYWdlX2FsbG9jX3N5c2N0bF90YWJsZVtdID0ge1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTY5NTQtXFx0e1xcbm1tL3BhZ2VfYWxsb2MuYzo2OTU1OlxcdFxcdC5wcm9jbmFtZVxcdD0gXFxcIndhdGVybWFya19ib29zdF9mYWN0b3JcXFwiLFxcbm1tL3BhZ2VfYWxsb2MuYzo2OTU2OlxcdFxcdC5kYXRhXFx0XFx0PSBcXHUwMDI2d2F0ZXJtYXJrX2Jvb3N0X2ZhY3RvcixcXG5tbS9wYWdlX2FsbG9jLmM6Njk1NzpcXHRcXHQubWF4bGVuXFx0XFx0PSBzaXplb2Yod2F0ZXJtYXJrX2Jvb3N0X2ZhY3RvciksXFxubW0vcGFnZV9hbGxvYy5jLTY5NTgtXFx0XFx0Lm1vZGVcXHRcXHQ9IDA2NDQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE0OjQ1OjM5LjAxOTk5MDc1NVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyOTgyOTk3MzAxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBgYm9vc3Rfd2F0ZXJtYXJrYCBGdW5jdGlvbioqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuLi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBjb2RlIGJldHRlci4gSSBzZWUgYGJvb3N0X3dhdGVybWFya2AgYmVpbmcgY2FsbGVkLCBidXQgd2hhdCdzICp0cmlnZ2VyaW5nKiB0aGF0IGNhbGw/IEkgbmVlZCB0byB0cmFjZSBpdHMgdXNhZ2Ugd2l0aGluIHRoZSA2Lngga2VybmVsLiBBbHJpZ2h0LCBsZXQncyBzZWFyY2ggZm9yIGNhbGxzIHRvIGBib29zdF93YXRlcm1hcmtgLiBIbW0sIGxpbmUgMjMzMCBzaG93cyB0aGUgZm9sbG93aW5nOlxuXG5gYGBjXG5cdGlmIChib29zdF93YXRlcm1hcmsoem9uZSkgXHUwMDI2XHUwMDI2IChhbGxvY19mbGFncyBcdTAwMjYgQUxMT0NfS1NXQVBEKSlcblx0XHRzZXRfYml0KFpPTkVfQk9PU1RFRF9XQVRFUk1BUkssIFx1MDAyNnpvbmUtXHUwMDNlZmxhZ3MpO1xuYGBgXG5cblJpZ2h0LCBzbyBpdCdzIGEgY29uZGl0aW9uYWwgY2FsbC4gSWYgYGJvb3N0X3dhdGVybWFyayh6b25lKWAgcmV0dXJucyB0cnVlICphbmQqIGBhbGxvY19mbGFnc2AgaGFzIHRoZSBgQUxMT0NfS1NXQVBEYCBmbGFnIHNldCwgdGhlbiBpdCBzZXRzIHRoZSBgWk9ORV9CT09TVEVEX1dBVEVSTUFSS2AgYml0IGluIHRoZSB6b25lIGZsYWdzLiBPa2F5LCBJIHVuZGVyc3RhbmQgKndoZW4qIGl0J3MgY2FsbGVkLCBidXQgbm93IEkgbmVlZCB0byBrbm93IHdoYXQgaGFwcGVucyBhcyBhIHJlc3VsdCBvZiB0aGUgYFpPTkVfQk9PU1RFRF9XQVRFUk1BUktgIGJlaW5nIHNldC4gV2hhdCBkb2VzIHRoYXQgZmxhZyBhY3R1YWxseSAqZG8qPyBJIHNob3VsZCBsb29rIGZvciBhbGwgdGhlIHBsYWNlcyB3aGVyZSBgWk9ORV9CT09TVEVEX1dBVEVSTUFSS2AgaXMgdXNlZCBpbiB0aGUgY29kZWJhc2UuIExldCdzIGdyZXAgZm9yIHRoYXQgc3BlY2lmaWMgaWRlbnRpZmllci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU4NDUsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTQ6NDY6MDguODQ5OTY2NzM4WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTc5OTM3NzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlpPTkVfQk9PU1RFRF9XQVRFUk1BUktcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0PTM3ND1HZW5lcmFsXFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3QtNTI3LSAgVGhlIHpvbmUgZmxhZ3MuIFRoZSBsZWFzdCB0aHJlZSBiaXRzIGFyZSB1c2VkIGFuZCBkZWZpbmVkIGJ5XFxuRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0OjUyODogIGBgZW51bSB6b25lX2ZsYWdzYGAuIGBgWk9ORV9CT09TVEVEX1dBVEVSTUFSS2BgIChiaXQgMCk6IHpvbmUgcmVjZW50bHkgYm9vc3RlZFxcbkRvY3VtZW50YXRpb24vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdC01MjktICB3YXRlcm1hcmtzLiBDbGVhcmVkIHdoZW4ga3N3YXBkIGlzIHdva2VuLiBgYFpPTkVfUkVDTEFJTV9BQ1RJVkVgYCAoYml0IDEpOlxcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD0xMTcyPWVudW0gem9uZV9mbGFncyB7XFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDoxMTczOlxcdFpPTkVfQk9PU1RFRF9XQVRFUk1BUkssXFx0XFx0Lyogem9uZSByZWNlbnRseSBib29zdGVkIHdhdGVybWFya3MuXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xMTc0LVxcdFxcdFxcdFxcdFxcdCAqIENsZWFyZWQgd2hlbiBrc3dhcGQgaXMgd29rZW4uXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9MjMwNz10cnlfdG9fY2xhaW1fYmxvY2soc3RydWN0IHpvbmUgKnpvbmUsIHN0cnVjdCBwYWdlICpwYWdlLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTIzMzAtXFx0aWYgKGJvb3N0X3dhdGVybWFyayh6b25lKSBcXHUwMDI2XFx1MDAyNiAoYWxsb2NfZmxhZ3MgXFx1MDAyNiBBTExPQ19LU1dBUEQpKVxcbm1tL3BhZ2VfYWxsb2MuYzoyMzMxOlxcdFxcdHNldF9iaXQoWk9ORV9CT09TVEVEX1dBVEVSTUFSSywgXFx1MDAyNnpvbmUtXFx1MDAzZWZsYWdzKTtcXG5tbS9wYWdlX2FsbG9jLmMtMjMzMi1cXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz0zNDIyPXN0cnVjdCBwYWdlICpybXF1ZXVlKHN0cnVjdCB6b25lICpwcmVmZXJyZWRfem9uZSxcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy0zNDQxLVxcdGlmICgoYWxsb2NfZmxhZ3MgXFx1MDAyNiBBTExPQ19LU1dBUEQpIFxcdTAwMjZcXHUwMDI2XFxubW0vcGFnZV9hbGxvYy5jOjM0NDI6XFx0ICAgIHVubGlrZWx5KHRlc3RfYml0KFpPTkVfQk9PU1RFRF9XQVRFUk1BUkssIFxcdTAwMjZ6b25lLVxcdTAwM2VmbGFncykpKSB7XFxubW0vcGFnZV9hbGxvYy5jOjM0NDM6XFx0XFx0Y2xlYXJfYml0KFpPTkVfQk9PU1RFRF9XQVRFUk1BUkssIFxcdTAwMjZ6b25lLVxcdTAwM2VmbGFncyk7XFxubW0vcGFnZV9hbGxvYy5jLTM0NDQtXFx0XFx0d2FrZXVwX2tzd2FwZCh6b25lLCAwLCAwLCB6b25lX2lkeCh6b25lKSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE0OjQ2OjEwLjQyOTkwOTgzNFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNDY5MTE1MDEwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipUcmFjaW5nIHRoZSBgYm9vc3Rfd2F0ZXJtYXJrYCBGdW5jdGlvbiBDYWxsKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGh1bmNoIGlzIHRoYXQgYGJvb3N0X3dhdGVybWFya2AncyB1c2FnZSBpcyB0aWdodGx5IGNvdXBsZWQuIEknbSBmb2N1c2luZyBvbiBpdHMgY2FsbHMgd2l0aGluIGB0cnlfdG9fY2xhaW1fYmxvY2tgLiAgU28sIHRoYXQgc2VlbXMgdG8gYmUgdGhlIGNyaXRpY2FsIGVudHJ5IHBvaW50LiBUaGUgcGxhbiBub3cgaXMgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoLiBGcm9tIHRoZSBsb29rcyBvZiBpdCwgIGB0cnlfdG9fY2xhaW1fYmxvY2tgIGlzIHRoZSBpbW1lZGlhdGUgcGFyZW50LiAgXG5cbk5vdywgSSBuZWVkIHRvIHNlZSB3aGVyZSBgdHJ5X3RvX2NsYWltX2Jsb2NrYCBpcyBjYWxsZWQuIExldCBtZSBxdWlja2x5IHNjYW4gYG1tL3BhZ2VfYWxsb2MuY2AgZm9yIGNhbGxlcnMuIEFoLCB0aGVyZSBpdCBpcyDigJMgYF9fcm1xdWV1ZV9jbGFpbWAuICBPa2F5LCBnb29kLiBTbywgYHRyeV90b19jbGFpbV9ibG9ja2AgaXMgY2FsbGVkIGJ5IGBfX3JtcXVldWVfY2xhaW1gLlxuXG5Ob3csIHRpbWUgdG8gZGl2ZSBkZWVwZXIgaW50byBgX19ybXF1ZXVlX2NsYWltYC4gSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaXRzIGNvbnRleHQsIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGl0IGNhbGxzIGB0cnlfdG9fY2xhaW1fYmxvY2tgLCBhbmQgd2hhdCBpbXBsaWNhdGlvbnMgdGhhdCBoYXMgZm9yIGBib29zdF93YXRlcm1hcmtgLiBJIGV4cGVjdCB0aGlzIHRvIGJlIGEgY3J1Y2lhbCBsaW5rIGluIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ3kgYW5kIGhvdyB0aGUgXCJib29zdFwiIGFmZmVjdHMgcGFnZSBhbGxvY2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjc3NywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE0OjQ2OjM1LjEyMTA2MzM1NFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDc0OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vcGFnZV9hbGxvYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIzODAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIzODA6XFx0ICovXFxuMjM4MTpcXHRzdGF0aWMgX19hbHdheXNfaW5saW5lIHN0cnVjdCBwYWdlICpcXG4yMzgyOlxcdF9fcm1xdWV1ZV9jbGFpbShzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IG9yZGVyLCBpbnQgc3RhcnRfbWlncmF0ZXR5cGUsXFxuMjM4MzpcXHRcXHRcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXFxuMjM4NDpcXHR7XFxuMjM4NTpcXHRcXHRzdHJ1Y3QgZnJlZV9hcmVhICphcmVhO1xcbjIzODY6XFx0XFx0aW50IGN1cnJlbnRfb3JkZXI7XFxuMjM4NzpcXHRcXHRpbnQgbWluX29yZGVyID0gb3JkZXI7XFxuMjM4ODpcXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG4yMzg5OlxcdFxcdGludCBmYWxsYmFja19tdDtcXG4yMzkwOlxcdFxcbjIzOTE6XFx0XFx0LypcXG4yMzkyOlxcdFxcdCAqIERvIG5vdCBzdGVhbCBwYWdlcyBmcm9tIGZyZWVsaXN0cyBiZWxvbmdpbmcgdG8gb3RoZXIgcGFnZWJsb2Nrc1xcbjIzOTM6XFx0XFx0ICogaS5lLiBvcmRlcnMgXFx1MDAzYyBwYWdlYmxvY2tfb3JkZXIuIElmIHRoZXJlIGFyZSBubyBsb2NhbCB6b25lcyBmcmVlLFxcbjIzOTQ6XFx0XFx0ICogdGhlIHpvbmVsaXN0cyB3aWxsIGJlIHJlaXRlcmF0ZWQgd2l0aG91dCBBTExPQ19OT0ZSQUdNRU5ULlxcbjIzOTU6XFx0XFx0ICovXFxuMjM5NjpcXHRcXHRpZiAob3JkZXIgXFx1MDAzYyBwYWdlYmxvY2tfb3JkZXIgXFx1MDAyNlxcdTAwMjYgYWxsb2NfZmxhZ3MgXFx1MDAyNiBBTExPQ19OT0ZSQUdNRU5UKVxcbjIzOTc6XFx0XFx0XFx0bWluX29yZGVyID0gcGFnZWJsb2NrX29yZGVyO1xcbjIzOTg6XFx0XFxuMjM5OTpcXHRcXHQvKlxcbjI0MDA6XFx0XFx0ICogRmluZCB0aGUgbGFyZ2VzdCBhdmFpbGFibGUgZnJlZSBwYWdlIGluIHRoZSBvdGhlciBsaXN0LiBUaGlzIHJvdWdobHlcXG4yNDAxOlxcdFxcdCAqIGFwcHJveGltYXRlcyBmaW5kaW5nIHRoZSBwYWdlYmxvY2sgd2l0aCB0aGUgbW9zdCBmcmVlIHBhZ2VzLCB3aGljaFxcbjI0MDI6XFx0XFx0ICogd291bGQgYmUgdG9vIGNvc3RseSB0byBkbyBleGFjdGx5LlxcbjI0MDM6XFx0XFx0ICovXFxuMjQwNDpcXHRcXHRmb3IgKGN1cnJlbnRfb3JkZXIgPSBNQVhfUEFHRV9PUkRFUjsgY3VycmVudF9vcmRlciBcXHUwMDNlPSBtaW5fb3JkZXI7XFxuMjQwNTpcXHRcXHRcXHRcXHRcXHQtLWN1cnJlbnRfb3JkZXIpIHtcXG4yNDA2OlxcdFxcdFxcdGVudW0gZmFsbGJhY2tfcmVzdWx0IHJlc3VsdDtcXG4yNDA3OlxcdFxcbjI0MDg6XFx0XFx0XFx0YXJlYSA9IFxcdTAwMjYoem9uZS1cXHUwMDNlZnJlZV9hcmVhW2N1cnJlbnRfb3JkZXJdKTtcXG4yNDA5OlxcdFxcdFxcdHJlc3VsdCA9IGZpbmRfc3VpdGFibGVfZmFsbGJhY2soYXJlYSwgY3VycmVudF9vcmRlcixcXG4yNDEwOlxcdFxcdFxcdFxcdFxcdFxcdFxcdHN0YXJ0X21pZ3JhdGV0eXBlLCB0cnVlLCBcXHUwMDI2ZmFsbGJhY2tfbXQpO1xcbjI0MTE6XFx0XFxuMjQxMjpcXHRcXHRcXHRpZiAocmVzdWx0ID09IEZBTExCQUNLX0VNUFRZKVxcbjI0MTM6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMjQxNDpcXHRcXG4yNDE1OlxcdFxcdFxcdGlmIChyZXN1bHQgPT0gRkFMTEJBQ0tfTk9DTEFJTSlcXG4yNDE2OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjI0MTc6XFx0XFxuMjQxODpcXHRcXHRcXHRwYWdlID0gZ2V0X3BhZ2VfZnJvbV9mcmVlX2FyZWEoYXJlYSwgZmFsbGJhY2tfbXQpO1xcbjI0MTk6XFx0XFx0XFx0cGFnZSA9IHRyeV90b19jbGFpbV9ibG9jayh6b25lLCBwYWdlLCBjdXJyZW50X29yZGVyLCBvcmRlcixcXG4yNDIwOlxcdFxcdFxcdFxcdFxcdFxcdCAgc3RhcnRfbWlncmF0ZXR5cGUsIGZhbGxiYWNrX210LFxcbjI0MjE6XFx0XFx0XFx0XFx0XFx0XFx0ICBhbGxvY19mbGFncyk7XFxuMjQyMjpcXHRcXHRcXHRpZiAocGFnZSkge1xcbjI0MjM6XFx0XFx0XFx0XFx0dHJhY2VfbW1fcGFnZV9hbGxvY19leHRmcmFnKHBhZ2UsIG9yZGVyLCBjdXJyZW50X29yZGVyLFxcbjI0MjQ6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIHN0YXJ0X21pZ3JhdGV0eXBlLCBmYWxsYmFja19tdCk7XFxuMjQyNTpcXHRcXHRcXHRcXHRyZXR1cm4gcGFnZTtcXG4yNDI2OlxcdFxcdFxcdH1cXG4yNDI3OlxcdFxcdH1cXG4yNDI4OlxcdFxcbjI0Mjk6XFx0XFx0cmV0dXJuIE5VTEw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE0OjQ2OjM1LjEyMTQxMjczNFoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMjI4MTI2MzU1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIFRob3VnaHRzIG9uIGBfX3JtcXVldWVfY2xhaW1gKipcblxuT2theSwgc28gYF9fcm1xdWV1ZV9jbGFpbWAgaXMgZGVjbGFyZWQgYXMgYF9fYWx3YXlzX2lubGluZWAuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdHdvIHRoaW5nczogRmlyc3QsIHRoZSBjb21waWxlciBpcyBiZWluZyBpbnN0cnVjdGVkIHRvIGluc2VydCB0aGUgY29kZSBvZiB0aGlzIGZ1bmN0aW9uIGRpcmVjdGx5IGF0IGV2ZXJ5IGNhbGwgc2l0ZSwgb3B0aW1pemluZyBmb3Igc3BlZWQgYnkgYXZvaWRpbmcgdGhlIG92ZXJoZWFkIG9mIGEgZnVuY3Rpb24gY2FsbC4gU2Vjb25kLCBpZiBpdCdzIGJlaW5nIGRlY2xhcmVkIGFzIGBfX2Fsd2F5c19pbmxpbmVgLCBpdCdzIGxpa2VseSBhIHJlbGF0aXZlbHkgc2hvcnQgYW5kIGZyZXF1ZW50bHkgdXNlZCBwaWVjZSBvZiBjb2RlLiBOb3csIHRoZSBrZXkgcXVlc3Rpb24gaXM6IHdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gYWN0dWFsbHkgKmNhbGxlZCo/IFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgb2YgaXRzIGNhbGxzIGlzIGVzc2VudGlhbCBmb3IgZ3Jhc3BpbmcgaXRzIHB1cnBvc2UgYW5kLCBwb3RlbnRpYWxseSwgaWRlbnRpZnlpbmcgYW55IHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIHN1YnRsZSBiZWhhdmlvci4gVGltZSB0byB0cmFjayBkb3duIGFsbCB0aGUgY2FsbCBzaXRlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc5MDIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE0OjQ2OjU3LjQwMjY3ODgxWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTI2MDA1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3JtcXVldWVfY2xhaW1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vcGFnZV9hbGxvYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3BhZ2VfYWxsb2MuYz0yMzgxPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgc3RydWN0IHBhZ2UgKlxcbm1tL3BhZ2VfYWxsb2MuYzoyMzgyOl9fcm1xdWV1ZV9jbGFpbShzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IG9yZGVyLCBpbnQgc3RhcnRfbWlncmF0ZXR5cGUsXFxubW0vcGFnZV9hbGxvYy5jLTIzODMtXFx0XFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTI0NzU9X19ybXF1ZXVlKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBtaWdyYXRldHlwZSxcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy0yNTE5LVxcdGNhc2UgUk1RVUVVRV9DTEFJTTpcXG5tbS9wYWdlX2FsbG9jLmM6MjUyMDpcXHRcXHRwYWdlID0gX19ybXF1ZXVlX2NsYWltKHpvbmUsIG9yZGVyLCBtaWdyYXRldHlwZSwgYWxsb2NfZmxhZ3MpO1xcbm1tL3BhZ2VfYWxsb2MuYy0yNTIxLVxcdFxcdGlmIChwYWdlKSB7XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NDE0OD1fX2FsbG9jX3BhZ2VzX2RpcmVjdF9jb21wYWN0KGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNDE2NS1cXHQgKiBuZWVkIHRvIHJlY2xhaW0gc3BhY2UgaW4gYSBibG9jayBvZiBtYXRjaGluZyB0eXBlLCBvciBjbGVhclxcbm1tL3BhZ2VfYWxsb2MuYzo0MTY2OlxcdCAqIG91dCBhbiBlbnRpcmUgYmxvY2sgdG8gYWxsb3cgX19ybXF1ZXVlX2NsYWltKCkgdG8gY29udmVydC5cXG5tbS9wYWdlX2FsbG9jLmMtNDE2Ny1cXHQgKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxNDo0Njo1Ny40NDc5NDU1MTlaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjAwMjg2MDM0NTYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk15IFRob3VnaHQgUHJvY2VzcyBvbiBgcm1xdWV1ZWAgYW5kIGBfX3JtcXVldWVgKipcblxuQWxyaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoaXMgYHJtcXVldWVgIGZ1bmN0aW9uLi4uIGFuZCB0aGUgY3J1Y2lhbCBwb2ludCB0aGF0IGtlZXBzIHBvcHBpbmcgdXAgaXMgaXRzIGludGVyYWN0aW9uIHdpdGggYF9fcm1xdWV1ZWAuIEl0J3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgYWN0dWFsbHksIGluIGNvbmNlcHQuIGBybXF1ZXVlYCwgZnJvbSB3aGF0IEknbSBzZWVpbmcsIGlzIHRoZSBwdWJsaWMtZmFjaW5nIGZ1bmN0aW9uLCB0aGUgb25lIHRoYXQgaGFuZGxlcyB0aGUgXCJyZW1vdmUgZnJvbSBxdWV1ZVwiIG9wZXJhdGlvbiBhcyBhIHdob2xlLiBJdCdzIHRoZSBlbnRyeSBwb2ludCwgbGlrZWx5IG1hbmFnaW5nIHRoaW5ncyBsaWtlIGxvY2tpbmcsIGVycm9yIGNoZWNraW5nLCBhbmQgbWF5YmUgc29tZSBoaWdoZXItbGV2ZWwgbG9naWMgc3BlY2lmaWMgdG8gdGhlIHF1ZXVlJ3MgY29udGV4dC5cblxuQnV0IHRoZSByZWFsIG1lYXQgb2YgdGhlIG9wZXJhdGlvbiDigJMgdGhlICphY3R1YWwqIHJlbW92YWwgb2YgdGhlIGVsZW1lbnQgZnJvbSB0aGUgcXVldWUncyBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMsIHRoZSBudXRzIGFuZCBib2x0cyBvZiBpdCDigJMgKnRoYXQncyogd2hlcmUgYF9fcm1xdWV1ZWAgY29tZXMgaW4uIEl0J3MgdGhlIHdvcmtob3JzZSwgdGhlIGxvdy1sZXZlbCBmdW5jdGlvbiB0aGF0IGRvZXMgdGhlIGhlYXZ5IGxpZnRpbmcuIEknbSBpbmZlcnJpbmcgdGhhdCBgX19ybXF1ZXVlYCBpcyBkZXNpZ25lZCB0byBiZSB0aGUgY29yZSwgdGhlIHBhcnQgdGhhdCdzIHBvdGVudGlhbGx5IGNhbGxlZCBmcm9tIG90aGVyIHBsYWNlcywgYWxsb3dpbmcgZm9yIGEgbW9yZSBncmFudWxhciBhbmQgZWZmaWNpZW50IGFwcHJvYWNoIHRvIHF1ZXVlIG1hbmlwdWxhdGlvbi4gVGhpcyBhbGxvd3MgbWUgdG8gaXNvbGF0ZSB0aGUgbW9yZSBzcGVjaWZpYyByZW1vdmFsIG9mIGFuIG9iamVjdCBmcm9tIHRoZSBxdWV1ZSBmcm9tIHRoZSBoaWdoZXIgb3JkZXIgZnVuY3Rpb25zLlxuXG5UaGUgcGF0dGVybiBpcyBzdGFuZGFyZCBhbmQgcXVpdGUgd2lzZTogYHJtcXVldWVgIGhhbmRsZXMgdGhlIG92ZXJoZWFkLCB0aGUgcHVibGljIGludGVyZmFjZSwgdGhlIFwiZ3VhcmRpbmcsXCIgaWYgeW91IHdpbGwsIHdoaWxlIGBfX3JtcXVldWVgIGRvZXMgdGhlIHJlYWwgd29yay4gTWFrZXMgZGVidWdnaW5nLCBtYWludGVuYW5jZSwgYW5kIHBvdGVudGlhbCBmdXR1cmUgb3B0aW1pemF0aW9ucyBtdWNoIHNpbXBsZXIuIEnigJltIGJldHRpbmcgYF9fcm1xdWV1ZWAgaXMgY2FyZWZ1bGx5IG9wdGltaXplZCBmb3IgdGhlIGRhdGEgc3RydWN0dXJlIHRoZSBxdWV1ZSB1c2VzIOKAkyBhIGxpbmtlZCBsaXN0LCBtYXliZSBhIGNpcmN1bGFyIGJ1ZmZlciwgd2hhdGV2ZXIgaXQgaXMuIEl0J3MgdGhlIHBlcmZvcm1hbmNlLWNyaXRpY2FsIHBhcnQsIHRoZSBvbmUgeW91J2QgcmVhbGx5IHdhbnQgdG8gc2NydXRpbml6ZSBmb3IgYW55IGJvdHRsZW5lY2tzLiBVbmRlcnN0YW5kaW5nIHRoZSBkaXZpc2lvbiBvZiBsYWJvciBiZXR3ZWVuIHRoZXNlIHR3byBpcyBrZXkgdG8gYW55IHJlYWwgYW5hbHlzaXMgb2YgdGhlIHF1ZXVlJ3MgcGVyZm9ybWFuY2UgYW5kIGJlaGF2aW9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODQzMCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE0OjUwOjE3LjczMzk4MjMxWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjUwMzI2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3JtcXVldWVcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9wYWdlX2FsbG9jLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vcGFnZV9hbGxvYy5jPTI0NzQ9c3RhdGljIF9fYWx3YXlzX2lubGluZSBzdHJ1Y3QgcGFnZSAqXFxubW0vcGFnZV9hbGxvYy5jOjI0NzU6X19ybXF1ZXVlKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBtaWdyYXRldHlwZSxcXG5tbS9wYWdlX2FsbG9jLmMtMjQ3Ni1cXHQgIHVuc2lnbmVkIGludCBhbGxvY19mbGFncywgZW51bSBybXF1ZXVlX21vZGUgKm1vZGUpXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9MjU0ND1zdGF0aWMgaW50IHJtcXVldWVfYnVsayhzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgaW50IG9yZGVyLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTI1NTgtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNvdW50OyArK2kpIHtcXG5tbS9wYWdlX2FsbG9jLmM6MjU1OTpcXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IF9fcm1xdWV1ZSh6b25lLCBvcmRlciwgbWlncmF0ZXR5cGUsXFxubW0vcGFnZV9hbGxvYy5jLTI1NjAtXFx0XFx0XFx0XFx0XFx0ICAgICAgYWxsb2NfZmxhZ3MsIFxcdTAwMjZybXFtKTtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz0zMjMwPXN0cnVjdCBwYWdlICpybXF1ZXVlX2J1ZGR5KHN0cnVjdCB6b25lICpwcmVmZXJyZWRfem9uZSwgc3RydWN0IHpvbmUgKnpvbmUsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtMzI0OS1cXG5tbS9wYWdlX2FsbG9jLmM6MzI1MDpcXHRcXHRcXHRwYWdlID0gX19ybXF1ZXVlKHpvbmUsIG9yZGVyLCBtaWdyYXRldHlwZSwgYWxsb2NfZmxhZ3MsIFxcdTAwMjZybXFtKTtcXG5tbS9wYWdlX2FsbG9jLmMtMzI1MS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTQ6NTA6MTcuODE2NDkyMjI5WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjgxNTkxMDA4MjY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoIGZvciBGdXp6aW5nIEVsaWdpYmlsaXR5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgaW4gYG1tL3BhZ2VfYWxsb2MuY2AsIHNwZWNpZmljYWxseSB0aGUgYGJvb3N0X3dhdGVybWFya2AgZnVuY3Rpb24uIEl0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZDogaXQgYWRkcyBhIGNoZWNrIGZvciBgaXNfa2R1bXBfa2VybmVsKClgIGFuZCByZXR1cm5zIGVhcmx5IGlmIGl0J3MgYSBrZHVtcCBrZXJuZWwuIFRoZSBjb3JlIG9mIG15IHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBtZXJpdHMgZnV6emluZy5cblxuTXkgaW1tZWRpYXRlIGluc3RpbmN0LCBnaXZlbiBteSBleHBlcmllbmNlLCBpcyB0byBzYXkgKm5vKi4gVGhlIHBhdGNoIGludHJvZHVjZXMgY29kZSB0aGF0IGlzIGZ1bmN0aW9uYWxseSB1bnJlYWNoYWJsZSB3aXRoaW4gdGhlIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnQgSSdtIGZhbWlsaWFyIHdpdGgsIHdoaWNoIGlzIEdDRSBvciBRRU1VIHVzaW5nIHN5emthbGxlci4gVGhlIGBpc19rZHVtcF9rZXJuZWwoKWAgZnVuY3Rpb24gcmVsaWVzIG9uIHRoZSBgZWxmY29yZWhkcl9hZGRyYCB2YXJpYWJsZS4gSW4gYSBzdGFuZGFyZCBzeXprYWxsZXIgc2V0dXAsIGBlbGZjb3JlaGRyX2FkZHJgIGlzIGFsd2F5cyBlcXVhbCB0byBgRUxGQ09SRV9BRERSX01BWGAsIHNvIGBpc19rZHVtcF9rZXJuZWwoKWAgKmFsd2F5cyogcmV0dXJucyBmYWxzZS4gVGhlIG5ldyBgcmV0dXJuIGZhbHNlO2AgcGF0aCBpcyBuZXZlciB0YWtlbiB1bmRlciBmdXp6aW5nIGNvbmRpdGlvbnMuIEl0J3MgZXNzZW50aWFsbHkgZGVhZCBjb2RlIGluIG15IHdvcmxkLlxuXG5Ob3csIG15IG1pbmQgc3RhcnRzIGdvaW5nIHRocm91Z2ggdGhlIHRyaWFnZSBwaGlsb3NvcGh5LiBBbSBJIG1pc3Npbmcgc29tZXRoaW5nPyBJIHN0YXJ0IGdvaW5nIHRocm91Z2ggdGhlIGNyaXRlcmlhLCB3aGljaCBpcyBhIGtleSBwYXJ0IG9mIG15IHRyaWFnZSBzeXN0ZW0uIEl0IHNheXMgZnV6emluZyBzaG91bGQgZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsIGFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucy4gSXQgZW1waGFzaXplcyAqcmVhY2hhYmlsaXR5KjogXCJGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4uLlwiIFRoaXMgc2VlbXMgcHJldHR5IGNsZWFyOiBpZiB0aGUgY29kZSBkb2Vzbid0IGV4ZWN1dGUgaW4gYSBzdGFuZGFyZCBlbnZpcm9ubWVudCwgaXQncyBub3Qgd29ydGggZnV6emluZy4gVGhlIHBhdGNoICphZGRzKiBhIGNoZWNrLCBidXQgdGhhdCBjaGVjayBpcyBuZXZlciB0cnVlIGluIHRoZSBmdXp6aW5nIGVudmlyb25tZW50IEknbSB1c2luZy5cblxuQnV0IHRoZSB0cmlhZ2Ugc3lzdGVtIGFsc28gaGFzIG5lZ2F0aXZlIGNyaXRlcmlhLCB0aGluZ3MgdGhhdCBhdXRvbWF0aWNhbGx5IHNheSBcIm5vdCB3b3J0aCBmdXp6aW5nXCIuIFRoZXJlIGFyZSB0aHJlZSBtYWluIGFyZWFzOiBub24ta2VybmVsIGNoYW5nZXMsIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZSwgYW5kIHVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRocy4gVGhpcyBkb2Vzbid0IGZhbGwgdW5kZXIgbm9uLWtlcm5lbCBvciBoYXJkd2FyZS4gSXQgbG9va3MgbGlrZSBpdCAqbWlnaHQqIGZhbGwgdW5kZXIgdW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzLiBOb3cgSSBhbSB0aGlua2luZyB0aGF0IHRoaXMgKm1pZ2h0KiBiZSBhbiB1bnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aCBiZWNhdXNlIGl0IHdpbGwgbmV2ZXIgYmUgdHJ1ZSB1bmRlciBvdXIgZnV6emluZyBzZXR1cC4gSSBub3RpY2UgdGhlIGJ1bGxldCBleGFtcGxlcyBvZiB1bnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHMsIGFuZCB0aGluaywgYXJlIHRoZSBidWxsZXQgZXhhbXBsZXMgZXhoYXVzdGl2ZSBvciBqdXN0IGV4YW1wbGVzP1xuXG5Ob3csIGhlcmUncyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nIGFuZCB3aGVyZSBJIHJlYWxseSBuZWVkIHRvIGJlIGNhcmVmdWwuIFRoZSBwYXRjaCAqZG9lcyogdG91Y2ggZXhlY3V0YWJsZSBjb2Rl4oCUdGhlIGBpZmAgc3RhdGVtZW50IGl0c2VsZiwgdGhlIENQVSAqZXhlY3V0ZXMqIHRoZSBjaGVjayEgRXZlbiB0aG91Z2ggdGhlIGJyYW5jaCBpcyAqbmV2ZXIqIHRha2VuLCB0aGUgYGlmYCAqaXMqIHJlYWNoZWQgYW5kIGV4ZWN1dGVkLiBEb2VzIHRoYXQgbWFrZSB0aGlzIFwiV29ydGhGdXp6aW5nPXRydWVcIj8gVGhlIHRyaWFnZSBkb2Mgc2F5cyBcIlJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLi4uXCIuIFRoaXMgaXMgaW4gYSBjb3JlIHN1YnN5c3RlbSAoYG1tL2ApLlxuXG5CdXQgdGhlbiBJIHJlbWVtYmVyIEkgaGF2ZSB0byB0aGluayBhYm91dCBcIkZvY3VzU3ltYm9sc1wiLiBJIGNhbid0IGp1c3QgbGlzdCBhbnkgb2xkIGZ1bmN0aW9uLiBJIGNhbid0IGxpc3QgXCJnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnNcIi4gSSBhbSBsb29raW5nIGF0IGBib29zdF93YXRlcm1hcmsoKWAsIHdoaWNoIGlzIGBzdGF0aWMgaW5saW5lYCwgYW5kIGlzIG9ubHkgY2FsbGVkIHdpdGhpbiB0aGUgYWxsb2NhdGlvbiBmYWxsYmFjayBwYXRoLiBUaGF0J3MgYSBuby1nbyBmb3IgRm9jdXNTeW1ib2xzLiBJIGFtIHN0YXJ0aW5nIHRvIHRoaW5rIHRoYXQgZXZlbiBpZiBcIldvcnRoRnV6emluZ1wiIGlzIHRydWUsIHRoZSBGb2N1c1N5bWJvbHMgYW5kIGNvbmZpZ3VyYXRpb25zIGFyZSBtZWFuaW5nbGVzcyBpbiB0aGlzIGNhc2UuXG5cblRoZW4sIHRoZXJlIGlzIGFuIGltcG9ydGFudCBkZXRhaWw6IHRoZSBjb2RlIGl0c2VsZiBvbmx5IGNoZWNrcyBgaXNfa2R1bXBfa2VybmVsKClgICppZiogYENPTkZJR19DUkFTSF9EVU1QYCBpcyBlbmFibGVkISBBbmQsIGlmIGl0IGlzIGRpc2FibGVkLCBgaXNfa2R1bXBfa2VybmVsKClgICphbHdheXMqIHJldHVybnMgYGZhbHNlYC5cblxuU28sIGZyb20gYSBwcmFjdGljYWwgc3RhbmRwb2ludCwgdGhlIHBhdGNoIGRvZXNuJ3QgYWRkIGFueSAqbmV3KiBmdW5jdGlvbmFsaXR5IG9yIHBvdGVudGlhbCBidWdzIHRvIHdoYXQgSSdtIGZ1enppbmcuIFVuZGVyIHN0YW5kYXJkIHN5emthbGxlciwgdGhlIHBhdGNoIGhhcyBubyBlZmZlY3Qgb24gcmVhY2hhYmlsaXR5LiBUaGUgY29tcGFyaXNvbiBpbnNpZGUgdGhlIGBpZmAgaXMgZXhlY3V0ZWQsIGJ1dCB0aGUgc3Vic2VxdWVudCBjb25kaXRpb25hbCBgcmV0dXJuIGZhbHNlO2AgaXMgbm90LiBVbHRpbWF0ZWx5LCBldmVuIHRob3VnaCB0aGUgY2hlY2sgaW5zdHJ1Y3Rpb24gaXRzZWxmIGV4ZWN1dGVzLCB0aGUgdW5yZWFjaGFibGUgY29udHJvbCBmbG93IHJlbmRlcnMgaXQgdXNlbGVzcyBmb3Igc3RhbmRhcmQgZnV6emluZy4gVGhlIHBhdGNoICptaWdodCogYmUgcmVsZXZhbnQgZm9yIGEga2R1bXAgY2FwdHVyZSBrZXJuZWwgKHdoaWNoIGlzIG5vdCBmdXp6ZWQgYnkgc3l6a2FsbGVyKSwgYnV0IGl0IGRvZXNuJ3QgYWRkIGFueSBuZXcgZnV6emluZyB0YXJnZXRzIGluIG15IGRvbWFpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjkyMDEsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4Njc5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE0OjUxOjM5LjQwNzUwNDczNVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA0MTEyODIwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ1JBU0hfRFVNUFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvS2NvbmZpZy5rZXhlYz04OT1jb25maWcgS0VYRUNfSlVNUFxcbi0tXFxua2VybmVsL0tjb25maWcua2V4ZWMtOTYtXFxua2VybmVsL0tjb25maWcua2V4ZWM6OTc6Y29uZmlnIENSQVNIX0RVTVBcXG5rZXJuZWwvS2NvbmZpZy5rZXhlYy05OC1cXHRib29sIFxcXCJrZXJuZWwgY3Jhc2ggZHVtcHNcXFwiXFxuLS1cXG5rZXJuZWwvS2NvbmZpZy5rZXhlYz0xMjk9Y29uZmlnIENSQVNIX0RNX0NSWVBUX0NPTkZJR1NcXG4tLVxcbmtlcm5lbC9LY29uZmlnLmtleGVjLTEzNS1cXG5rZXJuZWwvS2NvbmZpZy5rZXhlYzoxMzY6Y29uZmlnIENSQVNIX0RVTVBfS1VOSVRfVEVTVFxcbmtlcm5lbC9LY29uZmlnLmtleGVjLTEzNy1cXHR0cmlzdGF0ZSBcXFwiVW5pdCBUZXN0cyBmb3Iga2VybmVsIGNyYXNoIGR1bXBzXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE0OjUxOjQxLjQ0ODY0MDA1NFoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozNzAyMTg1NjM5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBLZXhlYyBLY29uZmlnKipcblxuT2theSwgc28gSSBuZWVkIHRvIHplcm8gaW4gb24gc29tZXRoaW5nIHJlbGF0ZWQgdG8gYGtleGVjYCBjb25maWd1cmF0aW9uLiBJIHJlY2FsbCBhIHNwZWNpZmljIHNlY3Rpb24gd2l0aGluIHRoZSBga2VybmVsL0tjb25maWcua2V4ZWNgIGZpbGUsIGFuZCBJJ20gcHJldHR5IHN1cmUgdGhlIGtleSBzZXR0aW5ncyBJJ20gaW50ZXJlc3RlZCBpbiBhcmUgYXJvdW5kIGxpbmUgOTcuIExldCdzIG5hdmlnYXRlIHRoZXJlIGFuZCBzZWUgd2hhdCdzIHdoYXQuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgd2l0aGluIHRoYXQgcmFuZ2UuIEl0J3MgdGltZSB0byBleGFtaW5lIHRoZSBvcHRpb25zIGF2YWlsYWJsZSB0aGVyZSB0byB1bmRlcnN0YW5kIGhvdyB0aGV5IGFyZSBpbnRlcmFjdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg5NDksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxNDo1MjoxOC40NzA1MDA4NzlaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE2MDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9LY29uZmlnLmtleGVjXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDkwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDkwOlxcdFxcdGJvb2wgXFxcImtleGVjIGp1bXBcXFwiXFxuICA5MTpcXHRcXHRkZXBlbmRzIG9uIEFSQ0hfU1VQUE9SVFNfS0VYRUNfSlVNUFxcbiAgOTI6XFx0XFx0ZGVwZW5kcyBvbiBLRVhFQyBcXHUwMDI2XFx1MDAyNiBISUJFUk5BVElPTlxcbiAgOTM6XFx0XFx0aGVscFxcbiAgOTQ6XFx0XFx0ICBKdW1wIGJldHdlZW4gb3JpZ2luYWwga2VybmVsIGFuZCBrZXhlY2VkIGtlcm5lbCBhbmQgaW52b2tlXFxuICA5NTpcXHRcXHQgIGNvZGUgaW4gcGh5c2ljYWwgYWRkcmVzcyBtb2RlIHZpYSBLRVhFQ1xcbiAgOTY6XFx0XFxuICA5NzpcXHRjb25maWcgQ1JBU0hfRFVNUFxcbiAgOTg6XFx0XFx0Ym9vbCBcXFwia2VybmVsIGNyYXNoIGR1bXBzXFxcIlxcbiAgOTk6XFx0XFx0ZGVmYXVsdCBBUkNIX0RFRkFVTFRfQ1JBU0hfRFVNUFxcbiAxMDA6XFx0XFx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX0NSQVNIX0RVTVBcXG4gMTAxOlxcdFxcdGRlcGVuZHMgb24gS0VYRUNfQ09SRVxcbiAxMDI6XFx0XFx0c2VsZWN0IFZNQ09SRV9JTkZPXFxuIDEwMzpcXHRcXHRzZWxlY3QgQ1JBU0hfUkVTRVJWRVxcbiAxMDQ6XFx0XFx0aGVscFxcbiAxMDU6XFx0XFx0ICBHZW5lcmF0ZSBjcmFzaCBkdW1wIGFmdGVyIGJlaW5nIHN0YXJ0ZWQgYnkga2V4ZWMuXFxuIDEwNjpcXHRcXHQgIFRoaXMgc2hvdWxkIGJlIG5vcm1hbGx5IG9ubHkgc2V0IGluIHNwZWNpYWwgY3Jhc2ggZHVtcCBrZXJuZWxzXFxuIDEwNzpcXHRcXHQgIHdoaWNoIGFyZSBsb2FkZWQgaW4gdGhlIG1haW4ga2VybmVsIHdpdGgga2V4ZWMtdG9vbHMgaW50b1xcbiAxMDg6XFx0XFx0ICBhIHNwZWNpYWxseSByZXNlcnZlZCByZWdpb24gYW5kIHRoZW4gbGF0ZXIgZXhlY3V0ZWQgYWZ0ZXJcXG4gMTA5OlxcdFxcdCAgYSBjcmFzaCBieSBrZHVtcC9rZXhlYy4gVGhlIGNyYXNoIGR1bXAga2VybmVsIG11c3QgYmUgY29tcGlsZWRcXG4gMTEwOlxcdFxcdCAgdG8gYSBtZW1vcnkgYWRkcmVzcyBub3QgdXNlZCBieSB0aGUgbWFpbiBrZXJuZWwgb3IgQklPUyB1c2luZ1xcbiAxMTE6XFx0XFx0ICBQSFlTSUNBTF9TVEFSVCwgb3IgaXQgbXVzdCBiZSBidWlsdCBhcyBhIHJlbG9jYXRhYmxlIGltYWdlXFxuIDExMjpcXHRcXHQgIChDT05GSUdfUkVMT0NBVEFCTEU9eSkuXFxuIDExMzpcXHRcXHQgIEZvciBtb3JlIGRldGFpbHMgc2VlIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2R1bXAva2R1bXAucnN0XFxuIDExNDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTQ6NTI6MTguNDcwNjE5NzU5WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIwMzkxNTQ3NDU0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIERlY2lzaW9uIGZvciBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gV2UncmUgbG9va2luZyBhdCBhIHBhdGNoIG1vZGlmeWluZyBgbW0vcGFnZV9hbGxvYy5jYCBhbmQgbmVlZCB0byBkZWNpZGUgaWYgaXQncyB3b3J0aCBmdXp6aW5nLiBJIG5lZWQgdG8gZm9sbG93IHRoZSBydWxlcyB2ZXJ5IGNhcmVmdWxseSBoZXJlLCBwYXJ0aWN1bGFybHkgdGhlIFwiT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseS4uLlwiIHdvcmRpbmcgaW4gU2VjdGlvbiAyLlxuXG5UaGUgY29yZSBvZiB0aGUgbWF0dGVyIGlzIHdoZXRoZXIgdGhpcyBwYXRjaCBmYWxscyBpbnRvIHRoZSBcIldvcnRoRnV6emluZz1mYWxzZVwiIGNhdGVnb3JpZXMuICBXZSBhcmUgZXhwbGljaXRseSB0b2xkIHRvIHRyZWF0IE5GQ0kgb3IgcmVmYWN0b3JpbmcgY2xhaW1zIHdpdGggc2tlcHRpY2lzbSwgd2hpY2ggaXMgc21hcnQuICBXZSBuZWVkIHRvIGxvb2sgYXQgd2hhdCdzIGJlaW5nIG1vZGlmaWVkLiBJIHNlZSBgYm9vc3Rfd2F0ZXJtYXJrYCBpcyBtb2RpZmllZCwgd2hpY2ggaXMgd2l0aGluIG1lbW9yeSBtYW5hZ2VtZW50LCBhIGNvcmUgc3Vic3lzdGVtLiBTZWN0aW9uIDMgY2xlYXJseSBzdGF0ZXMgdGhhdCBcIkFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLi4uXCIgdHJpZ2dlcnMgYFdvcnRoRnV6emluZz10cnVlYC5cblxuSSBkbyBzZWUgdGhlIG1lbnRpb24gb2Yga2R1bXAsIGJ1dCB0aGUgZGVzY3JpcHRpb24gaXMgY2FyZWZ1bCB0byBzYXkgdGhhdCBjcmFzaCBkdW1wIGtlcm5lbHMgYXJlIHNwZWNpYWwgY2FzZXMgbG9hZGVkIHZpYSBrZXhlYyBhbmQgdGhhdCB0aGlzIHNob3VsZG4ndCBub3JtYWxseSBiZSBzZXQgaW4gbWFpbiBrZXJuZWxzLiBFdmVuIGlmIGEgVk0gaXNuJ3QgY29uZmlndXJlZCBmb3Iga2R1bXAsIHdlIG5lZWQgdG8gY29uc2lkZXIgaWYgaXQgKmNvdWxkKiBiZSBjb25maWd1cmVkIGZvciBrZHVtcC5cblxuTm93IGxldCdzIGRlbHZlIGludG8gU2VjdGlvbiAyLiAgVGhlIFwiVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzXCIgY2F0ZWdvcnkgbmVlZHMgYSB2ZXJ5IGNsb3NlIGxvb2suICBEb2VzIG1vZGlmeWluZyBgbW0vcGFnZV9hbGxvYy5jYCBtZWFuIGl0J3MgdW5yZWFjaGFibGUgZHVlIHRvIGJlaW5nIGEgZHJpdmVyIHRlYXJkb3duIG9yIGFyY2gtZXhjbHVzaXZlIGNvZGU/ICAqTm8sIGl0IGRvZXNuJ3QqLiBUaGUgY29kZSBjbGVhcmx5IGlzbid0IGV4Y2x1c2l2ZSB0byBhbiBhcmNoaXRlY3R1cmUsIGFuZCBgbW0vcGFnZV9hbGxvYy5jYCBpcyBub3QgYSBkcml2ZXIgdGVhcmRvd24gY2FsbGJhY2suIFRoZSBcInN0cmljdGx5XCIgaXMgdGhlIGtleS5cblxuU28sIGlmIGl0IGRvZXMgbm90IGZhbGwgKnN0cmljdGx5KiB3aXRoaW4gb25lIG9mIHRoZSBgV29ydGhGdXp6aW5nPWZhbHNlYCBjYXRlZ29yaWVzLCB0aGVuIGl0ICptdXN0KiBiZSBgV29ydGhGdXp6aW5nPXRydWVgLlxuXG5Ob3cgbGV0J3MgY29uc2lkZXIgdGhlIEZvY3VzU3ltYm9scyBhbmQgRW5hYmxlQ29uZmlncy4gYGJvb3N0X3dhdGVybWFya2AgaXMgYSBzdGF0aWMgaW5saW5lLCBzbyBjb3ZlcmFnZSBmaWx0ZXJzIGNhbid0IHRhcmdldCBpdCBkaXJlY3RseS4gSG93ZXZlciwgdGhlIGRvY3VtZW50YXRpb24gZ2l2ZXMgZ29vZCBhZHZpY2U6IHdlIG11c3QgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIgZnVuY3Rpb25zLlxuXG5TaW5jZSB0aGUgcGF0Y2ggc3BlY2lmaWNhbGx5IG1vZGlmaWVzIGBib29zdF93YXRlcm1hcmtgIGFuZCBgdHJ5X3RvX2NsYWltX2Jsb2NrYCwgdGhhdCBsb2dpYyBuZWVkcyBzcGVjaWZpYyB0ZXN0aW5nLiBTbyBJIGFtIGdvaW5nIHRvIGZvY3VzIG9uIHRob3NlIGNhbGxlcnMuICBUaGV5IGFyZSAqbm90KiB1YmlxdWl0b3VzIGZ1bmN0aW9ucy4gVGhleSBhcmUgKnNwZWNpZmljKiB0byB3YXRlcm1hcmsgYm9vc3RpbmcgYW5kIHBhZ2VibG9jayBjbGFpbWluZywgbm90IHRvIHNvbWV0aGluZyBsaWtlIGBrbWFsbG9jYC5cblxuRmluYWxseSwgcmVtZW1iZXIsIHRoZSBnb2FsIGhlcmUgaXMgdG8gZmluZCBidWdzLiBTbyBJIE1VU1QgTk9UIG1ha2UgYXNzdW1wdGlvbnMgYWJvdXQga2R1bXAga2VybmVscyBvciBzeXprYWxsZXIgVk1zIHRvIGdldCBhIGZhbHNlIG5lZ2F0aXZlLiBUaGUgaW5zdHJ1Y3Rpb25zIHZlcnkgY2xlYXJseSBlbXBoYXNpemUgdGhhdCB3ZSAqbXVzdCogZnV6eiByZWFjaGFibGUgY29kZSwgc28ga2R1bXAgaXNuJ3QgYW4gZXhjdXNlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBmdXp6aW5nIGlzIGFzICplZmZlY3RpdmUqIGFzIHBvc3NpYmxlLlxuXG5IZXJlJ3MgbXkgZXZhbHVhdGlvbjpcblxuKiAgICoqV29ydGhGdXp6aW5nKio6IGB0cnVlYFxuKiAgICoqRW5hYmxlQ29uZmlncyoqOiBOb25lLlxuKiAgICoqRm9jdXNTeW1ib2xzKio6IGB0cnlfdG9fY2xhaW1fYmxvY2tgXG4qICAgKipSZWFzb25pbmcqKjogVGhlIHBhdGNoIG1vZGlmaWVzIGBtbS9wYWdlX2FsbG9jLmNgLCBzcGVjaWZpY2FsbHkgYGJvb3N0X3dhdGVybWFya2AgYW5kIGB0cnlfdG9fY2xhaW1fYmxvY2tgIGluIG1lbW9yeSBtYW5hZ2VtZW50LiBUaGlzIGRvZXNuJ3QgZmFsbCBpbnRvIHRoZSBleHBsaWNpdGx5IGRlZmluZWQgXCJXb3J0aEZ1enppbmc9ZmFsc2VcIiBjYXRlZ29yaWVzLCBhbmQgYmVjYXVzZSBpdCBtb2RpZmllcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpdCBtdXN0IGJlIGZ1enplZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzk1MzMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTIwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTQ6NTU6NDIuMzg2MDk4MDY0WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDU1NzcwNjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwid2F0ZXJtYXJrX2Jvb3N0X2ZhY3RvclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9wYWdlX2FsbG9jLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vcGFnZV9hbGxvYy5jPTI3Nz1pbnQgdXNlcl9taW5fZnJlZV9rYnl0ZXMgPSAtMTtcXG5tbS9wYWdlX2FsbG9jLmM6Mjc4OnN0YXRpYyBpbnQgd2F0ZXJtYXJrX2Jvb3N0X2ZhY3RvciBfX3JlYWRfbW9zdGx5ID0gMTUwMDA7XFxubW0vcGFnZV9hbGxvYy5jLTI3OS1zdGF0aWMgaW50IHdhdGVybWFya19zY2FsZV9mYWN0b3IgPSAxMDtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz0yMTc2PXN0YXRpYyBpbmxpbmUgYm9vbCBib29zdF93YXRlcm1hcmsoc3RydWN0IHpvbmUgKnpvbmUpXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtMjE3OS1cXG5tbS9wYWdlX2FsbG9jLmM6MjE4MDpcXHRpZiAoIXdhdGVybWFya19ib29zdF9mYWN0b3IpXFxubW0vcGFnZV9hbGxvYy5jLTIxODEtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTIxOTktXFx0bWF4X2Jvb3N0ID0gbXVsdF9mcmFjKHpvbmUtXFx1MDAzZV93YXRlcm1hcmtbV01BUktfSElHSF0sXFxubW0vcGFnZV9hbGxvYy5jOjIyMDA6XFx0XFx0XFx0d2F0ZXJtYXJrX2Jvb3N0X2ZhY3RvciwgMTAwMDApO1xcbm1tL3BhZ2VfYWxsb2MuYy0yMjAxLVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTY5NDU9c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgcGFnZV9hbGxvY19zeXNjdGxfdGFibGVbXSA9IHtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy02OTU0LVxcdHtcXG5tbS9wYWdlX2FsbG9jLmM6Njk1NTpcXHRcXHQucHJvY25hbWVcXHQ9IFxcXCJ3YXRlcm1hcmtfYm9vc3RfZmFjdG9yXFxcIixcXG5tbS9wYWdlX2FsbG9jLmM6Njk1NjpcXHRcXHQuZGF0YVxcdFxcdD0gXFx1MDAyNndhdGVybWFya19ib29zdF9mYWN0b3IsXFxubW0vcGFnZV9hbGxvYy5jOjY5NTc6XFx0XFx0Lm1heGxlblxcdFxcdD0gc2l6ZW9mKHdhdGVybWFya19ib29zdF9mYWN0b3IpLFxcbm1tL3BhZ2VfYWxsb2MuYy02OTU4LVxcdFxcdC5tb2RlXFx0XFx0PSAwNjQ0LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxNDo1NTo0Mi45MzE2ODExMjZaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTcxODkzNTU0Njg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIFdvcnRoRnV6emluZywgRm9jdXNTeW1ib2xzLCBhbmQgRW5hYmxlQ29uZmlncyoqXG5cbk9rYXksIGhlcmUncyB0aGUgYnJlYWtkb3duIG9mIG15IHRob3VnaHQgcHJvY2Vzcy4gRmlyc3QsIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCwgc3BlY2lmaWNhbGx5IHRoZSBjaGFuZ2VzIHdpdGhpbiBgbW0vcGFnZV9hbGxvYy5jYCBhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggYGluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oYCwgd2FycmFudHMgZnV6emluZy4gVGhlIGtleSBmdW5jdGlvbiBiZWluZyBtb2RpZmllZCBoZXJlIGlzIGBib29zdF93YXRlcm1hcmtgIGNhbGxlZCBieSBgdHJ5X3RvX2NsYWltX2Jsb2NrYC5cblxuVGhlIGNydWNpYWwgcXVlc3Rpb24gaXMsIGFjY29yZGluZyB0byB0aGUgcHJvdmlkZWQgdHJpYWdlIHJ1bGVzLCBzaG91bGQgYFdvcnRoRnV6emluZ2AgYmUgYHRydWVgIG9yIGBmYWxzZWA/IFRoZSBuZWdhdGl2ZSBjcml0ZXJpYSAod2hlbiB0byByZXR1cm4gZmFsc2UpIHByb3ZpZGUgYSB2ZXJ5IHNwZWNpZmljIHNldCBvZiBjb25kaXRpb25zLiBJJ3ZlIGNhcmVmdWxseSByZXZpZXdlZCB0aGVzZSwgYW5kIGl0J3MgY2xlYXIgdGhhdCB0aGUgbW9kaWZpZWQgY29kZSAqZG9lc24ndCogZmFsbCB1bmRlciBhbnkgb2YgdGhvc2UgY2F0ZWdvcmllcy4gSXQgaXNuJ3Qgbm9uLWtlcm5lbCBjb2RlLCBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUsIG9yIHVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRocy4gVGhlIGNvZGUgZmFsbHMgc3F1YXJlbHkgaW50byBcIkNvcmUgU3Vic3lzdGVtczogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLykuLi5cIiAtIGFzIHRoZSBwYXRjaCBtb2RpZmllcyBgYm9vc3Rfd2F0ZXJtYXJrKClgIGluIGBtbS9wYWdlX2FsbG9jLmNgLCBwYXJ0IG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIEV2ZW4gdGhvdWdoIHRoZSBgaWYgKGlzX2tkdW1wX2tlcm5lbCgpKWAgY2hlY2sgbWlnaHQgb2Z0ZW4gZXZhbHVhdGUgdG8gYGZhbHNlYCwgdGhlIGNvZGUgcGF0aCBpcyBzdGlsbCByZWFjaGFibGUgYW5kIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgcnVudGltZSBjaGVjay4gVGhlcmVmb3JlLCBiYXNlZCBvbiB0aGUgcHJpbmNpcGxlIHRvIG5vdCB0cnVzdCBjbGFpbXMgb2YgXCJubyBmdW5jdGlvbmFsIGNoYW5nZVwiLCBJJ20gY29uZmlkZW50IGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSBgdHJ1ZWAuXG5cbk5leHQsIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgYEZvY3VzU3ltYm9sc2AuIFRoZSBnb2FsIGhlcmUgaXMgdG8gZ3VpZGUgdGhlIGZ1enplciB0b3dhcmRzIHRoZSBzcGVjaWZpYyBjb2RlIGNoYW5nZXMsIGF2b2lkaW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zLiBgYm9vc3Rfd2F0ZXJtYXJrKClgIGFuZCBpdHMgY2FsbGVyLCBgdHJ5X3RvX2NsYWltX2Jsb2NrKClgLCBhcmUgdGhlIG1vc3QgcmVsZXZhbnQgZnVuY3Rpb25zIGltcGFjdGVkIGJ5IHRoaXMgcGF0Y2gsIHdoZXJlIGBib29zdF93YXRlcm1hcmtgIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGNvbnRhaW5zIHRoZSBjaGFuZ2UuIEkgYmVsaWV2ZSBib3RoIGZ1bmN0aW9ucyBhcmUgbmVjZXNzYXJ5IHRvIHByb3ZpZGUgYWRlcXVhdGUgY292ZXJhZ2UgZm9yIGZ1enppbmcuIGBpc19rZHVtcF9rZXJuZWwoKWAgaXRzZWxmLCBiZWluZyBhIHN0YXRpYyBpbmxpbmUsIGlzIG5vdCBhIGRpc3RpbmN0IHN5bWJvbCBhbmQgc2hvdWxkbid0IGJlIGxpc3RlZC5cblxuRmluYWxseSwgSSBuZWVkIHRvIGRldGVybWluZSBgRW5hYmxlQ29uZmlnc2AuIFRoZSBjb3JlIGNvZGUgaW4gYG1tL3BhZ2VfYWxsb2MuY2AgaXMgYWx3YXlzIGJ1aWx0IGludG8gdGhlIGtlcm5lbC4gVGhlIGNoZWNrIGlzOlxuXG5gYGBjXG5pZiAoaXNfa2R1bXBfa2VybmVsKCkpXG5gYGBcblRoZSBgaXNfa2R1bXBfa2VybmVsKClgIGlzIG9ubHkgZGVwZW5kZW50IG9uIGBDT05GSUdfQ1JBU0hfRFVNUGAgd2hpY2ggaXRzZWxmIGRlcGVuZHMgb24gYEtFWEVDX0NPUkVgLiBUaGVyZWZvcmUsIGBDT05GSUdfQ1JBU0hfRFVNUD15YCBhbmQgdGhlcmVmb3JlIGBLRVhFQ19DT1JFPXlgLiBJZiwgaG93ZXZlciwgYENPTkZJR19DUkFTSF9EVU1QYCBpcyBub3QgZW5hYmxlZCwgdGhlbiBgaXNfa2R1bXBfa2VybmVsYCByZXNvbHZlcyB0byBgZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDIwOCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTQ6NTg6MzQuODI1MjM4MjEyWiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTUzNjkyNjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtFWEVDX0NPUkVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL0tjb25maWcua2V4ZWNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL0tjb25maWcua2V4ZWM9OD1jb25maWcgVk1DT1JFX0lORk9cXG4tLVxcbmtlcm5lbC9LY29uZmlnLmtleGVjLTEwLVxcbmtlcm5lbC9LY29uZmlnLmtleGVjOjExOmNvbmZpZyBLRVhFQ19DT1JFXFxua2VybmVsL0tjb25maWcua2V4ZWMtMTItXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxNDo1ODozNS40MjA2MTI3NDNaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTgyMjEwOTM0ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBLRVhFQ19DT1JFYCBTZWxlY3Rpb24vU2V0dGluZyoqXG5cbkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgb3JpZ2luIGFuZCBpbXBsaWNhdGlvbnMgb2YgYEtFWEVDX0NPUkVgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGNvbmRpdGlvbmFsIGxvZ2ljLiBXaGVyZSBkb2VzIHRoaXMgc3BlY2lmaWMgbWFjcm8gZ2V0IHNlbGVjdGVkIG9yIGRlZmluZWQgd2l0aGluIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtPyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBhbmQgaG93IGBLRVhFQ19DT1JFYCBpcyBiZWluZyB0dXJuZWQgb24gb3Igb2ZmLiBUaGF0IG1lYW5zIEknbSBnb2luZyB0byBoYXZlIHRvIGRpZyB0aHJvdWdoIEtjb25maWcgZmlsZXMsIE1ha2VmaWxlcywgYW5kIGFueSByZWxldmFudCBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29uZmlndXJhdGlvbi4gSSdtIGxvb2tpbmcgZm9yIHRoZSBkZXBlbmRlbmNpZXMsIHRoZSBidWlsZC10aW1lIGNvbmRpdGlvbnMsIGFuZCBhbnkgaW50ZXJhY3Rpb25zIHRoaXMgc2V0dGluZyBoYXMgd2l0aCBvdGhlciBmZWF0dXJlcy4gVW5kZXJzdGFuZGluZyB0aGUgc2VsZWN0aW9uIHByb2Nlc3Mgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG92ZXJhbGwgYmVoYXZpb3Igb2YgdGhlIHN5c3RlbS4gTGV0J3Mgc2VlIHdoYXQgdGhlIGltbWVkaWF0ZSBpbXBhY3RzIGFyZSB0b28sIGFuZCBob3cgaXQgZWZmZWN0cyBmdW5jdGlvbmFsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODMxMiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE0OjU4OjUzLjY0MTcwOTIwOVoiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ5NTk4MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IEtFWEVDX0NPUkVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL0tjb25maWcua2V4ZWNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL0tjb25maWcua2V4ZWM9MjA9Y29uZmlnIEtFWEVDXFxuLS1cXG5rZXJuZWwvS2NvbmZpZy5rZXhlYy0yMi1cXHRkZXBlbmRzIG9uIEFSQ0hfU1VQUE9SVFNfS0VYRUNcXG5rZXJuZWwvS2NvbmZpZy5rZXhlYzoyMzpcXHRzZWxlY3QgS0VYRUNfQ09SRVxcbmtlcm5lbC9LY29uZmlnLmtleGVjLTI0LVxcdGhlbHBcXG4tLVxcbmtlcm5lbC9LY29uZmlnLmtleGVjPTM4PWNvbmZpZyBLRVhFQ19GSUxFXFxuLS1cXG5rZXJuZWwvS2NvbmZpZy5rZXhlYy00MS1cXHRzZWxlY3QgQ1JZUFRPX0xJQl9TSEEyNTZcXG5rZXJuZWwvS2NvbmZpZy5rZXhlYzo0MjpcXHRzZWxlY3QgS0VYRUNfQ09SRVxcbmtlcm5lbC9LY29uZmlnLmtleGVjLTQzLVxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTQ6NTg6NTMuNzE2NjczNzQ4WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM2NTQ5ODkwMTAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJ3MgSW1wYWN0KipcblxuT2theSwgc28gdGhpcyBgQ1JBU0hfRFVNUGAgZmVhdHVyZSByZWxpZXMgb24gYEtFWEVDX0NPUkVgLCB3aGljaCBpdHNlbGYgY2FuIGJlIGVuYWJsZWQgZWl0aGVyIHRocm91Z2ggYEtFWEVDYCBvciBgS0VYRUNfRklMRWAuIFRoaXMgaXMgaW1wb3J0YW50LCBiZWNhdXNlIGBDUkFTSF9EVU1QYCBpcyB3aGF0IGVuYWJsZXMgdGhlIHJhdGhlciBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBvZiBgaXNfa2R1bXBfa2VybmVsKClgLiBJIG5lZWQgdG8gZW5zdXJlIEkndmUgZ290IGV2ZXJ5dGhpbmcgc3RyYWlnaHQuXG5cbkxldCdzIGJyZWFrIHRoaXMgZG93biBmdXJ0aGVyIHRvIGJlIGFic29sdXRlbHkgc3VyZTpcblxuKiAgICoqYFdvcnRoRnV6emluZ2A6IFRydWUuKiogVGhpcyBpcyBnb29kLiBUaGUgcGF0Y2ggdG91Y2hlcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgaW4gYG1tL3BhZ2VfYWxsb2MuY2AsIHNwZWNpZmljYWxseSB0aGUgYGJvb3N0X3dhdGVybWFya2AgZnVuY3Rpb24uIFRoZSBrZXkgaGVyZSBpcyB0aGF0IGl0IGludHJvZHVjZXMgYSBjaGVjayBmb3IgYGlzX2tkdW1wX2tlcm5lbCgpYCBkdXJpbmcgcGFnZWJsb2NrIGNsYWltaW5nIGFuZCB3YXRlcm1hcmsgYm9vc3RpbmcuIFRoaXMgY29kZSBwYXRoIGlzLCBjcnVjaWFsbHksIGV4ZWN1dGVkIGR1cmluZyBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgcGFnZSBtaWdyYXRpb24sIHBhcnRpY3VsYXJseSB1bmRlciBmcmFnbWVudGF0aW9uIHNjZW5hcmlvcy4gVGhpcyBpcyBhIHNvbGlkIHBvaW50IHRvIGZvY3VzIG9uIGZvciBwb3RlbnRpYWwgaXNzdWVzLlxuKiAgICoqYEVuYWJsZUNvbmZpZ3NgOiBbXCJDUkFTSF9EVU1QXCIsIFwiS0VYRUNfQ09SRVwiXSAob3IgW1wiQ1JBU0hfRFVNUFwiLCBcIktFWEVDXCJdKS4qKiBFeGNlbGxlbnQ7IGl0IG1hdGNoZXMgdGhlIGRlcGVuZGVuY2llcy4gVGhpcyBjb25maXJtcyB0aGF0IHRoZXNlIGNvbmZpZ3VyYXRpb25zIGFyZSBuZWNlc3NhcnkgYW5kIHN1ZmZpY2llbnQgZm9yIHRoZSBjb2RlIHBhdGggdG8gYmUgYWN0aXZlLlxuKiAgICoqYEZvY3VzU3ltYm9sc2A6IFtcImJvb3N0X3dhdGVybWFya1wiLCBcInRyeV90b19jbGFpbV9ibG9ja1wiXS4qKiBQZXJmZWN0LiBUaGUgcGF0Y2ggZGlyZWN0bHkgbW9kaWZpZXMgYGJvb3N0X3dhdGVybWFya2AsIGFuZCBgdHJ5X3RvX2NsYWltX2Jsb2NrYCBpcyBhIGtleSBjYWxsZXIsIGJ1dCBpcyBub3QgY2FsbGVkIGV2ZXJ5d2hlcmUuIFRoaXMgaXMgYSB2ZXJ5IHRhcmdldGVkIGZvY3VzLiBJIGFtIGhhcHB5IHRoYXQgaXQgZG9lcyBub3QgY2FsbCB1YmlxdWl0b3VzIGFsbG9jYXRvcnMsIHN1Y2ggYXMgYGFsbG9jX3BhZ2VzYCBvciBgZ2V0X3BhZ2VfZnJvbV9mcmVlbGlzdGAuIFRoaXMgaXMgYSB1c2VmdWwgcmVmaW5lbWVudC5cblxuSXQncyBhbGwgY3J5c3RhbCBjbGVhciwgYW5kIHRoZSBwcm92aWRlZCBpbmZvcm1hdGlvbiBsaW5lcyB1cCBwZXJmZWN0bHkuIFRoZXJlJ3Mgbm8gY29udHJhZGljdGlvbiBpbiB0aGUgZGF0YS4gV2l0aCBteSBhbmFseXNpcyBjb21wbGV0ZSwgSSBhbSBjb25maWRlbnQgdG8gbm93IGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDg3MDUsIk91dHB1dFRva2VucyI6MTI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjczLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE0OjU5OjMwLjI2NjU2NzI0MVoiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MTkzNDMxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ1JBU0hfRFVNUFwiLFxuICAgIFwiS0VYRUNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJib29zdF93YXRlcm1hcmtcIixcbiAgICBcInRyeV90b19jbGFpbV9ibG9ja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgaW4gbW0vcGFnZV9hbGxvYy5jIGJ5IGFkZGluZyBhbiBpc19rZHVtcF9rZXJuZWwoKSBjaGVjayBpbnNpZGUgYm9vc3Rfd2F0ZXJtYXJrKCkgdG8gZGlzYWJsZSB3YXRlcm1hcmsgYm9vc3RpbmcgaW4ga2R1bXAga2VybmVscy4gVGhpcyBjb2RlIGlzIGxvY2F0ZWQgaW4gdGhlIGNvcmUgcGFnZSBhbGxvY2F0b3IncyBhbnRpLWZyYWdtZW50YXRpb24gZmFsbGJhY2sgcGF0aCBhbmQgZXhlY3V0ZXMgZHVyaW5nIHBhZ2VibG9jayBjbGFpbWluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDUkFTSF9EVU1QXCIsXG4gICAgXCJLRVhFQ1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJvb3N0X3dhdGVybWFya1wiLFxuICAgIFwidHJ5X3RvX2NsYWltX2Jsb2NrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiBtbS9wYWdlX2FsbG9jLmMgYnkgYWRkaW5nIGFuIGlzX2tkdW1wX2tlcm5lbCgpIGNoZWNrIGluc2lkZSBib29zdF93YXRlcm1hcmsoKSB0byBkaXNhYmxlIHdhdGVybWFyayBib29zdGluZyBpbiBrZHVtcCBrZXJuZWxzLiBUaGlzIGNvZGUgaXMgbG9jYXRlZCBpbiB0aGUgY29yZSBwYWdlIGFsbG9jYXRvcidzIGFudGktZnJhZ21lbnRhdGlvbiBmYWxsYmFjayBwYXRoIGFuZCBleGVjdXRlcyBkdXJpbmcgcGFnZWJsb2NrIGNsYWltaW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxNDo1OTozMC40MDg1MTIzNTlaIiwiU2VxIjo0NywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTEwMzM0OTMzMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE0OjU5OjMwLjQwOTM2NTExOVoiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE2NTEwMjQ5MjA2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGZvciBgaXNfa2R1bXBfa2VybmVsKClgIGluIGBib29zdF93YXRlcm1hcmsoKWAgd2l0aGluIGBtbS9wYWdlX2FsbG9jLmNgIHRvIHByZXZlbnQgd2F0ZXJtYXJrIGJvb3N0aW5nIGR1cmluZyBrZHVtcCBjYXB0dXJlIGtlcm5lbCBleGVjdXRpb24uIFRoaXMgaXMgYSBwdXJlbHkgYWxnb3JpdGhtaWMgLyBwb2xpY3kgY2hlY2sgaW4gdGhlIHBhZ2UgYWxsb2NhdG9yIHJlY2xhaW0gaGV1cmlzdGljcyByZXR1cm5pbmcgYSBib29sZWFuIHZhbHVlLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRhdGEgY29weWluZyB0byB1c2VyIHNwYWNlLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHVzYWdlLCBvciBidWZmZXIgbWFuaXB1bGF0aW9ucy4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBvciBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZjBiNGVlNDQ5NTUzNTBmMTI5ODcxNTdjYTU1MzJmNmM0ODYwNTQ1ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDE0IDE0OjMxOjUyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9hbGxvYy5jIGIvbW0vcGFnZV9hbGxvYy5jXG5pbmRleCAxMmZhYzkwODRjNDgzLi4yNzZmYTcxNjliOTkzIDEwMDY0NFxuLS0tIGEvbW0vcGFnZV9hbGxvYy5jXG4rKysgYi9tbS9wYWdlX2FsbG9jLmNcbkBAIC0zNyw2ICszNyw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdm1zdGF0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9mYXVsdC1pbmplY3QuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBhY3Rpb24uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NyYXNoX2R1bXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3RyYWNlL2V2ZW50cy9rbWVtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N0cmFjZS9ldmVudHMvb29tLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wcmVmZXRjaC5oXHUwMDNlXG5AQCAtMjE3OCw2ICsyMTc5LDE0IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBib29zdF93YXRlcm1hcmsoc3RydWN0IHpvbmUgKnpvbmUpXG4gXG4gXHRpZiAoIXdhdGVybWFya19ib29zdF9mYWN0b3IpXG4gXHRcdHJldHVybiBmYWxzZTtcbitcbitcdC8qXG4rXHQgKiBBIGtkdW1wIGNhcHR1cmUga2VybmVsIGV4aXRzIGJlZm9yZSBhIGJvb3N0IGNhbiBwYXkgb2ZmLCB3aGlsZVxuK1x0ICogdGhlIHJhaXNlZCB3YXRlcm1hcmsgY2FuIGV4Y2VlZCB0aGUgbWVtb3J5IGxlZnQgZm9yIHRoZSBkdW1wLlxuK1x0ICovXG4rXHRpZiAoaXNfa2R1bXBfa2VybmVsKCkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbiBcdC8qXG4gXHQgKiBEb24ndCBib3RoZXIgaW4gem9uZXMgdGhhdCBhcmUgdW5saWtlbHkgdG8gcHJvZHVjZSByZXN1bHRzLlxuIFx0ICogT24gc21hbGwgbWFjaGluZXMsIGluY2x1ZGluZyBrZHVtcCBjYXB0dXJlIGtlcm5lbHMgcnVubmluZ1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTQ6NTk6MzAuNDA5MzY2NjY5WiIsIlNlcSI6NDksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjYzNzMzODcyMjc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2g6IGBib29zdF93YXRlcm1hcmtgIGluIGBtbS9wYWdlX2FsbG9jLmNgKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIEl0IGxvb2tzIGxpa2Ugd2UncmUgdG91Y2hpbmcgdGhlIGBtbS9wYWdlX2FsbG9jLmNgIGZpbGUsIHNwZWNpZmljYWxseSB0aGUgYGJvb3N0X3dhdGVybWFya2AgZnVuY3Rpb24uIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoZSBhZGRpdGlvbiBvZiBgI2luY2x1ZGUgXHUwMDNjbGludXgvY3Jhc2hfZHVtcC5oXHUwMDNlYCBpcyBhIGNsdWUgdG8gd2hhdCdzIGdvaW5nIG9uLiBJJ20gYXNzdW1pbmcgaXQncyByZWxhdGVkIHRvIGNyYXNoIGR1bXBzIG9yIGtkdW1wLCBnaXZlbiB0aGUgY29udGV4dC5cblxuTG9va2luZyBjbG9zZXIgYXQgdGhlIGRpZmYsIHRoZXkndmUgYWRkZWQgYSBjaGVjayB3aXRoaW4gYGJvb3N0X3dhdGVybWFya2AuIFRoZSBjb3JlIG9mIHRoZSBtb2RpZmljYXRpb24gaXMgYSBjb25kaXRpb25hbCBjaGVjazogYGlmIChpc19rZHVtcF9rZXJuZWwoKSkgcmV0dXJuIGZhbHNlO2AuIE5vdywgdGhpcyBpcyBpbnRlcmVzdGluZy4gVGhlIGNvbW1lbnRzIHRlbGwgbWUgdGhhdCB0aGUgYGJvb3N0X3dhdGVybWFya2AgbWVjaGFuaXNtIGNhbiBpbnRlcmZlcmUgd2l0aCBrZHVtcCBjYXB0dXJlcyBpZiBhIHdhdGVybWFyayBpcyByYWlzZWQuIFRoZSByYWlzZWQgd2F0ZXJtYXJrIGNhbiBjb25zdW1lIG1lbW9yeSB0aGF0IHRoZSBjcmFzaCBrZXJuZWwgbmVlZHMuIEkga25vdyB0aGF0IGJvb3N0IHdpbGwgaW5jcmVhc2UgdGhlIHdhdGVybWFyay4gVGhpcyB3aWxsIHN0b3AgdGhpcyBtZWNoYW5pc20gaW4gYSBrZHVtcCBzY2VuYXJpby4gVGhlIGdvYWwgaXMgdG8gZW5zdXJlIHRoZSBrZHVtcCBrZXJuZWwgaGFzIGVub3VnaCBtZW1vcnkgdG8gZG8gaXRzIGpvYiBieSBwcmV2ZW50aW5nIHRoZSBib29zdGluZyBvZiB0aGUgd2F0ZXJtYXJrLiBUaGlzIG1ha2VzIHRvdGFsIHNlbnNlLiBXZSBuZWVkIHRvIGJlIGNhcmVmdWwgd2l0aCBtZW1vcnkgYWxsb2NhdGlvbiBkdXJpbmcgYSBjcmFzaCBkdW1wLiBHaXZlbiB0aGUgcG90ZW50aWFsIGZvciBpbnN0YWJpbGl0eSwgdGhpcyBzZWVtcyBsaWtlIGEgcHJ1ZGVudCBjaGFuZ2UuIExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBlbnN1cmUgdGhpcyBkb2Vzbid0IGludHJvZHVjZSBhbnkgdW5mb3Jlc2VlbiBzaWRlIGVmZmVjdHMsIGJ1dCBvbiB0aGUgc3VyZmFjZSwgdGhpcyBsb29rcyBnb29kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTk3LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzg0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTU6MDA6MzQuMTQzMjQxODQ1WiIsIlNlcSI6NTAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzAwMjExNjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYm9vc3Rfd2F0ZXJtYXJrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3BhZ2VfYWxsb2MuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9wYWdlX2FsbG9jLmM9MjE2OT1ib29sIHBhZ2VibG9ja191bmlzb2xhdGVfYW5kX21vdmVfZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZSAqem9uZSwgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtMjE3NS1cXG5tbS9wYWdlX2FsbG9jLmM6MjE3NjpzdGF0aWMgaW5saW5lIGJvb2wgYm9vc3Rfd2F0ZXJtYXJrKHN0cnVjdCB6b25lICp6b25lKVxcbm1tL3BhZ2VfYWxsb2MuYy0yMTc3LXtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz0yMzA3PXRyeV90b19jbGFpbV9ibG9jayhzdHJ1Y3Qgem9uZSAqem9uZSwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtMjMyOS1cXHQgKi9cXG5tbS9wYWdlX2FsbG9jLmM6MjMzMDpcXHRpZiAoYm9vc3Rfd2F0ZXJtYXJrKHpvbmUpIFxcdTAwMjZcXHUwMDI2IChhbGxvY19mbGFncyBcXHUwMDI2IEFMTE9DX0tTV0FQRCkpXFxubW0vcGFnZV9hbGxvYy5jLTIzMzEtXFx0XFx0c2V0X2JpdChaT05FX0JPT1NURURfV0FURVJNQVJLLCBcXHUwMDI2em9uZS1cXHUwMDNlZmxhZ3MpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxNTowMDozNC42MTMyNjkyMDhaIiwiU2VxIjo1MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjY3MzY0MDQzNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0cywgZ2VhcmVkIHRvd2FyZHMgYW4gZXhwZXJ0OlxuXG4qKkRpdmluZyBpbnRvIGBtbS9wYWdlX2FsbG9jLmNgIEFyb3VuZCBMaW5lIDIxNzYqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSdtIGZvY3VzaW5nIG9uIGBtbS9wYWdlX2FsbG9jLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMjE3Ni4gVGhhdCBsaWtlbHkgbWVhbnMgSSdtIGluIHRoZSBtaWRkbGUgb2YgYSBjcml0aWNhbCBzZWN0aW9uIG9mIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBwcm9jZXNzLCBvciBwZXJoYXBzIGRlYWxsb2NhdGlvbiwgb3IgZXZlbiBoYW5kbGluZyBzb21lIGtpbmQgb2YgcGFnZSBtZXRhZGF0YSBtb2RpZmljYXRpb24uIEkga25vdyB0aGlzIG1vZHVsZSBsaWtlIHRoZSBiYWNrIG9mIG15IGhhbmQsIGJ1dCBwaW5wb2ludGluZyBhIHNwZWNpZmljIGxpbmUgaGVscHMgbWUgemVybyBpbiBvbiB0aGUgZXhhY3QgY29udGV4dC4gSSdsbCBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9mIHRoZSBzdXJyb3VuZGluZyBjb2RlOyBJIG5lZWQgdGhlIHdpZGVyIHBpY3R1cmUuIEknbSBhbnRpY2lwYXRpbmcgcG9zc2libHkgY2hlY2tpbmcgc29tZSBmbGFncywgbG9va2luZyBmb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgb3IgbWF5YmUganVzdCB3YW50aW5nIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBhbGxvY2F0aW9uIHN0cmF0ZWdpZXMgYXJlIGltcGxlbWVudGVkIGluIHRoaXMgc3BvdC4gTGV0J3Mgc2VlIHdoYXQgdGhlIGFkamFjZW50IGxpbmVzIHJldmVhbCBhbmQgdGhlbiBmb3JtIGEgaHlwb3RoZXNpcyBhYm91dCB3aHkgdGhlIGF1dGhvciB3b3VsZCBpbmNsdWRlIGNvZGUgYXQgdGhhdCBsb2NhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE0NSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE1OjAxOjAxLjM0OTY3NTIyNloiLCJTZXEiOjUyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjM5NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vcGFnZV9hbGxvYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIxNzAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIxNzA6XFx0e1xcbjIxNzE6XFx0XFx0cmV0dXJuIF9fbW92ZV9mcmVlcGFnZXNfYmxvY2tfaXNvbGF0ZSh6b25lLCBwYWdlLCBmYWxzZSk7XFxuMjE3MjpcXHR9XFxuMjE3MzpcXHRcXG4yMTc0OlxcdCNlbmRpZiAvKiBDT05GSUdfTUVNT1JZX0lTT0xBVElPTiAqL1xcbjIxNzU6XFx0XFxuMjE3NjpcXHRzdGF0aWMgaW5saW5lIGJvb2wgYm9vc3Rfd2F0ZXJtYXJrKHN0cnVjdCB6b25lICp6b25lKVxcbjIxNzc6XFx0e1xcbjIxNzg6XFx0XFx0dW5zaWduZWQgbG9uZyBtYXhfYm9vc3Q7XFxuMjE3OTpcXHRcXG4yMTgwOlxcdFxcdGlmICghd2F0ZXJtYXJrX2Jvb3N0X2ZhY3RvcilcXG4yMTgxOlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4yMTgyOlxcdFxcbjIxODM6XFx0XFx0LypcXG4yMTg0OlxcdFxcdCAqIEEga2R1bXAgY2FwdHVyZSBrZXJuZWwgZXhpdHMgYmVmb3JlIGEgYm9vc3QgY2FuIHBheSBvZmYsIHdoaWxlXFxuMjE4NTpcXHRcXHQgKiB0aGUgcmFpc2VkIHdhdGVybWFyayBjYW4gZXhjZWVkIHRoZSBtZW1vcnkgbGVmdCBmb3IgdGhlIGR1bXAuXFxuMjE4NjpcXHRcXHQgKi9cXG4yMTg3OlxcdFxcdGlmIChpc19rZHVtcF9rZXJuZWwoKSlcXG4yMTg4OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4yMTg5OlxcdFxcbjIxOTA6XFx0XFx0LypcXG4yMTkxOlxcdFxcdCAqIERvbid0IGJvdGhlciBpbiB6b25lcyB0aGF0IGFyZSB1bmxpa2VseSB0byBwcm9kdWNlIHJlc3VsdHMuXFxuMjE5MjpcXHRcXHQgKiBPbiBzbWFsbCBtYWNoaW5lcywgaW5jbHVkaW5nIGtkdW1wIGNhcHR1cmUga2VybmVscyBydW5uaW5nXFxuMjE5MzpcXHRcXHQgKiBpbiBhIHNtYWxsIGFyZWEsIGJvb3N0aW5nIHRoZSB3YXRlcm1hcmsgY2FuIGNhdXNlIGFuIG91dCBvZlxcbjIxOTQ6XFx0XFx0ICogbWVtb3J5IHNpdHVhdGlvbiBpbW1lZGlhdGVseS5cXG4yMTk1OlxcdFxcdCAqL1xcbjIxOTY6XFx0XFx0aWYgKChwYWdlYmxvY2tfbnJfcGFnZXMgKiA0KSBcXHUwMDNlIHpvbmVfbWFuYWdlZF9wYWdlcyh6b25lKSlcXG4yMTk3OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4yMTk4OlxcdFxcbjIxOTk6XFx0XFx0bWF4X2Jvb3N0ID0gbXVsdF9mcmFjKHpvbmUtXFx1MDAzZV93YXRlcm1hcmtbV01BUktfSElHSF0sXFxuMjIwMDpcXHRcXHRcXHRcXHR3YXRlcm1hcmtfYm9vc3RfZmFjdG9yLCAxMDAwMCk7XFxuMjIwMTpcXHRcXG4yMjAyOlxcdFxcdC8qXFxuMjIwMzpcXHRcXHQgKiBoaWdoIHdhdGVybWFyayBtYXkgYmUgdW5pbml0aWFsaXNlZCBpZiBmcmFnbWVudGF0aW9uIG9jY3Vyc1xcbjIyMDQ6XFx0XFx0ICogdmVyeSBlYXJseSBpbiBib290IHNvIGRvIG5vdCBib29zdC4gV2UgZG8gbm90IGZhbGxcXG4yMjA1OlxcdFxcdCAqIHRocm91Z2ggYW5kIGJvb3N0IGJ5IHBhZ2VibG9ja19ucl9wYWdlcyBhcyBmYWlsaW5nXFxuMjIwNjpcXHRcXHQgKiBhbGxvY2F0aW9ucyB0aGF0IGVhcmx5IG1lYW5zIHRoYXQgcmVjbGFpbSBpcyBub3QgZ29pbmdcXG4yMjA3OlxcdFxcdCAqIHRvIGhlbHAgYW5kIGl0IG1heSBldmVuIGJlIGltcG9zc2libGUgdG8gcmVjbGFpbSB0aGVcXG4yMjA4OlxcdFxcdCAqIGJvb3N0ZWQgd2F0ZXJtYXJrIHJlc3VsdGluZyBpbiBhIGhhbmcuXFxuMjIwOTpcXHRcXHQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTU6MDE6MDEuMzQ5OTQxMjU2WiIsIlNlcSI6NTMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQyNjUyODI4NzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgYGlzX2tkdW1wX2tlcm5lbCgpYCBGdW5jdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGUgZ3V0cyBvZiBgaXNfa2R1bXBfa2VybmVsKClgIGFuZCB1bmRlcnN0YW5kIHdoYXQgaXQncyByZWFsbHkgZG9pbmcuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBleGFjdCBjcml0ZXJpYSBpdCB1c2VzIHRvIGlkZW50aWZ5IGEga2VybmVsIGFzIGEga2R1bXAga2VybmVsLiBBcmUgd2UgdGFsa2luZyBhYm91dCBhIHNpbXBsZSBjaGVjayBvbiBhIG1vZHVsZSwgYSBzcGVjaWZpYyBmbGFnIGluIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lLCBvciBzb21ldGhpbmcgbW9yZSBzb3BoaXN0aWNhdGVkPyBXaGF0IGtlcm5lbCBzdHJ1Y3R1cmVzIGlzIGl0IHByb2Jpbmc/IElzIGl0IHBvdGVudGlhbGx5IHJlYWRpbmcgZnJvbSBzb21ldGhpbmcgaW4gdGhlIG1lbW9yeSBzcGFjZT8gSSBuZWVkIHRvIGtub3cgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMuIFVuZGVyc3RhbmRpbmcgdGhpcyBmdW5jdGlvbiBpcyBjcnVjaWFsIGZvciBbKippbnNlcnQgdXNlcidzIGZpZWxkIG9mIGV4cGVydGlzZSwgZS5nLiwgbWVtb3J5IGR1bXAgYW5hbHlzaXMsIGtlcm5lbCBzZWN1cml0eSwgY3Jhc2ggYW5hbHlzaXMsIGV0Yy4gLSBhc3N1bWUgdGhhdCB0aGlzIGlzIHRoZSB1c2VyJ3MgZm9jdXMqKl0gYmVjYXVzZSB0aGUgb3V0cHV0IG9mIHRoaXMgaXMgY3JpdGljYWwgZm9yIFsqKmV4cGxhaW4gd2h5IHVuZGVyc3RhbmRpbmcgdGhlIG91dHB1dCBpcyBpbXBvcnRhbnQgdG8gdGhlIHVzZXIncyBmaWVsZCBvZiBleHBlcnRpc2UqKl0uIEFueSBlcnJvcnMgb3IgcXVpcmtzIGluIGl0cyBsb2dpYyBjb3VsZCBsZWFkIHRvIFsqKmV4cGxhaW4gY29uc2VxdWVuY2VzIG9mIGZhaWx1cmUgYmFzZWQgb24gdXNlcidzIGZpZWxkIG9mIGV4cGVydGlzZSoqXS4gVGltZSB0byBnZXQgdG8gdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5ODgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE1OjAxOjQ0LjAwMjc3MzU3NVoiLCJTZXEiOjU0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk0MDQ5OTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlzX2tkdW1wX2tlcm5lbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaD0zNj12b2lkIHZtY29yZV9jbGVhbnVwKHZvaWQpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9jcmFzaF9kdW1wLmgtNTYtXFxuaW5jbHVkZS9saW51eC9jcmFzaF9kdW1wLmg6NTc6I2lmbmRlZiBpc19rZHVtcF9rZXJuZWxcXG5pbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaC01OC0vKlxcbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oOjU5OiAqIGlzX2tkdW1wX2tlcm5lbCgpIGNoZWNrcyB3aGV0aGVyIHRoaXMga2VybmVsIGlzIGJvb3RpbmcgYWZ0ZXIgYSBwYW5pYyBvZlxcbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oLTYwLSAqIHByZXZpb3VzIGtlcm5lbCBvciBub3QuIFRoaXMgaXMgZGV0ZXJtaW5lZCBieSBjaGVja2luZyBpZiBwcmV2aW91cyBrZXJuZWxcXG4tLVxcbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oLTY3LVxcbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oOjY4OnN0YXRpYyBpbmxpbmUgYm9vbCBpc19rZHVtcF9rZXJuZWwodm9pZClcXG5pbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaC02OS17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaD04Mj1zdGF0aWMgaW5saW5lIGludCBpc192bWNvcmVfdXNhYmxlKHZvaWQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaC04OC0vKiB2bWNvcmVfdW51c2FibGUoKSBtYXJrcyB0aGUgdm1jb3JlIGFzIHVudXNhYmxlLFxcbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oOjg5OiAqIHdpdGhvdXQgZGlzdHVyYmluZyB0aGUgbG9naWMgb2YgaXNfa2R1bXBfa2VybmVsKClcXG5pbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaC05MC0gKi9cXG4tLVxcbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oPTE1MD1zdGF0aWMgaW5saW5lIHZvaWQgdm1jb3JlX2ZyZWVfcmFuZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaC0xNjAtI2Vsc2UgLyogIUNPTkZJR19DUkFTSF9EVU1QICovXFxuaW5jbHVkZS9saW51eC9jcmFzaF9kdW1wLmg6MTYxOnN0YXRpYyBpbmxpbmUgYm9vbCBpc19rZHVtcF9rZXJuZWwodm9pZCkgeyByZXR1cm4gZmFsc2U7IH1cXG5pbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaC0xNjItI2VuZGlmIC8qIENPTkZJR19DUkFTSF9EVU1QICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE1OjAxOjQ0LjQ5NjgzMDIwN1oiLCJTZXEiOjU1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozMTAxNDk5OTE3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCdzIFNhZmV0eSoqXG5cbk9rYXksIHRoaXMgcGF0Y2ggaXMgaW5jcmVkaWJseSBzaW1wbGUuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgYSBzaW5nbGUgYGlmYCBzdGF0ZW1lbnQgd2l0aGluIGBib29zdF93YXRlcm1hcmsoKWAgaW4gYG1tL3BhZ2VfYWxsb2MuY2AuIEl0J3MganVzdCBhIGNoZWNrOiBgaWYgKGlzX2tkdW1wX2tlcm5lbCgpKSByZXR1cm4gZmFsc2U7YC4gTXkgaW5pdGlhbCBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBCdXQgbGV0J3MgYnJlYWsgaXQgZG93bjpcblxuKiAgICoqTm8gQWxsb2NhdGlvbiBJc3N1ZXM6KiogTm8gc3RhY2sgb3IgaGVhcCBhbGxvY2F0aW9ucyBhcmUgdG91Y2hlZC4gVGhhdOKAmXMgYSBiaWcgcmVsaWVmLlxuKiAgICoqTm8gVXNlciBTcGFjZSBFeHBvc3VyZToqKiBXZSdyZSBub3QgY29weWluZyBhbnl0aGluZyB0byB1c2VyIHNwYWNlLiBBYnNvbHV0ZWx5IG5vIHJpc2sgb2YgbGVha2luZyB1bmluaXRpYWxpemVkIGRhdGEgdGhyb3VnaCBhIGBjb3B5X3RvX3VzZXJgIG9yIHNvbWV0aGluZyBzaW1pbGFyLlxuKiAgICoqTm8gVW5pbml0aWFsaXplZCBSZWFkczoqKiBUaGUgYGlzX2tkdW1wX2tlcm5lbCgpYCBmdW5jdGlvbiBpdHNlbGYgaXMgdGhlIGtleSBoZXJlLiBJdCdzIHNhZmUuIEl0J3Mgbm90IHJlYWRpbmcgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3IgYnJhbmNoaW5nIGJhc2VkIG9uIHBvdGVudGlhbGx5IGdhcmJhZ2UgZGF0YS4gSXQncyBsaWtlbHkgY2hlY2tpbmcgc29tZXRoaW5nIGxpa2UgYGVsZmNvcmVoZHJfYWRkciAhPSBFTEZDT1JFX0FERFJfTUFYYCwgYSBwcmV0dHkgZGlyZWN0IGNvbXBhcmlzb24uXG4qICAgKipObyBTdHJ1Y3R1cmUgTWFuaXB1bGF0aW9uOioqIFRoaXMgZG9lc27igJl0IHRvdWNoIGFueSBkYXRhIGJ1ZmZlcnMsIG1vZGlmeSBhbnkgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGFueXRoaW5nIG9mIHRoYXQgc29ydC4gSXQncyBhbiBlYXJseSByZXR1cm4uXG5cblNvLCBpbiBzaG9ydCwgdGhlcmUgaXMgemVybyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyB3aXRoIHRoaXMgY2hhbmdlLiBLTVNBTiBpcyBub3QgbmVjZXNzYXJ5LCBhYnNvbHV0ZWx5IG5vdCBuZWVkZWQsIGhlcmUuXG5cbk5vdywgbGV0IG1lIHJ1biB0aHJvdWdoIG15IG1lbnRhbCBjaGVja2xpc3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluOlxuXG4xLiAgKipVc2VyLVNwYWNlIEV4cG9zdXJlPyoqIE5vcGUuXG4yLiAgKipDb25kaXRpb25hbCBMb2dpYyBEZXBlbmRlbnQgb24gVW5pbml0aWFsaXplZCBEYXRhPyoqIE5vLCB0aGUgY2hlY2sgaXMgY2xlYW4uXG4zLiAgKipDb21wbGV4IERhdGEgU3RydWN0dXJlIEluaXRpYWxpemF0aW9uPyoqIE5vdGhpbmcgY29tcGxleCBpcyBoYXBwZW5pbmcsIGRlZmluaXRlbHkgbm90IGFuIGlzc3VlIGhlcmUuXG40LiAgKipCb3VuZHMgQ2hlY2tzL1VuaW5pdGlhbGl6ZWQgQnVmZmVyIEFjY2Vzcz8qKiBObyBib3VuZHMgY2hlY2tzIGludm9sdmVkLCBhbmQgaXQgZG9lcyBub3QgYWZmZWN0IGFueSBleGlzdGluZyBidWZmZXJzLlxuXG5UaGVyZWZvcmUsIGBOZWVkc0tNU0FOPWZhbHNlYCBpcyB0aGUgY29ycmVjdCBjYWxsLiBMZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AgYW5kIG1vdmUgb24gdG8gdGhlIG5leHQgb25lLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0Njk0LCJPdXRwdXRUb2tlbnMiOjE0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxNTowMjoxNS41MTE4MzIxOTFaIiwiU2VxIjo1NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjI3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBjaGVjayBmb3IgYGlzX2tkdW1wX2tlcm5lbCgpYCBpbiBgYm9vc3Rfd2F0ZXJtYXJrKClgIHdpdGhpbiBgbW0vcGFnZV9hbGxvYy5jYCB0byBwcmV2ZW50IHdhdGVybWFyayBib29zdGluZyBkdXJpbmcga2R1bXAgY2FwdHVyZSBrZXJuZWwgZXhlY3V0aW9uLiBUaGlzIGlzIGEgcHVyZWx5IGFsZ29yaXRobWljIC8gcG9saWN5IGNoZWNrIGluIHRoZSBwYWdlIGFsbG9jYXRvciByZWNsYWltIGhldXJpc3RpY3MgcmV0dXJuaW5nIGEgYm9vbGVhbiB2YWx1ZS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkYXRhIGNvcHlpbmcgdG8gdXNlciBzcGFjZSwgdW5pbml0aWFsaXplZCB2YXJpYWJsZSB1c2FnZSwgb3IgYnVmZmVyIG1hbmlwdWxhdGlvbnMuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBjaGVjayBmb3IgYGlzX2tkdW1wX2tlcm5lbCgpYCBpbiBgYm9vc3Rfd2F0ZXJtYXJrKClgIHdpdGhpbiBgbW0vcGFnZV9hbGxvYy5jYCB0byBwcmV2ZW50IHdhdGVybWFyayBib29zdGluZyBkdXJpbmcga2R1bXAgY2FwdHVyZSBrZXJuZWwgZXhlY3V0aW9uLiBUaGlzIGlzIGEgcHVyZWx5IGFsZ29yaXRobWljIC8gcG9saWN5IGNoZWNrIGluIHRoZSBwYWdlIGFsbG9jYXRvciByZWNsYWltIGhldXJpc3RpY3MgcmV0dXJuaW5nIGEgYm9vbGVhbiB2YWx1ZS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkYXRhIGNvcHlpbmcgdG8gdXNlciBzcGFjZSwgdW5pbml0aWFsaXplZCB2YXJpYWJsZSB1c2FnZSwgb3IgYnVmZmVyIG1hbmlwdWxhdGlvbnMuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowwrxkr[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-14 14:08:17 +0000 UTC FinishedAt: 2026-09-14 15:02:16 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "136a77f66b51dad3846c393753d92ad026e484e7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CRASH_DUMP", "KEXEC" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "136a77f66b51dad3846c393753d92ad026e484e7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CRASH_DUMP", "KEXEC" ], "series_id": "ce0d30d5-15a8-4d38-82b4-35d92cab1f42" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "boost_watermark", "try_to_claim_block" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "", "base_commit": "136a77f66b51dad3846c393753d92ad026e484e7", "base_tree": "mm-new" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE0OjMxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MzBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDUkFTSF9EVU1QJiMzNDssCiAgICAmIzM0O0tFWEVDJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Ym9vc3Rfd2F0ZXJtYXJrJiMzNDssCiAgICAmIzM0O3RyeV90b19jbGFpbV9ibG9jayYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBjaGVjayBmb3IgYGlzX2tkdW1wX2tlcm5lbCgpYCBpbiBgYm9vc3Rfd2F0ZXJtYXJrKClgIHdpdGhpbiBgbW0vcGFnZV9hbGxvYy5jYCB0byBwcmV2ZW50IHdhdGVybWFyayBib29zdGluZyBkdXJpbmcga2R1bXAgY2FwdHVyZSBrZXJuZWwgZXhlY3V0aW9uLiBUaGlzIGlzIGEgcHVyZWx5IGFsZ29yaXRobWljIC8gcG9saWN5IGNoZWNrIGluIHRoZSBwYWdlIGFsbG9jYXRvciByZWNsYWltIGhldXJpc3RpY3MgcmV0dXJuaW5nIGEgYm9vbGVhbiB2YWx1ZS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkYXRhIGNvcHlpbmcgdG8gdXNlciBzcGFjZSwgdW5pbml0aWFsaXplZCB2YXJpYWJsZSB1c2FnZSwgb3IgYnVmZmVyIG1hbmlwdWxhdGlvbnMuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGluIG1tL3BhZ2VfYWxsb2MuYyBieSBhZGRpbmcgYW4gaXNfa2R1bXBfa2VybmVsKCkgY2hlY2sgaW5zaWRlIGJvb3N0X3dhdGVybWFyaygpIHRvIGRpc2FibGUgd2F0ZXJtYXJrIGJvb3N0aW5nIGluIGtkdW1wIGtlcm5lbHMuIFRoaXMgY29kZSBpcyBsb2NhdGVkIGluIHRoZSBjb3JlIHBhZ2UgYWxsb2NhdG9yJiMzOTtzIGFudGktZnJhZ21lbnRhdGlvbiBmYWxsYmFjayBwYXRoIGFuZCBleGVjdXRlcyBkdXJpbmcgcGFnZWJsb2NrIGNsYWltaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE0OjMxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZjBiNGVlNDQ5NTUzNTBmMTI5ODcxNTdjYTU1MzJmNmM0ODYwNTQ1ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDE0IDE0OjMxOjUyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuY1xuaW5kZXggMTJmYWM5MDg0YzQ4My4uMjc2ZmE3MTY5Yjk5MyAxMDA2NDRcbi0tLSBhL21tL3BhZ2VfYWxsb2MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZV9hbGxvYy5jXG5AQCAtMzcsNiAmIzQzOzM3LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC92bXN0YXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZhdWx0LWluamVjdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY29tcGFjdGlvbi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NyYXNoX2R1bXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3RyYWNlL2V2ZW50cy9rbWVtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N0cmFjZS9ldmVudHMvb29tLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wcmVmZXRjaC5oXHUwMDNlXG5AQCAtMjE3OCw2ICYjNDM7MjE3OSwxNCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYm9vc3Rfd2F0ZXJtYXJrKHN0cnVjdCB6b25lICp6b25lKVxuIFxuIFx0aWYgKCF3YXRlcm1hcmtfYm9vc3RfZmFjdG9yKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQSBrZHVtcCBjYXB0dXJlIGtlcm5lbCBleGl0cyBiZWZvcmUgYSBib29zdCBjYW4gcGF5IG9mZiwgd2hpbGVcbiYjNDM7XHQgKiB0aGUgcmFpc2VkIHdhdGVybWFyayBjYW4gZXhjZWVkIHRoZSBtZW1vcnkgbGVmdCBmb3IgdGhlIGR1bXAuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGlzX2tkdW1wX2tlcm5lbCgpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiBcdC8qXG4gXHQgKiBEb24mIzM5O3QgYm90aGVyIGluIHpvbmVzIHRoYXQgYXJlIHVubGlrZWx5IHRvIHByb2R1Y2UgcmVzdWx0cy5cbiBcdCAqIE9uIHNtYWxsIG1hY2hpbmVzLCBpbmNsdWRpbmcga2R1bXAgY2FwdHVyZSBrZXJuZWxzIHJ1bm5pbmdcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxNDozMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4yN208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q1JBU0hfRFVNUCYjMzQ7LAogICAgJiMzNDtLRVhFQyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Jvb3N0X3dhdGVybWFyayYjMzQ7LAogICAgJiMzNDt0cnlfdG9fY2xhaW1fYmxvY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiBtbS9wYWdlX2FsbG9jLmMgYnkgYWRkaW5nIGFuIGlzX2tkdW1wX2tlcm5lbCgpIGNoZWNrIGluc2lkZSBib29zdF93YXRlcm1hcmsoKSB0byBkaXNhYmxlIHdhdGVybWFyayBib29zdGluZyBpbiBrZHVtcCBrZXJuZWxzLiBUaGlzIGNvZGUgaXMgbG9jYXRlZCBpbiB0aGUgY29yZSBwYWdlIGFsbG9jYXRvciYjMzk7cyBhbnRpLWZyYWdtZW50YXRpb24gZmFsbGJhY2sgcGF0aCBhbmQgZXhlY3V0ZXMgZHVyaW5nIHBhZ2VibG9jayBjbGFpbWluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGYwYjRlZTQ0OTU1MzUwZjEyOTg3MTU3Y2E1NTMyZjZjNDg2MDU0NWYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCAxNCAxNDozMTo1MiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuYwppbmRleCAxMmZhYzkwODRjNDgzLi4yNzZmYTcxNjliOTkzIDEwMDY0NAotLS0gYS9tbS9wYWdlX2FsbG9jLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZV9hbGxvYy5jCkBAIC0zNyw2ICYjNDM7MzcsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3Ztc3RhdC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2ZhdWx0LWluamVjdC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2NvbXBhY3Rpb24uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvY3Jhc2hfZHVtcC5oJmd0OwogI2luY2x1ZGUgJmx0O3RyYWNlL2V2ZW50cy9rbWVtLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7dHJhY2UvZXZlbnRzL29vbS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3ByZWZldGNoLmgmZ3Q7CkBAIC0yMTc4LDYgJiM0MzsyMTc5LDE0IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBib29zdF93YXRlcm1hcmsoc3RydWN0IHpvbmUgKnpvbmUpCiAKIAlpZiAoIXdhdGVybWFya19ib29zdF9mYWN0b3IpCiAJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogQSBrZHVtcCBjYXB0dXJlIGtlcm5lbCBleGl0cyBiZWZvcmUgYSBib29zdCBjYW4gcGF5IG9mZiwgd2hpbGUKJiM0MzsJICogdGhlIHJhaXNlZCB3YXRlcm1hcmsgY2FuIGV4Y2VlZCB0aGUgbWVtb3J5IGxlZnQgZm9yIHRoZSBkdW1wLgomIzQzOwkgKi8KJiM0MzsJaWYgKGlzX2tkdW1wX2tlcm5lbCgpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwogCS8qCiAJICogRG9uJiMzOTt0IGJvdGhlciBpbiB6b25lcyB0aGF0IGFyZSB1bmxpa2VseSB0byBwcm9kdWNlIHJlc3VsdHMuCiAJICogT24gc21hbGwgbWFjaGluZXMsIGluY2x1ZGluZyBrZHVtcCBjYXB0dXJlIGtlcm5lbHMgcnVubmluZwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxNDozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTg1CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNDAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBNZW1vcnkgQWxsb2NhdGlvbiBpbiB0aGUgQ29udGV4dCBvZiBLZHVtcCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGRpZmZgIGluIGBtbS9wYWdlX2FsbG9jLmNgLiBMb29rcyBsaWtlIHdlJiMzOTtyZSBhZGRpbmcgYSBgI2luY2x1ZGUgJmx0O2xpbnV4L2NyYXNoX2R1bXAuaCZndDtgIGFuZCBtb2RpZnlpbmcgdGhlIHdhdGVybWFyayBib29zdGluZyBsb2dpYy4gSW50ZXJlc3RpbmcuIEkmIzM5O20gZm9jdXNpbmcgb24gbGluZXMgMjE3OCBvbndhcmQuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBub3RpbmcgdGhlIGFkZGl0aW9uIG9mIGEgY2hlY2sgZm9yIGBpc19rZHVtcF9rZXJuZWwoKWAuIFRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2UsIGFzIEkgc2VlIGl0LCB0aGUga2VybmVsIGR1bXAgY2FwdHVyZSBwcm9jZXNzIChrZHVtcCkgaGFzIHNvbWUgdW5pcXVlIG1lbW9yeSBtYW5hZ2VtZW50IGNvbnNpZGVyYXRpb25zLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhlIHdhdGVybWFyayBib29zdGluZywgd2hpY2ggdXN1YWxseSBoZWxwcyB0byBwcmV2ZW50IGFsbG9jYXRpb24gZmFpbHVyZXMsIG1pZ2h0IGJlIGNvdW50ZXJwcm9kdWN0aXZlIG9yIGV2ZW4gcHJvYmxlbWF0aWMgZHVyaW5nIGEga2R1bXAgc2NlbmFyaW8uIFRoZSBjb21tZW50IGNsYXJpZmllcyB0aGlzOiB0aGUga2R1bXAga2VybmVsIGNhbiBleGl0IGJlZm9yZSBhIGJvb3N0IGNhbiBwcm92aWRlIGl0cyB1c3VhbCBiZW5lZml0LCBhbmQgZnVydGhlcm1vcmUsIGFuIG92ZXJseSBhZ2dyZXNzaXZlIHdhdGVybWFyayBpbmNyZWFzZSAqY291bGQqIGxlYWQgdG8gdGhlIHJhaXNlZCB3YXRlcm1hcmsgZXhjZWVkaW5nIHRoZSBtZW1vcnkgYXZhaWxhYmxlIGZvciB0aGUgYWN0dWFsIGNyYXNoIGR1bXAuIEl0JiMzOTtzIGEgdHJhZGUtb2ZmLiBXZSBkb24mIzM5O3Qgd2FudCB0byBzdGFydmUgdGhlIGR1bXAgcHJvY2Vzcy4gU28sIHRoZSBjb2RlIG5vdyBleHBsaWNpdGx5IGRpc2FibGVzIHdhdGVybWFyayBib29zdGluZyB3aGVuIGBpc19rZHVtcF9rZXJuZWwoKWAgcmV0dXJucyB0cnVlLiBTZWVtcyBzZW5zaWJsZSwgY29uc2lkZXJpbmcgdGhlIHBvdGVudGlhbCBjb25mbGljdC4gSSBuZWVkIHRvIGtlZXAgdGhpcyBpbiBtaW5kIHdoZW4gZXZhbHVhdGluZyBtZW1vcnkgbWFuYWdlbWVudCBiZWhhdmlvcnMgZHVyaW5nIGNyYXNoIHNjZW5hcmlvcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxNDozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3BhZ2VfYWxsb2MuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxNzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjE3MDpcdHtcbjIxNzE6XHRcdHJldHVybiBfX21vdmVfZnJlZXBhZ2VzX2Jsb2NrX2lzb2xhdGUoem9uZSwgcGFnZSwgZmFsc2UpO1xuMjE3MjpcdH1cbjIxNzM6XHRcbjIxNzQ6XHQjZW5kaWYgLyogQ09ORklHX01FTU9SWV9JU09MQVRJT04gKi9cbjIxNzU6XHRcbjIxNzY6XHRzdGF0aWMgaW5saW5lIGJvb2wgYm9vc3Rfd2F0ZXJtYXJrKHN0cnVjdCB6b25lICp6b25lKVxuMjE3NzpcdHtcbjIxNzg6XHRcdHVuc2lnbmVkIGxvbmcgbWF4X2Jvb3N0O1xuMjE3OTpcdFxuMjE4MDpcdFx0aWYgKCF3YXRlcm1hcmtfYm9vc3RfZmFjdG9yKVxuMjE4MTpcdFx0XHRyZXR1cm4gZmFsc2U7XG4yMTgyOlx0XG4yMTgzOlx0XHQvKlxuMjE4NDpcdFx0ICogQSBrZHVtcCBjYXB0dXJlIGtlcm5lbCBleGl0cyBiZWZvcmUgYSBib29zdCBjYW4gcGF5IG9mZiwgd2hpbGVcbjIxODU6XHRcdCAqIHRoZSByYWlzZWQgd2F0ZXJtYXJrIGNhbiBleGNlZWQgdGhlIG1lbW9yeSBsZWZ0IGZvciB0aGUgZHVtcC5cbjIxODY6XHRcdCAqL1xuMjE4NzpcdFx0aWYgKGlzX2tkdW1wX2tlcm5lbCgpKVxuMjE4ODpcdFx0XHRyZXR1cm4gZmFsc2U7XG4yMTg5Olx0XG4yMTkwOlx0XHQvKlxuMjE5MTpcdFx0ICogRG9uJiMzOTt0IGJvdGhlciBpbiB6b25lcyB0aGF0IGFyZSB1bmxpa2VseSB0byBwcm9kdWNlIHJlc3VsdHMuXG4yMTkyOlx0XHQgKiBPbiBzbWFsbCBtYWNoaW5lcywgaW5jbHVkaW5nIGtkdW1wIGNhcHR1cmUga2VybmVscyBydW5uaW5nXG4yMTkzOlx0XHQgKiBpbiBhIHNtYWxsIGFyZWEsIGJvb3N0aW5nIHRoZSB3YXRlcm1hcmsgY2FuIGNhdXNlIGFuIG91dCBvZlxuMjE5NDpcdFx0ICogbWVtb3J5IHNpdHVhdGlvbiBpbW1lZGlhdGVseS5cbjIxOTU6XHRcdCAqL1xuMjE5NjpcdFx0aWYgKChwYWdlYmxvY2tfbnJfcGFnZXMgKiA0KSBcdTAwM2Ugem9uZV9tYW5hZ2VkX3BhZ2VzKHpvbmUpKVxuMjE5NzpcdFx0XHRyZXR1cm4gZmFsc2U7XG4yMTk4Olx0XG4yMTk5Olx0XHRtYXhfYm9vc3QgPSBtdWx0X2ZyYWMoem9uZS1cdTAwM2Vfd2F0ZXJtYXJrW1dNQVJLX0hJR0hdLFxuMjIwMDpcdFx0XHRcdHdhdGVybWFya19ib29zdF9mYWN0b3IsIDEwMDAwKTtcbjIyMDE6XHRcbjIyMDI6XHRcdC8qXG4yMjAzOlx0XHQgKiBoaWdoIHdhdGVybWFyayBtYXkgYmUgdW5pbml0aWFsaXNlZCBpZiBmcmFnbWVudGF0aW9uIG9jY3Vyc1xuMjIwNDpcdFx0ICogdmVyeSBlYXJseSBpbiBib290IHNvIGRvIG5vdCBib29zdC4gV2UgZG8gbm90IGZhbGxcbjIyMDU6XHRcdCAqIHRocm91Z2ggYW5kIGJvb3N0IGJ5IHBhZ2VibG9ja19ucl9wYWdlcyBhcyBmYWlsaW5nXG4yMjA2Olx0XHQgKiBhbGxvY2F0aW9ucyB0aGF0IGVhcmx5IG1lYW5zIHRoYXQgcmVjbGFpbSBpcyBub3QgZ29pbmdcbjIyMDc6XHRcdCAqIHRvIGhlbHAgYW5kIGl0IG1heSBldmVuIGJlIGltcG9zc2libGUgdG8gcmVjbGFpbSB0aGVcbjIyMDg6XHRcdCAqIGJvb3N0ZWQgd2F0ZXJtYXJrIHJlc3VsdGluZyBpbiBhIGhhbmcuXG4yMjA5Olx0XHQgKi9cbjIyMTA6XHRcdGlmICghbWF4X2Jvb3N0KVxuMjIxMTpcdFx0XHRyZXR1cm4gZmFsc2U7XG4yMjEyOlx0XG4yMjEzOlx0XHRtYXhfYm9vc3QgPSBtYXgocGFnZWJsb2NrX25yX3BhZ2VzLCBtYXhfYm9vc3QpO1xuMjIxNDpcdFxuMjIxNTpcdFx0em9uZS1cdTAwM2V3YXRlcm1hcmtfYm9vc3QgPSBtaW4oem9uZS1cdTAwM2V3YXRlcm1hcmtfYm9vc3QgJiM0MzsgcGFnZWJsb2NrX25yX3BhZ2VzLFxuMjIxNjpcdFx0XHRtYXhfYm9vc3QpO1xuMjIxNzpcdFxuMjIxODpcdFx0cmV0dXJuIHRydWU7XG4yMjE5Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE0OjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzODMKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBEdW1wIExhbmRzY2FwZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGggdGhpcyBgaXNfa2R1bXBfa2VybmVsKClgIGZ1bmN0aW9uLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBrbm93IHdoYXQgaXQgKmlzKi4gSXMgaXQgYSBtYWNybywgYSBmdW5jdGlvbiBkZWZpbmVkIGluIGEgaGVhZGVyLCBvciBzb21ldGhpbmcgZWxzZT8gSSBuZWVkIHRvIGZpbmQgaXRzIGRlZmluaXRpb24uIEkmIzM5O20gZ3Vlc3NpbmcgaXQmIzM5O3MgcHJvYmFibHkgcmVsYXRlZCB0byBrZXJuZWwgY3Jhc2ggZHVtcHMsIGFuZCB0aGF0IGxlYWRzIG1lIHRvIHRoZSBuZXh0IHRoaW5nOiB3aGF0JiMzOTtzIGBDUkFTSF9EVU1QYD8gSXMgaXQgYSBjb25maWd1cmF0aW9uIG9wdGlvbiwgYSBjb21waWxlLXRpbWUgZmxhZywgYSBzdHJ1Y3QgbWVtYmVyLCBhIHN5bWJvbD8gS25vd2luZyB0aGF0IHdpbGwgcHJvdmlkZSBjcml0aWNhbCBjb250ZXh0LiBJIGltYWdpbmUgdGhhdCBgaXNfa2R1bXBfa2VybmVsKClgIGlzIHNvbWVob3cgcmVsYXRlZCB0byB0aGUgYENSQVNIX0RVTVBgIG1lY2hhbmlzbS4gVGhhdCYjMzk7cyBteSBpbW1lZGlhdGUgdGhvdWdodC4gSSYjMzk7bSBnb2luZyB0byB0cmFjayB0aGVzZSB0d28gZG93biBzbyBJIGhhdmUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIHN5c3RlbSBoYW5kbGVzIGNyYXNoIGR1bXBzLiBUaGlzIHNob3VsZCBwcm92aWRlIHRoZSBpbmZvcm1hdGlvbiBJJiMzOTtsbCBuZWVkIHRvIGFuc3dlciB0aGUgcXVlc3Rpb24gYXQgaGFuZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxNDozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpc19rZHVtcF9rZXJuZWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaD0zNj12b2lkIHZtY29yZV9jbGVhbnVwKHZvaWQpO1xuLS1cbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oLTU2LVxuaW5jbHVkZS9saW51eC9jcmFzaF9kdW1wLmg6NTc6I2lmbmRlZiBpc19rZHVtcF9rZXJuZWxcbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oLTU4LS8qXG5pbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaDo1OTogKiBpc19rZHVtcF9rZXJuZWwoKSBjaGVja3Mgd2hldGhlciB0aGlzIGtlcm5lbCBpcyBib290aW5nIGFmdGVyIGEgcGFuaWMgb2ZcbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oLTYwLSAqIHByZXZpb3VzIGtlcm5lbCBvciBub3QuIFRoaXMgaXMgZGV0ZXJtaW5lZCBieSBjaGVja2luZyBpZiBwcmV2aW91cyBrZXJuZWxcbi0tXG5pbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaC02Ny1cbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oOjY4OnN0YXRpYyBpbmxpbmUgYm9vbCBpc19rZHVtcF9rZXJuZWwodm9pZClcbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oLTY5LXtcbi0tXG5pbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaD04Mj1zdGF0aWMgaW5saW5lIGludCBpc192bWNvcmVfdXNhYmxlKHZvaWQpXG4tLVxuaW5jbHVkZS9saW51eC9jcmFzaF9kdW1wLmgtODgtLyogdm1jb3JlX3VudXNhYmxlKCkgbWFya3MgdGhlIHZtY29yZSBhcyB1bnVzYWJsZSxcbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oOjg5OiAqIHdpdGhvdXQgZGlzdHVyYmluZyB0aGUgbG9naWMgb2YgaXNfa2R1bXBfa2VybmVsKClcbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oLTkwLSAqL1xuLS1cbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oPTE1MD1zdGF0aWMgaW5saW5lIHZvaWQgdm1jb3JlX2ZyZWVfcmFuZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXG4tLVxuaW5jbHVkZS9saW51eC9jcmFzaF9kdW1wLmgtMTYwLSNlbHNlIC8qICFDT05GSUdfQ1JBU0hfRFVNUCAqL1xuaW5jbHVkZS9saW51eC9jcmFzaF9kdW1wLmg6MTYxOnN0YXRpYyBpbmxpbmUgYm9vbCBpc19rZHVtcF9rZXJuZWwodm9pZCkgeyByZXR1cm4gZmFsc2U7IH1cbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oLTE2Mi0jZW5kaWYgLyogQ09ORklHX0NSQVNIX0RVTVAgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxNDozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDkwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipEaXZpbmcgaW50byB0aGUgQ3Jhc2ggRHVtcCBIZWFkZXIqKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGUga2VybmVsJiMzOTtzIGNyYXNoIGR1bXAgbWVjaGFuaXNtLiBJJiMzOTttIGZvY3VzaW5nIG9uIGBpbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaGAsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZXMgNTYgdG8gNzUuIEkmIzM5O20gZ3Vlc3NpbmcgdGhhdCBhcmVhIHByb2JhYmx5IGhvbGRzIHNvbWUgY3J1Y2lhbCBkYXRhIHN0cnVjdHVyZXMgb3IgbWFjcm9zIHJlbGF0ZWQgdG8gaG93IHRoZSBrZXJuZWwgY2FwdHVyZXMgYW5kIGhhbmRsZXMgaW5mb3JtYXRpb24gZHVyaW5nIGEgc3lzdGVtIGNyYXNoLiBUaGlzIGlzIGxpa2VseSB3aGVyZSB0aGUgZm91bmRhdGlvbiBpcyBsYWlkIGZvciB0aG9zZSBhbGwtaW1wb3J0YW50IGNyYXNoIGR1bXBzIHdlIHJlbHkgb24gZm9yIHBvc3QtbW9ydGVtIGFuYWx5c2lzLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGRldGFpbHMgYWJvdXQgdGhpbmdzIGxpa2UgdGhlIGZvcm1hdCBvZiB0aGUgY3Jhc2ggZGF0YSwgcG90ZW50aWFsbHkgc29tZSByZWdpc3RlcnMsIHBlcmhhcHMgbWVtb3J5IGxheW91dCBkZWZpbml0aW9ucywgb3IgaG93IHRoZSBrZXJuZWwgZGVzaWduYXRlcyBtZW1vcnkgZm9yIHRoZSBjcmFzaCBkYXRhLiBMZXQmIzM5O3Mgc2VlIHdoYXQgZ2VtcyBhcmUgaGlkZGVuIGluIHRoaXMgc2VjdGlvbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxNDozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA1NTpcdCNlbmRpZlxuICA1NjpcdFxuICA1NzpcdCNpZm5kZWYgaXNfa2R1bXBfa2VybmVsXG4gIDU4Olx0LypcbiAgNTk6XHQgKiBpc19rZHVtcF9rZXJuZWwoKSBjaGVja3Mgd2hldGhlciB0aGlzIGtlcm5lbCBpcyBib290aW5nIGFmdGVyIGEgcGFuaWMgb2ZcbiAgNjA6XHQgKiBwcmV2aW91cyBrZXJuZWwgb3Igbm90LiBUaGlzIGlzIGRldGVybWluZWQgYnkgY2hlY2tpbmcgaWYgcHJldmlvdXMga2VybmVsXG4gIDYxOlx0ICogaGFzIHBhc3NlZCB0aGUgZWxmIGNvcmUgaGVhZGVyIGFkZHJlc3Mgb24gY29tbWFuZCBsaW5lLlxuICA2MjpcdCAqXG4gIDYzOlx0ICogVGhpcyBpcyBub3QganVzdCBhIHRlc3QgaWYgQ09ORklHX0NSQVNIX0RVTVAgaXMgZW5hYmxlZCBvciBub3QuIEl0IHdpbGxcbiAgNjQ6XHQgKiByZXR1cm4gdHJ1ZSBpZiBDT05GSUdfQ1JBU0hfRFVNUD15IGFuZCBpZiBrZXJuZWwgaXMgYm9vdGluZyBhZnRlciBhIHBhbmljXG4gIDY1Olx0ICogb2YgcHJldmlvdXMga2VybmVsLlxuICA2NjpcdCAqL1xuICA2NzpcdFxuICA2ODpcdHN0YXRpYyBpbmxpbmUgYm9vbCBpc19rZHVtcF9rZXJuZWwodm9pZClcbiAgNjk6XHR7XG4gIDcwOlx0XHRyZXR1cm4gZWxmY29yZWhkcl9hZGRyICE9IEVMRkNPUkVfQUREUl9NQVg7XG4gIDcxOlx0fVxuICA3MjpcdCNlbmRpZlxuICA3MzpcdFxuICA3NDpcdC8qIGlzX3ZtY29yZV91c2FibGUoKSBjaGVja3MgaWYgdGhlIGtlcm5lbCBpcyBib290aW5nIGFmdGVyIGEgcGFuaWMgYW5kXG4gIDc1Olx0ICogdGhlIHZtY29yZSByZWdpb24gaXMgdXNhYmxlLlxuICA3NjpcdCAqXG4gIDc3Olx0ICogVGhpcyBtYWtlcyB1c2Ugb2YgdGhlIGZhY3QgdGhhdCBkdWUgdG8gYWxpZ25tZW50IC0yVUxMIGlzIG5vdFxuICA3ODpcdCAqIGEgdmFsaWQgcG9pbnRlciwgbXVjaCBpbiB0aGUgdmFpbiBvZiBJU19FUlIoKSwgZXhjZXB0XG4gIDc5Olx0ICogZGVhbGluZyBkaXJlY3RseSB3aXRoIGFuIHVuc2lnbmVkIGxvbmcgbG9uZyByYXRoZXIgdGhhbiBhIHBvaW50ZXIuXG4gIDgwOlx0ICovXG4gIDgxOlx0XG4gIDgyOlx0c3RhdGljIGlubGluZSBpbnQgaXNfdm1jb3JlX3VzYWJsZSh2b2lkKVxuICA4MzpcdHtcbiAgODQ6XHRcdHJldHVybiBlbGZjb3JlaGRyX2FkZHIgIT0gRUxGQ09SRV9BRERSX0VSUiBcdTAwMjZcdTAwMjZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxNDozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzQ1CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgVGhvdWdodHMgb24gYGlzX2tkdW1wX2tlcm5lbCgpYCBhbmQgU3l6a2FsbGVyKioKCkhvbGQgb24gYSBtaW51dGUhIEkgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgd2hhdCBgaXNfa2R1bXBfa2VybmVsKClgIGFjdHVhbGx5IGRvZXMuIEl0IGFwcGVhcnMgdG8gYmUgZGV0ZXJtaW5pbmcgaWYgKnRoaXMqIGtlcm5lbCBpcyBhIGtkdW1wIGNhcHR1cmUga2VybmVsLCBtZWFuaW5nIGl0JiMzOTtzIGJvb3RpbmcgYWZ0ZXIgYSBwcmV2aW91cyBrZXJuZWwgcGFuaWNrZWQuIEluIGEgc3RhbmRhcmQgcnVubmluZyBrZXJuZWwsIGluY2x1ZGluZyB0aGUgb25lcyB3ZSB1c2UgZm9yIHN5emthbGxlciBmdXp6aW5nLCB0aGlzIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gZmFsc2UuCgpXYWl0IGEgc2Vjb25kLi4uIGFtIEkgZXZlbiBjb25zaWRlcmluZyB0aGUgcG9zc2liaWxpdHkgb2Ygc3l6a2FsbGVyIGZ1enppbmcgKnRoZSBrZHVtcCBrZXJuZWwgaXRzZWxmKj8gVGhhdCBjYW4mIzM5O3QgYmUgcmlnaHQuIFN5emthbGxlciBpcyBkZXNpZ25lZCB0byBmdXp6IHRoZSAqbm9ybWFsKiBrZXJuZWwsIG5vdCB0aGUgbWluaW1hbCBlbnZpcm9ubWVudCB0aGF0JiMzOTtzIG9ubHkgcmVzcG9uc2libGUgZm9yIGNhcHR1cmluZyB0aGUgY3Jhc2ggZHVtcCBhbmQgdGhlbiByZWJvb3Rpbmcgb3IgaGFsdGluZy4KCk9rYXksIGxldCYjMzk7cyBzdGVwIGJhY2suIENvdWxkIHRoZXJlIGJlIGEgc2NlbmFyaW8gd2hlcmUgYGlzX2tkdW1wX2tlcm5lbCgpYCAqd291bGQqIGJlIHRydWUgZHVyaW5nIGZ1enppbmc/IEkgbmVlZCB0byBpbnZlc3RpZ2F0ZS4KCkxldCBtZSBzdGFydCB3aXRoIHRoaXMgJiMzNDtlbGZjb3JlaGRyX2FkZHIgIT0gRUxGQ09SRV9BRERSX01BWCYjMzQ7IGNoZWNrLiBXaGF0JiMzOTtzIHRoZSBjb250ZXh0IGZvciB0aGF0PyBXaGVyZSBpcyBgZWxmY29yZWhkcl9hZGRyYCBldmVuIHNldD8gSSBuZWVkIHRvIHVzZSBncmVwIHRvIGZpbmQgYWxsIHRoZSBwbGFjZXMgaXQmIzM5O3MgdXNlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTQ6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZWxmY29yZWhkcl9hZGRyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jPTIzMD1zdGF0aWMgdm9pZCBfX2luaXQgYXJjaF9yZXNlcnZlX3ZtY29yZSh2b2lkKVxuLS1cbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jLTI0MC1cdFx0Zm9yX2VhY2hfbWVtX3JhbmdlKGksIFx1MDAyNnN0YXJ0LCBcdTAwMjZlbmQpIHtcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jOjI0MTpcdFx0XHRpZiAoZWxmY29yZWhkcl9hZGRyIFx1MDAzZT0gc3RhcnQgXHUwMDI2XHUwMDI2IGVsZmNvcmVoZHJfYWRkciBcdTAwM2MgZW5kKSB7XG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvc2V0dXAuYy0yNDItXHRcdFx0XHQvKlxuLS1cbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jLTI0Ni1cdFx0XHRcdCAqL1xuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmM6MjQ3Olx0XHRcdFx0ZWxmY29yZWhkcl9zaXplID0gZW5kIC0gZWxmY29yZWhkcl9hZGRyO1xuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmMtMjQ4LVx0XHRcdFx0YnJlYWs7XG4tLVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmMtMjUyLVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmM6MjUzOlx0aWYgKG1lbWJsb2NrX2lzX3JlZ2lvbl9yZXNlcnZlZChlbGZjb3JlaGRyX2FkZHIsIGVsZmNvcmVoZHJfc2l6ZSkpIHtcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jLTI1NC1cdFx0cHJfd2FybihcJiMzNDtlbGZjb3JlaGRyIGlzIG92ZXJsYXBwZWRcXG5cJiMzNDspO1xuLS1cbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jLTI1Ny1cbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jOjI1ODpcdG1lbWJsb2NrX3Jlc2VydmUoZWxmY29yZWhkcl9hZGRyLCBlbGZjb3JlaGRyX3NpemUpO1xuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmMtMjU5LVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmMtMjYwLVx0cHJfaW5mbyhcJiMzNDtSZXNlcnZpbmcgJWxsdSBLaUIgb2YgbWVtb3J5IGF0IDB4JWxseCBmb3IgZWxmY29yZWhkclxcblwmIzM0OyxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jOjI2MTpcdFx0ZWxmY29yZWhkcl9zaXplIFx1MDAzZVx1MDAzZSAxMCwgZWxmY29yZWhkcl9hZGRyKTtcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jLTI2Mi0jZW5kaWZcbi0tXG5hcmNoL21pcHMva2VybmVsL3NldHVwLmM9NDIwPXN0YXRpYyB2b2lkIF9faW5pdCBtaXBzX3Jlc2VydmVfdm1jb3JlKHZvaWQpXG4tLVxuYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jLTQyNy1cdFx0Zm9yX2VhY2hfbWVtX3JhbmdlKGksIFx1MDAyNnN0YXJ0LCBcdTAwMjZlbmQpIHtcbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYzo0Mjg6XHRcdFx0aWYgKGVsZmNvcmVoZHJfYWRkciBcdTAwM2U9IHN0YXJ0IFx1MDAyNlx1MDAyNiBlbGZjb3JlaGRyX2FkZHIgXHUwMDNjIGVuZCkge1xuYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jLTQyOS1cdFx0XHRcdC8qXG4tLVxuYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jLTQzMy1cdFx0XHRcdCAqL1xuYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jOjQzNDpcdFx0XHRcdGVsZmNvcmVoZHJfc2l6ZSA9IGVuZCAtIGVsZmNvcmVoZHJfYWRkcjtcbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYy00MzUtXHRcdFx0XHRicmVhaztcbi0tXG5hcmNoL21pcHMva2VybmVsL3NldHVwLmMtNDQwLVx0cHJfaW5mbyhcJiMzNDtSZXNlcnZpbmcgJWxkS0Igb2YgbWVtb3J5IGF0ICVsZEtCIGZvciBrZHVtcFxcblwmIzM0OyxcbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYzo0NDE6XHRcdCh1bnNpZ25lZCBsb25nKWVsZmNvcmVoZHJfc2l6ZSBcdTAwM2VcdTAwM2UgMTAsICh1bnNpZ25lZCBsb25nKWVsZmNvcmVoZHJfYWRkciBcdTAwM2VcdTAwM2UgMTApO1xuYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jLTQ0Mi1cbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYzo0NDM6XHRtZW1ibG9ja19yZXNlcnZlKGVsZmNvcmVoZHJfYWRkciwgZWxmY29yZWhkcl9zaXplKTtcbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYy00NDQtI2VuZGlmXG4tLVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2ZhZHVtcC1pbnRlcm5hbC5oPTEwMT1zdHJ1Y3QgZndfZHVtcCB7XG4tLVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2ZhZHVtcC1pbnRlcm5hbC5oLTEyMS1cdHVuc2lnbmVkIGxvbmdcdGZhZHVtcGhkcl9hZGRyO1xuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2ZhZHVtcC1pbnRlcm5hbC5oOjEyMjpcdHU2NFx0XHRlbGZjb3JlaGRyX2FkZHI7XG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZmFkdW1wLWludGVybmFsLmgtMTIzLVx0dTY0XHRcdGVsZmNvcmVoZHJfc2l6ZTtcbi0tXG5hcmNoL3Bvd2VycGMva2VybmVsL2NyYXNoX2R1bXAuYz0xMDE9Ym9vbCBpc19rZHVtcF9rZXJuZWwodm9pZClcbmFyY2gvcG93ZXJwYy9rZXJuZWwvY3Jhc2hfZHVtcC5jLTEwMi17XG5hcmNoL3Bvd2VycGMva2VybmVsL2NyYXNoX2R1bXAuYzoxMDM6XHRyZXR1cm4gIWlzX2ZhZHVtcF9hY3RpdmUoKSBcdTAwMjZcdTAwMjYgZWxmY29yZWhkcl9hZGRyICE9IEVMRkNPUkVfQUREUl9NQVg7XG5hcmNoL3Bvd2VycGMva2VybmVsL2NyYXNoX2R1bXAuYy0xMDQtfVxuLS1cbmFyY2gvcG93ZXJwYy9rZXJuZWwvZmFkdW1wLmM9OTkxPXN0YXRpYyB2b2lkIF9faW5pdCBmYWR1bXBfcG9wdWxhdGVfZWxmY29yZWhkcihzdHJ1Y3QgZmFkdW1wX2NyYXNoX2luZm9faGVhZGVyICpmZGgpXG4tLVxuYXJjaC9wb3dlcnBjL2tlcm5lbC9mYWR1bXAuYy05OTgtXG5hcmNoL3Bvd2VycGMva2VybmVsL2ZhZHVtcC5jOjk5OTpcdGJ1ZnAgPSAoY2hhciAqKSBmd19kdW1wLmVsZmNvcmVoZHJfYWRkcjtcbmFyY2gvcG93ZXJwYy9rZXJuZWwvZmFkdW1wLmMtMTAwMC1cdGZhZHVtcF9pbml0X2VsZmNvcmVfaGVhZGVyKGJ1ZnApO1xuLS1cbmFyY2gvcG93ZXJwYy9rZXJuZWwvZmFkdW1wLmM9MTM0Nj1zdGF0aWMgdm9pZCBmYWR1bXBfZnJlZV9lbGZjb3JlaGRyX2J1Zih2b2lkKVxuYXJjaC9wb3dlcnBjL2tlcm5lbC9mYWR1bXAuYy0xMzQ3LXtcbmFyY2gvcG93ZXJwYy9rZXJuZWwvZmFkdW1wLmM6MTM0ODpcdGlmIChmd19kdW1wLmVsZmNvcmVoZHJfYWRkciA9PSAwIHx8IGZ3X2R1bXAuZWxmY29yZWhkcl9zaXplID09IDApXG5hcmNoL3Bvd2VycGMva2VybmVsL2ZhZHVtcC5jLTEzNDktXHRcdHJldHVybjtcbi0tXG5hcmNoL3Bvd2VycGMva2VybmVsL2ZhZHVtcC5jLTEzNTItXHQgKiBCZWZvcmUgZnJlZWluZyB0aGUgbWVtb3J5IG9mIGBlbGZjb3JlaGRyYCwgcmVzZXQgdGhlIGdsb2JhbFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9mYWR1bXAuYzoxMzUzOlx0ICogYGVsZmNvcmVoZHJfYWRkcmAgdG8gcHJldmVudCBtb2R1bGVzIGxpa2UgYHZtY29yZWAgZnJvbSBhY2Nlc3NpbmdcbmFyY2gvcG93ZXJwYy9rZXJuZWwvZmFkdW1wLmMtMTM1NC1cdCAqIGludmFsaWQgbWVtb3J5LlxuYXJjaC9wb3dlcnBjL2tlcm5lbC9mYWR1bXAuYy0xMzU1LVx0ICovXG5hcmNoL3Bvd2VycGMva2VybmVsL2ZhZHVtcC5jOjEzNTY6XHRlbGZjb3JlaGRyX2FkZHIgPSBFTEZDT1JFX0FERFJfRVJSO1xuYXJjaC9wb3dlcnBjL2tlcm5lbC9mYWR1bXAuYzoxMzU3Olx0ZmFkdW1wX2ZyZWVfYnVmZmVyKGZ3X2R1bXAuZWxmY29yZWhkcl9hZGRyLCBmd19kdW1wLmVsZmNvcmVoZHJfc2l6ZSk7XG5hcmNoL3Bvd2VycGMva2VybmVsL2ZhZHVtcC5jOjEzNTg6XHRmd19kdW1wLmVsZmNvcmVoZHJfYWRkciA9IDA7XG5hcmNoL3Bvd2VycGMva2VybmVsL2ZhZHVtcC5jLTEzNTktXHRmd19kdW1wLmVsZmNvcmVoZHJfc2l6ZSA9IDA7XG4tLVxuYXJjaC9wb3dlcnBjL2tlcm5lbC9mYWR1bXAuYz0xNjM0PXN0YXRpYyBpbnQgX19pbml0IGZhZHVtcF9zZXR1cF9lbGZjb3JlaGRyX2J1Zih2b2lkKVxuLS1cbmFyY2gvcG93ZXJwYy9rZXJuZWwvZmFkdW1wLmMtMTY0Ny1cbmFyY2gvcG93ZXJwYy9rZXJuZWwvZmFkdW1wLmM6MTY0ODpcdGZ3X2R1bXAuZWxmY29yZWhkcl9hZGRyID0gKHU2NClmYWR1bXBfYWxsb2NfYnVmZmVyKGVsZmNvcmVoZHJfc2l6ZSk7XG5hcmNoL3Bvd2VycGMva2VybmVsL2ZhZHVtcC5jOjE2NDk6XHRpZiAoIWZ3X2R1bXAuZWxmY29yZWhkcl9hZGRyKSB7XG5hcmNoL3Bvd2VycGMva2VybmVsL2ZhZHVtcC5jLTE2NTAtXHRcdHByX2VycihcJiMzNDtGYWlsZWQgdG8gYWxsb2NhdGUgJWx1IGJ5dGVzIGZvciBlbGZjb3JlaGRyXFxuXCYjMzQ7LFxuLS1cbmFyY2gvcG93ZXJwYy9rZXJuZWwvZmFkdW1wLmM9MTY5Mz1zdGF0aWMgdm9pZCBfX2luaXQgZmFkdW1wX3Byb2Nlc3Modm9pZClcbi0tXG5hcmNoL3Bvd2VycGMva2VybmVsL2ZhZHVtcC5jLTE3MTktXHQgKlxuYXJjaC9wb3dlcnBjL2tlcm5lbC9mYWR1bXAuYzoxNzIwOlx0ICogc2V0IGVsZmNvcmVoZHJfYWRkciBzbyB0aGF0IHZtY29yZSBtb2R1bGUgd2lsbCBleHBvcnQgdGhlXG5hcmNoL3Bvd2VycGMva2VybmVsL2ZhZHVtcC5jLTE3MjEtXHQgKiBlbGZjb3JlaGRyIHRocm91Z2ggJiMzOTsvcHJvYy92bWNvcmUmIzM5Oy5cbmFyY2gvcG93ZXJwYy9rZXJuZWwvZmFkdW1wLmMtMTcyMi1cdCAqL1xuYXJjaC9wb3dlcnBjL2tlcm5lbC9mYWR1bXAuYzoxNzIzOlx0ZWxmY29yZWhkcl9hZGRyID0gdmlydF90b19waHlzKCh2b2lkICopZndfZHVtcC5lbGZjb3JlaGRyX2FkZHIpO1xuYXJjaC9wb3dlcnBjL2tlcm5lbC9mYWR1bXAuYy0xNzI0LVx0cmV0dXJuO1xuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9vcGFsLWZhZHVtcC5jPTQxNz1vcGFsX2ZhZHVtcF9idWlsZF9jcHVfbm90ZXMoc3RydWN0IGZ3X2R1bXAgKmZhZHVtcF9jb25mLFxuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9vcGFsLWZhZHVtcC5jLTUxNS1cdHByX2RlYnVnKFwmIzM0O1VwZGF0aW5nIGVsZmNvcmUgaGVhZGVyICglbGx4KSB3aXRoIGNwdSBub3Rlc1xcblwmIzM0OyxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9vcGFsLWZhZHVtcC5jOjUxNjpcdFx0IGZhZHVtcF9jb25mLVx1MDAzZWVsZmNvcmVoZHJfYWRkcik7XG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvb3BhbC1mYWR1bXAuYzo1MTc6XHRmYWR1bXBfdXBkYXRlX2VsZmNvcmVfaGVhZGVyKChjaGFyICopZmFkdW1wX2NvbmYtXHUwMDNlZWxmY29yZWhkcl9hZGRyKTtcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9vcGFsLWZhZHVtcC5jLTUxOC1cdHJldHVybiAwO1xuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9ydGFzLWZhZHVtcC5jPTM3NT1zdGF0aWMgaW50IF9faW5pdCBydGFzX2ZhZHVtcF9idWlsZF9jcHVfbm90ZXMoc3RydWN0IGZ3X2R1bXAgKmZhZHVtcF9jb25mKVxuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9ydGFzLWZhZHVtcC5jLTQzOS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9ydGFzLWZhZHVtcC5jOjQ0MDpcdHByX2RlYnVnKFwmIzM0O1VwZGF0aW5nIGVsZmNvcmUgaGVhZGVyICglbGx4KSB3aXRoIGNwdSBub3Rlc1xcblwmIzM0OywgZmFkdW1wX2NvbmYtXHUwMDNlZWxmY29yZWhkcl9hZGRyKTtcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9ydGFzLWZhZHVtcC5jOjQ0MTpcdGZhZHVtcF91cGRhdGVfZWxmY29yZV9oZWFkZXIoKGNoYXIgKilmYWR1bXBfY29uZi1cdTAwM2VlbGZjb3JlaGRyX2FkZHIpO1xuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3J0YXMtZmFkdW1wLmMtNDQyLVx0cmV0dXJuIDA7XG4tLVxuYXJjaC9yaXNjdi9rZXJuZWwvc2V0dXAuYz0xMzU9c3RhdGljIHZvaWQgX19pbml0IGluaXRfcmVzb3VyY2VzKHZvaWQpXG4tLVxuYXJjaC9yaXNjdi9rZXJuZWwvc2V0dXAuYy0xNjEtXHRpZiAoZWxmY29yZWhkcl9zaXplIFx1MDAzZSAwKSB7XG5hcmNoL3Jpc2N2L2tlcm5lbC9zZXR1cC5jOjE2MjpcdFx0ZWxmY29yZWhkcl9yZXMuc3RhcnQgPSBlbGZjb3JlaGRyX2FkZHI7XG5hcmNoL3Jpc2N2L2tlcm5lbC9zZXR1cC5jOjE2MzpcdFx0ZWxmY29yZWhkcl9yZXMuZW5kID0gZWxmY29yZWhkcl9hZGRyICYjNDM7IGVsZmNvcmVoZHJfc2l6ZSAtIDE7XG5hcmNoL3Jpc2N2L2tlcm5lbC9zZXR1cC5jLTE2NC1cdFx0ZWxmY29yZWhkcl9yZXMuZmxhZ3MgPSBJT1JFU09VUkNFX1NZU1RFTV9SQU0gfCBJT1JFU09VUkNFX0JVU1k7XG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jPTg5Nz12b2lkIF9faW5pdCBzZXR1cF9hcmNoKGNoYXIgKipjbWRsaW5lX3ApXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jLTkzNC1cdC8qIERlYWN0aXZhdGUgZWxmY29yZWhkcj0ga2VybmVsIHBhcmFtZXRlciAqL1xuYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jOjkzNTpcdGVsZmNvcmVoZHJfYWRkciA9IEVMRkNPUkVfQUREUl9NQVg7XG5hcmNoL3MzOTAva2VybmVsL3NldHVwLmMtOTM2LSNlbmRpZlxuLS1cbmRyaXZlcnMvb2YvZmR0LmM9NDcyPXN0YXRpYyB2b2lkIF9faW5pdCBmZHRfcmVzZXJ2ZV9lbGZjb3JlaGRyKHZvaWQpXG4tLVxuZHJpdmVycy9vZi9mZHQuYy00NzYtXG5kcml2ZXJzL29mL2ZkdC5jOjQ3NzpcdGlmIChtZW1ibG9ja19pc19yZWdpb25fcmVzZXJ2ZWQoZWxmY29yZWhkcl9hZGRyLCBlbGZjb3JlaGRyX3NpemUpKSB7XG5kcml2ZXJzL29mL2ZkdC5jLTQ3OC1cdFx0cHJfd2FybihcJiMzNDtlbGZjb3JlaGRyIGlzIG92ZXJsYXBwZWRcXG5cJiMzNDspO1xuLS1cbmRyaXZlcnMvb2YvZmR0LmMtNDgxLVxuZHJpdmVycy9vZi9mZHQuYzo0ODI6XHRtZW1ibG9ja19yZXNlcnZlKGVsZmNvcmVoZHJfYWRkciwgZWxmY29yZWhkcl9zaXplKTtcbmRyaXZlcnMvb2YvZmR0LmMtNDgzLVxuZHJpdmVycy9vZi9mZHQuYy00ODQtXHRwcl9pbmZvKFwmIzM0O1Jlc2VydmluZyAlbGx1IEtpQiBvZiBtZW1vcnkgYXQgMHglbGx4IGZvciBlbGZjb3JlaGRyXFxuXCYjMzQ7LFxuZHJpdmVycy9vZi9mZHQuYzo0ODU6XHRcdGVsZmNvcmVoZHJfc2l6ZSBcdTAwM2VcdTAwM2UgMTAsIGVsZmNvcmVoZHJfYWRkcik7XG5kcml2ZXJzL29mL2ZkdC5jLTQ4Ni19XG4tLVxuZHJpdmVycy9vZi9mZHQuYz04NDE9c3RhdGljIHZvaWQgX19pbml0IGVhcmx5X2luaXRfZHRfY2hlY2tfZm9yX2VsZmNvcmVoZHIodW5zaWduZWQgbG9uZyBub2RlKVxuLS1cbmRyaXZlcnMvb2YvZmR0LmMtODQ4LVx0aWYgKCFvZl9mbGF0X2R0X2dldF9hZGRyX3NpemUobm9kZSwgXCYjMzQ7bGludXgsZWxmY29yZWhkclwmIzM0OyxcbmRyaXZlcnMvb2YvZmR0LmM6ODQ5Olx0XHRcdFx0ICAgICAgXHUwMDI2ZWxmY29yZWhkcl9hZGRyLCBcdTAwMjZlbGZjb3JlaGRyX3NpemUpKVxuZHJpdmVycy9vZi9mZHQuYy04NTAtXHRcdHJldHVybjtcbi0tXG5kcml2ZXJzL29mL2ZkdC5jLTg1Mi1cdHByX2RlYnVnKFwmIzM0O2VsZmNvcmVoZHJfc3RhcnQ9MHglbGx4IGVsZmNvcmVoZHJfc2l6ZT0weCVsbHhcXG5cJiMzNDssXG5kcml2ZXJzL29mL2ZkdC5jOjg1MzpcdFx0IGVsZmNvcmVoZHJfYWRkciwgZWxmY29yZWhkcl9zaXplKTtcbmRyaXZlcnMvb2YvZmR0LmMtODU0LX1cbi0tXG5mcy9wcm9jL3ZtY29yZS5jPTEyMTM9c3RhdGljIGludCBfX2luaXQgcGFyc2VfY3Jhc2hfZWxmNjRfaGVhZGVycyh2b2lkKVxuLS1cbmZzL3Byb2Mvdm1jb3JlLmMtMTIxOC1cbmZzL3Byb2Mvdm1jb3JlLmM6MTIxOTpcdGFkZHIgPSBlbGZjb3JlaGRyX2FkZHI7XG5mcy9wcm9jL3ZtY29yZS5jLTEyMjAtXG4tLVxuZnMvcHJvYy92bWNvcmUuYy0xMjQ3LVx0XHRyZXR1cm4gLUVOT01FTTtcbmZzL3Byb2Mvdm1jb3JlLmM6MTI0ODpcdGFkZHIgPSBlbGZjb3JlaGRyX2FkZHI7XG5mcy9wcm9jL3ZtY29yZS5jLTEyNDktXHRyYyA9IGVsZmNvcmVoZHJfcmVhZChlbGZjb3JlYnVmLCBlbGZjb3JlYnVmX3N6X29yaWcsIFx1MDAyNmFkZHIpO1xuLS1cbmZzL3Byb2Mvdm1jb3JlLmM9MTI2OT1zdGF0aWMgaW50IF9faW5pdCBwYXJzZV9jcmFzaF9lbGYzMl9oZWFkZXJzKHZvaWQpXG4tLVxuZnMvcHJvYy92bWNvcmUuYy0xMjc0LVxuZnMvcHJvYy92bWNvcmUuYzoxMjc1Olx0YWRkciA9IGVsZmNvcmVoZHJfYWRkcjtcbmZzL3Byb2Mvdm1jb3JlLmMtMTI3Ni1cbi0tXG5mcy9wcm9jL3ZtY29yZS5jLTEzMDItXHRcdHJldHVybiAtRU5PTUVNO1xuZnMvcHJvYy92bWNvcmUuYzoxMzAzOlx0YWRkciA9IGVsZmNvcmVoZHJfYWRkcjtcbmZzL3Byb2Mvdm1jb3JlLmMtMTMwNC1cdHJjID0gZWxmY29yZWhkcl9yZWFkKGVsZmNvcmVidWYsIGVsZmNvcmVidWZfc3pfb3JpZywgXHUwMDI2YWRkcik7XG4tLVxuZnMvcHJvYy92bWNvcmUuYz0xMzI0PXN0YXRpYyBpbnQgX19pbml0IHBhcnNlX2NyYXNoX2VsZl9oZWFkZXJzKHZvaWQpXG4tLVxuZnMvcHJvYy92bWNvcmUuYy0xMzI5LVxuZnMvcHJvYy92bWNvcmUuYzoxMzMwOlx0YWRkciA9IGVsZmNvcmVoZHJfYWRkcjtcbmZzL3Byb2Mvdm1jb3JlLmMtMTMzMS1cdHJjID0gZWxmY29yZWhkcl9yZWFkKGVfaWRlbnQsIEVJX05JREVOVCwgXHUwMDI2YWRkcik7XG4tLVxuZnMvcHJvYy92bWNvcmUuYz0xNzEzPXN0YXRpYyBpbnQgX19pbml0IHZtY29yZV9pbml0KHZvaWQpXG4tLVxuZnMvcHJvYy92bWNvcmUuYy0xNzE3LVx0LyogQWxsb3cgYXJjaGl0ZWN0dXJlcyB0byBhbGxvY2F0ZSBFTEYgaGVhZGVyIGluIDJuZCBrZXJuZWwgKi9cbmZzL3Byb2Mvdm1jb3JlLmM6MTcxODpcdHJjID0gZWxmY29yZWhkcl9hbGxvYyhcdTAwMjZlbGZjb3JlaGRyX2FkZHIsIFx1MDAyNmVsZmNvcmVoZHJfc2l6ZSk7XG5mcy9wcm9jL3ZtY29yZS5jLTE3MTktXHRpZiAocmMpXG4tLVxuZnMvcHJvYy92bWNvcmUuYy0xNzI4LVx0aWYgKHJjKSB7XG5mcy9wcm9jL3ZtY29yZS5jOjE3Mjk6XHRcdGVsZmNvcmVoZHJfZnJlZShlbGZjb3JlaGRyX2FkZHIpO1xuZnMvcHJvYy92bWNvcmUuYy0xNzMwLVx0XHRwcl93YXJuKFwmIzM0O25vdCBpbml0aWFsaXplZFxcblwmIzM0Oyk7XG4tLVxuZnMvcHJvYy92bWNvcmUuYy0xNzMyLVx0fVxuZnMvcHJvYy92bWNvcmUuYzoxNzMzOlx0ZWxmY29yZWhkcl9mcmVlKGVsZmNvcmVoZHJfYWRkcik7XG5mcy9wcm9jL3ZtY29yZS5jOjE3MzQ6XHRlbGZjb3JlaGRyX2FkZHIgPSBFTEZDT1JFX0FERFJfRVJSO1xuZnMvcHJvYy92bWNvcmUuYy0xNzM1LVxuLS1cbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oLTE0LVxuaW5jbHVkZS9saW51eC9jcmFzaF9kdW1wLmg6MTU6ZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBlbGZjb3JlaGRyX2FkZHI7XG5pbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaC0xNi1leHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGVsZmNvcmVoZHJfc2l6ZTtcbi0tXG5pbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaD02OD1zdGF0aWMgaW5saW5lIGJvb2wgaXNfa2R1bXBfa2VybmVsKHZvaWQpXG5pbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaC02OS17XG5pbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaDo3MDpcdHJldHVybiBlbGZjb3JlaGRyX2FkZHIgIT0gRUxGQ09SRV9BRERSX01BWDtcbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oLTcxLX1cbi0tXG5pbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaD04Mj1zdGF0aWMgaW5saW5lIGludCBpc192bWNvcmVfdXNhYmxlKHZvaWQpXG5pbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaC04My17XG5pbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaDo4NDpcdHJldHVybiBlbGZjb3JlaGRyX2FkZHIgIT0gRUxGQ09SRV9BRERSX0VSUiBcdTAwMjZcdTAwMjZcbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oOjg1Olx0XHRlbGZjb3JlaGRyX2FkZHIgIT0gRUxGQ09SRV9BRERSX01BWCA/IDEgOiAwO1xuaW5jbHVkZS9saW51eC9jcmFzaF9kdW1wLmgtODYtfVxuLS1cbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oPTkyPXN0YXRpYyBpbmxpbmUgdm9pZCB2bWNvcmVfdW51c2FibGUodm9pZClcbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oLTkzLXtcbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oOjk0Olx0ZWxmY29yZWhkcl9hZGRyID0gRUxGQ09SRV9BRERSX0VSUjtcbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oLTk1LX1cbi0tXG5rZXJuZWwvZWxmY29yZWhkci5jLTEwLSAqXG5rZXJuZWwvZWxmY29yZWhkci5jOjExOiAqIE5vdGU6IGVsZmNvcmVoZHJfYWRkciBpcyBub3QganVzdCBsaW1pdGVkIHRvIHZtY29yZS4gSXQgaXMgYWxzbyB1c2VkIGJ5XG5rZXJuZWwvZWxmY29yZWhkci5jLTEyLSAqIGlzX2tkdW1wX2tlcm5lbCgpIHRvIGRldGVybWluZSBpZiB3ZSBhcmUgYm9vdGluZyBhZnRlciBhIHBhbmljLiBIZW5jZSBwdXRcbi0tXG5rZXJuZWwvZWxmY29yZWhkci5jLTE0LSAqL1xua2VybmVsL2VsZmNvcmVoZHIuYzoxNTp1bnNpZ25lZCBsb25nIGxvbmcgZWxmY29yZWhkcl9hZGRyID0gRUxGQ09SRV9BRERSX01BWDtcbmtlcm5lbC9lbGZjb3JlaGRyLmM6MTY6RVhQT1JUX1NZTUJPTF9HUEwoZWxmY29yZWhkcl9hZGRyKTtcbmtlcm5lbC9lbGZjb3JlaGRyLmMtMTctXG4tLVxua2VybmVsL2VsZmNvcmVoZHIuYz0yOT1zdGF0aWMgaW50IF9faW5pdCBzZXR1cF9lbGZjb3JlaGRyKGNoYXIgKmFyZylcbi0tXG5rZXJuZWwvZWxmY29yZWhkci5jLTMzLVx0XHRyZXR1cm4gLUVJTlZBTDtcbmtlcm5lbC9lbGZjb3JlaGRyLmM6MzQ6XHRlbGZjb3JlaGRyX2FkZHIgPSBtZW1wYXJzZShhcmcsIFx1MDAyNmVuZCk7XG5rZXJuZWwvZWxmY29yZWhkci5jLTM1LVx0aWYgKCplbmQgPT0gJiMzOTtAJiMzOTspIHtcbmtlcm5lbC9lbGZjb3JlaGRyLmM6MzY6XHRcdGVsZmNvcmVoZHJfc2l6ZSA9IGVsZmNvcmVoZHJfYWRkcjtcbmtlcm5lbC9lbGZjb3JlaGRyLmM6Mzc6XHRcdGVsZmNvcmVoZHJfYWRkciA9IG1lbXBhcnNlKGVuZCAmIzQzOyAxLCBcdTAwMjZlbmQpO1xua2VybmVsL2VsZmNvcmVoZHIuYy0zOC1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTQ6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3MTAKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA0MTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaDogYG1tL3BhZ2VfYWxsb2MuY2AqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjaGVjayB0aGUgY29tbWl0IGxvZy4gSSYjMzk7ZCB0eXBpY2FsbHkganVzdCBydW4gYGdpdCBsb2cgLTFgIGJ1dCBJIGRvbiYjMzk7dCBoYXZlIHRoYXQgZGlyZWN0bHkgYXZhaWxhYmxlLCBzbyBsZXQmIzM5O3MgZmlndXJlIG91dCBhbm90aGVyIHdheSB0byBkbyBpdC4gSWYgSSBjYW4mIzM5O3QgZ2V0IHRoYXQgaW5mbyBxdWlja2x5LCBJIGNhbiBhbHdheXMgc2VhcmNoIGZvciB0aGUgcGF0Y2ggb3IgY29tbWl0IGluZm8gdG8gZmluZCBjb250ZXh0LiBPciwgSSBjYW4ganVzdCBpbnNwZWN0IGBtbS9wYWdlX2FsbG9jLmNgIGl0c2VsZi4KCkFscmlnaHQsIGxldCYjMzk7cyB1bmRlcnN0YW5kIHdoYXQgdGhlIHBhdGNoIGFjdHVhbGx5ICpkb2VzKi4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBpbiBgbW0vcGFnZV9hbGxvYy5jYC4gQWgsIGdvdCBpdC4gSXQgYWRkcyBgI2luY2x1ZGUgJmx0O2xpbnV4L2NyYXNoX2R1bXAuaCZndDtgIGFuZCB0aGVuIGluY29ycG9yYXRlcyBhIGNoZWNrIHdpdGhpbiB0aGUgYGJvb3N0X3dhdGVybWFya2AgZnVuY3Rpb24uIFRoaXMgY2hlY2ssIGBpc19rZHVtcF9rZXJuZWwoKWAsIHByZXZlbnRzIHdhdGVybWFyayBib29zdGluZyBkdXJpbmcgYSBrZHVtcCBjYXB0dXJlIGtlcm5lbCB0byBwcmV2ZW50IHRoZSBib29zdCBmcm9tIGNvbmZsaWN0aW5nIHdpdGggdGhlIGxpbWl0ZWQgbWVtb3J5IGF2YWlsYWJsZS4gSSBzZWUgdGhhdCB0aGlzIGFkZGl0aW9uIGFkZHJlc3NlcyBhIHNwZWNpZmljIHNjZW5hcmlvIHdoZXJlIHRoZSBrZXJuZWwgZXhpdHMgYmVmb3JlIHRoZSBib29zdCBoYXMgYSBjaGFuY2UgdG8gYmVuZWZpdCwgYW5kIHRoZSBpbmNyZWFzZWQgd2F0ZXJtYXJrIGNvdWxkIGhpbmRlciB0aGUgbWVtb3J5IHJlcXVpcmVkIGZvciB0aGUgZHVtcC4KCk5vdywgSSYjMzk7ZCBsaWtlIHRvIGNoZWNrIHdoZXJlIGBib29zdF93YXRlcm1hcmtgIGlzIGNhbGxlZCB0byB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTQ6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Ym9vc3Rfd2F0ZXJtYXJrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3BhZ2VfYWxsb2MuYz0yMTY5PWJvb2wgcGFnZWJsb2NrX3VuaXNvbGF0ZV9hbmRfbW92ZV9mcmVlX3BhZ2VzKHN0cnVjdCB6b25lICp6b25lLCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbi0tXG5tbS9wYWdlX2FsbG9jLmMtMjE3NS1cbm1tL3BhZ2VfYWxsb2MuYzoyMTc2OnN0YXRpYyBpbmxpbmUgYm9vbCBib29zdF93YXRlcm1hcmsoc3RydWN0IHpvbmUgKnpvbmUpXG5tbS9wYWdlX2FsbG9jLmMtMjE3Ny17XG4tLVxubW0vcGFnZV9hbGxvYy5jPTIzMDc9dHJ5X3RvX2NsYWltX2Jsb2NrKHN0cnVjdCB6b25lICp6b25lLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5tbS9wYWdlX2FsbG9jLmMtMjMyOS1cdCAqL1xubW0vcGFnZV9hbGxvYy5jOjIzMzA6XHRpZiAoYm9vc3Rfd2F0ZXJtYXJrKHpvbmUpIFx1MDAyNlx1MDAyNiAoYWxsb2NfZmxhZ3MgXHUwMDI2IEFMTE9DX0tTV0FQRCkpXG5tbS9wYWdlX2FsbG9jLmMtMjMzMS1cdFx0c2V0X2JpdChaT05FX0JPT1NURURfV0FURVJNQVJLLCBcdTAwMjZ6b25lLVx1MDAzZWZsYWdzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTQ6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2NDcKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyB0aGUgQWxsb2NhdGlvbiBTdHJhdGVneSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYWxsb2NhdGlvbiBiZWhhdmlvciBiZXR0ZXIsIHNwZWNpZmljYWxseSB3aGVyZSB0aGlzIGB0cnlfdG9fY2xhaW1fYmxvY2tgIGZ1bmN0aW9uIGlzIGJlaW5nIGludm9rZWQuIFRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIHJvbGUgaW4gbWVtb3J5IG1hbmFnZW1lbnQsIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbnRvIGBtbS9wYWdlX2FsbG9jLmNgIGFuZCB6ZXJvIGluIG9uIHRoYXQgbGluZSBudW1iZXIgYXJvdW5kIDIzMDcuIFRoYXQgc2hvdWxkIGJlIHRoZSBwZXJmZWN0IHNwb3QgdG8gc3RhcnQgdHJhY2luZyB0aGUgY2FsbCBncmFwaCBhbmQgc2VlIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgYWxsb2NhdGlvbiBsb2dpYy4gSG9wZWZ1bGx5LCB0aGF0IHdpbGwgaW1tZWRpYXRlbHkgcmV2ZWFsIGl0cyBrZXkgcmVzcG9uc2liaWxpdGllcyBpbiB0aGUgY3VycmVudCBjb250ZXh0LiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgaXRzIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIGNvcmUgYWxsb2NhdG9ycy4gTGV0JiMzOTtzIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTQ6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9wYWdlX2FsbG9jLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMzA1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIzMDU6XHQgKi9cbjIzMDY6XHRzdGF0aWMgc3RydWN0IHBhZ2UgKlxuMjMwNzpcdHRyeV90b19jbGFpbV9ibG9jayhzdHJ1Y3Qgem9uZSAqem9uZSwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4yMzA4Olx0XHRcdCAgIGludCBjdXJyZW50X29yZGVyLCBpbnQgb3JkZXIsIGludCBzdGFydF90eXBlLFxuMjMwOTpcdFx0XHQgICBpbnQgYmxvY2tfdHlwZSwgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKVxuMjMxMDpcdHtcbjIzMTE6XHRcdGludCBmcmVlX3BhZ2VzLCBtb3ZhYmxlX3BhZ2VzLCBhbGlrZV9wYWdlcztcbjIzMTI6XHRcdHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuO1xuMjMxMzpcdFxuMjMxNDpcdFx0LyogVGFrZSBvd25lcnNoaXAgZm9yIG9yZGVycyBcdTAwM2U9IHBhZ2VibG9ja19vcmRlciAqL1xuMjMxNTpcdFx0aWYgKGN1cnJlbnRfb3JkZXIgXHUwMDNlPSBwYWdlYmxvY2tfb3JkZXIpIHtcbjIzMTY6XHRcdFx0dW5zaWduZWQgaW50IG5yX2FkZGVkO1xuMjMxNzpcdFxuMjMxODpcdFx0XHRkZWxfcGFnZV9mcm9tX2ZyZWVfbGlzdChwYWdlLCB6b25lLCBjdXJyZW50X29yZGVyLCBibG9ja190eXBlKTtcbjIzMTk6XHRcdFx0Y2hhbmdlX3BhZ2VibG9ja19yYW5nZShwYWdlLCBjdXJyZW50X29yZGVyLCBzdGFydF90eXBlKTtcbjIzMjA6XHRcdFx0bnJfYWRkZWQgPSBleHBhbmQoem9uZSwgcGFnZSwgb3JkZXIsIGN1cnJlbnRfb3JkZXIsIHN0YXJ0X3R5cGUpO1xuMjMyMTpcdFx0XHRhY2NvdW50X2ZyZWVwYWdlcyh6b25lLCBucl9hZGRlZCwgc3RhcnRfdHlwZSk7XG4yMzIyOlx0XHRcdHJldHVybiBwYWdlO1xuMjMyMzpcdFx0fVxuMjMyNDpcdFxuMjMyNTpcdFx0LypcbjIzMjY6XHRcdCAqIEJvb3N0IHdhdGVybWFya3MgdG8gaW5jcmVhc2UgcmVjbGFpbSBwcmVzc3VyZSB0byByZWR1Y2UgdGhlXG4yMzI3Olx0XHQgKiBsaWtlbGlob29kIG9mIGZ1dHVyZSBmYWxsYmFja3MuIFdha2Uga3N3YXBkIG5vdyBhcyB0aGUgbm9kZVxuMjMyODpcdFx0ICogbWF5IGJlIGJhbGFuY2VkIG92ZXJhbGwgYW5kIGtzd2FwZCB3aWxsIG5vdCB3YWtlIG5hdHVyYWxseS5cbjIzMjk6XHRcdCAqL1xuMjMzMDpcdFx0aWYgKGJvb3N0X3dhdGVybWFyayh6b25lKSBcdTAwMjZcdTAwMjYgKGFsbG9jX2ZsYWdzIFx1MDAyNiBBTExPQ19LU1dBUEQpKVxuMjMzMTpcdFx0XHRzZXRfYml0KFpPTkVfQk9PU1RFRF9XQVRFUk1BUkssIFx1MDAyNnpvbmUtXHUwMDNlZmxhZ3MpO1xuMjMzMjpcdFxuMjMzMzpcdFx0LyogbW92aW5nIHdob2xlIGJsb2NrIGNhbiBmYWlsIGR1ZSB0byB6b25lIGJvdW5kYXJ5IGNvbmRpdGlvbnMgKi9cbjIzMzQ6XHRcdGlmICghcHJlcF9tb3ZlX2ZyZWVwYWdlc19ibG9jayh6b25lLCBwYWdlLCBcdTAwMjZzdGFydF9wZm4sIFx1MDAyNmZyZWVfcGFnZXMsXG4yMzM1Olx0XHRcdFx0XHQgICAgICAgXHUwMDI2bW92YWJsZV9wYWdlcykpXG4yMzM2Olx0XHRcdHJldHVybiBOVUxMO1xuMjMzNzpcdFxuMjMzODpcdFx0LypcbjIzMzk6XHRcdCAqIERldGVybWluZSBob3cgbWFueSBwYWdlcyBhcmUgY29tcGF0aWJsZSB3aXRoIG91ciBhbGxvY2F0aW9uLlxuMjM0MDpcdFx0ICogRm9yIG1vdmFibGUgYWxsb2NhdGlvbiwgaXQmIzM5O3MgdGhlIG51bWJlciBvZiBtb3ZhYmxlIHBhZ2VzIHdoaWNoXG4yMzQxOlx0XHQgKiB3ZSBqdXN0IG9idGFpbmVkLiBGb3Igb3RoZXIgdHlwZXMgaXQmIzM5O3MgYSBiaXQgbW9yZSB0cmlja3kuXG4yMzQyOlx0XHQgKi9cbjIzNDM6XHRcdGlmIChzdGFydF90eXBlID09IE1JR1JBVEVfTU9WQUJMRSkge1xuMjM0NDpcdFx0XHRhbGlrZV9wYWdlcyA9IG1vdmFibGVfcGFnZXM7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE0OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNTM2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjI1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIERlY2lzaW9uIGZvciBib29zdF93YXRlcm1hcmsoKSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIG1ldGhvZGljYWxseS4gTXkgb2JqZWN0aXZlIGlzIHRvIGRldGVybWluZSBpZiBmdXp6aW5nIHRoZSBwYXRjaCBtb2RpZnlpbmcgYGJvb3N0X3dhdGVybWFya2AgaXMgd2FycmFudGVkLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgYm9vc3Rfd2F0ZXJtYXJrYCAqaXMqIOKAkyBpdCYjMzk7cyBwYXJ0IG9mIHRoZSBtZW1vcnkgYWxsb2NhdGlvbi9wYWdlIGFsbG9jYXRvciwgY2FsbGVkIGR1cmluZyBwYWdlYmxvY2sgZmFsbGJhY2suIFRoZSBwYXRjaCBpdHNlbGYgc2VlbXMgdG8gYmUgYWRkaW5nIGEgY2hlY2s6IGBpZiAoaXNfa2R1bXBfa2VybmVsKCkpIHJldHVybiBmYWxzZTtgLiBOb3csIEkmIzM5O20gZ29pbmcgdG8gY2FyZWZ1bGx5IGFwcGx5IHRoZSBmdXp6aW5nIGd1aWRlbGluZXMuCgpGaXJzdCwgdGhlIGtleSBxdWVzdGlvbjogaXMgdGhlIG1vZGlmaWVkIGNvZGUgKnJlYWNoYWJsZSogZHVyaW5nIG5vcm1hbCBrZXJuZWwgZXhlY3V0aW9uPyBUaGUgY29kZSAqaXMqIHJlYWNoYWJsZTsgdGhlIGNoZWNrIGBpc19rZHVtcF9rZXJuZWwoKWAgKmlzKiBleGVjdXRlZCBldmVyeSB0aW1lIGBib29zdF93YXRlcm1hcmtgIGlzIGNhbGxlZCwgYW5kIGBib29zdF93YXRlcm1hcmtgICppcyogY2FsbGVkIG9uIGV2ZXJ5IG1lbW9yeSBhbGxvY2F0aW9uIGZhbGxiYWNrLiBUaGVyZWZvcmUsIGV2ZW4gaWYgdGhlIGNvbmRpdGlvbiBpcyBub3Qgbm9ybWFsbHkgdHJpZ2dlcmVkLCBpdCBpcyBwYXJ0IG9mIHRoZSBjb250cm9sIGZsb3cuICBUaGlzIGltbWVkaWF0ZWx5IHN1Z2dlc3RzIEkgbmVlZCB0byBjb25zaWRlciBpdCBmb3IgZnV6emluZy4KCk5leHQsIEkgaGF2ZSB0byBjYXJlZnVsbHkgY29uc2lkZXIgdGhlIG5lZ2F0aXZlIGNyaXRlcmlhIGZvciAqbm90KiBmdXp6aW5nLiBJcyB0aGUgY2hhbmdlIG5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlPyBObywgaXQmIzM5O3MgY29yZSBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQgY29kZS4gSXMgaXQgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlPyBObywgaXQmIzM5O3MgcGFydCBvZiB0aGUgbWVtb3J5IGFsbG9jYXRpb24gcGF0aC4gSXMgaXQgcmVsYXRlZCB0byB1bnJlYWNoYWJsZSBoYXJkd2FyZSBvciBzcGVjaWZpYyBhcmNoaXRlY3R1cmVzPyBObywgaXQmIzM5O3Mgbm90LiBJcyBpdCBhbiB1bnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aCBsaWtlIGEgdGVhcmRvd24gY2FsbGJhY2s/IE5vLCBpdCYjMzk7cyBub3QuIFNvLCB0aGUgbmVnYXRpdmUgY3JpdGVyaWEgKmRvbiYjMzk7dCogYXBwbHkuCgpOb3csIG9uIHRvIHRoZSBwb3NpdGl2ZSBjcml0ZXJpYS4gVGhpcyBmYWxscyBzcXVhcmVseSBpbnRvICYjMzQ7Q29yZSBTdWJzeXN0ZW1zOiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSYjMzQ7IGFuZCBydW50aW1lIGRlZmVuc2l2ZSBjaGVja3Mgc2luY2Ugd2UgaGF2ZSBhbiBgaWZgIHN0YXRlbWVudC4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyBmdXp6aW5nIGlzIHdhcnJhbnRlZC4KCk5leHQsIEkgbmVlZCB0byBjb25zaWRlciBGb2N1c1N5bWJvbHMuIEkgbXVzdCBhdm9pZCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBsaWtlIGdlbmVyaWMgYWxsb2NhdG9ycy4gYGJvb3N0X3dhdGVybWFya2AgKml0c2VsZiogY291bGQgYmUgdWJpcXVpdG91cywgYnV0IGl0JiMzOTtzIGNhbGxlZCB0aHJvdWdoIGB0cnlfdG9fY2xhaW1fYmxvY2tgLCB3aGljaCBhcHBlYXJzIG1vcmUgc3BlY2lmaWMuIEkgd2lsbCBuZWVkIHRvIHZlcmlmeSBpZiBgYm9vc3Rfd2F0ZXJtYXJrYCBpcyBhIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb24uIEl0JiMzOTtzIGEgc3RhdGljIGlubGluZSwgc28gSSBuZWVkIHRvIHRhcmdldCBpdHMgKmNhbGxlciosIGB0cnlfdG9fY2xhaW1fYmxvY2tgIGluc3RlYWQuCgpOb3csIHRoZSBjcnVjaWFsIHBvaW50OiBjYW4gYSBmdXp6ZXIgbGlrZSBzeXprYWxsZXIgcmVhY2ggdGhlIGBpc19rZHVtcF9rZXJuZWwoKWAgY2hlY2s/IEEgbm9ybWFsIHN5emthbGxlciBlbnZpcm9ubWVudCBkb2VzICpub3QqIHJ1biBpbnNpZGUgYSBrZHVtcCBrZXJuZWwsIHNvIHRoaXMgZnVuY3Rpb24gd291bGQgbm9ybWFsbHkgcmV0dXJuIGZhbHNlLiBCdXQgY2FuIGl0IGJlICptYWRlKiB0byByZXR1cm4gdHJ1ZSB0aHJvdWdoIGV4dGVybmFsIGNvbmZpZ3VyYXRpb24/IENhbiBgZWxmY29yZWhkcmAgYmUgbWFuaXB1bGF0ZWQ/IEV4YW1pbmF0aW9uIG9mIHRoZSBrZXJuZWwgY29kZSByZXZlYWxzIHRoYXQgdGhpcyBjaGVjayBpcyBtYWRlIGF0IGJvb3QgdGltZSBhbmQgb25seSBhIGtleGVjLWJvb3RlZCBrZHVtcCBrZXJuZWwgd291bGQgc2V0IHRoaXMuIFRoZXJlZm9yZSwgaXQgaXMgaW1wb3NzaWJsZSBmb3Igc3l6a2FsbGVyIHRvIHJlYWNoIHRoaXMgc3RhdGUuCgpUaGVyZWZvcmUsIGJlY2F1c2UgYGlzX2tkdW1wX2tlcm5lbCgpYCBpcyBwYXJ0IG9mIHRoZSBleGVjdXRlZCBjb250cm9sIGZsb3cgb2YgbWVtb3J5IGFsbG9jYXRpb24sIGFuZCB0aGUgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgbWVtb3J5IGFsbG9jYXRpb24gb3BlcmF0aW9ucywgKipJIG11c3QgZnV6eiB0aGlzIGNoYW5nZSwgYWRkaW5nIGB0cnlfdG9fY2xhaW1fYmxvY2tgIHRvIHRoZSBmb2N1cyBzeW1ib2xzIHRvIHByZXZlbnQgZGlsdXRpb24gb2YgZnV6emluZyBlZmZvcnQqKi4gVGhpcyBwYXRoICppcyogcmVhY2hhYmxlLCBhbmQgdGhvdWdoIHRoZSBgaXNfa2R1bXBfa2VybmVsKClgIGNoZWNrIGl0c2VsZiBpcyAqdW5saWtlbHkqIHRvIGJlIHRyaWdnZXJlZCBieSBzdGFuZGFyZCBzeXprYWxsZXIsIGl0JiMzOTtzIHBhcnQgb2YgdGhlIHByb2dyYW0mIzM5O3MgY29udHJvbCBmbG93IGFuZCBzaG91bGQgYmUgZnV6emVkIGZvciBsYXRlbnQgYnVncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTQ6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHJ5X3RvX2NsYWltX2Jsb2NrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vcGFnZV9hbGxvYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3BhZ2VfYWxsb2MuYz0yMzA2PXN0YXRpYyBzdHJ1Y3QgcGFnZSAqXG5tbS9wYWdlX2FsbG9jLmM6MjMwNzp0cnlfdG9fY2xhaW1fYmxvY2soc3RydWN0IHpvbmUgKnpvbmUsIHN0cnVjdCBwYWdlICpwYWdlLFxubW0vcGFnZV9hbGxvYy5jLTIzMDgtXHRcdCAgIGludCBjdXJyZW50X29yZGVyLCBpbnQgb3JkZXIsIGludCBzdGFydF90eXBlLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYz0yMzgyPV9fcm1xdWV1ZV9jbGFpbShzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IG9yZGVyLCBpbnQgc3RhcnRfbWlncmF0ZXR5cGUsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTI0MTgtXHRcdHBhZ2UgPSBnZXRfcGFnZV9mcm9tX2ZyZWVfYXJlYShhcmVhLCBmYWxsYmFja19tdCk7XG5tbS9wYWdlX2FsbG9jLmM6MjQxOTpcdFx0cGFnZSA9IHRyeV90b19jbGFpbV9ibG9jayh6b25lLCBwYWdlLCBjdXJyZW50X29yZGVyLCBvcmRlcixcbm1tL3BhZ2VfYWxsb2MuYy0yNDIwLVx0XHRcdFx0XHQgIHN0YXJ0X21pZ3JhdGV0eXBlLCBmYWxsYmFja19tdCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTQ6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU3NTkKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAyODY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIEtlcm5lbCBQYXRjaCBmb3IgRnV6emluZyBFbGlnaWJpbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhlIGNoYW5nZXMgYXJlIGxvY2F0ZWQgYW5kIGhvdyB0aGV5JiMzOTtyZSB1c2VkLiBJIHNlZSB0aGF0IHRoZSBjb2RlIG1vZGlmaWNhdGlvbiBpcyBpbiBgYm9vc3Rfd2F0ZXJtYXJrKClgLCB3aXRoaW4gdGhlIHBhZ2UgYWxsb2NhdG9yLCB3aGljaCBtZWFucyBpdCYjMzk7cyBwYXJ0IG9mIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgKGBtbS9wYWdlX2FsbG9jLmNgKS4gVGhlIGNoYW5nZSBpdHNlbGYgaXMgYSBjaGVjayB1c2luZyBgaXNfa2R1bXBfa2VybmVsKClgIHRvIGVhcmx5IGV4aXQgd2l0aGluIGEga2R1bXAgY2FwdHVyZSBrZXJuZWwuIFRoZSBrZXkgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIG1lcml0cyBmdXp6aW5nIGVmZm9ydCB1bmRlciB0aGUgZ2l2ZW4gZ3VpZGVsaW5lcy4KCkZpcnN0IGluc3RpbmN0IGlzIHRvIHRyYWNlIHRoZSBmdW5jdGlvbiBjYWxscy4gYGJvb3N0X3dhdGVybWFya2AgaXMgc3RhdGljIGlubGluZSwgc28gaW5saW5lZCB3aXRoaW4gYHRyeV90b19jbGFpbV9ibG9ja2AsIHdoaWNoIGlzIGFsc28gc3RhdGljLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHBhcnQgb2YgdGhlIHBhZ2UgYWxsb2NhdGlvbiBwYXRoLCB3aGljaCBpbnZvbHZlcyBgX19ybXF1ZXVlX2NsYWltYCBhbmQgZXZlbnR1YWxseSBgZ2V0X3BhZ2VfZnJvbV9mcmVlbGlzdGAgYW5kIGl0cyByZWxhdGl2ZXMuIFRoYXQgbWVhbnMgdGhpcyBjb2RlIGlzIGV4dHJlbWVseSB1YmlxdWl0b3VzLCBjYWxsZWQgZnJvbSBuZWFybHkgZXZlcnkgcGFydCBvZiB0aGUga2VybmVsLiBUaGUgZG9jdW1lbnRhdGlvbiBleHBsaWNpdGx5IHdhcm5zIGFnYWluc3QgZm9jdXNpbmcgZnV6emluZyBvbiAmIzM0O3ViaXF1aXRvdXMgbGlmZWN5Y2xlIGhvdC1wYXRocyYjMzQ7IGxpa2UgZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycy4gTXkgaW5pdGlhbCByZWFjdGlvbiBpcyB0aGF0IHRoaXMgZGlzcXVhbGlmaWVzIHRoZSBwYXRjaCBmb3IgZm9jdXMuIEhvd2V2ZXIsIEkgbmVlZCB0byBiZSBtb3JlIHByZWNpc2UuCgpUaGUgZG9jdW1lbnRhdGlvbiBzdGF0ZXMgdGhhdCBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmICYjMzQ7YWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzLiYjMzQ7IENydWNpYWxseSwga2R1bXAgc2NlbmFyaW9zIGFyZSBub3Qgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBXaGlsZSB0aGUgY2hlY2sgKml0c2VsZiogaXMgcmVhY2hhYmxlLCB0aGUgY29kZSBwYXRoIGl0IGNoYW5nZXMgaXMgb25seSByZWFjaGVkIGluIGEga2R1bXAga2VybmVsLiBUaGUgcHJpbWFyeSBndWlkYW5jZSBzYXlzIHRoYXQgSSBtdXN0IG5vdCBmdXp6ICYjMzQ7c3RydWN0dXJhbGx5IHVucmVhY2hhYmxlJiMzNDsgY29kZSBwYXRocywgZGVmaW5lZCBpbiBTZWN0aW9uIDIuIFRoZSBjaGFuZ2UgKmlzKiByZWFjaGFibGUsIGFuZCAqaXMqIGV4ZWN1dGVkLCBidXQgaW4gdGhlIGNvbnRleHQgb2YgZnV6emluZywgdGhlIHBhdGggdGFrZW4gYnkgdGhlIGtlcm5lbCAoa2R1bXApIGlzIG5vdC4gVGhpcyBtYWtlcyBrZHVtcCB1bnJlYWNoYWJsZS4KClNvLCBsZXQmIzM5O3MgZXhhbWluZSBTZWN0aW9uIDIgbW9yZSBjbG9zZWx5LiBJIHNob3VsZCBzZXQgV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBtb2RpZmljYXRpb25zIGZhbGwgc3RyaWN0bHkgaW50byBvbmUgb2YgdGhlIGZvbGxvd2luZyBjYXRlZ29yaWVzLCBhbmQgdGhlIGtleSBwaHJhc2UgaXMgJiMzNDtVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHMmIzM0Oy4KClRoZSBzY2VuYXJpbyBoZXJlIGlzIHRoYXQgdGhlIG1vZGlmaWVkIGNvZGUgKmlzKiB1bnJlYWNoYWJsZSBmcm9tIHN5emthbGxlciwgb3VyIHN0YW5kYXJkIGVudmlyb25tZW50LCBiZWNhdXNlIGEga2R1bXAgY2FwdHVyZSBrZXJuZWwgbmV2ZXIgZXhlY3V0ZXMgZHVyaW5nIHN5emthbGxlciBmdXp6aW5nLgoKU2VjdGlvbiAzIHNheXMgdG8gc2V0IFdvcnRoRnV6emluZz10cnVlIGlmIHRoZSBjaGFuZ2VzIHRvdWNoICYjMzQ7cmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSYjMzQ7LiBTaW5jZSB0aGUga2R1bXAgcGFydCBpcyB1bnJlYWNoYWJsZSBpbiBvdXIgZnV6emluZyBjb250ZXh0LCBpdCB3b3VsZCBzZWVtIHRoYXQgV29ydGhGdXp6aW5nIGlzIGZhbHNlLgoKVGhlIG5leHQgY29uc2lkZXJhdGlvbiBpcyB0aGUgYEZvY3VzU3ltYm9sc2AuIFRoZSBpbnN0cnVjdGlvbnMgYWR2aXNlIGF2b2lkaW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zLCBzdWNoIGFzIHRob3NlIHJlbGF0ZWQgdG8gbWVtb3J5IGFsbG9jYXRpb24uIFNpbmNlIGBib29zdF93YXRlcm1hcmtgIGlzIGNhbGxlZCBmcm9tIG1lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0aW9ucywgc2hvdWxkIGBXb3J0aEZ1enppbmdgIGJlIGB0cnVlYCwgaXQgaXMgY2xlYXIgdGhhdCBJIHdvdWxkIG5vdCBsaXN0IHRoZXNlIHViaXF1aXRvdXMgZnVuY3Rpb25zIGluIGBGb2N1c1N5bWJvbHNgLgoKSSB3b3VsZCBuZWVkIHRvIGV4YW1pbmUgdGhlIHBhdGNoJiMzOTtzIHB1cnBvc2UgdG8gZGV0ZXJtaW5lIHRoZSB3b3J0aGluZXNzIG9mIGZ1enppbmcuIElmIHRoZSBnb2FsIGlzIHRvIHRlc3QgYmVoYXZpb3Igb3V0c2lkZSBvZiBhIGtkdW1wIGVudmlyb25tZW50LCB0aGVuIEkgd291bGQgbmVlZCB0byBmaW5kIHdoeSB0aGlzIGNoYW5nZSB3YXMgZG9uZSwgYW5kIHdoYXQgdGhlIG9yaWdpbmFsIGludGVudGlvbiB3YXMuCgpJZiBJIHdlcmUgdG8gbG9vayBhdCBhIHNpbWlsYXIgcGF0Y2gsIEkgd291bGQgZGV0ZXJtaW5lIHRoYXQgYFdvcnRoRnV6emluZz1mYWxzZWAgYmVjYXVzZSB0aGUgc3BlY2lmaWMgY29kZSBwYXRoIHRoYXQgaXMgYWRkZWQgYnkgdGhlIHBhdGNoIGlzIG5ldmVyIGV4ZWN1dGVkIGluIHRoZSBub3JtYWwgZnV6emluZyBlbnZpcm9ubWVudC4gSSB3b3VsZCBuZWVkIHRvIHJlc2VhcmNoIHRoZSByYXRpb25hbGUgZm9yIHRoZSBwYXRjaCB0byBkZXRlcm1pbmUgaWYgdGhlcmUgd2VyZSBvdGhlciBtb2RpZmljYXRpb25zLCBhbmQgSSB3b3VsZCBuZWVkIHRvIHJldmlldyB0aGUgcGF0Y2ggbW9yZSBkZWVwbHkgdG8gbG9vayBmb3IgdGhlICYjMzQ7ZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXImIzM0OyBmdW5jdGlvbnMgdG8gcG9zc2libHkgYWRkIHRvIGBGb2N1c1N5bWJvbHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxNDo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtBIGtkdW1wIGNhcHR1cmUga2VybmVsIGV4aXRzIGJlZm9yZSBhIGJvb3N0IGNhbiBwYXkgb2ZmJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3BhZ2VfYWxsb2MuYz0yMTc2PXN0YXRpYyBpbmxpbmUgYm9vbCBib29zdF93YXRlcm1hcmsoc3RydWN0IHpvbmUgKnpvbmUpXG4tLVxubW0vcGFnZV9hbGxvYy5jLTIxODMtXHQvKlxubW0vcGFnZV9hbGxvYy5jOjIxODQ6XHQgKiBBIGtkdW1wIGNhcHR1cmUga2VybmVsIGV4aXRzIGJlZm9yZSBhIGJvb3N0IGNhbiBwYXkgb2ZmLCB3aGlsZVxubW0vcGFnZV9hbGxvYy5jLTIxODUtXHQgKiB0aGUgcmFpc2VkIHdhdGVybWFyayBjYW4gZXhjZWVkIHRoZSBtZW1vcnkgbGVmdCBmb3IgdGhlIGR1bXAuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE0OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NDgxCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTA2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQYXRjaCBBbmFseXNpczogV2F0ZXJtYXJrIEJvb3N0aW5nIGluIGtkdW1wIEtlcm5lbHMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSBsb29raW5nIGF0IGBtbS9wYWdlX2FsbG9jLmNgLCB0aGlzIHBhdGNoIGlzIGFsbCBhYm91dCBwcmV2ZW50aW5nIHdhdGVybWFyayBib29zdGluZyBpbiBrZHVtcCBrZXJuZWxzLCB3aGljaCBtYWtlcyBzZW5zZSBnaXZlbiB0aGUgbWVtb3J5IGNvbnN0cmFpbnRzIG9mIHRoYXQgZW52aXJvbm1lbnQuIFRoZSBleGlzdGluZyBjb21tZW50IGFscmVhZHkgZmxhZ2dlZCB0aGUgcG90ZW50aWFsIGZvciBvdXQtb2YtbWVtb3J5IHNpdHVhdGlvbnMsIGFuZCB0aGUgcGF0Y2ggZXNzZW50aWFsbHkgYWRkcyBhIGNoZWNrIHVzaW5nIGBpc19rZHVtcF9rZXJuZWwoKWAgdG8gYmFpbCBvdXQgb2Ygd2F0ZXJtYXJrIGJvb3N0aW5nIGlmIHdlJiMzOTtyZSBpbiBvbmUgb2YgdGhvc2Uga2R1bXAgc2NlbmFyaW9zLiBUaGUgcmF0aW9uYWxlIGlzIHNvbGlkOiBhIGtkdW1wIGtlcm5lbCBoYXMgbGltaXRlZCBtZW1vcnkgYW5kIGV4aXRzIHF1aWNrbHksIHNvIGJvb3N0aW5nIHRoZSB3YXRlcm1hcmsgY291bGQgdHJpZ2dlciBPT00gZXJyb3JzIGR1cmluZyB0aGUgY3J1Y2lhbCBkdW1wIHByb2Nlc3MuCgpOb3csIHRoZSBjcml0aWNhbCBxdWVzdGlvbjogaXMgdGhpcyBwYXRjaCB3b3J0aCBmdXp6aW5nIHdpdGggc3l6a2FsbGVyPyAgTGV0JiMzOTtzIGxvb2sgYXQgdGhlIHRyaWFnZSBwaGlsb3NvcGh5IGFnYWluLiBSZWFjaGFiaWxpdHkgaXMgdGhlIGtleS4gVGhlIG1vZGlmaWVkIGNvZGUgbmVlZHMgdG8gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFdoYXQgZG9lcyB0aGlzIHBhdGNoICpkbyo/IEl0IGluc2VydHMgYSBjaGVjazogYGlmIChpc19rZHVtcF9rZXJuZWwoKSkgcmV0dXJuIGZhbHNlO2AgIAoKVGhlIGJpZyBpc3N1ZT8gU3l6a2FsbGVyICppc24mIzM5O3QqIHJ1bm5pbmcgaW4gYSBrZHVtcCBlbnZpcm9ubWVudC4gYGlzX2tkdW1wX2tlcm5lbCgpYCByZWxpZXMgb24gYGVsZmNvcmVoZHJfYWRkcmAsIGFuZCB0aGF0JiMzOTtzICphbHdheXMqIGBFTEZDT1JFX0FERFJfTUFYYCB1bmRlciBzeXprYWxsZXIuIFRoZSBjb2RlIHBhdGggYHJldHVybiBmYWxzZTtgIGlzICpuZXZlciogcmVhY2hlZC4gVGhlIGtlcm5lbCYjMzk7cyBiZWhhdmlvciBpbiBRRU1VL0dDRSwgd2hpY2ggaXMgd2hhdCBzeXprYWxsZXIgdXNlcywgaXMgY29tcGxldGVseSB1bmNoYW5nZWQgYnkgdGhpcyBwYXRjaC4KCkNhbiB3ZSAqZXZlciogZ2V0IGBpc19rZHVtcF9rZXJuZWwoKWAgdG8gcmV0dXJuIHRydWUgaW4gYSB3YXkgdGhhdCBzeXprYWxsZXIgY291bGQgbGV2ZXJhZ2U/IExldCYjMzk7cyBjaGVjayB3aGVyZSBgZWxmY29yZWhkcl9hZGRyYCBpcyBzZXQuCgoxLiAgYHNldHVwX2VsZmNvcmVoZHIoY2hhciAqYXJnKWA6IEVhcmx5IGJvb3QgY29tbWFuZC1saW5lLiBTeXprYWxsZXIgaXMgdXNlcnNwYWNlOyBpdCBjYW4mIzM5O3QgbWVzcyB3aXRoIHRoYXQuCjIuICBQb3dlclBDLXNwZWNpZmljIGNvZGUuIElycmVsZXZhbnQgdG8geDg2L2FtZDY0LgozLiAgRGV2aWNlIHRyZWUgY29kZS4gQWdhaW4sIG5vdCB1c2VkIGluIHN0YW5kYXJkIEFDUEkgUUVNVSBzZXR1cHMsIGFuZCBlYXJseSBib290IG9ubHkuCjQuICBgZnMvcHJvYy92bWNvcmUuY2AuIEFoLCBgdm1jb3JlX2luaXRgLiBUaGF0IGNhbGxzIGBlbGZjb3JlaGRyX2FsbG9jYC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZyEgIFdoYXQgaXMgYGVsZmNvcmVoZHJfYWxsb2NgIGRvaW5nPyBJIG5lZWQgdG8gYW5hbHl6ZSBgZWxmY29yZWhkcl9hbGxvY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE0OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2VsZmNvcmVoZHJfYWxsb2MmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2tlcm5lbC9jcmFzaF9kdW1wLmM9NTkwPXN0YXRpYyBzaXplX3QgZ2V0X2VsZmNvcmVoZHJfc2l6ZShpbnQgcGhkcl9jb3VudClcbi0tXG5hcmNoL3MzOTAva2VybmVsL2NyYXNoX2R1bXAuYy02MTMtICovXG5hcmNoL3MzOTAva2VybmVsL2NyYXNoX2R1bXAuYzo2MTQ6aW50IGVsZmNvcmVoZHJfYWxsb2ModW5zaWduZWQgbG9uZyBsb25nICphZGRyLCB1bnNpZ25lZCBsb25nIGxvbmcgKnNpemUpXG5hcmNoL3MzOTAva2VybmVsL2NyYXNoX2R1bXAuYy02MTUte1xuLS1cbmZzL3Byb2Mvdm1jb3JlLmM9MTU5PXNzaXplX3QgcmVhZF9mcm9tX29sZG1lbShzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsIHNpemVfdCBjb3VudCxcbi0tXG5mcy9wcm9jL3ZtY29yZS5jLTIxMC0gKi9cbmZzL3Byb2Mvdm1jb3JlLmM6MjExOmludCBfX3dlYWsgZWxmY29yZWhkcl9hbGxvYyh1bnNpZ25lZCBsb25nIGxvbmcgKmFkZHIsIHVuc2lnbmVkIGxvbmcgbG9uZyAqc2l6ZSlcbmZzL3Byb2Mvdm1jb3JlLmMtMjEyLXtcbi0tXG5mcy9wcm9jL3ZtY29yZS5jPTE3MTM9c3RhdGljIGludCBfX2luaXQgdm1jb3JlX2luaXQodm9pZClcbi0tXG5mcy9wcm9jL3ZtY29yZS5jLTE3MTctXHQvKiBBbGxvdyBhcmNoaXRlY3R1cmVzIHRvIGFsbG9jYXRlIEVMRiBoZWFkZXIgaW4gMm5kIGtlcm5lbCAqL1xuZnMvcHJvYy92bWNvcmUuYzoxNzE4Olx0cmMgPSBlbGZjb3JlaGRyX2FsbG9jKFx1MDAyNmVsZmNvcmVoZHJfYWRkciwgXHUwMDI2ZWxmY29yZWhkcl9zaXplKTtcbmZzL3Byb2Mvdm1jb3JlLmMtMTcxOS1cdGlmIChyYylcbi0tXG5pbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaD0xOD1leHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGRtX2NyeXB0X2tleXNfYWRkcjtcbi0tXG5pbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaC0yMC0jaWZkZWYgQ09ORklHX0NSQVNIX0RVTVBcbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oOjIxOmV4dGVybiBpbnQgZWxmY29yZWhkcl9hbGxvYyh1bnNpZ25lZCBsb25nIGxvbmcgKmFkZHIsIHVuc2lnbmVkIGxvbmcgbG9uZyAqc2l6ZSk7XG5pbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaC0yMi1leHRlcm4gdm9pZCBlbGZjb3JlaGRyX2ZyZWUodW5zaWduZWQgbG9uZyBsb25nIGFkZHIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxNDo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTUzNwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBgdm1jb3JlLmNgKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIG5haWwgZG93biBzb21ldGhpbmcgc3BlY2lmaWMgcmVsYXRlZCB0byBjb3JlIGR1bXBzLCBhbmQgbXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBkaWcgaW50byB0aGUgYGZzL3Byb2Mvdm1jb3JlLmNgIGZpbGUgd2l0aGluIHRoZSBrZXJuZWwgc291cmNlLiBUbyBnZXQgc3RhcnRlZCwgSSYjMzk7bSB6ZXJvaW5nIGluIG9uIGEgY291cGxlIG9mIHNwZWNpZmljIGxpbmVzOiAyMTAgYW5kIDE3MTMuIEtub3dpbmcgdGhlIGNvZGUgYmFzZSBsaWtlIEkgZG8sIHRob3NlIGxpbmUgbnVtYmVycyBoYXZlIHRvIGJlIGltcG9ydGFudC4gSSBoYXZlIGEgaHVuY2ggdGhhdCB0aGVzZSBwYXJ0aWN1bGFyIGxpbmVzIHdpbGwgY29udGFpbiB0aGUga2V5IGluZm9ybWF0aW9uIHRoYXQgSSBhbSBsb29raW5nIGZvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTQ6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9wcm9jL3ZtY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMTA6XHQgKi9cbiAyMTE6XHRpbnQgX193ZWFrIGVsZmNvcmVoZHJfYWxsb2ModW5zaWduZWQgbG9uZyBsb25nICphZGRyLCB1bnNpZ25lZCBsb25nIGxvbmcgKnNpemUpXG4gMjEyOlx0e1xuIDIxMzpcdFx0cmV0dXJuIDA7XG4gMjE0Olx0fVxuIDIxNTpcdFxuIDIxNjpcdC8qXG4gMjE3Olx0ICogQXJjaGl0ZWN0dXJlcyBtYXkgb3ZlcnJpZGUgdGhpcyBmdW5jdGlvbiB0byBmcmVlIGhlYWRlclxuIDIxODpcdCAqL1xuIDIxOTpcdHZvaWQgX193ZWFrIGVsZmNvcmVoZHJfZnJlZSh1bnNpZ25lZCBsb25nIGxvbmcgYWRkcilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTQ6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE4NjgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBJJiMzOTttIHJlYWR5LiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3JlIHdvcmtpbmcgd2l0aC4gSSYjMzk7bGwgc3VtbWFyaXplIHRoZSBwcm92aWRlZCB0ZXh0IGFzIGEgc3RyZWFtIG9mIGNvbnNjaW91c25lc3MsIGFzIGlmIHRoZXNlIHdlcmUgbXkgb3duIHRob3VnaHRzLCBnaXZlbiBteSBleHBlcnRpc2UuCgoqKioKCioqQW5hbHl6aW5nIHRoZSBMaW5lKioKCkFscmlnaHQsIEkmIzM5O20gZGl2aW5nIGludG8gbGluZSAxNzEzLiBGaXJzdCwgSSBuZWVkIHRoZSBjb250ZXh0LiBXaGF0JiMzOTtzIHRoZSBsYXJnZXIgYXJndW1lbnQgYmVpbmcgcHJlc2VudGVkPyBXaGF0IGFyZSB0aGUga2V5IHZhcmlhYmxlcyBpbiBwbGF5PyBKdXN0IGEgc2luZ2xlIGxpbmUgaXMgbmV2ZXIgZW5vdWdoOyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcG9zaXRpb24gd2l0aGluIHRoZSBvdmVyYWxsIGZyYW1ld29yay4gSXMgdGhpcyBhIHN1cHBvcnRpbmcgZGV0YWlsLCBhIGNydWNpYWwgcGllY2Ugb2YgZXZpZGVuY2UsIG9yIHBlcmhhcHMgYSByZWJ1dHRhbD8gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGRlcGVuZHMgaGVhdmlseSBvbiB0aGUgc3Vycm91bmRpbmcgYXJndW1lbnRzLiBJcyB0aGlzIGxpbmUgY29uc2lzdGVudCB3aXRoIG15IGV4aXN0aW5nIG1vZGVsLCBvciBkb2VzIGl0IGNoYWxsZW5nZSBteSBoeXBvdGhlc2VzPyBJdCBjb3VsZCBiZSBhIHNpbXBsZSBzdGF0ZW1lbnQgb2YgZmFjdCwgYnV0IG15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBpbnRlcnJvZ2F0ZSBpdCBmb3IgYXNzdW1wdGlvbnMgb3IgYmlhc2VzLiBJIGhhdmUgdG8gc2VlIGhvdyByb2J1c3QgdGhlIGV2aWRlbmNlIGlzLCBhbmQgaWYgaXQmIzM5O3MgYmVlbiBwcm9wZXJseSBjb250ZXh0dWFsaXplZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTQ6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9wcm9jL3ZtY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTcxMywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNzEzOlx0c3RhdGljIGludCBfX2luaXQgdm1jb3JlX2luaXQodm9pZClcbjE3MTQ6XHR7XG4xNzE1Olx0XHRpbnQgcmMgPSAwO1xuMTcxNjpcdFxuMTcxNzpcdFx0LyogQWxsb3cgYXJjaGl0ZWN0dXJlcyB0byBhbGxvY2F0ZSBFTEYgaGVhZGVyIGluIDJuZCBrZXJuZWwgKi9cbjE3MTg6XHRcdHJjID0gZWxmY29yZWhkcl9hbGxvYyhcdTAwMjZlbGZjb3JlaGRyX2FkZHIsIFx1MDAyNmVsZmNvcmVoZHJfc2l6ZSk7XG4xNzE5Olx0XHRpZiAocmMpXG4xNzIwOlx0XHRcdHJldHVybiByYztcbjE3MjE6XHRcdC8qXG4xNzIyOlx0XHQgKiBJZiBlbGZjb3JlaGRyPSBoYXMgYmVlbiBwYXNzZWQgaW4gY21kbGluZSBvciBjcmVhdGVkIGluIDJuZCBrZXJuZWwsXG4xNzIzOlx0XHQgKiB0aGVuIGNhcHR1cmUgdGhlIGR1bXAuXG4xNzI0Olx0XHQgKi9cbjE3MjU6XHRcdGlmICghKGlzX3ZtY29yZV91c2FibGUoKSkpXG4xNzI2Olx0XHRcdHJldHVybiByYztcbjE3Mjc6XHRcdHJjID0gcGFyc2VfY3Jhc2hfZWxmX2hlYWRlcnMoKTtcbjE3Mjg6XHRcdGlmIChyYykge1xuMTcyOTpcdFx0XHRlbGZjb3JlaGRyX2ZyZWUoZWxmY29yZWhkcl9hZGRyKTtcbjE3MzA6XHRcdFx0cHJfd2FybihcJiMzNDtub3QgaW5pdGlhbGl6ZWRcXG5cJiMzNDspO1xuMTczMTpcdFx0XHRyZXR1cm4gcmM7XG4xNzMyOlx0XHR9XG4xNzMzOlx0XHRlbGZjb3JlaGRyX2ZyZWUoZWxmY29yZWhkcl9hZGRyKTtcbjE3MzQ6XHRcdGVsZmNvcmVoZHJfYWRkciA9IEVMRkNPUkVfQUREUl9FUlI7XG4xNzM1Olx0XG4xNzM2Olx0XHRwcm9jX3ZtY29yZSA9IHByb2NfY3JlYXRlKFwmIzM0O3ZtY29yZVwmIzM0OywgU19JUlVTUiwgTlVMTCwgXHUwMDI2dm1jb3JlX3Byb2Nfb3BzKTtcbjE3Mzc6XHRcdGlmIChwcm9jX3ZtY29yZSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTQ6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI0OTQKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyMTgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRnV6emluZyBJbXBhY3Qgb2YgdGhlIGBib29zdF93YXRlcm1hcmtgIE1vZGlmaWNhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjaGFuZ2UgaW4gYG1tL3BhZ2VfYWxsb2MuY2AgYW5kIGl0cyBpbnRlcmFjdGlvbiB3aXRoIGBpc19rZHVtcF9rZXJuZWwoKWAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHNpbmNlIGBpc19rZHVtcF9rZXJuZWwoKWAgcmVsaWVzIG9uIGBlbGZjb3JlaGRyX2FkZHJgIHdoaWNoIGlzIHVubGlrZWx5IHRvIGJlIHNldCBpbiBhIHN0YW5kYXJkIGZ1enppbmcgc2V0dXAsIHRoZSBhZGRlZCBgaWYgKGlzX2tkdW1wX2tlcm5lbCgpKSByZXR1cm4gZmFsc2U7YCBjb25kaXRpb24gc2VlbXMgdW5yZWFjaGFibGUgaW4gbXkgbm9ybWFsIGVudmlyb25tZW50LiBUaGVyZWZvcmUsIEkgaW5pdGlhbGx5IGxlYW5lZCB0b3dhcmRzIHNldHRpbmcgYFdvcnRoRnV6emluZ2AgdG8gYGZhbHNlYC4KCkhvd2V2ZXIsIHRoZSBpbnN0cnVjdGlvbnMgc3RyZXNzICYjMzQ7UkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEUmIzM0Oy4gIEkgcmUtcmVhZCBTZWN0aW9uIDIsIHdoaWNoIG91dGxpbmVzIHdoZW4gdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiAgSXQgdXNlcyB0aGUgcGhyYXNlICYjMzQ7T05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXMmIzM0OywgYW5kIEkmIzM5O20gdW5zdXJlIGlmIHRoYXQgaXMgYW4gZXhoYXVzdGl2ZSBsaXN0LiBTZWN0aW9uIDEgc3RhdGVzIHRoYXQgdW5yZWFjaGFibGUgY29kZSBNVVNUIE5PVCBiZSBmdXp6ZWQuCgpUaGVuIFNlY3Rpb24gMyBzdGF0ZXMgJiMzNDtSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSYjMzQ7LiBJIHJlYWxpemUgdGhhdCBgYm9vc3Rfd2F0ZXJtYXJrYCBpcyBwYXJ0IG9mIHRoZSBgbW0vcGFnZV9hbGxvYy5jYCBhbmQgaXMgYSBjb3JlIG1lbW9yeSBhbGxvY2F0aW9uIHBhdGgg4oCTIGl0JiMzOTtzIGRlZmluaXRlbHkgcmVhY2hhYmxlLgoKSSBub3cgcmVhbGl6ZSB0aGF0IHRoZSBhZGRlZCBgaWYgKGlzX2tkdW1wX2tlcm5lbCgpKWAgY2hlY2sgaXMgKmV4ZWN1dGVkKiB3aXRoaW4gYSBzdGFuZGFyZCBrZXJuZWwsIGJ1dCB1bmRlciAqbm9ybWFsKiBjaXJjdW1zdGFuY2VzIHdpbGwgYWx3YXlzIHJldHVybiBmYWxzZS4gVGh1cywgdGhlIGNoYW5nZSAqZG9lcyogdG91Y2ggcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZS4gVGhlIGtkdW1wIGNvbmRpdGlvbmFsIHNpbXBseSBzaG9ydC1jaXJjdWl0cyBleGVjdXRpb24gdW5kZXIgYSAqc3BlY2lmaWMqIHNpdHVhdGlvbiwgYnV0IHRoYXQgc2l0dWF0aW9uIGlzbiYjMzk7dCByZWxldmFudCB0byBmdXp6aW5nLgoKVGh1cywgYmFzZWQgb24gdGhlIHByaW5jaXBsZSBvZiBSRUFDSEFCSUxJVFksIEkgbXVzdCBzZXQgYFdvcnRoRnV6emluZz10cnVlYC4KCk5vdyBjb21lcyB0aGUgaGFyZCBwYXJ0OiBGaW5kaW5nIGdvb2QgRm9jdXNTeW1ib2xzLiAgVGhlIGd1aWRlbGluZXMgZXhwbGljaXRseSB3YXJuIGFnYWluc3QgbGlzdGluZyAmIzM0O3ViaXF1aXRvdXMgbGlmZWN5Y2xlIGhvdC1wYXRocyYjMzQ7IGxpa2UgY29yZSBhbGxvY2F0b3JzLiBJIG5lZWQgdG8gYXZvaWQgZGlsdXRpbmcgdGhlIGZ1enppbmcgZWZmb3J0LiBJJiMzOTttIHRoaW5raW5nLi4uV2hhdCBjYWxscyBgYm9vc3Rfd2F0ZXJtYXJrYD8gIGB0cnlfdG9fY2xhaW1fYmxvY2tgPyBUaGF0IGlzIGFsc28gYSBob3QtcGF0aC4gV2hhdCBhYm91dCB0aGUgZnVuY3Rpb25zIHRoYXQgY2FsbCBgdHJ5X3RvX2NsYWltX2Jsb2NrYCwgbGlrZSBgX19ybXF1ZXVlX2NsYWltYCBvciBgcm1xdWV1ZWA/IFRoZXNlIGFsc28gYXJlIG5vdCBnb29kLgoKU28sIGlzIHRoZXJlIEFOWSBub24tdWJpcXVpdG91cyBmdW5jdGlvbj8gQ2FuIEkgbGluayB0aGlzIGNoYW5nZSB0byBhIHBhcnRpY3VsYXIgZmVhdHVyZSBvciBlbnRyeXBvaW50PyAgTGV0JiMzOTtzIHNlZSBpZiB0aGUgYHdhdGVybWFya19ib29zdF9mYWN0b3JgIGlzIGV4cG9zZWQgdmlhIHN5c2N0bC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTQ6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7d2F0ZXJtYXJrX2Jvb3N0X2ZhY3RvciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC92bS5yc3Q9MjI9Q3VycmVudGx5LCB0aGVzZSBmaWxlcyBhcmUgaW4gL3Byb2Mvc3lzL3ZtOlxuLS1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL3ZtLnJzdC03Ni0tIHZmc19jYWNoZV9wcmVzc3VyZV9kZW5vbVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwvdm0ucnN0Ojc3Oi0gd2F0ZXJtYXJrX2Jvb3N0X2ZhY3RvclxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwvdm0ucnN0LTc4LS0gd2F0ZXJtYXJrX3NjYWxlX2ZhY3RvclxuLS1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL3ZtLnJzdD0xMTUzPXZmc19jYWNoZV9wcmVzc3VyZSBzZXR0aW5nIHRvIHRha2UgZWZmZWN0LlxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwvdm0ucnN0LTExNTQtXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC92bS5yc3Q6MTE1NTp3YXRlcm1hcmtfYm9vc3RfZmFjdG9yXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC92bS5yc3QtMTE1Ni09PT09PT09PT09PT09PT09PT09PT09XG4tLVxubW0vcGFnZV9hbGxvYy5jPTI3Nz1pbnQgdXNlcl9taW5fZnJlZV9rYnl0ZXMgPSAtMTtcbm1tL3BhZ2VfYWxsb2MuYzoyNzg6c3RhdGljIGludCB3YXRlcm1hcmtfYm9vc3RfZmFjdG9yIF9fcmVhZF9tb3N0bHkgPSAxNTAwMDtcbm1tL3BhZ2VfYWxsb2MuYy0yNzktc3RhdGljIGludCB3YXRlcm1hcmtfc2NhbGVfZmFjdG9yID0gMTA7XG4tLVxubW0vcGFnZV9hbGxvYy5jPTIxNzY9c3RhdGljIGlubGluZSBib29sIGJvb3N0X3dhdGVybWFyayhzdHJ1Y3Qgem9uZSAqem9uZSlcbi0tXG5tbS9wYWdlX2FsbG9jLmMtMjE3OS1cbm1tL3BhZ2VfYWxsb2MuYzoyMTgwOlx0aWYgKCF3YXRlcm1hcmtfYm9vc3RfZmFjdG9yKVxubW0vcGFnZV9hbGxvYy5jLTIxODEtXHRcdHJldHVybiBmYWxzZTtcbi0tXG5tbS9wYWdlX2FsbG9jLmMtMjE5OS1cdG1heF9ib29zdCA9IG11bHRfZnJhYyh6b25lLVx1MDAzZV93YXRlcm1hcmtbV01BUktfSElHSF0sXG5tbS9wYWdlX2FsbG9jLmM6MjIwMDpcdFx0XHR3YXRlcm1hcmtfYm9vc3RfZmFjdG9yLCAxMDAwMCk7XG5tbS9wYWdlX2FsbG9jLmMtMjIwMS1cbi0tXG5tbS9wYWdlX2FsbG9jLmM9Njk0NT1zdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBwYWdlX2FsbG9jX3N5c2N0bF90YWJsZVtdID0ge1xuLS1cbm1tL3BhZ2VfYWxsb2MuYy02OTU0LVx0e1xubW0vcGFnZV9hbGxvYy5jOjY5NTU6XHRcdC5wcm9jbmFtZVx0PSBcJiMzNDt3YXRlcm1hcmtfYm9vc3RfZmFjdG9yXCYjMzQ7LFxubW0vcGFnZV9hbGxvYy5jOjY5NTY6XHRcdC5kYXRhXHRcdD0gXHUwMDI2d2F0ZXJtYXJrX2Jvb3N0X2ZhY3Rvcixcbm1tL3BhZ2VfYWxsb2MuYzo2OTU3Olx0XHQubWF4bGVuXHRcdD0gc2l6ZW9mKHdhdGVybWFya19ib29zdF9mYWN0b3IpLFxubW0vcGFnZV9hbGxvYy5jLTY5NTgtXHRcdC5tb2RlXHRcdD0gMDY0NCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTQ6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU4NDUKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgYGJvb3N0X3dhdGVybWFya2AgRnVuY3Rpb24qKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGNvZGUgYmV0dGVyLiBJIHNlZSBgYm9vc3Rfd2F0ZXJtYXJrYCBiZWluZyBjYWxsZWQsIGJ1dCB3aGF0JiMzOTtzICp0cmlnZ2VyaW5nKiB0aGF0IGNhbGw/IEkgbmVlZCB0byB0cmFjZSBpdHMgdXNhZ2Ugd2l0aGluIHRoZSA2Lngga2VybmVsLiBBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VhcmNoIGZvciBjYWxscyB0byBgYm9vc3Rfd2F0ZXJtYXJrYC4gSG1tLCBsaW5lIDIzMzAgc2hvd3MgdGhlIGZvbGxvd2luZzoKCmBgYGMKCWlmIChib29zdF93YXRlcm1hcmsoem9uZSkgJmFtcDsmYW1wOyAoYWxsb2NfZmxhZ3MgJmFtcDsgQUxMT0NfS1NXQVBEKSkKCQlzZXRfYml0KFpPTkVfQk9PU1RFRF9XQVRFUk1BUkssICZhbXA7em9uZS0mZ3Q7ZmxhZ3MpOwpgYGAKClJpZ2h0LCBzbyBpdCYjMzk7cyBhIGNvbmRpdGlvbmFsIGNhbGwuIElmIGBib29zdF93YXRlcm1hcmsoem9uZSlgIHJldHVybnMgdHJ1ZSAqYW5kKiBgYWxsb2NfZmxhZ3NgIGhhcyB0aGUgYEFMTE9DX0tTV0FQRGAgZmxhZyBzZXQsIHRoZW4gaXQgc2V0cyB0aGUgYFpPTkVfQk9PU1RFRF9XQVRFUk1BUktgIGJpdCBpbiB0aGUgem9uZSBmbGFncy4gT2theSwgSSB1bmRlcnN0YW5kICp3aGVuKiBpdCYjMzk7cyBjYWxsZWQsIGJ1dCBub3cgSSBuZWVkIHRvIGtub3cgd2hhdCBoYXBwZW5zIGFzIGEgcmVzdWx0IG9mIHRoZSBgWk9ORV9CT09TVEVEX1dBVEVSTUFSS2AgYmVpbmcgc2V0LiBXaGF0IGRvZXMgdGhhdCBmbGFnIGFjdHVhbGx5ICpkbyo/IEkgc2hvdWxkIGxvb2sgZm9yIGFsbCB0aGUgcGxhY2VzIHdoZXJlIGBaT05FX0JPT1NURURfV0FURVJNQVJLYCBpcyB1c2VkIGluIHRoZSBjb2RlYmFzZS4gTGV0JiMzOTtzIGdyZXAgZm9yIHRoYXQgc3BlY2lmaWMgaWRlbnRpZmllci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTQ6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Wk9ORV9CT09TVEVEX1dBVEVSTUFSSyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q9Mzc0PUdlbmVyYWxcbi0tXG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3QtNTI3LSAgVGhlIHpvbmUgZmxhZ3MuIFRoZSBsZWFzdCB0aHJlZSBiaXRzIGFyZSB1c2VkIGFuZCBkZWZpbmVkIGJ5XG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q6NTI4OiAgYGBlbnVtIHpvbmVfZmxhZ3NgYC4gYGBaT05FX0JPT1NURURfV0FURVJNQVJLYGAgKGJpdCAwKTogem9uZSByZWNlbnRseSBib29zdGVkXG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3QtNTI5LSAgd2F0ZXJtYXJrcy4gQ2xlYXJlZCB3aGVuIGtzd2FwZCBpcyB3b2tlbi4gYGBaT05FX1JFQ0xBSU1fQUNUSVZFYGAgKGJpdCAxKTpcbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTExNzI9ZW51bSB6b25lX2ZsYWdzIHtcbmluY2x1ZGUvbGludXgvbW16b25lLmg6MTE3MzpcdFpPTkVfQk9PU1RFRF9XQVRFUk1BUkssXHRcdC8qIHpvbmUgcmVjZW50bHkgYm9vc3RlZCB3YXRlcm1hcmtzLlxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xMTc0LVx0XHRcdFx0XHQgKiBDbGVhcmVkIHdoZW4ga3N3YXBkIGlzIHdva2VuLlxuLS1cbm1tL3BhZ2VfYWxsb2MuYz0yMzA3PXRyeV90b19jbGFpbV9ibG9jayhzdHJ1Y3Qgem9uZSAqem9uZSwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTIzMzAtXHRpZiAoYm9vc3Rfd2F0ZXJtYXJrKHpvbmUpIFx1MDAyNlx1MDAyNiAoYWxsb2NfZmxhZ3MgXHUwMDI2IEFMTE9DX0tTV0FQRCkpXG5tbS9wYWdlX2FsbG9jLmM6MjMzMTpcdFx0c2V0X2JpdChaT05FX0JPT1NURURfV0FURVJNQVJLLCBcdTAwMjZ6b25lLVx1MDAzZWZsYWdzKTtcbm1tL3BhZ2VfYWxsb2MuYy0yMzMyLVxuLS1cbm1tL3BhZ2VfYWxsb2MuYz0zNDIyPXN0cnVjdCBwYWdlICpybXF1ZXVlKHN0cnVjdCB6b25lICpwcmVmZXJyZWRfem9uZSxcbi0tXG5tbS9wYWdlX2FsbG9jLmMtMzQ0MS1cdGlmICgoYWxsb2NfZmxhZ3MgXHUwMDI2IEFMTE9DX0tTV0FQRCkgXHUwMDI2XHUwMDI2XG5tbS9wYWdlX2FsbG9jLmM6MzQ0MjpcdCAgICB1bmxpa2VseSh0ZXN0X2JpdChaT05FX0JPT1NURURfV0FURVJNQVJLLCBcdTAwMjZ6b25lLVx1MDAzZWZsYWdzKSkpIHtcbm1tL3BhZ2VfYWxsb2MuYzozNDQzOlx0XHRjbGVhcl9iaXQoWk9ORV9CT09TVEVEX1dBVEVSTUFSSywgXHUwMDI2em9uZS1cdTAwM2VmbGFncyk7XG5tbS9wYWdlX2FsbG9jLmMtMzQ0NC1cdFx0d2FrZXVwX2tzd2FwZCh6b25lLCAwLCAwLCB6b25lX2lkeCh6b25lKSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE0OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2Nzc3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVHJhY2luZyB0aGUgYGJvb3N0X3dhdGVybWFya2AgRnVuY3Rpb24gQ2FsbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGh1bmNoIGlzIHRoYXQgYGJvb3N0X3dhdGVybWFya2AmIzM5O3MgdXNhZ2UgaXMgdGlnaHRseSBjb3VwbGVkLiBJJiMzOTttIGZvY3VzaW5nIG9uIGl0cyBjYWxscyB3aXRoaW4gYHRyeV90b19jbGFpbV9ibG9ja2AuICBTbywgdGhhdCBzZWVtcyB0byBiZSB0aGUgY3JpdGljYWwgZW50cnkgcG9pbnQuIFRoZSBwbGFuIG5vdyBpcyB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGguIEZyb20gdGhlIGxvb2tzIG9mIGl0LCAgYHRyeV90b19jbGFpbV9ibG9ja2AgaXMgdGhlIGltbWVkaWF0ZSBwYXJlbnQuICAKCk5vdywgSSBuZWVkIHRvIHNlZSB3aGVyZSBgdHJ5X3RvX2NsYWltX2Jsb2NrYCBpcyBjYWxsZWQuIExldCBtZSBxdWlja2x5IHNjYW4gYG1tL3BhZ2VfYWxsb2MuY2AgZm9yIGNhbGxlcnMuIEFoLCB0aGVyZSBpdCBpcyDigJMgYF9fcm1xdWV1ZV9jbGFpbWAuICBPa2F5LCBnb29kLiBTbywgYHRyeV90b19jbGFpbV9ibG9ja2AgaXMgY2FsbGVkIGJ5IGBfX3JtcXVldWVfY2xhaW1gLgoKTm93LCB0aW1lIHRvIGRpdmUgZGVlcGVyIGludG8gYF9fcm1xdWV1ZV9jbGFpbWAuIEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LCB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCBpdCBjYWxscyBgdHJ5X3RvX2NsYWltX2Jsb2NrYCwgYW5kIHdoYXQgaW1wbGljYXRpb25zIHRoYXQgaGFzIGZvciBgYm9vc3Rfd2F0ZXJtYXJrYC4gSSBleHBlY3QgdGhpcyB0byBiZSBhIGNydWNpYWwgbGluayBpbiB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWd5IGFuZCBob3cgdGhlICYjMzQ7Ym9vc3QmIzM0OyBhZmZlY3RzIHBhZ2UgYWxsb2NhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTQ6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9wYWdlX2FsbG9jLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMzgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIzODA6XHQgKi9cbjIzODE6XHRzdGF0aWMgX19hbHdheXNfaW5saW5lIHN0cnVjdCBwYWdlICpcbjIzODI6XHRfX3JtcXVldWVfY2xhaW0oc3RydWN0IHpvbmUgKnpvbmUsIGludCBvcmRlciwgaW50IHN0YXJ0X21pZ3JhdGV0eXBlLFxuMjM4MzpcdFx0XHRcdFx0XHRcdHVuc2lnbmVkIGludCBhbGxvY19mbGFncylcbjIzODQ6XHR7XG4yMzg1Olx0XHRzdHJ1Y3QgZnJlZV9hcmVhICphcmVhO1xuMjM4NjpcdFx0aW50IGN1cnJlbnRfb3JkZXI7XG4yMzg3Olx0XHRpbnQgbWluX29yZGVyID0gb3JkZXI7XG4yMzg4Olx0XHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbjIzODk6XHRcdGludCBmYWxsYmFja19tdDtcbjIzOTA6XHRcbjIzOTE6XHRcdC8qXG4yMzkyOlx0XHQgKiBEbyBub3Qgc3RlYWwgcGFnZXMgZnJvbSBmcmVlbGlzdHMgYmVsb25naW5nIHRvIG90aGVyIHBhZ2VibG9ja3NcbjIzOTM6XHRcdCAqIGkuZS4gb3JkZXJzIFx1MDAzYyBwYWdlYmxvY2tfb3JkZXIuIElmIHRoZXJlIGFyZSBubyBsb2NhbCB6b25lcyBmcmVlLFxuMjM5NDpcdFx0ICogdGhlIHpvbmVsaXN0cyB3aWxsIGJlIHJlaXRlcmF0ZWQgd2l0aG91dCBBTExPQ19OT0ZSQUdNRU5ULlxuMjM5NTpcdFx0ICovXG4yMzk2Olx0XHRpZiAob3JkZXIgXHUwMDNjIHBhZ2VibG9ja19vcmRlciBcdTAwMjZcdTAwMjYgYWxsb2NfZmxhZ3MgXHUwMDI2IEFMTE9DX05PRlJBR01FTlQpXG4yMzk3Olx0XHRcdG1pbl9vcmRlciA9IHBhZ2VibG9ja19vcmRlcjtcbjIzOTg6XHRcbjIzOTk6XHRcdC8qXG4yNDAwOlx0XHQgKiBGaW5kIHRoZSBsYXJnZXN0IGF2YWlsYWJsZSBmcmVlIHBhZ2UgaW4gdGhlIG90aGVyIGxpc3QuIFRoaXMgcm91Z2hseVxuMjQwMTpcdFx0ICogYXBwcm94aW1hdGVzIGZpbmRpbmcgdGhlIHBhZ2VibG9jayB3aXRoIHRoZSBtb3N0IGZyZWUgcGFnZXMsIHdoaWNoXG4yNDAyOlx0XHQgKiB3b3VsZCBiZSB0b28gY29zdGx5IHRvIGRvIGV4YWN0bHkuXG4yNDAzOlx0XHQgKi9cbjI0MDQ6XHRcdGZvciAoY3VycmVudF9vcmRlciA9IE1BWF9QQUdFX09SREVSOyBjdXJyZW50X29yZGVyIFx1MDAzZT0gbWluX29yZGVyO1xuMjQwNTpcdFx0XHRcdFx0LS1jdXJyZW50X29yZGVyKSB7XG4yNDA2Olx0XHRcdGVudW0gZmFsbGJhY2tfcmVzdWx0IHJlc3VsdDtcbjI0MDc6XHRcbjI0MDg6XHRcdFx0YXJlYSA9IFx1MDAyNih6b25lLVx1MDAzZWZyZWVfYXJlYVtjdXJyZW50X29yZGVyXSk7XG4yNDA5Olx0XHRcdHJlc3VsdCA9IGZpbmRfc3VpdGFibGVfZmFsbGJhY2soYXJlYSwgY3VycmVudF9vcmRlcixcbjI0MTA6XHRcdFx0XHRcdFx0XHRzdGFydF9taWdyYXRldHlwZSwgdHJ1ZSwgXHUwMDI2ZmFsbGJhY2tfbXQpO1xuMjQxMTpcdFxuMjQxMjpcdFx0XHRpZiAocmVzdWx0ID09IEZBTExCQUNLX0VNUFRZKVxuMjQxMzpcdFx0XHRcdGNvbnRpbnVlO1xuMjQxNDpcdFxuMjQxNTpcdFx0XHRpZiAocmVzdWx0ID09IEZBTExCQUNLX05PQ0xBSU0pXG4yNDE2Olx0XHRcdFx0YnJlYWs7XG4yNDE3Olx0XG4yNDE4Olx0XHRcdHBhZ2UgPSBnZXRfcGFnZV9mcm9tX2ZyZWVfYXJlYShhcmVhLCBmYWxsYmFja19tdCk7XG4yNDE5Olx0XHRcdHBhZ2UgPSB0cnlfdG9fY2xhaW1fYmxvY2soem9uZSwgcGFnZSwgY3VycmVudF9vcmRlciwgb3JkZXIsXG4yNDIwOlx0XHRcdFx0XHRcdCAgc3RhcnRfbWlncmF0ZXR5cGUsIGZhbGxiYWNrX210LFxuMjQyMTpcdFx0XHRcdFx0XHQgIGFsbG9jX2ZsYWdzKTtcbjI0MjI6XHRcdFx0aWYgKHBhZ2UpIHtcbjI0MjM6XHRcdFx0XHR0cmFjZV9tbV9wYWdlX2FsbG9jX2V4dGZyYWcocGFnZSwgb3JkZXIsIGN1cnJlbnRfb3JkZXIsXG4yNDI0Olx0XHRcdFx0XHRcdFx0ICAgIHN0YXJ0X21pZ3JhdGV0eXBlLCBmYWxsYmFja19tdCk7XG4yNDI1Olx0XHRcdFx0cmV0dXJuIHBhZ2U7XG4yNDI2Olx0XHRcdH1cbjI0Mjc6XHRcdH1cbjI0Mjg6XHRcbjI0Mjk6XHRcdHJldHVybiBOVUxMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxNDo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzkwMgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgVGhvdWdodHMgb24gYF9fcm1xdWV1ZV9jbGFpbWAqKgoKT2theSwgc28gYF9fcm1xdWV1ZV9jbGFpbWAgaXMgZGVjbGFyZWQgYXMgYF9fYWx3YXlzX2lubGluZWAuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdHdvIHRoaW5nczogRmlyc3QsIHRoZSBjb21waWxlciBpcyBiZWluZyBpbnN0cnVjdGVkIHRvIGluc2VydCB0aGUgY29kZSBvZiB0aGlzIGZ1bmN0aW9uIGRpcmVjdGx5IGF0IGV2ZXJ5IGNhbGwgc2l0ZSwgb3B0aW1pemluZyBmb3Igc3BlZWQgYnkgYXZvaWRpbmcgdGhlIG92ZXJoZWFkIG9mIGEgZnVuY3Rpb24gY2FsbC4gU2Vjb25kLCBpZiBpdCYjMzk7cyBiZWluZyBkZWNsYXJlZCBhcyBgX19hbHdheXNfaW5saW5lYCwgaXQmIzM5O3MgbGlrZWx5IGEgcmVsYXRpdmVseSBzaG9ydCBhbmQgZnJlcXVlbnRseSB1c2VkIHBpZWNlIG9mIGNvZGUuIE5vdywgdGhlIGtleSBxdWVzdGlvbiBpczogd2hlcmUgaXMgdGhpcyBmdW5jdGlvbiBhY3R1YWxseSAqY2FsbGVkKj8gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBvZiBpdHMgY2FsbHMgaXMgZXNzZW50aWFsIGZvciBncmFzcGluZyBpdHMgcHVycG9zZSBhbmQsIHBvdGVudGlhbGx5LCBpZGVudGlmeWluZyBhbnkgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3Igc3VidGxlIGJlaGF2aW9yLiBUaW1lIHRvIHRyYWNrIGRvd24gYWxsIHRoZSBjYWxsIHNpdGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxNDo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3JtcXVldWVfY2xhaW0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9wYWdlX2FsbG9jLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vcGFnZV9hbGxvYy5jPTIzODE9c3RhdGljIF9fYWx3YXlzX2lubGluZSBzdHJ1Y3QgcGFnZSAqXG5tbS9wYWdlX2FsbG9jLmM6MjM4MjpfX3JtcXVldWVfY2xhaW0oc3RydWN0IHpvbmUgKnpvbmUsIGludCBvcmRlciwgaW50IHN0YXJ0X21pZ3JhdGV0eXBlLFxubW0vcGFnZV9hbGxvYy5jLTIzODMtXHRcdFx0XHRcdFx0dW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKVxuLS1cbm1tL3BhZ2VfYWxsb2MuYz0yNDc1PV9fcm1xdWV1ZShzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgaW50IG9yZGVyLCBpbnQgbWlncmF0ZXR5cGUsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTI1MTktXHRjYXNlIFJNUVVFVUVfQ0xBSU06XG5tbS9wYWdlX2FsbG9jLmM6MjUyMDpcdFx0cGFnZSA9IF9fcm1xdWV1ZV9jbGFpbSh6b25lLCBvcmRlciwgbWlncmF0ZXR5cGUsIGFsbG9jX2ZsYWdzKTtcbm1tL3BhZ2VfYWxsb2MuYy0yNTIxLVx0XHRpZiAocGFnZSkge1xuLS1cbm1tL3BhZ2VfYWxsb2MuYz00MTQ4PV9fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3QoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNDE2NS1cdCAqIG5lZWQgdG8gcmVjbGFpbSBzcGFjZSBpbiBhIGJsb2NrIG9mIG1hdGNoaW5nIHR5cGUsIG9yIGNsZWFyXG5tbS9wYWdlX2FsbG9jLmM6NDE2NjpcdCAqIG91dCBhbiBlbnRpcmUgYmxvY2sgdG8gYWxsb3cgX19ybXF1ZXVlX2NsYWltKCkgdG8gY29udmVydC5cbm1tL3BhZ2VfYWxsb2MuYy00MTY3LVx0ICpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTQ6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg0MzAKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk15IFRob3VnaHQgUHJvY2VzcyBvbiBgcm1xdWV1ZWAgYW5kIGBfX3JtcXVldWVgKioKCkFscmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhpcyBgcm1xdWV1ZWAgZnVuY3Rpb24uLi4gYW5kIHRoZSBjcnVjaWFsIHBvaW50IHRoYXQga2VlcHMgcG9wcGluZyB1cCBpcyBpdHMgaW50ZXJhY3Rpb24gd2l0aCBgX19ybXF1ZXVlYC4gSXQmIzM5O3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgYWN0dWFsbHksIGluIGNvbmNlcHQuIGBybXF1ZXVlYCwgZnJvbSB3aGF0IEkmIzM5O20gc2VlaW5nLCBpcyB0aGUgcHVibGljLWZhY2luZyBmdW5jdGlvbiwgdGhlIG9uZSB0aGF0IGhhbmRsZXMgdGhlICYjMzQ7cmVtb3ZlIGZyb20gcXVldWUmIzM0OyBvcGVyYXRpb24gYXMgYSB3aG9sZS4gSXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50LCBsaWtlbHkgbWFuYWdpbmcgdGhpbmdzIGxpa2UgbG9ja2luZywgZXJyb3IgY2hlY2tpbmcsIGFuZCBtYXliZSBzb21lIGhpZ2hlci1sZXZlbCBsb2dpYyBzcGVjaWZpYyB0byB0aGUgcXVldWUmIzM5O3MgY29udGV4dC4KCkJ1dCB0aGUgcmVhbCBtZWF0IG9mIHRoZSBvcGVyYXRpb24g4oCTIHRoZSAqYWN0dWFsKiByZW1vdmFsIG9mIHRoZSBlbGVtZW50IGZyb20gdGhlIHF1ZXVlJiMzOTtzIGludGVybmFsIGRhdGEgc3RydWN0dXJlcywgdGhlIG51dHMgYW5kIGJvbHRzIG9mIGl0IOKAkyAqdGhhdCYjMzk7cyogd2hlcmUgYF9fcm1xdWV1ZWAgY29tZXMgaW4uIEl0JiMzOTtzIHRoZSB3b3JraG9yc2UsIHRoZSBsb3ctbGV2ZWwgZnVuY3Rpb24gdGhhdCBkb2VzIHRoZSBoZWF2eSBsaWZ0aW5nLiBJJiMzOTttIGluZmVycmluZyB0aGF0IGBfX3JtcXVldWVgIGlzIGRlc2lnbmVkIHRvIGJlIHRoZSBjb3JlLCB0aGUgcGFydCB0aGF0JiMzOTtzIHBvdGVudGlhbGx5IGNhbGxlZCBmcm9tIG90aGVyIHBsYWNlcywgYWxsb3dpbmcgZm9yIGEgbW9yZSBncmFudWxhciBhbmQgZWZmaWNpZW50IGFwcHJvYWNoIHRvIHF1ZXVlIG1hbmlwdWxhdGlvbi4gVGhpcyBhbGxvd3MgbWUgdG8gaXNvbGF0ZSB0aGUgbW9yZSBzcGVjaWZpYyByZW1vdmFsIG9mIGFuIG9iamVjdCBmcm9tIHRoZSBxdWV1ZSBmcm9tIHRoZSBoaWdoZXIgb3JkZXIgZnVuY3Rpb25zLgoKVGhlIHBhdHRlcm4gaXMgc3RhbmRhcmQgYW5kIHF1aXRlIHdpc2U6IGBybXF1ZXVlYCBoYW5kbGVzIHRoZSBvdmVyaGVhZCwgdGhlIHB1YmxpYyBpbnRlcmZhY2UsIHRoZSAmIzM0O2d1YXJkaW5nLCYjMzQ7IGlmIHlvdSB3aWxsLCB3aGlsZSBgX19ybXF1ZXVlYCBkb2VzIHRoZSByZWFsIHdvcmsuIE1ha2VzIGRlYnVnZ2luZywgbWFpbnRlbmFuY2UsIGFuZCBwb3RlbnRpYWwgZnV0dXJlIG9wdGltaXphdGlvbnMgbXVjaCBzaW1wbGVyLiBJ4oCZbSBiZXR0aW5nIGBfX3JtcXVldWVgIGlzIGNhcmVmdWxseSBvcHRpbWl6ZWQgZm9yIHRoZSBkYXRhIHN0cnVjdHVyZSB0aGUgcXVldWUgdXNlcyDigJMgYSBsaW5rZWQgbGlzdCwgbWF5YmUgYSBjaXJjdWxhciBidWZmZXIsIHdoYXRldmVyIGl0IGlzLiBJdCYjMzk7cyB0aGUgcGVyZm9ybWFuY2UtY3JpdGljYWwgcGFydCwgdGhlIG9uZSB5b3UmIzM5O2QgcmVhbGx5IHdhbnQgdG8gc2NydXRpbml6ZSBmb3IgYW55IGJvdHRsZW5lY2tzLiBVbmRlcnN0YW5kaW5nIHRoZSBkaXZpc2lvbiBvZiBsYWJvciBiZXR3ZWVuIHRoZXNlIHR3byBpcyBrZXkgdG8gYW55IHJlYWwgYW5hbHlzaXMgb2YgdGhlIHF1ZXVlJiMzOTtzIHBlcmZvcm1hbmNlIGFuZCBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTQ6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19ybXF1ZXVlXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vcGFnZV9hbGxvYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3BhZ2VfYWxsb2MuYz0yNDc0PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgc3RydWN0IHBhZ2UgKlxubW0vcGFnZV9hbGxvYy5jOjI0NzU6X19ybXF1ZXVlKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBtaWdyYXRldHlwZSxcbm1tL3BhZ2VfYWxsb2MuYy0yNDc2LVx0ICB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MsIGVudW0gcm1xdWV1ZV9tb2RlICptb2RlKVxuLS1cbm1tL3BhZ2VfYWxsb2MuYz0yNTQ0PXN0YXRpYyBpbnQgcm1xdWV1ZV9idWxrKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTI1NTgtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjb3VudDsgJiM0MzsmIzQzO2kpIHtcbm1tL3BhZ2VfYWxsb2MuYzoyNTU5Olx0XHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IF9fcm1xdWV1ZSh6b25lLCBvcmRlciwgbWlncmF0ZXR5cGUsXG5tbS9wYWdlX2FsbG9jLmMtMjU2MC1cdFx0XHRcdFx0ICAgICAgYWxsb2NfZmxhZ3MsIFx1MDAyNnJtcW0pO1xuLS1cbm1tL3BhZ2VfYWxsb2MuYz0zMjMwPXN0cnVjdCBwYWdlICpybXF1ZXVlX2J1ZGR5KHN0cnVjdCB6b25lICpwcmVmZXJyZWRfem9uZSwgc3RydWN0IHpvbmUgKnpvbmUsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTMyNDktXG5tbS9wYWdlX2FsbG9jLmM6MzI1MDpcdFx0XHRwYWdlID0gX19ybXF1ZXVlKHpvbmUsIG9yZGVyLCBtaWdyYXRldHlwZSwgYWxsb2NfZmxhZ3MsIFx1MDAyNnJtcW0pO1xubW0vcGFnZV9hbGxvYy5jLTMyNTEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE0OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5MjAxCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogODY3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCBmb3IgRnV6emluZyBFbGlnaWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgaW4gYG1tL3BhZ2VfYWxsb2MuY2AsIHNwZWNpZmljYWxseSB0aGUgYGJvb3N0X3dhdGVybWFya2AgZnVuY3Rpb24uIEl0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZDogaXQgYWRkcyBhIGNoZWNrIGZvciBgaXNfa2R1bXBfa2VybmVsKClgIGFuZCByZXR1cm5zIGVhcmx5IGlmIGl0JiMzOTtzIGEga2R1bXAga2VybmVsLiBUaGUgY29yZSBvZiBteSBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgbWVyaXRzIGZ1enppbmcuCgpNeSBpbW1lZGlhdGUgaW5zdGluY3QsIGdpdmVuIG15IGV4cGVyaWVuY2UsIGlzIHRvIHNheSAqbm8qLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBjb2RlIHRoYXQgaXMgZnVuY3Rpb25hbGx5IHVucmVhY2hhYmxlIHdpdGhpbiB0aGUgc3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudCBJJiMzOTttIGZhbWlsaWFyIHdpdGgsIHdoaWNoIGlzIEdDRSBvciBRRU1VIHVzaW5nIHN5emthbGxlci4gVGhlIGBpc19rZHVtcF9rZXJuZWwoKWAgZnVuY3Rpb24gcmVsaWVzIG9uIHRoZSBgZWxmY29yZWhkcl9hZGRyYCB2YXJpYWJsZS4gSW4gYSBzdGFuZGFyZCBzeXprYWxsZXIgc2V0dXAsIGBlbGZjb3JlaGRyX2FkZHJgIGlzIGFsd2F5cyBlcXVhbCB0byBgRUxGQ09SRV9BRERSX01BWGAsIHNvIGBpc19rZHVtcF9rZXJuZWwoKWAgKmFsd2F5cyogcmV0dXJucyBmYWxzZS4gVGhlIG5ldyBgcmV0dXJuIGZhbHNlO2AgcGF0aCBpcyBuZXZlciB0YWtlbiB1bmRlciBmdXp6aW5nIGNvbmRpdGlvbnMuIEl0JiMzOTtzIGVzc2VudGlhbGx5IGRlYWQgY29kZSBpbiBteSB3b3JsZC4KCk5vdywgbXkgbWluZCBzdGFydHMgZ29pbmcgdGhyb3VnaCB0aGUgdHJpYWdlIHBoaWxvc29waHkuIEFtIEkgbWlzc2luZyBzb21ldGhpbmc/IEkgc3RhcnQgZ29pbmcgdGhyb3VnaCB0aGUgY3JpdGVyaWEsIHdoaWNoIGlzIGEga2V5IHBhcnQgb2YgbXkgdHJpYWdlIHN5c3RlbS4gSXQgc2F5cyBmdXp6aW5nIHNob3VsZCBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywgYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zLiBJdCBlbXBoYXNpemVzICpyZWFjaGFiaWxpdHkqOiAmIzM0O0Z1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLi4uJiMzNDsgVGhpcyBzZWVtcyBwcmV0dHkgY2xlYXI6IGlmIHRoZSBjb2RlIGRvZXNuJiMzOTt0IGV4ZWN1dGUgaW4gYSBzdGFuZGFyZCBlbnZpcm9ubWVudCwgaXQmIzM5O3Mgbm90IHdvcnRoIGZ1enppbmcuIFRoZSBwYXRjaCAqYWRkcyogYSBjaGVjaywgYnV0IHRoYXQgY2hlY2sgaXMgbmV2ZXIgdHJ1ZSBpbiB0aGUgZnV6emluZyBlbnZpcm9ubWVudCBJJiMzOTttIHVzaW5nLgoKQnV0IHRoZSB0cmlhZ2Ugc3lzdGVtIGFsc28gaGFzIG5lZ2F0aXZlIGNyaXRlcmlhLCB0aGluZ3MgdGhhdCBhdXRvbWF0aWNhbGx5IHNheSAmIzM0O25vdCB3b3J0aCBmdXp6aW5nJiMzNDsuIFRoZXJlIGFyZSB0aHJlZSBtYWluIGFyZWFzOiBub24ta2VybmVsIGNoYW5nZXMsIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZSwgYW5kIHVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRocy4gVGhpcyBkb2VzbiYjMzk7dCBmYWxsIHVuZGVyIG5vbi1rZXJuZWwgb3IgaGFyZHdhcmUuIEl0IGxvb2tzIGxpa2UgaXQgKm1pZ2h0KiBmYWxsIHVuZGVyIHVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRocy4gTm93IEkgYW0gdGhpbmtpbmcgdGhhdCB0aGlzICptaWdodCogYmUgYW4gdW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGggYmVjYXVzZSBpdCB3aWxsIG5ldmVyIGJlIHRydWUgdW5kZXIgb3VyIGZ1enppbmcgc2V0dXAuIEkgbm90aWNlIHRoZSBidWxsZXQgZXhhbXBsZXMgb2YgdW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzLCBhbmQgdGhpbmssIGFyZSB0aGUgYnVsbGV0IGV4YW1wbGVzIGV4aGF1c3RpdmUgb3IganVzdCBleGFtcGxlcz8KCk5vdywgaGVyZSYjMzk7cyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nIGFuZCB3aGVyZSBJIHJlYWxseSBuZWVkIHRvIGJlIGNhcmVmdWwuIFRoZSBwYXRjaCAqZG9lcyogdG91Y2ggZXhlY3V0YWJsZSBjb2Rl4oCUdGhlIGBpZmAgc3RhdGVtZW50IGl0c2VsZiwgdGhlIENQVSAqZXhlY3V0ZXMqIHRoZSBjaGVjayEgRXZlbiB0aG91Z2ggdGhlIGJyYW5jaCBpcyAqbmV2ZXIqIHRha2VuLCB0aGUgYGlmYCAqaXMqIHJlYWNoZWQgYW5kIGV4ZWN1dGVkLiBEb2VzIHRoYXQgbWFrZSB0aGlzICYjMzQ7V29ydGhGdXp6aW5nPXRydWUmIzM0Oz8gVGhlIHRyaWFnZSBkb2Mgc2F5cyAmIzM0O1JldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLi4uJiMzNDsuIFRoaXMgaXMgaW4gYSBjb3JlIHN1YnN5c3RlbSAoYG1tL2ApLgoKQnV0IHRoZW4gSSByZW1lbWJlciBJIGhhdmUgdG8gdGhpbmsgYWJvdXQgJiMzNDtGb2N1c1N5bWJvbHMmIzM0Oy4gSSBjYW4mIzM5O3QganVzdCBsaXN0IGFueSBvbGQgZnVuY3Rpb24uIEkgY2FuJiMzOTt0IGxpc3QgJiMzNDtnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMmIzM0Oy4gSSBhbSBsb29raW5nIGF0IGBib29zdF93YXRlcm1hcmsoKWAsIHdoaWNoIGlzIGBzdGF0aWMgaW5saW5lYCwgYW5kIGlzIG9ubHkgY2FsbGVkIHdpdGhpbiB0aGUgYWxsb2NhdGlvbiBmYWxsYmFjayBwYXRoLiBUaGF0JiMzOTtzIGEgbm8tZ28gZm9yIEZvY3VzU3ltYm9scy4gSSBhbSBzdGFydGluZyB0byB0aGluayB0aGF0IGV2ZW4gaWYgJiMzNDtXb3J0aEZ1enppbmcmIzM0OyBpcyB0cnVlLCB0aGUgRm9jdXNTeW1ib2xzIGFuZCBjb25maWd1cmF0aW9ucyBhcmUgbWVhbmluZ2xlc3MgaW4gdGhpcyBjYXNlLgoKVGhlbiwgdGhlcmUgaXMgYW4gaW1wb3J0YW50IGRldGFpbDogdGhlIGNvZGUgaXRzZWxmIG9ubHkgY2hlY2tzIGBpc19rZHVtcF9rZXJuZWwoKWAgKmlmKiBgQ09ORklHX0NSQVNIX0RVTVBgIGlzIGVuYWJsZWQhIEFuZCwgaWYgaXQgaXMgZGlzYWJsZWQsIGBpc19rZHVtcF9rZXJuZWwoKWAgKmFsd2F5cyogcmV0dXJucyBgZmFsc2VgLgoKU28sIGZyb20gYSBwcmFjdGljYWwgc3RhbmRwb2ludCwgdGhlIHBhdGNoIGRvZXNuJiMzOTt0IGFkZCBhbnkgKm5ldyogZnVuY3Rpb25hbGl0eSBvciBwb3RlbnRpYWwgYnVncyB0byB3aGF0IEkmIzM5O20gZnV6emluZy4gVW5kZXIgc3RhbmRhcmQgc3l6a2FsbGVyLCB0aGUgcGF0Y2ggaGFzIG5vIGVmZmVjdCBvbiByZWFjaGFiaWxpdHkuIFRoZSBjb21wYXJpc29uIGluc2lkZSB0aGUgYGlmYCBpcyBleGVjdXRlZCwgYnV0IHRoZSBzdWJzZXF1ZW50IGNvbmRpdGlvbmFsIGByZXR1cm4gZmFsc2U7YCBpcyBub3QuIFVsdGltYXRlbHksIGV2ZW4gdGhvdWdoIHRoZSBjaGVjayBpbnN0cnVjdGlvbiBpdHNlbGYgZXhlY3V0ZXMsIHRoZSB1bnJlYWNoYWJsZSBjb250cm9sIGZsb3cgcmVuZGVycyBpdCB1c2VsZXNzIGZvciBzdGFuZGFyZCBmdXp6aW5nLiBUaGUgcGF0Y2ggKm1pZ2h0KiBiZSByZWxldmFudCBmb3IgYSBrZHVtcCBjYXB0dXJlIGtlcm5lbCAod2hpY2ggaXMgbm90IGZ1enplZCBieSBzeXprYWxsZXIpLCBidXQgaXQgZG9lc24mIzM5O3QgYWRkIGFueSBuZXcgZnV6emluZyB0YXJnZXRzIGluIG15IGRvbWFpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTQ6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENSQVNIX0RVTVAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL0tjb25maWcua2V4ZWM9ODk9Y29uZmlnIEtFWEVDX0pVTVBcbi0tXG5rZXJuZWwvS2NvbmZpZy5rZXhlYy05Ni1cbmtlcm5lbC9LY29uZmlnLmtleGVjOjk3OmNvbmZpZyBDUkFTSF9EVU1QXG5rZXJuZWwvS2NvbmZpZy5rZXhlYy05OC1cdGJvb2wgXCYjMzQ7a2VybmVsIGNyYXNoIGR1bXBzXCYjMzQ7XG4tLVxua2VybmVsL0tjb25maWcua2V4ZWM9MTI5PWNvbmZpZyBDUkFTSF9ETV9DUllQVF9DT05GSUdTXG4tLVxua2VybmVsL0tjb25maWcua2V4ZWMtMTM1LVxua2VybmVsL0tjb25maWcua2V4ZWM6MTM2OmNvbmZpZyBDUkFTSF9EVU1QX0tVTklUX1RFU1Rcbmtlcm5lbC9LY29uZmlnLmtleGVjLTEzNy1cdHRyaXN0YXRlIFwmIzM0O1VuaXQgVGVzdHMgZm9yIGtlcm5lbCBjcmFzaCBkdW1wc1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE0OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4OTQ5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBLZXhlYyBLY29uZmlnKioKCk9rYXksIHNvIEkgbmVlZCB0byB6ZXJvIGluIG9uIHNvbWV0aGluZyByZWxhdGVkIHRvIGBrZXhlY2AgY29uZmlndXJhdGlvbi4gSSByZWNhbGwgYSBzcGVjaWZpYyBzZWN0aW9uIHdpdGhpbiB0aGUgYGtlcm5lbC9LY29uZmlnLmtleGVjYCBmaWxlLCBhbmQgSSYjMzk7bSBwcmV0dHkgc3VyZSB0aGUga2V5IHNldHRpbmdzIEkmIzM5O20gaW50ZXJlc3RlZCBpbiBhcmUgYXJvdW5kIGxpbmUgOTcuIExldCYjMzk7cyBuYXZpZ2F0ZSB0aGVyZSBhbmQgc2VlIHdoYXQmIzM5O3Mgd2hhdC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgd2l0aGluIHRoYXQgcmFuZ2UuIEl0JiMzOTtzIHRpbWUgdG8gZXhhbWluZSB0aGUgb3B0aW9ucyBhdmFpbGFibGUgdGhlcmUgdG8gdW5kZXJzdGFuZCBob3cgdGhleSBhcmUgaW50ZXJhY3RpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE0OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL0tjb25maWcua2V4ZWMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDkwOlx0XHRib29sIFwmIzM0O2tleGVjIGp1bXBcJiMzNDtcbiAgOTE6XHRcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19LRVhFQ19KVU1QXG4gIDkyOlx0XHRkZXBlbmRzIG9uIEtFWEVDIFx1MDAyNlx1MDAyNiBISUJFUk5BVElPTlxuICA5MzpcdFx0aGVscFxuICA5NDpcdFx0ICBKdW1wIGJldHdlZW4gb3JpZ2luYWwga2VybmVsIGFuZCBrZXhlY2VkIGtlcm5lbCBhbmQgaW52b2tlXG4gIDk1Olx0XHQgIGNvZGUgaW4gcGh5c2ljYWwgYWRkcmVzcyBtb2RlIHZpYSBLRVhFQ1xuICA5NjpcdFxuICA5NzpcdGNvbmZpZyBDUkFTSF9EVU1QXG4gIDk4Olx0XHRib29sIFwmIzM0O2tlcm5lbCBjcmFzaCBkdW1wc1wmIzM0O1xuICA5OTpcdFx0ZGVmYXVsdCBBUkNIX0RFRkFVTFRfQ1JBU0hfRFVNUFxuIDEwMDpcdFx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX0NSQVNIX0RVTVBcbiAxMDE6XHRcdGRlcGVuZHMgb24gS0VYRUNfQ09SRVxuIDEwMjpcdFx0c2VsZWN0IFZNQ09SRV9JTkZPXG4gMTAzOlx0XHRzZWxlY3QgQ1JBU0hfUkVTRVJWRVxuIDEwNDpcdFx0aGVscFxuIDEwNTpcdFx0ICBHZW5lcmF0ZSBjcmFzaCBkdW1wIGFmdGVyIGJlaW5nIHN0YXJ0ZWQgYnkga2V4ZWMuXG4gMTA2Olx0XHQgIFRoaXMgc2hvdWxkIGJlIG5vcm1hbGx5IG9ubHkgc2V0IGluIHNwZWNpYWwgY3Jhc2ggZHVtcCBrZXJuZWxzXG4gMTA3Olx0XHQgIHdoaWNoIGFyZSBsb2FkZWQgaW4gdGhlIG1haW4ga2VybmVsIHdpdGgga2V4ZWMtdG9vbHMgaW50b1xuIDEwODpcdFx0ICBhIHNwZWNpYWxseSByZXNlcnZlZCByZWdpb24gYW5kIHRoZW4gbGF0ZXIgZXhlY3V0ZWQgYWZ0ZXJcbiAxMDk6XHRcdCAgYSBjcmFzaCBieSBrZHVtcC9rZXhlYy4gVGhlIGNyYXNoIGR1bXAga2VybmVsIG11c3QgYmUgY29tcGlsZWRcbiAxMTA6XHRcdCAgdG8gYSBtZW1vcnkgYWRkcmVzcyBub3QgdXNlZCBieSB0aGUgbWFpbiBrZXJuZWwgb3IgQklPUyB1c2luZ1xuIDExMTpcdFx0ICBQSFlTSUNBTF9TVEFSVCwgb3IgaXQgbXVzdCBiZSBidWlsdCBhcyBhIHJlbG9jYXRhYmxlIGltYWdlXG4gMTEyOlx0XHQgIChDT05GSUdfUkVMT0NBVEFCTEU9eSkuXG4gMTEzOlx0XHQgIEZvciBtb3JlIGRldGFpbHMgc2VlIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2R1bXAva2R1bXAucnN0XG4gMTE0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE0OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5NTMzCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzUyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIERlY2lzaW9uIGZvciBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBXZSYjMzk7cmUgbG9va2luZyBhdCBhIHBhdGNoIG1vZGlmeWluZyBgbW0vcGFnZV9hbGxvYy5jYCBhbmQgbmVlZCB0byBkZWNpZGUgaWYgaXQmIzM5O3Mgd29ydGggZnV6emluZy4gSSBuZWVkIHRvIGZvbGxvdyB0aGUgcnVsZXMgdmVyeSBjYXJlZnVsbHkgaGVyZSwgcGFydGljdWxhcmx5IHRoZSAmIzM0O09OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkuLi4mIzM0OyB3b3JkaW5nIGluIFNlY3Rpb24gMi4KClRoZSBjb3JlIG9mIHRoZSBtYXR0ZXIgaXMgd2hldGhlciB0aGlzIHBhdGNoIGZhbGxzIGludG8gdGhlICYjMzQ7V29ydGhGdXp6aW5nPWZhbHNlJiMzNDsgY2F0ZWdvcmllcy4gIFdlIGFyZSBleHBsaWNpdGx5IHRvbGQgdG8gdHJlYXQgTkZDSSBvciByZWZhY3RvcmluZyBjbGFpbXMgd2l0aCBza2VwdGljaXNtLCB3aGljaCBpcyBzbWFydC4gIFdlIG5lZWQgdG8gbG9vayBhdCB3aGF0JiMzOTtzIGJlaW5nIG1vZGlmaWVkLiBJIHNlZSBgYm9vc3Rfd2F0ZXJtYXJrYCBpcyBtb2RpZmllZCwgd2hpY2ggaXMgd2l0aGluIG1lbW9yeSBtYW5hZ2VtZW50LCBhIGNvcmUgc3Vic3lzdGVtLiBTZWN0aW9uIDMgY2xlYXJseSBzdGF0ZXMgdGhhdCAmIzM0O0FueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLi4uJiMzNDsgdHJpZ2dlcnMgYFdvcnRoRnV6emluZz10cnVlYC4KCkkgZG8gc2VlIHRoZSBtZW50aW9uIG9mIGtkdW1wLCBidXQgdGhlIGRlc2NyaXB0aW9uIGlzIGNhcmVmdWwgdG8gc2F5IHRoYXQgY3Jhc2ggZHVtcCBrZXJuZWxzIGFyZSBzcGVjaWFsIGNhc2VzIGxvYWRlZCB2aWEga2V4ZWMgYW5kIHRoYXQgdGhpcyBzaG91bGRuJiMzOTt0IG5vcm1hbGx5IGJlIHNldCBpbiBtYWluIGtlcm5lbHMuIEV2ZW4gaWYgYSBWTSBpc24mIzM5O3QgY29uZmlndXJlZCBmb3Iga2R1bXAsIHdlIG5lZWQgdG8gY29uc2lkZXIgaWYgaXQgKmNvdWxkKiBiZSBjb25maWd1cmVkIGZvciBrZHVtcC4KCk5vdyBsZXQmIzM5O3MgZGVsdmUgaW50byBTZWN0aW9uIDIuICBUaGUgJiMzNDtVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHMmIzM0OyBjYXRlZ29yeSBuZWVkcyBhIHZlcnkgY2xvc2UgbG9vay4gIERvZXMgbW9kaWZ5aW5nIGBtbS9wYWdlX2FsbG9jLmNgIG1lYW4gaXQmIzM5O3MgdW5yZWFjaGFibGUgZHVlIHRvIGJlaW5nIGEgZHJpdmVyIHRlYXJkb3duIG9yIGFyY2gtZXhjbHVzaXZlIGNvZGU/ICAqTm8sIGl0IGRvZXNuJiMzOTt0Ki4gVGhlIGNvZGUgY2xlYXJseSBpc24mIzM5O3QgZXhjbHVzaXZlIHRvIGFuIGFyY2hpdGVjdHVyZSwgYW5kIGBtbS9wYWdlX2FsbG9jLmNgIGlzIG5vdCBhIGRyaXZlciB0ZWFyZG93biBjYWxsYmFjay4gVGhlICYjMzQ7c3RyaWN0bHkmIzM0OyBpcyB0aGUga2V5LgoKU28sIGlmIGl0IGRvZXMgbm90IGZhbGwgKnN0cmljdGx5KiB3aXRoaW4gb25lIG9mIHRoZSBgV29ydGhGdXp6aW5nPWZhbHNlYCBjYXRlZ29yaWVzLCB0aGVuIGl0ICptdXN0KiBiZSBgV29ydGhGdXp6aW5nPXRydWVgLgoKTm93IGxldCYjMzk7cyBjb25zaWRlciB0aGUgRm9jdXNTeW1ib2xzIGFuZCBFbmFibGVDb25maWdzLiBgYm9vc3Rfd2F0ZXJtYXJrYCBpcyBhIHN0YXRpYyBpbmxpbmUsIHNvIGNvdmVyYWdlIGZpbHRlcnMgY2FuJiMzOTt0IHRhcmdldCBpdCBkaXJlY3RseS4gSG93ZXZlciwgdGhlIGRvY3VtZW50YXRpb24gZ2l2ZXMgZ29vZCBhZHZpY2U6IHdlIG11c3QgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIgZnVuY3Rpb25zLgoKU2luY2UgdGhlIHBhdGNoIHNwZWNpZmljYWxseSBtb2RpZmllcyBgYm9vc3Rfd2F0ZXJtYXJrYCBhbmQgYHRyeV90b19jbGFpbV9ibG9ja2AsIHRoYXQgbG9naWMgbmVlZHMgc3BlY2lmaWMgdGVzdGluZy4gU28gSSBhbSBnb2luZyB0byBmb2N1cyBvbiB0aG9zZSBjYWxsZXJzLiAgVGhleSBhcmUgKm5vdCogdWJpcXVpdG91cyBmdW5jdGlvbnMuIFRoZXkgYXJlICpzcGVjaWZpYyogdG8gd2F0ZXJtYXJrIGJvb3N0aW5nIGFuZCBwYWdlYmxvY2sgY2xhaW1pbmcsIG5vdCB0byBzb21ldGhpbmcgbGlrZSBga21hbGxvY2AuCgpGaW5hbGx5LCByZW1lbWJlciwgdGhlIGdvYWwgaGVyZSBpcyB0byBmaW5kIGJ1Z3MuIFNvIEkgTVVTVCBOT1QgbWFrZSBhc3N1bXB0aW9ucyBhYm91dCBrZHVtcCBrZXJuZWxzIG9yIHN5emthbGxlciBWTXMgdG8gZ2V0IGEgZmFsc2UgbmVnYXRpdmUuIFRoZSBpbnN0cnVjdGlvbnMgdmVyeSBjbGVhcmx5IGVtcGhhc2l6ZSB0aGF0IHdlICptdXN0KiBmdXp6IHJlYWNoYWJsZSBjb2RlLCBzbyBrZHVtcCBpc24mIzM5O3QgYW4gZXhjdXNlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBmdXp6aW5nIGlzIGFzICplZmZlY3RpdmUqIGFzIHBvc3NpYmxlLgoKSGVyZSYjMzk7cyBteSBldmFsdWF0aW9uOgoKKiAgICoqV29ydGhGdXp6aW5nKio6IGB0cnVlYAoqICAgKipFbmFibGVDb25maWdzKio6IE5vbmUuCiogICAqKkZvY3VzU3ltYm9scyoqOiBgdHJ5X3RvX2NsYWltX2Jsb2NrYAoqICAgKipSZWFzb25pbmcqKjogVGhlIHBhdGNoIG1vZGlmaWVzIGBtbS9wYWdlX2FsbG9jLmNgLCBzcGVjaWZpY2FsbHkgYGJvb3N0X3dhdGVybWFya2AgYW5kIGB0cnlfdG9fY2xhaW1fYmxvY2tgIGluIG1lbW9yeSBtYW5hZ2VtZW50LiBUaGlzIGRvZXNuJiMzOTt0IGZhbGwgaW50byB0aGUgZXhwbGljaXRseSBkZWZpbmVkICYjMzQ7V29ydGhGdXp6aW5nPWZhbHNlJiMzNDsgY2F0ZWdvcmllcywgYW5kIGJlY2F1c2UgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaXQgbXVzdCBiZSBmdXp6ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE0OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3dhdGVybWFya19ib29zdF9mYWN0b3ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9wYWdlX2FsbG9jLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vcGFnZV9hbGxvYy5jPTI3Nz1pbnQgdXNlcl9taW5fZnJlZV9rYnl0ZXMgPSAtMTtcbm1tL3BhZ2VfYWxsb2MuYzoyNzg6c3RhdGljIGludCB3YXRlcm1hcmtfYm9vc3RfZmFjdG9yIF9fcmVhZF9tb3N0bHkgPSAxNTAwMDtcbm1tL3BhZ2VfYWxsb2MuYy0yNzktc3RhdGljIGludCB3YXRlcm1hcmtfc2NhbGVfZmFjdG9yID0gMTA7XG4tLVxubW0vcGFnZV9hbGxvYy5jPTIxNzY9c3RhdGljIGlubGluZSBib29sIGJvb3N0X3dhdGVybWFyayhzdHJ1Y3Qgem9uZSAqem9uZSlcbi0tXG5tbS9wYWdlX2FsbG9jLmMtMjE3OS1cbm1tL3BhZ2VfYWxsb2MuYzoyMTgwOlx0aWYgKCF3YXRlcm1hcmtfYm9vc3RfZmFjdG9yKVxubW0vcGFnZV9hbGxvYy5jLTIxODEtXHRcdHJldHVybiBmYWxzZTtcbi0tXG5tbS9wYWdlX2FsbG9jLmMtMjE5OS1cdG1heF9ib29zdCA9IG11bHRfZnJhYyh6b25lLVx1MDAzZV93YXRlcm1hcmtbV01BUktfSElHSF0sXG5tbS9wYWdlX2FsbG9jLmM6MjIwMDpcdFx0XHR3YXRlcm1hcmtfYm9vc3RfZmFjdG9yLCAxMDAwMCk7XG5tbS9wYWdlX2FsbG9jLmMtMjIwMS1cbi0tXG5tbS9wYWdlX2FsbG9jLmM9Njk0NT1zdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBwYWdlX2FsbG9jX3N5c2N0bF90YWJsZVtdID0ge1xuLS1cbm1tL3BhZ2VfYWxsb2MuYy02OTU0LVx0e1xubW0vcGFnZV9hbGxvYy5jOjY5NTU6XHRcdC5wcm9jbmFtZVx0PSBcJiMzNDt3YXRlcm1hcmtfYm9vc3RfZmFjdG9yXCYjMzQ7LFxubW0vcGFnZV9hbGxvYy5jOjY5NTY6XHRcdC5kYXRhXHRcdD0gXHUwMDI2d2F0ZXJtYXJrX2Jvb3N0X2ZhY3Rvcixcbm1tL3BhZ2VfYWxsb2MuYzo2OTU3Olx0XHQubWF4bGVuXHRcdD0gc2l6ZW9mKHdhdGVybWFya19ib29zdF9mYWN0b3IpLFxubW0vcGFnZV9hbGxvYy5jLTY5NTgtXHRcdC5tb2RlXHRcdD0gMDY0NCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTQ6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQyMDgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzNDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIFdvcnRoRnV6emluZywgRm9jdXNTeW1ib2xzLCBhbmQgRW5hYmxlQ29uZmlncyoqCgpPa2F5LCBoZXJlJiMzOTtzIHRoZSBicmVha2Rvd24gb2YgbXkgdGhvdWdodCBwcm9jZXNzLiBGaXJzdCwgSSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoLCBzcGVjaWZpY2FsbHkgdGhlIGNoYW5nZXMgd2l0aGluIGBtbS9wYWdlX2FsbG9jLmNgIGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCBgaW5jbHVkZS9saW51eC9jcmFzaF9kdW1wLmhgLCB3YXJyYW50cyBmdXp6aW5nLiBUaGUga2V5IGZ1bmN0aW9uIGJlaW5nIG1vZGlmaWVkIGhlcmUgaXMgYGJvb3N0X3dhdGVybWFya2AgY2FsbGVkIGJ5IGB0cnlfdG9fY2xhaW1fYmxvY2tgLgoKVGhlIGNydWNpYWwgcXVlc3Rpb24gaXMsIGFjY29yZGluZyB0byB0aGUgcHJvdmlkZWQgdHJpYWdlIHJ1bGVzLCBzaG91bGQgYFdvcnRoRnV6emluZ2AgYmUgYHRydWVgIG9yIGBmYWxzZWA/IFRoZSBuZWdhdGl2ZSBjcml0ZXJpYSAod2hlbiB0byByZXR1cm4gZmFsc2UpIHByb3ZpZGUgYSB2ZXJ5IHNwZWNpZmljIHNldCBvZiBjb25kaXRpb25zLiBJJiMzOTt2ZSBjYXJlZnVsbHkgcmV2aWV3ZWQgdGhlc2UsIGFuZCBpdCYjMzk7cyBjbGVhciB0aGF0IHRoZSBtb2RpZmllZCBjb2RlICpkb2VzbiYjMzk7dCogZmFsbCB1bmRlciBhbnkgb2YgdGhvc2UgY2F0ZWdvcmllcy4gSXQgaXNuJiMzOTt0IG5vbi1rZXJuZWwgY29kZSwgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlLCBvciB1bnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHMuIFRoZSBjb2RlIGZhbGxzIHNxdWFyZWx5IGludG8gJiMzNDtDb3JlIFN1YnN5c3RlbXM6IEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLi4uJiMzNDsgLSBhcyB0aGUgcGF0Y2ggbW9kaWZpZXMgYGJvb3N0X3dhdGVybWFyaygpYCBpbiBgbW0vcGFnZV9hbGxvYy5jYCwgcGFydCBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBFdmVuIHRob3VnaCB0aGUgYGlmIChpc19rZHVtcF9rZXJuZWwoKSlgIGNoZWNrIG1pZ2h0IG9mdGVuIGV2YWx1YXRlIHRvIGBmYWxzZWAsIHRoZSBjb2RlIHBhdGggaXMgc3RpbGwgcmVhY2hhYmxlIGFuZCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhIHJ1bnRpbWUgY2hlY2suIFRoZXJlZm9yZSwgYmFzZWQgb24gdGhlIHByaW5jaXBsZSB0byBub3QgdHJ1c3QgY2xhaW1zIG9mICYjMzQ7bm8gZnVuY3Rpb25hbCBjaGFuZ2UmIzM0OywgSSYjMzk7bSBjb25maWRlbnQgYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIGB0cnVlYC4KCk5leHQsIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgYEZvY3VzU3ltYm9sc2AuIFRoZSBnb2FsIGhlcmUgaXMgdG8gZ3VpZGUgdGhlIGZ1enplciB0b3dhcmRzIHRoZSBzcGVjaWZpYyBjb2RlIGNoYW5nZXMsIGF2b2lkaW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zLiBgYm9vc3Rfd2F0ZXJtYXJrKClgIGFuZCBpdHMgY2FsbGVyLCBgdHJ5X3RvX2NsYWltX2Jsb2NrKClgLCBhcmUgdGhlIG1vc3QgcmVsZXZhbnQgZnVuY3Rpb25zIGltcGFjdGVkIGJ5IHRoaXMgcGF0Y2gsIHdoZXJlIGBib29zdF93YXRlcm1hcmtgIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGNvbnRhaW5zIHRoZSBjaGFuZ2UuIEkgYmVsaWV2ZSBib3RoIGZ1bmN0aW9ucyBhcmUgbmVjZXNzYXJ5IHRvIHByb3ZpZGUgYWRlcXVhdGUgY292ZXJhZ2UgZm9yIGZ1enppbmcuIGBpc19rZHVtcF9rZXJuZWwoKWAgaXRzZWxmLCBiZWluZyBhIHN0YXRpYyBpbmxpbmUsIGlzIG5vdCBhIGRpc3RpbmN0IHN5bWJvbCBhbmQgc2hvdWxkbiYjMzk7dCBiZSBsaXN0ZWQuCgpGaW5hbGx5LCBJIG5lZWQgdG8gZGV0ZXJtaW5lIGBFbmFibGVDb25maWdzYC4gVGhlIGNvcmUgY29kZSBpbiBgbW0vcGFnZV9hbGxvYy5jYCBpcyBhbHdheXMgYnVpbHQgaW50byB0aGUga2VybmVsLiBUaGUgY2hlY2sgaXM6CgpgYGBjCmlmIChpc19rZHVtcF9rZXJuZWwoKSkKYGBgClRoZSBgaXNfa2R1bXBfa2VybmVsKClgIGlzIG9ubHkgZGVwZW5kZW50IG9uIGBDT05GSUdfQ1JBU0hfRFVNUGAgd2hpY2ggaXRzZWxmIGRlcGVuZHMgb24gYEtFWEVDX0NPUkVgLiBUaGVyZWZvcmUsIGBDT05GSUdfQ1JBU0hfRFVNUD15YCBhbmQgdGhlcmVmb3JlIGBLRVhFQ19DT1JFPXlgLiBJZiwgaG93ZXZlciwgYENPTkZJR19DUkFTSF9EVU1QYCBpcyBub3QgZW5hYmxlZCwgdGhlbiBgaXNfa2R1bXBfa2VybmVsYCByZXNvbHZlcyB0byBgZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxNDo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS0VYRUNfQ09SRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9LY29uZmlnLmtleGVjJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9LY29uZmlnLmtleGVjPTg9Y29uZmlnIFZNQ09SRV9JTkZPXG4tLVxua2VybmVsL0tjb25maWcua2V4ZWMtMTAtXG5rZXJuZWwvS2NvbmZpZy5rZXhlYzoxMTpjb25maWcgS0VYRUNfQ09SRVxua2VybmVsL0tjb25maWcua2V4ZWMtMTItXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE0OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4MzEyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyB0aGUgYEtFWEVDX0NPUkVgIFNlbGVjdGlvbi9TZXR0aW5nKioKCkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgb3JpZ2luIGFuZCBpbXBsaWNhdGlvbnMgb2YgYEtFWEVDX0NPUkVgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGNvbmRpdGlvbmFsIGxvZ2ljLiBXaGVyZSBkb2VzIHRoaXMgc3BlY2lmaWMgbWFjcm8gZ2V0IHNlbGVjdGVkIG9yIGRlZmluZWQgd2l0aGluIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtPyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBhbmQgaG93IGBLRVhFQ19DT1JFYCBpcyBiZWluZyB0dXJuZWQgb24gb3Igb2ZmLiBUaGF0IG1lYW5zIEkmIzM5O20gZ29pbmcgdG8gaGF2ZSB0byBkaWcgdGhyb3VnaCBLY29uZmlnIGZpbGVzLCBNYWtlZmlsZXMsIGFuZCBhbnkgcmVsZXZhbnQgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24uIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGRlcGVuZGVuY2llcywgdGhlIGJ1aWxkLXRpbWUgY29uZGl0aW9ucywgYW5kIGFueSBpbnRlcmFjdGlvbnMgdGhpcyBzZXR0aW5nIGhhcyB3aXRoIG90aGVyIGZlYXR1cmVzLiBVbmRlcnN0YW5kaW5nIHRoZSBzZWxlY3Rpb24gcHJvY2VzcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgb3ZlcmFsbCBiZWhhdmlvciBvZiB0aGUgc3lzdGVtLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGltbWVkaWF0ZSBpbXBhY3RzIGFyZSB0b28sIGFuZCBob3cgaXQgZWZmZWN0cyBmdW5jdGlvbmFsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxNDo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgS0VYRUNfQ09SRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9LY29uZmlnLmtleGVjJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9LY29uZmlnLmtleGVjPTIwPWNvbmZpZyBLRVhFQ1xuLS1cbmtlcm5lbC9LY29uZmlnLmtleGVjLTIyLVx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX0tFWEVDXG5rZXJuZWwvS2NvbmZpZy5rZXhlYzoyMzpcdHNlbGVjdCBLRVhFQ19DT1JFXG5rZXJuZWwvS2NvbmZpZy5rZXhlYy0yNC1cdGhlbHBcbi0tXG5rZXJuZWwvS2NvbmZpZy5rZXhlYz0zOD1jb25maWcgS0VYRUNfRklMRVxuLS1cbmtlcm5lbC9LY29uZmlnLmtleGVjLTQxLVx0c2VsZWN0IENSWVBUT19MSUJfU0hBMjU2XG5rZXJuZWwvS2NvbmZpZy5rZXhlYzo0MjpcdHNlbGVjdCBLRVhFQ19DT1JFXG5rZXJuZWwvS2NvbmZpZy5rZXhlYy00My1cdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTQ6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDg3MDUKCQkJCQkJCW91dHB1dDogMTI0CgkJCQkJCQl0aG91Z2h0czogMjczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJiMzOTtzIEltcGFjdCoqCgpPa2F5LCBzbyB0aGlzIGBDUkFTSF9EVU1QYCBmZWF0dXJlIHJlbGllcyBvbiBgS0VYRUNfQ09SRWAsIHdoaWNoIGl0c2VsZiBjYW4gYmUgZW5hYmxlZCBlaXRoZXIgdGhyb3VnaCBgS0VYRUNgIG9yIGBLRVhFQ19GSUxFYC4gVGhpcyBpcyBpbXBvcnRhbnQsIGJlY2F1c2UgYENSQVNIX0RVTVBgIGlzIHdoYXQgZW5hYmxlcyB0aGUgcmF0aGVyIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIG9mIGBpc19rZHVtcF9rZXJuZWwoKWAuIEkgbmVlZCB0byBlbnN1cmUgSSYjMzk7dmUgZ290IGV2ZXJ5dGhpbmcgc3RyYWlnaHQuCgpMZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIGZ1cnRoZXIgdG8gYmUgYWJzb2x1dGVseSBzdXJlOgoKKiAgICoqYFdvcnRoRnV6emluZ2A6IFRydWUuKiogVGhpcyBpcyBnb29kLiBUaGUgcGF0Y2ggdG91Y2hlcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgaW4gYG1tL3BhZ2VfYWxsb2MuY2AsIHNwZWNpZmljYWxseSB0aGUgYGJvb3N0X3dhdGVybWFya2AgZnVuY3Rpb24uIFRoZSBrZXkgaGVyZSBpcyB0aGF0IGl0IGludHJvZHVjZXMgYSBjaGVjayBmb3IgYGlzX2tkdW1wX2tlcm5lbCgpYCBkdXJpbmcgcGFnZWJsb2NrIGNsYWltaW5nIGFuZCB3YXRlcm1hcmsgYm9vc3RpbmcuIFRoaXMgY29kZSBwYXRoIGlzLCBjcnVjaWFsbHksIGV4ZWN1dGVkIGR1cmluZyBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgcGFnZSBtaWdyYXRpb24sIHBhcnRpY3VsYXJseSB1bmRlciBmcmFnbWVudGF0aW9uIHNjZW5hcmlvcy4gVGhpcyBpcyBhIHNvbGlkIHBvaW50IHRvIGZvY3VzIG9uIGZvciBwb3RlbnRpYWwgaXNzdWVzLgoqICAgKipgRW5hYmxlQ29uZmlnc2A6IFsmIzM0O0NSQVNIX0RVTVAmIzM0OywgJiMzNDtLRVhFQ19DT1JFJiMzNDtdIChvciBbJiMzNDtDUkFTSF9EVU1QJiMzNDssICYjMzQ7S0VYRUMmIzM0O10pLioqIEV4Y2VsbGVudDsgaXQgbWF0Y2hlcyB0aGUgZGVwZW5kZW5jaWVzLiBUaGlzIGNvbmZpcm1zIHRoYXQgdGhlc2UgY29uZmlndXJhdGlvbnMgYXJlIG5lY2Vzc2FyeSBhbmQgc3VmZmljaWVudCBmb3IgdGhlIGNvZGUgcGF0aCB0byBiZSBhY3RpdmUuCiogICAqKmBGb2N1c1N5bWJvbHNgOiBbJiMzNDtib29zdF93YXRlcm1hcmsmIzM0OywgJiMzNDt0cnlfdG9fY2xhaW1fYmxvY2smIzM0O10uKiogUGVyZmVjdC4gVGhlIHBhdGNoIGRpcmVjdGx5IG1vZGlmaWVzIGBib29zdF93YXRlcm1hcmtgLCBhbmQgYHRyeV90b19jbGFpbV9ibG9ja2AgaXMgYSBrZXkgY2FsbGVyLCBidXQgaXMgbm90IGNhbGxlZCBldmVyeXdoZXJlLiBUaGlzIGlzIGEgdmVyeSB0YXJnZXRlZCBmb2N1cy4gSSBhbSBoYXBweSB0aGF0IGl0IGRvZXMgbm90IGNhbGwgdWJpcXVpdG91cyBhbGxvY2F0b3JzLCBzdWNoIGFzIGBhbGxvY19wYWdlc2Agb3IgYGdldF9wYWdlX2Zyb21fZnJlZWxpc3RgLiBUaGlzIGlzIGEgdXNlZnVsIHJlZmluZW1lbnQuCgpJdCYjMzk7cyBhbGwgY3J5c3RhbCBjbGVhciwgYW5kIHRoZSBwcm92aWRlZCBpbmZvcm1hdGlvbiBsaW5lcyB1cCBwZXJmZWN0bHkuIFRoZXJlJiMzOTtzIG5vIGNvbnRyYWRpY3Rpb24gaW4gdGhlIGRhdGEuIFdpdGggbXkgYW5hbHlzaXMgY29tcGxldGUsIEkgYW0gY29uZmlkZW50IHRvIG5vdyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE0OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDUkFTSF9EVU1QJiMzNDssCiAgICAmIzM0O0tFWEVDJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Ym9vc3Rfd2F0ZXJtYXJrJiMzNDssCiAgICAmIzM0O3RyeV90b19jbGFpbV9ibG9jayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGluIG1tL3BhZ2VfYWxsb2MuYyBieSBhZGRpbmcgYW4gaXNfa2R1bXBfa2VybmVsKCkgY2hlY2sgaW5zaWRlIGJvb3N0X3dhdGVybWFyaygpIHRvIGRpc2FibGUgd2F0ZXJtYXJrIGJvb3N0aW5nIGluIGtkdW1wIGtlcm5lbHMuIFRoaXMgY29kZSBpcyBsb2NhdGVkIGluIHRoZSBjb3JlIHBhZ2UgYWxsb2NhdG9yJiMzOTtzIGFudGktZnJhZ21lbnRhdGlvbiBmYWxsYmFjayBwYXRoIGFuZCBleGVjdXRlcyBkdXJpbmcgcGFnZWJsb2NrIGNsYWltaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDUkFTSF9EVU1QJiMzNDssCiAgICAmIzM0O0tFWEVDJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Ym9vc3Rfd2F0ZXJtYXJrJiMzNDssCiAgICAmIzM0O3RyeV90b19jbGFpbV9ibG9jayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGluIG1tL3BhZ2VfYWxsb2MuYyBieSBhZGRpbmcgYW4gaXNfa2R1bXBfa2VybmVsKCkgY2hlY2sgaW5zaWRlIGJvb3N0X3dhdGVybWFyaygpIHRvIGRpc2FibGUgd2F0ZXJtYXJrIGJvb3N0aW5nIGluIGtkdW1wIGtlcm5lbHMuIFRoaXMgY29kZSBpcyBsb2NhdGVkIGluIHRoZSBjb3JlIHBhZ2UgYWxsb2NhdG9yJiMzOTtzIGFudGktZnJhZ21lbnRhdGlvbiBmYWxsYmFjayBwYXRoIGFuZCBleGVjdXRlcyBkdXJpbmcgcGFnZWJsb2NrIGNsYWltaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxNDo1OTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE0OjU5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGZvciBgaXNfa2R1bXBfa2VybmVsKClgIGluIGBib29zdF93YXRlcm1hcmsoKWAgd2l0aGluIGBtbS9wYWdlX2FsbG9jLmNgIHRvIHByZXZlbnQgd2F0ZXJtYXJrIGJvb3N0aW5nIGR1cmluZyBrZHVtcCBjYXB0dXJlIGtlcm5lbCBleGVjdXRpb24uIFRoaXMgaXMgYSBwdXJlbHkgYWxnb3JpdGhtaWMgLyBwb2xpY3kgY2hlY2sgaW4gdGhlIHBhZ2UgYWxsb2NhdG9yIHJlY2xhaW0gaGV1cmlzdGljcyByZXR1cm5pbmcgYSBib29sZWFuIHZhbHVlLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRhdGEgY29weWluZyB0byB1c2VyIHNwYWNlLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHVzYWdlLCBvciBidWZmZXIgbWFuaXB1bGF0aW9ucy4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBvciBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmMGI0ZWU0NDk1NTM1MGYxMjk4NzE1N2NhNTUzMmY2YzQ4NjA1NDVmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgMTQgMTQ6MzE6NTIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmMKaW5kZXggMTJmYWM5MDg0YzQ4My4uMjc2ZmE3MTY5Yjk5MyAxMDA2NDQKLS0tIGEvbW0vcGFnZV9hbGxvYy5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3BhZ2VfYWxsb2MuYwpAQCAtMzcsNiAmIzQzOzM3LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC92bXN0YXQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9mYXVsdC1pbmplY3QuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9jb21wYWN0aW9uLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2NyYXNoX2R1bXAuaCZndDsKICNpbmNsdWRlICZsdDt0cmFjZS9ldmVudHMva21lbS5oJmd0OwogI2luY2x1ZGUgJmx0O3RyYWNlL2V2ZW50cy9vb20uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wcmVmZXRjaC5oJmd0OwpAQCAtMjE3OCw2ICYjNDM7MjE3OSwxNCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYm9vc3Rfd2F0ZXJtYXJrKHN0cnVjdCB6b25lICp6b25lKQogCiAJaWYgKCF3YXRlcm1hcmtfYm9vc3RfZmFjdG9yKQogCQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEEga2R1bXAgY2FwdHVyZSBrZXJuZWwgZXhpdHMgYmVmb3JlIGEgYm9vc3QgY2FuIHBheSBvZmYsIHdoaWxlCiYjNDM7CSAqIHRoZSByYWlzZWQgd2F0ZXJtYXJrIGNhbiBleGNlZWQgdGhlIG1lbW9yeSBsZWZ0IGZvciB0aGUgZHVtcC4KJiM0MzsJICovCiYjNDM7CWlmIChpc19rZHVtcF9rZXJuZWwoKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKIAkvKgogCSAqIERvbiYjMzk7dCBib3RoZXIgaW4gem9uZXMgdGhhdCBhcmUgdW5saWtlbHkgdG8gcHJvZHVjZSByZXN1bHRzLgogCSAqIE9uIHNtYWxsIG1hY2hpbmVzLCBpbmNsdWRpbmcga2R1bXAgY2FwdHVyZSBrZXJuZWxzIHJ1bm5pbmcKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE0OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxOTcKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaDogYGJvb3N0X3dhdGVybWFya2AgaW4gYG1tL3BhZ2VfYWxsb2MuY2AqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSB0b3VjaGluZyB0aGUgYG1tL3BhZ2VfYWxsb2MuY2AgZmlsZSwgc3BlY2lmaWNhbGx5IHRoZSBgYm9vc3Rfd2F0ZXJtYXJrYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhlIGFkZGl0aW9uIG9mIGAjaW5jbHVkZSAmbHQ7bGludXgvY3Jhc2hfZHVtcC5oJmd0O2AgaXMgYSBjbHVlIHRvIHdoYXQmIzM5O3MgZ29pbmcgb24uIEkmIzM5O20gYXNzdW1pbmcgaXQmIzM5O3MgcmVsYXRlZCB0byBjcmFzaCBkdW1wcyBvciBrZHVtcCwgZ2l2ZW4gdGhlIGNvbnRleHQuCgpMb29raW5nIGNsb3NlciBhdCB0aGUgZGlmZiwgdGhleSYjMzk7dmUgYWRkZWQgYSBjaGVjayB3aXRoaW4gYGJvb3N0X3dhdGVybWFya2AuIFRoZSBjb3JlIG9mIHRoZSBtb2RpZmljYXRpb24gaXMgYSBjb25kaXRpb25hbCBjaGVjazogYGlmIChpc19rZHVtcF9rZXJuZWwoKSkgcmV0dXJuIGZhbHNlO2AuIE5vdywgdGhpcyBpcyBpbnRlcmVzdGluZy4gVGhlIGNvbW1lbnRzIHRlbGwgbWUgdGhhdCB0aGUgYGJvb3N0X3dhdGVybWFya2AgbWVjaGFuaXNtIGNhbiBpbnRlcmZlcmUgd2l0aCBrZHVtcCBjYXB0dXJlcyBpZiBhIHdhdGVybWFyayBpcyByYWlzZWQuIFRoZSByYWlzZWQgd2F0ZXJtYXJrIGNhbiBjb25zdW1lIG1lbW9yeSB0aGF0IHRoZSBjcmFzaCBrZXJuZWwgbmVlZHMuIEkga25vdyB0aGF0IGJvb3N0IHdpbGwgaW5jcmVhc2UgdGhlIHdhdGVybWFyay4gVGhpcyB3aWxsIHN0b3AgdGhpcyBtZWNoYW5pc20gaW4gYSBrZHVtcCBzY2VuYXJpby4gVGhlIGdvYWwgaXMgdG8gZW5zdXJlIHRoZSBrZHVtcCBrZXJuZWwgaGFzIGVub3VnaCBtZW1vcnkgdG8gZG8gaXRzIGpvYiBieSBwcmV2ZW50aW5nIHRoZSBib29zdGluZyBvZiB0aGUgd2F0ZXJtYXJrLiBUaGlzIG1ha2VzIHRvdGFsIHNlbnNlLiBXZSBuZWVkIHRvIGJlIGNhcmVmdWwgd2l0aCBtZW1vcnkgYWxsb2NhdGlvbiBkdXJpbmcgYSBjcmFzaCBkdW1wLiBHaXZlbiB0aGUgcG90ZW50aWFsIGZvciBpbnN0YWJpbGl0eSwgdGhpcyBzZWVtcyBsaWtlIGEgcHJ1ZGVudCBjaGFuZ2UuIExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBlbnN1cmUgdGhpcyBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHVuZm9yZXNlZW4gc2lkZSBlZmZlY3RzLCBidXQgb24gdGhlIHN1cmZhY2UsIHRoaXMgbG9va3MgZ29vZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTU6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Ym9vc3Rfd2F0ZXJtYXJrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vcGFnZV9hbGxvYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3BhZ2VfYWxsb2MuYz0yMTY5PWJvb2wgcGFnZWJsb2NrX3VuaXNvbGF0ZV9hbmRfbW92ZV9mcmVlX3BhZ2VzKHN0cnVjdCB6b25lICp6b25lLCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbi0tXG5tbS9wYWdlX2FsbG9jLmMtMjE3NS1cbm1tL3BhZ2VfYWxsb2MuYzoyMTc2OnN0YXRpYyBpbmxpbmUgYm9vbCBib29zdF93YXRlcm1hcmsoc3RydWN0IHpvbmUgKnpvbmUpXG5tbS9wYWdlX2FsbG9jLmMtMjE3Ny17XG4tLVxubW0vcGFnZV9hbGxvYy5jPTIzMDc9dHJ5X3RvX2NsYWltX2Jsb2NrKHN0cnVjdCB6b25lICp6b25lLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5tbS9wYWdlX2FsbG9jLmMtMjMyOS1cdCAqL1xubW0vcGFnZV9hbGxvYy5jOjIzMzA6XHRpZiAoYm9vc3Rfd2F0ZXJtYXJrKHpvbmUpIFx1MDAyNlx1MDAyNiAoYWxsb2NfZmxhZ3MgXHUwMDI2IEFMTE9DX0tTV0FQRCkpXG5tbS9wYWdlX2FsbG9jLmMtMjMzMS1cdFx0c2V0X2JpdChaT05FX0JPT1NURURfV0FURVJNQVJLLCBcdTAwMjZ6b25lLVx1MDAzZWZsYWdzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTU6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE0NQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzLCBnZWFyZWQgdG93YXJkcyBhbiBleHBlcnQ6CgoqKkRpdmluZyBpbnRvIGBtbS9wYWdlX2FsbG9jLmNgIEFyb3VuZCBMaW5lIDIxNzYqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gZm9jdXNpbmcgb24gYG1tL3BhZ2VfYWxsb2MuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAyMTc2LiBUaGF0IGxpa2VseSBtZWFucyBJJiMzOTttIGluIHRoZSBtaWRkbGUgb2YgYSBjcml0aWNhbCBzZWN0aW9uIG9mIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBwcm9jZXNzLCBvciBwZXJoYXBzIGRlYWxsb2NhdGlvbiwgb3IgZXZlbiBoYW5kbGluZyBzb21lIGtpbmQgb2YgcGFnZSBtZXRhZGF0YSBtb2RpZmljYXRpb24uIEkga25vdyB0aGlzIG1vZHVsZSBsaWtlIHRoZSBiYWNrIG9mIG15IGhhbmQsIGJ1dCBwaW5wb2ludGluZyBhIHNwZWNpZmljIGxpbmUgaGVscHMgbWUgemVybyBpbiBvbiB0aGUgZXhhY3QgY29udGV4dC4gSSYjMzk7bGwgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvZiB0aGUgc3Vycm91bmRpbmcgY29kZTsgSSBuZWVkIHRoZSB3aWRlciBwaWN0dXJlLiBJJiMzOTttIGFudGljaXBhdGluZyBwb3NzaWJseSBjaGVja2luZyBzb21lIGZsYWdzLCBsb29raW5nIGZvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBvciBtYXliZSBqdXN0IHdhbnRpbmcgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGFsbG9jYXRpb24gc3RyYXRlZ2llcyBhcmUgaW1wbGVtZW50ZWQgaW4gdGhpcyBzcG90LiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGFkamFjZW50IGxpbmVzIHJldmVhbCBhbmQgdGhlbiBmb3JtIGEgaHlwb3RoZXNpcyBhYm91dCB3aHkgdGhlIGF1dGhvciB3b3VsZCBpbmNsdWRlIGNvZGUgYXQgdGhhdCBsb2NhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTU6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9wYWdlX2FsbG9jLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIxNzA6XHR7XG4yMTcxOlx0XHRyZXR1cm4gX19tb3ZlX2ZyZWVwYWdlc19ibG9ja19pc29sYXRlKHpvbmUsIHBhZ2UsIGZhbHNlKTtcbjIxNzI6XHR9XG4yMTczOlx0XG4yMTc0Olx0I2VuZGlmIC8qIENPTkZJR19NRU1PUllfSVNPTEFUSU9OICovXG4yMTc1Olx0XG4yMTc2Olx0c3RhdGljIGlubGluZSBib29sIGJvb3N0X3dhdGVybWFyayhzdHJ1Y3Qgem9uZSAqem9uZSlcbjIxNzc6XHR7XG4yMTc4Olx0XHR1bnNpZ25lZCBsb25nIG1heF9ib29zdDtcbjIxNzk6XHRcbjIxODA6XHRcdGlmICghd2F0ZXJtYXJrX2Jvb3N0X2ZhY3RvcilcbjIxODE6XHRcdFx0cmV0dXJuIGZhbHNlO1xuMjE4MjpcdFxuMjE4MzpcdFx0LypcbjIxODQ6XHRcdCAqIEEga2R1bXAgY2FwdHVyZSBrZXJuZWwgZXhpdHMgYmVmb3JlIGEgYm9vc3QgY2FuIHBheSBvZmYsIHdoaWxlXG4yMTg1Olx0XHQgKiB0aGUgcmFpc2VkIHdhdGVybWFyayBjYW4gZXhjZWVkIHRoZSBtZW1vcnkgbGVmdCBmb3IgdGhlIGR1bXAuXG4yMTg2Olx0XHQgKi9cbjIxODc6XHRcdGlmIChpc19rZHVtcF9rZXJuZWwoKSlcbjIxODg6XHRcdFx0cmV0dXJuIGZhbHNlO1xuMjE4OTpcdFxuMjE5MDpcdFx0LypcbjIxOTE6XHRcdCAqIERvbiYjMzk7dCBib3RoZXIgaW4gem9uZXMgdGhhdCBhcmUgdW5saWtlbHkgdG8gcHJvZHVjZSByZXN1bHRzLlxuMjE5MjpcdFx0ICogT24gc21hbGwgbWFjaGluZXMsIGluY2x1ZGluZyBrZHVtcCBjYXB0dXJlIGtlcm5lbHMgcnVubmluZ1xuMjE5MzpcdFx0ICogaW4gYSBzbWFsbCBhcmVhLCBib29zdGluZyB0aGUgd2F0ZXJtYXJrIGNhbiBjYXVzZSBhbiBvdXQgb2ZcbjIxOTQ6XHRcdCAqIG1lbW9yeSBzaXR1YXRpb24gaW1tZWRpYXRlbHkuXG4yMTk1Olx0XHQgKi9cbjIxOTY6XHRcdGlmICgocGFnZWJsb2NrX25yX3BhZ2VzICogNCkgXHUwMDNlIHpvbmVfbWFuYWdlZF9wYWdlcyh6b25lKSlcbjIxOTc6XHRcdFx0cmV0dXJuIGZhbHNlO1xuMjE5ODpcdFxuMjE5OTpcdFx0bWF4X2Jvb3N0ID0gbXVsdF9mcmFjKHpvbmUtXHUwMDNlX3dhdGVybWFya1tXTUFSS19ISUdIXSxcbjIyMDA6XHRcdFx0XHR3YXRlcm1hcmtfYm9vc3RfZmFjdG9yLCAxMDAwMCk7XG4yMjAxOlx0XG4yMjAyOlx0XHQvKlxuMjIwMzpcdFx0ICogaGlnaCB3YXRlcm1hcmsgbWF5IGJlIHVuaW5pdGlhbGlzZWQgaWYgZnJhZ21lbnRhdGlvbiBvY2N1cnNcbjIyMDQ6XHRcdCAqIHZlcnkgZWFybHkgaW4gYm9vdCBzbyBkbyBub3QgYm9vc3QuIFdlIGRvIG5vdCBmYWxsXG4yMjA1Olx0XHQgKiB0aHJvdWdoIGFuZCBib29zdCBieSBwYWdlYmxvY2tfbnJfcGFnZXMgYXMgZmFpbGluZ1xuMjIwNjpcdFx0ICogYWxsb2NhdGlvbnMgdGhhdCBlYXJseSBtZWFucyB0aGF0IHJlY2xhaW0gaXMgbm90IGdvaW5nXG4yMjA3Olx0XHQgKiB0byBoZWxwIGFuZCBpdCBtYXkgZXZlbiBiZSBpbXBvc3NpYmxlIHRvIHJlY2xhaW0gdGhlXG4yMjA4Olx0XHQgKiBib29zdGVkIHdhdGVybWFyayByZXN1bHRpbmcgaW4gYSBoYW5nLlxuMjIwOTpcdFx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE1OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5ODgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgYGlzX2tkdW1wX2tlcm5lbCgpYCBGdW5jdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBndXRzIG9mIGBpc19rZHVtcF9rZXJuZWwoKWAgYW5kIHVuZGVyc3RhbmQgd2hhdCBpdCYjMzk7cyByZWFsbHkgZG9pbmcuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBleGFjdCBjcml0ZXJpYSBpdCB1c2VzIHRvIGlkZW50aWZ5IGEga2VybmVsIGFzIGEga2R1bXAga2VybmVsLiBBcmUgd2UgdGFsa2luZyBhYm91dCBhIHNpbXBsZSBjaGVjayBvbiBhIG1vZHVsZSwgYSBzcGVjaWZpYyBmbGFnIGluIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lLCBvciBzb21ldGhpbmcgbW9yZSBzb3BoaXN0aWNhdGVkPyBXaGF0IGtlcm5lbCBzdHJ1Y3R1cmVzIGlzIGl0IHByb2Jpbmc/IElzIGl0IHBvdGVudGlhbGx5IHJlYWRpbmcgZnJvbSBzb21ldGhpbmcgaW4gdGhlIG1lbW9yeSBzcGFjZT8gSSBuZWVkIHRvIGtub3cgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMuIFVuZGVyc3RhbmRpbmcgdGhpcyBmdW5jdGlvbiBpcyBjcnVjaWFsIGZvciBbKippbnNlcnQgdXNlciYjMzk7cyBmaWVsZCBvZiBleHBlcnRpc2UsIGUuZy4sIG1lbW9yeSBkdW1wIGFuYWx5c2lzLCBrZXJuZWwgc2VjdXJpdHksIGNyYXNoIGFuYWx5c2lzLCBldGMuIC0gYXNzdW1lIHRoYXQgdGhpcyBpcyB0aGUgdXNlciYjMzk7cyBmb2N1cyoqXSBiZWNhdXNlIHRoZSBvdXRwdXQgb2YgdGhpcyBpcyBjcml0aWNhbCBmb3IgWyoqZXhwbGFpbiB3aHkgdW5kZXJzdGFuZGluZyB0aGUgb3V0cHV0IGlzIGltcG9ydGFudCB0byB0aGUgdXNlciYjMzk7cyBmaWVsZCBvZiBleHBlcnRpc2UqKl0uIEFueSBlcnJvcnMgb3IgcXVpcmtzIGluIGl0cyBsb2dpYyBjb3VsZCBsZWFkIHRvIFsqKmV4cGxhaW4gY29uc2VxdWVuY2VzIG9mIGZhaWx1cmUgYmFzZWQgb24gdXNlciYjMzk7cyBmaWVsZCBvZiBleHBlcnRpc2UqKl0uIFRpbWUgdG8gZ2V0IHRvIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxNTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpc19rZHVtcF9rZXJuZWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaD0zNj12b2lkIHZtY29yZV9jbGVhbnVwKHZvaWQpO1xuLS1cbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oLTU2LVxuaW5jbHVkZS9saW51eC9jcmFzaF9kdW1wLmg6NTc6I2lmbmRlZiBpc19rZHVtcF9rZXJuZWxcbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oLTU4LS8qXG5pbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaDo1OTogKiBpc19rZHVtcF9rZXJuZWwoKSBjaGVja3Mgd2hldGhlciB0aGlzIGtlcm5lbCBpcyBib290aW5nIGFmdGVyIGEgcGFuaWMgb2ZcbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oLTYwLSAqIHByZXZpb3VzIGtlcm5lbCBvciBub3QuIFRoaXMgaXMgZGV0ZXJtaW5lZCBieSBjaGVja2luZyBpZiBwcmV2aW91cyBrZXJuZWxcbi0tXG5pbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaC02Ny1cbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oOjY4OnN0YXRpYyBpbmxpbmUgYm9vbCBpc19rZHVtcF9rZXJuZWwodm9pZClcbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oLTY5LXtcbi0tXG5pbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaD04Mj1zdGF0aWMgaW5saW5lIGludCBpc192bWNvcmVfdXNhYmxlKHZvaWQpXG4tLVxuaW5jbHVkZS9saW51eC9jcmFzaF9kdW1wLmgtODgtLyogdm1jb3JlX3VudXNhYmxlKCkgbWFya3MgdGhlIHZtY29yZSBhcyB1bnVzYWJsZSxcbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oOjg5OiAqIHdpdGhvdXQgZGlzdHVyYmluZyB0aGUgbG9naWMgb2YgaXNfa2R1bXBfa2VybmVsKClcbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oLTkwLSAqL1xuLS1cbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oPTE1MD1zdGF0aWMgaW5saW5lIHZvaWQgdm1jb3JlX2ZyZWVfcmFuZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXG4tLVxuaW5jbHVkZS9saW51eC9jcmFzaF9kdW1wLmgtMTYwLSNlbHNlIC8qICFDT05GSUdfQ1JBU0hfRFVNUCAqL1xuaW5jbHVkZS9saW51eC9jcmFzaF9kdW1wLmg6MTYxOnN0YXRpYyBpbmxpbmUgYm9vbCBpc19rZHVtcF9rZXJuZWwodm9pZCkgeyByZXR1cm4gZmFsc2U7IH1cbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oLTE2Mi0jZW5kaWYgLyogQ09ORklHX0NSQVNIX0RVTVAgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTU6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDY5NAoJCQkJCQkJb3V0cHV0OiAxNDEKCQkJCQkJCXRob3VnaHRzOiA0MDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgU2FmZXR5KioKCk9rYXksIHRoaXMgcGF0Y2ggaXMgaW5jcmVkaWJseSBzaW1wbGUuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGEgc2luZ2xlIGBpZmAgc3RhdGVtZW50IHdpdGhpbiBgYm9vc3Rfd2F0ZXJtYXJrKClgIGluIGBtbS9wYWdlX2FsbG9jLmNgLiBJdCYjMzk7cyBqdXN0IGEgY2hlY2s6IGBpZiAoaXNfa2R1bXBfa2VybmVsKCkpIHJldHVybiBmYWxzZTtgLiBNeSBpbml0aWFsIGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgdW5pbml0aWFsaXplZCBtZW1vcnkuIEJ1dCBsZXQmIzM5O3MgYnJlYWsgaXQgZG93bjoKCiogICAqKk5vIEFsbG9jYXRpb24gSXNzdWVzOioqIE5vIHN0YWNrIG9yIGhlYXAgYWxsb2NhdGlvbnMgYXJlIHRvdWNoZWQuIFRoYXTigJlzIGEgYmlnIHJlbGllZi4KKiAgICoqTm8gVXNlciBTcGFjZSBFeHBvc3VyZToqKiBXZSYjMzk7cmUgbm90IGNvcHlpbmcgYW55dGhpbmcgdG8gdXNlciBzcGFjZS4gQWJzb2x1dGVseSBubyByaXNrIG9mIGxlYWtpbmcgdW5pbml0aWFsaXplZCBkYXRhIHRocm91Z2ggYSBgY29weV90b191c2VyYCBvciBzb21ldGhpbmcgc2ltaWxhci4KKiAgICoqTm8gVW5pbml0aWFsaXplZCBSZWFkczoqKiBUaGUgYGlzX2tkdW1wX2tlcm5lbCgpYCBmdW5jdGlvbiBpdHNlbGYgaXMgdGhlIGtleSBoZXJlLiBJdCYjMzk7cyBzYWZlLiBJdCYjMzk7cyBub3QgcmVhZGluZyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBicmFuY2hpbmcgYmFzZWQgb24gcG90ZW50aWFsbHkgZ2FyYmFnZSBkYXRhLiBJdCYjMzk7cyBsaWtlbHkgY2hlY2tpbmcgc29tZXRoaW5nIGxpa2UgYGVsZmNvcmVoZHJfYWRkciAhPSBFTEZDT1JFX0FERFJfTUFYYCwgYSBwcmV0dHkgZGlyZWN0IGNvbXBhcmlzb24uCiogICAqKk5vIFN0cnVjdHVyZSBNYW5pcHVsYXRpb246KiogVGhpcyBkb2VzbuKAmXQgdG91Y2ggYW55IGRhdGEgYnVmZmVycywgbW9kaWZ5IGFueSBzdHJ1Y3R1cmUgcGFkZGluZywgb3IgYW55dGhpbmcgb2YgdGhhdCBzb3J0LiBJdCYjMzk7cyBhbiBlYXJseSByZXR1cm4uCgpTbywgaW4gc2hvcnQsIHRoZXJlIGlzIHplcm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Mgd2l0aCB0aGlzIGNoYW5nZS4gS01TQU4gaXMgbm90IG5lY2Vzc2FyeSwgYWJzb2x1dGVseSBub3QgbmVlZGVkLCBoZXJlLgoKTm93LCBsZXQgbWUgcnVuIHRocm91Z2ggbXkgbWVudGFsIGNoZWNrbGlzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW46CgoxLiAgKipVc2VyLVNwYWNlIEV4cG9zdXJlPyoqIE5vcGUuCjIuICAqKkNvbmRpdGlvbmFsIExvZ2ljIERlcGVuZGVudCBvbiBVbmluaXRpYWxpemVkIERhdGE/KiogTm8sIHRoZSBjaGVjayBpcyBjbGVhbi4KMy4gICoqQ29tcGxleCBEYXRhIFN0cnVjdHVyZSBJbml0aWFsaXphdGlvbj8qKiBOb3RoaW5nIGNvbXBsZXggaXMgaGFwcGVuaW5nLCBkZWZpbml0ZWx5IG5vdCBhbiBpc3N1ZSBoZXJlLgo0LiAgKipCb3VuZHMgQ2hlY2tzL1VuaW5pdGlhbGl6ZWQgQnVmZmVyIEFjY2Vzcz8qKiBObyBib3VuZHMgY2hlY2tzIGludm9sdmVkLCBhbmQgaXQgZG9lcyBub3QgYWZmZWN0IGFueSBleGlzdGluZyBidWZmZXJzLgoKVGhlcmVmb3JlLCBgTmVlZHNLTVNBTj1mYWxzZWAgaXMgdGhlIGNvcnJlY3QgY2FsbC4gTGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYCBhbmQgbW92ZSBvbiB0byB0aGUgbmV4dCBvbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDE1OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBjaGVjayBmb3IgYGlzX2tkdW1wX2tlcm5lbCgpYCBpbiBgYm9vc3Rfd2F0ZXJtYXJrKClgIHdpdGhpbiBgbW0vcGFnZV9hbGxvYy5jYCB0byBwcmV2ZW50IHdhdGVybWFyayBib29zdGluZyBkdXJpbmcga2R1bXAgY2FwdHVyZSBrZXJuZWwgZXhlY3V0aW9uLiBUaGlzIGlzIGEgcHVyZWx5IGFsZ29yaXRobWljIC8gcG9saWN5IGNoZWNrIGluIHRoZSBwYWdlIGFsbG9jYXRvciByZWNsYWltIGhldXJpc3RpY3MgcmV0dXJuaW5nIGEgYm9vbGVhbiB2YWx1ZS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkYXRhIGNvcHlpbmcgdG8gdXNlciBzcGFjZSwgdW5pbml0aWFsaXplZCB2YXJpYWJsZSB1c2FnZSwgb3IgYnVmZmVyIG1hbmlwdWxhdGlvbnMuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGZvciBgaXNfa2R1bXBfa2VybmVsKClgIGluIGBib29zdF93YXRlcm1hcmsoKWAgd2l0aGluIGBtbS9wYWdlX2FsbG9jLmNgIHRvIHByZXZlbnQgd2F0ZXJtYXJrIGJvb3N0aW5nIGR1cmluZyBrZHVtcCBjYXB0dXJlIGtlcm5lbCBleGVjdXRpb24uIFRoaXMgaXMgYSBwdXJlbHkgYWxnb3JpdGhtaWMgLyBwb2xpY3kgY2hlY2sgaW4gdGhlIHBhZ2UgYWxsb2NhdG9yIHJlY2xhaW0gaGV1cmlzdGljcyByZXR1cm5pbmcgYSBib29sZWFuIHZhbHVlLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRhdGEgY29weWluZyB0byB1c2VyIHNwYWNlLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHVzYWdlLCBvciBidWZmZXIgbWFuaXB1bGF0aW9ucy4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBvciBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE0OjMxOjUyLjg2NDc3Mjc1NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MjI2NDcwOTg0MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ1JBU0hfRFVNUFwiLFxuICAgIFwiS0VYRUNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJib29zdF93YXRlcm1hcmtcIixcbiAgICBcInRyeV90b19jbGFpbV9ibG9ja1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGZvciBgaXNfa2R1bXBfa2VybmVsKClgIGluIGBib29zdF93YXRlcm1hcmsoKWAgd2l0aGluIGBtbS9wYWdlX2FsbG9jLmNgIHRvIHByZXZlbnQgd2F0ZXJtYXJrIGJvb3N0aW5nIGR1cmluZyBrZHVtcCBjYXB0dXJlIGtlcm5lbCBleGVjdXRpb24uIFRoaXMgaXMgYSBwdXJlbHkgYWxnb3JpdGhtaWMgLyBwb2xpY3kgY2hlY2sgaW4gdGhlIHBhZ2UgYWxsb2NhdG9yIHJlY2xhaW0gaGV1cmlzdGljcyByZXR1cm5pbmcgYSBib29sZWFuIHZhbHVlLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRhdGEgY29weWluZyB0byB1c2VyIHNwYWNlLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHVzYWdlLCBvciBidWZmZXIgbWFuaXB1bGF0aW9ucy4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBvciBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiBtbS9wYWdlX2FsbG9jLmMgYnkgYWRkaW5nIGFuIGlzX2tkdW1wX2tlcm5lbCgpIGNoZWNrIGluc2lkZSBib29zdF93YXRlcm1hcmsoKSB0byBkaXNhYmxlIHdhdGVybWFyayBib29zdGluZyBpbiBrZHVtcCBrZXJuZWxzLiBUaGlzIGNvZGUgaXMgbG9jYXRlZCBpbiB0aGUgY29yZSBwYWdlIGFsbG9jYXRvcidzIGFudGktZnJhZ21lbnRhdGlvbiBmYWxsYmFjayBwYXRoIGFuZCBleGVjdXRlcyBkdXJpbmcgcGFnZWJsb2NrIGNsYWltaW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxNDozMTo1Mi44NjQ3NzczMzVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNTk3MTQxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGYwYjRlZTQ0OTU1MzUwZjEyOTg3MTU3Y2E1NTMyZjZjNDg2MDU0NWZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBTZXAgMTQgMTQ6MzE6NTIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9hbGxvYy5jIGIvbW0vcGFnZV9hbGxvYy5jXFxuaW5kZXggMTJmYWM5MDg0YzQ4My4uMjc2ZmE3MTY5Yjk5MyAxMDA2NDRcXG4tLS0gYS9tbS9wYWdlX2FsbG9jLmNcXG4rKysgYi9tbS9wYWdlX2FsbG9jLmNcXG5AQCAtMzcsNiArMzcsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdm1zdGF0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9mYXVsdC1pbmplY3QuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NvbXBhY3Rpb24uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NyYXNoX2R1bXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3RyYWNlL2V2ZW50cy9rbWVtLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2N0cmFjZS9ldmVudHMvb29tLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wcmVmZXRjaC5oXFx1MDAzZVxcbkBAIC0yMTc4LDYgKzIxNzksMTQgQEAgc3RhdGljIGlubGluZSBib29sIGJvb3N0X3dhdGVybWFyayhzdHJ1Y3Qgem9uZSAqem9uZSlcXG4gXFxuIFxcdGlmICghd2F0ZXJtYXJrX2Jvb3N0X2ZhY3RvcilcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0LypcXG4rXFx0ICogQSBrZHVtcCBjYXB0dXJlIGtlcm5lbCBleGl0cyBiZWZvcmUgYSBib29zdCBjYW4gcGF5IG9mZiwgd2hpbGVcXG4rXFx0ICogdGhlIHJhaXNlZCB3YXRlcm1hcmsgY2FuIGV4Y2VlZCB0aGUgbWVtb3J5IGxlZnQgZm9yIHRoZSBkdW1wLlxcbitcXHQgKi9cXG4rXFx0aWYgKGlzX2tkdW1wX2tlcm5lbCgpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbiBcXHQvKlxcbiBcXHQgKiBEb24ndCBib3RoZXIgaW4gem9uZXMgdGhhdCBhcmUgdW5saWtlbHkgdG8gcHJvZHVjZSByZXN1bHRzLlxcbiBcXHQgKiBPbiBzbWFsbCBtYWNoaW5lcywgaW5jbHVkaW5nIGtkdW1wIGNhcHR1cmUga2VybmVscyBydW5uaW5nXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE0OjMxOjUzLjM5MTQwOTI5OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTY1NzAxNzA5ODEyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDUkFTSF9EVU1QXCIsXG4gICAgXCJLRVhFQ1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJvb3N0X3dhdGVybWFya1wiLFxuICAgIFwidHJ5X3RvX2NsYWltX2Jsb2NrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiBtbS9wYWdlX2FsbG9jLmMgYnkgYWRkaW5nIGFuIGlzX2tkdW1wX2tlcm5lbCgpIGNoZWNrIGluc2lkZSBib29zdF93YXRlcm1hcmsoKSB0byBkaXNhYmxlIHdhdGVybWFyayBib29zdGluZyBpbiBrZHVtcCBrZXJuZWxzLiBUaGlzIGNvZGUgaXMgbG9jYXRlZCBpbiB0aGUgY29yZSBwYWdlIGFsbG9jYXRvcidzIGFudGktZnJhZ21lbnRhdGlvbiBmYWxsYmFjayBwYXRoIGFuZCBleGVjdXRlcyBkdXJpbmcgcGFnZWJsb2NrIGNsYWltaW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGYwYjRlZTQ0OTU1MzUwZjEyOTg3MTU3Y2E1NTMyZjZjNDg2MDU0NWZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCAxNCAxNDozMTo1MiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuY1xuaW5kZXggMTJmYWM5MDg0YzQ4My4uMjc2ZmE3MTY5Yjk5MyAxMDA2NDRcbi0tLSBhL21tL3BhZ2VfYWxsb2MuY1xuKysrIGIvbW0vcGFnZV9hbGxvYy5jXG5AQCAtMzcsNiArMzcsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3Ztc3RhdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZmF1bHQtaW5qZWN0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jb21wYWN0aW9uLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jcmFzaF9kdW1wLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N0cmFjZS9ldmVudHMva21lbS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdHJhY2UvZXZlbnRzL29vbS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHJlZmV0Y2guaFx1MDAzZVxuQEAgLTIxNzgsNiArMjE3OSwxNCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYm9vc3Rfd2F0ZXJtYXJrKHN0cnVjdCB6b25lICp6b25lKVxuIFxuIFx0aWYgKCF3YXRlcm1hcmtfYm9vc3RfZmFjdG9yKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHQvKlxuK1x0ICogQSBrZHVtcCBjYXB0dXJlIGtlcm5lbCBleGl0cyBiZWZvcmUgYSBib29zdCBjYW4gcGF5IG9mZiwgd2hpbGVcbitcdCAqIHRoZSByYWlzZWQgd2F0ZXJtYXJrIGNhbiBleGNlZWQgdGhlIG1lbW9yeSBsZWZ0IGZvciB0aGUgZHVtcC5cbitcdCAqL1xuK1x0aWYgKGlzX2tkdW1wX2tlcm5lbCgpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4gXHQvKlxuIFx0ICogRG9uJ3QgYm90aGVyIGluIHpvbmVzIHRoYXQgYXJlIHVubGlrZWx5IHRvIHByb2R1Y2UgcmVzdWx0cy5cbiBcdCAqIE9uIHNtYWxsIG1hY2hpbmVzLCBpbmNsdWRpbmcga2R1bXAgY2FwdHVyZSBrZXJuZWxzIHJ1bm5pbmdcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE0OjMxOjUzLjM5MTQxMTMwOFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQzMzkxMzMxMDA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNZW1vcnkgQWxsb2NhdGlvbiBpbiB0aGUgQ29udGV4dCBvZiBLZHVtcCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBkaWZmYCBpbiBgbW0vcGFnZV9hbGxvYy5jYC4gTG9va3MgbGlrZSB3ZSdyZSBhZGRpbmcgYSBgI2luY2x1ZGUgXHUwMDNjbGludXgvY3Jhc2hfZHVtcC5oXHUwMDNlYCBhbmQgbW9kaWZ5aW5nIHRoZSB3YXRlcm1hcmsgYm9vc3RpbmcgbG9naWMuIEludGVyZXN0aW5nLiBJJ20gZm9jdXNpbmcgb24gbGluZXMgMjE3OCBvbndhcmQuIFNwZWNpZmljYWxseSwgSSdtIG5vdGluZyB0aGUgYWRkaXRpb24gb2YgYSBjaGVjayBmb3IgYGlzX2tkdW1wX2tlcm5lbCgpYC4gVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSwgYXMgSSBzZWUgaXQsIHRoZSBrZXJuZWwgZHVtcCBjYXB0dXJlIHByb2Nlc3MgKGtkdW1wKSBoYXMgc29tZSB1bmlxdWUgbWVtb3J5IG1hbmFnZW1lbnQgY29uc2lkZXJhdGlvbnMuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoZSB3YXRlcm1hcmsgYm9vc3RpbmcsIHdoaWNoIHVzdWFsbHkgaGVscHMgdG8gcHJldmVudCBhbGxvY2F0aW9uIGZhaWx1cmVzLCBtaWdodCBiZSBjb3VudGVycHJvZHVjdGl2ZSBvciBldmVuIHByb2JsZW1hdGljIGR1cmluZyBhIGtkdW1wIHNjZW5hcmlvLiBUaGUgY29tbWVudCBjbGFyaWZpZXMgdGhpczogdGhlIGtkdW1wIGtlcm5lbCBjYW4gZXhpdCBiZWZvcmUgYSBib29zdCBjYW4gcHJvdmlkZSBpdHMgdXN1YWwgYmVuZWZpdCwgYW5kIGZ1cnRoZXJtb3JlLCBhbiBvdmVybHkgYWdncmVzc2l2ZSB3YXRlcm1hcmsgaW5jcmVhc2UgKmNvdWxkKiBsZWFkIHRvIHRoZSByYWlzZWQgd2F0ZXJtYXJrIGV4Y2VlZGluZyB0aGUgbWVtb3J5IGF2YWlsYWJsZSBmb3IgdGhlIGFjdHVhbCBjcmFzaCBkdW1wLiBJdCdzIGEgdHJhZGUtb2ZmLiBXZSBkb24ndCB3YW50IHRvIHN0YXJ2ZSB0aGUgZHVtcCBwcm9jZXNzLiBTbywgdGhlIGNvZGUgbm93IGV4cGxpY2l0bHkgZGlzYWJsZXMgd2F0ZXJtYXJrIGJvb3N0aW5nIHdoZW4gYGlzX2tkdW1wX2tlcm5lbCgpYCByZXR1cm5zIHRydWUuIFNlZW1zIHNlbnNpYmxlLCBjb25zaWRlcmluZyB0aGUgcG90ZW50aWFsIGNvbmZsaWN0LiBJIG5lZWQgdG8ga2VlcCB0aGlzIGluIG1pbmQgd2hlbiBldmFsdWF0aW5nIG1lbW9yeSBtYW5hZ2VtZW50IGJlaGF2aW9ycyBkdXJpbmcgY3Jhc2ggc2NlbmFyaW9zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTg1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTQ6MzI6MzYuNzgyNzQ0Nzc1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUyMTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3BhZ2VfYWxsb2MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTcwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMTcwOlxcdHtcXG4yMTcxOlxcdFxcdHJldHVybiBfX21vdmVfZnJlZXBhZ2VzX2Jsb2NrX2lzb2xhdGUoem9uZSwgcGFnZSwgZmFsc2UpO1xcbjIxNzI6XFx0fVxcbjIxNzM6XFx0XFxuMjE3NDpcXHQjZW5kaWYgLyogQ09ORklHX01FTU9SWV9JU09MQVRJT04gKi9cXG4yMTc1OlxcdFxcbjIxNzY6XFx0c3RhdGljIGlubGluZSBib29sIGJvb3N0X3dhdGVybWFyayhzdHJ1Y3Qgem9uZSAqem9uZSlcXG4yMTc3OlxcdHtcXG4yMTc4OlxcdFxcdHVuc2lnbmVkIGxvbmcgbWF4X2Jvb3N0O1xcbjIxNzk6XFx0XFxuMjE4MDpcXHRcXHRpZiAoIXdhdGVybWFya19ib29zdF9mYWN0b3IpXFxuMjE4MTpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMjE4MjpcXHRcXG4yMTgzOlxcdFxcdC8qXFxuMjE4NDpcXHRcXHQgKiBBIGtkdW1wIGNhcHR1cmUga2VybmVsIGV4aXRzIGJlZm9yZSBhIGJvb3N0IGNhbiBwYXkgb2ZmLCB3aGlsZVxcbjIxODU6XFx0XFx0ICogdGhlIHJhaXNlZCB3YXRlcm1hcmsgY2FuIGV4Y2VlZCB0aGUgbWVtb3J5IGxlZnQgZm9yIHRoZSBkdW1wLlxcbjIxODY6XFx0XFx0ICovXFxuMjE4NzpcXHRcXHRpZiAoaXNfa2R1bXBfa2VybmVsKCkpXFxuMjE4ODpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMjE4OTpcXHRcXG4yMTkwOlxcdFxcdC8qXFxuMjE5MTpcXHRcXHQgKiBEb24ndCBib3RoZXIgaW4gem9uZXMgdGhhdCBhcmUgdW5saWtlbHkgdG8gcHJvZHVjZSByZXN1bHRzLlxcbjIxOTI6XFx0XFx0ICogT24gc21hbGwgbWFjaGluZXMsIGluY2x1ZGluZyBrZHVtcCBjYXB0dXJlIGtlcm5lbHMgcnVubmluZ1xcbjIxOTM6XFx0XFx0ICogaW4gYSBzbWFsbCBhcmVhLCBib29zdGluZyB0aGUgd2F0ZXJtYXJrIGNhbiBjYXVzZSBhbiBvdXQgb2ZcXG4yMTk0OlxcdFxcdCAqIG1lbW9yeSBzaXR1YXRpb24gaW1tZWRpYXRlbHkuXFxuMjE5NTpcXHRcXHQgKi9cXG4yMTk2OlxcdFxcdGlmICgocGFnZWJsb2NrX25yX3BhZ2VzICogNCkgXFx1MDAzZSB6b25lX21hbmFnZWRfcGFnZXMoem9uZSkpXFxuMjE5NzpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMjE5ODpcXHRcXG4yMTk5OlxcdFxcdG1heF9ib29zdCA9IG11bHRfZnJhYyh6b25lLVxcdTAwM2Vfd2F0ZXJtYXJrW1dNQVJLX0hJR0hdLFxcbjIyMDA6XFx0XFx0XFx0XFx0d2F0ZXJtYXJrX2Jvb3N0X2ZhY3RvciwgMTAwMDApO1xcbjIyMDE6XFx0XFxuMjIwMjpcXHRcXHQvKlxcbjIyMDM6XFx0XFx0ICogaGlnaCB3YXRlcm1hcmsgbWF5IGJlIHVuaW5pdGlhbGlzZWQgaWYgZnJhZ21lbnRhdGlvbiBvY2N1cnNcXG4yMjA0OlxcdFxcdCAqIHZlcnkgZWFybHkgaW4gYm9vdCBzbyBkbyBub3QgYm9vc3QuIFdlIGRvIG5vdCBmYWxsXFxuMjIwNTpcXHRcXHQgKiB0aHJvdWdoIGFuZCBib29zdCBieSBwYWdlYmxvY2tfbnJfcGFnZXMgYXMgZmFpbGluZ1xcbjIyMDY6XFx0XFx0ICogYWxsb2NhdGlvbnMgdGhhdCBlYXJseSBtZWFucyB0aGF0IHJlY2xhaW0gaXMgbm90IGdvaW5nXFxuMjIwNzpcXHRcXHQgKiB0byBoZWxwIGFuZCBpdCBtYXkgZXZlbiBiZSBpbXBvc3NpYmxlIHRvIHJlY2xhaW0gdGhlXFxuMjIwODpcXHRcXHQgKiBib29zdGVkIHdhdGVybWFyayByZXN1bHRpbmcgaW4gYSBoYW5nLlxcbjIyMDk6XFx0XFx0ICovXFxuMjIxMDpcXHRcXHRpZiAoIW1heF9ib29zdClcXG4yMjExOlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4yMjEyOlxcdFxcbjIyMTM6XFx0XFx0bWF4X2Jvb3N0ID0gbWF4KHBhZ2VibG9ja19ucl9wYWdlcywgbWF4X2Jvb3N0KTtcXG4yMjE0OlxcdFxcbjIyMTU6XFx0XFx0em9uZS1cXHUwMDNld2F0ZXJtYXJrX2Jvb3N0ID0gbWluKHpvbmUtXFx1MDAzZXdhdGVybWFya19ib29zdCArIHBhZ2VibG9ja19ucl9wYWdlcyxcXG4yMjE2OlxcdFxcdFxcdG1heF9ib29zdCk7XFxuMjIxNzpcXHRcXG4yMjE4OlxcdFxcdHJldHVybiB0cnVlO1xcbjIyMTk6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxNDozMjozNi43ODI5OTk3MTVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0OTU1MTMxMDI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIER1bXAgTGFuZHNjYXBlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCdzIGdvaW5nIG9uIHdpdGggdGhpcyBgaXNfa2R1bXBfa2VybmVsKClgIGZ1bmN0aW9uLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBrbm93IHdoYXQgaXQgKmlzKi4gSXMgaXQgYSBtYWNybywgYSBmdW5jdGlvbiBkZWZpbmVkIGluIGEgaGVhZGVyLCBvciBzb21ldGhpbmcgZWxzZT8gSSBuZWVkIHRvIGZpbmQgaXRzIGRlZmluaXRpb24uIEknbSBndWVzc2luZyBpdCdzIHByb2JhYmx5IHJlbGF0ZWQgdG8ga2VybmVsIGNyYXNoIGR1bXBzLCBhbmQgdGhhdCBsZWFkcyBtZSB0byB0aGUgbmV4dCB0aGluZzogd2hhdCdzIGBDUkFTSF9EVU1QYD8gSXMgaXQgYSBjb25maWd1cmF0aW9uIG9wdGlvbiwgYSBjb21waWxlLXRpbWUgZmxhZywgYSBzdHJ1Y3QgbWVtYmVyLCBhIHN5bWJvbD8gS25vd2luZyB0aGF0IHdpbGwgcHJvdmlkZSBjcml0aWNhbCBjb250ZXh0LiBJIGltYWdpbmUgdGhhdCBgaXNfa2R1bXBfa2VybmVsKClgIGlzIHNvbWVob3cgcmVsYXRlZCB0byB0aGUgYENSQVNIX0RVTVBgIG1lY2hhbmlzbS4gVGhhdCdzIG15IGltbWVkaWF0ZSB0aG91Z2h0LiBJJ20gZ29pbmcgdG8gdHJhY2sgdGhlc2UgdHdvIGRvd24gc28gSSBoYXZlIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyBjcmFzaCBkdW1wcy4gVGhpcyBzaG91bGQgcHJvdmlkZSB0aGUgaW5mb3JtYXRpb24gSSdsbCBuZWVkIHRvIGFuc3dlciB0aGUgcXVlc3Rpb24gYXQgaGFuZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM4MywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTQ6MzI6NDEuNzM4MTMzMTIxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1MDkwNjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlzX2tkdW1wX2tlcm5lbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaD0zNj12b2lkIHZtY29yZV9jbGVhbnVwKHZvaWQpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9jcmFzaF9kdW1wLmgtNTYtXFxuaW5jbHVkZS9saW51eC9jcmFzaF9kdW1wLmg6NTc6I2lmbmRlZiBpc19rZHVtcF9rZXJuZWxcXG5pbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaC01OC0vKlxcbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oOjU5OiAqIGlzX2tkdW1wX2tlcm5lbCgpIGNoZWNrcyB3aGV0aGVyIHRoaXMga2VybmVsIGlzIGJvb3RpbmcgYWZ0ZXIgYSBwYW5pYyBvZlxcbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oLTYwLSAqIHByZXZpb3VzIGtlcm5lbCBvciBub3QuIFRoaXMgaXMgZGV0ZXJtaW5lZCBieSBjaGVja2luZyBpZiBwcmV2aW91cyBrZXJuZWxcXG4tLVxcbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oLTY3LVxcbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oOjY4OnN0YXRpYyBpbmxpbmUgYm9vbCBpc19rZHVtcF9rZXJuZWwodm9pZClcXG5pbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaC02OS17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaD04Mj1zdGF0aWMgaW5saW5lIGludCBpc192bWNvcmVfdXNhYmxlKHZvaWQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaC04OC0vKiB2bWNvcmVfdW51c2FibGUoKSBtYXJrcyB0aGUgdm1jb3JlIGFzIHVudXNhYmxlLFxcbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oOjg5OiAqIHdpdGhvdXQgZGlzdHVyYmluZyB0aGUgbG9naWMgb2YgaXNfa2R1bXBfa2VybmVsKClcXG5pbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaC05MC0gKi9cXG4tLVxcbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oPTE1MD1zdGF0aWMgaW5saW5lIHZvaWQgdm1jb3JlX2ZyZWVfcmFuZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaC0xNjAtI2Vsc2UgLyogIUNPTkZJR19DUkFTSF9EVU1QICovXFxuaW5jbHVkZS9saW51eC9jcmFzaF9kdW1wLmg6MTYxOnN0YXRpYyBpbmxpbmUgYm9vbCBpc19rZHVtcF9rZXJuZWwodm9pZCkgeyByZXR1cm4gZmFsc2U7IH1cXG5pbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaC0xNjItI2VuZGlmIC8qIENPTkZJR19DUkFTSF9EVU1QICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE0OjMyOjQxLjgyMzIzMDg4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzkwMzI3NTMyMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRGl2aW5nIGludG8gdGhlIENyYXNoIER1bXAgSGVhZGVyKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGUga2VybmVsJ3MgY3Jhc2ggZHVtcCBtZWNoYW5pc20uIEknbSBmb2N1c2luZyBvbiBgaW5jbHVkZS9saW51eC9jcmFzaF9kdW1wLmhgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmVzIDU2IHRvIDc1LiBJJ20gZ3Vlc3NpbmcgdGhhdCBhcmVhIHByb2JhYmx5IGhvbGRzIHNvbWUgY3J1Y2lhbCBkYXRhIHN0cnVjdHVyZXMgb3IgbWFjcm9zIHJlbGF0ZWQgdG8gaG93IHRoZSBrZXJuZWwgY2FwdHVyZXMgYW5kIGhhbmRsZXMgaW5mb3JtYXRpb24gZHVyaW5nIGEgc3lzdGVtIGNyYXNoLiBUaGlzIGlzIGxpa2VseSB3aGVyZSB0aGUgZm91bmRhdGlvbiBpcyBsYWlkIGZvciB0aG9zZSBhbGwtaW1wb3J0YW50IGNyYXNoIGR1bXBzIHdlIHJlbHkgb24gZm9yIHBvc3QtbW9ydGVtIGFuYWx5c2lzLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgZGV0YWlscyBhYm91dCB0aGluZ3MgbGlrZSB0aGUgZm9ybWF0IG9mIHRoZSBjcmFzaCBkYXRhLCBwb3RlbnRpYWxseSBzb21lIHJlZ2lzdGVycywgcGVyaGFwcyBtZW1vcnkgbGF5b3V0IGRlZmluaXRpb25zLCBvciBob3cgdGhlIGtlcm5lbCBkZXNpZ25hdGVzIG1lbW9yeSBmb3IgdGhlIGNyYXNoIGRhdGEuIExldCdzIHNlZSB3aGF0IGdlbXMgYXJlIGhpZGRlbiBpbiB0aGlzIHNlY3Rpb24hXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwOTAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxNDozMzoyMC44NTU5ODYzODVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDI1MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9jcmFzaF9kdW1wLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNTUsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNTU6XFx0I2VuZGlmXFxuICA1NjpcXHRcXG4gIDU3OlxcdCNpZm5kZWYgaXNfa2R1bXBfa2VybmVsXFxuICA1ODpcXHQvKlxcbiAgNTk6XFx0ICogaXNfa2R1bXBfa2VybmVsKCkgY2hlY2tzIHdoZXRoZXIgdGhpcyBrZXJuZWwgaXMgYm9vdGluZyBhZnRlciBhIHBhbmljIG9mXFxuICA2MDpcXHQgKiBwcmV2aW91cyBrZXJuZWwgb3Igbm90LiBUaGlzIGlzIGRldGVybWluZWQgYnkgY2hlY2tpbmcgaWYgcHJldmlvdXMga2VybmVsXFxuICA2MTpcXHQgKiBoYXMgcGFzc2VkIHRoZSBlbGYgY29yZSBoZWFkZXIgYWRkcmVzcyBvbiBjb21tYW5kIGxpbmUuXFxuICA2MjpcXHQgKlxcbiAgNjM6XFx0ICogVGhpcyBpcyBub3QganVzdCBhIHRlc3QgaWYgQ09ORklHX0NSQVNIX0RVTVAgaXMgZW5hYmxlZCBvciBub3QuIEl0IHdpbGxcXG4gIDY0OlxcdCAqIHJldHVybiB0cnVlIGlmIENPTkZJR19DUkFTSF9EVU1QPXkgYW5kIGlmIGtlcm5lbCBpcyBib290aW5nIGFmdGVyIGEgcGFuaWNcXG4gIDY1OlxcdCAqIG9mIHByZXZpb3VzIGtlcm5lbC5cXG4gIDY2OlxcdCAqL1xcbiAgNjc6XFx0XFxuICA2ODpcXHRzdGF0aWMgaW5saW5lIGJvb2wgaXNfa2R1bXBfa2VybmVsKHZvaWQpXFxuICA2OTpcXHR7XFxuICA3MDpcXHRcXHRyZXR1cm4gZWxmY29yZWhkcl9hZGRyICE9IEVMRkNPUkVfQUREUl9NQVg7XFxuICA3MTpcXHR9XFxuICA3MjpcXHQjZW5kaWZcXG4gIDczOlxcdFxcbiAgNzQ6XFx0LyogaXNfdm1jb3JlX3VzYWJsZSgpIGNoZWNrcyBpZiB0aGUga2VybmVsIGlzIGJvb3RpbmcgYWZ0ZXIgYSBwYW5pYyBhbmRcXG4gIDc1OlxcdCAqIHRoZSB2bWNvcmUgcmVnaW9uIGlzIHVzYWJsZS5cXG4gIDc2OlxcdCAqXFxuICA3NzpcXHQgKiBUaGlzIG1ha2VzIHVzZSBvZiB0aGUgZmFjdCB0aGF0IGR1ZSB0byBhbGlnbm1lbnQgLTJVTEwgaXMgbm90XFxuICA3ODpcXHQgKiBhIHZhbGlkIHBvaW50ZXIsIG11Y2ggaW4gdGhlIHZhaW4gb2YgSVNfRVJSKCksIGV4Y2VwdFxcbiAgNzk6XFx0ICogZGVhbGluZyBkaXJlY3RseSB3aXRoIGFuIHVuc2lnbmVkIGxvbmcgbG9uZyByYXRoZXIgdGhhbiBhIHBvaW50ZXIuXFxuICA4MDpcXHQgKi9cXG4gIDgxOlxcdFxcbiAgODI6XFx0c3RhdGljIGlubGluZSBpbnQgaXNfdm1jb3JlX3VzYWJsZSh2b2lkKVxcbiAgODM6XFx0e1xcbiAgODQ6XFx0XFx0cmV0dXJuIGVsZmNvcmVoZHJfYWRkciAhPSBFTEZDT1JFX0FERFJfRVJSIFxcdTAwMjZcXHUwMDI2XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE0OjMzOjIwLjg1NjA5MDU1NVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI0NTg0Nzk4ODA2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIFRob3VnaHRzIG9uIGBpc19rZHVtcF9rZXJuZWwoKWAgYW5kIFN5emthbGxlcioqXG5cbkhvbGQgb24gYSBtaW51dGUhIEkgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgd2hhdCBgaXNfa2R1bXBfa2VybmVsKClgIGFjdHVhbGx5IGRvZXMuIEl0IGFwcGVhcnMgdG8gYmUgZGV0ZXJtaW5pbmcgaWYgKnRoaXMqIGtlcm5lbCBpcyBhIGtkdW1wIGNhcHR1cmUga2VybmVsLCBtZWFuaW5nIGl0J3MgYm9vdGluZyBhZnRlciBhIHByZXZpb3VzIGtlcm5lbCBwYW5pY2tlZC4gSW4gYSBzdGFuZGFyZCBydW5uaW5nIGtlcm5lbCwgaW5jbHVkaW5nIHRoZSBvbmVzIHdlIHVzZSBmb3Igc3l6a2FsbGVyIGZ1enppbmcsIHRoaXMgZnVuY3Rpb24gc2hvdWxkIHJldHVybiBmYWxzZS5cblxuV2FpdCBhIHNlY29uZC4uLiBhbSBJIGV2ZW4gY29uc2lkZXJpbmcgdGhlIHBvc3NpYmlsaXR5IG9mIHN5emthbGxlciBmdXp6aW5nICp0aGUga2R1bXAga2VybmVsIGl0c2VsZio/IFRoYXQgY2FuJ3QgYmUgcmlnaHQuIFN5emthbGxlciBpcyBkZXNpZ25lZCB0byBmdXp6IHRoZSAqbm9ybWFsKiBrZXJuZWwsIG5vdCB0aGUgbWluaW1hbCBlbnZpcm9ubWVudCB0aGF0J3Mgb25seSByZXNwb25zaWJsZSBmb3IgY2FwdHVyaW5nIHRoZSBjcmFzaCBkdW1wIGFuZCB0aGVuIHJlYm9vdGluZyBvciBoYWx0aW5nLlxuXG5Pa2F5LCBsZXQncyBzdGVwIGJhY2suIENvdWxkIHRoZXJlIGJlIGEgc2NlbmFyaW8gd2hlcmUgYGlzX2tkdW1wX2tlcm5lbCgpYCAqd291bGQqIGJlIHRydWUgZHVyaW5nIGZ1enppbmc/IEkgbmVlZCB0byBpbnZlc3RpZ2F0ZS5cblxuTGV0IG1lIHN0YXJ0IHdpdGggdGhpcyBcImVsZmNvcmVoZHJfYWRkciAhPSBFTEZDT1JFX0FERFJfTUFYXCIgY2hlY2suIFdoYXQncyB0aGUgY29udGV4dCBmb3IgdGhhdD8gV2hlcmUgaXMgYGVsZmNvcmVoZHJfYWRkcmAgZXZlbiBzZXQ/IEkgbmVlZCB0byB1c2UgZ3JlcCB0byBmaW5kIGFsbCB0aGUgcGxhY2VzIGl0J3MgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTc0NSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE0OjM3OjI2LjcwNDA4MTE5MloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY5Njk4Mzg2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJlbGZjb3JlaGRyX2FkZHJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmM9MjMwPXN0YXRpYyB2b2lkIF9faW5pdCBhcmNoX3Jlc2VydmVfdm1jb3JlKHZvaWQpXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvc2V0dXAuYy0yNDAtXFx0XFx0Zm9yX2VhY2hfbWVtX3JhbmdlKGksIFxcdTAwMjZzdGFydCwgXFx1MDAyNmVuZCkge1xcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jOjI0MTpcXHRcXHRcXHRpZiAoZWxmY29yZWhkcl9hZGRyIFxcdTAwM2U9IHN0YXJ0IFxcdTAwMjZcXHUwMDI2IGVsZmNvcmVoZHJfYWRkciBcXHUwMDNjIGVuZCkge1xcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jLTI0Mi1cXHRcXHRcXHRcXHQvKlxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmMtMjQ2LVxcdFxcdFxcdFxcdCAqL1xcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jOjI0NzpcXHRcXHRcXHRcXHRlbGZjb3JlaGRyX3NpemUgPSBlbmQgLSBlbGZjb3JlaGRyX2FkZHI7XFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmMtMjQ4LVxcdFxcdFxcdFxcdGJyZWFrO1xcbi0tXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmMtMjUyLVxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jOjI1MzpcXHRpZiAobWVtYmxvY2tfaXNfcmVnaW9uX3Jlc2VydmVkKGVsZmNvcmVoZHJfYWRkciwgZWxmY29yZWhkcl9zaXplKSkge1xcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jLTI1NC1cXHRcXHRwcl93YXJuKFxcXCJlbGZjb3JlaGRyIGlzIG92ZXJsYXBwZWRcXFxcblxcXCIpO1xcbi0tXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmMtMjU3LVxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jOjI1ODpcXHRtZW1ibG9ja19yZXNlcnZlKGVsZmNvcmVoZHJfYWRkciwgZWxmY29yZWhkcl9zaXplKTtcXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvc2V0dXAuYy0yNTktXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmMtMjYwLVxcdHByX2luZm8oXFxcIlJlc2VydmluZyAlbGx1IEtpQiBvZiBtZW1vcnkgYXQgMHglbGx4IGZvciBlbGZjb3JlaGRyXFxcXG5cXFwiLFxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jOjI2MTpcXHRcXHRlbGZjb3JlaGRyX3NpemUgXFx1MDAzZVxcdTAwM2UgMTAsIGVsZmNvcmVoZHJfYWRkcik7XFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmMtMjYyLSNlbmRpZlxcbi0tXFxuYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jPTQyMD1zdGF0aWMgdm9pZCBfX2luaXQgbWlwc19yZXNlcnZlX3ZtY29yZSh2b2lkKVxcbi0tXFxuYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jLTQyNy1cXHRcXHRmb3JfZWFjaF9tZW1fcmFuZ2UoaSwgXFx1MDAyNnN0YXJ0LCBcXHUwMDI2ZW5kKSB7XFxuYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jOjQyODpcXHRcXHRcXHRpZiAoZWxmY29yZWhkcl9hZGRyIFxcdTAwM2U9IHN0YXJ0IFxcdTAwMjZcXHUwMDI2IGVsZmNvcmVoZHJfYWRkciBcXHUwMDNjIGVuZCkge1xcbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYy00MjktXFx0XFx0XFx0XFx0LypcXG4tLVxcbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYy00MzMtXFx0XFx0XFx0XFx0ICovXFxuYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jOjQzNDpcXHRcXHRcXHRcXHRlbGZjb3JlaGRyX3NpemUgPSBlbmQgLSBlbGZjb3JlaGRyX2FkZHI7XFxuYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jLTQzNS1cXHRcXHRcXHRcXHRicmVhaztcXG4tLVxcbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYy00NDAtXFx0cHJfaW5mbyhcXFwiUmVzZXJ2aW5nICVsZEtCIG9mIG1lbW9yeSBhdCAlbGRLQiBmb3Iga2R1bXBcXFxcblxcXCIsXFxuYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jOjQ0MTpcXHRcXHQodW5zaWduZWQgbG9uZyllbGZjb3JlaGRyX3NpemUgXFx1MDAzZVxcdTAwM2UgMTAsICh1bnNpZ25lZCBsb25nKWVsZmNvcmVoZHJfYWRkciBcXHUwMDNlXFx1MDAzZSAxMCk7XFxuYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jLTQ0Mi1cXG5hcmNoL21pcHMva2VybmVsL3NldHVwLmM6NDQzOlxcdG1lbWJsb2NrX3Jlc2VydmUoZWxmY29yZWhkcl9hZGRyLCBlbGZjb3JlaGRyX3NpemUpO1xcbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYy00NDQtI2VuZGlmXFxuLS1cXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZmFkdW1wLWludGVybmFsLmg9MTAxPXN0cnVjdCBmd19kdW1wIHtcXG4tLVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9mYWR1bXAtaW50ZXJuYWwuaC0xMjEtXFx0dW5zaWduZWQgbG9uZ1xcdGZhZHVtcGhkcl9hZGRyO1xcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9mYWR1bXAtaW50ZXJuYWwuaDoxMjI6XFx0dTY0XFx0XFx0ZWxmY29yZWhkcl9hZGRyO1xcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9mYWR1bXAtaW50ZXJuYWwuaC0xMjMtXFx0dTY0XFx0XFx0ZWxmY29yZWhkcl9zaXplO1xcbi0tXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9jcmFzaF9kdW1wLmM9MTAxPWJvb2wgaXNfa2R1bXBfa2VybmVsKHZvaWQpXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9jcmFzaF9kdW1wLmMtMTAyLXtcXG5hcmNoL3Bvd2VycGMva2VybmVsL2NyYXNoX2R1bXAuYzoxMDM6XFx0cmV0dXJuICFpc19mYWR1bXBfYWN0aXZlKCkgXFx1MDAyNlxcdTAwMjYgZWxmY29yZWhkcl9hZGRyICE9IEVMRkNPUkVfQUREUl9NQVg7XFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9jcmFzaF9kdW1wLmMtMTA0LX1cXG4tLVxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvZmFkdW1wLmM9OTkxPXN0YXRpYyB2b2lkIF9faW5pdCBmYWR1bXBfcG9wdWxhdGVfZWxmY29yZWhkcihzdHJ1Y3QgZmFkdW1wX2NyYXNoX2luZm9faGVhZGVyICpmZGgpXFxuLS1cXG5hcmNoL3Bvd2VycGMva2VybmVsL2ZhZHVtcC5jLTk5OC1cXG5hcmNoL3Bvd2VycGMva2VybmVsL2ZhZHVtcC5jOjk5OTpcXHRidWZwID0gKGNoYXIgKikgZndfZHVtcC5lbGZjb3JlaGRyX2FkZHI7XFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9mYWR1bXAuYy0xMDAwLVxcdGZhZHVtcF9pbml0X2VsZmNvcmVfaGVhZGVyKGJ1ZnApO1xcbi0tXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9mYWR1bXAuYz0xMzQ2PXN0YXRpYyB2b2lkIGZhZHVtcF9mcmVlX2VsZmNvcmVoZHJfYnVmKHZvaWQpXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9mYWR1bXAuYy0xMzQ3LXtcXG5hcmNoL3Bvd2VycGMva2VybmVsL2ZhZHVtcC5jOjEzNDg6XFx0aWYgKGZ3X2R1bXAuZWxmY29yZWhkcl9hZGRyID09IDAgfHwgZndfZHVtcC5lbGZjb3JlaGRyX3NpemUgPT0gMClcXG5hcmNoL3Bvd2VycGMva2VybmVsL2ZhZHVtcC5jLTEzNDktXFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9mYWR1bXAuYy0xMzUyLVxcdCAqIEJlZm9yZSBmcmVlaW5nIHRoZSBtZW1vcnkgb2YgYGVsZmNvcmVoZHJgLCByZXNldCB0aGUgZ2xvYmFsXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9mYWR1bXAuYzoxMzUzOlxcdCAqIGBlbGZjb3JlaGRyX2FkZHJgIHRvIHByZXZlbnQgbW9kdWxlcyBsaWtlIGB2bWNvcmVgIGZyb20gYWNjZXNzaW5nXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9mYWR1bXAuYy0xMzU0LVxcdCAqIGludmFsaWQgbWVtb3J5LlxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvZmFkdW1wLmMtMTM1NS1cXHQgKi9cXG5hcmNoL3Bvd2VycGMva2VybmVsL2ZhZHVtcC5jOjEzNTY6XFx0ZWxmY29yZWhkcl9hZGRyID0gRUxGQ09SRV9BRERSX0VSUjtcXG5hcmNoL3Bvd2VycGMva2VybmVsL2ZhZHVtcC5jOjEzNTc6XFx0ZmFkdW1wX2ZyZWVfYnVmZmVyKGZ3X2R1bXAuZWxmY29yZWhkcl9hZGRyLCBmd19kdW1wLmVsZmNvcmVoZHJfc2l6ZSk7XFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9mYWR1bXAuYzoxMzU4OlxcdGZ3X2R1bXAuZWxmY29yZWhkcl9hZGRyID0gMDtcXG5hcmNoL3Bvd2VycGMva2VybmVsL2ZhZHVtcC5jLTEzNTktXFx0ZndfZHVtcC5lbGZjb3JlaGRyX3NpemUgPSAwO1xcbi0tXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9mYWR1bXAuYz0xNjM0PXN0YXRpYyBpbnQgX19pbml0IGZhZHVtcF9zZXR1cF9lbGZjb3JlaGRyX2J1Zih2b2lkKVxcbi0tXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9mYWR1bXAuYy0xNjQ3LVxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvZmFkdW1wLmM6MTY0ODpcXHRmd19kdW1wLmVsZmNvcmVoZHJfYWRkciA9ICh1NjQpZmFkdW1wX2FsbG9jX2J1ZmZlcihlbGZjb3JlaGRyX3NpemUpO1xcbmFyY2gvcG93ZXJwYy9rZXJuZWwvZmFkdW1wLmM6MTY0OTpcXHRpZiAoIWZ3X2R1bXAuZWxmY29yZWhkcl9hZGRyKSB7XFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9mYWR1bXAuYy0xNjUwLVxcdFxcdHByX2VycihcXFwiRmFpbGVkIHRvIGFsbG9jYXRlICVsdSBieXRlcyBmb3IgZWxmY29yZWhkclxcXFxuXFxcIixcXG4tLVxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvZmFkdW1wLmM9MTY5Mz1zdGF0aWMgdm9pZCBfX2luaXQgZmFkdW1wX3Byb2Nlc3Modm9pZClcXG4tLVxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvZmFkdW1wLmMtMTcxOS1cXHQgKlxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvZmFkdW1wLmM6MTcyMDpcXHQgKiBzZXQgZWxmY29yZWhkcl9hZGRyIHNvIHRoYXQgdm1jb3JlIG1vZHVsZSB3aWxsIGV4cG9ydCB0aGVcXG5hcmNoL3Bvd2VycGMva2VybmVsL2ZhZHVtcC5jLTE3MjEtXFx0ICogZWxmY29yZWhkciB0aHJvdWdoICcvcHJvYy92bWNvcmUnLlxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvZmFkdW1wLmMtMTcyMi1cXHQgKi9cXG5hcmNoL3Bvd2VycGMva2VybmVsL2ZhZHVtcC5jOjE3MjM6XFx0ZWxmY29yZWhkcl9hZGRyID0gdmlydF90b19waHlzKCh2b2lkICopZndfZHVtcC5lbGZjb3JlaGRyX2FkZHIpO1xcbmFyY2gvcG93ZXJwYy9rZXJuZWwvZmFkdW1wLmMtMTcyNC1cXHRyZXR1cm47XFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvb3BhbC1mYWR1bXAuYz00MTc9b3BhbF9mYWR1bXBfYnVpbGRfY3B1X25vdGVzKHN0cnVjdCBmd19kdW1wICpmYWR1bXBfY29uZixcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9vcGFsLWZhZHVtcC5jLTUxNS1cXHRwcl9kZWJ1ZyhcXFwiVXBkYXRpbmcgZWxmY29yZSBoZWFkZXIgKCVsbHgpIHdpdGggY3B1IG5vdGVzXFxcXG5cXFwiLFxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9vcGFsLWZhZHVtcC5jOjUxNjpcXHRcXHQgZmFkdW1wX2NvbmYtXFx1MDAzZWVsZmNvcmVoZHJfYWRkcik7XFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L29wYWwtZmFkdW1wLmM6NTE3OlxcdGZhZHVtcF91cGRhdGVfZWxmY29yZV9oZWFkZXIoKGNoYXIgKilmYWR1bXBfY29uZi1cXHUwMDNlZWxmY29yZWhkcl9hZGRyKTtcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvb3BhbC1mYWR1bXAuYy01MTgtXFx0cmV0dXJuIDA7XFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcnRhcy1mYWR1bXAuYz0zNzU9c3RhdGljIGludCBfX2luaXQgcnRhc19mYWR1bXBfYnVpbGRfY3B1X25vdGVzKHN0cnVjdCBmd19kdW1wICpmYWR1bXBfY29uZilcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9ydGFzLWZhZHVtcC5jLTQzOS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcnRhcy1mYWR1bXAuYzo0NDA6XFx0cHJfZGVidWcoXFxcIlVwZGF0aW5nIGVsZmNvcmUgaGVhZGVyICglbGx4KSB3aXRoIGNwdSBub3Rlc1xcXFxuXFxcIiwgZmFkdW1wX2NvbmYtXFx1MDAzZWVsZmNvcmVoZHJfYWRkcik7XFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3J0YXMtZmFkdW1wLmM6NDQxOlxcdGZhZHVtcF91cGRhdGVfZWxmY29yZV9oZWFkZXIoKGNoYXIgKilmYWR1bXBfY29uZi1cXHUwMDNlZWxmY29yZWhkcl9hZGRyKTtcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcnRhcy1mYWR1bXAuYy00NDItXFx0cmV0dXJuIDA7XFxuLS1cXG5hcmNoL3Jpc2N2L2tlcm5lbC9zZXR1cC5jPTEzNT1zdGF0aWMgdm9pZCBfX2luaXQgaW5pdF9yZXNvdXJjZXModm9pZClcXG4tLVxcbmFyY2gvcmlzY3Yva2VybmVsL3NldHVwLmMtMTYxLVxcdGlmIChlbGZjb3JlaGRyX3NpemUgXFx1MDAzZSAwKSB7XFxuYXJjaC9yaXNjdi9rZXJuZWwvc2V0dXAuYzoxNjI6XFx0XFx0ZWxmY29yZWhkcl9yZXMuc3RhcnQgPSBlbGZjb3JlaGRyX2FkZHI7XFxuYXJjaC9yaXNjdi9rZXJuZWwvc2V0dXAuYzoxNjM6XFx0XFx0ZWxmY29yZWhkcl9yZXMuZW5kID0gZWxmY29yZWhkcl9hZGRyICsgZWxmY29yZWhkcl9zaXplIC0gMTtcXG5hcmNoL3Jpc2N2L2tlcm5lbC9zZXR1cC5jLTE2NC1cXHRcXHRlbGZjb3JlaGRyX3Jlcy5mbGFncyA9IElPUkVTT1VSQ0VfU1lTVEVNX1JBTSB8IElPUkVTT1VSQ0VfQlVTWTtcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvc2V0dXAuYz04OTc9dm9pZCBfX2luaXQgc2V0dXBfYXJjaChjaGFyICoqY21kbGluZV9wKVxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jLTkzNC1cXHQvKiBEZWFjdGl2YXRlIGVsZmNvcmVoZHI9IGtlcm5lbCBwYXJhbWV0ZXIgKi9cXG5hcmNoL3MzOTAva2VybmVsL3NldHVwLmM6OTM1OlxcdGVsZmNvcmVoZHJfYWRkciA9IEVMRkNPUkVfQUREUl9NQVg7XFxuYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jLTkzNi0jZW5kaWZcXG4tLVxcbmRyaXZlcnMvb2YvZmR0LmM9NDcyPXN0YXRpYyB2b2lkIF9faW5pdCBmZHRfcmVzZXJ2ZV9lbGZjb3JlaGRyKHZvaWQpXFxuLS1cXG5kcml2ZXJzL29mL2ZkdC5jLTQ3Ni1cXG5kcml2ZXJzL29mL2ZkdC5jOjQ3NzpcXHRpZiAobWVtYmxvY2tfaXNfcmVnaW9uX3Jlc2VydmVkKGVsZmNvcmVoZHJfYWRkciwgZWxmY29yZWhkcl9zaXplKSkge1xcbmRyaXZlcnMvb2YvZmR0LmMtNDc4LVxcdFxcdHByX3dhcm4oXFxcImVsZmNvcmVoZHIgaXMgb3ZlcmxhcHBlZFxcXFxuXFxcIik7XFxuLS1cXG5kcml2ZXJzL29mL2ZkdC5jLTQ4MS1cXG5kcml2ZXJzL29mL2ZkdC5jOjQ4MjpcXHRtZW1ibG9ja19yZXNlcnZlKGVsZmNvcmVoZHJfYWRkciwgZWxmY29yZWhkcl9zaXplKTtcXG5kcml2ZXJzL29mL2ZkdC5jLTQ4My1cXG5kcml2ZXJzL29mL2ZkdC5jLTQ4NC1cXHRwcl9pbmZvKFxcXCJSZXNlcnZpbmcgJWxsdSBLaUIgb2YgbWVtb3J5IGF0IDB4JWxseCBmb3IgZWxmY29yZWhkclxcXFxuXFxcIixcXG5kcml2ZXJzL29mL2ZkdC5jOjQ4NTpcXHRcXHRlbGZjb3JlaGRyX3NpemUgXFx1MDAzZVxcdTAwM2UgMTAsIGVsZmNvcmVoZHJfYWRkcik7XFxuZHJpdmVycy9vZi9mZHQuYy00ODYtfVxcbi0tXFxuZHJpdmVycy9vZi9mZHQuYz04NDE9c3RhdGljIHZvaWQgX19pbml0IGVhcmx5X2luaXRfZHRfY2hlY2tfZm9yX2VsZmNvcmVoZHIodW5zaWduZWQgbG9uZyBub2RlKVxcbi0tXFxuZHJpdmVycy9vZi9mZHQuYy04NDgtXFx0aWYgKCFvZl9mbGF0X2R0X2dldF9hZGRyX3NpemUobm9kZSwgXFxcImxpbnV4LGVsZmNvcmVoZHJcXFwiLFxcbmRyaXZlcnMvb2YvZmR0LmM6ODQ5OlxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZlbGZjb3JlaGRyX2FkZHIsIFxcdTAwMjZlbGZjb3JlaGRyX3NpemUpKVxcbmRyaXZlcnMvb2YvZmR0LmMtODUwLVxcdFxcdHJldHVybjtcXG4tLVxcbmRyaXZlcnMvb2YvZmR0LmMtODUyLVxcdHByX2RlYnVnKFxcXCJlbGZjb3JlaGRyX3N0YXJ0PTB4JWxseCBlbGZjb3JlaGRyX3NpemU9MHglbGx4XFxcXG5cXFwiLFxcbmRyaXZlcnMvb2YvZmR0LmM6ODUzOlxcdFxcdCBlbGZjb3JlaGRyX2FkZHIsIGVsZmNvcmVoZHJfc2l6ZSk7XFxuZHJpdmVycy9vZi9mZHQuYy04NTQtfVxcbi0tXFxuZnMvcHJvYy92bWNvcmUuYz0xMjEzPXN0YXRpYyBpbnQgX19pbml0IHBhcnNlX2NyYXNoX2VsZjY0X2hlYWRlcnModm9pZClcXG4tLVxcbmZzL3Byb2Mvdm1jb3JlLmMtMTIxOC1cXG5mcy9wcm9jL3ZtY29yZS5jOjEyMTk6XFx0YWRkciA9IGVsZmNvcmVoZHJfYWRkcjtcXG5mcy9wcm9jL3ZtY29yZS5jLTEyMjAtXFxuLS1cXG5mcy9wcm9jL3ZtY29yZS5jLTEyNDctXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuZnMvcHJvYy92bWNvcmUuYzoxMjQ4OlxcdGFkZHIgPSBlbGZjb3JlaGRyX2FkZHI7XFxuZnMvcHJvYy92bWNvcmUuYy0xMjQ5LVxcdHJjID0gZWxmY29yZWhkcl9yZWFkKGVsZmNvcmVidWYsIGVsZmNvcmVidWZfc3pfb3JpZywgXFx1MDAyNmFkZHIpO1xcbi0tXFxuZnMvcHJvYy92bWNvcmUuYz0xMjY5PXN0YXRpYyBpbnQgX19pbml0IHBhcnNlX2NyYXNoX2VsZjMyX2hlYWRlcnModm9pZClcXG4tLVxcbmZzL3Byb2Mvdm1jb3JlLmMtMTI3NC1cXG5mcy9wcm9jL3ZtY29yZS5jOjEyNzU6XFx0YWRkciA9IGVsZmNvcmVoZHJfYWRkcjtcXG5mcy9wcm9jL3ZtY29yZS5jLTEyNzYtXFxuLS1cXG5mcy9wcm9jL3ZtY29yZS5jLTEzMDItXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuZnMvcHJvYy92bWNvcmUuYzoxMzAzOlxcdGFkZHIgPSBlbGZjb3JlaGRyX2FkZHI7XFxuZnMvcHJvYy92bWNvcmUuYy0xMzA0LVxcdHJjID0gZWxmY29yZWhkcl9yZWFkKGVsZmNvcmVidWYsIGVsZmNvcmVidWZfc3pfb3JpZywgXFx1MDAyNmFkZHIpO1xcbi0tXFxuZnMvcHJvYy92bWNvcmUuYz0xMzI0PXN0YXRpYyBpbnQgX19pbml0IHBhcnNlX2NyYXNoX2VsZl9oZWFkZXJzKHZvaWQpXFxuLS1cXG5mcy9wcm9jL3ZtY29yZS5jLTEzMjktXFxuZnMvcHJvYy92bWNvcmUuYzoxMzMwOlxcdGFkZHIgPSBlbGZjb3JlaGRyX2FkZHI7XFxuZnMvcHJvYy92bWNvcmUuYy0xMzMxLVxcdHJjID0gZWxmY29yZWhkcl9yZWFkKGVfaWRlbnQsIEVJX05JREVOVCwgXFx1MDAyNmFkZHIpO1xcbi0tXFxuZnMvcHJvYy92bWNvcmUuYz0xNzEzPXN0YXRpYyBpbnQgX19pbml0IHZtY29yZV9pbml0KHZvaWQpXFxuLS1cXG5mcy9wcm9jL3ZtY29yZS5jLTE3MTctXFx0LyogQWxsb3cgYXJjaGl0ZWN0dXJlcyB0byBhbGxvY2F0ZSBFTEYgaGVhZGVyIGluIDJuZCBrZXJuZWwgKi9cXG5mcy9wcm9jL3ZtY29yZS5jOjE3MTg6XFx0cmMgPSBlbGZjb3JlaGRyX2FsbG9jKFxcdTAwMjZlbGZjb3JlaGRyX2FkZHIsIFxcdTAwMjZlbGZjb3JlaGRyX3NpemUpO1xcbmZzL3Byb2Mvdm1jb3JlLmMtMTcxOS1cXHRpZiAocmMpXFxuLS1cXG5mcy9wcm9jL3ZtY29yZS5jLTE3MjgtXFx0aWYgKHJjKSB7XFxuZnMvcHJvYy92bWNvcmUuYzoxNzI5OlxcdFxcdGVsZmNvcmVoZHJfZnJlZShlbGZjb3JlaGRyX2FkZHIpO1xcbmZzL3Byb2Mvdm1jb3JlLmMtMTczMC1cXHRcXHRwcl93YXJuKFxcXCJub3QgaW5pdGlhbGl6ZWRcXFxcblxcXCIpO1xcbi0tXFxuZnMvcHJvYy92bWNvcmUuYy0xNzMyLVxcdH1cXG5mcy9wcm9jL3ZtY29yZS5jOjE3MzM6XFx0ZWxmY29yZWhkcl9mcmVlKGVsZmNvcmVoZHJfYWRkcik7XFxuZnMvcHJvYy92bWNvcmUuYzoxNzM0OlxcdGVsZmNvcmVoZHJfYWRkciA9IEVMRkNPUkVfQUREUl9FUlI7XFxuZnMvcHJvYy92bWNvcmUuYy0xNzM1LVxcbi0tXFxuaW5jbHVkZS9saW51eC9jcmFzaF9kdW1wLmgtMTQtXFxuaW5jbHVkZS9saW51eC9jcmFzaF9kdW1wLmg6MTU6ZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBlbGZjb3JlaGRyX2FkZHI7XFxuaW5jbHVkZS9saW51eC9jcmFzaF9kdW1wLmgtMTYtZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBlbGZjb3JlaGRyX3NpemU7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaD02OD1zdGF0aWMgaW5saW5lIGJvb2wgaXNfa2R1bXBfa2VybmVsKHZvaWQpXFxuaW5jbHVkZS9saW51eC9jcmFzaF9kdW1wLmgtNjkte1xcbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oOjcwOlxcdHJldHVybiBlbGZjb3JlaGRyX2FkZHIgIT0gRUxGQ09SRV9BRERSX01BWDtcXG5pbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaC03MS19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaD04Mj1zdGF0aWMgaW5saW5lIGludCBpc192bWNvcmVfdXNhYmxlKHZvaWQpXFxuaW5jbHVkZS9saW51eC9jcmFzaF9kdW1wLmgtODMte1xcbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oOjg0OlxcdHJldHVybiBlbGZjb3JlaGRyX2FkZHIgIT0gRUxGQ09SRV9BRERSX0VSUiBcXHUwMDI2XFx1MDAyNlxcbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oOjg1OlxcdFxcdGVsZmNvcmVoZHJfYWRkciAhPSBFTEZDT1JFX0FERFJfTUFYID8gMSA6IDA7XFxuaW5jbHVkZS9saW51eC9jcmFzaF9kdW1wLmgtODYtfVxcbi0tXFxuaW5jbHVkZS9saW51eC9jcmFzaF9kdW1wLmg9OTI9c3RhdGljIGlubGluZSB2b2lkIHZtY29yZV91bnVzYWJsZSh2b2lkKVxcbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oLTkzLXtcXG5pbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaDo5NDpcXHRlbGZjb3JlaGRyX2FkZHIgPSBFTEZDT1JFX0FERFJfRVJSO1xcbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oLTk1LX1cXG4tLVxcbmtlcm5lbC9lbGZjb3JlaGRyLmMtMTAtICpcXG5rZXJuZWwvZWxmY29yZWhkci5jOjExOiAqIE5vdGU6IGVsZmNvcmVoZHJfYWRkciBpcyBub3QganVzdCBsaW1pdGVkIHRvIHZtY29yZS4gSXQgaXMgYWxzbyB1c2VkIGJ5XFxua2VybmVsL2VsZmNvcmVoZHIuYy0xMi0gKiBpc19rZHVtcF9rZXJuZWwoKSB0byBkZXRlcm1pbmUgaWYgd2UgYXJlIGJvb3RpbmcgYWZ0ZXIgYSBwYW5pYy4gSGVuY2UgcHV0XFxuLS1cXG5rZXJuZWwvZWxmY29yZWhkci5jLTE0LSAqL1xcbmtlcm5lbC9lbGZjb3JlaGRyLmM6MTU6dW5zaWduZWQgbG9uZyBsb25nIGVsZmNvcmVoZHJfYWRkciA9IEVMRkNPUkVfQUREUl9NQVg7XFxua2VybmVsL2VsZmNvcmVoZHIuYzoxNjpFWFBPUlRfU1lNQk9MX0dQTChlbGZjb3JlaGRyX2FkZHIpO1xcbmtlcm5lbC9lbGZjb3JlaGRyLmMtMTctXFxuLS1cXG5rZXJuZWwvZWxmY29yZWhkci5jPTI5PXN0YXRpYyBpbnQgX19pbml0IHNldHVwX2VsZmNvcmVoZHIoY2hhciAqYXJnKVxcbi0tXFxua2VybmVsL2VsZmNvcmVoZHIuYy0zMy1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5rZXJuZWwvZWxmY29yZWhkci5jOjM0OlxcdGVsZmNvcmVoZHJfYWRkciA9IG1lbXBhcnNlKGFyZywgXFx1MDAyNmVuZCk7XFxua2VybmVsL2VsZmNvcmVoZHIuYy0zNS1cXHRpZiAoKmVuZCA9PSAnQCcpIHtcXG5rZXJuZWwvZWxmY29yZWhkci5jOjM2OlxcdFxcdGVsZmNvcmVoZHJfc2l6ZSA9IGVsZmNvcmVoZHJfYWRkcjtcXG5rZXJuZWwvZWxmY29yZWhkci5jOjM3OlxcdFxcdGVsZmNvcmVoZHJfYWRkciA9IG1lbXBhcnNlKGVuZCArIDEsIFxcdTAwMjZlbmQpO1xcbmtlcm5lbC9lbGZjb3JlaGRyLmMtMzgtXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxNDozNzoyOC40MDEwNzIxNzdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTI4NDYyMzc1NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaDogYG1tL3BhZ2VfYWxsb2MuY2AqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gY2hlY2sgdGhlIGNvbW1pdCBsb2cuIEknZCB0eXBpY2FsbHkganVzdCBydW4gYGdpdCBsb2cgLTFgIGJ1dCBJIGRvbid0IGhhdmUgdGhhdCBkaXJlY3RseSBhdmFpbGFibGUsIHNvIGxldCdzIGZpZ3VyZSBvdXQgYW5vdGhlciB3YXkgdG8gZG8gaXQuIElmIEkgY2FuJ3QgZ2V0IHRoYXQgaW5mbyBxdWlja2x5LCBJIGNhbiBhbHdheXMgc2VhcmNoIGZvciB0aGUgcGF0Y2ggb3IgY29tbWl0IGluZm8gdG8gZmluZCBjb250ZXh0LiBPciwgSSBjYW4ganVzdCBpbnNwZWN0IGBtbS9wYWdlX2FsbG9jLmNgIGl0c2VsZi5cblxuQWxyaWdodCwgbGV0J3MgdW5kZXJzdGFuZCB3aGF0IHRoZSBwYXRjaCBhY3R1YWxseSAqZG9lcyouIEl0IGxvb2tzIGxpa2UgaXQncyBpbiBgbW0vcGFnZV9hbGxvYy5jYC4gQWgsIGdvdCBpdC4gSXQgYWRkcyBgI2luY2x1ZGUgXHUwMDNjbGludXgvY3Jhc2hfZHVtcC5oXHUwMDNlYCBhbmQgdGhlbiBpbmNvcnBvcmF0ZXMgYSBjaGVjayB3aXRoaW4gdGhlIGBib29zdF93YXRlcm1hcmtgIGZ1bmN0aW9uLiBUaGlzIGNoZWNrLCBgaXNfa2R1bXBfa2VybmVsKClgLCBwcmV2ZW50cyB3YXRlcm1hcmsgYm9vc3RpbmcgZHVyaW5nIGEga2R1bXAgY2FwdHVyZSBrZXJuZWwgdG8gcHJldmVudCB0aGUgYm9vc3QgZnJvbSBjb25mbGljdGluZyB3aXRoIHRoZSBsaW1pdGVkIG1lbW9yeSBhdmFpbGFibGUuIEkgc2VlIHRoYXQgdGhpcyBhZGRpdGlvbiBhZGRyZXNzZXMgYSBzcGVjaWZpYyBzY2VuYXJpbyB3aGVyZSB0aGUga2VybmVsIGV4aXRzIGJlZm9yZSB0aGUgYm9vc3QgaGFzIGEgY2hhbmNlIHRvIGJlbmVmaXQsIGFuZCB0aGUgaW5jcmVhc2VkIHdhdGVybWFyayBjb3VsZCBoaW5kZXIgdGhlIG1lbW9yeSByZXF1aXJlZCBmb3IgdGhlIGR1bXAuXG5cbk5vdywgSSdkIGxpa2UgdG8gY2hlY2sgd2hlcmUgYGJvb3N0X3dhdGVybWFya2AgaXMgY2FsbGVkIHRvIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDcxMCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxNDozNzo0MS4yNDczMTI3OTRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4OTQ5MDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJvb3N0X3dhdGVybWFya1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vcGFnZV9hbGxvYy5jPTIxNjk9Ym9vbCBwYWdlYmxvY2tfdW5pc29sYXRlX2FuZF9tb3ZlX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmUgKnpvbmUsIHN0cnVjdCBwYWdlICpwYWdlKVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTIxNzUtXFxubW0vcGFnZV9hbGxvYy5jOjIxNzY6c3RhdGljIGlubGluZSBib29sIGJvb3N0X3dhdGVybWFyayhzdHJ1Y3Qgem9uZSAqem9uZSlcXG5tbS9wYWdlX2FsbG9jLmMtMjE3Ny17XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9MjMwNz10cnlfdG9fY2xhaW1fYmxvY2soc3RydWN0IHpvbmUgKnpvbmUsIHN0cnVjdCBwYWdlICpwYWdlLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTIzMjktXFx0ICovXFxubW0vcGFnZV9hbGxvYy5jOjIzMzA6XFx0aWYgKGJvb3N0X3dhdGVybWFyayh6b25lKSBcXHUwMDI2XFx1MDAyNiAoYWxsb2NfZmxhZ3MgXFx1MDAyNiBBTExPQ19LU1dBUEQpKVxcbm1tL3BhZ2VfYWxsb2MuYy0yMzMxLVxcdFxcdHNldF9iaXQoWk9ORV9CT09TVEVEX1dBVEVSTUFSSywgXFx1MDAyNnpvbmUtXFx1MDAzZWZsYWdzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTQ6Mzc6NDEuMjk2MjY2Mjk0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM0MDg2NTQxMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBBbGxvY2F0aW9uIFN0cmF0ZWd5KipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGFsbG9jYXRpb24gYmVoYXZpb3IgYmV0dGVyLCBzcGVjaWZpY2FsbHkgd2hlcmUgdGhpcyBgdHJ5X3RvX2NsYWltX2Jsb2NrYCBmdW5jdGlvbiBpcyBiZWluZyBpbnZva2VkLiBUbyBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyByb2xlIGluIG1lbW9yeSBtYW5hZ2VtZW50LCBJJ20gZ29pbmcgdG8ganVtcCBpbnRvIGBtbS9wYWdlX2FsbG9jLmNgIGFuZCB6ZXJvIGluIG9uIHRoYXQgbGluZSBudW1iZXIgYXJvdW5kIDIzMDcuIFRoYXQgc2hvdWxkIGJlIHRoZSBwZXJmZWN0IHNwb3QgdG8gc3RhcnQgdHJhY2luZyB0aGUgY2FsbCBncmFwaCBhbmQgc2VlIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgYWxsb2NhdGlvbiBsb2dpYy4gSG9wZWZ1bGx5LCB0aGF0IHdpbGwgaW1tZWRpYXRlbHkgcmV2ZWFsIGl0cyBrZXkgcmVzcG9uc2liaWxpdGllcyBpbiB0aGUgY3VycmVudCBjb250ZXh0LiBJJ20gZXhwZWN0aW5nIHRvIHNlZSBpdHMgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgY29yZSBhbGxvY2F0b3JzLiBMZXQncyBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjQ3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTQ6Mzc6NDQuNzA0OTIyMjQyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MzY1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9wYWdlX2FsbG9jLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjMwNSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjMwNTpcXHQgKi9cXG4yMzA2OlxcdHN0YXRpYyBzdHJ1Y3QgcGFnZSAqXFxuMjMwNzpcXHR0cnlfdG9fY2xhaW1fYmxvY2soc3RydWN0IHpvbmUgKnpvbmUsIHN0cnVjdCBwYWdlICpwYWdlLFxcbjIzMDg6XFx0XFx0XFx0ICAgaW50IGN1cnJlbnRfb3JkZXIsIGludCBvcmRlciwgaW50IHN0YXJ0X3R5cGUsXFxuMjMwOTpcXHRcXHRcXHQgICBpbnQgYmxvY2tfdHlwZSwgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKVxcbjIzMTA6XFx0e1xcbjIzMTE6XFx0XFx0aW50IGZyZWVfcGFnZXMsIG1vdmFibGVfcGFnZXMsIGFsaWtlX3BhZ2VzO1xcbjIzMTI6XFx0XFx0dW5zaWduZWQgbG9uZyBzdGFydF9wZm47XFxuMjMxMzpcXHRcXG4yMzE0OlxcdFxcdC8qIFRha2Ugb3duZXJzaGlwIGZvciBvcmRlcnMgXFx1MDAzZT0gcGFnZWJsb2NrX29yZGVyICovXFxuMjMxNTpcXHRcXHRpZiAoY3VycmVudF9vcmRlciBcXHUwMDNlPSBwYWdlYmxvY2tfb3JkZXIpIHtcXG4yMzE2OlxcdFxcdFxcdHVuc2lnbmVkIGludCBucl9hZGRlZDtcXG4yMzE3OlxcdFxcbjIzMTg6XFx0XFx0XFx0ZGVsX3BhZ2VfZnJvbV9mcmVlX2xpc3QocGFnZSwgem9uZSwgY3VycmVudF9vcmRlciwgYmxvY2tfdHlwZSk7XFxuMjMxOTpcXHRcXHRcXHRjaGFuZ2VfcGFnZWJsb2NrX3JhbmdlKHBhZ2UsIGN1cnJlbnRfb3JkZXIsIHN0YXJ0X3R5cGUpO1xcbjIzMjA6XFx0XFx0XFx0bnJfYWRkZWQgPSBleHBhbmQoem9uZSwgcGFnZSwgb3JkZXIsIGN1cnJlbnRfb3JkZXIsIHN0YXJ0X3R5cGUpO1xcbjIzMjE6XFx0XFx0XFx0YWNjb3VudF9mcmVlcGFnZXMoem9uZSwgbnJfYWRkZWQsIHN0YXJ0X3R5cGUpO1xcbjIzMjI6XFx0XFx0XFx0cmV0dXJuIHBhZ2U7XFxuMjMyMzpcXHRcXHR9XFxuMjMyNDpcXHRcXG4yMzI1OlxcdFxcdC8qXFxuMjMyNjpcXHRcXHQgKiBCb29zdCB3YXRlcm1hcmtzIHRvIGluY3JlYXNlIHJlY2xhaW0gcHJlc3N1cmUgdG8gcmVkdWNlIHRoZVxcbjIzMjc6XFx0XFx0ICogbGlrZWxpaG9vZCBvZiBmdXR1cmUgZmFsbGJhY2tzLiBXYWtlIGtzd2FwZCBub3cgYXMgdGhlIG5vZGVcXG4yMzI4OlxcdFxcdCAqIG1heSBiZSBiYWxhbmNlZCBvdmVyYWxsIGFuZCBrc3dhcGQgd2lsbCBub3Qgd2FrZSBuYXR1cmFsbHkuXFxuMjMyOTpcXHRcXHQgKi9cXG4yMzMwOlxcdFxcdGlmIChib29zdF93YXRlcm1hcmsoem9uZSkgXFx1MDAyNlxcdTAwMjYgKGFsbG9jX2ZsYWdzIFxcdTAwMjYgQUxMT0NfS1NXQVBEKSlcXG4yMzMxOlxcdFxcdFxcdHNldF9iaXQoWk9ORV9CT09TVEVEX1dBVEVSTUFSSywgXFx1MDAyNnpvbmUtXFx1MDAzZWZsYWdzKTtcXG4yMzMyOlxcdFxcbjIzMzM6XFx0XFx0LyogbW92aW5nIHdob2xlIGJsb2NrIGNhbiBmYWlsIGR1ZSB0byB6b25lIGJvdW5kYXJ5IGNvbmRpdGlvbnMgKi9cXG4yMzM0OlxcdFxcdGlmICghcHJlcF9tb3ZlX2ZyZWVwYWdlc19ibG9jayh6b25lLCBwYWdlLCBcXHUwMDI2c3RhcnRfcGZuLCBcXHUwMDI2ZnJlZV9wYWdlcyxcXG4yMzM1OlxcdFxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2bW92YWJsZV9wYWdlcykpXFxuMjMzNjpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4yMzM3OlxcdFxcbjIzMzg6XFx0XFx0LypcXG4yMzM5OlxcdFxcdCAqIERldGVybWluZSBob3cgbWFueSBwYWdlcyBhcmUgY29tcGF0aWJsZSB3aXRoIG91ciBhbGxvY2F0aW9uLlxcbjIzNDA6XFx0XFx0ICogRm9yIG1vdmFibGUgYWxsb2NhdGlvbiwgaXQncyB0aGUgbnVtYmVyIG9mIG1vdmFibGUgcGFnZXMgd2hpY2hcXG4yMzQxOlxcdFxcdCAqIHdlIGp1c3Qgb2J0YWluZWQuIEZvciBvdGhlciB0eXBlcyBpdCdzIGEgYml0IG1vcmUgdHJpY2t5LlxcbjIzNDI6XFx0XFx0ICovXFxuMjM0MzpcXHRcXHRpZiAoc3RhcnRfdHlwZSA9PSBNSUdSQVRFX01PVkFCTEUpIHtcXG4yMzQ0OlxcdFxcdFxcdGFsaWtlX3BhZ2VzID0gbW92YWJsZV9wYWdlcztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTQ6Mzc6NDQuNzA1MzY4MTEzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE0MDY3OTI3NDUyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIERlY2lzaW9uIGZvciBib29zdF93YXRlcm1hcmsoKSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBtZXRob2RpY2FsbHkuIE15IG9iamVjdGl2ZSBpcyB0byBkZXRlcm1pbmUgaWYgZnV6emluZyB0aGUgcGF0Y2ggbW9kaWZ5aW5nIGBib29zdF93YXRlcm1hcmtgIGlzIHdhcnJhbnRlZC4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYGJvb3N0X3dhdGVybWFya2AgKmlzKiDigJMgaXQncyBwYXJ0IG9mIHRoZSBtZW1vcnkgYWxsb2NhdGlvbi9wYWdlIGFsbG9jYXRvciwgY2FsbGVkIGR1cmluZyBwYWdlYmxvY2sgZmFsbGJhY2suIFRoZSBwYXRjaCBpdHNlbGYgc2VlbXMgdG8gYmUgYWRkaW5nIGEgY2hlY2s6IGBpZiAoaXNfa2R1bXBfa2VybmVsKCkpIHJldHVybiBmYWxzZTtgLiBOb3csIEknbSBnb2luZyB0byBjYXJlZnVsbHkgYXBwbHkgdGhlIGZ1enppbmcgZ3VpZGVsaW5lcy5cblxuRmlyc3QsIHRoZSBrZXkgcXVlc3Rpb246IGlzIHRoZSBtb2RpZmllZCBjb2RlICpyZWFjaGFibGUqIGR1cmluZyBub3JtYWwga2VybmVsIGV4ZWN1dGlvbj8gVGhlIGNvZGUgKmlzKiByZWFjaGFibGU7IHRoZSBjaGVjayBgaXNfa2R1bXBfa2VybmVsKClgICppcyogZXhlY3V0ZWQgZXZlcnkgdGltZSBgYm9vc3Rfd2F0ZXJtYXJrYCBpcyBjYWxsZWQsIGFuZCBgYm9vc3Rfd2F0ZXJtYXJrYCAqaXMqIGNhbGxlZCBvbiBldmVyeSBtZW1vcnkgYWxsb2NhdGlvbiBmYWxsYmFjay4gVGhlcmVmb3JlLCBldmVuIGlmIHRoZSBjb25kaXRpb24gaXMgbm90IG5vcm1hbGx5IHRyaWdnZXJlZCwgaXQgaXMgcGFydCBvZiB0aGUgY29udHJvbCBmbG93LiAgVGhpcyBpbW1lZGlhdGVseSBzdWdnZXN0cyBJIG5lZWQgdG8gY29uc2lkZXIgaXQgZm9yIGZ1enppbmcuXG5cbk5leHQsIEkgaGF2ZSB0byBjYXJlZnVsbHkgY29uc2lkZXIgdGhlIG5lZ2F0aXZlIGNyaXRlcmlhIGZvciAqbm90KiBmdXp6aW5nLiBJcyB0aGUgY2hhbmdlIG5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlPyBObywgaXQncyBjb3JlIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLiBJcyBpdCBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGU/IE5vLCBpdCdzIHBhcnQgb2YgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIHBhdGguIElzIGl0IHJlbGF0ZWQgdG8gdW5yZWFjaGFibGUgaGFyZHdhcmUgb3Igc3BlY2lmaWMgYXJjaGl0ZWN0dXJlcz8gTm8sIGl0J3Mgbm90LiBJcyBpdCBhbiB1bnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aCBsaWtlIGEgdGVhcmRvd24gY2FsbGJhY2s/IE5vLCBpdCdzIG5vdC4gU28sIHRoZSBuZWdhdGl2ZSBjcml0ZXJpYSAqZG9uJ3QqIGFwcGx5LlxuXG5Ob3csIG9uIHRvIHRoZSBwb3NpdGl2ZSBjcml0ZXJpYS4gVGhpcyBmYWxscyBzcXVhcmVseSBpbnRvIFwiQ29yZSBTdWJzeXN0ZW1zOiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKVwiIGFuZCBydW50aW1lIGRlZmVuc2l2ZSBjaGVja3Mgc2luY2Ugd2UgaGF2ZSBhbiBgaWZgIHN0YXRlbWVudC4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyBmdXp6aW5nIGlzIHdhcnJhbnRlZC5cblxuTmV4dCwgSSBuZWVkIHRvIGNvbnNpZGVyIEZvY3VzU3ltYm9scy4gSSBtdXN0IGF2b2lkIHViaXF1aXRvdXMgZnVuY3Rpb25zIGxpa2UgZ2VuZXJpYyBhbGxvY2F0b3JzLiBgYm9vc3Rfd2F0ZXJtYXJrYCAqaXRzZWxmKiBjb3VsZCBiZSB1YmlxdWl0b3VzLCBidXQgaXQncyBjYWxsZWQgdGhyb3VnaCBgdHJ5X3RvX2NsYWltX2Jsb2NrYCwgd2hpY2ggYXBwZWFycyBtb3JlIHNwZWNpZmljLiBJIHdpbGwgbmVlZCB0byB2ZXJpZnkgaWYgYGJvb3N0X3dhdGVybWFya2AgaXMgYSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9uLiBJdCdzIGEgc3RhdGljIGlubGluZSwgc28gSSBuZWVkIHRvIHRhcmdldCBpdHMgKmNhbGxlciosIGB0cnlfdG9fY2xhaW1fYmxvY2tgIGluc3RlYWQuXG5cbk5vdywgdGhlIGNydWNpYWwgcG9pbnQ6IGNhbiBhIGZ1enplciBsaWtlIHN5emthbGxlciByZWFjaCB0aGUgYGlzX2tkdW1wX2tlcm5lbCgpYCBjaGVjaz8gQSBub3JtYWwgc3l6a2FsbGVyIGVudmlyb25tZW50IGRvZXMgKm5vdCogcnVuIGluc2lkZSBhIGtkdW1wIGtlcm5lbCwgc28gdGhpcyBmdW5jdGlvbiB3b3VsZCBub3JtYWxseSByZXR1cm4gZmFsc2UuIEJ1dCBjYW4gaXQgYmUgKm1hZGUqIHRvIHJldHVybiB0cnVlIHRocm91Z2ggZXh0ZXJuYWwgY29uZmlndXJhdGlvbj8gQ2FuIGBlbGZjb3JlaGRyYCBiZSBtYW5pcHVsYXRlZD8gRXhhbWluYXRpb24gb2YgdGhlIGtlcm5lbCBjb2RlIHJldmVhbHMgdGhhdCB0aGlzIGNoZWNrIGlzIG1hZGUgYXQgYm9vdCB0aW1lIGFuZCBvbmx5IGEga2V4ZWMtYm9vdGVkIGtkdW1wIGtlcm5lbCB3b3VsZCBzZXQgdGhpcy4gVGhlcmVmb3JlLCBpdCBpcyBpbXBvc3NpYmxlIGZvciBzeXprYWxsZXIgdG8gcmVhY2ggdGhpcyBzdGF0ZS5cblxuVGhlcmVmb3JlLCBiZWNhdXNlIGBpc19rZHVtcF9rZXJuZWwoKWAgaXMgcGFydCBvZiB0aGUgZXhlY3V0ZWQgY29udHJvbCBmbG93IG9mIG1lbW9yeSBhbGxvY2F0aW9uLCBhbmQgdGhlIGNvZGUgcGF0aCBpcyByZWFjaGFibGUgdmlhIHN0YW5kYXJkIG1lbW9yeSBhbGxvY2F0aW9uIG9wZXJhdGlvbnMsICoqSSBtdXN0IGZ1enogdGhpcyBjaGFuZ2UsIGFkZGluZyBgdHJ5X3RvX2NsYWltX2Jsb2NrYCB0byB0aGUgZm9jdXMgc3ltYm9scyB0byBwcmV2ZW50IGRpbHV0aW9uIG9mIGZ1enppbmcgZWZmb3J0KiouIFRoaXMgcGF0aCAqaXMqIHJlYWNoYWJsZSwgYW5kIHRob3VnaCB0aGUgYGlzX2tkdW1wX2tlcm5lbCgpYCBjaGVjayBpdHNlbGYgaXMgKnVubGlrZWx5KiB0byBiZSB0cmlnZ2VyZWQgYnkgc3RhbmRhcmQgc3l6a2FsbGVyLCBpdCdzIHBhcnQgb2YgdGhlIHByb2dyYW0ncyBjb250cm9sIGZsb3cgYW5kIHNob3VsZCBiZSBmdXp6ZWQgZm9yIGxhdGVudCBidWdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjUzNiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyNTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxNDo0MDowNS4zODQ2NTI2MzJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MjMyODc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRyeV90b19jbGFpbV9ibG9ja1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9wYWdlX2FsbG9jLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vcGFnZV9hbGxvYy5jPTIzMDY9c3RhdGljIHN0cnVjdCBwYWdlICpcXG5tbS9wYWdlX2FsbG9jLmM6MjMwNzp0cnlfdG9fY2xhaW1fYmxvY2soc3RydWN0IHpvbmUgKnpvbmUsIHN0cnVjdCBwYWdlICpwYWdlLFxcbm1tL3BhZ2VfYWxsb2MuYy0yMzA4LVxcdFxcdCAgIGludCBjdXJyZW50X29yZGVyLCBpbnQgb3JkZXIsIGludCBzdGFydF90eXBlLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTIzODI9X19ybXF1ZXVlX2NsYWltKHN0cnVjdCB6b25lICp6b25lLCBpbnQgb3JkZXIsIGludCBzdGFydF9taWdyYXRldHlwZSxcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy0yNDE4LVxcdFxcdHBhZ2UgPSBnZXRfcGFnZV9mcm9tX2ZyZWVfYXJlYShhcmVhLCBmYWxsYmFja19tdCk7XFxubW0vcGFnZV9hbGxvYy5jOjI0MTk6XFx0XFx0cGFnZSA9IHRyeV90b19jbGFpbV9ibG9jayh6b25lLCBwYWdlLCBjdXJyZW50X29yZGVyLCBvcmRlcixcXG5tbS9wYWdlX2FsbG9jLmMtMjQyMC1cXHRcXHRcXHRcXHRcXHQgIHN0YXJ0X21pZ3JhdGV0eXBlLCBmYWxsYmFja19tdCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTQ6NDA6MDUuNDI5ODkxODAxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI4NDEyNTgzNzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIEtlcm5lbCBQYXRjaCBmb3IgRnV6emluZyBFbGlnaWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIHRoZSBjaGFuZ2VzIGFyZSBsb2NhdGVkIGFuZCBob3cgdGhleSdyZSB1c2VkLiBJIHNlZSB0aGF0IHRoZSBjb2RlIG1vZGlmaWNhdGlvbiBpcyBpbiBgYm9vc3Rfd2F0ZXJtYXJrKClgLCB3aXRoaW4gdGhlIHBhZ2UgYWxsb2NhdG9yLCB3aGljaCBtZWFucyBpdCdzIHBhcnQgb2YgY29yZSBtZW1vcnkgbWFuYWdlbWVudCAoYG1tL3BhZ2VfYWxsb2MuY2ApLiBUaGUgY2hhbmdlIGl0c2VsZiBpcyBhIGNoZWNrIHVzaW5nIGBpc19rZHVtcF9rZXJuZWwoKWAgdG8gZWFybHkgZXhpdCB3aXRoaW4gYSBrZHVtcCBjYXB0dXJlIGtlcm5lbC4gVGhlIGtleSBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgbWVyaXRzIGZ1enppbmcgZWZmb3J0IHVuZGVyIHRoZSBnaXZlbiBndWlkZWxpbmVzLlxuXG5GaXJzdCBpbnN0aW5jdCBpcyB0byB0cmFjZSB0aGUgZnVuY3Rpb24gY2FsbHMuIGBib29zdF93YXRlcm1hcmtgIGlzIHN0YXRpYyBpbmxpbmUsIHNvIGlubGluZWQgd2l0aGluIGB0cnlfdG9fY2xhaW1fYmxvY2tgLCB3aGljaCBpcyBhbHNvIHN0YXRpYy4gVGhlc2UgZnVuY3Rpb25zIGFyZSBwYXJ0IG9mIHRoZSBwYWdlIGFsbG9jYXRpb24gcGF0aCwgd2hpY2ggaW52b2x2ZXMgYF9fcm1xdWV1ZV9jbGFpbWAgYW5kIGV2ZW50dWFsbHkgYGdldF9wYWdlX2Zyb21fZnJlZWxpc3RgIGFuZCBpdHMgcmVsYXRpdmVzLiBUaGF0IG1lYW5zIHRoaXMgY29kZSBpcyBleHRyZW1lbHkgdWJpcXVpdG91cywgY2FsbGVkIGZyb20gbmVhcmx5IGV2ZXJ5IHBhcnQgb2YgdGhlIGtlcm5lbC4gVGhlIGRvY3VtZW50YXRpb24gZXhwbGljaXRseSB3YXJucyBhZ2FpbnN0IGZvY3VzaW5nIGZ1enppbmcgb24gXCJ1YmlxdWl0b3VzIGxpZmVjeWNsZSBob3QtcGF0aHNcIiBsaWtlIGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMuIE15IGluaXRpYWwgcmVhY3Rpb24gaXMgdGhhdCB0aGlzIGRpc3F1YWxpZmllcyB0aGUgcGF0Y2ggZm9yIGZvY3VzLiBIb3dldmVyLCBJIG5lZWQgdG8gYmUgbW9yZSBwcmVjaXNlLlxuXG5UaGUgZG9jdW1lbnRhdGlvbiBzdGF0ZXMgdGhhdCBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIFwiYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzLlwiIENydWNpYWxseSwga2R1bXAgc2NlbmFyaW9zIGFyZSBub3Qgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBXaGlsZSB0aGUgY2hlY2sgKml0c2VsZiogaXMgcmVhY2hhYmxlLCB0aGUgY29kZSBwYXRoIGl0IGNoYW5nZXMgaXMgb25seSByZWFjaGVkIGluIGEga2R1bXAga2VybmVsLiBUaGUgcHJpbWFyeSBndWlkYW5jZSBzYXlzIHRoYXQgSSBtdXN0IG5vdCBmdXp6IFwic3RydWN0dXJhbGx5IHVucmVhY2hhYmxlXCIgY29kZSBwYXRocywgZGVmaW5lZCBpbiBTZWN0aW9uIDIuIFRoZSBjaGFuZ2UgKmlzKiByZWFjaGFibGUsIGFuZCAqaXMqIGV4ZWN1dGVkLCBidXQgaW4gdGhlIGNvbnRleHQgb2YgZnV6emluZywgdGhlIHBhdGggdGFrZW4gYnkgdGhlIGtlcm5lbCAoa2R1bXApIGlzIG5vdC4gVGhpcyBtYWtlcyBrZHVtcCB1bnJlYWNoYWJsZS5cblxuU28sIGxldCdzIGV4YW1pbmUgU2VjdGlvbiAyIG1vcmUgY2xvc2VseS4gSSBzaG91bGQgc2V0IFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgbW9kaWZpY2F0aW9ucyBmYWxsIHN0cmljdGx5IGludG8gb25lIG9mIHRoZSBmb2xsb3dpbmcgY2F0ZWdvcmllcywgYW5kIHRoZSBrZXkgcGhyYXNlIGlzIFwiVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzXCIuXG5cblRoZSBzY2VuYXJpbyBoZXJlIGlzIHRoYXQgdGhlIG1vZGlmaWVkIGNvZGUgKmlzKiB1bnJlYWNoYWJsZSBmcm9tIHN5emthbGxlciwgb3VyIHN0YW5kYXJkIGVudmlyb25tZW50LCBiZWNhdXNlIGEga2R1bXAgY2FwdHVyZSBrZXJuZWwgbmV2ZXIgZXhlY3V0ZXMgZHVyaW5nIHN5emthbGxlciBmdXp6aW5nLlxuXG5TZWN0aW9uIDMgc2F5cyB0byBzZXQgV29ydGhGdXp6aW5nPXRydWUgaWYgdGhlIGNoYW5nZXMgdG91Y2ggXCJyZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlXCIuIFNpbmNlIHRoZSBrZHVtcCBwYXJ0IGlzIHVucmVhY2hhYmxlIGluIG91ciBmdXp6aW5nIGNvbnRleHQsIGl0IHdvdWxkIHNlZW0gdGhhdCBXb3J0aEZ1enppbmcgaXMgZmFsc2UuXG5cblRoZSBuZXh0IGNvbnNpZGVyYXRpb24gaXMgdGhlIGBGb2N1c1N5bWJvbHNgLiBUaGUgaW5zdHJ1Y3Rpb25zIGFkdmlzZSBhdm9pZGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucywgc3VjaCBhcyB0aG9zZSByZWxhdGVkIHRvIG1lbW9yeSBhbGxvY2F0aW9uLiBTaW5jZSBgYm9vc3Rfd2F0ZXJtYXJrYCBpcyBjYWxsZWQgZnJvbSBtZW1vcnkgYWxsb2NhdGlvbiBmdW5jdGlvbnMsIHNob3VsZCBgV29ydGhGdXp6aW5nYCBiZSBgdHJ1ZWAsIGl0IGlzIGNsZWFyIHRoYXQgSSB3b3VsZCBub3QgbGlzdCB0aGVzZSB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBpbiBgRm9jdXNTeW1ib2xzYC5cblxuSSB3b3VsZCBuZWVkIHRvIGV4YW1pbmUgdGhlIHBhdGNoJ3MgcHVycG9zZSB0byBkZXRlcm1pbmUgdGhlIHdvcnRoaW5lc3Mgb2YgZnV6emluZy4gSWYgdGhlIGdvYWwgaXMgdG8gdGVzdCBiZWhhdmlvciBvdXRzaWRlIG9mIGEga2R1bXAgZW52aXJvbm1lbnQsIHRoZW4gSSB3b3VsZCBuZWVkIHRvIGZpbmQgd2h5IHRoaXMgY2hhbmdlIHdhcyBkb25lLCBhbmQgd2hhdCB0aGUgb3JpZ2luYWwgaW50ZW50aW9uIHdhcy5cblxuSWYgSSB3ZXJlIHRvIGxvb2sgYXQgYSBzaW1pbGFyIHBhdGNoLCBJIHdvdWxkIGRldGVybWluZSB0aGF0IGBXb3J0aEZ1enppbmc9ZmFsc2VgIGJlY2F1c2UgdGhlIHNwZWNpZmljIGNvZGUgcGF0aCB0aGF0IGlzIGFkZGVkIGJ5IHRoZSBwYXRjaCBpcyBuZXZlciBleGVjdXRlZCBpbiB0aGUgbm9ybWFsIGZ1enppbmcgZW52aXJvbm1lbnQuIEkgd291bGQgbmVlZCB0byByZXNlYXJjaCB0aGUgcmF0aW9uYWxlIGZvciB0aGUgcGF0Y2ggdG8gZGV0ZXJtaW5lIGlmIHRoZXJlIHdlcmUgb3RoZXIgbW9kaWZpY2F0aW9ucywgYW5kIEkgd291bGQgbmVlZCB0byByZXZpZXcgdGhlIHBhdGNoIG1vcmUgZGVlcGx5IHRvIGxvb2sgZm9yIHRoZSBcImZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXCIgZnVuY3Rpb25zIHRvIHBvc3NpYmx5IGFkZCB0byBgRm9jdXNTeW1ib2xzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU3NTksIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODY0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE0OjQwOjMzLjg0MjQ3ODk2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzYwNjkzNzI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkEga2R1bXAgY2FwdHVyZSBrZXJuZWwgZXhpdHMgYmVmb3JlIGEgYm9vc3QgY2FuIHBheSBvZmZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vcGFnZV9hbGxvYy5jPTIxNzY9c3RhdGljIGlubGluZSBib29sIGJvb3N0X3dhdGVybWFyayhzdHJ1Y3Qgem9uZSAqem9uZSlcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy0yMTgzLVxcdC8qXFxubW0vcGFnZV9hbGxvYy5jOjIxODQ6XFx0ICogQSBrZHVtcCBjYXB0dXJlIGtlcm5lbCBleGl0cyBiZWZvcmUgYSBib29zdCBjYW4gcGF5IG9mZiwgd2hpbGVcXG5tbS9wYWdlX2FsbG9jLmMtMjE4NS1cXHQgKiB0aGUgcmFpc2VkIHdhdGVybWFyayBjYW4gZXhjZWVkIHRoZSBtZW1vcnkgbGVmdCBmb3IgdGhlIGR1bXAuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE0OjQwOjM1LjYwMzE4NDAxN1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo4NzEwMTQ1NDM5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBBbmFseXNpczogV2F0ZXJtYXJrIEJvb3N0aW5nIGluIGtkdW1wIEtlcm5lbHMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZyb20gbG9va2luZyBhdCBgbW0vcGFnZV9hbGxvYy5jYCwgdGhpcyBwYXRjaCBpcyBhbGwgYWJvdXQgcHJldmVudGluZyB3YXRlcm1hcmsgYm9vc3RpbmcgaW4ga2R1bXAga2VybmVscywgd2hpY2ggbWFrZXMgc2Vuc2UgZ2l2ZW4gdGhlIG1lbW9yeSBjb25zdHJhaW50cyBvZiB0aGF0IGVudmlyb25tZW50LiBUaGUgZXhpc3RpbmcgY29tbWVudCBhbHJlYWR5IGZsYWdnZWQgdGhlIHBvdGVudGlhbCBmb3Igb3V0LW9mLW1lbW9yeSBzaXR1YXRpb25zLCBhbmQgdGhlIHBhdGNoIGVzc2VudGlhbGx5IGFkZHMgYSBjaGVjayB1c2luZyBgaXNfa2R1bXBfa2VybmVsKClgIHRvIGJhaWwgb3V0IG9mIHdhdGVybWFyayBib29zdGluZyBpZiB3ZSdyZSBpbiBvbmUgb2YgdGhvc2Uga2R1bXAgc2NlbmFyaW9zLiBUaGUgcmF0aW9uYWxlIGlzIHNvbGlkOiBhIGtkdW1wIGtlcm5lbCBoYXMgbGltaXRlZCBtZW1vcnkgYW5kIGV4aXRzIHF1aWNrbHksIHNvIGJvb3N0aW5nIHRoZSB3YXRlcm1hcmsgY291bGQgdHJpZ2dlciBPT00gZXJyb3JzIGR1cmluZyB0aGUgY3J1Y2lhbCBkdW1wIHByb2Nlc3MuXG5cbk5vdywgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uOiBpcyB0aGlzIHBhdGNoIHdvcnRoIGZ1enppbmcgd2l0aCBzeXprYWxsZXI/ICBMZXQncyBsb29rIGF0IHRoZSB0cmlhZ2UgcGhpbG9zb3BoeSBhZ2Fpbi4gUmVhY2hhYmlsaXR5IGlzIHRoZSBrZXkuIFRoZSBtb2RpZmllZCBjb2RlIG5lZWRzIHRvIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBXaGF0IGRvZXMgdGhpcyBwYXRjaCAqZG8qPyBJdCBpbnNlcnRzIGEgY2hlY2s6IGBpZiAoaXNfa2R1bXBfa2VybmVsKCkpIHJldHVybiBmYWxzZTtgICBcblxuVGhlIGJpZyBpc3N1ZT8gU3l6a2FsbGVyICppc24ndCogcnVubmluZyBpbiBhIGtkdW1wIGVudmlyb25tZW50LiBgaXNfa2R1bXBfa2VybmVsKClgIHJlbGllcyBvbiBgZWxmY29yZWhkcl9hZGRyYCwgYW5kIHRoYXQncyAqYWx3YXlzKiBgRUxGQ09SRV9BRERSX01BWGAgdW5kZXIgc3l6a2FsbGVyLiBUaGUgY29kZSBwYXRoIGByZXR1cm4gZmFsc2U7YCBpcyAqbmV2ZXIqIHJlYWNoZWQuIFRoZSBrZXJuZWwncyBiZWhhdmlvciBpbiBRRU1VL0dDRSwgd2hpY2ggaXMgd2hhdCBzeXprYWxsZXIgdXNlcywgaXMgY29tcGxldGVseSB1bmNoYW5nZWQgYnkgdGhpcyBwYXRjaC5cblxuQ2FuIHdlICpldmVyKiBnZXQgYGlzX2tkdW1wX2tlcm5lbCgpYCB0byByZXR1cm4gdHJ1ZSBpbiBhIHdheSB0aGF0IHN5emthbGxlciBjb3VsZCBsZXZlcmFnZT8gTGV0J3MgY2hlY2sgd2hlcmUgYGVsZmNvcmVoZHJfYWRkcmAgaXMgc2V0LlxuXG4xLiAgYHNldHVwX2VsZmNvcmVoZHIoY2hhciAqYXJnKWA6IEVhcmx5IGJvb3QgY29tbWFuZC1saW5lLiBTeXprYWxsZXIgaXMgdXNlcnNwYWNlOyBpdCBjYW4ndCBtZXNzIHdpdGggdGhhdC5cbjIuICBQb3dlclBDLXNwZWNpZmljIGNvZGUuIElycmVsZXZhbnQgdG8geDg2L2FtZDY0LlxuMy4gIERldmljZSB0cmVlIGNvZGUuIEFnYWluLCBub3QgdXNlZCBpbiBzdGFuZGFyZCBBQ1BJIFFFTVUgc2V0dXBzLCBhbmQgZWFybHkgYm9vdCBvbmx5LlxuNC4gIGBmcy9wcm9jL3ZtY29yZS5jYC4gQWgsIGB2bWNvcmVfaW5pdGAuIFRoYXQgY2FsbHMgYGVsZmNvcmVoZHJfYWxsb2NgLiBUaGF0J3MgaW50ZXJlc3RpbmchICBXaGF0IGlzIGBlbGZjb3JlaGRyX2FsbG9jYCBkb2luZz8gSSBuZWVkIHRvIGFuYWx5emUgYGVsZmNvcmVoZHJfYWxsb2NgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTQ4MSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTQ6NDI6MDIuNzA0NjQwOTMxWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjAxNDg0ODU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVsZmNvcmVoZHJfYWxsb2NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2tlcm5lbC9jcmFzaF9kdW1wLmM9NTkwPXN0YXRpYyBzaXplX3QgZ2V0X2VsZmNvcmVoZHJfc2l6ZShpbnQgcGhkcl9jb3VudClcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvY3Jhc2hfZHVtcC5jLTYxMy0gKi9cXG5hcmNoL3MzOTAva2VybmVsL2NyYXNoX2R1bXAuYzo2MTQ6aW50IGVsZmNvcmVoZHJfYWxsb2ModW5zaWduZWQgbG9uZyBsb25nICphZGRyLCB1bnNpZ25lZCBsb25nIGxvbmcgKnNpemUpXFxuYXJjaC9zMzkwL2tlcm5lbC9jcmFzaF9kdW1wLmMtNjE1LXtcXG4tLVxcbmZzL3Byb2Mvdm1jb3JlLmM9MTU5PXNzaXplX3QgcmVhZF9mcm9tX29sZG1lbShzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsIHNpemVfdCBjb3VudCxcXG4tLVxcbmZzL3Byb2Mvdm1jb3JlLmMtMjEwLSAqL1xcbmZzL3Byb2Mvdm1jb3JlLmM6MjExOmludCBfX3dlYWsgZWxmY29yZWhkcl9hbGxvYyh1bnNpZ25lZCBsb25nIGxvbmcgKmFkZHIsIHVuc2lnbmVkIGxvbmcgbG9uZyAqc2l6ZSlcXG5mcy9wcm9jL3ZtY29yZS5jLTIxMi17XFxuLS1cXG5mcy9wcm9jL3ZtY29yZS5jPTE3MTM9c3RhdGljIGludCBfX2luaXQgdm1jb3JlX2luaXQodm9pZClcXG4tLVxcbmZzL3Byb2Mvdm1jb3JlLmMtMTcxNy1cXHQvKiBBbGxvdyBhcmNoaXRlY3R1cmVzIHRvIGFsbG9jYXRlIEVMRiBoZWFkZXIgaW4gMm5kIGtlcm5lbCAqL1xcbmZzL3Byb2Mvdm1jb3JlLmM6MTcxODpcXHRyYyA9IGVsZmNvcmVoZHJfYWxsb2MoXFx1MDAyNmVsZmNvcmVoZHJfYWRkciwgXFx1MDAyNmVsZmNvcmVoZHJfc2l6ZSk7XFxuZnMvcHJvYy92bWNvcmUuYy0xNzE5LVxcdGlmIChyYylcXG4tLVxcbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oPTE4PWV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgZG1fY3J5cHRfa2V5c19hZGRyO1xcbi0tXFxuaW5jbHVkZS9saW51eC9jcmFzaF9kdW1wLmgtMjAtI2lmZGVmIENPTkZJR19DUkFTSF9EVU1QXFxuaW5jbHVkZS9saW51eC9jcmFzaF9kdW1wLmg6MjE6ZXh0ZXJuIGludCBlbGZjb3JlaGRyX2FsbG9jKHVuc2lnbmVkIGxvbmcgbG9uZyAqYWRkciwgdW5zaWduZWQgbG9uZyBsb25nICpzaXplKTtcXG5pbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaC0yMi1leHRlcm4gdm9pZCBlbGZjb3JlaGRyX2ZyZWUodW5zaWduZWQgbG9uZyBsb25nIGFkZHIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxNDo0MjowNC4zMDYxMzQwMTZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjIwMTY0NjA1NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBgdm1jb3JlLmNgKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBuYWlsIGRvd24gc29tZXRoaW5nIHNwZWNpZmljIHJlbGF0ZWQgdG8gY29yZSBkdW1wcywgYW5kIG15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZGlnIGludG8gdGhlIGBmcy9wcm9jL3ZtY29yZS5jYCBmaWxlIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZS4gVG8gZ2V0IHN0YXJ0ZWQsIEknbSB6ZXJvaW5nIGluIG9uIGEgY291cGxlIG9mIHNwZWNpZmljIGxpbmVzOiAyMTAgYW5kIDE3MTMuIEtub3dpbmcgdGhlIGNvZGUgYmFzZSBsaWtlIEkgZG8sIHRob3NlIGxpbmUgbnVtYmVycyBoYXZlIHRvIGJlIGltcG9ydGFudC4gSSBoYXZlIGEgaHVuY2ggdGhhdCB0aGVzZSBwYXJ0aWN1bGFyIGxpbmVzIHdpbGwgY29udGFpbiB0aGUga2V5IGluZm9ybWF0aW9uIHRoYXQgSSBhbSBsb29raW5nIGZvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE1MzcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxNDo0MjoyNi4zMjI1OTc1MzZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA1MTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL3Byb2Mvdm1jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjEwLFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjEwOlxcdCAqL1xcbiAyMTE6XFx0aW50IF9fd2VhayBlbGZjb3JlaGRyX2FsbG9jKHVuc2lnbmVkIGxvbmcgbG9uZyAqYWRkciwgdW5zaWduZWQgbG9uZyBsb25nICpzaXplKVxcbiAyMTI6XFx0e1xcbiAyMTM6XFx0XFx0cmV0dXJuIDA7XFxuIDIxNDpcXHR9XFxuIDIxNTpcXHRcXG4gMjE2OlxcdC8qXFxuIDIxNzpcXHQgKiBBcmNoaXRlY3R1cmVzIG1heSBvdmVycmlkZSB0aGlzIGZ1bmN0aW9uIHRvIGZyZWUgaGVhZGVyXFxuIDIxODpcXHQgKi9cXG4gMjE5OlxcdHZvaWQgX193ZWFrIGVsZmNvcmVoZHJfZnJlZSh1bnNpZ25lZCBsb25nIGxvbmcgYWRkcilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTQ6NDI6MjYuMzIyNzA0Mzg2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI0NzQzNjkxMzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBJJ20gcmVhZHkuIExldCdzIHNlZSB3aGF0IHdlJ3JlIHdvcmtpbmcgd2l0aC4gSSdsbCBzdW1tYXJpemUgdGhlIHByb3ZpZGVkIHRleHQgYXMgYSBzdHJlYW0gb2YgY29uc2Npb3VzbmVzcywgYXMgaWYgdGhlc2Ugd2VyZSBteSBvd24gdGhvdWdodHMsIGdpdmVuIG15IGV4cGVydGlzZS5cblxuKioqXG5cbioqQW5hbHl6aW5nIHRoZSBMaW5lKipcblxuQWxyaWdodCwgSSdtIGRpdmluZyBpbnRvIGxpbmUgMTcxMy4gRmlyc3QsIEkgbmVlZCB0aGUgY29udGV4dC4gV2hhdCdzIHRoZSBsYXJnZXIgYXJndW1lbnQgYmVpbmcgcHJlc2VudGVkPyBXaGF0IGFyZSB0aGUga2V5IHZhcmlhYmxlcyBpbiBwbGF5PyBKdXN0IGEgc2luZ2xlIGxpbmUgaXMgbmV2ZXIgZW5vdWdoOyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcG9zaXRpb24gd2l0aGluIHRoZSBvdmVyYWxsIGZyYW1ld29yay4gSXMgdGhpcyBhIHN1cHBvcnRpbmcgZGV0YWlsLCBhIGNydWNpYWwgcGllY2Ugb2YgZXZpZGVuY2UsIG9yIHBlcmhhcHMgYSByZWJ1dHRhbD8gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGRlcGVuZHMgaGVhdmlseSBvbiB0aGUgc3Vycm91bmRpbmcgYXJndW1lbnRzLiBJcyB0aGlzIGxpbmUgY29uc2lzdGVudCB3aXRoIG15IGV4aXN0aW5nIG1vZGVsLCBvciBkb2VzIGl0IGNoYWxsZW5nZSBteSBoeXBvdGhlc2VzPyBJdCBjb3VsZCBiZSBhIHNpbXBsZSBzdGF0ZW1lbnQgb2YgZmFjdCwgYnV0IG15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBpbnRlcnJvZ2F0ZSBpdCBmb3IgYXNzdW1wdGlvbnMgb3IgYmlhc2VzLiBJIGhhdmUgdG8gc2VlIGhvdyByb2J1c3QgdGhlIGV2aWRlbmNlIGlzLCBhbmQgaWYgaXQncyBiZWVuIHByb3Blcmx5IGNvbnRleHR1YWxpemVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTg2OCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxNDo0Mjo1MS4wNjYzOTgwMDVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTkyMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvcHJvYy92bWNvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNzEzLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNzEzOlxcdHN0YXRpYyBpbnQgX19pbml0IHZtY29yZV9pbml0KHZvaWQpXFxuMTcxNDpcXHR7XFxuMTcxNTpcXHRcXHRpbnQgcmMgPSAwO1xcbjE3MTY6XFx0XFxuMTcxNzpcXHRcXHQvKiBBbGxvdyBhcmNoaXRlY3R1cmVzIHRvIGFsbG9jYXRlIEVMRiBoZWFkZXIgaW4gMm5kIGtlcm5lbCAqL1xcbjE3MTg6XFx0XFx0cmMgPSBlbGZjb3JlaGRyX2FsbG9jKFxcdTAwMjZlbGZjb3JlaGRyX2FkZHIsIFxcdTAwMjZlbGZjb3JlaGRyX3NpemUpO1xcbjE3MTk6XFx0XFx0aWYgKHJjKVxcbjE3MjA6XFx0XFx0XFx0cmV0dXJuIHJjO1xcbjE3MjE6XFx0XFx0LypcXG4xNzIyOlxcdFxcdCAqIElmIGVsZmNvcmVoZHI9IGhhcyBiZWVuIHBhc3NlZCBpbiBjbWRsaW5lIG9yIGNyZWF0ZWQgaW4gMm5kIGtlcm5lbCxcXG4xNzIzOlxcdFxcdCAqIHRoZW4gY2FwdHVyZSB0aGUgZHVtcC5cXG4xNzI0OlxcdFxcdCAqL1xcbjE3MjU6XFx0XFx0aWYgKCEoaXNfdm1jb3JlX3VzYWJsZSgpKSlcXG4xNzI2OlxcdFxcdFxcdHJldHVybiByYztcXG4xNzI3OlxcdFxcdHJjID0gcGFyc2VfY3Jhc2hfZWxmX2hlYWRlcnMoKTtcXG4xNzI4OlxcdFxcdGlmIChyYykge1xcbjE3Mjk6XFx0XFx0XFx0ZWxmY29yZWhkcl9mcmVlKGVsZmNvcmVoZHJfYWRkcik7XFxuMTczMDpcXHRcXHRcXHRwcl93YXJuKFxcXCJub3QgaW5pdGlhbGl6ZWRcXFxcblxcXCIpO1xcbjE3MzE6XFx0XFx0XFx0cmV0dXJuIHJjO1xcbjE3MzI6XFx0XFx0fVxcbjE3MzM6XFx0XFx0ZWxmY29yZWhkcl9mcmVlKGVsZmNvcmVoZHJfYWRkcik7XFxuMTczNDpcXHRcXHRlbGZjb3JlaGRyX2FkZHIgPSBFTEZDT1JFX0FERFJfRVJSO1xcbjE3MzU6XFx0XFxuMTczNjpcXHRcXHRwcm9jX3ZtY29yZSA9IHByb2NfY3JlYXRlKFxcXCJ2bWNvcmVcXFwiLCBTX0lSVVNSLCBOVUxMLCBcXHUwMDI2dm1jb3JlX3Byb2Nfb3BzKTtcXG4xNzM3OlxcdFxcdGlmIChwcm9jX3ZtY29yZSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTQ6NDI6NTEuMDY2NDk5MDA1WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE2NjMzNzkxNjc2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEZ1enppbmcgSW1wYWN0IG9mIHRoZSBgYm9vc3Rfd2F0ZXJtYXJrYCBNb2RpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNoYW5nZSBpbiBgbW0vcGFnZV9hbGxvYy5jYCBhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggYGlzX2tkdW1wX2tlcm5lbCgpYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgc2luY2UgYGlzX2tkdW1wX2tlcm5lbCgpYCByZWxpZXMgb24gYGVsZmNvcmVoZHJfYWRkcmAgd2hpY2ggaXMgdW5saWtlbHkgdG8gYmUgc2V0IGluIGEgc3RhbmRhcmQgZnV6emluZyBzZXR1cCwgdGhlIGFkZGVkIGBpZiAoaXNfa2R1bXBfa2VybmVsKCkpIHJldHVybiBmYWxzZTtgIGNvbmRpdGlvbiBzZWVtcyB1bnJlYWNoYWJsZSBpbiBteSBub3JtYWwgZW52aXJvbm1lbnQuIFRoZXJlZm9yZSwgSSBpbml0aWFsbHkgbGVhbmVkIHRvd2FyZHMgc2V0dGluZyBgV29ydGhGdXp6aW5nYCB0byBgZmFsc2VgLlxuXG5Ib3dldmVyLCB0aGUgaW5zdHJ1Y3Rpb25zIHN0cmVzcyBcIlJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFXCIuICBJIHJlLXJlYWQgU2VjdGlvbiAyLCB3aGljaCBvdXRsaW5lcyB3aGVuIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYC4gIEl0IHVzZXMgdGhlIHBocmFzZSBcIk9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzXCIsIGFuZCBJJ20gdW5zdXJlIGlmIHRoYXQgaXMgYW4gZXhoYXVzdGl2ZSBsaXN0LiBTZWN0aW9uIDEgc3RhdGVzIHRoYXQgdW5yZWFjaGFibGUgY29kZSBNVVNUIE5PVCBiZSBmdXp6ZWQuXG5cblRoZW4gU2VjdGlvbiAzIHN0YXRlcyBcIlJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlXCIuIEkgcmVhbGl6ZSB0aGF0IGBib29zdF93YXRlcm1hcmtgIGlzIHBhcnQgb2YgdGhlIGBtbS9wYWdlX2FsbG9jLmNgIGFuZCBpcyBhIGNvcmUgbWVtb3J5IGFsbG9jYXRpb24gcGF0aCDigJMgaXQncyBkZWZpbml0ZWx5IHJlYWNoYWJsZS5cblxuSSBub3cgcmVhbGl6ZSB0aGF0IHRoZSBhZGRlZCBgaWYgKGlzX2tkdW1wX2tlcm5lbCgpKWAgY2hlY2sgaXMgKmV4ZWN1dGVkKiB3aXRoaW4gYSBzdGFuZGFyZCBrZXJuZWwsIGJ1dCB1bmRlciAqbm9ybWFsKiBjaXJjdW1zdGFuY2VzIHdpbGwgYWx3YXlzIHJldHVybiBmYWxzZS4gVGh1cywgdGhlIGNoYW5nZSAqZG9lcyogdG91Y2ggcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZS4gVGhlIGtkdW1wIGNvbmRpdGlvbmFsIHNpbXBseSBzaG9ydC1jaXJjdWl0cyBleGVjdXRpb24gdW5kZXIgYSAqc3BlY2lmaWMqIHNpdHVhdGlvbiwgYnV0IHRoYXQgc2l0dWF0aW9uIGlzbid0IHJlbGV2YW50IHRvIGZ1enppbmcuXG5cblRodXMsIGJhc2VkIG9uIHRoZSBwcmluY2lwbGUgb2YgUkVBQ0hBQklMSVRZLCBJIG11c3Qgc2V0IGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cbk5vdyBjb21lcyB0aGUgaGFyZCBwYXJ0OiBGaW5kaW5nIGdvb2QgRm9jdXNTeW1ib2xzLiAgVGhlIGd1aWRlbGluZXMgZXhwbGljaXRseSB3YXJuIGFnYWluc3QgbGlzdGluZyBcInViaXF1aXRvdXMgbGlmZWN5Y2xlIGhvdC1wYXRoc1wiIGxpa2UgY29yZSBhbGxvY2F0b3JzLiBJIG5lZWQgdG8gYXZvaWQgZGlsdXRpbmcgdGhlIGZ1enppbmcgZWZmb3J0LiBJJ20gdGhpbmtpbmcuLi5XaGF0IGNhbGxzIGBib29zdF93YXRlcm1hcmtgPyAgYHRyeV90b19jbGFpbV9ibG9ja2A/IFRoYXQgaXMgYWxzbyBhIGhvdC1wYXRoLiBXaGF0IGFib3V0IHRoZSBmdW5jdGlvbnMgdGhhdCBjYWxsIGB0cnlfdG9fY2xhaW1fYmxvY2tgLCBsaWtlIGBfX3JtcXVldWVfY2xhaW1gIG9yIGBybXF1ZXVlYD8gVGhlc2UgYWxzbyBhcmUgbm90IGdvb2QuXG5cblNvLCBpcyB0aGVyZSBBTlkgbm9uLXViaXF1aXRvdXMgZnVuY3Rpb24/IENhbiBJIGxpbmsgdGhpcyBjaGFuZ2UgdG8gYSBwYXJ0aWN1bGFyIGZlYXR1cmUgb3IgZW50cnlwb2ludD8gIExldCdzIHNlZSBpZiB0aGUgYHdhdGVybWFya19ib29zdF9mYWN0b3JgIGlzIGV4cG9zZWQgdmlhIHN5c2N0bC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI0OTQsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTgwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTQ6NDU6MzcuNDA0NDE4NjhaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTU1NjUyNTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwid2F0ZXJtYXJrX2Jvb3N0X2ZhY3RvclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC92bS5yc3Q9MjI9Q3VycmVudGx5LCB0aGVzZSBmaWxlcyBhcmUgaW4gL3Byb2Mvc3lzL3ZtOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwvdm0ucnN0LTc2LS0gdmZzX2NhY2hlX3ByZXNzdXJlX2Rlbm9tXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwvdm0ucnN0Ojc3Oi0gd2F0ZXJtYXJrX2Jvb3N0X2ZhY3RvclxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL3ZtLnJzdC03OC0tIHdhdGVybWFya19zY2FsZV9mYWN0b3JcXG4tLVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL3ZtLnJzdD0xMTUzPXZmc19jYWNoZV9wcmVzc3VyZSBzZXR0aW5nIHRvIHRha2UgZWZmZWN0LlxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL3ZtLnJzdC0xMTU0LVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL3ZtLnJzdDoxMTU1OndhdGVybWFya19ib29zdF9mYWN0b3JcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC92bS5yc3QtMTE1Ni09PT09PT09PT09PT09PT09PT09PT09XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9Mjc3PWludCB1c2VyX21pbl9mcmVlX2tieXRlcyA9IC0xO1xcbm1tL3BhZ2VfYWxsb2MuYzoyNzg6c3RhdGljIGludCB3YXRlcm1hcmtfYm9vc3RfZmFjdG9yIF9fcmVhZF9tb3N0bHkgPSAxNTAwMDtcXG5tbS9wYWdlX2FsbG9jLmMtMjc5LXN0YXRpYyBpbnQgd2F0ZXJtYXJrX3NjYWxlX2ZhY3RvciA9IDEwO1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTIxNzY9c3RhdGljIGlubGluZSBib29sIGJvb3N0X3dhdGVybWFyayhzdHJ1Y3Qgem9uZSAqem9uZSlcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy0yMTc5LVxcbm1tL3BhZ2VfYWxsb2MuYzoyMTgwOlxcdGlmICghd2F0ZXJtYXJrX2Jvb3N0X2ZhY3RvcilcXG5tbS9wYWdlX2FsbG9jLmMtMjE4MS1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtMjE5OS1cXHRtYXhfYm9vc3QgPSBtdWx0X2ZyYWMoem9uZS1cXHUwMDNlX3dhdGVybWFya1tXTUFSS19ISUdIXSxcXG5tbS9wYWdlX2FsbG9jLmM6MjIwMDpcXHRcXHRcXHR3YXRlcm1hcmtfYm9vc3RfZmFjdG9yLCAxMDAwMCk7XFxubW0vcGFnZV9hbGxvYy5jLTIyMDEtXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9Njk0NT1zdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBwYWdlX2FsbG9jX3N5c2N0bF90YWJsZVtdID0ge1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTY5NTQtXFx0e1xcbm1tL3BhZ2VfYWxsb2MuYzo2OTU1OlxcdFxcdC5wcm9jbmFtZVxcdD0gXFxcIndhdGVybWFya19ib29zdF9mYWN0b3JcXFwiLFxcbm1tL3BhZ2VfYWxsb2MuYzo2OTU2OlxcdFxcdC5kYXRhXFx0XFx0PSBcXHUwMDI2d2F0ZXJtYXJrX2Jvb3N0X2ZhY3RvcixcXG5tbS9wYWdlX2FsbG9jLmM6Njk1NzpcXHRcXHQubWF4bGVuXFx0XFx0PSBzaXplb2Yod2F0ZXJtYXJrX2Jvb3N0X2ZhY3RvciksXFxubW0vcGFnZV9hbGxvYy5jLTY5NTgtXFx0XFx0Lm1vZGVcXHRcXHQ9IDA2NDQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE0OjQ1OjM5LjAxOTk5MDc1NVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyOTgyOTk3MzAxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBgYm9vc3Rfd2F0ZXJtYXJrYCBGdW5jdGlvbioqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuLi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBjb2RlIGJldHRlci4gSSBzZWUgYGJvb3N0X3dhdGVybWFya2AgYmVpbmcgY2FsbGVkLCBidXQgd2hhdCdzICp0cmlnZ2VyaW5nKiB0aGF0IGNhbGw/IEkgbmVlZCB0byB0cmFjZSBpdHMgdXNhZ2Ugd2l0aGluIHRoZSA2Lngga2VybmVsLiBBbHJpZ2h0LCBsZXQncyBzZWFyY2ggZm9yIGNhbGxzIHRvIGBib29zdF93YXRlcm1hcmtgLiBIbW0sIGxpbmUgMjMzMCBzaG93cyB0aGUgZm9sbG93aW5nOlxuXG5gYGBjXG5cdGlmIChib29zdF93YXRlcm1hcmsoem9uZSkgXHUwMDI2XHUwMDI2IChhbGxvY19mbGFncyBcdTAwMjYgQUxMT0NfS1NXQVBEKSlcblx0XHRzZXRfYml0KFpPTkVfQk9PU1RFRF9XQVRFUk1BUkssIFx1MDAyNnpvbmUtXHUwMDNlZmxhZ3MpO1xuYGBgXG5cblJpZ2h0LCBzbyBpdCdzIGEgY29uZGl0aW9uYWwgY2FsbC4gSWYgYGJvb3N0X3dhdGVybWFyayh6b25lKWAgcmV0dXJucyB0cnVlICphbmQqIGBhbGxvY19mbGFnc2AgaGFzIHRoZSBgQUxMT0NfS1NXQVBEYCBmbGFnIHNldCwgdGhlbiBpdCBzZXRzIHRoZSBgWk9ORV9CT09TVEVEX1dBVEVSTUFSS2AgYml0IGluIHRoZSB6b25lIGZsYWdzLiBPa2F5LCBJIHVuZGVyc3RhbmQgKndoZW4qIGl0J3MgY2FsbGVkLCBidXQgbm93IEkgbmVlZCB0byBrbm93IHdoYXQgaGFwcGVucyBhcyBhIHJlc3VsdCBvZiB0aGUgYFpPTkVfQk9PU1RFRF9XQVRFUk1BUktgIGJlaW5nIHNldC4gV2hhdCBkb2VzIHRoYXQgZmxhZyBhY3R1YWxseSAqZG8qPyBJIHNob3VsZCBsb29rIGZvciBhbGwgdGhlIHBsYWNlcyB3aGVyZSBgWk9ORV9CT09TVEVEX1dBVEVSTUFSS2AgaXMgdXNlZCBpbiB0aGUgY29kZWJhc2UuIExldCdzIGdyZXAgZm9yIHRoYXQgc3BlY2lmaWMgaWRlbnRpZmllci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU4NDUsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTQ6NDY6MDguODQ5OTY2NzM4WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTc5OTM3NzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlpPTkVfQk9PU1RFRF9XQVRFUk1BUktcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0PTM3ND1HZW5lcmFsXFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3QtNTI3LSAgVGhlIHpvbmUgZmxhZ3MuIFRoZSBsZWFzdCB0aHJlZSBiaXRzIGFyZSB1c2VkIGFuZCBkZWZpbmVkIGJ5XFxuRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0OjUyODogIGBgZW51bSB6b25lX2ZsYWdzYGAuIGBgWk9ORV9CT09TVEVEX1dBVEVSTUFSS2BgIChiaXQgMCk6IHpvbmUgcmVjZW50bHkgYm9vc3RlZFxcbkRvY3VtZW50YXRpb24vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdC01MjktICB3YXRlcm1hcmtzLiBDbGVhcmVkIHdoZW4ga3N3YXBkIGlzIHdva2VuLiBgYFpPTkVfUkVDTEFJTV9BQ1RJVkVgYCAoYml0IDEpOlxcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD0xMTcyPWVudW0gem9uZV9mbGFncyB7XFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDoxMTczOlxcdFpPTkVfQk9PU1RFRF9XQVRFUk1BUkssXFx0XFx0Lyogem9uZSByZWNlbnRseSBib29zdGVkIHdhdGVybWFya3MuXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xMTc0LVxcdFxcdFxcdFxcdFxcdCAqIENsZWFyZWQgd2hlbiBrc3dhcGQgaXMgd29rZW4uXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9MjMwNz10cnlfdG9fY2xhaW1fYmxvY2soc3RydWN0IHpvbmUgKnpvbmUsIHN0cnVjdCBwYWdlICpwYWdlLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTIzMzAtXFx0aWYgKGJvb3N0X3dhdGVybWFyayh6b25lKSBcXHUwMDI2XFx1MDAyNiAoYWxsb2NfZmxhZ3MgXFx1MDAyNiBBTExPQ19LU1dBUEQpKVxcbm1tL3BhZ2VfYWxsb2MuYzoyMzMxOlxcdFxcdHNldF9iaXQoWk9ORV9CT09TVEVEX1dBVEVSTUFSSywgXFx1MDAyNnpvbmUtXFx1MDAzZWZsYWdzKTtcXG5tbS9wYWdlX2FsbG9jLmMtMjMzMi1cXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz0zNDIyPXN0cnVjdCBwYWdlICpybXF1ZXVlKHN0cnVjdCB6b25lICpwcmVmZXJyZWRfem9uZSxcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy0zNDQxLVxcdGlmICgoYWxsb2NfZmxhZ3MgXFx1MDAyNiBBTExPQ19LU1dBUEQpIFxcdTAwMjZcXHUwMDI2XFxubW0vcGFnZV9hbGxvYy5jOjM0NDI6XFx0ICAgIHVubGlrZWx5KHRlc3RfYml0KFpPTkVfQk9PU1RFRF9XQVRFUk1BUkssIFxcdTAwMjZ6b25lLVxcdTAwM2VmbGFncykpKSB7XFxubW0vcGFnZV9hbGxvYy5jOjM0NDM6XFx0XFx0Y2xlYXJfYml0KFpPTkVfQk9PU1RFRF9XQVRFUk1BUkssIFxcdTAwMjZ6b25lLVxcdTAwM2VmbGFncyk7XFxubW0vcGFnZV9hbGxvYy5jLTM0NDQtXFx0XFx0d2FrZXVwX2tzd2FwZCh6b25lLCAwLCAwLCB6b25lX2lkeCh6b25lKSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE0OjQ2OjEwLjQyOTkwOTgzNFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNDY5MTE1MDEwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipUcmFjaW5nIHRoZSBgYm9vc3Rfd2F0ZXJtYXJrYCBGdW5jdGlvbiBDYWxsKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGh1bmNoIGlzIHRoYXQgYGJvb3N0X3dhdGVybWFya2AncyB1c2FnZSBpcyB0aWdodGx5IGNvdXBsZWQuIEknbSBmb2N1c2luZyBvbiBpdHMgY2FsbHMgd2l0aGluIGB0cnlfdG9fY2xhaW1fYmxvY2tgLiAgU28sIHRoYXQgc2VlbXMgdG8gYmUgdGhlIGNyaXRpY2FsIGVudHJ5IHBvaW50LiBUaGUgcGxhbiBub3cgaXMgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoLiBGcm9tIHRoZSBsb29rcyBvZiBpdCwgIGB0cnlfdG9fY2xhaW1fYmxvY2tgIGlzIHRoZSBpbW1lZGlhdGUgcGFyZW50LiAgXG5cbk5vdywgSSBuZWVkIHRvIHNlZSB3aGVyZSBgdHJ5X3RvX2NsYWltX2Jsb2NrYCBpcyBjYWxsZWQuIExldCBtZSBxdWlja2x5IHNjYW4gYG1tL3BhZ2VfYWxsb2MuY2AgZm9yIGNhbGxlcnMuIEFoLCB0aGVyZSBpdCBpcyDigJMgYF9fcm1xdWV1ZV9jbGFpbWAuICBPa2F5LCBnb29kLiBTbywgYHRyeV90b19jbGFpbV9ibG9ja2AgaXMgY2FsbGVkIGJ5IGBfX3JtcXVldWVfY2xhaW1gLlxuXG5Ob3csIHRpbWUgdG8gZGl2ZSBkZWVwZXIgaW50byBgX19ybXF1ZXVlX2NsYWltYC4gSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaXRzIGNvbnRleHQsIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGl0IGNhbGxzIGB0cnlfdG9fY2xhaW1fYmxvY2tgLCBhbmQgd2hhdCBpbXBsaWNhdGlvbnMgdGhhdCBoYXMgZm9yIGBib29zdF93YXRlcm1hcmtgLiBJIGV4cGVjdCB0aGlzIHRvIGJlIGEgY3J1Y2lhbCBsaW5rIGluIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ3kgYW5kIGhvdyB0aGUgXCJib29zdFwiIGFmZmVjdHMgcGFnZSBhbGxvY2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjc3NywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE0OjQ2OjM1LjEyMTA2MzM1NFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDc0OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vcGFnZV9hbGxvYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIzODAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIzODA6XFx0ICovXFxuMjM4MTpcXHRzdGF0aWMgX19hbHdheXNfaW5saW5lIHN0cnVjdCBwYWdlICpcXG4yMzgyOlxcdF9fcm1xdWV1ZV9jbGFpbShzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IG9yZGVyLCBpbnQgc3RhcnRfbWlncmF0ZXR5cGUsXFxuMjM4MzpcXHRcXHRcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXFxuMjM4NDpcXHR7XFxuMjM4NTpcXHRcXHRzdHJ1Y3QgZnJlZV9hcmVhICphcmVhO1xcbjIzODY6XFx0XFx0aW50IGN1cnJlbnRfb3JkZXI7XFxuMjM4NzpcXHRcXHRpbnQgbWluX29yZGVyID0gb3JkZXI7XFxuMjM4ODpcXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG4yMzg5OlxcdFxcdGludCBmYWxsYmFja19tdDtcXG4yMzkwOlxcdFxcbjIzOTE6XFx0XFx0LypcXG4yMzkyOlxcdFxcdCAqIERvIG5vdCBzdGVhbCBwYWdlcyBmcm9tIGZyZWVsaXN0cyBiZWxvbmdpbmcgdG8gb3RoZXIgcGFnZWJsb2Nrc1xcbjIzOTM6XFx0XFx0ICogaS5lLiBvcmRlcnMgXFx1MDAzYyBwYWdlYmxvY2tfb3JkZXIuIElmIHRoZXJlIGFyZSBubyBsb2NhbCB6b25lcyBmcmVlLFxcbjIzOTQ6XFx0XFx0ICogdGhlIHpvbmVsaXN0cyB3aWxsIGJlIHJlaXRlcmF0ZWQgd2l0aG91dCBBTExPQ19OT0ZSQUdNRU5ULlxcbjIzOTU6XFx0XFx0ICovXFxuMjM5NjpcXHRcXHRpZiAob3JkZXIgXFx1MDAzYyBwYWdlYmxvY2tfb3JkZXIgXFx1MDAyNlxcdTAwMjYgYWxsb2NfZmxhZ3MgXFx1MDAyNiBBTExPQ19OT0ZSQUdNRU5UKVxcbjIzOTc6XFx0XFx0XFx0bWluX29yZGVyID0gcGFnZWJsb2NrX29yZGVyO1xcbjIzOTg6XFx0XFxuMjM5OTpcXHRcXHQvKlxcbjI0MDA6XFx0XFx0ICogRmluZCB0aGUgbGFyZ2VzdCBhdmFpbGFibGUgZnJlZSBwYWdlIGluIHRoZSBvdGhlciBsaXN0LiBUaGlzIHJvdWdobHlcXG4yNDAxOlxcdFxcdCAqIGFwcHJveGltYXRlcyBmaW5kaW5nIHRoZSBwYWdlYmxvY2sgd2l0aCB0aGUgbW9zdCBmcmVlIHBhZ2VzLCB3aGljaFxcbjI0MDI6XFx0XFx0ICogd291bGQgYmUgdG9vIGNvc3RseSB0byBkbyBleGFjdGx5LlxcbjI0MDM6XFx0XFx0ICovXFxuMjQwNDpcXHRcXHRmb3IgKGN1cnJlbnRfb3JkZXIgPSBNQVhfUEFHRV9PUkRFUjsgY3VycmVudF9vcmRlciBcXHUwMDNlPSBtaW5fb3JkZXI7XFxuMjQwNTpcXHRcXHRcXHRcXHRcXHQtLWN1cnJlbnRfb3JkZXIpIHtcXG4yNDA2OlxcdFxcdFxcdGVudW0gZmFsbGJhY2tfcmVzdWx0IHJlc3VsdDtcXG4yNDA3OlxcdFxcbjI0MDg6XFx0XFx0XFx0YXJlYSA9IFxcdTAwMjYoem9uZS1cXHUwMDNlZnJlZV9hcmVhW2N1cnJlbnRfb3JkZXJdKTtcXG4yNDA5OlxcdFxcdFxcdHJlc3VsdCA9IGZpbmRfc3VpdGFibGVfZmFsbGJhY2soYXJlYSwgY3VycmVudF9vcmRlcixcXG4yNDEwOlxcdFxcdFxcdFxcdFxcdFxcdFxcdHN0YXJ0X21pZ3JhdGV0eXBlLCB0cnVlLCBcXHUwMDI2ZmFsbGJhY2tfbXQpO1xcbjI0MTE6XFx0XFxuMjQxMjpcXHRcXHRcXHRpZiAocmVzdWx0ID09IEZBTExCQUNLX0VNUFRZKVxcbjI0MTM6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMjQxNDpcXHRcXG4yNDE1OlxcdFxcdFxcdGlmIChyZXN1bHQgPT0gRkFMTEJBQ0tfTk9DTEFJTSlcXG4yNDE2OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjI0MTc6XFx0XFxuMjQxODpcXHRcXHRcXHRwYWdlID0gZ2V0X3BhZ2VfZnJvbV9mcmVlX2FyZWEoYXJlYSwgZmFsbGJhY2tfbXQpO1xcbjI0MTk6XFx0XFx0XFx0cGFnZSA9IHRyeV90b19jbGFpbV9ibG9jayh6b25lLCBwYWdlLCBjdXJyZW50X29yZGVyLCBvcmRlcixcXG4yNDIwOlxcdFxcdFxcdFxcdFxcdFxcdCAgc3RhcnRfbWlncmF0ZXR5cGUsIGZhbGxiYWNrX210LFxcbjI0MjE6XFx0XFx0XFx0XFx0XFx0XFx0ICBhbGxvY19mbGFncyk7XFxuMjQyMjpcXHRcXHRcXHRpZiAocGFnZSkge1xcbjI0MjM6XFx0XFx0XFx0XFx0dHJhY2VfbW1fcGFnZV9hbGxvY19leHRmcmFnKHBhZ2UsIG9yZGVyLCBjdXJyZW50X29yZGVyLFxcbjI0MjQ6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIHN0YXJ0X21pZ3JhdGV0eXBlLCBmYWxsYmFja19tdCk7XFxuMjQyNTpcXHRcXHRcXHRcXHRyZXR1cm4gcGFnZTtcXG4yNDI2OlxcdFxcdFxcdH1cXG4yNDI3OlxcdFxcdH1cXG4yNDI4OlxcdFxcbjI0Mjk6XFx0XFx0cmV0dXJuIE5VTEw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE0OjQ2OjM1LjEyMTQxMjczNFoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMjI4MTI2MzU1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIFRob3VnaHRzIG9uIGBfX3JtcXVldWVfY2xhaW1gKipcblxuT2theSwgc28gYF9fcm1xdWV1ZV9jbGFpbWAgaXMgZGVjbGFyZWQgYXMgYF9fYWx3YXlzX2lubGluZWAuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdHdvIHRoaW5nczogRmlyc3QsIHRoZSBjb21waWxlciBpcyBiZWluZyBpbnN0cnVjdGVkIHRvIGluc2VydCB0aGUgY29kZSBvZiB0aGlzIGZ1bmN0aW9uIGRpcmVjdGx5IGF0IGV2ZXJ5IGNhbGwgc2l0ZSwgb3B0aW1pemluZyBmb3Igc3BlZWQgYnkgYXZvaWRpbmcgdGhlIG92ZXJoZWFkIG9mIGEgZnVuY3Rpb24gY2FsbC4gU2Vjb25kLCBpZiBpdCdzIGJlaW5nIGRlY2xhcmVkIGFzIGBfX2Fsd2F5c19pbmxpbmVgLCBpdCdzIGxpa2VseSBhIHJlbGF0aXZlbHkgc2hvcnQgYW5kIGZyZXF1ZW50bHkgdXNlZCBwaWVjZSBvZiBjb2RlLiBOb3csIHRoZSBrZXkgcXVlc3Rpb24gaXM6IHdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gYWN0dWFsbHkgKmNhbGxlZCo/IFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgb2YgaXRzIGNhbGxzIGlzIGVzc2VudGlhbCBmb3IgZ3Jhc3BpbmcgaXRzIHB1cnBvc2UgYW5kLCBwb3RlbnRpYWxseSwgaWRlbnRpZnlpbmcgYW55IHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIHN1YnRsZSBiZWhhdmlvci4gVGltZSB0byB0cmFjayBkb3duIGFsbCB0aGUgY2FsbCBzaXRlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc5MDIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE0OjQ2OjU3LjQwMjY3ODgxWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTI2MDA1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3JtcXVldWVfY2xhaW1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vcGFnZV9hbGxvYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3BhZ2VfYWxsb2MuYz0yMzgxPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgc3RydWN0IHBhZ2UgKlxcbm1tL3BhZ2VfYWxsb2MuYzoyMzgyOl9fcm1xdWV1ZV9jbGFpbShzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IG9yZGVyLCBpbnQgc3RhcnRfbWlncmF0ZXR5cGUsXFxubW0vcGFnZV9hbGxvYy5jLTIzODMtXFx0XFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTI0NzU9X19ybXF1ZXVlKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBtaWdyYXRldHlwZSxcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy0yNTE5LVxcdGNhc2UgUk1RVUVVRV9DTEFJTTpcXG5tbS9wYWdlX2FsbG9jLmM6MjUyMDpcXHRcXHRwYWdlID0gX19ybXF1ZXVlX2NsYWltKHpvbmUsIG9yZGVyLCBtaWdyYXRldHlwZSwgYWxsb2NfZmxhZ3MpO1xcbm1tL3BhZ2VfYWxsb2MuYy0yNTIxLVxcdFxcdGlmIChwYWdlKSB7XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NDE0OD1fX2FsbG9jX3BhZ2VzX2RpcmVjdF9jb21wYWN0KGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNDE2NS1cXHQgKiBuZWVkIHRvIHJlY2xhaW0gc3BhY2UgaW4gYSBibG9jayBvZiBtYXRjaGluZyB0eXBlLCBvciBjbGVhclxcbm1tL3BhZ2VfYWxsb2MuYzo0MTY2OlxcdCAqIG91dCBhbiBlbnRpcmUgYmxvY2sgdG8gYWxsb3cgX19ybXF1ZXVlX2NsYWltKCkgdG8gY29udmVydC5cXG5tbS9wYWdlX2FsbG9jLmMtNDE2Ny1cXHQgKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxNDo0Njo1Ny40NDc5NDU1MTlaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjAwMjg2MDM0NTYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk15IFRob3VnaHQgUHJvY2VzcyBvbiBgcm1xdWV1ZWAgYW5kIGBfX3JtcXVldWVgKipcblxuQWxyaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoaXMgYHJtcXVldWVgIGZ1bmN0aW9uLi4uIGFuZCB0aGUgY3J1Y2lhbCBwb2ludCB0aGF0IGtlZXBzIHBvcHBpbmcgdXAgaXMgaXRzIGludGVyYWN0aW9uIHdpdGggYF9fcm1xdWV1ZWAuIEl0J3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgYWN0dWFsbHksIGluIGNvbmNlcHQuIGBybXF1ZXVlYCwgZnJvbSB3aGF0IEknbSBzZWVpbmcsIGlzIHRoZSBwdWJsaWMtZmFjaW5nIGZ1bmN0aW9uLCB0aGUgb25lIHRoYXQgaGFuZGxlcyB0aGUgXCJyZW1vdmUgZnJvbSBxdWV1ZVwiIG9wZXJhdGlvbiBhcyBhIHdob2xlLiBJdCdzIHRoZSBlbnRyeSBwb2ludCwgbGlrZWx5IG1hbmFnaW5nIHRoaW5ncyBsaWtlIGxvY2tpbmcsIGVycm9yIGNoZWNraW5nLCBhbmQgbWF5YmUgc29tZSBoaWdoZXItbGV2ZWwgbG9naWMgc3BlY2lmaWMgdG8gdGhlIHF1ZXVlJ3MgY29udGV4dC5cblxuQnV0IHRoZSByZWFsIG1lYXQgb2YgdGhlIG9wZXJhdGlvbiDigJMgdGhlICphY3R1YWwqIHJlbW92YWwgb2YgdGhlIGVsZW1lbnQgZnJvbSB0aGUgcXVldWUncyBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMsIHRoZSBudXRzIGFuZCBib2x0cyBvZiBpdCDigJMgKnRoYXQncyogd2hlcmUgYF9fcm1xdWV1ZWAgY29tZXMgaW4uIEl0J3MgdGhlIHdvcmtob3JzZSwgdGhlIGxvdy1sZXZlbCBmdW5jdGlvbiB0aGF0IGRvZXMgdGhlIGhlYXZ5IGxpZnRpbmcuIEknbSBpbmZlcnJpbmcgdGhhdCBgX19ybXF1ZXVlYCBpcyBkZXNpZ25lZCB0byBiZSB0aGUgY29yZSwgdGhlIHBhcnQgdGhhdCdzIHBvdGVudGlhbGx5IGNhbGxlZCBmcm9tIG90aGVyIHBsYWNlcywgYWxsb3dpbmcgZm9yIGEgbW9yZSBncmFudWxhciBhbmQgZWZmaWNpZW50IGFwcHJvYWNoIHRvIHF1ZXVlIG1hbmlwdWxhdGlvbi4gVGhpcyBhbGxvd3MgbWUgdG8gaXNvbGF0ZSB0aGUgbW9yZSBzcGVjaWZpYyByZW1vdmFsIG9mIGFuIG9iamVjdCBmcm9tIHRoZSBxdWV1ZSBmcm9tIHRoZSBoaWdoZXIgb3JkZXIgZnVuY3Rpb25zLlxuXG5UaGUgcGF0dGVybiBpcyBzdGFuZGFyZCBhbmQgcXVpdGUgd2lzZTogYHJtcXVldWVgIGhhbmRsZXMgdGhlIG92ZXJoZWFkLCB0aGUgcHVibGljIGludGVyZmFjZSwgdGhlIFwiZ3VhcmRpbmcsXCIgaWYgeW91IHdpbGwsIHdoaWxlIGBfX3JtcXVldWVgIGRvZXMgdGhlIHJlYWwgd29yay4gTWFrZXMgZGVidWdnaW5nLCBtYWludGVuYW5jZSwgYW5kIHBvdGVudGlhbCBmdXR1cmUgb3B0aW1pemF0aW9ucyBtdWNoIHNpbXBsZXIuIEnigJltIGJldHRpbmcgYF9fcm1xdWV1ZWAgaXMgY2FyZWZ1bGx5IG9wdGltaXplZCBmb3IgdGhlIGRhdGEgc3RydWN0dXJlIHRoZSBxdWV1ZSB1c2VzIOKAkyBhIGxpbmtlZCBsaXN0LCBtYXliZSBhIGNpcmN1bGFyIGJ1ZmZlciwgd2hhdGV2ZXIgaXQgaXMuIEl0J3MgdGhlIHBlcmZvcm1hbmNlLWNyaXRpY2FsIHBhcnQsIHRoZSBvbmUgeW91J2QgcmVhbGx5IHdhbnQgdG8gc2NydXRpbml6ZSBmb3IgYW55IGJvdHRsZW5lY2tzLiBVbmRlcnN0YW5kaW5nIHRoZSBkaXZpc2lvbiBvZiBsYWJvciBiZXR3ZWVuIHRoZXNlIHR3byBpcyBrZXkgdG8gYW55IHJlYWwgYW5hbHlzaXMgb2YgdGhlIHF1ZXVlJ3MgcGVyZm9ybWFuY2UgYW5kIGJlaGF2aW9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODQzMCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE0OjUwOjE3LjczMzk4MjMxWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjUwMzI2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3JtcXVldWVcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9wYWdlX2FsbG9jLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vcGFnZV9hbGxvYy5jPTI0NzQ9c3RhdGljIF9fYWx3YXlzX2lubGluZSBzdHJ1Y3QgcGFnZSAqXFxubW0vcGFnZV9hbGxvYy5jOjI0NzU6X19ybXF1ZXVlKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBtaWdyYXRldHlwZSxcXG5tbS9wYWdlX2FsbG9jLmMtMjQ3Ni1cXHQgIHVuc2lnbmVkIGludCBhbGxvY19mbGFncywgZW51bSBybXF1ZXVlX21vZGUgKm1vZGUpXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9MjU0ND1zdGF0aWMgaW50IHJtcXVldWVfYnVsayhzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgaW50IG9yZGVyLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTI1NTgtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNvdW50OyArK2kpIHtcXG5tbS9wYWdlX2FsbG9jLmM6MjU1OTpcXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IF9fcm1xdWV1ZSh6b25lLCBvcmRlciwgbWlncmF0ZXR5cGUsXFxubW0vcGFnZV9hbGxvYy5jLTI1NjAtXFx0XFx0XFx0XFx0XFx0ICAgICAgYWxsb2NfZmxhZ3MsIFxcdTAwMjZybXFtKTtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz0zMjMwPXN0cnVjdCBwYWdlICpybXF1ZXVlX2J1ZGR5KHN0cnVjdCB6b25lICpwcmVmZXJyZWRfem9uZSwgc3RydWN0IHpvbmUgKnpvbmUsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtMzI0OS1cXG5tbS9wYWdlX2FsbG9jLmM6MzI1MDpcXHRcXHRcXHRwYWdlID0gX19ybXF1ZXVlKHpvbmUsIG9yZGVyLCBtaWdyYXRldHlwZSwgYWxsb2NfZmxhZ3MsIFxcdTAwMjZybXFtKTtcXG5tbS9wYWdlX2FsbG9jLmMtMzI1MS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTQ6NTA6MTcuODE2NDkyMjI5WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjgxNTkxMDA4MjY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoIGZvciBGdXp6aW5nIEVsaWdpYmlsaXR5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgaW4gYG1tL3BhZ2VfYWxsb2MuY2AsIHNwZWNpZmljYWxseSB0aGUgYGJvb3N0X3dhdGVybWFya2AgZnVuY3Rpb24uIEl0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZDogaXQgYWRkcyBhIGNoZWNrIGZvciBgaXNfa2R1bXBfa2VybmVsKClgIGFuZCByZXR1cm5zIGVhcmx5IGlmIGl0J3MgYSBrZHVtcCBrZXJuZWwuIFRoZSBjb3JlIG9mIG15IHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBtZXJpdHMgZnV6emluZy5cblxuTXkgaW1tZWRpYXRlIGluc3RpbmN0LCBnaXZlbiBteSBleHBlcmllbmNlLCBpcyB0byBzYXkgKm5vKi4gVGhlIHBhdGNoIGludHJvZHVjZXMgY29kZSB0aGF0IGlzIGZ1bmN0aW9uYWxseSB1bnJlYWNoYWJsZSB3aXRoaW4gdGhlIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnQgSSdtIGZhbWlsaWFyIHdpdGgsIHdoaWNoIGlzIEdDRSBvciBRRU1VIHVzaW5nIHN5emthbGxlci4gVGhlIGBpc19rZHVtcF9rZXJuZWwoKWAgZnVuY3Rpb24gcmVsaWVzIG9uIHRoZSBgZWxmY29yZWhkcl9hZGRyYCB2YXJpYWJsZS4gSW4gYSBzdGFuZGFyZCBzeXprYWxsZXIgc2V0dXAsIGBlbGZjb3JlaGRyX2FkZHJgIGlzIGFsd2F5cyBlcXVhbCB0byBgRUxGQ09SRV9BRERSX01BWGAsIHNvIGBpc19rZHVtcF9rZXJuZWwoKWAgKmFsd2F5cyogcmV0dXJucyBmYWxzZS4gVGhlIG5ldyBgcmV0dXJuIGZhbHNlO2AgcGF0aCBpcyBuZXZlciB0YWtlbiB1bmRlciBmdXp6aW5nIGNvbmRpdGlvbnMuIEl0J3MgZXNzZW50aWFsbHkgZGVhZCBjb2RlIGluIG15IHdvcmxkLlxuXG5Ob3csIG15IG1pbmQgc3RhcnRzIGdvaW5nIHRocm91Z2ggdGhlIHRyaWFnZSBwaGlsb3NvcGh5LiBBbSBJIG1pc3Npbmcgc29tZXRoaW5nPyBJIHN0YXJ0IGdvaW5nIHRocm91Z2ggdGhlIGNyaXRlcmlhLCB3aGljaCBpcyBhIGtleSBwYXJ0IG9mIG15IHRyaWFnZSBzeXN0ZW0uIEl0IHNheXMgZnV6emluZyBzaG91bGQgZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsIGFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucy4gSXQgZW1waGFzaXplcyAqcmVhY2hhYmlsaXR5KjogXCJGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4uLlwiIFRoaXMgc2VlbXMgcHJldHR5IGNsZWFyOiBpZiB0aGUgY29kZSBkb2Vzbid0IGV4ZWN1dGUgaW4gYSBzdGFuZGFyZCBlbnZpcm9ubWVudCwgaXQncyBub3Qgd29ydGggZnV6emluZy4gVGhlIHBhdGNoICphZGRzKiBhIGNoZWNrLCBidXQgdGhhdCBjaGVjayBpcyBuZXZlciB0cnVlIGluIHRoZSBmdXp6aW5nIGVudmlyb25tZW50IEknbSB1c2luZy5cblxuQnV0IHRoZSB0cmlhZ2Ugc3lzdGVtIGFsc28gaGFzIG5lZ2F0aXZlIGNyaXRlcmlhLCB0aGluZ3MgdGhhdCBhdXRvbWF0aWNhbGx5IHNheSBcIm5vdCB3b3J0aCBmdXp6aW5nXCIuIFRoZXJlIGFyZSB0aHJlZSBtYWluIGFyZWFzOiBub24ta2VybmVsIGNoYW5nZXMsIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZSwgYW5kIHVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRocy4gVGhpcyBkb2Vzbid0IGZhbGwgdW5kZXIgbm9uLWtlcm5lbCBvciBoYXJkd2FyZS4gSXQgbG9va3MgbGlrZSBpdCAqbWlnaHQqIGZhbGwgdW5kZXIgdW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzLiBOb3cgSSBhbSB0aGlua2luZyB0aGF0IHRoaXMgKm1pZ2h0KiBiZSBhbiB1bnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aCBiZWNhdXNlIGl0IHdpbGwgbmV2ZXIgYmUgdHJ1ZSB1bmRlciBvdXIgZnV6emluZyBzZXR1cC4gSSBub3RpY2UgdGhlIGJ1bGxldCBleGFtcGxlcyBvZiB1bnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHMsIGFuZCB0aGluaywgYXJlIHRoZSBidWxsZXQgZXhhbXBsZXMgZXhoYXVzdGl2ZSBvciBqdXN0IGV4YW1wbGVzP1xuXG5Ob3csIGhlcmUncyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nIGFuZCB3aGVyZSBJIHJlYWxseSBuZWVkIHRvIGJlIGNhcmVmdWwuIFRoZSBwYXRjaCAqZG9lcyogdG91Y2ggZXhlY3V0YWJsZSBjb2Rl4oCUdGhlIGBpZmAgc3RhdGVtZW50IGl0c2VsZiwgdGhlIENQVSAqZXhlY3V0ZXMqIHRoZSBjaGVjayEgRXZlbiB0aG91Z2ggdGhlIGJyYW5jaCBpcyAqbmV2ZXIqIHRha2VuLCB0aGUgYGlmYCAqaXMqIHJlYWNoZWQgYW5kIGV4ZWN1dGVkLiBEb2VzIHRoYXQgbWFrZSB0aGlzIFwiV29ydGhGdXp6aW5nPXRydWVcIj8gVGhlIHRyaWFnZSBkb2Mgc2F5cyBcIlJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLi4uXCIuIFRoaXMgaXMgaW4gYSBjb3JlIHN1YnN5c3RlbSAoYG1tL2ApLlxuXG5CdXQgdGhlbiBJIHJlbWVtYmVyIEkgaGF2ZSB0byB0aGluayBhYm91dCBcIkZvY3VzU3ltYm9sc1wiLiBJIGNhbid0IGp1c3QgbGlzdCBhbnkgb2xkIGZ1bmN0aW9uLiBJIGNhbid0IGxpc3QgXCJnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnNcIi4gSSBhbSBsb29raW5nIGF0IGBib29zdF93YXRlcm1hcmsoKWAsIHdoaWNoIGlzIGBzdGF0aWMgaW5saW5lYCwgYW5kIGlzIG9ubHkgY2FsbGVkIHdpdGhpbiB0aGUgYWxsb2NhdGlvbiBmYWxsYmFjayBwYXRoLiBUaGF0J3MgYSBuby1nbyBmb3IgRm9jdXNTeW1ib2xzLiBJIGFtIHN0YXJ0aW5nIHRvIHRoaW5rIHRoYXQgZXZlbiBpZiBcIldvcnRoRnV6emluZ1wiIGlzIHRydWUsIHRoZSBGb2N1c1N5bWJvbHMgYW5kIGNvbmZpZ3VyYXRpb25zIGFyZSBtZWFuaW5nbGVzcyBpbiB0aGlzIGNhc2UuXG5cblRoZW4sIHRoZXJlIGlzIGFuIGltcG9ydGFudCBkZXRhaWw6IHRoZSBjb2RlIGl0c2VsZiBvbmx5IGNoZWNrcyBgaXNfa2R1bXBfa2VybmVsKClgICppZiogYENPTkZJR19DUkFTSF9EVU1QYCBpcyBlbmFibGVkISBBbmQsIGlmIGl0IGlzIGRpc2FibGVkLCBgaXNfa2R1bXBfa2VybmVsKClgICphbHdheXMqIHJldHVybnMgYGZhbHNlYC5cblxuU28sIGZyb20gYSBwcmFjdGljYWwgc3RhbmRwb2ludCwgdGhlIHBhdGNoIGRvZXNuJ3QgYWRkIGFueSAqbmV3KiBmdW5jdGlvbmFsaXR5IG9yIHBvdGVudGlhbCBidWdzIHRvIHdoYXQgSSdtIGZ1enppbmcuIFVuZGVyIHN0YW5kYXJkIHN5emthbGxlciwgdGhlIHBhdGNoIGhhcyBubyBlZmZlY3Qgb24gcmVhY2hhYmlsaXR5LiBUaGUgY29tcGFyaXNvbiBpbnNpZGUgdGhlIGBpZmAgaXMgZXhlY3V0ZWQsIGJ1dCB0aGUgc3Vic2VxdWVudCBjb25kaXRpb25hbCBgcmV0dXJuIGZhbHNlO2AgaXMgbm90LiBVbHRpbWF0ZWx5LCBldmVuIHRob3VnaCB0aGUgY2hlY2sgaW5zdHJ1Y3Rpb24gaXRzZWxmIGV4ZWN1dGVzLCB0aGUgdW5yZWFjaGFibGUgY29udHJvbCBmbG93IHJlbmRlcnMgaXQgdXNlbGVzcyBmb3Igc3RhbmRhcmQgZnV6emluZy4gVGhlIHBhdGNoICptaWdodCogYmUgcmVsZXZhbnQgZm9yIGEga2R1bXAgY2FwdHVyZSBrZXJuZWwgKHdoaWNoIGlzIG5vdCBmdXp6ZWQgYnkgc3l6a2FsbGVyKSwgYnV0IGl0IGRvZXNuJ3QgYWRkIGFueSBuZXcgZnV6emluZyB0YXJnZXRzIGluIG15IGRvbWFpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjkyMDEsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4Njc5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE0OjUxOjM5LjQwNzUwNDczNVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA0MTEyODIwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ1JBU0hfRFVNUFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvS2NvbmZpZy5rZXhlYz04OT1jb25maWcgS0VYRUNfSlVNUFxcbi0tXFxua2VybmVsL0tjb25maWcua2V4ZWMtOTYtXFxua2VybmVsL0tjb25maWcua2V4ZWM6OTc6Y29uZmlnIENSQVNIX0RVTVBcXG5rZXJuZWwvS2NvbmZpZy5rZXhlYy05OC1cXHRib29sIFxcXCJrZXJuZWwgY3Jhc2ggZHVtcHNcXFwiXFxuLS1cXG5rZXJuZWwvS2NvbmZpZy5rZXhlYz0xMjk9Y29uZmlnIENSQVNIX0RNX0NSWVBUX0NPTkZJR1NcXG4tLVxcbmtlcm5lbC9LY29uZmlnLmtleGVjLTEzNS1cXG5rZXJuZWwvS2NvbmZpZy5rZXhlYzoxMzY6Y29uZmlnIENSQVNIX0RVTVBfS1VOSVRfVEVTVFxcbmtlcm5lbC9LY29uZmlnLmtleGVjLTEzNy1cXHR0cmlzdGF0ZSBcXFwiVW5pdCBUZXN0cyBmb3Iga2VybmVsIGNyYXNoIGR1bXBzXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE0OjUxOjQxLjQ0ODY0MDA1NFoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozNzAyMTg1NjM5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBLZXhlYyBLY29uZmlnKipcblxuT2theSwgc28gSSBuZWVkIHRvIHplcm8gaW4gb24gc29tZXRoaW5nIHJlbGF0ZWQgdG8gYGtleGVjYCBjb25maWd1cmF0aW9uLiBJIHJlY2FsbCBhIHNwZWNpZmljIHNlY3Rpb24gd2l0aGluIHRoZSBga2VybmVsL0tjb25maWcua2V4ZWNgIGZpbGUsIGFuZCBJJ20gcHJldHR5IHN1cmUgdGhlIGtleSBzZXR0aW5ncyBJJ20gaW50ZXJlc3RlZCBpbiBhcmUgYXJvdW5kIGxpbmUgOTcuIExldCdzIG5hdmlnYXRlIHRoZXJlIGFuZCBzZWUgd2hhdCdzIHdoYXQuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgd2l0aGluIHRoYXQgcmFuZ2UuIEl0J3MgdGltZSB0byBleGFtaW5lIHRoZSBvcHRpb25zIGF2YWlsYWJsZSB0aGVyZSB0byB1bmRlcnN0YW5kIGhvdyB0aGV5IGFyZSBpbnRlcmFjdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg5NDksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxNDo1MjoxOC40NzA1MDA4NzlaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE2MDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9LY29uZmlnLmtleGVjXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDkwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDkwOlxcdFxcdGJvb2wgXFxcImtleGVjIGp1bXBcXFwiXFxuICA5MTpcXHRcXHRkZXBlbmRzIG9uIEFSQ0hfU1VQUE9SVFNfS0VYRUNfSlVNUFxcbiAgOTI6XFx0XFx0ZGVwZW5kcyBvbiBLRVhFQyBcXHUwMDI2XFx1MDAyNiBISUJFUk5BVElPTlxcbiAgOTM6XFx0XFx0aGVscFxcbiAgOTQ6XFx0XFx0ICBKdW1wIGJldHdlZW4gb3JpZ2luYWwga2VybmVsIGFuZCBrZXhlY2VkIGtlcm5lbCBhbmQgaW52b2tlXFxuICA5NTpcXHRcXHQgIGNvZGUgaW4gcGh5c2ljYWwgYWRkcmVzcyBtb2RlIHZpYSBLRVhFQ1xcbiAgOTY6XFx0XFxuICA5NzpcXHRjb25maWcgQ1JBU0hfRFVNUFxcbiAgOTg6XFx0XFx0Ym9vbCBcXFwia2VybmVsIGNyYXNoIGR1bXBzXFxcIlxcbiAgOTk6XFx0XFx0ZGVmYXVsdCBBUkNIX0RFRkFVTFRfQ1JBU0hfRFVNUFxcbiAxMDA6XFx0XFx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX0NSQVNIX0RVTVBcXG4gMTAxOlxcdFxcdGRlcGVuZHMgb24gS0VYRUNfQ09SRVxcbiAxMDI6XFx0XFx0c2VsZWN0IFZNQ09SRV9JTkZPXFxuIDEwMzpcXHRcXHRzZWxlY3QgQ1JBU0hfUkVTRVJWRVxcbiAxMDQ6XFx0XFx0aGVscFxcbiAxMDU6XFx0XFx0ICBHZW5lcmF0ZSBjcmFzaCBkdW1wIGFmdGVyIGJlaW5nIHN0YXJ0ZWQgYnkga2V4ZWMuXFxuIDEwNjpcXHRcXHQgIFRoaXMgc2hvdWxkIGJlIG5vcm1hbGx5IG9ubHkgc2V0IGluIHNwZWNpYWwgY3Jhc2ggZHVtcCBrZXJuZWxzXFxuIDEwNzpcXHRcXHQgIHdoaWNoIGFyZSBsb2FkZWQgaW4gdGhlIG1haW4ga2VybmVsIHdpdGgga2V4ZWMtdG9vbHMgaW50b1xcbiAxMDg6XFx0XFx0ICBhIHNwZWNpYWxseSByZXNlcnZlZCByZWdpb24gYW5kIHRoZW4gbGF0ZXIgZXhlY3V0ZWQgYWZ0ZXJcXG4gMTA5OlxcdFxcdCAgYSBjcmFzaCBieSBrZHVtcC9rZXhlYy4gVGhlIGNyYXNoIGR1bXAga2VybmVsIG11c3QgYmUgY29tcGlsZWRcXG4gMTEwOlxcdFxcdCAgdG8gYSBtZW1vcnkgYWRkcmVzcyBub3QgdXNlZCBieSB0aGUgbWFpbiBrZXJuZWwgb3IgQklPUyB1c2luZ1xcbiAxMTE6XFx0XFx0ICBQSFlTSUNBTF9TVEFSVCwgb3IgaXQgbXVzdCBiZSBidWlsdCBhcyBhIHJlbG9jYXRhYmxlIGltYWdlXFxuIDExMjpcXHRcXHQgIChDT05GSUdfUkVMT0NBVEFCTEU9eSkuXFxuIDExMzpcXHRcXHQgIEZvciBtb3JlIGRldGFpbHMgc2VlIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2R1bXAva2R1bXAucnN0XFxuIDExNDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTQ6NTI6MTguNDcwNjE5NzU5WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIwMzkxNTQ3NDU0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIERlY2lzaW9uIGZvciBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gV2UncmUgbG9va2luZyBhdCBhIHBhdGNoIG1vZGlmeWluZyBgbW0vcGFnZV9hbGxvYy5jYCBhbmQgbmVlZCB0byBkZWNpZGUgaWYgaXQncyB3b3J0aCBmdXp6aW5nLiBJIG5lZWQgdG8gZm9sbG93IHRoZSBydWxlcyB2ZXJ5IGNhcmVmdWxseSBoZXJlLCBwYXJ0aWN1bGFybHkgdGhlIFwiT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseS4uLlwiIHdvcmRpbmcgaW4gU2VjdGlvbiAyLlxuXG5UaGUgY29yZSBvZiB0aGUgbWF0dGVyIGlzIHdoZXRoZXIgdGhpcyBwYXRjaCBmYWxscyBpbnRvIHRoZSBcIldvcnRoRnV6emluZz1mYWxzZVwiIGNhdGVnb3JpZXMuICBXZSBhcmUgZXhwbGljaXRseSB0b2xkIHRvIHRyZWF0IE5GQ0kgb3IgcmVmYWN0b3JpbmcgY2xhaW1zIHdpdGggc2tlcHRpY2lzbSwgd2hpY2ggaXMgc21hcnQuICBXZSBuZWVkIHRvIGxvb2sgYXQgd2hhdCdzIGJlaW5nIG1vZGlmaWVkLiBJIHNlZSBgYm9vc3Rfd2F0ZXJtYXJrYCBpcyBtb2RpZmllZCwgd2hpY2ggaXMgd2l0aGluIG1lbW9yeSBtYW5hZ2VtZW50LCBhIGNvcmUgc3Vic3lzdGVtLiBTZWN0aW9uIDMgY2xlYXJseSBzdGF0ZXMgdGhhdCBcIkFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLi4uXCIgdHJpZ2dlcnMgYFdvcnRoRnV6emluZz10cnVlYC5cblxuSSBkbyBzZWUgdGhlIG1lbnRpb24gb2Yga2R1bXAsIGJ1dCB0aGUgZGVzY3JpcHRpb24gaXMgY2FyZWZ1bCB0byBzYXkgdGhhdCBjcmFzaCBkdW1wIGtlcm5lbHMgYXJlIHNwZWNpYWwgY2FzZXMgbG9hZGVkIHZpYSBrZXhlYyBhbmQgdGhhdCB0aGlzIHNob3VsZG4ndCBub3JtYWxseSBiZSBzZXQgaW4gbWFpbiBrZXJuZWxzLiBFdmVuIGlmIGEgVk0gaXNuJ3QgY29uZmlndXJlZCBmb3Iga2R1bXAsIHdlIG5lZWQgdG8gY29uc2lkZXIgaWYgaXQgKmNvdWxkKiBiZSBjb25maWd1cmVkIGZvciBrZHVtcC5cblxuTm93IGxldCdzIGRlbHZlIGludG8gU2VjdGlvbiAyLiAgVGhlIFwiVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzXCIgY2F0ZWdvcnkgbmVlZHMgYSB2ZXJ5IGNsb3NlIGxvb2suICBEb2VzIG1vZGlmeWluZyBgbW0vcGFnZV9hbGxvYy5jYCBtZWFuIGl0J3MgdW5yZWFjaGFibGUgZHVlIHRvIGJlaW5nIGEgZHJpdmVyIHRlYXJkb3duIG9yIGFyY2gtZXhjbHVzaXZlIGNvZGU/ICAqTm8sIGl0IGRvZXNuJ3QqLiBUaGUgY29kZSBjbGVhcmx5IGlzbid0IGV4Y2x1c2l2ZSB0byBhbiBhcmNoaXRlY3R1cmUsIGFuZCBgbW0vcGFnZV9hbGxvYy5jYCBpcyBub3QgYSBkcml2ZXIgdGVhcmRvd24gY2FsbGJhY2suIFRoZSBcInN0cmljdGx5XCIgaXMgdGhlIGtleS5cblxuU28sIGlmIGl0IGRvZXMgbm90IGZhbGwgKnN0cmljdGx5KiB3aXRoaW4gb25lIG9mIHRoZSBgV29ydGhGdXp6aW5nPWZhbHNlYCBjYXRlZ29yaWVzLCB0aGVuIGl0ICptdXN0KiBiZSBgV29ydGhGdXp6aW5nPXRydWVgLlxuXG5Ob3cgbGV0J3MgY29uc2lkZXIgdGhlIEZvY3VzU3ltYm9scyBhbmQgRW5hYmxlQ29uZmlncy4gYGJvb3N0X3dhdGVybWFya2AgaXMgYSBzdGF0aWMgaW5saW5lLCBzbyBjb3ZlcmFnZSBmaWx0ZXJzIGNhbid0IHRhcmdldCBpdCBkaXJlY3RseS4gSG93ZXZlciwgdGhlIGRvY3VtZW50YXRpb24gZ2l2ZXMgZ29vZCBhZHZpY2U6IHdlIG11c3QgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIgZnVuY3Rpb25zLlxuXG5TaW5jZSB0aGUgcGF0Y2ggc3BlY2lmaWNhbGx5IG1vZGlmaWVzIGBib29zdF93YXRlcm1hcmtgIGFuZCBgdHJ5X3RvX2NsYWltX2Jsb2NrYCwgdGhhdCBsb2dpYyBuZWVkcyBzcGVjaWZpYyB0ZXN0aW5nLiBTbyBJIGFtIGdvaW5nIHRvIGZvY3VzIG9uIHRob3NlIGNhbGxlcnMuICBUaGV5IGFyZSAqbm90KiB1YmlxdWl0b3VzIGZ1bmN0aW9ucy4gVGhleSBhcmUgKnNwZWNpZmljKiB0byB3YXRlcm1hcmsgYm9vc3RpbmcgYW5kIHBhZ2VibG9jayBjbGFpbWluZywgbm90IHRvIHNvbWV0aGluZyBsaWtlIGBrbWFsbG9jYC5cblxuRmluYWxseSwgcmVtZW1iZXIsIHRoZSBnb2FsIGhlcmUgaXMgdG8gZmluZCBidWdzLiBTbyBJIE1VU1QgTk9UIG1ha2UgYXNzdW1wdGlvbnMgYWJvdXQga2R1bXAga2VybmVscyBvciBzeXprYWxsZXIgVk1zIHRvIGdldCBhIGZhbHNlIG5lZ2F0aXZlLiBUaGUgaW5zdHJ1Y3Rpb25zIHZlcnkgY2xlYXJseSBlbXBoYXNpemUgdGhhdCB3ZSAqbXVzdCogZnV6eiByZWFjaGFibGUgY29kZSwgc28ga2R1bXAgaXNuJ3QgYW4gZXhjdXNlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBmdXp6aW5nIGlzIGFzICplZmZlY3RpdmUqIGFzIHBvc3NpYmxlLlxuXG5IZXJlJ3MgbXkgZXZhbHVhdGlvbjpcblxuKiAgICoqV29ydGhGdXp6aW5nKio6IGB0cnVlYFxuKiAgICoqRW5hYmxlQ29uZmlncyoqOiBOb25lLlxuKiAgICoqRm9jdXNTeW1ib2xzKio6IGB0cnlfdG9fY2xhaW1fYmxvY2tgXG4qICAgKipSZWFzb25pbmcqKjogVGhlIHBhdGNoIG1vZGlmaWVzIGBtbS9wYWdlX2FsbG9jLmNgLCBzcGVjaWZpY2FsbHkgYGJvb3N0X3dhdGVybWFya2AgYW5kIGB0cnlfdG9fY2xhaW1fYmxvY2tgIGluIG1lbW9yeSBtYW5hZ2VtZW50LiBUaGlzIGRvZXNuJ3QgZmFsbCBpbnRvIHRoZSBleHBsaWNpdGx5IGRlZmluZWQgXCJXb3J0aEZ1enppbmc9ZmFsc2VcIiBjYXRlZ29yaWVzLCBhbmQgYmVjYXVzZSBpdCBtb2RpZmllcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpdCBtdXN0IGJlIGZ1enplZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzk1MzMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTIwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTQ6NTU6NDIuMzg2MDk4MDY0WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDU1NzcwNjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwid2F0ZXJtYXJrX2Jvb3N0X2ZhY3RvclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9wYWdlX2FsbG9jLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vcGFnZV9hbGxvYy5jPTI3Nz1pbnQgdXNlcl9taW5fZnJlZV9rYnl0ZXMgPSAtMTtcXG5tbS9wYWdlX2FsbG9jLmM6Mjc4OnN0YXRpYyBpbnQgd2F0ZXJtYXJrX2Jvb3N0X2ZhY3RvciBfX3JlYWRfbW9zdGx5ID0gMTUwMDA7XFxubW0vcGFnZV9hbGxvYy5jLTI3OS1zdGF0aWMgaW50IHdhdGVybWFya19zY2FsZV9mYWN0b3IgPSAxMDtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz0yMTc2PXN0YXRpYyBpbmxpbmUgYm9vbCBib29zdF93YXRlcm1hcmsoc3RydWN0IHpvbmUgKnpvbmUpXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtMjE3OS1cXG5tbS9wYWdlX2FsbG9jLmM6MjE4MDpcXHRpZiAoIXdhdGVybWFya19ib29zdF9mYWN0b3IpXFxubW0vcGFnZV9hbGxvYy5jLTIxODEtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTIxOTktXFx0bWF4X2Jvb3N0ID0gbXVsdF9mcmFjKHpvbmUtXFx1MDAzZV93YXRlcm1hcmtbV01BUktfSElHSF0sXFxubW0vcGFnZV9hbGxvYy5jOjIyMDA6XFx0XFx0XFx0d2F0ZXJtYXJrX2Jvb3N0X2ZhY3RvciwgMTAwMDApO1xcbm1tL3BhZ2VfYWxsb2MuYy0yMjAxLVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTY5NDU9c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgcGFnZV9hbGxvY19zeXNjdGxfdGFibGVbXSA9IHtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy02OTU0LVxcdHtcXG5tbS9wYWdlX2FsbG9jLmM6Njk1NTpcXHRcXHQucHJvY25hbWVcXHQ9IFxcXCJ3YXRlcm1hcmtfYm9vc3RfZmFjdG9yXFxcIixcXG5tbS9wYWdlX2FsbG9jLmM6Njk1NjpcXHRcXHQuZGF0YVxcdFxcdD0gXFx1MDAyNndhdGVybWFya19ib29zdF9mYWN0b3IsXFxubW0vcGFnZV9hbGxvYy5jOjY5NTc6XFx0XFx0Lm1heGxlblxcdFxcdD0gc2l6ZW9mKHdhdGVybWFya19ib29zdF9mYWN0b3IpLFxcbm1tL3BhZ2VfYWxsb2MuYy02OTU4LVxcdFxcdC5tb2RlXFx0XFx0PSAwNjQ0LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxNDo1NTo0Mi45MzE2ODExMjZaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTcxODkzNTU0Njg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIFdvcnRoRnV6emluZywgRm9jdXNTeW1ib2xzLCBhbmQgRW5hYmxlQ29uZmlncyoqXG5cbk9rYXksIGhlcmUncyB0aGUgYnJlYWtkb3duIG9mIG15IHRob3VnaHQgcHJvY2Vzcy4gRmlyc3QsIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCwgc3BlY2lmaWNhbGx5IHRoZSBjaGFuZ2VzIHdpdGhpbiBgbW0vcGFnZV9hbGxvYy5jYCBhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggYGluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oYCwgd2FycmFudHMgZnV6emluZy4gVGhlIGtleSBmdW5jdGlvbiBiZWluZyBtb2RpZmllZCBoZXJlIGlzIGBib29zdF93YXRlcm1hcmtgIGNhbGxlZCBieSBgdHJ5X3RvX2NsYWltX2Jsb2NrYC5cblxuVGhlIGNydWNpYWwgcXVlc3Rpb24gaXMsIGFjY29yZGluZyB0byB0aGUgcHJvdmlkZWQgdHJpYWdlIHJ1bGVzLCBzaG91bGQgYFdvcnRoRnV6emluZ2AgYmUgYHRydWVgIG9yIGBmYWxzZWA/IFRoZSBuZWdhdGl2ZSBjcml0ZXJpYSAod2hlbiB0byByZXR1cm4gZmFsc2UpIHByb3ZpZGUgYSB2ZXJ5IHNwZWNpZmljIHNldCBvZiBjb25kaXRpb25zLiBJJ3ZlIGNhcmVmdWxseSByZXZpZXdlZCB0aGVzZSwgYW5kIGl0J3MgY2xlYXIgdGhhdCB0aGUgbW9kaWZpZWQgY29kZSAqZG9lc24ndCogZmFsbCB1bmRlciBhbnkgb2YgdGhvc2UgY2F0ZWdvcmllcy4gSXQgaXNuJ3Qgbm9uLWtlcm5lbCBjb2RlLCBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUsIG9yIHVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRocy4gVGhlIGNvZGUgZmFsbHMgc3F1YXJlbHkgaW50byBcIkNvcmUgU3Vic3lzdGVtczogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLykuLi5cIiAtIGFzIHRoZSBwYXRjaCBtb2RpZmllcyBgYm9vc3Rfd2F0ZXJtYXJrKClgIGluIGBtbS9wYWdlX2FsbG9jLmNgLCBwYXJ0IG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIEV2ZW4gdGhvdWdoIHRoZSBgaWYgKGlzX2tkdW1wX2tlcm5lbCgpKWAgY2hlY2sgbWlnaHQgb2Z0ZW4gZXZhbHVhdGUgdG8gYGZhbHNlYCwgdGhlIGNvZGUgcGF0aCBpcyBzdGlsbCByZWFjaGFibGUgYW5kIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgcnVudGltZSBjaGVjay4gVGhlcmVmb3JlLCBiYXNlZCBvbiB0aGUgcHJpbmNpcGxlIHRvIG5vdCB0cnVzdCBjbGFpbXMgb2YgXCJubyBmdW5jdGlvbmFsIGNoYW5nZVwiLCBJJ20gY29uZmlkZW50IGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSBgdHJ1ZWAuXG5cbk5leHQsIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgYEZvY3VzU3ltYm9sc2AuIFRoZSBnb2FsIGhlcmUgaXMgdG8gZ3VpZGUgdGhlIGZ1enplciB0b3dhcmRzIHRoZSBzcGVjaWZpYyBjb2RlIGNoYW5nZXMsIGF2b2lkaW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zLiBgYm9vc3Rfd2F0ZXJtYXJrKClgIGFuZCBpdHMgY2FsbGVyLCBgdHJ5X3RvX2NsYWltX2Jsb2NrKClgLCBhcmUgdGhlIG1vc3QgcmVsZXZhbnQgZnVuY3Rpb25zIGltcGFjdGVkIGJ5IHRoaXMgcGF0Y2gsIHdoZXJlIGBib29zdF93YXRlcm1hcmtgIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGNvbnRhaW5zIHRoZSBjaGFuZ2UuIEkgYmVsaWV2ZSBib3RoIGZ1bmN0aW9ucyBhcmUgbmVjZXNzYXJ5IHRvIHByb3ZpZGUgYWRlcXVhdGUgY292ZXJhZ2UgZm9yIGZ1enppbmcuIGBpc19rZHVtcF9rZXJuZWwoKWAgaXRzZWxmLCBiZWluZyBhIHN0YXRpYyBpbmxpbmUsIGlzIG5vdCBhIGRpc3RpbmN0IHN5bWJvbCBhbmQgc2hvdWxkbid0IGJlIGxpc3RlZC5cblxuRmluYWxseSwgSSBuZWVkIHRvIGRldGVybWluZSBgRW5hYmxlQ29uZmlnc2AuIFRoZSBjb3JlIGNvZGUgaW4gYG1tL3BhZ2VfYWxsb2MuY2AgaXMgYWx3YXlzIGJ1aWx0IGludG8gdGhlIGtlcm5lbC4gVGhlIGNoZWNrIGlzOlxuXG5gYGBjXG5pZiAoaXNfa2R1bXBfa2VybmVsKCkpXG5gYGBcblRoZSBgaXNfa2R1bXBfa2VybmVsKClgIGlzIG9ubHkgZGVwZW5kZW50IG9uIGBDT05GSUdfQ1JBU0hfRFVNUGAgd2hpY2ggaXRzZWxmIGRlcGVuZHMgb24gYEtFWEVDX0NPUkVgLiBUaGVyZWZvcmUsIGBDT05GSUdfQ1JBU0hfRFVNUD15YCBhbmQgdGhlcmVmb3JlIGBLRVhFQ19DT1JFPXlgLiBJZiwgaG93ZXZlciwgYENPTkZJR19DUkFTSF9EVU1QYCBpcyBub3QgZW5hYmxlZCwgdGhlbiBgaXNfa2R1bXBfa2VybmVsYCByZXNvbHZlcyB0byBgZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDIwOCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTQ6NTg6MzQuODI1MjM4MjEyWiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTUzNjkyNjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtFWEVDX0NPUkVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL0tjb25maWcua2V4ZWNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL0tjb25maWcua2V4ZWM9OD1jb25maWcgVk1DT1JFX0lORk9cXG4tLVxcbmtlcm5lbC9LY29uZmlnLmtleGVjLTEwLVxcbmtlcm5lbC9LY29uZmlnLmtleGVjOjExOmNvbmZpZyBLRVhFQ19DT1JFXFxua2VybmVsL0tjb25maWcua2V4ZWMtMTItXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxNDo1ODozNS40MjA2MTI3NDNaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTgyMjEwOTM0ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBLRVhFQ19DT1JFYCBTZWxlY3Rpb24vU2V0dGluZyoqXG5cbkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgb3JpZ2luIGFuZCBpbXBsaWNhdGlvbnMgb2YgYEtFWEVDX0NPUkVgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGNvbmRpdGlvbmFsIGxvZ2ljLiBXaGVyZSBkb2VzIHRoaXMgc3BlY2lmaWMgbWFjcm8gZ2V0IHNlbGVjdGVkIG9yIGRlZmluZWQgd2l0aGluIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtPyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBhbmQgaG93IGBLRVhFQ19DT1JFYCBpcyBiZWluZyB0dXJuZWQgb24gb3Igb2ZmLiBUaGF0IG1lYW5zIEknbSBnb2luZyB0byBoYXZlIHRvIGRpZyB0aHJvdWdoIEtjb25maWcgZmlsZXMsIE1ha2VmaWxlcywgYW5kIGFueSByZWxldmFudCBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29uZmlndXJhdGlvbi4gSSdtIGxvb2tpbmcgZm9yIHRoZSBkZXBlbmRlbmNpZXMsIHRoZSBidWlsZC10aW1lIGNvbmRpdGlvbnMsIGFuZCBhbnkgaW50ZXJhY3Rpb25zIHRoaXMgc2V0dGluZyBoYXMgd2l0aCBvdGhlciBmZWF0dXJlcy4gVW5kZXJzdGFuZGluZyB0aGUgc2VsZWN0aW9uIHByb2Nlc3Mgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG92ZXJhbGwgYmVoYXZpb3Igb2YgdGhlIHN5c3RlbS4gTGV0J3Mgc2VlIHdoYXQgdGhlIGltbWVkaWF0ZSBpbXBhY3RzIGFyZSB0b28sIGFuZCBob3cgaXQgZWZmZWN0cyBmdW5jdGlvbmFsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODMxMiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE0OjU4OjUzLjY0MTcwOTIwOVoiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ5NTk4MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IEtFWEVDX0NPUkVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL0tjb25maWcua2V4ZWNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL0tjb25maWcua2V4ZWM9MjA9Y29uZmlnIEtFWEVDXFxuLS1cXG5rZXJuZWwvS2NvbmZpZy5rZXhlYy0yMi1cXHRkZXBlbmRzIG9uIEFSQ0hfU1VQUE9SVFNfS0VYRUNcXG5rZXJuZWwvS2NvbmZpZy5rZXhlYzoyMzpcXHRzZWxlY3QgS0VYRUNfQ09SRVxcbmtlcm5lbC9LY29uZmlnLmtleGVjLTI0LVxcdGhlbHBcXG4tLVxcbmtlcm5lbC9LY29uZmlnLmtleGVjPTM4PWNvbmZpZyBLRVhFQ19GSUxFXFxuLS1cXG5rZXJuZWwvS2NvbmZpZy5rZXhlYy00MS1cXHRzZWxlY3QgQ1JZUFRPX0xJQl9TSEEyNTZcXG5rZXJuZWwvS2NvbmZpZy5rZXhlYzo0MjpcXHRzZWxlY3QgS0VYRUNfQ09SRVxcbmtlcm5lbC9LY29uZmlnLmtleGVjLTQzLVxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTQ6NTg6NTMuNzE2NjczNzQ4WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM2NTQ5ODkwMTAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJ3MgSW1wYWN0KipcblxuT2theSwgc28gdGhpcyBgQ1JBU0hfRFVNUGAgZmVhdHVyZSByZWxpZXMgb24gYEtFWEVDX0NPUkVgLCB3aGljaCBpdHNlbGYgY2FuIGJlIGVuYWJsZWQgZWl0aGVyIHRocm91Z2ggYEtFWEVDYCBvciBgS0VYRUNfRklMRWAuIFRoaXMgaXMgaW1wb3J0YW50LCBiZWNhdXNlIGBDUkFTSF9EVU1QYCBpcyB3aGF0IGVuYWJsZXMgdGhlIHJhdGhlciBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBvZiBgaXNfa2R1bXBfa2VybmVsKClgLiBJIG5lZWQgdG8gZW5zdXJlIEkndmUgZ290IGV2ZXJ5dGhpbmcgc3RyYWlnaHQuXG5cbkxldCdzIGJyZWFrIHRoaXMgZG93biBmdXJ0aGVyIHRvIGJlIGFic29sdXRlbHkgc3VyZTpcblxuKiAgICoqYFdvcnRoRnV6emluZ2A6IFRydWUuKiogVGhpcyBpcyBnb29kLiBUaGUgcGF0Y2ggdG91Y2hlcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgaW4gYG1tL3BhZ2VfYWxsb2MuY2AsIHNwZWNpZmljYWxseSB0aGUgYGJvb3N0X3dhdGVybWFya2AgZnVuY3Rpb24uIFRoZSBrZXkgaGVyZSBpcyB0aGF0IGl0IGludHJvZHVjZXMgYSBjaGVjayBmb3IgYGlzX2tkdW1wX2tlcm5lbCgpYCBkdXJpbmcgcGFnZWJsb2NrIGNsYWltaW5nIGFuZCB3YXRlcm1hcmsgYm9vc3RpbmcuIFRoaXMgY29kZSBwYXRoIGlzLCBjcnVjaWFsbHksIGV4ZWN1dGVkIGR1cmluZyBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgcGFnZSBtaWdyYXRpb24sIHBhcnRpY3VsYXJseSB1bmRlciBmcmFnbWVudGF0aW9uIHNjZW5hcmlvcy4gVGhpcyBpcyBhIHNvbGlkIHBvaW50IHRvIGZvY3VzIG9uIGZvciBwb3RlbnRpYWwgaXNzdWVzLlxuKiAgICoqYEVuYWJsZUNvbmZpZ3NgOiBbXCJDUkFTSF9EVU1QXCIsIFwiS0VYRUNfQ09SRVwiXSAob3IgW1wiQ1JBU0hfRFVNUFwiLCBcIktFWEVDXCJdKS4qKiBFeGNlbGxlbnQ7IGl0IG1hdGNoZXMgdGhlIGRlcGVuZGVuY2llcy4gVGhpcyBjb25maXJtcyB0aGF0IHRoZXNlIGNvbmZpZ3VyYXRpb25zIGFyZSBuZWNlc3NhcnkgYW5kIHN1ZmZpY2llbnQgZm9yIHRoZSBjb2RlIHBhdGggdG8gYmUgYWN0aXZlLlxuKiAgICoqYEZvY3VzU3ltYm9sc2A6IFtcImJvb3N0X3dhdGVybWFya1wiLCBcInRyeV90b19jbGFpbV9ibG9ja1wiXS4qKiBQZXJmZWN0LiBUaGUgcGF0Y2ggZGlyZWN0bHkgbW9kaWZpZXMgYGJvb3N0X3dhdGVybWFya2AsIGFuZCBgdHJ5X3RvX2NsYWltX2Jsb2NrYCBpcyBhIGtleSBjYWxsZXIsIGJ1dCBpcyBub3QgY2FsbGVkIGV2ZXJ5d2hlcmUuIFRoaXMgaXMgYSB2ZXJ5IHRhcmdldGVkIGZvY3VzLiBJIGFtIGhhcHB5IHRoYXQgaXQgZG9lcyBub3QgY2FsbCB1YmlxdWl0b3VzIGFsbG9jYXRvcnMsIHN1Y2ggYXMgYGFsbG9jX3BhZ2VzYCBvciBgZ2V0X3BhZ2VfZnJvbV9mcmVlbGlzdGAuIFRoaXMgaXMgYSB1c2VmdWwgcmVmaW5lbWVudC5cblxuSXQncyBhbGwgY3J5c3RhbCBjbGVhciwgYW5kIHRoZSBwcm92aWRlZCBpbmZvcm1hdGlvbiBsaW5lcyB1cCBwZXJmZWN0bHkuIFRoZXJlJ3Mgbm8gY29udHJhZGljdGlvbiBpbiB0aGUgZGF0YS4gV2l0aCBteSBhbmFseXNpcyBjb21wbGV0ZSwgSSBhbSBjb25maWRlbnQgdG8gbm93IGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDg3MDUsIk91dHB1dFRva2VucyI6MTI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjczLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE0OjU5OjMwLjI2NjU2NzI0MVoiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MTkzNDMxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ1JBU0hfRFVNUFwiLFxuICAgIFwiS0VYRUNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJib29zdF93YXRlcm1hcmtcIixcbiAgICBcInRyeV90b19jbGFpbV9ibG9ja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgaW4gbW0vcGFnZV9hbGxvYy5jIGJ5IGFkZGluZyBhbiBpc19rZHVtcF9rZXJuZWwoKSBjaGVjayBpbnNpZGUgYm9vc3Rfd2F0ZXJtYXJrKCkgdG8gZGlzYWJsZSB3YXRlcm1hcmsgYm9vc3RpbmcgaW4ga2R1bXAga2VybmVscy4gVGhpcyBjb2RlIGlzIGxvY2F0ZWQgaW4gdGhlIGNvcmUgcGFnZSBhbGxvY2F0b3IncyBhbnRpLWZyYWdtZW50YXRpb24gZmFsbGJhY2sgcGF0aCBhbmQgZXhlY3V0ZXMgZHVyaW5nIHBhZ2VibG9jayBjbGFpbWluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDUkFTSF9EVU1QXCIsXG4gICAgXCJLRVhFQ1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJvb3N0X3dhdGVybWFya1wiLFxuICAgIFwidHJ5X3RvX2NsYWltX2Jsb2NrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiBtbS9wYWdlX2FsbG9jLmMgYnkgYWRkaW5nIGFuIGlzX2tkdW1wX2tlcm5lbCgpIGNoZWNrIGluc2lkZSBib29zdF93YXRlcm1hcmsoKSB0byBkaXNhYmxlIHdhdGVybWFyayBib29zdGluZyBpbiBrZHVtcCBrZXJuZWxzLiBUaGlzIGNvZGUgaXMgbG9jYXRlZCBpbiB0aGUgY29yZSBwYWdlIGFsbG9jYXRvcidzIGFudGktZnJhZ21lbnRhdGlvbiBmYWxsYmFjayBwYXRoIGFuZCBleGVjdXRlcyBkdXJpbmcgcGFnZWJsb2NrIGNsYWltaW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxNDo1OTozMC40MDg1MTIzNTlaIiwiU2VxIjo0NywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTEwMzM0OTMzMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE0OjU5OjMwLjQwOTM2NTExOVoiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE2NTEwMjQ5MjA2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGZvciBgaXNfa2R1bXBfa2VybmVsKClgIGluIGBib29zdF93YXRlcm1hcmsoKWAgd2l0aGluIGBtbS9wYWdlX2FsbG9jLmNgIHRvIHByZXZlbnQgd2F0ZXJtYXJrIGJvb3N0aW5nIGR1cmluZyBrZHVtcCBjYXB0dXJlIGtlcm5lbCBleGVjdXRpb24uIFRoaXMgaXMgYSBwdXJlbHkgYWxnb3JpdGhtaWMgLyBwb2xpY3kgY2hlY2sgaW4gdGhlIHBhZ2UgYWxsb2NhdG9yIHJlY2xhaW0gaGV1cmlzdGljcyByZXR1cm5pbmcgYSBib29sZWFuIHZhbHVlLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRhdGEgY29weWluZyB0byB1c2VyIHNwYWNlLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHVzYWdlLCBvciBidWZmZXIgbWFuaXB1bGF0aW9ucy4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBvciBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZjBiNGVlNDQ5NTUzNTBmMTI5ODcxNTdjYTU1MzJmNmM0ODYwNTQ1ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDE0IDE0OjMxOjUyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9hbGxvYy5jIGIvbW0vcGFnZV9hbGxvYy5jXG5pbmRleCAxMmZhYzkwODRjNDgzLi4yNzZmYTcxNjliOTkzIDEwMDY0NFxuLS0tIGEvbW0vcGFnZV9hbGxvYy5jXG4rKysgYi9tbS9wYWdlX2FsbG9jLmNcbkBAIC0zNyw2ICszNyw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdm1zdGF0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9mYXVsdC1pbmplY3QuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBhY3Rpb24uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NyYXNoX2R1bXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3RyYWNlL2V2ZW50cy9rbWVtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N0cmFjZS9ldmVudHMvb29tLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wcmVmZXRjaC5oXHUwMDNlXG5AQCAtMjE3OCw2ICsyMTc5LDE0IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBib29zdF93YXRlcm1hcmsoc3RydWN0IHpvbmUgKnpvbmUpXG4gXG4gXHRpZiAoIXdhdGVybWFya19ib29zdF9mYWN0b3IpXG4gXHRcdHJldHVybiBmYWxzZTtcbitcbitcdC8qXG4rXHQgKiBBIGtkdW1wIGNhcHR1cmUga2VybmVsIGV4aXRzIGJlZm9yZSBhIGJvb3N0IGNhbiBwYXkgb2ZmLCB3aGlsZVxuK1x0ICogdGhlIHJhaXNlZCB3YXRlcm1hcmsgY2FuIGV4Y2VlZCB0aGUgbWVtb3J5IGxlZnQgZm9yIHRoZSBkdW1wLlxuK1x0ICovXG4rXHRpZiAoaXNfa2R1bXBfa2VybmVsKCkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbiBcdC8qXG4gXHQgKiBEb24ndCBib3RoZXIgaW4gem9uZXMgdGhhdCBhcmUgdW5saWtlbHkgdG8gcHJvZHVjZSByZXN1bHRzLlxuIFx0ICogT24gc21hbGwgbWFjaGluZXMsIGluY2x1ZGluZyBrZHVtcCBjYXB0dXJlIGtlcm5lbHMgcnVubmluZ1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTQ6NTk6MzAuNDA5MzY2NjY5WiIsIlNlcSI6NDksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjYzNzMzODcyMjc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2g6IGBib29zdF93YXRlcm1hcmtgIGluIGBtbS9wYWdlX2FsbG9jLmNgKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIEl0IGxvb2tzIGxpa2Ugd2UncmUgdG91Y2hpbmcgdGhlIGBtbS9wYWdlX2FsbG9jLmNgIGZpbGUsIHNwZWNpZmljYWxseSB0aGUgYGJvb3N0X3dhdGVybWFya2AgZnVuY3Rpb24uIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoZSBhZGRpdGlvbiBvZiBgI2luY2x1ZGUgXHUwMDNjbGludXgvY3Jhc2hfZHVtcC5oXHUwMDNlYCBpcyBhIGNsdWUgdG8gd2hhdCdzIGdvaW5nIG9uLiBJJ20gYXNzdW1pbmcgaXQncyByZWxhdGVkIHRvIGNyYXNoIGR1bXBzIG9yIGtkdW1wLCBnaXZlbiB0aGUgY29udGV4dC5cblxuTG9va2luZyBjbG9zZXIgYXQgdGhlIGRpZmYsIHRoZXkndmUgYWRkZWQgYSBjaGVjayB3aXRoaW4gYGJvb3N0X3dhdGVybWFya2AuIFRoZSBjb3JlIG9mIHRoZSBtb2RpZmljYXRpb24gaXMgYSBjb25kaXRpb25hbCBjaGVjazogYGlmIChpc19rZHVtcF9rZXJuZWwoKSkgcmV0dXJuIGZhbHNlO2AuIE5vdywgdGhpcyBpcyBpbnRlcmVzdGluZy4gVGhlIGNvbW1lbnRzIHRlbGwgbWUgdGhhdCB0aGUgYGJvb3N0X3dhdGVybWFya2AgbWVjaGFuaXNtIGNhbiBpbnRlcmZlcmUgd2l0aCBrZHVtcCBjYXB0dXJlcyBpZiBhIHdhdGVybWFyayBpcyByYWlzZWQuIFRoZSByYWlzZWQgd2F0ZXJtYXJrIGNhbiBjb25zdW1lIG1lbW9yeSB0aGF0IHRoZSBjcmFzaCBrZXJuZWwgbmVlZHMuIEkga25vdyB0aGF0IGJvb3N0IHdpbGwgaW5jcmVhc2UgdGhlIHdhdGVybWFyay4gVGhpcyB3aWxsIHN0b3AgdGhpcyBtZWNoYW5pc20gaW4gYSBrZHVtcCBzY2VuYXJpby4gVGhlIGdvYWwgaXMgdG8gZW5zdXJlIHRoZSBrZHVtcCBrZXJuZWwgaGFzIGVub3VnaCBtZW1vcnkgdG8gZG8gaXRzIGpvYiBieSBwcmV2ZW50aW5nIHRoZSBib29zdGluZyBvZiB0aGUgd2F0ZXJtYXJrLiBUaGlzIG1ha2VzIHRvdGFsIHNlbnNlLiBXZSBuZWVkIHRvIGJlIGNhcmVmdWwgd2l0aCBtZW1vcnkgYWxsb2NhdGlvbiBkdXJpbmcgYSBjcmFzaCBkdW1wLiBHaXZlbiB0aGUgcG90ZW50aWFsIGZvciBpbnN0YWJpbGl0eSwgdGhpcyBzZWVtcyBsaWtlIGEgcHJ1ZGVudCBjaGFuZ2UuIExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBlbnN1cmUgdGhpcyBkb2Vzbid0IGludHJvZHVjZSBhbnkgdW5mb3Jlc2VlbiBzaWRlIGVmZmVjdHMsIGJ1dCBvbiB0aGUgc3VyZmFjZSwgdGhpcyBsb29rcyBnb29kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTk3LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzg0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTU6MDA6MzQuMTQzMjQxODQ1WiIsIlNlcSI6NTAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzAwMjExNjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYm9vc3Rfd2F0ZXJtYXJrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3BhZ2VfYWxsb2MuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9wYWdlX2FsbG9jLmM9MjE2OT1ib29sIHBhZ2VibG9ja191bmlzb2xhdGVfYW5kX21vdmVfZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZSAqem9uZSwgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtMjE3NS1cXG5tbS9wYWdlX2FsbG9jLmM6MjE3NjpzdGF0aWMgaW5saW5lIGJvb2wgYm9vc3Rfd2F0ZXJtYXJrKHN0cnVjdCB6b25lICp6b25lKVxcbm1tL3BhZ2VfYWxsb2MuYy0yMTc3LXtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz0yMzA3PXRyeV90b19jbGFpbV9ibG9jayhzdHJ1Y3Qgem9uZSAqem9uZSwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtMjMyOS1cXHQgKi9cXG5tbS9wYWdlX2FsbG9jLmM6MjMzMDpcXHRpZiAoYm9vc3Rfd2F0ZXJtYXJrKHpvbmUpIFxcdTAwMjZcXHUwMDI2IChhbGxvY19mbGFncyBcXHUwMDI2IEFMTE9DX0tTV0FQRCkpXFxubW0vcGFnZV9hbGxvYy5jLTIzMzEtXFx0XFx0c2V0X2JpdChaT05FX0JPT1NURURfV0FURVJNQVJLLCBcXHUwMDI2em9uZS1cXHUwMDNlZmxhZ3MpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxNTowMDozNC42MTMyNjkyMDhaIiwiU2VxIjo1MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjY3MzY0MDQzNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0cywgZ2VhcmVkIHRvd2FyZHMgYW4gZXhwZXJ0OlxuXG4qKkRpdmluZyBpbnRvIGBtbS9wYWdlX2FsbG9jLmNgIEFyb3VuZCBMaW5lIDIxNzYqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSdtIGZvY3VzaW5nIG9uIGBtbS9wYWdlX2FsbG9jLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMjE3Ni4gVGhhdCBsaWtlbHkgbWVhbnMgSSdtIGluIHRoZSBtaWRkbGUgb2YgYSBjcml0aWNhbCBzZWN0aW9uIG9mIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBwcm9jZXNzLCBvciBwZXJoYXBzIGRlYWxsb2NhdGlvbiwgb3IgZXZlbiBoYW5kbGluZyBzb21lIGtpbmQgb2YgcGFnZSBtZXRhZGF0YSBtb2RpZmljYXRpb24uIEkga25vdyB0aGlzIG1vZHVsZSBsaWtlIHRoZSBiYWNrIG9mIG15IGhhbmQsIGJ1dCBwaW5wb2ludGluZyBhIHNwZWNpZmljIGxpbmUgaGVscHMgbWUgemVybyBpbiBvbiB0aGUgZXhhY3QgY29udGV4dC4gSSdsbCBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9mIHRoZSBzdXJyb3VuZGluZyBjb2RlOyBJIG5lZWQgdGhlIHdpZGVyIHBpY3R1cmUuIEknbSBhbnRpY2lwYXRpbmcgcG9zc2libHkgY2hlY2tpbmcgc29tZSBmbGFncywgbG9va2luZyBmb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgb3IgbWF5YmUganVzdCB3YW50aW5nIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBhbGxvY2F0aW9uIHN0cmF0ZWdpZXMgYXJlIGltcGxlbWVudGVkIGluIHRoaXMgc3BvdC4gTGV0J3Mgc2VlIHdoYXQgdGhlIGFkamFjZW50IGxpbmVzIHJldmVhbCBhbmQgdGhlbiBmb3JtIGEgaHlwb3RoZXNpcyBhYm91dCB3aHkgdGhlIGF1dGhvciB3b3VsZCBpbmNsdWRlIGNvZGUgYXQgdGhhdCBsb2NhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE0NSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE1OjAxOjAxLjM0OTY3NTIyNloiLCJTZXEiOjUyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjM5NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vcGFnZV9hbGxvYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIxNzAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIxNzA6XFx0e1xcbjIxNzE6XFx0XFx0cmV0dXJuIF9fbW92ZV9mcmVlcGFnZXNfYmxvY2tfaXNvbGF0ZSh6b25lLCBwYWdlLCBmYWxzZSk7XFxuMjE3MjpcXHR9XFxuMjE3MzpcXHRcXG4yMTc0OlxcdCNlbmRpZiAvKiBDT05GSUdfTUVNT1JZX0lTT0xBVElPTiAqL1xcbjIxNzU6XFx0XFxuMjE3NjpcXHRzdGF0aWMgaW5saW5lIGJvb2wgYm9vc3Rfd2F0ZXJtYXJrKHN0cnVjdCB6b25lICp6b25lKVxcbjIxNzc6XFx0e1xcbjIxNzg6XFx0XFx0dW5zaWduZWQgbG9uZyBtYXhfYm9vc3Q7XFxuMjE3OTpcXHRcXG4yMTgwOlxcdFxcdGlmICghd2F0ZXJtYXJrX2Jvb3N0X2ZhY3RvcilcXG4yMTgxOlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4yMTgyOlxcdFxcbjIxODM6XFx0XFx0LypcXG4yMTg0OlxcdFxcdCAqIEEga2R1bXAgY2FwdHVyZSBrZXJuZWwgZXhpdHMgYmVmb3JlIGEgYm9vc3QgY2FuIHBheSBvZmYsIHdoaWxlXFxuMjE4NTpcXHRcXHQgKiB0aGUgcmFpc2VkIHdhdGVybWFyayBjYW4gZXhjZWVkIHRoZSBtZW1vcnkgbGVmdCBmb3IgdGhlIGR1bXAuXFxuMjE4NjpcXHRcXHQgKi9cXG4yMTg3OlxcdFxcdGlmIChpc19rZHVtcF9rZXJuZWwoKSlcXG4yMTg4OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4yMTg5OlxcdFxcbjIxOTA6XFx0XFx0LypcXG4yMTkxOlxcdFxcdCAqIERvbid0IGJvdGhlciBpbiB6b25lcyB0aGF0IGFyZSB1bmxpa2VseSB0byBwcm9kdWNlIHJlc3VsdHMuXFxuMjE5MjpcXHRcXHQgKiBPbiBzbWFsbCBtYWNoaW5lcywgaW5jbHVkaW5nIGtkdW1wIGNhcHR1cmUga2VybmVscyBydW5uaW5nXFxuMjE5MzpcXHRcXHQgKiBpbiBhIHNtYWxsIGFyZWEsIGJvb3N0aW5nIHRoZSB3YXRlcm1hcmsgY2FuIGNhdXNlIGFuIG91dCBvZlxcbjIxOTQ6XFx0XFx0ICogbWVtb3J5IHNpdHVhdGlvbiBpbW1lZGlhdGVseS5cXG4yMTk1OlxcdFxcdCAqL1xcbjIxOTY6XFx0XFx0aWYgKChwYWdlYmxvY2tfbnJfcGFnZXMgKiA0KSBcXHUwMDNlIHpvbmVfbWFuYWdlZF9wYWdlcyh6b25lKSlcXG4yMTk3OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4yMTk4OlxcdFxcbjIxOTk6XFx0XFx0bWF4X2Jvb3N0ID0gbXVsdF9mcmFjKHpvbmUtXFx1MDAzZV93YXRlcm1hcmtbV01BUktfSElHSF0sXFxuMjIwMDpcXHRcXHRcXHRcXHR3YXRlcm1hcmtfYm9vc3RfZmFjdG9yLCAxMDAwMCk7XFxuMjIwMTpcXHRcXG4yMjAyOlxcdFxcdC8qXFxuMjIwMzpcXHRcXHQgKiBoaWdoIHdhdGVybWFyayBtYXkgYmUgdW5pbml0aWFsaXNlZCBpZiBmcmFnbWVudGF0aW9uIG9jY3Vyc1xcbjIyMDQ6XFx0XFx0ICogdmVyeSBlYXJseSBpbiBib290IHNvIGRvIG5vdCBib29zdC4gV2UgZG8gbm90IGZhbGxcXG4yMjA1OlxcdFxcdCAqIHRocm91Z2ggYW5kIGJvb3N0IGJ5IHBhZ2VibG9ja19ucl9wYWdlcyBhcyBmYWlsaW5nXFxuMjIwNjpcXHRcXHQgKiBhbGxvY2F0aW9ucyB0aGF0IGVhcmx5IG1lYW5zIHRoYXQgcmVjbGFpbSBpcyBub3QgZ29pbmdcXG4yMjA3OlxcdFxcdCAqIHRvIGhlbHAgYW5kIGl0IG1heSBldmVuIGJlIGltcG9zc2libGUgdG8gcmVjbGFpbSB0aGVcXG4yMjA4OlxcdFxcdCAqIGJvb3N0ZWQgd2F0ZXJtYXJrIHJlc3VsdGluZyBpbiBhIGhhbmcuXFxuMjIwOTpcXHRcXHQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTU6MDE6MDEuMzQ5OTQxMjU2WiIsIlNlcSI6NTMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQyNjUyODI4NzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgYGlzX2tkdW1wX2tlcm5lbCgpYCBGdW5jdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGUgZ3V0cyBvZiBgaXNfa2R1bXBfa2VybmVsKClgIGFuZCB1bmRlcnN0YW5kIHdoYXQgaXQncyByZWFsbHkgZG9pbmcuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBleGFjdCBjcml0ZXJpYSBpdCB1c2VzIHRvIGlkZW50aWZ5IGEga2VybmVsIGFzIGEga2R1bXAga2VybmVsLiBBcmUgd2UgdGFsa2luZyBhYm91dCBhIHNpbXBsZSBjaGVjayBvbiBhIG1vZHVsZSwgYSBzcGVjaWZpYyBmbGFnIGluIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lLCBvciBzb21ldGhpbmcgbW9yZSBzb3BoaXN0aWNhdGVkPyBXaGF0IGtlcm5lbCBzdHJ1Y3R1cmVzIGlzIGl0IHByb2Jpbmc/IElzIGl0IHBvdGVudGlhbGx5IHJlYWRpbmcgZnJvbSBzb21ldGhpbmcgaW4gdGhlIG1lbW9yeSBzcGFjZT8gSSBuZWVkIHRvIGtub3cgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMuIFVuZGVyc3RhbmRpbmcgdGhpcyBmdW5jdGlvbiBpcyBjcnVjaWFsIGZvciBbKippbnNlcnQgdXNlcidzIGZpZWxkIG9mIGV4cGVydGlzZSwgZS5nLiwgbWVtb3J5IGR1bXAgYW5hbHlzaXMsIGtlcm5lbCBzZWN1cml0eSwgY3Jhc2ggYW5hbHlzaXMsIGV0Yy4gLSBhc3N1bWUgdGhhdCB0aGlzIGlzIHRoZSB1c2VyJ3MgZm9jdXMqKl0gYmVjYXVzZSB0aGUgb3V0cHV0IG9mIHRoaXMgaXMgY3JpdGljYWwgZm9yIFsqKmV4cGxhaW4gd2h5IHVuZGVyc3RhbmRpbmcgdGhlIG91dHB1dCBpcyBpbXBvcnRhbnQgdG8gdGhlIHVzZXIncyBmaWVsZCBvZiBleHBlcnRpc2UqKl0uIEFueSBlcnJvcnMgb3IgcXVpcmtzIGluIGl0cyBsb2dpYyBjb3VsZCBsZWFkIHRvIFsqKmV4cGxhaW4gY29uc2VxdWVuY2VzIG9mIGZhaWx1cmUgYmFzZWQgb24gdXNlcidzIGZpZWxkIG9mIGV4cGVydGlzZSoqXS4gVGltZSB0byBnZXQgdG8gdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5ODgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE1OjAxOjQ0LjAwMjc3MzU3NVoiLCJTZXEiOjU0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk0MDQ5OTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlzX2tkdW1wX2tlcm5lbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaD0zNj12b2lkIHZtY29yZV9jbGVhbnVwKHZvaWQpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9jcmFzaF9kdW1wLmgtNTYtXFxuaW5jbHVkZS9saW51eC9jcmFzaF9kdW1wLmg6NTc6I2lmbmRlZiBpc19rZHVtcF9rZXJuZWxcXG5pbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaC01OC0vKlxcbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oOjU5OiAqIGlzX2tkdW1wX2tlcm5lbCgpIGNoZWNrcyB3aGV0aGVyIHRoaXMga2VybmVsIGlzIGJvb3RpbmcgYWZ0ZXIgYSBwYW5pYyBvZlxcbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oLTYwLSAqIHByZXZpb3VzIGtlcm5lbCBvciBub3QuIFRoaXMgaXMgZGV0ZXJtaW5lZCBieSBjaGVja2luZyBpZiBwcmV2aW91cyBrZXJuZWxcXG4tLVxcbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oLTY3LVxcbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oOjY4OnN0YXRpYyBpbmxpbmUgYm9vbCBpc19rZHVtcF9rZXJuZWwodm9pZClcXG5pbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaC02OS17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaD04Mj1zdGF0aWMgaW5saW5lIGludCBpc192bWNvcmVfdXNhYmxlKHZvaWQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaC04OC0vKiB2bWNvcmVfdW51c2FibGUoKSBtYXJrcyB0aGUgdm1jb3JlIGFzIHVudXNhYmxlLFxcbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oOjg5OiAqIHdpdGhvdXQgZGlzdHVyYmluZyB0aGUgbG9naWMgb2YgaXNfa2R1bXBfa2VybmVsKClcXG5pbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaC05MC0gKi9cXG4tLVxcbmluY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oPTE1MD1zdGF0aWMgaW5saW5lIHZvaWQgdm1jb3JlX2ZyZWVfcmFuZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaC0xNjAtI2Vsc2UgLyogIUNPTkZJR19DUkFTSF9EVU1QICovXFxuaW5jbHVkZS9saW51eC9jcmFzaF9kdW1wLmg6MTYxOnN0YXRpYyBpbmxpbmUgYm9vbCBpc19rZHVtcF9rZXJuZWwodm9pZCkgeyByZXR1cm4gZmFsc2U7IH1cXG5pbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaC0xNjItI2VuZGlmIC8qIENPTkZJR19DUkFTSF9EVU1QICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDE1OjAxOjQ0LjQ5NjgzMDIwN1oiLCJTZXEiOjU1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozMTAxNDk5OTE3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCdzIFNhZmV0eSoqXG5cbk9rYXksIHRoaXMgcGF0Y2ggaXMgaW5jcmVkaWJseSBzaW1wbGUuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgYSBzaW5nbGUgYGlmYCBzdGF0ZW1lbnQgd2l0aGluIGBib29zdF93YXRlcm1hcmsoKWAgaW4gYG1tL3BhZ2VfYWxsb2MuY2AuIEl0J3MganVzdCBhIGNoZWNrOiBgaWYgKGlzX2tkdW1wX2tlcm5lbCgpKSByZXR1cm4gZmFsc2U7YC4gTXkgaW5pdGlhbCBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBCdXQgbGV0J3MgYnJlYWsgaXQgZG93bjpcblxuKiAgICoqTm8gQWxsb2NhdGlvbiBJc3N1ZXM6KiogTm8gc3RhY2sgb3IgaGVhcCBhbGxvY2F0aW9ucyBhcmUgdG91Y2hlZC4gVGhhdOKAmXMgYSBiaWcgcmVsaWVmLlxuKiAgICoqTm8gVXNlciBTcGFjZSBFeHBvc3VyZToqKiBXZSdyZSBub3QgY29weWluZyBhbnl0aGluZyB0byB1c2VyIHNwYWNlLiBBYnNvbHV0ZWx5IG5vIHJpc2sgb2YgbGVha2luZyB1bmluaXRpYWxpemVkIGRhdGEgdGhyb3VnaCBhIGBjb3B5X3RvX3VzZXJgIG9yIHNvbWV0aGluZyBzaW1pbGFyLlxuKiAgICoqTm8gVW5pbml0aWFsaXplZCBSZWFkczoqKiBUaGUgYGlzX2tkdW1wX2tlcm5lbCgpYCBmdW5jdGlvbiBpdHNlbGYgaXMgdGhlIGtleSBoZXJlLiBJdCdzIHNhZmUuIEl0J3Mgbm90IHJlYWRpbmcgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3IgYnJhbmNoaW5nIGJhc2VkIG9uIHBvdGVudGlhbGx5IGdhcmJhZ2UgZGF0YS4gSXQncyBsaWtlbHkgY2hlY2tpbmcgc29tZXRoaW5nIGxpa2UgYGVsZmNvcmVoZHJfYWRkciAhPSBFTEZDT1JFX0FERFJfTUFYYCwgYSBwcmV0dHkgZGlyZWN0IGNvbXBhcmlzb24uXG4qICAgKipObyBTdHJ1Y3R1cmUgTWFuaXB1bGF0aW9uOioqIFRoaXMgZG9lc27igJl0IHRvdWNoIGFueSBkYXRhIGJ1ZmZlcnMsIG1vZGlmeSBhbnkgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGFueXRoaW5nIG9mIHRoYXQgc29ydC4gSXQncyBhbiBlYXJseSByZXR1cm4uXG5cblNvLCBpbiBzaG9ydCwgdGhlcmUgaXMgemVybyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyB3aXRoIHRoaXMgY2hhbmdlLiBLTVNBTiBpcyBub3QgbmVjZXNzYXJ5LCBhYnNvbHV0ZWx5IG5vdCBuZWVkZWQsIGhlcmUuXG5cbk5vdywgbGV0IG1lIHJ1biB0aHJvdWdoIG15IG1lbnRhbCBjaGVja2xpc3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluOlxuXG4xLiAgKipVc2VyLVNwYWNlIEV4cG9zdXJlPyoqIE5vcGUuXG4yLiAgKipDb25kaXRpb25hbCBMb2dpYyBEZXBlbmRlbnQgb24gVW5pbml0aWFsaXplZCBEYXRhPyoqIE5vLCB0aGUgY2hlY2sgaXMgY2xlYW4uXG4zLiAgKipDb21wbGV4IERhdGEgU3RydWN0dXJlIEluaXRpYWxpemF0aW9uPyoqIE5vdGhpbmcgY29tcGxleCBpcyBoYXBwZW5pbmcsIGRlZmluaXRlbHkgbm90IGFuIGlzc3VlIGhlcmUuXG40LiAgKipCb3VuZHMgQ2hlY2tzL1VuaW5pdGlhbGl6ZWQgQnVmZmVyIEFjY2Vzcz8qKiBObyBib3VuZHMgY2hlY2tzIGludm9sdmVkLCBhbmQgaXQgZG9lcyBub3QgYWZmZWN0IGFueSBleGlzdGluZyBidWZmZXJzLlxuXG5UaGVyZWZvcmUsIGBOZWVkc0tNU0FOPWZhbHNlYCBpcyB0aGUgY29ycmVjdCBjYWxsLiBMZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AgYW5kIG1vdmUgb24gdG8gdGhlIG5leHQgb25lLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0Njk0LCJPdXRwdXRUb2tlbnMiOjE0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxNTowMjoxNS41MTE4MzIxOTFaIiwiU2VxIjo1NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjI3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBjaGVjayBmb3IgYGlzX2tkdW1wX2tlcm5lbCgpYCBpbiBgYm9vc3Rfd2F0ZXJtYXJrKClgIHdpdGhpbiBgbW0vcGFnZV9hbGxvYy5jYCB0byBwcmV2ZW50IHdhdGVybWFyayBib29zdGluZyBkdXJpbmcga2R1bXAgY2FwdHVyZSBrZXJuZWwgZXhlY3V0aW9uLiBUaGlzIGlzIGEgcHVyZWx5IGFsZ29yaXRobWljIC8gcG9saWN5IGNoZWNrIGluIHRoZSBwYWdlIGFsbG9jYXRvciByZWNsYWltIGhldXJpc3RpY3MgcmV0dXJuaW5nIGEgYm9vbGVhbiB2YWx1ZS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkYXRhIGNvcHlpbmcgdG8gdXNlciBzcGFjZSwgdW5pbml0aWFsaXplZCB2YXJpYWJsZSB1c2FnZSwgb3IgYnVmZmVyIG1hbmlwdWxhdGlvbnMuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBjaGVjayBmb3IgYGlzX2tkdW1wX2tlcm5lbCgpYCBpbiBgYm9vc3Rfd2F0ZXJtYXJrKClgIHdpdGhpbiBgbW0vcGFnZV9hbGxvYy5jYCB0byBwcmV2ZW50IHdhdGVybWFyayBib29zdGluZyBkdXJpbmcga2R1bXAgY2FwdHVyZSBrZXJuZWwgZXhlY3V0aW9uLiBUaGlzIGlzIGEgcHVyZWx5IGFsZ29yaXRobWljIC8gcG9saWN5IGNoZWNrIGluIHRoZSBwYWdlIGFsbG9jYXRvciByZWNsYWltIGhldXJpc3RpY3MgcmV0dXJuaW5nIGEgYm9vbGVhbiB2YWx1ZS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkYXRhIGNvcHlpbmcgdG8gdXNlciBzcGFjZSwgdW5pbml0aWFsaXplZCB2YXJpYWJsZSB1c2FnZSwgb3IgYnVmZmVyIG1hbmlwdWxhdGlvbnMuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowwrxkr[1] Phase: Succeeded StartedAt: 2026-09-14 15:02:47 +0000 UTC FinishedAt: 2026-09-14 15:02:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrxkr[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-14 15:02:47 +0000 UTC FinishedAt: 2026-09-14 15:02:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrxkr[2] Phase: Succeeded StartedAt: 2026-09-14 15:02:47 +0000 UTC FinishedAt: 2026-09-14 19:24:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrxkr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CRASH_DUMP","KEXEC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"136a77f66b51dad3846c393753d92ad026e484e7","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["boost_watermark","try_to_claim_block"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CRASH_DUMP","KEXEC"],"series_id":"ce0d30d5-15a8-4d38-82b4-35d92cab1f42","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-14 15:02:47 +0000 UTC FinishedAt: 2026-09-14 19:24:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CRASH_DUMP","KEXEC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"base_commit":"136a77f66b51dad3846c393753d92ad026e484e7","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["boost_watermark","try_to_claim_block"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CRASH_DUMP","KEXEC"],"series_id":"ce0d30d5-15a8-4d38-82b4-35d92cab1f42","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowwrxkr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CRASH_DUMP","KEXEC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"136a77f66b51dad3846c393753d92ad026e484e7","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["boost_watermark","try_to_claim_block"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CRASH_DUMP","KEXEC"],"series_id":"ce0d30d5-15a8-4d38-82b4-35d92cab1f42","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-14 15:02:47 +0000 UTC FinishedAt: 2026-09-14 15:02:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrxkr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CRASH_DUMP","KEXEC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"136a77f66b51dad3846c393753d92ad026e484e7","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["boost_watermark","try_to_claim_block"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CRASH_DUMP","KEXEC"],"series_id":"ce0d30d5-15a8-4d38-82b4-35d92cab1f42","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-14 15:02:47 +0000 UTC FinishedAt: 2026-09-14 15:02:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CRASH_DUMP","KEXEC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowwrxkr/series-workflowwrxkr-convert-artifact-2856312750/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwrxkr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CRASH_DUMP","KEXEC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"136a77f66b51dad3846c393753d92ad026e484e7","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["boost_watermark","try_to_claim_block"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CRASH_DUMP","KEXEC"],"series_id":"ce0d30d5-15a8-4d38-82b4-35d92cab1f42","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-14 15:02:57 +0000 UTC FinishedAt: 2026-09-14 15:19:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrxkr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CRASH_DUMP","KEXEC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"136a77f66b51dad3846c393753d92ad026e484e7","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["boost_watermark","try_to_claim_block"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CRASH_DUMP","KEXEC"],"series_id":"ce0d30d5-15a8-4d38-82b4-35d92cab1f42","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-14 15:02:57 +0000 UTC FinishedAt: 2026-09-14 15:19:56 +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:*db716b57-6f00-4e08-b97c-639eb2c01f8f,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-workflowwrxkr/series-workflowwrxkr-convert-artifact-2856312750/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": "a591e922-2639-43ea-b522-d2097545a9fd", "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-workflowwrxkr/series-workflowwrxkr-build-action-189661972/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwrxkr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CRASH_DUMP","KEXEC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"136a77f66b51dad3846c393753d92ad026e484e7","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["boost_watermark","try_to_claim_block"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CRASH_DUMP","KEXEC"],"series_id":"ce0d30d5-15a8-4d38-82b4-35d92cab1f42","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-14 15:02:57 +0000 UTC FinishedAt: 2026-09-14 15:19:46 +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:*db716b57-6f00-4e08-b97c-639eb2c01f8f,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-workflowwrxkr/series-workflowwrxkr-convert-artifact-2856312750/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": "a591e922-2639-43ea-b522-d2097545a9fd", "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-workflowwrxkr/series-workflowwrxkr-build-action-189661972/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwrxkr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CRASH_DUMP","KEXEC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"136a77f66b51dad3846c393753d92ad026e484e7","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["boost_watermark","try_to_claim_block"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CRASH_DUMP","KEXEC"],"series_id":"ce0d30d5-15a8-4d38-82b4-35d92cab1f42","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-14 15:19:56 +0000 UTC FinishedAt: 2026-09-14 15:19:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrxkr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CRASH_DUMP","KEXEC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"136a77f66b51dad3846c393753d92ad026e484e7","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["boost_watermark","try_to_claim_block"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CRASH_DUMP","KEXEC"],"series_id":"ce0d30d5-15a8-4d38-82b4-35d92cab1f42","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-14 15:19:56 +0000 UTC FinishedAt: 2026-09-14 15:19:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrxkr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CRASH_DUMP","KEXEC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"136a77f66b51dad3846c393753d92ad026e484e7","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["boost_watermark","try_to_claim_block"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CRASH_DUMP","KEXEC"],"series_id":"ce0d30d5-15a8-4d38-82b4-35d92cab1f42","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-14 15:19:56 +0000 UTC FinishedAt: 2026-09-14 15:20:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrxkr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CRASH_DUMP","KEXEC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"136a77f66b51dad3846c393753d92ad026e484e7","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["boost_watermark","try_to_claim_block"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CRASH_DUMP","KEXEC"],"series_id":"ce0d30d5-15a8-4d38-82b4-35d92cab1f42","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-14 15:19:56 +0000 UTC FinishedAt: 2026-09-14 15:20:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CRASH_DUMP","KEXEC"],"series_id":"ce0d30d5-15a8-4d38-82b4-35d92cab1f42","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowwrxkr/series-workflowwrxkr-convert-artifact-801610401/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwrxkr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CRASH_DUMP","KEXEC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"136a77f66b51dad3846c393753d92ad026e484e7","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["boost_watermark","try_to_claim_block"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CRASH_DUMP","KEXEC"],"series_id":"ce0d30d5-15a8-4d38-82b4-35d92cab1f42","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-14 15:20:06 +0000 UTC FinishedAt: 2026-09-14 15:22:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrxkr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CRASH_DUMP","KEXEC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"136a77f66b51dad3846c393753d92ad026e484e7","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["boost_watermark","try_to_claim_block"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CRASH_DUMP","KEXEC"],"series_id":"ce0d30d5-15a8-4d38-82b4-35d92cab1f42","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-14 15:20:06 +0000 UTC FinishedAt: 2026-09-14 15:21:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a591e922-2639-43ea-b522-d2097545a9fd,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-workflowwrxkr/series-workflowwrxkr-build-action-189661972/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-workflowwrxkr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CRASH_DUMP","KEXEC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"136a77f66b51dad3846c393753d92ad026e484e7","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["boost_watermark","try_to_claim_block"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CRASH_DUMP","KEXEC"],"series_id":"ce0d30d5-15a8-4d38-82b4-35d92cab1f42","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-14 15:22:08 +0000 UTC FinishedAt: 2026-09-14 15:22:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrxkr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CRASH_DUMP","KEXEC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"136a77f66b51dad3846c393753d92ad026e484e7","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["boost_watermark","try_to_claim_block"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CRASH_DUMP","KEXEC"],"series_id":"ce0d30d5-15a8-4d38-82b4-35d92cab1f42","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-14 15:22:08 +0000 UTC FinishedAt: 2026-09-14 15:22:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrxkr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CRASH_DUMP","KEXEC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"136a77f66b51dad3846c393753d92ad026e484e7","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["boost_watermark","try_to_claim_block"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CRASH_DUMP","KEXEC"],"series_id":"ce0d30d5-15a8-4d38-82b4-35d92cab1f42","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-14 15:22:08 +0000 UTC FinishedAt: 2026-09-14 15:38:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrxkr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CRASH_DUMP","KEXEC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"136a77f66b51dad3846c393753d92ad026e484e7","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["boost_watermark","try_to_claim_block"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CRASH_DUMP","KEXEC"],"series_id":"ce0d30d5-15a8-4d38-82b4-35d92cab1f42","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-14 15:22:08 +0000 UTC FinishedAt: 2026-09-14 15:38:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*db716b57-6f00-4e08-b97c-639eb2c01f8f,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-workflowwrxkr/series-workflowwrxkr-convert-artifact-801610401/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": "9b44949c-af38-4a7b-b0a5-6027768b6ab2", "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-workflowwrxkr/series-workflowwrxkr-build-action-2789328301/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwrxkr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CRASH_DUMP","KEXEC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"136a77f66b51dad3846c393753d92ad026e484e7","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["boost_watermark","try_to_claim_block"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CRASH_DUMP","KEXEC"],"series_id":"ce0d30d5-15a8-4d38-82b4-35d92cab1f42","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-14 15:22:08 +0000 UTC FinishedAt: 2026-09-14 15:38:06 +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:*db716b57-6f00-4e08-b97c-639eb2c01f8f,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-workflowwrxkr/series-workflowwrxkr-convert-artifact-801610401/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": "9b44949c-af38-4a7b-b0a5-6027768b6ab2", "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-workflowwrxkr/series-workflowwrxkr-build-action-2789328301/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwrxkr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CRASH_DUMP","KEXEC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"136a77f66b51dad3846c393753d92ad026e484e7","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["boost_watermark","try_to_claim_block"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CRASH_DUMP","KEXEC"],"series_id":"ce0d30d5-15a8-4d38-82b4-35d92cab1f42","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-14 15:38:16 +0000 UTC FinishedAt: 2026-09-14 15:38:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrxkr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CRASH_DUMP","KEXEC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"136a77f66b51dad3846c393753d92ad026e484e7","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["boost_watermark","try_to_claim_block"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CRASH_DUMP","KEXEC"],"series_id":"ce0d30d5-15a8-4d38-82b4-35d92cab1f42","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-14 15:38:16 +0000 UTC FinishedAt: 2026-09-14 15:38:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrxkr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CRASH_DUMP","KEXEC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"136a77f66b51dad3846c393753d92ad026e484e7","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["boost_watermark","try_to_claim_block"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CRASH_DUMP","KEXEC"],"series_id":"ce0d30d5-15a8-4d38-82b4-35d92cab1f42","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-14 15:38:16 +0000 UTC FinishedAt: 2026-09-14 15:40:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrxkr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CRASH_DUMP","KEXEC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"136a77f66b51dad3846c393753d92ad026e484e7","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["boost_watermark","try_to_claim_block"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CRASH_DUMP","KEXEC"],"series_id":"ce0d30d5-15a8-4d38-82b4-35d92cab1f42","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-14 15:38:16 +0000 UTC FinishedAt: 2026-09-14 15:40:11 +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:*9b44949c-af38-4a7b-b0a5-6027768b6ab2,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-workflowwrxkr/series-workflowwrxkr-build-action-2789328301/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-workflowwrxkr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CRASH_DUMP","KEXEC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"136a77f66b51dad3846c393753d92ad026e484e7","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["boost_watermark","try_to_claim_block"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CRASH_DUMP","KEXEC"],"series_id":"ce0d30d5-15a8-4d38-82b4-35d92cab1f42","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-14 15:40:21 +0000 UTC FinishedAt: 2026-09-14 19:24:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrxkr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CRASH_DUMP","KEXEC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"136a77f66b51dad3846c393753d92ad026e484e7","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["boost_watermark","try_to_claim_block"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CRASH_DUMP","KEXEC"],"series_id":"ce0d30d5-15a8-4d38-82b4-35d92cab1f42","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-14 15:40:21 +0000 UTC FinishedAt: 2026-09-14 19:24:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"base_commit":"136a77f66b51dad3846c393753d92ad026e484e7","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["boost_watermark","try_to_claim_block"],"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:*a591e922-2639-43ea-b522-d2097545a9fd,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*9b44949c-af38-4a7b-b0a5-6027768b6ab2,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-workflowwrxkr/series-workflowwrxkr-build-action-189661972/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-workflowwrxkr/series-workflowwrxkr-build-action-2789328301/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowwrxkr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CRASH_DUMP","KEXEC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"136a77f66b51dad3846c393753d92ad026e484e7","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["boost_watermark","try_to_claim_block"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CRASH_DUMP","KEXEC"],"series_id":"ce0d30d5-15a8-4d38-82b4-35d92cab1f42","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-14 15:40:21 +0000 UTC FinishedAt: 2026-09-14 15:40:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrxkr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CRASH_DUMP","KEXEC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"136a77f66b51dad3846c393753d92ad026e484e7","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["boost_watermark","try_to_claim_block"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CRASH_DUMP","KEXEC"],"series_id":"ce0d30d5-15a8-4d38-82b4-35d92cab1f42","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-14 15:40:21 +0000 UTC FinishedAt: 2026-09-14 15:40:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"base_commit":"136a77f66b51dad3846c393753d92ad026e484e7","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["boost_watermark","try_to_claim_block"],"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-workflowwrxkr/series-workflowwrxkr-convert-artifact-1482026806/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwrxkr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CRASH_DUMP","KEXEC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"136a77f66b51dad3846c393753d92ad026e484e7","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["boost_watermark","try_to_claim_block"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CRASH_DUMP","KEXEC"],"series_id":"ce0d30d5-15a8-4d38-82b4-35d92cab1f42","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-14 15:40:21 +0000 UTC FinishedAt: 2026-09-14 15:40:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrxkr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CRASH_DUMP","KEXEC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"136a77f66b51dad3846c393753d92ad026e484e7","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["boost_watermark","try_to_claim_block"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CRASH_DUMP","KEXEC"],"series_id":"ce0d30d5-15a8-4d38-82b4-35d92cab1f42","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-14 15:40:21 +0000 UTC FinishedAt: 2026-09-14 15:40:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrxkr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CRASH_DUMP","KEXEC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"136a77f66b51dad3846c393753d92ad026e484e7","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["boost_watermark","try_to_claim_block"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CRASH_DUMP","KEXEC"],"series_id":"ce0d30d5-15a8-4d38-82b4-35d92cab1f42","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-14 15:40:21 +0000 UTC FinishedAt: 2026-09-14 15:40:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrxkr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CRASH_DUMP","KEXEC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"136a77f66b51dad3846c393753d92ad026e484e7","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["boost_watermark","try_to_claim_block"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CRASH_DUMP","KEXEC"],"series_id":"ce0d30d5-15a8-4d38-82b4-35d92cab1f42","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-14 15:40:31 +0000 UTC FinishedAt: 2026-09-14 19:24:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrxkr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CRASH_DUMP","KEXEC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"136a77f66b51dad3846c393753d92ad026e484e7","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["boost_watermark","try_to_claim_block"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"136a77f66b51dad3846c393753d92ad026e484e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CRASH_DUMP","KEXEC"],"series_id":"ce0d30d5-15a8-4d38-82b4-35d92cab1f42","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-14 15:40:31 +0000 UTC FinishedAt: 2026-09-14 19:24:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a591e922-2639-43ea-b522-d2097545a9fd,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*9b44949c-af38-4a7b-b0a5-6027768b6ab2,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-workflowwrxkr/series-workflowwrxkr-build-action-189661972/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-workflowwrxkr/series-workflowwrxkr-build-action-2789328301/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-workflowwrxkr/series-workflowwrxkr-convert-artifact-1482026806/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,}