Name: series-workflowzq2xz Phase: Succeeded StartedAt: 2026-07-23 16:32:42 +0000 UTC FinishedAt: 2026-07-23 21:16:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzq2xz[0] Phase: Succeeded StartedAt: 2026-07-23 16:32:42 +0000 UTC FinishedAt: 2026-07-23 16:52:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzq2xz[0].run-triage Phase: Succeeded StartedAt: 2026-07-23 16:32:42 +0000 UTC FinishedAt: 2026-07-23 16:52:48 +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": "ce76d9d4f5f36501013bd94bb65dd067f04b2913", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TMPFS_XATTR" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "ce76d9d4f5f36501013bd94bb65dd067f04b2913", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TMPFS_XATTR" ], "series_id": "d59239c6-2bdd-44cf-ae6c-8e6298839fbf" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "path_setxattrat", "path_getxattrat", "path_listxattrat", "path_removexattrat" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE2OjQ5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RNUEZTX1hBVFRSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGF0aF9zZXR4YXR0cmF0JiMzNDssCiAgICAmIzM0O3BhdGhfZ2V0eGF0dHJhdCYjMzQ7LAogICAgJiMzNDtwYXRoX2xpc3R4YXR0cmF0JiMzNDssCiAgICAmIzM0O3BhdGhfcmVtb3ZleGF0dHJhdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgYCp4YXR0cmF0YCBzeXNjYWxscyAoZS5nLiwgYHNldHhhdHRyYXRgLCBgZ2V0eGF0dHJhdGAsIGBsaXN0eGF0dHJhdGAsIGByZW1vdmV4YXR0cmF0YCkgdG8gYWxsb3cgb3BlcmF0aW5nIG9uIGBPX1BBVEhgIGZpbGUgZGVzY3JpcHRvcnMgd2hlbiBgQVRfRU1QVFlfUEFUSGAgaXMgdXNlZC4gVGhpcyBpcyBhY2hpZXZlZCBieSBpbnRyb2R1Y2luZyBhIG5ldyBgZmRfbWF5YmVfcmF3YCBjbGFzcyB0aGF0IHVzZXMgYGZkZ2V0X3Jhd2AgaW5zdGVhZCBvZiBgZmRnZXRgIHdoZW4gdGhlIGByYXdgIHBhcmFtZXRlciBpcyB0cnVlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhbHRlcnMgdGhlIGJlaGF2aW9yIG9mIHRoZXNlIHN5c2NhbGxzLCBtYWtpbmcgdGhlbSBjb25zaXN0ZW50IHdpdGggb3RoZXIgYCphdGAgc3lzY2FsbHMgbGlrZSBgZmNob3duYXRgIGFuZCBgZnN0YXRhdGAuIEl0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyByZWdyZXNzaW9ucyBvciB1bmV4cGVjdGVkIGJlaGF2aW9ycyB3aGVuIHVzaW5nIGBPX1BBVEhgIGZpbGUgZGVzY3JpcHRvcnMgd2l0aCBleHRlbmRlZCBhdHRyaWJ1dGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE2OjQ5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYjA3YzEyZDlkZjNhZWYyOTdmY2VkZmYxMTZkN2I4MmExM2U4NGZjM1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDIzIDE2OjQ5OjA0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL3hhdHRyLmMgYi9mcy94YXR0ci5jXG5pbmRleCBkNTg5NzkxMTUyMDA3NS4uMWRiNjU5NmEyZWMxMTAgMTAwNjQ0XG4tLS0gYS9mcy94YXR0ci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy94YXR0ci5jXG5AQCAtNzAwLDcgJiM0Mzs3MDAsOCBAQCBpbnQgZmlsZW5hbWVfc2V0eGF0dHIoaW50IGRmZCwgc3RydWN0IGZpbGVuYW1lICpmaWxlbmFtZSxcbiBcbiBzdGF0aWMgaW50IHBhdGhfc2V0eGF0dHJhdChpbnQgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqcGF0aG5hbWUsXG4gXHRcdFx0ICAgdW5zaWduZWQgaW50IGF0X2ZsYWdzLCBjb25zdCBjaGFyIF9fdXNlciAqbmFtZSxcbi1cdFx0XHQgICBjb25zdCB2b2lkIF9fdXNlciAqdmFsdWUsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpXG4mIzQzO1x0XHRcdCAgIGNvbnN0IHZvaWQgX191c2VyICp2YWx1ZSwgc2l6ZV90IHNpemUsIGludCBmbGFncyxcbiYjNDM7XHRcdFx0ICAgYm9vbCByYXcpXG4ge1xuIFx0c3RydWN0IHhhdHRyX25hbWUga25hbWU7XG4gXHRzdHJ1Y3Qga2VybmVsX3hhdHRyX2N0eCBjdHggPSB7XG5AQCAtNzI1LDcgJiM0Mzs3MjYsNyBAQCBzdGF0aWMgaW50IHBhdGhfc2V0eGF0dHJhdChpbnQgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqcGF0aG5hbWUsXG4gXG4gXHRDTEFTUyhmaWxlbmFtZV9tYXliZV9udWxsLCBmaWxlbmFtZSkocGF0aG5hbWUsIGF0X2ZsYWdzKTtcbiBcdGlmICghZmlsZW5hbWUgXHUwMDI2XHUwMDI2IGRmZCBcdTAwM2U9IDApIHtcbi1cdFx0Q0xBU1MoZmQsIGYpKGRmZCk7XG4mIzQzO1x0XHRDTEFTUyhmZF9tYXliZV9yYXcsIGYpKGRmZCwgcmF3KTtcbiBcdFx0aWYgKGZkX2VtcHR5KGYpKVxuIFx0XHRcdGVycm9yID0gLUVCQURGO1xuIFx0XHRlbHNlXG5AQCAtNzU4LDE0ICYjNDM7NzU5LDE1IEBAIFNZU0NBTExfREVGSU5FNihzZXR4YXR0cmF0LCBpbnQsIGRmZCwgY29uc3QgY2hhciBfX3VzZXIgKiwgcGF0aG5hbWUsIHVuc2lnbmVkIGluXG4gXG4gXHRyZXR1cm4gcGF0aF9zZXR4YXR0cmF0KGRmZCwgcGF0aG5hbWUsIGF0X2ZsYWdzLCBuYW1lLFxuIFx0XHRcdCAgICAgICB1NjRfdG9fdXNlcl9wdHIoYXJncy52YWx1ZSksIGFyZ3Muc2l6ZSxcbi1cdFx0XHQgICAgICAgYXJncy5mbGFncyk7XG4mIzQzO1x0XHRcdCAgICAgICBhcmdzLmZsYWdzLCB0cnVlKTtcbiB9XG4gXG4gU1lTQ0FMTF9ERUZJTkU1KHNldHhhdHRyLCBjb25zdCBjaGFyIF9fdXNlciAqLCBwYXRobmFtZSxcbiBcdFx0Y29uc3QgY2hhciBfX3VzZXIgKiwgbmFtZSwgY29uc3Qgdm9pZCBfX3VzZXIgKiwgdmFsdWUsXG4gXHRcdHNpemVfdCwgc2l6ZSwgaW50LCBmbGFncylcbiB7XG4tXHRyZXR1cm4gcGF0aF9zZXR4YXR0cmF0KEFUX0ZEQ1dELCBwYXRobmFtZSwgMCwgbmFtZSwgdmFsdWUsIHNpemUsIGZsYWdzKTtcbiYjNDM7XHRyZXR1cm4gcGF0aF9zZXR4YXR0cmF0KEFUX0ZEQ1dELCBwYXRobmFtZSwgMCwgbmFtZSwgdmFsdWUsIHNpemUsIGZsYWdzLFxuJiM0MztcdFx0XHQgICAgICAgZmFsc2UpO1xuIH1cbiBcbiBTWVNDQUxMX0RFRklORTUobHNldHhhdHRyLCBjb25zdCBjaGFyIF9fdXNlciAqLCBwYXRobmFtZSxcbkBAIC03NzMsMTQgJiM0Mzs3NzUsMTQgQEAgU1lTQ0FMTF9ERUZJTkU1KGxzZXR4YXR0ciwgY29uc3QgY2hhciBfX3VzZXIgKiwgcGF0aG5hbWUsXG4gXHRcdHNpemVfdCwgc2l6ZSwgaW50LCBmbGFncylcbiB7XG4gXHRyZXR1cm4gcGF0aF9zZXR4YXR0cmF0KEFUX0ZEQ1dELCBwYXRobmFtZSwgQVRfU1lNTElOS19OT0ZPTExPVywgbmFtZSxcbi1cdFx0XHQgICAgICAgdmFsdWUsIHNpemUsIGZsYWdzKTtcbiYjNDM7XHRcdFx0ICAgICAgIHZhbHVlLCBzaXplLCBmbGFncywgZmFsc2UpO1xuIH1cbiBcbiBTWVNDQUxMX0RFRklORTUoZnNldHhhdHRyLCBpbnQsIGZkLCBjb25zdCBjaGFyIF9fdXNlciAqLCBuYW1lLFxuIFx0XHRjb25zdCB2b2lkIF9fdXNlciAqLHZhbHVlLCBzaXplX3QsIHNpemUsIGludCwgZmxhZ3MpXG4ge1xuIFx0cmV0dXJuIHBhdGhfc2V0eGF0dHJhdChmZCwgTlVMTCwgQVRfRU1QVFlfUEFUSCwgbmFtZSxcbi1cdFx0XHQgICAgICAgdmFsdWUsIHNpemUsIGZsYWdzKTtcbiYjNDM7XHRcdFx0ICAgICAgIHZhbHVlLCBzaXplLCBmbGFncywgZmFsc2UpO1xuIH1cbiBcbiAvKlxuQEAgLTg0NSw3ICYjNDM7ODQ3LDcgQEAgc3NpemVfdCBmaWxlbmFtZV9nZXR4YXR0cihpbnQgZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKmZpbGVuYW1lLFxuIFxuIHN0YXRpYyBzc2l6ZV90IHBhdGhfZ2V0eGF0dHJhdChpbnQgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqcGF0aG5hbWUsXG4gXHRcdFx0ICAgICAgIHVuc2lnbmVkIGludCBhdF9mbGFncywgY29uc3QgY2hhciBfX3VzZXIgKm5hbWUsXG4tXHRcdFx0ICAgICAgIHZvaWQgX191c2VyICp2YWx1ZSwgc2l6ZV90IHNpemUpXG4mIzQzO1x0XHRcdCAgICAgICB2b2lkIF9fdXNlciAqdmFsdWUsIHNpemVfdCBzaXplLCBib29sIHJhdylcbiB7XG4gXHRzdHJ1Y3QgeGF0dHJfbmFtZSBrbmFtZTtcbiBcdHN0cnVjdCBrZXJuZWxfeGF0dHJfY3R4IGN0eCA9IHtcbkBAIC04NjUsNyAmIzQzOzg2Nyw3IEBAIHN0YXRpYyBzc2l6ZV90IHBhdGhfZ2V0eGF0dHJhdChpbnQgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqcGF0aG5hbWUsXG4gXG4gXHRDTEFTUyhmaWxlbmFtZV9tYXliZV9udWxsLCBmaWxlbmFtZSkocGF0aG5hbWUsIGF0X2ZsYWdzKTtcbiBcdGlmICghZmlsZW5hbWUgXHUwMDI2XHUwMDI2IGRmZCBcdTAwM2U9IDApIHtcbi1cdFx0Q0xBU1MoZmQsIGYpKGRmZCk7XG4mIzQzO1x0XHRDTEFTUyhmZF9tYXliZV9yYXcsIGYpKGRmZCwgcmF3KTtcbiBcdFx0aWYgKGZkX2VtcHR5KGYpKVxuIFx0XHRcdHJldHVybiAtRUJBREY7XG4gXHRcdHJldHVybiBmaWxlX2dldHhhdHRyKGZkX2ZpbGUoZiksIFx1MDAyNmN0eCk7XG5AQCAtODk5LDI2ICYjNDM7OTAxLDI4IEBAIFNZU0NBTExfREVGSU5FNihnZXR4YXR0cmF0LCBpbnQsIGRmZCwgY29uc3QgY2hhciBfX3VzZXIgKiwgcGF0aG5hbWUsIHVuc2lnbmVkIGluXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0cmV0dXJuIHBhdGhfZ2V0eGF0dHJhdChkZmQsIHBhdGhuYW1lLCBhdF9mbGFncywgbmFtZSxcbi1cdFx0XHQgICAgICAgdTY0X3RvX3VzZXJfcHRyKGFyZ3MudmFsdWUpLCBhcmdzLnNpemUpO1xuJiM0MztcdFx0XHQgICAgICAgdTY0X3RvX3VzZXJfcHRyKGFyZ3MudmFsdWUpLCBhcmdzLnNpemUsIHRydWUpO1xuIH1cbiBcbiBTWVNDQUxMX0RFRklORTQoZ2V0eGF0dHIsIGNvbnN0IGNoYXIgX191c2VyICosIHBhdGhuYW1lLFxuIFx0XHRjb25zdCBjaGFyIF9fdXNlciAqLCBuYW1lLCB2b2lkIF9fdXNlciAqLCB2YWx1ZSwgc2l6ZV90LCBzaXplKVxuIHtcbi1cdHJldHVybiBwYXRoX2dldHhhdHRyYXQoQVRfRkRDV0QsIHBhdGhuYW1lLCAwLCBuYW1lLCB2YWx1ZSwgc2l6ZSk7XG4mIzQzO1x0cmV0dXJuIHBhdGhfZ2V0eGF0dHJhdChBVF9GRENXRCwgcGF0aG5hbWUsIDAsIG5hbWUsIHZhbHVlLCBzaXplLFxuJiM0MztcdFx0XHQgICAgICAgZmFsc2UpO1xuIH1cbiBcbiBTWVNDQUxMX0RFRklORTQobGdldHhhdHRyLCBjb25zdCBjaGFyIF9fdXNlciAqLCBwYXRobmFtZSxcbiBcdFx0Y29uc3QgY2hhciBfX3VzZXIgKiwgbmFtZSwgdm9pZCBfX3VzZXIgKiwgdmFsdWUsIHNpemVfdCwgc2l6ZSlcbiB7XG4gXHRyZXR1cm4gcGF0aF9nZXR4YXR0cmF0KEFUX0ZEQ1dELCBwYXRobmFtZSwgQVRfU1lNTElOS19OT0ZPTExPVywgbmFtZSxcbi1cdFx0XHQgICAgICAgdmFsdWUsIHNpemUpO1xuJiM0MztcdFx0XHQgICAgICAgdmFsdWUsIHNpemUsIGZhbHNlKTtcbiB9XG4gXG4gU1lTQ0FMTF9ERUZJTkU0KGZnZXR4YXR0ciwgaW50LCBmZCwgY29uc3QgY2hhciBfX3VzZXIgKiwgbmFtZSxcbiBcdFx0dm9pZCBfX3VzZXIgKiwgdmFsdWUsIHNpemVfdCwgc2l6ZSlcbiB7XG4tXHRyZXR1cm4gcGF0aF9nZXR4YXR0cmF0KGZkLCBOVUxMLCBBVF9FTVBUWV9QQVRILCBuYW1lLCB2YWx1ZSwgc2l6ZSk7XG4mIzQzO1x0cmV0dXJuIHBhdGhfZ2V0eGF0dHJhdChmZCwgTlVMTCwgQVRfRU1QVFlfUEFUSCwgbmFtZSwgdmFsdWUsIHNpemUsXG4mIzQzO1x0XHRcdCAgICAgICBmYWxzZSk7XG4gfVxuIFxuIC8qXG5AQCAtOTgyLDcgJiM0Mzs5ODYsNyBAQCBzc2l6ZV90IGZpbGVuYW1lX2xpc3R4YXR0cihpbnQgZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKmZpbGVuYW1lLFxuIFxuIHN0YXRpYyBzc2l6ZV90IHBhdGhfbGlzdHhhdHRyYXQoaW50IGRmZCwgY29uc3QgY2hhciBfX3VzZXIgKnBhdGhuYW1lLFxuIFx0XHRcdFx0dW5zaWduZWQgaW50IGF0X2ZsYWdzLCBjaGFyIF9fdXNlciAqbGlzdCxcbi1cdFx0XHRcdHNpemVfdCBzaXplKVxuJiM0MztcdFx0XHRcdHNpemVfdCBzaXplLCBib29sIHJhdylcbiB7XG4gXHRpbnQgbG9va3VwX2ZsYWdzO1xuIFxuQEAgLTk5MSw3ICYjNDM7OTk1LDcgQEAgc3RhdGljIHNzaXplX3QgcGF0aF9saXN0eGF0dHJhdChpbnQgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqcGF0aG5hbWUsXG4gXG4gXHRDTEFTUyhmaWxlbmFtZV9tYXliZV9udWxsLCBmaWxlbmFtZSkocGF0aG5hbWUsIGF0X2ZsYWdzKTtcbiBcdGlmICghZmlsZW5hbWUpIHtcbi1cdFx0Q0xBU1MoZmQsIGYpKGRmZCk7XG4mIzQzO1x0XHRDTEFTUyhmZF9tYXliZV9yYXcsIGYpKGRmZCwgcmF3KTtcbiBcdFx0aWYgKGZkX2VtcHR5KGYpKVxuIFx0XHRcdHJldHVybiAtRUJBREY7XG4gXHRcdHJldHVybiBmaWxlX2xpc3R4YXR0cihmZF9maWxlKGYpLCBsaXN0LCBzaXplKTtcbkBAIC0xMDA1LDI0ICYjNDM7MTAwOSwyNSBAQCBTWVNDQUxMX0RFRklORTUobGlzdHhhdHRyYXQsIGludCwgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqLCBwYXRobmFtZSxcbiBcdFx0dW5zaWduZWQgaW50LCBhdF9mbGFncyxcbiBcdFx0Y2hhciBfX3VzZXIgKiwgbGlzdCwgc2l6ZV90LCBzaXplKVxuIHtcbi1cdHJldHVybiBwYXRoX2xpc3R4YXR0cmF0KGRmZCwgcGF0aG5hbWUsIGF0X2ZsYWdzLCBsaXN0LCBzaXplKTtcbiYjNDM7XHRyZXR1cm4gcGF0aF9saXN0eGF0dHJhdChkZmQsIHBhdGhuYW1lLCBhdF9mbGFncywgbGlzdCwgc2l6ZSwgdHJ1ZSk7XG4gfVxuIFxuIFNZU0NBTExfREVGSU5FMyhsaXN0eGF0dHIsIGNvbnN0IGNoYXIgX191c2VyICosIHBhdGhuYW1lLCBjaGFyIF9fdXNlciAqLCBsaXN0LFxuIFx0XHRzaXplX3QsIHNpemUpXG4ge1xuLVx0cmV0dXJuIHBhdGhfbGlzdHhhdHRyYXQoQVRfRkRDV0QsIHBhdGhuYW1lLCAwLCBsaXN0LCBzaXplKTtcbiYjNDM7XHRyZXR1cm4gcGF0aF9saXN0eGF0dHJhdChBVF9GRENXRCwgcGF0aG5hbWUsIDAsIGxpc3QsIHNpemUsIGZhbHNlKTtcbiB9XG4gXG4gU1lTQ0FMTF9ERUZJTkUzKGxsaXN0eGF0dHIsIGNvbnN0IGNoYXIgX191c2VyICosIHBhdGhuYW1lLCBjaGFyIF9fdXNlciAqLCBsaXN0LFxuIFx0XHRzaXplX3QsIHNpemUpXG4ge1xuLVx0cmV0dXJuIHBhdGhfbGlzdHhhdHRyYXQoQVRfRkRDV0QsIHBhdGhuYW1lLCBBVF9TWU1MSU5LX05PRk9MTE9XLCBsaXN0LCBzaXplKTtcbiYjNDM7XHRyZXR1cm4gcGF0aF9saXN0eGF0dHJhdChBVF9GRENXRCwgcGF0aG5hbWUsIEFUX1NZTUxJTktfTk9GT0xMT1csIGxpc3QsXG4mIzQzO1x0XHRcdFx0c2l6ZSwgZmFsc2UpO1xuIH1cbiBcbiBTWVNDQUxMX0RFRklORTMoZmxpc3R4YXR0ciwgaW50LCBmZCwgY2hhciBfX3VzZXIgKiwgbGlzdCwgc2l6ZV90LCBzaXplKVxuIHtcbi1cdHJldHVybiBwYXRoX2xpc3R4YXR0cmF0KGZkLCBOVUxMLCBBVF9FTVBUWV9QQVRILCBsaXN0LCBzaXplKTtcbiYjNDM7XHRyZXR1cm4gcGF0aF9saXN0eGF0dHJhdChmZCwgTlVMTCwgQVRfRU1QVFlfUEFUSCwgbGlzdCwgc2l6ZSwgZmFsc2UpO1xuIH1cbiBcbiAvKlxuQEAgLTEwNzMsNyAmIzQzOzEwNzgsOCBAQCBzdGF0aWMgaW50IGZpbGVuYW1lX3JlbW92ZXhhdHRyKGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqZmlsZW5hbWUsXG4gfVxuIFxuIHN0YXRpYyBpbnQgcGF0aF9yZW1vdmV4YXR0cmF0KGludCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICpwYXRobmFtZSxcbi1cdFx0XHQgICAgICB1bnNpZ25lZCBpbnQgYXRfZmxhZ3MsIGNvbnN0IGNoYXIgX191c2VyICpuYW1lKVxuJiM0MztcdFx0XHQgICAgICB1bnNpZ25lZCBpbnQgYXRfZmxhZ3MsIGNvbnN0IGNoYXIgX191c2VyICpuYW1lLFxuJiM0MztcdFx0XHQgICAgICBib29sIHJhdylcbiB7XG4gXHRzdHJ1Y3QgeGF0dHJfbmFtZSBrbmFtZTtcbiBcdHVuc2lnbmVkIGludCBsb29rdXBfZmxhZ3M7XG5AQCAtMTA4OCw3ICYjNDM7MTA5NCw3IEBAIHN0YXRpYyBpbnQgcGF0aF9yZW1vdmV4YXR0cmF0KGludCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICpwYXRobmFtZSxcbiBcbiBcdENMQVNTKGZpbGVuYW1lX21heWJlX251bGwsIGZpbGVuYW1lKShwYXRobmFtZSwgYXRfZmxhZ3MpO1xuIFx0aWYgKCFmaWxlbmFtZSkge1xuLVx0XHRDTEFTUyhmZCwgZikoZGZkKTtcbiYjNDM7XHRcdENMQVNTKGZkX21heWJlX3JhdywgZikoZGZkLCByYXcpO1xuIFx0XHRpZiAoZmRfZW1wdHkoZikpXG4gXHRcdFx0cmV0dXJuIC1FQkFERjtcbiBcdFx0cmV0dXJuIGZpbGVfcmVtb3ZleGF0dHIoZmRfZmlsZShmKSwgXHUwMDI2a25hbWUpO1xuQEAgLTExMDAsMjQgJiM0MzsxMTA2LDI1IEBAIHN0YXRpYyBpbnQgcGF0aF9yZW1vdmV4YXR0cmF0KGludCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICpwYXRobmFtZSxcbiBTWVNDQUxMX0RFRklORTQocmVtb3ZleGF0dHJhdCwgaW50LCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICosIHBhdGhuYW1lLFxuIFx0XHR1bnNpZ25lZCBpbnQsIGF0X2ZsYWdzLCBjb25zdCBjaGFyIF9fdXNlciAqLCBuYW1lKVxuIHtcbi1cdHJldHVybiBwYXRoX3JlbW92ZXhhdHRyYXQoZGZkLCBwYXRobmFtZSwgYXRfZmxhZ3MsIG5hbWUpO1xuJiM0MztcdHJldHVybiBwYXRoX3JlbW92ZXhhdHRyYXQoZGZkLCBwYXRobmFtZSwgYXRfZmxhZ3MsIG5hbWUsIHRydWUpO1xuIH1cbiBcbiBTWVNDQUxMX0RFRklORTIocmVtb3ZleGF0dHIsIGNvbnN0IGNoYXIgX191c2VyICosIHBhdGhuYW1lLFxuIFx0XHRjb25zdCBjaGFyIF9fdXNlciAqLCBuYW1lKVxuIHtcbi1cdHJldHVybiBwYXRoX3JlbW92ZXhhdHRyYXQoQVRfRkRDV0QsIHBhdGhuYW1lLCAwLCBuYW1lKTtcbiYjNDM7XHRyZXR1cm4gcGF0aF9yZW1vdmV4YXR0cmF0KEFUX0ZEQ1dELCBwYXRobmFtZSwgMCwgbmFtZSwgZmFsc2UpO1xuIH1cbiBcbiBTWVNDQUxMX0RFRklORTIobHJlbW92ZXhhdHRyLCBjb25zdCBjaGFyIF9fdXNlciAqLCBwYXRobmFtZSxcbiBcdFx0Y29uc3QgY2hhciBfX3VzZXIgKiwgbmFtZSlcbiB7XG4tXHRyZXR1cm4gcGF0aF9yZW1vdmV4YXR0cmF0KEFUX0ZEQ1dELCBwYXRobmFtZSwgQVRfU1lNTElOS19OT0ZPTExPVywgbmFtZSk7XG4mIzQzO1x0cmV0dXJuIHBhdGhfcmVtb3ZleGF0dHJhdChBVF9GRENXRCwgcGF0aG5hbWUsIEFUX1NZTUxJTktfTk9GT0xMT1csIG5hbWUsXG4mIzQzO1x0XHRcdFx0ICBmYWxzZSk7XG4gfVxuIFxuIFNZU0NBTExfREVGSU5FMihmcmVtb3ZleGF0dHIsIGludCwgZmQsIGNvbnN0IGNoYXIgX191c2VyICosIG5hbWUpXG4ge1xuLVx0cmV0dXJuIHBhdGhfcmVtb3ZleGF0dHJhdChmZCwgTlVMTCwgQVRfRU1QVFlfUEFUSCwgbmFtZSk7XG4mIzQzO1x0cmV0dXJuIHBhdGhfcmVtb3ZleGF0dHJhdChmZCwgTlVMTCwgQVRfRU1QVFlfUEFUSCwgbmFtZSwgZmFsc2UpO1xuIH1cbiBcbiBpbnQgeGF0dHJfbGlzdF9vbmUoY2hhciAqKmJ1ZmZlciwgc3NpemVfdCAqcmVtYWluaW5nX3NpemUsIGNvbnN0IGNoYXIgKm5hbWUpXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9maWxlLmggYi9pbmNsdWRlL2xpbnV4L2ZpbGUuaFxuaW5kZXggMjc0ODRiNDQ0ZDMxNTUuLjJhMWRjNzM4OTgxZTAzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9maWxlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZmlsZS5oXG5AQCAtODIsNiAmIzQzOzgyLDggQEAgc3RhdGljIGlubGluZSB2b2lkIGZkcHV0X3BvcyhzdHJ1Y3QgZmQgZilcbiBcbiBERUZJTkVfQ0xBU1MoZmQsIHN0cnVjdCBmZCwgZmRwdXQoX1QpLCBmZGdldChmZCksIGludCBmZClcbiBERUZJTkVfQ0xBU1MoZmRfcmF3LCBzdHJ1Y3QgZmQsIGZkcHV0KF9UKSwgZmRnZXRfcmF3KGZkKSwgaW50IGZkKVxuJiM0MztERUZJTkVfQ0xBU1MoZmRfbWF5YmVfcmF3LCBzdHJ1Y3QgZmQsIGZkcHV0KF9UKSxcbiYjNDM7XHQgICAgIHJhdyA/IGZkZ2V0X3JhdyhmZCkgOiBmZGdldChmZCksIGludCBmZCwgYm9vbCByYXcpXG4gREVGSU5FX0NMQVNTKGZkX3Bvcywgc3RydWN0IGZkLCBmZHB1dF9wb3MoX1QpLCBmZGdldF9wb3MoZmQpLCBpbnQgZmQpXG4gXG4gZXh0ZXJuIGludCBmX2R1cGZkKHVuc2lnbmVkIGludCBmcm9tLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgZmxhZ3MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE2OjQ5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUTVBGU19YQVRUUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BhdGhfc2V0eGF0dHJhdCYjMzQ7LAogICAgJiMzNDtwYXRoX2dldHhhdHRyYXQmIzM0OywKICAgICYjMzQ7cGF0aF9saXN0eGF0dHJhdCYjMzQ7LAogICAgJiMzNDtwYXRoX3JlbW92ZXhhdHRyYXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGAqeGF0dHJhdGAgc3lzY2FsbHMgKGUuZy4sIGBzZXR4YXR0cmF0YCwgYGdldHhhdHRyYXRgLCBgbGlzdHhhdHRyYXRgLCBgcmVtb3ZleGF0dHJhdGApIHRvIGFsbG93IG9wZXJhdGluZyBvbiBgT19QQVRIYCBmaWxlIGRlc2NyaXB0b3JzIHdoZW4gYEFUX0VNUFRZX1BBVEhgIGlzIHVzZWQuIFRoaXMgaXMgYWNoaWV2ZWQgYnkgaW50cm9kdWNpbmcgYSBuZXcgYGZkX21heWJlX3Jhd2AgY2xhc3MgdGhhdCB1c2VzIGBmZGdldF9yYXdgIGluc3RlYWQgb2YgYGZkZ2V0YCB3aGVuIHRoZSBgcmF3YCBwYXJhbWV0ZXIgaXMgdHJ1ZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWx0ZXJzIHRoZSBiZWhhdmlvciBvZiB0aGVzZSBzeXNjYWxscywgbWFraW5nIHRoZW0gY29uc2lzdGVudCB3aXRoIG90aGVyIGAqYXRgIHN5c2NhbGxzIGxpa2UgYGZjaG93bmF0YCBhbmQgYGZzdGF0YXRgLiBJdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gcmVncmVzc2lvbnMgb3IgdW5leHBlY3RlZCBiZWhhdmlvcnMgd2hlbiB1c2luZyBgT19QQVRIYCBmaWxlIGRlc2NyaXB0b3JzIHdpdGggZXh0ZW5kZWQgYXR0cmlidXRlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjA3YzEyZDlkZjNhZWYyOTdmY2VkZmYxMTZkN2I4MmExM2U4NGZjMwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgSnVsIDIzIDE2OjQ5OjA0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMveGF0dHIuYyBiL2ZzL3hhdHRyLmMKaW5kZXggZDU4OTc5MTE1MjAwNzUuLjFkYjY1OTZhMmVjMTEwIDEwMDY0NAotLS0gYS9mcy94YXR0ci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3hhdHRyLmMKQEAgLTcwMCw3ICYjNDM7NzAwLDggQEAgaW50IGZpbGVuYW1lX3NldHhhdHRyKGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqZmlsZW5hbWUsCiAKIHN0YXRpYyBpbnQgcGF0aF9zZXR4YXR0cmF0KGludCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICpwYXRobmFtZSwKIAkJCSAgIHVuc2lnbmVkIGludCBhdF9mbGFncywgY29uc3QgY2hhciBfX3VzZXIgKm5hbWUsCi0JCQkgICBjb25zdCB2b2lkIF9fdXNlciAqdmFsdWUsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpCiYjNDM7CQkJICAgY29uc3Qgdm9pZCBfX3VzZXIgKnZhbHVlLCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzLAomIzQzOwkJCSAgIGJvb2wgcmF3KQogewogCXN0cnVjdCB4YXR0cl9uYW1lIGtuYW1lOwogCXN0cnVjdCBrZXJuZWxfeGF0dHJfY3R4IGN0eCA9IHsKQEAgLTcyNSw3ICYjNDM7NzI2LDcgQEAgc3RhdGljIGludCBwYXRoX3NldHhhdHRyYXQoaW50IGRmZCwgY29uc3QgY2hhciBfX3VzZXIgKnBhdGhuYW1lLAogCiAJQ0xBU1MoZmlsZW5hbWVfbWF5YmVfbnVsbCwgZmlsZW5hbWUpKHBhdGhuYW1lLCBhdF9mbGFncyk7CiAJaWYgKCFmaWxlbmFtZSAmYW1wOyZhbXA7IGRmZCAmZ3Q7PSAwKSB7Ci0JCUNMQVNTKGZkLCBmKShkZmQpOwomIzQzOwkJQ0xBU1MoZmRfbWF5YmVfcmF3LCBmKShkZmQsIHJhdyk7CiAJCWlmIChmZF9lbXB0eShmKSkKIAkJCWVycm9yID0gLUVCQURGOwogCQllbHNlCkBAIC03NTgsMTQgJiM0Mzs3NTksMTUgQEAgU1lTQ0FMTF9ERUZJTkU2KHNldHhhdHRyYXQsIGludCwgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqLCBwYXRobmFtZSwgdW5zaWduZWQgaW4KIAogCXJldHVybiBwYXRoX3NldHhhdHRyYXQoZGZkLCBwYXRobmFtZSwgYXRfZmxhZ3MsIG5hbWUsCiAJCQkgICAgICAgdTY0X3RvX3VzZXJfcHRyKGFyZ3MudmFsdWUpLCBhcmdzLnNpemUsCi0JCQkgICAgICAgYXJncy5mbGFncyk7CiYjNDM7CQkJICAgICAgIGFyZ3MuZmxhZ3MsIHRydWUpOwogfQogCiBTWVNDQUxMX0RFRklORTUoc2V0eGF0dHIsIGNvbnN0IGNoYXIgX191c2VyICosIHBhdGhuYW1lLAogCQljb25zdCBjaGFyIF9fdXNlciAqLCBuYW1lLCBjb25zdCB2b2lkIF9fdXNlciAqLCB2YWx1ZSwKIAkJc2l6ZV90LCBzaXplLCBpbnQsIGZsYWdzKQogewotCXJldHVybiBwYXRoX3NldHhhdHRyYXQoQVRfRkRDV0QsIHBhdGhuYW1lLCAwLCBuYW1lLCB2YWx1ZSwgc2l6ZSwgZmxhZ3MpOwomIzQzOwlyZXR1cm4gcGF0aF9zZXR4YXR0cmF0KEFUX0ZEQ1dELCBwYXRobmFtZSwgMCwgbmFtZSwgdmFsdWUsIHNpemUsIGZsYWdzLAomIzQzOwkJCSAgICAgICBmYWxzZSk7CiB9CiAKIFNZU0NBTExfREVGSU5FNShsc2V0eGF0dHIsIGNvbnN0IGNoYXIgX191c2VyICosIHBhdGhuYW1lLApAQCAtNzczLDE0ICYjNDM7Nzc1LDE0IEBAIFNZU0NBTExfREVGSU5FNShsc2V0eGF0dHIsIGNvbnN0IGNoYXIgX191c2VyICosIHBhdGhuYW1lLAogCQlzaXplX3QsIHNpemUsIGludCwgZmxhZ3MpCiB7CiAJcmV0dXJuIHBhdGhfc2V0eGF0dHJhdChBVF9GRENXRCwgcGF0aG5hbWUsIEFUX1NZTUxJTktfTk9GT0xMT1csIG5hbWUsCi0JCQkgICAgICAgdmFsdWUsIHNpemUsIGZsYWdzKTsKJiM0MzsJCQkgICAgICAgdmFsdWUsIHNpemUsIGZsYWdzLCBmYWxzZSk7CiB9CiAKIFNZU0NBTExfREVGSU5FNShmc2V0eGF0dHIsIGludCwgZmQsIGNvbnN0IGNoYXIgX191c2VyICosIG5hbWUsCiAJCWNvbnN0IHZvaWQgX191c2VyICosdmFsdWUsIHNpemVfdCwgc2l6ZSwgaW50LCBmbGFncykKIHsKIAlyZXR1cm4gcGF0aF9zZXR4YXR0cmF0KGZkLCBOVUxMLCBBVF9FTVBUWV9QQVRILCBuYW1lLAotCQkJICAgICAgIHZhbHVlLCBzaXplLCBmbGFncyk7CiYjNDM7CQkJICAgICAgIHZhbHVlLCBzaXplLCBmbGFncywgZmFsc2UpOwogfQogCiAvKgpAQCAtODQ1LDcgJiM0Mzs4NDcsNyBAQCBzc2l6ZV90IGZpbGVuYW1lX2dldHhhdHRyKGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqZmlsZW5hbWUsCiAKIHN0YXRpYyBzc2l6ZV90IHBhdGhfZ2V0eGF0dHJhdChpbnQgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqcGF0aG5hbWUsCiAJCQkgICAgICAgdW5zaWduZWQgaW50IGF0X2ZsYWdzLCBjb25zdCBjaGFyIF9fdXNlciAqbmFtZSwKLQkJCSAgICAgICB2b2lkIF9fdXNlciAqdmFsdWUsIHNpemVfdCBzaXplKQomIzQzOwkJCSAgICAgICB2b2lkIF9fdXNlciAqdmFsdWUsIHNpemVfdCBzaXplLCBib29sIHJhdykKIHsKIAlzdHJ1Y3QgeGF0dHJfbmFtZSBrbmFtZTsKIAlzdHJ1Y3Qga2VybmVsX3hhdHRyX2N0eCBjdHggPSB7CkBAIC04NjUsNyAmIzQzOzg2Nyw3IEBAIHN0YXRpYyBzc2l6ZV90IHBhdGhfZ2V0eGF0dHJhdChpbnQgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqcGF0aG5hbWUsCiAKIAlDTEFTUyhmaWxlbmFtZV9tYXliZV9udWxsLCBmaWxlbmFtZSkocGF0aG5hbWUsIGF0X2ZsYWdzKTsKIAlpZiAoIWZpbGVuYW1lICZhbXA7JmFtcDsgZGZkICZndDs9IDApIHsKLQkJQ0xBU1MoZmQsIGYpKGRmZCk7CiYjNDM7CQlDTEFTUyhmZF9tYXliZV9yYXcsIGYpKGRmZCwgcmF3KTsKIAkJaWYgKGZkX2VtcHR5KGYpKQogCQkJcmV0dXJuIC1FQkFERjsKIAkJcmV0dXJuIGZpbGVfZ2V0eGF0dHIoZmRfZmlsZShmKSwgJmFtcDtjdHgpOwpAQCAtODk5LDI2ICYjNDM7OTAxLDI4IEBAIFNZU0NBTExfREVGSU5FNihnZXR4YXR0cmF0LCBpbnQsIGRmZCwgY29uc3QgY2hhciBfX3VzZXIgKiwgcGF0aG5hbWUsIHVuc2lnbmVkIGluCiAJCXJldHVybiAtRUlOVkFMOwogCiAJcmV0dXJuIHBhdGhfZ2V0eGF0dHJhdChkZmQsIHBhdGhuYW1lLCBhdF9mbGFncywgbmFtZSwKLQkJCSAgICAgICB1NjRfdG9fdXNlcl9wdHIoYXJncy52YWx1ZSksIGFyZ3Muc2l6ZSk7CiYjNDM7CQkJICAgICAgIHU2NF90b191c2VyX3B0cihhcmdzLnZhbHVlKSwgYXJncy5zaXplLCB0cnVlKTsKIH0KIAogU1lTQ0FMTF9ERUZJTkU0KGdldHhhdHRyLCBjb25zdCBjaGFyIF9fdXNlciAqLCBwYXRobmFtZSwKIAkJY29uc3QgY2hhciBfX3VzZXIgKiwgbmFtZSwgdm9pZCBfX3VzZXIgKiwgdmFsdWUsIHNpemVfdCwgc2l6ZSkKIHsKLQlyZXR1cm4gcGF0aF9nZXR4YXR0cmF0KEFUX0ZEQ1dELCBwYXRobmFtZSwgMCwgbmFtZSwgdmFsdWUsIHNpemUpOwomIzQzOwlyZXR1cm4gcGF0aF9nZXR4YXR0cmF0KEFUX0ZEQ1dELCBwYXRobmFtZSwgMCwgbmFtZSwgdmFsdWUsIHNpemUsCiYjNDM7CQkJICAgICAgIGZhbHNlKTsKIH0KIAogU1lTQ0FMTF9ERUZJTkU0KGxnZXR4YXR0ciwgY29uc3QgY2hhciBfX3VzZXIgKiwgcGF0aG5hbWUsCiAJCWNvbnN0IGNoYXIgX191c2VyICosIG5hbWUsIHZvaWQgX191c2VyICosIHZhbHVlLCBzaXplX3QsIHNpemUpCiB7CiAJcmV0dXJuIHBhdGhfZ2V0eGF0dHJhdChBVF9GRENXRCwgcGF0aG5hbWUsIEFUX1NZTUxJTktfTk9GT0xMT1csIG5hbWUsCi0JCQkgICAgICAgdmFsdWUsIHNpemUpOwomIzQzOwkJCSAgICAgICB2YWx1ZSwgc2l6ZSwgZmFsc2UpOwogfQogCiBTWVNDQUxMX0RFRklORTQoZmdldHhhdHRyLCBpbnQsIGZkLCBjb25zdCBjaGFyIF9fdXNlciAqLCBuYW1lLAogCQl2b2lkIF9fdXNlciAqLCB2YWx1ZSwgc2l6ZV90LCBzaXplKQogewotCXJldHVybiBwYXRoX2dldHhhdHRyYXQoZmQsIE5VTEwsIEFUX0VNUFRZX1BBVEgsIG5hbWUsIHZhbHVlLCBzaXplKTsKJiM0MzsJcmV0dXJuIHBhdGhfZ2V0eGF0dHJhdChmZCwgTlVMTCwgQVRfRU1QVFlfUEFUSCwgbmFtZSwgdmFsdWUsIHNpemUsCiYjNDM7CQkJICAgICAgIGZhbHNlKTsKIH0KIAogLyoKQEAgLTk4Miw3ICYjNDM7OTg2LDcgQEAgc3NpemVfdCBmaWxlbmFtZV9saXN0eGF0dHIoaW50IGRmZCwgc3RydWN0IGZpbGVuYW1lICpmaWxlbmFtZSwKIAogc3RhdGljIHNzaXplX3QgcGF0aF9saXN0eGF0dHJhdChpbnQgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqcGF0aG5hbWUsCiAJCQkJdW5zaWduZWQgaW50IGF0X2ZsYWdzLCBjaGFyIF9fdXNlciAqbGlzdCwKLQkJCQlzaXplX3Qgc2l6ZSkKJiM0MzsJCQkJc2l6ZV90IHNpemUsIGJvb2wgcmF3KQogewogCWludCBsb29rdXBfZmxhZ3M7CiAKQEAgLTk5MSw3ICYjNDM7OTk1LDcgQEAgc3RhdGljIHNzaXplX3QgcGF0aF9saXN0eGF0dHJhdChpbnQgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqcGF0aG5hbWUsCiAKIAlDTEFTUyhmaWxlbmFtZV9tYXliZV9udWxsLCBmaWxlbmFtZSkocGF0aG5hbWUsIGF0X2ZsYWdzKTsKIAlpZiAoIWZpbGVuYW1lKSB7Ci0JCUNMQVNTKGZkLCBmKShkZmQpOwomIzQzOwkJQ0xBU1MoZmRfbWF5YmVfcmF3LCBmKShkZmQsIHJhdyk7CiAJCWlmIChmZF9lbXB0eShmKSkKIAkJCXJldHVybiAtRUJBREY7CiAJCXJldHVybiBmaWxlX2xpc3R4YXR0cihmZF9maWxlKGYpLCBsaXN0LCBzaXplKTsKQEAgLTEwMDUsMjQgJiM0MzsxMDA5LDI1IEBAIFNZU0NBTExfREVGSU5FNShsaXN0eGF0dHJhdCwgaW50LCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICosIHBhdGhuYW1lLAogCQl1bnNpZ25lZCBpbnQsIGF0X2ZsYWdzLAogCQljaGFyIF9fdXNlciAqLCBsaXN0LCBzaXplX3QsIHNpemUpCiB7Ci0JcmV0dXJuIHBhdGhfbGlzdHhhdHRyYXQoZGZkLCBwYXRobmFtZSwgYXRfZmxhZ3MsIGxpc3QsIHNpemUpOwomIzQzOwlyZXR1cm4gcGF0aF9saXN0eGF0dHJhdChkZmQsIHBhdGhuYW1lLCBhdF9mbGFncywgbGlzdCwgc2l6ZSwgdHJ1ZSk7CiB9CiAKIFNZU0NBTExfREVGSU5FMyhsaXN0eGF0dHIsIGNvbnN0IGNoYXIgX191c2VyICosIHBhdGhuYW1lLCBjaGFyIF9fdXNlciAqLCBsaXN0LAogCQlzaXplX3QsIHNpemUpCiB7Ci0JcmV0dXJuIHBhdGhfbGlzdHhhdHRyYXQoQVRfRkRDV0QsIHBhdGhuYW1lLCAwLCBsaXN0LCBzaXplKTsKJiM0MzsJcmV0dXJuIHBhdGhfbGlzdHhhdHRyYXQoQVRfRkRDV0QsIHBhdGhuYW1lLCAwLCBsaXN0LCBzaXplLCBmYWxzZSk7CiB9CiAKIFNZU0NBTExfREVGSU5FMyhsbGlzdHhhdHRyLCBjb25zdCBjaGFyIF9fdXNlciAqLCBwYXRobmFtZSwgY2hhciBfX3VzZXIgKiwgbGlzdCwKIAkJc2l6ZV90LCBzaXplKQogewotCXJldHVybiBwYXRoX2xpc3R4YXR0cmF0KEFUX0ZEQ1dELCBwYXRobmFtZSwgQVRfU1lNTElOS19OT0ZPTExPVywgbGlzdCwgc2l6ZSk7CiYjNDM7CXJldHVybiBwYXRoX2xpc3R4YXR0cmF0KEFUX0ZEQ1dELCBwYXRobmFtZSwgQVRfU1lNTElOS19OT0ZPTExPVywgbGlzdCwKJiM0MzsJCQkJc2l6ZSwgZmFsc2UpOwogfQogCiBTWVNDQUxMX0RFRklORTMoZmxpc3R4YXR0ciwgaW50LCBmZCwgY2hhciBfX3VzZXIgKiwgbGlzdCwgc2l6ZV90LCBzaXplKQogewotCXJldHVybiBwYXRoX2xpc3R4YXR0cmF0KGZkLCBOVUxMLCBBVF9FTVBUWV9QQVRILCBsaXN0LCBzaXplKTsKJiM0MzsJcmV0dXJuIHBhdGhfbGlzdHhhdHRyYXQoZmQsIE5VTEwsIEFUX0VNUFRZX1BBVEgsIGxpc3QsIHNpemUsIGZhbHNlKTsKIH0KIAogLyoKQEAgLTEwNzMsNyAmIzQzOzEwNzgsOCBAQCBzdGF0aWMgaW50IGZpbGVuYW1lX3JlbW92ZXhhdHRyKGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqZmlsZW5hbWUsCiB9CiAKIHN0YXRpYyBpbnQgcGF0aF9yZW1vdmV4YXR0cmF0KGludCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICpwYXRobmFtZSwKLQkJCSAgICAgIHVuc2lnbmVkIGludCBhdF9mbGFncywgY29uc3QgY2hhciBfX3VzZXIgKm5hbWUpCiYjNDM7CQkJICAgICAgdW5zaWduZWQgaW50IGF0X2ZsYWdzLCBjb25zdCBjaGFyIF9fdXNlciAqbmFtZSwKJiM0MzsJCQkgICAgICBib29sIHJhdykKIHsKIAlzdHJ1Y3QgeGF0dHJfbmFtZSBrbmFtZTsKIAl1bnNpZ25lZCBpbnQgbG9va3VwX2ZsYWdzOwpAQCAtMTA4OCw3ICYjNDM7MTA5NCw3IEBAIHN0YXRpYyBpbnQgcGF0aF9yZW1vdmV4YXR0cmF0KGludCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICpwYXRobmFtZSwKIAogCUNMQVNTKGZpbGVuYW1lX21heWJlX251bGwsIGZpbGVuYW1lKShwYXRobmFtZSwgYXRfZmxhZ3MpOwogCWlmICghZmlsZW5hbWUpIHsKLQkJQ0xBU1MoZmQsIGYpKGRmZCk7CiYjNDM7CQlDTEFTUyhmZF9tYXliZV9yYXcsIGYpKGRmZCwgcmF3KTsKIAkJaWYgKGZkX2VtcHR5KGYpKQogCQkJcmV0dXJuIC1FQkFERjsKIAkJcmV0dXJuIGZpbGVfcmVtb3ZleGF0dHIoZmRfZmlsZShmKSwgJmFtcDtrbmFtZSk7CkBAIC0xMTAwLDI0ICYjNDM7MTEwNiwyNSBAQCBzdGF0aWMgaW50IHBhdGhfcmVtb3ZleGF0dHJhdChpbnQgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqcGF0aG5hbWUsCiBTWVNDQUxMX0RFRklORTQocmVtb3ZleGF0dHJhdCwgaW50LCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICosIHBhdGhuYW1lLAogCQl1bnNpZ25lZCBpbnQsIGF0X2ZsYWdzLCBjb25zdCBjaGFyIF9fdXNlciAqLCBuYW1lKQogewotCXJldHVybiBwYXRoX3JlbW92ZXhhdHRyYXQoZGZkLCBwYXRobmFtZSwgYXRfZmxhZ3MsIG5hbWUpOwomIzQzOwlyZXR1cm4gcGF0aF9yZW1vdmV4YXR0cmF0KGRmZCwgcGF0aG5hbWUsIGF0X2ZsYWdzLCBuYW1lLCB0cnVlKTsKIH0KIAogU1lTQ0FMTF9ERUZJTkUyKHJlbW92ZXhhdHRyLCBjb25zdCBjaGFyIF9fdXNlciAqLCBwYXRobmFtZSwKIAkJY29uc3QgY2hhciBfX3VzZXIgKiwgbmFtZSkKIHsKLQlyZXR1cm4gcGF0aF9yZW1vdmV4YXR0cmF0KEFUX0ZEQ1dELCBwYXRobmFtZSwgMCwgbmFtZSk7CiYjNDM7CXJldHVybiBwYXRoX3JlbW92ZXhhdHRyYXQoQVRfRkRDV0QsIHBhdGhuYW1lLCAwLCBuYW1lLCBmYWxzZSk7CiB9CiAKIFNZU0NBTExfREVGSU5FMihscmVtb3ZleGF0dHIsIGNvbnN0IGNoYXIgX191c2VyICosIHBhdGhuYW1lLAogCQljb25zdCBjaGFyIF9fdXNlciAqLCBuYW1lKQogewotCXJldHVybiBwYXRoX3JlbW92ZXhhdHRyYXQoQVRfRkRDV0QsIHBhdGhuYW1lLCBBVF9TWU1MSU5LX05PRk9MTE9XLCBuYW1lKTsKJiM0MzsJcmV0dXJuIHBhdGhfcmVtb3ZleGF0dHJhdChBVF9GRENXRCwgcGF0aG5hbWUsIEFUX1NZTUxJTktfTk9GT0xMT1csIG5hbWUsCiYjNDM7CQkJCSAgZmFsc2UpOwogfQogCiBTWVNDQUxMX0RFRklORTIoZnJlbW92ZXhhdHRyLCBpbnQsIGZkLCBjb25zdCBjaGFyIF9fdXNlciAqLCBuYW1lKQogewotCXJldHVybiBwYXRoX3JlbW92ZXhhdHRyYXQoZmQsIE5VTEwsIEFUX0VNUFRZX1BBVEgsIG5hbWUpOwomIzQzOwlyZXR1cm4gcGF0aF9yZW1vdmV4YXR0cmF0KGZkLCBOVUxMLCBBVF9FTVBUWV9QQVRILCBuYW1lLCBmYWxzZSk7CiB9CiAKIGludCB4YXR0cl9saXN0X29uZShjaGFyICoqYnVmZmVyLCBzc2l6ZV90ICpyZW1haW5pbmdfc2l6ZSwgY29uc3QgY2hhciAqbmFtZSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZmlsZS5oIGIvaW5jbHVkZS9saW51eC9maWxlLmgKaW5kZXggMjc0ODRiNDQ0ZDMxNTUuLjJhMWRjNzM4OTgxZTAzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZpbGUuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2ZpbGUuaApAQCAtODIsNiAmIzQzOzgyLDggQEAgc3RhdGljIGlubGluZSB2b2lkIGZkcHV0X3BvcyhzdHJ1Y3QgZmQgZikKIAogREVGSU5FX0NMQVNTKGZkLCBzdHJ1Y3QgZmQsIGZkcHV0KF9UKSwgZmRnZXQoZmQpLCBpbnQgZmQpCiBERUZJTkVfQ0xBU1MoZmRfcmF3LCBzdHJ1Y3QgZmQsIGZkcHV0KF9UKSwgZmRnZXRfcmF3KGZkKSwgaW50IGZkKQomIzQzO0RFRklORV9DTEFTUyhmZF9tYXliZV9yYXcsIHN0cnVjdCBmZCwgZmRwdXQoX1QpLAomIzQzOwkgICAgIHJhdyA/IGZkZ2V0X3JhdyhmZCkgOiBmZGdldChmZCksIGludCBmZCwgYm9vbCByYXcpCiBERUZJTkVfQ0xBU1MoZmRfcG9zLCBzdHJ1Y3QgZmQsIGZkcHV0X3BvcyhfVCksIGZkZ2V0X3BvcyhmZCksIGludCBmZCkKIAogZXh0ZXJuIGludCBmX2R1cGZkKHVuc2lnbmVkIGludCBmcm9tLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgZmxhZ3MpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNjo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzkyCgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMzcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgeGF0dHIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBmcy94YXR0ci5jYCBhbmQgYGluY2x1ZGUvbGludXgvZmlsZS5oYC4gSXQgc2VlbXMgdGhleSYjMzk7cmUgYWRkaW5nIGEgYGJvb2wgcmF3YCBhcmd1bWVudCB0byB0aGUgYHBhdGhfc2V0eGF0dHJhdGAsIGBwYXRoX2dldHhhdHRyYXRgLCBgcGF0aF9saXN0eGF0dHJhdGAsIGFuZCBgcGF0aF9yZW1vdmV4YXR0cmF0YCBmdW5jdGlvbnMuIFJpZ2h0LCBhbmQgdGhpcyBpcyBhYm91dCBkaWZmZXJlbnRpYXRpbmcgYmV0d2VlbiB0aGUgbmV3ZXIgYCphdGAgc3lzY2FsbHMgYW5kIHRoZSBvbGRlciBvbmVzLCBzbyB0aGUgYHJhd2AgZmxhZyBnZXRzIHBhc3NlZCBhcyBgdHJ1ZWAgZm9yIHRoZSBmb3JtZXIgKGUuZy4sIGBzZXR4YXR0cmF0YCkgYW5kIGBmYWxzZWAgZm9yIHRoZSBvbGRlciBvbmVzIChlLmcuLCBgc2V0eGF0dHJgLCBgbHNldHhhdHRyYCwgYGZzZXR4YXR0cmApLiBXYWl0IGEgc2Vjb25kLCB0aGUgb2xkZXIgc3lzY2FsbCBgZnNldHhhdHRyYCBhbHNvIHBhc3NlcyBgZmFsc2VgIGZvciBgcmF3YC4KCk5vdywgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIGBpbmNsdWRlL2xpbnV4L2ZpbGUuaGAuIEFoLCBoZXJlIGl0IGlzOiBgREVGSU5FX0NMQVNTKGZkX21heWJlX3Jhdywgc3RydWN0IGZkLCBmZHB1dChfVCksIHJhdyA/IGZkZ2V0X3JhdyhmZCkgOiBmZGdldChmZCksIGludCBmZCwgYm9vbCByYXcpYC4gT2theSwgc28gaXQgdXNlcyBgZmRnZXRfcmF3KGZkKWAgaWYgYHJhd2AgaXMgdHJ1ZSBhbmQgYGZkZ2V0KGZkKWAgb3RoZXJ3aXNlLiBTbywgdGhpcyBtZWFucyB0aGF0IGBmZGdldF9yYXdgIGFsbG93cyB0aGUgZ2V0dGluZyBvZiB0aGUgZmlsZSBkZXNjcmlwdG9yIGV2ZW4gaWYgaXQgaXMgYW4gYE9fUEFUSGAgZmlsZSBkZXNjcmlwdG9yLCB3aGlsZSBgZmRnZXRgIHdvdWxkIHBvdGVudGlhbGx5IGZhaWwuIFNvLCB0aGlzIGNoYW5nZSBpcyBhbGxvd2luZyBhY2Nlc3MgdG8gdGhlc2UgZmlsZSBkZXNjcmlwdG9ycyB3aGVuIHRoZXkgb3RoZXJ3aXNlIHdvdWxkbiYjMzk7dCBiZSBhbGxvd2VkPyBJdCYjMzk7cyBwcm9iYWJseSByZWxhdGVkIHRvIGhhbmRsaW5nIGBPX1BBVEhgIGRlc2NyaXB0b3JzIHByb3Blcmx5LiBMZXQgbWUgZG91YmxlLWNoZWNrIHRoYXQgYnkgbG9va2luZyBhdCBob3cgYGZkZ2V0X3Jhd2Agd29ya3MuIEkmIzM5O2xsIHVzZSBgZ3JlcHBlcmAgdG8gc2VlIHdoZXJlIGBmZGdldF9yYXdgIGlzIGRlZmluZWQgYW5kIHdoYXQgaXQgZG9lcyBpbiBkZXRhaWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMTY6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmRnZXRfcmF3JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2ZpbGUuYz0xMjEwPUVYUE9SVF9TWU1CT0woZmRnZXQpO1xuZnMvZmlsZS5jLTEyMTEtXG5mcy9maWxlLmM6MTIxMjpzdHJ1Y3QgZmQgZmRnZXRfcmF3KHVuc2lnbmVkIGludCBmZClcbmZzL2ZpbGUuYy0xMjEzLXtcbi0tXG5pbmNsdWRlL2xpbnV4L2ZpbGUuaD03Mj1zdHJ1Y3QgZmQgZmRnZXQodW5zaWduZWQgaW50IGZkKTtcbmluY2x1ZGUvbGludXgvZmlsZS5oOjczOnN0cnVjdCBmZCBmZGdldF9yYXcodW5zaWduZWQgaW50IGZkKTtcbmluY2x1ZGUvbGludXgvZmlsZS5oLTc0LXN0cnVjdCBmZCBmZGdldF9wb3ModW5zaWduZWQgaW50IGZkKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2ZpbGUuaD04Mz1ERUZJTkVfQ0xBU1MoZmQsIHN0cnVjdCBmZCwgZmRwdXQoX1QpLCBmZGdldChmZCksIGludCBmZClcbmluY2x1ZGUvbGludXgvZmlsZS5oOjg0OkRFRklORV9DTEFTUyhmZF9yYXcsIHN0cnVjdCBmZCwgZmRwdXQoX1QpLCBmZGdldF9yYXcoZmQpLCBpbnQgZmQpXG5pbmNsdWRlL2xpbnV4L2ZpbGUuaC04NS1ERUZJTkVfQ0xBU1MoZmRfbWF5YmVfcmF3LCBzdHJ1Y3QgZmQsIGZkcHV0KF9UKSxcbmluY2x1ZGUvbGludXgvZmlsZS5oOjg2Olx0ICAgICByYXcgPyBmZGdldF9yYXcoZmQpIDogZmRnZXQoZmQpLCBpbnQgZmQsIGJvb2wgcmF3KVxuaW5jbHVkZS9saW51eC9maWxlLmgtODctREVGSU5FX0NMQVNTKGZkX3Bvcywgc3RydWN0IGZkLCBmZHB1dF9wb3MoX1QpLCBmZGdldF9wb3MoZmQpLCBpbnQgZmQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMTY6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTkwNgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgYGZkZ2V0X3Jhd2AgRnVuY3Rpb24qKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIGp1bXAgaW50byB0aGUgYGZkZ2V0X3Jhd2AgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBsb29rIGF0IGBmcy9maWxlLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBsb3dlci1sZXZlbCBmaWxlIGRlc2NyaXB0b3IgaGFuZGxpbmcgcmVzaWRlcywgc28gdGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gdW5kZXJzdGFuZCB0aGUgbWVjaGFuaWNzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgZnVuY3Rpb24gaXMgZGVzaWduZWQgdG8gZG8uIE15IGd1ZXNzIGlzIGl0JiMzOTtzIGZldGNoaW5nIGEgcmF3IGZpbGUgZGVzY3JpcHRvciBzdHJ1Y3R1cmUsIGxpa2VseSB3aXRob3V0IGFueSBhZGRlZCBwcm90ZWN0aW9uIG9yIGNoZWNrcywgd2hpY2ggSSYjMzk7bGwgaGF2ZSB0byBrZWVwIGluIG1pbmQuIExldCYjMzk7cyBzZWUgaG93IGl0IGhhbmRsZXMgdGhlIGRpZmZlcmVudCBzY2VuYXJpb3MsIGVycm9ycywgYW5kIHdoYXQgdGhlIHJldHVybiB2YWx1ZSB0ZWxscyBtZS4gVGltZSB0byBzdGFydCBkaWdnaW5nIHRocm91Z2ggdGhlIGNvZGUuIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCB1bmRlcnN0YW5kaW5nIHJhdyBmaWxlIGRlc2NyaXB0b3IgaGFuZGxpbmcgY2FuIGlsbHVtaW5hdGUgYSBsb3QgYWJvdXQgYSBzeXN0ZW0mIzM5O3MgY29yZSBkZXNpZ24uIEkgYW50aWNpcGF0ZSB0aGlzIHdpbGwgYmUgaW50ZXJlc3RpbmchCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMTY6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9maWxlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyMDA6XHRcdFx0ZmlsZSA9IF9fZmdldF9maWxlcyhmaWxlcywgZmQsIG1hc2spO1xuMTIwMTpcdFx0XHRpZiAoIWZpbGUpXG4xMjAyOlx0XHRcdFx0cmV0dXJuIEVNUFRZX0ZEO1xuMTIwMzpcdFx0XHRyZXR1cm4gQ0xPTkVEX0ZEKGZpbGUpO1xuMTIwNDpcdFx0fVxuMTIwNTpcdH1cbjEyMDY6XHRzdHJ1Y3QgZmQgZmRnZXQodW5zaWduZWQgaW50IGZkKVxuMTIwNzpcdHtcbjEyMDg6XHRcdHJldHVybiBfX2ZnZXRfbGlnaHQoZmQsIEZNT0RFX1BBVEgpO1xuMTIwOTpcdH1cbjEyMTA6XHRFWFBPUlRfU1lNQk9MKGZkZ2V0KTtcbjEyMTE6XHRcbjEyMTI6XHRzdHJ1Y3QgZmQgZmRnZXRfcmF3KHVuc2lnbmVkIGludCBmZClcbjEyMTM6XHR7XG4xMjE0Olx0XHRyZXR1cm4gX19mZ2V0X2xpZ2h0KGZkLCAwKTtcbjEyMTU6XHR9XG4xMjE2Olx0XG4xMjE3Olx0LypcbjEyMTg6XHQgKiBUcnkgdG8gYXZvaWQgZl9wb3MgbG9ja2luZy4gV2Ugb25seSBuZWVkIGl0IGlmIHRoZVxuMTIxOTpcdCAqIGZpbGUgaXMgbWFya2VkIGZvciBGTU9ERV9BVE9NSUNfUE9TLCBhbmQgaXQgY2FuIGJlXG4xMjIwOlx0ICogYWNjZXNzZWQgbXVsdGlwbGUgd2F5cy5cbjEyMjE6XHQgKlxuMTIyMjpcdCAqIEFsd2F5cyBkbyBpdCBmb3IgZGlyZWN0b3JpZXMsIGJlY2F1c2UgcGlkZmRfZ2V0ZmQoKVxuMTIyMzpcdCAqIGNhbiBtYWtlIGEgZmlsZSBhY2Nlc3NpYmxlIGV2ZW4gaWYgaXQgb3RoZXJ3aXNlIHdvdWxkXG4xMjI0Olx0ICogbm90IGJlLCBhbmQgZm9yIGRpcmVjdG9yaWVzIHRoaXMgaXMgYSBjb3JyZWN0bmVzc1xuMTIyNTpcdCAqIGlzc3VlLCBub3QgYSBcJiMzNDtQT1NJWCByZXF1aXJlbWVudFwmIzM0Oy5cbjEyMjY6XHQgKi9cbjEyMjc6XHRzdGF0aWMgaW5saW5lIGJvb2wgZmlsZV9uZWVkc19mX3Bvc19sb2NrKHN0cnVjdCBmaWxlICpmaWxlKVxuMTIyODpcdHtcbjEyMjk6XHRcdGlmICghKGZpbGUtXHUwMDNlZl9tb2RlIFx1MDAyNiBGTU9ERV9BVE9NSUNfUE9TKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNjo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTg2CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMTYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgeGF0dHIgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0aGVzZSBleHRlbmRlZCBhdHRyaWJ1dGVzIChgeGF0dHJgKSBmdW5jdGlvbnMgYXJlIGltcGxlbWVudGVkLCBhbmQgSSYjMzk7dmUgbm90aWNlZCBzb21ldGhpbmcuIEl0IHNlZW1zIHRoYXQgYGZkZ2V0YCB1c2VzIGBfX2ZnZXRfbGlnaHRgIHdpdGggYEZNT0RFX1BBVEhgLiBUaGF0JiMzOTtzIGltcG9ydGFudCBiZWNhdXNlIGl0IG1lYW5zIGFueSBmaWxlIGRlc2NyaXB0b3Igb3BlbmVkIHdpdGggYE9fUEFUSGAgd2lsbCBhdXRvbWF0aWNhbGx5IGZhaWwgd2hlbiBgZmRnZXRgIGlzIGNhbGxlZC4gSG93ZXZlciwgYGZkZ2V0X3Jhd2AgaXMgZGlmZmVyZW50IOKAkyBpdCB0YWtlcyBhIGAwYCBhcmd1bWVudCB3aGljaCBsZXRzIGl0IGhhbmRsZSB0aG9zZSBgT19QQVRIYCBmaWxlIGRlc2NyaXB0b3JzLgoKTm93IEkmIzM5O20gc2VlaW5nIHRoaXMgcGF0Y2gsIGFuZCBpdCYjMzk7cyBjaGFuZ2luZyBgc2V0eGF0dHJhdGAsIGBnZXR4YXR0cmF0YCwgYGxpc3R4YXR0cmF0YCwgYW5kIGByZW1vdmV4YXR0cmF0YCB0byB1c2UgYHJhdyA9IHRydWVgLiBUaGF0JiMzOTtzIHRoZSBrZXkuIFRoYXQgbWVhbnMgdGhlc2UgZnVuY3Rpb25zIHdpbGwgbm93IGJlIGFibGUgdG8gaGFuZGxlIGBPX1BBVEhgIGZpbGUgZGVzY3JpcHRvcnMsIGVmZmVjdGl2ZWx5IGJ5cGFzc2luZyB0aGUgYEZNT0RFX1BBVEhgIGNoZWNrIGFuZCBhbGxvd2luZyBhY2Nlc3Mgd2hlcmUgaXQgd2FzIHByZXZpb3VzbHkgYmxvY2tlZC4KCldhaXQgYSBzZWNvbmQuLi5JIGJlbGlldmUgYHNldHhhdHRyYXRgIGlzIHRoZSBuZXdlciBvbmUuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBpbiBgZnMveGF0dHIuY2AgdG8gY29uZmlybSBpdCYjMzk7cyBhIHN5c2NhbGwgYW5kIHZlcmlmeSB0aGUgZGV0YWlscyBvZiBpdHMgaW5jbHVzaW9uLiBKdXN0IG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gZnVsbHkgdXAgdG8gc3BlZWQgd2l0aCB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE2OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1NZU0NBTExfREVGSU5FLipzZXR4YXR0cmF0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3hhdHRyLmM9NzAxPXN0YXRpYyBpbnQgcGF0aF9zZXR4YXR0cmF0KGludCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICpwYXRobmFtZSxcbi0tXG5mcy94YXR0ci5jLTc0MC1cbmZzL3hhdHRyLmM6NzQxOlNZU0NBTExfREVGSU5FNihzZXR4YXR0cmF0LCBpbnQsIGRmZCwgY29uc3QgY2hhciBfX3VzZXIgKiwgcGF0aG5hbWUsIHVuc2lnbmVkIGludCwgYXRfZmxhZ3MsXG5mcy94YXR0ci5jLTc0Mi1cdFx0Y29uc3QgY2hhciBfX3VzZXIgKiwgbmFtZSwgY29uc3Qgc3RydWN0IHhhdHRyX2FyZ3MgX191c2VyICosIHVhcmdzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE2OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxNzMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBOZXcgWGF0dHIgU3lzY2FsbHMqKgoKT2theSwgc28gSSBzZWUgdGhlc2UgbmV3IHN5c2NhbGxzIOKAkyBgc2V0eGF0dHJhdGAsIGBnZXR4YXR0cmF0YCwgYGxpc3R4YXR0cmF0YCwgYW5kIGByZW1vdmV4YXR0cmF0YC4gVGhleSYjMzk7cmUgZGVzaWduZWQgdG8gd29yayB3aXRoIGV4dGVuZGVkIGF0dHJpYnV0ZXMsIHdoaWNoIGlzIHVzZWZ1bC4gVGhlIHBhdGNoIGZvY3VzZXMgb24gYWxsb3dpbmcgdGhlc2UgdG8gb3BlcmF0ZSB3aXRoIGBPX1BBVEhgIGZpbGUgZGVzY3JpcHRvcnMgd2hlbiBgZGZkYCBpcyBhbHNvIGluIHVzZS4KCk5vdywgYSBiaXQgb2YgYSB3cmlua2xlIGhlcmUuIElmIGBkZmRgICppcyogYW4gYE9fUEFUSGAgZmlsZSBkZXNjcmlwdG9yLCBhbmQgYHBhdGhuYW1lYCBpcyBlbXB0eSAoYEFUX0VNUFRZX1BBVEhgIGZsYWcgaW4gdXNlKSwgZG9lcyBpdCBtZWFuIHRoZSBjYWxscyBkaXJlY3RseSBvcGVyYXRlIG9uIHRoYXQgYE9fUEFUSGAgZGVzY3JpcHRvciBpdHNlbGY/IFRoYXQmIzM5O3MgdGhlIGNvcmUgcXVlc3Rpb24uIEkgc2hvdWxkIHByb2JhYmx5IGRpZyBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiwgc3BlY2lmaWNhbGx5LCB0aGUgYHBhdGhfc2V0eGF0dHJhdGAgZnVuY3Rpb24gaW4gYGZzL3hhdHRyLmNgIHRvIGNvbmZpcm0gdGhlIGJlaGF2aW91ci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMTY6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy94YXR0ci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3MjA6XHRcdGlmICghKGF0X2ZsYWdzIFx1MDAyNiBBVF9TWU1MSU5LX05PRk9MTE9XKSlcbiA3MjE6XHRcdFx0bG9va3VwX2ZsYWdzID0gTE9PS1VQX0ZPTExPVztcbiA3MjI6XHRcbiA3MjM6XHRcdGVycm9yID0gc2V0eGF0dHJfY29weShuYW1lLCBcdTAwMjZjdHgpO1xuIDcyNDpcdFx0aWYgKGVycm9yKVxuIDcyNTpcdFx0XHRyZXR1cm4gZXJyb3I7XG4gNzI2Olx0XG4gNzI3Olx0XHRDTEFTUyhmaWxlbmFtZV9tYXliZV9udWxsLCBmaWxlbmFtZSkocGF0aG5hbWUsIGF0X2ZsYWdzKTtcbiA3Mjg6XHRcdGlmICghZmlsZW5hbWUgXHUwMDI2XHUwMDI2IGRmZCBcdTAwM2U9IDApIHtcbiA3Mjk6XHRcdFx0Q0xBU1MoZmRfbWF5YmVfcmF3LCBmKShkZmQsIHJhdyk7XG4gNzMwOlx0XHRcdGlmIChmZF9lbXB0eShmKSlcbiA3MzE6XHRcdFx0XHRlcnJvciA9IC1FQkFERjtcbiA3MzI6XHRcdFx0ZWxzZVxuIDczMzpcdFx0XHRcdGVycm9yID0gZmlsZV9zZXR4YXR0cihmZF9maWxlKGYpLCBcdTAwMjZjdHgpO1xuIDczNDpcdFx0fSBlbHNlIHtcbiA3MzU6XHRcdFx0ZXJyb3IgPSBmaWxlbmFtZV9zZXR4YXR0cihkZmQsIGZpbGVuYW1lLCBsb29rdXBfZmxhZ3MsIFx1MDAyNmN0eCk7XG4gNzM2Olx0XHR9XG4gNzM3Olx0XHRrdmZyZWUoY3R4Lmt2YWx1ZSk7XG4gNzM4Olx0XHRyZXR1cm4gZXJyb3I7XG4gNzM5Olx0fVxuIDc0MDpcdFxuIDc0MTpcdFNZU0NBTExfREVGSU5FNihzZXR4YXR0cmF0LCBpbnQsIGRmZCwgY29uc3QgY2hhciBfX3VzZXIgKiwgcGF0aG5hbWUsIHVuc2lnbmVkIGludCwgYXRfZmxhZ3MsXG4gNzQyOlx0XHRcdGNvbnN0IGNoYXIgX191c2VyICosIG5hbWUsIGNvbnN0IHN0cnVjdCB4YXR0cl9hcmdzIF9fdXNlciAqLCB1YXJncyxcbiA3NDM6XHRcdFx0c2l6ZV90LCB1c2l6ZSlcbiA3NDQ6XHR7XG4gNzQ1Olx0XHRzdHJ1Y3QgeGF0dHJfYXJncyBhcmdzID0ge307XG4gNzQ2Olx0XHRpbnQgZXJyb3I7XG4gNzQ3Olx0XG4gNzQ4Olx0XHRCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCB4YXR0cl9hcmdzKSBcdTAwM2MgWEFUVFJfQVJHU19TSVpFX1ZFUjApO1xuIDc0OTpcdFx0QlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgeGF0dHJfYXJncykgIT0gWEFUVFJfQVJHU19TSVpFX0xBVEVTVCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE2OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwMTIKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBBdHRyaWJ1dGUgU2V0dGluZyBMb2dpYyoqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgY29kZSwgYGZpbGVuYW1lX21heWJlX251bGxgIGludGVsbGlnZW50bHkgaGFuZGxlcyB0aGUgbnVsbCBmaWxlbmFtZSBzaXR1YXRpb24uIEl0IHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGlmIHRoZSBgcGF0aG5hbWVgIGlzIGVtcHR5IGFuZCBgQVRfRU1QVFlfUEFUSGAgaXMgZ2l2ZW4sIHdlIGdldCBudWxsIGJhY2sgZnJvbSB0aGUgZnVuY3Rpb24uIElmIGBmaWxlbmFtZWAgaXMgYWJzZW50LCBpdCBtb3ZlcyBvbiBhbmQgdXNlcyBgZGZkYCBkaXJlY3RseS4gVGhlbiwgYENMQVNTKGZkX21heWJlX3JhdywgZikoZGZkLCByYXcpYCBpcyB1c2VkIHRvIHJldHJpZXZlIHRoZSBmaWxlIGRlc2NyaXB0b3Ig4oCTIHRoYXQgcGFydCBpcyBjbGVhci4gQW5kIHRoZSBgcmF3YCBmbGFnIGlzIHRoZXJlIHRvIGFsbG93IGZvciBgT19QQVRIYCBmaWxlIGRlc2NyaXB0b3JzLgoKQWxyaWdodCwgc28gZmFyIHNvIGdvb2QuIE5vdyBjb21lcyB0aGUgcGFydCBJIG5lZWQgdG8gZm9jdXMgb246IGBmaWxlX3NldHhhdHRyKGZkX2ZpbGUoZiksICZhbXA7Y3R4KWAuIFRoZSBxdWVzdGlvbiB0aGF0IHNwcmluZ3MgdG8gbWluZCwgYW5kIGl0JiMzOTtzIGEgY3JpdGljYWwgb25lLCBpcyB3aGV0aGVyIGBmaWxlX3NldHhhdHRyYCBhY3R1YWxseSBzdXBwb3J0cyBiZWluZyBjYWxsZWQgd2l0aCBgT19QQVRIYCBmaWxlIGRlc2NyaXB0b3JzLiBJJiMzOTttIHJlYXNvbmFibHkgc3VyZSwgYnV0IEkgbmVlZCB0byBjb25maXJtIHRoaXMuIEJlc3QgdG8gZG91YmxlLWNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBmaWxlX3NldHhhdHRyYCBqdXN0IHRvIGJlIGNvbXBsZXRlbHkgY2VydGFpbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBleHRlbmRlZCBhdHRyaWJ1dGUgc2V0dGluZyBpcyBnb2luZyB0byB3b3JrIHdpdGggYW4gYE9fUEFUSGAgZGVzY3JpcHRvciBiZWZvcmUgSSBjYW4gYmUgY29uZmlkZW50IHRoYXQgdGhpcyBjb2RlIGZ1bmN0aW9ucyBhcyBpbnRlbmRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMTY6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW50IGZpbGVfc2V0eGF0dHImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvaW50ZXJuYWwuaD0yOTQ9c3NpemVfdCBmaWxlbmFtZV9nZXR4YXR0cihpbnQgZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKmZpbGVuYW1lLFxuZnMvaW50ZXJuYWwuaC0yOTUtXHRcdFx0ICB1bnNpZ25lZCBpbnQgbG9va3VwX2ZsYWdzLCBzdHJ1Y3Qga2VybmVsX3hhdHRyX2N0eCAqY3R4KTtcbmZzL2ludGVybmFsLmg6Mjk2OmludCBmaWxlX3NldHhhdHRyKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qga2VybmVsX3hhdHRyX2N0eCAqY3R4KTtcbmZzL2ludGVybmFsLmgtMjk3LWludCBmaWxlbmFtZV9zZXR4YXR0cihpbnQgZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKmZpbGVuYW1lLFxuLS1cbmZzL3hhdHRyLmM9NjU1PXN0YXRpYyBpbnQgZG9fc2V0eGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi0tXG5mcy94YXR0ci5jLTY2NS1cbmZzL3hhdHRyLmM6NjY2OmludCBmaWxlX3NldHhhdHRyKHN0cnVjdCBmaWxlICpmLCBzdHJ1Y3Qga2VybmVsX3hhdHRyX2N0eCAqY3R4KVxuZnMveGF0dHIuYy02Njcte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNjo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NjY4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyB0aGUgYGZpbGVfc2V0eGF0dHJgIEZ1bmN0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBUaGUgdGFzayBpcyB0byBleGFtaW5lIHRoZSBgZmlsZV9zZXR4YXR0cmAgZnVuY3Rpb24sIHByZXN1bWFibHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIHNvbWUgbGFyZ2VyIHN5c3RlbSwgbGlrZWx5IGEgZmlsZSBzeXN0ZW0gb3Iga2VybmVsIG1vZHVsZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoYXQmIzM5O3MgdGhlIGJyb2FkZXIgcHVycG9zZT8gSXMgdGhpcyByZWxhdGVkIHRvIGV4dGVuZGVkIGF0dHJpYnV0ZXMgaW4gYSBtb3JlIGdlbmVyYWwgc2Vuc2UsIG9yIGlzIHRoaXMgYSBwYXJ0aWN1bGFyIGltcGxlbWVudGF0aW9uIGZvciBhIHNwZWNpZmljIGZpbGUgc3lzdGVtIGxpa2UgZXh0NCwgWEZTLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gS25vd2luZyB0aGUgdGFyZ2V0IHdvdWxkIGdpdmUgY3J1Y2lhbCBjb250ZXh0LgoKTmV4dCwgSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgaW1wbGVtZW50YXRpb24gZGV0YWlscy4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBmb2N1cyBvbiBlcnJvciBoYW5kbGluZy4gRXh0ZW5kZWQgYXR0cmlidXRlcyBjYW4gYmUgdHJpY2t5IHRvIG1hbmFnZTsgSSYjMzk7bGwgd2FudCB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyB2YXJpb3VzIGVycm9yIGNhc2VzLCBsaWtlIHBlcm1pc3Npb25zIGlzc3VlcywgaW5zdWZmaWNpZW50IHNwYWNlIGZvciB0aGUgYXR0cmlidXRlLCBvciBpbnZhbGlkIGF0dHJpYnV0ZSBuYW1lcyBvciB2YWx1ZXMuIFNlY3VyaXR5IGlzIGEgcGFyYW1vdW50IGNvbmNlcm4gd2l0aCB4YXR0cnMsIHNvIEkmIzM5O2xsIG1ldGljdWxvdXNseSBzY3J1dGluaXplIHRoZSBjb2RlIGZvciBhbnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcywgbGlrZSByYWNlIGNvbmRpdGlvbnMgdGhhdCBjb3VsZCBsZWFkIHRvIFRPQ1RPVSBidWdzLgoKQWxzbywgZGF0YSBjb25zaXN0ZW5jeSB3aWxsIGJlIHZlcnkgaW1wb3J0YW50LiBJZiB0aGUgZnVuY3Rpb24gZmFpbHMgcGFydHdheSB0aHJvdWdoIHNldHRpbmcgYW4geGF0dHIsIGhvdyBkb2VzIGl0IG1haW50YWluIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIGZpbGVzeXN0ZW0/IEFyZSB0aGVyZSBzdWZmaWNpZW50IGpvdXJuYWxpbmcgb3IgYXRvbWljIG9wZXJhdGlvbnMgdG8gZW5zdXJlIHRoYXQgd2UgZG9uJiMzOTt0IGVuZCB1cCB3aXRoIHBhcnRpYWxseSB3cml0dGVuIGF0dHJpYnV0ZXMgb3IgaW5jb25zaXN0ZW50IG1ldGFkYXRhPyBQZXJmb3JtYW5jZSB3aWxsIGJlIGFub3RoZXIgYXNwZWN0IEkgd2lsbCBsb29rIGludG8uIFNpbmNlIGl0IGlzIGJlaW5nIGNhbGxlZCB0byBkbyB0aGlzIG9wZXJhdGlvbiwgaXMgdGhlIHNldHRpbmcgb2YgZXh0ZW5kZWQgYXR0cmlidXRlcyBjYXVzaW5nIGEgcGVyZm9ybWFuY2UgYm90dGxlbmVjaz8KCkZpbmFsbHksIGhvdyBkb2VzIGl0IGludGVyYWN0IHdpdGggb3RoZXIgY29tcG9uZW50cz8gRG9lcyBpdCBjYWxsIGludG8gYW55IG90aGVyIGludGVybmFsIGZ1bmN0aW9ucyBvciBzeXN0ZW0gY2FsbHM/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGRlYWRsb2NrcyBvciBjb25jdXJyZW5jeSBpc3N1ZXMgdGhhdCBuZWVkIHRvIGJlIGFkZHJlc3NlZD8gQW55IGRvY3VtZW50YXRpb24gb3IgY29tbWVudHMgaW4gdGhlIGNvZGUgaXRzZWxmLCBkZXNjcmliaW5nIHRoZSBleHBlY3RlZCBiZWhhdmlvciBhbmQgdXNhZ2Ugc2NlbmFyaW9zIHdpbGwgYmUgaGVscGZ1bCBhcyBJIGRpdmUgZGVlcGVyIGludG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE2OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMveGF0dHIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY2NiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjY2Olx0aW50IGZpbGVfc2V0eGF0dHIoc3RydWN0IGZpbGUgKmYsIHN0cnVjdCBrZXJuZWxfeGF0dHJfY3R4ICpjdHgpXG4gNjY3Olx0e1xuIDY2ODpcdFx0aW50IGVycm9yID0gbW50X3dhbnRfd3JpdGVfZmlsZShmKTtcbiA2Njk6XHRcbiA2NzA6XHRcdGlmICghZXJyb3IpIHtcbiA2NzE6XHRcdFx0YXVkaXRfZmlsZShmKTtcbiA2NzI6XHRcdFx0ZXJyb3IgPSBkb19zZXR4YXR0cihmaWxlX21udF9pZG1hcChmKSwgZi1cdTAwM2VmX3BhdGguZGVudHJ5LCBjdHgpO1xuIDY3MzpcdFx0XHRtbnRfZHJvcF93cml0ZV9maWxlKGYpO1xuIDY3NDpcdFx0fVxuIDY3NTpcdFx0cmV0dXJuIGVycm9yO1xuIDY3NjpcdH1cbiA2Nzc6XHRcbiA2Nzg6XHRpbnQgZmlsZW5hbWVfc2V0eGF0dHIoaW50IGRmZCwgc3RydWN0IGZpbGVuYW1lICpmaWxlbmFtZSxcbiA2Nzk6XHRcdFx0ICAgICAgdW5zaWduZWQgaW50IGxvb2t1cF9mbGFncywgc3RydWN0IGtlcm5lbF94YXR0cl9jdHggKmN0eClcbiA2ODA6XHR7XG4gNjgxOlx0XHRzdHJ1Y3QgcGF0aCBwYXRoO1xuIDY4MjpcdFx0aW50IGVycm9yO1xuIDY4MzpcdFxuIDY4NDpcdHJldHJ5OlxuIDY4NTpcdFx0ZXJyb3IgPSBmaWxlbmFtZV9sb29rdXAoZGZkLCBmaWxlbmFtZSwgbG9va3VwX2ZsYWdzLCBcdTAwMjZwYXRoLCBOVUxMKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMTY6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQwMgoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDEwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgV3JpdGUgUGVybWlzc2lvbnMgd2l0aCBPX1BBVEggRmlsZSBEZXNjcmlwdG9ycyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYG1udF93YW50X3dyaXRlX2ZpbGUoZilgLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIHRoYXQgcG9wcyBpbnRvIG15IGhlYWQgaXMsIGRvZXMgdGhpcyBmdW5jdGlvbiBiZWhhdmUgY29ycmVjdGx5IHdoZW4gZGVhbGluZyB3aXRoIGZpbGUgZGVzY3JpcHRvcnMgb3BlbmVkIHdpdGggYE9fUEFUSGA/IEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgdGhpcyBpcyBoYW5kbGVkIHByb3Blcmx5LiBOb3csIGlmIGBmYCAqaXMqIGFuIGBPX1BBVEhgIGRlc2NyaXB0b3IsIHRoZW4gSSBrbm93IHRoYXQgYGZpbGVfbW50X2lkbWFwKGYpYCBhbmQgYGYtJmd0O2ZfcGF0aC5kZW50cnlgIGFyZSB2YWxpZCBhbmQgYWNjZXNzaWJsZS4gQnV0LCBzdGlsbCwgSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBgbW50X3dhbnRfd3JpdGVfZmlsZWAgaXRzZWxmIGhhcyBhbnkgaGlkZGVuIGlzc3VlcyBvciBhc3N1bXB0aW9ucyB0aGF0IG1pZ2h0IGNhdXNlIGEgcHJvYmxlbSBzcGVjaWZpY2FsbHkgd2l0aCBgT19QQVRIYCBkZXNjcmlwdG9ycy4gVGhlIHNhZmVzdCBwYXRoIGlzIHRvIGdvIGFoZWFkIGFuZCBkaXZlIGludG8gdGhlIHNvdXJjZSBjb2RlIGZvciBgbW50X3dhbnRfd3JpdGVfZmlsZWAgZGlyZWN0bHkuIFRpbWUgdG8gc2NydXRpbml6ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMTY6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW50X3dhbnRfd3JpdGVfZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNTU5IGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvcnRpbmcucnN0PTg4Mz1iZWVuIGNhbGxlZCBvciByZXR1cm5lZCB3aXRoIG5vbiAtRUlPQ0JRVUVVRUQgY29kZS5cbi0tXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvcnRpbmcucnN0LTg4OC1cbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3Q6ODg5Om1udF93YW50X3dyaXRlX2ZpbGUoKSBjYW4gbm93IG9ubHkgYmUgcGFpcmVkIHdpdGggbW50X2Ryb3Bfd3JpdGVfZmlsZSgpLFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nLnJzdC04OTAtd2hlcmVhcyBwcmV2aW91c2x5IGl0IGNvdWxkIGJlIHBhaXJlZCB3aXRoIG1udF9kcm9wX3dyaXRlKCkgYXMgd2VsbC5cbi0tXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3hmcy94ZnMtb25saW5lLWZzY2stZGVzaWduLnJzdD0zMjA2PXRvIGF2b2lkIGRlYWRsb2Nrczpcbi0tXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3hmcy94ZnMtb25saW5lLWZzY2stZGVzaWduLnJzdC0zMjA5LVxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy94ZnMveGZzLW9ubGluZS1mc2NrLWRlc2lnbi5yc3Q6MzIxMDoyLiBGaWxlc3lzdGVtIGZyZWV6ZSBwcm90ZWN0aW9uLCBpZiByZXBhaXJpbmcgKGBgbW50X3dhbnRfd3JpdGVfZmlsZWBgKS5cbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMveGZzL3hmcy1vbmxpbmUtZnNjay1kZXNpZ24ucnN0LTMyMTEtXG4tLVxuZnMvYnRyZnMvaW9jdGwuYz05ODU9c3RhdGljIG5vaW5saW5lIGludCBidHJmc19pb2N0bF9yZXNpemUoc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxuZnMvYnRyZnMvaW9jdGwuYy0xMDA0LVxuZnMvYnRyZnMvaW9jdGwuYzoxMDA1Olx0cmV0ID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxlKTtcbmZzL2J0cmZzL2lvY3RsLmMtMTAwNi1cdGlmIChyZXQpXG4tLVxuZnMvYnRyZnMvaW9jdGwuYz0xMTM4PXN0YXRpYyBub2lubGluZSBpbnQgX19idHJmc19pb2N0bF9zbmFwX2NyZWF0ZShzdHJ1Y3QgZmlsZSAqZmlsZSxcbi0tXG5mcy9idHJmcy9pb2N0bC5jLTExNDktXG5mcy9idHJmcy9pb2N0bC5jOjExNTA6XHRyZXQgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbGUpO1xuZnMvYnRyZnMvaW9jdGwuYy0xMTUxLVx0aWYgKHJldClcbi0tXG5mcy9idHJmcy9pb2N0bC5jPTEyOTQ9c3RhdGljIG5vaW5saW5lIGludCBidHJmc19pb2N0bF9zdWJ2b2xfc2V0ZmxhZ3Moc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxuZnMvYnRyZnMvaW9jdGwuYy0xMzA3LVxuZnMvYnRyZnMvaW9jdGwuYzoxMzA4Olx0cmV0ID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxlKTtcbmZzL2J0cmZzL2lvY3RsLmMtMTMwOS1cdGlmIChyZXQpXG4tLVxuZnMvYnRyZnMvaW9jdGwuYz0yMjE3PXN0YXRpYyBub2lubGluZSBpbnQgYnRyZnNfaW9jdGxfc25hcF9kZXN0cm95KHN0cnVjdCBmaWxlICpmaWxlLFxuLS1cbmZzL2J0cmZzL2lvY3RsLmMtMjI1OS1cbmZzL2J0cmZzL2lvY3RsLmM6MjI2MDpcdFx0XHRyZXQgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbGUpO1xuZnMvYnRyZnMvaW9jdGwuYy0yMjYxLVx0XHRcdGlmIChyZXQpXG4tLVxuZnMvYnRyZnMvaW9jdGwuYy0yMjY4LVxuZnMvYnRyZnMvaW9jdGwuYzoyMjY5Olx0XHRcdHJldCA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlsZSk7XG5mcy9idHJmcy9pb2N0bC5jLTIyNzAtXHRcdFx0aWYgKHJldClcbi0tXG5mcy9idHJmcy9pb2N0bC5jLTIzNDQtXG5mcy9idHJmcy9pb2N0bC5jOjIzNDU6XHRcdHJldCA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlsZSk7XG5mcy9idHJmcy9pb2N0bC5jLTIzNDYtXHRcdGlmIChyZXQpXG4tLVxuZnMvYnRyZnMvaW9jdGwuYz0yNDMxPXN0YXRpYyBpbnQgYnRyZnNfaW9jdGxfZGVmcmFnKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkIF9fdXNlciAqYXJncClcbi0tXG5mcy9idHJmcy9pb2N0bC5jLTI0MzctXG5mcy9idHJmcy9pb2N0bC5jOjI0Mzg6XHRyZXQgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbGUpO1xuZnMvYnRyZnMvaW9jdGwuYy0yNDM5LVx0aWYgKHJldClcbi0tXG5mcy9idHJmcy9pb2N0bC5jPTI1NzA9c3RhdGljIGxvbmcgYnRyZnNfaW9jdGxfcm1fZGV2X3YyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkIF9fdXNlciAqYXJnKVxuLS1cbmZzL2J0cmZzL2lvY3RsLmMtMjYwNS1cbmZzL2J0cmZzL2lvY3RsLmM6MjYwNjpcdHJldCA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlsZSk7XG5mcy9idHJmcy9pb2N0bC5jLTI2MDctXHRpZiAocmV0KVxuLS1cbmZzL2J0cmZzL2lvY3RsLmM9MjYzNz1zdGF0aWMgbG9uZyBidHJmc19pb2N0bF9ybV9kZXYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgX191c2VyICphcmcpXG4tLVxuZnMvYnRyZnMvaW9jdGwuYy0yNjY1LVxuZnMvYnRyZnMvaW9jdGwuYzoyNjY2Olx0cmV0ID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxlKTtcbmZzL2J0cmZzL2lvY3RsLmMtMjY2Ny1cdGlmIChyZXQpXG4tLVxuZnMvYnRyZnMvaW9jdGwuYz0yNzgwPXN0YXRpYyBsb25nIGJ0cmZzX2lvY3RsX2RlZmF1bHRfc3Vidm9sKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkIF9fdXNlciAqYXJncClcbi0tXG5mcy9idHJmcy9pb2N0bC5jLTI3OTctXG5mcy9idHJmcy9pb2N0bC5jOjI3OTg6XHRyZXQgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbGUpO1xuZnMvYnRyZnMvaW9jdGwuYy0yNzk5LVx0aWYgKHJldClcbi0tXG5mcy9idHJmcy9pb2N0bC5jPTMwNTg9c3RhdGljIGxvbmcgYnRyZnNfaW9jdGxfc2NydWIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgX191c2VyICphcmcpXG4tLVxuZnMvYnRyZnMvaW9jdGwuYy0zMDc5LVx0aWYgKCEoc2EtXHUwMDNlZmxhZ3MgXHUwMDI2IEJUUkZTX1NDUlVCX1JFQURPTkxZKSkge1xuZnMvYnRyZnMvaW9jdGwuYzozMDgwOlx0XHRyZXQgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbGUpO1xuZnMvYnRyZnMvaW9jdGwuYy0zMDgxLVx0XHRpZiAocmV0KVxuLS1cbmZzL2J0cmZzL2lvY3RsLmM9MzQwNj1zdGF0aWMgbG9uZyBidHJmc19pb2N0bF9iYWxhbmNlKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkIF9fdXNlciAqYXJnKVxuLS1cbmZzL2J0cmZzL2lvY3RsLmMtMzQxNy1cbmZzL2J0cmZzL2lvY3RsLmM6MzQxODpcdHJldCA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlsZSk7XG5mcy9idHJmcy9pb2N0bC5jLTM0MTktXHRpZiAocmV0KVxuLS1cbmZzL2J0cmZzL2lvY3RsLmM9MzU0Mz1zdGF0aWMgbG9uZyBidHJmc19pb2N0bF9xdW90YV9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgX191c2VyICphcmcpXG4tLVxuZnMvYnRyZnMvaW9jdGwuYy0zNTUyLVxuZnMvYnRyZnMvaW9jdGwuYzozNTUzOlx0cmV0ID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxlKTtcbmZzL2J0cmZzL2lvY3RsLmMtMzU1NC1cdGlmIChyZXQpXG4tLVxuZnMvYnRyZnMvaW9jdGwuYz0zNjExPXN0YXRpYyBsb25nIGJ0cmZzX2lvY3RsX3Fncm91cF9hc3NpZ24oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgX191c2VyICphcmcpXG4tLVxuZnMvYnRyZnMvaW9jdGwuYy0zNjI3LVxuZnMvYnRyZnMvaW9jdGwuYzozNjI4Olx0cmV0ID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxlKTtcbmZzL2J0cmZzL2lvY3RsLmMtMzYyOS1cdGlmIChyZXQpXG4tLVxuZnMvYnRyZnMvaW9jdGwuYz0zNjgxPXN0YXRpYyBsb25nIGJ0cmZzX2lvY3RsX3Fncm91cF9jcmVhdGUoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgX191c2VyICphcmcpXG4tLVxuZnMvYnRyZnMvaW9jdGwuYy0zNjk1LVxuZnMvYnRyZnMvaW9jdGwuYzozNjk2Olx0cmV0ID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxlKTtcbmZzL2J0cmZzL2lvY3RsLmMtMzY5Ny1cdGlmIChyZXQpXG4tLVxuZnMvYnRyZnMvaW9jdGwuYz0zNzQxPXN0YXRpYyBsb25nIGJ0cmZzX2lvY3RsX3Fncm91cF9saW1pdChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCBfX3VzZXIgKmFyZylcbi0tXG5mcy9idHJmcy9pb2N0bC5jLTM3NTYtXG5mcy9idHJmcy9pb2N0bC5jOjM3NTc6XHRyZXQgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbGUpO1xuZnMvYnRyZnMvaW9jdGwuYy0zNzU4LVx0aWYgKHJldClcbi0tXG5mcy9idHJmcy9pb2N0bC5jPTM3OTE9c3RhdGljIGxvbmcgYnRyZnNfaW9jdGxfcXVvdGFfcmVzY2FuKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkIF9fdXNlciAqYXJnKVxuLS1cbmZzL2J0cmZzL2lvY3RsLmMtMzgwMy1cbmZzL2J0cmZzL2lvY3RsLmM6MzgwNDpcdHJldCA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlsZSk7XG5mcy9idHJmcy9pb2N0bC5jLTM4MDUtXHRpZiAocmV0KVxuLS1cbmZzL2J0cmZzL2lvY3RsLmM9Mzg1Mz1zdGF0aWMgbG9uZyBfYnRyZnNfaW9jdGxfc2V0X3JlY2VpdmVkX3N1YnZvbChzdHJ1Y3QgZmlsZSAqZmlsZSxcbi0tXG5mcy9idHJmcy9pb2N0bC5jLTM4NjgtXG5mcy9idHJmcy9pb2N0bC5jOjM4Njk6XHRyZXQgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbGUpO1xuZnMvYnRyZnMvaW9jdGwuYy0zODcwLVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5mcy9idHJmcy9pb2N0bC5jPTQwNTI9c3RhdGljIGludCBidHJmc19pb2N0bF9zZXRfZnNsYWJlbChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCBfX3VzZXIgKmFyZylcbi0tXG5mcy9idHJmcy9pb2N0bC5jLTQwNzQtXG5mcy9idHJmcy9pb2N0bC5jOjQwNzU6XHRyZXQgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbGUpO1xuZnMvYnRyZnMvaW9jdGwuYy00MDc2LVx0aWYgKHJldClcbi0tXG5mcy9idHJmcy9pb2N0bC5jPTQxOTI9c3RhdGljIGludCBidHJmc19pb2N0bF9zZXRfZmVhdHVyZXMoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgX191c2VyICphcmcpXG4tLVxuZnMvYnRyZnMvaW9jdGwuYy00MjI4LVxuZnMvYnRyZnMvaW9jdGwuYzo0MjI5Olx0cmV0ID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxlKTtcbmZzL2J0cmZzL2lvY3RsLmMtNDIzMC1cdGlmIChyZXQpXG4tLVxuZnMvY2FjaGVmaWxlcy94YXR0ci5jPTM5PWludCBjYWNoZWZpbGVzX3NldF9vYmplY3RfeGF0dHIoc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0ICpvYmplY3QpXG4tLVxuZnMvY2FjaGVmaWxlcy94YXR0ci5jLTY3LVx0aWYgKHJldCA9PSAwKSB7XG5mcy9jYWNoZWZpbGVzL3hhdHRyLmM6Njg6XHRcdHJldCA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlsZSk7XG5mcy9jYWNoZWZpbGVzL3hhdHRyLmMtNjktXHRcdGlmIChyZXQgPT0gMCkge1xuLS1cbmZzL2NyeXB0by9wb2xpY3kuYz01MDU9aW50IGZzY3J5cHRfaW9jdGxfc2V0X3BvbGljeShzdHJ1Y3QgZmlsZSAqZmlscCwgY29uc3Qgdm9pZCBfX3VzZXIgKmFyZylcbi0tXG5mcy9jcnlwdG8vcG9saWN5LmMtNTM5LVxuZnMvY3J5cHRvL3BvbGljeS5jOjU0MDpcdHJldCA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlscCk7XG5mcy9jcnlwdG8vcG9saWN5LmMtNTQxLVx0aWYgKHJldClcbi0tXG5mcy9leGZhdC9maWxlLmM9NDQ1PXN0YXRpYyBpbnQgZXhmYXRfaW9jdGxfc2V0X2F0dHJpYnV0ZXMoc3RydWN0IGZpbGUgKmZpbGUsIHUzMiBfX3VzZXIgKnVzZXJfYXR0cilcbi0tXG5mcy9leGZhdC9maWxlLmMtNDU3LVxuZnMvZXhmYXQvZmlsZS5jOjQ1ODpcdGVyciA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlsZSk7XG5mcy9leGZhdC9maWxlLmMtNDU5LVx0aWYgKGVycilcbi0tXG5mcy9leHQyL2lvY3RsLmM9NTQ9bG9uZyBleHQyX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5mcy9leHQyL2lvY3RsLmMtNzAtXHRcdFx0cmV0dXJuIC1FUEVSTTtcbmZzL2V4dDIvaW9jdGwuYzo3MTpcdFx0cmV0ID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxwKTtcbmZzL2V4dDIvaW9jdGwuYy03Mi1cdFx0aWYgKHJldClcbi0tXG5mcy9leHQyL2lvY3RsLmMtMTA3LVxuZnMvZXh0Mi9pb2N0bC5jOjEwODpcdFx0cmV0ID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxwKTtcbmZzL2V4dDIvaW9jdGwuYy0xMDktXHRcdGlmIChyZXQpXG4tLVxuZnMvZXh0NC9jcnlwdG8uYz04Mz1pbnQgZXh0NF9pb2N0bF9nZXRfZW5jcnlwdGlvbl9wd3NhbHQoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgX191c2VyICphcmcpXG4tLVxuZnMvZXh0NC9jcnlwdG8uYy05My1cdGlmICh1dWlkX2lzX3plcm8oc2JpLVx1MDAzZXNfZXMtXHUwMDNlc19lbmNyeXB0X3B3X3NhbHQpKSB7XG5mcy9leHQ0L2NyeXB0by5jOjk0Olx0XHRlcnIgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbHApO1xuZnMvZXh0NC9jcnlwdG8uYy05NS1cdFx0aWYgKGVycilcbi0tXG5mcy9leHQ0L2lvY3RsLmM9OTU0PXN0YXRpYyBsb25nIGV4dDRfaW9jdGxfZ3JvdXBfYWRkKHN0cnVjdCBmaWxlICpmaWxlLFxuLS1cbmZzL2V4dDQvaW9jdGwuYy05NzAtXG5mcy9leHQ0L2lvY3RsLmM6OTcxOlx0ZXJyID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxlKTtcbmZzL2V4dDQvaW9jdGwuYy05NzItXHRpZiAoZXJyKVxuLS1cbmZzL2V4dDQvaW9jdGwuYz0xMTE3PXN0YXRpYyBpbnQgZXh0NF9pb2N0bF9zZXRsYWJlbChzdHJ1Y3QgZmlsZSAqZmlscCwgY29uc3QgY2hhciBfX3VzZXIgKnVzZXJfbGFiZWwpXG4tLVxuZnMvZXh0NC9pb2N0bC5jLTExNDMtXG5mcy9leHQ0L2lvY3RsLmM6MTE0NDpcdHJldCA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlscCk7XG5mcy9leHQ0L2lvY3RsLmMtMTE0NS1cdGlmIChyZXQpXG4tLVxuZnMvZXh0NC9pb2N0bC5jPTEyMDU9c3RhdGljIGludCBleHQ0X2lvY3RsX3NldHV1aWQoc3RydWN0IGZpbGUgKmZpbHAsXG4tLVxuZnMvZXh0NC9pb2N0bC5jLTEyMzQtXG5mcy9leHQ0L2lvY3RsLmM6MTIzNTpcdHJldCA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlscCk7XG5mcy9leHQ0L2lvY3RsLmMtMTIzNi1cdGlmIChyZXQpXG4tLVxuZnMvZXh0NC9pb2N0bC5jPTEzOTA9c3RhdGljIGludCBleHQ0X2lvY3RsX3NldF90dW5lX3NiKHN0cnVjdCBmaWxlICpmaWxwLFxuLS1cbmZzL2V4dDQvaW9jdGwuYy0xNTI0LVxuZnMvZXh0NC9pb2N0bC5jOjE1MjU6XHRyZXQgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbHApO1xuZnMvZXh0NC9pb2N0bC5jLTE1MjYtXHRpZiAocmV0KVxuLS1cbmZzL2V4dDQvaW9jdGwuYz0xNTM4PXN0YXRpYyBsb25nIF9fZXh0NF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuZnMvZXh0NC9pb2N0bC5jLTE1NjctXG5mcy9leHQ0L2lvY3RsLmM6MTU2ODpcdFx0ZXJyID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxwKTtcbmZzL2V4dDQvaW9jdGwuYy0xNTY5LVx0XHRpZiAoZXJyKVxuLS1cbmZzL2V4dDQvaW9jdGwuYy0xNjE2LVxuZnMvZXh0NC9pb2N0bC5jOjE2MTc6XHRcdGVyciA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlscCk7XG5mcy9leHQ0L2lvY3RsLmMtMTYxOC1cdFx0aWYgKGVycilcbi0tXG5mcy9leHQ0L2lvY3RsLmMtMTY2MS1cbmZzL2V4dDQvaW9jdGwuYzoxNjYyOlx0XHRlcnIgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbHApO1xuZnMvZXh0NC9pb2N0bC5jLTE2NjMtXHRcdGlmIChlcnIpXG4tLVxuZnMvZXh0NC9pb2N0bC5jLTE2OTEtXG5mcy9leHQ0L2lvY3RsLmM6MTY5MjpcdFx0ZXJyID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxwKTtcbmZzL2V4dDQvaW9jdGwuYy0xNjkzLVx0XHRpZiAoZXJyKVxuLS1cbmZzL2V4dDQvaW9jdGwuYy0xNzEzLVxuZnMvZXh0NC9pb2N0bC5jOjE3MTQ6XHRcdGVyciA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlscCk7XG5mcy9leHQ0L2lvY3RsLmMtMTcxNS1cdFx0aWYgKGVycilcbi0tXG5mcy9leHQ0L2lvY3RsLmMtMTcyNi1cdFx0XHRyZXR1cm4gLUVCQURGO1xuZnMvZXh0NC9pb2N0bC5jOjE3Mjc6XHRcdGVyciA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlscCk7XG5mcy9leHQ0L2lvY3RsLmMtMTcyOC1cdFx0aWYgKGVycilcbi0tXG5mcy9leHQ0L2lvY3RsLmMtMTc0OC1cbmZzL2V4dDQvaW9jdGwuYzoxNzQ5Olx0XHRlcnIgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbHApO1xuZnMvZXh0NC9pb2N0bC5jLTE3NTAtXHRcdGlmIChlcnIpXG4tLVxuZnMvZjJmcy9maWxlLmM9MjI3OT1zdGF0aWMgaW50IGYyZnNfaW9jX3N0YXJ0X2F0b21pY193cml0ZShzdHJ1Y3QgZmlsZSAqZmlscCwgYm9vbCB0cnVuY2F0ZSlcbi0tXG5mcy9mMmZzL2ZpbGUuYy0yMjk5LVxuZnMvZjJmcy9maWxlLmM6MjMwMDpcdHJldCA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlscCk7XG5mcy9mMmZzL2ZpbGUuYy0yMzAxLVx0aWYgKHJldClcbi0tXG5mcy9mMmZzL2ZpbGUuYz0yMzkxPXN0YXRpYyBpbnQgZjJmc19pb2NfY29tbWl0X2F0b21pY193cml0ZShzdHJ1Y3QgZmlsZSAqZmlscClcbi0tXG5mcy9mMmZzL2ZpbGUuYy0yNDAyLVxuZnMvZjJmcy9maWxlLmM6MjQwMzpcdHJldCA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlscCk7XG5mcy9mMmZzL2ZpbGUuYy0yNDA0LVx0aWYgKHJldClcbi0tXG5mcy9mMmZzL2ZpbGUuYz0yNDI2PXN0YXRpYyBpbnQgZjJmc19pb2NfYWJvcnRfYXRvbWljX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxwKVxuLS1cbmZzL2YyZnMvZmlsZS5jLTI0MzctXG5mcy9mMmZzL2ZpbGUuYzoyNDM4Olx0cmV0ID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxwKTtcbmZzL2YyZnMvZmlsZS5jLTI0MzktXHRpZiAocmV0KVxuLS1cbmZzL2YyZnMvZmlsZS5jPTI1MjU9c3RhdGljIGludCBmMmZzX2lvY19zaHV0ZG93bihzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuZnMvZjJmcy9maWxlLmMtMjUzOS1cdGlmIChpbiAhPSBGMkZTX0dPSU5HX0RPV05fRlVMTFNZTkMpIHtcbmZzL2YyZnMvZmlsZS5jOjI1NDA6XHRcdHJldCA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlscCk7XG5mcy9mMmZzL2ZpbGUuYy0yNTQxLVx0XHRpZiAocmV0KSB7XG4tLVxuZnMvZjJmcy9maWxlLmM9MjYxNj1zdGF0aWMgaW50IGYyZnNfaW9jX2ZpdHJpbShzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuZnMvZjJmcy9maWxlLmMtMjYzMi1cbmZzL2YyZnMvZmlsZS5jOjI2MzM6XHRyZXQgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbHApO1xuZnMvZjJmcy9maWxlLmMtMjYzNC1cdGlmIChyZXQpXG4tLVxuZnMvZjJmcy9maWxlLmM9MjY4MT1zdGF0aWMgaW50IGYyZnNfaW9jX2dldF9lbmNyeXB0aW9uX3B3c2FsdChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuZnMvZjJmcy9maWxlLmMtMjY5MC1cbmZzL2YyZnMvZmlsZS5jOjI2OTE6XHRlcnIgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbHApO1xuZnMvZjJmcy9maWxlLmMtMjY5Mi1cdGlmIChlcnIpXG4tLVxuZnMvZjJmcy9maWxlLmM9Mjc3Mj1zdGF0aWMgaW50IGYyZnNfaW9jX2djKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5mcy9mMmZzL2ZpbGUuYy0yNzkxLVxuZnMvZjJmcy9maWxlLmM6Mjc5MjpcdHJldCA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlscCk7XG5mcy9mMmZzL2ZpbGUuYy0yNzkzLVx0aWYgKHJldClcbi0tXG5mcy9mMmZzL2ZpbGUuYz0yODE1PXN0YXRpYyBpbnQgX19mMmZzX2lvY19nY19yYW5nZShzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGYyZnNfZ2NfcmFuZ2UgKnJhbmdlKVxuLS1cbmZzL2YyZnMvZmlsZS5jLTI4MzYtXG5mcy9mMmZzL2ZpbGUuYzoyODM3Olx0cmV0ID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxwKTtcbmZzL2YyZnMvZmlsZS5jLTI4MzgtXHRpZiAocmV0KVxuLS1cbmZzL2YyZnMvZmlsZS5jPTI4Nzc9c3RhdGljIGludCBmMmZzX2lvY193cml0ZV9jaGVja3BvaW50KHN0cnVjdCBmaWxlICpmaWxwKVxuLS1cbmZzL2YyZnMvZmlsZS5jLTI4OTMtXG5mcy9mMmZzL2ZpbGUuYzoyODk0Olx0cmV0ID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxwKTtcbmZzL2YyZnMvZmlsZS5jLTI4OTUtXHRpZiAocmV0KVxuLS1cbmZzL2YyZnMvZmlsZS5jPTMwNzA9c3RhdGljIGludCBmMmZzX2lvY19kZWZyYWdtZW50KHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5mcy9mMmZzL2ZpbGUuYy0zMDk3LVxuZnMvZjJmcy9maWxlLmM6MzA5ODpcdGVyciA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlscCk7XG5mcy9mMmZzL2ZpbGUuYy0zMDk5LVx0aWYgKGVycilcbi0tXG5mcy9mMmZzL2ZpbGUuYz0zMjU1PXN0YXRpYyBpbnQgX19mMmZzX2lvY19tb3ZlX3JhbmdlKHN0cnVjdCBmaWxlICpmaWxwLFxuLS1cbmZzL2YyZnMvZmlsZS5jLTMyNzAtXG5mcy9mMmZzL2ZpbGUuYzozMjcxOlx0ZXJyID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxwKTtcbmZzL2YyZnMvZmlsZS5jLTMyNzItXHRpZiAoZXJyKVxuLS1cbmZzL2YyZnMvZmlsZS5jPTMyOTI9c3RhdGljIGludCBmMmZzX2lvY19mbHVzaF9kZXZpY2Uoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmZzL2YyZnMvZmlsZS5jLTMzMjYtXG5mcy9mMmZzL2ZpbGUuYzozMzI3Olx0cmV0ID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxwKTtcbmZzL2YyZnMvZmlsZS5jLTMzMjgtXHRpZiAocmV0KVxuLS1cbmZzL2YyZnMvZmlsZS5jPTM1Mjk9c3RhdGljIGludCBmMmZzX2lvY19zZXRfcGluX2ZpbGUoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmZzL2YyZnMvZmlsZS5jLTM1NDctXG5mcy9mMmZzL2ZpbGUuYzozNTQ4Olx0cmV0ID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxwKTtcbmZzL2YyZnMvZmlsZS5jLTM1NDktXHRpZiAocmV0KVxuLS1cbmZzL2YyZnMvZmlsZS5jPTM3NTE9c3RhdGljIGludCBmMmZzX2lvY19zZXRmc2xhYmVsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5mcy9mMmZzL2ZpbGUuYy0zNzY0LVxuZnMvZjJmcy9maWxlLmM6Mzc2NTpcdGVyciA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlscCk7XG5mcy9mMmZzL2ZpbGUuYy0zNzY2LVx0aWYgKGVycilcbi0tXG5mcy9mMmZzL2ZpbGUuYz0zODY2PXN0YXRpYyBpbnQgZjJmc19yZWxlYXNlX2NvbXByZXNzX2Jsb2NrcyhzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuZnMvZjJmcy9maWxlLmMtMzg4Mi1cbmZzL2YyZnMvZmlsZS5jOjM4ODM6XHRyZXQgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbHApO1xuZnMvZjJmcy9maWxlLmMtMzg4NC1cdGlmIChyZXQpXG4tLVxuZnMvZjJmcy9maWxlLmM9NDA2Mz1zdGF0aWMgaW50IGYyZnNfcmVzZXJ2ZV9jb21wcmVzc19ibG9ja3Moc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmZzL2YyZnMvZmlsZS5jLTQwNzctXG5mcy9mMmZzL2ZpbGUuYzo0MDc4Olx0cmV0ID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxwKTtcbmZzL2YyZnMvZmlsZS5jLTQwNzktXHRpZiAocmV0KVxuLS1cbmZzL2YyZnMvZmlsZS5jPTQxOTU9c3RhdGljIGludCBmMmZzX3NlY190cmltX2ZpbGUoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmZzL2YyZnMvZmlsZS5jLTQyMjQtXG5mcy9mMmZzL2ZpbGUuYzo0MjI1Olx0cmV0ID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxwKTtcbmZzL2YyZnMvZmlsZS5jLTQyMjYtXHRpZiAocmV0KVxuLS1cbmZzL2YyZnMvZmlsZS5jPTQzODU9c3RhdGljIGludCBmMmZzX2lvY19zZXRfY29tcHJlc3Nfb3B0aW9uKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5mcy9mMmZzL2ZpbGUuYy00NDA3LVxuZnMvZjJmcy9maWxlLmM6NDQwODpcdHJldCA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlscCk7XG5mcy9mMmZzL2ZpbGUuYy00NDA5LVx0aWYgKHJldClcbi0tXG5mcy9mMmZzL2ZpbGUuYz00NDk0PXN0YXRpYyBpbnQgZjJmc19pb2NfZGVjb21wcmVzc19maWxlKHN0cnVjdCBmaWxlICpmaWxwKVxuLS1cbmZzL2YyZnMvZmlsZS5jLTQ1MTAtXG5mcy9mMmZzL2ZpbGUuYzo0NTExOlx0cmV0ID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxwKTtcbmZzL2YyZnMvZmlsZS5jLTQ1MTItXHRpZiAocmV0KVxuLS1cbmZzL2YyZnMvZmlsZS5jPTQ1NzU9c3RhdGljIGludCBmMmZzX2lvY19jb21wcmVzc19maWxlKHN0cnVjdCBmaWxlICpmaWxwKVxuLS1cbmZzL2YyZnMvZmlsZS5jLTQ1OTEtXG5mcy9mMmZzL2ZpbGUuYzo0NTkyOlx0cmV0ID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxwKTtcbmZzL2YyZnMvZmlsZS5jLTQ1OTMtXHRpZiAocmV0KVxuLS1cbmZzL2YyZnMvZ2MuYz0yMzE4PWludCBmMmZzX3Jlc2l6ZV9mcyhzdHJ1Y3QgZmlsZSAqZmlscCwgX191NjQgYmxvY2tfY291bnQpXG4tLVxuZnMvZjJmcy9nYy5jLTIzNjAtXG5mcy9mMmZzL2djLmM6MjM2MTpcdGVyciA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlscCk7XG5mcy9mMmZzL2djLmMtMjM2Mi1cdGlmIChlcnIpXG4tLVxuZnMvZmF0L2ZpbGUuYz0zNz1zdGF0aWMgaW50IGZhdF9pb2N0bF9zZXRfYXR0cmlidXRlcyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdTMyIF9fdXNlciAqdXNlcl9hdHRyKVxuLS1cbmZzL2ZhdC9maWxlLmMtNDktXG5mcy9mYXQvZmlsZS5jOjUwOlx0ZXJyID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxlKTtcbmZzL2ZhdC9maWxlLmMtNTEtXHRpZiAoZXJyKVxuLS1cbmZzL2ZpbGVfYXR0ci5jPTMyND1pbnQgaW9jdGxfc2V0ZmxhZ3Moc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBfX3VzZXIgKmFyZ3ApXG4tLVxuZnMvZmlsZV9hdHRyLmMtMzMzLVx0aWYgKCFlcnIpIHtcbmZzL2ZpbGVfYXR0ci5jOjMzNDpcdFx0ZXJyID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxlKTtcbmZzL2ZpbGVfYXR0ci5jLTMzNS1cdFx0aWYgKCFlcnIpIHtcbi0tXG5mcy9maWxlX2F0dHIuYz0zNTY9aW50IGlvY3RsX2Zzc2V0eGF0dHIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgX191c2VyICphcmdwKVxuLS1cbmZzL2ZpbGVfYXR0ci5jLTM2NC1cdGlmICghZXJyKSB7XG5mcy9maWxlX2F0dHIuYzozNjU6XHRcdGVyciA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlsZSk7XG5mcy9maWxlX2F0dHIuYy0zNjYtXHRcdGlmICghZXJyKSB7XG4tLVxuZnMvbmFtZXNwYWNlLmM9NTExPWludCBtbnRfZ2V0X3dyaXRlX2FjY2Vzc19maWxlKHN0cnVjdCBmaWxlICpmaWxlKVxuLS1cbmZzL25hbWVzcGFjZS5jLTUyNS0vKipcbmZzL25hbWVzcGFjZS5jOjUyNjogKiBtbnRfd2FudF93cml0ZV9maWxlIC0gZ2V0IHdyaXRlIGFjY2VzcyB0byBhIGZpbGUmIzM5O3MgbW91bnRcbmZzL25hbWVzcGFjZS5jLTUyNy0gKiBAZmlsZTogdGhlIGZpbGUgd2hvJiMzOTtzIG1vdW50IG9uIHdoaWNoIHRvIHRha2UgYSB3cml0ZVxuLS1cbmZzL25hbWVzcGFjZS5jLTUzMy0gKi9cbmZzL25hbWVzcGFjZS5jOjUzNDppbnQgbW50X3dhbnRfd3JpdGVfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSlcbmZzL25hbWVzcGFjZS5jLTUzNS17XG4tLVxuZnMvbmFtZXNwYWNlLmMtNTQzLX1cbmZzL25hbWVzcGFjZS5jOjU0NDpFWFBPUlRfU1lNQk9MX0dQTChtbnRfd2FudF93cml0ZV9maWxlKTtcbmZzL25hbWVzcGFjZS5jLTU0NS1cbi0tXG5mcy9uZnNkL25mczRyZWNvdmVyLmM9MTIzPW5mc2Q0X2NyZWF0ZV9jbGlkX2RpcihzdHJ1Y3QgbmZzNF9jbGllbnQgKmNscClcbi0tXG5mcy9uZnNkL25mczRyZWNvdmVyLmMtMTQxLVxuZnMvbmZzZC9uZnM0cmVjb3Zlci5jOjE0MjpcdHN0YXR1cyA9IG1udF93YW50X3dyaXRlX2ZpbGUobm4tXHUwMDNlcmVjX2ZpbGUpO1xuZnMvbmZzZC9uZnM0cmVjb3Zlci5jLTE0My1cdGlmIChzdGF0dXMpXG4tLVxuZnMvbmZzZC9uZnM0cmVjb3Zlci5jPTI5NT1uZnNkNF9yZW1vdmVfY2xpZF9kaXIoc3RydWN0IG5mczRfY2xpZW50ICpjbHApXG4tLVxuZnMvbmZzZC9uZnM0cmVjb3Zlci5jLTMwNi1cbmZzL25mc2QvbmZzNHJlY292ZXIuYzozMDc6XHRzdGF0dXMgPSBtbnRfd2FudF93cml0ZV9maWxlKG5uLVx1MDAzZXJlY19maWxlKTtcbmZzL25mc2QvbmZzNHJlY292ZXIuYy0zMDgtXHRpZiAoc3RhdHVzKVxuLS1cbmZzL25mc2QvbmZzNHJlY292ZXIuYz0zNzI9bmZzZDRfcmVjZGlyX3B1cmdlX29sZChzdHJ1Y3QgbmZzZF9uZXQgKm5uKVxuLS1cbmZzL25mc2QvbmZzNHJlY292ZXIuYy0zNzgtXHRcdHJldHVybjtcbmZzL25mc2QvbmZzNHJlY292ZXIuYzozNzk6XHRzdGF0dXMgPSBtbnRfd2FudF93cml0ZV9maWxlKG5uLVx1MDAzZXJlY19maWxlKTtcbmZzL25mc2QvbmZzNHJlY292ZXIuYy0zODAtXHRpZiAoc3RhdHVzKVxuLS1cbmZzL25pbGZzMi9pb2N0bC5jLTE2LSNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBhdC5oXHUwMDNlXHQvKiBjb21wYXRfcHRyKCkgKi9cbmZzL25pbGZzMi9pb2N0bC5jOjE3OiNpbmNsdWRlIFx1MDAzY2xpbnV4L21vdW50LmhcdTAwM2VcdC8qIG1udF93YW50X3dyaXRlX2ZpbGUoKSwgbW50X2Ryb3Bfd3JpdGVfZmlsZSgpICovXG5mcy9uaWxmczIvaW9jdGwuYy0xOC0jaW5jbHVkZSBcdTAwM2NsaW51eC9idWZmZXJfaGVhZC5oXHUwMDNlXG4tLVxuZnMvbmlsZnMyL2lvY3RsLmM9MTk1PXN0YXRpYyBpbnQgbmlsZnNfaW9jdGxfY2hhbmdlX2NwbW9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCxcbi0tXG5mcy9uaWxmczIvaW9jdGwuYy0yMDUtXG5mcy9uaWxmczIvaW9jdGwuYzoyMDY6XHRyZXQgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbHApO1xuZnMvbmlsZnMyL2lvY3RsLmMtMjA3LVx0aWYgKHJldClcbi0tXG5mcy9uaWxmczIvaW9jdGwuYz0yNDc9bmlsZnNfaW9jdGxfZGVsZXRlX2NoZWNrcG9pbnQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsXG4tLVxuZnMvbmlsZnMyL2lvY3RsLmMtMjU3LVxuZnMvbmlsZnMyL2lvY3RsLmM6MjU4Olx0cmV0ID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxwKTtcbmZzL25pbGZzMi9pb2N0bC5jLTI1OS1cdGlmIChyZXQpXG4tLVxuZnMvbmlsZnMyL2lvY3RsLmM9ODM0PXN0YXRpYyBpbnQgbmlsZnNfaW9jdGxfY2xlYW5fc2VnbWVudHMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsXG4tLVxuZnMvbmlsZnMyL2lvY3RsLmMtODUyLVxuZnMvbmlsZnMyL2lvY3RsLmM6ODUzOlx0cmV0ID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxwKTtcbmZzL25pbGZzMi9pb2N0bC5jLTg1NC1cdGlmIChyZXQpXG4tLVxuZnMvbmlsZnMyL2lvY3RsLmM9OTkyPXN0YXRpYyBpbnQgbmlsZnNfaW9jdGxfcmVzaXplKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLFxuLS1cbmZzL25pbGZzMi9pb2N0bC5jLTEwMDAtXG5mcy9uaWxmczIvaW9jdGwuYzoxMDAxOlx0cmV0ID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxwKTtcbmZzL25pbGZzMi9pb2N0bC5jLTEwMDItXHRpZiAocmV0KVxuLS1cbmZzL25pbGZzMi9pb2N0bC5jPTExNzY9c3RhdGljIGludCBuaWxmc19pb2N0bF9zZXRfc3VpbmZvKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLFxuLS1cbmZzL25pbGZzMi9pb2N0bC5jLTExODgtXG5mcy9uaWxmczIvaW9jdGwuYzoxMTg5Olx0cmV0ID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxwKTtcbmZzL25pbGZzMi9pb2N0bC5jLTExOTAtXHRpZiAocmV0KVxuLS1cbmZzL25pbGZzMi9pb2N0bC5jPTEyNzA9c3RhdGljIGludCBuaWxmc19pb2N0bF9zZXRfZnNsYWJlbChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZmlsZSAqZmlscCxcbi0tXG5mcy9uaWxmczIvaW9jdGwuYy0xMjgxLVxuZnMvbmlsZnMyL2lvY3RsLmM6MTI4MjpcdHJldCA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlscCk7XG5mcy9uaWxmczIvaW9jdGwuYy0xMjgzLVx0aWYgKHJldClcbi0tXG5mcy9udGZzL2ZpbGUuYz03NDk9c3RhdGljIGludCBudGZzX2lvY3RsX3NldF92b2x1bWVfbGFiZWwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmZzL250ZnMvZmlsZS5jLTc2MS1cbmZzL250ZnMvZmlsZS5jOjc2MjpcdHJldCA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlscCk7XG5mcy9udGZzL2ZpbGUuYy03NjMtXHRpZiAocmV0KVxuLS1cbmZzL29jZnMyL2ZpbGUuYz0yMDkyPWludCBvY2ZzMl9jaGFuZ2VfZmlsZV9zcGFjZShzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCxcbi0tXG5mcy9vY2ZzMi9maWxlLmMtMjExMS1cbmZzL29jZnMyL2ZpbGUuYzoyMTEyOlx0cmV0ID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxlKTtcbmZzL29jZnMyL2ZpbGUuYy0yMTEzLVx0aWYgKHJldClcbi0tXG5mcy9vY2ZzMi9pb2N0bC5jPTg1Mz1sb25nIG9jZnMyX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5mcy9vY2ZzMi9pb2N0bC5jLTg4MS1cbmZzL29jZnMyL2lvY3RsLmM6ODgyOlx0XHRzdGF0dXMgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbHApO1xuZnMvb2NmczIvaW9jdGwuYy04ODMtXHRcdGlmIChzdGF0dXMpXG4tLVxuZnMvb2NmczIvaW9jdGwuYy04OTktXG5mcy9vY2ZzMi9pb2N0bC5jOjkwMDpcdFx0c3RhdHVzID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxwKTtcbmZzL29jZnMyL2lvY3RsLmMtOTAxLVx0XHRpZiAoc3RhdHVzKVxuLS1cbmZzL29jZnMyL21vdmVfZXh0ZW50cy5jPTk5MT1pbnQgb2NmczJfaW9jdGxfbW92ZV9leHRlbnRzKHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkIF9fdXNlciAqYXJncClcbi0tXG5mcy9vY2ZzMi9tb3ZlX2V4dGVudHMuYy0xMDAxLVxuZnMvb2NmczIvbW92ZV9leHRlbnRzLmM6MTAwMjpcdHN0YXR1cyA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlscCk7XG5mcy9vY2ZzMi9tb3ZlX2V4dGVudHMuYy0xMDAzLVx0aWYgKHN0YXR1cylcbi0tXG5mcy9vcGVuLmM9ODMzPWludCB2ZnNfZmNob3duKHN0cnVjdCBmaWxlICpmaWxlLCB1aWRfdCB1c2VyLCBnaWRfdCBncm91cClcbi0tXG5mcy9vcGVuLmMtODM2LVxuZnMvb3Blbi5jOjgzNzpcdGVycm9yID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxlKTtcbmZzL29wZW4uYy04MzgtXHRpZiAoZXJyb3IpXG4tLVxuZnMvcmVtYXBfcmFuZ2UuYz00MzI9bG9mZl90IHZmc19kZWR1cGVfZmlsZV9yYW5nZV9vbmUoc3RydWN0IGZpbGUgKnNyY19maWxlLCBsb2ZmX3Qgc3JjX3Bvcyxcbi0tXG5mcy9yZW1hcF9yYW5nZS5jLTQ1Ny1cdCAqL1xuZnMvcmVtYXBfcmFuZ2UuYzo0NTg6XHRyZXQgPSBtbnRfd2FudF93cml0ZV9maWxlKGRzdF9maWxlKTtcbmZzL3JlbWFwX3JhbmdlLmMtNDU5LVx0aWYgKHJldClcbi0tXG5mcy9zbWIvY2xpZW50L2lvY3RsLmM9MTgwPXN0YXRpYyBsb25nIGNpZnNfaW9jdGxfY29weWNodW5rKHVuc2lnbmVkIGludCB4aWQsIHN0cnVjdCBmaWxlICpkc3RfZmlsZSxcbi0tXG5mcy9zbWIvY2xpZW50L2lvY3RsLmMtMTkzLVx0LyogY2hlY2sgaWYgdGFyZ2V0IHZvbHVtZSBpcyByZWFkb25seSBhbmQgdGFrZSByZWZlcmVuY2UgKi9cbmZzL3NtYi9jbGllbnQvaW9jdGwuYzoxOTQ6XHRyYyA9IG1udF93YW50X3dyaXRlX2ZpbGUoZHN0X2ZpbGUpO1xuZnMvc21iL2NsaWVudC9pb2N0bC5jLTE5NS1cdGlmIChyYykge1xuLS1cbmZzL3NtYi9zZXJ2ZXIvdmZzLmM9MTk2OD1pbnQga3NtYmRfdmZzX3NldF9jb21wcmVzc2lvbihzdHJ1Y3Qga3NtYmRfd29yayAqd29yaywgc3RydWN0IGtzbWJkX2ZpbGUgKmZwLCB1MTYgZm10KVxuLS1cbmZzL3NtYi9zZXJ2ZXIvdmZzLmMtMjAwMC1cdFx0ZmlsZWF0dHJfZmlsbF9mbGFncyhcdTAwMjZmYSwgZmxhZ3MpO1xuZnMvc21iL3NlcnZlci92ZnMuYzoyMDAxOlx0XHRyYyA9IG1udF93YW50X3dyaXRlX2ZpbGUoZnAtXHUwMDNlZmlscCk7XG5mcy9zbWIvc2VydmVyL3Zmcy5jLTIwMDItXHRcdGlmIChyYylcbi0tXG5mcy92ZXJpdHkvZW5hYmxlLmM9MzI2PWludCBmc3Zlcml0eV9pb2N0bF9lbmFibGUoc3RydWN0IGZpbGUgKmZpbHAsIGNvbnN0IHZvaWQgX191c2VyICp1YXJnKVxuLS1cbmZzL3Zlcml0eS9lbmFibGUuYy0zNzctXG5mcy92ZXJpdHkvZW5hYmxlLmM6Mzc4Olx0ZXJyID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxwKTtcbmZzL3Zlcml0eS9lbmFibGUuYy0zNzktXHRpZiAoZXJyKSAvKiAtRVJPRlMgKi9cbi0tXG5mcy94YXR0ci5jPTY2Nj1pbnQgZmlsZV9zZXR4YXR0cihzdHJ1Y3QgZmlsZSAqZiwgc3RydWN0IGtlcm5lbF94YXR0cl9jdHggKmN0eClcbmZzL3hhdHRyLmMtNjY3LXtcbmZzL3hhdHRyLmM6NjY4Olx0aW50IGVycm9yID0gbW50X3dhbnRfd3JpdGVfZmlsZShmKTtcbmZzL3hhdHRyLmMtNjY5LVxuLS1cbmZzL3hhdHRyLmM9MTA0ND1zdGF0aWMgaW50IGZpbGVfcmVtb3ZleGF0dHIoc3RydWN0IGZpbGUgKmYsIHN0cnVjdCB4YXR0cl9uYW1lICprbmFtZSlcbmZzL3hhdHRyLmMtMTA0NS17XG5mcy94YXR0ci5jOjEwNDY6XHRpbnQgZXJyb3IgPSBtbnRfd2FudF93cml0ZV9maWxlKGYpO1xuZnMveGF0dHIuYy0xMDQ3LVxuLS1cblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNjo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODg3MgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQuCgoqKkFuYWx5emluZyBGaWxlIEF0dHJpYnV0ZSBPcGVyYXRpb25zIGFuZCBNb3VudCBQb2ludCBXcml0ZSBEZXNpcmVzKioKClJpZ2h0LCBzbyBJJiMzOTttIHNlZWluZyBgbW50X3dhbnRfd3JpdGVfZmlsZWAgcG9wcGluZyB1cCBpbiBgZmlsZV9zZXR4YXR0cmAgYW5kIGBmaWxlX3JlbW92ZXhhdHRyYC4gQ2xlYXJseSwgaXQmIzM5O3MgaW52b2x2ZWQgd2l0aCBleHRlbmRlZCBhdHRyaWJ1dGUgbWFuaXB1bGF0aW9ucywgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGJldHRlci4gTXkgaW5zdGluY3RzIHRlbGwgbWUgaXQmIzM5O3Mgc29tZWhvdyByZWxhdGVkIHRvIG1vdW50IHBvaW50IGJlaGF2aW9ycyBhbmQgd3JpdGUgb3BlcmF0aW9ucy4gVGltZSB0byBkaWcgaW50byBgZnMvbmFtZXNwYWNlLmNgIGFuZCBzZWUgZXhhY3RseSBob3cgYG1udF93YW50X3dyaXRlX2ZpbGVgIGlzIGJlaW5nIHVzZWQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgY29udGV4dCBpdCBwcm92aWRlcyB0byB0aGUgc3lzdGVtIHJlZ2FyZGluZyB3aGV0aGVyIGl0JiMzOTtzIG9rYXkgdG8gd3JpdGUgdG8gYSBmaWxlIGJhc2VkIG9uIHRoZSBtb3VudCBwb2ludC4gSSYjMzk7bSBndWVzc2luZyBpdCBoYXMgc29tZSBpbXBhY3Qgb24gYWxsb3dpbmcgb3IgZGlzYWxsb3dpbmcgdGhlIG9wZXJhdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE2OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvbmFtZXNwYWNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MjYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDUyNjpcdCAqIG1udF93YW50X3dyaXRlX2ZpbGUgLSBnZXQgd3JpdGUgYWNjZXNzIHRvIGEgZmlsZSYjMzk7cyBtb3VudFxuIDUyNzpcdCAqIEBmaWxlOiB0aGUgZmlsZSB3aG8mIzM5O3MgbW91bnQgb24gd2hpY2ggdG8gdGFrZSBhIHdyaXRlXG4gNTI4Olx0ICpcbiA1Mjk6XHQgKiBUaGlzIGlzIGxpa2UgbW50X3dhbnRfd3JpdGUsIGJ1dCBpZiB0aGUgZmlsZSBpcyBhbHJlYWR5IG9wZW4gZm9yIHdyaXRpbmcgaXRcbiA1MzA6XHQgKiBza2lwcyBpbmNyZW1lbnRpbmcgbW50X3dyaXRlcnMgKHNpbmNlIHRoZSBvcGVuIGZpbGUgYWxyZWFkeSBoYXMgYSByZWZlcmVuY2UpXG4gNTMxOlx0ICogYW5kIGluc3RlYWQgb25seSBkb2VzIHRoZSBmcmVlemUgcHJvdGVjdGlvbiBhbmQgdGhlIGNoZWNrIGZvciBlbWVyZ2VuY3kgci9vXG4gNTMyOlx0ICogcmVtb3VudHMuICBUaGlzIG11c3QgYmUgcGFpcmVkIHdpdGggbW50X2Ryb3Bfd3JpdGVfZmlsZS5cbiA1MzM6XHQgKi9cbiA1MzQ6XHRpbnQgbW50X3dhbnRfd3JpdGVfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSlcbiA1MzU6XHR7XG4gNTM2Olx0XHRpbnQgcmV0O1xuIDUzNzpcdFxuIDUzODpcdFx0c2Jfc3RhcnRfd3JpdGUoZmlsZV9pbm9kZShmaWxlKS1cdTAwM2VpX3NiKTtcbiA1Mzk6XHRcdHJldCA9IG1udF9nZXRfd3JpdGVfYWNjZXNzX2ZpbGUoZmlsZSk7XG4gNTQwOlx0XHRpZiAocmV0KVxuIDU0MTpcdFx0XHRzYl9lbmRfd3JpdGUoZmlsZV9pbm9kZShmaWxlKS1cdTAwM2VpX3NiKTtcbiA1NDI6XHRcdHJldHVybiByZXQ7XG4gNTQzOlx0fVxuIDU0NDpcdEVYUE9SVF9TWU1CT0xfR1BMKG1udF93YW50X3dyaXRlX2ZpbGUpO1xuIDU0NTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNjo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTQ4OQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgY29kZS4KCioqRGl2aW5nIGludG8gYG1udF9nZXRfd3JpdGVfYWNjZXNzX2ZpbGVgKioKCkFscmlnaHQsIEkgc2VlIHdlJiMzOTtyZSBsb29raW5nIGF0IGBtbnRfZ2V0X3dyaXRlX2FjY2Vzc19maWxlYC4gVGhpcyBmdW5jdGlvbiBuYW1lIGltbWVkaWF0ZWx5IHN1Z2dlc3RzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBjcml0aWNhbCBwaWVjZSBvZiB0aGUgbW91bnRpbmcgcHJvY2Vzcywgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gd3JpdGUgcGVybWlzc2lvbnMuIFRoaXMgY291bGQgYmUgYW55d2hlcmUgaW4gdGhlIGZpbGVzeXN0ZW0gYXJjaGl0ZWN0dXJlLCBsaWtlbHkgY2xvc2UgdG8gdGhlIHZmcyBsYXllciBvciB0aGUgbW91bnQgaW1wbGVtZW50YXRpb24gaXRzZWxmLiBJJiMzOTttIGtlZW4gdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIGFjcXVpcmluZyBvciB2YWxpZGF0aW5nIHRoZSByaWdodCB0byB3cml0ZSB0byBhIG1vdW50ZWQgZmlsZSBzeXN0ZW0sIG9yIGEgc3BlY2lmaWMgZmlsZSAqd2l0aGluKiBhIG1vdW50ZWQgZmlsZSBzeXN0ZW0uIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgaXRzIGNhbGwgc3RhY2sgYW5kIHNlZSB3aGF0IGFyZ3VtZW50cyBpdCB0YWtlcy4gRG9lcyBpdCBjaGVjayBwZXJtaXNzaW9ucyBiYXNlZCBvbiB1c2VyIElEcywgZmlsZSBhdHRyaWJ1dGVzLCBvciBtb3VudCBvcHRpb25zPyBJdCYjMzk7cyBhbGwgYWJvdXQgZW5zdXJpbmcgZGF0YSBpbnRlZ3JpdHkgYW5kIHNlY3VyaXR5LCBzbyBJJiMzOTttIGV4cGVjdGluZyBzb21lIHJvYnVzdCBjaGVja3MgdG8gYmUgaW4gcGxhY2UuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSYjMzk7dmUgZ290LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNjo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL25hbWVzcGFjZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1MDA6XHRFWFBPUlRfU1lNQk9MX0dQTChtbnRfd2FudF93cml0ZSk7XG4gNTAxOlx0XG4gNTAyOlx0LyoqXG4gNTAzOlx0ICogbW50X2dldF93cml0ZV9hY2Nlc3NfZmlsZSAtIGdldCB3cml0ZSBhY2Nlc3MgdG8gYSBmaWxlJiMzOTtzIG1vdW50XG4gNTA0Olx0ICogQGZpbGU6IHRoZSBmaWxlIHdobyYjMzk7cyBtb3VudCBvbiB3aGljaCB0byB0YWtlIGEgd3JpdGVcbiA1MDU6XHQgKlxuIDUwNjpcdCAqIFRoaXMgaXMgbGlrZSBtbnRfZ2V0X3dyaXRlX2FjY2VzcywgYnV0IGlmIEBmaWxlIGlzIGFscmVhZHkgb3BlbiBmb3Igd3JpdGUgaXRcbiA1MDc6XHQgKiBza2lwcyBpbmNyZW1lbnRpbmcgbW50X3dyaXRlcnMgKHNpbmNlIHRoZSBvcGVuIGZpbGUgYWxyZWFkeSBoYXMgYSByZWZlcmVuY2UpXG4gNTA4Olx0ICogYW5kIGluc3RlYWQgb25seSBkb2VzIHRoZSBjaGVjayBmb3IgZW1lcmdlbmN5IHIvbyByZW1vdW50cy4gIFRoaXMgbXVzdCBiZVxuIDUwOTpcdCAqIHBhaXJlZCB3aXRoIG1udF9wdXRfd3JpdGVfYWNjZXNzX2ZpbGUuXG4gNTEwOlx0ICovXG4gNTExOlx0aW50IG1udF9nZXRfd3JpdGVfYWNjZXNzX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUpXG4gNTEyOlx0e1xuIDUxMzpcdFx0aWYgKGZpbGUtXHUwMDNlZl9tb2RlIFx1MDAyNiBGTU9ERV9XUklURVIpIHtcbiA1MTQ6XHRcdFx0LypcbiA1MTU6XHRcdFx0ICogU3VwZXJibG9jayBtYXkgaGF2ZSBiZWNvbWUgcmVhZG9ubHkgd2hpbGUgdGhlcmUgYXJlIHN0aWxsXG4gNTE2Olx0XHRcdCAqIHdyaXRhYmxlIGZkJiMzOTtzLCBlLmcuIGR1ZSB0byBhIGZzIGVycm9yIHdpdGggZXJyb3JzPXJlbW91bnQtcm9cbiA1MTc6XHRcdFx0ICovXG4gNTE4Olx0XHRcdGlmIChfX21udF9pc19yZWFkb25seShmaWxlLVx1MDAzZWZfcGF0aC5tbnQpKVxuIDUxOTpcdFx0XHRcdHJldHVybiAtRVJPRlM7XG4gNTIwOlx0XHRcdHJldHVybiAwO1xuIDUyMTpcdFx0fVxuIDUyMjpcdFx0cmV0dXJuIG1udF9nZXRfd3JpdGVfYWNjZXNzKGZpbGUtXHUwMDNlZl9wYXRoLm1udCk7XG4gNTIzOlx0fVxuIDUyNDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNjo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDE2NwoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDM5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE9fUEFUSCBGaWxlIERlc2NyaXB0b3IgQmVoYXZpb3IqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgYE9fUEFUSGAgZmlsZSBkZXNjcmlwdG9ycyBiZWhhdmUuIElmIHRoZSBmaWxlIGlzbiYjMzk7dCBvcGVuZWQgZm9yIHdyaXRpbmcsIHRoYXQgYEZNT0RFX1dSSVRFUmAgYml0IHdpbGwgYmUgZmFsc2UuICBUaGF0IHRyaWdnZXJzIGEgY2FsbCB0byBgbW50X2dldF93cml0ZV9hY2Nlc3NgLCB3aGljaCBzZWVtcyBjb3JyZWN0IGFuZCB3b3VsZCBpbmNyZW1lbnQgYG1udF93cml0ZXJzYCBhbmQgY2hlY2sgZm9yIHJlYWQtb25seSBtb3VudHMuICBTbywgYXQgYSBmdW5kYW1lbnRhbCBsZXZlbCwgYG1udF93YW50X3dyaXRlX2ZpbGVgICpzaG91bGQqIHdvcmsgZmluZSB3aXRoIGBPX1BBVEhgLgoKQnV0IHdhaXTigKYgdGhlIHBhdGNoIGlzIGNoYW5naW5nIHRoZSBgKmF0YCBzeXNjYWxscyDigJMgYHNldHhhdHRyYXRgLCBgZ2V0eGF0dHJhdGAsIGFuZCB0aGUgcmVzdCDigJMgdG8gaGFuZGxlIGBPX1BBVEhgIGZpbGUgZGVzY3JpcHRvcnMuICBJcyB0aGlzIHJlYWxseSBhIGZ1bmN0aW9uYWwgY2hhbmdlPyAgTGV0IG1lIHNlZS4gIFllcywgaXQgbG9va3MgbGlrZSBpdCBpcy4gIFByZXZpb3VzbHksIGlmIHlvdSB0cmllZCB0byB1c2UgYHNldHhhdHRyYXRgIHdpdGggYW4gYE9fUEFUSGAgZGVzY3JpcHRvciBhbmQgYEFUX0VNUFRZX1BBVEhgLCBpdCB3b3VsZCBmbGF0IG91dCBmYWlsIHdpdGggYEVCQURGYC4gVGhlIGBmZGdldGAgY2FsbCB3b3VsZCBjaG9rZS4gTm93LCB3aXRoIGBmZGdldF9yYXdgLCBpdCB3aWxsIHN1Y2NlZWQgYmVjYXVzZSBgZmRnZXRfcmF3YCBhY3R1YWxseSBzdXBwb3J0cyB0aGVzZS4KCkhtbW0sIGJ1dCB3aGF0IGFib3V0IGBmc2V0eGF0dHJgPyBEb2VzIHRoaXMgcGF0Y2ggaW1wYWN0IGl0PyBBaCwgbm8uIGBmc2V0eGF0dHJgIHN0aWxsIGNhbGxzIGBmZGdldGAgYnkgZGVmYXVsdCwgc28gaXQmIzM5O2xsIGNvbnRpbnVlIHRvIGZhaWwgb24gYE9fUEFUSGAgZGVzY3JpcHRvcnMuIE1ha2VzIHNlbnNlOyBgZnNldHhhdHRyYCBpc24mIzM5O3QgdXNpbmcgdGhlIG5ld2VyIGAqYXRgIGZ1bmN0aW9uYWxpdHkuIE9rYXksIHRoYXQmIzM5O3MgY29uc2lzdGVudCB3aXRoIHRoZSBleGlzdGluZyBiZWhhdmlvciAqYmVmb3JlKiB0aGlzIHBhdGNoLiBUaGUgKm5ldyogYCphdGAgY2FsbHMgd2VyZSBpbnRyb2R1Y2VkIG1vcmUgcmVjZW50bHksIGFuZCB0aGlzIHBhdGNoIGNvcnJlY3RseSBhbGxvd3MgYE9fUEFUSGAgZGVzY3JpcHRvcnMgd2hlbiBgQVRfRU1QVFlfUEFUSGAgaXMgdXNlZC4gIFRoYXQmIzM5O3MgaW1wb3J0YW50LiAgSSBzZWUgaXQgYWxsIHRoZSB0aW1lIHdpdGggYCphdGAgY2FsbHMsIGUuZy4sIGBmY2hvd25hdGAsIGBmc3RhdGF0YCwgdGhleSBvZnRlbiB1c2UgdGhpcyBzdHlsZS4KCkxldCBtZSBqdXN0IHZlcmlmeSB0aGlzIHJlYWwgcXVpY2suIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyB0aGUgb25seSBzcG90IGluIHRoZSBjb2RlIHdoZXJlIHRoaXMgaGFzIGJlZW4gZml4ZWQuIEFyZSB0aGVyZSBhbnkgb3RoZXIgcGxhY2VzIHVzaW5nIGBmZGdldF9yYXdgIGZvciB0aGVzZSBgKmF0YCBzeXNjYWxscz8gSSYjMzk7bGwgY2hlY2sgYGZjaG93bmF0YCByZWFsIHF1aWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNjo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmY2hvd25hdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FscGhhL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibC0zODMtNDUyXHRjb21tb25cdG1rbm9kYXRcdFx0XHRcdHN5c19ta25vZGF0XG5hcmNoL2FscGhhL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibDozODQ6NDUzXHRjb21tb25cdGZjaG93bmF0XHRcdFx0c3lzX2ZjaG93bmF0XG5hcmNoL2FscGhhL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibC0zODUtNDU0XHRjb21tb25cdGZ1dGltZXNhdFx0XHRcdHN5c19mdXRpbWVzYXRcbi0tXG5hcmNoL2FybS90b29scy9zeXNjYWxsLnRibC0zNDItMzI0XHRjb21tb25cdG1rbm9kYXRcdFx0XHRzeXNfbWtub2RhdFxuYXJjaC9hcm0vdG9vbHMvc3lzY2FsbC50Ymw6MzQzOjMyNVx0Y29tbW9uXHRmY2hvd25hdFx0XHRzeXNfZmNob3duYXRcbmFyY2gvYXJtL3Rvb2xzL3N5c2NhbGwudGJsLTM0NC0zMjZcdGNvbW1vblx0ZnV0aW1lc2F0XHRcdHN5c19mdXRpbWVzYXRfdGltZTMyXG4tLVxuYXJjaC9hcm02NC90b29scy9zeXNjYWxsXzMyLnRibC0zMzktMzI0XHRjb21tb25cdG1rbm9kYXRcdFx0XHRzeXNfbWtub2RhdFxuYXJjaC9hcm02NC90b29scy9zeXNjYWxsXzMyLnRibDozNDA6MzI1XHRjb21tb25cdGZjaG93bmF0XHRcdHN5c19mY2hvd25hdFxuYXJjaC9hcm02NC90b29scy9zeXNjYWxsXzMyLnRibC0zNDEtMzI2XHRjb21tb25cdGZ1dGltZXNhdFx0XHRzeXNfZnV0aW1lc2F0X3RpbWUzMlxuLS1cbmFyY2gvbTY4ay9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmwtMzAwLTI5MFx0Y29tbW9uXHRta25vZGF0XHRcdFx0XHRzeXNfbWtub2RhdFxuYXJjaC9tNjhrL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibDozMDE6MjkxXHRjb21tb25cdGZjaG93bmF0XHRcdFx0c3lzX2ZjaG93bmF0XG5hcmNoL202OGsva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsLTMwMi0yOTJcdGNvbW1vblx0ZnV0aW1lc2F0XHRcdFx0c3lzX2Z1dGltZXNhdF90aW1lMzJcbi0tXG5hcmNoL21pY3JvYmxhemUva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsLTMwNy0yOTdcdGNvbW1vblx0bWtub2RhdFx0XHRcdFx0c3lzX21rbm9kYXRcbmFyY2gvbWljcm9ibGF6ZS9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50Ymw6MzA4OjI5OFx0Y29tbW9uXHRmY2hvd25hdFx0XHRcdHN5c19mY2hvd25hdFxuYXJjaC9taWNyb2JsYXplL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibC0zMDktMjk5XHRjb21tb25cdGZ1dGltZXNhdFx0XHRcdHN5c19mdXRpbWVzYXRfdGltZTMyXG4tLVxuYXJjaC9taXBzL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsX24zMi50YmwtMjY0LTI1M1x0bjMyXHRta25vZGF0XHRcdFx0XHRzeXNfbWtub2RhdFxuYXJjaC9taXBzL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsX24zMi50Ymw6MjY1OjI1NFx0bjMyXHRmY2hvd25hdFx0XHRcdHN5c19mY2hvd25hdFxuYXJjaC9taXBzL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsX24zMi50YmwtMjY2LTI1NVx0bjMyXHRmdXRpbWVzYXRcdFx0XHRzeXNfZnV0aW1lc2F0X3RpbWUzMlxuLS1cbmFyY2gvbWlwcy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbF9uNjQudGJsLTI2MC0yNDlcdG42NFx0bWtub2RhdFx0XHRcdFx0c3lzX21rbm9kYXRcbmFyY2gvbWlwcy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbF9uNjQudGJsOjI2MToyNTBcdG42NFx0ZmNob3duYXRcdFx0XHRzeXNfZmNob3duYXRcbmFyY2gvbWlwcy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbF9uNjQudGJsLTI2Mi0yNTFcdG42NFx0ZnV0aW1lc2F0XHRcdFx0c3lzX2Z1dGltZXNhdFxuLS1cbmFyY2gvbWlwcy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbF9vMzIudGJsLTMwNC0yOTBcdG8zMlx0bWtub2RhdFx0XHRcdFx0c3lzX21rbm9kYXRcbmFyY2gvbWlwcy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbF9vMzIudGJsOjMwNToyOTFcdG8zMlx0ZmNob3duYXRcdFx0XHRzeXNfZmNob3duYXRcbmFyY2gvbWlwcy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbF9vMzIudGJsLTMwNi0yOTJcdG8zMlx0ZnV0aW1lc2F0XHRcdFx0c3lzX2Z1dGltZXNhdF90aW1lMzJcbi0tXG5hcmNoL3BhcmlzYy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmwtMzE0LTI3N1x0Y29tbW9uXHRta25vZGF0XHRcdFx0c3lzX21rbm9kYXRcbmFyY2gvcGFyaXNjL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibDozMTU6Mjc4XHRjb21tb25cdGZjaG93bmF0XHRcdHN5c19mY2hvd25hdFxuYXJjaC9wYXJpc2Mva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsLTMxNi0yNzlcdDMyXHRmdXRpbWVzYXRcdFx0c3lzX2Z1dGltZXNhdF90aW1lMzJcbi0tXG5hcmNoL3Bvd2VycGMva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsLTM3NS0yODhcdGNvbW1vblx0bWtub2RhdFx0XHRcdFx0c3lzX21rbm9kYXRcbmFyY2gvcG93ZXJwYy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50Ymw6Mzc2OjI4OVx0Y29tbW9uXHRmY2hvd25hdFx0XHRcdHN5c19mY2hvd25hdFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibC0zNzctMjkwXHQzMlx0ZnV0aW1lc2F0XHRcdFx0c3lzX2Z1dGltZXNhdF90aW1lMzJcbi0tXG5hcmNoL3MzOTAva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsLTI0NC0yOTBcdGNvbW1vblx0bWtub2RhdFx0XHRcdFx0c3lzX21rbm9kYXRcbmFyY2gvczM5MC9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50Ymw6MjQ1OjI5MVx0Y29tbW9uXHRmY2hvd25hdFx0XHRcdHN5c19mY2hvd25hdFxuYXJjaC9zMzkwL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibC0yNDYtMjkyXHRjb21tb25cdGZ1dGltZXNhdFx0XHRcdHN5c19mdXRpbWVzYXRcbi0tXG5hcmNoL3NoL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibC0zMDctMjk3XHRjb21tb25cdG1rbm9kYXRcdFx0XHRcdHN5c19ta25vZGF0XG5hcmNoL3NoL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibDozMDg6Mjk4XHRjb21tb25cdGZjaG93bmF0XHRcdFx0c3lzX2ZjaG93bmF0XG5hcmNoL3NoL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibC0zMDktMjk5XHRjb21tb25cdGZ1dGltZXNhdFx0XHRcdHN5c19mdXRpbWVzYXRfdGltZTMyXG4tLVxuYXJjaC9zcGFyYy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmwtMzQ5LTI4Nlx0Y29tbW9uXHRta25vZGF0XHRcdFx0c3lzX21rbm9kYXRcbmFyY2gvc3BhcmMva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsOjM1MDoyODdcdGNvbW1vblx0ZmNob3duYXRcdFx0c3lzX2ZjaG93bmF0XG5hcmNoL3NwYXJjL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibC0zNTEtMjg4XHQzMlx0ZnV0aW1lc2F0XHRcdHN5c19mdXRpbWVzYXRfdGltZTMyXG4tLVxuYXJjaC94ODYvZW50cnkvc3lzY2FsbHMvc3lzY2FsbF8zMi50YmwtMzEyLTI5N1x0aTM4Nlx0bWtub2RhdFx0XHRcdHN5c19ta25vZGF0XG5hcmNoL3g4Ni9lbnRyeS9zeXNjYWxscy9zeXNjYWxsXzMyLnRibDozMTM6Mjk4XHRpMzg2XHRmY2hvd25hdFx0XHRzeXNfZmNob3duYXRcbmFyY2gveDg2L2VudHJ5L3N5c2NhbGxzL3N5c2NhbGxfMzIudGJsLTMxNC0yOTlcdGkzODZcdGZ1dGltZXNhdFx0XHRzeXNfZnV0aW1lc2F0X3RpbWUzMlxuLS1cbmFyY2gveDg2L2VudHJ5L3N5c2NhbGxzL3N5c2NhbGxfNjQudGJsLTI3MS0yNTlcdGNvbW1vblx0bWtub2RhdFx0XHRcdHN5c19ta25vZGF0XG5hcmNoL3g4Ni9lbnRyeS9zeXNjYWxscy9zeXNjYWxsXzY0LnRibDoyNzI6MjYwXHRjb21tb25cdGZjaG93bmF0XHRcdHN5c19mY2hvd25hdFxuYXJjaC94ODYvZW50cnkvc3lzY2FsbHMvc3lzY2FsbF82NC50YmwtMjczLTI2MVx0Y29tbW9uXHRmdXRpbWVzYXRcdFx0c3lzX2Z1dGltZXNhdFxuLS1cbmFyY2gveHRlbnNhL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibC0zMTktMjk2XHRjb21tb25cdHV0aW1lbnNhdFx0XHRcdHN5c191dGltZW5zYXRfdGltZTMyXG5hcmNoL3h0ZW5zYS9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50Ymw6MzIwOjI5N1x0Y29tbW9uXHRmY2hvd25hdFx0XHRcdHN5c19mY2hvd25hdFxuYXJjaC94dGVuc2Eva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsLTMyMS0yOThcdGNvbW1vblx0ZnV0aW1lc2F0XHRcdFx0c3lzX2Z1dGltZXNhdF90aW1lMzJcbi0tXG5mcy9pbnRlcm5hbC5oPTIwMz1pbnQgY2htb2RfY29tbW9uKGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLCB1bW9kZV90IG1vZGUpO1xuZnMvaW50ZXJuYWwuaDoyMDQ6aW50IGRvX2ZjaG93bmF0KGludCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICpmaWxlbmFtZSwgdWlkX3QgdXNlciwgZ2lkX3QgZ3JvdXAsXG5mcy9pbnRlcm5hbC5oLTIwNS1cdFx0aW50IGZsYWcpO1xuLS1cbmZzL29wZW4uYz03Mzk9aW50IGNob3duX2NvbW1vbihjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwgdWlkX3QgdXNlciwgZ2lkX3QgZ3JvdXApXG4tLVxuZnMvb3Blbi5jLTc4Ni1cbmZzL29wZW4uYzo3ODc6aW50IGRvX2ZjaG93bmF0KGludCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICpmaWxlbmFtZSwgdWlkX3QgdXNlciwgZ2lkX3QgZ3JvdXAsXG5mcy9vcGVuLmMtNzg4LVx0XHRpbnQgZmxhZylcbi0tXG5mcy9vcGVuLmMtODE1LVxuZnMvb3Blbi5jOjgxNjpTWVNDQUxMX0RFRklORTUoZmNob3duYXQsIGludCwgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqLCBmaWxlbmFtZSwgdWlkX3QsIHVzZXIsXG5mcy9vcGVuLmMtODE3LVx0XHRnaWRfdCwgZ3JvdXAsIGludCwgZmxhZylcbmZzL29wZW4uYy04MTgte1xuZnMvb3Blbi5jOjgxOTpcdHJldHVybiBkb19mY2hvd25hdChkZmQsIGZpbGVuYW1lLCB1c2VyLCBncm91cCwgZmxhZyk7XG5mcy9vcGVuLmMtODIwLX1cbi0tXG5mcy9vcGVuLmM9ODIyPVNZU0NBTExfREVGSU5FMyhjaG93biwgY29uc3QgY2hhciBfX3VzZXIgKiwgZmlsZW5hbWUsIHVpZF90LCB1c2VyLCBnaWRfdCwgZ3JvdXApXG5mcy9vcGVuLmMtODIzLXtcbmZzL29wZW4uYzo4MjQ6XHRyZXR1cm4gZG9fZmNob3duYXQoQVRfRkRDV0QsIGZpbGVuYW1lLCB1c2VyLCBncm91cCwgMCk7XG5mcy9vcGVuLmMtODI1LX1cbi0tXG5mcy9vcGVuLmM9ODI3PVNZU0NBTExfREVGSU5FMyhsY2hvd24sIGNvbnN0IGNoYXIgX191c2VyICosIGZpbGVuYW1lLCB1aWRfdCwgdXNlciwgZ2lkX3QsIGdyb3VwKVxuZnMvb3Blbi5jLTgyOC17XG5mcy9vcGVuLmM6ODI5Olx0cmV0dXJuIGRvX2ZjaG93bmF0KEFUX0ZEQ1dELCBmaWxlbmFtZSwgdXNlciwgZ3JvdXAsXG5mcy9vcGVuLmMtODMwLVx0XHRcdCAgIEFUX1NZTUxJTktfTk9GT0xMT1cpO1xuLS1cbmluY2x1ZGUvYXNtLWdlbmVyaWMvYXVkaXRfY2hhbmdlX2F0dHIuaD0yND1fX05SX2ZyZW1vdmV4YXR0cixcbmluY2x1ZGUvYXNtLWdlbmVyaWMvYXVkaXRfY2hhbmdlX2F0dHIuaDoyNTojaWZkZWYgX19OUl9mY2hvd25hdFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9hdWRpdF9jaGFuZ2VfYXR0ci5oOjI2Ol9fTlJfZmNob3duYXQsXG5pbmNsdWRlL2FzbS1nZW5lcmljL2F1ZGl0X2NoYW5nZV9hdHRyLmgtMjctX19OUl9mY2htb2RhdCxcbi0tXG5pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmg9NDYzPWFzbWxpbmthZ2UgbG9uZyBzeXNfZmNobW9kYXQyKGludCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICpmaWxlbmFtZSxcbmluY2x1ZGUvbGludXgvc3lzY2FsbHMuaC00NjQtXHRcdFx0ICAgICB1bW9kZV90IG1vZGUsIHVuc2lnbmVkIGludCBmbGFncyk7XG5pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmg6NDY1OmFzbWxpbmthZ2UgbG9uZyBzeXNfZmNob3duYXQoaW50IGRmZCwgY29uc3QgY2hhciBfX3VzZXIgKmZpbGVuYW1lLCB1aWRfdCB1c2VyLFxuaW5jbHVkZS9saW51eC9zeXNjYWxscy5oLTQ2Ni1cdFx0XHQgICAgIGdpZF90IGdyb3VwLCBpbnQgZmxhZyk7XG4tLVxuaW5jbHVkZS9saW51eC9zeXNjYWxscy5oPTEyNjg9aW50IGNvbXBhdF9rc3lzX2lwYyh1MzIgY2FsbCwgaW50IGZpcnN0LCBpbnQgc2Vjb25kLFxuLS1cbmluY2x1ZGUvbGludXgvc3lzY2FsbHMuaC0xMjc0LSAqL1xuaW5jbHVkZS9saW51eC9zeXNjYWxscy5oOjEyNzU6ZXh0ZXJuIGludCBkb19mY2hvd25hdChpbnQgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqZmlsZW5hbWUsIHVpZF90IHVzZXIsXG5pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmgtMTI3Ni1cdFx0ICAgICAgIGdpZF90IGdyb3VwLCBpbnQgZmxhZyk7XG4tLVxuaW5jbHVkZS9saW51eC9zeXNjYWxscy5oPTEyNzg9c3RhdGljIGlubGluZSBsb25nIGtzeXNfY2hvd24oY29uc3QgY2hhciBfX3VzZXIgKmZpbGVuYW1lLCB1aWRfdCB1c2VyLFxuLS1cbmluY2x1ZGUvbGludXgvc3lzY2FsbHMuaC0xMjgwLXtcbmluY2x1ZGUvbGludXgvc3lzY2FsbHMuaDoxMjgxOlx0cmV0dXJuIGRvX2ZjaG93bmF0KEFUX0ZEQ1dELCBmaWxlbmFtZSwgdXNlciwgZ3JvdXAsIDApO1xuaW5jbHVkZS9saW51eC9zeXNjYWxscy5oLTEyODItfVxuLS1cbmluY2x1ZGUvbGludXgvc3lzY2FsbHMuaD0xMjg0PXN0YXRpYyBpbmxpbmUgbG9uZyBrc3lzX2xjaG93bihjb25zdCBjaGFyIF9fdXNlciAqZmlsZW5hbWUsIHVpZF90IHVzZXIsXG4tLVxuaW5jbHVkZS9saW51eC9zeXNjYWxscy5oLTEyODYte1xuaW5jbHVkZS9saW51eC9zeXNjYWxscy5oOjEyODc6XHRyZXR1cm4gZG9fZmNob3duYXQoQVRfRkRDV0QsIGZpbGVuYW1lLCB1c2VyLCBncm91cCxcbmluY2x1ZGUvbGludXgvc3lzY2FsbHMuaC0xMjg4LVx0XHRcdCAgICAgQVRfU1lNTElOS19OT0ZPTExPVyk7XG4tLVxuaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL3VuaXN0ZC5oPTE1Mz1fX1NZU0NBTEwoX19OUl9mY2htb2RhdCwgc3lzX2ZjaG1vZGF0KVxuaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL3VuaXN0ZC5oOjE1NDojZGVmaW5lIF9fTlJfZmNob3duYXQgNTRcbmluY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy91bmlzdGQuaDoxNTU6X19TWVNDQUxMKF9fTlJfZmNob3duYXQsIHN5c19mY2hvd25hdClcbmluY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy91bmlzdGQuaC0xNTYtI2RlZmluZSBfX05SX2ZjaG93biA1NVxuLS1cbmtlcm5lbC90cmFjZS90cmFjZV9zeXNjYWxscy5jPTEwNjA9c3RhdGljIHZvaWQgY2hlY2tfZmF1bHRhYmxlX3N5c2NhbGwoc3RydWN0IHRyYWNlX2V2ZW50X2NhbGwgKmNhbGwsIGludCBucilcbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc3lzY2FsbHMuYy0xMTYzLVx0Y2FzZSBfX05SX2ZjaG1vZGF0Mjpcbmtlcm5lbC90cmFjZS90cmFjZV9zeXNjYWxscy5jOjExNjQ6XHRjYXNlIF9fTlJfZmNob3duYXQ6XG5rZXJuZWwvdHJhY2UvdHJhY2Vfc3lzY2FsbHMuYy0xMTY1LVx0Y2FzZSBfX05SX2ZnZXR4YXR0cjpcbi0tXG5zY3JpcHRzL2NoZWNrc3lzY2FsbHMuc2g9MTg9Y2F0IFx1MDAzY1x1MDAzYyBFT0Zcbi0tXG5zY3JpcHRzL2NoZWNrc3lzY2FsbHMuc2gtMjctI2RlZmluZSBfX0lHTk9SRV9jaG1vZFx0XHQvKiBmY2htb2RhdCAqL1xuc2NyaXB0cy9jaGVja3N5c2NhbGxzLnNoOjI4OiNkZWZpbmUgX19JR05PUkVfY2hvd25cdFx0LyogZmNob3duYXQgKi9cbnNjcmlwdHMvY2hlY2tzeXNjYWxscy5zaC0yOS0jZGVmaW5lIF9fSUdOT1JFX21rZGlyXHRcdC8qIG1rZGlyYXQgKi9cbnNjcmlwdHMvY2hlY2tzeXNjYWxscy5zaC0zMC0jZGVmaW5lIF9fSUdOT1JFX3JtZGlyXHRcdC8qIHVubGlua2F0ICovXG5zY3JpcHRzL2NoZWNrc3lzY2FsbHMuc2g6MzE6I2RlZmluZSBfX0lHTk9SRV9sY2hvd25cdFx0LyogZmNob3duYXQgKi9cbnNjcmlwdHMvY2hlY2tzeXNjYWxscy5zaC0zMi0jZGVmaW5lIF9fSUdOT1JFX2FjY2Vzc1x0XHQvKiBmYWNjZXNzYXQgKi9cbi0tXG5zY3JpcHRzL3N5c2NhbGwudGJsLTcxLTUzXHRjb21tb25cdGZjaG1vZGF0XHRcdFx0c3lzX2ZjaG1vZGF0XG5zY3JpcHRzL3N5c2NhbGwudGJsOjcyOjU0XHRjb21tb25cdGZjaG93bmF0XHRcdFx0c3lzX2ZjaG93bmF0XG5zY3JpcHRzL3N5c2NhbGwudGJsLTczLTU1XHRjb21tb25cdGZjaG93blx0XHRcdFx0c3lzX2ZjaG93blxuLS1cbnRvb2xzL2luY2x1ZGUvbm9saWJjL3N5cy5oPTIwMD1pbnQgX3N5c19jaG93bihjb25zdCBjaGFyICpwYXRoLCB1aWRfdCBvd25lciwgZ2lkX3QgZ3JvdXApXG50b29scy9pbmNsdWRlL25vbGliYy9zeXMuaC0yMDEte1xudG9vbHMvaW5jbHVkZS9ub2xpYmMvc3lzLmg6MjAyOiNpZiBkZWZpbmVkKF9fTlJfZmNob3duYXQpXG50b29scy9pbmNsdWRlL25vbGliYy9zeXMuaDoyMDM6XHRyZXR1cm4gX19ub2xpYmNfc3lzY2FsbDUoX19OUl9mY2hvd25hdCwgQVRfRkRDV0QsIHBhdGgsIG93bmVyLCBncm91cCwgMCk7XG50b29scy9pbmNsdWRlL25vbGliYy9zeXMuaC0yMDQtI2Vsc2Vcbi0tXG50b29scy9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvdW5pc3RkLmg9MTUzPV9fU1lTQ0FMTChfX05SX2ZjaG1vZGF0LCBzeXNfZmNobW9kYXQpXG50b29scy9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvdW5pc3RkLmg6MTU0OiNkZWZpbmUgX19OUl9mY2hvd25hdCA1NFxudG9vbHMvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL3VuaXN0ZC5oOjE1NTpfX1NZU0NBTEwoX19OUl9mY2hvd25hdCwgc3lzX2ZjaG93bmF0KVxudG9vbHMvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL3VuaXN0ZC5oLTE1Ni0jZGVmaW5lIF9fTlJfZmNob3duIDU1XG4tLVxudG9vbHMvcGVyZi9hcmNoL2FscGhhL2VudHJ5L3N5c2NhbGxzL3N5c2NhbGwudGJsLTM4My00NTJcdGNvbW1vblx0bWtub2RhdFx0XHRcdFx0c3lzX21rbm9kYXRcbnRvb2xzL3BlcmYvYXJjaC9hbHBoYS9lbnRyeS9zeXNjYWxscy9zeXNjYWxsLnRibDozODQ6NDUzXHRjb21tb25cdGZjaG93bmF0XHRcdFx0c3lzX2ZjaG93bmF0XG50b29scy9wZXJmL2FyY2gvYWxwaGEvZW50cnkvc3lzY2FsbHMvc3lzY2FsbC50YmwtMzg1LTQ1NFx0Y29tbW9uXHRmdXRpbWVzYXRcdFx0XHRzeXNfZnV0aW1lc2F0XG4tLVxudG9vbHMvcGVyZi9hcmNoL2FybS9lbnRyeS9zeXNjYWxscy9zeXNjYWxsLnRibC0zNDItMzI0XHRjb21tb25cdG1rbm9kYXRcdFx0XHRzeXNfbWtub2RhdFxudG9vbHMvcGVyZi9hcmNoL2FybS9lbnRyeS9zeXNjYWxscy9zeXNjYWxsLnRibDozNDM6MzI1XHRjb21tb25cdGZjaG93bmF0XHRcdHN5c19mY2hvd25hdFxudG9vbHMvcGVyZi9hcmNoL2FybS9lbnRyeS9zeXNjYWxscy9zeXNjYWxsLnRibC0zNDQtMzI2XHRjb21tb25cdGZ1dGltZXNhdFx0XHRzeXNfZnV0aW1lc2F0X3RpbWUzMlxuLS1cbnRvb2xzL3BlcmYvYXJjaC9hcm02NC9lbnRyeS9zeXNjYWxscy9zeXNjYWxsXzMyLnRibC0zMzktMzI0XHRjb21tb25cdG1rbm9kYXRcdFx0XHRzeXNfbWtub2RhdFxudG9vbHMvcGVyZi9hcmNoL2FybTY0L2VudHJ5L3N5c2NhbGxzL3N5c2NhbGxfMzIudGJsOjM0MDozMjVcdGNvbW1vblx0ZmNob3duYXRcdFx0c3lzX2ZjaG93bmF0XG50b29scy9wZXJmL2FyY2gvYXJtNjQvZW50cnkvc3lzY2FsbHMvc3lzY2FsbF8zMi50YmwtMzQxLTMyNlx0Y29tbW9uXHRmdXRpbWVzYXRcdFx0c3lzX2Z1dGltZXNhdF90aW1lMzJcbi0tXG50b29scy9wZXJmL2FyY2gvbWlwcy9lbnRyeS9zeXNjYWxscy9zeXNjYWxsX242NC50YmwtMjYwLTI0OVx0bjY0XHRta25vZGF0XHRcdFx0XHRzeXNfbWtub2RhdFxudG9vbHMvcGVyZi9hcmNoL21pcHMvZW50cnkvc3lzY2FsbHMvc3lzY2FsbF9uNjQudGJsOjI2MToyNTBcdG42NFx0ZmNob3duYXRcdFx0XHRzeXNfZmNob3duYXRcbnRvb2xzL3BlcmYvYXJjaC9taXBzL2VudHJ5L3N5c2NhbGxzL3N5c2NhbGxfbjY0LnRibC0yNjItMjUxXHRuNjRcdGZ1dGltZXNhdFx0XHRcdHN5c19mdXRpbWVzYXRcbi0tXG50b29scy9wZXJmL2FyY2gvcGFyaXNjL2VudHJ5L3N5c2NhbGxzL3N5c2NhbGwudGJsLTMxNC0yNzdcdGNvbW1vblx0bWtub2RhdFx0XHRcdHN5c19ta25vZGF0XG50b29scy9wZXJmL2FyY2gvcGFyaXNjL2VudHJ5L3N5c2NhbGxzL3N5c2NhbGwudGJsOjMxNToyNzhcdGNvbW1vblx0ZmNob3duYXRcdFx0c3lzX2ZjaG93bmF0XG50b29scy9wZXJmL2FyY2gvcGFyaXNjL2VudHJ5L3N5c2NhbGxzL3N5c2NhbGwudGJsLTMxNi0yNzlcdDMyXHRmdXRpbWVzYXRcdFx0c3lzX2Z1dGltZXNhdF90aW1lMzJcbi0tXG50b29scy9wZXJmL2FyY2gvcG93ZXJwYy9lbnRyeS9zeXNjYWxscy9zeXNjYWxsLnRibC0zNzUtMjg4XHRjb21tb25cdG1rbm9kYXRcdFx0XHRcdHN5c19ta25vZGF0XG50b29scy9wZXJmL2FyY2gvcG93ZXJwYy9lbnRyeS9zeXNjYWxscy9zeXNjYWxsLnRibDozNzY6Mjg5XHRjb21tb25cdGZjaG93bmF0XHRcdFx0c3lzX2ZjaG93bmF0XG50b29scy9wZXJmL2FyY2gvcG93ZXJwYy9lbnRyeS9zeXNjYWxscy9zeXNjYWxsLnRibC0zNzctMjkwXHQzMlx0ZnV0aW1lc2F0XHRcdFx0c3lzX2Z1dGltZXNhdF90aW1lMzJcbi0tXG50b29scy9wZXJmL2FyY2gvczM5MC9lbnRyeS9zeXNjYWxscy9zeXNjYWxsLnRibC0yNDQtMjkwXHRjb21tb25cdG1rbm9kYXRcdFx0XHRcdHN5c19ta25vZGF0XG50b29scy9wZXJmL2FyY2gvczM5MC9lbnRyeS9zeXNjYWxscy9zeXNjYWxsLnRibDoyNDU6MjkxXHRjb21tb25cdGZjaG93bmF0XHRcdFx0c3lzX2ZjaG93bmF0XG50b29scy9wZXJmL2FyY2gvczM5MC9lbnRyeS9zeXNjYWxscy9zeXNjYWxsLnRibC0yNDYtMjkyXHRjb21tb25cdGZ1dGltZXNhdFx0XHRcdHN5c19mdXRpbWVzYXRcbi0tXG50b29scy9wZXJmL2FyY2gvc2gvZW50cnkvc3lzY2FsbHMvc3lzY2FsbC50YmwtMzA3LTI5N1x0Y29tbW9uXHRta25vZGF0XHRcdFx0XHRzeXNfbWtub2RhdFxudG9vbHMvcGVyZi9hcmNoL3NoL2VudHJ5L3N5c2NhbGxzL3N5c2NhbGwudGJsOjMwODoyOThcdGNvbW1vblx0ZmNob3duYXRcdFx0XHRzeXNfZmNob3duYXRcbnRvb2xzL3BlcmYvYXJjaC9zaC9lbnRyeS9zeXNjYWxscy9zeXNjYWxsLnRibC0zMDktMjk5XHRjb21tb25cdGZ1dGltZXNhdFx0XHRcdHN5c19mdXRpbWVzYXRfdGltZTMyXG4tLVxudG9vbHMvcGVyZi9hcmNoL3NwYXJjL2VudHJ5L3N5c2NhbGxzL3N5c2NhbGwudGJsLTM0OS0yODZcdGNvbW1vblx0bWtub2RhdFx0XHRcdHN5c19ta25vZGF0XG50b29scy9wZXJmL2FyY2gvc3BhcmMvZW50cnkvc3lzY2FsbHMvc3lzY2FsbC50Ymw6MzUwOjI4N1x0Y29tbW9uXHRmY2hvd25hdFx0XHRzeXNfZmNob3duYXRcbnRvb2xzL3BlcmYvYXJjaC9zcGFyYy9lbnRyeS9zeXNjYWxscy9zeXNjYWxsLnRibC0zNTEtMjg4XHQzMlx0ZnV0aW1lc2F0XHRcdHN5c19mdXRpbWVzYXRfdGltZTMyXG4tLVxudG9vbHMvcGVyZi9hcmNoL3g4Ni9lbnRyeS9zeXNjYWxscy9zeXNjYWxsXzMyLnRibC0zMTItMjk3XHRpMzg2XHRta25vZGF0XHRcdFx0c3lzX21rbm9kYXRcbnRvb2xzL3BlcmYvYXJjaC94ODYvZW50cnkvc3lzY2FsbHMvc3lzY2FsbF8zMi50Ymw6MzEzOjI5OFx0aTM4Nlx0ZmNob3duYXRcdFx0c3lzX2ZjaG93bmF0XG50b29scy9wZXJmL2FyY2gveDg2L2VudHJ5L3N5c2NhbGxzL3N5c2NhbGxfMzIudGJsLTMxNC0yOTlcdGkzODZcdGZ1dGltZXNhdFx0XHRzeXNfZnV0aW1lc2F0X3RpbWUzMlxuLS1cbnRvb2xzL3BlcmYvYXJjaC94ODYvZW50cnkvc3lzY2FsbHMvc3lzY2FsbF82NC50YmwtMjcxLTI1OVx0Y29tbW9uXHRta25vZGF0XHRcdFx0c3lzX21rbm9kYXRcbnRvb2xzL3BlcmYvYXJjaC94ODYvZW50cnkvc3lzY2FsbHMvc3lzY2FsbF82NC50Ymw6MjcyOjI2MFx0Y29tbW9uXHRmY2hvd25hdFx0XHRzeXNfZmNob3duYXRcbnRvb2xzL3BlcmYvYXJjaC94ODYvZW50cnkvc3lzY2FsbHMvc3lzY2FsbF82NC50YmwtMjczLTI2MVx0Y29tbW9uXHRmdXRpbWVzYXRcdFx0c3lzX2Z1dGltZXNhdFxuLS1cbnRvb2xzL3BlcmYvYXJjaC94dGVuc2EvZW50cnkvc3lzY2FsbHMvc3lzY2FsbC50YmwtMzE5LTI5Nlx0Y29tbW9uXHR1dGltZW5zYXRcdFx0XHRzeXNfdXRpbWVuc2F0X3RpbWUzMlxudG9vbHMvcGVyZi9hcmNoL3h0ZW5zYS9lbnRyeS9zeXNjYWxscy9zeXNjYWxsLnRibDozMjA6Mjk3XHRjb21tb25cdGZjaG93bmF0XHRcdFx0c3lzX2ZjaG93bmF0XG50b29scy9wZXJmL2FyY2gveHRlbnNhL2VudHJ5L3N5c2NhbGxzL3N5c2NhbGwudGJsLTMyMS0yOThcdGNvbW1vblx0ZnV0aW1lc2F0XHRcdFx0c3lzX2Z1dGltZXNhdF90aW1lMzJcbi0tXG50b29scy9wZXJmL2J1aWx0aW4tdHJhY2UuYz0xMTM0PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3lzY2FsbF9mbXQgc3lzY2FsbF9mbXRzW10gPSB7XG4tLVxudG9vbHMvcGVyZi9idWlsdGluLXRyYWNlLmMtMTE3OS1cdCAgLmFyZyA9IHsgWzBdID0geyAuc2NucHJpbnRmID0gU0NBX0ZEQVQsIC8qIGZkICovIH0sIH0sIH0sXG50b29scy9wZXJmL2J1aWx0aW4tdHJhY2UuYzoxMTgwOlx0eyAubmFtZVx0ICAgID0gXCYjMzQ7ZmNob3duYXRcJiMzNDssXG50b29scy9wZXJmL2J1aWx0aW4tdHJhY2UuYy0xMTgxLVx0ICAuYXJnID0geyBbMF0gPSB7IC5zY25wcmludGYgPSBTQ0FfRkRBVCwgLyogZmQgKi8gfSwgfSwgfSxcbi0tXG50b29scy9wZXJmL3RyYWNlL3N0cmFjZS9ncm91cHMvc3RyaW5nPTEzPWZjaG1vZGF0XG50b29scy9wZXJmL3RyYWNlL3N0cmFjZS9ncm91cHMvc3RyaW5nOjE0OmZjaG93bmF0XG50b29scy9wZXJmL3RyYWNlL3N0cmFjZS9ncm91cHMvc3RyaW5nLTE1LWZnZXR4YXR0clxuLS1cbnRvb2xzL3NjcmlwdHMvc3lzY2FsbC50YmwtNzEtNTNcdGNvbW1vblx0ZmNobW9kYXRcdFx0XHRzeXNfZmNobW9kYXRcbnRvb2xzL3NjcmlwdHMvc3lzY2FsbC50Ymw6NzI6NTRcdGNvbW1vblx0ZmNob3duYXRcdFx0XHRzeXNfZmNob3duYXRcbnRvb2xzL3NjcmlwdHMvc3lzY2FsbC50YmwtNzMtNTVcdGNvbW1vblx0ZmNob3duXHRcdFx0XHRzeXNfZmNob3duXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvb3ZlcmxheWZzL2lkbWFwcGVkX21vdW50cy5jPTM0Nj1URVNUX0YoaWRtYXBwZWRfb3ZlcmxheSwgY2hvd24pXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvb3ZlcmxheWZzL2lkbWFwcGVkX21vdW50cy5jLTM2Mi1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL292ZXJsYXlmcy9pZG1hcHBlZF9tb3VudHMuYzozNjM6XHRBU1NFUlRfRVEoZmNob3duYXQob3ZsLCBcJiMzNDtmXCYjMzQ7LCBJRF9OUyAmIzQzOyA1LCBJRF9OUyAmIzQzOyA1LCAwKSwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9vdmVybGF5ZnMvaWRtYXBwZWRfbW91bnRzLmMtMzY0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNjo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjc2NQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYGRvX2ZjaG93bmF0YCoqCgpPa2F5LCBsZXQmIzM5O3MgZHJpbGwgZG93biBpbnRvIGBkb19mY2hvd25hdGAgaW4gYGZzL29wZW4uY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmbG93IGFuZCBwb3RlbnRpYWwgZ290Y2hhcy4gSSYjMzk7bSBpbW1lZGlhdGVseSBpbnRlcmVzdGVkIGluIHRoZSBhY2Nlc3MgY29udHJvbCBpbXBsaWNhdGlvbnMgb2YgdGhpcyBzeXN0ZW0gY2FsbC4gV2hhdCBjaGVja3MgYXJlIHBlcmZvcm1lZCBmb3IgZWZmZWN0aXZlIHVzZXIvZ3JvdXAgSUQgY29tYmluYXRpb25zPyBXaGF0IGVkZ2UgY2FzZXMgZXhpc3QgcmVnYXJkaW5nIHN5bWxpbmtzIGFuZCBjcm9zcy1maWxlc3lzdGVtIG9wZXJhdGlvbnM/IEkmIzM5O2xsIHByb2JhYmx5IGJlIGxvb2tpbmcgZm9yIHRoZSBpbnRlcnBsYXkgd2l0aCBjYXBhYmlsaXRpZXMgYW5kIHNlY3VyaXR5IG1vZHVsZXMgKFNFTGludXgsIEFwcEFybW9yLCBldGMuKS4gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIEkgc2hvdWxkIGJlIG1pbmRmdWwgb2YsIHBhcnRpY3VsYXJseSB3aGVuIGRlYWxpbmcgd2l0aCBjb25jdXJyZW50IGZpbGUgYWNjZXNzIGFuZCBwZXJtaXNzaW9ucyBjaGFuZ2VzPyBJIGV4cGVjdCB0byBzZWUgY2hlY2tzIHJlbGF0ZWQgdG8gdGhlIGBBVF9FTVBUWV9QQVRIYCBhbmQgYEFUX1NZTUxJTktfTk9GT0xMT1dgIGZsYWdzOyBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGV5JiMzOTtyZSBoYW5kbGVkIGNvcnJlY3RseSB0byBwcmV2ZW50IHByaXZpbGVnZSBlc2NhbGF0aW9uLiBUaW1lIHRvIGdyYWIgbXkgZ3JlcCBhbmQgc3RhcnQgZGlzc2VjdGluZyB0aGlzIHRoaW5nLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE2OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvb3Blbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzg3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3ODc6XHRpbnQgZG9fZmNob3duYXQoaW50IGRmZCwgY29uc3QgY2hhciBfX3VzZXIgKmZpbGVuYW1lLCB1aWRfdCB1c2VyLCBnaWRfdCBncm91cCxcbiA3ODg6XHRcdFx0aW50IGZsYWcpXG4gNzg5Olx0e1xuIDc5MDpcdFx0c3RydWN0IHBhdGggcGF0aDtcbiA3OTE6XHRcdGludCBlcnJvcjtcbiA3OTI6XHRcdGludCBsb29rdXBfZmxhZ3M7XG4gNzkzOlx0XG4gNzk0Olx0XHRpZiAoKGZsYWcgXHUwMDI2IH4oQVRfU1lNTElOS19OT0ZPTExPVyB8IEFUX0VNUFRZX1BBVEgpKSAhPSAwKVxuIDc5NTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA3OTY6XHRcbiA3OTc6XHRcdGxvb2t1cF9mbGFncyA9IChmbGFnIFx1MDAyNiBBVF9TWU1MSU5LX05PRk9MTE9XKSA/IDAgOiBMT09LVVBfRk9MTE9XO1xuIDc5ODpcdFx0Q0xBU1MoZmlsZW5hbWVfdWZsYWdzLCBuYW1lKShmaWxlbmFtZSwgZmxhZyk7XG4gNzk5Olx0cmV0cnk6XG4gODAwOlx0XHRlcnJvciA9IGZpbGVuYW1lX2xvb2t1cChkZmQsIG5hbWUsIGxvb2t1cF9mbGFncywgXHUwMDI2cGF0aCwgTlVMTCk7XG4gODAxOlx0XHRpZiAoIWVycm9yKSB7XG4gODAyOlx0XHRcdGVycm9yID0gbW50X3dhbnRfd3JpdGUocGF0aC5tbnQpO1xuIDgwMzpcdFx0XHRpZiAoIWVycm9yKSB7XG4gODA0Olx0XHRcdFx0ZXJyb3IgPSBjaG93bl9jb21tb24oXHUwMDI2cGF0aCwgdXNlciwgZ3JvdXApO1xuIDgwNTpcdFx0XHRcdG1udF9kcm9wX3dyaXRlKHBhdGgubW50KTtcbiA4MDY6XHRcdFx0fVxuIDgwNzpcdFx0XHRwYXRoX3B1dChcdTAwMjZwYXRoKTtcbiA4MDg6XHRcdFx0aWYgKHJldHJ5X2VzdGFsZShlcnJvciwgbG9va3VwX2ZsYWdzKSkge1xuIDgwOTpcdFx0XHRcdGxvb2t1cF9mbGFncyB8PSBMT09LVVBfUkVWQUw7XG4gODEwOlx0XHRcdFx0Z290byByZXRyeTtcbiA4MTE6XHRcdFx0fVxuIDgxMjpcdFx0fVxuIDgxMzpcdFx0cmV0dXJuIGVycm9yO1xuIDgxNDpcdH1cbiA4MTU6XHRcbiA4MTY6XHRTWVNDQUxMX0RFRklORTUoZmNob3duYXQsIGludCwgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqLCBmaWxlbmFtZSwgdWlkX3QsIHVzZXIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE2OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NTAzCgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBJbXBsZW1lbnRhdGlvbiBvZiBgZG9fZmNob3duYXRgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgYGRvX2ZjaG93bmF0YCB3b3JrcywgYW5kIGl0JiMzOTtzIHVzaW5nIGBmaWxlbmFtZV9sb29rdXAoZGZkLCBuYW1lLCBsb29rdXBfZmxhZ3MsICZhbXA7cGF0aCwgTlVMTClgLiAgVGhhdCYjMzk7cyB0aGUgc3RhbmRhcmQgd2F5IHRvIHJlc29sdmUgYSBmaWxlbmFtZSByZWxhdGl2ZSB0byBhIGRpcmVjdG9yeSBmaWxlIGRlc2NyaXB0b3IsIEkmIzM5O20gZmFtaWxpYXIgd2l0aCB0aGF0LiAgQnV0IHdhaXQgYSBtaW51dGUsIGBmaWxlbmFtZV9sb29rdXBgIGlzIGFsc28gcmVzcG9uc2libGUgZm9yIGhhbmRsaW5nIGBBVF9FTVBUWV9QQVRIYCBhbmQgdGhvc2UgdHJpY2t5IGBPX1BBVEhgIGZpbGUgZGVzY3JpcHRvcnMuICBJbnRlcmVzdGluZy4gTm93IGl0IGhhcyBtZSB3b25kZXJpbmcsIGRvZXMgYGZpbGVuYW1lX2xvb2t1cGAgKmFjdHVhbGx5KiBzdXBwb3J0IGBPX1BBVEhgIGZpbGUgZGVzY3JpcHRvcnM/IEkgdGhvdWdodCB0aGUgb3JpZ2luYWwgY29kZSBtaWdodCBoYXZlIGF2b2lkZWQgdGhpcywgYnV0IHRoaXMgbWFrZXMgbWUgY3VyaW91cy4gSSYjMzk7ZCBiZXR0ZXIgZG91YmxlLWNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgZmlsZW5hbWVfbG9va3VwYCBpdHNlbGYuIExldCYjMzk7cyBnbyBkaXZlIGludG8gYGZzL25hbWVpLmNgIGFuZCBzZWUgd2hhdCYjMzk7cyByZWFsbHkgaGFwcGVuaW5nIHVuZGVyIHRoZSBob29kLiBUaW1lIHRvIGNvbmZpcm0gaWYgbXkgYXNzdW1wdGlvbnMgYXJlIGNvcnJlY3QsIG9yIGlmIEkmIzM5O20gbWlzc2luZyBzb21ldGhpbmcgaW1wb3J0YW50IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNjo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnQgZmlsZW5hbWVfbG9va3VwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2ludGVybmFsLmg9NDk9ZXh0ZXJuIGludCBmaW5pc2hfY2xlYW5fY29udGV4dChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpO1xuLS1cbmZzL2ludGVybmFsLmgtNTMtICovXG5mcy9pbnRlcm5hbC5oOjU0OmV4dGVybiBpbnQgZmlsZW5hbWVfbG9va3VwKGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqbmFtZSwgdW5zaWduZWQgZmxhZ3MsXG5mcy9pbnRlcm5hbC5oLTU1LVx0XHRcdCAgIHN0cnVjdCBwYXRoICpwYXRoLCBjb25zdCBzdHJ1Y3QgcGF0aCAqcm9vdCk7XG4tLVxuZnMvbmFtZWkuYz0yODAxPXN0YXRpYyBpbnQgcGF0aF9sb29rdXBhdChzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgdW5zaWduZWQgZmxhZ3MsIHN0cnVjdCBwYXRoICpwYXRoKVxuLS1cbmZzL25hbWVpLmMtMjgzMy1cbmZzL25hbWVpLmM6MjgzNDppbnQgZmlsZW5hbWVfbG9va3VwKGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqbmFtZSwgdW5zaWduZWQgZmxhZ3MsXG5mcy9uYW1laS5jLTI4MzUtXHRcdCAgICBzdHJ1Y3QgcGF0aCAqcGF0aCwgY29uc3Qgc3RydWN0IHBhdGggKnJvb3QpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE2OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MDQwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCYjMzk7cyBteSBvd24gaW50ZXJuYWwgZGlhbG9ndWU6CgoqKkluaXRpYWwgQXNzZXNzbWVudDogTmF2aWdhdGluZyB0aGUgTGFuZHNjYXBlKioKCkFscmlnaHQsIHRoZSBkaXJlY3RpdmUgaXMgdG8gc3RhcnQgd2l0aCBgZmlsZW5hbWVfbG9va3VwYC4gVGhhdCBzdWdnZXN0cyB3ZSYjMzk7cmUgaW5pdGlhdGluZyBhIHNlYXJjaCBvciByZXRyaWV2YWwgcHJvY2VzcywgcHJvYmFibHkgd2l0aGluIGEgbGFyZ2VyIHN5c3RlbS4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gaW1tZWRpYXRlbHkgYXNzZXNzIHRoZSBzY29wZSBhbmQgcG90ZW50aWFsIGNvbnRleHQgb2YgdGhpcyBwYXJ0aWN1bGFyIGxvb2t1cC4gSXMgaXQgYSBzeXN0ZW0td2lkZSBzZWFyY2gsIG9yIGNvbmZpbmVkIHRvIGEgc3BlY2lmaWMgYXBwbGljYXRpb24gb3IgZGF0YSBzdHJ1Y3R1cmU/IFdoYXQmIzM5O3MgdGhlIGV4cGVjdGVkIGZvcm1hdCBvZiB0aGUgYGZpbGVuYW1lX2xvb2t1cGAgb3V0cHV0PyBJcyBpdCBhIGRhdGEgc3RydWN0dXJlLCBhIGZ1bmN0aW9uLCBhIHBvaW50ZXI/IEtub3dpbmcgdGhhdCB3aWxsIGluZmx1ZW5jZSBteSBuZXh0IG1vdmUsIGFuZCBob3cgZGVlcCBJIG5lZWQgdG8gZGlnLiBXZSBuZWVkIHRvIGFzY2VydGFpbiB0aGUgbWV0aG9kIHVzZWQgZm9yIHRoZSBsb29rdXAgc28gd2UgY2FuIHVuZGVyc3RhbmQgdGhlIGRhdGEgc3RydWN0dXJlIGJlaGluZCBpdC4gQXJlIHRoZXJlIGluZGV4aW5nIG9yIGhhc2hpbmcgbWV0aG9kcyBhdCB3b3JrPyBJcyBpdCBhbiBlZmZpY2llbnQgc29sdXRpb24gb3IgaXMgdGhlcmUgYSBuZWVkIHRvIHJlcGxhY2UgaXQ/IEkmIzM5O2xsIHByb2JhYmx5IG5lZWQgdG8gY29uc2lkZXIgZmFjdG9ycyBvZiBzY2FsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMTY6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9uYW1laS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjgzNCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyODM0Olx0aW50IGZpbGVuYW1lX2xvb2t1cChpbnQgZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKm5hbWUsIHVuc2lnbmVkIGZsYWdzLFxuMjgzNTpcdFx0XHQgICAgc3RydWN0IHBhdGggKnBhdGgsIGNvbnN0IHN0cnVjdCBwYXRoICpyb290KVxuMjgzNjpcdHtcbjI4Mzc6XHRcdGludCByZXR2YWw7XG4yODM4Olx0XHRzdHJ1Y3QgbmFtZWlkYXRhIG5kO1xuMjgzOTpcdFx0aWYgKElTX0VSUihuYW1lKSlcbjI4NDA6XHRcdFx0cmV0dXJuIFBUUl9FUlIobmFtZSk7XG4yODQxOlx0XHRzZXRfbmFtZWlkYXRhKFx1MDAyNm5kLCBkZmQsIG5hbWUsIHJvb3QpO1xuMjg0MjpcdFx0cmV0dmFsID0gcGF0aF9sb29rdXBhdChcdTAwMjZuZCwgZmxhZ3MgfCBMT09LVVBfUkNVLCBwYXRoKTtcbjI4NDM6XHRcdGlmICh1bmxpa2VseShyZXR2YWwgPT0gLUVDSElMRCkpXG4yODQ0Olx0XHRcdHJldHZhbCA9IHBhdGhfbG9va3VwYXQoXHUwMDI2bmQsIGZsYWdzLCBwYXRoKTtcbjI4NDU6XHRcdGlmICh1bmxpa2VseShyZXR2YWwgPT0gLUVTVEFMRSkpXG4yODQ2Olx0XHRcdHJldHZhbCA9IHBhdGhfbG9va3VwYXQoXHUwMDI2bmQsIGZsYWdzIHwgTE9PS1VQX1JFVkFMLCBwYXRoKTtcbjI4NDc6XHRcbjI4NDg6XHRcdGlmIChsaWtlbHkoIXJldHZhbCkpXG4yODQ5Olx0XHRcdGF1ZGl0X2lub2RlKG5hbWUsIHBhdGgtXHUwMDNlZGVudHJ5LFxuMjg1MDpcdFx0XHRcdCAgICBmbGFncyBcdTAwMjYgTE9PS1VQX01PVU5UUE9JTlQgPyBBVURJVF9JTk9ERV9OT0VWQUwgOiAwKTtcbjI4NTE6XHRcdHJlc3RvcmVfbmFtZWlkYXRhKCk7XG4yODUyOlx0XHRyZXR1cm4gcmV0dmFsO1xuMjg1MzpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMTY6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg2MzEKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgc2V0X25hbWVpZGF0YWAgYW5kIEl0cyBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBzZXRfbmFtZWlkYXRhYC4gVGhlIGNvZGUmIzM5O3MgdXNpbmcgYGRmZGAsIGFuZCBteSBtZW50YWwgcmFkYXIgaXMgaW1tZWRpYXRlbHkgdXAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25uZWN0aW9uIGJldHdlZW4gdGhlc2UgdHdvLiBNeSBmaXJzdCBtb3ZlIHdpbGwgYmUgdG8gcmUtZXhhbWluZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgYHNldF9uYW1laWRhdGFgLiBJdCYjMzk7cyBsaWtlbHkgdGhhdCBgZGZkYCBpcyBhIGNydWNpYWwgZGF0YSBzdHJ1Y3R1cmUgb3IgYSBkZXBlbmRlbmN5IHdpdGhpbiB0aGF0IGZ1bmN0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIHVucGFjayB3aGF0IGl0JiMzOTtzIHN0b3JpbmcuIEkgYW50aWNpcGF0ZSB0aGlzIHdpbGwgaW52b2x2ZSBhIGRlZXAgZGl2ZSB0byBleGFtaW5lIGhvdyB0aGF0IGRlcGVuZGVuY3kgaXMgY29uc3RydWN0ZWQgb3IgcG9wdWxhdGVkLCBhbmQgdGhlbiBob3cgYHNldF9uYW1laWRhdGFgIGNvbnN1bWVzIGl0LiBJJiMzOTtsbCBiZSBwYXJ0aWN1bGFybHkgZm9jdXNlZCBvbiBob3cgdGhlIGRhdGEgaGFuZGxlZCBieSBgZGZkYCBpbXBhY3RzIHRoZSBvdmVyYWxsIGRhdGEgZmxvdywgZXNwZWNpYWxseSB3aXRoIHJlZ2FyZCB0byBhbnkgbmFtZS1yZWxhdGVkIG9wZXJhdGlvbnMuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBkYXRhIGZsb3cgYW5kIHBvdGVudGlhbCBmb3IgYW55IHNpZGUtZWZmZWN0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMTY6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdGF0aWMgdm9pZCBzZXRfbmFtZWlkYXRhJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMTY6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg4ODcKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW5pdGlhbCBTZWFyY2ggSW5xdWlyeSoqCgpSaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gZ2V0IHNvbWUgaW5mb3JtYXRpb24gb24gYHNldF9uYW1laWRhdGFgLiBJdCYjMzk7cyBhIHByZXR0eSBzcGVjaWZpYyB0ZXJtLCBzbyBJJiMzOTttIGhvcGluZyBmb3IgYSBjbGVhbiBoaXQsIGJ1dCBleHBlcmllbmNlIHRlbGxzIG1lIGl0JiMzOTtzIGFsd2F5cyB3aXNlIHRvIGJlIHByZXBhcmVkIGZvciBzb21lIGludGVycHJldGF0aW9uIGFuZCBkaXNhbWJpZ3VhdGlvbi4gSeKAmW0gZXhwZWN0aW5nIHRoaXMgdG8gYmUgcmVsYXRlZCB0byBmaWxlIHN5c3RlbSBvcGVyYXRpb25zIG9yIG1ldGFkYXRhIG1hbmFnZW1lbnQsIGxpa2VseSB3aXRoaW4gYSBjb250ZXh0IG9mIHNwZWNpZmljIE9TIGtlcm5lbCBvciBsaWJyYXJ5IGNhbGxzLiBHaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24gaXQgY291bGQgYmUgYSBjYWxsIGZvciBkaXJlY3Qgc2V0dGluZyBvZiBmaWxlIHN5c3RlbSBtZXRhZGF0YS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMTY6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2V0X25hbWVpZGF0YSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9uYW1laS5jPTcyOD1zdHJ1Y3QgbmFtZWlkYXRhIHtcbi0tXG5mcy9uYW1laS5jLTc1Ni1cbmZzL25hbWVpLmM6NzU3OnN0YXRpYyB2b2lkIF9fc2V0X25hbWVpZGF0YShzdHJ1Y3QgbmFtZWlkYXRhICpwLCBpbnQgZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKm5hbWUpXG5mcy9uYW1laS5jLTc1OC17XG4tLVxuZnMvbmFtZWkuYy03NzEtXG5mcy9uYW1laS5jOjc3MjpzdGF0aWMgaW5saW5lIHZvaWQgc2V0X25hbWVpZGF0YShzdHJ1Y3QgbmFtZWlkYXRhICpwLCBpbnQgZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKm5hbWUsXG5mcy9uYW1laS5jLTc3My1cdFx0XHQgIGNvbnN0IHN0cnVjdCBwYXRoICpyb290KVxuZnMvbmFtZWkuYy03NzQte1xuZnMvbmFtZWkuYzo3NzU6XHRfX3NldF9uYW1laWRhdGEocCwgZGZkLCBuYW1lKTtcbmZzL25hbWVpLmMtNzc2LVx0cC1cdTAwM2VzdGF0ZSA9IDA7XG4tLVxuZnMvbmFtZWkuYz0yODM0PWludCBmaWxlbmFtZV9sb29rdXAoaW50IGRmZCwgc3RydWN0IGZpbGVuYW1lICpuYW1lLCB1bnNpZ25lZCBmbGFncyxcbi0tXG5mcy9uYW1laS5jLTI4NDAtXHRcdHJldHVybiBQVFJfRVJSKG5hbWUpO1xuZnMvbmFtZWkuYzoyODQxOlx0c2V0X25hbWVpZGF0YShcdTAwMjZuZCwgZGZkLCBuYW1lLCByb290KTtcbmZzL25hbWVpLmMtMjg0Mi1cdHJldHZhbCA9IHBhdGhfbG9va3VwYXQoXHUwMDI2bmQsIGZsYWdzIHwgTE9PS1VQX1JDVSwgcGF0aCk7XG4tLVxuZnMvbmFtZWkuYz0yODczPXN0YXRpYyBpbnQgX19maWxlbmFtZV9wYXJlbnRhdChpbnQgZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKm5hbWUsXG4tLVxuZnMvbmFtZWkuYy0yODgyLVx0XHRyZXR1cm4gUFRSX0VSUihuYW1lKTtcbmZzL25hbWVpLmM6Mjg4MzpcdHNldF9uYW1laWRhdGEoXHUwMDI2bmQsIGRmZCwgbmFtZSwgcm9vdCk7XG5mcy9uYW1laS5jLTI4ODQtXHRyZXR2YWwgPSBwYXRoX3BhcmVudGF0KFx1MDAyNm5kLCBmbGFncyB8IExPT0tVUF9SQ1UsIHBhcmVudCk7XG4tLVxuZnMvbmFtZWkuYz00ODc2PXN0cnVjdCBmaWxlICpkb19maWxlX29wZW4oaW50IGRmZCwgc3RydWN0IGZpbGVuYW1lICpwYXRobmFtZSxcbi0tXG5mcy9uYW1laS5jLTQ4ODQtXHRcdHJldHVybiBFUlJfQ0FTVChwYXRobmFtZSk7XG5mcy9uYW1laS5jOjQ4ODU6XHRzZXRfbmFtZWlkYXRhKFx1MDAyNm5kLCBkZmQsIHBhdGhuYW1lLCBOVUxMKTtcbmZzL25hbWVpLmMtNDg4Ni1cdGZpbHAgPSBwYXRoX29wZW5hdChcdTAwMjZuZCwgb3AsIGZsYWdzIHwgTE9PS1VQX1JDVSk7XG4tLVxuZnMvbmFtZWkuYz00ODk1PXN0cnVjdCBmaWxlICpkb19maWxlX29wZW5fcm9vdChjb25zdCBzdHJ1Y3QgcGF0aCAqcm9vdCxcbi0tXG5mcy9uYW1laS5jLTQ5MDgtXG5mcy9uYW1laS5jOjQ5MDk6XHRzZXRfbmFtZWlkYXRhKFx1MDAyNm5kLCAtMSwgZmlsZW5hbWUsIHJvb3QpO1xuZnMvbmFtZWkuYy00OTEwLVx0ZmlsZSA9IHBhdGhfb3BlbmF0KFx1MDAyNm5kLCBvcCwgZmxhZ3MgfCBMT09LVVBfUkNVKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMTY6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk3MzAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgRmlsZXN5c3RlbSBQbHVtYmluZyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBuYW1pbmcgYW5kIHBhdGggbG9va3VwcywgcGFydGljdWxhcmx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiBuYW1laWRhdGEuIFNvLCBteSBpbml0aWFsIGZvY3VzIGlzIGdvaW5nIHRvIGJlIG9uIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiBgX19zZXRfbmFtZWlkYXRhYCBhbmQgYHBhdGhfbG9va3VwYXRgLCBhbmQgYWxzbyBJIHdhbnQgdG8gY29tcGFyZSBgcGF0aF9sb29rdXBhdGAgd2l0aCBgcGF0aF9pbml0YC4gSSYjMzk7bSBndWVzc2luZyB0aGF0IGBfX3NldF9uYW1laWRhdGFgIHBsYXlzIGEgY3J1Y2lhbCByb2xlIGluIHNldHRpbmcgdXAgdGhlIG5hbWVpZGF0YSBzdHJ1Y3R1cmUgaXRzZWxmLCBwcm9iYWJseSBpbml0aWFsaXppbmcgb3IgcG9wdWxhdGluZyBpdCB3aXRoIGluZm9ybWF0aW9uIG5lZWRlZCBmb3Igc3Vic2VxdWVudCBwYXRoIHJlc29sdXRpb24uIGBwYXRoX2xvb2t1cGF0YCBpcyBtb3N0IGxpa2VseSB0aGUgY29yZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IsIHdlbGwsIGxvb2tpbmcgdXAgYSBwYXRoIHJlbGF0aXZlIHRvIGEgZ2l2ZW4gZmlsZSBkZXNjcmlwdG9yLCBhbmQgSSYjMzk7ZCBiZXQgYHBhdGhfaW5pdGAgaW5pdGlhbGl6ZXMgdGhlIHBhdGggc3RydWN0dXJlIGl0c2VsZi4gSXQmIzM5O3MgdGhlIHN0YW5kYXJkIGVudHJ5IHBvaW50LCB3aGVyZWFzIGBwYXRoX2xvb2t1cGF0YCBpcyB0aGUgd29ya2hvcnNlLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0IHdpdGggdGhlIFZGUyBsYXllciwgaW5vZGUgbG9va3VwcywgYW5kIHRoZSB3aG9sZSBwcm9jZXNzIG9mIHRyYXZlcnNpbmcgdGhlIGRpcmVjdG9yeSBoaWVyYXJjaHkuIFRpbWUgdG8gZGlnIGluIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNjo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL25hbWVpLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3NTcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDc1NzpcdHN0YXRpYyB2b2lkIF9fc2V0X25hbWVpZGF0YShzdHJ1Y3QgbmFtZWlkYXRhICpwLCBpbnQgZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKm5hbWUpXG4gNzU4Olx0e1xuIDc1OTpcdFx0c3RydWN0IG5hbWVpZGF0YSAqb2xkID0gY3VycmVudC1cdTAwM2VuYW1laWRhdGE7XG4gNzYwOlx0XHRwLVx1MDAzZXN0YWNrID0gcC1cdTAwM2VpbnRlcm5hbDtcbiA3NjE6XHRcdHAtXHUwMDNlZGVwdGggPSAwO1xuIDc2MjpcdFx0cC1cdTAwM2VkZmQgPSBkZmQ7XG4gNzYzOlx0XHRwLVx1MDAzZW5hbWUgPSBuYW1lO1xuIDc2NDpcdFx0cC1cdTAwM2VwYXRobmFtZSA9IGxpa2VseShuYW1lKSA/IG5hbWUtXHUwMDNlbmFtZSA6IFwmIzM0O1wmIzM0OztcbiA3NjU6XHRcdHAtXHUwMDNlcGF0aC5tbnQgPSBOVUxMO1xuIDc2NjpcdFx0cC1cdTAwM2VwYXRoLmRlbnRyeSA9IE5VTEw7XG4gNzY3Olx0XHRwLVx1MDAzZXRvdGFsX2xpbmtfY291bnQgPSBvbGQgPyBvbGQtXHUwMDNldG90YWxfbGlua19jb3VudCA6IDA7XG4gNzY4Olx0XHRwLVx1MDAzZXNhdmVkID0gb2xkO1xuIDc2OTpcdFx0Y3VycmVudC1cdTAwM2VuYW1laWRhdGEgPSBwO1xuIDc3MDpcdH1cbiA3NzE6XHRcbiA3NzI6XHRzdGF0aWMgaW5saW5lIHZvaWQgc2V0X25hbWVpZGF0YShzdHJ1Y3QgbmFtZWlkYXRhICpwLCBpbnQgZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKm5hbWUsXG4gNzczOlx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgcGF0aCAqcm9vdClcbiA3NzQ6XHR7XG4gNzc1Olx0XHRfX3NldF9uYW1laWRhdGEocCwgZGZkLCBuYW1lKTtcbiA3NzY6XHRcdHAtXHUwMDNlc3RhdGUgPSAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNjo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDM2NQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgcGF0aF9pbml0YCBhbmQgYE9fUEFUSGAgSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gYGZzL25hbWVpLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBwYXRoX2luaXRgIGZ1bmN0aW9uLiBJdCBsb29rcyBsaWtlIGl0IGxldmVyYWdlcyBgbmQtJmd0O2RmZGAgYXMgYSBjcml0aWNhbCBlbGVtZW50LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcmVhbGx5IG5haWwgZG93biBob3cgaXQgaW50ZXJhY3RzIHdpdGggYE9fUEFUSGAgYW5kIGFueSBwb3RlbnRpYWwgbnVhbmNlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgYGRmZGAgaXMgdHJlYXRlZCBkaWZmZXJlbnRseSB3aGVuIGBPX1BBVEhgIGlzIHBhc3NlZC4gV2hhdCBzb3J0IG9mIGludGVybmFsIGNoZWNrcyBhcmUgcGVyZm9ybWVkPyBBcmUgdGhlcmUgYW55IHN1YnRsZSBjaGFuZ2VzIGluIGJlaGF2aW9yIHRoYXQgb2NjdXIgYmVjYXVzZSBvZiB0aGlzIGZsYWc/IEkgd2FudCB0byBtYXAgdGhlIGNvZGUmIzM5O3MgYmVoYXZpb3Igd2hlbiBgT19QQVRIYCBpcyBzZXQgYW5kIGNvbXBhcmUgaXQgdG8gdGhlIHN0YW5kYXJkIHBhdGggbG9va3VwLiBUaGUgZ29hbCBpcyB0byBpZGVudGlmeSBhbnkgb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMsIHBvdGVudGlhbCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMsIG9yIHNpbXBseSBlbnN1cmUgbXkgb3ZlcmFsbCB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgY29kZSBpcyByb2NrIHNvbGlkIHJlZ2FyZGluZyBpdHMgaW50ZXJhY3Rpb24gd2l0aCBmaWxlIGRlc2NyaXB0b3JzLiBBIGNsb3NlIHJlYWRpbmcgaXMgcmVxdWlyZWQuIExldCYjMzk7cyBzZWUgaG93IGBwYXRoX2luaXRgIG1vZGlmaWVzIGBuZGAgYW5kIGhvdyB0aGF0IGluZmx1ZW5jZXMgc3Vic2VxdWVudCBvcGVyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNjo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdGF0aWMgY29uc3QgY2hhciBcXCpwYXRoX2luaXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbmFtZWkuYz0yNTc4PXN0YXRpYyBpbnQgbGlua19wYXRoX3dhbGsoY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IG5hbWVpZGF0YSAqbmQpXG4tLVxuZnMvbmFtZWkuYy0yNjc2LS8qIG11c3QgYmUgcGFpcmVkIHdpdGggdGVybWluYXRlX3dhbGsoKSAqL1xuZnMvbmFtZWkuYzoyNjc3OnN0YXRpYyBjb25zdCBjaGFyICpwYXRoX2luaXQoc3RydWN0IG5hbWVpZGF0YSAqbmQsIHVuc2lnbmVkIGZsYWdzKVxuZnMvbmFtZWkuYy0yNjc4LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMTY6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA3NTcKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgQ29udGV4dCoqCgpBbHJpZ2h0LCB0aGUgaW5zdHJ1Y3Rpb24gaXMgc3RyYWlnaHRmb3J3YXJkOiBMZXQmIzM5O3MgZm9jdXMgb3VyIGF0dGVudGlvbiBvbiBgcGF0aF9pbml0YC4gVGhpcyBpbW1lZGlhdGVseSBzdWdnZXN0cyBhIHNwZWNpZmljIGFyZWEgb2YgdGhlIGNvZGViYXNlIGlzIGJlaW5nIGZsYWdnZWQgYXMgc2lnbmlmaWNhbnQuIEl0JiMzOTtzIGxpa2VseSBhIGNyaXRpY2FsIGluaXRpYWxpemF0aW9uIHJvdXRpbmUsIGZ1bmN0aW9uLCBvciBtb2R1bGUgcmVsYXRlZCB0byBwYXRoIG1hbmFnZW1lbnQsIHBvdGVudGlhbGx5IHdpdGhpbiBhIGxhcmdlciBzeXN0ZW0uIE15IGltbWVkaWF0ZSBtZW50YWwgY2hlY2tsaXN0IHN0YXJ0czogd2hhdCBwcm9qZWN0LCB3aGF0IGxhbmd1YWdlLCB3aGF0IGFyZSB0aGUgbGlrZWx5IGRhdGEgc3RydWN0dXJlcy9hbGdvcml0aG1zIGludm9sdmVkIGJhc2VkIG9uIHRoZSBuYW1pbmcgY29udmVudGlvbi4gYHBhdGhfaW5pdGAgaW1wbGllcyBpdCYjMzk7cyB3aGVyZSB0aGUgZW52aXJvbm1lbnQgKG9yIGEgc3BlY2lmaWMgY29tcG9uZW50JiMzOTtzKSBmaWxlIHN5c3RlbSBwYXRocyBhcmUgZXN0YWJsaXNoZWQsIHZhbGlkYXRlZCwgb3IgY29uZmlndXJlZC4gVGltZSB0byBkaXZlIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNjo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL25hbWVpLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNjc3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI2Nzc6XHRzdGF0aWMgY29uc3QgY2hhciAqcGF0aF9pbml0KHN0cnVjdCBuYW1laWRhdGEgKm5kLCB1bnNpZ25lZCBmbGFncylcbjI2Nzg6XHR7XG4yNjc5Olx0XHRpbnQgZXJyb3I7XG4yNjgwOlx0XHRjb25zdCBjaGFyICpzID0gbmQtXHUwMDNlcGF0aG5hbWU7XG4yNjgxOlx0XG4yNjgyOlx0XHQvKiBMT09LVVBfQ0FDSEVEIHJlcXVpcmVzIFJDVSwgYXNrIGNhbGxlciB0byByZXRyeSAqL1xuMjY4MzpcdFx0aWYgKHVubGlrZWx5KChmbGFncyBcdTAwMjYgKExPT0tVUF9SQ1UgfCBMT09LVVBfQ0FDSEVEKSkgPT0gTE9PS1VQX0NBQ0hFRCkpXG4yNjg0Olx0XHRcdHJldHVybiBFUlJfUFRSKC1FQUdBSU4pO1xuMjY4NTpcdFxuMjY4NjpcdFx0aWYgKHVubGlrZWx5KCEqcykpXG4yNjg3Olx0XHRcdGZsYWdzIFx1MDAyNj0gfkxPT0tVUF9SQ1U7XG4yNjg4Olx0XHRpZiAoZmxhZ3MgXHUwMDI2IExPT0tVUF9SQ1UpXG4yNjg5Olx0XHRcdHJjdV9yZWFkX2xvY2soKTtcbjI2OTA6XHRcdGVsc2VcbjI2OTE6XHRcdFx0bmQtXHUwMDNlc2VxID0gbmQtXHUwMDNlbmV4dF9zZXEgPSAwO1xuMjY5MjpcdFxuMjY5MzpcdFx0bmQtXHUwMDNlZmxhZ3MgPSBmbGFncztcbjI2OTQ6XHRcdG5kLVx1MDAzZXN0YXRlIHw9IE5EX0pVTVBFRDtcbjI2OTU6XHRcbjI2OTY6XHRcdG5kLVx1MDAzZW1fc2VxID0gX19yZWFkX3NlcWNvdW50X2JlZ2luKFx1MDAyNm1vdW50X2xvY2suc2VxY291bnQpO1xuMjY5NzpcdFx0bmQtXHUwMDNlcl9zZXEgPSBfX3JlYWRfc2VxY291bnRfYmVnaW4oXHUwMDI2cmVuYW1lX2xvY2suc2VxY291bnQpO1xuMjY5ODpcdFx0c21wX3JtYigpO1xuMjY5OTpcdFxuMjcwMDpcdFx0aWYgKHVubGlrZWx5KG5kLVx1MDAzZXN0YXRlIFx1MDAyNiBORF9ST09UX1BSRVNFVCkpIHtcbjI3MDE6XHRcdFx0c3RydWN0IGRlbnRyeSAqcm9vdCA9IG5kLVx1MDAzZXJvb3QuZGVudHJ5O1xuMjcwMjpcdFx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gcm9vdC1cdTAwM2VkX2lub2RlO1xuMjcwMzpcdFx0XHRpZiAoKnMgXHUwMDI2XHUwMDI2IHVubGlrZWx5KCFkX2Nhbl9sb29rdXAocm9vdCkpKVxuMjcwNDpcdFx0XHRcdHJldHVybiBFUlJfUFRSKC1FTk9URElSKTtcbjI3MDU6XHRcdFx0bmQtXHUwMDNlcGF0aCA9IG5kLVx1MDAzZXJvb3Q7XG4yNzA2Olx0XHRcdG5kLVx1MDAzZWlub2RlID0gaW5vZGU7XG4yNzA3Olx0XHRcdGlmIChmbGFncyBcdTAwMjYgTE9PS1VQX1JDVSkge1xuMjcwODpcdFx0XHRcdG5kLVx1MDAzZXNlcSA9IHJlYWRfc2VxY291bnRfYmVnaW4oXHUwMDI2bmQtXHUwMDNlcGF0aC5kZW50cnktXHUwMDNlZF9zZXEpO1xuMjcwOTpcdFx0XHRcdG5kLVx1MDAzZXJvb3Rfc2VxID0gbmQtXHUwMDNlc2VxO1xuMjcxMDpcdFx0XHR9IGVsc2Uge1xuMjcxMTpcdFx0XHRcdHBhdGhfZ2V0KFx1MDAyNm5kLVx1MDAzZXBhdGgpO1xuMjcxMjpcdFx0XHR9XG4yNzEzOlx0XHRcdHJldHVybiBzO1xuMjcxNDpcdFx0fVxuMjcxNTpcdFxuMjcxNjpcdFx0bmQtXHUwMDNlcm9vdC5tbnQgPSBOVUxMO1xuMjcxNzpcdFxuMjcxODpcdFx0LyogQWJzb2x1dGUgcGF0aG5hbWUgLS0gZmV0Y2ggdGhlIHJvb3QgKExPT0tVUF9JTl9ST09UIHVzZXMgbmQtXHUwMDNlZGZkKS4gKi9cbjI3MTk6XHRcdGlmICgqcyA9PSAmIzM5Oy8mIzM5OyBcdTAwMjZcdTAwMjYgbGlrZWx5KCEoZmxhZ3MgXHUwMDI2IExPT0tVUF9JTl9ST09UKSkpIHtcbjI3MjA6XHRcdFx0ZXJyb3IgPSBuZF9qdW1wX3Jvb3QobmQpO1xuMjcyMTpcdFx0XHRpZiAodW5saWtlbHkoZXJyb3IpKVxuMjcyMjpcdFx0XHRcdHJldHVybiBFUlJfUFRSKGVycm9yKTtcbjI3MjM6XHRcdFx0cmV0dXJuIHM7XG4yNzI0Olx0XHR9XG4yNzI1Olx0XG4yNzI2Olx0XHQvKiBSZWxhdGl2ZSBwYXRobmFtZSAtLSBnZXQgdGhlIHN0YXJ0aW5nLXBvaW50IGl0IGlzIHJlbGF0aXZlIHRvLiAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNjo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTc0MgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byB0aGUgYHBhdGhfaW5pdGAgRnVuY3Rpb24qKgoKQWxyaWdodCwgc28gdGhlIGluaXRpYWwgcHJvbXB0IGp1c3QgbnVkZ2VkIG1lIHRvIGtlZXAgZ29pbmcuICYjMzQ7TGV0JiMzOTtzIHJlYWQgdGhlIHJlc3Qgb2YgYHBhdGhfaW5pdGAuJiMzNDsgSSBpbW1lZGlhdGVseSBpbnRlcnByZXQgdGhpcyBhcyBhIGRpcmVjdGl2ZSB0byBkZWx2ZSBkZWVwZXIgaW50byB0aGUgY29kZS4gVGhpcyBhc3N1bWVzLCBuYXR1cmFsbHksIHRoYXQgdGhlIHJlYWRlciBoYXMgcHJldmlvdXNseSBlbmdhZ2VkIHdpdGggdGhlIGZ1bmN0aW9uJiMzOTtzIGluaXRpYWwgcGFydHMgb3IgdGhlIGJyb2FkZXIgY29udGV4dC4gJiMzNDtUaGUgcmVzdCYjMzQ7IGltcGxpZXMgdGhlcmUmIzM5O3MgZXhpc3RpbmcgZmFtaWxpYXJpdHkgb3IgYSBkZWZpbmVkIHNlY3Rpb24gdG8gYmUgYW5hbHl6ZWQuIE15IGZvY3VzIHNoYXJwZW5zLiBJJiMzOTttIG1vdmluZyBiZXlvbmQgYW55IHN1cGVyZmljaWFsIG92ZXJ2aWV3IEkgbWlnaHQgaGF2ZSBkb25lIHByZXZpb3VzbHkgYW5kIEkmIzM5O20gZ2V0dGluZyByZWFkeSB0byBzY3J1dGluaXplIGl0cyBpbnRlcm5hbCB3b3JraW5ncy4gSXQmIzM5O3MgYSBjYWxsIHRvIGV4YW1pbmUgdGhlIGNvZGUmIzM5O3Mgc3Vic2VxdWVudCBsaW5lcywgbG9naWMgZmxvdywgYW5kIHBvdGVudGlhbGx5IHRvIGV4cGxvcmUgYW55IGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9yIGZ1bmN0aW9uIGNhbGxzLiBJdCYjMzk7cyB0aW1lIHRvIGdldCBhIGZlZWwgZm9yIHRoZSByZW1haW5pbmcgc3RydWN0dXJlIGFuZCBpbnRlbnQsIHNvIEkgY2FuIHN5bnRoZXNpemUgYSBob2xpc3RpYyB1bmRlcnN0YW5kaW5nLiBJIHdpbGwgYmUgYXNzZXNzaW5nIHZhcmlhYmxlIHVzYWdlLCBtZW1vcnkgbWFuYWdlbWVudCAoaWYgcmVsZXZhbnQpLCBhbmQgZXJyb3IgaGFuZGxpbmcgYXMgSSBtb3ZlIHRocm91Z2ggaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE2OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvbmFtZWkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI3MjcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjcyNzpcdFx0aWYgKG5kLVx1MDAzZWRmZCA9PSBBVF9GRENXRCkge1xuMjcyODpcdFx0XHRpZiAoZmxhZ3MgXHUwMDI2IExPT0tVUF9SQ1UpIHtcbjI3Mjk6XHRcdFx0XHRzdHJ1Y3QgZnNfc3RydWN0ICpmcyA9IGN1cnJlbnQtXHUwMDNlZnM7XG4yNzMwOlx0XHRcdFx0dW5zaWduZWQgc2VxO1xuMjczMTpcdFxuMjczMjpcdFx0XHRcdGRvIHtcbjI3MzM6XHRcdFx0XHRcdHNlcSA9IHJlYWRfc2VxYmVnaW4oXHUwMDI2ZnMtXHUwMDNlc2VxKTtcbjI3MzQ6XHRcdFx0XHRcdG5kLVx1MDAzZXBhdGggPSBmcy1cdTAwM2Vwd2Q7XG4yNzM1Olx0XHRcdFx0XHRuZC1cdTAwM2Vpbm9kZSA9IG5kLVx1MDAzZXBhdGguZGVudHJ5LVx1MDAzZWRfaW5vZGU7XG4yNzM2Olx0XHRcdFx0XHRuZC1cdTAwM2VzZXEgPSBfX3JlYWRfc2VxY291bnRfYmVnaW4oXHUwMDI2bmQtXHUwMDNlcGF0aC5kZW50cnktXHUwMDNlZF9zZXEpO1xuMjczNzpcdFx0XHRcdH0gd2hpbGUgKHJlYWRfc2VxcmV0cnkoXHUwMDI2ZnMtXHUwMDNlc2VxLCBzZXEpKTtcbjI3Mzg6XHRcdFx0fSBlbHNlIHtcbjI3Mzk6XHRcdFx0XHRnZXRfZnNfcHdkKGN1cnJlbnQtXHUwMDNlZnMsIFx1MDAyNm5kLVx1MDAzZXBhdGgpO1xuMjc0MDpcdFx0XHRcdG5kLVx1MDAzZWlub2RlID0gbmQtXHUwMDNlcGF0aC5kZW50cnktXHUwMDNlZF9pbm9kZTtcbjI3NDE6XHRcdFx0fVxuMjc0MjpcdFx0fSBlbHNlIHtcbjI3NDM6XHRcdFx0LyogQ2FsbGVyIG11c3QgY2hlY2sgZXhlY3V0ZSBwZXJtaXNzaW9ucyBvbiB0aGUgc3RhcnRpbmcgcGF0aCBjb21wb25lbnQgKi9cbjI3NDQ6XHRcdFx0Q0xBU1MoZmRfcmF3LCBmKShuZC1cdTAwM2VkZmQpO1xuMjc0NTpcdFx0XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7XG4yNzQ2Olx0XG4yNzQ3Olx0XHRcdGlmIChmZF9lbXB0eShmKSlcbjI3NDg6XHRcdFx0XHRyZXR1cm4gRVJSX1BUUigtRUJBREYpO1xuMjc0OTpcdFxuMjc1MDpcdFx0XHRpZiAoZmxhZ3MgXHUwMDI2IExPT0tVUF9MSU5LQVRfRU1QVFkpIHtcbjI3NTE6XHRcdFx0XHRpZiAoZmRfZmlsZShmKS1cdTAwM2VmX2NyZWQgIT0gY3VycmVudF9jcmVkKCkgXHUwMDI2XHUwMDI2XG4yNzUyOlx0XHRcdFx0ICAgICFuc19jYXBhYmxlKGZkX2ZpbGUoZiktXHUwMDNlZl9jcmVkLVx1MDAzZXVzZXJfbnMsIENBUF9EQUNfUkVBRF9TRUFSQ0gpKVxuMjc1MzpcdFx0XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7XG4yNzU0Olx0XHRcdH1cbjI3NTU6XHRcbjI3NTY6XHRcdFx0ZGVudHJ5ID0gZmRfZmlsZShmKS1cdTAwM2VmX3BhdGguZGVudHJ5O1xuMjc1NzpcdFxuMjc1ODpcdFx0XHRpZiAoKnMgXHUwMDI2XHUwMDI2IHVubGlrZWx5KCFkX2Nhbl9sb29rdXAoZGVudHJ5KSkpXG4yNzU5Olx0XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT1RESVIpO1xuMjc2MDpcdFxuMjc2MTpcdFx0XHRuZC1cdTAwM2VwYXRoID0gZmRfZmlsZShmKS1cdTAwM2VmX3BhdGg7XG4yNzYyOlx0XHRcdGlmIChmbGFncyBcdTAwMjYgTE9PS1VQX1JDVSkge1xuMjc2MzpcdFx0XHRcdG5kLVx1MDAzZWlub2RlID0gbmQtXHUwMDNlcGF0aC5kZW50cnktXHUwMDNlZF9pbm9kZTtcbjI3NjQ6XHRcdFx0XHRuZC1cdTAwM2VzZXEgPSByZWFkX3NlcWNvdW50X2JlZ2luKFx1MDAyNm5kLVx1MDAzZXBhdGguZGVudHJ5LVx1MDAzZWRfc2VxKTtcbjI3NjU6XHRcdFx0fSBlbHNlIHtcbjI3NjY6XHRcdFx0XHRwYXRoX2dldChcdTAwMjZuZC1cdTAwM2VwYXRoKTtcbjI3Njc6XHRcdFx0XHRuZC1cdTAwM2Vpbm9kZSA9IG5kLVx1MDAzZXBhdGguZGVudHJ5LVx1MDAzZWRfaW5vZGU7XG4yNzY4Olx0XHRcdH1cbjI3Njk6XHRcdH1cbjI3NzA6XHRcbjI3NzE6XHRcdC8qIEZvciBzY29wZWQtbG9va3VwcyB3ZSBuZWVkIHRvIHNldCB0aGUgcm9vdCB0byB0aGUgZGlyZmQgYXMgd2VsbC4gKi9cbjI3NzI6XHRcdGlmICh1bmxpa2VseShmbGFncyBcdTAwMjYgTE9PS1VQX0lTX1NDT1BFRCkpIHtcbjI3NzM6XHRcdFx0bmQtXHUwMDNlcm9vdCA9IG5kLVx1MDAzZXBhdGg7XG4yNzc0Olx0XHRcdGlmIChmbGFncyBcdTAwMjYgTE9PS1VQX1JDVSkge1xuMjc3NTpcdFx0XHRcdG5kLVx1MDAzZXJvb3Rfc2VxID0gbmQtXHUwMDNlc2VxO1xuMjc3NjpcdFx0XHR9IGVsc2Uge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNjo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjg0MgoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDM5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgYHhhdHRyYXRgIFN5c2NhbGwgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvcmUgaXNzdWUgc2VlbXMgdG8gYmUgaG93IHRoZSBmaWxlIGRlc2NyaXB0b3IgKGBkZmRgKSBpcyBoYW5kbGVkIGluIHRoZSBgKnhhdHRyYXRgIHN5c2NhbGxzIHdoZW4gYEFUX0VNUFRZX1BBVEhgIGlzIHVzZWQgYW5kIHRoZSBwYXRoIGlzIGVtcHR5LiBNeSBpbml0aWFsIGh1bmNoIHdhcyBjb3JyZWN0OiB0aGUgcHJvYmxlbSBzdGVtcyBmcm9tIGhvdyB3ZSByZXRyaWV2ZSB0aGUgZmlsZSBkZXNjcmlwdG9yIGl0c2VsZi4KCkkmIzM5O3ZlIHJlYWxpemVkIHRoYXQgdGhlIGBwYXRoX2luaXRgIGZ1bmN0aW9uIHVzZXMgYENMQVNTKGZkX3JhdywgZikobmQtJmd0O2RmZClgIHRvIGdyYWIgdGhlIGZpbGUgZGVzY3JpcHRvci4gQW5kIHRoYXQgYGZkX3Jhd2AgYWN0dWFsbHkgY2FsbHMgYGZkZ2V0X3Jhd2AuIFRoaXMgaXMgdGhlIGtleS4gYGZkZ2V0X3Jhd2AgaXMgaW1wb3J0YW50IGJlY2F1c2UgaXQgc3BlY2lmaWNhbGx5ICphbGxvd3MqIGBPX1BBVEhgIGZpbGUgZGVzY3JpcHRvcnMuIFRoaXMgaXMgd2hhdCYjMzk7cyBsZXR0aW5nIGZ1bmN0aW9ucyBsaWtlIGBmaWxlbmFtZV9sb29rdXBgLCB3aGljaCBtYW55IG9mIHRoZSBgKmF0YCBmdW5jdGlvbnMgdXNlLCBjb3JyZWN0bHkgaGFuZGxlIHRoZXNlIGBPX1BBVEhgIGZpbGUgZGVzY3JpcHRvcnMgd2hlbiBgQVRfRU1QVFlfUEFUSGAgaXMgZ2l2ZW4uCgpUaGUgbmV3bHkgaW1wbGVtZW50ZWQgYHNldHhhdHRyYXRgLCBgZ2V0eGF0dHJhdGAsIGBsaXN0eGF0dHJhdGAsIGFuZCBgcmVtb3ZleGF0dHJhdGAgc3lzY2FsbHMsIGhvd2V2ZXIsIHdlcmUgaW1wbGVtZW50ZWQgd2l0aCBgQ0xBU1MoZmQsIGYpKGRmZClgIHdoZW4gYEFUX0VNUFRZX1BBVEhgIGFuZCB0aGUgcGF0aCB3ZXJlIGJvdGggdXNlZCwgYW5kIHRoYXQgY2F1c2VzIHByb2JsZW1zIHdpdGggYE9fUEFUSGAgZGVzY3JpcHRvcnMuIFRoaXMgbWVhbnMgdGhlc2UgZGlkbiYjMzk7dCB3b3JrIHByb3Blcmx5IHdpdGggYE9fUEFUSGAgZmlsZSBkZXNjcmlwdG9ycy4KClRoZSBwYXRjaCBmaXhlcyB0aGlzIGluY29uc2lzdGVuY3kgYnkgY2hhbmdpbmcgdGhvc2Ugc3lzY2FsbHMgdG8gdXNlIGBDTEFTUyhmZF9tYXliZV9yYXcsIGYpKGRmZCwgcmF3KWAgd2l0aCBgcmF3ID0gdHJ1ZWAuIFRoaXMgaXMgdGhlIGltcG9ydGFudCBwYXJ0OiBzZXR0aW5nIGByYXcgPSB0cnVlYCBhbGxvd3MgdXMgdG8gY29ycmVjdGx5IGhhbmRsZSBgT19QQVRIYCBmaWxlIGRlc2NyaXB0b3JzLCB0aHVzIGFsaWduaW5nIHRoZW0gd2l0aCB0aGUgYmVoYXZpb3Igb2Ygb3RoZXIgYCphdGAgc3lzY2FsbHMuCgpGdW5jdGlvbmFsbHksIHRoaXMgaXMgYSBjbGVhciBlbmhhbmNlbWVudC4gTm93LCBgc2V0eGF0dHJhdGAsIGBnZXR4YXR0cmF0YCwgYGxpc3R4YXR0cmF0YCwgYW5kIGByZW1vdmV4YXR0cmF0YCB3aWxsICpjb3JyZWN0bHkqIG9wZXJhdGUgb24gYE9fUEFUSGAgZmlsZSBkZXNjcmlwdG9ycywgd2hpY2ggd2FzbiYjMzk7dCB0aGUgY2FzZSBwcmV2aW91c2x5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGFuZCBhIGdvb2Qgb25lIGF0IHRoYXQuCgpOb3csIGxldCYjMzk7cyBjb25zaWRlciBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzLiBUaGUgY2hhbmdlcyBhcmUgY29uZmluZWQgdG8gYGZzL3hhdHRyLmNgIGFuZCBgaW5jbHVkZS9saW51eC9maWxlLmhgLiBXaGlsZSB0aGUgY29yZSB4YXR0ciBzeXNjYWxscyBhcmUgYWx3YXlzIHRoZXJlLCByZWdhcmRsZXNzIG9mIGZpbGVzeXN0ZW0sIHRoZXkmIzM5O3JlIG9ubHkgKmVuYWJsZWQqIGlmIHRoZXJlIGlzIHN1cHBvcnQsIHRocm91Z2ggc29tZXRoaW5nIGxpa2UgYENPTkZJR19FWFQ0X0ZTX1hBVFRSYC4gU28sIHRoZSBjb3JlIGlzIGFsd2F5cyB0aGVyZSwgYnV0IHRoZXkgbWlnaHQgbm90ICpkbyogYW55dGhpbmcgb24gYSBzeXN0ZW0gd2l0aG91dCB0aGUgZmlsZXN5c3RlbSBzdXBwb3J0LiBJIGNhbiB0aGluayBvZiBuZWVkaW5nIGBDT05GSUdfVE1QRlNfWEFUVFJgIGZvciB0ZXN0aW5nIHhhdHRycyBvbiB0bXBmcy4gQnV0IHRoZSBjb3JlIHN5c2NhbGxzIHRoZW1zZWx2ZXMgYXJlIGFsd2F5cyBlbmFibGVkLiBJIHNob3VsZCBsb29rIGludG8gd2hhdCB3b3VsZCBiZSBuZWVkZWQgc3BlY2lmaWNhbGx5IGZvciBgc2V0eGF0dHJhdGAgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyB1bmludGVuZGVkIGNvbnNlcXVlbmNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMTY6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIC4qWEFUVFImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvS2NvbmZpZz0xODE9Y29uZmlnIFRNUEZTX1BPU0lYX0FDTFxuLS1cbmZzL0tjb25maWctMTk4LVxuZnMvS2NvbmZpZzoxOTk6Y29uZmlnIFRNUEZTX1hBVFRSXG5mcy9LY29uZmlnLTIwMC1cdGJvb2wgXCYjMzQ7VG1wZnMgZXh0ZW5kZWQgYXR0cmlidXRlc1wmIzM0O1xuLS1cbmZzL2Vyb2ZzL0tjb25maWc9NTA9Y29uZmlnIEVST0ZTX0ZTX0RFQlVHXG4tLVxuZnMvZXJvZnMvS2NvbmZpZy01OS1cbmZzL2Vyb2ZzL0tjb25maWc6NjA6Y29uZmlnIEVST0ZTX0ZTX1hBVFRSXG5mcy9lcm9mcy9LY29uZmlnLTYxLVx0Ym9vbCBcJiMzNDtFUk9GUyBleHRlbmRlZCBhdHRyaWJ1dGVzXCYjMzQ7XG4tLVxuZnMvZXh0Mi9LY29uZmlnPTI9Y29uZmlnIEVYVDJfRlNcbi0tXG5mcy9leHQyL0tjb25maWctMjAtXG5mcy9leHQyL0tjb25maWc6MjE6Y29uZmlnIEVYVDJfRlNfWEFUVFJcbmZzL2V4dDIvS2NvbmZpZy0yMi1cdGJvb2wgXCYjMzQ7RXh0MiBleHRlbmRlZCBhdHRyaWJ1dGVzXCYjMzQ7XG4tLVxuZnMvZjJmcy9LY29uZmlnPTMxPWNvbmZpZyBGMkZTX1NUQVRfRlNcbi0tXG5mcy9mMmZzL0tjb25maWctNDMtXG5mcy9mMmZzL0tjb25maWc6NDQ6Y29uZmlnIEYyRlNfRlNfWEFUVFJcbmZzL2YyZnMvS2NvbmZpZy00NS1cdGJvb2wgXCYjMzQ7RjJGUyBleHRlbmRlZCBhdHRyaWJ1dGVzXCYjMzQ7XG4tLVxuZnMvamZmczIvS2NvbmZpZz01Mz1jb25maWcgSkZGUzJfU1VNTUFSWVxuLS1cbmZzL2pmZnMyL0tjb25maWctNjUtXG5mcy9qZmZzMi9LY29uZmlnOjY2OmNvbmZpZyBKRkZTMl9GU19YQVRUUlxuZnMvamZmczIvS2NvbmZpZy02Ny1cdGJvb2wgXCYjMzQ7SkZGUzIgWEFUVFIgc3VwcG9ydFwmIzM0O1xuLS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZz04Mz1jb25maWcgQ0lGU19VUENBTExcbi0tXG5mcy9zbWIvY2xpZW50L0tjb25maWctOTEtXG5mcy9zbWIvY2xpZW50L0tjb25maWc6OTI6Y29uZmlnIENJRlNfWEFUVFJcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy05My1cdGJvb2wgXCYjMzQ7Q0lGUyBleHRlbmRlZCBhdHRyaWJ1dGVzXCYjMzQ7XG4tLVxuZnMvc3F1YXNoZnMvS2NvbmZpZz0xMjk9Y29uZmlnIFNRVUFTSEZTX01PVU5UX0RFQ09NUF9USFJFQURTXG4tLVxuZnMvc3F1YXNoZnMvS2NvbmZpZy0xNDEtXG5mcy9zcXVhc2hmcy9LY29uZmlnOjE0Mjpjb25maWcgU1FVQVNIRlNfWEFUVFJcbmZzL3NxdWFzaGZzL0tjb25maWctMTQzLVx0Ym9vbCBcJiMzNDtTcXVhc2hmcyBYQVRUUiBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvdWJpZnMvS2NvbmZpZz01Mj1jb25maWcgVUJJRlNfQVRJTUVfU1VQUE9SVFxuLS1cbmZzL3ViaWZzL0tjb25maWctNjUtXG5mcy91Ymlmcy9LY29uZmlnOjY2OmNvbmZpZyBVQklGU19GU19YQVRUUlxuZnMvdWJpZnMvS2NvbmZpZy02Ny1cdGJvb2wgXCYjMzQ7VUJJRlMgWEFUVFIgc3VwcG9ydFwmIzM0O1xuLS1cbnNlY3VyaXR5L2ludGVncml0eS9ldm0vS2NvbmZpZz0xNz1jb25maWcgRVZNX0FUVFJfRlNVVUlEXG4tLVxuc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9LY29uZmlnLTMwLVxuc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9LY29uZmlnOjMxOmNvbmZpZyBFVk1fRVhUUkFfU01BQ0tfWEFUVFJTXG5zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL0tjb25maWctMzItXHRib29sIFwmIzM0O0FkZGl0aW9uYWwgU01BQ0sgeGF0dHJzXCYjMzQ7XG4tLVxuc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9LY29uZmlnLTQ3LVxuc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9LY29uZmlnOjQ4OmNvbmZpZyBFVk1fQUREX1hBVFRSU1xuc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9LY29uZmlnLTQ5LVx0Ym9vbCBcJiMzNDtBZGQgYWRkaXRpb25hbCBFVk0gZXh0ZW5kZWQgYXR0cmlidXRlcyBhdCBydW50aW1lXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE2OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0NjQ4CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBYYXR0ciBDb21waWxhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IGlmIHRoZXJlJiMzOTtzIGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb24gdGhhdCBnYXRlcyB0aGUgY29tcGlsYXRpb24gb2YgdGhlIGNvcmUgZXh0ZW5kZWQgYXR0cmlidXRlICh4YXR0cikgc3lzdGVtIGNhbGxzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCYjMzk7cyBwcm9iYWJseSBub3QsIGJ1dCBJIG5lZWQgdG8gY29uZmlybSB0aGF0LiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZS4gU3BlY2lmaWNhbGx5LCBgZnMveGF0dHIuY2AgaXMgdGhlIG9idmlvdXMgcGxhY2UgdG8gc3RhcnQuIEkmIzM5O2xsIHNjYW4gdGhyb3VnaCB0aGF0IGZpbGUgYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IGAjaWZkZWZgIG9yIHNpbWlsYXIgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgdGhhdCBjb25kaXRpb25hbGx5IGNvbXBpbGUgdGhlIHJlbGV2YW50IGZ1bmN0aW9ucy4gVGhhdCBzaG91bGQgcXVpY2tseSB0ZWxsIG1lIHdoZXRoZXIgdGhlIHhhdHRyIHN5c3RlbSBjYWxscyBhcmUgZnVuZGFtZW50YWxseSBidWlsdCBpbnRvIHRoZSBrZXJuZWwgb3IgaWYgdGhlaXIgcHJlc2VuY2UgaXMgY29udHJvbGxlZCBieSBhIHNwZWNpZmljIGBDT05GSUdfYCBvcHRpb24uIFRoaXMgaXMgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGNoZWNrLCBidXQgYSBuZWNlc3Nhcnkgc3RlcCB0byB1bmRlcnN0YW5kIHRoZSBidWlsZCBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNjo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4YXR0clxcLm8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9rYnVpbGQvbWFrZWZpbGVzLnJzdD0xNzM9RXhhbXBsZTo6XG4tLVxuRG9jdW1lbnRhdGlvbi9rYnVpbGQvbWFrZWZpbGVzLnJzdC0xNzgtICAgIG5hbWVpLm8gc3VwZXIubyBzeW1saW5rLm9cbkRvY3VtZW50YXRpb24va2J1aWxkL21ha2VmaWxlcy5yc3Q6MTc5OiAgZXh0Mi0kKENPTkZJR19FWFQyX0ZTX1hBVFRSKSAmIzQzOz0geGF0dHIubyB4YXR0cl91c2VyLm8gXFxcbkRvY3VtZW50YXRpb24va2J1aWxkL21ha2VmaWxlcy5yc3QtMTgwLSAgICB4YXR0cl90cnVzdGVkLm9cbkRvY3VtZW50YXRpb24va2J1aWxkL21ha2VmaWxlcy5yc3QtMTgxLVxuRG9jdW1lbnRhdGlvbi9rYnVpbGQvbWFrZWZpbGVzLnJzdDoxODI6SW4gdGhpcyBleGFtcGxlLCB4YXR0ci5vLCB4YXR0cl91c2VyLm8gYW5kIHhhdHRyX3RydXN0ZWQubyBhcmUgb25seVxuRG9jdW1lbnRhdGlvbi9rYnVpbGQvbWFrZWZpbGVzLnJzdC0xODMtcGFydCBvZiB0aGUgY29tcG9zaXRlIG9iamVjdCBleHQyLm8gaWYgJChDT05GSUdfRVhUMl9GU19YQVRUUilcbi0tXG5Eb2N1bWVudGF0aW9uL2tidWlsZC9tb2R1bGVzLnJzdD01MDE9VGVzdGluZyBmb3IgQ09ORklHX0ZPT19CQVJcbi0tXG5Eb2N1bWVudGF0aW9uL2tidWlsZC9tb2R1bGVzLnJzdC01MTItXHRcdGV4dDIteSA6PSBiYWxsb2MubyBiaXRtYXAubyBkaXIub1xuRG9jdW1lbnRhdGlvbi9rYnVpbGQvbW9kdWxlcy5yc3Q6NTEzOlx0XHRleHQyLSQoQ09ORklHX0VYVDJfRlNfWEFUVFIpICYjNDM7PSB4YXR0ci5vXG4tLVxuZnMvOXAvTWFrZWZpbGU9Mj1vYmotJChDT05GSUdfOVBfRlMpIDo9IDlwLm9cbi0tXG5mcy85cC9NYWtlZmlsZS0xMy1cdGZpZC5vICBcXFxuZnMvOXAvTWFrZWZpbGU6MTQ6XHR4YXR0ci5vXG5mcy85cC9NYWtlZmlsZS0xNS1cbi0tXG5mcy9NYWtlZmlsZT0xMD1vYmoteSA6PVx0b3Blbi5vIHJlYWRfd3JpdGUubyBmaWxlX3RhYmxlLm8gc3VwZXIubyBcXFxuLS1cbmZzL01ha2VmaWxlLTEzLVx0XHRhdHRyLm8gYmFkX2lub2RlLm8gZmlsZS5vIGZpbGVzeXN0ZW1zLm8gbmFtZXNwYWNlLm8gXFxcbmZzL01ha2VmaWxlOjE0Olx0XHRzZXFfZmlsZS5vIHhhdHRyLm8gbGliZnMubyBmcy13cml0ZWJhY2subyBcXFxuZnMvTWFrZWZpbGUtMTUtXHRcdHBub2RlLm8gc3BsaWNlLm8gc3luYy5vIHV0aW1lcy5vIGRfcGF0aC5vIFxcXG4tLVxuZnMvYWZzL01ha2VmaWxlPTY9a2Fmcy15IDo9IFxcXG4tLVxuZnMvYWZzL01ha2VmaWxlLTQxLVx0d3JpdGUubyBcXFxuZnMvYWZzL01ha2VmaWxlOjQyOlx0eGF0dHIubyBcXFxuZnMvYWZzL01ha2VmaWxlLTQzLVx0eWZzY2xpZW50Lm9cbi0tXG5mcy9idHJmcy9NYWtlZmlsZT0yND1idHJmcy15ICYjNDM7PSBzdXBlci5vIGN0cmVlLm8gZXh0ZW50LXRyZWUubyBwcmludC10cmVlLm8gcm9vdC10cmVlLm8gZGlyLWl0ZW0ubyBcXFxuLS1cbmZzL2J0cmZzL01ha2VmaWxlLTI2LVx0ICAgdHJhbnNhY3Rpb24ubyBpbm9kZS5vIGZpbGUubyBkZWZyYWcubyBcXFxuZnMvYnRyZnMvTWFrZWZpbGU6Mjc6XHQgICBleHRlbnRfbWFwLm8gc3lzZnMubyBhY2Nlc3NvcnMubyB4YXR0ci5vIG9yZGVyZWQtZGF0YS5vIFxcXG5mcy9idHJmcy9NYWtlZmlsZS0yOC1cdCAgIGV4dGVudF9pby5vIHZvbHVtZXMubyBhc3luYy10aHJlYWQubyBpb2N0bC5vIGxvY2tpbmcubyBvcnBoYW4ubyBcXFxuLS1cbmZzL2NhY2hlZmlsZXMvTWFrZWZpbGU9Nj1jYWNoZWZpbGVzLXkgOj0gXFxcbi0tXG5mcy9jYWNoZWZpbGVzL01ha2VmaWxlLTE1LVx0dm9sdW1lLm8gXFxcbmZzL2NhY2hlZmlsZXMvTWFrZWZpbGU6MTY6XHR4YXR0ci5vXG5mcy9jYWNoZWZpbGVzL01ha2VmaWxlLTE3LVxuLS1cbmZzL2NlcGgvTWFrZWZpbGU9OD1jZXBoLXkgOj0gc3VwZXIubyBpbm9kZS5vIGRpci5vIGZpbGUubyBsb2Nrcy5vIGFkZHIubyBpb2N0bC5vIFxcXG5mcy9jZXBoL01ha2VmaWxlOjk6XHRleHBvcnQubyBjYXBzLm8gc25hcC5vIHhhdHRyLm8gcXVvdGEubyBpby5vIFxcXG5mcy9jZXBoL01ha2VmaWxlLTEwLVx0bWRzX2NsaWVudC5vIG1kc21hcC5vIHN0cmluZ3MubyBjZXBoX2ZyYWcubyBcXFxuLS1cbmZzL2NlcGgveGF0dHIuYz0xMTA2PXN0YXRpYyBpbnQgY2VwaF9zeW5jX3NldHhhdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsXG4tLVxuZnMvY2VwaC94YXR0ci5jLTExNTItXHRcdHJlcS1cdTAwM2VyX2FyZ3Muc2V0eGF0dHIuZmxhZ3MgPSBjcHVfdG9fbGUzMihmbGFncyk7XG5mcy9jZXBoL3hhdHRyLmM6MTE1MzpcdFx0cmVxLVx1MDAzZXJfYXJncy5zZXR4YXR0ci5vc2RtYXBfZXBvY2ggPVxuZnMvY2VwaC94YXR0ci5jLTExNTQtXHRcdFx0Y3B1X3RvX2xlMzIob3NkYy1cdTAwM2Vvc2RtYXAtXHUwMDNlZXBvY2gpO1xuLS1cbmZzL2Vyb2ZzL01ha2VmaWxlPTQ9ZXJvZnMtb2JqcyA6PSBzdXBlci5vIGlub2RlLm8gZGF0YS5vIG5hbWVpLm8gZGlyLm8gc3lzZnMub1xuZnMvZXJvZnMvTWFrZWZpbGU6NTplcm9mcy0kKENPTkZJR19FUk9GU19GU19YQVRUUikgJiM0Mzs9IHhhdHRyLm9cbmZzL2Vyb2ZzL01ha2VmaWxlLTYtZXJvZnMtJChDT05GSUdfRVJPRlNfRlNfWklQKSAmIzQzOz0gZGVjb21wcmVzc29yLm8gem1hcC5vIHpkYXRhLm8genV0aWwub1xuLS1cbmZzL2V4dDIvTWFrZWZpbGU9MTI9Q0ZMQUdTX3RyYWNlLm8gOj0gLUkkKHNyYylcbmZzL2V4dDIvTWFrZWZpbGUtMTMtXG5mcy9leHQyL01ha2VmaWxlOjE0OmV4dDItJChDT05GSUdfRVhUMl9GU19YQVRUUilcdCAmIzQzOz0geGF0dHIubyB4YXR0cl91c2VyLm8geGF0dHJfdHJ1c3RlZC5vXG5mcy9leHQyL01ha2VmaWxlLTE1LWV4dDItJChDT05GSUdfRVhUMl9GU19QT1NJWF9BQ0wpICYjNDM7PSBhY2wub1xuLS1cbmZzL2V4dDQvTWFrZWZpbGU9OD1leHQ0LXlcdDo9IGJhbGxvYy5vIGJpdG1hcC5vIGJsb2NrX3ZhbGlkaXR5Lm8gZGlyLm8gZXh0NF9qYmQyLm8gZXh0ZW50cy5vIFxcXG4tLVxuZnMvZXh0NC9NYWtlZmlsZS0xMS1cdFx0bW1wLm8gbW92ZV9leHRlbnQubyBuYW1laS5vIHBhZ2UtaW8ubyByZWFkcGFnZS5vIHJlc2l6ZS5vIFxcXG5mcy9leHQ0L01ha2VmaWxlOjEyOlx0XHRzdXBlci5vIHN5bWxpbmsubyBzeXNmcy5vIHhhdHRyLm8geGF0dHJfaHVyZC5vIHhhdHRyX3RydXN0ZWQubyBcXFxuZnMvZXh0NC9NYWtlZmlsZS0xMy1cdFx0eGF0dHJfdXNlci5vIGZhc3RfY29tbWl0Lm8gb3JwaGFuLm9cbi0tXG5mcy9mMmZzL01ha2VmaWxlPTc9ZjJmcy0kKENPTkZJR19GMkZTX1NUQVRfRlMpICYjNDM7PSBkZWJ1Zy5vXG5mcy9mMmZzL01ha2VmaWxlOjg6ZjJmcy0kKENPTkZJR19GMkZTX0ZTX1hBVFRSKSAmIzQzOz0geGF0dHIub1xuZnMvZjJmcy9NYWtlZmlsZS05LWYyZnMtJChDT05GSUdfRjJGU19GU19QT1NJWF9BQ0wpICYjNDM7PSBhY2wub1xuLS1cbmZzL2Z1c2UvTWFrZWZpbGU9MTM9ZnVzZS15IDo9IHRyYWNlLm9cdCMgcHV0IHRyYWNlLm8gZmlyc3Qgc28gd2Ugc2VlIGZ0cmFjZSBlcnJvcnMgc29vbmVyXG5mcy9mdXNlL01ha2VmaWxlOjE0OmZ1c2UteSAmIzQzOz0gZGV2Lm8gZGlyLm8gZmlsZS5vIGlub2RlLm8gY29udHJvbC5vIHhhdHRyLm8gYWNsLm8gcmVhZGRpci5vIGlvY3RsLm8gcmVxX3RpbWVvdXQubyByZXEub1xuZnMvZnVzZS9NYWtlZmlsZS0xNS1mdXNlLXkgJiM0Mzs9IHBvbGwubyBub3RpZnkub1xuLS1cbmZzL2dmczIvTWFrZWZpbGU9Mz1vYmotJChDT05GSUdfR0ZTMl9GUykgJiM0Mzs9IGdmczIub1xuZnMvZ2ZzMi9NYWtlZmlsZTo0OmdmczIteSA6PSBhY2wubyBibWFwLm8gZGlyLm8geGF0dHIubyBnbG9jay5vIFxcXG5mcy9nZnMyL01ha2VmaWxlLTUtXHRnbG9wcy5vIGxvZy5vIGxvcHMubyBtYWluLm8gbWV0YV9pby5vIFxcXG4tLVxuZnMvaGZzcGx1cy9NYWtlZmlsZT04PWhmc3BsdXMtb2JqcyA6PSBzdXBlci5vIG9wdGlvbnMubyBpbm9kZS5vIGlvY3RsLm8gZXh0ZW50cy5vIGNhdGFsb2cubyBkaXIubyBidHJlZS5vIFxcXG5mcy9oZnNwbHVzL01ha2VmaWxlLTktXHRcdGJub2RlLm8gYnJlYy5vIGJmaW5kLm8gdGFibGVzLm8gdW5pY29kZS5vIHdyYXBwZXIubyBiaXRtYXAubyBwYXJ0X3RibC5vIFxcXG5mcy9oZnNwbHVzL01ha2VmaWxlOjEwOlx0XHRhdHRyaWJ1dGVzLm8geGF0dHIubyB4YXR0cl91c2VyLm8geGF0dHJfc2VjdXJpdHkubyB4YXR0cl90cnVzdGVkLm9cbmZzL2hmc3BsdXMvTWFrZWZpbGUtMTEtXG4tLVxuZnMvamZmczIvTWFrZWZpbGU9MTQ9amZmczItJChDT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVIpXHQmIzQzOz0gd2J1Zi5vXG5mcy9qZmZzMi9NYWtlZmlsZToxNTpqZmZzMi0kKENPTkZJR19KRkZTMl9GU19YQVRUUilcdFx0JiM0Mzs9IHhhdHRyLm8geGF0dHJfdHJ1c3RlZC5vIHhhdHRyX3VzZXIub1xuZnMvamZmczIvTWFrZWZpbGUtMTYtamZmczItJChDT05GSUdfSkZGUzJfRlNfU0VDVVJJVFkpXHQmIzQzOz0gc2VjdXJpdHkub1xuLS1cbmZzL2pmcy9NYWtlZmlsZT04PWpmcy15ICAgIDo9IHN1cGVyLm8gZmlsZS5vIGlub2RlLm8gbmFtZWkubyBqZnNfbW91bnQubyBqZnNfdW1vdW50Lm8gXFxcbi0tXG5mcy9qZnMvTWFrZWZpbGUtMTItXHQgICAgamZzX2xvZ21nci5vIGpmc190eG5tZ3IubyBcXFxuZnMvamZzL01ha2VmaWxlOjEzOlx0ICAgIHJlc2l6ZS5vIHhhdHRyLm8gaW9jdGwub1xuZnMvamZzL01ha2VmaWxlLTE0LVxuLS1cbmZzL25mcy9NYWtlZmlsZT0zMz1uZnN2NC0kKENPTkZJR19ORlNfVjRfMClcdCYjNDM7PSBuZnM0MGNsaWVudC5vIG5mczQwcHJvYy5vXG5mcy9uZnMvTWFrZWZpbGU6MzQ6bmZzdjQtJChDT05GSUdfTkZTX1Y0XzIpXHQmIzQzOz0gbmZzNDJwcm9jLm8gbmZzNDJ4YXR0ci5vXG5mcy9uZnMvTWFrZWZpbGUtMzUtXG4tLVxuZnMvbnRmczMvTWFrZWZpbGU9MzM9bnRmczMteSA6PVx0YXR0cmliLm8gXFxcbi0tXG5mcy9udGZzMy9NYWtlZmlsZS00OS1cdFx0dXBjYXNlLm8gXFxcbmZzL250ZnMzL01ha2VmaWxlOjUwOlx0XHR4YXR0ci5vXG5mcy9udGZzMy9NYWtlZmlsZS01MS1cbi0tXG5mcy9vY2ZzMi9NYWtlZmlsZT0xMT1vY2ZzMi1vYmpzIDo9IFxcXG4tLVxuZnMvb2NmczIvTWFrZWZpbGUtNDEtXHRxdW90YV9nbG9iYWwub1x0XHRcXFxuZnMvb2NmczIvTWFrZWZpbGU6NDI6XHR4YXR0ci5vXHRcdFx0XFxcbmZzL29jZnMyL01ha2VmaWxlLTQzLVx0YWNsLm9cdFxcXG4tLVxuZnMvb3JhbmdlZnMvTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfT1JBTkdFRlNfRlMpICYjNDM7PSBvcmFuZ2Vmcy5vXG5mcy9vcmFuZ2Vmcy9NYWtlZmlsZS03LVxuZnMvb3JhbmdlZnMvTWFrZWZpbGU6ODpvcmFuZ2Vmcy1vYmpzIDo9IGFjbC5vIGZpbGUubyBvcmFuZ2Vmcy1jYWNoZS5vIG9yYW5nZWZzLXV0aWxzLm8geGF0dHIubyBcXFxuZnMvb3JhbmdlZnMvTWFrZWZpbGUtOS1cdFx0IGRjYWNoZS5vIGlub2RlLm8gb3JhbmdlZnMtc3lzZnMubyBvcmFuZ2Vmcy1tb2QubyBzdXBlci5vIFxcXG4tLVxuZnMvc21iL2NsaWVudC9NYWtlZmlsZT0xOT0kKG9iaikvY2lmc19zcG5lZ29fbmVndG9rZW5pbml0LmFzbjEubzogJChvYmopL2NpZnNfc3BuZWdvX25lZ3Rva2VuaW5pdC5hc24xLmMgJChvYmopL2NpZnNfc3BuZWdvX25lZ3Rva2VuaW5pdC5hc24xLmhcbmZzL3NtYi9jbGllbnQvTWFrZWZpbGUtMjAtXG5mcy9zbWIvY2xpZW50L01ha2VmaWxlOjIxOmNpZnMtJChDT05GSUdfQ0lGU19YQVRUUikgJiM0Mzs9IHhhdHRyLm9cbmZzL3NtYi9jbGllbnQvTWFrZWZpbGUtMjItXG4tLVxuZnMvc3F1YXNoZnMvTWFrZWZpbGU9MTM9c3F1YXNoZnMtJChDT05GSUdfU1FVQVNIRlNfREVDT01QX01VTFRJX1BFUkNQVSkgJiM0Mzs9IGRlY29tcHJlc3Nvcl9tdWx0aV9wZXJjcHUub1xuZnMvc3F1YXNoZnMvTWFrZWZpbGU6MTQ6c3F1YXNoZnMtJChDT05GSUdfU1FVQVNIRlNfWEFUVFIpICYjNDM7PSB4YXR0ci5vIHhhdHRyX2lkLm9cbmZzL3NxdWFzaGZzL01ha2VmaWxlLTE1LXNxdWFzaGZzLSQoQ09ORklHX1NRVUFTSEZTX0xaNCkgJiM0Mzs9IGx6NF93cmFwcGVyLm9cbi0tXG5mcy91Ymlmcy9NYWtlZmlsZT05PXViaWZzLSQoQ09ORklHX0ZTX0VOQ1JZUFRJT04pICYjNDM7PSBjcnlwdG8ub1xuZnMvdWJpZnMvTWFrZWZpbGU6MTA6dWJpZnMtJChDT05GSUdfVUJJRlNfRlNfWEFUVFIpICYjNDM7PSB4YXR0ci5vXG5mcy91Ymlmcy9NYWtlZmlsZS0xMS11Ymlmcy0kKENPTkZJR19VQklGU19GU19BVVRIRU5USUNBVElPTikgJiM0Mzs9IGF1dGgub1xuLS1cbmZzL3hmcy9NYWtlZmlsZT03MT14ZnMteVx0XHRcdFx0JiM0Mzs9IHhmc19hb3BzLm8gXFxcbi0tXG5mcy94ZnMvTWFrZWZpbGUtMTA5LVx0XHRcdFx0ICAgeGZzX3ZlcmlmeV9tZWRpYS5vIFxcXG5mcy94ZnMvTWFrZWZpbGU6MTEwOlx0XHRcdFx0ICAgeGZzX3hhdHRyLm9cbmZzL3hmcy9NYWtlZmlsZS0xMTEtXG4tLVxuZnMveGZzL01ha2VmaWxlPTE2OD14ZnMteVx0XHRcdFx0JiM0Mzs9ICQoYWRkcHJlZml4IHNjcnViLywgXFxcbi0tXG5mcy94ZnMvTWFrZWZpbGUtMTg1LVx0XHRcdFx0ICAgaXNjYW4ubyBcXFxuZnMveGZzL01ha2VmaWxlOjE4NjpcdFx0XHRcdCAgIGxpc3R4YXR0ci5vIFxcXG5mcy94ZnMvTWFrZWZpbGUtMTg3LVx0XHRcdFx0ICAgbWV0YXBhdGgubyBcXFxuLS1cbmlvX3VyaW5nL01ha2VmaWxlPTk9b2JqLSQoQ09ORklHX0lPX1VSSU5HKVx0XHQmIzQzOz0gaW9fdXJpbmcubyBvcGRlZi5vIGtidWYubyByc3JjLm8gbm90aWYubyBcXFxuLS1cbmlvX3VyaW5nL01ha2VmaWxlLTExLVx0XHRcdFx0XHR0dy5vIHdhaXQubyBldmVudGZkLm8gdXJpbmdfY21kLm8gXFxcbmlvX3VyaW5nL01ha2VmaWxlOjEyOlx0XHRcdFx0XHRvcGVuY2xvc2UubyBzcXBvbGwubyB4YXR0ci5vIG5vcC5vIFxcXG5pb191cmluZy9NYWtlZmlsZS0xMy1cdFx0XHRcdFx0ZnMubyBzcGxpY2UubyBzeW5jLm8gbXNnX3JpbmcubyBcXFxuLS1cbm5ldC9jZXBoL29zZF9jbGllbnQuYz0zNzE9c3RhdGljIHZvaWQgb3NkX3JlcV9vcF9kYXRhX3JlbGVhc2Uoc3RydWN0IGNlcGhfb3NkX3JlcXVlc3QgKm9zZF9yZXEsXG4tLVxubmV0L2NlcGgvb3NkX2NsaWVudC5jLTM5My1cdGNhc2UgQ0VQSF9PU0RfT1BfQ01QWEFUVFI6XG5uZXQvY2VwaC9vc2RfY2xpZW50LmM6Mzk0Olx0XHRjZXBoX29zZF9kYXRhX3JlbGVhc2UoXHUwMDI2b3AtXHUwMDNleGF0dHIub3NkX2RhdGEpO1xubmV0L2NlcGgvb3NkX2NsaWVudC5jLTM5NS1cdFx0YnJlYWs7XG4tLVxubmV0L2NlcGgvb3NkX2NsaWVudC5jPTg0ND1pbnQgb3NkX3JlcV9vcF94YXR0cl9pbml0KHN0cnVjdCBjZXBoX29zZF9yZXF1ZXN0ICpvc2RfcmVxLCB1bnNpZ25lZCBpbnQgd2hpY2gsXG4tLVxubmV0L2NlcGgvb3NkX2NsaWVudC5jLTg3NC1cbm5ldC9jZXBoL29zZF9jbGllbnQuYzo4NzU6XHRjZXBoX29zZF9kYXRhX3BhZ2VsaXN0X2luaXQoXHUwMDI2b3AtXHUwMDNleGF0dHIub3NkX2RhdGEsIHBhZ2VsaXN0KTtcbm5ldC9jZXBoL29zZF9jbGllbnQuYy04NzYtXHRvcC1cdTAwM2VpbmRhdGFfbGVuID0gcGF5bG9hZF9sZW47XG4tLVxubmV0L2NlcGgvb3NkX2NsaWVudC5jPTIwNDE9c3RhdGljIHZvaWQgc2V0dXBfcmVxdWVzdF9kYXRhKHN0cnVjdCBjZXBoX29zZF9yZXF1ZXN0ICpyZXEpXG4tLVxubmV0L2NlcGgvb3NkX2NsaWVudC5jLTIwNjQtXHRcdFx0Y2VwaF9vc2RjX21zZ19kYXRhX2FkZChyZXF1ZXN0X21zZyxcbm5ldC9jZXBoL29zZF9jbGllbnQuYzoyMDY1Olx0XHRcdFx0XHQgICAgICAgXHUwMDI2b3AtXHUwMDNleGF0dHIub3NkX2RhdGEpO1xubmV0L2NlcGgvb3NkX2NsaWVudC5jLTIwNjYtXHRcdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE2OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4MzA4CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNjg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgUGxhbiBmb3IgRXh0ZW5kZWQgQXR0cmlidXRlcyB3aXRoIE9fUEFUSCBhbmQgQVRfRU1QVFlfUEFUSCoqCgpPa2F5LCBzbyBgZnMvTWFrZWZpbGVgIGFsd2F5cyBpbmNsdWRlcyBgeGF0dHIub2AsIG1lYW5pbmcgdGhlIGV4dGVuZGVkIGF0dHJpYnV0ZSBjb2RlIGlzIGFsd2F5cyBjb21waWxlZC4gVGhhdCYjMzk7cyBnb29kOyBpdCBzaW1wbGlmaWVzIHRoaW5ncy4gVGhlIGBzZXR4YXR0cmF0YCwgYGdldHhhdHRyYXRgLCBgbGlzdHhhdHRyYXRgLCBhbmQgYHJlbW92ZXhhdHRyYXRgIHN5c2NhbGxzIGFyZSBhbHdheXMgYXZhaWxhYmxlLgoKVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyBlbmFibGluZyBgT19QQVRIYCBmaWxlIGRlc2NyaXB0b3JzIHdpdGggYEFUX0VNUFRZX1BBVEhgIGluIHRob3NlIGAqeGF0dHJhdGAgc3lzY2FsbHMuIFRoYXQmIzM5O3MgYSBkZWZpbml0ZSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHJlcXVpcmVzIGZ1enppbmcuCgpNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGZvY3VzIG9uIGBwYXRoX3NldHhhdHRyYXRgLCBgcGF0aF9nZXR4YXR0cmF0YCwgYHBhdGhfbGlzdHhhdHRyYXRgLCBhbmQgYHBhdGhfcmVtb3ZleGF0dHJhdGAsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZG9uJiMzOTt0IG1pc3MgYW55dGhpbmcuIFdhaXQsIHRoZSAqYWN0dWFsKiBzeXNjYWxscywgZnJvbSB0aGUgdXNlciYjMzk7cyBwZXJzcGVjdGl2ZSwgYXJlIGBzZXR4YXR0cmF0YCwgYGdldHhhdHRyYXRgLCBgbGlzdHhhdHRyYXRgLCBgcmVtb3ZleGF0dHJhdGAuIEkgbmVlZCB0byBjb3ZlciBib3RoLiBObywgbGV0JiMzOTtzIHN0aWNrIHdpdGggdGhlIGZ1bmN0aW9ucyBiZWNhdXNlIHRob3NlIGZ1bmN0aW9ucyBhcmUgdGhlIG9uZXMgdGhhdCBhY3R1YWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGFuZCB0YWtlIHRoZSByYXcgcGFyYW1ldGVyIGFuZCBzbyBJIHRoaW5rIHRob3NlIGFyZSB0aGUgYmVzdCBmb2N1cyBzeW1ib2xzLgoKTm93LCB3aGlsZSB0aGlua2luZyBhYm91dCB0aGlzLCBJIHJlYWxpemUgaXQmIzM5O3Mgd29ydGggY292ZXJpbmcgdGhlIHN5c2NhbGwgd3JhcHBlcnMgdG9vOiBgc3lzX3NldHhhdHRyYXRgLCBgc3lzX2dldHhhdHRyYXRgLCBgc3lzX2xpc3R4YXR0cmF0YCwgYHN5c19yZW1vdmV4YXR0cmF0YC4gQWggcmlnaHQsIGBTWVNDQUxMX0RFRklORTZgIGdlbmVyYXRlcyB0aGUgYWN0dWFsIHN5c2NhbGwgZnVuY3Rpb25zLiBCZXR0ZXIgdG8gZm9jdXMgb24gdGhlIGBwYXRoXypgIGZ1bmN0aW9ucy4KClNpbmNlIHRoZSB4YXR0ciBjb2RlIGlzIGFsd2F5cyBjb21waWxlZCwgSSBkb24mIzM5O3QgbmVlZCBhbnkgc3BlY2lhbCBjb25maWd1cmF0aW9ucyB0byBlbmFibGUgaXQuIEJ1dCwgdG8gdGVzdCB0aGlzIG5ldyBmdW5jdGlvbmFsaXR5LCBJJiMzOTtsbCBuZWVkIGEgZmlsZXN5c3RlbSB0aGF0IHN1cHBvcnRzIHhhdHRycy4gYEVYVDRfRlNfWEFUVFJgIG9yIGBUTVBGU19YQVRUUmAgd291bGQgYmUgZ29vZCBjaG9pY2VzLiBDb25zaWRlcmluZyBzeXprYWxsZXIsIGBUTVBGU19YQVRUUmAgaXMgdHlwaWNhbGx5IGVuYWJsZWQsIHdoaWNoIG1lYW5zIGl0IHdpbGwgYmUgZWFzaWx5IGFjY2Vzc2libGUuIFllcywgSSYjMzk7bGwgYWRkIGBUTVBGU19YQVRUUmAgYW5kIGBFWFQ0X0ZTX1hBVFRSYCB0byBgRW5hYmxlQ29uZmlnc2AganVzdCB0byBiZSBjZXJ0YWluLgoKTGV0IG1lIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGBmZF9tYXliZV9yYXdgLiBJdCYjMzk7cyBhIG1hY3JvOiBgREVGSU5FX0NMQVNTKGZkX21heWJlX3Jhdywgc3RydWN0IGZkLCBmZHB1dChfVCksIHJhdyA/IGZkZ2V0X3JhdyhmZCkgOiBmZGdldChmZCksIGludCBmZCwgYm9vbCByYXcpYC4gSXQmIzM5O3MgdXNlZCBpbiBgZnMveGF0dHIuY2AsIHNvIEkmIzM5O2xsIGRvdWJsZSBjaGVjayBob3cgaXQmIzM5O3MgdXNlZC4gSnVzdCBpbiBjYXNlLCBJJiMzOTtsbCBgZ3JlcGAgZm9yIG90aGVyIG9jY3VycmVuY2VzIG9mIGBmZF9tYXliZV9yYXdgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNjo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmZF9tYXliZV9yYXcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMveGF0dHIuYz03MDE9c3RhdGljIGludCBwYXRoX3NldHhhdHRyYXQoaW50IGRmZCwgY29uc3QgY2hhciBfX3VzZXIgKnBhdGhuYW1lLFxuLS1cbmZzL3hhdHRyLmMtNzI4LVx0aWYgKCFmaWxlbmFtZSBcdTAwMjZcdTAwMjYgZGZkIFx1MDAzZT0gMCkge1xuZnMveGF0dHIuYzo3Mjk6XHRcdENMQVNTKGZkX21heWJlX3JhdywgZikoZGZkLCByYXcpO1xuZnMveGF0dHIuYy03MzAtXHRcdGlmIChmZF9lbXB0eShmKSlcbi0tXG5mcy94YXR0ci5jPTg0OD1zdGF0aWMgc3NpemVfdCBwYXRoX2dldHhhdHRyYXQoaW50IGRmZCwgY29uc3QgY2hhciBfX3VzZXIgKnBhdGhuYW1lLFxuLS1cbmZzL3hhdHRyLmMtODY5LVx0aWYgKCFmaWxlbmFtZSBcdTAwMjZcdTAwMjYgZGZkIFx1MDAzZT0gMCkge1xuZnMveGF0dHIuYzo4NzA6XHRcdENMQVNTKGZkX21heWJlX3JhdywgZikoZGZkLCByYXcpO1xuZnMveGF0dHIuYy04NzEtXHRcdGlmIChmZF9lbXB0eShmKSlcbi0tXG5mcy94YXR0ci5jPTk4Nz1zdGF0aWMgc3NpemVfdCBwYXRoX2xpc3R4YXR0cmF0KGludCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICpwYXRobmFtZSxcbi0tXG5mcy94YXR0ci5jLTk5Ny1cdGlmICghZmlsZW5hbWUpIHtcbmZzL3hhdHRyLmM6OTk4Olx0XHRDTEFTUyhmZF9tYXliZV9yYXcsIGYpKGRmZCwgcmF3KTtcbmZzL3hhdHRyLmMtOTk5LVx0XHRpZiAoZmRfZW1wdHkoZikpXG4tLVxuZnMveGF0dHIuYz0xMDgwPXN0YXRpYyBpbnQgcGF0aF9yZW1vdmV4YXR0cmF0KGludCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICpwYXRobmFtZSxcbi0tXG5mcy94YXR0ci5jLTEwOTYtXHRpZiAoIWZpbGVuYW1lKSB7XG5mcy94YXR0ci5jOjEwOTc6XHRcdENMQVNTKGZkX21heWJlX3JhdywgZikoZGZkLCByYXcpO1xuZnMveGF0dHIuYy0xMDk4LVx0XHRpZiAoZmRfZW1wdHkoZikpXG4tLVxuaW5jbHVkZS9saW51eC9maWxlLmg9ODQ9REVGSU5FX0NMQVNTKGZkX3Jhdywgc3RydWN0IGZkLCBmZHB1dChfVCksIGZkZ2V0X3JhdyhmZCksIGludCBmZClcbmluY2x1ZGUvbGludXgvZmlsZS5oOjg1OkRFRklORV9DTEFTUyhmZF9tYXliZV9yYXcsIHN0cnVjdCBmZCwgZmRwdXQoX1QpLFxuaW5jbHVkZS9saW51eC9maWxlLmgtODYtXHQgICAgIHJhdyA/IGZkZ2V0X3JhdyhmZCkgOiBmZGdldChmZCksIGludCBmZCwgYm9vbCByYXcpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE2OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwMTM3CgkJCQkJCQlvdXRwdXQ6IDI1MAoJCQkJCQkJdGhvdWdodHM6IDI1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgRXh0ZW5kZWQgQXR0cmlidXRlIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgc3BlY2lmaWNhbGx5IHRhcmdldGluZyBgZnMveGF0dHIuY2AuIFRoYXQgbmFycm93cyB0aGUgc2NvcGUgY29uc2lkZXJhYmx5LCB3aGljaCBpcyBoZWxwZnVsLiBUaGUgY29yZSBvZiB0aGlzIGNoYW5nZSBzZWVtcyB0byBiZSBhcm91bmQgZW5hYmxpbmcgYCp4YXR0cmF0YCBzeXNjYWxscyB0byB3b3JrIGNvcnJlY3RseSB3aXRoIGBPX1BBVEhgIGZpbGUgZGVzY3JpcHRvcnMsIHBhcnRpY3VsYXJseSB3aGVuIHVzaW5nIGBBVF9FTVBUWV9QQVRIYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgbmV3IGBmZF9tYXliZV9yYXdgIGNsYXNzIGNvbWVzIGluLCB1c2luZyBgZmRnZXRfcmF3YCBpbnN0ZWFkIG9mIHRoZSB1c3VhbCBgZmRnZXRgLiBGdW5jdGlvbmFsbHksIHRoaXMgbW9kaWZpZXMgdGhlIGJlaGF2aW9yIG9mIHNldmVyYWwga2V5IHN5c2NhbGxzOiBgcGF0aF9zZXR4YXR0cmF0YCwgYHBhdGhfZ2V0eGF0dHJhdGAsIGBwYXRoX2xpc3R4YXR0cmF0YCwgYW5kIGBwYXRoX3JlbW92ZXhhdHRyYXRgLiBJdCBicmluZ3MgdGhlbSBpbiBsaW5lIHdpdGggdGhlIGJlaGF2aW9yIG9mIG90aGVyIGAqYXRgIGNhbGxzIGxpa2UgYGZjaG93bmF0YCBhbmQgYGZzdGF0YXRgLiBUaGlzIGNvbnNpc3RlbmN5IGlzIGdvb2QgZnJvbSBhIGRlc2lnbiBwZXJzcGVjdGl2ZS4KCk15IHByaW1hcnkgY29uY2VybiwgdGhvdWdoLCBpcyBlbnN1cmluZyBubyByZWdyZXNzaW9ucyBvciB1bmV4cGVjdGVkIHNpZGUgZWZmZWN0cy4gV2UgbmVlZCB0byByaWdvcm91c2x5IGZ1enogdGhlc2UgbW9kaWZpZWQgc3lzY2FsbHMsIGVzcGVjaWFsbHkgaW4gY29uanVuY3Rpb24gd2l0aCBgT19QQVRIYCBhbmQgZXh0ZW5kZWQgYXR0cmlidXRlcy4gSSYjMzk7bGwgbWFrZSBzdXJlIHRoZSBmdXp6ZXIgY292ZXJzIHRoaXMgZXh0ZW5zaXZlbHkuIEkmIzM5O2xsIG5lZWQgdG8gc2V0IHVwIHRoZSBmdXp6aW5nIHdpdGggdGhlIGNvbmZpZ3VyYXRpb25zIGBUTVBGU19YQVRUUmAgYW5kIGBFWFQ0X0ZTX1hBVFRSYCBlbmFibGVkIHRvIHRlc3QgaXQgdGhvcm91Z2hseSBhY3Jvc3MgZGlmZmVyZW50IGZpbGVzeXN0ZW1zLiBJIHdpbGwgYWxzbyBoYXZlIHRvIGxvb2sgZm9yIHNldC1yZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNjo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+dGhlIGZvbGxvd2luZyBjb25maWdzIGRvIG5vdCBleGlzdCBpbiB0aGUga2VybmVsIHRyZWU6IEVYVDRfRlNfWEFUVFI8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VE1QRlNfWEFUVFImIzM0OywKICAgICYjMzQ7RVhUNF9GU19YQVRUUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BhdGhfc2V0eGF0dHJhdCYjMzQ7LAogICAgJiMzNDtwYXRoX2dldHhhdHRyYXQmIzM0OywKICAgICYjMzQ7cGF0aF9saXN0eGF0dHJhdCYjMzQ7LAogICAgJiMzNDtwYXRoX3JlbW92ZXhhdHRyYXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGAqeGF0dHJhdGAgc3lzY2FsbHMgKGUuZy4sIGBzZXR4YXR0cmF0YCwgYGdldHhhdHRyYXRgLCBgbGlzdHhhdHRyYXRgLCBgcmVtb3ZleGF0dHJhdGApIHRvIGFsbG93IG9wZXJhdGluZyBvbiBgT19QQVRIYCBmaWxlIGRlc2NyaXB0b3JzIHdoZW4gYEFUX0VNUFRZX1BBVEhgIGlzIHVzZWQuIFRoaXMgaXMgYWNoaWV2ZWQgYnkgaW50cm9kdWNpbmcgYSBuZXcgYGZkX21heWJlX3Jhd2AgY2xhc3MgdGhhdCB1c2VzIGBmZGdldF9yYXdgIGluc3RlYWQgb2YgYGZkZ2V0YCB3aGVuIHRoZSBgcmF3YCBwYXJhbWV0ZXIgaXMgdHJ1ZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWx0ZXJzIHRoZSBiZWhhdmlvciBvZiB0aGVzZSBzeXNjYWxscywgbWFraW5nIHRoZW0gY29uc2lzdGVudCB3aXRoIG90aGVyIGAqYXRgIHN5c2NhbGxzIGxpa2UgYGZjaG93bmF0YCBhbmQgYGZzdGF0YXRgLiBJdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gcmVncmVzc2lvbnMgb3IgdW5leHBlY3RlZCBiZWhhdmlvcnMgd2hlbiB1c2luZyBgT19QQVRIYCBmaWxlIGRlc2NyaXB0b3JzIHdpdGggZXh0ZW5kZWQgYXR0cmlidXRlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O3RoZSBmb2xsb3dpbmcgY29uZmlncyBkbyBub3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlOiBFWFQ0X0ZTX1hBVFRSJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNjo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDk3MAoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRlYnVnZ2luZyBhbiBFWFQ0IEV4dGVuZGVkIEF0dHJpYnV0ZSBJc3N1ZSoqCgpBbHJpZ2h0LCBzbyBgRVhUNF9GU19YQVRUUmAgc2VlbXMgdG8gYmUgdW5kZWZpbmVkLi4uIGEgYml0IG9kZC4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gZGl2ZSBpbnRvIHRoZSBLY29uZmlnLiBJIGtub3cgaXQmIzM5O3MgKmdvdCogdG8gYmUgY29udHJvbGxlZCBieSBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHNvbWV3aGVyZS4gUHJvYmFibHkgYSBmYWlybHkgc3RyYWlnaHRmb3J3YXJkIG9uZSwgYnV0IHRoZSBLY29uZmlnIGlzIHRoZSBzb3VyY2Ugb2YgdHJ1dGggZm9yIHRoZXNlIHRoaW5ncy4gTGV0IG1lIHB1bGwgdXAgYGZzL2V4dDQvS2NvbmZpZ2AgYW5kIGRvdWJsZS1jaGVjayBpdHMgZGVmaW5pdGlvbiBhbmQgZGVwZW5kZW5jaWVzLiBJdCYjMzk7cyBhbG1vc3QgY2VydGFpbmx5IGNvbmRpdGlvbmFsIG9uIHNvbWV0aGluZywgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdGhhdCB0cmlnZ2VyIGlzIGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLiBHb3R0YSBtYWtlIHN1cmUgdGhlIGZlYXR1cmUmIzM5O3MgZW5hYmxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMTY6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRVhUNF9GU19YQVRUUiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE2OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxMTkyCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUsIEkgbmVlZCB0byBnZXQgdGhpcyBzdHJhaWdodCBpbiBteSBoZWFkLgoKKipFeHQ0IFhhdHRyIE1vZHVsZSBJbnF1aXJ5KioKCkhtbSwgSSBzZWVtIHRvIHJlY2FsbCBjYXRjaGluZyBhIGxpbmUgaW4gYERvY3VtZW50YXRpb24va2J1aWxkL21ha2VmaWxlcy5yc3RgIHRoYXQgbG9va2VkIHNvbWV0aGluZyBsaWtlIGBleHQ0LSQoQ09ORklHX0VYVDRfRlNfWEFUVFIpICYjNDM7PSB4YXR0ci5vYC4gQnV0IHRoYXQgY291bGQgaGF2ZSBqdXN0IGJlZW4gYW4gZXhhbXBsZSBzbmlwcGV0LiBJIG5lZWQgdG8gYmUgc3VyZS4gSXQmIzM5O3MgYmVzdCB0byBjaGVjayB0aGUgYWN0dWFsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gTGV0JiMzOTtzIGRpZyBpbnRvIGBmcy9leHQ0L0tjb25maWdgIHRvIGNvbmZpcm0gaWYgdGhhdCYjMzk7cyB0aGUgY29ycmVjdCByZWZlcmVuY2UgZm9yIHRoZSBlWHRlbmVkIEF0dHJpYnV0ZXMgaW4gdGhlIEV4dDQgZmlsZXN5c3RlbS4gSSBuZWVkIHRoZSBkZWZpbml0aXZlIGFuc3dlciBiZWZvcmUgcHJvY2VlZGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMTY6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEVYVDRfRlMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9leHQ0L0tjb25maWc6Mjpjb25maWcgRVhUNF9GU1xuZnMvZXh0NC9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtUaGUgRXh0ZW5kZWQgNCAoZXh0NCkgZmlsZXN5c3RlbVwmIzM0O1xuLS1cbmZzL2V4dDQvS2NvbmZpZz0zNT1jb25maWcgRVhUNF9VU0VfRk9SX0VYVDJcbi0tXG5mcy9leHQ0L0tjb25maWctNDUtXG5mcy9leHQ0L0tjb25maWc6NDY6Y29uZmlnIEVYVDRfRlNfUE9TSVhfQUNMXG5mcy9leHQ0L0tjb25maWctNDctXHRib29sIFwmIzM0O0V4dDQgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHNcJiMzNDtcbi0tXG5mcy9leHQ0L0tjb25maWctNTUtXG5mcy9leHQ0L0tjb25maWc6NTY6Y29uZmlnIEVYVDRfRlNfU0VDVVJJVFlcbmZzL2V4dDQvS2NvbmZpZy01Ny1cdGJvb2wgXCYjMzQ7RXh0NCBTZWN1cml0eSBMYWJlbHNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMTY6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDE2MjcKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgRmlsZSBTeXN0ZW0gTWV0YWRhdGEqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGludG8gaG93IGV4dGVuZGVkIGF0dHJpYnV0ZXMgKHhhdHRycykgYXJlIGhhbmRsZWQgd2l0aGluIGZpbGUgc3lzdGVtcywgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGV4dDQuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCBgRVhUNF9GU19YQVRUUmAgbWlnaHQgYmUgYSBjb25maWd1cmF0aW9uIG9wdGlvbiBJIG5lZWRlZCB0byBjaGVjay4gQnV0IHdhaXQsIHRoYXQmIzM5O3Mgbm90IHJpZ2h0LiBJIHJlbWVtYmVyIG5vdzsgeGF0dHJzIGFyZSAqYWx3YXlzKiBlbmFibGVkIGluIGV4dDQuIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgcGFydCBvZiB0aGUgZGVzaWduLCBzbyB0aGVyZSYjMzk7cyBubyBjb21waWxlLXRpbWUgc3dpdGNoIGZvciBpdC4gVGhhdCBlbGltaW5hdGVzIGEgcG90ZW50aWFsIGFyZWEgb2YgaW52ZXN0aWdhdGlvbi4gTm93LCBhIGRpZmZlcmVudCBhbmdsZS4gTGV0JiMzOTtzIHNoaWZ0IG91ciBmb2N1cyB0byBgVE1QRlNfWEFUVFJgLiBQZXJoYXBzIHRoZSBoYW5kbGluZyBvZiB4YXR0cnMgaW4gYSB0bXBmcyBlbnZpcm9ubWVudCBvZmZlcnMgYSBtb3JlIHJlbGV2YW50IHBvaW50IG9mIGlucXVpcnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE2OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBUTVBGU19YQVRUUiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9LY29uZmlnPTE4MT1jb25maWcgVE1QRlNfUE9TSVhfQUNMXG4tLVxuZnMvS2NvbmZpZy0xOTgtXG5mcy9LY29uZmlnOjE5OTpjb25maWcgVE1QRlNfWEFUVFJcbmZzL0tjb25maWctMjAwLVx0Ym9vbCBcJiMzNDtUbXBmcyBleHRlbmRlZCBhdHRyaWJ1dGVzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE2OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxOTEyCgkJCQkJCQlvdXRwdXQ6IDI0MAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqVXRpbGl6aW5nIFRNUEZTX1hBVFRSKioKClJpZ2h0LCAqVE1QRlNfWEFUVFIqIGRvZXMgaW5kZWVkIGV4aXN0LiBObyBuZWVkIHRvIG92ZXJjb21wbGljYXRlIHRoaW5nczsgdGhhdCYjMzk7cyB0aGUgY2xlYW5lc3QgYW5kIG1vc3QgZGlyZWN0IGFwcHJvYWNoIGhlcmUuIEkmIzM5O2xsIGp1c3QgbGV2ZXJhZ2UgKlRNUEZTX1hBVFRSKi4gU2ltcGxpY2l0eSBhbmQgZWZmaWNpZW5jeS4gRG9uZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMTY6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RNUEZTX1hBVFRSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGF0aF9zZXR4YXR0cmF0JiMzNDssCiAgICAmIzM0O3BhdGhfZ2V0eGF0dHJhdCYjMzQ7LAogICAgJiMzNDtwYXRoX2xpc3R4YXR0cmF0JiMzNDssCiAgICAmIzM0O3BhdGhfcmVtb3ZleGF0dHJhdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgYCp4YXR0cmF0YCBzeXNjYWxscyAoZS5nLiwgYHNldHhhdHRyYXRgLCBgZ2V0eGF0dHJhdGAsIGBsaXN0eGF0dHJhdGAsIGByZW1vdmV4YXR0cmF0YCkgdG8gYWxsb3cgb3BlcmF0aW5nIG9uIGBPX1BBVEhgIGZpbGUgZGVzY3JpcHRvcnMgd2hlbiBgQVRfRU1QVFlfUEFUSGAgaXMgdXNlZC4gVGhpcyBpcyBhY2hpZXZlZCBieSBpbnRyb2R1Y2luZyBhIG5ldyBgZmRfbWF5YmVfcmF3YCBjbGFzcyB0aGF0IHVzZXMgYGZkZ2V0X3Jhd2AgaW5zdGVhZCBvZiBgZmRnZXRgIHdoZW4gdGhlIGByYXdgIHBhcmFtZXRlciBpcyB0cnVlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhbHRlcnMgdGhlIGJlaGF2aW9yIG9mIHRoZXNlIHN5c2NhbGxzLCBtYWtpbmcgdGhlbSBjb25zaXN0ZW50IHdpdGggb3RoZXIgYCphdGAgc3lzY2FsbHMgbGlrZSBgZmNob3duYXRgIGFuZCBgZnN0YXRhdGAuIEl0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyByZWdyZXNzaW9ucyBvciB1bmV4cGVjdGVkIGJlaGF2aW9ycyB3aGVuIHVzaW5nIGBPX1BBVEhgIGZpbGUgZGVzY3JpcHRvcnMgd2l0aCBleHRlbmRlZCBhdHRyaWJ1dGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUTVBGU19YQVRUUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BhdGhfc2V0eGF0dHJhdCYjMzQ7LAogICAgJiMzNDtwYXRoX2dldHhhdHRyYXQmIzM0OywKICAgICYjMzQ7cGF0aF9saXN0eGF0dHJhdCYjMzQ7LAogICAgJiMzNDtwYXRoX3JlbW92ZXhhdHRyYXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGAqeGF0dHJhdGAgc3lzY2FsbHMgKGUuZy4sIGBzZXR4YXR0cmF0YCwgYGdldHhhdHRyYXRgLCBgbGlzdHhhdHRyYXRgLCBgcmVtb3ZleGF0dHJhdGApIHRvIGFsbG93IG9wZXJhdGluZyBvbiBgT19QQVRIYCBmaWxlIGRlc2NyaXB0b3JzIHdoZW4gYEFUX0VNUFRZX1BBVEhgIGlzIHVzZWQuIFRoaXMgaXMgYWNoaWV2ZWQgYnkgaW50cm9kdWNpbmcgYSBuZXcgYGZkX21heWJlX3Jhd2AgY2xhc3MgdGhhdCB1c2VzIGBmZGdldF9yYXdgIGluc3RlYWQgb2YgYGZkZ2V0YCB3aGVuIHRoZSBgcmF3YCBwYXJhbWV0ZXIgaXMgdHJ1ZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWx0ZXJzIHRoZSBiZWhhdmlvciBvZiB0aGVzZSBzeXNjYWxscywgbWFraW5nIHRoZW0gY29uc2lzdGVudCB3aXRoIG90aGVyIGAqYXRgIHN5c2NhbGxzIGxpa2UgYGZjaG93bmF0YCBhbmQgYGZzdGF0YXRgLiBJdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gcmVncmVzc2lvbnMgb3IgdW5leHBlY3RlZCBiZWhhdmlvcnMgd2hlbiB1c2luZyBgT19QQVRIYCBmaWxlIGRlc2NyaXB0b3JzIHdpdGggZXh0ZW5kZWQgYXR0cmlidXRlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE2OjQ5OjA2LjEyMTQ4NTcwN1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwOTc2MjE5ODc2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUTVBGU19YQVRUUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBhdGhfc2V0eGF0dHJhdFwiLFxuICAgIFwicGF0aF9nZXR4YXR0cmF0XCIsXG4gICAgXCJwYXRoX2xpc3R4YXR0cmF0XCIsXG4gICAgXCJwYXRoX3JlbW92ZXhhdHRyYXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYCp4YXR0cmF0YCBzeXNjYWxscyAoZS5nLiwgYHNldHhhdHRyYXRgLCBgZ2V0eGF0dHJhdGAsIGBsaXN0eGF0dHJhdGAsIGByZW1vdmV4YXR0cmF0YCkgdG8gYWxsb3cgb3BlcmF0aW5nIG9uIGBPX1BBVEhgIGZpbGUgZGVzY3JpcHRvcnMgd2hlbiBgQVRfRU1QVFlfUEFUSGAgaXMgdXNlZC4gVGhpcyBpcyBhY2hpZXZlZCBieSBpbnRyb2R1Y2luZyBhIG5ldyBgZmRfbWF5YmVfcmF3YCBjbGFzcyB0aGF0IHVzZXMgYGZkZ2V0X3Jhd2AgaW5zdGVhZCBvZiBgZmRnZXRgIHdoZW4gdGhlIGByYXdgIHBhcmFtZXRlciBpcyB0cnVlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhbHRlcnMgdGhlIGJlaGF2aW9yIG9mIHRoZXNlIHN5c2NhbGxzLCBtYWtpbmcgdGhlbSBjb25zaXN0ZW50IHdpdGggb3RoZXIgYCphdGAgc3lzY2FsbHMgbGlrZSBgZmNob3duYXRgIGFuZCBgZnN0YXRhdGAuIEl0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyByZWdyZXNzaW9ucyBvciB1bmV4cGVjdGVkIGJlaGF2aW9ycyB3aGVuIHVzaW5nIGBPX1BBVEhgIGZpbGUgZGVzY3JpcHRvcnMgd2l0aCBleHRlbmRlZCBhdHRyaWJ1dGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxNjo0OTowNi4xMjE1MDM2ODdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4NTQ1MjU1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGIwN2MxMmQ5ZGYzYWVmMjk3ZmNlZGZmMTE2ZDdiODJhMTNlODRmYzNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdWwgMjMgMTY6NDk6MDQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMveGF0dHIuYyBiL2ZzL3hhdHRyLmNcXG5pbmRleCBkNTg5NzkxMTUyMDA3NS4uMWRiNjU5NmEyZWMxMTAgMTAwNjQ0XFxuLS0tIGEvZnMveGF0dHIuY1xcbisrKyBiL2ZzL3hhdHRyLmNcXG5AQCAtNzAwLDcgKzcwMCw4IEBAIGludCBmaWxlbmFtZV9zZXR4YXR0cihpbnQgZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKmZpbGVuYW1lLFxcbiBcXG4gc3RhdGljIGludCBwYXRoX3NldHhhdHRyYXQoaW50IGRmZCwgY29uc3QgY2hhciBfX3VzZXIgKnBhdGhuYW1lLFxcbiBcXHRcXHRcXHQgICB1bnNpZ25lZCBpbnQgYXRfZmxhZ3MsIGNvbnN0IGNoYXIgX191c2VyICpuYW1lLFxcbi1cXHRcXHRcXHQgICBjb25zdCB2b2lkIF9fdXNlciAqdmFsdWUsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpXFxuK1xcdFxcdFxcdCAgIGNvbnN0IHZvaWQgX191c2VyICp2YWx1ZSwgc2l6ZV90IHNpemUsIGludCBmbGFncyxcXG4rXFx0XFx0XFx0ICAgYm9vbCByYXcpXFxuIHtcXG4gXFx0c3RydWN0IHhhdHRyX25hbWUga25hbWU7XFxuIFxcdHN0cnVjdCBrZXJuZWxfeGF0dHJfY3R4IGN0eCA9IHtcXG5AQCAtNzI1LDcgKzcyNiw3IEBAIHN0YXRpYyBpbnQgcGF0aF9zZXR4YXR0cmF0KGludCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICpwYXRobmFtZSxcXG4gXFxuIFxcdENMQVNTKGZpbGVuYW1lX21heWJlX251bGwsIGZpbGVuYW1lKShwYXRobmFtZSwgYXRfZmxhZ3MpO1xcbiBcXHRpZiAoIWZpbGVuYW1lIFxcdTAwMjZcXHUwMDI2IGRmZCBcXHUwMDNlPSAwKSB7XFxuLVxcdFxcdENMQVNTKGZkLCBmKShkZmQpO1xcbitcXHRcXHRDTEFTUyhmZF9tYXliZV9yYXcsIGYpKGRmZCwgcmF3KTtcXG4gXFx0XFx0aWYgKGZkX2VtcHR5KGYpKVxcbiBcXHRcXHRcXHRlcnJvciA9IC1FQkFERjtcXG4gXFx0XFx0ZWxzZVxcbkBAIC03NTgsMTQgKzc1OSwxNSBAQCBTWVNDQUxMX0RFRklORTYoc2V0eGF0dHJhdCwgaW50LCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICosIHBhdGhuYW1lLCB1bnNpZ25lZCBpblxcbiBcXG4gXFx0cmV0dXJuIHBhdGhfc2V0eGF0dHJhdChkZmQsIHBhdGhuYW1lLCBhdF9mbGFncywgbmFtZSxcXG4gXFx0XFx0XFx0ICAgICAgIHU2NF90b191c2VyX3B0cihhcmdzLnZhbHVlKSwgYXJncy5zaXplLFxcbi1cXHRcXHRcXHQgICAgICAgYXJncy5mbGFncyk7XFxuK1xcdFxcdFxcdCAgICAgICBhcmdzLmZsYWdzLCB0cnVlKTtcXG4gfVxcbiBcXG4gU1lTQ0FMTF9ERUZJTkU1KHNldHhhdHRyLCBjb25zdCBjaGFyIF9fdXNlciAqLCBwYXRobmFtZSxcXG4gXFx0XFx0Y29uc3QgY2hhciBfX3VzZXIgKiwgbmFtZSwgY29uc3Qgdm9pZCBfX3VzZXIgKiwgdmFsdWUsXFxuIFxcdFxcdHNpemVfdCwgc2l6ZSwgaW50LCBmbGFncylcXG4ge1xcbi1cXHRyZXR1cm4gcGF0aF9zZXR4YXR0cmF0KEFUX0ZEQ1dELCBwYXRobmFtZSwgMCwgbmFtZSwgdmFsdWUsIHNpemUsIGZsYWdzKTtcXG4rXFx0cmV0dXJuIHBhdGhfc2V0eGF0dHJhdChBVF9GRENXRCwgcGF0aG5hbWUsIDAsIG5hbWUsIHZhbHVlLCBzaXplLCBmbGFncyxcXG4rXFx0XFx0XFx0ICAgICAgIGZhbHNlKTtcXG4gfVxcbiBcXG4gU1lTQ0FMTF9ERUZJTkU1KGxzZXR4YXR0ciwgY29uc3QgY2hhciBfX3VzZXIgKiwgcGF0aG5hbWUsXFxuQEAgLTc3MywxNCArNzc1LDE0IEBAIFNZU0NBTExfREVGSU5FNShsc2V0eGF0dHIsIGNvbnN0IGNoYXIgX191c2VyICosIHBhdGhuYW1lLFxcbiBcXHRcXHRzaXplX3QsIHNpemUsIGludCwgZmxhZ3MpXFxuIHtcXG4gXFx0cmV0dXJuIHBhdGhfc2V0eGF0dHJhdChBVF9GRENXRCwgcGF0aG5hbWUsIEFUX1NZTUxJTktfTk9GT0xMT1csIG5hbWUsXFxuLVxcdFxcdFxcdCAgICAgICB2YWx1ZSwgc2l6ZSwgZmxhZ3MpO1xcbitcXHRcXHRcXHQgICAgICAgdmFsdWUsIHNpemUsIGZsYWdzLCBmYWxzZSk7XFxuIH1cXG4gXFxuIFNZU0NBTExfREVGSU5FNShmc2V0eGF0dHIsIGludCwgZmQsIGNvbnN0IGNoYXIgX191c2VyICosIG5hbWUsXFxuIFxcdFxcdGNvbnN0IHZvaWQgX191c2VyICosdmFsdWUsIHNpemVfdCwgc2l6ZSwgaW50LCBmbGFncylcXG4ge1xcbiBcXHRyZXR1cm4gcGF0aF9zZXR4YXR0cmF0KGZkLCBOVUxMLCBBVF9FTVBUWV9QQVRILCBuYW1lLFxcbi1cXHRcXHRcXHQgICAgICAgdmFsdWUsIHNpemUsIGZsYWdzKTtcXG4rXFx0XFx0XFx0ICAgICAgIHZhbHVlLCBzaXplLCBmbGFncywgZmFsc2UpO1xcbiB9XFxuIFxcbiAvKlxcbkBAIC04NDUsNyArODQ3LDcgQEAgc3NpemVfdCBmaWxlbmFtZV9nZXR4YXR0cihpbnQgZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKmZpbGVuYW1lLFxcbiBcXG4gc3RhdGljIHNzaXplX3QgcGF0aF9nZXR4YXR0cmF0KGludCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICpwYXRobmFtZSxcXG4gXFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCBhdF9mbGFncywgY29uc3QgY2hhciBfX3VzZXIgKm5hbWUsXFxuLVxcdFxcdFxcdCAgICAgICB2b2lkIF9fdXNlciAqdmFsdWUsIHNpemVfdCBzaXplKVxcbitcXHRcXHRcXHQgICAgICAgdm9pZCBfX3VzZXIgKnZhbHVlLCBzaXplX3Qgc2l6ZSwgYm9vbCByYXcpXFxuIHtcXG4gXFx0c3RydWN0IHhhdHRyX25hbWUga25hbWU7XFxuIFxcdHN0cnVjdCBrZXJuZWxfeGF0dHJfY3R4IGN0eCA9IHtcXG5AQCAtODY1LDcgKzg2Nyw3IEBAIHN0YXRpYyBzc2l6ZV90IHBhdGhfZ2V0eGF0dHJhdChpbnQgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqcGF0aG5hbWUsXFxuIFxcbiBcXHRDTEFTUyhmaWxlbmFtZV9tYXliZV9udWxsLCBmaWxlbmFtZSkocGF0aG5hbWUsIGF0X2ZsYWdzKTtcXG4gXFx0aWYgKCFmaWxlbmFtZSBcXHUwMDI2XFx1MDAyNiBkZmQgXFx1MDAzZT0gMCkge1xcbi1cXHRcXHRDTEFTUyhmZCwgZikoZGZkKTtcXG4rXFx0XFx0Q0xBU1MoZmRfbWF5YmVfcmF3LCBmKShkZmQsIHJhdyk7XFxuIFxcdFxcdGlmIChmZF9lbXB0eShmKSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FQkFERjtcXG4gXFx0XFx0cmV0dXJuIGZpbGVfZ2V0eGF0dHIoZmRfZmlsZShmKSwgXFx1MDAyNmN0eCk7XFxuQEAgLTg5OSwyNiArOTAxLDI4IEBAIFNZU0NBTExfREVGSU5FNihnZXR4YXR0cmF0LCBpbnQsIGRmZCwgY29uc3QgY2hhciBfX3VzZXIgKiwgcGF0aG5hbWUsIHVuc2lnbmVkIGluXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4gXFx0cmV0dXJuIHBhdGhfZ2V0eGF0dHJhdChkZmQsIHBhdGhuYW1lLCBhdF9mbGFncywgbmFtZSxcXG4tXFx0XFx0XFx0ICAgICAgIHU2NF90b191c2VyX3B0cihhcmdzLnZhbHVlKSwgYXJncy5zaXplKTtcXG4rXFx0XFx0XFx0ICAgICAgIHU2NF90b191c2VyX3B0cihhcmdzLnZhbHVlKSwgYXJncy5zaXplLCB0cnVlKTtcXG4gfVxcbiBcXG4gU1lTQ0FMTF9ERUZJTkU0KGdldHhhdHRyLCBjb25zdCBjaGFyIF9fdXNlciAqLCBwYXRobmFtZSxcXG4gXFx0XFx0Y29uc3QgY2hhciBfX3VzZXIgKiwgbmFtZSwgdm9pZCBfX3VzZXIgKiwgdmFsdWUsIHNpemVfdCwgc2l6ZSlcXG4ge1xcbi1cXHRyZXR1cm4gcGF0aF9nZXR4YXR0cmF0KEFUX0ZEQ1dELCBwYXRobmFtZSwgMCwgbmFtZSwgdmFsdWUsIHNpemUpO1xcbitcXHRyZXR1cm4gcGF0aF9nZXR4YXR0cmF0KEFUX0ZEQ1dELCBwYXRobmFtZSwgMCwgbmFtZSwgdmFsdWUsIHNpemUsXFxuK1xcdFxcdFxcdCAgICAgICBmYWxzZSk7XFxuIH1cXG4gXFxuIFNZU0NBTExfREVGSU5FNChsZ2V0eGF0dHIsIGNvbnN0IGNoYXIgX191c2VyICosIHBhdGhuYW1lLFxcbiBcXHRcXHRjb25zdCBjaGFyIF9fdXNlciAqLCBuYW1lLCB2b2lkIF9fdXNlciAqLCB2YWx1ZSwgc2l6ZV90LCBzaXplKVxcbiB7XFxuIFxcdHJldHVybiBwYXRoX2dldHhhdHRyYXQoQVRfRkRDV0QsIHBhdGhuYW1lLCBBVF9TWU1MSU5LX05PRk9MTE9XLCBuYW1lLFxcbi1cXHRcXHRcXHQgICAgICAgdmFsdWUsIHNpemUpO1xcbitcXHRcXHRcXHQgICAgICAgdmFsdWUsIHNpemUsIGZhbHNlKTtcXG4gfVxcbiBcXG4gU1lTQ0FMTF9ERUZJTkU0KGZnZXR4YXR0ciwgaW50LCBmZCwgY29uc3QgY2hhciBfX3VzZXIgKiwgbmFtZSxcXG4gXFx0XFx0dm9pZCBfX3VzZXIgKiwgdmFsdWUsIHNpemVfdCwgc2l6ZSlcXG4ge1xcbi1cXHRyZXR1cm4gcGF0aF9nZXR4YXR0cmF0KGZkLCBOVUxMLCBBVF9FTVBUWV9QQVRILCBuYW1lLCB2YWx1ZSwgc2l6ZSk7XFxuK1xcdHJldHVybiBwYXRoX2dldHhhdHRyYXQoZmQsIE5VTEwsIEFUX0VNUFRZX1BBVEgsIG5hbWUsIHZhbHVlLCBzaXplLFxcbitcXHRcXHRcXHQgICAgICAgZmFsc2UpO1xcbiB9XFxuIFxcbiAvKlxcbkBAIC05ODIsNyArOTg2LDcgQEAgc3NpemVfdCBmaWxlbmFtZV9saXN0eGF0dHIoaW50IGRmZCwgc3RydWN0IGZpbGVuYW1lICpmaWxlbmFtZSxcXG4gXFxuIHN0YXRpYyBzc2l6ZV90IHBhdGhfbGlzdHhhdHRyYXQoaW50IGRmZCwgY29uc3QgY2hhciBfX3VzZXIgKnBhdGhuYW1lLFxcbiBcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgYXRfZmxhZ3MsIGNoYXIgX191c2VyICpsaXN0LFxcbi1cXHRcXHRcXHRcXHRzaXplX3Qgc2l6ZSlcXG4rXFx0XFx0XFx0XFx0c2l6ZV90IHNpemUsIGJvb2wgcmF3KVxcbiB7XFxuIFxcdGludCBsb29rdXBfZmxhZ3M7XFxuIFxcbkBAIC05OTEsNyArOTk1LDcgQEAgc3RhdGljIHNzaXplX3QgcGF0aF9saXN0eGF0dHJhdChpbnQgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqcGF0aG5hbWUsXFxuIFxcbiBcXHRDTEFTUyhmaWxlbmFtZV9tYXliZV9udWxsLCBmaWxlbmFtZSkocGF0aG5hbWUsIGF0X2ZsYWdzKTtcXG4gXFx0aWYgKCFmaWxlbmFtZSkge1xcbi1cXHRcXHRDTEFTUyhmZCwgZikoZGZkKTtcXG4rXFx0XFx0Q0xBU1MoZmRfbWF5YmVfcmF3LCBmKShkZmQsIHJhdyk7XFxuIFxcdFxcdGlmIChmZF9lbXB0eShmKSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FQkFERjtcXG4gXFx0XFx0cmV0dXJuIGZpbGVfbGlzdHhhdHRyKGZkX2ZpbGUoZiksIGxpc3QsIHNpemUpO1xcbkBAIC0xMDA1LDI0ICsxMDA5LDI1IEBAIFNZU0NBTExfREVGSU5FNShsaXN0eGF0dHJhdCwgaW50LCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICosIHBhdGhuYW1lLFxcbiBcXHRcXHR1bnNpZ25lZCBpbnQsIGF0X2ZsYWdzLFxcbiBcXHRcXHRjaGFyIF9fdXNlciAqLCBsaXN0LCBzaXplX3QsIHNpemUpXFxuIHtcXG4tXFx0cmV0dXJuIHBhdGhfbGlzdHhhdHRyYXQoZGZkLCBwYXRobmFtZSwgYXRfZmxhZ3MsIGxpc3QsIHNpemUpO1xcbitcXHRyZXR1cm4gcGF0aF9saXN0eGF0dHJhdChkZmQsIHBhdGhuYW1lLCBhdF9mbGFncywgbGlzdCwgc2l6ZSwgdHJ1ZSk7XFxuIH1cXG4gXFxuIFNZU0NBTExfREVGSU5FMyhsaXN0eGF0dHIsIGNvbnN0IGNoYXIgX191c2VyICosIHBhdGhuYW1lLCBjaGFyIF9fdXNlciAqLCBsaXN0LFxcbiBcXHRcXHRzaXplX3QsIHNpemUpXFxuIHtcXG4tXFx0cmV0dXJuIHBhdGhfbGlzdHhhdHRyYXQoQVRfRkRDV0QsIHBhdGhuYW1lLCAwLCBsaXN0LCBzaXplKTtcXG4rXFx0cmV0dXJuIHBhdGhfbGlzdHhhdHRyYXQoQVRfRkRDV0QsIHBhdGhuYW1lLCAwLCBsaXN0LCBzaXplLCBmYWxzZSk7XFxuIH1cXG4gXFxuIFNZU0NBTExfREVGSU5FMyhsbGlzdHhhdHRyLCBjb25zdCBjaGFyIF9fdXNlciAqLCBwYXRobmFtZSwgY2hhciBfX3VzZXIgKiwgbGlzdCxcXG4gXFx0XFx0c2l6ZV90LCBzaXplKVxcbiB7XFxuLVxcdHJldHVybiBwYXRoX2xpc3R4YXR0cmF0KEFUX0ZEQ1dELCBwYXRobmFtZSwgQVRfU1lNTElOS19OT0ZPTExPVywgbGlzdCwgc2l6ZSk7XFxuK1xcdHJldHVybiBwYXRoX2xpc3R4YXR0cmF0KEFUX0ZEQ1dELCBwYXRobmFtZSwgQVRfU1lNTElOS19OT0ZPTExPVywgbGlzdCxcXG4rXFx0XFx0XFx0XFx0c2l6ZSwgZmFsc2UpO1xcbiB9XFxuIFxcbiBTWVNDQUxMX0RFRklORTMoZmxpc3R4YXR0ciwgaW50LCBmZCwgY2hhciBfX3VzZXIgKiwgbGlzdCwgc2l6ZV90LCBzaXplKVxcbiB7XFxuLVxcdHJldHVybiBwYXRoX2xpc3R4YXR0cmF0KGZkLCBOVUxMLCBBVF9FTVBUWV9QQVRILCBsaXN0LCBzaXplKTtcXG4rXFx0cmV0dXJuIHBhdGhfbGlzdHhhdHRyYXQoZmQsIE5VTEwsIEFUX0VNUFRZX1BBVEgsIGxpc3QsIHNpemUsIGZhbHNlKTtcXG4gfVxcbiBcXG4gLypcXG5AQCAtMTA3Myw3ICsxMDc4LDggQEAgc3RhdGljIGludCBmaWxlbmFtZV9yZW1vdmV4YXR0cihpbnQgZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKmZpbGVuYW1lLFxcbiB9XFxuIFxcbiBzdGF0aWMgaW50IHBhdGhfcmVtb3ZleGF0dHJhdChpbnQgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqcGF0aG5hbWUsXFxuLVxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGludCBhdF9mbGFncywgY29uc3QgY2hhciBfX3VzZXIgKm5hbWUpXFxuK1xcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGludCBhdF9mbGFncywgY29uc3QgY2hhciBfX3VzZXIgKm5hbWUsXFxuK1xcdFxcdFxcdCAgICAgIGJvb2wgcmF3KVxcbiB7XFxuIFxcdHN0cnVjdCB4YXR0cl9uYW1lIGtuYW1lO1xcbiBcXHR1bnNpZ25lZCBpbnQgbG9va3VwX2ZsYWdzO1xcbkBAIC0xMDg4LDcgKzEwOTQsNyBAQCBzdGF0aWMgaW50IHBhdGhfcmVtb3ZleGF0dHJhdChpbnQgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqcGF0aG5hbWUsXFxuIFxcbiBcXHRDTEFTUyhmaWxlbmFtZV9tYXliZV9udWxsLCBmaWxlbmFtZSkocGF0aG5hbWUsIGF0X2ZsYWdzKTtcXG4gXFx0aWYgKCFmaWxlbmFtZSkge1xcbi1cXHRcXHRDTEFTUyhmZCwgZikoZGZkKTtcXG4rXFx0XFx0Q0xBU1MoZmRfbWF5YmVfcmF3LCBmKShkZmQsIHJhdyk7XFxuIFxcdFxcdGlmIChmZF9lbXB0eShmKSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FQkFERjtcXG4gXFx0XFx0cmV0dXJuIGZpbGVfcmVtb3ZleGF0dHIoZmRfZmlsZShmKSwgXFx1MDAyNmtuYW1lKTtcXG5AQCAtMTEwMCwyNCArMTEwNiwyNSBAQCBzdGF0aWMgaW50IHBhdGhfcmVtb3ZleGF0dHJhdChpbnQgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqcGF0aG5hbWUsXFxuIFNZU0NBTExfREVGSU5FNChyZW1vdmV4YXR0cmF0LCBpbnQsIGRmZCwgY29uc3QgY2hhciBfX3VzZXIgKiwgcGF0aG5hbWUsXFxuIFxcdFxcdHVuc2lnbmVkIGludCwgYXRfZmxhZ3MsIGNvbnN0IGNoYXIgX191c2VyICosIG5hbWUpXFxuIHtcXG4tXFx0cmV0dXJuIHBhdGhfcmVtb3ZleGF0dHJhdChkZmQsIHBhdGhuYW1lLCBhdF9mbGFncywgbmFtZSk7XFxuK1xcdHJldHVybiBwYXRoX3JlbW92ZXhhdHRyYXQoZGZkLCBwYXRobmFtZSwgYXRfZmxhZ3MsIG5hbWUsIHRydWUpO1xcbiB9XFxuIFxcbiBTWVNDQUxMX0RFRklORTIocmVtb3ZleGF0dHIsIGNvbnN0IGNoYXIgX191c2VyICosIHBhdGhuYW1lLFxcbiBcXHRcXHRjb25zdCBjaGFyIF9fdXNlciAqLCBuYW1lKVxcbiB7XFxuLVxcdHJldHVybiBwYXRoX3JlbW92ZXhhdHRyYXQoQVRfRkRDV0QsIHBhdGhuYW1lLCAwLCBuYW1lKTtcXG4rXFx0cmV0dXJuIHBhdGhfcmVtb3ZleGF0dHJhdChBVF9GRENXRCwgcGF0aG5hbWUsIDAsIG5hbWUsIGZhbHNlKTtcXG4gfVxcbiBcXG4gU1lTQ0FMTF9ERUZJTkUyKGxyZW1vdmV4YXR0ciwgY29uc3QgY2hhciBfX3VzZXIgKiwgcGF0aG5hbWUsXFxuIFxcdFxcdGNvbnN0IGNoYXIgX191c2VyICosIG5hbWUpXFxuIHtcXG4tXFx0cmV0dXJuIHBhdGhfcmVtb3ZleGF0dHJhdChBVF9GRENXRCwgcGF0aG5hbWUsIEFUX1NZTUxJTktfTk9GT0xMT1csIG5hbWUpO1xcbitcXHRyZXR1cm4gcGF0aF9yZW1vdmV4YXR0cmF0KEFUX0ZEQ1dELCBwYXRobmFtZSwgQVRfU1lNTElOS19OT0ZPTExPVywgbmFtZSxcXG4rXFx0XFx0XFx0XFx0ICBmYWxzZSk7XFxuIH1cXG4gXFxuIFNZU0NBTExfREVGSU5FMihmcmVtb3ZleGF0dHIsIGludCwgZmQsIGNvbnN0IGNoYXIgX191c2VyICosIG5hbWUpXFxuIHtcXG4tXFx0cmV0dXJuIHBhdGhfcmVtb3ZleGF0dHJhdChmZCwgTlVMTCwgQVRfRU1QVFlfUEFUSCwgbmFtZSk7XFxuK1xcdHJldHVybiBwYXRoX3JlbW92ZXhhdHRyYXQoZmQsIE5VTEwsIEFUX0VNUFRZX1BBVEgsIG5hbWUsIGZhbHNlKTtcXG4gfVxcbiBcXG4gaW50IHhhdHRyX2xpc3Rfb25lKGNoYXIgKipidWZmZXIsIHNzaXplX3QgKnJlbWFpbmluZ19zaXplLCBjb25zdCBjaGFyICpuYW1lKVxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZpbGUuaCBiL2luY2x1ZGUvbGludXgvZmlsZS5oXFxuaW5kZXggMjc0ODRiNDQ0ZDMxNTUuLjJhMWRjNzM4OTgxZTAzIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvZmlsZS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9maWxlLmhcXG5AQCAtODIsNiArODIsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZmRwdXRfcG9zKHN0cnVjdCBmZCBmKVxcbiBcXG4gREVGSU5FX0NMQVNTKGZkLCBzdHJ1Y3QgZmQsIGZkcHV0KF9UKSwgZmRnZXQoZmQpLCBpbnQgZmQpXFxuIERFRklORV9DTEFTUyhmZF9yYXcsIHN0cnVjdCBmZCwgZmRwdXQoX1QpLCBmZGdldF9yYXcoZmQpLCBpbnQgZmQpXFxuK0RFRklORV9DTEFTUyhmZF9tYXliZV9yYXcsIHN0cnVjdCBmZCwgZmRwdXQoX1QpLFxcbitcXHQgICAgIHJhdyA/IGZkZ2V0X3JhdyhmZCkgOiBmZGdldChmZCksIGludCBmZCwgYm9vbCByYXcpXFxuIERFRklORV9DTEFTUyhmZF9wb3MsIHN0cnVjdCBmZCwgZmRwdXRfcG9zKF9UKSwgZmRnZXRfcG9zKGZkKSwgaW50IGZkKVxcbiBcXG4gZXh0ZXJuIGludCBmX2R1cGZkKHVuc2lnbmVkIGludCBmcm9tLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgZmxhZ3MpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxNjo0OTowNi41MDc3MTE0NzdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoyMDkzNzU5NjUyNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVE1QRlNfWEFUVFJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwYXRoX3NldHhhdHRyYXRcIixcbiAgICBcInBhdGhfZ2V0eGF0dHJhdFwiLFxuICAgIFwicGF0aF9saXN0eGF0dHJhdFwiLFxuICAgIFwicGF0aF9yZW1vdmV4YXR0cmF0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGAqeGF0dHJhdGAgc3lzY2FsbHMgKGUuZy4sIGBzZXR4YXR0cmF0YCwgYGdldHhhdHRyYXRgLCBgbGlzdHhhdHRyYXRgLCBgcmVtb3ZleGF0dHJhdGApIHRvIGFsbG93IG9wZXJhdGluZyBvbiBgT19QQVRIYCBmaWxlIGRlc2NyaXB0b3JzIHdoZW4gYEFUX0VNUFRZX1BBVEhgIGlzIHVzZWQuIFRoaXMgaXMgYWNoaWV2ZWQgYnkgaW50cm9kdWNpbmcgYSBuZXcgYGZkX21heWJlX3Jhd2AgY2xhc3MgdGhhdCB1c2VzIGBmZGdldF9yYXdgIGluc3RlYWQgb2YgYGZkZ2V0YCB3aGVuIHRoZSBgcmF3YCBwYXJhbWV0ZXIgaXMgdHJ1ZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWx0ZXJzIHRoZSBiZWhhdmlvciBvZiB0aGVzZSBzeXNjYWxscywgbWFraW5nIHRoZW0gY29uc2lzdGVudCB3aXRoIG90aGVyIGAqYXRgIHN5c2NhbGxzIGxpa2UgYGZjaG93bmF0YCBhbmQgYGZzdGF0YXRgLiBJdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gcmVncmVzc2lvbnMgb3IgdW5leHBlY3RlZCBiZWhhdmlvcnMgd2hlbiB1c2luZyBgT19QQVRIYCBmaWxlIGRlc2NyaXB0b3JzIHdpdGggZXh0ZW5kZWQgYXR0cmlidXRlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiMDdjMTJkOWRmM2FlZjI5N2ZjZWRmZjExNmQ3YjgyYTEzZTg0ZmMzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMjMgMTY6NDk6MDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy94YXR0ci5jIGIvZnMveGF0dHIuY1xuaW5kZXggZDU4OTc5MTE1MjAwNzUuLjFkYjY1OTZhMmVjMTEwIDEwMDY0NFxuLS0tIGEvZnMveGF0dHIuY1xuKysrIGIvZnMveGF0dHIuY1xuQEAgLTcwMCw3ICs3MDAsOCBAQCBpbnQgZmlsZW5hbWVfc2V0eGF0dHIoaW50IGRmZCwgc3RydWN0IGZpbGVuYW1lICpmaWxlbmFtZSxcbiBcbiBzdGF0aWMgaW50IHBhdGhfc2V0eGF0dHJhdChpbnQgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqcGF0aG5hbWUsXG4gXHRcdFx0ICAgdW5zaWduZWQgaW50IGF0X2ZsYWdzLCBjb25zdCBjaGFyIF9fdXNlciAqbmFtZSxcbi1cdFx0XHQgICBjb25zdCB2b2lkIF9fdXNlciAqdmFsdWUsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpXG4rXHRcdFx0ICAgY29uc3Qgdm9pZCBfX3VzZXIgKnZhbHVlLCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzLFxuK1x0XHRcdCAgIGJvb2wgcmF3KVxuIHtcbiBcdHN0cnVjdCB4YXR0cl9uYW1lIGtuYW1lO1xuIFx0c3RydWN0IGtlcm5lbF94YXR0cl9jdHggY3R4ID0ge1xuQEAgLTcyNSw3ICs3MjYsNyBAQCBzdGF0aWMgaW50IHBhdGhfc2V0eGF0dHJhdChpbnQgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqcGF0aG5hbWUsXG4gXG4gXHRDTEFTUyhmaWxlbmFtZV9tYXliZV9udWxsLCBmaWxlbmFtZSkocGF0aG5hbWUsIGF0X2ZsYWdzKTtcbiBcdGlmICghZmlsZW5hbWUgXHUwMDI2XHUwMDI2IGRmZCBcdTAwM2U9IDApIHtcbi1cdFx0Q0xBU1MoZmQsIGYpKGRmZCk7XG4rXHRcdENMQVNTKGZkX21heWJlX3JhdywgZikoZGZkLCByYXcpO1xuIFx0XHRpZiAoZmRfZW1wdHkoZikpXG4gXHRcdFx0ZXJyb3IgPSAtRUJBREY7XG4gXHRcdGVsc2VcbkBAIC03NTgsMTQgKzc1OSwxNSBAQCBTWVNDQUxMX0RFRklORTYoc2V0eGF0dHJhdCwgaW50LCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICosIHBhdGhuYW1lLCB1bnNpZ25lZCBpblxuIFxuIFx0cmV0dXJuIHBhdGhfc2V0eGF0dHJhdChkZmQsIHBhdGhuYW1lLCBhdF9mbGFncywgbmFtZSxcbiBcdFx0XHQgICAgICAgdTY0X3RvX3VzZXJfcHRyKGFyZ3MudmFsdWUpLCBhcmdzLnNpemUsXG4tXHRcdFx0ICAgICAgIGFyZ3MuZmxhZ3MpO1xuK1x0XHRcdCAgICAgICBhcmdzLmZsYWdzLCB0cnVlKTtcbiB9XG4gXG4gU1lTQ0FMTF9ERUZJTkU1KHNldHhhdHRyLCBjb25zdCBjaGFyIF9fdXNlciAqLCBwYXRobmFtZSxcbiBcdFx0Y29uc3QgY2hhciBfX3VzZXIgKiwgbmFtZSwgY29uc3Qgdm9pZCBfX3VzZXIgKiwgdmFsdWUsXG4gXHRcdHNpemVfdCwgc2l6ZSwgaW50LCBmbGFncylcbiB7XG4tXHRyZXR1cm4gcGF0aF9zZXR4YXR0cmF0KEFUX0ZEQ1dELCBwYXRobmFtZSwgMCwgbmFtZSwgdmFsdWUsIHNpemUsIGZsYWdzKTtcbitcdHJldHVybiBwYXRoX3NldHhhdHRyYXQoQVRfRkRDV0QsIHBhdGhuYW1lLCAwLCBuYW1lLCB2YWx1ZSwgc2l6ZSwgZmxhZ3MsXG4rXHRcdFx0ICAgICAgIGZhbHNlKTtcbiB9XG4gXG4gU1lTQ0FMTF9ERUZJTkU1KGxzZXR4YXR0ciwgY29uc3QgY2hhciBfX3VzZXIgKiwgcGF0aG5hbWUsXG5AQCAtNzczLDE0ICs3NzUsMTQgQEAgU1lTQ0FMTF9ERUZJTkU1KGxzZXR4YXR0ciwgY29uc3QgY2hhciBfX3VzZXIgKiwgcGF0aG5hbWUsXG4gXHRcdHNpemVfdCwgc2l6ZSwgaW50LCBmbGFncylcbiB7XG4gXHRyZXR1cm4gcGF0aF9zZXR4YXR0cmF0KEFUX0ZEQ1dELCBwYXRobmFtZSwgQVRfU1lNTElOS19OT0ZPTExPVywgbmFtZSxcbi1cdFx0XHQgICAgICAgdmFsdWUsIHNpemUsIGZsYWdzKTtcbitcdFx0XHQgICAgICAgdmFsdWUsIHNpemUsIGZsYWdzLCBmYWxzZSk7XG4gfVxuIFxuIFNZU0NBTExfREVGSU5FNShmc2V0eGF0dHIsIGludCwgZmQsIGNvbnN0IGNoYXIgX191c2VyICosIG5hbWUsXG4gXHRcdGNvbnN0IHZvaWQgX191c2VyICosdmFsdWUsIHNpemVfdCwgc2l6ZSwgaW50LCBmbGFncylcbiB7XG4gXHRyZXR1cm4gcGF0aF9zZXR4YXR0cmF0KGZkLCBOVUxMLCBBVF9FTVBUWV9QQVRILCBuYW1lLFxuLVx0XHRcdCAgICAgICB2YWx1ZSwgc2l6ZSwgZmxhZ3MpO1xuK1x0XHRcdCAgICAgICB2YWx1ZSwgc2l6ZSwgZmxhZ3MsIGZhbHNlKTtcbiB9XG4gXG4gLypcbkBAIC04NDUsNyArODQ3LDcgQEAgc3NpemVfdCBmaWxlbmFtZV9nZXR4YXR0cihpbnQgZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKmZpbGVuYW1lLFxuIFxuIHN0YXRpYyBzc2l6ZV90IHBhdGhfZ2V0eGF0dHJhdChpbnQgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqcGF0aG5hbWUsXG4gXHRcdFx0ICAgICAgIHVuc2lnbmVkIGludCBhdF9mbGFncywgY29uc3QgY2hhciBfX3VzZXIgKm5hbWUsXG4tXHRcdFx0ICAgICAgIHZvaWQgX191c2VyICp2YWx1ZSwgc2l6ZV90IHNpemUpXG4rXHRcdFx0ICAgICAgIHZvaWQgX191c2VyICp2YWx1ZSwgc2l6ZV90IHNpemUsIGJvb2wgcmF3KVxuIHtcbiBcdHN0cnVjdCB4YXR0cl9uYW1lIGtuYW1lO1xuIFx0c3RydWN0IGtlcm5lbF94YXR0cl9jdHggY3R4ID0ge1xuQEAgLTg2NSw3ICs4NjcsNyBAQCBzdGF0aWMgc3NpemVfdCBwYXRoX2dldHhhdHRyYXQoaW50IGRmZCwgY29uc3QgY2hhciBfX3VzZXIgKnBhdGhuYW1lLFxuIFxuIFx0Q0xBU1MoZmlsZW5hbWVfbWF5YmVfbnVsbCwgZmlsZW5hbWUpKHBhdGhuYW1lLCBhdF9mbGFncyk7XG4gXHRpZiAoIWZpbGVuYW1lIFx1MDAyNlx1MDAyNiBkZmQgXHUwMDNlPSAwKSB7XG4tXHRcdENMQVNTKGZkLCBmKShkZmQpO1xuK1x0XHRDTEFTUyhmZF9tYXliZV9yYXcsIGYpKGRmZCwgcmF3KTtcbiBcdFx0aWYgKGZkX2VtcHR5KGYpKVxuIFx0XHRcdHJldHVybiAtRUJBREY7XG4gXHRcdHJldHVybiBmaWxlX2dldHhhdHRyKGZkX2ZpbGUoZiksIFx1MDAyNmN0eCk7XG5AQCAtODk5LDI2ICs5MDEsMjggQEAgU1lTQ0FMTF9ERUZJTkU2KGdldHhhdHRyYXQsIGludCwgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqLCBwYXRobmFtZSwgdW5zaWduZWQgaW5cbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRyZXR1cm4gcGF0aF9nZXR4YXR0cmF0KGRmZCwgcGF0aG5hbWUsIGF0X2ZsYWdzLCBuYW1lLFxuLVx0XHRcdCAgICAgICB1NjRfdG9fdXNlcl9wdHIoYXJncy52YWx1ZSksIGFyZ3Muc2l6ZSk7XG4rXHRcdFx0ICAgICAgIHU2NF90b191c2VyX3B0cihhcmdzLnZhbHVlKSwgYXJncy5zaXplLCB0cnVlKTtcbiB9XG4gXG4gU1lTQ0FMTF9ERUZJTkU0KGdldHhhdHRyLCBjb25zdCBjaGFyIF9fdXNlciAqLCBwYXRobmFtZSxcbiBcdFx0Y29uc3QgY2hhciBfX3VzZXIgKiwgbmFtZSwgdm9pZCBfX3VzZXIgKiwgdmFsdWUsIHNpemVfdCwgc2l6ZSlcbiB7XG4tXHRyZXR1cm4gcGF0aF9nZXR4YXR0cmF0KEFUX0ZEQ1dELCBwYXRobmFtZSwgMCwgbmFtZSwgdmFsdWUsIHNpemUpO1xuK1x0cmV0dXJuIHBhdGhfZ2V0eGF0dHJhdChBVF9GRENXRCwgcGF0aG5hbWUsIDAsIG5hbWUsIHZhbHVlLCBzaXplLFxuK1x0XHRcdCAgICAgICBmYWxzZSk7XG4gfVxuIFxuIFNZU0NBTExfREVGSU5FNChsZ2V0eGF0dHIsIGNvbnN0IGNoYXIgX191c2VyICosIHBhdGhuYW1lLFxuIFx0XHRjb25zdCBjaGFyIF9fdXNlciAqLCBuYW1lLCB2b2lkIF9fdXNlciAqLCB2YWx1ZSwgc2l6ZV90LCBzaXplKVxuIHtcbiBcdHJldHVybiBwYXRoX2dldHhhdHRyYXQoQVRfRkRDV0QsIHBhdGhuYW1lLCBBVF9TWU1MSU5LX05PRk9MTE9XLCBuYW1lLFxuLVx0XHRcdCAgICAgICB2YWx1ZSwgc2l6ZSk7XG4rXHRcdFx0ICAgICAgIHZhbHVlLCBzaXplLCBmYWxzZSk7XG4gfVxuIFxuIFNZU0NBTExfREVGSU5FNChmZ2V0eGF0dHIsIGludCwgZmQsIGNvbnN0IGNoYXIgX191c2VyICosIG5hbWUsXG4gXHRcdHZvaWQgX191c2VyICosIHZhbHVlLCBzaXplX3QsIHNpemUpXG4ge1xuLVx0cmV0dXJuIHBhdGhfZ2V0eGF0dHJhdChmZCwgTlVMTCwgQVRfRU1QVFlfUEFUSCwgbmFtZSwgdmFsdWUsIHNpemUpO1xuK1x0cmV0dXJuIHBhdGhfZ2V0eGF0dHJhdChmZCwgTlVMTCwgQVRfRU1QVFlfUEFUSCwgbmFtZSwgdmFsdWUsIHNpemUsXG4rXHRcdFx0ICAgICAgIGZhbHNlKTtcbiB9XG4gXG4gLypcbkBAIC05ODIsNyArOTg2LDcgQEAgc3NpemVfdCBmaWxlbmFtZV9saXN0eGF0dHIoaW50IGRmZCwgc3RydWN0IGZpbGVuYW1lICpmaWxlbmFtZSxcbiBcbiBzdGF0aWMgc3NpemVfdCBwYXRoX2xpc3R4YXR0cmF0KGludCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICpwYXRobmFtZSxcbiBcdFx0XHRcdHVuc2lnbmVkIGludCBhdF9mbGFncywgY2hhciBfX3VzZXIgKmxpc3QsXG4tXHRcdFx0XHRzaXplX3Qgc2l6ZSlcbitcdFx0XHRcdHNpemVfdCBzaXplLCBib29sIHJhdylcbiB7XG4gXHRpbnQgbG9va3VwX2ZsYWdzO1xuIFxuQEAgLTk5MSw3ICs5OTUsNyBAQCBzdGF0aWMgc3NpemVfdCBwYXRoX2xpc3R4YXR0cmF0KGludCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICpwYXRobmFtZSxcbiBcbiBcdENMQVNTKGZpbGVuYW1lX21heWJlX251bGwsIGZpbGVuYW1lKShwYXRobmFtZSwgYXRfZmxhZ3MpO1xuIFx0aWYgKCFmaWxlbmFtZSkge1xuLVx0XHRDTEFTUyhmZCwgZikoZGZkKTtcbitcdFx0Q0xBU1MoZmRfbWF5YmVfcmF3LCBmKShkZmQsIHJhdyk7XG4gXHRcdGlmIChmZF9lbXB0eShmKSlcbiBcdFx0XHRyZXR1cm4gLUVCQURGO1xuIFx0XHRyZXR1cm4gZmlsZV9saXN0eGF0dHIoZmRfZmlsZShmKSwgbGlzdCwgc2l6ZSk7XG5AQCAtMTAwNSwyNCArMTAwOSwyNSBAQCBTWVNDQUxMX0RFRklORTUobGlzdHhhdHRyYXQsIGludCwgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqLCBwYXRobmFtZSxcbiBcdFx0dW5zaWduZWQgaW50LCBhdF9mbGFncyxcbiBcdFx0Y2hhciBfX3VzZXIgKiwgbGlzdCwgc2l6ZV90LCBzaXplKVxuIHtcbi1cdHJldHVybiBwYXRoX2xpc3R4YXR0cmF0KGRmZCwgcGF0aG5hbWUsIGF0X2ZsYWdzLCBsaXN0LCBzaXplKTtcbitcdHJldHVybiBwYXRoX2xpc3R4YXR0cmF0KGRmZCwgcGF0aG5hbWUsIGF0X2ZsYWdzLCBsaXN0LCBzaXplLCB0cnVlKTtcbiB9XG4gXG4gU1lTQ0FMTF9ERUZJTkUzKGxpc3R4YXR0ciwgY29uc3QgY2hhciBfX3VzZXIgKiwgcGF0aG5hbWUsIGNoYXIgX191c2VyICosIGxpc3QsXG4gXHRcdHNpemVfdCwgc2l6ZSlcbiB7XG4tXHRyZXR1cm4gcGF0aF9saXN0eGF0dHJhdChBVF9GRENXRCwgcGF0aG5hbWUsIDAsIGxpc3QsIHNpemUpO1xuK1x0cmV0dXJuIHBhdGhfbGlzdHhhdHRyYXQoQVRfRkRDV0QsIHBhdGhuYW1lLCAwLCBsaXN0LCBzaXplLCBmYWxzZSk7XG4gfVxuIFxuIFNZU0NBTExfREVGSU5FMyhsbGlzdHhhdHRyLCBjb25zdCBjaGFyIF9fdXNlciAqLCBwYXRobmFtZSwgY2hhciBfX3VzZXIgKiwgbGlzdCxcbiBcdFx0c2l6ZV90LCBzaXplKVxuIHtcbi1cdHJldHVybiBwYXRoX2xpc3R4YXR0cmF0KEFUX0ZEQ1dELCBwYXRobmFtZSwgQVRfU1lNTElOS19OT0ZPTExPVywgbGlzdCwgc2l6ZSk7XG4rXHRyZXR1cm4gcGF0aF9saXN0eGF0dHJhdChBVF9GRENXRCwgcGF0aG5hbWUsIEFUX1NZTUxJTktfTk9GT0xMT1csIGxpc3QsXG4rXHRcdFx0XHRzaXplLCBmYWxzZSk7XG4gfVxuIFxuIFNZU0NBTExfREVGSU5FMyhmbGlzdHhhdHRyLCBpbnQsIGZkLCBjaGFyIF9fdXNlciAqLCBsaXN0LCBzaXplX3QsIHNpemUpXG4ge1xuLVx0cmV0dXJuIHBhdGhfbGlzdHhhdHRyYXQoZmQsIE5VTEwsIEFUX0VNUFRZX1BBVEgsIGxpc3QsIHNpemUpO1xuK1x0cmV0dXJuIHBhdGhfbGlzdHhhdHRyYXQoZmQsIE5VTEwsIEFUX0VNUFRZX1BBVEgsIGxpc3QsIHNpemUsIGZhbHNlKTtcbiB9XG4gXG4gLypcbkBAIC0xMDczLDcgKzEwNzgsOCBAQCBzdGF0aWMgaW50IGZpbGVuYW1lX3JlbW92ZXhhdHRyKGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqZmlsZW5hbWUsXG4gfVxuIFxuIHN0YXRpYyBpbnQgcGF0aF9yZW1vdmV4YXR0cmF0KGludCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICpwYXRobmFtZSxcbi1cdFx0XHQgICAgICB1bnNpZ25lZCBpbnQgYXRfZmxhZ3MsIGNvbnN0IGNoYXIgX191c2VyICpuYW1lKVxuK1x0XHRcdCAgICAgIHVuc2lnbmVkIGludCBhdF9mbGFncywgY29uc3QgY2hhciBfX3VzZXIgKm5hbWUsXG4rXHRcdFx0ICAgICAgYm9vbCByYXcpXG4ge1xuIFx0c3RydWN0IHhhdHRyX25hbWUga25hbWU7XG4gXHR1bnNpZ25lZCBpbnQgbG9va3VwX2ZsYWdzO1xuQEAgLTEwODgsNyArMTA5NCw3IEBAIHN0YXRpYyBpbnQgcGF0aF9yZW1vdmV4YXR0cmF0KGludCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICpwYXRobmFtZSxcbiBcbiBcdENMQVNTKGZpbGVuYW1lX21heWJlX251bGwsIGZpbGVuYW1lKShwYXRobmFtZSwgYXRfZmxhZ3MpO1xuIFx0aWYgKCFmaWxlbmFtZSkge1xuLVx0XHRDTEFTUyhmZCwgZikoZGZkKTtcbitcdFx0Q0xBU1MoZmRfbWF5YmVfcmF3LCBmKShkZmQsIHJhdyk7XG4gXHRcdGlmIChmZF9lbXB0eShmKSlcbiBcdFx0XHRyZXR1cm4gLUVCQURGO1xuIFx0XHRyZXR1cm4gZmlsZV9yZW1vdmV4YXR0cihmZF9maWxlKGYpLCBcdTAwMjZrbmFtZSk7XG5AQCAtMTEwMCwyNCArMTEwNiwyNSBAQCBzdGF0aWMgaW50IHBhdGhfcmVtb3ZleGF0dHJhdChpbnQgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqcGF0aG5hbWUsXG4gU1lTQ0FMTF9ERUZJTkU0KHJlbW92ZXhhdHRyYXQsIGludCwgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqLCBwYXRobmFtZSxcbiBcdFx0dW5zaWduZWQgaW50LCBhdF9mbGFncywgY29uc3QgY2hhciBfX3VzZXIgKiwgbmFtZSlcbiB7XG4tXHRyZXR1cm4gcGF0aF9yZW1vdmV4YXR0cmF0KGRmZCwgcGF0aG5hbWUsIGF0X2ZsYWdzLCBuYW1lKTtcbitcdHJldHVybiBwYXRoX3JlbW92ZXhhdHRyYXQoZGZkLCBwYXRobmFtZSwgYXRfZmxhZ3MsIG5hbWUsIHRydWUpO1xuIH1cbiBcbiBTWVNDQUxMX0RFRklORTIocmVtb3ZleGF0dHIsIGNvbnN0IGNoYXIgX191c2VyICosIHBhdGhuYW1lLFxuIFx0XHRjb25zdCBjaGFyIF9fdXNlciAqLCBuYW1lKVxuIHtcbi1cdHJldHVybiBwYXRoX3JlbW92ZXhhdHRyYXQoQVRfRkRDV0QsIHBhdGhuYW1lLCAwLCBuYW1lKTtcbitcdHJldHVybiBwYXRoX3JlbW92ZXhhdHRyYXQoQVRfRkRDV0QsIHBhdGhuYW1lLCAwLCBuYW1lLCBmYWxzZSk7XG4gfVxuIFxuIFNZU0NBTExfREVGSU5FMihscmVtb3ZleGF0dHIsIGNvbnN0IGNoYXIgX191c2VyICosIHBhdGhuYW1lLFxuIFx0XHRjb25zdCBjaGFyIF9fdXNlciAqLCBuYW1lKVxuIHtcbi1cdHJldHVybiBwYXRoX3JlbW92ZXhhdHRyYXQoQVRfRkRDV0QsIHBhdGhuYW1lLCBBVF9TWU1MSU5LX05PRk9MTE9XLCBuYW1lKTtcbitcdHJldHVybiBwYXRoX3JlbW92ZXhhdHRyYXQoQVRfRkRDV0QsIHBhdGhuYW1lLCBBVF9TWU1MSU5LX05PRk9MTE9XLCBuYW1lLFxuK1x0XHRcdFx0ICBmYWxzZSk7XG4gfVxuIFxuIFNZU0NBTExfREVGSU5FMihmcmVtb3ZleGF0dHIsIGludCwgZmQsIGNvbnN0IGNoYXIgX191c2VyICosIG5hbWUpXG4ge1xuLVx0cmV0dXJuIHBhdGhfcmVtb3ZleGF0dHJhdChmZCwgTlVMTCwgQVRfRU1QVFlfUEFUSCwgbmFtZSk7XG4rXHRyZXR1cm4gcGF0aF9yZW1vdmV4YXR0cmF0KGZkLCBOVUxMLCBBVF9FTVBUWV9QQVRILCBuYW1lLCBmYWxzZSk7XG4gfVxuIFxuIGludCB4YXR0cl9saXN0X29uZShjaGFyICoqYnVmZmVyLCBzc2l6ZV90ICpyZW1haW5pbmdfc2l6ZSwgY29uc3QgY2hhciAqbmFtZSlcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZpbGUuaCBiL2luY2x1ZGUvbGludXgvZmlsZS5oXG5pbmRleCAyNzQ4NGI0NDRkMzE1NS4uMmExZGM3Mzg5ODFlMDMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZpbGUuaFxuKysrIGIvaW5jbHVkZS9saW51eC9maWxlLmhcbkBAIC04Miw2ICs4Miw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBmZHB1dF9wb3Moc3RydWN0IGZkIGYpXG4gXG4gREVGSU5FX0NMQVNTKGZkLCBzdHJ1Y3QgZmQsIGZkcHV0KF9UKSwgZmRnZXQoZmQpLCBpbnQgZmQpXG4gREVGSU5FX0NMQVNTKGZkX3Jhdywgc3RydWN0IGZkLCBmZHB1dChfVCksIGZkZ2V0X3JhdyhmZCksIGludCBmZClcbitERUZJTkVfQ0xBU1MoZmRfbWF5YmVfcmF3LCBzdHJ1Y3QgZmQsIGZkcHV0KF9UKSxcbitcdCAgICAgcmF3ID8gZmRnZXRfcmF3KGZkKSA6IGZkZ2V0KGZkKSwgaW50IGZkLCBib29sIHJhdylcbiBERUZJTkVfQ0xBU1MoZmRfcG9zLCBzdHJ1Y3QgZmQsIGZkcHV0X3BvcyhfVCksIGZkZ2V0X3BvcyhmZCksIGludCBmZClcbiBcbiBleHRlcm4gaW50IGZfZHVwZmQodW5zaWduZWQgaW50IGZyb20sIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBmbGFncyk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxNjo0OTowNi41MDc3MTI4MjdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODA5ODc2ODA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgeGF0dHIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgZnMveGF0dHIuY2AgYW5kIGBpbmNsdWRlL2xpbnV4L2ZpbGUuaGAuIEl0IHNlZW1zIHRoZXkncmUgYWRkaW5nIGEgYGJvb2wgcmF3YCBhcmd1bWVudCB0byB0aGUgYHBhdGhfc2V0eGF0dHJhdGAsIGBwYXRoX2dldHhhdHRyYXRgLCBgcGF0aF9saXN0eGF0dHJhdGAsIGFuZCBgcGF0aF9yZW1vdmV4YXR0cmF0YCBmdW5jdGlvbnMuIFJpZ2h0LCBhbmQgdGhpcyBpcyBhYm91dCBkaWZmZXJlbnRpYXRpbmcgYmV0d2VlbiB0aGUgbmV3ZXIgYCphdGAgc3lzY2FsbHMgYW5kIHRoZSBvbGRlciBvbmVzLCBzbyB0aGUgYHJhd2AgZmxhZyBnZXRzIHBhc3NlZCBhcyBgdHJ1ZWAgZm9yIHRoZSBmb3JtZXIgKGUuZy4sIGBzZXR4YXR0cmF0YCkgYW5kIGBmYWxzZWAgZm9yIHRoZSBvbGRlciBvbmVzIChlLmcuLCBgc2V0eGF0dHJgLCBgbHNldHhhdHRyYCwgYGZzZXR4YXR0cmApLiBXYWl0IGEgc2Vjb25kLCB0aGUgb2xkZXIgc3lzY2FsbCBgZnNldHhhdHRyYCBhbHNvIHBhc3NlcyBgZmFsc2VgIGZvciBgcmF3YC5cblxuTm93LCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2sgYGluY2x1ZGUvbGludXgvZmlsZS5oYC4gQWgsIGhlcmUgaXQgaXM6IGBERUZJTkVfQ0xBU1MoZmRfbWF5YmVfcmF3LCBzdHJ1Y3QgZmQsIGZkcHV0KF9UKSwgcmF3ID8gZmRnZXRfcmF3KGZkKSA6IGZkZ2V0KGZkKSwgaW50IGZkLCBib29sIHJhdylgLiBPa2F5LCBzbyBpdCB1c2VzIGBmZGdldF9yYXcoZmQpYCBpZiBgcmF3YCBpcyB0cnVlIGFuZCBgZmRnZXQoZmQpYCBvdGhlcndpc2UuIFNvLCB0aGlzIG1lYW5zIHRoYXQgYGZkZ2V0X3Jhd2AgYWxsb3dzIHRoZSBnZXR0aW5nIG9mIHRoZSBmaWxlIGRlc2NyaXB0b3IgZXZlbiBpZiBpdCBpcyBhbiBgT19QQVRIYCBmaWxlIGRlc2NyaXB0b3IsIHdoaWxlIGBmZGdldGAgd291bGQgcG90ZW50aWFsbHkgZmFpbC4gU28sIHRoaXMgY2hhbmdlIGlzIGFsbG93aW5nIGFjY2VzcyB0byB0aGVzZSBmaWxlIGRlc2NyaXB0b3JzIHdoZW4gdGhleSBvdGhlcndpc2Ugd291bGRuJ3QgYmUgYWxsb3dlZD8gSXQncyBwcm9iYWJseSByZWxhdGVkIHRvIGhhbmRsaW5nIGBPX1BBVEhgIGRlc2NyaXB0b3JzIHByb3Blcmx5LiBMZXQgbWUgZG91YmxlLWNoZWNrIHRoYXQgYnkgbG9va2luZyBhdCBob3cgYGZkZ2V0X3Jhd2Agd29ya3MuIEknbGwgdXNlIGBncmVwcGVyYCB0byBzZWUgd2hlcmUgYGZkZ2V0X3Jhd2AgaXMgZGVmaW5lZCBhbmQgd2hhdCBpdCBkb2VzIGluIGRldGFpbC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc5MiwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE2OjQ5OjEzLjMxNzU5MjM3M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjg5NTcxMjgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZkZ2V0X3Jhd1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9maWxlLmM9MTIxMD1FWFBPUlRfU1lNQk9MKGZkZ2V0KTtcXG5mcy9maWxlLmMtMTIxMS1cXG5mcy9maWxlLmM6MTIxMjpzdHJ1Y3QgZmQgZmRnZXRfcmF3KHVuc2lnbmVkIGludCBmZClcXG5mcy9maWxlLmMtMTIxMy17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZpbGUuaD03Mj1zdHJ1Y3QgZmQgZmRnZXQodW5zaWduZWQgaW50IGZkKTtcXG5pbmNsdWRlL2xpbnV4L2ZpbGUuaDo3MzpzdHJ1Y3QgZmQgZmRnZXRfcmF3KHVuc2lnbmVkIGludCBmZCk7XFxuaW5jbHVkZS9saW51eC9maWxlLmgtNzQtc3RydWN0IGZkIGZkZ2V0X3Bvcyh1bnNpZ25lZCBpbnQgZmQpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9maWxlLmg9ODM9REVGSU5FX0NMQVNTKGZkLCBzdHJ1Y3QgZmQsIGZkcHV0KF9UKSwgZmRnZXQoZmQpLCBpbnQgZmQpXFxuaW5jbHVkZS9saW51eC9maWxlLmg6ODQ6REVGSU5FX0NMQVNTKGZkX3Jhdywgc3RydWN0IGZkLCBmZHB1dChfVCksIGZkZ2V0X3JhdyhmZCksIGludCBmZClcXG5pbmNsdWRlL2xpbnV4L2ZpbGUuaC04NS1ERUZJTkVfQ0xBU1MoZmRfbWF5YmVfcmF3LCBzdHJ1Y3QgZmQsIGZkcHV0KF9UKSxcXG5pbmNsdWRlL2xpbnV4L2ZpbGUuaDo4NjpcXHQgICAgIHJhdyA/IGZkZ2V0X3JhdyhmZCkgOiBmZGdldChmZCksIGludCBmZCwgYm9vbCByYXcpXFxuaW5jbHVkZS9saW51eC9maWxlLmgtODctREVGSU5FX0NMQVNTKGZkX3Bvcywgc3RydWN0IGZkLCBmZHB1dF9wb3MoX1QpLCBmZGdldF9wb3MoZmQpLCBpbnQgZmQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE2OjQ5OjE2LjAwNzE2ODU4NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0NjUyNTU3NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgZmRnZXRfcmF3YCBGdW5jdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCBqdW1wIGludG8gdGhlIGBmZGdldF9yYXdgIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBsb29rIGF0IGBmcy9maWxlLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBsb3dlci1sZXZlbCBmaWxlIGRlc2NyaXB0b3IgaGFuZGxpbmcgcmVzaWRlcywgc28gdGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byB1bmRlcnN0YW5kIHRoZSBtZWNoYW5pY3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byBkby4gTXkgZ3Vlc3MgaXMgaXQncyBmZXRjaGluZyBhIHJhdyBmaWxlIGRlc2NyaXB0b3Igc3RydWN0dXJlLCBsaWtlbHkgd2l0aG91dCBhbnkgYWRkZWQgcHJvdGVjdGlvbiBvciBjaGVja3MsIHdoaWNoIEknbGwgaGF2ZSB0byBrZWVwIGluIG1pbmQuIExldCdzIHNlZSBob3cgaXQgaGFuZGxlcyB0aGUgZGlmZmVyZW50IHNjZW5hcmlvcywgZXJyb3JzLCBhbmQgd2hhdCB0aGUgcmV0dXJuIHZhbHVlIHRlbGxzIG1lLiBUaW1lIHRvIHN0YXJ0IGRpZ2dpbmcgdGhyb3VnaCB0aGUgY29kZS4gSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IHVuZGVyc3RhbmRpbmcgcmF3IGZpbGUgZGVzY3JpcHRvciBoYW5kbGluZyBjYW4gaWxsdW1pbmF0ZSBhIGxvdCBhYm91dCBhIHN5c3RlbSdzIGNvcmUgZGVzaWduLiBJIGFudGljaXBhdGUgdGhpcyB3aWxsIGJlIGludGVyZXN0aW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTA2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTY6NDk6MjAuNDcyNDI2ODA5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxOTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2ZpbGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjAwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjAwOlxcdFxcdFxcdGZpbGUgPSBfX2ZnZXRfZmlsZXMoZmlsZXMsIGZkLCBtYXNrKTtcXG4xMjAxOlxcdFxcdFxcdGlmICghZmlsZSlcXG4xMjAyOlxcdFxcdFxcdFxcdHJldHVybiBFTVBUWV9GRDtcXG4xMjAzOlxcdFxcdFxcdHJldHVybiBDTE9ORURfRkQoZmlsZSk7XFxuMTIwNDpcXHRcXHR9XFxuMTIwNTpcXHR9XFxuMTIwNjpcXHRzdHJ1Y3QgZmQgZmRnZXQodW5zaWduZWQgaW50IGZkKVxcbjEyMDc6XFx0e1xcbjEyMDg6XFx0XFx0cmV0dXJuIF9fZmdldF9saWdodChmZCwgRk1PREVfUEFUSCk7XFxuMTIwOTpcXHR9XFxuMTIxMDpcXHRFWFBPUlRfU1lNQk9MKGZkZ2V0KTtcXG4xMjExOlxcdFxcbjEyMTI6XFx0c3RydWN0IGZkIGZkZ2V0X3Jhdyh1bnNpZ25lZCBpbnQgZmQpXFxuMTIxMzpcXHR7XFxuMTIxNDpcXHRcXHRyZXR1cm4gX19mZ2V0X2xpZ2h0KGZkLCAwKTtcXG4xMjE1OlxcdH1cXG4xMjE2OlxcdFxcbjEyMTc6XFx0LypcXG4xMjE4OlxcdCAqIFRyeSB0byBhdm9pZCBmX3BvcyBsb2NraW5nLiBXZSBvbmx5IG5lZWQgaXQgaWYgdGhlXFxuMTIxOTpcXHQgKiBmaWxlIGlzIG1hcmtlZCBmb3IgRk1PREVfQVRPTUlDX1BPUywgYW5kIGl0IGNhbiBiZVxcbjEyMjA6XFx0ICogYWNjZXNzZWQgbXVsdGlwbGUgd2F5cy5cXG4xMjIxOlxcdCAqXFxuMTIyMjpcXHQgKiBBbHdheXMgZG8gaXQgZm9yIGRpcmVjdG9yaWVzLCBiZWNhdXNlIHBpZGZkX2dldGZkKClcXG4xMjIzOlxcdCAqIGNhbiBtYWtlIGEgZmlsZSBhY2Nlc3NpYmxlIGV2ZW4gaWYgaXQgb3RoZXJ3aXNlIHdvdWxkXFxuMTIyNDpcXHQgKiBub3QgYmUsIGFuZCBmb3IgZGlyZWN0b3JpZXMgdGhpcyBpcyBhIGNvcnJlY3RuZXNzXFxuMTIyNTpcXHQgKiBpc3N1ZSwgbm90IGEgXFxcIlBPU0lYIHJlcXVpcmVtZW50XFxcIi5cXG4xMjI2OlxcdCAqL1xcbjEyMjc6XFx0c3RhdGljIGlubGluZSBib29sIGZpbGVfbmVlZHNfZl9wb3NfbG9jayhzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4xMjI4OlxcdHtcXG4xMjI5OlxcdFxcdGlmICghKGZpbGUtXFx1MDAzZWZfbW9kZSBcXHUwMDI2IEZNT0RFX0FUT01JQ19QT1MpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxNjo0OToyMC40NzI1OTEyNDlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Mjk0NzM4Nzg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgeGF0dHIgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgdGhlc2UgZXh0ZW5kZWQgYXR0cmlidXRlcyAoYHhhdHRyYCkgZnVuY3Rpb25zIGFyZSBpbXBsZW1lbnRlZCwgYW5kIEkndmUgbm90aWNlZCBzb21ldGhpbmcuIEl0IHNlZW1zIHRoYXQgYGZkZ2V0YCB1c2VzIGBfX2ZnZXRfbGlnaHRgIHdpdGggYEZNT0RFX1BBVEhgLiBUaGF0J3MgaW1wb3J0YW50IGJlY2F1c2UgaXQgbWVhbnMgYW55IGZpbGUgZGVzY3JpcHRvciBvcGVuZWQgd2l0aCBgT19QQVRIYCB3aWxsIGF1dG9tYXRpY2FsbHkgZmFpbCB3aGVuIGBmZGdldGAgaXMgY2FsbGVkLiBIb3dldmVyLCBgZmRnZXRfcmF3YCBpcyBkaWZmZXJlbnQg4oCTIGl0IHRha2VzIGEgYDBgIGFyZ3VtZW50IHdoaWNoIGxldHMgaXQgaGFuZGxlIHRob3NlIGBPX1BBVEhgIGZpbGUgZGVzY3JpcHRvcnMuXG5cbk5vdyBJJ20gc2VlaW5nIHRoaXMgcGF0Y2gsIGFuZCBpdCdzIGNoYW5naW5nIGBzZXR4YXR0cmF0YCwgYGdldHhhdHRyYXRgLCBgbGlzdHhhdHRyYXRgLCBhbmQgYHJlbW92ZXhhdHRyYXRgIHRvIHVzZSBgcmF3ID0gdHJ1ZWAuIFRoYXQncyB0aGUga2V5LiBUaGF0IG1lYW5zIHRoZXNlIGZ1bmN0aW9ucyB3aWxsIG5vdyBiZSBhYmxlIHRvIGhhbmRsZSBgT19QQVRIYCBmaWxlIGRlc2NyaXB0b3JzLCBlZmZlY3RpdmVseSBieXBhc3NpbmcgdGhlIGBGTU9ERV9QQVRIYCBjaGVjayBhbmQgYWxsb3dpbmcgYWNjZXNzIHdoZXJlIGl0IHdhcyBwcmV2aW91c2x5IGJsb2NrZWQuXG5cbldhaXQgYSBzZWNvbmQuLi5JIGJlbGlldmUgYHNldHhhdHRyYXRgIGlzIHRoZSBuZXdlciBvbmUuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGluIGBmcy94YXR0ci5jYCB0byBjb25maXJtIGl0J3MgYSBzeXNjYWxsIGFuZCB2ZXJpZnkgdGhlIGRldGFpbHMgb2YgaXRzIGluY2x1c2lvbi4gSnVzdCBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gZnVsbHkgdXAgdG8gc3BlZWQgd2l0aCB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTg2LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTY6NDk6MjUuNzY3MzMxODM0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNjI3MDg3NDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiU1lTQ0FMTF9ERUZJTkUuKnNldHhhdHRyYXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMveGF0dHIuYz03MDE9c3RhdGljIGludCBwYXRoX3NldHhhdHRyYXQoaW50IGRmZCwgY29uc3QgY2hhciBfX3VzZXIgKnBhdGhuYW1lLFxcbi0tXFxuZnMveGF0dHIuYy03NDAtXFxuZnMveGF0dHIuYzo3NDE6U1lTQ0FMTF9ERUZJTkU2KHNldHhhdHRyYXQsIGludCwgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqLCBwYXRobmFtZSwgdW5zaWduZWQgaW50LCBhdF9mbGFncyxcXG5mcy94YXR0ci5jLTc0Mi1cXHRcXHRjb25zdCBjaGFyIF9fdXNlciAqLCBuYW1lLCBjb25zdCBzdHJ1Y3QgeGF0dHJfYXJncyBfX3VzZXIgKiwgdWFyZ3MsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE2OjQ5OjI4LjAzMDA0NzA0NloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5ODE2NjQ4OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBOZXcgWGF0dHIgU3lzY2FsbHMqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGVzZSBuZXcgc3lzY2FsbHMg4oCTIGBzZXR4YXR0cmF0YCwgYGdldHhhdHRyYXRgLCBgbGlzdHhhdHRyYXRgLCBhbmQgYHJlbW92ZXhhdHRyYXRgLiBUaGV5J3JlIGRlc2lnbmVkIHRvIHdvcmsgd2l0aCBleHRlbmRlZCBhdHRyaWJ1dGVzLCB3aGljaCBpcyB1c2VmdWwuIFRoZSBwYXRjaCBmb2N1c2VzIG9uIGFsbG93aW5nIHRoZXNlIHRvIG9wZXJhdGUgd2l0aCBgT19QQVRIYCBmaWxlIGRlc2NyaXB0b3JzIHdoZW4gYGRmZGAgaXMgYWxzbyBpbiB1c2UuXG5cbk5vdywgYSBiaXQgb2YgYSB3cmlua2xlIGhlcmUuIElmIGBkZmRgICppcyogYW4gYE9fUEFUSGAgZmlsZSBkZXNjcmlwdG9yLCBhbmQgYHBhdGhuYW1lYCBpcyBlbXB0eSAoYEFUX0VNUFRZX1BBVEhgIGZsYWcgaW4gdXNlKSwgZG9lcyBpdCBtZWFuIHRoZSBjYWxscyBkaXJlY3RseSBvcGVyYXRlIG9uIHRoYXQgYE9fUEFUSGAgZGVzY3JpcHRvciBpdHNlbGY/IFRoYXQncyB0aGUgY29yZSBxdWVzdGlvbi4gSSBzaG91bGQgcHJvYmFibHkgZGlnIGludG8gdGhlIGltcGxlbWVudGF0aW9uLCBzcGVjaWZpY2FsbHksIHRoZSBgcGF0aF9zZXR4YXR0cmF0YCBmdW5jdGlvbiBpbiBgZnMveGF0dHIuY2AgdG8gY29uZmlybSB0aGUgYmVoYXZpb3VyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTczLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE2OjQ5OjMyLjAxMTcxNTMxNFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTkwNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMveGF0dHIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MjAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3MjA6XFx0XFx0aWYgKCEoYXRfZmxhZ3MgXFx1MDAyNiBBVF9TWU1MSU5LX05PRk9MTE9XKSlcXG4gNzIxOlxcdFxcdFxcdGxvb2t1cF9mbGFncyA9IExPT0tVUF9GT0xMT1c7XFxuIDcyMjpcXHRcXG4gNzIzOlxcdFxcdGVycm9yID0gc2V0eGF0dHJfY29weShuYW1lLCBcXHUwMDI2Y3R4KTtcXG4gNzI0OlxcdFxcdGlmIChlcnJvcilcXG4gNzI1OlxcdFxcdFxcdHJldHVybiBlcnJvcjtcXG4gNzI2OlxcdFxcbiA3Mjc6XFx0XFx0Q0xBU1MoZmlsZW5hbWVfbWF5YmVfbnVsbCwgZmlsZW5hbWUpKHBhdGhuYW1lLCBhdF9mbGFncyk7XFxuIDcyODpcXHRcXHRpZiAoIWZpbGVuYW1lIFxcdTAwMjZcXHUwMDI2IGRmZCBcXHUwMDNlPSAwKSB7XFxuIDcyOTpcXHRcXHRcXHRDTEFTUyhmZF9tYXliZV9yYXcsIGYpKGRmZCwgcmF3KTtcXG4gNzMwOlxcdFxcdFxcdGlmIChmZF9lbXB0eShmKSlcXG4gNzMxOlxcdFxcdFxcdFxcdGVycm9yID0gLUVCQURGO1xcbiA3MzI6XFx0XFx0XFx0ZWxzZVxcbiA3MzM6XFx0XFx0XFx0XFx0ZXJyb3IgPSBmaWxlX3NldHhhdHRyKGZkX2ZpbGUoZiksIFxcdTAwMjZjdHgpO1xcbiA3MzQ6XFx0XFx0fSBlbHNlIHtcXG4gNzM1OlxcdFxcdFxcdGVycm9yID0gZmlsZW5hbWVfc2V0eGF0dHIoZGZkLCBmaWxlbmFtZSwgbG9va3VwX2ZsYWdzLCBcXHUwMDI2Y3R4KTtcXG4gNzM2OlxcdFxcdH1cXG4gNzM3OlxcdFxcdGt2ZnJlZShjdHgua3ZhbHVlKTtcXG4gNzM4OlxcdFxcdHJldHVybiBlcnJvcjtcXG4gNzM5OlxcdH1cXG4gNzQwOlxcdFxcbiA3NDE6XFx0U1lTQ0FMTF9ERUZJTkU2KHNldHhhdHRyYXQsIGludCwgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqLCBwYXRobmFtZSwgdW5zaWduZWQgaW50LCBhdF9mbGFncyxcXG4gNzQyOlxcdFxcdFxcdGNvbnN0IGNoYXIgX191c2VyICosIG5hbWUsIGNvbnN0IHN0cnVjdCB4YXR0cl9hcmdzIF9fdXNlciAqLCB1YXJncyxcXG4gNzQzOlxcdFxcdFxcdHNpemVfdCwgdXNpemUpXFxuIDc0NDpcXHR7XFxuIDc0NTpcXHRcXHRzdHJ1Y3QgeGF0dHJfYXJncyBhcmdzID0ge307XFxuIDc0NjpcXHRcXHRpbnQgZXJyb3I7XFxuIDc0NzpcXHRcXG4gNzQ4OlxcdFxcdEJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IHhhdHRyX2FyZ3MpIFxcdTAwM2MgWEFUVFJfQVJHU19TSVpFX1ZFUjApO1xcbiA3NDk6XFx0XFx0QlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgeGF0dHJfYXJncykgIT0gWEFUVFJfQVJHU19TSVpFX0xBVEVTVCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE2OjQ5OjMyLjAxMTgzODc3NFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjAzMTQxMjkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQXR0cmlidXRlIFNldHRpbmcgTG9naWMqKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgY29kZSwgYGZpbGVuYW1lX21heWJlX251bGxgIGludGVsbGlnZW50bHkgaGFuZGxlcyB0aGUgbnVsbCBmaWxlbmFtZSBzaXR1YXRpb24uIEl0IHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGlmIHRoZSBgcGF0aG5hbWVgIGlzIGVtcHR5IGFuZCBgQVRfRU1QVFlfUEFUSGAgaXMgZ2l2ZW4sIHdlIGdldCBudWxsIGJhY2sgZnJvbSB0aGUgZnVuY3Rpb24uIElmIGBmaWxlbmFtZWAgaXMgYWJzZW50LCBpdCBtb3ZlcyBvbiBhbmQgdXNlcyBgZGZkYCBkaXJlY3RseS4gVGhlbiwgYENMQVNTKGZkX21heWJlX3JhdywgZikoZGZkLCByYXcpYCBpcyB1c2VkIHRvIHJldHJpZXZlIHRoZSBmaWxlIGRlc2NyaXB0b3Ig4oCTIHRoYXQgcGFydCBpcyBjbGVhci4gQW5kIHRoZSBgcmF3YCBmbGFnIGlzIHRoZXJlIHRvIGFsbG93IGZvciBgT19QQVRIYCBmaWxlIGRlc2NyaXB0b3JzLlxuXG5BbHJpZ2h0LCBzbyBmYXIgc28gZ29vZC4gTm93IGNvbWVzIHRoZSBwYXJ0IEkgbmVlZCB0byBmb2N1cyBvbjogYGZpbGVfc2V0eGF0dHIoZmRfZmlsZShmKSwgXHUwMDI2Y3R4KWAuIFRoZSBxdWVzdGlvbiB0aGF0IHNwcmluZ3MgdG8gbWluZCwgYW5kIGl0J3MgYSBjcml0aWNhbCBvbmUsIGlzIHdoZXRoZXIgYGZpbGVfc2V0eGF0dHJgIGFjdHVhbGx5IHN1cHBvcnRzIGJlaW5nIGNhbGxlZCB3aXRoIGBPX1BBVEhgIGZpbGUgZGVzY3JpcHRvcnMuIEknbSByZWFzb25hYmx5IHN1cmUsIGJ1dCBJIG5lZWQgdG8gY29uZmlybSB0aGlzLiBCZXN0IHRvIGRvdWJsZS1jaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgZmlsZV9zZXR4YXR0cmAganVzdCB0byBiZSBjb21wbGV0ZWx5IGNlcnRhaW4uIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgZXh0ZW5kZWQgYXR0cmlidXRlIHNldHRpbmcgaXMgZ29pbmcgdG8gd29yayB3aXRoIGFuIGBPX1BBVEhgIGRlc2NyaXB0b3IgYmVmb3JlIEkgY2FuIGJlIGNvbmZpZGVudCB0aGF0IHRoaXMgY29kZSBmdW5jdGlvbnMgYXMgaW50ZW5kZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwMTIsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxNjo0OTozNi4yMTQ5ODI2NzZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODg4MDcwNzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50IGZpbGVfc2V0eGF0dHJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvaW50ZXJuYWwuaD0yOTQ9c3NpemVfdCBmaWxlbmFtZV9nZXR4YXR0cihpbnQgZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKmZpbGVuYW1lLFxcbmZzL2ludGVybmFsLmgtMjk1LVxcdFxcdFxcdCAgdW5zaWduZWQgaW50IGxvb2t1cF9mbGFncywgc3RydWN0IGtlcm5lbF94YXR0cl9jdHggKmN0eCk7XFxuZnMvaW50ZXJuYWwuaDoyOTY6aW50IGZpbGVfc2V0eGF0dHIoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBrZXJuZWxfeGF0dHJfY3R4ICpjdHgpO1xcbmZzL2ludGVybmFsLmgtMjk3LWludCBmaWxlbmFtZV9zZXR4YXR0cihpbnQgZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKmZpbGVuYW1lLFxcbi0tXFxuZnMveGF0dHIuYz02NTU9c3RhdGljIGludCBkb19zZXR4YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbi0tXFxuZnMveGF0dHIuYy02NjUtXFxuZnMveGF0dHIuYzo2NjY6aW50IGZpbGVfc2V0eGF0dHIoc3RydWN0IGZpbGUgKmYsIHN0cnVjdCBrZXJuZWxfeGF0dHJfY3R4ICpjdHgpXFxuZnMveGF0dHIuYy02Njcte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxNjo0OTozNy45MDM3OTM4MzNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTQ4Nzg3NDE0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyB0aGUgYGZpbGVfc2V0eGF0dHJgIEZ1bmN0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gVGhlIHRhc2sgaXMgdG8gZXhhbWluZSB0aGUgYGZpbGVfc2V0eGF0dHJgIGZ1bmN0aW9uLCBwcmVzdW1hYmx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiBzb21lIGxhcmdlciBzeXN0ZW0sIGxpa2VseSBhIGZpbGUgc3lzdGVtIG9yIGtlcm5lbCBtb2R1bGUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGF0J3MgdGhlIGJyb2FkZXIgcHVycG9zZT8gSXMgdGhpcyByZWxhdGVkIHRvIGV4dGVuZGVkIGF0dHJpYnV0ZXMgaW4gYSBtb3JlIGdlbmVyYWwgc2Vuc2UsIG9yIGlzIHRoaXMgYSBwYXJ0aWN1bGFyIGltcGxlbWVudGF0aW9uIGZvciBhIHNwZWNpZmljIGZpbGUgc3lzdGVtIGxpa2UgZXh0NCwgWEZTLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gS25vd2luZyB0aGUgdGFyZ2V0IHdvdWxkIGdpdmUgY3J1Y2lhbCBjb250ZXh0LlxuXG5OZXh0LCBJJ2xsIGJlIGxvb2tpbmcgZm9yIGltcGxlbWVudGF0aW9uIGRldGFpbHMuIFNwZWNpZmljYWxseSwgSSdsbCBmb2N1cyBvbiBlcnJvciBoYW5kbGluZy4gRXh0ZW5kZWQgYXR0cmlidXRlcyBjYW4gYmUgdHJpY2t5IHRvIG1hbmFnZTsgSSdsbCB3YW50IHRvIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIHZhcmlvdXMgZXJyb3IgY2FzZXMsIGxpa2UgcGVybWlzc2lvbnMgaXNzdWVzLCBpbnN1ZmZpY2llbnQgc3BhY2UgZm9yIHRoZSBhdHRyaWJ1dGUsIG9yIGludmFsaWQgYXR0cmlidXRlIG5hbWVzIG9yIHZhbHVlcy4gU2VjdXJpdHkgaXMgYSBwYXJhbW91bnQgY29uY2VybiB3aXRoIHhhdHRycywgc28gSSdsbCBtZXRpY3Vsb3VzbHkgc2NydXRpbml6ZSB0aGUgY29kZSBmb3IgYW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMsIGxpa2UgcmFjZSBjb25kaXRpb25zIHRoYXQgY291bGQgbGVhZCB0byBUT0NUT1UgYnVncy5cblxuQWxzbywgZGF0YSBjb25zaXN0ZW5jeSB3aWxsIGJlIHZlcnkgaW1wb3J0YW50LiBJZiB0aGUgZnVuY3Rpb24gZmFpbHMgcGFydHdheSB0aHJvdWdoIHNldHRpbmcgYW4geGF0dHIsIGhvdyBkb2VzIGl0IG1haW50YWluIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIGZpbGVzeXN0ZW0/IEFyZSB0aGVyZSBzdWZmaWNpZW50IGpvdXJuYWxpbmcgb3IgYXRvbWljIG9wZXJhdGlvbnMgdG8gZW5zdXJlIHRoYXQgd2UgZG9uJ3QgZW5kIHVwIHdpdGggcGFydGlhbGx5IHdyaXR0ZW4gYXR0cmlidXRlcyBvciBpbmNvbnNpc3RlbnQgbWV0YWRhdGE/IFBlcmZvcm1hbmNlIHdpbGwgYmUgYW5vdGhlciBhc3BlY3QgSSB3aWxsIGxvb2sgaW50by4gU2luY2UgaXQgaXMgYmVpbmcgY2FsbGVkIHRvIGRvIHRoaXMgb3BlcmF0aW9uLCBpcyB0aGUgc2V0dGluZyBvZiBleHRlbmRlZCBhdHRyaWJ1dGVzIGNhdXNpbmcgYSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrP1xuXG5GaW5hbGx5LCBob3cgZG9lcyBpdCBpbnRlcmFjdCB3aXRoIG90aGVyIGNvbXBvbmVudHM/IERvZXMgaXQgY2FsbCBpbnRvIGFueSBvdGhlciBpbnRlcm5hbCBmdW5jdGlvbnMgb3Igc3lzdGVtIGNhbGxzPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBkZWFkbG9ja3Mgb3IgY29uY3VycmVuY3kgaXNzdWVzIHRoYXQgbmVlZCB0byBiZSBhZGRyZXNzZWQ/IEFueSBkb2N1bWVudGF0aW9uIG9yIGNvbW1lbnRzIGluIHRoZSBjb2RlIGl0c2VsZiwgZGVzY3JpYmluZyB0aGUgZXhwZWN0ZWQgYmVoYXZpb3IgYW5kIHVzYWdlIHNjZW5hcmlvcyB3aWxsIGJlIGhlbHBmdWwgYXMgSSBkaXZlIGRlZXBlciBpbnRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NjY4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTY6NDk6NDcuMzkxNjcwMloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5Nzg1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy94YXR0ci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY2NixcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDY2NjpcXHRpbnQgZmlsZV9zZXR4YXR0cihzdHJ1Y3QgZmlsZSAqZiwgc3RydWN0IGtlcm5lbF94YXR0cl9jdHggKmN0eClcXG4gNjY3OlxcdHtcXG4gNjY4OlxcdFxcdGludCBlcnJvciA9IG1udF93YW50X3dyaXRlX2ZpbGUoZik7XFxuIDY2OTpcXHRcXG4gNjcwOlxcdFxcdGlmICghZXJyb3IpIHtcXG4gNjcxOlxcdFxcdFxcdGF1ZGl0X2ZpbGUoZik7XFxuIDY3MjpcXHRcXHRcXHRlcnJvciA9IGRvX3NldHhhdHRyKGZpbGVfbW50X2lkbWFwKGYpLCBmLVxcdTAwM2VmX3BhdGguZGVudHJ5LCBjdHgpO1xcbiA2NzM6XFx0XFx0XFx0bW50X2Ryb3Bfd3JpdGVfZmlsZShmKTtcXG4gNjc0OlxcdFxcdH1cXG4gNjc1OlxcdFxcdHJldHVybiBlcnJvcjtcXG4gNjc2OlxcdH1cXG4gNjc3OlxcdFxcbiA2Nzg6XFx0aW50IGZpbGVuYW1lX3NldHhhdHRyKGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqZmlsZW5hbWUsXFxuIDY3OTpcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBpbnQgbG9va3VwX2ZsYWdzLCBzdHJ1Y3Qga2VybmVsX3hhdHRyX2N0eCAqY3R4KVxcbiA2ODA6XFx0e1xcbiA2ODE6XFx0XFx0c3RydWN0IHBhdGggcGF0aDtcXG4gNjgyOlxcdFxcdGludCBlcnJvcjtcXG4gNjgzOlxcdFxcbiA2ODQ6XFx0cmV0cnk6XFxuIDY4NTpcXHRcXHRlcnJvciA9IGZpbGVuYW1lX2xvb2t1cChkZmQsIGZpbGVuYW1lLCBsb29rdXBfZmxhZ3MsIFxcdTAwMjZwYXRoLCBOVUxMKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTY6NDk6NDcuMzkxNzY5NThaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY1NjY4MjQ1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgV3JpdGUgUGVybWlzc2lvbnMgd2l0aCBPX1BBVEggRmlsZSBEZXNjcmlwdG9ycyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBtbnRfd2FudF93cml0ZV9maWxlKGYpYC4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiB0aGF0IHBvcHMgaW50byBteSBoZWFkIGlzLCBkb2VzIHRoaXMgZnVuY3Rpb24gYmVoYXZlIGNvcnJlY3RseSB3aGVuIGRlYWxpbmcgd2l0aCBmaWxlIGRlc2NyaXB0b3JzIG9wZW5lZCB3aXRoIGBPX1BBVEhgPyBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBzdXJlIHRoaXMgaXMgaGFuZGxlZCBwcm9wZXJseS4gTm93LCBpZiBgZmAgKmlzKiBhbiBgT19QQVRIYCBkZXNjcmlwdG9yLCB0aGVuIEkga25vdyB0aGF0IGBmaWxlX21udF9pZG1hcChmKWAgYW5kIGBmLVx1MDAzZWZfcGF0aC5kZW50cnlgIGFyZSB2YWxpZCBhbmQgYWNjZXNzaWJsZS4gQnV0LCBzdGlsbCwgSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBgbW50X3dhbnRfd3JpdGVfZmlsZWAgaXRzZWxmIGhhcyBhbnkgaGlkZGVuIGlzc3VlcyBvciBhc3N1bXB0aW9ucyB0aGF0IG1pZ2h0IGNhdXNlIGEgcHJvYmxlbSBzcGVjaWZpY2FsbHkgd2l0aCBgT19QQVRIYCBkZXNjcmlwdG9ycy4gVGhlIHNhZmVzdCBwYXRoIGlzIHRvIGdvIGFoZWFkIGFuZCBkaXZlIGludG8gdGhlIHNvdXJjZSBjb2RlIGZvciBgbW50X3dhbnRfd3JpdGVfZmlsZWAgZGlyZWN0bHkuIFRpbWUgdG8gc2NydXRpbml6ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQwMiwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE2OjQ5OjUxLjA0ODQ1NTMyNloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU2OTUxMzMxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtbnRfd2FudF93cml0ZV9maWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNTU5IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvcnRpbmcucnN0PTg4Mz1iZWVuIGNhbGxlZCBvciByZXR1cm5lZCB3aXRoIG5vbiAtRUlPQ0JRVUVVRUQgY29kZS5cXG4tLVxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3QtODg4LVxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3Q6ODg5Om1udF93YW50X3dyaXRlX2ZpbGUoKSBjYW4gbm93IG9ubHkgYmUgcGFpcmVkIHdpdGggbW50X2Ryb3Bfd3JpdGVfZmlsZSgpLFxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3QtODkwLXdoZXJlYXMgcHJldmlvdXNseSBpdCBjb3VsZCBiZSBwYWlyZWQgd2l0aCBtbnRfZHJvcF93cml0ZSgpIGFzIHdlbGwuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3hmcy94ZnMtb25saW5lLWZzY2stZGVzaWduLnJzdD0zMjA2PXRvIGF2b2lkIGRlYWRsb2NrczpcXG4tLVxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMveGZzL3hmcy1vbmxpbmUtZnNjay1kZXNpZ24ucnN0LTMyMDktXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy94ZnMveGZzLW9ubGluZS1mc2NrLWRlc2lnbi5yc3Q6MzIxMDoyLiBGaWxlc3lzdGVtIGZyZWV6ZSBwcm90ZWN0aW9uLCBpZiByZXBhaXJpbmcgKGBgbW50X3dhbnRfd3JpdGVfZmlsZWBgKS5cXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3hmcy94ZnMtb25saW5lLWZzY2stZGVzaWduLnJzdC0zMjExLVxcbi0tXFxuZnMvYnRyZnMvaW9jdGwuYz05ODU9c3RhdGljIG5vaW5saW5lIGludCBidHJmc19pb2N0bF9yZXNpemUoc3RydWN0IGZpbGUgKmZpbGUsXFxuLS1cXG5mcy9idHJmcy9pb2N0bC5jLTEwMDQtXFxuZnMvYnRyZnMvaW9jdGwuYzoxMDA1OlxcdHJldCA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlsZSk7XFxuZnMvYnRyZnMvaW9jdGwuYy0xMDA2LVxcdGlmIChyZXQpXFxuLS1cXG5mcy9idHJmcy9pb2N0bC5jPTExMzg9c3RhdGljIG5vaW5saW5lIGludCBfX2J0cmZzX2lvY3RsX3NuYXBfY3JlYXRlKHN0cnVjdCBmaWxlICpmaWxlLFxcbi0tXFxuZnMvYnRyZnMvaW9jdGwuYy0xMTQ5LVxcbmZzL2J0cmZzL2lvY3RsLmM6MTE1MDpcXHRyZXQgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbGUpO1xcbmZzL2J0cmZzL2lvY3RsLmMtMTE1MS1cXHRpZiAocmV0KVxcbi0tXFxuZnMvYnRyZnMvaW9jdGwuYz0xMjk0PXN0YXRpYyBub2lubGluZSBpbnQgYnRyZnNfaW9jdGxfc3Vidm9sX3NldGZsYWdzKHN0cnVjdCBmaWxlICpmaWxlLFxcbi0tXFxuZnMvYnRyZnMvaW9jdGwuYy0xMzA3LVxcbmZzL2J0cmZzL2lvY3RsLmM6MTMwODpcXHRyZXQgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbGUpO1xcbmZzL2J0cmZzL2lvY3RsLmMtMTMwOS1cXHRpZiAocmV0KVxcbi0tXFxuZnMvYnRyZnMvaW9jdGwuYz0yMjE3PXN0YXRpYyBub2lubGluZSBpbnQgYnRyZnNfaW9jdGxfc25hcF9kZXN0cm95KHN0cnVjdCBmaWxlICpmaWxlLFxcbi0tXFxuZnMvYnRyZnMvaW9jdGwuYy0yMjU5LVxcbmZzL2J0cmZzL2lvY3RsLmM6MjI2MDpcXHRcXHRcXHRyZXQgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbGUpO1xcbmZzL2J0cmZzL2lvY3RsLmMtMjI2MS1cXHRcXHRcXHRpZiAocmV0KVxcbi0tXFxuZnMvYnRyZnMvaW9jdGwuYy0yMjY4LVxcbmZzL2J0cmZzL2lvY3RsLmM6MjI2OTpcXHRcXHRcXHRyZXQgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbGUpO1xcbmZzL2J0cmZzL2lvY3RsLmMtMjI3MC1cXHRcXHRcXHRpZiAocmV0KVxcbi0tXFxuZnMvYnRyZnMvaW9jdGwuYy0yMzQ0LVxcbmZzL2J0cmZzL2lvY3RsLmM6MjM0NTpcXHRcXHRyZXQgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbGUpO1xcbmZzL2J0cmZzL2lvY3RsLmMtMjM0Ni1cXHRcXHRpZiAocmV0KVxcbi0tXFxuZnMvYnRyZnMvaW9jdGwuYz0yNDMxPXN0YXRpYyBpbnQgYnRyZnNfaW9jdGxfZGVmcmFnKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkIF9fdXNlciAqYXJncClcXG4tLVxcbmZzL2J0cmZzL2lvY3RsLmMtMjQzNy1cXG5mcy9idHJmcy9pb2N0bC5jOjI0Mzg6XFx0cmV0ID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxlKTtcXG5mcy9idHJmcy9pb2N0bC5jLTI0MzktXFx0aWYgKHJldClcXG4tLVxcbmZzL2J0cmZzL2lvY3RsLmM9MjU3MD1zdGF0aWMgbG9uZyBidHJmc19pb2N0bF9ybV9kZXZfdjIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgX191c2VyICphcmcpXFxuLS1cXG5mcy9idHJmcy9pb2N0bC5jLTI2MDUtXFxuZnMvYnRyZnMvaW9jdGwuYzoyNjA2OlxcdHJldCA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlsZSk7XFxuZnMvYnRyZnMvaW9jdGwuYy0yNjA3LVxcdGlmIChyZXQpXFxuLS1cXG5mcy9idHJmcy9pb2N0bC5jPTI2Mzc9c3RhdGljIGxvbmcgYnRyZnNfaW9jdGxfcm1fZGV2KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkIF9fdXNlciAqYXJnKVxcbi0tXFxuZnMvYnRyZnMvaW9jdGwuYy0yNjY1LVxcbmZzL2J0cmZzL2lvY3RsLmM6MjY2NjpcXHRyZXQgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbGUpO1xcbmZzL2J0cmZzL2lvY3RsLmMtMjY2Ny1cXHRpZiAocmV0KVxcbi0tXFxuZnMvYnRyZnMvaW9jdGwuYz0yNzgwPXN0YXRpYyBsb25nIGJ0cmZzX2lvY3RsX2RlZmF1bHRfc3Vidm9sKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkIF9fdXNlciAqYXJncClcXG4tLVxcbmZzL2J0cmZzL2lvY3RsLmMtMjc5Ny1cXG5mcy9idHJmcy9pb2N0bC5jOjI3OTg6XFx0cmV0ID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxlKTtcXG5mcy9idHJmcy9pb2N0bC5jLTI3OTktXFx0aWYgKHJldClcXG4tLVxcbmZzL2J0cmZzL2lvY3RsLmM9MzA1OD1zdGF0aWMgbG9uZyBidHJmc19pb2N0bF9zY3J1YihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCBfX3VzZXIgKmFyZylcXG4tLVxcbmZzL2J0cmZzL2lvY3RsLmMtMzA3OS1cXHRpZiAoIShzYS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBCVFJGU19TQ1JVQl9SRUFET05MWSkpIHtcXG5mcy9idHJmcy9pb2N0bC5jOjMwODA6XFx0XFx0cmV0ID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxlKTtcXG5mcy9idHJmcy9pb2N0bC5jLTMwODEtXFx0XFx0aWYgKHJldClcXG4tLVxcbmZzL2J0cmZzL2lvY3RsLmM9MzQwNj1zdGF0aWMgbG9uZyBidHJmc19pb2N0bF9iYWxhbmNlKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkIF9fdXNlciAqYXJnKVxcbi0tXFxuZnMvYnRyZnMvaW9jdGwuYy0zNDE3LVxcbmZzL2J0cmZzL2lvY3RsLmM6MzQxODpcXHRyZXQgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbGUpO1xcbmZzL2J0cmZzL2lvY3RsLmMtMzQxOS1cXHRpZiAocmV0KVxcbi0tXFxuZnMvYnRyZnMvaW9jdGwuYz0zNTQzPXN0YXRpYyBsb25nIGJ0cmZzX2lvY3RsX3F1b3RhX2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCBfX3VzZXIgKmFyZylcXG4tLVxcbmZzL2J0cmZzL2lvY3RsLmMtMzU1Mi1cXG5mcy9idHJmcy9pb2N0bC5jOjM1NTM6XFx0cmV0ID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxlKTtcXG5mcy9idHJmcy9pb2N0bC5jLTM1NTQtXFx0aWYgKHJldClcXG4tLVxcbmZzL2J0cmZzL2lvY3RsLmM9MzYxMT1zdGF0aWMgbG9uZyBidHJmc19pb2N0bF9xZ3JvdXBfYXNzaWduKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkIF9fdXNlciAqYXJnKVxcbi0tXFxuZnMvYnRyZnMvaW9jdGwuYy0zNjI3LVxcbmZzL2J0cmZzL2lvY3RsLmM6MzYyODpcXHRyZXQgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbGUpO1xcbmZzL2J0cmZzL2lvY3RsLmMtMzYyOS1cXHRpZiAocmV0KVxcbi0tXFxuZnMvYnRyZnMvaW9jdGwuYz0zNjgxPXN0YXRpYyBsb25nIGJ0cmZzX2lvY3RsX3Fncm91cF9jcmVhdGUoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgX191c2VyICphcmcpXFxuLS1cXG5mcy9idHJmcy9pb2N0bC5jLTM2OTUtXFxuZnMvYnRyZnMvaW9jdGwuYzozNjk2OlxcdHJldCA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlsZSk7XFxuZnMvYnRyZnMvaW9jdGwuYy0zNjk3LVxcdGlmIChyZXQpXFxuLS1cXG5mcy9idHJmcy9pb2N0bC5jPTM3NDE9c3RhdGljIGxvbmcgYnRyZnNfaW9jdGxfcWdyb3VwX2xpbWl0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkIF9fdXNlciAqYXJnKVxcbi0tXFxuZnMvYnRyZnMvaW9jdGwuYy0zNzU2LVxcbmZzL2J0cmZzL2lvY3RsLmM6Mzc1NzpcXHRyZXQgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbGUpO1xcbmZzL2J0cmZzL2lvY3RsLmMtMzc1OC1cXHRpZiAocmV0KVxcbi0tXFxuZnMvYnRyZnMvaW9jdGwuYz0zNzkxPXN0YXRpYyBsb25nIGJ0cmZzX2lvY3RsX3F1b3RhX3Jlc2NhbihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCBfX3VzZXIgKmFyZylcXG4tLVxcbmZzL2J0cmZzL2lvY3RsLmMtMzgwMy1cXG5mcy9idHJmcy9pb2N0bC5jOjM4MDQ6XFx0cmV0ID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxlKTtcXG5mcy9idHJmcy9pb2N0bC5jLTM4MDUtXFx0aWYgKHJldClcXG4tLVxcbmZzL2J0cmZzL2lvY3RsLmM9Mzg1Mz1zdGF0aWMgbG9uZyBfYnRyZnNfaW9jdGxfc2V0X3JlY2VpdmVkX3N1YnZvbChzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4tLVxcbmZzL2J0cmZzL2lvY3RsLmMtMzg2OC1cXG5mcy9idHJmcy9pb2N0bC5jOjM4Njk6XFx0cmV0ID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxlKTtcXG5mcy9idHJmcy9pb2N0bC5jLTM4NzAtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5mcy9idHJmcy9pb2N0bC5jPTQwNTI9c3RhdGljIGludCBidHJmc19pb2N0bF9zZXRfZnNsYWJlbChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCBfX3VzZXIgKmFyZylcXG4tLVxcbmZzL2J0cmZzL2lvY3RsLmMtNDA3NC1cXG5mcy9idHJmcy9pb2N0bC5jOjQwNzU6XFx0cmV0ID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxlKTtcXG5mcy9idHJmcy9pb2N0bC5jLTQwNzYtXFx0aWYgKHJldClcXG4tLVxcbmZzL2J0cmZzL2lvY3RsLmM9NDE5Mj1zdGF0aWMgaW50IGJ0cmZzX2lvY3RsX3NldF9mZWF0dXJlcyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCBfX3VzZXIgKmFyZylcXG4tLVxcbmZzL2J0cmZzL2lvY3RsLmMtNDIyOC1cXG5mcy9idHJmcy9pb2N0bC5jOjQyMjk6XFx0cmV0ID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxlKTtcXG5mcy9idHJmcy9pb2N0bC5jLTQyMzAtXFx0aWYgKHJldClcXG4tLVxcbmZzL2NhY2hlZmlsZXMveGF0dHIuYz0zOT1pbnQgY2FjaGVmaWxlc19zZXRfb2JqZWN0X3hhdHRyKHN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCAqb2JqZWN0KVxcbi0tXFxuZnMvY2FjaGVmaWxlcy94YXR0ci5jLTY3LVxcdGlmIChyZXQgPT0gMCkge1xcbmZzL2NhY2hlZmlsZXMveGF0dHIuYzo2ODpcXHRcXHRyZXQgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbGUpO1xcbmZzL2NhY2hlZmlsZXMveGF0dHIuYy02OS1cXHRcXHRpZiAocmV0ID09IDApIHtcXG4tLVxcbmZzL2NyeXB0by9wb2xpY3kuYz01MDU9aW50IGZzY3J5cHRfaW9jdGxfc2V0X3BvbGljeShzdHJ1Y3QgZmlsZSAqZmlscCwgY29uc3Qgdm9pZCBfX3VzZXIgKmFyZylcXG4tLVxcbmZzL2NyeXB0by9wb2xpY3kuYy01MzktXFxuZnMvY3J5cHRvL3BvbGljeS5jOjU0MDpcXHRyZXQgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbHApO1xcbmZzL2NyeXB0by9wb2xpY3kuYy01NDEtXFx0aWYgKHJldClcXG4tLVxcbmZzL2V4ZmF0L2ZpbGUuYz00NDU9c3RhdGljIGludCBleGZhdF9pb2N0bF9zZXRfYXR0cmlidXRlcyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdTMyIF9fdXNlciAqdXNlcl9hdHRyKVxcbi0tXFxuZnMvZXhmYXQvZmlsZS5jLTQ1Ny1cXG5mcy9leGZhdC9maWxlLmM6NDU4OlxcdGVyciA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlsZSk7XFxuZnMvZXhmYXQvZmlsZS5jLTQ1OS1cXHRpZiAoZXJyKVxcbi0tXFxuZnMvZXh0Mi9pb2N0bC5jPTU0PWxvbmcgZXh0Ml9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5mcy9leHQyL2lvY3RsLmMtNzAtXFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG5mcy9leHQyL2lvY3RsLmM6NzE6XFx0XFx0cmV0ID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxwKTtcXG5mcy9leHQyL2lvY3RsLmMtNzItXFx0XFx0aWYgKHJldClcXG4tLVxcbmZzL2V4dDIvaW9jdGwuYy0xMDctXFxuZnMvZXh0Mi9pb2N0bC5jOjEwODpcXHRcXHRyZXQgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbHApO1xcbmZzL2V4dDIvaW9jdGwuYy0xMDktXFx0XFx0aWYgKHJldClcXG4tLVxcbmZzL2V4dDQvY3J5cHRvLmM9ODM9aW50IGV4dDRfaW9jdGxfZ2V0X2VuY3J5cHRpb25fcHdzYWx0KHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkIF9fdXNlciAqYXJnKVxcbi0tXFxuZnMvZXh0NC9jcnlwdG8uYy05My1cXHRpZiAodXVpZF9pc196ZXJvKHNiaS1cXHUwMDNlc19lcy1cXHUwMDNlc19lbmNyeXB0X3B3X3NhbHQpKSB7XFxuZnMvZXh0NC9jcnlwdG8uYzo5NDpcXHRcXHRlcnIgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbHApO1xcbmZzL2V4dDQvY3J5cHRvLmMtOTUtXFx0XFx0aWYgKGVycilcXG4tLVxcbmZzL2V4dDQvaW9jdGwuYz05NTQ9c3RhdGljIGxvbmcgZXh0NF9pb2N0bF9ncm91cF9hZGQoc3RydWN0IGZpbGUgKmZpbGUsXFxuLS1cXG5mcy9leHQ0L2lvY3RsLmMtOTcwLVxcbmZzL2V4dDQvaW9jdGwuYzo5NzE6XFx0ZXJyID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxlKTtcXG5mcy9leHQ0L2lvY3RsLmMtOTcyLVxcdGlmIChlcnIpXFxuLS1cXG5mcy9leHQ0L2lvY3RsLmM9MTExNz1zdGF0aWMgaW50IGV4dDRfaW9jdGxfc2V0bGFiZWwoc3RydWN0IGZpbGUgKmZpbHAsIGNvbnN0IGNoYXIgX191c2VyICp1c2VyX2xhYmVsKVxcbi0tXFxuZnMvZXh0NC9pb2N0bC5jLTExNDMtXFxuZnMvZXh0NC9pb2N0bC5jOjExNDQ6XFx0cmV0ID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxwKTtcXG5mcy9leHQ0L2lvY3RsLmMtMTE0NS1cXHRpZiAocmV0KVxcbi0tXFxuZnMvZXh0NC9pb2N0bC5jPTEyMDU9c3RhdGljIGludCBleHQ0X2lvY3RsX3NldHV1aWQoc3RydWN0IGZpbGUgKmZpbHAsXFxuLS1cXG5mcy9leHQ0L2lvY3RsLmMtMTIzNC1cXG5mcy9leHQ0L2lvY3RsLmM6MTIzNTpcXHRyZXQgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbHApO1xcbmZzL2V4dDQvaW9jdGwuYy0xMjM2LVxcdGlmIChyZXQpXFxuLS1cXG5mcy9leHQ0L2lvY3RsLmM9MTM5MD1zdGF0aWMgaW50IGV4dDRfaW9jdGxfc2V0X3R1bmVfc2Ioc3RydWN0IGZpbGUgKmZpbHAsXFxuLS1cXG5mcy9leHQ0L2lvY3RsLmMtMTUyNC1cXG5mcy9leHQ0L2lvY3RsLmM6MTUyNTpcXHRyZXQgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbHApO1xcbmZzL2V4dDQvaW9jdGwuYy0xNTI2LVxcdGlmIChyZXQpXFxuLS1cXG5mcy9leHQ0L2lvY3RsLmM9MTUzOD1zdGF0aWMgbG9uZyBfX2V4dDRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuZnMvZXh0NC9pb2N0bC5jLTE1NjctXFxuZnMvZXh0NC9pb2N0bC5jOjE1Njg6XFx0XFx0ZXJyID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxwKTtcXG5mcy9leHQ0L2lvY3RsLmMtMTU2OS1cXHRcXHRpZiAoZXJyKVxcbi0tXFxuZnMvZXh0NC9pb2N0bC5jLTE2MTYtXFxuZnMvZXh0NC9pb2N0bC5jOjE2MTc6XFx0XFx0ZXJyID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxwKTtcXG5mcy9leHQ0L2lvY3RsLmMtMTYxOC1cXHRcXHRpZiAoZXJyKVxcbi0tXFxuZnMvZXh0NC9pb2N0bC5jLTE2NjEtXFxuZnMvZXh0NC9pb2N0bC5jOjE2NjI6XFx0XFx0ZXJyID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxwKTtcXG5mcy9leHQ0L2lvY3RsLmMtMTY2My1cXHRcXHRpZiAoZXJyKVxcbi0tXFxuZnMvZXh0NC9pb2N0bC5jLTE2OTEtXFxuZnMvZXh0NC9pb2N0bC5jOjE2OTI6XFx0XFx0ZXJyID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxwKTtcXG5mcy9leHQ0L2lvY3RsLmMtMTY5My1cXHRcXHRpZiAoZXJyKVxcbi0tXFxuZnMvZXh0NC9pb2N0bC5jLTE3MTMtXFxuZnMvZXh0NC9pb2N0bC5jOjE3MTQ6XFx0XFx0ZXJyID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxwKTtcXG5mcy9leHQ0L2lvY3RsLmMtMTcxNS1cXHRcXHRpZiAoZXJyKVxcbi0tXFxuZnMvZXh0NC9pb2N0bC5jLTE3MjYtXFx0XFx0XFx0cmV0dXJuIC1FQkFERjtcXG5mcy9leHQ0L2lvY3RsLmM6MTcyNzpcXHRcXHRlcnIgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbHApO1xcbmZzL2V4dDQvaW9jdGwuYy0xNzI4LVxcdFxcdGlmIChlcnIpXFxuLS1cXG5mcy9leHQ0L2lvY3RsLmMtMTc0OC1cXG5mcy9leHQ0L2lvY3RsLmM6MTc0OTpcXHRcXHRlcnIgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbHApO1xcbmZzL2V4dDQvaW9jdGwuYy0xNzUwLVxcdFxcdGlmIChlcnIpXFxuLS1cXG5mcy9mMmZzL2ZpbGUuYz0yMjc5PXN0YXRpYyBpbnQgZjJmc19pb2Nfc3RhcnRfYXRvbWljX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxwLCBib29sIHRydW5jYXRlKVxcbi0tXFxuZnMvZjJmcy9maWxlLmMtMjI5OS1cXG5mcy9mMmZzL2ZpbGUuYzoyMzAwOlxcdHJldCA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlscCk7XFxuZnMvZjJmcy9maWxlLmMtMjMwMS1cXHRpZiAocmV0KVxcbi0tXFxuZnMvZjJmcy9maWxlLmM9MjM5MT1zdGF0aWMgaW50IGYyZnNfaW9jX2NvbW1pdF9hdG9taWNfd3JpdGUoc3RydWN0IGZpbGUgKmZpbHApXFxuLS1cXG5mcy9mMmZzL2ZpbGUuYy0yNDAyLVxcbmZzL2YyZnMvZmlsZS5jOjI0MDM6XFx0cmV0ID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxwKTtcXG5mcy9mMmZzL2ZpbGUuYy0yNDA0LVxcdGlmIChyZXQpXFxuLS1cXG5mcy9mMmZzL2ZpbGUuYz0yNDI2PXN0YXRpYyBpbnQgZjJmc19pb2NfYWJvcnRfYXRvbWljX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxwKVxcbi0tXFxuZnMvZjJmcy9maWxlLmMtMjQzNy1cXG5mcy9mMmZzL2ZpbGUuYzoyNDM4OlxcdHJldCA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlscCk7XFxuZnMvZjJmcy9maWxlLmMtMjQzOS1cXHRpZiAocmV0KVxcbi0tXFxuZnMvZjJmcy9maWxlLmM9MjUyNT1zdGF0aWMgaW50IGYyZnNfaW9jX3NodXRkb3duKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmZzL2YyZnMvZmlsZS5jLTI1MzktXFx0aWYgKGluICE9IEYyRlNfR09JTkdfRE9XTl9GVUxMU1lOQykge1xcbmZzL2YyZnMvZmlsZS5jOjI1NDA6XFx0XFx0cmV0ID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxwKTtcXG5mcy9mMmZzL2ZpbGUuYy0yNTQxLVxcdFxcdGlmIChyZXQpIHtcXG4tLVxcbmZzL2YyZnMvZmlsZS5jPTI2MTY9c3RhdGljIGludCBmMmZzX2lvY19maXRyaW0oc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuZnMvZjJmcy9maWxlLmMtMjYzMi1cXG5mcy9mMmZzL2ZpbGUuYzoyNjMzOlxcdHJldCA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlscCk7XFxuZnMvZjJmcy9maWxlLmMtMjYzNC1cXHRpZiAocmV0KVxcbi0tXFxuZnMvZjJmcy9maWxlLmM9MjY4MT1zdGF0aWMgaW50IGYyZnNfaW9jX2dldF9lbmNyeXB0aW9uX3B3c2FsdChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5mcy9mMmZzL2ZpbGUuYy0yNjkwLVxcbmZzL2YyZnMvZmlsZS5jOjI2OTE6XFx0ZXJyID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxwKTtcXG5mcy9mMmZzL2ZpbGUuYy0yNjkyLVxcdGlmIChlcnIpXFxuLS1cXG5mcy9mMmZzL2ZpbGUuYz0yNzcyPXN0YXRpYyBpbnQgZjJmc19pb2NfZ2Moc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuZnMvZjJmcy9maWxlLmMtMjc5MS1cXG5mcy9mMmZzL2ZpbGUuYzoyNzkyOlxcdHJldCA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlscCk7XFxuZnMvZjJmcy9maWxlLmMtMjc5My1cXHRpZiAocmV0KVxcbi0tXFxuZnMvZjJmcy9maWxlLmM9MjgxNT1zdGF0aWMgaW50IF9fZjJmc19pb2NfZ2NfcmFuZ2Uoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCBmMmZzX2djX3JhbmdlICpyYW5nZSlcXG4tLVxcbmZzL2YyZnMvZmlsZS5jLTI4MzYtXFxuZnMvZjJmcy9maWxlLmM6MjgzNzpcXHRyZXQgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbHApO1xcbmZzL2YyZnMvZmlsZS5jLTI4MzgtXFx0aWYgKHJldClcXG4tLVxcbmZzL2YyZnMvZmlsZS5jPTI4Nzc9c3RhdGljIGludCBmMmZzX2lvY193cml0ZV9jaGVja3BvaW50KHN0cnVjdCBmaWxlICpmaWxwKVxcbi0tXFxuZnMvZjJmcy9maWxlLmMtMjg5My1cXG5mcy9mMmZzL2ZpbGUuYzoyODk0OlxcdHJldCA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlscCk7XFxuZnMvZjJmcy9maWxlLmMtMjg5NS1cXHRpZiAocmV0KVxcbi0tXFxuZnMvZjJmcy9maWxlLmM9MzA3MD1zdGF0aWMgaW50IGYyZnNfaW9jX2RlZnJhZ21lbnQoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuZnMvZjJmcy9maWxlLmMtMzA5Ny1cXG5mcy9mMmZzL2ZpbGUuYzozMDk4OlxcdGVyciA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlscCk7XFxuZnMvZjJmcy9maWxlLmMtMzA5OS1cXHRpZiAoZXJyKVxcbi0tXFxuZnMvZjJmcy9maWxlLmM9MzI1NT1zdGF0aWMgaW50IF9fZjJmc19pb2NfbW92ZV9yYW5nZShzdHJ1Y3QgZmlsZSAqZmlscCxcXG4tLVxcbmZzL2YyZnMvZmlsZS5jLTMyNzAtXFxuZnMvZjJmcy9maWxlLmM6MzI3MTpcXHRlcnIgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbHApO1xcbmZzL2YyZnMvZmlsZS5jLTMyNzItXFx0aWYgKGVycilcXG4tLVxcbmZzL2YyZnMvZmlsZS5jPTMyOTI9c3RhdGljIGludCBmMmZzX2lvY19mbHVzaF9kZXZpY2Uoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuZnMvZjJmcy9maWxlLmMtMzMyNi1cXG5mcy9mMmZzL2ZpbGUuYzozMzI3OlxcdHJldCA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlscCk7XFxuZnMvZjJmcy9maWxlLmMtMzMyOC1cXHRpZiAocmV0KVxcbi0tXFxuZnMvZjJmcy9maWxlLmM9MzUyOT1zdGF0aWMgaW50IGYyZnNfaW9jX3NldF9waW5fZmlsZShzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5mcy9mMmZzL2ZpbGUuYy0zNTQ3LVxcbmZzL2YyZnMvZmlsZS5jOjM1NDg6XFx0cmV0ID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxwKTtcXG5mcy9mMmZzL2ZpbGUuYy0zNTQ5LVxcdGlmIChyZXQpXFxuLS1cXG5mcy9mMmZzL2ZpbGUuYz0zNzUxPXN0YXRpYyBpbnQgZjJmc19pb2Nfc2V0ZnNsYWJlbChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5mcy9mMmZzL2ZpbGUuYy0zNzY0LVxcbmZzL2YyZnMvZmlsZS5jOjM3NjU6XFx0ZXJyID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxwKTtcXG5mcy9mMmZzL2ZpbGUuYy0zNzY2LVxcdGlmIChlcnIpXFxuLS1cXG5mcy9mMmZzL2ZpbGUuYz0zODY2PXN0YXRpYyBpbnQgZjJmc19yZWxlYXNlX2NvbXByZXNzX2Jsb2NrcyhzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5mcy9mMmZzL2ZpbGUuYy0zODgyLVxcbmZzL2YyZnMvZmlsZS5jOjM4ODM6XFx0cmV0ID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxwKTtcXG5mcy9mMmZzL2ZpbGUuYy0zODg0LVxcdGlmIChyZXQpXFxuLS1cXG5mcy9mMmZzL2ZpbGUuYz00MDYzPXN0YXRpYyBpbnQgZjJmc19yZXNlcnZlX2NvbXByZXNzX2Jsb2NrcyhzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5mcy9mMmZzL2ZpbGUuYy00MDc3LVxcbmZzL2YyZnMvZmlsZS5jOjQwNzg6XFx0cmV0ID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxwKTtcXG5mcy9mMmZzL2ZpbGUuYy00MDc5LVxcdGlmIChyZXQpXFxuLS1cXG5mcy9mMmZzL2ZpbGUuYz00MTk1PXN0YXRpYyBpbnQgZjJmc19zZWNfdHJpbV9maWxlKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmZzL2YyZnMvZmlsZS5jLTQyMjQtXFxuZnMvZjJmcy9maWxlLmM6NDIyNTpcXHRyZXQgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbHApO1xcbmZzL2YyZnMvZmlsZS5jLTQyMjYtXFx0aWYgKHJldClcXG4tLVxcbmZzL2YyZnMvZmlsZS5jPTQzODU9c3RhdGljIGludCBmMmZzX2lvY19zZXRfY29tcHJlc3Nfb3B0aW9uKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmZzL2YyZnMvZmlsZS5jLTQ0MDctXFxuZnMvZjJmcy9maWxlLmM6NDQwODpcXHRyZXQgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbHApO1xcbmZzL2YyZnMvZmlsZS5jLTQ0MDktXFx0aWYgKHJldClcXG4tLVxcbmZzL2YyZnMvZmlsZS5jPTQ0OTQ9c3RhdGljIGludCBmMmZzX2lvY19kZWNvbXByZXNzX2ZpbGUoc3RydWN0IGZpbGUgKmZpbHApXFxuLS1cXG5mcy9mMmZzL2ZpbGUuYy00NTEwLVxcbmZzL2YyZnMvZmlsZS5jOjQ1MTE6XFx0cmV0ID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxwKTtcXG5mcy9mMmZzL2ZpbGUuYy00NTEyLVxcdGlmIChyZXQpXFxuLS1cXG5mcy9mMmZzL2ZpbGUuYz00NTc1PXN0YXRpYyBpbnQgZjJmc19pb2NfY29tcHJlc3NfZmlsZShzdHJ1Y3QgZmlsZSAqZmlscClcXG4tLVxcbmZzL2YyZnMvZmlsZS5jLTQ1OTEtXFxuZnMvZjJmcy9maWxlLmM6NDU5MjpcXHRyZXQgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbHApO1xcbmZzL2YyZnMvZmlsZS5jLTQ1OTMtXFx0aWYgKHJldClcXG4tLVxcbmZzL2YyZnMvZ2MuYz0yMzE4PWludCBmMmZzX3Jlc2l6ZV9mcyhzdHJ1Y3QgZmlsZSAqZmlscCwgX191NjQgYmxvY2tfY291bnQpXFxuLS1cXG5mcy9mMmZzL2djLmMtMjM2MC1cXG5mcy9mMmZzL2djLmM6MjM2MTpcXHRlcnIgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbHApO1xcbmZzL2YyZnMvZ2MuYy0yMzYyLVxcdGlmIChlcnIpXFxuLS1cXG5mcy9mYXQvZmlsZS5jPTM3PXN0YXRpYyBpbnQgZmF0X2lvY3RsX3NldF9hdHRyaWJ1dGVzKHN0cnVjdCBmaWxlICpmaWxlLCB1MzIgX191c2VyICp1c2VyX2F0dHIpXFxuLS1cXG5mcy9mYXQvZmlsZS5jLTQ5LVxcbmZzL2ZhdC9maWxlLmM6NTA6XFx0ZXJyID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxlKTtcXG5mcy9mYXQvZmlsZS5jLTUxLVxcdGlmIChlcnIpXFxuLS1cXG5mcy9maWxlX2F0dHIuYz0zMjQ9aW50IGlvY3RsX3NldGZsYWdzKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgX191c2VyICphcmdwKVxcbi0tXFxuZnMvZmlsZV9hdHRyLmMtMzMzLVxcdGlmICghZXJyKSB7XFxuZnMvZmlsZV9hdHRyLmM6MzM0OlxcdFxcdGVyciA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlsZSk7XFxuZnMvZmlsZV9hdHRyLmMtMzM1LVxcdFxcdGlmICghZXJyKSB7XFxuLS1cXG5mcy9maWxlX2F0dHIuYz0zNTY9aW50IGlvY3RsX2Zzc2V0eGF0dHIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgX191c2VyICphcmdwKVxcbi0tXFxuZnMvZmlsZV9hdHRyLmMtMzY0LVxcdGlmICghZXJyKSB7XFxuZnMvZmlsZV9hdHRyLmM6MzY1OlxcdFxcdGVyciA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlsZSk7XFxuZnMvZmlsZV9hdHRyLmMtMzY2LVxcdFxcdGlmICghZXJyKSB7XFxuLS1cXG5mcy9uYW1lc3BhY2UuYz01MTE9aW50IG1udF9nZXRfd3JpdGVfYWNjZXNzX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUpXFxuLS1cXG5mcy9uYW1lc3BhY2UuYy01MjUtLyoqXFxuZnMvbmFtZXNwYWNlLmM6NTI2OiAqIG1udF93YW50X3dyaXRlX2ZpbGUgLSBnZXQgd3JpdGUgYWNjZXNzIHRvIGEgZmlsZSdzIG1vdW50XFxuZnMvbmFtZXNwYWNlLmMtNTI3LSAqIEBmaWxlOiB0aGUgZmlsZSB3aG8ncyBtb3VudCBvbiB3aGljaCB0byB0YWtlIGEgd3JpdGVcXG4tLVxcbmZzL25hbWVzcGFjZS5jLTUzMy0gKi9cXG5mcy9uYW1lc3BhY2UuYzo1MzQ6aW50IG1udF93YW50X3dyaXRlX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUpXFxuZnMvbmFtZXNwYWNlLmMtNTM1LXtcXG4tLVxcbmZzL25hbWVzcGFjZS5jLTU0My19XFxuZnMvbmFtZXNwYWNlLmM6NTQ0OkVYUE9SVF9TWU1CT0xfR1BMKG1udF93YW50X3dyaXRlX2ZpbGUpO1xcbmZzL25hbWVzcGFjZS5jLTU0NS1cXG4tLVxcbmZzL25mc2QvbmZzNHJlY292ZXIuYz0xMjM9bmZzZDRfY3JlYXRlX2NsaWRfZGlyKHN0cnVjdCBuZnM0X2NsaWVudCAqY2xwKVxcbi0tXFxuZnMvbmZzZC9uZnM0cmVjb3Zlci5jLTE0MS1cXG5mcy9uZnNkL25mczRyZWNvdmVyLmM6MTQyOlxcdHN0YXR1cyA9IG1udF93YW50X3dyaXRlX2ZpbGUobm4tXFx1MDAzZXJlY19maWxlKTtcXG5mcy9uZnNkL25mczRyZWNvdmVyLmMtMTQzLVxcdGlmIChzdGF0dXMpXFxuLS1cXG5mcy9uZnNkL25mczRyZWNvdmVyLmM9Mjk1PW5mc2Q0X3JlbW92ZV9jbGlkX2RpcihzdHJ1Y3QgbmZzNF9jbGllbnQgKmNscClcXG4tLVxcbmZzL25mc2QvbmZzNHJlY292ZXIuYy0zMDYtXFxuZnMvbmZzZC9uZnM0cmVjb3Zlci5jOjMwNzpcXHRzdGF0dXMgPSBtbnRfd2FudF93cml0ZV9maWxlKG5uLVxcdTAwM2VyZWNfZmlsZSk7XFxuZnMvbmZzZC9uZnM0cmVjb3Zlci5jLTMwOC1cXHRpZiAoc3RhdHVzKVxcbi0tXFxuZnMvbmZzZC9uZnM0cmVjb3Zlci5jPTM3Mj1uZnNkNF9yZWNkaXJfcHVyZ2Vfb2xkKHN0cnVjdCBuZnNkX25ldCAqbm4pXFxuLS1cXG5mcy9uZnNkL25mczRyZWNvdmVyLmMtMzc4LVxcdFxcdHJldHVybjtcXG5mcy9uZnNkL25mczRyZWNvdmVyLmM6Mzc5OlxcdHN0YXR1cyA9IG1udF93YW50X3dyaXRlX2ZpbGUobm4tXFx1MDAzZXJlY19maWxlKTtcXG5mcy9uZnNkL25mczRyZWNvdmVyLmMtMzgwLVxcdGlmIChzdGF0dXMpXFxuLS1cXG5mcy9uaWxmczIvaW9jdGwuYy0xNi0jaW5jbHVkZSBcXHUwMDNjbGludXgvY29tcGF0LmhcXHUwMDNlXFx0LyogY29tcGF0X3B0cigpICovXFxuZnMvbmlsZnMyL2lvY3RsLmM6MTc6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vdW50LmhcXHUwMDNlXFx0LyogbW50X3dhbnRfd3JpdGVfZmlsZSgpLCBtbnRfZHJvcF93cml0ZV9maWxlKCkgKi9cXG5mcy9uaWxmczIvaW9jdGwuYy0xOC0jaW5jbHVkZSBcXHUwMDNjbGludXgvYnVmZmVyX2hlYWQuaFxcdTAwM2VcXG4tLVxcbmZzL25pbGZzMi9pb2N0bC5jPTE5NT1zdGF0aWMgaW50IG5pbGZzX2lvY3RsX2NoYW5nZV9jcG1vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsXFxuLS1cXG5mcy9uaWxmczIvaW9jdGwuYy0yMDUtXFxuZnMvbmlsZnMyL2lvY3RsLmM6MjA2OlxcdHJldCA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlscCk7XFxuZnMvbmlsZnMyL2lvY3RsLmMtMjA3LVxcdGlmIChyZXQpXFxuLS1cXG5mcy9uaWxmczIvaW9jdGwuYz0yNDc9bmlsZnNfaW9jdGxfZGVsZXRlX2NoZWNrcG9pbnQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsXFxuLS1cXG5mcy9uaWxmczIvaW9jdGwuYy0yNTctXFxuZnMvbmlsZnMyL2lvY3RsLmM6MjU4OlxcdHJldCA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlscCk7XFxuZnMvbmlsZnMyL2lvY3RsLmMtMjU5LVxcdGlmIChyZXQpXFxuLS1cXG5mcy9uaWxmczIvaW9jdGwuYz04MzQ9c3RhdGljIGludCBuaWxmc19pb2N0bF9jbGVhbl9zZWdtZW50cyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCxcXG4tLVxcbmZzL25pbGZzMi9pb2N0bC5jLTg1Mi1cXG5mcy9uaWxmczIvaW9jdGwuYzo4NTM6XFx0cmV0ID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxwKTtcXG5mcy9uaWxmczIvaW9jdGwuYy04NTQtXFx0aWYgKHJldClcXG4tLVxcbmZzL25pbGZzMi9pb2N0bC5jPTk5Mj1zdGF0aWMgaW50IG5pbGZzX2lvY3RsX3Jlc2l6ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCxcXG4tLVxcbmZzL25pbGZzMi9pb2N0bC5jLTEwMDAtXFxuZnMvbmlsZnMyL2lvY3RsLmM6MTAwMTpcXHRyZXQgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbHApO1xcbmZzL25pbGZzMi9pb2N0bC5jLTEwMDItXFx0aWYgKHJldClcXG4tLVxcbmZzL25pbGZzMi9pb2N0bC5jPTExNzY9c3RhdGljIGludCBuaWxmc19pb2N0bF9zZXRfc3VpbmZvKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLFxcbi0tXFxuZnMvbmlsZnMyL2lvY3RsLmMtMTE4OC1cXG5mcy9uaWxmczIvaW9jdGwuYzoxMTg5OlxcdHJldCA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlscCk7XFxuZnMvbmlsZnMyL2lvY3RsLmMtMTE5MC1cXHRpZiAocmV0KVxcbi0tXFxuZnMvbmlsZnMyL2lvY3RsLmM9MTI3MD1zdGF0aWMgaW50IG5pbGZzX2lvY3RsX3NldF9mc2xhYmVsKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmaWxlICpmaWxwLFxcbi0tXFxuZnMvbmlsZnMyL2lvY3RsLmMtMTI4MS1cXG5mcy9uaWxmczIvaW9jdGwuYzoxMjgyOlxcdHJldCA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlscCk7XFxuZnMvbmlsZnMyL2lvY3RsLmMtMTI4My1cXHRpZiAocmV0KVxcbi0tXFxuZnMvbnRmcy9maWxlLmM9NzQ5PXN0YXRpYyBpbnQgbnRmc19pb2N0bF9zZXRfdm9sdW1lX2xhYmVsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmZzL250ZnMvZmlsZS5jLTc2MS1cXG5mcy9udGZzL2ZpbGUuYzo3NjI6XFx0cmV0ID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxwKTtcXG5mcy9udGZzL2ZpbGUuYy03NjMtXFx0aWYgKHJldClcXG4tLVxcbmZzL29jZnMyL2ZpbGUuYz0yMDkyPWludCBvY2ZzMl9jaGFuZ2VfZmlsZV9zcGFjZShzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCxcXG4tLVxcbmZzL29jZnMyL2ZpbGUuYy0yMTExLVxcbmZzL29jZnMyL2ZpbGUuYzoyMTEyOlxcdHJldCA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlsZSk7XFxuZnMvb2NmczIvZmlsZS5jLTIxMTMtXFx0aWYgKHJldClcXG4tLVxcbmZzL29jZnMyL2lvY3RsLmM9ODUzPWxvbmcgb2NmczJfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuZnMvb2NmczIvaW9jdGwuYy04ODEtXFxuZnMvb2NmczIvaW9jdGwuYzo4ODI6XFx0XFx0c3RhdHVzID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxwKTtcXG5mcy9vY2ZzMi9pb2N0bC5jLTg4My1cXHRcXHRpZiAoc3RhdHVzKVxcbi0tXFxuZnMvb2NmczIvaW9jdGwuYy04OTktXFxuZnMvb2NmczIvaW9jdGwuYzo5MDA6XFx0XFx0c3RhdHVzID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxwKTtcXG5mcy9vY2ZzMi9pb2N0bC5jLTkwMS1cXHRcXHRpZiAoc3RhdHVzKVxcbi0tXFxuZnMvb2NmczIvbW92ZV9leHRlbnRzLmM9OTkxPWludCBvY2ZzMl9pb2N0bF9tb3ZlX2V4dGVudHMoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgX191c2VyICphcmdwKVxcbi0tXFxuZnMvb2NmczIvbW92ZV9leHRlbnRzLmMtMTAwMS1cXG5mcy9vY2ZzMi9tb3ZlX2V4dGVudHMuYzoxMDAyOlxcdHN0YXR1cyA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlscCk7XFxuZnMvb2NmczIvbW92ZV9leHRlbnRzLmMtMTAwMy1cXHRpZiAoc3RhdHVzKVxcbi0tXFxuZnMvb3Blbi5jPTgzMz1pbnQgdmZzX2ZjaG93bihzdHJ1Y3QgZmlsZSAqZmlsZSwgdWlkX3QgdXNlciwgZ2lkX3QgZ3JvdXApXFxuLS1cXG5mcy9vcGVuLmMtODM2LVxcbmZzL29wZW4uYzo4Mzc6XFx0ZXJyb3IgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbGUpO1xcbmZzL29wZW4uYy04MzgtXFx0aWYgKGVycm9yKVxcbi0tXFxuZnMvcmVtYXBfcmFuZ2UuYz00MzI9bG9mZl90IHZmc19kZWR1cGVfZmlsZV9yYW5nZV9vbmUoc3RydWN0IGZpbGUgKnNyY19maWxlLCBsb2ZmX3Qgc3JjX3BvcyxcXG4tLVxcbmZzL3JlbWFwX3JhbmdlLmMtNDU3LVxcdCAqL1xcbmZzL3JlbWFwX3JhbmdlLmM6NDU4OlxcdHJldCA9IG1udF93YW50X3dyaXRlX2ZpbGUoZHN0X2ZpbGUpO1xcbmZzL3JlbWFwX3JhbmdlLmMtNDU5LVxcdGlmIChyZXQpXFxuLS1cXG5mcy9zbWIvY2xpZW50L2lvY3RsLmM9MTgwPXN0YXRpYyBsb25nIGNpZnNfaW9jdGxfY29weWNodW5rKHVuc2lnbmVkIGludCB4aWQsIHN0cnVjdCBmaWxlICpkc3RfZmlsZSxcXG4tLVxcbmZzL3NtYi9jbGllbnQvaW9jdGwuYy0xOTMtXFx0LyogY2hlY2sgaWYgdGFyZ2V0IHZvbHVtZSBpcyByZWFkb25seSBhbmQgdGFrZSByZWZlcmVuY2UgKi9cXG5mcy9zbWIvY2xpZW50L2lvY3RsLmM6MTk0OlxcdHJjID0gbW50X3dhbnRfd3JpdGVfZmlsZShkc3RfZmlsZSk7XFxuZnMvc21iL2NsaWVudC9pb2N0bC5jLTE5NS1cXHRpZiAocmMpIHtcXG4tLVxcbmZzL3NtYi9zZXJ2ZXIvdmZzLmM9MTk2OD1pbnQga3NtYmRfdmZzX3NldF9jb21wcmVzc2lvbihzdHJ1Y3Qga3NtYmRfd29yayAqd29yaywgc3RydWN0IGtzbWJkX2ZpbGUgKmZwLCB1MTYgZm10KVxcbi0tXFxuZnMvc21iL3NlcnZlci92ZnMuYy0yMDAwLVxcdFxcdGZpbGVhdHRyX2ZpbGxfZmxhZ3MoXFx1MDAyNmZhLCBmbGFncyk7XFxuZnMvc21iL3NlcnZlci92ZnMuYzoyMDAxOlxcdFxcdHJjID0gbW50X3dhbnRfd3JpdGVfZmlsZShmcC1cXHUwMDNlZmlscCk7XFxuZnMvc21iL3NlcnZlci92ZnMuYy0yMDAyLVxcdFxcdGlmIChyYylcXG4tLVxcbmZzL3Zlcml0eS9lbmFibGUuYz0zMjY9aW50IGZzdmVyaXR5X2lvY3RsX2VuYWJsZShzdHJ1Y3QgZmlsZSAqZmlscCwgY29uc3Qgdm9pZCBfX3VzZXIgKnVhcmcpXFxuLS1cXG5mcy92ZXJpdHkvZW5hYmxlLmMtMzc3LVxcbmZzL3Zlcml0eS9lbmFibGUuYzozNzg6XFx0ZXJyID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxwKTtcXG5mcy92ZXJpdHkvZW5hYmxlLmMtMzc5LVxcdGlmIChlcnIpIC8qIC1FUk9GUyAqL1xcbi0tXFxuZnMveGF0dHIuYz02NjY9aW50IGZpbGVfc2V0eGF0dHIoc3RydWN0IGZpbGUgKmYsIHN0cnVjdCBrZXJuZWxfeGF0dHJfY3R4ICpjdHgpXFxuZnMveGF0dHIuYy02Njcte1xcbmZzL3hhdHRyLmM6NjY4OlxcdGludCBlcnJvciA9IG1udF93YW50X3dyaXRlX2ZpbGUoZik7XFxuZnMveGF0dHIuYy02NjktXFxuLS1cXG5mcy94YXR0ci5jPTEwNDQ9c3RhdGljIGludCBmaWxlX3JlbW92ZXhhdHRyKHN0cnVjdCBmaWxlICpmLCBzdHJ1Y3QgeGF0dHJfbmFtZSAqa25hbWUpXFxuZnMveGF0dHIuYy0xMDQ1LXtcXG5mcy94YXR0ci5jOjEwNDY6XFx0aW50IGVycm9yID0gbW50X3dhbnRfd3JpdGVfZmlsZShmKTtcXG5mcy94YXR0ci5jLTEwNDctXFxuLS1cXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTY6NDk6NTIuNjE3OTczNjk2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg1MjExNjY0MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0LlxuXG4qKkFuYWx5emluZyBGaWxlIEF0dHJpYnV0ZSBPcGVyYXRpb25zIGFuZCBNb3VudCBQb2ludCBXcml0ZSBEZXNpcmVzKipcblxuUmlnaHQsIHNvIEknbSBzZWVpbmcgYG1udF93YW50X3dyaXRlX2ZpbGVgIHBvcHBpbmcgdXAgaW4gYGZpbGVfc2V0eGF0dHJgIGFuZCBgZmlsZV9yZW1vdmV4YXR0cmAuIENsZWFybHksIGl0J3MgaW52b2x2ZWQgd2l0aCBleHRlbmRlZCBhdHRyaWJ1dGUgbWFuaXB1bGF0aW9ucywgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGJldHRlci4gTXkgaW5zdGluY3RzIHRlbGwgbWUgaXQncyBzb21laG93IHJlbGF0ZWQgdG8gbW91bnQgcG9pbnQgYmVoYXZpb3JzIGFuZCB3cml0ZSBvcGVyYXRpb25zLiBUaW1lIHRvIGRpZyBpbnRvIGBmcy9uYW1lc3BhY2UuY2AgYW5kIHNlZSBleGFjdGx5IGhvdyBgbW50X3dhbnRfd3JpdGVfZmlsZWAgaXMgYmVpbmcgdXNlZC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBjb250ZXh0IGl0IHByb3ZpZGVzIHRvIHRoZSBzeXN0ZW0gcmVnYXJkaW5nIHdoZXRoZXIgaXQncyBva2F5IHRvIHdyaXRlIHRvIGEgZmlsZSBiYXNlZCBvbiB0aGUgbW91bnQgcG9pbnQuIEknbSBndWVzc2luZyBpdCBoYXMgc29tZSBpbXBhY3Qgb24gYWxsb3dpbmcgb3IgZGlzYWxsb3dpbmcgdGhlIG9wZXJhdGlvbi4gTGV0J3Mgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg4NzIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxNjo1MDowMS4xMzkxNDI0NThaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM0OTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL25hbWVzcGFjZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUyNixcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDUyNjpcXHQgKiBtbnRfd2FudF93cml0ZV9maWxlIC0gZ2V0IHdyaXRlIGFjY2VzcyB0byBhIGZpbGUncyBtb3VudFxcbiA1Mjc6XFx0ICogQGZpbGU6IHRoZSBmaWxlIHdobydzIG1vdW50IG9uIHdoaWNoIHRvIHRha2UgYSB3cml0ZVxcbiA1Mjg6XFx0ICpcXG4gNTI5OlxcdCAqIFRoaXMgaXMgbGlrZSBtbnRfd2FudF93cml0ZSwgYnV0IGlmIHRoZSBmaWxlIGlzIGFscmVhZHkgb3BlbiBmb3Igd3JpdGluZyBpdFxcbiA1MzA6XFx0ICogc2tpcHMgaW5jcmVtZW50aW5nIG1udF93cml0ZXJzIChzaW5jZSB0aGUgb3BlbiBmaWxlIGFscmVhZHkgaGFzIGEgcmVmZXJlbmNlKVxcbiA1MzE6XFx0ICogYW5kIGluc3RlYWQgb25seSBkb2VzIHRoZSBmcmVlemUgcHJvdGVjdGlvbiBhbmQgdGhlIGNoZWNrIGZvciBlbWVyZ2VuY3kgci9vXFxuIDUzMjpcXHQgKiByZW1vdW50cy4gIFRoaXMgbXVzdCBiZSBwYWlyZWQgd2l0aCBtbnRfZHJvcF93cml0ZV9maWxlLlxcbiA1MzM6XFx0ICovXFxuIDUzNDpcXHRpbnQgbW50X3dhbnRfd3JpdGVfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4gNTM1OlxcdHtcXG4gNTM2OlxcdFxcdGludCByZXQ7XFxuIDUzNzpcXHRcXG4gNTM4OlxcdFxcdHNiX3N0YXJ0X3dyaXRlKGZpbGVfaW5vZGUoZmlsZSktXFx1MDAzZWlfc2IpO1xcbiA1Mzk6XFx0XFx0cmV0ID0gbW50X2dldF93cml0ZV9hY2Nlc3NfZmlsZShmaWxlKTtcXG4gNTQwOlxcdFxcdGlmIChyZXQpXFxuIDU0MTpcXHRcXHRcXHRzYl9lbmRfd3JpdGUoZmlsZV9pbm9kZShmaWxlKS1cXHUwMDNlaV9zYik7XFxuIDU0MjpcXHRcXHRyZXR1cm4gcmV0O1xcbiA1NDM6XFx0fVxcbiA1NDQ6XFx0RVhQT1JUX1NZTUJPTF9HUEwobW50X3dhbnRfd3JpdGVfZmlsZSk7XFxuIDU0NTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTY6NTA6MDEuMTM5MzgwMjI4WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MjI5NDM2MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGNvZGUuXG5cbioqRGl2aW5nIGludG8gYG1udF9nZXRfd3JpdGVfYWNjZXNzX2ZpbGVgKipcblxuQWxyaWdodCwgSSBzZWUgd2UncmUgbG9va2luZyBhdCBgbW50X2dldF93cml0ZV9hY2Nlc3NfZmlsZWAuIFRoaXMgZnVuY3Rpb24gbmFtZSBpbW1lZGlhdGVseSBzdWdnZXN0cyB3ZSdyZSBkZWFsaW5nIHdpdGggYSBjcml0aWNhbCBwaWVjZSBvZiB0aGUgbW91bnRpbmcgcHJvY2Vzcywgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gd3JpdGUgcGVybWlzc2lvbnMuIFRoaXMgY291bGQgYmUgYW55d2hlcmUgaW4gdGhlIGZpbGVzeXN0ZW0gYXJjaGl0ZWN0dXJlLCBsaWtlbHkgY2xvc2UgdG8gdGhlIHZmcyBsYXllciBvciB0aGUgbW91bnQgaW1wbGVtZW50YXRpb24gaXRzZWxmLiBJJ20ga2VlbiB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZ1bmN0aW9uIGhhbmRsZXMgYWNxdWlyaW5nIG9yIHZhbGlkYXRpbmcgdGhlIHJpZ2h0IHRvIHdyaXRlIHRvIGEgbW91bnRlZCBmaWxlIHN5c3RlbSwgb3IgYSBzcGVjaWZpYyBmaWxlICp3aXRoaW4qIGEgbW91bnRlZCBmaWxlIHN5c3RlbS4gSSdsbCBuZWVkIHRvIHRyYWNlIGl0cyBjYWxsIHN0YWNrIGFuZCBzZWUgd2hhdCBhcmd1bWVudHMgaXQgdGFrZXMuIERvZXMgaXQgY2hlY2sgcGVybWlzc2lvbnMgYmFzZWQgb24gdXNlciBJRHMsIGZpbGUgYXR0cmlidXRlcywgb3IgbW91bnQgb3B0aW9ucz8gSXQncyBhbGwgYWJvdXQgZW5zdXJpbmcgZGF0YSBpbnRlZ3JpdHkgYW5kIHNlY3VyaXR5LCBzbyBJJ20gZXhwZWN0aW5nIHNvbWUgcm9idXN0IGNoZWNrcyB0byBiZSBpbiBwbGFjZS4gTGV0J3Mgc2VlIHdoYXQgd2UndmUgZ290LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTQ4OSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTY6NTA6MDQuNjYyMzI2MDc3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwOTUwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9uYW1lc3BhY2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MDAsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1MDA6XFx0RVhQT1JUX1NZTUJPTF9HUEwobW50X3dhbnRfd3JpdGUpO1xcbiA1MDE6XFx0XFxuIDUwMjpcXHQvKipcXG4gNTAzOlxcdCAqIG1udF9nZXRfd3JpdGVfYWNjZXNzX2ZpbGUgLSBnZXQgd3JpdGUgYWNjZXNzIHRvIGEgZmlsZSdzIG1vdW50XFxuIDUwNDpcXHQgKiBAZmlsZTogdGhlIGZpbGUgd2hvJ3MgbW91bnQgb24gd2hpY2ggdG8gdGFrZSBhIHdyaXRlXFxuIDUwNTpcXHQgKlxcbiA1MDY6XFx0ICogVGhpcyBpcyBsaWtlIG1udF9nZXRfd3JpdGVfYWNjZXNzLCBidXQgaWYgQGZpbGUgaXMgYWxyZWFkeSBvcGVuIGZvciB3cml0ZSBpdFxcbiA1MDc6XFx0ICogc2tpcHMgaW5jcmVtZW50aW5nIG1udF93cml0ZXJzIChzaW5jZSB0aGUgb3BlbiBmaWxlIGFscmVhZHkgaGFzIGEgcmVmZXJlbmNlKVxcbiA1MDg6XFx0ICogYW5kIGluc3RlYWQgb25seSBkb2VzIHRoZSBjaGVjayBmb3IgZW1lcmdlbmN5IHIvbyByZW1vdW50cy4gIFRoaXMgbXVzdCBiZVxcbiA1MDk6XFx0ICogcGFpcmVkIHdpdGggbW50X3B1dF93cml0ZV9hY2Nlc3NfZmlsZS5cXG4gNTEwOlxcdCAqL1xcbiA1MTE6XFx0aW50IG1udF9nZXRfd3JpdGVfYWNjZXNzX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUpXFxuIDUxMjpcXHR7XFxuIDUxMzpcXHRcXHRpZiAoZmlsZS1cXHUwMDNlZl9tb2RlIFxcdTAwMjYgRk1PREVfV1JJVEVSKSB7XFxuIDUxNDpcXHRcXHRcXHQvKlxcbiA1MTU6XFx0XFx0XFx0ICogU3VwZXJibG9jayBtYXkgaGF2ZSBiZWNvbWUgcmVhZG9ubHkgd2hpbGUgdGhlcmUgYXJlIHN0aWxsXFxuIDUxNjpcXHRcXHRcXHQgKiB3cml0YWJsZSBmZCdzLCBlLmcuIGR1ZSB0byBhIGZzIGVycm9yIHdpdGggZXJyb3JzPXJlbW91bnQtcm9cXG4gNTE3OlxcdFxcdFxcdCAqL1xcbiA1MTg6XFx0XFx0XFx0aWYgKF9fbW50X2lzX3JlYWRvbmx5KGZpbGUtXFx1MDAzZWZfcGF0aC5tbnQpKVxcbiA1MTk6XFx0XFx0XFx0XFx0cmV0dXJuIC1FUk9GUztcXG4gNTIwOlxcdFxcdFxcdHJldHVybiAwO1xcbiA1MjE6XFx0XFx0fVxcbiA1MjI6XFx0XFx0cmV0dXJuIG1udF9nZXRfd3JpdGVfYWNjZXNzKGZpbGUtXFx1MDAzZWZfcGF0aC5tbnQpO1xcbiA1MjM6XFx0fVxcbiA1MjQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE2OjUwOjA0LjY2MjUzNzAzN1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MTM2MzE3OTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgT19QQVRIIEZpbGUgRGVzY3JpcHRvciBCZWhhdmlvcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgSSdtIHRoaW5raW5nIGFib3V0IGhvdyBgT19QQVRIYCBmaWxlIGRlc2NyaXB0b3JzIGJlaGF2ZS4gSWYgdGhlIGZpbGUgaXNuJ3Qgb3BlbmVkIGZvciB3cml0aW5nLCB0aGF0IGBGTU9ERV9XUklURVJgIGJpdCB3aWxsIGJlIGZhbHNlLiAgVGhhdCB0cmlnZ2VycyBhIGNhbGwgdG8gYG1udF9nZXRfd3JpdGVfYWNjZXNzYCwgd2hpY2ggc2VlbXMgY29ycmVjdCBhbmQgd291bGQgaW5jcmVtZW50IGBtbnRfd3JpdGVyc2AgYW5kIGNoZWNrIGZvciByZWFkLW9ubHkgbW91bnRzLiAgU28sIGF0IGEgZnVuZGFtZW50YWwgbGV2ZWwsIGBtbnRfd2FudF93cml0ZV9maWxlYCAqc2hvdWxkKiB3b3JrIGZpbmUgd2l0aCBgT19QQVRIYC5cblxuQnV0IHdhaXTigKYgdGhlIHBhdGNoIGlzIGNoYW5naW5nIHRoZSBgKmF0YCBzeXNjYWxscyDigJMgYHNldHhhdHRyYXRgLCBgZ2V0eGF0dHJhdGAsIGFuZCB0aGUgcmVzdCDigJMgdG8gaGFuZGxlIGBPX1BBVEhgIGZpbGUgZGVzY3JpcHRvcnMuICBJcyB0aGlzIHJlYWxseSBhIGZ1bmN0aW9uYWwgY2hhbmdlPyAgTGV0IG1lIHNlZS4gIFllcywgaXQgbG9va3MgbGlrZSBpdCBpcy4gIFByZXZpb3VzbHksIGlmIHlvdSB0cmllZCB0byB1c2UgYHNldHhhdHRyYXRgIHdpdGggYW4gYE9fUEFUSGAgZGVzY3JpcHRvciBhbmQgYEFUX0VNUFRZX1BBVEhgLCBpdCB3b3VsZCBmbGF0IG91dCBmYWlsIHdpdGggYEVCQURGYC4gVGhlIGBmZGdldGAgY2FsbCB3b3VsZCBjaG9rZS4gTm93LCB3aXRoIGBmZGdldF9yYXdgLCBpdCB3aWxsIHN1Y2NlZWQgYmVjYXVzZSBgZmRnZXRfcmF3YCBhY3R1YWxseSBzdXBwb3J0cyB0aGVzZS5cblxuSG1tbSwgYnV0IHdoYXQgYWJvdXQgYGZzZXR4YXR0cmA/IERvZXMgdGhpcyBwYXRjaCBpbXBhY3QgaXQ/IEFoLCBuby4gYGZzZXR4YXR0cmAgc3RpbGwgY2FsbHMgYGZkZ2V0YCBieSBkZWZhdWx0LCBzbyBpdCdsbCBjb250aW51ZSB0byBmYWlsIG9uIGBPX1BBVEhgIGRlc2NyaXB0b3JzLiBNYWtlcyBzZW5zZTsgYGZzZXR4YXR0cmAgaXNuJ3QgdXNpbmcgdGhlIG5ld2VyIGAqYXRgIGZ1bmN0aW9uYWxpdHkuIE9rYXksIHRoYXQncyBjb25zaXN0ZW50IHdpdGggdGhlIGV4aXN0aW5nIGJlaGF2aW9yICpiZWZvcmUqIHRoaXMgcGF0Y2guIFRoZSAqbmV3KiBgKmF0YCBjYWxscyB3ZXJlIGludHJvZHVjZWQgbW9yZSByZWNlbnRseSwgYW5kIHRoaXMgcGF0Y2ggY29ycmVjdGx5IGFsbG93cyBgT19QQVRIYCBkZXNjcmlwdG9ycyB3aGVuIGBBVF9FTVBUWV9QQVRIYCBpcyB1c2VkLiAgVGhhdCdzIGltcG9ydGFudC4gIEkgc2VlIGl0IGFsbCB0aGUgdGltZSB3aXRoIGAqYXRgIGNhbGxzLCBlLmcuLCBgZmNob3duYXRgLCBgZnN0YXRhdGAsIHRoZXkgb2Z0ZW4gdXNlIHRoaXMgc3R5bGUuXG5cbkxldCBtZSBqdXN0IHZlcmlmeSB0aGlzIHJlYWwgcXVpY2suIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyB0aGUgb25seSBzcG90IGluIHRoZSBjb2RlIHdoZXJlIHRoaXMgaGFzIGJlZW4gZml4ZWQuIEFyZSB0aGVyZSBhbnkgb3RoZXIgcGxhY2VzIHVzaW5nIGBmZGdldF9yYXdgIGZvciB0aGVzZSBgKmF0YCBzeXNjYWxscz8gSSdsbCBjaGVjayBgZmNob3duYXRgIHJlYWwgcXVpY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMTY3LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzk0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTY6NTA6MTEuNzk4ODU3MzM1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzA1OTAxMjc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZjaG93bmF0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYWxwaGEva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsLTM4My00NTJcXHRjb21tb25cXHRta25vZGF0XFx0XFx0XFx0XFx0c3lzX21rbm9kYXRcXG5hcmNoL2FscGhhL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibDozODQ6NDUzXFx0Y29tbW9uXFx0ZmNob3duYXRcXHRcXHRcXHRzeXNfZmNob3duYXRcXG5hcmNoL2FscGhhL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibC0zODUtNDU0XFx0Y29tbW9uXFx0ZnV0aW1lc2F0XFx0XFx0XFx0c3lzX2Z1dGltZXNhdFxcbi0tXFxuYXJjaC9hcm0vdG9vbHMvc3lzY2FsbC50YmwtMzQyLTMyNFxcdGNvbW1vblxcdG1rbm9kYXRcXHRcXHRcXHRzeXNfbWtub2RhdFxcbmFyY2gvYXJtL3Rvb2xzL3N5c2NhbGwudGJsOjM0MzozMjVcXHRjb21tb25cXHRmY2hvd25hdFxcdFxcdHN5c19mY2hvd25hdFxcbmFyY2gvYXJtL3Rvb2xzL3N5c2NhbGwudGJsLTM0NC0zMjZcXHRjb21tb25cXHRmdXRpbWVzYXRcXHRcXHRzeXNfZnV0aW1lc2F0X3RpbWUzMlxcbi0tXFxuYXJjaC9hcm02NC90b29scy9zeXNjYWxsXzMyLnRibC0zMzktMzI0XFx0Y29tbW9uXFx0bWtub2RhdFxcdFxcdFxcdHN5c19ta25vZGF0XFxuYXJjaC9hcm02NC90b29scy9zeXNjYWxsXzMyLnRibDozNDA6MzI1XFx0Y29tbW9uXFx0ZmNob3duYXRcXHRcXHRzeXNfZmNob3duYXRcXG5hcmNoL2FybTY0L3Rvb2xzL3N5c2NhbGxfMzIudGJsLTM0MS0zMjZcXHRjb21tb25cXHRmdXRpbWVzYXRcXHRcXHRzeXNfZnV0aW1lc2F0X3RpbWUzMlxcbi0tXFxuYXJjaC9tNjhrL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibC0zMDAtMjkwXFx0Y29tbW9uXFx0bWtub2RhdFxcdFxcdFxcdFxcdHN5c19ta25vZGF0XFxuYXJjaC9tNjhrL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibDozMDE6MjkxXFx0Y29tbW9uXFx0ZmNob3duYXRcXHRcXHRcXHRzeXNfZmNob3duYXRcXG5hcmNoL202OGsva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsLTMwMi0yOTJcXHRjb21tb25cXHRmdXRpbWVzYXRcXHRcXHRcXHRzeXNfZnV0aW1lc2F0X3RpbWUzMlxcbi0tXFxuYXJjaC9taWNyb2JsYXplL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibC0zMDctMjk3XFx0Y29tbW9uXFx0bWtub2RhdFxcdFxcdFxcdFxcdHN5c19ta25vZGF0XFxuYXJjaC9taWNyb2JsYXplL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibDozMDg6Mjk4XFx0Y29tbW9uXFx0ZmNob3duYXRcXHRcXHRcXHRzeXNfZmNob3duYXRcXG5hcmNoL21pY3JvYmxhemUva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsLTMwOS0yOTlcXHRjb21tb25cXHRmdXRpbWVzYXRcXHRcXHRcXHRzeXNfZnV0aW1lc2F0X3RpbWUzMlxcbi0tXFxuYXJjaC9taXBzL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsX24zMi50YmwtMjY0LTI1M1xcdG4zMlxcdG1rbm9kYXRcXHRcXHRcXHRcXHRzeXNfbWtub2RhdFxcbmFyY2gvbWlwcy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbF9uMzIudGJsOjI2NToyNTRcXHRuMzJcXHRmY2hvd25hdFxcdFxcdFxcdHN5c19mY2hvd25hdFxcbmFyY2gvbWlwcy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbF9uMzIudGJsLTI2Ni0yNTVcXHRuMzJcXHRmdXRpbWVzYXRcXHRcXHRcXHRzeXNfZnV0aW1lc2F0X3RpbWUzMlxcbi0tXFxuYXJjaC9taXBzL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsX242NC50YmwtMjYwLTI0OVxcdG42NFxcdG1rbm9kYXRcXHRcXHRcXHRcXHRzeXNfbWtub2RhdFxcbmFyY2gvbWlwcy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbF9uNjQudGJsOjI2MToyNTBcXHRuNjRcXHRmY2hvd25hdFxcdFxcdFxcdHN5c19mY2hvd25hdFxcbmFyY2gvbWlwcy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbF9uNjQudGJsLTI2Mi0yNTFcXHRuNjRcXHRmdXRpbWVzYXRcXHRcXHRcXHRzeXNfZnV0aW1lc2F0XFxuLS1cXG5hcmNoL21pcHMva2VybmVsL3N5c2NhbGxzL3N5c2NhbGxfbzMyLnRibC0zMDQtMjkwXFx0bzMyXFx0bWtub2RhdFxcdFxcdFxcdFxcdHN5c19ta25vZGF0XFxuYXJjaC9taXBzL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsX28zMi50Ymw6MzA1OjI5MVxcdG8zMlxcdGZjaG93bmF0XFx0XFx0XFx0c3lzX2ZjaG93bmF0XFxuYXJjaC9taXBzL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsX28zMi50YmwtMzA2LTI5MlxcdG8zMlxcdGZ1dGltZXNhdFxcdFxcdFxcdHN5c19mdXRpbWVzYXRfdGltZTMyXFxuLS1cXG5hcmNoL3BhcmlzYy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmwtMzE0LTI3N1xcdGNvbW1vblxcdG1rbm9kYXRcXHRcXHRcXHRzeXNfbWtub2RhdFxcbmFyY2gvcGFyaXNjL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibDozMTU6Mjc4XFx0Y29tbW9uXFx0ZmNob3duYXRcXHRcXHRzeXNfZmNob3duYXRcXG5hcmNoL3BhcmlzYy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmwtMzE2LTI3OVxcdDMyXFx0ZnV0aW1lc2F0XFx0XFx0c3lzX2Z1dGltZXNhdF90aW1lMzJcXG4tLVxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmwtMzc1LTI4OFxcdGNvbW1vblxcdG1rbm9kYXRcXHRcXHRcXHRcXHRzeXNfbWtub2RhdFxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50Ymw6Mzc2OjI4OVxcdGNvbW1vblxcdGZjaG93bmF0XFx0XFx0XFx0c3lzX2ZjaG93bmF0XFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibC0zNzctMjkwXFx0MzJcXHRmdXRpbWVzYXRcXHRcXHRcXHRzeXNfZnV0aW1lc2F0X3RpbWUzMlxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibC0yNDQtMjkwXFx0Y29tbW9uXFx0bWtub2RhdFxcdFxcdFxcdFxcdHN5c19ta25vZGF0XFxuYXJjaC9zMzkwL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibDoyNDU6MjkxXFx0Y29tbW9uXFx0ZmNob3duYXRcXHRcXHRcXHRzeXNfZmNob3duYXRcXG5hcmNoL3MzOTAva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsLTI0Ni0yOTJcXHRjb21tb25cXHRmdXRpbWVzYXRcXHRcXHRcXHRzeXNfZnV0aW1lc2F0XFxuLS1cXG5hcmNoL3NoL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibC0zMDctMjk3XFx0Y29tbW9uXFx0bWtub2RhdFxcdFxcdFxcdFxcdHN5c19ta25vZGF0XFxuYXJjaC9zaC9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50Ymw6MzA4OjI5OFxcdGNvbW1vblxcdGZjaG93bmF0XFx0XFx0XFx0c3lzX2ZjaG93bmF0XFxuYXJjaC9zaC9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmwtMzA5LTI5OVxcdGNvbW1vblxcdGZ1dGltZXNhdFxcdFxcdFxcdHN5c19mdXRpbWVzYXRfdGltZTMyXFxuLS1cXG5hcmNoL3NwYXJjL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibC0zNDktMjg2XFx0Y29tbW9uXFx0bWtub2RhdFxcdFxcdFxcdHN5c19ta25vZGF0XFxuYXJjaC9zcGFyYy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50Ymw6MzUwOjI4N1xcdGNvbW1vblxcdGZjaG93bmF0XFx0XFx0c3lzX2ZjaG93bmF0XFxuYXJjaC9zcGFyYy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmwtMzUxLTI4OFxcdDMyXFx0ZnV0aW1lc2F0XFx0XFx0c3lzX2Z1dGltZXNhdF90aW1lMzJcXG4tLVxcbmFyY2gveDg2L2VudHJ5L3N5c2NhbGxzL3N5c2NhbGxfMzIudGJsLTMxMi0yOTdcXHRpMzg2XFx0bWtub2RhdFxcdFxcdFxcdHN5c19ta25vZGF0XFxuYXJjaC94ODYvZW50cnkvc3lzY2FsbHMvc3lzY2FsbF8zMi50Ymw6MzEzOjI5OFxcdGkzODZcXHRmY2hvd25hdFxcdFxcdHN5c19mY2hvd25hdFxcbmFyY2gveDg2L2VudHJ5L3N5c2NhbGxzL3N5c2NhbGxfMzIudGJsLTMxNC0yOTlcXHRpMzg2XFx0ZnV0aW1lc2F0XFx0XFx0c3lzX2Z1dGltZXNhdF90aW1lMzJcXG4tLVxcbmFyY2gveDg2L2VudHJ5L3N5c2NhbGxzL3N5c2NhbGxfNjQudGJsLTI3MS0yNTlcXHRjb21tb25cXHRta25vZGF0XFx0XFx0XFx0c3lzX21rbm9kYXRcXG5hcmNoL3g4Ni9lbnRyeS9zeXNjYWxscy9zeXNjYWxsXzY0LnRibDoyNzI6MjYwXFx0Y29tbW9uXFx0ZmNob3duYXRcXHRcXHRzeXNfZmNob3duYXRcXG5hcmNoL3g4Ni9lbnRyeS9zeXNjYWxscy9zeXNjYWxsXzY0LnRibC0yNzMtMjYxXFx0Y29tbW9uXFx0ZnV0aW1lc2F0XFx0XFx0c3lzX2Z1dGltZXNhdFxcbi0tXFxuYXJjaC94dGVuc2Eva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsLTMxOS0yOTZcXHRjb21tb25cXHR1dGltZW5zYXRcXHRcXHRcXHRzeXNfdXRpbWVuc2F0X3RpbWUzMlxcbmFyY2gveHRlbnNhL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibDozMjA6Mjk3XFx0Y29tbW9uXFx0ZmNob3duYXRcXHRcXHRcXHRzeXNfZmNob3duYXRcXG5hcmNoL3h0ZW5zYS9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmwtMzIxLTI5OFxcdGNvbW1vblxcdGZ1dGltZXNhdFxcdFxcdFxcdHN5c19mdXRpbWVzYXRfdGltZTMyXFxuLS1cXG5mcy9pbnRlcm5hbC5oPTIwMz1pbnQgY2htb2RfY29tbW9uKGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLCB1bW9kZV90IG1vZGUpO1xcbmZzL2ludGVybmFsLmg6MjA0OmludCBkb19mY2hvd25hdChpbnQgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqZmlsZW5hbWUsIHVpZF90IHVzZXIsIGdpZF90IGdyb3VwLFxcbmZzL2ludGVybmFsLmgtMjA1LVxcdFxcdGludCBmbGFnKTtcXG4tLVxcbmZzL29wZW4uYz03Mzk9aW50IGNob3duX2NvbW1vbihjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwgdWlkX3QgdXNlciwgZ2lkX3QgZ3JvdXApXFxuLS1cXG5mcy9vcGVuLmMtNzg2LVxcbmZzL29wZW4uYzo3ODc6aW50IGRvX2ZjaG93bmF0KGludCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICpmaWxlbmFtZSwgdWlkX3QgdXNlciwgZ2lkX3QgZ3JvdXAsXFxuZnMvb3Blbi5jLTc4OC1cXHRcXHRpbnQgZmxhZylcXG4tLVxcbmZzL29wZW4uYy04MTUtXFxuZnMvb3Blbi5jOjgxNjpTWVNDQUxMX0RFRklORTUoZmNob3duYXQsIGludCwgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqLCBmaWxlbmFtZSwgdWlkX3QsIHVzZXIsXFxuZnMvb3Blbi5jLTgxNy1cXHRcXHRnaWRfdCwgZ3JvdXAsIGludCwgZmxhZylcXG5mcy9vcGVuLmMtODE4LXtcXG5mcy9vcGVuLmM6ODE5OlxcdHJldHVybiBkb19mY2hvd25hdChkZmQsIGZpbGVuYW1lLCB1c2VyLCBncm91cCwgZmxhZyk7XFxuZnMvb3Blbi5jLTgyMC19XFxuLS1cXG5mcy9vcGVuLmM9ODIyPVNZU0NBTExfREVGSU5FMyhjaG93biwgY29uc3QgY2hhciBfX3VzZXIgKiwgZmlsZW5hbWUsIHVpZF90LCB1c2VyLCBnaWRfdCwgZ3JvdXApXFxuZnMvb3Blbi5jLTgyMy17XFxuZnMvb3Blbi5jOjgyNDpcXHRyZXR1cm4gZG9fZmNob3duYXQoQVRfRkRDV0QsIGZpbGVuYW1lLCB1c2VyLCBncm91cCwgMCk7XFxuZnMvb3Blbi5jLTgyNS19XFxuLS1cXG5mcy9vcGVuLmM9ODI3PVNZU0NBTExfREVGSU5FMyhsY2hvd24sIGNvbnN0IGNoYXIgX191c2VyICosIGZpbGVuYW1lLCB1aWRfdCwgdXNlciwgZ2lkX3QsIGdyb3VwKVxcbmZzL29wZW4uYy04Mjgte1xcbmZzL29wZW4uYzo4Mjk6XFx0cmV0dXJuIGRvX2ZjaG93bmF0KEFUX0ZEQ1dELCBmaWxlbmFtZSwgdXNlciwgZ3JvdXAsXFxuZnMvb3Blbi5jLTgzMC1cXHRcXHRcXHQgICBBVF9TWU1MSU5LX05PRk9MTE9XKTtcXG4tLVxcbmluY2x1ZGUvYXNtLWdlbmVyaWMvYXVkaXRfY2hhbmdlX2F0dHIuaD0yND1fX05SX2ZyZW1vdmV4YXR0cixcXG5pbmNsdWRlL2FzbS1nZW5lcmljL2F1ZGl0X2NoYW5nZV9hdHRyLmg6MjU6I2lmZGVmIF9fTlJfZmNob3duYXRcXG5pbmNsdWRlL2FzbS1nZW5lcmljL2F1ZGl0X2NoYW5nZV9hdHRyLmg6MjY6X19OUl9mY2hvd25hdCxcXG5pbmNsdWRlL2FzbS1nZW5lcmljL2F1ZGl0X2NoYW5nZV9hdHRyLmgtMjctX19OUl9mY2htb2RhdCxcXG4tLVxcbmluY2x1ZGUvbGludXgvc3lzY2FsbHMuaD00NjM9YXNtbGlua2FnZSBsb25nIHN5c19mY2htb2RhdDIoaW50IGRmZCwgY29uc3QgY2hhciBfX3VzZXIgKmZpbGVuYW1lLFxcbmluY2x1ZGUvbGludXgvc3lzY2FsbHMuaC00NjQtXFx0XFx0XFx0ICAgICB1bW9kZV90IG1vZGUsIHVuc2lnbmVkIGludCBmbGFncyk7XFxuaW5jbHVkZS9saW51eC9zeXNjYWxscy5oOjQ2NTphc21saW5rYWdlIGxvbmcgc3lzX2ZjaG93bmF0KGludCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICpmaWxlbmFtZSwgdWlkX3QgdXNlcixcXG5pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmgtNDY2LVxcdFxcdFxcdCAgICAgZ2lkX3QgZ3JvdXAsIGludCBmbGFnKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvc3lzY2FsbHMuaD0xMjY4PWludCBjb21wYXRfa3N5c19pcGModTMyIGNhbGwsIGludCBmaXJzdCwgaW50IHNlY29uZCxcXG4tLVxcbmluY2x1ZGUvbGludXgvc3lzY2FsbHMuaC0xMjc0LSAqL1xcbmluY2x1ZGUvbGludXgvc3lzY2FsbHMuaDoxMjc1OmV4dGVybiBpbnQgZG9fZmNob3duYXQoaW50IGRmZCwgY29uc3QgY2hhciBfX3VzZXIgKmZpbGVuYW1lLCB1aWRfdCB1c2VyLFxcbmluY2x1ZGUvbGludXgvc3lzY2FsbHMuaC0xMjc2LVxcdFxcdCAgICAgICBnaWRfdCBncm91cCwgaW50IGZsYWcpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9zeXNjYWxscy5oPTEyNzg9c3RhdGljIGlubGluZSBsb25nIGtzeXNfY2hvd24oY29uc3QgY2hhciBfX3VzZXIgKmZpbGVuYW1lLCB1aWRfdCB1c2VyLFxcbi0tXFxuaW5jbHVkZS9saW51eC9zeXNjYWxscy5oLTEyODAte1xcbmluY2x1ZGUvbGludXgvc3lzY2FsbHMuaDoxMjgxOlxcdHJldHVybiBkb19mY2hvd25hdChBVF9GRENXRCwgZmlsZW5hbWUsIHVzZXIsIGdyb3VwLCAwKTtcXG5pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmgtMTI4Mi19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmg9MTI4ND1zdGF0aWMgaW5saW5lIGxvbmcga3N5c19sY2hvd24oY29uc3QgY2hhciBfX3VzZXIgKmZpbGVuYW1lLCB1aWRfdCB1c2VyLFxcbi0tXFxuaW5jbHVkZS9saW51eC9zeXNjYWxscy5oLTEyODYte1xcbmluY2x1ZGUvbGludXgvc3lzY2FsbHMuaDoxMjg3OlxcdHJldHVybiBkb19mY2hvd25hdChBVF9GRENXRCwgZmlsZW5hbWUsIHVzZXIsIGdyb3VwLFxcbmluY2x1ZGUvbGludXgvc3lzY2FsbHMuaC0xMjg4LVxcdFxcdFxcdCAgICAgQVRfU1lNTElOS19OT0ZPTExPVyk7XFxuLS1cXG5pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvdW5pc3RkLmg9MTUzPV9fU1lTQ0FMTChfX05SX2ZjaG1vZGF0LCBzeXNfZmNobW9kYXQpXFxuaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL3VuaXN0ZC5oOjE1NDojZGVmaW5lIF9fTlJfZmNob3duYXQgNTRcXG5pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvdW5pc3RkLmg6MTU1Ol9fU1lTQ0FMTChfX05SX2ZjaG93bmF0LCBzeXNfZmNob3duYXQpXFxuaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL3VuaXN0ZC5oLTE1Ni0jZGVmaW5lIF9fTlJfZmNob3duIDU1XFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc3lzY2FsbHMuYz0xMDYwPXN0YXRpYyB2b2lkIGNoZWNrX2ZhdWx0YWJsZV9zeXNjYWxsKHN0cnVjdCB0cmFjZV9ldmVudF9jYWxsICpjYWxsLCBpbnQgbnIpXFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc3lzY2FsbHMuYy0xMTYzLVxcdGNhc2UgX19OUl9mY2htb2RhdDI6XFxua2VybmVsL3RyYWNlL3RyYWNlX3N5c2NhbGxzLmM6MTE2NDpcXHRjYXNlIF9fTlJfZmNob3duYXQ6XFxua2VybmVsL3RyYWNlL3RyYWNlX3N5c2NhbGxzLmMtMTE2NS1cXHRjYXNlIF9fTlJfZmdldHhhdHRyOlxcbi0tXFxuc2NyaXB0cy9jaGVja3N5c2NhbGxzLnNoPTE4PWNhdCBcXHUwMDNjXFx1MDAzYyBFT0ZcXG4tLVxcbnNjcmlwdHMvY2hlY2tzeXNjYWxscy5zaC0yNy0jZGVmaW5lIF9fSUdOT1JFX2NobW9kXFx0XFx0LyogZmNobW9kYXQgKi9cXG5zY3JpcHRzL2NoZWNrc3lzY2FsbHMuc2g6Mjg6I2RlZmluZSBfX0lHTk9SRV9jaG93blxcdFxcdC8qIGZjaG93bmF0ICovXFxuc2NyaXB0cy9jaGVja3N5c2NhbGxzLnNoLTI5LSNkZWZpbmUgX19JR05PUkVfbWtkaXJcXHRcXHQvKiBta2RpcmF0ICovXFxuc2NyaXB0cy9jaGVja3N5c2NhbGxzLnNoLTMwLSNkZWZpbmUgX19JR05PUkVfcm1kaXJcXHRcXHQvKiB1bmxpbmthdCAqL1xcbnNjcmlwdHMvY2hlY2tzeXNjYWxscy5zaDozMTojZGVmaW5lIF9fSUdOT1JFX2xjaG93blxcdFxcdC8qIGZjaG93bmF0ICovXFxuc2NyaXB0cy9jaGVja3N5c2NhbGxzLnNoLTMyLSNkZWZpbmUgX19JR05PUkVfYWNjZXNzXFx0XFx0LyogZmFjY2Vzc2F0ICovXFxuLS1cXG5zY3JpcHRzL3N5c2NhbGwudGJsLTcxLTUzXFx0Y29tbW9uXFx0ZmNobW9kYXRcXHRcXHRcXHRzeXNfZmNobW9kYXRcXG5zY3JpcHRzL3N5c2NhbGwudGJsOjcyOjU0XFx0Y29tbW9uXFx0ZmNob3duYXRcXHRcXHRcXHRzeXNfZmNob3duYXRcXG5zY3JpcHRzL3N5c2NhbGwudGJsLTczLTU1XFx0Y29tbW9uXFx0ZmNob3duXFx0XFx0XFx0XFx0c3lzX2ZjaG93blxcbi0tXFxudG9vbHMvaW5jbHVkZS9ub2xpYmMvc3lzLmg9MjAwPWludCBfc3lzX2Nob3duKGNvbnN0IGNoYXIgKnBhdGgsIHVpZF90IG93bmVyLCBnaWRfdCBncm91cClcXG50b29scy9pbmNsdWRlL25vbGliYy9zeXMuaC0yMDEte1xcbnRvb2xzL2luY2x1ZGUvbm9saWJjL3N5cy5oOjIwMjojaWYgZGVmaW5lZChfX05SX2ZjaG93bmF0KVxcbnRvb2xzL2luY2x1ZGUvbm9saWJjL3N5cy5oOjIwMzpcXHRyZXR1cm4gX19ub2xpYmNfc3lzY2FsbDUoX19OUl9mY2hvd25hdCwgQVRfRkRDV0QsIHBhdGgsIG93bmVyLCBncm91cCwgMCk7XFxudG9vbHMvaW5jbHVkZS9ub2xpYmMvc3lzLmgtMjA0LSNlbHNlXFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvdW5pc3RkLmg9MTUzPV9fU1lTQ0FMTChfX05SX2ZjaG1vZGF0LCBzeXNfZmNobW9kYXQpXFxudG9vbHMvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL3VuaXN0ZC5oOjE1NDojZGVmaW5lIF9fTlJfZmNob3duYXQgNTRcXG50b29scy9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvdW5pc3RkLmg6MTU1Ol9fU1lTQ0FMTChfX05SX2ZjaG93bmF0LCBzeXNfZmNob3duYXQpXFxudG9vbHMvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL3VuaXN0ZC5oLTE1Ni0jZGVmaW5lIF9fTlJfZmNob3duIDU1XFxuLS1cXG50b29scy9wZXJmL2FyY2gvYWxwaGEvZW50cnkvc3lzY2FsbHMvc3lzY2FsbC50YmwtMzgzLTQ1MlxcdGNvbW1vblxcdG1rbm9kYXRcXHRcXHRcXHRcXHRzeXNfbWtub2RhdFxcbnRvb2xzL3BlcmYvYXJjaC9hbHBoYS9lbnRyeS9zeXNjYWxscy9zeXNjYWxsLnRibDozODQ6NDUzXFx0Y29tbW9uXFx0ZmNob3duYXRcXHRcXHRcXHRzeXNfZmNob3duYXRcXG50b29scy9wZXJmL2FyY2gvYWxwaGEvZW50cnkvc3lzY2FsbHMvc3lzY2FsbC50YmwtMzg1LTQ1NFxcdGNvbW1vblxcdGZ1dGltZXNhdFxcdFxcdFxcdHN5c19mdXRpbWVzYXRcXG4tLVxcbnRvb2xzL3BlcmYvYXJjaC9hcm0vZW50cnkvc3lzY2FsbHMvc3lzY2FsbC50YmwtMzQyLTMyNFxcdGNvbW1vblxcdG1rbm9kYXRcXHRcXHRcXHRzeXNfbWtub2RhdFxcbnRvb2xzL3BlcmYvYXJjaC9hcm0vZW50cnkvc3lzY2FsbHMvc3lzY2FsbC50Ymw6MzQzOjMyNVxcdGNvbW1vblxcdGZjaG93bmF0XFx0XFx0c3lzX2ZjaG93bmF0XFxudG9vbHMvcGVyZi9hcmNoL2FybS9lbnRyeS9zeXNjYWxscy9zeXNjYWxsLnRibC0zNDQtMzI2XFx0Y29tbW9uXFx0ZnV0aW1lc2F0XFx0XFx0c3lzX2Z1dGltZXNhdF90aW1lMzJcXG4tLVxcbnRvb2xzL3BlcmYvYXJjaC9hcm02NC9lbnRyeS9zeXNjYWxscy9zeXNjYWxsXzMyLnRibC0zMzktMzI0XFx0Y29tbW9uXFx0bWtub2RhdFxcdFxcdFxcdHN5c19ta25vZGF0XFxudG9vbHMvcGVyZi9hcmNoL2FybTY0L2VudHJ5L3N5c2NhbGxzL3N5c2NhbGxfMzIudGJsOjM0MDozMjVcXHRjb21tb25cXHRmY2hvd25hdFxcdFxcdHN5c19mY2hvd25hdFxcbnRvb2xzL3BlcmYvYXJjaC9hcm02NC9lbnRyeS9zeXNjYWxscy9zeXNjYWxsXzMyLnRibC0zNDEtMzI2XFx0Y29tbW9uXFx0ZnV0aW1lc2F0XFx0XFx0c3lzX2Z1dGltZXNhdF90aW1lMzJcXG4tLVxcbnRvb2xzL3BlcmYvYXJjaC9taXBzL2VudHJ5L3N5c2NhbGxzL3N5c2NhbGxfbjY0LnRibC0yNjAtMjQ5XFx0bjY0XFx0bWtub2RhdFxcdFxcdFxcdFxcdHN5c19ta25vZGF0XFxudG9vbHMvcGVyZi9hcmNoL21pcHMvZW50cnkvc3lzY2FsbHMvc3lzY2FsbF9uNjQudGJsOjI2MToyNTBcXHRuNjRcXHRmY2hvd25hdFxcdFxcdFxcdHN5c19mY2hvd25hdFxcbnRvb2xzL3BlcmYvYXJjaC9taXBzL2VudHJ5L3N5c2NhbGxzL3N5c2NhbGxfbjY0LnRibC0yNjItMjUxXFx0bjY0XFx0ZnV0aW1lc2F0XFx0XFx0XFx0c3lzX2Z1dGltZXNhdFxcbi0tXFxudG9vbHMvcGVyZi9hcmNoL3BhcmlzYy9lbnRyeS9zeXNjYWxscy9zeXNjYWxsLnRibC0zMTQtMjc3XFx0Y29tbW9uXFx0bWtub2RhdFxcdFxcdFxcdHN5c19ta25vZGF0XFxudG9vbHMvcGVyZi9hcmNoL3BhcmlzYy9lbnRyeS9zeXNjYWxscy9zeXNjYWxsLnRibDozMTU6Mjc4XFx0Y29tbW9uXFx0ZmNob3duYXRcXHRcXHRzeXNfZmNob3duYXRcXG50b29scy9wZXJmL2FyY2gvcGFyaXNjL2VudHJ5L3N5c2NhbGxzL3N5c2NhbGwudGJsLTMxNi0yNzlcXHQzMlxcdGZ1dGltZXNhdFxcdFxcdHN5c19mdXRpbWVzYXRfdGltZTMyXFxuLS1cXG50b29scy9wZXJmL2FyY2gvcG93ZXJwYy9lbnRyeS9zeXNjYWxscy9zeXNjYWxsLnRibC0zNzUtMjg4XFx0Y29tbW9uXFx0bWtub2RhdFxcdFxcdFxcdFxcdHN5c19ta25vZGF0XFxudG9vbHMvcGVyZi9hcmNoL3Bvd2VycGMvZW50cnkvc3lzY2FsbHMvc3lzY2FsbC50Ymw6Mzc2OjI4OVxcdGNvbW1vblxcdGZjaG93bmF0XFx0XFx0XFx0c3lzX2ZjaG93bmF0XFxudG9vbHMvcGVyZi9hcmNoL3Bvd2VycGMvZW50cnkvc3lzY2FsbHMvc3lzY2FsbC50YmwtMzc3LTI5MFxcdDMyXFx0ZnV0aW1lc2F0XFx0XFx0XFx0c3lzX2Z1dGltZXNhdF90aW1lMzJcXG4tLVxcbnRvb2xzL3BlcmYvYXJjaC9zMzkwL2VudHJ5L3N5c2NhbGxzL3N5c2NhbGwudGJsLTI0NC0yOTBcXHRjb21tb25cXHRta25vZGF0XFx0XFx0XFx0XFx0c3lzX21rbm9kYXRcXG50b29scy9wZXJmL2FyY2gvczM5MC9lbnRyeS9zeXNjYWxscy9zeXNjYWxsLnRibDoyNDU6MjkxXFx0Y29tbW9uXFx0ZmNob3duYXRcXHRcXHRcXHRzeXNfZmNob3duYXRcXG50b29scy9wZXJmL2FyY2gvczM5MC9lbnRyeS9zeXNjYWxscy9zeXNjYWxsLnRibC0yNDYtMjkyXFx0Y29tbW9uXFx0ZnV0aW1lc2F0XFx0XFx0XFx0c3lzX2Z1dGltZXNhdFxcbi0tXFxudG9vbHMvcGVyZi9hcmNoL3NoL2VudHJ5L3N5c2NhbGxzL3N5c2NhbGwudGJsLTMwNy0yOTdcXHRjb21tb25cXHRta25vZGF0XFx0XFx0XFx0XFx0c3lzX21rbm9kYXRcXG50b29scy9wZXJmL2FyY2gvc2gvZW50cnkvc3lzY2FsbHMvc3lzY2FsbC50Ymw6MzA4OjI5OFxcdGNvbW1vblxcdGZjaG93bmF0XFx0XFx0XFx0c3lzX2ZjaG93bmF0XFxudG9vbHMvcGVyZi9hcmNoL3NoL2VudHJ5L3N5c2NhbGxzL3N5c2NhbGwudGJsLTMwOS0yOTlcXHRjb21tb25cXHRmdXRpbWVzYXRcXHRcXHRcXHRzeXNfZnV0aW1lc2F0X3RpbWUzMlxcbi0tXFxudG9vbHMvcGVyZi9hcmNoL3NwYXJjL2VudHJ5L3N5c2NhbGxzL3N5c2NhbGwudGJsLTM0OS0yODZcXHRjb21tb25cXHRta25vZGF0XFx0XFx0XFx0c3lzX21rbm9kYXRcXG50b29scy9wZXJmL2FyY2gvc3BhcmMvZW50cnkvc3lzY2FsbHMvc3lzY2FsbC50Ymw6MzUwOjI4N1xcdGNvbW1vblxcdGZjaG93bmF0XFx0XFx0c3lzX2ZjaG93bmF0XFxudG9vbHMvcGVyZi9hcmNoL3NwYXJjL2VudHJ5L3N5c2NhbGxzL3N5c2NhbGwudGJsLTM1MS0yODhcXHQzMlxcdGZ1dGltZXNhdFxcdFxcdHN5c19mdXRpbWVzYXRfdGltZTMyXFxuLS1cXG50b29scy9wZXJmL2FyY2gveDg2L2VudHJ5L3N5c2NhbGxzL3N5c2NhbGxfMzIudGJsLTMxMi0yOTdcXHRpMzg2XFx0bWtub2RhdFxcdFxcdFxcdHN5c19ta25vZGF0XFxudG9vbHMvcGVyZi9hcmNoL3g4Ni9lbnRyeS9zeXNjYWxscy9zeXNjYWxsXzMyLnRibDozMTM6Mjk4XFx0aTM4NlxcdGZjaG93bmF0XFx0XFx0c3lzX2ZjaG93bmF0XFxudG9vbHMvcGVyZi9hcmNoL3g4Ni9lbnRyeS9zeXNjYWxscy9zeXNjYWxsXzMyLnRibC0zMTQtMjk5XFx0aTM4NlxcdGZ1dGltZXNhdFxcdFxcdHN5c19mdXRpbWVzYXRfdGltZTMyXFxuLS1cXG50b29scy9wZXJmL2FyY2gveDg2L2VudHJ5L3N5c2NhbGxzL3N5c2NhbGxfNjQudGJsLTI3MS0yNTlcXHRjb21tb25cXHRta25vZGF0XFx0XFx0XFx0c3lzX21rbm9kYXRcXG50b29scy9wZXJmL2FyY2gveDg2L2VudHJ5L3N5c2NhbGxzL3N5c2NhbGxfNjQudGJsOjI3MjoyNjBcXHRjb21tb25cXHRmY2hvd25hdFxcdFxcdHN5c19mY2hvd25hdFxcbnRvb2xzL3BlcmYvYXJjaC94ODYvZW50cnkvc3lzY2FsbHMvc3lzY2FsbF82NC50YmwtMjczLTI2MVxcdGNvbW1vblxcdGZ1dGltZXNhdFxcdFxcdHN5c19mdXRpbWVzYXRcXG4tLVxcbnRvb2xzL3BlcmYvYXJjaC94dGVuc2EvZW50cnkvc3lzY2FsbHMvc3lzY2FsbC50YmwtMzE5LTI5NlxcdGNvbW1vblxcdHV0aW1lbnNhdFxcdFxcdFxcdHN5c191dGltZW5zYXRfdGltZTMyXFxudG9vbHMvcGVyZi9hcmNoL3h0ZW5zYS9lbnRyeS9zeXNjYWxscy9zeXNjYWxsLnRibDozMjA6Mjk3XFx0Y29tbW9uXFx0ZmNob3duYXRcXHRcXHRcXHRzeXNfZmNob3duYXRcXG50b29scy9wZXJmL2FyY2gveHRlbnNhL2VudHJ5L3N5c2NhbGxzL3N5c2NhbGwudGJsLTMyMS0yOThcXHRjb21tb25cXHRmdXRpbWVzYXRcXHRcXHRcXHRzeXNfZnV0aW1lc2F0X3RpbWUzMlxcbi0tXFxudG9vbHMvcGVyZi9idWlsdGluLXRyYWNlLmM9MTEzND1zdGF0aWMgY29uc3Qgc3RydWN0IHN5c2NhbGxfZm10IHN5c2NhbGxfZm10c1tdID0ge1xcbi0tXFxudG9vbHMvcGVyZi9idWlsdGluLXRyYWNlLmMtMTE3OS1cXHQgIC5hcmcgPSB7IFswXSA9IHsgLnNjbnByaW50ZiA9IFNDQV9GREFULCAvKiBmZCAqLyB9LCB9LCB9LFxcbnRvb2xzL3BlcmYvYnVpbHRpbi10cmFjZS5jOjExODA6XFx0eyAubmFtZVxcdCAgICA9IFxcXCJmY2hvd25hdFxcXCIsXFxudG9vbHMvcGVyZi9idWlsdGluLXRyYWNlLmMtMTE4MS1cXHQgIC5hcmcgPSB7IFswXSA9IHsgLnNjbnByaW50ZiA9IFNDQV9GREFULCAvKiBmZCAqLyB9LCB9LCB9LFxcbi0tXFxudG9vbHMvcGVyZi90cmFjZS9zdHJhY2UvZ3JvdXBzL3N0cmluZz0xMz1mY2htb2RhdFxcbnRvb2xzL3BlcmYvdHJhY2Uvc3RyYWNlL2dyb3Vwcy9zdHJpbmc6MTQ6ZmNob3duYXRcXG50b29scy9wZXJmL3RyYWNlL3N0cmFjZS9ncm91cHMvc3RyaW5nLTE1LWZnZXR4YXR0clxcbi0tXFxudG9vbHMvc2NyaXB0cy9zeXNjYWxsLnRibC03MS01M1xcdGNvbW1vblxcdGZjaG1vZGF0XFx0XFx0XFx0c3lzX2ZjaG1vZGF0XFxudG9vbHMvc2NyaXB0cy9zeXNjYWxsLnRibDo3Mjo1NFxcdGNvbW1vblxcdGZjaG93bmF0XFx0XFx0XFx0c3lzX2ZjaG93bmF0XFxudG9vbHMvc2NyaXB0cy9zeXNjYWxsLnRibC03My01NVxcdGNvbW1vblxcdGZjaG93blxcdFxcdFxcdFxcdHN5c19mY2hvd25cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL292ZXJsYXlmcy9pZG1hcHBlZF9tb3VudHMuYz0zNDY9VEVTVF9GKGlkbWFwcGVkX292ZXJsYXksIGNob3duKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvb3ZlcmxheWZzL2lkbWFwcGVkX21vdW50cy5jLTM2Mi1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9vdmVybGF5ZnMvaWRtYXBwZWRfbW91bnRzLmM6MzYzOlxcdEFTU0VSVF9FUShmY2hvd25hdChvdmwsIFxcXCJmXFxcIiwgSURfTlMgKyA1LCBJRF9OUyArIDUsIDApLCAwKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9vdmVybGF5ZnMvaWRtYXBwZWRfbW91bnRzLmMtMzY0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxNjo1MDoxMy41MDQ3NjYxOTFaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg0ODUxMzE1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgZG9fZmNob3duYXRgKipcblxuT2theSwgbGV0J3MgZHJpbGwgZG93biBpbnRvIGBkb19mY2hvd25hdGAgaW4gYGZzL29wZW4uY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmbG93IGFuZCBwb3RlbnRpYWwgZ290Y2hhcy4gSSdtIGltbWVkaWF0ZWx5IGludGVyZXN0ZWQgaW4gdGhlIGFjY2VzcyBjb250cm9sIGltcGxpY2F0aW9ucyBvZiB0aGlzIHN5c3RlbSBjYWxsLiBXaGF0IGNoZWNrcyBhcmUgcGVyZm9ybWVkIGZvciBlZmZlY3RpdmUgdXNlci9ncm91cCBJRCBjb21iaW5hdGlvbnM/IFdoYXQgZWRnZSBjYXNlcyBleGlzdCByZWdhcmRpbmcgc3ltbGlua3MgYW5kIGNyb3NzLWZpbGVzeXN0ZW0gb3BlcmF0aW9ucz8gSSdsbCBwcm9iYWJseSBiZSBsb29raW5nIGZvciB0aGUgaW50ZXJwbGF5IHdpdGggY2FwYWJpbGl0aWVzIGFuZCBzZWN1cml0eSBtb2R1bGVzIChTRUxpbnV4LCBBcHBBcm1vciwgZXRjLikuIEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBJIHNob3VsZCBiZSBtaW5kZnVsIG9mLCBwYXJ0aWN1bGFybHkgd2hlbiBkZWFsaW5nIHdpdGggY29uY3VycmVudCBmaWxlIGFjY2VzcyBhbmQgcGVybWlzc2lvbnMgY2hhbmdlcz8gSSBleHBlY3QgdG8gc2VlIGNoZWNrcyByZWxhdGVkIHRvIHRoZSBgQVRfRU1QVFlfUEFUSGAgYW5kIGBBVF9TWU1MSU5LX05PRk9MTE9XYCBmbGFnczsgSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGV5J3JlIGhhbmRsZWQgY29ycmVjdGx5IHRvIHByZXZlbnQgcHJpdmlsZWdlIGVzY2FsYXRpb24uIFRpbWUgdG8gZ3JhYiBteSBncmVwIGFuZCBzdGFydCBkaXNzZWN0aW5nIHRoaXMgdGhpbmcuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY3NjUsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxNjo1MDoxNy4zNTMyODE0NDJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTA1ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvb3Blbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc4NyxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDc4NzpcXHRpbnQgZG9fZmNob3duYXQoaW50IGRmZCwgY29uc3QgY2hhciBfX3VzZXIgKmZpbGVuYW1lLCB1aWRfdCB1c2VyLCBnaWRfdCBncm91cCxcXG4gNzg4OlxcdFxcdFxcdGludCBmbGFnKVxcbiA3ODk6XFx0e1xcbiA3OTA6XFx0XFx0c3RydWN0IHBhdGggcGF0aDtcXG4gNzkxOlxcdFxcdGludCBlcnJvcjtcXG4gNzkyOlxcdFxcdGludCBsb29rdXBfZmxhZ3M7XFxuIDc5MzpcXHRcXG4gNzk0OlxcdFxcdGlmICgoZmxhZyBcXHUwMDI2IH4oQVRfU1lNTElOS19OT0ZPTExPVyB8IEFUX0VNUFRZX1BBVEgpKSAhPSAwKVxcbiA3OTU6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDc5NjpcXHRcXG4gNzk3OlxcdFxcdGxvb2t1cF9mbGFncyA9IChmbGFnIFxcdTAwMjYgQVRfU1lNTElOS19OT0ZPTExPVykgPyAwIDogTE9PS1VQX0ZPTExPVztcXG4gNzk4OlxcdFxcdENMQVNTKGZpbGVuYW1lX3VmbGFncywgbmFtZSkoZmlsZW5hbWUsIGZsYWcpO1xcbiA3OTk6XFx0cmV0cnk6XFxuIDgwMDpcXHRcXHRlcnJvciA9IGZpbGVuYW1lX2xvb2t1cChkZmQsIG5hbWUsIGxvb2t1cF9mbGFncywgXFx1MDAyNnBhdGgsIE5VTEwpO1xcbiA4MDE6XFx0XFx0aWYgKCFlcnJvcikge1xcbiA4MDI6XFx0XFx0XFx0ZXJyb3IgPSBtbnRfd2FudF93cml0ZShwYXRoLm1udCk7XFxuIDgwMzpcXHRcXHRcXHRpZiAoIWVycm9yKSB7XFxuIDgwNDpcXHRcXHRcXHRcXHRlcnJvciA9IGNob3duX2NvbW1vbihcXHUwMDI2cGF0aCwgdXNlciwgZ3JvdXApO1xcbiA4MDU6XFx0XFx0XFx0XFx0bW50X2Ryb3Bfd3JpdGUocGF0aC5tbnQpO1xcbiA4MDY6XFx0XFx0XFx0fVxcbiA4MDc6XFx0XFx0XFx0cGF0aF9wdXQoXFx1MDAyNnBhdGgpO1xcbiA4MDg6XFx0XFx0XFx0aWYgKHJldHJ5X2VzdGFsZShlcnJvciwgbG9va3VwX2ZsYWdzKSkge1xcbiA4MDk6XFx0XFx0XFx0XFx0bG9va3VwX2ZsYWdzIHw9IExPT0tVUF9SRVZBTDtcXG4gODEwOlxcdFxcdFxcdFxcdGdvdG8gcmV0cnk7XFxuIDgxMTpcXHRcXHRcXHR9XFxuIDgxMjpcXHRcXHR9XFxuIDgxMzpcXHRcXHRyZXR1cm4gZXJyb3I7XFxuIDgxNDpcXHR9XFxuIDgxNTpcXHRcXG4gODE2OlxcdFNZU0NBTExfREVGSU5FNShmY2hvd25hdCwgaW50LCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICosIGZpbGVuYW1lLCB1aWRfdCwgdXNlcixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTY6NTA6MTcuMzUzMzczMzYyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0NDU0MjM4NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBJbXBsZW1lbnRhdGlvbiBvZiBgZG9fZmNob3duYXRgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IGBkb19mY2hvd25hdGAgd29ya3MsIGFuZCBpdCdzIHVzaW5nIGBmaWxlbmFtZV9sb29rdXAoZGZkLCBuYW1lLCBsb29rdXBfZmxhZ3MsIFx1MDAyNnBhdGgsIE5VTEwpYC4gIFRoYXQncyB0aGUgc3RhbmRhcmQgd2F5IHRvIHJlc29sdmUgYSBmaWxlbmFtZSByZWxhdGl2ZSB0byBhIGRpcmVjdG9yeSBmaWxlIGRlc2NyaXB0b3IsIEknbSBmYW1pbGlhciB3aXRoIHRoYXQuICBCdXQgd2FpdCBhIG1pbnV0ZSwgYGZpbGVuYW1lX2xvb2t1cGAgaXMgYWxzbyByZXNwb25zaWJsZSBmb3IgaGFuZGxpbmcgYEFUX0VNUFRZX1BBVEhgIGFuZCB0aG9zZSB0cmlja3kgYE9fUEFUSGAgZmlsZSBkZXNjcmlwdG9ycy4gIEludGVyZXN0aW5nLiBOb3cgaXQgaGFzIG1lIHdvbmRlcmluZywgZG9lcyBgZmlsZW5hbWVfbG9va3VwYCAqYWN0dWFsbHkqIHN1cHBvcnQgYE9fUEFUSGAgZmlsZSBkZXNjcmlwdG9ycz8gSSB0aG91Z2h0IHRoZSBvcmlnaW5hbCBjb2RlIG1pZ2h0IGhhdmUgYXZvaWRlZCB0aGlzLCBidXQgdGhpcyBtYWtlcyBtZSBjdXJpb3VzLiBJJ2QgYmV0dGVyIGRvdWJsZS1jaGVjayB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGZpbGVuYW1lX2xvb2t1cGAgaXRzZWxmLiBMZXQncyBnbyBkaXZlIGludG8gYGZzL25hbWVpLmNgIGFuZCBzZWUgd2hhdCdzIHJlYWxseSBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2QuIFRpbWUgdG8gY29uZmlybSBpZiBteSBhc3N1bXB0aW9ucyBhcmUgY29ycmVjdCwgb3IgaWYgSSdtIG1pc3Npbmcgc29tZXRoaW5nIGltcG9ydGFudCFcblxuXG4iLCJJbnB1dFRva2VucyI6Mjc1MDMsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE2OjUwOjIzLjc5ODc5OTU3N1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYzNzY4ODU2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgZmlsZW5hbWVfbG9va3VwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2ludGVybmFsLmg9NDk9ZXh0ZXJuIGludCBmaW5pc2hfY2xlYW5fY29udGV4dChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpO1xcbi0tXFxuZnMvaW50ZXJuYWwuaC01My0gKi9cXG5mcy9pbnRlcm5hbC5oOjU0OmV4dGVybiBpbnQgZmlsZW5hbWVfbG9va3VwKGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqbmFtZSwgdW5zaWduZWQgZmxhZ3MsXFxuZnMvaW50ZXJuYWwuaC01NS1cXHRcXHRcXHQgICBzdHJ1Y3QgcGF0aCAqcGF0aCwgY29uc3Qgc3RydWN0IHBhdGggKnJvb3QpO1xcbi0tXFxuZnMvbmFtZWkuYz0yODAxPXN0YXRpYyBpbnQgcGF0aF9sb29rdXBhdChzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgdW5zaWduZWQgZmxhZ3MsIHN0cnVjdCBwYXRoICpwYXRoKVxcbi0tXFxuZnMvbmFtZWkuYy0yODMzLVxcbmZzL25hbWVpLmM6MjgzNDppbnQgZmlsZW5hbWVfbG9va3VwKGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqbmFtZSwgdW5zaWduZWQgZmxhZ3MsXFxuZnMvbmFtZWkuYy0yODM1LVxcdFxcdCAgICBzdHJ1Y3QgcGF0aCAqcGF0aCwgY29uc3Qgc3RydWN0IHBhdGggKnJvb3QpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE2OjUwOjI1LjQzNjQ5MjQwNVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzkyMDQzMDczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQncyBteSBvd24gaW50ZXJuYWwgZGlhbG9ndWU6XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50OiBOYXZpZ2F0aW5nIHRoZSBMYW5kc2NhcGUqKlxuXG5BbHJpZ2h0LCB0aGUgZGlyZWN0aXZlIGlzIHRvIHN0YXJ0IHdpdGggYGZpbGVuYW1lX2xvb2t1cGAuIFRoYXQgc3VnZ2VzdHMgd2UncmUgaW5pdGlhdGluZyBhIHNlYXJjaCBvciByZXRyaWV2YWwgcHJvY2VzcywgcHJvYmFibHkgd2l0aGluIGEgbGFyZ2VyIHN5c3RlbS4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gaW1tZWRpYXRlbHkgYXNzZXNzIHRoZSBzY29wZSBhbmQgcG90ZW50aWFsIGNvbnRleHQgb2YgdGhpcyBwYXJ0aWN1bGFyIGxvb2t1cC4gSXMgaXQgYSBzeXN0ZW0td2lkZSBzZWFyY2gsIG9yIGNvbmZpbmVkIHRvIGEgc3BlY2lmaWMgYXBwbGljYXRpb24gb3IgZGF0YSBzdHJ1Y3R1cmU/IFdoYXQncyB0aGUgZXhwZWN0ZWQgZm9ybWF0IG9mIHRoZSBgZmlsZW5hbWVfbG9va3VwYCBvdXRwdXQ/IElzIGl0IGEgZGF0YSBzdHJ1Y3R1cmUsIGEgZnVuY3Rpb24sIGEgcG9pbnRlcj8gS25vd2luZyB0aGF0IHdpbGwgaW5mbHVlbmNlIG15IG5leHQgbW92ZSwgYW5kIGhvdyBkZWVwIEkgbmVlZCB0byBkaWcuIFdlIG5lZWQgdG8gYXNjZXJ0YWluIHRoZSBtZXRob2QgdXNlZCBmb3IgdGhlIGxvb2t1cCBzbyB3ZSBjYW4gdW5kZXJzdGFuZCB0aGUgZGF0YSBzdHJ1Y3R1cmUgYmVoaW5kIGl0LiBBcmUgdGhlcmUgaW5kZXhpbmcgb3IgaGFzaGluZyBtZXRob2RzIGF0IHdvcms/IElzIGl0IGFuIGVmZmljaWVudCBzb2x1dGlvbiBvciBpcyB0aGVyZSBhIG5lZWQgdG8gcmVwbGFjZSBpdD8gSSdsbCBwcm9iYWJseSBuZWVkIHRvIGNvbnNpZGVyIGZhY3RvcnMgb2Ygc2NhbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MDQwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxNjo1MDoyOS4yMjg1Mzc3MjhaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM2NDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL25hbWVpLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjgzNCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjgzNDpcXHRpbnQgZmlsZW5hbWVfbG9va3VwKGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqbmFtZSwgdW5zaWduZWQgZmxhZ3MsXFxuMjgzNTpcXHRcXHRcXHQgICAgc3RydWN0IHBhdGggKnBhdGgsIGNvbnN0IHN0cnVjdCBwYXRoICpyb290KVxcbjI4MzY6XFx0e1xcbjI4Mzc6XFx0XFx0aW50IHJldHZhbDtcXG4yODM4OlxcdFxcdHN0cnVjdCBuYW1laWRhdGEgbmQ7XFxuMjgzOTpcXHRcXHRpZiAoSVNfRVJSKG5hbWUpKVxcbjI4NDA6XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIobmFtZSk7XFxuMjg0MTpcXHRcXHRzZXRfbmFtZWlkYXRhKFxcdTAwMjZuZCwgZGZkLCBuYW1lLCByb290KTtcXG4yODQyOlxcdFxcdHJldHZhbCA9IHBhdGhfbG9va3VwYXQoXFx1MDAyNm5kLCBmbGFncyB8IExPT0tVUF9SQ1UsIHBhdGgpO1xcbjI4NDM6XFx0XFx0aWYgKHVubGlrZWx5KHJldHZhbCA9PSAtRUNISUxEKSlcXG4yODQ0OlxcdFxcdFxcdHJldHZhbCA9IHBhdGhfbG9va3VwYXQoXFx1MDAyNm5kLCBmbGFncywgcGF0aCk7XFxuMjg0NTpcXHRcXHRpZiAodW5saWtlbHkocmV0dmFsID09IC1FU1RBTEUpKVxcbjI4NDY6XFx0XFx0XFx0cmV0dmFsID0gcGF0aF9sb29rdXBhdChcXHUwMDI2bmQsIGZsYWdzIHwgTE9PS1VQX1JFVkFMLCBwYXRoKTtcXG4yODQ3OlxcdFxcbjI4NDg6XFx0XFx0aWYgKGxpa2VseSghcmV0dmFsKSlcXG4yODQ5OlxcdFxcdFxcdGF1ZGl0X2lub2RlKG5hbWUsIHBhdGgtXFx1MDAzZWRlbnRyeSxcXG4yODUwOlxcdFxcdFxcdFxcdCAgICBmbGFncyBcXHUwMDI2IExPT0tVUF9NT1VOVFBPSU5UID8gQVVESVRfSU5PREVfTk9FVkFMIDogMCk7XFxuMjg1MTpcXHRcXHRyZXN0b3JlX25hbWVpZGF0YSgpO1xcbjI4NTI6XFx0XFx0cmV0dXJuIHJldHZhbDtcXG4yODUzOlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTY6NTA6MjkuMjI4OTc2MTI4WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MzUwMDM2OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGBzZXRfbmFtZWlkYXRhYCBhbmQgSXRzIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBzZXRfbmFtZWlkYXRhYC4gVGhlIGNvZGUncyB1c2luZyBgZGZkYCwgYW5kIG15IG1lbnRhbCByYWRhciBpcyBpbW1lZGlhdGVseSB1cC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbm5lY3Rpb24gYmV0d2VlbiB0aGVzZSB0d28uIE15IGZpcnN0IG1vdmUgd2lsbCBiZSB0byByZS1leGFtaW5lIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgc2V0X25hbWVpZGF0YWAuIEl0J3MgbGlrZWx5IHRoYXQgYGRmZGAgaXMgYSBjcnVjaWFsIGRhdGEgc3RydWN0dXJlIG9yIGEgZGVwZW5kZW5jeSB3aXRoaW4gdGhhdCBmdW5jdGlvbi4gSSdsbCBuZWVkIHRvIHVucGFjayB3aGF0IGl0J3Mgc3RvcmluZy4gSSBhbnRpY2lwYXRlIHRoaXMgd2lsbCBpbnZvbHZlIGEgZGVlcCBkaXZlIHRvIGV4YW1pbmUgaG93IHRoYXQgZGVwZW5kZW5jeSBpcyBjb25zdHJ1Y3RlZCBvciBwb3B1bGF0ZWQsIGFuZCB0aGVuIGhvdyBgc2V0X25hbWVpZGF0YWAgY29uc3VtZXMgaXQuIEknbGwgYmUgcGFydGljdWxhcmx5IGZvY3VzZWQgb24gaG93IHRoZSBkYXRhIGhhbmRsZWQgYnkgYGRmZGAgaW1wYWN0cyB0aGUgb3ZlcmFsbCBkYXRhIGZsb3csIGVzcGVjaWFsbHkgd2l0aCByZWdhcmQgdG8gYW55IG5hbWUtcmVsYXRlZCBvcGVyYXRpb25zLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gZGF0YSBmbG93IGFuZCBwb3RlbnRpYWwgZm9yIGFueSBzaWRlLWVmZmVjdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NjMxLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxNjo1MDozMi45NjM5ODI2MDJaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTE0MDgxNTgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0YXRpYyB2b2lkIHNldF9uYW1laWRhdGFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE2OjUwOjM0LjYxNTM5ODI1WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4MDI3NDY1MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbml0aWFsIFNlYXJjaCBJbnF1aXJ5KipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gZ2V0IHNvbWUgaW5mb3JtYXRpb24gb24gYHNldF9uYW1laWRhdGFgLiBJdCdzIGEgcHJldHR5IHNwZWNpZmljIHRlcm0sIHNvIEknbSBob3BpbmcgZm9yIGEgY2xlYW4gaGl0LCBidXQgZXhwZXJpZW5jZSB0ZWxscyBtZSBpdCdzIGFsd2F5cyB3aXNlIHRvIGJlIHByZXBhcmVkIGZvciBzb21lIGludGVycHJldGF0aW9uIGFuZCBkaXNhbWJpZ3VhdGlvbi4gSeKAmW0gZXhwZWN0aW5nIHRoaXMgdG8gYmUgcmVsYXRlZCB0byBmaWxlIHN5c3RlbSBvcGVyYXRpb25zIG9yIG1ldGFkYXRhIG1hbmFnZW1lbnQsIGxpa2VseSB3aXRoaW4gYSBjb250ZXh0IG9mIHNwZWNpZmljIE9TIGtlcm5lbCBvciBsaWJyYXJ5IGNhbGxzLiBHaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24gaXQgY291bGQgYmUgYSBjYWxsIGZvciBkaXJlY3Qgc2V0dGluZyBvZiBmaWxlIHN5c3RlbSBtZXRhZGF0YS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg4ODcsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxNjo1MDozNy40MTgxNDc1MjlaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTE2NDM4MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2V0X25hbWVpZGF0YVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9uYW1laS5jPTcyOD1zdHJ1Y3QgbmFtZWlkYXRhIHtcXG4tLVxcbmZzL25hbWVpLmMtNzU2LVxcbmZzL25hbWVpLmM6NzU3OnN0YXRpYyB2b2lkIF9fc2V0X25hbWVpZGF0YShzdHJ1Y3QgbmFtZWlkYXRhICpwLCBpbnQgZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKm5hbWUpXFxuZnMvbmFtZWkuYy03NTgte1xcbi0tXFxuZnMvbmFtZWkuYy03NzEtXFxuZnMvbmFtZWkuYzo3NzI6c3RhdGljIGlubGluZSB2b2lkIHNldF9uYW1laWRhdGEoc3RydWN0IG5hbWVpZGF0YSAqcCwgaW50IGRmZCwgc3RydWN0IGZpbGVuYW1lICpuYW1lLFxcbmZzL25hbWVpLmMtNzczLVxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IHBhdGggKnJvb3QpXFxuZnMvbmFtZWkuYy03NzQte1xcbmZzL25hbWVpLmM6Nzc1OlxcdF9fc2V0X25hbWVpZGF0YShwLCBkZmQsIG5hbWUpO1xcbmZzL25hbWVpLmMtNzc2LVxcdHAtXFx1MDAzZXN0YXRlID0gMDtcXG4tLVxcbmZzL25hbWVpLmM9MjgzND1pbnQgZmlsZW5hbWVfbG9va3VwKGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqbmFtZSwgdW5zaWduZWQgZmxhZ3MsXFxuLS1cXG5mcy9uYW1laS5jLTI4NDAtXFx0XFx0cmV0dXJuIFBUUl9FUlIobmFtZSk7XFxuZnMvbmFtZWkuYzoyODQxOlxcdHNldF9uYW1laWRhdGEoXFx1MDAyNm5kLCBkZmQsIG5hbWUsIHJvb3QpO1xcbmZzL25hbWVpLmMtMjg0Mi1cXHRyZXR2YWwgPSBwYXRoX2xvb2t1cGF0KFxcdTAwMjZuZCwgZmxhZ3MgfCBMT09LVVBfUkNVLCBwYXRoKTtcXG4tLVxcbmZzL25hbWVpLmM9Mjg3Mz1zdGF0aWMgaW50IF9fZmlsZW5hbWVfcGFyZW50YXQoaW50IGRmZCwgc3RydWN0IGZpbGVuYW1lICpuYW1lLFxcbi0tXFxuZnMvbmFtZWkuYy0yODgyLVxcdFxcdHJldHVybiBQVFJfRVJSKG5hbWUpO1xcbmZzL25hbWVpLmM6Mjg4MzpcXHRzZXRfbmFtZWlkYXRhKFxcdTAwMjZuZCwgZGZkLCBuYW1lLCByb290KTtcXG5mcy9uYW1laS5jLTI4ODQtXFx0cmV0dmFsID0gcGF0aF9wYXJlbnRhdChcXHUwMDI2bmQsIGZsYWdzIHwgTE9PS1VQX1JDVSwgcGFyZW50KTtcXG4tLVxcbmZzL25hbWVpLmM9NDg3Nj1zdHJ1Y3QgZmlsZSAqZG9fZmlsZV9vcGVuKGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqcGF0aG5hbWUsXFxuLS1cXG5mcy9uYW1laS5jLTQ4ODQtXFx0XFx0cmV0dXJuIEVSUl9DQVNUKHBhdGhuYW1lKTtcXG5mcy9uYW1laS5jOjQ4ODU6XFx0c2V0X25hbWVpZGF0YShcXHUwMDI2bmQsIGRmZCwgcGF0aG5hbWUsIE5VTEwpO1xcbmZzL25hbWVpLmMtNDg4Ni1cXHRmaWxwID0gcGF0aF9vcGVuYXQoXFx1MDAyNm5kLCBvcCwgZmxhZ3MgfCBMT09LVVBfUkNVKTtcXG4tLVxcbmZzL25hbWVpLmM9NDg5NT1zdHJ1Y3QgZmlsZSAqZG9fZmlsZV9vcGVuX3Jvb3QoY29uc3Qgc3RydWN0IHBhdGggKnJvb3QsXFxuLS1cXG5mcy9uYW1laS5jLTQ5MDgtXFxuZnMvbmFtZWkuYzo0OTA5OlxcdHNldF9uYW1laWRhdGEoXFx1MDAyNm5kLCAtMSwgZmlsZW5hbWUsIHJvb3QpO1xcbmZzL25hbWVpLmMtNDkxMC1cXHRmaWxlID0gcGF0aF9vcGVuYXQoXFx1MDAyNm5kLCBvcCwgZmxhZ3MgfCBMT09LVVBfUkNVKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTY6NTA6MzkuMDA5Nzk1OTg4WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NDE0NzU5NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBGaWxlc3lzdGVtIFBsdW1iaW5nKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgbmFtaW5nIGFuZCBwYXRoIGxvb2t1cHMsIHBhcnRpY3VsYXJseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgbmFtZWlkYXRhLiBTbywgbXkgaW5pdGlhbCBmb2N1cyBpcyBnb2luZyB0byBiZSBvbiB0aGUgaW50ZXJwbGF5IGJldHdlZW4gYF9fc2V0X25hbWVpZGF0YWAgYW5kIGBwYXRoX2xvb2t1cGF0YCwgYW5kIGFsc28gSSB3YW50IHRvIGNvbXBhcmUgYHBhdGhfbG9va3VwYXRgIHdpdGggYHBhdGhfaW5pdGAuIEknbSBndWVzc2luZyB0aGF0IGBfX3NldF9uYW1laWRhdGFgIHBsYXlzIGEgY3J1Y2lhbCByb2xlIGluIHNldHRpbmcgdXAgdGhlIG5hbWVpZGF0YSBzdHJ1Y3R1cmUgaXRzZWxmLCBwcm9iYWJseSBpbml0aWFsaXppbmcgb3IgcG9wdWxhdGluZyBpdCB3aXRoIGluZm9ybWF0aW9uIG5lZWRlZCBmb3Igc3Vic2VxdWVudCBwYXRoIHJlc29sdXRpb24uIGBwYXRoX2xvb2t1cGF0YCBpcyBtb3N0IGxpa2VseSB0aGUgY29yZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IsIHdlbGwsIGxvb2tpbmcgdXAgYSBwYXRoIHJlbGF0aXZlIHRvIGEgZ2l2ZW4gZmlsZSBkZXNjcmlwdG9yLCBhbmQgSSdkIGJldCBgcGF0aF9pbml0YCBpbml0aWFsaXplcyB0aGUgcGF0aCBzdHJ1Y3R1cmUgaXRzZWxmLiBJdCdzIHRoZSBzdGFuZGFyZCBlbnRyeSBwb2ludCwgd2hlcmVhcyBgcGF0aF9sb29rdXBhdGAgaXMgdGhlIHdvcmtob3JzZS4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0IHdpdGggdGhlIFZGUyBsYXllciwgaW5vZGUgbG9va3VwcywgYW5kIHRoZSB3aG9sZSBwcm9jZXNzIG9mIHRyYXZlcnNpbmcgdGhlIGRpcmVjdG9yeSBoaWVyYXJjaHkuIFRpbWUgdG8gZGlnIGluIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTczMCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE2OjUwOjQyLjg1MTI3MzgwOVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDMxMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvbmFtZWkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3NTcsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3NTc6XFx0c3RhdGljIHZvaWQgX19zZXRfbmFtZWlkYXRhKHN0cnVjdCBuYW1laWRhdGEgKnAsIGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqbmFtZSlcXG4gNzU4OlxcdHtcXG4gNzU5OlxcdFxcdHN0cnVjdCBuYW1laWRhdGEgKm9sZCA9IGN1cnJlbnQtXFx1MDAzZW5hbWVpZGF0YTtcXG4gNzYwOlxcdFxcdHAtXFx1MDAzZXN0YWNrID0gcC1cXHUwMDNlaW50ZXJuYWw7XFxuIDc2MTpcXHRcXHRwLVxcdTAwM2VkZXB0aCA9IDA7XFxuIDc2MjpcXHRcXHRwLVxcdTAwM2VkZmQgPSBkZmQ7XFxuIDc2MzpcXHRcXHRwLVxcdTAwM2VuYW1lID0gbmFtZTtcXG4gNzY0OlxcdFxcdHAtXFx1MDAzZXBhdGhuYW1lID0gbGlrZWx5KG5hbWUpID8gbmFtZS1cXHUwMDNlbmFtZSA6IFxcXCJcXFwiO1xcbiA3NjU6XFx0XFx0cC1cXHUwMDNlcGF0aC5tbnQgPSBOVUxMO1xcbiA3NjY6XFx0XFx0cC1cXHUwMDNlcGF0aC5kZW50cnkgPSBOVUxMO1xcbiA3Njc6XFx0XFx0cC1cXHUwMDNldG90YWxfbGlua19jb3VudCA9IG9sZCA/IG9sZC1cXHUwMDNldG90YWxfbGlua19jb3VudCA6IDA7XFxuIDc2ODpcXHRcXHRwLVxcdTAwM2VzYXZlZCA9IG9sZDtcXG4gNzY5OlxcdFxcdGN1cnJlbnQtXFx1MDAzZW5hbWVpZGF0YSA9IHA7XFxuIDc3MDpcXHR9XFxuIDc3MTpcXHRcXG4gNzcyOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfbmFtZWlkYXRhKHN0cnVjdCBuYW1laWRhdGEgKnAsIGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqbmFtZSxcXG4gNzczOlxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IHBhdGggKnJvb3QpXFxuIDc3NDpcXHR7XFxuIDc3NTpcXHRcXHRfX3NldF9uYW1laWRhdGEocCwgZGZkLCBuYW1lKTtcXG4gNzc2OlxcdFxcdHAtXFx1MDAzZXN0YXRlID0gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTY6NTA6NDIuODUxNDc5ODg5WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU5NjMwNjEyOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgcGF0aF9pbml0YCBhbmQgYE9fUEFUSGAgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGBmcy9uYW1laS5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgcGF0aF9pbml0YCBmdW5jdGlvbi4gSXQgbG9va3MgbGlrZSBpdCBsZXZlcmFnZXMgYG5kLVx1MDAzZWRmZGAgYXMgYSBjcml0aWNhbCBlbGVtZW50LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcmVhbGx5IG5haWwgZG93biBob3cgaXQgaW50ZXJhY3RzIHdpdGggYE9fUEFUSGAgYW5kIGFueSBwb3RlbnRpYWwgbnVhbmNlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgYGRmZGAgaXMgdHJlYXRlZCBkaWZmZXJlbnRseSB3aGVuIGBPX1BBVEhgIGlzIHBhc3NlZC4gV2hhdCBzb3J0IG9mIGludGVybmFsIGNoZWNrcyBhcmUgcGVyZm9ybWVkPyBBcmUgdGhlcmUgYW55IHN1YnRsZSBjaGFuZ2VzIGluIGJlaGF2aW9yIHRoYXQgb2NjdXIgYmVjYXVzZSBvZiB0aGlzIGZsYWc/IEkgd2FudCB0byBtYXAgdGhlIGNvZGUncyBiZWhhdmlvciB3aGVuIGBPX1BBVEhgIGlzIHNldCBhbmQgY29tcGFyZSBpdCB0byB0aGUgc3RhbmRhcmQgcGF0aCBsb29rdXAuIFRoZSBnb2FsIGlzIHRvIGlkZW50aWZ5IGFueSBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcywgcG90ZW50aWFsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcywgb3Igc2ltcGx5IGVuc3VyZSBteSBvdmVyYWxsIHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBjb2RlIGlzIHJvY2sgc29saWQgcmVnYXJkaW5nIGl0cyBpbnRlcmFjdGlvbiB3aXRoIGZpbGUgZGVzY3JpcHRvcnMuIEEgY2xvc2UgcmVhZGluZyBpcyByZXF1aXJlZC4gTGV0J3Mgc2VlIGhvdyBgcGF0aF9pbml0YCBtb2RpZmllcyBgbmRgIGFuZCBob3cgdGhhdCBpbmZsdWVuY2VzIHN1YnNlcXVlbnQgb3BlcmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAzNjUsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE2OjUwOjQ4LjgxNDU0Mzg1N1oiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEyNDI5MDIyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdGF0aWMgY29uc3QgY2hhciBcXFxcKnBhdGhfaW5pdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9uYW1laS5jPTI1Nzg9c3RhdGljIGludCBsaW5rX3BhdGhfd2Fsayhjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgbmFtZWlkYXRhICpuZClcXG4tLVxcbmZzL25hbWVpLmMtMjY3Ni0vKiBtdXN0IGJlIHBhaXJlZCB3aXRoIHRlcm1pbmF0ZV93YWxrKCkgKi9cXG5mcy9uYW1laS5jOjI2Nzc6c3RhdGljIGNvbnN0IGNoYXIgKnBhdGhfaW5pdChzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgdW5zaWduZWQgZmxhZ3MpXFxuZnMvbmFtZWkuYy0yNjc4LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTY6NTA6NTAuOTM4ODM4OTEyWiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk3MTI5MDE2NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgQ29udGV4dCoqXG5cbkFscmlnaHQsIHRoZSBpbnN0cnVjdGlvbiBpcyBzdHJhaWdodGZvcndhcmQ6IExldCdzIGZvY3VzIG91ciBhdHRlbnRpb24gb24gYHBhdGhfaW5pdGAuIFRoaXMgaW1tZWRpYXRlbHkgc3VnZ2VzdHMgYSBzcGVjaWZpYyBhcmVhIG9mIHRoZSBjb2RlYmFzZSBpcyBiZWluZyBmbGFnZ2VkIGFzIHNpZ25pZmljYW50LiBJdCdzIGxpa2VseSBhIGNyaXRpY2FsIGluaXRpYWxpemF0aW9uIHJvdXRpbmUsIGZ1bmN0aW9uLCBvciBtb2R1bGUgcmVsYXRlZCB0byBwYXRoIG1hbmFnZW1lbnQsIHBvdGVudGlhbGx5IHdpdGhpbiBhIGxhcmdlciBzeXN0ZW0uIE15IGltbWVkaWF0ZSBtZW50YWwgY2hlY2tsaXN0IHN0YXJ0czogd2hhdCBwcm9qZWN0LCB3aGF0IGxhbmd1YWdlLCB3aGF0IGFyZSB0aGUgbGlrZWx5IGRhdGEgc3RydWN0dXJlcy9hbGdvcml0aG1zIGludm9sdmVkIGJhc2VkIG9uIHRoZSBuYW1pbmcgY29udmVudGlvbi4gYHBhdGhfaW5pdGAgaW1wbGllcyBpdCdzIHdoZXJlIHRoZSBlbnZpcm9ubWVudCAob3IgYSBzcGVjaWZpYyBjb21wb25lbnQncykgZmlsZSBzeXN0ZW0gcGF0aHMgYXJlIGVzdGFibGlzaGVkLCB2YWxpZGF0ZWQsIG9yIGNvbmZpZ3VyZWQuIFRpbWUgdG8gZGl2ZSBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA3NTcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE2OjUxOjAwLjY1MTc0MjkzNFoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTU0MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvbmFtZWkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNjc3LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNjc3OlxcdHN0YXRpYyBjb25zdCBjaGFyICpwYXRoX2luaXQoc3RydWN0IG5hbWVpZGF0YSAqbmQsIHVuc2lnbmVkIGZsYWdzKVxcbjI2Nzg6XFx0e1xcbjI2Nzk6XFx0XFx0aW50IGVycm9yO1xcbjI2ODA6XFx0XFx0Y29uc3QgY2hhciAqcyA9IG5kLVxcdTAwM2VwYXRobmFtZTtcXG4yNjgxOlxcdFxcbjI2ODI6XFx0XFx0LyogTE9PS1VQX0NBQ0hFRCByZXF1aXJlcyBSQ1UsIGFzayBjYWxsZXIgdG8gcmV0cnkgKi9cXG4yNjgzOlxcdFxcdGlmICh1bmxpa2VseSgoZmxhZ3MgXFx1MDAyNiAoTE9PS1VQX1JDVSB8IExPT0tVUF9DQUNIRUQpKSA9PSBMT09LVVBfQ0FDSEVEKSlcXG4yNjg0OlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FQUdBSU4pO1xcbjI2ODU6XFx0XFxuMjY4NjpcXHRcXHRpZiAodW5saWtlbHkoISpzKSlcXG4yNjg3OlxcdFxcdFxcdGZsYWdzIFxcdTAwMjY9IH5MT09LVVBfUkNVO1xcbjI2ODg6XFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgTE9PS1VQX1JDVSlcXG4yNjg5OlxcdFxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4yNjkwOlxcdFxcdGVsc2VcXG4yNjkxOlxcdFxcdFxcdG5kLVxcdTAwM2VzZXEgPSBuZC1cXHUwMDNlbmV4dF9zZXEgPSAwO1xcbjI2OTI6XFx0XFxuMjY5MzpcXHRcXHRuZC1cXHUwMDNlZmxhZ3MgPSBmbGFncztcXG4yNjk0OlxcdFxcdG5kLVxcdTAwM2VzdGF0ZSB8PSBORF9KVU1QRUQ7XFxuMjY5NTpcXHRcXG4yNjk2OlxcdFxcdG5kLVxcdTAwM2VtX3NlcSA9IF9fcmVhZF9zZXFjb3VudF9iZWdpbihcXHUwMDI2bW91bnRfbG9jay5zZXFjb3VudCk7XFxuMjY5NzpcXHRcXHRuZC1cXHUwMDNlcl9zZXEgPSBfX3JlYWRfc2VxY291bnRfYmVnaW4oXFx1MDAyNnJlbmFtZV9sb2NrLnNlcWNvdW50KTtcXG4yNjk4OlxcdFxcdHNtcF9ybWIoKTtcXG4yNjk5OlxcdFxcbjI3MDA6XFx0XFx0aWYgKHVubGlrZWx5KG5kLVxcdTAwM2VzdGF0ZSBcXHUwMDI2IE5EX1JPT1RfUFJFU0VUKSkge1xcbjI3MDE6XFx0XFx0XFx0c3RydWN0IGRlbnRyeSAqcm9vdCA9IG5kLVxcdTAwM2Vyb290LmRlbnRyeTtcXG4yNzAyOlxcdFxcdFxcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSByb290LVxcdTAwM2VkX2lub2RlO1xcbjI3MDM6XFx0XFx0XFx0aWYgKCpzIFxcdTAwMjZcXHUwMDI2IHVubGlrZWx5KCFkX2Nhbl9sb29rdXAocm9vdCkpKVxcbjI3MDQ6XFx0XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT1RESVIpO1xcbjI3MDU6XFx0XFx0XFx0bmQtXFx1MDAzZXBhdGggPSBuZC1cXHUwMDNlcm9vdDtcXG4yNzA2OlxcdFxcdFxcdG5kLVxcdTAwM2Vpbm9kZSA9IGlub2RlO1xcbjI3MDc6XFx0XFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgTE9PS1VQX1JDVSkge1xcbjI3MDg6XFx0XFx0XFx0XFx0bmQtXFx1MDAzZXNlcSA9IHJlYWRfc2VxY291bnRfYmVnaW4oXFx1MDAyNm5kLVxcdTAwM2VwYXRoLmRlbnRyeS1cXHUwMDNlZF9zZXEpO1xcbjI3MDk6XFx0XFx0XFx0XFx0bmQtXFx1MDAzZXJvb3Rfc2VxID0gbmQtXFx1MDAzZXNlcTtcXG4yNzEwOlxcdFxcdFxcdH0gZWxzZSB7XFxuMjcxMTpcXHRcXHRcXHRcXHRwYXRoX2dldChcXHUwMDI2bmQtXFx1MDAzZXBhdGgpO1xcbjI3MTI6XFx0XFx0XFx0fVxcbjI3MTM6XFx0XFx0XFx0cmV0dXJuIHM7XFxuMjcxNDpcXHRcXHR9XFxuMjcxNTpcXHRcXG4yNzE2OlxcdFxcdG5kLVxcdTAwM2Vyb290Lm1udCA9IE5VTEw7XFxuMjcxNzpcXHRcXG4yNzE4OlxcdFxcdC8qIEFic29sdXRlIHBhdGhuYW1lIC0tIGZldGNoIHRoZSByb290IChMT09LVVBfSU5fUk9PVCB1c2VzIG5kLVxcdTAwM2VkZmQpLiAqL1xcbjI3MTk6XFx0XFx0aWYgKCpzID09ICcvJyBcXHUwMDI2XFx1MDAyNiBsaWtlbHkoIShmbGFncyBcXHUwMDI2IExPT0tVUF9JTl9ST09UKSkpIHtcXG4yNzIwOlxcdFxcdFxcdGVycm9yID0gbmRfanVtcF9yb290KG5kKTtcXG4yNzIxOlxcdFxcdFxcdGlmICh1bmxpa2VseShlcnJvcikpXFxuMjcyMjpcXHRcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUihlcnJvcik7XFxuMjcyMzpcXHRcXHRcXHRyZXR1cm4gcztcXG4yNzI0OlxcdFxcdH1cXG4yNzI1OlxcdFxcbjI3MjY6XFx0XFx0LyogUmVsYXRpdmUgcGF0aG5hbWUgLS0gZ2V0IHRoZSBzdGFydGluZy1wb2ludCBpdCBpcyByZWxhdGl2ZSB0by4gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTY6NTE6MDAuNjUxOTU5NTAzWiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NDAxOTI3OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgaW50byB0aGUgYHBhdGhfaW5pdGAgRnVuY3Rpb24qKlxuXG5BbHJpZ2h0LCBzbyB0aGUgaW5pdGlhbCBwcm9tcHQganVzdCBudWRnZWQgbWUgdG8ga2VlcCBnb2luZy4gXCJMZXQncyByZWFkIHRoZSByZXN0IG9mIGBwYXRoX2luaXRgLlwiIEkgaW1tZWRpYXRlbHkgaW50ZXJwcmV0IHRoaXMgYXMgYSBkaXJlY3RpdmUgdG8gZGVsdmUgZGVlcGVyIGludG8gdGhlIGNvZGUuIFRoaXMgYXNzdW1lcywgbmF0dXJhbGx5LCB0aGF0IHRoZSByZWFkZXIgaGFzIHByZXZpb3VzbHkgZW5nYWdlZCB3aXRoIHRoZSBmdW5jdGlvbidzIGluaXRpYWwgcGFydHMgb3IgdGhlIGJyb2FkZXIgY29udGV4dC4gXCJUaGUgcmVzdFwiIGltcGxpZXMgdGhlcmUncyBleGlzdGluZyBmYW1pbGlhcml0eSBvciBhIGRlZmluZWQgc2VjdGlvbiB0byBiZSBhbmFseXplZC4gTXkgZm9jdXMgc2hhcnBlbnMuIEknbSBtb3ZpbmcgYmV5b25kIGFueSBzdXBlcmZpY2lhbCBvdmVydmlldyBJIG1pZ2h0IGhhdmUgZG9uZSBwcmV2aW91c2x5IGFuZCBJJ20gZ2V0dGluZyByZWFkeSB0byBzY3J1dGluaXplIGl0cyBpbnRlcm5hbCB3b3JraW5ncy4gSXQncyBhIGNhbGwgdG8gZXhhbWluZSB0aGUgY29kZSdzIHN1YnNlcXVlbnQgbGluZXMsIGxvZ2ljIGZsb3csIGFuZCBwb3RlbnRpYWxseSB0byBleHBsb3JlIGFueSBjb25kaXRpb25hbCBicmFuY2hlcyBvciBmdW5jdGlvbiBjYWxscy4gSXQncyB0aW1lIHRvIGdldCBhIGZlZWwgZm9yIHRoZSByZW1haW5pbmcgc3RydWN0dXJlIGFuZCBpbnRlbnQsIHNvIEkgY2FuIHN5bnRoZXNpemUgYSBob2xpc3RpYyB1bmRlcnN0YW5kaW5nLiBJIHdpbGwgYmUgYXNzZXNzaW5nIHZhcmlhYmxlIHVzYWdlLCBtZW1vcnkgbWFuYWdlbWVudCAoaWYgcmVsZXZhbnQpLCBhbmQgZXJyb3IgaGFuZGxpbmcgYXMgSSBtb3ZlIHRocm91Z2ggaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxNzQyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxNjo1MTowNC4zOTIxNTUyMzhaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk1NzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL25hbWVpLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjcyNyxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjcyNzpcXHRcXHRpZiAobmQtXFx1MDAzZWRmZCA9PSBBVF9GRENXRCkge1xcbjI3Mjg6XFx0XFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgTE9PS1VQX1JDVSkge1xcbjI3Mjk6XFx0XFx0XFx0XFx0c3RydWN0IGZzX3N0cnVjdCAqZnMgPSBjdXJyZW50LVxcdTAwM2VmcztcXG4yNzMwOlxcdFxcdFxcdFxcdHVuc2lnbmVkIHNlcTtcXG4yNzMxOlxcdFxcbjI3MzI6XFx0XFx0XFx0XFx0ZG8ge1xcbjI3MzM6XFx0XFx0XFx0XFx0XFx0c2VxID0gcmVhZF9zZXFiZWdpbihcXHUwMDI2ZnMtXFx1MDAzZXNlcSk7XFxuMjczNDpcXHRcXHRcXHRcXHRcXHRuZC1cXHUwMDNlcGF0aCA9IGZzLVxcdTAwM2Vwd2Q7XFxuMjczNTpcXHRcXHRcXHRcXHRcXHRuZC1cXHUwMDNlaW5vZGUgPSBuZC1cXHUwMDNlcGF0aC5kZW50cnktXFx1MDAzZWRfaW5vZGU7XFxuMjczNjpcXHRcXHRcXHRcXHRcXHRuZC1cXHUwMDNlc2VxID0gX19yZWFkX3NlcWNvdW50X2JlZ2luKFxcdTAwMjZuZC1cXHUwMDNlcGF0aC5kZW50cnktXFx1MDAzZWRfc2VxKTtcXG4yNzM3OlxcdFxcdFxcdFxcdH0gd2hpbGUgKHJlYWRfc2VxcmV0cnkoXFx1MDAyNmZzLVxcdTAwM2VzZXEsIHNlcSkpO1xcbjI3Mzg6XFx0XFx0XFx0fSBlbHNlIHtcXG4yNzM5OlxcdFxcdFxcdFxcdGdldF9mc19wd2QoY3VycmVudC1cXHUwMDNlZnMsIFxcdTAwMjZuZC1cXHUwMDNlcGF0aCk7XFxuMjc0MDpcXHRcXHRcXHRcXHRuZC1cXHUwMDNlaW5vZGUgPSBuZC1cXHUwMDNlcGF0aC5kZW50cnktXFx1MDAzZWRfaW5vZGU7XFxuMjc0MTpcXHRcXHRcXHR9XFxuMjc0MjpcXHRcXHR9IGVsc2Uge1xcbjI3NDM6XFx0XFx0XFx0LyogQ2FsbGVyIG11c3QgY2hlY2sgZXhlY3V0ZSBwZXJtaXNzaW9ucyBvbiB0aGUgc3RhcnRpbmcgcGF0aCBjb21wb25lbnQgKi9cXG4yNzQ0OlxcdFxcdFxcdENMQVNTKGZkX3JhdywgZikobmQtXFx1MDAzZWRmZCk7XFxuMjc0NTpcXHRcXHRcXHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7XFxuMjc0NjpcXHRcXG4yNzQ3OlxcdFxcdFxcdGlmIChmZF9lbXB0eShmKSlcXG4yNzQ4OlxcdFxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FQkFERik7XFxuMjc0OTpcXHRcXG4yNzUwOlxcdFxcdFxcdGlmIChmbGFncyBcXHUwMDI2IExPT0tVUF9MSU5LQVRfRU1QVFkpIHtcXG4yNzUxOlxcdFxcdFxcdFxcdGlmIChmZF9maWxlKGYpLVxcdTAwM2VmX2NyZWQgIT0gY3VycmVudF9jcmVkKCkgXFx1MDAyNlxcdTAwMjZcXG4yNzUyOlxcdFxcdFxcdFxcdCAgICAhbnNfY2FwYWJsZShmZF9maWxlKGYpLVxcdTAwM2VmX2NyZWQtXFx1MDAzZXVzZXJfbnMsIENBUF9EQUNfUkVBRF9TRUFSQ0gpKVxcbjI3NTM6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7XFxuMjc1NDpcXHRcXHRcXHR9XFxuMjc1NTpcXHRcXG4yNzU2OlxcdFxcdFxcdGRlbnRyeSA9IGZkX2ZpbGUoZiktXFx1MDAzZWZfcGF0aC5kZW50cnk7XFxuMjc1NzpcXHRcXG4yNzU4OlxcdFxcdFxcdGlmICgqcyBcXHUwMDI2XFx1MDAyNiB1bmxpa2VseSghZF9jYW5fbG9va3VwKGRlbnRyeSkpKVxcbjI3NTk6XFx0XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT1RESVIpO1xcbjI3NjA6XFx0XFxuMjc2MTpcXHRcXHRcXHRuZC1cXHUwMDNlcGF0aCA9IGZkX2ZpbGUoZiktXFx1MDAzZWZfcGF0aDtcXG4yNzYyOlxcdFxcdFxcdGlmIChmbGFncyBcXHUwMDI2IExPT0tVUF9SQ1UpIHtcXG4yNzYzOlxcdFxcdFxcdFxcdG5kLVxcdTAwM2Vpbm9kZSA9IG5kLVxcdTAwM2VwYXRoLmRlbnRyeS1cXHUwMDNlZF9pbm9kZTtcXG4yNzY0OlxcdFxcdFxcdFxcdG5kLVxcdTAwM2VzZXEgPSByZWFkX3NlcWNvdW50X2JlZ2luKFxcdTAwMjZuZC1cXHUwMDNlcGF0aC5kZW50cnktXFx1MDAzZWRfc2VxKTtcXG4yNzY1OlxcdFxcdFxcdH0gZWxzZSB7XFxuMjc2NjpcXHRcXHRcXHRcXHRwYXRoX2dldChcXHUwMDI2bmQtXFx1MDAzZXBhdGgpO1xcbjI3Njc6XFx0XFx0XFx0XFx0bmQtXFx1MDAzZWlub2RlID0gbmQtXFx1MDAzZXBhdGguZGVudHJ5LVxcdTAwM2VkX2lub2RlO1xcbjI3Njg6XFx0XFx0XFx0fVxcbjI3Njk6XFx0XFx0fVxcbjI3NzA6XFx0XFxuMjc3MTpcXHRcXHQvKiBGb3Igc2NvcGVkLWxvb2t1cHMgd2UgbmVlZCB0byBzZXQgdGhlIHJvb3QgdG8gdGhlIGRpcmZkIGFzIHdlbGwuICovXFxuMjc3MjpcXHRcXHRpZiAodW5saWtlbHkoZmxhZ3MgXFx1MDAyNiBMT09LVVBfSVNfU0NPUEVEKSkge1xcbjI3NzM6XFx0XFx0XFx0bmQtXFx1MDAzZXJvb3QgPSBuZC1cXHUwMDNlcGF0aDtcXG4yNzc0OlxcdFxcdFxcdGlmIChmbGFncyBcXHUwMDI2IExPT0tVUF9SQ1UpIHtcXG4yNzc1OlxcdFxcdFxcdFxcdG5kLVxcdTAwM2Vyb290X3NlcSA9IG5kLVxcdTAwM2VzZXE7XFxuMjc3NjpcXHRcXHRcXHR9IGVsc2Uge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxNjo1MTowNC4zOTIzNTIyNDhaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzk2MjkwMDY2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgYHhhdHRyYXRgIFN5c2NhbGwgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBjb3JlIGlzc3VlIHNlZW1zIHRvIGJlIGhvdyB0aGUgZmlsZSBkZXNjcmlwdG9yIChgZGZkYCkgaXMgaGFuZGxlZCBpbiB0aGUgYCp4YXR0cmF0YCBzeXNjYWxscyB3aGVuIGBBVF9FTVBUWV9QQVRIYCBpcyB1c2VkIGFuZCB0aGUgcGF0aCBpcyBlbXB0eS4gTXkgaW5pdGlhbCBodW5jaCB3YXMgY29ycmVjdDogdGhlIHByb2JsZW0gc3RlbXMgZnJvbSBob3cgd2UgcmV0cmlldmUgdGhlIGZpbGUgZGVzY3JpcHRvciBpdHNlbGYuXG5cbkkndmUgcmVhbGl6ZWQgdGhhdCB0aGUgYHBhdGhfaW5pdGAgZnVuY3Rpb24gdXNlcyBgQ0xBU1MoZmRfcmF3LCBmKShuZC1cdTAwM2VkZmQpYCB0byBncmFiIHRoZSBmaWxlIGRlc2NyaXB0b3IuIEFuZCB0aGF0IGBmZF9yYXdgIGFjdHVhbGx5IGNhbGxzIGBmZGdldF9yYXdgLiBUaGlzIGlzIHRoZSBrZXkuIGBmZGdldF9yYXdgIGlzIGltcG9ydGFudCBiZWNhdXNlIGl0IHNwZWNpZmljYWxseSAqYWxsb3dzKiBgT19QQVRIYCBmaWxlIGRlc2NyaXB0b3JzLiBUaGlzIGlzIHdoYXQncyBsZXR0aW5nIGZ1bmN0aW9ucyBsaWtlIGBmaWxlbmFtZV9sb29rdXBgLCB3aGljaCBtYW55IG9mIHRoZSBgKmF0YCBmdW5jdGlvbnMgdXNlLCBjb3JyZWN0bHkgaGFuZGxlIHRoZXNlIGBPX1BBVEhgIGZpbGUgZGVzY3JpcHRvcnMgd2hlbiBgQVRfRU1QVFlfUEFUSGAgaXMgZ2l2ZW4uXG5cblRoZSBuZXdseSBpbXBsZW1lbnRlZCBgc2V0eGF0dHJhdGAsIGBnZXR4YXR0cmF0YCwgYGxpc3R4YXR0cmF0YCwgYW5kIGByZW1vdmV4YXR0cmF0YCBzeXNjYWxscywgaG93ZXZlciwgd2VyZSBpbXBsZW1lbnRlZCB3aXRoIGBDTEFTUyhmZCwgZikoZGZkKWAgd2hlbiBgQVRfRU1QVFlfUEFUSGAgYW5kIHRoZSBwYXRoIHdlcmUgYm90aCB1c2VkLCBhbmQgdGhhdCBjYXVzZXMgcHJvYmxlbXMgd2l0aCBgT19QQVRIYCBkZXNjcmlwdG9ycy4gVGhpcyBtZWFucyB0aGVzZSBkaWRuJ3Qgd29yayBwcm9wZXJseSB3aXRoIGBPX1BBVEhgIGZpbGUgZGVzY3JpcHRvcnMuXG5cblRoZSBwYXRjaCBmaXhlcyB0aGlzIGluY29uc2lzdGVuY3kgYnkgY2hhbmdpbmcgdGhvc2Ugc3lzY2FsbHMgdG8gdXNlIGBDTEFTUyhmZF9tYXliZV9yYXcsIGYpKGRmZCwgcmF3KWAgd2l0aCBgcmF3ID0gdHJ1ZWAuIFRoaXMgaXMgdGhlIGltcG9ydGFudCBwYXJ0OiBzZXR0aW5nIGByYXcgPSB0cnVlYCBhbGxvd3MgdXMgdG8gY29ycmVjdGx5IGhhbmRsZSBgT19QQVRIYCBmaWxlIGRlc2NyaXB0b3JzLCB0aHVzIGFsaWduaW5nIHRoZW0gd2l0aCB0aGUgYmVoYXZpb3Igb2Ygb3RoZXIgYCphdGAgc3lzY2FsbHMuXG5cbkZ1bmN0aW9uYWxseSwgdGhpcyBpcyBhIGNsZWFyIGVuaGFuY2VtZW50LiBOb3csIGBzZXR4YXR0cmF0YCwgYGdldHhhdHRyYXRgLCBgbGlzdHhhdHRyYXRgLCBhbmQgYHJlbW92ZXhhdHRyYXRgIHdpbGwgKmNvcnJlY3RseSogb3BlcmF0ZSBvbiBgT19QQVRIYCBmaWxlIGRlc2NyaXB0b3JzLCB3aGljaCB3YXNuJ3QgdGhlIGNhc2UgcHJldmlvdXNseS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhbmQgYSBnb29kIG9uZSBhdCB0aGF0LlxuXG5Ob3csIGxldCdzIGNvbnNpZGVyIHBvdGVudGlhbCBkZXBlbmRlbmNpZXMuIFRoZSBjaGFuZ2VzIGFyZSBjb25maW5lZCB0byBgZnMveGF0dHIuY2AgYW5kIGBpbmNsdWRlL2xpbnV4L2ZpbGUuaGAuIFdoaWxlIHRoZSBjb3JlIHhhdHRyIHN5c2NhbGxzIGFyZSBhbHdheXMgdGhlcmUsIHJlZ2FyZGxlc3Mgb2YgZmlsZXN5c3RlbSwgdGhleSdyZSBvbmx5ICplbmFibGVkKiBpZiB0aGVyZSBpcyBzdXBwb3J0LCB0aHJvdWdoIHNvbWV0aGluZyBsaWtlIGBDT05GSUdfRVhUNF9GU19YQVRUUmAuIFNvLCB0aGUgY29yZSBpcyBhbHdheXMgdGhlcmUsIGJ1dCB0aGV5IG1pZ2h0IG5vdCAqZG8qIGFueXRoaW5nIG9uIGEgc3lzdGVtIHdpdGhvdXQgdGhlIGZpbGVzeXN0ZW0gc3VwcG9ydC4gSSBjYW4gdGhpbmsgb2YgbmVlZGluZyBgQ09ORklHX1RNUEZTX1hBVFRSYCBmb3IgdGVzdGluZyB4YXR0cnMgb24gdG1wZnMuIEJ1dCB0aGUgY29yZSBzeXNjYWxscyB0aGVtc2VsdmVzIGFyZSBhbHdheXMgZW5hYmxlZC4gSSBzaG91bGQgbG9vayBpbnRvIHdoYXQgd291bGQgYmUgbmVlZGVkIHNwZWNpZmljYWxseSBmb3IgYHNldHhhdHRyYXRgIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gdW5pbnRlbmRlZCBjb25zZXF1ZW5jZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyODQyLCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzkyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTY6NTE6MTIuMzU1MjU1OTc0WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTkwNDA3NTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyAuKlhBVFRSXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL0tjb25maWc9MTgxPWNvbmZpZyBUTVBGU19QT1NJWF9BQ0xcXG4tLVxcbmZzL0tjb25maWctMTk4LVxcbmZzL0tjb25maWc6MTk5OmNvbmZpZyBUTVBGU19YQVRUUlxcbmZzL0tjb25maWctMjAwLVxcdGJvb2wgXFxcIlRtcGZzIGV4dGVuZGVkIGF0dHJpYnV0ZXNcXFwiXFxuLS1cXG5mcy9lcm9mcy9LY29uZmlnPTUwPWNvbmZpZyBFUk9GU19GU19ERUJVR1xcbi0tXFxuZnMvZXJvZnMvS2NvbmZpZy01OS1cXG5mcy9lcm9mcy9LY29uZmlnOjYwOmNvbmZpZyBFUk9GU19GU19YQVRUUlxcbmZzL2Vyb2ZzL0tjb25maWctNjEtXFx0Ym9vbCBcXFwiRVJPRlMgZXh0ZW5kZWQgYXR0cmlidXRlc1xcXCJcXG4tLVxcbmZzL2V4dDIvS2NvbmZpZz0yPWNvbmZpZyBFWFQyX0ZTXFxuLS1cXG5mcy9leHQyL0tjb25maWctMjAtXFxuZnMvZXh0Mi9LY29uZmlnOjIxOmNvbmZpZyBFWFQyX0ZTX1hBVFRSXFxuZnMvZXh0Mi9LY29uZmlnLTIyLVxcdGJvb2wgXFxcIkV4dDIgZXh0ZW5kZWQgYXR0cmlidXRlc1xcXCJcXG4tLVxcbmZzL2YyZnMvS2NvbmZpZz0zMT1jb25maWcgRjJGU19TVEFUX0ZTXFxuLS1cXG5mcy9mMmZzL0tjb25maWctNDMtXFxuZnMvZjJmcy9LY29uZmlnOjQ0OmNvbmZpZyBGMkZTX0ZTX1hBVFRSXFxuZnMvZjJmcy9LY29uZmlnLTQ1LVxcdGJvb2wgXFxcIkYyRlMgZXh0ZW5kZWQgYXR0cmlidXRlc1xcXCJcXG4tLVxcbmZzL2pmZnMyL0tjb25maWc9NTM9Y29uZmlnIEpGRlMyX1NVTU1BUllcXG4tLVxcbmZzL2pmZnMyL0tjb25maWctNjUtXFxuZnMvamZmczIvS2NvbmZpZzo2Njpjb25maWcgSkZGUzJfRlNfWEFUVFJcXG5mcy9qZmZzMi9LY29uZmlnLTY3LVxcdGJvb2wgXFxcIkpGRlMyIFhBVFRSIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc9ODM9Y29uZmlnIENJRlNfVVBDQUxMXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWctOTEtXFxuZnMvc21iL2NsaWVudC9LY29uZmlnOjkyOmNvbmZpZyBDSUZTX1hBVFRSXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTkzLVxcdGJvb2wgXFxcIkNJRlMgZXh0ZW5kZWQgYXR0cmlidXRlc1xcXCJcXG4tLVxcbmZzL3NxdWFzaGZzL0tjb25maWc9MTI5PWNvbmZpZyBTUVVBU0hGU19NT1VOVF9ERUNPTVBfVEhSRUFEU1xcbi0tXFxuZnMvc3F1YXNoZnMvS2NvbmZpZy0xNDEtXFxuZnMvc3F1YXNoZnMvS2NvbmZpZzoxNDI6Y29uZmlnIFNRVUFTSEZTX1hBVFRSXFxuZnMvc3F1YXNoZnMvS2NvbmZpZy0xNDMtXFx0Ym9vbCBcXFwiU3F1YXNoZnMgWEFUVFIgc3VwcG9ydFxcXCJcXG4tLVxcbmZzL3ViaWZzL0tjb25maWc9NTI9Y29uZmlnIFVCSUZTX0FUSU1FX1NVUFBPUlRcXG4tLVxcbmZzL3ViaWZzL0tjb25maWctNjUtXFxuZnMvdWJpZnMvS2NvbmZpZzo2Njpjb25maWcgVUJJRlNfRlNfWEFUVFJcXG5mcy91Ymlmcy9LY29uZmlnLTY3LVxcdGJvb2wgXFxcIlVCSUZTIFhBVFRSIHN1cHBvcnRcXFwiXFxuLS1cXG5zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL0tjb25maWc9MTc9Y29uZmlnIEVWTV9BVFRSX0ZTVVVJRFxcbi0tXFxuc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9LY29uZmlnLTMwLVxcbnNlY3VyaXR5L2ludGVncml0eS9ldm0vS2NvbmZpZzozMTpjb25maWcgRVZNX0VYVFJBX1NNQUNLX1hBVFRSU1xcbnNlY3VyaXR5L2ludGVncml0eS9ldm0vS2NvbmZpZy0zMi1cXHRib29sIFxcXCJBZGRpdGlvbmFsIFNNQUNLIHhhdHRyc1xcXCJcXG4tLVxcbnNlY3VyaXR5L2ludGVncml0eS9ldm0vS2NvbmZpZy00Ny1cXG5zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL0tjb25maWc6NDg6Y29uZmlnIEVWTV9BRERfWEFUVFJTXFxuc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9LY29uZmlnLTQ5LVxcdGJvb2wgXFxcIkFkZCBhZGRpdGlvbmFsIEVWTSBleHRlbmRlZCBhdHRyaWJ1dGVzIGF0IHJ1bnRpbWVcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE2OjUxOjE0LjU0NTY2NzMyOFoiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTMzMjg0MTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgWGF0dHIgQ29tcGlsYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUncyBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgZ2F0ZXMgdGhlIGNvbXBpbGF0aW9uIG9mIHRoZSBjb3JlIGV4dGVuZGVkIGF0dHJpYnV0ZSAoeGF0dHIpIHN5c3RlbSBjYWxscy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQncyBwcm9iYWJseSBub3QsIGJ1dCBJIG5lZWQgdG8gY29uZmlybSB0aGF0LiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZS4gU3BlY2lmaWNhbGx5LCBgZnMveGF0dHIuY2AgaXMgdGhlIG9idmlvdXMgcGxhY2UgdG8gc3RhcnQuIEknbGwgc2NhbiB0aHJvdWdoIHRoYXQgZmlsZSBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgYCNpZmRlZmAgb3Igc2ltaWxhciBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyB0aGF0IGNvbmRpdGlvbmFsbHkgY29tcGlsZSB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zLiBUaGF0IHNob3VsZCBxdWlja2x5IHRlbGwgbWUgd2hldGhlciB0aGUgeGF0dHIgc3lzdGVtIGNhbGxzIGFyZSBmdW5kYW1lbnRhbGx5IGJ1aWx0IGludG8gdGhlIGtlcm5lbCBvciBpZiB0aGVpciBwcmVzZW5jZSBpcyBjb250cm9sbGVkIGJ5IGEgc3BlY2lmaWMgYENPTkZJR19gIG9wdGlvbi4gVGhpcyBpcyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgY2hlY2ssIGJ1dCBhIG5lY2Vzc2FyeSBzdGVwIHRvIHVuZGVyc3RhbmQgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0NjQ4LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTY6NTE6MTcuNjc4OTUzNTM4WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTQwNjg5MjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhhdHRyXFxcXC5vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24va2J1aWxkL21ha2VmaWxlcy5yc3Q9MTczPUV4YW1wbGU6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi9rYnVpbGQvbWFrZWZpbGVzLnJzdC0xNzgtICAgIG5hbWVpLm8gc3VwZXIubyBzeW1saW5rLm9cXG5Eb2N1bWVudGF0aW9uL2tidWlsZC9tYWtlZmlsZXMucnN0OjE3OTogIGV4dDItJChDT05GSUdfRVhUMl9GU19YQVRUUikgKz0geGF0dHIubyB4YXR0cl91c2VyLm8gXFxcXFxcbkRvY3VtZW50YXRpb24va2J1aWxkL21ha2VmaWxlcy5yc3QtMTgwLSAgICB4YXR0cl90cnVzdGVkLm9cXG5Eb2N1bWVudGF0aW9uL2tidWlsZC9tYWtlZmlsZXMucnN0LTE4MS1cXG5Eb2N1bWVudGF0aW9uL2tidWlsZC9tYWtlZmlsZXMucnN0OjE4MjpJbiB0aGlzIGV4YW1wbGUsIHhhdHRyLm8sIHhhdHRyX3VzZXIubyBhbmQgeGF0dHJfdHJ1c3RlZC5vIGFyZSBvbmx5XFxuRG9jdW1lbnRhdGlvbi9rYnVpbGQvbWFrZWZpbGVzLnJzdC0xODMtcGFydCBvZiB0aGUgY29tcG9zaXRlIG9iamVjdCBleHQyLm8gaWYgJChDT05GSUdfRVhUMl9GU19YQVRUUilcXG4tLVxcbkRvY3VtZW50YXRpb24va2J1aWxkL21vZHVsZXMucnN0PTUwMT1UZXN0aW5nIGZvciBDT05GSUdfRk9PX0JBUlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9rYnVpbGQvbW9kdWxlcy5yc3QtNTEyLVxcdFxcdGV4dDIteSA6PSBiYWxsb2MubyBiaXRtYXAubyBkaXIub1xcbkRvY3VtZW50YXRpb24va2J1aWxkL21vZHVsZXMucnN0OjUxMzpcXHRcXHRleHQyLSQoQ09ORklHX0VYVDJfRlNfWEFUVFIpICs9IHhhdHRyLm9cXG4tLVxcbmZzLzlwL01ha2VmaWxlPTI9b2JqLSQoQ09ORklHXzlQX0ZTKSA6PSA5cC5vXFxuLS1cXG5mcy85cC9NYWtlZmlsZS0xMy1cXHRmaWQubyAgXFxcXFxcbmZzLzlwL01ha2VmaWxlOjE0OlxcdHhhdHRyLm9cXG5mcy85cC9NYWtlZmlsZS0xNS1cXG4tLVxcbmZzL01ha2VmaWxlPTEwPW9iai15IDo9XFx0b3Blbi5vIHJlYWRfd3JpdGUubyBmaWxlX3RhYmxlLm8gc3VwZXIubyBcXFxcXFxuLS1cXG5mcy9NYWtlZmlsZS0xMy1cXHRcXHRhdHRyLm8gYmFkX2lub2RlLm8gZmlsZS5vIGZpbGVzeXN0ZW1zLm8gbmFtZXNwYWNlLm8gXFxcXFxcbmZzL01ha2VmaWxlOjE0OlxcdFxcdHNlcV9maWxlLm8geGF0dHIubyBsaWJmcy5vIGZzLXdyaXRlYmFjay5vIFxcXFxcXG5mcy9NYWtlZmlsZS0xNS1cXHRcXHRwbm9kZS5vIHNwbGljZS5vIHN5bmMubyB1dGltZXMubyBkX3BhdGgubyBcXFxcXFxuLS1cXG5mcy9hZnMvTWFrZWZpbGU9Nj1rYWZzLXkgOj0gXFxcXFxcbi0tXFxuZnMvYWZzL01ha2VmaWxlLTQxLVxcdHdyaXRlLm8gXFxcXFxcbmZzL2Fmcy9NYWtlZmlsZTo0MjpcXHR4YXR0ci5vIFxcXFxcXG5mcy9hZnMvTWFrZWZpbGUtNDMtXFx0eWZzY2xpZW50Lm9cXG4tLVxcbmZzL2J0cmZzL01ha2VmaWxlPTI0PWJ0cmZzLXkgKz0gc3VwZXIubyBjdHJlZS5vIGV4dGVudC10cmVlLm8gcHJpbnQtdHJlZS5vIHJvb3QtdHJlZS5vIGRpci1pdGVtLm8gXFxcXFxcbi0tXFxuZnMvYnRyZnMvTWFrZWZpbGUtMjYtXFx0ICAgdHJhbnNhY3Rpb24ubyBpbm9kZS5vIGZpbGUubyBkZWZyYWcubyBcXFxcXFxuZnMvYnRyZnMvTWFrZWZpbGU6Mjc6XFx0ICAgZXh0ZW50X21hcC5vIHN5c2ZzLm8gYWNjZXNzb3JzLm8geGF0dHIubyBvcmRlcmVkLWRhdGEubyBcXFxcXFxuZnMvYnRyZnMvTWFrZWZpbGUtMjgtXFx0ICAgZXh0ZW50X2lvLm8gdm9sdW1lcy5vIGFzeW5jLXRocmVhZC5vIGlvY3RsLm8gbG9ja2luZy5vIG9ycGhhbi5vIFxcXFxcXG4tLVxcbmZzL2NhY2hlZmlsZXMvTWFrZWZpbGU9Nj1jYWNoZWZpbGVzLXkgOj0gXFxcXFxcbi0tXFxuZnMvY2FjaGVmaWxlcy9NYWtlZmlsZS0xNS1cXHR2b2x1bWUubyBcXFxcXFxuZnMvY2FjaGVmaWxlcy9NYWtlZmlsZToxNjpcXHR4YXR0ci5vXFxuZnMvY2FjaGVmaWxlcy9NYWtlZmlsZS0xNy1cXG4tLVxcbmZzL2NlcGgvTWFrZWZpbGU9OD1jZXBoLXkgOj0gc3VwZXIubyBpbm9kZS5vIGRpci5vIGZpbGUubyBsb2Nrcy5vIGFkZHIubyBpb2N0bC5vIFxcXFxcXG5mcy9jZXBoL01ha2VmaWxlOjk6XFx0ZXhwb3J0Lm8gY2Fwcy5vIHNuYXAubyB4YXR0ci5vIHF1b3RhLm8gaW8ubyBcXFxcXFxuZnMvY2VwaC9NYWtlZmlsZS0xMC1cXHRtZHNfY2xpZW50Lm8gbWRzbWFwLm8gc3RyaW5ncy5vIGNlcGhfZnJhZy5vIFxcXFxcXG4tLVxcbmZzL2NlcGgveGF0dHIuYz0xMTA2PXN0YXRpYyBpbnQgY2VwaF9zeW5jX3NldHhhdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsXFxuLS1cXG5mcy9jZXBoL3hhdHRyLmMtMTE1Mi1cXHRcXHRyZXEtXFx1MDAzZXJfYXJncy5zZXR4YXR0ci5mbGFncyA9IGNwdV90b19sZTMyKGZsYWdzKTtcXG5mcy9jZXBoL3hhdHRyLmM6MTE1MzpcXHRcXHRyZXEtXFx1MDAzZXJfYXJncy5zZXR4YXR0ci5vc2RtYXBfZXBvY2ggPVxcbmZzL2NlcGgveGF0dHIuYy0xMTU0LVxcdFxcdFxcdGNwdV90b19sZTMyKG9zZGMtXFx1MDAzZW9zZG1hcC1cXHUwMDNlZXBvY2gpO1xcbi0tXFxuZnMvZXJvZnMvTWFrZWZpbGU9ND1lcm9mcy1vYmpzIDo9IHN1cGVyLm8gaW5vZGUubyBkYXRhLm8gbmFtZWkubyBkaXIubyBzeXNmcy5vXFxuZnMvZXJvZnMvTWFrZWZpbGU6NTplcm9mcy0kKENPTkZJR19FUk9GU19GU19YQVRUUikgKz0geGF0dHIub1xcbmZzL2Vyb2ZzL01ha2VmaWxlLTYtZXJvZnMtJChDT05GSUdfRVJPRlNfRlNfWklQKSArPSBkZWNvbXByZXNzb3IubyB6bWFwLm8gemRhdGEubyB6dXRpbC5vXFxuLS1cXG5mcy9leHQyL01ha2VmaWxlPTEyPUNGTEFHU190cmFjZS5vIDo9IC1JJChzcmMpXFxuZnMvZXh0Mi9NYWtlZmlsZS0xMy1cXG5mcy9leHQyL01ha2VmaWxlOjE0OmV4dDItJChDT05GSUdfRVhUMl9GU19YQVRUUilcXHQgKz0geGF0dHIubyB4YXR0cl91c2VyLm8geGF0dHJfdHJ1c3RlZC5vXFxuZnMvZXh0Mi9NYWtlZmlsZS0xNS1leHQyLSQoQ09ORklHX0VYVDJfRlNfUE9TSVhfQUNMKSArPSBhY2wub1xcbi0tXFxuZnMvZXh0NC9NYWtlZmlsZT04PWV4dDQteVxcdDo9IGJhbGxvYy5vIGJpdG1hcC5vIGJsb2NrX3ZhbGlkaXR5Lm8gZGlyLm8gZXh0NF9qYmQyLm8gZXh0ZW50cy5vIFxcXFxcXG4tLVxcbmZzL2V4dDQvTWFrZWZpbGUtMTEtXFx0XFx0bW1wLm8gbW92ZV9leHRlbnQubyBuYW1laS5vIHBhZ2UtaW8ubyByZWFkcGFnZS5vIHJlc2l6ZS5vIFxcXFxcXG5mcy9leHQ0L01ha2VmaWxlOjEyOlxcdFxcdHN1cGVyLm8gc3ltbGluay5vIHN5c2ZzLm8geGF0dHIubyB4YXR0cl9odXJkLm8geGF0dHJfdHJ1c3RlZC5vIFxcXFxcXG5mcy9leHQ0L01ha2VmaWxlLTEzLVxcdFxcdHhhdHRyX3VzZXIubyBmYXN0X2NvbW1pdC5vIG9ycGhhbi5vXFxuLS1cXG5mcy9mMmZzL01ha2VmaWxlPTc9ZjJmcy0kKENPTkZJR19GMkZTX1NUQVRfRlMpICs9IGRlYnVnLm9cXG5mcy9mMmZzL01ha2VmaWxlOjg6ZjJmcy0kKENPTkZJR19GMkZTX0ZTX1hBVFRSKSArPSB4YXR0ci5vXFxuZnMvZjJmcy9NYWtlZmlsZS05LWYyZnMtJChDT05GSUdfRjJGU19GU19QT1NJWF9BQ0wpICs9IGFjbC5vXFxuLS1cXG5mcy9mdXNlL01ha2VmaWxlPTEzPWZ1c2UteSA6PSB0cmFjZS5vXFx0IyBwdXQgdHJhY2UubyBmaXJzdCBzbyB3ZSBzZWUgZnRyYWNlIGVycm9ycyBzb29uZXJcXG5mcy9mdXNlL01ha2VmaWxlOjE0OmZ1c2UteSArPSBkZXYubyBkaXIubyBmaWxlLm8gaW5vZGUubyBjb250cm9sLm8geGF0dHIubyBhY2wubyByZWFkZGlyLm8gaW9jdGwubyByZXFfdGltZW91dC5vIHJlcS5vXFxuZnMvZnVzZS9NYWtlZmlsZS0xNS1mdXNlLXkgKz0gcG9sbC5vIG5vdGlmeS5vXFxuLS1cXG5mcy9nZnMyL01ha2VmaWxlPTM9b2JqLSQoQ09ORklHX0dGUzJfRlMpICs9IGdmczIub1xcbmZzL2dmczIvTWFrZWZpbGU6NDpnZnMyLXkgOj0gYWNsLm8gYm1hcC5vIGRpci5vIHhhdHRyLm8gZ2xvY2subyBcXFxcXFxuZnMvZ2ZzMi9NYWtlZmlsZS01LVxcdGdsb3BzLm8gbG9nLm8gbG9wcy5vIG1haW4ubyBtZXRhX2lvLm8gXFxcXFxcbi0tXFxuZnMvaGZzcGx1cy9NYWtlZmlsZT04PWhmc3BsdXMtb2JqcyA6PSBzdXBlci5vIG9wdGlvbnMubyBpbm9kZS5vIGlvY3RsLm8gZXh0ZW50cy5vIGNhdGFsb2cubyBkaXIubyBidHJlZS5vIFxcXFxcXG5mcy9oZnNwbHVzL01ha2VmaWxlLTktXFx0XFx0Ym5vZGUubyBicmVjLm8gYmZpbmQubyB0YWJsZXMubyB1bmljb2RlLm8gd3JhcHBlci5vIGJpdG1hcC5vIHBhcnRfdGJsLm8gXFxcXFxcbmZzL2hmc3BsdXMvTWFrZWZpbGU6MTA6XFx0XFx0YXR0cmlidXRlcy5vIHhhdHRyLm8geGF0dHJfdXNlci5vIHhhdHRyX3NlY3VyaXR5Lm8geGF0dHJfdHJ1c3RlZC5vXFxuZnMvaGZzcGx1cy9NYWtlZmlsZS0xMS1cXG4tLVxcbmZzL2pmZnMyL01ha2VmaWxlPTE0PWpmZnMyLSQoQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSKVxcdCs9IHdidWYub1xcbmZzL2pmZnMyL01ha2VmaWxlOjE1OmpmZnMyLSQoQ09ORklHX0pGRlMyX0ZTX1hBVFRSKVxcdFxcdCs9IHhhdHRyLm8geGF0dHJfdHJ1c3RlZC5vIHhhdHRyX3VzZXIub1xcbmZzL2pmZnMyL01ha2VmaWxlLTE2LWpmZnMyLSQoQ09ORklHX0pGRlMyX0ZTX1NFQ1VSSVRZKVxcdCs9IHNlY3VyaXR5Lm9cXG4tLVxcbmZzL2pmcy9NYWtlZmlsZT04PWpmcy15ICAgIDo9IHN1cGVyLm8gZmlsZS5vIGlub2RlLm8gbmFtZWkubyBqZnNfbW91bnQubyBqZnNfdW1vdW50Lm8gXFxcXFxcbi0tXFxuZnMvamZzL01ha2VmaWxlLTEyLVxcdCAgICBqZnNfbG9nbWdyLm8gamZzX3R4bm1nci5vIFxcXFxcXG5mcy9qZnMvTWFrZWZpbGU6MTM6XFx0ICAgIHJlc2l6ZS5vIHhhdHRyLm8gaW9jdGwub1xcbmZzL2pmcy9NYWtlZmlsZS0xNC1cXG4tLVxcbmZzL25mcy9NYWtlZmlsZT0zMz1uZnN2NC0kKENPTkZJR19ORlNfVjRfMClcXHQrPSBuZnM0MGNsaWVudC5vIG5mczQwcHJvYy5vXFxuZnMvbmZzL01ha2VmaWxlOjM0Om5mc3Y0LSQoQ09ORklHX05GU19WNF8yKVxcdCs9IG5mczQycHJvYy5vIG5mczQyeGF0dHIub1xcbmZzL25mcy9NYWtlZmlsZS0zNS1cXG4tLVxcbmZzL250ZnMzL01ha2VmaWxlPTMzPW50ZnMzLXkgOj1cXHRhdHRyaWIubyBcXFxcXFxuLS1cXG5mcy9udGZzMy9NYWtlZmlsZS00OS1cXHRcXHR1cGNhc2UubyBcXFxcXFxuZnMvbnRmczMvTWFrZWZpbGU6NTA6XFx0XFx0eGF0dHIub1xcbmZzL250ZnMzL01ha2VmaWxlLTUxLVxcbi0tXFxuZnMvb2NmczIvTWFrZWZpbGU9MTE9b2NmczItb2JqcyA6PSBcXFxcXFxuLS1cXG5mcy9vY2ZzMi9NYWtlZmlsZS00MS1cXHRxdW90YV9nbG9iYWwub1xcdFxcdFxcXFxcXG5mcy9vY2ZzMi9NYWtlZmlsZTo0MjpcXHR4YXR0ci5vXFx0XFx0XFx0XFxcXFxcbmZzL29jZnMyL01ha2VmaWxlLTQzLVxcdGFjbC5vXFx0XFxcXFxcbi0tXFxuZnMvb3JhbmdlZnMvTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfT1JBTkdFRlNfRlMpICs9IG9yYW5nZWZzLm9cXG5mcy9vcmFuZ2Vmcy9NYWtlZmlsZS03LVxcbmZzL29yYW5nZWZzL01ha2VmaWxlOjg6b3JhbmdlZnMtb2JqcyA6PSBhY2wubyBmaWxlLm8gb3JhbmdlZnMtY2FjaGUubyBvcmFuZ2Vmcy11dGlscy5vIHhhdHRyLm8gXFxcXFxcbmZzL29yYW5nZWZzL01ha2VmaWxlLTktXFx0XFx0IGRjYWNoZS5vIGlub2RlLm8gb3JhbmdlZnMtc3lzZnMubyBvcmFuZ2Vmcy1tb2QubyBzdXBlci5vIFxcXFxcXG4tLVxcbmZzL3NtYi9jbGllbnQvTWFrZWZpbGU9MTk9JChvYmopL2NpZnNfc3BuZWdvX25lZ3Rva2VuaW5pdC5hc24xLm86ICQob2JqKS9jaWZzX3NwbmVnb19uZWd0b2tlbmluaXQuYXNuMS5jICQob2JqKS9jaWZzX3NwbmVnb19uZWd0b2tlbmluaXQuYXNuMS5oXFxuZnMvc21iL2NsaWVudC9NYWtlZmlsZS0yMC1cXG5mcy9zbWIvY2xpZW50L01ha2VmaWxlOjIxOmNpZnMtJChDT05GSUdfQ0lGU19YQVRUUikgKz0geGF0dHIub1xcbmZzL3NtYi9jbGllbnQvTWFrZWZpbGUtMjItXFxuLS1cXG5mcy9zcXVhc2hmcy9NYWtlZmlsZT0xMz1zcXVhc2hmcy0kKENPTkZJR19TUVVBU0hGU19ERUNPTVBfTVVMVElfUEVSQ1BVKSArPSBkZWNvbXByZXNzb3JfbXVsdGlfcGVyY3B1Lm9cXG5mcy9zcXVhc2hmcy9NYWtlZmlsZToxNDpzcXVhc2hmcy0kKENPTkZJR19TUVVBU0hGU19YQVRUUikgKz0geGF0dHIubyB4YXR0cl9pZC5vXFxuZnMvc3F1YXNoZnMvTWFrZWZpbGUtMTUtc3F1YXNoZnMtJChDT05GSUdfU1FVQVNIRlNfTFo0KSArPSBsejRfd3JhcHBlci5vXFxuLS1cXG5mcy91Ymlmcy9NYWtlZmlsZT05PXViaWZzLSQoQ09ORklHX0ZTX0VOQ1JZUFRJT04pICs9IGNyeXB0by5vXFxuZnMvdWJpZnMvTWFrZWZpbGU6MTA6dWJpZnMtJChDT05GSUdfVUJJRlNfRlNfWEFUVFIpICs9IHhhdHRyLm9cXG5mcy91Ymlmcy9NYWtlZmlsZS0xMS11Ymlmcy0kKENPTkZJR19VQklGU19GU19BVVRIRU5USUNBVElPTikgKz0gYXV0aC5vXFxuLS1cXG5mcy94ZnMvTWFrZWZpbGU9NzE9eGZzLXlcXHRcXHRcXHRcXHQrPSB4ZnNfYW9wcy5vIFxcXFxcXG4tLVxcbmZzL3hmcy9NYWtlZmlsZS0xMDktXFx0XFx0XFx0XFx0ICAgeGZzX3ZlcmlmeV9tZWRpYS5vIFxcXFxcXG5mcy94ZnMvTWFrZWZpbGU6MTEwOlxcdFxcdFxcdFxcdCAgIHhmc194YXR0ci5vXFxuZnMveGZzL01ha2VmaWxlLTExMS1cXG4tLVxcbmZzL3hmcy9NYWtlZmlsZT0xNjg9eGZzLXlcXHRcXHRcXHRcXHQrPSAkKGFkZHByZWZpeCBzY3J1Yi8sIFxcXFxcXG4tLVxcbmZzL3hmcy9NYWtlZmlsZS0xODUtXFx0XFx0XFx0XFx0ICAgaXNjYW4ubyBcXFxcXFxuZnMveGZzL01ha2VmaWxlOjE4NjpcXHRcXHRcXHRcXHQgICBsaXN0eGF0dHIubyBcXFxcXFxuZnMveGZzL01ha2VmaWxlLTE4Ny1cXHRcXHRcXHRcXHQgICBtZXRhcGF0aC5vIFxcXFxcXG4tLVxcbmlvX3VyaW5nL01ha2VmaWxlPTk9b2JqLSQoQ09ORklHX0lPX1VSSU5HKVxcdFxcdCs9IGlvX3VyaW5nLm8gb3BkZWYubyBrYnVmLm8gcnNyYy5vIG5vdGlmLm8gXFxcXFxcbi0tXFxuaW9fdXJpbmcvTWFrZWZpbGUtMTEtXFx0XFx0XFx0XFx0XFx0dHcubyB3YWl0Lm8gZXZlbnRmZC5vIHVyaW5nX2NtZC5vIFxcXFxcXG5pb191cmluZy9NYWtlZmlsZToxMjpcXHRcXHRcXHRcXHRcXHRvcGVuY2xvc2UubyBzcXBvbGwubyB4YXR0ci5vIG5vcC5vIFxcXFxcXG5pb191cmluZy9NYWtlZmlsZS0xMy1cXHRcXHRcXHRcXHRcXHRmcy5vIHNwbGljZS5vIHN5bmMubyBtc2dfcmluZy5vIFxcXFxcXG4tLVxcbm5ldC9jZXBoL29zZF9jbGllbnQuYz0zNzE9c3RhdGljIHZvaWQgb3NkX3JlcV9vcF9kYXRhX3JlbGVhc2Uoc3RydWN0IGNlcGhfb3NkX3JlcXVlc3QgKm9zZF9yZXEsXFxuLS1cXG5uZXQvY2VwaC9vc2RfY2xpZW50LmMtMzkzLVxcdGNhc2UgQ0VQSF9PU0RfT1BfQ01QWEFUVFI6XFxubmV0L2NlcGgvb3NkX2NsaWVudC5jOjM5NDpcXHRcXHRjZXBoX29zZF9kYXRhX3JlbGVhc2UoXFx1MDAyNm9wLVxcdTAwM2V4YXR0ci5vc2RfZGF0YSk7XFxubmV0L2NlcGgvb3NkX2NsaWVudC5jLTM5NS1cXHRcXHRicmVhaztcXG4tLVxcbm5ldC9jZXBoL29zZF9jbGllbnQuYz04NDQ9aW50IG9zZF9yZXFfb3BfeGF0dHJfaW5pdChzdHJ1Y3QgY2VwaF9vc2RfcmVxdWVzdCAqb3NkX3JlcSwgdW5zaWduZWQgaW50IHdoaWNoLFxcbi0tXFxubmV0L2NlcGgvb3NkX2NsaWVudC5jLTg3NC1cXG5uZXQvY2VwaC9vc2RfY2xpZW50LmM6ODc1OlxcdGNlcGhfb3NkX2RhdGFfcGFnZWxpc3RfaW5pdChcXHUwMDI2b3AtXFx1MDAzZXhhdHRyLm9zZF9kYXRhLCBwYWdlbGlzdCk7XFxubmV0L2NlcGgvb3NkX2NsaWVudC5jLTg3Ni1cXHRvcC1cXHUwMDNlaW5kYXRhX2xlbiA9IHBheWxvYWRfbGVuO1xcbi0tXFxubmV0L2NlcGgvb3NkX2NsaWVudC5jPTIwNDE9c3RhdGljIHZvaWQgc2V0dXBfcmVxdWVzdF9kYXRhKHN0cnVjdCBjZXBoX29zZF9yZXF1ZXN0ICpyZXEpXFxuLS1cXG5uZXQvY2VwaC9vc2RfY2xpZW50LmMtMjA2NC1cXHRcXHRcXHRjZXBoX29zZGNfbXNnX2RhdGFfYWRkKHJlcXVlc3RfbXNnLFxcbm5ldC9jZXBoL29zZF9jbGllbnQuYzoyMDY1OlxcdFxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2b3AtXFx1MDAzZXhhdHRyLm9zZF9kYXRhKTtcXG5uZXQvY2VwaC9vc2RfY2xpZW50LmMtMjA2Ni1cXHRcXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTY6NTE6MTkuNjE5NjQ3MjU4WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk2NDcwNTg4ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBQbGFuIGZvciBFeHRlbmRlZCBBdHRyaWJ1dGVzIHdpdGggT19QQVRIIGFuZCBBVF9FTVBUWV9QQVRIKipcblxuT2theSwgc28gYGZzL01ha2VmaWxlYCBhbHdheXMgaW5jbHVkZXMgYHhhdHRyLm9gLCBtZWFuaW5nIHRoZSBleHRlbmRlZCBhdHRyaWJ1dGUgY29kZSBpcyBhbHdheXMgY29tcGlsZWQuIFRoYXQncyBnb29kOyBpdCBzaW1wbGlmaWVzIHRoaW5ncy4gVGhlIGBzZXR4YXR0cmF0YCwgYGdldHhhdHRyYXRgLCBgbGlzdHhhdHRyYXRgLCBhbmQgYHJlbW92ZXhhdHRyYXRgIHN5c2NhbGxzIGFyZSBhbHdheXMgYXZhaWxhYmxlLlxuXG5UaGUgY29yZSBvZiB0aGUgY2hhbmdlIGlzIGVuYWJsaW5nIGBPX1BBVEhgIGZpbGUgZGVzY3JpcHRvcnMgd2l0aCBgQVRfRU1QVFlfUEFUSGAgaW4gdGhvc2UgYCp4YXR0cmF0YCBzeXNjYWxscy4gVGhhdCdzIGEgZGVmaW5pdGUgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCByZXF1aXJlcyBmdXp6aW5nLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGZvY3VzIG9uIGBwYXRoX3NldHhhdHRyYXRgLCBgcGF0aF9nZXR4YXR0cmF0YCwgYHBhdGhfbGlzdHhhdHRyYXRgLCBhbmQgYHBhdGhfcmVtb3ZleGF0dHJhdGAsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZG9uJ3QgbWlzcyBhbnl0aGluZy4gV2FpdCwgdGhlICphY3R1YWwqIHN5c2NhbGxzLCBmcm9tIHRoZSB1c2VyJ3MgcGVyc3BlY3RpdmUsIGFyZSBgc2V0eGF0dHJhdGAsIGBnZXR4YXR0cmF0YCwgYGxpc3R4YXR0cmF0YCwgYHJlbW92ZXhhdHRyYXRgLiBJIG5lZWQgdG8gY292ZXIgYm90aC4gTm8sIGxldCdzIHN0aWNrIHdpdGggdGhlIGZ1bmN0aW9ucyBiZWNhdXNlIHRob3NlIGZ1bmN0aW9ucyBhcmUgdGhlIG9uZXMgdGhhdCBhY3R1YWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGFuZCB0YWtlIHRoZSByYXcgcGFyYW1ldGVyIGFuZCBzbyBJIHRoaW5rIHRob3NlIGFyZSB0aGUgYmVzdCBmb2N1cyBzeW1ib2xzLlxuXG5Ob3csIHdoaWxlIHRoaW5raW5nIGFib3V0IHRoaXMsIEkgcmVhbGl6ZSBpdCdzIHdvcnRoIGNvdmVyaW5nIHRoZSBzeXNjYWxsIHdyYXBwZXJzIHRvbzogYHN5c19zZXR4YXR0cmF0YCwgYHN5c19nZXR4YXR0cmF0YCwgYHN5c19saXN0eGF0dHJhdGAsIGBzeXNfcmVtb3ZleGF0dHJhdGAuIEFoIHJpZ2h0LCBgU1lTQ0FMTF9ERUZJTkU2YCBnZW5lcmF0ZXMgdGhlIGFjdHVhbCBzeXNjYWxsIGZ1bmN0aW9ucy4gQmV0dGVyIHRvIGZvY3VzIG9uIHRoZSBgcGF0aF8qYCBmdW5jdGlvbnMuXG5cblNpbmNlIHRoZSB4YXR0ciBjb2RlIGlzIGFsd2F5cyBjb21waWxlZCwgSSBkb24ndCBuZWVkIGFueSBzcGVjaWFsIGNvbmZpZ3VyYXRpb25zIHRvIGVuYWJsZSBpdC4gQnV0LCB0byB0ZXN0IHRoaXMgbmV3IGZ1bmN0aW9uYWxpdHksIEknbGwgbmVlZCBhIGZpbGVzeXN0ZW0gdGhhdCBzdXBwb3J0cyB4YXR0cnMuIGBFWFQ0X0ZTX1hBVFRSYCBvciBgVE1QRlNfWEFUVFJgIHdvdWxkIGJlIGdvb2QgY2hvaWNlcy4gQ29uc2lkZXJpbmcgc3l6a2FsbGVyLCBgVE1QRlNfWEFUVFJgIGlzIHR5cGljYWxseSBlbmFibGVkLCB3aGljaCBtZWFucyBpdCB3aWxsIGJlIGVhc2lseSBhY2Nlc3NpYmxlLiBZZXMsIEknbGwgYWRkIGBUTVBGU19YQVRUUmAgYW5kIGBFWFQ0X0ZTX1hBVFRSYCB0byBgRW5hYmxlQ29uZmlnc2AganVzdCB0byBiZSBjZXJ0YWluLlxuXG5MZXQgbWUgcmVmcmVzaCBteSBtZW1vcnkgb24gYGZkX21heWJlX3Jhd2AuIEl0J3MgYSBtYWNybzogYERFRklORV9DTEFTUyhmZF9tYXliZV9yYXcsIHN0cnVjdCBmZCwgZmRwdXQoX1QpLCByYXcgPyBmZGdldF9yYXcoZmQpIDogZmRnZXQoZmQpLCBpbnQgZmQsIGJvb2wgcmF3KWAuIEl0J3MgdXNlZCBpbiBgZnMveGF0dHIuY2AsIHNvIEknbGwgZG91YmxlIGNoZWNrIGhvdyBpdCdzIHVzZWQuIEp1c3QgaW4gY2FzZSwgSSdsbCBgZ3JlcGAgZm9yIG90aGVyIG9jY3VycmVuY2VzIG9mIGBmZF9tYXliZV9yYXdgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODMwOCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxNjo1MToyOS4yNjY3MDg2ODFaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NjA2ODkyNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmRfbWF5YmVfcmF3XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3hhdHRyLmM9NzAxPXN0YXRpYyBpbnQgcGF0aF9zZXR4YXR0cmF0KGludCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICpwYXRobmFtZSxcXG4tLVxcbmZzL3hhdHRyLmMtNzI4LVxcdGlmICghZmlsZW5hbWUgXFx1MDAyNlxcdTAwMjYgZGZkIFxcdTAwM2U9IDApIHtcXG5mcy94YXR0ci5jOjcyOTpcXHRcXHRDTEFTUyhmZF9tYXliZV9yYXcsIGYpKGRmZCwgcmF3KTtcXG5mcy94YXR0ci5jLTczMC1cXHRcXHRpZiAoZmRfZW1wdHkoZikpXFxuLS1cXG5mcy94YXR0ci5jPTg0OD1zdGF0aWMgc3NpemVfdCBwYXRoX2dldHhhdHRyYXQoaW50IGRmZCwgY29uc3QgY2hhciBfX3VzZXIgKnBhdGhuYW1lLFxcbi0tXFxuZnMveGF0dHIuYy04NjktXFx0aWYgKCFmaWxlbmFtZSBcXHUwMDI2XFx1MDAyNiBkZmQgXFx1MDAzZT0gMCkge1xcbmZzL3hhdHRyLmM6ODcwOlxcdFxcdENMQVNTKGZkX21heWJlX3JhdywgZikoZGZkLCByYXcpO1xcbmZzL3hhdHRyLmMtODcxLVxcdFxcdGlmIChmZF9lbXB0eShmKSlcXG4tLVxcbmZzL3hhdHRyLmM9OTg3PXN0YXRpYyBzc2l6ZV90IHBhdGhfbGlzdHhhdHRyYXQoaW50IGRmZCwgY29uc3QgY2hhciBfX3VzZXIgKnBhdGhuYW1lLFxcbi0tXFxuZnMveGF0dHIuYy05OTctXFx0aWYgKCFmaWxlbmFtZSkge1xcbmZzL3hhdHRyLmM6OTk4OlxcdFxcdENMQVNTKGZkX21heWJlX3JhdywgZikoZGZkLCByYXcpO1xcbmZzL3hhdHRyLmMtOTk5LVxcdFxcdGlmIChmZF9lbXB0eShmKSlcXG4tLVxcbmZzL3hhdHRyLmM9MTA4MD1zdGF0aWMgaW50IHBhdGhfcmVtb3ZleGF0dHJhdChpbnQgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqcGF0aG5hbWUsXFxuLS1cXG5mcy94YXR0ci5jLTEwOTYtXFx0aWYgKCFmaWxlbmFtZSkge1xcbmZzL3hhdHRyLmM6MTA5NzpcXHRcXHRDTEFTUyhmZF9tYXliZV9yYXcsIGYpKGRmZCwgcmF3KTtcXG5mcy94YXR0ci5jLTEwOTgtXFx0XFx0aWYgKGZkX2VtcHR5KGYpKVxcbi0tXFxuaW5jbHVkZS9saW51eC9maWxlLmg9ODQ9REVGSU5FX0NMQVNTKGZkX3Jhdywgc3RydWN0IGZkLCBmZHB1dChfVCksIGZkZ2V0X3JhdyhmZCksIGludCBmZClcXG5pbmNsdWRlL2xpbnV4L2ZpbGUuaDo4NTpERUZJTkVfQ0xBU1MoZmRfbWF5YmVfcmF3LCBzdHJ1Y3QgZmQsIGZkcHV0KF9UKSxcXG5pbmNsdWRlL2xpbnV4L2ZpbGUuaC04Ni1cXHQgICAgIHJhdyA/IGZkZ2V0X3JhdyhmZCkgOiBmZGdldChmZCksIGludCBmZCwgYm9vbCByYXcpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE2OjUxOjMwLjgyNzQwNDg2MVoiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5ODczNjg1ODM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBFeHRlbmRlZCBBdHRyaWJ1dGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgYGZzL3hhdHRyLmNgLiBUaGF0IG5hcnJvd3MgdGhlIHNjb3BlIGNvbnNpZGVyYWJseSwgd2hpY2ggaXMgaGVscGZ1bC4gVGhlIGNvcmUgb2YgdGhpcyBjaGFuZ2Ugc2VlbXMgdG8gYmUgYXJvdW5kIGVuYWJsaW5nIGAqeGF0dHJhdGAgc3lzY2FsbHMgdG8gd29yayBjb3JyZWN0bHkgd2l0aCBgT19QQVRIYCBmaWxlIGRlc2NyaXB0b3JzLCBwYXJ0aWN1bGFybHkgd2hlbiB1c2luZyBgQVRfRU1QVFlfUEFUSGAuIFRoYXQncyB3aGVyZSB0aGUgbmV3IGBmZF9tYXliZV9yYXdgIGNsYXNzIGNvbWVzIGluLCB1c2luZyBgZmRnZXRfcmF3YCBpbnN0ZWFkIG9mIHRoZSB1c3VhbCBgZmRnZXRgLiBGdW5jdGlvbmFsbHksIHRoaXMgbW9kaWZpZXMgdGhlIGJlaGF2aW9yIG9mIHNldmVyYWwga2V5IHN5c2NhbGxzOiBgcGF0aF9zZXR4YXR0cmF0YCwgYHBhdGhfZ2V0eGF0dHJhdGAsIGBwYXRoX2xpc3R4YXR0cmF0YCwgYW5kIGBwYXRoX3JlbW92ZXhhdHRyYXRgLiBJdCBicmluZ3MgdGhlbSBpbiBsaW5lIHdpdGggdGhlIGJlaGF2aW9yIG9mIG90aGVyIGAqYXRgIGNhbGxzIGxpa2UgYGZjaG93bmF0YCBhbmQgYGZzdGF0YXRgLiBUaGlzIGNvbnNpc3RlbmN5IGlzIGdvb2QgZnJvbSBhIGRlc2lnbiBwZXJzcGVjdGl2ZS5cblxuTXkgcHJpbWFyeSBjb25jZXJuLCB0aG91Z2gsIGlzIGVuc3VyaW5nIG5vIHJlZ3Jlc3Npb25zIG9yIHVuZXhwZWN0ZWQgc2lkZSBlZmZlY3RzLiBXZSBuZWVkIHRvIHJpZ29yb3VzbHkgZnV6eiB0aGVzZSBtb2RpZmllZCBzeXNjYWxscywgZXNwZWNpYWxseSBpbiBjb25qdW5jdGlvbiB3aXRoIGBPX1BBVEhgIGFuZCBleHRlbmRlZCBhdHRyaWJ1dGVzLiBJJ2xsIG1ha2Ugc3VyZSB0aGUgZnV6emVyIGNvdmVycyB0aGlzIGV4dGVuc2l2ZWx5LiBJJ2xsIG5lZWQgdG8gc2V0IHVwIHRoZSBmdXp6aW5nIHdpdGggdGhlIGNvbmZpZ3VyYXRpb25zIGBUTVBGU19YQVRUUmAgYW5kIGBFWFQ0X0ZTX1hBVFRSYCBlbmFibGVkIHRvIHRlc3QgaXQgdGhvcm91Z2hseSBhY3Jvc3MgZGlmZmVyZW50IGZpbGVzeXN0ZW1zLiBJIHdpbGwgYWxzbyBoYXZlIHRvIGxvb2sgZm9yIHNldC1yZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDEzNywiT3V0cHV0VG9rZW5zIjoyNTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTY6NTE6NDAuNzAxMDkzNzg4WiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzA0MTc2NTgsIkVycm9yIjoidGhlIGZvbGxvd2luZyBjb25maWdzIGRvIG5vdCBleGlzdCBpbiB0aGUga2VybmVsIHRyZWU6IEVYVDRfRlNfWEFUVFIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVE1QRlNfWEFUVFJcIixcbiAgICBcIkVYVDRfRlNfWEFUVFJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwYXRoX3NldHhhdHRyYXRcIixcbiAgICBcInBhdGhfZ2V0eGF0dHJhdFwiLFxuICAgIFwicGF0aF9saXN0eGF0dHJhdFwiLFxuICAgIFwicGF0aF9yZW1vdmV4YXR0cmF0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGAqeGF0dHJhdGAgc3lzY2FsbHMgKGUuZy4sIGBzZXR4YXR0cmF0YCwgYGdldHhhdHRyYXRgLCBgbGlzdHhhdHRyYXRgLCBgcmVtb3ZleGF0dHJhdGApIHRvIGFsbG93IG9wZXJhdGluZyBvbiBgT19QQVRIYCBmaWxlIGRlc2NyaXB0b3JzIHdoZW4gYEFUX0VNUFRZX1BBVEhgIGlzIHVzZWQuIFRoaXMgaXMgYWNoaWV2ZWQgYnkgaW50cm9kdWNpbmcgYSBuZXcgYGZkX21heWJlX3Jhd2AgY2xhc3MgdGhhdCB1c2VzIGBmZGdldF9yYXdgIGluc3RlYWQgb2YgYGZkZ2V0YCB3aGVuIHRoZSBgcmF3YCBwYXJhbWV0ZXIgaXMgdHJ1ZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWx0ZXJzIHRoZSBiZWhhdmlvciBvZiB0aGVzZSBzeXNjYWxscywgbWFraW5nIHRoZW0gY29uc2lzdGVudCB3aXRoIG90aGVyIGAqYXRgIHN5c2NhbGxzIGxpa2UgYGZjaG93bmF0YCBhbmQgYGZzdGF0YXRgLiBJdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gcmVncmVzc2lvbnMgb3IgdW5leHBlY3RlZCBiZWhhdmlvcnMgd2hlbiB1c2luZyBgT19QQVRIYCBmaWxlIGRlc2NyaXB0b3JzIHdpdGggZXh0ZW5kZWQgYXR0cmlidXRlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJ0aGUgZm9sbG93aW5nIGNvbmZpZ3MgZG8gbm90IGV4aXN0IGluIHRoZSBrZXJuZWwgdHJlZTogRVhUNF9GU19YQVRUUlwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxNjo1MTo0MC43NzE1MjAzNjZaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzM2MTMwOTg4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGVidWdnaW5nIGFuIEVYVDQgRXh0ZW5kZWQgQXR0cmlidXRlIElzc3VlKipcblxuQWxyaWdodCwgc28gYEVYVDRfRlNfWEFUVFJgIHNlZW1zIHRvIGJlIHVuZGVmaW5lZC4uLiBhIGJpdCBvZGQuIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMsIGlzIHRvIGRpdmUgaW50byB0aGUgS2NvbmZpZy4gSSBrbm93IGl0J3MgKmdvdCogdG8gYmUgY29udHJvbGxlZCBieSBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHNvbWV3aGVyZS4gUHJvYmFibHkgYSBmYWlybHkgc3RyYWlnaHRmb3J3YXJkIG9uZSwgYnV0IHRoZSBLY29uZmlnIGlzIHRoZSBzb3VyY2Ugb2YgdHJ1dGggZm9yIHRoZXNlIHRoaW5ncy4gTGV0IG1lIHB1bGwgdXAgYGZzL2V4dDQvS2NvbmZpZ2AgYW5kIGRvdWJsZS1jaGVjayBpdHMgZGVmaW5pdGlvbiBhbmQgZGVwZW5kZW5jaWVzLiBJdCdzIGFsbW9zdCBjZXJ0YWlubHkgY29uZGl0aW9uYWwgb24gc29tZXRoaW5nLCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0aGF0IHRyaWdnZXIgaXMgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIuIEdvdHRhIG1ha2Ugc3VyZSB0aGUgZmVhdHVyZSdzIGVuYWJsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwOTcwLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJzZXQtcmVzdWx0cyJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE2OjUxOjQ4LjEzMjgzNjY0OFoiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY4MjA1Mjc2NywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEVYVDRfRlNfWEFUVFJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE2OjUxOjQ5LjgxNDg5Njg0NVoiLCJTZXEiOjUxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTg3NzU0NDM1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLCBJIG5lZWQgdG8gZ2V0IHRoaXMgc3RyYWlnaHQgaW4gbXkgaGVhZC5cblxuKipFeHQ0IFhhdHRyIE1vZHVsZSBJbnF1aXJ5KipcblxuSG1tLCBJIHNlZW0gdG8gcmVjYWxsIGNhdGNoaW5nIGEgbGluZSBpbiBgRG9jdW1lbnRhdGlvbi9rYnVpbGQvbWFrZWZpbGVzLnJzdGAgdGhhdCBsb29rZWQgc29tZXRoaW5nIGxpa2UgYGV4dDQtJChDT05GSUdfRVhUNF9GU19YQVRUUikgKz0geGF0dHIub2AuIEJ1dCB0aGF0IGNvdWxkIGhhdmUganVzdCBiZWVuIGFuIGV4YW1wbGUgc25pcHBldC4gSSBuZWVkIHRvIGJlIHN1cmUuIEl0J3MgYmVzdCB0byBjaGVjayB0aGUgYWN0dWFsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gTGV0J3MgZGlnIGludG8gYGZzL2V4dDQvS2NvbmZpZ2AgdG8gY29uZmlybSBpZiB0aGF0J3MgdGhlIGNvcnJlY3QgcmVmZXJlbmNlIGZvciB0aGUgZVh0ZW5lZCBBdHRyaWJ1dGVzIGluIHRoZSBFeHQ0IGZpbGVzeXN0ZW0uIEkgbmVlZCB0aGUgZGVmaW5pdGl2ZSBhbnN3ZXIgYmVmb3JlIHByb2NlZWRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxMTkyLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTY6NTI6MjUuNjkyNDQzNTE2WiIsIlNlcSI6NTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzYyNzU1NDI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBFWFQ0X0ZTXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL2V4dDQvS2NvbmZpZzoyOmNvbmZpZyBFWFQ0X0ZTXFxuZnMvZXh0NC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlRoZSBFeHRlbmRlZCA0IChleHQ0KSBmaWxlc3lzdGVtXFxcIlxcbi0tXFxuZnMvZXh0NC9LY29uZmlnPTM1PWNvbmZpZyBFWFQ0X1VTRV9GT1JfRVhUMlxcbi0tXFxuZnMvZXh0NC9LY29uZmlnLTQ1LVxcbmZzL2V4dDQvS2NvbmZpZzo0Njpjb25maWcgRVhUNF9GU19QT1NJWF9BQ0xcXG5mcy9leHQ0L0tjb25maWctNDctXFx0Ym9vbCBcXFwiRXh0NCBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1xcXCJcXG4tLVxcbmZzL2V4dDQvS2NvbmZpZy01NS1cXG5mcy9leHQ0L0tjb25maWc6NTY6Y29uZmlnIEVYVDRfRlNfU0VDVVJJVFlcXG5mcy9leHQ0L0tjb25maWctNTctXFx0Ym9vbCBcXFwiRXh0NCBTZWN1cml0eSBMYWJlbHNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE2OjUyOjI3LjQ1NTIwNTFaIiwiU2VxIjo1MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkyNDY3OTA2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgRmlsZSBTeXN0ZW0gTWV0YWRhdGEqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBpbnRvIGhvdyBleHRlbmRlZCBhdHRyaWJ1dGVzICh4YXR0cnMpIGFyZSBoYW5kbGVkIHdpdGhpbiBmaWxlIHN5c3RlbXMsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBleHQ0LiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgYEVYVDRfRlNfWEFUVFJgIG1pZ2h0IGJlIGEgY29uZmlndXJhdGlvbiBvcHRpb24gSSBuZWVkZWQgdG8gY2hlY2suIEJ1dCB3YWl0LCB0aGF0J3Mgbm90IHJpZ2h0LiBJIHJlbWVtYmVyIG5vdzsgeGF0dHJzIGFyZSAqYWx3YXlzKiBlbmFibGVkIGluIGV4dDQuIEl0J3MgYSBmdW5kYW1lbnRhbCBwYXJ0IG9mIHRoZSBkZXNpZ24sIHNvIHRoZXJlJ3Mgbm8gY29tcGlsZS10aW1lIHN3aXRjaCBmb3IgaXQuIFRoYXQgZWxpbWluYXRlcyBhIHBvdGVudGlhbCBhcmVhIG9mIGludmVzdGlnYXRpb24uIE5vdywgYSBkaWZmZXJlbnQgYW5nbGUuIExldCdzIHNoaWZ0IG91ciBmb2N1cyB0byBgVE1QRlNfWEFUVFJgLiBQZXJoYXBzIHRoZSBoYW5kbGluZyBvZiB4YXR0cnMgaW4gYSB0bXBmcyBlbnZpcm9ubWVudCBvZmZlcnMgYSBtb3JlIHJlbGV2YW50IHBvaW50IG9mIGlucXVpcnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxNjI3LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTY6NTI6MzAuMzc5ODg2NDQ2WiIsIlNlcSI6NTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjI0NzQ1NjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBUTVBGU19YQVRUUlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9LY29uZmlnPTE4MT1jb25maWcgVE1QRlNfUE9TSVhfQUNMXFxuLS1cXG5mcy9LY29uZmlnLTE5OC1cXG5mcy9LY29uZmlnOjE5OTpjb25maWcgVE1QRlNfWEFUVFJcXG5mcy9LY29uZmlnLTIwMC1cXHRib29sIFxcXCJUbXBmcyBleHRlbmRlZCBhdHRyaWJ1dGVzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxNjo1MjozMi4wMDQ2Mzk4NjRaIiwiU2VxIjo1NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgwNjUzMTY5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipVdGlsaXppbmcgVE1QRlNfWEFUVFIqKlxuXG5SaWdodCwgKlRNUEZTX1hBVFRSKiBkb2VzIGluZGVlZCBleGlzdC4gTm8gbmVlZCB0byBvdmVyY29tcGxpY2F0ZSB0aGluZ3M7IHRoYXQncyB0aGUgY2xlYW5lc3QgYW5kIG1vc3QgZGlyZWN0IGFwcHJvYWNoIGhlcmUuIEknbGwganVzdCBsZXZlcmFnZSAqVE1QRlNfWEFUVFIqLiBTaW1wbGljaXR5IGFuZCBlZmZpY2llbmN5LiBEb25lLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTkxMiwiT3V0cHV0VG9rZW5zIjoyNDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxNjo1MjozNS44MTExNzQxMjdaIiwiU2VxIjo1NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjUwMDE5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVE1QRlNfWEFUVFJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwYXRoX3NldHhhdHRyYXRcIixcbiAgICBcInBhdGhfZ2V0eGF0dHJhdFwiLFxuICAgIFwicGF0aF9saXN0eGF0dHJhdFwiLFxuICAgIFwicGF0aF9yZW1vdmV4YXR0cmF0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGAqeGF0dHJhdGAgc3lzY2FsbHMgKGUuZy4sIGBzZXR4YXR0cmF0YCwgYGdldHhhdHRyYXRgLCBgbGlzdHhhdHRyYXRgLCBgcmVtb3ZleGF0dHJhdGApIHRvIGFsbG93IG9wZXJhdGluZyBvbiBgT19QQVRIYCBmaWxlIGRlc2NyaXB0b3JzIHdoZW4gYEFUX0VNUFRZX1BBVEhgIGlzIHVzZWQuIFRoaXMgaXMgYWNoaWV2ZWQgYnkgaW50cm9kdWNpbmcgYSBuZXcgYGZkX21heWJlX3Jhd2AgY2xhc3MgdGhhdCB1c2VzIGBmZGdldF9yYXdgIGluc3RlYWQgb2YgYGZkZ2V0YCB3aGVuIHRoZSBgcmF3YCBwYXJhbWV0ZXIgaXMgdHJ1ZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWx0ZXJzIHRoZSBiZWhhdmlvciBvZiB0aGVzZSBzeXNjYWxscywgbWFraW5nIHRoZW0gY29uc2lzdGVudCB3aXRoIG90aGVyIGAqYXRgIHN5c2NhbGxzIGxpa2UgYGZjaG93bmF0YCBhbmQgYGZzdGF0YXRgLiBJdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gcmVncmVzc2lvbnMgb3IgdW5leHBlY3RlZCBiZWhhdmlvcnMgd2hlbiB1c2luZyBgT19QQVRIYCBmaWxlIGRlc2NyaXB0b3JzIHdpdGggZXh0ZW5kZWQgYXR0cmlidXRlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUTVBGU19YQVRUUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBhdGhfc2V0eGF0dHJhdFwiLFxuICAgIFwicGF0aF9nZXR4YXR0cmF0XCIsXG4gICAgXCJwYXRoX2xpc3R4YXR0cmF0XCIsXG4gICAgXCJwYXRoX3JlbW92ZXhhdHRyYXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYCp4YXR0cmF0YCBzeXNjYWxscyAoZS5nLiwgYHNldHhhdHRyYXRgLCBgZ2V0eGF0dHJhdGAsIGBsaXN0eGF0dHJhdGAsIGByZW1vdmV4YXR0cmF0YCkgdG8gYWxsb3cgb3BlcmF0aW5nIG9uIGBPX1BBVEhgIGZpbGUgZGVzY3JpcHRvcnMgd2hlbiBgQVRfRU1QVFlfUEFUSGAgaXMgdXNlZC4gVGhpcyBpcyBhY2hpZXZlZCBieSBpbnRyb2R1Y2luZyBhIG5ldyBgZmRfbWF5YmVfcmF3YCBjbGFzcyB0aGF0IHVzZXMgYGZkZ2V0X3Jhd2AgaW5zdGVhZCBvZiBgZmRnZXRgIHdoZW4gdGhlIGByYXdgIHBhcmFtZXRlciBpcyB0cnVlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhbHRlcnMgdGhlIGJlaGF2aW9yIG9mIHRoZXNlIHN5c2NhbGxzLCBtYWtpbmcgdGhlbSBjb25zaXN0ZW50IHdpdGggb3RoZXIgYCphdGAgc3lzY2FsbHMgbGlrZSBgZmNob3duYXRgIGFuZCBgZnN0YXRhdGAuIEl0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyByZWdyZXNzaW9ucyBvciB1bmV4cGVjdGVkIGJlaGF2aW9ycyB3aGVuIHVzaW5nIGBPX1BBVEhgIGZpbGUgZGVzY3JpcHRvcnMgd2l0aCBleHRlbmRlZCBhdHRyaWJ1dGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowzq2xz[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-23 16:32:42 +0000 UTC FinishedAt: 2026-07-23 16:52:37 +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": "ce76d9d4f5f36501013bd94bb65dd067f04b2913", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TMPFS_XATTR" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "ce76d9d4f5f36501013bd94bb65dd067f04b2913", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TMPFS_XATTR" ], "series_id": "d59239c6-2bdd-44cf-ae6c-8e6298839fbf" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "path_setxattrat", "path_getxattrat", "path_listxattrat", "path_removexattrat" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE2OjQ5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RNUEZTX1hBVFRSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGF0aF9zZXR4YXR0cmF0JiMzNDssCiAgICAmIzM0O3BhdGhfZ2V0eGF0dHJhdCYjMzQ7LAogICAgJiMzNDtwYXRoX2xpc3R4YXR0cmF0JiMzNDssCiAgICAmIzM0O3BhdGhfcmVtb3ZleGF0dHJhdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgYCp4YXR0cmF0YCBzeXNjYWxscyAoZS5nLiwgYHNldHhhdHRyYXRgLCBgZ2V0eGF0dHJhdGAsIGBsaXN0eGF0dHJhdGAsIGByZW1vdmV4YXR0cmF0YCkgdG8gYWxsb3cgb3BlcmF0aW5nIG9uIGBPX1BBVEhgIGZpbGUgZGVzY3JpcHRvcnMgd2hlbiBgQVRfRU1QVFlfUEFUSGAgaXMgdXNlZC4gVGhpcyBpcyBhY2hpZXZlZCBieSBpbnRyb2R1Y2luZyBhIG5ldyBgZmRfbWF5YmVfcmF3YCBjbGFzcyB0aGF0IHVzZXMgYGZkZ2V0X3Jhd2AgaW5zdGVhZCBvZiBgZmRnZXRgIHdoZW4gdGhlIGByYXdgIHBhcmFtZXRlciBpcyB0cnVlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhbHRlcnMgdGhlIGJlaGF2aW9yIG9mIHRoZXNlIHN5c2NhbGxzLCBtYWtpbmcgdGhlbSBjb25zaXN0ZW50IHdpdGggb3RoZXIgYCphdGAgc3lzY2FsbHMgbGlrZSBgZmNob3duYXRgIGFuZCBgZnN0YXRhdGAuIEl0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyByZWdyZXNzaW9ucyBvciB1bmV4cGVjdGVkIGJlaGF2aW9ycyB3aGVuIHVzaW5nIGBPX1BBVEhgIGZpbGUgZGVzY3JpcHRvcnMgd2l0aCBleHRlbmRlZCBhdHRyaWJ1dGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE2OjQ5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYjA3YzEyZDlkZjNhZWYyOTdmY2VkZmYxMTZkN2I4MmExM2U4NGZjM1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDIzIDE2OjQ5OjA0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL3hhdHRyLmMgYi9mcy94YXR0ci5jXG5pbmRleCBkNTg5NzkxMTUyMDA3NS4uMWRiNjU5NmEyZWMxMTAgMTAwNjQ0XG4tLS0gYS9mcy94YXR0ci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy94YXR0ci5jXG5AQCAtNzAwLDcgJiM0Mzs3MDAsOCBAQCBpbnQgZmlsZW5hbWVfc2V0eGF0dHIoaW50IGRmZCwgc3RydWN0IGZpbGVuYW1lICpmaWxlbmFtZSxcbiBcbiBzdGF0aWMgaW50IHBhdGhfc2V0eGF0dHJhdChpbnQgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqcGF0aG5hbWUsXG4gXHRcdFx0ICAgdW5zaWduZWQgaW50IGF0X2ZsYWdzLCBjb25zdCBjaGFyIF9fdXNlciAqbmFtZSxcbi1cdFx0XHQgICBjb25zdCB2b2lkIF9fdXNlciAqdmFsdWUsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpXG4mIzQzO1x0XHRcdCAgIGNvbnN0IHZvaWQgX191c2VyICp2YWx1ZSwgc2l6ZV90IHNpemUsIGludCBmbGFncyxcbiYjNDM7XHRcdFx0ICAgYm9vbCByYXcpXG4ge1xuIFx0c3RydWN0IHhhdHRyX25hbWUga25hbWU7XG4gXHRzdHJ1Y3Qga2VybmVsX3hhdHRyX2N0eCBjdHggPSB7XG5AQCAtNzI1LDcgJiM0Mzs3MjYsNyBAQCBzdGF0aWMgaW50IHBhdGhfc2V0eGF0dHJhdChpbnQgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqcGF0aG5hbWUsXG4gXG4gXHRDTEFTUyhmaWxlbmFtZV9tYXliZV9udWxsLCBmaWxlbmFtZSkocGF0aG5hbWUsIGF0X2ZsYWdzKTtcbiBcdGlmICghZmlsZW5hbWUgXHUwMDI2XHUwMDI2IGRmZCBcdTAwM2U9IDApIHtcbi1cdFx0Q0xBU1MoZmQsIGYpKGRmZCk7XG4mIzQzO1x0XHRDTEFTUyhmZF9tYXliZV9yYXcsIGYpKGRmZCwgcmF3KTtcbiBcdFx0aWYgKGZkX2VtcHR5KGYpKVxuIFx0XHRcdGVycm9yID0gLUVCQURGO1xuIFx0XHRlbHNlXG5AQCAtNzU4LDE0ICYjNDM7NzU5LDE1IEBAIFNZU0NBTExfREVGSU5FNihzZXR4YXR0cmF0LCBpbnQsIGRmZCwgY29uc3QgY2hhciBfX3VzZXIgKiwgcGF0aG5hbWUsIHVuc2lnbmVkIGluXG4gXG4gXHRyZXR1cm4gcGF0aF9zZXR4YXR0cmF0KGRmZCwgcGF0aG5hbWUsIGF0X2ZsYWdzLCBuYW1lLFxuIFx0XHRcdCAgICAgICB1NjRfdG9fdXNlcl9wdHIoYXJncy52YWx1ZSksIGFyZ3Muc2l6ZSxcbi1cdFx0XHQgICAgICAgYXJncy5mbGFncyk7XG4mIzQzO1x0XHRcdCAgICAgICBhcmdzLmZsYWdzLCB0cnVlKTtcbiB9XG4gXG4gU1lTQ0FMTF9ERUZJTkU1KHNldHhhdHRyLCBjb25zdCBjaGFyIF9fdXNlciAqLCBwYXRobmFtZSxcbiBcdFx0Y29uc3QgY2hhciBfX3VzZXIgKiwgbmFtZSwgY29uc3Qgdm9pZCBfX3VzZXIgKiwgdmFsdWUsXG4gXHRcdHNpemVfdCwgc2l6ZSwgaW50LCBmbGFncylcbiB7XG4tXHRyZXR1cm4gcGF0aF9zZXR4YXR0cmF0KEFUX0ZEQ1dELCBwYXRobmFtZSwgMCwgbmFtZSwgdmFsdWUsIHNpemUsIGZsYWdzKTtcbiYjNDM7XHRyZXR1cm4gcGF0aF9zZXR4YXR0cmF0KEFUX0ZEQ1dELCBwYXRobmFtZSwgMCwgbmFtZSwgdmFsdWUsIHNpemUsIGZsYWdzLFxuJiM0MztcdFx0XHQgICAgICAgZmFsc2UpO1xuIH1cbiBcbiBTWVNDQUxMX0RFRklORTUobHNldHhhdHRyLCBjb25zdCBjaGFyIF9fdXNlciAqLCBwYXRobmFtZSxcbkBAIC03NzMsMTQgJiM0Mzs3NzUsMTQgQEAgU1lTQ0FMTF9ERUZJTkU1KGxzZXR4YXR0ciwgY29uc3QgY2hhciBfX3VzZXIgKiwgcGF0aG5hbWUsXG4gXHRcdHNpemVfdCwgc2l6ZSwgaW50LCBmbGFncylcbiB7XG4gXHRyZXR1cm4gcGF0aF9zZXR4YXR0cmF0KEFUX0ZEQ1dELCBwYXRobmFtZSwgQVRfU1lNTElOS19OT0ZPTExPVywgbmFtZSxcbi1cdFx0XHQgICAgICAgdmFsdWUsIHNpemUsIGZsYWdzKTtcbiYjNDM7XHRcdFx0ICAgICAgIHZhbHVlLCBzaXplLCBmbGFncywgZmFsc2UpO1xuIH1cbiBcbiBTWVNDQUxMX0RFRklORTUoZnNldHhhdHRyLCBpbnQsIGZkLCBjb25zdCBjaGFyIF9fdXNlciAqLCBuYW1lLFxuIFx0XHRjb25zdCB2b2lkIF9fdXNlciAqLHZhbHVlLCBzaXplX3QsIHNpemUsIGludCwgZmxhZ3MpXG4ge1xuIFx0cmV0dXJuIHBhdGhfc2V0eGF0dHJhdChmZCwgTlVMTCwgQVRfRU1QVFlfUEFUSCwgbmFtZSxcbi1cdFx0XHQgICAgICAgdmFsdWUsIHNpemUsIGZsYWdzKTtcbiYjNDM7XHRcdFx0ICAgICAgIHZhbHVlLCBzaXplLCBmbGFncywgZmFsc2UpO1xuIH1cbiBcbiAvKlxuQEAgLTg0NSw3ICYjNDM7ODQ3LDcgQEAgc3NpemVfdCBmaWxlbmFtZV9nZXR4YXR0cihpbnQgZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKmZpbGVuYW1lLFxuIFxuIHN0YXRpYyBzc2l6ZV90IHBhdGhfZ2V0eGF0dHJhdChpbnQgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqcGF0aG5hbWUsXG4gXHRcdFx0ICAgICAgIHVuc2lnbmVkIGludCBhdF9mbGFncywgY29uc3QgY2hhciBfX3VzZXIgKm5hbWUsXG4tXHRcdFx0ICAgICAgIHZvaWQgX191c2VyICp2YWx1ZSwgc2l6ZV90IHNpemUpXG4mIzQzO1x0XHRcdCAgICAgICB2b2lkIF9fdXNlciAqdmFsdWUsIHNpemVfdCBzaXplLCBib29sIHJhdylcbiB7XG4gXHRzdHJ1Y3QgeGF0dHJfbmFtZSBrbmFtZTtcbiBcdHN0cnVjdCBrZXJuZWxfeGF0dHJfY3R4IGN0eCA9IHtcbkBAIC04NjUsNyAmIzQzOzg2Nyw3IEBAIHN0YXRpYyBzc2l6ZV90IHBhdGhfZ2V0eGF0dHJhdChpbnQgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqcGF0aG5hbWUsXG4gXG4gXHRDTEFTUyhmaWxlbmFtZV9tYXliZV9udWxsLCBmaWxlbmFtZSkocGF0aG5hbWUsIGF0X2ZsYWdzKTtcbiBcdGlmICghZmlsZW5hbWUgXHUwMDI2XHUwMDI2IGRmZCBcdTAwM2U9IDApIHtcbi1cdFx0Q0xBU1MoZmQsIGYpKGRmZCk7XG4mIzQzO1x0XHRDTEFTUyhmZF9tYXliZV9yYXcsIGYpKGRmZCwgcmF3KTtcbiBcdFx0aWYgKGZkX2VtcHR5KGYpKVxuIFx0XHRcdHJldHVybiAtRUJBREY7XG4gXHRcdHJldHVybiBmaWxlX2dldHhhdHRyKGZkX2ZpbGUoZiksIFx1MDAyNmN0eCk7XG5AQCAtODk5LDI2ICYjNDM7OTAxLDI4IEBAIFNZU0NBTExfREVGSU5FNihnZXR4YXR0cmF0LCBpbnQsIGRmZCwgY29uc3QgY2hhciBfX3VzZXIgKiwgcGF0aG5hbWUsIHVuc2lnbmVkIGluXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0cmV0dXJuIHBhdGhfZ2V0eGF0dHJhdChkZmQsIHBhdGhuYW1lLCBhdF9mbGFncywgbmFtZSxcbi1cdFx0XHQgICAgICAgdTY0X3RvX3VzZXJfcHRyKGFyZ3MudmFsdWUpLCBhcmdzLnNpemUpO1xuJiM0MztcdFx0XHQgICAgICAgdTY0X3RvX3VzZXJfcHRyKGFyZ3MudmFsdWUpLCBhcmdzLnNpemUsIHRydWUpO1xuIH1cbiBcbiBTWVNDQUxMX0RFRklORTQoZ2V0eGF0dHIsIGNvbnN0IGNoYXIgX191c2VyICosIHBhdGhuYW1lLFxuIFx0XHRjb25zdCBjaGFyIF9fdXNlciAqLCBuYW1lLCB2b2lkIF9fdXNlciAqLCB2YWx1ZSwgc2l6ZV90LCBzaXplKVxuIHtcbi1cdHJldHVybiBwYXRoX2dldHhhdHRyYXQoQVRfRkRDV0QsIHBhdGhuYW1lLCAwLCBuYW1lLCB2YWx1ZSwgc2l6ZSk7XG4mIzQzO1x0cmV0dXJuIHBhdGhfZ2V0eGF0dHJhdChBVF9GRENXRCwgcGF0aG5hbWUsIDAsIG5hbWUsIHZhbHVlLCBzaXplLFxuJiM0MztcdFx0XHQgICAgICAgZmFsc2UpO1xuIH1cbiBcbiBTWVNDQUxMX0RFRklORTQobGdldHhhdHRyLCBjb25zdCBjaGFyIF9fdXNlciAqLCBwYXRobmFtZSxcbiBcdFx0Y29uc3QgY2hhciBfX3VzZXIgKiwgbmFtZSwgdm9pZCBfX3VzZXIgKiwgdmFsdWUsIHNpemVfdCwgc2l6ZSlcbiB7XG4gXHRyZXR1cm4gcGF0aF9nZXR4YXR0cmF0KEFUX0ZEQ1dELCBwYXRobmFtZSwgQVRfU1lNTElOS19OT0ZPTExPVywgbmFtZSxcbi1cdFx0XHQgICAgICAgdmFsdWUsIHNpemUpO1xuJiM0MztcdFx0XHQgICAgICAgdmFsdWUsIHNpemUsIGZhbHNlKTtcbiB9XG4gXG4gU1lTQ0FMTF9ERUZJTkU0KGZnZXR4YXR0ciwgaW50LCBmZCwgY29uc3QgY2hhciBfX3VzZXIgKiwgbmFtZSxcbiBcdFx0dm9pZCBfX3VzZXIgKiwgdmFsdWUsIHNpemVfdCwgc2l6ZSlcbiB7XG4tXHRyZXR1cm4gcGF0aF9nZXR4YXR0cmF0KGZkLCBOVUxMLCBBVF9FTVBUWV9QQVRILCBuYW1lLCB2YWx1ZSwgc2l6ZSk7XG4mIzQzO1x0cmV0dXJuIHBhdGhfZ2V0eGF0dHJhdChmZCwgTlVMTCwgQVRfRU1QVFlfUEFUSCwgbmFtZSwgdmFsdWUsIHNpemUsXG4mIzQzO1x0XHRcdCAgICAgICBmYWxzZSk7XG4gfVxuIFxuIC8qXG5AQCAtOTgyLDcgJiM0Mzs5ODYsNyBAQCBzc2l6ZV90IGZpbGVuYW1lX2xpc3R4YXR0cihpbnQgZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKmZpbGVuYW1lLFxuIFxuIHN0YXRpYyBzc2l6ZV90IHBhdGhfbGlzdHhhdHRyYXQoaW50IGRmZCwgY29uc3QgY2hhciBfX3VzZXIgKnBhdGhuYW1lLFxuIFx0XHRcdFx0dW5zaWduZWQgaW50IGF0X2ZsYWdzLCBjaGFyIF9fdXNlciAqbGlzdCxcbi1cdFx0XHRcdHNpemVfdCBzaXplKVxuJiM0MztcdFx0XHRcdHNpemVfdCBzaXplLCBib29sIHJhdylcbiB7XG4gXHRpbnQgbG9va3VwX2ZsYWdzO1xuIFxuQEAgLTk5MSw3ICYjNDM7OTk1LDcgQEAgc3RhdGljIHNzaXplX3QgcGF0aF9saXN0eGF0dHJhdChpbnQgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqcGF0aG5hbWUsXG4gXG4gXHRDTEFTUyhmaWxlbmFtZV9tYXliZV9udWxsLCBmaWxlbmFtZSkocGF0aG5hbWUsIGF0X2ZsYWdzKTtcbiBcdGlmICghZmlsZW5hbWUpIHtcbi1cdFx0Q0xBU1MoZmQsIGYpKGRmZCk7XG4mIzQzO1x0XHRDTEFTUyhmZF9tYXliZV9yYXcsIGYpKGRmZCwgcmF3KTtcbiBcdFx0aWYgKGZkX2VtcHR5KGYpKVxuIFx0XHRcdHJldHVybiAtRUJBREY7XG4gXHRcdHJldHVybiBmaWxlX2xpc3R4YXR0cihmZF9maWxlKGYpLCBsaXN0LCBzaXplKTtcbkBAIC0xMDA1LDI0ICYjNDM7MTAwOSwyNSBAQCBTWVNDQUxMX0RFRklORTUobGlzdHhhdHRyYXQsIGludCwgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqLCBwYXRobmFtZSxcbiBcdFx0dW5zaWduZWQgaW50LCBhdF9mbGFncyxcbiBcdFx0Y2hhciBfX3VzZXIgKiwgbGlzdCwgc2l6ZV90LCBzaXplKVxuIHtcbi1cdHJldHVybiBwYXRoX2xpc3R4YXR0cmF0KGRmZCwgcGF0aG5hbWUsIGF0X2ZsYWdzLCBsaXN0LCBzaXplKTtcbiYjNDM7XHRyZXR1cm4gcGF0aF9saXN0eGF0dHJhdChkZmQsIHBhdGhuYW1lLCBhdF9mbGFncywgbGlzdCwgc2l6ZSwgdHJ1ZSk7XG4gfVxuIFxuIFNZU0NBTExfREVGSU5FMyhsaXN0eGF0dHIsIGNvbnN0IGNoYXIgX191c2VyICosIHBhdGhuYW1lLCBjaGFyIF9fdXNlciAqLCBsaXN0LFxuIFx0XHRzaXplX3QsIHNpemUpXG4ge1xuLVx0cmV0dXJuIHBhdGhfbGlzdHhhdHRyYXQoQVRfRkRDV0QsIHBhdGhuYW1lLCAwLCBsaXN0LCBzaXplKTtcbiYjNDM7XHRyZXR1cm4gcGF0aF9saXN0eGF0dHJhdChBVF9GRENXRCwgcGF0aG5hbWUsIDAsIGxpc3QsIHNpemUsIGZhbHNlKTtcbiB9XG4gXG4gU1lTQ0FMTF9ERUZJTkUzKGxsaXN0eGF0dHIsIGNvbnN0IGNoYXIgX191c2VyICosIHBhdGhuYW1lLCBjaGFyIF9fdXNlciAqLCBsaXN0LFxuIFx0XHRzaXplX3QsIHNpemUpXG4ge1xuLVx0cmV0dXJuIHBhdGhfbGlzdHhhdHRyYXQoQVRfRkRDV0QsIHBhdGhuYW1lLCBBVF9TWU1MSU5LX05PRk9MTE9XLCBsaXN0LCBzaXplKTtcbiYjNDM7XHRyZXR1cm4gcGF0aF9saXN0eGF0dHJhdChBVF9GRENXRCwgcGF0aG5hbWUsIEFUX1NZTUxJTktfTk9GT0xMT1csIGxpc3QsXG4mIzQzO1x0XHRcdFx0c2l6ZSwgZmFsc2UpO1xuIH1cbiBcbiBTWVNDQUxMX0RFRklORTMoZmxpc3R4YXR0ciwgaW50LCBmZCwgY2hhciBfX3VzZXIgKiwgbGlzdCwgc2l6ZV90LCBzaXplKVxuIHtcbi1cdHJldHVybiBwYXRoX2xpc3R4YXR0cmF0KGZkLCBOVUxMLCBBVF9FTVBUWV9QQVRILCBsaXN0LCBzaXplKTtcbiYjNDM7XHRyZXR1cm4gcGF0aF9saXN0eGF0dHJhdChmZCwgTlVMTCwgQVRfRU1QVFlfUEFUSCwgbGlzdCwgc2l6ZSwgZmFsc2UpO1xuIH1cbiBcbiAvKlxuQEAgLTEwNzMsNyAmIzQzOzEwNzgsOCBAQCBzdGF0aWMgaW50IGZpbGVuYW1lX3JlbW92ZXhhdHRyKGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqZmlsZW5hbWUsXG4gfVxuIFxuIHN0YXRpYyBpbnQgcGF0aF9yZW1vdmV4YXR0cmF0KGludCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICpwYXRobmFtZSxcbi1cdFx0XHQgICAgICB1bnNpZ25lZCBpbnQgYXRfZmxhZ3MsIGNvbnN0IGNoYXIgX191c2VyICpuYW1lKVxuJiM0MztcdFx0XHQgICAgICB1bnNpZ25lZCBpbnQgYXRfZmxhZ3MsIGNvbnN0IGNoYXIgX191c2VyICpuYW1lLFxuJiM0MztcdFx0XHQgICAgICBib29sIHJhdylcbiB7XG4gXHRzdHJ1Y3QgeGF0dHJfbmFtZSBrbmFtZTtcbiBcdHVuc2lnbmVkIGludCBsb29rdXBfZmxhZ3M7XG5AQCAtMTA4OCw3ICYjNDM7MTA5NCw3IEBAIHN0YXRpYyBpbnQgcGF0aF9yZW1vdmV4YXR0cmF0KGludCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICpwYXRobmFtZSxcbiBcbiBcdENMQVNTKGZpbGVuYW1lX21heWJlX251bGwsIGZpbGVuYW1lKShwYXRobmFtZSwgYXRfZmxhZ3MpO1xuIFx0aWYgKCFmaWxlbmFtZSkge1xuLVx0XHRDTEFTUyhmZCwgZikoZGZkKTtcbiYjNDM7XHRcdENMQVNTKGZkX21heWJlX3JhdywgZikoZGZkLCByYXcpO1xuIFx0XHRpZiAoZmRfZW1wdHkoZikpXG4gXHRcdFx0cmV0dXJuIC1FQkFERjtcbiBcdFx0cmV0dXJuIGZpbGVfcmVtb3ZleGF0dHIoZmRfZmlsZShmKSwgXHUwMDI2a25hbWUpO1xuQEAgLTExMDAsMjQgJiM0MzsxMTA2LDI1IEBAIHN0YXRpYyBpbnQgcGF0aF9yZW1vdmV4YXR0cmF0KGludCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICpwYXRobmFtZSxcbiBTWVNDQUxMX0RFRklORTQocmVtb3ZleGF0dHJhdCwgaW50LCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICosIHBhdGhuYW1lLFxuIFx0XHR1bnNpZ25lZCBpbnQsIGF0X2ZsYWdzLCBjb25zdCBjaGFyIF9fdXNlciAqLCBuYW1lKVxuIHtcbi1cdHJldHVybiBwYXRoX3JlbW92ZXhhdHRyYXQoZGZkLCBwYXRobmFtZSwgYXRfZmxhZ3MsIG5hbWUpO1xuJiM0MztcdHJldHVybiBwYXRoX3JlbW92ZXhhdHRyYXQoZGZkLCBwYXRobmFtZSwgYXRfZmxhZ3MsIG5hbWUsIHRydWUpO1xuIH1cbiBcbiBTWVNDQUxMX0RFRklORTIocmVtb3ZleGF0dHIsIGNvbnN0IGNoYXIgX191c2VyICosIHBhdGhuYW1lLFxuIFx0XHRjb25zdCBjaGFyIF9fdXNlciAqLCBuYW1lKVxuIHtcbi1cdHJldHVybiBwYXRoX3JlbW92ZXhhdHRyYXQoQVRfRkRDV0QsIHBhdGhuYW1lLCAwLCBuYW1lKTtcbiYjNDM7XHRyZXR1cm4gcGF0aF9yZW1vdmV4YXR0cmF0KEFUX0ZEQ1dELCBwYXRobmFtZSwgMCwgbmFtZSwgZmFsc2UpO1xuIH1cbiBcbiBTWVNDQUxMX0RFRklORTIobHJlbW92ZXhhdHRyLCBjb25zdCBjaGFyIF9fdXNlciAqLCBwYXRobmFtZSxcbiBcdFx0Y29uc3QgY2hhciBfX3VzZXIgKiwgbmFtZSlcbiB7XG4tXHRyZXR1cm4gcGF0aF9yZW1vdmV4YXR0cmF0KEFUX0ZEQ1dELCBwYXRobmFtZSwgQVRfU1lNTElOS19OT0ZPTExPVywgbmFtZSk7XG4mIzQzO1x0cmV0dXJuIHBhdGhfcmVtb3ZleGF0dHJhdChBVF9GRENXRCwgcGF0aG5hbWUsIEFUX1NZTUxJTktfTk9GT0xMT1csIG5hbWUsXG4mIzQzO1x0XHRcdFx0ICBmYWxzZSk7XG4gfVxuIFxuIFNZU0NBTExfREVGSU5FMihmcmVtb3ZleGF0dHIsIGludCwgZmQsIGNvbnN0IGNoYXIgX191c2VyICosIG5hbWUpXG4ge1xuLVx0cmV0dXJuIHBhdGhfcmVtb3ZleGF0dHJhdChmZCwgTlVMTCwgQVRfRU1QVFlfUEFUSCwgbmFtZSk7XG4mIzQzO1x0cmV0dXJuIHBhdGhfcmVtb3ZleGF0dHJhdChmZCwgTlVMTCwgQVRfRU1QVFlfUEFUSCwgbmFtZSwgZmFsc2UpO1xuIH1cbiBcbiBpbnQgeGF0dHJfbGlzdF9vbmUoY2hhciAqKmJ1ZmZlciwgc3NpemVfdCAqcmVtYWluaW5nX3NpemUsIGNvbnN0IGNoYXIgKm5hbWUpXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9maWxlLmggYi9pbmNsdWRlL2xpbnV4L2ZpbGUuaFxuaW5kZXggMjc0ODRiNDQ0ZDMxNTUuLjJhMWRjNzM4OTgxZTAzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9maWxlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZmlsZS5oXG5AQCAtODIsNiAmIzQzOzgyLDggQEAgc3RhdGljIGlubGluZSB2b2lkIGZkcHV0X3BvcyhzdHJ1Y3QgZmQgZilcbiBcbiBERUZJTkVfQ0xBU1MoZmQsIHN0cnVjdCBmZCwgZmRwdXQoX1QpLCBmZGdldChmZCksIGludCBmZClcbiBERUZJTkVfQ0xBU1MoZmRfcmF3LCBzdHJ1Y3QgZmQsIGZkcHV0KF9UKSwgZmRnZXRfcmF3KGZkKSwgaW50IGZkKVxuJiM0MztERUZJTkVfQ0xBU1MoZmRfbWF5YmVfcmF3LCBzdHJ1Y3QgZmQsIGZkcHV0KF9UKSxcbiYjNDM7XHQgICAgIHJhdyA/IGZkZ2V0X3JhdyhmZCkgOiBmZGdldChmZCksIGludCBmZCwgYm9vbCByYXcpXG4gREVGSU5FX0NMQVNTKGZkX3Bvcywgc3RydWN0IGZkLCBmZHB1dF9wb3MoX1QpLCBmZGdldF9wb3MoZmQpLCBpbnQgZmQpXG4gXG4gZXh0ZXJuIGludCBmX2R1cGZkKHVuc2lnbmVkIGludCBmcm9tLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgZmxhZ3MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE2OjQ5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUTVBGU19YQVRUUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BhdGhfc2V0eGF0dHJhdCYjMzQ7LAogICAgJiMzNDtwYXRoX2dldHhhdHRyYXQmIzM0OywKICAgICYjMzQ7cGF0aF9saXN0eGF0dHJhdCYjMzQ7LAogICAgJiMzNDtwYXRoX3JlbW92ZXhhdHRyYXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGAqeGF0dHJhdGAgc3lzY2FsbHMgKGUuZy4sIGBzZXR4YXR0cmF0YCwgYGdldHhhdHRyYXRgLCBgbGlzdHhhdHRyYXRgLCBgcmVtb3ZleGF0dHJhdGApIHRvIGFsbG93IG9wZXJhdGluZyBvbiBgT19QQVRIYCBmaWxlIGRlc2NyaXB0b3JzIHdoZW4gYEFUX0VNUFRZX1BBVEhgIGlzIHVzZWQuIFRoaXMgaXMgYWNoaWV2ZWQgYnkgaW50cm9kdWNpbmcgYSBuZXcgYGZkX21heWJlX3Jhd2AgY2xhc3MgdGhhdCB1c2VzIGBmZGdldF9yYXdgIGluc3RlYWQgb2YgYGZkZ2V0YCB3aGVuIHRoZSBgcmF3YCBwYXJhbWV0ZXIgaXMgdHJ1ZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWx0ZXJzIHRoZSBiZWhhdmlvciBvZiB0aGVzZSBzeXNjYWxscywgbWFraW5nIHRoZW0gY29uc2lzdGVudCB3aXRoIG90aGVyIGAqYXRgIHN5c2NhbGxzIGxpa2UgYGZjaG93bmF0YCBhbmQgYGZzdGF0YXRgLiBJdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gcmVncmVzc2lvbnMgb3IgdW5leHBlY3RlZCBiZWhhdmlvcnMgd2hlbiB1c2luZyBgT19QQVRIYCBmaWxlIGRlc2NyaXB0b3JzIHdpdGggZXh0ZW5kZWQgYXR0cmlidXRlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjA3YzEyZDlkZjNhZWYyOTdmY2VkZmYxMTZkN2I4MmExM2U4NGZjMwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgSnVsIDIzIDE2OjQ5OjA0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMveGF0dHIuYyBiL2ZzL3hhdHRyLmMKaW5kZXggZDU4OTc5MTE1MjAwNzUuLjFkYjY1OTZhMmVjMTEwIDEwMDY0NAotLS0gYS9mcy94YXR0ci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3hhdHRyLmMKQEAgLTcwMCw3ICYjNDM7NzAwLDggQEAgaW50IGZpbGVuYW1lX3NldHhhdHRyKGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqZmlsZW5hbWUsCiAKIHN0YXRpYyBpbnQgcGF0aF9zZXR4YXR0cmF0KGludCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICpwYXRobmFtZSwKIAkJCSAgIHVuc2lnbmVkIGludCBhdF9mbGFncywgY29uc3QgY2hhciBfX3VzZXIgKm5hbWUsCi0JCQkgICBjb25zdCB2b2lkIF9fdXNlciAqdmFsdWUsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpCiYjNDM7CQkJICAgY29uc3Qgdm9pZCBfX3VzZXIgKnZhbHVlLCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzLAomIzQzOwkJCSAgIGJvb2wgcmF3KQogewogCXN0cnVjdCB4YXR0cl9uYW1lIGtuYW1lOwogCXN0cnVjdCBrZXJuZWxfeGF0dHJfY3R4IGN0eCA9IHsKQEAgLTcyNSw3ICYjNDM7NzI2LDcgQEAgc3RhdGljIGludCBwYXRoX3NldHhhdHRyYXQoaW50IGRmZCwgY29uc3QgY2hhciBfX3VzZXIgKnBhdGhuYW1lLAogCiAJQ0xBU1MoZmlsZW5hbWVfbWF5YmVfbnVsbCwgZmlsZW5hbWUpKHBhdGhuYW1lLCBhdF9mbGFncyk7CiAJaWYgKCFmaWxlbmFtZSAmYW1wOyZhbXA7IGRmZCAmZ3Q7PSAwKSB7Ci0JCUNMQVNTKGZkLCBmKShkZmQpOwomIzQzOwkJQ0xBU1MoZmRfbWF5YmVfcmF3LCBmKShkZmQsIHJhdyk7CiAJCWlmIChmZF9lbXB0eShmKSkKIAkJCWVycm9yID0gLUVCQURGOwogCQllbHNlCkBAIC03NTgsMTQgJiM0Mzs3NTksMTUgQEAgU1lTQ0FMTF9ERUZJTkU2KHNldHhhdHRyYXQsIGludCwgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqLCBwYXRobmFtZSwgdW5zaWduZWQgaW4KIAogCXJldHVybiBwYXRoX3NldHhhdHRyYXQoZGZkLCBwYXRobmFtZSwgYXRfZmxhZ3MsIG5hbWUsCiAJCQkgICAgICAgdTY0X3RvX3VzZXJfcHRyKGFyZ3MudmFsdWUpLCBhcmdzLnNpemUsCi0JCQkgICAgICAgYXJncy5mbGFncyk7CiYjNDM7CQkJICAgICAgIGFyZ3MuZmxhZ3MsIHRydWUpOwogfQogCiBTWVNDQUxMX0RFRklORTUoc2V0eGF0dHIsIGNvbnN0IGNoYXIgX191c2VyICosIHBhdGhuYW1lLAogCQljb25zdCBjaGFyIF9fdXNlciAqLCBuYW1lLCBjb25zdCB2b2lkIF9fdXNlciAqLCB2YWx1ZSwKIAkJc2l6ZV90LCBzaXplLCBpbnQsIGZsYWdzKQogewotCXJldHVybiBwYXRoX3NldHhhdHRyYXQoQVRfRkRDV0QsIHBhdGhuYW1lLCAwLCBuYW1lLCB2YWx1ZSwgc2l6ZSwgZmxhZ3MpOwomIzQzOwlyZXR1cm4gcGF0aF9zZXR4YXR0cmF0KEFUX0ZEQ1dELCBwYXRobmFtZSwgMCwgbmFtZSwgdmFsdWUsIHNpemUsIGZsYWdzLAomIzQzOwkJCSAgICAgICBmYWxzZSk7CiB9CiAKIFNZU0NBTExfREVGSU5FNShsc2V0eGF0dHIsIGNvbnN0IGNoYXIgX191c2VyICosIHBhdGhuYW1lLApAQCAtNzczLDE0ICYjNDM7Nzc1LDE0IEBAIFNZU0NBTExfREVGSU5FNShsc2V0eGF0dHIsIGNvbnN0IGNoYXIgX191c2VyICosIHBhdGhuYW1lLAogCQlzaXplX3QsIHNpemUsIGludCwgZmxhZ3MpCiB7CiAJcmV0dXJuIHBhdGhfc2V0eGF0dHJhdChBVF9GRENXRCwgcGF0aG5hbWUsIEFUX1NZTUxJTktfTk9GT0xMT1csIG5hbWUsCi0JCQkgICAgICAgdmFsdWUsIHNpemUsIGZsYWdzKTsKJiM0MzsJCQkgICAgICAgdmFsdWUsIHNpemUsIGZsYWdzLCBmYWxzZSk7CiB9CiAKIFNZU0NBTExfREVGSU5FNShmc2V0eGF0dHIsIGludCwgZmQsIGNvbnN0IGNoYXIgX191c2VyICosIG5hbWUsCiAJCWNvbnN0IHZvaWQgX191c2VyICosdmFsdWUsIHNpemVfdCwgc2l6ZSwgaW50LCBmbGFncykKIHsKIAlyZXR1cm4gcGF0aF9zZXR4YXR0cmF0KGZkLCBOVUxMLCBBVF9FTVBUWV9QQVRILCBuYW1lLAotCQkJICAgICAgIHZhbHVlLCBzaXplLCBmbGFncyk7CiYjNDM7CQkJICAgICAgIHZhbHVlLCBzaXplLCBmbGFncywgZmFsc2UpOwogfQogCiAvKgpAQCAtODQ1LDcgJiM0Mzs4NDcsNyBAQCBzc2l6ZV90IGZpbGVuYW1lX2dldHhhdHRyKGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqZmlsZW5hbWUsCiAKIHN0YXRpYyBzc2l6ZV90IHBhdGhfZ2V0eGF0dHJhdChpbnQgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqcGF0aG5hbWUsCiAJCQkgICAgICAgdW5zaWduZWQgaW50IGF0X2ZsYWdzLCBjb25zdCBjaGFyIF9fdXNlciAqbmFtZSwKLQkJCSAgICAgICB2b2lkIF9fdXNlciAqdmFsdWUsIHNpemVfdCBzaXplKQomIzQzOwkJCSAgICAgICB2b2lkIF9fdXNlciAqdmFsdWUsIHNpemVfdCBzaXplLCBib29sIHJhdykKIHsKIAlzdHJ1Y3QgeGF0dHJfbmFtZSBrbmFtZTsKIAlzdHJ1Y3Qga2VybmVsX3hhdHRyX2N0eCBjdHggPSB7CkBAIC04NjUsNyAmIzQzOzg2Nyw3IEBAIHN0YXRpYyBzc2l6ZV90IHBhdGhfZ2V0eGF0dHJhdChpbnQgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqcGF0aG5hbWUsCiAKIAlDTEFTUyhmaWxlbmFtZV9tYXliZV9udWxsLCBmaWxlbmFtZSkocGF0aG5hbWUsIGF0X2ZsYWdzKTsKIAlpZiAoIWZpbGVuYW1lICZhbXA7JmFtcDsgZGZkICZndDs9IDApIHsKLQkJQ0xBU1MoZmQsIGYpKGRmZCk7CiYjNDM7CQlDTEFTUyhmZF9tYXliZV9yYXcsIGYpKGRmZCwgcmF3KTsKIAkJaWYgKGZkX2VtcHR5KGYpKQogCQkJcmV0dXJuIC1FQkFERjsKIAkJcmV0dXJuIGZpbGVfZ2V0eGF0dHIoZmRfZmlsZShmKSwgJmFtcDtjdHgpOwpAQCAtODk5LDI2ICYjNDM7OTAxLDI4IEBAIFNZU0NBTExfREVGSU5FNihnZXR4YXR0cmF0LCBpbnQsIGRmZCwgY29uc3QgY2hhciBfX3VzZXIgKiwgcGF0aG5hbWUsIHVuc2lnbmVkIGluCiAJCXJldHVybiAtRUlOVkFMOwogCiAJcmV0dXJuIHBhdGhfZ2V0eGF0dHJhdChkZmQsIHBhdGhuYW1lLCBhdF9mbGFncywgbmFtZSwKLQkJCSAgICAgICB1NjRfdG9fdXNlcl9wdHIoYXJncy52YWx1ZSksIGFyZ3Muc2l6ZSk7CiYjNDM7CQkJICAgICAgIHU2NF90b191c2VyX3B0cihhcmdzLnZhbHVlKSwgYXJncy5zaXplLCB0cnVlKTsKIH0KIAogU1lTQ0FMTF9ERUZJTkU0KGdldHhhdHRyLCBjb25zdCBjaGFyIF9fdXNlciAqLCBwYXRobmFtZSwKIAkJY29uc3QgY2hhciBfX3VzZXIgKiwgbmFtZSwgdm9pZCBfX3VzZXIgKiwgdmFsdWUsIHNpemVfdCwgc2l6ZSkKIHsKLQlyZXR1cm4gcGF0aF9nZXR4YXR0cmF0KEFUX0ZEQ1dELCBwYXRobmFtZSwgMCwgbmFtZSwgdmFsdWUsIHNpemUpOwomIzQzOwlyZXR1cm4gcGF0aF9nZXR4YXR0cmF0KEFUX0ZEQ1dELCBwYXRobmFtZSwgMCwgbmFtZSwgdmFsdWUsIHNpemUsCiYjNDM7CQkJICAgICAgIGZhbHNlKTsKIH0KIAogU1lTQ0FMTF9ERUZJTkU0KGxnZXR4YXR0ciwgY29uc3QgY2hhciBfX3VzZXIgKiwgcGF0aG5hbWUsCiAJCWNvbnN0IGNoYXIgX191c2VyICosIG5hbWUsIHZvaWQgX191c2VyICosIHZhbHVlLCBzaXplX3QsIHNpemUpCiB7CiAJcmV0dXJuIHBhdGhfZ2V0eGF0dHJhdChBVF9GRENXRCwgcGF0aG5hbWUsIEFUX1NZTUxJTktfTk9GT0xMT1csIG5hbWUsCi0JCQkgICAgICAgdmFsdWUsIHNpemUpOwomIzQzOwkJCSAgICAgICB2YWx1ZSwgc2l6ZSwgZmFsc2UpOwogfQogCiBTWVNDQUxMX0RFRklORTQoZmdldHhhdHRyLCBpbnQsIGZkLCBjb25zdCBjaGFyIF9fdXNlciAqLCBuYW1lLAogCQl2b2lkIF9fdXNlciAqLCB2YWx1ZSwgc2l6ZV90LCBzaXplKQogewotCXJldHVybiBwYXRoX2dldHhhdHRyYXQoZmQsIE5VTEwsIEFUX0VNUFRZX1BBVEgsIG5hbWUsIHZhbHVlLCBzaXplKTsKJiM0MzsJcmV0dXJuIHBhdGhfZ2V0eGF0dHJhdChmZCwgTlVMTCwgQVRfRU1QVFlfUEFUSCwgbmFtZSwgdmFsdWUsIHNpemUsCiYjNDM7CQkJICAgICAgIGZhbHNlKTsKIH0KIAogLyoKQEAgLTk4Miw3ICYjNDM7OTg2LDcgQEAgc3NpemVfdCBmaWxlbmFtZV9saXN0eGF0dHIoaW50IGRmZCwgc3RydWN0IGZpbGVuYW1lICpmaWxlbmFtZSwKIAogc3RhdGljIHNzaXplX3QgcGF0aF9saXN0eGF0dHJhdChpbnQgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqcGF0aG5hbWUsCiAJCQkJdW5zaWduZWQgaW50IGF0X2ZsYWdzLCBjaGFyIF9fdXNlciAqbGlzdCwKLQkJCQlzaXplX3Qgc2l6ZSkKJiM0MzsJCQkJc2l6ZV90IHNpemUsIGJvb2wgcmF3KQogewogCWludCBsb29rdXBfZmxhZ3M7CiAKQEAgLTk5MSw3ICYjNDM7OTk1LDcgQEAgc3RhdGljIHNzaXplX3QgcGF0aF9saXN0eGF0dHJhdChpbnQgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqcGF0aG5hbWUsCiAKIAlDTEFTUyhmaWxlbmFtZV9tYXliZV9udWxsLCBmaWxlbmFtZSkocGF0aG5hbWUsIGF0X2ZsYWdzKTsKIAlpZiAoIWZpbGVuYW1lKSB7Ci0JCUNMQVNTKGZkLCBmKShkZmQpOwomIzQzOwkJQ0xBU1MoZmRfbWF5YmVfcmF3LCBmKShkZmQsIHJhdyk7CiAJCWlmIChmZF9lbXB0eShmKSkKIAkJCXJldHVybiAtRUJBREY7CiAJCXJldHVybiBmaWxlX2xpc3R4YXR0cihmZF9maWxlKGYpLCBsaXN0LCBzaXplKTsKQEAgLTEwMDUsMjQgJiM0MzsxMDA5LDI1IEBAIFNZU0NBTExfREVGSU5FNShsaXN0eGF0dHJhdCwgaW50LCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICosIHBhdGhuYW1lLAogCQl1bnNpZ25lZCBpbnQsIGF0X2ZsYWdzLAogCQljaGFyIF9fdXNlciAqLCBsaXN0LCBzaXplX3QsIHNpemUpCiB7Ci0JcmV0dXJuIHBhdGhfbGlzdHhhdHRyYXQoZGZkLCBwYXRobmFtZSwgYXRfZmxhZ3MsIGxpc3QsIHNpemUpOwomIzQzOwlyZXR1cm4gcGF0aF9saXN0eGF0dHJhdChkZmQsIHBhdGhuYW1lLCBhdF9mbGFncywgbGlzdCwgc2l6ZSwgdHJ1ZSk7CiB9CiAKIFNZU0NBTExfREVGSU5FMyhsaXN0eGF0dHIsIGNvbnN0IGNoYXIgX191c2VyICosIHBhdGhuYW1lLCBjaGFyIF9fdXNlciAqLCBsaXN0LAogCQlzaXplX3QsIHNpemUpCiB7Ci0JcmV0dXJuIHBhdGhfbGlzdHhhdHRyYXQoQVRfRkRDV0QsIHBhdGhuYW1lLCAwLCBsaXN0LCBzaXplKTsKJiM0MzsJcmV0dXJuIHBhdGhfbGlzdHhhdHRyYXQoQVRfRkRDV0QsIHBhdGhuYW1lLCAwLCBsaXN0LCBzaXplLCBmYWxzZSk7CiB9CiAKIFNZU0NBTExfREVGSU5FMyhsbGlzdHhhdHRyLCBjb25zdCBjaGFyIF9fdXNlciAqLCBwYXRobmFtZSwgY2hhciBfX3VzZXIgKiwgbGlzdCwKIAkJc2l6ZV90LCBzaXplKQogewotCXJldHVybiBwYXRoX2xpc3R4YXR0cmF0KEFUX0ZEQ1dELCBwYXRobmFtZSwgQVRfU1lNTElOS19OT0ZPTExPVywgbGlzdCwgc2l6ZSk7CiYjNDM7CXJldHVybiBwYXRoX2xpc3R4YXR0cmF0KEFUX0ZEQ1dELCBwYXRobmFtZSwgQVRfU1lNTElOS19OT0ZPTExPVywgbGlzdCwKJiM0MzsJCQkJc2l6ZSwgZmFsc2UpOwogfQogCiBTWVNDQUxMX0RFRklORTMoZmxpc3R4YXR0ciwgaW50LCBmZCwgY2hhciBfX3VzZXIgKiwgbGlzdCwgc2l6ZV90LCBzaXplKQogewotCXJldHVybiBwYXRoX2xpc3R4YXR0cmF0KGZkLCBOVUxMLCBBVF9FTVBUWV9QQVRILCBsaXN0LCBzaXplKTsKJiM0MzsJcmV0dXJuIHBhdGhfbGlzdHhhdHRyYXQoZmQsIE5VTEwsIEFUX0VNUFRZX1BBVEgsIGxpc3QsIHNpemUsIGZhbHNlKTsKIH0KIAogLyoKQEAgLTEwNzMsNyAmIzQzOzEwNzgsOCBAQCBzdGF0aWMgaW50IGZpbGVuYW1lX3JlbW92ZXhhdHRyKGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqZmlsZW5hbWUsCiB9CiAKIHN0YXRpYyBpbnQgcGF0aF9yZW1vdmV4YXR0cmF0KGludCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICpwYXRobmFtZSwKLQkJCSAgICAgIHVuc2lnbmVkIGludCBhdF9mbGFncywgY29uc3QgY2hhciBfX3VzZXIgKm5hbWUpCiYjNDM7CQkJICAgICAgdW5zaWduZWQgaW50IGF0X2ZsYWdzLCBjb25zdCBjaGFyIF9fdXNlciAqbmFtZSwKJiM0MzsJCQkgICAgICBib29sIHJhdykKIHsKIAlzdHJ1Y3QgeGF0dHJfbmFtZSBrbmFtZTsKIAl1bnNpZ25lZCBpbnQgbG9va3VwX2ZsYWdzOwpAQCAtMTA4OCw3ICYjNDM7MTA5NCw3IEBAIHN0YXRpYyBpbnQgcGF0aF9yZW1vdmV4YXR0cmF0KGludCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICpwYXRobmFtZSwKIAogCUNMQVNTKGZpbGVuYW1lX21heWJlX251bGwsIGZpbGVuYW1lKShwYXRobmFtZSwgYXRfZmxhZ3MpOwogCWlmICghZmlsZW5hbWUpIHsKLQkJQ0xBU1MoZmQsIGYpKGRmZCk7CiYjNDM7CQlDTEFTUyhmZF9tYXliZV9yYXcsIGYpKGRmZCwgcmF3KTsKIAkJaWYgKGZkX2VtcHR5KGYpKQogCQkJcmV0dXJuIC1FQkFERjsKIAkJcmV0dXJuIGZpbGVfcmVtb3ZleGF0dHIoZmRfZmlsZShmKSwgJmFtcDtrbmFtZSk7CkBAIC0xMTAwLDI0ICYjNDM7MTEwNiwyNSBAQCBzdGF0aWMgaW50IHBhdGhfcmVtb3ZleGF0dHJhdChpbnQgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqcGF0aG5hbWUsCiBTWVNDQUxMX0RFRklORTQocmVtb3ZleGF0dHJhdCwgaW50LCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICosIHBhdGhuYW1lLAogCQl1bnNpZ25lZCBpbnQsIGF0X2ZsYWdzLCBjb25zdCBjaGFyIF9fdXNlciAqLCBuYW1lKQogewotCXJldHVybiBwYXRoX3JlbW92ZXhhdHRyYXQoZGZkLCBwYXRobmFtZSwgYXRfZmxhZ3MsIG5hbWUpOwomIzQzOwlyZXR1cm4gcGF0aF9yZW1vdmV4YXR0cmF0KGRmZCwgcGF0aG5hbWUsIGF0X2ZsYWdzLCBuYW1lLCB0cnVlKTsKIH0KIAogU1lTQ0FMTF9ERUZJTkUyKHJlbW92ZXhhdHRyLCBjb25zdCBjaGFyIF9fdXNlciAqLCBwYXRobmFtZSwKIAkJY29uc3QgY2hhciBfX3VzZXIgKiwgbmFtZSkKIHsKLQlyZXR1cm4gcGF0aF9yZW1vdmV4YXR0cmF0KEFUX0ZEQ1dELCBwYXRobmFtZSwgMCwgbmFtZSk7CiYjNDM7CXJldHVybiBwYXRoX3JlbW92ZXhhdHRyYXQoQVRfRkRDV0QsIHBhdGhuYW1lLCAwLCBuYW1lLCBmYWxzZSk7CiB9CiAKIFNZU0NBTExfREVGSU5FMihscmVtb3ZleGF0dHIsIGNvbnN0IGNoYXIgX191c2VyICosIHBhdGhuYW1lLAogCQljb25zdCBjaGFyIF9fdXNlciAqLCBuYW1lKQogewotCXJldHVybiBwYXRoX3JlbW92ZXhhdHRyYXQoQVRfRkRDV0QsIHBhdGhuYW1lLCBBVF9TWU1MSU5LX05PRk9MTE9XLCBuYW1lKTsKJiM0MzsJcmV0dXJuIHBhdGhfcmVtb3ZleGF0dHJhdChBVF9GRENXRCwgcGF0aG5hbWUsIEFUX1NZTUxJTktfTk9GT0xMT1csIG5hbWUsCiYjNDM7CQkJCSAgZmFsc2UpOwogfQogCiBTWVNDQUxMX0RFRklORTIoZnJlbW92ZXhhdHRyLCBpbnQsIGZkLCBjb25zdCBjaGFyIF9fdXNlciAqLCBuYW1lKQogewotCXJldHVybiBwYXRoX3JlbW92ZXhhdHRyYXQoZmQsIE5VTEwsIEFUX0VNUFRZX1BBVEgsIG5hbWUpOwomIzQzOwlyZXR1cm4gcGF0aF9yZW1vdmV4YXR0cmF0KGZkLCBOVUxMLCBBVF9FTVBUWV9QQVRILCBuYW1lLCBmYWxzZSk7CiB9CiAKIGludCB4YXR0cl9saXN0X29uZShjaGFyICoqYnVmZmVyLCBzc2l6ZV90ICpyZW1haW5pbmdfc2l6ZSwgY29uc3QgY2hhciAqbmFtZSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZmlsZS5oIGIvaW5jbHVkZS9saW51eC9maWxlLmgKaW5kZXggMjc0ODRiNDQ0ZDMxNTUuLjJhMWRjNzM4OTgxZTAzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZpbGUuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2ZpbGUuaApAQCAtODIsNiAmIzQzOzgyLDggQEAgc3RhdGljIGlubGluZSB2b2lkIGZkcHV0X3BvcyhzdHJ1Y3QgZmQgZikKIAogREVGSU5FX0NMQVNTKGZkLCBzdHJ1Y3QgZmQsIGZkcHV0KF9UKSwgZmRnZXQoZmQpLCBpbnQgZmQpCiBERUZJTkVfQ0xBU1MoZmRfcmF3LCBzdHJ1Y3QgZmQsIGZkcHV0KF9UKSwgZmRnZXRfcmF3KGZkKSwgaW50IGZkKQomIzQzO0RFRklORV9DTEFTUyhmZF9tYXliZV9yYXcsIHN0cnVjdCBmZCwgZmRwdXQoX1QpLAomIzQzOwkgICAgIHJhdyA/IGZkZ2V0X3JhdyhmZCkgOiBmZGdldChmZCksIGludCBmZCwgYm9vbCByYXcpCiBERUZJTkVfQ0xBU1MoZmRfcG9zLCBzdHJ1Y3QgZmQsIGZkcHV0X3BvcyhfVCksIGZkZ2V0X3BvcyhmZCksIGludCBmZCkKIAogZXh0ZXJuIGludCBmX2R1cGZkKHVuc2lnbmVkIGludCBmcm9tLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgZmxhZ3MpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNjo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzkyCgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMzcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgeGF0dHIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBmcy94YXR0ci5jYCBhbmQgYGluY2x1ZGUvbGludXgvZmlsZS5oYC4gSXQgc2VlbXMgdGhleSYjMzk7cmUgYWRkaW5nIGEgYGJvb2wgcmF3YCBhcmd1bWVudCB0byB0aGUgYHBhdGhfc2V0eGF0dHJhdGAsIGBwYXRoX2dldHhhdHRyYXRgLCBgcGF0aF9saXN0eGF0dHJhdGAsIGFuZCBgcGF0aF9yZW1vdmV4YXR0cmF0YCBmdW5jdGlvbnMuIFJpZ2h0LCBhbmQgdGhpcyBpcyBhYm91dCBkaWZmZXJlbnRpYXRpbmcgYmV0d2VlbiB0aGUgbmV3ZXIgYCphdGAgc3lzY2FsbHMgYW5kIHRoZSBvbGRlciBvbmVzLCBzbyB0aGUgYHJhd2AgZmxhZyBnZXRzIHBhc3NlZCBhcyBgdHJ1ZWAgZm9yIHRoZSBmb3JtZXIgKGUuZy4sIGBzZXR4YXR0cmF0YCkgYW5kIGBmYWxzZWAgZm9yIHRoZSBvbGRlciBvbmVzIChlLmcuLCBgc2V0eGF0dHJgLCBgbHNldHhhdHRyYCwgYGZzZXR4YXR0cmApLiBXYWl0IGEgc2Vjb25kLCB0aGUgb2xkZXIgc3lzY2FsbCBgZnNldHhhdHRyYCBhbHNvIHBhc3NlcyBgZmFsc2VgIGZvciBgcmF3YC4KCk5vdywgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIGBpbmNsdWRlL2xpbnV4L2ZpbGUuaGAuIEFoLCBoZXJlIGl0IGlzOiBgREVGSU5FX0NMQVNTKGZkX21heWJlX3Jhdywgc3RydWN0IGZkLCBmZHB1dChfVCksIHJhdyA/IGZkZ2V0X3JhdyhmZCkgOiBmZGdldChmZCksIGludCBmZCwgYm9vbCByYXcpYC4gT2theSwgc28gaXQgdXNlcyBgZmRnZXRfcmF3KGZkKWAgaWYgYHJhd2AgaXMgdHJ1ZSBhbmQgYGZkZ2V0KGZkKWAgb3RoZXJ3aXNlLiBTbywgdGhpcyBtZWFucyB0aGF0IGBmZGdldF9yYXdgIGFsbG93cyB0aGUgZ2V0dGluZyBvZiB0aGUgZmlsZSBkZXNjcmlwdG9yIGV2ZW4gaWYgaXQgaXMgYW4gYE9fUEFUSGAgZmlsZSBkZXNjcmlwdG9yLCB3aGlsZSBgZmRnZXRgIHdvdWxkIHBvdGVudGlhbGx5IGZhaWwuIFNvLCB0aGlzIGNoYW5nZSBpcyBhbGxvd2luZyBhY2Nlc3MgdG8gdGhlc2UgZmlsZSBkZXNjcmlwdG9ycyB3aGVuIHRoZXkgb3RoZXJ3aXNlIHdvdWxkbiYjMzk7dCBiZSBhbGxvd2VkPyBJdCYjMzk7cyBwcm9iYWJseSByZWxhdGVkIHRvIGhhbmRsaW5nIGBPX1BBVEhgIGRlc2NyaXB0b3JzIHByb3Blcmx5LiBMZXQgbWUgZG91YmxlLWNoZWNrIHRoYXQgYnkgbG9va2luZyBhdCBob3cgYGZkZ2V0X3Jhd2Agd29ya3MuIEkmIzM5O2xsIHVzZSBgZ3JlcHBlcmAgdG8gc2VlIHdoZXJlIGBmZGdldF9yYXdgIGlzIGRlZmluZWQgYW5kIHdoYXQgaXQgZG9lcyBpbiBkZXRhaWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMTY6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmRnZXRfcmF3JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2ZpbGUuYz0xMjEwPUVYUE9SVF9TWU1CT0woZmRnZXQpO1xuZnMvZmlsZS5jLTEyMTEtXG5mcy9maWxlLmM6MTIxMjpzdHJ1Y3QgZmQgZmRnZXRfcmF3KHVuc2lnbmVkIGludCBmZClcbmZzL2ZpbGUuYy0xMjEzLXtcbi0tXG5pbmNsdWRlL2xpbnV4L2ZpbGUuaD03Mj1zdHJ1Y3QgZmQgZmRnZXQodW5zaWduZWQgaW50IGZkKTtcbmluY2x1ZGUvbGludXgvZmlsZS5oOjczOnN0cnVjdCBmZCBmZGdldF9yYXcodW5zaWduZWQgaW50IGZkKTtcbmluY2x1ZGUvbGludXgvZmlsZS5oLTc0LXN0cnVjdCBmZCBmZGdldF9wb3ModW5zaWduZWQgaW50IGZkKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2ZpbGUuaD04Mz1ERUZJTkVfQ0xBU1MoZmQsIHN0cnVjdCBmZCwgZmRwdXQoX1QpLCBmZGdldChmZCksIGludCBmZClcbmluY2x1ZGUvbGludXgvZmlsZS5oOjg0OkRFRklORV9DTEFTUyhmZF9yYXcsIHN0cnVjdCBmZCwgZmRwdXQoX1QpLCBmZGdldF9yYXcoZmQpLCBpbnQgZmQpXG5pbmNsdWRlL2xpbnV4L2ZpbGUuaC04NS1ERUZJTkVfQ0xBU1MoZmRfbWF5YmVfcmF3LCBzdHJ1Y3QgZmQsIGZkcHV0KF9UKSxcbmluY2x1ZGUvbGludXgvZmlsZS5oOjg2Olx0ICAgICByYXcgPyBmZGdldF9yYXcoZmQpIDogZmRnZXQoZmQpLCBpbnQgZmQsIGJvb2wgcmF3KVxuaW5jbHVkZS9saW51eC9maWxlLmgtODctREVGSU5FX0NMQVNTKGZkX3Bvcywgc3RydWN0IGZkLCBmZHB1dF9wb3MoX1QpLCBmZGdldF9wb3MoZmQpLCBpbnQgZmQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMTY6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTkwNgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgYGZkZ2V0X3Jhd2AgRnVuY3Rpb24qKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIGp1bXAgaW50byB0aGUgYGZkZ2V0X3Jhd2AgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBsb29rIGF0IGBmcy9maWxlLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBsb3dlci1sZXZlbCBmaWxlIGRlc2NyaXB0b3IgaGFuZGxpbmcgcmVzaWRlcywgc28gdGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gdW5kZXJzdGFuZCB0aGUgbWVjaGFuaWNzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgZnVuY3Rpb24gaXMgZGVzaWduZWQgdG8gZG8uIE15IGd1ZXNzIGlzIGl0JiMzOTtzIGZldGNoaW5nIGEgcmF3IGZpbGUgZGVzY3JpcHRvciBzdHJ1Y3R1cmUsIGxpa2VseSB3aXRob3V0IGFueSBhZGRlZCBwcm90ZWN0aW9uIG9yIGNoZWNrcywgd2hpY2ggSSYjMzk7bGwgaGF2ZSB0byBrZWVwIGluIG1pbmQuIExldCYjMzk7cyBzZWUgaG93IGl0IGhhbmRsZXMgdGhlIGRpZmZlcmVudCBzY2VuYXJpb3MsIGVycm9ycywgYW5kIHdoYXQgdGhlIHJldHVybiB2YWx1ZSB0ZWxscyBtZS4gVGltZSB0byBzdGFydCBkaWdnaW5nIHRocm91Z2ggdGhlIGNvZGUuIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCB1bmRlcnN0YW5kaW5nIHJhdyBmaWxlIGRlc2NyaXB0b3IgaGFuZGxpbmcgY2FuIGlsbHVtaW5hdGUgYSBsb3QgYWJvdXQgYSBzeXN0ZW0mIzM5O3MgY29yZSBkZXNpZ24uIEkgYW50aWNpcGF0ZSB0aGlzIHdpbGwgYmUgaW50ZXJlc3RpbmchCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMTY6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9maWxlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyMDA6XHRcdFx0ZmlsZSA9IF9fZmdldF9maWxlcyhmaWxlcywgZmQsIG1hc2spO1xuMTIwMTpcdFx0XHRpZiAoIWZpbGUpXG4xMjAyOlx0XHRcdFx0cmV0dXJuIEVNUFRZX0ZEO1xuMTIwMzpcdFx0XHRyZXR1cm4gQ0xPTkVEX0ZEKGZpbGUpO1xuMTIwNDpcdFx0fVxuMTIwNTpcdH1cbjEyMDY6XHRzdHJ1Y3QgZmQgZmRnZXQodW5zaWduZWQgaW50IGZkKVxuMTIwNzpcdHtcbjEyMDg6XHRcdHJldHVybiBfX2ZnZXRfbGlnaHQoZmQsIEZNT0RFX1BBVEgpO1xuMTIwOTpcdH1cbjEyMTA6XHRFWFBPUlRfU1lNQk9MKGZkZ2V0KTtcbjEyMTE6XHRcbjEyMTI6XHRzdHJ1Y3QgZmQgZmRnZXRfcmF3KHVuc2lnbmVkIGludCBmZClcbjEyMTM6XHR7XG4xMjE0Olx0XHRyZXR1cm4gX19mZ2V0X2xpZ2h0KGZkLCAwKTtcbjEyMTU6XHR9XG4xMjE2Olx0XG4xMjE3Olx0LypcbjEyMTg6XHQgKiBUcnkgdG8gYXZvaWQgZl9wb3MgbG9ja2luZy4gV2Ugb25seSBuZWVkIGl0IGlmIHRoZVxuMTIxOTpcdCAqIGZpbGUgaXMgbWFya2VkIGZvciBGTU9ERV9BVE9NSUNfUE9TLCBhbmQgaXQgY2FuIGJlXG4xMjIwOlx0ICogYWNjZXNzZWQgbXVsdGlwbGUgd2F5cy5cbjEyMjE6XHQgKlxuMTIyMjpcdCAqIEFsd2F5cyBkbyBpdCBmb3IgZGlyZWN0b3JpZXMsIGJlY2F1c2UgcGlkZmRfZ2V0ZmQoKVxuMTIyMzpcdCAqIGNhbiBtYWtlIGEgZmlsZSBhY2Nlc3NpYmxlIGV2ZW4gaWYgaXQgb3RoZXJ3aXNlIHdvdWxkXG4xMjI0Olx0ICogbm90IGJlLCBhbmQgZm9yIGRpcmVjdG9yaWVzIHRoaXMgaXMgYSBjb3JyZWN0bmVzc1xuMTIyNTpcdCAqIGlzc3VlLCBub3QgYSBcJiMzNDtQT1NJWCByZXF1aXJlbWVudFwmIzM0Oy5cbjEyMjY6XHQgKi9cbjEyMjc6XHRzdGF0aWMgaW5saW5lIGJvb2wgZmlsZV9uZWVkc19mX3Bvc19sb2NrKHN0cnVjdCBmaWxlICpmaWxlKVxuMTIyODpcdHtcbjEyMjk6XHRcdGlmICghKGZpbGUtXHUwMDNlZl9tb2RlIFx1MDAyNiBGTU9ERV9BVE9NSUNfUE9TKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNjo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTg2CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMTYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgeGF0dHIgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0aGVzZSBleHRlbmRlZCBhdHRyaWJ1dGVzIChgeGF0dHJgKSBmdW5jdGlvbnMgYXJlIGltcGxlbWVudGVkLCBhbmQgSSYjMzk7dmUgbm90aWNlZCBzb21ldGhpbmcuIEl0IHNlZW1zIHRoYXQgYGZkZ2V0YCB1c2VzIGBfX2ZnZXRfbGlnaHRgIHdpdGggYEZNT0RFX1BBVEhgLiBUaGF0JiMzOTtzIGltcG9ydGFudCBiZWNhdXNlIGl0IG1lYW5zIGFueSBmaWxlIGRlc2NyaXB0b3Igb3BlbmVkIHdpdGggYE9fUEFUSGAgd2lsbCBhdXRvbWF0aWNhbGx5IGZhaWwgd2hlbiBgZmRnZXRgIGlzIGNhbGxlZC4gSG93ZXZlciwgYGZkZ2V0X3Jhd2AgaXMgZGlmZmVyZW50IOKAkyBpdCB0YWtlcyBhIGAwYCBhcmd1bWVudCB3aGljaCBsZXRzIGl0IGhhbmRsZSB0aG9zZSBgT19QQVRIYCBmaWxlIGRlc2NyaXB0b3JzLgoKTm93IEkmIzM5O20gc2VlaW5nIHRoaXMgcGF0Y2gsIGFuZCBpdCYjMzk7cyBjaGFuZ2luZyBgc2V0eGF0dHJhdGAsIGBnZXR4YXR0cmF0YCwgYGxpc3R4YXR0cmF0YCwgYW5kIGByZW1vdmV4YXR0cmF0YCB0byB1c2UgYHJhdyA9IHRydWVgLiBUaGF0JiMzOTtzIHRoZSBrZXkuIFRoYXQgbWVhbnMgdGhlc2UgZnVuY3Rpb25zIHdpbGwgbm93IGJlIGFibGUgdG8gaGFuZGxlIGBPX1BBVEhgIGZpbGUgZGVzY3JpcHRvcnMsIGVmZmVjdGl2ZWx5IGJ5cGFzc2luZyB0aGUgYEZNT0RFX1BBVEhgIGNoZWNrIGFuZCBhbGxvd2luZyBhY2Nlc3Mgd2hlcmUgaXQgd2FzIHByZXZpb3VzbHkgYmxvY2tlZC4KCldhaXQgYSBzZWNvbmQuLi5JIGJlbGlldmUgYHNldHhhdHRyYXRgIGlzIHRoZSBuZXdlciBvbmUuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBpbiBgZnMveGF0dHIuY2AgdG8gY29uZmlybSBpdCYjMzk7cyBhIHN5c2NhbGwgYW5kIHZlcmlmeSB0aGUgZGV0YWlscyBvZiBpdHMgaW5jbHVzaW9uLiBKdXN0IG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gZnVsbHkgdXAgdG8gc3BlZWQgd2l0aCB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE2OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1NZU0NBTExfREVGSU5FLipzZXR4YXR0cmF0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3hhdHRyLmM9NzAxPXN0YXRpYyBpbnQgcGF0aF9zZXR4YXR0cmF0KGludCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICpwYXRobmFtZSxcbi0tXG5mcy94YXR0ci5jLTc0MC1cbmZzL3hhdHRyLmM6NzQxOlNZU0NBTExfREVGSU5FNihzZXR4YXR0cmF0LCBpbnQsIGRmZCwgY29uc3QgY2hhciBfX3VzZXIgKiwgcGF0aG5hbWUsIHVuc2lnbmVkIGludCwgYXRfZmxhZ3MsXG5mcy94YXR0ci5jLTc0Mi1cdFx0Y29uc3QgY2hhciBfX3VzZXIgKiwgbmFtZSwgY29uc3Qgc3RydWN0IHhhdHRyX2FyZ3MgX191c2VyICosIHVhcmdzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE2OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxNzMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBOZXcgWGF0dHIgU3lzY2FsbHMqKgoKT2theSwgc28gSSBzZWUgdGhlc2UgbmV3IHN5c2NhbGxzIOKAkyBgc2V0eGF0dHJhdGAsIGBnZXR4YXR0cmF0YCwgYGxpc3R4YXR0cmF0YCwgYW5kIGByZW1vdmV4YXR0cmF0YC4gVGhleSYjMzk7cmUgZGVzaWduZWQgdG8gd29yayB3aXRoIGV4dGVuZGVkIGF0dHJpYnV0ZXMsIHdoaWNoIGlzIHVzZWZ1bC4gVGhlIHBhdGNoIGZvY3VzZXMgb24gYWxsb3dpbmcgdGhlc2UgdG8gb3BlcmF0ZSB3aXRoIGBPX1BBVEhgIGZpbGUgZGVzY3JpcHRvcnMgd2hlbiBgZGZkYCBpcyBhbHNvIGluIHVzZS4KCk5vdywgYSBiaXQgb2YgYSB3cmlua2xlIGhlcmUuIElmIGBkZmRgICppcyogYW4gYE9fUEFUSGAgZmlsZSBkZXNjcmlwdG9yLCBhbmQgYHBhdGhuYW1lYCBpcyBlbXB0eSAoYEFUX0VNUFRZX1BBVEhgIGZsYWcgaW4gdXNlKSwgZG9lcyBpdCBtZWFuIHRoZSBjYWxscyBkaXJlY3RseSBvcGVyYXRlIG9uIHRoYXQgYE9fUEFUSGAgZGVzY3JpcHRvciBpdHNlbGY/IFRoYXQmIzM5O3MgdGhlIGNvcmUgcXVlc3Rpb24uIEkgc2hvdWxkIHByb2JhYmx5IGRpZyBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiwgc3BlY2lmaWNhbGx5LCB0aGUgYHBhdGhfc2V0eGF0dHJhdGAgZnVuY3Rpb24gaW4gYGZzL3hhdHRyLmNgIHRvIGNvbmZpcm0gdGhlIGJlaGF2aW91ci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMTY6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy94YXR0ci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3MjA6XHRcdGlmICghKGF0X2ZsYWdzIFx1MDAyNiBBVF9TWU1MSU5LX05PRk9MTE9XKSlcbiA3MjE6XHRcdFx0bG9va3VwX2ZsYWdzID0gTE9PS1VQX0ZPTExPVztcbiA3MjI6XHRcbiA3MjM6XHRcdGVycm9yID0gc2V0eGF0dHJfY29weShuYW1lLCBcdTAwMjZjdHgpO1xuIDcyNDpcdFx0aWYgKGVycm9yKVxuIDcyNTpcdFx0XHRyZXR1cm4gZXJyb3I7XG4gNzI2Olx0XG4gNzI3Olx0XHRDTEFTUyhmaWxlbmFtZV9tYXliZV9udWxsLCBmaWxlbmFtZSkocGF0aG5hbWUsIGF0X2ZsYWdzKTtcbiA3Mjg6XHRcdGlmICghZmlsZW5hbWUgXHUwMDI2XHUwMDI2IGRmZCBcdTAwM2U9IDApIHtcbiA3Mjk6XHRcdFx0Q0xBU1MoZmRfbWF5YmVfcmF3LCBmKShkZmQsIHJhdyk7XG4gNzMwOlx0XHRcdGlmIChmZF9lbXB0eShmKSlcbiA3MzE6XHRcdFx0XHRlcnJvciA9IC1FQkFERjtcbiA3MzI6XHRcdFx0ZWxzZVxuIDczMzpcdFx0XHRcdGVycm9yID0gZmlsZV9zZXR4YXR0cihmZF9maWxlKGYpLCBcdTAwMjZjdHgpO1xuIDczNDpcdFx0fSBlbHNlIHtcbiA3MzU6XHRcdFx0ZXJyb3IgPSBmaWxlbmFtZV9zZXR4YXR0cihkZmQsIGZpbGVuYW1lLCBsb29rdXBfZmxhZ3MsIFx1MDAyNmN0eCk7XG4gNzM2Olx0XHR9XG4gNzM3Olx0XHRrdmZyZWUoY3R4Lmt2YWx1ZSk7XG4gNzM4Olx0XHRyZXR1cm4gZXJyb3I7XG4gNzM5Olx0fVxuIDc0MDpcdFxuIDc0MTpcdFNZU0NBTExfREVGSU5FNihzZXR4YXR0cmF0LCBpbnQsIGRmZCwgY29uc3QgY2hhciBfX3VzZXIgKiwgcGF0aG5hbWUsIHVuc2lnbmVkIGludCwgYXRfZmxhZ3MsXG4gNzQyOlx0XHRcdGNvbnN0IGNoYXIgX191c2VyICosIG5hbWUsIGNvbnN0IHN0cnVjdCB4YXR0cl9hcmdzIF9fdXNlciAqLCB1YXJncyxcbiA3NDM6XHRcdFx0c2l6ZV90LCB1c2l6ZSlcbiA3NDQ6XHR7XG4gNzQ1Olx0XHRzdHJ1Y3QgeGF0dHJfYXJncyBhcmdzID0ge307XG4gNzQ2Olx0XHRpbnQgZXJyb3I7XG4gNzQ3Olx0XG4gNzQ4Olx0XHRCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCB4YXR0cl9hcmdzKSBcdTAwM2MgWEFUVFJfQVJHU19TSVpFX1ZFUjApO1xuIDc0OTpcdFx0QlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgeGF0dHJfYXJncykgIT0gWEFUVFJfQVJHU19TSVpFX0xBVEVTVCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE2OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwMTIKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBBdHRyaWJ1dGUgU2V0dGluZyBMb2dpYyoqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgY29kZSwgYGZpbGVuYW1lX21heWJlX251bGxgIGludGVsbGlnZW50bHkgaGFuZGxlcyB0aGUgbnVsbCBmaWxlbmFtZSBzaXR1YXRpb24uIEl0IHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGlmIHRoZSBgcGF0aG5hbWVgIGlzIGVtcHR5IGFuZCBgQVRfRU1QVFlfUEFUSGAgaXMgZ2l2ZW4sIHdlIGdldCBudWxsIGJhY2sgZnJvbSB0aGUgZnVuY3Rpb24uIElmIGBmaWxlbmFtZWAgaXMgYWJzZW50LCBpdCBtb3ZlcyBvbiBhbmQgdXNlcyBgZGZkYCBkaXJlY3RseS4gVGhlbiwgYENMQVNTKGZkX21heWJlX3JhdywgZikoZGZkLCByYXcpYCBpcyB1c2VkIHRvIHJldHJpZXZlIHRoZSBmaWxlIGRlc2NyaXB0b3Ig4oCTIHRoYXQgcGFydCBpcyBjbGVhci4gQW5kIHRoZSBgcmF3YCBmbGFnIGlzIHRoZXJlIHRvIGFsbG93IGZvciBgT19QQVRIYCBmaWxlIGRlc2NyaXB0b3JzLgoKQWxyaWdodCwgc28gZmFyIHNvIGdvb2QuIE5vdyBjb21lcyB0aGUgcGFydCBJIG5lZWQgdG8gZm9jdXMgb246IGBmaWxlX3NldHhhdHRyKGZkX2ZpbGUoZiksICZhbXA7Y3R4KWAuIFRoZSBxdWVzdGlvbiB0aGF0IHNwcmluZ3MgdG8gbWluZCwgYW5kIGl0JiMzOTtzIGEgY3JpdGljYWwgb25lLCBpcyB3aGV0aGVyIGBmaWxlX3NldHhhdHRyYCBhY3R1YWxseSBzdXBwb3J0cyBiZWluZyBjYWxsZWQgd2l0aCBgT19QQVRIYCBmaWxlIGRlc2NyaXB0b3JzLiBJJiMzOTttIHJlYXNvbmFibHkgc3VyZSwgYnV0IEkgbmVlZCB0byBjb25maXJtIHRoaXMuIEJlc3QgdG8gZG91YmxlLWNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBmaWxlX3NldHhhdHRyYCBqdXN0IHRvIGJlIGNvbXBsZXRlbHkgY2VydGFpbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBleHRlbmRlZCBhdHRyaWJ1dGUgc2V0dGluZyBpcyBnb2luZyB0byB3b3JrIHdpdGggYW4gYE9fUEFUSGAgZGVzY3JpcHRvciBiZWZvcmUgSSBjYW4gYmUgY29uZmlkZW50IHRoYXQgdGhpcyBjb2RlIGZ1bmN0aW9ucyBhcyBpbnRlbmRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMTY6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW50IGZpbGVfc2V0eGF0dHImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvaW50ZXJuYWwuaD0yOTQ9c3NpemVfdCBmaWxlbmFtZV9nZXR4YXR0cihpbnQgZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKmZpbGVuYW1lLFxuZnMvaW50ZXJuYWwuaC0yOTUtXHRcdFx0ICB1bnNpZ25lZCBpbnQgbG9va3VwX2ZsYWdzLCBzdHJ1Y3Qga2VybmVsX3hhdHRyX2N0eCAqY3R4KTtcbmZzL2ludGVybmFsLmg6Mjk2OmludCBmaWxlX3NldHhhdHRyKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qga2VybmVsX3hhdHRyX2N0eCAqY3R4KTtcbmZzL2ludGVybmFsLmgtMjk3LWludCBmaWxlbmFtZV9zZXR4YXR0cihpbnQgZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKmZpbGVuYW1lLFxuLS1cbmZzL3hhdHRyLmM9NjU1PXN0YXRpYyBpbnQgZG9fc2V0eGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi0tXG5mcy94YXR0ci5jLTY2NS1cbmZzL3hhdHRyLmM6NjY2OmludCBmaWxlX3NldHhhdHRyKHN0cnVjdCBmaWxlICpmLCBzdHJ1Y3Qga2VybmVsX3hhdHRyX2N0eCAqY3R4KVxuZnMveGF0dHIuYy02Njcte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNjo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NjY4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyB0aGUgYGZpbGVfc2V0eGF0dHJgIEZ1bmN0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBUaGUgdGFzayBpcyB0byBleGFtaW5lIHRoZSBgZmlsZV9zZXR4YXR0cmAgZnVuY3Rpb24sIHByZXN1bWFibHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIHNvbWUgbGFyZ2VyIHN5c3RlbSwgbGlrZWx5IGEgZmlsZSBzeXN0ZW0gb3Iga2VybmVsIG1vZHVsZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoYXQmIzM5O3MgdGhlIGJyb2FkZXIgcHVycG9zZT8gSXMgdGhpcyByZWxhdGVkIHRvIGV4dGVuZGVkIGF0dHJpYnV0ZXMgaW4gYSBtb3JlIGdlbmVyYWwgc2Vuc2UsIG9yIGlzIHRoaXMgYSBwYXJ0aWN1bGFyIGltcGxlbWVudGF0aW9uIGZvciBhIHNwZWNpZmljIGZpbGUgc3lzdGVtIGxpa2UgZXh0NCwgWEZTLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gS25vd2luZyB0aGUgdGFyZ2V0IHdvdWxkIGdpdmUgY3J1Y2lhbCBjb250ZXh0LgoKTmV4dCwgSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgaW1wbGVtZW50YXRpb24gZGV0YWlscy4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBmb2N1cyBvbiBlcnJvciBoYW5kbGluZy4gRXh0ZW5kZWQgYXR0cmlidXRlcyBjYW4gYmUgdHJpY2t5IHRvIG1hbmFnZTsgSSYjMzk7bGwgd2FudCB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyB2YXJpb3VzIGVycm9yIGNhc2VzLCBsaWtlIHBlcm1pc3Npb25zIGlzc3VlcywgaW5zdWZmaWNpZW50IHNwYWNlIGZvciB0aGUgYXR0cmlidXRlLCBvciBpbnZhbGlkIGF0dHJpYnV0ZSBuYW1lcyBvciB2YWx1ZXMuIFNlY3VyaXR5IGlzIGEgcGFyYW1vdW50IGNvbmNlcm4gd2l0aCB4YXR0cnMsIHNvIEkmIzM5O2xsIG1ldGljdWxvdXNseSBzY3J1dGluaXplIHRoZSBjb2RlIGZvciBhbnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcywgbGlrZSByYWNlIGNvbmRpdGlvbnMgdGhhdCBjb3VsZCBsZWFkIHRvIFRPQ1RPVSBidWdzLgoKQWxzbywgZGF0YSBjb25zaXN0ZW5jeSB3aWxsIGJlIHZlcnkgaW1wb3J0YW50LiBJZiB0aGUgZnVuY3Rpb24gZmFpbHMgcGFydHdheSB0aHJvdWdoIHNldHRpbmcgYW4geGF0dHIsIGhvdyBkb2VzIGl0IG1haW50YWluIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIGZpbGVzeXN0ZW0/IEFyZSB0aGVyZSBzdWZmaWNpZW50IGpvdXJuYWxpbmcgb3IgYXRvbWljIG9wZXJhdGlvbnMgdG8gZW5zdXJlIHRoYXQgd2UgZG9uJiMzOTt0IGVuZCB1cCB3aXRoIHBhcnRpYWxseSB3cml0dGVuIGF0dHJpYnV0ZXMgb3IgaW5jb25zaXN0ZW50IG1ldGFkYXRhPyBQZXJmb3JtYW5jZSB3aWxsIGJlIGFub3RoZXIgYXNwZWN0IEkgd2lsbCBsb29rIGludG8uIFNpbmNlIGl0IGlzIGJlaW5nIGNhbGxlZCB0byBkbyB0aGlzIG9wZXJhdGlvbiwgaXMgdGhlIHNldHRpbmcgb2YgZXh0ZW5kZWQgYXR0cmlidXRlcyBjYXVzaW5nIGEgcGVyZm9ybWFuY2UgYm90dGxlbmVjaz8KCkZpbmFsbHksIGhvdyBkb2VzIGl0IGludGVyYWN0IHdpdGggb3RoZXIgY29tcG9uZW50cz8gRG9lcyBpdCBjYWxsIGludG8gYW55IG90aGVyIGludGVybmFsIGZ1bmN0aW9ucyBvciBzeXN0ZW0gY2FsbHM/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGRlYWRsb2NrcyBvciBjb25jdXJyZW5jeSBpc3N1ZXMgdGhhdCBuZWVkIHRvIGJlIGFkZHJlc3NlZD8gQW55IGRvY3VtZW50YXRpb24gb3IgY29tbWVudHMgaW4gdGhlIGNvZGUgaXRzZWxmLCBkZXNjcmliaW5nIHRoZSBleHBlY3RlZCBiZWhhdmlvciBhbmQgdXNhZ2Ugc2NlbmFyaW9zIHdpbGwgYmUgaGVscGZ1bCBhcyBJIGRpdmUgZGVlcGVyIGludG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE2OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMveGF0dHIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY2NiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjY2Olx0aW50IGZpbGVfc2V0eGF0dHIoc3RydWN0IGZpbGUgKmYsIHN0cnVjdCBrZXJuZWxfeGF0dHJfY3R4ICpjdHgpXG4gNjY3Olx0e1xuIDY2ODpcdFx0aW50IGVycm9yID0gbW50X3dhbnRfd3JpdGVfZmlsZShmKTtcbiA2Njk6XHRcbiA2NzA6XHRcdGlmICghZXJyb3IpIHtcbiA2NzE6XHRcdFx0YXVkaXRfZmlsZShmKTtcbiA2NzI6XHRcdFx0ZXJyb3IgPSBkb19zZXR4YXR0cihmaWxlX21udF9pZG1hcChmKSwgZi1cdTAwM2VmX3BhdGguZGVudHJ5LCBjdHgpO1xuIDY3MzpcdFx0XHRtbnRfZHJvcF93cml0ZV9maWxlKGYpO1xuIDY3NDpcdFx0fVxuIDY3NTpcdFx0cmV0dXJuIGVycm9yO1xuIDY3NjpcdH1cbiA2Nzc6XHRcbiA2Nzg6XHRpbnQgZmlsZW5hbWVfc2V0eGF0dHIoaW50IGRmZCwgc3RydWN0IGZpbGVuYW1lICpmaWxlbmFtZSxcbiA2Nzk6XHRcdFx0ICAgICAgdW5zaWduZWQgaW50IGxvb2t1cF9mbGFncywgc3RydWN0IGtlcm5lbF94YXR0cl9jdHggKmN0eClcbiA2ODA6XHR7XG4gNjgxOlx0XHRzdHJ1Y3QgcGF0aCBwYXRoO1xuIDY4MjpcdFx0aW50IGVycm9yO1xuIDY4MzpcdFxuIDY4NDpcdHJldHJ5OlxuIDY4NTpcdFx0ZXJyb3IgPSBmaWxlbmFtZV9sb29rdXAoZGZkLCBmaWxlbmFtZSwgbG9va3VwX2ZsYWdzLCBcdTAwMjZwYXRoLCBOVUxMKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMTY6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQwMgoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDEwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgV3JpdGUgUGVybWlzc2lvbnMgd2l0aCBPX1BBVEggRmlsZSBEZXNjcmlwdG9ycyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYG1udF93YW50X3dyaXRlX2ZpbGUoZilgLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIHRoYXQgcG9wcyBpbnRvIG15IGhlYWQgaXMsIGRvZXMgdGhpcyBmdW5jdGlvbiBiZWhhdmUgY29ycmVjdGx5IHdoZW4gZGVhbGluZyB3aXRoIGZpbGUgZGVzY3JpcHRvcnMgb3BlbmVkIHdpdGggYE9fUEFUSGA/IEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgdGhpcyBpcyBoYW5kbGVkIHByb3Blcmx5LiBOb3csIGlmIGBmYCAqaXMqIGFuIGBPX1BBVEhgIGRlc2NyaXB0b3IsIHRoZW4gSSBrbm93IHRoYXQgYGZpbGVfbW50X2lkbWFwKGYpYCBhbmQgYGYtJmd0O2ZfcGF0aC5kZW50cnlgIGFyZSB2YWxpZCBhbmQgYWNjZXNzaWJsZS4gQnV0LCBzdGlsbCwgSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBgbW50X3dhbnRfd3JpdGVfZmlsZWAgaXRzZWxmIGhhcyBhbnkgaGlkZGVuIGlzc3VlcyBvciBhc3N1bXB0aW9ucyB0aGF0IG1pZ2h0IGNhdXNlIGEgcHJvYmxlbSBzcGVjaWZpY2FsbHkgd2l0aCBgT19QQVRIYCBkZXNjcmlwdG9ycy4gVGhlIHNhZmVzdCBwYXRoIGlzIHRvIGdvIGFoZWFkIGFuZCBkaXZlIGludG8gdGhlIHNvdXJjZSBjb2RlIGZvciBgbW50X3dhbnRfd3JpdGVfZmlsZWAgZGlyZWN0bHkuIFRpbWUgdG8gc2NydXRpbml6ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMTY6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW50X3dhbnRfd3JpdGVfZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNTU5IGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvcnRpbmcucnN0PTg4Mz1iZWVuIGNhbGxlZCBvciByZXR1cm5lZCB3aXRoIG5vbiAtRUlPQ0JRVUVVRUQgY29kZS5cbi0tXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvcnRpbmcucnN0LTg4OC1cbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3Q6ODg5Om1udF93YW50X3dyaXRlX2ZpbGUoKSBjYW4gbm93IG9ubHkgYmUgcGFpcmVkIHdpdGggbW50X2Ryb3Bfd3JpdGVfZmlsZSgpLFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nLnJzdC04OTAtd2hlcmVhcyBwcmV2aW91c2x5IGl0IGNvdWxkIGJlIHBhaXJlZCB3aXRoIG1udF9kcm9wX3dyaXRlKCkgYXMgd2VsbC5cbi0tXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3hmcy94ZnMtb25saW5lLWZzY2stZGVzaWduLnJzdD0zMjA2PXRvIGF2b2lkIGRlYWRsb2Nrczpcbi0tXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3hmcy94ZnMtb25saW5lLWZzY2stZGVzaWduLnJzdC0zMjA5LVxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy94ZnMveGZzLW9ubGluZS1mc2NrLWRlc2lnbi5yc3Q6MzIxMDoyLiBGaWxlc3lzdGVtIGZyZWV6ZSBwcm90ZWN0aW9uLCBpZiByZXBhaXJpbmcgKGBgbW50X3dhbnRfd3JpdGVfZmlsZWBgKS5cbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMveGZzL3hmcy1vbmxpbmUtZnNjay1kZXNpZ24ucnN0LTMyMTEtXG4tLVxuZnMvYnRyZnMvaW9jdGwuYz05ODU9c3RhdGljIG5vaW5saW5lIGludCBidHJmc19pb2N0bF9yZXNpemUoc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxuZnMvYnRyZnMvaW9jdGwuYy0xMDA0LVxuZnMvYnRyZnMvaW9jdGwuYzoxMDA1Olx0cmV0ID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxlKTtcbmZzL2J0cmZzL2lvY3RsLmMtMTAwNi1cdGlmIChyZXQpXG4tLVxuZnMvYnRyZnMvaW9jdGwuYz0xMTM4PXN0YXRpYyBub2lubGluZSBpbnQgX19idHJmc19pb2N0bF9zbmFwX2NyZWF0ZShzdHJ1Y3QgZmlsZSAqZmlsZSxcbi0tXG5mcy9idHJmcy9pb2N0bC5jLTExNDktXG5mcy9idHJmcy9pb2N0bC5jOjExNTA6XHRyZXQgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbGUpO1xuZnMvYnRyZnMvaW9jdGwuYy0xMTUxLVx0aWYgKHJldClcbi0tXG5mcy9idHJmcy9pb2N0bC5jPTEyOTQ9c3RhdGljIG5vaW5saW5lIGludCBidHJmc19pb2N0bF9zdWJ2b2xfc2V0ZmxhZ3Moc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxuZnMvYnRyZnMvaW9jdGwuYy0xMzA3LVxuZnMvYnRyZnMvaW9jdGwuYzoxMzA4Olx0cmV0ID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxlKTtcbmZzL2J0cmZzL2lvY3RsLmMtMTMwOS1cdGlmIChyZXQpXG4tLVxuZnMvYnRyZnMvaW9jdGwuYz0yMjE3PXN0YXRpYyBub2lubGluZSBpbnQgYnRyZnNfaW9jdGxfc25hcF9kZXN0cm95KHN0cnVjdCBmaWxlICpmaWxlLFxuLS1cbmZzL2J0cmZzL2lvY3RsLmMtMjI1OS1cbmZzL2J0cmZzL2lvY3RsLmM6MjI2MDpcdFx0XHRyZXQgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbGUpO1xuZnMvYnRyZnMvaW9jdGwuYy0yMjYxLVx0XHRcdGlmIChyZXQpXG4tLVxuZnMvYnRyZnMvaW9jdGwuYy0yMjY4LVxuZnMvYnRyZnMvaW9jdGwuYzoyMjY5Olx0XHRcdHJldCA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlsZSk7XG5mcy9idHJmcy9pb2N0bC5jLTIyNzAtXHRcdFx0aWYgKHJldClcbi0tXG5mcy9idHJmcy9pb2N0bC5jLTIzNDQtXG5mcy9idHJmcy9pb2N0bC5jOjIzNDU6XHRcdHJldCA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlsZSk7XG5mcy9idHJmcy9pb2N0bC5jLTIzNDYtXHRcdGlmIChyZXQpXG4tLVxuZnMvYnRyZnMvaW9jdGwuYz0yNDMxPXN0YXRpYyBpbnQgYnRyZnNfaW9jdGxfZGVmcmFnKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkIF9fdXNlciAqYXJncClcbi0tXG5mcy9idHJmcy9pb2N0bC5jLTI0MzctXG5mcy9idHJmcy9pb2N0bC5jOjI0Mzg6XHRyZXQgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbGUpO1xuZnMvYnRyZnMvaW9jdGwuYy0yNDM5LVx0aWYgKHJldClcbi0tXG5mcy9idHJmcy9pb2N0bC5jPTI1NzA9c3RhdGljIGxvbmcgYnRyZnNfaW9jdGxfcm1fZGV2X3YyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkIF9fdXNlciAqYXJnKVxuLS1cbmZzL2J0cmZzL2lvY3RsLmMtMjYwNS1cbmZzL2J0cmZzL2lvY3RsLmM6MjYwNjpcdHJldCA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlsZSk7XG5mcy9idHJmcy9pb2N0bC5jLTI2MDctXHRpZiAocmV0KVxuLS1cbmZzL2J0cmZzL2lvY3RsLmM9MjYzNz1zdGF0aWMgbG9uZyBidHJmc19pb2N0bF9ybV9kZXYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgX191c2VyICphcmcpXG4tLVxuZnMvYnRyZnMvaW9jdGwuYy0yNjY1LVxuZnMvYnRyZnMvaW9jdGwuYzoyNjY2Olx0cmV0ID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxlKTtcbmZzL2J0cmZzL2lvY3RsLmMtMjY2Ny1cdGlmIChyZXQpXG4tLVxuZnMvYnRyZnMvaW9jdGwuYz0yNzgwPXN0YXRpYyBsb25nIGJ0cmZzX2lvY3RsX2RlZmF1bHRfc3Vidm9sKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkIF9fdXNlciAqYXJncClcbi0tXG5mcy9idHJmcy9pb2N0bC5jLTI3OTctXG5mcy9idHJmcy9pb2N0bC5jOjI3OTg6XHRyZXQgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbGUpO1xuZnMvYnRyZnMvaW9jdGwuYy0yNzk5LVx0aWYgKHJldClcbi0tXG5mcy9idHJmcy9pb2N0bC5jPTMwNTg9c3RhdGljIGxvbmcgYnRyZnNfaW9jdGxfc2NydWIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgX191c2VyICphcmcpXG4tLVxuZnMvYnRyZnMvaW9jdGwuYy0zMDc5LVx0aWYgKCEoc2EtXHUwMDNlZmxhZ3MgXHUwMDI2IEJUUkZTX1NDUlVCX1JFQURPTkxZKSkge1xuZnMvYnRyZnMvaW9jdGwuYzozMDgwOlx0XHRyZXQgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbGUpO1xuZnMvYnRyZnMvaW9jdGwuYy0zMDgxLVx0XHRpZiAocmV0KVxuLS1cbmZzL2J0cmZzL2lvY3RsLmM9MzQwNj1zdGF0aWMgbG9uZyBidHJmc19pb2N0bF9iYWxhbmNlKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkIF9fdXNlciAqYXJnKVxuLS1cbmZzL2J0cmZzL2lvY3RsLmMtMzQxNy1cbmZzL2J0cmZzL2lvY3RsLmM6MzQxODpcdHJldCA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlsZSk7XG5mcy9idHJmcy9pb2N0bC5jLTM0MTktXHRpZiAocmV0KVxuLS1cbmZzL2J0cmZzL2lvY3RsLmM9MzU0Mz1zdGF0aWMgbG9uZyBidHJmc19pb2N0bF9xdW90YV9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgX191c2VyICphcmcpXG4tLVxuZnMvYnRyZnMvaW9jdGwuYy0zNTUyLVxuZnMvYnRyZnMvaW9jdGwuYzozNTUzOlx0cmV0ID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxlKTtcbmZzL2J0cmZzL2lvY3RsLmMtMzU1NC1cdGlmIChyZXQpXG4tLVxuZnMvYnRyZnMvaW9jdGwuYz0zNjExPXN0YXRpYyBsb25nIGJ0cmZzX2lvY3RsX3Fncm91cF9hc3NpZ24oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgX191c2VyICphcmcpXG4tLVxuZnMvYnRyZnMvaW9jdGwuYy0zNjI3LVxuZnMvYnRyZnMvaW9jdGwuYzozNjI4Olx0cmV0ID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxlKTtcbmZzL2J0cmZzL2lvY3RsLmMtMzYyOS1cdGlmIChyZXQpXG4tLVxuZnMvYnRyZnMvaW9jdGwuYz0zNjgxPXN0YXRpYyBsb25nIGJ0cmZzX2lvY3RsX3Fncm91cF9jcmVhdGUoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgX191c2VyICphcmcpXG4tLVxuZnMvYnRyZnMvaW9jdGwuYy0zNjk1LVxuZnMvYnRyZnMvaW9jdGwuYzozNjk2Olx0cmV0ID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxlKTtcbmZzL2J0cmZzL2lvY3RsLmMtMzY5Ny1cdGlmIChyZXQpXG4tLVxuZnMvYnRyZnMvaW9jdGwuYz0zNzQxPXN0YXRpYyBsb25nIGJ0cmZzX2lvY3RsX3Fncm91cF9saW1pdChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCBfX3VzZXIgKmFyZylcbi0tXG5mcy9idHJmcy9pb2N0bC5jLTM3NTYtXG5mcy9idHJmcy9pb2N0bC5jOjM3NTc6XHRyZXQgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbGUpO1xuZnMvYnRyZnMvaW9jdGwuYy0zNzU4LVx0aWYgKHJldClcbi0tXG5mcy9idHJmcy9pb2N0bC5jPTM3OTE9c3RhdGljIGxvbmcgYnRyZnNfaW9jdGxfcXVvdGFfcmVzY2FuKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkIF9fdXNlciAqYXJnKVxuLS1cbmZzL2J0cmZzL2lvY3RsLmMtMzgwMy1cbmZzL2J0cmZzL2lvY3RsLmM6MzgwNDpcdHJldCA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlsZSk7XG5mcy9idHJmcy9pb2N0bC5jLTM4MDUtXHRpZiAocmV0KVxuLS1cbmZzL2J0cmZzL2lvY3RsLmM9Mzg1Mz1zdGF0aWMgbG9uZyBfYnRyZnNfaW9jdGxfc2V0X3JlY2VpdmVkX3N1YnZvbChzdHJ1Y3QgZmlsZSAqZmlsZSxcbi0tXG5mcy9idHJmcy9pb2N0bC5jLTM4NjgtXG5mcy9idHJmcy9pb2N0bC5jOjM4Njk6XHRyZXQgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbGUpO1xuZnMvYnRyZnMvaW9jdGwuYy0zODcwLVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5mcy9idHJmcy9pb2N0bC5jPTQwNTI9c3RhdGljIGludCBidHJmc19pb2N0bF9zZXRfZnNsYWJlbChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCBfX3VzZXIgKmFyZylcbi0tXG5mcy9idHJmcy9pb2N0bC5jLTQwNzQtXG5mcy9idHJmcy9pb2N0bC5jOjQwNzU6XHRyZXQgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbGUpO1xuZnMvYnRyZnMvaW9jdGwuYy00MDc2LVx0aWYgKHJldClcbi0tXG5mcy9idHJmcy9pb2N0bC5jPTQxOTI9c3RhdGljIGludCBidHJmc19pb2N0bF9zZXRfZmVhdHVyZXMoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgX191c2VyICphcmcpXG4tLVxuZnMvYnRyZnMvaW9jdGwuYy00MjI4LVxuZnMvYnRyZnMvaW9jdGwuYzo0MjI5Olx0cmV0ID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxlKTtcbmZzL2J0cmZzL2lvY3RsLmMtNDIzMC1cdGlmIChyZXQpXG4tLVxuZnMvY2FjaGVmaWxlcy94YXR0ci5jPTM5PWludCBjYWNoZWZpbGVzX3NldF9vYmplY3RfeGF0dHIoc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0ICpvYmplY3QpXG4tLVxuZnMvY2FjaGVmaWxlcy94YXR0ci5jLTY3LVx0aWYgKHJldCA9PSAwKSB7XG5mcy9jYWNoZWZpbGVzL3hhdHRyLmM6Njg6XHRcdHJldCA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlsZSk7XG5mcy9jYWNoZWZpbGVzL3hhdHRyLmMtNjktXHRcdGlmIChyZXQgPT0gMCkge1xuLS1cbmZzL2NyeXB0by9wb2xpY3kuYz01MDU9aW50IGZzY3J5cHRfaW9jdGxfc2V0X3BvbGljeShzdHJ1Y3QgZmlsZSAqZmlscCwgY29uc3Qgdm9pZCBfX3VzZXIgKmFyZylcbi0tXG5mcy9jcnlwdG8vcG9saWN5LmMtNTM5LVxuZnMvY3J5cHRvL3BvbGljeS5jOjU0MDpcdHJldCA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlscCk7XG5mcy9jcnlwdG8vcG9saWN5LmMtNTQxLVx0aWYgKHJldClcbi0tXG5mcy9leGZhdC9maWxlLmM9NDQ1PXN0YXRpYyBpbnQgZXhmYXRfaW9jdGxfc2V0X2F0dHJpYnV0ZXMoc3RydWN0IGZpbGUgKmZpbGUsIHUzMiBfX3VzZXIgKnVzZXJfYXR0cilcbi0tXG5mcy9leGZhdC9maWxlLmMtNDU3LVxuZnMvZXhmYXQvZmlsZS5jOjQ1ODpcdGVyciA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlsZSk7XG5mcy9leGZhdC9maWxlLmMtNDU5LVx0aWYgKGVycilcbi0tXG5mcy9leHQyL2lvY3RsLmM9NTQ9bG9uZyBleHQyX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5mcy9leHQyL2lvY3RsLmMtNzAtXHRcdFx0cmV0dXJuIC1FUEVSTTtcbmZzL2V4dDIvaW9jdGwuYzo3MTpcdFx0cmV0ID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxwKTtcbmZzL2V4dDIvaW9jdGwuYy03Mi1cdFx0aWYgKHJldClcbi0tXG5mcy9leHQyL2lvY3RsLmMtMTA3LVxuZnMvZXh0Mi9pb2N0bC5jOjEwODpcdFx0cmV0ID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxwKTtcbmZzL2V4dDIvaW9jdGwuYy0xMDktXHRcdGlmIChyZXQpXG4tLVxuZnMvZXh0NC9jcnlwdG8uYz04Mz1pbnQgZXh0NF9pb2N0bF9nZXRfZW5jcnlwdGlvbl9wd3NhbHQoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgX191c2VyICphcmcpXG4tLVxuZnMvZXh0NC9jcnlwdG8uYy05My1cdGlmICh1dWlkX2lzX3plcm8oc2JpLVx1MDAzZXNfZXMtXHUwMDNlc19lbmNyeXB0X3B3X3NhbHQpKSB7XG5mcy9leHQ0L2NyeXB0by5jOjk0Olx0XHRlcnIgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbHApO1xuZnMvZXh0NC9jcnlwdG8uYy05NS1cdFx0aWYgKGVycilcbi0tXG5mcy9leHQ0L2lvY3RsLmM9OTU0PXN0YXRpYyBsb25nIGV4dDRfaW9jdGxfZ3JvdXBfYWRkKHN0cnVjdCBmaWxlICpmaWxlLFxuLS1cbmZzL2V4dDQvaW9jdGwuYy05NzAtXG5mcy9leHQ0L2lvY3RsLmM6OTcxOlx0ZXJyID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxlKTtcbmZzL2V4dDQvaW9jdGwuYy05NzItXHRpZiAoZXJyKVxuLS1cbmZzL2V4dDQvaW9jdGwuYz0xMTE3PXN0YXRpYyBpbnQgZXh0NF9pb2N0bF9zZXRsYWJlbChzdHJ1Y3QgZmlsZSAqZmlscCwgY29uc3QgY2hhciBfX3VzZXIgKnVzZXJfbGFiZWwpXG4tLVxuZnMvZXh0NC9pb2N0bC5jLTExNDMtXG5mcy9leHQ0L2lvY3RsLmM6MTE0NDpcdHJldCA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlscCk7XG5mcy9leHQ0L2lvY3RsLmMtMTE0NS1cdGlmIChyZXQpXG4tLVxuZnMvZXh0NC9pb2N0bC5jPTEyMDU9c3RhdGljIGludCBleHQ0X2lvY3RsX3NldHV1aWQoc3RydWN0IGZpbGUgKmZpbHAsXG4tLVxuZnMvZXh0NC9pb2N0bC5jLTEyMzQtXG5mcy9leHQ0L2lvY3RsLmM6MTIzNTpcdHJldCA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlscCk7XG5mcy9leHQ0L2lvY3RsLmMtMTIzNi1cdGlmIChyZXQpXG4tLVxuZnMvZXh0NC9pb2N0bC5jPTEzOTA9c3RhdGljIGludCBleHQ0X2lvY3RsX3NldF90dW5lX3NiKHN0cnVjdCBmaWxlICpmaWxwLFxuLS1cbmZzL2V4dDQvaW9jdGwuYy0xNTI0LVxuZnMvZXh0NC9pb2N0bC5jOjE1MjU6XHRyZXQgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbHApO1xuZnMvZXh0NC9pb2N0bC5jLTE1MjYtXHRpZiAocmV0KVxuLS1cbmZzL2V4dDQvaW9jdGwuYz0xNTM4PXN0YXRpYyBsb25nIF9fZXh0NF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuZnMvZXh0NC9pb2N0bC5jLTE1NjctXG5mcy9leHQ0L2lvY3RsLmM6MTU2ODpcdFx0ZXJyID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxwKTtcbmZzL2V4dDQvaW9jdGwuYy0xNTY5LVx0XHRpZiAoZXJyKVxuLS1cbmZzL2V4dDQvaW9jdGwuYy0xNjE2LVxuZnMvZXh0NC9pb2N0bC5jOjE2MTc6XHRcdGVyciA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlscCk7XG5mcy9leHQ0L2lvY3RsLmMtMTYxOC1cdFx0aWYgKGVycilcbi0tXG5mcy9leHQ0L2lvY3RsLmMtMTY2MS1cbmZzL2V4dDQvaW9jdGwuYzoxNjYyOlx0XHRlcnIgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbHApO1xuZnMvZXh0NC9pb2N0bC5jLTE2NjMtXHRcdGlmIChlcnIpXG4tLVxuZnMvZXh0NC9pb2N0bC5jLTE2OTEtXG5mcy9leHQ0L2lvY3RsLmM6MTY5MjpcdFx0ZXJyID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxwKTtcbmZzL2V4dDQvaW9jdGwuYy0xNjkzLVx0XHRpZiAoZXJyKVxuLS1cbmZzL2V4dDQvaW9jdGwuYy0xNzEzLVxuZnMvZXh0NC9pb2N0bC5jOjE3MTQ6XHRcdGVyciA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlscCk7XG5mcy9leHQ0L2lvY3RsLmMtMTcxNS1cdFx0aWYgKGVycilcbi0tXG5mcy9leHQ0L2lvY3RsLmMtMTcyNi1cdFx0XHRyZXR1cm4gLUVCQURGO1xuZnMvZXh0NC9pb2N0bC5jOjE3Mjc6XHRcdGVyciA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlscCk7XG5mcy9leHQ0L2lvY3RsLmMtMTcyOC1cdFx0aWYgKGVycilcbi0tXG5mcy9leHQ0L2lvY3RsLmMtMTc0OC1cbmZzL2V4dDQvaW9jdGwuYzoxNzQ5Olx0XHRlcnIgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbHApO1xuZnMvZXh0NC9pb2N0bC5jLTE3NTAtXHRcdGlmIChlcnIpXG4tLVxuZnMvZjJmcy9maWxlLmM9MjI3OT1zdGF0aWMgaW50IGYyZnNfaW9jX3N0YXJ0X2F0b21pY193cml0ZShzdHJ1Y3QgZmlsZSAqZmlscCwgYm9vbCB0cnVuY2F0ZSlcbi0tXG5mcy9mMmZzL2ZpbGUuYy0yMjk5LVxuZnMvZjJmcy9maWxlLmM6MjMwMDpcdHJldCA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlscCk7XG5mcy9mMmZzL2ZpbGUuYy0yMzAxLVx0aWYgKHJldClcbi0tXG5mcy9mMmZzL2ZpbGUuYz0yMzkxPXN0YXRpYyBpbnQgZjJmc19pb2NfY29tbWl0X2F0b21pY193cml0ZShzdHJ1Y3QgZmlsZSAqZmlscClcbi0tXG5mcy9mMmZzL2ZpbGUuYy0yNDAyLVxuZnMvZjJmcy9maWxlLmM6MjQwMzpcdHJldCA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlscCk7XG5mcy9mMmZzL2ZpbGUuYy0yNDA0LVx0aWYgKHJldClcbi0tXG5mcy9mMmZzL2ZpbGUuYz0yNDI2PXN0YXRpYyBpbnQgZjJmc19pb2NfYWJvcnRfYXRvbWljX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxwKVxuLS1cbmZzL2YyZnMvZmlsZS5jLTI0MzctXG5mcy9mMmZzL2ZpbGUuYzoyNDM4Olx0cmV0ID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxwKTtcbmZzL2YyZnMvZmlsZS5jLTI0MzktXHRpZiAocmV0KVxuLS1cbmZzL2YyZnMvZmlsZS5jPTI1MjU9c3RhdGljIGludCBmMmZzX2lvY19zaHV0ZG93bihzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuZnMvZjJmcy9maWxlLmMtMjUzOS1cdGlmIChpbiAhPSBGMkZTX0dPSU5HX0RPV05fRlVMTFNZTkMpIHtcbmZzL2YyZnMvZmlsZS5jOjI1NDA6XHRcdHJldCA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlscCk7XG5mcy9mMmZzL2ZpbGUuYy0yNTQxLVx0XHRpZiAocmV0KSB7XG4tLVxuZnMvZjJmcy9maWxlLmM9MjYxNj1zdGF0aWMgaW50IGYyZnNfaW9jX2ZpdHJpbShzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuZnMvZjJmcy9maWxlLmMtMjYzMi1cbmZzL2YyZnMvZmlsZS5jOjI2MzM6XHRyZXQgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbHApO1xuZnMvZjJmcy9maWxlLmMtMjYzNC1cdGlmIChyZXQpXG4tLVxuZnMvZjJmcy9maWxlLmM9MjY4MT1zdGF0aWMgaW50IGYyZnNfaW9jX2dldF9lbmNyeXB0aW9uX3B3c2FsdChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuZnMvZjJmcy9maWxlLmMtMjY5MC1cbmZzL2YyZnMvZmlsZS5jOjI2OTE6XHRlcnIgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbHApO1xuZnMvZjJmcy9maWxlLmMtMjY5Mi1cdGlmIChlcnIpXG4tLVxuZnMvZjJmcy9maWxlLmM9Mjc3Mj1zdGF0aWMgaW50IGYyZnNfaW9jX2djKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5mcy9mMmZzL2ZpbGUuYy0yNzkxLVxuZnMvZjJmcy9maWxlLmM6Mjc5MjpcdHJldCA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlscCk7XG5mcy9mMmZzL2ZpbGUuYy0yNzkzLVx0aWYgKHJldClcbi0tXG5mcy9mMmZzL2ZpbGUuYz0yODE1PXN0YXRpYyBpbnQgX19mMmZzX2lvY19nY19yYW5nZShzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGYyZnNfZ2NfcmFuZ2UgKnJhbmdlKVxuLS1cbmZzL2YyZnMvZmlsZS5jLTI4MzYtXG5mcy9mMmZzL2ZpbGUuYzoyODM3Olx0cmV0ID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxwKTtcbmZzL2YyZnMvZmlsZS5jLTI4MzgtXHRpZiAocmV0KVxuLS1cbmZzL2YyZnMvZmlsZS5jPTI4Nzc9c3RhdGljIGludCBmMmZzX2lvY193cml0ZV9jaGVja3BvaW50KHN0cnVjdCBmaWxlICpmaWxwKVxuLS1cbmZzL2YyZnMvZmlsZS5jLTI4OTMtXG5mcy9mMmZzL2ZpbGUuYzoyODk0Olx0cmV0ID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxwKTtcbmZzL2YyZnMvZmlsZS5jLTI4OTUtXHRpZiAocmV0KVxuLS1cbmZzL2YyZnMvZmlsZS5jPTMwNzA9c3RhdGljIGludCBmMmZzX2lvY19kZWZyYWdtZW50KHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5mcy9mMmZzL2ZpbGUuYy0zMDk3LVxuZnMvZjJmcy9maWxlLmM6MzA5ODpcdGVyciA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlscCk7XG5mcy9mMmZzL2ZpbGUuYy0zMDk5LVx0aWYgKGVycilcbi0tXG5mcy9mMmZzL2ZpbGUuYz0zMjU1PXN0YXRpYyBpbnQgX19mMmZzX2lvY19tb3ZlX3JhbmdlKHN0cnVjdCBmaWxlICpmaWxwLFxuLS1cbmZzL2YyZnMvZmlsZS5jLTMyNzAtXG5mcy9mMmZzL2ZpbGUuYzozMjcxOlx0ZXJyID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxwKTtcbmZzL2YyZnMvZmlsZS5jLTMyNzItXHRpZiAoZXJyKVxuLS1cbmZzL2YyZnMvZmlsZS5jPTMyOTI9c3RhdGljIGludCBmMmZzX2lvY19mbHVzaF9kZXZpY2Uoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmZzL2YyZnMvZmlsZS5jLTMzMjYtXG5mcy9mMmZzL2ZpbGUuYzozMzI3Olx0cmV0ID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxwKTtcbmZzL2YyZnMvZmlsZS5jLTMzMjgtXHRpZiAocmV0KVxuLS1cbmZzL2YyZnMvZmlsZS5jPTM1Mjk9c3RhdGljIGludCBmMmZzX2lvY19zZXRfcGluX2ZpbGUoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmZzL2YyZnMvZmlsZS5jLTM1NDctXG5mcy9mMmZzL2ZpbGUuYzozNTQ4Olx0cmV0ID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxwKTtcbmZzL2YyZnMvZmlsZS5jLTM1NDktXHRpZiAocmV0KVxuLS1cbmZzL2YyZnMvZmlsZS5jPTM3NTE9c3RhdGljIGludCBmMmZzX2lvY19zZXRmc2xhYmVsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5mcy9mMmZzL2ZpbGUuYy0zNzY0LVxuZnMvZjJmcy9maWxlLmM6Mzc2NTpcdGVyciA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlscCk7XG5mcy9mMmZzL2ZpbGUuYy0zNzY2LVx0aWYgKGVycilcbi0tXG5mcy9mMmZzL2ZpbGUuYz0zODY2PXN0YXRpYyBpbnQgZjJmc19yZWxlYXNlX2NvbXByZXNzX2Jsb2NrcyhzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuZnMvZjJmcy9maWxlLmMtMzg4Mi1cbmZzL2YyZnMvZmlsZS5jOjM4ODM6XHRyZXQgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbHApO1xuZnMvZjJmcy9maWxlLmMtMzg4NC1cdGlmIChyZXQpXG4tLVxuZnMvZjJmcy9maWxlLmM9NDA2Mz1zdGF0aWMgaW50IGYyZnNfcmVzZXJ2ZV9jb21wcmVzc19ibG9ja3Moc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmZzL2YyZnMvZmlsZS5jLTQwNzctXG5mcy9mMmZzL2ZpbGUuYzo0MDc4Olx0cmV0ID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxwKTtcbmZzL2YyZnMvZmlsZS5jLTQwNzktXHRpZiAocmV0KVxuLS1cbmZzL2YyZnMvZmlsZS5jPTQxOTU9c3RhdGljIGludCBmMmZzX3NlY190cmltX2ZpbGUoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmZzL2YyZnMvZmlsZS5jLTQyMjQtXG5mcy9mMmZzL2ZpbGUuYzo0MjI1Olx0cmV0ID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxwKTtcbmZzL2YyZnMvZmlsZS5jLTQyMjYtXHRpZiAocmV0KVxuLS1cbmZzL2YyZnMvZmlsZS5jPTQzODU9c3RhdGljIGludCBmMmZzX2lvY19zZXRfY29tcHJlc3Nfb3B0aW9uKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5mcy9mMmZzL2ZpbGUuYy00NDA3LVxuZnMvZjJmcy9maWxlLmM6NDQwODpcdHJldCA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlscCk7XG5mcy9mMmZzL2ZpbGUuYy00NDA5LVx0aWYgKHJldClcbi0tXG5mcy9mMmZzL2ZpbGUuYz00NDk0PXN0YXRpYyBpbnQgZjJmc19pb2NfZGVjb21wcmVzc19maWxlKHN0cnVjdCBmaWxlICpmaWxwKVxuLS1cbmZzL2YyZnMvZmlsZS5jLTQ1MTAtXG5mcy9mMmZzL2ZpbGUuYzo0NTExOlx0cmV0ID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxwKTtcbmZzL2YyZnMvZmlsZS5jLTQ1MTItXHRpZiAocmV0KVxuLS1cbmZzL2YyZnMvZmlsZS5jPTQ1NzU9c3RhdGljIGludCBmMmZzX2lvY19jb21wcmVzc19maWxlKHN0cnVjdCBmaWxlICpmaWxwKVxuLS1cbmZzL2YyZnMvZmlsZS5jLTQ1OTEtXG5mcy9mMmZzL2ZpbGUuYzo0NTkyOlx0cmV0ID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxwKTtcbmZzL2YyZnMvZmlsZS5jLTQ1OTMtXHRpZiAocmV0KVxuLS1cbmZzL2YyZnMvZ2MuYz0yMzE4PWludCBmMmZzX3Jlc2l6ZV9mcyhzdHJ1Y3QgZmlsZSAqZmlscCwgX191NjQgYmxvY2tfY291bnQpXG4tLVxuZnMvZjJmcy9nYy5jLTIzNjAtXG5mcy9mMmZzL2djLmM6MjM2MTpcdGVyciA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlscCk7XG5mcy9mMmZzL2djLmMtMjM2Mi1cdGlmIChlcnIpXG4tLVxuZnMvZmF0L2ZpbGUuYz0zNz1zdGF0aWMgaW50IGZhdF9pb2N0bF9zZXRfYXR0cmlidXRlcyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdTMyIF9fdXNlciAqdXNlcl9hdHRyKVxuLS1cbmZzL2ZhdC9maWxlLmMtNDktXG5mcy9mYXQvZmlsZS5jOjUwOlx0ZXJyID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxlKTtcbmZzL2ZhdC9maWxlLmMtNTEtXHRpZiAoZXJyKVxuLS1cbmZzL2ZpbGVfYXR0ci5jPTMyND1pbnQgaW9jdGxfc2V0ZmxhZ3Moc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBfX3VzZXIgKmFyZ3ApXG4tLVxuZnMvZmlsZV9hdHRyLmMtMzMzLVx0aWYgKCFlcnIpIHtcbmZzL2ZpbGVfYXR0ci5jOjMzNDpcdFx0ZXJyID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxlKTtcbmZzL2ZpbGVfYXR0ci5jLTMzNS1cdFx0aWYgKCFlcnIpIHtcbi0tXG5mcy9maWxlX2F0dHIuYz0zNTY9aW50IGlvY3RsX2Zzc2V0eGF0dHIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgX191c2VyICphcmdwKVxuLS1cbmZzL2ZpbGVfYXR0ci5jLTM2NC1cdGlmICghZXJyKSB7XG5mcy9maWxlX2F0dHIuYzozNjU6XHRcdGVyciA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlsZSk7XG5mcy9maWxlX2F0dHIuYy0zNjYtXHRcdGlmICghZXJyKSB7XG4tLVxuZnMvbmFtZXNwYWNlLmM9NTExPWludCBtbnRfZ2V0X3dyaXRlX2FjY2Vzc19maWxlKHN0cnVjdCBmaWxlICpmaWxlKVxuLS1cbmZzL25hbWVzcGFjZS5jLTUyNS0vKipcbmZzL25hbWVzcGFjZS5jOjUyNjogKiBtbnRfd2FudF93cml0ZV9maWxlIC0gZ2V0IHdyaXRlIGFjY2VzcyB0byBhIGZpbGUmIzM5O3MgbW91bnRcbmZzL25hbWVzcGFjZS5jLTUyNy0gKiBAZmlsZTogdGhlIGZpbGUgd2hvJiMzOTtzIG1vdW50IG9uIHdoaWNoIHRvIHRha2UgYSB3cml0ZVxuLS1cbmZzL25hbWVzcGFjZS5jLTUzMy0gKi9cbmZzL25hbWVzcGFjZS5jOjUzNDppbnQgbW50X3dhbnRfd3JpdGVfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSlcbmZzL25hbWVzcGFjZS5jLTUzNS17XG4tLVxuZnMvbmFtZXNwYWNlLmMtNTQzLX1cbmZzL25hbWVzcGFjZS5jOjU0NDpFWFBPUlRfU1lNQk9MX0dQTChtbnRfd2FudF93cml0ZV9maWxlKTtcbmZzL25hbWVzcGFjZS5jLTU0NS1cbi0tXG5mcy9uZnNkL25mczRyZWNvdmVyLmM9MTIzPW5mc2Q0X2NyZWF0ZV9jbGlkX2RpcihzdHJ1Y3QgbmZzNF9jbGllbnQgKmNscClcbi0tXG5mcy9uZnNkL25mczRyZWNvdmVyLmMtMTQxLVxuZnMvbmZzZC9uZnM0cmVjb3Zlci5jOjE0MjpcdHN0YXR1cyA9IG1udF93YW50X3dyaXRlX2ZpbGUobm4tXHUwMDNlcmVjX2ZpbGUpO1xuZnMvbmZzZC9uZnM0cmVjb3Zlci5jLTE0My1cdGlmIChzdGF0dXMpXG4tLVxuZnMvbmZzZC9uZnM0cmVjb3Zlci5jPTI5NT1uZnNkNF9yZW1vdmVfY2xpZF9kaXIoc3RydWN0IG5mczRfY2xpZW50ICpjbHApXG4tLVxuZnMvbmZzZC9uZnM0cmVjb3Zlci5jLTMwNi1cbmZzL25mc2QvbmZzNHJlY292ZXIuYzozMDc6XHRzdGF0dXMgPSBtbnRfd2FudF93cml0ZV9maWxlKG5uLVx1MDAzZXJlY19maWxlKTtcbmZzL25mc2QvbmZzNHJlY292ZXIuYy0zMDgtXHRpZiAoc3RhdHVzKVxuLS1cbmZzL25mc2QvbmZzNHJlY292ZXIuYz0zNzI9bmZzZDRfcmVjZGlyX3B1cmdlX29sZChzdHJ1Y3QgbmZzZF9uZXQgKm5uKVxuLS1cbmZzL25mc2QvbmZzNHJlY292ZXIuYy0zNzgtXHRcdHJldHVybjtcbmZzL25mc2QvbmZzNHJlY292ZXIuYzozNzk6XHRzdGF0dXMgPSBtbnRfd2FudF93cml0ZV9maWxlKG5uLVx1MDAzZXJlY19maWxlKTtcbmZzL25mc2QvbmZzNHJlY292ZXIuYy0zODAtXHRpZiAoc3RhdHVzKVxuLS1cbmZzL25pbGZzMi9pb2N0bC5jLTE2LSNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBhdC5oXHUwMDNlXHQvKiBjb21wYXRfcHRyKCkgKi9cbmZzL25pbGZzMi9pb2N0bC5jOjE3OiNpbmNsdWRlIFx1MDAzY2xpbnV4L21vdW50LmhcdTAwM2VcdC8qIG1udF93YW50X3dyaXRlX2ZpbGUoKSwgbW50X2Ryb3Bfd3JpdGVfZmlsZSgpICovXG5mcy9uaWxmczIvaW9jdGwuYy0xOC0jaW5jbHVkZSBcdTAwM2NsaW51eC9idWZmZXJfaGVhZC5oXHUwMDNlXG4tLVxuZnMvbmlsZnMyL2lvY3RsLmM9MTk1PXN0YXRpYyBpbnQgbmlsZnNfaW9jdGxfY2hhbmdlX2NwbW9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCxcbi0tXG5mcy9uaWxmczIvaW9jdGwuYy0yMDUtXG5mcy9uaWxmczIvaW9jdGwuYzoyMDY6XHRyZXQgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbHApO1xuZnMvbmlsZnMyL2lvY3RsLmMtMjA3LVx0aWYgKHJldClcbi0tXG5mcy9uaWxmczIvaW9jdGwuYz0yNDc9bmlsZnNfaW9jdGxfZGVsZXRlX2NoZWNrcG9pbnQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsXG4tLVxuZnMvbmlsZnMyL2lvY3RsLmMtMjU3LVxuZnMvbmlsZnMyL2lvY3RsLmM6MjU4Olx0cmV0ID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxwKTtcbmZzL25pbGZzMi9pb2N0bC5jLTI1OS1cdGlmIChyZXQpXG4tLVxuZnMvbmlsZnMyL2lvY3RsLmM9ODM0PXN0YXRpYyBpbnQgbmlsZnNfaW9jdGxfY2xlYW5fc2VnbWVudHMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsXG4tLVxuZnMvbmlsZnMyL2lvY3RsLmMtODUyLVxuZnMvbmlsZnMyL2lvY3RsLmM6ODUzOlx0cmV0ID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxwKTtcbmZzL25pbGZzMi9pb2N0bC5jLTg1NC1cdGlmIChyZXQpXG4tLVxuZnMvbmlsZnMyL2lvY3RsLmM9OTkyPXN0YXRpYyBpbnQgbmlsZnNfaW9jdGxfcmVzaXplKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLFxuLS1cbmZzL25pbGZzMi9pb2N0bC5jLTEwMDAtXG5mcy9uaWxmczIvaW9jdGwuYzoxMDAxOlx0cmV0ID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxwKTtcbmZzL25pbGZzMi9pb2N0bC5jLTEwMDItXHRpZiAocmV0KVxuLS1cbmZzL25pbGZzMi9pb2N0bC5jPTExNzY9c3RhdGljIGludCBuaWxmc19pb2N0bF9zZXRfc3VpbmZvKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLFxuLS1cbmZzL25pbGZzMi9pb2N0bC5jLTExODgtXG5mcy9uaWxmczIvaW9jdGwuYzoxMTg5Olx0cmV0ID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxwKTtcbmZzL25pbGZzMi9pb2N0bC5jLTExOTAtXHRpZiAocmV0KVxuLS1cbmZzL25pbGZzMi9pb2N0bC5jPTEyNzA9c3RhdGljIGludCBuaWxmc19pb2N0bF9zZXRfZnNsYWJlbChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZmlsZSAqZmlscCxcbi0tXG5mcy9uaWxmczIvaW9jdGwuYy0xMjgxLVxuZnMvbmlsZnMyL2lvY3RsLmM6MTI4MjpcdHJldCA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlscCk7XG5mcy9uaWxmczIvaW9jdGwuYy0xMjgzLVx0aWYgKHJldClcbi0tXG5mcy9udGZzL2ZpbGUuYz03NDk9c3RhdGljIGludCBudGZzX2lvY3RsX3NldF92b2x1bWVfbGFiZWwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmZzL250ZnMvZmlsZS5jLTc2MS1cbmZzL250ZnMvZmlsZS5jOjc2MjpcdHJldCA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlscCk7XG5mcy9udGZzL2ZpbGUuYy03NjMtXHRpZiAocmV0KVxuLS1cbmZzL29jZnMyL2ZpbGUuYz0yMDkyPWludCBvY2ZzMl9jaGFuZ2VfZmlsZV9zcGFjZShzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCxcbi0tXG5mcy9vY2ZzMi9maWxlLmMtMjExMS1cbmZzL29jZnMyL2ZpbGUuYzoyMTEyOlx0cmV0ID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxlKTtcbmZzL29jZnMyL2ZpbGUuYy0yMTEzLVx0aWYgKHJldClcbi0tXG5mcy9vY2ZzMi9pb2N0bC5jPTg1Mz1sb25nIG9jZnMyX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5mcy9vY2ZzMi9pb2N0bC5jLTg4MS1cbmZzL29jZnMyL2lvY3RsLmM6ODgyOlx0XHRzdGF0dXMgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbHApO1xuZnMvb2NmczIvaW9jdGwuYy04ODMtXHRcdGlmIChzdGF0dXMpXG4tLVxuZnMvb2NmczIvaW9jdGwuYy04OTktXG5mcy9vY2ZzMi9pb2N0bC5jOjkwMDpcdFx0c3RhdHVzID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxwKTtcbmZzL29jZnMyL2lvY3RsLmMtOTAxLVx0XHRpZiAoc3RhdHVzKVxuLS1cbmZzL29jZnMyL21vdmVfZXh0ZW50cy5jPTk5MT1pbnQgb2NmczJfaW9jdGxfbW92ZV9leHRlbnRzKHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkIF9fdXNlciAqYXJncClcbi0tXG5mcy9vY2ZzMi9tb3ZlX2V4dGVudHMuYy0xMDAxLVxuZnMvb2NmczIvbW92ZV9leHRlbnRzLmM6MTAwMjpcdHN0YXR1cyA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlscCk7XG5mcy9vY2ZzMi9tb3ZlX2V4dGVudHMuYy0xMDAzLVx0aWYgKHN0YXR1cylcbi0tXG5mcy9vcGVuLmM9ODMzPWludCB2ZnNfZmNob3duKHN0cnVjdCBmaWxlICpmaWxlLCB1aWRfdCB1c2VyLCBnaWRfdCBncm91cClcbi0tXG5mcy9vcGVuLmMtODM2LVxuZnMvb3Blbi5jOjgzNzpcdGVycm9yID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxlKTtcbmZzL29wZW4uYy04MzgtXHRpZiAoZXJyb3IpXG4tLVxuZnMvcmVtYXBfcmFuZ2UuYz00MzI9bG9mZl90IHZmc19kZWR1cGVfZmlsZV9yYW5nZV9vbmUoc3RydWN0IGZpbGUgKnNyY19maWxlLCBsb2ZmX3Qgc3JjX3Bvcyxcbi0tXG5mcy9yZW1hcF9yYW5nZS5jLTQ1Ny1cdCAqL1xuZnMvcmVtYXBfcmFuZ2UuYzo0NTg6XHRyZXQgPSBtbnRfd2FudF93cml0ZV9maWxlKGRzdF9maWxlKTtcbmZzL3JlbWFwX3JhbmdlLmMtNDU5LVx0aWYgKHJldClcbi0tXG5mcy9zbWIvY2xpZW50L2lvY3RsLmM9MTgwPXN0YXRpYyBsb25nIGNpZnNfaW9jdGxfY29weWNodW5rKHVuc2lnbmVkIGludCB4aWQsIHN0cnVjdCBmaWxlICpkc3RfZmlsZSxcbi0tXG5mcy9zbWIvY2xpZW50L2lvY3RsLmMtMTkzLVx0LyogY2hlY2sgaWYgdGFyZ2V0IHZvbHVtZSBpcyByZWFkb25seSBhbmQgdGFrZSByZWZlcmVuY2UgKi9cbmZzL3NtYi9jbGllbnQvaW9jdGwuYzoxOTQ6XHRyYyA9IG1udF93YW50X3dyaXRlX2ZpbGUoZHN0X2ZpbGUpO1xuZnMvc21iL2NsaWVudC9pb2N0bC5jLTE5NS1cdGlmIChyYykge1xuLS1cbmZzL3NtYi9zZXJ2ZXIvdmZzLmM9MTk2OD1pbnQga3NtYmRfdmZzX3NldF9jb21wcmVzc2lvbihzdHJ1Y3Qga3NtYmRfd29yayAqd29yaywgc3RydWN0IGtzbWJkX2ZpbGUgKmZwLCB1MTYgZm10KVxuLS1cbmZzL3NtYi9zZXJ2ZXIvdmZzLmMtMjAwMC1cdFx0ZmlsZWF0dHJfZmlsbF9mbGFncyhcdTAwMjZmYSwgZmxhZ3MpO1xuZnMvc21iL3NlcnZlci92ZnMuYzoyMDAxOlx0XHRyYyA9IG1udF93YW50X3dyaXRlX2ZpbGUoZnAtXHUwMDNlZmlscCk7XG5mcy9zbWIvc2VydmVyL3Zmcy5jLTIwMDItXHRcdGlmIChyYylcbi0tXG5mcy92ZXJpdHkvZW5hYmxlLmM9MzI2PWludCBmc3Zlcml0eV9pb2N0bF9lbmFibGUoc3RydWN0IGZpbGUgKmZpbHAsIGNvbnN0IHZvaWQgX191c2VyICp1YXJnKVxuLS1cbmZzL3Zlcml0eS9lbmFibGUuYy0zNzctXG5mcy92ZXJpdHkvZW5hYmxlLmM6Mzc4Olx0ZXJyID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxwKTtcbmZzL3Zlcml0eS9lbmFibGUuYy0zNzktXHRpZiAoZXJyKSAvKiAtRVJPRlMgKi9cbi0tXG5mcy94YXR0ci5jPTY2Nj1pbnQgZmlsZV9zZXR4YXR0cihzdHJ1Y3QgZmlsZSAqZiwgc3RydWN0IGtlcm5lbF94YXR0cl9jdHggKmN0eClcbmZzL3hhdHRyLmMtNjY3LXtcbmZzL3hhdHRyLmM6NjY4Olx0aW50IGVycm9yID0gbW50X3dhbnRfd3JpdGVfZmlsZShmKTtcbmZzL3hhdHRyLmMtNjY5LVxuLS1cbmZzL3hhdHRyLmM9MTA0ND1zdGF0aWMgaW50IGZpbGVfcmVtb3ZleGF0dHIoc3RydWN0IGZpbGUgKmYsIHN0cnVjdCB4YXR0cl9uYW1lICprbmFtZSlcbmZzL3hhdHRyLmMtMTA0NS17XG5mcy94YXR0ci5jOjEwNDY6XHRpbnQgZXJyb3IgPSBtbnRfd2FudF93cml0ZV9maWxlKGYpO1xuZnMveGF0dHIuYy0xMDQ3LVxuLS1cblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNjo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODg3MgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQuCgoqKkFuYWx5emluZyBGaWxlIEF0dHJpYnV0ZSBPcGVyYXRpb25zIGFuZCBNb3VudCBQb2ludCBXcml0ZSBEZXNpcmVzKioKClJpZ2h0LCBzbyBJJiMzOTttIHNlZWluZyBgbW50X3dhbnRfd3JpdGVfZmlsZWAgcG9wcGluZyB1cCBpbiBgZmlsZV9zZXR4YXR0cmAgYW5kIGBmaWxlX3JlbW92ZXhhdHRyYC4gQ2xlYXJseSwgaXQmIzM5O3MgaW52b2x2ZWQgd2l0aCBleHRlbmRlZCBhdHRyaWJ1dGUgbWFuaXB1bGF0aW9ucywgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGJldHRlci4gTXkgaW5zdGluY3RzIHRlbGwgbWUgaXQmIzM5O3Mgc29tZWhvdyByZWxhdGVkIHRvIG1vdW50IHBvaW50IGJlaGF2aW9ycyBhbmQgd3JpdGUgb3BlcmF0aW9ucy4gVGltZSB0byBkaWcgaW50byBgZnMvbmFtZXNwYWNlLmNgIGFuZCBzZWUgZXhhY3RseSBob3cgYG1udF93YW50X3dyaXRlX2ZpbGVgIGlzIGJlaW5nIHVzZWQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgY29udGV4dCBpdCBwcm92aWRlcyB0byB0aGUgc3lzdGVtIHJlZ2FyZGluZyB3aGV0aGVyIGl0JiMzOTtzIG9rYXkgdG8gd3JpdGUgdG8gYSBmaWxlIGJhc2VkIG9uIHRoZSBtb3VudCBwb2ludC4gSSYjMzk7bSBndWVzc2luZyBpdCBoYXMgc29tZSBpbXBhY3Qgb24gYWxsb3dpbmcgb3IgZGlzYWxsb3dpbmcgdGhlIG9wZXJhdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE2OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvbmFtZXNwYWNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MjYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDUyNjpcdCAqIG1udF93YW50X3dyaXRlX2ZpbGUgLSBnZXQgd3JpdGUgYWNjZXNzIHRvIGEgZmlsZSYjMzk7cyBtb3VudFxuIDUyNzpcdCAqIEBmaWxlOiB0aGUgZmlsZSB3aG8mIzM5O3MgbW91bnQgb24gd2hpY2ggdG8gdGFrZSBhIHdyaXRlXG4gNTI4Olx0ICpcbiA1Mjk6XHQgKiBUaGlzIGlzIGxpa2UgbW50X3dhbnRfd3JpdGUsIGJ1dCBpZiB0aGUgZmlsZSBpcyBhbHJlYWR5IG9wZW4gZm9yIHdyaXRpbmcgaXRcbiA1MzA6XHQgKiBza2lwcyBpbmNyZW1lbnRpbmcgbW50X3dyaXRlcnMgKHNpbmNlIHRoZSBvcGVuIGZpbGUgYWxyZWFkeSBoYXMgYSByZWZlcmVuY2UpXG4gNTMxOlx0ICogYW5kIGluc3RlYWQgb25seSBkb2VzIHRoZSBmcmVlemUgcHJvdGVjdGlvbiBhbmQgdGhlIGNoZWNrIGZvciBlbWVyZ2VuY3kgci9vXG4gNTMyOlx0ICogcmVtb3VudHMuICBUaGlzIG11c3QgYmUgcGFpcmVkIHdpdGggbW50X2Ryb3Bfd3JpdGVfZmlsZS5cbiA1MzM6XHQgKi9cbiA1MzQ6XHRpbnQgbW50X3dhbnRfd3JpdGVfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSlcbiA1MzU6XHR7XG4gNTM2Olx0XHRpbnQgcmV0O1xuIDUzNzpcdFxuIDUzODpcdFx0c2Jfc3RhcnRfd3JpdGUoZmlsZV9pbm9kZShmaWxlKS1cdTAwM2VpX3NiKTtcbiA1Mzk6XHRcdHJldCA9IG1udF9nZXRfd3JpdGVfYWNjZXNzX2ZpbGUoZmlsZSk7XG4gNTQwOlx0XHRpZiAocmV0KVxuIDU0MTpcdFx0XHRzYl9lbmRfd3JpdGUoZmlsZV9pbm9kZShmaWxlKS1cdTAwM2VpX3NiKTtcbiA1NDI6XHRcdHJldHVybiByZXQ7XG4gNTQzOlx0fVxuIDU0NDpcdEVYUE9SVF9TWU1CT0xfR1BMKG1udF93YW50X3dyaXRlX2ZpbGUpO1xuIDU0NTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNjo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTQ4OQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgY29kZS4KCioqRGl2aW5nIGludG8gYG1udF9nZXRfd3JpdGVfYWNjZXNzX2ZpbGVgKioKCkFscmlnaHQsIEkgc2VlIHdlJiMzOTtyZSBsb29raW5nIGF0IGBtbnRfZ2V0X3dyaXRlX2FjY2Vzc19maWxlYC4gVGhpcyBmdW5jdGlvbiBuYW1lIGltbWVkaWF0ZWx5IHN1Z2dlc3RzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBjcml0aWNhbCBwaWVjZSBvZiB0aGUgbW91bnRpbmcgcHJvY2Vzcywgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gd3JpdGUgcGVybWlzc2lvbnMuIFRoaXMgY291bGQgYmUgYW55d2hlcmUgaW4gdGhlIGZpbGVzeXN0ZW0gYXJjaGl0ZWN0dXJlLCBsaWtlbHkgY2xvc2UgdG8gdGhlIHZmcyBsYXllciBvciB0aGUgbW91bnQgaW1wbGVtZW50YXRpb24gaXRzZWxmLiBJJiMzOTttIGtlZW4gdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIGFjcXVpcmluZyBvciB2YWxpZGF0aW5nIHRoZSByaWdodCB0byB3cml0ZSB0byBhIG1vdW50ZWQgZmlsZSBzeXN0ZW0sIG9yIGEgc3BlY2lmaWMgZmlsZSAqd2l0aGluKiBhIG1vdW50ZWQgZmlsZSBzeXN0ZW0uIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgaXRzIGNhbGwgc3RhY2sgYW5kIHNlZSB3aGF0IGFyZ3VtZW50cyBpdCB0YWtlcy4gRG9lcyBpdCBjaGVjayBwZXJtaXNzaW9ucyBiYXNlZCBvbiB1c2VyIElEcywgZmlsZSBhdHRyaWJ1dGVzLCBvciBtb3VudCBvcHRpb25zPyBJdCYjMzk7cyBhbGwgYWJvdXQgZW5zdXJpbmcgZGF0YSBpbnRlZ3JpdHkgYW5kIHNlY3VyaXR5LCBzbyBJJiMzOTttIGV4cGVjdGluZyBzb21lIHJvYnVzdCBjaGVja3MgdG8gYmUgaW4gcGxhY2UuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSYjMzk7dmUgZ290LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNjo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL25hbWVzcGFjZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1MDA6XHRFWFBPUlRfU1lNQk9MX0dQTChtbnRfd2FudF93cml0ZSk7XG4gNTAxOlx0XG4gNTAyOlx0LyoqXG4gNTAzOlx0ICogbW50X2dldF93cml0ZV9hY2Nlc3NfZmlsZSAtIGdldCB3cml0ZSBhY2Nlc3MgdG8gYSBmaWxlJiMzOTtzIG1vdW50XG4gNTA0Olx0ICogQGZpbGU6IHRoZSBmaWxlIHdobyYjMzk7cyBtb3VudCBvbiB3aGljaCB0byB0YWtlIGEgd3JpdGVcbiA1MDU6XHQgKlxuIDUwNjpcdCAqIFRoaXMgaXMgbGlrZSBtbnRfZ2V0X3dyaXRlX2FjY2VzcywgYnV0IGlmIEBmaWxlIGlzIGFscmVhZHkgb3BlbiBmb3Igd3JpdGUgaXRcbiA1MDc6XHQgKiBza2lwcyBpbmNyZW1lbnRpbmcgbW50X3dyaXRlcnMgKHNpbmNlIHRoZSBvcGVuIGZpbGUgYWxyZWFkeSBoYXMgYSByZWZlcmVuY2UpXG4gNTA4Olx0ICogYW5kIGluc3RlYWQgb25seSBkb2VzIHRoZSBjaGVjayBmb3IgZW1lcmdlbmN5IHIvbyByZW1vdW50cy4gIFRoaXMgbXVzdCBiZVxuIDUwOTpcdCAqIHBhaXJlZCB3aXRoIG1udF9wdXRfd3JpdGVfYWNjZXNzX2ZpbGUuXG4gNTEwOlx0ICovXG4gNTExOlx0aW50IG1udF9nZXRfd3JpdGVfYWNjZXNzX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUpXG4gNTEyOlx0e1xuIDUxMzpcdFx0aWYgKGZpbGUtXHUwMDNlZl9tb2RlIFx1MDAyNiBGTU9ERV9XUklURVIpIHtcbiA1MTQ6XHRcdFx0LypcbiA1MTU6XHRcdFx0ICogU3VwZXJibG9jayBtYXkgaGF2ZSBiZWNvbWUgcmVhZG9ubHkgd2hpbGUgdGhlcmUgYXJlIHN0aWxsXG4gNTE2Olx0XHRcdCAqIHdyaXRhYmxlIGZkJiMzOTtzLCBlLmcuIGR1ZSB0byBhIGZzIGVycm9yIHdpdGggZXJyb3JzPXJlbW91bnQtcm9cbiA1MTc6XHRcdFx0ICovXG4gNTE4Olx0XHRcdGlmIChfX21udF9pc19yZWFkb25seShmaWxlLVx1MDAzZWZfcGF0aC5tbnQpKVxuIDUxOTpcdFx0XHRcdHJldHVybiAtRVJPRlM7XG4gNTIwOlx0XHRcdHJldHVybiAwO1xuIDUyMTpcdFx0fVxuIDUyMjpcdFx0cmV0dXJuIG1udF9nZXRfd3JpdGVfYWNjZXNzKGZpbGUtXHUwMDNlZl9wYXRoLm1udCk7XG4gNTIzOlx0fVxuIDUyNDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNjo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDE2NwoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDM5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE9fUEFUSCBGaWxlIERlc2NyaXB0b3IgQmVoYXZpb3IqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgYE9fUEFUSGAgZmlsZSBkZXNjcmlwdG9ycyBiZWhhdmUuIElmIHRoZSBmaWxlIGlzbiYjMzk7dCBvcGVuZWQgZm9yIHdyaXRpbmcsIHRoYXQgYEZNT0RFX1dSSVRFUmAgYml0IHdpbGwgYmUgZmFsc2UuICBUaGF0IHRyaWdnZXJzIGEgY2FsbCB0byBgbW50X2dldF93cml0ZV9hY2Nlc3NgLCB3aGljaCBzZWVtcyBjb3JyZWN0IGFuZCB3b3VsZCBpbmNyZW1lbnQgYG1udF93cml0ZXJzYCBhbmQgY2hlY2sgZm9yIHJlYWQtb25seSBtb3VudHMuICBTbywgYXQgYSBmdW5kYW1lbnRhbCBsZXZlbCwgYG1udF93YW50X3dyaXRlX2ZpbGVgICpzaG91bGQqIHdvcmsgZmluZSB3aXRoIGBPX1BBVEhgLgoKQnV0IHdhaXTigKYgdGhlIHBhdGNoIGlzIGNoYW5naW5nIHRoZSBgKmF0YCBzeXNjYWxscyDigJMgYHNldHhhdHRyYXRgLCBgZ2V0eGF0dHJhdGAsIGFuZCB0aGUgcmVzdCDigJMgdG8gaGFuZGxlIGBPX1BBVEhgIGZpbGUgZGVzY3JpcHRvcnMuICBJcyB0aGlzIHJlYWxseSBhIGZ1bmN0aW9uYWwgY2hhbmdlPyAgTGV0IG1lIHNlZS4gIFllcywgaXQgbG9va3MgbGlrZSBpdCBpcy4gIFByZXZpb3VzbHksIGlmIHlvdSB0cmllZCB0byB1c2UgYHNldHhhdHRyYXRgIHdpdGggYW4gYE9fUEFUSGAgZGVzY3JpcHRvciBhbmQgYEFUX0VNUFRZX1BBVEhgLCBpdCB3b3VsZCBmbGF0IG91dCBmYWlsIHdpdGggYEVCQURGYC4gVGhlIGBmZGdldGAgY2FsbCB3b3VsZCBjaG9rZS4gTm93LCB3aXRoIGBmZGdldF9yYXdgLCBpdCB3aWxsIHN1Y2NlZWQgYmVjYXVzZSBgZmRnZXRfcmF3YCBhY3R1YWxseSBzdXBwb3J0cyB0aGVzZS4KCkhtbW0sIGJ1dCB3aGF0IGFib3V0IGBmc2V0eGF0dHJgPyBEb2VzIHRoaXMgcGF0Y2ggaW1wYWN0IGl0PyBBaCwgbm8uIGBmc2V0eGF0dHJgIHN0aWxsIGNhbGxzIGBmZGdldGAgYnkgZGVmYXVsdCwgc28gaXQmIzM5O2xsIGNvbnRpbnVlIHRvIGZhaWwgb24gYE9fUEFUSGAgZGVzY3JpcHRvcnMuIE1ha2VzIHNlbnNlOyBgZnNldHhhdHRyYCBpc24mIzM5O3QgdXNpbmcgdGhlIG5ld2VyIGAqYXRgIGZ1bmN0aW9uYWxpdHkuIE9rYXksIHRoYXQmIzM5O3MgY29uc2lzdGVudCB3aXRoIHRoZSBleGlzdGluZyBiZWhhdmlvciAqYmVmb3JlKiB0aGlzIHBhdGNoLiBUaGUgKm5ldyogYCphdGAgY2FsbHMgd2VyZSBpbnRyb2R1Y2VkIG1vcmUgcmVjZW50bHksIGFuZCB0aGlzIHBhdGNoIGNvcnJlY3RseSBhbGxvd3MgYE9fUEFUSGAgZGVzY3JpcHRvcnMgd2hlbiBgQVRfRU1QVFlfUEFUSGAgaXMgdXNlZC4gIFRoYXQmIzM5O3MgaW1wb3J0YW50LiAgSSBzZWUgaXQgYWxsIHRoZSB0aW1lIHdpdGggYCphdGAgY2FsbHMsIGUuZy4sIGBmY2hvd25hdGAsIGBmc3RhdGF0YCwgdGhleSBvZnRlbiB1c2UgdGhpcyBzdHlsZS4KCkxldCBtZSBqdXN0IHZlcmlmeSB0aGlzIHJlYWwgcXVpY2suIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyB0aGUgb25seSBzcG90IGluIHRoZSBjb2RlIHdoZXJlIHRoaXMgaGFzIGJlZW4gZml4ZWQuIEFyZSB0aGVyZSBhbnkgb3RoZXIgcGxhY2VzIHVzaW5nIGBmZGdldF9yYXdgIGZvciB0aGVzZSBgKmF0YCBzeXNjYWxscz8gSSYjMzk7bGwgY2hlY2sgYGZjaG93bmF0YCByZWFsIHF1aWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNjo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmY2hvd25hdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FscGhhL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibC0zODMtNDUyXHRjb21tb25cdG1rbm9kYXRcdFx0XHRcdHN5c19ta25vZGF0XG5hcmNoL2FscGhhL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibDozODQ6NDUzXHRjb21tb25cdGZjaG93bmF0XHRcdFx0c3lzX2ZjaG93bmF0XG5hcmNoL2FscGhhL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibC0zODUtNDU0XHRjb21tb25cdGZ1dGltZXNhdFx0XHRcdHN5c19mdXRpbWVzYXRcbi0tXG5hcmNoL2FybS90b29scy9zeXNjYWxsLnRibC0zNDItMzI0XHRjb21tb25cdG1rbm9kYXRcdFx0XHRzeXNfbWtub2RhdFxuYXJjaC9hcm0vdG9vbHMvc3lzY2FsbC50Ymw6MzQzOjMyNVx0Y29tbW9uXHRmY2hvd25hdFx0XHRzeXNfZmNob3duYXRcbmFyY2gvYXJtL3Rvb2xzL3N5c2NhbGwudGJsLTM0NC0zMjZcdGNvbW1vblx0ZnV0aW1lc2F0XHRcdHN5c19mdXRpbWVzYXRfdGltZTMyXG4tLVxuYXJjaC9hcm02NC90b29scy9zeXNjYWxsXzMyLnRibC0zMzktMzI0XHRjb21tb25cdG1rbm9kYXRcdFx0XHRzeXNfbWtub2RhdFxuYXJjaC9hcm02NC90b29scy9zeXNjYWxsXzMyLnRibDozNDA6MzI1XHRjb21tb25cdGZjaG93bmF0XHRcdHN5c19mY2hvd25hdFxuYXJjaC9hcm02NC90b29scy9zeXNjYWxsXzMyLnRibC0zNDEtMzI2XHRjb21tb25cdGZ1dGltZXNhdFx0XHRzeXNfZnV0aW1lc2F0X3RpbWUzMlxuLS1cbmFyY2gvbTY4ay9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmwtMzAwLTI5MFx0Y29tbW9uXHRta25vZGF0XHRcdFx0XHRzeXNfbWtub2RhdFxuYXJjaC9tNjhrL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibDozMDE6MjkxXHRjb21tb25cdGZjaG93bmF0XHRcdFx0c3lzX2ZjaG93bmF0XG5hcmNoL202OGsva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsLTMwMi0yOTJcdGNvbW1vblx0ZnV0aW1lc2F0XHRcdFx0c3lzX2Z1dGltZXNhdF90aW1lMzJcbi0tXG5hcmNoL21pY3JvYmxhemUva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsLTMwNy0yOTdcdGNvbW1vblx0bWtub2RhdFx0XHRcdFx0c3lzX21rbm9kYXRcbmFyY2gvbWljcm9ibGF6ZS9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50Ymw6MzA4OjI5OFx0Y29tbW9uXHRmY2hvd25hdFx0XHRcdHN5c19mY2hvd25hdFxuYXJjaC9taWNyb2JsYXplL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibC0zMDktMjk5XHRjb21tb25cdGZ1dGltZXNhdFx0XHRcdHN5c19mdXRpbWVzYXRfdGltZTMyXG4tLVxuYXJjaC9taXBzL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsX24zMi50YmwtMjY0LTI1M1x0bjMyXHRta25vZGF0XHRcdFx0XHRzeXNfbWtub2RhdFxuYXJjaC9taXBzL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsX24zMi50Ymw6MjY1OjI1NFx0bjMyXHRmY2hvd25hdFx0XHRcdHN5c19mY2hvd25hdFxuYXJjaC9taXBzL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsX24zMi50YmwtMjY2LTI1NVx0bjMyXHRmdXRpbWVzYXRcdFx0XHRzeXNfZnV0aW1lc2F0X3RpbWUzMlxuLS1cbmFyY2gvbWlwcy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbF9uNjQudGJsLTI2MC0yNDlcdG42NFx0bWtub2RhdFx0XHRcdFx0c3lzX21rbm9kYXRcbmFyY2gvbWlwcy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbF9uNjQudGJsOjI2MToyNTBcdG42NFx0ZmNob3duYXRcdFx0XHRzeXNfZmNob3duYXRcbmFyY2gvbWlwcy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbF9uNjQudGJsLTI2Mi0yNTFcdG42NFx0ZnV0aW1lc2F0XHRcdFx0c3lzX2Z1dGltZXNhdFxuLS1cbmFyY2gvbWlwcy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbF9vMzIudGJsLTMwNC0yOTBcdG8zMlx0bWtub2RhdFx0XHRcdFx0c3lzX21rbm9kYXRcbmFyY2gvbWlwcy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbF9vMzIudGJsOjMwNToyOTFcdG8zMlx0ZmNob3duYXRcdFx0XHRzeXNfZmNob3duYXRcbmFyY2gvbWlwcy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbF9vMzIudGJsLTMwNi0yOTJcdG8zMlx0ZnV0aW1lc2F0XHRcdFx0c3lzX2Z1dGltZXNhdF90aW1lMzJcbi0tXG5hcmNoL3BhcmlzYy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmwtMzE0LTI3N1x0Y29tbW9uXHRta25vZGF0XHRcdFx0c3lzX21rbm9kYXRcbmFyY2gvcGFyaXNjL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibDozMTU6Mjc4XHRjb21tb25cdGZjaG93bmF0XHRcdHN5c19mY2hvd25hdFxuYXJjaC9wYXJpc2Mva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsLTMxNi0yNzlcdDMyXHRmdXRpbWVzYXRcdFx0c3lzX2Z1dGltZXNhdF90aW1lMzJcbi0tXG5hcmNoL3Bvd2VycGMva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsLTM3NS0yODhcdGNvbW1vblx0bWtub2RhdFx0XHRcdFx0c3lzX21rbm9kYXRcbmFyY2gvcG93ZXJwYy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50Ymw6Mzc2OjI4OVx0Y29tbW9uXHRmY2hvd25hdFx0XHRcdHN5c19mY2hvd25hdFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibC0zNzctMjkwXHQzMlx0ZnV0aW1lc2F0XHRcdFx0c3lzX2Z1dGltZXNhdF90aW1lMzJcbi0tXG5hcmNoL3MzOTAva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsLTI0NC0yOTBcdGNvbW1vblx0bWtub2RhdFx0XHRcdFx0c3lzX21rbm9kYXRcbmFyY2gvczM5MC9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50Ymw6MjQ1OjI5MVx0Y29tbW9uXHRmY2hvd25hdFx0XHRcdHN5c19mY2hvd25hdFxuYXJjaC9zMzkwL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibC0yNDYtMjkyXHRjb21tb25cdGZ1dGltZXNhdFx0XHRcdHN5c19mdXRpbWVzYXRcbi0tXG5hcmNoL3NoL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibC0zMDctMjk3XHRjb21tb25cdG1rbm9kYXRcdFx0XHRcdHN5c19ta25vZGF0XG5hcmNoL3NoL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibDozMDg6Mjk4XHRjb21tb25cdGZjaG93bmF0XHRcdFx0c3lzX2ZjaG93bmF0XG5hcmNoL3NoL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibC0zMDktMjk5XHRjb21tb25cdGZ1dGltZXNhdFx0XHRcdHN5c19mdXRpbWVzYXRfdGltZTMyXG4tLVxuYXJjaC9zcGFyYy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmwtMzQ5LTI4Nlx0Y29tbW9uXHRta25vZGF0XHRcdFx0c3lzX21rbm9kYXRcbmFyY2gvc3BhcmMva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsOjM1MDoyODdcdGNvbW1vblx0ZmNob3duYXRcdFx0c3lzX2ZjaG93bmF0XG5hcmNoL3NwYXJjL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibC0zNTEtMjg4XHQzMlx0ZnV0aW1lc2F0XHRcdHN5c19mdXRpbWVzYXRfdGltZTMyXG4tLVxuYXJjaC94ODYvZW50cnkvc3lzY2FsbHMvc3lzY2FsbF8zMi50YmwtMzEyLTI5N1x0aTM4Nlx0bWtub2RhdFx0XHRcdHN5c19ta25vZGF0XG5hcmNoL3g4Ni9lbnRyeS9zeXNjYWxscy9zeXNjYWxsXzMyLnRibDozMTM6Mjk4XHRpMzg2XHRmY2hvd25hdFx0XHRzeXNfZmNob3duYXRcbmFyY2gveDg2L2VudHJ5L3N5c2NhbGxzL3N5c2NhbGxfMzIudGJsLTMxNC0yOTlcdGkzODZcdGZ1dGltZXNhdFx0XHRzeXNfZnV0aW1lc2F0X3RpbWUzMlxuLS1cbmFyY2gveDg2L2VudHJ5L3N5c2NhbGxzL3N5c2NhbGxfNjQudGJsLTI3MS0yNTlcdGNvbW1vblx0bWtub2RhdFx0XHRcdHN5c19ta25vZGF0XG5hcmNoL3g4Ni9lbnRyeS9zeXNjYWxscy9zeXNjYWxsXzY0LnRibDoyNzI6MjYwXHRjb21tb25cdGZjaG93bmF0XHRcdHN5c19mY2hvd25hdFxuYXJjaC94ODYvZW50cnkvc3lzY2FsbHMvc3lzY2FsbF82NC50YmwtMjczLTI2MVx0Y29tbW9uXHRmdXRpbWVzYXRcdFx0c3lzX2Z1dGltZXNhdFxuLS1cbmFyY2gveHRlbnNhL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibC0zMTktMjk2XHRjb21tb25cdHV0aW1lbnNhdFx0XHRcdHN5c191dGltZW5zYXRfdGltZTMyXG5hcmNoL3h0ZW5zYS9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50Ymw6MzIwOjI5N1x0Y29tbW9uXHRmY2hvd25hdFx0XHRcdHN5c19mY2hvd25hdFxuYXJjaC94dGVuc2Eva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsLTMyMS0yOThcdGNvbW1vblx0ZnV0aW1lc2F0XHRcdFx0c3lzX2Z1dGltZXNhdF90aW1lMzJcbi0tXG5mcy9pbnRlcm5hbC5oPTIwMz1pbnQgY2htb2RfY29tbW9uKGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLCB1bW9kZV90IG1vZGUpO1xuZnMvaW50ZXJuYWwuaDoyMDQ6aW50IGRvX2ZjaG93bmF0KGludCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICpmaWxlbmFtZSwgdWlkX3QgdXNlciwgZ2lkX3QgZ3JvdXAsXG5mcy9pbnRlcm5hbC5oLTIwNS1cdFx0aW50IGZsYWcpO1xuLS1cbmZzL29wZW4uYz03Mzk9aW50IGNob3duX2NvbW1vbihjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwgdWlkX3QgdXNlciwgZ2lkX3QgZ3JvdXApXG4tLVxuZnMvb3Blbi5jLTc4Ni1cbmZzL29wZW4uYzo3ODc6aW50IGRvX2ZjaG93bmF0KGludCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICpmaWxlbmFtZSwgdWlkX3QgdXNlciwgZ2lkX3QgZ3JvdXAsXG5mcy9vcGVuLmMtNzg4LVx0XHRpbnQgZmxhZylcbi0tXG5mcy9vcGVuLmMtODE1LVxuZnMvb3Blbi5jOjgxNjpTWVNDQUxMX0RFRklORTUoZmNob3duYXQsIGludCwgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqLCBmaWxlbmFtZSwgdWlkX3QsIHVzZXIsXG5mcy9vcGVuLmMtODE3LVx0XHRnaWRfdCwgZ3JvdXAsIGludCwgZmxhZylcbmZzL29wZW4uYy04MTgte1xuZnMvb3Blbi5jOjgxOTpcdHJldHVybiBkb19mY2hvd25hdChkZmQsIGZpbGVuYW1lLCB1c2VyLCBncm91cCwgZmxhZyk7XG5mcy9vcGVuLmMtODIwLX1cbi0tXG5mcy9vcGVuLmM9ODIyPVNZU0NBTExfREVGSU5FMyhjaG93biwgY29uc3QgY2hhciBfX3VzZXIgKiwgZmlsZW5hbWUsIHVpZF90LCB1c2VyLCBnaWRfdCwgZ3JvdXApXG5mcy9vcGVuLmMtODIzLXtcbmZzL29wZW4uYzo4MjQ6XHRyZXR1cm4gZG9fZmNob3duYXQoQVRfRkRDV0QsIGZpbGVuYW1lLCB1c2VyLCBncm91cCwgMCk7XG5mcy9vcGVuLmMtODI1LX1cbi0tXG5mcy9vcGVuLmM9ODI3PVNZU0NBTExfREVGSU5FMyhsY2hvd24sIGNvbnN0IGNoYXIgX191c2VyICosIGZpbGVuYW1lLCB1aWRfdCwgdXNlciwgZ2lkX3QsIGdyb3VwKVxuZnMvb3Blbi5jLTgyOC17XG5mcy9vcGVuLmM6ODI5Olx0cmV0dXJuIGRvX2ZjaG93bmF0KEFUX0ZEQ1dELCBmaWxlbmFtZSwgdXNlciwgZ3JvdXAsXG5mcy9vcGVuLmMtODMwLVx0XHRcdCAgIEFUX1NZTUxJTktfTk9GT0xMT1cpO1xuLS1cbmluY2x1ZGUvYXNtLWdlbmVyaWMvYXVkaXRfY2hhbmdlX2F0dHIuaD0yND1fX05SX2ZyZW1vdmV4YXR0cixcbmluY2x1ZGUvYXNtLWdlbmVyaWMvYXVkaXRfY2hhbmdlX2F0dHIuaDoyNTojaWZkZWYgX19OUl9mY2hvd25hdFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9hdWRpdF9jaGFuZ2VfYXR0ci5oOjI2Ol9fTlJfZmNob3duYXQsXG5pbmNsdWRlL2FzbS1nZW5lcmljL2F1ZGl0X2NoYW5nZV9hdHRyLmgtMjctX19OUl9mY2htb2RhdCxcbi0tXG5pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmg9NDYzPWFzbWxpbmthZ2UgbG9uZyBzeXNfZmNobW9kYXQyKGludCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICpmaWxlbmFtZSxcbmluY2x1ZGUvbGludXgvc3lzY2FsbHMuaC00NjQtXHRcdFx0ICAgICB1bW9kZV90IG1vZGUsIHVuc2lnbmVkIGludCBmbGFncyk7XG5pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmg6NDY1OmFzbWxpbmthZ2UgbG9uZyBzeXNfZmNob3duYXQoaW50IGRmZCwgY29uc3QgY2hhciBfX3VzZXIgKmZpbGVuYW1lLCB1aWRfdCB1c2VyLFxuaW5jbHVkZS9saW51eC9zeXNjYWxscy5oLTQ2Ni1cdFx0XHQgICAgIGdpZF90IGdyb3VwLCBpbnQgZmxhZyk7XG4tLVxuaW5jbHVkZS9saW51eC9zeXNjYWxscy5oPTEyNjg9aW50IGNvbXBhdF9rc3lzX2lwYyh1MzIgY2FsbCwgaW50IGZpcnN0LCBpbnQgc2Vjb25kLFxuLS1cbmluY2x1ZGUvbGludXgvc3lzY2FsbHMuaC0xMjc0LSAqL1xuaW5jbHVkZS9saW51eC9zeXNjYWxscy5oOjEyNzU6ZXh0ZXJuIGludCBkb19mY2hvd25hdChpbnQgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqZmlsZW5hbWUsIHVpZF90IHVzZXIsXG5pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmgtMTI3Ni1cdFx0ICAgICAgIGdpZF90IGdyb3VwLCBpbnQgZmxhZyk7XG4tLVxuaW5jbHVkZS9saW51eC9zeXNjYWxscy5oPTEyNzg9c3RhdGljIGlubGluZSBsb25nIGtzeXNfY2hvd24oY29uc3QgY2hhciBfX3VzZXIgKmZpbGVuYW1lLCB1aWRfdCB1c2VyLFxuLS1cbmluY2x1ZGUvbGludXgvc3lzY2FsbHMuaC0xMjgwLXtcbmluY2x1ZGUvbGludXgvc3lzY2FsbHMuaDoxMjgxOlx0cmV0dXJuIGRvX2ZjaG93bmF0KEFUX0ZEQ1dELCBmaWxlbmFtZSwgdXNlciwgZ3JvdXAsIDApO1xuaW5jbHVkZS9saW51eC9zeXNjYWxscy5oLTEyODItfVxuLS1cbmluY2x1ZGUvbGludXgvc3lzY2FsbHMuaD0xMjg0PXN0YXRpYyBpbmxpbmUgbG9uZyBrc3lzX2xjaG93bihjb25zdCBjaGFyIF9fdXNlciAqZmlsZW5hbWUsIHVpZF90IHVzZXIsXG4tLVxuaW5jbHVkZS9saW51eC9zeXNjYWxscy5oLTEyODYte1xuaW5jbHVkZS9saW51eC9zeXNjYWxscy5oOjEyODc6XHRyZXR1cm4gZG9fZmNob3duYXQoQVRfRkRDV0QsIGZpbGVuYW1lLCB1c2VyLCBncm91cCxcbmluY2x1ZGUvbGludXgvc3lzY2FsbHMuaC0xMjg4LVx0XHRcdCAgICAgQVRfU1lNTElOS19OT0ZPTExPVyk7XG4tLVxuaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL3VuaXN0ZC5oPTE1Mz1fX1NZU0NBTEwoX19OUl9mY2htb2RhdCwgc3lzX2ZjaG1vZGF0KVxuaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL3VuaXN0ZC5oOjE1NDojZGVmaW5lIF9fTlJfZmNob3duYXQgNTRcbmluY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy91bmlzdGQuaDoxNTU6X19TWVNDQUxMKF9fTlJfZmNob3duYXQsIHN5c19mY2hvd25hdClcbmluY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy91bmlzdGQuaC0xNTYtI2RlZmluZSBfX05SX2ZjaG93biA1NVxuLS1cbmtlcm5lbC90cmFjZS90cmFjZV9zeXNjYWxscy5jPTEwNjA9c3RhdGljIHZvaWQgY2hlY2tfZmF1bHRhYmxlX3N5c2NhbGwoc3RydWN0IHRyYWNlX2V2ZW50X2NhbGwgKmNhbGwsIGludCBucilcbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc3lzY2FsbHMuYy0xMTYzLVx0Y2FzZSBfX05SX2ZjaG1vZGF0Mjpcbmtlcm5lbC90cmFjZS90cmFjZV9zeXNjYWxscy5jOjExNjQ6XHRjYXNlIF9fTlJfZmNob3duYXQ6XG5rZXJuZWwvdHJhY2UvdHJhY2Vfc3lzY2FsbHMuYy0xMTY1LVx0Y2FzZSBfX05SX2ZnZXR4YXR0cjpcbi0tXG5zY3JpcHRzL2NoZWNrc3lzY2FsbHMuc2g9MTg9Y2F0IFx1MDAzY1x1MDAzYyBFT0Zcbi0tXG5zY3JpcHRzL2NoZWNrc3lzY2FsbHMuc2gtMjctI2RlZmluZSBfX0lHTk9SRV9jaG1vZFx0XHQvKiBmY2htb2RhdCAqL1xuc2NyaXB0cy9jaGVja3N5c2NhbGxzLnNoOjI4OiNkZWZpbmUgX19JR05PUkVfY2hvd25cdFx0LyogZmNob3duYXQgKi9cbnNjcmlwdHMvY2hlY2tzeXNjYWxscy5zaC0yOS0jZGVmaW5lIF9fSUdOT1JFX21rZGlyXHRcdC8qIG1rZGlyYXQgKi9cbnNjcmlwdHMvY2hlY2tzeXNjYWxscy5zaC0zMC0jZGVmaW5lIF9fSUdOT1JFX3JtZGlyXHRcdC8qIHVubGlua2F0ICovXG5zY3JpcHRzL2NoZWNrc3lzY2FsbHMuc2g6MzE6I2RlZmluZSBfX0lHTk9SRV9sY2hvd25cdFx0LyogZmNob3duYXQgKi9cbnNjcmlwdHMvY2hlY2tzeXNjYWxscy5zaC0zMi0jZGVmaW5lIF9fSUdOT1JFX2FjY2Vzc1x0XHQvKiBmYWNjZXNzYXQgKi9cbi0tXG5zY3JpcHRzL3N5c2NhbGwudGJsLTcxLTUzXHRjb21tb25cdGZjaG1vZGF0XHRcdFx0c3lzX2ZjaG1vZGF0XG5zY3JpcHRzL3N5c2NhbGwudGJsOjcyOjU0XHRjb21tb25cdGZjaG93bmF0XHRcdFx0c3lzX2ZjaG93bmF0XG5zY3JpcHRzL3N5c2NhbGwudGJsLTczLTU1XHRjb21tb25cdGZjaG93blx0XHRcdFx0c3lzX2ZjaG93blxuLS1cbnRvb2xzL2luY2x1ZGUvbm9saWJjL3N5cy5oPTIwMD1pbnQgX3N5c19jaG93bihjb25zdCBjaGFyICpwYXRoLCB1aWRfdCBvd25lciwgZ2lkX3QgZ3JvdXApXG50b29scy9pbmNsdWRlL25vbGliYy9zeXMuaC0yMDEte1xudG9vbHMvaW5jbHVkZS9ub2xpYmMvc3lzLmg6MjAyOiNpZiBkZWZpbmVkKF9fTlJfZmNob3duYXQpXG50b29scy9pbmNsdWRlL25vbGliYy9zeXMuaDoyMDM6XHRyZXR1cm4gX19ub2xpYmNfc3lzY2FsbDUoX19OUl9mY2hvd25hdCwgQVRfRkRDV0QsIHBhdGgsIG93bmVyLCBncm91cCwgMCk7XG50b29scy9pbmNsdWRlL25vbGliYy9zeXMuaC0yMDQtI2Vsc2Vcbi0tXG50b29scy9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvdW5pc3RkLmg9MTUzPV9fU1lTQ0FMTChfX05SX2ZjaG1vZGF0LCBzeXNfZmNobW9kYXQpXG50b29scy9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvdW5pc3RkLmg6MTU0OiNkZWZpbmUgX19OUl9mY2hvd25hdCA1NFxudG9vbHMvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL3VuaXN0ZC5oOjE1NTpfX1NZU0NBTEwoX19OUl9mY2hvd25hdCwgc3lzX2ZjaG93bmF0KVxudG9vbHMvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL3VuaXN0ZC5oLTE1Ni0jZGVmaW5lIF9fTlJfZmNob3duIDU1XG4tLVxudG9vbHMvcGVyZi9hcmNoL2FscGhhL2VudHJ5L3N5c2NhbGxzL3N5c2NhbGwudGJsLTM4My00NTJcdGNvbW1vblx0bWtub2RhdFx0XHRcdFx0c3lzX21rbm9kYXRcbnRvb2xzL3BlcmYvYXJjaC9hbHBoYS9lbnRyeS9zeXNjYWxscy9zeXNjYWxsLnRibDozODQ6NDUzXHRjb21tb25cdGZjaG93bmF0XHRcdFx0c3lzX2ZjaG93bmF0XG50b29scy9wZXJmL2FyY2gvYWxwaGEvZW50cnkvc3lzY2FsbHMvc3lzY2FsbC50YmwtMzg1LTQ1NFx0Y29tbW9uXHRmdXRpbWVzYXRcdFx0XHRzeXNfZnV0aW1lc2F0XG4tLVxudG9vbHMvcGVyZi9hcmNoL2FybS9lbnRyeS9zeXNjYWxscy9zeXNjYWxsLnRibC0zNDItMzI0XHRjb21tb25cdG1rbm9kYXRcdFx0XHRzeXNfbWtub2RhdFxudG9vbHMvcGVyZi9hcmNoL2FybS9lbnRyeS9zeXNjYWxscy9zeXNjYWxsLnRibDozNDM6MzI1XHRjb21tb25cdGZjaG93bmF0XHRcdHN5c19mY2hvd25hdFxudG9vbHMvcGVyZi9hcmNoL2FybS9lbnRyeS9zeXNjYWxscy9zeXNjYWxsLnRibC0zNDQtMzI2XHRjb21tb25cdGZ1dGltZXNhdFx0XHRzeXNfZnV0aW1lc2F0X3RpbWUzMlxuLS1cbnRvb2xzL3BlcmYvYXJjaC9hcm02NC9lbnRyeS9zeXNjYWxscy9zeXNjYWxsXzMyLnRibC0zMzktMzI0XHRjb21tb25cdG1rbm9kYXRcdFx0XHRzeXNfbWtub2RhdFxudG9vbHMvcGVyZi9hcmNoL2FybTY0L2VudHJ5L3N5c2NhbGxzL3N5c2NhbGxfMzIudGJsOjM0MDozMjVcdGNvbW1vblx0ZmNob3duYXRcdFx0c3lzX2ZjaG93bmF0XG50b29scy9wZXJmL2FyY2gvYXJtNjQvZW50cnkvc3lzY2FsbHMvc3lzY2FsbF8zMi50YmwtMzQxLTMyNlx0Y29tbW9uXHRmdXRpbWVzYXRcdFx0c3lzX2Z1dGltZXNhdF90aW1lMzJcbi0tXG50b29scy9wZXJmL2FyY2gvbWlwcy9lbnRyeS9zeXNjYWxscy9zeXNjYWxsX242NC50YmwtMjYwLTI0OVx0bjY0XHRta25vZGF0XHRcdFx0XHRzeXNfbWtub2RhdFxudG9vbHMvcGVyZi9hcmNoL21pcHMvZW50cnkvc3lzY2FsbHMvc3lzY2FsbF9uNjQudGJsOjI2MToyNTBcdG42NFx0ZmNob3duYXRcdFx0XHRzeXNfZmNob3duYXRcbnRvb2xzL3BlcmYvYXJjaC9taXBzL2VudHJ5L3N5c2NhbGxzL3N5c2NhbGxfbjY0LnRibC0yNjItMjUxXHRuNjRcdGZ1dGltZXNhdFx0XHRcdHN5c19mdXRpbWVzYXRcbi0tXG50b29scy9wZXJmL2FyY2gvcGFyaXNjL2VudHJ5L3N5c2NhbGxzL3N5c2NhbGwudGJsLTMxNC0yNzdcdGNvbW1vblx0bWtub2RhdFx0XHRcdHN5c19ta25vZGF0XG50b29scy9wZXJmL2FyY2gvcGFyaXNjL2VudHJ5L3N5c2NhbGxzL3N5c2NhbGwudGJsOjMxNToyNzhcdGNvbW1vblx0ZmNob3duYXRcdFx0c3lzX2ZjaG93bmF0XG50b29scy9wZXJmL2FyY2gvcGFyaXNjL2VudHJ5L3N5c2NhbGxzL3N5c2NhbGwudGJsLTMxNi0yNzlcdDMyXHRmdXRpbWVzYXRcdFx0c3lzX2Z1dGltZXNhdF90aW1lMzJcbi0tXG50b29scy9wZXJmL2FyY2gvcG93ZXJwYy9lbnRyeS9zeXNjYWxscy9zeXNjYWxsLnRibC0zNzUtMjg4XHRjb21tb25cdG1rbm9kYXRcdFx0XHRcdHN5c19ta25vZGF0XG50b29scy9wZXJmL2FyY2gvcG93ZXJwYy9lbnRyeS9zeXNjYWxscy9zeXNjYWxsLnRibDozNzY6Mjg5XHRjb21tb25cdGZjaG93bmF0XHRcdFx0c3lzX2ZjaG93bmF0XG50b29scy9wZXJmL2FyY2gvcG93ZXJwYy9lbnRyeS9zeXNjYWxscy9zeXNjYWxsLnRibC0zNzctMjkwXHQzMlx0ZnV0aW1lc2F0XHRcdFx0c3lzX2Z1dGltZXNhdF90aW1lMzJcbi0tXG50b29scy9wZXJmL2FyY2gvczM5MC9lbnRyeS9zeXNjYWxscy9zeXNjYWxsLnRibC0yNDQtMjkwXHRjb21tb25cdG1rbm9kYXRcdFx0XHRcdHN5c19ta25vZGF0XG50b29scy9wZXJmL2FyY2gvczM5MC9lbnRyeS9zeXNjYWxscy9zeXNjYWxsLnRibDoyNDU6MjkxXHRjb21tb25cdGZjaG93bmF0XHRcdFx0c3lzX2ZjaG93bmF0XG50b29scy9wZXJmL2FyY2gvczM5MC9lbnRyeS9zeXNjYWxscy9zeXNjYWxsLnRibC0yNDYtMjkyXHRjb21tb25cdGZ1dGltZXNhdFx0XHRcdHN5c19mdXRpbWVzYXRcbi0tXG50b29scy9wZXJmL2FyY2gvc2gvZW50cnkvc3lzY2FsbHMvc3lzY2FsbC50YmwtMzA3LTI5N1x0Y29tbW9uXHRta25vZGF0XHRcdFx0XHRzeXNfbWtub2RhdFxudG9vbHMvcGVyZi9hcmNoL3NoL2VudHJ5L3N5c2NhbGxzL3N5c2NhbGwudGJsOjMwODoyOThcdGNvbW1vblx0ZmNob3duYXRcdFx0XHRzeXNfZmNob3duYXRcbnRvb2xzL3BlcmYvYXJjaC9zaC9lbnRyeS9zeXNjYWxscy9zeXNjYWxsLnRibC0zMDktMjk5XHRjb21tb25cdGZ1dGltZXNhdFx0XHRcdHN5c19mdXRpbWVzYXRfdGltZTMyXG4tLVxudG9vbHMvcGVyZi9hcmNoL3NwYXJjL2VudHJ5L3N5c2NhbGxzL3N5c2NhbGwudGJsLTM0OS0yODZcdGNvbW1vblx0bWtub2RhdFx0XHRcdHN5c19ta25vZGF0XG50b29scy9wZXJmL2FyY2gvc3BhcmMvZW50cnkvc3lzY2FsbHMvc3lzY2FsbC50Ymw6MzUwOjI4N1x0Y29tbW9uXHRmY2hvd25hdFx0XHRzeXNfZmNob3duYXRcbnRvb2xzL3BlcmYvYXJjaC9zcGFyYy9lbnRyeS9zeXNjYWxscy9zeXNjYWxsLnRibC0zNTEtMjg4XHQzMlx0ZnV0aW1lc2F0XHRcdHN5c19mdXRpbWVzYXRfdGltZTMyXG4tLVxudG9vbHMvcGVyZi9hcmNoL3g4Ni9lbnRyeS9zeXNjYWxscy9zeXNjYWxsXzMyLnRibC0zMTItMjk3XHRpMzg2XHRta25vZGF0XHRcdFx0c3lzX21rbm9kYXRcbnRvb2xzL3BlcmYvYXJjaC94ODYvZW50cnkvc3lzY2FsbHMvc3lzY2FsbF8zMi50Ymw6MzEzOjI5OFx0aTM4Nlx0ZmNob3duYXRcdFx0c3lzX2ZjaG93bmF0XG50b29scy9wZXJmL2FyY2gveDg2L2VudHJ5L3N5c2NhbGxzL3N5c2NhbGxfMzIudGJsLTMxNC0yOTlcdGkzODZcdGZ1dGltZXNhdFx0XHRzeXNfZnV0aW1lc2F0X3RpbWUzMlxuLS1cbnRvb2xzL3BlcmYvYXJjaC94ODYvZW50cnkvc3lzY2FsbHMvc3lzY2FsbF82NC50YmwtMjcxLTI1OVx0Y29tbW9uXHRta25vZGF0XHRcdFx0c3lzX21rbm9kYXRcbnRvb2xzL3BlcmYvYXJjaC94ODYvZW50cnkvc3lzY2FsbHMvc3lzY2FsbF82NC50Ymw6MjcyOjI2MFx0Y29tbW9uXHRmY2hvd25hdFx0XHRzeXNfZmNob3duYXRcbnRvb2xzL3BlcmYvYXJjaC94ODYvZW50cnkvc3lzY2FsbHMvc3lzY2FsbF82NC50YmwtMjczLTI2MVx0Y29tbW9uXHRmdXRpbWVzYXRcdFx0c3lzX2Z1dGltZXNhdFxuLS1cbnRvb2xzL3BlcmYvYXJjaC94dGVuc2EvZW50cnkvc3lzY2FsbHMvc3lzY2FsbC50YmwtMzE5LTI5Nlx0Y29tbW9uXHR1dGltZW5zYXRcdFx0XHRzeXNfdXRpbWVuc2F0X3RpbWUzMlxudG9vbHMvcGVyZi9hcmNoL3h0ZW5zYS9lbnRyeS9zeXNjYWxscy9zeXNjYWxsLnRibDozMjA6Mjk3XHRjb21tb25cdGZjaG93bmF0XHRcdFx0c3lzX2ZjaG93bmF0XG50b29scy9wZXJmL2FyY2gveHRlbnNhL2VudHJ5L3N5c2NhbGxzL3N5c2NhbGwudGJsLTMyMS0yOThcdGNvbW1vblx0ZnV0aW1lc2F0XHRcdFx0c3lzX2Z1dGltZXNhdF90aW1lMzJcbi0tXG50b29scy9wZXJmL2J1aWx0aW4tdHJhY2UuYz0xMTM0PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3lzY2FsbF9mbXQgc3lzY2FsbF9mbXRzW10gPSB7XG4tLVxudG9vbHMvcGVyZi9idWlsdGluLXRyYWNlLmMtMTE3OS1cdCAgLmFyZyA9IHsgWzBdID0geyAuc2NucHJpbnRmID0gU0NBX0ZEQVQsIC8qIGZkICovIH0sIH0sIH0sXG50b29scy9wZXJmL2J1aWx0aW4tdHJhY2UuYzoxMTgwOlx0eyAubmFtZVx0ICAgID0gXCYjMzQ7ZmNob3duYXRcJiMzNDssXG50b29scy9wZXJmL2J1aWx0aW4tdHJhY2UuYy0xMTgxLVx0ICAuYXJnID0geyBbMF0gPSB7IC5zY25wcmludGYgPSBTQ0FfRkRBVCwgLyogZmQgKi8gfSwgfSwgfSxcbi0tXG50b29scy9wZXJmL3RyYWNlL3N0cmFjZS9ncm91cHMvc3RyaW5nPTEzPWZjaG1vZGF0XG50b29scy9wZXJmL3RyYWNlL3N0cmFjZS9ncm91cHMvc3RyaW5nOjE0OmZjaG93bmF0XG50b29scy9wZXJmL3RyYWNlL3N0cmFjZS9ncm91cHMvc3RyaW5nLTE1LWZnZXR4YXR0clxuLS1cbnRvb2xzL3NjcmlwdHMvc3lzY2FsbC50YmwtNzEtNTNcdGNvbW1vblx0ZmNobW9kYXRcdFx0XHRzeXNfZmNobW9kYXRcbnRvb2xzL3NjcmlwdHMvc3lzY2FsbC50Ymw6NzI6NTRcdGNvbW1vblx0ZmNob3duYXRcdFx0XHRzeXNfZmNob3duYXRcbnRvb2xzL3NjcmlwdHMvc3lzY2FsbC50YmwtNzMtNTVcdGNvbW1vblx0ZmNob3duXHRcdFx0XHRzeXNfZmNob3duXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvb3ZlcmxheWZzL2lkbWFwcGVkX21vdW50cy5jPTM0Nj1URVNUX0YoaWRtYXBwZWRfb3ZlcmxheSwgY2hvd24pXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvb3ZlcmxheWZzL2lkbWFwcGVkX21vdW50cy5jLTM2Mi1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL292ZXJsYXlmcy9pZG1hcHBlZF9tb3VudHMuYzozNjM6XHRBU1NFUlRfRVEoZmNob3duYXQob3ZsLCBcJiMzNDtmXCYjMzQ7LCBJRF9OUyAmIzQzOyA1LCBJRF9OUyAmIzQzOyA1LCAwKSwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9vdmVybGF5ZnMvaWRtYXBwZWRfbW91bnRzLmMtMzY0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNjo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjc2NQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYGRvX2ZjaG93bmF0YCoqCgpPa2F5LCBsZXQmIzM5O3MgZHJpbGwgZG93biBpbnRvIGBkb19mY2hvd25hdGAgaW4gYGZzL29wZW4uY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmbG93IGFuZCBwb3RlbnRpYWwgZ290Y2hhcy4gSSYjMzk7bSBpbW1lZGlhdGVseSBpbnRlcmVzdGVkIGluIHRoZSBhY2Nlc3MgY29udHJvbCBpbXBsaWNhdGlvbnMgb2YgdGhpcyBzeXN0ZW0gY2FsbC4gV2hhdCBjaGVja3MgYXJlIHBlcmZvcm1lZCBmb3IgZWZmZWN0aXZlIHVzZXIvZ3JvdXAgSUQgY29tYmluYXRpb25zPyBXaGF0IGVkZ2UgY2FzZXMgZXhpc3QgcmVnYXJkaW5nIHN5bWxpbmtzIGFuZCBjcm9zcy1maWxlc3lzdGVtIG9wZXJhdGlvbnM/IEkmIzM5O2xsIHByb2JhYmx5IGJlIGxvb2tpbmcgZm9yIHRoZSBpbnRlcnBsYXkgd2l0aCBjYXBhYmlsaXRpZXMgYW5kIHNlY3VyaXR5IG1vZHVsZXMgKFNFTGludXgsIEFwcEFybW9yLCBldGMuKS4gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIEkgc2hvdWxkIGJlIG1pbmRmdWwgb2YsIHBhcnRpY3VsYXJseSB3aGVuIGRlYWxpbmcgd2l0aCBjb25jdXJyZW50IGZpbGUgYWNjZXNzIGFuZCBwZXJtaXNzaW9ucyBjaGFuZ2VzPyBJIGV4cGVjdCB0byBzZWUgY2hlY2tzIHJlbGF0ZWQgdG8gdGhlIGBBVF9FTVBUWV9QQVRIYCBhbmQgYEFUX1NZTUxJTktfTk9GT0xMT1dgIGZsYWdzOyBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGV5JiMzOTtyZSBoYW5kbGVkIGNvcnJlY3RseSB0byBwcmV2ZW50IHByaXZpbGVnZSBlc2NhbGF0aW9uLiBUaW1lIHRvIGdyYWIgbXkgZ3JlcCBhbmQgc3RhcnQgZGlzc2VjdGluZyB0aGlzIHRoaW5nLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE2OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvb3Blbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzg3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3ODc6XHRpbnQgZG9fZmNob3duYXQoaW50IGRmZCwgY29uc3QgY2hhciBfX3VzZXIgKmZpbGVuYW1lLCB1aWRfdCB1c2VyLCBnaWRfdCBncm91cCxcbiA3ODg6XHRcdFx0aW50IGZsYWcpXG4gNzg5Olx0e1xuIDc5MDpcdFx0c3RydWN0IHBhdGggcGF0aDtcbiA3OTE6XHRcdGludCBlcnJvcjtcbiA3OTI6XHRcdGludCBsb29rdXBfZmxhZ3M7XG4gNzkzOlx0XG4gNzk0Olx0XHRpZiAoKGZsYWcgXHUwMDI2IH4oQVRfU1lNTElOS19OT0ZPTExPVyB8IEFUX0VNUFRZX1BBVEgpKSAhPSAwKVxuIDc5NTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA3OTY6XHRcbiA3OTc6XHRcdGxvb2t1cF9mbGFncyA9IChmbGFnIFx1MDAyNiBBVF9TWU1MSU5LX05PRk9MTE9XKSA/IDAgOiBMT09LVVBfRk9MTE9XO1xuIDc5ODpcdFx0Q0xBU1MoZmlsZW5hbWVfdWZsYWdzLCBuYW1lKShmaWxlbmFtZSwgZmxhZyk7XG4gNzk5Olx0cmV0cnk6XG4gODAwOlx0XHRlcnJvciA9IGZpbGVuYW1lX2xvb2t1cChkZmQsIG5hbWUsIGxvb2t1cF9mbGFncywgXHUwMDI2cGF0aCwgTlVMTCk7XG4gODAxOlx0XHRpZiAoIWVycm9yKSB7XG4gODAyOlx0XHRcdGVycm9yID0gbW50X3dhbnRfd3JpdGUocGF0aC5tbnQpO1xuIDgwMzpcdFx0XHRpZiAoIWVycm9yKSB7XG4gODA0Olx0XHRcdFx0ZXJyb3IgPSBjaG93bl9jb21tb24oXHUwMDI2cGF0aCwgdXNlciwgZ3JvdXApO1xuIDgwNTpcdFx0XHRcdG1udF9kcm9wX3dyaXRlKHBhdGgubW50KTtcbiA4MDY6XHRcdFx0fVxuIDgwNzpcdFx0XHRwYXRoX3B1dChcdTAwMjZwYXRoKTtcbiA4MDg6XHRcdFx0aWYgKHJldHJ5X2VzdGFsZShlcnJvciwgbG9va3VwX2ZsYWdzKSkge1xuIDgwOTpcdFx0XHRcdGxvb2t1cF9mbGFncyB8PSBMT09LVVBfUkVWQUw7XG4gODEwOlx0XHRcdFx0Z290byByZXRyeTtcbiA4MTE6XHRcdFx0fVxuIDgxMjpcdFx0fVxuIDgxMzpcdFx0cmV0dXJuIGVycm9yO1xuIDgxNDpcdH1cbiA4MTU6XHRcbiA4MTY6XHRTWVNDQUxMX0RFRklORTUoZmNob3duYXQsIGludCwgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqLCBmaWxlbmFtZSwgdWlkX3QsIHVzZXIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE2OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NTAzCgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBJbXBsZW1lbnRhdGlvbiBvZiBgZG9fZmNob3duYXRgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgYGRvX2ZjaG93bmF0YCB3b3JrcywgYW5kIGl0JiMzOTtzIHVzaW5nIGBmaWxlbmFtZV9sb29rdXAoZGZkLCBuYW1lLCBsb29rdXBfZmxhZ3MsICZhbXA7cGF0aCwgTlVMTClgLiAgVGhhdCYjMzk7cyB0aGUgc3RhbmRhcmQgd2F5IHRvIHJlc29sdmUgYSBmaWxlbmFtZSByZWxhdGl2ZSB0byBhIGRpcmVjdG9yeSBmaWxlIGRlc2NyaXB0b3IsIEkmIzM5O20gZmFtaWxpYXIgd2l0aCB0aGF0LiAgQnV0IHdhaXQgYSBtaW51dGUsIGBmaWxlbmFtZV9sb29rdXBgIGlzIGFsc28gcmVzcG9uc2libGUgZm9yIGhhbmRsaW5nIGBBVF9FTVBUWV9QQVRIYCBhbmQgdGhvc2UgdHJpY2t5IGBPX1BBVEhgIGZpbGUgZGVzY3JpcHRvcnMuICBJbnRlcmVzdGluZy4gTm93IGl0IGhhcyBtZSB3b25kZXJpbmcsIGRvZXMgYGZpbGVuYW1lX2xvb2t1cGAgKmFjdHVhbGx5KiBzdXBwb3J0IGBPX1BBVEhgIGZpbGUgZGVzY3JpcHRvcnM/IEkgdGhvdWdodCB0aGUgb3JpZ2luYWwgY29kZSBtaWdodCBoYXZlIGF2b2lkZWQgdGhpcywgYnV0IHRoaXMgbWFrZXMgbWUgY3VyaW91cy4gSSYjMzk7ZCBiZXR0ZXIgZG91YmxlLWNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgZmlsZW5hbWVfbG9va3VwYCBpdHNlbGYuIExldCYjMzk7cyBnbyBkaXZlIGludG8gYGZzL25hbWVpLmNgIGFuZCBzZWUgd2hhdCYjMzk7cyByZWFsbHkgaGFwcGVuaW5nIHVuZGVyIHRoZSBob29kLiBUaW1lIHRvIGNvbmZpcm0gaWYgbXkgYXNzdW1wdGlvbnMgYXJlIGNvcnJlY3QsIG9yIGlmIEkmIzM5O20gbWlzc2luZyBzb21ldGhpbmcgaW1wb3J0YW50IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNjo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnQgZmlsZW5hbWVfbG9va3VwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2ludGVybmFsLmg9NDk9ZXh0ZXJuIGludCBmaW5pc2hfY2xlYW5fY29udGV4dChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpO1xuLS1cbmZzL2ludGVybmFsLmgtNTMtICovXG5mcy9pbnRlcm5hbC5oOjU0OmV4dGVybiBpbnQgZmlsZW5hbWVfbG9va3VwKGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqbmFtZSwgdW5zaWduZWQgZmxhZ3MsXG5mcy9pbnRlcm5hbC5oLTU1LVx0XHRcdCAgIHN0cnVjdCBwYXRoICpwYXRoLCBjb25zdCBzdHJ1Y3QgcGF0aCAqcm9vdCk7XG4tLVxuZnMvbmFtZWkuYz0yODAxPXN0YXRpYyBpbnQgcGF0aF9sb29rdXBhdChzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgdW5zaWduZWQgZmxhZ3MsIHN0cnVjdCBwYXRoICpwYXRoKVxuLS1cbmZzL25hbWVpLmMtMjgzMy1cbmZzL25hbWVpLmM6MjgzNDppbnQgZmlsZW5hbWVfbG9va3VwKGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqbmFtZSwgdW5zaWduZWQgZmxhZ3MsXG5mcy9uYW1laS5jLTI4MzUtXHRcdCAgICBzdHJ1Y3QgcGF0aCAqcGF0aCwgY29uc3Qgc3RydWN0IHBhdGggKnJvb3QpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE2OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MDQwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCYjMzk7cyBteSBvd24gaW50ZXJuYWwgZGlhbG9ndWU6CgoqKkluaXRpYWwgQXNzZXNzbWVudDogTmF2aWdhdGluZyB0aGUgTGFuZHNjYXBlKioKCkFscmlnaHQsIHRoZSBkaXJlY3RpdmUgaXMgdG8gc3RhcnQgd2l0aCBgZmlsZW5hbWVfbG9va3VwYC4gVGhhdCBzdWdnZXN0cyB3ZSYjMzk7cmUgaW5pdGlhdGluZyBhIHNlYXJjaCBvciByZXRyaWV2YWwgcHJvY2VzcywgcHJvYmFibHkgd2l0aGluIGEgbGFyZ2VyIHN5c3RlbS4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gaW1tZWRpYXRlbHkgYXNzZXNzIHRoZSBzY29wZSBhbmQgcG90ZW50aWFsIGNvbnRleHQgb2YgdGhpcyBwYXJ0aWN1bGFyIGxvb2t1cC4gSXMgaXQgYSBzeXN0ZW0td2lkZSBzZWFyY2gsIG9yIGNvbmZpbmVkIHRvIGEgc3BlY2lmaWMgYXBwbGljYXRpb24gb3IgZGF0YSBzdHJ1Y3R1cmU/IFdoYXQmIzM5O3MgdGhlIGV4cGVjdGVkIGZvcm1hdCBvZiB0aGUgYGZpbGVuYW1lX2xvb2t1cGAgb3V0cHV0PyBJcyBpdCBhIGRhdGEgc3RydWN0dXJlLCBhIGZ1bmN0aW9uLCBhIHBvaW50ZXI/IEtub3dpbmcgdGhhdCB3aWxsIGluZmx1ZW5jZSBteSBuZXh0IG1vdmUsIGFuZCBob3cgZGVlcCBJIG5lZWQgdG8gZGlnLiBXZSBuZWVkIHRvIGFzY2VydGFpbiB0aGUgbWV0aG9kIHVzZWQgZm9yIHRoZSBsb29rdXAgc28gd2UgY2FuIHVuZGVyc3RhbmQgdGhlIGRhdGEgc3RydWN0dXJlIGJlaGluZCBpdC4gQXJlIHRoZXJlIGluZGV4aW5nIG9yIGhhc2hpbmcgbWV0aG9kcyBhdCB3b3JrPyBJcyBpdCBhbiBlZmZpY2llbnQgc29sdXRpb24gb3IgaXMgdGhlcmUgYSBuZWVkIHRvIHJlcGxhY2UgaXQ/IEkmIzM5O2xsIHByb2JhYmx5IG5lZWQgdG8gY29uc2lkZXIgZmFjdG9ycyBvZiBzY2FsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMTY6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9uYW1laS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjgzNCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyODM0Olx0aW50IGZpbGVuYW1lX2xvb2t1cChpbnQgZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKm5hbWUsIHVuc2lnbmVkIGZsYWdzLFxuMjgzNTpcdFx0XHQgICAgc3RydWN0IHBhdGggKnBhdGgsIGNvbnN0IHN0cnVjdCBwYXRoICpyb290KVxuMjgzNjpcdHtcbjI4Mzc6XHRcdGludCByZXR2YWw7XG4yODM4Olx0XHRzdHJ1Y3QgbmFtZWlkYXRhIG5kO1xuMjgzOTpcdFx0aWYgKElTX0VSUihuYW1lKSlcbjI4NDA6XHRcdFx0cmV0dXJuIFBUUl9FUlIobmFtZSk7XG4yODQxOlx0XHRzZXRfbmFtZWlkYXRhKFx1MDAyNm5kLCBkZmQsIG5hbWUsIHJvb3QpO1xuMjg0MjpcdFx0cmV0dmFsID0gcGF0aF9sb29rdXBhdChcdTAwMjZuZCwgZmxhZ3MgfCBMT09LVVBfUkNVLCBwYXRoKTtcbjI4NDM6XHRcdGlmICh1bmxpa2VseShyZXR2YWwgPT0gLUVDSElMRCkpXG4yODQ0Olx0XHRcdHJldHZhbCA9IHBhdGhfbG9va3VwYXQoXHUwMDI2bmQsIGZsYWdzLCBwYXRoKTtcbjI4NDU6XHRcdGlmICh1bmxpa2VseShyZXR2YWwgPT0gLUVTVEFMRSkpXG4yODQ2Olx0XHRcdHJldHZhbCA9IHBhdGhfbG9va3VwYXQoXHUwMDI2bmQsIGZsYWdzIHwgTE9PS1VQX1JFVkFMLCBwYXRoKTtcbjI4NDc6XHRcbjI4NDg6XHRcdGlmIChsaWtlbHkoIXJldHZhbCkpXG4yODQ5Olx0XHRcdGF1ZGl0X2lub2RlKG5hbWUsIHBhdGgtXHUwMDNlZGVudHJ5LFxuMjg1MDpcdFx0XHRcdCAgICBmbGFncyBcdTAwMjYgTE9PS1VQX01PVU5UUE9JTlQgPyBBVURJVF9JTk9ERV9OT0VWQUwgOiAwKTtcbjI4NTE6XHRcdHJlc3RvcmVfbmFtZWlkYXRhKCk7XG4yODUyOlx0XHRyZXR1cm4gcmV0dmFsO1xuMjg1MzpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMTY6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg2MzEKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgc2V0X25hbWVpZGF0YWAgYW5kIEl0cyBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBzZXRfbmFtZWlkYXRhYC4gVGhlIGNvZGUmIzM5O3MgdXNpbmcgYGRmZGAsIGFuZCBteSBtZW50YWwgcmFkYXIgaXMgaW1tZWRpYXRlbHkgdXAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25uZWN0aW9uIGJldHdlZW4gdGhlc2UgdHdvLiBNeSBmaXJzdCBtb3ZlIHdpbGwgYmUgdG8gcmUtZXhhbWluZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgYHNldF9uYW1laWRhdGFgLiBJdCYjMzk7cyBsaWtlbHkgdGhhdCBgZGZkYCBpcyBhIGNydWNpYWwgZGF0YSBzdHJ1Y3R1cmUgb3IgYSBkZXBlbmRlbmN5IHdpdGhpbiB0aGF0IGZ1bmN0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIHVucGFjayB3aGF0IGl0JiMzOTtzIHN0b3JpbmcuIEkgYW50aWNpcGF0ZSB0aGlzIHdpbGwgaW52b2x2ZSBhIGRlZXAgZGl2ZSB0byBleGFtaW5lIGhvdyB0aGF0IGRlcGVuZGVuY3kgaXMgY29uc3RydWN0ZWQgb3IgcG9wdWxhdGVkLCBhbmQgdGhlbiBob3cgYHNldF9uYW1laWRhdGFgIGNvbnN1bWVzIGl0LiBJJiMzOTtsbCBiZSBwYXJ0aWN1bGFybHkgZm9jdXNlZCBvbiBob3cgdGhlIGRhdGEgaGFuZGxlZCBieSBgZGZkYCBpbXBhY3RzIHRoZSBvdmVyYWxsIGRhdGEgZmxvdywgZXNwZWNpYWxseSB3aXRoIHJlZ2FyZCB0byBhbnkgbmFtZS1yZWxhdGVkIG9wZXJhdGlvbnMuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBkYXRhIGZsb3cgYW5kIHBvdGVudGlhbCBmb3IgYW55IHNpZGUtZWZmZWN0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMTY6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdGF0aWMgdm9pZCBzZXRfbmFtZWlkYXRhJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMTY6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg4ODcKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW5pdGlhbCBTZWFyY2ggSW5xdWlyeSoqCgpSaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gZ2V0IHNvbWUgaW5mb3JtYXRpb24gb24gYHNldF9uYW1laWRhdGFgLiBJdCYjMzk7cyBhIHByZXR0eSBzcGVjaWZpYyB0ZXJtLCBzbyBJJiMzOTttIGhvcGluZyBmb3IgYSBjbGVhbiBoaXQsIGJ1dCBleHBlcmllbmNlIHRlbGxzIG1lIGl0JiMzOTtzIGFsd2F5cyB3aXNlIHRvIGJlIHByZXBhcmVkIGZvciBzb21lIGludGVycHJldGF0aW9uIGFuZCBkaXNhbWJpZ3VhdGlvbi4gSeKAmW0gZXhwZWN0aW5nIHRoaXMgdG8gYmUgcmVsYXRlZCB0byBmaWxlIHN5c3RlbSBvcGVyYXRpb25zIG9yIG1ldGFkYXRhIG1hbmFnZW1lbnQsIGxpa2VseSB3aXRoaW4gYSBjb250ZXh0IG9mIHNwZWNpZmljIE9TIGtlcm5lbCBvciBsaWJyYXJ5IGNhbGxzLiBHaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24gaXQgY291bGQgYmUgYSBjYWxsIGZvciBkaXJlY3Qgc2V0dGluZyBvZiBmaWxlIHN5c3RlbSBtZXRhZGF0YS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMTY6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2V0X25hbWVpZGF0YSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9uYW1laS5jPTcyOD1zdHJ1Y3QgbmFtZWlkYXRhIHtcbi0tXG5mcy9uYW1laS5jLTc1Ni1cbmZzL25hbWVpLmM6NzU3OnN0YXRpYyB2b2lkIF9fc2V0X25hbWVpZGF0YShzdHJ1Y3QgbmFtZWlkYXRhICpwLCBpbnQgZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKm5hbWUpXG5mcy9uYW1laS5jLTc1OC17XG4tLVxuZnMvbmFtZWkuYy03NzEtXG5mcy9uYW1laS5jOjc3MjpzdGF0aWMgaW5saW5lIHZvaWQgc2V0X25hbWVpZGF0YShzdHJ1Y3QgbmFtZWlkYXRhICpwLCBpbnQgZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKm5hbWUsXG5mcy9uYW1laS5jLTc3My1cdFx0XHQgIGNvbnN0IHN0cnVjdCBwYXRoICpyb290KVxuZnMvbmFtZWkuYy03NzQte1xuZnMvbmFtZWkuYzo3NzU6XHRfX3NldF9uYW1laWRhdGEocCwgZGZkLCBuYW1lKTtcbmZzL25hbWVpLmMtNzc2LVx0cC1cdTAwM2VzdGF0ZSA9IDA7XG4tLVxuZnMvbmFtZWkuYz0yODM0PWludCBmaWxlbmFtZV9sb29rdXAoaW50IGRmZCwgc3RydWN0IGZpbGVuYW1lICpuYW1lLCB1bnNpZ25lZCBmbGFncyxcbi0tXG5mcy9uYW1laS5jLTI4NDAtXHRcdHJldHVybiBQVFJfRVJSKG5hbWUpO1xuZnMvbmFtZWkuYzoyODQxOlx0c2V0X25hbWVpZGF0YShcdTAwMjZuZCwgZGZkLCBuYW1lLCByb290KTtcbmZzL25hbWVpLmMtMjg0Mi1cdHJldHZhbCA9IHBhdGhfbG9va3VwYXQoXHUwMDI2bmQsIGZsYWdzIHwgTE9PS1VQX1JDVSwgcGF0aCk7XG4tLVxuZnMvbmFtZWkuYz0yODczPXN0YXRpYyBpbnQgX19maWxlbmFtZV9wYXJlbnRhdChpbnQgZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKm5hbWUsXG4tLVxuZnMvbmFtZWkuYy0yODgyLVx0XHRyZXR1cm4gUFRSX0VSUihuYW1lKTtcbmZzL25hbWVpLmM6Mjg4MzpcdHNldF9uYW1laWRhdGEoXHUwMDI2bmQsIGRmZCwgbmFtZSwgcm9vdCk7XG5mcy9uYW1laS5jLTI4ODQtXHRyZXR2YWwgPSBwYXRoX3BhcmVudGF0KFx1MDAyNm5kLCBmbGFncyB8IExPT0tVUF9SQ1UsIHBhcmVudCk7XG4tLVxuZnMvbmFtZWkuYz00ODc2PXN0cnVjdCBmaWxlICpkb19maWxlX29wZW4oaW50IGRmZCwgc3RydWN0IGZpbGVuYW1lICpwYXRobmFtZSxcbi0tXG5mcy9uYW1laS5jLTQ4ODQtXHRcdHJldHVybiBFUlJfQ0FTVChwYXRobmFtZSk7XG5mcy9uYW1laS5jOjQ4ODU6XHRzZXRfbmFtZWlkYXRhKFx1MDAyNm5kLCBkZmQsIHBhdGhuYW1lLCBOVUxMKTtcbmZzL25hbWVpLmMtNDg4Ni1cdGZpbHAgPSBwYXRoX29wZW5hdChcdTAwMjZuZCwgb3AsIGZsYWdzIHwgTE9PS1VQX1JDVSk7XG4tLVxuZnMvbmFtZWkuYz00ODk1PXN0cnVjdCBmaWxlICpkb19maWxlX29wZW5fcm9vdChjb25zdCBzdHJ1Y3QgcGF0aCAqcm9vdCxcbi0tXG5mcy9uYW1laS5jLTQ5MDgtXG5mcy9uYW1laS5jOjQ5MDk6XHRzZXRfbmFtZWlkYXRhKFx1MDAyNm5kLCAtMSwgZmlsZW5hbWUsIHJvb3QpO1xuZnMvbmFtZWkuYy00OTEwLVx0ZmlsZSA9IHBhdGhfb3BlbmF0KFx1MDAyNm5kLCBvcCwgZmxhZ3MgfCBMT09LVVBfUkNVKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMTY6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk3MzAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgRmlsZXN5c3RlbSBQbHVtYmluZyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBuYW1pbmcgYW5kIHBhdGggbG9va3VwcywgcGFydGljdWxhcmx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiBuYW1laWRhdGEuIFNvLCBteSBpbml0aWFsIGZvY3VzIGlzIGdvaW5nIHRvIGJlIG9uIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiBgX19zZXRfbmFtZWlkYXRhYCBhbmQgYHBhdGhfbG9va3VwYXRgLCBhbmQgYWxzbyBJIHdhbnQgdG8gY29tcGFyZSBgcGF0aF9sb29rdXBhdGAgd2l0aCBgcGF0aF9pbml0YC4gSSYjMzk7bSBndWVzc2luZyB0aGF0IGBfX3NldF9uYW1laWRhdGFgIHBsYXlzIGEgY3J1Y2lhbCByb2xlIGluIHNldHRpbmcgdXAgdGhlIG5hbWVpZGF0YSBzdHJ1Y3R1cmUgaXRzZWxmLCBwcm9iYWJseSBpbml0aWFsaXppbmcgb3IgcG9wdWxhdGluZyBpdCB3aXRoIGluZm9ybWF0aW9uIG5lZWRlZCBmb3Igc3Vic2VxdWVudCBwYXRoIHJlc29sdXRpb24uIGBwYXRoX2xvb2t1cGF0YCBpcyBtb3N0IGxpa2VseSB0aGUgY29yZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IsIHdlbGwsIGxvb2tpbmcgdXAgYSBwYXRoIHJlbGF0aXZlIHRvIGEgZ2l2ZW4gZmlsZSBkZXNjcmlwdG9yLCBhbmQgSSYjMzk7ZCBiZXQgYHBhdGhfaW5pdGAgaW5pdGlhbGl6ZXMgdGhlIHBhdGggc3RydWN0dXJlIGl0c2VsZi4gSXQmIzM5O3MgdGhlIHN0YW5kYXJkIGVudHJ5IHBvaW50LCB3aGVyZWFzIGBwYXRoX2xvb2t1cGF0YCBpcyB0aGUgd29ya2hvcnNlLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0IHdpdGggdGhlIFZGUyBsYXllciwgaW5vZGUgbG9va3VwcywgYW5kIHRoZSB3aG9sZSBwcm9jZXNzIG9mIHRyYXZlcnNpbmcgdGhlIGRpcmVjdG9yeSBoaWVyYXJjaHkuIFRpbWUgdG8gZGlnIGluIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNjo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL25hbWVpLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3NTcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDc1NzpcdHN0YXRpYyB2b2lkIF9fc2V0X25hbWVpZGF0YShzdHJ1Y3QgbmFtZWlkYXRhICpwLCBpbnQgZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKm5hbWUpXG4gNzU4Olx0e1xuIDc1OTpcdFx0c3RydWN0IG5hbWVpZGF0YSAqb2xkID0gY3VycmVudC1cdTAwM2VuYW1laWRhdGE7XG4gNzYwOlx0XHRwLVx1MDAzZXN0YWNrID0gcC1cdTAwM2VpbnRlcm5hbDtcbiA3NjE6XHRcdHAtXHUwMDNlZGVwdGggPSAwO1xuIDc2MjpcdFx0cC1cdTAwM2VkZmQgPSBkZmQ7XG4gNzYzOlx0XHRwLVx1MDAzZW5hbWUgPSBuYW1lO1xuIDc2NDpcdFx0cC1cdTAwM2VwYXRobmFtZSA9IGxpa2VseShuYW1lKSA/IG5hbWUtXHUwMDNlbmFtZSA6IFwmIzM0O1wmIzM0OztcbiA3NjU6XHRcdHAtXHUwMDNlcGF0aC5tbnQgPSBOVUxMO1xuIDc2NjpcdFx0cC1cdTAwM2VwYXRoLmRlbnRyeSA9IE5VTEw7XG4gNzY3Olx0XHRwLVx1MDAzZXRvdGFsX2xpbmtfY291bnQgPSBvbGQgPyBvbGQtXHUwMDNldG90YWxfbGlua19jb3VudCA6IDA7XG4gNzY4Olx0XHRwLVx1MDAzZXNhdmVkID0gb2xkO1xuIDc2OTpcdFx0Y3VycmVudC1cdTAwM2VuYW1laWRhdGEgPSBwO1xuIDc3MDpcdH1cbiA3NzE6XHRcbiA3NzI6XHRzdGF0aWMgaW5saW5lIHZvaWQgc2V0X25hbWVpZGF0YShzdHJ1Y3QgbmFtZWlkYXRhICpwLCBpbnQgZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKm5hbWUsXG4gNzczOlx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgcGF0aCAqcm9vdClcbiA3NzQ6XHR7XG4gNzc1Olx0XHRfX3NldF9uYW1laWRhdGEocCwgZGZkLCBuYW1lKTtcbiA3NzY6XHRcdHAtXHUwMDNlc3RhdGUgPSAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNjo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDM2NQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgcGF0aF9pbml0YCBhbmQgYE9fUEFUSGAgSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gYGZzL25hbWVpLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBwYXRoX2luaXRgIGZ1bmN0aW9uLiBJdCBsb29rcyBsaWtlIGl0IGxldmVyYWdlcyBgbmQtJmd0O2RmZGAgYXMgYSBjcml0aWNhbCBlbGVtZW50LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcmVhbGx5IG5haWwgZG93biBob3cgaXQgaW50ZXJhY3RzIHdpdGggYE9fUEFUSGAgYW5kIGFueSBwb3RlbnRpYWwgbnVhbmNlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgYGRmZGAgaXMgdHJlYXRlZCBkaWZmZXJlbnRseSB3aGVuIGBPX1BBVEhgIGlzIHBhc3NlZC4gV2hhdCBzb3J0IG9mIGludGVybmFsIGNoZWNrcyBhcmUgcGVyZm9ybWVkPyBBcmUgdGhlcmUgYW55IHN1YnRsZSBjaGFuZ2VzIGluIGJlaGF2aW9yIHRoYXQgb2NjdXIgYmVjYXVzZSBvZiB0aGlzIGZsYWc/IEkgd2FudCB0byBtYXAgdGhlIGNvZGUmIzM5O3MgYmVoYXZpb3Igd2hlbiBgT19QQVRIYCBpcyBzZXQgYW5kIGNvbXBhcmUgaXQgdG8gdGhlIHN0YW5kYXJkIHBhdGggbG9va3VwLiBUaGUgZ29hbCBpcyB0byBpZGVudGlmeSBhbnkgb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMsIHBvdGVudGlhbCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMsIG9yIHNpbXBseSBlbnN1cmUgbXkgb3ZlcmFsbCB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgY29kZSBpcyByb2NrIHNvbGlkIHJlZ2FyZGluZyBpdHMgaW50ZXJhY3Rpb24gd2l0aCBmaWxlIGRlc2NyaXB0b3JzLiBBIGNsb3NlIHJlYWRpbmcgaXMgcmVxdWlyZWQuIExldCYjMzk7cyBzZWUgaG93IGBwYXRoX2luaXRgIG1vZGlmaWVzIGBuZGAgYW5kIGhvdyB0aGF0IGluZmx1ZW5jZXMgc3Vic2VxdWVudCBvcGVyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNjo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdGF0aWMgY29uc3QgY2hhciBcXCpwYXRoX2luaXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbmFtZWkuYz0yNTc4PXN0YXRpYyBpbnQgbGlua19wYXRoX3dhbGsoY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IG5hbWVpZGF0YSAqbmQpXG4tLVxuZnMvbmFtZWkuYy0yNjc2LS8qIG11c3QgYmUgcGFpcmVkIHdpdGggdGVybWluYXRlX3dhbGsoKSAqL1xuZnMvbmFtZWkuYzoyNjc3OnN0YXRpYyBjb25zdCBjaGFyICpwYXRoX2luaXQoc3RydWN0IG5hbWVpZGF0YSAqbmQsIHVuc2lnbmVkIGZsYWdzKVxuZnMvbmFtZWkuYy0yNjc4LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMTY6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA3NTcKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgQ29udGV4dCoqCgpBbHJpZ2h0LCB0aGUgaW5zdHJ1Y3Rpb24gaXMgc3RyYWlnaHRmb3J3YXJkOiBMZXQmIzM5O3MgZm9jdXMgb3VyIGF0dGVudGlvbiBvbiBgcGF0aF9pbml0YC4gVGhpcyBpbW1lZGlhdGVseSBzdWdnZXN0cyBhIHNwZWNpZmljIGFyZWEgb2YgdGhlIGNvZGViYXNlIGlzIGJlaW5nIGZsYWdnZWQgYXMgc2lnbmlmaWNhbnQuIEl0JiMzOTtzIGxpa2VseSBhIGNyaXRpY2FsIGluaXRpYWxpemF0aW9uIHJvdXRpbmUsIGZ1bmN0aW9uLCBvciBtb2R1bGUgcmVsYXRlZCB0byBwYXRoIG1hbmFnZW1lbnQsIHBvdGVudGlhbGx5IHdpdGhpbiBhIGxhcmdlciBzeXN0ZW0uIE15IGltbWVkaWF0ZSBtZW50YWwgY2hlY2tsaXN0IHN0YXJ0czogd2hhdCBwcm9qZWN0LCB3aGF0IGxhbmd1YWdlLCB3aGF0IGFyZSB0aGUgbGlrZWx5IGRhdGEgc3RydWN0dXJlcy9hbGdvcml0aG1zIGludm9sdmVkIGJhc2VkIG9uIHRoZSBuYW1pbmcgY29udmVudGlvbi4gYHBhdGhfaW5pdGAgaW1wbGllcyBpdCYjMzk7cyB3aGVyZSB0aGUgZW52aXJvbm1lbnQgKG9yIGEgc3BlY2lmaWMgY29tcG9uZW50JiMzOTtzKSBmaWxlIHN5c3RlbSBwYXRocyBhcmUgZXN0YWJsaXNoZWQsIHZhbGlkYXRlZCwgb3IgY29uZmlndXJlZC4gVGltZSB0byBkaXZlIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNjo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL25hbWVpLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNjc3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI2Nzc6XHRzdGF0aWMgY29uc3QgY2hhciAqcGF0aF9pbml0KHN0cnVjdCBuYW1laWRhdGEgKm5kLCB1bnNpZ25lZCBmbGFncylcbjI2Nzg6XHR7XG4yNjc5Olx0XHRpbnQgZXJyb3I7XG4yNjgwOlx0XHRjb25zdCBjaGFyICpzID0gbmQtXHUwMDNlcGF0aG5hbWU7XG4yNjgxOlx0XG4yNjgyOlx0XHQvKiBMT09LVVBfQ0FDSEVEIHJlcXVpcmVzIFJDVSwgYXNrIGNhbGxlciB0byByZXRyeSAqL1xuMjY4MzpcdFx0aWYgKHVubGlrZWx5KChmbGFncyBcdTAwMjYgKExPT0tVUF9SQ1UgfCBMT09LVVBfQ0FDSEVEKSkgPT0gTE9PS1VQX0NBQ0hFRCkpXG4yNjg0Olx0XHRcdHJldHVybiBFUlJfUFRSKC1FQUdBSU4pO1xuMjY4NTpcdFxuMjY4NjpcdFx0aWYgKHVubGlrZWx5KCEqcykpXG4yNjg3Olx0XHRcdGZsYWdzIFx1MDAyNj0gfkxPT0tVUF9SQ1U7XG4yNjg4Olx0XHRpZiAoZmxhZ3MgXHUwMDI2IExPT0tVUF9SQ1UpXG4yNjg5Olx0XHRcdHJjdV9yZWFkX2xvY2soKTtcbjI2OTA6XHRcdGVsc2VcbjI2OTE6XHRcdFx0bmQtXHUwMDNlc2VxID0gbmQtXHUwMDNlbmV4dF9zZXEgPSAwO1xuMjY5MjpcdFxuMjY5MzpcdFx0bmQtXHUwMDNlZmxhZ3MgPSBmbGFncztcbjI2OTQ6XHRcdG5kLVx1MDAzZXN0YXRlIHw9IE5EX0pVTVBFRDtcbjI2OTU6XHRcbjI2OTY6XHRcdG5kLVx1MDAzZW1fc2VxID0gX19yZWFkX3NlcWNvdW50X2JlZ2luKFx1MDAyNm1vdW50X2xvY2suc2VxY291bnQpO1xuMjY5NzpcdFx0bmQtXHUwMDNlcl9zZXEgPSBfX3JlYWRfc2VxY291bnRfYmVnaW4oXHUwMDI2cmVuYW1lX2xvY2suc2VxY291bnQpO1xuMjY5ODpcdFx0c21wX3JtYigpO1xuMjY5OTpcdFxuMjcwMDpcdFx0aWYgKHVubGlrZWx5KG5kLVx1MDAzZXN0YXRlIFx1MDAyNiBORF9ST09UX1BSRVNFVCkpIHtcbjI3MDE6XHRcdFx0c3RydWN0IGRlbnRyeSAqcm9vdCA9IG5kLVx1MDAzZXJvb3QuZGVudHJ5O1xuMjcwMjpcdFx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gcm9vdC1cdTAwM2VkX2lub2RlO1xuMjcwMzpcdFx0XHRpZiAoKnMgXHUwMDI2XHUwMDI2IHVubGlrZWx5KCFkX2Nhbl9sb29rdXAocm9vdCkpKVxuMjcwNDpcdFx0XHRcdHJldHVybiBFUlJfUFRSKC1FTk9URElSKTtcbjI3MDU6XHRcdFx0bmQtXHUwMDNlcGF0aCA9IG5kLVx1MDAzZXJvb3Q7XG4yNzA2Olx0XHRcdG5kLVx1MDAzZWlub2RlID0gaW5vZGU7XG4yNzA3Olx0XHRcdGlmIChmbGFncyBcdTAwMjYgTE9PS1VQX1JDVSkge1xuMjcwODpcdFx0XHRcdG5kLVx1MDAzZXNlcSA9IHJlYWRfc2VxY291bnRfYmVnaW4oXHUwMDI2bmQtXHUwMDNlcGF0aC5kZW50cnktXHUwMDNlZF9zZXEpO1xuMjcwOTpcdFx0XHRcdG5kLVx1MDAzZXJvb3Rfc2VxID0gbmQtXHUwMDNlc2VxO1xuMjcxMDpcdFx0XHR9IGVsc2Uge1xuMjcxMTpcdFx0XHRcdHBhdGhfZ2V0KFx1MDAyNm5kLVx1MDAzZXBhdGgpO1xuMjcxMjpcdFx0XHR9XG4yNzEzOlx0XHRcdHJldHVybiBzO1xuMjcxNDpcdFx0fVxuMjcxNTpcdFxuMjcxNjpcdFx0bmQtXHUwMDNlcm9vdC5tbnQgPSBOVUxMO1xuMjcxNzpcdFxuMjcxODpcdFx0LyogQWJzb2x1dGUgcGF0aG5hbWUgLS0gZmV0Y2ggdGhlIHJvb3QgKExPT0tVUF9JTl9ST09UIHVzZXMgbmQtXHUwMDNlZGZkKS4gKi9cbjI3MTk6XHRcdGlmICgqcyA9PSAmIzM5Oy8mIzM5OyBcdTAwMjZcdTAwMjYgbGlrZWx5KCEoZmxhZ3MgXHUwMDI2IExPT0tVUF9JTl9ST09UKSkpIHtcbjI3MjA6XHRcdFx0ZXJyb3IgPSBuZF9qdW1wX3Jvb3QobmQpO1xuMjcyMTpcdFx0XHRpZiAodW5saWtlbHkoZXJyb3IpKVxuMjcyMjpcdFx0XHRcdHJldHVybiBFUlJfUFRSKGVycm9yKTtcbjI3MjM6XHRcdFx0cmV0dXJuIHM7XG4yNzI0Olx0XHR9XG4yNzI1Olx0XG4yNzI2Olx0XHQvKiBSZWxhdGl2ZSBwYXRobmFtZSAtLSBnZXQgdGhlIHN0YXJ0aW5nLXBvaW50IGl0IGlzIHJlbGF0aXZlIHRvLiAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNjo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTc0MgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byB0aGUgYHBhdGhfaW5pdGAgRnVuY3Rpb24qKgoKQWxyaWdodCwgc28gdGhlIGluaXRpYWwgcHJvbXB0IGp1c3QgbnVkZ2VkIG1lIHRvIGtlZXAgZ29pbmcuICYjMzQ7TGV0JiMzOTtzIHJlYWQgdGhlIHJlc3Qgb2YgYHBhdGhfaW5pdGAuJiMzNDsgSSBpbW1lZGlhdGVseSBpbnRlcnByZXQgdGhpcyBhcyBhIGRpcmVjdGl2ZSB0byBkZWx2ZSBkZWVwZXIgaW50byB0aGUgY29kZS4gVGhpcyBhc3N1bWVzLCBuYXR1cmFsbHksIHRoYXQgdGhlIHJlYWRlciBoYXMgcHJldmlvdXNseSBlbmdhZ2VkIHdpdGggdGhlIGZ1bmN0aW9uJiMzOTtzIGluaXRpYWwgcGFydHMgb3IgdGhlIGJyb2FkZXIgY29udGV4dC4gJiMzNDtUaGUgcmVzdCYjMzQ7IGltcGxpZXMgdGhlcmUmIzM5O3MgZXhpc3RpbmcgZmFtaWxpYXJpdHkgb3IgYSBkZWZpbmVkIHNlY3Rpb24gdG8gYmUgYW5hbHl6ZWQuIE15IGZvY3VzIHNoYXJwZW5zLiBJJiMzOTttIG1vdmluZyBiZXlvbmQgYW55IHN1cGVyZmljaWFsIG92ZXJ2aWV3IEkgbWlnaHQgaGF2ZSBkb25lIHByZXZpb3VzbHkgYW5kIEkmIzM5O20gZ2V0dGluZyByZWFkeSB0byBzY3J1dGluaXplIGl0cyBpbnRlcm5hbCB3b3JraW5ncy4gSXQmIzM5O3MgYSBjYWxsIHRvIGV4YW1pbmUgdGhlIGNvZGUmIzM5O3Mgc3Vic2VxdWVudCBsaW5lcywgbG9naWMgZmxvdywgYW5kIHBvdGVudGlhbGx5IHRvIGV4cGxvcmUgYW55IGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9yIGZ1bmN0aW9uIGNhbGxzLiBJdCYjMzk7cyB0aW1lIHRvIGdldCBhIGZlZWwgZm9yIHRoZSByZW1haW5pbmcgc3RydWN0dXJlIGFuZCBpbnRlbnQsIHNvIEkgY2FuIHN5bnRoZXNpemUgYSBob2xpc3RpYyB1bmRlcnN0YW5kaW5nLiBJIHdpbGwgYmUgYXNzZXNzaW5nIHZhcmlhYmxlIHVzYWdlLCBtZW1vcnkgbWFuYWdlbWVudCAoaWYgcmVsZXZhbnQpLCBhbmQgZXJyb3IgaGFuZGxpbmcgYXMgSSBtb3ZlIHRocm91Z2ggaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE2OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvbmFtZWkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI3MjcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjcyNzpcdFx0aWYgKG5kLVx1MDAzZWRmZCA9PSBBVF9GRENXRCkge1xuMjcyODpcdFx0XHRpZiAoZmxhZ3MgXHUwMDI2IExPT0tVUF9SQ1UpIHtcbjI3Mjk6XHRcdFx0XHRzdHJ1Y3QgZnNfc3RydWN0ICpmcyA9IGN1cnJlbnQtXHUwMDNlZnM7XG4yNzMwOlx0XHRcdFx0dW5zaWduZWQgc2VxO1xuMjczMTpcdFxuMjczMjpcdFx0XHRcdGRvIHtcbjI3MzM6XHRcdFx0XHRcdHNlcSA9IHJlYWRfc2VxYmVnaW4oXHUwMDI2ZnMtXHUwMDNlc2VxKTtcbjI3MzQ6XHRcdFx0XHRcdG5kLVx1MDAzZXBhdGggPSBmcy1cdTAwM2Vwd2Q7XG4yNzM1Olx0XHRcdFx0XHRuZC1cdTAwM2Vpbm9kZSA9IG5kLVx1MDAzZXBhdGguZGVudHJ5LVx1MDAzZWRfaW5vZGU7XG4yNzM2Olx0XHRcdFx0XHRuZC1cdTAwM2VzZXEgPSBfX3JlYWRfc2VxY291bnRfYmVnaW4oXHUwMDI2bmQtXHUwMDNlcGF0aC5kZW50cnktXHUwMDNlZF9zZXEpO1xuMjczNzpcdFx0XHRcdH0gd2hpbGUgKHJlYWRfc2VxcmV0cnkoXHUwMDI2ZnMtXHUwMDNlc2VxLCBzZXEpKTtcbjI3Mzg6XHRcdFx0fSBlbHNlIHtcbjI3Mzk6XHRcdFx0XHRnZXRfZnNfcHdkKGN1cnJlbnQtXHUwMDNlZnMsIFx1MDAyNm5kLVx1MDAzZXBhdGgpO1xuMjc0MDpcdFx0XHRcdG5kLVx1MDAzZWlub2RlID0gbmQtXHUwMDNlcGF0aC5kZW50cnktXHUwMDNlZF9pbm9kZTtcbjI3NDE6XHRcdFx0fVxuMjc0MjpcdFx0fSBlbHNlIHtcbjI3NDM6XHRcdFx0LyogQ2FsbGVyIG11c3QgY2hlY2sgZXhlY3V0ZSBwZXJtaXNzaW9ucyBvbiB0aGUgc3RhcnRpbmcgcGF0aCBjb21wb25lbnQgKi9cbjI3NDQ6XHRcdFx0Q0xBU1MoZmRfcmF3LCBmKShuZC1cdTAwM2VkZmQpO1xuMjc0NTpcdFx0XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7XG4yNzQ2Olx0XG4yNzQ3Olx0XHRcdGlmIChmZF9lbXB0eShmKSlcbjI3NDg6XHRcdFx0XHRyZXR1cm4gRVJSX1BUUigtRUJBREYpO1xuMjc0OTpcdFxuMjc1MDpcdFx0XHRpZiAoZmxhZ3MgXHUwMDI2IExPT0tVUF9MSU5LQVRfRU1QVFkpIHtcbjI3NTE6XHRcdFx0XHRpZiAoZmRfZmlsZShmKS1cdTAwM2VmX2NyZWQgIT0gY3VycmVudF9jcmVkKCkgXHUwMDI2XHUwMDI2XG4yNzUyOlx0XHRcdFx0ICAgICFuc19jYXBhYmxlKGZkX2ZpbGUoZiktXHUwMDNlZl9jcmVkLVx1MDAzZXVzZXJfbnMsIENBUF9EQUNfUkVBRF9TRUFSQ0gpKVxuMjc1MzpcdFx0XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7XG4yNzU0Olx0XHRcdH1cbjI3NTU6XHRcbjI3NTY6XHRcdFx0ZGVudHJ5ID0gZmRfZmlsZShmKS1cdTAwM2VmX3BhdGguZGVudHJ5O1xuMjc1NzpcdFxuMjc1ODpcdFx0XHRpZiAoKnMgXHUwMDI2XHUwMDI2IHVubGlrZWx5KCFkX2Nhbl9sb29rdXAoZGVudHJ5KSkpXG4yNzU5Olx0XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT1RESVIpO1xuMjc2MDpcdFxuMjc2MTpcdFx0XHRuZC1cdTAwM2VwYXRoID0gZmRfZmlsZShmKS1cdTAwM2VmX3BhdGg7XG4yNzYyOlx0XHRcdGlmIChmbGFncyBcdTAwMjYgTE9PS1VQX1JDVSkge1xuMjc2MzpcdFx0XHRcdG5kLVx1MDAzZWlub2RlID0gbmQtXHUwMDNlcGF0aC5kZW50cnktXHUwMDNlZF9pbm9kZTtcbjI3NjQ6XHRcdFx0XHRuZC1cdTAwM2VzZXEgPSByZWFkX3NlcWNvdW50X2JlZ2luKFx1MDAyNm5kLVx1MDAzZXBhdGguZGVudHJ5LVx1MDAzZWRfc2VxKTtcbjI3NjU6XHRcdFx0fSBlbHNlIHtcbjI3NjY6XHRcdFx0XHRwYXRoX2dldChcdTAwMjZuZC1cdTAwM2VwYXRoKTtcbjI3Njc6XHRcdFx0XHRuZC1cdTAwM2Vpbm9kZSA9IG5kLVx1MDAzZXBhdGguZGVudHJ5LVx1MDAzZWRfaW5vZGU7XG4yNzY4Olx0XHRcdH1cbjI3Njk6XHRcdH1cbjI3NzA6XHRcbjI3NzE6XHRcdC8qIEZvciBzY29wZWQtbG9va3VwcyB3ZSBuZWVkIHRvIHNldCB0aGUgcm9vdCB0byB0aGUgZGlyZmQgYXMgd2VsbC4gKi9cbjI3NzI6XHRcdGlmICh1bmxpa2VseShmbGFncyBcdTAwMjYgTE9PS1VQX0lTX1NDT1BFRCkpIHtcbjI3NzM6XHRcdFx0bmQtXHUwMDNlcm9vdCA9IG5kLVx1MDAzZXBhdGg7XG4yNzc0Olx0XHRcdGlmIChmbGFncyBcdTAwMjYgTE9PS1VQX1JDVSkge1xuMjc3NTpcdFx0XHRcdG5kLVx1MDAzZXJvb3Rfc2VxID0gbmQtXHUwMDNlc2VxO1xuMjc3NjpcdFx0XHR9IGVsc2Uge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNjo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjg0MgoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDM5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgYHhhdHRyYXRgIFN5c2NhbGwgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvcmUgaXNzdWUgc2VlbXMgdG8gYmUgaG93IHRoZSBmaWxlIGRlc2NyaXB0b3IgKGBkZmRgKSBpcyBoYW5kbGVkIGluIHRoZSBgKnhhdHRyYXRgIHN5c2NhbGxzIHdoZW4gYEFUX0VNUFRZX1BBVEhgIGlzIHVzZWQgYW5kIHRoZSBwYXRoIGlzIGVtcHR5LiBNeSBpbml0aWFsIGh1bmNoIHdhcyBjb3JyZWN0OiB0aGUgcHJvYmxlbSBzdGVtcyBmcm9tIGhvdyB3ZSByZXRyaWV2ZSB0aGUgZmlsZSBkZXNjcmlwdG9yIGl0c2VsZi4KCkkmIzM5O3ZlIHJlYWxpemVkIHRoYXQgdGhlIGBwYXRoX2luaXRgIGZ1bmN0aW9uIHVzZXMgYENMQVNTKGZkX3JhdywgZikobmQtJmd0O2RmZClgIHRvIGdyYWIgdGhlIGZpbGUgZGVzY3JpcHRvci4gQW5kIHRoYXQgYGZkX3Jhd2AgYWN0dWFsbHkgY2FsbHMgYGZkZ2V0X3Jhd2AuIFRoaXMgaXMgdGhlIGtleS4gYGZkZ2V0X3Jhd2AgaXMgaW1wb3J0YW50IGJlY2F1c2UgaXQgc3BlY2lmaWNhbGx5ICphbGxvd3MqIGBPX1BBVEhgIGZpbGUgZGVzY3JpcHRvcnMuIFRoaXMgaXMgd2hhdCYjMzk7cyBsZXR0aW5nIGZ1bmN0aW9ucyBsaWtlIGBmaWxlbmFtZV9sb29rdXBgLCB3aGljaCBtYW55IG9mIHRoZSBgKmF0YCBmdW5jdGlvbnMgdXNlLCBjb3JyZWN0bHkgaGFuZGxlIHRoZXNlIGBPX1BBVEhgIGZpbGUgZGVzY3JpcHRvcnMgd2hlbiBgQVRfRU1QVFlfUEFUSGAgaXMgZ2l2ZW4uCgpUaGUgbmV3bHkgaW1wbGVtZW50ZWQgYHNldHhhdHRyYXRgLCBgZ2V0eGF0dHJhdGAsIGBsaXN0eGF0dHJhdGAsIGFuZCBgcmVtb3ZleGF0dHJhdGAgc3lzY2FsbHMsIGhvd2V2ZXIsIHdlcmUgaW1wbGVtZW50ZWQgd2l0aCBgQ0xBU1MoZmQsIGYpKGRmZClgIHdoZW4gYEFUX0VNUFRZX1BBVEhgIGFuZCB0aGUgcGF0aCB3ZXJlIGJvdGggdXNlZCwgYW5kIHRoYXQgY2F1c2VzIHByb2JsZW1zIHdpdGggYE9fUEFUSGAgZGVzY3JpcHRvcnMuIFRoaXMgbWVhbnMgdGhlc2UgZGlkbiYjMzk7dCB3b3JrIHByb3Blcmx5IHdpdGggYE9fUEFUSGAgZmlsZSBkZXNjcmlwdG9ycy4KClRoZSBwYXRjaCBmaXhlcyB0aGlzIGluY29uc2lzdGVuY3kgYnkgY2hhbmdpbmcgdGhvc2Ugc3lzY2FsbHMgdG8gdXNlIGBDTEFTUyhmZF9tYXliZV9yYXcsIGYpKGRmZCwgcmF3KWAgd2l0aCBgcmF3ID0gdHJ1ZWAuIFRoaXMgaXMgdGhlIGltcG9ydGFudCBwYXJ0OiBzZXR0aW5nIGByYXcgPSB0cnVlYCBhbGxvd3MgdXMgdG8gY29ycmVjdGx5IGhhbmRsZSBgT19QQVRIYCBmaWxlIGRlc2NyaXB0b3JzLCB0aHVzIGFsaWduaW5nIHRoZW0gd2l0aCB0aGUgYmVoYXZpb3Igb2Ygb3RoZXIgYCphdGAgc3lzY2FsbHMuCgpGdW5jdGlvbmFsbHksIHRoaXMgaXMgYSBjbGVhciBlbmhhbmNlbWVudC4gTm93LCBgc2V0eGF0dHJhdGAsIGBnZXR4YXR0cmF0YCwgYGxpc3R4YXR0cmF0YCwgYW5kIGByZW1vdmV4YXR0cmF0YCB3aWxsICpjb3JyZWN0bHkqIG9wZXJhdGUgb24gYE9fUEFUSGAgZmlsZSBkZXNjcmlwdG9ycywgd2hpY2ggd2FzbiYjMzk7dCB0aGUgY2FzZSBwcmV2aW91c2x5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGFuZCBhIGdvb2Qgb25lIGF0IHRoYXQuCgpOb3csIGxldCYjMzk7cyBjb25zaWRlciBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzLiBUaGUgY2hhbmdlcyBhcmUgY29uZmluZWQgdG8gYGZzL3hhdHRyLmNgIGFuZCBgaW5jbHVkZS9saW51eC9maWxlLmhgLiBXaGlsZSB0aGUgY29yZSB4YXR0ciBzeXNjYWxscyBhcmUgYWx3YXlzIHRoZXJlLCByZWdhcmRsZXNzIG9mIGZpbGVzeXN0ZW0sIHRoZXkmIzM5O3JlIG9ubHkgKmVuYWJsZWQqIGlmIHRoZXJlIGlzIHN1cHBvcnQsIHRocm91Z2ggc29tZXRoaW5nIGxpa2UgYENPTkZJR19FWFQ0X0ZTX1hBVFRSYC4gU28sIHRoZSBjb3JlIGlzIGFsd2F5cyB0aGVyZSwgYnV0IHRoZXkgbWlnaHQgbm90ICpkbyogYW55dGhpbmcgb24gYSBzeXN0ZW0gd2l0aG91dCB0aGUgZmlsZXN5c3RlbSBzdXBwb3J0LiBJIGNhbiB0aGluayBvZiBuZWVkaW5nIGBDT05GSUdfVE1QRlNfWEFUVFJgIGZvciB0ZXN0aW5nIHhhdHRycyBvbiB0bXBmcy4gQnV0IHRoZSBjb3JlIHN5c2NhbGxzIHRoZW1zZWx2ZXMgYXJlIGFsd2F5cyBlbmFibGVkLiBJIHNob3VsZCBsb29rIGludG8gd2hhdCB3b3VsZCBiZSBuZWVkZWQgc3BlY2lmaWNhbGx5IGZvciBgc2V0eGF0dHJhdGAgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyB1bmludGVuZGVkIGNvbnNlcXVlbmNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMTY6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIC4qWEFUVFImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvS2NvbmZpZz0xODE9Y29uZmlnIFRNUEZTX1BPU0lYX0FDTFxuLS1cbmZzL0tjb25maWctMTk4LVxuZnMvS2NvbmZpZzoxOTk6Y29uZmlnIFRNUEZTX1hBVFRSXG5mcy9LY29uZmlnLTIwMC1cdGJvb2wgXCYjMzQ7VG1wZnMgZXh0ZW5kZWQgYXR0cmlidXRlc1wmIzM0O1xuLS1cbmZzL2Vyb2ZzL0tjb25maWc9NTA9Y29uZmlnIEVST0ZTX0ZTX0RFQlVHXG4tLVxuZnMvZXJvZnMvS2NvbmZpZy01OS1cbmZzL2Vyb2ZzL0tjb25maWc6NjA6Y29uZmlnIEVST0ZTX0ZTX1hBVFRSXG5mcy9lcm9mcy9LY29uZmlnLTYxLVx0Ym9vbCBcJiMzNDtFUk9GUyBleHRlbmRlZCBhdHRyaWJ1dGVzXCYjMzQ7XG4tLVxuZnMvZXh0Mi9LY29uZmlnPTI9Y29uZmlnIEVYVDJfRlNcbi0tXG5mcy9leHQyL0tjb25maWctMjAtXG5mcy9leHQyL0tjb25maWc6MjE6Y29uZmlnIEVYVDJfRlNfWEFUVFJcbmZzL2V4dDIvS2NvbmZpZy0yMi1cdGJvb2wgXCYjMzQ7RXh0MiBleHRlbmRlZCBhdHRyaWJ1dGVzXCYjMzQ7XG4tLVxuZnMvZjJmcy9LY29uZmlnPTMxPWNvbmZpZyBGMkZTX1NUQVRfRlNcbi0tXG5mcy9mMmZzL0tjb25maWctNDMtXG5mcy9mMmZzL0tjb25maWc6NDQ6Y29uZmlnIEYyRlNfRlNfWEFUVFJcbmZzL2YyZnMvS2NvbmZpZy00NS1cdGJvb2wgXCYjMzQ7RjJGUyBleHRlbmRlZCBhdHRyaWJ1dGVzXCYjMzQ7XG4tLVxuZnMvamZmczIvS2NvbmZpZz01Mz1jb25maWcgSkZGUzJfU1VNTUFSWVxuLS1cbmZzL2pmZnMyL0tjb25maWctNjUtXG5mcy9qZmZzMi9LY29uZmlnOjY2OmNvbmZpZyBKRkZTMl9GU19YQVRUUlxuZnMvamZmczIvS2NvbmZpZy02Ny1cdGJvb2wgXCYjMzQ7SkZGUzIgWEFUVFIgc3VwcG9ydFwmIzM0O1xuLS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZz04Mz1jb25maWcgQ0lGU19VUENBTExcbi0tXG5mcy9zbWIvY2xpZW50L0tjb25maWctOTEtXG5mcy9zbWIvY2xpZW50L0tjb25maWc6OTI6Y29uZmlnIENJRlNfWEFUVFJcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy05My1cdGJvb2wgXCYjMzQ7Q0lGUyBleHRlbmRlZCBhdHRyaWJ1dGVzXCYjMzQ7XG4tLVxuZnMvc3F1YXNoZnMvS2NvbmZpZz0xMjk9Y29uZmlnIFNRVUFTSEZTX01PVU5UX0RFQ09NUF9USFJFQURTXG4tLVxuZnMvc3F1YXNoZnMvS2NvbmZpZy0xNDEtXG5mcy9zcXVhc2hmcy9LY29uZmlnOjE0Mjpjb25maWcgU1FVQVNIRlNfWEFUVFJcbmZzL3NxdWFzaGZzL0tjb25maWctMTQzLVx0Ym9vbCBcJiMzNDtTcXVhc2hmcyBYQVRUUiBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvdWJpZnMvS2NvbmZpZz01Mj1jb25maWcgVUJJRlNfQVRJTUVfU1VQUE9SVFxuLS1cbmZzL3ViaWZzL0tjb25maWctNjUtXG5mcy91Ymlmcy9LY29uZmlnOjY2OmNvbmZpZyBVQklGU19GU19YQVRUUlxuZnMvdWJpZnMvS2NvbmZpZy02Ny1cdGJvb2wgXCYjMzQ7VUJJRlMgWEFUVFIgc3VwcG9ydFwmIzM0O1xuLS1cbnNlY3VyaXR5L2ludGVncml0eS9ldm0vS2NvbmZpZz0xNz1jb25maWcgRVZNX0FUVFJfRlNVVUlEXG4tLVxuc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9LY29uZmlnLTMwLVxuc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9LY29uZmlnOjMxOmNvbmZpZyBFVk1fRVhUUkFfU01BQ0tfWEFUVFJTXG5zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL0tjb25maWctMzItXHRib29sIFwmIzM0O0FkZGl0aW9uYWwgU01BQ0sgeGF0dHJzXCYjMzQ7XG4tLVxuc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9LY29uZmlnLTQ3LVxuc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9LY29uZmlnOjQ4OmNvbmZpZyBFVk1fQUREX1hBVFRSU1xuc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9LY29uZmlnLTQ5LVx0Ym9vbCBcJiMzNDtBZGQgYWRkaXRpb25hbCBFVk0gZXh0ZW5kZWQgYXR0cmlidXRlcyBhdCBydW50aW1lXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE2OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0NjQ4CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBYYXR0ciBDb21waWxhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IGlmIHRoZXJlJiMzOTtzIGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb24gdGhhdCBnYXRlcyB0aGUgY29tcGlsYXRpb24gb2YgdGhlIGNvcmUgZXh0ZW5kZWQgYXR0cmlidXRlICh4YXR0cikgc3lzdGVtIGNhbGxzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCYjMzk7cyBwcm9iYWJseSBub3QsIGJ1dCBJIG5lZWQgdG8gY29uZmlybSB0aGF0LiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZS4gU3BlY2lmaWNhbGx5LCBgZnMveGF0dHIuY2AgaXMgdGhlIG9idmlvdXMgcGxhY2UgdG8gc3RhcnQuIEkmIzM5O2xsIHNjYW4gdGhyb3VnaCB0aGF0IGZpbGUgYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IGAjaWZkZWZgIG9yIHNpbWlsYXIgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgdGhhdCBjb25kaXRpb25hbGx5IGNvbXBpbGUgdGhlIHJlbGV2YW50IGZ1bmN0aW9ucy4gVGhhdCBzaG91bGQgcXVpY2tseSB0ZWxsIG1lIHdoZXRoZXIgdGhlIHhhdHRyIHN5c3RlbSBjYWxscyBhcmUgZnVuZGFtZW50YWxseSBidWlsdCBpbnRvIHRoZSBrZXJuZWwgb3IgaWYgdGhlaXIgcHJlc2VuY2UgaXMgY29udHJvbGxlZCBieSBhIHNwZWNpZmljIGBDT05GSUdfYCBvcHRpb24uIFRoaXMgaXMgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGNoZWNrLCBidXQgYSBuZWNlc3Nhcnkgc3RlcCB0byB1bmRlcnN0YW5kIHRoZSBidWlsZCBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNjo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4YXR0clxcLm8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9rYnVpbGQvbWFrZWZpbGVzLnJzdD0xNzM9RXhhbXBsZTo6XG4tLVxuRG9jdW1lbnRhdGlvbi9rYnVpbGQvbWFrZWZpbGVzLnJzdC0xNzgtICAgIG5hbWVpLm8gc3VwZXIubyBzeW1saW5rLm9cbkRvY3VtZW50YXRpb24va2J1aWxkL21ha2VmaWxlcy5yc3Q6MTc5OiAgZXh0Mi0kKENPTkZJR19FWFQyX0ZTX1hBVFRSKSAmIzQzOz0geGF0dHIubyB4YXR0cl91c2VyLm8gXFxcbkRvY3VtZW50YXRpb24va2J1aWxkL21ha2VmaWxlcy5yc3QtMTgwLSAgICB4YXR0cl90cnVzdGVkLm9cbkRvY3VtZW50YXRpb24va2J1aWxkL21ha2VmaWxlcy5yc3QtMTgxLVxuRG9jdW1lbnRhdGlvbi9rYnVpbGQvbWFrZWZpbGVzLnJzdDoxODI6SW4gdGhpcyBleGFtcGxlLCB4YXR0ci5vLCB4YXR0cl91c2VyLm8gYW5kIHhhdHRyX3RydXN0ZWQubyBhcmUgb25seVxuRG9jdW1lbnRhdGlvbi9rYnVpbGQvbWFrZWZpbGVzLnJzdC0xODMtcGFydCBvZiB0aGUgY29tcG9zaXRlIG9iamVjdCBleHQyLm8gaWYgJChDT05GSUdfRVhUMl9GU19YQVRUUilcbi0tXG5Eb2N1bWVudGF0aW9uL2tidWlsZC9tb2R1bGVzLnJzdD01MDE9VGVzdGluZyBmb3IgQ09ORklHX0ZPT19CQVJcbi0tXG5Eb2N1bWVudGF0aW9uL2tidWlsZC9tb2R1bGVzLnJzdC01MTItXHRcdGV4dDIteSA6PSBiYWxsb2MubyBiaXRtYXAubyBkaXIub1xuRG9jdW1lbnRhdGlvbi9rYnVpbGQvbW9kdWxlcy5yc3Q6NTEzOlx0XHRleHQyLSQoQ09ORklHX0VYVDJfRlNfWEFUVFIpICYjNDM7PSB4YXR0ci5vXG4tLVxuZnMvOXAvTWFrZWZpbGU9Mj1vYmotJChDT05GSUdfOVBfRlMpIDo9IDlwLm9cbi0tXG5mcy85cC9NYWtlZmlsZS0xMy1cdGZpZC5vICBcXFxuZnMvOXAvTWFrZWZpbGU6MTQ6XHR4YXR0ci5vXG5mcy85cC9NYWtlZmlsZS0xNS1cbi0tXG5mcy9NYWtlZmlsZT0xMD1vYmoteSA6PVx0b3Blbi5vIHJlYWRfd3JpdGUubyBmaWxlX3RhYmxlLm8gc3VwZXIubyBcXFxuLS1cbmZzL01ha2VmaWxlLTEzLVx0XHRhdHRyLm8gYmFkX2lub2RlLm8gZmlsZS5vIGZpbGVzeXN0ZW1zLm8gbmFtZXNwYWNlLm8gXFxcbmZzL01ha2VmaWxlOjE0Olx0XHRzZXFfZmlsZS5vIHhhdHRyLm8gbGliZnMubyBmcy13cml0ZWJhY2subyBcXFxuZnMvTWFrZWZpbGUtMTUtXHRcdHBub2RlLm8gc3BsaWNlLm8gc3luYy5vIHV0aW1lcy5vIGRfcGF0aC5vIFxcXG4tLVxuZnMvYWZzL01ha2VmaWxlPTY9a2Fmcy15IDo9IFxcXG4tLVxuZnMvYWZzL01ha2VmaWxlLTQxLVx0d3JpdGUubyBcXFxuZnMvYWZzL01ha2VmaWxlOjQyOlx0eGF0dHIubyBcXFxuZnMvYWZzL01ha2VmaWxlLTQzLVx0eWZzY2xpZW50Lm9cbi0tXG5mcy9idHJmcy9NYWtlZmlsZT0yND1idHJmcy15ICYjNDM7PSBzdXBlci5vIGN0cmVlLm8gZXh0ZW50LXRyZWUubyBwcmludC10cmVlLm8gcm9vdC10cmVlLm8gZGlyLWl0ZW0ubyBcXFxuLS1cbmZzL2J0cmZzL01ha2VmaWxlLTI2LVx0ICAgdHJhbnNhY3Rpb24ubyBpbm9kZS5vIGZpbGUubyBkZWZyYWcubyBcXFxuZnMvYnRyZnMvTWFrZWZpbGU6Mjc6XHQgICBleHRlbnRfbWFwLm8gc3lzZnMubyBhY2Nlc3NvcnMubyB4YXR0ci5vIG9yZGVyZWQtZGF0YS5vIFxcXG5mcy9idHJmcy9NYWtlZmlsZS0yOC1cdCAgIGV4dGVudF9pby5vIHZvbHVtZXMubyBhc3luYy10aHJlYWQubyBpb2N0bC5vIGxvY2tpbmcubyBvcnBoYW4ubyBcXFxuLS1cbmZzL2NhY2hlZmlsZXMvTWFrZWZpbGU9Nj1jYWNoZWZpbGVzLXkgOj0gXFxcbi0tXG5mcy9jYWNoZWZpbGVzL01ha2VmaWxlLTE1LVx0dm9sdW1lLm8gXFxcbmZzL2NhY2hlZmlsZXMvTWFrZWZpbGU6MTY6XHR4YXR0ci5vXG5mcy9jYWNoZWZpbGVzL01ha2VmaWxlLTE3LVxuLS1cbmZzL2NlcGgvTWFrZWZpbGU9OD1jZXBoLXkgOj0gc3VwZXIubyBpbm9kZS5vIGRpci5vIGZpbGUubyBsb2Nrcy5vIGFkZHIubyBpb2N0bC5vIFxcXG5mcy9jZXBoL01ha2VmaWxlOjk6XHRleHBvcnQubyBjYXBzLm8gc25hcC5vIHhhdHRyLm8gcXVvdGEubyBpby5vIFxcXG5mcy9jZXBoL01ha2VmaWxlLTEwLVx0bWRzX2NsaWVudC5vIG1kc21hcC5vIHN0cmluZ3MubyBjZXBoX2ZyYWcubyBcXFxuLS1cbmZzL2NlcGgveGF0dHIuYz0xMTA2PXN0YXRpYyBpbnQgY2VwaF9zeW5jX3NldHhhdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsXG4tLVxuZnMvY2VwaC94YXR0ci5jLTExNTItXHRcdHJlcS1cdTAwM2VyX2FyZ3Muc2V0eGF0dHIuZmxhZ3MgPSBjcHVfdG9fbGUzMihmbGFncyk7XG5mcy9jZXBoL3hhdHRyLmM6MTE1MzpcdFx0cmVxLVx1MDAzZXJfYXJncy5zZXR4YXR0ci5vc2RtYXBfZXBvY2ggPVxuZnMvY2VwaC94YXR0ci5jLTExNTQtXHRcdFx0Y3B1X3RvX2xlMzIob3NkYy1cdTAwM2Vvc2RtYXAtXHUwMDNlZXBvY2gpO1xuLS1cbmZzL2Vyb2ZzL01ha2VmaWxlPTQ9ZXJvZnMtb2JqcyA6PSBzdXBlci5vIGlub2RlLm8gZGF0YS5vIG5hbWVpLm8gZGlyLm8gc3lzZnMub1xuZnMvZXJvZnMvTWFrZWZpbGU6NTplcm9mcy0kKENPTkZJR19FUk9GU19GU19YQVRUUikgJiM0Mzs9IHhhdHRyLm9cbmZzL2Vyb2ZzL01ha2VmaWxlLTYtZXJvZnMtJChDT05GSUdfRVJPRlNfRlNfWklQKSAmIzQzOz0gZGVjb21wcmVzc29yLm8gem1hcC5vIHpkYXRhLm8genV0aWwub1xuLS1cbmZzL2V4dDIvTWFrZWZpbGU9MTI9Q0ZMQUdTX3RyYWNlLm8gOj0gLUkkKHNyYylcbmZzL2V4dDIvTWFrZWZpbGUtMTMtXG5mcy9leHQyL01ha2VmaWxlOjE0OmV4dDItJChDT05GSUdfRVhUMl9GU19YQVRUUilcdCAmIzQzOz0geGF0dHIubyB4YXR0cl91c2VyLm8geGF0dHJfdHJ1c3RlZC5vXG5mcy9leHQyL01ha2VmaWxlLTE1LWV4dDItJChDT05GSUdfRVhUMl9GU19QT1NJWF9BQ0wpICYjNDM7PSBhY2wub1xuLS1cbmZzL2V4dDQvTWFrZWZpbGU9OD1leHQ0LXlcdDo9IGJhbGxvYy5vIGJpdG1hcC5vIGJsb2NrX3ZhbGlkaXR5Lm8gZGlyLm8gZXh0NF9qYmQyLm8gZXh0ZW50cy5vIFxcXG4tLVxuZnMvZXh0NC9NYWtlZmlsZS0xMS1cdFx0bW1wLm8gbW92ZV9leHRlbnQubyBuYW1laS5vIHBhZ2UtaW8ubyByZWFkcGFnZS5vIHJlc2l6ZS5vIFxcXG5mcy9leHQ0L01ha2VmaWxlOjEyOlx0XHRzdXBlci5vIHN5bWxpbmsubyBzeXNmcy5vIHhhdHRyLm8geGF0dHJfaHVyZC5vIHhhdHRyX3RydXN0ZWQubyBcXFxuZnMvZXh0NC9NYWtlZmlsZS0xMy1cdFx0eGF0dHJfdXNlci5vIGZhc3RfY29tbWl0Lm8gb3JwaGFuLm9cbi0tXG5mcy9mMmZzL01ha2VmaWxlPTc9ZjJmcy0kKENPTkZJR19GMkZTX1NUQVRfRlMpICYjNDM7PSBkZWJ1Zy5vXG5mcy9mMmZzL01ha2VmaWxlOjg6ZjJmcy0kKENPTkZJR19GMkZTX0ZTX1hBVFRSKSAmIzQzOz0geGF0dHIub1xuZnMvZjJmcy9NYWtlZmlsZS05LWYyZnMtJChDT05GSUdfRjJGU19GU19QT1NJWF9BQ0wpICYjNDM7PSBhY2wub1xuLS1cbmZzL2Z1c2UvTWFrZWZpbGU9MTM9ZnVzZS15IDo9IHRyYWNlLm9cdCMgcHV0IHRyYWNlLm8gZmlyc3Qgc28gd2Ugc2VlIGZ0cmFjZSBlcnJvcnMgc29vbmVyXG5mcy9mdXNlL01ha2VmaWxlOjE0OmZ1c2UteSAmIzQzOz0gZGV2Lm8gZGlyLm8gZmlsZS5vIGlub2RlLm8gY29udHJvbC5vIHhhdHRyLm8gYWNsLm8gcmVhZGRpci5vIGlvY3RsLm8gcmVxX3RpbWVvdXQubyByZXEub1xuZnMvZnVzZS9NYWtlZmlsZS0xNS1mdXNlLXkgJiM0Mzs9IHBvbGwubyBub3RpZnkub1xuLS1cbmZzL2dmczIvTWFrZWZpbGU9Mz1vYmotJChDT05GSUdfR0ZTMl9GUykgJiM0Mzs9IGdmczIub1xuZnMvZ2ZzMi9NYWtlZmlsZTo0OmdmczIteSA6PSBhY2wubyBibWFwLm8gZGlyLm8geGF0dHIubyBnbG9jay5vIFxcXG5mcy9nZnMyL01ha2VmaWxlLTUtXHRnbG9wcy5vIGxvZy5vIGxvcHMubyBtYWluLm8gbWV0YV9pby5vIFxcXG4tLVxuZnMvaGZzcGx1cy9NYWtlZmlsZT04PWhmc3BsdXMtb2JqcyA6PSBzdXBlci5vIG9wdGlvbnMubyBpbm9kZS5vIGlvY3RsLm8gZXh0ZW50cy5vIGNhdGFsb2cubyBkaXIubyBidHJlZS5vIFxcXG5mcy9oZnNwbHVzL01ha2VmaWxlLTktXHRcdGJub2RlLm8gYnJlYy5vIGJmaW5kLm8gdGFibGVzLm8gdW5pY29kZS5vIHdyYXBwZXIubyBiaXRtYXAubyBwYXJ0X3RibC5vIFxcXG5mcy9oZnNwbHVzL01ha2VmaWxlOjEwOlx0XHRhdHRyaWJ1dGVzLm8geGF0dHIubyB4YXR0cl91c2VyLm8geGF0dHJfc2VjdXJpdHkubyB4YXR0cl90cnVzdGVkLm9cbmZzL2hmc3BsdXMvTWFrZWZpbGUtMTEtXG4tLVxuZnMvamZmczIvTWFrZWZpbGU9MTQ9amZmczItJChDT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVIpXHQmIzQzOz0gd2J1Zi5vXG5mcy9qZmZzMi9NYWtlZmlsZToxNTpqZmZzMi0kKENPTkZJR19KRkZTMl9GU19YQVRUUilcdFx0JiM0Mzs9IHhhdHRyLm8geGF0dHJfdHJ1c3RlZC5vIHhhdHRyX3VzZXIub1xuZnMvamZmczIvTWFrZWZpbGUtMTYtamZmczItJChDT05GSUdfSkZGUzJfRlNfU0VDVVJJVFkpXHQmIzQzOz0gc2VjdXJpdHkub1xuLS1cbmZzL2pmcy9NYWtlZmlsZT04PWpmcy15ICAgIDo9IHN1cGVyLm8gZmlsZS5vIGlub2RlLm8gbmFtZWkubyBqZnNfbW91bnQubyBqZnNfdW1vdW50Lm8gXFxcbi0tXG5mcy9qZnMvTWFrZWZpbGUtMTItXHQgICAgamZzX2xvZ21nci5vIGpmc190eG5tZ3IubyBcXFxuZnMvamZzL01ha2VmaWxlOjEzOlx0ICAgIHJlc2l6ZS5vIHhhdHRyLm8gaW9jdGwub1xuZnMvamZzL01ha2VmaWxlLTE0LVxuLS1cbmZzL25mcy9NYWtlZmlsZT0zMz1uZnN2NC0kKENPTkZJR19ORlNfVjRfMClcdCYjNDM7PSBuZnM0MGNsaWVudC5vIG5mczQwcHJvYy5vXG5mcy9uZnMvTWFrZWZpbGU6MzQ6bmZzdjQtJChDT05GSUdfTkZTX1Y0XzIpXHQmIzQzOz0gbmZzNDJwcm9jLm8gbmZzNDJ4YXR0ci5vXG5mcy9uZnMvTWFrZWZpbGUtMzUtXG4tLVxuZnMvbnRmczMvTWFrZWZpbGU9MzM9bnRmczMteSA6PVx0YXR0cmliLm8gXFxcbi0tXG5mcy9udGZzMy9NYWtlZmlsZS00OS1cdFx0dXBjYXNlLm8gXFxcbmZzL250ZnMzL01ha2VmaWxlOjUwOlx0XHR4YXR0ci5vXG5mcy9udGZzMy9NYWtlZmlsZS01MS1cbi0tXG5mcy9vY2ZzMi9NYWtlZmlsZT0xMT1vY2ZzMi1vYmpzIDo9IFxcXG4tLVxuZnMvb2NmczIvTWFrZWZpbGUtNDEtXHRxdW90YV9nbG9iYWwub1x0XHRcXFxuZnMvb2NmczIvTWFrZWZpbGU6NDI6XHR4YXR0ci5vXHRcdFx0XFxcbmZzL29jZnMyL01ha2VmaWxlLTQzLVx0YWNsLm9cdFxcXG4tLVxuZnMvb3JhbmdlZnMvTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfT1JBTkdFRlNfRlMpICYjNDM7PSBvcmFuZ2Vmcy5vXG5mcy9vcmFuZ2Vmcy9NYWtlZmlsZS03LVxuZnMvb3JhbmdlZnMvTWFrZWZpbGU6ODpvcmFuZ2Vmcy1vYmpzIDo9IGFjbC5vIGZpbGUubyBvcmFuZ2Vmcy1jYWNoZS5vIG9yYW5nZWZzLXV0aWxzLm8geGF0dHIubyBcXFxuZnMvb3JhbmdlZnMvTWFrZWZpbGUtOS1cdFx0IGRjYWNoZS5vIGlub2RlLm8gb3JhbmdlZnMtc3lzZnMubyBvcmFuZ2Vmcy1tb2QubyBzdXBlci5vIFxcXG4tLVxuZnMvc21iL2NsaWVudC9NYWtlZmlsZT0xOT0kKG9iaikvY2lmc19zcG5lZ29fbmVndG9rZW5pbml0LmFzbjEubzogJChvYmopL2NpZnNfc3BuZWdvX25lZ3Rva2VuaW5pdC5hc24xLmMgJChvYmopL2NpZnNfc3BuZWdvX25lZ3Rva2VuaW5pdC5hc24xLmhcbmZzL3NtYi9jbGllbnQvTWFrZWZpbGUtMjAtXG5mcy9zbWIvY2xpZW50L01ha2VmaWxlOjIxOmNpZnMtJChDT05GSUdfQ0lGU19YQVRUUikgJiM0Mzs9IHhhdHRyLm9cbmZzL3NtYi9jbGllbnQvTWFrZWZpbGUtMjItXG4tLVxuZnMvc3F1YXNoZnMvTWFrZWZpbGU9MTM9c3F1YXNoZnMtJChDT05GSUdfU1FVQVNIRlNfREVDT01QX01VTFRJX1BFUkNQVSkgJiM0Mzs9IGRlY29tcHJlc3Nvcl9tdWx0aV9wZXJjcHUub1xuZnMvc3F1YXNoZnMvTWFrZWZpbGU6MTQ6c3F1YXNoZnMtJChDT05GSUdfU1FVQVNIRlNfWEFUVFIpICYjNDM7PSB4YXR0ci5vIHhhdHRyX2lkLm9cbmZzL3NxdWFzaGZzL01ha2VmaWxlLTE1LXNxdWFzaGZzLSQoQ09ORklHX1NRVUFTSEZTX0xaNCkgJiM0Mzs9IGx6NF93cmFwcGVyLm9cbi0tXG5mcy91Ymlmcy9NYWtlZmlsZT05PXViaWZzLSQoQ09ORklHX0ZTX0VOQ1JZUFRJT04pICYjNDM7PSBjcnlwdG8ub1xuZnMvdWJpZnMvTWFrZWZpbGU6MTA6dWJpZnMtJChDT05GSUdfVUJJRlNfRlNfWEFUVFIpICYjNDM7PSB4YXR0ci5vXG5mcy91Ymlmcy9NYWtlZmlsZS0xMS11Ymlmcy0kKENPTkZJR19VQklGU19GU19BVVRIRU5USUNBVElPTikgJiM0Mzs9IGF1dGgub1xuLS1cbmZzL3hmcy9NYWtlZmlsZT03MT14ZnMteVx0XHRcdFx0JiM0Mzs9IHhmc19hb3BzLm8gXFxcbi0tXG5mcy94ZnMvTWFrZWZpbGUtMTA5LVx0XHRcdFx0ICAgeGZzX3ZlcmlmeV9tZWRpYS5vIFxcXG5mcy94ZnMvTWFrZWZpbGU6MTEwOlx0XHRcdFx0ICAgeGZzX3hhdHRyLm9cbmZzL3hmcy9NYWtlZmlsZS0xMTEtXG4tLVxuZnMveGZzL01ha2VmaWxlPTE2OD14ZnMteVx0XHRcdFx0JiM0Mzs9ICQoYWRkcHJlZml4IHNjcnViLywgXFxcbi0tXG5mcy94ZnMvTWFrZWZpbGUtMTg1LVx0XHRcdFx0ICAgaXNjYW4ubyBcXFxuZnMveGZzL01ha2VmaWxlOjE4NjpcdFx0XHRcdCAgIGxpc3R4YXR0ci5vIFxcXG5mcy94ZnMvTWFrZWZpbGUtMTg3LVx0XHRcdFx0ICAgbWV0YXBhdGgubyBcXFxuLS1cbmlvX3VyaW5nL01ha2VmaWxlPTk9b2JqLSQoQ09ORklHX0lPX1VSSU5HKVx0XHQmIzQzOz0gaW9fdXJpbmcubyBvcGRlZi5vIGtidWYubyByc3JjLm8gbm90aWYubyBcXFxuLS1cbmlvX3VyaW5nL01ha2VmaWxlLTExLVx0XHRcdFx0XHR0dy5vIHdhaXQubyBldmVudGZkLm8gdXJpbmdfY21kLm8gXFxcbmlvX3VyaW5nL01ha2VmaWxlOjEyOlx0XHRcdFx0XHRvcGVuY2xvc2UubyBzcXBvbGwubyB4YXR0ci5vIG5vcC5vIFxcXG5pb191cmluZy9NYWtlZmlsZS0xMy1cdFx0XHRcdFx0ZnMubyBzcGxpY2UubyBzeW5jLm8gbXNnX3JpbmcubyBcXFxuLS1cbm5ldC9jZXBoL29zZF9jbGllbnQuYz0zNzE9c3RhdGljIHZvaWQgb3NkX3JlcV9vcF9kYXRhX3JlbGVhc2Uoc3RydWN0IGNlcGhfb3NkX3JlcXVlc3QgKm9zZF9yZXEsXG4tLVxubmV0L2NlcGgvb3NkX2NsaWVudC5jLTM5My1cdGNhc2UgQ0VQSF9PU0RfT1BfQ01QWEFUVFI6XG5uZXQvY2VwaC9vc2RfY2xpZW50LmM6Mzk0Olx0XHRjZXBoX29zZF9kYXRhX3JlbGVhc2UoXHUwMDI2b3AtXHUwMDNleGF0dHIub3NkX2RhdGEpO1xubmV0L2NlcGgvb3NkX2NsaWVudC5jLTM5NS1cdFx0YnJlYWs7XG4tLVxubmV0L2NlcGgvb3NkX2NsaWVudC5jPTg0ND1pbnQgb3NkX3JlcV9vcF94YXR0cl9pbml0KHN0cnVjdCBjZXBoX29zZF9yZXF1ZXN0ICpvc2RfcmVxLCB1bnNpZ25lZCBpbnQgd2hpY2gsXG4tLVxubmV0L2NlcGgvb3NkX2NsaWVudC5jLTg3NC1cbm5ldC9jZXBoL29zZF9jbGllbnQuYzo4NzU6XHRjZXBoX29zZF9kYXRhX3BhZ2VsaXN0X2luaXQoXHUwMDI2b3AtXHUwMDNleGF0dHIub3NkX2RhdGEsIHBhZ2VsaXN0KTtcbm5ldC9jZXBoL29zZF9jbGllbnQuYy04NzYtXHRvcC1cdTAwM2VpbmRhdGFfbGVuID0gcGF5bG9hZF9sZW47XG4tLVxubmV0L2NlcGgvb3NkX2NsaWVudC5jPTIwNDE9c3RhdGljIHZvaWQgc2V0dXBfcmVxdWVzdF9kYXRhKHN0cnVjdCBjZXBoX29zZF9yZXF1ZXN0ICpyZXEpXG4tLVxubmV0L2NlcGgvb3NkX2NsaWVudC5jLTIwNjQtXHRcdFx0Y2VwaF9vc2RjX21zZ19kYXRhX2FkZChyZXF1ZXN0X21zZyxcbm5ldC9jZXBoL29zZF9jbGllbnQuYzoyMDY1Olx0XHRcdFx0XHQgICAgICAgXHUwMDI2b3AtXHUwMDNleGF0dHIub3NkX2RhdGEpO1xubmV0L2NlcGgvb3NkX2NsaWVudC5jLTIwNjYtXHRcdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE2OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4MzA4CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNjg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgUGxhbiBmb3IgRXh0ZW5kZWQgQXR0cmlidXRlcyB3aXRoIE9fUEFUSCBhbmQgQVRfRU1QVFlfUEFUSCoqCgpPa2F5LCBzbyBgZnMvTWFrZWZpbGVgIGFsd2F5cyBpbmNsdWRlcyBgeGF0dHIub2AsIG1lYW5pbmcgdGhlIGV4dGVuZGVkIGF0dHJpYnV0ZSBjb2RlIGlzIGFsd2F5cyBjb21waWxlZC4gVGhhdCYjMzk7cyBnb29kOyBpdCBzaW1wbGlmaWVzIHRoaW5ncy4gVGhlIGBzZXR4YXR0cmF0YCwgYGdldHhhdHRyYXRgLCBgbGlzdHhhdHRyYXRgLCBhbmQgYHJlbW92ZXhhdHRyYXRgIHN5c2NhbGxzIGFyZSBhbHdheXMgYXZhaWxhYmxlLgoKVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyBlbmFibGluZyBgT19QQVRIYCBmaWxlIGRlc2NyaXB0b3JzIHdpdGggYEFUX0VNUFRZX1BBVEhgIGluIHRob3NlIGAqeGF0dHJhdGAgc3lzY2FsbHMuIFRoYXQmIzM5O3MgYSBkZWZpbml0ZSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHJlcXVpcmVzIGZ1enppbmcuCgpNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGZvY3VzIG9uIGBwYXRoX3NldHhhdHRyYXRgLCBgcGF0aF9nZXR4YXR0cmF0YCwgYHBhdGhfbGlzdHhhdHRyYXRgLCBhbmQgYHBhdGhfcmVtb3ZleGF0dHJhdGAsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZG9uJiMzOTt0IG1pc3MgYW55dGhpbmcuIFdhaXQsIHRoZSAqYWN0dWFsKiBzeXNjYWxscywgZnJvbSB0aGUgdXNlciYjMzk7cyBwZXJzcGVjdGl2ZSwgYXJlIGBzZXR4YXR0cmF0YCwgYGdldHhhdHRyYXRgLCBgbGlzdHhhdHRyYXRgLCBgcmVtb3ZleGF0dHJhdGAuIEkgbmVlZCB0byBjb3ZlciBib3RoLiBObywgbGV0JiMzOTtzIHN0aWNrIHdpdGggdGhlIGZ1bmN0aW9ucyBiZWNhdXNlIHRob3NlIGZ1bmN0aW9ucyBhcmUgdGhlIG9uZXMgdGhhdCBhY3R1YWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGFuZCB0YWtlIHRoZSByYXcgcGFyYW1ldGVyIGFuZCBzbyBJIHRoaW5rIHRob3NlIGFyZSB0aGUgYmVzdCBmb2N1cyBzeW1ib2xzLgoKTm93LCB3aGlsZSB0aGlua2luZyBhYm91dCB0aGlzLCBJIHJlYWxpemUgaXQmIzM5O3Mgd29ydGggY292ZXJpbmcgdGhlIHN5c2NhbGwgd3JhcHBlcnMgdG9vOiBgc3lzX3NldHhhdHRyYXRgLCBgc3lzX2dldHhhdHRyYXRgLCBgc3lzX2xpc3R4YXR0cmF0YCwgYHN5c19yZW1vdmV4YXR0cmF0YC4gQWggcmlnaHQsIGBTWVNDQUxMX0RFRklORTZgIGdlbmVyYXRlcyB0aGUgYWN0dWFsIHN5c2NhbGwgZnVuY3Rpb25zLiBCZXR0ZXIgdG8gZm9jdXMgb24gdGhlIGBwYXRoXypgIGZ1bmN0aW9ucy4KClNpbmNlIHRoZSB4YXR0ciBjb2RlIGlzIGFsd2F5cyBjb21waWxlZCwgSSBkb24mIzM5O3QgbmVlZCBhbnkgc3BlY2lhbCBjb25maWd1cmF0aW9ucyB0byBlbmFibGUgaXQuIEJ1dCwgdG8gdGVzdCB0aGlzIG5ldyBmdW5jdGlvbmFsaXR5LCBJJiMzOTtsbCBuZWVkIGEgZmlsZXN5c3RlbSB0aGF0IHN1cHBvcnRzIHhhdHRycy4gYEVYVDRfRlNfWEFUVFJgIG9yIGBUTVBGU19YQVRUUmAgd291bGQgYmUgZ29vZCBjaG9pY2VzLiBDb25zaWRlcmluZyBzeXprYWxsZXIsIGBUTVBGU19YQVRUUmAgaXMgdHlwaWNhbGx5IGVuYWJsZWQsIHdoaWNoIG1lYW5zIGl0IHdpbGwgYmUgZWFzaWx5IGFjY2Vzc2libGUuIFllcywgSSYjMzk7bGwgYWRkIGBUTVBGU19YQVRUUmAgYW5kIGBFWFQ0X0ZTX1hBVFRSYCB0byBgRW5hYmxlQ29uZmlnc2AganVzdCB0byBiZSBjZXJ0YWluLgoKTGV0IG1lIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGBmZF9tYXliZV9yYXdgLiBJdCYjMzk7cyBhIG1hY3JvOiBgREVGSU5FX0NMQVNTKGZkX21heWJlX3Jhdywgc3RydWN0IGZkLCBmZHB1dChfVCksIHJhdyA/IGZkZ2V0X3JhdyhmZCkgOiBmZGdldChmZCksIGludCBmZCwgYm9vbCByYXcpYC4gSXQmIzM5O3MgdXNlZCBpbiBgZnMveGF0dHIuY2AsIHNvIEkmIzM5O2xsIGRvdWJsZSBjaGVjayBob3cgaXQmIzM5O3MgdXNlZC4gSnVzdCBpbiBjYXNlLCBJJiMzOTtsbCBgZ3JlcGAgZm9yIG90aGVyIG9jY3VycmVuY2VzIG9mIGBmZF9tYXliZV9yYXdgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNjo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmZF9tYXliZV9yYXcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMveGF0dHIuYz03MDE9c3RhdGljIGludCBwYXRoX3NldHhhdHRyYXQoaW50IGRmZCwgY29uc3QgY2hhciBfX3VzZXIgKnBhdGhuYW1lLFxuLS1cbmZzL3hhdHRyLmMtNzI4LVx0aWYgKCFmaWxlbmFtZSBcdTAwMjZcdTAwMjYgZGZkIFx1MDAzZT0gMCkge1xuZnMveGF0dHIuYzo3Mjk6XHRcdENMQVNTKGZkX21heWJlX3JhdywgZikoZGZkLCByYXcpO1xuZnMveGF0dHIuYy03MzAtXHRcdGlmIChmZF9lbXB0eShmKSlcbi0tXG5mcy94YXR0ci5jPTg0OD1zdGF0aWMgc3NpemVfdCBwYXRoX2dldHhhdHRyYXQoaW50IGRmZCwgY29uc3QgY2hhciBfX3VzZXIgKnBhdGhuYW1lLFxuLS1cbmZzL3hhdHRyLmMtODY5LVx0aWYgKCFmaWxlbmFtZSBcdTAwMjZcdTAwMjYgZGZkIFx1MDAzZT0gMCkge1xuZnMveGF0dHIuYzo4NzA6XHRcdENMQVNTKGZkX21heWJlX3JhdywgZikoZGZkLCByYXcpO1xuZnMveGF0dHIuYy04NzEtXHRcdGlmIChmZF9lbXB0eShmKSlcbi0tXG5mcy94YXR0ci5jPTk4Nz1zdGF0aWMgc3NpemVfdCBwYXRoX2xpc3R4YXR0cmF0KGludCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICpwYXRobmFtZSxcbi0tXG5mcy94YXR0ci5jLTk5Ny1cdGlmICghZmlsZW5hbWUpIHtcbmZzL3hhdHRyLmM6OTk4Olx0XHRDTEFTUyhmZF9tYXliZV9yYXcsIGYpKGRmZCwgcmF3KTtcbmZzL3hhdHRyLmMtOTk5LVx0XHRpZiAoZmRfZW1wdHkoZikpXG4tLVxuZnMveGF0dHIuYz0xMDgwPXN0YXRpYyBpbnQgcGF0aF9yZW1vdmV4YXR0cmF0KGludCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICpwYXRobmFtZSxcbi0tXG5mcy94YXR0ci5jLTEwOTYtXHRpZiAoIWZpbGVuYW1lKSB7XG5mcy94YXR0ci5jOjEwOTc6XHRcdENMQVNTKGZkX21heWJlX3JhdywgZikoZGZkLCByYXcpO1xuZnMveGF0dHIuYy0xMDk4LVx0XHRpZiAoZmRfZW1wdHkoZikpXG4tLVxuaW5jbHVkZS9saW51eC9maWxlLmg9ODQ9REVGSU5FX0NMQVNTKGZkX3Jhdywgc3RydWN0IGZkLCBmZHB1dChfVCksIGZkZ2V0X3JhdyhmZCksIGludCBmZClcbmluY2x1ZGUvbGludXgvZmlsZS5oOjg1OkRFRklORV9DTEFTUyhmZF9tYXliZV9yYXcsIHN0cnVjdCBmZCwgZmRwdXQoX1QpLFxuaW5jbHVkZS9saW51eC9maWxlLmgtODYtXHQgICAgIHJhdyA/IGZkZ2V0X3JhdyhmZCkgOiBmZGdldChmZCksIGludCBmZCwgYm9vbCByYXcpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE2OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwMTM3CgkJCQkJCQlvdXRwdXQ6IDI1MAoJCQkJCQkJdGhvdWdodHM6IDI1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgRXh0ZW5kZWQgQXR0cmlidXRlIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgc3BlY2lmaWNhbGx5IHRhcmdldGluZyBgZnMveGF0dHIuY2AuIFRoYXQgbmFycm93cyB0aGUgc2NvcGUgY29uc2lkZXJhYmx5LCB3aGljaCBpcyBoZWxwZnVsLiBUaGUgY29yZSBvZiB0aGlzIGNoYW5nZSBzZWVtcyB0byBiZSBhcm91bmQgZW5hYmxpbmcgYCp4YXR0cmF0YCBzeXNjYWxscyB0byB3b3JrIGNvcnJlY3RseSB3aXRoIGBPX1BBVEhgIGZpbGUgZGVzY3JpcHRvcnMsIHBhcnRpY3VsYXJseSB3aGVuIHVzaW5nIGBBVF9FTVBUWV9QQVRIYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgbmV3IGBmZF9tYXliZV9yYXdgIGNsYXNzIGNvbWVzIGluLCB1c2luZyBgZmRnZXRfcmF3YCBpbnN0ZWFkIG9mIHRoZSB1c3VhbCBgZmRnZXRgLiBGdW5jdGlvbmFsbHksIHRoaXMgbW9kaWZpZXMgdGhlIGJlaGF2aW9yIG9mIHNldmVyYWwga2V5IHN5c2NhbGxzOiBgcGF0aF9zZXR4YXR0cmF0YCwgYHBhdGhfZ2V0eGF0dHJhdGAsIGBwYXRoX2xpc3R4YXR0cmF0YCwgYW5kIGBwYXRoX3JlbW92ZXhhdHRyYXRgLiBJdCBicmluZ3MgdGhlbSBpbiBsaW5lIHdpdGggdGhlIGJlaGF2aW9yIG9mIG90aGVyIGAqYXRgIGNhbGxzIGxpa2UgYGZjaG93bmF0YCBhbmQgYGZzdGF0YXRgLiBUaGlzIGNvbnNpc3RlbmN5IGlzIGdvb2QgZnJvbSBhIGRlc2lnbiBwZXJzcGVjdGl2ZS4KCk15IHByaW1hcnkgY29uY2VybiwgdGhvdWdoLCBpcyBlbnN1cmluZyBubyByZWdyZXNzaW9ucyBvciB1bmV4cGVjdGVkIHNpZGUgZWZmZWN0cy4gV2UgbmVlZCB0byByaWdvcm91c2x5IGZ1enogdGhlc2UgbW9kaWZpZWQgc3lzY2FsbHMsIGVzcGVjaWFsbHkgaW4gY29uanVuY3Rpb24gd2l0aCBgT19QQVRIYCBhbmQgZXh0ZW5kZWQgYXR0cmlidXRlcy4gSSYjMzk7bGwgbWFrZSBzdXJlIHRoZSBmdXp6ZXIgY292ZXJzIHRoaXMgZXh0ZW5zaXZlbHkuIEkmIzM5O2xsIG5lZWQgdG8gc2V0IHVwIHRoZSBmdXp6aW5nIHdpdGggdGhlIGNvbmZpZ3VyYXRpb25zIGBUTVBGU19YQVRUUmAgYW5kIGBFWFQ0X0ZTX1hBVFRSYCBlbmFibGVkIHRvIHRlc3QgaXQgdGhvcm91Z2hseSBhY3Jvc3MgZGlmZmVyZW50IGZpbGVzeXN0ZW1zLiBJIHdpbGwgYWxzbyBoYXZlIHRvIGxvb2sgZm9yIHNldC1yZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNjo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+dGhlIGZvbGxvd2luZyBjb25maWdzIGRvIG5vdCBleGlzdCBpbiB0aGUga2VybmVsIHRyZWU6IEVYVDRfRlNfWEFUVFI8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VE1QRlNfWEFUVFImIzM0OywKICAgICYjMzQ7RVhUNF9GU19YQVRUUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BhdGhfc2V0eGF0dHJhdCYjMzQ7LAogICAgJiMzNDtwYXRoX2dldHhhdHRyYXQmIzM0OywKICAgICYjMzQ7cGF0aF9saXN0eGF0dHJhdCYjMzQ7LAogICAgJiMzNDtwYXRoX3JlbW92ZXhhdHRyYXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGAqeGF0dHJhdGAgc3lzY2FsbHMgKGUuZy4sIGBzZXR4YXR0cmF0YCwgYGdldHhhdHRyYXRgLCBgbGlzdHhhdHRyYXRgLCBgcmVtb3ZleGF0dHJhdGApIHRvIGFsbG93IG9wZXJhdGluZyBvbiBgT19QQVRIYCBmaWxlIGRlc2NyaXB0b3JzIHdoZW4gYEFUX0VNUFRZX1BBVEhgIGlzIHVzZWQuIFRoaXMgaXMgYWNoaWV2ZWQgYnkgaW50cm9kdWNpbmcgYSBuZXcgYGZkX21heWJlX3Jhd2AgY2xhc3MgdGhhdCB1c2VzIGBmZGdldF9yYXdgIGluc3RlYWQgb2YgYGZkZ2V0YCB3aGVuIHRoZSBgcmF3YCBwYXJhbWV0ZXIgaXMgdHJ1ZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWx0ZXJzIHRoZSBiZWhhdmlvciBvZiB0aGVzZSBzeXNjYWxscywgbWFraW5nIHRoZW0gY29uc2lzdGVudCB3aXRoIG90aGVyIGAqYXRgIHN5c2NhbGxzIGxpa2UgYGZjaG93bmF0YCBhbmQgYGZzdGF0YXRgLiBJdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gcmVncmVzc2lvbnMgb3IgdW5leHBlY3RlZCBiZWhhdmlvcnMgd2hlbiB1c2luZyBgT19QQVRIYCBmaWxlIGRlc2NyaXB0b3JzIHdpdGggZXh0ZW5kZWQgYXR0cmlidXRlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O3RoZSBmb2xsb3dpbmcgY29uZmlncyBkbyBub3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlOiBFWFQ0X0ZTX1hBVFRSJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNjo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDk3MAoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRlYnVnZ2luZyBhbiBFWFQ0IEV4dGVuZGVkIEF0dHJpYnV0ZSBJc3N1ZSoqCgpBbHJpZ2h0LCBzbyBgRVhUNF9GU19YQVRUUmAgc2VlbXMgdG8gYmUgdW5kZWZpbmVkLi4uIGEgYml0IG9kZC4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gZGl2ZSBpbnRvIHRoZSBLY29uZmlnLiBJIGtub3cgaXQmIzM5O3MgKmdvdCogdG8gYmUgY29udHJvbGxlZCBieSBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHNvbWV3aGVyZS4gUHJvYmFibHkgYSBmYWlybHkgc3RyYWlnaHRmb3J3YXJkIG9uZSwgYnV0IHRoZSBLY29uZmlnIGlzIHRoZSBzb3VyY2Ugb2YgdHJ1dGggZm9yIHRoZXNlIHRoaW5ncy4gTGV0IG1lIHB1bGwgdXAgYGZzL2V4dDQvS2NvbmZpZ2AgYW5kIGRvdWJsZS1jaGVjayBpdHMgZGVmaW5pdGlvbiBhbmQgZGVwZW5kZW5jaWVzLiBJdCYjMzk7cyBhbG1vc3QgY2VydGFpbmx5IGNvbmRpdGlvbmFsIG9uIHNvbWV0aGluZywgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdGhhdCB0cmlnZ2VyIGlzIGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLiBHb3R0YSBtYWtlIHN1cmUgdGhlIGZlYXR1cmUmIzM5O3MgZW5hYmxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMTY6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRVhUNF9GU19YQVRUUiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE2OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxMTkyCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUsIEkgbmVlZCB0byBnZXQgdGhpcyBzdHJhaWdodCBpbiBteSBoZWFkLgoKKipFeHQ0IFhhdHRyIE1vZHVsZSBJbnF1aXJ5KioKCkhtbSwgSSBzZWVtIHRvIHJlY2FsbCBjYXRjaGluZyBhIGxpbmUgaW4gYERvY3VtZW50YXRpb24va2J1aWxkL21ha2VmaWxlcy5yc3RgIHRoYXQgbG9va2VkIHNvbWV0aGluZyBsaWtlIGBleHQ0LSQoQ09ORklHX0VYVDRfRlNfWEFUVFIpICYjNDM7PSB4YXR0ci5vYC4gQnV0IHRoYXQgY291bGQgaGF2ZSBqdXN0IGJlZW4gYW4gZXhhbXBsZSBzbmlwcGV0LiBJIG5lZWQgdG8gYmUgc3VyZS4gSXQmIzM5O3MgYmVzdCB0byBjaGVjayB0aGUgYWN0dWFsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gTGV0JiMzOTtzIGRpZyBpbnRvIGBmcy9leHQ0L0tjb25maWdgIHRvIGNvbmZpcm0gaWYgdGhhdCYjMzk7cyB0aGUgY29ycmVjdCByZWZlcmVuY2UgZm9yIHRoZSBlWHRlbmVkIEF0dHJpYnV0ZXMgaW4gdGhlIEV4dDQgZmlsZXN5c3RlbS4gSSBuZWVkIHRoZSBkZWZpbml0aXZlIGFuc3dlciBiZWZvcmUgcHJvY2VlZGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMTY6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEVYVDRfRlMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9leHQ0L0tjb25maWc6Mjpjb25maWcgRVhUNF9GU1xuZnMvZXh0NC9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtUaGUgRXh0ZW5kZWQgNCAoZXh0NCkgZmlsZXN5c3RlbVwmIzM0O1xuLS1cbmZzL2V4dDQvS2NvbmZpZz0zNT1jb25maWcgRVhUNF9VU0VfRk9SX0VYVDJcbi0tXG5mcy9leHQ0L0tjb25maWctNDUtXG5mcy9leHQ0L0tjb25maWc6NDY6Y29uZmlnIEVYVDRfRlNfUE9TSVhfQUNMXG5mcy9leHQ0L0tjb25maWctNDctXHRib29sIFwmIzM0O0V4dDQgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHNcJiMzNDtcbi0tXG5mcy9leHQ0L0tjb25maWctNTUtXG5mcy9leHQ0L0tjb25maWc6NTY6Y29uZmlnIEVYVDRfRlNfU0VDVVJJVFlcbmZzL2V4dDQvS2NvbmZpZy01Ny1cdGJvb2wgXCYjMzQ7RXh0NCBTZWN1cml0eSBMYWJlbHNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMTY6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDE2MjcKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgRmlsZSBTeXN0ZW0gTWV0YWRhdGEqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGludG8gaG93IGV4dGVuZGVkIGF0dHJpYnV0ZXMgKHhhdHRycykgYXJlIGhhbmRsZWQgd2l0aGluIGZpbGUgc3lzdGVtcywgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGV4dDQuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCBgRVhUNF9GU19YQVRUUmAgbWlnaHQgYmUgYSBjb25maWd1cmF0aW9uIG9wdGlvbiBJIG5lZWRlZCB0byBjaGVjay4gQnV0IHdhaXQsIHRoYXQmIzM5O3Mgbm90IHJpZ2h0LiBJIHJlbWVtYmVyIG5vdzsgeGF0dHJzIGFyZSAqYWx3YXlzKiBlbmFibGVkIGluIGV4dDQuIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgcGFydCBvZiB0aGUgZGVzaWduLCBzbyB0aGVyZSYjMzk7cyBubyBjb21waWxlLXRpbWUgc3dpdGNoIGZvciBpdC4gVGhhdCBlbGltaW5hdGVzIGEgcG90ZW50aWFsIGFyZWEgb2YgaW52ZXN0aWdhdGlvbi4gTm93LCBhIGRpZmZlcmVudCBhbmdsZS4gTGV0JiMzOTtzIHNoaWZ0IG91ciBmb2N1cyB0byBgVE1QRlNfWEFUVFJgLiBQZXJoYXBzIHRoZSBoYW5kbGluZyBvZiB4YXR0cnMgaW4gYSB0bXBmcyBlbnZpcm9ubWVudCBvZmZlcnMgYSBtb3JlIHJlbGV2YW50IHBvaW50IG9mIGlucXVpcnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE2OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBUTVBGU19YQVRUUiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9LY29uZmlnPTE4MT1jb25maWcgVE1QRlNfUE9TSVhfQUNMXG4tLVxuZnMvS2NvbmZpZy0xOTgtXG5mcy9LY29uZmlnOjE5OTpjb25maWcgVE1QRlNfWEFUVFJcbmZzL0tjb25maWctMjAwLVx0Ym9vbCBcJiMzNDtUbXBmcyBleHRlbmRlZCBhdHRyaWJ1dGVzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE2OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxOTEyCgkJCQkJCQlvdXRwdXQ6IDI0MAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqVXRpbGl6aW5nIFRNUEZTX1hBVFRSKioKClJpZ2h0LCAqVE1QRlNfWEFUVFIqIGRvZXMgaW5kZWVkIGV4aXN0LiBObyBuZWVkIHRvIG92ZXJjb21wbGljYXRlIHRoaW5nczsgdGhhdCYjMzk7cyB0aGUgY2xlYW5lc3QgYW5kIG1vc3QgZGlyZWN0IGFwcHJvYWNoIGhlcmUuIEkmIzM5O2xsIGp1c3QgbGV2ZXJhZ2UgKlRNUEZTX1hBVFRSKi4gU2ltcGxpY2l0eSBhbmQgZWZmaWNpZW5jeS4gRG9uZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMTY6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RNUEZTX1hBVFRSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGF0aF9zZXR4YXR0cmF0JiMzNDssCiAgICAmIzM0O3BhdGhfZ2V0eGF0dHJhdCYjMzQ7LAogICAgJiMzNDtwYXRoX2xpc3R4YXR0cmF0JiMzNDssCiAgICAmIzM0O3BhdGhfcmVtb3ZleGF0dHJhdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgYCp4YXR0cmF0YCBzeXNjYWxscyAoZS5nLiwgYHNldHhhdHRyYXRgLCBgZ2V0eGF0dHJhdGAsIGBsaXN0eGF0dHJhdGAsIGByZW1vdmV4YXR0cmF0YCkgdG8gYWxsb3cgb3BlcmF0aW5nIG9uIGBPX1BBVEhgIGZpbGUgZGVzY3JpcHRvcnMgd2hlbiBgQVRfRU1QVFlfUEFUSGAgaXMgdXNlZC4gVGhpcyBpcyBhY2hpZXZlZCBieSBpbnRyb2R1Y2luZyBhIG5ldyBgZmRfbWF5YmVfcmF3YCBjbGFzcyB0aGF0IHVzZXMgYGZkZ2V0X3Jhd2AgaW5zdGVhZCBvZiBgZmRnZXRgIHdoZW4gdGhlIGByYXdgIHBhcmFtZXRlciBpcyB0cnVlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhbHRlcnMgdGhlIGJlaGF2aW9yIG9mIHRoZXNlIHN5c2NhbGxzLCBtYWtpbmcgdGhlbSBjb25zaXN0ZW50IHdpdGggb3RoZXIgYCphdGAgc3lzY2FsbHMgbGlrZSBgZmNob3duYXRgIGFuZCBgZnN0YXRhdGAuIEl0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyByZWdyZXNzaW9ucyBvciB1bmV4cGVjdGVkIGJlaGF2aW9ycyB3aGVuIHVzaW5nIGBPX1BBVEhgIGZpbGUgZGVzY3JpcHRvcnMgd2l0aCBleHRlbmRlZCBhdHRyaWJ1dGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUTVBGU19YQVRUUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BhdGhfc2V0eGF0dHJhdCYjMzQ7LAogICAgJiMzNDtwYXRoX2dldHhhdHRyYXQmIzM0OywKICAgICYjMzQ7cGF0aF9saXN0eGF0dHJhdCYjMzQ7LAogICAgJiMzNDtwYXRoX3JlbW92ZXhhdHRyYXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGAqeGF0dHJhdGAgc3lzY2FsbHMgKGUuZy4sIGBzZXR4YXR0cmF0YCwgYGdldHhhdHRyYXRgLCBgbGlzdHhhdHRyYXRgLCBgcmVtb3ZleGF0dHJhdGApIHRvIGFsbG93IG9wZXJhdGluZyBvbiBgT19QQVRIYCBmaWxlIGRlc2NyaXB0b3JzIHdoZW4gYEFUX0VNUFRZX1BBVEhgIGlzIHVzZWQuIFRoaXMgaXMgYWNoaWV2ZWQgYnkgaW50cm9kdWNpbmcgYSBuZXcgYGZkX21heWJlX3Jhd2AgY2xhc3MgdGhhdCB1c2VzIGBmZGdldF9yYXdgIGluc3RlYWQgb2YgYGZkZ2V0YCB3aGVuIHRoZSBgcmF3YCBwYXJhbWV0ZXIgaXMgdHJ1ZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWx0ZXJzIHRoZSBiZWhhdmlvciBvZiB0aGVzZSBzeXNjYWxscywgbWFraW5nIHRoZW0gY29uc2lzdGVudCB3aXRoIG90aGVyIGAqYXRgIHN5c2NhbGxzIGxpa2UgYGZjaG93bmF0YCBhbmQgYGZzdGF0YXRgLiBJdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gcmVncmVzc2lvbnMgb3IgdW5leHBlY3RlZCBiZWhhdmlvcnMgd2hlbiB1c2luZyBgT19QQVRIYCBmaWxlIGRlc2NyaXB0b3JzIHdpdGggZXh0ZW5kZWQgYXR0cmlidXRlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE2OjQ5OjA2LjEyMTQ4NTcwN1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwOTc2MjE5ODc2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUTVBGU19YQVRUUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBhdGhfc2V0eGF0dHJhdFwiLFxuICAgIFwicGF0aF9nZXR4YXR0cmF0XCIsXG4gICAgXCJwYXRoX2xpc3R4YXR0cmF0XCIsXG4gICAgXCJwYXRoX3JlbW92ZXhhdHRyYXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYCp4YXR0cmF0YCBzeXNjYWxscyAoZS5nLiwgYHNldHhhdHRyYXRgLCBgZ2V0eGF0dHJhdGAsIGBsaXN0eGF0dHJhdGAsIGByZW1vdmV4YXR0cmF0YCkgdG8gYWxsb3cgb3BlcmF0aW5nIG9uIGBPX1BBVEhgIGZpbGUgZGVzY3JpcHRvcnMgd2hlbiBgQVRfRU1QVFlfUEFUSGAgaXMgdXNlZC4gVGhpcyBpcyBhY2hpZXZlZCBieSBpbnRyb2R1Y2luZyBhIG5ldyBgZmRfbWF5YmVfcmF3YCBjbGFzcyB0aGF0IHVzZXMgYGZkZ2V0X3Jhd2AgaW5zdGVhZCBvZiBgZmRnZXRgIHdoZW4gdGhlIGByYXdgIHBhcmFtZXRlciBpcyB0cnVlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhbHRlcnMgdGhlIGJlaGF2aW9yIG9mIHRoZXNlIHN5c2NhbGxzLCBtYWtpbmcgdGhlbSBjb25zaXN0ZW50IHdpdGggb3RoZXIgYCphdGAgc3lzY2FsbHMgbGlrZSBgZmNob3duYXRgIGFuZCBgZnN0YXRhdGAuIEl0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyByZWdyZXNzaW9ucyBvciB1bmV4cGVjdGVkIGJlaGF2aW9ycyB3aGVuIHVzaW5nIGBPX1BBVEhgIGZpbGUgZGVzY3JpcHRvcnMgd2l0aCBleHRlbmRlZCBhdHRyaWJ1dGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxNjo0OTowNi4xMjE1MDM2ODdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4NTQ1MjU1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGIwN2MxMmQ5ZGYzYWVmMjk3ZmNlZGZmMTE2ZDdiODJhMTNlODRmYzNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdWwgMjMgMTY6NDk6MDQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMveGF0dHIuYyBiL2ZzL3hhdHRyLmNcXG5pbmRleCBkNTg5NzkxMTUyMDA3NS4uMWRiNjU5NmEyZWMxMTAgMTAwNjQ0XFxuLS0tIGEvZnMveGF0dHIuY1xcbisrKyBiL2ZzL3hhdHRyLmNcXG5AQCAtNzAwLDcgKzcwMCw4IEBAIGludCBmaWxlbmFtZV9zZXR4YXR0cihpbnQgZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKmZpbGVuYW1lLFxcbiBcXG4gc3RhdGljIGludCBwYXRoX3NldHhhdHRyYXQoaW50IGRmZCwgY29uc3QgY2hhciBfX3VzZXIgKnBhdGhuYW1lLFxcbiBcXHRcXHRcXHQgICB1bnNpZ25lZCBpbnQgYXRfZmxhZ3MsIGNvbnN0IGNoYXIgX191c2VyICpuYW1lLFxcbi1cXHRcXHRcXHQgICBjb25zdCB2b2lkIF9fdXNlciAqdmFsdWUsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpXFxuK1xcdFxcdFxcdCAgIGNvbnN0IHZvaWQgX191c2VyICp2YWx1ZSwgc2l6ZV90IHNpemUsIGludCBmbGFncyxcXG4rXFx0XFx0XFx0ICAgYm9vbCByYXcpXFxuIHtcXG4gXFx0c3RydWN0IHhhdHRyX25hbWUga25hbWU7XFxuIFxcdHN0cnVjdCBrZXJuZWxfeGF0dHJfY3R4IGN0eCA9IHtcXG5AQCAtNzI1LDcgKzcyNiw3IEBAIHN0YXRpYyBpbnQgcGF0aF9zZXR4YXR0cmF0KGludCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICpwYXRobmFtZSxcXG4gXFxuIFxcdENMQVNTKGZpbGVuYW1lX21heWJlX251bGwsIGZpbGVuYW1lKShwYXRobmFtZSwgYXRfZmxhZ3MpO1xcbiBcXHRpZiAoIWZpbGVuYW1lIFxcdTAwMjZcXHUwMDI2IGRmZCBcXHUwMDNlPSAwKSB7XFxuLVxcdFxcdENMQVNTKGZkLCBmKShkZmQpO1xcbitcXHRcXHRDTEFTUyhmZF9tYXliZV9yYXcsIGYpKGRmZCwgcmF3KTtcXG4gXFx0XFx0aWYgKGZkX2VtcHR5KGYpKVxcbiBcXHRcXHRcXHRlcnJvciA9IC1FQkFERjtcXG4gXFx0XFx0ZWxzZVxcbkBAIC03NTgsMTQgKzc1OSwxNSBAQCBTWVNDQUxMX0RFRklORTYoc2V0eGF0dHJhdCwgaW50LCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICosIHBhdGhuYW1lLCB1bnNpZ25lZCBpblxcbiBcXG4gXFx0cmV0dXJuIHBhdGhfc2V0eGF0dHJhdChkZmQsIHBhdGhuYW1lLCBhdF9mbGFncywgbmFtZSxcXG4gXFx0XFx0XFx0ICAgICAgIHU2NF90b191c2VyX3B0cihhcmdzLnZhbHVlKSwgYXJncy5zaXplLFxcbi1cXHRcXHRcXHQgICAgICAgYXJncy5mbGFncyk7XFxuK1xcdFxcdFxcdCAgICAgICBhcmdzLmZsYWdzLCB0cnVlKTtcXG4gfVxcbiBcXG4gU1lTQ0FMTF9ERUZJTkU1KHNldHhhdHRyLCBjb25zdCBjaGFyIF9fdXNlciAqLCBwYXRobmFtZSxcXG4gXFx0XFx0Y29uc3QgY2hhciBfX3VzZXIgKiwgbmFtZSwgY29uc3Qgdm9pZCBfX3VzZXIgKiwgdmFsdWUsXFxuIFxcdFxcdHNpemVfdCwgc2l6ZSwgaW50LCBmbGFncylcXG4ge1xcbi1cXHRyZXR1cm4gcGF0aF9zZXR4YXR0cmF0KEFUX0ZEQ1dELCBwYXRobmFtZSwgMCwgbmFtZSwgdmFsdWUsIHNpemUsIGZsYWdzKTtcXG4rXFx0cmV0dXJuIHBhdGhfc2V0eGF0dHJhdChBVF9GRENXRCwgcGF0aG5hbWUsIDAsIG5hbWUsIHZhbHVlLCBzaXplLCBmbGFncyxcXG4rXFx0XFx0XFx0ICAgICAgIGZhbHNlKTtcXG4gfVxcbiBcXG4gU1lTQ0FMTF9ERUZJTkU1KGxzZXR4YXR0ciwgY29uc3QgY2hhciBfX3VzZXIgKiwgcGF0aG5hbWUsXFxuQEAgLTc3MywxNCArNzc1LDE0IEBAIFNZU0NBTExfREVGSU5FNShsc2V0eGF0dHIsIGNvbnN0IGNoYXIgX191c2VyICosIHBhdGhuYW1lLFxcbiBcXHRcXHRzaXplX3QsIHNpemUsIGludCwgZmxhZ3MpXFxuIHtcXG4gXFx0cmV0dXJuIHBhdGhfc2V0eGF0dHJhdChBVF9GRENXRCwgcGF0aG5hbWUsIEFUX1NZTUxJTktfTk9GT0xMT1csIG5hbWUsXFxuLVxcdFxcdFxcdCAgICAgICB2YWx1ZSwgc2l6ZSwgZmxhZ3MpO1xcbitcXHRcXHRcXHQgICAgICAgdmFsdWUsIHNpemUsIGZsYWdzLCBmYWxzZSk7XFxuIH1cXG4gXFxuIFNZU0NBTExfREVGSU5FNShmc2V0eGF0dHIsIGludCwgZmQsIGNvbnN0IGNoYXIgX191c2VyICosIG5hbWUsXFxuIFxcdFxcdGNvbnN0IHZvaWQgX191c2VyICosdmFsdWUsIHNpemVfdCwgc2l6ZSwgaW50LCBmbGFncylcXG4ge1xcbiBcXHRyZXR1cm4gcGF0aF9zZXR4YXR0cmF0KGZkLCBOVUxMLCBBVF9FTVBUWV9QQVRILCBuYW1lLFxcbi1cXHRcXHRcXHQgICAgICAgdmFsdWUsIHNpemUsIGZsYWdzKTtcXG4rXFx0XFx0XFx0ICAgICAgIHZhbHVlLCBzaXplLCBmbGFncywgZmFsc2UpO1xcbiB9XFxuIFxcbiAvKlxcbkBAIC04NDUsNyArODQ3LDcgQEAgc3NpemVfdCBmaWxlbmFtZV9nZXR4YXR0cihpbnQgZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKmZpbGVuYW1lLFxcbiBcXG4gc3RhdGljIHNzaXplX3QgcGF0aF9nZXR4YXR0cmF0KGludCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICpwYXRobmFtZSxcXG4gXFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCBhdF9mbGFncywgY29uc3QgY2hhciBfX3VzZXIgKm5hbWUsXFxuLVxcdFxcdFxcdCAgICAgICB2b2lkIF9fdXNlciAqdmFsdWUsIHNpemVfdCBzaXplKVxcbitcXHRcXHRcXHQgICAgICAgdm9pZCBfX3VzZXIgKnZhbHVlLCBzaXplX3Qgc2l6ZSwgYm9vbCByYXcpXFxuIHtcXG4gXFx0c3RydWN0IHhhdHRyX25hbWUga25hbWU7XFxuIFxcdHN0cnVjdCBrZXJuZWxfeGF0dHJfY3R4IGN0eCA9IHtcXG5AQCAtODY1LDcgKzg2Nyw3IEBAIHN0YXRpYyBzc2l6ZV90IHBhdGhfZ2V0eGF0dHJhdChpbnQgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqcGF0aG5hbWUsXFxuIFxcbiBcXHRDTEFTUyhmaWxlbmFtZV9tYXliZV9udWxsLCBmaWxlbmFtZSkocGF0aG5hbWUsIGF0X2ZsYWdzKTtcXG4gXFx0aWYgKCFmaWxlbmFtZSBcXHUwMDI2XFx1MDAyNiBkZmQgXFx1MDAzZT0gMCkge1xcbi1cXHRcXHRDTEFTUyhmZCwgZikoZGZkKTtcXG4rXFx0XFx0Q0xBU1MoZmRfbWF5YmVfcmF3LCBmKShkZmQsIHJhdyk7XFxuIFxcdFxcdGlmIChmZF9lbXB0eShmKSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FQkFERjtcXG4gXFx0XFx0cmV0dXJuIGZpbGVfZ2V0eGF0dHIoZmRfZmlsZShmKSwgXFx1MDAyNmN0eCk7XFxuQEAgLTg5OSwyNiArOTAxLDI4IEBAIFNZU0NBTExfREVGSU5FNihnZXR4YXR0cmF0LCBpbnQsIGRmZCwgY29uc3QgY2hhciBfX3VzZXIgKiwgcGF0aG5hbWUsIHVuc2lnbmVkIGluXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4gXFx0cmV0dXJuIHBhdGhfZ2V0eGF0dHJhdChkZmQsIHBhdGhuYW1lLCBhdF9mbGFncywgbmFtZSxcXG4tXFx0XFx0XFx0ICAgICAgIHU2NF90b191c2VyX3B0cihhcmdzLnZhbHVlKSwgYXJncy5zaXplKTtcXG4rXFx0XFx0XFx0ICAgICAgIHU2NF90b191c2VyX3B0cihhcmdzLnZhbHVlKSwgYXJncy5zaXplLCB0cnVlKTtcXG4gfVxcbiBcXG4gU1lTQ0FMTF9ERUZJTkU0KGdldHhhdHRyLCBjb25zdCBjaGFyIF9fdXNlciAqLCBwYXRobmFtZSxcXG4gXFx0XFx0Y29uc3QgY2hhciBfX3VzZXIgKiwgbmFtZSwgdm9pZCBfX3VzZXIgKiwgdmFsdWUsIHNpemVfdCwgc2l6ZSlcXG4ge1xcbi1cXHRyZXR1cm4gcGF0aF9nZXR4YXR0cmF0KEFUX0ZEQ1dELCBwYXRobmFtZSwgMCwgbmFtZSwgdmFsdWUsIHNpemUpO1xcbitcXHRyZXR1cm4gcGF0aF9nZXR4YXR0cmF0KEFUX0ZEQ1dELCBwYXRobmFtZSwgMCwgbmFtZSwgdmFsdWUsIHNpemUsXFxuK1xcdFxcdFxcdCAgICAgICBmYWxzZSk7XFxuIH1cXG4gXFxuIFNZU0NBTExfREVGSU5FNChsZ2V0eGF0dHIsIGNvbnN0IGNoYXIgX191c2VyICosIHBhdGhuYW1lLFxcbiBcXHRcXHRjb25zdCBjaGFyIF9fdXNlciAqLCBuYW1lLCB2b2lkIF9fdXNlciAqLCB2YWx1ZSwgc2l6ZV90LCBzaXplKVxcbiB7XFxuIFxcdHJldHVybiBwYXRoX2dldHhhdHRyYXQoQVRfRkRDV0QsIHBhdGhuYW1lLCBBVF9TWU1MSU5LX05PRk9MTE9XLCBuYW1lLFxcbi1cXHRcXHRcXHQgICAgICAgdmFsdWUsIHNpemUpO1xcbitcXHRcXHRcXHQgICAgICAgdmFsdWUsIHNpemUsIGZhbHNlKTtcXG4gfVxcbiBcXG4gU1lTQ0FMTF9ERUZJTkU0KGZnZXR4YXR0ciwgaW50LCBmZCwgY29uc3QgY2hhciBfX3VzZXIgKiwgbmFtZSxcXG4gXFx0XFx0dm9pZCBfX3VzZXIgKiwgdmFsdWUsIHNpemVfdCwgc2l6ZSlcXG4ge1xcbi1cXHRyZXR1cm4gcGF0aF9nZXR4YXR0cmF0KGZkLCBOVUxMLCBBVF9FTVBUWV9QQVRILCBuYW1lLCB2YWx1ZSwgc2l6ZSk7XFxuK1xcdHJldHVybiBwYXRoX2dldHhhdHRyYXQoZmQsIE5VTEwsIEFUX0VNUFRZX1BBVEgsIG5hbWUsIHZhbHVlLCBzaXplLFxcbitcXHRcXHRcXHQgICAgICAgZmFsc2UpO1xcbiB9XFxuIFxcbiAvKlxcbkBAIC05ODIsNyArOTg2LDcgQEAgc3NpemVfdCBmaWxlbmFtZV9saXN0eGF0dHIoaW50IGRmZCwgc3RydWN0IGZpbGVuYW1lICpmaWxlbmFtZSxcXG4gXFxuIHN0YXRpYyBzc2l6ZV90IHBhdGhfbGlzdHhhdHRyYXQoaW50IGRmZCwgY29uc3QgY2hhciBfX3VzZXIgKnBhdGhuYW1lLFxcbiBcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgYXRfZmxhZ3MsIGNoYXIgX191c2VyICpsaXN0LFxcbi1cXHRcXHRcXHRcXHRzaXplX3Qgc2l6ZSlcXG4rXFx0XFx0XFx0XFx0c2l6ZV90IHNpemUsIGJvb2wgcmF3KVxcbiB7XFxuIFxcdGludCBsb29rdXBfZmxhZ3M7XFxuIFxcbkBAIC05OTEsNyArOTk1LDcgQEAgc3RhdGljIHNzaXplX3QgcGF0aF9saXN0eGF0dHJhdChpbnQgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqcGF0aG5hbWUsXFxuIFxcbiBcXHRDTEFTUyhmaWxlbmFtZV9tYXliZV9udWxsLCBmaWxlbmFtZSkocGF0aG5hbWUsIGF0X2ZsYWdzKTtcXG4gXFx0aWYgKCFmaWxlbmFtZSkge1xcbi1cXHRcXHRDTEFTUyhmZCwgZikoZGZkKTtcXG4rXFx0XFx0Q0xBU1MoZmRfbWF5YmVfcmF3LCBmKShkZmQsIHJhdyk7XFxuIFxcdFxcdGlmIChmZF9lbXB0eShmKSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FQkFERjtcXG4gXFx0XFx0cmV0dXJuIGZpbGVfbGlzdHhhdHRyKGZkX2ZpbGUoZiksIGxpc3QsIHNpemUpO1xcbkBAIC0xMDA1LDI0ICsxMDA5LDI1IEBAIFNZU0NBTExfREVGSU5FNShsaXN0eGF0dHJhdCwgaW50LCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICosIHBhdGhuYW1lLFxcbiBcXHRcXHR1bnNpZ25lZCBpbnQsIGF0X2ZsYWdzLFxcbiBcXHRcXHRjaGFyIF9fdXNlciAqLCBsaXN0LCBzaXplX3QsIHNpemUpXFxuIHtcXG4tXFx0cmV0dXJuIHBhdGhfbGlzdHhhdHRyYXQoZGZkLCBwYXRobmFtZSwgYXRfZmxhZ3MsIGxpc3QsIHNpemUpO1xcbitcXHRyZXR1cm4gcGF0aF9saXN0eGF0dHJhdChkZmQsIHBhdGhuYW1lLCBhdF9mbGFncywgbGlzdCwgc2l6ZSwgdHJ1ZSk7XFxuIH1cXG4gXFxuIFNZU0NBTExfREVGSU5FMyhsaXN0eGF0dHIsIGNvbnN0IGNoYXIgX191c2VyICosIHBhdGhuYW1lLCBjaGFyIF9fdXNlciAqLCBsaXN0LFxcbiBcXHRcXHRzaXplX3QsIHNpemUpXFxuIHtcXG4tXFx0cmV0dXJuIHBhdGhfbGlzdHhhdHRyYXQoQVRfRkRDV0QsIHBhdGhuYW1lLCAwLCBsaXN0LCBzaXplKTtcXG4rXFx0cmV0dXJuIHBhdGhfbGlzdHhhdHRyYXQoQVRfRkRDV0QsIHBhdGhuYW1lLCAwLCBsaXN0LCBzaXplLCBmYWxzZSk7XFxuIH1cXG4gXFxuIFNZU0NBTExfREVGSU5FMyhsbGlzdHhhdHRyLCBjb25zdCBjaGFyIF9fdXNlciAqLCBwYXRobmFtZSwgY2hhciBfX3VzZXIgKiwgbGlzdCxcXG4gXFx0XFx0c2l6ZV90LCBzaXplKVxcbiB7XFxuLVxcdHJldHVybiBwYXRoX2xpc3R4YXR0cmF0KEFUX0ZEQ1dELCBwYXRobmFtZSwgQVRfU1lNTElOS19OT0ZPTExPVywgbGlzdCwgc2l6ZSk7XFxuK1xcdHJldHVybiBwYXRoX2xpc3R4YXR0cmF0KEFUX0ZEQ1dELCBwYXRobmFtZSwgQVRfU1lNTElOS19OT0ZPTExPVywgbGlzdCxcXG4rXFx0XFx0XFx0XFx0c2l6ZSwgZmFsc2UpO1xcbiB9XFxuIFxcbiBTWVNDQUxMX0RFRklORTMoZmxpc3R4YXR0ciwgaW50LCBmZCwgY2hhciBfX3VzZXIgKiwgbGlzdCwgc2l6ZV90LCBzaXplKVxcbiB7XFxuLVxcdHJldHVybiBwYXRoX2xpc3R4YXR0cmF0KGZkLCBOVUxMLCBBVF9FTVBUWV9QQVRILCBsaXN0LCBzaXplKTtcXG4rXFx0cmV0dXJuIHBhdGhfbGlzdHhhdHRyYXQoZmQsIE5VTEwsIEFUX0VNUFRZX1BBVEgsIGxpc3QsIHNpemUsIGZhbHNlKTtcXG4gfVxcbiBcXG4gLypcXG5AQCAtMTA3Myw3ICsxMDc4LDggQEAgc3RhdGljIGludCBmaWxlbmFtZV9yZW1vdmV4YXR0cihpbnQgZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKmZpbGVuYW1lLFxcbiB9XFxuIFxcbiBzdGF0aWMgaW50IHBhdGhfcmVtb3ZleGF0dHJhdChpbnQgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqcGF0aG5hbWUsXFxuLVxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGludCBhdF9mbGFncywgY29uc3QgY2hhciBfX3VzZXIgKm5hbWUpXFxuK1xcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGludCBhdF9mbGFncywgY29uc3QgY2hhciBfX3VzZXIgKm5hbWUsXFxuK1xcdFxcdFxcdCAgICAgIGJvb2wgcmF3KVxcbiB7XFxuIFxcdHN0cnVjdCB4YXR0cl9uYW1lIGtuYW1lO1xcbiBcXHR1bnNpZ25lZCBpbnQgbG9va3VwX2ZsYWdzO1xcbkBAIC0xMDg4LDcgKzEwOTQsNyBAQCBzdGF0aWMgaW50IHBhdGhfcmVtb3ZleGF0dHJhdChpbnQgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqcGF0aG5hbWUsXFxuIFxcbiBcXHRDTEFTUyhmaWxlbmFtZV9tYXliZV9udWxsLCBmaWxlbmFtZSkocGF0aG5hbWUsIGF0X2ZsYWdzKTtcXG4gXFx0aWYgKCFmaWxlbmFtZSkge1xcbi1cXHRcXHRDTEFTUyhmZCwgZikoZGZkKTtcXG4rXFx0XFx0Q0xBU1MoZmRfbWF5YmVfcmF3LCBmKShkZmQsIHJhdyk7XFxuIFxcdFxcdGlmIChmZF9lbXB0eShmKSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FQkFERjtcXG4gXFx0XFx0cmV0dXJuIGZpbGVfcmVtb3ZleGF0dHIoZmRfZmlsZShmKSwgXFx1MDAyNmtuYW1lKTtcXG5AQCAtMTEwMCwyNCArMTEwNiwyNSBAQCBzdGF0aWMgaW50IHBhdGhfcmVtb3ZleGF0dHJhdChpbnQgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqcGF0aG5hbWUsXFxuIFNZU0NBTExfREVGSU5FNChyZW1vdmV4YXR0cmF0LCBpbnQsIGRmZCwgY29uc3QgY2hhciBfX3VzZXIgKiwgcGF0aG5hbWUsXFxuIFxcdFxcdHVuc2lnbmVkIGludCwgYXRfZmxhZ3MsIGNvbnN0IGNoYXIgX191c2VyICosIG5hbWUpXFxuIHtcXG4tXFx0cmV0dXJuIHBhdGhfcmVtb3ZleGF0dHJhdChkZmQsIHBhdGhuYW1lLCBhdF9mbGFncywgbmFtZSk7XFxuK1xcdHJldHVybiBwYXRoX3JlbW92ZXhhdHRyYXQoZGZkLCBwYXRobmFtZSwgYXRfZmxhZ3MsIG5hbWUsIHRydWUpO1xcbiB9XFxuIFxcbiBTWVNDQUxMX0RFRklORTIocmVtb3ZleGF0dHIsIGNvbnN0IGNoYXIgX191c2VyICosIHBhdGhuYW1lLFxcbiBcXHRcXHRjb25zdCBjaGFyIF9fdXNlciAqLCBuYW1lKVxcbiB7XFxuLVxcdHJldHVybiBwYXRoX3JlbW92ZXhhdHRyYXQoQVRfRkRDV0QsIHBhdGhuYW1lLCAwLCBuYW1lKTtcXG4rXFx0cmV0dXJuIHBhdGhfcmVtb3ZleGF0dHJhdChBVF9GRENXRCwgcGF0aG5hbWUsIDAsIG5hbWUsIGZhbHNlKTtcXG4gfVxcbiBcXG4gU1lTQ0FMTF9ERUZJTkUyKGxyZW1vdmV4YXR0ciwgY29uc3QgY2hhciBfX3VzZXIgKiwgcGF0aG5hbWUsXFxuIFxcdFxcdGNvbnN0IGNoYXIgX191c2VyICosIG5hbWUpXFxuIHtcXG4tXFx0cmV0dXJuIHBhdGhfcmVtb3ZleGF0dHJhdChBVF9GRENXRCwgcGF0aG5hbWUsIEFUX1NZTUxJTktfTk9GT0xMT1csIG5hbWUpO1xcbitcXHRyZXR1cm4gcGF0aF9yZW1vdmV4YXR0cmF0KEFUX0ZEQ1dELCBwYXRobmFtZSwgQVRfU1lNTElOS19OT0ZPTExPVywgbmFtZSxcXG4rXFx0XFx0XFx0XFx0ICBmYWxzZSk7XFxuIH1cXG4gXFxuIFNZU0NBTExfREVGSU5FMihmcmVtb3ZleGF0dHIsIGludCwgZmQsIGNvbnN0IGNoYXIgX191c2VyICosIG5hbWUpXFxuIHtcXG4tXFx0cmV0dXJuIHBhdGhfcmVtb3ZleGF0dHJhdChmZCwgTlVMTCwgQVRfRU1QVFlfUEFUSCwgbmFtZSk7XFxuK1xcdHJldHVybiBwYXRoX3JlbW92ZXhhdHRyYXQoZmQsIE5VTEwsIEFUX0VNUFRZX1BBVEgsIG5hbWUsIGZhbHNlKTtcXG4gfVxcbiBcXG4gaW50IHhhdHRyX2xpc3Rfb25lKGNoYXIgKipidWZmZXIsIHNzaXplX3QgKnJlbWFpbmluZ19zaXplLCBjb25zdCBjaGFyICpuYW1lKVxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZpbGUuaCBiL2luY2x1ZGUvbGludXgvZmlsZS5oXFxuaW5kZXggMjc0ODRiNDQ0ZDMxNTUuLjJhMWRjNzM4OTgxZTAzIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvZmlsZS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9maWxlLmhcXG5AQCAtODIsNiArODIsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZmRwdXRfcG9zKHN0cnVjdCBmZCBmKVxcbiBcXG4gREVGSU5FX0NMQVNTKGZkLCBzdHJ1Y3QgZmQsIGZkcHV0KF9UKSwgZmRnZXQoZmQpLCBpbnQgZmQpXFxuIERFRklORV9DTEFTUyhmZF9yYXcsIHN0cnVjdCBmZCwgZmRwdXQoX1QpLCBmZGdldF9yYXcoZmQpLCBpbnQgZmQpXFxuK0RFRklORV9DTEFTUyhmZF9tYXliZV9yYXcsIHN0cnVjdCBmZCwgZmRwdXQoX1QpLFxcbitcXHQgICAgIHJhdyA/IGZkZ2V0X3JhdyhmZCkgOiBmZGdldChmZCksIGludCBmZCwgYm9vbCByYXcpXFxuIERFRklORV9DTEFTUyhmZF9wb3MsIHN0cnVjdCBmZCwgZmRwdXRfcG9zKF9UKSwgZmRnZXRfcG9zKGZkKSwgaW50IGZkKVxcbiBcXG4gZXh0ZXJuIGludCBmX2R1cGZkKHVuc2lnbmVkIGludCBmcm9tLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgZmxhZ3MpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxNjo0OTowNi41MDc3MTE0NzdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoyMDkzNzU5NjUyNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVE1QRlNfWEFUVFJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwYXRoX3NldHhhdHRyYXRcIixcbiAgICBcInBhdGhfZ2V0eGF0dHJhdFwiLFxuICAgIFwicGF0aF9saXN0eGF0dHJhdFwiLFxuICAgIFwicGF0aF9yZW1vdmV4YXR0cmF0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGAqeGF0dHJhdGAgc3lzY2FsbHMgKGUuZy4sIGBzZXR4YXR0cmF0YCwgYGdldHhhdHRyYXRgLCBgbGlzdHhhdHRyYXRgLCBgcmVtb3ZleGF0dHJhdGApIHRvIGFsbG93IG9wZXJhdGluZyBvbiBgT19QQVRIYCBmaWxlIGRlc2NyaXB0b3JzIHdoZW4gYEFUX0VNUFRZX1BBVEhgIGlzIHVzZWQuIFRoaXMgaXMgYWNoaWV2ZWQgYnkgaW50cm9kdWNpbmcgYSBuZXcgYGZkX21heWJlX3Jhd2AgY2xhc3MgdGhhdCB1c2VzIGBmZGdldF9yYXdgIGluc3RlYWQgb2YgYGZkZ2V0YCB3aGVuIHRoZSBgcmF3YCBwYXJhbWV0ZXIgaXMgdHJ1ZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWx0ZXJzIHRoZSBiZWhhdmlvciBvZiB0aGVzZSBzeXNjYWxscywgbWFraW5nIHRoZW0gY29uc2lzdGVudCB3aXRoIG90aGVyIGAqYXRgIHN5c2NhbGxzIGxpa2UgYGZjaG93bmF0YCBhbmQgYGZzdGF0YXRgLiBJdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gcmVncmVzc2lvbnMgb3IgdW5leHBlY3RlZCBiZWhhdmlvcnMgd2hlbiB1c2luZyBgT19QQVRIYCBmaWxlIGRlc2NyaXB0b3JzIHdpdGggZXh0ZW5kZWQgYXR0cmlidXRlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiMDdjMTJkOWRmM2FlZjI5N2ZjZWRmZjExNmQ3YjgyYTEzZTg0ZmMzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMjMgMTY6NDk6MDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy94YXR0ci5jIGIvZnMveGF0dHIuY1xuaW5kZXggZDU4OTc5MTE1MjAwNzUuLjFkYjY1OTZhMmVjMTEwIDEwMDY0NFxuLS0tIGEvZnMveGF0dHIuY1xuKysrIGIvZnMveGF0dHIuY1xuQEAgLTcwMCw3ICs3MDAsOCBAQCBpbnQgZmlsZW5hbWVfc2V0eGF0dHIoaW50IGRmZCwgc3RydWN0IGZpbGVuYW1lICpmaWxlbmFtZSxcbiBcbiBzdGF0aWMgaW50IHBhdGhfc2V0eGF0dHJhdChpbnQgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqcGF0aG5hbWUsXG4gXHRcdFx0ICAgdW5zaWduZWQgaW50IGF0X2ZsYWdzLCBjb25zdCBjaGFyIF9fdXNlciAqbmFtZSxcbi1cdFx0XHQgICBjb25zdCB2b2lkIF9fdXNlciAqdmFsdWUsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpXG4rXHRcdFx0ICAgY29uc3Qgdm9pZCBfX3VzZXIgKnZhbHVlLCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzLFxuK1x0XHRcdCAgIGJvb2wgcmF3KVxuIHtcbiBcdHN0cnVjdCB4YXR0cl9uYW1lIGtuYW1lO1xuIFx0c3RydWN0IGtlcm5lbF94YXR0cl9jdHggY3R4ID0ge1xuQEAgLTcyNSw3ICs3MjYsNyBAQCBzdGF0aWMgaW50IHBhdGhfc2V0eGF0dHJhdChpbnQgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqcGF0aG5hbWUsXG4gXG4gXHRDTEFTUyhmaWxlbmFtZV9tYXliZV9udWxsLCBmaWxlbmFtZSkocGF0aG5hbWUsIGF0X2ZsYWdzKTtcbiBcdGlmICghZmlsZW5hbWUgXHUwMDI2XHUwMDI2IGRmZCBcdTAwM2U9IDApIHtcbi1cdFx0Q0xBU1MoZmQsIGYpKGRmZCk7XG4rXHRcdENMQVNTKGZkX21heWJlX3JhdywgZikoZGZkLCByYXcpO1xuIFx0XHRpZiAoZmRfZW1wdHkoZikpXG4gXHRcdFx0ZXJyb3IgPSAtRUJBREY7XG4gXHRcdGVsc2VcbkBAIC03NTgsMTQgKzc1OSwxNSBAQCBTWVNDQUxMX0RFRklORTYoc2V0eGF0dHJhdCwgaW50LCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICosIHBhdGhuYW1lLCB1bnNpZ25lZCBpblxuIFxuIFx0cmV0dXJuIHBhdGhfc2V0eGF0dHJhdChkZmQsIHBhdGhuYW1lLCBhdF9mbGFncywgbmFtZSxcbiBcdFx0XHQgICAgICAgdTY0X3RvX3VzZXJfcHRyKGFyZ3MudmFsdWUpLCBhcmdzLnNpemUsXG4tXHRcdFx0ICAgICAgIGFyZ3MuZmxhZ3MpO1xuK1x0XHRcdCAgICAgICBhcmdzLmZsYWdzLCB0cnVlKTtcbiB9XG4gXG4gU1lTQ0FMTF9ERUZJTkU1KHNldHhhdHRyLCBjb25zdCBjaGFyIF9fdXNlciAqLCBwYXRobmFtZSxcbiBcdFx0Y29uc3QgY2hhciBfX3VzZXIgKiwgbmFtZSwgY29uc3Qgdm9pZCBfX3VzZXIgKiwgdmFsdWUsXG4gXHRcdHNpemVfdCwgc2l6ZSwgaW50LCBmbGFncylcbiB7XG4tXHRyZXR1cm4gcGF0aF9zZXR4YXR0cmF0KEFUX0ZEQ1dELCBwYXRobmFtZSwgMCwgbmFtZSwgdmFsdWUsIHNpemUsIGZsYWdzKTtcbitcdHJldHVybiBwYXRoX3NldHhhdHRyYXQoQVRfRkRDV0QsIHBhdGhuYW1lLCAwLCBuYW1lLCB2YWx1ZSwgc2l6ZSwgZmxhZ3MsXG4rXHRcdFx0ICAgICAgIGZhbHNlKTtcbiB9XG4gXG4gU1lTQ0FMTF9ERUZJTkU1KGxzZXR4YXR0ciwgY29uc3QgY2hhciBfX3VzZXIgKiwgcGF0aG5hbWUsXG5AQCAtNzczLDE0ICs3NzUsMTQgQEAgU1lTQ0FMTF9ERUZJTkU1KGxzZXR4YXR0ciwgY29uc3QgY2hhciBfX3VzZXIgKiwgcGF0aG5hbWUsXG4gXHRcdHNpemVfdCwgc2l6ZSwgaW50LCBmbGFncylcbiB7XG4gXHRyZXR1cm4gcGF0aF9zZXR4YXR0cmF0KEFUX0ZEQ1dELCBwYXRobmFtZSwgQVRfU1lNTElOS19OT0ZPTExPVywgbmFtZSxcbi1cdFx0XHQgICAgICAgdmFsdWUsIHNpemUsIGZsYWdzKTtcbitcdFx0XHQgICAgICAgdmFsdWUsIHNpemUsIGZsYWdzLCBmYWxzZSk7XG4gfVxuIFxuIFNZU0NBTExfREVGSU5FNShmc2V0eGF0dHIsIGludCwgZmQsIGNvbnN0IGNoYXIgX191c2VyICosIG5hbWUsXG4gXHRcdGNvbnN0IHZvaWQgX191c2VyICosdmFsdWUsIHNpemVfdCwgc2l6ZSwgaW50LCBmbGFncylcbiB7XG4gXHRyZXR1cm4gcGF0aF9zZXR4YXR0cmF0KGZkLCBOVUxMLCBBVF9FTVBUWV9QQVRILCBuYW1lLFxuLVx0XHRcdCAgICAgICB2YWx1ZSwgc2l6ZSwgZmxhZ3MpO1xuK1x0XHRcdCAgICAgICB2YWx1ZSwgc2l6ZSwgZmxhZ3MsIGZhbHNlKTtcbiB9XG4gXG4gLypcbkBAIC04NDUsNyArODQ3LDcgQEAgc3NpemVfdCBmaWxlbmFtZV9nZXR4YXR0cihpbnQgZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKmZpbGVuYW1lLFxuIFxuIHN0YXRpYyBzc2l6ZV90IHBhdGhfZ2V0eGF0dHJhdChpbnQgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqcGF0aG5hbWUsXG4gXHRcdFx0ICAgICAgIHVuc2lnbmVkIGludCBhdF9mbGFncywgY29uc3QgY2hhciBfX3VzZXIgKm5hbWUsXG4tXHRcdFx0ICAgICAgIHZvaWQgX191c2VyICp2YWx1ZSwgc2l6ZV90IHNpemUpXG4rXHRcdFx0ICAgICAgIHZvaWQgX191c2VyICp2YWx1ZSwgc2l6ZV90IHNpemUsIGJvb2wgcmF3KVxuIHtcbiBcdHN0cnVjdCB4YXR0cl9uYW1lIGtuYW1lO1xuIFx0c3RydWN0IGtlcm5lbF94YXR0cl9jdHggY3R4ID0ge1xuQEAgLTg2NSw3ICs4NjcsNyBAQCBzdGF0aWMgc3NpemVfdCBwYXRoX2dldHhhdHRyYXQoaW50IGRmZCwgY29uc3QgY2hhciBfX3VzZXIgKnBhdGhuYW1lLFxuIFxuIFx0Q0xBU1MoZmlsZW5hbWVfbWF5YmVfbnVsbCwgZmlsZW5hbWUpKHBhdGhuYW1lLCBhdF9mbGFncyk7XG4gXHRpZiAoIWZpbGVuYW1lIFx1MDAyNlx1MDAyNiBkZmQgXHUwMDNlPSAwKSB7XG4tXHRcdENMQVNTKGZkLCBmKShkZmQpO1xuK1x0XHRDTEFTUyhmZF9tYXliZV9yYXcsIGYpKGRmZCwgcmF3KTtcbiBcdFx0aWYgKGZkX2VtcHR5KGYpKVxuIFx0XHRcdHJldHVybiAtRUJBREY7XG4gXHRcdHJldHVybiBmaWxlX2dldHhhdHRyKGZkX2ZpbGUoZiksIFx1MDAyNmN0eCk7XG5AQCAtODk5LDI2ICs5MDEsMjggQEAgU1lTQ0FMTF9ERUZJTkU2KGdldHhhdHRyYXQsIGludCwgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqLCBwYXRobmFtZSwgdW5zaWduZWQgaW5cbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRyZXR1cm4gcGF0aF9nZXR4YXR0cmF0KGRmZCwgcGF0aG5hbWUsIGF0X2ZsYWdzLCBuYW1lLFxuLVx0XHRcdCAgICAgICB1NjRfdG9fdXNlcl9wdHIoYXJncy52YWx1ZSksIGFyZ3Muc2l6ZSk7XG4rXHRcdFx0ICAgICAgIHU2NF90b191c2VyX3B0cihhcmdzLnZhbHVlKSwgYXJncy5zaXplLCB0cnVlKTtcbiB9XG4gXG4gU1lTQ0FMTF9ERUZJTkU0KGdldHhhdHRyLCBjb25zdCBjaGFyIF9fdXNlciAqLCBwYXRobmFtZSxcbiBcdFx0Y29uc3QgY2hhciBfX3VzZXIgKiwgbmFtZSwgdm9pZCBfX3VzZXIgKiwgdmFsdWUsIHNpemVfdCwgc2l6ZSlcbiB7XG4tXHRyZXR1cm4gcGF0aF9nZXR4YXR0cmF0KEFUX0ZEQ1dELCBwYXRobmFtZSwgMCwgbmFtZSwgdmFsdWUsIHNpemUpO1xuK1x0cmV0dXJuIHBhdGhfZ2V0eGF0dHJhdChBVF9GRENXRCwgcGF0aG5hbWUsIDAsIG5hbWUsIHZhbHVlLCBzaXplLFxuK1x0XHRcdCAgICAgICBmYWxzZSk7XG4gfVxuIFxuIFNZU0NBTExfREVGSU5FNChsZ2V0eGF0dHIsIGNvbnN0IGNoYXIgX191c2VyICosIHBhdGhuYW1lLFxuIFx0XHRjb25zdCBjaGFyIF9fdXNlciAqLCBuYW1lLCB2b2lkIF9fdXNlciAqLCB2YWx1ZSwgc2l6ZV90LCBzaXplKVxuIHtcbiBcdHJldHVybiBwYXRoX2dldHhhdHRyYXQoQVRfRkRDV0QsIHBhdGhuYW1lLCBBVF9TWU1MSU5LX05PRk9MTE9XLCBuYW1lLFxuLVx0XHRcdCAgICAgICB2YWx1ZSwgc2l6ZSk7XG4rXHRcdFx0ICAgICAgIHZhbHVlLCBzaXplLCBmYWxzZSk7XG4gfVxuIFxuIFNZU0NBTExfREVGSU5FNChmZ2V0eGF0dHIsIGludCwgZmQsIGNvbnN0IGNoYXIgX191c2VyICosIG5hbWUsXG4gXHRcdHZvaWQgX191c2VyICosIHZhbHVlLCBzaXplX3QsIHNpemUpXG4ge1xuLVx0cmV0dXJuIHBhdGhfZ2V0eGF0dHJhdChmZCwgTlVMTCwgQVRfRU1QVFlfUEFUSCwgbmFtZSwgdmFsdWUsIHNpemUpO1xuK1x0cmV0dXJuIHBhdGhfZ2V0eGF0dHJhdChmZCwgTlVMTCwgQVRfRU1QVFlfUEFUSCwgbmFtZSwgdmFsdWUsIHNpemUsXG4rXHRcdFx0ICAgICAgIGZhbHNlKTtcbiB9XG4gXG4gLypcbkBAIC05ODIsNyArOTg2LDcgQEAgc3NpemVfdCBmaWxlbmFtZV9saXN0eGF0dHIoaW50IGRmZCwgc3RydWN0IGZpbGVuYW1lICpmaWxlbmFtZSxcbiBcbiBzdGF0aWMgc3NpemVfdCBwYXRoX2xpc3R4YXR0cmF0KGludCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICpwYXRobmFtZSxcbiBcdFx0XHRcdHVuc2lnbmVkIGludCBhdF9mbGFncywgY2hhciBfX3VzZXIgKmxpc3QsXG4tXHRcdFx0XHRzaXplX3Qgc2l6ZSlcbitcdFx0XHRcdHNpemVfdCBzaXplLCBib29sIHJhdylcbiB7XG4gXHRpbnQgbG9va3VwX2ZsYWdzO1xuIFxuQEAgLTk5MSw3ICs5OTUsNyBAQCBzdGF0aWMgc3NpemVfdCBwYXRoX2xpc3R4YXR0cmF0KGludCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICpwYXRobmFtZSxcbiBcbiBcdENMQVNTKGZpbGVuYW1lX21heWJlX251bGwsIGZpbGVuYW1lKShwYXRobmFtZSwgYXRfZmxhZ3MpO1xuIFx0aWYgKCFmaWxlbmFtZSkge1xuLVx0XHRDTEFTUyhmZCwgZikoZGZkKTtcbitcdFx0Q0xBU1MoZmRfbWF5YmVfcmF3LCBmKShkZmQsIHJhdyk7XG4gXHRcdGlmIChmZF9lbXB0eShmKSlcbiBcdFx0XHRyZXR1cm4gLUVCQURGO1xuIFx0XHRyZXR1cm4gZmlsZV9saXN0eGF0dHIoZmRfZmlsZShmKSwgbGlzdCwgc2l6ZSk7XG5AQCAtMTAwNSwyNCArMTAwOSwyNSBAQCBTWVNDQUxMX0RFRklORTUobGlzdHhhdHRyYXQsIGludCwgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqLCBwYXRobmFtZSxcbiBcdFx0dW5zaWduZWQgaW50LCBhdF9mbGFncyxcbiBcdFx0Y2hhciBfX3VzZXIgKiwgbGlzdCwgc2l6ZV90LCBzaXplKVxuIHtcbi1cdHJldHVybiBwYXRoX2xpc3R4YXR0cmF0KGRmZCwgcGF0aG5hbWUsIGF0X2ZsYWdzLCBsaXN0LCBzaXplKTtcbitcdHJldHVybiBwYXRoX2xpc3R4YXR0cmF0KGRmZCwgcGF0aG5hbWUsIGF0X2ZsYWdzLCBsaXN0LCBzaXplLCB0cnVlKTtcbiB9XG4gXG4gU1lTQ0FMTF9ERUZJTkUzKGxpc3R4YXR0ciwgY29uc3QgY2hhciBfX3VzZXIgKiwgcGF0aG5hbWUsIGNoYXIgX191c2VyICosIGxpc3QsXG4gXHRcdHNpemVfdCwgc2l6ZSlcbiB7XG4tXHRyZXR1cm4gcGF0aF9saXN0eGF0dHJhdChBVF9GRENXRCwgcGF0aG5hbWUsIDAsIGxpc3QsIHNpemUpO1xuK1x0cmV0dXJuIHBhdGhfbGlzdHhhdHRyYXQoQVRfRkRDV0QsIHBhdGhuYW1lLCAwLCBsaXN0LCBzaXplLCBmYWxzZSk7XG4gfVxuIFxuIFNZU0NBTExfREVGSU5FMyhsbGlzdHhhdHRyLCBjb25zdCBjaGFyIF9fdXNlciAqLCBwYXRobmFtZSwgY2hhciBfX3VzZXIgKiwgbGlzdCxcbiBcdFx0c2l6ZV90LCBzaXplKVxuIHtcbi1cdHJldHVybiBwYXRoX2xpc3R4YXR0cmF0KEFUX0ZEQ1dELCBwYXRobmFtZSwgQVRfU1lNTElOS19OT0ZPTExPVywgbGlzdCwgc2l6ZSk7XG4rXHRyZXR1cm4gcGF0aF9saXN0eGF0dHJhdChBVF9GRENXRCwgcGF0aG5hbWUsIEFUX1NZTUxJTktfTk9GT0xMT1csIGxpc3QsXG4rXHRcdFx0XHRzaXplLCBmYWxzZSk7XG4gfVxuIFxuIFNZU0NBTExfREVGSU5FMyhmbGlzdHhhdHRyLCBpbnQsIGZkLCBjaGFyIF9fdXNlciAqLCBsaXN0LCBzaXplX3QsIHNpemUpXG4ge1xuLVx0cmV0dXJuIHBhdGhfbGlzdHhhdHRyYXQoZmQsIE5VTEwsIEFUX0VNUFRZX1BBVEgsIGxpc3QsIHNpemUpO1xuK1x0cmV0dXJuIHBhdGhfbGlzdHhhdHRyYXQoZmQsIE5VTEwsIEFUX0VNUFRZX1BBVEgsIGxpc3QsIHNpemUsIGZhbHNlKTtcbiB9XG4gXG4gLypcbkBAIC0xMDczLDcgKzEwNzgsOCBAQCBzdGF0aWMgaW50IGZpbGVuYW1lX3JlbW92ZXhhdHRyKGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqZmlsZW5hbWUsXG4gfVxuIFxuIHN0YXRpYyBpbnQgcGF0aF9yZW1vdmV4YXR0cmF0KGludCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICpwYXRobmFtZSxcbi1cdFx0XHQgICAgICB1bnNpZ25lZCBpbnQgYXRfZmxhZ3MsIGNvbnN0IGNoYXIgX191c2VyICpuYW1lKVxuK1x0XHRcdCAgICAgIHVuc2lnbmVkIGludCBhdF9mbGFncywgY29uc3QgY2hhciBfX3VzZXIgKm5hbWUsXG4rXHRcdFx0ICAgICAgYm9vbCByYXcpXG4ge1xuIFx0c3RydWN0IHhhdHRyX25hbWUga25hbWU7XG4gXHR1bnNpZ25lZCBpbnQgbG9va3VwX2ZsYWdzO1xuQEAgLTEwODgsNyArMTA5NCw3IEBAIHN0YXRpYyBpbnQgcGF0aF9yZW1vdmV4YXR0cmF0KGludCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICpwYXRobmFtZSxcbiBcbiBcdENMQVNTKGZpbGVuYW1lX21heWJlX251bGwsIGZpbGVuYW1lKShwYXRobmFtZSwgYXRfZmxhZ3MpO1xuIFx0aWYgKCFmaWxlbmFtZSkge1xuLVx0XHRDTEFTUyhmZCwgZikoZGZkKTtcbitcdFx0Q0xBU1MoZmRfbWF5YmVfcmF3LCBmKShkZmQsIHJhdyk7XG4gXHRcdGlmIChmZF9lbXB0eShmKSlcbiBcdFx0XHRyZXR1cm4gLUVCQURGO1xuIFx0XHRyZXR1cm4gZmlsZV9yZW1vdmV4YXR0cihmZF9maWxlKGYpLCBcdTAwMjZrbmFtZSk7XG5AQCAtMTEwMCwyNCArMTEwNiwyNSBAQCBzdGF0aWMgaW50IHBhdGhfcmVtb3ZleGF0dHJhdChpbnQgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqcGF0aG5hbWUsXG4gU1lTQ0FMTF9ERUZJTkU0KHJlbW92ZXhhdHRyYXQsIGludCwgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqLCBwYXRobmFtZSxcbiBcdFx0dW5zaWduZWQgaW50LCBhdF9mbGFncywgY29uc3QgY2hhciBfX3VzZXIgKiwgbmFtZSlcbiB7XG4tXHRyZXR1cm4gcGF0aF9yZW1vdmV4YXR0cmF0KGRmZCwgcGF0aG5hbWUsIGF0X2ZsYWdzLCBuYW1lKTtcbitcdHJldHVybiBwYXRoX3JlbW92ZXhhdHRyYXQoZGZkLCBwYXRobmFtZSwgYXRfZmxhZ3MsIG5hbWUsIHRydWUpO1xuIH1cbiBcbiBTWVNDQUxMX0RFRklORTIocmVtb3ZleGF0dHIsIGNvbnN0IGNoYXIgX191c2VyICosIHBhdGhuYW1lLFxuIFx0XHRjb25zdCBjaGFyIF9fdXNlciAqLCBuYW1lKVxuIHtcbi1cdHJldHVybiBwYXRoX3JlbW92ZXhhdHRyYXQoQVRfRkRDV0QsIHBhdGhuYW1lLCAwLCBuYW1lKTtcbitcdHJldHVybiBwYXRoX3JlbW92ZXhhdHRyYXQoQVRfRkRDV0QsIHBhdGhuYW1lLCAwLCBuYW1lLCBmYWxzZSk7XG4gfVxuIFxuIFNZU0NBTExfREVGSU5FMihscmVtb3ZleGF0dHIsIGNvbnN0IGNoYXIgX191c2VyICosIHBhdGhuYW1lLFxuIFx0XHRjb25zdCBjaGFyIF9fdXNlciAqLCBuYW1lKVxuIHtcbi1cdHJldHVybiBwYXRoX3JlbW92ZXhhdHRyYXQoQVRfRkRDV0QsIHBhdGhuYW1lLCBBVF9TWU1MSU5LX05PRk9MTE9XLCBuYW1lKTtcbitcdHJldHVybiBwYXRoX3JlbW92ZXhhdHRyYXQoQVRfRkRDV0QsIHBhdGhuYW1lLCBBVF9TWU1MSU5LX05PRk9MTE9XLCBuYW1lLFxuK1x0XHRcdFx0ICBmYWxzZSk7XG4gfVxuIFxuIFNZU0NBTExfREVGSU5FMihmcmVtb3ZleGF0dHIsIGludCwgZmQsIGNvbnN0IGNoYXIgX191c2VyICosIG5hbWUpXG4ge1xuLVx0cmV0dXJuIHBhdGhfcmVtb3ZleGF0dHJhdChmZCwgTlVMTCwgQVRfRU1QVFlfUEFUSCwgbmFtZSk7XG4rXHRyZXR1cm4gcGF0aF9yZW1vdmV4YXR0cmF0KGZkLCBOVUxMLCBBVF9FTVBUWV9QQVRILCBuYW1lLCBmYWxzZSk7XG4gfVxuIFxuIGludCB4YXR0cl9saXN0X29uZShjaGFyICoqYnVmZmVyLCBzc2l6ZV90ICpyZW1haW5pbmdfc2l6ZSwgY29uc3QgY2hhciAqbmFtZSlcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZpbGUuaCBiL2luY2x1ZGUvbGludXgvZmlsZS5oXG5pbmRleCAyNzQ4NGI0NDRkMzE1NS4uMmExZGM3Mzg5ODFlMDMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZpbGUuaFxuKysrIGIvaW5jbHVkZS9saW51eC9maWxlLmhcbkBAIC04Miw2ICs4Miw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBmZHB1dF9wb3Moc3RydWN0IGZkIGYpXG4gXG4gREVGSU5FX0NMQVNTKGZkLCBzdHJ1Y3QgZmQsIGZkcHV0KF9UKSwgZmRnZXQoZmQpLCBpbnQgZmQpXG4gREVGSU5FX0NMQVNTKGZkX3Jhdywgc3RydWN0IGZkLCBmZHB1dChfVCksIGZkZ2V0X3JhdyhmZCksIGludCBmZClcbitERUZJTkVfQ0xBU1MoZmRfbWF5YmVfcmF3LCBzdHJ1Y3QgZmQsIGZkcHV0KF9UKSxcbitcdCAgICAgcmF3ID8gZmRnZXRfcmF3KGZkKSA6IGZkZ2V0KGZkKSwgaW50IGZkLCBib29sIHJhdylcbiBERUZJTkVfQ0xBU1MoZmRfcG9zLCBzdHJ1Y3QgZmQsIGZkcHV0X3BvcyhfVCksIGZkZ2V0X3BvcyhmZCksIGludCBmZClcbiBcbiBleHRlcm4gaW50IGZfZHVwZmQodW5zaWduZWQgaW50IGZyb20sIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBmbGFncyk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxNjo0OTowNi41MDc3MTI4MjdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODA5ODc2ODA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgeGF0dHIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgZnMveGF0dHIuY2AgYW5kIGBpbmNsdWRlL2xpbnV4L2ZpbGUuaGAuIEl0IHNlZW1zIHRoZXkncmUgYWRkaW5nIGEgYGJvb2wgcmF3YCBhcmd1bWVudCB0byB0aGUgYHBhdGhfc2V0eGF0dHJhdGAsIGBwYXRoX2dldHhhdHRyYXRgLCBgcGF0aF9saXN0eGF0dHJhdGAsIGFuZCBgcGF0aF9yZW1vdmV4YXR0cmF0YCBmdW5jdGlvbnMuIFJpZ2h0LCBhbmQgdGhpcyBpcyBhYm91dCBkaWZmZXJlbnRpYXRpbmcgYmV0d2VlbiB0aGUgbmV3ZXIgYCphdGAgc3lzY2FsbHMgYW5kIHRoZSBvbGRlciBvbmVzLCBzbyB0aGUgYHJhd2AgZmxhZyBnZXRzIHBhc3NlZCBhcyBgdHJ1ZWAgZm9yIHRoZSBmb3JtZXIgKGUuZy4sIGBzZXR4YXR0cmF0YCkgYW5kIGBmYWxzZWAgZm9yIHRoZSBvbGRlciBvbmVzIChlLmcuLCBgc2V0eGF0dHJgLCBgbHNldHhhdHRyYCwgYGZzZXR4YXR0cmApLiBXYWl0IGEgc2Vjb25kLCB0aGUgb2xkZXIgc3lzY2FsbCBgZnNldHhhdHRyYCBhbHNvIHBhc3NlcyBgZmFsc2VgIGZvciBgcmF3YC5cblxuTm93LCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2sgYGluY2x1ZGUvbGludXgvZmlsZS5oYC4gQWgsIGhlcmUgaXQgaXM6IGBERUZJTkVfQ0xBU1MoZmRfbWF5YmVfcmF3LCBzdHJ1Y3QgZmQsIGZkcHV0KF9UKSwgcmF3ID8gZmRnZXRfcmF3KGZkKSA6IGZkZ2V0KGZkKSwgaW50IGZkLCBib29sIHJhdylgLiBPa2F5LCBzbyBpdCB1c2VzIGBmZGdldF9yYXcoZmQpYCBpZiBgcmF3YCBpcyB0cnVlIGFuZCBgZmRnZXQoZmQpYCBvdGhlcndpc2UuIFNvLCB0aGlzIG1lYW5zIHRoYXQgYGZkZ2V0X3Jhd2AgYWxsb3dzIHRoZSBnZXR0aW5nIG9mIHRoZSBmaWxlIGRlc2NyaXB0b3IgZXZlbiBpZiBpdCBpcyBhbiBgT19QQVRIYCBmaWxlIGRlc2NyaXB0b3IsIHdoaWxlIGBmZGdldGAgd291bGQgcG90ZW50aWFsbHkgZmFpbC4gU28sIHRoaXMgY2hhbmdlIGlzIGFsbG93aW5nIGFjY2VzcyB0byB0aGVzZSBmaWxlIGRlc2NyaXB0b3JzIHdoZW4gdGhleSBvdGhlcndpc2Ugd291bGRuJ3QgYmUgYWxsb3dlZD8gSXQncyBwcm9iYWJseSByZWxhdGVkIHRvIGhhbmRsaW5nIGBPX1BBVEhgIGRlc2NyaXB0b3JzIHByb3Blcmx5LiBMZXQgbWUgZG91YmxlLWNoZWNrIHRoYXQgYnkgbG9va2luZyBhdCBob3cgYGZkZ2V0X3Jhd2Agd29ya3MuIEknbGwgdXNlIGBncmVwcGVyYCB0byBzZWUgd2hlcmUgYGZkZ2V0X3Jhd2AgaXMgZGVmaW5lZCBhbmQgd2hhdCBpdCBkb2VzIGluIGRldGFpbC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc5MiwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE2OjQ5OjEzLjMxNzU5MjM3M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjg5NTcxMjgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZkZ2V0X3Jhd1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9maWxlLmM9MTIxMD1FWFBPUlRfU1lNQk9MKGZkZ2V0KTtcXG5mcy9maWxlLmMtMTIxMS1cXG5mcy9maWxlLmM6MTIxMjpzdHJ1Y3QgZmQgZmRnZXRfcmF3KHVuc2lnbmVkIGludCBmZClcXG5mcy9maWxlLmMtMTIxMy17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZpbGUuaD03Mj1zdHJ1Y3QgZmQgZmRnZXQodW5zaWduZWQgaW50IGZkKTtcXG5pbmNsdWRlL2xpbnV4L2ZpbGUuaDo3MzpzdHJ1Y3QgZmQgZmRnZXRfcmF3KHVuc2lnbmVkIGludCBmZCk7XFxuaW5jbHVkZS9saW51eC9maWxlLmgtNzQtc3RydWN0IGZkIGZkZ2V0X3Bvcyh1bnNpZ25lZCBpbnQgZmQpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9maWxlLmg9ODM9REVGSU5FX0NMQVNTKGZkLCBzdHJ1Y3QgZmQsIGZkcHV0KF9UKSwgZmRnZXQoZmQpLCBpbnQgZmQpXFxuaW5jbHVkZS9saW51eC9maWxlLmg6ODQ6REVGSU5FX0NMQVNTKGZkX3Jhdywgc3RydWN0IGZkLCBmZHB1dChfVCksIGZkZ2V0X3JhdyhmZCksIGludCBmZClcXG5pbmNsdWRlL2xpbnV4L2ZpbGUuaC04NS1ERUZJTkVfQ0xBU1MoZmRfbWF5YmVfcmF3LCBzdHJ1Y3QgZmQsIGZkcHV0KF9UKSxcXG5pbmNsdWRlL2xpbnV4L2ZpbGUuaDo4NjpcXHQgICAgIHJhdyA/IGZkZ2V0X3JhdyhmZCkgOiBmZGdldChmZCksIGludCBmZCwgYm9vbCByYXcpXFxuaW5jbHVkZS9saW51eC9maWxlLmgtODctREVGSU5FX0NMQVNTKGZkX3Bvcywgc3RydWN0IGZkLCBmZHB1dF9wb3MoX1QpLCBmZGdldF9wb3MoZmQpLCBpbnQgZmQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE2OjQ5OjE2LjAwNzE2ODU4NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0NjUyNTU3NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgZmRnZXRfcmF3YCBGdW5jdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCBqdW1wIGludG8gdGhlIGBmZGdldF9yYXdgIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBsb29rIGF0IGBmcy9maWxlLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBsb3dlci1sZXZlbCBmaWxlIGRlc2NyaXB0b3IgaGFuZGxpbmcgcmVzaWRlcywgc28gdGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byB1bmRlcnN0YW5kIHRoZSBtZWNoYW5pY3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byBkby4gTXkgZ3Vlc3MgaXMgaXQncyBmZXRjaGluZyBhIHJhdyBmaWxlIGRlc2NyaXB0b3Igc3RydWN0dXJlLCBsaWtlbHkgd2l0aG91dCBhbnkgYWRkZWQgcHJvdGVjdGlvbiBvciBjaGVja3MsIHdoaWNoIEknbGwgaGF2ZSB0byBrZWVwIGluIG1pbmQuIExldCdzIHNlZSBob3cgaXQgaGFuZGxlcyB0aGUgZGlmZmVyZW50IHNjZW5hcmlvcywgZXJyb3JzLCBhbmQgd2hhdCB0aGUgcmV0dXJuIHZhbHVlIHRlbGxzIG1lLiBUaW1lIHRvIHN0YXJ0IGRpZ2dpbmcgdGhyb3VnaCB0aGUgY29kZS4gSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IHVuZGVyc3RhbmRpbmcgcmF3IGZpbGUgZGVzY3JpcHRvciBoYW5kbGluZyBjYW4gaWxsdW1pbmF0ZSBhIGxvdCBhYm91dCBhIHN5c3RlbSdzIGNvcmUgZGVzaWduLiBJIGFudGljaXBhdGUgdGhpcyB3aWxsIGJlIGludGVyZXN0aW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTA2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTY6NDk6MjAuNDcyNDI2ODA5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxOTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2ZpbGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjAwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjAwOlxcdFxcdFxcdGZpbGUgPSBfX2ZnZXRfZmlsZXMoZmlsZXMsIGZkLCBtYXNrKTtcXG4xMjAxOlxcdFxcdFxcdGlmICghZmlsZSlcXG4xMjAyOlxcdFxcdFxcdFxcdHJldHVybiBFTVBUWV9GRDtcXG4xMjAzOlxcdFxcdFxcdHJldHVybiBDTE9ORURfRkQoZmlsZSk7XFxuMTIwNDpcXHRcXHR9XFxuMTIwNTpcXHR9XFxuMTIwNjpcXHRzdHJ1Y3QgZmQgZmRnZXQodW5zaWduZWQgaW50IGZkKVxcbjEyMDc6XFx0e1xcbjEyMDg6XFx0XFx0cmV0dXJuIF9fZmdldF9saWdodChmZCwgRk1PREVfUEFUSCk7XFxuMTIwOTpcXHR9XFxuMTIxMDpcXHRFWFBPUlRfU1lNQk9MKGZkZ2V0KTtcXG4xMjExOlxcdFxcbjEyMTI6XFx0c3RydWN0IGZkIGZkZ2V0X3Jhdyh1bnNpZ25lZCBpbnQgZmQpXFxuMTIxMzpcXHR7XFxuMTIxNDpcXHRcXHRyZXR1cm4gX19mZ2V0X2xpZ2h0KGZkLCAwKTtcXG4xMjE1OlxcdH1cXG4xMjE2OlxcdFxcbjEyMTc6XFx0LypcXG4xMjE4OlxcdCAqIFRyeSB0byBhdm9pZCBmX3BvcyBsb2NraW5nLiBXZSBvbmx5IG5lZWQgaXQgaWYgdGhlXFxuMTIxOTpcXHQgKiBmaWxlIGlzIG1hcmtlZCBmb3IgRk1PREVfQVRPTUlDX1BPUywgYW5kIGl0IGNhbiBiZVxcbjEyMjA6XFx0ICogYWNjZXNzZWQgbXVsdGlwbGUgd2F5cy5cXG4xMjIxOlxcdCAqXFxuMTIyMjpcXHQgKiBBbHdheXMgZG8gaXQgZm9yIGRpcmVjdG9yaWVzLCBiZWNhdXNlIHBpZGZkX2dldGZkKClcXG4xMjIzOlxcdCAqIGNhbiBtYWtlIGEgZmlsZSBhY2Nlc3NpYmxlIGV2ZW4gaWYgaXQgb3RoZXJ3aXNlIHdvdWxkXFxuMTIyNDpcXHQgKiBub3QgYmUsIGFuZCBmb3IgZGlyZWN0b3JpZXMgdGhpcyBpcyBhIGNvcnJlY3RuZXNzXFxuMTIyNTpcXHQgKiBpc3N1ZSwgbm90IGEgXFxcIlBPU0lYIHJlcXVpcmVtZW50XFxcIi5cXG4xMjI2OlxcdCAqL1xcbjEyMjc6XFx0c3RhdGljIGlubGluZSBib29sIGZpbGVfbmVlZHNfZl9wb3NfbG9jayhzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4xMjI4OlxcdHtcXG4xMjI5OlxcdFxcdGlmICghKGZpbGUtXFx1MDAzZWZfbW9kZSBcXHUwMDI2IEZNT0RFX0FUT01JQ19QT1MpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxNjo0OToyMC40NzI1OTEyNDlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Mjk0NzM4Nzg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgeGF0dHIgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgdGhlc2UgZXh0ZW5kZWQgYXR0cmlidXRlcyAoYHhhdHRyYCkgZnVuY3Rpb25zIGFyZSBpbXBsZW1lbnRlZCwgYW5kIEkndmUgbm90aWNlZCBzb21ldGhpbmcuIEl0IHNlZW1zIHRoYXQgYGZkZ2V0YCB1c2VzIGBfX2ZnZXRfbGlnaHRgIHdpdGggYEZNT0RFX1BBVEhgLiBUaGF0J3MgaW1wb3J0YW50IGJlY2F1c2UgaXQgbWVhbnMgYW55IGZpbGUgZGVzY3JpcHRvciBvcGVuZWQgd2l0aCBgT19QQVRIYCB3aWxsIGF1dG9tYXRpY2FsbHkgZmFpbCB3aGVuIGBmZGdldGAgaXMgY2FsbGVkLiBIb3dldmVyLCBgZmRnZXRfcmF3YCBpcyBkaWZmZXJlbnQg4oCTIGl0IHRha2VzIGEgYDBgIGFyZ3VtZW50IHdoaWNoIGxldHMgaXQgaGFuZGxlIHRob3NlIGBPX1BBVEhgIGZpbGUgZGVzY3JpcHRvcnMuXG5cbk5vdyBJJ20gc2VlaW5nIHRoaXMgcGF0Y2gsIGFuZCBpdCdzIGNoYW5naW5nIGBzZXR4YXR0cmF0YCwgYGdldHhhdHRyYXRgLCBgbGlzdHhhdHRyYXRgLCBhbmQgYHJlbW92ZXhhdHRyYXRgIHRvIHVzZSBgcmF3ID0gdHJ1ZWAuIFRoYXQncyB0aGUga2V5LiBUaGF0IG1lYW5zIHRoZXNlIGZ1bmN0aW9ucyB3aWxsIG5vdyBiZSBhYmxlIHRvIGhhbmRsZSBgT19QQVRIYCBmaWxlIGRlc2NyaXB0b3JzLCBlZmZlY3RpdmVseSBieXBhc3NpbmcgdGhlIGBGTU9ERV9QQVRIYCBjaGVjayBhbmQgYWxsb3dpbmcgYWNjZXNzIHdoZXJlIGl0IHdhcyBwcmV2aW91c2x5IGJsb2NrZWQuXG5cbldhaXQgYSBzZWNvbmQuLi5JIGJlbGlldmUgYHNldHhhdHRyYXRgIGlzIHRoZSBuZXdlciBvbmUuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGluIGBmcy94YXR0ci5jYCB0byBjb25maXJtIGl0J3MgYSBzeXNjYWxsIGFuZCB2ZXJpZnkgdGhlIGRldGFpbHMgb2YgaXRzIGluY2x1c2lvbi4gSnVzdCBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gZnVsbHkgdXAgdG8gc3BlZWQgd2l0aCB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTg2LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTY6NDk6MjUuNzY3MzMxODM0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNjI3MDg3NDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiU1lTQ0FMTF9ERUZJTkUuKnNldHhhdHRyYXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMveGF0dHIuYz03MDE9c3RhdGljIGludCBwYXRoX3NldHhhdHRyYXQoaW50IGRmZCwgY29uc3QgY2hhciBfX3VzZXIgKnBhdGhuYW1lLFxcbi0tXFxuZnMveGF0dHIuYy03NDAtXFxuZnMveGF0dHIuYzo3NDE6U1lTQ0FMTF9ERUZJTkU2KHNldHhhdHRyYXQsIGludCwgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqLCBwYXRobmFtZSwgdW5zaWduZWQgaW50LCBhdF9mbGFncyxcXG5mcy94YXR0ci5jLTc0Mi1cXHRcXHRjb25zdCBjaGFyIF9fdXNlciAqLCBuYW1lLCBjb25zdCBzdHJ1Y3QgeGF0dHJfYXJncyBfX3VzZXIgKiwgdWFyZ3MsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE2OjQ5OjI4LjAzMDA0NzA0NloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5ODE2NjQ4OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBOZXcgWGF0dHIgU3lzY2FsbHMqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGVzZSBuZXcgc3lzY2FsbHMg4oCTIGBzZXR4YXR0cmF0YCwgYGdldHhhdHRyYXRgLCBgbGlzdHhhdHRyYXRgLCBhbmQgYHJlbW92ZXhhdHRyYXRgLiBUaGV5J3JlIGRlc2lnbmVkIHRvIHdvcmsgd2l0aCBleHRlbmRlZCBhdHRyaWJ1dGVzLCB3aGljaCBpcyB1c2VmdWwuIFRoZSBwYXRjaCBmb2N1c2VzIG9uIGFsbG93aW5nIHRoZXNlIHRvIG9wZXJhdGUgd2l0aCBgT19QQVRIYCBmaWxlIGRlc2NyaXB0b3JzIHdoZW4gYGRmZGAgaXMgYWxzbyBpbiB1c2UuXG5cbk5vdywgYSBiaXQgb2YgYSB3cmlua2xlIGhlcmUuIElmIGBkZmRgICppcyogYW4gYE9fUEFUSGAgZmlsZSBkZXNjcmlwdG9yLCBhbmQgYHBhdGhuYW1lYCBpcyBlbXB0eSAoYEFUX0VNUFRZX1BBVEhgIGZsYWcgaW4gdXNlKSwgZG9lcyBpdCBtZWFuIHRoZSBjYWxscyBkaXJlY3RseSBvcGVyYXRlIG9uIHRoYXQgYE9fUEFUSGAgZGVzY3JpcHRvciBpdHNlbGY/IFRoYXQncyB0aGUgY29yZSBxdWVzdGlvbi4gSSBzaG91bGQgcHJvYmFibHkgZGlnIGludG8gdGhlIGltcGxlbWVudGF0aW9uLCBzcGVjaWZpY2FsbHksIHRoZSBgcGF0aF9zZXR4YXR0cmF0YCBmdW5jdGlvbiBpbiBgZnMveGF0dHIuY2AgdG8gY29uZmlybSB0aGUgYmVoYXZpb3VyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTczLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE2OjQ5OjMyLjAxMTcxNTMxNFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTkwNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMveGF0dHIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MjAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3MjA6XFx0XFx0aWYgKCEoYXRfZmxhZ3MgXFx1MDAyNiBBVF9TWU1MSU5LX05PRk9MTE9XKSlcXG4gNzIxOlxcdFxcdFxcdGxvb2t1cF9mbGFncyA9IExPT0tVUF9GT0xMT1c7XFxuIDcyMjpcXHRcXG4gNzIzOlxcdFxcdGVycm9yID0gc2V0eGF0dHJfY29weShuYW1lLCBcXHUwMDI2Y3R4KTtcXG4gNzI0OlxcdFxcdGlmIChlcnJvcilcXG4gNzI1OlxcdFxcdFxcdHJldHVybiBlcnJvcjtcXG4gNzI2OlxcdFxcbiA3Mjc6XFx0XFx0Q0xBU1MoZmlsZW5hbWVfbWF5YmVfbnVsbCwgZmlsZW5hbWUpKHBhdGhuYW1lLCBhdF9mbGFncyk7XFxuIDcyODpcXHRcXHRpZiAoIWZpbGVuYW1lIFxcdTAwMjZcXHUwMDI2IGRmZCBcXHUwMDNlPSAwKSB7XFxuIDcyOTpcXHRcXHRcXHRDTEFTUyhmZF9tYXliZV9yYXcsIGYpKGRmZCwgcmF3KTtcXG4gNzMwOlxcdFxcdFxcdGlmIChmZF9lbXB0eShmKSlcXG4gNzMxOlxcdFxcdFxcdFxcdGVycm9yID0gLUVCQURGO1xcbiA3MzI6XFx0XFx0XFx0ZWxzZVxcbiA3MzM6XFx0XFx0XFx0XFx0ZXJyb3IgPSBmaWxlX3NldHhhdHRyKGZkX2ZpbGUoZiksIFxcdTAwMjZjdHgpO1xcbiA3MzQ6XFx0XFx0fSBlbHNlIHtcXG4gNzM1OlxcdFxcdFxcdGVycm9yID0gZmlsZW5hbWVfc2V0eGF0dHIoZGZkLCBmaWxlbmFtZSwgbG9va3VwX2ZsYWdzLCBcXHUwMDI2Y3R4KTtcXG4gNzM2OlxcdFxcdH1cXG4gNzM3OlxcdFxcdGt2ZnJlZShjdHgua3ZhbHVlKTtcXG4gNzM4OlxcdFxcdHJldHVybiBlcnJvcjtcXG4gNzM5OlxcdH1cXG4gNzQwOlxcdFxcbiA3NDE6XFx0U1lTQ0FMTF9ERUZJTkU2KHNldHhhdHRyYXQsIGludCwgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqLCBwYXRobmFtZSwgdW5zaWduZWQgaW50LCBhdF9mbGFncyxcXG4gNzQyOlxcdFxcdFxcdGNvbnN0IGNoYXIgX191c2VyICosIG5hbWUsIGNvbnN0IHN0cnVjdCB4YXR0cl9hcmdzIF9fdXNlciAqLCB1YXJncyxcXG4gNzQzOlxcdFxcdFxcdHNpemVfdCwgdXNpemUpXFxuIDc0NDpcXHR7XFxuIDc0NTpcXHRcXHRzdHJ1Y3QgeGF0dHJfYXJncyBhcmdzID0ge307XFxuIDc0NjpcXHRcXHRpbnQgZXJyb3I7XFxuIDc0NzpcXHRcXG4gNzQ4OlxcdFxcdEJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IHhhdHRyX2FyZ3MpIFxcdTAwM2MgWEFUVFJfQVJHU19TSVpFX1ZFUjApO1xcbiA3NDk6XFx0XFx0QlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgeGF0dHJfYXJncykgIT0gWEFUVFJfQVJHU19TSVpFX0xBVEVTVCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE2OjQ5OjMyLjAxMTgzODc3NFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjAzMTQxMjkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQXR0cmlidXRlIFNldHRpbmcgTG9naWMqKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgY29kZSwgYGZpbGVuYW1lX21heWJlX251bGxgIGludGVsbGlnZW50bHkgaGFuZGxlcyB0aGUgbnVsbCBmaWxlbmFtZSBzaXR1YXRpb24uIEl0IHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGlmIHRoZSBgcGF0aG5hbWVgIGlzIGVtcHR5IGFuZCBgQVRfRU1QVFlfUEFUSGAgaXMgZ2l2ZW4sIHdlIGdldCBudWxsIGJhY2sgZnJvbSB0aGUgZnVuY3Rpb24uIElmIGBmaWxlbmFtZWAgaXMgYWJzZW50LCBpdCBtb3ZlcyBvbiBhbmQgdXNlcyBgZGZkYCBkaXJlY3RseS4gVGhlbiwgYENMQVNTKGZkX21heWJlX3JhdywgZikoZGZkLCByYXcpYCBpcyB1c2VkIHRvIHJldHJpZXZlIHRoZSBmaWxlIGRlc2NyaXB0b3Ig4oCTIHRoYXQgcGFydCBpcyBjbGVhci4gQW5kIHRoZSBgcmF3YCBmbGFnIGlzIHRoZXJlIHRvIGFsbG93IGZvciBgT19QQVRIYCBmaWxlIGRlc2NyaXB0b3JzLlxuXG5BbHJpZ2h0LCBzbyBmYXIgc28gZ29vZC4gTm93IGNvbWVzIHRoZSBwYXJ0IEkgbmVlZCB0byBmb2N1cyBvbjogYGZpbGVfc2V0eGF0dHIoZmRfZmlsZShmKSwgXHUwMDI2Y3R4KWAuIFRoZSBxdWVzdGlvbiB0aGF0IHNwcmluZ3MgdG8gbWluZCwgYW5kIGl0J3MgYSBjcml0aWNhbCBvbmUsIGlzIHdoZXRoZXIgYGZpbGVfc2V0eGF0dHJgIGFjdHVhbGx5IHN1cHBvcnRzIGJlaW5nIGNhbGxlZCB3aXRoIGBPX1BBVEhgIGZpbGUgZGVzY3JpcHRvcnMuIEknbSByZWFzb25hYmx5IHN1cmUsIGJ1dCBJIG5lZWQgdG8gY29uZmlybSB0aGlzLiBCZXN0IHRvIGRvdWJsZS1jaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgZmlsZV9zZXR4YXR0cmAganVzdCB0byBiZSBjb21wbGV0ZWx5IGNlcnRhaW4uIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgZXh0ZW5kZWQgYXR0cmlidXRlIHNldHRpbmcgaXMgZ29pbmcgdG8gd29yayB3aXRoIGFuIGBPX1BBVEhgIGRlc2NyaXB0b3IgYmVmb3JlIEkgY2FuIGJlIGNvbmZpZGVudCB0aGF0IHRoaXMgY29kZSBmdW5jdGlvbnMgYXMgaW50ZW5kZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwMTIsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxNjo0OTozNi4yMTQ5ODI2NzZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODg4MDcwNzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50IGZpbGVfc2V0eGF0dHJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvaW50ZXJuYWwuaD0yOTQ9c3NpemVfdCBmaWxlbmFtZV9nZXR4YXR0cihpbnQgZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKmZpbGVuYW1lLFxcbmZzL2ludGVybmFsLmgtMjk1LVxcdFxcdFxcdCAgdW5zaWduZWQgaW50IGxvb2t1cF9mbGFncywgc3RydWN0IGtlcm5lbF94YXR0cl9jdHggKmN0eCk7XFxuZnMvaW50ZXJuYWwuaDoyOTY6aW50IGZpbGVfc2V0eGF0dHIoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBrZXJuZWxfeGF0dHJfY3R4ICpjdHgpO1xcbmZzL2ludGVybmFsLmgtMjk3LWludCBmaWxlbmFtZV9zZXR4YXR0cihpbnQgZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKmZpbGVuYW1lLFxcbi0tXFxuZnMveGF0dHIuYz02NTU9c3RhdGljIGludCBkb19zZXR4YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbi0tXFxuZnMveGF0dHIuYy02NjUtXFxuZnMveGF0dHIuYzo2NjY6aW50IGZpbGVfc2V0eGF0dHIoc3RydWN0IGZpbGUgKmYsIHN0cnVjdCBrZXJuZWxfeGF0dHJfY3R4ICpjdHgpXFxuZnMveGF0dHIuYy02Njcte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxNjo0OTozNy45MDM3OTM4MzNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTQ4Nzg3NDE0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyB0aGUgYGZpbGVfc2V0eGF0dHJgIEZ1bmN0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gVGhlIHRhc2sgaXMgdG8gZXhhbWluZSB0aGUgYGZpbGVfc2V0eGF0dHJgIGZ1bmN0aW9uLCBwcmVzdW1hYmx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiBzb21lIGxhcmdlciBzeXN0ZW0sIGxpa2VseSBhIGZpbGUgc3lzdGVtIG9yIGtlcm5lbCBtb2R1bGUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGF0J3MgdGhlIGJyb2FkZXIgcHVycG9zZT8gSXMgdGhpcyByZWxhdGVkIHRvIGV4dGVuZGVkIGF0dHJpYnV0ZXMgaW4gYSBtb3JlIGdlbmVyYWwgc2Vuc2UsIG9yIGlzIHRoaXMgYSBwYXJ0aWN1bGFyIGltcGxlbWVudGF0aW9uIGZvciBhIHNwZWNpZmljIGZpbGUgc3lzdGVtIGxpa2UgZXh0NCwgWEZTLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gS25vd2luZyB0aGUgdGFyZ2V0IHdvdWxkIGdpdmUgY3J1Y2lhbCBjb250ZXh0LlxuXG5OZXh0LCBJJ2xsIGJlIGxvb2tpbmcgZm9yIGltcGxlbWVudGF0aW9uIGRldGFpbHMuIFNwZWNpZmljYWxseSwgSSdsbCBmb2N1cyBvbiBlcnJvciBoYW5kbGluZy4gRXh0ZW5kZWQgYXR0cmlidXRlcyBjYW4gYmUgdHJpY2t5IHRvIG1hbmFnZTsgSSdsbCB3YW50IHRvIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIHZhcmlvdXMgZXJyb3IgY2FzZXMsIGxpa2UgcGVybWlzc2lvbnMgaXNzdWVzLCBpbnN1ZmZpY2llbnQgc3BhY2UgZm9yIHRoZSBhdHRyaWJ1dGUsIG9yIGludmFsaWQgYXR0cmlidXRlIG5hbWVzIG9yIHZhbHVlcy4gU2VjdXJpdHkgaXMgYSBwYXJhbW91bnQgY29uY2VybiB3aXRoIHhhdHRycywgc28gSSdsbCBtZXRpY3Vsb3VzbHkgc2NydXRpbml6ZSB0aGUgY29kZSBmb3IgYW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMsIGxpa2UgcmFjZSBjb25kaXRpb25zIHRoYXQgY291bGQgbGVhZCB0byBUT0NUT1UgYnVncy5cblxuQWxzbywgZGF0YSBjb25zaXN0ZW5jeSB3aWxsIGJlIHZlcnkgaW1wb3J0YW50LiBJZiB0aGUgZnVuY3Rpb24gZmFpbHMgcGFydHdheSB0aHJvdWdoIHNldHRpbmcgYW4geGF0dHIsIGhvdyBkb2VzIGl0IG1haW50YWluIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIGZpbGVzeXN0ZW0/IEFyZSB0aGVyZSBzdWZmaWNpZW50IGpvdXJuYWxpbmcgb3IgYXRvbWljIG9wZXJhdGlvbnMgdG8gZW5zdXJlIHRoYXQgd2UgZG9uJ3QgZW5kIHVwIHdpdGggcGFydGlhbGx5IHdyaXR0ZW4gYXR0cmlidXRlcyBvciBpbmNvbnNpc3RlbnQgbWV0YWRhdGE/IFBlcmZvcm1hbmNlIHdpbGwgYmUgYW5vdGhlciBhc3BlY3QgSSB3aWxsIGxvb2sgaW50by4gU2luY2UgaXQgaXMgYmVpbmcgY2FsbGVkIHRvIGRvIHRoaXMgb3BlcmF0aW9uLCBpcyB0aGUgc2V0dGluZyBvZiBleHRlbmRlZCBhdHRyaWJ1dGVzIGNhdXNpbmcgYSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrP1xuXG5GaW5hbGx5LCBob3cgZG9lcyBpdCBpbnRlcmFjdCB3aXRoIG90aGVyIGNvbXBvbmVudHM/IERvZXMgaXQgY2FsbCBpbnRvIGFueSBvdGhlciBpbnRlcm5hbCBmdW5jdGlvbnMgb3Igc3lzdGVtIGNhbGxzPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBkZWFkbG9ja3Mgb3IgY29uY3VycmVuY3kgaXNzdWVzIHRoYXQgbmVlZCB0byBiZSBhZGRyZXNzZWQ/IEFueSBkb2N1bWVudGF0aW9uIG9yIGNvbW1lbnRzIGluIHRoZSBjb2RlIGl0c2VsZiwgZGVzY3JpYmluZyB0aGUgZXhwZWN0ZWQgYmVoYXZpb3IgYW5kIHVzYWdlIHNjZW5hcmlvcyB3aWxsIGJlIGhlbHBmdWwgYXMgSSBkaXZlIGRlZXBlciBpbnRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NjY4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTY6NDk6NDcuMzkxNjcwMloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5Nzg1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy94YXR0ci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY2NixcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDY2NjpcXHRpbnQgZmlsZV9zZXR4YXR0cihzdHJ1Y3QgZmlsZSAqZiwgc3RydWN0IGtlcm5lbF94YXR0cl9jdHggKmN0eClcXG4gNjY3OlxcdHtcXG4gNjY4OlxcdFxcdGludCBlcnJvciA9IG1udF93YW50X3dyaXRlX2ZpbGUoZik7XFxuIDY2OTpcXHRcXG4gNjcwOlxcdFxcdGlmICghZXJyb3IpIHtcXG4gNjcxOlxcdFxcdFxcdGF1ZGl0X2ZpbGUoZik7XFxuIDY3MjpcXHRcXHRcXHRlcnJvciA9IGRvX3NldHhhdHRyKGZpbGVfbW50X2lkbWFwKGYpLCBmLVxcdTAwM2VmX3BhdGguZGVudHJ5LCBjdHgpO1xcbiA2NzM6XFx0XFx0XFx0bW50X2Ryb3Bfd3JpdGVfZmlsZShmKTtcXG4gNjc0OlxcdFxcdH1cXG4gNjc1OlxcdFxcdHJldHVybiBlcnJvcjtcXG4gNjc2OlxcdH1cXG4gNjc3OlxcdFxcbiA2Nzg6XFx0aW50IGZpbGVuYW1lX3NldHhhdHRyKGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqZmlsZW5hbWUsXFxuIDY3OTpcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBpbnQgbG9va3VwX2ZsYWdzLCBzdHJ1Y3Qga2VybmVsX3hhdHRyX2N0eCAqY3R4KVxcbiA2ODA6XFx0e1xcbiA2ODE6XFx0XFx0c3RydWN0IHBhdGggcGF0aDtcXG4gNjgyOlxcdFxcdGludCBlcnJvcjtcXG4gNjgzOlxcdFxcbiA2ODQ6XFx0cmV0cnk6XFxuIDY4NTpcXHRcXHRlcnJvciA9IGZpbGVuYW1lX2xvb2t1cChkZmQsIGZpbGVuYW1lLCBsb29rdXBfZmxhZ3MsIFxcdTAwMjZwYXRoLCBOVUxMKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTY6NDk6NDcuMzkxNzY5NThaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY1NjY4MjQ1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgV3JpdGUgUGVybWlzc2lvbnMgd2l0aCBPX1BBVEggRmlsZSBEZXNjcmlwdG9ycyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBtbnRfd2FudF93cml0ZV9maWxlKGYpYC4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiB0aGF0IHBvcHMgaW50byBteSBoZWFkIGlzLCBkb2VzIHRoaXMgZnVuY3Rpb24gYmVoYXZlIGNvcnJlY3RseSB3aGVuIGRlYWxpbmcgd2l0aCBmaWxlIGRlc2NyaXB0b3JzIG9wZW5lZCB3aXRoIGBPX1BBVEhgPyBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBzdXJlIHRoaXMgaXMgaGFuZGxlZCBwcm9wZXJseS4gTm93LCBpZiBgZmAgKmlzKiBhbiBgT19QQVRIYCBkZXNjcmlwdG9yLCB0aGVuIEkga25vdyB0aGF0IGBmaWxlX21udF9pZG1hcChmKWAgYW5kIGBmLVx1MDAzZWZfcGF0aC5kZW50cnlgIGFyZSB2YWxpZCBhbmQgYWNjZXNzaWJsZS4gQnV0LCBzdGlsbCwgSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBgbW50X3dhbnRfd3JpdGVfZmlsZWAgaXRzZWxmIGhhcyBhbnkgaGlkZGVuIGlzc3VlcyBvciBhc3N1bXB0aW9ucyB0aGF0IG1pZ2h0IGNhdXNlIGEgcHJvYmxlbSBzcGVjaWZpY2FsbHkgd2l0aCBgT19QQVRIYCBkZXNjcmlwdG9ycy4gVGhlIHNhZmVzdCBwYXRoIGlzIHRvIGdvIGFoZWFkIGFuZCBkaXZlIGludG8gdGhlIHNvdXJjZSBjb2RlIGZvciBgbW50X3dhbnRfd3JpdGVfZmlsZWAgZGlyZWN0bHkuIFRpbWUgdG8gc2NydXRpbml6ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQwMiwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE2OjQ5OjUxLjA0ODQ1NTMyNloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU2OTUxMzMxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtbnRfd2FudF93cml0ZV9maWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNTU5IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvcnRpbmcucnN0PTg4Mz1iZWVuIGNhbGxlZCBvciByZXR1cm5lZCB3aXRoIG5vbiAtRUlPQ0JRVUVVRUQgY29kZS5cXG4tLVxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3QtODg4LVxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3Q6ODg5Om1udF93YW50X3dyaXRlX2ZpbGUoKSBjYW4gbm93IG9ubHkgYmUgcGFpcmVkIHdpdGggbW50X2Ryb3Bfd3JpdGVfZmlsZSgpLFxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3QtODkwLXdoZXJlYXMgcHJldmlvdXNseSBpdCBjb3VsZCBiZSBwYWlyZWQgd2l0aCBtbnRfZHJvcF93cml0ZSgpIGFzIHdlbGwuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3hmcy94ZnMtb25saW5lLWZzY2stZGVzaWduLnJzdD0zMjA2PXRvIGF2b2lkIGRlYWRsb2NrczpcXG4tLVxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMveGZzL3hmcy1vbmxpbmUtZnNjay1kZXNpZ24ucnN0LTMyMDktXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy94ZnMveGZzLW9ubGluZS1mc2NrLWRlc2lnbi5yc3Q6MzIxMDoyLiBGaWxlc3lzdGVtIGZyZWV6ZSBwcm90ZWN0aW9uLCBpZiByZXBhaXJpbmcgKGBgbW50X3dhbnRfd3JpdGVfZmlsZWBgKS5cXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3hmcy94ZnMtb25saW5lLWZzY2stZGVzaWduLnJzdC0zMjExLVxcbi0tXFxuZnMvYnRyZnMvaW9jdGwuYz05ODU9c3RhdGljIG5vaW5saW5lIGludCBidHJmc19pb2N0bF9yZXNpemUoc3RydWN0IGZpbGUgKmZpbGUsXFxuLS1cXG5mcy9idHJmcy9pb2N0bC5jLTEwMDQtXFxuZnMvYnRyZnMvaW9jdGwuYzoxMDA1OlxcdHJldCA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlsZSk7XFxuZnMvYnRyZnMvaW9jdGwuYy0xMDA2LVxcdGlmIChyZXQpXFxuLS1cXG5mcy9idHJmcy9pb2N0bC5jPTExMzg9c3RhdGljIG5vaW5saW5lIGludCBfX2J0cmZzX2lvY3RsX3NuYXBfY3JlYXRlKHN0cnVjdCBmaWxlICpmaWxlLFxcbi0tXFxuZnMvYnRyZnMvaW9jdGwuYy0xMTQ5LVxcbmZzL2J0cmZzL2lvY3RsLmM6MTE1MDpcXHRyZXQgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbGUpO1xcbmZzL2J0cmZzL2lvY3RsLmMtMTE1MS1cXHRpZiAocmV0KVxcbi0tXFxuZnMvYnRyZnMvaW9jdGwuYz0xMjk0PXN0YXRpYyBub2lubGluZSBpbnQgYnRyZnNfaW9jdGxfc3Vidm9sX3NldGZsYWdzKHN0cnVjdCBmaWxlICpmaWxlLFxcbi0tXFxuZnMvYnRyZnMvaW9jdGwuYy0xMzA3LVxcbmZzL2J0cmZzL2lvY3RsLmM6MTMwODpcXHRyZXQgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbGUpO1xcbmZzL2J0cmZzL2lvY3RsLmMtMTMwOS1cXHRpZiAocmV0KVxcbi0tXFxuZnMvYnRyZnMvaW9jdGwuYz0yMjE3PXN0YXRpYyBub2lubGluZSBpbnQgYnRyZnNfaW9jdGxfc25hcF9kZXN0cm95KHN0cnVjdCBmaWxlICpmaWxlLFxcbi0tXFxuZnMvYnRyZnMvaW9jdGwuYy0yMjU5LVxcbmZzL2J0cmZzL2lvY3RsLmM6MjI2MDpcXHRcXHRcXHRyZXQgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbGUpO1xcbmZzL2J0cmZzL2lvY3RsLmMtMjI2MS1cXHRcXHRcXHRpZiAocmV0KVxcbi0tXFxuZnMvYnRyZnMvaW9jdGwuYy0yMjY4LVxcbmZzL2J0cmZzL2lvY3RsLmM6MjI2OTpcXHRcXHRcXHRyZXQgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbGUpO1xcbmZzL2J0cmZzL2lvY3RsLmMtMjI3MC1cXHRcXHRcXHRpZiAocmV0KVxcbi0tXFxuZnMvYnRyZnMvaW9jdGwuYy0yMzQ0LVxcbmZzL2J0cmZzL2lvY3RsLmM6MjM0NTpcXHRcXHRyZXQgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbGUpO1xcbmZzL2J0cmZzL2lvY3RsLmMtMjM0Ni1cXHRcXHRpZiAocmV0KVxcbi0tXFxuZnMvYnRyZnMvaW9jdGwuYz0yNDMxPXN0YXRpYyBpbnQgYnRyZnNfaW9jdGxfZGVmcmFnKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkIF9fdXNlciAqYXJncClcXG4tLVxcbmZzL2J0cmZzL2lvY3RsLmMtMjQzNy1cXG5mcy9idHJmcy9pb2N0bC5jOjI0Mzg6XFx0cmV0ID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxlKTtcXG5mcy9idHJmcy9pb2N0bC5jLTI0MzktXFx0aWYgKHJldClcXG4tLVxcbmZzL2J0cmZzL2lvY3RsLmM9MjU3MD1zdGF0aWMgbG9uZyBidHJmc19pb2N0bF9ybV9kZXZfdjIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgX191c2VyICphcmcpXFxuLS1cXG5mcy9idHJmcy9pb2N0bC5jLTI2MDUtXFxuZnMvYnRyZnMvaW9jdGwuYzoyNjA2OlxcdHJldCA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlsZSk7XFxuZnMvYnRyZnMvaW9jdGwuYy0yNjA3LVxcdGlmIChyZXQpXFxuLS1cXG5mcy9idHJmcy9pb2N0bC5jPTI2Mzc9c3RhdGljIGxvbmcgYnRyZnNfaW9jdGxfcm1fZGV2KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkIF9fdXNlciAqYXJnKVxcbi0tXFxuZnMvYnRyZnMvaW9jdGwuYy0yNjY1LVxcbmZzL2J0cmZzL2lvY3RsLmM6MjY2NjpcXHRyZXQgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbGUpO1xcbmZzL2J0cmZzL2lvY3RsLmMtMjY2Ny1cXHRpZiAocmV0KVxcbi0tXFxuZnMvYnRyZnMvaW9jdGwuYz0yNzgwPXN0YXRpYyBsb25nIGJ0cmZzX2lvY3RsX2RlZmF1bHRfc3Vidm9sKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkIF9fdXNlciAqYXJncClcXG4tLVxcbmZzL2J0cmZzL2lvY3RsLmMtMjc5Ny1cXG5mcy9idHJmcy9pb2N0bC5jOjI3OTg6XFx0cmV0ID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxlKTtcXG5mcy9idHJmcy9pb2N0bC5jLTI3OTktXFx0aWYgKHJldClcXG4tLVxcbmZzL2J0cmZzL2lvY3RsLmM9MzA1OD1zdGF0aWMgbG9uZyBidHJmc19pb2N0bF9zY3J1YihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCBfX3VzZXIgKmFyZylcXG4tLVxcbmZzL2J0cmZzL2lvY3RsLmMtMzA3OS1cXHRpZiAoIShzYS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBCVFJGU19TQ1JVQl9SRUFET05MWSkpIHtcXG5mcy9idHJmcy9pb2N0bC5jOjMwODA6XFx0XFx0cmV0ID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxlKTtcXG5mcy9idHJmcy9pb2N0bC5jLTMwODEtXFx0XFx0aWYgKHJldClcXG4tLVxcbmZzL2J0cmZzL2lvY3RsLmM9MzQwNj1zdGF0aWMgbG9uZyBidHJmc19pb2N0bF9iYWxhbmNlKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkIF9fdXNlciAqYXJnKVxcbi0tXFxuZnMvYnRyZnMvaW9jdGwuYy0zNDE3LVxcbmZzL2J0cmZzL2lvY3RsLmM6MzQxODpcXHRyZXQgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbGUpO1xcbmZzL2J0cmZzL2lvY3RsLmMtMzQxOS1cXHRpZiAocmV0KVxcbi0tXFxuZnMvYnRyZnMvaW9jdGwuYz0zNTQzPXN0YXRpYyBsb25nIGJ0cmZzX2lvY3RsX3F1b3RhX2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCBfX3VzZXIgKmFyZylcXG4tLVxcbmZzL2J0cmZzL2lvY3RsLmMtMzU1Mi1cXG5mcy9idHJmcy9pb2N0bC5jOjM1NTM6XFx0cmV0ID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxlKTtcXG5mcy9idHJmcy9pb2N0bC5jLTM1NTQtXFx0aWYgKHJldClcXG4tLVxcbmZzL2J0cmZzL2lvY3RsLmM9MzYxMT1zdGF0aWMgbG9uZyBidHJmc19pb2N0bF9xZ3JvdXBfYXNzaWduKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkIF9fdXNlciAqYXJnKVxcbi0tXFxuZnMvYnRyZnMvaW9jdGwuYy0zNjI3LVxcbmZzL2J0cmZzL2lvY3RsLmM6MzYyODpcXHRyZXQgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbGUpO1xcbmZzL2J0cmZzL2lvY3RsLmMtMzYyOS1cXHRpZiAocmV0KVxcbi0tXFxuZnMvYnRyZnMvaW9jdGwuYz0zNjgxPXN0YXRpYyBsb25nIGJ0cmZzX2lvY3RsX3Fncm91cF9jcmVhdGUoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgX191c2VyICphcmcpXFxuLS1cXG5mcy9idHJmcy9pb2N0bC5jLTM2OTUtXFxuZnMvYnRyZnMvaW9jdGwuYzozNjk2OlxcdHJldCA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlsZSk7XFxuZnMvYnRyZnMvaW9jdGwuYy0zNjk3LVxcdGlmIChyZXQpXFxuLS1cXG5mcy9idHJmcy9pb2N0bC5jPTM3NDE9c3RhdGljIGxvbmcgYnRyZnNfaW9jdGxfcWdyb3VwX2xpbWl0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkIF9fdXNlciAqYXJnKVxcbi0tXFxuZnMvYnRyZnMvaW9jdGwuYy0zNzU2LVxcbmZzL2J0cmZzL2lvY3RsLmM6Mzc1NzpcXHRyZXQgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbGUpO1xcbmZzL2J0cmZzL2lvY3RsLmMtMzc1OC1cXHRpZiAocmV0KVxcbi0tXFxuZnMvYnRyZnMvaW9jdGwuYz0zNzkxPXN0YXRpYyBsb25nIGJ0cmZzX2lvY3RsX3F1b3RhX3Jlc2NhbihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCBfX3VzZXIgKmFyZylcXG4tLVxcbmZzL2J0cmZzL2lvY3RsLmMtMzgwMy1cXG5mcy9idHJmcy9pb2N0bC5jOjM4MDQ6XFx0cmV0ID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxlKTtcXG5mcy9idHJmcy9pb2N0bC5jLTM4MDUtXFx0aWYgKHJldClcXG4tLVxcbmZzL2J0cmZzL2lvY3RsLmM9Mzg1Mz1zdGF0aWMgbG9uZyBfYnRyZnNfaW9jdGxfc2V0X3JlY2VpdmVkX3N1YnZvbChzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4tLVxcbmZzL2J0cmZzL2lvY3RsLmMtMzg2OC1cXG5mcy9idHJmcy9pb2N0bC5jOjM4Njk6XFx0cmV0ID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxlKTtcXG5mcy9idHJmcy9pb2N0bC5jLTM4NzAtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5mcy9idHJmcy9pb2N0bC5jPTQwNTI9c3RhdGljIGludCBidHJmc19pb2N0bF9zZXRfZnNsYWJlbChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCBfX3VzZXIgKmFyZylcXG4tLVxcbmZzL2J0cmZzL2lvY3RsLmMtNDA3NC1cXG5mcy9idHJmcy9pb2N0bC5jOjQwNzU6XFx0cmV0ID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxlKTtcXG5mcy9idHJmcy9pb2N0bC5jLTQwNzYtXFx0aWYgKHJldClcXG4tLVxcbmZzL2J0cmZzL2lvY3RsLmM9NDE5Mj1zdGF0aWMgaW50IGJ0cmZzX2lvY3RsX3NldF9mZWF0dXJlcyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCBfX3VzZXIgKmFyZylcXG4tLVxcbmZzL2J0cmZzL2lvY3RsLmMtNDIyOC1cXG5mcy9idHJmcy9pb2N0bC5jOjQyMjk6XFx0cmV0ID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxlKTtcXG5mcy9idHJmcy9pb2N0bC5jLTQyMzAtXFx0aWYgKHJldClcXG4tLVxcbmZzL2NhY2hlZmlsZXMveGF0dHIuYz0zOT1pbnQgY2FjaGVmaWxlc19zZXRfb2JqZWN0X3hhdHRyKHN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCAqb2JqZWN0KVxcbi0tXFxuZnMvY2FjaGVmaWxlcy94YXR0ci5jLTY3LVxcdGlmIChyZXQgPT0gMCkge1xcbmZzL2NhY2hlZmlsZXMveGF0dHIuYzo2ODpcXHRcXHRyZXQgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbGUpO1xcbmZzL2NhY2hlZmlsZXMveGF0dHIuYy02OS1cXHRcXHRpZiAocmV0ID09IDApIHtcXG4tLVxcbmZzL2NyeXB0by9wb2xpY3kuYz01MDU9aW50IGZzY3J5cHRfaW9jdGxfc2V0X3BvbGljeShzdHJ1Y3QgZmlsZSAqZmlscCwgY29uc3Qgdm9pZCBfX3VzZXIgKmFyZylcXG4tLVxcbmZzL2NyeXB0by9wb2xpY3kuYy01MzktXFxuZnMvY3J5cHRvL3BvbGljeS5jOjU0MDpcXHRyZXQgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbHApO1xcbmZzL2NyeXB0by9wb2xpY3kuYy01NDEtXFx0aWYgKHJldClcXG4tLVxcbmZzL2V4ZmF0L2ZpbGUuYz00NDU9c3RhdGljIGludCBleGZhdF9pb2N0bF9zZXRfYXR0cmlidXRlcyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdTMyIF9fdXNlciAqdXNlcl9hdHRyKVxcbi0tXFxuZnMvZXhmYXQvZmlsZS5jLTQ1Ny1cXG5mcy9leGZhdC9maWxlLmM6NDU4OlxcdGVyciA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlsZSk7XFxuZnMvZXhmYXQvZmlsZS5jLTQ1OS1cXHRpZiAoZXJyKVxcbi0tXFxuZnMvZXh0Mi9pb2N0bC5jPTU0PWxvbmcgZXh0Ml9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5mcy9leHQyL2lvY3RsLmMtNzAtXFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG5mcy9leHQyL2lvY3RsLmM6NzE6XFx0XFx0cmV0ID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxwKTtcXG5mcy9leHQyL2lvY3RsLmMtNzItXFx0XFx0aWYgKHJldClcXG4tLVxcbmZzL2V4dDIvaW9jdGwuYy0xMDctXFxuZnMvZXh0Mi9pb2N0bC5jOjEwODpcXHRcXHRyZXQgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbHApO1xcbmZzL2V4dDIvaW9jdGwuYy0xMDktXFx0XFx0aWYgKHJldClcXG4tLVxcbmZzL2V4dDQvY3J5cHRvLmM9ODM9aW50IGV4dDRfaW9jdGxfZ2V0X2VuY3J5cHRpb25fcHdzYWx0KHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkIF9fdXNlciAqYXJnKVxcbi0tXFxuZnMvZXh0NC9jcnlwdG8uYy05My1cXHRpZiAodXVpZF9pc196ZXJvKHNiaS1cXHUwMDNlc19lcy1cXHUwMDNlc19lbmNyeXB0X3B3X3NhbHQpKSB7XFxuZnMvZXh0NC9jcnlwdG8uYzo5NDpcXHRcXHRlcnIgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbHApO1xcbmZzL2V4dDQvY3J5cHRvLmMtOTUtXFx0XFx0aWYgKGVycilcXG4tLVxcbmZzL2V4dDQvaW9jdGwuYz05NTQ9c3RhdGljIGxvbmcgZXh0NF9pb2N0bF9ncm91cF9hZGQoc3RydWN0IGZpbGUgKmZpbGUsXFxuLS1cXG5mcy9leHQ0L2lvY3RsLmMtOTcwLVxcbmZzL2V4dDQvaW9jdGwuYzo5NzE6XFx0ZXJyID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxlKTtcXG5mcy9leHQ0L2lvY3RsLmMtOTcyLVxcdGlmIChlcnIpXFxuLS1cXG5mcy9leHQ0L2lvY3RsLmM9MTExNz1zdGF0aWMgaW50IGV4dDRfaW9jdGxfc2V0bGFiZWwoc3RydWN0IGZpbGUgKmZpbHAsIGNvbnN0IGNoYXIgX191c2VyICp1c2VyX2xhYmVsKVxcbi0tXFxuZnMvZXh0NC9pb2N0bC5jLTExNDMtXFxuZnMvZXh0NC9pb2N0bC5jOjExNDQ6XFx0cmV0ID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxwKTtcXG5mcy9leHQ0L2lvY3RsLmMtMTE0NS1cXHRpZiAocmV0KVxcbi0tXFxuZnMvZXh0NC9pb2N0bC5jPTEyMDU9c3RhdGljIGludCBleHQ0X2lvY3RsX3NldHV1aWQoc3RydWN0IGZpbGUgKmZpbHAsXFxuLS1cXG5mcy9leHQ0L2lvY3RsLmMtMTIzNC1cXG5mcy9leHQ0L2lvY3RsLmM6MTIzNTpcXHRyZXQgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbHApO1xcbmZzL2V4dDQvaW9jdGwuYy0xMjM2LVxcdGlmIChyZXQpXFxuLS1cXG5mcy9leHQ0L2lvY3RsLmM9MTM5MD1zdGF0aWMgaW50IGV4dDRfaW9jdGxfc2V0X3R1bmVfc2Ioc3RydWN0IGZpbGUgKmZpbHAsXFxuLS1cXG5mcy9leHQ0L2lvY3RsLmMtMTUyNC1cXG5mcy9leHQ0L2lvY3RsLmM6MTUyNTpcXHRyZXQgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbHApO1xcbmZzL2V4dDQvaW9jdGwuYy0xNTI2LVxcdGlmIChyZXQpXFxuLS1cXG5mcy9leHQ0L2lvY3RsLmM9MTUzOD1zdGF0aWMgbG9uZyBfX2V4dDRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuZnMvZXh0NC9pb2N0bC5jLTE1NjctXFxuZnMvZXh0NC9pb2N0bC5jOjE1Njg6XFx0XFx0ZXJyID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxwKTtcXG5mcy9leHQ0L2lvY3RsLmMtMTU2OS1cXHRcXHRpZiAoZXJyKVxcbi0tXFxuZnMvZXh0NC9pb2N0bC5jLTE2MTYtXFxuZnMvZXh0NC9pb2N0bC5jOjE2MTc6XFx0XFx0ZXJyID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxwKTtcXG5mcy9leHQ0L2lvY3RsLmMtMTYxOC1cXHRcXHRpZiAoZXJyKVxcbi0tXFxuZnMvZXh0NC9pb2N0bC5jLTE2NjEtXFxuZnMvZXh0NC9pb2N0bC5jOjE2NjI6XFx0XFx0ZXJyID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxwKTtcXG5mcy9leHQ0L2lvY3RsLmMtMTY2My1cXHRcXHRpZiAoZXJyKVxcbi0tXFxuZnMvZXh0NC9pb2N0bC5jLTE2OTEtXFxuZnMvZXh0NC9pb2N0bC5jOjE2OTI6XFx0XFx0ZXJyID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxwKTtcXG5mcy9leHQ0L2lvY3RsLmMtMTY5My1cXHRcXHRpZiAoZXJyKVxcbi0tXFxuZnMvZXh0NC9pb2N0bC5jLTE3MTMtXFxuZnMvZXh0NC9pb2N0bC5jOjE3MTQ6XFx0XFx0ZXJyID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxwKTtcXG5mcy9leHQ0L2lvY3RsLmMtMTcxNS1cXHRcXHRpZiAoZXJyKVxcbi0tXFxuZnMvZXh0NC9pb2N0bC5jLTE3MjYtXFx0XFx0XFx0cmV0dXJuIC1FQkFERjtcXG5mcy9leHQ0L2lvY3RsLmM6MTcyNzpcXHRcXHRlcnIgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbHApO1xcbmZzL2V4dDQvaW9jdGwuYy0xNzI4LVxcdFxcdGlmIChlcnIpXFxuLS1cXG5mcy9leHQ0L2lvY3RsLmMtMTc0OC1cXG5mcy9leHQ0L2lvY3RsLmM6MTc0OTpcXHRcXHRlcnIgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbHApO1xcbmZzL2V4dDQvaW9jdGwuYy0xNzUwLVxcdFxcdGlmIChlcnIpXFxuLS1cXG5mcy9mMmZzL2ZpbGUuYz0yMjc5PXN0YXRpYyBpbnQgZjJmc19pb2Nfc3RhcnRfYXRvbWljX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxwLCBib29sIHRydW5jYXRlKVxcbi0tXFxuZnMvZjJmcy9maWxlLmMtMjI5OS1cXG5mcy9mMmZzL2ZpbGUuYzoyMzAwOlxcdHJldCA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlscCk7XFxuZnMvZjJmcy9maWxlLmMtMjMwMS1cXHRpZiAocmV0KVxcbi0tXFxuZnMvZjJmcy9maWxlLmM9MjM5MT1zdGF0aWMgaW50IGYyZnNfaW9jX2NvbW1pdF9hdG9taWNfd3JpdGUoc3RydWN0IGZpbGUgKmZpbHApXFxuLS1cXG5mcy9mMmZzL2ZpbGUuYy0yNDAyLVxcbmZzL2YyZnMvZmlsZS5jOjI0MDM6XFx0cmV0ID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxwKTtcXG5mcy9mMmZzL2ZpbGUuYy0yNDA0LVxcdGlmIChyZXQpXFxuLS1cXG5mcy9mMmZzL2ZpbGUuYz0yNDI2PXN0YXRpYyBpbnQgZjJmc19pb2NfYWJvcnRfYXRvbWljX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxwKVxcbi0tXFxuZnMvZjJmcy9maWxlLmMtMjQzNy1cXG5mcy9mMmZzL2ZpbGUuYzoyNDM4OlxcdHJldCA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlscCk7XFxuZnMvZjJmcy9maWxlLmMtMjQzOS1cXHRpZiAocmV0KVxcbi0tXFxuZnMvZjJmcy9maWxlLmM9MjUyNT1zdGF0aWMgaW50IGYyZnNfaW9jX3NodXRkb3duKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmZzL2YyZnMvZmlsZS5jLTI1MzktXFx0aWYgKGluICE9IEYyRlNfR09JTkdfRE9XTl9GVUxMU1lOQykge1xcbmZzL2YyZnMvZmlsZS5jOjI1NDA6XFx0XFx0cmV0ID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxwKTtcXG5mcy9mMmZzL2ZpbGUuYy0yNTQxLVxcdFxcdGlmIChyZXQpIHtcXG4tLVxcbmZzL2YyZnMvZmlsZS5jPTI2MTY9c3RhdGljIGludCBmMmZzX2lvY19maXRyaW0oc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuZnMvZjJmcy9maWxlLmMtMjYzMi1cXG5mcy9mMmZzL2ZpbGUuYzoyNjMzOlxcdHJldCA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlscCk7XFxuZnMvZjJmcy9maWxlLmMtMjYzNC1cXHRpZiAocmV0KVxcbi0tXFxuZnMvZjJmcy9maWxlLmM9MjY4MT1zdGF0aWMgaW50IGYyZnNfaW9jX2dldF9lbmNyeXB0aW9uX3B3c2FsdChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5mcy9mMmZzL2ZpbGUuYy0yNjkwLVxcbmZzL2YyZnMvZmlsZS5jOjI2OTE6XFx0ZXJyID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxwKTtcXG5mcy9mMmZzL2ZpbGUuYy0yNjkyLVxcdGlmIChlcnIpXFxuLS1cXG5mcy9mMmZzL2ZpbGUuYz0yNzcyPXN0YXRpYyBpbnQgZjJmc19pb2NfZ2Moc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuZnMvZjJmcy9maWxlLmMtMjc5MS1cXG5mcy9mMmZzL2ZpbGUuYzoyNzkyOlxcdHJldCA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlscCk7XFxuZnMvZjJmcy9maWxlLmMtMjc5My1cXHRpZiAocmV0KVxcbi0tXFxuZnMvZjJmcy9maWxlLmM9MjgxNT1zdGF0aWMgaW50IF9fZjJmc19pb2NfZ2NfcmFuZ2Uoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCBmMmZzX2djX3JhbmdlICpyYW5nZSlcXG4tLVxcbmZzL2YyZnMvZmlsZS5jLTI4MzYtXFxuZnMvZjJmcy9maWxlLmM6MjgzNzpcXHRyZXQgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbHApO1xcbmZzL2YyZnMvZmlsZS5jLTI4MzgtXFx0aWYgKHJldClcXG4tLVxcbmZzL2YyZnMvZmlsZS5jPTI4Nzc9c3RhdGljIGludCBmMmZzX2lvY193cml0ZV9jaGVja3BvaW50KHN0cnVjdCBmaWxlICpmaWxwKVxcbi0tXFxuZnMvZjJmcy9maWxlLmMtMjg5My1cXG5mcy9mMmZzL2ZpbGUuYzoyODk0OlxcdHJldCA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlscCk7XFxuZnMvZjJmcy9maWxlLmMtMjg5NS1cXHRpZiAocmV0KVxcbi0tXFxuZnMvZjJmcy9maWxlLmM9MzA3MD1zdGF0aWMgaW50IGYyZnNfaW9jX2RlZnJhZ21lbnQoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuZnMvZjJmcy9maWxlLmMtMzA5Ny1cXG5mcy9mMmZzL2ZpbGUuYzozMDk4OlxcdGVyciA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlscCk7XFxuZnMvZjJmcy9maWxlLmMtMzA5OS1cXHRpZiAoZXJyKVxcbi0tXFxuZnMvZjJmcy9maWxlLmM9MzI1NT1zdGF0aWMgaW50IF9fZjJmc19pb2NfbW92ZV9yYW5nZShzdHJ1Y3QgZmlsZSAqZmlscCxcXG4tLVxcbmZzL2YyZnMvZmlsZS5jLTMyNzAtXFxuZnMvZjJmcy9maWxlLmM6MzI3MTpcXHRlcnIgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbHApO1xcbmZzL2YyZnMvZmlsZS5jLTMyNzItXFx0aWYgKGVycilcXG4tLVxcbmZzL2YyZnMvZmlsZS5jPTMyOTI9c3RhdGljIGludCBmMmZzX2lvY19mbHVzaF9kZXZpY2Uoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuZnMvZjJmcy9maWxlLmMtMzMyNi1cXG5mcy9mMmZzL2ZpbGUuYzozMzI3OlxcdHJldCA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlscCk7XFxuZnMvZjJmcy9maWxlLmMtMzMyOC1cXHRpZiAocmV0KVxcbi0tXFxuZnMvZjJmcy9maWxlLmM9MzUyOT1zdGF0aWMgaW50IGYyZnNfaW9jX3NldF9waW5fZmlsZShzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5mcy9mMmZzL2ZpbGUuYy0zNTQ3LVxcbmZzL2YyZnMvZmlsZS5jOjM1NDg6XFx0cmV0ID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxwKTtcXG5mcy9mMmZzL2ZpbGUuYy0zNTQ5LVxcdGlmIChyZXQpXFxuLS1cXG5mcy9mMmZzL2ZpbGUuYz0zNzUxPXN0YXRpYyBpbnQgZjJmc19pb2Nfc2V0ZnNsYWJlbChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5mcy9mMmZzL2ZpbGUuYy0zNzY0LVxcbmZzL2YyZnMvZmlsZS5jOjM3NjU6XFx0ZXJyID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxwKTtcXG5mcy9mMmZzL2ZpbGUuYy0zNzY2LVxcdGlmIChlcnIpXFxuLS1cXG5mcy9mMmZzL2ZpbGUuYz0zODY2PXN0YXRpYyBpbnQgZjJmc19yZWxlYXNlX2NvbXByZXNzX2Jsb2NrcyhzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5mcy9mMmZzL2ZpbGUuYy0zODgyLVxcbmZzL2YyZnMvZmlsZS5jOjM4ODM6XFx0cmV0ID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxwKTtcXG5mcy9mMmZzL2ZpbGUuYy0zODg0LVxcdGlmIChyZXQpXFxuLS1cXG5mcy9mMmZzL2ZpbGUuYz00MDYzPXN0YXRpYyBpbnQgZjJmc19yZXNlcnZlX2NvbXByZXNzX2Jsb2NrcyhzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5mcy9mMmZzL2ZpbGUuYy00MDc3LVxcbmZzL2YyZnMvZmlsZS5jOjQwNzg6XFx0cmV0ID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxwKTtcXG5mcy9mMmZzL2ZpbGUuYy00MDc5LVxcdGlmIChyZXQpXFxuLS1cXG5mcy9mMmZzL2ZpbGUuYz00MTk1PXN0YXRpYyBpbnQgZjJmc19zZWNfdHJpbV9maWxlKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmZzL2YyZnMvZmlsZS5jLTQyMjQtXFxuZnMvZjJmcy9maWxlLmM6NDIyNTpcXHRyZXQgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbHApO1xcbmZzL2YyZnMvZmlsZS5jLTQyMjYtXFx0aWYgKHJldClcXG4tLVxcbmZzL2YyZnMvZmlsZS5jPTQzODU9c3RhdGljIGludCBmMmZzX2lvY19zZXRfY29tcHJlc3Nfb3B0aW9uKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmZzL2YyZnMvZmlsZS5jLTQ0MDctXFxuZnMvZjJmcy9maWxlLmM6NDQwODpcXHRyZXQgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbHApO1xcbmZzL2YyZnMvZmlsZS5jLTQ0MDktXFx0aWYgKHJldClcXG4tLVxcbmZzL2YyZnMvZmlsZS5jPTQ0OTQ9c3RhdGljIGludCBmMmZzX2lvY19kZWNvbXByZXNzX2ZpbGUoc3RydWN0IGZpbGUgKmZpbHApXFxuLS1cXG5mcy9mMmZzL2ZpbGUuYy00NTEwLVxcbmZzL2YyZnMvZmlsZS5jOjQ1MTE6XFx0cmV0ID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxwKTtcXG5mcy9mMmZzL2ZpbGUuYy00NTEyLVxcdGlmIChyZXQpXFxuLS1cXG5mcy9mMmZzL2ZpbGUuYz00NTc1PXN0YXRpYyBpbnQgZjJmc19pb2NfY29tcHJlc3NfZmlsZShzdHJ1Y3QgZmlsZSAqZmlscClcXG4tLVxcbmZzL2YyZnMvZmlsZS5jLTQ1OTEtXFxuZnMvZjJmcy9maWxlLmM6NDU5MjpcXHRyZXQgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbHApO1xcbmZzL2YyZnMvZmlsZS5jLTQ1OTMtXFx0aWYgKHJldClcXG4tLVxcbmZzL2YyZnMvZ2MuYz0yMzE4PWludCBmMmZzX3Jlc2l6ZV9mcyhzdHJ1Y3QgZmlsZSAqZmlscCwgX191NjQgYmxvY2tfY291bnQpXFxuLS1cXG5mcy9mMmZzL2djLmMtMjM2MC1cXG5mcy9mMmZzL2djLmM6MjM2MTpcXHRlcnIgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbHApO1xcbmZzL2YyZnMvZ2MuYy0yMzYyLVxcdGlmIChlcnIpXFxuLS1cXG5mcy9mYXQvZmlsZS5jPTM3PXN0YXRpYyBpbnQgZmF0X2lvY3RsX3NldF9hdHRyaWJ1dGVzKHN0cnVjdCBmaWxlICpmaWxlLCB1MzIgX191c2VyICp1c2VyX2F0dHIpXFxuLS1cXG5mcy9mYXQvZmlsZS5jLTQ5LVxcbmZzL2ZhdC9maWxlLmM6NTA6XFx0ZXJyID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxlKTtcXG5mcy9mYXQvZmlsZS5jLTUxLVxcdGlmIChlcnIpXFxuLS1cXG5mcy9maWxlX2F0dHIuYz0zMjQ9aW50IGlvY3RsX3NldGZsYWdzKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgX191c2VyICphcmdwKVxcbi0tXFxuZnMvZmlsZV9hdHRyLmMtMzMzLVxcdGlmICghZXJyKSB7XFxuZnMvZmlsZV9hdHRyLmM6MzM0OlxcdFxcdGVyciA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlsZSk7XFxuZnMvZmlsZV9hdHRyLmMtMzM1LVxcdFxcdGlmICghZXJyKSB7XFxuLS1cXG5mcy9maWxlX2F0dHIuYz0zNTY9aW50IGlvY3RsX2Zzc2V0eGF0dHIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgX191c2VyICphcmdwKVxcbi0tXFxuZnMvZmlsZV9hdHRyLmMtMzY0LVxcdGlmICghZXJyKSB7XFxuZnMvZmlsZV9hdHRyLmM6MzY1OlxcdFxcdGVyciA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlsZSk7XFxuZnMvZmlsZV9hdHRyLmMtMzY2LVxcdFxcdGlmICghZXJyKSB7XFxuLS1cXG5mcy9uYW1lc3BhY2UuYz01MTE9aW50IG1udF9nZXRfd3JpdGVfYWNjZXNzX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUpXFxuLS1cXG5mcy9uYW1lc3BhY2UuYy01MjUtLyoqXFxuZnMvbmFtZXNwYWNlLmM6NTI2OiAqIG1udF93YW50X3dyaXRlX2ZpbGUgLSBnZXQgd3JpdGUgYWNjZXNzIHRvIGEgZmlsZSdzIG1vdW50XFxuZnMvbmFtZXNwYWNlLmMtNTI3LSAqIEBmaWxlOiB0aGUgZmlsZSB3aG8ncyBtb3VudCBvbiB3aGljaCB0byB0YWtlIGEgd3JpdGVcXG4tLVxcbmZzL25hbWVzcGFjZS5jLTUzMy0gKi9cXG5mcy9uYW1lc3BhY2UuYzo1MzQ6aW50IG1udF93YW50X3dyaXRlX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUpXFxuZnMvbmFtZXNwYWNlLmMtNTM1LXtcXG4tLVxcbmZzL25hbWVzcGFjZS5jLTU0My19XFxuZnMvbmFtZXNwYWNlLmM6NTQ0OkVYUE9SVF9TWU1CT0xfR1BMKG1udF93YW50X3dyaXRlX2ZpbGUpO1xcbmZzL25hbWVzcGFjZS5jLTU0NS1cXG4tLVxcbmZzL25mc2QvbmZzNHJlY292ZXIuYz0xMjM9bmZzZDRfY3JlYXRlX2NsaWRfZGlyKHN0cnVjdCBuZnM0X2NsaWVudCAqY2xwKVxcbi0tXFxuZnMvbmZzZC9uZnM0cmVjb3Zlci5jLTE0MS1cXG5mcy9uZnNkL25mczRyZWNvdmVyLmM6MTQyOlxcdHN0YXR1cyA9IG1udF93YW50X3dyaXRlX2ZpbGUobm4tXFx1MDAzZXJlY19maWxlKTtcXG5mcy9uZnNkL25mczRyZWNvdmVyLmMtMTQzLVxcdGlmIChzdGF0dXMpXFxuLS1cXG5mcy9uZnNkL25mczRyZWNvdmVyLmM9Mjk1PW5mc2Q0X3JlbW92ZV9jbGlkX2RpcihzdHJ1Y3QgbmZzNF9jbGllbnQgKmNscClcXG4tLVxcbmZzL25mc2QvbmZzNHJlY292ZXIuYy0zMDYtXFxuZnMvbmZzZC9uZnM0cmVjb3Zlci5jOjMwNzpcXHRzdGF0dXMgPSBtbnRfd2FudF93cml0ZV9maWxlKG5uLVxcdTAwM2VyZWNfZmlsZSk7XFxuZnMvbmZzZC9uZnM0cmVjb3Zlci5jLTMwOC1cXHRpZiAoc3RhdHVzKVxcbi0tXFxuZnMvbmZzZC9uZnM0cmVjb3Zlci5jPTM3Mj1uZnNkNF9yZWNkaXJfcHVyZ2Vfb2xkKHN0cnVjdCBuZnNkX25ldCAqbm4pXFxuLS1cXG5mcy9uZnNkL25mczRyZWNvdmVyLmMtMzc4LVxcdFxcdHJldHVybjtcXG5mcy9uZnNkL25mczRyZWNvdmVyLmM6Mzc5OlxcdHN0YXR1cyA9IG1udF93YW50X3dyaXRlX2ZpbGUobm4tXFx1MDAzZXJlY19maWxlKTtcXG5mcy9uZnNkL25mczRyZWNvdmVyLmMtMzgwLVxcdGlmIChzdGF0dXMpXFxuLS1cXG5mcy9uaWxmczIvaW9jdGwuYy0xNi0jaW5jbHVkZSBcXHUwMDNjbGludXgvY29tcGF0LmhcXHUwMDNlXFx0LyogY29tcGF0X3B0cigpICovXFxuZnMvbmlsZnMyL2lvY3RsLmM6MTc6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vdW50LmhcXHUwMDNlXFx0LyogbW50X3dhbnRfd3JpdGVfZmlsZSgpLCBtbnRfZHJvcF93cml0ZV9maWxlKCkgKi9cXG5mcy9uaWxmczIvaW9jdGwuYy0xOC0jaW5jbHVkZSBcXHUwMDNjbGludXgvYnVmZmVyX2hlYWQuaFxcdTAwM2VcXG4tLVxcbmZzL25pbGZzMi9pb2N0bC5jPTE5NT1zdGF0aWMgaW50IG5pbGZzX2lvY3RsX2NoYW5nZV9jcG1vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsXFxuLS1cXG5mcy9uaWxmczIvaW9jdGwuYy0yMDUtXFxuZnMvbmlsZnMyL2lvY3RsLmM6MjA2OlxcdHJldCA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlscCk7XFxuZnMvbmlsZnMyL2lvY3RsLmMtMjA3LVxcdGlmIChyZXQpXFxuLS1cXG5mcy9uaWxmczIvaW9jdGwuYz0yNDc9bmlsZnNfaW9jdGxfZGVsZXRlX2NoZWNrcG9pbnQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsXFxuLS1cXG5mcy9uaWxmczIvaW9jdGwuYy0yNTctXFxuZnMvbmlsZnMyL2lvY3RsLmM6MjU4OlxcdHJldCA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlscCk7XFxuZnMvbmlsZnMyL2lvY3RsLmMtMjU5LVxcdGlmIChyZXQpXFxuLS1cXG5mcy9uaWxmczIvaW9jdGwuYz04MzQ9c3RhdGljIGludCBuaWxmc19pb2N0bF9jbGVhbl9zZWdtZW50cyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCxcXG4tLVxcbmZzL25pbGZzMi9pb2N0bC5jLTg1Mi1cXG5mcy9uaWxmczIvaW9jdGwuYzo4NTM6XFx0cmV0ID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxwKTtcXG5mcy9uaWxmczIvaW9jdGwuYy04NTQtXFx0aWYgKHJldClcXG4tLVxcbmZzL25pbGZzMi9pb2N0bC5jPTk5Mj1zdGF0aWMgaW50IG5pbGZzX2lvY3RsX3Jlc2l6ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCxcXG4tLVxcbmZzL25pbGZzMi9pb2N0bC5jLTEwMDAtXFxuZnMvbmlsZnMyL2lvY3RsLmM6MTAwMTpcXHRyZXQgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbHApO1xcbmZzL25pbGZzMi9pb2N0bC5jLTEwMDItXFx0aWYgKHJldClcXG4tLVxcbmZzL25pbGZzMi9pb2N0bC5jPTExNzY9c3RhdGljIGludCBuaWxmc19pb2N0bF9zZXRfc3VpbmZvKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLFxcbi0tXFxuZnMvbmlsZnMyL2lvY3RsLmMtMTE4OC1cXG5mcy9uaWxmczIvaW9jdGwuYzoxMTg5OlxcdHJldCA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlscCk7XFxuZnMvbmlsZnMyL2lvY3RsLmMtMTE5MC1cXHRpZiAocmV0KVxcbi0tXFxuZnMvbmlsZnMyL2lvY3RsLmM9MTI3MD1zdGF0aWMgaW50IG5pbGZzX2lvY3RsX3NldF9mc2xhYmVsKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmaWxlICpmaWxwLFxcbi0tXFxuZnMvbmlsZnMyL2lvY3RsLmMtMTI4MS1cXG5mcy9uaWxmczIvaW9jdGwuYzoxMjgyOlxcdHJldCA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlscCk7XFxuZnMvbmlsZnMyL2lvY3RsLmMtMTI4My1cXHRpZiAocmV0KVxcbi0tXFxuZnMvbnRmcy9maWxlLmM9NzQ5PXN0YXRpYyBpbnQgbnRmc19pb2N0bF9zZXRfdm9sdW1lX2xhYmVsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmZzL250ZnMvZmlsZS5jLTc2MS1cXG5mcy9udGZzL2ZpbGUuYzo3NjI6XFx0cmV0ID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxwKTtcXG5mcy9udGZzL2ZpbGUuYy03NjMtXFx0aWYgKHJldClcXG4tLVxcbmZzL29jZnMyL2ZpbGUuYz0yMDkyPWludCBvY2ZzMl9jaGFuZ2VfZmlsZV9zcGFjZShzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCxcXG4tLVxcbmZzL29jZnMyL2ZpbGUuYy0yMTExLVxcbmZzL29jZnMyL2ZpbGUuYzoyMTEyOlxcdHJldCA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlsZSk7XFxuZnMvb2NmczIvZmlsZS5jLTIxMTMtXFx0aWYgKHJldClcXG4tLVxcbmZzL29jZnMyL2lvY3RsLmM9ODUzPWxvbmcgb2NmczJfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuZnMvb2NmczIvaW9jdGwuYy04ODEtXFxuZnMvb2NmczIvaW9jdGwuYzo4ODI6XFx0XFx0c3RhdHVzID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxwKTtcXG5mcy9vY2ZzMi9pb2N0bC5jLTg4My1cXHRcXHRpZiAoc3RhdHVzKVxcbi0tXFxuZnMvb2NmczIvaW9jdGwuYy04OTktXFxuZnMvb2NmczIvaW9jdGwuYzo5MDA6XFx0XFx0c3RhdHVzID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxwKTtcXG5mcy9vY2ZzMi9pb2N0bC5jLTkwMS1cXHRcXHRpZiAoc3RhdHVzKVxcbi0tXFxuZnMvb2NmczIvbW92ZV9leHRlbnRzLmM9OTkxPWludCBvY2ZzMl9pb2N0bF9tb3ZlX2V4dGVudHMoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgX191c2VyICphcmdwKVxcbi0tXFxuZnMvb2NmczIvbW92ZV9leHRlbnRzLmMtMTAwMS1cXG5mcy9vY2ZzMi9tb3ZlX2V4dGVudHMuYzoxMDAyOlxcdHN0YXR1cyA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlscCk7XFxuZnMvb2NmczIvbW92ZV9leHRlbnRzLmMtMTAwMy1cXHRpZiAoc3RhdHVzKVxcbi0tXFxuZnMvb3Blbi5jPTgzMz1pbnQgdmZzX2ZjaG93bihzdHJ1Y3QgZmlsZSAqZmlsZSwgdWlkX3QgdXNlciwgZ2lkX3QgZ3JvdXApXFxuLS1cXG5mcy9vcGVuLmMtODM2LVxcbmZzL29wZW4uYzo4Mzc6XFx0ZXJyb3IgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbGUpO1xcbmZzL29wZW4uYy04MzgtXFx0aWYgKGVycm9yKVxcbi0tXFxuZnMvcmVtYXBfcmFuZ2UuYz00MzI9bG9mZl90IHZmc19kZWR1cGVfZmlsZV9yYW5nZV9vbmUoc3RydWN0IGZpbGUgKnNyY19maWxlLCBsb2ZmX3Qgc3JjX3BvcyxcXG4tLVxcbmZzL3JlbWFwX3JhbmdlLmMtNDU3LVxcdCAqL1xcbmZzL3JlbWFwX3JhbmdlLmM6NDU4OlxcdHJldCA9IG1udF93YW50X3dyaXRlX2ZpbGUoZHN0X2ZpbGUpO1xcbmZzL3JlbWFwX3JhbmdlLmMtNDU5LVxcdGlmIChyZXQpXFxuLS1cXG5mcy9zbWIvY2xpZW50L2lvY3RsLmM9MTgwPXN0YXRpYyBsb25nIGNpZnNfaW9jdGxfY29weWNodW5rKHVuc2lnbmVkIGludCB4aWQsIHN0cnVjdCBmaWxlICpkc3RfZmlsZSxcXG4tLVxcbmZzL3NtYi9jbGllbnQvaW9jdGwuYy0xOTMtXFx0LyogY2hlY2sgaWYgdGFyZ2V0IHZvbHVtZSBpcyByZWFkb25seSBhbmQgdGFrZSByZWZlcmVuY2UgKi9cXG5mcy9zbWIvY2xpZW50L2lvY3RsLmM6MTk0OlxcdHJjID0gbW50X3dhbnRfd3JpdGVfZmlsZShkc3RfZmlsZSk7XFxuZnMvc21iL2NsaWVudC9pb2N0bC5jLTE5NS1cXHRpZiAocmMpIHtcXG4tLVxcbmZzL3NtYi9zZXJ2ZXIvdmZzLmM9MTk2OD1pbnQga3NtYmRfdmZzX3NldF9jb21wcmVzc2lvbihzdHJ1Y3Qga3NtYmRfd29yayAqd29yaywgc3RydWN0IGtzbWJkX2ZpbGUgKmZwLCB1MTYgZm10KVxcbi0tXFxuZnMvc21iL3NlcnZlci92ZnMuYy0yMDAwLVxcdFxcdGZpbGVhdHRyX2ZpbGxfZmxhZ3MoXFx1MDAyNmZhLCBmbGFncyk7XFxuZnMvc21iL3NlcnZlci92ZnMuYzoyMDAxOlxcdFxcdHJjID0gbW50X3dhbnRfd3JpdGVfZmlsZShmcC1cXHUwMDNlZmlscCk7XFxuZnMvc21iL3NlcnZlci92ZnMuYy0yMDAyLVxcdFxcdGlmIChyYylcXG4tLVxcbmZzL3Zlcml0eS9lbmFibGUuYz0zMjY9aW50IGZzdmVyaXR5X2lvY3RsX2VuYWJsZShzdHJ1Y3QgZmlsZSAqZmlscCwgY29uc3Qgdm9pZCBfX3VzZXIgKnVhcmcpXFxuLS1cXG5mcy92ZXJpdHkvZW5hYmxlLmMtMzc3LVxcbmZzL3Zlcml0eS9lbmFibGUuYzozNzg6XFx0ZXJyID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxwKTtcXG5mcy92ZXJpdHkvZW5hYmxlLmMtMzc5LVxcdGlmIChlcnIpIC8qIC1FUk9GUyAqL1xcbi0tXFxuZnMveGF0dHIuYz02NjY9aW50IGZpbGVfc2V0eGF0dHIoc3RydWN0IGZpbGUgKmYsIHN0cnVjdCBrZXJuZWxfeGF0dHJfY3R4ICpjdHgpXFxuZnMveGF0dHIuYy02Njcte1xcbmZzL3hhdHRyLmM6NjY4OlxcdGludCBlcnJvciA9IG1udF93YW50X3dyaXRlX2ZpbGUoZik7XFxuZnMveGF0dHIuYy02NjktXFxuLS1cXG5mcy94YXR0ci5jPTEwNDQ9c3RhdGljIGludCBmaWxlX3JlbW92ZXhhdHRyKHN0cnVjdCBmaWxlICpmLCBzdHJ1Y3QgeGF0dHJfbmFtZSAqa25hbWUpXFxuZnMveGF0dHIuYy0xMDQ1LXtcXG5mcy94YXR0ci5jOjEwNDY6XFx0aW50IGVycm9yID0gbW50X3dhbnRfd3JpdGVfZmlsZShmKTtcXG5mcy94YXR0ci5jLTEwNDctXFxuLS1cXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTY6NDk6NTIuNjE3OTczNjk2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg1MjExNjY0MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0LlxuXG4qKkFuYWx5emluZyBGaWxlIEF0dHJpYnV0ZSBPcGVyYXRpb25zIGFuZCBNb3VudCBQb2ludCBXcml0ZSBEZXNpcmVzKipcblxuUmlnaHQsIHNvIEknbSBzZWVpbmcgYG1udF93YW50X3dyaXRlX2ZpbGVgIHBvcHBpbmcgdXAgaW4gYGZpbGVfc2V0eGF0dHJgIGFuZCBgZmlsZV9yZW1vdmV4YXR0cmAuIENsZWFybHksIGl0J3MgaW52b2x2ZWQgd2l0aCBleHRlbmRlZCBhdHRyaWJ1dGUgbWFuaXB1bGF0aW9ucywgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGJldHRlci4gTXkgaW5zdGluY3RzIHRlbGwgbWUgaXQncyBzb21laG93IHJlbGF0ZWQgdG8gbW91bnQgcG9pbnQgYmVoYXZpb3JzIGFuZCB3cml0ZSBvcGVyYXRpb25zLiBUaW1lIHRvIGRpZyBpbnRvIGBmcy9uYW1lc3BhY2UuY2AgYW5kIHNlZSBleGFjdGx5IGhvdyBgbW50X3dhbnRfd3JpdGVfZmlsZWAgaXMgYmVpbmcgdXNlZC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBjb250ZXh0IGl0IHByb3ZpZGVzIHRvIHRoZSBzeXN0ZW0gcmVnYXJkaW5nIHdoZXRoZXIgaXQncyBva2F5IHRvIHdyaXRlIHRvIGEgZmlsZSBiYXNlZCBvbiB0aGUgbW91bnQgcG9pbnQuIEknbSBndWVzc2luZyBpdCBoYXMgc29tZSBpbXBhY3Qgb24gYWxsb3dpbmcgb3IgZGlzYWxsb3dpbmcgdGhlIG9wZXJhdGlvbi4gTGV0J3Mgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg4NzIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxNjo1MDowMS4xMzkxNDI0NThaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM0OTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL25hbWVzcGFjZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUyNixcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDUyNjpcXHQgKiBtbnRfd2FudF93cml0ZV9maWxlIC0gZ2V0IHdyaXRlIGFjY2VzcyB0byBhIGZpbGUncyBtb3VudFxcbiA1Mjc6XFx0ICogQGZpbGU6IHRoZSBmaWxlIHdobydzIG1vdW50IG9uIHdoaWNoIHRvIHRha2UgYSB3cml0ZVxcbiA1Mjg6XFx0ICpcXG4gNTI5OlxcdCAqIFRoaXMgaXMgbGlrZSBtbnRfd2FudF93cml0ZSwgYnV0IGlmIHRoZSBmaWxlIGlzIGFscmVhZHkgb3BlbiBmb3Igd3JpdGluZyBpdFxcbiA1MzA6XFx0ICogc2tpcHMgaW5jcmVtZW50aW5nIG1udF93cml0ZXJzIChzaW5jZSB0aGUgb3BlbiBmaWxlIGFscmVhZHkgaGFzIGEgcmVmZXJlbmNlKVxcbiA1MzE6XFx0ICogYW5kIGluc3RlYWQgb25seSBkb2VzIHRoZSBmcmVlemUgcHJvdGVjdGlvbiBhbmQgdGhlIGNoZWNrIGZvciBlbWVyZ2VuY3kgci9vXFxuIDUzMjpcXHQgKiByZW1vdW50cy4gIFRoaXMgbXVzdCBiZSBwYWlyZWQgd2l0aCBtbnRfZHJvcF93cml0ZV9maWxlLlxcbiA1MzM6XFx0ICovXFxuIDUzNDpcXHRpbnQgbW50X3dhbnRfd3JpdGVfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4gNTM1OlxcdHtcXG4gNTM2OlxcdFxcdGludCByZXQ7XFxuIDUzNzpcXHRcXG4gNTM4OlxcdFxcdHNiX3N0YXJ0X3dyaXRlKGZpbGVfaW5vZGUoZmlsZSktXFx1MDAzZWlfc2IpO1xcbiA1Mzk6XFx0XFx0cmV0ID0gbW50X2dldF93cml0ZV9hY2Nlc3NfZmlsZShmaWxlKTtcXG4gNTQwOlxcdFxcdGlmIChyZXQpXFxuIDU0MTpcXHRcXHRcXHRzYl9lbmRfd3JpdGUoZmlsZV9pbm9kZShmaWxlKS1cXHUwMDNlaV9zYik7XFxuIDU0MjpcXHRcXHRyZXR1cm4gcmV0O1xcbiA1NDM6XFx0fVxcbiA1NDQ6XFx0RVhQT1JUX1NZTUJPTF9HUEwobW50X3dhbnRfd3JpdGVfZmlsZSk7XFxuIDU0NTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTY6NTA6MDEuMTM5MzgwMjI4WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MjI5NDM2MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGNvZGUuXG5cbioqRGl2aW5nIGludG8gYG1udF9nZXRfd3JpdGVfYWNjZXNzX2ZpbGVgKipcblxuQWxyaWdodCwgSSBzZWUgd2UncmUgbG9va2luZyBhdCBgbW50X2dldF93cml0ZV9hY2Nlc3NfZmlsZWAuIFRoaXMgZnVuY3Rpb24gbmFtZSBpbW1lZGlhdGVseSBzdWdnZXN0cyB3ZSdyZSBkZWFsaW5nIHdpdGggYSBjcml0aWNhbCBwaWVjZSBvZiB0aGUgbW91bnRpbmcgcHJvY2Vzcywgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gd3JpdGUgcGVybWlzc2lvbnMuIFRoaXMgY291bGQgYmUgYW55d2hlcmUgaW4gdGhlIGZpbGVzeXN0ZW0gYXJjaGl0ZWN0dXJlLCBsaWtlbHkgY2xvc2UgdG8gdGhlIHZmcyBsYXllciBvciB0aGUgbW91bnQgaW1wbGVtZW50YXRpb24gaXRzZWxmLiBJJ20ga2VlbiB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZ1bmN0aW9uIGhhbmRsZXMgYWNxdWlyaW5nIG9yIHZhbGlkYXRpbmcgdGhlIHJpZ2h0IHRvIHdyaXRlIHRvIGEgbW91bnRlZCBmaWxlIHN5c3RlbSwgb3IgYSBzcGVjaWZpYyBmaWxlICp3aXRoaW4qIGEgbW91bnRlZCBmaWxlIHN5c3RlbS4gSSdsbCBuZWVkIHRvIHRyYWNlIGl0cyBjYWxsIHN0YWNrIGFuZCBzZWUgd2hhdCBhcmd1bWVudHMgaXQgdGFrZXMuIERvZXMgaXQgY2hlY2sgcGVybWlzc2lvbnMgYmFzZWQgb24gdXNlciBJRHMsIGZpbGUgYXR0cmlidXRlcywgb3IgbW91bnQgb3B0aW9ucz8gSXQncyBhbGwgYWJvdXQgZW5zdXJpbmcgZGF0YSBpbnRlZ3JpdHkgYW5kIHNlY3VyaXR5LCBzbyBJJ20gZXhwZWN0aW5nIHNvbWUgcm9idXN0IGNoZWNrcyB0byBiZSBpbiBwbGFjZS4gTGV0J3Mgc2VlIHdoYXQgd2UndmUgZ290LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTQ4OSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTY6NTA6MDQuNjYyMzI2MDc3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwOTUwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9uYW1lc3BhY2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MDAsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1MDA6XFx0RVhQT1JUX1NZTUJPTF9HUEwobW50X3dhbnRfd3JpdGUpO1xcbiA1MDE6XFx0XFxuIDUwMjpcXHQvKipcXG4gNTAzOlxcdCAqIG1udF9nZXRfd3JpdGVfYWNjZXNzX2ZpbGUgLSBnZXQgd3JpdGUgYWNjZXNzIHRvIGEgZmlsZSdzIG1vdW50XFxuIDUwNDpcXHQgKiBAZmlsZTogdGhlIGZpbGUgd2hvJ3MgbW91bnQgb24gd2hpY2ggdG8gdGFrZSBhIHdyaXRlXFxuIDUwNTpcXHQgKlxcbiA1MDY6XFx0ICogVGhpcyBpcyBsaWtlIG1udF9nZXRfd3JpdGVfYWNjZXNzLCBidXQgaWYgQGZpbGUgaXMgYWxyZWFkeSBvcGVuIGZvciB3cml0ZSBpdFxcbiA1MDc6XFx0ICogc2tpcHMgaW5jcmVtZW50aW5nIG1udF93cml0ZXJzIChzaW5jZSB0aGUgb3BlbiBmaWxlIGFscmVhZHkgaGFzIGEgcmVmZXJlbmNlKVxcbiA1MDg6XFx0ICogYW5kIGluc3RlYWQgb25seSBkb2VzIHRoZSBjaGVjayBmb3IgZW1lcmdlbmN5IHIvbyByZW1vdW50cy4gIFRoaXMgbXVzdCBiZVxcbiA1MDk6XFx0ICogcGFpcmVkIHdpdGggbW50X3B1dF93cml0ZV9hY2Nlc3NfZmlsZS5cXG4gNTEwOlxcdCAqL1xcbiA1MTE6XFx0aW50IG1udF9nZXRfd3JpdGVfYWNjZXNzX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUpXFxuIDUxMjpcXHR7XFxuIDUxMzpcXHRcXHRpZiAoZmlsZS1cXHUwMDNlZl9tb2RlIFxcdTAwMjYgRk1PREVfV1JJVEVSKSB7XFxuIDUxNDpcXHRcXHRcXHQvKlxcbiA1MTU6XFx0XFx0XFx0ICogU3VwZXJibG9jayBtYXkgaGF2ZSBiZWNvbWUgcmVhZG9ubHkgd2hpbGUgdGhlcmUgYXJlIHN0aWxsXFxuIDUxNjpcXHRcXHRcXHQgKiB3cml0YWJsZSBmZCdzLCBlLmcuIGR1ZSB0byBhIGZzIGVycm9yIHdpdGggZXJyb3JzPXJlbW91bnQtcm9cXG4gNTE3OlxcdFxcdFxcdCAqL1xcbiA1MTg6XFx0XFx0XFx0aWYgKF9fbW50X2lzX3JlYWRvbmx5KGZpbGUtXFx1MDAzZWZfcGF0aC5tbnQpKVxcbiA1MTk6XFx0XFx0XFx0XFx0cmV0dXJuIC1FUk9GUztcXG4gNTIwOlxcdFxcdFxcdHJldHVybiAwO1xcbiA1MjE6XFx0XFx0fVxcbiA1MjI6XFx0XFx0cmV0dXJuIG1udF9nZXRfd3JpdGVfYWNjZXNzKGZpbGUtXFx1MDAzZWZfcGF0aC5tbnQpO1xcbiA1MjM6XFx0fVxcbiA1MjQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE2OjUwOjA0LjY2MjUzNzAzN1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MTM2MzE3OTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgT19QQVRIIEZpbGUgRGVzY3JpcHRvciBCZWhhdmlvcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgSSdtIHRoaW5raW5nIGFib3V0IGhvdyBgT19QQVRIYCBmaWxlIGRlc2NyaXB0b3JzIGJlaGF2ZS4gSWYgdGhlIGZpbGUgaXNuJ3Qgb3BlbmVkIGZvciB3cml0aW5nLCB0aGF0IGBGTU9ERV9XUklURVJgIGJpdCB3aWxsIGJlIGZhbHNlLiAgVGhhdCB0cmlnZ2VycyBhIGNhbGwgdG8gYG1udF9nZXRfd3JpdGVfYWNjZXNzYCwgd2hpY2ggc2VlbXMgY29ycmVjdCBhbmQgd291bGQgaW5jcmVtZW50IGBtbnRfd3JpdGVyc2AgYW5kIGNoZWNrIGZvciByZWFkLW9ubHkgbW91bnRzLiAgU28sIGF0IGEgZnVuZGFtZW50YWwgbGV2ZWwsIGBtbnRfd2FudF93cml0ZV9maWxlYCAqc2hvdWxkKiB3b3JrIGZpbmUgd2l0aCBgT19QQVRIYC5cblxuQnV0IHdhaXTigKYgdGhlIHBhdGNoIGlzIGNoYW5naW5nIHRoZSBgKmF0YCBzeXNjYWxscyDigJMgYHNldHhhdHRyYXRgLCBgZ2V0eGF0dHJhdGAsIGFuZCB0aGUgcmVzdCDigJMgdG8gaGFuZGxlIGBPX1BBVEhgIGZpbGUgZGVzY3JpcHRvcnMuICBJcyB0aGlzIHJlYWxseSBhIGZ1bmN0aW9uYWwgY2hhbmdlPyAgTGV0IG1lIHNlZS4gIFllcywgaXQgbG9va3MgbGlrZSBpdCBpcy4gIFByZXZpb3VzbHksIGlmIHlvdSB0cmllZCB0byB1c2UgYHNldHhhdHRyYXRgIHdpdGggYW4gYE9fUEFUSGAgZGVzY3JpcHRvciBhbmQgYEFUX0VNUFRZX1BBVEhgLCBpdCB3b3VsZCBmbGF0IG91dCBmYWlsIHdpdGggYEVCQURGYC4gVGhlIGBmZGdldGAgY2FsbCB3b3VsZCBjaG9rZS4gTm93LCB3aXRoIGBmZGdldF9yYXdgLCBpdCB3aWxsIHN1Y2NlZWQgYmVjYXVzZSBgZmRnZXRfcmF3YCBhY3R1YWxseSBzdXBwb3J0cyB0aGVzZS5cblxuSG1tbSwgYnV0IHdoYXQgYWJvdXQgYGZzZXR4YXR0cmA/IERvZXMgdGhpcyBwYXRjaCBpbXBhY3QgaXQ/IEFoLCBuby4gYGZzZXR4YXR0cmAgc3RpbGwgY2FsbHMgYGZkZ2V0YCBieSBkZWZhdWx0LCBzbyBpdCdsbCBjb250aW51ZSB0byBmYWlsIG9uIGBPX1BBVEhgIGRlc2NyaXB0b3JzLiBNYWtlcyBzZW5zZTsgYGZzZXR4YXR0cmAgaXNuJ3QgdXNpbmcgdGhlIG5ld2VyIGAqYXRgIGZ1bmN0aW9uYWxpdHkuIE9rYXksIHRoYXQncyBjb25zaXN0ZW50IHdpdGggdGhlIGV4aXN0aW5nIGJlaGF2aW9yICpiZWZvcmUqIHRoaXMgcGF0Y2guIFRoZSAqbmV3KiBgKmF0YCBjYWxscyB3ZXJlIGludHJvZHVjZWQgbW9yZSByZWNlbnRseSwgYW5kIHRoaXMgcGF0Y2ggY29ycmVjdGx5IGFsbG93cyBgT19QQVRIYCBkZXNjcmlwdG9ycyB3aGVuIGBBVF9FTVBUWV9QQVRIYCBpcyB1c2VkLiAgVGhhdCdzIGltcG9ydGFudC4gIEkgc2VlIGl0IGFsbCB0aGUgdGltZSB3aXRoIGAqYXRgIGNhbGxzLCBlLmcuLCBgZmNob3duYXRgLCBgZnN0YXRhdGAsIHRoZXkgb2Z0ZW4gdXNlIHRoaXMgc3R5bGUuXG5cbkxldCBtZSBqdXN0IHZlcmlmeSB0aGlzIHJlYWwgcXVpY2suIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyB0aGUgb25seSBzcG90IGluIHRoZSBjb2RlIHdoZXJlIHRoaXMgaGFzIGJlZW4gZml4ZWQuIEFyZSB0aGVyZSBhbnkgb3RoZXIgcGxhY2VzIHVzaW5nIGBmZGdldF9yYXdgIGZvciB0aGVzZSBgKmF0YCBzeXNjYWxscz8gSSdsbCBjaGVjayBgZmNob3duYXRgIHJlYWwgcXVpY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMTY3LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzk0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTY6NTA6MTEuNzk4ODU3MzM1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzA1OTAxMjc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZjaG93bmF0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYWxwaGEva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsLTM4My00NTJcXHRjb21tb25cXHRta25vZGF0XFx0XFx0XFx0XFx0c3lzX21rbm9kYXRcXG5hcmNoL2FscGhhL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibDozODQ6NDUzXFx0Y29tbW9uXFx0ZmNob3duYXRcXHRcXHRcXHRzeXNfZmNob3duYXRcXG5hcmNoL2FscGhhL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibC0zODUtNDU0XFx0Y29tbW9uXFx0ZnV0aW1lc2F0XFx0XFx0XFx0c3lzX2Z1dGltZXNhdFxcbi0tXFxuYXJjaC9hcm0vdG9vbHMvc3lzY2FsbC50YmwtMzQyLTMyNFxcdGNvbW1vblxcdG1rbm9kYXRcXHRcXHRcXHRzeXNfbWtub2RhdFxcbmFyY2gvYXJtL3Rvb2xzL3N5c2NhbGwudGJsOjM0MzozMjVcXHRjb21tb25cXHRmY2hvd25hdFxcdFxcdHN5c19mY2hvd25hdFxcbmFyY2gvYXJtL3Rvb2xzL3N5c2NhbGwudGJsLTM0NC0zMjZcXHRjb21tb25cXHRmdXRpbWVzYXRcXHRcXHRzeXNfZnV0aW1lc2F0X3RpbWUzMlxcbi0tXFxuYXJjaC9hcm02NC90b29scy9zeXNjYWxsXzMyLnRibC0zMzktMzI0XFx0Y29tbW9uXFx0bWtub2RhdFxcdFxcdFxcdHN5c19ta25vZGF0XFxuYXJjaC9hcm02NC90b29scy9zeXNjYWxsXzMyLnRibDozNDA6MzI1XFx0Y29tbW9uXFx0ZmNob3duYXRcXHRcXHRzeXNfZmNob3duYXRcXG5hcmNoL2FybTY0L3Rvb2xzL3N5c2NhbGxfMzIudGJsLTM0MS0zMjZcXHRjb21tb25cXHRmdXRpbWVzYXRcXHRcXHRzeXNfZnV0aW1lc2F0X3RpbWUzMlxcbi0tXFxuYXJjaC9tNjhrL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibC0zMDAtMjkwXFx0Y29tbW9uXFx0bWtub2RhdFxcdFxcdFxcdFxcdHN5c19ta25vZGF0XFxuYXJjaC9tNjhrL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibDozMDE6MjkxXFx0Y29tbW9uXFx0ZmNob3duYXRcXHRcXHRcXHRzeXNfZmNob3duYXRcXG5hcmNoL202OGsva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsLTMwMi0yOTJcXHRjb21tb25cXHRmdXRpbWVzYXRcXHRcXHRcXHRzeXNfZnV0aW1lc2F0X3RpbWUzMlxcbi0tXFxuYXJjaC9taWNyb2JsYXplL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibC0zMDctMjk3XFx0Y29tbW9uXFx0bWtub2RhdFxcdFxcdFxcdFxcdHN5c19ta25vZGF0XFxuYXJjaC9taWNyb2JsYXplL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibDozMDg6Mjk4XFx0Y29tbW9uXFx0ZmNob3duYXRcXHRcXHRcXHRzeXNfZmNob3duYXRcXG5hcmNoL21pY3JvYmxhemUva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsLTMwOS0yOTlcXHRjb21tb25cXHRmdXRpbWVzYXRcXHRcXHRcXHRzeXNfZnV0aW1lc2F0X3RpbWUzMlxcbi0tXFxuYXJjaC9taXBzL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsX24zMi50YmwtMjY0LTI1M1xcdG4zMlxcdG1rbm9kYXRcXHRcXHRcXHRcXHRzeXNfbWtub2RhdFxcbmFyY2gvbWlwcy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbF9uMzIudGJsOjI2NToyNTRcXHRuMzJcXHRmY2hvd25hdFxcdFxcdFxcdHN5c19mY2hvd25hdFxcbmFyY2gvbWlwcy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbF9uMzIudGJsLTI2Ni0yNTVcXHRuMzJcXHRmdXRpbWVzYXRcXHRcXHRcXHRzeXNfZnV0aW1lc2F0X3RpbWUzMlxcbi0tXFxuYXJjaC9taXBzL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsX242NC50YmwtMjYwLTI0OVxcdG42NFxcdG1rbm9kYXRcXHRcXHRcXHRcXHRzeXNfbWtub2RhdFxcbmFyY2gvbWlwcy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbF9uNjQudGJsOjI2MToyNTBcXHRuNjRcXHRmY2hvd25hdFxcdFxcdFxcdHN5c19mY2hvd25hdFxcbmFyY2gvbWlwcy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbF9uNjQudGJsLTI2Mi0yNTFcXHRuNjRcXHRmdXRpbWVzYXRcXHRcXHRcXHRzeXNfZnV0aW1lc2F0XFxuLS1cXG5hcmNoL21pcHMva2VybmVsL3N5c2NhbGxzL3N5c2NhbGxfbzMyLnRibC0zMDQtMjkwXFx0bzMyXFx0bWtub2RhdFxcdFxcdFxcdFxcdHN5c19ta25vZGF0XFxuYXJjaC9taXBzL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsX28zMi50Ymw6MzA1OjI5MVxcdG8zMlxcdGZjaG93bmF0XFx0XFx0XFx0c3lzX2ZjaG93bmF0XFxuYXJjaC9taXBzL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsX28zMi50YmwtMzA2LTI5MlxcdG8zMlxcdGZ1dGltZXNhdFxcdFxcdFxcdHN5c19mdXRpbWVzYXRfdGltZTMyXFxuLS1cXG5hcmNoL3BhcmlzYy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmwtMzE0LTI3N1xcdGNvbW1vblxcdG1rbm9kYXRcXHRcXHRcXHRzeXNfbWtub2RhdFxcbmFyY2gvcGFyaXNjL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibDozMTU6Mjc4XFx0Y29tbW9uXFx0ZmNob3duYXRcXHRcXHRzeXNfZmNob3duYXRcXG5hcmNoL3BhcmlzYy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmwtMzE2LTI3OVxcdDMyXFx0ZnV0aW1lc2F0XFx0XFx0c3lzX2Z1dGltZXNhdF90aW1lMzJcXG4tLVxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmwtMzc1LTI4OFxcdGNvbW1vblxcdG1rbm9kYXRcXHRcXHRcXHRcXHRzeXNfbWtub2RhdFxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50Ymw6Mzc2OjI4OVxcdGNvbW1vblxcdGZjaG93bmF0XFx0XFx0XFx0c3lzX2ZjaG93bmF0XFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibC0zNzctMjkwXFx0MzJcXHRmdXRpbWVzYXRcXHRcXHRcXHRzeXNfZnV0aW1lc2F0X3RpbWUzMlxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibC0yNDQtMjkwXFx0Y29tbW9uXFx0bWtub2RhdFxcdFxcdFxcdFxcdHN5c19ta25vZGF0XFxuYXJjaC9zMzkwL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibDoyNDU6MjkxXFx0Y29tbW9uXFx0ZmNob3duYXRcXHRcXHRcXHRzeXNfZmNob3duYXRcXG5hcmNoL3MzOTAva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsLTI0Ni0yOTJcXHRjb21tb25cXHRmdXRpbWVzYXRcXHRcXHRcXHRzeXNfZnV0aW1lc2F0XFxuLS1cXG5hcmNoL3NoL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibC0zMDctMjk3XFx0Y29tbW9uXFx0bWtub2RhdFxcdFxcdFxcdFxcdHN5c19ta25vZGF0XFxuYXJjaC9zaC9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50Ymw6MzA4OjI5OFxcdGNvbW1vblxcdGZjaG93bmF0XFx0XFx0XFx0c3lzX2ZjaG93bmF0XFxuYXJjaC9zaC9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmwtMzA5LTI5OVxcdGNvbW1vblxcdGZ1dGltZXNhdFxcdFxcdFxcdHN5c19mdXRpbWVzYXRfdGltZTMyXFxuLS1cXG5hcmNoL3NwYXJjL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibC0zNDktMjg2XFx0Y29tbW9uXFx0bWtub2RhdFxcdFxcdFxcdHN5c19ta25vZGF0XFxuYXJjaC9zcGFyYy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50Ymw6MzUwOjI4N1xcdGNvbW1vblxcdGZjaG93bmF0XFx0XFx0c3lzX2ZjaG93bmF0XFxuYXJjaC9zcGFyYy9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmwtMzUxLTI4OFxcdDMyXFx0ZnV0aW1lc2F0XFx0XFx0c3lzX2Z1dGltZXNhdF90aW1lMzJcXG4tLVxcbmFyY2gveDg2L2VudHJ5L3N5c2NhbGxzL3N5c2NhbGxfMzIudGJsLTMxMi0yOTdcXHRpMzg2XFx0bWtub2RhdFxcdFxcdFxcdHN5c19ta25vZGF0XFxuYXJjaC94ODYvZW50cnkvc3lzY2FsbHMvc3lzY2FsbF8zMi50Ymw6MzEzOjI5OFxcdGkzODZcXHRmY2hvd25hdFxcdFxcdHN5c19mY2hvd25hdFxcbmFyY2gveDg2L2VudHJ5L3N5c2NhbGxzL3N5c2NhbGxfMzIudGJsLTMxNC0yOTlcXHRpMzg2XFx0ZnV0aW1lc2F0XFx0XFx0c3lzX2Z1dGltZXNhdF90aW1lMzJcXG4tLVxcbmFyY2gveDg2L2VudHJ5L3N5c2NhbGxzL3N5c2NhbGxfNjQudGJsLTI3MS0yNTlcXHRjb21tb25cXHRta25vZGF0XFx0XFx0XFx0c3lzX21rbm9kYXRcXG5hcmNoL3g4Ni9lbnRyeS9zeXNjYWxscy9zeXNjYWxsXzY0LnRibDoyNzI6MjYwXFx0Y29tbW9uXFx0ZmNob3duYXRcXHRcXHRzeXNfZmNob3duYXRcXG5hcmNoL3g4Ni9lbnRyeS9zeXNjYWxscy9zeXNjYWxsXzY0LnRibC0yNzMtMjYxXFx0Y29tbW9uXFx0ZnV0aW1lc2F0XFx0XFx0c3lzX2Z1dGltZXNhdFxcbi0tXFxuYXJjaC94dGVuc2Eva2VybmVsL3N5c2NhbGxzL3N5c2NhbGwudGJsLTMxOS0yOTZcXHRjb21tb25cXHR1dGltZW5zYXRcXHRcXHRcXHRzeXNfdXRpbWVuc2F0X3RpbWUzMlxcbmFyY2gveHRlbnNhL2tlcm5lbC9zeXNjYWxscy9zeXNjYWxsLnRibDozMjA6Mjk3XFx0Y29tbW9uXFx0ZmNob3duYXRcXHRcXHRcXHRzeXNfZmNob3duYXRcXG5hcmNoL3h0ZW5zYS9rZXJuZWwvc3lzY2FsbHMvc3lzY2FsbC50YmwtMzIxLTI5OFxcdGNvbW1vblxcdGZ1dGltZXNhdFxcdFxcdFxcdHN5c19mdXRpbWVzYXRfdGltZTMyXFxuLS1cXG5mcy9pbnRlcm5hbC5oPTIwMz1pbnQgY2htb2RfY29tbW9uKGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLCB1bW9kZV90IG1vZGUpO1xcbmZzL2ludGVybmFsLmg6MjA0OmludCBkb19mY2hvd25hdChpbnQgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqZmlsZW5hbWUsIHVpZF90IHVzZXIsIGdpZF90IGdyb3VwLFxcbmZzL2ludGVybmFsLmgtMjA1LVxcdFxcdGludCBmbGFnKTtcXG4tLVxcbmZzL29wZW4uYz03Mzk9aW50IGNob3duX2NvbW1vbihjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwgdWlkX3QgdXNlciwgZ2lkX3QgZ3JvdXApXFxuLS1cXG5mcy9vcGVuLmMtNzg2LVxcbmZzL29wZW4uYzo3ODc6aW50IGRvX2ZjaG93bmF0KGludCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICpmaWxlbmFtZSwgdWlkX3QgdXNlciwgZ2lkX3QgZ3JvdXAsXFxuZnMvb3Blbi5jLTc4OC1cXHRcXHRpbnQgZmxhZylcXG4tLVxcbmZzL29wZW4uYy04MTUtXFxuZnMvb3Blbi5jOjgxNjpTWVNDQUxMX0RFRklORTUoZmNob3duYXQsIGludCwgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqLCBmaWxlbmFtZSwgdWlkX3QsIHVzZXIsXFxuZnMvb3Blbi5jLTgxNy1cXHRcXHRnaWRfdCwgZ3JvdXAsIGludCwgZmxhZylcXG5mcy9vcGVuLmMtODE4LXtcXG5mcy9vcGVuLmM6ODE5OlxcdHJldHVybiBkb19mY2hvd25hdChkZmQsIGZpbGVuYW1lLCB1c2VyLCBncm91cCwgZmxhZyk7XFxuZnMvb3Blbi5jLTgyMC19XFxuLS1cXG5mcy9vcGVuLmM9ODIyPVNZU0NBTExfREVGSU5FMyhjaG93biwgY29uc3QgY2hhciBfX3VzZXIgKiwgZmlsZW5hbWUsIHVpZF90LCB1c2VyLCBnaWRfdCwgZ3JvdXApXFxuZnMvb3Blbi5jLTgyMy17XFxuZnMvb3Blbi5jOjgyNDpcXHRyZXR1cm4gZG9fZmNob3duYXQoQVRfRkRDV0QsIGZpbGVuYW1lLCB1c2VyLCBncm91cCwgMCk7XFxuZnMvb3Blbi5jLTgyNS19XFxuLS1cXG5mcy9vcGVuLmM9ODI3PVNZU0NBTExfREVGSU5FMyhsY2hvd24sIGNvbnN0IGNoYXIgX191c2VyICosIGZpbGVuYW1lLCB1aWRfdCwgdXNlciwgZ2lkX3QsIGdyb3VwKVxcbmZzL29wZW4uYy04Mjgte1xcbmZzL29wZW4uYzo4Mjk6XFx0cmV0dXJuIGRvX2ZjaG93bmF0KEFUX0ZEQ1dELCBmaWxlbmFtZSwgdXNlciwgZ3JvdXAsXFxuZnMvb3Blbi5jLTgzMC1cXHRcXHRcXHQgICBBVF9TWU1MSU5LX05PRk9MTE9XKTtcXG4tLVxcbmluY2x1ZGUvYXNtLWdlbmVyaWMvYXVkaXRfY2hhbmdlX2F0dHIuaD0yND1fX05SX2ZyZW1vdmV4YXR0cixcXG5pbmNsdWRlL2FzbS1nZW5lcmljL2F1ZGl0X2NoYW5nZV9hdHRyLmg6MjU6I2lmZGVmIF9fTlJfZmNob3duYXRcXG5pbmNsdWRlL2FzbS1nZW5lcmljL2F1ZGl0X2NoYW5nZV9hdHRyLmg6MjY6X19OUl9mY2hvd25hdCxcXG5pbmNsdWRlL2FzbS1nZW5lcmljL2F1ZGl0X2NoYW5nZV9hdHRyLmgtMjctX19OUl9mY2htb2RhdCxcXG4tLVxcbmluY2x1ZGUvbGludXgvc3lzY2FsbHMuaD00NjM9YXNtbGlua2FnZSBsb25nIHN5c19mY2htb2RhdDIoaW50IGRmZCwgY29uc3QgY2hhciBfX3VzZXIgKmZpbGVuYW1lLFxcbmluY2x1ZGUvbGludXgvc3lzY2FsbHMuaC00NjQtXFx0XFx0XFx0ICAgICB1bW9kZV90IG1vZGUsIHVuc2lnbmVkIGludCBmbGFncyk7XFxuaW5jbHVkZS9saW51eC9zeXNjYWxscy5oOjQ2NTphc21saW5rYWdlIGxvbmcgc3lzX2ZjaG93bmF0KGludCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICpmaWxlbmFtZSwgdWlkX3QgdXNlcixcXG5pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmgtNDY2LVxcdFxcdFxcdCAgICAgZ2lkX3QgZ3JvdXAsIGludCBmbGFnKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvc3lzY2FsbHMuaD0xMjY4PWludCBjb21wYXRfa3N5c19pcGModTMyIGNhbGwsIGludCBmaXJzdCwgaW50IHNlY29uZCxcXG4tLVxcbmluY2x1ZGUvbGludXgvc3lzY2FsbHMuaC0xMjc0LSAqL1xcbmluY2x1ZGUvbGludXgvc3lzY2FsbHMuaDoxMjc1OmV4dGVybiBpbnQgZG9fZmNob3duYXQoaW50IGRmZCwgY29uc3QgY2hhciBfX3VzZXIgKmZpbGVuYW1lLCB1aWRfdCB1c2VyLFxcbmluY2x1ZGUvbGludXgvc3lzY2FsbHMuaC0xMjc2LVxcdFxcdCAgICAgICBnaWRfdCBncm91cCwgaW50IGZsYWcpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9zeXNjYWxscy5oPTEyNzg9c3RhdGljIGlubGluZSBsb25nIGtzeXNfY2hvd24oY29uc3QgY2hhciBfX3VzZXIgKmZpbGVuYW1lLCB1aWRfdCB1c2VyLFxcbi0tXFxuaW5jbHVkZS9saW51eC9zeXNjYWxscy5oLTEyODAte1xcbmluY2x1ZGUvbGludXgvc3lzY2FsbHMuaDoxMjgxOlxcdHJldHVybiBkb19mY2hvd25hdChBVF9GRENXRCwgZmlsZW5hbWUsIHVzZXIsIGdyb3VwLCAwKTtcXG5pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmgtMTI4Mi19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmg9MTI4ND1zdGF0aWMgaW5saW5lIGxvbmcga3N5c19sY2hvd24oY29uc3QgY2hhciBfX3VzZXIgKmZpbGVuYW1lLCB1aWRfdCB1c2VyLFxcbi0tXFxuaW5jbHVkZS9saW51eC9zeXNjYWxscy5oLTEyODYte1xcbmluY2x1ZGUvbGludXgvc3lzY2FsbHMuaDoxMjg3OlxcdHJldHVybiBkb19mY2hvd25hdChBVF9GRENXRCwgZmlsZW5hbWUsIHVzZXIsIGdyb3VwLFxcbmluY2x1ZGUvbGludXgvc3lzY2FsbHMuaC0xMjg4LVxcdFxcdFxcdCAgICAgQVRfU1lNTElOS19OT0ZPTExPVyk7XFxuLS1cXG5pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvdW5pc3RkLmg9MTUzPV9fU1lTQ0FMTChfX05SX2ZjaG1vZGF0LCBzeXNfZmNobW9kYXQpXFxuaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL3VuaXN0ZC5oOjE1NDojZGVmaW5lIF9fTlJfZmNob3duYXQgNTRcXG5pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvdW5pc3RkLmg6MTU1Ol9fU1lTQ0FMTChfX05SX2ZjaG93bmF0LCBzeXNfZmNob3duYXQpXFxuaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL3VuaXN0ZC5oLTE1Ni0jZGVmaW5lIF9fTlJfZmNob3duIDU1XFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc3lzY2FsbHMuYz0xMDYwPXN0YXRpYyB2b2lkIGNoZWNrX2ZhdWx0YWJsZV9zeXNjYWxsKHN0cnVjdCB0cmFjZV9ldmVudF9jYWxsICpjYWxsLCBpbnQgbnIpXFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2Vfc3lzY2FsbHMuYy0xMTYzLVxcdGNhc2UgX19OUl9mY2htb2RhdDI6XFxua2VybmVsL3RyYWNlL3RyYWNlX3N5c2NhbGxzLmM6MTE2NDpcXHRjYXNlIF9fTlJfZmNob3duYXQ6XFxua2VybmVsL3RyYWNlL3RyYWNlX3N5c2NhbGxzLmMtMTE2NS1cXHRjYXNlIF9fTlJfZmdldHhhdHRyOlxcbi0tXFxuc2NyaXB0cy9jaGVja3N5c2NhbGxzLnNoPTE4PWNhdCBcXHUwMDNjXFx1MDAzYyBFT0ZcXG4tLVxcbnNjcmlwdHMvY2hlY2tzeXNjYWxscy5zaC0yNy0jZGVmaW5lIF9fSUdOT1JFX2NobW9kXFx0XFx0LyogZmNobW9kYXQgKi9cXG5zY3JpcHRzL2NoZWNrc3lzY2FsbHMuc2g6Mjg6I2RlZmluZSBfX0lHTk9SRV9jaG93blxcdFxcdC8qIGZjaG93bmF0ICovXFxuc2NyaXB0cy9jaGVja3N5c2NhbGxzLnNoLTI5LSNkZWZpbmUgX19JR05PUkVfbWtkaXJcXHRcXHQvKiBta2RpcmF0ICovXFxuc2NyaXB0cy9jaGVja3N5c2NhbGxzLnNoLTMwLSNkZWZpbmUgX19JR05PUkVfcm1kaXJcXHRcXHQvKiB1bmxpbmthdCAqL1xcbnNjcmlwdHMvY2hlY2tzeXNjYWxscy5zaDozMTojZGVmaW5lIF9fSUdOT1JFX2xjaG93blxcdFxcdC8qIGZjaG93bmF0ICovXFxuc2NyaXB0cy9jaGVja3N5c2NhbGxzLnNoLTMyLSNkZWZpbmUgX19JR05PUkVfYWNjZXNzXFx0XFx0LyogZmFjY2Vzc2F0ICovXFxuLS1cXG5zY3JpcHRzL3N5c2NhbGwudGJsLTcxLTUzXFx0Y29tbW9uXFx0ZmNobW9kYXRcXHRcXHRcXHRzeXNfZmNobW9kYXRcXG5zY3JpcHRzL3N5c2NhbGwudGJsOjcyOjU0XFx0Y29tbW9uXFx0ZmNob3duYXRcXHRcXHRcXHRzeXNfZmNob3duYXRcXG5zY3JpcHRzL3N5c2NhbGwudGJsLTczLTU1XFx0Y29tbW9uXFx0ZmNob3duXFx0XFx0XFx0XFx0c3lzX2ZjaG93blxcbi0tXFxudG9vbHMvaW5jbHVkZS9ub2xpYmMvc3lzLmg9MjAwPWludCBfc3lzX2Nob3duKGNvbnN0IGNoYXIgKnBhdGgsIHVpZF90IG93bmVyLCBnaWRfdCBncm91cClcXG50b29scy9pbmNsdWRlL25vbGliYy9zeXMuaC0yMDEte1xcbnRvb2xzL2luY2x1ZGUvbm9saWJjL3N5cy5oOjIwMjojaWYgZGVmaW5lZChfX05SX2ZjaG93bmF0KVxcbnRvb2xzL2luY2x1ZGUvbm9saWJjL3N5cy5oOjIwMzpcXHRyZXR1cm4gX19ub2xpYmNfc3lzY2FsbDUoX19OUl9mY2hvd25hdCwgQVRfRkRDV0QsIHBhdGgsIG93bmVyLCBncm91cCwgMCk7XFxudG9vbHMvaW5jbHVkZS9ub2xpYmMvc3lzLmgtMjA0LSNlbHNlXFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvdW5pc3RkLmg9MTUzPV9fU1lTQ0FMTChfX05SX2ZjaG1vZGF0LCBzeXNfZmNobW9kYXQpXFxudG9vbHMvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL3VuaXN0ZC5oOjE1NDojZGVmaW5lIF9fTlJfZmNob3duYXQgNTRcXG50b29scy9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvdW5pc3RkLmg6MTU1Ol9fU1lTQ0FMTChfX05SX2ZjaG93bmF0LCBzeXNfZmNob3duYXQpXFxudG9vbHMvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL3VuaXN0ZC5oLTE1Ni0jZGVmaW5lIF9fTlJfZmNob3duIDU1XFxuLS1cXG50b29scy9wZXJmL2FyY2gvYWxwaGEvZW50cnkvc3lzY2FsbHMvc3lzY2FsbC50YmwtMzgzLTQ1MlxcdGNvbW1vblxcdG1rbm9kYXRcXHRcXHRcXHRcXHRzeXNfbWtub2RhdFxcbnRvb2xzL3BlcmYvYXJjaC9hbHBoYS9lbnRyeS9zeXNjYWxscy9zeXNjYWxsLnRibDozODQ6NDUzXFx0Y29tbW9uXFx0ZmNob3duYXRcXHRcXHRcXHRzeXNfZmNob3duYXRcXG50b29scy9wZXJmL2FyY2gvYWxwaGEvZW50cnkvc3lzY2FsbHMvc3lzY2FsbC50YmwtMzg1LTQ1NFxcdGNvbW1vblxcdGZ1dGltZXNhdFxcdFxcdFxcdHN5c19mdXRpbWVzYXRcXG4tLVxcbnRvb2xzL3BlcmYvYXJjaC9hcm0vZW50cnkvc3lzY2FsbHMvc3lzY2FsbC50YmwtMzQyLTMyNFxcdGNvbW1vblxcdG1rbm9kYXRcXHRcXHRcXHRzeXNfbWtub2RhdFxcbnRvb2xzL3BlcmYvYXJjaC9hcm0vZW50cnkvc3lzY2FsbHMvc3lzY2FsbC50Ymw6MzQzOjMyNVxcdGNvbW1vblxcdGZjaG93bmF0XFx0XFx0c3lzX2ZjaG93bmF0XFxudG9vbHMvcGVyZi9hcmNoL2FybS9lbnRyeS9zeXNjYWxscy9zeXNjYWxsLnRibC0zNDQtMzI2XFx0Y29tbW9uXFx0ZnV0aW1lc2F0XFx0XFx0c3lzX2Z1dGltZXNhdF90aW1lMzJcXG4tLVxcbnRvb2xzL3BlcmYvYXJjaC9hcm02NC9lbnRyeS9zeXNjYWxscy9zeXNjYWxsXzMyLnRibC0zMzktMzI0XFx0Y29tbW9uXFx0bWtub2RhdFxcdFxcdFxcdHN5c19ta25vZGF0XFxudG9vbHMvcGVyZi9hcmNoL2FybTY0L2VudHJ5L3N5c2NhbGxzL3N5c2NhbGxfMzIudGJsOjM0MDozMjVcXHRjb21tb25cXHRmY2hvd25hdFxcdFxcdHN5c19mY2hvd25hdFxcbnRvb2xzL3BlcmYvYXJjaC9hcm02NC9lbnRyeS9zeXNjYWxscy9zeXNjYWxsXzMyLnRibC0zNDEtMzI2XFx0Y29tbW9uXFx0ZnV0aW1lc2F0XFx0XFx0c3lzX2Z1dGltZXNhdF90aW1lMzJcXG4tLVxcbnRvb2xzL3BlcmYvYXJjaC9taXBzL2VudHJ5L3N5c2NhbGxzL3N5c2NhbGxfbjY0LnRibC0yNjAtMjQ5XFx0bjY0XFx0bWtub2RhdFxcdFxcdFxcdFxcdHN5c19ta25vZGF0XFxudG9vbHMvcGVyZi9hcmNoL21pcHMvZW50cnkvc3lzY2FsbHMvc3lzY2FsbF9uNjQudGJsOjI2MToyNTBcXHRuNjRcXHRmY2hvd25hdFxcdFxcdFxcdHN5c19mY2hvd25hdFxcbnRvb2xzL3BlcmYvYXJjaC9taXBzL2VudHJ5L3N5c2NhbGxzL3N5c2NhbGxfbjY0LnRibC0yNjItMjUxXFx0bjY0XFx0ZnV0aW1lc2F0XFx0XFx0XFx0c3lzX2Z1dGltZXNhdFxcbi0tXFxudG9vbHMvcGVyZi9hcmNoL3BhcmlzYy9lbnRyeS9zeXNjYWxscy9zeXNjYWxsLnRibC0zMTQtMjc3XFx0Y29tbW9uXFx0bWtub2RhdFxcdFxcdFxcdHN5c19ta25vZGF0XFxudG9vbHMvcGVyZi9hcmNoL3BhcmlzYy9lbnRyeS9zeXNjYWxscy9zeXNjYWxsLnRibDozMTU6Mjc4XFx0Y29tbW9uXFx0ZmNob3duYXRcXHRcXHRzeXNfZmNob3duYXRcXG50b29scy9wZXJmL2FyY2gvcGFyaXNjL2VudHJ5L3N5c2NhbGxzL3N5c2NhbGwudGJsLTMxNi0yNzlcXHQzMlxcdGZ1dGltZXNhdFxcdFxcdHN5c19mdXRpbWVzYXRfdGltZTMyXFxuLS1cXG50b29scy9wZXJmL2FyY2gvcG93ZXJwYy9lbnRyeS9zeXNjYWxscy9zeXNjYWxsLnRibC0zNzUtMjg4XFx0Y29tbW9uXFx0bWtub2RhdFxcdFxcdFxcdFxcdHN5c19ta25vZGF0XFxudG9vbHMvcGVyZi9hcmNoL3Bvd2VycGMvZW50cnkvc3lzY2FsbHMvc3lzY2FsbC50Ymw6Mzc2OjI4OVxcdGNvbW1vblxcdGZjaG93bmF0XFx0XFx0XFx0c3lzX2ZjaG93bmF0XFxudG9vbHMvcGVyZi9hcmNoL3Bvd2VycGMvZW50cnkvc3lzY2FsbHMvc3lzY2FsbC50YmwtMzc3LTI5MFxcdDMyXFx0ZnV0aW1lc2F0XFx0XFx0XFx0c3lzX2Z1dGltZXNhdF90aW1lMzJcXG4tLVxcbnRvb2xzL3BlcmYvYXJjaC9zMzkwL2VudHJ5L3N5c2NhbGxzL3N5c2NhbGwudGJsLTI0NC0yOTBcXHRjb21tb25cXHRta25vZGF0XFx0XFx0XFx0XFx0c3lzX21rbm9kYXRcXG50b29scy9wZXJmL2FyY2gvczM5MC9lbnRyeS9zeXNjYWxscy9zeXNjYWxsLnRibDoyNDU6MjkxXFx0Y29tbW9uXFx0ZmNob3duYXRcXHRcXHRcXHRzeXNfZmNob3duYXRcXG50b29scy9wZXJmL2FyY2gvczM5MC9lbnRyeS9zeXNjYWxscy9zeXNjYWxsLnRibC0yNDYtMjkyXFx0Y29tbW9uXFx0ZnV0aW1lc2F0XFx0XFx0XFx0c3lzX2Z1dGltZXNhdFxcbi0tXFxudG9vbHMvcGVyZi9hcmNoL3NoL2VudHJ5L3N5c2NhbGxzL3N5c2NhbGwudGJsLTMwNy0yOTdcXHRjb21tb25cXHRta25vZGF0XFx0XFx0XFx0XFx0c3lzX21rbm9kYXRcXG50b29scy9wZXJmL2FyY2gvc2gvZW50cnkvc3lzY2FsbHMvc3lzY2FsbC50Ymw6MzA4OjI5OFxcdGNvbW1vblxcdGZjaG93bmF0XFx0XFx0XFx0c3lzX2ZjaG93bmF0XFxudG9vbHMvcGVyZi9hcmNoL3NoL2VudHJ5L3N5c2NhbGxzL3N5c2NhbGwudGJsLTMwOS0yOTlcXHRjb21tb25cXHRmdXRpbWVzYXRcXHRcXHRcXHRzeXNfZnV0aW1lc2F0X3RpbWUzMlxcbi0tXFxudG9vbHMvcGVyZi9hcmNoL3NwYXJjL2VudHJ5L3N5c2NhbGxzL3N5c2NhbGwudGJsLTM0OS0yODZcXHRjb21tb25cXHRta25vZGF0XFx0XFx0XFx0c3lzX21rbm9kYXRcXG50b29scy9wZXJmL2FyY2gvc3BhcmMvZW50cnkvc3lzY2FsbHMvc3lzY2FsbC50Ymw6MzUwOjI4N1xcdGNvbW1vblxcdGZjaG93bmF0XFx0XFx0c3lzX2ZjaG93bmF0XFxudG9vbHMvcGVyZi9hcmNoL3NwYXJjL2VudHJ5L3N5c2NhbGxzL3N5c2NhbGwudGJsLTM1MS0yODhcXHQzMlxcdGZ1dGltZXNhdFxcdFxcdHN5c19mdXRpbWVzYXRfdGltZTMyXFxuLS1cXG50b29scy9wZXJmL2FyY2gveDg2L2VudHJ5L3N5c2NhbGxzL3N5c2NhbGxfMzIudGJsLTMxMi0yOTdcXHRpMzg2XFx0bWtub2RhdFxcdFxcdFxcdHN5c19ta25vZGF0XFxudG9vbHMvcGVyZi9hcmNoL3g4Ni9lbnRyeS9zeXNjYWxscy9zeXNjYWxsXzMyLnRibDozMTM6Mjk4XFx0aTM4NlxcdGZjaG93bmF0XFx0XFx0c3lzX2ZjaG93bmF0XFxudG9vbHMvcGVyZi9hcmNoL3g4Ni9lbnRyeS9zeXNjYWxscy9zeXNjYWxsXzMyLnRibC0zMTQtMjk5XFx0aTM4NlxcdGZ1dGltZXNhdFxcdFxcdHN5c19mdXRpbWVzYXRfdGltZTMyXFxuLS1cXG50b29scy9wZXJmL2FyY2gveDg2L2VudHJ5L3N5c2NhbGxzL3N5c2NhbGxfNjQudGJsLTI3MS0yNTlcXHRjb21tb25cXHRta25vZGF0XFx0XFx0XFx0c3lzX21rbm9kYXRcXG50b29scy9wZXJmL2FyY2gveDg2L2VudHJ5L3N5c2NhbGxzL3N5c2NhbGxfNjQudGJsOjI3MjoyNjBcXHRjb21tb25cXHRmY2hvd25hdFxcdFxcdHN5c19mY2hvd25hdFxcbnRvb2xzL3BlcmYvYXJjaC94ODYvZW50cnkvc3lzY2FsbHMvc3lzY2FsbF82NC50YmwtMjczLTI2MVxcdGNvbW1vblxcdGZ1dGltZXNhdFxcdFxcdHN5c19mdXRpbWVzYXRcXG4tLVxcbnRvb2xzL3BlcmYvYXJjaC94dGVuc2EvZW50cnkvc3lzY2FsbHMvc3lzY2FsbC50YmwtMzE5LTI5NlxcdGNvbW1vblxcdHV0aW1lbnNhdFxcdFxcdFxcdHN5c191dGltZW5zYXRfdGltZTMyXFxudG9vbHMvcGVyZi9hcmNoL3h0ZW5zYS9lbnRyeS9zeXNjYWxscy9zeXNjYWxsLnRibDozMjA6Mjk3XFx0Y29tbW9uXFx0ZmNob3duYXRcXHRcXHRcXHRzeXNfZmNob3duYXRcXG50b29scy9wZXJmL2FyY2gveHRlbnNhL2VudHJ5L3N5c2NhbGxzL3N5c2NhbGwudGJsLTMyMS0yOThcXHRjb21tb25cXHRmdXRpbWVzYXRcXHRcXHRcXHRzeXNfZnV0aW1lc2F0X3RpbWUzMlxcbi0tXFxudG9vbHMvcGVyZi9idWlsdGluLXRyYWNlLmM9MTEzND1zdGF0aWMgY29uc3Qgc3RydWN0IHN5c2NhbGxfZm10IHN5c2NhbGxfZm10c1tdID0ge1xcbi0tXFxudG9vbHMvcGVyZi9idWlsdGluLXRyYWNlLmMtMTE3OS1cXHQgIC5hcmcgPSB7IFswXSA9IHsgLnNjbnByaW50ZiA9IFNDQV9GREFULCAvKiBmZCAqLyB9LCB9LCB9LFxcbnRvb2xzL3BlcmYvYnVpbHRpbi10cmFjZS5jOjExODA6XFx0eyAubmFtZVxcdCAgICA9IFxcXCJmY2hvd25hdFxcXCIsXFxudG9vbHMvcGVyZi9idWlsdGluLXRyYWNlLmMtMTE4MS1cXHQgIC5hcmcgPSB7IFswXSA9IHsgLnNjbnByaW50ZiA9IFNDQV9GREFULCAvKiBmZCAqLyB9LCB9LCB9LFxcbi0tXFxudG9vbHMvcGVyZi90cmFjZS9zdHJhY2UvZ3JvdXBzL3N0cmluZz0xMz1mY2htb2RhdFxcbnRvb2xzL3BlcmYvdHJhY2Uvc3RyYWNlL2dyb3Vwcy9zdHJpbmc6MTQ6ZmNob3duYXRcXG50b29scy9wZXJmL3RyYWNlL3N0cmFjZS9ncm91cHMvc3RyaW5nLTE1LWZnZXR4YXR0clxcbi0tXFxudG9vbHMvc2NyaXB0cy9zeXNjYWxsLnRibC03MS01M1xcdGNvbW1vblxcdGZjaG1vZGF0XFx0XFx0XFx0c3lzX2ZjaG1vZGF0XFxudG9vbHMvc2NyaXB0cy9zeXNjYWxsLnRibDo3Mjo1NFxcdGNvbW1vblxcdGZjaG93bmF0XFx0XFx0XFx0c3lzX2ZjaG93bmF0XFxudG9vbHMvc2NyaXB0cy9zeXNjYWxsLnRibC03My01NVxcdGNvbW1vblxcdGZjaG93blxcdFxcdFxcdFxcdHN5c19mY2hvd25cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL292ZXJsYXlmcy9pZG1hcHBlZF9tb3VudHMuYz0zNDY9VEVTVF9GKGlkbWFwcGVkX292ZXJsYXksIGNob3duKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvb3ZlcmxheWZzL2lkbWFwcGVkX21vdW50cy5jLTM2Mi1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9vdmVybGF5ZnMvaWRtYXBwZWRfbW91bnRzLmM6MzYzOlxcdEFTU0VSVF9FUShmY2hvd25hdChvdmwsIFxcXCJmXFxcIiwgSURfTlMgKyA1LCBJRF9OUyArIDUsIDApLCAwKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9vdmVybGF5ZnMvaWRtYXBwZWRfbW91bnRzLmMtMzY0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxNjo1MDoxMy41MDQ3NjYxOTFaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg0ODUxMzE1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgZG9fZmNob3duYXRgKipcblxuT2theSwgbGV0J3MgZHJpbGwgZG93biBpbnRvIGBkb19mY2hvd25hdGAgaW4gYGZzL29wZW4uY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmbG93IGFuZCBwb3RlbnRpYWwgZ290Y2hhcy4gSSdtIGltbWVkaWF0ZWx5IGludGVyZXN0ZWQgaW4gdGhlIGFjY2VzcyBjb250cm9sIGltcGxpY2F0aW9ucyBvZiB0aGlzIHN5c3RlbSBjYWxsLiBXaGF0IGNoZWNrcyBhcmUgcGVyZm9ybWVkIGZvciBlZmZlY3RpdmUgdXNlci9ncm91cCBJRCBjb21iaW5hdGlvbnM/IFdoYXQgZWRnZSBjYXNlcyBleGlzdCByZWdhcmRpbmcgc3ltbGlua3MgYW5kIGNyb3NzLWZpbGVzeXN0ZW0gb3BlcmF0aW9ucz8gSSdsbCBwcm9iYWJseSBiZSBsb29raW5nIGZvciB0aGUgaW50ZXJwbGF5IHdpdGggY2FwYWJpbGl0aWVzIGFuZCBzZWN1cml0eSBtb2R1bGVzIChTRUxpbnV4LCBBcHBBcm1vciwgZXRjLikuIEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBJIHNob3VsZCBiZSBtaW5kZnVsIG9mLCBwYXJ0aWN1bGFybHkgd2hlbiBkZWFsaW5nIHdpdGggY29uY3VycmVudCBmaWxlIGFjY2VzcyBhbmQgcGVybWlzc2lvbnMgY2hhbmdlcz8gSSBleHBlY3QgdG8gc2VlIGNoZWNrcyByZWxhdGVkIHRvIHRoZSBgQVRfRU1QVFlfUEFUSGAgYW5kIGBBVF9TWU1MSU5LX05PRk9MTE9XYCBmbGFnczsgSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGV5J3JlIGhhbmRsZWQgY29ycmVjdGx5IHRvIHByZXZlbnQgcHJpdmlsZWdlIGVzY2FsYXRpb24uIFRpbWUgdG8gZ3JhYiBteSBncmVwIGFuZCBzdGFydCBkaXNzZWN0aW5nIHRoaXMgdGhpbmcuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY3NjUsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxNjo1MDoxNy4zNTMyODE0NDJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTA1ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvb3Blbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc4NyxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDc4NzpcXHRpbnQgZG9fZmNob3duYXQoaW50IGRmZCwgY29uc3QgY2hhciBfX3VzZXIgKmZpbGVuYW1lLCB1aWRfdCB1c2VyLCBnaWRfdCBncm91cCxcXG4gNzg4OlxcdFxcdFxcdGludCBmbGFnKVxcbiA3ODk6XFx0e1xcbiA3OTA6XFx0XFx0c3RydWN0IHBhdGggcGF0aDtcXG4gNzkxOlxcdFxcdGludCBlcnJvcjtcXG4gNzkyOlxcdFxcdGludCBsb29rdXBfZmxhZ3M7XFxuIDc5MzpcXHRcXG4gNzk0OlxcdFxcdGlmICgoZmxhZyBcXHUwMDI2IH4oQVRfU1lNTElOS19OT0ZPTExPVyB8IEFUX0VNUFRZX1BBVEgpKSAhPSAwKVxcbiA3OTU6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDc5NjpcXHRcXG4gNzk3OlxcdFxcdGxvb2t1cF9mbGFncyA9IChmbGFnIFxcdTAwMjYgQVRfU1lNTElOS19OT0ZPTExPVykgPyAwIDogTE9PS1VQX0ZPTExPVztcXG4gNzk4OlxcdFxcdENMQVNTKGZpbGVuYW1lX3VmbGFncywgbmFtZSkoZmlsZW5hbWUsIGZsYWcpO1xcbiA3OTk6XFx0cmV0cnk6XFxuIDgwMDpcXHRcXHRlcnJvciA9IGZpbGVuYW1lX2xvb2t1cChkZmQsIG5hbWUsIGxvb2t1cF9mbGFncywgXFx1MDAyNnBhdGgsIE5VTEwpO1xcbiA4MDE6XFx0XFx0aWYgKCFlcnJvcikge1xcbiA4MDI6XFx0XFx0XFx0ZXJyb3IgPSBtbnRfd2FudF93cml0ZShwYXRoLm1udCk7XFxuIDgwMzpcXHRcXHRcXHRpZiAoIWVycm9yKSB7XFxuIDgwNDpcXHRcXHRcXHRcXHRlcnJvciA9IGNob3duX2NvbW1vbihcXHUwMDI2cGF0aCwgdXNlciwgZ3JvdXApO1xcbiA4MDU6XFx0XFx0XFx0XFx0bW50X2Ryb3Bfd3JpdGUocGF0aC5tbnQpO1xcbiA4MDY6XFx0XFx0XFx0fVxcbiA4MDc6XFx0XFx0XFx0cGF0aF9wdXQoXFx1MDAyNnBhdGgpO1xcbiA4MDg6XFx0XFx0XFx0aWYgKHJldHJ5X2VzdGFsZShlcnJvciwgbG9va3VwX2ZsYWdzKSkge1xcbiA4MDk6XFx0XFx0XFx0XFx0bG9va3VwX2ZsYWdzIHw9IExPT0tVUF9SRVZBTDtcXG4gODEwOlxcdFxcdFxcdFxcdGdvdG8gcmV0cnk7XFxuIDgxMTpcXHRcXHRcXHR9XFxuIDgxMjpcXHRcXHR9XFxuIDgxMzpcXHRcXHRyZXR1cm4gZXJyb3I7XFxuIDgxNDpcXHR9XFxuIDgxNTpcXHRcXG4gODE2OlxcdFNZU0NBTExfREVGSU5FNShmY2hvd25hdCwgaW50LCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICosIGZpbGVuYW1lLCB1aWRfdCwgdXNlcixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTY6NTA6MTcuMzUzMzczMzYyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0NDU0MjM4NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBJbXBsZW1lbnRhdGlvbiBvZiBgZG9fZmNob3duYXRgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IGBkb19mY2hvd25hdGAgd29ya3MsIGFuZCBpdCdzIHVzaW5nIGBmaWxlbmFtZV9sb29rdXAoZGZkLCBuYW1lLCBsb29rdXBfZmxhZ3MsIFx1MDAyNnBhdGgsIE5VTEwpYC4gIFRoYXQncyB0aGUgc3RhbmRhcmQgd2F5IHRvIHJlc29sdmUgYSBmaWxlbmFtZSByZWxhdGl2ZSB0byBhIGRpcmVjdG9yeSBmaWxlIGRlc2NyaXB0b3IsIEknbSBmYW1pbGlhciB3aXRoIHRoYXQuICBCdXQgd2FpdCBhIG1pbnV0ZSwgYGZpbGVuYW1lX2xvb2t1cGAgaXMgYWxzbyByZXNwb25zaWJsZSBmb3IgaGFuZGxpbmcgYEFUX0VNUFRZX1BBVEhgIGFuZCB0aG9zZSB0cmlja3kgYE9fUEFUSGAgZmlsZSBkZXNjcmlwdG9ycy4gIEludGVyZXN0aW5nLiBOb3cgaXQgaGFzIG1lIHdvbmRlcmluZywgZG9lcyBgZmlsZW5hbWVfbG9va3VwYCAqYWN0dWFsbHkqIHN1cHBvcnQgYE9fUEFUSGAgZmlsZSBkZXNjcmlwdG9ycz8gSSB0aG91Z2h0IHRoZSBvcmlnaW5hbCBjb2RlIG1pZ2h0IGhhdmUgYXZvaWRlZCB0aGlzLCBidXQgdGhpcyBtYWtlcyBtZSBjdXJpb3VzLiBJJ2QgYmV0dGVyIGRvdWJsZS1jaGVjayB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGZpbGVuYW1lX2xvb2t1cGAgaXRzZWxmLiBMZXQncyBnbyBkaXZlIGludG8gYGZzL25hbWVpLmNgIGFuZCBzZWUgd2hhdCdzIHJlYWxseSBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2QuIFRpbWUgdG8gY29uZmlybSBpZiBteSBhc3N1bXB0aW9ucyBhcmUgY29ycmVjdCwgb3IgaWYgSSdtIG1pc3Npbmcgc29tZXRoaW5nIGltcG9ydGFudCFcblxuXG4iLCJJbnB1dFRva2VucyI6Mjc1MDMsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE2OjUwOjIzLjc5ODc5OTU3N1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYzNzY4ODU2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgZmlsZW5hbWVfbG9va3VwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2ludGVybmFsLmg9NDk9ZXh0ZXJuIGludCBmaW5pc2hfY2xlYW5fY29udGV4dChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpO1xcbi0tXFxuZnMvaW50ZXJuYWwuaC01My0gKi9cXG5mcy9pbnRlcm5hbC5oOjU0OmV4dGVybiBpbnQgZmlsZW5hbWVfbG9va3VwKGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqbmFtZSwgdW5zaWduZWQgZmxhZ3MsXFxuZnMvaW50ZXJuYWwuaC01NS1cXHRcXHRcXHQgICBzdHJ1Y3QgcGF0aCAqcGF0aCwgY29uc3Qgc3RydWN0IHBhdGggKnJvb3QpO1xcbi0tXFxuZnMvbmFtZWkuYz0yODAxPXN0YXRpYyBpbnQgcGF0aF9sb29rdXBhdChzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgdW5zaWduZWQgZmxhZ3MsIHN0cnVjdCBwYXRoICpwYXRoKVxcbi0tXFxuZnMvbmFtZWkuYy0yODMzLVxcbmZzL25hbWVpLmM6MjgzNDppbnQgZmlsZW5hbWVfbG9va3VwKGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqbmFtZSwgdW5zaWduZWQgZmxhZ3MsXFxuZnMvbmFtZWkuYy0yODM1LVxcdFxcdCAgICBzdHJ1Y3QgcGF0aCAqcGF0aCwgY29uc3Qgc3RydWN0IHBhdGggKnJvb3QpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE2OjUwOjI1LjQzNjQ5MjQwNVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzkyMDQzMDczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQncyBteSBvd24gaW50ZXJuYWwgZGlhbG9ndWU6XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50OiBOYXZpZ2F0aW5nIHRoZSBMYW5kc2NhcGUqKlxuXG5BbHJpZ2h0LCB0aGUgZGlyZWN0aXZlIGlzIHRvIHN0YXJ0IHdpdGggYGZpbGVuYW1lX2xvb2t1cGAuIFRoYXQgc3VnZ2VzdHMgd2UncmUgaW5pdGlhdGluZyBhIHNlYXJjaCBvciByZXRyaWV2YWwgcHJvY2VzcywgcHJvYmFibHkgd2l0aGluIGEgbGFyZ2VyIHN5c3RlbS4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gaW1tZWRpYXRlbHkgYXNzZXNzIHRoZSBzY29wZSBhbmQgcG90ZW50aWFsIGNvbnRleHQgb2YgdGhpcyBwYXJ0aWN1bGFyIGxvb2t1cC4gSXMgaXQgYSBzeXN0ZW0td2lkZSBzZWFyY2gsIG9yIGNvbmZpbmVkIHRvIGEgc3BlY2lmaWMgYXBwbGljYXRpb24gb3IgZGF0YSBzdHJ1Y3R1cmU/IFdoYXQncyB0aGUgZXhwZWN0ZWQgZm9ybWF0IG9mIHRoZSBgZmlsZW5hbWVfbG9va3VwYCBvdXRwdXQ/IElzIGl0IGEgZGF0YSBzdHJ1Y3R1cmUsIGEgZnVuY3Rpb24sIGEgcG9pbnRlcj8gS25vd2luZyB0aGF0IHdpbGwgaW5mbHVlbmNlIG15IG5leHQgbW92ZSwgYW5kIGhvdyBkZWVwIEkgbmVlZCB0byBkaWcuIFdlIG5lZWQgdG8gYXNjZXJ0YWluIHRoZSBtZXRob2QgdXNlZCBmb3IgdGhlIGxvb2t1cCBzbyB3ZSBjYW4gdW5kZXJzdGFuZCB0aGUgZGF0YSBzdHJ1Y3R1cmUgYmVoaW5kIGl0LiBBcmUgdGhlcmUgaW5kZXhpbmcgb3IgaGFzaGluZyBtZXRob2RzIGF0IHdvcms/IElzIGl0IGFuIGVmZmljaWVudCBzb2x1dGlvbiBvciBpcyB0aGVyZSBhIG5lZWQgdG8gcmVwbGFjZSBpdD8gSSdsbCBwcm9iYWJseSBuZWVkIHRvIGNvbnNpZGVyIGZhY3RvcnMgb2Ygc2NhbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MDQwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxNjo1MDoyOS4yMjg1Mzc3MjhaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM2NDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL25hbWVpLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjgzNCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjgzNDpcXHRpbnQgZmlsZW5hbWVfbG9va3VwKGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqbmFtZSwgdW5zaWduZWQgZmxhZ3MsXFxuMjgzNTpcXHRcXHRcXHQgICAgc3RydWN0IHBhdGggKnBhdGgsIGNvbnN0IHN0cnVjdCBwYXRoICpyb290KVxcbjI4MzY6XFx0e1xcbjI4Mzc6XFx0XFx0aW50IHJldHZhbDtcXG4yODM4OlxcdFxcdHN0cnVjdCBuYW1laWRhdGEgbmQ7XFxuMjgzOTpcXHRcXHRpZiAoSVNfRVJSKG5hbWUpKVxcbjI4NDA6XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIobmFtZSk7XFxuMjg0MTpcXHRcXHRzZXRfbmFtZWlkYXRhKFxcdTAwMjZuZCwgZGZkLCBuYW1lLCByb290KTtcXG4yODQyOlxcdFxcdHJldHZhbCA9IHBhdGhfbG9va3VwYXQoXFx1MDAyNm5kLCBmbGFncyB8IExPT0tVUF9SQ1UsIHBhdGgpO1xcbjI4NDM6XFx0XFx0aWYgKHVubGlrZWx5KHJldHZhbCA9PSAtRUNISUxEKSlcXG4yODQ0OlxcdFxcdFxcdHJldHZhbCA9IHBhdGhfbG9va3VwYXQoXFx1MDAyNm5kLCBmbGFncywgcGF0aCk7XFxuMjg0NTpcXHRcXHRpZiAodW5saWtlbHkocmV0dmFsID09IC1FU1RBTEUpKVxcbjI4NDY6XFx0XFx0XFx0cmV0dmFsID0gcGF0aF9sb29rdXBhdChcXHUwMDI2bmQsIGZsYWdzIHwgTE9PS1VQX1JFVkFMLCBwYXRoKTtcXG4yODQ3OlxcdFxcbjI4NDg6XFx0XFx0aWYgKGxpa2VseSghcmV0dmFsKSlcXG4yODQ5OlxcdFxcdFxcdGF1ZGl0X2lub2RlKG5hbWUsIHBhdGgtXFx1MDAzZWRlbnRyeSxcXG4yODUwOlxcdFxcdFxcdFxcdCAgICBmbGFncyBcXHUwMDI2IExPT0tVUF9NT1VOVFBPSU5UID8gQVVESVRfSU5PREVfTk9FVkFMIDogMCk7XFxuMjg1MTpcXHRcXHRyZXN0b3JlX25hbWVpZGF0YSgpO1xcbjI4NTI6XFx0XFx0cmV0dXJuIHJldHZhbDtcXG4yODUzOlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTY6NTA6MjkuMjI4OTc2MTI4WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MzUwMDM2OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGBzZXRfbmFtZWlkYXRhYCBhbmQgSXRzIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBzZXRfbmFtZWlkYXRhYC4gVGhlIGNvZGUncyB1c2luZyBgZGZkYCwgYW5kIG15IG1lbnRhbCByYWRhciBpcyBpbW1lZGlhdGVseSB1cC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbm5lY3Rpb24gYmV0d2VlbiB0aGVzZSB0d28uIE15IGZpcnN0IG1vdmUgd2lsbCBiZSB0byByZS1leGFtaW5lIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgc2V0X25hbWVpZGF0YWAuIEl0J3MgbGlrZWx5IHRoYXQgYGRmZGAgaXMgYSBjcnVjaWFsIGRhdGEgc3RydWN0dXJlIG9yIGEgZGVwZW5kZW5jeSB3aXRoaW4gdGhhdCBmdW5jdGlvbi4gSSdsbCBuZWVkIHRvIHVucGFjayB3aGF0IGl0J3Mgc3RvcmluZy4gSSBhbnRpY2lwYXRlIHRoaXMgd2lsbCBpbnZvbHZlIGEgZGVlcCBkaXZlIHRvIGV4YW1pbmUgaG93IHRoYXQgZGVwZW5kZW5jeSBpcyBjb25zdHJ1Y3RlZCBvciBwb3B1bGF0ZWQsIGFuZCB0aGVuIGhvdyBgc2V0X25hbWVpZGF0YWAgY29uc3VtZXMgaXQuIEknbGwgYmUgcGFydGljdWxhcmx5IGZvY3VzZWQgb24gaG93IHRoZSBkYXRhIGhhbmRsZWQgYnkgYGRmZGAgaW1wYWN0cyB0aGUgb3ZlcmFsbCBkYXRhIGZsb3csIGVzcGVjaWFsbHkgd2l0aCByZWdhcmQgdG8gYW55IG5hbWUtcmVsYXRlZCBvcGVyYXRpb25zLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gZGF0YSBmbG93IGFuZCBwb3RlbnRpYWwgZm9yIGFueSBzaWRlLWVmZmVjdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NjMxLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxNjo1MDozMi45NjM5ODI2MDJaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTE0MDgxNTgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0YXRpYyB2b2lkIHNldF9uYW1laWRhdGFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE2OjUwOjM0LjYxNTM5ODI1WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4MDI3NDY1MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbml0aWFsIFNlYXJjaCBJbnF1aXJ5KipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gZ2V0IHNvbWUgaW5mb3JtYXRpb24gb24gYHNldF9uYW1laWRhdGFgLiBJdCdzIGEgcHJldHR5IHNwZWNpZmljIHRlcm0sIHNvIEknbSBob3BpbmcgZm9yIGEgY2xlYW4gaGl0LCBidXQgZXhwZXJpZW5jZSB0ZWxscyBtZSBpdCdzIGFsd2F5cyB3aXNlIHRvIGJlIHByZXBhcmVkIGZvciBzb21lIGludGVycHJldGF0aW9uIGFuZCBkaXNhbWJpZ3VhdGlvbi4gSeKAmW0gZXhwZWN0aW5nIHRoaXMgdG8gYmUgcmVsYXRlZCB0byBmaWxlIHN5c3RlbSBvcGVyYXRpb25zIG9yIG1ldGFkYXRhIG1hbmFnZW1lbnQsIGxpa2VseSB3aXRoaW4gYSBjb250ZXh0IG9mIHNwZWNpZmljIE9TIGtlcm5lbCBvciBsaWJyYXJ5IGNhbGxzLiBHaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24gaXQgY291bGQgYmUgYSBjYWxsIGZvciBkaXJlY3Qgc2V0dGluZyBvZiBmaWxlIHN5c3RlbSBtZXRhZGF0YS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg4ODcsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxNjo1MDozNy40MTgxNDc1MjlaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTE2NDM4MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2V0X25hbWVpZGF0YVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9uYW1laS5jPTcyOD1zdHJ1Y3QgbmFtZWlkYXRhIHtcXG4tLVxcbmZzL25hbWVpLmMtNzU2LVxcbmZzL25hbWVpLmM6NzU3OnN0YXRpYyB2b2lkIF9fc2V0X25hbWVpZGF0YShzdHJ1Y3QgbmFtZWlkYXRhICpwLCBpbnQgZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKm5hbWUpXFxuZnMvbmFtZWkuYy03NTgte1xcbi0tXFxuZnMvbmFtZWkuYy03NzEtXFxuZnMvbmFtZWkuYzo3NzI6c3RhdGljIGlubGluZSB2b2lkIHNldF9uYW1laWRhdGEoc3RydWN0IG5hbWVpZGF0YSAqcCwgaW50IGRmZCwgc3RydWN0IGZpbGVuYW1lICpuYW1lLFxcbmZzL25hbWVpLmMtNzczLVxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IHBhdGggKnJvb3QpXFxuZnMvbmFtZWkuYy03NzQte1xcbmZzL25hbWVpLmM6Nzc1OlxcdF9fc2V0X25hbWVpZGF0YShwLCBkZmQsIG5hbWUpO1xcbmZzL25hbWVpLmMtNzc2LVxcdHAtXFx1MDAzZXN0YXRlID0gMDtcXG4tLVxcbmZzL25hbWVpLmM9MjgzND1pbnQgZmlsZW5hbWVfbG9va3VwKGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqbmFtZSwgdW5zaWduZWQgZmxhZ3MsXFxuLS1cXG5mcy9uYW1laS5jLTI4NDAtXFx0XFx0cmV0dXJuIFBUUl9FUlIobmFtZSk7XFxuZnMvbmFtZWkuYzoyODQxOlxcdHNldF9uYW1laWRhdGEoXFx1MDAyNm5kLCBkZmQsIG5hbWUsIHJvb3QpO1xcbmZzL25hbWVpLmMtMjg0Mi1cXHRyZXR2YWwgPSBwYXRoX2xvb2t1cGF0KFxcdTAwMjZuZCwgZmxhZ3MgfCBMT09LVVBfUkNVLCBwYXRoKTtcXG4tLVxcbmZzL25hbWVpLmM9Mjg3Mz1zdGF0aWMgaW50IF9fZmlsZW5hbWVfcGFyZW50YXQoaW50IGRmZCwgc3RydWN0IGZpbGVuYW1lICpuYW1lLFxcbi0tXFxuZnMvbmFtZWkuYy0yODgyLVxcdFxcdHJldHVybiBQVFJfRVJSKG5hbWUpO1xcbmZzL25hbWVpLmM6Mjg4MzpcXHRzZXRfbmFtZWlkYXRhKFxcdTAwMjZuZCwgZGZkLCBuYW1lLCByb290KTtcXG5mcy9uYW1laS5jLTI4ODQtXFx0cmV0dmFsID0gcGF0aF9wYXJlbnRhdChcXHUwMDI2bmQsIGZsYWdzIHwgTE9PS1VQX1JDVSwgcGFyZW50KTtcXG4tLVxcbmZzL25hbWVpLmM9NDg3Nj1zdHJ1Y3QgZmlsZSAqZG9fZmlsZV9vcGVuKGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqcGF0aG5hbWUsXFxuLS1cXG5mcy9uYW1laS5jLTQ4ODQtXFx0XFx0cmV0dXJuIEVSUl9DQVNUKHBhdGhuYW1lKTtcXG5mcy9uYW1laS5jOjQ4ODU6XFx0c2V0X25hbWVpZGF0YShcXHUwMDI2bmQsIGRmZCwgcGF0aG5hbWUsIE5VTEwpO1xcbmZzL25hbWVpLmMtNDg4Ni1cXHRmaWxwID0gcGF0aF9vcGVuYXQoXFx1MDAyNm5kLCBvcCwgZmxhZ3MgfCBMT09LVVBfUkNVKTtcXG4tLVxcbmZzL25hbWVpLmM9NDg5NT1zdHJ1Y3QgZmlsZSAqZG9fZmlsZV9vcGVuX3Jvb3QoY29uc3Qgc3RydWN0IHBhdGggKnJvb3QsXFxuLS1cXG5mcy9uYW1laS5jLTQ5MDgtXFxuZnMvbmFtZWkuYzo0OTA5OlxcdHNldF9uYW1laWRhdGEoXFx1MDAyNm5kLCAtMSwgZmlsZW5hbWUsIHJvb3QpO1xcbmZzL25hbWVpLmMtNDkxMC1cXHRmaWxlID0gcGF0aF9vcGVuYXQoXFx1MDAyNm5kLCBvcCwgZmxhZ3MgfCBMT09LVVBfUkNVKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTY6NTA6MzkuMDA5Nzk1OTg4WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NDE0NzU5NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBGaWxlc3lzdGVtIFBsdW1iaW5nKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgbmFtaW5nIGFuZCBwYXRoIGxvb2t1cHMsIHBhcnRpY3VsYXJseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgbmFtZWlkYXRhLiBTbywgbXkgaW5pdGlhbCBmb2N1cyBpcyBnb2luZyB0byBiZSBvbiB0aGUgaW50ZXJwbGF5IGJldHdlZW4gYF9fc2V0X25hbWVpZGF0YWAgYW5kIGBwYXRoX2xvb2t1cGF0YCwgYW5kIGFsc28gSSB3YW50IHRvIGNvbXBhcmUgYHBhdGhfbG9va3VwYXRgIHdpdGggYHBhdGhfaW5pdGAuIEknbSBndWVzc2luZyB0aGF0IGBfX3NldF9uYW1laWRhdGFgIHBsYXlzIGEgY3J1Y2lhbCByb2xlIGluIHNldHRpbmcgdXAgdGhlIG5hbWVpZGF0YSBzdHJ1Y3R1cmUgaXRzZWxmLCBwcm9iYWJseSBpbml0aWFsaXppbmcgb3IgcG9wdWxhdGluZyBpdCB3aXRoIGluZm9ybWF0aW9uIG5lZWRlZCBmb3Igc3Vic2VxdWVudCBwYXRoIHJlc29sdXRpb24uIGBwYXRoX2xvb2t1cGF0YCBpcyBtb3N0IGxpa2VseSB0aGUgY29yZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IsIHdlbGwsIGxvb2tpbmcgdXAgYSBwYXRoIHJlbGF0aXZlIHRvIGEgZ2l2ZW4gZmlsZSBkZXNjcmlwdG9yLCBhbmQgSSdkIGJldCBgcGF0aF9pbml0YCBpbml0aWFsaXplcyB0aGUgcGF0aCBzdHJ1Y3R1cmUgaXRzZWxmLiBJdCdzIHRoZSBzdGFuZGFyZCBlbnRyeSBwb2ludCwgd2hlcmVhcyBgcGF0aF9sb29rdXBhdGAgaXMgdGhlIHdvcmtob3JzZS4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0IHdpdGggdGhlIFZGUyBsYXllciwgaW5vZGUgbG9va3VwcywgYW5kIHRoZSB3aG9sZSBwcm9jZXNzIG9mIHRyYXZlcnNpbmcgdGhlIGRpcmVjdG9yeSBoaWVyYXJjaHkuIFRpbWUgdG8gZGlnIGluIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTczMCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE2OjUwOjQyLjg1MTI3MzgwOVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDMxMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvbmFtZWkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3NTcsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3NTc6XFx0c3RhdGljIHZvaWQgX19zZXRfbmFtZWlkYXRhKHN0cnVjdCBuYW1laWRhdGEgKnAsIGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqbmFtZSlcXG4gNzU4OlxcdHtcXG4gNzU5OlxcdFxcdHN0cnVjdCBuYW1laWRhdGEgKm9sZCA9IGN1cnJlbnQtXFx1MDAzZW5hbWVpZGF0YTtcXG4gNzYwOlxcdFxcdHAtXFx1MDAzZXN0YWNrID0gcC1cXHUwMDNlaW50ZXJuYWw7XFxuIDc2MTpcXHRcXHRwLVxcdTAwM2VkZXB0aCA9IDA7XFxuIDc2MjpcXHRcXHRwLVxcdTAwM2VkZmQgPSBkZmQ7XFxuIDc2MzpcXHRcXHRwLVxcdTAwM2VuYW1lID0gbmFtZTtcXG4gNzY0OlxcdFxcdHAtXFx1MDAzZXBhdGhuYW1lID0gbGlrZWx5KG5hbWUpID8gbmFtZS1cXHUwMDNlbmFtZSA6IFxcXCJcXFwiO1xcbiA3NjU6XFx0XFx0cC1cXHUwMDNlcGF0aC5tbnQgPSBOVUxMO1xcbiA3NjY6XFx0XFx0cC1cXHUwMDNlcGF0aC5kZW50cnkgPSBOVUxMO1xcbiA3Njc6XFx0XFx0cC1cXHUwMDNldG90YWxfbGlua19jb3VudCA9IG9sZCA/IG9sZC1cXHUwMDNldG90YWxfbGlua19jb3VudCA6IDA7XFxuIDc2ODpcXHRcXHRwLVxcdTAwM2VzYXZlZCA9IG9sZDtcXG4gNzY5OlxcdFxcdGN1cnJlbnQtXFx1MDAzZW5hbWVpZGF0YSA9IHA7XFxuIDc3MDpcXHR9XFxuIDc3MTpcXHRcXG4gNzcyOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfbmFtZWlkYXRhKHN0cnVjdCBuYW1laWRhdGEgKnAsIGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqbmFtZSxcXG4gNzczOlxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IHBhdGggKnJvb3QpXFxuIDc3NDpcXHR7XFxuIDc3NTpcXHRcXHRfX3NldF9uYW1laWRhdGEocCwgZGZkLCBuYW1lKTtcXG4gNzc2OlxcdFxcdHAtXFx1MDAzZXN0YXRlID0gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTY6NTA6NDIuODUxNDc5ODg5WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU5NjMwNjEyOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgcGF0aF9pbml0YCBhbmQgYE9fUEFUSGAgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGBmcy9uYW1laS5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgcGF0aF9pbml0YCBmdW5jdGlvbi4gSXQgbG9va3MgbGlrZSBpdCBsZXZlcmFnZXMgYG5kLVx1MDAzZWRmZGAgYXMgYSBjcml0aWNhbCBlbGVtZW50LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcmVhbGx5IG5haWwgZG93biBob3cgaXQgaW50ZXJhY3RzIHdpdGggYE9fUEFUSGAgYW5kIGFueSBwb3RlbnRpYWwgbnVhbmNlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgYGRmZGAgaXMgdHJlYXRlZCBkaWZmZXJlbnRseSB3aGVuIGBPX1BBVEhgIGlzIHBhc3NlZC4gV2hhdCBzb3J0IG9mIGludGVybmFsIGNoZWNrcyBhcmUgcGVyZm9ybWVkPyBBcmUgdGhlcmUgYW55IHN1YnRsZSBjaGFuZ2VzIGluIGJlaGF2aW9yIHRoYXQgb2NjdXIgYmVjYXVzZSBvZiB0aGlzIGZsYWc/IEkgd2FudCB0byBtYXAgdGhlIGNvZGUncyBiZWhhdmlvciB3aGVuIGBPX1BBVEhgIGlzIHNldCBhbmQgY29tcGFyZSBpdCB0byB0aGUgc3RhbmRhcmQgcGF0aCBsb29rdXAuIFRoZSBnb2FsIGlzIHRvIGlkZW50aWZ5IGFueSBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcywgcG90ZW50aWFsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcywgb3Igc2ltcGx5IGVuc3VyZSBteSBvdmVyYWxsIHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBjb2RlIGlzIHJvY2sgc29saWQgcmVnYXJkaW5nIGl0cyBpbnRlcmFjdGlvbiB3aXRoIGZpbGUgZGVzY3JpcHRvcnMuIEEgY2xvc2UgcmVhZGluZyBpcyByZXF1aXJlZC4gTGV0J3Mgc2VlIGhvdyBgcGF0aF9pbml0YCBtb2RpZmllcyBgbmRgIGFuZCBob3cgdGhhdCBpbmZsdWVuY2VzIHN1YnNlcXVlbnQgb3BlcmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAzNjUsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE2OjUwOjQ4LjgxNDU0Mzg1N1oiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEyNDI5MDIyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdGF0aWMgY29uc3QgY2hhciBcXFxcKnBhdGhfaW5pdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9uYW1laS5jPTI1Nzg9c3RhdGljIGludCBsaW5rX3BhdGhfd2Fsayhjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgbmFtZWlkYXRhICpuZClcXG4tLVxcbmZzL25hbWVpLmMtMjY3Ni0vKiBtdXN0IGJlIHBhaXJlZCB3aXRoIHRlcm1pbmF0ZV93YWxrKCkgKi9cXG5mcy9uYW1laS5jOjI2Nzc6c3RhdGljIGNvbnN0IGNoYXIgKnBhdGhfaW5pdChzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgdW5zaWduZWQgZmxhZ3MpXFxuZnMvbmFtZWkuYy0yNjc4LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTY6NTA6NTAuOTM4ODM4OTEyWiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk3MTI5MDE2NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgQ29udGV4dCoqXG5cbkFscmlnaHQsIHRoZSBpbnN0cnVjdGlvbiBpcyBzdHJhaWdodGZvcndhcmQ6IExldCdzIGZvY3VzIG91ciBhdHRlbnRpb24gb24gYHBhdGhfaW5pdGAuIFRoaXMgaW1tZWRpYXRlbHkgc3VnZ2VzdHMgYSBzcGVjaWZpYyBhcmVhIG9mIHRoZSBjb2RlYmFzZSBpcyBiZWluZyBmbGFnZ2VkIGFzIHNpZ25pZmljYW50LiBJdCdzIGxpa2VseSBhIGNyaXRpY2FsIGluaXRpYWxpemF0aW9uIHJvdXRpbmUsIGZ1bmN0aW9uLCBvciBtb2R1bGUgcmVsYXRlZCB0byBwYXRoIG1hbmFnZW1lbnQsIHBvdGVudGlhbGx5IHdpdGhpbiBhIGxhcmdlciBzeXN0ZW0uIE15IGltbWVkaWF0ZSBtZW50YWwgY2hlY2tsaXN0IHN0YXJ0czogd2hhdCBwcm9qZWN0LCB3aGF0IGxhbmd1YWdlLCB3aGF0IGFyZSB0aGUgbGlrZWx5IGRhdGEgc3RydWN0dXJlcy9hbGdvcml0aG1zIGludm9sdmVkIGJhc2VkIG9uIHRoZSBuYW1pbmcgY29udmVudGlvbi4gYHBhdGhfaW5pdGAgaW1wbGllcyBpdCdzIHdoZXJlIHRoZSBlbnZpcm9ubWVudCAob3IgYSBzcGVjaWZpYyBjb21wb25lbnQncykgZmlsZSBzeXN0ZW0gcGF0aHMgYXJlIGVzdGFibGlzaGVkLCB2YWxpZGF0ZWQsIG9yIGNvbmZpZ3VyZWQuIFRpbWUgdG8gZGl2ZSBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA3NTcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE2OjUxOjAwLjY1MTc0MjkzNFoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTU0MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvbmFtZWkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNjc3LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNjc3OlxcdHN0YXRpYyBjb25zdCBjaGFyICpwYXRoX2luaXQoc3RydWN0IG5hbWVpZGF0YSAqbmQsIHVuc2lnbmVkIGZsYWdzKVxcbjI2Nzg6XFx0e1xcbjI2Nzk6XFx0XFx0aW50IGVycm9yO1xcbjI2ODA6XFx0XFx0Y29uc3QgY2hhciAqcyA9IG5kLVxcdTAwM2VwYXRobmFtZTtcXG4yNjgxOlxcdFxcbjI2ODI6XFx0XFx0LyogTE9PS1VQX0NBQ0hFRCByZXF1aXJlcyBSQ1UsIGFzayBjYWxsZXIgdG8gcmV0cnkgKi9cXG4yNjgzOlxcdFxcdGlmICh1bmxpa2VseSgoZmxhZ3MgXFx1MDAyNiAoTE9PS1VQX1JDVSB8IExPT0tVUF9DQUNIRUQpKSA9PSBMT09LVVBfQ0FDSEVEKSlcXG4yNjg0OlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FQUdBSU4pO1xcbjI2ODU6XFx0XFxuMjY4NjpcXHRcXHRpZiAodW5saWtlbHkoISpzKSlcXG4yNjg3OlxcdFxcdFxcdGZsYWdzIFxcdTAwMjY9IH5MT09LVVBfUkNVO1xcbjI2ODg6XFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgTE9PS1VQX1JDVSlcXG4yNjg5OlxcdFxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4yNjkwOlxcdFxcdGVsc2VcXG4yNjkxOlxcdFxcdFxcdG5kLVxcdTAwM2VzZXEgPSBuZC1cXHUwMDNlbmV4dF9zZXEgPSAwO1xcbjI2OTI6XFx0XFxuMjY5MzpcXHRcXHRuZC1cXHUwMDNlZmxhZ3MgPSBmbGFncztcXG4yNjk0OlxcdFxcdG5kLVxcdTAwM2VzdGF0ZSB8PSBORF9KVU1QRUQ7XFxuMjY5NTpcXHRcXG4yNjk2OlxcdFxcdG5kLVxcdTAwM2VtX3NlcSA9IF9fcmVhZF9zZXFjb3VudF9iZWdpbihcXHUwMDI2bW91bnRfbG9jay5zZXFjb3VudCk7XFxuMjY5NzpcXHRcXHRuZC1cXHUwMDNlcl9zZXEgPSBfX3JlYWRfc2VxY291bnRfYmVnaW4oXFx1MDAyNnJlbmFtZV9sb2NrLnNlcWNvdW50KTtcXG4yNjk4OlxcdFxcdHNtcF9ybWIoKTtcXG4yNjk5OlxcdFxcbjI3MDA6XFx0XFx0aWYgKHVubGlrZWx5KG5kLVxcdTAwM2VzdGF0ZSBcXHUwMDI2IE5EX1JPT1RfUFJFU0VUKSkge1xcbjI3MDE6XFx0XFx0XFx0c3RydWN0IGRlbnRyeSAqcm9vdCA9IG5kLVxcdTAwM2Vyb290LmRlbnRyeTtcXG4yNzAyOlxcdFxcdFxcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSByb290LVxcdTAwM2VkX2lub2RlO1xcbjI3MDM6XFx0XFx0XFx0aWYgKCpzIFxcdTAwMjZcXHUwMDI2IHVubGlrZWx5KCFkX2Nhbl9sb29rdXAocm9vdCkpKVxcbjI3MDQ6XFx0XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT1RESVIpO1xcbjI3MDU6XFx0XFx0XFx0bmQtXFx1MDAzZXBhdGggPSBuZC1cXHUwMDNlcm9vdDtcXG4yNzA2OlxcdFxcdFxcdG5kLVxcdTAwM2Vpbm9kZSA9IGlub2RlO1xcbjI3MDc6XFx0XFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgTE9PS1VQX1JDVSkge1xcbjI3MDg6XFx0XFx0XFx0XFx0bmQtXFx1MDAzZXNlcSA9IHJlYWRfc2VxY291bnRfYmVnaW4oXFx1MDAyNm5kLVxcdTAwM2VwYXRoLmRlbnRyeS1cXHUwMDNlZF9zZXEpO1xcbjI3MDk6XFx0XFx0XFx0XFx0bmQtXFx1MDAzZXJvb3Rfc2VxID0gbmQtXFx1MDAzZXNlcTtcXG4yNzEwOlxcdFxcdFxcdH0gZWxzZSB7XFxuMjcxMTpcXHRcXHRcXHRcXHRwYXRoX2dldChcXHUwMDI2bmQtXFx1MDAzZXBhdGgpO1xcbjI3MTI6XFx0XFx0XFx0fVxcbjI3MTM6XFx0XFx0XFx0cmV0dXJuIHM7XFxuMjcxNDpcXHRcXHR9XFxuMjcxNTpcXHRcXG4yNzE2OlxcdFxcdG5kLVxcdTAwM2Vyb290Lm1udCA9IE5VTEw7XFxuMjcxNzpcXHRcXG4yNzE4OlxcdFxcdC8qIEFic29sdXRlIHBhdGhuYW1lIC0tIGZldGNoIHRoZSByb290IChMT09LVVBfSU5fUk9PVCB1c2VzIG5kLVxcdTAwM2VkZmQpLiAqL1xcbjI3MTk6XFx0XFx0aWYgKCpzID09ICcvJyBcXHUwMDI2XFx1MDAyNiBsaWtlbHkoIShmbGFncyBcXHUwMDI2IExPT0tVUF9JTl9ST09UKSkpIHtcXG4yNzIwOlxcdFxcdFxcdGVycm9yID0gbmRfanVtcF9yb290KG5kKTtcXG4yNzIxOlxcdFxcdFxcdGlmICh1bmxpa2VseShlcnJvcikpXFxuMjcyMjpcXHRcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUihlcnJvcik7XFxuMjcyMzpcXHRcXHRcXHRyZXR1cm4gcztcXG4yNzI0OlxcdFxcdH1cXG4yNzI1OlxcdFxcbjI3MjY6XFx0XFx0LyogUmVsYXRpdmUgcGF0aG5hbWUgLS0gZ2V0IHRoZSBzdGFydGluZy1wb2ludCBpdCBpcyByZWxhdGl2ZSB0by4gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTY6NTE6MDAuNjUxOTU5NTAzWiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NDAxOTI3OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgaW50byB0aGUgYHBhdGhfaW5pdGAgRnVuY3Rpb24qKlxuXG5BbHJpZ2h0LCBzbyB0aGUgaW5pdGlhbCBwcm9tcHQganVzdCBudWRnZWQgbWUgdG8ga2VlcCBnb2luZy4gXCJMZXQncyByZWFkIHRoZSByZXN0IG9mIGBwYXRoX2luaXRgLlwiIEkgaW1tZWRpYXRlbHkgaW50ZXJwcmV0IHRoaXMgYXMgYSBkaXJlY3RpdmUgdG8gZGVsdmUgZGVlcGVyIGludG8gdGhlIGNvZGUuIFRoaXMgYXNzdW1lcywgbmF0dXJhbGx5LCB0aGF0IHRoZSByZWFkZXIgaGFzIHByZXZpb3VzbHkgZW5nYWdlZCB3aXRoIHRoZSBmdW5jdGlvbidzIGluaXRpYWwgcGFydHMgb3IgdGhlIGJyb2FkZXIgY29udGV4dC4gXCJUaGUgcmVzdFwiIGltcGxpZXMgdGhlcmUncyBleGlzdGluZyBmYW1pbGlhcml0eSBvciBhIGRlZmluZWQgc2VjdGlvbiB0byBiZSBhbmFseXplZC4gTXkgZm9jdXMgc2hhcnBlbnMuIEknbSBtb3ZpbmcgYmV5b25kIGFueSBzdXBlcmZpY2lhbCBvdmVydmlldyBJIG1pZ2h0IGhhdmUgZG9uZSBwcmV2aW91c2x5IGFuZCBJJ20gZ2V0dGluZyByZWFkeSB0byBzY3J1dGluaXplIGl0cyBpbnRlcm5hbCB3b3JraW5ncy4gSXQncyBhIGNhbGwgdG8gZXhhbWluZSB0aGUgY29kZSdzIHN1YnNlcXVlbnQgbGluZXMsIGxvZ2ljIGZsb3csIGFuZCBwb3RlbnRpYWxseSB0byBleHBsb3JlIGFueSBjb25kaXRpb25hbCBicmFuY2hlcyBvciBmdW5jdGlvbiBjYWxscy4gSXQncyB0aW1lIHRvIGdldCBhIGZlZWwgZm9yIHRoZSByZW1haW5pbmcgc3RydWN0dXJlIGFuZCBpbnRlbnQsIHNvIEkgY2FuIHN5bnRoZXNpemUgYSBob2xpc3RpYyB1bmRlcnN0YW5kaW5nLiBJIHdpbGwgYmUgYXNzZXNzaW5nIHZhcmlhYmxlIHVzYWdlLCBtZW1vcnkgbWFuYWdlbWVudCAoaWYgcmVsZXZhbnQpLCBhbmQgZXJyb3IgaGFuZGxpbmcgYXMgSSBtb3ZlIHRocm91Z2ggaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxNzQyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxNjo1MTowNC4zOTIxNTUyMzhaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk1NzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL25hbWVpLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjcyNyxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjcyNzpcXHRcXHRpZiAobmQtXFx1MDAzZWRmZCA9PSBBVF9GRENXRCkge1xcbjI3Mjg6XFx0XFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgTE9PS1VQX1JDVSkge1xcbjI3Mjk6XFx0XFx0XFx0XFx0c3RydWN0IGZzX3N0cnVjdCAqZnMgPSBjdXJyZW50LVxcdTAwM2VmcztcXG4yNzMwOlxcdFxcdFxcdFxcdHVuc2lnbmVkIHNlcTtcXG4yNzMxOlxcdFxcbjI3MzI6XFx0XFx0XFx0XFx0ZG8ge1xcbjI3MzM6XFx0XFx0XFx0XFx0XFx0c2VxID0gcmVhZF9zZXFiZWdpbihcXHUwMDI2ZnMtXFx1MDAzZXNlcSk7XFxuMjczNDpcXHRcXHRcXHRcXHRcXHRuZC1cXHUwMDNlcGF0aCA9IGZzLVxcdTAwM2Vwd2Q7XFxuMjczNTpcXHRcXHRcXHRcXHRcXHRuZC1cXHUwMDNlaW5vZGUgPSBuZC1cXHUwMDNlcGF0aC5kZW50cnktXFx1MDAzZWRfaW5vZGU7XFxuMjczNjpcXHRcXHRcXHRcXHRcXHRuZC1cXHUwMDNlc2VxID0gX19yZWFkX3NlcWNvdW50X2JlZ2luKFxcdTAwMjZuZC1cXHUwMDNlcGF0aC5kZW50cnktXFx1MDAzZWRfc2VxKTtcXG4yNzM3OlxcdFxcdFxcdFxcdH0gd2hpbGUgKHJlYWRfc2VxcmV0cnkoXFx1MDAyNmZzLVxcdTAwM2VzZXEsIHNlcSkpO1xcbjI3Mzg6XFx0XFx0XFx0fSBlbHNlIHtcXG4yNzM5OlxcdFxcdFxcdFxcdGdldF9mc19wd2QoY3VycmVudC1cXHUwMDNlZnMsIFxcdTAwMjZuZC1cXHUwMDNlcGF0aCk7XFxuMjc0MDpcXHRcXHRcXHRcXHRuZC1cXHUwMDNlaW5vZGUgPSBuZC1cXHUwMDNlcGF0aC5kZW50cnktXFx1MDAzZWRfaW5vZGU7XFxuMjc0MTpcXHRcXHRcXHR9XFxuMjc0MjpcXHRcXHR9IGVsc2Uge1xcbjI3NDM6XFx0XFx0XFx0LyogQ2FsbGVyIG11c3QgY2hlY2sgZXhlY3V0ZSBwZXJtaXNzaW9ucyBvbiB0aGUgc3RhcnRpbmcgcGF0aCBjb21wb25lbnQgKi9cXG4yNzQ0OlxcdFxcdFxcdENMQVNTKGZkX3JhdywgZikobmQtXFx1MDAzZWRmZCk7XFxuMjc0NTpcXHRcXHRcXHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7XFxuMjc0NjpcXHRcXG4yNzQ3OlxcdFxcdFxcdGlmIChmZF9lbXB0eShmKSlcXG4yNzQ4OlxcdFxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FQkFERik7XFxuMjc0OTpcXHRcXG4yNzUwOlxcdFxcdFxcdGlmIChmbGFncyBcXHUwMDI2IExPT0tVUF9MSU5LQVRfRU1QVFkpIHtcXG4yNzUxOlxcdFxcdFxcdFxcdGlmIChmZF9maWxlKGYpLVxcdTAwM2VmX2NyZWQgIT0gY3VycmVudF9jcmVkKCkgXFx1MDAyNlxcdTAwMjZcXG4yNzUyOlxcdFxcdFxcdFxcdCAgICAhbnNfY2FwYWJsZShmZF9maWxlKGYpLVxcdTAwM2VmX2NyZWQtXFx1MDAzZXVzZXJfbnMsIENBUF9EQUNfUkVBRF9TRUFSQ0gpKVxcbjI3NTM6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7XFxuMjc1NDpcXHRcXHRcXHR9XFxuMjc1NTpcXHRcXG4yNzU2OlxcdFxcdFxcdGRlbnRyeSA9IGZkX2ZpbGUoZiktXFx1MDAzZWZfcGF0aC5kZW50cnk7XFxuMjc1NzpcXHRcXG4yNzU4OlxcdFxcdFxcdGlmICgqcyBcXHUwMDI2XFx1MDAyNiB1bmxpa2VseSghZF9jYW5fbG9va3VwKGRlbnRyeSkpKVxcbjI3NTk6XFx0XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT1RESVIpO1xcbjI3NjA6XFx0XFxuMjc2MTpcXHRcXHRcXHRuZC1cXHUwMDNlcGF0aCA9IGZkX2ZpbGUoZiktXFx1MDAzZWZfcGF0aDtcXG4yNzYyOlxcdFxcdFxcdGlmIChmbGFncyBcXHUwMDI2IExPT0tVUF9SQ1UpIHtcXG4yNzYzOlxcdFxcdFxcdFxcdG5kLVxcdTAwM2Vpbm9kZSA9IG5kLVxcdTAwM2VwYXRoLmRlbnRyeS1cXHUwMDNlZF9pbm9kZTtcXG4yNzY0OlxcdFxcdFxcdFxcdG5kLVxcdTAwM2VzZXEgPSByZWFkX3NlcWNvdW50X2JlZ2luKFxcdTAwMjZuZC1cXHUwMDNlcGF0aC5kZW50cnktXFx1MDAzZWRfc2VxKTtcXG4yNzY1OlxcdFxcdFxcdH0gZWxzZSB7XFxuMjc2NjpcXHRcXHRcXHRcXHRwYXRoX2dldChcXHUwMDI2bmQtXFx1MDAzZXBhdGgpO1xcbjI3Njc6XFx0XFx0XFx0XFx0bmQtXFx1MDAzZWlub2RlID0gbmQtXFx1MDAzZXBhdGguZGVudHJ5LVxcdTAwM2VkX2lub2RlO1xcbjI3Njg6XFx0XFx0XFx0fVxcbjI3Njk6XFx0XFx0fVxcbjI3NzA6XFx0XFxuMjc3MTpcXHRcXHQvKiBGb3Igc2NvcGVkLWxvb2t1cHMgd2UgbmVlZCB0byBzZXQgdGhlIHJvb3QgdG8gdGhlIGRpcmZkIGFzIHdlbGwuICovXFxuMjc3MjpcXHRcXHRpZiAodW5saWtlbHkoZmxhZ3MgXFx1MDAyNiBMT09LVVBfSVNfU0NPUEVEKSkge1xcbjI3NzM6XFx0XFx0XFx0bmQtXFx1MDAzZXJvb3QgPSBuZC1cXHUwMDNlcGF0aDtcXG4yNzc0OlxcdFxcdFxcdGlmIChmbGFncyBcXHUwMDI2IExPT0tVUF9SQ1UpIHtcXG4yNzc1OlxcdFxcdFxcdFxcdG5kLVxcdTAwM2Vyb290X3NlcSA9IG5kLVxcdTAwM2VzZXE7XFxuMjc3NjpcXHRcXHRcXHR9IGVsc2Uge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxNjo1MTowNC4zOTIzNTIyNDhaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzk2MjkwMDY2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgYHhhdHRyYXRgIFN5c2NhbGwgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBjb3JlIGlzc3VlIHNlZW1zIHRvIGJlIGhvdyB0aGUgZmlsZSBkZXNjcmlwdG9yIChgZGZkYCkgaXMgaGFuZGxlZCBpbiB0aGUgYCp4YXR0cmF0YCBzeXNjYWxscyB3aGVuIGBBVF9FTVBUWV9QQVRIYCBpcyB1c2VkIGFuZCB0aGUgcGF0aCBpcyBlbXB0eS4gTXkgaW5pdGlhbCBodW5jaCB3YXMgY29ycmVjdDogdGhlIHByb2JsZW0gc3RlbXMgZnJvbSBob3cgd2UgcmV0cmlldmUgdGhlIGZpbGUgZGVzY3JpcHRvciBpdHNlbGYuXG5cbkkndmUgcmVhbGl6ZWQgdGhhdCB0aGUgYHBhdGhfaW5pdGAgZnVuY3Rpb24gdXNlcyBgQ0xBU1MoZmRfcmF3LCBmKShuZC1cdTAwM2VkZmQpYCB0byBncmFiIHRoZSBmaWxlIGRlc2NyaXB0b3IuIEFuZCB0aGF0IGBmZF9yYXdgIGFjdHVhbGx5IGNhbGxzIGBmZGdldF9yYXdgLiBUaGlzIGlzIHRoZSBrZXkuIGBmZGdldF9yYXdgIGlzIGltcG9ydGFudCBiZWNhdXNlIGl0IHNwZWNpZmljYWxseSAqYWxsb3dzKiBgT19QQVRIYCBmaWxlIGRlc2NyaXB0b3JzLiBUaGlzIGlzIHdoYXQncyBsZXR0aW5nIGZ1bmN0aW9ucyBsaWtlIGBmaWxlbmFtZV9sb29rdXBgLCB3aGljaCBtYW55IG9mIHRoZSBgKmF0YCBmdW5jdGlvbnMgdXNlLCBjb3JyZWN0bHkgaGFuZGxlIHRoZXNlIGBPX1BBVEhgIGZpbGUgZGVzY3JpcHRvcnMgd2hlbiBgQVRfRU1QVFlfUEFUSGAgaXMgZ2l2ZW4uXG5cblRoZSBuZXdseSBpbXBsZW1lbnRlZCBgc2V0eGF0dHJhdGAsIGBnZXR4YXR0cmF0YCwgYGxpc3R4YXR0cmF0YCwgYW5kIGByZW1vdmV4YXR0cmF0YCBzeXNjYWxscywgaG93ZXZlciwgd2VyZSBpbXBsZW1lbnRlZCB3aXRoIGBDTEFTUyhmZCwgZikoZGZkKWAgd2hlbiBgQVRfRU1QVFlfUEFUSGAgYW5kIHRoZSBwYXRoIHdlcmUgYm90aCB1c2VkLCBhbmQgdGhhdCBjYXVzZXMgcHJvYmxlbXMgd2l0aCBgT19QQVRIYCBkZXNjcmlwdG9ycy4gVGhpcyBtZWFucyB0aGVzZSBkaWRuJ3Qgd29yayBwcm9wZXJseSB3aXRoIGBPX1BBVEhgIGZpbGUgZGVzY3JpcHRvcnMuXG5cblRoZSBwYXRjaCBmaXhlcyB0aGlzIGluY29uc2lzdGVuY3kgYnkgY2hhbmdpbmcgdGhvc2Ugc3lzY2FsbHMgdG8gdXNlIGBDTEFTUyhmZF9tYXliZV9yYXcsIGYpKGRmZCwgcmF3KWAgd2l0aCBgcmF3ID0gdHJ1ZWAuIFRoaXMgaXMgdGhlIGltcG9ydGFudCBwYXJ0OiBzZXR0aW5nIGByYXcgPSB0cnVlYCBhbGxvd3MgdXMgdG8gY29ycmVjdGx5IGhhbmRsZSBgT19QQVRIYCBmaWxlIGRlc2NyaXB0b3JzLCB0aHVzIGFsaWduaW5nIHRoZW0gd2l0aCB0aGUgYmVoYXZpb3Igb2Ygb3RoZXIgYCphdGAgc3lzY2FsbHMuXG5cbkZ1bmN0aW9uYWxseSwgdGhpcyBpcyBhIGNsZWFyIGVuaGFuY2VtZW50LiBOb3csIGBzZXR4YXR0cmF0YCwgYGdldHhhdHRyYXRgLCBgbGlzdHhhdHRyYXRgLCBhbmQgYHJlbW92ZXhhdHRyYXRgIHdpbGwgKmNvcnJlY3RseSogb3BlcmF0ZSBvbiBgT19QQVRIYCBmaWxlIGRlc2NyaXB0b3JzLCB3aGljaCB3YXNuJ3QgdGhlIGNhc2UgcHJldmlvdXNseS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhbmQgYSBnb29kIG9uZSBhdCB0aGF0LlxuXG5Ob3csIGxldCdzIGNvbnNpZGVyIHBvdGVudGlhbCBkZXBlbmRlbmNpZXMuIFRoZSBjaGFuZ2VzIGFyZSBjb25maW5lZCB0byBgZnMveGF0dHIuY2AgYW5kIGBpbmNsdWRlL2xpbnV4L2ZpbGUuaGAuIFdoaWxlIHRoZSBjb3JlIHhhdHRyIHN5c2NhbGxzIGFyZSBhbHdheXMgdGhlcmUsIHJlZ2FyZGxlc3Mgb2YgZmlsZXN5c3RlbSwgdGhleSdyZSBvbmx5ICplbmFibGVkKiBpZiB0aGVyZSBpcyBzdXBwb3J0LCB0aHJvdWdoIHNvbWV0aGluZyBsaWtlIGBDT05GSUdfRVhUNF9GU19YQVRUUmAuIFNvLCB0aGUgY29yZSBpcyBhbHdheXMgdGhlcmUsIGJ1dCB0aGV5IG1pZ2h0IG5vdCAqZG8qIGFueXRoaW5nIG9uIGEgc3lzdGVtIHdpdGhvdXQgdGhlIGZpbGVzeXN0ZW0gc3VwcG9ydC4gSSBjYW4gdGhpbmsgb2YgbmVlZGluZyBgQ09ORklHX1RNUEZTX1hBVFRSYCBmb3IgdGVzdGluZyB4YXR0cnMgb24gdG1wZnMuIEJ1dCB0aGUgY29yZSBzeXNjYWxscyB0aGVtc2VsdmVzIGFyZSBhbHdheXMgZW5hYmxlZC4gSSBzaG91bGQgbG9vayBpbnRvIHdoYXQgd291bGQgYmUgbmVlZGVkIHNwZWNpZmljYWxseSBmb3IgYHNldHhhdHRyYXRgIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gdW5pbnRlbmRlZCBjb25zZXF1ZW5jZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyODQyLCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzkyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTY6NTE6MTIuMzU1MjU1OTc0WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTkwNDA3NTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyAuKlhBVFRSXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL0tjb25maWc9MTgxPWNvbmZpZyBUTVBGU19QT1NJWF9BQ0xcXG4tLVxcbmZzL0tjb25maWctMTk4LVxcbmZzL0tjb25maWc6MTk5OmNvbmZpZyBUTVBGU19YQVRUUlxcbmZzL0tjb25maWctMjAwLVxcdGJvb2wgXFxcIlRtcGZzIGV4dGVuZGVkIGF0dHJpYnV0ZXNcXFwiXFxuLS1cXG5mcy9lcm9mcy9LY29uZmlnPTUwPWNvbmZpZyBFUk9GU19GU19ERUJVR1xcbi0tXFxuZnMvZXJvZnMvS2NvbmZpZy01OS1cXG5mcy9lcm9mcy9LY29uZmlnOjYwOmNvbmZpZyBFUk9GU19GU19YQVRUUlxcbmZzL2Vyb2ZzL0tjb25maWctNjEtXFx0Ym9vbCBcXFwiRVJPRlMgZXh0ZW5kZWQgYXR0cmlidXRlc1xcXCJcXG4tLVxcbmZzL2V4dDIvS2NvbmZpZz0yPWNvbmZpZyBFWFQyX0ZTXFxuLS1cXG5mcy9leHQyL0tjb25maWctMjAtXFxuZnMvZXh0Mi9LY29uZmlnOjIxOmNvbmZpZyBFWFQyX0ZTX1hBVFRSXFxuZnMvZXh0Mi9LY29uZmlnLTIyLVxcdGJvb2wgXFxcIkV4dDIgZXh0ZW5kZWQgYXR0cmlidXRlc1xcXCJcXG4tLVxcbmZzL2YyZnMvS2NvbmZpZz0zMT1jb25maWcgRjJGU19TVEFUX0ZTXFxuLS1cXG5mcy9mMmZzL0tjb25maWctNDMtXFxuZnMvZjJmcy9LY29uZmlnOjQ0OmNvbmZpZyBGMkZTX0ZTX1hBVFRSXFxuZnMvZjJmcy9LY29uZmlnLTQ1LVxcdGJvb2wgXFxcIkYyRlMgZXh0ZW5kZWQgYXR0cmlidXRlc1xcXCJcXG4tLVxcbmZzL2pmZnMyL0tjb25maWc9NTM9Y29uZmlnIEpGRlMyX1NVTU1BUllcXG4tLVxcbmZzL2pmZnMyL0tjb25maWctNjUtXFxuZnMvamZmczIvS2NvbmZpZzo2Njpjb25maWcgSkZGUzJfRlNfWEFUVFJcXG5mcy9qZmZzMi9LY29uZmlnLTY3LVxcdGJvb2wgXFxcIkpGRlMyIFhBVFRSIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc9ODM9Y29uZmlnIENJRlNfVVBDQUxMXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWctOTEtXFxuZnMvc21iL2NsaWVudC9LY29uZmlnOjkyOmNvbmZpZyBDSUZTX1hBVFRSXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTkzLVxcdGJvb2wgXFxcIkNJRlMgZXh0ZW5kZWQgYXR0cmlidXRlc1xcXCJcXG4tLVxcbmZzL3NxdWFzaGZzL0tjb25maWc9MTI5PWNvbmZpZyBTUVVBU0hGU19NT1VOVF9ERUNPTVBfVEhSRUFEU1xcbi0tXFxuZnMvc3F1YXNoZnMvS2NvbmZpZy0xNDEtXFxuZnMvc3F1YXNoZnMvS2NvbmZpZzoxNDI6Y29uZmlnIFNRVUFTSEZTX1hBVFRSXFxuZnMvc3F1YXNoZnMvS2NvbmZpZy0xNDMtXFx0Ym9vbCBcXFwiU3F1YXNoZnMgWEFUVFIgc3VwcG9ydFxcXCJcXG4tLVxcbmZzL3ViaWZzL0tjb25maWc9NTI9Y29uZmlnIFVCSUZTX0FUSU1FX1NVUFBPUlRcXG4tLVxcbmZzL3ViaWZzL0tjb25maWctNjUtXFxuZnMvdWJpZnMvS2NvbmZpZzo2Njpjb25maWcgVUJJRlNfRlNfWEFUVFJcXG5mcy91Ymlmcy9LY29uZmlnLTY3LVxcdGJvb2wgXFxcIlVCSUZTIFhBVFRSIHN1cHBvcnRcXFwiXFxuLS1cXG5zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL0tjb25maWc9MTc9Y29uZmlnIEVWTV9BVFRSX0ZTVVVJRFxcbi0tXFxuc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9LY29uZmlnLTMwLVxcbnNlY3VyaXR5L2ludGVncml0eS9ldm0vS2NvbmZpZzozMTpjb25maWcgRVZNX0VYVFJBX1NNQUNLX1hBVFRSU1xcbnNlY3VyaXR5L2ludGVncml0eS9ldm0vS2NvbmZpZy0zMi1cXHRib29sIFxcXCJBZGRpdGlvbmFsIFNNQUNLIHhhdHRyc1xcXCJcXG4tLVxcbnNlY3VyaXR5L2ludGVncml0eS9ldm0vS2NvbmZpZy00Ny1cXG5zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL0tjb25maWc6NDg6Y29uZmlnIEVWTV9BRERfWEFUVFJTXFxuc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9LY29uZmlnLTQ5LVxcdGJvb2wgXFxcIkFkZCBhZGRpdGlvbmFsIEVWTSBleHRlbmRlZCBhdHRyaWJ1dGVzIGF0IHJ1bnRpbWVcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE2OjUxOjE0LjU0NTY2NzMyOFoiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTMzMjg0MTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgWGF0dHIgQ29tcGlsYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUncyBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgZ2F0ZXMgdGhlIGNvbXBpbGF0aW9uIG9mIHRoZSBjb3JlIGV4dGVuZGVkIGF0dHJpYnV0ZSAoeGF0dHIpIHN5c3RlbSBjYWxscy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQncyBwcm9iYWJseSBub3QsIGJ1dCBJIG5lZWQgdG8gY29uZmlybSB0aGF0LiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZS4gU3BlY2lmaWNhbGx5LCBgZnMveGF0dHIuY2AgaXMgdGhlIG9idmlvdXMgcGxhY2UgdG8gc3RhcnQuIEknbGwgc2NhbiB0aHJvdWdoIHRoYXQgZmlsZSBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgYCNpZmRlZmAgb3Igc2ltaWxhciBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyB0aGF0IGNvbmRpdGlvbmFsbHkgY29tcGlsZSB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zLiBUaGF0IHNob3VsZCBxdWlja2x5IHRlbGwgbWUgd2hldGhlciB0aGUgeGF0dHIgc3lzdGVtIGNhbGxzIGFyZSBmdW5kYW1lbnRhbGx5IGJ1aWx0IGludG8gdGhlIGtlcm5lbCBvciBpZiB0aGVpciBwcmVzZW5jZSBpcyBjb250cm9sbGVkIGJ5IGEgc3BlY2lmaWMgYENPTkZJR19gIG9wdGlvbi4gVGhpcyBpcyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgY2hlY2ssIGJ1dCBhIG5lY2Vzc2FyeSBzdGVwIHRvIHVuZGVyc3RhbmQgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0NjQ4LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTY6NTE6MTcuNjc4OTUzNTM4WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTQwNjg5MjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhhdHRyXFxcXC5vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24va2J1aWxkL21ha2VmaWxlcy5yc3Q9MTczPUV4YW1wbGU6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi9rYnVpbGQvbWFrZWZpbGVzLnJzdC0xNzgtICAgIG5hbWVpLm8gc3VwZXIubyBzeW1saW5rLm9cXG5Eb2N1bWVudGF0aW9uL2tidWlsZC9tYWtlZmlsZXMucnN0OjE3OTogIGV4dDItJChDT05GSUdfRVhUMl9GU19YQVRUUikgKz0geGF0dHIubyB4YXR0cl91c2VyLm8gXFxcXFxcbkRvY3VtZW50YXRpb24va2J1aWxkL21ha2VmaWxlcy5yc3QtMTgwLSAgICB4YXR0cl90cnVzdGVkLm9cXG5Eb2N1bWVudGF0aW9uL2tidWlsZC9tYWtlZmlsZXMucnN0LTE4MS1cXG5Eb2N1bWVudGF0aW9uL2tidWlsZC9tYWtlZmlsZXMucnN0OjE4MjpJbiB0aGlzIGV4YW1wbGUsIHhhdHRyLm8sIHhhdHRyX3VzZXIubyBhbmQgeGF0dHJfdHJ1c3RlZC5vIGFyZSBvbmx5XFxuRG9jdW1lbnRhdGlvbi9rYnVpbGQvbWFrZWZpbGVzLnJzdC0xODMtcGFydCBvZiB0aGUgY29tcG9zaXRlIG9iamVjdCBleHQyLm8gaWYgJChDT05GSUdfRVhUMl9GU19YQVRUUilcXG4tLVxcbkRvY3VtZW50YXRpb24va2J1aWxkL21vZHVsZXMucnN0PTUwMT1UZXN0aW5nIGZvciBDT05GSUdfRk9PX0JBUlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9rYnVpbGQvbW9kdWxlcy5yc3QtNTEyLVxcdFxcdGV4dDIteSA6PSBiYWxsb2MubyBiaXRtYXAubyBkaXIub1xcbkRvY3VtZW50YXRpb24va2J1aWxkL21vZHVsZXMucnN0OjUxMzpcXHRcXHRleHQyLSQoQ09ORklHX0VYVDJfRlNfWEFUVFIpICs9IHhhdHRyLm9cXG4tLVxcbmZzLzlwL01ha2VmaWxlPTI9b2JqLSQoQ09ORklHXzlQX0ZTKSA6PSA5cC5vXFxuLS1cXG5mcy85cC9NYWtlZmlsZS0xMy1cXHRmaWQubyAgXFxcXFxcbmZzLzlwL01ha2VmaWxlOjE0OlxcdHhhdHRyLm9cXG5mcy85cC9NYWtlZmlsZS0xNS1cXG4tLVxcbmZzL01ha2VmaWxlPTEwPW9iai15IDo9XFx0b3Blbi5vIHJlYWRfd3JpdGUubyBmaWxlX3RhYmxlLm8gc3VwZXIubyBcXFxcXFxuLS1cXG5mcy9NYWtlZmlsZS0xMy1cXHRcXHRhdHRyLm8gYmFkX2lub2RlLm8gZmlsZS5vIGZpbGVzeXN0ZW1zLm8gbmFtZXNwYWNlLm8gXFxcXFxcbmZzL01ha2VmaWxlOjE0OlxcdFxcdHNlcV9maWxlLm8geGF0dHIubyBsaWJmcy5vIGZzLXdyaXRlYmFjay5vIFxcXFxcXG5mcy9NYWtlZmlsZS0xNS1cXHRcXHRwbm9kZS5vIHNwbGljZS5vIHN5bmMubyB1dGltZXMubyBkX3BhdGgubyBcXFxcXFxuLS1cXG5mcy9hZnMvTWFrZWZpbGU9Nj1rYWZzLXkgOj0gXFxcXFxcbi0tXFxuZnMvYWZzL01ha2VmaWxlLTQxLVxcdHdyaXRlLm8gXFxcXFxcbmZzL2Fmcy9NYWtlZmlsZTo0MjpcXHR4YXR0ci5vIFxcXFxcXG5mcy9hZnMvTWFrZWZpbGUtNDMtXFx0eWZzY2xpZW50Lm9cXG4tLVxcbmZzL2J0cmZzL01ha2VmaWxlPTI0PWJ0cmZzLXkgKz0gc3VwZXIubyBjdHJlZS5vIGV4dGVudC10cmVlLm8gcHJpbnQtdHJlZS5vIHJvb3QtdHJlZS5vIGRpci1pdGVtLm8gXFxcXFxcbi0tXFxuZnMvYnRyZnMvTWFrZWZpbGUtMjYtXFx0ICAgdHJhbnNhY3Rpb24ubyBpbm9kZS5vIGZpbGUubyBkZWZyYWcubyBcXFxcXFxuZnMvYnRyZnMvTWFrZWZpbGU6Mjc6XFx0ICAgZXh0ZW50X21hcC5vIHN5c2ZzLm8gYWNjZXNzb3JzLm8geGF0dHIubyBvcmRlcmVkLWRhdGEubyBcXFxcXFxuZnMvYnRyZnMvTWFrZWZpbGUtMjgtXFx0ICAgZXh0ZW50X2lvLm8gdm9sdW1lcy5vIGFzeW5jLXRocmVhZC5vIGlvY3RsLm8gbG9ja2luZy5vIG9ycGhhbi5vIFxcXFxcXG4tLVxcbmZzL2NhY2hlZmlsZXMvTWFrZWZpbGU9Nj1jYWNoZWZpbGVzLXkgOj0gXFxcXFxcbi0tXFxuZnMvY2FjaGVmaWxlcy9NYWtlZmlsZS0xNS1cXHR2b2x1bWUubyBcXFxcXFxuZnMvY2FjaGVmaWxlcy9NYWtlZmlsZToxNjpcXHR4YXR0ci5vXFxuZnMvY2FjaGVmaWxlcy9NYWtlZmlsZS0xNy1cXG4tLVxcbmZzL2NlcGgvTWFrZWZpbGU9OD1jZXBoLXkgOj0gc3VwZXIubyBpbm9kZS5vIGRpci5vIGZpbGUubyBsb2Nrcy5vIGFkZHIubyBpb2N0bC5vIFxcXFxcXG5mcy9jZXBoL01ha2VmaWxlOjk6XFx0ZXhwb3J0Lm8gY2Fwcy5vIHNuYXAubyB4YXR0ci5vIHF1b3RhLm8gaW8ubyBcXFxcXFxuZnMvY2VwaC9NYWtlZmlsZS0xMC1cXHRtZHNfY2xpZW50Lm8gbWRzbWFwLm8gc3RyaW5ncy5vIGNlcGhfZnJhZy5vIFxcXFxcXG4tLVxcbmZzL2NlcGgveGF0dHIuYz0xMTA2PXN0YXRpYyBpbnQgY2VwaF9zeW5jX3NldHhhdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsXFxuLS1cXG5mcy9jZXBoL3hhdHRyLmMtMTE1Mi1cXHRcXHRyZXEtXFx1MDAzZXJfYXJncy5zZXR4YXR0ci5mbGFncyA9IGNwdV90b19sZTMyKGZsYWdzKTtcXG5mcy9jZXBoL3hhdHRyLmM6MTE1MzpcXHRcXHRyZXEtXFx1MDAzZXJfYXJncy5zZXR4YXR0ci5vc2RtYXBfZXBvY2ggPVxcbmZzL2NlcGgveGF0dHIuYy0xMTU0LVxcdFxcdFxcdGNwdV90b19sZTMyKG9zZGMtXFx1MDAzZW9zZG1hcC1cXHUwMDNlZXBvY2gpO1xcbi0tXFxuZnMvZXJvZnMvTWFrZWZpbGU9ND1lcm9mcy1vYmpzIDo9IHN1cGVyLm8gaW5vZGUubyBkYXRhLm8gbmFtZWkubyBkaXIubyBzeXNmcy5vXFxuZnMvZXJvZnMvTWFrZWZpbGU6NTplcm9mcy0kKENPTkZJR19FUk9GU19GU19YQVRUUikgKz0geGF0dHIub1xcbmZzL2Vyb2ZzL01ha2VmaWxlLTYtZXJvZnMtJChDT05GSUdfRVJPRlNfRlNfWklQKSArPSBkZWNvbXByZXNzb3IubyB6bWFwLm8gemRhdGEubyB6dXRpbC5vXFxuLS1cXG5mcy9leHQyL01ha2VmaWxlPTEyPUNGTEFHU190cmFjZS5vIDo9IC1JJChzcmMpXFxuZnMvZXh0Mi9NYWtlZmlsZS0xMy1cXG5mcy9leHQyL01ha2VmaWxlOjE0OmV4dDItJChDT05GSUdfRVhUMl9GU19YQVRUUilcXHQgKz0geGF0dHIubyB4YXR0cl91c2VyLm8geGF0dHJfdHJ1c3RlZC5vXFxuZnMvZXh0Mi9NYWtlZmlsZS0xNS1leHQyLSQoQ09ORklHX0VYVDJfRlNfUE9TSVhfQUNMKSArPSBhY2wub1xcbi0tXFxuZnMvZXh0NC9NYWtlZmlsZT04PWV4dDQteVxcdDo9IGJhbGxvYy5vIGJpdG1hcC5vIGJsb2NrX3ZhbGlkaXR5Lm8gZGlyLm8gZXh0NF9qYmQyLm8gZXh0ZW50cy5vIFxcXFxcXG4tLVxcbmZzL2V4dDQvTWFrZWZpbGUtMTEtXFx0XFx0bW1wLm8gbW92ZV9leHRlbnQubyBuYW1laS5vIHBhZ2UtaW8ubyByZWFkcGFnZS5vIHJlc2l6ZS5vIFxcXFxcXG5mcy9leHQ0L01ha2VmaWxlOjEyOlxcdFxcdHN1cGVyLm8gc3ltbGluay5vIHN5c2ZzLm8geGF0dHIubyB4YXR0cl9odXJkLm8geGF0dHJfdHJ1c3RlZC5vIFxcXFxcXG5mcy9leHQ0L01ha2VmaWxlLTEzLVxcdFxcdHhhdHRyX3VzZXIubyBmYXN0X2NvbW1pdC5vIG9ycGhhbi5vXFxuLS1cXG5mcy9mMmZzL01ha2VmaWxlPTc9ZjJmcy0kKENPTkZJR19GMkZTX1NUQVRfRlMpICs9IGRlYnVnLm9cXG5mcy9mMmZzL01ha2VmaWxlOjg6ZjJmcy0kKENPTkZJR19GMkZTX0ZTX1hBVFRSKSArPSB4YXR0ci5vXFxuZnMvZjJmcy9NYWtlZmlsZS05LWYyZnMtJChDT05GSUdfRjJGU19GU19QT1NJWF9BQ0wpICs9IGFjbC5vXFxuLS1cXG5mcy9mdXNlL01ha2VmaWxlPTEzPWZ1c2UteSA6PSB0cmFjZS5vXFx0IyBwdXQgdHJhY2UubyBmaXJzdCBzbyB3ZSBzZWUgZnRyYWNlIGVycm9ycyBzb29uZXJcXG5mcy9mdXNlL01ha2VmaWxlOjE0OmZ1c2UteSArPSBkZXYubyBkaXIubyBmaWxlLm8gaW5vZGUubyBjb250cm9sLm8geGF0dHIubyBhY2wubyByZWFkZGlyLm8gaW9jdGwubyByZXFfdGltZW91dC5vIHJlcS5vXFxuZnMvZnVzZS9NYWtlZmlsZS0xNS1mdXNlLXkgKz0gcG9sbC5vIG5vdGlmeS5vXFxuLS1cXG5mcy9nZnMyL01ha2VmaWxlPTM9b2JqLSQoQ09ORklHX0dGUzJfRlMpICs9IGdmczIub1xcbmZzL2dmczIvTWFrZWZpbGU6NDpnZnMyLXkgOj0gYWNsLm8gYm1hcC5vIGRpci5vIHhhdHRyLm8gZ2xvY2subyBcXFxcXFxuZnMvZ2ZzMi9NYWtlZmlsZS01LVxcdGdsb3BzLm8gbG9nLm8gbG9wcy5vIG1haW4ubyBtZXRhX2lvLm8gXFxcXFxcbi0tXFxuZnMvaGZzcGx1cy9NYWtlZmlsZT04PWhmc3BsdXMtb2JqcyA6PSBzdXBlci5vIG9wdGlvbnMubyBpbm9kZS5vIGlvY3RsLm8gZXh0ZW50cy5vIGNhdGFsb2cubyBkaXIubyBidHJlZS5vIFxcXFxcXG5mcy9oZnNwbHVzL01ha2VmaWxlLTktXFx0XFx0Ym5vZGUubyBicmVjLm8gYmZpbmQubyB0YWJsZXMubyB1bmljb2RlLm8gd3JhcHBlci5vIGJpdG1hcC5vIHBhcnRfdGJsLm8gXFxcXFxcbmZzL2hmc3BsdXMvTWFrZWZpbGU6MTA6XFx0XFx0YXR0cmlidXRlcy5vIHhhdHRyLm8geGF0dHJfdXNlci5vIHhhdHRyX3NlY3VyaXR5Lm8geGF0dHJfdHJ1c3RlZC5vXFxuZnMvaGZzcGx1cy9NYWtlZmlsZS0xMS1cXG4tLVxcbmZzL2pmZnMyL01ha2VmaWxlPTE0PWpmZnMyLSQoQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSKVxcdCs9IHdidWYub1xcbmZzL2pmZnMyL01ha2VmaWxlOjE1OmpmZnMyLSQoQ09ORklHX0pGRlMyX0ZTX1hBVFRSKVxcdFxcdCs9IHhhdHRyLm8geGF0dHJfdHJ1c3RlZC5vIHhhdHRyX3VzZXIub1xcbmZzL2pmZnMyL01ha2VmaWxlLTE2LWpmZnMyLSQoQ09ORklHX0pGRlMyX0ZTX1NFQ1VSSVRZKVxcdCs9IHNlY3VyaXR5Lm9cXG4tLVxcbmZzL2pmcy9NYWtlZmlsZT04PWpmcy15ICAgIDo9IHN1cGVyLm8gZmlsZS5vIGlub2RlLm8gbmFtZWkubyBqZnNfbW91bnQubyBqZnNfdW1vdW50Lm8gXFxcXFxcbi0tXFxuZnMvamZzL01ha2VmaWxlLTEyLVxcdCAgICBqZnNfbG9nbWdyLm8gamZzX3R4bm1nci5vIFxcXFxcXG5mcy9qZnMvTWFrZWZpbGU6MTM6XFx0ICAgIHJlc2l6ZS5vIHhhdHRyLm8gaW9jdGwub1xcbmZzL2pmcy9NYWtlZmlsZS0xNC1cXG4tLVxcbmZzL25mcy9NYWtlZmlsZT0zMz1uZnN2NC0kKENPTkZJR19ORlNfVjRfMClcXHQrPSBuZnM0MGNsaWVudC5vIG5mczQwcHJvYy5vXFxuZnMvbmZzL01ha2VmaWxlOjM0Om5mc3Y0LSQoQ09ORklHX05GU19WNF8yKVxcdCs9IG5mczQycHJvYy5vIG5mczQyeGF0dHIub1xcbmZzL25mcy9NYWtlZmlsZS0zNS1cXG4tLVxcbmZzL250ZnMzL01ha2VmaWxlPTMzPW50ZnMzLXkgOj1cXHRhdHRyaWIubyBcXFxcXFxuLS1cXG5mcy9udGZzMy9NYWtlZmlsZS00OS1cXHRcXHR1cGNhc2UubyBcXFxcXFxuZnMvbnRmczMvTWFrZWZpbGU6NTA6XFx0XFx0eGF0dHIub1xcbmZzL250ZnMzL01ha2VmaWxlLTUxLVxcbi0tXFxuZnMvb2NmczIvTWFrZWZpbGU9MTE9b2NmczItb2JqcyA6PSBcXFxcXFxuLS1cXG5mcy9vY2ZzMi9NYWtlZmlsZS00MS1cXHRxdW90YV9nbG9iYWwub1xcdFxcdFxcXFxcXG5mcy9vY2ZzMi9NYWtlZmlsZTo0MjpcXHR4YXR0ci5vXFx0XFx0XFx0XFxcXFxcbmZzL29jZnMyL01ha2VmaWxlLTQzLVxcdGFjbC5vXFx0XFxcXFxcbi0tXFxuZnMvb3JhbmdlZnMvTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfT1JBTkdFRlNfRlMpICs9IG9yYW5nZWZzLm9cXG5mcy9vcmFuZ2Vmcy9NYWtlZmlsZS03LVxcbmZzL29yYW5nZWZzL01ha2VmaWxlOjg6b3JhbmdlZnMtb2JqcyA6PSBhY2wubyBmaWxlLm8gb3JhbmdlZnMtY2FjaGUubyBvcmFuZ2Vmcy11dGlscy5vIHhhdHRyLm8gXFxcXFxcbmZzL29yYW5nZWZzL01ha2VmaWxlLTktXFx0XFx0IGRjYWNoZS5vIGlub2RlLm8gb3JhbmdlZnMtc3lzZnMubyBvcmFuZ2Vmcy1tb2QubyBzdXBlci5vIFxcXFxcXG4tLVxcbmZzL3NtYi9jbGllbnQvTWFrZWZpbGU9MTk9JChvYmopL2NpZnNfc3BuZWdvX25lZ3Rva2VuaW5pdC5hc24xLm86ICQob2JqKS9jaWZzX3NwbmVnb19uZWd0b2tlbmluaXQuYXNuMS5jICQob2JqKS9jaWZzX3NwbmVnb19uZWd0b2tlbmluaXQuYXNuMS5oXFxuZnMvc21iL2NsaWVudC9NYWtlZmlsZS0yMC1cXG5mcy9zbWIvY2xpZW50L01ha2VmaWxlOjIxOmNpZnMtJChDT05GSUdfQ0lGU19YQVRUUikgKz0geGF0dHIub1xcbmZzL3NtYi9jbGllbnQvTWFrZWZpbGUtMjItXFxuLS1cXG5mcy9zcXVhc2hmcy9NYWtlZmlsZT0xMz1zcXVhc2hmcy0kKENPTkZJR19TUVVBU0hGU19ERUNPTVBfTVVMVElfUEVSQ1BVKSArPSBkZWNvbXByZXNzb3JfbXVsdGlfcGVyY3B1Lm9cXG5mcy9zcXVhc2hmcy9NYWtlZmlsZToxNDpzcXVhc2hmcy0kKENPTkZJR19TUVVBU0hGU19YQVRUUikgKz0geGF0dHIubyB4YXR0cl9pZC5vXFxuZnMvc3F1YXNoZnMvTWFrZWZpbGUtMTUtc3F1YXNoZnMtJChDT05GSUdfU1FVQVNIRlNfTFo0KSArPSBsejRfd3JhcHBlci5vXFxuLS1cXG5mcy91Ymlmcy9NYWtlZmlsZT05PXViaWZzLSQoQ09ORklHX0ZTX0VOQ1JZUFRJT04pICs9IGNyeXB0by5vXFxuZnMvdWJpZnMvTWFrZWZpbGU6MTA6dWJpZnMtJChDT05GSUdfVUJJRlNfRlNfWEFUVFIpICs9IHhhdHRyLm9cXG5mcy91Ymlmcy9NYWtlZmlsZS0xMS11Ymlmcy0kKENPTkZJR19VQklGU19GU19BVVRIRU5USUNBVElPTikgKz0gYXV0aC5vXFxuLS1cXG5mcy94ZnMvTWFrZWZpbGU9NzE9eGZzLXlcXHRcXHRcXHRcXHQrPSB4ZnNfYW9wcy5vIFxcXFxcXG4tLVxcbmZzL3hmcy9NYWtlZmlsZS0xMDktXFx0XFx0XFx0XFx0ICAgeGZzX3ZlcmlmeV9tZWRpYS5vIFxcXFxcXG5mcy94ZnMvTWFrZWZpbGU6MTEwOlxcdFxcdFxcdFxcdCAgIHhmc194YXR0ci5vXFxuZnMveGZzL01ha2VmaWxlLTExMS1cXG4tLVxcbmZzL3hmcy9NYWtlZmlsZT0xNjg9eGZzLXlcXHRcXHRcXHRcXHQrPSAkKGFkZHByZWZpeCBzY3J1Yi8sIFxcXFxcXG4tLVxcbmZzL3hmcy9NYWtlZmlsZS0xODUtXFx0XFx0XFx0XFx0ICAgaXNjYW4ubyBcXFxcXFxuZnMveGZzL01ha2VmaWxlOjE4NjpcXHRcXHRcXHRcXHQgICBsaXN0eGF0dHIubyBcXFxcXFxuZnMveGZzL01ha2VmaWxlLTE4Ny1cXHRcXHRcXHRcXHQgICBtZXRhcGF0aC5vIFxcXFxcXG4tLVxcbmlvX3VyaW5nL01ha2VmaWxlPTk9b2JqLSQoQ09ORklHX0lPX1VSSU5HKVxcdFxcdCs9IGlvX3VyaW5nLm8gb3BkZWYubyBrYnVmLm8gcnNyYy5vIG5vdGlmLm8gXFxcXFxcbi0tXFxuaW9fdXJpbmcvTWFrZWZpbGUtMTEtXFx0XFx0XFx0XFx0XFx0dHcubyB3YWl0Lm8gZXZlbnRmZC5vIHVyaW5nX2NtZC5vIFxcXFxcXG5pb191cmluZy9NYWtlZmlsZToxMjpcXHRcXHRcXHRcXHRcXHRvcGVuY2xvc2UubyBzcXBvbGwubyB4YXR0ci5vIG5vcC5vIFxcXFxcXG5pb191cmluZy9NYWtlZmlsZS0xMy1cXHRcXHRcXHRcXHRcXHRmcy5vIHNwbGljZS5vIHN5bmMubyBtc2dfcmluZy5vIFxcXFxcXG4tLVxcbm5ldC9jZXBoL29zZF9jbGllbnQuYz0zNzE9c3RhdGljIHZvaWQgb3NkX3JlcV9vcF9kYXRhX3JlbGVhc2Uoc3RydWN0IGNlcGhfb3NkX3JlcXVlc3QgKm9zZF9yZXEsXFxuLS1cXG5uZXQvY2VwaC9vc2RfY2xpZW50LmMtMzkzLVxcdGNhc2UgQ0VQSF9PU0RfT1BfQ01QWEFUVFI6XFxubmV0L2NlcGgvb3NkX2NsaWVudC5jOjM5NDpcXHRcXHRjZXBoX29zZF9kYXRhX3JlbGVhc2UoXFx1MDAyNm9wLVxcdTAwM2V4YXR0ci5vc2RfZGF0YSk7XFxubmV0L2NlcGgvb3NkX2NsaWVudC5jLTM5NS1cXHRcXHRicmVhaztcXG4tLVxcbm5ldC9jZXBoL29zZF9jbGllbnQuYz04NDQ9aW50IG9zZF9yZXFfb3BfeGF0dHJfaW5pdChzdHJ1Y3QgY2VwaF9vc2RfcmVxdWVzdCAqb3NkX3JlcSwgdW5zaWduZWQgaW50IHdoaWNoLFxcbi0tXFxubmV0L2NlcGgvb3NkX2NsaWVudC5jLTg3NC1cXG5uZXQvY2VwaC9vc2RfY2xpZW50LmM6ODc1OlxcdGNlcGhfb3NkX2RhdGFfcGFnZWxpc3RfaW5pdChcXHUwMDI2b3AtXFx1MDAzZXhhdHRyLm9zZF9kYXRhLCBwYWdlbGlzdCk7XFxubmV0L2NlcGgvb3NkX2NsaWVudC5jLTg3Ni1cXHRvcC1cXHUwMDNlaW5kYXRhX2xlbiA9IHBheWxvYWRfbGVuO1xcbi0tXFxubmV0L2NlcGgvb3NkX2NsaWVudC5jPTIwNDE9c3RhdGljIHZvaWQgc2V0dXBfcmVxdWVzdF9kYXRhKHN0cnVjdCBjZXBoX29zZF9yZXF1ZXN0ICpyZXEpXFxuLS1cXG5uZXQvY2VwaC9vc2RfY2xpZW50LmMtMjA2NC1cXHRcXHRcXHRjZXBoX29zZGNfbXNnX2RhdGFfYWRkKHJlcXVlc3RfbXNnLFxcbm5ldC9jZXBoL29zZF9jbGllbnQuYzoyMDY1OlxcdFxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2b3AtXFx1MDAzZXhhdHRyLm9zZF9kYXRhKTtcXG5uZXQvY2VwaC9vc2RfY2xpZW50LmMtMjA2Ni1cXHRcXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTY6NTE6MTkuNjE5NjQ3MjU4WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk2NDcwNTg4ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBQbGFuIGZvciBFeHRlbmRlZCBBdHRyaWJ1dGVzIHdpdGggT19QQVRIIGFuZCBBVF9FTVBUWV9QQVRIKipcblxuT2theSwgc28gYGZzL01ha2VmaWxlYCBhbHdheXMgaW5jbHVkZXMgYHhhdHRyLm9gLCBtZWFuaW5nIHRoZSBleHRlbmRlZCBhdHRyaWJ1dGUgY29kZSBpcyBhbHdheXMgY29tcGlsZWQuIFRoYXQncyBnb29kOyBpdCBzaW1wbGlmaWVzIHRoaW5ncy4gVGhlIGBzZXR4YXR0cmF0YCwgYGdldHhhdHRyYXRgLCBgbGlzdHhhdHRyYXRgLCBhbmQgYHJlbW92ZXhhdHRyYXRgIHN5c2NhbGxzIGFyZSBhbHdheXMgYXZhaWxhYmxlLlxuXG5UaGUgY29yZSBvZiB0aGUgY2hhbmdlIGlzIGVuYWJsaW5nIGBPX1BBVEhgIGZpbGUgZGVzY3JpcHRvcnMgd2l0aCBgQVRfRU1QVFlfUEFUSGAgaW4gdGhvc2UgYCp4YXR0cmF0YCBzeXNjYWxscy4gVGhhdCdzIGEgZGVmaW5pdGUgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCByZXF1aXJlcyBmdXp6aW5nLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGZvY3VzIG9uIGBwYXRoX3NldHhhdHRyYXRgLCBgcGF0aF9nZXR4YXR0cmF0YCwgYHBhdGhfbGlzdHhhdHRyYXRgLCBhbmQgYHBhdGhfcmVtb3ZleGF0dHJhdGAsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZG9uJ3QgbWlzcyBhbnl0aGluZy4gV2FpdCwgdGhlICphY3R1YWwqIHN5c2NhbGxzLCBmcm9tIHRoZSB1c2VyJ3MgcGVyc3BlY3RpdmUsIGFyZSBgc2V0eGF0dHJhdGAsIGBnZXR4YXR0cmF0YCwgYGxpc3R4YXR0cmF0YCwgYHJlbW92ZXhhdHRyYXRgLiBJIG5lZWQgdG8gY292ZXIgYm90aC4gTm8sIGxldCdzIHN0aWNrIHdpdGggdGhlIGZ1bmN0aW9ucyBiZWNhdXNlIHRob3NlIGZ1bmN0aW9ucyBhcmUgdGhlIG9uZXMgdGhhdCBhY3R1YWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGFuZCB0YWtlIHRoZSByYXcgcGFyYW1ldGVyIGFuZCBzbyBJIHRoaW5rIHRob3NlIGFyZSB0aGUgYmVzdCBmb2N1cyBzeW1ib2xzLlxuXG5Ob3csIHdoaWxlIHRoaW5raW5nIGFib3V0IHRoaXMsIEkgcmVhbGl6ZSBpdCdzIHdvcnRoIGNvdmVyaW5nIHRoZSBzeXNjYWxsIHdyYXBwZXJzIHRvbzogYHN5c19zZXR4YXR0cmF0YCwgYHN5c19nZXR4YXR0cmF0YCwgYHN5c19saXN0eGF0dHJhdGAsIGBzeXNfcmVtb3ZleGF0dHJhdGAuIEFoIHJpZ2h0LCBgU1lTQ0FMTF9ERUZJTkU2YCBnZW5lcmF0ZXMgdGhlIGFjdHVhbCBzeXNjYWxsIGZ1bmN0aW9ucy4gQmV0dGVyIHRvIGZvY3VzIG9uIHRoZSBgcGF0aF8qYCBmdW5jdGlvbnMuXG5cblNpbmNlIHRoZSB4YXR0ciBjb2RlIGlzIGFsd2F5cyBjb21waWxlZCwgSSBkb24ndCBuZWVkIGFueSBzcGVjaWFsIGNvbmZpZ3VyYXRpb25zIHRvIGVuYWJsZSBpdC4gQnV0LCB0byB0ZXN0IHRoaXMgbmV3IGZ1bmN0aW9uYWxpdHksIEknbGwgbmVlZCBhIGZpbGVzeXN0ZW0gdGhhdCBzdXBwb3J0cyB4YXR0cnMuIGBFWFQ0X0ZTX1hBVFRSYCBvciBgVE1QRlNfWEFUVFJgIHdvdWxkIGJlIGdvb2QgY2hvaWNlcy4gQ29uc2lkZXJpbmcgc3l6a2FsbGVyLCBgVE1QRlNfWEFUVFJgIGlzIHR5cGljYWxseSBlbmFibGVkLCB3aGljaCBtZWFucyBpdCB3aWxsIGJlIGVhc2lseSBhY2Nlc3NpYmxlLiBZZXMsIEknbGwgYWRkIGBUTVBGU19YQVRUUmAgYW5kIGBFWFQ0X0ZTX1hBVFRSYCB0byBgRW5hYmxlQ29uZmlnc2AganVzdCB0byBiZSBjZXJ0YWluLlxuXG5MZXQgbWUgcmVmcmVzaCBteSBtZW1vcnkgb24gYGZkX21heWJlX3Jhd2AuIEl0J3MgYSBtYWNybzogYERFRklORV9DTEFTUyhmZF9tYXliZV9yYXcsIHN0cnVjdCBmZCwgZmRwdXQoX1QpLCByYXcgPyBmZGdldF9yYXcoZmQpIDogZmRnZXQoZmQpLCBpbnQgZmQsIGJvb2wgcmF3KWAuIEl0J3MgdXNlZCBpbiBgZnMveGF0dHIuY2AsIHNvIEknbGwgZG91YmxlIGNoZWNrIGhvdyBpdCdzIHVzZWQuIEp1c3QgaW4gY2FzZSwgSSdsbCBgZ3JlcGAgZm9yIG90aGVyIG9jY3VycmVuY2VzIG9mIGBmZF9tYXliZV9yYXdgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODMwOCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxNjo1MToyOS4yNjY3MDg2ODFaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NjA2ODkyNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmRfbWF5YmVfcmF3XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3hhdHRyLmM9NzAxPXN0YXRpYyBpbnQgcGF0aF9zZXR4YXR0cmF0KGludCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICpwYXRobmFtZSxcXG4tLVxcbmZzL3hhdHRyLmMtNzI4LVxcdGlmICghZmlsZW5hbWUgXFx1MDAyNlxcdTAwMjYgZGZkIFxcdTAwM2U9IDApIHtcXG5mcy94YXR0ci5jOjcyOTpcXHRcXHRDTEFTUyhmZF9tYXliZV9yYXcsIGYpKGRmZCwgcmF3KTtcXG5mcy94YXR0ci5jLTczMC1cXHRcXHRpZiAoZmRfZW1wdHkoZikpXFxuLS1cXG5mcy94YXR0ci5jPTg0OD1zdGF0aWMgc3NpemVfdCBwYXRoX2dldHhhdHRyYXQoaW50IGRmZCwgY29uc3QgY2hhciBfX3VzZXIgKnBhdGhuYW1lLFxcbi0tXFxuZnMveGF0dHIuYy04NjktXFx0aWYgKCFmaWxlbmFtZSBcXHUwMDI2XFx1MDAyNiBkZmQgXFx1MDAzZT0gMCkge1xcbmZzL3hhdHRyLmM6ODcwOlxcdFxcdENMQVNTKGZkX21heWJlX3JhdywgZikoZGZkLCByYXcpO1xcbmZzL3hhdHRyLmMtODcxLVxcdFxcdGlmIChmZF9lbXB0eShmKSlcXG4tLVxcbmZzL3hhdHRyLmM9OTg3PXN0YXRpYyBzc2l6ZV90IHBhdGhfbGlzdHhhdHRyYXQoaW50IGRmZCwgY29uc3QgY2hhciBfX3VzZXIgKnBhdGhuYW1lLFxcbi0tXFxuZnMveGF0dHIuYy05OTctXFx0aWYgKCFmaWxlbmFtZSkge1xcbmZzL3hhdHRyLmM6OTk4OlxcdFxcdENMQVNTKGZkX21heWJlX3JhdywgZikoZGZkLCByYXcpO1xcbmZzL3hhdHRyLmMtOTk5LVxcdFxcdGlmIChmZF9lbXB0eShmKSlcXG4tLVxcbmZzL3hhdHRyLmM9MTA4MD1zdGF0aWMgaW50IHBhdGhfcmVtb3ZleGF0dHJhdChpbnQgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqcGF0aG5hbWUsXFxuLS1cXG5mcy94YXR0ci5jLTEwOTYtXFx0aWYgKCFmaWxlbmFtZSkge1xcbmZzL3hhdHRyLmM6MTA5NzpcXHRcXHRDTEFTUyhmZF9tYXliZV9yYXcsIGYpKGRmZCwgcmF3KTtcXG5mcy94YXR0ci5jLTEwOTgtXFx0XFx0aWYgKGZkX2VtcHR5KGYpKVxcbi0tXFxuaW5jbHVkZS9saW51eC9maWxlLmg9ODQ9REVGSU5FX0NMQVNTKGZkX3Jhdywgc3RydWN0IGZkLCBmZHB1dChfVCksIGZkZ2V0X3JhdyhmZCksIGludCBmZClcXG5pbmNsdWRlL2xpbnV4L2ZpbGUuaDo4NTpERUZJTkVfQ0xBU1MoZmRfbWF5YmVfcmF3LCBzdHJ1Y3QgZmQsIGZkcHV0KF9UKSxcXG5pbmNsdWRlL2xpbnV4L2ZpbGUuaC04Ni1cXHQgICAgIHJhdyA/IGZkZ2V0X3JhdyhmZCkgOiBmZGdldChmZCksIGludCBmZCwgYm9vbCByYXcpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE2OjUxOjMwLjgyNzQwNDg2MVoiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5ODczNjg1ODM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBFeHRlbmRlZCBBdHRyaWJ1dGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgYGZzL3hhdHRyLmNgLiBUaGF0IG5hcnJvd3MgdGhlIHNjb3BlIGNvbnNpZGVyYWJseSwgd2hpY2ggaXMgaGVscGZ1bC4gVGhlIGNvcmUgb2YgdGhpcyBjaGFuZ2Ugc2VlbXMgdG8gYmUgYXJvdW5kIGVuYWJsaW5nIGAqeGF0dHJhdGAgc3lzY2FsbHMgdG8gd29yayBjb3JyZWN0bHkgd2l0aCBgT19QQVRIYCBmaWxlIGRlc2NyaXB0b3JzLCBwYXJ0aWN1bGFybHkgd2hlbiB1c2luZyBgQVRfRU1QVFlfUEFUSGAuIFRoYXQncyB3aGVyZSB0aGUgbmV3IGBmZF9tYXliZV9yYXdgIGNsYXNzIGNvbWVzIGluLCB1c2luZyBgZmRnZXRfcmF3YCBpbnN0ZWFkIG9mIHRoZSB1c3VhbCBgZmRnZXRgLiBGdW5jdGlvbmFsbHksIHRoaXMgbW9kaWZpZXMgdGhlIGJlaGF2aW9yIG9mIHNldmVyYWwga2V5IHN5c2NhbGxzOiBgcGF0aF9zZXR4YXR0cmF0YCwgYHBhdGhfZ2V0eGF0dHJhdGAsIGBwYXRoX2xpc3R4YXR0cmF0YCwgYW5kIGBwYXRoX3JlbW92ZXhhdHRyYXRgLiBJdCBicmluZ3MgdGhlbSBpbiBsaW5lIHdpdGggdGhlIGJlaGF2aW9yIG9mIG90aGVyIGAqYXRgIGNhbGxzIGxpa2UgYGZjaG93bmF0YCBhbmQgYGZzdGF0YXRgLiBUaGlzIGNvbnNpc3RlbmN5IGlzIGdvb2QgZnJvbSBhIGRlc2lnbiBwZXJzcGVjdGl2ZS5cblxuTXkgcHJpbWFyeSBjb25jZXJuLCB0aG91Z2gsIGlzIGVuc3VyaW5nIG5vIHJlZ3Jlc3Npb25zIG9yIHVuZXhwZWN0ZWQgc2lkZSBlZmZlY3RzLiBXZSBuZWVkIHRvIHJpZ29yb3VzbHkgZnV6eiB0aGVzZSBtb2RpZmllZCBzeXNjYWxscywgZXNwZWNpYWxseSBpbiBjb25qdW5jdGlvbiB3aXRoIGBPX1BBVEhgIGFuZCBleHRlbmRlZCBhdHRyaWJ1dGVzLiBJJ2xsIG1ha2Ugc3VyZSB0aGUgZnV6emVyIGNvdmVycyB0aGlzIGV4dGVuc2l2ZWx5LiBJJ2xsIG5lZWQgdG8gc2V0IHVwIHRoZSBmdXp6aW5nIHdpdGggdGhlIGNvbmZpZ3VyYXRpb25zIGBUTVBGU19YQVRUUmAgYW5kIGBFWFQ0X0ZTX1hBVFRSYCBlbmFibGVkIHRvIHRlc3QgaXQgdGhvcm91Z2hseSBhY3Jvc3MgZGlmZmVyZW50IGZpbGVzeXN0ZW1zLiBJIHdpbGwgYWxzbyBoYXZlIHRvIGxvb2sgZm9yIHNldC1yZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDEzNywiT3V0cHV0VG9rZW5zIjoyNTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTY6NTE6NDAuNzAxMDkzNzg4WiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzA0MTc2NTgsIkVycm9yIjoidGhlIGZvbGxvd2luZyBjb25maWdzIGRvIG5vdCBleGlzdCBpbiB0aGUga2VybmVsIHRyZWU6IEVYVDRfRlNfWEFUVFIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVE1QRlNfWEFUVFJcIixcbiAgICBcIkVYVDRfRlNfWEFUVFJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwYXRoX3NldHhhdHRyYXRcIixcbiAgICBcInBhdGhfZ2V0eGF0dHJhdFwiLFxuICAgIFwicGF0aF9saXN0eGF0dHJhdFwiLFxuICAgIFwicGF0aF9yZW1vdmV4YXR0cmF0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGAqeGF0dHJhdGAgc3lzY2FsbHMgKGUuZy4sIGBzZXR4YXR0cmF0YCwgYGdldHhhdHRyYXRgLCBgbGlzdHhhdHRyYXRgLCBgcmVtb3ZleGF0dHJhdGApIHRvIGFsbG93IG9wZXJhdGluZyBvbiBgT19QQVRIYCBmaWxlIGRlc2NyaXB0b3JzIHdoZW4gYEFUX0VNUFRZX1BBVEhgIGlzIHVzZWQuIFRoaXMgaXMgYWNoaWV2ZWQgYnkgaW50cm9kdWNpbmcgYSBuZXcgYGZkX21heWJlX3Jhd2AgY2xhc3MgdGhhdCB1c2VzIGBmZGdldF9yYXdgIGluc3RlYWQgb2YgYGZkZ2V0YCB3aGVuIHRoZSBgcmF3YCBwYXJhbWV0ZXIgaXMgdHJ1ZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWx0ZXJzIHRoZSBiZWhhdmlvciBvZiB0aGVzZSBzeXNjYWxscywgbWFraW5nIHRoZW0gY29uc2lzdGVudCB3aXRoIG90aGVyIGAqYXRgIHN5c2NhbGxzIGxpa2UgYGZjaG93bmF0YCBhbmQgYGZzdGF0YXRgLiBJdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gcmVncmVzc2lvbnMgb3IgdW5leHBlY3RlZCBiZWhhdmlvcnMgd2hlbiB1c2luZyBgT19QQVRIYCBmaWxlIGRlc2NyaXB0b3JzIHdpdGggZXh0ZW5kZWQgYXR0cmlidXRlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJ0aGUgZm9sbG93aW5nIGNvbmZpZ3MgZG8gbm90IGV4aXN0IGluIHRoZSBrZXJuZWwgdHJlZTogRVhUNF9GU19YQVRUUlwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxNjo1MTo0MC43NzE1MjAzNjZaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzM2MTMwOTg4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGVidWdnaW5nIGFuIEVYVDQgRXh0ZW5kZWQgQXR0cmlidXRlIElzc3VlKipcblxuQWxyaWdodCwgc28gYEVYVDRfRlNfWEFUVFJgIHNlZW1zIHRvIGJlIHVuZGVmaW5lZC4uLiBhIGJpdCBvZGQuIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMsIGlzIHRvIGRpdmUgaW50byB0aGUgS2NvbmZpZy4gSSBrbm93IGl0J3MgKmdvdCogdG8gYmUgY29udHJvbGxlZCBieSBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHNvbWV3aGVyZS4gUHJvYmFibHkgYSBmYWlybHkgc3RyYWlnaHRmb3J3YXJkIG9uZSwgYnV0IHRoZSBLY29uZmlnIGlzIHRoZSBzb3VyY2Ugb2YgdHJ1dGggZm9yIHRoZXNlIHRoaW5ncy4gTGV0IG1lIHB1bGwgdXAgYGZzL2V4dDQvS2NvbmZpZ2AgYW5kIGRvdWJsZS1jaGVjayBpdHMgZGVmaW5pdGlvbiBhbmQgZGVwZW5kZW5jaWVzLiBJdCdzIGFsbW9zdCBjZXJ0YWlubHkgY29uZGl0aW9uYWwgb24gc29tZXRoaW5nLCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0aGF0IHRyaWdnZXIgaXMgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIuIEdvdHRhIG1ha2Ugc3VyZSB0aGUgZmVhdHVyZSdzIGVuYWJsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwOTcwLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJzZXQtcmVzdWx0cyJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE2OjUxOjQ4LjEzMjgzNjY0OFoiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY4MjA1Mjc2NywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEVYVDRfRlNfWEFUVFJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE2OjUxOjQ5LjgxNDg5Njg0NVoiLCJTZXEiOjUxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTg3NzU0NDM1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLCBJIG5lZWQgdG8gZ2V0IHRoaXMgc3RyYWlnaHQgaW4gbXkgaGVhZC5cblxuKipFeHQ0IFhhdHRyIE1vZHVsZSBJbnF1aXJ5KipcblxuSG1tLCBJIHNlZW0gdG8gcmVjYWxsIGNhdGNoaW5nIGEgbGluZSBpbiBgRG9jdW1lbnRhdGlvbi9rYnVpbGQvbWFrZWZpbGVzLnJzdGAgdGhhdCBsb29rZWQgc29tZXRoaW5nIGxpa2UgYGV4dDQtJChDT05GSUdfRVhUNF9GU19YQVRUUikgKz0geGF0dHIub2AuIEJ1dCB0aGF0IGNvdWxkIGhhdmUganVzdCBiZWVuIGFuIGV4YW1wbGUgc25pcHBldC4gSSBuZWVkIHRvIGJlIHN1cmUuIEl0J3MgYmVzdCB0byBjaGVjayB0aGUgYWN0dWFsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gTGV0J3MgZGlnIGludG8gYGZzL2V4dDQvS2NvbmZpZ2AgdG8gY29uZmlybSBpZiB0aGF0J3MgdGhlIGNvcnJlY3QgcmVmZXJlbmNlIGZvciB0aGUgZVh0ZW5lZCBBdHRyaWJ1dGVzIGluIHRoZSBFeHQ0IGZpbGVzeXN0ZW0uIEkgbmVlZCB0aGUgZGVmaW5pdGl2ZSBhbnN3ZXIgYmVmb3JlIHByb2NlZWRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxMTkyLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTY6NTI6MjUuNjkyNDQzNTE2WiIsIlNlcSI6NTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzYyNzU1NDI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBFWFQ0X0ZTXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL2V4dDQvS2NvbmZpZzoyOmNvbmZpZyBFWFQ0X0ZTXFxuZnMvZXh0NC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlRoZSBFeHRlbmRlZCA0IChleHQ0KSBmaWxlc3lzdGVtXFxcIlxcbi0tXFxuZnMvZXh0NC9LY29uZmlnPTM1PWNvbmZpZyBFWFQ0X1VTRV9GT1JfRVhUMlxcbi0tXFxuZnMvZXh0NC9LY29uZmlnLTQ1LVxcbmZzL2V4dDQvS2NvbmZpZzo0Njpjb25maWcgRVhUNF9GU19QT1NJWF9BQ0xcXG5mcy9leHQ0L0tjb25maWctNDctXFx0Ym9vbCBcXFwiRXh0NCBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1xcXCJcXG4tLVxcbmZzL2V4dDQvS2NvbmZpZy01NS1cXG5mcy9leHQ0L0tjb25maWc6NTY6Y29uZmlnIEVYVDRfRlNfU0VDVVJJVFlcXG5mcy9leHQ0L0tjb25maWctNTctXFx0Ym9vbCBcXFwiRXh0NCBTZWN1cml0eSBMYWJlbHNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE2OjUyOjI3LjQ1NTIwNTFaIiwiU2VxIjo1MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkyNDY3OTA2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgRmlsZSBTeXN0ZW0gTWV0YWRhdGEqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBpbnRvIGhvdyBleHRlbmRlZCBhdHRyaWJ1dGVzICh4YXR0cnMpIGFyZSBoYW5kbGVkIHdpdGhpbiBmaWxlIHN5c3RlbXMsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBleHQ0LiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgYEVYVDRfRlNfWEFUVFJgIG1pZ2h0IGJlIGEgY29uZmlndXJhdGlvbiBvcHRpb24gSSBuZWVkZWQgdG8gY2hlY2suIEJ1dCB3YWl0LCB0aGF0J3Mgbm90IHJpZ2h0LiBJIHJlbWVtYmVyIG5vdzsgeGF0dHJzIGFyZSAqYWx3YXlzKiBlbmFibGVkIGluIGV4dDQuIEl0J3MgYSBmdW5kYW1lbnRhbCBwYXJ0IG9mIHRoZSBkZXNpZ24sIHNvIHRoZXJlJ3Mgbm8gY29tcGlsZS10aW1lIHN3aXRjaCBmb3IgaXQuIFRoYXQgZWxpbWluYXRlcyBhIHBvdGVudGlhbCBhcmVhIG9mIGludmVzdGlnYXRpb24uIE5vdywgYSBkaWZmZXJlbnQgYW5nbGUuIExldCdzIHNoaWZ0IG91ciBmb2N1cyB0byBgVE1QRlNfWEFUVFJgLiBQZXJoYXBzIHRoZSBoYW5kbGluZyBvZiB4YXR0cnMgaW4gYSB0bXBmcyBlbnZpcm9ubWVudCBvZmZlcnMgYSBtb3JlIHJlbGV2YW50IHBvaW50IG9mIGlucXVpcnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxNjI3LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTY6NTI6MzAuMzc5ODg2NDQ2WiIsIlNlcSI6NTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjI0NzQ1NjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBUTVBGU19YQVRUUlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9LY29uZmlnPTE4MT1jb25maWcgVE1QRlNfUE9TSVhfQUNMXFxuLS1cXG5mcy9LY29uZmlnLTE5OC1cXG5mcy9LY29uZmlnOjE5OTpjb25maWcgVE1QRlNfWEFUVFJcXG5mcy9LY29uZmlnLTIwMC1cXHRib29sIFxcXCJUbXBmcyBleHRlbmRlZCBhdHRyaWJ1dGVzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxNjo1MjozMi4wMDQ2Mzk4NjRaIiwiU2VxIjo1NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgwNjUzMTY5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipVdGlsaXppbmcgVE1QRlNfWEFUVFIqKlxuXG5SaWdodCwgKlRNUEZTX1hBVFRSKiBkb2VzIGluZGVlZCBleGlzdC4gTm8gbmVlZCB0byBvdmVyY29tcGxpY2F0ZSB0aGluZ3M7IHRoYXQncyB0aGUgY2xlYW5lc3QgYW5kIG1vc3QgZGlyZWN0IGFwcHJvYWNoIGhlcmUuIEknbGwganVzdCBsZXZlcmFnZSAqVE1QRlNfWEFUVFIqLiBTaW1wbGljaXR5IGFuZCBlZmZpY2llbmN5LiBEb25lLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTkxMiwiT3V0cHV0VG9rZW5zIjoyNDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxNjo1MjozNS44MTExNzQxMjdaIiwiU2VxIjo1NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjUwMDE5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVE1QRlNfWEFUVFJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwYXRoX3NldHhhdHRyYXRcIixcbiAgICBcInBhdGhfZ2V0eGF0dHJhdFwiLFxuICAgIFwicGF0aF9saXN0eGF0dHJhdFwiLFxuICAgIFwicGF0aF9yZW1vdmV4YXR0cmF0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGAqeGF0dHJhdGAgc3lzY2FsbHMgKGUuZy4sIGBzZXR4YXR0cmF0YCwgYGdldHhhdHRyYXRgLCBgbGlzdHhhdHRyYXRgLCBgcmVtb3ZleGF0dHJhdGApIHRvIGFsbG93IG9wZXJhdGluZyBvbiBgT19QQVRIYCBmaWxlIGRlc2NyaXB0b3JzIHdoZW4gYEFUX0VNUFRZX1BBVEhgIGlzIHVzZWQuIFRoaXMgaXMgYWNoaWV2ZWQgYnkgaW50cm9kdWNpbmcgYSBuZXcgYGZkX21heWJlX3Jhd2AgY2xhc3MgdGhhdCB1c2VzIGBmZGdldF9yYXdgIGluc3RlYWQgb2YgYGZkZ2V0YCB3aGVuIHRoZSBgcmF3YCBwYXJhbWV0ZXIgaXMgdHJ1ZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWx0ZXJzIHRoZSBiZWhhdmlvciBvZiB0aGVzZSBzeXNjYWxscywgbWFraW5nIHRoZW0gY29uc2lzdGVudCB3aXRoIG90aGVyIGAqYXRgIHN5c2NhbGxzIGxpa2UgYGZjaG93bmF0YCBhbmQgYGZzdGF0YXRgLiBJdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gcmVncmVzc2lvbnMgb3IgdW5leHBlY3RlZCBiZWhhdmlvcnMgd2hlbiB1c2luZyBgT19QQVRIYCBmaWxlIGRlc2NyaXB0b3JzIHdpdGggZXh0ZW5kZWQgYXR0cmlidXRlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUTVBGU19YQVRUUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBhdGhfc2V0eGF0dHJhdFwiLFxuICAgIFwicGF0aF9nZXR4YXR0cmF0XCIsXG4gICAgXCJwYXRoX2xpc3R4YXR0cmF0XCIsXG4gICAgXCJwYXRoX3JlbW92ZXhhdHRyYXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYCp4YXR0cmF0YCBzeXNjYWxscyAoZS5nLiwgYHNldHhhdHRyYXRgLCBgZ2V0eGF0dHJhdGAsIGBsaXN0eGF0dHJhdGAsIGByZW1vdmV4YXR0cmF0YCkgdG8gYWxsb3cgb3BlcmF0aW5nIG9uIGBPX1BBVEhgIGZpbGUgZGVzY3JpcHRvcnMgd2hlbiBgQVRfRU1QVFlfUEFUSGAgaXMgdXNlZC4gVGhpcyBpcyBhY2hpZXZlZCBieSBpbnRyb2R1Y2luZyBhIG5ldyBgZmRfbWF5YmVfcmF3YCBjbGFzcyB0aGF0IHVzZXMgYGZkZ2V0X3Jhd2AgaW5zdGVhZCBvZiBgZmRnZXRgIHdoZW4gdGhlIGByYXdgIHBhcmFtZXRlciBpcyB0cnVlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhbHRlcnMgdGhlIGJlaGF2aW9yIG9mIHRoZXNlIHN5c2NhbGxzLCBtYWtpbmcgdGhlbSBjb25zaXN0ZW50IHdpdGggb3RoZXIgYCphdGAgc3lzY2FsbHMgbGlrZSBgZmNob3duYXRgIGFuZCBgZnN0YXRhdGAuIEl0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyByZWdyZXNzaW9ucyBvciB1bmV4cGVjdGVkIGJlaGF2aW9ycyB3aGVuIHVzaW5nIGBPX1BBVEhgIGZpbGUgZGVzY3JpcHRvcnMgd2l0aCBleHRlbmRlZCBhdHRyaWJ1dGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowzq2xz[1] Phase: Succeeded StartedAt: 2026-07-23 16:52:48 +0000 UTC FinishedAt: 2026-07-23 16:52:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzq2xz[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-23 16:52:48 +0000 UTC FinishedAt: 2026-07-23 16:52:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzq2xz[2] Phase: Succeeded StartedAt: 2026-07-23 16:52:48 +0000 UTC FinishedAt: 2026-07-23 21:16:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzq2xz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["TMPFS_XATTR"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["path_setxattrat","path_getxattrat","path_listxattrat","path_removexattrat"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["TMPFS_XATTR"],"series_id":"d59239c6-2bdd-44cf-ae6c-8e6298839fbf","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-23 16:52:49 +0000 UTC FinishedAt: 2026-07-23 21:16:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["TMPFS_XATTR"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["path_setxattrat","path_getxattrat","path_listxattrat","path_removexattrat"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["TMPFS_XATTR"],"series_id":"d59239c6-2bdd-44cf-ae6c-8e6298839fbf","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-workflowzq2xz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["TMPFS_XATTR"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["path_setxattrat","path_getxattrat","path_listxattrat","path_removexattrat"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["TMPFS_XATTR"],"series_id":"d59239c6-2bdd-44cf-ae6c-8e6298839fbf","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-07-23 16:52:49 +0000 UTC FinishedAt: 2026-07-23 16:53:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzq2xz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["TMPFS_XATTR"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["path_setxattrat","path_getxattrat","path_listxattrat","path_removexattrat"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["TMPFS_XATTR"],"series_id":"d59239c6-2bdd-44cf-ae6c-8e6298839fbf","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-07-23 16:52:49 +0000 UTC FinishedAt: 2026-07-23 16:52:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["TMPFS_XATTR"],"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-workflowzq2xz/series-workflowzq2xz-convert-artifact-95622970/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzq2xz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["TMPFS_XATTR"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["path_setxattrat","path_getxattrat","path_listxattrat","path_removexattrat"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["TMPFS_XATTR"],"series_id":"d59239c6-2bdd-44cf-ae6c-8e6298839fbf","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-07-23 16:53:02 +0000 UTC FinishedAt: 2026-07-23 17:35:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzq2xz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["TMPFS_XATTR"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["path_setxattrat","path_getxattrat","path_listxattrat","path_removexattrat"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["TMPFS_XATTR"],"series_id":"d59239c6-2bdd-44cf-ae6c-8e6298839fbf","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-07-23 16:53:02 +0000 UTC FinishedAt: 2026-07-23 17:35:15 +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:*24294c5b-0289-4cfd-83d6-ae1a042e97a2,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-workflowzq2xz/series-workflowzq2xz-convert-artifact-95622970/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": "770766a4-e157-4c92-8dd1-aca3f0cdfbe5", "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-workflowzq2xz/series-workflowzq2xz-build-action-1072712936/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzq2xz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["TMPFS_XATTR"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["path_setxattrat","path_getxattrat","path_listxattrat","path_removexattrat"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["TMPFS_XATTR"],"series_id":"d59239c6-2bdd-44cf-ae6c-8e6298839fbf","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-07-23 16:53:02 +0000 UTC FinishedAt: 2026-07-23 17:35:05 +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:*24294c5b-0289-4cfd-83d6-ae1a042e97a2,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-workflowzq2xz/series-workflowzq2xz-convert-artifact-95622970/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": "770766a4-e157-4c92-8dd1-aca3f0cdfbe5", "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-workflowzq2xz/series-workflowzq2xz-build-action-1072712936/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzq2xz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["TMPFS_XATTR"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["path_setxattrat","path_getxattrat","path_listxattrat","path_removexattrat"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["TMPFS_XATTR"],"series_id":"d59239c6-2bdd-44cf-ae6c-8e6298839fbf","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-07-23 17:35:15 +0000 UTC FinishedAt: 2026-07-23 17:35:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzq2xz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["TMPFS_XATTR"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["path_setxattrat","path_getxattrat","path_listxattrat","path_removexattrat"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["TMPFS_XATTR"],"series_id":"d59239c6-2bdd-44cf-ae6c-8e6298839fbf","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-07-23 17:35:15 +0000 UTC FinishedAt: 2026-07-23 17:35:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzq2xz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["TMPFS_XATTR"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["path_setxattrat","path_getxattrat","path_listxattrat","path_removexattrat"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["TMPFS_XATTR"],"series_id":"d59239c6-2bdd-44cf-ae6c-8e6298839fbf","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-07-23 17:35:15 +0000 UTC FinishedAt: 2026-07-23 17:35:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzq2xz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["TMPFS_XATTR"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["path_setxattrat","path_getxattrat","path_listxattrat","path_removexattrat"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["TMPFS_XATTR"],"series_id":"d59239c6-2bdd-44cf-ae6c-8e6298839fbf","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-07-23 17:35:15 +0000 UTC FinishedAt: 2026-07-23 17:35:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["TMPFS_XATTR"],"series_id":"d59239c6-2bdd-44cf-ae6c-8e6298839fbf","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-workflowzq2xz/series-workflowzq2xz-convert-artifact-2211868565/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzq2xz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["TMPFS_XATTR"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["path_setxattrat","path_getxattrat","path_listxattrat","path_removexattrat"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["TMPFS_XATTR"],"series_id":"d59239c6-2bdd-44cf-ae6c-8e6298839fbf","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-07-23 17:35:25 +0000 UTC FinishedAt: 2026-07-23 17:37:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzq2xz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["TMPFS_XATTR"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["path_setxattrat","path_getxattrat","path_listxattrat","path_removexattrat"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["TMPFS_XATTR"],"series_id":"d59239c6-2bdd-44cf-ae6c-8e6298839fbf","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-07-23 17:35:25 +0000 UTC FinishedAt: 2026-07-23 17:37:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*770766a4-e157-4c92-8dd1-aca3f0cdfbe5,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-workflowzq2xz/series-workflowzq2xz-build-action-1072712936/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-workflowzq2xz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["TMPFS_XATTR"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["path_setxattrat","path_getxattrat","path_listxattrat","path_removexattrat"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["TMPFS_XATTR"],"series_id":"d59239c6-2bdd-44cf-ae6c-8e6298839fbf","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-07-23 17:37:34 +0000 UTC FinishedAt: 2026-07-23 17:37:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzq2xz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["TMPFS_XATTR"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["path_setxattrat","path_getxattrat","path_listxattrat","path_removexattrat"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["TMPFS_XATTR"],"series_id":"d59239c6-2bdd-44cf-ae6c-8e6298839fbf","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-07-23 17:37:34 +0000 UTC FinishedAt: 2026-07-23 17:37:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzq2xz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["TMPFS_XATTR"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["path_setxattrat","path_getxattrat","path_listxattrat","path_removexattrat"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["TMPFS_XATTR"],"series_id":"d59239c6-2bdd-44cf-ae6c-8e6298839fbf","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-07-23 17:37:34 +0000 UTC FinishedAt: 2026-07-23 18:10:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzq2xz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["TMPFS_XATTR"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["path_setxattrat","path_getxattrat","path_listxattrat","path_removexattrat"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["TMPFS_XATTR"],"series_id":"d59239c6-2bdd-44cf-ae6c-8e6298839fbf","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-07-23 17:37:34 +0000 UTC FinishedAt: 2026-07-23 18:10:20 +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:*24294c5b-0289-4cfd-83d6-ae1a042e97a2,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-workflowzq2xz/series-workflowzq2xz-convert-artifact-2211868565/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": "c75146f4-f771-42d7-b715-fd40f4965772", "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-workflowzq2xz/series-workflowzq2xz-build-action-2326074913/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzq2xz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["TMPFS_XATTR"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["path_setxattrat","path_getxattrat","path_listxattrat","path_removexattrat"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["TMPFS_XATTR"],"series_id":"d59239c6-2bdd-44cf-ae6c-8e6298839fbf","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-07-23 17:37:34 +0000 UTC FinishedAt: 2026-07-23 18:10:10 +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:*24294c5b-0289-4cfd-83d6-ae1a042e97a2,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-workflowzq2xz/series-workflowzq2xz-convert-artifact-2211868565/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": "c75146f4-f771-42d7-b715-fd40f4965772", "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-workflowzq2xz/series-workflowzq2xz-build-action-2326074913/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzq2xz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["TMPFS_XATTR"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["path_setxattrat","path_getxattrat","path_listxattrat","path_removexattrat"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["TMPFS_XATTR"],"series_id":"d59239c6-2bdd-44cf-ae6c-8e6298839fbf","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-07-23 18:10:20 +0000 UTC FinishedAt: 2026-07-23 18:10:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzq2xz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["TMPFS_XATTR"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["path_setxattrat","path_getxattrat","path_listxattrat","path_removexattrat"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["TMPFS_XATTR"],"series_id":"d59239c6-2bdd-44cf-ae6c-8e6298839fbf","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-07-23 18:10:20 +0000 UTC FinishedAt: 2026-07-23 18:10:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzq2xz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["TMPFS_XATTR"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["path_setxattrat","path_getxattrat","path_listxattrat","path_removexattrat"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["TMPFS_XATTR"],"series_id":"d59239c6-2bdd-44cf-ae6c-8e6298839fbf","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-07-23 18:10:20 +0000 UTC FinishedAt: 2026-07-23 18:12:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzq2xz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["TMPFS_XATTR"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["path_setxattrat","path_getxattrat","path_listxattrat","path_removexattrat"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["TMPFS_XATTR"],"series_id":"d59239c6-2bdd-44cf-ae6c-8e6298839fbf","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-07-23 18:10:20 +0000 UTC FinishedAt: 2026-07-23 18:12:03 +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:*c75146f4-f771-42d7-b715-fd40f4965772,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-workflowzq2xz/series-workflowzq2xz-build-action-2326074913/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-workflowzq2xz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["TMPFS_XATTR"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["path_setxattrat","path_getxattrat","path_listxattrat","path_removexattrat"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["TMPFS_XATTR"],"series_id":"d59239c6-2bdd-44cf-ae6c-8e6298839fbf","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-23 18:12:13 +0000 UTC FinishedAt: 2026-07-23 21:16:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzq2xz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["TMPFS_XATTR"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["path_setxattrat","path_getxattrat","path_listxattrat","path_removexattrat"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["TMPFS_XATTR"],"series_id":"d59239c6-2bdd-44cf-ae6c-8e6298839fbf","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-23 18:12:13 +0000 UTC FinishedAt: 2026-07-23 21:16:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["path_setxattrat","path_getxattrat","path_listxattrat","path_removexattrat"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*770766a4-e157-4c92-8dd1-aca3f0cdfbe5,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c75146f4-f771-42d7-b715-fd40f4965772,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzq2xz/series-workflowzq2xz-build-action-1072712936/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzq2xz/series-workflowzq2xz-build-action-2326074913/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowzq2xz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["TMPFS_XATTR"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["path_setxattrat","path_getxattrat","path_listxattrat","path_removexattrat"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["TMPFS_XATTR"],"series_id":"d59239c6-2bdd-44cf-ae6c-8e6298839fbf","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-23 18:12:13 +0000 UTC FinishedAt: 2026-07-23 18:12:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzq2xz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["TMPFS_XATTR"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["path_setxattrat","path_getxattrat","path_listxattrat","path_removexattrat"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["TMPFS_XATTR"],"series_id":"d59239c6-2bdd-44cf-ae6c-8e6298839fbf","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-23 18:12:13 +0000 UTC FinishedAt: 2026-07-23 18:12:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["path_setxattrat","path_getxattrat","path_listxattrat","path_removexattrat"],"skip_cover_check":false},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-workflowzq2xz/series-workflowzq2xz-convert-artifact-1993801850/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzq2xz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["TMPFS_XATTR"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["path_setxattrat","path_getxattrat","path_listxattrat","path_removexattrat"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["TMPFS_XATTR"],"series_id":"d59239c6-2bdd-44cf-ae6c-8e6298839fbf","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-23 18:12:13 +0000 UTC FinishedAt: 2026-07-23 18:12:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzq2xz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["TMPFS_XATTR"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["path_setxattrat","path_getxattrat","path_listxattrat","path_removexattrat"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["TMPFS_XATTR"],"series_id":"d59239c6-2bdd-44cf-ae6c-8e6298839fbf","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-23 18:12:13 +0000 UTC FinishedAt: 2026-07-23 18:12:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzq2xz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["TMPFS_XATTR"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["path_setxattrat","path_getxattrat","path_listxattrat","path_removexattrat"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["TMPFS_XATTR"],"series_id":"d59239c6-2bdd-44cf-ae6c-8e6298839fbf","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: Skipped StartedAt: 2026-07-23 18:12:13 +0000 UTC FinishedAt: 2026-07-23 18:12:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzq2xz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["TMPFS_XATTR"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["path_setxattrat","path_getxattrat","path_listxattrat","path_removexattrat"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["TMPFS_XATTR"],"series_id":"d59239c6-2bdd-44cf-ae6c-8e6298839fbf","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-23 18:12:33 +0000 UTC FinishedAt: 2026-07-23 21:16:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzq2xz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["TMPFS_XATTR"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["path_setxattrat","path_getxattrat","path_listxattrat","path_removexattrat"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["TMPFS_XATTR"],"series_id":"d59239c6-2bdd-44cf-ae6c-8e6298839fbf","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-23 18:12:33 +0000 UTC FinishedAt: 2026-07-23 21:15:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*770766a4-e157-4c92-8dd1-aca3f0cdfbe5,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c75146f4-f771-42d7-b715-fd40f4965772,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzq2xz/series-workflowzq2xz-build-action-1072712936/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzq2xz/series-workflowzq2xz-build-action-2326074913/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzq2xz/series-workflowzq2xz-convert-artifact-1993801850/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}