Name: series-workflowx99cv Phase: Succeeded StartedAt: 2026-09-13 15:33:37 +0000 UTC FinishedAt: 2026-09-13 17:04:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx99cv[0] Phase: Succeeded StartedAt: 2026-09-13 15:33:37 +0000 UTC FinishedAt: 2026-09-13 15:56:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx99cv[0].run-triage Phase: Succeeded StartedAt: 2026-09-13 15:33:37 +0000 UTC FinishedAt: 2026-09-13 15:56:17 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "f5d607b8091438d8416d0e3ae02532a18539b48b", "config_name": "upstream-apparmor-kasan.config", "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "f5d607b8091438d8416d0e3ae02532a18539b48b", "config_name": "upstream-apparmor-kasan.config", "series_id": "5b221ae6-70dc-4b99-963a-3d9e7db97db0" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "__d_alloc", "d_alloc" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "f5d607b8091438d8416d0e3ae02532a18539b48b", "base_tree": "vfs" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE1OjUzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19kX2FsbG9jJiMzNDssCiAgICAmIzM0O2RfYWxsb2MmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgX19kX2FsbG9jKClgIGluIGBmcy9kY2FjaGUuY2AsIGludGVuZGluZyB0byBmdWxseSBpbml0aWFsaXplIGBkZW50cnktXHUwMDNlZF9zaG9ydG5hbWUuc3RyaW5nYC4gSG93ZXZlciwgaXQgZXJyb25lb3VzbHkgY2FsbHMgYG1lbWNweShkZW50cnktXHUwMDNlZF9zaG9ydG5hbWUuc3RyaW5nLCAwLCBETkFNRV9JTkxJTkVfTEVOKWAgaW5zdGVhZCBvZiBgbWVtc2V0KClgLiBQYXNzaW5nIGAwYCAoTlVMTCkgYXMgdGhlIHNvdXJjZSBwb2ludGVyIHRvIGBtZW1jcHkoKWAgaW50cm9kdWNlcyBhbiBpbW1lZGlhdGUgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIHVwb24gZGVudHJ5IGFsbG9jYXRpb24uXG5cbk5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgYXJlIGNhdWdodCBpbW1lZGlhdGVseSBieSBzdGFuZGFyZCBrZXJuZWwgcGFnZSBmYXVsdCBoYW5kbGluZyBhbmQgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlcnNwYWNlLiBGdXJ0aGVybW9yZSwgaGFkIHRoZSBjYWxsIGNvcnJlY3RseSBiZWVuIGBtZW1zZXQoKWAsIGl0IHdvdWxkIGhhdmUgaW5pdGlhbGl6ZWQgdGhlIGJ1ZmZlciB0byB6ZXJvZXMsIGVsaW1pbmF0aW5nIHVuaW5pdGlhbGl6ZWQgZGF0YSByYXRoZXIgdGhhbiBjcmVhdGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gVGhlcmVmb3JlLCB0aGlzIGNoYW5nZSBkb2VzIG5vdCBqdXN0aWZ5IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgX19kX2FsbG9jKCkgaW4gZnMvZGNhY2hlLmMgdG8gaW5pdGlhbGl6ZSB0aGUgaW5saW5lIG5hbWUgYnVmZmVyIChkX3Nob3J0bmFtZSkuIEluIGRvaW5nIHNvLCBpdCBlcnJvbmVvdXNseSB1c2VzIG1lbWNweSgpIHdpdGggYSBOVUxMIHBvaW50ZXIgKDApIGFzIHRoZSBzb3VyY2UgYWRkcmVzcyByYXRoZXIgdGhhbiBtZW1zZXQoKSwgd2hpY2ggY2F1c2VzIGEga2VybmVsIGNyYXNoL05VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSB1cG9uIGRlbnRyeSBhbGxvY2F0aW9uLiBUaGlzIG1vZGlmaWVzIGNvcmUgVkZTIGxvZ2ljIHRoYXQgaXMgZGlyZWN0bHkgYW5kIGVhc2lseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE1OjUzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYmYxZWE1MmZmMDMyZGE2MDYzNGY3NjNjZWRmNTllMzhlYTQzMzgzOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDEzIDE1OjUzOjI3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2RjYWNoZS5jIGIvZnMvZGNhY2hlLmNcbmluZGV4IDFiMWE4MWYxMGRhNjcuLjJkZTFiYzc2ZGM4ZTkgMTAwNjQ0XG4tLS0gYS9mcy9kY2FjaGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZGNhY2hlLmNcbkBAIC0xOTEwLDEyICYjNDM7MTkxMCwxNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqX19kX2FsbG9jKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbiBcdC8qXG4tXHQgKiBXZSBndWFyYW50ZWUgdGhhdCB0aGUgaW5saW5lIG5hbWUgaXMgYWx3YXlzIE5VTC10ZXJtaW5hdGVkLlxuLVx0ICogVGhpcyB3YXkgdGhlIG1lbWNweSgpIGRvbmUgYnkgdGhlIG5hbWUgc3dpdGNoaW5nIGluIHJlbmFtZVxuLVx0ICogd2lsbCBzdGlsbCBhbHdheXMgaGF2ZSBhIE5VTCBhdCB0aGUgZW5kLCBldmVuIGlmIHdlIG1pZ2h0XG4tXHQgKiBiZSBvdmVyd3JpdGluZyBhbiBpbnRlcm5hbCBOVUwgY2hhcmFjdGVyXG4mIzQzO1x0ICogRnVsbHkgaW5pdGlhbGl6ZSB0aGUgaW5saW5lIG5hbWUgYnVmZmVyLiAgY29weV9uYW1lKCkgYW5kXG4mIzQzO1x0ICogc3dhcF9uYW1lcygpIGNvcHkgZF9zaG9ydG5hbWUgaW4gaXRzIGVudGlyZXR5LCBzbyBhbnlcbiYjNDM7XHQgKiB1bmluaXRpYWxpemVkIHRhaWwgd291bGQgcHJvcGFnYXRlIHRvIHRoZSBvdGhlciBkZW50cnksIGFuZFxuJiM0MztcdCAqIF9fZF9sb29rdXBfcmN1KCkgbWF5IHRyYW5zaWVudGx5IHJlYWQgYW55IGJ5dGUgb2YgdGhlIGlubGluZVxuJiM0MztcdCAqIG5hbWUgd2hpbGUgcmVuYW1lKCkgcmV3cml0ZXMgaXQgaW4gcGxhY2UuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBUaGlzIGFsc28ga2VlcHMgdGhlIGlubGluZSBuYW1lIE5VTC10ZXJtaW5hdGVkOiB0aGUgbmFtZVxuJiM0MztcdCAqIHN3aXRjaGluZyBpbiByZW5hbWUgd2lsbCBzdGlsbCBhbHdheXMgaGF2ZSBhIE5VTCBhdCB0aGUgZW5kLFxuJiM0MztcdCAqIGV2ZW4gaWYgd2UgbWlnaHQgYmUgb3ZlcndyaXRpbmcgYW4gaW50ZXJuYWwgTlVMIGNoYXJhY3Rlci5cbiBcdCAqL1xuLVx0ZGVudHJ5LVx1MDAzZWRfc2hvcnRuYW1lLnN0cmluZ1tETkFNRV9JTkxJTkVfTEVOLTFdID0gMDtcbiYjNDM7XHRtZW1jcHkoZGVudHJ5LVx1MDAzZWRfc2hvcnRuYW1lLnN0cmluZywgMCwgRE5BTUVfSU5MSU5FX0xFTik7XG4gXHRpZiAodW5saWtlbHkoIW5hbWUpKSB7XG4gXHRcdG5hbWUgPSBcdTAwMjZzbGFzaF9uYW1lO1xuIFx0XHRkbmFtZSA9IGRlbnRyeS1cdTAwM2VkX3Nob3J0bmFtZS5zdHJpbmc7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTU6NTM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2RfYWxsb2MmIzM0OywKICAgICYjMzQ7ZF9hbGxvYyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBfX2RfYWxsb2MoKSBpbiBmcy9kY2FjaGUuYyB0byBpbml0aWFsaXplIHRoZSBpbmxpbmUgbmFtZSBidWZmZXIgKGRfc2hvcnRuYW1lKS4gSW4gZG9pbmcgc28sIGl0IGVycm9uZW91c2x5IHVzZXMgbWVtY3B5KCkgd2l0aCBhIE5VTEwgcG9pbnRlciAoMCkgYXMgdGhlIHNvdXJjZSBhZGRyZXNzIHJhdGhlciB0aGFuIG1lbXNldCgpLCB3aGljaCBjYXVzZXMgYSBrZXJuZWwgY3Jhc2gvTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIHVwb24gZGVudHJ5IGFsbG9jYXRpb24uIFRoaXMgbW9kaWZpZXMgY29yZSBWRlMgbG9naWMgdGhhdCBpcyBkaXJlY3RseSBhbmQgZWFzaWx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiZjFlYTUyZmYwMzJkYTYwNjM0Zjc2M2NlZGY1OWUzOGVhNDMzODM5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBTZXAgMTMgMTU6NTM6MjcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9kY2FjaGUuYyBiL2ZzL2RjYWNoZS5jCmluZGV4IDFiMWE4MWYxMGRhNjcuLjJkZTFiYzc2ZGM4ZTkgMTAwNjQ0Ci0tLSBhL2ZzL2RjYWNoZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2RjYWNoZS5jCkBAIC0xOTEwLDEyICYjNDM7MTkxMCwxNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqX19kX2FsbG9jKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lKQogCQlyZXR1cm4gTlVMTDsKIAogCS8qCi0JICogV2UgZ3VhcmFudGVlIHRoYXQgdGhlIGlubGluZSBuYW1lIGlzIGFsd2F5cyBOVUwtdGVybWluYXRlZC4KLQkgKiBUaGlzIHdheSB0aGUgbWVtY3B5KCkgZG9uZSBieSB0aGUgbmFtZSBzd2l0Y2hpbmcgaW4gcmVuYW1lCi0JICogd2lsbCBzdGlsbCBhbHdheXMgaGF2ZSBhIE5VTCBhdCB0aGUgZW5kLCBldmVuIGlmIHdlIG1pZ2h0Ci0JICogYmUgb3ZlcndyaXRpbmcgYW4gaW50ZXJuYWwgTlVMIGNoYXJhY3RlcgomIzQzOwkgKiBGdWxseSBpbml0aWFsaXplIHRoZSBpbmxpbmUgbmFtZSBidWZmZXIuICBjb3B5X25hbWUoKSBhbmQKJiM0MzsJICogc3dhcF9uYW1lcygpIGNvcHkgZF9zaG9ydG5hbWUgaW4gaXRzIGVudGlyZXR5LCBzbyBhbnkKJiM0MzsJICogdW5pbml0aWFsaXplZCB0YWlsIHdvdWxkIHByb3BhZ2F0ZSB0byB0aGUgb3RoZXIgZGVudHJ5LCBhbmQKJiM0MzsJICogX19kX2xvb2t1cF9yY3UoKSBtYXkgdHJhbnNpZW50bHkgcmVhZCBhbnkgYnl0ZSBvZiB0aGUgaW5saW5lCiYjNDM7CSAqIG5hbWUgd2hpbGUgcmVuYW1lKCkgcmV3cml0ZXMgaXQgaW4gcGxhY2UuCiYjNDM7CSAqCiYjNDM7CSAqIFRoaXMgYWxzbyBrZWVwcyB0aGUgaW5saW5lIG5hbWUgTlVMLXRlcm1pbmF0ZWQ6IHRoZSBuYW1lCiYjNDM7CSAqIHN3aXRjaGluZyBpbiByZW5hbWUgd2lsbCBzdGlsbCBhbHdheXMgaGF2ZSBhIE5VTCBhdCB0aGUgZW5kLAomIzQzOwkgKiBldmVuIGlmIHdlIG1pZ2h0IGJlIG92ZXJ3cml0aW5nIGFuIGludGVybmFsIE5VTCBjaGFyYWN0ZXIuCiAJICovCi0JZGVudHJ5LSZndDtkX3Nob3J0bmFtZS5zdHJpbmdbRE5BTUVfSU5MSU5FX0xFTi0xXSA9IDA7CiYjNDM7CW1lbWNweShkZW50cnktJmd0O2Rfc2hvcnRuYW1lLnN0cmluZywgMCwgRE5BTUVfSU5MSU5FX0xFTik7CiAJaWYgKHVubGlrZWx5KCFuYW1lKSkgewogCQluYW1lID0gJmFtcDtzbGFzaF9uYW1lOwogCQlkbmFtZSA9IGRlbnRyeS0mZ3Q7ZF9zaG9ydG5hbWUuc3RyaW5nOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDg3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNjQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktlcm5lbCBQYXRjaCBFdmFsdWF0aW9uOiBJbW1lZGlhdGUgUmVkIEZsYWchKioKCk9rYXksIHNvIEkmIzM5O20gcHJlc2VudGVkIHdpdGggYSBrZXJuZWwgcGF0Y2ggYW5kIGFza2VkIHRvIGdpdmUgaXQgYSBsb29rLiBMZXQmIzM5O3MgZGlnIGluLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFuZCB0aGUgY2hhbmdlIGl0c2VsZi4gSSBzdGFydCBieSBpbnNwZWN0aW5nIHRoZSBjb2RlIGRpZmYuCgpXYWl0LCBob2xkIG9uIGEgc2Vjb25kISBUaGlzIGBmcy9kY2FjaGUuY2AgcGF0Y2ggbG9va3PigKYgY29uY2VybmluZy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBsaW5lOiBgbWVtY3B5KGRlbnRyeS0mZ3Q7ZF9zaG9ydG5hbWUuc3RyaW5nLCAwLCBETkFNRV9JTkxJTkVfTEVOKTtgLiBUaGF0IGp1bXAgb3V0IGF0IG1lIGltbWVkaWF0ZWx5LiBJIGtub3cgdGhhdCBgbWVtY3B5YCYjMzk7cyBhcmd1bWVudHMgYXJlIGAoZGVzdGluYXRpb24sIHNvdXJjZSwgbnVtYmVyX29mX2J5dGVzKWAuIFRoZSBhdXRob3ImIzM5O3MgdXNpbmcgYDBgIGFzIHRoZSBzb3VyY2UhCgpXYWl0IGEgbWludXRlLCB0aGV5JiMzOTt2ZSB1c2VkIGBtZW1jcHlgIHdpdGggYSBsaXRlcmFsIGAwYCBhcyB0aGUgc291cmNlIHdoZW4gdGhleSBwcm9iYWJseSBtZWFudCB0byB1c2UgYG1lbXNldGAhIFRoaXMgaXMgYmFkLiBJbiBDLCBwYXNzaW5nIGAwYCBhcyB0aGUgc291cmNlIHBvaW50ZXIgaW4gYG1lbWNweWAgaXMgZXF1aXZhbGVudCB0byBkZXJlZmVyZW5jaW5nIGEgTlVMTCBwb2ludGVyLiBXaGVuIHRoZSBgX19kX2FsbG9jYCBmdW5jdGlvbiBpcyBjYWxsZWQsIHRoaXMgd2lsbCBhbG1vc3QgY2VydGFpbmx5IHRyaWdnZXIgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UsIGNhdXNpbmcgYSBjcmFzaCBvciBhIHNlY3VyaXR5IGZhdWx0IQoKVGhpcyBpcyBhIHNlcmlvdXMgYnVnLCBhbmQgSSBuZWVkIHRvIHZlcmlmeSBpdC4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHJlYWQgdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTU6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9kY2FjaGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5MDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTkwNTpcdFx0aW50IGVycjtcbjE5MDY6XHRcbjE5MDc6XHRcdGRlbnRyeSA9IGttZW1fY2FjaGVfYWxsb2NfbHJ1KGRlbnRyeV9jYWNoZSwgXHUwMDI2c2ItXHUwMDNlc19kZW50cnlfbHJ1LFxuMTkwODpcdFx0XHRcdFx0ICAgICAgR0ZQX0tFUk5FTCk7XG4xOTA5Olx0XHRpZiAoIWRlbnRyeSlcbjE5MTA6XHRcdFx0cmV0dXJuIE5VTEw7XG4xOTExOlx0XG4xOTEyOlx0XHQvKlxuMTkxMzpcdFx0ICogRnVsbHkgaW5pdGlhbGl6ZSB0aGUgaW5saW5lIG5hbWUgYnVmZmVyLiAgY29weV9uYW1lKCkgYW5kXG4xOTE0Olx0XHQgKiBzd2FwX25hbWVzKCkgY29weSBkX3Nob3J0bmFtZSBpbiBpdHMgZW50aXJldHksIHNvIGFueVxuMTkxNTpcdFx0ICogdW5pbml0aWFsaXplZCB0YWlsIHdvdWxkIHByb3BhZ2F0ZSB0byB0aGUgb3RoZXIgZGVudHJ5LCBhbmRcbjE5MTY6XHRcdCAqIF9fZF9sb29rdXBfcmN1KCkgbWF5IHRyYW5zaWVudGx5IHJlYWQgYW55IGJ5dGUgb2YgdGhlIGlubGluZVxuMTkxNzpcdFx0ICogbmFtZSB3aGlsZSByZW5hbWUoKSByZXdyaXRlcyBpdCBpbiBwbGFjZS5cbjE5MTg6XHRcdCAqXG4xOTE5Olx0XHQgKiBUaGlzIGFsc28ga2VlcHMgdGhlIGlubGluZSBuYW1lIE5VTC10ZXJtaW5hdGVkOiB0aGUgbmFtZVxuMTkyMDpcdFx0ICogc3dpdGNoaW5nIGluIHJlbmFtZSB3aWxsIHN0aWxsIGFsd2F5cyBoYXZlIGEgTlVMIGF0IHRoZSBlbmQsXG4xOTIxOlx0XHQgKiBldmVuIGlmIHdlIG1pZ2h0IGJlIG92ZXJ3cml0aW5nIGFuIGludGVybmFsIE5VTCBjaGFyYWN0ZXIuXG4xOTIyOlx0XHQgKi9cbjE5MjM6XHRcdG1lbWNweShkZW50cnktXHUwMDNlZF9zaG9ydG5hbWUuc3RyaW5nLCAwLCBETkFNRV9JTkxJTkVfTEVOKTtcbjE5MjQ6XHRcdGlmICh1bmxpa2VseSghbmFtZSkpIHtcbjE5MjU6XHRcdFx0bmFtZSA9IFx1MDAyNnNsYXNoX25hbWU7XG4xOTI2Olx0XHRcdGRuYW1lID0gZGVudHJ5LVx1MDAzZWRfc2hvcnRuYW1lLnN0cmluZztcbjE5Mjc6XHRcdH0gZWxzZSBpZiAobmFtZS1cdTAwM2VsZW4gXHUwMDNlIEROQU1FX0lOTElORV9MRU4tMSkge1xuMTkyODpcdFx0XHRzdHJ1Y3QgZXh0ZXJuYWxfbmFtZSAqcDtcbjE5Mjk6XHRcbjE5MzA6XHRcdFx0cCA9IGttYWxsb2NfZmxleCgqcCwgbmFtZSwgbmFtZS1cdTAwM2VsZW4gJiM0MzsgMSxcbjE5MzE6XHRcdFx0XHRcdCBHRlBfS0VSTkVMX0FDQ09VTlQgfCBfX0dGUF9SRUNMQUlNQUJMRSk7XG4xOTMyOlx0XHRcdGlmICghcCkge1xuMTkzMzpcdFx0XHRcdGttZW1fY2FjaGVfZnJlZShkZW50cnlfY2FjaGUsIGRlbnRyeSk7IFxuMTkzNDpcdFx0XHRcdHJldHVybiBOVUxMO1xuMTkzNTpcdFx0XHR9XG4xOTM2Olx0XHRcdGF0b21pY19zZXQoXHUwMDI2cC1cdTAwM2Vjb3VudCwgMSk7XG4xOTM3Olx0XHRcdGRuYW1lID0gcC1cdTAwM2VuYW1lO1xuMTkzODpcdFx0fSBlbHNlICB7XG4xOTM5Olx0XHRcdGRuYW1lID0gZGVudHJ5LVx1MDAzZWRfc2hvcnRuYW1lLnN0cmluZztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NjMzCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNTUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEZ1enppbmcgQXNzZXNzbWVudCoqCgpPa2F5LCBoZXJlJiMzOTtzIHdoYXQgSSYjMzk7bSB0aGlua2luZy4gVGhhdCBgbWVtY3B5YCBjYWxsIGluIGBfX2RfYWxsb2NgLCBzcGVjaWZpY2FsbHkgdGhlIHBhcnQgd2hlcmUgaXQgemVyb2VzIG91dCBgZGVudHJ5LSZndDtkX3Nob3J0bmFtZS5zdHJpbmdgLCB0aGF0JiMzOTtzIGNhbGxlZCBkdXJpbmcgZXZlcnkgc2luZ2xlIGRlbnRyeSBhbGxvY2F0aW9uLiBJIGltbWVkaWF0ZWx5IHJlYWxpemVkLCB0aGlzIGlzIGFjdHVhbGx5IHJlYWNoYWJsZSBjb2RlLCBhbmQgaXQmIzM5O3MgY29yZSBWRlMvZGNhY2hlIHN0dWZmISBFdmVyeSBkZW50cnkgYWxsb2NhdGlvbiBpbiB0aGUga2VybmVsIGdvZXMgdGhyb3VnaCBgX19kX2FsbG9jYCwgc28gdGhpcyBpcyBkZWZpbml0ZWx5IGEgaG90IHBhdGguCgpOb3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBpcyB0aGlzIHdvcnRoIGZ1enppbmc/IFRoZSBndWlkZWxpbmVzIGFyZSBwcmV0dHkgY2xlYXIuIEkmIzM5O20gbG9va2luZyBhdCAmIzM0O0NvcmUgU3Vic3lzdGVtcyYjMzQ7IOKAkyB0aGlzIGZhbGxzIHNxdWFyZWx5IGludG8gVkZTLCBhbmQgcG90ZW50aWFsbHkgbWVtb3J5IG1hbmFnZW1lbnQgZGVwZW5kaW5nIG9uIGhvdyBpdCYjMzk7cyBoYW5kbGVkIGF0IGEgbG93ZXIgbGV2ZWwuIE15IG5leHQgdGhvdWdodCBpcyAmIzM0O3JlZmFjdG9yaW5nLiYjMzQ7IEFtIEkgY2hhbmdpbmcgdGhlIHN0cnVjdHVyZSBvciBmbG93IG9mIHRoZSBjb2RlPyBUaGF0IGlzIG5vdCB0aGUgY2FzZS4gVGhlIG5leHQgY29uc2lkZXJhdGlvbiBpcyB0aGUgJiMzNDtydW50aW1lIGFzc2VydGlvbnMmIzM0OywgYW5kIHdoZXRoZXIgdGhleSBhcmUgYmVpbmcgaW50cm9kdWNlZCBvciBjaGFuZ2VkLiBUaGF0IGlzIGFsc28gbm90IHRoZSBjYXNlLgoKTm93LCBJIG5lZWQgdG8gY29uc2lkZXIgRm9jdXNTeW1ib2xzLiBUaGUgZ3VpZGVsaW5lcyBhcmUgYWRhbWFudCBhYm91dCAqYXZvaWRpbmcqIHViaXF1aXRvdXMgbGlmZWN5Y2xlIGZ1bmN0aW9ucyBsaWtlIGFsbG9jYXRvcnMuIEhtbW0uLi4gaXMgYF9fZF9hbGxvY2AgdWJpcXVpdG91cz8gQWJzb2x1dGVseS4gSXQgaXMgY2FsbGVkIGJ5IHByZXR0eSBtdWNoIGV2ZXJ5dGhpbmcuIElmIEkgYWRkIGl0LCBpdCB3aWxsIGRpbHV0ZSB0aGUgZnV6emluZyBlZmZvcnQuCgpJIG5lZWQgdG8gZm9jdXMgb24gc3BlY2lmaWMgZmVhdHVyZSBsb2dpYyBhbmQgZW50cnkgcG9pbnRzLiBJIHNob3VsZCBhdm9pZCB1c2luZyBpbmxpbmUgZnVuY3Rpb25zLgoKVGhlIGJlc3QgYXBwcm9hY2ggc2VlbXMgdG8gYmUgdG8gZXhhbWluZSBjYWxsZXJzIG9mIGBfX2RfYWxsb2NgLiBJIHdpbGwgdXNlIGBncmVwYCB0byBxdWlja2x5IGZpbmQgd2hvIGlzIGNhbGxpbmcgYF9fZF9hbGxvY2AuIFRoaXMgaXMgd2hlcmUgSSYjMzk7bGwgZmluZCBteSBmdXp6aW5nIHRhcmdldHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTU6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19kX2FsbG9jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZGNhY2hlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZGNhY2hlLmM9MTg4OT1FWFBPUlRfU1lNQk9MKGRfaW52YWxpZGF0ZSk7XG4tLVxuZnMvZGNhY2hlLmMtMTg5MS0vKipcbmZzL2RjYWNoZS5jOjE4OTI6ICogX19kX2FsbG9jIC0gYWxsb2NhdGUgYSBkY2FjaGUgZW50cnlcbmZzL2RjYWNoZS5jLTE4OTMtICogQHNiOiBmaWxlc3lzdGVtIGl0IHdpbGwgYmVsb25nIHRvXG4tLVxuZnMvZGNhY2hlLmMtMTkwMC0gXG5mcy9kY2FjaGUuYzoxOTAxOnN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpfX2RfYWxsb2Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUpXG5mcy9kY2FjaGUuYy0xOTAyLXtcbi0tXG5mcy9kY2FjaGUuYz0xOTg5PXN0cnVjdCBkZW50cnkgKmRfYWxsb2Moc3RydWN0IGRlbnRyeSAqIHBhcmVudCwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUpXG5mcy9kY2FjaGUuYy0xOTkwLXtcbmZzL2RjYWNoZS5jOjE5OTE6XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBfX2RfYWxsb2MocGFyZW50LVx1MDAzZWRfc2IsIG5hbWUpO1xuZnMvZGNhY2hlLmMtMTk5Mi1cdGlmICghZGVudHJ5KVxuLS1cbmZzL2RjYWNoZS5jPTIwMDc9c3RydWN0IGRlbnRyeSAqZF9hbGxvY19hbm9uKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG5mcy9kY2FjaGUuYy0yMDA4LXtcbmZzL2RjYWNoZS5jOjIwMDk6XHRyZXR1cm4gX19kX2FsbG9jKHNiLCBOVUxMKTtcbmZzL2RjYWNoZS5jLTIwMTAtfVxuLS1cbmZzL2RjYWNoZS5jPTIwMzg9c3RydWN0IGRlbnRyeSAqZF9hbGxvY19wc2V1ZG8oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUpXG4tLVxuZnMvZGNhY2hlLmMtMjA0Mi1cdH07XG5mcy9kY2FjaGUuYzoyMDQzOlx0c3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gX19kX2FsbG9jKHNiLCBuYW1lKTtcbmZzL2RjYWNoZS5jLTIwNDQtXHRpZiAobGlrZWx5KGRlbnRyeSkpIHtcbi0tXG5mcy9kY2FjaGUuYz0yNzY1PXN0cnVjdCBkZW50cnkgKmRfYWxsb2NfcGFyYWxsZWwoc3RydWN0IGRlbnRyeSAqcGFyZW50LFxuLS1cbmZzL2RjYWNoZS5jLTI3NzAtXHRzdHJ1Y3QgaGxpc3RfYmxfbm9kZSAqbm9kZTtcbmZzL2RjYWNoZS5jOjI3NzE6XHRzdHJ1Y3QgZGVudHJ5ICpuZXcgPSBfX2RfYWxsb2MocGFyZW50LVx1MDAzZWRfc2IsIG5hbWUpO1xuZnMvZGNhY2hlLmMtMjc3Mi1cdHN0cnVjdCBkZW50cnkgKmRlbnRyeTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTE0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IExpbmUgb2YgUmVhc29uaW5nKioKCk9rYXksIGhvbGQgb24uIFRoZSBpbnN0cnVjdGlvbnMgYXJlIHByZXR0eSBjbGVhciBhYm91dCBhdm9pZGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucywgc28gSSBuZWVkIHRvIHRoaW5rIGNhcmVmdWxseSBhYm91dCB3aGVyZSBgX19kX2FsbG9jYCBmaXRzLiBJcyBpdCB0cnVseSBhIHVuaXZlcnNhbCBmdW5jdGlvbiwgb3IgaXMgaXQgc3BlY2lmaWMgZW5vdWdoIHRvIGJlIGNvbnNpZGVyZWQgYSB0YXJnZXQ/IFRoZSBkb2N1bWVudGF0aW9uIGV4cGxpY2l0bHkgc2F5cyB0byBhdm9pZCBnZW5lcmljIGFsbG9jYXRvcnMgYW5kIGhvdC1wYXRocy4uLiBidXQgd2FpdCwgdGhpcyAqaXMqIHRoZSBmdW5jdGlvbiB0aGF0JiMzOTtzIGJlZW4gbW9kaWZpZWQhIEl0JiMzOTtzIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UuCgpCdXQgdGhlIHJlYWwgcXVlc3Rpb24gaXMsIGlzIGl0IHViaXF1aXRvdXMgKmluIHRoaXMgY29udGV4dCo/IGBfX2RfYWxsb2NgIGFsbG9jYXRlcyBkZW50cmllcywgc3BlY2lmaWNhbGx5IGluIHRoZSBkY2FjaGUuIFRoYXQmIzM5O3Mgbm90IHRoZSAqZW50aXJlKiBzeXN0ZW0mIzM5O3MgbWVtb3J5IGFsbG9jYXRpb24sIHNvIHBlcmhhcHMgaXQmIzM5O3Mgc3BlY2lmaWMgZW5vdWdoLiBJdCYjMzk7cyBub3QgYSBnZW5lcmFsLXB1cnBvc2UgYWxsb2NhdG9yLCBzdHJpY3RseSBzcGVha2luZy4KCk9rYXksIGlmIGBfX2RfYWxsb2NgIGlzIHdoZXJlIHRoZSBidWcgKmlzKiB0aGVuIEkgbmVlZCB0byBjb25zaWRlciAqd2hhdCogbWlnaHQgYmUgYWZmZWN0ZWQuIFRoZSBpbnN0cnVjdGlvbnMgYXJlIHRlbGxpbmcgbWUgdG8gZm9jdXMgb24gZmVhdHVyZS1zcGVjaWZpYyBsb2dpYywgcmlnaHQ/IFRoZSBjb21tZW50cyBpbiB0aGUgY29kZSBhcmUgcG9pbnRpbmcgbWUgdG93YXJkIHBvdGVudGlhbCByZWxhdGVkIGZ1bmN0aW9ucy4gSXQgbWVudGlvbnMgYGNvcHlfbmFtZSgpYCwgYHN3YXBfbmFtZXMoKWAsIGFuZCBgX19kX2xvb2t1cF9yY3UoKWAuIFRoZSBjb21tZW50IGluIHRoZSBjb2RlIHN1Z2dlc3RzIHRoYXQgdGhlc2UgZnVuY3Rpb25zIGNvdWxkIHBvdGVudGlhbGx5IGV4cG9zZSB1bmluaXRpYWxpemVkIGRhdGEgaWYgdGhlIGRfc2hvcnRuYW1lIGlzIG1hbmlwdWxhdGVkLiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhlbSEgVGhleSYjMzk7cmUgbGlrZWx5IGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgZGVudHJ5IG5hbWUgaXMgaGFuZGxlZCBhbmQgaWYgdGhlIG1lbnRpb25lZCBmdW5jdGlvbiBjb3BpZXMgb3IgbW92ZXMgdGhlIGRlbnRyaWVzLiBUaGlzIHNlZW1zIGZhciBtb3JlIHJlbGV2YW50IHRoYW4gd29ycnlpbmcgYWJvdXQgd2hldGhlciBgX19kX2FsbG9jYCBpcyBhIGdlbmVyaWMgYG1hbGxvY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTU6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29weV9uYW1lfHN3YXBfbmFtZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9kY2FjaGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9kY2FjaGUuYz0xOTAxPXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpfX2RfYWxsb2Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUpXG4tLVxuZnMvZGNhY2hlLmMtMTkxMi1cdC8qXG5mcy9kY2FjaGUuYzoxOTEzOlx0ICogRnVsbHkgaW5pdGlhbGl6ZSB0aGUgaW5saW5lIG5hbWUgYnVmZmVyLiAgY29weV9uYW1lKCkgYW5kXG5mcy9kY2FjaGUuYzoxOTE0Olx0ICogc3dhcF9uYW1lcygpIGNvcHkgZF9zaG9ydG5hbWUgaW4gaXRzIGVudGlyZXR5LCBzbyBhbnlcbmZzL2RjYWNoZS5jLTE5MTUtXHQgKiB1bmluaXRpYWxpemVkIHRhaWwgd291bGQgcHJvcGFnYXRlIHRvIHRoZSBvdGhlciBkZW50cnksIGFuZFxuLS1cbmZzL2RjYWNoZS5jPTI5OTI9RVhQT1JUX1NZTUJPTChkX21ha2VfcGVyc2lzdGVudCk7XG5mcy9kY2FjaGUuYy0yOTkzLVxuZnMvZGNhY2hlLmM6Mjk5NDpzdGF0aWMgdm9pZCBzd2FwX25hbWVzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGRlbnRyeSAqdGFyZ2V0KVxuZnMvZGNhY2hlLmMtMjk5NS17XG4tLVxuZnMvZGNhY2hlLmMtMzAzMS1cbmZzL2RjYWNoZS5jOjMwMzI6c3RhdGljIHZvaWQgY29weV9uYW1lKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGRlbnRyeSAqdGFyZ2V0KVxuZnMvZGNhY2hlLmMtMzAzMy17XG4tLVxuZnMvZGNhY2hlLmM9MzA2MD1zdGF0aWMgdm9pZCBfX2RfbW92ZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBkZW50cnkgKnRhcmdldCxcbi0tXG5mcy9kY2FjaGUuYy0zMTA4LVx0aWYgKCFleGNoYW5nZSkge1xuZnMvZGNhY2hlLmM6MzEwOTpcdFx0Y29weV9uYW1lKGRlbnRyeSwgdGFyZ2V0KTtcbmZzL2RjYWNoZS5jLTMxMTAtXHRcdHRhcmdldC1cdTAwM2VkX2hhc2gucHByZXYgPSBOVUxMO1xuLS1cbmZzL2RjYWNoZS5jLTMxMTUtXHRcdHRhcmdldC1cdTAwM2VkX3BhcmVudCA9IG9sZF9wYXJlbnQ7XG5mcy9kY2FjaGUuYzozMTE2Olx0XHRzd2FwX25hbWVzKGRlbnRyeSwgdGFyZ2V0KTtcbmZzL2RjYWNoZS5jLTMxMTctXHRcdGlmICghaGxpc3RfdW5oYXNoZWQoXHUwMDI2dGFyZ2V0LVx1MDAzZWRfc2liKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzE4CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTMwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBhIFBvdGVudGlhbCBLZXJuZWwgQnVnKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBzb21lb25lJiMzOTtzIGRpcmVjdGx5IG1vZGlmaWVkIGBfX2RfYWxsb2NgLiAgSG1tLCBpcyBgX19kX2FsbG9jYCBzdGF0aWM/IFllcywgaXQmIzM5O3Mgc3RhdGljLiBBbmQgbm90IGlubGluZWQuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0LiBJIG5lZWQgdG8gYmUgc3VyZTsgbGV0JiMzOTtzIGNoZWNrIHRoZSBjYWxsZXJzIGxpa2UgYGRfYWxsb2NgLCBgZF9hbGxvY19hbm9uYCwgZXRjLiBBaCwgY29uZmlybWVkOiBgZnMvZGNhY2hlLmNgLCBhIHN0YXRpYyBmdW5jdGlvbiwgbm8gYGlubGluZWAga2V5d29yZC4gVGhpcyBmdW5jdGlvbiBpc24mIzM5O3QgbWFya2VkIGZvciBpbmNsdXNpb24gaW4gRm9jdXNTeW1ib2xzLCBidXQgaXMgaXQgYSBnb29kIGNhbmRpZGF0ZSwgZ2l2ZW4gdGhlIGluc3RydWN0aW9ucz8gVGhlIGluc3RydWN0aW9ucyBzYXkgdG8gYXZvaWQgdWJpcXVpdG91cyBmdW5jdGlvbnMsIGJ1dCB0aGlzIGZ1bmN0aW9uIGlzIFZGUywgYW5kIGlzIHRoZSBpbXBsZW1lbnRhdGlvbiBmb3IgYGRlbnRyeWAgYWxsb2NhdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBwYXRjaCBpcyAqYWN0dWFsbHkqIGRvaW5nLgoKQWxyaWdodCwgdGhlIGRpZmYgcmV2ZWFscyB0aGUgaXNzdWU6IGBtZW1jcHkoZGVudHJ5LSZndDtkX3Nob3J0bmFtZS5zdHJpbmcsIDAsIEROQU1FX0lOTElORV9MRU4pO2AuIFdhaXQgYSBzZWNvbmTigKYgdGhhdCYjMzk7cyBjb3B5aW5nICpmcm9tKiBhZGRyZXNzIDAhIEluIEMsIHdpdGggYG1lbWNweShkZXN0LCBzcmMsIG4pYCAtIHRoZXkmIzM5O3JlIHBhc3NpbmcgYSBOVUxMIHBvaW50ZXIgYXMgdGhlIGBzcmNgLiBUaGF0JiMzOTtzIGEgZ3VhcmFudGVlZCBjcmFzaCEgRXZlbiBpZiBpdCB3YXMgaW50ZW5kZWQgdG8gYmUgYG1lbXNldGAsIHRoZSB1c2Ugb2YgYG1lbWNweWAgZnJvbSBhZGRyZXNzIHplcm8gaXMgYSBwcm9ibGVtLiBUaGlzIG1vZGlmaWVzIGBfX2RfYWxsb2NgLCB3aGljaCBpcyBpbiBgZnMvZGNhY2hlLmNgLiBUaGlzIG1lYW5zIHRoYXQgKmFueSogZGVudHJ5IGFsbG9jYXRpb24gLSBwYXRoIGxvb2t1cHMsIGZpbGUgY3JlYXRpb24sIGFueXRoaW5nIHVzaW5nIHRoZSBkY2FjaGUgLSB3aWxsIGNhbGwgdGhpcyBhbmQgaW1tZWRpYXRlbHkgY3Jhc2ggdGhlIGtlcm5lbCEgSXQmIzM5O2xsIGJlIGEgc2VnZmF1bHQgb3IgYSBrZXJuZWwgcGFuaWMgaW1tZWRpYXRlbHkuIEV2ZW4gaWYgdGhlIGNvbXBpbGVyIGRpZCBzb21ldGhpbmcgd29ua3kgYW5kIGRpZG4mIzM5O3QgY3Jhc2ggaW1tZWRpYXRlbHksIHRoaXMgd2lsbCBiZSBmb3VuZCBieSBzeXprYWxsZXIgaW5zdGFudGx5LgoKTm93LCBpcyB0aGlzIHdvcnRoIGZ1enppbmc/ICBMZXQmIzM5O3MgY2hlY2sgdGhlIGNvcmUgdHJpYWdlIHBoaWxvc29waHkuIFRoZSBwYXRjaCBoYXMgdGhlIHBvdGVudGlhbCB0byBpbnRyb2R1Y2UgYSAqY3Jhc2gqLCBpbiBjb2RlIHRoYXQgaXMgKmFic29sdXRlbHkgcmVhY2hhYmxlKiBpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGUgVkZTIGlzIGNvbnNpZGVyZWQgY29yZSwgd2hpY2ggbWFrZXMgaXQgYW4gZXhjZWxsZW50IGNhbmRpZGF0ZS4KCmBmcy9kY2FjaGUuY2AgaXMgbm90IGd1YXJkZWQgYnkgYSBjb25maWcsIHRoZXJlZm9yZSBgV29ydGhGdXp6aW5nID0gdHJ1ZWAuIE5vdywgd2hhdCBhYm91dCBFbmFibGVDb25maWdzPyBMZXQmIzM5O3MgY2hlY2sgYGZzL01ha2VmaWxlYCB1c2luZyBgZ3JlcHBlcmAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE1OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RjYWNoZVxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvTWFrZWZpbGU9MTA9b2JqLXkgOj1cdG9wZW4ubyByZWFkX3dyaXRlLm8gZmlsZV90YWJsZS5vIHN1cGVyLm8gXFxcbmZzL01ha2VmaWxlLTExLVx0XHRjaGFyX2Rldi5vIHN0YXQubyBleGVjLm8gcGlwZS5vIG5hbWVpLm8gZmNudGwubyBcXFxuZnMvTWFrZWZpbGU6MTI6XHRcdGlvY3RsLm8gcmVhZGRpci5vIHNlbGVjdC5vIGRjYWNoZS5vIGlub2RlLm8gXFxcbmZzL01ha2VmaWxlLTEzLVx0XHRhdHRyLm8gYmFkX2lub2RlLm8gZmlsZS5vIGZpbGVzeXN0ZW1zLm8gbmFtZXNwYWNlLm8gXFxcbi0tXG5mcy9vY2ZzMi9NYWtlZmlsZT0xMT1vY2ZzMi1vYmpzIDo9IFxcXG4tLVxuZnMvb2NmczIvTWFrZWZpbGUtMTUtXHRidWZmZXJfaGVhZF9pby5vXHRcXFxuZnMvb2NmczIvTWFrZWZpbGU6MTY6XHRkY2FjaGUubyBcdFx0XFxcbmZzL29jZnMyL01ha2VmaWxlLTE3LVx0ZGlyLm8gXHRcdFx0XFxcbi0tXG5mcy9vcmFuZ2Vmcy9NYWtlZmlsZT04PW9yYW5nZWZzLW9ianMgOj0gYWNsLm8gZmlsZS5vIG9yYW5nZWZzLWNhY2hlLm8gb3JhbmdlZnMtdXRpbHMubyB4YXR0ci5vIFxcXG5mcy9vcmFuZ2Vmcy9NYWtlZmlsZTo5Olx0XHQgZGNhY2hlLm8gaW5vZGUubyBvcmFuZ2Vmcy1zeXNmcy5vIG9yYW5nZWZzLW1vZC5vIHN1cGVyLm8gXFxcbmZzL29yYW5nZWZzL01ha2VmaWxlLTEwLVx0XHQgZGV2b3JhbmdlZnMtcmVxLm8gbmFtZWkubyBzeW1saW5rLm8gZGlyLm8gb3JhbmdlZnMtYnVmbWFwLm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTU6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQ0NQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI0NDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNpbmcgb24gdGhlIFJpZ2h0IFN5bWJvbHMqKgoKT2theSwgc28gYGRjYWNoZS5vYCBpcyBhbHdheXMgY29tcGlsZWQsIHBhcnQgb2YgdGhlIGNvcmUgVkZTLCBzbyBubyBzcGVjaWFsIGNvbmZpZ3VyYXRpb24gZmxhZ3MgYXJlIG5lZWRlZCBoZXJlLiBUaGF0IHBhcnQgaXMgc3RyYWlnaHRmb3J3YXJkLiBOb3csIHRoZSByZWFsIHF1ZXN0aW9uIGlzIGFib3V0IGBGb2N1c1N5bWJvbHNgLiBMZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LgoKVGhlIHJ1bGVzIHNheSB0byBhdm9pZCB1YmlxdWl0b3VzIGZ1bmN0aW9ucywgdGhlIG9uZXMgY2FsbGVkIGV2ZXJ5d2hlcmUg4oCTIHRoaW5ncyBsaWtlIG1lbW9yeSBhbGxvY2F0b3JzLCBwYWdlIGZhdWx0IGhhbmRsZXJzLCBldGMuIFdlIG5lZWQgdG8gdGFyZ2V0IHNwZWNpZmljIGZlYXR1cmUgbG9naWMgb3IgZW50cnkgcG9pbnRzLiBUaGUgbW9kaWZpZWQgZnVuY3Rpb24gaXMgYF9fZF9hbGxvY2Agd2l0aGluIGBmcy9kY2FjaGUuY2AuCgpXYWl0LCBpcyBgX19kX2FsbG9jYCB1YmlxdWl0b3VzPyBJcyBpdCBhIGdlbmVyaWMgbWVtb3J5IGFsbG9jYXRvciBsaWtlIGBrbWFsbG9jYD8gTm8sIGl0JiMzOTtzIHNwZWNpZmljIHRvIHRoZSBkZW50cnkgY2FjaGUuIElzIGl0IGNhbGxlZCBieSAqZXZlcnkqIHByb2dyYW0/IEV2ZXJ5IHByb2dyYW0gb3BlbmluZyBhIGZpbGUgb3IgY3JlYXRpbmcgYSBwYXRoICptaWdodCogY2FsbCBpdCwgYnV0IG5vdCAqZXZlcnkqIHByb2dyYW0sIHVubGlrZSBga21hbGxvY2AsIHdoaWNoICppcyogdWJpcXVpdG91cy4KClRoZSBwYXRjaCBpdHNlbGYgZGVhbHMgd2l0aCBpbml0aWFsaXppbmcgdGhlIGlubGluZSBuYW1lIGJ1ZmZlciB1c2VkIGJ5IGBjb3B5X25hbWVgIGFuZCBgc3dhcF9uYW1lc2AgZHVyaW5nIGByZW5hbWVgLiBUaGUgcGF0Y2ggYXV0aG9yIGlzIG1vZGlmeWluZyBgX19kX2FsbG9jYC4gVGhlIGNoYW5nZSBpcyBpbiBgX19kX2FsbG9jYC4gQ2FuIHdlIGxpc3QgYF9fZF9hbGxvY2AgaW4gYEZvY3VzU3ltYm9sc2A/CgpgX19kX2FsbG9jYCBpcyBzdGF0aWMsIHdoaWNoIG1lYW5zIGl0IGFwcGVhcnMgaW4gYGthbGxzeW1zYCB1bmxlc3MgaW5saW5lZC4gSXQmIzM5O3Mgbm90IG1hcmtlZCBpbmxpbmUsIGFuZCBpdCYjMzk7cyA4MCBsaW5lcyBsb25nIGFuZCBjYWxsZWQgZnJvbSBmb3VyIHBsYWNlcywgc28gdGhlIGNvbXBpbGVyIHdpbGwga2VlcCBpdCBhcyBhbiBvdXQtb2YtbGluZSBmdW5jdGlvbi4KClNvLCB0aGUgcnVsZSBpcyB0byBsaXN0IHRoZSBleGFjdCBmdW5jdGlvbiBpbXBsZW1lbnRpbmcgdGhlIGNoYW5nZWQgbG9naWMsIHJpZ2h0PyBgX19kX2FsbG9jYCBpcyAqdGhlKiBmdW5jdGlvbiB3aGVyZSB0aGUgY29kZSB3YXMgY2hhbmdlZC4KCldoYXQgYWJvdXQgYGNvcHlfbmFtZWAgYW5kIGBzd2FwX25hbWVzYD8gVGhleSYjMzk7cmUgcmVsYXRlZCwgYnV0ICpub3QqIG1vZGlmaWVkIGJ5IHRoaXMgcGF0Y2ggZGlyZWN0bHkuIGBkX2FsbG9jYD8gTGV0JiMzOTtzIGNoZWNrIHdoZXJlIHRoYXQgaXMgdXNlZC4gSWYgYF9fZF9hbGxvY2AgaXMgKnRoZSogZnVuY3Rpb24sIGFuZCB3ZSBkb24mIzM5O3QgaW5jbHVkZSBpdCwgd2hhdCAqd291bGQqIHdlIGluY2x1ZGU/IGBfX2RfYWxsb2NgIGlzIHRoZSAqZXhhY3QqIHBsYWNlIHdoZXJlIHRoZSBidWcgaXMgYmVpbmcgZml4ZWQuCgpUaGUgaW5zdHJ1Y3Rpb24gd2FybnMgYWdhaW5zdCBsaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGJlY2F1c2UgaXQgZGlsdXRlcyB0aGUgZnV6emluZyBlZmZvcnQuIEJ1dCBpcyBgX19kX2FsbG9jYCB1YmlxdWl0b3VzIGluIHRoZSBzYW1lIHNlbnNlIGFzIGBrbWFsbG9jYD8gTm8hIENoYW5naW5nIGBrbWFsbG9jYCBjb3VsZCBtYWtlICpldmVyeSogc3l6a2FsbGVyIHByb2dyYW0gbWF0Y2guIGBfX2RfYWxsb2NgIGlzIHNwZWNpZmljIHRvIHRoZSBkY2FjaGUgVkZTLgoKU28sIHRoZSBrZXkgaXMgdGhpczogKlRoaXMgcGF0Y2ggbW9kaWZpZXMgYF9fZF9hbGxvY2AuKiBUaGF0JiMzOTtzIHdoYXQgdGhlIGZ1enppbmcgc2hvdWxkIGZvY3VzIG9uLiBUaGUgJiMzNDtzcGVjaWZpYyBmZWF0dXJlIGxvZ2ljJiMzNDsgYmVpbmcgYWx0ZXJlZCBpcyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYGRfc2hvcnRuYW1lYCBpbiBgX19kX2FsbG9jYC4gYF9fZF9hbGxvY2Agc3BlY2lmaWNhbGx5IGltcGxlbWVudHMgdGhlIGFsdGVyZWQgbG9naWMuCgpTbywgaXMgaXQgc2FmZSB0byBsaXN0IGBfX2RfYWxsb2NgPyBZZXMhIEl0IGlzIHRoZSBleGFjdCBmdW5jdGlvbi4gSXQgaGFzIGZvdXIgY2FsbCBzaXRlcyBhbmQgaXMgYmVpbmcgYWx0ZXJlZCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTU6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RnVsbHkgaW5pdGlhbGl6ZSB0aGUgaW5saW5lIG5hbWUgYnVmZmVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZGNhY2hlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZGNhY2hlLmM9MTkwMT1zdGF0aWMgc3RydWN0IGRlbnRyeSAqX19kX2FsbG9jKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lKVxuLS1cbmZzL2RjYWNoZS5jLTE5MTItXHQvKlxuZnMvZGNhY2hlLmM6MTkxMzpcdCAqIEZ1bGx5IGluaXRpYWxpemUgdGhlIGlubGluZSBuYW1lIGJ1ZmZlci4gIGNvcHlfbmFtZSgpIGFuZFxuZnMvZGNhY2hlLmMtMTkxNC1cdCAqIHN3YXBfbmFtZXMoKSBjb3B5IGRfc2hvcnRuYW1lIGluIGl0cyBlbnRpcmV0eSwgc28gYW55XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE1OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNjY2CgkJCQkJCQlvdXRwdXQ6IDEyNgoJCQkJCQkJdGhvdWdodHM6IDgzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWxseSBDcml0aWNhbCBLZXJuZWwgQnVnKioKCk9rYXksIGhlcmUmIzM5O3MgdGhlIHNpdHVhdGlvbi4gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kLCBpbnN0YW50bHksIGEgcmVkIGZsYWcgcG9wcyB1cC4gSW4gdGhlIG9yaWdpbmFsLCBlc3RhYmxpc2hlZCBMaW51eCBrZXJuZWwgY29kZSDigJMgbGV0JiMzOTtzIGFzc3VtZSBpdCYjMzk7cyBzb21ldGhpbmcgbGlrZSB3aGF0IEVyaWMgQmlnZ2VycywgTGludXMsIG9yIEFsIFZpcm8gd291bGQmIzM5O3ZlIGF1dGhvcmVkIOKAkyB3ZSBoYXZlOiBgbWVtc2V0KGRlbnRyeS0mZ3Q7ZF9zaG9ydG5hbWUuc3RyaW5nLCAwLCBETkFNRV9JTkxJTkVfTEVOKTtgLiBUaGF0JiMzOTtzIHN0YW5kYXJkIHByYWN0aWNlLCBpbml0aWFsaXppbmcgbWVtb3J5LiBCdXQgaW4gKnRoaXMqIHBhdGNoPyBTdWRkZW5seSwgaXQmIzM5O3MgYG1lbWNweShkZW50cnktJmd0O2Rfc2hvcnRuYW1lLnN0cmluZywgMCwgRE5BTUVfSU5MSU5FX0xFTik7YC4gVGhhdCYjMzk7cyBhIGRlbGliZXJhdGUgaW5qZWN0aW9uIG9mIGEgYnVnLCBvciBhbiBpbmNyZWRpYmx5IGNhcmVsZXNzIG1pc3Rha2UuCgpTcGVjaWZpY2FsbHksIHRoZSBzb3VyY2UgaW4gdGhhdCBgbWVtY3B5YCBpcyAqemVybyosIGVmZmVjdGl2ZWx5IGBtZW1jcHkoLi4uLCAwLCAuLi4pYCB3aGljaCB3aWxsIGF0dGVtcHQgdG8gZGVyZWZlcmVuY2UgYSBudWxsIHBvaW50ZXIhIFRoZSBpbnRlbnRpb24gd2FzIGNsZWFybHkgdG8gemVybyB0aGUgbWVtb3J5LCBidXQgdGhlIGBtZW1jcHlgIHdpdGggYSBOVUxMIHNvdXJjZSBtZWFucyB0aGlzIGlzIGdvaW5nIHRvIGJlIGEgZ3VhcmFudGVlZCBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2UsIGFzIHNvb24gYXMgdGhhdCBjb2RlIGlzIGV4ZWN1dGVkLiBDbGFzc2ljLCBvbGQtc2Nob29sIGJ1ZyBpbnRyb2R1Y2VkIGluIGEgcGF0Y2ggcmV2aWV3IHRlc3QsIEkmIzM5O2Qgc2F5LgoKTm93LCB3ZSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGlzIGlzIGV4cGxvaXRhYmxlLiBJcyBgX19kX2FsbG9jYCByZWFjaGFibGU/IEFic29sdXRlbHkuIGBkX2FsbG9jYCBhbmQgYGRfYWxsb2NfcGFyYWxsZWxgLCB3aGljaCBhcmUgY2FsbGVkIGJ5IGFueSBWRlMgbG9va3VwIG9yIGNyZWF0aW9uIG9wZXJhdGlvbiwgZXZlbnR1YWxseSBjYWxsIGBfX2RfYWxsb2NgLiBUaGlzIGlzIGNvcmUgVkZTIGNvZGUuIEFueSBmaWxlc3lzdGVtIHRyYXZlcnNhbCwgcm9vdCBtb3VudCwgb3IgYWNjZXNzIHRyaWdnZXJzIGBfX2RfYWxsb2NgLiBGdXp6aW5nIHdpbGwgaGl0IHRoaXMgaW1tZWRpYXRlbHkuCgpOZXh0LCB0aGUgZm9jdXMgc3ltYm9scy4gYF9fZF9hbGxvY2AgaXMgdGhlIGZ1bmN0aW9uICpjb250YWluaW5nKiB0aGUgbW9kaWZpZWQgY29kZS4gYGRfYWxsb2NgIGl0c2VsZiBpcyB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgZGVudHJ5IGFsbG9jYXRpb24uIEkgc2VlIGJvdGggYXJlIGV4Y2VsbGVudCBjaG9pY2VzLiBJIG1lYW4sIHRoZSBjcml0ZXJpYSBzcGVjaWZpZXMgdGhlICYjMzQ7bWFpbiBlbnRyeXBvaW50cyYjMzQ7LCBzby4uLiB3aHkgbm90IGluY2x1ZGUgYm90aD8gTGV0JiMzOTtzIGNoZWNrOiAmIzM0O0xpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cyBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4mIzM0OyBTbywgYm90aCBgX19kX2FsbG9jYCBhbmQgYGRfYWxsb2NgIGFyZSByZWxldmFudCwgYnV0IHRoZSBidWcgYWN0dWFsbHkgb2NjdXJzIGluIGBfX2RfYWxsb2NgLiBgX19kX2FsbG9jYCBpcyBwZXJmZWN0LiBUaGlzIGlzIHdoZXJlIHRoZSBjb2RlJiMzOTtzIG1vZGlmaWVkLiBJIGNhbiBpbmNsdWRlIGJvdGggYF9fZF9hbGxvY2AgYW5kIGBkX2FsbG9jYC4KCkFuZCB3aGF0IGFib3V0IGBkX2FsbG9jX3BhcmFsbGVsYCwgYGNvcHlfbmFtZWAsIGFuZCBgc3dhcF9uYW1lc2A/IE5vLiBUaGUgYnVnIGlzIGluIGBfX2RfYWxsb2NgIHNwZWNpZmljYWxseS4gSWYgSSBpbmNsdWRlIGBfX2RfYWxsb2NgLCBJJiMzOTt2ZSBnb3QgdGhlIGV4YWN0IGZ1bmN0aW9uIHdoZXJlIHRoZSBhbHRlcmF0aW9uIGlzLiBBbmQsIHllcywgYF9fZF9hbGxvY2AgKmNhbiogYmUgaW5jbHVkZWQhIEl0JiMzOTtzIHJpZ2h0IHRoZXJlLCBgc3RhdGljIHN0cnVjdCBkZW50cnkgKl9fZF9hbGxvYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSlgLiBXaXRoIEdDQy9DbGFuZyBhbmQgc3RhbmRhcmQga2VybmVsIGJ1aWxkIGZsYWdzLCBpdCYjMzk7cyBub24taW5saW5lZCBhbmQgc3RhdGljLCBzbyBpdCYjMzk7cyBhIHBlcmZlY3QgdGFyZ2V0LiBJbmNsdWRpbmcgYm90aCB3aWxsIGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlIGFuZCBpdHMgZW50cnkgcG9pbnQuCgpGaW5hbGx5LCBgRW5hYmxlQ29uZmlnc2AuIERvZXMgYF9fZF9hbGxvY2AgcmVseSBvbiBhbnkgbm9uLWRlZmF1bHQgY29uZmlndXJhdGlvbnM/IE5vIHdheS4gVkZTIGFuZCBkY2FjaGUgYXJlIGNvcmUsIGFsd2F5cyBjb21waWxlZCBpbi4gU28sIHRoYXQmIzM5O3MgZW1wdHk6IGBbXWAuCgpUbyBzdW1tYXJpemUgdGhlIGxvZ2ljOiAxLiBUaGUgcGF0Y2ggbWVzc2VzIHVwIGBfX2RfYWxsb2MoKWAgaW4gYGZzL2RjYWNoZS5jYC4gQXR0ZW1wdHMgdG8gaW5pdGlhbGl6ZSBgZF9zaG9ydG5hbWVgLCBidXQgaW50cm9kdWNlcyBhIG1lbW9yeSBjb3B5IGZyb20gTlVMTCBpbnN0ZWFkIG9mIHplcm9pbmcgdGhlIGJ1ZmZlciwgbGVhZGluZyB0byBhbiBpbW1lZGlhdGUgTlVMTCBkZXJlZmVyZW5jZS4gMi4gYF9fZF9hbGxvYygpYCBpcyBhdCB0aGUgaGVhcnQgb2YgdGhlIFZGUyBzdWJzeXN0ZW0sIGV4ZWN1dGVkIGR1cmluZyBkZW50cnkgYWxsb2NhdGlvbiBmb3IgcGF0aCBsb29rdXAgYW5kIGNyZWF0aW9uLiBJdCYjMzk7cyB1bmNvbmRpdGlvbmFsbHkgY29tcGlsZWQgYW5kIGVhc2lseSByZWFjaGVkIGluIHR5cGljYWwgZnV6emluZyBzZXR1cHMuIDMuIFZlcmRpY3Q6IGBXb3J0aEZ1enppbmcgPSB0cnVlYC4gNC4gV2UgZ28gd2l0aCB0aGVzZSBGb2N1c1N5bWJvbHM6IGBfX2RfYWxsb2NgLCBgZF9hbGxvY2AuIEFuZCB3aXRoIGVtcHR5IGBFbmFibGVDb25maWdzOiBbXWAuCgpBbHJpZ2h0LCBJJiMzOTttIGNvbmZpZGVudC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE1OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2RfYWxsb2MmIzM0OywKICAgICYjMzQ7ZF9hbGxvYyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBfX2RfYWxsb2MoKSBpbiBmcy9kY2FjaGUuYyB0byBpbml0aWFsaXplIHRoZSBpbmxpbmUgbmFtZSBidWZmZXIgKGRfc2hvcnRuYW1lKS4gSW4gZG9pbmcgc28sIGl0IGVycm9uZW91c2x5IHVzZXMgbWVtY3B5KCkgd2l0aCBhIE5VTEwgcG9pbnRlciAoMCkgYXMgdGhlIHNvdXJjZSBhZGRyZXNzIHJhdGhlciB0aGFuIG1lbXNldCgpLCB3aGljaCBjYXVzZXMgYSBrZXJuZWwgY3Jhc2gvTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIHVwb24gZGVudHJ5IGFsbG9jYXRpb24uIFRoaXMgbW9kaWZpZXMgY29yZSBWRlMgbG9naWMgdGhhdCBpcyBkaXJlY3RseSBhbmQgZWFzaWx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19kX2FsbG9jJiMzNDssCiAgICAmIzM0O2RfYWxsb2MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgX19kX2FsbG9jKCkgaW4gZnMvZGNhY2hlLmMgdG8gaW5pdGlhbGl6ZSB0aGUgaW5saW5lIG5hbWUgYnVmZmVyIChkX3Nob3J0bmFtZSkuIEluIGRvaW5nIHNvLCBpdCBlcnJvbmVvdXNseSB1c2VzIG1lbWNweSgpIHdpdGggYSBOVUxMIHBvaW50ZXIgKDApIGFzIHRoZSBzb3VyY2UgYWRkcmVzcyByYXRoZXIgdGhhbiBtZW1zZXQoKSwgd2hpY2ggY2F1c2VzIGEga2VybmVsIGNyYXNoL05VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSB1cG9uIGRlbnRyeSBhbGxvY2F0aW9uLiBUaGlzIG1vZGlmaWVzIGNvcmUgVkZTIGxvZ2ljIHRoYXQgaXMgZGlyZWN0bHkgYW5kIGVhc2lseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNTo1NDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE1OjU0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYF9fZF9hbGxvYygpYCBpbiBgZnMvZGNhY2hlLmNgLCBpbnRlbmRpbmcgdG8gZnVsbHkgaW5pdGlhbGl6ZSBgZGVudHJ5LVx1MDAzZWRfc2hvcnRuYW1lLnN0cmluZ2AuIEhvd2V2ZXIsIGl0IGVycm9uZW91c2x5IGNhbGxzIGBtZW1jcHkoZGVudHJ5LVx1MDAzZWRfc2hvcnRuYW1lLnN0cmluZywgMCwgRE5BTUVfSU5MSU5FX0xFTilgIGluc3RlYWQgb2YgYG1lbXNldCgpYC4gUGFzc2luZyBgMGAgKE5VTEwpIGFzIHRoZSBzb3VyY2UgcG9pbnRlciB0byBgbWVtY3B5KClgIGludHJvZHVjZXMgYW4gaW1tZWRpYXRlIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSB1cG9uIGRlbnRyeSBhbGxvY2F0aW9uLlxuXG5OVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFyZSBjYXVnaHQgaW1tZWRpYXRlbHkgYnkgc3RhbmRhcmQga2VybmVsIHBhZ2UgZmF1bHQgaGFuZGxpbmcgYW5kIEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZS4gRnVydGhlcm1vcmUsIGhhZCB0aGUgY2FsbCBjb3JyZWN0bHkgYmVlbiBgbWVtc2V0KClgLCBpdCB3b3VsZCBoYXZlIGluaXRpYWxpemVkIHRoZSBidWZmZXIgdG8gemVyb2VzLCBlbGltaW5hdGluZyB1bmluaXRpYWxpemVkIGRhdGEgcmF0aGVyIHRoYW4gY3JlYXRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFRoZXJlZm9yZSwgdGhpcyBjaGFuZ2UgZG9lcyBub3QganVzdGlmeSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiZjFlYTUyZmYwMzJkYTYwNjM0Zjc2M2NlZGY1OWUzOGVhNDMzODM5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBTZXAgMTMgMTU6NTM6MjcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9kY2FjaGUuYyBiL2ZzL2RjYWNoZS5jCmluZGV4IDFiMWE4MWYxMGRhNjcuLjJkZTFiYzc2ZGM4ZTkgMTAwNjQ0Ci0tLSBhL2ZzL2RjYWNoZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2RjYWNoZS5jCkBAIC0xOTEwLDEyICYjNDM7MTkxMCwxNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqX19kX2FsbG9jKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lKQogCQlyZXR1cm4gTlVMTDsKIAogCS8qCi0JICogV2UgZ3VhcmFudGVlIHRoYXQgdGhlIGlubGluZSBuYW1lIGlzIGFsd2F5cyBOVUwtdGVybWluYXRlZC4KLQkgKiBUaGlzIHdheSB0aGUgbWVtY3B5KCkgZG9uZSBieSB0aGUgbmFtZSBzd2l0Y2hpbmcgaW4gcmVuYW1lCi0JICogd2lsbCBzdGlsbCBhbHdheXMgaGF2ZSBhIE5VTCBhdCB0aGUgZW5kLCBldmVuIGlmIHdlIG1pZ2h0Ci0JICogYmUgb3ZlcndyaXRpbmcgYW4gaW50ZXJuYWwgTlVMIGNoYXJhY3RlcgomIzQzOwkgKiBGdWxseSBpbml0aWFsaXplIHRoZSBpbmxpbmUgbmFtZSBidWZmZXIuICBjb3B5X25hbWUoKSBhbmQKJiM0MzsJICogc3dhcF9uYW1lcygpIGNvcHkgZF9zaG9ydG5hbWUgaW4gaXRzIGVudGlyZXR5LCBzbyBhbnkKJiM0MzsJICogdW5pbml0aWFsaXplZCB0YWlsIHdvdWxkIHByb3BhZ2F0ZSB0byB0aGUgb3RoZXIgZGVudHJ5LCBhbmQKJiM0MzsJICogX19kX2xvb2t1cF9yY3UoKSBtYXkgdHJhbnNpZW50bHkgcmVhZCBhbnkgYnl0ZSBvZiB0aGUgaW5saW5lCiYjNDM7CSAqIG5hbWUgd2hpbGUgcmVuYW1lKCkgcmV3cml0ZXMgaXQgaW4gcGxhY2UuCiYjNDM7CSAqCiYjNDM7CSAqIFRoaXMgYWxzbyBrZWVwcyB0aGUgaW5saW5lIG5hbWUgTlVMLXRlcm1pbmF0ZWQ6IHRoZSBuYW1lCiYjNDM7CSAqIHN3aXRjaGluZyBpbiByZW5hbWUgd2lsbCBzdGlsbCBhbHdheXMgaGF2ZSBhIE5VTCBhdCB0aGUgZW5kLAomIzQzOwkgKiBldmVuIGlmIHdlIG1pZ2h0IGJlIG92ZXJ3cml0aW5nIGFuIGludGVybmFsIE5VTCBjaGFyYWN0ZXIuCiAJICovCi0JZGVudHJ5LSZndDtkX3Nob3J0bmFtZS5zdHJpbmdbRE5BTUVfSU5MSU5FX0xFTi0xXSA9IDA7CiYjNDM7CW1lbWNweShkZW50cnktJmd0O2Rfc2hvcnRuYW1lLnN0cmluZywgMCwgRE5BTUVfSU5MSU5FX0xFTik7CiAJaWYgKHVubGlrZWx5KCFuYW1lKSkgewogCQluYW1lID0gJmFtcDtzbGFzaF9uYW1lOwogCQlkbmFtZSA9IGRlbnRyeS0mZ3Q7ZF9zaG9ydG5hbWUuc3RyaW5nOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTU6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI5OQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDU4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbml0aWFsIENvbmNlcm5zIFJlZ2FyZGluZyBhIFBvdGVudGlhbCBCdWcqKgoKT2theSwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoaXMgcGF0Y2guIEl0IGFwcGVhcnMgdG8gYmUgaW5pdGlhbGl6aW5nIHRoZSBpbmxpbmUgbmFtZSBidWZmZXIgaW4gYF9fZF9hbGxvY2AuIFRoZSBjb2RlIGFpbXMgdG8gZW5zdXJlIHRoaXMgYnVmZmVyIGlzIGZ1bGx5IGluaXRpYWxpemVkLCB3aGljaCBtYWtlcyBzZW5zZSBnaXZlbiB0aGUgcG90ZW50aWFsIGZvciBkYXRhIHByb3BhZ2F0aW9uIGR1cmluZyBuYW1lIHN3aXRjaGluZywgYW5kIHRoZSB0cmFuc2llbnQgcmVhZHMgZHVyaW5nIGByZW5hbWVgLiBCdXQgd2FpdCBhIG1pbnV0ZS4uLiBJIHNlZSBhIGBtZW1jcHlgIGhlcmUsIGFuZCBzb21ldGhpbmcgaXMgaW1tZWRpYXRlbHkgcmFpc2luZyBhIHJlZCBmbGFnLgoKTXkgZXhwZXJ0IGludHVpdGlvbiBraWNrcyBpbiBhbmQgc29tZXRoaW5nIGRvZXNuJiMzOTt0IGZlZWwgcmlnaHQgYWJvdXQgdGhpcy4gSSYjMzk7bSBzZWVpbmcgYG1lbWNweShkZW50cnktJmd0O2Rfc2hvcnRuYW1lLnN0cmluZywgMCwgRE5BTUVfSU5MSU5FX0xFTik7YC4gVGhhdCBsb29rcyBzdXNwaWNpb3VzLiBgbWVtY3B5YCB0YWtlcyBhIGRlc3RpbmF0aW9uLCBhIHNvdXJjZSwgYW5kIGEgc2l6ZS4gVGhlIHNvdXJjZSBzaG91bGQgYmUgYSB2YWxpZCBtZW1vcnkgYWRkcmVzcyB0byBjb3B5ICpmcm9tKi4gQnV0IHRoZSBzZWNvbmQgYXJndW1lbnQsIGAwYD8gVGhhdCYjMzk7cy4uLiBwb3RlbnRpYWxseSBOVUxMLiBJZiBgbWVtY3B5YCBkZXJlZmVyZW5jZXMgYSBOVUxMIHBvaW50ZXIsIHRoYXQmIzM5O3MgZ29pbmcgdG8gY2F1c2UgYSBjcmFzaCwgcmlnaHQ/IE9yIGF0IHRoZSB2ZXJ5IGxlYXN0LCB1bmRlZmluZWQgYmVoYXZpb3IgdGhhdCYjMzk7cyBhbG1vc3QgYXMgYmFkPyBJIG5lZWQgdG8gdmVyaWZ5IHdoYXQgaXMgZ29pbmcgb24gaGVyZS4gSSBuZWVkIHRvIGtub3cgd2h5IHRoaXMgaXNuJiMzOTt0IGBtZW1zZXRgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgYG1lbWNweWAgaXMgYWN0dWFsbHkgKnRyeWluZyogdG8gZG8uIEkgbmVlZCB0byBnbyBiYWNrIGFuZCBjaGVjayB0aGUgY29kZSwgcmlnaHQgYXJvdW5kIGxpbmUgMTkxMCBpbiBgZnMvZGNhY2hlLmNgIGFuZCBmaWd1cmUgb3V0IHdoYXQgdGhlIGludGVudCBpcyBhbmQsIGNyaXRpY2FsbHksIGlmIHRoaXMgaXMgZ29pbmcgdG8gY2F1c2UgYSBjcml0aWNhbCBzZWN1cml0eSBmYXVsdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTU6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9kY2FjaGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTkwMDpcdCBcbjE5MDE6XHRzdGF0aWMgc3RydWN0IGRlbnRyeSAqX19kX2FsbG9jKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lKVxuMTkwMjpcdHtcbjE5MDM6XHRcdHN0cnVjdCBkZW50cnkgKmRlbnRyeTtcbjE5MDQ6XHRcdGNoYXIgKmRuYW1lO1xuMTkwNTpcdFx0aW50IGVycjtcbjE5MDY6XHRcbjE5MDc6XHRcdGRlbnRyeSA9IGttZW1fY2FjaGVfYWxsb2NfbHJ1KGRlbnRyeV9jYWNoZSwgXHUwMDI2c2ItXHUwMDNlc19kZW50cnlfbHJ1LFxuMTkwODpcdFx0XHRcdFx0ICAgICAgR0ZQX0tFUk5FTCk7XG4xOTA5Olx0XHRpZiAoIWRlbnRyeSlcbjE5MTA6XHRcdFx0cmV0dXJuIE5VTEw7XG4xOTExOlx0XG4xOTEyOlx0XHQvKlxuMTkxMzpcdFx0ICogRnVsbHkgaW5pdGlhbGl6ZSB0aGUgaW5saW5lIG5hbWUgYnVmZmVyLiAgY29weV9uYW1lKCkgYW5kXG4xOTE0Olx0XHQgKiBzd2FwX25hbWVzKCkgY29weSBkX3Nob3J0bmFtZSBpbiBpdHMgZW50aXJldHksIHNvIGFueVxuMTkxNTpcdFx0ICogdW5pbml0aWFsaXplZCB0YWlsIHdvdWxkIHByb3BhZ2F0ZSB0byB0aGUgb3RoZXIgZGVudHJ5LCBhbmRcbjE5MTY6XHRcdCAqIF9fZF9sb29rdXBfcmN1KCkgbWF5IHRyYW5zaWVudGx5IHJlYWQgYW55IGJ5dGUgb2YgdGhlIGlubGluZVxuMTkxNzpcdFx0ICogbmFtZSB3aGlsZSByZW5hbWUoKSByZXdyaXRlcyBpdCBpbiBwbGFjZS5cbjE5MTg6XHRcdCAqXG4xOTE5Olx0XHQgKiBUaGlzIGFsc28ga2VlcHMgdGhlIGlubGluZSBuYW1lIE5VTC10ZXJtaW5hdGVkOiB0aGUgbmFtZVxuMTkyMDpcdFx0ICogc3dpdGNoaW5nIGluIHJlbmFtZSB3aWxsIHN0aWxsIGFsd2F5cyBoYXZlIGEgTlVMIGF0IHRoZSBlbmQsXG4xOTIxOlx0XHQgKiBldmVuIGlmIHdlIG1pZ2h0IGJlIG92ZXJ3cml0aW5nIGFuIGludGVybmFsIE5VTCBjaGFyYWN0ZXIuXG4xOTIyOlx0XHQgKi9cbjE5MjM6XHRcdG1lbWNweShkZW50cnktXHUwMDNlZF9zaG9ydG5hbWUuc3RyaW5nLCAwLCBETkFNRV9JTkxJTkVfTEVOKTtcbjE5MjQ6XHRcdGlmICh1bmxpa2VseSghbmFtZSkpIHtcbjE5MjU6XHRcdFx0bmFtZSA9IFx1MDAyNnNsYXNoX25hbWU7XG4xOTI2Olx0XHRcdGRuYW1lID0gZGVudHJ5LVx1MDAzZWRfc2hvcnRuYW1lLnN0cmluZztcbjE5Mjc6XHRcdH0gZWxzZSBpZiAobmFtZS1cdTAwM2VsZW4gXHUwMDNlIEROQU1FX0lOTElORV9MRU4tMSkge1xuMTkyODpcdFx0XHRzdHJ1Y3QgZXh0ZXJuYWxfbmFtZSAqcDtcbjE5Mjk6XHRcbjE5MzA6XHRcdFx0cCA9IGttYWxsb2NfZmxleCgqcCwgbmFtZSwgbmFtZS1cdTAwM2VsZW4gJiM0MzsgMSxcbjE5MzE6XHRcdFx0XHRcdCBHRlBfS0VSTkVMX0FDQ09VTlQgfCBfX0dGUF9SRUNMQUlNQUJMRSk7XG4xOTMyOlx0XHRcdGlmICghcCkge1xuMTkzMzpcdFx0XHRcdGttZW1fY2FjaGVfZnJlZShkZW50cnlfY2FjaGUsIGRlbnRyeSk7IFxuMTkzNDpcdFx0XHRcdHJldHVybiBOVUxMO1xuMTkzNTpcdFx0XHR9XG4xOTM2Olx0XHRcdGF0b21pY19zZXQoXHUwMDI2cC1cdTAwM2Vjb3VudCwgMSk7XG4xOTM3Olx0XHRcdGRuYW1lID0gcC1cdTAwM2VuYW1lO1xuMTkzODpcdFx0fSBlbHNlICB7XG4xOTM5Olx0XHRcdGRuYW1lID0gZGVudHJ5LVx1MDAzZWRfc2hvcnRuYW1lLnN0cmluZztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTU6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg4NQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSYjMzk7cmUgbXkgb3duOgoKKipEaXZpbmcgRGVlcGVyIGludG8gYF9fZF9hbGxvY2AqKgoKUmlnaHQsIGhvbGQgb24gYSBzZWNvbmQuIEkgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhpcyBgX19kX2FsbG9jYCBmdW5jdGlvbi4gSSBpbml0aWFsbHkgZ2xhbmNlZCBhdCBpdCwgYnV0IEkmIzM5O20gc2Vuc2luZyB0aGVyZSYjMzk7cyBtb3JlIG51YW5jZSBoZXJlIHRoYW4gSSBpbml0aWFsbHkgZ3Jhc3BlZC4gSXQmIzM5O3MgYSBjcml0aWNhbCBmdW5jdGlvbiwgb2J2aW91c2x5LCBqdWRnaW5nIGJ5IGl0cyBuYW1lLCBhbmQgSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucy4gSSYjMzk7bSBub3QganVzdCBnb2luZyB0byBza2ltIG92ZXIgaXQg4oCTIEkgbmVlZCB0byByZWFsbHkgZGlnIGludG8gdGhlIGRldGFpbHMgdG8gc2VlIGhvdyBpdCB3b3Jrcywgd2hhdCBlZGdlIGNhc2VzIGl0IGhhbmRsZXMsIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIGFsbG9jYXRpb24gc3RyYXRlZ3kgb2YgdGhpcyBzeXN0ZW0uIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCBkaXNzZWN0IHRoaXMgY3J1Y2lhbCBwaWVjZSBvZiBjb2RlLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgcmVhbGx5IGdvaW5nIG9uIHVuZGVyIHRoZSBob29kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2RjYWNoZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTk0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxOTQwOlx0XHR9XHRcbjE5NDE6XHRcbjE5NDI6XHRcdGRlbnRyeS1cdTAwM2VfX2RfbmFtZS5sZW4gPSBuYW1lLVx1MDAzZWxlbjtcbjE5NDM6XHRcdGRlbnRyeS1cdTAwM2VfX2RfbmFtZS5oYXNoID0gbmFtZS1cdTAwM2VoYXNoO1xuMTk0NDpcdFx0bWVtY3B5KGRuYW1lLCBuYW1lLVx1MDAzZW5hbWUsIG5hbWUtXHUwMDNlbGVuKTtcbjE5NDU6XHRcdGRuYW1lW25hbWUtXHUwMDNlbGVuXSA9IDA7XG4xOTQ2Olx0XG4xOTQ3Olx0XHQvKiBNYWtlIHN1cmUgd2UgYWx3YXlzIHNlZSB0aGUgdGVybWluYXRpbmcgTlVMIGNoYXJhY3RlciAqL1xuMTk0ODpcdFx0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2ZGVudHJ5LVx1MDAzZV9fZF9uYW1lLm5hbWUsIGRuYW1lKTsgLyogXl5eICovXG4xOTQ5Olx0XG4xOTUwOlx0XHRkZW50cnktXHUwMDNlZF9mbGFncyA9IDA7XG4xOTUxOlx0XHRsb2NrcmVmX2luaXQoXHUwMDI2ZGVudHJ5LVx1MDAzZWRfbG9ja3JlZik7XG4xOTUyOlx0XHRzZXFjb3VudF9zcGlubG9ja19pbml0KFx1MDAyNmRlbnRyeS1cdTAwM2VkX3NlcSwgXHUwMDI2ZGVudHJ5LVx1MDAzZWRfbG9jayk7XG4xOTUzOlx0XHRkZW50cnktXHUwMDNlZF9pbm9kZSA9IE5VTEw7XG4xOTU0Olx0XHRkZW50cnktXHUwMDNlZF9wYXJlbnQgPSBkZW50cnk7XG4xOTU1Olx0XHRkZW50cnktXHUwMDNlZF9zYiA9IHNiO1xuMTk1NjpcdFx0ZGVudHJ5LVx1MDAzZWRfb3AgPSBzYi1cdTAwM2VfX3NfZF9vcDtcbjE5NTc6XHRcdGRlbnRyeS1cdTAwM2VkX2ZsYWdzID0gc2ItXHUwMDNlc19kX2ZsYWdzO1xuMTk1ODpcdFx0ZGVudHJ5LVx1MDAzZWRfZnNkYXRhID0gTlVMTDtcbjE5NTk6XHRcdElOSVRfSExJU1RfQkxfTk9ERShcdTAwMjZkZW50cnktXHUwMDNlZF9oYXNoKTtcbjE5NjA6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNmRlbnRyeS1cdTAwM2VkX2xydSk7XG4xOTYxOlx0XHRJTklUX0hMSVNUX0hFQUQoXHUwMDI2ZGVudHJ5LVx1MDAzZWRfY2hpbGRyZW4pO1xuMTk2MjpcdFx0ZGVudHJ5LVx1MDAzZXdhaXRlcnMgPSBOVUxMO1xuMTk2MzpcdFx0SU5JVF9ITElTVF9OT0RFKFx1MDAyNmRlbnRyeS1cdTAwM2VkX3NpYik7XG4xOTY0Olx0XG4xOTY1Olx0XHRpZiAoZGVudHJ5LVx1MDAzZWRfb3AgXHUwMDI2XHUwMDI2IGRlbnRyeS1cdTAwM2VkX29wLVx1MDAzZWRfaW5pdCkge1xuMTk2NjpcdFx0XHRlcnIgPSBkZW50cnktXHUwMDNlZF9vcC1cdTAwM2VkX2luaXQoZGVudHJ5KTtcbjE5Njc6XHRcdFx0aWYgKGVycikge1xuMTk2ODpcdFx0XHRcdGlmIChkbmFtZV9leHRlcm5hbChkZW50cnkpKVxuMTk2OTpcdFx0XHRcdFx0a2ZyZWUoZXh0ZXJuYWxfbmFtZShkZW50cnkpKTtcbjE5NzA6XHRcdFx0XHRrbWVtX2NhY2hlX2ZyZWUoZGVudHJ5X2NhY2hlLCBkZW50cnkpO1xuMTk3MTpcdFx0XHRcdHJldHVybiBOVUxMO1xuMTk3MjpcdFx0XHR9XG4xOTczOlx0XHR9XG4xOTc0Olx0XG4xOTc1Olx0XHR0aGlzX2NwdV9pbmMobnJfZGVudHJ5KTtcbjE5NzY6XHRcbjE5Nzc6XHRcdHJldHVybiBkZW50cnk7XG4xOTc4Olx0fVxuMTk3OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNTo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0Nzc0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBBdXRob3ImIzM5O3MgSW50ZW50IGFuZCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoaXMuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpczogd2hhdCB3YXMgdGhlICppbnRlbmRlZCogb3V0Y29tZSBvZiB0aGlzIGNoYW5nZSwgY29tcGFyZWQgdG8gd2hhdCB0aGUgYXV0aG9yIGFjdHVhbGx5ICppbXBsZW1lbnRlZCo/IEkgaGF2ZSB0byB1bmRlcnN0YW5kIHRoZSBnYXAsIG9yIGlmIHRoZXJlIGlzIG9uZS4KCkhvbGQgb24gYSBzZWNvbmQuLi4gYmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIHRoZSBjb2RlLCBsZXQmIzM5O3Mgc2VlIGlmIHRoZXJlJiMzOTtzIGFuIGVhc2llciBwYXRoLiBJIHdvbmRlciBpZiB0aGVyZSYjMzk7cyBhIGhhbmR5IGNvbW1pdCBtZXNzYWdlIG9yIGEgY2xlYW4gaGlzdG9yeSByZWxhdGVkIHRvIHRoaXMgYXJlYS4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgdGhlIGBnaXQgbG9nYC4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBmb2N1cyBvbiB0aGUgYGZzL2RjYWNoZS5jYCBmaWxlLiBJJiMzOTtsbCBzZWFyY2ggaXRzIGhpc3RvcnkuIEFuZCBqdXN0IHRvIGJlIHRob3JvdWdoLCBJJiMzOTtsbCBgZ3JlcGAgZm9yIHNwZWNpZmljIGtleXdvcmRzIHdpdGhpbiB0aGF0IGZpbGU6IGBjb3B5X25hbWVgIGFuZCBgc3dhcF9uYW1lc2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IGFuZCBhbnkgcmVsYXRlZCBjaGFuZ2VzLiBIb3BlZnVsbHksIHRoZSBjb21taXQgbWVzc2FnZXMgd2lsbCBwcm92aWRlIHNvbWUgY2xhcml0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTU6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZF9zaG9ydG5hbWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9kY2FjaGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9kY2FjaGUuYz0zNTY9c3RhdGljIGlubGluZSBpbnQgZG5hbWVfZXh0ZXJuYWwoY29uc3Qgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuZnMvZGNhY2hlLmMtMzU3LXtcbmZzL2RjYWNoZS5jOjM1ODpcdHJldHVybiBkZW50cnktXHUwMDNlZF9uYW1lLm5hbWUgIT0gZGVudHJ5LVx1MDAzZWRfc2hvcnRuYW1lLnN0cmluZztcbmZzL2RjYWNoZS5jLTM1OS19XG4tLVxuZnMvZGNhY2hlLmM9MzYxPXZvaWQgdGFrZV9kZW50cnlfbmFtZV9zbmFwc2hvdChzdHJ1Y3QgbmFtZV9zbmFwc2hvdCAqbmFtZSwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuLS1cbmZzL2RjYWNoZS5jLTM3MS1cdG5hbWUtXHUwMDNlbmFtZS5uYW1lID0gbmFtZS1cdTAwM2VpbmxpbmVfbmFtZS5zdHJpbmc7XG5mcy9kY2FjaGUuYzozNzI6XHRpZiAobGlrZWx5KHMgPT0gZGVudHJ5LVx1MDAzZWRfc2hvcnRuYW1lLnN0cmluZykpIHtcbmZzL2RjYWNoZS5jOjM3MzpcdFx0bmFtZS1cdTAwM2VpbmxpbmVfbmFtZSA9IGRlbnRyeS1cdTAwM2VkX3Nob3J0bmFtZTtcbmZzL2RjYWNoZS5jLTM3NC1cdH0gZWxzZSB7XG4tLVxuZnMvZGNhY2hlLmM9MTkwMT1zdGF0aWMgc3RydWN0IGRlbnRyeSAqX19kX2FsbG9jKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lKVxuLS1cbmZzL2RjYWNoZS5jLTE5MTMtXHQgKiBGdWxseSBpbml0aWFsaXplIHRoZSBpbmxpbmUgbmFtZSBidWZmZXIuICBjb3B5X25hbWUoKSBhbmRcbmZzL2RjYWNoZS5jOjE5MTQ6XHQgKiBzd2FwX25hbWVzKCkgY29weSBkX3Nob3J0bmFtZSBpbiBpdHMgZW50aXJldHksIHNvIGFueVxuZnMvZGNhY2hlLmMtMTkxNS1cdCAqIHVuaW5pdGlhbGl6ZWQgdGFpbCB3b3VsZCBwcm9wYWdhdGUgdG8gdGhlIG90aGVyIGRlbnRyeSwgYW5kXG4tLVxuZnMvZGNhY2hlLmMtMTkyMi1cdCAqL1xuZnMvZGNhY2hlLmM6MTkyMzpcdG1lbWNweShkZW50cnktXHUwMDNlZF9zaG9ydG5hbWUuc3RyaW5nLCAwLCBETkFNRV9JTkxJTkVfTEVOKTtcbmZzL2RjYWNoZS5jLTE5MjQtXHRpZiAodW5saWtlbHkoIW5hbWUpKSB7XG5mcy9kY2FjaGUuYy0xOTI1LVx0XHRuYW1lID0gXHUwMDI2c2xhc2hfbmFtZTtcbmZzL2RjYWNoZS5jOjE5MjY6XHRcdGRuYW1lID0gZGVudHJ5LVx1MDAzZWRfc2hvcnRuYW1lLnN0cmluZztcbmZzL2RjYWNoZS5jLTE5MjctXHR9IGVsc2UgaWYgKG5hbWUtXHUwMDNlbGVuIFx1MDAzZSBETkFNRV9JTkxJTkVfTEVOLTEpIHtcbi0tXG5mcy9kY2FjaGUuYy0xOTM4LVx0fSBlbHNlICB7XG5mcy9kY2FjaGUuYzoxOTM5Olx0XHRkbmFtZSA9IGRlbnRyeS1cdTAwM2VkX3Nob3J0bmFtZS5zdHJpbmc7XG5mcy9kY2FjaGUuYy0xOTQwLVx0fVx0XG4tLVxuZnMvZGNhY2hlLmM9Mjk5ND1zdGF0aWMgdm9pZCBzd2FwX25hbWVzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGRlbnRyeSAqdGFyZ2V0KVxuLS1cbmZzL2RjYWNoZS5jLTMwMDctXHRcdFx0ZGVudHJ5LVx1MDAzZV9fZF9uYW1lLm5hbWUgPSB0YXJnZXQtXHUwMDNlX19kX25hbWUubmFtZTtcbmZzL2RjYWNoZS5jOjMwMDg6XHRcdFx0dGFyZ2V0LVx1MDAzZWRfc2hvcnRuYW1lID0gZGVudHJ5LVx1MDAzZWRfc2hvcnRuYW1lO1xuZnMvZGNhY2hlLmM6MzAwOTpcdFx0XHR0YXJnZXQtXHUwMDNlX19kX25hbWUubmFtZSA9IHRhcmdldC1cdTAwM2VkX3Nob3J0bmFtZS5zdHJpbmc7XG5mcy9kY2FjaGUuYy0zMDEwLVx0XHR9XG4tLVxuZnMvZGNhY2hlLmMtMzAxNy1cdFx0XHR0YXJnZXQtXHUwMDNlX19kX25hbWUubmFtZSA9IGRlbnRyeS1cdTAwM2VfX2RfbmFtZS5uYW1lO1xuZnMvZGNhY2hlLmM6MzAxODpcdFx0XHRkZW50cnktXHUwMDNlZF9zaG9ydG5hbWUgPSB0YXJnZXQtXHUwMDNlZF9zaG9ydG5hbWU7XG5mcy9kY2FjaGUuYzozMDE5Olx0XHRcdGRlbnRyeS1cdTAwM2VfX2RfbmFtZS5uYW1lID0gZGVudHJ5LVx1MDAzZWRfc2hvcnRuYW1lLnN0cmluZztcbmZzL2RjYWNoZS5jLTMwMjAtXHRcdH0gZWxzZSB7XG4tLVxuZnMvZGNhY2hlLmMtMzAyNC1cdFx0XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgRE5BTUVfSU5MSU5FX1dPUkRTOyBpJiM0MzsmIzQzOylcbmZzL2RjYWNoZS5jOjMwMjU6XHRcdFx0XHRzd2FwKGRlbnRyeS1cdTAwM2VkX3Nob3J0bmFtZS53b3Jkc1tpXSxcbmZzL2RjYWNoZS5jOjMwMjY6XHRcdFx0XHQgICAgIHRhcmdldC1cdTAwM2VkX3Nob3J0bmFtZS53b3Jkc1tpXSk7XG5mcy9kY2FjaGUuYy0zMDI3LVx0XHR9XG4tLVxuZnMvZGNhY2hlLmM9MzAzMj1zdGF0aWMgdm9pZCBjb3B5X25hbWUoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZGVudHJ5ICp0YXJnZXQpXG4tLVxuZnMvZGNhY2hlLmMtMzA0MC1cdH0gZWxzZSB7XG5mcy9kY2FjaGUuYzozMDQxOlx0XHRkZW50cnktXHUwMDNlZF9zaG9ydG5hbWUgPSB0YXJnZXQtXHUwMDNlZF9zaG9ydG5hbWU7XG5mcy9kY2FjaGUuYzozMDQyOlx0XHRkZW50cnktXHUwMDNlX19kX25hbWUubmFtZSA9IGRlbnRyeS1cdTAwM2VkX3Nob3J0bmFtZS5zdHJpbmc7XG5mcy9kY2FjaGUuYy0zMDQzLVx0XHRkZW50cnktXHUwMDNlX19kX25hbWUuaGFzaF9sZW4gPSB0YXJnZXQtXHUwMDNlX19kX25hbWUuaGFzaF9sZW47XG4tLVxuZnMvZGNhY2hlLmM9MzM2OT12b2lkIGRfbWFya190bXBmaWxlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2RjYWNoZS5jLTMzNzctXHRzcGluX2xvY2tfbmVzdGVkKFx1MDAyNmRlbnRyeS1cdTAwM2VkX2xvY2ssIERFTlRSWV9EX0xPQ0tfTkVTVEVEKTtcbmZzL2RjYWNoZS5jOjMzNzg6XHRkZW50cnktXHUwMDNlX19kX25hbWUubGVuID0gc3ByaW50ZihkZW50cnktXHUwMDNlZF9zaG9ydG5hbWUuc3RyaW5nLCBcJiMzNDsjJWxsdVwmIzM0OyxcbmZzL2RjYWNoZS5jLTMzNzktXHRcdFx0XHQodW5zaWduZWQgbG9uZyBsb25nKWlub2RlLVx1MDAzZWlfaW5vKTtcbi0tXG5mcy9kY2FjaGUuYz0zMzg1PWludCBkX21hcmtfdG1wZmlsZV9uYW1lKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSlcbi0tXG5mcy9kY2FjaGUuYy0zMzg3LVx0c3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gZmlsZS1cdTAwM2VmX3BhdGguZGVudHJ5O1xuZnMvZGNhY2hlLmM6MzM4ODpcdGNoYXIgKmRuYW1lID0gZGVudHJ5LVx1MDAzZWRfc2hvcnRuYW1lLnN0cmluZztcbmZzL2RjYWNoZS5jLTMzODktXG4tLVxuZnMvZGNhY2hlLmM9MzQ3Nz1zdGF0aWMgdm9pZCBfX2luaXQgZGNhY2hlX2luaXQodm9pZClcbi0tXG5mcy9kY2FjaGUuYy0zNDg1LVx0XHRTTEFCX1JFQ0xBSU1fQUNDT1VOVHxTTEFCX1BBTklDfFNMQUJfQUNDT1VOVCxcbmZzL2RjYWNoZS5jOjM0ODY6XHRcdGRfc2hvcnRuYW1lLnN0cmluZyk7XG5mcy9kY2FjaGUuYy0zNDg3LVx0cnVudGltZV9jb25zdF9pbml0KHB0ciwgX19kZW50cnlfY2FjaGUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNTo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTE0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipEaXZpbmcgRGVlcCBpbnRvIHRoZSBEY2FjaGUgSW5pdGlhbGl6YXRpb24qKgoKQWxyaWdodCwgbXkgZm9jdXMgaXMgbGFzZXItdGFyZ2V0ZWQgb24gbGluZSAzNDg1LTM0ODYg4oCTIHNvbWV0aGluZyBoYXMgY2F1Z2h0IG15IGV5ZS4gQWgsIHRoZXJlIGl0IGlzOiBgZGNhY2hlX2luaXRgLiBUaGF0JiMzOTtzIGEga2V5IGZ1bmN0aW9uIGZvciBpbml0aWFsaXppbmcgdGhlIGRjYWNoZSwgc28gaXQmIzM5O3Mgd29ydGggYSBjbG9zZXIgbG9vay4gVG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dCBmdWxseSwgSSBzaG91bGQgem9vbSBvdXQgYW5kIGV4YW1pbmUgYSBzdXJyb3VuZGluZyBibG9jayBvZiBjb2RlLiBMaW5lcyAzNDcwLTM1MDAgd2l0aGluIGBmcy9kY2FjaGUuY2Agc2hvdWxkIGdpdmUgbWUgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiBvbiB0aGUgZGNhY2hlIGluaXRpYWxpemF0aW9uLiBUaW1lIHRvIGRlbHZlIGludG8gdGhvc2UgbGluZXMgYW5kIHNlZSBob3cgdGhlIGRjYWNoZSBpcyBzZXQgdXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE1OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZGNhY2hlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNDcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM0NzA6XHRcdFx0XHRcdFx0MCk7XG4zNDcxOlx0XHRkX2hhc2hfc2hpZnQgPSAzMiAtIGRfaGFzaF9zaGlmdDtcbjM0NzI6XHRcbjM0NzM6XHRcdHJ1bnRpbWVfY29uc3RfaW5pdChzaGlmdCwgZF9oYXNoX3NoaWZ0KTtcbjM0NzQ6XHRcdHJ1bnRpbWVfY29uc3RfaW5pdChwdHIsIGRlbnRyeV9oYXNodGFibGUpO1xuMzQ3NTpcdH1cbjM0NzY6XHRcbjM0Nzc6XHRzdGF0aWMgdm9pZCBfX2luaXQgZGNhY2hlX2luaXQodm9pZClcbjM0Nzg6XHR7XG4zNDc5Olx0XHQvKlxuMzQ4MDpcdFx0ICogQSBjb25zdHJ1Y3RvciBjb3VsZCBiZSBhZGRlZCBmb3Igc3RhYmxlIHN0YXRlIGxpa2UgdGhlIGxpc3RzLFxuMzQ4MTpcdFx0ICogYnV0IGl0IGlzIHByb2JhYmx5IG5vdCB3b3J0aCBpdCBiZWNhdXNlIG9mIHRoZSBjYWNoZSBuYXR1cmVcbjM0ODI6XHRcdCAqIG9mIHRoZSBkY2FjaGUuXG4zNDgzOlx0XHQgKi9cbjM0ODQ6XHRcdF9fZGVudHJ5X2NhY2hlID0gS01FTV9DQUNIRV9VU0VSQ09QWShkZW50cnksXG4zNDg1Olx0XHRcdFNMQUJfUkVDTEFJTV9BQ0NPVU5UfFNMQUJfUEFOSUN8U0xBQl9BQ0NPVU5ULFxuMzQ4NjpcdFx0XHRkX3Nob3J0bmFtZS5zdHJpbmcpO1xuMzQ4NzpcdFx0cnVudGltZV9jb25zdF9pbml0KHB0ciwgX19kZW50cnlfY2FjaGUpO1xuMzQ4ODpcdFxuMzQ4OTpcdFx0LyogSGFzaCBtYXkgaGF2ZSBiZWVuIHNldCB1cCBpbiBkY2FjaGVfaW5pdF9lYXJseSAqL1xuMzQ5MDpcdFx0aWYgKCFoYXNoZGlzdClcbjM0OTE6XHRcdFx0cmV0dXJuO1xuMzQ5MjpcdFxuMzQ5MzpcdFx0ZGVudHJ5X2hhc2h0YWJsZSA9XG4zNDk0Olx0XHRcdGFsbG9jX2xhcmdlX3N5c3RlbV9oYXNoKFwmIzM0O0RlbnRyeSBjYWNoZVwmIzM0OyxcbjM0OTU6XHRcdFx0XHRcdFx0c2l6ZW9mKHN0cnVjdCBobGlzdF9ibF9oZWFkKSxcbjM0OTY6XHRcdFx0XHRcdFx0ZGhhc2hfZW50cmllcyxcbjM0OTc6XHRcdFx0XHRcdFx0MTMsXG4zNDk4Olx0XHRcdFx0XHRcdEhBU0hfWkVSTyxcbjM0OTk6XHRcdFx0XHRcdFx0XHUwMDI2ZF9oYXNoX3NoaWZ0LFxuMzUwMDpcdFx0XHRcdFx0XHROVUxMLFxuMzUwMTpcdFx0XHRcdFx0XHQyLFxuMzUwMjpcdFx0XHRcdFx0XHQwKTtcbjM1MDM6XHRcdGRfaGFzaF9zaGlmdCA9IDMyIC0gZF9oYXNoX3NoaWZ0O1xuMzUwNDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNTo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MjUzCgkJCQkJCQlvdXRwdXQ6IDIwNAoJCQkJCQkJdGhvdWdodHM6IDQwOTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIERlbnRyeSBBbGxvY2F0aW9uIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoaXMgZGlmZiBpcyBtb2RpZnlpbmcgYGZzL2RjYWNoZS5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgX19kX2FsbG9jYCBmdW5jdGlvbiwgd2hpY2ggaXMgcmVzcG9uc2libGUgZm9yIGFsbG9jYXRpbmcgZGVudHJpZXMuIFRoZSBjcnVjaWFsIHBhcnQgb2YgdGhpcyBwYXRjaCBpbnZvbHZlcyBpbml0aWFsaXppbmcgdGhlIGlubGluZSBuYW1lIGJ1ZmZlciAoYGRlbnRyeS0mZ3Q7ZF9zaG9ydG5hbWUuc3RyaW5nYCkuIFRoZSBvcmlnaW5hbCBjb2RlIGp1c3QgbnVsbC10ZXJtaW5hdGVkIG9uZSBieXRlIGFuZCBpdCBsb29rcyBsaWtlIHRoZXJlIHdhcyB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiB0aGlzIGJ1ZmZlci4KClRoZSBvcmlnaW5hbCBjb2RlIGxvb2tzIGxpa2UgaXQgd2FzIHRyeWluZyB0byBmaXggYSBwb3RlbnRpYWwgaXNzdWUgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiB0aGUgZGVudHJ5JiMzOTtzIGlubGluZSBuYW1lIGJ1ZmZlci4gVGhlIGNvbW1lbnQgY2xlYXJseSBpbmRpY2F0ZXMgYW4gaW50ZW50IHRvICpmdWxseSogaW5pdGlhbGl6ZSB0aGUgYnVmZmVyIHRvIHByZXZlbnQgcG90ZW50aWFsbHkgcHJvcGFnYXRpbmcgdW5pbml0aWFsaXplZCBkYXRhIGR1cmluZyBuYW1lIGNvcGllcyBvciBsb29rdXBzLiBUaGUgaW50ZW50aW9uIHNlZW1zIHRvIGJlIHRvIGluaXRpYWxpemUgdGhlIGlubGluZSBuYW1lIGJ1ZmZlciB0byB6ZXJvLgoKSG93ZXZlciwgdGhlIHBhdGNoICppbmNvcnJlY3RseSogdXNlcyBgbWVtY3B5KGRlbnRyeS0mZ3Q7ZF9zaG9ydG5hbWUuc3RyaW5nLCAwLCBETkFNRV9JTkxJTkVfTEVOKWAgaW5zdGVhZCBvZiBgbWVtc2V0KGRlbnRyeS0mZ3Q7ZF9zaG9ydG5hbWUuc3RyaW5nLCAwLCBETkFNRV9JTkxJTkVfTEVOKWAuIFRoZSBzZWNvbmQgYXJndW1lbnQgYDBgIGluIGBtZW1jcHlgIGlzIGludGVycHJldGVkIGFzIGEgbnVsbCBwb2ludGVyLCBhbmQgaXQgY2F1c2VzIHRoZSBrZXJuZWwgdG8gZGVyZWZlcmVuY2UgdGhlIG51bGwgcG9pbnRlciB3aGljaCBpbnN0YW50bHkgdHJpZ2dlcnMgYSBrZXJuZWwgY3Jhc2ggKHBhZ2UgZmF1bHQpLgoKVGhlIG1vc3QgaW1tZWRpYXRlIGNvbnNlcXVlbmNlIGlzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLiBUaGlzIHdpbGwgcmVzdWx0IGluIGFuIGltbWVkaWF0ZSBjcmFzaCBkdXJpbmcgdGhlIGZpcnN0IGRlbnRyeSBhbGxvY2F0aW9uLCBtYWtpbmcgaXQgaW1wb3NzaWJsZSB0byBldmVuICpyZWFjaCogYW55IHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgc3lzdGVtIHdpbGwgaGFsdCB3aXRoIGEga2VybmVsIG9vcHMgb3IgYSBwYWdlIGZhdWx0LiBUaGlzIGlzIGEgdmVyeSBzZXZlcmUgYnVnIHRoYXQgd2lsbCBiZSBjYXVnaHQgYnkgYW55IHN0YW5kYXJkIGJ1ZyBkZXRlY3RvciwgaW5jbHVkaW5nIHRoZSBub3JtYWwga2VybmVsIGZhdWx0IGhhbmRsZXJzIGFuZCBLQVNBTi4KCkdpdmVuIHRoaXMgdW5kZXJzdGFuZGluZywgaXQgc2VlbXMgdGhlIHBhdGNoIHdyaXRlciBtYWRlIGEgY2xhc3NpYyB0eXBvIG9yIGEgbWlzdW5kZXJzdGFuZGluZyBvZiBob3cgYG1lbWNweWAgYW5kIGBtZW1zZXRgIGZ1bmN0aW9ucyB3b3JrLgoKTm93LCB0aGUgcXVlc3Rpb24gaXM6IGRvZXMgdGhpcyB3YXJyYW50IEtNU0FOIGZ1enppbmc/CgpUaGUgcGF0Y2ggKmludHJvZHVjZXMqIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCB3aGljaCBpcyByZWFkaWx5IGNhdWdodCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4gSXQgZG9lcyAqbm90KiBpbnRyb2R1Y2UgYSByaXNrIG9mICp1bmluaXRpYWxpemVkKiBtZW1vcnkgKmJlaW5nIHJlYWQqIHRoYXQgKm9ubHkqIEtNU0FOIGNvdWxkIGRldGVjdC4gRXZlbiBpZiB0aGUgcGF0Y2ggKmludGVuZGVkKiB0byB6ZXJvIHRoZSBtZW1vcnkgd2l0aCBgbWVtc2V0YCwgdGhpcyB3b3VsZCBoYXZlIGZpeGVkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlLCBub3QgaW50cm9kdWNlZCB0aGVtLgoKU28sIGFjY29yZGluZyB0byB0aGUgcHJvdmlkZWQgaW5zdHJ1Y3Rpb25zLCBzaW5jZSBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIChsaWtlIEtBU0FOKSB3b3VsZCBjYXRjaCB0aGUgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCB0aGVyZSBpcyBubyBuZWVkIGZvciBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2tzIHRoYXQgb25seSBLTVNBTiBjb3VsZCBkZXRlY3QuIEtNU0FOIGlzIGZvciBkZXRlY3RpbmcgdGhlIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaHVzLCBgTmVlZHNLTVNBTmAgaXMgYGZhbHNlYC4gVGhlIHBhdGNoJiMzOTtzIHByaW1hcnkgaXNzdWUgaXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UsIGEgYnVnIGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgX19kX2FsbG9jKClgIGluIGBmcy9kY2FjaGUuY2AsIGludGVuZGluZyB0byBmdWxseSBpbml0aWFsaXplIGBkZW50cnktXHUwMDNlZF9zaG9ydG5hbWUuc3RyaW5nYC4gSG93ZXZlciwgaXQgZXJyb25lb3VzbHkgY2FsbHMgYG1lbWNweShkZW50cnktXHUwMDNlZF9zaG9ydG5hbWUuc3RyaW5nLCAwLCBETkFNRV9JTkxJTkVfTEVOKWAgaW5zdGVhZCBvZiBgbWVtc2V0KClgLiBQYXNzaW5nIGAwYCAoTlVMTCkgYXMgdGhlIHNvdXJjZSBwb2ludGVyIHRvIGBtZW1jcHkoKWAgaW50cm9kdWNlcyBhbiBpbW1lZGlhdGUgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIHVwb24gZGVudHJ5IGFsbG9jYXRpb24uXG5cbk5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgYXJlIGNhdWdodCBpbW1lZGlhdGVseSBieSBzdGFuZGFyZCBrZXJuZWwgcGFnZSBmYXVsdCBoYW5kbGluZyBhbmQgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlcnNwYWNlLiBGdXJ0aGVybW9yZSwgaGFkIHRoZSBjYWxsIGNvcnJlY3RseSBiZWVuIGBtZW1zZXQoKWAsIGl0IHdvdWxkIGhhdmUgaW5pdGlhbGl6ZWQgdGhlIGJ1ZmZlciB0byB6ZXJvZXMsIGVsaW1pbmF0aW5nIHVuaW5pdGlhbGl6ZWQgZGF0YSByYXRoZXIgdGhhbiBjcmVhdGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gVGhlcmVmb3JlLCB0aGlzIGNoYW5nZSBkb2VzIG5vdCBqdXN0aWZ5IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBfX2RfYWxsb2MoKWAgaW4gYGZzL2RjYWNoZS5jYCwgaW50ZW5kaW5nIHRvIGZ1bGx5IGluaXRpYWxpemUgYGRlbnRyeS1cdTAwM2VkX3Nob3J0bmFtZS5zdHJpbmdgLiBIb3dldmVyLCBpdCBlcnJvbmVvdXNseSBjYWxscyBgbWVtY3B5KGRlbnRyeS1cdTAwM2VkX3Nob3J0bmFtZS5zdHJpbmcsIDAsIEROQU1FX0lOTElORV9MRU4pYCBpbnN0ZWFkIG9mIGBtZW1zZXQoKWAuIFBhc3NpbmcgYDBgIChOVUxMKSBhcyB0aGUgc291cmNlIHBvaW50ZXIgdG8gYG1lbWNweSgpYCBpbnRyb2R1Y2VzIGFuIGltbWVkaWF0ZSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgdXBvbiBkZW50cnkgYWxsb2NhdGlvbi5cblxuTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBhcmUgY2F1Z2h0IGltbWVkaWF0ZWx5IGJ5IHN0YW5kYXJkIGtlcm5lbCBwYWdlIGZhdWx0IGhhbmRsaW5nIGFuZCBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2Vyc3BhY2UuIEZ1cnRoZXJtb3JlLCBoYWQgdGhlIGNhbGwgY29ycmVjdGx5IGJlZW4gYG1lbXNldCgpYCwgaXQgd291bGQgaGF2ZSBpbml0aWFsaXplZCB0aGUgYnVmZmVyIHRvIHplcm9lcywgZWxpbWluYXRpbmcgdW5pbml0aWFsaXplZCBkYXRhIHJhdGhlciB0aGFuIGNyZWF0aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBUaGVyZWZvcmUsIHRoaXMgY2hhbmdlIGRvZXMgbm90IGp1c3RpZnkgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxNTo1MzoyOC4zNzU1NDk4MjlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTgzNzk4MjY1NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19kX2FsbG9jXCIsXG4gICAgXCJkX2FsbG9jXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgX19kX2FsbG9jKClgIGluIGBmcy9kY2FjaGUuY2AsIGludGVuZGluZyB0byBmdWxseSBpbml0aWFsaXplIGBkZW50cnktXFx1MDAzZWRfc2hvcnRuYW1lLnN0cmluZ2AuIEhvd2V2ZXIsIGl0IGVycm9uZW91c2x5IGNhbGxzIGBtZW1jcHkoZGVudHJ5LVxcdTAwM2VkX3Nob3J0bmFtZS5zdHJpbmcsIDAsIEROQU1FX0lOTElORV9MRU4pYCBpbnN0ZWFkIG9mIGBtZW1zZXQoKWAuIFBhc3NpbmcgYDBgIChOVUxMKSBhcyB0aGUgc291cmNlIHBvaW50ZXIgdG8gYG1lbWNweSgpYCBpbnRyb2R1Y2VzIGFuIGltbWVkaWF0ZSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgdXBvbiBkZW50cnkgYWxsb2NhdGlvbi5cXG5cXG5OVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFyZSBjYXVnaHQgaW1tZWRpYXRlbHkgYnkgc3RhbmRhcmQga2VybmVsIHBhZ2UgZmF1bHQgaGFuZGxpbmcgYW5kIEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZS4gRnVydGhlcm1vcmUsIGhhZCB0aGUgY2FsbCBjb3JyZWN0bHkgYmVlbiBgbWVtc2V0KClgLCBpdCB3b3VsZCBoYXZlIGluaXRpYWxpemVkIHRoZSBidWZmZXIgdG8gemVyb2VzLCBlbGltaW5hdGluZyB1bmluaXRpYWxpemVkIGRhdGEgcmF0aGVyIHRoYW4gY3JlYXRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFRoZXJlZm9yZSwgdGhpcyBjaGFuZ2UgZG9lcyBub3QganVzdGlmeSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgX19kX2FsbG9jKCkgaW4gZnMvZGNhY2hlLmMgdG8gaW5pdGlhbGl6ZSB0aGUgaW5saW5lIG5hbWUgYnVmZmVyIChkX3Nob3J0bmFtZSkuIEluIGRvaW5nIHNvLCBpdCBlcnJvbmVvdXNseSB1c2VzIG1lbWNweSgpIHdpdGggYSBOVUxMIHBvaW50ZXIgKDApIGFzIHRoZSBzb3VyY2UgYWRkcmVzcyByYXRoZXIgdGhhbiBtZW1zZXQoKSwgd2hpY2ggY2F1c2VzIGEga2VybmVsIGNyYXNoL05VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSB1cG9uIGRlbnRyeSBhbGxvY2F0aW9uLiBUaGlzIG1vZGlmaWVzIGNvcmUgVkZTIGxvZ2ljIHRoYXQgaXMgZGlyZWN0bHkgYW5kIGVhc2lseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxNTo1MzoyOC4zNzU1NTU3NDlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NTQwMzI1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGJmMWVhNTJmZjAzMmRhNjA2MzRmNzYzY2VkZjU5ZTM4ZWE0MzM4MzlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBTZXAgMTMgMTU6NTM6MjcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvZGNhY2hlLmMgYi9mcy9kY2FjaGUuY1xcbmluZGV4IDFiMWE4MWYxMGRhNjcuLjJkZTFiYzc2ZGM4ZTkgMTAwNjQ0XFxuLS0tIGEvZnMvZGNhY2hlLmNcXG4rKysgYi9mcy9kY2FjaGUuY1xcbkBAIC0xOTEwLDEyICsxOTEwLDE3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpfX2RfYWxsb2Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUpXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXG4gXFx0LypcXG4tXFx0ICogV2UgZ3VhcmFudGVlIHRoYXQgdGhlIGlubGluZSBuYW1lIGlzIGFsd2F5cyBOVUwtdGVybWluYXRlZC5cXG4tXFx0ICogVGhpcyB3YXkgdGhlIG1lbWNweSgpIGRvbmUgYnkgdGhlIG5hbWUgc3dpdGNoaW5nIGluIHJlbmFtZVxcbi1cXHQgKiB3aWxsIHN0aWxsIGFsd2F5cyBoYXZlIGEgTlVMIGF0IHRoZSBlbmQsIGV2ZW4gaWYgd2UgbWlnaHRcXG4tXFx0ICogYmUgb3ZlcndyaXRpbmcgYW4gaW50ZXJuYWwgTlVMIGNoYXJhY3RlclxcbitcXHQgKiBGdWxseSBpbml0aWFsaXplIHRoZSBpbmxpbmUgbmFtZSBidWZmZXIuICBjb3B5X25hbWUoKSBhbmRcXG4rXFx0ICogc3dhcF9uYW1lcygpIGNvcHkgZF9zaG9ydG5hbWUgaW4gaXRzIGVudGlyZXR5LCBzbyBhbnlcXG4rXFx0ICogdW5pbml0aWFsaXplZCB0YWlsIHdvdWxkIHByb3BhZ2F0ZSB0byB0aGUgb3RoZXIgZGVudHJ5LCBhbmRcXG4rXFx0ICogX19kX2xvb2t1cF9yY3UoKSBtYXkgdHJhbnNpZW50bHkgcmVhZCBhbnkgYnl0ZSBvZiB0aGUgaW5saW5lXFxuK1xcdCAqIG5hbWUgd2hpbGUgcmVuYW1lKCkgcmV3cml0ZXMgaXQgaW4gcGxhY2UuXFxuK1xcdCAqXFxuK1xcdCAqIFRoaXMgYWxzbyBrZWVwcyB0aGUgaW5saW5lIG5hbWUgTlVMLXRlcm1pbmF0ZWQ6IHRoZSBuYW1lXFxuK1xcdCAqIHN3aXRjaGluZyBpbiByZW5hbWUgd2lsbCBzdGlsbCBhbHdheXMgaGF2ZSBhIE5VTCBhdCB0aGUgZW5kLFxcbitcXHQgKiBldmVuIGlmIHdlIG1pZ2h0IGJlIG92ZXJ3cml0aW5nIGFuIGludGVybmFsIE5VTCBjaGFyYWN0ZXIuXFxuIFxcdCAqL1xcbi1cXHRkZW50cnktXFx1MDAzZWRfc2hvcnRuYW1lLnN0cmluZ1tETkFNRV9JTkxJTkVfTEVOLTFdID0gMDtcXG4rXFx0bWVtY3B5KGRlbnRyeS1cXHUwMDNlZF9zaG9ydG5hbWUuc3RyaW5nLCAwLCBETkFNRV9JTkxJTkVfTEVOKTtcXG4gXFx0aWYgKHVubGlrZWx5KCFuYW1lKSkge1xcbiBcXHRcXHRuYW1lID0gXFx1MDAyNnNsYXNoX25hbWU7XFxuIFxcdFxcdGRuYW1lID0gZGVudHJ5LVxcdTAwM2VkX3Nob3J0bmFtZS5zdHJpbmc7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE1OjUzOjI4Ljg3MTkwMDM5OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NzU1OTk1MTUyODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19kX2FsbG9jXCIsXG4gICAgXCJkX2FsbG9jXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgX19kX2FsbG9jKCkgaW4gZnMvZGNhY2hlLmMgdG8gaW5pdGlhbGl6ZSB0aGUgaW5saW5lIG5hbWUgYnVmZmVyIChkX3Nob3J0bmFtZSkuIEluIGRvaW5nIHNvLCBpdCBlcnJvbmVvdXNseSB1c2VzIG1lbWNweSgpIHdpdGggYSBOVUxMIHBvaW50ZXIgKDApIGFzIHRoZSBzb3VyY2UgYWRkcmVzcyByYXRoZXIgdGhhbiBtZW1zZXQoKSwgd2hpY2ggY2F1c2VzIGEga2VybmVsIGNyYXNoL05VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSB1cG9uIGRlbnRyeSBhbGxvY2F0aW9uLiBUaGlzIG1vZGlmaWVzIGNvcmUgVkZTIGxvZ2ljIHRoYXQgaXMgZGlyZWN0bHkgYW5kIGVhc2lseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGJmMWVhNTJmZjAzMmRhNjA2MzRmNzYzY2VkZjU5ZTM4ZWE0MzM4MzlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCAxMyAxNTo1MzoyNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2RjYWNoZS5jIGIvZnMvZGNhY2hlLmNcbmluZGV4IDFiMWE4MWYxMGRhNjcuLjJkZTFiYzc2ZGM4ZTkgMTAwNjQ0XG4tLS0gYS9mcy9kY2FjaGUuY1xuKysrIGIvZnMvZGNhY2hlLmNcbkBAIC0xOTEwLDEyICsxOTEwLDE3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpfX2RfYWxsb2Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuIFx0Lypcbi1cdCAqIFdlIGd1YXJhbnRlZSB0aGF0IHRoZSBpbmxpbmUgbmFtZSBpcyBhbHdheXMgTlVMLXRlcm1pbmF0ZWQuXG4tXHQgKiBUaGlzIHdheSB0aGUgbWVtY3B5KCkgZG9uZSBieSB0aGUgbmFtZSBzd2l0Y2hpbmcgaW4gcmVuYW1lXG4tXHQgKiB3aWxsIHN0aWxsIGFsd2F5cyBoYXZlIGEgTlVMIGF0IHRoZSBlbmQsIGV2ZW4gaWYgd2UgbWlnaHRcbi1cdCAqIGJlIG92ZXJ3cml0aW5nIGFuIGludGVybmFsIE5VTCBjaGFyYWN0ZXJcbitcdCAqIEZ1bGx5IGluaXRpYWxpemUgdGhlIGlubGluZSBuYW1lIGJ1ZmZlci4gIGNvcHlfbmFtZSgpIGFuZFxuK1x0ICogc3dhcF9uYW1lcygpIGNvcHkgZF9zaG9ydG5hbWUgaW4gaXRzIGVudGlyZXR5LCBzbyBhbnlcbitcdCAqIHVuaW5pdGlhbGl6ZWQgdGFpbCB3b3VsZCBwcm9wYWdhdGUgdG8gdGhlIG90aGVyIGRlbnRyeSwgYW5kXG4rXHQgKiBfX2RfbG9va3VwX3JjdSgpIG1heSB0cmFuc2llbnRseSByZWFkIGFueSBieXRlIG9mIHRoZSBpbmxpbmVcbitcdCAqIG5hbWUgd2hpbGUgcmVuYW1lKCkgcmV3cml0ZXMgaXQgaW4gcGxhY2UuXG4rXHQgKlxuK1x0ICogVGhpcyBhbHNvIGtlZXBzIHRoZSBpbmxpbmUgbmFtZSBOVUwtdGVybWluYXRlZDogdGhlIG5hbWVcbitcdCAqIHN3aXRjaGluZyBpbiByZW5hbWUgd2lsbCBzdGlsbCBhbHdheXMgaGF2ZSBhIE5VTCBhdCB0aGUgZW5kLFxuK1x0ICogZXZlbiBpZiB3ZSBtaWdodCBiZSBvdmVyd3JpdGluZyBhbiBpbnRlcm5hbCBOVUwgY2hhcmFjdGVyLlxuIFx0ICovXG4tXHRkZW50cnktXHUwMDNlZF9zaG9ydG5hbWUuc3RyaW5nW0ROQU1FX0lOTElORV9MRU4tMV0gPSAwO1xuK1x0bWVtY3B5KGRlbnRyeS1cdTAwM2VkX3Nob3J0bmFtZS5zdHJpbmcsIDAsIEROQU1FX0lOTElORV9MRU4pO1xuIFx0aWYgKHVubGlrZWx5KCFuYW1lKSkge1xuIFx0XHRuYW1lID0gXHUwMDI2c2xhc2hfbmFtZTtcbiBcdFx0ZG5hbWUgPSBkZW50cnktXHUwMDNlZF9zaG9ydG5hbWUuc3RyaW5nO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTU6NTM6MjguODcxOTAyMzg4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjUzMDYxNTY2MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS2VybmVsIFBhdGNoIEV2YWx1YXRpb246IEltbWVkaWF0ZSBSZWQgRmxhZyEqKlxuXG5Pa2F5LCBzbyBJJ20gcHJlc2VudGVkIHdpdGggYSBrZXJuZWwgcGF0Y2ggYW5kIGFza2VkIHRvIGdpdmUgaXQgYSBsb29rLiBMZXQncyBkaWcgaW4uIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIHRoZSBjaGFuZ2UgaXRzZWxmLiBJIHN0YXJ0IGJ5IGluc3BlY3RpbmcgdGhlIGNvZGUgZGlmZi5cblxuV2FpdCwgaG9sZCBvbiBhIHNlY29uZCEgVGhpcyBgZnMvZGNhY2hlLmNgIHBhdGNoIGxvb2tz4oCmIGNvbmNlcm5pbmcuIFNwZWNpZmljYWxseSwgSSdtIGxvb2tpbmcgYXQgdGhpcyBsaW5lOiBgbWVtY3B5KGRlbnRyeS1cdTAwM2VkX3Nob3J0bmFtZS5zdHJpbmcsIDAsIEROQU1FX0lOTElORV9MRU4pO2AuIFRoYXQganVtcCBvdXQgYXQgbWUgaW1tZWRpYXRlbHkuIEkga25vdyB0aGF0IGBtZW1jcHlgJ3MgYXJndW1lbnRzIGFyZSBgKGRlc3RpbmF0aW9uLCBzb3VyY2UsIG51bWJlcl9vZl9ieXRlcylgLiBUaGUgYXV0aG9yJ3MgdXNpbmcgYDBgIGFzIHRoZSBzb3VyY2UhXG5cbldhaXQgYSBtaW51dGUsIHRoZXkndmUgdXNlZCBgbWVtY3B5YCB3aXRoIGEgbGl0ZXJhbCBgMGAgYXMgdGhlIHNvdXJjZSB3aGVuIHRoZXkgcHJvYmFibHkgbWVhbnQgdG8gdXNlIGBtZW1zZXRgISBUaGlzIGlzIGJhZC4gSW4gQywgcGFzc2luZyBgMGAgYXMgdGhlIHNvdXJjZSBwb2ludGVyIGluIGBtZW1jcHlgIGlzIGVxdWl2YWxlbnQgdG8gZGVyZWZlcmVuY2luZyBhIE5VTEwgcG9pbnRlci4gV2hlbiB0aGUgYF9fZF9hbGxvY2AgZnVuY3Rpb24gaXMgY2FsbGVkLCB0aGlzIHdpbGwgYWxtb3N0IGNlcnRhaW5seSB0cmlnZ2VyIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCBjYXVzaW5nIGEgY3Jhc2ggb3IgYSBzZWN1cml0eSBmYXVsdCFcblxuVGhpcyBpcyBhIHNlcmlvdXMgYnVnLCBhbmQgSSBuZWVkIHRvIHZlcmlmeSBpdC4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgcmVhZCB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA4NywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE1OjUzOjU0LjE3ODA2MzE4NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NTAzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9kY2FjaGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxOTA1LFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxOTA1OlxcdFxcdGludCBlcnI7XFxuMTkwNjpcXHRcXG4xOTA3OlxcdFxcdGRlbnRyeSA9IGttZW1fY2FjaGVfYWxsb2NfbHJ1KGRlbnRyeV9jYWNoZSwgXFx1MDAyNnNiLVxcdTAwM2VzX2RlbnRyeV9scnUsXFxuMTkwODpcXHRcXHRcXHRcXHRcXHQgICAgICBHRlBfS0VSTkVMKTtcXG4xOTA5OlxcdFxcdGlmICghZGVudHJ5KVxcbjE5MTA6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuMTkxMTpcXHRcXG4xOTEyOlxcdFxcdC8qXFxuMTkxMzpcXHRcXHQgKiBGdWxseSBpbml0aWFsaXplIHRoZSBpbmxpbmUgbmFtZSBidWZmZXIuICBjb3B5X25hbWUoKSBhbmRcXG4xOTE0OlxcdFxcdCAqIHN3YXBfbmFtZXMoKSBjb3B5IGRfc2hvcnRuYW1lIGluIGl0cyBlbnRpcmV0eSwgc28gYW55XFxuMTkxNTpcXHRcXHQgKiB1bmluaXRpYWxpemVkIHRhaWwgd291bGQgcHJvcGFnYXRlIHRvIHRoZSBvdGhlciBkZW50cnksIGFuZFxcbjE5MTY6XFx0XFx0ICogX19kX2xvb2t1cF9yY3UoKSBtYXkgdHJhbnNpZW50bHkgcmVhZCBhbnkgYnl0ZSBvZiB0aGUgaW5saW5lXFxuMTkxNzpcXHRcXHQgKiBuYW1lIHdoaWxlIHJlbmFtZSgpIHJld3JpdGVzIGl0IGluIHBsYWNlLlxcbjE5MTg6XFx0XFx0ICpcXG4xOTE5OlxcdFxcdCAqIFRoaXMgYWxzbyBrZWVwcyB0aGUgaW5saW5lIG5hbWUgTlVMLXRlcm1pbmF0ZWQ6IHRoZSBuYW1lXFxuMTkyMDpcXHRcXHQgKiBzd2l0Y2hpbmcgaW4gcmVuYW1lIHdpbGwgc3RpbGwgYWx3YXlzIGhhdmUgYSBOVUwgYXQgdGhlIGVuZCxcXG4xOTIxOlxcdFxcdCAqIGV2ZW4gaWYgd2UgbWlnaHQgYmUgb3ZlcndyaXRpbmcgYW4gaW50ZXJuYWwgTlVMIGNoYXJhY3Rlci5cXG4xOTIyOlxcdFxcdCAqL1xcbjE5MjM6XFx0XFx0bWVtY3B5KGRlbnRyeS1cXHUwMDNlZF9zaG9ydG5hbWUuc3RyaW5nLCAwLCBETkFNRV9JTkxJTkVfTEVOKTtcXG4xOTI0OlxcdFxcdGlmICh1bmxpa2VseSghbmFtZSkpIHtcXG4xOTI1OlxcdFxcdFxcdG5hbWUgPSBcXHUwMDI2c2xhc2hfbmFtZTtcXG4xOTI2OlxcdFxcdFxcdGRuYW1lID0gZGVudHJ5LVxcdTAwM2VkX3Nob3J0bmFtZS5zdHJpbmc7XFxuMTkyNzpcXHRcXHR9IGVsc2UgaWYgKG5hbWUtXFx1MDAzZWxlbiBcXHUwMDNlIEROQU1FX0lOTElORV9MRU4tMSkge1xcbjE5Mjg6XFx0XFx0XFx0c3RydWN0IGV4dGVybmFsX25hbWUgKnA7XFxuMTkyOTpcXHRcXG4xOTMwOlxcdFxcdFxcdHAgPSBrbWFsbG9jX2ZsZXgoKnAsIG5hbWUsIG5hbWUtXFx1MDAzZWxlbiArIDEsXFxuMTkzMTpcXHRcXHRcXHRcXHRcXHQgR0ZQX0tFUk5FTF9BQ0NPVU5UIHwgX19HRlBfUkVDTEFJTUFCTEUpO1xcbjE5MzI6XFx0XFx0XFx0aWYgKCFwKSB7XFxuMTkzMzpcXHRcXHRcXHRcXHRrbWVtX2NhY2hlX2ZyZWUoZGVudHJ5X2NhY2hlLCBkZW50cnkpOyBcXG4xOTM0OlxcdFxcdFxcdFxcdHJldHVybiBOVUxMO1xcbjE5MzU6XFx0XFx0XFx0fVxcbjE5MzY6XFx0XFx0XFx0YXRvbWljX3NldChcXHUwMDI2cC1cXHUwMDNlY291bnQsIDEpO1xcbjE5Mzc6XFx0XFx0XFx0ZG5hbWUgPSBwLVxcdTAwM2VuYW1lO1xcbjE5Mzg6XFx0XFx0fSBlbHNlICB7XFxuMTkzOTpcXHRcXHRcXHRkbmFtZSA9IGRlbnRyeS1cXHUwMDNlZF9zaG9ydG5hbWUuc3RyaW5nO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxNTo1Mzo1NC4xNzgyNDIyNTZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMTMyOTM5NjQzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBGdXp6aW5nIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBoZXJlJ3Mgd2hhdCBJJ20gdGhpbmtpbmcuIFRoYXQgYG1lbWNweWAgY2FsbCBpbiBgX19kX2FsbG9jYCwgc3BlY2lmaWNhbGx5IHRoZSBwYXJ0IHdoZXJlIGl0IHplcm9lcyBvdXQgYGRlbnRyeS1cdTAwM2VkX3Nob3J0bmFtZS5zdHJpbmdgLCB0aGF0J3MgY2FsbGVkIGR1cmluZyBldmVyeSBzaW5nbGUgZGVudHJ5IGFsbG9jYXRpb24uIEkgaW1tZWRpYXRlbHkgcmVhbGl6ZWQsIHRoaXMgaXMgYWN0dWFsbHkgcmVhY2hhYmxlIGNvZGUsIGFuZCBpdCdzIGNvcmUgVkZTL2RjYWNoZSBzdHVmZiEgRXZlcnkgZGVudHJ5IGFsbG9jYXRpb24gaW4gdGhlIGtlcm5lbCBnb2VzIHRocm91Z2ggYF9fZF9hbGxvY2AsIHNvIHRoaXMgaXMgZGVmaW5pdGVseSBhIGhvdCBwYXRoLlxuXG5Ob3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBpcyB0aGlzIHdvcnRoIGZ1enppbmc/IFRoZSBndWlkZWxpbmVzIGFyZSBwcmV0dHkgY2xlYXIuIEknbSBsb29raW5nIGF0IFwiQ29yZSBTdWJzeXN0ZW1zXCIg4oCTIHRoaXMgZmFsbHMgc3F1YXJlbHkgaW50byBWRlMsIGFuZCBwb3RlbnRpYWxseSBtZW1vcnkgbWFuYWdlbWVudCBkZXBlbmRpbmcgb24gaG93IGl0J3MgaGFuZGxlZCBhdCBhIGxvd2VyIGxldmVsLiBNeSBuZXh0IHRob3VnaHQgaXMgXCJyZWZhY3RvcmluZy5cIiBBbSBJIGNoYW5naW5nIHRoZSBzdHJ1Y3R1cmUgb3IgZmxvdyBvZiB0aGUgY29kZT8gVGhhdCBpcyBub3QgdGhlIGNhc2UuIFRoZSBuZXh0IGNvbnNpZGVyYXRpb24gaXMgdGhlIFwicnVudGltZSBhc3NlcnRpb25zXCIsIGFuZCB3aGV0aGVyIHRoZXkgYXJlIGJlaW5nIGludHJvZHVjZWQgb3IgY2hhbmdlZC4gVGhhdCBpcyBhbHNvIG5vdCB0aGUgY2FzZS5cblxuTm93LCBJIG5lZWQgdG8gY29uc2lkZXIgRm9jdXNTeW1ib2xzLiBUaGUgZ3VpZGVsaW5lcyBhcmUgYWRhbWFudCBhYm91dCAqYXZvaWRpbmcqIHViaXF1aXRvdXMgbGlmZWN5Y2xlIGZ1bmN0aW9ucyBsaWtlIGFsbG9jYXRvcnMuIEhtbW0uLi4gaXMgYF9fZF9hbGxvY2AgdWJpcXVpdG91cz8gQWJzb2x1dGVseS4gSXQgaXMgY2FsbGVkIGJ5IHByZXR0eSBtdWNoIGV2ZXJ5dGhpbmcuIElmIEkgYWRkIGl0LCBpdCB3aWxsIGRpbHV0ZSB0aGUgZnV6emluZyBlZmZvcnQuXG5cbkkgbmVlZCB0byBmb2N1cyBvbiBzcGVjaWZpYyBmZWF0dXJlIGxvZ2ljIGFuZCBlbnRyeSBwb2ludHMuIEkgc2hvdWxkIGF2b2lkIHVzaW5nIGlubGluZSBmdW5jdGlvbnMuXG5cblRoZSBiZXN0IGFwcHJvYWNoIHNlZW1zIHRvIGJlIHRvIGV4YW1pbmUgY2FsbGVycyBvZiBgX19kX2FsbG9jYC4gSSB3aWxsIHVzZSBgZ3JlcGAgdG8gcXVpY2tseSBmaW5kIHdobyBpcyBjYWxsaW5nIGBfX2RfYWxsb2NgLiBUaGlzIGlzIHdoZXJlIEknbGwgZmluZCBteSBmdXp6aW5nIHRhcmdldHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2MzMsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxNTo1NDowNS41MDc2NDIwMloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjM0MTA2NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2RfYWxsb2NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZGNhY2hlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZGNhY2hlLmM9MTg4OT1FWFBPUlRfU1lNQk9MKGRfaW52YWxpZGF0ZSk7XFxuLS1cXG5mcy9kY2FjaGUuYy0xODkxLS8qKlxcbmZzL2RjYWNoZS5jOjE4OTI6ICogX19kX2FsbG9jIC0gYWxsb2NhdGUgYSBkY2FjaGUgZW50cnlcXG5mcy9kY2FjaGUuYy0xODkzLSAqIEBzYjogZmlsZXN5c3RlbSBpdCB3aWxsIGJlbG9uZyB0b1xcbi0tXFxuZnMvZGNhY2hlLmMtMTkwMC0gXFxuZnMvZGNhY2hlLmM6MTkwMTpzdGF0aWMgc3RydWN0IGRlbnRyeSAqX19kX2FsbG9jKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lKVxcbmZzL2RjYWNoZS5jLTE5MDIte1xcbi0tXFxuZnMvZGNhY2hlLmM9MTk4OT1zdHJ1Y3QgZGVudHJ5ICpkX2FsbG9jKHN0cnVjdCBkZW50cnkgKiBwYXJlbnQsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lKVxcbmZzL2RjYWNoZS5jLTE5OTAte1xcbmZzL2RjYWNoZS5jOjE5OTE6XFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gX19kX2FsbG9jKHBhcmVudC1cXHUwMDNlZF9zYiwgbmFtZSk7XFxuZnMvZGNhY2hlLmMtMTk5Mi1cXHRpZiAoIWRlbnRyeSlcXG4tLVxcbmZzL2RjYWNoZS5jPTIwMDc9c3RydWN0IGRlbnRyeSAqZF9hbGxvY19hbm9uKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuZnMvZGNhY2hlLmMtMjAwOC17XFxuZnMvZGNhY2hlLmM6MjAwOTpcXHRyZXR1cm4gX19kX2FsbG9jKHNiLCBOVUxMKTtcXG5mcy9kY2FjaGUuYy0yMDEwLX1cXG4tLVxcbmZzL2RjYWNoZS5jPTIwMzg9c3RydWN0IGRlbnRyeSAqZF9hbGxvY19wc2V1ZG8oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUpXFxuLS1cXG5mcy9kY2FjaGUuYy0yMDQyLVxcdH07XFxuZnMvZGNhY2hlLmM6MjA0MzpcXHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBfX2RfYWxsb2Moc2IsIG5hbWUpO1xcbmZzL2RjYWNoZS5jLTIwNDQtXFx0aWYgKGxpa2VseShkZW50cnkpKSB7XFxuLS1cXG5mcy9kY2FjaGUuYz0yNzY1PXN0cnVjdCBkZW50cnkgKmRfYWxsb2NfcGFyYWxsZWwoc3RydWN0IGRlbnRyeSAqcGFyZW50LFxcbi0tXFxuZnMvZGNhY2hlLmMtMjc3MC1cXHRzdHJ1Y3QgaGxpc3RfYmxfbm9kZSAqbm9kZTtcXG5mcy9kY2FjaGUuYzoyNzcxOlxcdHN0cnVjdCBkZW50cnkgKm5ldyA9IF9fZF9hbGxvYyhwYXJlbnQtXFx1MDAzZWRfc2IsIG5hbWUpO1xcbmZzL2RjYWNoZS5jLTI3NzItXFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxNTo1NDowNS41NzM5OTEwMzRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo3MjY2MTg3OTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IExpbmUgb2YgUmVhc29uaW5nKipcblxuT2theSwgaG9sZCBvbi4gVGhlIGluc3RydWN0aW9ucyBhcmUgcHJldHR5IGNsZWFyIGFib3V0IGF2b2lkaW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zLCBzbyBJIG5lZWQgdG8gdGhpbmsgY2FyZWZ1bGx5IGFib3V0IHdoZXJlIGBfX2RfYWxsb2NgIGZpdHMuIElzIGl0IHRydWx5IGEgdW5pdmVyc2FsIGZ1bmN0aW9uLCBvciBpcyBpdCBzcGVjaWZpYyBlbm91Z2ggdG8gYmUgY29uc2lkZXJlZCBhIHRhcmdldD8gVGhlIGRvY3VtZW50YXRpb24gZXhwbGljaXRseSBzYXlzIHRvIGF2b2lkIGdlbmVyaWMgYWxsb2NhdG9ycyBhbmQgaG90LXBhdGhzLi4uIGJ1dCB3YWl0LCB0aGlzICppcyogdGhlIGZ1bmN0aW9uIHRoYXQncyBiZWVuIG1vZGlmaWVkISBJdCdzIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UuXG5cbkJ1dCB0aGUgcmVhbCBxdWVzdGlvbiBpcywgaXMgaXQgdWJpcXVpdG91cyAqaW4gdGhpcyBjb250ZXh0Kj8gYF9fZF9hbGxvY2AgYWxsb2NhdGVzIGRlbnRyaWVzLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGRjYWNoZS4gVGhhdCdzIG5vdCB0aGUgKmVudGlyZSogc3lzdGVtJ3MgbWVtb3J5IGFsbG9jYXRpb24sIHNvIHBlcmhhcHMgaXQncyBzcGVjaWZpYyBlbm91Z2guIEl0J3Mgbm90IGEgZ2VuZXJhbC1wdXJwb3NlIGFsbG9jYXRvciwgc3RyaWN0bHkgc3BlYWtpbmcuXG5cbk9rYXksIGlmIGBfX2RfYWxsb2NgIGlzIHdoZXJlIHRoZSBidWcgKmlzKiB0aGVuIEkgbmVlZCB0byBjb25zaWRlciAqd2hhdCogbWlnaHQgYmUgYWZmZWN0ZWQuIFRoZSBpbnN0cnVjdGlvbnMgYXJlIHRlbGxpbmcgbWUgdG8gZm9jdXMgb24gZmVhdHVyZS1zcGVjaWZpYyBsb2dpYywgcmlnaHQ/IFRoZSBjb21tZW50cyBpbiB0aGUgY29kZSBhcmUgcG9pbnRpbmcgbWUgdG93YXJkIHBvdGVudGlhbCByZWxhdGVkIGZ1bmN0aW9ucy4gSXQgbWVudGlvbnMgYGNvcHlfbmFtZSgpYCwgYHN3YXBfbmFtZXMoKWAsIGFuZCBgX19kX2xvb2t1cF9yY3UoKWAuIFRoZSBjb21tZW50IGluIHRoZSBjb2RlIHN1Z2dlc3RzIHRoYXQgdGhlc2UgZnVuY3Rpb25zIGNvdWxkIHBvdGVudGlhbGx5IGV4cG9zZSB1bmluaXRpYWxpemVkIGRhdGEgaWYgdGhlIGRfc2hvcnRuYW1lIGlzIG1hbmlwdWxhdGVkLiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhlbSEgVGhleSdyZSBsaWtlbHkga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBkZW50cnkgbmFtZSBpcyBoYW5kbGVkIGFuZCBpZiB0aGUgbWVudGlvbmVkIGZ1bmN0aW9uIGNvcGllcyBvciBtb3ZlcyB0aGUgZGVudHJpZXMuIFRoaXMgc2VlbXMgZmFyIG1vcmUgcmVsZXZhbnQgdGhhbiB3b3JyeWluZyBhYm91dCB3aGV0aGVyIGBfX2RfYWxsb2NgIGlzIGEgZ2VuZXJpYyBgbWFsbG9jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjExNCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxNTo1NDoxMi44NDAxODE1MjZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTMyMjE0OTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29weV9uYW1lfHN3YXBfbmFtZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZGNhY2hlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZGNhY2hlLmM9MTkwMT1zdGF0aWMgc3RydWN0IGRlbnRyeSAqX19kX2FsbG9jKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lKVxcbi0tXFxuZnMvZGNhY2hlLmMtMTkxMi1cXHQvKlxcbmZzL2RjYWNoZS5jOjE5MTM6XFx0ICogRnVsbHkgaW5pdGlhbGl6ZSB0aGUgaW5saW5lIG5hbWUgYnVmZmVyLiAgY29weV9uYW1lKCkgYW5kXFxuZnMvZGNhY2hlLmM6MTkxNDpcXHQgKiBzd2FwX25hbWVzKCkgY29weSBkX3Nob3J0bmFtZSBpbiBpdHMgZW50aXJldHksIHNvIGFueVxcbmZzL2RjYWNoZS5jLTE5MTUtXFx0ICogdW5pbml0aWFsaXplZCB0YWlsIHdvdWxkIHByb3BhZ2F0ZSB0byB0aGUgb3RoZXIgZGVudHJ5LCBhbmRcXG4tLVxcbmZzL2RjYWNoZS5jPTI5OTI9RVhQT1JUX1NZTUJPTChkX21ha2VfcGVyc2lzdGVudCk7XFxuZnMvZGNhY2hlLmMtMjk5My1cXG5mcy9kY2FjaGUuYzoyOTk0OnN0YXRpYyB2b2lkIHN3YXBfbmFtZXMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZGVudHJ5ICp0YXJnZXQpXFxuZnMvZGNhY2hlLmMtMjk5NS17XFxuLS1cXG5mcy9kY2FjaGUuYy0zMDMxLVxcbmZzL2RjYWNoZS5jOjMwMzI6c3RhdGljIHZvaWQgY29weV9uYW1lKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGRlbnRyeSAqdGFyZ2V0KVxcbmZzL2RjYWNoZS5jLTMwMzMte1xcbi0tXFxuZnMvZGNhY2hlLmM9MzA2MD1zdGF0aWMgdm9pZCBfX2RfbW92ZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBkZW50cnkgKnRhcmdldCxcXG4tLVxcbmZzL2RjYWNoZS5jLTMxMDgtXFx0aWYgKCFleGNoYW5nZSkge1xcbmZzL2RjYWNoZS5jOjMxMDk6XFx0XFx0Y29weV9uYW1lKGRlbnRyeSwgdGFyZ2V0KTtcXG5mcy9kY2FjaGUuYy0zMTEwLVxcdFxcdHRhcmdldC1cXHUwMDNlZF9oYXNoLnBwcmV2ID0gTlVMTDtcXG4tLVxcbmZzL2RjYWNoZS5jLTMxMTUtXFx0XFx0dGFyZ2V0LVxcdTAwM2VkX3BhcmVudCA9IG9sZF9wYXJlbnQ7XFxuZnMvZGNhY2hlLmM6MzExNjpcXHRcXHRzd2FwX25hbWVzKGRlbnRyeSwgdGFyZ2V0KTtcXG5mcy9kY2FjaGUuYy0zMTE3LVxcdFxcdGlmICghaGxpc3RfdW5oYXNoZWQoXFx1MDAyNnRhcmdldC1cXHUwMDNlZF9zaWIpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxNTo1NDoxMi44OTM0MTQ0NDdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMDE2MDM0ODIyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBhIFBvdGVudGlhbCBLZXJuZWwgQnVnKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgc29tZW9uZSdzIGRpcmVjdGx5IG1vZGlmaWVkIGBfX2RfYWxsb2NgLiAgSG1tLCBpcyBgX19kX2FsbG9jYCBzdGF0aWM/IFllcywgaXQncyBzdGF0aWMuIEFuZCBub3QgaW5saW5lZC4gVGhhdCdzIGEgZ29vZCBzdGFydC4gSSBuZWVkIHRvIGJlIHN1cmU7IGxldCdzIGNoZWNrIHRoZSBjYWxsZXJzIGxpa2UgYGRfYWxsb2NgLCBgZF9hbGxvY19hbm9uYCwgZXRjLiBBaCwgY29uZmlybWVkOiBgZnMvZGNhY2hlLmNgLCBhIHN0YXRpYyBmdW5jdGlvbiwgbm8gYGlubGluZWAga2V5d29yZC4gVGhpcyBmdW5jdGlvbiBpc24ndCBtYXJrZWQgZm9yIGluY2x1c2lvbiBpbiBGb2N1c1N5bWJvbHMsIGJ1dCBpcyBpdCBhIGdvb2QgY2FuZGlkYXRlLCBnaXZlbiB0aGUgaW5zdHJ1Y3Rpb25zPyBUaGUgaW5zdHJ1Y3Rpb25zIHNheSB0byBhdm9pZCB1YmlxdWl0b3VzIGZ1bmN0aW9ucywgYnV0IHRoaXMgZnVuY3Rpb24gaXMgVkZTLCBhbmQgaXMgdGhlIGltcGxlbWVudGF0aW9uIGZvciBgZGVudHJ5YCBhbGxvY2F0aW9uLiBMZXQncyBzZWUgd2hhdCB0aGUgcGF0Y2ggaXMgKmFjdHVhbGx5KiBkb2luZy5cblxuQWxyaWdodCwgdGhlIGRpZmYgcmV2ZWFscyB0aGUgaXNzdWU6IGBtZW1jcHkoZGVudHJ5LVx1MDAzZWRfc2hvcnRuYW1lLnN0cmluZywgMCwgRE5BTUVfSU5MSU5FX0xFTik7YC4gV2FpdCBhIHNlY29uZOKApiB0aGF0J3MgY29weWluZyAqZnJvbSogYWRkcmVzcyAwISBJbiBDLCB3aXRoIGBtZW1jcHkoZGVzdCwgc3JjLCBuKWAgLSB0aGV5J3JlIHBhc3NpbmcgYSBOVUxMIHBvaW50ZXIgYXMgdGhlIGBzcmNgLiBUaGF0J3MgYSBndWFyYW50ZWVkIGNyYXNoISBFdmVuIGlmIGl0IHdhcyBpbnRlbmRlZCB0byBiZSBgbWVtc2V0YCwgdGhlIHVzZSBvZiBgbWVtY3B5YCBmcm9tIGFkZHJlc3MgemVybyBpcyBhIHByb2JsZW0uIFRoaXMgbW9kaWZpZXMgYF9fZF9hbGxvY2AsIHdoaWNoIGlzIGluIGBmcy9kY2FjaGUuY2AuIFRoaXMgbWVhbnMgdGhhdCAqYW55KiBkZW50cnkgYWxsb2NhdGlvbiAtIHBhdGggbG9va3VwcywgZmlsZSBjcmVhdGlvbiwgYW55dGhpbmcgdXNpbmcgdGhlIGRjYWNoZSAtIHdpbGwgY2FsbCB0aGlzIGFuZCBpbW1lZGlhdGVseSBjcmFzaCB0aGUga2VybmVsISBJdCdsbCBiZSBhIHNlZ2ZhdWx0IG9yIGEga2VybmVsIHBhbmljIGltbWVkaWF0ZWx5LiBFdmVuIGlmIHRoZSBjb21waWxlciBkaWQgc29tZXRoaW5nIHdvbmt5IGFuZCBkaWRuJ3QgY3Jhc2ggaW1tZWRpYXRlbHksIHRoaXMgd2lsbCBiZSBmb3VuZCBieSBzeXprYWxsZXIgaW5zdGFudGx5LlxuXG5Ob3csIGlzIHRoaXMgd29ydGggZnV6emluZz8gIExldCdzIGNoZWNrIHRoZSBjb3JlIHRyaWFnZSBwaGlsb3NvcGh5LiBUaGUgcGF0Y2ggaGFzIHRoZSBwb3RlbnRpYWwgdG8gaW50cm9kdWNlIGEgKmNyYXNoKiwgaW4gY29kZSB0aGF0IGlzICphYnNvbHV0ZWx5IHJlYWNoYWJsZSogaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gVGhlIFZGUyBpcyBjb25zaWRlcmVkIGNvcmUsIHdoaWNoIG1ha2VzIGl0IGFuIGV4Y2VsbGVudCBjYW5kaWRhdGUuXG5cbmBmcy9kY2FjaGUuY2AgaXMgbm90IGd1YXJkZWQgYnkgYSBjb25maWcsIHRoZXJlZm9yZSBgV29ydGhGdXp6aW5nID0gdHJ1ZWAuIE5vdywgd2hhdCBhYm91dCBFbmFibGVDb25maWdzPyBMZXQncyBjaGVjayBgZnMvTWFrZWZpbGVgIHVzaW5nIGBncmVwcGVyYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzMxOCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTU6NTQ6MjMuMDUzNzY2MTUyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MDIxMTEwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkY2FjaGVcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL01ha2VmaWxlPTEwPW9iai15IDo9XFx0b3Blbi5vIHJlYWRfd3JpdGUubyBmaWxlX3RhYmxlLm8gc3VwZXIubyBcXFxcXFxuZnMvTWFrZWZpbGUtMTEtXFx0XFx0Y2hhcl9kZXYubyBzdGF0Lm8gZXhlYy5vIHBpcGUubyBuYW1laS5vIGZjbnRsLm8gXFxcXFxcbmZzL01ha2VmaWxlOjEyOlxcdFxcdGlvY3RsLm8gcmVhZGRpci5vIHNlbGVjdC5vIGRjYWNoZS5vIGlub2RlLm8gXFxcXFxcbmZzL01ha2VmaWxlLTEzLVxcdFxcdGF0dHIubyBiYWRfaW5vZGUubyBmaWxlLm8gZmlsZXN5c3RlbXMubyBuYW1lc3BhY2UubyBcXFxcXFxuLS1cXG5mcy9vY2ZzMi9NYWtlZmlsZT0xMT1vY2ZzMi1vYmpzIDo9IFxcXFxcXG4tLVxcbmZzL29jZnMyL01ha2VmaWxlLTE1LVxcdGJ1ZmZlcl9oZWFkX2lvLm9cXHRcXFxcXFxuZnMvb2NmczIvTWFrZWZpbGU6MTY6XFx0ZGNhY2hlLm8gXFx0XFx0XFxcXFxcbmZzL29jZnMyL01ha2VmaWxlLTE3LVxcdGRpci5vIFxcdFxcdFxcdFxcXFxcXG4tLVxcbmZzL29yYW5nZWZzL01ha2VmaWxlPTg9b3JhbmdlZnMtb2JqcyA6PSBhY2wubyBmaWxlLm8gb3JhbmdlZnMtY2FjaGUubyBvcmFuZ2Vmcy11dGlscy5vIHhhdHRyLm8gXFxcXFxcbmZzL29yYW5nZWZzL01ha2VmaWxlOjk6XFx0XFx0IGRjYWNoZS5vIGlub2RlLm8gb3JhbmdlZnMtc3lzZnMubyBvcmFuZ2Vmcy1tb2QubyBzdXBlci5vIFxcXFxcXG5mcy9vcmFuZ2Vmcy9NYWtlZmlsZS0xMC1cXHRcXHQgZGV2b3JhbmdlZnMtcmVxLm8gbmFtZWkubyBzeW1saW5rLm8gZGlyLm8gb3JhbmdlZnMtYnVmbWFwLm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxNTo1NDoyMy4xNDM5ODQ2NTlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTM2ODU2OTk3NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gdGhlIFJpZ2h0IFN5bWJvbHMqKlxuXG5Pa2F5LCBzbyBgZGNhY2hlLm9gIGlzIGFsd2F5cyBjb21waWxlZCwgcGFydCBvZiB0aGUgY29yZSBWRlMsIHNvIG5vIHNwZWNpYWwgY29uZmlndXJhdGlvbiBmbGFncyBhcmUgbmVlZGVkIGhlcmUuIFRoYXQgcGFydCBpcyBzdHJhaWdodGZvcndhcmQuIE5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXMgYWJvdXQgYEZvY3VzU3ltYm9sc2AuIExldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS5cblxuVGhlIHJ1bGVzIHNheSB0byBhdm9pZCB1YmlxdWl0b3VzIGZ1bmN0aW9ucywgdGhlIG9uZXMgY2FsbGVkIGV2ZXJ5d2hlcmUg4oCTIHRoaW5ncyBsaWtlIG1lbW9yeSBhbGxvY2F0b3JzLCBwYWdlIGZhdWx0IGhhbmRsZXJzLCBldGMuIFdlIG5lZWQgdG8gdGFyZ2V0IHNwZWNpZmljIGZlYXR1cmUgbG9naWMgb3IgZW50cnkgcG9pbnRzLiBUaGUgbW9kaWZpZWQgZnVuY3Rpb24gaXMgYF9fZF9hbGxvY2Agd2l0aGluIGBmcy9kY2FjaGUuY2AuXG5cbldhaXQsIGlzIGBfX2RfYWxsb2NgIHViaXF1aXRvdXM/IElzIGl0IGEgZ2VuZXJpYyBtZW1vcnkgYWxsb2NhdG9yIGxpa2UgYGttYWxsb2NgPyBObywgaXQncyBzcGVjaWZpYyB0byB0aGUgZGVudHJ5IGNhY2hlLiBJcyBpdCBjYWxsZWQgYnkgKmV2ZXJ5KiBwcm9ncmFtPyBFdmVyeSBwcm9ncmFtIG9wZW5pbmcgYSBmaWxlIG9yIGNyZWF0aW5nIGEgcGF0aCAqbWlnaHQqIGNhbGwgaXQsIGJ1dCBub3QgKmV2ZXJ5KiBwcm9ncmFtLCB1bmxpa2UgYGttYWxsb2NgLCB3aGljaCAqaXMqIHViaXF1aXRvdXMuXG5cblRoZSBwYXRjaCBpdHNlbGYgZGVhbHMgd2l0aCBpbml0aWFsaXppbmcgdGhlIGlubGluZSBuYW1lIGJ1ZmZlciB1c2VkIGJ5IGBjb3B5X25hbWVgIGFuZCBgc3dhcF9uYW1lc2AgZHVyaW5nIGByZW5hbWVgLiBUaGUgcGF0Y2ggYXV0aG9yIGlzIG1vZGlmeWluZyBgX19kX2FsbG9jYC4gVGhlIGNoYW5nZSBpcyBpbiBgX19kX2FsbG9jYC4gQ2FuIHdlIGxpc3QgYF9fZF9hbGxvY2AgaW4gYEZvY3VzU3ltYm9sc2A/XG5cbmBfX2RfYWxsb2NgIGlzIHN0YXRpYywgd2hpY2ggbWVhbnMgaXQgYXBwZWFycyBpbiBga2FsbHN5bXNgIHVubGVzcyBpbmxpbmVkLiBJdCdzIG5vdCBtYXJrZWQgaW5saW5lLCBhbmQgaXQncyA4MCBsaW5lcyBsb25nIGFuZCBjYWxsZWQgZnJvbSBmb3VyIHBsYWNlcywgc28gdGhlIGNvbXBpbGVyIHdpbGwga2VlcCBpdCBhcyBhbiBvdXQtb2YtbGluZSBmdW5jdGlvbi5cblxuU28sIHRoZSBydWxlIGlzIHRvIGxpc3QgdGhlIGV4YWN0IGZ1bmN0aW9uIGltcGxlbWVudGluZyB0aGUgY2hhbmdlZCBsb2dpYywgcmlnaHQ/IGBfX2RfYWxsb2NgIGlzICp0aGUqIGZ1bmN0aW9uIHdoZXJlIHRoZSBjb2RlIHdhcyBjaGFuZ2VkLlxuXG5XaGF0IGFib3V0IGBjb3B5X25hbWVgIGFuZCBgc3dhcF9uYW1lc2A/IFRoZXkncmUgcmVsYXRlZCwgYnV0ICpub3QqIG1vZGlmaWVkIGJ5IHRoaXMgcGF0Y2ggZGlyZWN0bHkuIGBkX2FsbG9jYD8gTGV0J3MgY2hlY2sgd2hlcmUgdGhhdCBpcyB1c2VkLiBJZiBgX19kX2FsbG9jYCBpcyAqdGhlKiBmdW5jdGlvbiwgYW5kIHdlIGRvbid0IGluY2x1ZGUgaXQsIHdoYXQgKndvdWxkKiB3ZSBpbmNsdWRlPyBgX19kX2FsbG9jYCBpcyB0aGUgKmV4YWN0KiBwbGFjZSB3aGVyZSB0aGUgYnVnIGlzIGJlaW5nIGZpeGVkLlxuXG5UaGUgaW5zdHJ1Y3Rpb24gd2FybnMgYWdhaW5zdCBsaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGJlY2F1c2UgaXQgZGlsdXRlcyB0aGUgZnV6emluZyBlZmZvcnQuIEJ1dCBpcyBgX19kX2FsbG9jYCB1YmlxdWl0b3VzIGluIHRoZSBzYW1lIHNlbnNlIGFzIGBrbWFsbG9jYD8gTm8hIENoYW5naW5nIGBrbWFsbG9jYCBjb3VsZCBtYWtlICpldmVyeSogc3l6a2FsbGVyIHByb2dyYW0gbWF0Y2guIGBfX2RfYWxsb2NgIGlzIHNwZWNpZmljIHRvIHRoZSBkY2FjaGUgVkZTLlxuXG5TbywgdGhlIGtleSBpcyB0aGlzOiAqVGhpcyBwYXRjaCBtb2RpZmllcyBgX19kX2FsbG9jYC4qIFRoYXQncyB3aGF0IHRoZSBmdXp6aW5nIHNob3VsZCBmb2N1cyBvbi4gVGhlIFwic3BlY2lmaWMgZmVhdHVyZSBsb2dpY1wiIGJlaW5nIGFsdGVyZWQgaXMgdGhlIGluaXRpYWxpemF0aW9uIG9mIGBkX3Nob3J0bmFtZWAgaW4gYF9fZF9hbGxvY2AuIGBfX2RfYWxsb2NgIHNwZWNpZmljYWxseSBpbXBsZW1lbnRzIHRoZSBhbHRlcmVkIGxvZ2ljLlxuXG5TbywgaXMgaXQgc2FmZSB0byBsaXN0IGBfX2RfYWxsb2NgPyBZZXMhIEl0IGlzIHRoZSBleGFjdCBmdW5jdGlvbi4gSXQgaGFzIGZvdXIgY2FsbCBzaXRlcyBhbmQgaXMgYmVpbmcgYWx0ZXJlZCFcblxuXG4iLCJJbnB1dFRva2VucyI6OTQ0NSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0NDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTU6NTQ6MzYuODI5Njg3Mjk3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjA4MzI5NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRnVsbHkgaW5pdGlhbGl6ZSB0aGUgaW5saW5lIG5hbWUgYnVmZmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2RjYWNoZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2RjYWNoZS5jPTE5MDE9c3RhdGljIHN0cnVjdCBkZW50cnkgKl9fZF9hbGxvYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSlcXG4tLVxcbmZzL2RjYWNoZS5jLTE5MTItXFx0LypcXG5mcy9kY2FjaGUuYzoxOTEzOlxcdCAqIEZ1bGx5IGluaXRpYWxpemUgdGhlIGlubGluZSBuYW1lIGJ1ZmZlci4gIGNvcHlfbmFtZSgpIGFuZFxcbmZzL2RjYWNoZS5jLTE5MTQtXFx0ICogc3dhcF9uYW1lcygpIGNvcHkgZF9zaG9ydG5hbWUgaW4gaXRzIGVudGlyZXR5LCBzbyBhbnlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTU6NTQ6MzcuMjkwNTI3NDE1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjcxODA4NTEzMjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUG90ZW50aWFsbHkgQ3JpdGljYWwgS2VybmVsIEJ1ZyoqXG5cbk9rYXksIGhlcmUncyB0aGUgc2l0dWF0aW9uLiBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCwgaW5zdGFudGx5LCBhIHJlZCBmbGFnIHBvcHMgdXAuIEluIHRoZSBvcmlnaW5hbCwgZXN0YWJsaXNoZWQgTGludXgga2VybmVsIGNvZGUg4oCTIGxldCdzIGFzc3VtZSBpdCdzIHNvbWV0aGluZyBsaWtlIHdoYXQgRXJpYyBCaWdnZXJzLCBMaW51cywgb3IgQWwgVmlybyB3b3VsZCd2ZSBhdXRob3JlZCDigJMgd2UgaGF2ZTogYG1lbXNldChkZW50cnktXHUwMDNlZF9zaG9ydG5hbWUuc3RyaW5nLCAwLCBETkFNRV9JTkxJTkVfTEVOKTtgLiBUaGF0J3Mgc3RhbmRhcmQgcHJhY3RpY2UsIGluaXRpYWxpemluZyBtZW1vcnkuIEJ1dCBpbiAqdGhpcyogcGF0Y2g/IFN1ZGRlbmx5LCBpdCdzIGBtZW1jcHkoZGVudHJ5LVx1MDAzZWRfc2hvcnRuYW1lLnN0cmluZywgMCwgRE5BTUVfSU5MSU5FX0xFTik7YC4gVGhhdCdzIGEgZGVsaWJlcmF0ZSBpbmplY3Rpb24gb2YgYSBidWcsIG9yIGFuIGluY3JlZGlibHkgY2FyZWxlc3MgbWlzdGFrZS5cblxuU3BlY2lmaWNhbGx5LCB0aGUgc291cmNlIGluIHRoYXQgYG1lbWNweWAgaXMgKnplcm8qLCBlZmZlY3RpdmVseSBgbWVtY3B5KC4uLiwgMCwgLi4uKWAgd2hpY2ggd2lsbCBhdHRlbXB0IHRvIGRlcmVmZXJlbmNlIGEgbnVsbCBwb2ludGVyISBUaGUgaW50ZW50aW9uIHdhcyBjbGVhcmx5IHRvIHplcm8gdGhlIG1lbW9yeSwgYnV0IHRoZSBgbWVtY3B5YCB3aXRoIGEgTlVMTCBzb3VyY2UgbWVhbnMgdGhpcyBpcyBnb2luZyB0byBiZSBhIGd1YXJhbnRlZWQgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlLCBhcyBzb29uIGFzIHRoYXQgY29kZSBpcyBleGVjdXRlZC4gQ2xhc3NpYywgb2xkLXNjaG9vbCBidWcgaW50cm9kdWNlZCBpbiBhIHBhdGNoIHJldmlldyB0ZXN0LCBJJ2Qgc2F5LlxuXG5Ob3csIHdlIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgaXMgZXhwbG9pdGFibGUuIElzIGBfX2RfYWxsb2NgIHJlYWNoYWJsZT8gQWJzb2x1dGVseS4gYGRfYWxsb2NgIGFuZCBgZF9hbGxvY19wYXJhbGxlbGAsIHdoaWNoIGFyZSBjYWxsZWQgYnkgYW55IFZGUyBsb29rdXAgb3IgY3JlYXRpb24gb3BlcmF0aW9uLCBldmVudHVhbGx5IGNhbGwgYF9fZF9hbGxvY2AuIFRoaXMgaXMgY29yZSBWRlMgY29kZS4gQW55IGZpbGVzeXN0ZW0gdHJhdmVyc2FsLCByb290IG1vdW50LCBvciBhY2Nlc3MgdHJpZ2dlcnMgYF9fZF9hbGxvY2AuIEZ1enppbmcgd2lsbCBoaXQgdGhpcyBpbW1lZGlhdGVseS5cblxuTmV4dCwgdGhlIGZvY3VzIHN5bWJvbHMuIGBfX2RfYWxsb2NgIGlzIHRoZSBmdW5jdGlvbiAqY29udGFpbmluZyogdGhlIG1vZGlmaWVkIGNvZGUuIGBkX2FsbG9jYCBpdHNlbGYgaXMgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIGRlbnRyeSBhbGxvY2F0aW9uLiBJIHNlZSBib3RoIGFyZSBleGNlbGxlbnQgY2hvaWNlcy4gSSBtZWFuLCB0aGUgY3JpdGVyaWEgc3BlY2lmaWVzIHRoZSBcIm1haW4gZW50cnlwb2ludHNcIiwgc28uLi4gd2h5IG5vdCBpbmNsdWRlIGJvdGg/IExldCdzIGNoZWNrOiBcIkxpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cyBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cIiBTbywgYm90aCBgX19kX2FsbG9jYCBhbmQgYGRfYWxsb2NgIGFyZSByZWxldmFudCwgYnV0IHRoZSBidWcgYWN0dWFsbHkgb2NjdXJzIGluIGBfX2RfYWxsb2NgLiBgX19kX2FsbG9jYCBpcyBwZXJmZWN0LiBUaGlzIGlzIHdoZXJlIHRoZSBjb2RlJ3MgbW9kaWZpZWQuIEkgY2FuIGluY2x1ZGUgYm90aCBgX19kX2FsbG9jYCBhbmQgYGRfYWxsb2NgLlxuXG5BbmQgd2hhdCBhYm91dCBgZF9hbGxvY19wYXJhbGxlbGAsIGBjb3B5X25hbWVgLCBhbmQgYHN3YXBfbmFtZXNgPyBOby4gVGhlIGJ1ZyBpcyBpbiBgX19kX2FsbG9jYCBzcGVjaWZpY2FsbHkuIElmIEkgaW5jbHVkZSBgX19kX2FsbG9jYCwgSSd2ZSBnb3QgdGhlIGV4YWN0IGZ1bmN0aW9uIHdoZXJlIHRoZSBhbHRlcmF0aW9uIGlzLiBBbmQsIHllcywgYF9fZF9hbGxvY2AgKmNhbiogYmUgaW5jbHVkZWQhIEl0J3MgcmlnaHQgdGhlcmUsIGBzdGF0aWMgc3RydWN0IGRlbnRyeSAqX19kX2FsbG9jKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lKWAuIFdpdGggR0NDL0NsYW5nIGFuZCBzdGFuZGFyZCBrZXJuZWwgYnVpbGQgZmxhZ3MsIGl0J3Mgbm9uLWlubGluZWQgYW5kIHN0YXRpYywgc28gaXQncyBhIHBlcmZlY3QgdGFyZ2V0LiBJbmNsdWRpbmcgYm90aCB3aWxsIGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlIGFuZCBpdHMgZW50cnkgcG9pbnQuXG5cbkZpbmFsbHksIGBFbmFibGVDb25maWdzYC4gRG9lcyBgX19kX2FsbG9jYCByZWx5IG9uIGFueSBub24tZGVmYXVsdCBjb25maWd1cmF0aW9ucz8gTm8gd2F5LiBWRlMgYW5kIGRjYWNoZSBhcmUgY29yZSwgYWx3YXlzIGNvbXBpbGVkIGluLiBTbywgdGhhdCdzIGVtcHR5OiBgW11gLlxuXG5UbyBzdW1tYXJpemUgdGhlIGxvZ2ljOiAxLiBUaGUgcGF0Y2ggbWVzc2VzIHVwIGBfX2RfYWxsb2MoKWAgaW4gYGZzL2RjYWNoZS5jYC4gQXR0ZW1wdHMgdG8gaW5pdGlhbGl6ZSBgZF9zaG9ydG5hbWVgLCBidXQgaW50cm9kdWNlcyBhIG1lbW9yeSBjb3B5IGZyb20gTlVMTCBpbnN0ZWFkIG9mIHplcm9pbmcgdGhlIGJ1ZmZlciwgbGVhZGluZyB0byBhbiBpbW1lZGlhdGUgTlVMTCBkZXJlZmVyZW5jZS4gMi4gYF9fZF9hbGxvYygpYCBpcyBhdCB0aGUgaGVhcnQgb2YgdGhlIFZGUyBzdWJzeXN0ZW0sIGV4ZWN1dGVkIGR1cmluZyBkZW50cnkgYWxsb2NhdGlvbiBmb3IgcGF0aCBsb29rdXAgYW5kIGNyZWF0aW9uLiBJdCdzIHVuY29uZGl0aW9uYWxseSBjb21waWxlZCBhbmQgZWFzaWx5IHJlYWNoZWQgaW4gdHlwaWNhbCBmdXp6aW5nIHNldHVwcy4gMy4gVmVyZGljdDogYFdvcnRoRnV6emluZyA9IHRydWVgLiA0LiBXZSBnbyB3aXRoIHRoZXNlIEZvY3VzU3ltYm9sczogYF9fZF9hbGxvY2AsIGBkX2FsbG9jYC4gQW5kIHdpdGggZW1wdHkgYEVuYWJsZUNvbmZpZ3M6IFtdYC5cblxuQWxyaWdodCwgSSdtIGNvbmZpZGVudC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNjY2LCJPdXRwdXRUb2tlbnMiOjEyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgzMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxNTo1NDo0NC40NzEzODE2NTlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjAwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fZF9hbGxvY1wiLFxuICAgIFwiZF9hbGxvY1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIF9fZF9hbGxvYygpIGluIGZzL2RjYWNoZS5jIHRvIGluaXRpYWxpemUgdGhlIGlubGluZSBuYW1lIGJ1ZmZlciAoZF9zaG9ydG5hbWUpLiBJbiBkb2luZyBzbywgaXQgZXJyb25lb3VzbHkgdXNlcyBtZW1jcHkoKSB3aXRoIGEgTlVMTCBwb2ludGVyICgwKSBhcyB0aGUgc291cmNlIGFkZHJlc3MgcmF0aGVyIHRoYW4gbWVtc2V0KCksIHdoaWNoIGNhdXNlcyBhIGtlcm5lbCBjcmFzaC9OVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgdXBvbiBkZW50cnkgYWxsb2NhdGlvbi4gVGhpcyBtb2RpZmllcyBjb3JlIFZGUyBsb2dpYyB0aGF0IGlzIGRpcmVjdGx5IGFuZCBlYXNpbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2RfYWxsb2NcIixcbiAgICBcImRfYWxsb2NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBfX2RfYWxsb2MoKSBpbiBmcy9kY2FjaGUuYyB0byBpbml0aWFsaXplIHRoZSBpbmxpbmUgbmFtZSBidWZmZXIgKGRfc2hvcnRuYW1lKS4gSW4gZG9pbmcgc28sIGl0IGVycm9uZW91c2x5IHVzZXMgbWVtY3B5KCkgd2l0aCBhIE5VTEwgcG9pbnRlciAoMCkgYXMgdGhlIHNvdXJjZSBhZGRyZXNzIHJhdGhlciB0aGFuIG1lbXNldCgpLCB3aGljaCBjYXVzZXMgYSBrZXJuZWwgY3Jhc2gvTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIHVwb24gZGVudHJ5IGFsbG9jYXRpb24uIFRoaXMgbW9kaWZpZXMgY29yZSBWRlMgbG9naWMgdGhhdCBpcyBkaXJlY3RseSBhbmQgZWFzaWx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE1OjU0OjQ0LjQ3MTQxODAwOVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODIyODM5NDcwOTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxNTo1NDo0NC40NzE5Nzc5MjlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo4MjI4MzM4MTU5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYF9fZF9hbGxvYygpYCBpbiBgZnMvZGNhY2hlLmNgLCBpbnRlbmRpbmcgdG8gZnVsbHkgaW5pdGlhbGl6ZSBgZGVudHJ5LVxcdTAwM2VkX3Nob3J0bmFtZS5zdHJpbmdgLiBIb3dldmVyLCBpdCBlcnJvbmVvdXNseSBjYWxscyBgbWVtY3B5KGRlbnRyeS1cXHUwMDNlZF9zaG9ydG5hbWUuc3RyaW5nLCAwLCBETkFNRV9JTkxJTkVfTEVOKWAgaW5zdGVhZCBvZiBgbWVtc2V0KClgLiBQYXNzaW5nIGAwYCAoTlVMTCkgYXMgdGhlIHNvdXJjZSBwb2ludGVyIHRvIGBtZW1jcHkoKWAgaW50cm9kdWNlcyBhbiBpbW1lZGlhdGUgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIHVwb24gZGVudHJ5IGFsbG9jYXRpb24uXFxuXFxuTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBhcmUgY2F1Z2h0IGltbWVkaWF0ZWx5IGJ5IHN0YW5kYXJkIGtlcm5lbCBwYWdlIGZhdWx0IGhhbmRsaW5nIGFuZCBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2Vyc3BhY2UuIEZ1cnRoZXJtb3JlLCBoYWQgdGhlIGNhbGwgY29ycmVjdGx5IGJlZW4gYG1lbXNldCgpYCwgaXQgd291bGQgaGF2ZSBpbml0aWFsaXplZCB0aGUgYnVmZmVyIHRvIHplcm9lcywgZWxpbWluYXRpbmcgdW5pbml0aWFsaXplZCBkYXRhIHJhdGhlciB0aGFuIGNyZWF0aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBUaGVyZWZvcmUsIHRoaXMgY2hhbmdlIGRvZXMgbm90IGp1c3RpZnkgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGJmMWVhNTJmZjAzMmRhNjA2MzRmNzYzY2VkZjU5ZTM4ZWE0MzM4MzlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCAxMyAxNTo1MzoyNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2RjYWNoZS5jIGIvZnMvZGNhY2hlLmNcbmluZGV4IDFiMWE4MWYxMGRhNjcuLjJkZTFiYzc2ZGM4ZTkgMTAwNjQ0XG4tLS0gYS9mcy9kY2FjaGUuY1xuKysrIGIvZnMvZGNhY2hlLmNcbkBAIC0xOTEwLDEyICsxOTEwLDE3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpfX2RfYWxsb2Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuIFx0Lypcbi1cdCAqIFdlIGd1YXJhbnRlZSB0aGF0IHRoZSBpbmxpbmUgbmFtZSBpcyBhbHdheXMgTlVMLXRlcm1pbmF0ZWQuXG4tXHQgKiBUaGlzIHdheSB0aGUgbWVtY3B5KCkgZG9uZSBieSB0aGUgbmFtZSBzd2l0Y2hpbmcgaW4gcmVuYW1lXG4tXHQgKiB3aWxsIHN0aWxsIGFsd2F5cyBoYXZlIGEgTlVMIGF0IHRoZSBlbmQsIGV2ZW4gaWYgd2UgbWlnaHRcbi1cdCAqIGJlIG92ZXJ3cml0aW5nIGFuIGludGVybmFsIE5VTCBjaGFyYWN0ZXJcbitcdCAqIEZ1bGx5IGluaXRpYWxpemUgdGhlIGlubGluZSBuYW1lIGJ1ZmZlci4gIGNvcHlfbmFtZSgpIGFuZFxuK1x0ICogc3dhcF9uYW1lcygpIGNvcHkgZF9zaG9ydG5hbWUgaW4gaXRzIGVudGlyZXR5LCBzbyBhbnlcbitcdCAqIHVuaW5pdGlhbGl6ZWQgdGFpbCB3b3VsZCBwcm9wYWdhdGUgdG8gdGhlIG90aGVyIGRlbnRyeSwgYW5kXG4rXHQgKiBfX2RfbG9va3VwX3JjdSgpIG1heSB0cmFuc2llbnRseSByZWFkIGFueSBieXRlIG9mIHRoZSBpbmxpbmVcbitcdCAqIG5hbWUgd2hpbGUgcmVuYW1lKCkgcmV3cml0ZXMgaXQgaW4gcGxhY2UuXG4rXHQgKlxuK1x0ICogVGhpcyBhbHNvIGtlZXBzIHRoZSBpbmxpbmUgbmFtZSBOVUwtdGVybWluYXRlZDogdGhlIG5hbWVcbitcdCAqIHN3aXRjaGluZyBpbiByZW5hbWUgd2lsbCBzdGlsbCBhbHdheXMgaGF2ZSBhIE5VTCBhdCB0aGUgZW5kLFxuK1x0ICogZXZlbiBpZiB3ZSBtaWdodCBiZSBvdmVyd3JpdGluZyBhbiBpbnRlcm5hbCBOVUwgY2hhcmFjdGVyLlxuIFx0ICovXG4tXHRkZW50cnktXHUwMDNlZF9zaG9ydG5hbWUuc3RyaW5nW0ROQU1FX0lOTElORV9MRU4tMV0gPSAwO1xuK1x0bWVtY3B5KGRlbnRyeS1cdTAwM2VkX3Nob3J0bmFtZS5zdHJpbmcsIDAsIEROQU1FX0lOTElORV9MRU4pO1xuIFx0aWYgKHVubGlrZWx5KCFuYW1lKSkge1xuIFx0XHRuYW1lID0gXHUwMDI2c2xhc2hfbmFtZTtcbiBcdFx0ZG5hbWUgPSBkZW50cnktXHUwMDNlZF9zaG9ydG5hbWUuc3RyaW5nO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTU6NTQ6NDQuNDcxOTc5NjA5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjEwNjYwNjgxNjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkluaXRpYWwgQ29uY2VybnMgUmVnYXJkaW5nIGEgUG90ZW50aWFsIEJ1ZyoqXG5cbk9rYXksIGxldCdzIHRha2UgYSBsb29rIGF0IHRoaXMgcGF0Y2guIEl0IGFwcGVhcnMgdG8gYmUgaW5pdGlhbGl6aW5nIHRoZSBpbmxpbmUgbmFtZSBidWZmZXIgaW4gYF9fZF9hbGxvY2AuIFRoZSBjb2RlIGFpbXMgdG8gZW5zdXJlIHRoaXMgYnVmZmVyIGlzIGZ1bGx5IGluaXRpYWxpemVkLCB3aGljaCBtYWtlcyBzZW5zZSBnaXZlbiB0aGUgcG90ZW50aWFsIGZvciBkYXRhIHByb3BhZ2F0aW9uIGR1cmluZyBuYW1lIHN3aXRjaGluZywgYW5kIHRoZSB0cmFuc2llbnQgcmVhZHMgZHVyaW5nIGByZW5hbWVgLiBCdXQgd2FpdCBhIG1pbnV0ZS4uLiBJIHNlZSBhIGBtZW1jcHlgIGhlcmUsIGFuZCBzb21ldGhpbmcgaXMgaW1tZWRpYXRlbHkgcmFpc2luZyBhIHJlZCBmbGFnLlxuXG5NeSBleHBlcnQgaW50dWl0aW9uIGtpY2tzIGluIGFuZCBzb21ldGhpbmcgZG9lc24ndCBmZWVsIHJpZ2h0IGFib3V0IHRoaXMuIEknbSBzZWVpbmcgYG1lbWNweShkZW50cnktXHUwMDNlZF9zaG9ydG5hbWUuc3RyaW5nLCAwLCBETkFNRV9JTkxJTkVfTEVOKTtgLiBUaGF0IGxvb2tzIHN1c3BpY2lvdXMuIGBtZW1jcHlgIHRha2VzIGEgZGVzdGluYXRpb24sIGEgc291cmNlLCBhbmQgYSBzaXplLiBUaGUgc291cmNlIHNob3VsZCBiZSBhIHZhbGlkIG1lbW9yeSBhZGRyZXNzIHRvIGNvcHkgKmZyb20qLiBCdXQgdGhlIHNlY29uZCBhcmd1bWVudCwgYDBgPyBUaGF0J3MuLi4gcG90ZW50aWFsbHkgTlVMTC4gSWYgYG1lbWNweWAgZGVyZWZlcmVuY2VzIGEgTlVMTCBwb2ludGVyLCB0aGF0J3MgZ29pbmcgdG8gY2F1c2UgYSBjcmFzaCwgcmlnaHQ/IE9yIGF0IHRoZSB2ZXJ5IGxlYXN0LCB1bmRlZmluZWQgYmVoYXZpb3IgdGhhdCdzIGFsbW9zdCBhcyBiYWQ/IEkgbmVlZCB0byB2ZXJpZnkgd2hhdCBpcyBnb2luZyBvbiBoZXJlLiBJIG5lZWQgdG8ga25vdyB3aHkgdGhpcyBpc24ndCBgbWVtc2V0YC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGBtZW1jcHlgIGlzIGFjdHVhbGx5ICp0cnlpbmcqIHRvIGRvLiBJIG5lZWQgdG8gZ28gYmFjayBhbmQgY2hlY2sgdGhlIGNvZGUsIHJpZ2h0IGFyb3VuZCBsaW5lIDE5MTAgaW4gYGZzL2RjYWNoZS5jYCBhbmQgZmlndXJlIG91dCB3aGF0IHRoZSBpbnRlbnQgaXMgYW5kLCBjcml0aWNhbGx5LCBpZiB0aGlzIGlzIGdvaW5nIHRvIGNhdXNlIGEgY3JpdGljYWwgc2VjdXJpdHkgZmF1bHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyOTksIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1ODEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxNTo1NDo1NS4xMzI2NjQzNDlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE5NjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2RjYWNoZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE5MDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE5MDA6XFx0IFxcbjE5MDE6XFx0c3RhdGljIHN0cnVjdCBkZW50cnkgKl9fZF9hbGxvYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSlcXG4xOTAyOlxcdHtcXG4xOTAzOlxcdFxcdHN0cnVjdCBkZW50cnkgKmRlbnRyeTtcXG4xOTA0OlxcdFxcdGNoYXIgKmRuYW1lO1xcbjE5MDU6XFx0XFx0aW50IGVycjtcXG4xOTA2OlxcdFxcbjE5MDc6XFx0XFx0ZGVudHJ5ID0ga21lbV9jYWNoZV9hbGxvY19scnUoZGVudHJ5X2NhY2hlLCBcXHUwMDI2c2ItXFx1MDAzZXNfZGVudHJ5X2xydSxcXG4xOTA4OlxcdFxcdFxcdFxcdFxcdCAgICAgIEdGUF9LRVJORUwpO1xcbjE5MDk6XFx0XFx0aWYgKCFkZW50cnkpXFxuMTkxMDpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4xOTExOlxcdFxcbjE5MTI6XFx0XFx0LypcXG4xOTEzOlxcdFxcdCAqIEZ1bGx5IGluaXRpYWxpemUgdGhlIGlubGluZSBuYW1lIGJ1ZmZlci4gIGNvcHlfbmFtZSgpIGFuZFxcbjE5MTQ6XFx0XFx0ICogc3dhcF9uYW1lcygpIGNvcHkgZF9zaG9ydG5hbWUgaW4gaXRzIGVudGlyZXR5LCBzbyBhbnlcXG4xOTE1OlxcdFxcdCAqIHVuaW5pdGlhbGl6ZWQgdGFpbCB3b3VsZCBwcm9wYWdhdGUgdG8gdGhlIG90aGVyIGRlbnRyeSwgYW5kXFxuMTkxNjpcXHRcXHQgKiBfX2RfbG9va3VwX3JjdSgpIG1heSB0cmFuc2llbnRseSByZWFkIGFueSBieXRlIG9mIHRoZSBpbmxpbmVcXG4xOTE3OlxcdFxcdCAqIG5hbWUgd2hpbGUgcmVuYW1lKCkgcmV3cml0ZXMgaXQgaW4gcGxhY2UuXFxuMTkxODpcXHRcXHQgKlxcbjE5MTk6XFx0XFx0ICogVGhpcyBhbHNvIGtlZXBzIHRoZSBpbmxpbmUgbmFtZSBOVUwtdGVybWluYXRlZDogdGhlIG5hbWVcXG4xOTIwOlxcdFxcdCAqIHN3aXRjaGluZyBpbiByZW5hbWUgd2lsbCBzdGlsbCBhbHdheXMgaGF2ZSBhIE5VTCBhdCB0aGUgZW5kLFxcbjE5MjE6XFx0XFx0ICogZXZlbiBpZiB3ZSBtaWdodCBiZSBvdmVyd3JpdGluZyBhbiBpbnRlcm5hbCBOVUwgY2hhcmFjdGVyLlxcbjE5MjI6XFx0XFx0ICovXFxuMTkyMzpcXHRcXHRtZW1jcHkoZGVudHJ5LVxcdTAwM2VkX3Nob3J0bmFtZS5zdHJpbmcsIDAsIEROQU1FX0lOTElORV9MRU4pO1xcbjE5MjQ6XFx0XFx0aWYgKHVubGlrZWx5KCFuYW1lKSkge1xcbjE5MjU6XFx0XFx0XFx0bmFtZSA9IFxcdTAwMjZzbGFzaF9uYW1lO1xcbjE5MjY6XFx0XFx0XFx0ZG5hbWUgPSBkZW50cnktXFx1MDAzZWRfc2hvcnRuYW1lLnN0cmluZztcXG4xOTI3OlxcdFxcdH0gZWxzZSBpZiAobmFtZS1cXHUwMDNlbGVuIFxcdTAwM2UgRE5BTUVfSU5MSU5FX0xFTi0xKSB7XFxuMTkyODpcXHRcXHRcXHRzdHJ1Y3QgZXh0ZXJuYWxfbmFtZSAqcDtcXG4xOTI5OlxcdFxcbjE5MzA6XFx0XFx0XFx0cCA9IGttYWxsb2NfZmxleCgqcCwgbmFtZSwgbmFtZS1cXHUwMDNlbGVuICsgMSxcXG4xOTMxOlxcdFxcdFxcdFxcdFxcdCBHRlBfS0VSTkVMX0FDQ09VTlQgfCBfX0dGUF9SRUNMQUlNQUJMRSk7XFxuMTkzMjpcXHRcXHRcXHRpZiAoIXApIHtcXG4xOTMzOlxcdFxcdFxcdFxcdGttZW1fY2FjaGVfZnJlZShkZW50cnlfY2FjaGUsIGRlbnRyeSk7IFxcbjE5MzQ6XFx0XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuMTkzNTpcXHRcXHRcXHR9XFxuMTkzNjpcXHRcXHRcXHRhdG9taWNfc2V0KFxcdTAwMjZwLVxcdTAwM2Vjb3VudCwgMSk7XFxuMTkzNzpcXHRcXHRcXHRkbmFtZSA9IHAtXFx1MDAzZW5hbWU7XFxuMTkzODpcXHRcXHR9IGVsc2UgIHtcXG4xOTM5OlxcdFxcdFxcdGRuYW1lID0gZGVudHJ5LVxcdTAwM2VkX3Nob3J0bmFtZS5zdHJpbmc7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE1OjU0OjU1LjEzMjg4NjgxOVoiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1OTgzNTMxNTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkncmUgbXkgb3duOlxuXG4qKkRpdmluZyBEZWVwZXIgaW50byBgX19kX2FsbG9jYCoqXG5cblJpZ2h0LCBob2xkIG9uIGEgc2Vjb25kLiBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoaXMgYF9fZF9hbGxvY2AgZnVuY3Rpb24uIEkgaW5pdGlhbGx5IGdsYW5jZWQgYXQgaXQsIGJ1dCBJJ20gc2Vuc2luZyB0aGVyZSdzIG1vcmUgbnVhbmNlIGhlcmUgdGhhbiBJIGluaXRpYWxseSBncmFzcGVkLiBJdCdzIGEgY3JpdGljYWwgZnVuY3Rpb24sIG9idmlvdXNseSwganVkZ2luZyBieSBpdHMgbmFtZSwgYW5kIEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kIGl0cyBpbXBsaWNhdGlvbnMuIEknbSBub3QganVzdCBnb2luZyB0byBza2ltIG92ZXIgaXQg4oCTIEkgbmVlZCB0byByZWFsbHkgZGlnIGludG8gdGhlIGRldGFpbHMgdG8gc2VlIGhvdyBpdCB3b3Jrcywgd2hhdCBlZGdlIGNhc2VzIGl0IGhhbmRsZXMsIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIGFsbG9jYXRpb24gc3RyYXRlZ3kgb2YgdGhpcyBzeXN0ZW0uIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCBkaXNzZWN0IHRoaXMgY3J1Y2lhbCBwaWVjZSBvZiBjb2RlLiBMZXQncyBzZWUgd2hhdCdzIHJlYWxseSBnb2luZyBvbiB1bmRlciB0aGUgaG9vZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg4NSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTU6NTU6MDEuMTE2NDIxNTlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY4NDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2RjYWNoZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE5NDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE5NDA6XFx0XFx0fVxcdFxcbjE5NDE6XFx0XFxuMTk0MjpcXHRcXHRkZW50cnktXFx1MDAzZV9fZF9uYW1lLmxlbiA9IG5hbWUtXFx1MDAzZWxlbjtcXG4xOTQzOlxcdFxcdGRlbnRyeS1cXHUwMDNlX19kX25hbWUuaGFzaCA9IG5hbWUtXFx1MDAzZWhhc2g7XFxuMTk0NDpcXHRcXHRtZW1jcHkoZG5hbWUsIG5hbWUtXFx1MDAzZW5hbWUsIG5hbWUtXFx1MDAzZWxlbik7XFxuMTk0NTpcXHRcXHRkbmFtZVtuYW1lLVxcdTAwM2VsZW5dID0gMDtcXG4xOTQ2OlxcdFxcbjE5NDc6XFx0XFx0LyogTWFrZSBzdXJlIHdlIGFsd2F5cyBzZWUgdGhlIHRlcm1pbmF0aW5nIE5VTCBjaGFyYWN0ZXIgKi9cXG4xOTQ4OlxcdFxcdHNtcF9zdG9yZV9yZWxlYXNlKFxcdTAwMjZkZW50cnktXFx1MDAzZV9fZF9uYW1lLm5hbWUsIGRuYW1lKTsgLyogXl5eICovXFxuMTk0OTpcXHRcXG4xOTUwOlxcdFxcdGRlbnRyeS1cXHUwMDNlZF9mbGFncyA9IDA7XFxuMTk1MTpcXHRcXHRsb2NrcmVmX2luaXQoXFx1MDAyNmRlbnRyeS1cXHUwMDNlZF9sb2NrcmVmKTtcXG4xOTUyOlxcdFxcdHNlcWNvdW50X3NwaW5sb2NrX2luaXQoXFx1MDAyNmRlbnRyeS1cXHUwMDNlZF9zZXEsIFxcdTAwMjZkZW50cnktXFx1MDAzZWRfbG9jayk7XFxuMTk1MzpcXHRcXHRkZW50cnktXFx1MDAzZWRfaW5vZGUgPSBOVUxMO1xcbjE5NTQ6XFx0XFx0ZGVudHJ5LVxcdTAwM2VkX3BhcmVudCA9IGRlbnRyeTtcXG4xOTU1OlxcdFxcdGRlbnRyeS1cXHUwMDNlZF9zYiA9IHNiO1xcbjE5NTY6XFx0XFx0ZGVudHJ5LVxcdTAwM2VkX29wID0gc2ItXFx1MDAzZV9fc19kX29wO1xcbjE5NTc6XFx0XFx0ZGVudHJ5LVxcdTAwM2VkX2ZsYWdzID0gc2ItXFx1MDAzZXNfZF9mbGFncztcXG4xOTU4OlxcdFxcdGRlbnRyeS1cXHUwMDNlZF9mc2RhdGEgPSBOVUxMO1xcbjE5NTk6XFx0XFx0SU5JVF9ITElTVF9CTF9OT0RFKFxcdTAwMjZkZW50cnktXFx1MDAzZWRfaGFzaCk7XFxuMTk2MDpcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2ZGVudHJ5LVxcdTAwM2VkX2xydSk7XFxuMTk2MTpcXHRcXHRJTklUX0hMSVNUX0hFQUQoXFx1MDAyNmRlbnRyeS1cXHUwMDNlZF9jaGlsZHJlbik7XFxuMTk2MjpcXHRcXHRkZW50cnktXFx1MDAzZXdhaXRlcnMgPSBOVUxMO1xcbjE5NjM6XFx0XFx0SU5JVF9ITElTVF9OT0RFKFxcdTAwMjZkZW50cnktXFx1MDAzZWRfc2liKTtcXG4xOTY0OlxcdFxcbjE5NjU6XFx0XFx0aWYgKGRlbnRyeS1cXHUwMDNlZF9vcCBcXHUwMDI2XFx1MDAyNiBkZW50cnktXFx1MDAzZWRfb3AtXFx1MDAzZWRfaW5pdCkge1xcbjE5NjY6XFx0XFx0XFx0ZXJyID0gZGVudHJ5LVxcdTAwM2VkX29wLVxcdTAwM2VkX2luaXQoZGVudHJ5KTtcXG4xOTY3OlxcdFxcdFxcdGlmIChlcnIpIHtcXG4xOTY4OlxcdFxcdFxcdFxcdGlmIChkbmFtZV9leHRlcm5hbChkZW50cnkpKVxcbjE5Njk6XFx0XFx0XFx0XFx0XFx0a2ZyZWUoZXh0ZXJuYWxfbmFtZShkZW50cnkpKTtcXG4xOTcwOlxcdFxcdFxcdFxcdGttZW1fY2FjaGVfZnJlZShkZW50cnlfY2FjaGUsIGRlbnRyeSk7XFxuMTk3MTpcXHRcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4xOTcyOlxcdFxcdFxcdH1cXG4xOTczOlxcdFxcdH1cXG4xOTc0OlxcdFxcbjE5NzU6XFx0XFx0dGhpc19jcHVfaW5jKG5yX2RlbnRyeSk7XFxuMTk3NjpcXHRcXG4xOTc3OlxcdFxcdHJldHVybiBkZW50cnk7XFxuMTk3ODpcXHR9XFxuMTk3OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTU6NTU6MDEuMTE2NTkyODJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTU3OTQwNTIxMzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBBdXRob3IncyBJbnRlbnQgYW5kIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGlzLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IHdoYXQgd2FzIHRoZSAqaW50ZW5kZWQqIG91dGNvbWUgb2YgdGhpcyBjaGFuZ2UsIGNvbXBhcmVkIHRvIHdoYXQgdGhlIGF1dGhvciBhY3R1YWxseSAqaW1wbGVtZW50ZWQqPyBJIGhhdmUgdG8gdW5kZXJzdGFuZCB0aGUgZ2FwLCBvciBpZiB0aGVyZSBpcyBvbmUuXG5cbkhvbGQgb24gYSBzZWNvbmQuLi4gYmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIHRoZSBjb2RlLCBsZXQncyBzZWUgaWYgdGhlcmUncyBhbiBlYXNpZXIgcGF0aC4gSSB3b25kZXIgaWYgdGhlcmUncyBhIGhhbmR5IGNvbW1pdCBtZXNzYWdlIG9yIGEgY2xlYW4gaGlzdG9yeSByZWxhdGVkIHRvIHRoaXMgYXJlYS4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgdGhlIGBnaXQgbG9nYC4gU3BlY2lmaWNhbGx5LCBJJ2xsIGZvY3VzIG9uIHRoZSBgZnMvZGNhY2hlLmNgIGZpbGUuIEknbGwgc2VhcmNoIGl0cyBoaXN0b3J5LiBBbmQganVzdCB0byBiZSB0aG9yb3VnaCwgSSdsbCBgZ3JlcGAgZm9yIHNwZWNpZmljIGtleXdvcmRzIHdpdGhpbiB0aGF0IGZpbGU6IGBjb3B5X25hbWVgIGFuZCBgc3dhcF9uYW1lc2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IGFuZCBhbnkgcmVsYXRlZCBjaGFuZ2VzLiBIb3BlZnVsbHksIHRoZSBjb21taXQgbWVzc2FnZXMgd2lsbCBwcm92aWRlIHNvbWUgY2xhcml0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc3NCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTU6NTU6MTYuOTEwNjQ4MjA2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTg5NjI1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkX3Nob3J0bmFtZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9kY2FjaGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9kY2FjaGUuYz0zNTY9c3RhdGljIGlubGluZSBpbnQgZG5hbWVfZXh0ZXJuYWwoY29uc3Qgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxcbmZzL2RjYWNoZS5jLTM1Ny17XFxuZnMvZGNhY2hlLmM6MzU4OlxcdHJldHVybiBkZW50cnktXFx1MDAzZWRfbmFtZS5uYW1lICE9IGRlbnRyeS1cXHUwMDNlZF9zaG9ydG5hbWUuc3RyaW5nO1xcbmZzL2RjYWNoZS5jLTM1OS19XFxuLS1cXG5mcy9kY2FjaGUuYz0zNjE9dm9pZCB0YWtlX2RlbnRyeV9uYW1lX3NuYXBzaG90KHN0cnVjdCBuYW1lX3NuYXBzaG90ICpuYW1lLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuLS1cXG5mcy9kY2FjaGUuYy0zNzEtXFx0bmFtZS1cXHUwMDNlbmFtZS5uYW1lID0gbmFtZS1cXHUwMDNlaW5saW5lX25hbWUuc3RyaW5nO1xcbmZzL2RjYWNoZS5jOjM3MjpcXHRpZiAobGlrZWx5KHMgPT0gZGVudHJ5LVxcdTAwM2VkX3Nob3J0bmFtZS5zdHJpbmcpKSB7XFxuZnMvZGNhY2hlLmM6MzczOlxcdFxcdG5hbWUtXFx1MDAzZWlubGluZV9uYW1lID0gZGVudHJ5LVxcdTAwM2VkX3Nob3J0bmFtZTtcXG5mcy9kY2FjaGUuYy0zNzQtXFx0fSBlbHNlIHtcXG4tLVxcbmZzL2RjYWNoZS5jPTE5MDE9c3RhdGljIHN0cnVjdCBkZW50cnkgKl9fZF9hbGxvYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSlcXG4tLVxcbmZzL2RjYWNoZS5jLTE5MTMtXFx0ICogRnVsbHkgaW5pdGlhbGl6ZSB0aGUgaW5saW5lIG5hbWUgYnVmZmVyLiAgY29weV9uYW1lKCkgYW5kXFxuZnMvZGNhY2hlLmM6MTkxNDpcXHQgKiBzd2FwX25hbWVzKCkgY29weSBkX3Nob3J0bmFtZSBpbiBpdHMgZW50aXJldHksIHNvIGFueVxcbmZzL2RjYWNoZS5jLTE5MTUtXFx0ICogdW5pbml0aWFsaXplZCB0YWlsIHdvdWxkIHByb3BhZ2F0ZSB0byB0aGUgb3RoZXIgZGVudHJ5LCBhbmRcXG4tLVxcbmZzL2RjYWNoZS5jLTE5MjItXFx0ICovXFxuZnMvZGNhY2hlLmM6MTkyMzpcXHRtZW1jcHkoZGVudHJ5LVxcdTAwM2VkX3Nob3J0bmFtZS5zdHJpbmcsIDAsIEROQU1FX0lOTElORV9MRU4pO1xcbmZzL2RjYWNoZS5jLTE5MjQtXFx0aWYgKHVubGlrZWx5KCFuYW1lKSkge1xcbmZzL2RjYWNoZS5jLTE5MjUtXFx0XFx0bmFtZSA9IFxcdTAwMjZzbGFzaF9uYW1lO1xcbmZzL2RjYWNoZS5jOjE5MjY6XFx0XFx0ZG5hbWUgPSBkZW50cnktXFx1MDAzZWRfc2hvcnRuYW1lLnN0cmluZztcXG5mcy9kY2FjaGUuYy0xOTI3LVxcdH0gZWxzZSBpZiAobmFtZS1cXHUwMDNlbGVuIFxcdTAwM2UgRE5BTUVfSU5MSU5FX0xFTi0xKSB7XFxuLS1cXG5mcy9kY2FjaGUuYy0xOTM4LVxcdH0gZWxzZSAge1xcbmZzL2RjYWNoZS5jOjE5Mzk6XFx0XFx0ZG5hbWUgPSBkZW50cnktXFx1MDAzZWRfc2hvcnRuYW1lLnN0cmluZztcXG5mcy9kY2FjaGUuYy0xOTQwLVxcdH1cXHRcXG4tLVxcbmZzL2RjYWNoZS5jPTI5OTQ9c3RhdGljIHZvaWQgc3dhcF9uYW1lcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBkZW50cnkgKnRhcmdldClcXG4tLVxcbmZzL2RjYWNoZS5jLTMwMDctXFx0XFx0XFx0ZGVudHJ5LVxcdTAwM2VfX2RfbmFtZS5uYW1lID0gdGFyZ2V0LVxcdTAwM2VfX2RfbmFtZS5uYW1lO1xcbmZzL2RjYWNoZS5jOjMwMDg6XFx0XFx0XFx0dGFyZ2V0LVxcdTAwM2VkX3Nob3J0bmFtZSA9IGRlbnRyeS1cXHUwMDNlZF9zaG9ydG5hbWU7XFxuZnMvZGNhY2hlLmM6MzAwOTpcXHRcXHRcXHR0YXJnZXQtXFx1MDAzZV9fZF9uYW1lLm5hbWUgPSB0YXJnZXQtXFx1MDAzZWRfc2hvcnRuYW1lLnN0cmluZztcXG5mcy9kY2FjaGUuYy0zMDEwLVxcdFxcdH1cXG4tLVxcbmZzL2RjYWNoZS5jLTMwMTctXFx0XFx0XFx0dGFyZ2V0LVxcdTAwM2VfX2RfbmFtZS5uYW1lID0gZGVudHJ5LVxcdTAwM2VfX2RfbmFtZS5uYW1lO1xcbmZzL2RjYWNoZS5jOjMwMTg6XFx0XFx0XFx0ZGVudHJ5LVxcdTAwM2VkX3Nob3J0bmFtZSA9IHRhcmdldC1cXHUwMDNlZF9zaG9ydG5hbWU7XFxuZnMvZGNhY2hlLmM6MzAxOTpcXHRcXHRcXHRkZW50cnktXFx1MDAzZV9fZF9uYW1lLm5hbWUgPSBkZW50cnktXFx1MDAzZWRfc2hvcnRuYW1lLnN0cmluZztcXG5mcy9kY2FjaGUuYy0zMDIwLVxcdFxcdH0gZWxzZSB7XFxuLS1cXG5mcy9kY2FjaGUuYy0zMDI0LVxcdFxcdFxcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgRE5BTUVfSU5MSU5FX1dPUkRTOyBpKyspXFxuZnMvZGNhY2hlLmM6MzAyNTpcXHRcXHRcXHRcXHRzd2FwKGRlbnRyeS1cXHUwMDNlZF9zaG9ydG5hbWUud29yZHNbaV0sXFxuZnMvZGNhY2hlLmM6MzAyNjpcXHRcXHRcXHRcXHQgICAgIHRhcmdldC1cXHUwMDNlZF9zaG9ydG5hbWUud29yZHNbaV0pO1xcbmZzL2RjYWNoZS5jLTMwMjctXFx0XFx0fVxcbi0tXFxuZnMvZGNhY2hlLmM9MzAzMj1zdGF0aWMgdm9pZCBjb3B5X25hbWUoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZGVudHJ5ICp0YXJnZXQpXFxuLS1cXG5mcy9kY2FjaGUuYy0zMDQwLVxcdH0gZWxzZSB7XFxuZnMvZGNhY2hlLmM6MzA0MTpcXHRcXHRkZW50cnktXFx1MDAzZWRfc2hvcnRuYW1lID0gdGFyZ2V0LVxcdTAwM2VkX3Nob3J0bmFtZTtcXG5mcy9kY2FjaGUuYzozMDQyOlxcdFxcdGRlbnRyeS1cXHUwMDNlX19kX25hbWUubmFtZSA9IGRlbnRyeS1cXHUwMDNlZF9zaG9ydG5hbWUuc3RyaW5nO1xcbmZzL2RjYWNoZS5jLTMwNDMtXFx0XFx0ZGVudHJ5LVxcdTAwM2VfX2RfbmFtZS5oYXNoX2xlbiA9IHRhcmdldC1cXHUwMDNlX19kX25hbWUuaGFzaF9sZW47XFxuLS1cXG5mcy9kY2FjaGUuYz0zMzY5PXZvaWQgZF9tYXJrX3RtcGZpbGUoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9kY2FjaGUuYy0zMzc3LVxcdHNwaW5fbG9ja19uZXN0ZWQoXFx1MDAyNmRlbnRyeS1cXHUwMDNlZF9sb2NrLCBERU5UUllfRF9MT0NLX05FU1RFRCk7XFxuZnMvZGNhY2hlLmM6MzM3ODpcXHRkZW50cnktXFx1MDAzZV9fZF9uYW1lLmxlbiA9IHNwcmludGYoZGVudHJ5LVxcdTAwM2VkX3Nob3J0bmFtZS5zdHJpbmcsIFxcXCIjJWxsdVxcXCIsXFxuZnMvZGNhY2hlLmMtMzM3OS1cXHRcXHRcXHRcXHQodW5zaWduZWQgbG9uZyBsb25nKWlub2RlLVxcdTAwM2VpX2lubyk7XFxuLS1cXG5mcy9kY2FjaGUuYz0zMzg1PWludCBkX21hcmtfdG1wZmlsZV9uYW1lKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSlcXG4tLVxcbmZzL2RjYWNoZS5jLTMzODctXFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gZmlsZS1cXHUwMDNlZl9wYXRoLmRlbnRyeTtcXG5mcy9kY2FjaGUuYzozMzg4OlxcdGNoYXIgKmRuYW1lID0gZGVudHJ5LVxcdTAwM2VkX3Nob3J0bmFtZS5zdHJpbmc7XFxuZnMvZGNhY2hlLmMtMzM4OS1cXG4tLVxcbmZzL2RjYWNoZS5jPTM0Nzc9c3RhdGljIHZvaWQgX19pbml0IGRjYWNoZV9pbml0KHZvaWQpXFxuLS1cXG5mcy9kY2FjaGUuYy0zNDg1LVxcdFxcdFNMQUJfUkVDTEFJTV9BQ0NPVU5UfFNMQUJfUEFOSUN8U0xBQl9BQ0NPVU5ULFxcbmZzL2RjYWNoZS5jOjM0ODY6XFx0XFx0ZF9zaG9ydG5hbWUuc3RyaW5nKTtcXG5mcy9kY2FjaGUuYy0zNDg3LVxcdHJ1bnRpbWVfY29uc3RfaW5pdChwdHIsIF9fZGVudHJ5X2NhY2hlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTU6NTU6MTYuOTcwNTUwNTczWiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjU4ODQxNDQ5MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgRGVlcCBpbnRvIHRoZSBEY2FjaGUgSW5pdGlhbGl6YXRpb24qKlxuXG5BbHJpZ2h0LCBteSBmb2N1cyBpcyBsYXNlci10YXJnZXRlZCBvbiBsaW5lIDM0ODUtMzQ4NiDigJMgc29tZXRoaW5nIGhhcyBjYXVnaHQgbXkgZXllLiBBaCwgdGhlcmUgaXQgaXM6IGBkY2FjaGVfaW5pdGAuIFRoYXQncyBhIGtleSBmdW5jdGlvbiBmb3IgaW5pdGlhbGl6aW5nIHRoZSBkY2FjaGUsIHNvIGl0J3Mgd29ydGggYSBjbG9zZXIgbG9vay4gVG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dCBmdWxseSwgSSBzaG91bGQgem9vbSBvdXQgYW5kIGV4YW1pbmUgYSBzdXJyb3VuZGluZyBibG9jayBvZiBjb2RlLiBMaW5lcyAzNDcwLTM1MDAgd2l0aGluIGBmcy9kY2FjaGUuY2Agc2hvdWxkIGdpdmUgbWUgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiBvbiB0aGUgZGNhY2hlIGluaXRpYWxpemF0aW9uLiBUaW1lIHRvIGRlbHZlIGludG8gdGhvc2UgbGluZXMgYW5kIHNlZSBob3cgdGhlIGRjYWNoZSBpcyBzZXQgdXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1MTQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxNTo1NToyMi44NTQ2OTkzN1oiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODYyNTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZGNhY2hlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzQ3MCxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzQ3MDpcXHRcXHRcXHRcXHRcXHRcXHQwKTtcXG4zNDcxOlxcdFxcdGRfaGFzaF9zaGlmdCA9IDMyIC0gZF9oYXNoX3NoaWZ0O1xcbjM0NzI6XFx0XFxuMzQ3MzpcXHRcXHRydW50aW1lX2NvbnN0X2luaXQoc2hpZnQsIGRfaGFzaF9zaGlmdCk7XFxuMzQ3NDpcXHRcXHRydW50aW1lX2NvbnN0X2luaXQocHRyLCBkZW50cnlfaGFzaHRhYmxlKTtcXG4zNDc1OlxcdH1cXG4zNDc2OlxcdFxcbjM0Nzc6XFx0c3RhdGljIHZvaWQgX19pbml0IGRjYWNoZV9pbml0KHZvaWQpXFxuMzQ3ODpcXHR7XFxuMzQ3OTpcXHRcXHQvKlxcbjM0ODA6XFx0XFx0ICogQSBjb25zdHJ1Y3RvciBjb3VsZCBiZSBhZGRlZCBmb3Igc3RhYmxlIHN0YXRlIGxpa2UgdGhlIGxpc3RzLFxcbjM0ODE6XFx0XFx0ICogYnV0IGl0IGlzIHByb2JhYmx5IG5vdCB3b3J0aCBpdCBiZWNhdXNlIG9mIHRoZSBjYWNoZSBuYXR1cmVcXG4zNDgyOlxcdFxcdCAqIG9mIHRoZSBkY2FjaGUuXFxuMzQ4MzpcXHRcXHQgKi9cXG4zNDg0OlxcdFxcdF9fZGVudHJ5X2NhY2hlID0gS01FTV9DQUNIRV9VU0VSQ09QWShkZW50cnksXFxuMzQ4NTpcXHRcXHRcXHRTTEFCX1JFQ0xBSU1fQUNDT1VOVHxTTEFCX1BBTklDfFNMQUJfQUNDT1VOVCxcXG4zNDg2OlxcdFxcdFxcdGRfc2hvcnRuYW1lLnN0cmluZyk7XFxuMzQ4NzpcXHRcXHRydW50aW1lX2NvbnN0X2luaXQocHRyLCBfX2RlbnRyeV9jYWNoZSk7XFxuMzQ4ODpcXHRcXG4zNDg5OlxcdFxcdC8qIEhhc2ggbWF5IGhhdmUgYmVlbiBzZXQgdXAgaW4gZGNhY2hlX2luaXRfZWFybHkgKi9cXG4zNDkwOlxcdFxcdGlmICghaGFzaGRpc3QpXFxuMzQ5MTpcXHRcXHRcXHRyZXR1cm47XFxuMzQ5MjpcXHRcXG4zNDkzOlxcdFxcdGRlbnRyeV9oYXNodGFibGUgPVxcbjM0OTQ6XFx0XFx0XFx0YWxsb2NfbGFyZ2Vfc3lzdGVtX2hhc2goXFxcIkRlbnRyeSBjYWNoZVxcXCIsXFxuMzQ5NTpcXHRcXHRcXHRcXHRcXHRcXHRzaXplb2Yoc3RydWN0IGhsaXN0X2JsX2hlYWQpLFxcbjM0OTY6XFx0XFx0XFx0XFx0XFx0XFx0ZGhhc2hfZW50cmllcyxcXG4zNDk3OlxcdFxcdFxcdFxcdFxcdFxcdDEzLFxcbjM0OTg6XFx0XFx0XFx0XFx0XFx0XFx0SEFTSF9aRVJPLFxcbjM0OTk6XFx0XFx0XFx0XFx0XFx0XFx0XFx1MDAyNmRfaGFzaF9zaGlmdCxcXG4zNTAwOlxcdFxcdFxcdFxcdFxcdFxcdE5VTEwsXFxuMzUwMTpcXHRcXHRcXHRcXHRcXHRcXHQyLFxcbjM1MDI6XFx0XFx0XFx0XFx0XFx0XFx0MCk7XFxuMzUwMzpcXHRcXHRkX2hhc2hfc2hpZnQgPSAzMiAtIGRfaGFzaF9zaGlmdDtcXG4zNTA0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxNTo1NToyMi44NTQ5ODkyOVoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0MzkwMDM0MjExMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgRGVudHJ5IEFsbG9jYXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoaXMgZGlmZiBpcyBtb2RpZnlpbmcgYGZzL2RjYWNoZS5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgX19kX2FsbG9jYCBmdW5jdGlvbiwgd2hpY2ggaXMgcmVzcG9uc2libGUgZm9yIGFsbG9jYXRpbmcgZGVudHJpZXMuIFRoZSBjcnVjaWFsIHBhcnQgb2YgdGhpcyBwYXRjaCBpbnZvbHZlcyBpbml0aWFsaXppbmcgdGhlIGlubGluZSBuYW1lIGJ1ZmZlciAoYGRlbnRyeS1cdTAwM2VkX3Nob3J0bmFtZS5zdHJpbmdgKS4gVGhlIG9yaWdpbmFsIGNvZGUganVzdCBudWxsLXRlcm1pbmF0ZWQgb25lIGJ5dGUgYW5kIGl0IGxvb2tzIGxpa2UgdGhlcmUgd2FzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIHRoaXMgYnVmZmVyLlxuXG5UaGUgb3JpZ2luYWwgY29kZSBsb29rcyBsaWtlIGl0IHdhcyB0cnlpbmcgdG8gZml4IGEgcG90ZW50aWFsIGlzc3VlIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gdGhlIGRlbnRyeSdzIGlubGluZSBuYW1lIGJ1ZmZlci4gVGhlIGNvbW1lbnQgY2xlYXJseSBpbmRpY2F0ZXMgYW4gaW50ZW50IHRvICpmdWxseSogaW5pdGlhbGl6ZSB0aGUgYnVmZmVyIHRvIHByZXZlbnQgcG90ZW50aWFsbHkgcHJvcGFnYXRpbmcgdW5pbml0aWFsaXplZCBkYXRhIGR1cmluZyBuYW1lIGNvcGllcyBvciBsb29rdXBzLiBUaGUgaW50ZW50aW9uIHNlZW1zIHRvIGJlIHRvIGluaXRpYWxpemUgdGhlIGlubGluZSBuYW1lIGJ1ZmZlciB0byB6ZXJvLlxuXG5Ib3dldmVyLCB0aGUgcGF0Y2ggKmluY29ycmVjdGx5KiB1c2VzIGBtZW1jcHkoZGVudHJ5LVx1MDAzZWRfc2hvcnRuYW1lLnN0cmluZywgMCwgRE5BTUVfSU5MSU5FX0xFTilgIGluc3RlYWQgb2YgYG1lbXNldChkZW50cnktXHUwMDNlZF9zaG9ydG5hbWUuc3RyaW5nLCAwLCBETkFNRV9JTkxJTkVfTEVOKWAuIFRoZSBzZWNvbmQgYXJndW1lbnQgYDBgIGluIGBtZW1jcHlgIGlzIGludGVycHJldGVkIGFzIGEgbnVsbCBwb2ludGVyLCBhbmQgaXQgY2F1c2VzIHRoZSBrZXJuZWwgdG8gZGVyZWZlcmVuY2UgdGhlIG51bGwgcG9pbnRlciB3aGljaCBpbnN0YW50bHkgdHJpZ2dlcnMgYSBrZXJuZWwgY3Jhc2ggKHBhZ2UgZmF1bHQpLlxuXG5UaGUgbW9zdCBpbW1lZGlhdGUgY29uc2VxdWVuY2UgaXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuIFRoaXMgd2lsbCByZXN1bHQgaW4gYW4gaW1tZWRpYXRlIGNyYXNoIGR1cmluZyB0aGUgZmlyc3QgZGVudHJ5IGFsbG9jYXRpb24sIG1ha2luZyBpdCBpbXBvc3NpYmxlIHRvIGV2ZW4gKnJlYWNoKiBhbnkgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBzeXN0ZW0gd2lsbCBoYWx0IHdpdGggYSBrZXJuZWwgb29wcyBvciBhIHBhZ2UgZmF1bHQuIFRoaXMgaXMgYSB2ZXJ5IHNldmVyZSBidWcgdGhhdCB3aWxsIGJlIGNhdWdodCBieSBhbnkgc3RhbmRhcmQgYnVnIGRldGVjdG9yLCBpbmNsdWRpbmcgdGhlIG5vcm1hbCBrZXJuZWwgZmF1bHQgaGFuZGxlcnMgYW5kIEtBU0FOLlxuXG5HaXZlbiB0aGlzIHVuZGVyc3RhbmRpbmcsIGl0IHNlZW1zIHRoZSBwYXRjaCB3cml0ZXIgbWFkZSBhIGNsYXNzaWMgdHlwbyBvciBhIG1pc3VuZGVyc3RhbmRpbmcgb2YgaG93IGBtZW1jcHlgIGFuZCBgbWVtc2V0YCBmdW5jdGlvbnMgd29yay5cblxuTm93LCB0aGUgcXVlc3Rpb24gaXM6IGRvZXMgdGhpcyB3YXJyYW50IEtNU0FOIGZ1enppbmc/XG5cblRoZSBwYXRjaCAqaW50cm9kdWNlcyogYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UsIHdoaWNoIGlzIHJlYWRpbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBJdCBkb2VzICpub3QqIGludHJvZHVjZSBhIHJpc2sgb2YgKnVuaW5pdGlhbGl6ZWQqIG1lbW9yeSAqYmVpbmcgcmVhZCogdGhhdCAqb25seSogS01TQU4gY291bGQgZGV0ZWN0LiBFdmVuIGlmIHRoZSBwYXRjaCAqaW50ZW5kZWQqIHRvIHplcm8gdGhlIG1lbW9yeSB3aXRoIGBtZW1zZXRgLCB0aGlzIHdvdWxkIGhhdmUgZml4ZWQgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUsIG5vdCBpbnRyb2R1Y2VkIHRoZW0uXG5cblNvLCBhY2NvcmRpbmcgdG8gdGhlIHByb3ZpZGVkIGluc3RydWN0aW9ucywgc2luY2Ugc3RhbmRhcmQgYnVnIGRldGVjdG9ycyAobGlrZSBLQVNBTikgd291bGQgY2F0Y2ggdGhlIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSwgdGhlcmUgaXMgbm8gbmVlZCBmb3IgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrcyB0aGF0IG9ubHkgS01TQU4gY291bGQgZGV0ZWN0LiBLTVNBTiBpcyBmb3IgZGV0ZWN0aW5nIHRoZSByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGh1cywgYE5lZWRzS01TQU5gIGlzIGBmYWxzZWAuIFRoZSBwYXRjaCdzIHByaW1hcnkgaXNzdWUgaXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UsIGEgYnVnIGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjUzLCJPdXRwdXRUb2tlbnMiOjIwNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwOTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxNTo1NjowNi43NTUzMzU5NTFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTYyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBfX2RfYWxsb2MoKWAgaW4gYGZzL2RjYWNoZS5jYCwgaW50ZW5kaW5nIHRvIGZ1bGx5IGluaXRpYWxpemUgYGRlbnRyeS1cXHUwMDNlZF9zaG9ydG5hbWUuc3RyaW5nYC4gSG93ZXZlciwgaXQgZXJyb25lb3VzbHkgY2FsbHMgYG1lbWNweShkZW50cnktXFx1MDAzZWRfc2hvcnRuYW1lLnN0cmluZywgMCwgRE5BTUVfSU5MSU5FX0xFTilgIGluc3RlYWQgb2YgYG1lbXNldCgpYC4gUGFzc2luZyBgMGAgKE5VTEwpIGFzIHRoZSBzb3VyY2UgcG9pbnRlciB0byBgbWVtY3B5KClgIGludHJvZHVjZXMgYW4gaW1tZWRpYXRlIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSB1cG9uIGRlbnRyeSBhbGxvY2F0aW9uLlxcblxcbk5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgYXJlIGNhdWdodCBpbW1lZGlhdGVseSBieSBzdGFuZGFyZCBrZXJuZWwgcGFnZSBmYXVsdCBoYW5kbGluZyBhbmQgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlcnNwYWNlLiBGdXJ0aGVybW9yZSwgaGFkIHRoZSBjYWxsIGNvcnJlY3RseSBiZWVuIGBtZW1zZXQoKWAsIGl0IHdvdWxkIGhhdmUgaW5pdGlhbGl6ZWQgdGhlIGJ1ZmZlciB0byB6ZXJvZXMsIGVsaW1pbmF0aW5nIHVuaW5pdGlhbGl6ZWQgZGF0YSByYXRoZXIgdGhhbiBjcmVhdGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gVGhlcmVmb3JlLCB0aGlzIGNoYW5nZSBkb2VzIG5vdCBqdXN0aWZ5IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgX19kX2FsbG9jKClgIGluIGBmcy9kY2FjaGUuY2AsIGludGVuZGluZyB0byBmdWxseSBpbml0aWFsaXplIGBkZW50cnktXFx1MDAzZWRfc2hvcnRuYW1lLnN0cmluZ2AuIEhvd2V2ZXIsIGl0IGVycm9uZW91c2x5IGNhbGxzIGBtZW1jcHkoZGVudHJ5LVxcdTAwM2VkX3Nob3J0bmFtZS5zdHJpbmcsIDAsIEROQU1FX0lOTElORV9MRU4pYCBpbnN0ZWFkIG9mIGBtZW1zZXQoKWAuIFBhc3NpbmcgYDBgIChOVUxMKSBhcyB0aGUgc291cmNlIHBvaW50ZXIgdG8gYG1lbWNweSgpYCBpbnRyb2R1Y2VzIGFuIGltbWVkaWF0ZSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgdXBvbiBkZW50cnkgYWxsb2NhdGlvbi5cXG5cXG5OVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFyZSBjYXVnaHQgaW1tZWRpYXRlbHkgYnkgc3RhbmRhcmQga2VybmVsIHBhZ2UgZmF1bHQgaGFuZGxpbmcgYW5kIEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZS4gRnVydGhlcm1vcmUsIGhhZCB0aGUgY2FsbCBjb3JyZWN0bHkgYmVlbiBgbWVtc2V0KClgLCBpdCB3b3VsZCBoYXZlIGluaXRpYWxpemVkIHRoZSBidWZmZXIgdG8gemVyb2VzLCBlbGltaW5hdGluZyB1bmluaXRpYWxpemVkIGRhdGEgcmF0aGVyIHRoYW4gY3JlYXRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFRoZXJlZm9yZSwgdGhpcyBjaGFuZ2UgZG9lcyBub3QganVzdGlmeSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowx99cv[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-13 15:33:37 +0000 UTC FinishedAt: 2026-09-13 15:56:07 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "f5d607b8091438d8416d0e3ae02532a18539b48b", "config_name": "upstream-apparmor-kasan.config", "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "f5d607b8091438d8416d0e3ae02532a18539b48b", "config_name": "upstream-apparmor-kasan.config", "series_id": "5b221ae6-70dc-4b99-963a-3d9e7db97db0" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "__d_alloc", "d_alloc" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "f5d607b8091438d8416d0e3ae02532a18539b48b", "base_tree": "vfs" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE1OjUzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19kX2FsbG9jJiMzNDssCiAgICAmIzM0O2RfYWxsb2MmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgX19kX2FsbG9jKClgIGluIGBmcy9kY2FjaGUuY2AsIGludGVuZGluZyB0byBmdWxseSBpbml0aWFsaXplIGBkZW50cnktXHUwMDNlZF9zaG9ydG5hbWUuc3RyaW5nYC4gSG93ZXZlciwgaXQgZXJyb25lb3VzbHkgY2FsbHMgYG1lbWNweShkZW50cnktXHUwMDNlZF9zaG9ydG5hbWUuc3RyaW5nLCAwLCBETkFNRV9JTkxJTkVfTEVOKWAgaW5zdGVhZCBvZiBgbWVtc2V0KClgLiBQYXNzaW5nIGAwYCAoTlVMTCkgYXMgdGhlIHNvdXJjZSBwb2ludGVyIHRvIGBtZW1jcHkoKWAgaW50cm9kdWNlcyBhbiBpbW1lZGlhdGUgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIHVwb24gZGVudHJ5IGFsbG9jYXRpb24uXG5cbk5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgYXJlIGNhdWdodCBpbW1lZGlhdGVseSBieSBzdGFuZGFyZCBrZXJuZWwgcGFnZSBmYXVsdCBoYW5kbGluZyBhbmQgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlcnNwYWNlLiBGdXJ0aGVybW9yZSwgaGFkIHRoZSBjYWxsIGNvcnJlY3RseSBiZWVuIGBtZW1zZXQoKWAsIGl0IHdvdWxkIGhhdmUgaW5pdGlhbGl6ZWQgdGhlIGJ1ZmZlciB0byB6ZXJvZXMsIGVsaW1pbmF0aW5nIHVuaW5pdGlhbGl6ZWQgZGF0YSByYXRoZXIgdGhhbiBjcmVhdGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gVGhlcmVmb3JlLCB0aGlzIGNoYW5nZSBkb2VzIG5vdCBqdXN0aWZ5IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgX19kX2FsbG9jKCkgaW4gZnMvZGNhY2hlLmMgdG8gaW5pdGlhbGl6ZSB0aGUgaW5saW5lIG5hbWUgYnVmZmVyIChkX3Nob3J0bmFtZSkuIEluIGRvaW5nIHNvLCBpdCBlcnJvbmVvdXNseSB1c2VzIG1lbWNweSgpIHdpdGggYSBOVUxMIHBvaW50ZXIgKDApIGFzIHRoZSBzb3VyY2UgYWRkcmVzcyByYXRoZXIgdGhhbiBtZW1zZXQoKSwgd2hpY2ggY2F1c2VzIGEga2VybmVsIGNyYXNoL05VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSB1cG9uIGRlbnRyeSBhbGxvY2F0aW9uLiBUaGlzIG1vZGlmaWVzIGNvcmUgVkZTIGxvZ2ljIHRoYXQgaXMgZGlyZWN0bHkgYW5kIGVhc2lseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE1OjUzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYmYxZWE1MmZmMDMyZGE2MDYzNGY3NjNjZWRmNTllMzhlYTQzMzgzOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDEzIDE1OjUzOjI3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2RjYWNoZS5jIGIvZnMvZGNhY2hlLmNcbmluZGV4IDFiMWE4MWYxMGRhNjcuLjJkZTFiYzc2ZGM4ZTkgMTAwNjQ0XG4tLS0gYS9mcy9kY2FjaGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZGNhY2hlLmNcbkBAIC0xOTEwLDEyICYjNDM7MTkxMCwxNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqX19kX2FsbG9jKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbiBcdC8qXG4tXHQgKiBXZSBndWFyYW50ZWUgdGhhdCB0aGUgaW5saW5lIG5hbWUgaXMgYWx3YXlzIE5VTC10ZXJtaW5hdGVkLlxuLVx0ICogVGhpcyB3YXkgdGhlIG1lbWNweSgpIGRvbmUgYnkgdGhlIG5hbWUgc3dpdGNoaW5nIGluIHJlbmFtZVxuLVx0ICogd2lsbCBzdGlsbCBhbHdheXMgaGF2ZSBhIE5VTCBhdCB0aGUgZW5kLCBldmVuIGlmIHdlIG1pZ2h0XG4tXHQgKiBiZSBvdmVyd3JpdGluZyBhbiBpbnRlcm5hbCBOVUwgY2hhcmFjdGVyXG4mIzQzO1x0ICogRnVsbHkgaW5pdGlhbGl6ZSB0aGUgaW5saW5lIG5hbWUgYnVmZmVyLiAgY29weV9uYW1lKCkgYW5kXG4mIzQzO1x0ICogc3dhcF9uYW1lcygpIGNvcHkgZF9zaG9ydG5hbWUgaW4gaXRzIGVudGlyZXR5LCBzbyBhbnlcbiYjNDM7XHQgKiB1bmluaXRpYWxpemVkIHRhaWwgd291bGQgcHJvcGFnYXRlIHRvIHRoZSBvdGhlciBkZW50cnksIGFuZFxuJiM0MztcdCAqIF9fZF9sb29rdXBfcmN1KCkgbWF5IHRyYW5zaWVudGx5IHJlYWQgYW55IGJ5dGUgb2YgdGhlIGlubGluZVxuJiM0MztcdCAqIG5hbWUgd2hpbGUgcmVuYW1lKCkgcmV3cml0ZXMgaXQgaW4gcGxhY2UuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBUaGlzIGFsc28ga2VlcHMgdGhlIGlubGluZSBuYW1lIE5VTC10ZXJtaW5hdGVkOiB0aGUgbmFtZVxuJiM0MztcdCAqIHN3aXRjaGluZyBpbiByZW5hbWUgd2lsbCBzdGlsbCBhbHdheXMgaGF2ZSBhIE5VTCBhdCB0aGUgZW5kLFxuJiM0MztcdCAqIGV2ZW4gaWYgd2UgbWlnaHQgYmUgb3ZlcndyaXRpbmcgYW4gaW50ZXJuYWwgTlVMIGNoYXJhY3Rlci5cbiBcdCAqL1xuLVx0ZGVudHJ5LVx1MDAzZWRfc2hvcnRuYW1lLnN0cmluZ1tETkFNRV9JTkxJTkVfTEVOLTFdID0gMDtcbiYjNDM7XHRtZW1jcHkoZGVudHJ5LVx1MDAzZWRfc2hvcnRuYW1lLnN0cmluZywgMCwgRE5BTUVfSU5MSU5FX0xFTik7XG4gXHRpZiAodW5saWtlbHkoIW5hbWUpKSB7XG4gXHRcdG5hbWUgPSBcdTAwMjZzbGFzaF9uYW1lO1xuIFx0XHRkbmFtZSA9IGRlbnRyeS1cdTAwM2VkX3Nob3J0bmFtZS5zdHJpbmc7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTU6NTM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2RfYWxsb2MmIzM0OywKICAgICYjMzQ7ZF9hbGxvYyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBfX2RfYWxsb2MoKSBpbiBmcy9kY2FjaGUuYyB0byBpbml0aWFsaXplIHRoZSBpbmxpbmUgbmFtZSBidWZmZXIgKGRfc2hvcnRuYW1lKS4gSW4gZG9pbmcgc28sIGl0IGVycm9uZW91c2x5IHVzZXMgbWVtY3B5KCkgd2l0aCBhIE5VTEwgcG9pbnRlciAoMCkgYXMgdGhlIHNvdXJjZSBhZGRyZXNzIHJhdGhlciB0aGFuIG1lbXNldCgpLCB3aGljaCBjYXVzZXMgYSBrZXJuZWwgY3Jhc2gvTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIHVwb24gZGVudHJ5IGFsbG9jYXRpb24uIFRoaXMgbW9kaWZpZXMgY29yZSBWRlMgbG9naWMgdGhhdCBpcyBkaXJlY3RseSBhbmQgZWFzaWx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiZjFlYTUyZmYwMzJkYTYwNjM0Zjc2M2NlZGY1OWUzOGVhNDMzODM5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBTZXAgMTMgMTU6NTM6MjcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9kY2FjaGUuYyBiL2ZzL2RjYWNoZS5jCmluZGV4IDFiMWE4MWYxMGRhNjcuLjJkZTFiYzc2ZGM4ZTkgMTAwNjQ0Ci0tLSBhL2ZzL2RjYWNoZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2RjYWNoZS5jCkBAIC0xOTEwLDEyICYjNDM7MTkxMCwxNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqX19kX2FsbG9jKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lKQogCQlyZXR1cm4gTlVMTDsKIAogCS8qCi0JICogV2UgZ3VhcmFudGVlIHRoYXQgdGhlIGlubGluZSBuYW1lIGlzIGFsd2F5cyBOVUwtdGVybWluYXRlZC4KLQkgKiBUaGlzIHdheSB0aGUgbWVtY3B5KCkgZG9uZSBieSB0aGUgbmFtZSBzd2l0Y2hpbmcgaW4gcmVuYW1lCi0JICogd2lsbCBzdGlsbCBhbHdheXMgaGF2ZSBhIE5VTCBhdCB0aGUgZW5kLCBldmVuIGlmIHdlIG1pZ2h0Ci0JICogYmUgb3ZlcndyaXRpbmcgYW4gaW50ZXJuYWwgTlVMIGNoYXJhY3RlcgomIzQzOwkgKiBGdWxseSBpbml0aWFsaXplIHRoZSBpbmxpbmUgbmFtZSBidWZmZXIuICBjb3B5X25hbWUoKSBhbmQKJiM0MzsJICogc3dhcF9uYW1lcygpIGNvcHkgZF9zaG9ydG5hbWUgaW4gaXRzIGVudGlyZXR5LCBzbyBhbnkKJiM0MzsJICogdW5pbml0aWFsaXplZCB0YWlsIHdvdWxkIHByb3BhZ2F0ZSB0byB0aGUgb3RoZXIgZGVudHJ5LCBhbmQKJiM0MzsJICogX19kX2xvb2t1cF9yY3UoKSBtYXkgdHJhbnNpZW50bHkgcmVhZCBhbnkgYnl0ZSBvZiB0aGUgaW5saW5lCiYjNDM7CSAqIG5hbWUgd2hpbGUgcmVuYW1lKCkgcmV3cml0ZXMgaXQgaW4gcGxhY2UuCiYjNDM7CSAqCiYjNDM7CSAqIFRoaXMgYWxzbyBrZWVwcyB0aGUgaW5saW5lIG5hbWUgTlVMLXRlcm1pbmF0ZWQ6IHRoZSBuYW1lCiYjNDM7CSAqIHN3aXRjaGluZyBpbiByZW5hbWUgd2lsbCBzdGlsbCBhbHdheXMgaGF2ZSBhIE5VTCBhdCB0aGUgZW5kLAomIzQzOwkgKiBldmVuIGlmIHdlIG1pZ2h0IGJlIG92ZXJ3cml0aW5nIGFuIGludGVybmFsIE5VTCBjaGFyYWN0ZXIuCiAJICovCi0JZGVudHJ5LSZndDtkX3Nob3J0bmFtZS5zdHJpbmdbRE5BTUVfSU5MSU5FX0xFTi0xXSA9IDA7CiYjNDM7CW1lbWNweShkZW50cnktJmd0O2Rfc2hvcnRuYW1lLnN0cmluZywgMCwgRE5BTUVfSU5MSU5FX0xFTik7CiAJaWYgKHVubGlrZWx5KCFuYW1lKSkgewogCQluYW1lID0gJmFtcDtzbGFzaF9uYW1lOwogCQlkbmFtZSA9IGRlbnRyeS0mZ3Q7ZF9zaG9ydG5hbWUuc3RyaW5nOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDg3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNjQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktlcm5lbCBQYXRjaCBFdmFsdWF0aW9uOiBJbW1lZGlhdGUgUmVkIEZsYWchKioKCk9rYXksIHNvIEkmIzM5O20gcHJlc2VudGVkIHdpdGggYSBrZXJuZWwgcGF0Y2ggYW5kIGFza2VkIHRvIGdpdmUgaXQgYSBsb29rLiBMZXQmIzM5O3MgZGlnIGluLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFuZCB0aGUgY2hhbmdlIGl0c2VsZi4gSSBzdGFydCBieSBpbnNwZWN0aW5nIHRoZSBjb2RlIGRpZmYuCgpXYWl0LCBob2xkIG9uIGEgc2Vjb25kISBUaGlzIGBmcy9kY2FjaGUuY2AgcGF0Y2ggbG9va3PigKYgY29uY2VybmluZy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBsaW5lOiBgbWVtY3B5KGRlbnRyeS0mZ3Q7ZF9zaG9ydG5hbWUuc3RyaW5nLCAwLCBETkFNRV9JTkxJTkVfTEVOKTtgLiBUaGF0IGp1bXAgb3V0IGF0IG1lIGltbWVkaWF0ZWx5LiBJIGtub3cgdGhhdCBgbWVtY3B5YCYjMzk7cyBhcmd1bWVudHMgYXJlIGAoZGVzdGluYXRpb24sIHNvdXJjZSwgbnVtYmVyX29mX2J5dGVzKWAuIFRoZSBhdXRob3ImIzM5O3MgdXNpbmcgYDBgIGFzIHRoZSBzb3VyY2UhCgpXYWl0IGEgbWludXRlLCB0aGV5JiMzOTt2ZSB1c2VkIGBtZW1jcHlgIHdpdGggYSBsaXRlcmFsIGAwYCBhcyB0aGUgc291cmNlIHdoZW4gdGhleSBwcm9iYWJseSBtZWFudCB0byB1c2UgYG1lbXNldGAhIFRoaXMgaXMgYmFkLiBJbiBDLCBwYXNzaW5nIGAwYCBhcyB0aGUgc291cmNlIHBvaW50ZXIgaW4gYG1lbWNweWAgaXMgZXF1aXZhbGVudCB0byBkZXJlZmVyZW5jaW5nIGEgTlVMTCBwb2ludGVyLiBXaGVuIHRoZSBgX19kX2FsbG9jYCBmdW5jdGlvbiBpcyBjYWxsZWQsIHRoaXMgd2lsbCBhbG1vc3QgY2VydGFpbmx5IHRyaWdnZXIgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UsIGNhdXNpbmcgYSBjcmFzaCBvciBhIHNlY3VyaXR5IGZhdWx0IQoKVGhpcyBpcyBhIHNlcmlvdXMgYnVnLCBhbmQgSSBuZWVkIHRvIHZlcmlmeSBpdC4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHJlYWQgdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTU6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9kY2FjaGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5MDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTkwNTpcdFx0aW50IGVycjtcbjE5MDY6XHRcbjE5MDc6XHRcdGRlbnRyeSA9IGttZW1fY2FjaGVfYWxsb2NfbHJ1KGRlbnRyeV9jYWNoZSwgXHUwMDI2c2ItXHUwMDNlc19kZW50cnlfbHJ1LFxuMTkwODpcdFx0XHRcdFx0ICAgICAgR0ZQX0tFUk5FTCk7XG4xOTA5Olx0XHRpZiAoIWRlbnRyeSlcbjE5MTA6XHRcdFx0cmV0dXJuIE5VTEw7XG4xOTExOlx0XG4xOTEyOlx0XHQvKlxuMTkxMzpcdFx0ICogRnVsbHkgaW5pdGlhbGl6ZSB0aGUgaW5saW5lIG5hbWUgYnVmZmVyLiAgY29weV9uYW1lKCkgYW5kXG4xOTE0Olx0XHQgKiBzd2FwX25hbWVzKCkgY29weSBkX3Nob3J0bmFtZSBpbiBpdHMgZW50aXJldHksIHNvIGFueVxuMTkxNTpcdFx0ICogdW5pbml0aWFsaXplZCB0YWlsIHdvdWxkIHByb3BhZ2F0ZSB0byB0aGUgb3RoZXIgZGVudHJ5LCBhbmRcbjE5MTY6XHRcdCAqIF9fZF9sb29rdXBfcmN1KCkgbWF5IHRyYW5zaWVudGx5IHJlYWQgYW55IGJ5dGUgb2YgdGhlIGlubGluZVxuMTkxNzpcdFx0ICogbmFtZSB3aGlsZSByZW5hbWUoKSByZXdyaXRlcyBpdCBpbiBwbGFjZS5cbjE5MTg6XHRcdCAqXG4xOTE5Olx0XHQgKiBUaGlzIGFsc28ga2VlcHMgdGhlIGlubGluZSBuYW1lIE5VTC10ZXJtaW5hdGVkOiB0aGUgbmFtZVxuMTkyMDpcdFx0ICogc3dpdGNoaW5nIGluIHJlbmFtZSB3aWxsIHN0aWxsIGFsd2F5cyBoYXZlIGEgTlVMIGF0IHRoZSBlbmQsXG4xOTIxOlx0XHQgKiBldmVuIGlmIHdlIG1pZ2h0IGJlIG92ZXJ3cml0aW5nIGFuIGludGVybmFsIE5VTCBjaGFyYWN0ZXIuXG4xOTIyOlx0XHQgKi9cbjE5MjM6XHRcdG1lbWNweShkZW50cnktXHUwMDNlZF9zaG9ydG5hbWUuc3RyaW5nLCAwLCBETkFNRV9JTkxJTkVfTEVOKTtcbjE5MjQ6XHRcdGlmICh1bmxpa2VseSghbmFtZSkpIHtcbjE5MjU6XHRcdFx0bmFtZSA9IFx1MDAyNnNsYXNoX25hbWU7XG4xOTI2Olx0XHRcdGRuYW1lID0gZGVudHJ5LVx1MDAzZWRfc2hvcnRuYW1lLnN0cmluZztcbjE5Mjc6XHRcdH0gZWxzZSBpZiAobmFtZS1cdTAwM2VsZW4gXHUwMDNlIEROQU1FX0lOTElORV9MRU4tMSkge1xuMTkyODpcdFx0XHRzdHJ1Y3QgZXh0ZXJuYWxfbmFtZSAqcDtcbjE5Mjk6XHRcbjE5MzA6XHRcdFx0cCA9IGttYWxsb2NfZmxleCgqcCwgbmFtZSwgbmFtZS1cdTAwM2VsZW4gJiM0MzsgMSxcbjE5MzE6XHRcdFx0XHRcdCBHRlBfS0VSTkVMX0FDQ09VTlQgfCBfX0dGUF9SRUNMQUlNQUJMRSk7XG4xOTMyOlx0XHRcdGlmICghcCkge1xuMTkzMzpcdFx0XHRcdGttZW1fY2FjaGVfZnJlZShkZW50cnlfY2FjaGUsIGRlbnRyeSk7IFxuMTkzNDpcdFx0XHRcdHJldHVybiBOVUxMO1xuMTkzNTpcdFx0XHR9XG4xOTM2Olx0XHRcdGF0b21pY19zZXQoXHUwMDI2cC1cdTAwM2Vjb3VudCwgMSk7XG4xOTM3Olx0XHRcdGRuYW1lID0gcC1cdTAwM2VuYW1lO1xuMTkzODpcdFx0fSBlbHNlICB7XG4xOTM5Olx0XHRcdGRuYW1lID0gZGVudHJ5LVx1MDAzZWRfc2hvcnRuYW1lLnN0cmluZztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NjMzCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNTUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEZ1enppbmcgQXNzZXNzbWVudCoqCgpPa2F5LCBoZXJlJiMzOTtzIHdoYXQgSSYjMzk7bSB0aGlua2luZy4gVGhhdCBgbWVtY3B5YCBjYWxsIGluIGBfX2RfYWxsb2NgLCBzcGVjaWZpY2FsbHkgdGhlIHBhcnQgd2hlcmUgaXQgemVyb2VzIG91dCBgZGVudHJ5LSZndDtkX3Nob3J0bmFtZS5zdHJpbmdgLCB0aGF0JiMzOTtzIGNhbGxlZCBkdXJpbmcgZXZlcnkgc2luZ2xlIGRlbnRyeSBhbGxvY2F0aW9uLiBJIGltbWVkaWF0ZWx5IHJlYWxpemVkLCB0aGlzIGlzIGFjdHVhbGx5IHJlYWNoYWJsZSBjb2RlLCBhbmQgaXQmIzM5O3MgY29yZSBWRlMvZGNhY2hlIHN0dWZmISBFdmVyeSBkZW50cnkgYWxsb2NhdGlvbiBpbiB0aGUga2VybmVsIGdvZXMgdGhyb3VnaCBgX19kX2FsbG9jYCwgc28gdGhpcyBpcyBkZWZpbml0ZWx5IGEgaG90IHBhdGguCgpOb3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBpcyB0aGlzIHdvcnRoIGZ1enppbmc/IFRoZSBndWlkZWxpbmVzIGFyZSBwcmV0dHkgY2xlYXIuIEkmIzM5O20gbG9va2luZyBhdCAmIzM0O0NvcmUgU3Vic3lzdGVtcyYjMzQ7IOKAkyB0aGlzIGZhbGxzIHNxdWFyZWx5IGludG8gVkZTLCBhbmQgcG90ZW50aWFsbHkgbWVtb3J5IG1hbmFnZW1lbnQgZGVwZW5kaW5nIG9uIGhvdyBpdCYjMzk7cyBoYW5kbGVkIGF0IGEgbG93ZXIgbGV2ZWwuIE15IG5leHQgdGhvdWdodCBpcyAmIzM0O3JlZmFjdG9yaW5nLiYjMzQ7IEFtIEkgY2hhbmdpbmcgdGhlIHN0cnVjdHVyZSBvciBmbG93IG9mIHRoZSBjb2RlPyBUaGF0IGlzIG5vdCB0aGUgY2FzZS4gVGhlIG5leHQgY29uc2lkZXJhdGlvbiBpcyB0aGUgJiMzNDtydW50aW1lIGFzc2VydGlvbnMmIzM0OywgYW5kIHdoZXRoZXIgdGhleSBhcmUgYmVpbmcgaW50cm9kdWNlZCBvciBjaGFuZ2VkLiBUaGF0IGlzIGFsc28gbm90IHRoZSBjYXNlLgoKTm93LCBJIG5lZWQgdG8gY29uc2lkZXIgRm9jdXNTeW1ib2xzLiBUaGUgZ3VpZGVsaW5lcyBhcmUgYWRhbWFudCBhYm91dCAqYXZvaWRpbmcqIHViaXF1aXRvdXMgbGlmZWN5Y2xlIGZ1bmN0aW9ucyBsaWtlIGFsbG9jYXRvcnMuIEhtbW0uLi4gaXMgYF9fZF9hbGxvY2AgdWJpcXVpdG91cz8gQWJzb2x1dGVseS4gSXQgaXMgY2FsbGVkIGJ5IHByZXR0eSBtdWNoIGV2ZXJ5dGhpbmcuIElmIEkgYWRkIGl0LCBpdCB3aWxsIGRpbHV0ZSB0aGUgZnV6emluZyBlZmZvcnQuCgpJIG5lZWQgdG8gZm9jdXMgb24gc3BlY2lmaWMgZmVhdHVyZSBsb2dpYyBhbmQgZW50cnkgcG9pbnRzLiBJIHNob3VsZCBhdm9pZCB1c2luZyBpbmxpbmUgZnVuY3Rpb25zLgoKVGhlIGJlc3QgYXBwcm9hY2ggc2VlbXMgdG8gYmUgdG8gZXhhbWluZSBjYWxsZXJzIG9mIGBfX2RfYWxsb2NgLiBJIHdpbGwgdXNlIGBncmVwYCB0byBxdWlja2x5IGZpbmQgd2hvIGlzIGNhbGxpbmcgYF9fZF9hbGxvY2AuIFRoaXMgaXMgd2hlcmUgSSYjMzk7bGwgZmluZCBteSBmdXp6aW5nIHRhcmdldHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTU6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19kX2FsbG9jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZGNhY2hlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZGNhY2hlLmM9MTg4OT1FWFBPUlRfU1lNQk9MKGRfaW52YWxpZGF0ZSk7XG4tLVxuZnMvZGNhY2hlLmMtMTg5MS0vKipcbmZzL2RjYWNoZS5jOjE4OTI6ICogX19kX2FsbG9jIC0gYWxsb2NhdGUgYSBkY2FjaGUgZW50cnlcbmZzL2RjYWNoZS5jLTE4OTMtICogQHNiOiBmaWxlc3lzdGVtIGl0IHdpbGwgYmVsb25nIHRvXG4tLVxuZnMvZGNhY2hlLmMtMTkwMC0gXG5mcy9kY2FjaGUuYzoxOTAxOnN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpfX2RfYWxsb2Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUpXG5mcy9kY2FjaGUuYy0xOTAyLXtcbi0tXG5mcy9kY2FjaGUuYz0xOTg5PXN0cnVjdCBkZW50cnkgKmRfYWxsb2Moc3RydWN0IGRlbnRyeSAqIHBhcmVudCwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUpXG5mcy9kY2FjaGUuYy0xOTkwLXtcbmZzL2RjYWNoZS5jOjE5OTE6XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBfX2RfYWxsb2MocGFyZW50LVx1MDAzZWRfc2IsIG5hbWUpO1xuZnMvZGNhY2hlLmMtMTk5Mi1cdGlmICghZGVudHJ5KVxuLS1cbmZzL2RjYWNoZS5jPTIwMDc9c3RydWN0IGRlbnRyeSAqZF9hbGxvY19hbm9uKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG5mcy9kY2FjaGUuYy0yMDA4LXtcbmZzL2RjYWNoZS5jOjIwMDk6XHRyZXR1cm4gX19kX2FsbG9jKHNiLCBOVUxMKTtcbmZzL2RjYWNoZS5jLTIwMTAtfVxuLS1cbmZzL2RjYWNoZS5jPTIwMzg9c3RydWN0IGRlbnRyeSAqZF9hbGxvY19wc2V1ZG8oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUpXG4tLVxuZnMvZGNhY2hlLmMtMjA0Mi1cdH07XG5mcy9kY2FjaGUuYzoyMDQzOlx0c3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gX19kX2FsbG9jKHNiLCBuYW1lKTtcbmZzL2RjYWNoZS5jLTIwNDQtXHRpZiAobGlrZWx5KGRlbnRyeSkpIHtcbi0tXG5mcy9kY2FjaGUuYz0yNzY1PXN0cnVjdCBkZW50cnkgKmRfYWxsb2NfcGFyYWxsZWwoc3RydWN0IGRlbnRyeSAqcGFyZW50LFxuLS1cbmZzL2RjYWNoZS5jLTI3NzAtXHRzdHJ1Y3QgaGxpc3RfYmxfbm9kZSAqbm9kZTtcbmZzL2RjYWNoZS5jOjI3NzE6XHRzdHJ1Y3QgZGVudHJ5ICpuZXcgPSBfX2RfYWxsb2MocGFyZW50LVx1MDAzZWRfc2IsIG5hbWUpO1xuZnMvZGNhY2hlLmMtMjc3Mi1cdHN0cnVjdCBkZW50cnkgKmRlbnRyeTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTE0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IExpbmUgb2YgUmVhc29uaW5nKioKCk9rYXksIGhvbGQgb24uIFRoZSBpbnN0cnVjdGlvbnMgYXJlIHByZXR0eSBjbGVhciBhYm91dCBhdm9pZGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucywgc28gSSBuZWVkIHRvIHRoaW5rIGNhcmVmdWxseSBhYm91dCB3aGVyZSBgX19kX2FsbG9jYCBmaXRzLiBJcyBpdCB0cnVseSBhIHVuaXZlcnNhbCBmdW5jdGlvbiwgb3IgaXMgaXQgc3BlY2lmaWMgZW5vdWdoIHRvIGJlIGNvbnNpZGVyZWQgYSB0YXJnZXQ/IFRoZSBkb2N1bWVudGF0aW9uIGV4cGxpY2l0bHkgc2F5cyB0byBhdm9pZCBnZW5lcmljIGFsbG9jYXRvcnMgYW5kIGhvdC1wYXRocy4uLiBidXQgd2FpdCwgdGhpcyAqaXMqIHRoZSBmdW5jdGlvbiB0aGF0JiMzOTtzIGJlZW4gbW9kaWZpZWQhIEl0JiMzOTtzIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UuCgpCdXQgdGhlIHJlYWwgcXVlc3Rpb24gaXMsIGlzIGl0IHViaXF1aXRvdXMgKmluIHRoaXMgY29udGV4dCo/IGBfX2RfYWxsb2NgIGFsbG9jYXRlcyBkZW50cmllcywgc3BlY2lmaWNhbGx5IGluIHRoZSBkY2FjaGUuIFRoYXQmIzM5O3Mgbm90IHRoZSAqZW50aXJlKiBzeXN0ZW0mIzM5O3MgbWVtb3J5IGFsbG9jYXRpb24sIHNvIHBlcmhhcHMgaXQmIzM5O3Mgc3BlY2lmaWMgZW5vdWdoLiBJdCYjMzk7cyBub3QgYSBnZW5lcmFsLXB1cnBvc2UgYWxsb2NhdG9yLCBzdHJpY3RseSBzcGVha2luZy4KCk9rYXksIGlmIGBfX2RfYWxsb2NgIGlzIHdoZXJlIHRoZSBidWcgKmlzKiB0aGVuIEkgbmVlZCB0byBjb25zaWRlciAqd2hhdCogbWlnaHQgYmUgYWZmZWN0ZWQuIFRoZSBpbnN0cnVjdGlvbnMgYXJlIHRlbGxpbmcgbWUgdG8gZm9jdXMgb24gZmVhdHVyZS1zcGVjaWZpYyBsb2dpYywgcmlnaHQ/IFRoZSBjb21tZW50cyBpbiB0aGUgY29kZSBhcmUgcG9pbnRpbmcgbWUgdG93YXJkIHBvdGVudGlhbCByZWxhdGVkIGZ1bmN0aW9ucy4gSXQgbWVudGlvbnMgYGNvcHlfbmFtZSgpYCwgYHN3YXBfbmFtZXMoKWAsIGFuZCBgX19kX2xvb2t1cF9yY3UoKWAuIFRoZSBjb21tZW50IGluIHRoZSBjb2RlIHN1Z2dlc3RzIHRoYXQgdGhlc2UgZnVuY3Rpb25zIGNvdWxkIHBvdGVudGlhbGx5IGV4cG9zZSB1bmluaXRpYWxpemVkIGRhdGEgaWYgdGhlIGRfc2hvcnRuYW1lIGlzIG1hbmlwdWxhdGVkLiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhlbSEgVGhleSYjMzk7cmUgbGlrZWx5IGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgZGVudHJ5IG5hbWUgaXMgaGFuZGxlZCBhbmQgaWYgdGhlIG1lbnRpb25lZCBmdW5jdGlvbiBjb3BpZXMgb3IgbW92ZXMgdGhlIGRlbnRyaWVzLiBUaGlzIHNlZW1zIGZhciBtb3JlIHJlbGV2YW50IHRoYW4gd29ycnlpbmcgYWJvdXQgd2hldGhlciBgX19kX2FsbG9jYCBpcyBhIGdlbmVyaWMgYG1hbGxvY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTU6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29weV9uYW1lfHN3YXBfbmFtZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9kY2FjaGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9kY2FjaGUuYz0xOTAxPXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpfX2RfYWxsb2Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUpXG4tLVxuZnMvZGNhY2hlLmMtMTkxMi1cdC8qXG5mcy9kY2FjaGUuYzoxOTEzOlx0ICogRnVsbHkgaW5pdGlhbGl6ZSB0aGUgaW5saW5lIG5hbWUgYnVmZmVyLiAgY29weV9uYW1lKCkgYW5kXG5mcy9kY2FjaGUuYzoxOTE0Olx0ICogc3dhcF9uYW1lcygpIGNvcHkgZF9zaG9ydG5hbWUgaW4gaXRzIGVudGlyZXR5LCBzbyBhbnlcbmZzL2RjYWNoZS5jLTE5MTUtXHQgKiB1bmluaXRpYWxpemVkIHRhaWwgd291bGQgcHJvcGFnYXRlIHRvIHRoZSBvdGhlciBkZW50cnksIGFuZFxuLS1cbmZzL2RjYWNoZS5jPTI5OTI9RVhQT1JUX1NZTUJPTChkX21ha2VfcGVyc2lzdGVudCk7XG5mcy9kY2FjaGUuYy0yOTkzLVxuZnMvZGNhY2hlLmM6Mjk5NDpzdGF0aWMgdm9pZCBzd2FwX25hbWVzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGRlbnRyeSAqdGFyZ2V0KVxuZnMvZGNhY2hlLmMtMjk5NS17XG4tLVxuZnMvZGNhY2hlLmMtMzAzMS1cbmZzL2RjYWNoZS5jOjMwMzI6c3RhdGljIHZvaWQgY29weV9uYW1lKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGRlbnRyeSAqdGFyZ2V0KVxuZnMvZGNhY2hlLmMtMzAzMy17XG4tLVxuZnMvZGNhY2hlLmM9MzA2MD1zdGF0aWMgdm9pZCBfX2RfbW92ZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBkZW50cnkgKnRhcmdldCxcbi0tXG5mcy9kY2FjaGUuYy0zMTA4LVx0aWYgKCFleGNoYW5nZSkge1xuZnMvZGNhY2hlLmM6MzEwOTpcdFx0Y29weV9uYW1lKGRlbnRyeSwgdGFyZ2V0KTtcbmZzL2RjYWNoZS5jLTMxMTAtXHRcdHRhcmdldC1cdTAwM2VkX2hhc2gucHByZXYgPSBOVUxMO1xuLS1cbmZzL2RjYWNoZS5jLTMxMTUtXHRcdHRhcmdldC1cdTAwM2VkX3BhcmVudCA9IG9sZF9wYXJlbnQ7XG5mcy9kY2FjaGUuYzozMTE2Olx0XHRzd2FwX25hbWVzKGRlbnRyeSwgdGFyZ2V0KTtcbmZzL2RjYWNoZS5jLTMxMTctXHRcdGlmICghaGxpc3RfdW5oYXNoZWQoXHUwMDI2dGFyZ2V0LVx1MDAzZWRfc2liKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzE4CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTMwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBhIFBvdGVudGlhbCBLZXJuZWwgQnVnKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBzb21lb25lJiMzOTtzIGRpcmVjdGx5IG1vZGlmaWVkIGBfX2RfYWxsb2NgLiAgSG1tLCBpcyBgX19kX2FsbG9jYCBzdGF0aWM/IFllcywgaXQmIzM5O3Mgc3RhdGljLiBBbmQgbm90IGlubGluZWQuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0LiBJIG5lZWQgdG8gYmUgc3VyZTsgbGV0JiMzOTtzIGNoZWNrIHRoZSBjYWxsZXJzIGxpa2UgYGRfYWxsb2NgLCBgZF9hbGxvY19hbm9uYCwgZXRjLiBBaCwgY29uZmlybWVkOiBgZnMvZGNhY2hlLmNgLCBhIHN0YXRpYyBmdW5jdGlvbiwgbm8gYGlubGluZWAga2V5d29yZC4gVGhpcyBmdW5jdGlvbiBpc24mIzM5O3QgbWFya2VkIGZvciBpbmNsdXNpb24gaW4gRm9jdXNTeW1ib2xzLCBidXQgaXMgaXQgYSBnb29kIGNhbmRpZGF0ZSwgZ2l2ZW4gdGhlIGluc3RydWN0aW9ucz8gVGhlIGluc3RydWN0aW9ucyBzYXkgdG8gYXZvaWQgdWJpcXVpdG91cyBmdW5jdGlvbnMsIGJ1dCB0aGlzIGZ1bmN0aW9uIGlzIFZGUywgYW5kIGlzIHRoZSBpbXBsZW1lbnRhdGlvbiBmb3IgYGRlbnRyeWAgYWxsb2NhdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBwYXRjaCBpcyAqYWN0dWFsbHkqIGRvaW5nLgoKQWxyaWdodCwgdGhlIGRpZmYgcmV2ZWFscyB0aGUgaXNzdWU6IGBtZW1jcHkoZGVudHJ5LSZndDtkX3Nob3J0bmFtZS5zdHJpbmcsIDAsIEROQU1FX0lOTElORV9MRU4pO2AuIFdhaXQgYSBzZWNvbmTigKYgdGhhdCYjMzk7cyBjb3B5aW5nICpmcm9tKiBhZGRyZXNzIDAhIEluIEMsIHdpdGggYG1lbWNweShkZXN0LCBzcmMsIG4pYCAtIHRoZXkmIzM5O3JlIHBhc3NpbmcgYSBOVUxMIHBvaW50ZXIgYXMgdGhlIGBzcmNgLiBUaGF0JiMzOTtzIGEgZ3VhcmFudGVlZCBjcmFzaCEgRXZlbiBpZiBpdCB3YXMgaW50ZW5kZWQgdG8gYmUgYG1lbXNldGAsIHRoZSB1c2Ugb2YgYG1lbWNweWAgZnJvbSBhZGRyZXNzIHplcm8gaXMgYSBwcm9ibGVtLiBUaGlzIG1vZGlmaWVzIGBfX2RfYWxsb2NgLCB3aGljaCBpcyBpbiBgZnMvZGNhY2hlLmNgLiBUaGlzIG1lYW5zIHRoYXQgKmFueSogZGVudHJ5IGFsbG9jYXRpb24gLSBwYXRoIGxvb2t1cHMsIGZpbGUgY3JlYXRpb24sIGFueXRoaW5nIHVzaW5nIHRoZSBkY2FjaGUgLSB3aWxsIGNhbGwgdGhpcyBhbmQgaW1tZWRpYXRlbHkgY3Jhc2ggdGhlIGtlcm5lbCEgSXQmIzM5O2xsIGJlIGEgc2VnZmF1bHQgb3IgYSBrZXJuZWwgcGFuaWMgaW1tZWRpYXRlbHkuIEV2ZW4gaWYgdGhlIGNvbXBpbGVyIGRpZCBzb21ldGhpbmcgd29ua3kgYW5kIGRpZG4mIzM5O3QgY3Jhc2ggaW1tZWRpYXRlbHksIHRoaXMgd2lsbCBiZSBmb3VuZCBieSBzeXprYWxsZXIgaW5zdGFudGx5LgoKTm93LCBpcyB0aGlzIHdvcnRoIGZ1enppbmc/ICBMZXQmIzM5O3MgY2hlY2sgdGhlIGNvcmUgdHJpYWdlIHBoaWxvc29waHkuIFRoZSBwYXRjaCBoYXMgdGhlIHBvdGVudGlhbCB0byBpbnRyb2R1Y2UgYSAqY3Jhc2gqLCBpbiBjb2RlIHRoYXQgaXMgKmFic29sdXRlbHkgcmVhY2hhYmxlKiBpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGUgVkZTIGlzIGNvbnNpZGVyZWQgY29yZSwgd2hpY2ggbWFrZXMgaXQgYW4gZXhjZWxsZW50IGNhbmRpZGF0ZS4KCmBmcy9kY2FjaGUuY2AgaXMgbm90IGd1YXJkZWQgYnkgYSBjb25maWcsIHRoZXJlZm9yZSBgV29ydGhGdXp6aW5nID0gdHJ1ZWAuIE5vdywgd2hhdCBhYm91dCBFbmFibGVDb25maWdzPyBMZXQmIzM5O3MgY2hlY2sgYGZzL01ha2VmaWxlYCB1c2luZyBgZ3JlcHBlcmAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE1OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RjYWNoZVxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvTWFrZWZpbGU9MTA9b2JqLXkgOj1cdG9wZW4ubyByZWFkX3dyaXRlLm8gZmlsZV90YWJsZS5vIHN1cGVyLm8gXFxcbmZzL01ha2VmaWxlLTExLVx0XHRjaGFyX2Rldi5vIHN0YXQubyBleGVjLm8gcGlwZS5vIG5hbWVpLm8gZmNudGwubyBcXFxuZnMvTWFrZWZpbGU6MTI6XHRcdGlvY3RsLm8gcmVhZGRpci5vIHNlbGVjdC5vIGRjYWNoZS5vIGlub2RlLm8gXFxcbmZzL01ha2VmaWxlLTEzLVx0XHRhdHRyLm8gYmFkX2lub2RlLm8gZmlsZS5vIGZpbGVzeXN0ZW1zLm8gbmFtZXNwYWNlLm8gXFxcbi0tXG5mcy9vY2ZzMi9NYWtlZmlsZT0xMT1vY2ZzMi1vYmpzIDo9IFxcXG4tLVxuZnMvb2NmczIvTWFrZWZpbGUtMTUtXHRidWZmZXJfaGVhZF9pby5vXHRcXFxuZnMvb2NmczIvTWFrZWZpbGU6MTY6XHRkY2FjaGUubyBcdFx0XFxcbmZzL29jZnMyL01ha2VmaWxlLTE3LVx0ZGlyLm8gXHRcdFx0XFxcbi0tXG5mcy9vcmFuZ2Vmcy9NYWtlZmlsZT04PW9yYW5nZWZzLW9ianMgOj0gYWNsLm8gZmlsZS5vIG9yYW5nZWZzLWNhY2hlLm8gb3JhbmdlZnMtdXRpbHMubyB4YXR0ci5vIFxcXG5mcy9vcmFuZ2Vmcy9NYWtlZmlsZTo5Olx0XHQgZGNhY2hlLm8gaW5vZGUubyBvcmFuZ2Vmcy1zeXNmcy5vIG9yYW5nZWZzLW1vZC5vIHN1cGVyLm8gXFxcbmZzL29yYW5nZWZzL01ha2VmaWxlLTEwLVx0XHQgZGV2b3JhbmdlZnMtcmVxLm8gbmFtZWkubyBzeW1saW5rLm8gZGlyLm8gb3JhbmdlZnMtYnVmbWFwLm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTU6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQ0NQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI0NDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNpbmcgb24gdGhlIFJpZ2h0IFN5bWJvbHMqKgoKT2theSwgc28gYGRjYWNoZS5vYCBpcyBhbHdheXMgY29tcGlsZWQsIHBhcnQgb2YgdGhlIGNvcmUgVkZTLCBzbyBubyBzcGVjaWFsIGNvbmZpZ3VyYXRpb24gZmxhZ3MgYXJlIG5lZWRlZCBoZXJlLiBUaGF0IHBhcnQgaXMgc3RyYWlnaHRmb3J3YXJkLiBOb3csIHRoZSByZWFsIHF1ZXN0aW9uIGlzIGFib3V0IGBGb2N1c1N5bWJvbHNgLiBMZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LgoKVGhlIHJ1bGVzIHNheSB0byBhdm9pZCB1YmlxdWl0b3VzIGZ1bmN0aW9ucywgdGhlIG9uZXMgY2FsbGVkIGV2ZXJ5d2hlcmUg4oCTIHRoaW5ncyBsaWtlIG1lbW9yeSBhbGxvY2F0b3JzLCBwYWdlIGZhdWx0IGhhbmRsZXJzLCBldGMuIFdlIG5lZWQgdG8gdGFyZ2V0IHNwZWNpZmljIGZlYXR1cmUgbG9naWMgb3IgZW50cnkgcG9pbnRzLiBUaGUgbW9kaWZpZWQgZnVuY3Rpb24gaXMgYF9fZF9hbGxvY2Agd2l0aGluIGBmcy9kY2FjaGUuY2AuCgpXYWl0LCBpcyBgX19kX2FsbG9jYCB1YmlxdWl0b3VzPyBJcyBpdCBhIGdlbmVyaWMgbWVtb3J5IGFsbG9jYXRvciBsaWtlIGBrbWFsbG9jYD8gTm8sIGl0JiMzOTtzIHNwZWNpZmljIHRvIHRoZSBkZW50cnkgY2FjaGUuIElzIGl0IGNhbGxlZCBieSAqZXZlcnkqIHByb2dyYW0/IEV2ZXJ5IHByb2dyYW0gb3BlbmluZyBhIGZpbGUgb3IgY3JlYXRpbmcgYSBwYXRoICptaWdodCogY2FsbCBpdCwgYnV0IG5vdCAqZXZlcnkqIHByb2dyYW0sIHVubGlrZSBga21hbGxvY2AsIHdoaWNoICppcyogdWJpcXVpdG91cy4KClRoZSBwYXRjaCBpdHNlbGYgZGVhbHMgd2l0aCBpbml0aWFsaXppbmcgdGhlIGlubGluZSBuYW1lIGJ1ZmZlciB1c2VkIGJ5IGBjb3B5X25hbWVgIGFuZCBgc3dhcF9uYW1lc2AgZHVyaW5nIGByZW5hbWVgLiBUaGUgcGF0Y2ggYXV0aG9yIGlzIG1vZGlmeWluZyBgX19kX2FsbG9jYC4gVGhlIGNoYW5nZSBpcyBpbiBgX19kX2FsbG9jYC4gQ2FuIHdlIGxpc3QgYF9fZF9hbGxvY2AgaW4gYEZvY3VzU3ltYm9sc2A/CgpgX19kX2FsbG9jYCBpcyBzdGF0aWMsIHdoaWNoIG1lYW5zIGl0IGFwcGVhcnMgaW4gYGthbGxzeW1zYCB1bmxlc3MgaW5saW5lZC4gSXQmIzM5O3Mgbm90IG1hcmtlZCBpbmxpbmUsIGFuZCBpdCYjMzk7cyA4MCBsaW5lcyBsb25nIGFuZCBjYWxsZWQgZnJvbSBmb3VyIHBsYWNlcywgc28gdGhlIGNvbXBpbGVyIHdpbGwga2VlcCBpdCBhcyBhbiBvdXQtb2YtbGluZSBmdW5jdGlvbi4KClNvLCB0aGUgcnVsZSBpcyB0byBsaXN0IHRoZSBleGFjdCBmdW5jdGlvbiBpbXBsZW1lbnRpbmcgdGhlIGNoYW5nZWQgbG9naWMsIHJpZ2h0PyBgX19kX2FsbG9jYCBpcyAqdGhlKiBmdW5jdGlvbiB3aGVyZSB0aGUgY29kZSB3YXMgY2hhbmdlZC4KCldoYXQgYWJvdXQgYGNvcHlfbmFtZWAgYW5kIGBzd2FwX25hbWVzYD8gVGhleSYjMzk7cmUgcmVsYXRlZCwgYnV0ICpub3QqIG1vZGlmaWVkIGJ5IHRoaXMgcGF0Y2ggZGlyZWN0bHkuIGBkX2FsbG9jYD8gTGV0JiMzOTtzIGNoZWNrIHdoZXJlIHRoYXQgaXMgdXNlZC4gSWYgYF9fZF9hbGxvY2AgaXMgKnRoZSogZnVuY3Rpb24sIGFuZCB3ZSBkb24mIzM5O3QgaW5jbHVkZSBpdCwgd2hhdCAqd291bGQqIHdlIGluY2x1ZGU/IGBfX2RfYWxsb2NgIGlzIHRoZSAqZXhhY3QqIHBsYWNlIHdoZXJlIHRoZSBidWcgaXMgYmVpbmcgZml4ZWQuCgpUaGUgaW5zdHJ1Y3Rpb24gd2FybnMgYWdhaW5zdCBsaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGJlY2F1c2UgaXQgZGlsdXRlcyB0aGUgZnV6emluZyBlZmZvcnQuIEJ1dCBpcyBgX19kX2FsbG9jYCB1YmlxdWl0b3VzIGluIHRoZSBzYW1lIHNlbnNlIGFzIGBrbWFsbG9jYD8gTm8hIENoYW5naW5nIGBrbWFsbG9jYCBjb3VsZCBtYWtlICpldmVyeSogc3l6a2FsbGVyIHByb2dyYW0gbWF0Y2guIGBfX2RfYWxsb2NgIGlzIHNwZWNpZmljIHRvIHRoZSBkY2FjaGUgVkZTLgoKU28sIHRoZSBrZXkgaXMgdGhpczogKlRoaXMgcGF0Y2ggbW9kaWZpZXMgYF9fZF9hbGxvY2AuKiBUaGF0JiMzOTtzIHdoYXQgdGhlIGZ1enppbmcgc2hvdWxkIGZvY3VzIG9uLiBUaGUgJiMzNDtzcGVjaWZpYyBmZWF0dXJlIGxvZ2ljJiMzNDsgYmVpbmcgYWx0ZXJlZCBpcyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYGRfc2hvcnRuYW1lYCBpbiBgX19kX2FsbG9jYC4gYF9fZF9hbGxvY2Agc3BlY2lmaWNhbGx5IGltcGxlbWVudHMgdGhlIGFsdGVyZWQgbG9naWMuCgpTbywgaXMgaXQgc2FmZSB0byBsaXN0IGBfX2RfYWxsb2NgPyBZZXMhIEl0IGlzIHRoZSBleGFjdCBmdW5jdGlvbi4gSXQgaGFzIGZvdXIgY2FsbCBzaXRlcyBhbmQgaXMgYmVpbmcgYWx0ZXJlZCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTU6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RnVsbHkgaW5pdGlhbGl6ZSB0aGUgaW5saW5lIG5hbWUgYnVmZmVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZGNhY2hlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZGNhY2hlLmM9MTkwMT1zdGF0aWMgc3RydWN0IGRlbnRyeSAqX19kX2FsbG9jKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lKVxuLS1cbmZzL2RjYWNoZS5jLTE5MTItXHQvKlxuZnMvZGNhY2hlLmM6MTkxMzpcdCAqIEZ1bGx5IGluaXRpYWxpemUgdGhlIGlubGluZSBuYW1lIGJ1ZmZlci4gIGNvcHlfbmFtZSgpIGFuZFxuZnMvZGNhY2hlLmMtMTkxNC1cdCAqIHN3YXBfbmFtZXMoKSBjb3B5IGRfc2hvcnRuYW1lIGluIGl0cyBlbnRpcmV0eSwgc28gYW55XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE1OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNjY2CgkJCQkJCQlvdXRwdXQ6IDEyNgoJCQkJCQkJdGhvdWdodHM6IDgzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWxseSBDcml0aWNhbCBLZXJuZWwgQnVnKioKCk9rYXksIGhlcmUmIzM5O3MgdGhlIHNpdHVhdGlvbi4gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kLCBpbnN0YW50bHksIGEgcmVkIGZsYWcgcG9wcyB1cC4gSW4gdGhlIG9yaWdpbmFsLCBlc3RhYmxpc2hlZCBMaW51eCBrZXJuZWwgY29kZSDigJMgbGV0JiMzOTtzIGFzc3VtZSBpdCYjMzk7cyBzb21ldGhpbmcgbGlrZSB3aGF0IEVyaWMgQmlnZ2VycywgTGludXMsIG9yIEFsIFZpcm8gd291bGQmIzM5O3ZlIGF1dGhvcmVkIOKAkyB3ZSBoYXZlOiBgbWVtc2V0KGRlbnRyeS0mZ3Q7ZF9zaG9ydG5hbWUuc3RyaW5nLCAwLCBETkFNRV9JTkxJTkVfTEVOKTtgLiBUaGF0JiMzOTtzIHN0YW5kYXJkIHByYWN0aWNlLCBpbml0aWFsaXppbmcgbWVtb3J5LiBCdXQgaW4gKnRoaXMqIHBhdGNoPyBTdWRkZW5seSwgaXQmIzM5O3MgYG1lbWNweShkZW50cnktJmd0O2Rfc2hvcnRuYW1lLnN0cmluZywgMCwgRE5BTUVfSU5MSU5FX0xFTik7YC4gVGhhdCYjMzk7cyBhIGRlbGliZXJhdGUgaW5qZWN0aW9uIG9mIGEgYnVnLCBvciBhbiBpbmNyZWRpYmx5IGNhcmVsZXNzIG1pc3Rha2UuCgpTcGVjaWZpY2FsbHksIHRoZSBzb3VyY2UgaW4gdGhhdCBgbWVtY3B5YCBpcyAqemVybyosIGVmZmVjdGl2ZWx5IGBtZW1jcHkoLi4uLCAwLCAuLi4pYCB3aGljaCB3aWxsIGF0dGVtcHQgdG8gZGVyZWZlcmVuY2UgYSBudWxsIHBvaW50ZXIhIFRoZSBpbnRlbnRpb24gd2FzIGNsZWFybHkgdG8gemVybyB0aGUgbWVtb3J5LCBidXQgdGhlIGBtZW1jcHlgIHdpdGggYSBOVUxMIHNvdXJjZSBtZWFucyB0aGlzIGlzIGdvaW5nIHRvIGJlIGEgZ3VhcmFudGVlZCBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2UsIGFzIHNvb24gYXMgdGhhdCBjb2RlIGlzIGV4ZWN1dGVkLiBDbGFzc2ljLCBvbGQtc2Nob29sIGJ1ZyBpbnRyb2R1Y2VkIGluIGEgcGF0Y2ggcmV2aWV3IHRlc3QsIEkmIzM5O2Qgc2F5LgoKTm93LCB3ZSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGlzIGlzIGV4cGxvaXRhYmxlLiBJcyBgX19kX2FsbG9jYCByZWFjaGFibGU/IEFic29sdXRlbHkuIGBkX2FsbG9jYCBhbmQgYGRfYWxsb2NfcGFyYWxsZWxgLCB3aGljaCBhcmUgY2FsbGVkIGJ5IGFueSBWRlMgbG9va3VwIG9yIGNyZWF0aW9uIG9wZXJhdGlvbiwgZXZlbnR1YWxseSBjYWxsIGBfX2RfYWxsb2NgLiBUaGlzIGlzIGNvcmUgVkZTIGNvZGUuIEFueSBmaWxlc3lzdGVtIHRyYXZlcnNhbCwgcm9vdCBtb3VudCwgb3IgYWNjZXNzIHRyaWdnZXJzIGBfX2RfYWxsb2NgLiBGdXp6aW5nIHdpbGwgaGl0IHRoaXMgaW1tZWRpYXRlbHkuCgpOZXh0LCB0aGUgZm9jdXMgc3ltYm9scy4gYF9fZF9hbGxvY2AgaXMgdGhlIGZ1bmN0aW9uICpjb250YWluaW5nKiB0aGUgbW9kaWZpZWQgY29kZS4gYGRfYWxsb2NgIGl0c2VsZiBpcyB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgZGVudHJ5IGFsbG9jYXRpb24uIEkgc2VlIGJvdGggYXJlIGV4Y2VsbGVudCBjaG9pY2VzLiBJIG1lYW4sIHRoZSBjcml0ZXJpYSBzcGVjaWZpZXMgdGhlICYjMzQ7bWFpbiBlbnRyeXBvaW50cyYjMzQ7LCBzby4uLiB3aHkgbm90IGluY2x1ZGUgYm90aD8gTGV0JiMzOTtzIGNoZWNrOiAmIzM0O0xpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cyBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4mIzM0OyBTbywgYm90aCBgX19kX2FsbG9jYCBhbmQgYGRfYWxsb2NgIGFyZSByZWxldmFudCwgYnV0IHRoZSBidWcgYWN0dWFsbHkgb2NjdXJzIGluIGBfX2RfYWxsb2NgLiBgX19kX2FsbG9jYCBpcyBwZXJmZWN0LiBUaGlzIGlzIHdoZXJlIHRoZSBjb2RlJiMzOTtzIG1vZGlmaWVkLiBJIGNhbiBpbmNsdWRlIGJvdGggYF9fZF9hbGxvY2AgYW5kIGBkX2FsbG9jYC4KCkFuZCB3aGF0IGFib3V0IGBkX2FsbG9jX3BhcmFsbGVsYCwgYGNvcHlfbmFtZWAsIGFuZCBgc3dhcF9uYW1lc2A/IE5vLiBUaGUgYnVnIGlzIGluIGBfX2RfYWxsb2NgIHNwZWNpZmljYWxseS4gSWYgSSBpbmNsdWRlIGBfX2RfYWxsb2NgLCBJJiMzOTt2ZSBnb3QgdGhlIGV4YWN0IGZ1bmN0aW9uIHdoZXJlIHRoZSBhbHRlcmF0aW9uIGlzLiBBbmQsIHllcywgYF9fZF9hbGxvY2AgKmNhbiogYmUgaW5jbHVkZWQhIEl0JiMzOTtzIHJpZ2h0IHRoZXJlLCBgc3RhdGljIHN0cnVjdCBkZW50cnkgKl9fZF9hbGxvYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSlgLiBXaXRoIEdDQy9DbGFuZyBhbmQgc3RhbmRhcmQga2VybmVsIGJ1aWxkIGZsYWdzLCBpdCYjMzk7cyBub24taW5saW5lZCBhbmQgc3RhdGljLCBzbyBpdCYjMzk7cyBhIHBlcmZlY3QgdGFyZ2V0LiBJbmNsdWRpbmcgYm90aCB3aWxsIGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlIGFuZCBpdHMgZW50cnkgcG9pbnQuCgpGaW5hbGx5LCBgRW5hYmxlQ29uZmlnc2AuIERvZXMgYF9fZF9hbGxvY2AgcmVseSBvbiBhbnkgbm9uLWRlZmF1bHQgY29uZmlndXJhdGlvbnM/IE5vIHdheS4gVkZTIGFuZCBkY2FjaGUgYXJlIGNvcmUsIGFsd2F5cyBjb21waWxlZCBpbi4gU28sIHRoYXQmIzM5O3MgZW1wdHk6IGBbXWAuCgpUbyBzdW1tYXJpemUgdGhlIGxvZ2ljOiAxLiBUaGUgcGF0Y2ggbWVzc2VzIHVwIGBfX2RfYWxsb2MoKWAgaW4gYGZzL2RjYWNoZS5jYC4gQXR0ZW1wdHMgdG8gaW5pdGlhbGl6ZSBgZF9zaG9ydG5hbWVgLCBidXQgaW50cm9kdWNlcyBhIG1lbW9yeSBjb3B5IGZyb20gTlVMTCBpbnN0ZWFkIG9mIHplcm9pbmcgdGhlIGJ1ZmZlciwgbGVhZGluZyB0byBhbiBpbW1lZGlhdGUgTlVMTCBkZXJlZmVyZW5jZS4gMi4gYF9fZF9hbGxvYygpYCBpcyBhdCB0aGUgaGVhcnQgb2YgdGhlIFZGUyBzdWJzeXN0ZW0sIGV4ZWN1dGVkIGR1cmluZyBkZW50cnkgYWxsb2NhdGlvbiBmb3IgcGF0aCBsb29rdXAgYW5kIGNyZWF0aW9uLiBJdCYjMzk7cyB1bmNvbmRpdGlvbmFsbHkgY29tcGlsZWQgYW5kIGVhc2lseSByZWFjaGVkIGluIHR5cGljYWwgZnV6emluZyBzZXR1cHMuIDMuIFZlcmRpY3Q6IGBXb3J0aEZ1enppbmcgPSB0cnVlYC4gNC4gV2UgZ28gd2l0aCB0aGVzZSBGb2N1c1N5bWJvbHM6IGBfX2RfYWxsb2NgLCBgZF9hbGxvY2AuIEFuZCB3aXRoIGVtcHR5IGBFbmFibGVDb25maWdzOiBbXWAuCgpBbHJpZ2h0LCBJJiMzOTttIGNvbmZpZGVudC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE1OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2RfYWxsb2MmIzM0OywKICAgICYjMzQ7ZF9hbGxvYyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBfX2RfYWxsb2MoKSBpbiBmcy9kY2FjaGUuYyB0byBpbml0aWFsaXplIHRoZSBpbmxpbmUgbmFtZSBidWZmZXIgKGRfc2hvcnRuYW1lKS4gSW4gZG9pbmcgc28sIGl0IGVycm9uZW91c2x5IHVzZXMgbWVtY3B5KCkgd2l0aCBhIE5VTEwgcG9pbnRlciAoMCkgYXMgdGhlIHNvdXJjZSBhZGRyZXNzIHJhdGhlciB0aGFuIG1lbXNldCgpLCB3aGljaCBjYXVzZXMgYSBrZXJuZWwgY3Jhc2gvTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIHVwb24gZGVudHJ5IGFsbG9jYXRpb24uIFRoaXMgbW9kaWZpZXMgY29yZSBWRlMgbG9naWMgdGhhdCBpcyBkaXJlY3RseSBhbmQgZWFzaWx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19kX2FsbG9jJiMzNDssCiAgICAmIzM0O2RfYWxsb2MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgX19kX2FsbG9jKCkgaW4gZnMvZGNhY2hlLmMgdG8gaW5pdGlhbGl6ZSB0aGUgaW5saW5lIG5hbWUgYnVmZmVyIChkX3Nob3J0bmFtZSkuIEluIGRvaW5nIHNvLCBpdCBlcnJvbmVvdXNseSB1c2VzIG1lbWNweSgpIHdpdGggYSBOVUxMIHBvaW50ZXIgKDApIGFzIHRoZSBzb3VyY2UgYWRkcmVzcyByYXRoZXIgdGhhbiBtZW1zZXQoKSwgd2hpY2ggY2F1c2VzIGEga2VybmVsIGNyYXNoL05VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSB1cG9uIGRlbnRyeSBhbGxvY2F0aW9uLiBUaGlzIG1vZGlmaWVzIGNvcmUgVkZTIGxvZ2ljIHRoYXQgaXMgZGlyZWN0bHkgYW5kIGVhc2lseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNTo1NDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE1OjU0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYF9fZF9hbGxvYygpYCBpbiBgZnMvZGNhY2hlLmNgLCBpbnRlbmRpbmcgdG8gZnVsbHkgaW5pdGlhbGl6ZSBgZGVudHJ5LVx1MDAzZWRfc2hvcnRuYW1lLnN0cmluZ2AuIEhvd2V2ZXIsIGl0IGVycm9uZW91c2x5IGNhbGxzIGBtZW1jcHkoZGVudHJ5LVx1MDAzZWRfc2hvcnRuYW1lLnN0cmluZywgMCwgRE5BTUVfSU5MSU5FX0xFTilgIGluc3RlYWQgb2YgYG1lbXNldCgpYC4gUGFzc2luZyBgMGAgKE5VTEwpIGFzIHRoZSBzb3VyY2UgcG9pbnRlciB0byBgbWVtY3B5KClgIGludHJvZHVjZXMgYW4gaW1tZWRpYXRlIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSB1cG9uIGRlbnRyeSBhbGxvY2F0aW9uLlxuXG5OVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFyZSBjYXVnaHQgaW1tZWRpYXRlbHkgYnkgc3RhbmRhcmQga2VybmVsIHBhZ2UgZmF1bHQgaGFuZGxpbmcgYW5kIEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZS4gRnVydGhlcm1vcmUsIGhhZCB0aGUgY2FsbCBjb3JyZWN0bHkgYmVlbiBgbWVtc2V0KClgLCBpdCB3b3VsZCBoYXZlIGluaXRpYWxpemVkIHRoZSBidWZmZXIgdG8gemVyb2VzLCBlbGltaW5hdGluZyB1bmluaXRpYWxpemVkIGRhdGEgcmF0aGVyIHRoYW4gY3JlYXRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFRoZXJlZm9yZSwgdGhpcyBjaGFuZ2UgZG9lcyBub3QganVzdGlmeSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiZjFlYTUyZmYwMzJkYTYwNjM0Zjc2M2NlZGY1OWUzOGVhNDMzODM5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBTZXAgMTMgMTU6NTM6MjcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9kY2FjaGUuYyBiL2ZzL2RjYWNoZS5jCmluZGV4IDFiMWE4MWYxMGRhNjcuLjJkZTFiYzc2ZGM4ZTkgMTAwNjQ0Ci0tLSBhL2ZzL2RjYWNoZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2RjYWNoZS5jCkBAIC0xOTEwLDEyICYjNDM7MTkxMCwxNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqX19kX2FsbG9jKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lKQogCQlyZXR1cm4gTlVMTDsKIAogCS8qCi0JICogV2UgZ3VhcmFudGVlIHRoYXQgdGhlIGlubGluZSBuYW1lIGlzIGFsd2F5cyBOVUwtdGVybWluYXRlZC4KLQkgKiBUaGlzIHdheSB0aGUgbWVtY3B5KCkgZG9uZSBieSB0aGUgbmFtZSBzd2l0Y2hpbmcgaW4gcmVuYW1lCi0JICogd2lsbCBzdGlsbCBhbHdheXMgaGF2ZSBhIE5VTCBhdCB0aGUgZW5kLCBldmVuIGlmIHdlIG1pZ2h0Ci0JICogYmUgb3ZlcndyaXRpbmcgYW4gaW50ZXJuYWwgTlVMIGNoYXJhY3RlcgomIzQzOwkgKiBGdWxseSBpbml0aWFsaXplIHRoZSBpbmxpbmUgbmFtZSBidWZmZXIuICBjb3B5X25hbWUoKSBhbmQKJiM0MzsJICogc3dhcF9uYW1lcygpIGNvcHkgZF9zaG9ydG5hbWUgaW4gaXRzIGVudGlyZXR5LCBzbyBhbnkKJiM0MzsJICogdW5pbml0aWFsaXplZCB0YWlsIHdvdWxkIHByb3BhZ2F0ZSB0byB0aGUgb3RoZXIgZGVudHJ5LCBhbmQKJiM0MzsJICogX19kX2xvb2t1cF9yY3UoKSBtYXkgdHJhbnNpZW50bHkgcmVhZCBhbnkgYnl0ZSBvZiB0aGUgaW5saW5lCiYjNDM7CSAqIG5hbWUgd2hpbGUgcmVuYW1lKCkgcmV3cml0ZXMgaXQgaW4gcGxhY2UuCiYjNDM7CSAqCiYjNDM7CSAqIFRoaXMgYWxzbyBrZWVwcyB0aGUgaW5saW5lIG5hbWUgTlVMLXRlcm1pbmF0ZWQ6IHRoZSBuYW1lCiYjNDM7CSAqIHN3aXRjaGluZyBpbiByZW5hbWUgd2lsbCBzdGlsbCBhbHdheXMgaGF2ZSBhIE5VTCBhdCB0aGUgZW5kLAomIzQzOwkgKiBldmVuIGlmIHdlIG1pZ2h0IGJlIG92ZXJ3cml0aW5nIGFuIGludGVybmFsIE5VTCBjaGFyYWN0ZXIuCiAJICovCi0JZGVudHJ5LSZndDtkX3Nob3J0bmFtZS5zdHJpbmdbRE5BTUVfSU5MSU5FX0xFTi0xXSA9IDA7CiYjNDM7CW1lbWNweShkZW50cnktJmd0O2Rfc2hvcnRuYW1lLnN0cmluZywgMCwgRE5BTUVfSU5MSU5FX0xFTik7CiAJaWYgKHVubGlrZWx5KCFuYW1lKSkgewogCQluYW1lID0gJmFtcDtzbGFzaF9uYW1lOwogCQlkbmFtZSA9IGRlbnRyeS0mZ3Q7ZF9zaG9ydG5hbWUuc3RyaW5nOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTU6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI5OQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDU4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbml0aWFsIENvbmNlcm5zIFJlZ2FyZGluZyBhIFBvdGVudGlhbCBCdWcqKgoKT2theSwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoaXMgcGF0Y2guIEl0IGFwcGVhcnMgdG8gYmUgaW5pdGlhbGl6aW5nIHRoZSBpbmxpbmUgbmFtZSBidWZmZXIgaW4gYF9fZF9hbGxvY2AuIFRoZSBjb2RlIGFpbXMgdG8gZW5zdXJlIHRoaXMgYnVmZmVyIGlzIGZ1bGx5IGluaXRpYWxpemVkLCB3aGljaCBtYWtlcyBzZW5zZSBnaXZlbiB0aGUgcG90ZW50aWFsIGZvciBkYXRhIHByb3BhZ2F0aW9uIGR1cmluZyBuYW1lIHN3aXRjaGluZywgYW5kIHRoZSB0cmFuc2llbnQgcmVhZHMgZHVyaW5nIGByZW5hbWVgLiBCdXQgd2FpdCBhIG1pbnV0ZS4uLiBJIHNlZSBhIGBtZW1jcHlgIGhlcmUsIGFuZCBzb21ldGhpbmcgaXMgaW1tZWRpYXRlbHkgcmFpc2luZyBhIHJlZCBmbGFnLgoKTXkgZXhwZXJ0IGludHVpdGlvbiBraWNrcyBpbiBhbmQgc29tZXRoaW5nIGRvZXNuJiMzOTt0IGZlZWwgcmlnaHQgYWJvdXQgdGhpcy4gSSYjMzk7bSBzZWVpbmcgYG1lbWNweShkZW50cnktJmd0O2Rfc2hvcnRuYW1lLnN0cmluZywgMCwgRE5BTUVfSU5MSU5FX0xFTik7YC4gVGhhdCBsb29rcyBzdXNwaWNpb3VzLiBgbWVtY3B5YCB0YWtlcyBhIGRlc3RpbmF0aW9uLCBhIHNvdXJjZSwgYW5kIGEgc2l6ZS4gVGhlIHNvdXJjZSBzaG91bGQgYmUgYSB2YWxpZCBtZW1vcnkgYWRkcmVzcyB0byBjb3B5ICpmcm9tKi4gQnV0IHRoZSBzZWNvbmQgYXJndW1lbnQsIGAwYD8gVGhhdCYjMzk7cy4uLiBwb3RlbnRpYWxseSBOVUxMLiBJZiBgbWVtY3B5YCBkZXJlZmVyZW5jZXMgYSBOVUxMIHBvaW50ZXIsIHRoYXQmIzM5O3MgZ29pbmcgdG8gY2F1c2UgYSBjcmFzaCwgcmlnaHQ/IE9yIGF0IHRoZSB2ZXJ5IGxlYXN0LCB1bmRlZmluZWQgYmVoYXZpb3IgdGhhdCYjMzk7cyBhbG1vc3QgYXMgYmFkPyBJIG5lZWQgdG8gdmVyaWZ5IHdoYXQgaXMgZ29pbmcgb24gaGVyZS4gSSBuZWVkIHRvIGtub3cgd2h5IHRoaXMgaXNuJiMzOTt0IGBtZW1zZXRgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgYG1lbWNweWAgaXMgYWN0dWFsbHkgKnRyeWluZyogdG8gZG8uIEkgbmVlZCB0byBnbyBiYWNrIGFuZCBjaGVjayB0aGUgY29kZSwgcmlnaHQgYXJvdW5kIGxpbmUgMTkxMCBpbiBgZnMvZGNhY2hlLmNgIGFuZCBmaWd1cmUgb3V0IHdoYXQgdGhlIGludGVudCBpcyBhbmQsIGNyaXRpY2FsbHksIGlmIHRoaXMgaXMgZ29pbmcgdG8gY2F1c2UgYSBjcml0aWNhbCBzZWN1cml0eSBmYXVsdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTU6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9kY2FjaGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTkwMDpcdCBcbjE5MDE6XHRzdGF0aWMgc3RydWN0IGRlbnRyeSAqX19kX2FsbG9jKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lKVxuMTkwMjpcdHtcbjE5MDM6XHRcdHN0cnVjdCBkZW50cnkgKmRlbnRyeTtcbjE5MDQ6XHRcdGNoYXIgKmRuYW1lO1xuMTkwNTpcdFx0aW50IGVycjtcbjE5MDY6XHRcbjE5MDc6XHRcdGRlbnRyeSA9IGttZW1fY2FjaGVfYWxsb2NfbHJ1KGRlbnRyeV9jYWNoZSwgXHUwMDI2c2ItXHUwMDNlc19kZW50cnlfbHJ1LFxuMTkwODpcdFx0XHRcdFx0ICAgICAgR0ZQX0tFUk5FTCk7XG4xOTA5Olx0XHRpZiAoIWRlbnRyeSlcbjE5MTA6XHRcdFx0cmV0dXJuIE5VTEw7XG4xOTExOlx0XG4xOTEyOlx0XHQvKlxuMTkxMzpcdFx0ICogRnVsbHkgaW5pdGlhbGl6ZSB0aGUgaW5saW5lIG5hbWUgYnVmZmVyLiAgY29weV9uYW1lKCkgYW5kXG4xOTE0Olx0XHQgKiBzd2FwX25hbWVzKCkgY29weSBkX3Nob3J0bmFtZSBpbiBpdHMgZW50aXJldHksIHNvIGFueVxuMTkxNTpcdFx0ICogdW5pbml0aWFsaXplZCB0YWlsIHdvdWxkIHByb3BhZ2F0ZSB0byB0aGUgb3RoZXIgZGVudHJ5LCBhbmRcbjE5MTY6XHRcdCAqIF9fZF9sb29rdXBfcmN1KCkgbWF5IHRyYW5zaWVudGx5IHJlYWQgYW55IGJ5dGUgb2YgdGhlIGlubGluZVxuMTkxNzpcdFx0ICogbmFtZSB3aGlsZSByZW5hbWUoKSByZXdyaXRlcyBpdCBpbiBwbGFjZS5cbjE5MTg6XHRcdCAqXG4xOTE5Olx0XHQgKiBUaGlzIGFsc28ga2VlcHMgdGhlIGlubGluZSBuYW1lIE5VTC10ZXJtaW5hdGVkOiB0aGUgbmFtZVxuMTkyMDpcdFx0ICogc3dpdGNoaW5nIGluIHJlbmFtZSB3aWxsIHN0aWxsIGFsd2F5cyBoYXZlIGEgTlVMIGF0IHRoZSBlbmQsXG4xOTIxOlx0XHQgKiBldmVuIGlmIHdlIG1pZ2h0IGJlIG92ZXJ3cml0aW5nIGFuIGludGVybmFsIE5VTCBjaGFyYWN0ZXIuXG4xOTIyOlx0XHQgKi9cbjE5MjM6XHRcdG1lbWNweShkZW50cnktXHUwMDNlZF9zaG9ydG5hbWUuc3RyaW5nLCAwLCBETkFNRV9JTkxJTkVfTEVOKTtcbjE5MjQ6XHRcdGlmICh1bmxpa2VseSghbmFtZSkpIHtcbjE5MjU6XHRcdFx0bmFtZSA9IFx1MDAyNnNsYXNoX25hbWU7XG4xOTI2Olx0XHRcdGRuYW1lID0gZGVudHJ5LVx1MDAzZWRfc2hvcnRuYW1lLnN0cmluZztcbjE5Mjc6XHRcdH0gZWxzZSBpZiAobmFtZS1cdTAwM2VsZW4gXHUwMDNlIEROQU1FX0lOTElORV9MRU4tMSkge1xuMTkyODpcdFx0XHRzdHJ1Y3QgZXh0ZXJuYWxfbmFtZSAqcDtcbjE5Mjk6XHRcbjE5MzA6XHRcdFx0cCA9IGttYWxsb2NfZmxleCgqcCwgbmFtZSwgbmFtZS1cdTAwM2VsZW4gJiM0MzsgMSxcbjE5MzE6XHRcdFx0XHRcdCBHRlBfS0VSTkVMX0FDQ09VTlQgfCBfX0dGUF9SRUNMQUlNQUJMRSk7XG4xOTMyOlx0XHRcdGlmICghcCkge1xuMTkzMzpcdFx0XHRcdGttZW1fY2FjaGVfZnJlZShkZW50cnlfY2FjaGUsIGRlbnRyeSk7IFxuMTkzNDpcdFx0XHRcdHJldHVybiBOVUxMO1xuMTkzNTpcdFx0XHR9XG4xOTM2Olx0XHRcdGF0b21pY19zZXQoXHUwMDI2cC1cdTAwM2Vjb3VudCwgMSk7XG4xOTM3Olx0XHRcdGRuYW1lID0gcC1cdTAwM2VuYW1lO1xuMTkzODpcdFx0fSBlbHNlICB7XG4xOTM5Olx0XHRcdGRuYW1lID0gZGVudHJ5LVx1MDAzZWRfc2hvcnRuYW1lLnN0cmluZztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTU6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg4NQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSYjMzk7cmUgbXkgb3duOgoKKipEaXZpbmcgRGVlcGVyIGludG8gYF9fZF9hbGxvY2AqKgoKUmlnaHQsIGhvbGQgb24gYSBzZWNvbmQuIEkgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhpcyBgX19kX2FsbG9jYCBmdW5jdGlvbi4gSSBpbml0aWFsbHkgZ2xhbmNlZCBhdCBpdCwgYnV0IEkmIzM5O20gc2Vuc2luZyB0aGVyZSYjMzk7cyBtb3JlIG51YW5jZSBoZXJlIHRoYW4gSSBpbml0aWFsbHkgZ3Jhc3BlZC4gSXQmIzM5O3MgYSBjcml0aWNhbCBmdW5jdGlvbiwgb2J2aW91c2x5LCBqdWRnaW5nIGJ5IGl0cyBuYW1lLCBhbmQgSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucy4gSSYjMzk7bSBub3QganVzdCBnb2luZyB0byBza2ltIG92ZXIgaXQg4oCTIEkgbmVlZCB0byByZWFsbHkgZGlnIGludG8gdGhlIGRldGFpbHMgdG8gc2VlIGhvdyBpdCB3b3Jrcywgd2hhdCBlZGdlIGNhc2VzIGl0IGhhbmRsZXMsIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIGFsbG9jYXRpb24gc3RyYXRlZ3kgb2YgdGhpcyBzeXN0ZW0uIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCBkaXNzZWN0IHRoaXMgY3J1Y2lhbCBwaWVjZSBvZiBjb2RlLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgcmVhbGx5IGdvaW5nIG9uIHVuZGVyIHRoZSBob29kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2RjYWNoZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTk0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxOTQwOlx0XHR9XHRcbjE5NDE6XHRcbjE5NDI6XHRcdGRlbnRyeS1cdTAwM2VfX2RfbmFtZS5sZW4gPSBuYW1lLVx1MDAzZWxlbjtcbjE5NDM6XHRcdGRlbnRyeS1cdTAwM2VfX2RfbmFtZS5oYXNoID0gbmFtZS1cdTAwM2VoYXNoO1xuMTk0NDpcdFx0bWVtY3B5KGRuYW1lLCBuYW1lLVx1MDAzZW5hbWUsIG5hbWUtXHUwMDNlbGVuKTtcbjE5NDU6XHRcdGRuYW1lW25hbWUtXHUwMDNlbGVuXSA9IDA7XG4xOTQ2Olx0XG4xOTQ3Olx0XHQvKiBNYWtlIHN1cmUgd2UgYWx3YXlzIHNlZSB0aGUgdGVybWluYXRpbmcgTlVMIGNoYXJhY3RlciAqL1xuMTk0ODpcdFx0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2ZGVudHJ5LVx1MDAzZV9fZF9uYW1lLm5hbWUsIGRuYW1lKTsgLyogXl5eICovXG4xOTQ5Olx0XG4xOTUwOlx0XHRkZW50cnktXHUwMDNlZF9mbGFncyA9IDA7XG4xOTUxOlx0XHRsb2NrcmVmX2luaXQoXHUwMDI2ZGVudHJ5LVx1MDAzZWRfbG9ja3JlZik7XG4xOTUyOlx0XHRzZXFjb3VudF9zcGlubG9ja19pbml0KFx1MDAyNmRlbnRyeS1cdTAwM2VkX3NlcSwgXHUwMDI2ZGVudHJ5LVx1MDAzZWRfbG9jayk7XG4xOTUzOlx0XHRkZW50cnktXHUwMDNlZF9pbm9kZSA9IE5VTEw7XG4xOTU0Olx0XHRkZW50cnktXHUwMDNlZF9wYXJlbnQgPSBkZW50cnk7XG4xOTU1Olx0XHRkZW50cnktXHUwMDNlZF9zYiA9IHNiO1xuMTk1NjpcdFx0ZGVudHJ5LVx1MDAzZWRfb3AgPSBzYi1cdTAwM2VfX3NfZF9vcDtcbjE5NTc6XHRcdGRlbnRyeS1cdTAwM2VkX2ZsYWdzID0gc2ItXHUwMDNlc19kX2ZsYWdzO1xuMTk1ODpcdFx0ZGVudHJ5LVx1MDAzZWRfZnNkYXRhID0gTlVMTDtcbjE5NTk6XHRcdElOSVRfSExJU1RfQkxfTk9ERShcdTAwMjZkZW50cnktXHUwMDNlZF9oYXNoKTtcbjE5NjA6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNmRlbnRyeS1cdTAwM2VkX2xydSk7XG4xOTYxOlx0XHRJTklUX0hMSVNUX0hFQUQoXHUwMDI2ZGVudHJ5LVx1MDAzZWRfY2hpbGRyZW4pO1xuMTk2MjpcdFx0ZGVudHJ5LVx1MDAzZXdhaXRlcnMgPSBOVUxMO1xuMTk2MzpcdFx0SU5JVF9ITElTVF9OT0RFKFx1MDAyNmRlbnRyeS1cdTAwM2VkX3NpYik7XG4xOTY0Olx0XG4xOTY1Olx0XHRpZiAoZGVudHJ5LVx1MDAzZWRfb3AgXHUwMDI2XHUwMDI2IGRlbnRyeS1cdTAwM2VkX29wLVx1MDAzZWRfaW5pdCkge1xuMTk2NjpcdFx0XHRlcnIgPSBkZW50cnktXHUwMDNlZF9vcC1cdTAwM2VkX2luaXQoZGVudHJ5KTtcbjE5Njc6XHRcdFx0aWYgKGVycikge1xuMTk2ODpcdFx0XHRcdGlmIChkbmFtZV9leHRlcm5hbChkZW50cnkpKVxuMTk2OTpcdFx0XHRcdFx0a2ZyZWUoZXh0ZXJuYWxfbmFtZShkZW50cnkpKTtcbjE5NzA6XHRcdFx0XHRrbWVtX2NhY2hlX2ZyZWUoZGVudHJ5X2NhY2hlLCBkZW50cnkpO1xuMTk3MTpcdFx0XHRcdHJldHVybiBOVUxMO1xuMTk3MjpcdFx0XHR9XG4xOTczOlx0XHR9XG4xOTc0Olx0XG4xOTc1Olx0XHR0aGlzX2NwdV9pbmMobnJfZGVudHJ5KTtcbjE5NzY6XHRcbjE5Nzc6XHRcdHJldHVybiBkZW50cnk7XG4xOTc4Olx0fVxuMTk3OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNTo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0Nzc0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBBdXRob3ImIzM5O3MgSW50ZW50IGFuZCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoaXMuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpczogd2hhdCB3YXMgdGhlICppbnRlbmRlZCogb3V0Y29tZSBvZiB0aGlzIGNoYW5nZSwgY29tcGFyZWQgdG8gd2hhdCB0aGUgYXV0aG9yIGFjdHVhbGx5ICppbXBsZW1lbnRlZCo/IEkgaGF2ZSB0byB1bmRlcnN0YW5kIHRoZSBnYXAsIG9yIGlmIHRoZXJlIGlzIG9uZS4KCkhvbGQgb24gYSBzZWNvbmQuLi4gYmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIHRoZSBjb2RlLCBsZXQmIzM5O3Mgc2VlIGlmIHRoZXJlJiMzOTtzIGFuIGVhc2llciBwYXRoLiBJIHdvbmRlciBpZiB0aGVyZSYjMzk7cyBhIGhhbmR5IGNvbW1pdCBtZXNzYWdlIG9yIGEgY2xlYW4gaGlzdG9yeSByZWxhdGVkIHRvIHRoaXMgYXJlYS4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgdGhlIGBnaXQgbG9nYC4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBmb2N1cyBvbiB0aGUgYGZzL2RjYWNoZS5jYCBmaWxlLiBJJiMzOTtsbCBzZWFyY2ggaXRzIGhpc3RvcnkuIEFuZCBqdXN0IHRvIGJlIHRob3JvdWdoLCBJJiMzOTtsbCBgZ3JlcGAgZm9yIHNwZWNpZmljIGtleXdvcmRzIHdpdGhpbiB0aGF0IGZpbGU6IGBjb3B5X25hbWVgIGFuZCBgc3dhcF9uYW1lc2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IGFuZCBhbnkgcmVsYXRlZCBjaGFuZ2VzLiBIb3BlZnVsbHksIHRoZSBjb21taXQgbWVzc2FnZXMgd2lsbCBwcm92aWRlIHNvbWUgY2xhcml0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTU6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZF9zaG9ydG5hbWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9kY2FjaGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9kY2FjaGUuYz0zNTY9c3RhdGljIGlubGluZSBpbnQgZG5hbWVfZXh0ZXJuYWwoY29uc3Qgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuZnMvZGNhY2hlLmMtMzU3LXtcbmZzL2RjYWNoZS5jOjM1ODpcdHJldHVybiBkZW50cnktXHUwMDNlZF9uYW1lLm5hbWUgIT0gZGVudHJ5LVx1MDAzZWRfc2hvcnRuYW1lLnN0cmluZztcbmZzL2RjYWNoZS5jLTM1OS19XG4tLVxuZnMvZGNhY2hlLmM9MzYxPXZvaWQgdGFrZV9kZW50cnlfbmFtZV9zbmFwc2hvdChzdHJ1Y3QgbmFtZV9zbmFwc2hvdCAqbmFtZSwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuLS1cbmZzL2RjYWNoZS5jLTM3MS1cdG5hbWUtXHUwMDNlbmFtZS5uYW1lID0gbmFtZS1cdTAwM2VpbmxpbmVfbmFtZS5zdHJpbmc7XG5mcy9kY2FjaGUuYzozNzI6XHRpZiAobGlrZWx5KHMgPT0gZGVudHJ5LVx1MDAzZWRfc2hvcnRuYW1lLnN0cmluZykpIHtcbmZzL2RjYWNoZS5jOjM3MzpcdFx0bmFtZS1cdTAwM2VpbmxpbmVfbmFtZSA9IGRlbnRyeS1cdTAwM2VkX3Nob3J0bmFtZTtcbmZzL2RjYWNoZS5jLTM3NC1cdH0gZWxzZSB7XG4tLVxuZnMvZGNhY2hlLmM9MTkwMT1zdGF0aWMgc3RydWN0IGRlbnRyeSAqX19kX2FsbG9jKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lKVxuLS1cbmZzL2RjYWNoZS5jLTE5MTMtXHQgKiBGdWxseSBpbml0aWFsaXplIHRoZSBpbmxpbmUgbmFtZSBidWZmZXIuICBjb3B5X25hbWUoKSBhbmRcbmZzL2RjYWNoZS5jOjE5MTQ6XHQgKiBzd2FwX25hbWVzKCkgY29weSBkX3Nob3J0bmFtZSBpbiBpdHMgZW50aXJldHksIHNvIGFueVxuZnMvZGNhY2hlLmMtMTkxNS1cdCAqIHVuaW5pdGlhbGl6ZWQgdGFpbCB3b3VsZCBwcm9wYWdhdGUgdG8gdGhlIG90aGVyIGRlbnRyeSwgYW5kXG4tLVxuZnMvZGNhY2hlLmMtMTkyMi1cdCAqL1xuZnMvZGNhY2hlLmM6MTkyMzpcdG1lbWNweShkZW50cnktXHUwMDNlZF9zaG9ydG5hbWUuc3RyaW5nLCAwLCBETkFNRV9JTkxJTkVfTEVOKTtcbmZzL2RjYWNoZS5jLTE5MjQtXHRpZiAodW5saWtlbHkoIW5hbWUpKSB7XG5mcy9kY2FjaGUuYy0xOTI1LVx0XHRuYW1lID0gXHUwMDI2c2xhc2hfbmFtZTtcbmZzL2RjYWNoZS5jOjE5MjY6XHRcdGRuYW1lID0gZGVudHJ5LVx1MDAzZWRfc2hvcnRuYW1lLnN0cmluZztcbmZzL2RjYWNoZS5jLTE5MjctXHR9IGVsc2UgaWYgKG5hbWUtXHUwMDNlbGVuIFx1MDAzZSBETkFNRV9JTkxJTkVfTEVOLTEpIHtcbi0tXG5mcy9kY2FjaGUuYy0xOTM4LVx0fSBlbHNlICB7XG5mcy9kY2FjaGUuYzoxOTM5Olx0XHRkbmFtZSA9IGRlbnRyeS1cdTAwM2VkX3Nob3J0bmFtZS5zdHJpbmc7XG5mcy9kY2FjaGUuYy0xOTQwLVx0fVx0XG4tLVxuZnMvZGNhY2hlLmM9Mjk5ND1zdGF0aWMgdm9pZCBzd2FwX25hbWVzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGRlbnRyeSAqdGFyZ2V0KVxuLS1cbmZzL2RjYWNoZS5jLTMwMDctXHRcdFx0ZGVudHJ5LVx1MDAzZV9fZF9uYW1lLm5hbWUgPSB0YXJnZXQtXHUwMDNlX19kX25hbWUubmFtZTtcbmZzL2RjYWNoZS5jOjMwMDg6XHRcdFx0dGFyZ2V0LVx1MDAzZWRfc2hvcnRuYW1lID0gZGVudHJ5LVx1MDAzZWRfc2hvcnRuYW1lO1xuZnMvZGNhY2hlLmM6MzAwOTpcdFx0XHR0YXJnZXQtXHUwMDNlX19kX25hbWUubmFtZSA9IHRhcmdldC1cdTAwM2VkX3Nob3J0bmFtZS5zdHJpbmc7XG5mcy9kY2FjaGUuYy0zMDEwLVx0XHR9XG4tLVxuZnMvZGNhY2hlLmMtMzAxNy1cdFx0XHR0YXJnZXQtXHUwMDNlX19kX25hbWUubmFtZSA9IGRlbnRyeS1cdTAwM2VfX2RfbmFtZS5uYW1lO1xuZnMvZGNhY2hlLmM6MzAxODpcdFx0XHRkZW50cnktXHUwMDNlZF9zaG9ydG5hbWUgPSB0YXJnZXQtXHUwMDNlZF9zaG9ydG5hbWU7XG5mcy9kY2FjaGUuYzozMDE5Olx0XHRcdGRlbnRyeS1cdTAwM2VfX2RfbmFtZS5uYW1lID0gZGVudHJ5LVx1MDAzZWRfc2hvcnRuYW1lLnN0cmluZztcbmZzL2RjYWNoZS5jLTMwMjAtXHRcdH0gZWxzZSB7XG4tLVxuZnMvZGNhY2hlLmMtMzAyNC1cdFx0XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgRE5BTUVfSU5MSU5FX1dPUkRTOyBpJiM0MzsmIzQzOylcbmZzL2RjYWNoZS5jOjMwMjU6XHRcdFx0XHRzd2FwKGRlbnRyeS1cdTAwM2VkX3Nob3J0bmFtZS53b3Jkc1tpXSxcbmZzL2RjYWNoZS5jOjMwMjY6XHRcdFx0XHQgICAgIHRhcmdldC1cdTAwM2VkX3Nob3J0bmFtZS53b3Jkc1tpXSk7XG5mcy9kY2FjaGUuYy0zMDI3LVx0XHR9XG4tLVxuZnMvZGNhY2hlLmM9MzAzMj1zdGF0aWMgdm9pZCBjb3B5X25hbWUoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZGVudHJ5ICp0YXJnZXQpXG4tLVxuZnMvZGNhY2hlLmMtMzA0MC1cdH0gZWxzZSB7XG5mcy9kY2FjaGUuYzozMDQxOlx0XHRkZW50cnktXHUwMDNlZF9zaG9ydG5hbWUgPSB0YXJnZXQtXHUwMDNlZF9zaG9ydG5hbWU7XG5mcy9kY2FjaGUuYzozMDQyOlx0XHRkZW50cnktXHUwMDNlX19kX25hbWUubmFtZSA9IGRlbnRyeS1cdTAwM2VkX3Nob3J0bmFtZS5zdHJpbmc7XG5mcy9kY2FjaGUuYy0zMDQzLVx0XHRkZW50cnktXHUwMDNlX19kX25hbWUuaGFzaF9sZW4gPSB0YXJnZXQtXHUwMDNlX19kX25hbWUuaGFzaF9sZW47XG4tLVxuZnMvZGNhY2hlLmM9MzM2OT12b2lkIGRfbWFya190bXBmaWxlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2RjYWNoZS5jLTMzNzctXHRzcGluX2xvY2tfbmVzdGVkKFx1MDAyNmRlbnRyeS1cdTAwM2VkX2xvY2ssIERFTlRSWV9EX0xPQ0tfTkVTVEVEKTtcbmZzL2RjYWNoZS5jOjMzNzg6XHRkZW50cnktXHUwMDNlX19kX25hbWUubGVuID0gc3ByaW50ZihkZW50cnktXHUwMDNlZF9zaG9ydG5hbWUuc3RyaW5nLCBcJiMzNDsjJWxsdVwmIzM0OyxcbmZzL2RjYWNoZS5jLTMzNzktXHRcdFx0XHQodW5zaWduZWQgbG9uZyBsb25nKWlub2RlLVx1MDAzZWlfaW5vKTtcbi0tXG5mcy9kY2FjaGUuYz0zMzg1PWludCBkX21hcmtfdG1wZmlsZV9uYW1lKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSlcbi0tXG5mcy9kY2FjaGUuYy0zMzg3LVx0c3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gZmlsZS1cdTAwM2VmX3BhdGguZGVudHJ5O1xuZnMvZGNhY2hlLmM6MzM4ODpcdGNoYXIgKmRuYW1lID0gZGVudHJ5LVx1MDAzZWRfc2hvcnRuYW1lLnN0cmluZztcbmZzL2RjYWNoZS5jLTMzODktXG4tLVxuZnMvZGNhY2hlLmM9MzQ3Nz1zdGF0aWMgdm9pZCBfX2luaXQgZGNhY2hlX2luaXQodm9pZClcbi0tXG5mcy9kY2FjaGUuYy0zNDg1LVx0XHRTTEFCX1JFQ0xBSU1fQUNDT1VOVHxTTEFCX1BBTklDfFNMQUJfQUNDT1VOVCxcbmZzL2RjYWNoZS5jOjM0ODY6XHRcdGRfc2hvcnRuYW1lLnN0cmluZyk7XG5mcy9kY2FjaGUuYy0zNDg3LVx0cnVudGltZV9jb25zdF9pbml0KHB0ciwgX19kZW50cnlfY2FjaGUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNTo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTE0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipEaXZpbmcgRGVlcCBpbnRvIHRoZSBEY2FjaGUgSW5pdGlhbGl6YXRpb24qKgoKQWxyaWdodCwgbXkgZm9jdXMgaXMgbGFzZXItdGFyZ2V0ZWQgb24gbGluZSAzNDg1LTM0ODYg4oCTIHNvbWV0aGluZyBoYXMgY2F1Z2h0IG15IGV5ZS4gQWgsIHRoZXJlIGl0IGlzOiBgZGNhY2hlX2luaXRgLiBUaGF0JiMzOTtzIGEga2V5IGZ1bmN0aW9uIGZvciBpbml0aWFsaXppbmcgdGhlIGRjYWNoZSwgc28gaXQmIzM5O3Mgd29ydGggYSBjbG9zZXIgbG9vay4gVG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dCBmdWxseSwgSSBzaG91bGQgem9vbSBvdXQgYW5kIGV4YW1pbmUgYSBzdXJyb3VuZGluZyBibG9jayBvZiBjb2RlLiBMaW5lcyAzNDcwLTM1MDAgd2l0aGluIGBmcy9kY2FjaGUuY2Agc2hvdWxkIGdpdmUgbWUgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiBvbiB0aGUgZGNhY2hlIGluaXRpYWxpemF0aW9uLiBUaW1lIHRvIGRlbHZlIGludG8gdGhvc2UgbGluZXMgYW5kIHNlZSBob3cgdGhlIGRjYWNoZSBpcyBzZXQgdXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE1OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZGNhY2hlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNDcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM0NzA6XHRcdFx0XHRcdFx0MCk7XG4zNDcxOlx0XHRkX2hhc2hfc2hpZnQgPSAzMiAtIGRfaGFzaF9zaGlmdDtcbjM0NzI6XHRcbjM0NzM6XHRcdHJ1bnRpbWVfY29uc3RfaW5pdChzaGlmdCwgZF9oYXNoX3NoaWZ0KTtcbjM0NzQ6XHRcdHJ1bnRpbWVfY29uc3RfaW5pdChwdHIsIGRlbnRyeV9oYXNodGFibGUpO1xuMzQ3NTpcdH1cbjM0NzY6XHRcbjM0Nzc6XHRzdGF0aWMgdm9pZCBfX2luaXQgZGNhY2hlX2luaXQodm9pZClcbjM0Nzg6XHR7XG4zNDc5Olx0XHQvKlxuMzQ4MDpcdFx0ICogQSBjb25zdHJ1Y3RvciBjb3VsZCBiZSBhZGRlZCBmb3Igc3RhYmxlIHN0YXRlIGxpa2UgdGhlIGxpc3RzLFxuMzQ4MTpcdFx0ICogYnV0IGl0IGlzIHByb2JhYmx5IG5vdCB3b3J0aCBpdCBiZWNhdXNlIG9mIHRoZSBjYWNoZSBuYXR1cmVcbjM0ODI6XHRcdCAqIG9mIHRoZSBkY2FjaGUuXG4zNDgzOlx0XHQgKi9cbjM0ODQ6XHRcdF9fZGVudHJ5X2NhY2hlID0gS01FTV9DQUNIRV9VU0VSQ09QWShkZW50cnksXG4zNDg1Olx0XHRcdFNMQUJfUkVDTEFJTV9BQ0NPVU5UfFNMQUJfUEFOSUN8U0xBQl9BQ0NPVU5ULFxuMzQ4NjpcdFx0XHRkX3Nob3J0bmFtZS5zdHJpbmcpO1xuMzQ4NzpcdFx0cnVudGltZV9jb25zdF9pbml0KHB0ciwgX19kZW50cnlfY2FjaGUpO1xuMzQ4ODpcdFxuMzQ4OTpcdFx0LyogSGFzaCBtYXkgaGF2ZSBiZWVuIHNldCB1cCBpbiBkY2FjaGVfaW5pdF9lYXJseSAqL1xuMzQ5MDpcdFx0aWYgKCFoYXNoZGlzdClcbjM0OTE6XHRcdFx0cmV0dXJuO1xuMzQ5MjpcdFxuMzQ5MzpcdFx0ZGVudHJ5X2hhc2h0YWJsZSA9XG4zNDk0Olx0XHRcdGFsbG9jX2xhcmdlX3N5c3RlbV9oYXNoKFwmIzM0O0RlbnRyeSBjYWNoZVwmIzM0OyxcbjM0OTU6XHRcdFx0XHRcdFx0c2l6ZW9mKHN0cnVjdCBobGlzdF9ibF9oZWFkKSxcbjM0OTY6XHRcdFx0XHRcdFx0ZGhhc2hfZW50cmllcyxcbjM0OTc6XHRcdFx0XHRcdFx0MTMsXG4zNDk4Olx0XHRcdFx0XHRcdEhBU0hfWkVSTyxcbjM0OTk6XHRcdFx0XHRcdFx0XHUwMDI2ZF9oYXNoX3NoaWZ0LFxuMzUwMDpcdFx0XHRcdFx0XHROVUxMLFxuMzUwMTpcdFx0XHRcdFx0XHQyLFxuMzUwMjpcdFx0XHRcdFx0XHQwKTtcbjM1MDM6XHRcdGRfaGFzaF9zaGlmdCA9IDMyIC0gZF9oYXNoX3NoaWZ0O1xuMzUwNDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNTo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MjUzCgkJCQkJCQlvdXRwdXQ6IDIwNAoJCQkJCQkJdGhvdWdodHM6IDQwOTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIERlbnRyeSBBbGxvY2F0aW9uIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoaXMgZGlmZiBpcyBtb2RpZnlpbmcgYGZzL2RjYWNoZS5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgX19kX2FsbG9jYCBmdW5jdGlvbiwgd2hpY2ggaXMgcmVzcG9uc2libGUgZm9yIGFsbG9jYXRpbmcgZGVudHJpZXMuIFRoZSBjcnVjaWFsIHBhcnQgb2YgdGhpcyBwYXRjaCBpbnZvbHZlcyBpbml0aWFsaXppbmcgdGhlIGlubGluZSBuYW1lIGJ1ZmZlciAoYGRlbnRyeS0mZ3Q7ZF9zaG9ydG5hbWUuc3RyaW5nYCkuIFRoZSBvcmlnaW5hbCBjb2RlIGp1c3QgbnVsbC10ZXJtaW5hdGVkIG9uZSBieXRlIGFuZCBpdCBsb29rcyBsaWtlIHRoZXJlIHdhcyB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiB0aGlzIGJ1ZmZlci4KClRoZSBvcmlnaW5hbCBjb2RlIGxvb2tzIGxpa2UgaXQgd2FzIHRyeWluZyB0byBmaXggYSBwb3RlbnRpYWwgaXNzdWUgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiB0aGUgZGVudHJ5JiMzOTtzIGlubGluZSBuYW1lIGJ1ZmZlci4gVGhlIGNvbW1lbnQgY2xlYXJseSBpbmRpY2F0ZXMgYW4gaW50ZW50IHRvICpmdWxseSogaW5pdGlhbGl6ZSB0aGUgYnVmZmVyIHRvIHByZXZlbnQgcG90ZW50aWFsbHkgcHJvcGFnYXRpbmcgdW5pbml0aWFsaXplZCBkYXRhIGR1cmluZyBuYW1lIGNvcGllcyBvciBsb29rdXBzLiBUaGUgaW50ZW50aW9uIHNlZW1zIHRvIGJlIHRvIGluaXRpYWxpemUgdGhlIGlubGluZSBuYW1lIGJ1ZmZlciB0byB6ZXJvLgoKSG93ZXZlciwgdGhlIHBhdGNoICppbmNvcnJlY3RseSogdXNlcyBgbWVtY3B5KGRlbnRyeS0mZ3Q7ZF9zaG9ydG5hbWUuc3RyaW5nLCAwLCBETkFNRV9JTkxJTkVfTEVOKWAgaW5zdGVhZCBvZiBgbWVtc2V0KGRlbnRyeS0mZ3Q7ZF9zaG9ydG5hbWUuc3RyaW5nLCAwLCBETkFNRV9JTkxJTkVfTEVOKWAuIFRoZSBzZWNvbmQgYXJndW1lbnQgYDBgIGluIGBtZW1jcHlgIGlzIGludGVycHJldGVkIGFzIGEgbnVsbCBwb2ludGVyLCBhbmQgaXQgY2F1c2VzIHRoZSBrZXJuZWwgdG8gZGVyZWZlcmVuY2UgdGhlIG51bGwgcG9pbnRlciB3aGljaCBpbnN0YW50bHkgdHJpZ2dlcnMgYSBrZXJuZWwgY3Jhc2ggKHBhZ2UgZmF1bHQpLgoKVGhlIG1vc3QgaW1tZWRpYXRlIGNvbnNlcXVlbmNlIGlzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLiBUaGlzIHdpbGwgcmVzdWx0IGluIGFuIGltbWVkaWF0ZSBjcmFzaCBkdXJpbmcgdGhlIGZpcnN0IGRlbnRyeSBhbGxvY2F0aW9uLCBtYWtpbmcgaXQgaW1wb3NzaWJsZSB0byBldmVuICpyZWFjaCogYW55IHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgc3lzdGVtIHdpbGwgaGFsdCB3aXRoIGEga2VybmVsIG9vcHMgb3IgYSBwYWdlIGZhdWx0LiBUaGlzIGlzIGEgdmVyeSBzZXZlcmUgYnVnIHRoYXQgd2lsbCBiZSBjYXVnaHQgYnkgYW55IHN0YW5kYXJkIGJ1ZyBkZXRlY3RvciwgaW5jbHVkaW5nIHRoZSBub3JtYWwga2VybmVsIGZhdWx0IGhhbmRsZXJzIGFuZCBLQVNBTi4KCkdpdmVuIHRoaXMgdW5kZXJzdGFuZGluZywgaXQgc2VlbXMgdGhlIHBhdGNoIHdyaXRlciBtYWRlIGEgY2xhc3NpYyB0eXBvIG9yIGEgbWlzdW5kZXJzdGFuZGluZyBvZiBob3cgYG1lbWNweWAgYW5kIGBtZW1zZXRgIGZ1bmN0aW9ucyB3b3JrLgoKTm93LCB0aGUgcXVlc3Rpb24gaXM6IGRvZXMgdGhpcyB3YXJyYW50IEtNU0FOIGZ1enppbmc/CgpUaGUgcGF0Y2ggKmludHJvZHVjZXMqIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCB3aGljaCBpcyByZWFkaWx5IGNhdWdodCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4gSXQgZG9lcyAqbm90KiBpbnRyb2R1Y2UgYSByaXNrIG9mICp1bmluaXRpYWxpemVkKiBtZW1vcnkgKmJlaW5nIHJlYWQqIHRoYXQgKm9ubHkqIEtNU0FOIGNvdWxkIGRldGVjdC4gRXZlbiBpZiB0aGUgcGF0Y2ggKmludGVuZGVkKiB0byB6ZXJvIHRoZSBtZW1vcnkgd2l0aCBgbWVtc2V0YCwgdGhpcyB3b3VsZCBoYXZlIGZpeGVkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlLCBub3QgaW50cm9kdWNlZCB0aGVtLgoKU28sIGFjY29yZGluZyB0byB0aGUgcHJvdmlkZWQgaW5zdHJ1Y3Rpb25zLCBzaW5jZSBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIChsaWtlIEtBU0FOKSB3b3VsZCBjYXRjaCB0aGUgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCB0aGVyZSBpcyBubyBuZWVkIGZvciBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2tzIHRoYXQgb25seSBLTVNBTiBjb3VsZCBkZXRlY3QuIEtNU0FOIGlzIGZvciBkZXRlY3RpbmcgdGhlIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaHVzLCBgTmVlZHNLTVNBTmAgaXMgYGZhbHNlYC4gVGhlIHBhdGNoJiMzOTtzIHByaW1hcnkgaXNzdWUgaXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UsIGEgYnVnIGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxNTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgX19kX2FsbG9jKClgIGluIGBmcy9kY2FjaGUuY2AsIGludGVuZGluZyB0byBmdWxseSBpbml0aWFsaXplIGBkZW50cnktXHUwMDNlZF9zaG9ydG5hbWUuc3RyaW5nYC4gSG93ZXZlciwgaXQgZXJyb25lb3VzbHkgY2FsbHMgYG1lbWNweShkZW50cnktXHUwMDNlZF9zaG9ydG5hbWUuc3RyaW5nLCAwLCBETkFNRV9JTkxJTkVfTEVOKWAgaW5zdGVhZCBvZiBgbWVtc2V0KClgLiBQYXNzaW5nIGAwYCAoTlVMTCkgYXMgdGhlIHNvdXJjZSBwb2ludGVyIHRvIGBtZW1jcHkoKWAgaW50cm9kdWNlcyBhbiBpbW1lZGlhdGUgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIHVwb24gZGVudHJ5IGFsbG9jYXRpb24uXG5cbk5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgYXJlIGNhdWdodCBpbW1lZGlhdGVseSBieSBzdGFuZGFyZCBrZXJuZWwgcGFnZSBmYXVsdCBoYW5kbGluZyBhbmQgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlcnNwYWNlLiBGdXJ0aGVybW9yZSwgaGFkIHRoZSBjYWxsIGNvcnJlY3RseSBiZWVuIGBtZW1zZXQoKWAsIGl0IHdvdWxkIGhhdmUgaW5pdGlhbGl6ZWQgdGhlIGJ1ZmZlciB0byB6ZXJvZXMsIGVsaW1pbmF0aW5nIHVuaW5pdGlhbGl6ZWQgZGF0YSByYXRoZXIgdGhhbiBjcmVhdGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gVGhlcmVmb3JlLCB0aGlzIGNoYW5nZSBkb2VzIG5vdCBqdXN0aWZ5IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBfX2RfYWxsb2MoKWAgaW4gYGZzL2RjYWNoZS5jYCwgaW50ZW5kaW5nIHRvIGZ1bGx5IGluaXRpYWxpemUgYGRlbnRyeS1cdTAwM2VkX3Nob3J0bmFtZS5zdHJpbmdgLiBIb3dldmVyLCBpdCBlcnJvbmVvdXNseSBjYWxscyBgbWVtY3B5KGRlbnRyeS1cdTAwM2VkX3Nob3J0bmFtZS5zdHJpbmcsIDAsIEROQU1FX0lOTElORV9MRU4pYCBpbnN0ZWFkIG9mIGBtZW1zZXQoKWAuIFBhc3NpbmcgYDBgIChOVUxMKSBhcyB0aGUgc291cmNlIHBvaW50ZXIgdG8gYG1lbWNweSgpYCBpbnRyb2R1Y2VzIGFuIGltbWVkaWF0ZSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgdXBvbiBkZW50cnkgYWxsb2NhdGlvbi5cblxuTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBhcmUgY2F1Z2h0IGltbWVkaWF0ZWx5IGJ5IHN0YW5kYXJkIGtlcm5lbCBwYWdlIGZhdWx0IGhhbmRsaW5nIGFuZCBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2Vyc3BhY2UuIEZ1cnRoZXJtb3JlLCBoYWQgdGhlIGNhbGwgY29ycmVjdGx5IGJlZW4gYG1lbXNldCgpYCwgaXQgd291bGQgaGF2ZSBpbml0aWFsaXplZCB0aGUgYnVmZmVyIHRvIHplcm9lcywgZWxpbWluYXRpbmcgdW5pbml0aWFsaXplZCBkYXRhIHJhdGhlciB0aGFuIGNyZWF0aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBUaGVyZWZvcmUsIHRoaXMgY2hhbmdlIGRvZXMgbm90IGp1c3RpZnkgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxNTo1MzoyOC4zNzU1NDk4MjlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTgzNzk4MjY1NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19kX2FsbG9jXCIsXG4gICAgXCJkX2FsbG9jXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgX19kX2FsbG9jKClgIGluIGBmcy9kY2FjaGUuY2AsIGludGVuZGluZyB0byBmdWxseSBpbml0aWFsaXplIGBkZW50cnktXFx1MDAzZWRfc2hvcnRuYW1lLnN0cmluZ2AuIEhvd2V2ZXIsIGl0IGVycm9uZW91c2x5IGNhbGxzIGBtZW1jcHkoZGVudHJ5LVxcdTAwM2VkX3Nob3J0bmFtZS5zdHJpbmcsIDAsIEROQU1FX0lOTElORV9MRU4pYCBpbnN0ZWFkIG9mIGBtZW1zZXQoKWAuIFBhc3NpbmcgYDBgIChOVUxMKSBhcyB0aGUgc291cmNlIHBvaW50ZXIgdG8gYG1lbWNweSgpYCBpbnRyb2R1Y2VzIGFuIGltbWVkaWF0ZSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgdXBvbiBkZW50cnkgYWxsb2NhdGlvbi5cXG5cXG5OVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFyZSBjYXVnaHQgaW1tZWRpYXRlbHkgYnkgc3RhbmRhcmQga2VybmVsIHBhZ2UgZmF1bHQgaGFuZGxpbmcgYW5kIEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZS4gRnVydGhlcm1vcmUsIGhhZCB0aGUgY2FsbCBjb3JyZWN0bHkgYmVlbiBgbWVtc2V0KClgLCBpdCB3b3VsZCBoYXZlIGluaXRpYWxpemVkIHRoZSBidWZmZXIgdG8gemVyb2VzLCBlbGltaW5hdGluZyB1bmluaXRpYWxpemVkIGRhdGEgcmF0aGVyIHRoYW4gY3JlYXRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFRoZXJlZm9yZSwgdGhpcyBjaGFuZ2UgZG9lcyBub3QganVzdGlmeSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgX19kX2FsbG9jKCkgaW4gZnMvZGNhY2hlLmMgdG8gaW5pdGlhbGl6ZSB0aGUgaW5saW5lIG5hbWUgYnVmZmVyIChkX3Nob3J0bmFtZSkuIEluIGRvaW5nIHNvLCBpdCBlcnJvbmVvdXNseSB1c2VzIG1lbWNweSgpIHdpdGggYSBOVUxMIHBvaW50ZXIgKDApIGFzIHRoZSBzb3VyY2UgYWRkcmVzcyByYXRoZXIgdGhhbiBtZW1zZXQoKSwgd2hpY2ggY2F1c2VzIGEga2VybmVsIGNyYXNoL05VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSB1cG9uIGRlbnRyeSBhbGxvY2F0aW9uLiBUaGlzIG1vZGlmaWVzIGNvcmUgVkZTIGxvZ2ljIHRoYXQgaXMgZGlyZWN0bHkgYW5kIGVhc2lseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxNTo1MzoyOC4zNzU1NTU3NDlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NTQwMzI1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGJmMWVhNTJmZjAzMmRhNjA2MzRmNzYzY2VkZjU5ZTM4ZWE0MzM4MzlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBTZXAgMTMgMTU6NTM6MjcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvZGNhY2hlLmMgYi9mcy9kY2FjaGUuY1xcbmluZGV4IDFiMWE4MWYxMGRhNjcuLjJkZTFiYzc2ZGM4ZTkgMTAwNjQ0XFxuLS0tIGEvZnMvZGNhY2hlLmNcXG4rKysgYi9mcy9kY2FjaGUuY1xcbkBAIC0xOTEwLDEyICsxOTEwLDE3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpfX2RfYWxsb2Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUpXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXG4gXFx0LypcXG4tXFx0ICogV2UgZ3VhcmFudGVlIHRoYXQgdGhlIGlubGluZSBuYW1lIGlzIGFsd2F5cyBOVUwtdGVybWluYXRlZC5cXG4tXFx0ICogVGhpcyB3YXkgdGhlIG1lbWNweSgpIGRvbmUgYnkgdGhlIG5hbWUgc3dpdGNoaW5nIGluIHJlbmFtZVxcbi1cXHQgKiB3aWxsIHN0aWxsIGFsd2F5cyBoYXZlIGEgTlVMIGF0IHRoZSBlbmQsIGV2ZW4gaWYgd2UgbWlnaHRcXG4tXFx0ICogYmUgb3ZlcndyaXRpbmcgYW4gaW50ZXJuYWwgTlVMIGNoYXJhY3RlclxcbitcXHQgKiBGdWxseSBpbml0aWFsaXplIHRoZSBpbmxpbmUgbmFtZSBidWZmZXIuICBjb3B5X25hbWUoKSBhbmRcXG4rXFx0ICogc3dhcF9uYW1lcygpIGNvcHkgZF9zaG9ydG5hbWUgaW4gaXRzIGVudGlyZXR5LCBzbyBhbnlcXG4rXFx0ICogdW5pbml0aWFsaXplZCB0YWlsIHdvdWxkIHByb3BhZ2F0ZSB0byB0aGUgb3RoZXIgZGVudHJ5LCBhbmRcXG4rXFx0ICogX19kX2xvb2t1cF9yY3UoKSBtYXkgdHJhbnNpZW50bHkgcmVhZCBhbnkgYnl0ZSBvZiB0aGUgaW5saW5lXFxuK1xcdCAqIG5hbWUgd2hpbGUgcmVuYW1lKCkgcmV3cml0ZXMgaXQgaW4gcGxhY2UuXFxuK1xcdCAqXFxuK1xcdCAqIFRoaXMgYWxzbyBrZWVwcyB0aGUgaW5saW5lIG5hbWUgTlVMLXRlcm1pbmF0ZWQ6IHRoZSBuYW1lXFxuK1xcdCAqIHN3aXRjaGluZyBpbiByZW5hbWUgd2lsbCBzdGlsbCBhbHdheXMgaGF2ZSBhIE5VTCBhdCB0aGUgZW5kLFxcbitcXHQgKiBldmVuIGlmIHdlIG1pZ2h0IGJlIG92ZXJ3cml0aW5nIGFuIGludGVybmFsIE5VTCBjaGFyYWN0ZXIuXFxuIFxcdCAqL1xcbi1cXHRkZW50cnktXFx1MDAzZWRfc2hvcnRuYW1lLnN0cmluZ1tETkFNRV9JTkxJTkVfTEVOLTFdID0gMDtcXG4rXFx0bWVtY3B5KGRlbnRyeS1cXHUwMDNlZF9zaG9ydG5hbWUuc3RyaW5nLCAwLCBETkFNRV9JTkxJTkVfTEVOKTtcXG4gXFx0aWYgKHVubGlrZWx5KCFuYW1lKSkge1xcbiBcXHRcXHRuYW1lID0gXFx1MDAyNnNsYXNoX25hbWU7XFxuIFxcdFxcdGRuYW1lID0gZGVudHJ5LVxcdTAwM2VkX3Nob3J0bmFtZS5zdHJpbmc7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE1OjUzOjI4Ljg3MTkwMDM5OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NzU1OTk1MTUyODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19kX2FsbG9jXCIsXG4gICAgXCJkX2FsbG9jXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgX19kX2FsbG9jKCkgaW4gZnMvZGNhY2hlLmMgdG8gaW5pdGlhbGl6ZSB0aGUgaW5saW5lIG5hbWUgYnVmZmVyIChkX3Nob3J0bmFtZSkuIEluIGRvaW5nIHNvLCBpdCBlcnJvbmVvdXNseSB1c2VzIG1lbWNweSgpIHdpdGggYSBOVUxMIHBvaW50ZXIgKDApIGFzIHRoZSBzb3VyY2UgYWRkcmVzcyByYXRoZXIgdGhhbiBtZW1zZXQoKSwgd2hpY2ggY2F1c2VzIGEga2VybmVsIGNyYXNoL05VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSB1cG9uIGRlbnRyeSBhbGxvY2F0aW9uLiBUaGlzIG1vZGlmaWVzIGNvcmUgVkZTIGxvZ2ljIHRoYXQgaXMgZGlyZWN0bHkgYW5kIGVhc2lseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGJmMWVhNTJmZjAzMmRhNjA2MzRmNzYzY2VkZjU5ZTM4ZWE0MzM4MzlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCAxMyAxNTo1MzoyNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2RjYWNoZS5jIGIvZnMvZGNhY2hlLmNcbmluZGV4IDFiMWE4MWYxMGRhNjcuLjJkZTFiYzc2ZGM4ZTkgMTAwNjQ0XG4tLS0gYS9mcy9kY2FjaGUuY1xuKysrIGIvZnMvZGNhY2hlLmNcbkBAIC0xOTEwLDEyICsxOTEwLDE3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpfX2RfYWxsb2Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuIFx0Lypcbi1cdCAqIFdlIGd1YXJhbnRlZSB0aGF0IHRoZSBpbmxpbmUgbmFtZSBpcyBhbHdheXMgTlVMLXRlcm1pbmF0ZWQuXG4tXHQgKiBUaGlzIHdheSB0aGUgbWVtY3B5KCkgZG9uZSBieSB0aGUgbmFtZSBzd2l0Y2hpbmcgaW4gcmVuYW1lXG4tXHQgKiB3aWxsIHN0aWxsIGFsd2F5cyBoYXZlIGEgTlVMIGF0IHRoZSBlbmQsIGV2ZW4gaWYgd2UgbWlnaHRcbi1cdCAqIGJlIG92ZXJ3cml0aW5nIGFuIGludGVybmFsIE5VTCBjaGFyYWN0ZXJcbitcdCAqIEZ1bGx5IGluaXRpYWxpemUgdGhlIGlubGluZSBuYW1lIGJ1ZmZlci4gIGNvcHlfbmFtZSgpIGFuZFxuK1x0ICogc3dhcF9uYW1lcygpIGNvcHkgZF9zaG9ydG5hbWUgaW4gaXRzIGVudGlyZXR5LCBzbyBhbnlcbitcdCAqIHVuaW5pdGlhbGl6ZWQgdGFpbCB3b3VsZCBwcm9wYWdhdGUgdG8gdGhlIG90aGVyIGRlbnRyeSwgYW5kXG4rXHQgKiBfX2RfbG9va3VwX3JjdSgpIG1heSB0cmFuc2llbnRseSByZWFkIGFueSBieXRlIG9mIHRoZSBpbmxpbmVcbitcdCAqIG5hbWUgd2hpbGUgcmVuYW1lKCkgcmV3cml0ZXMgaXQgaW4gcGxhY2UuXG4rXHQgKlxuK1x0ICogVGhpcyBhbHNvIGtlZXBzIHRoZSBpbmxpbmUgbmFtZSBOVUwtdGVybWluYXRlZDogdGhlIG5hbWVcbitcdCAqIHN3aXRjaGluZyBpbiByZW5hbWUgd2lsbCBzdGlsbCBhbHdheXMgaGF2ZSBhIE5VTCBhdCB0aGUgZW5kLFxuK1x0ICogZXZlbiBpZiB3ZSBtaWdodCBiZSBvdmVyd3JpdGluZyBhbiBpbnRlcm5hbCBOVUwgY2hhcmFjdGVyLlxuIFx0ICovXG4tXHRkZW50cnktXHUwMDNlZF9zaG9ydG5hbWUuc3RyaW5nW0ROQU1FX0lOTElORV9MRU4tMV0gPSAwO1xuK1x0bWVtY3B5KGRlbnRyeS1cdTAwM2VkX3Nob3J0bmFtZS5zdHJpbmcsIDAsIEROQU1FX0lOTElORV9MRU4pO1xuIFx0aWYgKHVubGlrZWx5KCFuYW1lKSkge1xuIFx0XHRuYW1lID0gXHUwMDI2c2xhc2hfbmFtZTtcbiBcdFx0ZG5hbWUgPSBkZW50cnktXHUwMDNlZF9zaG9ydG5hbWUuc3RyaW5nO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTU6NTM6MjguODcxOTAyMzg4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjUzMDYxNTY2MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS2VybmVsIFBhdGNoIEV2YWx1YXRpb246IEltbWVkaWF0ZSBSZWQgRmxhZyEqKlxuXG5Pa2F5LCBzbyBJJ20gcHJlc2VudGVkIHdpdGggYSBrZXJuZWwgcGF0Y2ggYW5kIGFza2VkIHRvIGdpdmUgaXQgYSBsb29rLiBMZXQncyBkaWcgaW4uIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIHRoZSBjaGFuZ2UgaXRzZWxmLiBJIHN0YXJ0IGJ5IGluc3BlY3RpbmcgdGhlIGNvZGUgZGlmZi5cblxuV2FpdCwgaG9sZCBvbiBhIHNlY29uZCEgVGhpcyBgZnMvZGNhY2hlLmNgIHBhdGNoIGxvb2tz4oCmIGNvbmNlcm5pbmcuIFNwZWNpZmljYWxseSwgSSdtIGxvb2tpbmcgYXQgdGhpcyBsaW5lOiBgbWVtY3B5KGRlbnRyeS1cdTAwM2VkX3Nob3J0bmFtZS5zdHJpbmcsIDAsIEROQU1FX0lOTElORV9MRU4pO2AuIFRoYXQganVtcCBvdXQgYXQgbWUgaW1tZWRpYXRlbHkuIEkga25vdyB0aGF0IGBtZW1jcHlgJ3MgYXJndW1lbnRzIGFyZSBgKGRlc3RpbmF0aW9uLCBzb3VyY2UsIG51bWJlcl9vZl9ieXRlcylgLiBUaGUgYXV0aG9yJ3MgdXNpbmcgYDBgIGFzIHRoZSBzb3VyY2UhXG5cbldhaXQgYSBtaW51dGUsIHRoZXkndmUgdXNlZCBgbWVtY3B5YCB3aXRoIGEgbGl0ZXJhbCBgMGAgYXMgdGhlIHNvdXJjZSB3aGVuIHRoZXkgcHJvYmFibHkgbWVhbnQgdG8gdXNlIGBtZW1zZXRgISBUaGlzIGlzIGJhZC4gSW4gQywgcGFzc2luZyBgMGAgYXMgdGhlIHNvdXJjZSBwb2ludGVyIGluIGBtZW1jcHlgIGlzIGVxdWl2YWxlbnQgdG8gZGVyZWZlcmVuY2luZyBhIE5VTEwgcG9pbnRlci4gV2hlbiB0aGUgYF9fZF9hbGxvY2AgZnVuY3Rpb24gaXMgY2FsbGVkLCB0aGlzIHdpbGwgYWxtb3N0IGNlcnRhaW5seSB0cmlnZ2VyIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCBjYXVzaW5nIGEgY3Jhc2ggb3IgYSBzZWN1cml0eSBmYXVsdCFcblxuVGhpcyBpcyBhIHNlcmlvdXMgYnVnLCBhbmQgSSBuZWVkIHRvIHZlcmlmeSBpdC4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgcmVhZCB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA4NywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE1OjUzOjU0LjE3ODA2MzE4NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NTAzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9kY2FjaGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxOTA1LFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxOTA1OlxcdFxcdGludCBlcnI7XFxuMTkwNjpcXHRcXG4xOTA3OlxcdFxcdGRlbnRyeSA9IGttZW1fY2FjaGVfYWxsb2NfbHJ1KGRlbnRyeV9jYWNoZSwgXFx1MDAyNnNiLVxcdTAwM2VzX2RlbnRyeV9scnUsXFxuMTkwODpcXHRcXHRcXHRcXHRcXHQgICAgICBHRlBfS0VSTkVMKTtcXG4xOTA5OlxcdFxcdGlmICghZGVudHJ5KVxcbjE5MTA6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuMTkxMTpcXHRcXG4xOTEyOlxcdFxcdC8qXFxuMTkxMzpcXHRcXHQgKiBGdWxseSBpbml0aWFsaXplIHRoZSBpbmxpbmUgbmFtZSBidWZmZXIuICBjb3B5X25hbWUoKSBhbmRcXG4xOTE0OlxcdFxcdCAqIHN3YXBfbmFtZXMoKSBjb3B5IGRfc2hvcnRuYW1lIGluIGl0cyBlbnRpcmV0eSwgc28gYW55XFxuMTkxNTpcXHRcXHQgKiB1bmluaXRpYWxpemVkIHRhaWwgd291bGQgcHJvcGFnYXRlIHRvIHRoZSBvdGhlciBkZW50cnksIGFuZFxcbjE5MTY6XFx0XFx0ICogX19kX2xvb2t1cF9yY3UoKSBtYXkgdHJhbnNpZW50bHkgcmVhZCBhbnkgYnl0ZSBvZiB0aGUgaW5saW5lXFxuMTkxNzpcXHRcXHQgKiBuYW1lIHdoaWxlIHJlbmFtZSgpIHJld3JpdGVzIGl0IGluIHBsYWNlLlxcbjE5MTg6XFx0XFx0ICpcXG4xOTE5OlxcdFxcdCAqIFRoaXMgYWxzbyBrZWVwcyB0aGUgaW5saW5lIG5hbWUgTlVMLXRlcm1pbmF0ZWQ6IHRoZSBuYW1lXFxuMTkyMDpcXHRcXHQgKiBzd2l0Y2hpbmcgaW4gcmVuYW1lIHdpbGwgc3RpbGwgYWx3YXlzIGhhdmUgYSBOVUwgYXQgdGhlIGVuZCxcXG4xOTIxOlxcdFxcdCAqIGV2ZW4gaWYgd2UgbWlnaHQgYmUgb3ZlcndyaXRpbmcgYW4gaW50ZXJuYWwgTlVMIGNoYXJhY3Rlci5cXG4xOTIyOlxcdFxcdCAqL1xcbjE5MjM6XFx0XFx0bWVtY3B5KGRlbnRyeS1cXHUwMDNlZF9zaG9ydG5hbWUuc3RyaW5nLCAwLCBETkFNRV9JTkxJTkVfTEVOKTtcXG4xOTI0OlxcdFxcdGlmICh1bmxpa2VseSghbmFtZSkpIHtcXG4xOTI1OlxcdFxcdFxcdG5hbWUgPSBcXHUwMDI2c2xhc2hfbmFtZTtcXG4xOTI2OlxcdFxcdFxcdGRuYW1lID0gZGVudHJ5LVxcdTAwM2VkX3Nob3J0bmFtZS5zdHJpbmc7XFxuMTkyNzpcXHRcXHR9IGVsc2UgaWYgKG5hbWUtXFx1MDAzZWxlbiBcXHUwMDNlIEROQU1FX0lOTElORV9MRU4tMSkge1xcbjE5Mjg6XFx0XFx0XFx0c3RydWN0IGV4dGVybmFsX25hbWUgKnA7XFxuMTkyOTpcXHRcXG4xOTMwOlxcdFxcdFxcdHAgPSBrbWFsbG9jX2ZsZXgoKnAsIG5hbWUsIG5hbWUtXFx1MDAzZWxlbiArIDEsXFxuMTkzMTpcXHRcXHRcXHRcXHRcXHQgR0ZQX0tFUk5FTF9BQ0NPVU5UIHwgX19HRlBfUkVDTEFJTUFCTEUpO1xcbjE5MzI6XFx0XFx0XFx0aWYgKCFwKSB7XFxuMTkzMzpcXHRcXHRcXHRcXHRrbWVtX2NhY2hlX2ZyZWUoZGVudHJ5X2NhY2hlLCBkZW50cnkpOyBcXG4xOTM0OlxcdFxcdFxcdFxcdHJldHVybiBOVUxMO1xcbjE5MzU6XFx0XFx0XFx0fVxcbjE5MzY6XFx0XFx0XFx0YXRvbWljX3NldChcXHUwMDI2cC1cXHUwMDNlY291bnQsIDEpO1xcbjE5Mzc6XFx0XFx0XFx0ZG5hbWUgPSBwLVxcdTAwM2VuYW1lO1xcbjE5Mzg6XFx0XFx0fSBlbHNlICB7XFxuMTkzOTpcXHRcXHRcXHRkbmFtZSA9IGRlbnRyeS1cXHUwMDNlZF9zaG9ydG5hbWUuc3RyaW5nO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxNTo1Mzo1NC4xNzgyNDIyNTZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMTMyOTM5NjQzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBGdXp6aW5nIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBoZXJlJ3Mgd2hhdCBJJ20gdGhpbmtpbmcuIFRoYXQgYG1lbWNweWAgY2FsbCBpbiBgX19kX2FsbG9jYCwgc3BlY2lmaWNhbGx5IHRoZSBwYXJ0IHdoZXJlIGl0IHplcm9lcyBvdXQgYGRlbnRyeS1cdTAwM2VkX3Nob3J0bmFtZS5zdHJpbmdgLCB0aGF0J3MgY2FsbGVkIGR1cmluZyBldmVyeSBzaW5nbGUgZGVudHJ5IGFsbG9jYXRpb24uIEkgaW1tZWRpYXRlbHkgcmVhbGl6ZWQsIHRoaXMgaXMgYWN0dWFsbHkgcmVhY2hhYmxlIGNvZGUsIGFuZCBpdCdzIGNvcmUgVkZTL2RjYWNoZSBzdHVmZiEgRXZlcnkgZGVudHJ5IGFsbG9jYXRpb24gaW4gdGhlIGtlcm5lbCBnb2VzIHRocm91Z2ggYF9fZF9hbGxvY2AsIHNvIHRoaXMgaXMgZGVmaW5pdGVseSBhIGhvdCBwYXRoLlxuXG5Ob3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBpcyB0aGlzIHdvcnRoIGZ1enppbmc/IFRoZSBndWlkZWxpbmVzIGFyZSBwcmV0dHkgY2xlYXIuIEknbSBsb29raW5nIGF0IFwiQ29yZSBTdWJzeXN0ZW1zXCIg4oCTIHRoaXMgZmFsbHMgc3F1YXJlbHkgaW50byBWRlMsIGFuZCBwb3RlbnRpYWxseSBtZW1vcnkgbWFuYWdlbWVudCBkZXBlbmRpbmcgb24gaG93IGl0J3MgaGFuZGxlZCBhdCBhIGxvd2VyIGxldmVsLiBNeSBuZXh0IHRob3VnaHQgaXMgXCJyZWZhY3RvcmluZy5cIiBBbSBJIGNoYW5naW5nIHRoZSBzdHJ1Y3R1cmUgb3IgZmxvdyBvZiB0aGUgY29kZT8gVGhhdCBpcyBub3QgdGhlIGNhc2UuIFRoZSBuZXh0IGNvbnNpZGVyYXRpb24gaXMgdGhlIFwicnVudGltZSBhc3NlcnRpb25zXCIsIGFuZCB3aGV0aGVyIHRoZXkgYXJlIGJlaW5nIGludHJvZHVjZWQgb3IgY2hhbmdlZC4gVGhhdCBpcyBhbHNvIG5vdCB0aGUgY2FzZS5cblxuTm93LCBJIG5lZWQgdG8gY29uc2lkZXIgRm9jdXNTeW1ib2xzLiBUaGUgZ3VpZGVsaW5lcyBhcmUgYWRhbWFudCBhYm91dCAqYXZvaWRpbmcqIHViaXF1aXRvdXMgbGlmZWN5Y2xlIGZ1bmN0aW9ucyBsaWtlIGFsbG9jYXRvcnMuIEhtbW0uLi4gaXMgYF9fZF9hbGxvY2AgdWJpcXVpdG91cz8gQWJzb2x1dGVseS4gSXQgaXMgY2FsbGVkIGJ5IHByZXR0eSBtdWNoIGV2ZXJ5dGhpbmcuIElmIEkgYWRkIGl0LCBpdCB3aWxsIGRpbHV0ZSB0aGUgZnV6emluZyBlZmZvcnQuXG5cbkkgbmVlZCB0byBmb2N1cyBvbiBzcGVjaWZpYyBmZWF0dXJlIGxvZ2ljIGFuZCBlbnRyeSBwb2ludHMuIEkgc2hvdWxkIGF2b2lkIHVzaW5nIGlubGluZSBmdW5jdGlvbnMuXG5cblRoZSBiZXN0IGFwcHJvYWNoIHNlZW1zIHRvIGJlIHRvIGV4YW1pbmUgY2FsbGVycyBvZiBgX19kX2FsbG9jYC4gSSB3aWxsIHVzZSBgZ3JlcGAgdG8gcXVpY2tseSBmaW5kIHdobyBpcyBjYWxsaW5nIGBfX2RfYWxsb2NgLiBUaGlzIGlzIHdoZXJlIEknbGwgZmluZCBteSBmdXp6aW5nIHRhcmdldHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2MzMsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxNTo1NDowNS41MDc2NDIwMloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjM0MTA2NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2RfYWxsb2NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZGNhY2hlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZGNhY2hlLmM9MTg4OT1FWFBPUlRfU1lNQk9MKGRfaW52YWxpZGF0ZSk7XFxuLS1cXG5mcy9kY2FjaGUuYy0xODkxLS8qKlxcbmZzL2RjYWNoZS5jOjE4OTI6ICogX19kX2FsbG9jIC0gYWxsb2NhdGUgYSBkY2FjaGUgZW50cnlcXG5mcy9kY2FjaGUuYy0xODkzLSAqIEBzYjogZmlsZXN5c3RlbSBpdCB3aWxsIGJlbG9uZyB0b1xcbi0tXFxuZnMvZGNhY2hlLmMtMTkwMC0gXFxuZnMvZGNhY2hlLmM6MTkwMTpzdGF0aWMgc3RydWN0IGRlbnRyeSAqX19kX2FsbG9jKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lKVxcbmZzL2RjYWNoZS5jLTE5MDIte1xcbi0tXFxuZnMvZGNhY2hlLmM9MTk4OT1zdHJ1Y3QgZGVudHJ5ICpkX2FsbG9jKHN0cnVjdCBkZW50cnkgKiBwYXJlbnQsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lKVxcbmZzL2RjYWNoZS5jLTE5OTAte1xcbmZzL2RjYWNoZS5jOjE5OTE6XFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gX19kX2FsbG9jKHBhcmVudC1cXHUwMDNlZF9zYiwgbmFtZSk7XFxuZnMvZGNhY2hlLmMtMTk5Mi1cXHRpZiAoIWRlbnRyeSlcXG4tLVxcbmZzL2RjYWNoZS5jPTIwMDc9c3RydWN0IGRlbnRyeSAqZF9hbGxvY19hbm9uKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuZnMvZGNhY2hlLmMtMjAwOC17XFxuZnMvZGNhY2hlLmM6MjAwOTpcXHRyZXR1cm4gX19kX2FsbG9jKHNiLCBOVUxMKTtcXG5mcy9kY2FjaGUuYy0yMDEwLX1cXG4tLVxcbmZzL2RjYWNoZS5jPTIwMzg9c3RydWN0IGRlbnRyeSAqZF9hbGxvY19wc2V1ZG8oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUpXFxuLS1cXG5mcy9kY2FjaGUuYy0yMDQyLVxcdH07XFxuZnMvZGNhY2hlLmM6MjA0MzpcXHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBfX2RfYWxsb2Moc2IsIG5hbWUpO1xcbmZzL2RjYWNoZS5jLTIwNDQtXFx0aWYgKGxpa2VseShkZW50cnkpKSB7XFxuLS1cXG5mcy9kY2FjaGUuYz0yNzY1PXN0cnVjdCBkZW50cnkgKmRfYWxsb2NfcGFyYWxsZWwoc3RydWN0IGRlbnRyeSAqcGFyZW50LFxcbi0tXFxuZnMvZGNhY2hlLmMtMjc3MC1cXHRzdHJ1Y3QgaGxpc3RfYmxfbm9kZSAqbm9kZTtcXG5mcy9kY2FjaGUuYzoyNzcxOlxcdHN0cnVjdCBkZW50cnkgKm5ldyA9IF9fZF9hbGxvYyhwYXJlbnQtXFx1MDAzZWRfc2IsIG5hbWUpO1xcbmZzL2RjYWNoZS5jLTI3NzItXFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxNTo1NDowNS41NzM5OTEwMzRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo3MjY2MTg3OTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IExpbmUgb2YgUmVhc29uaW5nKipcblxuT2theSwgaG9sZCBvbi4gVGhlIGluc3RydWN0aW9ucyBhcmUgcHJldHR5IGNsZWFyIGFib3V0IGF2b2lkaW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zLCBzbyBJIG5lZWQgdG8gdGhpbmsgY2FyZWZ1bGx5IGFib3V0IHdoZXJlIGBfX2RfYWxsb2NgIGZpdHMuIElzIGl0IHRydWx5IGEgdW5pdmVyc2FsIGZ1bmN0aW9uLCBvciBpcyBpdCBzcGVjaWZpYyBlbm91Z2ggdG8gYmUgY29uc2lkZXJlZCBhIHRhcmdldD8gVGhlIGRvY3VtZW50YXRpb24gZXhwbGljaXRseSBzYXlzIHRvIGF2b2lkIGdlbmVyaWMgYWxsb2NhdG9ycyBhbmQgaG90LXBhdGhzLi4uIGJ1dCB3YWl0LCB0aGlzICppcyogdGhlIGZ1bmN0aW9uIHRoYXQncyBiZWVuIG1vZGlmaWVkISBJdCdzIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UuXG5cbkJ1dCB0aGUgcmVhbCBxdWVzdGlvbiBpcywgaXMgaXQgdWJpcXVpdG91cyAqaW4gdGhpcyBjb250ZXh0Kj8gYF9fZF9hbGxvY2AgYWxsb2NhdGVzIGRlbnRyaWVzLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGRjYWNoZS4gVGhhdCdzIG5vdCB0aGUgKmVudGlyZSogc3lzdGVtJ3MgbWVtb3J5IGFsbG9jYXRpb24sIHNvIHBlcmhhcHMgaXQncyBzcGVjaWZpYyBlbm91Z2guIEl0J3Mgbm90IGEgZ2VuZXJhbC1wdXJwb3NlIGFsbG9jYXRvciwgc3RyaWN0bHkgc3BlYWtpbmcuXG5cbk9rYXksIGlmIGBfX2RfYWxsb2NgIGlzIHdoZXJlIHRoZSBidWcgKmlzKiB0aGVuIEkgbmVlZCB0byBjb25zaWRlciAqd2hhdCogbWlnaHQgYmUgYWZmZWN0ZWQuIFRoZSBpbnN0cnVjdGlvbnMgYXJlIHRlbGxpbmcgbWUgdG8gZm9jdXMgb24gZmVhdHVyZS1zcGVjaWZpYyBsb2dpYywgcmlnaHQ/IFRoZSBjb21tZW50cyBpbiB0aGUgY29kZSBhcmUgcG9pbnRpbmcgbWUgdG93YXJkIHBvdGVudGlhbCByZWxhdGVkIGZ1bmN0aW9ucy4gSXQgbWVudGlvbnMgYGNvcHlfbmFtZSgpYCwgYHN3YXBfbmFtZXMoKWAsIGFuZCBgX19kX2xvb2t1cF9yY3UoKWAuIFRoZSBjb21tZW50IGluIHRoZSBjb2RlIHN1Z2dlc3RzIHRoYXQgdGhlc2UgZnVuY3Rpb25zIGNvdWxkIHBvdGVudGlhbGx5IGV4cG9zZSB1bmluaXRpYWxpemVkIGRhdGEgaWYgdGhlIGRfc2hvcnRuYW1lIGlzIG1hbmlwdWxhdGVkLiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhlbSEgVGhleSdyZSBsaWtlbHkga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBkZW50cnkgbmFtZSBpcyBoYW5kbGVkIGFuZCBpZiB0aGUgbWVudGlvbmVkIGZ1bmN0aW9uIGNvcGllcyBvciBtb3ZlcyB0aGUgZGVudHJpZXMuIFRoaXMgc2VlbXMgZmFyIG1vcmUgcmVsZXZhbnQgdGhhbiB3b3JyeWluZyBhYm91dCB3aGV0aGVyIGBfX2RfYWxsb2NgIGlzIGEgZ2VuZXJpYyBgbWFsbG9jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjExNCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxNTo1NDoxMi44NDAxODE1MjZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTMyMjE0OTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29weV9uYW1lfHN3YXBfbmFtZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZGNhY2hlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZGNhY2hlLmM9MTkwMT1zdGF0aWMgc3RydWN0IGRlbnRyeSAqX19kX2FsbG9jKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lKVxcbi0tXFxuZnMvZGNhY2hlLmMtMTkxMi1cXHQvKlxcbmZzL2RjYWNoZS5jOjE5MTM6XFx0ICogRnVsbHkgaW5pdGlhbGl6ZSB0aGUgaW5saW5lIG5hbWUgYnVmZmVyLiAgY29weV9uYW1lKCkgYW5kXFxuZnMvZGNhY2hlLmM6MTkxNDpcXHQgKiBzd2FwX25hbWVzKCkgY29weSBkX3Nob3J0bmFtZSBpbiBpdHMgZW50aXJldHksIHNvIGFueVxcbmZzL2RjYWNoZS5jLTE5MTUtXFx0ICogdW5pbml0aWFsaXplZCB0YWlsIHdvdWxkIHByb3BhZ2F0ZSB0byB0aGUgb3RoZXIgZGVudHJ5LCBhbmRcXG4tLVxcbmZzL2RjYWNoZS5jPTI5OTI9RVhQT1JUX1NZTUJPTChkX21ha2VfcGVyc2lzdGVudCk7XFxuZnMvZGNhY2hlLmMtMjk5My1cXG5mcy9kY2FjaGUuYzoyOTk0OnN0YXRpYyB2b2lkIHN3YXBfbmFtZXMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZGVudHJ5ICp0YXJnZXQpXFxuZnMvZGNhY2hlLmMtMjk5NS17XFxuLS1cXG5mcy9kY2FjaGUuYy0zMDMxLVxcbmZzL2RjYWNoZS5jOjMwMzI6c3RhdGljIHZvaWQgY29weV9uYW1lKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGRlbnRyeSAqdGFyZ2V0KVxcbmZzL2RjYWNoZS5jLTMwMzMte1xcbi0tXFxuZnMvZGNhY2hlLmM9MzA2MD1zdGF0aWMgdm9pZCBfX2RfbW92ZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBkZW50cnkgKnRhcmdldCxcXG4tLVxcbmZzL2RjYWNoZS5jLTMxMDgtXFx0aWYgKCFleGNoYW5nZSkge1xcbmZzL2RjYWNoZS5jOjMxMDk6XFx0XFx0Y29weV9uYW1lKGRlbnRyeSwgdGFyZ2V0KTtcXG5mcy9kY2FjaGUuYy0zMTEwLVxcdFxcdHRhcmdldC1cXHUwMDNlZF9oYXNoLnBwcmV2ID0gTlVMTDtcXG4tLVxcbmZzL2RjYWNoZS5jLTMxMTUtXFx0XFx0dGFyZ2V0LVxcdTAwM2VkX3BhcmVudCA9IG9sZF9wYXJlbnQ7XFxuZnMvZGNhY2hlLmM6MzExNjpcXHRcXHRzd2FwX25hbWVzKGRlbnRyeSwgdGFyZ2V0KTtcXG5mcy9kY2FjaGUuYy0zMTE3LVxcdFxcdGlmICghaGxpc3RfdW5oYXNoZWQoXFx1MDAyNnRhcmdldC1cXHUwMDNlZF9zaWIpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxNTo1NDoxMi44OTM0MTQ0NDdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMDE2MDM0ODIyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBhIFBvdGVudGlhbCBLZXJuZWwgQnVnKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgc29tZW9uZSdzIGRpcmVjdGx5IG1vZGlmaWVkIGBfX2RfYWxsb2NgLiAgSG1tLCBpcyBgX19kX2FsbG9jYCBzdGF0aWM/IFllcywgaXQncyBzdGF0aWMuIEFuZCBub3QgaW5saW5lZC4gVGhhdCdzIGEgZ29vZCBzdGFydC4gSSBuZWVkIHRvIGJlIHN1cmU7IGxldCdzIGNoZWNrIHRoZSBjYWxsZXJzIGxpa2UgYGRfYWxsb2NgLCBgZF9hbGxvY19hbm9uYCwgZXRjLiBBaCwgY29uZmlybWVkOiBgZnMvZGNhY2hlLmNgLCBhIHN0YXRpYyBmdW5jdGlvbiwgbm8gYGlubGluZWAga2V5d29yZC4gVGhpcyBmdW5jdGlvbiBpc24ndCBtYXJrZWQgZm9yIGluY2x1c2lvbiBpbiBGb2N1c1N5bWJvbHMsIGJ1dCBpcyBpdCBhIGdvb2QgY2FuZGlkYXRlLCBnaXZlbiB0aGUgaW5zdHJ1Y3Rpb25zPyBUaGUgaW5zdHJ1Y3Rpb25zIHNheSB0byBhdm9pZCB1YmlxdWl0b3VzIGZ1bmN0aW9ucywgYnV0IHRoaXMgZnVuY3Rpb24gaXMgVkZTLCBhbmQgaXMgdGhlIGltcGxlbWVudGF0aW9uIGZvciBgZGVudHJ5YCBhbGxvY2F0aW9uLiBMZXQncyBzZWUgd2hhdCB0aGUgcGF0Y2ggaXMgKmFjdHVhbGx5KiBkb2luZy5cblxuQWxyaWdodCwgdGhlIGRpZmYgcmV2ZWFscyB0aGUgaXNzdWU6IGBtZW1jcHkoZGVudHJ5LVx1MDAzZWRfc2hvcnRuYW1lLnN0cmluZywgMCwgRE5BTUVfSU5MSU5FX0xFTik7YC4gV2FpdCBhIHNlY29uZOKApiB0aGF0J3MgY29weWluZyAqZnJvbSogYWRkcmVzcyAwISBJbiBDLCB3aXRoIGBtZW1jcHkoZGVzdCwgc3JjLCBuKWAgLSB0aGV5J3JlIHBhc3NpbmcgYSBOVUxMIHBvaW50ZXIgYXMgdGhlIGBzcmNgLiBUaGF0J3MgYSBndWFyYW50ZWVkIGNyYXNoISBFdmVuIGlmIGl0IHdhcyBpbnRlbmRlZCB0byBiZSBgbWVtc2V0YCwgdGhlIHVzZSBvZiBgbWVtY3B5YCBmcm9tIGFkZHJlc3MgemVybyBpcyBhIHByb2JsZW0uIFRoaXMgbW9kaWZpZXMgYF9fZF9hbGxvY2AsIHdoaWNoIGlzIGluIGBmcy9kY2FjaGUuY2AuIFRoaXMgbWVhbnMgdGhhdCAqYW55KiBkZW50cnkgYWxsb2NhdGlvbiAtIHBhdGggbG9va3VwcywgZmlsZSBjcmVhdGlvbiwgYW55dGhpbmcgdXNpbmcgdGhlIGRjYWNoZSAtIHdpbGwgY2FsbCB0aGlzIGFuZCBpbW1lZGlhdGVseSBjcmFzaCB0aGUga2VybmVsISBJdCdsbCBiZSBhIHNlZ2ZhdWx0IG9yIGEga2VybmVsIHBhbmljIGltbWVkaWF0ZWx5LiBFdmVuIGlmIHRoZSBjb21waWxlciBkaWQgc29tZXRoaW5nIHdvbmt5IGFuZCBkaWRuJ3QgY3Jhc2ggaW1tZWRpYXRlbHksIHRoaXMgd2lsbCBiZSBmb3VuZCBieSBzeXprYWxsZXIgaW5zdGFudGx5LlxuXG5Ob3csIGlzIHRoaXMgd29ydGggZnV6emluZz8gIExldCdzIGNoZWNrIHRoZSBjb3JlIHRyaWFnZSBwaGlsb3NvcGh5LiBUaGUgcGF0Y2ggaGFzIHRoZSBwb3RlbnRpYWwgdG8gaW50cm9kdWNlIGEgKmNyYXNoKiwgaW4gY29kZSB0aGF0IGlzICphYnNvbHV0ZWx5IHJlYWNoYWJsZSogaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gVGhlIFZGUyBpcyBjb25zaWRlcmVkIGNvcmUsIHdoaWNoIG1ha2VzIGl0IGFuIGV4Y2VsbGVudCBjYW5kaWRhdGUuXG5cbmBmcy9kY2FjaGUuY2AgaXMgbm90IGd1YXJkZWQgYnkgYSBjb25maWcsIHRoZXJlZm9yZSBgV29ydGhGdXp6aW5nID0gdHJ1ZWAuIE5vdywgd2hhdCBhYm91dCBFbmFibGVDb25maWdzPyBMZXQncyBjaGVjayBgZnMvTWFrZWZpbGVgIHVzaW5nIGBncmVwcGVyYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzMxOCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTU6NTQ6MjMuMDUzNzY2MTUyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MDIxMTEwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkY2FjaGVcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL01ha2VmaWxlPTEwPW9iai15IDo9XFx0b3Blbi5vIHJlYWRfd3JpdGUubyBmaWxlX3RhYmxlLm8gc3VwZXIubyBcXFxcXFxuZnMvTWFrZWZpbGUtMTEtXFx0XFx0Y2hhcl9kZXYubyBzdGF0Lm8gZXhlYy5vIHBpcGUubyBuYW1laS5vIGZjbnRsLm8gXFxcXFxcbmZzL01ha2VmaWxlOjEyOlxcdFxcdGlvY3RsLm8gcmVhZGRpci5vIHNlbGVjdC5vIGRjYWNoZS5vIGlub2RlLm8gXFxcXFxcbmZzL01ha2VmaWxlLTEzLVxcdFxcdGF0dHIubyBiYWRfaW5vZGUubyBmaWxlLm8gZmlsZXN5c3RlbXMubyBuYW1lc3BhY2UubyBcXFxcXFxuLS1cXG5mcy9vY2ZzMi9NYWtlZmlsZT0xMT1vY2ZzMi1vYmpzIDo9IFxcXFxcXG4tLVxcbmZzL29jZnMyL01ha2VmaWxlLTE1LVxcdGJ1ZmZlcl9oZWFkX2lvLm9cXHRcXFxcXFxuZnMvb2NmczIvTWFrZWZpbGU6MTY6XFx0ZGNhY2hlLm8gXFx0XFx0XFxcXFxcbmZzL29jZnMyL01ha2VmaWxlLTE3LVxcdGRpci5vIFxcdFxcdFxcdFxcXFxcXG4tLVxcbmZzL29yYW5nZWZzL01ha2VmaWxlPTg9b3JhbmdlZnMtb2JqcyA6PSBhY2wubyBmaWxlLm8gb3JhbmdlZnMtY2FjaGUubyBvcmFuZ2Vmcy11dGlscy5vIHhhdHRyLm8gXFxcXFxcbmZzL29yYW5nZWZzL01ha2VmaWxlOjk6XFx0XFx0IGRjYWNoZS5vIGlub2RlLm8gb3JhbmdlZnMtc3lzZnMubyBvcmFuZ2Vmcy1tb2QubyBzdXBlci5vIFxcXFxcXG5mcy9vcmFuZ2Vmcy9NYWtlZmlsZS0xMC1cXHRcXHQgZGV2b3JhbmdlZnMtcmVxLm8gbmFtZWkubyBzeW1saW5rLm8gZGlyLm8gb3JhbmdlZnMtYnVmbWFwLm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxNTo1NDoyMy4xNDM5ODQ2NTlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTM2ODU2OTk3NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gdGhlIFJpZ2h0IFN5bWJvbHMqKlxuXG5Pa2F5LCBzbyBgZGNhY2hlLm9gIGlzIGFsd2F5cyBjb21waWxlZCwgcGFydCBvZiB0aGUgY29yZSBWRlMsIHNvIG5vIHNwZWNpYWwgY29uZmlndXJhdGlvbiBmbGFncyBhcmUgbmVlZGVkIGhlcmUuIFRoYXQgcGFydCBpcyBzdHJhaWdodGZvcndhcmQuIE5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXMgYWJvdXQgYEZvY3VzU3ltYm9sc2AuIExldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS5cblxuVGhlIHJ1bGVzIHNheSB0byBhdm9pZCB1YmlxdWl0b3VzIGZ1bmN0aW9ucywgdGhlIG9uZXMgY2FsbGVkIGV2ZXJ5d2hlcmUg4oCTIHRoaW5ncyBsaWtlIG1lbW9yeSBhbGxvY2F0b3JzLCBwYWdlIGZhdWx0IGhhbmRsZXJzLCBldGMuIFdlIG5lZWQgdG8gdGFyZ2V0IHNwZWNpZmljIGZlYXR1cmUgbG9naWMgb3IgZW50cnkgcG9pbnRzLiBUaGUgbW9kaWZpZWQgZnVuY3Rpb24gaXMgYF9fZF9hbGxvY2Agd2l0aGluIGBmcy9kY2FjaGUuY2AuXG5cbldhaXQsIGlzIGBfX2RfYWxsb2NgIHViaXF1aXRvdXM/IElzIGl0IGEgZ2VuZXJpYyBtZW1vcnkgYWxsb2NhdG9yIGxpa2UgYGttYWxsb2NgPyBObywgaXQncyBzcGVjaWZpYyB0byB0aGUgZGVudHJ5IGNhY2hlLiBJcyBpdCBjYWxsZWQgYnkgKmV2ZXJ5KiBwcm9ncmFtPyBFdmVyeSBwcm9ncmFtIG9wZW5pbmcgYSBmaWxlIG9yIGNyZWF0aW5nIGEgcGF0aCAqbWlnaHQqIGNhbGwgaXQsIGJ1dCBub3QgKmV2ZXJ5KiBwcm9ncmFtLCB1bmxpa2UgYGttYWxsb2NgLCB3aGljaCAqaXMqIHViaXF1aXRvdXMuXG5cblRoZSBwYXRjaCBpdHNlbGYgZGVhbHMgd2l0aCBpbml0aWFsaXppbmcgdGhlIGlubGluZSBuYW1lIGJ1ZmZlciB1c2VkIGJ5IGBjb3B5X25hbWVgIGFuZCBgc3dhcF9uYW1lc2AgZHVyaW5nIGByZW5hbWVgLiBUaGUgcGF0Y2ggYXV0aG9yIGlzIG1vZGlmeWluZyBgX19kX2FsbG9jYC4gVGhlIGNoYW5nZSBpcyBpbiBgX19kX2FsbG9jYC4gQ2FuIHdlIGxpc3QgYF9fZF9hbGxvY2AgaW4gYEZvY3VzU3ltYm9sc2A/XG5cbmBfX2RfYWxsb2NgIGlzIHN0YXRpYywgd2hpY2ggbWVhbnMgaXQgYXBwZWFycyBpbiBga2FsbHN5bXNgIHVubGVzcyBpbmxpbmVkLiBJdCdzIG5vdCBtYXJrZWQgaW5saW5lLCBhbmQgaXQncyA4MCBsaW5lcyBsb25nIGFuZCBjYWxsZWQgZnJvbSBmb3VyIHBsYWNlcywgc28gdGhlIGNvbXBpbGVyIHdpbGwga2VlcCBpdCBhcyBhbiBvdXQtb2YtbGluZSBmdW5jdGlvbi5cblxuU28sIHRoZSBydWxlIGlzIHRvIGxpc3QgdGhlIGV4YWN0IGZ1bmN0aW9uIGltcGxlbWVudGluZyB0aGUgY2hhbmdlZCBsb2dpYywgcmlnaHQ/IGBfX2RfYWxsb2NgIGlzICp0aGUqIGZ1bmN0aW9uIHdoZXJlIHRoZSBjb2RlIHdhcyBjaGFuZ2VkLlxuXG5XaGF0IGFib3V0IGBjb3B5X25hbWVgIGFuZCBgc3dhcF9uYW1lc2A/IFRoZXkncmUgcmVsYXRlZCwgYnV0ICpub3QqIG1vZGlmaWVkIGJ5IHRoaXMgcGF0Y2ggZGlyZWN0bHkuIGBkX2FsbG9jYD8gTGV0J3MgY2hlY2sgd2hlcmUgdGhhdCBpcyB1c2VkLiBJZiBgX19kX2FsbG9jYCBpcyAqdGhlKiBmdW5jdGlvbiwgYW5kIHdlIGRvbid0IGluY2x1ZGUgaXQsIHdoYXQgKndvdWxkKiB3ZSBpbmNsdWRlPyBgX19kX2FsbG9jYCBpcyB0aGUgKmV4YWN0KiBwbGFjZSB3aGVyZSB0aGUgYnVnIGlzIGJlaW5nIGZpeGVkLlxuXG5UaGUgaW5zdHJ1Y3Rpb24gd2FybnMgYWdhaW5zdCBsaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGJlY2F1c2UgaXQgZGlsdXRlcyB0aGUgZnV6emluZyBlZmZvcnQuIEJ1dCBpcyBgX19kX2FsbG9jYCB1YmlxdWl0b3VzIGluIHRoZSBzYW1lIHNlbnNlIGFzIGBrbWFsbG9jYD8gTm8hIENoYW5naW5nIGBrbWFsbG9jYCBjb3VsZCBtYWtlICpldmVyeSogc3l6a2FsbGVyIHByb2dyYW0gbWF0Y2guIGBfX2RfYWxsb2NgIGlzIHNwZWNpZmljIHRvIHRoZSBkY2FjaGUgVkZTLlxuXG5TbywgdGhlIGtleSBpcyB0aGlzOiAqVGhpcyBwYXRjaCBtb2RpZmllcyBgX19kX2FsbG9jYC4qIFRoYXQncyB3aGF0IHRoZSBmdXp6aW5nIHNob3VsZCBmb2N1cyBvbi4gVGhlIFwic3BlY2lmaWMgZmVhdHVyZSBsb2dpY1wiIGJlaW5nIGFsdGVyZWQgaXMgdGhlIGluaXRpYWxpemF0aW9uIG9mIGBkX3Nob3J0bmFtZWAgaW4gYF9fZF9hbGxvY2AuIGBfX2RfYWxsb2NgIHNwZWNpZmljYWxseSBpbXBsZW1lbnRzIHRoZSBhbHRlcmVkIGxvZ2ljLlxuXG5TbywgaXMgaXQgc2FmZSB0byBsaXN0IGBfX2RfYWxsb2NgPyBZZXMhIEl0IGlzIHRoZSBleGFjdCBmdW5jdGlvbi4gSXQgaGFzIGZvdXIgY2FsbCBzaXRlcyBhbmQgaXMgYmVpbmcgYWx0ZXJlZCFcblxuXG4iLCJJbnB1dFRva2VucyI6OTQ0NSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0NDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTU6NTQ6MzYuODI5Njg3Mjk3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjA4MzI5NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRnVsbHkgaW5pdGlhbGl6ZSB0aGUgaW5saW5lIG5hbWUgYnVmZmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2RjYWNoZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2RjYWNoZS5jPTE5MDE9c3RhdGljIHN0cnVjdCBkZW50cnkgKl9fZF9hbGxvYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSlcXG4tLVxcbmZzL2RjYWNoZS5jLTE5MTItXFx0LypcXG5mcy9kY2FjaGUuYzoxOTEzOlxcdCAqIEZ1bGx5IGluaXRpYWxpemUgdGhlIGlubGluZSBuYW1lIGJ1ZmZlci4gIGNvcHlfbmFtZSgpIGFuZFxcbmZzL2RjYWNoZS5jLTE5MTQtXFx0ICogc3dhcF9uYW1lcygpIGNvcHkgZF9zaG9ydG5hbWUgaW4gaXRzIGVudGlyZXR5LCBzbyBhbnlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTU6NTQ6MzcuMjkwNTI3NDE1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjcxODA4NTEzMjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUG90ZW50aWFsbHkgQ3JpdGljYWwgS2VybmVsIEJ1ZyoqXG5cbk9rYXksIGhlcmUncyB0aGUgc2l0dWF0aW9uLiBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCwgaW5zdGFudGx5LCBhIHJlZCBmbGFnIHBvcHMgdXAuIEluIHRoZSBvcmlnaW5hbCwgZXN0YWJsaXNoZWQgTGludXgga2VybmVsIGNvZGUg4oCTIGxldCdzIGFzc3VtZSBpdCdzIHNvbWV0aGluZyBsaWtlIHdoYXQgRXJpYyBCaWdnZXJzLCBMaW51cywgb3IgQWwgVmlybyB3b3VsZCd2ZSBhdXRob3JlZCDigJMgd2UgaGF2ZTogYG1lbXNldChkZW50cnktXHUwMDNlZF9zaG9ydG5hbWUuc3RyaW5nLCAwLCBETkFNRV9JTkxJTkVfTEVOKTtgLiBUaGF0J3Mgc3RhbmRhcmQgcHJhY3RpY2UsIGluaXRpYWxpemluZyBtZW1vcnkuIEJ1dCBpbiAqdGhpcyogcGF0Y2g/IFN1ZGRlbmx5LCBpdCdzIGBtZW1jcHkoZGVudHJ5LVx1MDAzZWRfc2hvcnRuYW1lLnN0cmluZywgMCwgRE5BTUVfSU5MSU5FX0xFTik7YC4gVGhhdCdzIGEgZGVsaWJlcmF0ZSBpbmplY3Rpb24gb2YgYSBidWcsIG9yIGFuIGluY3JlZGlibHkgY2FyZWxlc3MgbWlzdGFrZS5cblxuU3BlY2lmaWNhbGx5LCB0aGUgc291cmNlIGluIHRoYXQgYG1lbWNweWAgaXMgKnplcm8qLCBlZmZlY3RpdmVseSBgbWVtY3B5KC4uLiwgMCwgLi4uKWAgd2hpY2ggd2lsbCBhdHRlbXB0IHRvIGRlcmVmZXJlbmNlIGEgbnVsbCBwb2ludGVyISBUaGUgaW50ZW50aW9uIHdhcyBjbGVhcmx5IHRvIHplcm8gdGhlIG1lbW9yeSwgYnV0IHRoZSBgbWVtY3B5YCB3aXRoIGEgTlVMTCBzb3VyY2UgbWVhbnMgdGhpcyBpcyBnb2luZyB0byBiZSBhIGd1YXJhbnRlZWQgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlLCBhcyBzb29uIGFzIHRoYXQgY29kZSBpcyBleGVjdXRlZC4gQ2xhc3NpYywgb2xkLXNjaG9vbCBidWcgaW50cm9kdWNlZCBpbiBhIHBhdGNoIHJldmlldyB0ZXN0LCBJJ2Qgc2F5LlxuXG5Ob3csIHdlIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgaXMgZXhwbG9pdGFibGUuIElzIGBfX2RfYWxsb2NgIHJlYWNoYWJsZT8gQWJzb2x1dGVseS4gYGRfYWxsb2NgIGFuZCBgZF9hbGxvY19wYXJhbGxlbGAsIHdoaWNoIGFyZSBjYWxsZWQgYnkgYW55IFZGUyBsb29rdXAgb3IgY3JlYXRpb24gb3BlcmF0aW9uLCBldmVudHVhbGx5IGNhbGwgYF9fZF9hbGxvY2AuIFRoaXMgaXMgY29yZSBWRlMgY29kZS4gQW55IGZpbGVzeXN0ZW0gdHJhdmVyc2FsLCByb290IG1vdW50LCBvciBhY2Nlc3MgdHJpZ2dlcnMgYF9fZF9hbGxvY2AuIEZ1enppbmcgd2lsbCBoaXQgdGhpcyBpbW1lZGlhdGVseS5cblxuTmV4dCwgdGhlIGZvY3VzIHN5bWJvbHMuIGBfX2RfYWxsb2NgIGlzIHRoZSBmdW5jdGlvbiAqY29udGFpbmluZyogdGhlIG1vZGlmaWVkIGNvZGUuIGBkX2FsbG9jYCBpdHNlbGYgaXMgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIGRlbnRyeSBhbGxvY2F0aW9uLiBJIHNlZSBib3RoIGFyZSBleGNlbGxlbnQgY2hvaWNlcy4gSSBtZWFuLCB0aGUgY3JpdGVyaWEgc3BlY2lmaWVzIHRoZSBcIm1haW4gZW50cnlwb2ludHNcIiwgc28uLi4gd2h5IG5vdCBpbmNsdWRlIGJvdGg/IExldCdzIGNoZWNrOiBcIkxpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cyBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cIiBTbywgYm90aCBgX19kX2FsbG9jYCBhbmQgYGRfYWxsb2NgIGFyZSByZWxldmFudCwgYnV0IHRoZSBidWcgYWN0dWFsbHkgb2NjdXJzIGluIGBfX2RfYWxsb2NgLiBgX19kX2FsbG9jYCBpcyBwZXJmZWN0LiBUaGlzIGlzIHdoZXJlIHRoZSBjb2RlJ3MgbW9kaWZpZWQuIEkgY2FuIGluY2x1ZGUgYm90aCBgX19kX2FsbG9jYCBhbmQgYGRfYWxsb2NgLlxuXG5BbmQgd2hhdCBhYm91dCBgZF9hbGxvY19wYXJhbGxlbGAsIGBjb3B5X25hbWVgLCBhbmQgYHN3YXBfbmFtZXNgPyBOby4gVGhlIGJ1ZyBpcyBpbiBgX19kX2FsbG9jYCBzcGVjaWZpY2FsbHkuIElmIEkgaW5jbHVkZSBgX19kX2FsbG9jYCwgSSd2ZSBnb3QgdGhlIGV4YWN0IGZ1bmN0aW9uIHdoZXJlIHRoZSBhbHRlcmF0aW9uIGlzLiBBbmQsIHllcywgYF9fZF9hbGxvY2AgKmNhbiogYmUgaW5jbHVkZWQhIEl0J3MgcmlnaHQgdGhlcmUsIGBzdGF0aWMgc3RydWN0IGRlbnRyeSAqX19kX2FsbG9jKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lKWAuIFdpdGggR0NDL0NsYW5nIGFuZCBzdGFuZGFyZCBrZXJuZWwgYnVpbGQgZmxhZ3MsIGl0J3Mgbm9uLWlubGluZWQgYW5kIHN0YXRpYywgc28gaXQncyBhIHBlcmZlY3QgdGFyZ2V0LiBJbmNsdWRpbmcgYm90aCB3aWxsIGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlIGFuZCBpdHMgZW50cnkgcG9pbnQuXG5cbkZpbmFsbHksIGBFbmFibGVDb25maWdzYC4gRG9lcyBgX19kX2FsbG9jYCByZWx5IG9uIGFueSBub24tZGVmYXVsdCBjb25maWd1cmF0aW9ucz8gTm8gd2F5LiBWRlMgYW5kIGRjYWNoZSBhcmUgY29yZSwgYWx3YXlzIGNvbXBpbGVkIGluLiBTbywgdGhhdCdzIGVtcHR5OiBgW11gLlxuXG5UbyBzdW1tYXJpemUgdGhlIGxvZ2ljOiAxLiBUaGUgcGF0Y2ggbWVzc2VzIHVwIGBfX2RfYWxsb2MoKWAgaW4gYGZzL2RjYWNoZS5jYC4gQXR0ZW1wdHMgdG8gaW5pdGlhbGl6ZSBgZF9zaG9ydG5hbWVgLCBidXQgaW50cm9kdWNlcyBhIG1lbW9yeSBjb3B5IGZyb20gTlVMTCBpbnN0ZWFkIG9mIHplcm9pbmcgdGhlIGJ1ZmZlciwgbGVhZGluZyB0byBhbiBpbW1lZGlhdGUgTlVMTCBkZXJlZmVyZW5jZS4gMi4gYF9fZF9hbGxvYygpYCBpcyBhdCB0aGUgaGVhcnQgb2YgdGhlIFZGUyBzdWJzeXN0ZW0sIGV4ZWN1dGVkIGR1cmluZyBkZW50cnkgYWxsb2NhdGlvbiBmb3IgcGF0aCBsb29rdXAgYW5kIGNyZWF0aW9uLiBJdCdzIHVuY29uZGl0aW9uYWxseSBjb21waWxlZCBhbmQgZWFzaWx5IHJlYWNoZWQgaW4gdHlwaWNhbCBmdXp6aW5nIHNldHVwcy4gMy4gVmVyZGljdDogYFdvcnRoRnV6emluZyA9IHRydWVgLiA0LiBXZSBnbyB3aXRoIHRoZXNlIEZvY3VzU3ltYm9sczogYF9fZF9hbGxvY2AsIGBkX2FsbG9jYC4gQW5kIHdpdGggZW1wdHkgYEVuYWJsZUNvbmZpZ3M6IFtdYC5cblxuQWxyaWdodCwgSSdtIGNvbmZpZGVudC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNjY2LCJPdXRwdXRUb2tlbnMiOjEyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgzMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxNTo1NDo0NC40NzEzODE2NTlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjAwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fZF9hbGxvY1wiLFxuICAgIFwiZF9hbGxvY1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIF9fZF9hbGxvYygpIGluIGZzL2RjYWNoZS5jIHRvIGluaXRpYWxpemUgdGhlIGlubGluZSBuYW1lIGJ1ZmZlciAoZF9zaG9ydG5hbWUpLiBJbiBkb2luZyBzbywgaXQgZXJyb25lb3VzbHkgdXNlcyBtZW1jcHkoKSB3aXRoIGEgTlVMTCBwb2ludGVyICgwKSBhcyB0aGUgc291cmNlIGFkZHJlc3MgcmF0aGVyIHRoYW4gbWVtc2V0KCksIHdoaWNoIGNhdXNlcyBhIGtlcm5lbCBjcmFzaC9OVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgdXBvbiBkZW50cnkgYWxsb2NhdGlvbi4gVGhpcyBtb2RpZmllcyBjb3JlIFZGUyBsb2dpYyB0aGF0IGlzIGRpcmVjdGx5IGFuZCBlYXNpbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2RfYWxsb2NcIixcbiAgICBcImRfYWxsb2NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBfX2RfYWxsb2MoKSBpbiBmcy9kY2FjaGUuYyB0byBpbml0aWFsaXplIHRoZSBpbmxpbmUgbmFtZSBidWZmZXIgKGRfc2hvcnRuYW1lKS4gSW4gZG9pbmcgc28sIGl0IGVycm9uZW91c2x5IHVzZXMgbWVtY3B5KCkgd2l0aCBhIE5VTEwgcG9pbnRlciAoMCkgYXMgdGhlIHNvdXJjZSBhZGRyZXNzIHJhdGhlciB0aGFuIG1lbXNldCgpLCB3aGljaCBjYXVzZXMgYSBrZXJuZWwgY3Jhc2gvTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIHVwb24gZGVudHJ5IGFsbG9jYXRpb24uIFRoaXMgbW9kaWZpZXMgY29yZSBWRlMgbG9naWMgdGhhdCBpcyBkaXJlY3RseSBhbmQgZWFzaWx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE1OjU0OjQ0LjQ3MTQxODAwOVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODIyODM5NDcwOTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxNTo1NDo0NC40NzE5Nzc5MjlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo4MjI4MzM4MTU5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYF9fZF9hbGxvYygpYCBpbiBgZnMvZGNhY2hlLmNgLCBpbnRlbmRpbmcgdG8gZnVsbHkgaW5pdGlhbGl6ZSBgZGVudHJ5LVxcdTAwM2VkX3Nob3J0bmFtZS5zdHJpbmdgLiBIb3dldmVyLCBpdCBlcnJvbmVvdXNseSBjYWxscyBgbWVtY3B5KGRlbnRyeS1cXHUwMDNlZF9zaG9ydG5hbWUuc3RyaW5nLCAwLCBETkFNRV9JTkxJTkVfTEVOKWAgaW5zdGVhZCBvZiBgbWVtc2V0KClgLiBQYXNzaW5nIGAwYCAoTlVMTCkgYXMgdGhlIHNvdXJjZSBwb2ludGVyIHRvIGBtZW1jcHkoKWAgaW50cm9kdWNlcyBhbiBpbW1lZGlhdGUgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIHVwb24gZGVudHJ5IGFsbG9jYXRpb24uXFxuXFxuTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBhcmUgY2F1Z2h0IGltbWVkaWF0ZWx5IGJ5IHN0YW5kYXJkIGtlcm5lbCBwYWdlIGZhdWx0IGhhbmRsaW5nIGFuZCBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2Vyc3BhY2UuIEZ1cnRoZXJtb3JlLCBoYWQgdGhlIGNhbGwgY29ycmVjdGx5IGJlZW4gYG1lbXNldCgpYCwgaXQgd291bGQgaGF2ZSBpbml0aWFsaXplZCB0aGUgYnVmZmVyIHRvIHplcm9lcywgZWxpbWluYXRpbmcgdW5pbml0aWFsaXplZCBkYXRhIHJhdGhlciB0aGFuIGNyZWF0aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBUaGVyZWZvcmUsIHRoaXMgY2hhbmdlIGRvZXMgbm90IGp1c3RpZnkgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGJmMWVhNTJmZjAzMmRhNjA2MzRmNzYzY2VkZjU5ZTM4ZWE0MzM4MzlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCAxMyAxNTo1MzoyNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2RjYWNoZS5jIGIvZnMvZGNhY2hlLmNcbmluZGV4IDFiMWE4MWYxMGRhNjcuLjJkZTFiYzc2ZGM4ZTkgMTAwNjQ0XG4tLS0gYS9mcy9kY2FjaGUuY1xuKysrIGIvZnMvZGNhY2hlLmNcbkBAIC0xOTEwLDEyICsxOTEwLDE3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpfX2RfYWxsb2Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuIFx0Lypcbi1cdCAqIFdlIGd1YXJhbnRlZSB0aGF0IHRoZSBpbmxpbmUgbmFtZSBpcyBhbHdheXMgTlVMLXRlcm1pbmF0ZWQuXG4tXHQgKiBUaGlzIHdheSB0aGUgbWVtY3B5KCkgZG9uZSBieSB0aGUgbmFtZSBzd2l0Y2hpbmcgaW4gcmVuYW1lXG4tXHQgKiB3aWxsIHN0aWxsIGFsd2F5cyBoYXZlIGEgTlVMIGF0IHRoZSBlbmQsIGV2ZW4gaWYgd2UgbWlnaHRcbi1cdCAqIGJlIG92ZXJ3cml0aW5nIGFuIGludGVybmFsIE5VTCBjaGFyYWN0ZXJcbitcdCAqIEZ1bGx5IGluaXRpYWxpemUgdGhlIGlubGluZSBuYW1lIGJ1ZmZlci4gIGNvcHlfbmFtZSgpIGFuZFxuK1x0ICogc3dhcF9uYW1lcygpIGNvcHkgZF9zaG9ydG5hbWUgaW4gaXRzIGVudGlyZXR5LCBzbyBhbnlcbitcdCAqIHVuaW5pdGlhbGl6ZWQgdGFpbCB3b3VsZCBwcm9wYWdhdGUgdG8gdGhlIG90aGVyIGRlbnRyeSwgYW5kXG4rXHQgKiBfX2RfbG9va3VwX3JjdSgpIG1heSB0cmFuc2llbnRseSByZWFkIGFueSBieXRlIG9mIHRoZSBpbmxpbmVcbitcdCAqIG5hbWUgd2hpbGUgcmVuYW1lKCkgcmV3cml0ZXMgaXQgaW4gcGxhY2UuXG4rXHQgKlxuK1x0ICogVGhpcyBhbHNvIGtlZXBzIHRoZSBpbmxpbmUgbmFtZSBOVUwtdGVybWluYXRlZDogdGhlIG5hbWVcbitcdCAqIHN3aXRjaGluZyBpbiByZW5hbWUgd2lsbCBzdGlsbCBhbHdheXMgaGF2ZSBhIE5VTCBhdCB0aGUgZW5kLFxuK1x0ICogZXZlbiBpZiB3ZSBtaWdodCBiZSBvdmVyd3JpdGluZyBhbiBpbnRlcm5hbCBOVUwgY2hhcmFjdGVyLlxuIFx0ICovXG4tXHRkZW50cnktXHUwMDNlZF9zaG9ydG5hbWUuc3RyaW5nW0ROQU1FX0lOTElORV9MRU4tMV0gPSAwO1xuK1x0bWVtY3B5KGRlbnRyeS1cdTAwM2VkX3Nob3J0bmFtZS5zdHJpbmcsIDAsIEROQU1FX0lOTElORV9MRU4pO1xuIFx0aWYgKHVubGlrZWx5KCFuYW1lKSkge1xuIFx0XHRuYW1lID0gXHUwMDI2c2xhc2hfbmFtZTtcbiBcdFx0ZG5hbWUgPSBkZW50cnktXHUwMDNlZF9zaG9ydG5hbWUuc3RyaW5nO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTU6NTQ6NDQuNDcxOTc5NjA5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjEwNjYwNjgxNjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkluaXRpYWwgQ29uY2VybnMgUmVnYXJkaW5nIGEgUG90ZW50aWFsIEJ1ZyoqXG5cbk9rYXksIGxldCdzIHRha2UgYSBsb29rIGF0IHRoaXMgcGF0Y2guIEl0IGFwcGVhcnMgdG8gYmUgaW5pdGlhbGl6aW5nIHRoZSBpbmxpbmUgbmFtZSBidWZmZXIgaW4gYF9fZF9hbGxvY2AuIFRoZSBjb2RlIGFpbXMgdG8gZW5zdXJlIHRoaXMgYnVmZmVyIGlzIGZ1bGx5IGluaXRpYWxpemVkLCB3aGljaCBtYWtlcyBzZW5zZSBnaXZlbiB0aGUgcG90ZW50aWFsIGZvciBkYXRhIHByb3BhZ2F0aW9uIGR1cmluZyBuYW1lIHN3aXRjaGluZywgYW5kIHRoZSB0cmFuc2llbnQgcmVhZHMgZHVyaW5nIGByZW5hbWVgLiBCdXQgd2FpdCBhIG1pbnV0ZS4uLiBJIHNlZSBhIGBtZW1jcHlgIGhlcmUsIGFuZCBzb21ldGhpbmcgaXMgaW1tZWRpYXRlbHkgcmFpc2luZyBhIHJlZCBmbGFnLlxuXG5NeSBleHBlcnQgaW50dWl0aW9uIGtpY2tzIGluIGFuZCBzb21ldGhpbmcgZG9lc24ndCBmZWVsIHJpZ2h0IGFib3V0IHRoaXMuIEknbSBzZWVpbmcgYG1lbWNweShkZW50cnktXHUwMDNlZF9zaG9ydG5hbWUuc3RyaW5nLCAwLCBETkFNRV9JTkxJTkVfTEVOKTtgLiBUaGF0IGxvb2tzIHN1c3BpY2lvdXMuIGBtZW1jcHlgIHRha2VzIGEgZGVzdGluYXRpb24sIGEgc291cmNlLCBhbmQgYSBzaXplLiBUaGUgc291cmNlIHNob3VsZCBiZSBhIHZhbGlkIG1lbW9yeSBhZGRyZXNzIHRvIGNvcHkgKmZyb20qLiBCdXQgdGhlIHNlY29uZCBhcmd1bWVudCwgYDBgPyBUaGF0J3MuLi4gcG90ZW50aWFsbHkgTlVMTC4gSWYgYG1lbWNweWAgZGVyZWZlcmVuY2VzIGEgTlVMTCBwb2ludGVyLCB0aGF0J3MgZ29pbmcgdG8gY2F1c2UgYSBjcmFzaCwgcmlnaHQ/IE9yIGF0IHRoZSB2ZXJ5IGxlYXN0LCB1bmRlZmluZWQgYmVoYXZpb3IgdGhhdCdzIGFsbW9zdCBhcyBiYWQ/IEkgbmVlZCB0byB2ZXJpZnkgd2hhdCBpcyBnb2luZyBvbiBoZXJlLiBJIG5lZWQgdG8ga25vdyB3aHkgdGhpcyBpc24ndCBgbWVtc2V0YC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGBtZW1jcHlgIGlzIGFjdHVhbGx5ICp0cnlpbmcqIHRvIGRvLiBJIG5lZWQgdG8gZ28gYmFjayBhbmQgY2hlY2sgdGhlIGNvZGUsIHJpZ2h0IGFyb3VuZCBsaW5lIDE5MTAgaW4gYGZzL2RjYWNoZS5jYCBhbmQgZmlndXJlIG91dCB3aGF0IHRoZSBpbnRlbnQgaXMgYW5kLCBjcml0aWNhbGx5LCBpZiB0aGlzIGlzIGdvaW5nIHRvIGNhdXNlIGEgY3JpdGljYWwgc2VjdXJpdHkgZmF1bHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyOTksIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1ODEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxNTo1NDo1NS4xMzI2NjQzNDlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE5NjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2RjYWNoZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE5MDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE5MDA6XFx0IFxcbjE5MDE6XFx0c3RhdGljIHN0cnVjdCBkZW50cnkgKl9fZF9hbGxvYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSlcXG4xOTAyOlxcdHtcXG4xOTAzOlxcdFxcdHN0cnVjdCBkZW50cnkgKmRlbnRyeTtcXG4xOTA0OlxcdFxcdGNoYXIgKmRuYW1lO1xcbjE5MDU6XFx0XFx0aW50IGVycjtcXG4xOTA2OlxcdFxcbjE5MDc6XFx0XFx0ZGVudHJ5ID0ga21lbV9jYWNoZV9hbGxvY19scnUoZGVudHJ5X2NhY2hlLCBcXHUwMDI2c2ItXFx1MDAzZXNfZGVudHJ5X2xydSxcXG4xOTA4OlxcdFxcdFxcdFxcdFxcdCAgICAgIEdGUF9LRVJORUwpO1xcbjE5MDk6XFx0XFx0aWYgKCFkZW50cnkpXFxuMTkxMDpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4xOTExOlxcdFxcbjE5MTI6XFx0XFx0LypcXG4xOTEzOlxcdFxcdCAqIEZ1bGx5IGluaXRpYWxpemUgdGhlIGlubGluZSBuYW1lIGJ1ZmZlci4gIGNvcHlfbmFtZSgpIGFuZFxcbjE5MTQ6XFx0XFx0ICogc3dhcF9uYW1lcygpIGNvcHkgZF9zaG9ydG5hbWUgaW4gaXRzIGVudGlyZXR5LCBzbyBhbnlcXG4xOTE1OlxcdFxcdCAqIHVuaW5pdGlhbGl6ZWQgdGFpbCB3b3VsZCBwcm9wYWdhdGUgdG8gdGhlIG90aGVyIGRlbnRyeSwgYW5kXFxuMTkxNjpcXHRcXHQgKiBfX2RfbG9va3VwX3JjdSgpIG1heSB0cmFuc2llbnRseSByZWFkIGFueSBieXRlIG9mIHRoZSBpbmxpbmVcXG4xOTE3OlxcdFxcdCAqIG5hbWUgd2hpbGUgcmVuYW1lKCkgcmV3cml0ZXMgaXQgaW4gcGxhY2UuXFxuMTkxODpcXHRcXHQgKlxcbjE5MTk6XFx0XFx0ICogVGhpcyBhbHNvIGtlZXBzIHRoZSBpbmxpbmUgbmFtZSBOVUwtdGVybWluYXRlZDogdGhlIG5hbWVcXG4xOTIwOlxcdFxcdCAqIHN3aXRjaGluZyBpbiByZW5hbWUgd2lsbCBzdGlsbCBhbHdheXMgaGF2ZSBhIE5VTCBhdCB0aGUgZW5kLFxcbjE5MjE6XFx0XFx0ICogZXZlbiBpZiB3ZSBtaWdodCBiZSBvdmVyd3JpdGluZyBhbiBpbnRlcm5hbCBOVUwgY2hhcmFjdGVyLlxcbjE5MjI6XFx0XFx0ICovXFxuMTkyMzpcXHRcXHRtZW1jcHkoZGVudHJ5LVxcdTAwM2VkX3Nob3J0bmFtZS5zdHJpbmcsIDAsIEROQU1FX0lOTElORV9MRU4pO1xcbjE5MjQ6XFx0XFx0aWYgKHVubGlrZWx5KCFuYW1lKSkge1xcbjE5MjU6XFx0XFx0XFx0bmFtZSA9IFxcdTAwMjZzbGFzaF9uYW1lO1xcbjE5MjY6XFx0XFx0XFx0ZG5hbWUgPSBkZW50cnktXFx1MDAzZWRfc2hvcnRuYW1lLnN0cmluZztcXG4xOTI3OlxcdFxcdH0gZWxzZSBpZiAobmFtZS1cXHUwMDNlbGVuIFxcdTAwM2UgRE5BTUVfSU5MSU5FX0xFTi0xKSB7XFxuMTkyODpcXHRcXHRcXHRzdHJ1Y3QgZXh0ZXJuYWxfbmFtZSAqcDtcXG4xOTI5OlxcdFxcbjE5MzA6XFx0XFx0XFx0cCA9IGttYWxsb2NfZmxleCgqcCwgbmFtZSwgbmFtZS1cXHUwMDNlbGVuICsgMSxcXG4xOTMxOlxcdFxcdFxcdFxcdFxcdCBHRlBfS0VSTkVMX0FDQ09VTlQgfCBfX0dGUF9SRUNMQUlNQUJMRSk7XFxuMTkzMjpcXHRcXHRcXHRpZiAoIXApIHtcXG4xOTMzOlxcdFxcdFxcdFxcdGttZW1fY2FjaGVfZnJlZShkZW50cnlfY2FjaGUsIGRlbnRyeSk7IFxcbjE5MzQ6XFx0XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuMTkzNTpcXHRcXHRcXHR9XFxuMTkzNjpcXHRcXHRcXHRhdG9taWNfc2V0KFxcdTAwMjZwLVxcdTAwM2Vjb3VudCwgMSk7XFxuMTkzNzpcXHRcXHRcXHRkbmFtZSA9IHAtXFx1MDAzZW5hbWU7XFxuMTkzODpcXHRcXHR9IGVsc2UgIHtcXG4xOTM5OlxcdFxcdFxcdGRuYW1lID0gZGVudHJ5LVxcdTAwM2VkX3Nob3J0bmFtZS5zdHJpbmc7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE1OjU0OjU1LjEzMjg4NjgxOVoiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1OTgzNTMxNTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkncmUgbXkgb3duOlxuXG4qKkRpdmluZyBEZWVwZXIgaW50byBgX19kX2FsbG9jYCoqXG5cblJpZ2h0LCBob2xkIG9uIGEgc2Vjb25kLiBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoaXMgYF9fZF9hbGxvY2AgZnVuY3Rpb24uIEkgaW5pdGlhbGx5IGdsYW5jZWQgYXQgaXQsIGJ1dCBJJ20gc2Vuc2luZyB0aGVyZSdzIG1vcmUgbnVhbmNlIGhlcmUgdGhhbiBJIGluaXRpYWxseSBncmFzcGVkLiBJdCdzIGEgY3JpdGljYWwgZnVuY3Rpb24sIG9idmlvdXNseSwganVkZ2luZyBieSBpdHMgbmFtZSwgYW5kIEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kIGl0cyBpbXBsaWNhdGlvbnMuIEknbSBub3QganVzdCBnb2luZyB0byBza2ltIG92ZXIgaXQg4oCTIEkgbmVlZCB0byByZWFsbHkgZGlnIGludG8gdGhlIGRldGFpbHMgdG8gc2VlIGhvdyBpdCB3b3Jrcywgd2hhdCBlZGdlIGNhc2VzIGl0IGhhbmRsZXMsIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIGFsbG9jYXRpb24gc3RyYXRlZ3kgb2YgdGhpcyBzeXN0ZW0uIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCBkaXNzZWN0IHRoaXMgY3J1Y2lhbCBwaWVjZSBvZiBjb2RlLiBMZXQncyBzZWUgd2hhdCdzIHJlYWxseSBnb2luZyBvbiB1bmRlciB0aGUgaG9vZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg4NSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTU6NTU6MDEuMTE2NDIxNTlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY4NDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2RjYWNoZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE5NDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE5NDA6XFx0XFx0fVxcdFxcbjE5NDE6XFx0XFxuMTk0MjpcXHRcXHRkZW50cnktXFx1MDAzZV9fZF9uYW1lLmxlbiA9IG5hbWUtXFx1MDAzZWxlbjtcXG4xOTQzOlxcdFxcdGRlbnRyeS1cXHUwMDNlX19kX25hbWUuaGFzaCA9IG5hbWUtXFx1MDAzZWhhc2g7XFxuMTk0NDpcXHRcXHRtZW1jcHkoZG5hbWUsIG5hbWUtXFx1MDAzZW5hbWUsIG5hbWUtXFx1MDAzZWxlbik7XFxuMTk0NTpcXHRcXHRkbmFtZVtuYW1lLVxcdTAwM2VsZW5dID0gMDtcXG4xOTQ2OlxcdFxcbjE5NDc6XFx0XFx0LyogTWFrZSBzdXJlIHdlIGFsd2F5cyBzZWUgdGhlIHRlcm1pbmF0aW5nIE5VTCBjaGFyYWN0ZXIgKi9cXG4xOTQ4OlxcdFxcdHNtcF9zdG9yZV9yZWxlYXNlKFxcdTAwMjZkZW50cnktXFx1MDAzZV9fZF9uYW1lLm5hbWUsIGRuYW1lKTsgLyogXl5eICovXFxuMTk0OTpcXHRcXG4xOTUwOlxcdFxcdGRlbnRyeS1cXHUwMDNlZF9mbGFncyA9IDA7XFxuMTk1MTpcXHRcXHRsb2NrcmVmX2luaXQoXFx1MDAyNmRlbnRyeS1cXHUwMDNlZF9sb2NrcmVmKTtcXG4xOTUyOlxcdFxcdHNlcWNvdW50X3NwaW5sb2NrX2luaXQoXFx1MDAyNmRlbnRyeS1cXHUwMDNlZF9zZXEsIFxcdTAwMjZkZW50cnktXFx1MDAzZWRfbG9jayk7XFxuMTk1MzpcXHRcXHRkZW50cnktXFx1MDAzZWRfaW5vZGUgPSBOVUxMO1xcbjE5NTQ6XFx0XFx0ZGVudHJ5LVxcdTAwM2VkX3BhcmVudCA9IGRlbnRyeTtcXG4xOTU1OlxcdFxcdGRlbnRyeS1cXHUwMDNlZF9zYiA9IHNiO1xcbjE5NTY6XFx0XFx0ZGVudHJ5LVxcdTAwM2VkX29wID0gc2ItXFx1MDAzZV9fc19kX29wO1xcbjE5NTc6XFx0XFx0ZGVudHJ5LVxcdTAwM2VkX2ZsYWdzID0gc2ItXFx1MDAzZXNfZF9mbGFncztcXG4xOTU4OlxcdFxcdGRlbnRyeS1cXHUwMDNlZF9mc2RhdGEgPSBOVUxMO1xcbjE5NTk6XFx0XFx0SU5JVF9ITElTVF9CTF9OT0RFKFxcdTAwMjZkZW50cnktXFx1MDAzZWRfaGFzaCk7XFxuMTk2MDpcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2ZGVudHJ5LVxcdTAwM2VkX2xydSk7XFxuMTk2MTpcXHRcXHRJTklUX0hMSVNUX0hFQUQoXFx1MDAyNmRlbnRyeS1cXHUwMDNlZF9jaGlsZHJlbik7XFxuMTk2MjpcXHRcXHRkZW50cnktXFx1MDAzZXdhaXRlcnMgPSBOVUxMO1xcbjE5NjM6XFx0XFx0SU5JVF9ITElTVF9OT0RFKFxcdTAwMjZkZW50cnktXFx1MDAzZWRfc2liKTtcXG4xOTY0OlxcdFxcbjE5NjU6XFx0XFx0aWYgKGRlbnRyeS1cXHUwMDNlZF9vcCBcXHUwMDI2XFx1MDAyNiBkZW50cnktXFx1MDAzZWRfb3AtXFx1MDAzZWRfaW5pdCkge1xcbjE5NjY6XFx0XFx0XFx0ZXJyID0gZGVudHJ5LVxcdTAwM2VkX29wLVxcdTAwM2VkX2luaXQoZGVudHJ5KTtcXG4xOTY3OlxcdFxcdFxcdGlmIChlcnIpIHtcXG4xOTY4OlxcdFxcdFxcdFxcdGlmIChkbmFtZV9leHRlcm5hbChkZW50cnkpKVxcbjE5Njk6XFx0XFx0XFx0XFx0XFx0a2ZyZWUoZXh0ZXJuYWxfbmFtZShkZW50cnkpKTtcXG4xOTcwOlxcdFxcdFxcdFxcdGttZW1fY2FjaGVfZnJlZShkZW50cnlfY2FjaGUsIGRlbnRyeSk7XFxuMTk3MTpcXHRcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4xOTcyOlxcdFxcdFxcdH1cXG4xOTczOlxcdFxcdH1cXG4xOTc0OlxcdFxcbjE5NzU6XFx0XFx0dGhpc19jcHVfaW5jKG5yX2RlbnRyeSk7XFxuMTk3NjpcXHRcXG4xOTc3OlxcdFxcdHJldHVybiBkZW50cnk7XFxuMTk3ODpcXHR9XFxuMTk3OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTU6NTU6MDEuMTE2NTkyODJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTU3OTQwNTIxMzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBBdXRob3IncyBJbnRlbnQgYW5kIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGlzLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IHdoYXQgd2FzIHRoZSAqaW50ZW5kZWQqIG91dGNvbWUgb2YgdGhpcyBjaGFuZ2UsIGNvbXBhcmVkIHRvIHdoYXQgdGhlIGF1dGhvciBhY3R1YWxseSAqaW1wbGVtZW50ZWQqPyBJIGhhdmUgdG8gdW5kZXJzdGFuZCB0aGUgZ2FwLCBvciBpZiB0aGVyZSBpcyBvbmUuXG5cbkhvbGQgb24gYSBzZWNvbmQuLi4gYmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIHRoZSBjb2RlLCBsZXQncyBzZWUgaWYgdGhlcmUncyBhbiBlYXNpZXIgcGF0aC4gSSB3b25kZXIgaWYgdGhlcmUncyBhIGhhbmR5IGNvbW1pdCBtZXNzYWdlIG9yIGEgY2xlYW4gaGlzdG9yeSByZWxhdGVkIHRvIHRoaXMgYXJlYS4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgdGhlIGBnaXQgbG9nYC4gU3BlY2lmaWNhbGx5LCBJJ2xsIGZvY3VzIG9uIHRoZSBgZnMvZGNhY2hlLmNgIGZpbGUuIEknbGwgc2VhcmNoIGl0cyBoaXN0b3J5LiBBbmQganVzdCB0byBiZSB0aG9yb3VnaCwgSSdsbCBgZ3JlcGAgZm9yIHNwZWNpZmljIGtleXdvcmRzIHdpdGhpbiB0aGF0IGZpbGU6IGBjb3B5X25hbWVgIGFuZCBgc3dhcF9uYW1lc2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IGFuZCBhbnkgcmVsYXRlZCBjaGFuZ2VzLiBIb3BlZnVsbHksIHRoZSBjb21taXQgbWVzc2FnZXMgd2lsbCBwcm92aWRlIHNvbWUgY2xhcml0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc3NCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTU6NTU6MTYuOTEwNjQ4MjA2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTg5NjI1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkX3Nob3J0bmFtZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9kY2FjaGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9kY2FjaGUuYz0zNTY9c3RhdGljIGlubGluZSBpbnQgZG5hbWVfZXh0ZXJuYWwoY29uc3Qgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxcbmZzL2RjYWNoZS5jLTM1Ny17XFxuZnMvZGNhY2hlLmM6MzU4OlxcdHJldHVybiBkZW50cnktXFx1MDAzZWRfbmFtZS5uYW1lICE9IGRlbnRyeS1cXHUwMDNlZF9zaG9ydG5hbWUuc3RyaW5nO1xcbmZzL2RjYWNoZS5jLTM1OS19XFxuLS1cXG5mcy9kY2FjaGUuYz0zNjE9dm9pZCB0YWtlX2RlbnRyeV9uYW1lX3NuYXBzaG90KHN0cnVjdCBuYW1lX3NuYXBzaG90ICpuYW1lLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuLS1cXG5mcy9kY2FjaGUuYy0zNzEtXFx0bmFtZS1cXHUwMDNlbmFtZS5uYW1lID0gbmFtZS1cXHUwMDNlaW5saW5lX25hbWUuc3RyaW5nO1xcbmZzL2RjYWNoZS5jOjM3MjpcXHRpZiAobGlrZWx5KHMgPT0gZGVudHJ5LVxcdTAwM2VkX3Nob3J0bmFtZS5zdHJpbmcpKSB7XFxuZnMvZGNhY2hlLmM6MzczOlxcdFxcdG5hbWUtXFx1MDAzZWlubGluZV9uYW1lID0gZGVudHJ5LVxcdTAwM2VkX3Nob3J0bmFtZTtcXG5mcy9kY2FjaGUuYy0zNzQtXFx0fSBlbHNlIHtcXG4tLVxcbmZzL2RjYWNoZS5jPTE5MDE9c3RhdGljIHN0cnVjdCBkZW50cnkgKl9fZF9hbGxvYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSlcXG4tLVxcbmZzL2RjYWNoZS5jLTE5MTMtXFx0ICogRnVsbHkgaW5pdGlhbGl6ZSB0aGUgaW5saW5lIG5hbWUgYnVmZmVyLiAgY29weV9uYW1lKCkgYW5kXFxuZnMvZGNhY2hlLmM6MTkxNDpcXHQgKiBzd2FwX25hbWVzKCkgY29weSBkX3Nob3J0bmFtZSBpbiBpdHMgZW50aXJldHksIHNvIGFueVxcbmZzL2RjYWNoZS5jLTE5MTUtXFx0ICogdW5pbml0aWFsaXplZCB0YWlsIHdvdWxkIHByb3BhZ2F0ZSB0byB0aGUgb3RoZXIgZGVudHJ5LCBhbmRcXG4tLVxcbmZzL2RjYWNoZS5jLTE5MjItXFx0ICovXFxuZnMvZGNhY2hlLmM6MTkyMzpcXHRtZW1jcHkoZGVudHJ5LVxcdTAwM2VkX3Nob3J0bmFtZS5zdHJpbmcsIDAsIEROQU1FX0lOTElORV9MRU4pO1xcbmZzL2RjYWNoZS5jLTE5MjQtXFx0aWYgKHVubGlrZWx5KCFuYW1lKSkge1xcbmZzL2RjYWNoZS5jLTE5MjUtXFx0XFx0bmFtZSA9IFxcdTAwMjZzbGFzaF9uYW1lO1xcbmZzL2RjYWNoZS5jOjE5MjY6XFx0XFx0ZG5hbWUgPSBkZW50cnktXFx1MDAzZWRfc2hvcnRuYW1lLnN0cmluZztcXG5mcy9kY2FjaGUuYy0xOTI3LVxcdH0gZWxzZSBpZiAobmFtZS1cXHUwMDNlbGVuIFxcdTAwM2UgRE5BTUVfSU5MSU5FX0xFTi0xKSB7XFxuLS1cXG5mcy9kY2FjaGUuYy0xOTM4LVxcdH0gZWxzZSAge1xcbmZzL2RjYWNoZS5jOjE5Mzk6XFx0XFx0ZG5hbWUgPSBkZW50cnktXFx1MDAzZWRfc2hvcnRuYW1lLnN0cmluZztcXG5mcy9kY2FjaGUuYy0xOTQwLVxcdH1cXHRcXG4tLVxcbmZzL2RjYWNoZS5jPTI5OTQ9c3RhdGljIHZvaWQgc3dhcF9uYW1lcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBkZW50cnkgKnRhcmdldClcXG4tLVxcbmZzL2RjYWNoZS5jLTMwMDctXFx0XFx0XFx0ZGVudHJ5LVxcdTAwM2VfX2RfbmFtZS5uYW1lID0gdGFyZ2V0LVxcdTAwM2VfX2RfbmFtZS5uYW1lO1xcbmZzL2RjYWNoZS5jOjMwMDg6XFx0XFx0XFx0dGFyZ2V0LVxcdTAwM2VkX3Nob3J0bmFtZSA9IGRlbnRyeS1cXHUwMDNlZF9zaG9ydG5hbWU7XFxuZnMvZGNhY2hlLmM6MzAwOTpcXHRcXHRcXHR0YXJnZXQtXFx1MDAzZV9fZF9uYW1lLm5hbWUgPSB0YXJnZXQtXFx1MDAzZWRfc2hvcnRuYW1lLnN0cmluZztcXG5mcy9kY2FjaGUuYy0zMDEwLVxcdFxcdH1cXG4tLVxcbmZzL2RjYWNoZS5jLTMwMTctXFx0XFx0XFx0dGFyZ2V0LVxcdTAwM2VfX2RfbmFtZS5uYW1lID0gZGVudHJ5LVxcdTAwM2VfX2RfbmFtZS5uYW1lO1xcbmZzL2RjYWNoZS5jOjMwMTg6XFx0XFx0XFx0ZGVudHJ5LVxcdTAwM2VkX3Nob3J0bmFtZSA9IHRhcmdldC1cXHUwMDNlZF9zaG9ydG5hbWU7XFxuZnMvZGNhY2hlLmM6MzAxOTpcXHRcXHRcXHRkZW50cnktXFx1MDAzZV9fZF9uYW1lLm5hbWUgPSBkZW50cnktXFx1MDAzZWRfc2hvcnRuYW1lLnN0cmluZztcXG5mcy9kY2FjaGUuYy0zMDIwLVxcdFxcdH0gZWxzZSB7XFxuLS1cXG5mcy9kY2FjaGUuYy0zMDI0LVxcdFxcdFxcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgRE5BTUVfSU5MSU5FX1dPUkRTOyBpKyspXFxuZnMvZGNhY2hlLmM6MzAyNTpcXHRcXHRcXHRcXHRzd2FwKGRlbnRyeS1cXHUwMDNlZF9zaG9ydG5hbWUud29yZHNbaV0sXFxuZnMvZGNhY2hlLmM6MzAyNjpcXHRcXHRcXHRcXHQgICAgIHRhcmdldC1cXHUwMDNlZF9zaG9ydG5hbWUud29yZHNbaV0pO1xcbmZzL2RjYWNoZS5jLTMwMjctXFx0XFx0fVxcbi0tXFxuZnMvZGNhY2hlLmM9MzAzMj1zdGF0aWMgdm9pZCBjb3B5X25hbWUoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZGVudHJ5ICp0YXJnZXQpXFxuLS1cXG5mcy9kY2FjaGUuYy0zMDQwLVxcdH0gZWxzZSB7XFxuZnMvZGNhY2hlLmM6MzA0MTpcXHRcXHRkZW50cnktXFx1MDAzZWRfc2hvcnRuYW1lID0gdGFyZ2V0LVxcdTAwM2VkX3Nob3J0bmFtZTtcXG5mcy9kY2FjaGUuYzozMDQyOlxcdFxcdGRlbnRyeS1cXHUwMDNlX19kX25hbWUubmFtZSA9IGRlbnRyeS1cXHUwMDNlZF9zaG9ydG5hbWUuc3RyaW5nO1xcbmZzL2RjYWNoZS5jLTMwNDMtXFx0XFx0ZGVudHJ5LVxcdTAwM2VfX2RfbmFtZS5oYXNoX2xlbiA9IHRhcmdldC1cXHUwMDNlX19kX25hbWUuaGFzaF9sZW47XFxuLS1cXG5mcy9kY2FjaGUuYz0zMzY5PXZvaWQgZF9tYXJrX3RtcGZpbGUoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9kY2FjaGUuYy0zMzc3LVxcdHNwaW5fbG9ja19uZXN0ZWQoXFx1MDAyNmRlbnRyeS1cXHUwMDNlZF9sb2NrLCBERU5UUllfRF9MT0NLX05FU1RFRCk7XFxuZnMvZGNhY2hlLmM6MzM3ODpcXHRkZW50cnktXFx1MDAzZV9fZF9uYW1lLmxlbiA9IHNwcmludGYoZGVudHJ5LVxcdTAwM2VkX3Nob3J0bmFtZS5zdHJpbmcsIFxcXCIjJWxsdVxcXCIsXFxuZnMvZGNhY2hlLmMtMzM3OS1cXHRcXHRcXHRcXHQodW5zaWduZWQgbG9uZyBsb25nKWlub2RlLVxcdTAwM2VpX2lubyk7XFxuLS1cXG5mcy9kY2FjaGUuYz0zMzg1PWludCBkX21hcmtfdG1wZmlsZV9uYW1lKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSlcXG4tLVxcbmZzL2RjYWNoZS5jLTMzODctXFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gZmlsZS1cXHUwMDNlZl9wYXRoLmRlbnRyeTtcXG5mcy9kY2FjaGUuYzozMzg4OlxcdGNoYXIgKmRuYW1lID0gZGVudHJ5LVxcdTAwM2VkX3Nob3J0bmFtZS5zdHJpbmc7XFxuZnMvZGNhY2hlLmMtMzM4OS1cXG4tLVxcbmZzL2RjYWNoZS5jPTM0Nzc9c3RhdGljIHZvaWQgX19pbml0IGRjYWNoZV9pbml0KHZvaWQpXFxuLS1cXG5mcy9kY2FjaGUuYy0zNDg1LVxcdFxcdFNMQUJfUkVDTEFJTV9BQ0NPVU5UfFNMQUJfUEFOSUN8U0xBQl9BQ0NPVU5ULFxcbmZzL2RjYWNoZS5jOjM0ODY6XFx0XFx0ZF9zaG9ydG5hbWUuc3RyaW5nKTtcXG5mcy9kY2FjaGUuYy0zNDg3LVxcdHJ1bnRpbWVfY29uc3RfaW5pdChwdHIsIF9fZGVudHJ5X2NhY2hlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTU6NTU6MTYuOTcwNTUwNTczWiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjU4ODQxNDQ5MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgRGVlcCBpbnRvIHRoZSBEY2FjaGUgSW5pdGlhbGl6YXRpb24qKlxuXG5BbHJpZ2h0LCBteSBmb2N1cyBpcyBsYXNlci10YXJnZXRlZCBvbiBsaW5lIDM0ODUtMzQ4NiDigJMgc29tZXRoaW5nIGhhcyBjYXVnaHQgbXkgZXllLiBBaCwgdGhlcmUgaXQgaXM6IGBkY2FjaGVfaW5pdGAuIFRoYXQncyBhIGtleSBmdW5jdGlvbiBmb3IgaW5pdGlhbGl6aW5nIHRoZSBkY2FjaGUsIHNvIGl0J3Mgd29ydGggYSBjbG9zZXIgbG9vay4gVG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dCBmdWxseSwgSSBzaG91bGQgem9vbSBvdXQgYW5kIGV4YW1pbmUgYSBzdXJyb3VuZGluZyBibG9jayBvZiBjb2RlLiBMaW5lcyAzNDcwLTM1MDAgd2l0aGluIGBmcy9kY2FjaGUuY2Agc2hvdWxkIGdpdmUgbWUgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiBvbiB0aGUgZGNhY2hlIGluaXRpYWxpemF0aW9uLiBUaW1lIHRvIGRlbHZlIGludG8gdGhvc2UgbGluZXMgYW5kIHNlZSBob3cgdGhlIGRjYWNoZSBpcyBzZXQgdXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1MTQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxNTo1NToyMi44NTQ2OTkzN1oiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODYyNTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZGNhY2hlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzQ3MCxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzQ3MDpcXHRcXHRcXHRcXHRcXHRcXHQwKTtcXG4zNDcxOlxcdFxcdGRfaGFzaF9zaGlmdCA9IDMyIC0gZF9oYXNoX3NoaWZ0O1xcbjM0NzI6XFx0XFxuMzQ3MzpcXHRcXHRydW50aW1lX2NvbnN0X2luaXQoc2hpZnQsIGRfaGFzaF9zaGlmdCk7XFxuMzQ3NDpcXHRcXHRydW50aW1lX2NvbnN0X2luaXQocHRyLCBkZW50cnlfaGFzaHRhYmxlKTtcXG4zNDc1OlxcdH1cXG4zNDc2OlxcdFxcbjM0Nzc6XFx0c3RhdGljIHZvaWQgX19pbml0IGRjYWNoZV9pbml0KHZvaWQpXFxuMzQ3ODpcXHR7XFxuMzQ3OTpcXHRcXHQvKlxcbjM0ODA6XFx0XFx0ICogQSBjb25zdHJ1Y3RvciBjb3VsZCBiZSBhZGRlZCBmb3Igc3RhYmxlIHN0YXRlIGxpa2UgdGhlIGxpc3RzLFxcbjM0ODE6XFx0XFx0ICogYnV0IGl0IGlzIHByb2JhYmx5IG5vdCB3b3J0aCBpdCBiZWNhdXNlIG9mIHRoZSBjYWNoZSBuYXR1cmVcXG4zNDgyOlxcdFxcdCAqIG9mIHRoZSBkY2FjaGUuXFxuMzQ4MzpcXHRcXHQgKi9cXG4zNDg0OlxcdFxcdF9fZGVudHJ5X2NhY2hlID0gS01FTV9DQUNIRV9VU0VSQ09QWShkZW50cnksXFxuMzQ4NTpcXHRcXHRcXHRTTEFCX1JFQ0xBSU1fQUNDT1VOVHxTTEFCX1BBTklDfFNMQUJfQUNDT1VOVCxcXG4zNDg2OlxcdFxcdFxcdGRfc2hvcnRuYW1lLnN0cmluZyk7XFxuMzQ4NzpcXHRcXHRydW50aW1lX2NvbnN0X2luaXQocHRyLCBfX2RlbnRyeV9jYWNoZSk7XFxuMzQ4ODpcXHRcXG4zNDg5OlxcdFxcdC8qIEhhc2ggbWF5IGhhdmUgYmVlbiBzZXQgdXAgaW4gZGNhY2hlX2luaXRfZWFybHkgKi9cXG4zNDkwOlxcdFxcdGlmICghaGFzaGRpc3QpXFxuMzQ5MTpcXHRcXHRcXHRyZXR1cm47XFxuMzQ5MjpcXHRcXG4zNDkzOlxcdFxcdGRlbnRyeV9oYXNodGFibGUgPVxcbjM0OTQ6XFx0XFx0XFx0YWxsb2NfbGFyZ2Vfc3lzdGVtX2hhc2goXFxcIkRlbnRyeSBjYWNoZVxcXCIsXFxuMzQ5NTpcXHRcXHRcXHRcXHRcXHRcXHRzaXplb2Yoc3RydWN0IGhsaXN0X2JsX2hlYWQpLFxcbjM0OTY6XFx0XFx0XFx0XFx0XFx0XFx0ZGhhc2hfZW50cmllcyxcXG4zNDk3OlxcdFxcdFxcdFxcdFxcdFxcdDEzLFxcbjM0OTg6XFx0XFx0XFx0XFx0XFx0XFx0SEFTSF9aRVJPLFxcbjM0OTk6XFx0XFx0XFx0XFx0XFx0XFx0XFx1MDAyNmRfaGFzaF9zaGlmdCxcXG4zNTAwOlxcdFxcdFxcdFxcdFxcdFxcdE5VTEwsXFxuMzUwMTpcXHRcXHRcXHRcXHRcXHRcXHQyLFxcbjM1MDI6XFx0XFx0XFx0XFx0XFx0XFx0MCk7XFxuMzUwMzpcXHRcXHRkX2hhc2hfc2hpZnQgPSAzMiAtIGRfaGFzaF9zaGlmdDtcXG4zNTA0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxNTo1NToyMi44NTQ5ODkyOVoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0MzkwMDM0MjExMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgRGVudHJ5IEFsbG9jYXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoaXMgZGlmZiBpcyBtb2RpZnlpbmcgYGZzL2RjYWNoZS5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgX19kX2FsbG9jYCBmdW5jdGlvbiwgd2hpY2ggaXMgcmVzcG9uc2libGUgZm9yIGFsbG9jYXRpbmcgZGVudHJpZXMuIFRoZSBjcnVjaWFsIHBhcnQgb2YgdGhpcyBwYXRjaCBpbnZvbHZlcyBpbml0aWFsaXppbmcgdGhlIGlubGluZSBuYW1lIGJ1ZmZlciAoYGRlbnRyeS1cdTAwM2VkX3Nob3J0bmFtZS5zdHJpbmdgKS4gVGhlIG9yaWdpbmFsIGNvZGUganVzdCBudWxsLXRlcm1pbmF0ZWQgb25lIGJ5dGUgYW5kIGl0IGxvb2tzIGxpa2UgdGhlcmUgd2FzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIHRoaXMgYnVmZmVyLlxuXG5UaGUgb3JpZ2luYWwgY29kZSBsb29rcyBsaWtlIGl0IHdhcyB0cnlpbmcgdG8gZml4IGEgcG90ZW50aWFsIGlzc3VlIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gdGhlIGRlbnRyeSdzIGlubGluZSBuYW1lIGJ1ZmZlci4gVGhlIGNvbW1lbnQgY2xlYXJseSBpbmRpY2F0ZXMgYW4gaW50ZW50IHRvICpmdWxseSogaW5pdGlhbGl6ZSB0aGUgYnVmZmVyIHRvIHByZXZlbnQgcG90ZW50aWFsbHkgcHJvcGFnYXRpbmcgdW5pbml0aWFsaXplZCBkYXRhIGR1cmluZyBuYW1lIGNvcGllcyBvciBsb29rdXBzLiBUaGUgaW50ZW50aW9uIHNlZW1zIHRvIGJlIHRvIGluaXRpYWxpemUgdGhlIGlubGluZSBuYW1lIGJ1ZmZlciB0byB6ZXJvLlxuXG5Ib3dldmVyLCB0aGUgcGF0Y2ggKmluY29ycmVjdGx5KiB1c2VzIGBtZW1jcHkoZGVudHJ5LVx1MDAzZWRfc2hvcnRuYW1lLnN0cmluZywgMCwgRE5BTUVfSU5MSU5FX0xFTilgIGluc3RlYWQgb2YgYG1lbXNldChkZW50cnktXHUwMDNlZF9zaG9ydG5hbWUuc3RyaW5nLCAwLCBETkFNRV9JTkxJTkVfTEVOKWAuIFRoZSBzZWNvbmQgYXJndW1lbnQgYDBgIGluIGBtZW1jcHlgIGlzIGludGVycHJldGVkIGFzIGEgbnVsbCBwb2ludGVyLCBhbmQgaXQgY2F1c2VzIHRoZSBrZXJuZWwgdG8gZGVyZWZlcmVuY2UgdGhlIG51bGwgcG9pbnRlciB3aGljaCBpbnN0YW50bHkgdHJpZ2dlcnMgYSBrZXJuZWwgY3Jhc2ggKHBhZ2UgZmF1bHQpLlxuXG5UaGUgbW9zdCBpbW1lZGlhdGUgY29uc2VxdWVuY2UgaXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuIFRoaXMgd2lsbCByZXN1bHQgaW4gYW4gaW1tZWRpYXRlIGNyYXNoIGR1cmluZyB0aGUgZmlyc3QgZGVudHJ5IGFsbG9jYXRpb24sIG1ha2luZyBpdCBpbXBvc3NpYmxlIHRvIGV2ZW4gKnJlYWNoKiBhbnkgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBzeXN0ZW0gd2lsbCBoYWx0IHdpdGggYSBrZXJuZWwgb29wcyBvciBhIHBhZ2UgZmF1bHQuIFRoaXMgaXMgYSB2ZXJ5IHNldmVyZSBidWcgdGhhdCB3aWxsIGJlIGNhdWdodCBieSBhbnkgc3RhbmRhcmQgYnVnIGRldGVjdG9yLCBpbmNsdWRpbmcgdGhlIG5vcm1hbCBrZXJuZWwgZmF1bHQgaGFuZGxlcnMgYW5kIEtBU0FOLlxuXG5HaXZlbiB0aGlzIHVuZGVyc3RhbmRpbmcsIGl0IHNlZW1zIHRoZSBwYXRjaCB3cml0ZXIgbWFkZSBhIGNsYXNzaWMgdHlwbyBvciBhIG1pc3VuZGVyc3RhbmRpbmcgb2YgaG93IGBtZW1jcHlgIGFuZCBgbWVtc2V0YCBmdW5jdGlvbnMgd29yay5cblxuTm93LCB0aGUgcXVlc3Rpb24gaXM6IGRvZXMgdGhpcyB3YXJyYW50IEtNU0FOIGZ1enppbmc/XG5cblRoZSBwYXRjaCAqaW50cm9kdWNlcyogYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UsIHdoaWNoIGlzIHJlYWRpbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBJdCBkb2VzICpub3QqIGludHJvZHVjZSBhIHJpc2sgb2YgKnVuaW5pdGlhbGl6ZWQqIG1lbW9yeSAqYmVpbmcgcmVhZCogdGhhdCAqb25seSogS01TQU4gY291bGQgZGV0ZWN0LiBFdmVuIGlmIHRoZSBwYXRjaCAqaW50ZW5kZWQqIHRvIHplcm8gdGhlIG1lbW9yeSB3aXRoIGBtZW1zZXRgLCB0aGlzIHdvdWxkIGhhdmUgZml4ZWQgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUsIG5vdCBpbnRyb2R1Y2VkIHRoZW0uXG5cblNvLCBhY2NvcmRpbmcgdG8gdGhlIHByb3ZpZGVkIGluc3RydWN0aW9ucywgc2luY2Ugc3RhbmRhcmQgYnVnIGRldGVjdG9ycyAobGlrZSBLQVNBTikgd291bGQgY2F0Y2ggdGhlIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSwgdGhlcmUgaXMgbm8gbmVlZCBmb3IgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrcyB0aGF0IG9ubHkgS01TQU4gY291bGQgZGV0ZWN0LiBLTVNBTiBpcyBmb3IgZGV0ZWN0aW5nIHRoZSByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGh1cywgYE5lZWRzS01TQU5gIGlzIGBmYWxzZWAuIFRoZSBwYXRjaCdzIHByaW1hcnkgaXNzdWUgaXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UsIGEgYnVnIGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjUzLCJPdXRwdXRUb2tlbnMiOjIwNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwOTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxNTo1NjowNi43NTUzMzU5NTFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTYyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBfX2RfYWxsb2MoKWAgaW4gYGZzL2RjYWNoZS5jYCwgaW50ZW5kaW5nIHRvIGZ1bGx5IGluaXRpYWxpemUgYGRlbnRyeS1cXHUwMDNlZF9zaG9ydG5hbWUuc3RyaW5nYC4gSG93ZXZlciwgaXQgZXJyb25lb3VzbHkgY2FsbHMgYG1lbWNweShkZW50cnktXFx1MDAzZWRfc2hvcnRuYW1lLnN0cmluZywgMCwgRE5BTUVfSU5MSU5FX0xFTilgIGluc3RlYWQgb2YgYG1lbXNldCgpYC4gUGFzc2luZyBgMGAgKE5VTEwpIGFzIHRoZSBzb3VyY2UgcG9pbnRlciB0byBgbWVtY3B5KClgIGludHJvZHVjZXMgYW4gaW1tZWRpYXRlIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSB1cG9uIGRlbnRyeSBhbGxvY2F0aW9uLlxcblxcbk5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgYXJlIGNhdWdodCBpbW1lZGlhdGVseSBieSBzdGFuZGFyZCBrZXJuZWwgcGFnZSBmYXVsdCBoYW5kbGluZyBhbmQgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlcnNwYWNlLiBGdXJ0aGVybW9yZSwgaGFkIHRoZSBjYWxsIGNvcnJlY3RseSBiZWVuIGBtZW1zZXQoKWAsIGl0IHdvdWxkIGhhdmUgaW5pdGlhbGl6ZWQgdGhlIGJ1ZmZlciB0byB6ZXJvZXMsIGVsaW1pbmF0aW5nIHVuaW5pdGlhbGl6ZWQgZGF0YSByYXRoZXIgdGhhbiBjcmVhdGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gVGhlcmVmb3JlLCB0aGlzIGNoYW5nZSBkb2VzIG5vdCBqdXN0aWZ5IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgX19kX2FsbG9jKClgIGluIGBmcy9kY2FjaGUuY2AsIGludGVuZGluZyB0byBmdWxseSBpbml0aWFsaXplIGBkZW50cnktXFx1MDAzZWRfc2hvcnRuYW1lLnN0cmluZ2AuIEhvd2V2ZXIsIGl0IGVycm9uZW91c2x5IGNhbGxzIGBtZW1jcHkoZGVudHJ5LVxcdTAwM2VkX3Nob3J0bmFtZS5zdHJpbmcsIDAsIEROQU1FX0lOTElORV9MRU4pYCBpbnN0ZWFkIG9mIGBtZW1zZXQoKWAuIFBhc3NpbmcgYDBgIChOVUxMKSBhcyB0aGUgc291cmNlIHBvaW50ZXIgdG8gYG1lbWNweSgpYCBpbnRyb2R1Y2VzIGFuIGltbWVkaWF0ZSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgdXBvbiBkZW50cnkgYWxsb2NhdGlvbi5cXG5cXG5OVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFyZSBjYXVnaHQgaW1tZWRpYXRlbHkgYnkgc3RhbmRhcmQga2VybmVsIHBhZ2UgZmF1bHQgaGFuZGxpbmcgYW5kIEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZS4gRnVydGhlcm1vcmUsIGhhZCB0aGUgY2FsbCBjb3JyZWN0bHkgYmVlbiBgbWVtc2V0KClgLCBpdCB3b3VsZCBoYXZlIGluaXRpYWxpemVkIHRoZSBidWZmZXIgdG8gemVyb2VzLCBlbGltaW5hdGluZyB1bmluaXRpYWxpemVkIGRhdGEgcmF0aGVyIHRoYW4gY3JlYXRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFRoZXJlZm9yZSwgdGhpcyBjaGFuZ2UgZG9lcyBub3QganVzdGlmeSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowx99cv[1] Phase: Succeeded StartedAt: 2026-09-13 15:56:17 +0000 UTC FinishedAt: 2026-09-13 15:56:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx99cv[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-13 15:56:17 +0000 UTC FinishedAt: 2026-09-13 15:56:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx99cv[2] Phase: Succeeded StartedAt: 2026-09-13 15:56:17 +0000 UTC FinishedAt: 2026-09-13 17:04:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx99cv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_alloc","d_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"5b221ae6-70dc-4b99-963a-3d9e7db97db0","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN) Phase: Failed StartedAt: 2026-09-13 15:56:17 +0000 UTC FinishedAt: 2026-09-13 17:04:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"fuzz":{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_alloc","d_alloc"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"5b221ae6-70dc-4b99-963a-3d9e7db97db0","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowx99cv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_alloc","d_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"5b221ae6-70dc-4b99-963a-3d9e7db97db0","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-13 15:56:17 +0000 UTC FinishedAt: 2026-09-13 15:56:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx99cv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_alloc","d_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"5b221ae6-70dc-4b99-963a-3d9e7db97db0","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-13 15:56:17 +0000 UTC FinishedAt: 2026-09-13 15:56:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.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-workflowx99cv/series-workflowx99cv-convert-artifact-2490762683/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx99cv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_alloc","d_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"5b221ae6-70dc-4b99-963a-3d9e7db97db0","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-13 15:56:27 +0000 UTC FinishedAt: 2026-09-13 16:15:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx99cv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_alloc","d_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"5b221ae6-70dc-4b99-963a-3d9e7db97db0","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-13 15:56:27 +0000 UTC FinishedAt: 2026-09-13 16:15:06 +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:*1cf85a0a-b40b-4f09-8fa6-7bc8f513cd22,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-workflowx99cv/series-workflowx99cv-convert-artifact-2490762683/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": "837a6b48-0290-462e-8fbf-1734862e0cba", "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-workflowx99cv/series-workflowx99cv-build-action-1682641913/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx99cv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_alloc","d_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"5b221ae6-70dc-4b99-963a-3d9e7db97db0","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-13 15:56:27 +0000 UTC FinishedAt: 2026-09-13 16:14: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:*1cf85a0a-b40b-4f09-8fa6-7bc8f513cd22,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-workflowx99cv/series-workflowx99cv-convert-artifact-2490762683/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": "837a6b48-0290-462e-8fbf-1734862e0cba", "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-workflowx99cv/series-workflowx99cv-build-action-1682641913/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx99cv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_alloc","d_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"5b221ae6-70dc-4b99-963a-3d9e7db97db0","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-13 16:15:06 +0000 UTC FinishedAt: 2026-09-13 16:15:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx99cv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_alloc","d_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"5b221ae6-70dc-4b99-963a-3d9e7db97db0","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-13 16:15:06 +0000 UTC FinishedAt: 2026-09-13 16:15:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx99cv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_alloc","d_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"5b221ae6-70dc-4b99-963a-3d9e7db97db0","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-13 16:15:06 +0000 UTC FinishedAt: 2026-09-13 16:15:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx99cv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_alloc","d_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"5b221ae6-70dc-4b99-963a-3d9e7db97db0","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-13 16:15:06 +0000 UTC FinishedAt: 2026-09-13 16:15:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"5b221ae6-70dc-4b99-963a-3d9e7db97db0","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.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-workflowx99cv/series-workflowx99cv-convert-artifact-2443544850/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx99cv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_alloc","d_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"5b221ae6-70dc-4b99-963a-3d9e7db97db0","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-13 16:15:16 +0000 UTC FinishedAt: 2026-09-13 16:17:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx99cv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_alloc","d_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"5b221ae6-70dc-4b99-963a-3d9e7db97db0","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-13 16:15:16 +0000 UTC FinishedAt: 2026-09-13 16:16:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*837a6b48-0290-462e-8fbf-1734862e0cba,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-workflowx99cv/series-workflowx99cv-build-action-1682641913/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-workflowx99cv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_alloc","d_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"5b221ae6-70dc-4b99-963a-3d9e7db97db0","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-13 16:17:09 +0000 UTC FinishedAt: 2026-09-13 16:17:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx99cv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_alloc","d_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"5b221ae6-70dc-4b99-963a-3d9e7db97db0","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-13 16:17:09 +0000 UTC FinishedAt: 2026-09-13 16:17:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx99cv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_alloc","d_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"5b221ae6-70dc-4b99-963a-3d9e7db97db0","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-13 16:17:09 +0000 UTC FinishedAt: 2026-09-13 16:33:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx99cv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_alloc","d_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"5b221ae6-70dc-4b99-963a-3d9e7db97db0","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-13 16:17:09 +0000 UTC FinishedAt: 2026-09-13 16:33:07 +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:*1cf85a0a-b40b-4f09-8fa6-7bc8f513cd22,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-workflowx99cv/series-workflowx99cv-convert-artifact-2443544850/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": "9b8e9369-7fc0-4fbd-a090-6f785f103d1b", "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-workflowx99cv/series-workflowx99cv-build-action-620627366/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx99cv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_alloc","d_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"5b221ae6-70dc-4b99-963a-3d9e7db97db0","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-13 16:17:09 +0000 UTC FinishedAt: 2026-09-13 16:32:57 +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:*1cf85a0a-b40b-4f09-8fa6-7bc8f513cd22,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-workflowx99cv/series-workflowx99cv-convert-artifact-2443544850/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": "9b8e9369-7fc0-4fbd-a090-6f785f103d1b", "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-workflowx99cv/series-workflowx99cv-build-action-620627366/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx99cv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_alloc","d_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"5b221ae6-70dc-4b99-963a-3d9e7db97db0","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-13 16:33:07 +0000 UTC FinishedAt: 2026-09-13 16:33:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx99cv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_alloc","d_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"5b221ae6-70dc-4b99-963a-3d9e7db97db0","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-13 16:33:07 +0000 UTC FinishedAt: 2026-09-13 16:33:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx99cv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_alloc","d_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"5b221ae6-70dc-4b99-963a-3d9e7db97db0","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-13 16:33:07 +0000 UTC FinishedAt: 2026-09-13 17:04:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx99cv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_alloc","d_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"5b221ae6-70dc-4b99-963a-3d9e7db97db0","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-13 16:33:07 +0000 UTC FinishedAt: 2026-09-13 17:04:06 +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:*9b8e9369-7fc0-4fbd-a090-6f785f103d1b,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-workflowx99cv/series-workflowx99cv-build-action-620627366/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": false },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-workflowx99cv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_alloc","d_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"5b221ae6-70dc-4b99-963a-3d9e7db97db0","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9] Phase: Failed StartedAt: 2026-09-13 17:04:16 +0000 UTC FinishedAt: 2026-09-13 17:04:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx99cv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_alloc","d_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"5b221ae6-70dc-4b99-963a-3d9e7db97db0","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Failed StartedAt: 2026-09-13 17:04:16 +0000 UTC FinishedAt: 2026-09-13 17:04:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}