Name: series-workflow8tmz5 Phase: Succeeded StartedAt: 2026-08-10 19:36:25 +0000 UTC FinishedAt: 2026-08-10 23:32:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8tmz5[0] Phase: Succeeded StartedAt: 2026-08-10 19:36:25 +0000 UTC FinishedAt: 2026-08-10 19:42:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8tmz5[0].run-triage Phase: Succeeded StartedAt: 2026-08-10 19:36:25 +0000 UTC FinishedAt: 2026-08-10 19:42:18 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "a23b36233d4103def55dc8cf65698106d0bd1e62", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETCONSOLE", "NETCONSOLE_DYNAMIC", "CONFIGFS_FS", "IPV6" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "a23b36233d4103def55dc8cf65698106d0bd1e62", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETCONSOLE", "NETCONSOLE_DYNAMIC", "CONFIGFS_FS", "IPV6" ], "series_id": "2de36840-9b24-4e38-82af-be68dea8ef6c" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "local_ip_store", "remote_ip_store", "enabled_store", "netcons_netpoll_setup", "netconsole_parser_cmdline", "netpoll_send_udp", "netpoll_parse_ip_addr" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjM4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVENPTlNPTEUmIzM0OywKICAgICYjMzQ7TkVUQ09OU09MRV9EWU5BTUlDJiMzNDssCiAgICAmIzM0O0NPTkZJR0ZTX0ZTJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtsb2NhbF9pcF9zdG9yZSYjMzQ7LAogICAgJiMzNDtyZW1vdGVfaXBfc3RvcmUmIzM0OywKICAgICYjMzQ7ZW5hYmxlZF9zdG9yZSYjMzQ7LAogICAgJiMzNDtuZXRjb25zX25ldHBvbGxfc2V0dXAmIzM0OywKICAgICYjMzQ7bmV0Y29uc29sZV9wYXJzZXJfY21kbGluZSYjMzQ7LAogICAgJiMzNDtuZXRwb2xsX3NlbmRfdWRwJiMzNDssCiAgICAmIzM0O25ldHBvbGxfcGFyc2VfaXBfYWRkciYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBob3cgSVAgYWRkcmVzc2VzIGFyZSBzdG9yZWQgYW5kIHBhcnNlZCBpbiB0aGUgbmV0Y29uc29sZSBkcml2ZXIgYnkgcmVwbGFjaW5nIGEgYHVuaW9uIGluZXRfYWRkcmAgYW5kIGEgYm9vbGVhbiBgaXB2NmAgZmxhZyB3aXRoIGEgbmV3IGBzdHJ1Y3QgaW5ldF9hZGRyYCB0aGF0IGV4cGxpY2l0bHkgdHJhY2tzIHRoZSBhZGRyZXNzIGZhbWlseSAoYEFGX1VOU1BFQ2AsIGBBRl9JTkVUYCwgb3IgYEFGX0lORVQ2YCkuIFRoZSBgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0YCBjb250YWluaW5nIHRoZXNlIGFkZHJlc3NlcyBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqYCAod2hpY2ggemVyby1pbml0aWFsaXplcyB0aGUgbWVtb3J5KSwgZW5zdXJpbmcgdGhhdCB0aGUgbmV3IGBmYW1pbHlgIGZpZWxkIGRlZmF1bHRzIHRvIGBBRl9VTlNQRUNgIGFuZCB0aGUgSVAgYWRkcmVzc2VzIGFyZSB6ZXJvZWQuIFRoZSBJUCBhZGRyZXNzZXMgYXJlIG9ubHkgZXhwb3NlZCB0byB1c2Vyc3BhY2UgdmlhIGNvbmZpZ2ZzIGBzaG93YCBmdW5jdGlvbnMsIHdoaWNoIGZvcm1hdCB0aGVtIGFzIHN0cmluZ3MgdXNpbmcgYHN5c2ZzX2VtaXRgLCBwcmV2ZW50aW5nIGFueSBwb3RlbnRpYWwgbGVha2FnZSBvZiBwYWRkaW5nIGJ5dGVzLiBXaGVuIGNvbnN0cnVjdGluZyBuZXR3b3JrIHBhY2tldHMsIG9ubHkgdGhlIGV4YWN0IElQdjQgKDQgYnl0ZXMpIG9yIElQdjYgKDE2IGJ5dGVzKSBhZGRyZXNzIGZpZWxkcyBhcmUgY29waWVkIGludG8gdGhlIElQIGhlYWRlcnMsIGFnYWluIGF2b2lkaW5nIGFueSBwYWRkaW5nIGxlYWtzLiBUaGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBubyBzdHJ1Y3R1cmVzIGNvcGllZCBkaXJlY3RseSB0byB1c2Vyc3BhY2UsIGFuZCBubyBjb250cm9sIGZsb3cgY2hhbmdlcyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGJ1Z3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG5ldGNvbnNvbGUgZHJpdmVyIHRvIHRyYWNrIHRoZSBJUCBhZGRyZXNzIGZhbWlseSAoQUZfSU5FVCwgQUZfSU5FVDYsIEFGX1VOU1BFQykgaW5kZXBlbmRlbnRseSBmb3IgbG9jYWwgYW5kIHJlbW90ZSBJUCBhZGRyZXNzZXMsIHJlcGxhY2luZyBhIHNpbmdsZSBgaXB2NmAgYm9vbGVhbiBmbGFnLiBUaGlzIGNoYW5nZXMgaG93IElQIGFkZHJlc3NlcyBhcmUgcGFyc2VkLCB2YWxpZGF0ZWQsIGFuZCB1c2VkIGR1cmluZyBuZXRjb25zb2xlIHNldHVwIGFuZCBtZXNzYWdlIHRyYW5zbWlzc2lvbi4gVGhlIG1vZGlmaWVkIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSB0aGUgbmV0Y29uc29sZSBjb25maWdmcyBpbnRlcmZhY2UgKHdoaWNoIGFsbG93cyBkeW5hbWljIHJlY29uZmlndXJhdGlvbiBvZiB0YXJnZXRzKSBhbmQgZHVyaW5nIG1vZHVsZSBpbml0aWFsaXphdGlvbiB2aWEga2VybmVsIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXJzLiBTaW5jZSB0aGlzIGFmZmVjdHMgY29yZSBrZXJuZWwgbG9nZ2luZyBmdW5jdGlvbmFsaXR5IGFuZCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGNvbmZpZ2ZzLCBpdCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjM4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMGY2MTMwNWUxNmUyZmFkNGJmYWUxNWMwNmI1MDJjMmMyMDA2ZTlmOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDEwIDE5OjM4OjIxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyBiL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1xuaW5kZXggMDM5MTMzMDIzMjhjYy4uODEwZGVkNmU0OGYzMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXG5AQCAtMTUxLDYgJiM0MzsxNTEsMTUgQEAgZW51bSB0YXJnZXRfc3RhdGUge1xuIFx0U1RBVEVfREVBQ1RJVkFURUQsXG4gfTtcbiBcbiYjNDM7c3RydWN0IGluZXRfYWRkciB7XG4mIzQzO1x0LyogQWRkcmVzcyBmYW1pbHk6IEFGX1VOU1BFQyB3aGVuIHVuc2V0LCBlbHNlIEFGX0lORVQgb3IgQUZfSU5FVDYgKi9cbiYjNDM7XHR1OFx0XHRcdGZhbWlseTtcbiYjNDM7XHR1bmlvbiB7XG4mIzQzO1x0XHRfX2JlMzJcdFx0aXA7XG4mIzQzO1x0XHRzdHJ1Y3QgaW42X2FkZHJcdGluNjtcbiYjNDM7XHR9O1xuJiM0Mzt9O1xuJiM0MztcbiAvKipcbiAgKiBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgLSBSZXByZXNlbnRzIGEgY29uZmlndXJlZCBuZXRjb25zb2xlIHRhcmdldC5cbiAgKiBAbGlzdDpcdExpbmtzIHRoaXMgdGFyZ2V0IGludG8gdGhlIHRhcmdldF9saXN0LlxuQEAgLTE4MSw3ICYjNDM7MTkwLDYgQEAgZW51bSB0YXJnZXRfc3RhdGUge1xuICAqXHRcdGxvY2FsX21hY1x0KHJlYWQtb25seSlcbiAgKiBAbG9jYWxfaXA6XHRTb3VyY2UgSVAgYWRkcmVzcyBvZiB0aGUgdGFyZ2V0IChyZWFkLXdyaXRlKS5cbiAgKiBAcmVtb3RlX2lwOlx0RGVzdGluYXRpb24gSVAgYWRkcmVzcyBvZiB0aGUgdGFyZ2V0IChyZWFkLXdyaXRlKS5cbi0gKiBAaXB2NjpcdFdoZXRoZXIgdGhlIHRhcmdldCBhZGRyZXNzZXMgYXJlIElQdjYgKHJlYWQtd3JpdGUpLlxuICAqIEBsb2NhbF9wb3J0Olx0U291cmNlIFVEUCBwb3J0IG9mIHRoZSB0YXJnZXQgKHJlYWQtd3JpdGUpLlxuICAqIEByZW1vdGVfcG9ydDogRGVzdGluYXRpb24gVURQIHBvcnQgb2YgdGhlIHRhcmdldCAocmVhZC13cml0ZSkuXG4gICogQHJlbW90ZV9tYWM6XHREZXN0aW5hdGlvbiBldGhlcm5ldCBhZGRyZXNzIG9mIHRoZSB0YXJnZXQgKHJlYWQtd3JpdGUpLlxuQEAgLTIxMiw4ICYjNDM7MjIwLDcgQEAgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0IHtcbiBcdGJvb2xcdFx0XHRleHRlbmRlZDtcbiBcdGJvb2xcdFx0XHRyZWxlYXNlO1xuIFx0c3RydWN0IG5ldHBvbGxcdFx0bnA7XG4tXHR1bmlvbiBpbmV0X2FkZHJcdFx0bG9jYWxfaXAsIHJlbW90ZV9pcDtcbi1cdGJvb2xcdFx0XHRpcHY2O1xuJiM0MztcdHN0cnVjdCBpbmV0X2FkZHJcdGxvY2FsX2lwLCByZW1vdGVfaXA7XG4gXHR1MTZcdFx0XHRsb2NhbF9wb3J0LCByZW1vdGVfcG9ydDtcbiBcdHU4XHRcdFx0cmVtb3RlX21hY1tFVEhfQUxFTl07XG4gXHQvKiBwcm90ZWN0ZWQgYnkgdGFyZ2V0X2xpc3RfbG9jazsgJiM0MzsxIGdpdmVzIHNjbnByaW50ZigpIHJvb20gZm9yIGl0c1xuQEAgLTQxNSw2ICYjNDM7NDIyLDcgQEAgc3RhdGljIGludCBuZXRjb25zX3Rha2VfaXB2NihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuIFx0XHRcdFx0Y29udGludWU7XG4gXHRcdFx0LyogR290IHRoZSBJUCwgbGV0JiMzOTtzIHJldHVybiAqL1xuIFx0XHRcdG50LVx1MDAzZWxvY2FsX2lwLmluNiA9IGlmcC1cdTAwM2VhZGRyO1xuJiM0MztcdFx0XHRudC1cdTAwM2Vsb2NhbF9pcC5mYW1pbHkgPSBBRl9JTkVUNjtcbiBcdFx0XHRlcnIgPSAwO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG5AQCAtNDU2LDI4ICYjNDM7NDY0LDEyIEBAIHN0YXRpYyBpbnQgbmV0Y29uc190YWtlX2lwdjQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcbiBcdH1cbiBcbiBcdG50LVx1MDAzZWxvY2FsX2lwLmlwID0gaWZhLVx1MDAzZWlmYV9sb2NhbDtcbiYjNDM7XHRudC1cdTAwM2Vsb2NhbF9pcC5mYW1pbHkgPSBBRl9JTkVUO1xuIFx0bnBfaW5mbyhucCwgXCYjMzQ7bG9jYWwgSVAgJXBJNFxcblwmIzM0OywgXHUwMDI2bnQtXHUwMDNlbG9jYWxfaXAuaXApO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLS8qXG4tICogVGVzdCB3aGV0aGVyIHRoZSBjYWxsZXIgbGVmdCBudC1cdTAwM2Vsb2NhbF9pcCB1bnNldCwgc28gdGhhdFxuLSAqIG5ldGNvbnNfbmV0cG9sbF9zZXR1cCgpIHNob3VsZCBhdXRvLXBvcHVsYXRlIGl0IGZyb20gdGhlIGVncmVzcyBkZXZpY2UuXG4tICpcbi0gKiBudC1cdTAwM2Vsb2NhbF9pcCBpcyBhIHVuaW9uIG9mIF9fYmUzMiAoSVB2NCkgYW5kIHN0cnVjdCBpbjZfYWRkciAoSVB2NiksXG4tICogc28gYW4gSVB2NiBhZGRyZXNzIHdob3NlIGZpcnN0IDQgYnl0ZXMgYXJlIHplcm8gKGUuZy4gOjoxLCA6OjIsXG4tICogSVB2NC1tYXBwZWQgOjpmZmZmOmEuYi5jLmQpIG11c3Qgbm90IGJlIHRlc3RlZCB2aWEgdGhlIElQdjQgYXJtIOKAlFxuLSAqIGRvaW5nIHNvIHdvdWxkIG1pc2NsYXNzaWZ5IGEgY2FsbGVyLXN1cHBsaWVkIGFkZHJlc3MgYXMgdW5zZXQgYW5kXG4tICogc2lsZW50bHkgb3ZlcndyaXRlIGl0IHdpdGggd2hhdGV2ZXIgYWRkcmVzcyB0aGUgZGV2aWNlIGV4cG9zZXMuXG4tICovXG4tc3RhdGljIGJvb2wgbmV0Y29uc19sb2NhbF9pcF91bnNldChjb25zdCBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuLXtcbi1cdGlmIChudC1cdTAwM2VpcHY2KVxuLVx0XHRyZXR1cm4gaXB2Nl9hZGRyX2FueShcdTAwMjZudC1cdTAwM2Vsb2NhbF9pcC5pbjYpO1xuLVx0cmV0dXJuICFudC1cdTAwM2Vsb2NhbF9pcC5pcDtcbi19XG4tXG4gc3RhdGljIGludCBuZXRjb25zX25ldHBvbGxfc2V0dXAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbiB7XG4gXHRzdHJ1Y3QgbmV0ICpuZXQgPSBjdXJyZW50LVx1MDAzZW5zcHJveHktXHUwMDNlbmV0X25zO1xuQEAgLTQ4Nyw2ICYjNDM7NDc5LDE3IEBAIHN0YXRpYyBpbnQgbmV0Y29uc19uZXRwb2xsX3NldHVwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG4gXHRib29sIGlwX292ZXJ3cml0dGVuID0gZmFsc2U7XG4gXHRpbnQgZXJyO1xuIFxuJiM0MztcdGlmIChudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX1VOU1BFQykge1xuJiM0MztcdFx0bnBfZXJyKG5wLCBcJiMzNDtyZW1vdGUgSVAgYWRkcmVzcyBub3QgY29uZmlndXJlZCwgYWJvcnRpbmdcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FREVTVEFERFJSRVE7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAobnQtXHUwMDNlbG9jYWxfaXAuZmFtaWx5ICE9IEFGX1VOU1BFQyBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgbnQtXHUwMDNlbG9jYWxfaXAuZmFtaWx5ICE9IG50LVx1MDAzZXJlbW90ZV9pcC5mYW1pbHkpIHtcbiYjNDM7XHRcdG5wX2VycihucCwgXCYjMzQ7bG9jYWwgYW5kIHJlbW90ZSBJUCBhZGRyZXNzIGZhbWlsaWVzIGRpZmZlciwgYWJvcnRpbmdcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiBcdHJ0bmxfbG9jaygpO1xuIFx0aWYgKG5wLVx1MDAzZWRldl9uYW1lWzBdKVxuIFx0XHRuZGV2ID0gX19kZXZfZ2V0X2J5X25hbWUobmV0LCBucC1cdTAwM2VkZXZfbmFtZSk7XG5AQCAtNTIzLDE2ICYjNDM7NTI2LDEzIEBAIHN0YXRpYyBpbnQgbmV0Y29uc19uZXRwb2xsX3NldHVwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG4gXHRcdHJ0bmxfbG9jaygpO1xuIFx0fVxuIFxuLVx0aWYgKG5ldGNvbnNfbG9jYWxfaXBfdW5zZXQobnQpKSB7XG4tXHRcdGlmICghbnQtXHUwMDNlaXB2Nikge1xuLVx0XHRcdGVyciA9IG5ldGNvbnNfdGFrZV9pcHY0KG50LCBuZGV2KTtcbi1cdFx0XHRpZiAoZXJyKVxuLVx0XHRcdFx0Z290byBwdXQ7XG4tXHRcdH0gZWxzZSB7XG4mIzQzO1x0aWYgKG50LVx1MDAzZWxvY2FsX2lwLmZhbWlseSA9PSBBRl9VTlNQRUMpIHtcbiYjNDM7XHRcdGlmIChudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxuIFx0XHRcdGVyciA9IG5ldGNvbnNfdGFrZV9pcHY2KG50LCBuZGV2KTtcbi1cdFx0XHRpZiAoZXJyKVxuLVx0XHRcdFx0Z290byBwdXQ7XG4tXHRcdH1cbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0ZXJyID0gbmV0Y29uc190YWtlX2lwdjQobnQsIG5kZXYpO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0Z290byBwdXQ7XG4gXHRcdGlwX292ZXJ3cml0dGVuID0gdHJ1ZTtcbiBcdH1cbiBcbkBAIC03MTQsMjQgJiM0Mzs3MTQsMjggQEAgc3RhdGljIHZvaWQgbmV0Y29uc29sZV9wcmludF9iYW5uZXIoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbiBcdHN0cnVjdCBuZXRwb2xsICpucCA9IFx1MDAyNm50LVx1MDAzZW5wO1xuIFxuIFx0bnBfaW5mbyhucCwgXCYjMzQ7bG9jYWwgcG9ydCAlZFxcblwmIzM0OywgbnQtXHUwMDNlbG9jYWxfcG9ydCk7XG4tXHRpZiAobnQtXHUwMDNlaXB2NilcbiYjNDM7XHRpZiAobnQtXHUwMDNlbG9jYWxfaXAuZmFtaWx5ID09IEFGX1VOU1BFQylcbiYjNDM7XHRcdG5wX2luZm8obnAsIFwmIzM0O2xvY2FsIElQIHVuc2V0XFxuXCYjMzQ7KTtcbiYjNDM7XHRlbHNlIGlmIChudC1cdTAwM2Vsb2NhbF9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXG4gXHRcdG5wX2luZm8obnAsIFwmIzM0O2xvY2FsIElQdjYgYWRkcmVzcyAlcEk2Y1xcblwmIzM0OywgXHUwMDI2bnQtXHUwMDNlbG9jYWxfaXAuaW42KTtcbiBcdGVsc2VcbiBcdFx0bnBfaW5mbyhucCwgXCYjMzQ7bG9jYWwgSVB2NCBhZGRyZXNzICVwSTRcXG5cJiMzNDssIFx1MDAyNm50LVx1MDAzZWxvY2FsX2lwLmlwKTtcbiBcdG5wX2luZm8obnAsIFwmIzM0O2ludGVyZmFjZSBuYW1lICYjMzk7JXMmIzM5O1xcblwmIzM0OywgbnAtXHUwMDNlZGV2X25hbWUpO1xuIFx0bnBfaW5mbyhucCwgXCYjMzQ7bG9jYWwgZXRoZXJuZXQgYWRkcmVzcyAmIzM5OyVwTSYjMzk7XFxuXCYjMzQ7LCBucC1cdTAwM2VkZXZfbWFjKTtcbiBcdG5wX2luZm8obnAsIFwmIzM0O3JlbW90ZSBwb3J0ICVkXFxuXCYjMzQ7LCBudC1cdTAwM2VyZW1vdGVfcG9ydCk7XG4tXHRpZiAobnQtXHUwMDNlaXB2NilcbiYjNDM7XHRpZiAobnQtXHUwMDNlcmVtb3RlX2lwLmZhbWlseSA9PSBBRl9VTlNQRUMpXG4mIzQzO1x0XHRucF9pbmZvKG5wLCBcJiMzNDtyZW1vdGUgSVAgdW5zZXRcXG5cJiMzNDspO1xuJiM0MztcdGVsc2UgaWYgKG50LVx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXG4gXHRcdG5wX2luZm8obnAsIFwmIzM0O3JlbW90ZSBJUHY2IGFkZHJlc3MgJXBJNmNcXG5cJiMzNDssIFx1MDAyNm50LVx1MDAzZXJlbW90ZV9pcC5pbjYpO1xuIFx0ZWxzZVxuIFx0XHRucF9pbmZvKG5wLCBcJiMzNDtyZW1vdGUgSVB2NCBhZGRyZXNzICVwSTRcXG5cJiMzNDssIFx1MDAyNm50LVx1MDAzZXJlbW90ZV9pcC5pcCk7XG4gXHRucF9pbmZvKG5wLCBcJiMzNDtyZW1vdGUgZXRoZXJuZXQgYWRkcmVzcyAlcE1cXG5cJiMzNDssIG50LVx1MDAzZXJlbW90ZV9tYWMpO1xuIH1cbiBcbi0vKiBQYXJzZSB0aGUgc3RyaW5nIGFuZCBwb3B1bGF0ZSB0aGUgYGluZXRfYWRkcmAgdW5pb24uIFJldHVybiAwIGlmIElQdjQgaXNcbi0gKiBwb3B1bGF0ZWQsIDEgaWYgSVB2NiBpcyBwb3B1bGF0ZWQsIGFuZCAtMSB1cG9uIGZhaWx1cmUuXG4mIzQzOy8qIFBhcnNlIHRoZSBzdHJpbmcgYW5kIHBvcHVsYXRlIHRoZSBgaW5ldF9hZGRyYCBzdHJ1Y3QuIFJldHVybiAwIG9uIHN1Y2Nlc3NcbiYjNDM7ICogYW5kIC0xIHVwb24gZmFpbHVyZS5cbiAgKi9cbi1zdGF0aWMgaW50IG5ldHBvbGxfcGFyc2VfaXBfYWRkcihjb25zdCBjaGFyICpzdHIsIHVuaW9uIGluZXRfYWRkciAqYWRkcilcbiYjNDM7c3RhdGljIGludCBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY29uc3QgY2hhciAqc3RyLCBzdHJ1Y3QgaW5ldF9hZGRyICphZGRyKVxuIHtcbiBcdGNvbnN0IGNoYXIgKmVuZCA9IE5VTEw7XG4gXHRpbnQgbGVuO1xuQEAgLTc0MywxNCAmIzQzOzc0NywxOCBAQCBzdGF0aWMgaW50IG5ldHBvbGxfcGFyc2VfaXBfYWRkcihjb25zdCBjaGFyICpzdHIsIHVuaW9uIGluZXRfYWRkciAqYWRkcilcbiBcdGlmIChzdHJbbGVuIC0gMV0gPT0gJiMzOTtcXG4mIzM5OylcbiBcdFx0bGVuIC09IDE7XG4gXG4tXHRpZiAoaW40X3B0b24oc3RyLCBsZW4sICh2b2lkICopYWRkciwgLTEsIFx1MDAyNmVuZCkgXHUwMDNlIDAgXHUwMDI2XHUwMDI2XG4tXHQgICAgKCFlbmQgfHwgKmVuZCA9PSAwIHx8ICplbmQgPT0gJiMzOTtcXG4mIzM5OykpXG4mIzQzO1x0aWYgKGluNF9wdG9uKHN0ciwgbGVuLCAodm9pZCAqKVx1MDAyNmFkZHItXHUwMDNlaXAsIC0xLCBcdTAwMjZlbmQpIFx1MDAzZSAwIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAoIWVuZCB8fCAqZW5kID09IDAgfHwgKmVuZCA9PSAmIzM5O1xcbiYjMzk7KSkge1xuJiM0MztcdFx0YWRkci1cdTAwM2VmYW1pbHkgPSBBRl9JTkVUO1xuIFx0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4gXG4gXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfSVBWNikgXHUwMDI2XHUwMDI2XG4tXHQgICAgaW42X3B0b24oc3RyLCBsZW4sICh2b2lkICopYWRkciwgLTEsIFx1MDAyNmVuZCkgXHUwMDNlIDAgXHUwMDI2XHUwMDI2XG4tXHQgICAgKCFlbmQgfHwgKmVuZCA9PSAwIHx8ICplbmQgPT0gJiMzOTtcXG4mIzM5OykpXG4tXHRcdHJldHVybiAxO1xuJiM0MztcdCAgICBpbjZfcHRvbihzdHIsIGxlbiwgKHZvaWQgKilcdTAwMjZhZGRyLVx1MDAzZWluNiwgLTEsIFx1MDAyNmVuZCkgXHUwMDNlIDAgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICghZW5kIHx8ICplbmQgPT0gMCB8fCAqZW5kID09ICYjMzk7XFxuJiMzOTspKSB7XG4mIzQzO1x0XHRhZGRyLVx1MDAzZWZhbWlseSA9IEFGX0lORVQ2O1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuIFxuIFx0cmV0dXJuIC0xO1xuIH1cbkBAIC04NTUsMjAgJiM0Mzs4NjMsMjQgQEAgc3RhdGljIHNzaXplX3QgbG9jYWxfaXBfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcbiB7XG4gXHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0pO1xuIFxuLVx0aWYgKG50LVx1MDAzZWlwdjYpXG4mIzQzO1x0aWYgKG50LVx1MDAzZWxvY2FsX2lwLmZhbWlseSA9PSBBRl9VTlNQRUMpXG4mIzQzO1x0XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwmIzM0O1xcblwmIzM0Oyk7XG4mIzQzO1x0aWYgKG50LVx1MDAzZWxvY2FsX2lwLmZhbWlseSA9PSBBRl9JTkVUNilcbiBcdFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDslcEk2Y1xcblwmIzM0OywgXHUwMDI2bnQtXHUwMDNlbG9jYWxfaXAuaW42KTtcbiBcdGVsc2Vcbi1cdFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDslcEk0XFxuXCYjMzQ7LCBcdTAwMjZudC1cdTAwM2Vsb2NhbF9pcCk7XG4mIzQzO1x0XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwmIzM0OyVwSTRcXG5cJiMzNDssIFx1MDAyNm50LVx1MDAzZWxvY2FsX2lwLmlwKTtcbiB9XG4gXG4gc3RhdGljIHNzaXplX3QgcmVtb3RlX2lwX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXG4ge1xuIFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcbiBcbi1cdGlmIChudC1cdTAwM2VpcHY2KVxuJiM0MztcdGlmIChudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX1VOU1BFQylcbiYjNDM7XHRcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7XFxuXCYjMzQ7KTtcbiYjNDM7XHRpZiAobnQtXHUwMDNlcmVtb3RlX2lwLmZhbWlseSA9PSBBRl9JTkVUNilcbiBcdFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDslcEk2Y1xcblwmIzM0OywgXHUwMDI2bnQtXHUwMDNlcmVtb3RlX2lwLmluNik7XG4gXHRlbHNlXG4tXHRcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7JXBJNFxcblwmIzM0OywgXHUwMDI2bnQtXHUwMDNlcmVtb3RlX2lwKTtcbiYjNDM7XHRcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7JXBJNFxcblwmIzM0OywgXHUwMDI2bnQtXHUwMDNlcmVtb3RlX2lwLmlwKTtcbiB9XG4gXG4gc3RhdGljIHNzaXplX3QgbG9jYWxfbWFjX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXG5AQCAtMTIxMyw3ICYjNDM7MTIyNSw2IEBAIHN0YXRpYyBzc2l6ZV90IGxvY2FsX2lwX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxuIHtcbiBcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7XG4gXHRzc2l6ZV90IHJldCA9IC1FSU5WQUw7XG4tXHRpbnQgaXB2NjtcbiBcbiBcdGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF9sb2NrKCk7XG4gXHRpZiAobnQtXHUwMDNlc3RhdGUgPT0gU1RBVEVfRU5BQkxFRCkge1xuQEAgLTEyMjIsMTAgJiM0MzsxMjMzLDggQEAgc3RhdGljIHNzaXplX3QgbG9jYWxfaXBfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdH1cbiBcbi1cdGlwdjYgPSBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoYnVmLCBcdTAwMjZudC1cdTAwM2Vsb2NhbF9pcCk7XG4tXHRpZiAoaXB2NiA9PSAtMSlcbiYjNDM7XHRpZiAobmV0cG9sbF9wYXJzZV9pcF9hZGRyKGJ1ZiwgXHUwMDI2bnQtXHUwMDNlbG9jYWxfaXApIFx1MDAzYyAwKVxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4tXHRudC1cdTAwM2VpcHY2ID0gISFpcHY2O1xuIFxuIFx0cmV0ID0gY291bnQ7XG4gb3V0X3VubG9jazpcbkBAIC0xMjM4LDcgJiM0MzsxMjQ3LDYgQEAgc3RhdGljIHNzaXplX3QgcmVtb3RlX2lwX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxuIHtcbiBcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7XG4gXHRzc2l6ZV90IHJldCA9IC1FSU5WQUw7XG4tXHRpbnQgaXB2NjtcbiBcbiBcdGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF9sb2NrKCk7XG4gXHRpZiAobnQtXHUwMDNlc3RhdGUgPT0gU1RBVEVfRU5BQkxFRCkge1xuQEAgLTEyNDcsMTAgJiM0MzsxMjU1LDggQEAgc3RhdGljIHNzaXplX3QgcmVtb3RlX2lwX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG4gXG4tXHRpcHY2ID0gbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGJ1ZiwgXHUwMDI2bnQtXHUwMDNlcmVtb3RlX2lwKTtcbi1cdGlmIChpcHY2ID09IC0xKVxuJiM0MztcdGlmIChuZXRwb2xsX3BhcnNlX2lwX2FkZHIoYnVmLCBcdTAwMjZudC1cdTAwM2VyZW1vdGVfaXApIFx1MDAzYyAwKVxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4tXHRudC1cdTAwM2VpcHY2ID0gISFpcHY2O1xuIFxuIFx0cmV0ID0gY291bnQ7XG4gb3V0X3VubG9jazpcbkBAIC0yMDYxLDcgJiM0MzsyMDY3LDcgQEAgc3RhdGljIHZvaWQgbmV0cG9sbF91ZHBfY2hlY2tzdW0oc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcbiBcbiBcdC8qIGNoZWNrIG5lZWRzIHRvIGJlIHNldCwgc2luY2UgaXQgd2lsbCBiZSBjb25zdW1lZCBpbiBjc3VtX3BhcnRpYWwgKi9cbiBcdHVkcGgtXHUwMDNlY2hlY2sgPSAwO1xuLVx0aWYgKG50LVx1MDAzZWlwdjYpXG4mIzQzO1x0aWYgKG50LVx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXG4gXHRcdHVkcGgtXHUwMDNlY2hlY2sgPSBjc3VtX2lwdjZfbWFnaWMoXHUwMDI2bnQtXHUwMDNlbG9jYWxfaXAuaW42LFxuIFx0XHRcdFx0XHQgICAgICBcdTAwMjZudC1cdTAwM2VyZW1vdGVfaXAuaW42LFxuIFx0XHRcdFx0XHQgICAgICB1ZHBfbGVuLCBJUFBST1RPX1VEUCxcbkBAIC0yMTAyLDcgJiM0MzsyMTA4LDcgQEAgc3RhdGljIHZvaWQgcHVzaF9ldGgoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7XG4gXHRldGhlcl9hZGRyX2NvcHkoZXRoLVx1MDAzZWhfc291cmNlLCBucC1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIpO1xuIFx0ZXRoZXJfYWRkcl9jb3B5KGV0aC1cdTAwM2VoX2Rlc3QsIG50LVx1MDAzZXJlbW90ZV9tYWMpO1xuLVx0aWYgKG50LVx1MDAzZWlwdjYpXG4mIzQzO1x0aWYgKG50LVx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXG4gXHRcdGV0aC1cdTAwM2VoX3Byb3RvID0gaHRvbnMoRVRIX1BfSVBWNik7XG4gXHRlbHNlXG4gXHRcdGV0aC1cdTAwM2VoX3Byb3RvID0gaHRvbnMoRVRIX1BfSVApO1xuQEAgLTIxNzEsNyAmIzQzOzIxNzcsNyBAQCBzdGF0aWMgaW50IG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLFxuIFx0XHRXQVJOX09OX09OQ0UoIWlycXNfZGlzYWJsZWQoKSk7XG4gXG4gXHR1ZHBfbGVuID0gbGVuICYjNDM7IHNpemVvZihzdHJ1Y3QgdWRwaGRyKTtcbi1cdGlmIChudC1cdTAwM2VpcHY2KVxuJiM0MztcdGlmIChudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxuIFx0XHRpcF9sZW4gPSB1ZHBfbGVuICYjNDM7IHNpemVvZihzdHJ1Y3QgaXB2Nmhkcik7XG4gXHRlbHNlXG4gXHRcdGlwX2xlbiA9IHVkcF9sZW4gJiM0Mzsgc2l6ZW9mKHN0cnVjdCBpcGhkcik7XG5AQCAtMjE4Nyw3ICYjNDM7MjE5Myw3IEBAIHN0YXRpYyBpbnQgbmV0cG9sbF9zZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csXG4gXHRza2JfcHV0KHNrYiwgbGVuKTtcbiBcbiBcdHB1c2hfdWRwKG50LCBza2IsIGxlbik7XG4tXHRpZiAobnQtXHUwMDNlaXB2NilcbiYjNDM7XHRpZiAobnQtXHUwMDNlcmVtb3RlX2lwLmZhbWlseSA9PSBBRl9JTkVUNilcbiBcdFx0cHVzaF9pcHY2KG50LCBza2IsIGxlbik7XG4gXHRlbHNlXG4gXHRcdHB1c2hfaXB2NChudCwgc2tiLCBsZW4pO1xuQEAgLTI1MDcsMTAgJiM0MzsyNTEzLDggQEAgX19yZWxlYXNlcyhcdTAwMjZ0YXJnZXRfbGlzdF9sb2NrKVxuIHN0YXRpYyBpbnQgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjaGFyICpvcHQpXG4ge1xuIFx0c3RydWN0IG5ldHBvbGwgKm5wID0gXHUwMDI2bnQtXHUwMDNlbnA7XG4tXHRib29sIGlwdmVyc2lvbl9zZXQgPSBmYWxzZTtcbiBcdGNoYXIgKmN1ciA9IG9wdDtcbiBcdGNoYXIgKmRlbGltO1xuLVx0aW50IGlwdjY7XG4gXG4gXHRpZiAoKmN1ciAhPSAmIzM5O0AmIzM5Oykge1xuIFx0XHRkZWxpbSA9IHN0cmNocihjdXIsICYjMzk7QCYjMzk7KTtcbkBAIC0yNTI0LDE2ICYjNDM7MjUyOCwxMiBAQCBzdGF0aWMgaW50IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY2hhciAqb3B0KVxuIFx0Y3VyJiM0MzsmIzQzOztcbiBcbiBcdGlmICgqY3VyICE9ICYjMzk7LyYjMzk7KSB7XG4tXHRcdGlwdmVyc2lvbl9zZXQgPSB0cnVlO1xuIFx0XHRkZWxpbSA9IHN0cmNocihjdXIsICYjMzk7LyYjMzk7KTtcbiBcdFx0aWYgKCFkZWxpbSlcbiBcdFx0XHRnb3RvIHBhcnNlX2ZhaWxlZDtcbiBcdFx0KmRlbGltID0gMDtcbi1cdFx0aXB2NiA9IG5ldHBvbGxfcGFyc2VfaXBfYWRkcihjdXIsIFx1MDAyNm50LVx1MDAzZWxvY2FsX2lwKTtcbi1cdFx0aWYgKGlwdjYgXHUwMDNjIDApXG4mIzQzO1x0XHRpZiAobmV0cG9sbF9wYXJzZV9pcF9hZGRyKGN1ciwgXHUwMDI2bnQtXHUwMDNlbG9jYWxfaXApIFx1MDAzYyAwKVxuIFx0XHRcdGdvdG8gcGFyc2VfZmFpbGVkO1xuLVx0XHRlbHNlXG4tXHRcdFx0bnQtXHUwMDNlaXB2NiA9IChib29sKWlwdjY7XG4gXHRcdGN1ciA9IGRlbGltO1xuIFx0fVxuIFx0Y3VyJiM0MzsmIzQzOztcbkBAIC0yNTc1LDEzICYjNDM7MjU3NSwxMSBAQCBzdGF0aWMgaW50IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY2hhciAqb3B0KVxuIFx0aWYgKCFkZWxpbSlcbiBcdFx0Z290byBwYXJzZV9mYWlsZWQ7XG4gXHQqZGVsaW0gPSAwO1xuLVx0aXB2NiA9IG5ldHBvbGxfcGFyc2VfaXBfYWRkcihjdXIsIFx1MDAyNm50LVx1MDAzZXJlbW90ZV9pcCk7XG4tXHRpZiAoaXB2NiBcdTAwM2MgMClcbiYjNDM7XHRpZiAobmV0cG9sbF9wYXJzZV9pcF9hZGRyKGN1ciwgXHUwMDI2bnQtXHUwMDNlcmVtb3RlX2lwKSBcdTAwM2MgMClcbiBcdFx0Z290byBwYXJzZV9mYWlsZWQ7XG4tXHRlbHNlIGlmIChpcHZlcnNpb25fc2V0IFx1MDAyNlx1MDAyNiBudC1cdTAwM2VpcHY2ICE9IChib29sKWlwdjYpXG4mIzQzO1x0aWYgKG50LVx1MDAzZWxvY2FsX2lwLmZhbWlseSAhPSBBRl9VTlNQRUMgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIG50LVx1MDAzZWxvY2FsX2lwLmZhbWlseSAhPSBudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5KVxuIFx0XHRnb3RvIHBhcnNlX2ZhaWxlZDtcbi1cdGVsc2Vcbi1cdFx0bnQtXHUwMDNlaXB2NiA9IChib29sKWlwdjY7XG4gXHRjdXIgPSBkZWxpbSAmIzQzOyAxO1xuIFxuIFx0aWYgKCpjdXIgIT0gMCkge1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0cG9sbC5oIGIvaW5jbHVkZS9saW51eC9uZXRwb2xsLmhcbmluZGV4IDFjNmIxZWVjNWVmZDYuLmVjMDgyMWE1YjAyZGIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9uZXRwb2xsLmhcbkBAIC0xNiwxMSAmIzQzOzE2LDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdWRwLmhcdTAwM2VcbiBcbi11bmlvbiBpbmV0X2FkZHIge1xuLVx0X19iZTMyXHRcdGlwO1xuLVx0c3RydWN0IGluNl9hZGRyXHRpbjY7XG4tfTtcbi1cbiBzdHJ1Y3QgbmV0cG9sbCB7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xuIFx0bmV0ZGV2aWNlX3RyYWNrZXIgZGV2X3RyYWNrZXI7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6Mzg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVENPTlNPTEUmIzM0OywKICAgICYjMzQ7TkVUQ09OU09MRV9EWU5BTUlDJiMzNDssCiAgICAmIzM0O0NPTkZJR0ZTX0ZTJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtsb2NhbF9pcF9zdG9yZSYjMzQ7LAogICAgJiMzNDtyZW1vdGVfaXBfc3RvcmUmIzM0OywKICAgICYjMzQ7ZW5hYmxlZF9zdG9yZSYjMzQ7LAogICAgJiMzNDtuZXRjb25zX25ldHBvbGxfc2V0dXAmIzM0OywKICAgICYjMzQ7bmV0Y29uc29sZV9wYXJzZXJfY21kbGluZSYjMzQ7LAogICAgJiMzNDtuZXRwb2xsX3NlbmRfdWRwJiMzNDssCiAgICAmIzM0O25ldHBvbGxfcGFyc2VfaXBfYWRkciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbmV0Y29uc29sZSBkcml2ZXIgdG8gdHJhY2sgdGhlIElQIGFkZHJlc3MgZmFtaWx5IChBRl9JTkVULCBBRl9JTkVUNiwgQUZfVU5TUEVDKSBpbmRlcGVuZGVudGx5IGZvciBsb2NhbCBhbmQgcmVtb3RlIElQIGFkZHJlc3NlcywgcmVwbGFjaW5nIGEgc2luZ2xlIGBpcHY2YCBib29sZWFuIGZsYWcuIFRoaXMgY2hhbmdlcyBob3cgSVAgYWRkcmVzc2VzIGFyZSBwYXJzZWQsIHZhbGlkYXRlZCwgYW5kIHVzZWQgZHVyaW5nIG5ldGNvbnNvbGUgc2V0dXAgYW5kIG1lc3NhZ2UgdHJhbnNtaXNzaW9uLiBUaGUgbW9kaWZpZWQgY29kZSBpcyByZWFjaGFibGUgdmlhIHRoZSBuZXRjb25zb2xlIGNvbmZpZ2ZzIGludGVyZmFjZSAod2hpY2ggYWxsb3dzIGR5bmFtaWMgcmVjb25maWd1cmF0aW9uIG9mIHRhcmdldHMpIGFuZCBkdXJpbmcgbW9kdWxlIGluaXRpYWxpemF0aW9uIHZpYSBrZXJuZWwgY29tbWFuZCBsaW5lIHBhcmFtZXRlcnMuIFNpbmNlIHRoaXMgYWZmZWN0cyBjb3JlIGtlcm5lbCBsb2dnaW5nIGZ1bmN0aW9uYWxpdHkgYW5kIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgY29uZmlnZnMsIGl0IGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwZjYxMzA1ZTE2ZTJmYWQ0YmZhZTE1YzA2YjUwMmMyYzIwMDZlOWY5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMTAgMTk6Mzg6MjEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMgYi9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMKaW5kZXggMDM5MTMzMDIzMjhjYy4uODEwZGVkNmU0OGYzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYwpAQCAtMTUxLDYgJiM0MzsxNTEsMTUgQEAgZW51bSB0YXJnZXRfc3RhdGUgewogCVNUQVRFX0RFQUNUSVZBVEVELAogfTsKIAomIzQzO3N0cnVjdCBpbmV0X2FkZHIgewomIzQzOwkvKiBBZGRyZXNzIGZhbWlseTogQUZfVU5TUEVDIHdoZW4gdW5zZXQsIGVsc2UgQUZfSU5FVCBvciBBRl9JTkVUNiAqLwomIzQzOwl1OAkJCWZhbWlseTsKJiM0MzsJdW5pb24gewomIzQzOwkJX19iZTMyCQlpcDsKJiM0MzsJCXN0cnVjdCBpbjZfYWRkcglpbjY7CiYjNDM7CX07CiYjNDM7fTsKJiM0MzsKIC8qKgogICogc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0IC0gUmVwcmVzZW50cyBhIGNvbmZpZ3VyZWQgbmV0Y29uc29sZSB0YXJnZXQuCiAgKiBAbGlzdDoJTGlua3MgdGhpcyB0YXJnZXQgaW50byB0aGUgdGFyZ2V0X2xpc3QuCkBAIC0xODEsNyAmIzQzOzE5MCw2IEBAIGVudW0gdGFyZ2V0X3N0YXRlIHsKICAqCQlsb2NhbF9tYWMJKHJlYWQtb25seSkKICAqIEBsb2NhbF9pcDoJU291cmNlIElQIGFkZHJlc3Mgb2YgdGhlIHRhcmdldCAocmVhZC13cml0ZSkuCiAgKiBAcmVtb3RlX2lwOglEZXN0aW5hdGlvbiBJUCBhZGRyZXNzIG9mIHRoZSB0YXJnZXQgKHJlYWQtd3JpdGUpLgotICogQGlwdjY6CVdoZXRoZXIgdGhlIHRhcmdldCBhZGRyZXNzZXMgYXJlIElQdjYgKHJlYWQtd3JpdGUpLgogICogQGxvY2FsX3BvcnQ6CVNvdXJjZSBVRFAgcG9ydCBvZiB0aGUgdGFyZ2V0IChyZWFkLXdyaXRlKS4KICAqIEByZW1vdGVfcG9ydDogRGVzdGluYXRpb24gVURQIHBvcnQgb2YgdGhlIHRhcmdldCAocmVhZC13cml0ZSkuCiAgKiBAcmVtb3RlX21hYzoJRGVzdGluYXRpb24gZXRoZXJuZXQgYWRkcmVzcyBvZiB0aGUgdGFyZ2V0IChyZWFkLXdyaXRlKS4KQEAgLTIxMiw4ICYjNDM7MjIwLDcgQEAgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0IHsKIAlib29sCQkJZXh0ZW5kZWQ7CiAJYm9vbAkJCXJlbGVhc2U7CiAJc3RydWN0IG5ldHBvbGwJCW5wOwotCXVuaW9uIGluZXRfYWRkcgkJbG9jYWxfaXAsIHJlbW90ZV9pcDsKLQlib29sCQkJaXB2NjsKJiM0MzsJc3RydWN0IGluZXRfYWRkcglsb2NhbF9pcCwgcmVtb3RlX2lwOwogCXUxNgkJCWxvY2FsX3BvcnQsIHJlbW90ZV9wb3J0OwogCXU4CQkJcmVtb3RlX21hY1tFVEhfQUxFTl07CiAJLyogcHJvdGVjdGVkIGJ5IHRhcmdldF9saXN0X2xvY2s7ICYjNDM7MSBnaXZlcyBzY25wcmludGYoKSByb29tIGZvciBpdHMKQEAgLTQxNSw2ICYjNDM7NDIyLDcgQEAgc3RhdGljIGludCBuZXRjb25zX3Rha2VfaXB2NihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LAogCQkJCWNvbnRpbnVlOwogCQkJLyogR290IHRoZSBJUCwgbGV0JiMzOTtzIHJldHVybiAqLwogCQkJbnQtJmd0O2xvY2FsX2lwLmluNiA9IGlmcC0mZ3Q7YWRkcjsKJiM0MzsJCQludC0mZ3Q7bG9jYWxfaXAuZmFtaWx5ID0gQUZfSU5FVDY7CiAJCQllcnIgPSAwOwogCQkJYnJlYWs7CiAJCX0KQEAgLTQ1NiwyOCAmIzQzOzQ2NCwxMiBAQCBzdGF0aWMgaW50IG5ldGNvbnNfdGFrZV9pcHY0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsCiAJfQogCiAJbnQtJmd0O2xvY2FsX2lwLmlwID0gaWZhLSZndDtpZmFfbG9jYWw7CiYjNDM7CW50LSZndDtsb2NhbF9pcC5mYW1pbHkgPSBBRl9JTkVUOwogCW5wX2luZm8obnAsICYjMzQ7bG9jYWwgSVAgJXBJNFxuJiMzNDssICZhbXA7bnQtJmd0O2xvY2FsX2lwLmlwKTsKIAogCXJldHVybiAwOwogfQogCi0vKgotICogVGVzdCB3aGV0aGVyIHRoZSBjYWxsZXIgbGVmdCBudC0mZ3Q7bG9jYWxfaXAgdW5zZXQsIHNvIHRoYXQKLSAqIG5ldGNvbnNfbmV0cG9sbF9zZXR1cCgpIHNob3VsZCBhdXRvLXBvcHVsYXRlIGl0IGZyb20gdGhlIGVncmVzcyBkZXZpY2UuCi0gKgotICogbnQtJmd0O2xvY2FsX2lwIGlzIGEgdW5pb24gb2YgX19iZTMyIChJUHY0KSBhbmQgc3RydWN0IGluNl9hZGRyIChJUHY2KSwKLSAqIHNvIGFuIElQdjYgYWRkcmVzcyB3aG9zZSBmaXJzdCA0IGJ5dGVzIGFyZSB6ZXJvIChlLmcuIDo6MSwgOjoyLAotICogSVB2NC1tYXBwZWQgOjpmZmZmOmEuYi5jLmQpIG11c3Qgbm90IGJlIHRlc3RlZCB2aWEgdGhlIElQdjQgYXJtIOKAlAotICogZG9pbmcgc28gd291bGQgbWlzY2xhc3NpZnkgYSBjYWxsZXItc3VwcGxpZWQgYWRkcmVzcyBhcyB1bnNldCBhbmQKLSAqIHNpbGVudGx5IG92ZXJ3cml0ZSBpdCB3aXRoIHdoYXRldmVyIGFkZHJlc3MgdGhlIGRldmljZSBleHBvc2VzLgotICovCi1zdGF0aWMgYm9vbCBuZXRjb25zX2xvY2FsX2lwX3Vuc2V0KGNvbnN0IHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpCi17Ci0JaWYgKG50LSZndDtpcHY2KQotCQlyZXR1cm4gaXB2Nl9hZGRyX2FueSgmYW1wO250LSZndDtsb2NhbF9pcC5pbjYpOwotCXJldHVybiAhbnQtJmd0O2xvY2FsX2lwLmlwOwotfQotCiBzdGF0aWMgaW50IG5ldGNvbnNfbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KQogewogCXN0cnVjdCBuZXQgKm5ldCA9IGN1cnJlbnQtJmd0O25zcHJveHktJmd0O25ldF9uczsKQEAgLTQ4Nyw2ICYjNDM7NDc5LDE3IEBAIHN0YXRpYyBpbnQgbmV0Y29uc19uZXRwb2xsX3NldHVwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpCiAJYm9vbCBpcF9vdmVyd3JpdHRlbiA9IGZhbHNlOwogCWludCBlcnI7CiAKJiM0MzsJaWYgKG50LSZndDtyZW1vdGVfaXAuZmFtaWx5ID09IEFGX1VOU1BFQykgewomIzQzOwkJbnBfZXJyKG5wLCAmIzM0O3JlbW90ZSBJUCBhZGRyZXNzIG5vdCBjb25maWd1cmVkLCBhYm9ydGluZ1xuJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FREVTVEFERFJSRVE7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKG50LSZndDtsb2NhbF9pcC5mYW1pbHkgIT0gQUZfVU5TUEVDICZhbXA7JmFtcDsKJiM0MzsJICAgIG50LSZndDtsb2NhbF9pcC5mYW1pbHkgIT0gbnQtJmd0O3JlbW90ZV9pcC5mYW1pbHkpIHsKJiM0MzsJCW5wX2VycihucCwgJiMzNDtsb2NhbCBhbmQgcmVtb3RlIElQIGFkZHJlc3MgZmFtaWxpZXMgZGlmZmVyLCBhYm9ydGluZ1xuJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKIAlydG5sX2xvY2soKTsKIAlpZiAobnAtJmd0O2Rldl9uYW1lWzBdKQogCQluZGV2ID0gX19kZXZfZ2V0X2J5X25hbWUobmV0LCBucC0mZ3Q7ZGV2X25hbWUpOwpAQCAtNTIzLDE2ICYjNDM7NTI2LDEzIEBAIHN0YXRpYyBpbnQgbmV0Y29uc19uZXRwb2xsX3NldHVwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpCiAJCXJ0bmxfbG9jaygpOwogCX0KIAotCWlmIChuZXRjb25zX2xvY2FsX2lwX3Vuc2V0KG50KSkgewotCQlpZiAoIW50LSZndDtpcHY2KSB7Ci0JCQllcnIgPSBuZXRjb25zX3Rha2VfaXB2NChudCwgbmRldik7Ci0JCQlpZiAoZXJyKQotCQkJCWdvdG8gcHV0OwotCQl9IGVsc2UgewomIzQzOwlpZiAobnQtJmd0O2xvY2FsX2lwLmZhbWlseSA9PSBBRl9VTlNQRUMpIHsKJiM0MzsJCWlmIChudC0mZ3Q7cmVtb3RlX2lwLmZhbWlseSA9PSBBRl9JTkVUNikKIAkJCWVyciA9IG5ldGNvbnNfdGFrZV9pcHY2KG50LCBuZGV2KTsKLQkJCWlmIChlcnIpCi0JCQkJZ290byBwdXQ7Ci0JCX0KJiM0MzsJCWVsc2UKJiM0MzsJCQllcnIgPSBuZXRjb25zX3Rha2VfaXB2NChudCwgbmRldik7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCWdvdG8gcHV0OwogCQlpcF9vdmVyd3JpdHRlbiA9IHRydWU7CiAJfQogCkBAIC03MTQsMjQgJiM0Mzs3MTQsMjggQEAgc3RhdGljIHZvaWQgbmV0Y29uc29sZV9wcmludF9iYW5uZXIoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCkKIAlzdHJ1Y3QgbmV0cG9sbCAqbnAgPSAmYW1wO250LSZndDtucDsKIAogCW5wX2luZm8obnAsICYjMzQ7bG9jYWwgcG9ydCAlZFxuJiMzNDssIG50LSZndDtsb2NhbF9wb3J0KTsKLQlpZiAobnQtJmd0O2lwdjYpCiYjNDM7CWlmIChudC0mZ3Q7bG9jYWxfaXAuZmFtaWx5ID09IEFGX1VOU1BFQykKJiM0MzsJCW5wX2luZm8obnAsICYjMzQ7bG9jYWwgSVAgdW5zZXRcbiYjMzQ7KTsKJiM0MzsJZWxzZSBpZiAobnQtJmd0O2xvY2FsX2lwLmZhbWlseSA9PSBBRl9JTkVUNikKIAkJbnBfaW5mbyhucCwgJiMzNDtsb2NhbCBJUHY2IGFkZHJlc3MgJXBJNmNcbiYjMzQ7LCAmYW1wO250LSZndDtsb2NhbF9pcC5pbjYpOwogCWVsc2UKIAkJbnBfaW5mbyhucCwgJiMzNDtsb2NhbCBJUHY0IGFkZHJlc3MgJXBJNFxuJiMzNDssICZhbXA7bnQtJmd0O2xvY2FsX2lwLmlwKTsKIAlucF9pbmZvKG5wLCAmIzM0O2ludGVyZmFjZSBuYW1lICYjMzk7JXMmIzM5O1xuJiMzNDssIG5wLSZndDtkZXZfbmFtZSk7CiAJbnBfaW5mbyhucCwgJiMzNDtsb2NhbCBldGhlcm5ldCBhZGRyZXNzICYjMzk7JXBNJiMzOTtcbiYjMzQ7LCBucC0mZ3Q7ZGV2X21hYyk7CiAJbnBfaW5mbyhucCwgJiMzNDtyZW1vdGUgcG9ydCAlZFxuJiMzNDssIG50LSZndDtyZW1vdGVfcG9ydCk7Ci0JaWYgKG50LSZndDtpcHY2KQomIzQzOwlpZiAobnQtJmd0O3JlbW90ZV9pcC5mYW1pbHkgPT0gQUZfVU5TUEVDKQomIzQzOwkJbnBfaW5mbyhucCwgJiMzNDtyZW1vdGUgSVAgdW5zZXRcbiYjMzQ7KTsKJiM0MzsJZWxzZSBpZiAobnQtJmd0O3JlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpCiAJCW5wX2luZm8obnAsICYjMzQ7cmVtb3RlIElQdjYgYWRkcmVzcyAlcEk2Y1xuJiMzNDssICZhbXA7bnQtJmd0O3JlbW90ZV9pcC5pbjYpOwogCWVsc2UKIAkJbnBfaW5mbyhucCwgJiMzNDtyZW1vdGUgSVB2NCBhZGRyZXNzICVwSTRcbiYjMzQ7LCAmYW1wO250LSZndDtyZW1vdGVfaXAuaXApOwogCW5wX2luZm8obnAsICYjMzQ7cmVtb3RlIGV0aGVybmV0IGFkZHJlc3MgJXBNXG4mIzM0OywgbnQtJmd0O3JlbW90ZV9tYWMpOwogfQogCi0vKiBQYXJzZSB0aGUgc3RyaW5nIGFuZCBwb3B1bGF0ZSB0aGUgYGluZXRfYWRkcmAgdW5pb24uIFJldHVybiAwIGlmIElQdjQgaXMKLSAqIHBvcHVsYXRlZCwgMSBpZiBJUHY2IGlzIHBvcHVsYXRlZCwgYW5kIC0xIHVwb24gZmFpbHVyZS4KJiM0MzsvKiBQYXJzZSB0aGUgc3RyaW5nIGFuZCBwb3B1bGF0ZSB0aGUgYGluZXRfYWRkcmAgc3RydWN0LiBSZXR1cm4gMCBvbiBzdWNjZXNzCiYjNDM7ICogYW5kIC0xIHVwb24gZmFpbHVyZS4KICAqLwotc3RhdGljIGludCBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY29uc3QgY2hhciAqc3RyLCB1bmlvbiBpbmV0X2FkZHIgKmFkZHIpCiYjNDM7c3RhdGljIGludCBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY29uc3QgY2hhciAqc3RyLCBzdHJ1Y3QgaW5ldF9hZGRyICphZGRyKQogewogCWNvbnN0IGNoYXIgKmVuZCA9IE5VTEw7CiAJaW50IGxlbjsKQEAgLTc0MywxNCAmIzQzOzc0NywxOCBAQCBzdGF0aWMgaW50IG5ldHBvbGxfcGFyc2VfaXBfYWRkcihjb25zdCBjaGFyICpzdHIsIHVuaW9uIGluZXRfYWRkciAqYWRkcikKIAlpZiAoc3RyW2xlbiAtIDFdID09ICYjMzk7XG4mIzM5OykKIAkJbGVuIC09IDE7CiAKLQlpZiAoaW40X3B0b24oc3RyLCBsZW4sICh2b2lkICopYWRkciwgLTEsICZhbXA7ZW5kKSAmZ3Q7IDAgJmFtcDsmYW1wOwotCSAgICAoIWVuZCB8fCAqZW5kID09IDAgfHwgKmVuZCA9PSAmIzM5O1xuJiMzOTspKQomIzQzOwlpZiAoaW40X3B0b24oc3RyLCBsZW4sICh2b2lkICopJmFtcDthZGRyLSZndDtpcCwgLTEsICZhbXA7ZW5kKSAmZ3Q7IDAgJmFtcDsmYW1wOwomIzQzOwkgICAgKCFlbmQgfHwgKmVuZCA9PSAwIHx8ICplbmQgPT0gJiMzOTtcbiYjMzk7KSkgewomIzQzOwkJYWRkci0mZ3Q7ZmFtaWx5ID0gQUZfSU5FVDsKIAkJcmV0dXJuIDA7CiYjNDM7CX0KIAogCWlmIChJU19FTkFCTEVEKENPTkZJR19JUFY2KSAmYW1wOyZhbXA7Ci0JICAgIGluNl9wdG9uKHN0ciwgbGVuLCAodm9pZCAqKWFkZHIsIC0xLCAmYW1wO2VuZCkgJmd0OyAwICZhbXA7JmFtcDsKLQkgICAgKCFlbmQgfHwgKmVuZCA9PSAwIHx8ICplbmQgPT0gJiMzOTtcbiYjMzk7KSkKLQkJcmV0dXJuIDE7CiYjNDM7CSAgICBpbjZfcHRvbihzdHIsIGxlbiwgKHZvaWQgKikmYW1wO2FkZHItJmd0O2luNiwgLTEsICZhbXA7ZW5kKSAmZ3Q7IDAgJmFtcDsmYW1wOwomIzQzOwkgICAgKCFlbmQgfHwgKmVuZCA9PSAwIHx8ICplbmQgPT0gJiMzOTtcbiYjMzk7KSkgewomIzQzOwkJYWRkci0mZ3Q7ZmFtaWx5ID0gQUZfSU5FVDY7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQogCiAJcmV0dXJuIC0xOwogfQpAQCAtODU1LDIwICYjNDM7ODYzLDI0IEBAIHN0YXRpYyBzc2l6ZV90IGxvY2FsX2lwX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTsKIAotCWlmIChudC0mZ3Q7aXB2NikKJiM0MzsJaWYgKG50LSZndDtsb2NhbF9pcC5mYW1pbHkgPT0gQUZfVU5TUEVDKQomIzQzOwkJcmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCAmIzM0O1xuJiMzNDspOwomIzQzOwlpZiAobnQtJmd0O2xvY2FsX2lwLmZhbWlseSA9PSBBRl9JTkVUNikKIAkJcmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCAmIzM0OyVwSTZjXG4mIzM0OywgJmFtcDtudC0mZ3Q7bG9jYWxfaXAuaW42KTsKIAllbHNlCi0JCXJldHVybiBzeXNmc19lbWl0KGJ1ZiwgJiMzNDslcEk0XG4mIzM0OywgJmFtcDtudC0mZ3Q7bG9jYWxfaXApOwomIzQzOwkJcmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCAmIzM0OyVwSTRcbiYjMzQ7LCAmYW1wO250LSZndDtsb2NhbF9pcC5pcCk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IHJlbW90ZV9pcF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKQogewogCXN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7CiAKLQlpZiAobnQtJmd0O2lwdjYpCiYjNDM7CWlmIChudC0mZ3Q7cmVtb3RlX2lwLmZhbWlseSA9PSBBRl9VTlNQRUMpCiYjNDM7CQlyZXR1cm4gc3lzZnNfZW1pdChidWYsICYjMzQ7XG4mIzM0Oyk7CiYjNDM7CWlmIChudC0mZ3Q7cmVtb3RlX2lwLmZhbWlseSA9PSBBRl9JTkVUNikKIAkJcmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCAmIzM0OyVwSTZjXG4mIzM0OywgJmFtcDtudC0mZ3Q7cmVtb3RlX2lwLmluNik7CiAJZWxzZQotCQlyZXR1cm4gc3lzZnNfZW1pdChidWYsICYjMzQ7JXBJNFxuJiMzNDssICZhbXA7bnQtJmd0O3JlbW90ZV9pcCk7CiYjNDM7CQlyZXR1cm4gc3lzZnNfZW1pdChidWYsICYjMzQ7JXBJNFxuJiMzNDssICZhbXA7bnQtJmd0O3JlbW90ZV9pcC5pcCk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IGxvY2FsX21hY19zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKQpAQCAtMTIxMyw3ICYjNDM7MTIyNSw2IEBAIHN0YXRpYyBzc2l6ZV90IGxvY2FsX2lwX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLAogewogCXN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7CiAJc3NpemVfdCByZXQgPSAtRUlOVkFMOwotCWludCBpcHY2OwogCiAJZHluYW1pY19uZXRjb25zb2xlX211dGV4X2xvY2soKTsKIAlpZiAobnQtJmd0O3N0YXRlID09IFNUQVRFX0VOQUJMRUQpIHsKQEAgLTEyMjIsMTAgJiM0MzsxMjMzLDggQEAgc3RhdGljIHNzaXplX3QgbG9jYWxfaXBfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsCiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKLQlpcHY2ID0gbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGJ1ZiwgJmFtcDtudC0mZ3Q7bG9jYWxfaXApOwotCWlmIChpcHY2ID09IC0xKQomIzQzOwlpZiAobmV0cG9sbF9wYXJzZV9pcF9hZGRyKGJ1ZiwgJmFtcDtudC0mZ3Q7bG9jYWxfaXApICZsdDsgMCkKIAkJZ290byBvdXRfdW5sb2NrOwotCW50LSZndDtpcHY2ID0gISFpcHY2OwogCiAJcmV0ID0gY291bnQ7CiBvdXRfdW5sb2NrOgpAQCAtMTIzOCw3ICYjNDM7MTI0Nyw2IEBAIHN0YXRpYyBzc2l6ZV90IHJlbW90ZV9pcF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZiwKIHsKIAlzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0pOwogCXNzaXplX3QgcmV0ID0gLUVJTlZBTDsKLQlpbnQgaXB2NjsKIAogCWR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF9sb2NrKCk7CiAJaWYgKG50LSZndDtzdGF0ZSA9PSBTVEFURV9FTkFCTEVEKSB7CkBAIC0xMjQ3LDEwICYjNDM7MTI1NSw4IEBAIHN0YXRpYyBzc2l6ZV90IHJlbW90ZV9pcF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZiwKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KIAotCWlwdjYgPSBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoYnVmLCAmYW1wO250LSZndDtyZW1vdGVfaXApOwotCWlmIChpcHY2ID09IC0xKQomIzQzOwlpZiAobmV0cG9sbF9wYXJzZV9pcF9hZGRyKGJ1ZiwgJmFtcDtudC0mZ3Q7cmVtb3RlX2lwKSAmbHQ7IDApCiAJCWdvdG8gb3V0X3VubG9jazsKLQludC0mZ3Q7aXB2NiA9ICEhaXB2NjsKIAogCXJldCA9IGNvdW50Owogb3V0X3VubG9jazoKQEAgLTIwNjEsNyAmIzQzOzIwNjcsNyBAQCBzdGF0aWMgdm9pZCBuZXRwb2xsX3VkcF9jaGVja3N1bShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LAogCiAJLyogY2hlY2sgbmVlZHMgdG8gYmUgc2V0LCBzaW5jZSBpdCB3aWxsIGJlIGNvbnN1bWVkIGluIGNzdW1fcGFydGlhbCAqLwogCXVkcGgtJmd0O2NoZWNrID0gMDsKLQlpZiAobnQtJmd0O2lwdjYpCiYjNDM7CWlmIChudC0mZ3Q7cmVtb3RlX2lwLmZhbWlseSA9PSBBRl9JTkVUNikKIAkJdWRwaC0mZ3Q7Y2hlY2sgPSBjc3VtX2lwdjZfbWFnaWMoJmFtcDtudC0mZ3Q7bG9jYWxfaXAuaW42LAogCQkJCQkgICAgICAmYW1wO250LSZndDtyZW1vdGVfaXAuaW42LAogCQkJCQkgICAgICB1ZHBfbGVuLCBJUFBST1RPX1VEUCwKQEAgLTIxMDIsNyAmIzQzOzIxMDgsNyBAQCBzdGF0aWMgdm9pZCBwdXNoX2V0aChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7CiAJZXRoZXJfYWRkcl9jb3B5KGV0aC0mZ3Q7aF9zb3VyY2UsIG5wLSZndDtkZXYtJmd0O2Rldl9hZGRyKTsKIAlldGhlcl9hZGRyX2NvcHkoZXRoLSZndDtoX2Rlc3QsIG50LSZndDtyZW1vdGVfbWFjKTsKLQlpZiAobnQtJmd0O2lwdjYpCiYjNDM7CWlmIChudC0mZ3Q7cmVtb3RlX2lwLmZhbWlseSA9PSBBRl9JTkVUNikKIAkJZXRoLSZndDtoX3Byb3RvID0gaHRvbnMoRVRIX1BfSVBWNik7CiAJZWxzZQogCQlldGgtJmd0O2hfcHJvdG8gPSBodG9ucyhFVEhfUF9JUCk7CkBAIC0yMTcxLDcgJiM0MzsyMTc3LDcgQEAgc3RhdGljIGludCBuZXRwb2xsX3NlbmRfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNvbnN0IGNoYXIgKm1zZywKIAkJV0FSTl9PTl9PTkNFKCFpcnFzX2Rpc2FibGVkKCkpOwogCiAJdWRwX2xlbiA9IGxlbiAmIzQzOyBzaXplb2Yoc3RydWN0IHVkcGhkcik7Ci0JaWYgKG50LSZndDtpcHY2KQomIzQzOwlpZiAobnQtJmd0O3JlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpCiAJCWlwX2xlbiA9IHVkcF9sZW4gJiM0Mzsgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKTsKIAllbHNlCiAJCWlwX2xlbiA9IHVkcF9sZW4gJiM0Mzsgc2l6ZW9mKHN0cnVjdCBpcGhkcik7CkBAIC0yMTg3LDcgJiM0MzsyMTkzLDcgQEAgc3RhdGljIGludCBuZXRwb2xsX3NlbmRfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNvbnN0IGNoYXIgKm1zZywKIAlza2JfcHV0KHNrYiwgbGVuKTsKIAogCXB1c2hfdWRwKG50LCBza2IsIGxlbik7Ci0JaWYgKG50LSZndDtpcHY2KQomIzQzOwlpZiAobnQtJmd0O3JlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpCiAJCXB1c2hfaXB2NihudCwgc2tiLCBsZW4pOwogCWVsc2UKIAkJcHVzaF9pcHY0KG50LCBza2IsIGxlbik7CkBAIC0yNTA3LDEwICYjNDM7MjUxMyw4IEBAIF9fcmVsZWFzZXMoJmFtcDt0YXJnZXRfbGlzdF9sb2NrKQogc3RhdGljIGludCBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNoYXIgKm9wdCkKIHsKIAlzdHJ1Y3QgbmV0cG9sbCAqbnAgPSAmYW1wO250LSZndDtucDsKLQlib29sIGlwdmVyc2lvbl9zZXQgPSBmYWxzZTsKIAljaGFyICpjdXIgPSBvcHQ7CiAJY2hhciAqZGVsaW07Ci0JaW50IGlwdjY7CiAKIAlpZiAoKmN1ciAhPSAmIzM5O0AmIzM5OykgewogCQlkZWxpbSA9IHN0cmNocihjdXIsICYjMzk7QCYjMzk7KTsKQEAgLTI1MjQsMTYgJiM0MzsyNTI4LDEyIEBAIHN0YXRpYyBpbnQgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjaGFyICpvcHQpCiAJY3VyJiM0MzsmIzQzOzsKIAogCWlmICgqY3VyICE9ICYjMzk7LyYjMzk7KSB7Ci0JCWlwdmVyc2lvbl9zZXQgPSB0cnVlOwogCQlkZWxpbSA9IHN0cmNocihjdXIsICYjMzk7LyYjMzk7KTsKIAkJaWYgKCFkZWxpbSkKIAkJCWdvdG8gcGFyc2VfZmFpbGVkOwogCQkqZGVsaW0gPSAwOwotCQlpcHY2ID0gbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGN1ciwgJmFtcDtudC0mZ3Q7bG9jYWxfaXApOwotCQlpZiAoaXB2NiAmbHQ7IDApCiYjNDM7CQlpZiAobmV0cG9sbF9wYXJzZV9pcF9hZGRyKGN1ciwgJmFtcDtudC0mZ3Q7bG9jYWxfaXApICZsdDsgMCkKIAkJCWdvdG8gcGFyc2VfZmFpbGVkOwotCQllbHNlCi0JCQludC0mZ3Q7aXB2NiA9IChib29sKWlwdjY7CiAJCWN1ciA9IGRlbGltOwogCX0KIAljdXImIzQzOyYjNDM7OwpAQCAtMjU3NSwxMyAmIzQzOzI1NzUsMTEgQEAgc3RhdGljIGludCBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNoYXIgKm9wdCkKIAlpZiAoIWRlbGltKQogCQlnb3RvIHBhcnNlX2ZhaWxlZDsKIAkqZGVsaW0gPSAwOwotCWlwdjYgPSBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY3VyLCAmYW1wO250LSZndDtyZW1vdGVfaXApOwotCWlmIChpcHY2ICZsdDsgMCkKJiM0MzsJaWYgKG5ldHBvbGxfcGFyc2VfaXBfYWRkcihjdXIsICZhbXA7bnQtJmd0O3JlbW90ZV9pcCkgJmx0OyAwKQogCQlnb3RvIHBhcnNlX2ZhaWxlZDsKLQllbHNlIGlmIChpcHZlcnNpb25fc2V0ICZhbXA7JmFtcDsgbnQtJmd0O2lwdjYgIT0gKGJvb2wpaXB2NikKJiM0MzsJaWYgKG50LSZndDtsb2NhbF9pcC5mYW1pbHkgIT0gQUZfVU5TUEVDICZhbXA7JmFtcDsKJiM0MzsJICAgIG50LSZndDtsb2NhbF9pcC5mYW1pbHkgIT0gbnQtJmd0O3JlbW90ZV9pcC5mYW1pbHkpCiAJCWdvdG8gcGFyc2VfZmFpbGVkOwotCWVsc2UKLQkJbnQtJmd0O2lwdjYgPSAoYm9vbClpcHY2OwogCWN1ciA9IGRlbGltICYjNDM7IDE7CiAKIAlpZiAoKmN1ciAhPSAwKSB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaCBiL2luY2x1ZGUvbGludXgvbmV0cG9sbC5oCmluZGV4IDFjNmIxZWVjNWVmZDYuLmVjMDgyMWE1YjAyZGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0cG9sbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbmV0cG9sbC5oCkBAIC0xNiwxMSAmIzQzOzE2LDYgQEAKICNpbmNsdWRlICZsdDtsaW51eC9pcC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3VkcC5oJmd0OwogCi11bmlvbiBpbmV0X2FkZHIgewotCV9fYmUzMgkJaXA7Ci0Jc3RydWN0IGluNl9hZGRyCWluNjsKLX07Ci0KIHN0cnVjdCBuZXRwb2xsIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCW5ldGRldmljZV90cmFja2VyIGRldl90cmFja2VyOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDI5CgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogMzM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV0Y29uc29sZSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBgbmV0Y29uc29sZS5jYCBhbmQgYG5ldHBvbGwuaGAuIFRoZSBnaXN0IG9mIGl0IGlzIGEgcmVmYWN0b3Igb2YgaG93IElQIGFkZHJlc3NlcyBhbmQgdGhlaXIgZmFtaWxpZXMgYXJlIGhhbmRsZWQgd2l0aGluIG5ldGNvbnNvbGUuIFRoZXkmIzM5O3ZlIHlhbmtlZCB0aGUgYHVuaW9uIGluZXRfYWRkcmAgZnJvbSBgbmV0cG9sbC5oYCBhbmQgaW50cm9kdWNlZCBhIGBzdHJ1Y3QgaW5ldF9hZGRyYCBpbiBgbmV0Y29uc29sZS5jYCwgd2hpY2ggbWFrZXMgc2Vuc2UgZm9yIGJldHRlciBlbmNhcHN1bGF0aW9uLiBUaGUga2V5IGFkZGl0aW9uIGlzIHRoZSBgZmFtaWx5YCBmaWVsZCB3aXRoaW4gYHN0cnVjdCBpbmV0X2FkZHJgIChBRl9VTlNQRUMsIEFGX0lORVQsIEFGX0lORVQ2KSwgYW5kIGl0IGxvb2tzIGxpa2UgdGhleSYjMzk7dmUgcmVwbGFjZWQgdGhhdCBgaXB2NmAgYm9vbGVhbiBmbGFnIGluIGBuZXRjb25zb2xlX3RhcmdldGAgd2l0aCB0aGUgYGZhbWlseWAgZmllbGQgaW4gYm90aCBgbG9jYWxfaXBgIGFuZCBgcmVtb3RlX2lwYC4gVGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBzaGlmdDsgaXQgYWxsb3dzIGZvciBpbmRlcGVuZGVudCBmYW1pbHkgdHJhY2tpbmcgZm9yIGxvY2FsIGFuZCByZW1vdGUgSVBzLCBhbmQgaXQgbG9va3MgbGlrZSB0aGVyZSYjMzk7cyBzb21lIGNvbnNpc3RlbmN5IGNoZWNraW5nIGluIHRoZSBtaXggbm93LgoKTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGlzIHRoaXMgcmVhY2hhYmxlPyBBbmQsIG1vcmUgaW1wb3J0YW50bHksIGlzIGl0IGZ1enphYmxlPyBOZXRjb25zb2xlLCBhcyBhIGNvcmUga2VybmVsIGZlYXR1cmUgZm9yIHNlbmRpbmcgbG9ncyBvdmVyIFVEUCwgaXMgY2VydGFpbmx5IGludGVyZXN0aW5nIGZyb20gYSBzZWN1cml0eSBwZXJzcGVjdGl2ZS4gSXQmIzM5O3MgY29uZmlndXJlZCBlaXRoZXIgdmlhIHN5c2ZzIChjb25maWdmcykgb3IgdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUuIFRoZSBmYWN0IHRoYXQgc3lzZnMgaXMgcm9vdC1yZWFjaGFibGUgYW5kIHN5emthbGxlciBjYW4gaW50ZXJhY3Qgd2l0aCBjb25maWdmcyBpcyBhIGh1Z2UgcGx1cy4gVGhpcyBtYWtlcyBpdCBhIGdyZWF0IHRhcmdldCBpZiB0aGVyZSBhcmUgYnVncy4KClRoZSBjb2RlIGNoYW5nZXMgYXJlIHRvdWNoaW5nIHNldmVyYWwgaW1wb3J0YW50IGFyZWFzOiBgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZWAsIHRoZSBgKl9zdG9yZWAgZnVuY3Rpb25zIChzcGVjaWZpY2FsbHkgdGhlIG9uZXMgcmVsYXRlZCB0byBzZXR0aW5nIGxvY2FsIGFuZCByZW1vdGUgSVBzKSwgYG5ldGNvbnNfbmV0cG9sbF9zZXR1cGAsIGFuZCBgbmV0cG9sbF9zZW5kX3VkcGAuIFRoZXNlIGFyZSBhbGwgcHJpbWUgbG9jYXRpb25zIGZvciBidWdzLgoKTm93LCBsZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNvbmZpZyBvcHRpb25zIGFyZSBmb3IgbmV0Y29uc29sZS4gSSB3YW50IHRvIGNoZWNrIGZvciB0aGUgb3B0aW9ucyBgQ09ORklHX05FVENPTlNPTEVgIGFuZCBgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQ2AgKGZvciBjb25maWdmcyBzdXBwb3J0KSBhcyB0aGV5IGhhdmUgdG8gYmUgZW5hYmxlZCB0byBlbmFibGUgdGhlIGZlYXR1cmVzIHRoYXQgYXJlIGNoYW5nZWQgYnkgdGhlIHBhdGNoLiBJJiMzOTtsbCB1c2UgYGdyZXBwZXJgIHRvIHNlYXJjaCBmb3IgdGhlbS4gVGhpcyB3aWxsIHRlbGwgbWUgaWYgdGhlIGFmZmVjdGVkIGNvZGUgcGF0aHMgYXJlIGFjdGl2ZSwgYW5kIGlmIHNvLCBob3cgYnJvYWRseSB1c2VkIHRoZXkgYXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRDT05TT0xFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWc9MzE4PWNvbmZpZyBNQUNTRUNcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTMyNi1cbmRyaXZlcnMvbmV0L0tjb25maWc6MzI3OmNvbmZpZyBORVRDT05TT0xFXG5kcml2ZXJzL25ldC9LY29uZmlnLTMyOC1cdHRyaXN0YXRlIFwmIzM0O05ldHdvcmsgY29uc29sZSBsb2dnaW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTMzMy1cbmRyaXZlcnMvbmV0L0tjb25maWc6MzM0OmNvbmZpZyBORVRDT05TT0xFX0RZTkFNSUNcbmRyaXZlcnMvbmV0L0tjb25maWctMzM1LVx0Ym9vbCBcJiMzNDtEeW5hbWljIHJlY29uZmlndXJhdGlvbiBvZiBsb2dnaW5nIHRhcmdldHNcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTM0NC1cbmRyaXZlcnMvbmV0L0tjb25maWc6MzQ1OmNvbmZpZyBORVRDT05TT0xFX0VYVEVOREVEX0xPR1xuZHJpdmVycy9uZXQvS2NvbmZpZy0zNDYtXHRib29sIFwmIzM0O1NldCBrZXJuZWwgZXh0ZW5kZWQgbWVzc2FnZSBieSBkZWZhdWx0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy0zNTQtXG5kcml2ZXJzL25ldC9LY29uZmlnOjM1NTpjb25maWcgTkVUQ09OU09MRV9QUkVQRU5EX1JFTEVBU0VcbmRyaXZlcnMvbmV0L0tjb25maWctMzU2LVx0Ym9vbCBcJiMzNDtQcmVwZW5kIGtlcm5lbCByZWxlYXNlIHZlcnNpb24gaW4gdGhlIG1lc3NhZ2UgYnkgZGVmYXVsdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0ODIKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGlzIHRhc2s6CgoqKkFuYWx5emluZyBORVRDT05TT0xFIERlcGVuZGVuY2llcyBpbiBLY29uZmlnKioKCkFscmlnaHQsIHRoZSBvYmplY3RpdmUgaXMgcHJldHR5IGNsZWFyOiBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBORVRDT05TT0xFYC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgYWx3YXlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIFRoZSBLY29uZmlnIGZpbGVzIGFyZSB0aGUgaGVhcnQgb2YgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgc28gdGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQuIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgZ28gc3RyYWlnaHQgdG8gYGRyaXZlcnMvbmV0L0tjb25maWdgLiBUaGF0JiMzOTtzIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gYmVnaW4gbG9va2luZyBmb3IgYE5FVENPTlNPTEVgIGFuZCB1bmRlcnN0YW5kIHdoYXQgbmVlZHMgdG8gYmUgZW5hYmxlZCBvciBpbiBwbGFjZSBmb3IgaXQgdG8gd29yay4gSSBleHBlY3QgdG8gZmluZCBzb21lIGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzLCBtYXliZSBzb21lIGBzZWxlY3RgIHN0YXRlbWVudHMsIGFuZCBwZXJoYXBzIGV2ZW4gc29tZSBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBuZXR3b3JrLXJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIFRoaXMgaW5pdGlhbCBjaGVjayBpbiBLY29uZmlnIHNob3VsZCB0ZWxsIG1lIHRoZSBwcmltYXJ5IHByZXJlcXVpc2l0ZXMgYmVmb3JlIGRpZ2dpbmcgZGVlcGVyIGlmIG5lY2Vzc2FyeS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2Ugb3RoZXIgbmV0d29yayBkcml2ZXJzIHRoYXQgbWlnaHQgYmUgcmVxdWlyZWQsIHNwZWNpZmljIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb25zLCBvciBldmVuIG90aGVyIGtlcm5lbCBmZWF0dXJlcyB0aGF0IG5lZWQgdG8gYmUgYWN0aXZlLiBUaGlzIGlzIHRoZSBmaXJzdCBzdGVwIGluIHVuZGVyc3RhbmRpbmcgdGhlIGNvbXBsZXRlIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlIGZvciBgTkVUQ09OU09MRWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVENPTlNPTEUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWc9MzE4PWNvbmZpZyBNQUNTRUNcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTMyNi1cbmRyaXZlcnMvbmV0L0tjb25maWc6MzI3OmNvbmZpZyBORVRDT05TT0xFXG5kcml2ZXJzL25ldC9LY29uZmlnLTMyOC1cdHRyaXN0YXRlIFwmIzM0O05ldHdvcmsgY29uc29sZSBsb2dnaW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTMzMy1cbmRyaXZlcnMvbmV0L0tjb25maWc6MzM0OmNvbmZpZyBORVRDT05TT0xFX0RZTkFNSUNcbmRyaXZlcnMvbmV0L0tjb25maWctMzM1LVx0Ym9vbCBcJiMzNDtEeW5hbWljIHJlY29uZmlndXJhdGlvbiBvZiBsb2dnaW5nIHRhcmdldHNcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTM0NC1cbmRyaXZlcnMvbmV0L0tjb25maWc6MzQ1OmNvbmZpZyBORVRDT05TT0xFX0VYVEVOREVEX0xPR1xuZHJpdmVycy9uZXQvS2NvbmZpZy0zNDYtXHRib29sIFwmIzM0O1NldCBrZXJuZWwgZXh0ZW5kZWQgbWVzc2FnZSBieSBkZWZhdWx0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy0zNTQtXG5kcml2ZXJzL25ldC9LY29uZmlnOjM1NTpjb25maWcgTkVUQ09OU09MRV9QUkVQRU5EX1JFTEVBU0VcbmRyaXZlcnMvbmV0L0tjb25maWctMzU2LVx0Ym9vbCBcJiMzNDtQcmVwZW5kIGtlcm5lbCByZWxlYXNlIHZlcnNpb24gaW4gdGhlIG1lc3NhZ2UgYnkgZGVmYXVsdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5OTkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5IGZvciBhbiBleHBlcnQ6CgoqKkRpdmluZyBpbnRvIHRoZSBOZXR3b3JrIENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgd2l0aCB0aGUgbmV0d29yayBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBkcml2ZXJzL25ldC9LY29uZmlnYCBmaWxlLiBJJiMzOTttIGZvY3VzaW5nIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAzMjcg4oCTIHRoYXQmIzM5O3Mgb2Z0ZW4gd2hlcmUgdGhlIGp1aWN5IGJpdHMgYXJlLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIGNvcmUgbmV0d29ya2luZyBmZWF0dXJlcyBvciBwZXJoYXBzIGEgc3BlY2lmaWMgZHJpdmVyIEkmIzM5O20gdHJ5aW5nIHRvIHVuZGVyc3RhbmQuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgZWl0aGVyIGEgaGlnaC1sZXZlbCBvdmVydmlldyBvZiBhdmFpbGFibGUgbmV0d29yayBmZWF0dXJlcywgcGVyaGFwcyBzb21lIGRlcGVuZGVuY2llcyBvbiBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMsIG9yIG1heWJlIGV2ZW4gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgYSBwYXJ0aWN1bGFyIG5ldHdvcmsgZHJpdmVyIG9yIHRlY2hub2xvZ3kuIFRpbWUgdG8gY3JhY2sgaXQgb3BlbiBhbmQgc2VlIHdoYXQgcmV2ZWxhdGlvbnMgbGluZSAzMjcgaG9sZHMhIExldCYjMzk7cyBzZWUgd2hhdCBnZW1zIHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzIwOlx0XHRzZWxlY3QgQ1JZUFRPXG4gMzIxOlx0XHRzZWxlY3QgQ1JZUFRPX0FFU1xuIDMyMjpcdFx0c2VsZWN0IENSWVBUT19HQ01cbiAzMjM6XHRcdHNlbGVjdCBHUk9fQ0VMTFNcbiAzMjQ6XHRcdGhlbHBcbiAzMjU6XHRcdCAgIE1BQ3NlYyBpcyBhbiBlbmNyeXB0aW9uIHN0YW5kYXJkIGZvciBFdGhlcm5ldC5cbiAzMjY6XHRcbiAzMjc6XHRjb25maWcgTkVUQ09OU09MRVxuIDMyODpcdFx0dHJpc3RhdGUgXCYjMzQ7TmV0d29yayBjb25zb2xlIGxvZ2dpbmcgc3VwcG9ydFwmIzM0O1xuIDMyOTpcdFx0ZGVwZW5kcyBvbiBQUklOVEtcbiAzMzA6XHRcdGhlbHBcbiAzMzE6XHRcdCAgSWYgeW91IHdhbnQgdG8gbG9nIGtlcm5lbCBtZXNzYWdlcyBvdmVyIHRoZSBuZXR3b3JrLCBlbmFibGUgdGhpcy5cbiAzMzI6XHRcdCAgU2VlIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGNvbnNvbGUucnN0XHUwMDNlIGZvciBkZXRhaWxzLlxuIDMzMzpcdFxuIDMzNDpcdGNvbmZpZyBORVRDT05TT0xFX0RZTkFNSUNcbiAzMzU6XHRcdGJvb2wgXCYjMzQ7RHluYW1pYyByZWNvbmZpZ3VyYXRpb24gb2YgbG9nZ2luZyB0YXJnZXRzXCYjMzQ7XG4gMzM2Olx0XHRkZXBlbmRzIG9uIE5FVENPTlNPTEUgXHUwMDI2XHUwMDI2IFNZU0ZTIFx1MDAyNlx1MDAyNiBDT05GSUdGU19GUyBcdTAwMjZcdTAwMjYgXFxcbiAzMzc6XHRcdFx0XHQhKE5FVENPTlNPTEU9eSBcdTAwMjZcdTAwMjYgQ09ORklHRlNfRlM9bSlcbiAzMzg6XHRcdHNlbGVjdCBQUklOVEtfRVhFQ1VUSU9OX0NUWFxuIDMzOTpcdFx0aGVscFxuIDM0MDpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBhYmlsaXR5IHRvIGR5bmFtaWNhbGx5IHJlY29uZmlndXJlIHRhcmdldFxuIDM0MTpcdFx0ICBwYXJhbWV0ZXJzIChpbnRlcmZhY2UsIElQIGFkZHJlc3NlcywgcG9ydCBudW1iZXJzLCBNQUMgYWRkcmVzc2VzKVxuIDM0MjpcdFx0ICBhdCBydW50aW1lIHRocm91Z2ggYSB1c2Vyc3BhY2UgaW50ZXJmYWNlIGV4cG9ydGVkIHVzaW5nIGNvbmZpZ2ZzLlxuIDM0MzpcdFx0ICBTZWUgXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0Y29uc29sZS5yc3RcdTAwM2UgZm9yIGRldGFpbHMuXG4gMzQ0Olx0XG4gMzQ1Olx0Y29uZmlnIE5FVENPTlNPTEVfRVhURU5ERURfTE9HXG4gMzQ2Olx0XHRib29sIFwmIzM0O1NldCBrZXJuZWwgZXh0ZW5kZWQgbWVzc2FnZSBieSBkZWZhdWx0XCYjMzQ7XG4gMzQ3Olx0XHRkZXBlbmRzIG9uIE5FVENPTlNPTEVcbiAzNDg6XHRcdGRlZmF1bHQgblxuIDM0OTpcdFx0aGVscFxuIDM1MDpcdFx0ICBTZXQgZXh0ZW5kZWQgbG9nIHN1cHBvcnQgZm9yIG5ldGNvbnNvbGUgbWVzc2FnZS4gSWYgdGhpcyBvcHRpb24gaXNcbiAzNTE6XHRcdCAgc2V0LCBsb2cgbWVzc2FnZXMgYXJlIHRyYW5zbWl0dGVkIHdpdGggZXh0ZW5kZWQgbWV0YWRhdGEgaGVhZGVyIGluIGFcbiAzNTI6XHRcdCAgZm9ybWF0IHNpbWlsYXIgdG8gL2Rldi9rbXNnLiAgU2VlXG4gMzUzOlx0XHQgIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGNvbnNvbGUucnN0XHUwMDNlIGZvciBkZXRhaWxzLlxuIDM1NDpcdFxuIDM1NTpcdGNvbmZpZyBORVRDT05TT0xFX1BSRVBFTkRfUkVMRUFTRVxuIDM1NjpcdFx0Ym9vbCBcJiMzNDtQcmVwZW5kIGtlcm5lbCByZWxlYXNlIHZlcnNpb24gaW4gdGhlIG1lc3NhZ2UgYnkgZGVmYXVsdFwmIzM0O1xuIDM1NzpcdFx0ZGVwZW5kcyBvbiBORVRDT05TT0xFX0VYVEVOREVEX0xPR1xuIDM1ODpcdFx0ZGVmYXVsdCBuXG4gMzU5Olx0XHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODgwOQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIHRoZSBOZXRjb25zb2xlIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBgTkVUQ09OU09MRWAgYW5kIGBORVRDT05TT0xFX0RZTkFNSUNgIGp1bXAgb3V0IGFzIHRoZSBrZXkgY29uZmlndXJhdGlvbnMuIFRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgbW9kaWZpY2F0aW9ucyB0byBJUCBhZGRyZXNzIGhhbmRsaW5nIGFuZCB2YWxpZGF0aW9uIHdpdGhpbiBuZXRjb25zb2xlLCBzcGVjaWZpY2FsbHkgdGhyb3VnaCBjaGFuZ2VzIHRvIGZ1bmN0aW9ucyBsaWtlIGBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lYCwgYGxvY2FsX2lwX3N0b3JlYCwgYHJlbW90ZV9pcF9zdG9yZWAsIGBuZXRjb25zX25ldHBvbGxfc2V0dXBgLCBhbmQgYG5ldHBvbGxfc2VuZF91ZHBgLiBJIGtub3cgdGhhdCBgbG9jYWxfaXBfc3RvcmVgIGFuZCBgcmVtb3RlX2lwX3N0b3JlYCBhcmUgcGFydCBvZiB0aGUgY29uZmlnZnMgaW50ZXJmYWNlIGZvciBuZXRjb25zb2xlLCB3aGljaCBpbW1lZGlhdGVseSBzY3JlYW1zICYjMzQ7ZnV6emFibGUmIzM0OyBnaXZlbiBTeXprYWxsZXImIzM5O3MgY2FwYWJpbGl0aWVzIHdpdGggY29uZmlnZnMuCgpUaGUgY2hhbmdlcyBhcHBlYXIgZnVuY3Rpb25hbCwgc28gdGhpcyBpcyBhYm91dCBtb3JlIHJvYnVzdCBJUCBwYXJzaW5nIGFuZCBwcm9wZXIgdHJhY2tpbmcgb2YgSVAgZmFtaWxpZXMuIERlZmluaXRlbHkgd29ydGggYSBkZWVwIGZ1enppbmcgZGl2ZS4KCk15IG1haW4gZm9jdXMgcmlnaHQgbm93IGlzIHRvIGlkZW50aWZ5IHRoZSBjcml0aWNhbCBzeW1ib2xzIGZvciBmdXp6aW5nLiBTbyBmYXIsIEkmIzM5O20gdGhpbmtpbmc6IGBsb2NhbF9pcF9zdG9yZWAsIGByZW1vdGVfaXBfc3RvcmVgLCBgbmV0Y29uc19uZXRwb2xsX3NldHVwYCwgYW5kIGBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lYC4gVGhhdCBsYXN0IG9uZSBoYXMgbWUgdGhpbmtpbmcsIGNvdWxkIGl0IGJlIGNhbGxlZCBkdXJpbmcgbW9kdWxlIGxvYWQgb3Igd2hlbiBjcmVhdGluZyBjb25maWdmcyB0YXJnZXRzPyBJIG5lZWQgdG8gY2hlY2sgdGhlIGNhbGwgc2l0ZXMgZm9yIGBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lYCB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IGl0JiMzOTtzIGludm9rZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTEwMDE9c3RhdGljIHNzaXplX3QgZW5hYmxlZF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEwNDktXHRcdC8qXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTA1MDpcdFx0ICogU2tpcCBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKCkgLS0gYWxsIHRoZSBhdHRyaWJ1dGVzIGFyZVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEwNTEtXHRcdCAqIGFscmVhZHkgY29uZmlndXJlZCB2aWEgY29uZmlnZnMuIEp1c3QgcHJpbnQgdGhlbSBvdXQuXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI1MDg9X19yZWxlYXNlcyhcdTAwMjZ0YXJnZXRfbGlzdF9sb2NrKVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNTEyLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI1MTM6c3RhdGljIGludCBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNoYXIgKm9wdClcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNTE0LXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjYwMT1zdGF0aWMgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICphbGxvY19wYXJhbV90YXJnZXQoY2hhciAqdGFyZ2V0X2NvbmZpZyxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjYyOC1cdC8qIFBhcnNlIHBhcmFtZXRlcnMgYW5kIHNldHVwIG5ldHBvbGwgKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNjI5Olx0ZXJyID0gbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZShudCwgdGFyZ2V0X2NvbmZpZyk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjYzMC1cdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2NzIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBLZXJuZWwgVnVsbmVyYWJpbGl0aWVzKioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2luZyB0aGUgcG90ZW50aWFsIGF0dGFjayBzdXJmYWNlIGhlcmUsIHNwZWNpZmljYWxseSBpbiByZWxhdGlvbiB0byBgbmV0Y29uc29sZWAuIEkmIzM5O20gc2VlaW5nIHRoYXQgYG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmVgIGdldHMgY2FsbGVkIHRocm91Z2ggYGFsbG9jX3BhcmFtX3RhcmdldGAsIHdoaWNoIGlzIGl0c2VsZiBpbnZva2VkIGR1cmluZyBtb2R1bGUgaW5pdGlhbGl6YXRpb24gb3Igc29tZXRoaW5nIHNpbWlsYXIsIGxpa2UgaW5pdGNhbGxzLiBBaCwgd2FpdCwgY29ycmVjdGlvbiDigJMgbG9va2luZyBjbG9zZXIsIGBhbGxvY19wYXJhbV90YXJnZXRgIGlzIGFjdHVhbGx5IGNhbGxlZCBmcm9tIGBuZXRjb25zb2xlX2luaXRgLgoKVGhlIGtleSB0aGluZyBpcywgc2luY2Ugc3l6a2FsbGVyIGlzIGFibGUgdG8gbG9hZCBtb2R1bGVzLCBvciBtb3JlIHN1YnRseSBwYXNzIG1vZHVsZSBwYXJhbWV0ZXJzLCBpdCBtaWdodCBiZSBhYmxlIHRvIHRyaWdnZXIgdGhpcyBgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZWAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgY29uZmlnZnMgY291bGQgYmUgYW4gZW50cnkgcG9pbnQuIEhvd2V2ZXIsIGBsb2NhbF9pcF9zdG9yZWAgYW5kIGByZW1vdGVfaXBfc3RvcmVgICphcmUqIGRlZmluaXRlbHkgcmVhY2hhYmxlIHRocm91Z2ggY29uZmlnZnM7IHRoYXQmIzM5O3MgZ29vZCB0byBrZWVwIGluIG1pbmQsIGFuZCB0byByZXZpZXcgdGhhdCBhdHRhY2sgcGF0aC4KCkJ1dCBsZXQmIzM5O3Mgc2hpZnQgZm9jdXMgdG8gYG5ldGNvbnNfbmV0cG9sbF9zZXR1cGAuIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNhbGwgZ3JhcGggZm9yIHRoYXQgZnVuY3Rpb24sIGFuZCBzZWUgd2hlcmUgZWxzZSBpdCBpcyBjb25uZWN0ZWQgdG8uIEl0IGNvdWxkIGJlIGFuIGludGVyZXN0aW5nIGFyZWEgb2Ygc3R1ZHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25ldGNvbnNfbmV0cG9sbF9zZXR1cCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9NDQ0PXN0YXRpYyBpbnQgbmV0Y29uc190YWtlX2lwdjQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNDcyLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjQ3MzpzdGF0aWMgaW50IG5ldGNvbnNfbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTQ3NC17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTU2Mz1zdGF0aWMgdm9pZCByZXN1bWVfdGFyZ2V0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTU3MS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo1NzI6XHRpZiAobmV0Y29uc19uZXRwb2xsX3NldHVwKG50KSkge1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTU3My1cdFx0LyogbmV0cG9sbCBmYWlscyBzZXR1cCBvbmNlLCBkbyBub3QgdHJ5IGFnYWluLiAqL1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xMDAxPXN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMDYyLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEwNjM6XHRcdHJldCA9IG5ldGNvbnNfbmV0cG9sbF9zZXR1cChudCk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTA2NC1cdFx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yNjAxPXN0YXRpYyBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKmFsbG9jX3BhcmFtX3RhcmdldChjaGFyICp0YXJnZXRfY29uZmlnLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjM5LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI2NDA6XHRlcnIgPSBuZXRjb25zX25ldHBvbGxfc2V0dXAobnQpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2NDEtXHRpZiAoZXJyKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDYzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBOZXR3b3JrIFBvbGxpbmcgU2V0dXAqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgbmV0Y29uc19uZXRwb2xsX3NldHVwYCBmdW5jdGlvbiwgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgY2FsbGVkIGZyb20gYSBmZXcga2V5IHBsYWNlczogYGVuYWJsZWRfc3RvcmVgIHdpdGhpbiB0aGUgY29uZmlnZnMgZnJhbWV3b3JrLCBgcmVzdW1lX3RhcmdldGAsIGFuZCBgYWxsb2NfcGFyYW1fdGFyZ2V0YC4gR2l2ZW4gdGhpcyBkaXN0cmlidXRpb24sIGBlbmFibGVkX3N0b3JlYCBzZWVtcyBsaWtlIGEgcGFydGljdWxhcmx5IGdvb2Qgc3ltYm9sIHRvIHplcm8gaW4gb24sIGFsb25nIHdpdGggYGxvY2FsX2lwX3N0b3JlYCBhbmQgYHJlbW90ZV9pcF9zdG9yZWAsIGFzIHRoZXkmIzM5O3JlIGNsZWFybHkgcmVsYXRlZC4KCkhtbSwgSSYjMzk7bSBhbHNvIHNlZWluZyBzb21lIG1vZGlmaWNhdGlvbnMgdG8gYG5ldHBvbGxfc2VuZF91ZHBgLiBUaGF0IGZ1bmN0aW9uIGlzLCBvZiBjb3Vyc2UsIGNyaXRpY2FsIGZvciBhY3R1YWxseSB0cmFuc21pdHRpbmcgbWVzc2FnZXMuIFNvLCBteSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBxdWlja2x5IGlkZW50aWZ5IGFsbCB0aGUgY2FsbGVycyBvZiBgbmV0cG9sbF9zZW5kX3VkcGAgdG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZSBvZiBpdHMgdXNhZ2UgY29udGV4dC4gR290dGEgdW5kZXJzdGFuZCBob3cgZGF0YSBmbG93cyBpbiBhbmQgb3V0IGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25ldHBvbGxfc2VuZF91ZHAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIxNDU9c3RhdGljIHZvaWQgcHVzaF9pcHY2KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxNjgtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjE2OTpzdGF0aWMgaW50IG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxNzAtXHRcdFx0ICAgIGludCBsZW4pXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMDYtLyoqXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjIwNzogKiBzZW5kX3VkcCAtIFdyYXBwZXIgZm9yIG5ldHBvbGxfc2VuZF91ZHAgdGhhdCBjb3VudHMgZXJyb3JzXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIwOC0gKiBAbnQ6IHRhcmdldCB0byBzZW5kIG1lc3NhZ2UgdG9cbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIxMS0gKlxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIyMTI6ICogQ2FsbHMgbmV0cG9sbF9zZW5kX3VkcCBhbmQgY2xhc3NpZmllcyB0aGUgcmV0dXJuIHZhbHVlLiBJZiBhbiBlcnJvclxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMTMtICogb2NjdXJyZWQgaXQgaW5jcmVtZW50cyBzdGF0aXN0aWNzIGluIG50LVx1MDAzZXN0YXRzIGFjY29yZGluZ2x5LlxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIyMTQ6ICogT25seSBjYWxscyBuZXRwb2xsX3NlbmRfdWRwIGlmIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMgaXMgZGlzYWJsZWQuXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIxNS0gKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yMjE2PXN0YXRpYyB2b2lkIHNlbmRfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNvbnN0IGNoYXIgKm1zZywgaW50IGxlbilcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjE3LXtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMjE4Olx0aW50IHJlc3VsdCA9IG5ldHBvbGxfc2VuZF91ZHAobnQsIG1zZywgbGVuKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjE5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTIxMAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldGNvbnNvbGUgRGF0YSBGbG93KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJJiMzOTttIHNlZWluZywgdGhlIGBzZW5kX3VkcGAgZnVuY3Rpb24gaXMgYXQgdGhlIGNvcmUgb2YgdGhlIG5ldGNvbnNvbGUgZGF0YSB0cmFuc21pc3Npb24uIEl0JiMzOTtzIGNhbGxlZCBieSBgd3JpdGVfZXh0X21zZ2AgYW5kIGB3cml0ZV9tc2dgLCB3aGljaCBpbiB0dXJuIGFyZSBpbnZva2VkIGJ5IGBuZXRjb25zb2xlX2V4dF9lbWl0YCBhbmQgYG5ldGNvbnNvbGVfZW1pdGAuIFRoZXNlIGxhdHRlciBmdW5jdGlvbnMgYXJlIHJlZ2lzdGVyZWQgYXMgY29uc29sZSB3cml0ZSBjYWxsYmFja3MsIG1lYW5pbmcgdGhleSYjMzk7cmUgdHJpZ2dlcmVkIHdoZW5ldmVyIHNvbWV0aGluZyBpcyB3cml0dGVuIHRvIHRoZSBrZXJuZWwgbG9nLCBiZSBpdCB0aHJvdWdoIGAvZGV2L2ttc2dgIG9yIGEgc2ltcGxlIGBwcmludGtgLiBUaGF0IG1ha2VzIHRoZSB3aG9sZSBzeXN0ZW0gYWNjZXNzaWJsZSBhbmQgc29tZXRoaW5nIHRvIGtlZXAgYW4gZXllIG9uLgoKTm93LCBsZXQmIzM5O3MgcGlucG9pbnQgdGhlIGtleSBwbGF5ZXJzIGluIHRoaXMgcHJvY2Vzcy4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgZm9sbG93aW5nIHN5bWJvbHM6IGBsb2NhbF9pcF9zdG9yZWAsIGByZW1vdGVfaXBfc3RvcmVgLCBgZW5hYmxlZF9zdG9yZWAsIGBuZXRjb25zX25ldHBvbGxfc2V0dXBgLCBgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZWAsIGFuZCBgbmV0cG9sbF9zZW5kX3VkcGAuIFRoZXNlIGFyZSBsaWtlbHkgY3J1Y2lhbCBmb3IgY29uZmlndXJhdGlvbiwgbmV0d29yayBzZXR1cCwgYW5kIGFjdHVhbCB0cmFuc21pc3Npb24uCgpGaW5hbGx5LCBhIGtleSBxdWVzdGlvbiBjb21lcyB0byBtaW5kOiBEb2VzIGBORVRDT05TT0xFX0RZTkFNSUNgIGNvbmZpZ3VyYXRpb24gbmVlZCB0byBiZSBlbmFibGVkIGZvciBgbG9jYWxfaXBfc3RvcmVgIGFuZCBgcmVtb3RlX2lwX3N0b3JlYCB0byBmdW5jdGlvbiBjb3JyZWN0bHk/IFRoaXMgaXMgYW4gaW1wb3J0YW50IHF1ZXN0aW9uLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgZGVwZW5kZW5jeTsgdW5kZXJzdGFuZGluZyB0aGF0IHdpbGwgYmUgdmVyeSBpbXBvcnRhbnQgZm9yIHRoaXMgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsb2NhbF9pcF9zdG9yZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTIwMT1zdGF0aWMgc3NpemVfdCByZW1vdGVfcG9ydF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEyMjItXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTIyMzpzdGF0aWMgc3NpemVfdCBsb2NhbF9pcF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZixcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMjI0LVx0XHRzaXplX3QgY291bnQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExODIwCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNvbmZpZ2ZzIEludmVzdGlnYXRpb24qKgoKT2theSwgc28gdGhlc2UgYXJlIGRlZmluaXRlbHkgY29uZmlnZnMgY2FsbGJhY2tzLiBBbmQsIEkgcmVjYWxsLCB0aG9zZSBhcmUgb25seSBjb21waWxlZCB3aGVuIGBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDYCBpcyBlbmFibGVkLiBUaW1lIHRvIGRvdWJsZS1jaGVjayBpZiBgTkVUQ09OU09MRWAgcmVsaWVzIG9uIGFueXRoaW5nIGVsc2UgdGhhdCBtaWdodCBuZWVkIG91ciBhdHRlbnRpb24gZm9yIGVuYWJsZW1lbnQuIEl0IGxvb2tzIGxpa2UgaXQgZGVwZW5kcyBvbiBgUFJJTlRLYCwgd2hpY2gsIGluIHByYWN0aWNlLCBpcyBhbG1vc3QgYWx3YXlzIGVuYWJsZWQuIEFoYSwgYE5FVENPTlNPTEVfRFlOQU1JQ2AgaGFzIGl0cyBvd24gZGVwZW5kZW5jaWVzOiBgTkVUQ09OU09MRSAmYW1wOyZhbXA7IFNZU0ZTICZhbXA7JmFtcDsgQ09ORklHRlNfRlNgLiBSaWdodCwgc28gdG8gZ2V0IHRoaXMgd29ya2luZywgd2UmIzM5O2xsIG5lZWQgdG8gZW5hYmxlIGBDT05GSUdGU19GU2AuIExldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBnb3RjaGFzIHdpdGggYENPTkZJR0ZTX0ZTYCBpdHNlbGYuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDT05GSUdGU19GUyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9jb25maWdmcy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9jb25maWdmcy9LY29uZmlnOjI6Y29uZmlnIENPTkZJR0ZTX0ZTXG5mcy9jb25maWdmcy9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtVc2Vyc3BhY2UtZHJpdmVuIGNvbmZpZ3VyYXRpb24gZmlsZXN5c3RlbVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjE2NQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDEwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDb25maWd1cmluZyB0aGUgTmV0d29yayBDb25zb2xlIGFuZCBJUHY2IGZvciB0aGUgVXBkYXRlKioKCk9rYXksIHNvIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBgQ09ORklHRlNfRlNgIGlzc3VlIGhlcmUsIGFuZCBpdCYjMzk7cyBhIHRyaXN0YXRlLiBHaXZlbiB0aGF0LCBJIG5lZWQgdG8gaW5jbHVkZSBgTkVUQ09OU09MRWAsIGBORVRDT05TT0xFX0RZTkFNSUNgLCBhbmQgYENPTkZJR0ZTX0ZTYCBpbiBgRW5hYmxlQ29uZmlnc2AuIFRoYXQgY292ZXJzIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgd2UgbmVlZC4KCk5vdywgbGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHJlbGF0ZWQgY29uZmlncyB0aGF0IG1pZ2h0IGJlIHVzZWZ1bC4gQWgsIGBORVRDT05TT0xFX0VYVEVOREVEX0xPR2AuIE5vdCBlc3NlbnRpYWwsIGJ1dCBwcm9iYWJseSBhIGdvb2QgaWRlYSB0byBlbmFibGUgaXQgZm9yIG1vcmUgaW4tZGVwdGggbG9nZ2luZyBkdXJpbmcgdGVzdGluZyBhbmQgZGVidWdnaW5nLgoKUmlnaHQsIHRoZSBwYXRjaCBzcGVjaWZpY2FsbHkgdG91Y2hlcyBJUHY2IGhhbmRsaW5nLCBzbyBgSVBWNmAgaXMgZGVmaW5pdGVseSBhIHJlcXVpcmVtZW50LiBMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhhdCBpbiBgbmV0L2lwdjYvS2NvbmZpZ2AgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLiBHb3R0YSBiZSB0aG9yb3VnaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQVjYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvS2NvbmZpZy01LVxubmV0L2lwdjYvS2NvbmZpZzo2Om1lbnVjb25maWcgSVBWNlxubmV0L2lwdjYvS2NvbmZpZy03LVx0Ym9vbCBcJiMzNDtUaGUgSVB2NiBwcm90b2NvbFwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWc9MTk9aWYgSVBWNlxubmV0L2lwdjYvS2NvbmZpZy0yMC1cbm5ldC9pcHY2L0tjb25maWc6MjE6Y29uZmlnIElQVjZfUk9VVEVSX1BSRUZcbm5ldC9pcHY2L0tjb25maWctMjItXHRib29sIFwmIzM0O0lQdjY6IFJvdXRlciBQcmVmZXJlbmNlIChSRkMgNDE5MSkgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMzAtXG5uZXQvaXB2Ni9LY29uZmlnOjMxOmNvbmZpZyBJUFY2X1JPVVRFX0lORk9cbm5ldC9pcHY2L0tjb25maWctMzItXHRib29sIFwmIzM0O0lQdjY6IFJvdXRlIEluZm9ybWF0aW9uIChSRkMgNDE5MSkgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMzgtXG5uZXQvaXB2Ni9LY29uZmlnOjM5OmNvbmZpZyBJUFY2X09QVElNSVNUSUNfREFEXG5uZXQvaXB2Ni9LY29uZmlnLTQwLVx0Ym9vbCBcJiMzNDtJUHY2OiBFbmFibGUgUkZDIDQ0MjkgT3B0aW1pc3RpYyBEQURcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnPTEwMj1jb25maWcgSU5FVDZfSVBDT01QXG4tLVxubmV0L2lwdjYvS2NvbmZpZy0xMTEtXG5uZXQvaXB2Ni9LY29uZmlnOjExMjpjb25maWcgSVBWNl9NSVA2XG5uZXQvaXB2Ni9LY29uZmlnLTExMy1cdHRyaXN0YXRlIFwmIzM0O0lQdjY6IE1vYmlsaXR5XCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0xMTktXG5uZXQvaXB2Ni9LY29uZmlnOjEyMDpjb25maWcgSVBWNl9JTEFcbm5ldC9pcHY2L0tjb25maWctMTIxLVx0dHJpc3RhdGUgXCYjMzQ7SVB2NjogSWRlbnRpZmllciBMb2NhdG9yIEFkZHJlc3NpbmcgKElMQSlcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnPTE0Nj1jb25maWcgSU5FVDZfVFVOTkVMXG4tLVxubmV0L2lwdjYvS2NvbmZpZy0xNDktXG5uZXQvaXB2Ni9LY29uZmlnOjE1MDpjb25maWcgSVBWNl9WVElcbm5ldC9pcHY2L0tjb25maWctMTUxLVx0dHJpc3RhdGUgXCYjMzQ7VmlydHVhbCAoc2VjdXJlKSBJUHY2OiB0dW5uZWxpbmdcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTE2MS1cbm5ldC9pcHY2L0tjb25maWc6MTYyOmNvbmZpZyBJUFY2X1NJVFxubmV0L2lwdjYvS2NvbmZpZy0xNjMtXHR0cmlzdGF0ZSBcJiMzNDtJUHY2OiBJUHY2LWluLUlQdjQgdHVubmVsIChTSVQgZHJpdmVyKVwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMTc2LVxubmV0L2lwdjYvS2NvbmZpZzoxNzc6Y29uZmlnIElQVjZfU0lUXzZSRFxubmV0L2lwdjYvS2NvbmZpZy0xNzgtXHRib29sIFwmIzM0O0lQdjY6IElQdjYgUmFwaWQgRGVwbG95bWVudCAoNlJEKVwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMTk1LVxubmV0L2lwdjYvS2NvbmZpZzoxOTY6Y29uZmlnIElQVjZfTkRJU0NfTk9ERVRZUEVcbm5ldC9pcHY2L0tjb25maWctMTk3LVx0Ym9vbFxubmV0L2lwdjYvS2NvbmZpZy0xOTgtXG5uZXQvaXB2Ni9LY29uZmlnOjE5OTpjb25maWcgSVBWNl9UVU5ORUxcbm5ldC9pcHY2L0tjb25maWctMjAwLVx0dHJpc3RhdGUgXCYjMzQ7SVB2NjogSVAtaW4tSVB2NiB0dW5uZWwgKFJGQzI0NzMpXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yMDktXG5uZXQvaXB2Ni9LY29uZmlnOjIxMDpjb25maWcgSVBWNl9HUkVcbm5ldC9pcHY2L0tjb25maWctMjExLVx0dHJpc3RhdGUgXCYjMzQ7SVB2NjogR1JFIHR1bm5lbFwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMjI3LVxubmV0L2lwdjYvS2NvbmZpZzoyMjg6Y29uZmlnIElQVjZfRk9VXG5uZXQvaXB2Ni9LY29uZmlnLTIyOS1cdHRyaXN0YXRlXG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yMzEtXG5uZXQvaXB2Ni9LY29uZmlnOjIzMjpjb25maWcgSVBWNl9GT1VfVFVOTkVMXG5uZXQvaXB2Ni9LY29uZmlnLTIzMy1cdHRyaXN0YXRlXG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yMzYtXG5uZXQvaXB2Ni9LY29uZmlnOjIzNzpjb25maWcgSVBWNl9NVUxUSVBMRV9UQUJMRVNcbm5ldC9pcHY2L0tjb25maWctMjM4LVx0Ym9vbCBcJiMzNDtJUHY2OiBNdWx0aXBsZSBSb3V0aW5nIFRhYmxlc1wmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMjQyLVxubmV0L2lwdjYvS2NvbmZpZzoyNDM6Y29uZmlnIElQVjZfU1VCVFJFRVNcbm5ldC9pcHY2L0tjb25maWctMjQ0LVx0Ym9vbCBcJiMzNDtJUHY2OiBzb3VyY2UgYWRkcmVzcyBiYXNlZCByb3V0aW5nXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yNTYtXG5uZXQvaXB2Ni9LY29uZmlnOjI1Nzpjb25maWcgSVBWNl9NUk9VVEVcbm5ldC9pcHY2L0tjb25maWctMjU4LVx0Ym9vbCBcJiMzNDtJUHY2OiBtdWx0aWNhc3Qgcm91dGluZ1wmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMjY0LVxubmV0L2lwdjYvS2NvbmZpZzoyNjU6Y29uZmlnIElQVjZfTVJPVVRFX01VTFRJUExFX1RBQkxFU1xubmV0L2lwdjYvS2NvbmZpZy0yNjYtXHRib29sIFwmIzM0O0lQdjY6IG11bHRpY2FzdCBwb2xpY3kgcm91dGluZ1wmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMjc4LVxubmV0L2lwdjYvS2NvbmZpZzoyNzk6Y29uZmlnIElQVjZfUElNU01fVjJcbm5ldC9pcHY2L0tjb25maWctMjgwLVx0Ym9vbCBcJiMzNDtJUHY2OiBQSU0tU00gdmVyc2lvbiAyIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTI4NS1cbm5ldC9pcHY2L0tjb25maWc6Mjg2OmNvbmZpZyBJUFY2X1NFRzZfTFdUVU5ORUxcbm5ldC9pcHY2L0tjb25maWctMjg3LVx0Ym9vbCBcJiMzNDtJUHY2OiBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIGVuY2Fwc3VsYXRpb24gc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMjk5LVxubmV0L2lwdjYvS2NvbmZpZzozMDA6Y29uZmlnIElQVjZfU0VHNl9ITUFDXG5uZXQvaXB2Ni9LY29uZmlnLTMwMS1cdGJvb2wgXCYjMzQ7SVB2NjogU2VnbWVudCBSb3V0aW5nIEhNQUMgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMzExLVxubmV0L2lwdjYvS2NvbmZpZzozMTI6Y29uZmlnIElQVjZfU0VHNl9CUEZcbm5ldC9pcHY2L0tjb25maWctMzEzLVx0ZGVmX2Jvb2wgeVxuLS1cbm5ldC9pcHY2L0tjb25maWctMzE2LVxubmV0L2lwdjYvS2NvbmZpZzozMTc6Y29uZmlnIElQVjZfUlBMX0xXVFVOTkVMXG5uZXQvaXB2Ni9LY29uZmlnLTMxOC1cdGJvb2wgXCYjMzQ7SVB2NjogUlBMIFNvdXJjZSBSb3V0aW5nIEhlYWRlciBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0zMjctXG5uZXQvaXB2Ni9LY29uZmlnOjMyODpjb25maWcgSVBWNl9JT0FNNl9MV1RVTk5FTFxubmV0L2lwdjYvS2NvbmZpZy0zMjktXHRib29sIFwmIzM0O0lQdjY6IElPQU0gUHJlLWFsbG9jYXRlZCBUcmFjZSBpbnNlcnRpb24gc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDAxNwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDExOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgTmV0d29yayBDb25zb2xlIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29uZmlndXJhdGlvbiBhbmQgYElQVjZgIGlzIGRlZmluZWQgYXMgYSBib29sZWFuIHZhbHVlLiBUaGF0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIE5vdywgSSB3YW50IHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7dmUgZ290IGBORVRDT05TT0xFYCwgYE5FVENPTlNPTEVfRFlOQU1JQ2AsIGBDT05GSUdGU19GU2AsIGFuZCBvZiBjb3Vyc2UsIGBJUFY2YCBhZ2Fpbi4gSSYjMzk7bSBnb2luZyB0byBrZWVwIHRoZXNlIGluIG1pbmQgYXMgcG90ZW50aWFsbHkgcmVsYXRlZC4KCk15IGF0dGVudGlvbiBpcyBhbHNvIGRyYXduIHRvIHNvbWUgc3BlY2lmaWMgc3ltYm9sczogYGxvY2FsX2lwX3N0b3JlYCwgYHJlbW90ZV9pcF9zdG9yZWAsIGBlbmFibGVkX3N0b3JlYCwgYG5ldGNvbnNfbmV0cG9sbF9zZXR1cGAsIGBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lYCwgYW5kIGBuZXRwb2xsX3NlbmRfdWRwYC4gVGhlc2UgYXJlIGxpa2VseSBrZXkgZWxlbWVudHMgaW4gdGhlIG5ldHdvcmsgY29uc29sZSYjMzk7cyBvcGVyYXRpb24uCgpDcnVjaWFsbHksIEkgbmVlZCB0byBtYWtlIHN1cmUgYG5ldHBvbGxfc2VuZF91ZHBgIGlzbiYjMzk7dCB1c2luZyB0aGUgc3RhdGljIGlubGluZSBvcHRpbWl6YXRpb24uIFRoYXQgY291bGQgaW1wYWN0IGl0cyBiZWhhdmlvciBhbmQgSSB3YW50IHRvIHJ1bGUgdGhhdCBvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25ldHBvbGxfc2VuZF91ZHAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIxNDU9c3RhdGljIHZvaWQgcHVzaF9pcHY2KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxNjgtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjE2OTpzdGF0aWMgaW50IG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxNzAtXHRcdFx0ICAgIGludCBsZW4pXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMDYtLyoqXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjIwNzogKiBzZW5kX3VkcCAtIFdyYXBwZXIgZm9yIG5ldHBvbGxfc2VuZF91ZHAgdGhhdCBjb3VudHMgZXJyb3JzXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIwOC0gKiBAbnQ6IHRhcmdldCB0byBzZW5kIG1lc3NhZ2UgdG9cbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIxMS0gKlxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIyMTI6ICogQ2FsbHMgbmV0cG9sbF9zZW5kX3VkcCBhbmQgY2xhc3NpZmllcyB0aGUgcmV0dXJuIHZhbHVlLiBJZiBhbiBlcnJvclxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMTMtICogb2NjdXJyZWQgaXQgaW5jcmVtZW50cyBzdGF0aXN0aWNzIGluIG50LVx1MDAzZXN0YXRzIGFjY29yZGluZ2x5LlxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIyMTQ6ICogT25seSBjYWxscyBuZXRwb2xsX3NlbmRfdWRwIGlmIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMgaXMgZGlzYWJsZWQuXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIxNS0gKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yMjE2PXN0YXRpYyB2b2lkIHNlbmRfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNvbnN0IGNoYXIgKm1zZywgaW50IGxlbilcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjE3LXtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMjE4Olx0aW50IHJlc3VsdCA9IG5ldHBvbGxfc2VuZF91ZHAobnQsIG1zZywgbGVuKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjE5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDc5NwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgU3RhdGljIEZ1bmN0aW9ucyBpbiBOZXRjb25zb2xlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHRoZSBndWlkZWxpbmUgaXMgcHJldHR5IGNsZWFyOiB3ZSB3YW50IHRvIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBlbnRyeSBwb2ludHMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gVGhlIGdvYWwgaGVyZSBpcyB0byBtYWludGFpbiBhIGNsZWFyIEFQSSBib3VuZGFyeSwgSSB1bmRlcnN0YW5kLiBJIHNlZSBgbmV0cG9sbF9zZW5kX3VkcGAgYW5kIHRoYXQgaW1tZWRpYXRlbHkgcG9wcyBvdXQgYXMgYSBwb3RlbnRpYWwgaXNzdWUgYmVjYXVzZSBpdCYjMzk7cyBzdGF0aWMuIEJ1dCwgaXQmIzM5O3Mgbm90IGlubGluZS4gU28sIHRoYXQmIzM5O3MgYSBwb2ludCBpbiBpdHMgZmF2b3IsIGFsdGhvdWdoIEkgc3RpbGwgbmVlZCB0byBjb25zaWRlciBpdCYjMzk7cyB2aXNpYmlsaXR5LiBUaGVuIEkgc2NhbiBgbG9jYWxfaXBfc3RvcmVgIGFuZCBgcmVtb3RlX2lwX3N0b3JlYCwgYWxzbyBzdGF0aWMsIGJ1dCB0aGVpciB1c2UgYXMgZnVuY3Rpb24gcG9pbnRlcnMgd2l0aGluIGEgc3RydWN0IG1lYW5zIHRoZXkgYXJlIHVubGlrZWx5IHRvIGJlIGlubGluZWQgYW5kIHRoZSBjb21waWxlciB3b3VsZCBuZWVkIHRoZWlyIGFkZHJlc3MuIEdvb2QsIHRoYXTigJlzIGFub3RoZXIgb25lIHRoYXQgcHJvYmFibHkgd29u4oCZdCBjYXVzZSBpc3N1ZXMuCgpgbmV0Y29uc19uZXRwb2xsX3NldHVwYCBpcyBhbHNvIHN0YXRpYywgYnV0IHRoZSBzaGVlciBzaXplIG9mIHRoZSB0aGluZyBhbmQgaXRzIG11bHRpcGxlIGNhbGwgc2l0ZXMgbWVhbiB0aGUgY29tcGlsZXIgcHJvYmFibHkgKndvbiYjMzk7dCogaW5saW5lIGl0LCBhbmQgaXQmIzM5O3MgbGVzcyBvZiBhIHByb2JsZW0uIE5vdywgSSYjMzk7bSBnZXR0aW5nIHRvIGBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lYC4gSXQmIzM5O3Mgc3RhdGljIGFuZCBnZXRzIGNhbGxlZCBmcm9tIGEgc3RhdGljIGZ1bmN0aW9uIGl0c2VsZiwgYGFsbG9jX3BhcmFtX3RhcmdldGAsIHdoaWNoIGlzIGFsc28gc3RhdGljLCBhbmQgdGhhdCBnZXRzIGNhbGxlZCBmcm9tIGBuZXRjb25zb2xlX2luaXRgLiBUaGlzIGlzIGEgc3RyaW5nIG9mIHN0YXRpYyBjYWxscyBhbmQgdGhhdCYjMzk7cyBjb25jZXJuaW5nLiBUaGF0IG9uZSBpcyBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgaW5saW5pbmcuCgpTbywgSSBuZWVkIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzIGF2YWlsYWJsZSwgbGV0JiMzOTtzIHNlZS4uLiBvaCB3YWl0IGBuZXRjb25zb2xlX2luaXRgLCB0aGF0IGxvb2tlZCBwcm9taXNpbmcsIGJ1dCBub3BlLCBpdCYjMzk7cyBgc3RhdGljIGludCBfX2luaXQgbmV0Y29uc29sZV9pbml0KHZvaWQpYC4gRGFtbi4gRm9yIGNvbmZpZ2ZzLCB0aGUgYF9zdG9yZWAgYW5kIGBfc2hvd2AgZnVuY3Rpb25zIGFyZSBzdGF0aWMsIGJ1dCB0aGVpciBhZGRyZXNzZXMgYXJlIGJlaW5nIHRha2VuIHNvIHRoZXkgc2hvdWxkbiYjMzk7dCBiZSBpbmxpbmVkLiBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBhY3R1YWwgcHVibGljIEFQSSBmb3IgdGhpcyB0aGluZy4gSSBzaG91bGQgY2hlY2sgdGhlIGZ1bmN0aW9ucyB3aXRoaW4gYG5ldGNvbnNvbGVfdGFyZ2V0X2l0ZW1fb3BzYCBvciBzaW1pbGFyIHN0cnVjdHVyZXMsIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIGV4dGVybmFsbHkgdmlzaWJsZSBBUEkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xvY2FsX2lwX3N0b3JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xMjAxPXN0YXRpYyBzc2l6ZV90IHJlbW90ZV9wb3J0X3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTIyMi1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMjIzOnN0YXRpYyBzc2l6ZV90IGxvY2FsX2lwX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEyMjQtXHRcdHNpemVfdCBjb3VudClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU2NjUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZCwgZ2VhcmVkIHRvd2FyZCBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk5hdmlnYXRpbmcgdGhlIENvZGViYXNlOiBUYXJnZXRlZCBFeHBsb3JhdGlvbioqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24gaXMgYmVpbmcgdXRpbGl6ZWQuIEluc3RlYWQgb2YgYSBicm9hZCBzd2VlcCwgSSYjMzk7bSBnb2luZyB0byBhZG9wdCBhIG1vcmUgZm9jdXNlZCBhcHByb2FjaC4gTGV0JiMzOTtzIG5vdCBnZXQgbG9zdCBpbiB0aGUgd2VlZHMuIEkmIzM5O2xsIHplcm8gaW4gb24gdGhlIHZpY2luaXR5IG9mIGxpbmUgMTIyMy4gVGhhdCBzZWVtcyBsaWtlIGEgcmVhc29uYWJsZSBzdGFydGluZyBwb2ludCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIGl0cyB1c2FnZS4gSeKAmWxsIG1ha2UgYSBub3RlIG9mIHRoaXMgbGluZSBudW1iZXIgZm9yIHF1aWNrIHJlZmVyZW5jZSBhbmQgdG8gbWFrZSBzdXJlIEkgZG9uJiMzOTt0IG92ZXJsb29rIGFueSByZWxhdGVkIGFyZWFzLiBJdCYjMzk7cyBhIHF1aWNrIGFuZCBlZmZpY2llbnQgd2F5IHRvIHN0YXJ0IGJ1aWxkaW5nIGEgbWVudGFsIG1hcCBvZiB0aGUgY2FsbCBzdGFjayB3aXRob3V0IGdldHRpbmcgYm9nZ2VkIGRvd24gaW4gaXJyZWxldmFudCBkZXRhaWxzLiBUaGlzIHRhcmdldGVkIHJlYWRpbmcgYWxsb3dzIGZvciBiZXR0ZXIgY29tcHJlaGVuc2lvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyMjA6XHRcdHJldHVybiByZXQ7XG4xMjIxOlx0fVxuMTIyMjpcdFxuMTIyMzpcdHN0YXRpYyBzc2l6ZV90IGxvY2FsX2lwX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxuMTIyNDpcdFx0XHRzaXplX3QgY291bnQpXG4xMjI1Olx0e1xuMTIyNjpcdFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcbjEyMjc6XHRcdHNzaXplX3QgcmV0ID0gLUVJTlZBTDtcbjEyMjg6XHRcbjEyMjk6XHRcdGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF9sb2NrKCk7XG4xMjMwOlx0XHRpZiAobnQtXHUwMDNlc3RhdGUgPT0gU1RBVEVfRU5BQkxFRCkge1xuMTIzMTpcdFx0XHRwcl9lcnIoXCYjMzQ7dGFyZ2V0ICglcykgaXMgZW5hYmxlZCwgZGlzYWJsZSB0byB1cGRhdGUgcGFyYW1ldGVyc1xcblwmIzM0OyxcbjEyMzI6XHRcdFx0ICAgICAgIGNvbmZpZ19pdGVtX25hbWUoXHUwMDI2bnQtXHUwMDNlZ3JvdXAuY2dfaXRlbSkpO1xuMTIzMzpcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4xMjM0Olx0XHR9XG4xMjM1Olx0XG4xMjM2Olx0XHRpZiAobmV0cG9sbF9wYXJzZV9pcF9hZGRyKGJ1ZiwgXHUwMDI2bnQtXHUwMDNlbG9jYWxfaXApIFx1MDAzYyAwKVxuMTIzNzpcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4xMjM4Olx0XG4xMjM5Olx0XHRyZXQgPSBjb3VudDtcbjEyNDA6XHRvdXRfdW5sb2NrOlxuMTI0MTpcdFx0ZHluYW1pY19uZXRjb25zb2xlX211dGV4X3VubG9jaygpO1xuMTI0MjpcdFx0cmV0dXJuIHJldDtcbjEyNDM6XHR9XG4xMjQ0Olx0XG4xMjQ1Olx0c3RhdGljIHNzaXplX3QgcmVtb3RlX2lwX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxuMTI0NjpcdFx0ICAgICAgIHNpemVfdCBjb3VudClcbjEyNDc6XHR7XG4xMjQ4Olx0XHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0pO1xuMTI0OTpcdFx0c3NpemVfdCByZXQgPSAtRUlOVkFMO1xuMTI1MDpcdFxuMTI1MTpcdFx0ZHluYW1pY19uZXRjb25zb2xlX211dGV4X2xvY2soKTtcbjEyNTI6XHRcdGlmIChudC1cdTAwM2VzdGF0ZSA9PSBTVEFURV9FTkFCTEVEKSB7XG4xMjUzOlx0XHRcdHByX2VycihcJiMzNDt0YXJnZXQgKCVzKSBpcyBlbmFibGVkLCBkaXNhYmxlIHRvIHVwZGF0ZSBwYXJhbWV0ZXJzXFxuXCYjMzQ7LFxuMTI1NDpcdFx0XHQgICAgICAgY29uZmlnX2l0ZW1fbmFtZShcdTAwMjZudC1cdTAwM2Vncm91cC5jZ19pdGVtKSk7XG4xMjU1Olx0XHRcdGdvdG8gb3V0X3VubG9jaztcbjEyNTY6XHRcdH1cbjEyNTc6XHRcbjEyNTg6XHRcdGlmIChuZXRwb2xsX3BhcnNlX2lwX2FkZHIoYnVmLCBcdTAwMjZudC1cdTAwM2VyZW1vdGVfaXApIFx1MDAzYyAwKVxuMTI1OTpcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NDk3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgSSYjMzk7bSByZWFkeSB0byBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBhIHN1bW1hcnkgZnJvbSBhIGZpcnN0LXBlcnNvbiwgZXhwZXJ0IHBlcnNwZWN0aXZlOgoKKipQaW5wb2ludGluZyB0aGUgU291cmNlKioKCkFscmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgZXN0YWJsaXNoIHRoZSBjb250ZXh0LiBUaGlzIGlzIGFib3V0IHJlZ2lzdHJhdGlvbiwgc28gdGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGlzICp3aGVyZSogYXJlIHRoZXNlIHRoaW5ncyByZWdpc3RlcmVkPyBXaGF0IHN5c3RlbXMsIGRhdGFiYXNlcywgb3IganVyaXNkaWN0aW9ucyBhcmUgd2UgdGFsa2luZyBhYm91dD8gVGhlIHNwZWNpZmljaXR5IG9mIHRoZSByZWdpc3RyYXRpb24gcHJvY2VzcyBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgbmV4dCBzdGVwcy4gV2l0aG91dCBrbm93aW5nIHRoZSByZWdpc3RyYXRpb24gYm9keSBvciBtZXRob2QsIGFueSBhbmFseXNpcyB3b3VsZCBiZSBpbmNvbXBsZXRlLiBMZXQmIzM5O3Mgc2VlIGlmIHRoYXQgZGV0YWlsIGlzIGFwcGFyZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdGU19BVFRSJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xNTQyPXN0YXRpYyBzc2l6ZV90IHN5c2RhdGFfY3B1X25yX2VuYWJsZWRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNTc0LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE1NzU6Q09ORklHRlNfQVRUUih1c2VyZGF0dW1fLCB2YWx1ZSk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTU3NjpDT05GSUdGU19BVFRSKHN5c2RhdGFfLCBjcHVfbnJfZW5hYmxlZCk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTU3NzpDT05GSUdGU19BVFRSKHN5c2RhdGFfLCB0YXNrbmFtZV9lbmFibGVkKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNTc4OkNPTkZJR0ZTX0FUVFIoc3lzZGF0YV8sIHJlbGVhc2VfZW5hYmxlZCk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTU3OTpDT05GSUdGU19BVFRSKHN5c2RhdGFfLCBtc2dpZF9lbmFibGVkKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNTgwLVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xNjUxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSB1c2VyZGF0YV90eXBlID0ge1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNjU3LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE2NTg6Q09ORklHRlNfQVRUUigsIGVuYWJsZWQpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE2NTk6Q09ORklHRlNfQVRUUigsIGV4dGVuZGVkKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNjYwOkNPTkZJR0ZTX0FUVFIoLCBkZXZfbmFtZSk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTY2MTpDT05GSUdGU19BVFRSKCwgbG9jYWxfcG9ydCk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTY2MjpDT05GSUdGU19BVFRSKCwgcmVtb3RlX3BvcnQpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE2NjM6Q09ORklHRlNfQVRUUigsIGxvY2FsX2lwKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNjY0OkNPTkZJR0ZTX0FUVFIoLCByZW1vdGVfaXApO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE2NjU6Q09ORklHRlNfQVRUUl9STygsIGxvY2FsX21hYyk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTY2NjpDT05GSUdGU19BVFRSKCwgcmVtb3RlX21hYyk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTY2NzpDT05GSUdGU19BVFRSKCwgcmVsZWFzZSk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTY2ODpDT05GSUdGU19BVFRSX1JPKCwgdHJhbnNtaXRfZXJyb3JzKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNjY5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzE5NwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldGNvbnNvbGUgQ29kZSBQYXRoKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBuZXRjb25zb2xlIGNvZGUgYW5kIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY3JpdGljYWwgZXhlY3V0aW9uIHBhdGguIEl0IGxvb2tzIGxpa2UgYGxvY2FsX2lwX3N0b3JlYCBhbmQgYHJlbW90ZV9pcF9zdG9yZWAgYXJlIGRlZmluaXRlbHkgZnVuY3Rpb24gcG9pbnRlcnMgdXRpbGl6ZWQgYnkgYENPTkZJR0ZTX0FUVFJgLCBhbmQgdGhleSBhcmVuJiMzOTt0IGlubGluZWQsIHdoaWNoIGlzIGhlbHBmdWwuIGBlbmFibGVkX3N0b3JlYCBpcyBhbm90aGVyIG5vbi1pbmxpbmVkIGZ1bmN0aW9uIHRvIGtlZXAgYW4gZXllIG9uLiBJbnRlcmVzdGluZywgYG5ldGNvbnNfbmV0cG9sbF9zZXR1cGAgZ2V0cyBjYWxsZWQgZnJvbSB3aXRoaW4gYGVuYWJsZWRfc3RvcmVgLgoKTm93IEkmIzM5O20gbG9va2luZyBmdXJ0aGVyIGRvd24gdGhlIGNhbGwgc3RhY2suIGBuZXRwb2xsX3NlbmRfdWRwYCBpcyBzdGF0aWMsIHdoaWNoIGNhbiBzb21ldGltZXMgYmUgYSByZWQgZmxhZywgYnV0IGl0IGFwcGVhcnMgdG8gYmUgYSBzaXplYWJsZSBmdW5jdGlvbi4gTGV0JiMzOTtzIHNlZS4uLiBgbmV0cG9sbF9zZW5kX3VkcGAgZ2V0cyBjYWxsZWQgZnJvbSBgc2VuZF91ZHBgLiBPa2F5LCBgc2VuZF91ZHBgIHRoZW4gZmVlZHMgaW50byBgd3JpdGVfZXh0X21zZ2AgYW5kIGB3cml0ZV9tc2dgLiBBaGEhIFRoZXNlIHR3byBmdW5jdGlvbnMsIGB3cml0ZV9leHRfbXNnYCBhbmQgYHdyaXRlX21zZ2AsIGFyZSByZWdpc3RlcmVkIHdpdGhpbiBgc3RydWN0IGNvbnNvbGUgbmV0Y29uc29sZV9leHRgIGFuZCBgc3RydWN0IGNvbnNvbGUgbmV0Y29uc29sZWAsIHJlc3BlY3RpdmVseS4gVGhhdOKAmXMgdGhlIGtleS4gVGhpcyBtYWtlcyBgd3JpdGVfZXh0X21zZ2AgYW5kIGB3cml0ZV9tc2dgIGV4Y2VsbGVudCBjYW5kaWRhdGVzIGZvciBkZWVwZXIgaW5zcGVjdGlvbiBhbmQgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7d3JpdGVfZXh0X21zZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NjgxCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuIE15IGZpcnN0IHRob3VnaHQgaXM6CgoqKkNoZWNraW5nIENvbnNvbGUgV3JpdGUgRnVuY3Rpb24gTm9tZW5jbGF0dXJlKioKCkhvbGQgb24gYSBzZWNvbmQsIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGlzIHByb2JsZW0sIEkgc2hvdWxkIGp1c3QgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGV4YWN0IG5hbWVzIG9mIHRoZSBjb25zb2xlIHdyaXRlIGZ1bmN0aW9ucy4gSSYjMzk7dmUgdXNlZCB0aGVtIGNvdW50bGVzcyB0aW1lcywgYnV0IGl0JiMzOTtzIGFsd2F5cyBnb29kIHRvIGhhdmUgYSBzcGVjaWZpYyBtZW1vcnkgdG8gcmVmZXIgdG8uIEkgZG9uJiMzOTt0IHdhbnQgdG8gZ2V0IHRyaXBwZWQgdXAgb24gc29tZXRoaW5nIHRyaXZpYWwgbGlrZSBhIGNhcGl0YWxpemF0aW9uIGlzc3VlIG9yIGEgc2xpZ2h0bHkgZGlmZmVyZW50IG5hbWluZyBjb252ZW50aW9uIHRoYXQgSSYjMzk7bSB1c2VkIHRvLiBCZXR0ZXIgdG8gY29uZmlybSB0aGUgc3ludGF4IGFuZCBiZSBjZXJ0YWluIG9mIHRoZSBmb3VuZGF0aW9uIGJlZm9yZSBidWlsZGluZyBhbnl0aGluZyBmdXJ0aGVyIG9uIHRvcCBvZiBpdC4gTGV0IG1lIGp1c3QgZ2xhbmNlIGF0IHRoZSByZWxldmFudCBkb2N1bWVudGF0aW9uIG9yIGFuIGV4YW1wbGUgc25pcHBldC4uLiB5ZXAsIGp1c3QgYSBxdWljayByZWZyZXNoZXIgdG8gbWFrZSBzdXJlIEkmIzM5O20gb24gdGhlIHJpZ2h0IHRyYWNrIG5hbWluZy13aXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgY29uc29sZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTEyPXN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbmV0Y29uc29sZV93cTtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTE3LSAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjExODpzdGF0aWMgc3RydWN0IGNvbnNvbGUgbmV0Y29uc29sZV9leHQsIG5ldGNvbnNvbGU7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTE5LVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yNDU5PXN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfd3JpdGUoc3RydWN0IG5iY29uX3dyaXRlX2NvbnRleHQgKndjdHh0LCBib29sIGV4dGVuZGVkKVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDg2LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI0ODc6c3RhdGljIHZvaWQgbmV0Y29uc29sZV93cml0ZV9leHQoc3RydWN0IGNvbnNvbGUgKmNvbiBfX2Fsd2F5c191bnVzZWQsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQ4OC1cdFx0XHRcdCBzdHJ1Y3QgbmJjb25fd3JpdGVfY29udGV4dCAqd2N0eHQpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0OTItXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjQ5MzpzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3dyaXRlX2Jhc2ljKHN0cnVjdCBjb25zb2xlICpjb24gX19hbHdheXNfdW51c2VkLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0OTQtXHRcdFx0XHQgICBzdHJ1Y3QgbmJjb25fd3JpdGVfY29udGV4dCAqd2N0eHQpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0OTgtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjQ5OTpzdGF0aWMgdm9pZCBuZXRjb25zb2xlX2RldmljZV9sb2NrKHN0cnVjdCBjb25zb2xlICpjb24gX19hbHdheXNfdW51c2VkLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI1MDAtXHRcdFx0XHQgICB1bnNpZ25lZCBsb25nICpmbGFncylcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yNTAxPV9fYWNxdWlyZXMoXHUwMDI2dGFyZ2V0X2xpc3RfbG9jaylcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjUwNS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNTA2OnN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfZGV2aWNlX3VubG9jayhzdHJ1Y3QgY29uc29sZSAqY29uIF9fYWx3YXlzX3VudXNlZCxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNTA3LVx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIGZsYWdzKVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yNjYzPXN0YXRpYyB2b2lkIGZyZWVfcGFyYW1fdGFyZ2V0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2NzQtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjY3NTpzdGF0aWMgc3RydWN0IGNvbnNvbGUgbmV0Y29uc29sZV9leHQgPSB7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjY3Ni1cdC5uYW1lID0gXCYjMzQ7bmV0Y29uX2V4dFwmIzM0Oyxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjY4My1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNjg0OnN0YXRpYyBzdHJ1Y3QgY29uc29sZSBuZXRjb25zb2xlID0ge1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2ODUtXHQubmFtZSA9IFwmIzM0O25ldGNvblwmIzM0OyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg0OTgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipVbnBhY2tpbmcgTmV0Y29uc29sZSBXcml0ZSBGdW5jdGlvbnMqKgoKUmlnaHQsIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGBuZXRjb25zb2xlX3dyaXRlX2V4dGAgYW5kIGBuZXRjb25zb2xlX3dyaXRlX2Jhc2ljYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBjYWxsIHN0YWNrLiBIYW5nIG9uLi4uIGlzbiYjMzk7dCBgbmV0Y29uc29sZV93cml0ZWAgdGhlIGNvcmUgZnVuY3Rpb24gdGhhdCBldmVudHVhbGx5IGdldHMgZG93biB0byBgc2VuZF91ZHBgPyBMZXQmIzM5O3MgcXVpY2tseSB2ZXJpZnkgdGhhdC4gR290dGEgbWFrZSBzdXJlIEkmIzM5O20gcmVtZW1iZXJpbmcgdGhlIGNvbnRyb2wgZmxvdyBjb3JyZWN0bHkgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIgZG93biB0aGlzIHJhYmJpdCBob2xlLiBJIHJlYWxseSB3YW50IHRvIGVuc3VyZSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9ja3MgaXMgc29saWQgYmVmb3JlIEkgc3RhcnQgbG9va2luZyBhdCB0aGUgbW9yZSBjb21wbGV4IGludGVyYWN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0Y29uc29sZV93cml0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjQzOD1zdGF0aWMgdm9pZCBzZW5kX21zZ191ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDUyLS8qKlxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI0NTM6ICogbmV0Y29uc29sZV93cml0ZSAtIEdlbmVyaWMgZnVuY3Rpb24gdG8gc2VuZCBhIG1zZyB0byBhbGwgdGFyZ2V0c1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0NTQtICogQHdjdHh0OiBuYmNvbiB3cml0ZSBjb250ZXh0XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0NTgtICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjQ1OTpzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3dyaXRlKHN0cnVjdCBuYmNvbl93cml0ZV9jb250ZXh0ICp3Y3R4dCwgYm9vbCBleHRlbmRlZClcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDYwLXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQ4Ni1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNDg3OnN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfd3JpdGVfZXh0KHN0cnVjdCBjb25zb2xlICpjb24gX19hbHdheXNfdW51c2VkLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0ODgtXHRcdFx0XHQgc3RydWN0IG5iY29uX3dyaXRlX2NvbnRleHQgKndjdHh0KVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0ODkte1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI0OTA6XHRuZXRjb25zb2xlX3dyaXRlKHdjdHh0LCB0cnVlKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDkxLX1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDkyLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI0OTM6c3RhdGljIHZvaWQgbmV0Y29uc29sZV93cml0ZV9iYXNpYyhzdHJ1Y3QgY29uc29sZSAqY29uIF9fYWx3YXlzX3VudXNlZCxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDk0LVx0XHRcdFx0ICAgc3RydWN0IG5iY29uX3dyaXRlX2NvbnRleHQgKndjdHh0KVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0OTUte1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI0OTY6XHRuZXRjb25zb2xlX3dyaXRlKHdjdHh0LCBmYWxzZSk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQ5Ny19XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI2NzU9c3RhdGljIHN0cnVjdCBjb25zb2xlIG5ldGNvbnNvbGVfZXh0ID0ge1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjc3LVx0LmZsYWdzID0gQ09OX0VOQUJMRUQgfCBDT05fRVhURU5ERUQgfCBDT05fTkJDT04gfCBDT05fTkJDT05fQVRPTUlDX1VOU0FGRSxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNjc4Olx0LndyaXRlX3RocmVhZCA9IG5ldGNvbnNvbGVfd3JpdGVfZXh0LFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI2Nzk6XHQud3JpdGVfYXRvbWljID0gbmV0Y29uc29sZV93cml0ZV9leHQsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjY4MC1cdC5kZXZpY2VfbG9jayA9IG5ldGNvbnNvbGVfZGV2aWNlX2xvY2ssXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI2ODQ9c3RhdGljIHN0cnVjdCBjb25zb2xlIG5ldGNvbnNvbGUgPSB7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2ODYtXHQuZmxhZ3MgPSBDT05fRU5BQkxFRCB8IENPTl9OQkNPTiB8IENPTl9OQkNPTl9BVE9NSUNfVU5TQUZFLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI2ODc6XHQud3JpdGVfdGhyZWFkID0gbmV0Y29uc29sZV93cml0ZV9iYXNpYyxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNjg4Olx0LndyaXRlX2F0b21pYyA9IG5ldGNvbnNvbGVfd3JpdGVfYmFzaWMsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjY4OS1cdC5kZXZpY2VfbG9jayA9IG5ldGNvbnNvbGVfZGV2aWNlX2xvY2ssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NDc2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV0Y29uc29sZSBDb2RlIFBhdGgqKgoKT2theSwgc28gSSYjMzk7bSB0cmFjaW5nIHRoZSBleGVjdXRpb24gcGF0aCBoZXJlIGZvciB0aGlzIG5ldGNvbnNvbGUgZnVuY3Rpb25hbGl0eS4gVGhlIGluaXRpYWwgZW50cnkgcG9pbnRzIGFyZSBgbmV0Y29uc29sZV93cml0ZV9leHRgIGFuZCBgbmV0Y29uc29sZV93cml0ZV9iYXNpY2AsIGJ1dCB0aGV5IGJvdGggZnVubmVsIGRvd24gdG8gYG5ldGNvbnNvbGVfd3JpdGVgLiBUaGF0IHRoZW4gY2FsbHMgYHNlbmRfbXNnX3VkcGAsIHdoaWNoIGluIHR1cm4gY2FsbHMgYHNlbmRfdWRwYCBhbmQgZmluYWxseSwgYG5ldHBvbGxfc2VuZF91ZHBgLiBUaGlzIGBuZXRwb2xsX3NlbmRfdWRwYCBmdW5jdGlvbiBpcyB0aGUgb25lIHRoZSBwYXRjaCBpcyBtb2RpZnlpbmcuIFRoZXJlZm9yZSwgdGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uLiBJdCBzZWVtcyBsaWtlIGEgZ29vZCBmb2N1cyBzeW1ib2wuCgpMZXQgbWUganVzdCBxdWlja2x5IHZlcmlmeSBpZiBgbmV0cG9sbF9zZW5kX3VkcGAgaXMgYW4gaW5saW5lIGZ1bmN0aW9uLiBBaCwgbm8sIGl0JiMzOTtzIGRlZmluZWQgYXMgYHN0YXRpYyBpbnQgbmV0cG9sbF9zZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csIGludCBsZW4pYCwgc28gaXQmIzM5O3Mgbm90IGlubGluZWQsIHdoaWNoIHNpbXBsaWZpZXMgdGhpbmdzIGEgYml0LgoKVGhlcmVmb3JlLCBteSBjb3JlIGZvY3VzIHN5bWJvbHMgZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiBhcmU6IGBsb2NhbF9pcF9zdG9yZWAsIGByZW1vdGVfaXBfc3RvcmVgLCBgZW5hYmxlZF9zdG9yZWAsIGBuZXRjb25zX25ldHBvbGxfc2V0dXBgLCBgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZWAgYW5kIGVzcGVjaWFsbHksIGBuZXRwb2xsX3NlbmRfdWRwYC4KCk5vdywgSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnM6IGBORVRDT05TT0xFYCwgYE5FVENPTlNPTEVfRFlOQU1JQ2AsIGBDT05GSUdGU19GU2AgYW5kIGBJUFY2YC4KCkkgc2hvdWxkIHByb2JhYmx5IGNvbmZpcm0gaW4gd2hpY2ggZmlsZSBgbmV0cG9sbF9zZW5kX3VkcGAgaXMgbG9jYXRlZCAtIGlzIGl0IGluIGBkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNgIG9yIGluIGBuZXQvY29yZS9uZXRwb2xsLmNgPyBXYWl0IGEgbWludXRlLCB0aGUgcGF0Y2ggaXRzZWxmIGlzIG1vZGlmeWluZyBgbmV0cG9sbF9zZW5kX3VkcGAgd2l0aGluIGBkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNgLiBSaWdodCwgSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoZSBwYXRjaCBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25ldHBvbGxfc2VuZF91ZHAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIxNDU9c3RhdGljIHZvaWQgcHVzaF9pcHY2KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxNjgtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjE2OTpzdGF0aWMgaW50IG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxNzAtXHRcdFx0ICAgIGludCBsZW4pXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMDYtLyoqXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjIwNzogKiBzZW5kX3VkcCAtIFdyYXBwZXIgZm9yIG5ldHBvbGxfc2VuZF91ZHAgdGhhdCBjb3VudHMgZXJyb3JzXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIwOC0gKiBAbnQ6IHRhcmdldCB0byBzZW5kIG1lc3NhZ2UgdG9cbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIxMS0gKlxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIyMTI6ICogQ2FsbHMgbmV0cG9sbF9zZW5kX3VkcCBhbmQgY2xhc3NpZmllcyB0aGUgcmV0dXJuIHZhbHVlLiBJZiBhbiBlcnJvclxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMTMtICogb2NjdXJyZWQgaXQgaW5jcmVtZW50cyBzdGF0aXN0aWNzIGluIG50LVx1MDAzZXN0YXRzIGFjY29yZGluZ2x5LlxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIyMTQ6ICogT25seSBjYWxscyBuZXRwb2xsX3NlbmRfdWRwIGlmIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMgaXMgZGlzYWJsZWQuXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIxNS0gKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yMjE2PXN0YXRpYyB2b2lkIHNlbmRfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNvbnN0IGNoYXIgKm1zZywgaW50IGxlbilcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjE3LXtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMjE4Olx0aW50IHJlc3VsdCA9IG5ldHBvbGxfc2VuZF91ZHAobnQsIG1zZywgbGVuKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjE5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDYxNAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkFuYWx5emluZyBLZXJuZWwgTmV0d29yayBDb25zb2xlIENoYW5nZXMqKgoKQWxyaWdodCwgc28gdGhlIGNsdWUgaXMgcG9pbnRpbmcgbWUgZGlyZWN0bHkgdG8gYGRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgbmV0d29yayBjb25zb2xlIGltcGxlbWVudGF0aW9uLiBJIGZpZ3VyZWQgaXQgd291bGQgYmUgc29tZXdoZXJlIGluIHRoZSBuZXR3b3JrIGNvZGUsIGJ1dCB0aGlzIGNvbmZpcm1zIHRoZSBzcGVjaWZpYyBmaWxlLgoKV2FpdCBhIHNlY29uZC4uLiB0aGUgcGF0Y2ggaXNuJiMzOTt0ICpqdXN0KiB0b3VjaGluZyBgbmV0Y29uc29sZS5jYC4gSXQmIzM5O3MgYWxzbyBtb2RpZnlpbmcgYG5ldHBvbGxfcGFyc2VfaXBfYWRkcmAuIFRoYXQmIzM5O3MgaW1wb3J0YW50LiBJIG5lZWQgdG8gYmUgY2FyZWZ1bCBub3QgdG8gbWlzcyBhbnkgaW5kaXJlY3QgZGVwZW5kZW5jaWVzIG9yIHNpZGUgZWZmZWN0cyByZWxhdGVkIHRvIElQIGFkZHJlc3MgcGFyc2luZyB3aXRoaW4gdGhpcyBjb250ZXh0LiBJJiMzOTtsbCBhZGQgYG5ldHBvbGxfcGFyc2VfaXBfYWRkcmAgdG8gbXkgbGlzdCBvZiBmb2N1cyBzeW1ib2xzLiBJdCYjMzk7cyBhIGtleSBwYXJ0IG9mIHRoZSBwdXp6bGUuIEkgY2FuJiMzOTt0IGFmZm9yZCB0byBvdmVybG9vayB0aGF0IGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRwb2xsX3BhcnNlX2lwX2FkZHImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTcxMj1zdGF0aWMgdm9pZCBuZXRjb25zb2xlX3ByaW50X2Jhbm5lcihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy03MzctICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NzM4OnN0YXRpYyBpbnQgbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGNvbnN0IGNoYXIgKnN0ciwgc3RydWN0IGluZXRfYWRkciAqYWRkcilcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy03Mzkte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xMjIzPXN0YXRpYyBzc2l6ZV90IGxvY2FsX2lwX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMjM1LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEyMzY6XHRpZiAobmV0cG9sbF9wYXJzZV9pcF9hZGRyKGJ1ZiwgXHUwMDI2bnQtXHUwMDNlbG9jYWxfaXApIFx1MDAzYyAwKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEyMzctXHRcdGdvdG8gb3V0X3VubG9jaztcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTI0NT1zdGF0aWMgc3NpemVfdCByZW1vdGVfaXBfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEyNTctXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTI1ODpcdGlmIChuZXRwb2xsX3BhcnNlX2lwX2FkZHIoYnVmLCBcdTAwMjZudC1cdTAwM2VyZW1vdGVfaXApIFx1MDAzYyAwKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEyNTktXHRcdGdvdG8gb3V0X3VubG9jaztcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjUxMz1zdGF0aWMgaW50IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY2hhciAqb3B0KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNTM0LVx0XHQqZGVsaW0gPSAwO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI1MzU6XHRcdGlmIChuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY3VyLCBcdTAwMjZudC1cdTAwM2Vsb2NhbF9pcCkgXHUwMDNjIDApXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjUzNi1cdFx0XHRnb3RvIHBhcnNlX2ZhaWxlZDtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjU3Ny1cdCpkZWxpbSA9IDA7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjU3ODpcdGlmIChuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY3VyLCBcdTAwMjZudC1cdTAwM2VyZW1vdGVfaXApIFx1MDAzYyAwKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI1NzktXHRcdGdvdG8gcGFyc2VfZmFpbGVkO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTQzOQoJCQkJCQkJb3V0cHV0OiAyMzQKCQkJCQkJCXRob3VnaHRzOiAzMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgUHJpb3JpdGl6YXRpb246IEFuYWx5emluZyBhIEtlcm5lbCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQsIHJpZ2h0IG9mZiB0aGUgYmF0LCBgbmV0cG9sbF9wYXJzZV9pcF9hZGRyYCBqdW1wcyBvdXQgYXQgbWUuIEl0JiMzOTtzIHN0YXRpYywgd2hpY2ggaXMgdXN1YWxseSBhIHNpZ24gdGhhdCBpdOKAmXMgaXNvbGF0ZWQsIGJ1dCBpdCYjMzk7cyBiZWluZyBjYWxsZWQgZnJvbSAqbXVsdGlwbGUqIGxvY2F0aW9ucy4gVGhhdCBtYWtlcyBpdCBhIHNvbGlkIGZvY3VzIHN5bWJvbCBmb3IgZnV6emluZy4KCkxldCYjMzk7cyBicmVhayBkb3duIHRoZSBjaGFuZ2VzLiBUaGUgcGF0Y2ggaXMgcmVmaW5pbmcgaG93IGBuZXRjb25zb2xlYCBtYW5hZ2VzIElQIGFkZHJlc3MgZmFtaWxpZXMuIEluc3RlYWQgb2YganVzdCBhIHNpbmdsZSBgaXB2NmAgZmxhZywgaXQmIzM5O3Mgbm93IHRyYWNraW5nIHRoZSBhZGRyZXNzIGZhbWlseSAoQUZfSU5FVCwgQUZfSU5FVDYsIG9yIEFGX1VOU1BFQykgc2VwYXJhdGVseSBmb3IgbG9jYWwgYW5kIHJlbW90ZSBJUHMuIFRoaXMgaW1wcm92ZXMgSVAgYWRkcmVzcyB2YWxpZGF0aW9uIGFuZCBoYW5kbGluZyB3aGljaCBpcyBhbHdheXMgYSBnb29kIHRoaW5nIHRvIHNlZSBpbiBuZXR3b3JrIGNvZGUuCgpUaGUgY2hhbmdlcyBhcmUgd2l0aGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgc3BlY2lmaWNhbGx5IHRoZSBgbmV0Y29uc29sZWAgc3Vic3lzdGVtLCB3aGljaCBpcyBnb29kLiBXZSBjYW4gdHJpZ2dlciB0aGlzIHRocm91Z2ggYGNvbmZpZ2ZzYCBvciBrZXJuZWwgY29tbWFuZC1saW5lIHBhcmFtZXRlcnMsIGluY3JlYXNpbmcgdGhlIG9kZHMgb2YgYWN0dWFsbHkgZXhlcmNpc2luZyB0aGUgY29kZS4gRGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLCBiYXNlZCBvbiB0aGlzLgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBrZXkgc3ltYm9scyBJIG5lZWQgdG8gdGFyZ2V0OgoKKiAgIGBsb2NhbF9pcF9zdG9yZWAKKiAgIGByZW1vdGVfaXBfc3RvcmVgCiogICBgZW5hYmxlZF9zdG9yZWAKKiAgIGBuZXRjb25zX25ldHBvbGxfc2V0dXBgCiogICBgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZWAKKiAgIGBuZXRwb2xsX3NlbmRfdWRwYAoqICAgQW5kIG9mIGNvdXJzZSwgdGhhdCBjcnVjaWFsIGBuZXRwb2xsX3BhcnNlX2lwX2FkZHJgCgpXZSBhbHNvIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSByaWdodCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBzZXQgZm9yIHRoaXMuIFdlJiMzOTtyZSBsb29raW5nIGF0OgoKKiAgIGBORVRDT05TT0xFYCAtIG9idmlvdXNseSwgd2Ugd2FudCB0aGF0LgoqICAgYE5FVENPTlNPTEVfRFlOQU1JQ2AgLSBXZSBuZWVkIHRvIGJlIGNhcmVmdWwgd2l0aCB0aGlzIG9uZS4KKiAgIGBDT05GSUdGU19GU2AgLSBUaGlzIG9uZSBpcyBpbXBvcnRhbnQgdG8gY292ZXIuCiogICBgSVBWNmAgLSBXZSBuZWVkIHRvIGVuc3VyZSB3ZSBjb3ZlciB0aGF0IHRvbywgc2luY2Ugd2UmIzM5O3JlIGhhbmRsaW5nIElQIGFkZHJlc3MgZmFtaWxpZXMuCgpPa2F5LCBhIHF1aWNrIGNoZWNrIG9uIHRoZSBkZXBlbmRlbmNpZXMuIGBORVRDT05TT0xFX0RZTkFNSUNgIGRlcGVuZHMgb24gYFNZU0ZTYCwgd2hpY2ggaXMgYWxtb3N0IGFsd2F5cyBlbmFibGVkLCBidXQgbGV0JiMzOTtzIG1ha2Ugc3VyZS4gQ29uZmlybWVkLiBXZSBhbHNvIG5lZWQgdG8gZW5hYmxlIGBDT05GSUdGU19GU2AsIHNpbmNlIGl0JiMzOTtzIHRyaXN0YXRlLiBBbmQgYElQVjZgIHNob3VsZCBiZSBlbmFibGVkLCBzaW5jZSBpdCYjMzk7cyBhIGJvb2xlYW4uCgpBbHJpZ2h0LCBJIHRoaW5rIEkgaGF2ZSBldmVyeXRoaW5nLiBUaW1lIHRvIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRDT05TT0xFJiMzNDssCiAgICAmIzM0O05FVENPTlNPTEVfRFlOQU1JQyYjMzQ7LAogICAgJiMzNDtDT05GSUdGU19GUyYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bG9jYWxfaXBfc3RvcmUmIzM0OywKICAgICYjMzQ7cmVtb3RlX2lwX3N0b3JlJiMzNDssCiAgICAmIzM0O2VuYWJsZWRfc3RvcmUmIzM0OywKICAgICYjMzQ7bmV0Y29uc19uZXRwb2xsX3NldHVwJiMzNDssCiAgICAmIzM0O25ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUmIzM0OywKICAgICYjMzQ7bmV0cG9sbF9zZW5kX3VkcCYjMzQ7LAogICAgJiMzNDtuZXRwb2xsX3BhcnNlX2lwX2FkZHImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG5ldGNvbnNvbGUgZHJpdmVyIHRvIHRyYWNrIHRoZSBJUCBhZGRyZXNzIGZhbWlseSAoQUZfSU5FVCwgQUZfSU5FVDYsIEFGX1VOU1BFQykgaW5kZXBlbmRlbnRseSBmb3IgbG9jYWwgYW5kIHJlbW90ZSBJUCBhZGRyZXNzZXMsIHJlcGxhY2luZyBhIHNpbmdsZSBgaXB2NmAgYm9vbGVhbiBmbGFnLiBUaGlzIGNoYW5nZXMgaG93IElQIGFkZHJlc3NlcyBhcmUgcGFyc2VkLCB2YWxpZGF0ZWQsIGFuZCB1c2VkIGR1cmluZyBuZXRjb25zb2xlIHNldHVwIGFuZCBtZXNzYWdlIHRyYW5zbWlzc2lvbi4gVGhlIG1vZGlmaWVkIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSB0aGUgbmV0Y29uc29sZSBjb25maWdmcyBpbnRlcmZhY2UgKHdoaWNoIGFsbG93cyBkeW5hbWljIHJlY29uZmlndXJhdGlvbiBvZiB0YXJnZXRzKSBhbmQgZHVyaW5nIG1vZHVsZSBpbml0aWFsaXphdGlvbiB2aWEga2VybmVsIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXJzLiBTaW5jZSB0aGlzIGFmZmVjdHMgY29yZSBrZXJuZWwgbG9nZ2luZyBmdW5jdGlvbmFsaXR5IGFuZCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGNvbmZpZ2ZzLCBpdCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRDT05TT0xFJiMzNDssCiAgICAmIzM0O05FVENPTlNPTEVfRFlOQU1JQyYjMzQ7LAogICAgJiMzNDtDT05GSUdGU19GUyYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bG9jYWxfaXBfc3RvcmUmIzM0OywKICAgICYjMzQ7cmVtb3RlX2lwX3N0b3JlJiMzNDssCiAgICAmIzM0O2VuYWJsZWRfc3RvcmUmIzM0OywKICAgICYjMzQ7bmV0Y29uc19uZXRwb2xsX3NldHVwJiMzNDssCiAgICAmIzM0O25ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUmIzM0OywKICAgICYjMzQ7bmV0cG9sbF9zZW5kX3VkcCYjMzQ7LAogICAgJiMzNDtuZXRwb2xsX3BhcnNlX2lwX2FkZHImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG5ldGNvbnNvbGUgZHJpdmVyIHRvIHRyYWNrIHRoZSBJUCBhZGRyZXNzIGZhbWlseSAoQUZfSU5FVCwgQUZfSU5FVDYsIEFGX1VOU1BFQykgaW5kZXBlbmRlbnRseSBmb3IgbG9jYWwgYW5kIHJlbW90ZSBJUCBhZGRyZXNzZXMsIHJlcGxhY2luZyBhIHNpbmdsZSBgaXB2NmAgYm9vbGVhbiBmbGFnLiBUaGlzIGNoYW5nZXMgaG93IElQIGFkZHJlc3NlcyBhcmUgcGFyc2VkLCB2YWxpZGF0ZWQsIGFuZCB1c2VkIGR1cmluZyBuZXRjb25zb2xlIHNldHVwIGFuZCBtZXNzYWdlIHRyYW5zbWlzc2lvbi4gVGhlIG1vZGlmaWVkIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSB0aGUgbmV0Y29uc29sZSBjb25maWdmcyBpbnRlcmZhY2UgKHdoaWNoIGFsbG93cyBkeW5hbWljIHJlY29uZmlndXJhdGlvbiBvZiB0YXJnZXRzKSBhbmQgZHVyaW5nIG1vZHVsZSBpbml0aWFsaXphdGlvbiB2aWEga2VybmVsIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXJzLiBTaW5jZSB0aGlzIGFmZmVjdHMgY29yZSBrZXJuZWwgbG9nZ2luZyBmdW5jdGlvbmFsaXR5IGFuZCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGNvbmZpZ2ZzLCBpdCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTo0MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjQwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBob3cgSVAgYWRkcmVzc2VzIGFyZSBzdG9yZWQgYW5kIHBhcnNlZCBpbiB0aGUgbmV0Y29uc29sZSBkcml2ZXIgYnkgcmVwbGFjaW5nIGEgYHVuaW9uIGluZXRfYWRkcmAgYW5kIGEgYm9vbGVhbiBgaXB2NmAgZmxhZyB3aXRoIGEgbmV3IGBzdHJ1Y3QgaW5ldF9hZGRyYCB0aGF0IGV4cGxpY2l0bHkgdHJhY2tzIHRoZSBhZGRyZXNzIGZhbWlseSAoYEFGX1VOU1BFQ2AsIGBBRl9JTkVUYCwgb3IgYEFGX0lORVQ2YCkuIFRoZSBgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0YCBjb250YWluaW5nIHRoZXNlIGFkZHJlc3NlcyBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqYCAod2hpY2ggemVyby1pbml0aWFsaXplcyB0aGUgbWVtb3J5KSwgZW5zdXJpbmcgdGhhdCB0aGUgbmV3IGBmYW1pbHlgIGZpZWxkIGRlZmF1bHRzIHRvIGBBRl9VTlNQRUNgIGFuZCB0aGUgSVAgYWRkcmVzc2VzIGFyZSB6ZXJvZWQuIFRoZSBJUCBhZGRyZXNzZXMgYXJlIG9ubHkgZXhwb3NlZCB0byB1c2Vyc3BhY2UgdmlhIGNvbmZpZ2ZzIGBzaG93YCBmdW5jdGlvbnMsIHdoaWNoIGZvcm1hdCB0aGVtIGFzIHN0cmluZ3MgdXNpbmcgYHN5c2ZzX2VtaXRgLCBwcmV2ZW50aW5nIGFueSBwb3RlbnRpYWwgbGVha2FnZSBvZiBwYWRkaW5nIGJ5dGVzLiBXaGVuIGNvbnN0cnVjdGluZyBuZXR3b3JrIHBhY2tldHMsIG9ubHkgdGhlIGV4YWN0IElQdjQgKDQgYnl0ZXMpIG9yIElQdjYgKDE2IGJ5dGVzKSBhZGRyZXNzIGZpZWxkcyBhcmUgY29waWVkIGludG8gdGhlIElQIGhlYWRlcnMsIGFnYWluIGF2b2lkaW5nIGFueSBwYWRkaW5nIGxlYWtzLiBUaGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBubyBzdHJ1Y3R1cmVzIGNvcGllZCBkaXJlY3RseSB0byB1c2Vyc3BhY2UsIGFuZCBubyBjb250cm9sIGZsb3cgY2hhbmdlcyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGJ1Z3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMGY2MTMwNWUxNmUyZmFkNGJmYWUxNWMwNmI1MDJjMmMyMDA2ZTlmOQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDEwIDE5OjM4OjIxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jIGIvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jCmluZGV4IDAzOTEzMzAyMzI4Y2MuLjgxMGRlZDZlNDhmMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMKQEAgLTE1MSw2ICYjNDM7MTUxLDE1IEBAIGVudW0gdGFyZ2V0X3N0YXRlIHsKIAlTVEFURV9ERUFDVElWQVRFRCwKIH07CiAKJiM0MztzdHJ1Y3QgaW5ldF9hZGRyIHsKJiM0MzsJLyogQWRkcmVzcyBmYW1pbHk6IEFGX1VOU1BFQyB3aGVuIHVuc2V0LCBlbHNlIEFGX0lORVQgb3IgQUZfSU5FVDYgKi8KJiM0MzsJdTgJCQlmYW1pbHk7CiYjNDM7CXVuaW9uIHsKJiM0MzsJCV9fYmUzMgkJaXA7CiYjNDM7CQlzdHJ1Y3QgaW42X2FkZHIJaW42OwomIzQzOwl9OwomIzQzO307CiYjNDM7CiAvKioKICAqIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAtIFJlcHJlc2VudHMgYSBjb25maWd1cmVkIG5ldGNvbnNvbGUgdGFyZ2V0LgogICogQGxpc3Q6CUxpbmtzIHRoaXMgdGFyZ2V0IGludG8gdGhlIHRhcmdldF9saXN0LgpAQCAtMTgxLDcgJiM0MzsxOTAsNiBAQCBlbnVtIHRhcmdldF9zdGF0ZSB7CiAgKgkJbG9jYWxfbWFjCShyZWFkLW9ubHkpCiAgKiBAbG9jYWxfaXA6CVNvdXJjZSBJUCBhZGRyZXNzIG9mIHRoZSB0YXJnZXQgKHJlYWQtd3JpdGUpLgogICogQHJlbW90ZV9pcDoJRGVzdGluYXRpb24gSVAgYWRkcmVzcyBvZiB0aGUgdGFyZ2V0IChyZWFkLXdyaXRlKS4KLSAqIEBpcHY2OglXaGV0aGVyIHRoZSB0YXJnZXQgYWRkcmVzc2VzIGFyZSBJUHY2IChyZWFkLXdyaXRlKS4KICAqIEBsb2NhbF9wb3J0OglTb3VyY2UgVURQIHBvcnQgb2YgdGhlIHRhcmdldCAocmVhZC13cml0ZSkuCiAgKiBAcmVtb3RlX3BvcnQ6IERlc3RpbmF0aW9uIFVEUCBwb3J0IG9mIHRoZSB0YXJnZXQgKHJlYWQtd3JpdGUpLgogICogQHJlbW90ZV9tYWM6CURlc3RpbmF0aW9uIGV0aGVybmV0IGFkZHJlc3Mgb2YgdGhlIHRhcmdldCAocmVhZC13cml0ZSkuCkBAIC0yMTIsOCAmIzQzOzIyMCw3IEBAIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCB7CiAJYm9vbAkJCWV4dGVuZGVkOwogCWJvb2wJCQlyZWxlYXNlOwogCXN0cnVjdCBuZXRwb2xsCQlucDsKLQl1bmlvbiBpbmV0X2FkZHIJCWxvY2FsX2lwLCByZW1vdGVfaXA7Ci0JYm9vbAkJCWlwdjY7CiYjNDM7CXN0cnVjdCBpbmV0X2FkZHIJbG9jYWxfaXAsIHJlbW90ZV9pcDsKIAl1MTYJCQlsb2NhbF9wb3J0LCByZW1vdGVfcG9ydDsKIAl1OAkJCXJlbW90ZV9tYWNbRVRIX0FMRU5dOwogCS8qIHByb3RlY3RlZCBieSB0YXJnZXRfbGlzdF9sb2NrOyAmIzQzOzEgZ2l2ZXMgc2NucHJpbnRmKCkgcm9vbSBmb3IgaXRzCkBAIC00MTUsNiAmIzQzOzQyMiw3IEBAIHN0YXRpYyBpbnQgbmV0Y29uc190YWtlX2lwdjYoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwKIAkJCQljb250aW51ZTsKIAkJCS8qIEdvdCB0aGUgSVAsIGxldCYjMzk7cyByZXR1cm4gKi8KIAkJCW50LSZndDtsb2NhbF9pcC5pbjYgPSBpZnAtJmd0O2FkZHI7CiYjNDM7CQkJbnQtJmd0O2xvY2FsX2lwLmZhbWlseSA9IEFGX0lORVQ2OwogCQkJZXJyID0gMDsKIAkJCWJyZWFrOwogCQl9CkBAIC00NTYsMjggJiM0Mzs0NjQsMTIgQEAgc3RhdGljIGludCBuZXRjb25zX3Rha2VfaXB2NChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LAogCX0KIAogCW50LSZndDtsb2NhbF9pcC5pcCA9IGlmYS0mZ3Q7aWZhX2xvY2FsOwomIzQzOwludC0mZ3Q7bG9jYWxfaXAuZmFtaWx5ID0gQUZfSU5FVDsKIAlucF9pbmZvKG5wLCAmIzM0O2xvY2FsIElQICVwSTRcbiYjMzQ7LCAmYW1wO250LSZndDtsb2NhbF9pcC5pcCk7CiAKIAlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIFRlc3Qgd2hldGhlciB0aGUgY2FsbGVyIGxlZnQgbnQtJmd0O2xvY2FsX2lwIHVuc2V0LCBzbyB0aGF0Ci0gKiBuZXRjb25zX25ldHBvbGxfc2V0dXAoKSBzaG91bGQgYXV0by1wb3B1bGF0ZSBpdCBmcm9tIHRoZSBlZ3Jlc3MgZGV2aWNlLgotICoKLSAqIG50LSZndDtsb2NhbF9pcCBpcyBhIHVuaW9uIG9mIF9fYmUzMiAoSVB2NCkgYW5kIHN0cnVjdCBpbjZfYWRkciAoSVB2NiksCi0gKiBzbyBhbiBJUHY2IGFkZHJlc3Mgd2hvc2UgZmlyc3QgNCBieXRlcyBhcmUgemVybyAoZS5nLiA6OjEsIDo6MiwKLSAqIElQdjQtbWFwcGVkIDo6ZmZmZjphLmIuYy5kKSBtdXN0IG5vdCBiZSB0ZXN0ZWQgdmlhIHRoZSBJUHY0IGFybSDigJQKLSAqIGRvaW5nIHNvIHdvdWxkIG1pc2NsYXNzaWZ5IGEgY2FsbGVyLXN1cHBsaWVkIGFkZHJlc3MgYXMgdW5zZXQgYW5kCi0gKiBzaWxlbnRseSBvdmVyd3JpdGUgaXQgd2l0aCB3aGF0ZXZlciBhZGRyZXNzIHRoZSBkZXZpY2UgZXhwb3Nlcy4KLSAqLwotc3RhdGljIGJvb2wgbmV0Y29uc19sb2NhbF9pcF91bnNldChjb25zdCBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KQotewotCWlmIChudC0mZ3Q7aXB2NikKLQkJcmV0dXJuIGlwdjZfYWRkcl9hbnkoJmFtcDtudC0mZ3Q7bG9jYWxfaXAuaW42KTsKLQlyZXR1cm4gIW50LSZndDtsb2NhbF9pcC5pcDsKLX0KLQogc3RhdGljIGludCBuZXRjb25zX25ldHBvbGxfc2V0dXAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCkKIHsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBjdXJyZW50LSZndDtuc3Byb3h5LSZndDtuZXRfbnM7CkBAIC00ODcsNiAmIzQzOzQ3OSwxNyBAQCBzdGF0aWMgaW50IG5ldGNvbnNfbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KQogCWJvb2wgaXBfb3ZlcndyaXR0ZW4gPSBmYWxzZTsKIAlpbnQgZXJyOwogCiYjNDM7CWlmIChudC0mZ3Q7cmVtb3RlX2lwLmZhbWlseSA9PSBBRl9VTlNQRUMpIHsKJiM0MzsJCW5wX2VycihucCwgJiMzNDtyZW1vdGUgSVAgYWRkcmVzcyBub3QgY29uZmlndXJlZCwgYWJvcnRpbmdcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRURFU1RBRERSUkVROwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChudC0mZ3Q7bG9jYWxfaXAuZmFtaWx5ICE9IEFGX1VOU1BFQyAmYW1wOyZhbXA7CiYjNDM7CSAgICBudC0mZ3Q7bG9jYWxfaXAuZmFtaWx5ICE9IG50LSZndDtyZW1vdGVfaXAuZmFtaWx5KSB7CiYjNDM7CQlucF9lcnIobnAsICYjMzQ7bG9jYWwgYW5kIHJlbW90ZSBJUCBhZGRyZXNzIGZhbWlsaWVzIGRpZmZlciwgYWJvcnRpbmdcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiAJcnRubF9sb2NrKCk7CiAJaWYgKG5wLSZndDtkZXZfbmFtZVswXSkKIAkJbmRldiA9IF9fZGV2X2dldF9ieV9uYW1lKG5ldCwgbnAtJmd0O2Rldl9uYW1lKTsKQEAgLTUyMywxNiAmIzQzOzUyNiwxMyBAQCBzdGF0aWMgaW50IG5ldGNvbnNfbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KQogCQlydG5sX2xvY2soKTsKIAl9CiAKLQlpZiAobmV0Y29uc19sb2NhbF9pcF91bnNldChudCkpIHsKLQkJaWYgKCFudC0mZ3Q7aXB2NikgewotCQkJZXJyID0gbmV0Y29uc190YWtlX2lwdjQobnQsIG5kZXYpOwotCQkJaWYgKGVycikKLQkJCQlnb3RvIHB1dDsKLQkJfSBlbHNlIHsKJiM0MzsJaWYgKG50LSZndDtsb2NhbF9pcC5mYW1pbHkgPT0gQUZfVU5TUEVDKSB7CiYjNDM7CQlpZiAobnQtJmd0O3JlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpCiAJCQllcnIgPSBuZXRjb25zX3Rha2VfaXB2NihudCwgbmRldik7Ci0JCQlpZiAoZXJyKQotCQkJCWdvdG8gcHV0OwotCQl9CiYjNDM7CQllbHNlCiYjNDM7CQkJZXJyID0gbmV0Y29uc190YWtlX2lwdjQobnQsIG5kZXYpOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlnb3RvIHB1dDsKIAkJaXBfb3ZlcndyaXR0ZW4gPSB0cnVlOwogCX0KIApAQCAtNzE0LDI0ICYjNDM7NzE0LDI4IEBAIHN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfcHJpbnRfYmFubmVyKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpCiAJc3RydWN0IG5ldHBvbGwgKm5wID0gJmFtcDtudC0mZ3Q7bnA7CiAKIAlucF9pbmZvKG5wLCAmIzM0O2xvY2FsIHBvcnQgJWRcbiYjMzQ7LCBudC0mZ3Q7bG9jYWxfcG9ydCk7Ci0JaWYgKG50LSZndDtpcHY2KQomIzQzOwlpZiAobnQtJmd0O2xvY2FsX2lwLmZhbWlseSA9PSBBRl9VTlNQRUMpCiYjNDM7CQlucF9pbmZvKG5wLCAmIzM0O2xvY2FsIElQIHVuc2V0XG4mIzM0Oyk7CiYjNDM7CWVsc2UgaWYgKG50LSZndDtsb2NhbF9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpCiAJCW5wX2luZm8obnAsICYjMzQ7bG9jYWwgSVB2NiBhZGRyZXNzICVwSTZjXG4mIzM0OywgJmFtcDtudC0mZ3Q7bG9jYWxfaXAuaW42KTsKIAllbHNlCiAJCW5wX2luZm8obnAsICYjMzQ7bG9jYWwgSVB2NCBhZGRyZXNzICVwSTRcbiYjMzQ7LCAmYW1wO250LSZndDtsb2NhbF9pcC5pcCk7CiAJbnBfaW5mbyhucCwgJiMzNDtpbnRlcmZhY2UgbmFtZSAmIzM5OyVzJiMzOTtcbiYjMzQ7LCBucC0mZ3Q7ZGV2X25hbWUpOwogCW5wX2luZm8obnAsICYjMzQ7bG9jYWwgZXRoZXJuZXQgYWRkcmVzcyAmIzM5OyVwTSYjMzk7XG4mIzM0OywgbnAtJmd0O2Rldl9tYWMpOwogCW5wX2luZm8obnAsICYjMzQ7cmVtb3RlIHBvcnQgJWRcbiYjMzQ7LCBudC0mZ3Q7cmVtb3RlX3BvcnQpOwotCWlmIChudC0mZ3Q7aXB2NikKJiM0MzsJaWYgKG50LSZndDtyZW1vdGVfaXAuZmFtaWx5ID09IEFGX1VOU1BFQykKJiM0MzsJCW5wX2luZm8obnAsICYjMzQ7cmVtb3RlIElQIHVuc2V0XG4mIzM0Oyk7CiYjNDM7CWVsc2UgaWYgKG50LSZndDtyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KQogCQlucF9pbmZvKG5wLCAmIzM0O3JlbW90ZSBJUHY2IGFkZHJlc3MgJXBJNmNcbiYjMzQ7LCAmYW1wO250LSZndDtyZW1vdGVfaXAuaW42KTsKIAllbHNlCiAJCW5wX2luZm8obnAsICYjMzQ7cmVtb3RlIElQdjQgYWRkcmVzcyAlcEk0XG4mIzM0OywgJmFtcDtudC0mZ3Q7cmVtb3RlX2lwLmlwKTsKIAlucF9pbmZvKG5wLCAmIzM0O3JlbW90ZSBldGhlcm5ldCBhZGRyZXNzICVwTVxuJiMzNDssIG50LSZndDtyZW1vdGVfbWFjKTsKIH0KIAotLyogUGFyc2UgdGhlIHN0cmluZyBhbmQgcG9wdWxhdGUgdGhlIGBpbmV0X2FkZHJgIHVuaW9uLiBSZXR1cm4gMCBpZiBJUHY0IGlzCi0gKiBwb3B1bGF0ZWQsIDEgaWYgSVB2NiBpcyBwb3B1bGF0ZWQsIGFuZCAtMSB1cG9uIGZhaWx1cmUuCiYjNDM7LyogUGFyc2UgdGhlIHN0cmluZyBhbmQgcG9wdWxhdGUgdGhlIGBpbmV0X2FkZHJgIHN0cnVjdC4gUmV0dXJuIDAgb24gc3VjY2VzcwomIzQzOyAqIGFuZCAtMSB1cG9uIGZhaWx1cmUuCiAgKi8KLXN0YXRpYyBpbnQgbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGNvbnN0IGNoYXIgKnN0ciwgdW5pb24gaW5ldF9hZGRyICphZGRyKQomIzQzO3N0YXRpYyBpbnQgbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGNvbnN0IGNoYXIgKnN0ciwgc3RydWN0IGluZXRfYWRkciAqYWRkcikKIHsKIAljb25zdCBjaGFyICplbmQgPSBOVUxMOwogCWludCBsZW47CkBAIC03NDMsMTQgJiM0Mzs3NDcsMTggQEAgc3RhdGljIGludCBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY29uc3QgY2hhciAqc3RyLCB1bmlvbiBpbmV0X2FkZHIgKmFkZHIpCiAJaWYgKHN0cltsZW4gLSAxXSA9PSAmIzM5O1xuJiMzOTspCiAJCWxlbiAtPSAxOwogCi0JaWYgKGluNF9wdG9uKHN0ciwgbGVuLCAodm9pZCAqKWFkZHIsIC0xLCAmYW1wO2VuZCkgJmd0OyAwICZhbXA7JmFtcDsKLQkgICAgKCFlbmQgfHwgKmVuZCA9PSAwIHx8ICplbmQgPT0gJiMzOTtcbiYjMzk7KSkKJiM0MzsJaWYgKGluNF9wdG9uKHN0ciwgbGVuLCAodm9pZCAqKSZhbXA7YWRkci0mZ3Q7aXAsIC0xLCAmYW1wO2VuZCkgJmd0OyAwICZhbXA7JmFtcDsKJiM0MzsJICAgICghZW5kIHx8ICplbmQgPT0gMCB8fCAqZW5kID09ICYjMzk7XG4mIzM5OykpIHsKJiM0MzsJCWFkZHItJmd0O2ZhbWlseSA9IEFGX0lORVQ7CiAJCXJldHVybiAwOwomIzQzOwl9CiAKIAlpZiAoSVNfRU5BQkxFRChDT05GSUdfSVBWNikgJmFtcDsmYW1wOwotCSAgICBpbjZfcHRvbihzdHIsIGxlbiwgKHZvaWQgKilhZGRyLCAtMSwgJmFtcDtlbmQpICZndDsgMCAmYW1wOyZhbXA7Ci0JICAgICghZW5kIHx8ICplbmQgPT0gMCB8fCAqZW5kID09ICYjMzk7XG4mIzM5OykpCi0JCXJldHVybiAxOwomIzQzOwkgICAgaW42X3B0b24oc3RyLCBsZW4sICh2b2lkICopJmFtcDthZGRyLSZndDtpbjYsIC0xLCAmYW1wO2VuZCkgJmd0OyAwICZhbXA7JmFtcDsKJiM0MzsJICAgICghZW5kIHx8ICplbmQgPT0gMCB8fCAqZW5kID09ICYjMzk7XG4mIzM5OykpIHsKJiM0MzsJCWFkZHItJmd0O2ZhbWlseSA9IEFGX0lORVQ2OwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KIAogCXJldHVybiAtMTsKIH0KQEAgLTg1NSwyMCAmIzQzOzg2MywyNCBAQCBzdGF0aWMgc3NpemVfdCBsb2NhbF9pcF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKQogewogCXN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7CiAKLQlpZiAobnQtJmd0O2lwdjYpCiYjNDM7CWlmIChudC0mZ3Q7bG9jYWxfaXAuZmFtaWx5ID09IEFGX1VOU1BFQykKJiM0MzsJCXJldHVybiBzeXNmc19lbWl0KGJ1ZiwgJiMzNDtcbiYjMzQ7KTsKJiM0MzsJaWYgKG50LSZndDtsb2NhbF9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpCiAJCXJldHVybiBzeXNmc19lbWl0KGJ1ZiwgJiMzNDslcEk2Y1xuJiMzNDssICZhbXA7bnQtJmd0O2xvY2FsX2lwLmluNik7CiAJZWxzZQotCQlyZXR1cm4gc3lzZnNfZW1pdChidWYsICYjMzQ7JXBJNFxuJiMzNDssICZhbXA7bnQtJmd0O2xvY2FsX2lwKTsKJiM0MzsJCXJldHVybiBzeXNmc19lbWl0KGJ1ZiwgJiMzNDslcEk0XG4mIzM0OywgJmFtcDtudC0mZ3Q7bG9jYWxfaXAuaXApOwogfQogCiBzdGF0aWMgc3NpemVfdCByZW1vdGVfaXBfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0pOwogCi0JaWYgKG50LSZndDtpcHY2KQomIzQzOwlpZiAobnQtJmd0O3JlbW90ZV9pcC5mYW1pbHkgPT0gQUZfVU5TUEVDKQomIzQzOwkJcmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCAmIzM0O1xuJiMzNDspOwomIzQzOwlpZiAobnQtJmd0O3JlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpCiAJCXJldHVybiBzeXNmc19lbWl0KGJ1ZiwgJiMzNDslcEk2Y1xuJiMzNDssICZhbXA7bnQtJmd0O3JlbW90ZV9pcC5pbjYpOwogCWVsc2UKLQkJcmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCAmIzM0OyVwSTRcbiYjMzQ7LCAmYW1wO250LSZndDtyZW1vdGVfaXApOwomIzQzOwkJcmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCAmIzM0OyVwSTRcbiYjMzQ7LCAmYW1wO250LSZndDtyZW1vdGVfaXAuaXApOwogfQogCiBzdGF0aWMgc3NpemVfdCBsb2NhbF9tYWNfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZikKQEAgLTEyMTMsNyAmIzQzOzEyMjUsNiBAQCBzdGF0aWMgc3NpemVfdCBsb2NhbF9pcF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZiwKIHsKIAlzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0pOwogCXNzaXplX3QgcmV0ID0gLUVJTlZBTDsKLQlpbnQgaXB2NjsKIAogCWR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF9sb2NrKCk7CiAJaWYgKG50LSZndDtzdGF0ZSA9PSBTVEFURV9FTkFCTEVEKSB7CkBAIC0xMjIyLDEwICYjNDM7MTIzMyw4IEBAIHN0YXRpYyBzc2l6ZV90IGxvY2FsX2lwX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLAogCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCi0JaXB2NiA9IG5ldHBvbGxfcGFyc2VfaXBfYWRkcihidWYsICZhbXA7bnQtJmd0O2xvY2FsX2lwKTsKLQlpZiAoaXB2NiA9PSAtMSkKJiM0MzsJaWYgKG5ldHBvbGxfcGFyc2VfaXBfYWRkcihidWYsICZhbXA7bnQtJmd0O2xvY2FsX2lwKSAmbHQ7IDApCiAJCWdvdG8gb3V0X3VubG9jazsKLQludC0mZ3Q7aXB2NiA9ICEhaXB2NjsKIAogCXJldCA9IGNvdW50Owogb3V0X3VubG9jazoKQEAgLTEyMzgsNyAmIzQzOzEyNDcsNiBAQCBzdGF0aWMgc3NpemVfdCByZW1vdGVfaXBfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsCiB7CiAJc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTsKIAlzc2l6ZV90IHJldCA9IC1FSU5WQUw7Ci0JaW50IGlwdjY7CiAKIAlkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXhfbG9jaygpOwogCWlmIChudC0mZ3Q7c3RhdGUgPT0gU1RBVEVfRU5BQkxFRCkgewpAQCAtMTI0NywxMCAmIzQzOzEyNTUsOCBAQCBzdGF0aWMgc3NpemVfdCByZW1vdGVfaXBfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsCiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKLQlpcHY2ID0gbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGJ1ZiwgJmFtcDtudC0mZ3Q7cmVtb3RlX2lwKTsKLQlpZiAoaXB2NiA9PSAtMSkKJiM0MzsJaWYgKG5ldHBvbGxfcGFyc2VfaXBfYWRkcihidWYsICZhbXA7bnQtJmd0O3JlbW90ZV9pcCkgJmx0OyAwKQogCQlnb3RvIG91dF91bmxvY2s7Ci0JbnQtJmd0O2lwdjYgPSAhIWlwdjY7CiAKIAlyZXQgPSBjb3VudDsKIG91dF91bmxvY2s6CkBAIC0yMDYxLDcgJiM0MzsyMDY3LDcgQEAgc3RhdGljIHZvaWQgbmV0cG9sbF91ZHBfY2hlY2tzdW0oc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwKIAogCS8qIGNoZWNrIG5lZWRzIHRvIGJlIHNldCwgc2luY2UgaXQgd2lsbCBiZSBjb25zdW1lZCBpbiBjc3VtX3BhcnRpYWwgKi8KIAl1ZHBoLSZndDtjaGVjayA9IDA7Ci0JaWYgKG50LSZndDtpcHY2KQomIzQzOwlpZiAobnQtJmd0O3JlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpCiAJCXVkcGgtJmd0O2NoZWNrID0gY3N1bV9pcHY2X21hZ2ljKCZhbXA7bnQtJmd0O2xvY2FsX2lwLmluNiwKIAkJCQkJICAgICAgJmFtcDtudC0mZ3Q7cmVtb3RlX2lwLmluNiwKIAkJCQkJICAgICAgdWRwX2xlbiwgSVBQUk9UT19VRFAsCkBAIC0yMTAyLDcgJiM0MzsyMTA4LDcgQEAgc3RhdGljIHZvaWQgcHVzaF9ldGgoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAlza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpOwogCWV0aGVyX2FkZHJfY29weShldGgtJmd0O2hfc291cmNlLCBucC0mZ3Q7ZGV2LSZndDtkZXZfYWRkcik7CiAJZXRoZXJfYWRkcl9jb3B5KGV0aC0mZ3Q7aF9kZXN0LCBudC0mZ3Q7cmVtb3RlX21hYyk7Ci0JaWYgKG50LSZndDtpcHY2KQomIzQzOwlpZiAobnQtJmd0O3JlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpCiAJCWV0aC0mZ3Q7aF9wcm90byA9IGh0b25zKEVUSF9QX0lQVjYpOwogCWVsc2UKIAkJZXRoLSZndDtoX3Byb3RvID0gaHRvbnMoRVRIX1BfSVApOwpAQCAtMjE3MSw3ICYjNDM7MjE3Nyw3IEBAIHN0YXRpYyBpbnQgbmV0cG9sbF9zZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csCiAJCVdBUk5fT05fT05DRSghaXJxc19kaXNhYmxlZCgpKTsKIAogCXVkcF9sZW4gPSBsZW4gJiM0Mzsgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpOwotCWlmIChudC0mZ3Q7aXB2NikKJiM0MzsJaWYgKG50LSZndDtyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KQogCQlpcF9sZW4gPSB1ZHBfbGVuICYjNDM7IHNpemVvZihzdHJ1Y3QgaXB2Nmhkcik7CiAJZWxzZQogCQlpcF9sZW4gPSB1ZHBfbGVuICYjNDM7IHNpemVvZihzdHJ1Y3QgaXBoZHIpOwpAQCAtMjE4Nyw3ICYjNDM7MjE5Myw3IEBAIHN0YXRpYyBpbnQgbmV0cG9sbF9zZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csCiAJc2tiX3B1dChza2IsIGxlbik7CiAKIAlwdXNoX3VkcChudCwgc2tiLCBsZW4pOwotCWlmIChudC0mZ3Q7aXB2NikKJiM0MzsJaWYgKG50LSZndDtyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KQogCQlwdXNoX2lwdjYobnQsIHNrYiwgbGVuKTsKIAllbHNlCiAJCXB1c2hfaXB2NChudCwgc2tiLCBsZW4pOwpAQCAtMjUwNywxMCAmIzQzOzI1MTMsOCBAQCBfX3JlbGVhc2VzKCZhbXA7dGFyZ2V0X2xpc3RfbG9jaykKIHN0YXRpYyBpbnQgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjaGFyICpvcHQpCiB7CiAJc3RydWN0IG5ldHBvbGwgKm5wID0gJmFtcDtudC0mZ3Q7bnA7Ci0JYm9vbCBpcHZlcnNpb25fc2V0ID0gZmFsc2U7CiAJY2hhciAqY3VyID0gb3B0OwogCWNoYXIgKmRlbGltOwotCWludCBpcHY2OwogCiAJaWYgKCpjdXIgIT0gJiMzOTtAJiMzOTspIHsKIAkJZGVsaW0gPSBzdHJjaHIoY3VyLCAmIzM5O0AmIzM5Oyk7CkBAIC0yNTI0LDE2ICYjNDM7MjUyOCwxMiBAQCBzdGF0aWMgaW50IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY2hhciAqb3B0KQogCWN1ciYjNDM7JiM0Mzs7CiAKIAlpZiAoKmN1ciAhPSAmIzM5Oy8mIzM5OykgewotCQlpcHZlcnNpb25fc2V0ID0gdHJ1ZTsKIAkJZGVsaW0gPSBzdHJjaHIoY3VyLCAmIzM5Oy8mIzM5Oyk7CiAJCWlmICghZGVsaW0pCiAJCQlnb3RvIHBhcnNlX2ZhaWxlZDsKIAkJKmRlbGltID0gMDsKLQkJaXB2NiA9IG5ldHBvbGxfcGFyc2VfaXBfYWRkcihjdXIsICZhbXA7bnQtJmd0O2xvY2FsX2lwKTsKLQkJaWYgKGlwdjYgJmx0OyAwKQomIzQzOwkJaWYgKG5ldHBvbGxfcGFyc2VfaXBfYWRkcihjdXIsICZhbXA7bnQtJmd0O2xvY2FsX2lwKSAmbHQ7IDApCiAJCQlnb3RvIHBhcnNlX2ZhaWxlZDsKLQkJZWxzZQotCQkJbnQtJmd0O2lwdjYgPSAoYm9vbClpcHY2OwogCQljdXIgPSBkZWxpbTsKIAl9CiAJY3VyJiM0MzsmIzQzOzsKQEAgLTI1NzUsMTMgJiM0MzsyNTc1LDExIEBAIHN0YXRpYyBpbnQgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjaGFyICpvcHQpCiAJaWYgKCFkZWxpbSkKIAkJZ290byBwYXJzZV9mYWlsZWQ7CiAJKmRlbGltID0gMDsKLQlpcHY2ID0gbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGN1ciwgJmFtcDtudC0mZ3Q7cmVtb3RlX2lwKTsKLQlpZiAoaXB2NiAmbHQ7IDApCiYjNDM7CWlmIChuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY3VyLCAmYW1wO250LSZndDtyZW1vdGVfaXApICZsdDsgMCkKIAkJZ290byBwYXJzZV9mYWlsZWQ7Ci0JZWxzZSBpZiAoaXB2ZXJzaW9uX3NldCAmYW1wOyZhbXA7IG50LSZndDtpcHY2ICE9IChib29sKWlwdjYpCiYjNDM7CWlmIChudC0mZ3Q7bG9jYWxfaXAuZmFtaWx5ICE9IEFGX1VOU1BFQyAmYW1wOyZhbXA7CiYjNDM7CSAgICBudC0mZ3Q7bG9jYWxfaXAuZmFtaWx5ICE9IG50LSZndDtyZW1vdGVfaXAuZmFtaWx5KQogCQlnb3RvIHBhcnNlX2ZhaWxlZDsKLQllbHNlCi0JCW50LSZndDtpcHY2ID0gKGJvb2wpaXB2NjsKIAljdXIgPSBkZWxpbSAmIzQzOyAxOwogCiAJaWYgKCpjdXIgIT0gMCkgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRwb2xsLmggYi9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaAppbmRleCAxYzZiMWVlYzVlZmQ2Li5lYzA4MjFhNWIwMmRiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaApAQCAtMTYsMTEgJiM0MzsxNiw2IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvaXAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC91ZHAuaCZndDsKIAotdW5pb24gaW5ldF9hZGRyIHsKLQlfX2JlMzIJCWlwOwotCXN0cnVjdCBpbjZfYWRkcglpbjY7Ci19OwotCiBzdHJ1Y3QgbmV0cG9sbCB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAluZXRkZXZpY2VfdHJhY2tlciBkZXZfdHJhY2tlcjsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0MjYKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVmYWN0b3JpbmcgTmV0Y29uc29sZSBmb3IgSVB2NiBGbGV4aWJpbGl0eSoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFpbWVkIGF0IGltcHJvdmluZyB0aGUgSVB2NiBzdXBwb3J0IHdpdGhpbiB0aGUgbmV0Y29uc29sZSBkcml2ZXIuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IGl0JiMzOTtzIGEgcHJldHR5IHRhcmdldGVkIHJlZmFjdG9yLCBmb2N1c2luZyBvbiBhIG1vcmUgZmxleGlibGUgd2F5IHRvIGhhbmRsZSBJUCBhZGRyZXNzZXMuIEl0IGxvb2tzIGxpa2UgdGhlIG1haW4gdGhydXN0IGlzIHRvIG1vdmUgYXdheSBmcm9tIHRoZSBzaW1wbGUgYGlwdjZgIGJvb2xlYW4gZmxhZyBhbmQgdGhlIGB1bmlvbiBpbmV0X2FkZHJgIOKAkyB3aGljaCBmZWVscyBhIGJpdCBsaW1pdGluZyDigJMgYW5kIGludG8gYSBtb3JlIHJvYnVzdCBgc3RydWN0IGluZXRfYWRkcmAuIFRoaXMgbmV3IHN0cnVjdHVyZSBjbGV2ZXJseSBidW5kbGVzIHRoZSBhZGRyZXNzIGZhbWlseSAoYHU4IGZhbWlseWApIHdpdGggdGhlIHVuaW9uIGNvbnRhaW5pbmcgdGhlIGFjdHVhbCBJUCBhZGRyZXNzZXMgKGJvdGggSVB2NCBhbmQgSVB2NikuCgpUaGUgaW1wbGljYXRpb25zIGFyZSBjbGVhcjogdGhlIGBpcHY2YCBmaWVsZCB3aXRoaW4gYHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldGAgaXMgYmVpbmcgcmV0aXJlZCwgYW5kIGFsbCB0aGUgcGFyc2luZyBhbmQgc2V0dXAgY29kZSBhcmUgYmVpbmcgdXBkYXRlZCB0byBsZXZlcmFnZSB0aGUgYGZhbWlseWAgZmllbGQgaW5zdGVhZC4gVGhhdOKAmXMgdGhlIHJpZ2h0IHdheSB0byBhcHByb2FjaCBpdC4gV2UmIzM5O3JlIGFsc28gc2VlaW5nIHRoZSBhZGRpdGlvbiBvZiBzb21lIGNydWNpYWwgY2hlY2tzIHRvIHZhbGlkYXRlIHRoYXQgYm90aCB0aGUgcmVtb3RlIElQIGlzIGRlZmluZWQgYW5kIHRoYXQgYm90aCB0aGUgbG9jYWwgYW5kIHJlbW90ZSBJUHMgYmVsb25nIHRvIHRoZSBzYW1lIGFkZHJlc3MgZmFtaWx5LiBNYWtlcyBzZW5zZSDigJMgY29uc2lzdGVuY3kgaXMga2V5LCBlc3BlY2lhbGx5IGluIG5ldHdvcmsgY29uZmlndXJhdGlvbnMuCgpTbywgdGhlIGBzdHJ1Y3QgaW5ldF9hZGRyYCBpcyBkaXJlY3RseSBlbWJlZGRlZCB3aXRoaW4gdGhlIGBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXRgIGl0c2VsZiwgYXMgdGhlIGBsb2NhbF9pcGAgYW5kIGByZW1vdGVfaXBgIG1lbWJlcnMuIE5vdywgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIHRoYXQgdGhlc2Ugc3RydWN0cyBhcmUgYmVpbmcgYWxsb2NhdGVkIHByb3Blcmx5LiBJ4oCZbGwgcXVpY2tseSBjaGVjayBob3cgYHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldGAgaXMgaW5zdGFudGlhdGVkLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgYWxsb2NfcGFyYW1fdGFyZ2V0YCBhbmQgYG1ha2VfbmV0Y29uc29sZV90YXJnZXRgIGZ1bmN0aW9ucy4gSnVzdCB3YW50IHRvIGNvbmZpcm0gdGhhdCB0aGVyZSBpc27igJl0IGFueSBvYnZpb3VzIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlLiBJJiMzOTtsbCBuZWVkIHRvIHJ1biBhIGBncmVwYCBmb3IgYGFsbG9jX3BhcmFtX3RhcmdldGAgYW5kIGBtYWtlX25ldGNvbnNvbGVfdGFyZ2V0YCB0byBjb25maXJtLiBJdCBpcyBwb3NzaWJsZSB0aGV5IHVzZSBga3phbGxvY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FsbG9jX3BhcmFtX3RhcmdldHxtYWtlX25ldGNvbnNvbGVfdGFyZ2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xNzE2PXN0YXRpYyBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKmZpbmRfY21kbGluZV90YXJnZXQoY29uc3QgY2hhciAqbmFtZSlcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTczNi1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNzM3OnN0YXRpYyBzdHJ1Y3QgY29uZmlnX2dyb3VwICptYWtlX25ldGNvbnNvbGVfdGFyZ2V0KHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE3MzgtXHRcdFx0XHRcdFx0ICAgY29uc3QgY2hhciAqbmFtZSlcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTgyMz1zdGF0aWMgY29uc3Qgc3RydWN0IGNvbmZpZ2ZzX2dyb3VwX29wZXJhdGlvbnMgbmV0Y29uc29sZV9zdWJzeXNfZ3JvdXBfb3BzID0ge1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE4MjQ6XHQubWFrZV9ncm91cFx0PSBtYWtlX25ldGNvbnNvbGVfdGFyZ2V0LFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE4MjUtXHQuZHJvcF9pdGVtXHQ9IGRyb3BfbmV0Y29uc29sZV90YXJnZXQsXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI1MTM9c3RhdGljIGludCBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNoYXIgKm9wdClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjYwMC0vKiBBbGxvY2F0ZSBuZXcgdGFyZ2V0IChmcm9tIGJvb3QvbW9kdWxlIHBhcmFtKSBhbmQgc2V0dXAgbmV0cG9sbCBmb3IgaXQgKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNjAxOnN0YXRpYyBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKmFsbG9jX3BhcmFtX3RhcmdldChjaGFyICp0YXJnZXRfY29uZmlnLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2MDItXHRcdFx0XHRcdFx0ICAgIGludCBjbWRsaW5lX2NvdW50KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yNjkzPXN0YXRpYyBpbnQgX19pbml0IGluaXRfbmV0Y29uc29sZSh2b2lkKVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNzA0LVx0XHR3aGlsZSAoKHRhcmdldF9jb25maWcgPSBzdHJzZXAoXHUwMDI2aW5wdXQsIFwmIzM0OztcJiMzNDspKSkge1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI3MDU6XHRcdFx0bnQgPSBhbGxvY19wYXJhbV90YXJnZXQodGFyZ2V0X2NvbmZpZywgY291bnQpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI3MDYtXHRcdFx0aWYgKElTX0VSUihudCkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzU0MwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBUYXJnZXQgQWxsb2NhdGlvbiBhbmQgTmV0Y29uc29sZSBDcmVhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IGhvdyB0aGVzZSB0YXJnZXRzIGFyZSBiZWluZyBzZXQgdXAuIEZpcnN0LCBJJiMzOTttIGdvaW5nIHRvIGRpZyBpbnRvIHRoZSBgYWxsb2NfcGFyYW1fdGFyZ2V0YCBpbXBsZW1lbnRhdGlvbi4gSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IGl0JiMzOTtzIGRlY2lkaW5nIHdoaWNoIHJlc291cmNlcyB0byBhbGxvY2F0ZSBhbmQgd2hhdCBwYXJhbWV0ZXJzIGl0JiMzOTtzIGNvbnNpZGVyaW5nLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBhbnkgcG90ZW50aWFsIGVkZ2UgY2FzZXMgb3Igb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMgdGhlcmUsIGdpdmVuIG15IGV4cGVyaWVuY2Ugd2l0aCBzaW1pbGFyIHJlc291cmNlIGFsbG9jYXRpb24gc2NoZW1lcy4gVGhlbiwgSeKAmWxsIGltbWVkaWF0ZWx5IGNvbnRyYXN0IHRoYXQgd2l0aCBhIHJldmlldyBvZiBgbWFrZV9uZXRjb25zb2xlX3RhcmdldGAuIEkmIzM5O20gY3VyaW91cyBob3cgaXRzIHNwZWNpZmljIGFwcHJvYWNoIHRvIG5ldHdvcmsgY29uc29sZSB0YXJnZXRzIGRpZmZlcnMuIFdoYXQgYXJlIGl0cyBkZXBlbmRlbmNpZXM/IFdoYXQgZXJyb3IgY29uZGl0aW9ucyBtaWdodCBhcmlzZT8gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2xldmVybmVzcywgYW5kIHBvdGVudGlhbCBpbmVmZmljaWVuY2llcy4gS25vd2luZyBib3RoIHRoZXNlIGltcGxlbWVudGF0aW9ucyB0aG9yb3VnaGx5IHdpbGwgZ2l2ZSBtZSBhIHNvbGlkIGJhc2UgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyB0YXJnZXRzIGluIGdlbmVyYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3phbGxvYy4qbmV0Y29uc29sZV90YXJnZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODExCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6CgoqKkNoZWNraW5nIGBudGAgQWxsb2NhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBmaXJzdCB0aGluZyBJJiMzOTttIHRoaW5raW5nIGlzLCBsZXQmIzM5O3MgcGlucG9pbnQgZXhhY3RseSBob3cgYG50YCBpcyBiZWluZyBhbGxvY2F0ZWQgaW4gdGhlIGZpcnN0IHBsYWNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgbGlmZWN5Y2xlLiBXaGVyZSBhbmQgd2hlbiBpcyB0aGlzIHZhcmlhYmxlIGJyb3VnaHQgaW50byBleGlzdGVuY2U/IElzIGl0IGEgc3RhdGljYWxseSBhbGxvY2F0ZWQgdmFyaWFibGUsIHBlcmhhcHMgYSBnbG9iYWwgb3Igd2l0aGluIGEgc3BlY2lmaWMgc2NvcGU/IE9yLCBpcyBpdCBkeW5hbWljYWxseSBhbGxvY2F0ZWQsIG1heWJlIHRocm91Z2ggYG1hbGxvY2Agb3IgYSBzaW1pbGFyIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9uPyBUaGUgYWxsb2NhdGlvbiBtZXRob2Qgd2lsbCBmdW5kYW1lbnRhbGx5IGluZmx1ZW5jZSBldmVyeXRoaW5nIHRoYXQgZm9sbG93cy4gSSBuZWVkIHRvIGtub3cgdGhpcyB0byB0cmFjayB0aGUgaW1wbGljYXRpb25zLiBUaGlzIGluZm9ybWF0aW9uIHdpbGwgaW5mb3JtIHNvIG11Y2ggYWJvdXQgaXRzIGxpZmV0aW1lLCBob3cgaXQmIzM5O3MgdXNlZCwgYW5kIHBvdGVudGlhbCBwcm9ibGVtcy4gS25vd2luZyB0aGUgYWxsb2NhdGlvbiB0eXBlIHdpbGwgZ2l2ZSBtZSBpbXBvcnRhbnQgY2x1ZXMgYWJvdXQgaXRzIGNoYXJhY3RlcmlzdGljcyBhbmQgY29uc3RyYWludHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t6YWxsb2MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTY1Nz1zdGF0aWMgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICphbGxvY19hbmRfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy02NjAtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NjYxOlx0bnQgPSBremFsbG9jX29iaigqbnQpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTY2Mi1cdGlmICghbnQpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTE2MDE9c3RhdGljIHN0cnVjdCBjb25maWdfaXRlbSAqdXNlcmRhdHVtX21ha2VfaXRlbShzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTYxNS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNjE2Olx0dWRtID0ga3phbGxvY19vYmooKnVkbSk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTYxNy1cdGlmICghdWRtKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MjIxCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWVtb3J5IEFsbG9jYXRpb24gYW5kIERhdGEgU3RydWN0dXJlcyoqCgpPa2F5LCBzbyBga3phbGxvY19vYmpgIGlzIGJlaW5nIHVzZWQgaGVyZSwgd2hpY2ggaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhlIGBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXRgIGlzIHplcm8taW5pdGlhbGl6ZWQuIEdvb2QsIGdvb2QuIFRoYXQgbWVhbnMgdGhlIGBpbmV0X2FkZHJgIGZpZWxkcyB3aXRoaW4gd2lsbCBzdGFydCBhdCB6ZXJvLCBzcGVjaWZpY2FsbHkgdGhlIGBmYW1pbHlgIGZpZWxkIHdpbGwgYmUgemVybywgY29ycmVzcG9uZGluZyB0byBgQUZfVU5TUEVDYC4KClRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIGBzdHJ1Y3QgaW5ldF9hZGRyYCwgd2hpY2ggaXMgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZDogYSBgdTggZmFtaWx5YCBhbmQgYSB1bmlvbiBmb3IgSVB2NCBhbmQgSVB2NiBhZGRyZXNzZXMuIFRoZSB1bmlvbiYjMzk7cyBzaXplIGlzLCBvZiBjb3Vyc2UsIDE2IGJ5dGVzLiBDb25zaWRlcmluZyB0aGUgcGFkZGluZywgdGhlIG92ZXJhbGwgc2l6ZSBvZiBgaW5ldF9hZGRyYCBsb29rcyBsaWtlIGl0JiMzOTtsbCBiZSAyMCBieXRlcy4gTm93LCB0aGUga2V5IHF1ZXN0aW9uIGFyaXNlczogaXMgdGhpcyBzdHJ1Y3QgZXZlciBjb3BpZWQgdG8gdXNlcnNwYWNlPyBUaGF0JiMzOTtzIHdoYXQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQuIEFueSBwb3RlbnRpYWwgZXhwb3N1cmUgdGhlcmUgaXMgd2hhdCBJIGhhdmUgdG8gYmUgbW9zdCBjb25jZXJuZWQgYWJvdXQuCgpMZXQmIzM5O3Mgc2VlLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYGxvY2FsX2lwX3Nob3dgIGFuZCBgcmVtb3RlX2lwX3Nob3dgLCBib3RoIG9mIHdoaWNoIHVzZSBgc3lzZnNfZW1pdGAuIE9rYXksIHRoYXQmIzM5O3Mgbm90IGEgZGlyZWN0IGNvcHk7IGl0JiMzOTtzIGp1c3QgZm9ybWF0dGluZyB0aGUgSVAgYWRkcmVzcyB0byBhIHN0cmluZy4gVGhhdCYjMzk7cyBhIHJlbGllZi4gQnV0IHRoYXQgZG9lc24mIzM5O3QgbWVhbiBpdCYjMzk7cyBlbnRpcmVseSBzYWZlLiBJIHNob3VsZCBjaGVjayBvdGhlciBwb3NzaWJsZSB1c2VzIG9mIGBzdHJ1Y3QgaW5ldF9hZGRyYC4gR290dGEgYmUgdGhvcm91Z2ggaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW5ldF9hZGRyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xNDg9ZW51bSB0YXJnZXRfc3RhdGUge1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNTMtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTU0OnN0cnVjdCBpbmV0X2FkZHIge1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE1NS1cdC8qIEFkZHJlc3MgZmFtaWx5OiBBRl9VTlNQRUMgd2hlbiB1bnNldCwgZWxzZSBBRl9JTkVUIG9yIEFGX0lORVQ2ICovXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIwND1zdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQge1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjItXHRzdHJ1Y3QgbmV0cG9sbFx0XHRucDtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMjM6XHRzdHJ1Y3QgaW5ldF9hZGRyXHRsb2NhbF9pcCwgcmVtb3RlX2lwO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyNC1cdHUxNlx0XHRcdGxvY2FsX3BvcnQsIHJlbW90ZV9wb3J0O1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz03MTI9c3RhdGljIHZvaWQgbmV0Y29uc29sZV9wcmludF9iYW5uZXIoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNzM0LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjczNTovKiBQYXJzZSB0aGUgc3RyaW5nIGFuZCBwb3B1bGF0ZSB0aGUgYGluZXRfYWRkcmAgc3RydWN0LiBSZXR1cm4gMCBvbiBzdWNjZXNzXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNzM2LSAqIGFuZCAtMSB1cG9uIGZhaWx1cmUuXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNzM3LSAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjczODpzdGF0aWMgaW50IG5ldHBvbGxfcGFyc2VfaXBfYWRkcihjb25zdCBjaGFyICpzdHIsIHN0cnVjdCBpbmV0X2FkZHIgKmFkZHIpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNzM5LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTE3OAoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludGVybmFsIFN0cnVjdHVyZSBDb25zb2xpZGF0aW9uIGluIE5ldGNvbnNvbGUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgbmV3IHN0cnVjdCBhbmQgaXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCDigJMgaXQmIzM5O3MganVzdCBiZWluZyB1c2VkICppbnRlcm5hbGx5KiB3aXRoaW4gYG5ldGNvbnNvbGUuY2AuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYSByZXBsYWNlbWVudCBmb3IgdGhhdCBvbGQgYHVuaW9uIGluZXRfYWRkcmAgdGhhdCB3YXMgZmxvYXRpbmcgYXJvdW5kIGluIGBpbmNsdWRlL2xpbnV4L25ldHBvbGwuaGAgYnV0IHdhcyBldmVudHVhbGx5IHJlbW92ZWQuIE15IGZpcnN0IHRob3VnaHQgaXMgJiMzNDt0aGF0JiMzOTtzIGNvbnZlbmllbnQsIGNsZWFucyB0aGluZ3MgdXAgYSBiaXQmIzM0Oy4KCk5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXMsIHdhcyB0aGF0IGB1bmlvbiBpbmV0X2FkZHJgIHRydWx5ICpvbmx5KiB1dGlsaXplZCB3aXRoaW4gYG5ldGNvbnNvbGUuY2A/IEl0JiMzOTtzIGVhc3kgdG8gYXNzdW1lLCBidXQgSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4gVGhlcmUmIzM5O3MgYWx3YXlzIHRoZSBjaGFuY2UgdGhhdCBzb21ldGhpbmcgZ290IG1pc3NlZCBkdXJpbmcgdGhlIHJlZmFjdG9yaW5nIG9yIHJlbW92YWwgcHJvY2VzcywgYW5kIHRoYXQmIzM5O3MgdGhlIGtpbmQgb2YgdGhpbmcgdGhhdCBjYW4gcXVpZXRseSBpbnRyb2R1Y2UgYnVncyBkb3duIHRoZSBsaW5lLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgY29kZWJhc2UgdG8gYmUgc3VyZSB3ZSBkaWRuJiMzOTt0IG9ycGhhbiBhbnkgZGVwZW5kZW5jaWVzLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBtYWtlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2luZXRfYWRkciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMjA5NyBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTE0OD1lbnVtIHRhcmdldF9zdGF0ZSB7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE1My1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNTQ6c3RydWN0IGluZXRfYWRkciB7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTU1LVx0LyogQWRkcmVzcyBmYW1pbHk6IEFGX1VOU1BFQyB3aGVuIHVuc2V0LCBlbHNlIEFGX0lORVQgb3IgQUZfSU5FVDYgKi9cbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjA0PXN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCB7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMi1cdHN0cnVjdCBuZXRwb2xsXHRcdG5wO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIyMzpcdHN0cnVjdCBpbmV0X2FkZHJcdGxvY2FsX2lwLCByZW1vdGVfaXA7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjI0LVx0dTE2XHRcdFx0bG9jYWxfcG9ydCwgcmVtb3RlX3BvcnQ7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTcxMj1zdGF0aWMgdm9pZCBuZXRjb25zb2xlX3ByaW50X2Jhbm5lcihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy03MzQtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NzM1Oi8qIFBhcnNlIHRoZSBzdHJpbmcgYW5kIHBvcHVsYXRlIHRoZSBgaW5ldF9hZGRyYCBzdHJ1Y3QuIFJldHVybiAwIG9uIHN1Y2Nlc3NcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy03MzYtICogYW5kIC0xIHVwb24gZmFpbHVyZS5cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy03MzctICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NzM4OnN0YXRpYyBpbnQgbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGNvbnN0IGNoYXIgKnN0ciwgc3RydWN0IGluZXRfYWRkciAqYWRkcilcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy03Mzkte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9zZWxmdGVzdC9hbGxvd2VkaXBzLmM9ODI9c3RydWN0IGhvcnJpYmxlX2FsbG93ZWRpcHNfbm9kZSB7XG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VsZnRlc3QvYWxsb3dlZGlwcy5jLTgzLVx0c3RydWN0IGhsaXN0X25vZGUgdGFibGU7XG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VsZnRlc3QvYWxsb3dlZGlwcy5jOjg0Olx0dW5pb24gbmZfaW5ldF9hZGRyIGlwO1xuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NlbGZ0ZXN0L2FsbG93ZWRpcHMuYzo4NTpcdHVuaW9uIG5mX2luZXRfYWRkciBtYXNrO1xuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NlbGZ0ZXN0L2FsbG93ZWRpcHMuYy04Ni1cdHU4IGlwX3ZlcnNpb247XG4tLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NlbGZ0ZXN0L2FsbG93ZWRpcHMuYz05NT1zdGF0aWMgX19pbml0IHZvaWQgaG9ycmlibGVfYWxsb3dlZGlwc19mcmVlKHN0cnVjdCBob3JyaWJsZV9hbGxvd2VkaXBzICp0YWJsZSlcbi0tXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VsZnRlc3QvYWxsb3dlZGlwcy5jLTEwNS1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9zZWxmdGVzdC9hbGxvd2VkaXBzLmM6MTA2OnN0YXRpYyBfX2luaXQgaW5saW5lIHVuaW9uIG5mX2luZXRfYWRkciBob3JyaWJsZV9jaWRyX3RvX21hc2sodTggY2lkcilcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9zZWxmdGVzdC9hbGxvd2VkaXBzLmMtMTA3LXtcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9zZWxmdGVzdC9hbGxvd2VkaXBzLmM6MTA4Olx0dW5pb24gbmZfaW5ldF9hZGRyIG1hc2s7XG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VsZnRlc3QvYWxsb3dlZGlwcy5jLTEwOS1cbi0tXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VsZnRlc3QvYWxsb3dlZGlwcy5jLTExNy1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9zZWxmdGVzdC9hbGxvd2VkaXBzLmM6MTE4OnN0YXRpYyBfX2luaXQgaW5saW5lIHU4IGhvcnJpYmxlX21hc2tfdG9fY2lkcih1bmlvbiBuZl9pbmV0X2FkZHIgc3VibmV0KVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NlbGZ0ZXN0L2FsbG93ZWRpcHMuYy0xMTkte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9zZWxmdGVzdC9hbGxvd2VkaXBzLmM9MTUzPWhvcnJpYmxlX2luc2VydF9vcmRlcmVkKHN0cnVjdCBob3JyaWJsZV9hbGxvd2VkaXBzICp0YWJsZSwgc3RydWN0IGhvcnJpYmxlX2FsbG93ZWRpcHNfbm9kZSAqbm9kZSlcbi0tXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VsZnRlc3QvYWxsb3dlZGlwcy5jLTE1OS1cdFx0aWYgKG90aGVyLVx1MDAzZWlwX3ZlcnNpb24gPT0gbm9kZS1cdTAwM2VpcF92ZXJzaW9uIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NlbGZ0ZXN0L2FsbG93ZWRpcHMuYzoxNjA6XHRcdCAgICAhbWVtY21wKFx1MDAyNm90aGVyLVx1MDAzZW1hc2ssIFx1MDAyNm5vZGUtXHUwMDNlbWFzaywgc2l6ZW9mKHVuaW9uIG5mX2luZXRfYWRkcikpIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NlbGZ0ZXN0L2FsbG93ZWRpcHMuYzoxNjE6XHRcdCAgICAhbWVtY21wKFx1MDAyNm90aGVyLVx1MDAzZWlwLCBcdTAwMjZub2RlLVx1MDAzZWlwLCBzaXplb2YodW5pb24gbmZfaW5ldF9hZGRyKSkpIHtcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9zZWxmdGVzdC9hbGxvd2VkaXBzLmMtMTYyLVx0XHRcdG90aGVyLVx1MDAzZXZhbHVlID0gbm9kZS1cdTAwM2V2YWx1ZTtcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L3JkbWEuYz0yMDAxPXN0YXRpYyB2b2lkIG52bWV0X3JkbWFfZGlzY19wb3J0X2FkZHIoc3RydWN0IG52bWV0X3JlcSAqcmVxLFxuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvcmRtYS5jLTIwMDYtXG5kcml2ZXJzL252bWUvdGFyZ2V0L3JkbWEuYzoyMDA3Olx0aWYgKGluZXRfYWRkcl9pc19hbnkoXHUwMDI2Y21faWQtXHUwMDNlcm91dGUuYWRkci5zcmNfYWRkcikpIHtcbmRyaXZlcnMvbnZtZS90YXJnZXQvcmRtYS5jLTIwMDgtXHRcdHN0cnVjdCBudm1ldF9yZG1hX3JzcCAqcnNwID1cbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jPTIyMDI9c3RhdGljIHZvaWQgbnZtZXRfdGNwX2Rpc2NfcG9ydF9hZGRyKHN0cnVjdCBudm1ldF9yZXEgKnJlcSxcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTIyMDYtXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jOjIyMDc6XHRpZiAoaW5ldF9hZGRyX2lzX2FueShcdTAwMjZwb3J0LVx1MDAzZWFkZHIpKSB7XG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTIyMDgtXHRcdHN0cnVjdCBudm1ldF90Y3BfY21kICpjbWQgPVxuLS1cbmRyaXZlcnMvdGFyZ2V0L2lzY3NpL2lzY3NpX3RhcmdldC5jPTMzMzY9aXNjc2l0X2J1aWxkX3NlbmR0YXJnZXRzX3Jlc3BvbnNlKHN0cnVjdCBpc2NzaXRfY21kICpjbWQsXG4tLVxuZHJpdmVycy90YXJnZXQvaXNjc2kvaXNjc2lfdGFyZ2V0LmMtMzQzOC1cbmRyaXZlcnMvdGFyZ2V0L2lzY3NpL2lzY3NpX3RhcmdldC5jOjM0Mzk6XHRcdFx0XHRpZiAoaW5ldF9hZGRyX2lzX2FueShcdTAwMjZucC1cdTAwM2VucF9zb2NrYWRkcikpXG5kcml2ZXJzL3RhcmdldC9pc2NzaS9pc2NzaV90YXJnZXQuYy0zNDQwLVx0XHRcdFx0XHRzb2NrYWRkciA9IFx1MDAyNmNvbm4tXHUwMDNlbG9jYWxfc29ja2FkZHI7XG4tLVxuZnMvc21iL3NlcnZlci9jb25uZWN0aW9uLmM9MzA9c3RhdGljIGludCBwcm9jX3Nob3dfY2xpZW50cyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG4tLVxuZnMvc21iL3NlcnZlci9jb25uZWN0aW9uLmMtNDUtI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5mcy9zbWIvc2VydmVyL2Nvbm5lY3Rpb24uYzo0NjpcdFx0aWYgKCFjb25uLVx1MDAzZWluZXRfYWRkcilcbmZzL3NtYi9zZXJ2ZXIvY29ubmVjdGlvbi5jLTQ3LVx0XHRcdHNlcV9wcmludGYobSwgXCYjMzQ7JS0yMHBJNmNcJiMzNDssIFx1MDAyNmNvbm4tXHUwMDNlaW5ldDZfYWRkcik7XG4tLVxuZnMvc21iL3NlcnZlci9jb25uZWN0aW9uLmMtNDktI2VuZGlmXG5mcy9zbWIvc2VydmVyL2Nvbm5lY3Rpb24uYzo1MDpcdFx0XHRzZXFfcHJpbnRmKG0sIFwmIzM0OyUtMjBwSTRcJiMzNDssIFx1MDAyNmNvbm4tXHUwMDNlaW5ldF9hZGRyKTtcbmZzL3NtYi9zZXJ2ZXIvY29ubmVjdGlvbi5jLTUxLVx0XHRzZXFfcHJpbnRmKG0sIFwmIzM0OyAgIDB4JS0xMHggJS0xMHUgJS0xMmQgJS0xMGQgJXB0VFxcblwmIzM0Oyxcbi0tXG5mcy9zbWIvc2VydmVyL2Nvbm5lY3Rpb24uaD00NT1zdHJ1Y3Qga3NtYmRfY29ubiB7XG4tLVxuZnMvc21iL3NlcnZlci9jb25uZWN0aW9uLmgtNTQtXHR1bmlvbiB7XG5mcy9zbWIvc2VydmVyL2Nvbm5lY3Rpb24uaDo1NTpcdFx0X19iZTMyXHRcdFx0aW5ldF9hZGRyO1xuZnMvc21iL3NlcnZlci9jb25uZWN0aW9uLmgtNTYtI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG4tLVxuZnMvc21iL3NlcnZlci9tZ210L3VzZXJfc2Vzc2lvbi5jPTgxPXN0YXRpYyBpbnQgc2hvd19wcm9jX3Nlc3Npb24oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuLS1cbmZzL3NtYi9zZXJ2ZXIvbWdtdC91c2VyX3Nlc3Npb24uYy05Ni0jaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbmZzL3NtYi9zZXJ2ZXIvbWdtdC91c2VyX3Nlc3Npb24uYzo5NzpcdFx0aWYgKGNoYW4tXHUwMDNlY29ubi1cdTAwM2VpbmV0X2FkZHIpXG5mcy9zbWIvc2VydmVyL21nbXQvdXNlcl9zZXNzaW9uLmMtOTgtXHRcdFx0c2VxX3ByaW50ZihtLCBcJiMzNDslLTIwc1xcdCVwSTRcXG5cJiMzNDssIFwmIzM0O2NsaWVudFwmIzM0OyxcbmZzL3NtYi9zZXJ2ZXIvbWdtdC91c2VyX3Nlc3Npb24uYzo5OTpcdFx0XHRcdFx0XHUwMDI2Y2hhbi1cdTAwM2Vjb25uLVx1MDAzZWluZXRfYWRkcik7XG5mcy9zbWIvc2VydmVyL21nbXQvdXNlcl9zZXNzaW9uLmMtMTAwLVx0XHRlbHNlXG4tLVxuZnMvc21iL3NlcnZlci9tZ210L3VzZXJfc2Vzc2lvbi5jLTEwNC1cdFx0c2VxX3ByaW50ZihtLCBcJiMzNDslLTIwc1xcdCVwSTRcXG5cJiMzNDssIFwmIzM0O2NsaWVudFwmIzM0OyxcbmZzL3NtYi9zZXJ2ZXIvbWdtdC91c2VyX3Nlc3Npb24uYzoxMDU6XHRcdFx0XHRcdTAwMjZjaGFuLVx1MDAzZWNvbm4tXHUwMDNlaW5ldF9hZGRyKTtcbmZzL3NtYi9zZXJ2ZXIvbWdtdC91c2VyX3Nlc3Npb24uYy0xMDYtI2VuZGlmXG4tLVxuZnMvc21iL3NlcnZlci9tZ210L3VzZXJfc2Vzc2lvbi5jPTIwMD1zdGF0aWMgaW50IHNob3dfcHJvY19zZXNzaW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG4tLVxuZnMvc21iL3NlcnZlci9tZ210L3VzZXJfc2Vzc2lvbi5jLTIxNy0jaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbmZzL3NtYi9zZXJ2ZXIvbWdtdC91c2VyX3Nlc3Npb24uYzoyMTg6XHRcdFx0aWYgKCFjaGFuLVx1MDAzZWNvbm4tXHUwMDNlaW5ldF9hZGRyKVxuZnMvc21iL3NlcnZlci9tZ210L3VzZXJfc2Vzc2lvbi5jLTIxOS1cdFx0XHRcdHNlcV9wcmludGYobSwgXCYjMzQ7ICUtNDBwSTZjXCYjMzQ7LCBcdTAwMjZjaGFuLVx1MDAzZWNvbm4tXHUwMDNlaW5ldDZfYWRkcik7XG4tLVxuZnMvc21iL3NlcnZlci9tZ210L3VzZXJfc2Vzc2lvbi5jLTIyMS0jZW5kaWZcbmZzL3NtYi9zZXJ2ZXIvbWdtdC91c2VyX3Nlc3Npb24uYzoyMjI6XHRcdFx0XHRzZXFfcHJpbnRmKG0sIFwmIzM0OyAlLTQwcEk0XCYjMzQ7LCBcdTAwMjZjaGFuLVx1MDAzZWNvbm4tXHUwMDNlaW5ldF9hZGRyKTtcbmZzL3NtYi9zZXJ2ZXIvbWdtdC91c2VyX3Nlc3Npb24uYy0yMjMtXHRcdFx0c2VxX3ByaW50ZihtLCBcJiMzNDsgJS0xNXMgJS0xMGxsdSAlLTEwc1xcblwmIzM0Oyxcbi0tXG5mcy9zbWIvc2VydmVyL3RyYW5zcG9ydF90Y3AuYz01OT1zdGF0aWMgc3RydWN0IHRjcF90cmFuc3BvcnQgKmFsbG9jX3RyYW5zcG9ydChzdHJ1Y3Qgc29ja2V0ICpjbGllbnRfc2spXG4tLVxuZnMvc21iL3NlcnZlci90cmFuc3BvcnRfdGNwLmMtNzktXHR9IGVsc2Uge1xuZnMvc21iL3NlcnZlci90cmFuc3BvcnRfdGNwLmM6ODA6XHRcdGNvbm4tXHUwMDNlaW5ldF9hZGRyID0gaW5ldF9zayhjbGllbnRfc2stXHUwMDNlc2spLVx1MDAzZWluZXRfZGFkZHI7XG5mcy9zbWIvc2VydmVyL3RyYW5zcG9ydF90Y3AuYy04MS1cdFx0Y29ubi1cdTAwM2VpbmV0X2hhc2ggPSBpcHY0X2FkZHJfaGFzaChpbmV0X3NrKGNsaWVudF9zay1cdTAwM2VzayktXHUwMDNlaW5ldF9kYWRkcik7XG4tLVxuZnMvc21iL3NlcnZlci90cmFuc3BvcnRfdGNwLmMtODMtI2Vsc2VcbmZzL3NtYi9zZXJ2ZXIvdHJhbnNwb3J0X3RjcC5jOjg0Olx0Y29ubi1cdTAwM2VpbmV0X2FkZHIgPSBpbmV0X3NrKGNsaWVudF9zay1cdTAwM2VzayktXHUwMDNlaW5ldF9kYWRkcjtcbmZzL3NtYi9zZXJ2ZXIvdHJhbnNwb3J0X3RjcC5jLTg1LVx0Y29ubi1cdTAwM2VpbmV0X2hhc2ggPSBpcHY0X2FkZHJfaGFzaChpbmV0X3NrKGNsaWVudF9zay1cdTAwM2VzayktXHUwMDNlaW5ldF9kYWRkcik7XG4tLVxuZnMvc21iL3NlcnZlci90cmFuc3BvcnRfdGNwLmM9MTc3PXN0YXRpYyBpbnQga3NtYmRfdGNwX25ld19jb25uZWN0aW9uKHN0cnVjdCBzb2NrZXQgKmNsaWVudF9zaylcbi0tXG5mcy9zbWIvc2VydmVyL3RyYW5zcG9ydF90Y3AuYy0xOTgtXHRcdFx0XHRLU01CRF9UUkFOUyh0KS1cdTAwM2Vjb25uLCBcJiMzNDtrc21iZDolcEk0XCYjMzQ7LFxuZnMvc21iL3NlcnZlci90cmFuc3BvcnRfdGNwLmM6MTk5Olx0XHRcdFx0XHUwMDI2S1NNQkRfVFJBTlModCktXHUwMDNlY29ubi1cdTAwM2VpbmV0X2FkZHIpO1xuZnMvc21iL3NlcnZlci90cmFuc3BvcnRfdGNwLmMtMjAwLSNlbHNlXG4tLVxuZnMvc21iL3NlcnZlci90cmFuc3BvcnRfdGNwLmMtMjAyLVx0XHRcdEtTTUJEX1RSQU5TKHQpLVx1MDAzZWNvbm4sIFwmIzM0O2tzbWJkOiVwSTRcJiMzNDssXG5mcy9zbWIvc2VydmVyL3RyYW5zcG9ydF90Y3AuYzoyMDM6XHRcdFx0XHUwMDI2S1NNQkRfVFJBTlModCktXHUwMDNlY29ubi1cdTAwM2VpbmV0X2FkZHIpO1xuZnMvc21iL3NlcnZlci90cmFuc3BvcnRfdGNwLmMtMjA0LSNlbmRpZlxuLS1cbmZzL3NtYi9zZXJ2ZXIvdHJhbnNwb3J0X3RjcC5jPTIxOT1zdGF0aWMgaW50IGtzbWJkX2t0aHJlYWRfZm4odm9pZCAqcClcbi0tXG5mcy9zbWIvc2VydmVyL3RyYW5zcG9ydF90Y3AuYy0yNjAtXHRcdFx0fSBlbHNlIGlmIChpbmV0X3NrKGNsaWVudF9zay1cdTAwM2VzayktXHUwMDNlaW5ldF9kYWRkciA9PVxuZnMvc21iL3NlcnZlci90cmFuc3BvcnRfdGNwLmM6MjYxOlx0XHRcdFx0IGNvbm4tXHUwMDNlaW5ldF9hZGRyKVxuZnMvc21iL3NlcnZlci90cmFuc3BvcnRfdGNwLmMtMjYyLVx0XHRcdFx0bWF4X2lwX2Nvbm5zJiM0MzsmIzQzOztcbi0tXG5mcy9zbWIvc2VydmVyL3RyYW5zcG9ydF90Y3AuYy0yNjQtXHRcdFx0aWYgKGluZXRfc2soY2xpZW50X3NrLVx1MDAzZXNrKS1cdTAwM2VpbmV0X2RhZGRyID09XG5mcy9zbWIvc2VydmVyL3RyYW5zcG9ydF90Y3AuYzoyNjU6XHRcdFx0ICAgIGNvbm4tXHUwMDNlaW5ldF9hZGRyKVxuZnMvc21iL3NlcnZlci90cmFuc3BvcnRfdGNwLmMtMjY2LVx0XHRcdFx0bWF4X2lwX2Nvbm5zJiM0MzsmIzQzOztcbi0tXG5pbmNsdWRlL2xpbnV4L2luZXQuaD01Nj1leHRlcm4gaW50IGluZXRfcHRvbl93aXRoX3Njb3BlKHN0cnVjdCBuZXQgKm5ldCwgdW5zaWduZWQgc2hvcnQgYWYsXG5pbmNsdWRlL2xpbnV4L2luZXQuaC01Ny1cdFx0Y29uc3QgY2hhciAqc3JjLCBjb25zdCBjaGFyICpwb3J0LCBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqYWRkcik7XG5pbmNsdWRlL2xpbnV4L2luZXQuaDo1ODpib29sIGluZXRfYWRkcl9pc19hbnkoc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKmFkZHIpO1xuaW5jbHVkZS9saW51eC9pbmV0LmgtNTktXG4tLVxuaW5jbHVkZS9saW51eC9pbmV0ZGV2aWNlLmg9MTgxPXN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldF9kZXZpY2UgKmlwX2Rldl9maW5kKHN0cnVjdCBuZXQgKm5ldCwgX19iZTMyIGFkZHIpXG4tLVxuaW5jbHVkZS9saW51eC9pbmV0ZGV2aWNlLmgtMTg1LVxuaW5jbHVkZS9saW51eC9pbmV0ZGV2aWNlLmg6MTg2OmludCBpbmV0X2FkZHJfb25saW5rKHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiwgX19iZTMyIGEsIF9fYmUzMiBiKTtcbmluY2x1ZGUvbGludXgvaW5ldGRldmljZS5oLTE4Ny1pbnQgZGV2aW5ldF9pb2N0bChzdHJ1Y3QgbmV0ICpuZXQsIHVuc2lnbmVkIGludCBjbWQsIHN0cnVjdCBpZnJlcSAqKTtcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci5oPTI2PU5GX0RST1BfUkVBU09OKHN0cnVjdCBza19idWZmICpza2IsIGVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbiwgdTMyIGVycilcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci5oLTM0LVxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIuaDozNTpzdGF0aWMgaW5saW5lIGludCBuZl9pbmV0X2FkZHJfY21wKGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciAqYTEsXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci5oOjM2Olx0XHRcdFx0ICAgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyICphMilcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyLmgtMzcte1xuLS1cbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyLmgtNTAtXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci5oOjUxOnN0YXRpYyBpbmxpbmUgdm9pZCBuZl9pbmV0X2FkZHJfbWFzayhjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgKmExLFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIuaDo1MjpcdFx0XHRcdCAgICAgdW5pb24gbmZfaW5ldF9hZGRyICpyZXN1bHQsXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci5oOjUzOlx0XHRcdFx0ICAgICBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgKm1hc2spXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci5oLTU0LXtcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaD0zMzM9ZXh0ZXJuIGludCBpcF9zZXRfZ2V0X2lwYWRkcjQoc3RydWN0IG5sYXR0ciAqbmxhLCAgX19iZTMyICppcGFkZHIpO1xuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0Lmg6MzM0OmV4dGVybiBpbnQgaXBfc2V0X2dldF9pcGFkZHI2KHN0cnVjdCBubGF0dHIgKm5sYSwgdW5pb24gbmZfaW5ldF9hZGRyICppcGFkZHIpO1xuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0LmgtMzM1LWV4dGVybiBzaXplX3QgaXBfc2V0X2VsZW1fbGVuKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaD01MjI9c3RhdGljIGlubGluZSB2b2lkXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaDo1MjM6bmZfaW5ldF9hZGRyX21hc2tfaW5wbGFjZSh1bmlvbiBuZl9pbmV0X2FkZHIgKmExLFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0Lmg6NTI0Olx0XHRcdCAgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyICptYXNrKVxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0LmgtNTI1LXtcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9wZnhsZW4uaC05LS8qIFByZWZpeGxlbiBtYXBzLCBieSBKYW4gRW5nZWxoYXJkdCAgKi9cbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L3BmeGxlbi5oOjEwOmV4dGVybiBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgaXBfc2V0X25ldG1hc2tfbWFwW107XG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9wZnhsZW4uaDoxMTpleHRlcm4gY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyIGlwX3NldF9ob3N0bWFza19tYXBbXTtcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L3BmeGxlbi5oLTEyLVxuLS1cbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L3BmeGxlbi5oPTQ1PXN0YXRpYyBpbmxpbmUgdm9pZFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvcGZ4bGVuLmg6NDY6aXA2X25ldG1hc2sodW5pb24gbmZfaW5ldF9hZGRyICppcCwgdTggcHJlZml4KVxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvcGZ4bGVuLmgtNDcte1xuLS1cbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzLmg9MzI9aW50IGdldF9oMjI1X2FkZHIoc3RydWN0IG5mX2Nvbm4gKmN0LCB1bnNpZ25lZCBjaGFyICpkYXRhLFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjMuaDozMzpcdFx0ICBUcmFuc3BvcnRBZGRyZXNzICp0YWRkciwgdW5pb24gbmZfaW5ldF9hZGRyICphZGRyLFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjMuaC0zNC1cdFx0ICBfX2JlMTYgKnBvcnQpO1xuLS1cbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzLmg9MzY9c3RydWN0IG5mY3RfaDMyM19uYXRfaG9va3Mge1xuLS1cbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzLmgtMzktXHRcdFx0ICAgICBIMjQ1X1RyYW5zcG9ydEFkZHJlc3MgKnRhZGRyLFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjMuaDo0MDpcdFx0XHQgICAgIHVuaW9uIG5mX2luZXRfYWRkciAqYWRkciwgX19iZTE2IHBvcnQpO1xuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjMuaC00MS1cdGludCAoKnNldF9oMjI1X2FkZHIpKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxuLS1cbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzLmgtNDMtXHRcdFx0ICAgICBUcmFuc3BvcnRBZGRyZXNzICp0YWRkcixcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzLmg6NDQ6XHRcdFx0ICAgICB1bmlvbiBuZl9pbmV0X2FkZHIgKmFkZHIsIF9fYmUxNiBwb3J0KTtcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzLmgtNDUtXHRpbnQgKCpzZXRfc2lnX2FkZHIpKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5oPTExMD1zdHJ1Y3QgbmZfbmF0X3NpcF9ob29rcyB7XG4tLVxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5oLTEzNi1cdFx0XHRcdCBlbnVtIHNkcF9oZWFkZXJfdHlwZXMgdGVybSxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuaDoxMzc6XHRcdFx0XHQgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyICphZGRyKTtcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuaC0xMzgtXG4tLVxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5oLTE1My1cdFx0XHRcdCAgICB1bnNpZ25lZCBpbnQgc2Rwb2ZmLFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5oOjE1NDpcdFx0XHRcdCAgICBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgKmFkZHIpO1xuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5oLTE1NS1cbi0tXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmgtMTY0LVx0XHRcdFx0ICB1bnNpZ25lZCBpbnQgbWVkaWFsZW4sXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmg6MTY1Olx0XHRcdFx0ICB1bmlvbiBuZl9pbmV0X2FkZHIgKnJ0cF9hZGRyKTtcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuaC0xNjYtfTtcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmg9MTY5PWludCBjdF9zaXBfcGFyc2VfcmVxdWVzdChjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsIGNvbnN0IGNoYXIgKmRwdHIsXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmgtMTcwLVx0XHRcdCB1bnNpZ25lZCBpbnQgZGF0YWxlbiwgdW5zaWduZWQgaW50ICptYXRjaG9mZixcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuaDoxNzE6XHRcdFx0IHVuc2lnbmVkIGludCAqbWF0Y2hsZW4sIHVuaW9uIG5mX2luZXRfYWRkciAqYWRkcixcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuaC0xNzItXHRcdFx0IF9fYmUxNiAqcG9ydCk7XG4tLVxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5oPTE3Nz1pbnQgY3Rfc2lwX3BhcnNlX2hlYWRlcl91cmkoY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LCBjb25zdCBjaGFyICpkcHRyLFxuLS1cbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuaC0xODAtXHRcdFx0ICAgIHVuc2lnbmVkIGludCAqbWF0Y2hvZmYsIHVuc2lnbmVkIGludCAqbWF0Y2hsZW4sXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmg6MTgxOlx0XHRcdCAgICB1bmlvbiBuZl9pbmV0X2FkZHIgKmFkZHIsIF9fYmUxNiAqcG9ydCk7XG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmgtMTgyLWludCBjdF9zaXBfcGFyc2VfYWRkcmVzc19wYXJhbShjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsIGNvbnN0IGNoYXIgKmRwdHIsXG4tLVxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5oLTE4NC1cdFx0XHQgICAgICAgY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgaW50ICptYXRjaG9mZixcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuaDoxODU6XHRcdFx0ICAgICAgIHVuc2lnbmVkIGludCAqbWF0Y2hsZW4sIHVuaW9uIG5mX2luZXRfYWRkciAqYWRkcixcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuaC0xODYtXHRcdFx0ICAgICAgIGJvb2wgZGVsaW0pO1xuLS1cbmluY2x1ZGUvbmV0L2luZXRfc29jay5oPTQzMz1zdGF0aWMgaW5saW5lIGJvb2wgaW5ldF9jYW5fbm9ubG9jYWxfYmluZChzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxuaW5jbHVkZS9uZXQvaW5ldF9zb2NrLmgtNDQwLVxuaW5jbHVkZS9uZXQvaW5ldF9zb2NrLmg6NDQxOnN0YXRpYyBpbmxpbmUgYm9vbCBpbmV0X2FkZHJfdmFsaWRfb3Jfbm9ubG9jYWwoc3RydWN0IG5ldCAqbmV0LFxuaW5jbHVkZS9uZXQvaW5ldF9zb2NrLmgtNDQyLVx0XHRcdFx0XHQgICAgICAgc3RydWN0IGluZXRfc29jayAqaW5ldCxcbi0tXG5pbmNsdWRlL25ldC9pcF92cy5oLTI0LSNpbmNsdWRlIFx1MDAzY25ldC9jaGVja3N1bS5oXHUwMDNlXG5pbmNsdWRlL25ldC9pcF92cy5oOjI1OiNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGZpbHRlci5oXHUwMDNlXHRcdC8qIGZvciB1bmlvbiBuZl9pbmV0X2FkZHIgKi9cbmluY2x1ZGUvbmV0L2lwX3ZzLmgtMjYtI2luY2x1ZGUgXHUwMDNjbGludXgvaXAuaFx1MDAzZVxuLS1cbmluY2x1ZGUvbmV0L2lwX3ZzLmg9NzA9c3RydWN0IGlwX3ZzX2lwaGRyIHtcbi0tXG5pbmNsdWRlL25ldC9pcF92cy5oLTc3LVx0X19zMzIgZmxhZ3M7XG5pbmNsdWRlL25ldC9pcF92cy5oOjc4Olx0dW5pb24gbmZfaW5ldF9hZGRyIHNhZGRyO1xuaW5jbHVkZS9uZXQvaXBfdnMuaDo3OTpcdHVuaW9uIG5mX2luZXRfYWRkciBkYWRkcjtcbmluY2x1ZGUvbmV0L2lwX3ZzLmgtODAtfTtcbi0tXG5pbmNsdWRlL25ldC9pcF92cy5oPTE2OD1pcF92c19pcGhfaWNtcChjb25zdCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaClcbi0tXG5pbmNsdWRlL25ldC9pcF92cy5oLTE3Mi1cbmluY2x1ZGUvbmV0L2lwX3ZzLmg6MTczOnN0YXRpYyBpbmxpbmUgdm9pZCBpcF92c19hZGRyX2NvcHkoaW50IGFmLCB1bmlvbiBuZl9pbmV0X2FkZHIgKmRzdCxcbmluY2x1ZGUvbmV0L2lwX3ZzLmg6MTc0Olx0XHRcdFx0ICAgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyICpzcmMpXG5pbmNsdWRlL25ldC9pcF92cy5oLTE3NS17XG4tLVxuaW5jbHVkZS9uZXQvaXBfdnMuaC0xODMtXG5pbmNsdWRlL25ldC9pcF92cy5oOjE4NDpzdGF0aWMgaW5saW5lIHZvaWQgaXBfdnNfYWRkcl9zZXQoaW50IGFmLCB1bmlvbiBuZl9pbmV0X2FkZHIgKmRzdCxcbmluY2x1ZGUvbmV0L2lwX3ZzLmg6MTg1Olx0XHRcdFx0ICBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgKnNyYylcbmluY2x1ZGUvbmV0L2lwX3ZzLmgtMTg2LXtcbi0tXG5pbmNsdWRlL25ldC9pcF92cy5oLTE5OC1cbmluY2x1ZGUvbmV0L2lwX3ZzLmg6MTk5OnN0YXRpYyBpbmxpbmUgaW50IGlwX3ZzX2FkZHJfZXF1YWwoaW50IGFmLCBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgKmEsXG5pbmNsdWRlL25ldC9pcF92cy5oOjIwMDpcdFx0XHRcdCAgIGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciAqYilcbmluY2x1ZGUvbmV0L2lwX3ZzLmgtMjAxLXtcbi0tXG5pbmNsdWRlL25ldC9pcF92cy5oPTIxND1zdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKmlwX3ZzX2RiZ19hZGRyKGludCBhZiwgY2hhciAqYnVmLCBzaXplX3QgYnVmX2xlbixcbmluY2x1ZGUvbmV0L2lwX3ZzLmg6MjE1Olx0XHRcdFx0XHQgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyICphZGRyLFxuaW5jbHVkZS9uZXQvaXBfdnMuaC0yMTYtXHRcdFx0XHRcdCBpbnQgKmlkeClcbi0tXG5pbmNsdWRlL25ldC9pcF92cy5oPTcwND11MzIgaXBfdnNfcmh0X2hhc2hfbGluZm8oc3RydWN0IGlwX3ZzX3JodCAqdCwgaW50IGFmLFxuaW5jbHVkZS9uZXQvaXBfdnMuaDo3MDU6XHRcdFx0IGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciAqYWRkciwgdTMyIHYxLCB1MzIgdjIpO1xuaW5jbHVkZS9uZXQvaXBfdnMuaC03MDYtXG4tLVxuaW5jbHVkZS9uZXQvaXBfdnMuaD03ODc9c3RydWN0IGlwX3ZzX2Nvbm5fcGFyYW0ge1xuaW5jbHVkZS9uZXQvaXBfdnMuaC03ODgtXHRzdHJ1Y3QgbmV0bnNfaXB2c1x0XHQqaXB2cztcbmluY2x1ZGUvbmV0L2lwX3ZzLmg6Nzg5Olx0Y29uc3QgdW5pb24gbmZfaW5ldF9hZGRyXHQqY2FkZHI7XG5pbmNsdWRlL25ldC9pcF92cy5oOjc5MDpcdGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkclx0KnZhZGRyO1xuaW5jbHVkZS9uZXQvaXBfdnMuaC03OTEtXHRfX2JlMTZcdFx0XHRcdGNwb3J0O1xuLS1cbmluY2x1ZGUvbmV0L2lwX3ZzLmg9ODA5PXN0cnVjdCBpcF92c19jb25uIHtcbi0tXG5pbmNsdWRlL25ldC9pcF92cy5oLTgzNC1cbmluY2x1ZGUvbmV0L2lwX3ZzLmg6ODM1Olx0dW5pb24gbmZfaW5ldF9hZGRyICAgICAgY2FkZHI7ICAgICAgICAgIC8qIGNsaWVudCBhZGRyZXNzICovXG5pbmNsdWRlL25ldC9pcF92cy5oOjgzNjpcdHVuaW9uIG5mX2luZXRfYWRkciAgICAgIHZhZGRyOyAgICAgICAgICAvKiB2aXJ0dWFsIGFkZHJlc3MgKi9cbmluY2x1ZGUvbmV0L2lwX3ZzLmgtODM3LVx0LyogOTYvMTI4ICovXG5pbmNsdWRlL25ldC9pcF92cy5oLTgzOC1cbmluY2x1ZGUvbmV0L2lwX3ZzLmg6ODM5Olx0dW5pb24gbmZfaW5ldF9hZGRyICAgICAgZGFkZHI7ICAgICAgICAgIC8qIGRlc3RpbmF0aW9uIGFkZHJlc3MgKi9cbmluY2x1ZGUvbmV0L2lwX3ZzLmgtODQwLVx0X191MzJcdFx0XHRmd21hcms7XHRcdC8qIEZpcmUgd2FsbCBtYXJrIGZyb20gc2tiICovXG4tLVxuaW5jbHVkZS9uZXQvaXBfdnMuaD04ODY9c3RydWN0IGlwX3ZzX3NlcnZpY2VfdXNlcl9rZXJuIHtcbi0tXG5pbmNsdWRlL25ldC9pcF92cy5oLTg4OS1cdHUxNlx0XHRcdHByb3RvY29sO1xuaW5jbHVkZS9uZXQvaXBfdnMuaDo4OTA6XHR1bmlvbiBuZl9pbmV0X2FkZHJcdGFkZHI7XHRcdC8qIHZpcnR1YWwgaXAgYWRkcmVzcyAqL1xuaW5jbHVkZS9uZXQvaXBfdnMuaC04OTEtXHRfX2JlMTZcdFx0XHRwb3J0O1xuLS1cbmluY2x1ZGUvbmV0L2lwX3ZzLmg9OTAzPXN0cnVjdCBpcF92c19kZXN0X3VzZXJfa2VybiB7XG5pbmNsdWRlL25ldC9pcF92cy5oLTkwNC1cdC8qIGRlc3RpbmF0aW9uIHNlcnZlciBhZGRyZXNzICovXG5pbmNsdWRlL25ldC9pcF92cy5oOjkwNTpcdHVuaW9uIG5mX2luZXRfYWRkclx0YWRkcjtcbmluY2x1ZGUvbmV0L2lwX3ZzLmgtOTA2LVx0X19iZTE2XHRcdFx0cG9ydDtcbi0tXG5pbmNsdWRlL25ldC9pcF92cy5oPTkyOT1zdHJ1Y3QgaXBfdnNfc2VydmljZSB7XG4tLVxuaW5jbHVkZS9uZXQvaXBfdnMuaC05MzQtXG5pbmNsdWRlL25ldC9pcF92cy5oOjkzNTpcdHVuaW9uIG5mX2luZXRfYWRkclx0YWRkcjtcdCAgLyogSVAgYWRkcmVzcyBmb3IgdmlydHVhbCBzZXJ2aWNlICovXG5pbmNsdWRlL25ldC9pcF92cy5oLTkzNi1cdF9fdTMyICAgICAgICAgICAgICAgICAgIGZ3bWFyazsgICAvKiBmaXJld2FsbCBtYXJrIG9mIHRoZSBzZXJ2aWNlICovXG4tLVxuaW5jbHVkZS9uZXQvaXBfdnMuaD05NjE9c3RydWN0IGlwX3ZzX2Rlc3RfZHN0IHtcbi0tXG5pbmNsdWRlL25ldC9pcF92cy5oLTk2My1cdHUzMlx0XHRcdGRzdF9jb29raWU7XG5pbmNsdWRlL25ldC9pcF92cy5oOjk2NDpcdHVuaW9uIG5mX2luZXRfYWRkclx0ZHN0X3NhZGRyO1xuaW5jbHVkZS9uZXQvaXBfdnMuaC05NjUtXHRzdHJ1Y3QgcmN1X2hlYWRcdFx0cmN1X2hlYWQ7XG4tLVxuaW5jbHVkZS9uZXQvaXBfdnMuaD05NzE9c3RydWN0IGlwX3ZzX2Rlc3Qge1xuLS1cbmluY2x1ZGUvbmV0L2lwX3ZzLmgtOTc2LVx0X19iZTE2XHRcdFx0cG9ydDtcdFx0LyogcG9ydCBudW1iZXIgb2YgdGhlIHNlcnZlciAqL1xuaW5jbHVkZS9uZXQvaXBfdnMuaDo5Nzc6XHR1bmlvbiBuZl9pbmV0X2FkZHJcdGFkZHI7XHRcdC8qIElQIGFkZHJlc3Mgb2YgdGhlIHNlcnZlciAqL1xuaW5jbHVkZS9uZXQvaXBfdnMuaC05NzgtXHR2b2xhdGlsZSB1bnNpZ25lZCBpbnRcdGZsYWdzO1x0XHQvKiBkZXN0IHN0YXR1cyBmbGFncyAqL1xuLS1cbmluY2x1ZGUvbmV0L2lwX3ZzLmgtMTAwNC1cdF9fYmUxNlx0XHRcdHZwb3J0O1x0XHQvKiB2aXJ0dWFsIHBvcnQgbnVtYmVyICovXG5pbmNsdWRlL25ldC9pcF92cy5oOjEwMDU6XHR1bmlvbiBuZl9pbmV0X2FkZHJcdHZhZGRyO1x0XHQvKiB2aXJ0dWFsIElQIGFkZHJlc3MgKi9cbmluY2x1ZGUvbmV0L2lwX3ZzLmgtMTAwNi1cdF9fdTMyXHRcdFx0dmZ3bWFyaztcdC8qIGZpcmV3YWxsIG1hcmsgb2Ygc2VydmljZSAqL1xuLS1cbmluY2x1ZGUvbmV0L2lwX3ZzLmg9MTEzOD1zdHJ1Y3QgaXB2c19zeW5jX2RhZW1vbl9jZmcge1xuaW5jbHVkZS9uZXQvaXBfdnMuaDoxMTM5Olx0dW5pb24gbmZfaW5ldF9hZGRyXHRtY2FzdF9ncm91cDtcbmluY2x1ZGUvbmV0L2lwX3ZzLmgtMTE0MC1cdGludFx0XHRcdHN5bmNpZDtcbi0tXG5pbmNsdWRlL25ldC9pcF92cy5oPTE2MzE9c3RhdGljIGlubGluZSB2b2lkIGlwX3ZzX2Nvbm5fZmlsbF9wYXJhbShzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgaW50IGFmLCBpbnQgcHJvdG9jb2wsXG5pbmNsdWRlL25ldC9pcF92cy5oOjE2MzI6XHRcdFx0XHRcdCBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgKmNhZGRyLFxuaW5jbHVkZS9uZXQvaXBfdnMuaC0xNjMzLVx0XHRcdFx0XHQgX19iZTE2IGNwb3J0LFxuaW5jbHVkZS9uZXQvaXBfdnMuaDoxNjM0Olx0XHRcdFx0XHQgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyICp2YWRkcixcbmluY2x1ZGUvbmV0L2lwX3ZzLmgtMTYzNS1cdFx0XHRcdFx0IF9fYmUxNiB2cG9ydCxcbi0tXG5pbmNsdWRlL25ldC9pcF92cy5oPTE2OTc9c3RydWN0IGlwX3ZzX2Nvbm4gKmlwX3ZzX2Nvbm5fbmV3KGNvbnN0IHN0cnVjdCBpcF92c19jb25uX3BhcmFtICpwLCBpbnQgZGVzdF9hZixcbmluY2x1ZGUvbmV0L2lwX3ZzLmg6MTY5ODpcdFx0XHRcdCAgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyICpkYWRkcixcbmluY2x1ZGUvbmV0L2lwX3ZzLmgtMTY5OS1cdFx0XHRcdCAgX19iZTE2IGRwb3J0LCB1bnNpZ25lZCBpbnQgZmxhZ3MsXG4tLVxuaW5jbHVkZS9uZXQvaXBfdnMuaD0xODY5PWlwX3ZzX3NlcnZpY2VfZmluZChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgaW50IGFmLCBfX3UzMiBmd21hcmssIF9fdTE2IHByb3RvY29sLFxuaW5jbHVkZS9uZXQvaXBfdnMuaDoxODcwOlx0XHQgIGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciAqdmFkZHIsIF9fYmUxNiB2cG9ydCk7XG5pbmNsdWRlL25ldC9pcF92cy5oLTE4NzEtXG5pbmNsdWRlL25ldC9pcF92cy5oPTE4NzI9Ym9vbCBpcF92c19oYXNfcmVhbF9zZXJ2aWNlKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBpbnQgYWYsIF9fdTE2IHByb3RvY29sLFxuaW5jbHVkZS9uZXQvaXBfdnMuaDoxODczOlx0XHRcdCAgICBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgKmRhZGRyLCBfX2JlMTYgZHBvcnQpO1xuaW5jbHVkZS9uZXQvaXBfdnMuaC0xODc0LVxuLS1cbmluY2x1ZGUvbmV0L2lwX3ZzLmg9MTg3Nj1pcF92c19maW5kX3JlYWxfc2VydmljZShzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgaW50IGFmLCBfX3UxNiBwcm90b2NvbCxcbmluY2x1ZGUvbmV0L2lwX3ZzLmg6MTg3NzpcdFx0XHRjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgKmRhZGRyLCBfX2JlMTYgZHBvcnQpO1xuaW5jbHVkZS9uZXQvaXBfdnMuaC0xODc4LXN0cnVjdCBpcF92c19kZXN0ICppcF92c19maW5kX3R1bm5lbChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgaW50IGFmLFxuaW5jbHVkZS9uZXQvaXBfdnMuaDoxODc5Olx0XHRcdFx0ICAgICBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgKmRhZGRyLFxuaW5jbHVkZS9uZXQvaXBfdnMuaC0xODgwLVx0XHRcdFx0ICAgICBfX2JlMTYgdHVuX3BvcnQpO1xuLS1cbmluY2x1ZGUvbmV0L2lwX3ZzLmg9MTg4OT1pcF92c19maW5kX2Rlc3Qoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGludCBzdmNfYWYsIGludCBkZXN0X2FmLFxuaW5jbHVkZS9uZXQvaXBfdnMuaDoxODkwOlx0XHRjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgKmRhZGRyLCBfX2JlMTYgZHBvcnQsXG5pbmNsdWRlL25ldC9pcF92cy5oOjE4OTE6XHRcdGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciAqdmFkZHIsIF9fYmUxNiB2cG9ydCxcbmluY2x1ZGUvbmV0L2lwX3ZzLmgtMTg5Mi1cdFx0X191MTYgcHJvdG9jb2wsIF9fdTMyIGZ3bWFyaywgX191MzIgZmxhZ3MpO1xuLS1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0Lmg9MTg9c3RydWN0IG5mX2Nvbm50cmFja19leHBlY3Qge1xuLS1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmgtNjQtI2lmIElTX0VOQUJMRUQoQ09ORklHX05GX05BVClcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0Lmg6NjU6XHR1bmlvbiBuZl9pbmV0X2FkZHIgc2F2ZWRfYWRkcjtcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmgtNjYtXHQvKiBUaGlzIGlzIHRoZSBvcmlnaW5hbCBwZXItcHJvdG8gcGFydCwgdXNlZCB0byBtYXAgdGhlXG4tLVxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuaD0xNTQ9dm9pZCBuZl9jdF9leHBlY3RfaW5pdChzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqLCB1bnNpZ25lZCBpbnQsIHVfaW50OF90LFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuaDoxNTU6XHRcdCAgICAgICBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgKixcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0Lmg6MTU2Olx0XHQgICAgICAgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyICosXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5oLTE1Ny1cdFx0ICAgICAgIHVfaW50OF90LCBjb25zdCBfX2JlMTYgKiwgY29uc3QgX19iZTE2ICopO1xuLS1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDRwcm90by5oPTc5PWludCBuZl9jb25udHJhY2tfaW5ldF9lcnJvcihzdHJ1Y3QgbmZfY29ubiAqdG1wbCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2w0cHJvdG8uaC04Mi1cdFx0XHQgICAgdTggbDRwcm90byxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDRwcm90by5oOjgzOlx0XHRcdCAgICB1bmlvbiBuZl9pbmV0X2FkZHIgKm91dGVyX2RhZGRyKTtcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDRwcm90by5oLTg0LVxuLS1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGUuaC0yNS1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGUuaDoyNjojZGVmaW5lIE5GX0NUX1RVUExFX0wzU0laRVx0QVJSQVlfU0laRSgoKHVuaW9uIG5mX2luZXRfYWRkciAqKU5VTEwpLVx1MDAzZWFsbClcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGUuaC0yNy1cbi0tXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3R1cGxlLmg9Mjk9c3RydWN0IG5mX2Nvbm50cmFja19tYW4ge1xuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190dXBsZS5oOjMwOlx0dW5pb24gbmZfaW5ldF9hZGRyIHUzO1xuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190dXBsZS5oLTMxLVx0dW5pb24gbmZfY29ubnRyYWNrX21hbl9wcm90byB1O1xuLS1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGUuaD0zNz1zdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlIHtcbi0tXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3R1cGxlLmgtNDEtXHRzdHJ1Y3Qge1xuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190dXBsZS5oOjQyOlx0XHR1bmlvbiBuZl9pbmV0X2FkZHIgdTM7XG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3R1cGxlLmgtNDMtXHRcdHVuaW9uIHtcbi0tXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3R1cGxlLmg9Nzg9c3RydWN0IG5mX2Nvbm50cmFja190dXBsZV9tYXNrIHtcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGUuaC03OS1cdHN0cnVjdCB7XG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3R1cGxlLmg6ODA6XHRcdHVuaW9uIG5mX2luZXRfYWRkciB1MztcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGUuaC04MS1cdFx0dW5pb24gbmZfY29ubnRyYWNrX21hbl9wcm90byB1O1xuLS1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGUuaD0xMjc9c3RhdGljIGlubGluZSBib29sIF9fbmZfY3RfdHVwbGVfc3JjX2VxdWFsKGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnQxLFxuLS1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGUuaC0xMjkte1xuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190dXBsZS5oOjEzMDpcdHJldHVybiAobmZfaW5ldF9hZGRyX2NtcChcdTAwMjZ0MS1cdTAwM2VzcmMudTMsIFx1MDAyNnQyLVx1MDAzZXNyYy51MykgXHUwMDI2XHUwMDI2XG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3R1cGxlLmgtMTMxLVx0XHR0MS1cdTAwM2VzcmMudS5hbGwgPT0gdDItXHUwMDNlc3JjLnUuYWxsIFx1MDAyNlx1MDAyNlxuLS1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGUuaD0xMzU9c3RhdGljIGlubGluZSBib29sIF9fbmZfY3RfdHVwbGVfZHN0X2VxdWFsKGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnQxLFxuLS1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGUuaC0xMzcte1xuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190dXBsZS5oOjEzODpcdHJldHVybiAobmZfaW5ldF9hZGRyX2NtcChcdTAwMjZ0MS1cdTAwM2Vkc3QudTMsIFx1MDAyNnQyLVx1MDAzZWRzdC51MykgXHUwMDI2XHUwMDI2XG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3R1cGxlLmgtMTM5LVx0XHR0MS1cdTAwM2Vkc3QudS5hbGwgPT0gdDItXHUwMDNlZHN0LnUuYWxsIFx1MDAyNlx1MDAyNlxuLS1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGUuaD0xNTE9bmZfY3RfdHVwbGVfbWFza19lcXVhbChjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlX21hc2sgKm0xLFxuLS1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGUuaC0xNTMte1xuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190dXBsZS5oOjE1NDpcdHJldHVybiAobmZfaW5ldF9hZGRyX2NtcChcdTAwMjZtMS1cdTAwM2VzcmMudTMsIFx1MDAyNm0yLVx1MDAzZXNyYy51MykgXHUwMDI2XHUwMDI2XG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3R1cGxlLmgtMTU1LVx0XHRtMS1cdTAwM2VzcmMudS5hbGwgPT0gbTItXHUwMDNlc3JjLnUuYWxsKTtcbi0tXG5pbmNsdWRlL25ldC9uZXRucy9pcHY0Lmg9NTU9c3RydWN0IG5ldG5zX2lwdjQge1xuLS1cbmluY2x1ZGUvbmV0L25ldG5zL2lwdjQuaC0yOTktXHRzaXBoYXNoX2tleV90XHRpcF9pZF9rZXk7XG5pbmNsdWRlL25ldC9uZXRucy9pcHY0Lmg6MzAwOlx0c3RydWN0IGhsaXN0X2hlYWRcdCppbmV0X2FkZHJfbHN0O1xuaW5jbHVkZS9uZXQvbmV0bnMvaXB2NC5oLTMwMS1cdHN0cnVjdCBkZWxheWVkX3dvcmtcdGFkZHJfY2hrX3dvcms7XG4tLVxuaW5jbHVkZS9uZXQvcm91dGUuaD0yNTE9dm9pZCBpcF9ydF9zZW5kX3JlZGlyZWN0KHN0cnVjdCBza19idWZmICpza2IpO1xuaW5jbHVkZS9uZXQvcm91dGUuaC0yNTItXG5pbmNsdWRlL25ldC9yb3V0ZS5oOjI1Mzp1bnNpZ25lZCBpbnQgaW5ldF9hZGRyX3R5cGUoc3RydWN0IG5ldCAqbmV0LCBfX2JlMzIgYWRkcik7XG5pbmNsdWRlL25ldC9yb3V0ZS5oOjI1NDp1bnNpZ25lZCBpbnQgaW5ldF9hZGRyX3R5cGVfdGFibGUoc3RydWN0IG5ldCAqbmV0LCBfX2JlMzIgYWRkciwgdTMyIHRiX2lkKTtcbmluY2x1ZGUvbmV0L3JvdXRlLmgtMjU1LXVuc2lnbmVkIGludCBpbmV0X2Rldl9hZGRyX3R5cGUoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuaW5jbHVkZS9uZXQvcm91dGUuaC0yNTYtXHRcdFx0XHRfX2JlMzIgYWRkcik7XG5pbmNsdWRlL25ldC9yb3V0ZS5oOjI1Nzp1bnNpZ25lZCBpbnQgaW5ldF9hZGRyX3R5cGVfZGV2X3RhYmxlKHN0cnVjdCBuZXQgKm5ldCxcbmluY2x1ZGUvbmV0L3JvdXRlLmgtMjU4LVx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyLmg9NTg9ZW51bSB7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci5oLTcxLVxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci5oOjcyOnVuaW9uIG5mX2luZXRfYWRkciB7XG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyLmgtNzMtXHRfX3UzMlx0XHRhbGxbNF07XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci9uZl9uYXQuaD0zOD1zdHJ1Y3QgbmZfbmF0X3JhbmdlIHtcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZfbmF0LmgtMzktXHR1bnNpZ25lZCBpbnRcdFx0XHRmbGFncztcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZfbmF0Lmg6NDA6XHR1bmlvbiBuZl9pbmV0X2FkZHJcdFx0bWluX2FkZHI7XG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mX25hdC5oOjQxOlx0dW5pb24gbmZfaW5ldF9hZGRyXHRcdG1heF9hZGRyO1xuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci9uZl9uYXQuaC00Mi1cdHVuaW9uIG5mX2Nvbm50cmFja19tYW5fcHJvdG9cdG1pbl9wcm90bztcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mX25hdC5oPTQ2PXN0cnVjdCBuZl9uYXRfcmFuZ2UyIHtcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZfbmF0LmgtNDctXHR1bnNpZ25lZCBpbnRcdFx0XHRmbGFncztcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZfbmF0Lmg6NDg6XHR1bmlvbiBuZl9pbmV0X2FkZHJcdFx0bWluX2FkZHI7XG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mX25hdC5oOjQ5Olx0dW5pb24gbmZfaW5ldF9hZGRyXHRcdG1heF9hZGRyO1xuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci9uZl9uYXQuaC01MC1cdHVuaW9uIG5mX2Nvbm50cmFja19tYW5fcHJvdG9cdG1pbl9wcm90bztcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X0hNQVJLLmg9NDA9c3RydWN0IHh0X2htYXJrX2luZm8ge1xuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci94dF9ITUFSSy5oOjQxOlx0dW5pb24gbmZfaW5ldF9hZGRyXHRzcmNfbWFzaztcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIveHRfSE1BUksuaDo0MjpcdHVuaW9uIG5mX2luZXRfYWRkclx0ZHN0X21hc2s7XG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X0hNQVJLLmgtNDMtXHR1bmlvbiBobWFya19wb3J0c1x0cG9ydF9tYXNrO1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIveHRfVEVFLmg9Nz1zdHJ1Y3QgeHRfdGVlX3RnaW5mbyB7XG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X1RFRS5oOjg6XHR1bmlvbiBuZl9pbmV0X2FkZHIgZ3c7XG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X1RFRS5oLTktXHRjaGFyIG9pZlsxNl07XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci94dF9UUFJPWFkuaD0xOD1zdHJ1Y3QgeHRfdHByb3h5X3RhcmdldF9pbmZvX3YxIHtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X1RQUk9YWS5oLTIwLVx0X191MzIgbWFya192YWx1ZTtcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIveHRfVFBST1hZLmg6MjE6XHR1bmlvbiBuZl9pbmV0X2FkZHIgbGFkZHI7XG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X1RQUk9YWS5oLTIyLVx0X19iZTE2IGxwb3J0O1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIveHRfY29ubmxpbWl0Lmg9MTU9c3RydWN0IHh0X2Nvbm5saW1pdF9pbmZvIHtcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIveHRfY29ubmxpbWl0LmgtMTYtXHR1bmlvbiB7XG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X2Nvbm5saW1pdC5oOjE3Olx0XHR1bmlvbiBuZl9pbmV0X2FkZHIgbWFzaztcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIveHRfY29ubmxpbWl0LmgtMTgtI2lmbmRlZiBfX0tFUk5FTF9fXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci94dF9jb25udHJhY2suaD0zOD1zdHJ1Y3QgeHRfY29ubnRyYWNrX210aW5mbzEge1xuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci94dF9jb25udHJhY2suaDozOTpcdHVuaW9uIG5mX2luZXRfYWRkciBvcmlnc3JjX2FkZHIsIG9yaWdzcmNfbWFzaztcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIveHRfY29ubnRyYWNrLmg6NDA6XHR1bmlvbiBuZl9pbmV0X2FkZHIgb3JpZ2RzdF9hZGRyLCBvcmlnZHN0X21hc2s7XG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X2Nvbm50cmFjay5oOjQxOlx0dW5pb24gbmZfaW5ldF9hZGRyIHJlcGxzcmNfYWRkciwgcmVwbHNyY19tYXNrO1xuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci94dF9jb25udHJhY2suaDo0MjpcdHVuaW9uIG5mX2luZXRfYWRkciByZXBsZHN0X2FkZHIsIHJlcGxkc3RfbWFzaztcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIveHRfY29ubnRyYWNrLmgtNDMtXHRfX3UzMiBleHBpcmVzX21pbiwgZXhwaXJlc19tYXg7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci94dF9jb25udHJhY2suaD01MT1zdHJ1Y3QgeHRfY29ubnRyYWNrX210aW5mbzIge1xuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci94dF9jb25udHJhY2suaDo1MjpcdHVuaW9uIG5mX2luZXRfYWRkciBvcmlnc3JjX2FkZHIsIG9yaWdzcmNfbWFzaztcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIveHRfY29ubnRyYWNrLmg6NTM6XHR1bmlvbiBuZl9pbmV0X2FkZHIgb3JpZ2RzdF9hZGRyLCBvcmlnZHN0X21hc2s7XG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X2Nvbm50cmFjay5oOjU0Olx0dW5pb24gbmZfaW5ldF9hZGRyIHJlcGxzcmNfYWRkciwgcmVwbHNyY19tYXNrO1xuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci94dF9jb25udHJhY2suaDo1NTpcdHVuaW9uIG5mX2luZXRfYWRkciByZXBsZHN0X2FkZHIsIHJlcGxkc3RfbWFzaztcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIveHRfY29ubnRyYWNrLmgtNTYtXHRfX3UzMiBleHBpcmVzX21pbiwgZXhwaXJlc19tYXg7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci94dF9jb25udHJhY2suaD02ND1zdHJ1Y3QgeHRfY29ubnRyYWNrX210aW5mbzMge1xuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci94dF9jb25udHJhY2suaDo2NTpcdHVuaW9uIG5mX2luZXRfYWRkciBvcmlnc3JjX2FkZHIsIG9yaWdzcmNfbWFzaztcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIveHRfY29ubnRyYWNrLmg6NjY6XHR1bmlvbiBuZl9pbmV0X2FkZHIgb3JpZ2RzdF9hZGRyLCBvcmlnZHN0X21hc2s7XG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X2Nvbm50cmFjay5oOjY3Olx0dW5pb24gbmZfaW5ldF9hZGRyIHJlcGxzcmNfYWRkciwgcmVwbHNyY19tYXNrO1xuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci94dF9jb25udHJhY2suaDo2ODpcdHVuaW9uIG5mX2luZXRfYWRkciByZXBsZHN0X2FkZHIsIHJlcGxkc3RfbWFzaztcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIveHRfY29ubnRyYWNrLmgtNjktXHRfX3UzMiBleHBpcmVzX21pbiwgZXhwaXJlc19tYXg7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci94dF9pcHJhbmdlLmg9MTU9c3RydWN0IHh0X2lwcmFuZ2VfbXRpbmZvIHtcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIveHRfaXByYW5nZS5oOjE2Olx0dW5pb24gbmZfaW5ldF9hZGRyIHNyY19taW4sIHNyY19tYXg7XG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X2lwcmFuZ2UuaDoxNzpcdHVuaW9uIG5mX2luZXRfYWRkciBkc3RfbWluLCBkc3RfbWF4O1xuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci94dF9pcHJhbmdlLmgtMTgtXHRfX3U4IGZsYWdzO1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIveHRfaXB2cy5oPTIwPXN0cnVjdCB4dF9pcHZzX210aW5mbyB7XG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X2lwdnMuaDoyMTpcdHVuaW9uIG5mX2luZXRfYWRkclx0dmFkZHIsIHZtYXNrO1xuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci94dF9pcHZzLmgtMjItXHRfX2JlMTZcdFx0XHR2cG9ydDtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X3BvbGljeS5oPTQwPXN0cnVjdCB4dF9wb2xpY3lfZWxlbSB7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci94dF9wb2xpY3kuaC00My1cdFx0c3RydWN0IHtcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIveHRfcG9saWN5Lmg6NDQ6XHRcdFx0dW5pb24gbmZfaW5ldF9hZGRyIHNhZGRyO1xuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci94dF9wb2xpY3kuaDo0NTpcdFx0XHR1bmlvbiBuZl9pbmV0X2FkZHIgc21hc2s7XG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X3BvbGljeS5oOjQ2Olx0XHRcdHVuaW9uIG5mX2luZXRfYWRkciBkYWRkcjtcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIveHRfcG9saWN5Lmg6NDc6XHRcdFx0dW5pb24gbmZfaW5ldF9hZGRyIGRtYXNrO1xuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci94dF9wb2xpY3kuaC00OC1cdFx0fTtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X3JlY2VudC5oPTM3PXN0cnVjdCB4dF9yZWNlbnRfbXRpbmZvX3YxIHtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X3JlY2VudC5oLTQzLVx0X191OCBzaWRlO1xuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci94dF9yZWNlbnQuaDo0NDpcdHVuaW9uIG5mX2luZXRfYWRkciBtYXNrO1xuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci94dF9yZWNlbnQuaC00NS19O1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X05QVC5oPTg9c3RydWN0IGlwNnRfbnB0X3RnaW5mbyB7XG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9OUFQuaDo5Olx0dW5pb24gbmZfaW5ldF9hZGRyXHRzcmNfcGZ4O1xuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfTlBULmg6MTA6XHR1bmlvbiBuZl9pbmV0X2FkZHJcdGRzdF9wZng7XG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9OUFQuaC0xMS1cdF9fdThcdFx0XHRzcmNfcGZ4X2xlbjtcbi0tXG5uZXQvY29yZS91dGlscy5jPTQwMT1FWFBPUlRfU1lNQk9MKGluZXRfcHRvbl93aXRoX3Njb3BlKTtcbm5ldC9jb3JlL3V0aWxzLmMtNDAyLVxubmV0L2NvcmUvdXRpbHMuYzo0MDM6Ym9vbCBpbmV0X2FkZHJfaXNfYW55KHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICphZGRyKVxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMTc5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzUyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBgbmV0Y29uc29sZWAgSVAgQWRkcmVzcyBIYW5kbGluZyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHJlZmFjdG9yaW5nIGhvdyBgbmV0Y29uc29sZWAgaGFuZGxlcyBJUCBhZGRyZXNzZXMuIFByZXZpb3VzbHksIHdlIHdlcmUgdXNpbmcgYSBgdW5pb24gaW5ldF9hZGRyYCBhbmQgYSBzZXBhcmF0ZSBib29sZWFuIGBpcHY2YC4gTm93LCB3ZSYjMzk7cmUgdXNpbmcgYSBgc3RydWN0IGluZXRfYWRkcmAgd2hpY2ggaW5jbHVkZXMgYSBmYW1pbHkgZmllbGQgYW5kIHRoZSB1bmlvbi4gSXQgbG9va3MgbGlrZSB0aGUgYHVuaW9uIGluZXRfYWRkcmAgZGVmaW5pdGlvbiBoYXMgYmVlbiBtb3ZlZCBmcm9tIHRoZSBoZWFkZXIgdG8gdGhlIHNvdXJjZSBmaWxlLCB3aGljaCBtYWtlcyBzZW5zZSB0byBlbmNhcHN1bGF0ZSB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscy4KCkkgc2VlIHRoZXkmIzM5O3ZlIHVwZGF0ZWQgdGhlIGNvbmZpZ2ZzIHNob3cgZnVuY3Rpb25zLCBgbG9jYWxfaXBfc2hvd2AgYW5kIGByZW1vdGVfaXBfc2hvd2AuIFRoZXkmIzM5O3JlIG5vdyBjaGVja2luZyB0aGUgYGZhbWlseWAgZmllbGQgb2YgdGhlIGBpbmV0X2FkZHJgIHRvIGRldGVybWluZSB0aGUgSVAgdmVyc2lvbiBhbmQgdXNpbmcgYCVwSTRgIG9yIGAlcEk2Y2AgaW4gYHN5c2ZzX2VtaXRgLiBUaGlzIHNlZW1zIHNhZmU7IG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWtzIGFyZSBwcmVzZW50IHNpbmNlIHRoZSBvdXRwdXQgaXMgZm9ybWF0dGVkIGFzIGEgc3RyaW5nLgoKTm93LCBsZXQmIzM5O3MgY29uc2lkZXIgYG5ldHBvbGxfc2VuZF91ZHBgLiBUaGlzIGlzIHdoZXJlIHRoZSBJUCBhZGRyZXNzZXMgYXJlIHVzZWQgdG8gY29uc3RydWN0IHRoZSBVRFAgcGFja2V0cy4gVGhlcmUgYXJlIGEgZmV3IGNoZWNrcyBsaWtlIGBudC0mZ3Q7cmVtb3RlX2lwLmZhbWlseSA9PSBBRl9JTkVUNmAgdG8gc2VsZWN0IHRoZSByaWdodCBjaGVja3N1bSBvciBwcm90b2NvbC4gSWYgYG50LSZndDtyZW1vdGVfaXAuZmFtaWx5YCBpcyBgQUZfVU5TUEVDYCwgaXQgZmFsbHMgYmFjayB0byBJUHY0LiBCdXQgYG5ldGNvbnNfbmV0cG9sbF9zZXR1cGAgY2hlY2tzIHRvIG1ha2Ugc3VyZSBgcmVtb3RlX2lwYCBoYXMgYmVlbiBjb25maWd1cmVkIHdpdGggYW4gYWRkcmVzcyBhbmQgZmFtaWx5LCBhbmQgdGhlIHJlbW90ZSBmYW1pbHkgbXVzdCBtYXRjaCB0aGUgbG9jYWwgSVAgYWRkcmVzcyBmYW1pbHkuIElmIGByZW1vdGVfaXAuZmFtaWx5YCBpcyBgQUZfVU5TUEVDYCB3aGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLCB0aGUgc2V0dXAgZmFpbHMsIHNvIGBuZXRwb2xsX3NlbmRfdWRwYCB3b24mIzM5O3QgYmUgY2FsbGVkLgoKVGhlIHBhcnNpbmcgZnVuY3Rpb24sIGBuZXRwb2xsX3BhcnNlX2lwX2FkZHJgLCBoYXMgYWxzbyBiZWVuIHVwZGF0ZWQgdG8gdXNlIHRoZSBuZXcgYGluZXRfYWRkcmAgc3RydWN0LiBJdCBwb3B1bGF0ZXMgYGFkZHItJmd0O2lwYCBvciBgYWRkci0mZ3Q7aW42YCBhbmQgc2V0cyBgYWRkci0mZ3Q7ZmFtaWx5YC4gSWYgaXQgZmFpbHMsIGl0IHJldHVybnMgLTEsIGFuZCBpdCYjMzk7cyB1cCB0byB0aGUgY2FsbGVyIHRvIGhhbmRsZSB0aGUgZXJyb3IuIEkgY2hlY2tlZCB0aGF0IGV2ZW4gaWYgcGFyc2luZyBmYWlscywgdGhlcmUmIzM5O3Mgbm8gd2F5IHRvIGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnkgc2luY2UgdGhlIGBpbmV0X2FkZHJgIGlzIHplcm8tYWxsb2NhdGVkLCBhbmQgdGhlIGZhbWlseSBpcyBwcm9wZXJseSBpbml0aWFsaXplZC4KCkNoZWNraW5nIGBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lYCBjb25maXJtcyB0aGF0IHRoZSBzdHJ1Y3R1cmUgaXMgYWx3YXlzIGZ1bGx5IGluaXRpYWxpemVkIHdoZW4gdXNlZC4gVGhlIGJvb3QgY29tbWFuZCBsaW5lIHBhcnNlciB1c2VzIGBremFsbG9jX29iamAsIHNvIGl0JiMzOTtzIGFsbCBnb29kLgoKVGhlIHBhdGNoIHNlZW1zIHdlbGwtcmVhc29uZWQgYW5kIHNlY3VyZS4gVGhlcmUmIzM5O3Mgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyB1c2VkIG9yIGxlYWtlZCBoZXJlLiBUaGUgc3RydWN0dXJlcyBhcmUgemVyby1hbGxvY2F0ZWQsIHRoZSBkYXRhIGlzIG5vdCBjb3BpZWQgdG8gdXNlcnNwYWNlIGluIGJpbmFyeSBmb3JtLCBhbmQgdGhlIElQIGFkZHJlc3MgZGF0YSBzZW50IG92ZXIgdGhlIG5ldHdvcmsgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgYnkgdGhlIHRpbWUgaXQgaXMgdXNlZCB0byBjb25zdHJ1Y3QgcGFja2V0cy4gVGhlIGZhbWlseSBmaWVsZCBpcyBhbHNvIHZlcmlmaWVkIHdpdGggY2hlY2tzIGJlZm9yZSB1c2luZyBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHVzaF9pcHY0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yMTAyPXN0YXRpYyB2b2lkIHB1c2hfZXRoKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxMTYtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjExNzpzdGF0aWMgdm9pZCBwdXNoX2lwdjQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTE4LVx0XHQgICAgICBpbnQgbGVuKVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yMTY5PXN0YXRpYyBpbnQgbmV0cG9sbF9zZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxOTgtXHRlbHNlXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjE5OTpcdFx0cHVzaF9pcHY0KG50LCBza2IsIGxlbik7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIwMC1cdHB1c2hfZXRoKG50LCBza2IpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTU2MQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBgcHVzaF9pcHY0YCBJbXBsZW1lbnRhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYHB1c2hfaXB2NGAgaW1wbGVtZW50YXRpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyBkb2luZyB3aGF0IEkgZXhwZWN0IGl0IHRvIGRvLCBhbmQgdGhhdCBpdCYjMzk7cyBoYW5kbGluZyB0aGUgZWRnZSBjYXNlcyBjb3JyZWN0bHkuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IHJldmlldyB0aGUgY29yZSBsb2dpYyDigJMgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIHVzZWQsIHRoZSBhbGdvcml0aG1zIGVtcGxveWVkIGZvciBwdXNoaW5nIHRoZSBJUHY0IHBhY2tldHMsIHBvdGVudGlhbCBtZW1vcnkgY29uc2lkZXJhdGlvbnMsIGFuZCBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgYm90dGxlbmVja3MuIEkgd2FudCB0byBsb29rIGZvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBlc3BlY2lhbGx5IGlmIHRoaXMgZnVuY3Rpb24gaXMgbXVsdGl0aHJlYWRlZC4gVGhlIGNvZGUgc2hvdWxkIGJlIGFkaGVyaW5nIHRvIHJlbGV2YW50IFJGQ3MuIEFsc28sIEkmIzM5O2xsIHBheSBhdHRlbnRpb24gdG8gYW55IGVycm9yIGhhbmRsaW5nOyBpcyBpdCByb2J1c3QsIGFuZCBhcmUgZXJyb3JzIGJlaW5nIHByb3BhZ2F0ZWQgYW5kIGxvZ2dlZCBhcHByb3ByaWF0ZWx5PyBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCBieSBza2V0Y2hpbmcgb3V0IGEgZmV3IHBvdGVudGlhbCB0ZXN0IHNjZW5hcmlvcywgaW5jbHVkaW5nIHZhbGlkIHBhY2tldHMsIG1hbGZvcm1lZCBwYWNrZXRzLCBhbmQgdGhvc2Ugd2l0aCB2YXJpb3VzIFRUTCB2YWx1ZXMuIE92ZXJhbGwsIEkgd2FudCB0byBjb25maXJtIHRoZSBlbGVnYW5jZSBvZiB0aGUgbG9naWMgYW5kIGl0cyBhZGhlcmVuY2UgdG8gYmVzdCBwcmFjdGljZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHVzaF9pcHY0LipcXHsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTgzMwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGlzIGZpZWxkIGFuZCByZWZsZWN0aW5nIG9uIGl0IGludGVybmFsbHk6CgoqKkJyZWFraW5nIERvd24gdGhlIGBwdXNoX2lwdjRgIFJvdXRpbmUqKgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gJiMzNDtSZWFkIGBwdXNoX2lwdjRgIHVzaW5nIHJlYWQtZmlsZS4mIzM0OyBFc3NlbnRpYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBkaWdnaW5nIGludG8gdGhlIGNvZGUuIFRoaXMgbGlrZWx5IG1lYW5zIEkmIzM5O20gdHJvdWJsZXNob290aW5nLCBvciBtYXliZSByZXZpZXdpbmcgc29tZSBleGlzdGluZyBpbmZyYXN0cnVjdHVyZS4gVGhlIGZ1bmN0aW9uIG5hbWUsIGBwdXNoX2lwdjRgLCBpbW1lZGlhdGVseSB0ZWxscyBtZSBpdCYjMzk7cyByZWxhdGVkIHRvIHB1c2hpbmcgb3IgY29uZmlndXJpbmcgSVB2NC1yZWxhdGVkIGRhdGEuIEkgbmVlZCB0aGUgYWN0dWFsIGNvZGUsIHRob3VnaC4gYHJlYWQtZmlsZWAgaXMgdGhlIHRvb2wgdG8gdXNlLiBJJiMzOTttIGdvaW5nIHRvIHB1bGwgdGhlIHNvdXJjZSBjb2RlIHRvIHN0YXJ0IHRoZSBkZWVwLWRpdmUuIEZyb20gdGhlcmUgSSYjMzk7bGwgc3RhcnQgYW5hbHl6aW5nIHRvIHNlZSB3aGF0IHRoZSBmdW5jdGlvbiBkb2VzLCBob3cgaXQgd29ya3MgYW5kIHdoZXJlIGl0IGlzIHVzZWQuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gbG9vayBhdCB0aGUgb3RoZXIgZnVuY3Rpb25zIHRoYXQgY2FsbCBpdCBhcyB3ZWxsIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxMTcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjExNzpcdHN0YXRpYyB2b2lkIHB1c2hfaXB2NChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuMjExODpcdFx0XHQgICAgICBpbnQgbGVuKVxuMjExOTpcdHtcbjIxMjA6XHRcdHN0YXRpYyBhdG9taWNfdCBpcF9pZGVudDtcbjIxMjE6XHRcdHN0cnVjdCBpcGhkciAqaXBoO1xuMjEyMjpcdFx0aW50IGlwX2xlbjtcbjIxMjM6XHRcbjIxMjQ6XHRcdGlwX2xlbiA9IGxlbiAmIzQzOyBzaXplb2Yoc3RydWN0IHVkcGhkcikgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBpcGhkcik7XG4yMTI1Olx0XG4yMTI2Olx0XHRza2JfcHVzaChza2IsIHNpemVvZihzdHJ1Y3QgaXBoZHIpKTtcbjIxMjc6XHRcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xuMjEyODpcdFx0aXBoID0gaXBfaGRyKHNrYik7XG4yMTI5Olx0XG4yMTMwOlx0XHQvKiBpcGgtXHUwMDNldmVyc2lvbiA9IDQ7IGlwaC1cdTAwM2VpaGwgPSA1OyAqL1xuMjEzMTpcdFx0Kih1bnNpZ25lZCBjaGFyICopaXBoID0gMHg0NTtcbjIxMzI6XHRcdGlwaC1cdTAwM2V0b3MgPSAwO1xuMjEzMzpcdFx0cHV0X3VuYWxpZ25lZChodG9ucyhpcF9sZW4pLCBcdTAwMjZpcGgtXHUwMDNldG90X2xlbik7XG4yMTM0Olx0XHRpcGgtXHUwMDNlaWQgPSBodG9ucyhhdG9taWNfaW5jX3JldHVybihcdTAwMjZpcF9pZGVudCkpO1xuMjEzNTpcdFx0aXBoLVx1MDAzZWZyYWdfb2ZmID0gMDtcbjIxMzY6XHRcdGlwaC1cdTAwM2V0dGwgPSA2NDtcbjIxMzc6XHRcdGlwaC1cdTAwM2Vwcm90b2NvbCA9IElQUFJPVE9fVURQO1xuMjEzODpcdFx0aXBoLVx1MDAzZWNoZWNrID0gMDtcbjIxMzk6XHRcdHB1dF91bmFsaWduZWQobnQtXHUwMDNlbG9jYWxfaXAuaXAsIFx1MDAyNmlwaC1cdTAwM2VzYWRkcik7XG4yMTQwOlx0XHRwdXRfdW5hbGlnbmVkKG50LVx1MDAzZXJlbW90ZV9pcC5pcCwgXHUwMDI2aXBoLVx1MDAzZWRhZGRyKTtcbjIxNDE6XHRcdGlwaC1cdTAwM2VjaGVjayA9IGlwX2Zhc3RfY3N1bSgodW5zaWduZWQgY2hhciAqKWlwaCwgaXBoLVx1MDAzZWlobCk7XG4yMTQyOlx0XHRza2ItXHUwMDNlcHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUCk7XG4yMTQzOlx0fVxuMjE0NDpcdFxuMjE0NTpcdHN0YXRpYyB2b2lkIHB1c2hfaXB2NihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuMjE0NjpcdFx0XHQgICAgICBpbnQgbGVuKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjYwOAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoaXMgY29kZSBzbmlwcGV0LCBleHByZXNzZWQgYXMgaWYgaXQmIzM5O3MgbXkgb3duIHRob3VnaHQgcHJvY2VzczoKCioqTXkgQW5hbHlzaXMgb2YgdGhlIElQIEFkZHJlc3MgSGFuZGxpbmcqKgoKUmlnaHQsIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGlzLiBUaGUgY29kZSBpcyBjbGVhcmx5IHVzaW5nIGBwdXRfdW5hbGlnbmVkKG50LSZndDtsb2NhbF9pcC5pcCwgJmFtcDtpcGgtJmd0O3NhZGRyKTtgLiBIbW0sIGl0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGlzbiYjMzk7dCBpdD8gSXQmIzM5O3MgZGlyZWN0bHkgY29weWluZyBieXRlcyBmcm9tIGBudC0mZ3Q7bG9jYWxfaXAuaXBgIHRvIHRoZSBzb3VyY2UgYWRkcmVzcyBmaWVsZCAoYGlwaC0mZ3Q7c2FkZHJgKSBvZiB0aGUgSVAgaGVhZGVyLiBUaGUgaW1wb3J0YW50IHBhcnQgaGVyZSBpcyB0aGUgbm90ZSBvbiAmIzM0O2V4YWN0bHkgNCBieXRlcy4mIzM0OyBUaGF0IG1lYW5zIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYW4gSVB2NCBhZGRyZXNzLiBUaGVyZSYjMzk7cyBubyBmYW5jeSBwYWRkaW5nIG9yIGFueXRoaW5nIGV4dHJhIGJlaW5nIGNvcGllZCBmcm9tIHRoZSBgc3RydWN0IGluZXRfYWRkcmAsIHdoaWNoIGlzIGdlbmVyYWxseSBnb29kIHByYWN0aWNlIHRvIGF2b2lkIHN1cnByaXNlcy4gVGhhdCYjMzk7cyBhIGNsZWFuIGFuZCBlZmZpY2llbnQgd2F5IHRvIGhhbmRsZSBpdC4KCkFuZCB0aGUgZmFjdCB0aGF0IHRoZSBzYW1lIHByaW5jaXBsZSBhcHBlYXJzIGluIGBwdXNoX2lwdjZgIGNvbmZpcm1zIG15IGluaXRpYWwgaHlwb3RoZXNpcy4gVGhlIGNvZGUgaXMgbGlrZWx5IGp1c3QgZ3JhYmJpbmcgdGhlIGJ5dGVzIGFuZCBjaHVja2luZyB0aGVtIGludG8gdGhlIElQIGhlYWRlciBmb3IgYm90aCBJUHY0IGFuZCBJUHY2LCBhc3N1bWluZyB0aGUgY29ycmVjdCBzdHJ1Y3R1cmUuIE1ha2VzIHNlbnNlLiBUaGlzIHN1Z2dlc3RzIHRoZXJlIG1pZ2h0IGJlIHNvbWUgdW5kZXJseWluZyBhc3N1bXB0aW9uIGFib3V0IHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGBpbmV0X2FkZHJgIG9yIG90aGVyIHN0cnVjdHMgaWYgdGhhdCBpcyBub3QgdGhlIGNhc2UuIE5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgcGFydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIxNDU6XHRzdGF0aWMgdm9pZCBwdXNoX2lwdjYoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbjIxNDY6XHRcdFx0ICAgICAgaW50IGxlbilcbjIxNDc6XHR7XG4yMTQ4Olx0XHRzdHJ1Y3QgaXB2NmhkciAqaXA2aDtcbjIxNDk6XHRcbjIxNTA6XHRcdHNrYl9wdXNoKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSk7XG4yMTUxOlx0XHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcbjIxNTI6XHRcdGlwNmggPSBpcHY2X2hkcihza2IpO1xuMjE1MzpcdFxuMjE1NDpcdFx0LyogaXA2aC1cdTAwM2V2ZXJzaW9uID0gNjsgaXA2aC1cdTAwM2Vwcmlvcml0eSA9IDA7ICovXG4yMTU1Olx0XHQqKHVuc2lnbmVkIGNoYXIgKilpcDZoID0gMHg2MDtcbjIxNTY6XHRcdGlwNmgtXHUwMDNlZmxvd19sYmxbMF0gPSAwO1xuMjE1NzpcdFx0aXA2aC1cdTAwM2VmbG93X2xibFsxXSA9IDA7XG4yMTU4Olx0XHRpcDZoLVx1MDAzZWZsb3dfbGJsWzJdID0gMDtcbjIxNTk6XHRcbjIxNjA6XHRcdGlwNmgtXHUwMDNlcGF5bG9hZF9sZW4gPSBodG9ucyhzaXplb2Yoc3RydWN0IHVkcGhkcikgJiM0MzsgbGVuKTtcbjIxNjE6XHRcdGlwNmgtXHUwMDNlbmV4dGhkciA9IElQUFJPVE9fVURQO1xuMjE2MjpcdFx0aXA2aC1cdTAwM2Vob3BfbGltaXQgPSAzMjtcbjIxNjM6XHRcdGlwNmgtXHUwMDNlc2FkZHIgPSBudC1cdTAwM2Vsb2NhbF9pcC5pbjY7XG4yMTY0Olx0XHRpcDZoLVx1MDAzZWRhZGRyID0gbnQtXHUwMDNlcmVtb3RlX2lwLmluNjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjczNTgKCQkJCQkJCW91dHB1dDogMjg2CgkJCQkJCQl0aG91Z2h0czogODEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFzc2Vzc21lbnQ6IE5vIE5lZWQgZm9yIERlZGljYXRlZCBGdXp6aW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgY29uY2VybiB3YXMsIGFzIGFsd2F5cywgYXJvdW5kIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcy4gV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBuZXR3b3JrIGNvbmZpZ3VyYXRpb24sIHNvIHRoYXQmIzM5O3MgYSBrZXkgYXJlYSB0byBzY3J1dGluaXplLgoKRmlyc3QsIEkgZXhhbWluZWQgdGhlIGNvcmUgY2hhbmdlOiBgaXA2aC0mZ3Q7c2FkZHIgPSBudC0mZ3Q7bG9jYWxfaXAuaW42O2AuIFRoaXMgY29waWVzIGV4YWN0bHkgYSBgc3RydWN0IGluNl9hZGRyYCwgd2hpY2ggaXMgMTYgYnl0ZXMuIFRoZXJlJiMzOTtzICpubyogcmlzayBvZiBwYWRkaW5nIGJ5dGVzIGZyb20gYSBwcmV2aW91cyBgc3RydWN0IGluZXRfYWRkcmAgYmVpbmcgY29waWVkIG92ZXIsIHNvIHRoYXTigJlzIGEgbm9uLWlzc3VlLgoKVGhlIHBhdGNoIGl0c2VsZiBpcyBhIHJlZmFjdG9yaW5nLCBzcGVjaWZpY2FsbHkgYWRkcmVzc2luZyBob3cgSVAgYWRkcmVzc2VzIGFyZSByZXByZXNlbnRlZCBpbiBgbmV0Y29uc29sZV90YXJnZXRgLiBJdCBpbnRyb2R1Y2VzIGEgYGZhbWlseWAgZmllbGQgdG8gZXhwbGljaXRseSB0cmFjayB0aGUgYWRkcmVzcyBmYW1pbHkgKElQdjQsIElQdjYsIG9yIHVuc2V0KSBpbnN0ZWFkIG9mIHRoZSBwcmV2aW91cyBhbWJpZ3VvdXMgYm9vbGVhbiBhbmQgemVyby1JUCBjaGVjay4gVGhpcyBhY3R1YWxseSAqZml4ZXMqIGEgYnVnIHdoZXJlIGEgc2VlbWluZ2x5IHZhbGlkIElQdjYgYWRkcmVzcyBjb3VsZCBiZSBtaXNpbnRlcnByZXRlZCBhcyB1bnNldCwgc2ltcGx5IGJlY2F1c2UgaXRzIGluaXRpYWwgYnl0ZXMgd2VyZSB6ZXJvLCB3aGljaCB3b3VsZCBoYXZlIGJlZW4gbWlzc2VkIGJ5IHRoZSBsZWdhY3kgbWV0aG9kLgoKSSB0aGVuIHRob3JvdWdobHkgcmV2aWV3ZWQgdGhlIGNvZGUgY2hhbmdlcy4gVGhlIG9yaWdpbmFsIGB1bmlvbiBpbmV0X2FkZHJgIGlzIGdvbmUgZnJvbSBgbmV0cG9sbC5oYCBhbmQgcmVwbGFjZWQgYnkgYSAqc3RydWN0KiB3aXRoIHRoZSBzYW1lIG5hbWUgd2hpY2ggY29udGFpbnMgdGhlIGBmYW1pbHlgIG1lbWJlciwgYW5kIGFuIGFub255bW91cyB1bmlvbiBvZiBgX19iZTMyYCBhbmQgYHN0cnVjdCBpbjZfYWRkcmAuIFRoaXMgaXMgYWRkZWQgaW4gYG5ldGNvbnNvbGUuY2AuIEFsbCBvdGhlciBjaGFuZ2VzIHNpbXBseSByZWZsZWN0IHRoZSB1c2Ugb2YgdGhpcyBuZXcgc3RydWN0IGFuZCBpdHMgYGZhbWlseWAgZmllbGQuCgpDcnVjaWFsbHksIHRoZXJlIGFyZSAqbm8qIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMgaW50cm9kdWNlZC4gVGhlIGBuZXRjb25zb2xlX3RhcmdldGAgaXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2Nfb2JqYCwgd2hpY2ggemVyby1pbml0aWFsaXplcyB0aGUgZW50aXJlIHN0cnVjdHVyZS4gVGhpcyBtZWFucyB0aGUgYGZhbWlseWAgZmllbGQgZGVmYXVsdHMgdG8gYDBgIChBRl9VTlNQRUMsIHdoaWNoIGlzIGNvcnJlY3QpLCBhbmQgdGhlIElQIGFkZHJlc3MgZmllbGRzIGFyZSB6ZXJvZWQgYXMgd2VsbC4gSWYgcGFyc2luZyB0aGUgYWRkcmVzcyBmYWlscywgdGhlIHRhcmdldCBpcyBub3QgZW5hYmxlZC4KCkkgYWxzbyBjaGVja2VkIGhvdyB0aGUgSVAgYWRkcmVzcyBpcyBleHBvc2VkLiBJdCYjMzk7cyBvbmx5IHRocm91Z2ggY29uZmlnZnMgYHNob3dgIGZ1bmN0aW9ucywgd2hpY2ggZm9ybWF0IGl0IGFzIGEgKnN0cmluZyogdXNpbmcgYHN5c2ZzX2VtaXRgLiBUaGlzIGNvbXBsZXRlbHkgZWxpbWluYXRlcyB0aGUgcG9zc2liaWxpdHkgb2YgbGVha2luZyBhbnkgaW50ZXJuYWwgcGFkZGluZyBvciB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2Vyc3BhY2UuIEZpbmFsbHksIHdoZW4gc2VuZGluZyBkYXRhLCB0aGUgY29kZSAqb25seSogY29waWVzIGVpdGhlciB0aGUgSVB2NCBvciBJUHY2IGFkZHJlc3MgKDQgb3IgMTYgYnl0ZXMgcmVzcGVjdGl2ZWx5KSBpbnRvIHRoZSBJUCBoZWFkZXIuIE5vIGV4dHJhIGluZm9ybWF0aW9uIGlzIGV4cG9zZWQuCgpJbiBzdW1tYXJ5LCB0aGVyZSYjMzk7cyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBkYXRhIGxlYWthZ2UsIG9yIGFueSBvdGhlciBraW5kIG9mIG1lbW9yeSBzYWZldHkgaXNzdWUgaGVyZS4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBwcm9ibGVtcy4gR2l2ZW4gdGhhdCwgS01TQU4gaXMgbm90IHJlcXVpcmVkLiBJJiMzOTtsbCBzZXQgYE5lZWRzS01TQU49ZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgaG93IElQIGFkZHJlc3NlcyBhcmUgc3RvcmVkIGFuZCBwYXJzZWQgaW4gdGhlIG5ldGNvbnNvbGUgZHJpdmVyIGJ5IHJlcGxhY2luZyBhIGB1bmlvbiBpbmV0X2FkZHJgIGFuZCBhIGJvb2xlYW4gYGlwdjZgIGZsYWcgd2l0aCBhIG5ldyBgc3RydWN0IGluZXRfYWRkcmAgdGhhdCBleHBsaWNpdGx5IHRyYWNrcyB0aGUgYWRkcmVzcyBmYW1pbHkgKGBBRl9VTlNQRUNgLCBgQUZfSU5FVGAsIG9yIGBBRl9JTkVUNmApLiBUaGUgYHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldGAgY29udGFpbmluZyB0aGVzZSBhZGRyZXNzZXMgaXMgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jX29iamAgKHdoaWNoIHplcm8taW5pdGlhbGl6ZXMgdGhlIG1lbW9yeSksIGVuc3VyaW5nIHRoYXQgdGhlIG5ldyBgZmFtaWx5YCBmaWVsZCBkZWZhdWx0cyB0byBgQUZfVU5TUEVDYCBhbmQgdGhlIElQIGFkZHJlc3NlcyBhcmUgemVyb2VkLiBUaGUgSVAgYWRkcmVzc2VzIGFyZSBvbmx5IGV4cG9zZWQgdG8gdXNlcnNwYWNlIHZpYSBjb25maWdmcyBgc2hvd2AgZnVuY3Rpb25zLCB3aGljaCBmb3JtYXQgdGhlbSBhcyBzdHJpbmdzIHVzaW5nIGBzeXNmc19lbWl0YCwgcHJldmVudGluZyBhbnkgcG90ZW50aWFsIGxlYWthZ2Ugb2YgcGFkZGluZyBieXRlcy4gV2hlbiBjb25zdHJ1Y3RpbmcgbmV0d29yayBwYWNrZXRzLCBvbmx5IHRoZSBleGFjdCBJUHY0ICg0IGJ5dGVzKSBvciBJUHY2ICgxNiBieXRlcykgYWRkcmVzcyBmaWVsZHMgYXJlIGNvcGllZCBpbnRvIHRoZSBJUCBoZWFkZXJzLCBhZ2FpbiBhdm9pZGluZyBhbnkgcGFkZGluZyBsZWFrcy4gVGhlcmUgYXJlIG5vIG5ldyBhbGxvY2F0aW9ucyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm8gc3RydWN0dXJlcyBjb3BpZWQgZGlyZWN0bHkgdG8gdXNlcnNwYWNlLCBhbmQgbm8gY29udHJvbCBmbG93IGNoYW5nZXMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBidWdzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgaG93IElQIGFkZHJlc3NlcyBhcmUgc3RvcmVkIGFuZCBwYXJzZWQgaW4gdGhlIG5ldGNvbnNvbGUgZHJpdmVyIGJ5IHJlcGxhY2luZyBhIGB1bmlvbiBpbmV0X2FkZHJgIGFuZCBhIGJvb2xlYW4gYGlwdjZgIGZsYWcgd2l0aCBhIG5ldyBgc3RydWN0IGluZXRfYWRkcmAgdGhhdCBleHBsaWNpdGx5IHRyYWNrcyB0aGUgYWRkcmVzcyBmYW1pbHkgKGBBRl9VTlNQRUNgLCBgQUZfSU5FVGAsIG9yIGBBRl9JTkVUNmApLiBUaGUgYHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldGAgY29udGFpbmluZyB0aGVzZSBhZGRyZXNzZXMgaXMgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jX29iamAgKHdoaWNoIHplcm8taW5pdGlhbGl6ZXMgdGhlIG1lbW9yeSksIGVuc3VyaW5nIHRoYXQgdGhlIG5ldyBgZmFtaWx5YCBmaWVsZCBkZWZhdWx0cyB0byBgQUZfVU5TUEVDYCBhbmQgdGhlIElQIGFkZHJlc3NlcyBhcmUgemVyb2VkLiBUaGUgSVAgYWRkcmVzc2VzIGFyZSBvbmx5IGV4cG9zZWQgdG8gdXNlcnNwYWNlIHZpYSBjb25maWdmcyBgc2hvd2AgZnVuY3Rpb25zLCB3aGljaCBmb3JtYXQgdGhlbSBhcyBzdHJpbmdzIHVzaW5nIGBzeXNmc19lbWl0YCwgcHJldmVudGluZyBhbnkgcG90ZW50aWFsIGxlYWthZ2Ugb2YgcGFkZGluZyBieXRlcy4gV2hlbiBjb25zdHJ1Y3RpbmcgbmV0d29yayBwYWNrZXRzLCBvbmx5IHRoZSBleGFjdCBJUHY0ICg0IGJ5dGVzKSBvciBJUHY2ICgxNiBieXRlcykgYWRkcmVzcyBmaWVsZHMgYXJlIGNvcGllZCBpbnRvIHRoZSBJUCBoZWFkZXJzLCBhZ2FpbiBhdm9pZGluZyBhbnkgcGFkZGluZyBsZWFrcy4gVGhlcmUgYXJlIG5vIG5ldyBhbGxvY2F0aW9ucyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm8gc3RydWN0dXJlcyBjb3BpZWQgZGlyZWN0bHkgdG8gdXNlcnNwYWNlLCBhbmQgbm8gY29udHJvbCBmbG93IGNoYW5nZXMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBidWdzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjM4OjIxLjkzMTE3NjM0N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNTUzMjY3ODE3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRDT05TT0xFXCIsXG4gICAgXCJORVRDT05TT0xFX0RZTkFNSUNcIixcbiAgICBcIkNPTkZJR0ZTX0ZTXCIsXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibG9jYWxfaXBfc3RvcmVcIixcbiAgICBcInJlbW90ZV9pcF9zdG9yZVwiLFxuICAgIFwiZW5hYmxlZF9zdG9yZVwiLFxuICAgIFwibmV0Y29uc19uZXRwb2xsX3NldHVwXCIsXG4gICAgXCJuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lXCIsXG4gICAgXCJuZXRwb2xsX3NlbmRfdWRwXCIsXG4gICAgXCJuZXRwb2xsX3BhcnNlX2lwX2FkZHJcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBob3cgSVAgYWRkcmVzc2VzIGFyZSBzdG9yZWQgYW5kIHBhcnNlZCBpbiB0aGUgbmV0Y29uc29sZSBkcml2ZXIgYnkgcmVwbGFjaW5nIGEgYHVuaW9uIGluZXRfYWRkcmAgYW5kIGEgYm9vbGVhbiBgaXB2NmAgZmxhZyB3aXRoIGEgbmV3IGBzdHJ1Y3QgaW5ldF9hZGRyYCB0aGF0IGV4cGxpY2l0bHkgdHJhY2tzIHRoZSBhZGRyZXNzIGZhbWlseSAoYEFGX1VOU1BFQ2AsIGBBRl9JTkVUYCwgb3IgYEFGX0lORVQ2YCkuIFRoZSBgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0YCBjb250YWluaW5nIHRoZXNlIGFkZHJlc3NlcyBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqYCAod2hpY2ggemVyby1pbml0aWFsaXplcyB0aGUgbWVtb3J5KSwgZW5zdXJpbmcgdGhhdCB0aGUgbmV3IGBmYW1pbHlgIGZpZWxkIGRlZmF1bHRzIHRvIGBBRl9VTlNQRUNgIGFuZCB0aGUgSVAgYWRkcmVzc2VzIGFyZSB6ZXJvZWQuIFRoZSBJUCBhZGRyZXNzZXMgYXJlIG9ubHkgZXhwb3NlZCB0byB1c2Vyc3BhY2UgdmlhIGNvbmZpZ2ZzIGBzaG93YCBmdW5jdGlvbnMsIHdoaWNoIGZvcm1hdCB0aGVtIGFzIHN0cmluZ3MgdXNpbmcgYHN5c2ZzX2VtaXRgLCBwcmV2ZW50aW5nIGFueSBwb3RlbnRpYWwgbGVha2FnZSBvZiBwYWRkaW5nIGJ5dGVzLiBXaGVuIGNvbnN0cnVjdGluZyBuZXR3b3JrIHBhY2tldHMsIG9ubHkgdGhlIGV4YWN0IElQdjQgKDQgYnl0ZXMpIG9yIElQdjYgKDE2IGJ5dGVzKSBhZGRyZXNzIGZpZWxkcyBhcmUgY29waWVkIGludG8gdGhlIElQIGhlYWRlcnMsIGFnYWluIGF2b2lkaW5nIGFueSBwYWRkaW5nIGxlYWtzLiBUaGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBubyBzdHJ1Y3R1cmVzIGNvcGllZCBkaXJlY3RseSB0byB1c2Vyc3BhY2UsIGFuZCBubyBjb250cm9sIGZsb3cgY2hhbmdlcyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGJ1Z3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbmV0Y29uc29sZSBkcml2ZXIgdG8gdHJhY2sgdGhlIElQIGFkZHJlc3MgZmFtaWx5IChBRl9JTkVULCBBRl9JTkVUNiwgQUZfVU5TUEVDKSBpbmRlcGVuZGVudGx5IGZvciBsb2NhbCBhbmQgcmVtb3RlIElQIGFkZHJlc3NlcywgcmVwbGFjaW5nIGEgc2luZ2xlIGBpcHY2YCBib29sZWFuIGZsYWcuIFRoaXMgY2hhbmdlcyBob3cgSVAgYWRkcmVzc2VzIGFyZSBwYXJzZWQsIHZhbGlkYXRlZCwgYW5kIHVzZWQgZHVyaW5nIG5ldGNvbnNvbGUgc2V0dXAgYW5kIG1lc3NhZ2UgdHJhbnNtaXNzaW9uLiBUaGUgbW9kaWZpZWQgY29kZSBpcyByZWFjaGFibGUgdmlhIHRoZSBuZXRjb25zb2xlIGNvbmZpZ2ZzIGludGVyZmFjZSAod2hpY2ggYWxsb3dzIGR5bmFtaWMgcmVjb25maWd1cmF0aW9uIG9mIHRhcmdldHMpIGFuZCBkdXJpbmcgbW9kdWxlIGluaXRpYWxpemF0aW9uIHZpYSBrZXJuZWwgY29tbWFuZCBsaW5lIHBhcmFtZXRlcnMuIFNpbmNlIHRoaXMgYWZmZWN0cyBjb3JlIGtlcm5lbCBsb2dnaW5nIGZ1bmN0aW9uYWxpdHkgYW5kIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgY29uZmlnZnMsIGl0IGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjM4OjIxLjkzMTE4MTc0N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYxNTU2OTYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMGY2MTMwNWUxNmUyZmFkNGJmYWUxNWMwNmI1MDJjMmMyMDA2ZTlmOVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAxMCAxOTozODoyMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMgYi9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcXG5pbmRleCAwMzkxMzMwMjMyOGNjLi44MTBkZWQ2ZTQ4ZjMyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1xcbisrKyBiL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1xcbkBAIC0xNTEsNiArMTUxLDE1IEBAIGVudW0gdGFyZ2V0X3N0YXRlIHtcXG4gXFx0U1RBVEVfREVBQ1RJVkFURUQsXFxuIH07XFxuIFxcbitzdHJ1Y3QgaW5ldF9hZGRyIHtcXG4rXFx0LyogQWRkcmVzcyBmYW1pbHk6IEFGX1VOU1BFQyB3aGVuIHVuc2V0LCBlbHNlIEFGX0lORVQgb3IgQUZfSU5FVDYgKi9cXG4rXFx0dThcXHRcXHRcXHRmYW1pbHk7XFxuK1xcdHVuaW9uIHtcXG4rXFx0XFx0X19iZTMyXFx0XFx0aXA7XFxuK1xcdFxcdHN0cnVjdCBpbjZfYWRkclxcdGluNjtcXG4rXFx0fTtcXG4rfTtcXG4rXFxuIC8qKlxcbiAgKiBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgLSBSZXByZXNlbnRzIGEgY29uZmlndXJlZCBuZXRjb25zb2xlIHRhcmdldC5cXG4gICogQGxpc3Q6XFx0TGlua3MgdGhpcyB0YXJnZXQgaW50byB0aGUgdGFyZ2V0X2xpc3QuXFxuQEAgLTE4MSw3ICsxOTAsNiBAQCBlbnVtIHRhcmdldF9zdGF0ZSB7XFxuICAqXFx0XFx0bG9jYWxfbWFjXFx0KHJlYWQtb25seSlcXG4gICogQGxvY2FsX2lwOlxcdFNvdXJjZSBJUCBhZGRyZXNzIG9mIHRoZSB0YXJnZXQgKHJlYWQtd3JpdGUpLlxcbiAgKiBAcmVtb3RlX2lwOlxcdERlc3RpbmF0aW9uIElQIGFkZHJlc3Mgb2YgdGhlIHRhcmdldCAocmVhZC13cml0ZSkuXFxuLSAqIEBpcHY2OlxcdFdoZXRoZXIgdGhlIHRhcmdldCBhZGRyZXNzZXMgYXJlIElQdjYgKHJlYWQtd3JpdGUpLlxcbiAgKiBAbG9jYWxfcG9ydDpcXHRTb3VyY2UgVURQIHBvcnQgb2YgdGhlIHRhcmdldCAocmVhZC13cml0ZSkuXFxuICAqIEByZW1vdGVfcG9ydDogRGVzdGluYXRpb24gVURQIHBvcnQgb2YgdGhlIHRhcmdldCAocmVhZC13cml0ZSkuXFxuICAqIEByZW1vdGVfbWFjOlxcdERlc3RpbmF0aW9uIGV0aGVybmV0IGFkZHJlc3Mgb2YgdGhlIHRhcmdldCAocmVhZC13cml0ZSkuXFxuQEAgLTIxMiw4ICsyMjAsNyBAQCBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQge1xcbiBcXHRib29sXFx0XFx0XFx0ZXh0ZW5kZWQ7XFxuIFxcdGJvb2xcXHRcXHRcXHRyZWxlYXNlO1xcbiBcXHRzdHJ1Y3QgbmV0cG9sbFxcdFxcdG5wO1xcbi1cXHR1bmlvbiBpbmV0X2FkZHJcXHRcXHRsb2NhbF9pcCwgcmVtb3RlX2lwO1xcbi1cXHRib29sXFx0XFx0XFx0aXB2NjtcXG4rXFx0c3RydWN0IGluZXRfYWRkclxcdGxvY2FsX2lwLCByZW1vdGVfaXA7XFxuIFxcdHUxNlxcdFxcdFxcdGxvY2FsX3BvcnQsIHJlbW90ZV9wb3J0O1xcbiBcXHR1OFxcdFxcdFxcdHJlbW90ZV9tYWNbRVRIX0FMRU5dO1xcbiBcXHQvKiBwcm90ZWN0ZWQgYnkgdGFyZ2V0X2xpc3RfbG9jazsgKzEgZ2l2ZXMgc2NucHJpbnRmKCkgcm9vbSBmb3IgaXRzXFxuQEAgLTQxNSw2ICs0MjIsNyBAQCBzdGF0aWMgaW50IG5ldGNvbnNfdGFrZV9pcHY2KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRcXHQvKiBHb3QgdGhlIElQLCBsZXQncyByZXR1cm4gKi9cXG4gXFx0XFx0XFx0bnQtXFx1MDAzZWxvY2FsX2lwLmluNiA9IGlmcC1cXHUwMDNlYWRkcjtcXG4rXFx0XFx0XFx0bnQtXFx1MDAzZWxvY2FsX2lwLmZhbWlseSA9IEFGX0lORVQ2O1xcbiBcXHRcXHRcXHRlcnIgPSAwO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0fVxcbkBAIC00NTYsMjggKzQ2NCwxMiBAQCBzdGF0aWMgaW50IG5ldGNvbnNfdGFrZV9pcHY0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXFxuIFxcdH1cXG4gXFxuIFxcdG50LVxcdTAwM2Vsb2NhbF9pcC5pcCA9IGlmYS1cXHUwMDNlaWZhX2xvY2FsO1xcbitcXHRudC1cXHUwMDNlbG9jYWxfaXAuZmFtaWx5ID0gQUZfSU5FVDtcXG4gXFx0bnBfaW5mbyhucCwgXFxcImxvY2FsIElQICVwSTRcXFxcblxcXCIsIFxcdTAwMjZudC1cXHUwMDNlbG9jYWxfaXAuaXApO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLS8qXFxuLSAqIFRlc3Qgd2hldGhlciB0aGUgY2FsbGVyIGxlZnQgbnQtXFx1MDAzZWxvY2FsX2lwIHVuc2V0LCBzbyB0aGF0XFxuLSAqIG5ldGNvbnNfbmV0cG9sbF9zZXR1cCgpIHNob3VsZCBhdXRvLXBvcHVsYXRlIGl0IGZyb20gdGhlIGVncmVzcyBkZXZpY2UuXFxuLSAqXFxuLSAqIG50LVxcdTAwM2Vsb2NhbF9pcCBpcyBhIHVuaW9uIG9mIF9fYmUzMiAoSVB2NCkgYW5kIHN0cnVjdCBpbjZfYWRkciAoSVB2NiksXFxuLSAqIHNvIGFuIElQdjYgYWRkcmVzcyB3aG9zZSBmaXJzdCA0IGJ5dGVzIGFyZSB6ZXJvIChlLmcuIDo6MSwgOjoyLFxcbi0gKiBJUHY0LW1hcHBlZCA6OmZmZmY6YS5iLmMuZCkgbXVzdCBub3QgYmUgdGVzdGVkIHZpYSB0aGUgSVB2NCBhcm0g4oCUXFxuLSAqIGRvaW5nIHNvIHdvdWxkIG1pc2NsYXNzaWZ5IGEgY2FsbGVyLXN1cHBsaWVkIGFkZHJlc3MgYXMgdW5zZXQgYW5kXFxuLSAqIHNpbGVudGx5IG92ZXJ3cml0ZSBpdCB3aXRoIHdoYXRldmVyIGFkZHJlc3MgdGhlIGRldmljZSBleHBvc2VzLlxcbi0gKi9cXG4tc3RhdGljIGJvb2wgbmV0Y29uc19sb2NhbF9pcF91bnNldChjb25zdCBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxcbi17XFxuLVxcdGlmIChudC1cXHUwMDNlaXB2NilcXG4tXFx0XFx0cmV0dXJuIGlwdjZfYWRkcl9hbnkoXFx1MDAyNm50LVxcdTAwM2Vsb2NhbF9pcC5pbjYpO1xcbi1cXHRyZXR1cm4gIW50LVxcdTAwM2Vsb2NhbF9pcC5pcDtcXG4tfVxcbi1cXG4gc3RhdGljIGludCBuZXRjb25zX25ldHBvbGxfc2V0dXAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcXG4ge1xcbiBcXHRzdHJ1Y3QgbmV0ICpuZXQgPSBjdXJyZW50LVxcdTAwM2Vuc3Byb3h5LVxcdTAwM2VuZXRfbnM7XFxuQEAgLTQ4Nyw2ICs0NzksMTcgQEAgc3RhdGljIGludCBuZXRjb25zX25ldHBvbGxfc2V0dXAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcXG4gXFx0Ym9vbCBpcF9vdmVyd3JpdHRlbiA9IGZhbHNlO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4rXFx0aWYgKG50LVxcdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX1VOU1BFQykge1xcbitcXHRcXHRucF9lcnIobnAsIFxcXCJyZW1vdGUgSVAgYWRkcmVzcyBub3QgY29uZmlndXJlZCwgYWJvcnRpbmdcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVERVNUQUREUlJFUTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKG50LVxcdTAwM2Vsb2NhbF9pcC5mYW1pbHkgIT0gQUZfVU5TUEVDIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBudC1cXHUwMDNlbG9jYWxfaXAuZmFtaWx5ICE9IG50LVxcdTAwM2VyZW1vdGVfaXAuZmFtaWx5KSB7XFxuK1xcdFxcdG5wX2VycihucCwgXFxcImxvY2FsIGFuZCByZW1vdGUgSVAgYWRkcmVzcyBmYW1pbGllcyBkaWZmZXIsIGFib3J0aW5nXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuIFxcdHJ0bmxfbG9jaygpO1xcbiBcXHRpZiAobnAtXFx1MDAzZWRldl9uYW1lWzBdKVxcbiBcXHRcXHRuZGV2ID0gX19kZXZfZ2V0X2J5X25hbWUobmV0LCBucC1cXHUwMDNlZGV2X25hbWUpO1xcbkBAIC01MjMsMTYgKzUyNiwxMyBAQCBzdGF0aWMgaW50IG5ldGNvbnNfbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxcbiBcXHRcXHRydG5sX2xvY2soKTtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKG5ldGNvbnNfbG9jYWxfaXBfdW5zZXQobnQpKSB7XFxuLVxcdFxcdGlmICghbnQtXFx1MDAzZWlwdjYpIHtcXG4tXFx0XFx0XFx0ZXJyID0gbmV0Y29uc190YWtlX2lwdjQobnQsIG5kZXYpO1xcbi1cXHRcXHRcXHRpZiAoZXJyKVxcbi1cXHRcXHRcXHRcXHRnb3RvIHB1dDtcXG4tXFx0XFx0fSBlbHNlIHtcXG4rXFx0aWYgKG50LVxcdTAwM2Vsb2NhbF9pcC5mYW1pbHkgPT0gQUZfVU5TUEVDKSB7XFxuK1xcdFxcdGlmIChudC1cXHUwMDNlcmVtb3RlX2lwLmZhbWlseSA9PSBBRl9JTkVUNilcXG4gXFx0XFx0XFx0ZXJyID0gbmV0Y29uc190YWtlX2lwdjYobnQsIG5kZXYpO1xcbi1cXHRcXHRcXHRpZiAoZXJyKVxcbi1cXHRcXHRcXHRcXHRnb3RvIHB1dDtcXG4tXFx0XFx0fVxcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdGVyciA9IG5ldGNvbnNfdGFrZV9pcHY0KG50LCBuZGV2KTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0Z290byBwdXQ7XFxuIFxcdFxcdGlwX292ZXJ3cml0dGVuID0gdHJ1ZTtcXG4gXFx0fVxcbiBcXG5AQCAtNzE0LDI0ICs3MTQsMjggQEAgc3RhdGljIHZvaWQgbmV0Y29uc29sZV9wcmludF9iYW5uZXIoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcXG4gXFx0c3RydWN0IG5ldHBvbGwgKm5wID0gXFx1MDAyNm50LVxcdTAwM2VucDtcXG4gXFxuIFxcdG5wX2luZm8obnAsIFxcXCJsb2NhbCBwb3J0ICVkXFxcXG5cXFwiLCBudC1cXHUwMDNlbG9jYWxfcG9ydCk7XFxuLVxcdGlmIChudC1cXHUwMDNlaXB2NilcXG4rXFx0aWYgKG50LVxcdTAwM2Vsb2NhbF9pcC5mYW1pbHkgPT0gQUZfVU5TUEVDKVxcbitcXHRcXHRucF9pbmZvKG5wLCBcXFwibG9jYWwgSVAgdW5zZXRcXFxcblxcXCIpO1xcbitcXHRlbHNlIGlmIChudC1cXHUwMDNlbG9jYWxfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxcbiBcXHRcXHRucF9pbmZvKG5wLCBcXFwibG9jYWwgSVB2NiBhZGRyZXNzICVwSTZjXFxcXG5cXFwiLCBcXHUwMDI2bnQtXFx1MDAzZWxvY2FsX2lwLmluNik7XFxuIFxcdGVsc2VcXG4gXFx0XFx0bnBfaW5mbyhucCwgXFxcImxvY2FsIElQdjQgYWRkcmVzcyAlcEk0XFxcXG5cXFwiLCBcXHUwMDI2bnQtXFx1MDAzZWxvY2FsX2lwLmlwKTtcXG4gXFx0bnBfaW5mbyhucCwgXFxcImludGVyZmFjZSBuYW1lICclcydcXFxcblxcXCIsIG5wLVxcdTAwM2VkZXZfbmFtZSk7XFxuIFxcdG5wX2luZm8obnAsIFxcXCJsb2NhbCBldGhlcm5ldCBhZGRyZXNzICclcE0nXFxcXG5cXFwiLCBucC1cXHUwMDNlZGV2X21hYyk7XFxuIFxcdG5wX2luZm8obnAsIFxcXCJyZW1vdGUgcG9ydCAlZFxcXFxuXFxcIiwgbnQtXFx1MDAzZXJlbW90ZV9wb3J0KTtcXG4tXFx0aWYgKG50LVxcdTAwM2VpcHY2KVxcbitcXHRpZiAobnQtXFx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfVU5TUEVDKVxcbitcXHRcXHRucF9pbmZvKG5wLCBcXFwicmVtb3RlIElQIHVuc2V0XFxcXG5cXFwiKTtcXG4rXFx0ZWxzZSBpZiAobnQtXFx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXFxuIFxcdFxcdG5wX2luZm8obnAsIFxcXCJyZW1vdGUgSVB2NiBhZGRyZXNzICVwSTZjXFxcXG5cXFwiLCBcXHUwMDI2bnQtXFx1MDAzZXJlbW90ZV9pcC5pbjYpO1xcbiBcXHRlbHNlXFxuIFxcdFxcdG5wX2luZm8obnAsIFxcXCJyZW1vdGUgSVB2NCBhZGRyZXNzICVwSTRcXFxcblxcXCIsIFxcdTAwMjZudC1cXHUwMDNlcmVtb3RlX2lwLmlwKTtcXG4gXFx0bnBfaW5mbyhucCwgXFxcInJlbW90ZSBldGhlcm5ldCBhZGRyZXNzICVwTVxcXFxuXFxcIiwgbnQtXFx1MDAzZXJlbW90ZV9tYWMpO1xcbiB9XFxuIFxcbi0vKiBQYXJzZSB0aGUgc3RyaW5nIGFuZCBwb3B1bGF0ZSB0aGUgYGluZXRfYWRkcmAgdW5pb24uIFJldHVybiAwIGlmIElQdjQgaXNcXG4tICogcG9wdWxhdGVkLCAxIGlmIElQdjYgaXMgcG9wdWxhdGVkLCBhbmQgLTEgdXBvbiBmYWlsdXJlLlxcbisvKiBQYXJzZSB0aGUgc3RyaW5nIGFuZCBwb3B1bGF0ZSB0aGUgYGluZXRfYWRkcmAgc3RydWN0LiBSZXR1cm4gMCBvbiBzdWNjZXNzXFxuKyAqIGFuZCAtMSB1cG9uIGZhaWx1cmUuXFxuICAqL1xcbi1zdGF0aWMgaW50IG5ldHBvbGxfcGFyc2VfaXBfYWRkcihjb25zdCBjaGFyICpzdHIsIHVuaW9uIGluZXRfYWRkciAqYWRkcilcXG4rc3RhdGljIGludCBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY29uc3QgY2hhciAqc3RyLCBzdHJ1Y3QgaW5ldF9hZGRyICphZGRyKVxcbiB7XFxuIFxcdGNvbnN0IGNoYXIgKmVuZCA9IE5VTEw7XFxuIFxcdGludCBsZW47XFxuQEAgLTc0MywxNCArNzQ3LDE4IEBAIHN0YXRpYyBpbnQgbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGNvbnN0IGNoYXIgKnN0ciwgdW5pb24gaW5ldF9hZGRyICphZGRyKVxcbiBcXHRpZiAoc3RyW2xlbiAtIDFdID09ICdcXFxcbicpXFxuIFxcdFxcdGxlbiAtPSAxO1xcbiBcXG4tXFx0aWYgKGluNF9wdG9uKHN0ciwgbGVuLCAodm9pZCAqKWFkZHIsIC0xLCBcXHUwMDI2ZW5kKSBcXHUwMDNlIDAgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgICghZW5kIHx8ICplbmQgPT0gMCB8fCAqZW5kID09ICdcXFxcbicpKVxcbitcXHRpZiAoaW40X3B0b24oc3RyLCBsZW4sICh2b2lkICopXFx1MDAyNmFkZHItXFx1MDAzZWlwLCAtMSwgXFx1MDAyNmVuZCkgXFx1MDAzZSAwIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAoIWVuZCB8fCAqZW5kID09IDAgfHwgKmVuZCA9PSAnXFxcXG4nKSkge1xcbitcXHRcXHRhZGRyLVxcdTAwM2VmYW1pbHkgPSBBRl9JTkVUO1xcbiBcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbiBcXG4gXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0lQVjYpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICBpbjZfcHRvbihzdHIsIGxlbiwgKHZvaWQgKilhZGRyLCAtMSwgXFx1MDAyNmVuZCkgXFx1MDAzZSAwIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICAoIWVuZCB8fCAqZW5kID09IDAgfHwgKmVuZCA9PSAnXFxcXG4nKSlcXG4tXFx0XFx0cmV0dXJuIDE7XFxuK1xcdCAgICBpbjZfcHRvbihzdHIsIGxlbiwgKHZvaWQgKilcXHUwMDI2YWRkci1cXHUwMDNlaW42LCAtMSwgXFx1MDAyNmVuZCkgXFx1MDAzZSAwIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAoIWVuZCB8fCAqZW5kID09IDAgfHwgKmVuZCA9PSAnXFxcXG4nKSkge1xcbitcXHRcXHRhZGRyLVxcdTAwM2VmYW1pbHkgPSBBRl9JTkVUNjtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4gXFxuIFxcdHJldHVybiAtMTtcXG4gfVxcbkBAIC04NTUsMjAgKzg2MywyNCBAQCBzdGF0aWMgc3NpemVfdCBsb2NhbF9pcF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxcbiB7XFxuIFxcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7XFxuIFxcbi1cXHRpZiAobnQtXFx1MDAzZWlwdjYpXFxuK1xcdGlmIChudC1cXHUwMDNlbG9jYWxfaXAuZmFtaWx5ID09IEFGX1VOU1BFQylcXG4rXFx0XFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiXFxcXG5cXFwiKTtcXG4rXFx0aWYgKG50LVxcdTAwM2Vsb2NhbF9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXFxuIFxcdFxcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXFxcIiVwSTZjXFxcXG5cXFwiLCBcXHUwMDI2bnQtXFx1MDAzZWxvY2FsX2lwLmluNik7XFxuIFxcdGVsc2VcXG4tXFx0XFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiJXBJNFxcXFxuXFxcIiwgXFx1MDAyNm50LVxcdTAwM2Vsb2NhbF9pcCk7XFxuK1xcdFxcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXFxcIiVwSTRcXFxcblxcXCIsIFxcdTAwMjZudC1cXHUwMDNlbG9jYWxfaXAuaXApO1xcbiB9XFxuIFxcbiBzdGF0aWMgc3NpemVfdCByZW1vdGVfaXBfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcXG4ge1xcbiBcXHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0pO1xcbiBcXG4tXFx0aWYgKG50LVxcdTAwM2VpcHY2KVxcbitcXHRpZiAobnQtXFx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfVU5TUEVDKVxcbitcXHRcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCJcXFxcblxcXCIpO1xcbitcXHRpZiAobnQtXFx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXFxuIFxcdFxcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXFxcIiVwSTZjXFxcXG5cXFwiLCBcXHUwMDI2bnQtXFx1MDAzZXJlbW90ZV9pcC5pbjYpO1xcbiBcXHRlbHNlXFxuLVxcdFxcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXFxcIiVwSTRcXFxcblxcXCIsIFxcdTAwMjZudC1cXHUwMDNlcmVtb3RlX2lwKTtcXG4rXFx0XFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiJXBJNFxcXFxuXFxcIiwgXFx1MDAyNm50LVxcdTAwM2VyZW1vdGVfaXAuaXApO1xcbiB9XFxuIFxcbiBzdGF0aWMgc3NpemVfdCBsb2NhbF9tYWNfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcXG5AQCAtMTIxMyw3ICsxMjI1LDYgQEAgc3RhdGljIHNzaXplX3QgbG9jYWxfaXBfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXFxuIHtcXG4gXFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcXG4gXFx0c3NpemVfdCByZXQgPSAtRUlOVkFMO1xcbi1cXHRpbnQgaXB2NjtcXG4gXFxuIFxcdGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF9sb2NrKCk7XFxuIFxcdGlmIChudC1cXHUwMDNlc3RhdGUgPT0gU1RBVEVfRU5BQkxFRCkge1xcbkBAIC0xMjIyLDEwICsxMjMzLDggQEAgc3RhdGljIHNzaXplX3QgbG9jYWxfaXBfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXFxuIFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gXFx0fVxcbiBcXG4tXFx0aXB2NiA9IG5ldHBvbGxfcGFyc2VfaXBfYWRkcihidWYsIFxcdTAwMjZudC1cXHUwMDNlbG9jYWxfaXApO1xcbi1cXHRpZiAoaXB2NiA9PSAtMSlcXG4rXFx0aWYgKG5ldHBvbGxfcGFyc2VfaXBfYWRkcihidWYsIFxcdTAwMjZudC1cXHUwMDNlbG9jYWxfaXApIFxcdTAwM2MgMClcXG4gXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbi1cXHRudC1cXHUwMDNlaXB2NiA9ICEhaXB2NjtcXG4gXFxuIFxcdHJldCA9IGNvdW50O1xcbiBvdXRfdW5sb2NrOlxcbkBAIC0xMjM4LDcgKzEyNDcsNiBAQCBzdGF0aWMgc3NpemVfdCByZW1vdGVfaXBfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXFxuIHtcXG4gXFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcXG4gXFx0c3NpemVfdCByZXQgPSAtRUlOVkFMO1xcbi1cXHRpbnQgaXB2NjtcXG4gXFxuIFxcdGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF9sb2NrKCk7XFxuIFxcdGlmIChudC1cXHUwMDNlc3RhdGUgPT0gU1RBVEVfRU5BQkxFRCkge1xcbkBAIC0xMjQ3LDEwICsxMjU1LDggQEAgc3RhdGljIHNzaXplX3QgcmVtb3RlX2lwX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxcbiBcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuIFxcdH1cXG4gXFxuLVxcdGlwdjYgPSBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoYnVmLCBcXHUwMDI2bnQtXFx1MDAzZXJlbW90ZV9pcCk7XFxuLVxcdGlmIChpcHY2ID09IC0xKVxcbitcXHRpZiAobmV0cG9sbF9wYXJzZV9pcF9hZGRyKGJ1ZiwgXFx1MDAyNm50LVxcdTAwM2VyZW1vdGVfaXApIFxcdTAwM2MgMClcXG4gXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbi1cXHRudC1cXHUwMDNlaXB2NiA9ICEhaXB2NjtcXG4gXFxuIFxcdHJldCA9IGNvdW50O1xcbiBvdXRfdW5sb2NrOlxcbkBAIC0yMDYxLDcgKzIwNjcsNyBAQCBzdGF0aWMgdm9pZCBuZXRwb2xsX3VkcF9jaGVja3N1bShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxcbiBcXG4gXFx0LyogY2hlY2sgbmVlZHMgdG8gYmUgc2V0LCBzaW5jZSBpdCB3aWxsIGJlIGNvbnN1bWVkIGluIGNzdW1fcGFydGlhbCAqL1xcbiBcXHR1ZHBoLVxcdTAwM2VjaGVjayA9IDA7XFxuLVxcdGlmIChudC1cXHUwMDNlaXB2NilcXG4rXFx0aWYgKG50LVxcdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxcbiBcXHRcXHR1ZHBoLVxcdTAwM2VjaGVjayA9IGNzdW1faXB2Nl9tYWdpYyhcXHUwMDI2bnQtXFx1MDAzZWxvY2FsX2lwLmluNixcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNm50LVxcdTAwM2VyZW1vdGVfaXAuaW42LFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgICB1ZHBfbGVuLCBJUFBST1RPX1VEUCxcXG5AQCAtMjEwMiw3ICsyMTA4LDcgQEAgc3RhdGljIHZvaWQgcHVzaF9ldGgoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcXG4gXFx0ZXRoZXJfYWRkcl9jb3B5KGV0aC1cXHUwMDNlaF9zb3VyY2UsIG5wLVxcdTAwM2VkZXYtXFx1MDAzZWRldl9hZGRyKTtcXG4gXFx0ZXRoZXJfYWRkcl9jb3B5KGV0aC1cXHUwMDNlaF9kZXN0LCBudC1cXHUwMDNlcmVtb3RlX21hYyk7XFxuLVxcdGlmIChudC1cXHUwMDNlaXB2NilcXG4rXFx0aWYgKG50LVxcdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxcbiBcXHRcXHRldGgtXFx1MDAzZWhfcHJvdG8gPSBodG9ucyhFVEhfUF9JUFY2KTtcXG4gXFx0ZWxzZVxcbiBcXHRcXHRldGgtXFx1MDAzZWhfcHJvdG8gPSBodG9ucyhFVEhfUF9JUCk7XFxuQEAgLTIxNzEsNyArMjE3Nyw3IEBAIHN0YXRpYyBpbnQgbmV0cG9sbF9zZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csXFxuIFxcdFxcdFdBUk5fT05fT05DRSghaXJxc19kaXNhYmxlZCgpKTtcXG4gXFxuIFxcdHVkcF9sZW4gPSBsZW4gKyBzaXplb2Yoc3RydWN0IHVkcGhkcik7XFxuLVxcdGlmIChudC1cXHUwMDNlaXB2NilcXG4rXFx0aWYgKG50LVxcdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxcbiBcXHRcXHRpcF9sZW4gPSB1ZHBfbGVuICsgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKTtcXG4gXFx0ZWxzZVxcbiBcXHRcXHRpcF9sZW4gPSB1ZHBfbGVuICsgc2l6ZW9mKHN0cnVjdCBpcGhkcik7XFxuQEAgLTIxODcsNyArMjE5Myw3IEBAIHN0YXRpYyBpbnQgbmV0cG9sbF9zZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csXFxuIFxcdHNrYl9wdXQoc2tiLCBsZW4pO1xcbiBcXG4gXFx0cHVzaF91ZHAobnQsIHNrYiwgbGVuKTtcXG4tXFx0aWYgKG50LVxcdTAwM2VpcHY2KVxcbitcXHRpZiAobnQtXFx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXFxuIFxcdFxcdHB1c2hfaXB2NihudCwgc2tiLCBsZW4pO1xcbiBcXHRlbHNlXFxuIFxcdFxcdHB1c2hfaXB2NChudCwgc2tiLCBsZW4pO1xcbkBAIC0yNTA3LDEwICsyNTEzLDggQEAgX19yZWxlYXNlcyhcXHUwMDI2dGFyZ2V0X2xpc3RfbG9jaylcXG4gc3RhdGljIGludCBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNoYXIgKm9wdClcXG4ge1xcbiBcXHRzdHJ1Y3QgbmV0cG9sbCAqbnAgPSBcXHUwMDI2bnQtXFx1MDAzZW5wO1xcbi1cXHRib29sIGlwdmVyc2lvbl9zZXQgPSBmYWxzZTtcXG4gXFx0Y2hhciAqY3VyID0gb3B0O1xcbiBcXHRjaGFyICpkZWxpbTtcXG4tXFx0aW50IGlwdjY7XFxuIFxcbiBcXHRpZiAoKmN1ciAhPSAnQCcpIHtcXG4gXFx0XFx0ZGVsaW0gPSBzdHJjaHIoY3VyLCAnQCcpO1xcbkBAIC0yNTI0LDE2ICsyNTI4LDEyIEBAIHN0YXRpYyBpbnQgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjaGFyICpvcHQpXFxuIFxcdGN1cisrO1xcbiBcXG4gXFx0aWYgKCpjdXIgIT0gJy8nKSB7XFxuLVxcdFxcdGlwdmVyc2lvbl9zZXQgPSB0cnVlO1xcbiBcXHRcXHRkZWxpbSA9IHN0cmNocihjdXIsICcvJyk7XFxuIFxcdFxcdGlmICghZGVsaW0pXFxuIFxcdFxcdFxcdGdvdG8gcGFyc2VfZmFpbGVkO1xcbiBcXHRcXHQqZGVsaW0gPSAwO1xcbi1cXHRcXHRpcHY2ID0gbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGN1ciwgXFx1MDAyNm50LVxcdTAwM2Vsb2NhbF9pcCk7XFxuLVxcdFxcdGlmIChpcHY2IFxcdTAwM2MgMClcXG4rXFx0XFx0aWYgKG5ldHBvbGxfcGFyc2VfaXBfYWRkcihjdXIsIFxcdTAwMjZudC1cXHUwMDNlbG9jYWxfaXApIFxcdTAwM2MgMClcXG4gXFx0XFx0XFx0Z290byBwYXJzZV9mYWlsZWQ7XFxuLVxcdFxcdGVsc2VcXG4tXFx0XFx0XFx0bnQtXFx1MDAzZWlwdjYgPSAoYm9vbClpcHY2O1xcbiBcXHRcXHRjdXIgPSBkZWxpbTtcXG4gXFx0fVxcbiBcXHRjdXIrKztcXG5AQCAtMjU3NSwxMyArMjU3NSwxMSBAQCBzdGF0aWMgaW50IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY2hhciAqb3B0KVxcbiBcXHRpZiAoIWRlbGltKVxcbiBcXHRcXHRnb3RvIHBhcnNlX2ZhaWxlZDtcXG4gXFx0KmRlbGltID0gMDtcXG4tXFx0aXB2NiA9IG5ldHBvbGxfcGFyc2VfaXBfYWRkcihjdXIsIFxcdTAwMjZudC1cXHUwMDNlcmVtb3RlX2lwKTtcXG4tXFx0aWYgKGlwdjYgXFx1MDAzYyAwKVxcbitcXHRpZiAobmV0cG9sbF9wYXJzZV9pcF9hZGRyKGN1ciwgXFx1MDAyNm50LVxcdTAwM2VyZW1vdGVfaXApIFxcdTAwM2MgMClcXG4gXFx0XFx0Z290byBwYXJzZV9mYWlsZWQ7XFxuLVxcdGVsc2UgaWYgKGlwdmVyc2lvbl9zZXQgXFx1MDAyNlxcdTAwMjYgbnQtXFx1MDAzZWlwdjYgIT0gKGJvb2wpaXB2NilcXG4rXFx0aWYgKG50LVxcdTAwM2Vsb2NhbF9pcC5mYW1pbHkgIT0gQUZfVU5TUEVDIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBudC1cXHUwMDNlbG9jYWxfaXAuZmFtaWx5ICE9IG50LVxcdTAwM2VyZW1vdGVfaXAuZmFtaWx5KVxcbiBcXHRcXHRnb3RvIHBhcnNlX2ZhaWxlZDtcXG4tXFx0ZWxzZVxcbi1cXHRcXHRudC1cXHUwMDNlaXB2NiA9IChib29sKWlwdjY7XFxuIFxcdGN1ciA9IGRlbGltICsgMTtcXG4gXFxuIFxcdGlmICgqY3VyICE9IDApIHtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRwb2xsLmggYi9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaFxcbmluZGV4IDFjNmIxZWVjNWVmZDYuLmVjMDgyMWE1YjAyZGIgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRwb2xsLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaFxcbkBAIC0xNiwxMSArMTYsNiBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VkcC5oXFx1MDAzZVxcbiBcXG4tdW5pb24gaW5ldF9hZGRyIHtcXG4tXFx0X19iZTMyXFx0XFx0aXA7XFxuLVxcdHN0cnVjdCBpbjZfYWRkclxcdGluNjtcXG4tfTtcXG4tXFxuIHN0cnVjdCBuZXRwb2xsIHtcXG4gXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcXG4gXFx0bmV0ZGV2aWNlX3RyYWNrZXIgZGV2X3RyYWNrZXI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjM4OjIyLjM5MzQxNzQ2OVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE1MDI5NTE5NjcwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRDT05TT0xFXCIsXG4gICAgXCJORVRDT05TT0xFX0RZTkFNSUNcIixcbiAgICBcIkNPTkZJR0ZTX0ZTXCIsXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibG9jYWxfaXBfc3RvcmVcIixcbiAgICBcInJlbW90ZV9pcF9zdG9yZVwiLFxuICAgIFwiZW5hYmxlZF9zdG9yZVwiLFxuICAgIFwibmV0Y29uc19uZXRwb2xsX3NldHVwXCIsXG4gICAgXCJuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lXCIsXG4gICAgXCJuZXRwb2xsX3NlbmRfdWRwXCIsXG4gICAgXCJuZXRwb2xsX3BhcnNlX2lwX2FkZHJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbmV0Y29uc29sZSBkcml2ZXIgdG8gdHJhY2sgdGhlIElQIGFkZHJlc3MgZmFtaWx5IChBRl9JTkVULCBBRl9JTkVUNiwgQUZfVU5TUEVDKSBpbmRlcGVuZGVudGx5IGZvciBsb2NhbCBhbmQgcmVtb3RlIElQIGFkZHJlc3NlcywgcmVwbGFjaW5nIGEgc2luZ2xlIGBpcHY2YCBib29sZWFuIGZsYWcuIFRoaXMgY2hhbmdlcyBob3cgSVAgYWRkcmVzc2VzIGFyZSBwYXJzZWQsIHZhbGlkYXRlZCwgYW5kIHVzZWQgZHVyaW5nIG5ldGNvbnNvbGUgc2V0dXAgYW5kIG1lc3NhZ2UgdHJhbnNtaXNzaW9uLiBUaGUgbW9kaWZpZWQgY29kZSBpcyByZWFjaGFibGUgdmlhIHRoZSBuZXRjb25zb2xlIGNvbmZpZ2ZzIGludGVyZmFjZSAod2hpY2ggYWxsb3dzIGR5bmFtaWMgcmVjb25maWd1cmF0aW9uIG9mIHRhcmdldHMpIGFuZCBkdXJpbmcgbW9kdWxlIGluaXRpYWxpemF0aW9uIHZpYSBrZXJuZWwgY29tbWFuZCBsaW5lIHBhcmFtZXRlcnMuIFNpbmNlIHRoaXMgYWZmZWN0cyBjb3JlIGtlcm5lbCBsb2dnaW5nIGZ1bmN0aW9uYWxpdHkgYW5kIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgY29uZmlnZnMsIGl0IGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDBmNjEzMDVlMTZlMmZhZDRiZmFlMTVjMDZiNTAyYzJjMjAwNmU5ZjlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxMCAxOTozODoyMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyBiL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1xuaW5kZXggMDM5MTMzMDIzMjhjYy4uODEwZGVkNmU0OGYzMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1xuKysrIGIvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXG5AQCAtMTUxLDYgKzE1MSwxNSBAQCBlbnVtIHRhcmdldF9zdGF0ZSB7XG4gXHRTVEFURV9ERUFDVElWQVRFRCxcbiB9O1xuIFxuK3N0cnVjdCBpbmV0X2FkZHIge1xuK1x0LyogQWRkcmVzcyBmYW1pbHk6IEFGX1VOU1BFQyB3aGVuIHVuc2V0LCBlbHNlIEFGX0lORVQgb3IgQUZfSU5FVDYgKi9cbitcdHU4XHRcdFx0ZmFtaWx5O1xuK1x0dW5pb24ge1xuK1x0XHRfX2JlMzJcdFx0aXA7XG4rXHRcdHN0cnVjdCBpbjZfYWRkclx0aW42O1xuK1x0fTtcbit9O1xuK1xuIC8qKlxuICAqIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAtIFJlcHJlc2VudHMgYSBjb25maWd1cmVkIG5ldGNvbnNvbGUgdGFyZ2V0LlxuICAqIEBsaXN0Olx0TGlua3MgdGhpcyB0YXJnZXQgaW50byB0aGUgdGFyZ2V0X2xpc3QuXG5AQCAtMTgxLDcgKzE5MCw2IEBAIGVudW0gdGFyZ2V0X3N0YXRlIHtcbiAgKlx0XHRsb2NhbF9tYWNcdChyZWFkLW9ubHkpXG4gICogQGxvY2FsX2lwOlx0U291cmNlIElQIGFkZHJlc3Mgb2YgdGhlIHRhcmdldCAocmVhZC13cml0ZSkuXG4gICogQHJlbW90ZV9pcDpcdERlc3RpbmF0aW9uIElQIGFkZHJlc3Mgb2YgdGhlIHRhcmdldCAocmVhZC13cml0ZSkuXG4tICogQGlwdjY6XHRXaGV0aGVyIHRoZSB0YXJnZXQgYWRkcmVzc2VzIGFyZSBJUHY2IChyZWFkLXdyaXRlKS5cbiAgKiBAbG9jYWxfcG9ydDpcdFNvdXJjZSBVRFAgcG9ydCBvZiB0aGUgdGFyZ2V0IChyZWFkLXdyaXRlKS5cbiAgKiBAcmVtb3RlX3BvcnQ6IERlc3RpbmF0aW9uIFVEUCBwb3J0IG9mIHRoZSB0YXJnZXQgKHJlYWQtd3JpdGUpLlxuICAqIEByZW1vdGVfbWFjOlx0RGVzdGluYXRpb24gZXRoZXJuZXQgYWRkcmVzcyBvZiB0aGUgdGFyZ2V0IChyZWFkLXdyaXRlKS5cbkBAIC0yMTIsOCArMjIwLDcgQEAgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0IHtcbiBcdGJvb2xcdFx0XHRleHRlbmRlZDtcbiBcdGJvb2xcdFx0XHRyZWxlYXNlO1xuIFx0c3RydWN0IG5ldHBvbGxcdFx0bnA7XG4tXHR1bmlvbiBpbmV0X2FkZHJcdFx0bG9jYWxfaXAsIHJlbW90ZV9pcDtcbi1cdGJvb2xcdFx0XHRpcHY2O1xuK1x0c3RydWN0IGluZXRfYWRkclx0bG9jYWxfaXAsIHJlbW90ZV9pcDtcbiBcdHUxNlx0XHRcdGxvY2FsX3BvcnQsIHJlbW90ZV9wb3J0O1xuIFx0dThcdFx0XHRyZW1vdGVfbWFjW0VUSF9BTEVOXTtcbiBcdC8qIHByb3RlY3RlZCBieSB0YXJnZXRfbGlzdF9sb2NrOyArMSBnaXZlcyBzY25wcmludGYoKSByb29tIGZvciBpdHNcbkBAIC00MTUsNiArNDIyLDcgQEAgc3RhdGljIGludCBuZXRjb25zX3Rha2VfaXB2NihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuIFx0XHRcdFx0Y29udGludWU7XG4gXHRcdFx0LyogR290IHRoZSBJUCwgbGV0J3MgcmV0dXJuICovXG4gXHRcdFx0bnQtXHUwMDNlbG9jYWxfaXAuaW42ID0gaWZwLVx1MDAzZWFkZHI7XG4rXHRcdFx0bnQtXHUwMDNlbG9jYWxfaXAuZmFtaWx5ID0gQUZfSU5FVDY7XG4gXHRcdFx0ZXJyID0gMDtcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuQEAgLTQ1NiwyOCArNDY0LDEyIEBAIHN0YXRpYyBpbnQgbmV0Y29uc190YWtlX2lwdjQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcbiBcdH1cbiBcbiBcdG50LVx1MDAzZWxvY2FsX2lwLmlwID0gaWZhLVx1MDAzZWlmYV9sb2NhbDtcbitcdG50LVx1MDAzZWxvY2FsX2lwLmZhbWlseSA9IEFGX0lORVQ7XG4gXHRucF9pbmZvKG5wLCBcImxvY2FsIElQICVwSTRcXG5cIiwgXHUwMDI2bnQtXHUwMDNlbG9jYWxfaXAuaXApO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLS8qXG4tICogVGVzdCB3aGV0aGVyIHRoZSBjYWxsZXIgbGVmdCBudC1cdTAwM2Vsb2NhbF9pcCB1bnNldCwgc28gdGhhdFxuLSAqIG5ldGNvbnNfbmV0cG9sbF9zZXR1cCgpIHNob3VsZCBhdXRvLXBvcHVsYXRlIGl0IGZyb20gdGhlIGVncmVzcyBkZXZpY2UuXG4tICpcbi0gKiBudC1cdTAwM2Vsb2NhbF9pcCBpcyBhIHVuaW9uIG9mIF9fYmUzMiAoSVB2NCkgYW5kIHN0cnVjdCBpbjZfYWRkciAoSVB2NiksXG4tICogc28gYW4gSVB2NiBhZGRyZXNzIHdob3NlIGZpcnN0IDQgYnl0ZXMgYXJlIHplcm8gKGUuZy4gOjoxLCA6OjIsXG4tICogSVB2NC1tYXBwZWQgOjpmZmZmOmEuYi5jLmQpIG11c3Qgbm90IGJlIHRlc3RlZCB2aWEgdGhlIElQdjQgYXJtIOKAlFxuLSAqIGRvaW5nIHNvIHdvdWxkIG1pc2NsYXNzaWZ5IGEgY2FsbGVyLXN1cHBsaWVkIGFkZHJlc3MgYXMgdW5zZXQgYW5kXG4tICogc2lsZW50bHkgb3ZlcndyaXRlIGl0IHdpdGggd2hhdGV2ZXIgYWRkcmVzcyB0aGUgZGV2aWNlIGV4cG9zZXMuXG4tICovXG4tc3RhdGljIGJvb2wgbmV0Y29uc19sb2NhbF9pcF91bnNldChjb25zdCBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuLXtcbi1cdGlmIChudC1cdTAwM2VpcHY2KVxuLVx0XHRyZXR1cm4gaXB2Nl9hZGRyX2FueShcdTAwMjZudC1cdTAwM2Vsb2NhbF9pcC5pbjYpO1xuLVx0cmV0dXJuICFudC1cdTAwM2Vsb2NhbF9pcC5pcDtcbi19XG4tXG4gc3RhdGljIGludCBuZXRjb25zX25ldHBvbGxfc2V0dXAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbiB7XG4gXHRzdHJ1Y3QgbmV0ICpuZXQgPSBjdXJyZW50LVx1MDAzZW5zcHJveHktXHUwMDNlbmV0X25zO1xuQEAgLTQ4Nyw2ICs0NzksMTcgQEAgc3RhdGljIGludCBuZXRjb25zX25ldHBvbGxfc2V0dXAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbiBcdGJvb2wgaXBfb3ZlcndyaXR0ZW4gPSBmYWxzZTtcbiBcdGludCBlcnI7XG4gXG4rXHRpZiAobnQtXHUwMDNlcmVtb3RlX2lwLmZhbWlseSA9PSBBRl9VTlNQRUMpIHtcbitcdFx0bnBfZXJyKG5wLCBcInJlbW90ZSBJUCBhZGRyZXNzIG5vdCBjb25maWd1cmVkLCBhYm9ydGluZ1xcblwiKTtcbitcdFx0cmV0dXJuIC1FREVTVEFERFJSRVE7XG4rXHR9XG4rXG4rXHRpZiAobnQtXHUwMDNlbG9jYWxfaXAuZmFtaWx5ICE9IEFGX1VOU1BFQyBcdTAwMjZcdTAwMjZcbitcdCAgICBudC1cdTAwM2Vsb2NhbF9pcC5mYW1pbHkgIT0gbnQtXHUwMDNlcmVtb3RlX2lwLmZhbWlseSkge1xuK1x0XHRucF9lcnIobnAsIFwibG9jYWwgYW5kIHJlbW90ZSBJUCBhZGRyZXNzIGZhbWlsaWVzIGRpZmZlciwgYWJvcnRpbmdcXG5cIik7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuIFx0cnRubF9sb2NrKCk7XG4gXHRpZiAobnAtXHUwMDNlZGV2X25hbWVbMF0pXG4gXHRcdG5kZXYgPSBfX2Rldl9nZXRfYnlfbmFtZShuZXQsIG5wLVx1MDAzZWRldl9uYW1lKTtcbkBAIC01MjMsMTYgKzUyNiwxMyBAQCBzdGF0aWMgaW50IG5ldGNvbnNfbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuIFx0XHRydG5sX2xvY2soKTtcbiBcdH1cbiBcbi1cdGlmIChuZXRjb25zX2xvY2FsX2lwX3Vuc2V0KG50KSkge1xuLVx0XHRpZiAoIW50LVx1MDAzZWlwdjYpIHtcbi1cdFx0XHRlcnIgPSBuZXRjb25zX3Rha2VfaXB2NChudCwgbmRldik7XG4tXHRcdFx0aWYgKGVycilcbi1cdFx0XHRcdGdvdG8gcHV0O1xuLVx0XHR9IGVsc2Uge1xuK1x0aWYgKG50LVx1MDAzZWxvY2FsX2lwLmZhbWlseSA9PSBBRl9VTlNQRUMpIHtcbitcdFx0aWYgKG50LVx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXG4gXHRcdFx0ZXJyID0gbmV0Y29uc190YWtlX2lwdjYobnQsIG5kZXYpO1xuLVx0XHRcdGlmIChlcnIpXG4tXHRcdFx0XHRnb3RvIHB1dDtcbi1cdFx0fVxuK1x0XHRlbHNlXG4rXHRcdFx0ZXJyID0gbmV0Y29uc190YWtlX2lwdjQobnQsIG5kZXYpO1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdGdvdG8gcHV0O1xuIFx0XHRpcF9vdmVyd3JpdHRlbiA9IHRydWU7XG4gXHR9XG4gXG5AQCAtNzE0LDI0ICs3MTQsMjggQEAgc3RhdGljIHZvaWQgbmV0Y29uc29sZV9wcmludF9iYW5uZXIoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbiBcdHN0cnVjdCBuZXRwb2xsICpucCA9IFx1MDAyNm50LVx1MDAzZW5wO1xuIFxuIFx0bnBfaW5mbyhucCwgXCJsb2NhbCBwb3J0ICVkXFxuXCIsIG50LVx1MDAzZWxvY2FsX3BvcnQpO1xuLVx0aWYgKG50LVx1MDAzZWlwdjYpXG4rXHRpZiAobnQtXHUwMDNlbG9jYWxfaXAuZmFtaWx5ID09IEFGX1VOU1BFQylcbitcdFx0bnBfaW5mbyhucCwgXCJsb2NhbCBJUCB1bnNldFxcblwiKTtcbitcdGVsc2UgaWYgKG50LVx1MDAzZWxvY2FsX2lwLmZhbWlseSA9PSBBRl9JTkVUNilcbiBcdFx0bnBfaW5mbyhucCwgXCJsb2NhbCBJUHY2IGFkZHJlc3MgJXBJNmNcXG5cIiwgXHUwMDI2bnQtXHUwMDNlbG9jYWxfaXAuaW42KTtcbiBcdGVsc2VcbiBcdFx0bnBfaW5mbyhucCwgXCJsb2NhbCBJUHY0IGFkZHJlc3MgJXBJNFxcblwiLCBcdTAwMjZudC1cdTAwM2Vsb2NhbF9pcC5pcCk7XG4gXHRucF9pbmZvKG5wLCBcImludGVyZmFjZSBuYW1lICclcydcXG5cIiwgbnAtXHUwMDNlZGV2X25hbWUpO1xuIFx0bnBfaW5mbyhucCwgXCJsb2NhbCBldGhlcm5ldCBhZGRyZXNzICclcE0nXFxuXCIsIG5wLVx1MDAzZWRldl9tYWMpO1xuIFx0bnBfaW5mbyhucCwgXCJyZW1vdGUgcG9ydCAlZFxcblwiLCBudC1cdTAwM2VyZW1vdGVfcG9ydCk7XG4tXHRpZiAobnQtXHUwMDNlaXB2NilcbitcdGlmIChudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX1VOU1BFQylcbitcdFx0bnBfaW5mbyhucCwgXCJyZW1vdGUgSVAgdW5zZXRcXG5cIik7XG4rXHRlbHNlIGlmIChudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxuIFx0XHRucF9pbmZvKG5wLCBcInJlbW90ZSBJUHY2IGFkZHJlc3MgJXBJNmNcXG5cIiwgXHUwMDI2bnQtXHUwMDNlcmVtb3RlX2lwLmluNik7XG4gXHRlbHNlXG4gXHRcdG5wX2luZm8obnAsIFwicmVtb3RlIElQdjQgYWRkcmVzcyAlcEk0XFxuXCIsIFx1MDAyNm50LVx1MDAzZXJlbW90ZV9pcC5pcCk7XG4gXHRucF9pbmZvKG5wLCBcInJlbW90ZSBldGhlcm5ldCBhZGRyZXNzICVwTVxcblwiLCBudC1cdTAwM2VyZW1vdGVfbWFjKTtcbiB9XG4gXG4tLyogUGFyc2UgdGhlIHN0cmluZyBhbmQgcG9wdWxhdGUgdGhlIGBpbmV0X2FkZHJgIHVuaW9uLiBSZXR1cm4gMCBpZiBJUHY0IGlzXG4tICogcG9wdWxhdGVkLCAxIGlmIElQdjYgaXMgcG9wdWxhdGVkLCBhbmQgLTEgdXBvbiBmYWlsdXJlLlxuKy8qIFBhcnNlIHRoZSBzdHJpbmcgYW5kIHBvcHVsYXRlIHRoZSBgaW5ldF9hZGRyYCBzdHJ1Y3QuIFJldHVybiAwIG9uIHN1Y2Nlc3NcbisgKiBhbmQgLTEgdXBvbiBmYWlsdXJlLlxuICAqL1xuLXN0YXRpYyBpbnQgbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGNvbnN0IGNoYXIgKnN0ciwgdW5pb24gaW5ldF9hZGRyICphZGRyKVxuK3N0YXRpYyBpbnQgbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGNvbnN0IGNoYXIgKnN0ciwgc3RydWN0IGluZXRfYWRkciAqYWRkcilcbiB7XG4gXHRjb25zdCBjaGFyICplbmQgPSBOVUxMO1xuIFx0aW50IGxlbjtcbkBAIC03NDMsMTQgKzc0NywxOCBAQCBzdGF0aWMgaW50IG5ldHBvbGxfcGFyc2VfaXBfYWRkcihjb25zdCBjaGFyICpzdHIsIHVuaW9uIGluZXRfYWRkciAqYWRkcilcbiBcdGlmIChzdHJbbGVuIC0gMV0gPT0gJ1xcbicpXG4gXHRcdGxlbiAtPSAxO1xuIFxuLVx0aWYgKGluNF9wdG9uKHN0ciwgbGVuLCAodm9pZCAqKWFkZHIsIC0xLCBcdTAwMjZlbmQpIFx1MDAzZSAwIFx1MDAyNlx1MDAyNlxuLVx0ICAgICghZW5kIHx8ICplbmQgPT0gMCB8fCAqZW5kID09ICdcXG4nKSlcbitcdGlmIChpbjRfcHRvbihzdHIsIGxlbiwgKHZvaWQgKilcdTAwMjZhZGRyLVx1MDAzZWlwLCAtMSwgXHUwMDI2ZW5kKSBcdTAwM2UgMCBcdTAwMjZcdTAwMjZcbitcdCAgICAoIWVuZCB8fCAqZW5kID09IDAgfHwgKmVuZCA9PSAnXFxuJykpIHtcbitcdFx0YWRkci1cdTAwM2VmYW1pbHkgPSBBRl9JTkVUO1xuIFx0XHRyZXR1cm4gMDtcbitcdH1cbiBcbiBcdGlmIChJU19FTkFCTEVEKENPTkZJR19JUFY2KSBcdTAwMjZcdTAwMjZcbi1cdCAgICBpbjZfcHRvbihzdHIsIGxlbiwgKHZvaWQgKilhZGRyLCAtMSwgXHUwMDI2ZW5kKSBcdTAwM2UgMCBcdTAwMjZcdTAwMjZcbi1cdCAgICAoIWVuZCB8fCAqZW5kID09IDAgfHwgKmVuZCA9PSAnXFxuJykpXG4tXHRcdHJldHVybiAxO1xuK1x0ICAgIGluNl9wdG9uKHN0ciwgbGVuLCAodm9pZCAqKVx1MDAyNmFkZHItXHUwMDNlaW42LCAtMSwgXHUwMDI2ZW5kKSBcdTAwM2UgMCBcdTAwMjZcdTAwMjZcbitcdCAgICAoIWVuZCB8fCAqZW5kID09IDAgfHwgKmVuZCA9PSAnXFxuJykpIHtcbitcdFx0YWRkci1cdTAwM2VmYW1pbHkgPSBBRl9JTkVUNjtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4gXG4gXHRyZXR1cm4gLTE7XG4gfVxuQEAgLTg1NSwyMCArODYzLDI0IEBAIHN0YXRpYyBzc2l6ZV90IGxvY2FsX2lwX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXG4ge1xuIFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcbiBcbi1cdGlmIChudC1cdTAwM2VpcHY2KVxuK1x0aWYgKG50LVx1MDAzZWxvY2FsX2lwLmZhbWlseSA9PSBBRl9VTlNQRUMpXG4rXHRcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCJcXG5cIik7XG4rXHRpZiAobnQtXHUwMDNlbG9jYWxfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxuIFx0XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwiJXBJNmNcXG5cIiwgXHUwMDI2bnQtXHUwMDNlbG9jYWxfaXAuaW42KTtcbiBcdGVsc2Vcbi1cdFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcIiVwSTRcXG5cIiwgXHUwMDI2bnQtXHUwMDNlbG9jYWxfaXApO1xuK1x0XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwiJXBJNFxcblwiLCBcdTAwMjZudC1cdTAwM2Vsb2NhbF9pcC5pcCk7XG4gfVxuIFxuIHN0YXRpYyBzc2l6ZV90IHJlbW90ZV9pcF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxuIHtcbiBcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7XG4gXG4tXHRpZiAobnQtXHUwMDNlaXB2NilcbitcdGlmIChudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX1VOU1BFQylcbitcdFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcIlxcblwiKTtcbitcdGlmIChudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxuIFx0XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwiJXBJNmNcXG5cIiwgXHUwMDI2bnQtXHUwMDNlcmVtb3RlX2lwLmluNik7XG4gXHRlbHNlXG4tXHRcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCIlcEk0XFxuXCIsIFx1MDAyNm50LVx1MDAzZXJlbW90ZV9pcCk7XG4rXHRcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCIlcEk0XFxuXCIsIFx1MDAyNm50LVx1MDAzZXJlbW90ZV9pcC5pcCk7XG4gfVxuIFxuIHN0YXRpYyBzc2l6ZV90IGxvY2FsX21hY19zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxuQEAgLTEyMTMsNyArMTIyNSw2IEBAIHN0YXRpYyBzc2l6ZV90IGxvY2FsX2lwX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxuIHtcbiBcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7XG4gXHRzc2l6ZV90IHJldCA9IC1FSU5WQUw7XG4tXHRpbnQgaXB2NjtcbiBcbiBcdGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF9sb2NrKCk7XG4gXHRpZiAobnQtXHUwMDNlc3RhdGUgPT0gU1RBVEVfRU5BQkxFRCkge1xuQEAgLTEyMjIsMTAgKzEyMzMsOCBAQCBzdGF0aWMgc3NpemVfdCBsb2NhbF9pcF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZixcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuIFxuLVx0aXB2NiA9IG5ldHBvbGxfcGFyc2VfaXBfYWRkcihidWYsIFx1MDAyNm50LVx1MDAzZWxvY2FsX2lwKTtcbi1cdGlmIChpcHY2ID09IC0xKVxuK1x0aWYgKG5ldHBvbGxfcGFyc2VfaXBfYWRkcihidWYsIFx1MDAyNm50LVx1MDAzZWxvY2FsX2lwKSBcdTAwM2MgMClcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuLVx0bnQtXHUwMDNlaXB2NiA9ICEhaXB2NjtcbiBcbiBcdHJldCA9IGNvdW50O1xuIG91dF91bmxvY2s6XG5AQCAtMTIzOCw3ICsxMjQ3LDYgQEAgc3RhdGljIHNzaXplX3QgcmVtb3RlX2lwX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxuIHtcbiBcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7XG4gXHRzc2l6ZV90IHJldCA9IC1FSU5WQUw7XG4tXHRpbnQgaXB2NjtcbiBcbiBcdGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF9sb2NrKCk7XG4gXHRpZiAobnQtXHUwMDNlc3RhdGUgPT0gU1RBVEVfRU5BQkxFRCkge1xuQEAgLTEyNDcsMTAgKzEyNTUsOCBAQCBzdGF0aWMgc3NpemVfdCByZW1vdGVfaXBfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdH1cbiBcbi1cdGlwdjYgPSBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoYnVmLCBcdTAwMjZudC1cdTAwM2VyZW1vdGVfaXApO1xuLVx0aWYgKGlwdjYgPT0gLTEpXG4rXHRpZiAobmV0cG9sbF9wYXJzZV9pcF9hZGRyKGJ1ZiwgXHUwMDI2bnQtXHUwMDNlcmVtb3RlX2lwKSBcdTAwM2MgMClcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuLVx0bnQtXHUwMDNlaXB2NiA9ICEhaXB2NjtcbiBcbiBcdHJldCA9IGNvdW50O1xuIG91dF91bmxvY2s6XG5AQCAtMjA2MSw3ICsyMDY3LDcgQEAgc3RhdGljIHZvaWQgbmV0cG9sbF91ZHBfY2hlY2tzdW0oc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcbiBcbiBcdC8qIGNoZWNrIG5lZWRzIHRvIGJlIHNldCwgc2luY2UgaXQgd2lsbCBiZSBjb25zdW1lZCBpbiBjc3VtX3BhcnRpYWwgKi9cbiBcdHVkcGgtXHUwMDNlY2hlY2sgPSAwO1xuLVx0aWYgKG50LVx1MDAzZWlwdjYpXG4rXHRpZiAobnQtXHUwMDNlcmVtb3RlX2lwLmZhbWlseSA9PSBBRl9JTkVUNilcbiBcdFx0dWRwaC1cdTAwM2VjaGVjayA9IGNzdW1faXB2Nl9tYWdpYyhcdTAwMjZudC1cdTAwM2Vsb2NhbF9pcC5pbjYsXG4gXHRcdFx0XHRcdCAgICAgIFx1MDAyNm50LVx1MDAzZXJlbW90ZV9pcC5pbjYsXG4gXHRcdFx0XHRcdCAgICAgIHVkcF9sZW4sIElQUFJPVE9fVURQLFxuQEAgLTIxMDIsNyArMjEwOCw3IEBAIHN0YXRpYyB2b2lkIHB1c2hfZXRoKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpO1xuIFx0ZXRoZXJfYWRkcl9jb3B5KGV0aC1cdTAwM2VoX3NvdXJjZSwgbnAtXHUwMDNlZGV2LVx1MDAzZWRldl9hZGRyKTtcbiBcdGV0aGVyX2FkZHJfY29weShldGgtXHUwMDNlaF9kZXN0LCBudC1cdTAwM2VyZW1vdGVfbWFjKTtcbi1cdGlmIChudC1cdTAwM2VpcHY2KVxuK1x0aWYgKG50LVx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXG4gXHRcdGV0aC1cdTAwM2VoX3Byb3RvID0gaHRvbnMoRVRIX1BfSVBWNik7XG4gXHRlbHNlXG4gXHRcdGV0aC1cdTAwM2VoX3Byb3RvID0gaHRvbnMoRVRIX1BfSVApO1xuQEAgLTIxNzEsNyArMjE3Nyw3IEBAIHN0YXRpYyBpbnQgbmV0cG9sbF9zZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csXG4gXHRcdFdBUk5fT05fT05DRSghaXJxc19kaXNhYmxlZCgpKTtcbiBcbiBcdHVkcF9sZW4gPSBsZW4gKyBzaXplb2Yoc3RydWN0IHVkcGhkcik7XG4tXHRpZiAobnQtXHUwMDNlaXB2NilcbitcdGlmIChudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxuIFx0XHRpcF9sZW4gPSB1ZHBfbGVuICsgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKTtcbiBcdGVsc2VcbiBcdFx0aXBfbGVuID0gdWRwX2xlbiArIHNpemVvZihzdHJ1Y3QgaXBoZHIpO1xuQEAgLTIxODcsNyArMjE5Myw3IEBAIHN0YXRpYyBpbnQgbmV0cG9sbF9zZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csXG4gXHRza2JfcHV0KHNrYiwgbGVuKTtcbiBcbiBcdHB1c2hfdWRwKG50LCBza2IsIGxlbik7XG4tXHRpZiAobnQtXHUwMDNlaXB2NilcbitcdGlmIChudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxuIFx0XHRwdXNoX2lwdjYobnQsIHNrYiwgbGVuKTtcbiBcdGVsc2VcbiBcdFx0cHVzaF9pcHY0KG50LCBza2IsIGxlbik7XG5AQCAtMjUwNywxMCArMjUxMyw4IEBAIF9fcmVsZWFzZXMoXHUwMDI2dGFyZ2V0X2xpc3RfbG9jaylcbiBzdGF0aWMgaW50IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY2hhciAqb3B0KVxuIHtcbiBcdHN0cnVjdCBuZXRwb2xsICpucCA9IFx1MDAyNm50LVx1MDAzZW5wO1xuLVx0Ym9vbCBpcHZlcnNpb25fc2V0ID0gZmFsc2U7XG4gXHRjaGFyICpjdXIgPSBvcHQ7XG4gXHRjaGFyICpkZWxpbTtcbi1cdGludCBpcHY2O1xuIFxuIFx0aWYgKCpjdXIgIT0gJ0AnKSB7XG4gXHRcdGRlbGltID0gc3RyY2hyKGN1ciwgJ0AnKTtcbkBAIC0yNTI0LDE2ICsyNTI4LDEyIEBAIHN0YXRpYyBpbnQgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjaGFyICpvcHQpXG4gXHRjdXIrKztcbiBcbiBcdGlmICgqY3VyICE9ICcvJykge1xuLVx0XHRpcHZlcnNpb25fc2V0ID0gdHJ1ZTtcbiBcdFx0ZGVsaW0gPSBzdHJjaHIoY3VyLCAnLycpO1xuIFx0XHRpZiAoIWRlbGltKVxuIFx0XHRcdGdvdG8gcGFyc2VfZmFpbGVkO1xuIFx0XHQqZGVsaW0gPSAwO1xuLVx0XHRpcHY2ID0gbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGN1ciwgXHUwMDI2bnQtXHUwMDNlbG9jYWxfaXApO1xuLVx0XHRpZiAoaXB2NiBcdTAwM2MgMClcbitcdFx0aWYgKG5ldHBvbGxfcGFyc2VfaXBfYWRkcihjdXIsIFx1MDAyNm50LVx1MDAzZWxvY2FsX2lwKSBcdTAwM2MgMClcbiBcdFx0XHRnb3RvIHBhcnNlX2ZhaWxlZDtcbi1cdFx0ZWxzZVxuLVx0XHRcdG50LVx1MDAzZWlwdjYgPSAoYm9vbClpcHY2O1xuIFx0XHRjdXIgPSBkZWxpbTtcbiBcdH1cbiBcdGN1cisrO1xuQEAgLTI1NzUsMTMgKzI1NzUsMTEgQEAgc3RhdGljIGludCBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNoYXIgKm9wdClcbiBcdGlmICghZGVsaW0pXG4gXHRcdGdvdG8gcGFyc2VfZmFpbGVkO1xuIFx0KmRlbGltID0gMDtcbi1cdGlwdjYgPSBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY3VyLCBcdTAwMjZudC1cdTAwM2VyZW1vdGVfaXApO1xuLVx0aWYgKGlwdjYgXHUwMDNjIDApXG4rXHRpZiAobmV0cG9sbF9wYXJzZV9pcF9hZGRyKGN1ciwgXHUwMDI2bnQtXHUwMDNlcmVtb3RlX2lwKSBcdTAwM2MgMClcbiBcdFx0Z290byBwYXJzZV9mYWlsZWQ7XG4tXHRlbHNlIGlmIChpcHZlcnNpb25fc2V0IFx1MDAyNlx1MDAyNiBudC1cdTAwM2VpcHY2ICE9IChib29sKWlwdjYpXG4rXHRpZiAobnQtXHUwMDNlbG9jYWxfaXAuZmFtaWx5ICE9IEFGX1VOU1BFQyBcdTAwMjZcdTAwMjZcbitcdCAgICBudC1cdTAwM2Vsb2NhbF9pcC5mYW1pbHkgIT0gbnQtXHUwMDNlcmVtb3RlX2lwLmZhbWlseSlcbiBcdFx0Z290byBwYXJzZV9mYWlsZWQ7XG4tXHRlbHNlXG4tXHRcdG50LVx1MDAzZWlwdjYgPSAoYm9vbClpcHY2O1xuIFx0Y3VyID0gZGVsaW0gKyAxO1xuIFxuIFx0aWYgKCpjdXIgIT0gMCkge1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0cG9sbC5oIGIvaW5jbHVkZS9saW51eC9uZXRwb2xsLmhcbmluZGV4IDFjNmIxZWVjNWVmZDYuLmVjMDgyMWE1YjAyZGIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaFxuKysrIGIvaW5jbHVkZS9saW51eC9uZXRwb2xsLmhcbkBAIC0xNiwxMSArMTYsNiBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91ZHAuaFx1MDAzZVxuIFxuLXVuaW9uIGluZXRfYWRkciB7XG4tXHRfX2JlMzJcdFx0aXA7XG4tXHRzdHJ1Y3QgaW42X2FkZHJcdGluNjtcbi19O1xuLVxuIHN0cnVjdCBuZXRwb2xsIHtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG4gXHRuZXRkZXZpY2VfdHJhY2tlciBkZXZfdHJhY2tlcjtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjM4OjIyLjM5MzQxODU5OFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY2MTA2OTczNjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZXRjb25zb2xlIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBgbmV0Y29uc29sZS5jYCBhbmQgYG5ldHBvbGwuaGAuIFRoZSBnaXN0IG9mIGl0IGlzIGEgcmVmYWN0b3Igb2YgaG93IElQIGFkZHJlc3NlcyBhbmQgdGhlaXIgZmFtaWxpZXMgYXJlIGhhbmRsZWQgd2l0aGluIG5ldGNvbnNvbGUuIFRoZXkndmUgeWFua2VkIHRoZSBgdW5pb24gaW5ldF9hZGRyYCBmcm9tIGBuZXRwb2xsLmhgIGFuZCBpbnRyb2R1Y2VkIGEgYHN0cnVjdCBpbmV0X2FkZHJgIGluIGBuZXRjb25zb2xlLmNgLCB3aGljaCBtYWtlcyBzZW5zZSBmb3IgYmV0dGVyIGVuY2Fwc3VsYXRpb24uIFRoZSBrZXkgYWRkaXRpb24gaXMgdGhlIGBmYW1pbHlgIGZpZWxkIHdpdGhpbiBgc3RydWN0IGluZXRfYWRkcmAgKEFGX1VOU1BFQywgQUZfSU5FVCwgQUZfSU5FVDYpLCBhbmQgaXQgbG9va3MgbGlrZSB0aGV5J3ZlIHJlcGxhY2VkIHRoYXQgYGlwdjZgIGJvb2xlYW4gZmxhZyBpbiBgbmV0Y29uc29sZV90YXJnZXRgIHdpdGggdGhlIGBmYW1pbHlgIGZpZWxkIGluIGJvdGggYGxvY2FsX2lwYCBhbmQgYHJlbW90ZV9pcGAuIFRoaXMgaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgc2hpZnQ7IGl0IGFsbG93cyBmb3IgaW5kZXBlbmRlbnQgZmFtaWx5IHRyYWNraW5nIGZvciBsb2NhbCBhbmQgcmVtb3RlIElQcywgYW5kIGl0IGxvb2tzIGxpa2UgdGhlcmUncyBzb21lIGNvbnNpc3RlbmN5IGNoZWNraW5nIGluIHRoZSBtaXggbm93LlxuXG5NeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgaXMgdGhpcyByZWFjaGFibGU/IEFuZCwgbW9yZSBpbXBvcnRhbnRseSwgaXMgaXQgZnV6emFibGU/IE5ldGNvbnNvbGUsIGFzIGEgY29yZSBrZXJuZWwgZmVhdHVyZSBmb3Igc2VuZGluZyBsb2dzIG92ZXIgVURQLCBpcyBjZXJ0YWlubHkgaW50ZXJlc3RpbmcgZnJvbSBhIHNlY3VyaXR5IHBlcnNwZWN0aXZlLiBJdCdzIGNvbmZpZ3VyZWQgZWl0aGVyIHZpYSBzeXNmcyAoY29uZmlnZnMpIG9yIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lLiBUaGUgZmFjdCB0aGF0IHN5c2ZzIGlzIHJvb3QtcmVhY2hhYmxlIGFuZCBzeXprYWxsZXIgY2FuIGludGVyYWN0IHdpdGggY29uZmlnZnMgaXMgYSBodWdlIHBsdXMuIFRoaXMgbWFrZXMgaXQgYSBncmVhdCB0YXJnZXQgaWYgdGhlcmUgYXJlIGJ1Z3MuXG5cblRoZSBjb2RlIGNoYW5nZXMgYXJlIHRvdWNoaW5nIHNldmVyYWwgaW1wb3J0YW50IGFyZWFzOiBgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZWAsIHRoZSBgKl9zdG9yZWAgZnVuY3Rpb25zIChzcGVjaWZpY2FsbHkgdGhlIG9uZXMgcmVsYXRlZCB0byBzZXR0aW5nIGxvY2FsIGFuZCByZW1vdGUgSVBzKSwgYG5ldGNvbnNfbmV0cG9sbF9zZXR1cGAsIGFuZCBgbmV0cG9sbF9zZW5kX3VkcGAuIFRoZXNlIGFyZSBhbGwgcHJpbWUgbG9jYXRpb25zIGZvciBidWdzLlxuXG5Ob3csIGxldCdzIHNlZSB3aGF0IHRoZSBjb25maWcgb3B0aW9ucyBhcmUgZm9yIG5ldGNvbnNvbGUuIEkgd2FudCB0byBjaGVjayBmb3IgdGhlIG9wdGlvbnMgYENPTkZJR19ORVRDT05TT0xFYCBhbmQgYENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUNgIChmb3IgY29uZmlnZnMgc3VwcG9ydCkgYXMgdGhleSBoYXZlIHRvIGJlIGVuYWJsZWQgdG8gZW5hYmxlIHRoZSBmZWF0dXJlcyB0aGF0IGFyZSBjaGFuZ2VkIGJ5IHRoZSBwYXRjaC4gSSdsbCB1c2UgYGdyZXBwZXJgIHRvIHNlYXJjaCBmb3IgdGhlbS4gVGhpcyB3aWxsIHRlbGwgbWUgaWYgdGhlIGFmZmVjdGVkIGNvZGUgcGF0aHMgYXJlIGFjdGl2ZSwgYW5kIGlmIHNvLCBob3cgYnJvYWRseSB1c2VkIHRoZXkgYXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDI5LCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzM0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6Mzg6MjkuMDA0MTE5NTM1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNDEwODE1NzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVENPTlNPTEVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZz0zMTg9Y29uZmlnIE1BQ1NFQ1xcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMjYtXFxuZHJpdmVycy9uZXQvS2NvbmZpZzozMjc6Y29uZmlnIE5FVENPTlNPTEVcXG5kcml2ZXJzL25ldC9LY29uZmlnLTMyOC1cXHR0cmlzdGF0ZSBcXFwiTmV0d29yayBjb25zb2xlIGxvZ2dpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctMzMzLVxcbmRyaXZlcnMvbmV0L0tjb25maWc6MzM0OmNvbmZpZyBORVRDT05TT0xFX0RZTkFNSUNcXG5kcml2ZXJzL25ldC9LY29uZmlnLTMzNS1cXHRib29sIFxcXCJEeW5hbWljIHJlY29uZmlndXJhdGlvbiBvZiBsb2dnaW5nIHRhcmdldHNcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTM0NC1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjM0NTpjb25maWcgTkVUQ09OU09MRV9FWFRFTkRFRF9MT0dcXG5kcml2ZXJzL25ldC9LY29uZmlnLTM0Ni1cXHRib29sIFxcXCJTZXQga2VybmVsIGV4dGVuZGVkIG1lc3NhZ2UgYnkgZGVmYXVsdFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctMzU0LVxcbmRyaXZlcnMvbmV0L0tjb25maWc6MzU1OmNvbmZpZyBORVRDT05TT0xFX1BSRVBFTkRfUkVMRUFTRVxcbmRyaXZlcnMvbmV0L0tjb25maWctMzU2LVxcdGJvb2wgXFxcIlByZXBlbmQga2VybmVsIHJlbGVhc2UgdmVyc2lvbiBpbiB0aGUgbWVzc2FnZSBieSBkZWZhdWx0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTozODozMS4wNDUyMDY3NDFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjAxNTM3Mzc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGlzIHRhc2s6XG5cbioqQW5hbHl6aW5nIE5FVENPTlNPTEUgRGVwZW5kZW5jaWVzIGluIEtjb25maWcqKlxuXG5BbHJpZ2h0LCB0aGUgb2JqZWN0aXZlIGlzIHByZXR0eSBjbGVhcjogZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzIGZvciBgTkVUQ09OU09MRWAuIE15IGZpcnN0IGluc3RpbmN0IGlzIGFsd2F5cyB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBUaGUgS2NvbmZpZyBmaWxlcyBhcmUgdGhlIGhlYXJ0IG9mIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHNvIHRoYXQncyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQuIFNwZWNpZmljYWxseSwgSSdsbCBnbyBzdHJhaWdodCB0byBgZHJpdmVycy9uZXQvS2NvbmZpZ2AuIFRoYXQncyB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIGJlZ2luIGxvb2tpbmcgZm9yIGBORVRDT05TT0xFYCBhbmQgdW5kZXJzdGFuZCB3aGF0IG5lZWRzIHRvIGJlIGVuYWJsZWQgb3IgaW4gcGxhY2UgZm9yIGl0IHRvIHdvcmsuIEkgZXhwZWN0IHRvIGZpbmQgc29tZSBgZGVwZW5kcyBvbmAgc3RhdGVtZW50cywgbWF5YmUgc29tZSBgc2VsZWN0YCBzdGF0ZW1lbnRzLCBhbmQgcGVyaGFwcyBldmVuIHNvbWUgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgbmV0d29yay1yZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBUaGlzIGluaXRpYWwgY2hlY2sgaW4gS2NvbmZpZyBzaG91bGQgdGVsbCBtZSB0aGUgcHJpbWFyeSBwcmVyZXF1aXNpdGVzIGJlZm9yZSBkaWdnaW5nIGRlZXBlciBpZiBuZWNlc3NhcnkuIEknbGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2Ugb3RoZXIgbmV0d29yayBkcml2ZXJzIHRoYXQgbWlnaHQgYmUgcmVxdWlyZWQsIHNwZWNpZmljIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb25zLCBvciBldmVuIG90aGVyIGtlcm5lbCBmZWF0dXJlcyB0aGF0IG5lZWQgdG8gYmUgYWN0aXZlLiBUaGlzIGlzIHRoZSBmaXJzdCBzdGVwIGluIHVuZGVyc3RhbmRpbmcgdGhlIGNvbXBsZXRlIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlIGZvciBgTkVUQ09OU09MRWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc0ODIsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTozODozNS4yNDY3NDY4N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTE3NzA3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUQ09OU09MRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L0tjb25maWc9MzE4PWNvbmZpZyBNQUNTRUNcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctMzI2LVxcbmRyaXZlcnMvbmV0L0tjb25maWc6MzI3OmNvbmZpZyBORVRDT05TT0xFXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMjgtXFx0dHJpc3RhdGUgXFxcIk5ldHdvcmsgY29uc29sZSBsb2dnaW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTMzMy1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjMzNDpjb25maWcgTkVUQ09OU09MRV9EWU5BTUlDXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMzUtXFx0Ym9vbCBcXFwiRHluYW1pYyByZWNvbmZpZ3VyYXRpb24gb2YgbG9nZ2luZyB0YXJnZXRzXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zNDQtXFxuZHJpdmVycy9uZXQvS2NvbmZpZzozNDU6Y29uZmlnIE5FVENPTlNPTEVfRVhURU5ERURfTE9HXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zNDYtXFx0Ym9vbCBcXFwiU2V0IGtlcm5lbCBleHRlbmRlZCBtZXNzYWdlIGJ5IGRlZmF1bHRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTM1NC1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjM1NTpjb25maWcgTkVUQ09OU09MRV9QUkVQRU5EX1JFTEVBU0VcXG5kcml2ZXJzL25ldC9LY29uZmlnLTM1Ni1cXHRib29sIFxcXCJQcmVwZW5kIGtlcm5lbCByZWxlYXNlIHZlcnNpb24gaW4gdGhlIG1lc3NhZ2UgYnkgZGVmYXVsdFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6Mzg6MzUuMjkxOTI3OTk1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE2MTgwODY0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnkgZm9yIGFuIGV4cGVydDpcblxuKipEaXZpbmcgaW50byB0aGUgTmV0d29yayBDb25maWd1cmF0aW9uKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgd2l0aCB0aGUgbmV0d29yayBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBkcml2ZXJzL25ldC9LY29uZmlnYCBmaWxlLiBJJ20gZm9jdXNpbmcgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDMyNyDigJMgdGhhdCdzIG9mdGVuIHdoZXJlIHRoZSBqdWljeSBiaXRzIGFyZSwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBjb3JlIG5ldHdvcmtpbmcgZmVhdHVyZXMgb3IgcGVyaGFwcyBhIHNwZWNpZmljIGRyaXZlciBJJ20gdHJ5aW5nIHRvIHVuZGVyc3RhbmQuIEknbSBleHBlY3RpbmcgdG8gZmluZCBlaXRoZXIgYSBoaWdoLWxldmVsIG92ZXJ2aWV3IG9mIGF2YWlsYWJsZSBuZXR3b3JrIGZlYXR1cmVzLCBwZXJoYXBzIHNvbWUgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgb3IgbWF5YmUgZXZlbiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBhIHBhcnRpY3VsYXIgbmV0d29yayBkcml2ZXIgb3IgdGVjaG5vbG9neS4gVGltZSB0byBjcmFjayBpdCBvcGVuIGFuZCBzZWUgd2hhdCByZXZlbGF0aW9ucyBsaW5lIDMyNyBob2xkcyEgTGV0J3Mgc2VlIHdoYXQgZ2VtcyB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzk5OSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjM4OjM4LjQ1MzczODgyNFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3OTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMzIwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzIwOlxcdFxcdHNlbGVjdCBDUllQVE9cXG4gMzIxOlxcdFxcdHNlbGVjdCBDUllQVE9fQUVTXFxuIDMyMjpcXHRcXHRzZWxlY3QgQ1JZUFRPX0dDTVxcbiAzMjM6XFx0XFx0c2VsZWN0IEdST19DRUxMU1xcbiAzMjQ6XFx0XFx0aGVscFxcbiAzMjU6XFx0XFx0ICAgTUFDc2VjIGlzIGFuIGVuY3J5cHRpb24gc3RhbmRhcmQgZm9yIEV0aGVybmV0LlxcbiAzMjY6XFx0XFxuIDMyNzpcXHRjb25maWcgTkVUQ09OU09MRVxcbiAzMjg6XFx0XFx0dHJpc3RhdGUgXFxcIk5ldHdvcmsgY29uc29sZSBsb2dnaW5nIHN1cHBvcnRcXFwiXFxuIDMyOTpcXHRcXHRkZXBlbmRzIG9uIFBSSU5US1xcbiAzMzA6XFx0XFx0aGVscFxcbiAzMzE6XFx0XFx0ICBJZiB5b3Ugd2FudCB0byBsb2cga2VybmVsIG1lc3NhZ2VzIG92ZXIgdGhlIG5ldHdvcmssIGVuYWJsZSB0aGlzLlxcbiAzMzI6XFx0XFx0ICBTZWUgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGNvbnNvbGUucnN0XFx1MDAzZSBmb3IgZGV0YWlscy5cXG4gMzMzOlxcdFxcbiAzMzQ6XFx0Y29uZmlnIE5FVENPTlNPTEVfRFlOQU1JQ1xcbiAzMzU6XFx0XFx0Ym9vbCBcXFwiRHluYW1pYyByZWNvbmZpZ3VyYXRpb24gb2YgbG9nZ2luZyB0YXJnZXRzXFxcIlxcbiAzMzY6XFx0XFx0ZGVwZW5kcyBvbiBORVRDT05TT0xFIFxcdTAwMjZcXHUwMDI2IFNZU0ZTIFxcdTAwMjZcXHUwMDI2IENPTkZJR0ZTX0ZTIFxcdTAwMjZcXHUwMDI2IFxcXFxcXG4gMzM3OlxcdFxcdFxcdFxcdCEoTkVUQ09OU09MRT15IFxcdTAwMjZcXHUwMDI2IENPTkZJR0ZTX0ZTPW0pXFxuIDMzODpcXHRcXHRzZWxlY3QgUFJJTlRLX0VYRUNVVElPTl9DVFhcXG4gMzM5OlxcdFxcdGhlbHBcXG4gMzQwOlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgYWJpbGl0eSB0byBkeW5hbWljYWxseSByZWNvbmZpZ3VyZSB0YXJnZXRcXG4gMzQxOlxcdFxcdCAgcGFyYW1ldGVycyAoaW50ZXJmYWNlLCBJUCBhZGRyZXNzZXMsIHBvcnQgbnVtYmVycywgTUFDIGFkZHJlc3NlcylcXG4gMzQyOlxcdFxcdCAgYXQgcnVudGltZSB0aHJvdWdoIGEgdXNlcnNwYWNlIGludGVyZmFjZSBleHBvcnRlZCB1c2luZyBjb25maWdmcy5cXG4gMzQzOlxcdFxcdCAgU2VlIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRjb25zb2xlLnJzdFxcdTAwM2UgZm9yIGRldGFpbHMuXFxuIDM0NDpcXHRcXG4gMzQ1OlxcdGNvbmZpZyBORVRDT05TT0xFX0VYVEVOREVEX0xPR1xcbiAzNDY6XFx0XFx0Ym9vbCBcXFwiU2V0IGtlcm5lbCBleHRlbmRlZCBtZXNzYWdlIGJ5IGRlZmF1bHRcXFwiXFxuIDM0NzpcXHRcXHRkZXBlbmRzIG9uIE5FVENPTlNPTEVcXG4gMzQ4OlxcdFxcdGRlZmF1bHQgblxcbiAzNDk6XFx0XFx0aGVscFxcbiAzNTA6XFx0XFx0ICBTZXQgZXh0ZW5kZWQgbG9nIHN1cHBvcnQgZm9yIG5ldGNvbnNvbGUgbWVzc2FnZS4gSWYgdGhpcyBvcHRpb24gaXNcXG4gMzUxOlxcdFxcdCAgc2V0LCBsb2cgbWVzc2FnZXMgYXJlIHRyYW5zbWl0dGVkIHdpdGggZXh0ZW5kZWQgbWV0YWRhdGEgaGVhZGVyIGluIGFcXG4gMzUyOlxcdFxcdCAgZm9ybWF0IHNpbWlsYXIgdG8gL2Rldi9rbXNnLiAgU2VlXFxuIDM1MzpcXHRcXHQgIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRjb25zb2xlLnJzdFxcdTAwM2UgZm9yIGRldGFpbHMuXFxuIDM1NDpcXHRcXG4gMzU1OlxcdGNvbmZpZyBORVRDT05TT0xFX1BSRVBFTkRfUkVMRUFTRVxcbiAzNTY6XFx0XFx0Ym9vbCBcXFwiUHJlcGVuZCBrZXJuZWwgcmVsZWFzZSB2ZXJzaW9uIGluIHRoZSBtZXNzYWdlIGJ5IGRlZmF1bHRcXFwiXFxuIDM1NzpcXHRcXHRkZXBlbmRzIG9uIE5FVENPTlNPTEVfRVhURU5ERURfTE9HXFxuIDM1ODpcXHRcXHRkZWZhdWx0IG5cXG4gMzU5OlxcdFxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6Mzg6MzguNDUzODI4MDMzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA0MTI0ODkyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIHRoZSBOZXRjb25zb2xlIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgYE5FVENPTlNPTEVgIGFuZCBgTkVUQ09OU09MRV9EWU5BTUlDYCBqdW1wIG91dCBhcyB0aGUga2V5IGNvbmZpZ3VyYXRpb25zLiBUaGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIHJldm9sdmUgYXJvdW5kIG1vZGlmaWNhdGlvbnMgdG8gSVAgYWRkcmVzcyBoYW5kbGluZyBhbmQgdmFsaWRhdGlvbiB3aXRoaW4gbmV0Y29uc29sZSwgc3BlY2lmaWNhbGx5IHRocm91Z2ggY2hhbmdlcyB0byBmdW5jdGlvbnMgbGlrZSBgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZWAsIGBsb2NhbF9pcF9zdG9yZWAsIGByZW1vdGVfaXBfc3RvcmVgLCBgbmV0Y29uc19uZXRwb2xsX3NldHVwYCwgYW5kIGBuZXRwb2xsX3NlbmRfdWRwYC4gSSBrbm93IHRoYXQgYGxvY2FsX2lwX3N0b3JlYCBhbmQgYHJlbW90ZV9pcF9zdG9yZWAgYXJlIHBhcnQgb2YgdGhlIGNvbmZpZ2ZzIGludGVyZmFjZSBmb3IgbmV0Y29uc29sZSwgd2hpY2ggaW1tZWRpYXRlbHkgc2NyZWFtcyBcImZ1enphYmxlXCIgZ2l2ZW4gU3l6a2FsbGVyJ3MgY2FwYWJpbGl0aWVzIHdpdGggY29uZmlnZnMuXG5cblRoZSBjaGFuZ2VzIGFwcGVhciBmdW5jdGlvbmFsLCBzbyB0aGlzIGlzIGFib3V0IG1vcmUgcm9idXN0IElQIHBhcnNpbmcgYW5kIHByb3BlciB0cmFja2luZyBvZiBJUCBmYW1pbGllcy4gRGVmaW5pdGVseSB3b3J0aCBhIGRlZXAgZnV6emluZyBkaXZlLlxuXG5NeSBtYWluIGZvY3VzIHJpZ2h0IG5vdyBpcyB0byBpZGVudGlmeSB0aGUgY3JpdGljYWwgc3ltYm9scyBmb3IgZnV6emluZy4gU28gZmFyLCBJJ20gdGhpbmtpbmc6IGBsb2NhbF9pcF9zdG9yZWAsIGByZW1vdGVfaXBfc3RvcmVgLCBgbmV0Y29uc19uZXRwb2xsX3NldHVwYCwgYW5kIGBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lYC4gVGhhdCBsYXN0IG9uZSBoYXMgbWUgdGhpbmtpbmcsIGNvdWxkIGl0IGJlIGNhbGxlZCBkdXJpbmcgbW9kdWxlIGxvYWQgb3Igd2hlbiBjcmVhdGluZyBjb25maWdmcyB0YXJnZXRzPyBJIG5lZWQgdG8gY2hlY2sgdGhlIGNhbGwgc2l0ZXMgZm9yIGBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lYCB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IGl0J3MgaW52b2tlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODgwOSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjM4OjQzLjQ5NTA3OTEyNFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMxMDIzNTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0Y29uc29sZV9wYXJzZXJfY21kbGluZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTEwMDE9c3RhdGljIHNzaXplX3QgZW5hYmxlZF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTA0OS1cXHRcXHQvKlxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMDUwOlxcdFxcdCAqIFNraXAgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZSgpIC0tIGFsbCB0aGUgYXR0cmlidXRlcyBhcmVcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTA1MS1cXHRcXHQgKiBhbHJlYWR5IGNvbmZpZ3VyZWQgdmlhIGNvbmZpZ2ZzLiBKdXN0IHByaW50IHRoZW0gb3V0Llxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI1MDg9X19yZWxlYXNlcyhcXHUwMDI2dGFyZ2V0X2xpc3RfbG9jaylcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNTEyLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNTEzOnN0YXRpYyBpbnQgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjaGFyICpvcHQpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI1MTQte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI2MDE9c3RhdGljIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqYWxsb2NfcGFyYW1fdGFyZ2V0KGNoYXIgKnRhcmdldF9jb25maWcsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjYyOC1cXHQvKiBQYXJzZSBwYXJhbWV0ZXJzIGFuZCBzZXR1cCBuZXRwb2xsICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI2Mjk6XFx0ZXJyID0gbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZShudCwgdGFyZ2V0X2NvbmZpZyk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2MzAtXFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6Mzg6NDMuNTM4MTg4MjJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA1NDU1OTY1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIEtlcm5lbCBWdWxuZXJhYmlsaXRpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gdHJhY2luZyB0aGUgcG90ZW50aWFsIGF0dGFjayBzdXJmYWNlIGhlcmUsIHNwZWNpZmljYWxseSBpbiByZWxhdGlvbiB0byBgbmV0Y29uc29sZWAuIEknbSBzZWVpbmcgdGhhdCBgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZWAgZ2V0cyBjYWxsZWQgdGhyb3VnaCBgYWxsb2NfcGFyYW1fdGFyZ2V0YCwgd2hpY2ggaXMgaXRzZWxmIGludm9rZWQgZHVyaW5nIG1vZHVsZSBpbml0aWFsaXphdGlvbiBvciBzb21ldGhpbmcgc2ltaWxhciwgbGlrZSBpbml0Y2FsbHMuIEFoLCB3YWl0LCBjb3JyZWN0aW9uIOKAkyBsb29raW5nIGNsb3NlciwgYGFsbG9jX3BhcmFtX3RhcmdldGAgaXMgYWN0dWFsbHkgY2FsbGVkIGZyb20gYG5ldGNvbnNvbGVfaW5pdGAuXG5cblRoZSBrZXkgdGhpbmcgaXMsIHNpbmNlIHN5emthbGxlciBpcyBhYmxlIHRvIGxvYWQgbW9kdWxlcywgb3IgbW9yZSBzdWJ0bHkgcGFzcyBtb2R1bGUgcGFyYW1ldGVycywgaXQgbWlnaHQgYmUgYWJsZSB0byB0cmlnZ2VyIHRoaXMgYG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmVgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIGNvbmZpZ2ZzIGNvdWxkIGJlIGFuIGVudHJ5IHBvaW50LiBIb3dldmVyLCBgbG9jYWxfaXBfc3RvcmVgIGFuZCBgcmVtb3RlX2lwX3N0b3JlYCAqYXJlKiBkZWZpbml0ZWx5IHJlYWNoYWJsZSB0aHJvdWdoIGNvbmZpZ2ZzOyB0aGF0J3MgZ29vZCB0byBrZWVwIGluIG1pbmQsIGFuZCB0byByZXZpZXcgdGhhdCBhdHRhY2sgcGF0aC5cblxuQnV0IGxldCdzIHNoaWZ0IGZvY3VzIHRvIGBuZXRjb25zX25ldHBvbGxfc2V0dXBgLiBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjYWxsIGdyYXBoIGZvciB0aGF0IGZ1bmN0aW9uLCBhbmQgc2VlIHdoZXJlIGVsc2UgaXQgaXMgY29ubmVjdGVkIHRvLiBJdCBjb3VsZCBiZSBhbiBpbnRlcmVzdGluZyBhcmVhIG9mIHN0dWR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjcyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjM4OjQ3LjU5Mjc1MDg1NVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ2NjY2MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0Y29uc19uZXRwb2xsX3NldHVwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9NDQ0PXN0YXRpYyBpbnQgbmV0Y29uc190YWtlX2lwdjQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy00NzItXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjQ3MzpzdGF0aWMgaW50IG5ldGNvbnNfbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy00NzQte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTU2Mz1zdGF0aWMgdm9pZCByZXN1bWVfdGFyZ2V0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNTcxLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo1NzI6XFx0aWYgKG5ldGNvbnNfbmV0cG9sbF9zZXR1cChudCkpIHtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNTczLVxcdFxcdC8qIG5ldHBvbGwgZmFpbHMgc2V0dXAgb25jZSwgZG8gbm90IHRyeSBhZ2Fpbi4gKi9cXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xMDAxPXN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEwNjItXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEwNjM6XFx0XFx0cmV0ID0gbmV0Y29uc19uZXRwb2xsX3NldHVwKG50KTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTA2NC1cXHRcXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjYwMT1zdGF0aWMgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICphbGxvY19wYXJhbV90YXJnZXQoY2hhciAqdGFyZ2V0X2NvbmZpZyxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjM5LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNjQwOlxcdGVyciA9IG5ldGNvbnNfbmV0cG9sbF9zZXR1cChudCk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2NDEtXFx0aWYgKGVycikge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTozODo0Ny42Mzc0MjI5M1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzY4NjI2NzkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBOZXR3b3JrIFBvbGxpbmcgU2V0dXAqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYG5ldGNvbnNfbmV0cG9sbF9zZXR1cGAgZnVuY3Rpb24sIHRyeWluZyB0byB1bmRlcnN0YW5kIGl0cyByb2xlLiBJdCBsb29rcyBsaWtlIGl0J3MgY2FsbGVkIGZyb20gYSBmZXcga2V5IHBsYWNlczogYGVuYWJsZWRfc3RvcmVgIHdpdGhpbiB0aGUgY29uZmlnZnMgZnJhbWV3b3JrLCBgcmVzdW1lX3RhcmdldGAsIGFuZCBgYWxsb2NfcGFyYW1fdGFyZ2V0YC4gR2l2ZW4gdGhpcyBkaXN0cmlidXRpb24sIGBlbmFibGVkX3N0b3JlYCBzZWVtcyBsaWtlIGEgcGFydGljdWxhcmx5IGdvb2Qgc3ltYm9sIHRvIHplcm8gaW4gb24sIGFsb25nIHdpdGggYGxvY2FsX2lwX3N0b3JlYCBhbmQgYHJlbW90ZV9pcF9zdG9yZWAsIGFzIHRoZXkncmUgY2xlYXJseSByZWxhdGVkLlxuXG5IbW0sIEknbSBhbHNvIHNlZWluZyBzb21lIG1vZGlmaWNhdGlvbnMgdG8gYG5ldHBvbGxfc2VuZF91ZHBgLiBUaGF0IGZ1bmN0aW9uIGlzLCBvZiBjb3Vyc2UsIGNyaXRpY2FsIGZvciBhY3R1YWxseSB0cmFuc21pdHRpbmcgbWVzc2FnZXMuIFNvLCBteSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBxdWlja2x5IGlkZW50aWZ5IGFsbCB0aGUgY2FsbGVycyBvZiBgbmV0cG9sbF9zZW5kX3VkcGAgdG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZSBvZiBpdHMgdXNhZ2UgY29udGV4dC4gR290dGEgdW5kZXJzdGFuZCBob3cgZGF0YSBmbG93cyBpbiBhbmQgb3V0IGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDYzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjM4OjUyLjAwNjA1MjAxMloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMxNjI2MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0cG9sbF9zZW5kX3VkcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIxNDU9c3RhdGljIHZvaWQgcHVzaF9pcHY2KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjE2OC1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjE2OTpzdGF0aWMgaW50IG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTcwLVxcdFxcdFxcdCAgICBpbnQgbGVuKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMDYtLyoqXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIyMDc6ICogc2VuZF91ZHAgLSBXcmFwcGVyIGZvciBuZXRwb2xsX3NlbmRfdWRwIHRoYXQgY291bnRzIGVycm9yc1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjA4LSAqIEBudDogdGFyZ2V0IHRvIHNlbmQgbWVzc2FnZSB0b1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMTEtICpcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjIxMjogKiBDYWxscyBuZXRwb2xsX3NlbmRfdWRwIGFuZCBjbGFzc2lmaWVzIHRoZSByZXR1cm4gdmFsdWUuIElmIGFuIGVycm9yXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMTMtICogb2NjdXJyZWQgaXQgaW5jcmVtZW50cyBzdGF0aXN0aWNzIGluIG50LVxcdTAwM2VzdGF0cyBhY2NvcmRpbmdseS5cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjIxNDogKiBPbmx5IGNhbGxzIG5ldHBvbGxfc2VuZF91ZHAgaWYgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQyBpcyBkaXNhYmxlZC5cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIxNS0gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjIxNj1zdGF0aWMgdm9pZCBzZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csIGludCBsZW4pXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMTcte1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMjE4OlxcdGludCByZXN1bHQgPSBuZXRwb2xsX3NlbmRfdWRwKG50LCBtc2csIGxlbik7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMTktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjM4OjUyLjA0OTIyMDIxN1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTAwOTc5Nzc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV0Y29uc29sZSBEYXRhIEZsb3cqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJJ20gc2VlaW5nLCB0aGUgYHNlbmRfdWRwYCBmdW5jdGlvbiBpcyBhdCB0aGUgY29yZSBvZiB0aGUgbmV0Y29uc29sZSBkYXRhIHRyYW5zbWlzc2lvbi4gSXQncyBjYWxsZWQgYnkgYHdyaXRlX2V4dF9tc2dgIGFuZCBgd3JpdGVfbXNnYCwgd2hpY2ggaW4gdHVybiBhcmUgaW52b2tlZCBieSBgbmV0Y29uc29sZV9leHRfZW1pdGAgYW5kIGBuZXRjb25zb2xlX2VtaXRgLiBUaGVzZSBsYXR0ZXIgZnVuY3Rpb25zIGFyZSByZWdpc3RlcmVkIGFzIGNvbnNvbGUgd3JpdGUgY2FsbGJhY2tzLCBtZWFuaW5nIHRoZXkncmUgdHJpZ2dlcmVkIHdoZW5ldmVyIHNvbWV0aGluZyBpcyB3cml0dGVuIHRvIHRoZSBrZXJuZWwgbG9nLCBiZSBpdCB0aHJvdWdoIGAvZGV2L2ttc2dgIG9yIGEgc2ltcGxlIGBwcmludGtgLiBUaGF0IG1ha2VzIHRoZSB3aG9sZSBzeXN0ZW0gYWNjZXNzaWJsZSBhbmQgc29tZXRoaW5nIHRvIGtlZXAgYW4gZXllIG9uLlxuXG5Ob3csIGxldCdzIHBpbnBvaW50IHRoZSBrZXkgcGxheWVycyBpbiB0aGlzIHByb2Nlc3MuIEknbSBmb2N1c2luZyBvbiB0aGUgZm9sbG93aW5nIHN5bWJvbHM6IGBsb2NhbF9pcF9zdG9yZWAsIGByZW1vdGVfaXBfc3RvcmVgLCBgZW5hYmxlZF9zdG9yZWAsIGBuZXRjb25zX25ldHBvbGxfc2V0dXBgLCBgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZWAsIGFuZCBgbmV0cG9sbF9zZW5kX3VkcGAuIFRoZXNlIGFyZSBsaWtlbHkgY3J1Y2lhbCBmb3IgY29uZmlndXJhdGlvbiwgbmV0d29yayBzZXR1cCwgYW5kIGFjdHVhbCB0cmFuc21pc3Npb24uXG5cbkZpbmFsbHksIGEga2V5IHF1ZXN0aW9uIGNvbWVzIHRvIG1pbmQ6IERvZXMgYE5FVENPTlNPTEVfRFlOQU1JQ2AgY29uZmlndXJhdGlvbiBuZWVkIHRvIGJlIGVuYWJsZWQgZm9yIGBsb2NhbF9pcF9zdG9yZWAgYW5kIGByZW1vdGVfaXBfc3RvcmVgIHRvIGZ1bmN0aW9uIGNvcnJlY3RseT8gVGhpcyBpcyBhbiBpbXBvcnRhbnQgcXVlc3Rpb24uIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBkZXBlbmRlbmN5OyB1bmRlcnN0YW5kaW5nIHRoYXQgd2lsbCBiZSB2ZXJ5IGltcG9ydGFudCBmb3IgdGhpcyBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMjEwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjM4OjU2LjU1MDIwMTg4NVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYwNDc5NTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibG9jYWxfaXBfc3RvcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xMjAxPXN0YXRpYyBzc2l6ZV90IHJlbW90ZV9wb3J0X3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMjIyLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMjIzOnN0YXRpYyBzc2l6ZV90IGxvY2FsX2lwX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMjI0LVxcdFxcdHNpemVfdCBjb3VudClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6Mzg6NTYuNTk2MjU0OFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDE1NzY1MjAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNvbmZpZ2ZzIEludmVzdGlnYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGVzZSBhcmUgZGVmaW5pdGVseSBjb25maWdmcyBjYWxsYmFja3MuIEFuZCwgSSByZWNhbGwsIHRob3NlIGFyZSBvbmx5IGNvbXBpbGVkIHdoZW4gYENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUNgIGlzIGVuYWJsZWQuIFRpbWUgdG8gZG91YmxlLWNoZWNrIGlmIGBORVRDT05TT0xFYCByZWxpZXMgb24gYW55dGhpbmcgZWxzZSB0aGF0IG1pZ2h0IG5lZWQgb3VyIGF0dGVudGlvbiBmb3IgZW5hYmxlbWVudC4gSXQgbG9va3MgbGlrZSBpdCBkZXBlbmRzIG9uIGBQUklOVEtgLCB3aGljaCwgaW4gcHJhY3RpY2UsIGlzIGFsbW9zdCBhbHdheXMgZW5hYmxlZC4gQWhhLCBgTkVUQ09OU09MRV9EWU5BTUlDYCBoYXMgaXRzIG93biBkZXBlbmRlbmNpZXM6IGBORVRDT05TT0xFIFx1MDAyNlx1MDAyNiBTWVNGUyBcdTAwMjZcdTAwMjYgQ09ORklHRlNfRlNgLiBSaWdodCwgc28gdG8gZ2V0IHRoaXMgd29ya2luZywgd2UnbGwgbmVlZCB0byBlbmFibGUgYENPTkZJR0ZTX0ZTYC4gTGV0J3MganVzdCBtYWtlIHN1cmUgdGhlcmUgYXJlbid0IGFueSBnb3RjaGFzIHdpdGggYENPTkZJR0ZTX0ZTYCBpdHNlbGYuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODIwLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjM5OjAwLjAxMjAyMjIxMloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgyMjEwNTI5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ09ORklHRlNfRlNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvY29uZmlnZnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL2NvbmZpZ2ZzL0tjb25maWc6Mjpjb25maWcgQ09ORklHRlNfRlNcXG5mcy9jb25maWdmcy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlVzZXJzcGFjZS1kcml2ZW4gY29uZmlndXJhdGlvbiBmaWxlc3lzdGVtXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTozOTowMS44MzQxMzU2NTFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgyOTAxMjg3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDb25maWd1cmluZyB0aGUgTmV0d29yayBDb25zb2xlIGFuZCBJUHY2IGZvciB0aGUgVXBkYXRlKipcblxuT2theSwgc28gd2UncmUgZGVhbGluZyB3aXRoIGEgYENPTkZJR0ZTX0ZTYCBpc3N1ZSBoZXJlLCBhbmQgaXQncyBhIHRyaXN0YXRlLiBHaXZlbiB0aGF0LCBJIG5lZWQgdG8gaW5jbHVkZSBgTkVUQ09OU09MRWAsIGBORVRDT05TT0xFX0RZTkFNSUNgLCBhbmQgYENPTkZJR0ZTX0ZTYCBpbiBgRW5hYmxlQ29uZmlnc2AuIFRoYXQgY292ZXJzIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgd2UgbmVlZC5cblxuTm93LCBsZXQncyBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxhdGVkIGNvbmZpZ3MgdGhhdCBtaWdodCBiZSB1c2VmdWwuIEFoLCBgTkVUQ09OU09MRV9FWFRFTkRFRF9MT0dgLiBOb3QgZXNzZW50aWFsLCBidXQgcHJvYmFibHkgYSBnb29kIGlkZWEgdG8gZW5hYmxlIGl0IGZvciBtb3JlIGluLWRlcHRoIGxvZ2dpbmcgZHVyaW5nIHRlc3RpbmcgYW5kIGRlYnVnZ2luZy5cblxuUmlnaHQsIHRoZSBwYXRjaCBzcGVjaWZpY2FsbHkgdG91Y2hlcyBJUHY2IGhhbmRsaW5nLCBzbyBgSVBWNmAgaXMgZGVmaW5pdGVseSBhIHJlcXVpcmVtZW50LiBMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhhdCBpbiBgbmV0L2lwdjYvS2NvbmZpZ2AgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcuIEdvdHRhIGJlIHRob3JvdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjE2NSwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTozOTowNS42NjMxNTY2MjlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NzE0MDA4NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQVjZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvS2NvbmZpZy01LVxcbm5ldC9pcHY2L0tjb25maWc6NjptZW51Y29uZmlnIElQVjZcXG5uZXQvaXB2Ni9LY29uZmlnLTctXFx0Ym9vbCBcXFwiVGhlIElQdjYgcHJvdG9jb2xcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnPTE5PWlmIElQVjZcXG5uZXQvaXB2Ni9LY29uZmlnLTIwLVxcbm5ldC9pcHY2L0tjb25maWc6MjE6Y29uZmlnIElQVjZfUk9VVEVSX1BSRUZcXG5uZXQvaXB2Ni9LY29uZmlnLTIyLVxcdGJvb2wgXFxcIklQdjY6IFJvdXRlciBQcmVmZXJlbmNlIChSRkMgNDE5MSkgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMzAtXFxubmV0L2lwdjYvS2NvbmZpZzozMTpjb25maWcgSVBWNl9ST1VURV9JTkZPXFxubmV0L2lwdjYvS2NvbmZpZy0zMi1cXHRib29sIFxcXCJJUHY2OiBSb3V0ZSBJbmZvcm1hdGlvbiAoUkZDIDQxOTEpIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTM4LVxcbm5ldC9pcHY2L0tjb25maWc6Mzk6Y29uZmlnIElQVjZfT1BUSU1JU1RJQ19EQURcXG5uZXQvaXB2Ni9LY29uZmlnLTQwLVxcdGJvb2wgXFxcIklQdjY6IEVuYWJsZSBSRkMgNDQyOSBPcHRpbWlzdGljIERBRFxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWc9MTAyPWNvbmZpZyBJTkVUNl9JUENPTVBcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMTExLVxcbm5ldC9pcHY2L0tjb25maWc6MTEyOmNvbmZpZyBJUFY2X01JUDZcXG5uZXQvaXB2Ni9LY29uZmlnLTExMy1cXHR0cmlzdGF0ZSBcXFwiSVB2NjogTW9iaWxpdHlcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTExOS1cXG5uZXQvaXB2Ni9LY29uZmlnOjEyMDpjb25maWcgSVBWNl9JTEFcXG5uZXQvaXB2Ni9LY29uZmlnLTEyMS1cXHR0cmlzdGF0ZSBcXFwiSVB2NjogSWRlbnRpZmllciBMb2NhdG9yIEFkZHJlc3NpbmcgKElMQSlcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnPTE0Nj1jb25maWcgSU5FVDZfVFVOTkVMXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTE0OS1cXG5uZXQvaXB2Ni9LY29uZmlnOjE1MDpjb25maWcgSVBWNl9WVElcXG5uZXQvaXB2Ni9LY29uZmlnLTE1MS1cXHR0cmlzdGF0ZSBcXFwiVmlydHVhbCAoc2VjdXJlKSBJUHY2OiB0dW5uZWxpbmdcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTE2MS1cXG5uZXQvaXB2Ni9LY29uZmlnOjE2Mjpjb25maWcgSVBWNl9TSVRcXG5uZXQvaXB2Ni9LY29uZmlnLTE2My1cXHR0cmlzdGF0ZSBcXFwiSVB2NjogSVB2Ni1pbi1JUHY0IHR1bm5lbCAoU0lUIGRyaXZlcilcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTE3Ni1cXG5uZXQvaXB2Ni9LY29uZmlnOjE3Nzpjb25maWcgSVBWNl9TSVRfNlJEXFxubmV0L2lwdjYvS2NvbmZpZy0xNzgtXFx0Ym9vbCBcXFwiSVB2NjogSVB2NiBSYXBpZCBEZXBsb3ltZW50ICg2UkQpXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0xOTUtXFxubmV0L2lwdjYvS2NvbmZpZzoxOTY6Y29uZmlnIElQVjZfTkRJU0NfTk9ERVRZUEVcXG5uZXQvaXB2Ni9LY29uZmlnLTE5Ny1cXHRib29sXFxubmV0L2lwdjYvS2NvbmZpZy0xOTgtXFxubmV0L2lwdjYvS2NvbmZpZzoxOTk6Y29uZmlnIElQVjZfVFVOTkVMXFxubmV0L2lwdjYvS2NvbmZpZy0yMDAtXFx0dHJpc3RhdGUgXFxcIklQdjY6IElQLWluLUlQdjYgdHVubmVsIChSRkMyNDczKVxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjA5LVxcbm5ldC9pcHY2L0tjb25maWc6MjEwOmNvbmZpZyBJUFY2X0dSRVxcbm5ldC9pcHY2L0tjb25maWctMjExLVxcdHRyaXN0YXRlIFxcXCJJUHY2OiBHUkUgdHVubmVsXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yMjctXFxubmV0L2lwdjYvS2NvbmZpZzoyMjg6Y29uZmlnIElQVjZfRk9VXFxubmV0L2lwdjYvS2NvbmZpZy0yMjktXFx0dHJpc3RhdGVcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjMxLVxcbm5ldC9pcHY2L0tjb25maWc6MjMyOmNvbmZpZyBJUFY2X0ZPVV9UVU5ORUxcXG5uZXQvaXB2Ni9LY29uZmlnLTIzMy1cXHR0cmlzdGF0ZVxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yMzYtXFxubmV0L2lwdjYvS2NvbmZpZzoyMzc6Y29uZmlnIElQVjZfTVVMVElQTEVfVEFCTEVTXFxubmV0L2lwdjYvS2NvbmZpZy0yMzgtXFx0Ym9vbCBcXFwiSVB2NjogTXVsdGlwbGUgUm91dGluZyBUYWJsZXNcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTI0Mi1cXG5uZXQvaXB2Ni9LY29uZmlnOjI0Mzpjb25maWcgSVBWNl9TVUJUUkVFU1xcbm5ldC9pcHY2L0tjb25maWctMjQ0LVxcdGJvb2wgXFxcIklQdjY6IHNvdXJjZSBhZGRyZXNzIGJhc2VkIHJvdXRpbmdcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTI1Ni1cXG5uZXQvaXB2Ni9LY29uZmlnOjI1Nzpjb25maWcgSVBWNl9NUk9VVEVcXG5uZXQvaXB2Ni9LY29uZmlnLTI1OC1cXHRib29sIFxcXCJJUHY2OiBtdWx0aWNhc3Qgcm91dGluZ1xcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjY0LVxcbm5ldC9pcHY2L0tjb25maWc6MjY1OmNvbmZpZyBJUFY2X01ST1VURV9NVUxUSVBMRV9UQUJMRVNcXG5uZXQvaXB2Ni9LY29uZmlnLTI2Ni1cXHRib29sIFxcXCJJUHY2OiBtdWx0aWNhc3QgcG9saWN5IHJvdXRpbmdcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTI3OC1cXG5uZXQvaXB2Ni9LY29uZmlnOjI3OTpjb25maWcgSVBWNl9QSU1TTV9WMlxcbm5ldC9pcHY2L0tjb25maWctMjgwLVxcdGJvb2wgXFxcIklQdjY6IFBJTS1TTSB2ZXJzaW9uIDIgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjg1LVxcbm5ldC9pcHY2L0tjb25maWc6Mjg2OmNvbmZpZyBJUFY2X1NFRzZfTFdUVU5ORUxcXG5uZXQvaXB2Ni9LY29uZmlnLTI4Ny1cXHRib29sIFxcXCJJUHY2OiBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIGVuY2Fwc3VsYXRpb24gc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjk5LVxcbm5ldC9pcHY2L0tjb25maWc6MzAwOmNvbmZpZyBJUFY2X1NFRzZfSE1BQ1xcbm5ldC9pcHY2L0tjb25maWctMzAxLVxcdGJvb2wgXFxcIklQdjY6IFNlZ21lbnQgUm91dGluZyBITUFDIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTMxMS1cXG5uZXQvaXB2Ni9LY29uZmlnOjMxMjpjb25maWcgSVBWNl9TRUc2X0JQRlxcbm5ldC9pcHY2L0tjb25maWctMzEzLVxcdGRlZl9ib29sIHlcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMzE2LVxcbm5ldC9pcHY2L0tjb25maWc6MzE3OmNvbmZpZyBJUFY2X1JQTF9MV1RVTk5FTFxcbm5ldC9pcHY2L0tjb25maWctMzE4LVxcdGJvb2wgXFxcIklQdjY6IFJQTCBTb3VyY2UgUm91dGluZyBIZWFkZXIgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMzI3LVxcbm5ldC9pcHY2L0tjb25maWc6MzI4OmNvbmZpZyBJUFY2X0lPQU02X0xXVFVOTkVMXFxubmV0L2lwdjYvS2NvbmZpZy0zMjktXFx0Ym9vbCBcXFwiSVB2NjogSU9BTSBQcmUtYWxsb2NhdGVkIFRyYWNlIGluc2VydGlvbiBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTozOTowNy4yMzQ1NzQ2MjRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkxMDM3NTcyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgTmV0d29yayBDb25zb2xlIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvbmZpZ3VyYXRpb24gYW5kIGBJUFY2YCBpcyBkZWZpbmVkIGFzIGEgYm9vbGVhbiB2YWx1ZS4gVGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLiBOb3csIEkgd2FudCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBMZXQncyBzZWUuLi4gSSd2ZSBnb3QgYE5FVENPTlNPTEVgLCBgTkVUQ09OU09MRV9EWU5BTUlDYCwgYENPTkZJR0ZTX0ZTYCwgYW5kIG9mIGNvdXJzZSwgYElQVjZgIGFnYWluLiBJJ20gZ29pbmcgdG8ga2VlcCB0aGVzZSBpbiBtaW5kIGFzIHBvdGVudGlhbGx5IHJlbGF0ZWQuXG5cbk15IGF0dGVudGlvbiBpcyBhbHNvIGRyYXduIHRvIHNvbWUgc3BlY2lmaWMgc3ltYm9sczogYGxvY2FsX2lwX3N0b3JlYCwgYHJlbW90ZV9pcF9zdG9yZWAsIGBlbmFibGVkX3N0b3JlYCwgYG5ldGNvbnNfbmV0cG9sbF9zZXR1cGAsIGBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lYCwgYW5kIGBuZXRwb2xsX3NlbmRfdWRwYC4gVGhlc2UgYXJlIGxpa2VseSBrZXkgZWxlbWVudHMgaW4gdGhlIG5ldHdvcmsgY29uc29sZSdzIG9wZXJhdGlvbi5cblxuQ3J1Y2lhbGx5LCBJIG5lZWQgdG8gbWFrZSBzdXJlIGBuZXRwb2xsX3NlbmRfdWRwYCBpc24ndCB1c2luZyB0aGUgc3RhdGljIGlubGluZSBvcHRpbWl6YXRpb24uIFRoYXQgY291bGQgaW1wYWN0IGl0cyBiZWhhdmlvciBhbmQgSSB3YW50IHRvIHJ1bGUgdGhhdCBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MDE3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjM5OjExLjE0NDk1MzAzNFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ1Njg5NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0cG9sbF9zZW5kX3VkcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIxNDU9c3RhdGljIHZvaWQgcHVzaF9pcHY2KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjE2OC1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjE2OTpzdGF0aWMgaW50IG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTcwLVxcdFxcdFxcdCAgICBpbnQgbGVuKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMDYtLyoqXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIyMDc6ICogc2VuZF91ZHAgLSBXcmFwcGVyIGZvciBuZXRwb2xsX3NlbmRfdWRwIHRoYXQgY291bnRzIGVycm9yc1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjA4LSAqIEBudDogdGFyZ2V0IHRvIHNlbmQgbWVzc2FnZSB0b1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMTEtICpcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjIxMjogKiBDYWxscyBuZXRwb2xsX3NlbmRfdWRwIGFuZCBjbGFzc2lmaWVzIHRoZSByZXR1cm4gdmFsdWUuIElmIGFuIGVycm9yXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMTMtICogb2NjdXJyZWQgaXQgaW5jcmVtZW50cyBzdGF0aXN0aWNzIGluIG50LVxcdTAwM2VzdGF0cyBhY2NvcmRpbmdseS5cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjIxNDogKiBPbmx5IGNhbGxzIG5ldHBvbGxfc2VuZF91ZHAgaWYgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQyBpcyBkaXNhYmxlZC5cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIxNS0gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjIxNj1zdGF0aWMgdm9pZCBzZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csIGludCBsZW4pXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMTcte1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMjE4OlxcdGludCByZXN1bHQgPSBuZXRwb2xsX3NlbmRfdWRwKG50LCBtc2csIGxlbik7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMTktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjM5OjExLjE4OTUzODI1OVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NjQyMzE1MTc5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgU3RhdGljIEZ1bmN0aW9ucyBpbiBOZXRjb25zb2xlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0aGUgZ3VpZGVsaW5lIGlzIHByZXR0eSBjbGVhcjogd2Ugd2FudCB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnkgcG9pbnRzIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuIFRoZSBnb2FsIGhlcmUgaXMgdG8gbWFpbnRhaW4gYSBjbGVhciBBUEkgYm91bmRhcnksIEkgdW5kZXJzdGFuZC4gSSBzZWUgYG5ldHBvbGxfc2VuZF91ZHBgIGFuZCB0aGF0IGltbWVkaWF0ZWx5IHBvcHMgb3V0IGFzIGEgcG90ZW50aWFsIGlzc3VlIGJlY2F1c2UgaXQncyBzdGF0aWMuIEJ1dCwgaXQncyBub3QgaW5saW5lLiBTbywgdGhhdCdzIGEgcG9pbnQgaW4gaXRzIGZhdm9yLCBhbHRob3VnaCBJIHN0aWxsIG5lZWQgdG8gY29uc2lkZXIgaXQncyB2aXNpYmlsaXR5LiBUaGVuIEkgc2NhbiBgbG9jYWxfaXBfc3RvcmVgIGFuZCBgcmVtb3RlX2lwX3N0b3JlYCwgYWxzbyBzdGF0aWMsIGJ1dCB0aGVpciB1c2UgYXMgZnVuY3Rpb24gcG9pbnRlcnMgd2l0aGluIGEgc3RydWN0IG1lYW5zIHRoZXkgYXJlIHVubGlrZWx5IHRvIGJlIGlubGluZWQgYW5kIHRoZSBjb21waWxlciB3b3VsZCBuZWVkIHRoZWlyIGFkZHJlc3MuIEdvb2QsIHRoYXTigJlzIGFub3RoZXIgb25lIHRoYXQgcHJvYmFibHkgd29u4oCZdCBjYXVzZSBpc3N1ZXMuXG5cbmBuZXRjb25zX25ldHBvbGxfc2V0dXBgIGlzIGFsc28gc3RhdGljLCBidXQgdGhlIHNoZWVyIHNpemUgb2YgdGhlIHRoaW5nIGFuZCBpdHMgbXVsdGlwbGUgY2FsbCBzaXRlcyBtZWFuIHRoZSBjb21waWxlciBwcm9iYWJseSAqd29uJ3QqIGlubGluZSBpdCwgYW5kIGl0J3MgbGVzcyBvZiBhIHByb2JsZW0uIE5vdywgSSdtIGdldHRpbmcgdG8gYG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmVgLiBJdCdzIHN0YXRpYyBhbmQgZ2V0cyBjYWxsZWQgZnJvbSBhIHN0YXRpYyBmdW5jdGlvbiBpdHNlbGYsIGBhbGxvY19wYXJhbV90YXJnZXRgLCB3aGljaCBpcyBhbHNvIHN0YXRpYywgYW5kIHRoYXQgZ2V0cyBjYWxsZWQgZnJvbSBgbmV0Y29uc29sZV9pbml0YC4gVGhpcyBpcyBhIHN0cmluZyBvZiBzdGF0aWMgY2FsbHMgYW5kIHRoYXQncyBjb25jZXJuaW5nLiBUaGF0IG9uZSBpcyBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgaW5saW5pbmcuXG5cblNvLCBJIG5lZWQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMgYXZhaWxhYmxlLCBsZXQncyBzZWUuLi4gb2ggd2FpdCBgbmV0Y29uc29sZV9pbml0YCwgdGhhdCBsb29rZWQgcHJvbWlzaW5nLCBidXQgbm9wZSwgaXQncyBgc3RhdGljIGludCBfX2luaXQgbmV0Y29uc29sZV9pbml0KHZvaWQpYC4gRGFtbi4gRm9yIGNvbmZpZ2ZzLCB0aGUgYF9zdG9yZWAgYW5kIGBfc2hvd2AgZnVuY3Rpb25zIGFyZSBzdGF0aWMsIGJ1dCB0aGVpciBhZGRyZXNzZXMgYXJlIGJlaW5nIHRha2VuIHNvIHRoZXkgc2hvdWxkbid0IGJlIGlubGluZWQuIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGFjdHVhbCBwdWJsaWMgQVBJIGZvciB0aGlzIHRoaW5nLiBJIHNob3VsZCBjaGVjayB0aGUgZnVuY3Rpb25zIHdpdGhpbiBgbmV0Y29uc29sZV90YXJnZXRfaXRlbV9vcHNgIG9yIHNpbWlsYXIgc3RydWN0dXJlcywgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgZXh0ZXJuYWxseSB2aXNpYmxlIEFQSS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ3OTcsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6NDA6MTcuNjEyNjkyMzFaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NjIzMTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxvY2FsX2lwX3N0b3JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTIwMT1zdGF0aWMgc3NpemVfdCByZW1vdGVfcG9ydF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTIyMi1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTIyMzpzdGF0aWMgc3NpemVfdCBsb2NhbF9pcF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZixcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTIyNC1cXHRcXHRzaXplX3QgY291bnQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjQwOjE3LjY1OTMyMTQ4NVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDE1Njk3OTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQsIGdlYXJlZCB0b3dhcmQgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk5hdmlnYXRpbmcgdGhlIENvZGViYXNlOiBUYXJnZXRlZCBFeHBsb3JhdGlvbioqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IHRoaXMgcGFydGljdWxhciBmdW5jdGlvbiBpcyBiZWluZyB1dGlsaXplZC4gSW5zdGVhZCBvZiBhIGJyb2FkIHN3ZWVwLCBJJ20gZ29pbmcgdG8gYWRvcHQgYSBtb3JlIGZvY3VzZWQgYXBwcm9hY2guIExldCdzIG5vdCBnZXQgbG9zdCBpbiB0aGUgd2VlZHMuIEknbGwgemVybyBpbiBvbiB0aGUgdmljaW5pdHkgb2YgbGluZSAxMjIzLiBUaGF0IHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIHN0YXJ0aW5nIHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgaXRzIHVzYWdlLiBJ4oCZbGwgbWFrZSBhIG5vdGUgb2YgdGhpcyBsaW5lIG51bWJlciBmb3IgcXVpY2sgcmVmZXJlbmNlIGFuZCB0byBtYWtlIHN1cmUgSSBkb24ndCBvdmVybG9vayBhbnkgcmVsYXRlZCBhcmVhcy4gSXQncyBhIHF1aWNrIGFuZCBlZmZpY2llbnQgd2F5IHRvIHN0YXJ0IGJ1aWxkaW5nIGEgbWVudGFsIG1hcCBvZiB0aGUgY2FsbCBzdGFjayB3aXRob3V0IGdldHRpbmcgYm9nZ2VkIGRvd24gaW4gaXJyZWxldmFudCBkZXRhaWxzLiBUaGlzIHRhcmdldGVkIHJlYWRpbmcgYWxsb3dzIGZvciBiZXR0ZXIgY29tcHJlaGVuc2lvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU2NjUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTo0MDoyMC42NzUwMjMzNTlaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMxNTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjIwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjIwOlxcdFxcdHJldHVybiByZXQ7XFxuMTIyMTpcXHR9XFxuMTIyMjpcXHRcXG4xMjIzOlxcdHN0YXRpYyBzc2l6ZV90IGxvY2FsX2lwX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxcbjEyMjQ6XFx0XFx0XFx0c2l6ZV90IGNvdW50KVxcbjEyMjU6XFx0e1xcbjEyMjY6XFx0XFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcXG4xMjI3OlxcdFxcdHNzaXplX3QgcmV0ID0gLUVJTlZBTDtcXG4xMjI4OlxcdFxcbjEyMjk6XFx0XFx0ZHluYW1pY19uZXRjb25zb2xlX211dGV4X2xvY2soKTtcXG4xMjMwOlxcdFxcdGlmIChudC1cXHUwMDNlc3RhdGUgPT0gU1RBVEVfRU5BQkxFRCkge1xcbjEyMzE6XFx0XFx0XFx0cHJfZXJyKFxcXCJ0YXJnZXQgKCVzKSBpcyBlbmFibGVkLCBkaXNhYmxlIHRvIHVwZGF0ZSBwYXJhbWV0ZXJzXFxcXG5cXFwiLFxcbjEyMzI6XFx0XFx0XFx0ICAgICAgIGNvbmZpZ19pdGVtX25hbWUoXFx1MDAyNm50LVxcdTAwM2Vncm91cC5jZ19pdGVtKSk7XFxuMTIzMzpcXHRcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuMTIzNDpcXHRcXHR9XFxuMTIzNTpcXHRcXG4xMjM2OlxcdFxcdGlmIChuZXRwb2xsX3BhcnNlX2lwX2FkZHIoYnVmLCBcXHUwMDI2bnQtXFx1MDAzZWxvY2FsX2lwKSBcXHUwMDNjIDApXFxuMTIzNzpcXHRcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuMTIzODpcXHRcXG4xMjM5OlxcdFxcdHJldCA9IGNvdW50O1xcbjEyNDA6XFx0b3V0X3VubG9jazpcXG4xMjQxOlxcdFxcdGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF91bmxvY2soKTtcXG4xMjQyOlxcdFxcdHJldHVybiByZXQ7XFxuMTI0MzpcXHR9XFxuMTI0NDpcXHRcXG4xMjQ1OlxcdHN0YXRpYyBzc2l6ZV90IHJlbW90ZV9pcF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZixcXG4xMjQ2OlxcdFxcdCAgICAgICBzaXplX3QgY291bnQpXFxuMTI0NzpcXHR7XFxuMTI0ODpcXHRcXHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0pO1xcbjEyNDk6XFx0XFx0c3NpemVfdCByZXQgPSAtRUlOVkFMO1xcbjEyNTA6XFx0XFxuMTI1MTpcXHRcXHRkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXhfbG9jaygpO1xcbjEyNTI6XFx0XFx0aWYgKG50LVxcdTAwM2VzdGF0ZSA9PSBTVEFURV9FTkFCTEVEKSB7XFxuMTI1MzpcXHRcXHRcXHRwcl9lcnIoXFxcInRhcmdldCAoJXMpIGlzIGVuYWJsZWQsIGRpc2FibGUgdG8gdXBkYXRlIHBhcmFtZXRlcnNcXFxcblxcXCIsXFxuMTI1NDpcXHRcXHRcXHQgICAgICAgY29uZmlnX2l0ZW1fbmFtZShcXHUwMDI2bnQtXFx1MDAzZWdyb3VwLmNnX2l0ZW0pKTtcXG4xMjU1OlxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4xMjU2OlxcdFxcdH1cXG4xMjU3OlxcdFxcbjEyNTg6XFx0XFx0aWYgKG5ldHBvbGxfcGFyc2VfaXBfYWRkcihidWYsIFxcdTAwMjZudC1cXHUwMDNlcmVtb3RlX2lwKSBcXHUwMDNjIDApXFxuMTI1OTpcXHRcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjQwOjIwLjY3NTE1NjQ0OVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDIxOTYzMjYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBJJ20gcmVhZHkgdG8gZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBhIHN1bW1hcnkgZnJvbSBhIGZpcnN0LXBlcnNvbiwgZXhwZXJ0IHBlcnNwZWN0aXZlOlxuXG4qKlBpbnBvaW50aW5nIHRoZSBTb3VyY2UqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGRvIGlzIGVzdGFibGlzaCB0aGUgY29udGV4dC4gVGhpcyBpcyBhYm91dCByZWdpc3RyYXRpb24sIHNvIHRoZSBjcml0aWNhbCBxdWVzdGlvbiBpcyAqd2hlcmUqIGFyZSB0aGVzZSB0aGluZ3MgcmVnaXN0ZXJlZD8gV2hhdCBzeXN0ZW1zLCBkYXRhYmFzZXMsIG9yIGp1cmlzZGljdGlvbnMgYXJlIHdlIHRhbGtpbmcgYWJvdXQ/IFRoZSBzcGVjaWZpY2l0eSBvZiB0aGUgcmVnaXN0cmF0aW9uIHByb2Nlc3MgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIG5leHQgc3RlcHMuIFdpdGhvdXQga25vd2luZyB0aGUgcmVnaXN0cmF0aW9uIGJvZHkgb3IgbWV0aG9kLCBhbnkgYW5hbHlzaXMgd291bGQgYmUgaW5jb21wbGV0ZS4gTGV0J3Mgc2VlIGlmIHRoYXQgZGV0YWlsIGlzIGFwcGFyZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjQ5NywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTo0MDoyMy42OTcxMjE3ODJaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NTMyMDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR0ZTX0FUVFJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xNTQyPXN0YXRpYyBzc2l6ZV90IHN5c2RhdGFfY3B1X25yX2VuYWJsZWRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE1NzQtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE1NzU6Q09ORklHRlNfQVRUUih1c2VyZGF0dW1fLCB2YWx1ZSk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE1NzY6Q09ORklHRlNfQVRUUihzeXNkYXRhXywgY3B1X25yX2VuYWJsZWQpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNTc3OkNPTkZJR0ZTX0FUVFIoc3lzZGF0YV8sIHRhc2tuYW1lX2VuYWJsZWQpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNTc4OkNPTkZJR0ZTX0FUVFIoc3lzZGF0YV8sIHJlbGVhc2VfZW5hYmxlZCk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE1Nzk6Q09ORklHRlNfQVRUUihzeXNkYXRhXywgbXNnaWRfZW5hYmxlZCk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE1ODAtXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTY1MT1zdGF0aWMgY29uc3Qgc3RydWN0IGNvbmZpZ19pdGVtX3R5cGUgdXNlcmRhdGFfdHlwZSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNjU3LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNjU4OkNPTkZJR0ZTX0FUVFIoLCBlbmFibGVkKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTY1OTpDT05GSUdGU19BVFRSKCwgZXh0ZW5kZWQpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNjYwOkNPTkZJR0ZTX0FUVFIoLCBkZXZfbmFtZSk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE2NjE6Q09ORklHRlNfQVRUUigsIGxvY2FsX3BvcnQpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNjYyOkNPTkZJR0ZTX0FUVFIoLCByZW1vdGVfcG9ydCk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE2NjM6Q09ORklHRlNfQVRUUigsIGxvY2FsX2lwKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTY2NDpDT05GSUdGU19BVFRSKCwgcmVtb3RlX2lwKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTY2NTpDT05GSUdGU19BVFRSX1JPKCwgbG9jYWxfbWFjKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTY2NjpDT05GSUdGU19BVFRSKCwgcmVtb3RlX21hYyk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE2Njc6Q09ORklHRlNfQVRUUigsIHJlbGVhc2UpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNjY4OkNPTkZJR0ZTX0FUVFJfUk8oLCB0cmFuc21pdF9lcnJvcnMpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNjY5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTo0MDoyMy43NDM2NTg2NTdaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMwMjU3OTI3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5ldGNvbnNvbGUgQ29kZSBQYXRoKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgbmV0Y29uc29sZSBjb2RlIGFuZCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNyaXRpY2FsIGV4ZWN1dGlvbiBwYXRoLiBJdCBsb29rcyBsaWtlIGBsb2NhbF9pcF9zdG9yZWAgYW5kIGByZW1vdGVfaXBfc3RvcmVgIGFyZSBkZWZpbml0ZWx5IGZ1bmN0aW9uIHBvaW50ZXJzIHV0aWxpemVkIGJ5IGBDT05GSUdGU19BVFRSYCwgYW5kIHRoZXkgYXJlbid0IGlubGluZWQsIHdoaWNoIGlzIGhlbHBmdWwuIGBlbmFibGVkX3N0b3JlYCBpcyBhbm90aGVyIG5vbi1pbmxpbmVkIGZ1bmN0aW9uIHRvIGtlZXAgYW4gZXllIG9uLiBJbnRlcmVzdGluZywgYG5ldGNvbnNfbmV0cG9sbF9zZXR1cGAgZ2V0cyBjYWxsZWQgZnJvbSB3aXRoaW4gYGVuYWJsZWRfc3RvcmVgLlxuXG5Ob3cgSSdtIGxvb2tpbmcgZnVydGhlciBkb3duIHRoZSBjYWxsIHN0YWNrLiBgbmV0cG9sbF9zZW5kX3VkcGAgaXMgc3RhdGljLCB3aGljaCBjYW4gc29tZXRpbWVzIGJlIGEgcmVkIGZsYWcsIGJ1dCBpdCBhcHBlYXJzIHRvIGJlIGEgc2l6ZWFibGUgZnVuY3Rpb24uIExldCdzIHNlZS4uLiBgbmV0cG9sbF9zZW5kX3VkcGAgZ2V0cyBjYWxsZWQgZnJvbSBgc2VuZF91ZHBgLiBPa2F5LCBgc2VuZF91ZHBgIHRoZW4gZmVlZHMgaW50byBgd3JpdGVfZXh0X21zZ2AgYW5kIGB3cml0ZV9tc2dgLiBBaGEhIFRoZXNlIHR3byBmdW5jdGlvbnMsIGB3cml0ZV9leHRfbXNnYCBhbmQgYHdyaXRlX21zZ2AsIGFyZSByZWdpc3RlcmVkIHdpdGhpbiBgc3RydWN0IGNvbnNvbGUgbmV0Y29uc29sZV9leHRgIGFuZCBgc3RydWN0IGNvbnNvbGUgbmV0Y29uc29sZWAsIHJlc3BlY3RpdmVseS4gVGhhdOKAmXMgdGhlIGtleS4gVGhpcyBtYWtlcyBgd3JpdGVfZXh0X21zZ2AgYW5kIGB3cml0ZV9tc2dgIGV4Y2VsbGVudCBjYW5kaWRhdGVzIGZvciBkZWVwZXIgaW5zcGVjdGlvbiBhbmQgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MTk3LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTczLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjQwOjI4LjA0NjI0MDE3NVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU4MDUyOTUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIndyaXRlX2V4dF9tc2dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTo0MDoyOC4wOTIwNTMxNjFaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI3NDU3MDkyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLiBNeSBmaXJzdCB0aG91Z2h0IGlzOlxuXG4qKkNoZWNraW5nIENvbnNvbGUgV3JpdGUgRnVuY3Rpb24gTm9tZW5jbGF0dXJlKipcblxuSG9sZCBvbiBhIHNlY29uZCwgYmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIHRoaXMgcHJvYmxlbSwgSSBzaG91bGQganVzdCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgZXhhY3QgbmFtZXMgb2YgdGhlIGNvbnNvbGUgd3JpdGUgZnVuY3Rpb25zLiBJJ3ZlIHVzZWQgdGhlbSBjb3VudGxlc3MgdGltZXMsIGJ1dCBpdCdzIGFsd2F5cyBnb29kIHRvIGhhdmUgYSBzcGVjaWZpYyBtZW1vcnkgdG8gcmVmZXIgdG8uIEkgZG9uJ3Qgd2FudCB0byBnZXQgdHJpcHBlZCB1cCBvbiBzb21ldGhpbmcgdHJpdmlhbCBsaWtlIGEgY2FwaXRhbGl6YXRpb24gaXNzdWUgb3IgYSBzbGlnaHRseSBkaWZmZXJlbnQgbmFtaW5nIGNvbnZlbnRpb24gdGhhdCBJJ20gdXNlZCB0by4gQmV0dGVyIHRvIGNvbmZpcm0gdGhlIHN5bnRheCBhbmQgYmUgY2VydGFpbiBvZiB0aGUgZm91bmRhdGlvbiBiZWZvcmUgYnVpbGRpbmcgYW55dGhpbmcgZnVydGhlciBvbiB0b3Agb2YgaXQuIExldCBtZSBqdXN0IGdsYW5jZSBhdCB0aGUgcmVsZXZhbnQgZG9jdW1lbnRhdGlvbiBvciBhbiBleGFtcGxlIHNuaXBwZXQuLi4geWVwLCBqdXN0IGEgcXVpY2sgcmVmcmVzaGVyIHRvIG1ha2Ugc3VyZSBJJ20gb24gdGhlIHJpZ2h0IHRyYWNrIG5hbWluZy13aXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzY4MSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjQwOjMxLjM2NjYyNjUxN1oiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU0MDc2MzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IGNvbnNvbGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xMTI9c3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpuZXRjb25zb2xlX3dxO1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTExNy0gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTE4OnN0YXRpYyBzdHJ1Y3QgY29uc29sZSBuZXRjb25zb2xlX2V4dCwgbmV0Y29uc29sZTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTE5LVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI0NTk9c3RhdGljIHZvaWQgbmV0Y29uc29sZV93cml0ZShzdHJ1Y3QgbmJjb25fd3JpdGVfY29udGV4dCAqd2N0eHQsIGJvb2wgZXh0ZW5kZWQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQ4Ni1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjQ4NzpzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3dyaXRlX2V4dChzdHJ1Y3QgY29uc29sZSAqY29uIF9fYWx3YXlzX3VudXNlZCxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQ4OC1cXHRcXHRcXHRcXHQgc3RydWN0IG5iY29uX3dyaXRlX2NvbnRleHQgKndjdHh0KVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0OTItXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI0OTM6c3RhdGljIHZvaWQgbmV0Y29uc29sZV93cml0ZV9iYXNpYyhzdHJ1Y3QgY29uc29sZSAqY29uIF9fYWx3YXlzX3VudXNlZCxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQ5NC1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmJjb25fd3JpdGVfY29udGV4dCAqd2N0eHQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQ5OC1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjQ5OTpzdGF0aWMgdm9pZCBuZXRjb25zb2xlX2RldmljZV9sb2NrKHN0cnVjdCBjb25zb2xlICpjb24gX19hbHdheXNfdW51c2VkLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNTAwLVxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgKmZsYWdzKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yNTAxPV9fYWNxdWlyZXMoXFx1MDAyNnRhcmdldF9saXN0X2xvY2spXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjUwNS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjUwNjpzdGF0aWMgdm9pZCBuZXRjb25zb2xlX2RldmljZV91bmxvY2soc3RydWN0IGNvbnNvbGUgKmNvbiBfX2Fsd2F5c191bnVzZWQsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI1MDctXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIGZsYWdzKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI2NjM9c3RhdGljIHZvaWQgZnJlZV9wYXJhbV90YXJnZXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjc0LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNjc1OnN0YXRpYyBzdHJ1Y3QgY29uc29sZSBuZXRjb25zb2xlX2V4dCA9IHtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjY3Ni1cXHQubmFtZSA9IFxcXCJuZXRjb25fZXh0XFxcIixcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjgzLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNjg0OnN0YXRpYyBzdHJ1Y3QgY29uc29sZSBuZXRjb25zb2xlID0ge1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjg1LVxcdC5uYW1lID0gXFxcIm5ldGNvblxcXCIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjQwOjMxLjQyMjA0MDU3MVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTA5MDM3MDUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipVbnBhY2tpbmcgTmV0Y29uc29sZSBXcml0ZSBGdW5jdGlvbnMqKlxuXG5SaWdodCwgc28gSSdtIGRpZ2dpbmcgaW50byBgbmV0Y29uc29sZV93cml0ZV9leHRgIGFuZCBgbmV0Y29uc29sZV93cml0ZV9iYXNpY2AuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgY2FsbCBzdGFjay4gSGFuZyBvbi4uLiBpc24ndCBgbmV0Y29uc29sZV93cml0ZWAgdGhlIGNvcmUgZnVuY3Rpb24gdGhhdCBldmVudHVhbGx5IGdldHMgZG93biB0byBgc2VuZF91ZHBgPyBMZXQncyBxdWlja2x5IHZlcmlmeSB0aGF0LiBHb3R0YSBtYWtlIHN1cmUgSSdtIHJlbWVtYmVyaW5nIHRoZSBjb250cm9sIGZsb3cgY29ycmVjdGx5IGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyIGRvd24gdGhpcyByYWJiaXQgaG9sZS4gSSByZWFsbHkgd2FudCB0byBlbnN1cmUgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2tzIGlzIHNvbGlkIGJlZm9yZSBJIHN0YXJ0IGxvb2tpbmcgYXQgdGhlIG1vcmUgY29tcGxleCBpbnRlcmFjdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NDk4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6NDA6MzQuOTMxMDc5OTkzWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzczMTMzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRjb25zb2xlX3dyaXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjQzOD1zdGF0aWMgdm9pZCBzZW5kX21zZ191ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0NTItLyoqXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI0NTM6ICogbmV0Y29uc29sZV93cml0ZSAtIEdlbmVyaWMgZnVuY3Rpb24gdG8gc2VuZCBhIG1zZyB0byBhbGwgdGFyZ2V0c1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDU0LSAqIEB3Y3R4dDogbmJjb24gd3JpdGUgY29udGV4dFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0NTgtICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI0NTk6c3RhdGljIHZvaWQgbmV0Y29uc29sZV93cml0ZShzdHJ1Y3QgbmJjb25fd3JpdGVfY29udGV4dCAqd2N0eHQsIGJvb2wgZXh0ZW5kZWQpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0NjAte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0ODYtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI0ODc6c3RhdGljIHZvaWQgbmV0Y29uc29sZV93cml0ZV9leHQoc3RydWN0IGNvbnNvbGUgKmNvbiBfX2Fsd2F5c191bnVzZWQsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0ODgtXFx0XFx0XFx0XFx0IHN0cnVjdCBuYmNvbl93cml0ZV9jb250ZXh0ICp3Y3R4dClcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQ4OS17XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI0OTA6XFx0bmV0Y29uc29sZV93cml0ZSh3Y3R4dCwgdHJ1ZSk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0OTEtfVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDkyLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNDkzOnN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfd3JpdGVfYmFzaWMoc3RydWN0IGNvbnNvbGUgKmNvbiBfX2Fsd2F5c191bnVzZWQsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0OTQtXFx0XFx0XFx0XFx0ICAgc3RydWN0IG5iY29uX3dyaXRlX2NvbnRleHQgKndjdHh0KVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDk1LXtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjQ5NjpcXHRuZXRjb25zb2xlX3dyaXRlKHdjdHh0LCBmYWxzZSk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0OTctfVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI2NzU9c3RhdGljIHN0cnVjdCBjb25zb2xlIG5ldGNvbnNvbGVfZXh0ID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2NzctXFx0LmZsYWdzID0gQ09OX0VOQUJMRUQgfCBDT05fRVhURU5ERUQgfCBDT05fTkJDT04gfCBDT05fTkJDT05fQVRPTUlDX1VOU0FGRSxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjY3ODpcXHQud3JpdGVfdGhyZWFkID0gbmV0Y29uc29sZV93cml0ZV9leHQsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI2Nzk6XFx0LndyaXRlX2F0b21pYyA9IG5ldGNvbnNvbGVfd3JpdGVfZXh0LFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjgwLVxcdC5kZXZpY2VfbG9jayA9IG5ldGNvbnNvbGVfZGV2aWNlX2xvY2ssXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjY4ND1zdGF0aWMgc3RydWN0IGNvbnNvbGUgbmV0Y29uc29sZSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjg2LVxcdC5mbGFncyA9IENPTl9FTkFCTEVEIHwgQ09OX05CQ09OIHwgQ09OX05CQ09OX0FUT01JQ19VTlNBRkUsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI2ODc6XFx0LndyaXRlX3RocmVhZCA9IG5ldGNvbnNvbGVfd3JpdGVfYmFzaWMsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI2ODg6XFx0LndyaXRlX2F0b21pYyA9IG5ldGNvbnNvbGVfd3JpdGVfYmFzaWMsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2ODktXFx0LmRldmljZV9sb2NrID0gbmV0Y29uc29sZV9kZXZpY2VfbG9jayxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6NDA6MzQuOTc0ODE3ODU5WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwODcyNjI1MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZXRjb25zb2xlIENvZGUgUGF0aCoqXG5cbk9rYXksIHNvIEknbSB0cmFjaW5nIHRoZSBleGVjdXRpb24gcGF0aCBoZXJlIGZvciB0aGlzIG5ldGNvbnNvbGUgZnVuY3Rpb25hbGl0eS4gVGhlIGluaXRpYWwgZW50cnkgcG9pbnRzIGFyZSBgbmV0Y29uc29sZV93cml0ZV9leHRgIGFuZCBgbmV0Y29uc29sZV93cml0ZV9iYXNpY2AsIGJ1dCB0aGV5IGJvdGggZnVubmVsIGRvd24gdG8gYG5ldGNvbnNvbGVfd3JpdGVgLiBUaGF0IHRoZW4gY2FsbHMgYHNlbmRfbXNnX3VkcGAsIHdoaWNoIGluIHR1cm4gY2FsbHMgYHNlbmRfdWRwYCBhbmQgZmluYWxseSwgYG5ldHBvbGxfc2VuZF91ZHBgLiBUaGlzIGBuZXRwb2xsX3NlbmRfdWRwYCBmdW5jdGlvbiBpcyB0aGUgb25lIHRoZSBwYXRjaCBpcyBtb2RpZnlpbmcuIFRoZXJlZm9yZSwgdGhhdCdzIHdoZXJlIEkgbmVlZCB0byBmb2N1cyBteSBhdHRlbnRpb24uIEl0IHNlZW1zIGxpa2UgYSBnb29kIGZvY3VzIHN5bWJvbC5cblxuTGV0IG1lIGp1c3QgcXVpY2tseSB2ZXJpZnkgaWYgYG5ldHBvbGxfc2VuZF91ZHBgIGlzIGFuIGlubGluZSBmdW5jdGlvbi4gQWgsIG5vLCBpdCdzIGRlZmluZWQgYXMgYHN0YXRpYyBpbnQgbmV0cG9sbF9zZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csIGludCBsZW4pYCwgc28gaXQncyBub3QgaW5saW5lZCwgd2hpY2ggc2ltcGxpZmllcyB0aGluZ3MgYSBiaXQuXG5cblRoZXJlZm9yZSwgbXkgY29yZSBmb2N1cyBzeW1ib2xzIGZvciBmdXJ0aGVyIGludmVzdGlnYXRpb24gYXJlOiBgbG9jYWxfaXBfc3RvcmVgLCBgcmVtb3RlX2lwX3N0b3JlYCwgYGVuYWJsZWRfc3RvcmVgLCBgbmV0Y29uc19uZXRwb2xsX3NldHVwYCwgYG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmVgIGFuZCBlc3BlY2lhbGx5LCBgbmV0cG9sbF9zZW5kX3VkcGAuXG5cbk5vdywgSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uczogYE5FVENPTlNPTEVgLCBgTkVUQ09OU09MRV9EWU5BTUlDYCwgYENPTkZJR0ZTX0ZTYCBhbmQgYElQVjZgLlxuXG5JIHNob3VsZCBwcm9iYWJseSBjb25maXJtIGluIHdoaWNoIGZpbGUgYG5ldHBvbGxfc2VuZF91ZHBgIGlzIGxvY2F0ZWQgLSBpcyBpdCBpbiBgZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jYCBvciBpbiBgbmV0L2NvcmUvbmV0cG9sbC5jYD8gV2FpdCBhIG1pbnV0ZSwgdGhlIHBhdGNoIGl0c2VsZiBpcyBtb2RpZnlpbmcgYG5ldHBvbGxfc2VuZF91ZHBgIHdpdGhpbiBgZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jYC4gUmlnaHQsIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGUgcGF0Y2ggbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTQ3NiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTo0MDo0MS4wNjIwODI2OFoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ3Mjg0NzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0cG9sbF9zZW5kX3VkcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIxNDU9c3RhdGljIHZvaWQgcHVzaF9pcHY2KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjE2OC1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjE2OTpzdGF0aWMgaW50IG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTcwLVxcdFxcdFxcdCAgICBpbnQgbGVuKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMDYtLyoqXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIyMDc6ICogc2VuZF91ZHAgLSBXcmFwcGVyIGZvciBuZXRwb2xsX3NlbmRfdWRwIHRoYXQgY291bnRzIGVycm9yc1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjA4LSAqIEBudDogdGFyZ2V0IHRvIHNlbmQgbWVzc2FnZSB0b1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMTEtICpcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjIxMjogKiBDYWxscyBuZXRwb2xsX3NlbmRfdWRwIGFuZCBjbGFzc2lmaWVzIHRoZSByZXR1cm4gdmFsdWUuIElmIGFuIGVycm9yXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMTMtICogb2NjdXJyZWQgaXQgaW5jcmVtZW50cyBzdGF0aXN0aWNzIGluIG50LVxcdTAwM2VzdGF0cyBhY2NvcmRpbmdseS5cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjIxNDogKiBPbmx5IGNhbGxzIG5ldHBvbGxfc2VuZF91ZHAgaWYgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQyBpcyBkaXNhYmxlZC5cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIxNS0gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjIxNj1zdGF0aWMgdm9pZCBzZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csIGludCBsZW4pXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMTcte1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMjE4OlxcdGludCByZXN1bHQgPSBuZXRwb2xsX3NlbmRfdWRwKG50LCBtc2csIGxlbik7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMTktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjQwOjQxLjEwNjgxNTU2NVoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDI4NzYwMzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipBbmFseXppbmcgS2VybmVsIE5ldHdvcmsgQ29uc29sZSBDaGFuZ2VzKipcblxuQWxyaWdodCwgc28gdGhlIGNsdWUgaXMgcG9pbnRpbmcgbWUgZGlyZWN0bHkgdG8gYGRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY2AuIFRoYXQncyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBuZXR3b3JrIGNvbnNvbGUgaW1wbGVtZW50YXRpb24uIEkgZmlndXJlZCBpdCB3b3VsZCBiZSBzb21ld2hlcmUgaW4gdGhlIG5ldHdvcmsgY29kZSwgYnV0IHRoaXMgY29uZmlybXMgdGhlIHNwZWNpZmljIGZpbGUuXG5cbldhaXQgYSBzZWNvbmQuLi4gdGhlIHBhdGNoIGlzbid0ICpqdXN0KiB0b3VjaGluZyBgbmV0Y29uc29sZS5jYC4gSXQncyBhbHNvIG1vZGlmeWluZyBgbmV0cG9sbF9wYXJzZV9pcF9hZGRyYC4gVGhhdCdzIGltcG9ydGFudC4gSSBuZWVkIHRvIGJlIGNhcmVmdWwgbm90IHRvIG1pc3MgYW55IGluZGlyZWN0IGRlcGVuZGVuY2llcyBvciBzaWRlIGVmZmVjdHMgcmVsYXRlZCB0byBJUCBhZGRyZXNzIHBhcnNpbmcgd2l0aGluIHRoaXMgY29udGV4dC4gSSdsbCBhZGQgYG5ldHBvbGxfcGFyc2VfaXBfYWRkcmAgdG8gbXkgbGlzdCBvZiBmb2N1cyBzeW1ib2xzLiBJdCdzIGEga2V5IHBhcnQgb2YgdGhlIHB1enpsZS4gSSBjYW4ndCBhZmZvcmQgdG8gb3Zlcmxvb2sgdGhhdCBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA2MTQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTo0MDo0NC41MzU1NzkyNjVaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MzI0ODE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldHBvbGxfcGFyc2VfaXBfYWRkclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTcxMj1zdGF0aWMgdm9pZCBuZXRjb25zb2xlX3ByaW50X2Jhbm5lcihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTczNy0gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NzM4OnN0YXRpYyBpbnQgbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGNvbnN0IGNoYXIgKnN0ciwgc3RydWN0IGluZXRfYWRkciAqYWRkcilcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNzM5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xMjIzPXN0YXRpYyBzc2l6ZV90IGxvY2FsX2lwX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEyMzUtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEyMzY6XFx0aWYgKG5ldHBvbGxfcGFyc2VfaXBfYWRkcihidWYsIFxcdTAwMjZudC1cXHUwMDNlbG9jYWxfaXApIFxcdTAwM2MgMClcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTIzNy1cXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTI0NT1zdGF0aWMgc3NpemVfdCByZW1vdGVfaXBfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTI1Ny1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTI1ODpcXHRpZiAobmV0cG9sbF9wYXJzZV9pcF9hZGRyKGJ1ZiwgXFx1MDAyNm50LVxcdTAwM2VyZW1vdGVfaXApIFxcdTAwM2MgMClcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTI1OS1cXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjUxMz1zdGF0aWMgaW50IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY2hhciAqb3B0KVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI1MzQtXFx0XFx0KmRlbGltID0gMDtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjUzNTpcXHRcXHRpZiAobmV0cG9sbF9wYXJzZV9pcF9hZGRyKGN1ciwgXFx1MDAyNm50LVxcdTAwM2Vsb2NhbF9pcCkgXFx1MDAzYyAwKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNTM2LVxcdFxcdFxcdGdvdG8gcGFyc2VfZmFpbGVkO1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI1NzctXFx0KmRlbGltID0gMDtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjU3ODpcXHRpZiAobmV0cG9sbF9wYXJzZV9pcF9hZGRyKGN1ciwgXFx1MDAyNm50LVxcdTAwM2VyZW1vdGVfaXApIFxcdTAwM2MgMClcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjU3OS1cXHRcXHRnb3RvIHBhcnNlX2ZhaWxlZDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6NDA6NDQuNTgxOTA4MzgxWiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgwMjg5MjgyMzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgUHJpb3JpdGl6YXRpb246IEFuYWx5emluZyBhIEtlcm5lbCBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kLCByaWdodCBvZmYgdGhlIGJhdCwgYG5ldHBvbGxfcGFyc2VfaXBfYWRkcmAganVtcHMgb3V0IGF0IG1lLiBJdCdzIHN0YXRpYywgd2hpY2ggaXMgdXN1YWxseSBhIHNpZ24gdGhhdCBpdOKAmXMgaXNvbGF0ZWQsIGJ1dCBpdCdzIGJlaW5nIGNhbGxlZCBmcm9tICptdWx0aXBsZSogbG9jYXRpb25zLiBUaGF0IG1ha2VzIGl0IGEgc29saWQgZm9jdXMgc3ltYm9sIGZvciBmdXp6aW5nLlxuXG5MZXQncyBicmVhayBkb3duIHRoZSBjaGFuZ2VzLiBUaGUgcGF0Y2ggaXMgcmVmaW5pbmcgaG93IGBuZXRjb25zb2xlYCBtYW5hZ2VzIElQIGFkZHJlc3MgZmFtaWxpZXMuIEluc3RlYWQgb2YganVzdCBhIHNpbmdsZSBgaXB2NmAgZmxhZywgaXQncyBub3cgdHJhY2tpbmcgdGhlIGFkZHJlc3MgZmFtaWx5IChBRl9JTkVULCBBRl9JTkVUNiwgb3IgQUZfVU5TUEVDKSBzZXBhcmF0ZWx5IGZvciBsb2NhbCBhbmQgcmVtb3RlIElQcy4gVGhpcyBpbXByb3ZlcyBJUCBhZGRyZXNzIHZhbGlkYXRpb24gYW5kIGhhbmRsaW5nIHdoaWNoIGlzIGFsd2F5cyBhIGdvb2QgdGhpbmcgdG8gc2VlIGluIG5ldHdvcmsgY29kZS5cblxuVGhlIGNoYW5nZXMgYXJlIHdpdGhpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIHNwZWNpZmljYWxseSB0aGUgYG5ldGNvbnNvbGVgIHN1YnN5c3RlbSwgd2hpY2ggaXMgZ29vZC4gV2UgY2FuIHRyaWdnZXIgdGhpcyB0aHJvdWdoIGBjb25maWdmc2Agb3Iga2VybmVsIGNvbW1hbmQtbGluZSBwYXJhbWV0ZXJzLCBpbmNyZWFzaW5nIHRoZSBvZGRzIG9mIGFjdHVhbGx5IGV4ZXJjaXNpbmcgdGhlIGNvZGUuIERlZmluaXRlbHkgd29ydGggZnV6emluZywgYmFzZWQgb24gdGhpcy5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIGtleSBzeW1ib2xzIEkgbmVlZCB0byB0YXJnZXQ6XG5cbiogICBgbG9jYWxfaXBfc3RvcmVgXG4qICAgYHJlbW90ZV9pcF9zdG9yZWBcbiogICBgZW5hYmxlZF9zdG9yZWBcbiogICBgbmV0Y29uc19uZXRwb2xsX3NldHVwYFxuKiAgIGBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lYFxuKiAgIGBuZXRwb2xsX3NlbmRfdWRwYFxuKiAgIEFuZCBvZiBjb3Vyc2UsIHRoYXQgY3J1Y2lhbCBgbmV0cG9sbF9wYXJzZV9pcF9hZGRyYFxuXG5XZSBhbHNvIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSByaWdodCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBzZXQgZm9yIHRoaXMuIFdlJ3JlIGxvb2tpbmcgYXQ6XG5cbiogICBgTkVUQ09OU09MRWAgLSBvYnZpb3VzbHksIHdlIHdhbnQgdGhhdC5cbiogICBgTkVUQ09OU09MRV9EWU5BTUlDYCAtIFdlIG5lZWQgdG8gYmUgY2FyZWZ1bCB3aXRoIHRoaXMgb25lLlxuKiAgIGBDT05GSUdGU19GU2AgLSBUaGlzIG9uZSBpcyBpbXBvcnRhbnQgdG8gY292ZXIuXG4qICAgYElQVjZgIC0gV2UgbmVlZCB0byBlbnN1cmUgd2UgY292ZXIgdGhhdCB0b28sIHNpbmNlIHdlJ3JlIGhhbmRsaW5nIElQIGFkZHJlc3MgZmFtaWxpZXMuXG5cbk9rYXksIGEgcXVpY2sgY2hlY2sgb24gdGhlIGRlcGVuZGVuY2llcy4gYE5FVENPTlNPTEVfRFlOQU1JQ2AgZGVwZW5kcyBvbiBgU1lTRlNgLCB3aGljaCBpcyBhbG1vc3QgYWx3YXlzIGVuYWJsZWQsIGJ1dCBsZXQncyBtYWtlIHN1cmUuIENvbmZpcm1lZC4gV2UgYWxzbyBuZWVkIHRvIGVuYWJsZSBgQ09ORklHRlNfRlNgLCBzaW5jZSBpdCdzIHRyaXN0YXRlLiBBbmQgYElQVjZgIHNob3VsZCBiZSBlbmFibGVkLCBzaW5jZSBpdCdzIGEgYm9vbGVhbi5cblxuQWxyaWdodCwgSSB0aGluayBJIGhhdmUgZXZlcnl0aGluZy4gVGltZSB0byBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTQzOSwiT3V0cHV0VG9rZW5zIjoyMzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6NDA6NTIuNjEwODM5MTE4WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc3NzE2NzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVENPTlNPTEVcIixcbiAgICBcIk5FVENPTlNPTEVfRFlOQU1JQ1wiLFxuICAgIFwiQ09ORklHRlNfRlNcIixcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJsb2NhbF9pcF9zdG9yZVwiLFxuICAgIFwicmVtb3RlX2lwX3N0b3JlXCIsXG4gICAgXCJlbmFibGVkX3N0b3JlXCIsXG4gICAgXCJuZXRjb25zX25ldHBvbGxfc2V0dXBcIixcbiAgICBcIm5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmVcIixcbiAgICBcIm5ldHBvbGxfc2VuZF91ZHBcIixcbiAgICBcIm5ldHBvbGxfcGFyc2VfaXBfYWRkclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBuZXRjb25zb2xlIGRyaXZlciB0byB0cmFjayB0aGUgSVAgYWRkcmVzcyBmYW1pbHkgKEFGX0lORVQsIEFGX0lORVQ2LCBBRl9VTlNQRUMpIGluZGVwZW5kZW50bHkgZm9yIGxvY2FsIGFuZCByZW1vdGUgSVAgYWRkcmVzc2VzLCByZXBsYWNpbmcgYSBzaW5nbGUgYGlwdjZgIGJvb2xlYW4gZmxhZy4gVGhpcyBjaGFuZ2VzIGhvdyBJUCBhZGRyZXNzZXMgYXJlIHBhcnNlZCwgdmFsaWRhdGVkLCBhbmQgdXNlZCBkdXJpbmcgbmV0Y29uc29sZSBzZXR1cCBhbmQgbWVzc2FnZSB0cmFuc21pc3Npb24uIFRoZSBtb2RpZmllZCBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgdGhlIG5ldGNvbnNvbGUgY29uZmlnZnMgaW50ZXJmYWNlICh3aGljaCBhbGxvd3MgZHluYW1pYyByZWNvbmZpZ3VyYXRpb24gb2YgdGFyZ2V0cykgYW5kIGR1cmluZyBtb2R1bGUgaW5pdGlhbGl6YXRpb24gdmlhIGtlcm5lbCBjb21tYW5kIGxpbmUgcGFyYW1ldGVycy4gU2luY2UgdGhpcyBhZmZlY3RzIGNvcmUga2VybmVsIGxvZ2dpbmcgZnVuY3Rpb25hbGl0eSBhbmQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBjb25maWdmcywgaXQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRDT05TT0xFXCIsXG4gICAgXCJORVRDT05TT0xFX0RZTkFNSUNcIixcbiAgICBcIkNPTkZJR0ZTX0ZTXCIsXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibG9jYWxfaXBfc3RvcmVcIixcbiAgICBcInJlbW90ZV9pcF9zdG9yZVwiLFxuICAgIFwiZW5hYmxlZF9zdG9yZVwiLFxuICAgIFwibmV0Y29uc19uZXRwb2xsX3NldHVwXCIsXG4gICAgXCJuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lXCIsXG4gICAgXCJuZXRwb2xsX3NlbmRfdWRwXCIsXG4gICAgXCJuZXRwb2xsX3BhcnNlX2lwX2FkZHJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbmV0Y29uc29sZSBkcml2ZXIgdG8gdHJhY2sgdGhlIElQIGFkZHJlc3MgZmFtaWx5IChBRl9JTkVULCBBRl9JTkVUNiwgQUZfVU5TUEVDKSBpbmRlcGVuZGVudGx5IGZvciBsb2NhbCBhbmQgcmVtb3RlIElQIGFkZHJlc3NlcywgcmVwbGFjaW5nIGEgc2luZ2xlIGBpcHY2YCBib29sZWFuIGZsYWcuIFRoaXMgY2hhbmdlcyBob3cgSVAgYWRkcmVzc2VzIGFyZSBwYXJzZWQsIHZhbGlkYXRlZCwgYW5kIHVzZWQgZHVyaW5nIG5ldGNvbnNvbGUgc2V0dXAgYW5kIG1lc3NhZ2UgdHJhbnNtaXNzaW9uLiBUaGUgbW9kaWZpZWQgY29kZSBpcyByZWFjaGFibGUgdmlhIHRoZSBuZXRjb25zb2xlIGNvbmZpZ2ZzIGludGVyZmFjZSAod2hpY2ggYWxsb3dzIGR5bmFtaWMgcmVjb25maWd1cmF0aW9uIG9mIHRhcmdldHMpIGFuZCBkdXJpbmcgbW9kdWxlIGluaXRpYWxpemF0aW9uIHZpYSBrZXJuZWwgY29tbWFuZCBsaW5lIHBhcmFtZXRlcnMuIFNpbmNlIHRoaXMgYWZmZWN0cyBjb3JlIGtlcm5lbCBsb2dnaW5nIGZ1bmN0aW9uYWxpdHkgYW5kIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgY29uZmlnZnMsIGl0IGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjQwOjUyLjY4ODYxOTA2WiIsIlNlcSI6NDEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDc3NTIyNTg3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjQwOjUyLjY4OTI1Njk2WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjc0Nzc0NTgzMjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgaG93IElQIGFkZHJlc3NlcyBhcmUgc3RvcmVkIGFuZCBwYXJzZWQgaW4gdGhlIG5ldGNvbnNvbGUgZHJpdmVyIGJ5IHJlcGxhY2luZyBhIGB1bmlvbiBpbmV0X2FkZHJgIGFuZCBhIGJvb2xlYW4gYGlwdjZgIGZsYWcgd2l0aCBhIG5ldyBgc3RydWN0IGluZXRfYWRkcmAgdGhhdCBleHBsaWNpdGx5IHRyYWNrcyB0aGUgYWRkcmVzcyBmYW1pbHkgKGBBRl9VTlNQRUNgLCBgQUZfSU5FVGAsIG9yIGBBRl9JTkVUNmApLiBUaGUgYHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldGAgY29udGFpbmluZyB0aGVzZSBhZGRyZXNzZXMgaXMgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jX29iamAgKHdoaWNoIHplcm8taW5pdGlhbGl6ZXMgdGhlIG1lbW9yeSksIGVuc3VyaW5nIHRoYXQgdGhlIG5ldyBgZmFtaWx5YCBmaWVsZCBkZWZhdWx0cyB0byBgQUZfVU5TUEVDYCBhbmQgdGhlIElQIGFkZHJlc3NlcyBhcmUgemVyb2VkLiBUaGUgSVAgYWRkcmVzc2VzIGFyZSBvbmx5IGV4cG9zZWQgdG8gdXNlcnNwYWNlIHZpYSBjb25maWdmcyBgc2hvd2AgZnVuY3Rpb25zLCB3aGljaCBmb3JtYXQgdGhlbSBhcyBzdHJpbmdzIHVzaW5nIGBzeXNmc19lbWl0YCwgcHJldmVudGluZyBhbnkgcG90ZW50aWFsIGxlYWthZ2Ugb2YgcGFkZGluZyBieXRlcy4gV2hlbiBjb25zdHJ1Y3RpbmcgbmV0d29yayBwYWNrZXRzLCBvbmx5IHRoZSBleGFjdCBJUHY0ICg0IGJ5dGVzKSBvciBJUHY2ICgxNiBieXRlcykgYWRkcmVzcyBmaWVsZHMgYXJlIGNvcGllZCBpbnRvIHRoZSBJUCBoZWFkZXJzLCBhZ2FpbiBhdm9pZGluZyBhbnkgcGFkZGluZyBsZWFrcy4gVGhlcmUgYXJlIG5vIG5ldyBhbGxvY2F0aW9ucyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm8gc3RydWN0dXJlcyBjb3BpZWQgZGlyZWN0bHkgdG8gdXNlcnNwYWNlLCBhbmQgbm8gY29udHJvbCBmbG93IGNoYW5nZXMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBidWdzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMGY2MTMwNWUxNmUyZmFkNGJmYWUxNWMwNmI1MDJjMmMyMDA2ZTlmOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDEwIDE5OjM4OjIxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jIGIvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXG5pbmRleCAwMzkxMzMwMjMyOGNjLi44MTBkZWQ2ZTQ4ZjMyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXG4rKysgYi9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcbkBAIC0xNTEsNiArMTUxLDE1IEBAIGVudW0gdGFyZ2V0X3N0YXRlIHtcbiBcdFNUQVRFX0RFQUNUSVZBVEVELFxuIH07XG4gXG4rc3RydWN0IGluZXRfYWRkciB7XG4rXHQvKiBBZGRyZXNzIGZhbWlseTogQUZfVU5TUEVDIHdoZW4gdW5zZXQsIGVsc2UgQUZfSU5FVCBvciBBRl9JTkVUNiAqL1xuK1x0dThcdFx0XHRmYW1pbHk7XG4rXHR1bmlvbiB7XG4rXHRcdF9fYmUzMlx0XHRpcDtcbitcdFx0c3RydWN0IGluNl9hZGRyXHRpbjY7XG4rXHR9O1xuK307XG4rXG4gLyoqXG4gICogc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0IC0gUmVwcmVzZW50cyBhIGNvbmZpZ3VyZWQgbmV0Y29uc29sZSB0YXJnZXQuXG4gICogQGxpc3Q6XHRMaW5rcyB0aGlzIHRhcmdldCBpbnRvIHRoZSB0YXJnZXRfbGlzdC5cbkBAIC0xODEsNyArMTkwLDYgQEAgZW51bSB0YXJnZXRfc3RhdGUge1xuICAqXHRcdGxvY2FsX21hY1x0KHJlYWQtb25seSlcbiAgKiBAbG9jYWxfaXA6XHRTb3VyY2UgSVAgYWRkcmVzcyBvZiB0aGUgdGFyZ2V0IChyZWFkLXdyaXRlKS5cbiAgKiBAcmVtb3RlX2lwOlx0RGVzdGluYXRpb24gSVAgYWRkcmVzcyBvZiB0aGUgdGFyZ2V0IChyZWFkLXdyaXRlKS5cbi0gKiBAaXB2NjpcdFdoZXRoZXIgdGhlIHRhcmdldCBhZGRyZXNzZXMgYXJlIElQdjYgKHJlYWQtd3JpdGUpLlxuICAqIEBsb2NhbF9wb3J0Olx0U291cmNlIFVEUCBwb3J0IG9mIHRoZSB0YXJnZXQgKHJlYWQtd3JpdGUpLlxuICAqIEByZW1vdGVfcG9ydDogRGVzdGluYXRpb24gVURQIHBvcnQgb2YgdGhlIHRhcmdldCAocmVhZC13cml0ZSkuXG4gICogQHJlbW90ZV9tYWM6XHREZXN0aW5hdGlvbiBldGhlcm5ldCBhZGRyZXNzIG9mIHRoZSB0YXJnZXQgKHJlYWQtd3JpdGUpLlxuQEAgLTIxMiw4ICsyMjAsNyBAQCBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQge1xuIFx0Ym9vbFx0XHRcdGV4dGVuZGVkO1xuIFx0Ym9vbFx0XHRcdHJlbGVhc2U7XG4gXHRzdHJ1Y3QgbmV0cG9sbFx0XHRucDtcbi1cdHVuaW9uIGluZXRfYWRkclx0XHRsb2NhbF9pcCwgcmVtb3RlX2lwO1xuLVx0Ym9vbFx0XHRcdGlwdjY7XG4rXHRzdHJ1Y3QgaW5ldF9hZGRyXHRsb2NhbF9pcCwgcmVtb3RlX2lwO1xuIFx0dTE2XHRcdFx0bG9jYWxfcG9ydCwgcmVtb3RlX3BvcnQ7XG4gXHR1OFx0XHRcdHJlbW90ZV9tYWNbRVRIX0FMRU5dO1xuIFx0LyogcHJvdGVjdGVkIGJ5IHRhcmdldF9saXN0X2xvY2s7ICsxIGdpdmVzIHNjbnByaW50ZigpIHJvb20gZm9yIGl0c1xuQEAgLTQxNSw2ICs0MjIsNyBAQCBzdGF0aWMgaW50IG5ldGNvbnNfdGFrZV9pcHY2KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHQvKiBHb3QgdGhlIElQLCBsZXQncyByZXR1cm4gKi9cbiBcdFx0XHRudC1cdTAwM2Vsb2NhbF9pcC5pbjYgPSBpZnAtXHUwMDNlYWRkcjtcbitcdFx0XHRudC1cdTAwM2Vsb2NhbF9pcC5mYW1pbHkgPSBBRl9JTkVUNjtcbiBcdFx0XHRlcnIgPSAwO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG5AQCAtNDU2LDI4ICs0NjQsMTIgQEAgc3RhdGljIGludCBuZXRjb25zX3Rha2VfaXB2NChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuIFx0fVxuIFxuIFx0bnQtXHUwMDNlbG9jYWxfaXAuaXAgPSBpZmEtXHUwMDNlaWZhX2xvY2FsO1xuK1x0bnQtXHUwMDNlbG9jYWxfaXAuZmFtaWx5ID0gQUZfSU5FVDtcbiBcdG5wX2luZm8obnAsIFwibG9jYWwgSVAgJXBJNFxcblwiLCBcdTAwMjZudC1cdTAwM2Vsb2NhbF9pcC5pcCk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tLypcbi0gKiBUZXN0IHdoZXRoZXIgdGhlIGNhbGxlciBsZWZ0IG50LVx1MDAzZWxvY2FsX2lwIHVuc2V0LCBzbyB0aGF0XG4tICogbmV0Y29uc19uZXRwb2xsX3NldHVwKCkgc2hvdWxkIGF1dG8tcG9wdWxhdGUgaXQgZnJvbSB0aGUgZWdyZXNzIGRldmljZS5cbi0gKlxuLSAqIG50LVx1MDAzZWxvY2FsX2lwIGlzIGEgdW5pb24gb2YgX19iZTMyIChJUHY0KSBhbmQgc3RydWN0IGluNl9hZGRyIChJUHY2KSxcbi0gKiBzbyBhbiBJUHY2IGFkZHJlc3Mgd2hvc2UgZmlyc3QgNCBieXRlcyBhcmUgemVybyAoZS5nLiA6OjEsIDo6Mixcbi0gKiBJUHY0LW1hcHBlZCA6OmZmZmY6YS5iLmMuZCkgbXVzdCBub3QgYmUgdGVzdGVkIHZpYSB0aGUgSVB2NCBhcm0g4oCUXG4tICogZG9pbmcgc28gd291bGQgbWlzY2xhc3NpZnkgYSBjYWxsZXItc3VwcGxpZWQgYWRkcmVzcyBhcyB1bnNldCBhbmRcbi0gKiBzaWxlbnRseSBvdmVyd3JpdGUgaXQgd2l0aCB3aGF0ZXZlciBhZGRyZXNzIHRoZSBkZXZpY2UgZXhwb3Nlcy5cbi0gKi9cbi1zdGF0aWMgYm9vbCBuZXRjb25zX2xvY2FsX2lwX3Vuc2V0KGNvbnN0IHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG4te1xuLVx0aWYgKG50LVx1MDAzZWlwdjYpXG4tXHRcdHJldHVybiBpcHY2X2FkZHJfYW55KFx1MDAyNm50LVx1MDAzZWxvY2FsX2lwLmluNik7XG4tXHRyZXR1cm4gIW50LVx1MDAzZWxvY2FsX2lwLmlwO1xuLX1cbi1cbiBzdGF0aWMgaW50IG5ldGNvbnNfbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuIHtcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IGN1cnJlbnQtXHUwMDNlbnNwcm94eS1cdTAwM2VuZXRfbnM7XG5AQCAtNDg3LDYgKzQ3OSwxNyBAQCBzdGF0aWMgaW50IG5ldGNvbnNfbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuIFx0Ym9vbCBpcF9vdmVyd3JpdHRlbiA9IGZhbHNlO1xuIFx0aW50IGVycjtcbiBcbitcdGlmIChudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX1VOU1BFQykge1xuK1x0XHRucF9lcnIobnAsIFwicmVtb3RlIElQIGFkZHJlc3Mgbm90IGNvbmZpZ3VyZWQsIGFib3J0aW5nXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVERVNUQUREUlJFUTtcbitcdH1cbitcbitcdGlmIChudC1cdTAwM2Vsb2NhbF9pcC5mYW1pbHkgIT0gQUZfVU5TUEVDIFx1MDAyNlx1MDAyNlxuK1x0ICAgIG50LVx1MDAzZWxvY2FsX2lwLmZhbWlseSAhPSBudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5KSB7XG4rXHRcdG5wX2VycihucCwgXCJsb2NhbCBhbmQgcmVtb3RlIElQIGFkZHJlc3MgZmFtaWxpZXMgZGlmZmVyLCBhYm9ydGluZ1xcblwiKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4gXHRydG5sX2xvY2soKTtcbiBcdGlmIChucC1cdTAwM2VkZXZfbmFtZVswXSlcbiBcdFx0bmRldiA9IF9fZGV2X2dldF9ieV9uYW1lKG5ldCwgbnAtXHUwMDNlZGV2X25hbWUpO1xuQEAgLTUyMywxNiArNTI2LDEzIEBAIHN0YXRpYyBpbnQgbmV0Y29uc19uZXRwb2xsX3NldHVwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG4gXHRcdHJ0bmxfbG9jaygpO1xuIFx0fVxuIFxuLVx0aWYgKG5ldGNvbnNfbG9jYWxfaXBfdW5zZXQobnQpKSB7XG4tXHRcdGlmICghbnQtXHUwMDNlaXB2Nikge1xuLVx0XHRcdGVyciA9IG5ldGNvbnNfdGFrZV9pcHY0KG50LCBuZGV2KTtcbi1cdFx0XHRpZiAoZXJyKVxuLVx0XHRcdFx0Z290byBwdXQ7XG4tXHRcdH0gZWxzZSB7XG4rXHRpZiAobnQtXHUwMDNlbG9jYWxfaXAuZmFtaWx5ID09IEFGX1VOU1BFQykge1xuK1x0XHRpZiAobnQtXHUwMDNlcmVtb3RlX2lwLmZhbWlseSA9PSBBRl9JTkVUNilcbiBcdFx0XHRlcnIgPSBuZXRjb25zX3Rha2VfaXB2NihudCwgbmRldik7XG4tXHRcdFx0aWYgKGVycilcbi1cdFx0XHRcdGdvdG8gcHV0O1xuLVx0XHR9XG4rXHRcdGVsc2VcbitcdFx0XHRlcnIgPSBuZXRjb25zX3Rha2VfaXB2NChudCwgbmRldik7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0Z290byBwdXQ7XG4gXHRcdGlwX292ZXJ3cml0dGVuID0gdHJ1ZTtcbiBcdH1cbiBcbkBAIC03MTQsMjQgKzcxNCwyOCBAQCBzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3ByaW50X2Jhbm5lcihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuIFx0c3RydWN0IG5ldHBvbGwgKm5wID0gXHUwMDI2bnQtXHUwMDNlbnA7XG4gXG4gXHRucF9pbmZvKG5wLCBcImxvY2FsIHBvcnQgJWRcXG5cIiwgbnQtXHUwMDNlbG9jYWxfcG9ydCk7XG4tXHRpZiAobnQtXHUwMDNlaXB2NilcbitcdGlmIChudC1cdTAwM2Vsb2NhbF9pcC5mYW1pbHkgPT0gQUZfVU5TUEVDKVxuK1x0XHRucF9pbmZvKG5wLCBcImxvY2FsIElQIHVuc2V0XFxuXCIpO1xuK1x0ZWxzZSBpZiAobnQtXHUwMDNlbG9jYWxfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxuIFx0XHRucF9pbmZvKG5wLCBcImxvY2FsIElQdjYgYWRkcmVzcyAlcEk2Y1xcblwiLCBcdTAwMjZudC1cdTAwM2Vsb2NhbF9pcC5pbjYpO1xuIFx0ZWxzZVxuIFx0XHRucF9pbmZvKG5wLCBcImxvY2FsIElQdjQgYWRkcmVzcyAlcEk0XFxuXCIsIFx1MDAyNm50LVx1MDAzZWxvY2FsX2lwLmlwKTtcbiBcdG5wX2luZm8obnAsIFwiaW50ZXJmYWNlIG5hbWUgJyVzJ1xcblwiLCBucC1cdTAwM2VkZXZfbmFtZSk7XG4gXHRucF9pbmZvKG5wLCBcImxvY2FsIGV0aGVybmV0IGFkZHJlc3MgJyVwTSdcXG5cIiwgbnAtXHUwMDNlZGV2X21hYyk7XG4gXHRucF9pbmZvKG5wLCBcInJlbW90ZSBwb3J0ICVkXFxuXCIsIG50LVx1MDAzZXJlbW90ZV9wb3J0KTtcbi1cdGlmIChudC1cdTAwM2VpcHY2KVxuK1x0aWYgKG50LVx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfVU5TUEVDKVxuK1x0XHRucF9pbmZvKG5wLCBcInJlbW90ZSBJUCB1bnNldFxcblwiKTtcbitcdGVsc2UgaWYgKG50LVx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXG4gXHRcdG5wX2luZm8obnAsIFwicmVtb3RlIElQdjYgYWRkcmVzcyAlcEk2Y1xcblwiLCBcdTAwMjZudC1cdTAwM2VyZW1vdGVfaXAuaW42KTtcbiBcdGVsc2VcbiBcdFx0bnBfaW5mbyhucCwgXCJyZW1vdGUgSVB2NCBhZGRyZXNzICVwSTRcXG5cIiwgXHUwMDI2bnQtXHUwMDNlcmVtb3RlX2lwLmlwKTtcbiBcdG5wX2luZm8obnAsIFwicmVtb3RlIGV0aGVybmV0IGFkZHJlc3MgJXBNXFxuXCIsIG50LVx1MDAzZXJlbW90ZV9tYWMpO1xuIH1cbiBcbi0vKiBQYXJzZSB0aGUgc3RyaW5nIGFuZCBwb3B1bGF0ZSB0aGUgYGluZXRfYWRkcmAgdW5pb24uIFJldHVybiAwIGlmIElQdjQgaXNcbi0gKiBwb3B1bGF0ZWQsIDEgaWYgSVB2NiBpcyBwb3B1bGF0ZWQsIGFuZCAtMSB1cG9uIGZhaWx1cmUuXG4rLyogUGFyc2UgdGhlIHN0cmluZyBhbmQgcG9wdWxhdGUgdGhlIGBpbmV0X2FkZHJgIHN0cnVjdC4gUmV0dXJuIDAgb24gc3VjY2Vzc1xuKyAqIGFuZCAtMSB1cG9uIGZhaWx1cmUuXG4gICovXG4tc3RhdGljIGludCBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY29uc3QgY2hhciAqc3RyLCB1bmlvbiBpbmV0X2FkZHIgKmFkZHIpXG4rc3RhdGljIGludCBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY29uc3QgY2hhciAqc3RyLCBzdHJ1Y3QgaW5ldF9hZGRyICphZGRyKVxuIHtcbiBcdGNvbnN0IGNoYXIgKmVuZCA9IE5VTEw7XG4gXHRpbnQgbGVuO1xuQEAgLTc0MywxNCArNzQ3LDE4IEBAIHN0YXRpYyBpbnQgbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGNvbnN0IGNoYXIgKnN0ciwgdW5pb24gaW5ldF9hZGRyICphZGRyKVxuIFx0aWYgKHN0cltsZW4gLSAxXSA9PSAnXFxuJylcbiBcdFx0bGVuIC09IDE7XG4gXG4tXHRpZiAoaW40X3B0b24oc3RyLCBsZW4sICh2b2lkICopYWRkciwgLTEsIFx1MDAyNmVuZCkgXHUwMDNlIDAgXHUwMDI2XHUwMDI2XG4tXHQgICAgKCFlbmQgfHwgKmVuZCA9PSAwIHx8ICplbmQgPT0gJ1xcbicpKVxuK1x0aWYgKGluNF9wdG9uKHN0ciwgbGVuLCAodm9pZCAqKVx1MDAyNmFkZHItXHUwMDNlaXAsIC0xLCBcdTAwMjZlbmQpIFx1MDAzZSAwIFx1MDAyNlx1MDAyNlxuK1x0ICAgICghZW5kIHx8ICplbmQgPT0gMCB8fCAqZW5kID09ICdcXG4nKSkge1xuK1x0XHRhZGRyLVx1MDAzZWZhbWlseSA9IEFGX0lORVQ7XG4gXHRcdHJldHVybiAwO1xuK1x0fVxuIFxuIFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0lQVjYpIFx1MDAyNlx1MDAyNlxuLVx0ICAgIGluNl9wdG9uKHN0ciwgbGVuLCAodm9pZCAqKWFkZHIsIC0xLCBcdTAwMjZlbmQpIFx1MDAzZSAwIFx1MDAyNlx1MDAyNlxuLVx0ICAgICghZW5kIHx8ICplbmQgPT0gMCB8fCAqZW5kID09ICdcXG4nKSlcbi1cdFx0cmV0dXJuIDE7XG4rXHQgICAgaW42X3B0b24oc3RyLCBsZW4sICh2b2lkICopXHUwMDI2YWRkci1cdTAwM2VpbjYsIC0xLCBcdTAwMjZlbmQpIFx1MDAzZSAwIFx1MDAyNlx1MDAyNlxuK1x0ICAgICghZW5kIHx8ICplbmQgPT0gMCB8fCAqZW5kID09ICdcXG4nKSkge1xuK1x0XHRhZGRyLVx1MDAzZWZhbWlseSA9IEFGX0lORVQ2O1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbiBcbiBcdHJldHVybiAtMTtcbiB9XG5AQCAtODU1LDIwICs4NjMsMjQgQEAgc3RhdGljIHNzaXplX3QgbG9jYWxfaXBfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcbiB7XG4gXHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0pO1xuIFxuLVx0aWYgKG50LVx1MDAzZWlwdjYpXG4rXHRpZiAobnQtXHUwMDNlbG9jYWxfaXAuZmFtaWx5ID09IEFGX1VOU1BFQylcbitcdFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcIlxcblwiKTtcbitcdGlmIChudC1cdTAwM2Vsb2NhbF9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXG4gXHRcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCIlcEk2Y1xcblwiLCBcdTAwMjZudC1cdTAwM2Vsb2NhbF9pcC5pbjYpO1xuIFx0ZWxzZVxuLVx0XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwiJXBJNFxcblwiLCBcdTAwMjZudC1cdTAwM2Vsb2NhbF9pcCk7XG4rXHRcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCIlcEk0XFxuXCIsIFx1MDAyNm50LVx1MDAzZWxvY2FsX2lwLmlwKTtcbiB9XG4gXG4gc3RhdGljIHNzaXplX3QgcmVtb3RlX2lwX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXG4ge1xuIFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcbiBcbi1cdGlmIChudC1cdTAwM2VpcHY2KVxuK1x0aWYgKG50LVx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfVU5TUEVDKVxuK1x0XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwiXFxuXCIpO1xuK1x0aWYgKG50LVx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXG4gXHRcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCIlcEk2Y1xcblwiLCBcdTAwMjZudC1cdTAwM2VyZW1vdGVfaXAuaW42KTtcbiBcdGVsc2Vcbi1cdFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcIiVwSTRcXG5cIiwgXHUwMDI2bnQtXHUwMDNlcmVtb3RlX2lwKTtcbitcdFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcIiVwSTRcXG5cIiwgXHUwMDI2bnQtXHUwMDNlcmVtb3RlX2lwLmlwKTtcbiB9XG4gXG4gc3RhdGljIHNzaXplX3QgbG9jYWxfbWFjX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXG5AQCAtMTIxMyw3ICsxMjI1LDYgQEAgc3RhdGljIHNzaXplX3QgbG9jYWxfaXBfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXG4ge1xuIFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcbiBcdHNzaXplX3QgcmV0ID0gLUVJTlZBTDtcbi1cdGludCBpcHY2O1xuIFxuIFx0ZHluYW1pY19uZXRjb25zb2xlX211dGV4X2xvY2soKTtcbiBcdGlmIChudC1cdTAwM2VzdGF0ZSA9PSBTVEFURV9FTkFCTEVEKSB7XG5AQCAtMTIyMiwxMCArMTIzMyw4IEBAIHN0YXRpYyBzc2l6ZV90IGxvY2FsX2lwX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG4gXG4tXHRpcHY2ID0gbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGJ1ZiwgXHUwMDI2bnQtXHUwMDNlbG9jYWxfaXApO1xuLVx0aWYgKGlwdjYgPT0gLTEpXG4rXHRpZiAobmV0cG9sbF9wYXJzZV9pcF9hZGRyKGJ1ZiwgXHUwMDI2bnQtXHUwMDNlbG9jYWxfaXApIFx1MDAzYyAwKVxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4tXHRudC1cdTAwM2VpcHY2ID0gISFpcHY2O1xuIFxuIFx0cmV0ID0gY291bnQ7XG4gb3V0X3VubG9jazpcbkBAIC0xMjM4LDcgKzEyNDcsNiBAQCBzdGF0aWMgc3NpemVfdCByZW1vdGVfaXBfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXG4ge1xuIFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcbiBcdHNzaXplX3QgcmV0ID0gLUVJTlZBTDtcbi1cdGludCBpcHY2O1xuIFxuIFx0ZHluYW1pY19uZXRjb25zb2xlX211dGV4X2xvY2soKTtcbiBcdGlmIChudC1cdTAwM2VzdGF0ZSA9PSBTVEFURV9FTkFCTEVEKSB7XG5AQCAtMTI0NywxMCArMTI1NSw4IEBAIHN0YXRpYyBzc2l6ZV90IHJlbW90ZV9pcF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZixcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuIFxuLVx0aXB2NiA9IG5ldHBvbGxfcGFyc2VfaXBfYWRkcihidWYsIFx1MDAyNm50LVx1MDAzZXJlbW90ZV9pcCk7XG4tXHRpZiAoaXB2NiA9PSAtMSlcbitcdGlmIChuZXRwb2xsX3BhcnNlX2lwX2FkZHIoYnVmLCBcdTAwMjZudC1cdTAwM2VyZW1vdGVfaXApIFx1MDAzYyAwKVxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4tXHRudC1cdTAwM2VpcHY2ID0gISFpcHY2O1xuIFxuIFx0cmV0ID0gY291bnQ7XG4gb3V0X3VubG9jazpcbkBAIC0yMDYxLDcgKzIwNjcsNyBAQCBzdGF0aWMgdm9pZCBuZXRwb2xsX3VkcF9jaGVja3N1bShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuIFxuIFx0LyogY2hlY2sgbmVlZHMgdG8gYmUgc2V0LCBzaW5jZSBpdCB3aWxsIGJlIGNvbnN1bWVkIGluIGNzdW1fcGFydGlhbCAqL1xuIFx0dWRwaC1cdTAwM2VjaGVjayA9IDA7XG4tXHRpZiAobnQtXHUwMDNlaXB2NilcbitcdGlmIChudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxuIFx0XHR1ZHBoLVx1MDAzZWNoZWNrID0gY3N1bV9pcHY2X21hZ2ljKFx1MDAyNm50LVx1MDAzZWxvY2FsX2lwLmluNixcbiBcdFx0XHRcdFx0ICAgICAgXHUwMDI2bnQtXHUwMDNlcmVtb3RlX2lwLmluNixcbiBcdFx0XHRcdFx0ICAgICAgdWRwX2xlbiwgSVBQUk9UT19VRFAsXG5AQCAtMjEwMiw3ICsyMTA4LDcgQEAgc3RhdGljIHZvaWQgcHVzaF9ldGgoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7XG4gXHRldGhlcl9hZGRyX2NvcHkoZXRoLVx1MDAzZWhfc291cmNlLCBucC1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIpO1xuIFx0ZXRoZXJfYWRkcl9jb3B5KGV0aC1cdTAwM2VoX2Rlc3QsIG50LVx1MDAzZXJlbW90ZV9tYWMpO1xuLVx0aWYgKG50LVx1MDAzZWlwdjYpXG4rXHRpZiAobnQtXHUwMDNlcmVtb3RlX2lwLmZhbWlseSA9PSBBRl9JTkVUNilcbiBcdFx0ZXRoLVx1MDAzZWhfcHJvdG8gPSBodG9ucyhFVEhfUF9JUFY2KTtcbiBcdGVsc2VcbiBcdFx0ZXRoLVx1MDAzZWhfcHJvdG8gPSBodG9ucyhFVEhfUF9JUCk7XG5AQCAtMjE3MSw3ICsyMTc3LDcgQEAgc3RhdGljIGludCBuZXRwb2xsX3NlbmRfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNvbnN0IGNoYXIgKm1zZyxcbiBcdFx0V0FSTl9PTl9PTkNFKCFpcnFzX2Rpc2FibGVkKCkpO1xuIFxuIFx0dWRwX2xlbiA9IGxlbiArIHNpemVvZihzdHJ1Y3QgdWRwaGRyKTtcbi1cdGlmIChudC1cdTAwM2VpcHY2KVxuK1x0aWYgKG50LVx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXG4gXHRcdGlwX2xlbiA9IHVkcF9sZW4gKyBzaXplb2Yoc3RydWN0IGlwdjZoZHIpO1xuIFx0ZWxzZVxuIFx0XHRpcF9sZW4gPSB1ZHBfbGVuICsgc2l6ZW9mKHN0cnVjdCBpcGhkcik7XG5AQCAtMjE4Nyw3ICsyMTkzLDcgQEAgc3RhdGljIGludCBuZXRwb2xsX3NlbmRfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNvbnN0IGNoYXIgKm1zZyxcbiBcdHNrYl9wdXQoc2tiLCBsZW4pO1xuIFxuIFx0cHVzaF91ZHAobnQsIHNrYiwgbGVuKTtcbi1cdGlmIChudC1cdTAwM2VpcHY2KVxuK1x0aWYgKG50LVx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXG4gXHRcdHB1c2hfaXB2NihudCwgc2tiLCBsZW4pO1xuIFx0ZWxzZVxuIFx0XHRwdXNoX2lwdjQobnQsIHNrYiwgbGVuKTtcbkBAIC0yNTA3LDEwICsyNTEzLDggQEAgX19yZWxlYXNlcyhcdTAwMjZ0YXJnZXRfbGlzdF9sb2NrKVxuIHN0YXRpYyBpbnQgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjaGFyICpvcHQpXG4ge1xuIFx0c3RydWN0IG5ldHBvbGwgKm5wID0gXHUwMDI2bnQtXHUwMDNlbnA7XG4tXHRib29sIGlwdmVyc2lvbl9zZXQgPSBmYWxzZTtcbiBcdGNoYXIgKmN1ciA9IG9wdDtcbiBcdGNoYXIgKmRlbGltO1xuLVx0aW50IGlwdjY7XG4gXG4gXHRpZiAoKmN1ciAhPSAnQCcpIHtcbiBcdFx0ZGVsaW0gPSBzdHJjaHIoY3VyLCAnQCcpO1xuQEAgLTI1MjQsMTYgKzI1MjgsMTIgQEAgc3RhdGljIGludCBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNoYXIgKm9wdClcbiBcdGN1cisrO1xuIFxuIFx0aWYgKCpjdXIgIT0gJy8nKSB7XG4tXHRcdGlwdmVyc2lvbl9zZXQgPSB0cnVlO1xuIFx0XHRkZWxpbSA9IHN0cmNocihjdXIsICcvJyk7XG4gXHRcdGlmICghZGVsaW0pXG4gXHRcdFx0Z290byBwYXJzZV9mYWlsZWQ7XG4gXHRcdCpkZWxpbSA9IDA7XG4tXHRcdGlwdjYgPSBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY3VyLCBcdTAwMjZudC1cdTAwM2Vsb2NhbF9pcCk7XG4tXHRcdGlmIChpcHY2IFx1MDAzYyAwKVxuK1x0XHRpZiAobmV0cG9sbF9wYXJzZV9pcF9hZGRyKGN1ciwgXHUwMDI2bnQtXHUwMDNlbG9jYWxfaXApIFx1MDAzYyAwKVxuIFx0XHRcdGdvdG8gcGFyc2VfZmFpbGVkO1xuLVx0XHRlbHNlXG4tXHRcdFx0bnQtXHUwMDNlaXB2NiA9IChib29sKWlwdjY7XG4gXHRcdGN1ciA9IGRlbGltO1xuIFx0fVxuIFx0Y3VyKys7XG5AQCAtMjU3NSwxMyArMjU3NSwxMSBAQCBzdGF0aWMgaW50IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY2hhciAqb3B0KVxuIFx0aWYgKCFkZWxpbSlcbiBcdFx0Z290byBwYXJzZV9mYWlsZWQ7XG4gXHQqZGVsaW0gPSAwO1xuLVx0aXB2NiA9IG5ldHBvbGxfcGFyc2VfaXBfYWRkcihjdXIsIFx1MDAyNm50LVx1MDAzZXJlbW90ZV9pcCk7XG4tXHRpZiAoaXB2NiBcdTAwM2MgMClcbitcdGlmIChuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY3VyLCBcdTAwMjZudC1cdTAwM2VyZW1vdGVfaXApIFx1MDAzYyAwKVxuIFx0XHRnb3RvIHBhcnNlX2ZhaWxlZDtcbi1cdGVsc2UgaWYgKGlwdmVyc2lvbl9zZXQgXHUwMDI2XHUwMDI2IG50LVx1MDAzZWlwdjYgIT0gKGJvb2wpaXB2NilcbitcdGlmIChudC1cdTAwM2Vsb2NhbF9pcC5mYW1pbHkgIT0gQUZfVU5TUEVDIFx1MDAyNlx1MDAyNlxuK1x0ICAgIG50LVx1MDAzZWxvY2FsX2lwLmZhbWlseSAhPSBudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5KVxuIFx0XHRnb3RvIHBhcnNlX2ZhaWxlZDtcbi1cdGVsc2Vcbi1cdFx0bnQtXHUwMDNlaXB2NiA9IChib29sKWlwdjY7XG4gXHRjdXIgPSBkZWxpbSArIDE7XG4gXG4gXHRpZiAoKmN1ciAhPSAwKSB7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRwb2xsLmggYi9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaFxuaW5kZXggMWM2YjFlZWM1ZWZkNi4uZWMwODIxYTViMDJkYiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbmV0cG9sbC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaFxuQEAgLTE2LDExICsxNiw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VkcC5oXHUwMDNlXG4gXG4tdW5pb24gaW5ldF9hZGRyIHtcbi1cdF9fYmUzMlx0XHRpcDtcbi1cdHN0cnVjdCBpbjZfYWRkclx0aW42O1xuLX07XG4tXG4gc3RydWN0IG5ldHBvbGwge1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcbiBcdG5ldGRldmljZV90cmFja2VyIGRldl90cmFja2VyO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6NDA6NTIuNjg5MjU3OFoiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODc4NDEzOTkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlZmFjdG9yaW5nIE5ldGNvbnNvbGUgZm9yIElQdjYgRmxleGliaWxpdHkqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFpbWVkIGF0IGltcHJvdmluZyB0aGUgSVB2NiBzdXBwb3J0IHdpdGhpbiB0aGUgbmV0Y29uc29sZSBkcml2ZXIuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IGl0J3MgYSBwcmV0dHkgdGFyZ2V0ZWQgcmVmYWN0b3IsIGZvY3VzaW5nIG9uIGEgbW9yZSBmbGV4aWJsZSB3YXkgdG8gaGFuZGxlIElQIGFkZHJlc3Nlcy4gSXQgbG9va3MgbGlrZSB0aGUgbWFpbiB0aHJ1c3QgaXMgdG8gbW92ZSBhd2F5IGZyb20gdGhlIHNpbXBsZSBgaXB2NmAgYm9vbGVhbiBmbGFnIGFuZCB0aGUgYHVuaW9uIGluZXRfYWRkcmAg4oCTIHdoaWNoIGZlZWxzIGEgYml0IGxpbWl0aW5nIOKAkyBhbmQgaW50byBhIG1vcmUgcm9idXN0IGBzdHJ1Y3QgaW5ldF9hZGRyYC4gVGhpcyBuZXcgc3RydWN0dXJlIGNsZXZlcmx5IGJ1bmRsZXMgdGhlIGFkZHJlc3MgZmFtaWx5IChgdTggZmFtaWx5YCkgd2l0aCB0aGUgdW5pb24gY29udGFpbmluZyB0aGUgYWN0dWFsIElQIGFkZHJlc3NlcyAoYm90aCBJUHY0IGFuZCBJUHY2KS5cblxuVGhlIGltcGxpY2F0aW9ucyBhcmUgY2xlYXI6IHRoZSBgaXB2NmAgZmllbGQgd2l0aGluIGBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXRgIGlzIGJlaW5nIHJldGlyZWQsIGFuZCBhbGwgdGhlIHBhcnNpbmcgYW5kIHNldHVwIGNvZGUgYXJlIGJlaW5nIHVwZGF0ZWQgdG8gbGV2ZXJhZ2UgdGhlIGBmYW1pbHlgIGZpZWxkIGluc3RlYWQuIFRoYXTigJlzIHRoZSByaWdodCB3YXkgdG8gYXBwcm9hY2ggaXQuIFdlJ3JlIGFsc28gc2VlaW5nIHRoZSBhZGRpdGlvbiBvZiBzb21lIGNydWNpYWwgY2hlY2tzIHRvIHZhbGlkYXRlIHRoYXQgYm90aCB0aGUgcmVtb3RlIElQIGlzIGRlZmluZWQgYW5kIHRoYXQgYm90aCB0aGUgbG9jYWwgYW5kIHJlbW90ZSBJUHMgYmVsb25nIHRvIHRoZSBzYW1lIGFkZHJlc3MgZmFtaWx5LiBNYWtlcyBzZW5zZSDigJMgY29uc2lzdGVuY3kgaXMga2V5LCBlc3BlY2lhbGx5IGluIG5ldHdvcmsgY29uZmlndXJhdGlvbnMuXG5cblNvLCB0aGUgYHN0cnVjdCBpbmV0X2FkZHJgIGlzIGRpcmVjdGx5IGVtYmVkZGVkIHdpdGhpbiB0aGUgYHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldGAgaXRzZWxmLCBhcyB0aGUgYGxvY2FsX2lwYCBhbmQgYHJlbW90ZV9pcGAgbWVtYmVycy4gTm93LCBsZXQncyBqdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXNlIHN0cnVjdHMgYXJlIGJlaW5nIGFsbG9jYXRlZCBwcm9wZXJseS4gSeKAmWxsIHF1aWNrbHkgY2hlY2sgaG93IGBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXRgIGlzIGluc3RhbnRpYXRlZCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYGFsbG9jX3BhcmFtX3RhcmdldGAgYW5kIGBtYWtlX25ldGNvbnNvbGVfdGFyZ2V0YCBmdW5jdGlvbnMuIEp1c3Qgd2FudCB0byBjb25maXJtIHRoYXQgdGhlcmUgaXNu4oCZdCBhbnkgb2J2aW91cyBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZS4gSSdsbCBuZWVkIHRvIHJ1biBhIGBncmVwYCBmb3IgYGFsbG9jX3BhcmFtX3RhcmdldGAgYW5kIGBtYWtlX25ldGNvbnNvbGVfdGFyZ2V0YCB0byBjb25maXJtLiBJdCBpcyBwb3NzaWJsZSB0aGV5IHVzZSBga3phbGxvY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0MjYsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTo0MDo1OC41Njc2NzUxNzNaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MTI0MzA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFsbG9jX3BhcmFtX3RhcmdldHxtYWtlX25ldGNvbnNvbGVfdGFyZ2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTcxNj1zdGF0aWMgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpmaW5kX2NtZGxpbmVfdGFyZ2V0KGNvbnN0IGNoYXIgKm5hbWUpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTczNi1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTczNzpzdGF0aWMgc3RydWN0IGNvbmZpZ19ncm91cCAqbWFrZV9uZXRjb25zb2xlX3RhcmdldChzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTczOC1cXHRcXHRcXHRcXHRcXHRcXHQgICBjb25zdCBjaGFyICpuYW1lKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTE4MjM9c3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdmc19ncm91cF9vcGVyYXRpb25zIG5ldGNvbnNvbGVfc3Vic3lzX2dyb3VwX29wcyA9IHtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTgyNDpcXHQubWFrZV9ncm91cFxcdD0gbWFrZV9uZXRjb25zb2xlX3RhcmdldCxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTgyNS1cXHQuZHJvcF9pdGVtXFx0PSBkcm9wX25ldGNvbnNvbGVfdGFyZ2V0LFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI1MTM9c3RhdGljIGludCBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNoYXIgKm9wdClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjAwLS8qIEFsbG9jYXRlIG5ldyB0YXJnZXQgKGZyb20gYm9vdC9tb2R1bGUgcGFyYW0pIGFuZCBzZXR1cCBuZXRwb2xsIGZvciBpdCAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNjAxOnN0YXRpYyBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKmFsbG9jX3BhcmFtX3RhcmdldChjaGFyICp0YXJnZXRfY29uZmlnLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjAyLVxcdFxcdFxcdFxcdFxcdFxcdCAgICBpbnQgY21kbGluZV9jb3VudClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yNjkzPXN0YXRpYyBpbnQgX19pbml0IGluaXRfbmV0Y29uc29sZSh2b2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI3MDQtXFx0XFx0d2hpbGUgKCh0YXJnZXRfY29uZmlnID0gc3Ryc2VwKFxcdTAwMjZpbnB1dCwgXFxcIjtcXFwiKSkpIHtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjcwNTpcXHRcXHRcXHRudCA9IGFsbG9jX3BhcmFtX3RhcmdldCh0YXJnZXRfY29uZmlnLCBjb3VudCk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI3MDYtXFx0XFx0XFx0aWYgKElTX0VSUihudCkpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6NDA6NTguNjEyODA2NTc5WiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMTUxNzMzNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIFRhcmdldCBBbGxvY2F0aW9uIGFuZCBOZXRjb25zb2xlIENyZWF0aW9uKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCBob3cgdGhlc2UgdGFyZ2V0cyBhcmUgYmVpbmcgc2V0IHVwLiBGaXJzdCwgSSdtIGdvaW5nIHRvIGRpZyBpbnRvIHRoZSBgYWxsb2NfcGFyYW1fdGFyZ2V0YCBpbXBsZW1lbnRhdGlvbi4gSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IGl0J3MgZGVjaWRpbmcgd2hpY2ggcmVzb3VyY2VzIHRvIGFsbG9jYXRlIGFuZCB3aGF0IHBhcmFtZXRlcnMgaXQncyBjb25zaWRlcmluZy4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBhbnkgcG90ZW50aWFsIGVkZ2UgY2FzZXMgb3Igb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMgdGhlcmUsIGdpdmVuIG15IGV4cGVyaWVuY2Ugd2l0aCBzaW1pbGFyIHJlc291cmNlIGFsbG9jYXRpb24gc2NoZW1lcy4gVGhlbiwgSeKAmWxsIGltbWVkaWF0ZWx5IGNvbnRyYXN0IHRoYXQgd2l0aCBhIHJldmlldyBvZiBgbWFrZV9uZXRjb25zb2xlX3RhcmdldGAuIEknbSBjdXJpb3VzIGhvdyBpdHMgc3BlY2lmaWMgYXBwcm9hY2ggdG8gbmV0d29yayBjb25zb2xlIHRhcmdldHMgZGlmZmVycy4gV2hhdCBhcmUgaXRzIGRlcGVuZGVuY2llcz8gV2hhdCBlcnJvciBjb25kaXRpb25zIG1pZ2h0IGFyaXNlPyBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNsZXZlcm5lc3MsIGFuZCBwb3RlbnRpYWwgaW5lZmZpY2llbmNpZXMuIEtub3dpbmcgYm90aCB0aGVzZSBpbXBsZW1lbnRhdGlvbnMgdGhvcm91Z2hseSB3aWxsIGdpdmUgbWUgYSBzb2xpZCBiYXNlIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgdGFyZ2V0cyBpbiBnZW5lcmFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTQzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6NDE6MDEuOTI3OTgzNTcxWiIsIlNlcSI6NDYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTU3ODQyNSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3phbGxvYy4qbmV0Y29uc29sZV90YXJnZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTo0MTowMS45NzM1NzIxNjZaIiwiU2VxIjo0NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzExNDk1ODI5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OlxuXG4qKkNoZWNraW5nIGBudGAgQWxsb2NhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBUaGUgZmlyc3QgdGhpbmcgSSdtIHRoaW5raW5nIGlzLCBsZXQncyBwaW5wb2ludCBleGFjdGx5IGhvdyBgbnRgIGlzIGJlaW5nIGFsbG9jYXRlZCBpbiB0aGUgZmlyc3QgcGxhY2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBsaWZlY3ljbGUuIFdoZXJlIGFuZCB3aGVuIGlzIHRoaXMgdmFyaWFibGUgYnJvdWdodCBpbnRvIGV4aXN0ZW5jZT8gSXMgaXQgYSBzdGF0aWNhbGx5IGFsbG9jYXRlZCB2YXJpYWJsZSwgcGVyaGFwcyBhIGdsb2JhbCBvciB3aXRoaW4gYSBzcGVjaWZpYyBzY29wZT8gT3IsIGlzIGl0IGR5bmFtaWNhbGx5IGFsbG9jYXRlZCwgbWF5YmUgdGhyb3VnaCBgbWFsbG9jYCBvciBhIHNpbWlsYXIgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb24/IFRoZSBhbGxvY2F0aW9uIG1ldGhvZCB3aWxsIGZ1bmRhbWVudGFsbHkgaW5mbHVlbmNlIGV2ZXJ5dGhpbmcgdGhhdCBmb2xsb3dzLiBJIG5lZWQgdG8ga25vdyB0aGlzIHRvIHRyYWNrIHRoZSBpbXBsaWNhdGlvbnMuIFRoaXMgaW5mb3JtYXRpb24gd2lsbCBpbmZvcm0gc28gbXVjaCBhYm91dCBpdHMgbGlmZXRpbWUsIGhvdyBpdCdzIHVzZWQsIGFuZCBwb3RlbnRpYWwgcHJvYmxlbXMuIEtub3dpbmcgdGhlIGFsbG9jYXRpb24gdHlwZSB3aWxsIGdpdmUgbWUgaW1wb3J0YW50IGNsdWVzIGFib3V0IGl0cyBjaGFyYWN0ZXJpc3RpY3MgYW5kIGNvbnN0cmFpbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODExLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6NDE6MDUuMDg4NTMyOTc5WiIsIlNlcSI6NDgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzA2NzYwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJremFsbG9jXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9NjU3PXN0YXRpYyBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKmFsbG9jX2FuZF9pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNjYwLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo2NjE6XFx0bnQgPSBremFsbG9jX29iaigqbnQpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy02NjItXFx0aWYgKCFudClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xNjAxPXN0YXRpYyBzdHJ1Y3QgY29uZmlnX2l0ZW0gKnVzZXJkYXR1bV9tYWtlX2l0ZW0oc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXAsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTYxNS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTYxNjpcXHR1ZG0gPSBremFsbG9jX29iaigqdWRtKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTYxNy1cXHRpZiAoIXVkbSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6NDE6MDUuMTMxNjA0Nzc1WiIsIlNlcSI6NDksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0NzI5ODk3MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgQWxsb2NhdGlvbiBhbmQgRGF0YSBTdHJ1Y3R1cmVzKipcblxuT2theSwgc28gYGt6YWxsb2Nfb2JqYCBpcyBiZWluZyB1c2VkIGhlcmUsIHdoaWNoIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoZSBgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0YCBpcyB6ZXJvLWluaXRpYWxpemVkLiBHb29kLCBnb29kLiBUaGF0IG1lYW5zIHRoZSBgaW5ldF9hZGRyYCBmaWVsZHMgd2l0aGluIHdpbGwgc3RhcnQgYXQgemVybywgc3BlY2lmaWNhbGx5IHRoZSBgZmFtaWx5YCBmaWVsZCB3aWxsIGJlIHplcm8sIGNvcnJlc3BvbmRpbmcgdG8gYEFGX1VOU1BFQ2AuXG5cblRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIGBzdHJ1Y3QgaW5ldF9hZGRyYCwgd2hpY2ggaXMgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZDogYSBgdTggZmFtaWx5YCBhbmQgYSB1bmlvbiBmb3IgSVB2NCBhbmQgSVB2NiBhZGRyZXNzZXMuIFRoZSB1bmlvbidzIHNpemUgaXMsIG9mIGNvdXJzZSwgMTYgYnl0ZXMuIENvbnNpZGVyaW5nIHRoZSBwYWRkaW5nLCB0aGUgb3ZlcmFsbCBzaXplIG9mIGBpbmV0X2FkZHJgIGxvb2tzIGxpa2UgaXQnbGwgYmUgMjAgYnl0ZXMuIE5vdywgdGhlIGtleSBxdWVzdGlvbiBhcmlzZXM6IGlzIHRoaXMgc3RydWN0IGV2ZXIgY29waWVkIHRvIHVzZXJzcGFjZT8gVGhhdCdzIHdoYXQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQuIEFueSBwb3RlbnRpYWwgZXhwb3N1cmUgdGhlcmUgaXMgd2hhdCBJIGhhdmUgdG8gYmUgbW9zdCBjb25jZXJuZWQgYWJvdXQuXG5cbkxldCdzIHNlZS4gVGhlIHBhdGNoIG1vZGlmaWVzIGBsb2NhbF9pcF9zaG93YCBhbmQgYHJlbW90ZV9pcF9zaG93YCwgYm90aCBvZiB3aGljaCB1c2UgYHN5c2ZzX2VtaXRgLiBPa2F5LCB0aGF0J3Mgbm90IGEgZGlyZWN0IGNvcHk7IGl0J3MganVzdCBmb3JtYXR0aW5nIHRoZSBJUCBhZGRyZXNzIHRvIGEgc3RyaW5nLiBUaGF0J3MgYSByZWxpZWYuIEJ1dCB0aGF0IGRvZXNuJ3QgbWVhbiBpdCdzIGVudGlyZWx5IHNhZmUuIEkgc2hvdWxkIGNoZWNrIG90aGVyIHBvc3NpYmxlIHVzZXMgb2YgYHN0cnVjdCBpbmV0X2FkZHJgLiBHb3R0YSBiZSB0aG9yb3VnaCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MjIxLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjQxOjEwLjYwNDU5ODIzWiIsIlNlcSI6NTAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDQ0NTgxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbmV0X2FkZHJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xNDg9ZW51bSB0YXJnZXRfc3RhdGUge1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE1My1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTU0OnN0cnVjdCBpbmV0X2FkZHIge1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNTUtXFx0LyogQWRkcmVzcyBmYW1pbHk6IEFGX1VOU1BFQyB3aGVuIHVuc2V0LCBlbHNlIEFGX0lORVQgb3IgQUZfSU5FVDYgKi9cXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yMDQ9c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0IHtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjItXFx0c3RydWN0IG5ldHBvbGxcXHRcXHRucDtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjIzOlxcdHN0cnVjdCBpbmV0X2FkZHJcXHRsb2NhbF9pcCwgcmVtb3RlX2lwO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjQtXFx0dTE2XFx0XFx0XFx0bG9jYWxfcG9ydCwgcmVtb3RlX3BvcnQ7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9NzEyPXN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfcHJpbnRfYmFubmVyKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNzM0LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo3MzU6LyogUGFyc2UgdGhlIHN0cmluZyBhbmQgcG9wdWxhdGUgdGhlIGBpbmV0X2FkZHJgIHN0cnVjdC4gUmV0dXJuIDAgb24gc3VjY2Vzc1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy03MzYtICogYW5kIC0xIHVwb24gZmFpbHVyZS5cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNzM3LSAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo3Mzg6c3RhdGljIGludCBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY29uc3QgY2hhciAqc3RyLCBzdHJ1Y3QgaW5ldF9hZGRyICphZGRyKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy03Mzkte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTo0MToxMC42NDkwNDkyMzZaIiwiU2VxIjo1MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU2MTQ0NzA1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnRlcm5hbCBTdHJ1Y3R1cmUgQ29uc29saWRhdGlvbiBpbiBOZXRjb25zb2xlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBuZXcgc3RydWN0IGFuZCBpdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIOKAkyBpdCdzIGp1c3QgYmVpbmcgdXNlZCAqaW50ZXJuYWxseSogd2l0aGluIGBuZXRjb25zb2xlLmNgLiBJdCBsb29rcyBsaWtlIGl0J3MgYSByZXBsYWNlbWVudCBmb3IgdGhhdCBvbGQgYHVuaW9uIGluZXRfYWRkcmAgdGhhdCB3YXMgZmxvYXRpbmcgYXJvdW5kIGluIGBpbmNsdWRlL2xpbnV4L25ldHBvbGwuaGAgYnV0IHdhcyBldmVudHVhbGx5IHJlbW92ZWQuIE15IGZpcnN0IHRob3VnaHQgaXMgXCJ0aGF0J3MgY29udmVuaWVudCwgY2xlYW5zIHRoaW5ncyB1cCBhIGJpdFwiLlxuXG5Ob3csIHRoZSByZWFsIHF1ZXN0aW9uIGlzLCB3YXMgdGhhdCBgdW5pb24gaW5ldF9hZGRyYCB0cnVseSAqb25seSogdXRpbGl6ZWQgd2l0aGluIGBuZXRjb25zb2xlLmNgPyBJdCdzIGVhc3kgdG8gYXNzdW1lLCBidXQgSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4gVGhlcmUncyBhbHdheXMgdGhlIGNoYW5jZSB0aGF0IHNvbWV0aGluZyBnb3QgbWlzc2VkIGR1cmluZyB0aGUgcmVmYWN0b3Jpbmcgb3IgcmVtb3ZhbCBwcm9jZXNzLCBhbmQgdGhhdCdzIHRoZSBraW5kIG9mIHRoaW5nIHRoYXQgY2FuIHF1aWV0bHkgaW50cm9kdWNlIGJ1Z3MgZG93biB0aGUgbGluZS4gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgY29kZWJhc2UgdG8gYmUgc3VyZSB3ZSBkaWRuJ3Qgb3JwaGFuIGFueSBkZXBlbmRlbmNpZXMuIExldCdzIGRpZyBpbiBhbmQgbWFrZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTc4LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6NDE6MTQuMjEwNDk5MTAyWiIsIlNlcSI6NTIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzU0MTg3MTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImluZXRfYWRkclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAyMDk3IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTQ4PWVudW0gdGFyZ2V0X3N0YXRlIHtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNTMtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE1NDpzdHJ1Y3QgaW5ldF9hZGRyIHtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTU1LVxcdC8qIEFkZHJlc3MgZmFtaWx5OiBBRl9VTlNQRUMgd2hlbiB1bnNldCwgZWxzZSBBRl9JTkVUIG9yIEFGX0lORVQ2ICovXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjA0PXN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCB7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIyLVxcdHN0cnVjdCBuZXRwb2xsXFx0XFx0bnA7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIyMzpcXHRzdHJ1Y3QgaW5ldF9hZGRyXFx0bG9jYWxfaXAsIHJlbW90ZV9pcDtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjI0LVxcdHUxNlxcdFxcdFxcdGxvY2FsX3BvcnQsIHJlbW90ZV9wb3J0O1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTcxMj1zdGF0aWMgdm9pZCBuZXRjb25zb2xlX3ByaW50X2Jhbm5lcihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTczNC1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NzM1Oi8qIFBhcnNlIHRoZSBzdHJpbmcgYW5kIHBvcHVsYXRlIHRoZSBgaW5ldF9hZGRyYCBzdHJ1Y3QuIFJldHVybiAwIG9uIHN1Y2Nlc3NcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNzM2LSAqIGFuZCAtMSB1cG9uIGZhaWx1cmUuXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTczNy0gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NzM4OnN0YXRpYyBpbnQgbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGNvbnN0IGNoYXIgKnN0ciwgc3RydWN0IGluZXRfYWRkciAqYWRkcilcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNzM5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9zZWxmdGVzdC9hbGxvd2VkaXBzLmM9ODI9c3RydWN0IGhvcnJpYmxlX2FsbG93ZWRpcHNfbm9kZSB7XFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NlbGZ0ZXN0L2FsbG93ZWRpcHMuYy04My1cXHRzdHJ1Y3QgaGxpc3Rfbm9kZSB0YWJsZTtcXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VsZnRlc3QvYWxsb3dlZGlwcy5jOjg0OlxcdHVuaW9uIG5mX2luZXRfYWRkciBpcDtcXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VsZnRlc3QvYWxsb3dlZGlwcy5jOjg1OlxcdHVuaW9uIG5mX2luZXRfYWRkciBtYXNrO1xcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9zZWxmdGVzdC9hbGxvd2VkaXBzLmMtODYtXFx0dTggaXBfdmVyc2lvbjtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9zZWxmdGVzdC9hbGxvd2VkaXBzLmM9OTU9c3RhdGljIF9faW5pdCB2b2lkIGhvcnJpYmxlX2FsbG93ZWRpcHNfZnJlZShzdHJ1Y3QgaG9ycmlibGVfYWxsb3dlZGlwcyAqdGFibGUpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VsZnRlc3QvYWxsb3dlZGlwcy5jLTEwNS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VsZnRlc3QvYWxsb3dlZGlwcy5jOjEwNjpzdGF0aWMgX19pbml0IGlubGluZSB1bmlvbiBuZl9pbmV0X2FkZHIgaG9ycmlibGVfY2lkcl90b19tYXNrKHU4IGNpZHIpXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NlbGZ0ZXN0L2FsbG93ZWRpcHMuYy0xMDcte1xcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9zZWxmdGVzdC9hbGxvd2VkaXBzLmM6MTA4OlxcdHVuaW9uIG5mX2luZXRfYWRkciBtYXNrO1xcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9zZWxmdGVzdC9hbGxvd2VkaXBzLmMtMTA5LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NlbGZ0ZXN0L2FsbG93ZWRpcHMuYy0xMTctXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NlbGZ0ZXN0L2FsbG93ZWRpcHMuYzoxMTg6c3RhdGljIF9faW5pdCBpbmxpbmUgdTggaG9ycmlibGVfbWFza190b19jaWRyKHVuaW9uIG5mX2luZXRfYWRkciBzdWJuZXQpXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NlbGZ0ZXN0L2FsbG93ZWRpcHMuYy0xMTkte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NlbGZ0ZXN0L2FsbG93ZWRpcHMuYz0xNTM9aG9ycmlibGVfaW5zZXJ0X29yZGVyZWQoc3RydWN0IGhvcnJpYmxlX2FsbG93ZWRpcHMgKnRhYmxlLCBzdHJ1Y3QgaG9ycmlibGVfYWxsb3dlZGlwc19ub2RlICpub2RlKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NlbGZ0ZXN0L2FsbG93ZWRpcHMuYy0xNTktXFx0XFx0aWYgKG90aGVyLVxcdTAwM2VpcF92ZXJzaW9uID09IG5vZGUtXFx1MDAzZWlwX3ZlcnNpb24gXFx1MDAyNlxcdTAwMjZcXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VsZnRlc3QvYWxsb3dlZGlwcy5jOjE2MDpcXHRcXHQgICAgIW1lbWNtcChcXHUwMDI2b3RoZXItXFx1MDAzZW1hc2ssIFxcdTAwMjZub2RlLVxcdTAwM2VtYXNrLCBzaXplb2YodW5pb24gbmZfaW5ldF9hZGRyKSkgXFx1MDAyNlxcdTAwMjZcXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VsZnRlc3QvYWxsb3dlZGlwcy5jOjE2MTpcXHRcXHQgICAgIW1lbWNtcChcXHUwMDI2b3RoZXItXFx1MDAzZWlwLCBcXHUwMDI2bm9kZS1cXHUwMDNlaXAsIHNpemVvZih1bmlvbiBuZl9pbmV0X2FkZHIpKSkge1xcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9zZWxmdGVzdC9hbGxvd2VkaXBzLmMtMTYyLVxcdFxcdFxcdG90aGVyLVxcdTAwM2V2YWx1ZSA9IG5vZGUtXFx1MDAzZXZhbHVlO1xcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC9yZG1hLmM9MjAwMT1zdGF0aWMgdm9pZCBudm1ldF9yZG1hX2Rpc2NfcG9ydF9hZGRyKHN0cnVjdCBudm1ldF9yZXEgKnJlcSxcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvcmRtYS5jLTIwMDYtXFxuZHJpdmVycy9udm1lL3RhcmdldC9yZG1hLmM6MjAwNzpcXHRpZiAoaW5ldF9hZGRyX2lzX2FueShcXHUwMDI2Y21faWQtXFx1MDAzZXJvdXRlLmFkZHIuc3JjX2FkZHIpKSB7XFxuZHJpdmVycy9udm1lL3RhcmdldC9yZG1hLmMtMjAwOC1cXHRcXHRzdHJ1Y3QgbnZtZXRfcmRtYV9yc3AgKnJzcCA9XFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jPTIyMDI9c3RhdGljIHZvaWQgbnZtZXRfdGNwX2Rpc2NfcG9ydF9hZGRyKHN0cnVjdCBudm1ldF9yZXEgKnJlcSxcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtMjIwNi1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jOjIyMDc6XFx0aWYgKGluZXRfYWRkcl9pc19hbnkoXFx1MDAyNnBvcnQtXFx1MDAzZWFkZHIpKSB7XFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy0yMjA4LVxcdFxcdHN0cnVjdCBudm1ldF90Y3BfY21kICpjbWQgPVxcbi0tXFxuZHJpdmVycy90YXJnZXQvaXNjc2kvaXNjc2lfdGFyZ2V0LmM9MzMzNj1pc2NzaXRfYnVpbGRfc2VuZHRhcmdldHNfcmVzcG9uc2Uoc3RydWN0IGlzY3NpdF9jbWQgKmNtZCxcXG4tLVxcbmRyaXZlcnMvdGFyZ2V0L2lzY3NpL2lzY3NpX3RhcmdldC5jLTM0MzgtXFxuZHJpdmVycy90YXJnZXQvaXNjc2kvaXNjc2lfdGFyZ2V0LmM6MzQzOTpcXHRcXHRcXHRcXHRpZiAoaW5ldF9hZGRyX2lzX2FueShcXHUwMDI2bnAtXFx1MDAzZW5wX3NvY2thZGRyKSlcXG5kcml2ZXJzL3RhcmdldC9pc2NzaS9pc2NzaV90YXJnZXQuYy0zNDQwLVxcdFxcdFxcdFxcdFxcdHNvY2thZGRyID0gXFx1MDAyNmNvbm4tXFx1MDAzZWxvY2FsX3NvY2thZGRyO1xcbi0tXFxuZnMvc21iL3NlcnZlci9jb25uZWN0aW9uLmM9MzA9c3RhdGljIGludCBwcm9jX3Nob3dfY2xpZW50cyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxuLS1cXG5mcy9zbWIvc2VydmVyL2Nvbm5lY3Rpb24uYy00NS0jaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5mcy9zbWIvc2VydmVyL2Nvbm5lY3Rpb24uYzo0NjpcXHRcXHRpZiAoIWNvbm4tXFx1MDAzZWluZXRfYWRkcilcXG5mcy9zbWIvc2VydmVyL2Nvbm5lY3Rpb24uYy00Ny1cXHRcXHRcXHRzZXFfcHJpbnRmKG0sIFxcXCIlLTIwcEk2Y1xcXCIsIFxcdTAwMjZjb25uLVxcdTAwM2VpbmV0Nl9hZGRyKTtcXG4tLVxcbmZzL3NtYi9zZXJ2ZXIvY29ubmVjdGlvbi5jLTQ5LSNlbmRpZlxcbmZzL3NtYi9zZXJ2ZXIvY29ubmVjdGlvbi5jOjUwOlxcdFxcdFxcdHNlcV9wcmludGYobSwgXFxcIiUtMjBwSTRcXFwiLCBcXHUwMDI2Y29ubi1cXHUwMDNlaW5ldF9hZGRyKTtcXG5mcy9zbWIvc2VydmVyL2Nvbm5lY3Rpb24uYy01MS1cXHRcXHRzZXFfcHJpbnRmKG0sIFxcXCIgICAweCUtMTB4ICUtMTB1ICUtMTJkICUtMTBkICVwdFRcXFxcblxcXCIsXFxuLS1cXG5mcy9zbWIvc2VydmVyL2Nvbm5lY3Rpb24uaD00NT1zdHJ1Y3Qga3NtYmRfY29ubiB7XFxuLS1cXG5mcy9zbWIvc2VydmVyL2Nvbm5lY3Rpb24uaC01NC1cXHR1bmlvbiB7XFxuZnMvc21iL3NlcnZlci9jb25uZWN0aW9uLmg6NTU6XFx0XFx0X19iZTMyXFx0XFx0XFx0aW5ldF9hZGRyO1xcbmZzL3NtYi9zZXJ2ZXIvY29ubmVjdGlvbi5oLTU2LSNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbi0tXFxuZnMvc21iL3NlcnZlci9tZ210L3VzZXJfc2Vzc2lvbi5jPTgxPXN0YXRpYyBpbnQgc2hvd19wcm9jX3Nlc3Npb24oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxcbi0tXFxuZnMvc21iL3NlcnZlci9tZ210L3VzZXJfc2Vzc2lvbi5jLTk2LSNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbmZzL3NtYi9zZXJ2ZXIvbWdtdC91c2VyX3Nlc3Npb24uYzo5NzpcXHRcXHRpZiAoY2hhbi1cXHUwMDNlY29ubi1cXHUwMDNlaW5ldF9hZGRyKVxcbmZzL3NtYi9zZXJ2ZXIvbWdtdC91c2VyX3Nlc3Npb24uYy05OC1cXHRcXHRcXHRzZXFfcHJpbnRmKG0sIFxcXCIlLTIwc1xcXFx0JXBJNFxcXFxuXFxcIiwgXFxcImNsaWVudFxcXCIsXFxuZnMvc21iL3NlcnZlci9tZ210L3VzZXJfc2Vzc2lvbi5jOjk5OlxcdFxcdFxcdFxcdFxcdFxcdTAwMjZjaGFuLVxcdTAwM2Vjb25uLVxcdTAwM2VpbmV0X2FkZHIpO1xcbmZzL3NtYi9zZXJ2ZXIvbWdtdC91c2VyX3Nlc3Npb24uYy0xMDAtXFx0XFx0ZWxzZVxcbi0tXFxuZnMvc21iL3NlcnZlci9tZ210L3VzZXJfc2Vzc2lvbi5jLTEwNC1cXHRcXHRzZXFfcHJpbnRmKG0sIFxcXCIlLTIwc1xcXFx0JXBJNFxcXFxuXFxcIiwgXFxcImNsaWVudFxcXCIsXFxuZnMvc21iL3NlcnZlci9tZ210L3VzZXJfc2Vzc2lvbi5jOjEwNTpcXHRcXHRcXHRcXHRcXHUwMDI2Y2hhbi1cXHUwMDNlY29ubi1cXHUwMDNlaW5ldF9hZGRyKTtcXG5mcy9zbWIvc2VydmVyL21nbXQvdXNlcl9zZXNzaW9uLmMtMTA2LSNlbmRpZlxcbi0tXFxuZnMvc21iL3NlcnZlci9tZ210L3VzZXJfc2Vzc2lvbi5jPTIwMD1zdGF0aWMgaW50IHNob3dfcHJvY19zZXNzaW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxuLS1cXG5mcy9zbWIvc2VydmVyL21nbXQvdXNlcl9zZXNzaW9uLmMtMjE3LSNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbmZzL3NtYi9zZXJ2ZXIvbWdtdC91c2VyX3Nlc3Npb24uYzoyMTg6XFx0XFx0XFx0aWYgKCFjaGFuLVxcdTAwM2Vjb25uLVxcdTAwM2VpbmV0X2FkZHIpXFxuZnMvc21iL3NlcnZlci9tZ210L3VzZXJfc2Vzc2lvbi5jLTIxOS1cXHRcXHRcXHRcXHRzZXFfcHJpbnRmKG0sIFxcXCIgJS00MHBJNmNcXFwiLCBcXHUwMDI2Y2hhbi1cXHUwMDNlY29ubi1cXHUwMDNlaW5ldDZfYWRkcik7XFxuLS1cXG5mcy9zbWIvc2VydmVyL21nbXQvdXNlcl9zZXNzaW9uLmMtMjIxLSNlbmRpZlxcbmZzL3NtYi9zZXJ2ZXIvbWdtdC91c2VyX3Nlc3Npb24uYzoyMjI6XFx0XFx0XFx0XFx0c2VxX3ByaW50ZihtLCBcXFwiICUtNDBwSTRcXFwiLCBcXHUwMDI2Y2hhbi1cXHUwMDNlY29ubi1cXHUwMDNlaW5ldF9hZGRyKTtcXG5mcy9zbWIvc2VydmVyL21nbXQvdXNlcl9zZXNzaW9uLmMtMjIzLVxcdFxcdFxcdHNlcV9wcmludGYobSwgXFxcIiAlLTE1cyAlLTEwbGx1ICUtMTBzXFxcXG5cXFwiLFxcbi0tXFxuZnMvc21iL3NlcnZlci90cmFuc3BvcnRfdGNwLmM9NTk9c3RhdGljIHN0cnVjdCB0Y3BfdHJhbnNwb3J0ICphbGxvY190cmFuc3BvcnQoc3RydWN0IHNvY2tldCAqY2xpZW50X3NrKVxcbi0tXFxuZnMvc21iL3NlcnZlci90cmFuc3BvcnRfdGNwLmMtNzktXFx0fSBlbHNlIHtcXG5mcy9zbWIvc2VydmVyL3RyYW5zcG9ydF90Y3AuYzo4MDpcXHRcXHRjb25uLVxcdTAwM2VpbmV0X2FkZHIgPSBpbmV0X3NrKGNsaWVudF9zay1cXHUwMDNlc2spLVxcdTAwM2VpbmV0X2RhZGRyO1xcbmZzL3NtYi9zZXJ2ZXIvdHJhbnNwb3J0X3RjcC5jLTgxLVxcdFxcdGNvbm4tXFx1MDAzZWluZXRfaGFzaCA9IGlwdjRfYWRkcl9oYXNoKGluZXRfc2soY2xpZW50X3NrLVxcdTAwM2VzayktXFx1MDAzZWluZXRfZGFkZHIpO1xcbi0tXFxuZnMvc21iL3NlcnZlci90cmFuc3BvcnRfdGNwLmMtODMtI2Vsc2VcXG5mcy9zbWIvc2VydmVyL3RyYW5zcG9ydF90Y3AuYzo4NDpcXHRjb25uLVxcdTAwM2VpbmV0X2FkZHIgPSBpbmV0X3NrKGNsaWVudF9zay1cXHUwMDNlc2spLVxcdTAwM2VpbmV0X2RhZGRyO1xcbmZzL3NtYi9zZXJ2ZXIvdHJhbnNwb3J0X3RjcC5jLTg1LVxcdGNvbm4tXFx1MDAzZWluZXRfaGFzaCA9IGlwdjRfYWRkcl9oYXNoKGluZXRfc2soY2xpZW50X3NrLVxcdTAwM2VzayktXFx1MDAzZWluZXRfZGFkZHIpO1xcbi0tXFxuZnMvc21iL3NlcnZlci90cmFuc3BvcnRfdGNwLmM9MTc3PXN0YXRpYyBpbnQga3NtYmRfdGNwX25ld19jb25uZWN0aW9uKHN0cnVjdCBzb2NrZXQgKmNsaWVudF9zaylcXG4tLVxcbmZzL3NtYi9zZXJ2ZXIvdHJhbnNwb3J0X3RjcC5jLTE5OC1cXHRcXHRcXHRcXHRLU01CRF9UUkFOUyh0KS1cXHUwMDNlY29ubiwgXFxcImtzbWJkOiVwSTRcXFwiLFxcbmZzL3NtYi9zZXJ2ZXIvdHJhbnNwb3J0X3RjcC5jOjE5OTpcXHRcXHRcXHRcXHRcXHUwMDI2S1NNQkRfVFJBTlModCktXFx1MDAzZWNvbm4tXFx1MDAzZWluZXRfYWRkcik7XFxuZnMvc21iL3NlcnZlci90cmFuc3BvcnRfdGNwLmMtMjAwLSNlbHNlXFxuLS1cXG5mcy9zbWIvc2VydmVyL3RyYW5zcG9ydF90Y3AuYy0yMDItXFx0XFx0XFx0S1NNQkRfVFJBTlModCktXFx1MDAzZWNvbm4sIFxcXCJrc21iZDolcEk0XFxcIixcXG5mcy9zbWIvc2VydmVyL3RyYW5zcG9ydF90Y3AuYzoyMDM6XFx0XFx0XFx0XFx1MDAyNktTTUJEX1RSQU5TKHQpLVxcdTAwM2Vjb25uLVxcdTAwM2VpbmV0X2FkZHIpO1xcbmZzL3NtYi9zZXJ2ZXIvdHJhbnNwb3J0X3RjcC5jLTIwNC0jZW5kaWZcXG4tLVxcbmZzL3NtYi9zZXJ2ZXIvdHJhbnNwb3J0X3RjcC5jPTIxOT1zdGF0aWMgaW50IGtzbWJkX2t0aHJlYWRfZm4odm9pZCAqcClcXG4tLVxcbmZzL3NtYi9zZXJ2ZXIvdHJhbnNwb3J0X3RjcC5jLTI2MC1cXHRcXHRcXHR9IGVsc2UgaWYgKGluZXRfc2soY2xpZW50X3NrLVxcdTAwM2VzayktXFx1MDAzZWluZXRfZGFkZHIgPT1cXG5mcy9zbWIvc2VydmVyL3RyYW5zcG9ydF90Y3AuYzoyNjE6XFx0XFx0XFx0XFx0IGNvbm4tXFx1MDAzZWluZXRfYWRkcilcXG5mcy9zbWIvc2VydmVyL3RyYW5zcG9ydF90Y3AuYy0yNjItXFx0XFx0XFx0XFx0bWF4X2lwX2Nvbm5zKys7XFxuLS1cXG5mcy9zbWIvc2VydmVyL3RyYW5zcG9ydF90Y3AuYy0yNjQtXFx0XFx0XFx0aWYgKGluZXRfc2soY2xpZW50X3NrLVxcdTAwM2VzayktXFx1MDAzZWluZXRfZGFkZHIgPT1cXG5mcy9zbWIvc2VydmVyL3RyYW5zcG9ydF90Y3AuYzoyNjU6XFx0XFx0XFx0ICAgIGNvbm4tXFx1MDAzZWluZXRfYWRkcilcXG5mcy9zbWIvc2VydmVyL3RyYW5zcG9ydF90Y3AuYy0yNjYtXFx0XFx0XFx0XFx0bWF4X2lwX2Nvbm5zKys7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2luZXQuaD01Nj1leHRlcm4gaW50IGluZXRfcHRvbl93aXRoX3Njb3BlKHN0cnVjdCBuZXQgKm5ldCwgdW5zaWduZWQgc2hvcnQgYWYsXFxuaW5jbHVkZS9saW51eC9pbmV0LmgtNTctXFx0XFx0Y29uc3QgY2hhciAqc3JjLCBjb25zdCBjaGFyICpwb3J0LCBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqYWRkcik7XFxuaW5jbHVkZS9saW51eC9pbmV0Lmg6NTg6Ym9vbCBpbmV0X2FkZHJfaXNfYW55KHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICphZGRyKTtcXG5pbmNsdWRlL2xpbnV4L2luZXQuaC01OS1cXG4tLVxcbmluY2x1ZGUvbGludXgvaW5ldGRldmljZS5oPTE4MT1zdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfZGV2aWNlICppcF9kZXZfZmluZChzdHJ1Y3QgbmV0ICpuZXQsIF9fYmUzMiBhZGRyKVxcbi0tXFxuaW5jbHVkZS9saW51eC9pbmV0ZGV2aWNlLmgtMTg1LVxcbmluY2x1ZGUvbGludXgvaW5ldGRldmljZS5oOjE4NjppbnQgaW5ldF9hZGRyX29ubGluayhzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYsIF9fYmUzMiBhLCBfX2JlMzIgYik7XFxuaW5jbHVkZS9saW51eC9pbmV0ZGV2aWNlLmgtMTg3LWludCBkZXZpbmV0X2lvY3RsKHN0cnVjdCBuZXQgKm5ldCwgdW5zaWduZWQgaW50IGNtZCwgc3RydWN0IGlmcmVxICopO1xcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIuaD0yNj1ORl9EUk9QX1JFQVNPTihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24sIHUzMiBlcnIpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci5oLTM0LVxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyLmg6MzU6c3RhdGljIGlubGluZSBpbnQgbmZfaW5ldF9hZGRyX2NtcChjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgKmExLFxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyLmg6MzY6XFx0XFx0XFx0XFx0ICAgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyICphMilcXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci5oLTM3LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyLmgtNTAtXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIuaDo1MTpzdGF0aWMgaW5saW5lIHZvaWQgbmZfaW5ldF9hZGRyX21hc2soY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyICphMSxcXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci5oOjUyOlxcdFxcdFxcdFxcdCAgICAgdW5pb24gbmZfaW5ldF9hZGRyICpyZXN1bHQsXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIuaDo1MzpcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciAqbWFzaylcXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci5oLTU0LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oPTMzMz1leHRlcm4gaW50IGlwX3NldF9nZXRfaXBhZGRyNChzdHJ1Y3QgbmxhdHRyICpubGEsICBfX2JlMzIgKmlwYWRkcik7XFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0Lmg6MzM0OmV4dGVybiBpbnQgaXBfc2V0X2dldF9pcGFkZHI2KHN0cnVjdCBubGF0dHIgKm5sYSwgdW5pb24gbmZfaW5ldF9hZGRyICppcGFkZHIpO1xcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oLTMzNS1leHRlcm4gc2l6ZV90IGlwX3NldF9lbGVtX2xlbihzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaD01MjI9c3RhdGljIGlubGluZSB2b2lkXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0Lmg6NTIzOm5mX2luZXRfYWRkcl9tYXNrX2lucGxhY2UodW5pb24gbmZfaW5ldF9hZGRyICphMSxcXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaDo1MjQ6XFx0XFx0XFx0ICBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgKm1hc2spXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0LmgtNTI1LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L3BmeGxlbi5oLTktLyogUHJlZml4bGVuIG1hcHMsIGJ5IEphbiBFbmdlbGhhcmR0ICAqL1xcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L3BmeGxlbi5oOjEwOmV4dGVybiBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgaXBfc2V0X25ldG1hc2tfbWFwW107XFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvcGZ4bGVuLmg6MTE6ZXh0ZXJuIGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciBpcF9zZXRfaG9zdG1hc2tfbWFwW107XFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvcGZ4bGVuLmgtMTItXFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9wZnhsZW4uaD00NT1zdGF0aWMgaW5saW5lIHZvaWRcXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9wZnhsZW4uaDo0NjppcDZfbmV0bWFzayh1bmlvbiBuZl9pbmV0X2FkZHIgKmlwLCB1OCBwcmVmaXgpXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvcGZ4bGVuLmgtNDcte1xcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjMuaD0zMj1pbnQgZ2V0X2gyMjVfYWRkcihzdHJ1Y3QgbmZfY29ubiAqY3QsIHVuc2lnbmVkIGNoYXIgKmRhdGEsXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjMuaDozMzpcXHRcXHQgIFRyYW5zcG9ydEFkZHJlc3MgKnRhZGRyLCB1bmlvbiBuZl9pbmV0X2FkZHIgKmFkZHIsXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjMuaC0zNC1cXHRcXHQgIF9fYmUxNiAqcG9ydCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyMy5oPTM2PXN0cnVjdCBuZmN0X2gzMjNfbmF0X2hvb2tzIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzLmgtMzktXFx0XFx0XFx0ICAgICBIMjQ1X1RyYW5zcG9ydEFkZHJlc3MgKnRhZGRyLFxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzLmg6NDA6XFx0XFx0XFx0ICAgICB1bmlvbiBuZl9pbmV0X2FkZHIgKmFkZHIsIF9fYmUxNiBwb3J0KTtcXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyMy5oLTQxLVxcdGludCAoKnNldF9oMjI1X2FkZHIpKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjMuaC00My1cXHRcXHRcXHQgICAgIFRyYW5zcG9ydEFkZHJlc3MgKnRhZGRyLFxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzLmg6NDQ6XFx0XFx0XFx0ICAgICB1bmlvbiBuZl9pbmV0X2FkZHIgKmFkZHIsIF9fYmUxNiBwb3J0KTtcXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyMy5oLTQ1LVxcdGludCAoKnNldF9zaWdfYWRkcikoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuaD0xMTA9c3RydWN0IG5mX25hdF9zaXBfaG9va3Mge1xcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5oLTEzNi1cXHRcXHRcXHRcXHQgZW51bSBzZHBfaGVhZGVyX3R5cGVzIHRlcm0sXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5oOjEzNzpcXHRcXHRcXHRcXHQgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyICphZGRyKTtcXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmgtMTM4LVxcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5oLTE1My1cXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgaW50IHNkcG9mZixcXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmg6MTU0OlxcdFxcdFxcdFxcdCAgICBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgKmFkZHIpO1xcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuaC0xNTUtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmgtMTY0LVxcdFxcdFxcdFxcdCAgdW5zaWduZWQgaW50IG1lZGlhbGVuLFxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuaDoxNjU6XFx0XFx0XFx0XFx0ICB1bmlvbiBuZl9pbmV0X2FkZHIgKnJ0cF9hZGRyKTtcXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmgtMTY2LX07XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmg9MTY5PWludCBjdF9zaXBfcGFyc2VfcmVxdWVzdChjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsIGNvbnN0IGNoYXIgKmRwdHIsXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5oLTE3MC1cXHRcXHRcXHQgdW5zaWduZWQgaW50IGRhdGFsZW4sIHVuc2lnbmVkIGludCAqbWF0Y2hvZmYsXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5oOjE3MTpcXHRcXHRcXHQgdW5zaWduZWQgaW50ICptYXRjaGxlbiwgdW5pb24gbmZfaW5ldF9hZGRyICphZGRyLFxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuaC0xNzItXFx0XFx0XFx0IF9fYmUxNiAqcG9ydCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmg9MTc3PWludCBjdF9zaXBfcGFyc2VfaGVhZGVyX3VyaShjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsIGNvbnN0IGNoYXIgKmRwdHIsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmgtMTgwLVxcdFxcdFxcdCAgICB1bnNpZ25lZCBpbnQgKm1hdGNob2ZmLCB1bnNpZ25lZCBpbnQgKm1hdGNobGVuLFxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuaDoxODE6XFx0XFx0XFx0ICAgIHVuaW9uIG5mX2luZXRfYWRkciAqYWRkciwgX19iZTE2ICpwb3J0KTtcXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmgtMTgyLWludCBjdF9zaXBfcGFyc2VfYWRkcmVzc19wYXJhbShjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsIGNvbnN0IGNoYXIgKmRwdHIsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmgtMTg0LVxcdFxcdFxcdCAgICAgICBjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBpbnQgKm1hdGNob2ZmLFxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuaDoxODU6XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCAqbWF0Y2hsZW4sIHVuaW9uIG5mX2luZXRfYWRkciAqYWRkcixcXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmgtMTg2LVxcdFxcdFxcdCAgICAgICBib29sIGRlbGltKTtcXG4tLVxcbmluY2x1ZGUvbmV0L2luZXRfc29jay5oPTQzMz1zdGF0aWMgaW5saW5lIGJvb2wgaW5ldF9jYW5fbm9ubG9jYWxfYmluZChzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5pbmNsdWRlL25ldC9pbmV0X3NvY2suaC00NDAtXFxuaW5jbHVkZS9uZXQvaW5ldF9zb2NrLmg6NDQxOnN0YXRpYyBpbmxpbmUgYm9vbCBpbmV0X2FkZHJfdmFsaWRfb3Jfbm9ubG9jYWwoc3RydWN0IG5ldCAqbmV0LFxcbmluY2x1ZGUvbmV0L2luZXRfc29jay5oLTQ0Mi1cXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGluZXRfc29jayAqaW5ldCxcXG4tLVxcbmluY2x1ZGUvbmV0L2lwX3ZzLmgtMjQtI2luY2x1ZGUgXFx1MDAzY25ldC9jaGVja3N1bS5oXFx1MDAzZVxcbmluY2x1ZGUvbmV0L2lwX3ZzLmg6MjU6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGZpbHRlci5oXFx1MDAzZVxcdFxcdC8qIGZvciB1bmlvbiBuZl9pbmV0X2FkZHIgKi9cXG5pbmNsdWRlL25ldC9pcF92cy5oLTI2LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9pcC5oXFx1MDAzZVxcbi0tXFxuaW5jbHVkZS9uZXQvaXBfdnMuaD03MD1zdHJ1Y3QgaXBfdnNfaXBoZHIge1xcbi0tXFxuaW5jbHVkZS9uZXQvaXBfdnMuaC03Ny1cXHRfX3MzMiBmbGFncztcXG5pbmNsdWRlL25ldC9pcF92cy5oOjc4OlxcdHVuaW9uIG5mX2luZXRfYWRkciBzYWRkcjtcXG5pbmNsdWRlL25ldC9pcF92cy5oOjc5OlxcdHVuaW9uIG5mX2luZXRfYWRkciBkYWRkcjtcXG5pbmNsdWRlL25ldC9pcF92cy5oLTgwLX07XFxuLS1cXG5pbmNsdWRlL25ldC9pcF92cy5oPTE2OD1pcF92c19pcGhfaWNtcChjb25zdCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaClcXG4tLVxcbmluY2x1ZGUvbmV0L2lwX3ZzLmgtMTcyLVxcbmluY2x1ZGUvbmV0L2lwX3ZzLmg6MTczOnN0YXRpYyBpbmxpbmUgdm9pZCBpcF92c19hZGRyX2NvcHkoaW50IGFmLCB1bmlvbiBuZl9pbmV0X2FkZHIgKmRzdCxcXG5pbmNsdWRlL25ldC9pcF92cy5oOjE3NDpcXHRcXHRcXHRcXHQgICBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgKnNyYylcXG5pbmNsdWRlL25ldC9pcF92cy5oLTE3NS17XFxuLS1cXG5pbmNsdWRlL25ldC9pcF92cy5oLTE4My1cXG5pbmNsdWRlL25ldC9pcF92cy5oOjE4NDpzdGF0aWMgaW5saW5lIHZvaWQgaXBfdnNfYWRkcl9zZXQoaW50IGFmLCB1bmlvbiBuZl9pbmV0X2FkZHIgKmRzdCxcXG5pbmNsdWRlL25ldC9pcF92cy5oOjE4NTpcXHRcXHRcXHRcXHQgIGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciAqc3JjKVxcbmluY2x1ZGUvbmV0L2lwX3ZzLmgtMTg2LXtcXG4tLVxcbmluY2x1ZGUvbmV0L2lwX3ZzLmgtMTk4LVxcbmluY2x1ZGUvbmV0L2lwX3ZzLmg6MTk5OnN0YXRpYyBpbmxpbmUgaW50IGlwX3ZzX2FkZHJfZXF1YWwoaW50IGFmLCBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgKmEsXFxuaW5jbHVkZS9uZXQvaXBfdnMuaDoyMDA6XFx0XFx0XFx0XFx0ICAgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyICpiKVxcbmluY2x1ZGUvbmV0L2lwX3ZzLmgtMjAxLXtcXG4tLVxcbmluY2x1ZGUvbmV0L2lwX3ZzLmg9MjE0PXN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqaXBfdnNfZGJnX2FkZHIoaW50IGFmLCBjaGFyICpidWYsIHNpemVfdCBidWZfbGVuLFxcbmluY2x1ZGUvbmV0L2lwX3ZzLmg6MjE1OlxcdFxcdFxcdFxcdFxcdCBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgKmFkZHIsXFxuaW5jbHVkZS9uZXQvaXBfdnMuaC0yMTYtXFx0XFx0XFx0XFx0XFx0IGludCAqaWR4KVxcbi0tXFxuaW5jbHVkZS9uZXQvaXBfdnMuaD03MDQ9dTMyIGlwX3ZzX3JodF9oYXNoX2xpbmZvKHN0cnVjdCBpcF92c19yaHQgKnQsIGludCBhZixcXG5pbmNsdWRlL25ldC9pcF92cy5oOjcwNTpcXHRcXHRcXHQgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyICphZGRyLCB1MzIgdjEsIHUzMiB2Mik7XFxuaW5jbHVkZS9uZXQvaXBfdnMuaC03MDYtXFxuLS1cXG5pbmNsdWRlL25ldC9pcF92cy5oPTc4Nz1zdHJ1Y3QgaXBfdnNfY29ubl9wYXJhbSB7XFxuaW5jbHVkZS9uZXQvaXBfdnMuaC03ODgtXFx0c3RydWN0IG5ldG5zX2lwdnNcXHRcXHQqaXB2cztcXG5pbmNsdWRlL25ldC9pcF92cy5oOjc4OTpcXHRjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHJcXHQqY2FkZHI7XFxuaW5jbHVkZS9uZXQvaXBfdnMuaDo3OTA6XFx0Y29uc3QgdW5pb24gbmZfaW5ldF9hZGRyXFx0KnZhZGRyO1xcbmluY2x1ZGUvbmV0L2lwX3ZzLmgtNzkxLVxcdF9fYmUxNlxcdFxcdFxcdFxcdGNwb3J0O1xcbi0tXFxuaW5jbHVkZS9uZXQvaXBfdnMuaD04MDk9c3RydWN0IGlwX3ZzX2Nvbm4ge1xcbi0tXFxuaW5jbHVkZS9uZXQvaXBfdnMuaC04MzQtXFxuaW5jbHVkZS9uZXQvaXBfdnMuaDo4MzU6XFx0dW5pb24gbmZfaW5ldF9hZGRyICAgICAgY2FkZHI7ICAgICAgICAgIC8qIGNsaWVudCBhZGRyZXNzICovXFxuaW5jbHVkZS9uZXQvaXBfdnMuaDo4MzY6XFx0dW5pb24gbmZfaW5ldF9hZGRyICAgICAgdmFkZHI7ICAgICAgICAgIC8qIHZpcnR1YWwgYWRkcmVzcyAqL1xcbmluY2x1ZGUvbmV0L2lwX3ZzLmgtODM3LVxcdC8qIDk2LzEyOCAqL1xcbmluY2x1ZGUvbmV0L2lwX3ZzLmgtODM4LVxcbmluY2x1ZGUvbmV0L2lwX3ZzLmg6ODM5OlxcdHVuaW9uIG5mX2luZXRfYWRkciAgICAgIGRhZGRyOyAgICAgICAgICAvKiBkZXN0aW5hdGlvbiBhZGRyZXNzICovXFxuaW5jbHVkZS9uZXQvaXBfdnMuaC04NDAtXFx0X191MzJcXHRcXHRcXHRmd21hcms7XFx0XFx0LyogRmlyZSB3YWxsIG1hcmsgZnJvbSBza2IgKi9cXG4tLVxcbmluY2x1ZGUvbmV0L2lwX3ZzLmg9ODg2PXN0cnVjdCBpcF92c19zZXJ2aWNlX3VzZXJfa2VybiB7XFxuLS1cXG5pbmNsdWRlL25ldC9pcF92cy5oLTg4OS1cXHR1MTZcXHRcXHRcXHRwcm90b2NvbDtcXG5pbmNsdWRlL25ldC9pcF92cy5oOjg5MDpcXHR1bmlvbiBuZl9pbmV0X2FkZHJcXHRhZGRyO1xcdFxcdC8qIHZpcnR1YWwgaXAgYWRkcmVzcyAqL1xcbmluY2x1ZGUvbmV0L2lwX3ZzLmgtODkxLVxcdF9fYmUxNlxcdFxcdFxcdHBvcnQ7XFxuLS1cXG5pbmNsdWRlL25ldC9pcF92cy5oPTkwMz1zdHJ1Y3QgaXBfdnNfZGVzdF91c2VyX2tlcm4ge1xcbmluY2x1ZGUvbmV0L2lwX3ZzLmgtOTA0LVxcdC8qIGRlc3RpbmF0aW9uIHNlcnZlciBhZGRyZXNzICovXFxuaW5jbHVkZS9uZXQvaXBfdnMuaDo5MDU6XFx0dW5pb24gbmZfaW5ldF9hZGRyXFx0YWRkcjtcXG5pbmNsdWRlL25ldC9pcF92cy5oLTkwNi1cXHRfX2JlMTZcXHRcXHRcXHRwb3J0O1xcbi0tXFxuaW5jbHVkZS9uZXQvaXBfdnMuaD05Mjk9c3RydWN0IGlwX3ZzX3NlcnZpY2Uge1xcbi0tXFxuaW5jbHVkZS9uZXQvaXBfdnMuaC05MzQtXFxuaW5jbHVkZS9uZXQvaXBfdnMuaDo5MzU6XFx0dW5pb24gbmZfaW5ldF9hZGRyXFx0YWRkcjtcXHQgIC8qIElQIGFkZHJlc3MgZm9yIHZpcnR1YWwgc2VydmljZSAqL1xcbmluY2x1ZGUvbmV0L2lwX3ZzLmgtOTM2LVxcdF9fdTMyICAgICAgICAgICAgICAgICAgIGZ3bWFyazsgICAvKiBmaXJld2FsbCBtYXJrIG9mIHRoZSBzZXJ2aWNlICovXFxuLS1cXG5pbmNsdWRlL25ldC9pcF92cy5oPTk2MT1zdHJ1Y3QgaXBfdnNfZGVzdF9kc3Qge1xcbi0tXFxuaW5jbHVkZS9uZXQvaXBfdnMuaC05NjMtXFx0dTMyXFx0XFx0XFx0ZHN0X2Nvb2tpZTtcXG5pbmNsdWRlL25ldC9pcF92cy5oOjk2NDpcXHR1bmlvbiBuZl9pbmV0X2FkZHJcXHRkc3Rfc2FkZHI7XFxuaW5jbHVkZS9uZXQvaXBfdnMuaC05NjUtXFx0c3RydWN0IHJjdV9oZWFkXFx0XFx0cmN1X2hlYWQ7XFxuLS1cXG5pbmNsdWRlL25ldC9pcF92cy5oPTk3MT1zdHJ1Y3QgaXBfdnNfZGVzdCB7XFxuLS1cXG5pbmNsdWRlL25ldC9pcF92cy5oLTk3Ni1cXHRfX2JlMTZcXHRcXHRcXHRwb3J0O1xcdFxcdC8qIHBvcnQgbnVtYmVyIG9mIHRoZSBzZXJ2ZXIgKi9cXG5pbmNsdWRlL25ldC9pcF92cy5oOjk3NzpcXHR1bmlvbiBuZl9pbmV0X2FkZHJcXHRhZGRyO1xcdFxcdC8qIElQIGFkZHJlc3Mgb2YgdGhlIHNlcnZlciAqL1xcbmluY2x1ZGUvbmV0L2lwX3ZzLmgtOTc4LVxcdHZvbGF0aWxlIHVuc2lnbmVkIGludFxcdGZsYWdzO1xcdFxcdC8qIGRlc3Qgc3RhdHVzIGZsYWdzICovXFxuLS1cXG5pbmNsdWRlL25ldC9pcF92cy5oLTEwMDQtXFx0X19iZTE2XFx0XFx0XFx0dnBvcnQ7XFx0XFx0LyogdmlydHVhbCBwb3J0IG51bWJlciAqL1xcbmluY2x1ZGUvbmV0L2lwX3ZzLmg6MTAwNTpcXHR1bmlvbiBuZl9pbmV0X2FkZHJcXHR2YWRkcjtcXHRcXHQvKiB2aXJ0dWFsIElQIGFkZHJlc3MgKi9cXG5pbmNsdWRlL25ldC9pcF92cy5oLTEwMDYtXFx0X191MzJcXHRcXHRcXHR2ZndtYXJrO1xcdC8qIGZpcmV3YWxsIG1hcmsgb2Ygc2VydmljZSAqL1xcbi0tXFxuaW5jbHVkZS9uZXQvaXBfdnMuaD0xMTM4PXN0cnVjdCBpcHZzX3N5bmNfZGFlbW9uX2NmZyB7XFxuaW5jbHVkZS9uZXQvaXBfdnMuaDoxMTM5OlxcdHVuaW9uIG5mX2luZXRfYWRkclxcdG1jYXN0X2dyb3VwO1xcbmluY2x1ZGUvbmV0L2lwX3ZzLmgtMTE0MC1cXHRpbnRcXHRcXHRcXHRzeW5jaWQ7XFxuLS1cXG5pbmNsdWRlL25ldC9pcF92cy5oPTE2MzE9c3RhdGljIGlubGluZSB2b2lkIGlwX3ZzX2Nvbm5fZmlsbF9wYXJhbShzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgaW50IGFmLCBpbnQgcHJvdG9jb2wsXFxuaW5jbHVkZS9uZXQvaXBfdnMuaDoxNjMyOlxcdFxcdFxcdFxcdFxcdCBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgKmNhZGRyLFxcbmluY2x1ZGUvbmV0L2lwX3ZzLmgtMTYzMy1cXHRcXHRcXHRcXHRcXHQgX19iZTE2IGNwb3J0LFxcbmluY2x1ZGUvbmV0L2lwX3ZzLmg6MTYzNDpcXHRcXHRcXHRcXHRcXHQgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyICp2YWRkcixcXG5pbmNsdWRlL25ldC9pcF92cy5oLTE2MzUtXFx0XFx0XFx0XFx0XFx0IF9fYmUxNiB2cG9ydCxcXG4tLVxcbmluY2x1ZGUvbmV0L2lwX3ZzLmg9MTY5Nz1zdHJ1Y3QgaXBfdnNfY29ubiAqaXBfdnNfY29ubl9uZXcoY29uc3Qgc3RydWN0IGlwX3ZzX2Nvbm5fcGFyYW0gKnAsIGludCBkZXN0X2FmLFxcbmluY2x1ZGUvbmV0L2lwX3ZzLmg6MTY5ODpcXHRcXHRcXHRcXHQgIGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciAqZGFkZHIsXFxuaW5jbHVkZS9uZXQvaXBfdnMuaC0xNjk5LVxcdFxcdFxcdFxcdCAgX19iZTE2IGRwb3J0LCB1bnNpZ25lZCBpbnQgZmxhZ3MsXFxuLS1cXG5pbmNsdWRlL25ldC9pcF92cy5oPTE4Njk9aXBfdnNfc2VydmljZV9maW5kKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBpbnQgYWYsIF9fdTMyIGZ3bWFyaywgX191MTYgcHJvdG9jb2wsXFxuaW5jbHVkZS9uZXQvaXBfdnMuaDoxODcwOlxcdFxcdCAgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyICp2YWRkciwgX19iZTE2IHZwb3J0KTtcXG5pbmNsdWRlL25ldC9pcF92cy5oLTE4NzEtXFxuaW5jbHVkZS9uZXQvaXBfdnMuaD0xODcyPWJvb2wgaXBfdnNfaGFzX3JlYWxfc2VydmljZShzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgaW50IGFmLCBfX3UxNiBwcm90b2NvbCxcXG5pbmNsdWRlL25ldC9pcF92cy5oOjE4NzM6XFx0XFx0XFx0ICAgIGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciAqZGFkZHIsIF9fYmUxNiBkcG9ydCk7XFxuaW5jbHVkZS9uZXQvaXBfdnMuaC0xODc0LVxcbi0tXFxuaW5jbHVkZS9uZXQvaXBfdnMuaD0xODc2PWlwX3ZzX2ZpbmRfcmVhbF9zZXJ2aWNlKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBpbnQgYWYsIF9fdTE2IHByb3RvY29sLFxcbmluY2x1ZGUvbmV0L2lwX3ZzLmg6MTg3NzpcXHRcXHRcXHRjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgKmRhZGRyLCBfX2JlMTYgZHBvcnQpO1xcbmluY2x1ZGUvbmV0L2lwX3ZzLmgtMTg3OC1zdHJ1Y3QgaXBfdnNfZGVzdCAqaXBfdnNfZmluZF90dW5uZWwoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGludCBhZixcXG5pbmNsdWRlL25ldC9pcF92cy5oOjE4Nzk6XFx0XFx0XFx0XFx0ICAgICBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgKmRhZGRyLFxcbmluY2x1ZGUvbmV0L2lwX3ZzLmgtMTg4MC1cXHRcXHRcXHRcXHQgICAgIF9fYmUxNiB0dW5fcG9ydCk7XFxuLS1cXG5pbmNsdWRlL25ldC9pcF92cy5oPTE4ODk9aXBfdnNfZmluZF9kZXN0KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBpbnQgc3ZjX2FmLCBpbnQgZGVzdF9hZixcXG5pbmNsdWRlL25ldC9pcF92cy5oOjE4OTA6XFx0XFx0Y29uc3QgdW5pb24gbmZfaW5ldF9hZGRyICpkYWRkciwgX19iZTE2IGRwb3J0LFxcbmluY2x1ZGUvbmV0L2lwX3ZzLmg6MTg5MTpcXHRcXHRjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgKnZhZGRyLCBfX2JlMTYgdnBvcnQsXFxuaW5jbHVkZS9uZXQvaXBfdnMuaC0xODkyLVxcdFxcdF9fdTE2IHByb3RvY29sLCBfX3UzMiBmd21hcmssIF9fdTMyIGZsYWdzKTtcXG4tLVxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0Lmg9MTg9c3RydWN0IG5mX2Nvbm50cmFja19leHBlY3Qge1xcbi0tXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuaC02NC0jaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfTkFUKVxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0Lmg6NjU6XFx0dW5pb24gbmZfaW5ldF9hZGRyIHNhdmVkX2FkZHI7XFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuaC02Ni1cXHQvKiBUaGlzIGlzIHRoZSBvcmlnaW5hbCBwZXItcHJvdG8gcGFydCwgdXNlZCB0byBtYXAgdGhlXFxuLS1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5oPTE1ND12b2lkIG5mX2N0X2V4cGVjdF9pbml0KHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICosIHVuc2lnbmVkIGludCwgdV9pbnQ4X3QsXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuaDoxNTU6XFx0XFx0ICAgICAgIGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciAqLFxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0Lmg6MTU2OlxcdFxcdCAgICAgICBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgKixcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5oLTE1Ny1cXHRcXHQgICAgICAgdV9pbnQ4X3QsIGNvbnN0IF9fYmUxNiAqLCBjb25zdCBfX2JlMTYgKik7XFxuLS1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2w0cHJvdG8uaD03OT1pbnQgbmZfY29ubnRyYWNrX2luZXRfZXJyb3Ioc3RydWN0IG5mX2Nvbm4gKnRtcGwsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2w0cHJvdG8uaC04Mi1cXHRcXHRcXHQgICAgdTggbDRwcm90byxcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2w0cHJvdG8uaDo4MzpcXHRcXHRcXHQgICAgdW5pb24gbmZfaW5ldF9hZGRyICpvdXRlcl9kYWRkcik7XFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sNHByb3RvLmgtODQtXFxuLS1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3R1cGxlLmgtMjUtXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190dXBsZS5oOjI2OiNkZWZpbmUgTkZfQ1RfVFVQTEVfTDNTSVpFXFx0QVJSQVlfU0laRSgoKHVuaW9uIG5mX2luZXRfYWRkciAqKU5VTEwpLVxcdTAwM2VhbGwpXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190dXBsZS5oLTI3LVxcbi0tXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190dXBsZS5oPTI5PXN0cnVjdCBuZl9jb25udHJhY2tfbWFuIHtcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3R1cGxlLmg6MzA6XFx0dW5pb24gbmZfaW5ldF9hZGRyIHUzO1xcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGUuaC0zMS1cXHR1bmlvbiBuZl9jb25udHJhY2tfbWFuX3Byb3RvIHU7XFxuLS1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3R1cGxlLmg9Mzc9c3RydWN0IG5mX2Nvbm50cmFja190dXBsZSB7XFxuLS1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3R1cGxlLmgtNDEtXFx0c3RydWN0IHtcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3R1cGxlLmg6NDI6XFx0XFx0dW5pb24gbmZfaW5ldF9hZGRyIHUzO1xcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGUuaC00My1cXHRcXHR1bmlvbiB7XFxuLS1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3R1cGxlLmg9Nzg9c3RydWN0IG5mX2Nvbm50cmFja190dXBsZV9tYXNrIHtcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3R1cGxlLmgtNzktXFx0c3RydWN0IHtcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3R1cGxlLmg6ODA6XFx0XFx0dW5pb24gbmZfaW5ldF9hZGRyIHUzO1xcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGUuaC04MS1cXHRcXHR1bmlvbiBuZl9jb25udHJhY2tfbWFuX3Byb3RvIHU7XFxuLS1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3R1cGxlLmg9MTI3PXN0YXRpYyBpbmxpbmUgYm9vbCBfX25mX2N0X3R1cGxlX3NyY19lcXVhbChjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0MSxcXG4tLVxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGUuaC0xMjkte1xcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGUuaDoxMzA6XFx0cmV0dXJuIChuZl9pbmV0X2FkZHJfY21wKFxcdTAwMjZ0MS1cXHUwMDNlc3JjLnUzLCBcXHUwMDI2dDItXFx1MDAzZXNyYy51MykgXFx1MDAyNlxcdTAwMjZcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3R1cGxlLmgtMTMxLVxcdFxcdHQxLVxcdTAwM2VzcmMudS5hbGwgPT0gdDItXFx1MDAzZXNyYy51LmFsbCBcXHUwMDI2XFx1MDAyNlxcbi0tXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190dXBsZS5oPTEzNT1zdGF0aWMgaW5saW5lIGJvb2wgX19uZl9jdF90dXBsZV9kc3RfZXF1YWwoY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdDEsXFxuLS1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3R1cGxlLmgtMTM3LXtcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3R1cGxlLmg6MTM4OlxcdHJldHVybiAobmZfaW5ldF9hZGRyX2NtcChcXHUwMDI2dDEtXFx1MDAzZWRzdC51MywgXFx1MDAyNnQyLVxcdTAwM2Vkc3QudTMpIFxcdTAwMjZcXHUwMDI2XFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190dXBsZS5oLTEzOS1cXHRcXHR0MS1cXHUwMDNlZHN0LnUuYWxsID09IHQyLVxcdTAwM2Vkc3QudS5hbGwgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGUuaD0xNTE9bmZfY3RfdHVwbGVfbWFza19lcXVhbChjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlX21hc2sgKm0xLFxcbi0tXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190dXBsZS5oLTE1My17XFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190dXBsZS5oOjE1NDpcXHRyZXR1cm4gKG5mX2luZXRfYWRkcl9jbXAoXFx1MDAyNm0xLVxcdTAwM2VzcmMudTMsIFxcdTAwMjZtMi1cXHUwMDNlc3JjLnUzKSBcXHUwMDI2XFx1MDAyNlxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGUuaC0xNTUtXFx0XFx0bTEtXFx1MDAzZXNyYy51LmFsbCA9PSBtMi1cXHUwMDNlc3JjLnUuYWxsKTtcXG4tLVxcbmluY2x1ZGUvbmV0L25ldG5zL2lwdjQuaD01NT1zdHJ1Y3QgbmV0bnNfaXB2NCB7XFxuLS1cXG5pbmNsdWRlL25ldC9uZXRucy9pcHY0LmgtMjk5LVxcdHNpcGhhc2hfa2V5X3RcXHRpcF9pZF9rZXk7XFxuaW5jbHVkZS9uZXQvbmV0bnMvaXB2NC5oOjMwMDpcXHRzdHJ1Y3QgaGxpc3RfaGVhZFxcdCppbmV0X2FkZHJfbHN0O1xcbmluY2x1ZGUvbmV0L25ldG5zL2lwdjQuaC0zMDEtXFx0c3RydWN0IGRlbGF5ZWRfd29ya1xcdGFkZHJfY2hrX3dvcms7XFxuLS1cXG5pbmNsdWRlL25ldC9yb3V0ZS5oPTI1MT12b2lkIGlwX3J0X3NlbmRfcmVkaXJlY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuaW5jbHVkZS9uZXQvcm91dGUuaC0yNTItXFxuaW5jbHVkZS9uZXQvcm91dGUuaDoyNTM6dW5zaWduZWQgaW50IGluZXRfYWRkcl90eXBlKHN0cnVjdCBuZXQgKm5ldCwgX19iZTMyIGFkZHIpO1xcbmluY2x1ZGUvbmV0L3JvdXRlLmg6MjU0OnVuc2lnbmVkIGludCBpbmV0X2FkZHJfdHlwZV90YWJsZShzdHJ1Y3QgbmV0ICpuZXQsIF9fYmUzMiBhZGRyLCB1MzIgdGJfaWQpO1xcbmluY2x1ZGUvbmV0L3JvdXRlLmgtMjU1LXVuc2lnbmVkIGludCBpbmV0X2Rldl9hZGRyX3R5cGUoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbmluY2x1ZGUvbmV0L3JvdXRlLmgtMjU2LVxcdFxcdFxcdFxcdF9fYmUzMiBhZGRyKTtcXG5pbmNsdWRlL25ldC9yb3V0ZS5oOjI1Nzp1bnNpZ25lZCBpbnQgaW5ldF9hZGRyX3R5cGVfZGV2X3RhYmxlKHN0cnVjdCBuZXQgKm5ldCxcXG5pbmNsdWRlL25ldC9yb3V0ZS5oLTI1OC1cXHRcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci5oPTU4PWVudW0ge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci5oLTcxLVxcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIuaDo3Mjp1bmlvbiBuZl9pbmV0X2FkZHIge1xcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIuaC03My1cXHRfX3UzMlxcdFxcdGFsbFs0XTtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZfbmF0Lmg9Mzg9c3RydWN0IG5mX25hdF9yYW5nZSB7XFxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci9uZl9uYXQuaC0zOS1cXHR1bnNpZ25lZCBpbnRcXHRcXHRcXHRmbGFncztcXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mX25hdC5oOjQwOlxcdHVuaW9uIG5mX2luZXRfYWRkclxcdFxcdG1pbl9hZGRyO1xcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZfbmF0Lmg6NDE6XFx0dW5pb24gbmZfaW5ldF9hZGRyXFx0XFx0bWF4X2FkZHI7XFxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci9uZl9uYXQuaC00Mi1cXHR1bmlvbiBuZl9jb25udHJhY2tfbWFuX3Byb3RvXFx0bWluX3Byb3RvO1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci9uZl9uYXQuaD00Nj1zdHJ1Y3QgbmZfbmF0X3JhbmdlMiB7XFxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci9uZl9uYXQuaC00Ny1cXHR1bnNpZ25lZCBpbnRcXHRcXHRcXHRmbGFncztcXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mX25hdC5oOjQ4OlxcdHVuaW9uIG5mX2luZXRfYWRkclxcdFxcdG1pbl9hZGRyO1xcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZfbmF0Lmg6NDk6XFx0dW5pb24gbmZfaW5ldF9hZGRyXFx0XFx0bWF4X2FkZHI7XFxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci9uZl9uYXQuaC01MC1cXHR1bmlvbiBuZl9jb25udHJhY2tfbWFuX3Byb3RvXFx0bWluX3Byb3RvO1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci94dF9ITUFSSy5oPTQwPXN0cnVjdCB4dF9obWFya19pbmZvIHtcXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X0hNQVJLLmg6NDE6XFx0dW5pb24gbmZfaW5ldF9hZGRyXFx0c3JjX21hc2s7XFxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci94dF9ITUFSSy5oOjQyOlxcdHVuaW9uIG5mX2luZXRfYWRkclxcdGRzdF9tYXNrO1xcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIveHRfSE1BUksuaC00My1cXHR1bmlvbiBobWFya19wb3J0c1xcdHBvcnRfbWFzaztcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIveHRfVEVFLmg9Nz1zdHJ1Y3QgeHRfdGVlX3RnaW5mbyB7XFxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci94dF9URUUuaDo4OlxcdHVuaW9uIG5mX2luZXRfYWRkciBndztcXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X1RFRS5oLTktXFx0Y2hhciBvaWZbMTZdO1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci94dF9UUFJPWFkuaD0xOD1zdHJ1Y3QgeHRfdHByb3h5X3RhcmdldF9pbmZvX3YxIHtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIveHRfVFBST1hZLmgtMjAtXFx0X191MzIgbWFya192YWx1ZTtcXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X1RQUk9YWS5oOjIxOlxcdHVuaW9uIG5mX2luZXRfYWRkciBsYWRkcjtcXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X1RQUk9YWS5oLTIyLVxcdF9fYmUxNiBscG9ydDtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIveHRfY29ubmxpbWl0Lmg9MTU9c3RydWN0IHh0X2Nvbm5saW1pdF9pbmZvIHtcXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X2Nvbm5saW1pdC5oLTE2LVxcdHVuaW9uIHtcXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X2Nvbm5saW1pdC5oOjE3OlxcdFxcdHVuaW9uIG5mX2luZXRfYWRkciBtYXNrO1xcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIveHRfY29ubmxpbWl0LmgtMTgtI2lmbmRlZiBfX0tFUk5FTF9fXFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X2Nvbm50cmFjay5oPTM4PXN0cnVjdCB4dF9jb25udHJhY2tfbXRpbmZvMSB7XFxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci94dF9jb25udHJhY2suaDozOTpcXHR1bmlvbiBuZl9pbmV0X2FkZHIgb3JpZ3NyY19hZGRyLCBvcmlnc3JjX21hc2s7XFxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci94dF9jb25udHJhY2suaDo0MDpcXHR1bmlvbiBuZl9pbmV0X2FkZHIgb3JpZ2RzdF9hZGRyLCBvcmlnZHN0X21hc2s7XFxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci94dF9jb25udHJhY2suaDo0MTpcXHR1bmlvbiBuZl9pbmV0X2FkZHIgcmVwbHNyY19hZGRyLCByZXBsc3JjX21hc2s7XFxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci94dF9jb25udHJhY2suaDo0MjpcXHR1bmlvbiBuZl9pbmV0X2FkZHIgcmVwbGRzdF9hZGRyLCByZXBsZHN0X21hc2s7XFxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci94dF9jb25udHJhY2suaC00My1cXHRfX3UzMiBleHBpcmVzX21pbiwgZXhwaXJlc19tYXg7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X2Nvbm50cmFjay5oPTUxPXN0cnVjdCB4dF9jb25udHJhY2tfbXRpbmZvMiB7XFxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci94dF9jb25udHJhY2suaDo1MjpcXHR1bmlvbiBuZl9pbmV0X2FkZHIgb3JpZ3NyY19hZGRyLCBvcmlnc3JjX21hc2s7XFxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci94dF9jb25udHJhY2suaDo1MzpcXHR1bmlvbiBuZl9pbmV0X2FkZHIgb3JpZ2RzdF9hZGRyLCBvcmlnZHN0X21hc2s7XFxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci94dF9jb25udHJhY2suaDo1NDpcXHR1bmlvbiBuZl9pbmV0X2FkZHIgcmVwbHNyY19hZGRyLCByZXBsc3JjX21hc2s7XFxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci94dF9jb25udHJhY2suaDo1NTpcXHR1bmlvbiBuZl9pbmV0X2FkZHIgcmVwbGRzdF9hZGRyLCByZXBsZHN0X21hc2s7XFxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci94dF9jb25udHJhY2suaC01Ni1cXHRfX3UzMiBleHBpcmVzX21pbiwgZXhwaXJlc19tYXg7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X2Nvbm50cmFjay5oPTY0PXN0cnVjdCB4dF9jb25udHJhY2tfbXRpbmZvMyB7XFxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci94dF9jb25udHJhY2suaDo2NTpcXHR1bmlvbiBuZl9pbmV0X2FkZHIgb3JpZ3NyY19hZGRyLCBvcmlnc3JjX21hc2s7XFxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci94dF9jb25udHJhY2suaDo2NjpcXHR1bmlvbiBuZl9pbmV0X2FkZHIgb3JpZ2RzdF9hZGRyLCBvcmlnZHN0X21hc2s7XFxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci94dF9jb25udHJhY2suaDo2NzpcXHR1bmlvbiBuZl9pbmV0X2FkZHIgcmVwbHNyY19hZGRyLCByZXBsc3JjX21hc2s7XFxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci94dF9jb25udHJhY2suaDo2ODpcXHR1bmlvbiBuZl9pbmV0X2FkZHIgcmVwbGRzdF9hZGRyLCByZXBsZHN0X21hc2s7XFxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci94dF9jb25udHJhY2suaC02OS1cXHRfX3UzMiBleHBpcmVzX21pbiwgZXhwaXJlc19tYXg7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X2lwcmFuZ2UuaD0xNT1zdHJ1Y3QgeHRfaXByYW5nZV9tdGluZm8ge1xcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIveHRfaXByYW5nZS5oOjE2OlxcdHVuaW9uIG5mX2luZXRfYWRkciBzcmNfbWluLCBzcmNfbWF4O1xcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIveHRfaXByYW5nZS5oOjE3OlxcdHVuaW9uIG5mX2luZXRfYWRkciBkc3RfbWluLCBkc3RfbWF4O1xcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIveHRfaXByYW5nZS5oLTE4LVxcdF9fdTggZmxhZ3M7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X2lwdnMuaD0yMD1zdHJ1Y3QgeHRfaXB2c19tdGluZm8ge1xcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIveHRfaXB2cy5oOjIxOlxcdHVuaW9uIG5mX2luZXRfYWRkclxcdHZhZGRyLCB2bWFzaztcXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X2lwdnMuaC0yMi1cXHRfX2JlMTZcXHRcXHRcXHR2cG9ydDtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIveHRfcG9saWN5Lmg9NDA9c3RydWN0IHh0X3BvbGljeV9lbGVtIHtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIveHRfcG9saWN5LmgtNDMtXFx0XFx0c3RydWN0IHtcXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X3BvbGljeS5oOjQ0OlxcdFxcdFxcdHVuaW9uIG5mX2luZXRfYWRkciBzYWRkcjtcXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X3BvbGljeS5oOjQ1OlxcdFxcdFxcdHVuaW9uIG5mX2luZXRfYWRkciBzbWFzaztcXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X3BvbGljeS5oOjQ2OlxcdFxcdFxcdHVuaW9uIG5mX2luZXRfYWRkciBkYWRkcjtcXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X3BvbGljeS5oOjQ3OlxcdFxcdFxcdHVuaW9uIG5mX2luZXRfYWRkciBkbWFzaztcXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X3BvbGljeS5oLTQ4LVxcdFxcdH07XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X3JlY2VudC5oPTM3PXN0cnVjdCB4dF9yZWNlbnRfbXRpbmZvX3YxIHtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIveHRfcmVjZW50LmgtNDMtXFx0X191OCBzaWRlO1xcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIveHRfcmVjZW50Lmg6NDQ6XFx0dW5pb24gbmZfaW5ldF9hZGRyIG1hc2s7XFxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci94dF9yZWNlbnQuaC00NS19O1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfTlBULmg9OD1zdHJ1Y3QgaXA2dF9ucHRfdGdpbmZvIHtcXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9OUFQuaDo5OlxcdHVuaW9uIG5mX2luZXRfYWRkclxcdHNyY19wZng7XFxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfTlBULmg6MTA6XFx0dW5pb24gbmZfaW5ldF9hZGRyXFx0ZHN0X3BmeDtcXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9OUFQuaC0xMS1cXHRfX3U4XFx0XFx0XFx0c3JjX3BmeF9sZW47XFxuLS1cXG5uZXQvY29yZS91dGlscy5jPTQwMT1FWFBPUlRfU1lNQk9MKGluZXRfcHRvbl93aXRoX3Njb3BlKTtcXG5uZXQvY29yZS91dGlscy5jLTQwMi1cXG5uZXQvY29yZS91dGlscy5jOjQwMzpib29sIGluZXRfYWRkcl9pc19hbnkoc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKmFkZHIpXFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjQxOjE1Ljk2NDY5MTAzOFoiLCJTZXEiOjUzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODA4MzYxODYyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBgbmV0Y29uc29sZWAgSVAgQWRkcmVzcyBIYW5kbGluZyoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgcmVmYWN0b3JpbmcgaG93IGBuZXRjb25zb2xlYCBoYW5kbGVzIElQIGFkZHJlc3Nlcy4gUHJldmlvdXNseSwgd2Ugd2VyZSB1c2luZyBhIGB1bmlvbiBpbmV0X2FkZHJgIGFuZCBhIHNlcGFyYXRlIGJvb2xlYW4gYGlwdjZgLiBOb3csIHdlJ3JlIHVzaW5nIGEgYHN0cnVjdCBpbmV0X2FkZHJgIHdoaWNoIGluY2x1ZGVzIGEgZmFtaWx5IGZpZWxkIGFuZCB0aGUgdW5pb24uIEl0IGxvb2tzIGxpa2UgdGhlIGB1bmlvbiBpbmV0X2FkZHJgIGRlZmluaXRpb24gaGFzIGJlZW4gbW92ZWQgZnJvbSB0aGUgaGVhZGVyIHRvIHRoZSBzb3VyY2UgZmlsZSwgd2hpY2ggbWFrZXMgc2Vuc2UgdG8gZW5jYXBzdWxhdGUgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMuXG5cbkkgc2VlIHRoZXkndmUgdXBkYXRlZCB0aGUgY29uZmlnZnMgc2hvdyBmdW5jdGlvbnMsIGBsb2NhbF9pcF9zaG93YCBhbmQgYHJlbW90ZV9pcF9zaG93YC4gVGhleSdyZSBub3cgY2hlY2tpbmcgdGhlIGBmYW1pbHlgIGZpZWxkIG9mIHRoZSBgaW5ldF9hZGRyYCB0byBkZXRlcm1pbmUgdGhlIElQIHZlcnNpb24gYW5kIHVzaW5nIGAlcEk0YCBvciBgJXBJNmNgIGluIGBzeXNmc19lbWl0YC4gVGhpcyBzZWVtcyBzYWZlOyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrcyBhcmUgcHJlc2VudCBzaW5jZSB0aGUgb3V0cHV0IGlzIGZvcm1hdHRlZCBhcyBhIHN0cmluZy5cblxuTm93LCBsZXQncyBjb25zaWRlciBgbmV0cG9sbF9zZW5kX3VkcGAuIFRoaXMgaXMgd2hlcmUgdGhlIElQIGFkZHJlc3NlcyBhcmUgdXNlZCB0byBjb25zdHJ1Y3QgdGhlIFVEUCBwYWNrZXRzLiBUaGVyZSBhcmUgYSBmZXcgY2hlY2tzIGxpa2UgYG50LVx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDZgIHRvIHNlbGVjdCB0aGUgcmlnaHQgY2hlY2tzdW0gb3IgcHJvdG9jb2wuIElmIGBudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5YCBpcyBgQUZfVU5TUEVDYCwgaXQgZmFsbHMgYmFjayB0byBJUHY0LiBCdXQgYG5ldGNvbnNfbmV0cG9sbF9zZXR1cGAgY2hlY2tzIHRvIG1ha2Ugc3VyZSBgcmVtb3RlX2lwYCBoYXMgYmVlbiBjb25maWd1cmVkIHdpdGggYW4gYWRkcmVzcyBhbmQgZmFtaWx5LCBhbmQgdGhlIHJlbW90ZSBmYW1pbHkgbXVzdCBtYXRjaCB0aGUgbG9jYWwgSVAgYWRkcmVzcyBmYW1pbHkuIElmIGByZW1vdGVfaXAuZmFtaWx5YCBpcyBgQUZfVU5TUEVDYCB3aGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLCB0aGUgc2V0dXAgZmFpbHMsIHNvIGBuZXRwb2xsX3NlbmRfdWRwYCB3b24ndCBiZSBjYWxsZWQuXG5cblRoZSBwYXJzaW5nIGZ1bmN0aW9uLCBgbmV0cG9sbF9wYXJzZV9pcF9hZGRyYCwgaGFzIGFsc28gYmVlbiB1cGRhdGVkIHRvIHVzZSB0aGUgbmV3IGBpbmV0X2FkZHJgIHN0cnVjdC4gSXQgcG9wdWxhdGVzIGBhZGRyLVx1MDAzZWlwYCBvciBgYWRkci1cdTAwM2VpbjZgIGFuZCBzZXRzIGBhZGRyLVx1MDAzZWZhbWlseWAuIElmIGl0IGZhaWxzLCBpdCByZXR1cm5zIC0xLCBhbmQgaXQncyB1cCB0byB0aGUgY2FsbGVyIHRvIGhhbmRsZSB0aGUgZXJyb3IuIEkgY2hlY2tlZCB0aGF0IGV2ZW4gaWYgcGFyc2luZyBmYWlscywgdGhlcmUncyBubyB3YXkgdG8gbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeSBzaW5jZSB0aGUgYGluZXRfYWRkcmAgaXMgemVyby1hbGxvY2F0ZWQsIGFuZCB0aGUgZmFtaWx5IGlzIHByb3Blcmx5IGluaXRpYWxpemVkLlxuXG5DaGVja2luZyBgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZWAgY29uZmlybXMgdGhhdCB0aGUgc3RydWN0dXJlIGlzIGFsd2F5cyBmdWxseSBpbml0aWFsaXplZCB3aGVuIHVzZWQuIFRoZSBib290IGNvbW1hbmQgbGluZSBwYXJzZXIgdXNlcyBga3phbGxvY19vYmpgLCBzbyBpdCdzIGFsbCBnb29kLlxuXG5UaGUgcGF0Y2ggc2VlbXMgd2VsbC1yZWFzb25lZCBhbmQgc2VjdXJlLiBUaGVyZSdzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCBvciBsZWFrZWQgaGVyZS4gVGhlIHN0cnVjdHVyZXMgYXJlIHplcm8tYWxsb2NhdGVkLCB0aGUgZGF0YSBpcyBub3QgY29waWVkIHRvIHVzZXJzcGFjZSBpbiBiaW5hcnkgZm9ybSwgYW5kIHRoZSBJUCBhZGRyZXNzIGRhdGEgc2VudCBvdmVyIHRoZSBuZXR3b3JrIGlzIGZ1bGx5IGluaXRpYWxpemVkIGJ5IHRoZSB0aW1lIGl0IGlzIHVzZWQgdG8gY29uc3RydWN0IHBhY2tldHMuIFRoZSBmYW1pbHkgZmllbGQgaXMgYWxzbyB2ZXJpZmllZCB3aXRoIGNoZWNrcyBiZWZvcmUgdXNpbmcgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMTc5LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTo0MTo0NC4wNDgzMTIwMjJaIiwiU2VxIjo1NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1Nzc0ODA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInB1c2hfaXB2NFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIxMDI9c3RhdGljIHZvaWQgcHVzaF9ldGgoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTE2LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMTE3OnN0YXRpYyB2b2lkIHB1c2hfaXB2NChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTE4LVxcdFxcdCAgICAgIGludCBsZW4pXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjE2OT1zdGF0aWMgaW50IG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxOTgtXFx0ZWxzZVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMTk5OlxcdFxcdHB1c2hfaXB2NChudCwgc2tiLCBsZW4pO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjAwLVxcdHB1c2hfZXRoKG50LCBza2IpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTo0MTo0NC4wOTQwOTI3NDdaIiwiU2VxIjo1NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg4OTU5NzM1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIGBwdXNoX2lwdjRgIEltcGxlbWVudGF0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYHB1c2hfaXB2NGAgaW1wbGVtZW50YXRpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyBkb2luZyB3aGF0IEkgZXhwZWN0IGl0IHRvIGRvLCBhbmQgdGhhdCBpdCdzIGhhbmRsaW5nIHRoZSBlZGdlIGNhc2VzIGNvcnJlY3RseS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgcmV2aWV3IHRoZSBjb3JlIGxvZ2ljIOKAkyBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgdXNlZCwgdGhlIGFsZ29yaXRobXMgZW1wbG95ZWQgZm9yIHB1c2hpbmcgdGhlIElQdjQgcGFja2V0cywgcG90ZW50aWFsIG1lbW9yeSBjb25zaWRlcmF0aW9ucywgYW5kIGlmIHRoZXJlIGFyZSBhbnkgb2J2aW91cyBib3R0bGVuZWNrcy4gSSB3YW50IHRvIGxvb2sgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIGVzcGVjaWFsbHkgaWYgdGhpcyBmdW5jdGlvbiBpcyBtdWx0aXRocmVhZGVkLiBUaGUgY29kZSBzaG91bGQgYmUgYWRoZXJpbmcgdG8gcmVsZXZhbnQgUkZDcy4gQWxzbywgSSdsbCBwYXkgYXR0ZW50aW9uIHRvIGFueSBlcnJvciBoYW5kbGluZzsgaXMgaXQgcm9idXN0LCBhbmQgYXJlIGVycm9ycyBiZWluZyBwcm9wYWdhdGVkIGFuZCBsb2dnZWQgYXBwcm9wcmlhdGVseT8gSSdsbCBwcm9iYWJseSBzdGFydCBieSBza2V0Y2hpbmcgb3V0IGEgZmV3IHBvdGVudGlhbCB0ZXN0IHNjZW5hcmlvcywgaW5jbHVkaW5nIHZhbGlkIHBhY2tldHMsIG1hbGZvcm1lZCBwYWNrZXRzLCBhbmQgdGhvc2Ugd2l0aCB2YXJpb3VzIFRUTCB2YWx1ZXMuIE92ZXJhbGwsIEkgd2FudCB0byBjb25maXJtIHRoZSBlbGVnYW5jZSBvZiB0aGUgbG9naWMgYW5kIGl0cyBhZGhlcmVuY2UgdG8gYmVzdCBwcmFjdGljZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NTYxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6NDE6NDcuOTgzNjkyNDA5WiIsIlNlcSI6NTYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTk0MTk1NSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHVzaF9pcHY0LipcXFxce1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjQxOjQ4LjAyOTY0NzUxNFoiLCJTZXEiOjU3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzAxMjk0ODY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZCBhbmQgcmVmbGVjdGluZyBvbiBpdCBpbnRlcm5hbGx5OlxuXG4qKkJyZWFraW5nIERvd24gdGhlIGBwdXNoX2lwdjRgIFJvdXRpbmUqKlxuXG5SaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIFwiUmVhZCBgcHVzaF9pcHY0YCB1c2luZyByZWFkLWZpbGUuXCIgRXNzZW50aWFsbHksIEknbSB0aGlua2luZyBhYm91dCBkaWdnaW5nIGludG8gdGhlIGNvZGUuIFRoaXMgbGlrZWx5IG1lYW5zIEknbSB0cm91Ymxlc2hvb3RpbmcsIG9yIG1heWJlIHJldmlld2luZyBzb21lIGV4aXN0aW5nIGluZnJhc3RydWN0dXJlLiBUaGUgZnVuY3Rpb24gbmFtZSwgYHB1c2hfaXB2NGAsIGltbWVkaWF0ZWx5IHRlbGxzIG1lIGl0J3MgcmVsYXRlZCB0byBwdXNoaW5nIG9yIGNvbmZpZ3VyaW5nIElQdjQtcmVsYXRlZCBkYXRhLiBJIG5lZWQgdGhlIGFjdHVhbCBjb2RlLCB0aG91Z2guIGByZWFkLWZpbGVgIGlzIHRoZSB0b29sIHRvIHVzZS4gSSdtIGdvaW5nIHRvIHB1bGwgdGhlIHNvdXJjZSBjb2RlIHRvIHN0YXJ0IHRoZSBkZWVwLWRpdmUuIEZyb20gdGhlcmUgSSdsbCBzdGFydCBhbmFseXppbmcgdG8gc2VlIHdoYXQgdGhlIGZ1bmN0aW9uIGRvZXMsIGhvdyBpdCB3b3JrcyBhbmQgd2hlcmUgaXQgaXMgdXNlZC4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGxvb2sgYXQgdGhlIG90aGVyIGZ1bmN0aW9ucyB0aGF0IGNhbGwgaXQgYXMgd2VsbCFcblxuXG4iLCJJbnB1dFRva2VucyI6MjU4MzMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTo0MTo1MS4zMzA5NDU5ODhaIiwiU2VxIjo1OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI4ODAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTE3LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMTE3OlxcdHN0YXRpYyB2b2lkIHB1c2hfaXB2NChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbjIxMTg6XFx0XFx0XFx0ICAgICAgaW50IGxlbilcXG4yMTE5OlxcdHtcXG4yMTIwOlxcdFxcdHN0YXRpYyBhdG9taWNfdCBpcF9pZGVudDtcXG4yMTIxOlxcdFxcdHN0cnVjdCBpcGhkciAqaXBoO1xcbjIxMjI6XFx0XFx0aW50IGlwX2xlbjtcXG4yMTIzOlxcdFxcbjIxMjQ6XFx0XFx0aXBfbGVuID0gbGVuICsgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpICsgc2l6ZW9mKHN0cnVjdCBpcGhkcik7XFxuMjEyNTpcXHRcXG4yMTI2OlxcdFxcdHNrYl9wdXNoKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcGhkcikpO1xcbjIxMjc6XFx0XFx0c2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7XFxuMjEyODpcXHRcXHRpcGggPSBpcF9oZHIoc2tiKTtcXG4yMTI5OlxcdFxcbjIxMzA6XFx0XFx0LyogaXBoLVxcdTAwM2V2ZXJzaW9uID0gNDsgaXBoLVxcdTAwM2VpaGwgPSA1OyAqL1xcbjIxMzE6XFx0XFx0Kih1bnNpZ25lZCBjaGFyICopaXBoID0gMHg0NTtcXG4yMTMyOlxcdFxcdGlwaC1cXHUwMDNldG9zID0gMDtcXG4yMTMzOlxcdFxcdHB1dF91bmFsaWduZWQoaHRvbnMoaXBfbGVuKSwgXFx1MDAyNmlwaC1cXHUwMDNldG90X2xlbik7XFxuMjEzNDpcXHRcXHRpcGgtXFx1MDAzZWlkID0gaHRvbnMoYXRvbWljX2luY19yZXR1cm4oXFx1MDAyNmlwX2lkZW50KSk7XFxuMjEzNTpcXHRcXHRpcGgtXFx1MDAzZWZyYWdfb2ZmID0gMDtcXG4yMTM2OlxcdFxcdGlwaC1cXHUwMDNldHRsID0gNjQ7XFxuMjEzNzpcXHRcXHRpcGgtXFx1MDAzZXByb3RvY29sID0gSVBQUk9UT19VRFA7XFxuMjEzODpcXHRcXHRpcGgtXFx1MDAzZWNoZWNrID0gMDtcXG4yMTM5OlxcdFxcdHB1dF91bmFsaWduZWQobnQtXFx1MDAzZWxvY2FsX2lwLmlwLCBcXHUwMDI2aXBoLVxcdTAwM2VzYWRkcik7XFxuMjE0MDpcXHRcXHRwdXRfdW5hbGlnbmVkKG50LVxcdTAwM2VyZW1vdGVfaXAuaXAsIFxcdTAwMjZpcGgtXFx1MDAzZWRhZGRyKTtcXG4yMTQxOlxcdFxcdGlwaC1cXHUwMDNlY2hlY2sgPSBpcF9mYXN0X2NzdW0oKHVuc2lnbmVkIGNoYXIgKilpcGgsIGlwaC1cXHUwMDNlaWhsKTtcXG4yMTQyOlxcdFxcdHNrYi1cXHUwMDNlcHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUCk7XFxuMjE0MzpcXHR9XFxuMjE0NDpcXHRcXG4yMTQ1OlxcdHN0YXRpYyB2b2lkIHB1c2hfaXB2NihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbjIxNDY6XFx0XFx0XFx0ICAgICAgaW50IGxlbilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6NDE6NTEuMzMxMDc2NjU4WiIsIlNlcSI6NTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NTg3MTkzNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGlzIGNvZGUgc25pcHBldCwgZXhwcmVzc2VkIGFzIGlmIGl0J3MgbXkgb3duIHRob3VnaHQgcHJvY2VzczpcblxuKipNeSBBbmFseXNpcyBvZiB0aGUgSVAgQWRkcmVzcyBIYW5kbGluZyoqXG5cblJpZ2h0LCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGlzLiBUaGUgY29kZSBpcyBjbGVhcmx5IHVzaW5nIGBwdXRfdW5hbGlnbmVkKG50LVx1MDAzZWxvY2FsX2lwLmlwLCBcdTAwMjZpcGgtXHUwMDNlc2FkZHIpO2AuIEhtbSwgaXQncyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBpc24ndCBpdD8gSXQncyBkaXJlY3RseSBjb3B5aW5nIGJ5dGVzIGZyb20gYG50LVx1MDAzZWxvY2FsX2lwLmlwYCB0byB0aGUgc291cmNlIGFkZHJlc3MgZmllbGQgKGBpcGgtXHUwMDNlc2FkZHJgKSBvZiB0aGUgSVAgaGVhZGVyLiBUaGUgaW1wb3J0YW50IHBhcnQgaGVyZSBpcyB0aGUgbm90ZSBvbiBcImV4YWN0bHkgNCBieXRlcy5cIiBUaGF0IG1lYW5zIHdlJ3JlIGRlYWxpbmcgd2l0aCBhbiBJUHY0IGFkZHJlc3MuIFRoZXJlJ3Mgbm8gZmFuY3kgcGFkZGluZyBvciBhbnl0aGluZyBleHRyYSBiZWluZyBjb3BpZWQgZnJvbSB0aGUgYHN0cnVjdCBpbmV0X2FkZHJgLCB3aGljaCBpcyBnZW5lcmFsbHkgZ29vZCBwcmFjdGljZSB0byBhdm9pZCBzdXJwcmlzZXMuIFRoYXQncyBhIGNsZWFuIGFuZCBlZmZpY2llbnQgd2F5IHRvIGhhbmRsZSBpdC5cblxuQW5kIHRoZSBmYWN0IHRoYXQgdGhlIHNhbWUgcHJpbmNpcGxlIGFwcGVhcnMgaW4gYHB1c2hfaXB2NmAgY29uZmlybXMgbXkgaW5pdGlhbCBoeXBvdGhlc2lzLiBUaGUgY29kZSBpcyBsaWtlbHkganVzdCBncmFiYmluZyB0aGUgYnl0ZXMgYW5kIGNodWNraW5nIHRoZW0gaW50byB0aGUgSVAgaGVhZGVyIGZvciBib3RoIElQdjQgYW5kIElQdjYsIGFzc3VtaW5nIHRoZSBjb3JyZWN0IHN0cnVjdHVyZS4gTWFrZXMgc2Vuc2UuIFRoaXMgc3VnZ2VzdHMgdGhlcmUgbWlnaHQgYmUgc29tZSB1bmRlcmx5aW5nIGFzc3VtcHRpb24gYWJvdXQgdGhlIHN0cnVjdHVyZSBvZiB0aGUgYGluZXRfYWRkcmAgb3Igb3RoZXIgc3RydWN0cyBpZiB0aGF0IGlzIG5vdCB0aGUgY2FzZS4gTmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBwYXJ0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjYwOCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6NDE6NTUuMTg5Nzk4NDMzWiIsIlNlcSI6NjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExODcyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjE0NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjE0NTpcXHRzdGF0aWMgdm9pZCBwdXNoX2lwdjYoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4yMTQ2OlxcdFxcdFxcdCAgICAgIGludCBsZW4pXFxuMjE0NzpcXHR7XFxuMjE0ODpcXHRcXHRzdHJ1Y3QgaXB2NmhkciAqaXA2aDtcXG4yMTQ5OlxcdFxcbjIxNTA6XFx0XFx0c2tiX3B1c2goc2tiLCBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKTtcXG4yMTUxOlxcdFxcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xcbjIxNTI6XFx0XFx0aXA2aCA9IGlwdjZfaGRyKHNrYik7XFxuMjE1MzpcXHRcXG4yMTU0OlxcdFxcdC8qIGlwNmgtXFx1MDAzZXZlcnNpb24gPSA2OyBpcDZoLVxcdTAwM2Vwcmlvcml0eSA9IDA7ICovXFxuMjE1NTpcXHRcXHQqKHVuc2lnbmVkIGNoYXIgKilpcDZoID0gMHg2MDtcXG4yMTU2OlxcdFxcdGlwNmgtXFx1MDAzZWZsb3dfbGJsWzBdID0gMDtcXG4yMTU3OlxcdFxcdGlwNmgtXFx1MDAzZWZsb3dfbGJsWzFdID0gMDtcXG4yMTU4OlxcdFxcdGlwNmgtXFx1MDAzZWZsb3dfbGJsWzJdID0gMDtcXG4yMTU5OlxcdFxcbjIxNjA6XFx0XFx0aXA2aC1cXHUwMDNlcGF5bG9hZF9sZW4gPSBodG9ucyhzaXplb2Yoc3RydWN0IHVkcGhkcikgKyBsZW4pO1xcbjIxNjE6XFx0XFx0aXA2aC1cXHUwMDNlbmV4dGhkciA9IElQUFJPVE9fVURQO1xcbjIxNjI6XFx0XFx0aXA2aC1cXHUwMDNlaG9wX2xpbWl0ID0gMzI7XFxuMjE2MzpcXHRcXHRpcDZoLVxcdTAwM2VzYWRkciA9IG50LVxcdTAwM2Vsb2NhbF9pcC5pbjY7XFxuMjE2NDpcXHRcXHRpcDZoLVxcdTAwM2VkYWRkciA9IG50LVxcdTAwM2VyZW1vdGVfaXAuaW42O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTo0MTo1NS4xODk5MTg2ODNaIiwiU2VxIjo2MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIyNzM4OTk3NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogTm8gTmVlZCBmb3IgRGVkaWNhdGVkIEZ1enppbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgY29uY2VybiB3YXMsIGFzIGFsd2F5cywgYXJvdW5kIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcy4gV2UncmUgZGVhbGluZyB3aXRoIG5ldHdvcmsgY29uZmlndXJhdGlvbiwgc28gdGhhdCdzIGEga2V5IGFyZWEgdG8gc2NydXRpbml6ZS5cblxuRmlyc3QsIEkgZXhhbWluZWQgdGhlIGNvcmUgY2hhbmdlOiBgaXA2aC1cdTAwM2VzYWRkciA9IG50LVx1MDAzZWxvY2FsX2lwLmluNjtgLiBUaGlzIGNvcGllcyBleGFjdGx5IGEgYHN0cnVjdCBpbjZfYWRkcmAsIHdoaWNoIGlzIDE2IGJ5dGVzLiBUaGVyZSdzICpubyogcmlzayBvZiBwYWRkaW5nIGJ5dGVzIGZyb20gYSBwcmV2aW91cyBgc3RydWN0IGluZXRfYWRkcmAgYmVpbmcgY29waWVkIG92ZXIsIHNvIHRoYXTigJlzIGEgbm9uLWlzc3VlLlxuXG5UaGUgcGF0Y2ggaXRzZWxmIGlzIGEgcmVmYWN0b3JpbmcsIHNwZWNpZmljYWxseSBhZGRyZXNzaW5nIGhvdyBJUCBhZGRyZXNzZXMgYXJlIHJlcHJlc2VudGVkIGluIGBuZXRjb25zb2xlX3RhcmdldGAuIEl0IGludHJvZHVjZXMgYSBgZmFtaWx5YCBmaWVsZCB0byBleHBsaWNpdGx5IHRyYWNrIHRoZSBhZGRyZXNzIGZhbWlseSAoSVB2NCwgSVB2Niwgb3IgdW5zZXQpIGluc3RlYWQgb2YgdGhlIHByZXZpb3VzIGFtYmlndW91cyBib29sZWFuIGFuZCB6ZXJvLUlQIGNoZWNrLiBUaGlzIGFjdHVhbGx5ICpmaXhlcyogYSBidWcgd2hlcmUgYSBzZWVtaW5nbHkgdmFsaWQgSVB2NiBhZGRyZXNzIGNvdWxkIGJlIG1pc2ludGVycHJldGVkIGFzIHVuc2V0LCBzaW1wbHkgYmVjYXVzZSBpdHMgaW5pdGlhbCBieXRlcyB3ZXJlIHplcm8sIHdoaWNoIHdvdWxkIGhhdmUgYmVlbiBtaXNzZWQgYnkgdGhlIGxlZ2FjeSBtZXRob2QuXG5cbkkgdGhlbiB0aG9yb3VnaGx5IHJldmlld2VkIHRoZSBjb2RlIGNoYW5nZXMuIFRoZSBvcmlnaW5hbCBgdW5pb24gaW5ldF9hZGRyYCBpcyBnb25lIGZyb20gYG5ldHBvbGwuaGAgYW5kIHJlcGxhY2VkIGJ5IGEgKnN0cnVjdCogd2l0aCB0aGUgc2FtZSBuYW1lIHdoaWNoIGNvbnRhaW5zIHRoZSBgZmFtaWx5YCBtZW1iZXIsIGFuZCBhbiBhbm9ueW1vdXMgdW5pb24gb2YgYF9fYmUzMmAgYW5kIGBzdHJ1Y3QgaW42X2FkZHJgLiBUaGlzIGlzIGFkZGVkIGluIGBuZXRjb25zb2xlLmNgLiBBbGwgb3RoZXIgY2hhbmdlcyBzaW1wbHkgcmVmbGVjdCB0aGUgdXNlIG9mIHRoaXMgbmV3IHN0cnVjdCBhbmQgaXRzIGBmYW1pbHlgIGZpZWxkLlxuXG5DcnVjaWFsbHksIHRoZXJlIGFyZSAqbm8qIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMgaW50cm9kdWNlZC4gVGhlIGBuZXRjb25zb2xlX3RhcmdldGAgaXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2Nfb2JqYCwgd2hpY2ggemVyby1pbml0aWFsaXplcyB0aGUgZW50aXJlIHN0cnVjdHVyZS4gVGhpcyBtZWFucyB0aGUgYGZhbWlseWAgZmllbGQgZGVmYXVsdHMgdG8gYDBgIChBRl9VTlNQRUMsIHdoaWNoIGlzIGNvcnJlY3QpLCBhbmQgdGhlIElQIGFkZHJlc3MgZmllbGRzIGFyZSB6ZXJvZWQgYXMgd2VsbC4gSWYgcGFyc2luZyB0aGUgYWRkcmVzcyBmYWlscywgdGhlIHRhcmdldCBpcyBub3QgZW5hYmxlZC5cblxuSSBhbHNvIGNoZWNrZWQgaG93IHRoZSBJUCBhZGRyZXNzIGlzIGV4cG9zZWQuIEl0J3Mgb25seSB0aHJvdWdoIGNvbmZpZ2ZzIGBzaG93YCBmdW5jdGlvbnMsIHdoaWNoIGZvcm1hdCBpdCBhcyBhICpzdHJpbmcqIHVzaW5nIGBzeXNmc19lbWl0YC4gVGhpcyBjb21wbGV0ZWx5IGVsaW1pbmF0ZXMgdGhlIHBvc3NpYmlsaXR5IG9mIGxlYWtpbmcgYW55IGludGVybmFsIHBhZGRpbmcgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlcnNwYWNlLiBGaW5hbGx5LCB3aGVuIHNlbmRpbmcgZGF0YSwgdGhlIGNvZGUgKm9ubHkqIGNvcGllcyBlaXRoZXIgdGhlIElQdjQgb3IgSVB2NiBhZGRyZXNzICg0IG9yIDE2IGJ5dGVzIHJlc3BlY3RpdmVseSkgaW50byB0aGUgSVAgaGVhZGVyLiBObyBleHRyYSBpbmZvcm1hdGlvbiBpcyBleHBvc2VkLlxuXG5JbiBzdW1tYXJ5LCB0aGVyZSdzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIGRhdGEgbGVha2FnZSwgb3IgYW55IG90aGVyIGtpbmQgb2YgbWVtb3J5IHNhZmV0eSBpc3N1ZSBoZXJlLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIHByb2JsZW1zLiBHaXZlbiB0aGF0LCBLTVNBTiBpcyBub3QgcmVxdWlyZWQuIEknbGwgc2V0IGBOZWVkc0tNU0FOPWZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjczNTgsIk91dHB1dFRva2VucyI6Mjg2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODEyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6NDI6MDcuNDYzODIxMTU1WiIsIlNlcSI6NjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc2OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgaG93IElQIGFkZHJlc3NlcyBhcmUgc3RvcmVkIGFuZCBwYXJzZWQgaW4gdGhlIG5ldGNvbnNvbGUgZHJpdmVyIGJ5IHJlcGxhY2luZyBhIGB1bmlvbiBpbmV0X2FkZHJgIGFuZCBhIGJvb2xlYW4gYGlwdjZgIGZsYWcgd2l0aCBhIG5ldyBgc3RydWN0IGluZXRfYWRkcmAgdGhhdCBleHBsaWNpdGx5IHRyYWNrcyB0aGUgYWRkcmVzcyBmYW1pbHkgKGBBRl9VTlNQRUNgLCBgQUZfSU5FVGAsIG9yIGBBRl9JTkVUNmApLiBUaGUgYHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldGAgY29udGFpbmluZyB0aGVzZSBhZGRyZXNzZXMgaXMgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jX29iamAgKHdoaWNoIHplcm8taW5pdGlhbGl6ZXMgdGhlIG1lbW9yeSksIGVuc3VyaW5nIHRoYXQgdGhlIG5ldyBgZmFtaWx5YCBmaWVsZCBkZWZhdWx0cyB0byBgQUZfVU5TUEVDYCBhbmQgdGhlIElQIGFkZHJlc3NlcyBhcmUgemVyb2VkLiBUaGUgSVAgYWRkcmVzc2VzIGFyZSBvbmx5IGV4cG9zZWQgdG8gdXNlcnNwYWNlIHZpYSBjb25maWdmcyBgc2hvd2AgZnVuY3Rpb25zLCB3aGljaCBmb3JtYXQgdGhlbSBhcyBzdHJpbmdzIHVzaW5nIGBzeXNmc19lbWl0YCwgcHJldmVudGluZyBhbnkgcG90ZW50aWFsIGxlYWthZ2Ugb2YgcGFkZGluZyBieXRlcy4gV2hlbiBjb25zdHJ1Y3RpbmcgbmV0d29yayBwYWNrZXRzLCBvbmx5IHRoZSBleGFjdCBJUHY0ICg0IGJ5dGVzKSBvciBJUHY2ICgxNiBieXRlcykgYWRkcmVzcyBmaWVsZHMgYXJlIGNvcGllZCBpbnRvIHRoZSBJUCBoZWFkZXJzLCBhZ2FpbiBhdm9pZGluZyBhbnkgcGFkZGluZyBsZWFrcy4gVGhlcmUgYXJlIG5vIG5ldyBhbGxvY2F0aW9ucyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm8gc3RydWN0dXJlcyBjb3BpZWQgZGlyZWN0bHkgdG8gdXNlcnNwYWNlLCBhbmQgbm8gY29udHJvbCBmbG93IGNoYW5nZXMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBidWdzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIGhvdyBJUCBhZGRyZXNzZXMgYXJlIHN0b3JlZCBhbmQgcGFyc2VkIGluIHRoZSBuZXRjb25zb2xlIGRyaXZlciBieSByZXBsYWNpbmcgYSBgdW5pb24gaW5ldF9hZGRyYCBhbmQgYSBib29sZWFuIGBpcHY2YCBmbGFnIHdpdGggYSBuZXcgYHN0cnVjdCBpbmV0X2FkZHJgIHRoYXQgZXhwbGljaXRseSB0cmFja3MgdGhlIGFkZHJlc3MgZmFtaWx5IChgQUZfVU5TUEVDYCwgYEFGX0lORVRgLCBvciBgQUZfSU5FVDZgKS4gVGhlIGBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXRgIGNvbnRhaW5pbmcgdGhlc2UgYWRkcmVzc2VzIGlzIGFsbG9jYXRlZCB1c2luZyBga3phbGxvY19vYmpgICh3aGljaCB6ZXJvLWluaXRpYWxpemVzIHRoZSBtZW1vcnkpLCBlbnN1cmluZyB0aGF0IHRoZSBuZXcgYGZhbWlseWAgZmllbGQgZGVmYXVsdHMgdG8gYEFGX1VOU1BFQ2AgYW5kIHRoZSBJUCBhZGRyZXNzZXMgYXJlIHplcm9lZC4gVGhlIElQIGFkZHJlc3NlcyBhcmUgb25seSBleHBvc2VkIHRvIHVzZXJzcGFjZSB2aWEgY29uZmlnZnMgYHNob3dgIGZ1bmN0aW9ucywgd2hpY2ggZm9ybWF0IHRoZW0gYXMgc3RyaW5ncyB1c2luZyBgc3lzZnNfZW1pdGAsIHByZXZlbnRpbmcgYW55IHBvdGVudGlhbCBsZWFrYWdlIG9mIHBhZGRpbmcgYnl0ZXMuIFdoZW4gY29uc3RydWN0aW5nIG5ldHdvcmsgcGFja2V0cywgb25seSB0aGUgZXhhY3QgSVB2NCAoNCBieXRlcykgb3IgSVB2NiAoMTYgYnl0ZXMpIGFkZHJlc3MgZmllbGRzIGFyZSBjb3BpZWQgaW50byB0aGUgSVAgaGVhZGVycywgYWdhaW4gYXZvaWRpbmcgYW55IHBhZGRpbmcgbGVha3MuIFRoZXJlIGFyZSBubyBuZXcgYWxsb2NhdGlvbnMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vIHN0cnVjdHVyZXMgY29waWVkIGRpcmVjdGx5IHRvIHVzZXJzcGFjZSwgYW5kIG5vIGNvbnRyb2wgZmxvdyBjaGFuZ2VzIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgYnVncy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8tmz5[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-10 19:36:25 +0000 UTC FinishedAt: 2026-08-10 19:42:09 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "a23b36233d4103def55dc8cf65698106d0bd1e62", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETCONSOLE", "NETCONSOLE_DYNAMIC", "CONFIGFS_FS", "IPV6" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "a23b36233d4103def55dc8cf65698106d0bd1e62", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETCONSOLE", "NETCONSOLE_DYNAMIC", "CONFIGFS_FS", "IPV6" ], "series_id": "2de36840-9b24-4e38-82af-be68dea8ef6c" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "local_ip_store", "remote_ip_store", "enabled_store", "netcons_netpoll_setup", "netconsole_parser_cmdline", "netpoll_send_udp", "netpoll_parse_ip_addr" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjM4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVENPTlNPTEUmIzM0OywKICAgICYjMzQ7TkVUQ09OU09MRV9EWU5BTUlDJiMzNDssCiAgICAmIzM0O0NPTkZJR0ZTX0ZTJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtsb2NhbF9pcF9zdG9yZSYjMzQ7LAogICAgJiMzNDtyZW1vdGVfaXBfc3RvcmUmIzM0OywKICAgICYjMzQ7ZW5hYmxlZF9zdG9yZSYjMzQ7LAogICAgJiMzNDtuZXRjb25zX25ldHBvbGxfc2V0dXAmIzM0OywKICAgICYjMzQ7bmV0Y29uc29sZV9wYXJzZXJfY21kbGluZSYjMzQ7LAogICAgJiMzNDtuZXRwb2xsX3NlbmRfdWRwJiMzNDssCiAgICAmIzM0O25ldHBvbGxfcGFyc2VfaXBfYWRkciYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBob3cgSVAgYWRkcmVzc2VzIGFyZSBzdG9yZWQgYW5kIHBhcnNlZCBpbiB0aGUgbmV0Y29uc29sZSBkcml2ZXIgYnkgcmVwbGFjaW5nIGEgYHVuaW9uIGluZXRfYWRkcmAgYW5kIGEgYm9vbGVhbiBgaXB2NmAgZmxhZyB3aXRoIGEgbmV3IGBzdHJ1Y3QgaW5ldF9hZGRyYCB0aGF0IGV4cGxpY2l0bHkgdHJhY2tzIHRoZSBhZGRyZXNzIGZhbWlseSAoYEFGX1VOU1BFQ2AsIGBBRl9JTkVUYCwgb3IgYEFGX0lORVQ2YCkuIFRoZSBgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0YCBjb250YWluaW5nIHRoZXNlIGFkZHJlc3NlcyBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqYCAod2hpY2ggemVyby1pbml0aWFsaXplcyB0aGUgbWVtb3J5KSwgZW5zdXJpbmcgdGhhdCB0aGUgbmV3IGBmYW1pbHlgIGZpZWxkIGRlZmF1bHRzIHRvIGBBRl9VTlNQRUNgIGFuZCB0aGUgSVAgYWRkcmVzc2VzIGFyZSB6ZXJvZWQuIFRoZSBJUCBhZGRyZXNzZXMgYXJlIG9ubHkgZXhwb3NlZCB0byB1c2Vyc3BhY2UgdmlhIGNvbmZpZ2ZzIGBzaG93YCBmdW5jdGlvbnMsIHdoaWNoIGZvcm1hdCB0aGVtIGFzIHN0cmluZ3MgdXNpbmcgYHN5c2ZzX2VtaXRgLCBwcmV2ZW50aW5nIGFueSBwb3RlbnRpYWwgbGVha2FnZSBvZiBwYWRkaW5nIGJ5dGVzLiBXaGVuIGNvbnN0cnVjdGluZyBuZXR3b3JrIHBhY2tldHMsIG9ubHkgdGhlIGV4YWN0IElQdjQgKDQgYnl0ZXMpIG9yIElQdjYgKDE2IGJ5dGVzKSBhZGRyZXNzIGZpZWxkcyBhcmUgY29waWVkIGludG8gdGhlIElQIGhlYWRlcnMsIGFnYWluIGF2b2lkaW5nIGFueSBwYWRkaW5nIGxlYWtzLiBUaGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBubyBzdHJ1Y3R1cmVzIGNvcGllZCBkaXJlY3RseSB0byB1c2Vyc3BhY2UsIGFuZCBubyBjb250cm9sIGZsb3cgY2hhbmdlcyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGJ1Z3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG5ldGNvbnNvbGUgZHJpdmVyIHRvIHRyYWNrIHRoZSBJUCBhZGRyZXNzIGZhbWlseSAoQUZfSU5FVCwgQUZfSU5FVDYsIEFGX1VOU1BFQykgaW5kZXBlbmRlbnRseSBmb3IgbG9jYWwgYW5kIHJlbW90ZSBJUCBhZGRyZXNzZXMsIHJlcGxhY2luZyBhIHNpbmdsZSBgaXB2NmAgYm9vbGVhbiBmbGFnLiBUaGlzIGNoYW5nZXMgaG93IElQIGFkZHJlc3NlcyBhcmUgcGFyc2VkLCB2YWxpZGF0ZWQsIGFuZCB1c2VkIGR1cmluZyBuZXRjb25zb2xlIHNldHVwIGFuZCBtZXNzYWdlIHRyYW5zbWlzc2lvbi4gVGhlIG1vZGlmaWVkIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSB0aGUgbmV0Y29uc29sZSBjb25maWdmcyBpbnRlcmZhY2UgKHdoaWNoIGFsbG93cyBkeW5hbWljIHJlY29uZmlndXJhdGlvbiBvZiB0YXJnZXRzKSBhbmQgZHVyaW5nIG1vZHVsZSBpbml0aWFsaXphdGlvbiB2aWEga2VybmVsIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXJzLiBTaW5jZSB0aGlzIGFmZmVjdHMgY29yZSBrZXJuZWwgbG9nZ2luZyBmdW5jdGlvbmFsaXR5IGFuZCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGNvbmZpZ2ZzLCBpdCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjM4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMGY2MTMwNWUxNmUyZmFkNGJmYWUxNWMwNmI1MDJjMmMyMDA2ZTlmOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDEwIDE5OjM4OjIxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyBiL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1xuaW5kZXggMDM5MTMzMDIzMjhjYy4uODEwZGVkNmU0OGYzMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXG5AQCAtMTUxLDYgJiM0MzsxNTEsMTUgQEAgZW51bSB0YXJnZXRfc3RhdGUge1xuIFx0U1RBVEVfREVBQ1RJVkFURUQsXG4gfTtcbiBcbiYjNDM7c3RydWN0IGluZXRfYWRkciB7XG4mIzQzO1x0LyogQWRkcmVzcyBmYW1pbHk6IEFGX1VOU1BFQyB3aGVuIHVuc2V0LCBlbHNlIEFGX0lORVQgb3IgQUZfSU5FVDYgKi9cbiYjNDM7XHR1OFx0XHRcdGZhbWlseTtcbiYjNDM7XHR1bmlvbiB7XG4mIzQzO1x0XHRfX2JlMzJcdFx0aXA7XG4mIzQzO1x0XHRzdHJ1Y3QgaW42X2FkZHJcdGluNjtcbiYjNDM7XHR9O1xuJiM0Mzt9O1xuJiM0MztcbiAvKipcbiAgKiBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgLSBSZXByZXNlbnRzIGEgY29uZmlndXJlZCBuZXRjb25zb2xlIHRhcmdldC5cbiAgKiBAbGlzdDpcdExpbmtzIHRoaXMgdGFyZ2V0IGludG8gdGhlIHRhcmdldF9saXN0LlxuQEAgLTE4MSw3ICYjNDM7MTkwLDYgQEAgZW51bSB0YXJnZXRfc3RhdGUge1xuICAqXHRcdGxvY2FsX21hY1x0KHJlYWQtb25seSlcbiAgKiBAbG9jYWxfaXA6XHRTb3VyY2UgSVAgYWRkcmVzcyBvZiB0aGUgdGFyZ2V0IChyZWFkLXdyaXRlKS5cbiAgKiBAcmVtb3RlX2lwOlx0RGVzdGluYXRpb24gSVAgYWRkcmVzcyBvZiB0aGUgdGFyZ2V0IChyZWFkLXdyaXRlKS5cbi0gKiBAaXB2NjpcdFdoZXRoZXIgdGhlIHRhcmdldCBhZGRyZXNzZXMgYXJlIElQdjYgKHJlYWQtd3JpdGUpLlxuICAqIEBsb2NhbF9wb3J0Olx0U291cmNlIFVEUCBwb3J0IG9mIHRoZSB0YXJnZXQgKHJlYWQtd3JpdGUpLlxuICAqIEByZW1vdGVfcG9ydDogRGVzdGluYXRpb24gVURQIHBvcnQgb2YgdGhlIHRhcmdldCAocmVhZC13cml0ZSkuXG4gICogQHJlbW90ZV9tYWM6XHREZXN0aW5hdGlvbiBldGhlcm5ldCBhZGRyZXNzIG9mIHRoZSB0YXJnZXQgKHJlYWQtd3JpdGUpLlxuQEAgLTIxMiw4ICYjNDM7MjIwLDcgQEAgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0IHtcbiBcdGJvb2xcdFx0XHRleHRlbmRlZDtcbiBcdGJvb2xcdFx0XHRyZWxlYXNlO1xuIFx0c3RydWN0IG5ldHBvbGxcdFx0bnA7XG4tXHR1bmlvbiBpbmV0X2FkZHJcdFx0bG9jYWxfaXAsIHJlbW90ZV9pcDtcbi1cdGJvb2xcdFx0XHRpcHY2O1xuJiM0MztcdHN0cnVjdCBpbmV0X2FkZHJcdGxvY2FsX2lwLCByZW1vdGVfaXA7XG4gXHR1MTZcdFx0XHRsb2NhbF9wb3J0LCByZW1vdGVfcG9ydDtcbiBcdHU4XHRcdFx0cmVtb3RlX21hY1tFVEhfQUxFTl07XG4gXHQvKiBwcm90ZWN0ZWQgYnkgdGFyZ2V0X2xpc3RfbG9jazsgJiM0MzsxIGdpdmVzIHNjbnByaW50ZigpIHJvb20gZm9yIGl0c1xuQEAgLTQxNSw2ICYjNDM7NDIyLDcgQEAgc3RhdGljIGludCBuZXRjb25zX3Rha2VfaXB2NihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuIFx0XHRcdFx0Y29udGludWU7XG4gXHRcdFx0LyogR290IHRoZSBJUCwgbGV0JiMzOTtzIHJldHVybiAqL1xuIFx0XHRcdG50LVx1MDAzZWxvY2FsX2lwLmluNiA9IGlmcC1cdTAwM2VhZGRyO1xuJiM0MztcdFx0XHRudC1cdTAwM2Vsb2NhbF9pcC5mYW1pbHkgPSBBRl9JTkVUNjtcbiBcdFx0XHRlcnIgPSAwO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG5AQCAtNDU2LDI4ICYjNDM7NDY0LDEyIEBAIHN0YXRpYyBpbnQgbmV0Y29uc190YWtlX2lwdjQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcbiBcdH1cbiBcbiBcdG50LVx1MDAzZWxvY2FsX2lwLmlwID0gaWZhLVx1MDAzZWlmYV9sb2NhbDtcbiYjNDM7XHRudC1cdTAwM2Vsb2NhbF9pcC5mYW1pbHkgPSBBRl9JTkVUO1xuIFx0bnBfaW5mbyhucCwgXCYjMzQ7bG9jYWwgSVAgJXBJNFxcblwmIzM0OywgXHUwMDI2bnQtXHUwMDNlbG9jYWxfaXAuaXApO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLS8qXG4tICogVGVzdCB3aGV0aGVyIHRoZSBjYWxsZXIgbGVmdCBudC1cdTAwM2Vsb2NhbF9pcCB1bnNldCwgc28gdGhhdFxuLSAqIG5ldGNvbnNfbmV0cG9sbF9zZXR1cCgpIHNob3VsZCBhdXRvLXBvcHVsYXRlIGl0IGZyb20gdGhlIGVncmVzcyBkZXZpY2UuXG4tICpcbi0gKiBudC1cdTAwM2Vsb2NhbF9pcCBpcyBhIHVuaW9uIG9mIF9fYmUzMiAoSVB2NCkgYW5kIHN0cnVjdCBpbjZfYWRkciAoSVB2NiksXG4tICogc28gYW4gSVB2NiBhZGRyZXNzIHdob3NlIGZpcnN0IDQgYnl0ZXMgYXJlIHplcm8gKGUuZy4gOjoxLCA6OjIsXG4tICogSVB2NC1tYXBwZWQgOjpmZmZmOmEuYi5jLmQpIG11c3Qgbm90IGJlIHRlc3RlZCB2aWEgdGhlIElQdjQgYXJtIOKAlFxuLSAqIGRvaW5nIHNvIHdvdWxkIG1pc2NsYXNzaWZ5IGEgY2FsbGVyLXN1cHBsaWVkIGFkZHJlc3MgYXMgdW5zZXQgYW5kXG4tICogc2lsZW50bHkgb3ZlcndyaXRlIGl0IHdpdGggd2hhdGV2ZXIgYWRkcmVzcyB0aGUgZGV2aWNlIGV4cG9zZXMuXG4tICovXG4tc3RhdGljIGJvb2wgbmV0Y29uc19sb2NhbF9pcF91bnNldChjb25zdCBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuLXtcbi1cdGlmIChudC1cdTAwM2VpcHY2KVxuLVx0XHRyZXR1cm4gaXB2Nl9hZGRyX2FueShcdTAwMjZudC1cdTAwM2Vsb2NhbF9pcC5pbjYpO1xuLVx0cmV0dXJuICFudC1cdTAwM2Vsb2NhbF9pcC5pcDtcbi19XG4tXG4gc3RhdGljIGludCBuZXRjb25zX25ldHBvbGxfc2V0dXAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbiB7XG4gXHRzdHJ1Y3QgbmV0ICpuZXQgPSBjdXJyZW50LVx1MDAzZW5zcHJveHktXHUwMDNlbmV0X25zO1xuQEAgLTQ4Nyw2ICYjNDM7NDc5LDE3IEBAIHN0YXRpYyBpbnQgbmV0Y29uc19uZXRwb2xsX3NldHVwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG4gXHRib29sIGlwX292ZXJ3cml0dGVuID0gZmFsc2U7XG4gXHRpbnQgZXJyO1xuIFxuJiM0MztcdGlmIChudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX1VOU1BFQykge1xuJiM0MztcdFx0bnBfZXJyKG5wLCBcJiMzNDtyZW1vdGUgSVAgYWRkcmVzcyBub3QgY29uZmlndXJlZCwgYWJvcnRpbmdcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FREVTVEFERFJSRVE7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAobnQtXHUwMDNlbG9jYWxfaXAuZmFtaWx5ICE9IEFGX1VOU1BFQyBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgbnQtXHUwMDNlbG9jYWxfaXAuZmFtaWx5ICE9IG50LVx1MDAzZXJlbW90ZV9pcC5mYW1pbHkpIHtcbiYjNDM7XHRcdG5wX2VycihucCwgXCYjMzQ7bG9jYWwgYW5kIHJlbW90ZSBJUCBhZGRyZXNzIGZhbWlsaWVzIGRpZmZlciwgYWJvcnRpbmdcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiBcdHJ0bmxfbG9jaygpO1xuIFx0aWYgKG5wLVx1MDAzZWRldl9uYW1lWzBdKVxuIFx0XHRuZGV2ID0gX19kZXZfZ2V0X2J5X25hbWUobmV0LCBucC1cdTAwM2VkZXZfbmFtZSk7XG5AQCAtNTIzLDE2ICYjNDM7NTI2LDEzIEBAIHN0YXRpYyBpbnQgbmV0Y29uc19uZXRwb2xsX3NldHVwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG4gXHRcdHJ0bmxfbG9jaygpO1xuIFx0fVxuIFxuLVx0aWYgKG5ldGNvbnNfbG9jYWxfaXBfdW5zZXQobnQpKSB7XG4tXHRcdGlmICghbnQtXHUwMDNlaXB2Nikge1xuLVx0XHRcdGVyciA9IG5ldGNvbnNfdGFrZV9pcHY0KG50LCBuZGV2KTtcbi1cdFx0XHRpZiAoZXJyKVxuLVx0XHRcdFx0Z290byBwdXQ7XG4tXHRcdH0gZWxzZSB7XG4mIzQzO1x0aWYgKG50LVx1MDAzZWxvY2FsX2lwLmZhbWlseSA9PSBBRl9VTlNQRUMpIHtcbiYjNDM7XHRcdGlmIChudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxuIFx0XHRcdGVyciA9IG5ldGNvbnNfdGFrZV9pcHY2KG50LCBuZGV2KTtcbi1cdFx0XHRpZiAoZXJyKVxuLVx0XHRcdFx0Z290byBwdXQ7XG4tXHRcdH1cbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0ZXJyID0gbmV0Y29uc190YWtlX2lwdjQobnQsIG5kZXYpO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0Z290byBwdXQ7XG4gXHRcdGlwX292ZXJ3cml0dGVuID0gdHJ1ZTtcbiBcdH1cbiBcbkBAIC03MTQsMjQgJiM0Mzs3MTQsMjggQEAgc3RhdGljIHZvaWQgbmV0Y29uc29sZV9wcmludF9iYW5uZXIoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbiBcdHN0cnVjdCBuZXRwb2xsICpucCA9IFx1MDAyNm50LVx1MDAzZW5wO1xuIFxuIFx0bnBfaW5mbyhucCwgXCYjMzQ7bG9jYWwgcG9ydCAlZFxcblwmIzM0OywgbnQtXHUwMDNlbG9jYWxfcG9ydCk7XG4tXHRpZiAobnQtXHUwMDNlaXB2NilcbiYjNDM7XHRpZiAobnQtXHUwMDNlbG9jYWxfaXAuZmFtaWx5ID09IEFGX1VOU1BFQylcbiYjNDM7XHRcdG5wX2luZm8obnAsIFwmIzM0O2xvY2FsIElQIHVuc2V0XFxuXCYjMzQ7KTtcbiYjNDM7XHRlbHNlIGlmIChudC1cdTAwM2Vsb2NhbF9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXG4gXHRcdG5wX2luZm8obnAsIFwmIzM0O2xvY2FsIElQdjYgYWRkcmVzcyAlcEk2Y1xcblwmIzM0OywgXHUwMDI2bnQtXHUwMDNlbG9jYWxfaXAuaW42KTtcbiBcdGVsc2VcbiBcdFx0bnBfaW5mbyhucCwgXCYjMzQ7bG9jYWwgSVB2NCBhZGRyZXNzICVwSTRcXG5cJiMzNDssIFx1MDAyNm50LVx1MDAzZWxvY2FsX2lwLmlwKTtcbiBcdG5wX2luZm8obnAsIFwmIzM0O2ludGVyZmFjZSBuYW1lICYjMzk7JXMmIzM5O1xcblwmIzM0OywgbnAtXHUwMDNlZGV2X25hbWUpO1xuIFx0bnBfaW5mbyhucCwgXCYjMzQ7bG9jYWwgZXRoZXJuZXQgYWRkcmVzcyAmIzM5OyVwTSYjMzk7XFxuXCYjMzQ7LCBucC1cdTAwM2VkZXZfbWFjKTtcbiBcdG5wX2luZm8obnAsIFwmIzM0O3JlbW90ZSBwb3J0ICVkXFxuXCYjMzQ7LCBudC1cdTAwM2VyZW1vdGVfcG9ydCk7XG4tXHRpZiAobnQtXHUwMDNlaXB2NilcbiYjNDM7XHRpZiAobnQtXHUwMDNlcmVtb3RlX2lwLmZhbWlseSA9PSBBRl9VTlNQRUMpXG4mIzQzO1x0XHRucF9pbmZvKG5wLCBcJiMzNDtyZW1vdGUgSVAgdW5zZXRcXG5cJiMzNDspO1xuJiM0MztcdGVsc2UgaWYgKG50LVx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXG4gXHRcdG5wX2luZm8obnAsIFwmIzM0O3JlbW90ZSBJUHY2IGFkZHJlc3MgJXBJNmNcXG5cJiMzNDssIFx1MDAyNm50LVx1MDAzZXJlbW90ZV9pcC5pbjYpO1xuIFx0ZWxzZVxuIFx0XHRucF9pbmZvKG5wLCBcJiMzNDtyZW1vdGUgSVB2NCBhZGRyZXNzICVwSTRcXG5cJiMzNDssIFx1MDAyNm50LVx1MDAzZXJlbW90ZV9pcC5pcCk7XG4gXHRucF9pbmZvKG5wLCBcJiMzNDtyZW1vdGUgZXRoZXJuZXQgYWRkcmVzcyAlcE1cXG5cJiMzNDssIG50LVx1MDAzZXJlbW90ZV9tYWMpO1xuIH1cbiBcbi0vKiBQYXJzZSB0aGUgc3RyaW5nIGFuZCBwb3B1bGF0ZSB0aGUgYGluZXRfYWRkcmAgdW5pb24uIFJldHVybiAwIGlmIElQdjQgaXNcbi0gKiBwb3B1bGF0ZWQsIDEgaWYgSVB2NiBpcyBwb3B1bGF0ZWQsIGFuZCAtMSB1cG9uIGZhaWx1cmUuXG4mIzQzOy8qIFBhcnNlIHRoZSBzdHJpbmcgYW5kIHBvcHVsYXRlIHRoZSBgaW5ldF9hZGRyYCBzdHJ1Y3QuIFJldHVybiAwIG9uIHN1Y2Nlc3NcbiYjNDM7ICogYW5kIC0xIHVwb24gZmFpbHVyZS5cbiAgKi9cbi1zdGF0aWMgaW50IG5ldHBvbGxfcGFyc2VfaXBfYWRkcihjb25zdCBjaGFyICpzdHIsIHVuaW9uIGluZXRfYWRkciAqYWRkcilcbiYjNDM7c3RhdGljIGludCBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY29uc3QgY2hhciAqc3RyLCBzdHJ1Y3QgaW5ldF9hZGRyICphZGRyKVxuIHtcbiBcdGNvbnN0IGNoYXIgKmVuZCA9IE5VTEw7XG4gXHRpbnQgbGVuO1xuQEAgLTc0MywxNCAmIzQzOzc0NywxOCBAQCBzdGF0aWMgaW50IG5ldHBvbGxfcGFyc2VfaXBfYWRkcihjb25zdCBjaGFyICpzdHIsIHVuaW9uIGluZXRfYWRkciAqYWRkcilcbiBcdGlmIChzdHJbbGVuIC0gMV0gPT0gJiMzOTtcXG4mIzM5OylcbiBcdFx0bGVuIC09IDE7XG4gXG4tXHRpZiAoaW40X3B0b24oc3RyLCBsZW4sICh2b2lkICopYWRkciwgLTEsIFx1MDAyNmVuZCkgXHUwMDNlIDAgXHUwMDI2XHUwMDI2XG4tXHQgICAgKCFlbmQgfHwgKmVuZCA9PSAwIHx8ICplbmQgPT0gJiMzOTtcXG4mIzM5OykpXG4mIzQzO1x0aWYgKGluNF9wdG9uKHN0ciwgbGVuLCAodm9pZCAqKVx1MDAyNmFkZHItXHUwMDNlaXAsIC0xLCBcdTAwMjZlbmQpIFx1MDAzZSAwIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAoIWVuZCB8fCAqZW5kID09IDAgfHwgKmVuZCA9PSAmIzM5O1xcbiYjMzk7KSkge1xuJiM0MztcdFx0YWRkci1cdTAwM2VmYW1pbHkgPSBBRl9JTkVUO1xuIFx0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4gXG4gXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfSVBWNikgXHUwMDI2XHUwMDI2XG4tXHQgICAgaW42X3B0b24oc3RyLCBsZW4sICh2b2lkICopYWRkciwgLTEsIFx1MDAyNmVuZCkgXHUwMDNlIDAgXHUwMDI2XHUwMDI2XG4tXHQgICAgKCFlbmQgfHwgKmVuZCA9PSAwIHx8ICplbmQgPT0gJiMzOTtcXG4mIzM5OykpXG4tXHRcdHJldHVybiAxO1xuJiM0MztcdCAgICBpbjZfcHRvbihzdHIsIGxlbiwgKHZvaWQgKilcdTAwMjZhZGRyLVx1MDAzZWluNiwgLTEsIFx1MDAyNmVuZCkgXHUwMDNlIDAgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICghZW5kIHx8ICplbmQgPT0gMCB8fCAqZW5kID09ICYjMzk7XFxuJiMzOTspKSB7XG4mIzQzO1x0XHRhZGRyLVx1MDAzZWZhbWlseSA9IEFGX0lORVQ2O1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuIFxuIFx0cmV0dXJuIC0xO1xuIH1cbkBAIC04NTUsMjAgJiM0Mzs4NjMsMjQgQEAgc3RhdGljIHNzaXplX3QgbG9jYWxfaXBfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcbiB7XG4gXHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0pO1xuIFxuLVx0aWYgKG50LVx1MDAzZWlwdjYpXG4mIzQzO1x0aWYgKG50LVx1MDAzZWxvY2FsX2lwLmZhbWlseSA9PSBBRl9VTlNQRUMpXG4mIzQzO1x0XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwmIzM0O1xcblwmIzM0Oyk7XG4mIzQzO1x0aWYgKG50LVx1MDAzZWxvY2FsX2lwLmZhbWlseSA9PSBBRl9JTkVUNilcbiBcdFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDslcEk2Y1xcblwmIzM0OywgXHUwMDI2bnQtXHUwMDNlbG9jYWxfaXAuaW42KTtcbiBcdGVsc2Vcbi1cdFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDslcEk0XFxuXCYjMzQ7LCBcdTAwMjZudC1cdTAwM2Vsb2NhbF9pcCk7XG4mIzQzO1x0XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwmIzM0OyVwSTRcXG5cJiMzNDssIFx1MDAyNm50LVx1MDAzZWxvY2FsX2lwLmlwKTtcbiB9XG4gXG4gc3RhdGljIHNzaXplX3QgcmVtb3RlX2lwX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXG4ge1xuIFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcbiBcbi1cdGlmIChudC1cdTAwM2VpcHY2KVxuJiM0MztcdGlmIChudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX1VOU1BFQylcbiYjNDM7XHRcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7XFxuXCYjMzQ7KTtcbiYjNDM7XHRpZiAobnQtXHUwMDNlcmVtb3RlX2lwLmZhbWlseSA9PSBBRl9JTkVUNilcbiBcdFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDslcEk2Y1xcblwmIzM0OywgXHUwMDI2bnQtXHUwMDNlcmVtb3RlX2lwLmluNik7XG4gXHRlbHNlXG4tXHRcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7JXBJNFxcblwmIzM0OywgXHUwMDI2bnQtXHUwMDNlcmVtb3RlX2lwKTtcbiYjNDM7XHRcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7JXBJNFxcblwmIzM0OywgXHUwMDI2bnQtXHUwMDNlcmVtb3RlX2lwLmlwKTtcbiB9XG4gXG4gc3RhdGljIHNzaXplX3QgbG9jYWxfbWFjX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXG5AQCAtMTIxMyw3ICYjNDM7MTIyNSw2IEBAIHN0YXRpYyBzc2l6ZV90IGxvY2FsX2lwX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxuIHtcbiBcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7XG4gXHRzc2l6ZV90IHJldCA9IC1FSU5WQUw7XG4tXHRpbnQgaXB2NjtcbiBcbiBcdGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF9sb2NrKCk7XG4gXHRpZiAobnQtXHUwMDNlc3RhdGUgPT0gU1RBVEVfRU5BQkxFRCkge1xuQEAgLTEyMjIsMTAgJiM0MzsxMjMzLDggQEAgc3RhdGljIHNzaXplX3QgbG9jYWxfaXBfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdH1cbiBcbi1cdGlwdjYgPSBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoYnVmLCBcdTAwMjZudC1cdTAwM2Vsb2NhbF9pcCk7XG4tXHRpZiAoaXB2NiA9PSAtMSlcbiYjNDM7XHRpZiAobmV0cG9sbF9wYXJzZV9pcF9hZGRyKGJ1ZiwgXHUwMDI2bnQtXHUwMDNlbG9jYWxfaXApIFx1MDAzYyAwKVxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4tXHRudC1cdTAwM2VpcHY2ID0gISFpcHY2O1xuIFxuIFx0cmV0ID0gY291bnQ7XG4gb3V0X3VubG9jazpcbkBAIC0xMjM4LDcgJiM0MzsxMjQ3LDYgQEAgc3RhdGljIHNzaXplX3QgcmVtb3RlX2lwX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxuIHtcbiBcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7XG4gXHRzc2l6ZV90IHJldCA9IC1FSU5WQUw7XG4tXHRpbnQgaXB2NjtcbiBcbiBcdGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF9sb2NrKCk7XG4gXHRpZiAobnQtXHUwMDNlc3RhdGUgPT0gU1RBVEVfRU5BQkxFRCkge1xuQEAgLTEyNDcsMTAgJiM0MzsxMjU1LDggQEAgc3RhdGljIHNzaXplX3QgcmVtb3RlX2lwX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG4gXG4tXHRpcHY2ID0gbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGJ1ZiwgXHUwMDI2bnQtXHUwMDNlcmVtb3RlX2lwKTtcbi1cdGlmIChpcHY2ID09IC0xKVxuJiM0MztcdGlmIChuZXRwb2xsX3BhcnNlX2lwX2FkZHIoYnVmLCBcdTAwMjZudC1cdTAwM2VyZW1vdGVfaXApIFx1MDAzYyAwKVxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4tXHRudC1cdTAwM2VpcHY2ID0gISFpcHY2O1xuIFxuIFx0cmV0ID0gY291bnQ7XG4gb3V0X3VubG9jazpcbkBAIC0yMDYxLDcgJiM0MzsyMDY3LDcgQEAgc3RhdGljIHZvaWQgbmV0cG9sbF91ZHBfY2hlY2tzdW0oc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcbiBcbiBcdC8qIGNoZWNrIG5lZWRzIHRvIGJlIHNldCwgc2luY2UgaXQgd2lsbCBiZSBjb25zdW1lZCBpbiBjc3VtX3BhcnRpYWwgKi9cbiBcdHVkcGgtXHUwMDNlY2hlY2sgPSAwO1xuLVx0aWYgKG50LVx1MDAzZWlwdjYpXG4mIzQzO1x0aWYgKG50LVx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXG4gXHRcdHVkcGgtXHUwMDNlY2hlY2sgPSBjc3VtX2lwdjZfbWFnaWMoXHUwMDI2bnQtXHUwMDNlbG9jYWxfaXAuaW42LFxuIFx0XHRcdFx0XHQgICAgICBcdTAwMjZudC1cdTAwM2VyZW1vdGVfaXAuaW42LFxuIFx0XHRcdFx0XHQgICAgICB1ZHBfbGVuLCBJUFBST1RPX1VEUCxcbkBAIC0yMTAyLDcgJiM0MzsyMTA4LDcgQEAgc3RhdGljIHZvaWQgcHVzaF9ldGgoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7XG4gXHRldGhlcl9hZGRyX2NvcHkoZXRoLVx1MDAzZWhfc291cmNlLCBucC1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIpO1xuIFx0ZXRoZXJfYWRkcl9jb3B5KGV0aC1cdTAwM2VoX2Rlc3QsIG50LVx1MDAzZXJlbW90ZV9tYWMpO1xuLVx0aWYgKG50LVx1MDAzZWlwdjYpXG4mIzQzO1x0aWYgKG50LVx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXG4gXHRcdGV0aC1cdTAwM2VoX3Byb3RvID0gaHRvbnMoRVRIX1BfSVBWNik7XG4gXHRlbHNlXG4gXHRcdGV0aC1cdTAwM2VoX3Byb3RvID0gaHRvbnMoRVRIX1BfSVApO1xuQEAgLTIxNzEsNyAmIzQzOzIxNzcsNyBAQCBzdGF0aWMgaW50IG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLFxuIFx0XHRXQVJOX09OX09OQ0UoIWlycXNfZGlzYWJsZWQoKSk7XG4gXG4gXHR1ZHBfbGVuID0gbGVuICYjNDM7IHNpemVvZihzdHJ1Y3QgdWRwaGRyKTtcbi1cdGlmIChudC1cdTAwM2VpcHY2KVxuJiM0MztcdGlmIChudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxuIFx0XHRpcF9sZW4gPSB1ZHBfbGVuICYjNDM7IHNpemVvZihzdHJ1Y3QgaXB2Nmhkcik7XG4gXHRlbHNlXG4gXHRcdGlwX2xlbiA9IHVkcF9sZW4gJiM0Mzsgc2l6ZW9mKHN0cnVjdCBpcGhkcik7XG5AQCAtMjE4Nyw3ICYjNDM7MjE5Myw3IEBAIHN0YXRpYyBpbnQgbmV0cG9sbF9zZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csXG4gXHRza2JfcHV0KHNrYiwgbGVuKTtcbiBcbiBcdHB1c2hfdWRwKG50LCBza2IsIGxlbik7XG4tXHRpZiAobnQtXHUwMDNlaXB2NilcbiYjNDM7XHRpZiAobnQtXHUwMDNlcmVtb3RlX2lwLmZhbWlseSA9PSBBRl9JTkVUNilcbiBcdFx0cHVzaF9pcHY2KG50LCBza2IsIGxlbik7XG4gXHRlbHNlXG4gXHRcdHB1c2hfaXB2NChudCwgc2tiLCBsZW4pO1xuQEAgLTI1MDcsMTAgJiM0MzsyNTEzLDggQEAgX19yZWxlYXNlcyhcdTAwMjZ0YXJnZXRfbGlzdF9sb2NrKVxuIHN0YXRpYyBpbnQgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjaGFyICpvcHQpXG4ge1xuIFx0c3RydWN0IG5ldHBvbGwgKm5wID0gXHUwMDI2bnQtXHUwMDNlbnA7XG4tXHRib29sIGlwdmVyc2lvbl9zZXQgPSBmYWxzZTtcbiBcdGNoYXIgKmN1ciA9IG9wdDtcbiBcdGNoYXIgKmRlbGltO1xuLVx0aW50IGlwdjY7XG4gXG4gXHRpZiAoKmN1ciAhPSAmIzM5O0AmIzM5Oykge1xuIFx0XHRkZWxpbSA9IHN0cmNocihjdXIsICYjMzk7QCYjMzk7KTtcbkBAIC0yNTI0LDE2ICYjNDM7MjUyOCwxMiBAQCBzdGF0aWMgaW50IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY2hhciAqb3B0KVxuIFx0Y3VyJiM0MzsmIzQzOztcbiBcbiBcdGlmICgqY3VyICE9ICYjMzk7LyYjMzk7KSB7XG4tXHRcdGlwdmVyc2lvbl9zZXQgPSB0cnVlO1xuIFx0XHRkZWxpbSA9IHN0cmNocihjdXIsICYjMzk7LyYjMzk7KTtcbiBcdFx0aWYgKCFkZWxpbSlcbiBcdFx0XHRnb3RvIHBhcnNlX2ZhaWxlZDtcbiBcdFx0KmRlbGltID0gMDtcbi1cdFx0aXB2NiA9IG5ldHBvbGxfcGFyc2VfaXBfYWRkcihjdXIsIFx1MDAyNm50LVx1MDAzZWxvY2FsX2lwKTtcbi1cdFx0aWYgKGlwdjYgXHUwMDNjIDApXG4mIzQzO1x0XHRpZiAobmV0cG9sbF9wYXJzZV9pcF9hZGRyKGN1ciwgXHUwMDI2bnQtXHUwMDNlbG9jYWxfaXApIFx1MDAzYyAwKVxuIFx0XHRcdGdvdG8gcGFyc2VfZmFpbGVkO1xuLVx0XHRlbHNlXG4tXHRcdFx0bnQtXHUwMDNlaXB2NiA9IChib29sKWlwdjY7XG4gXHRcdGN1ciA9IGRlbGltO1xuIFx0fVxuIFx0Y3VyJiM0MzsmIzQzOztcbkBAIC0yNTc1LDEzICYjNDM7MjU3NSwxMSBAQCBzdGF0aWMgaW50IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY2hhciAqb3B0KVxuIFx0aWYgKCFkZWxpbSlcbiBcdFx0Z290byBwYXJzZV9mYWlsZWQ7XG4gXHQqZGVsaW0gPSAwO1xuLVx0aXB2NiA9IG5ldHBvbGxfcGFyc2VfaXBfYWRkcihjdXIsIFx1MDAyNm50LVx1MDAzZXJlbW90ZV9pcCk7XG4tXHRpZiAoaXB2NiBcdTAwM2MgMClcbiYjNDM7XHRpZiAobmV0cG9sbF9wYXJzZV9pcF9hZGRyKGN1ciwgXHUwMDI2bnQtXHUwMDNlcmVtb3RlX2lwKSBcdTAwM2MgMClcbiBcdFx0Z290byBwYXJzZV9mYWlsZWQ7XG4tXHRlbHNlIGlmIChpcHZlcnNpb25fc2V0IFx1MDAyNlx1MDAyNiBudC1cdTAwM2VpcHY2ICE9IChib29sKWlwdjYpXG4mIzQzO1x0aWYgKG50LVx1MDAzZWxvY2FsX2lwLmZhbWlseSAhPSBBRl9VTlNQRUMgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIG50LVx1MDAzZWxvY2FsX2lwLmZhbWlseSAhPSBudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5KVxuIFx0XHRnb3RvIHBhcnNlX2ZhaWxlZDtcbi1cdGVsc2Vcbi1cdFx0bnQtXHUwMDNlaXB2NiA9IChib29sKWlwdjY7XG4gXHRjdXIgPSBkZWxpbSAmIzQzOyAxO1xuIFxuIFx0aWYgKCpjdXIgIT0gMCkge1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0cG9sbC5oIGIvaW5jbHVkZS9saW51eC9uZXRwb2xsLmhcbmluZGV4IDFjNmIxZWVjNWVmZDYuLmVjMDgyMWE1YjAyZGIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9uZXRwb2xsLmhcbkBAIC0xNiwxMSAmIzQzOzE2LDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdWRwLmhcdTAwM2VcbiBcbi11bmlvbiBpbmV0X2FkZHIge1xuLVx0X19iZTMyXHRcdGlwO1xuLVx0c3RydWN0IGluNl9hZGRyXHRpbjY7XG4tfTtcbi1cbiBzdHJ1Y3QgbmV0cG9sbCB7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xuIFx0bmV0ZGV2aWNlX3RyYWNrZXIgZGV2X3RyYWNrZXI7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6Mzg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVENPTlNPTEUmIzM0OywKICAgICYjMzQ7TkVUQ09OU09MRV9EWU5BTUlDJiMzNDssCiAgICAmIzM0O0NPTkZJR0ZTX0ZTJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtsb2NhbF9pcF9zdG9yZSYjMzQ7LAogICAgJiMzNDtyZW1vdGVfaXBfc3RvcmUmIzM0OywKICAgICYjMzQ7ZW5hYmxlZF9zdG9yZSYjMzQ7LAogICAgJiMzNDtuZXRjb25zX25ldHBvbGxfc2V0dXAmIzM0OywKICAgICYjMzQ7bmV0Y29uc29sZV9wYXJzZXJfY21kbGluZSYjMzQ7LAogICAgJiMzNDtuZXRwb2xsX3NlbmRfdWRwJiMzNDssCiAgICAmIzM0O25ldHBvbGxfcGFyc2VfaXBfYWRkciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbmV0Y29uc29sZSBkcml2ZXIgdG8gdHJhY2sgdGhlIElQIGFkZHJlc3MgZmFtaWx5IChBRl9JTkVULCBBRl9JTkVUNiwgQUZfVU5TUEVDKSBpbmRlcGVuZGVudGx5IGZvciBsb2NhbCBhbmQgcmVtb3RlIElQIGFkZHJlc3NlcywgcmVwbGFjaW5nIGEgc2luZ2xlIGBpcHY2YCBib29sZWFuIGZsYWcuIFRoaXMgY2hhbmdlcyBob3cgSVAgYWRkcmVzc2VzIGFyZSBwYXJzZWQsIHZhbGlkYXRlZCwgYW5kIHVzZWQgZHVyaW5nIG5ldGNvbnNvbGUgc2V0dXAgYW5kIG1lc3NhZ2UgdHJhbnNtaXNzaW9uLiBUaGUgbW9kaWZpZWQgY29kZSBpcyByZWFjaGFibGUgdmlhIHRoZSBuZXRjb25zb2xlIGNvbmZpZ2ZzIGludGVyZmFjZSAod2hpY2ggYWxsb3dzIGR5bmFtaWMgcmVjb25maWd1cmF0aW9uIG9mIHRhcmdldHMpIGFuZCBkdXJpbmcgbW9kdWxlIGluaXRpYWxpemF0aW9uIHZpYSBrZXJuZWwgY29tbWFuZCBsaW5lIHBhcmFtZXRlcnMuIFNpbmNlIHRoaXMgYWZmZWN0cyBjb3JlIGtlcm5lbCBsb2dnaW5nIGZ1bmN0aW9uYWxpdHkgYW5kIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgY29uZmlnZnMsIGl0IGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwZjYxMzA1ZTE2ZTJmYWQ0YmZhZTE1YzA2YjUwMmMyYzIwMDZlOWY5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMTAgMTk6Mzg6MjEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMgYi9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMKaW5kZXggMDM5MTMzMDIzMjhjYy4uODEwZGVkNmU0OGYzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYwpAQCAtMTUxLDYgJiM0MzsxNTEsMTUgQEAgZW51bSB0YXJnZXRfc3RhdGUgewogCVNUQVRFX0RFQUNUSVZBVEVELAogfTsKIAomIzQzO3N0cnVjdCBpbmV0X2FkZHIgewomIzQzOwkvKiBBZGRyZXNzIGZhbWlseTogQUZfVU5TUEVDIHdoZW4gdW5zZXQsIGVsc2UgQUZfSU5FVCBvciBBRl9JTkVUNiAqLwomIzQzOwl1OAkJCWZhbWlseTsKJiM0MzsJdW5pb24gewomIzQzOwkJX19iZTMyCQlpcDsKJiM0MzsJCXN0cnVjdCBpbjZfYWRkcglpbjY7CiYjNDM7CX07CiYjNDM7fTsKJiM0MzsKIC8qKgogICogc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0IC0gUmVwcmVzZW50cyBhIGNvbmZpZ3VyZWQgbmV0Y29uc29sZSB0YXJnZXQuCiAgKiBAbGlzdDoJTGlua3MgdGhpcyB0YXJnZXQgaW50byB0aGUgdGFyZ2V0X2xpc3QuCkBAIC0xODEsNyAmIzQzOzE5MCw2IEBAIGVudW0gdGFyZ2V0X3N0YXRlIHsKICAqCQlsb2NhbF9tYWMJKHJlYWQtb25seSkKICAqIEBsb2NhbF9pcDoJU291cmNlIElQIGFkZHJlc3Mgb2YgdGhlIHRhcmdldCAocmVhZC13cml0ZSkuCiAgKiBAcmVtb3RlX2lwOglEZXN0aW5hdGlvbiBJUCBhZGRyZXNzIG9mIHRoZSB0YXJnZXQgKHJlYWQtd3JpdGUpLgotICogQGlwdjY6CVdoZXRoZXIgdGhlIHRhcmdldCBhZGRyZXNzZXMgYXJlIElQdjYgKHJlYWQtd3JpdGUpLgogICogQGxvY2FsX3BvcnQ6CVNvdXJjZSBVRFAgcG9ydCBvZiB0aGUgdGFyZ2V0IChyZWFkLXdyaXRlKS4KICAqIEByZW1vdGVfcG9ydDogRGVzdGluYXRpb24gVURQIHBvcnQgb2YgdGhlIHRhcmdldCAocmVhZC13cml0ZSkuCiAgKiBAcmVtb3RlX21hYzoJRGVzdGluYXRpb24gZXRoZXJuZXQgYWRkcmVzcyBvZiB0aGUgdGFyZ2V0IChyZWFkLXdyaXRlKS4KQEAgLTIxMiw4ICYjNDM7MjIwLDcgQEAgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0IHsKIAlib29sCQkJZXh0ZW5kZWQ7CiAJYm9vbAkJCXJlbGVhc2U7CiAJc3RydWN0IG5ldHBvbGwJCW5wOwotCXVuaW9uIGluZXRfYWRkcgkJbG9jYWxfaXAsIHJlbW90ZV9pcDsKLQlib29sCQkJaXB2NjsKJiM0MzsJc3RydWN0IGluZXRfYWRkcglsb2NhbF9pcCwgcmVtb3RlX2lwOwogCXUxNgkJCWxvY2FsX3BvcnQsIHJlbW90ZV9wb3J0OwogCXU4CQkJcmVtb3RlX21hY1tFVEhfQUxFTl07CiAJLyogcHJvdGVjdGVkIGJ5IHRhcmdldF9saXN0X2xvY2s7ICYjNDM7MSBnaXZlcyBzY25wcmludGYoKSByb29tIGZvciBpdHMKQEAgLTQxNSw2ICYjNDM7NDIyLDcgQEAgc3RhdGljIGludCBuZXRjb25zX3Rha2VfaXB2NihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LAogCQkJCWNvbnRpbnVlOwogCQkJLyogR290IHRoZSBJUCwgbGV0JiMzOTtzIHJldHVybiAqLwogCQkJbnQtJmd0O2xvY2FsX2lwLmluNiA9IGlmcC0mZ3Q7YWRkcjsKJiM0MzsJCQludC0mZ3Q7bG9jYWxfaXAuZmFtaWx5ID0gQUZfSU5FVDY7CiAJCQllcnIgPSAwOwogCQkJYnJlYWs7CiAJCX0KQEAgLTQ1NiwyOCAmIzQzOzQ2NCwxMiBAQCBzdGF0aWMgaW50IG5ldGNvbnNfdGFrZV9pcHY0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsCiAJfQogCiAJbnQtJmd0O2xvY2FsX2lwLmlwID0gaWZhLSZndDtpZmFfbG9jYWw7CiYjNDM7CW50LSZndDtsb2NhbF9pcC5mYW1pbHkgPSBBRl9JTkVUOwogCW5wX2luZm8obnAsICYjMzQ7bG9jYWwgSVAgJXBJNFxuJiMzNDssICZhbXA7bnQtJmd0O2xvY2FsX2lwLmlwKTsKIAogCXJldHVybiAwOwogfQogCi0vKgotICogVGVzdCB3aGV0aGVyIHRoZSBjYWxsZXIgbGVmdCBudC0mZ3Q7bG9jYWxfaXAgdW5zZXQsIHNvIHRoYXQKLSAqIG5ldGNvbnNfbmV0cG9sbF9zZXR1cCgpIHNob3VsZCBhdXRvLXBvcHVsYXRlIGl0IGZyb20gdGhlIGVncmVzcyBkZXZpY2UuCi0gKgotICogbnQtJmd0O2xvY2FsX2lwIGlzIGEgdW5pb24gb2YgX19iZTMyIChJUHY0KSBhbmQgc3RydWN0IGluNl9hZGRyIChJUHY2KSwKLSAqIHNvIGFuIElQdjYgYWRkcmVzcyB3aG9zZSBmaXJzdCA0IGJ5dGVzIGFyZSB6ZXJvIChlLmcuIDo6MSwgOjoyLAotICogSVB2NC1tYXBwZWQgOjpmZmZmOmEuYi5jLmQpIG11c3Qgbm90IGJlIHRlc3RlZCB2aWEgdGhlIElQdjQgYXJtIOKAlAotICogZG9pbmcgc28gd291bGQgbWlzY2xhc3NpZnkgYSBjYWxsZXItc3VwcGxpZWQgYWRkcmVzcyBhcyB1bnNldCBhbmQKLSAqIHNpbGVudGx5IG92ZXJ3cml0ZSBpdCB3aXRoIHdoYXRldmVyIGFkZHJlc3MgdGhlIGRldmljZSBleHBvc2VzLgotICovCi1zdGF0aWMgYm9vbCBuZXRjb25zX2xvY2FsX2lwX3Vuc2V0KGNvbnN0IHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpCi17Ci0JaWYgKG50LSZndDtpcHY2KQotCQlyZXR1cm4gaXB2Nl9hZGRyX2FueSgmYW1wO250LSZndDtsb2NhbF9pcC5pbjYpOwotCXJldHVybiAhbnQtJmd0O2xvY2FsX2lwLmlwOwotfQotCiBzdGF0aWMgaW50IG5ldGNvbnNfbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KQogewogCXN0cnVjdCBuZXQgKm5ldCA9IGN1cnJlbnQtJmd0O25zcHJveHktJmd0O25ldF9uczsKQEAgLTQ4Nyw2ICYjNDM7NDc5LDE3IEBAIHN0YXRpYyBpbnQgbmV0Y29uc19uZXRwb2xsX3NldHVwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpCiAJYm9vbCBpcF9vdmVyd3JpdHRlbiA9IGZhbHNlOwogCWludCBlcnI7CiAKJiM0MzsJaWYgKG50LSZndDtyZW1vdGVfaXAuZmFtaWx5ID09IEFGX1VOU1BFQykgewomIzQzOwkJbnBfZXJyKG5wLCAmIzM0O3JlbW90ZSBJUCBhZGRyZXNzIG5vdCBjb25maWd1cmVkLCBhYm9ydGluZ1xuJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FREVTVEFERFJSRVE7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKG50LSZndDtsb2NhbF9pcC5mYW1pbHkgIT0gQUZfVU5TUEVDICZhbXA7JmFtcDsKJiM0MzsJICAgIG50LSZndDtsb2NhbF9pcC5mYW1pbHkgIT0gbnQtJmd0O3JlbW90ZV9pcC5mYW1pbHkpIHsKJiM0MzsJCW5wX2VycihucCwgJiMzNDtsb2NhbCBhbmQgcmVtb3RlIElQIGFkZHJlc3MgZmFtaWxpZXMgZGlmZmVyLCBhYm9ydGluZ1xuJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKIAlydG5sX2xvY2soKTsKIAlpZiAobnAtJmd0O2Rldl9uYW1lWzBdKQogCQluZGV2ID0gX19kZXZfZ2V0X2J5X25hbWUobmV0LCBucC0mZ3Q7ZGV2X25hbWUpOwpAQCAtNTIzLDE2ICYjNDM7NTI2LDEzIEBAIHN0YXRpYyBpbnQgbmV0Y29uc19uZXRwb2xsX3NldHVwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpCiAJCXJ0bmxfbG9jaygpOwogCX0KIAotCWlmIChuZXRjb25zX2xvY2FsX2lwX3Vuc2V0KG50KSkgewotCQlpZiAoIW50LSZndDtpcHY2KSB7Ci0JCQllcnIgPSBuZXRjb25zX3Rha2VfaXB2NChudCwgbmRldik7Ci0JCQlpZiAoZXJyKQotCQkJCWdvdG8gcHV0OwotCQl9IGVsc2UgewomIzQzOwlpZiAobnQtJmd0O2xvY2FsX2lwLmZhbWlseSA9PSBBRl9VTlNQRUMpIHsKJiM0MzsJCWlmIChudC0mZ3Q7cmVtb3RlX2lwLmZhbWlseSA9PSBBRl9JTkVUNikKIAkJCWVyciA9IG5ldGNvbnNfdGFrZV9pcHY2KG50LCBuZGV2KTsKLQkJCWlmIChlcnIpCi0JCQkJZ290byBwdXQ7Ci0JCX0KJiM0MzsJCWVsc2UKJiM0MzsJCQllcnIgPSBuZXRjb25zX3Rha2VfaXB2NChudCwgbmRldik7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCWdvdG8gcHV0OwogCQlpcF9vdmVyd3JpdHRlbiA9IHRydWU7CiAJfQogCkBAIC03MTQsMjQgJiM0Mzs3MTQsMjggQEAgc3RhdGljIHZvaWQgbmV0Y29uc29sZV9wcmludF9iYW5uZXIoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCkKIAlzdHJ1Y3QgbmV0cG9sbCAqbnAgPSAmYW1wO250LSZndDtucDsKIAogCW5wX2luZm8obnAsICYjMzQ7bG9jYWwgcG9ydCAlZFxuJiMzNDssIG50LSZndDtsb2NhbF9wb3J0KTsKLQlpZiAobnQtJmd0O2lwdjYpCiYjNDM7CWlmIChudC0mZ3Q7bG9jYWxfaXAuZmFtaWx5ID09IEFGX1VOU1BFQykKJiM0MzsJCW5wX2luZm8obnAsICYjMzQ7bG9jYWwgSVAgdW5zZXRcbiYjMzQ7KTsKJiM0MzsJZWxzZSBpZiAobnQtJmd0O2xvY2FsX2lwLmZhbWlseSA9PSBBRl9JTkVUNikKIAkJbnBfaW5mbyhucCwgJiMzNDtsb2NhbCBJUHY2IGFkZHJlc3MgJXBJNmNcbiYjMzQ7LCAmYW1wO250LSZndDtsb2NhbF9pcC5pbjYpOwogCWVsc2UKIAkJbnBfaW5mbyhucCwgJiMzNDtsb2NhbCBJUHY0IGFkZHJlc3MgJXBJNFxuJiMzNDssICZhbXA7bnQtJmd0O2xvY2FsX2lwLmlwKTsKIAlucF9pbmZvKG5wLCAmIzM0O2ludGVyZmFjZSBuYW1lICYjMzk7JXMmIzM5O1xuJiMzNDssIG5wLSZndDtkZXZfbmFtZSk7CiAJbnBfaW5mbyhucCwgJiMzNDtsb2NhbCBldGhlcm5ldCBhZGRyZXNzICYjMzk7JXBNJiMzOTtcbiYjMzQ7LCBucC0mZ3Q7ZGV2X21hYyk7CiAJbnBfaW5mbyhucCwgJiMzNDtyZW1vdGUgcG9ydCAlZFxuJiMzNDssIG50LSZndDtyZW1vdGVfcG9ydCk7Ci0JaWYgKG50LSZndDtpcHY2KQomIzQzOwlpZiAobnQtJmd0O3JlbW90ZV9pcC5mYW1pbHkgPT0gQUZfVU5TUEVDKQomIzQzOwkJbnBfaW5mbyhucCwgJiMzNDtyZW1vdGUgSVAgdW5zZXRcbiYjMzQ7KTsKJiM0MzsJZWxzZSBpZiAobnQtJmd0O3JlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpCiAJCW5wX2luZm8obnAsICYjMzQ7cmVtb3RlIElQdjYgYWRkcmVzcyAlcEk2Y1xuJiMzNDssICZhbXA7bnQtJmd0O3JlbW90ZV9pcC5pbjYpOwogCWVsc2UKIAkJbnBfaW5mbyhucCwgJiMzNDtyZW1vdGUgSVB2NCBhZGRyZXNzICVwSTRcbiYjMzQ7LCAmYW1wO250LSZndDtyZW1vdGVfaXAuaXApOwogCW5wX2luZm8obnAsICYjMzQ7cmVtb3RlIGV0aGVybmV0IGFkZHJlc3MgJXBNXG4mIzM0OywgbnQtJmd0O3JlbW90ZV9tYWMpOwogfQogCi0vKiBQYXJzZSB0aGUgc3RyaW5nIGFuZCBwb3B1bGF0ZSB0aGUgYGluZXRfYWRkcmAgdW5pb24uIFJldHVybiAwIGlmIElQdjQgaXMKLSAqIHBvcHVsYXRlZCwgMSBpZiBJUHY2IGlzIHBvcHVsYXRlZCwgYW5kIC0xIHVwb24gZmFpbHVyZS4KJiM0MzsvKiBQYXJzZSB0aGUgc3RyaW5nIGFuZCBwb3B1bGF0ZSB0aGUgYGluZXRfYWRkcmAgc3RydWN0LiBSZXR1cm4gMCBvbiBzdWNjZXNzCiYjNDM7ICogYW5kIC0xIHVwb24gZmFpbHVyZS4KICAqLwotc3RhdGljIGludCBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY29uc3QgY2hhciAqc3RyLCB1bmlvbiBpbmV0X2FkZHIgKmFkZHIpCiYjNDM7c3RhdGljIGludCBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY29uc3QgY2hhciAqc3RyLCBzdHJ1Y3QgaW5ldF9hZGRyICphZGRyKQogewogCWNvbnN0IGNoYXIgKmVuZCA9IE5VTEw7CiAJaW50IGxlbjsKQEAgLTc0MywxNCAmIzQzOzc0NywxOCBAQCBzdGF0aWMgaW50IG5ldHBvbGxfcGFyc2VfaXBfYWRkcihjb25zdCBjaGFyICpzdHIsIHVuaW9uIGluZXRfYWRkciAqYWRkcikKIAlpZiAoc3RyW2xlbiAtIDFdID09ICYjMzk7XG4mIzM5OykKIAkJbGVuIC09IDE7CiAKLQlpZiAoaW40X3B0b24oc3RyLCBsZW4sICh2b2lkICopYWRkciwgLTEsICZhbXA7ZW5kKSAmZ3Q7IDAgJmFtcDsmYW1wOwotCSAgICAoIWVuZCB8fCAqZW5kID09IDAgfHwgKmVuZCA9PSAmIzM5O1xuJiMzOTspKQomIzQzOwlpZiAoaW40X3B0b24oc3RyLCBsZW4sICh2b2lkICopJmFtcDthZGRyLSZndDtpcCwgLTEsICZhbXA7ZW5kKSAmZ3Q7IDAgJmFtcDsmYW1wOwomIzQzOwkgICAgKCFlbmQgfHwgKmVuZCA9PSAwIHx8ICplbmQgPT0gJiMzOTtcbiYjMzk7KSkgewomIzQzOwkJYWRkci0mZ3Q7ZmFtaWx5ID0gQUZfSU5FVDsKIAkJcmV0dXJuIDA7CiYjNDM7CX0KIAogCWlmIChJU19FTkFCTEVEKENPTkZJR19JUFY2KSAmYW1wOyZhbXA7Ci0JICAgIGluNl9wdG9uKHN0ciwgbGVuLCAodm9pZCAqKWFkZHIsIC0xLCAmYW1wO2VuZCkgJmd0OyAwICZhbXA7JmFtcDsKLQkgICAgKCFlbmQgfHwgKmVuZCA9PSAwIHx8ICplbmQgPT0gJiMzOTtcbiYjMzk7KSkKLQkJcmV0dXJuIDE7CiYjNDM7CSAgICBpbjZfcHRvbihzdHIsIGxlbiwgKHZvaWQgKikmYW1wO2FkZHItJmd0O2luNiwgLTEsICZhbXA7ZW5kKSAmZ3Q7IDAgJmFtcDsmYW1wOwomIzQzOwkgICAgKCFlbmQgfHwgKmVuZCA9PSAwIHx8ICplbmQgPT0gJiMzOTtcbiYjMzk7KSkgewomIzQzOwkJYWRkci0mZ3Q7ZmFtaWx5ID0gQUZfSU5FVDY7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQogCiAJcmV0dXJuIC0xOwogfQpAQCAtODU1LDIwICYjNDM7ODYzLDI0IEBAIHN0YXRpYyBzc2l6ZV90IGxvY2FsX2lwX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTsKIAotCWlmIChudC0mZ3Q7aXB2NikKJiM0MzsJaWYgKG50LSZndDtsb2NhbF9pcC5mYW1pbHkgPT0gQUZfVU5TUEVDKQomIzQzOwkJcmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCAmIzM0O1xuJiMzNDspOwomIzQzOwlpZiAobnQtJmd0O2xvY2FsX2lwLmZhbWlseSA9PSBBRl9JTkVUNikKIAkJcmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCAmIzM0OyVwSTZjXG4mIzM0OywgJmFtcDtudC0mZ3Q7bG9jYWxfaXAuaW42KTsKIAllbHNlCi0JCXJldHVybiBzeXNmc19lbWl0KGJ1ZiwgJiMzNDslcEk0XG4mIzM0OywgJmFtcDtudC0mZ3Q7bG9jYWxfaXApOwomIzQzOwkJcmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCAmIzM0OyVwSTRcbiYjMzQ7LCAmYW1wO250LSZndDtsb2NhbF9pcC5pcCk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IHJlbW90ZV9pcF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKQogewogCXN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7CiAKLQlpZiAobnQtJmd0O2lwdjYpCiYjNDM7CWlmIChudC0mZ3Q7cmVtb3RlX2lwLmZhbWlseSA9PSBBRl9VTlNQRUMpCiYjNDM7CQlyZXR1cm4gc3lzZnNfZW1pdChidWYsICYjMzQ7XG4mIzM0Oyk7CiYjNDM7CWlmIChudC0mZ3Q7cmVtb3RlX2lwLmZhbWlseSA9PSBBRl9JTkVUNikKIAkJcmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCAmIzM0OyVwSTZjXG4mIzM0OywgJmFtcDtudC0mZ3Q7cmVtb3RlX2lwLmluNik7CiAJZWxzZQotCQlyZXR1cm4gc3lzZnNfZW1pdChidWYsICYjMzQ7JXBJNFxuJiMzNDssICZhbXA7bnQtJmd0O3JlbW90ZV9pcCk7CiYjNDM7CQlyZXR1cm4gc3lzZnNfZW1pdChidWYsICYjMzQ7JXBJNFxuJiMzNDssICZhbXA7bnQtJmd0O3JlbW90ZV9pcC5pcCk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IGxvY2FsX21hY19zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKQpAQCAtMTIxMyw3ICYjNDM7MTIyNSw2IEBAIHN0YXRpYyBzc2l6ZV90IGxvY2FsX2lwX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLAogewogCXN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7CiAJc3NpemVfdCByZXQgPSAtRUlOVkFMOwotCWludCBpcHY2OwogCiAJZHluYW1pY19uZXRjb25zb2xlX211dGV4X2xvY2soKTsKIAlpZiAobnQtJmd0O3N0YXRlID09IFNUQVRFX0VOQUJMRUQpIHsKQEAgLTEyMjIsMTAgJiM0MzsxMjMzLDggQEAgc3RhdGljIHNzaXplX3QgbG9jYWxfaXBfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsCiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKLQlpcHY2ID0gbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGJ1ZiwgJmFtcDtudC0mZ3Q7bG9jYWxfaXApOwotCWlmIChpcHY2ID09IC0xKQomIzQzOwlpZiAobmV0cG9sbF9wYXJzZV9pcF9hZGRyKGJ1ZiwgJmFtcDtudC0mZ3Q7bG9jYWxfaXApICZsdDsgMCkKIAkJZ290byBvdXRfdW5sb2NrOwotCW50LSZndDtpcHY2ID0gISFpcHY2OwogCiAJcmV0ID0gY291bnQ7CiBvdXRfdW5sb2NrOgpAQCAtMTIzOCw3ICYjNDM7MTI0Nyw2IEBAIHN0YXRpYyBzc2l6ZV90IHJlbW90ZV9pcF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZiwKIHsKIAlzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0pOwogCXNzaXplX3QgcmV0ID0gLUVJTlZBTDsKLQlpbnQgaXB2NjsKIAogCWR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF9sb2NrKCk7CiAJaWYgKG50LSZndDtzdGF0ZSA9PSBTVEFURV9FTkFCTEVEKSB7CkBAIC0xMjQ3LDEwICYjNDM7MTI1NSw4IEBAIHN0YXRpYyBzc2l6ZV90IHJlbW90ZV9pcF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZiwKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KIAotCWlwdjYgPSBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoYnVmLCAmYW1wO250LSZndDtyZW1vdGVfaXApOwotCWlmIChpcHY2ID09IC0xKQomIzQzOwlpZiAobmV0cG9sbF9wYXJzZV9pcF9hZGRyKGJ1ZiwgJmFtcDtudC0mZ3Q7cmVtb3RlX2lwKSAmbHQ7IDApCiAJCWdvdG8gb3V0X3VubG9jazsKLQludC0mZ3Q7aXB2NiA9ICEhaXB2NjsKIAogCXJldCA9IGNvdW50Owogb3V0X3VubG9jazoKQEAgLTIwNjEsNyAmIzQzOzIwNjcsNyBAQCBzdGF0aWMgdm9pZCBuZXRwb2xsX3VkcF9jaGVja3N1bShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LAogCiAJLyogY2hlY2sgbmVlZHMgdG8gYmUgc2V0LCBzaW5jZSBpdCB3aWxsIGJlIGNvbnN1bWVkIGluIGNzdW1fcGFydGlhbCAqLwogCXVkcGgtJmd0O2NoZWNrID0gMDsKLQlpZiAobnQtJmd0O2lwdjYpCiYjNDM7CWlmIChudC0mZ3Q7cmVtb3RlX2lwLmZhbWlseSA9PSBBRl9JTkVUNikKIAkJdWRwaC0mZ3Q7Y2hlY2sgPSBjc3VtX2lwdjZfbWFnaWMoJmFtcDtudC0mZ3Q7bG9jYWxfaXAuaW42LAogCQkJCQkgICAgICAmYW1wO250LSZndDtyZW1vdGVfaXAuaW42LAogCQkJCQkgICAgICB1ZHBfbGVuLCBJUFBST1RPX1VEUCwKQEAgLTIxMDIsNyAmIzQzOzIxMDgsNyBAQCBzdGF0aWMgdm9pZCBwdXNoX2V0aChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7CiAJZXRoZXJfYWRkcl9jb3B5KGV0aC0mZ3Q7aF9zb3VyY2UsIG5wLSZndDtkZXYtJmd0O2Rldl9hZGRyKTsKIAlldGhlcl9hZGRyX2NvcHkoZXRoLSZndDtoX2Rlc3QsIG50LSZndDtyZW1vdGVfbWFjKTsKLQlpZiAobnQtJmd0O2lwdjYpCiYjNDM7CWlmIChudC0mZ3Q7cmVtb3RlX2lwLmZhbWlseSA9PSBBRl9JTkVUNikKIAkJZXRoLSZndDtoX3Byb3RvID0gaHRvbnMoRVRIX1BfSVBWNik7CiAJZWxzZQogCQlldGgtJmd0O2hfcHJvdG8gPSBodG9ucyhFVEhfUF9JUCk7CkBAIC0yMTcxLDcgJiM0MzsyMTc3LDcgQEAgc3RhdGljIGludCBuZXRwb2xsX3NlbmRfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNvbnN0IGNoYXIgKm1zZywKIAkJV0FSTl9PTl9PTkNFKCFpcnFzX2Rpc2FibGVkKCkpOwogCiAJdWRwX2xlbiA9IGxlbiAmIzQzOyBzaXplb2Yoc3RydWN0IHVkcGhkcik7Ci0JaWYgKG50LSZndDtpcHY2KQomIzQzOwlpZiAobnQtJmd0O3JlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpCiAJCWlwX2xlbiA9IHVkcF9sZW4gJiM0Mzsgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKTsKIAllbHNlCiAJCWlwX2xlbiA9IHVkcF9sZW4gJiM0Mzsgc2l6ZW9mKHN0cnVjdCBpcGhkcik7CkBAIC0yMTg3LDcgJiM0MzsyMTkzLDcgQEAgc3RhdGljIGludCBuZXRwb2xsX3NlbmRfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNvbnN0IGNoYXIgKm1zZywKIAlza2JfcHV0KHNrYiwgbGVuKTsKIAogCXB1c2hfdWRwKG50LCBza2IsIGxlbik7Ci0JaWYgKG50LSZndDtpcHY2KQomIzQzOwlpZiAobnQtJmd0O3JlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpCiAJCXB1c2hfaXB2NihudCwgc2tiLCBsZW4pOwogCWVsc2UKIAkJcHVzaF9pcHY0KG50LCBza2IsIGxlbik7CkBAIC0yNTA3LDEwICYjNDM7MjUxMyw4IEBAIF9fcmVsZWFzZXMoJmFtcDt0YXJnZXRfbGlzdF9sb2NrKQogc3RhdGljIGludCBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNoYXIgKm9wdCkKIHsKIAlzdHJ1Y3QgbmV0cG9sbCAqbnAgPSAmYW1wO250LSZndDtucDsKLQlib29sIGlwdmVyc2lvbl9zZXQgPSBmYWxzZTsKIAljaGFyICpjdXIgPSBvcHQ7CiAJY2hhciAqZGVsaW07Ci0JaW50IGlwdjY7CiAKIAlpZiAoKmN1ciAhPSAmIzM5O0AmIzM5OykgewogCQlkZWxpbSA9IHN0cmNocihjdXIsICYjMzk7QCYjMzk7KTsKQEAgLTI1MjQsMTYgJiM0MzsyNTI4LDEyIEBAIHN0YXRpYyBpbnQgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjaGFyICpvcHQpCiAJY3VyJiM0MzsmIzQzOzsKIAogCWlmICgqY3VyICE9ICYjMzk7LyYjMzk7KSB7Ci0JCWlwdmVyc2lvbl9zZXQgPSB0cnVlOwogCQlkZWxpbSA9IHN0cmNocihjdXIsICYjMzk7LyYjMzk7KTsKIAkJaWYgKCFkZWxpbSkKIAkJCWdvdG8gcGFyc2VfZmFpbGVkOwogCQkqZGVsaW0gPSAwOwotCQlpcHY2ID0gbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGN1ciwgJmFtcDtudC0mZ3Q7bG9jYWxfaXApOwotCQlpZiAoaXB2NiAmbHQ7IDApCiYjNDM7CQlpZiAobmV0cG9sbF9wYXJzZV9pcF9hZGRyKGN1ciwgJmFtcDtudC0mZ3Q7bG9jYWxfaXApICZsdDsgMCkKIAkJCWdvdG8gcGFyc2VfZmFpbGVkOwotCQllbHNlCi0JCQludC0mZ3Q7aXB2NiA9IChib29sKWlwdjY7CiAJCWN1ciA9IGRlbGltOwogCX0KIAljdXImIzQzOyYjNDM7OwpAQCAtMjU3NSwxMyAmIzQzOzI1NzUsMTEgQEAgc3RhdGljIGludCBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNoYXIgKm9wdCkKIAlpZiAoIWRlbGltKQogCQlnb3RvIHBhcnNlX2ZhaWxlZDsKIAkqZGVsaW0gPSAwOwotCWlwdjYgPSBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY3VyLCAmYW1wO250LSZndDtyZW1vdGVfaXApOwotCWlmIChpcHY2ICZsdDsgMCkKJiM0MzsJaWYgKG5ldHBvbGxfcGFyc2VfaXBfYWRkcihjdXIsICZhbXA7bnQtJmd0O3JlbW90ZV9pcCkgJmx0OyAwKQogCQlnb3RvIHBhcnNlX2ZhaWxlZDsKLQllbHNlIGlmIChpcHZlcnNpb25fc2V0ICZhbXA7JmFtcDsgbnQtJmd0O2lwdjYgIT0gKGJvb2wpaXB2NikKJiM0MzsJaWYgKG50LSZndDtsb2NhbF9pcC5mYW1pbHkgIT0gQUZfVU5TUEVDICZhbXA7JmFtcDsKJiM0MzsJICAgIG50LSZndDtsb2NhbF9pcC5mYW1pbHkgIT0gbnQtJmd0O3JlbW90ZV9pcC5mYW1pbHkpCiAJCWdvdG8gcGFyc2VfZmFpbGVkOwotCWVsc2UKLQkJbnQtJmd0O2lwdjYgPSAoYm9vbClpcHY2OwogCWN1ciA9IGRlbGltICYjNDM7IDE7CiAKIAlpZiAoKmN1ciAhPSAwKSB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaCBiL2luY2x1ZGUvbGludXgvbmV0cG9sbC5oCmluZGV4IDFjNmIxZWVjNWVmZDYuLmVjMDgyMWE1YjAyZGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0cG9sbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbmV0cG9sbC5oCkBAIC0xNiwxMSAmIzQzOzE2LDYgQEAKICNpbmNsdWRlICZsdDtsaW51eC9pcC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3VkcC5oJmd0OwogCi11bmlvbiBpbmV0X2FkZHIgewotCV9fYmUzMgkJaXA7Ci0Jc3RydWN0IGluNl9hZGRyCWluNjsKLX07Ci0KIHN0cnVjdCBuZXRwb2xsIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCW5ldGRldmljZV90cmFja2VyIGRldl90cmFja2VyOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDI5CgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogMzM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV0Y29uc29sZSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBgbmV0Y29uc29sZS5jYCBhbmQgYG5ldHBvbGwuaGAuIFRoZSBnaXN0IG9mIGl0IGlzIGEgcmVmYWN0b3Igb2YgaG93IElQIGFkZHJlc3NlcyBhbmQgdGhlaXIgZmFtaWxpZXMgYXJlIGhhbmRsZWQgd2l0aGluIG5ldGNvbnNvbGUuIFRoZXkmIzM5O3ZlIHlhbmtlZCB0aGUgYHVuaW9uIGluZXRfYWRkcmAgZnJvbSBgbmV0cG9sbC5oYCBhbmQgaW50cm9kdWNlZCBhIGBzdHJ1Y3QgaW5ldF9hZGRyYCBpbiBgbmV0Y29uc29sZS5jYCwgd2hpY2ggbWFrZXMgc2Vuc2UgZm9yIGJldHRlciBlbmNhcHN1bGF0aW9uLiBUaGUga2V5IGFkZGl0aW9uIGlzIHRoZSBgZmFtaWx5YCBmaWVsZCB3aXRoaW4gYHN0cnVjdCBpbmV0X2FkZHJgIChBRl9VTlNQRUMsIEFGX0lORVQsIEFGX0lORVQ2KSwgYW5kIGl0IGxvb2tzIGxpa2UgdGhleSYjMzk7dmUgcmVwbGFjZWQgdGhhdCBgaXB2NmAgYm9vbGVhbiBmbGFnIGluIGBuZXRjb25zb2xlX3RhcmdldGAgd2l0aCB0aGUgYGZhbWlseWAgZmllbGQgaW4gYm90aCBgbG9jYWxfaXBgIGFuZCBgcmVtb3RlX2lwYC4gVGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBzaGlmdDsgaXQgYWxsb3dzIGZvciBpbmRlcGVuZGVudCBmYW1pbHkgdHJhY2tpbmcgZm9yIGxvY2FsIGFuZCByZW1vdGUgSVBzLCBhbmQgaXQgbG9va3MgbGlrZSB0aGVyZSYjMzk7cyBzb21lIGNvbnNpc3RlbmN5IGNoZWNraW5nIGluIHRoZSBtaXggbm93LgoKTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGlzIHRoaXMgcmVhY2hhYmxlPyBBbmQsIG1vcmUgaW1wb3J0YW50bHksIGlzIGl0IGZ1enphYmxlPyBOZXRjb25zb2xlLCBhcyBhIGNvcmUga2VybmVsIGZlYXR1cmUgZm9yIHNlbmRpbmcgbG9ncyBvdmVyIFVEUCwgaXMgY2VydGFpbmx5IGludGVyZXN0aW5nIGZyb20gYSBzZWN1cml0eSBwZXJzcGVjdGl2ZS4gSXQmIzM5O3MgY29uZmlndXJlZCBlaXRoZXIgdmlhIHN5c2ZzIChjb25maWdmcykgb3IgdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUuIFRoZSBmYWN0IHRoYXQgc3lzZnMgaXMgcm9vdC1yZWFjaGFibGUgYW5kIHN5emthbGxlciBjYW4gaW50ZXJhY3Qgd2l0aCBjb25maWdmcyBpcyBhIGh1Z2UgcGx1cy4gVGhpcyBtYWtlcyBpdCBhIGdyZWF0IHRhcmdldCBpZiB0aGVyZSBhcmUgYnVncy4KClRoZSBjb2RlIGNoYW5nZXMgYXJlIHRvdWNoaW5nIHNldmVyYWwgaW1wb3J0YW50IGFyZWFzOiBgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZWAsIHRoZSBgKl9zdG9yZWAgZnVuY3Rpb25zIChzcGVjaWZpY2FsbHkgdGhlIG9uZXMgcmVsYXRlZCB0byBzZXR0aW5nIGxvY2FsIGFuZCByZW1vdGUgSVBzKSwgYG5ldGNvbnNfbmV0cG9sbF9zZXR1cGAsIGFuZCBgbmV0cG9sbF9zZW5kX3VkcGAuIFRoZXNlIGFyZSBhbGwgcHJpbWUgbG9jYXRpb25zIGZvciBidWdzLgoKTm93LCBsZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNvbmZpZyBvcHRpb25zIGFyZSBmb3IgbmV0Y29uc29sZS4gSSB3YW50IHRvIGNoZWNrIGZvciB0aGUgb3B0aW9ucyBgQ09ORklHX05FVENPTlNPTEVgIGFuZCBgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQ2AgKGZvciBjb25maWdmcyBzdXBwb3J0KSBhcyB0aGV5IGhhdmUgdG8gYmUgZW5hYmxlZCB0byBlbmFibGUgdGhlIGZlYXR1cmVzIHRoYXQgYXJlIGNoYW5nZWQgYnkgdGhlIHBhdGNoLiBJJiMzOTtsbCB1c2UgYGdyZXBwZXJgIHRvIHNlYXJjaCBmb3IgdGhlbS4gVGhpcyB3aWxsIHRlbGwgbWUgaWYgdGhlIGFmZmVjdGVkIGNvZGUgcGF0aHMgYXJlIGFjdGl2ZSwgYW5kIGlmIHNvLCBob3cgYnJvYWRseSB1c2VkIHRoZXkgYXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRDT05TT0xFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWc9MzE4PWNvbmZpZyBNQUNTRUNcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTMyNi1cbmRyaXZlcnMvbmV0L0tjb25maWc6MzI3OmNvbmZpZyBORVRDT05TT0xFXG5kcml2ZXJzL25ldC9LY29uZmlnLTMyOC1cdHRyaXN0YXRlIFwmIzM0O05ldHdvcmsgY29uc29sZSBsb2dnaW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTMzMy1cbmRyaXZlcnMvbmV0L0tjb25maWc6MzM0OmNvbmZpZyBORVRDT05TT0xFX0RZTkFNSUNcbmRyaXZlcnMvbmV0L0tjb25maWctMzM1LVx0Ym9vbCBcJiMzNDtEeW5hbWljIHJlY29uZmlndXJhdGlvbiBvZiBsb2dnaW5nIHRhcmdldHNcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTM0NC1cbmRyaXZlcnMvbmV0L0tjb25maWc6MzQ1OmNvbmZpZyBORVRDT05TT0xFX0VYVEVOREVEX0xPR1xuZHJpdmVycy9uZXQvS2NvbmZpZy0zNDYtXHRib29sIFwmIzM0O1NldCBrZXJuZWwgZXh0ZW5kZWQgbWVzc2FnZSBieSBkZWZhdWx0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy0zNTQtXG5kcml2ZXJzL25ldC9LY29uZmlnOjM1NTpjb25maWcgTkVUQ09OU09MRV9QUkVQRU5EX1JFTEVBU0VcbmRyaXZlcnMvbmV0L0tjb25maWctMzU2LVx0Ym9vbCBcJiMzNDtQcmVwZW5kIGtlcm5lbCByZWxlYXNlIHZlcnNpb24gaW4gdGhlIG1lc3NhZ2UgYnkgZGVmYXVsdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0ODIKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGlzIHRhc2s6CgoqKkFuYWx5emluZyBORVRDT05TT0xFIERlcGVuZGVuY2llcyBpbiBLY29uZmlnKioKCkFscmlnaHQsIHRoZSBvYmplY3RpdmUgaXMgcHJldHR5IGNsZWFyOiBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBORVRDT05TT0xFYC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgYWx3YXlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIFRoZSBLY29uZmlnIGZpbGVzIGFyZSB0aGUgaGVhcnQgb2YgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgc28gdGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQuIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgZ28gc3RyYWlnaHQgdG8gYGRyaXZlcnMvbmV0L0tjb25maWdgLiBUaGF0JiMzOTtzIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gYmVnaW4gbG9va2luZyBmb3IgYE5FVENPTlNPTEVgIGFuZCB1bmRlcnN0YW5kIHdoYXQgbmVlZHMgdG8gYmUgZW5hYmxlZCBvciBpbiBwbGFjZSBmb3IgaXQgdG8gd29yay4gSSBleHBlY3QgdG8gZmluZCBzb21lIGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzLCBtYXliZSBzb21lIGBzZWxlY3RgIHN0YXRlbWVudHMsIGFuZCBwZXJoYXBzIGV2ZW4gc29tZSBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBuZXR3b3JrLXJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIFRoaXMgaW5pdGlhbCBjaGVjayBpbiBLY29uZmlnIHNob3VsZCB0ZWxsIG1lIHRoZSBwcmltYXJ5IHByZXJlcXVpc2l0ZXMgYmVmb3JlIGRpZ2dpbmcgZGVlcGVyIGlmIG5lY2Vzc2FyeS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2Ugb3RoZXIgbmV0d29yayBkcml2ZXJzIHRoYXQgbWlnaHQgYmUgcmVxdWlyZWQsIHNwZWNpZmljIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb25zLCBvciBldmVuIG90aGVyIGtlcm5lbCBmZWF0dXJlcyB0aGF0IG5lZWQgdG8gYmUgYWN0aXZlLiBUaGlzIGlzIHRoZSBmaXJzdCBzdGVwIGluIHVuZGVyc3RhbmRpbmcgdGhlIGNvbXBsZXRlIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlIGZvciBgTkVUQ09OU09MRWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVENPTlNPTEUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWc9MzE4PWNvbmZpZyBNQUNTRUNcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTMyNi1cbmRyaXZlcnMvbmV0L0tjb25maWc6MzI3OmNvbmZpZyBORVRDT05TT0xFXG5kcml2ZXJzL25ldC9LY29uZmlnLTMyOC1cdHRyaXN0YXRlIFwmIzM0O05ldHdvcmsgY29uc29sZSBsb2dnaW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTMzMy1cbmRyaXZlcnMvbmV0L0tjb25maWc6MzM0OmNvbmZpZyBORVRDT05TT0xFX0RZTkFNSUNcbmRyaXZlcnMvbmV0L0tjb25maWctMzM1LVx0Ym9vbCBcJiMzNDtEeW5hbWljIHJlY29uZmlndXJhdGlvbiBvZiBsb2dnaW5nIHRhcmdldHNcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTM0NC1cbmRyaXZlcnMvbmV0L0tjb25maWc6MzQ1OmNvbmZpZyBORVRDT05TT0xFX0VYVEVOREVEX0xPR1xuZHJpdmVycy9uZXQvS2NvbmZpZy0zNDYtXHRib29sIFwmIzM0O1NldCBrZXJuZWwgZXh0ZW5kZWQgbWVzc2FnZSBieSBkZWZhdWx0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy0zNTQtXG5kcml2ZXJzL25ldC9LY29uZmlnOjM1NTpjb25maWcgTkVUQ09OU09MRV9QUkVQRU5EX1JFTEVBU0VcbmRyaXZlcnMvbmV0L0tjb25maWctMzU2LVx0Ym9vbCBcJiMzNDtQcmVwZW5kIGtlcm5lbCByZWxlYXNlIHZlcnNpb24gaW4gdGhlIG1lc3NhZ2UgYnkgZGVmYXVsdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5OTkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5IGZvciBhbiBleHBlcnQ6CgoqKkRpdmluZyBpbnRvIHRoZSBOZXR3b3JrIENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgd2l0aCB0aGUgbmV0d29yayBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBkcml2ZXJzL25ldC9LY29uZmlnYCBmaWxlLiBJJiMzOTttIGZvY3VzaW5nIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAzMjcg4oCTIHRoYXQmIzM5O3Mgb2Z0ZW4gd2hlcmUgdGhlIGp1aWN5IGJpdHMgYXJlLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIGNvcmUgbmV0d29ya2luZyBmZWF0dXJlcyBvciBwZXJoYXBzIGEgc3BlY2lmaWMgZHJpdmVyIEkmIzM5O20gdHJ5aW5nIHRvIHVuZGVyc3RhbmQuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgZWl0aGVyIGEgaGlnaC1sZXZlbCBvdmVydmlldyBvZiBhdmFpbGFibGUgbmV0d29yayBmZWF0dXJlcywgcGVyaGFwcyBzb21lIGRlcGVuZGVuY2llcyBvbiBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMsIG9yIG1heWJlIGV2ZW4gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgYSBwYXJ0aWN1bGFyIG5ldHdvcmsgZHJpdmVyIG9yIHRlY2hub2xvZ3kuIFRpbWUgdG8gY3JhY2sgaXQgb3BlbiBhbmQgc2VlIHdoYXQgcmV2ZWxhdGlvbnMgbGluZSAzMjcgaG9sZHMhIExldCYjMzk7cyBzZWUgd2hhdCBnZW1zIHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzIwOlx0XHRzZWxlY3QgQ1JZUFRPXG4gMzIxOlx0XHRzZWxlY3QgQ1JZUFRPX0FFU1xuIDMyMjpcdFx0c2VsZWN0IENSWVBUT19HQ01cbiAzMjM6XHRcdHNlbGVjdCBHUk9fQ0VMTFNcbiAzMjQ6XHRcdGhlbHBcbiAzMjU6XHRcdCAgIE1BQ3NlYyBpcyBhbiBlbmNyeXB0aW9uIHN0YW5kYXJkIGZvciBFdGhlcm5ldC5cbiAzMjY6XHRcbiAzMjc6XHRjb25maWcgTkVUQ09OU09MRVxuIDMyODpcdFx0dHJpc3RhdGUgXCYjMzQ7TmV0d29yayBjb25zb2xlIGxvZ2dpbmcgc3VwcG9ydFwmIzM0O1xuIDMyOTpcdFx0ZGVwZW5kcyBvbiBQUklOVEtcbiAzMzA6XHRcdGhlbHBcbiAzMzE6XHRcdCAgSWYgeW91IHdhbnQgdG8gbG9nIGtlcm5lbCBtZXNzYWdlcyBvdmVyIHRoZSBuZXR3b3JrLCBlbmFibGUgdGhpcy5cbiAzMzI6XHRcdCAgU2VlIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGNvbnNvbGUucnN0XHUwMDNlIGZvciBkZXRhaWxzLlxuIDMzMzpcdFxuIDMzNDpcdGNvbmZpZyBORVRDT05TT0xFX0RZTkFNSUNcbiAzMzU6XHRcdGJvb2wgXCYjMzQ7RHluYW1pYyByZWNvbmZpZ3VyYXRpb24gb2YgbG9nZ2luZyB0YXJnZXRzXCYjMzQ7XG4gMzM2Olx0XHRkZXBlbmRzIG9uIE5FVENPTlNPTEUgXHUwMDI2XHUwMDI2IFNZU0ZTIFx1MDAyNlx1MDAyNiBDT05GSUdGU19GUyBcdTAwMjZcdTAwMjYgXFxcbiAzMzc6XHRcdFx0XHQhKE5FVENPTlNPTEU9eSBcdTAwMjZcdTAwMjYgQ09ORklHRlNfRlM9bSlcbiAzMzg6XHRcdHNlbGVjdCBQUklOVEtfRVhFQ1VUSU9OX0NUWFxuIDMzOTpcdFx0aGVscFxuIDM0MDpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBhYmlsaXR5IHRvIGR5bmFtaWNhbGx5IHJlY29uZmlndXJlIHRhcmdldFxuIDM0MTpcdFx0ICBwYXJhbWV0ZXJzIChpbnRlcmZhY2UsIElQIGFkZHJlc3NlcywgcG9ydCBudW1iZXJzLCBNQUMgYWRkcmVzc2VzKVxuIDM0MjpcdFx0ICBhdCBydW50aW1lIHRocm91Z2ggYSB1c2Vyc3BhY2UgaW50ZXJmYWNlIGV4cG9ydGVkIHVzaW5nIGNvbmZpZ2ZzLlxuIDM0MzpcdFx0ICBTZWUgXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0Y29uc29sZS5yc3RcdTAwM2UgZm9yIGRldGFpbHMuXG4gMzQ0Olx0XG4gMzQ1Olx0Y29uZmlnIE5FVENPTlNPTEVfRVhURU5ERURfTE9HXG4gMzQ2Olx0XHRib29sIFwmIzM0O1NldCBrZXJuZWwgZXh0ZW5kZWQgbWVzc2FnZSBieSBkZWZhdWx0XCYjMzQ7XG4gMzQ3Olx0XHRkZXBlbmRzIG9uIE5FVENPTlNPTEVcbiAzNDg6XHRcdGRlZmF1bHQgblxuIDM0OTpcdFx0aGVscFxuIDM1MDpcdFx0ICBTZXQgZXh0ZW5kZWQgbG9nIHN1cHBvcnQgZm9yIG5ldGNvbnNvbGUgbWVzc2FnZS4gSWYgdGhpcyBvcHRpb24gaXNcbiAzNTE6XHRcdCAgc2V0LCBsb2cgbWVzc2FnZXMgYXJlIHRyYW5zbWl0dGVkIHdpdGggZXh0ZW5kZWQgbWV0YWRhdGEgaGVhZGVyIGluIGFcbiAzNTI6XHRcdCAgZm9ybWF0IHNpbWlsYXIgdG8gL2Rldi9rbXNnLiAgU2VlXG4gMzUzOlx0XHQgIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGNvbnNvbGUucnN0XHUwMDNlIGZvciBkZXRhaWxzLlxuIDM1NDpcdFxuIDM1NTpcdGNvbmZpZyBORVRDT05TT0xFX1BSRVBFTkRfUkVMRUFTRVxuIDM1NjpcdFx0Ym9vbCBcJiMzNDtQcmVwZW5kIGtlcm5lbCByZWxlYXNlIHZlcnNpb24gaW4gdGhlIG1lc3NhZ2UgYnkgZGVmYXVsdFwmIzM0O1xuIDM1NzpcdFx0ZGVwZW5kcyBvbiBORVRDT05TT0xFX0VYVEVOREVEX0xPR1xuIDM1ODpcdFx0ZGVmYXVsdCBuXG4gMzU5Olx0XHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODgwOQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIHRoZSBOZXRjb25zb2xlIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBgTkVUQ09OU09MRWAgYW5kIGBORVRDT05TT0xFX0RZTkFNSUNgIGp1bXAgb3V0IGFzIHRoZSBrZXkgY29uZmlndXJhdGlvbnMuIFRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgbW9kaWZpY2F0aW9ucyB0byBJUCBhZGRyZXNzIGhhbmRsaW5nIGFuZCB2YWxpZGF0aW9uIHdpdGhpbiBuZXRjb25zb2xlLCBzcGVjaWZpY2FsbHkgdGhyb3VnaCBjaGFuZ2VzIHRvIGZ1bmN0aW9ucyBsaWtlIGBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lYCwgYGxvY2FsX2lwX3N0b3JlYCwgYHJlbW90ZV9pcF9zdG9yZWAsIGBuZXRjb25zX25ldHBvbGxfc2V0dXBgLCBhbmQgYG5ldHBvbGxfc2VuZF91ZHBgLiBJIGtub3cgdGhhdCBgbG9jYWxfaXBfc3RvcmVgIGFuZCBgcmVtb3RlX2lwX3N0b3JlYCBhcmUgcGFydCBvZiB0aGUgY29uZmlnZnMgaW50ZXJmYWNlIGZvciBuZXRjb25zb2xlLCB3aGljaCBpbW1lZGlhdGVseSBzY3JlYW1zICYjMzQ7ZnV6emFibGUmIzM0OyBnaXZlbiBTeXprYWxsZXImIzM5O3MgY2FwYWJpbGl0aWVzIHdpdGggY29uZmlnZnMuCgpUaGUgY2hhbmdlcyBhcHBlYXIgZnVuY3Rpb25hbCwgc28gdGhpcyBpcyBhYm91dCBtb3JlIHJvYnVzdCBJUCBwYXJzaW5nIGFuZCBwcm9wZXIgdHJhY2tpbmcgb2YgSVAgZmFtaWxpZXMuIERlZmluaXRlbHkgd29ydGggYSBkZWVwIGZ1enppbmcgZGl2ZS4KCk15IG1haW4gZm9jdXMgcmlnaHQgbm93IGlzIHRvIGlkZW50aWZ5IHRoZSBjcml0aWNhbCBzeW1ib2xzIGZvciBmdXp6aW5nLiBTbyBmYXIsIEkmIzM5O20gdGhpbmtpbmc6IGBsb2NhbF9pcF9zdG9yZWAsIGByZW1vdGVfaXBfc3RvcmVgLCBgbmV0Y29uc19uZXRwb2xsX3NldHVwYCwgYW5kIGBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lYC4gVGhhdCBsYXN0IG9uZSBoYXMgbWUgdGhpbmtpbmcsIGNvdWxkIGl0IGJlIGNhbGxlZCBkdXJpbmcgbW9kdWxlIGxvYWQgb3Igd2hlbiBjcmVhdGluZyBjb25maWdmcyB0YXJnZXRzPyBJIG5lZWQgdG8gY2hlY2sgdGhlIGNhbGwgc2l0ZXMgZm9yIGBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lYCB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IGl0JiMzOTtzIGludm9rZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTEwMDE9c3RhdGljIHNzaXplX3QgZW5hYmxlZF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEwNDktXHRcdC8qXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTA1MDpcdFx0ICogU2tpcCBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKCkgLS0gYWxsIHRoZSBhdHRyaWJ1dGVzIGFyZVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEwNTEtXHRcdCAqIGFscmVhZHkgY29uZmlndXJlZCB2aWEgY29uZmlnZnMuIEp1c3QgcHJpbnQgdGhlbSBvdXQuXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI1MDg9X19yZWxlYXNlcyhcdTAwMjZ0YXJnZXRfbGlzdF9sb2NrKVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNTEyLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI1MTM6c3RhdGljIGludCBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNoYXIgKm9wdClcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNTE0LXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjYwMT1zdGF0aWMgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICphbGxvY19wYXJhbV90YXJnZXQoY2hhciAqdGFyZ2V0X2NvbmZpZyxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjYyOC1cdC8qIFBhcnNlIHBhcmFtZXRlcnMgYW5kIHNldHVwIG5ldHBvbGwgKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNjI5Olx0ZXJyID0gbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZShudCwgdGFyZ2V0X2NvbmZpZyk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjYzMC1cdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2NzIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBLZXJuZWwgVnVsbmVyYWJpbGl0aWVzKioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2luZyB0aGUgcG90ZW50aWFsIGF0dGFjayBzdXJmYWNlIGhlcmUsIHNwZWNpZmljYWxseSBpbiByZWxhdGlvbiB0byBgbmV0Y29uc29sZWAuIEkmIzM5O20gc2VlaW5nIHRoYXQgYG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmVgIGdldHMgY2FsbGVkIHRocm91Z2ggYGFsbG9jX3BhcmFtX3RhcmdldGAsIHdoaWNoIGlzIGl0c2VsZiBpbnZva2VkIGR1cmluZyBtb2R1bGUgaW5pdGlhbGl6YXRpb24gb3Igc29tZXRoaW5nIHNpbWlsYXIsIGxpa2UgaW5pdGNhbGxzLiBBaCwgd2FpdCwgY29ycmVjdGlvbiDigJMgbG9va2luZyBjbG9zZXIsIGBhbGxvY19wYXJhbV90YXJnZXRgIGlzIGFjdHVhbGx5IGNhbGxlZCBmcm9tIGBuZXRjb25zb2xlX2luaXRgLgoKVGhlIGtleSB0aGluZyBpcywgc2luY2Ugc3l6a2FsbGVyIGlzIGFibGUgdG8gbG9hZCBtb2R1bGVzLCBvciBtb3JlIHN1YnRseSBwYXNzIG1vZHVsZSBwYXJhbWV0ZXJzLCBpdCBtaWdodCBiZSBhYmxlIHRvIHRyaWdnZXIgdGhpcyBgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZWAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgY29uZmlnZnMgY291bGQgYmUgYW4gZW50cnkgcG9pbnQuIEhvd2V2ZXIsIGBsb2NhbF9pcF9zdG9yZWAgYW5kIGByZW1vdGVfaXBfc3RvcmVgICphcmUqIGRlZmluaXRlbHkgcmVhY2hhYmxlIHRocm91Z2ggY29uZmlnZnM7IHRoYXQmIzM5O3MgZ29vZCB0byBrZWVwIGluIG1pbmQsIGFuZCB0byByZXZpZXcgdGhhdCBhdHRhY2sgcGF0aC4KCkJ1dCBsZXQmIzM5O3Mgc2hpZnQgZm9jdXMgdG8gYG5ldGNvbnNfbmV0cG9sbF9zZXR1cGAuIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNhbGwgZ3JhcGggZm9yIHRoYXQgZnVuY3Rpb24sIGFuZCBzZWUgd2hlcmUgZWxzZSBpdCBpcyBjb25uZWN0ZWQgdG8uIEl0IGNvdWxkIGJlIGFuIGludGVyZXN0aW5nIGFyZWEgb2Ygc3R1ZHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25ldGNvbnNfbmV0cG9sbF9zZXR1cCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9NDQ0PXN0YXRpYyBpbnQgbmV0Y29uc190YWtlX2lwdjQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNDcyLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjQ3MzpzdGF0aWMgaW50IG5ldGNvbnNfbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTQ3NC17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTU2Mz1zdGF0aWMgdm9pZCByZXN1bWVfdGFyZ2V0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTU3MS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo1NzI6XHRpZiAobmV0Y29uc19uZXRwb2xsX3NldHVwKG50KSkge1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTU3My1cdFx0LyogbmV0cG9sbCBmYWlscyBzZXR1cCBvbmNlLCBkbyBub3QgdHJ5IGFnYWluLiAqL1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xMDAxPXN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMDYyLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEwNjM6XHRcdHJldCA9IG5ldGNvbnNfbmV0cG9sbF9zZXR1cChudCk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTA2NC1cdFx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yNjAxPXN0YXRpYyBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKmFsbG9jX3BhcmFtX3RhcmdldChjaGFyICp0YXJnZXRfY29uZmlnLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjM5LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI2NDA6XHRlcnIgPSBuZXRjb25zX25ldHBvbGxfc2V0dXAobnQpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2NDEtXHRpZiAoZXJyKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDYzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBOZXR3b3JrIFBvbGxpbmcgU2V0dXAqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgbmV0Y29uc19uZXRwb2xsX3NldHVwYCBmdW5jdGlvbiwgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgY2FsbGVkIGZyb20gYSBmZXcga2V5IHBsYWNlczogYGVuYWJsZWRfc3RvcmVgIHdpdGhpbiB0aGUgY29uZmlnZnMgZnJhbWV3b3JrLCBgcmVzdW1lX3RhcmdldGAsIGFuZCBgYWxsb2NfcGFyYW1fdGFyZ2V0YC4gR2l2ZW4gdGhpcyBkaXN0cmlidXRpb24sIGBlbmFibGVkX3N0b3JlYCBzZWVtcyBsaWtlIGEgcGFydGljdWxhcmx5IGdvb2Qgc3ltYm9sIHRvIHplcm8gaW4gb24sIGFsb25nIHdpdGggYGxvY2FsX2lwX3N0b3JlYCBhbmQgYHJlbW90ZV9pcF9zdG9yZWAsIGFzIHRoZXkmIzM5O3JlIGNsZWFybHkgcmVsYXRlZC4KCkhtbSwgSSYjMzk7bSBhbHNvIHNlZWluZyBzb21lIG1vZGlmaWNhdGlvbnMgdG8gYG5ldHBvbGxfc2VuZF91ZHBgLiBUaGF0IGZ1bmN0aW9uIGlzLCBvZiBjb3Vyc2UsIGNyaXRpY2FsIGZvciBhY3R1YWxseSB0cmFuc21pdHRpbmcgbWVzc2FnZXMuIFNvLCBteSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBxdWlja2x5IGlkZW50aWZ5IGFsbCB0aGUgY2FsbGVycyBvZiBgbmV0cG9sbF9zZW5kX3VkcGAgdG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZSBvZiBpdHMgdXNhZ2UgY29udGV4dC4gR290dGEgdW5kZXJzdGFuZCBob3cgZGF0YSBmbG93cyBpbiBhbmQgb3V0IGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25ldHBvbGxfc2VuZF91ZHAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIxNDU9c3RhdGljIHZvaWQgcHVzaF9pcHY2KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxNjgtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjE2OTpzdGF0aWMgaW50IG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxNzAtXHRcdFx0ICAgIGludCBsZW4pXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMDYtLyoqXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjIwNzogKiBzZW5kX3VkcCAtIFdyYXBwZXIgZm9yIG5ldHBvbGxfc2VuZF91ZHAgdGhhdCBjb3VudHMgZXJyb3JzXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIwOC0gKiBAbnQ6IHRhcmdldCB0byBzZW5kIG1lc3NhZ2UgdG9cbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIxMS0gKlxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIyMTI6ICogQ2FsbHMgbmV0cG9sbF9zZW5kX3VkcCBhbmQgY2xhc3NpZmllcyB0aGUgcmV0dXJuIHZhbHVlLiBJZiBhbiBlcnJvclxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMTMtICogb2NjdXJyZWQgaXQgaW5jcmVtZW50cyBzdGF0aXN0aWNzIGluIG50LVx1MDAzZXN0YXRzIGFjY29yZGluZ2x5LlxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIyMTQ6ICogT25seSBjYWxscyBuZXRwb2xsX3NlbmRfdWRwIGlmIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMgaXMgZGlzYWJsZWQuXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIxNS0gKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yMjE2PXN0YXRpYyB2b2lkIHNlbmRfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNvbnN0IGNoYXIgKm1zZywgaW50IGxlbilcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjE3LXtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMjE4Olx0aW50IHJlc3VsdCA9IG5ldHBvbGxfc2VuZF91ZHAobnQsIG1zZywgbGVuKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjE5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTIxMAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldGNvbnNvbGUgRGF0YSBGbG93KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJJiMzOTttIHNlZWluZywgdGhlIGBzZW5kX3VkcGAgZnVuY3Rpb24gaXMgYXQgdGhlIGNvcmUgb2YgdGhlIG5ldGNvbnNvbGUgZGF0YSB0cmFuc21pc3Npb24uIEl0JiMzOTtzIGNhbGxlZCBieSBgd3JpdGVfZXh0X21zZ2AgYW5kIGB3cml0ZV9tc2dgLCB3aGljaCBpbiB0dXJuIGFyZSBpbnZva2VkIGJ5IGBuZXRjb25zb2xlX2V4dF9lbWl0YCBhbmQgYG5ldGNvbnNvbGVfZW1pdGAuIFRoZXNlIGxhdHRlciBmdW5jdGlvbnMgYXJlIHJlZ2lzdGVyZWQgYXMgY29uc29sZSB3cml0ZSBjYWxsYmFja3MsIG1lYW5pbmcgdGhleSYjMzk7cmUgdHJpZ2dlcmVkIHdoZW5ldmVyIHNvbWV0aGluZyBpcyB3cml0dGVuIHRvIHRoZSBrZXJuZWwgbG9nLCBiZSBpdCB0aHJvdWdoIGAvZGV2L2ttc2dgIG9yIGEgc2ltcGxlIGBwcmludGtgLiBUaGF0IG1ha2VzIHRoZSB3aG9sZSBzeXN0ZW0gYWNjZXNzaWJsZSBhbmQgc29tZXRoaW5nIHRvIGtlZXAgYW4gZXllIG9uLgoKTm93LCBsZXQmIzM5O3MgcGlucG9pbnQgdGhlIGtleSBwbGF5ZXJzIGluIHRoaXMgcHJvY2Vzcy4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgZm9sbG93aW5nIHN5bWJvbHM6IGBsb2NhbF9pcF9zdG9yZWAsIGByZW1vdGVfaXBfc3RvcmVgLCBgZW5hYmxlZF9zdG9yZWAsIGBuZXRjb25zX25ldHBvbGxfc2V0dXBgLCBgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZWAsIGFuZCBgbmV0cG9sbF9zZW5kX3VkcGAuIFRoZXNlIGFyZSBsaWtlbHkgY3J1Y2lhbCBmb3IgY29uZmlndXJhdGlvbiwgbmV0d29yayBzZXR1cCwgYW5kIGFjdHVhbCB0cmFuc21pc3Npb24uCgpGaW5hbGx5LCBhIGtleSBxdWVzdGlvbiBjb21lcyB0byBtaW5kOiBEb2VzIGBORVRDT05TT0xFX0RZTkFNSUNgIGNvbmZpZ3VyYXRpb24gbmVlZCB0byBiZSBlbmFibGVkIGZvciBgbG9jYWxfaXBfc3RvcmVgIGFuZCBgcmVtb3RlX2lwX3N0b3JlYCB0byBmdW5jdGlvbiBjb3JyZWN0bHk/IFRoaXMgaXMgYW4gaW1wb3J0YW50IHF1ZXN0aW9uLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgZGVwZW5kZW5jeTsgdW5kZXJzdGFuZGluZyB0aGF0IHdpbGwgYmUgdmVyeSBpbXBvcnRhbnQgZm9yIHRoaXMgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsb2NhbF9pcF9zdG9yZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTIwMT1zdGF0aWMgc3NpemVfdCByZW1vdGVfcG9ydF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEyMjItXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTIyMzpzdGF0aWMgc3NpemVfdCBsb2NhbF9pcF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZixcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMjI0LVx0XHRzaXplX3QgY291bnQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExODIwCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNvbmZpZ2ZzIEludmVzdGlnYXRpb24qKgoKT2theSwgc28gdGhlc2UgYXJlIGRlZmluaXRlbHkgY29uZmlnZnMgY2FsbGJhY2tzLiBBbmQsIEkgcmVjYWxsLCB0aG9zZSBhcmUgb25seSBjb21waWxlZCB3aGVuIGBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDYCBpcyBlbmFibGVkLiBUaW1lIHRvIGRvdWJsZS1jaGVjayBpZiBgTkVUQ09OU09MRWAgcmVsaWVzIG9uIGFueXRoaW5nIGVsc2UgdGhhdCBtaWdodCBuZWVkIG91ciBhdHRlbnRpb24gZm9yIGVuYWJsZW1lbnQuIEl0IGxvb2tzIGxpa2UgaXQgZGVwZW5kcyBvbiBgUFJJTlRLYCwgd2hpY2gsIGluIHByYWN0aWNlLCBpcyBhbG1vc3QgYWx3YXlzIGVuYWJsZWQuIEFoYSwgYE5FVENPTlNPTEVfRFlOQU1JQ2AgaGFzIGl0cyBvd24gZGVwZW5kZW5jaWVzOiBgTkVUQ09OU09MRSAmYW1wOyZhbXA7IFNZU0ZTICZhbXA7JmFtcDsgQ09ORklHRlNfRlNgLiBSaWdodCwgc28gdG8gZ2V0IHRoaXMgd29ya2luZywgd2UmIzM5O2xsIG5lZWQgdG8gZW5hYmxlIGBDT05GSUdGU19GU2AuIExldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBnb3RjaGFzIHdpdGggYENPTkZJR0ZTX0ZTYCBpdHNlbGYuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDT05GSUdGU19GUyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9jb25maWdmcy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9jb25maWdmcy9LY29uZmlnOjI6Y29uZmlnIENPTkZJR0ZTX0ZTXG5mcy9jb25maWdmcy9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtVc2Vyc3BhY2UtZHJpdmVuIGNvbmZpZ3VyYXRpb24gZmlsZXN5c3RlbVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjE2NQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDEwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDb25maWd1cmluZyB0aGUgTmV0d29yayBDb25zb2xlIGFuZCBJUHY2IGZvciB0aGUgVXBkYXRlKioKCk9rYXksIHNvIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBgQ09ORklHRlNfRlNgIGlzc3VlIGhlcmUsIGFuZCBpdCYjMzk7cyBhIHRyaXN0YXRlLiBHaXZlbiB0aGF0LCBJIG5lZWQgdG8gaW5jbHVkZSBgTkVUQ09OU09MRWAsIGBORVRDT05TT0xFX0RZTkFNSUNgLCBhbmQgYENPTkZJR0ZTX0ZTYCBpbiBgRW5hYmxlQ29uZmlnc2AuIFRoYXQgY292ZXJzIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgd2UgbmVlZC4KCk5vdywgbGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHJlbGF0ZWQgY29uZmlncyB0aGF0IG1pZ2h0IGJlIHVzZWZ1bC4gQWgsIGBORVRDT05TT0xFX0VYVEVOREVEX0xPR2AuIE5vdCBlc3NlbnRpYWwsIGJ1dCBwcm9iYWJseSBhIGdvb2QgaWRlYSB0byBlbmFibGUgaXQgZm9yIG1vcmUgaW4tZGVwdGggbG9nZ2luZyBkdXJpbmcgdGVzdGluZyBhbmQgZGVidWdnaW5nLgoKUmlnaHQsIHRoZSBwYXRjaCBzcGVjaWZpY2FsbHkgdG91Y2hlcyBJUHY2IGhhbmRsaW5nLCBzbyBgSVBWNmAgaXMgZGVmaW5pdGVseSBhIHJlcXVpcmVtZW50LiBMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhhdCBpbiBgbmV0L2lwdjYvS2NvbmZpZ2AgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLiBHb3R0YSBiZSB0aG9yb3VnaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQVjYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvS2NvbmZpZy01LVxubmV0L2lwdjYvS2NvbmZpZzo2Om1lbnVjb25maWcgSVBWNlxubmV0L2lwdjYvS2NvbmZpZy03LVx0Ym9vbCBcJiMzNDtUaGUgSVB2NiBwcm90b2NvbFwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWc9MTk9aWYgSVBWNlxubmV0L2lwdjYvS2NvbmZpZy0yMC1cbm5ldC9pcHY2L0tjb25maWc6MjE6Y29uZmlnIElQVjZfUk9VVEVSX1BSRUZcbm5ldC9pcHY2L0tjb25maWctMjItXHRib29sIFwmIzM0O0lQdjY6IFJvdXRlciBQcmVmZXJlbmNlIChSRkMgNDE5MSkgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMzAtXG5uZXQvaXB2Ni9LY29uZmlnOjMxOmNvbmZpZyBJUFY2X1JPVVRFX0lORk9cbm5ldC9pcHY2L0tjb25maWctMzItXHRib29sIFwmIzM0O0lQdjY6IFJvdXRlIEluZm9ybWF0aW9uIChSRkMgNDE5MSkgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMzgtXG5uZXQvaXB2Ni9LY29uZmlnOjM5OmNvbmZpZyBJUFY2X09QVElNSVNUSUNfREFEXG5uZXQvaXB2Ni9LY29uZmlnLTQwLVx0Ym9vbCBcJiMzNDtJUHY2OiBFbmFibGUgUkZDIDQ0MjkgT3B0aW1pc3RpYyBEQURcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnPTEwMj1jb25maWcgSU5FVDZfSVBDT01QXG4tLVxubmV0L2lwdjYvS2NvbmZpZy0xMTEtXG5uZXQvaXB2Ni9LY29uZmlnOjExMjpjb25maWcgSVBWNl9NSVA2XG5uZXQvaXB2Ni9LY29uZmlnLTExMy1cdHRyaXN0YXRlIFwmIzM0O0lQdjY6IE1vYmlsaXR5XCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0xMTktXG5uZXQvaXB2Ni9LY29uZmlnOjEyMDpjb25maWcgSVBWNl9JTEFcbm5ldC9pcHY2L0tjb25maWctMTIxLVx0dHJpc3RhdGUgXCYjMzQ7SVB2NjogSWRlbnRpZmllciBMb2NhdG9yIEFkZHJlc3NpbmcgKElMQSlcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnPTE0Nj1jb25maWcgSU5FVDZfVFVOTkVMXG4tLVxubmV0L2lwdjYvS2NvbmZpZy0xNDktXG5uZXQvaXB2Ni9LY29uZmlnOjE1MDpjb25maWcgSVBWNl9WVElcbm5ldC9pcHY2L0tjb25maWctMTUxLVx0dHJpc3RhdGUgXCYjMzQ7VmlydHVhbCAoc2VjdXJlKSBJUHY2OiB0dW5uZWxpbmdcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTE2MS1cbm5ldC9pcHY2L0tjb25maWc6MTYyOmNvbmZpZyBJUFY2X1NJVFxubmV0L2lwdjYvS2NvbmZpZy0xNjMtXHR0cmlzdGF0ZSBcJiMzNDtJUHY2OiBJUHY2LWluLUlQdjQgdHVubmVsIChTSVQgZHJpdmVyKVwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMTc2LVxubmV0L2lwdjYvS2NvbmZpZzoxNzc6Y29uZmlnIElQVjZfU0lUXzZSRFxubmV0L2lwdjYvS2NvbmZpZy0xNzgtXHRib29sIFwmIzM0O0lQdjY6IElQdjYgUmFwaWQgRGVwbG95bWVudCAoNlJEKVwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMTk1LVxubmV0L2lwdjYvS2NvbmZpZzoxOTY6Y29uZmlnIElQVjZfTkRJU0NfTk9ERVRZUEVcbm5ldC9pcHY2L0tjb25maWctMTk3LVx0Ym9vbFxubmV0L2lwdjYvS2NvbmZpZy0xOTgtXG5uZXQvaXB2Ni9LY29uZmlnOjE5OTpjb25maWcgSVBWNl9UVU5ORUxcbm5ldC9pcHY2L0tjb25maWctMjAwLVx0dHJpc3RhdGUgXCYjMzQ7SVB2NjogSVAtaW4tSVB2NiB0dW5uZWwgKFJGQzI0NzMpXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yMDktXG5uZXQvaXB2Ni9LY29uZmlnOjIxMDpjb25maWcgSVBWNl9HUkVcbm5ldC9pcHY2L0tjb25maWctMjExLVx0dHJpc3RhdGUgXCYjMzQ7SVB2NjogR1JFIHR1bm5lbFwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMjI3LVxubmV0L2lwdjYvS2NvbmZpZzoyMjg6Y29uZmlnIElQVjZfRk9VXG5uZXQvaXB2Ni9LY29uZmlnLTIyOS1cdHRyaXN0YXRlXG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yMzEtXG5uZXQvaXB2Ni9LY29uZmlnOjIzMjpjb25maWcgSVBWNl9GT1VfVFVOTkVMXG5uZXQvaXB2Ni9LY29uZmlnLTIzMy1cdHRyaXN0YXRlXG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yMzYtXG5uZXQvaXB2Ni9LY29uZmlnOjIzNzpjb25maWcgSVBWNl9NVUxUSVBMRV9UQUJMRVNcbm5ldC9pcHY2L0tjb25maWctMjM4LVx0Ym9vbCBcJiMzNDtJUHY2OiBNdWx0aXBsZSBSb3V0aW5nIFRhYmxlc1wmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMjQyLVxubmV0L2lwdjYvS2NvbmZpZzoyNDM6Y29uZmlnIElQVjZfU1VCVFJFRVNcbm5ldC9pcHY2L0tjb25maWctMjQ0LVx0Ym9vbCBcJiMzNDtJUHY2OiBzb3VyY2UgYWRkcmVzcyBiYXNlZCByb3V0aW5nXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yNTYtXG5uZXQvaXB2Ni9LY29uZmlnOjI1Nzpjb25maWcgSVBWNl9NUk9VVEVcbm5ldC9pcHY2L0tjb25maWctMjU4LVx0Ym9vbCBcJiMzNDtJUHY2OiBtdWx0aWNhc3Qgcm91dGluZ1wmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMjY0LVxubmV0L2lwdjYvS2NvbmZpZzoyNjU6Y29uZmlnIElQVjZfTVJPVVRFX01VTFRJUExFX1RBQkxFU1xubmV0L2lwdjYvS2NvbmZpZy0yNjYtXHRib29sIFwmIzM0O0lQdjY6IG11bHRpY2FzdCBwb2xpY3kgcm91dGluZ1wmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMjc4LVxubmV0L2lwdjYvS2NvbmZpZzoyNzk6Y29uZmlnIElQVjZfUElNU01fVjJcbm5ldC9pcHY2L0tjb25maWctMjgwLVx0Ym9vbCBcJiMzNDtJUHY2OiBQSU0tU00gdmVyc2lvbiAyIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTI4NS1cbm5ldC9pcHY2L0tjb25maWc6Mjg2OmNvbmZpZyBJUFY2X1NFRzZfTFdUVU5ORUxcbm5ldC9pcHY2L0tjb25maWctMjg3LVx0Ym9vbCBcJiMzNDtJUHY2OiBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIGVuY2Fwc3VsYXRpb24gc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMjk5LVxubmV0L2lwdjYvS2NvbmZpZzozMDA6Y29uZmlnIElQVjZfU0VHNl9ITUFDXG5uZXQvaXB2Ni9LY29uZmlnLTMwMS1cdGJvb2wgXCYjMzQ7SVB2NjogU2VnbWVudCBSb3V0aW5nIEhNQUMgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMzExLVxubmV0L2lwdjYvS2NvbmZpZzozMTI6Y29uZmlnIElQVjZfU0VHNl9CUEZcbm5ldC9pcHY2L0tjb25maWctMzEzLVx0ZGVmX2Jvb2wgeVxuLS1cbm5ldC9pcHY2L0tjb25maWctMzE2LVxubmV0L2lwdjYvS2NvbmZpZzozMTc6Y29uZmlnIElQVjZfUlBMX0xXVFVOTkVMXG5uZXQvaXB2Ni9LY29uZmlnLTMxOC1cdGJvb2wgXCYjMzQ7SVB2NjogUlBMIFNvdXJjZSBSb3V0aW5nIEhlYWRlciBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0zMjctXG5uZXQvaXB2Ni9LY29uZmlnOjMyODpjb25maWcgSVBWNl9JT0FNNl9MV1RVTk5FTFxubmV0L2lwdjYvS2NvbmZpZy0zMjktXHRib29sIFwmIzM0O0lQdjY6IElPQU0gUHJlLWFsbG9jYXRlZCBUcmFjZSBpbnNlcnRpb24gc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDAxNwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDExOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgTmV0d29yayBDb25zb2xlIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29uZmlndXJhdGlvbiBhbmQgYElQVjZgIGlzIGRlZmluZWQgYXMgYSBib29sZWFuIHZhbHVlLiBUaGF0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIE5vdywgSSB3YW50IHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7dmUgZ290IGBORVRDT05TT0xFYCwgYE5FVENPTlNPTEVfRFlOQU1JQ2AsIGBDT05GSUdGU19GU2AsIGFuZCBvZiBjb3Vyc2UsIGBJUFY2YCBhZ2Fpbi4gSSYjMzk7bSBnb2luZyB0byBrZWVwIHRoZXNlIGluIG1pbmQgYXMgcG90ZW50aWFsbHkgcmVsYXRlZC4KCk15IGF0dGVudGlvbiBpcyBhbHNvIGRyYXduIHRvIHNvbWUgc3BlY2lmaWMgc3ltYm9sczogYGxvY2FsX2lwX3N0b3JlYCwgYHJlbW90ZV9pcF9zdG9yZWAsIGBlbmFibGVkX3N0b3JlYCwgYG5ldGNvbnNfbmV0cG9sbF9zZXR1cGAsIGBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lYCwgYW5kIGBuZXRwb2xsX3NlbmRfdWRwYC4gVGhlc2UgYXJlIGxpa2VseSBrZXkgZWxlbWVudHMgaW4gdGhlIG5ldHdvcmsgY29uc29sZSYjMzk7cyBvcGVyYXRpb24uCgpDcnVjaWFsbHksIEkgbmVlZCB0byBtYWtlIHN1cmUgYG5ldHBvbGxfc2VuZF91ZHBgIGlzbiYjMzk7dCB1c2luZyB0aGUgc3RhdGljIGlubGluZSBvcHRpbWl6YXRpb24uIFRoYXQgY291bGQgaW1wYWN0IGl0cyBiZWhhdmlvciBhbmQgSSB3YW50IHRvIHJ1bGUgdGhhdCBvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25ldHBvbGxfc2VuZF91ZHAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIxNDU9c3RhdGljIHZvaWQgcHVzaF9pcHY2KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxNjgtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjE2OTpzdGF0aWMgaW50IG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxNzAtXHRcdFx0ICAgIGludCBsZW4pXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMDYtLyoqXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjIwNzogKiBzZW5kX3VkcCAtIFdyYXBwZXIgZm9yIG5ldHBvbGxfc2VuZF91ZHAgdGhhdCBjb3VudHMgZXJyb3JzXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIwOC0gKiBAbnQ6IHRhcmdldCB0byBzZW5kIG1lc3NhZ2UgdG9cbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIxMS0gKlxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIyMTI6ICogQ2FsbHMgbmV0cG9sbF9zZW5kX3VkcCBhbmQgY2xhc3NpZmllcyB0aGUgcmV0dXJuIHZhbHVlLiBJZiBhbiBlcnJvclxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMTMtICogb2NjdXJyZWQgaXQgaW5jcmVtZW50cyBzdGF0aXN0aWNzIGluIG50LVx1MDAzZXN0YXRzIGFjY29yZGluZ2x5LlxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIyMTQ6ICogT25seSBjYWxscyBuZXRwb2xsX3NlbmRfdWRwIGlmIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMgaXMgZGlzYWJsZWQuXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIxNS0gKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yMjE2PXN0YXRpYyB2b2lkIHNlbmRfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNvbnN0IGNoYXIgKm1zZywgaW50IGxlbilcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjE3LXtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMjE4Olx0aW50IHJlc3VsdCA9IG5ldHBvbGxfc2VuZF91ZHAobnQsIG1zZywgbGVuKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjE5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDc5NwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgU3RhdGljIEZ1bmN0aW9ucyBpbiBOZXRjb25zb2xlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHRoZSBndWlkZWxpbmUgaXMgcHJldHR5IGNsZWFyOiB3ZSB3YW50IHRvIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBlbnRyeSBwb2ludHMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gVGhlIGdvYWwgaGVyZSBpcyB0byBtYWludGFpbiBhIGNsZWFyIEFQSSBib3VuZGFyeSwgSSB1bmRlcnN0YW5kLiBJIHNlZSBgbmV0cG9sbF9zZW5kX3VkcGAgYW5kIHRoYXQgaW1tZWRpYXRlbHkgcG9wcyBvdXQgYXMgYSBwb3RlbnRpYWwgaXNzdWUgYmVjYXVzZSBpdCYjMzk7cyBzdGF0aWMuIEJ1dCwgaXQmIzM5O3Mgbm90IGlubGluZS4gU28sIHRoYXQmIzM5O3MgYSBwb2ludCBpbiBpdHMgZmF2b3IsIGFsdGhvdWdoIEkgc3RpbGwgbmVlZCB0byBjb25zaWRlciBpdCYjMzk7cyB2aXNpYmlsaXR5LiBUaGVuIEkgc2NhbiBgbG9jYWxfaXBfc3RvcmVgIGFuZCBgcmVtb3RlX2lwX3N0b3JlYCwgYWxzbyBzdGF0aWMsIGJ1dCB0aGVpciB1c2UgYXMgZnVuY3Rpb24gcG9pbnRlcnMgd2l0aGluIGEgc3RydWN0IG1lYW5zIHRoZXkgYXJlIHVubGlrZWx5IHRvIGJlIGlubGluZWQgYW5kIHRoZSBjb21waWxlciB3b3VsZCBuZWVkIHRoZWlyIGFkZHJlc3MuIEdvb2QsIHRoYXTigJlzIGFub3RoZXIgb25lIHRoYXQgcHJvYmFibHkgd29u4oCZdCBjYXVzZSBpc3N1ZXMuCgpgbmV0Y29uc19uZXRwb2xsX3NldHVwYCBpcyBhbHNvIHN0YXRpYywgYnV0IHRoZSBzaGVlciBzaXplIG9mIHRoZSB0aGluZyBhbmQgaXRzIG11bHRpcGxlIGNhbGwgc2l0ZXMgbWVhbiB0aGUgY29tcGlsZXIgcHJvYmFibHkgKndvbiYjMzk7dCogaW5saW5lIGl0LCBhbmQgaXQmIzM5O3MgbGVzcyBvZiBhIHByb2JsZW0uIE5vdywgSSYjMzk7bSBnZXR0aW5nIHRvIGBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lYC4gSXQmIzM5O3Mgc3RhdGljIGFuZCBnZXRzIGNhbGxlZCBmcm9tIGEgc3RhdGljIGZ1bmN0aW9uIGl0c2VsZiwgYGFsbG9jX3BhcmFtX3RhcmdldGAsIHdoaWNoIGlzIGFsc28gc3RhdGljLCBhbmQgdGhhdCBnZXRzIGNhbGxlZCBmcm9tIGBuZXRjb25zb2xlX2luaXRgLiBUaGlzIGlzIGEgc3RyaW5nIG9mIHN0YXRpYyBjYWxscyBhbmQgdGhhdCYjMzk7cyBjb25jZXJuaW5nLiBUaGF0IG9uZSBpcyBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgaW5saW5pbmcuCgpTbywgSSBuZWVkIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzIGF2YWlsYWJsZSwgbGV0JiMzOTtzIHNlZS4uLiBvaCB3YWl0IGBuZXRjb25zb2xlX2luaXRgLCB0aGF0IGxvb2tlZCBwcm9taXNpbmcsIGJ1dCBub3BlLCBpdCYjMzk7cyBgc3RhdGljIGludCBfX2luaXQgbmV0Y29uc29sZV9pbml0KHZvaWQpYC4gRGFtbi4gRm9yIGNvbmZpZ2ZzLCB0aGUgYF9zdG9yZWAgYW5kIGBfc2hvd2AgZnVuY3Rpb25zIGFyZSBzdGF0aWMsIGJ1dCB0aGVpciBhZGRyZXNzZXMgYXJlIGJlaW5nIHRha2VuIHNvIHRoZXkgc2hvdWxkbiYjMzk7dCBiZSBpbmxpbmVkLiBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBhY3R1YWwgcHVibGljIEFQSSBmb3IgdGhpcyB0aGluZy4gSSBzaG91bGQgY2hlY2sgdGhlIGZ1bmN0aW9ucyB3aXRoaW4gYG5ldGNvbnNvbGVfdGFyZ2V0X2l0ZW1fb3BzYCBvciBzaW1pbGFyIHN0cnVjdHVyZXMsIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIGV4dGVybmFsbHkgdmlzaWJsZSBBUEkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xvY2FsX2lwX3N0b3JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xMjAxPXN0YXRpYyBzc2l6ZV90IHJlbW90ZV9wb3J0X3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTIyMi1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMjIzOnN0YXRpYyBzc2l6ZV90IGxvY2FsX2lwX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEyMjQtXHRcdHNpemVfdCBjb3VudClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU2NjUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZCwgZ2VhcmVkIHRvd2FyZCBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk5hdmlnYXRpbmcgdGhlIENvZGViYXNlOiBUYXJnZXRlZCBFeHBsb3JhdGlvbioqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24gaXMgYmVpbmcgdXRpbGl6ZWQuIEluc3RlYWQgb2YgYSBicm9hZCBzd2VlcCwgSSYjMzk7bSBnb2luZyB0byBhZG9wdCBhIG1vcmUgZm9jdXNlZCBhcHByb2FjaC4gTGV0JiMzOTtzIG5vdCBnZXQgbG9zdCBpbiB0aGUgd2VlZHMuIEkmIzM5O2xsIHplcm8gaW4gb24gdGhlIHZpY2luaXR5IG9mIGxpbmUgMTIyMy4gVGhhdCBzZWVtcyBsaWtlIGEgcmVhc29uYWJsZSBzdGFydGluZyBwb2ludCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIGl0cyB1c2FnZS4gSeKAmWxsIG1ha2UgYSBub3RlIG9mIHRoaXMgbGluZSBudW1iZXIgZm9yIHF1aWNrIHJlZmVyZW5jZSBhbmQgdG8gbWFrZSBzdXJlIEkgZG9uJiMzOTt0IG92ZXJsb29rIGFueSByZWxhdGVkIGFyZWFzLiBJdCYjMzk7cyBhIHF1aWNrIGFuZCBlZmZpY2llbnQgd2F5IHRvIHN0YXJ0IGJ1aWxkaW5nIGEgbWVudGFsIG1hcCBvZiB0aGUgY2FsbCBzdGFjayB3aXRob3V0IGdldHRpbmcgYm9nZ2VkIGRvd24gaW4gaXJyZWxldmFudCBkZXRhaWxzLiBUaGlzIHRhcmdldGVkIHJlYWRpbmcgYWxsb3dzIGZvciBiZXR0ZXIgY29tcHJlaGVuc2lvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyMjA6XHRcdHJldHVybiByZXQ7XG4xMjIxOlx0fVxuMTIyMjpcdFxuMTIyMzpcdHN0YXRpYyBzc2l6ZV90IGxvY2FsX2lwX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxuMTIyNDpcdFx0XHRzaXplX3QgY291bnQpXG4xMjI1Olx0e1xuMTIyNjpcdFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcbjEyMjc6XHRcdHNzaXplX3QgcmV0ID0gLUVJTlZBTDtcbjEyMjg6XHRcbjEyMjk6XHRcdGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF9sb2NrKCk7XG4xMjMwOlx0XHRpZiAobnQtXHUwMDNlc3RhdGUgPT0gU1RBVEVfRU5BQkxFRCkge1xuMTIzMTpcdFx0XHRwcl9lcnIoXCYjMzQ7dGFyZ2V0ICglcykgaXMgZW5hYmxlZCwgZGlzYWJsZSB0byB1cGRhdGUgcGFyYW1ldGVyc1xcblwmIzM0OyxcbjEyMzI6XHRcdFx0ICAgICAgIGNvbmZpZ19pdGVtX25hbWUoXHUwMDI2bnQtXHUwMDNlZ3JvdXAuY2dfaXRlbSkpO1xuMTIzMzpcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4xMjM0Olx0XHR9XG4xMjM1Olx0XG4xMjM2Olx0XHRpZiAobmV0cG9sbF9wYXJzZV9pcF9hZGRyKGJ1ZiwgXHUwMDI2bnQtXHUwMDNlbG9jYWxfaXApIFx1MDAzYyAwKVxuMTIzNzpcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4xMjM4Olx0XG4xMjM5Olx0XHRyZXQgPSBjb3VudDtcbjEyNDA6XHRvdXRfdW5sb2NrOlxuMTI0MTpcdFx0ZHluYW1pY19uZXRjb25zb2xlX211dGV4X3VubG9jaygpO1xuMTI0MjpcdFx0cmV0dXJuIHJldDtcbjEyNDM6XHR9XG4xMjQ0Olx0XG4xMjQ1Olx0c3RhdGljIHNzaXplX3QgcmVtb3RlX2lwX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxuMTI0NjpcdFx0ICAgICAgIHNpemVfdCBjb3VudClcbjEyNDc6XHR7XG4xMjQ4Olx0XHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0pO1xuMTI0OTpcdFx0c3NpemVfdCByZXQgPSAtRUlOVkFMO1xuMTI1MDpcdFxuMTI1MTpcdFx0ZHluYW1pY19uZXRjb25zb2xlX211dGV4X2xvY2soKTtcbjEyNTI6XHRcdGlmIChudC1cdTAwM2VzdGF0ZSA9PSBTVEFURV9FTkFCTEVEKSB7XG4xMjUzOlx0XHRcdHByX2VycihcJiMzNDt0YXJnZXQgKCVzKSBpcyBlbmFibGVkLCBkaXNhYmxlIHRvIHVwZGF0ZSBwYXJhbWV0ZXJzXFxuXCYjMzQ7LFxuMTI1NDpcdFx0XHQgICAgICAgY29uZmlnX2l0ZW1fbmFtZShcdTAwMjZudC1cdTAwM2Vncm91cC5jZ19pdGVtKSk7XG4xMjU1Olx0XHRcdGdvdG8gb3V0X3VubG9jaztcbjEyNTY6XHRcdH1cbjEyNTc6XHRcbjEyNTg6XHRcdGlmIChuZXRwb2xsX3BhcnNlX2lwX2FkZHIoYnVmLCBcdTAwMjZudC1cdTAwM2VyZW1vdGVfaXApIFx1MDAzYyAwKVxuMTI1OTpcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NDk3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgSSYjMzk7bSByZWFkeSB0byBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBhIHN1bW1hcnkgZnJvbSBhIGZpcnN0LXBlcnNvbiwgZXhwZXJ0IHBlcnNwZWN0aXZlOgoKKipQaW5wb2ludGluZyB0aGUgU291cmNlKioKCkFscmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgZXN0YWJsaXNoIHRoZSBjb250ZXh0LiBUaGlzIGlzIGFib3V0IHJlZ2lzdHJhdGlvbiwgc28gdGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGlzICp3aGVyZSogYXJlIHRoZXNlIHRoaW5ncyByZWdpc3RlcmVkPyBXaGF0IHN5c3RlbXMsIGRhdGFiYXNlcywgb3IganVyaXNkaWN0aW9ucyBhcmUgd2UgdGFsa2luZyBhYm91dD8gVGhlIHNwZWNpZmljaXR5IG9mIHRoZSByZWdpc3RyYXRpb24gcHJvY2VzcyBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgbmV4dCBzdGVwcy4gV2l0aG91dCBrbm93aW5nIHRoZSByZWdpc3RyYXRpb24gYm9keSBvciBtZXRob2QsIGFueSBhbmFseXNpcyB3b3VsZCBiZSBpbmNvbXBsZXRlLiBMZXQmIzM5O3Mgc2VlIGlmIHRoYXQgZGV0YWlsIGlzIGFwcGFyZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdGU19BVFRSJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xNTQyPXN0YXRpYyBzc2l6ZV90IHN5c2RhdGFfY3B1X25yX2VuYWJsZWRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNTc0LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE1NzU6Q09ORklHRlNfQVRUUih1c2VyZGF0dW1fLCB2YWx1ZSk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTU3NjpDT05GSUdGU19BVFRSKHN5c2RhdGFfLCBjcHVfbnJfZW5hYmxlZCk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTU3NzpDT05GSUdGU19BVFRSKHN5c2RhdGFfLCB0YXNrbmFtZV9lbmFibGVkKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNTc4OkNPTkZJR0ZTX0FUVFIoc3lzZGF0YV8sIHJlbGVhc2VfZW5hYmxlZCk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTU3OTpDT05GSUdGU19BVFRSKHN5c2RhdGFfLCBtc2dpZF9lbmFibGVkKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNTgwLVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xNjUxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSB1c2VyZGF0YV90eXBlID0ge1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNjU3LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE2NTg6Q09ORklHRlNfQVRUUigsIGVuYWJsZWQpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE2NTk6Q09ORklHRlNfQVRUUigsIGV4dGVuZGVkKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNjYwOkNPTkZJR0ZTX0FUVFIoLCBkZXZfbmFtZSk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTY2MTpDT05GSUdGU19BVFRSKCwgbG9jYWxfcG9ydCk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTY2MjpDT05GSUdGU19BVFRSKCwgcmVtb3RlX3BvcnQpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE2NjM6Q09ORklHRlNfQVRUUigsIGxvY2FsX2lwKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNjY0OkNPTkZJR0ZTX0FUVFIoLCByZW1vdGVfaXApO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE2NjU6Q09ORklHRlNfQVRUUl9STygsIGxvY2FsX21hYyk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTY2NjpDT05GSUdGU19BVFRSKCwgcmVtb3RlX21hYyk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTY2NzpDT05GSUdGU19BVFRSKCwgcmVsZWFzZSk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTY2ODpDT05GSUdGU19BVFRSX1JPKCwgdHJhbnNtaXRfZXJyb3JzKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNjY5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzE5NwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldGNvbnNvbGUgQ29kZSBQYXRoKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBuZXRjb25zb2xlIGNvZGUgYW5kIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY3JpdGljYWwgZXhlY3V0aW9uIHBhdGguIEl0IGxvb2tzIGxpa2UgYGxvY2FsX2lwX3N0b3JlYCBhbmQgYHJlbW90ZV9pcF9zdG9yZWAgYXJlIGRlZmluaXRlbHkgZnVuY3Rpb24gcG9pbnRlcnMgdXRpbGl6ZWQgYnkgYENPTkZJR0ZTX0FUVFJgLCBhbmQgdGhleSBhcmVuJiMzOTt0IGlubGluZWQsIHdoaWNoIGlzIGhlbHBmdWwuIGBlbmFibGVkX3N0b3JlYCBpcyBhbm90aGVyIG5vbi1pbmxpbmVkIGZ1bmN0aW9uIHRvIGtlZXAgYW4gZXllIG9uLiBJbnRlcmVzdGluZywgYG5ldGNvbnNfbmV0cG9sbF9zZXR1cGAgZ2V0cyBjYWxsZWQgZnJvbSB3aXRoaW4gYGVuYWJsZWRfc3RvcmVgLgoKTm93IEkmIzM5O20gbG9va2luZyBmdXJ0aGVyIGRvd24gdGhlIGNhbGwgc3RhY2suIGBuZXRwb2xsX3NlbmRfdWRwYCBpcyBzdGF0aWMsIHdoaWNoIGNhbiBzb21ldGltZXMgYmUgYSByZWQgZmxhZywgYnV0IGl0IGFwcGVhcnMgdG8gYmUgYSBzaXplYWJsZSBmdW5jdGlvbi4gTGV0JiMzOTtzIHNlZS4uLiBgbmV0cG9sbF9zZW5kX3VkcGAgZ2V0cyBjYWxsZWQgZnJvbSBgc2VuZF91ZHBgLiBPa2F5LCBgc2VuZF91ZHBgIHRoZW4gZmVlZHMgaW50byBgd3JpdGVfZXh0X21zZ2AgYW5kIGB3cml0ZV9tc2dgLiBBaGEhIFRoZXNlIHR3byBmdW5jdGlvbnMsIGB3cml0ZV9leHRfbXNnYCBhbmQgYHdyaXRlX21zZ2AsIGFyZSByZWdpc3RlcmVkIHdpdGhpbiBgc3RydWN0IGNvbnNvbGUgbmV0Y29uc29sZV9leHRgIGFuZCBgc3RydWN0IGNvbnNvbGUgbmV0Y29uc29sZWAsIHJlc3BlY3RpdmVseS4gVGhhdOKAmXMgdGhlIGtleS4gVGhpcyBtYWtlcyBgd3JpdGVfZXh0X21zZ2AgYW5kIGB3cml0ZV9tc2dgIGV4Y2VsbGVudCBjYW5kaWRhdGVzIGZvciBkZWVwZXIgaW5zcGVjdGlvbiBhbmQgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7d3JpdGVfZXh0X21zZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NjgxCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuIE15IGZpcnN0IHRob3VnaHQgaXM6CgoqKkNoZWNraW5nIENvbnNvbGUgV3JpdGUgRnVuY3Rpb24gTm9tZW5jbGF0dXJlKioKCkhvbGQgb24gYSBzZWNvbmQsIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGlzIHByb2JsZW0sIEkgc2hvdWxkIGp1c3QgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGV4YWN0IG5hbWVzIG9mIHRoZSBjb25zb2xlIHdyaXRlIGZ1bmN0aW9ucy4gSSYjMzk7dmUgdXNlZCB0aGVtIGNvdW50bGVzcyB0aW1lcywgYnV0IGl0JiMzOTtzIGFsd2F5cyBnb29kIHRvIGhhdmUgYSBzcGVjaWZpYyBtZW1vcnkgdG8gcmVmZXIgdG8uIEkgZG9uJiMzOTt0IHdhbnQgdG8gZ2V0IHRyaXBwZWQgdXAgb24gc29tZXRoaW5nIHRyaXZpYWwgbGlrZSBhIGNhcGl0YWxpemF0aW9uIGlzc3VlIG9yIGEgc2xpZ2h0bHkgZGlmZmVyZW50IG5hbWluZyBjb252ZW50aW9uIHRoYXQgSSYjMzk7bSB1c2VkIHRvLiBCZXR0ZXIgdG8gY29uZmlybSB0aGUgc3ludGF4IGFuZCBiZSBjZXJ0YWluIG9mIHRoZSBmb3VuZGF0aW9uIGJlZm9yZSBidWlsZGluZyBhbnl0aGluZyBmdXJ0aGVyIG9uIHRvcCBvZiBpdC4gTGV0IG1lIGp1c3QgZ2xhbmNlIGF0IHRoZSByZWxldmFudCBkb2N1bWVudGF0aW9uIG9yIGFuIGV4YW1wbGUgc25pcHBldC4uLiB5ZXAsIGp1c3QgYSBxdWljayByZWZyZXNoZXIgdG8gbWFrZSBzdXJlIEkmIzM5O20gb24gdGhlIHJpZ2h0IHRyYWNrIG5hbWluZy13aXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgY29uc29sZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTEyPXN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbmV0Y29uc29sZV93cTtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTE3LSAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjExODpzdGF0aWMgc3RydWN0IGNvbnNvbGUgbmV0Y29uc29sZV9leHQsIG5ldGNvbnNvbGU7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTE5LVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yNDU5PXN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfd3JpdGUoc3RydWN0IG5iY29uX3dyaXRlX2NvbnRleHQgKndjdHh0LCBib29sIGV4dGVuZGVkKVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDg2LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI0ODc6c3RhdGljIHZvaWQgbmV0Y29uc29sZV93cml0ZV9leHQoc3RydWN0IGNvbnNvbGUgKmNvbiBfX2Fsd2F5c191bnVzZWQsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQ4OC1cdFx0XHRcdCBzdHJ1Y3QgbmJjb25fd3JpdGVfY29udGV4dCAqd2N0eHQpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0OTItXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjQ5MzpzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3dyaXRlX2Jhc2ljKHN0cnVjdCBjb25zb2xlICpjb24gX19hbHdheXNfdW51c2VkLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0OTQtXHRcdFx0XHQgICBzdHJ1Y3QgbmJjb25fd3JpdGVfY29udGV4dCAqd2N0eHQpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0OTgtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjQ5OTpzdGF0aWMgdm9pZCBuZXRjb25zb2xlX2RldmljZV9sb2NrKHN0cnVjdCBjb25zb2xlICpjb24gX19hbHdheXNfdW51c2VkLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI1MDAtXHRcdFx0XHQgICB1bnNpZ25lZCBsb25nICpmbGFncylcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yNTAxPV9fYWNxdWlyZXMoXHUwMDI2dGFyZ2V0X2xpc3RfbG9jaylcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjUwNS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNTA2OnN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfZGV2aWNlX3VubG9jayhzdHJ1Y3QgY29uc29sZSAqY29uIF9fYWx3YXlzX3VudXNlZCxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNTA3LVx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIGZsYWdzKVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yNjYzPXN0YXRpYyB2b2lkIGZyZWVfcGFyYW1fdGFyZ2V0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2NzQtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjY3NTpzdGF0aWMgc3RydWN0IGNvbnNvbGUgbmV0Y29uc29sZV9leHQgPSB7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjY3Ni1cdC5uYW1lID0gXCYjMzQ7bmV0Y29uX2V4dFwmIzM0Oyxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjY4My1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNjg0OnN0YXRpYyBzdHJ1Y3QgY29uc29sZSBuZXRjb25zb2xlID0ge1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2ODUtXHQubmFtZSA9IFwmIzM0O25ldGNvblwmIzM0OyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg0OTgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipVbnBhY2tpbmcgTmV0Y29uc29sZSBXcml0ZSBGdW5jdGlvbnMqKgoKUmlnaHQsIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGBuZXRjb25zb2xlX3dyaXRlX2V4dGAgYW5kIGBuZXRjb25zb2xlX3dyaXRlX2Jhc2ljYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBjYWxsIHN0YWNrLiBIYW5nIG9uLi4uIGlzbiYjMzk7dCBgbmV0Y29uc29sZV93cml0ZWAgdGhlIGNvcmUgZnVuY3Rpb24gdGhhdCBldmVudHVhbGx5IGdldHMgZG93biB0byBgc2VuZF91ZHBgPyBMZXQmIzM5O3MgcXVpY2tseSB2ZXJpZnkgdGhhdC4gR290dGEgbWFrZSBzdXJlIEkmIzM5O20gcmVtZW1iZXJpbmcgdGhlIGNvbnRyb2wgZmxvdyBjb3JyZWN0bHkgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIgZG93biB0aGlzIHJhYmJpdCBob2xlLiBJIHJlYWxseSB3YW50IHRvIGVuc3VyZSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9ja3MgaXMgc29saWQgYmVmb3JlIEkgc3RhcnQgbG9va2luZyBhdCB0aGUgbW9yZSBjb21wbGV4IGludGVyYWN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0Y29uc29sZV93cml0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjQzOD1zdGF0aWMgdm9pZCBzZW5kX21zZ191ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDUyLS8qKlxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI0NTM6ICogbmV0Y29uc29sZV93cml0ZSAtIEdlbmVyaWMgZnVuY3Rpb24gdG8gc2VuZCBhIG1zZyB0byBhbGwgdGFyZ2V0c1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0NTQtICogQHdjdHh0OiBuYmNvbiB3cml0ZSBjb250ZXh0XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0NTgtICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjQ1OTpzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3dyaXRlKHN0cnVjdCBuYmNvbl93cml0ZV9jb250ZXh0ICp3Y3R4dCwgYm9vbCBleHRlbmRlZClcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDYwLXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQ4Ni1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNDg3OnN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfd3JpdGVfZXh0KHN0cnVjdCBjb25zb2xlICpjb24gX19hbHdheXNfdW51c2VkLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0ODgtXHRcdFx0XHQgc3RydWN0IG5iY29uX3dyaXRlX2NvbnRleHQgKndjdHh0KVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0ODkte1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI0OTA6XHRuZXRjb25zb2xlX3dyaXRlKHdjdHh0LCB0cnVlKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDkxLX1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDkyLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI0OTM6c3RhdGljIHZvaWQgbmV0Y29uc29sZV93cml0ZV9iYXNpYyhzdHJ1Y3QgY29uc29sZSAqY29uIF9fYWx3YXlzX3VudXNlZCxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDk0LVx0XHRcdFx0ICAgc3RydWN0IG5iY29uX3dyaXRlX2NvbnRleHQgKndjdHh0KVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0OTUte1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI0OTY6XHRuZXRjb25zb2xlX3dyaXRlKHdjdHh0LCBmYWxzZSk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQ5Ny19XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI2NzU9c3RhdGljIHN0cnVjdCBjb25zb2xlIG5ldGNvbnNvbGVfZXh0ID0ge1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjc3LVx0LmZsYWdzID0gQ09OX0VOQUJMRUQgfCBDT05fRVhURU5ERUQgfCBDT05fTkJDT04gfCBDT05fTkJDT05fQVRPTUlDX1VOU0FGRSxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNjc4Olx0LndyaXRlX3RocmVhZCA9IG5ldGNvbnNvbGVfd3JpdGVfZXh0LFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI2Nzk6XHQud3JpdGVfYXRvbWljID0gbmV0Y29uc29sZV93cml0ZV9leHQsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjY4MC1cdC5kZXZpY2VfbG9jayA9IG5ldGNvbnNvbGVfZGV2aWNlX2xvY2ssXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI2ODQ9c3RhdGljIHN0cnVjdCBjb25zb2xlIG5ldGNvbnNvbGUgPSB7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2ODYtXHQuZmxhZ3MgPSBDT05fRU5BQkxFRCB8IENPTl9OQkNPTiB8IENPTl9OQkNPTl9BVE9NSUNfVU5TQUZFLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI2ODc6XHQud3JpdGVfdGhyZWFkID0gbmV0Y29uc29sZV93cml0ZV9iYXNpYyxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNjg4Olx0LndyaXRlX2F0b21pYyA9IG5ldGNvbnNvbGVfd3JpdGVfYmFzaWMsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjY4OS1cdC5kZXZpY2VfbG9jayA9IG5ldGNvbnNvbGVfZGV2aWNlX2xvY2ssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NDc2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV0Y29uc29sZSBDb2RlIFBhdGgqKgoKT2theSwgc28gSSYjMzk7bSB0cmFjaW5nIHRoZSBleGVjdXRpb24gcGF0aCBoZXJlIGZvciB0aGlzIG5ldGNvbnNvbGUgZnVuY3Rpb25hbGl0eS4gVGhlIGluaXRpYWwgZW50cnkgcG9pbnRzIGFyZSBgbmV0Y29uc29sZV93cml0ZV9leHRgIGFuZCBgbmV0Y29uc29sZV93cml0ZV9iYXNpY2AsIGJ1dCB0aGV5IGJvdGggZnVubmVsIGRvd24gdG8gYG5ldGNvbnNvbGVfd3JpdGVgLiBUaGF0IHRoZW4gY2FsbHMgYHNlbmRfbXNnX3VkcGAsIHdoaWNoIGluIHR1cm4gY2FsbHMgYHNlbmRfdWRwYCBhbmQgZmluYWxseSwgYG5ldHBvbGxfc2VuZF91ZHBgLiBUaGlzIGBuZXRwb2xsX3NlbmRfdWRwYCBmdW5jdGlvbiBpcyB0aGUgb25lIHRoZSBwYXRjaCBpcyBtb2RpZnlpbmcuIFRoZXJlZm9yZSwgdGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uLiBJdCBzZWVtcyBsaWtlIGEgZ29vZCBmb2N1cyBzeW1ib2wuCgpMZXQgbWUganVzdCBxdWlja2x5IHZlcmlmeSBpZiBgbmV0cG9sbF9zZW5kX3VkcGAgaXMgYW4gaW5saW5lIGZ1bmN0aW9uLiBBaCwgbm8sIGl0JiMzOTtzIGRlZmluZWQgYXMgYHN0YXRpYyBpbnQgbmV0cG9sbF9zZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csIGludCBsZW4pYCwgc28gaXQmIzM5O3Mgbm90IGlubGluZWQsIHdoaWNoIHNpbXBsaWZpZXMgdGhpbmdzIGEgYml0LgoKVGhlcmVmb3JlLCBteSBjb3JlIGZvY3VzIHN5bWJvbHMgZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiBhcmU6IGBsb2NhbF9pcF9zdG9yZWAsIGByZW1vdGVfaXBfc3RvcmVgLCBgZW5hYmxlZF9zdG9yZWAsIGBuZXRjb25zX25ldHBvbGxfc2V0dXBgLCBgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZWAgYW5kIGVzcGVjaWFsbHksIGBuZXRwb2xsX3NlbmRfdWRwYC4KCk5vdywgSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnM6IGBORVRDT05TT0xFYCwgYE5FVENPTlNPTEVfRFlOQU1JQ2AsIGBDT05GSUdGU19GU2AgYW5kIGBJUFY2YC4KCkkgc2hvdWxkIHByb2JhYmx5IGNvbmZpcm0gaW4gd2hpY2ggZmlsZSBgbmV0cG9sbF9zZW5kX3VkcGAgaXMgbG9jYXRlZCAtIGlzIGl0IGluIGBkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNgIG9yIGluIGBuZXQvY29yZS9uZXRwb2xsLmNgPyBXYWl0IGEgbWludXRlLCB0aGUgcGF0Y2ggaXRzZWxmIGlzIG1vZGlmeWluZyBgbmV0cG9sbF9zZW5kX3VkcGAgd2l0aGluIGBkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNgLiBSaWdodCwgSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoZSBwYXRjaCBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25ldHBvbGxfc2VuZF91ZHAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIxNDU9c3RhdGljIHZvaWQgcHVzaF9pcHY2KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxNjgtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjE2OTpzdGF0aWMgaW50IG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxNzAtXHRcdFx0ICAgIGludCBsZW4pXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMDYtLyoqXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjIwNzogKiBzZW5kX3VkcCAtIFdyYXBwZXIgZm9yIG5ldHBvbGxfc2VuZF91ZHAgdGhhdCBjb3VudHMgZXJyb3JzXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIwOC0gKiBAbnQ6IHRhcmdldCB0byBzZW5kIG1lc3NhZ2UgdG9cbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIxMS0gKlxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIyMTI6ICogQ2FsbHMgbmV0cG9sbF9zZW5kX3VkcCBhbmQgY2xhc3NpZmllcyB0aGUgcmV0dXJuIHZhbHVlLiBJZiBhbiBlcnJvclxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMTMtICogb2NjdXJyZWQgaXQgaW5jcmVtZW50cyBzdGF0aXN0aWNzIGluIG50LVx1MDAzZXN0YXRzIGFjY29yZGluZ2x5LlxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIyMTQ6ICogT25seSBjYWxscyBuZXRwb2xsX3NlbmRfdWRwIGlmIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMgaXMgZGlzYWJsZWQuXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIxNS0gKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yMjE2PXN0YXRpYyB2b2lkIHNlbmRfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNvbnN0IGNoYXIgKm1zZywgaW50IGxlbilcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjE3LXtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMjE4Olx0aW50IHJlc3VsdCA9IG5ldHBvbGxfc2VuZF91ZHAobnQsIG1zZywgbGVuKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjE5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDYxNAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkFuYWx5emluZyBLZXJuZWwgTmV0d29yayBDb25zb2xlIENoYW5nZXMqKgoKQWxyaWdodCwgc28gdGhlIGNsdWUgaXMgcG9pbnRpbmcgbWUgZGlyZWN0bHkgdG8gYGRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgbmV0d29yayBjb25zb2xlIGltcGxlbWVudGF0aW9uLiBJIGZpZ3VyZWQgaXQgd291bGQgYmUgc29tZXdoZXJlIGluIHRoZSBuZXR3b3JrIGNvZGUsIGJ1dCB0aGlzIGNvbmZpcm1zIHRoZSBzcGVjaWZpYyBmaWxlLgoKV2FpdCBhIHNlY29uZC4uLiB0aGUgcGF0Y2ggaXNuJiMzOTt0ICpqdXN0KiB0b3VjaGluZyBgbmV0Y29uc29sZS5jYC4gSXQmIzM5O3MgYWxzbyBtb2RpZnlpbmcgYG5ldHBvbGxfcGFyc2VfaXBfYWRkcmAuIFRoYXQmIzM5O3MgaW1wb3J0YW50LiBJIG5lZWQgdG8gYmUgY2FyZWZ1bCBub3QgdG8gbWlzcyBhbnkgaW5kaXJlY3QgZGVwZW5kZW5jaWVzIG9yIHNpZGUgZWZmZWN0cyByZWxhdGVkIHRvIElQIGFkZHJlc3MgcGFyc2luZyB3aXRoaW4gdGhpcyBjb250ZXh0LiBJJiMzOTtsbCBhZGQgYG5ldHBvbGxfcGFyc2VfaXBfYWRkcmAgdG8gbXkgbGlzdCBvZiBmb2N1cyBzeW1ib2xzLiBJdCYjMzk7cyBhIGtleSBwYXJ0IG9mIHRoZSBwdXp6bGUuIEkgY2FuJiMzOTt0IGFmZm9yZCB0byBvdmVybG9vayB0aGF0IGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRwb2xsX3BhcnNlX2lwX2FkZHImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTcxMj1zdGF0aWMgdm9pZCBuZXRjb25zb2xlX3ByaW50X2Jhbm5lcihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy03MzctICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NzM4OnN0YXRpYyBpbnQgbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGNvbnN0IGNoYXIgKnN0ciwgc3RydWN0IGluZXRfYWRkciAqYWRkcilcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy03Mzkte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xMjIzPXN0YXRpYyBzc2l6ZV90IGxvY2FsX2lwX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMjM1LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEyMzY6XHRpZiAobmV0cG9sbF9wYXJzZV9pcF9hZGRyKGJ1ZiwgXHUwMDI2bnQtXHUwMDNlbG9jYWxfaXApIFx1MDAzYyAwKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEyMzctXHRcdGdvdG8gb3V0X3VubG9jaztcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTI0NT1zdGF0aWMgc3NpemVfdCByZW1vdGVfaXBfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEyNTctXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTI1ODpcdGlmIChuZXRwb2xsX3BhcnNlX2lwX2FkZHIoYnVmLCBcdTAwMjZudC1cdTAwM2VyZW1vdGVfaXApIFx1MDAzYyAwKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEyNTktXHRcdGdvdG8gb3V0X3VubG9jaztcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjUxMz1zdGF0aWMgaW50IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY2hhciAqb3B0KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNTM0LVx0XHQqZGVsaW0gPSAwO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI1MzU6XHRcdGlmIChuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY3VyLCBcdTAwMjZudC1cdTAwM2Vsb2NhbF9pcCkgXHUwMDNjIDApXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjUzNi1cdFx0XHRnb3RvIHBhcnNlX2ZhaWxlZDtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjU3Ny1cdCpkZWxpbSA9IDA7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjU3ODpcdGlmIChuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY3VyLCBcdTAwMjZudC1cdTAwM2VyZW1vdGVfaXApIFx1MDAzYyAwKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI1NzktXHRcdGdvdG8gcGFyc2VfZmFpbGVkO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTQzOQoJCQkJCQkJb3V0cHV0OiAyMzQKCQkJCQkJCXRob3VnaHRzOiAzMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgUHJpb3JpdGl6YXRpb246IEFuYWx5emluZyBhIEtlcm5lbCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQsIHJpZ2h0IG9mZiB0aGUgYmF0LCBgbmV0cG9sbF9wYXJzZV9pcF9hZGRyYCBqdW1wcyBvdXQgYXQgbWUuIEl0JiMzOTtzIHN0YXRpYywgd2hpY2ggaXMgdXN1YWxseSBhIHNpZ24gdGhhdCBpdOKAmXMgaXNvbGF0ZWQsIGJ1dCBpdCYjMzk7cyBiZWluZyBjYWxsZWQgZnJvbSAqbXVsdGlwbGUqIGxvY2F0aW9ucy4gVGhhdCBtYWtlcyBpdCBhIHNvbGlkIGZvY3VzIHN5bWJvbCBmb3IgZnV6emluZy4KCkxldCYjMzk7cyBicmVhayBkb3duIHRoZSBjaGFuZ2VzLiBUaGUgcGF0Y2ggaXMgcmVmaW5pbmcgaG93IGBuZXRjb25zb2xlYCBtYW5hZ2VzIElQIGFkZHJlc3MgZmFtaWxpZXMuIEluc3RlYWQgb2YganVzdCBhIHNpbmdsZSBgaXB2NmAgZmxhZywgaXQmIzM5O3Mgbm93IHRyYWNraW5nIHRoZSBhZGRyZXNzIGZhbWlseSAoQUZfSU5FVCwgQUZfSU5FVDYsIG9yIEFGX1VOU1BFQykgc2VwYXJhdGVseSBmb3IgbG9jYWwgYW5kIHJlbW90ZSBJUHMuIFRoaXMgaW1wcm92ZXMgSVAgYWRkcmVzcyB2YWxpZGF0aW9uIGFuZCBoYW5kbGluZyB3aGljaCBpcyBhbHdheXMgYSBnb29kIHRoaW5nIHRvIHNlZSBpbiBuZXR3b3JrIGNvZGUuCgpUaGUgY2hhbmdlcyBhcmUgd2l0aGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgc3BlY2lmaWNhbGx5IHRoZSBgbmV0Y29uc29sZWAgc3Vic3lzdGVtLCB3aGljaCBpcyBnb29kLiBXZSBjYW4gdHJpZ2dlciB0aGlzIHRocm91Z2ggYGNvbmZpZ2ZzYCBvciBrZXJuZWwgY29tbWFuZC1saW5lIHBhcmFtZXRlcnMsIGluY3JlYXNpbmcgdGhlIG9kZHMgb2YgYWN0dWFsbHkgZXhlcmNpc2luZyB0aGUgY29kZS4gRGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLCBiYXNlZCBvbiB0aGlzLgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBrZXkgc3ltYm9scyBJIG5lZWQgdG8gdGFyZ2V0OgoKKiAgIGBsb2NhbF9pcF9zdG9yZWAKKiAgIGByZW1vdGVfaXBfc3RvcmVgCiogICBgZW5hYmxlZF9zdG9yZWAKKiAgIGBuZXRjb25zX25ldHBvbGxfc2V0dXBgCiogICBgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZWAKKiAgIGBuZXRwb2xsX3NlbmRfdWRwYAoqICAgQW5kIG9mIGNvdXJzZSwgdGhhdCBjcnVjaWFsIGBuZXRwb2xsX3BhcnNlX2lwX2FkZHJgCgpXZSBhbHNvIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSByaWdodCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBzZXQgZm9yIHRoaXMuIFdlJiMzOTtyZSBsb29raW5nIGF0OgoKKiAgIGBORVRDT05TT0xFYCAtIG9idmlvdXNseSwgd2Ugd2FudCB0aGF0LgoqICAgYE5FVENPTlNPTEVfRFlOQU1JQ2AgLSBXZSBuZWVkIHRvIGJlIGNhcmVmdWwgd2l0aCB0aGlzIG9uZS4KKiAgIGBDT05GSUdGU19GU2AgLSBUaGlzIG9uZSBpcyBpbXBvcnRhbnQgdG8gY292ZXIuCiogICBgSVBWNmAgLSBXZSBuZWVkIHRvIGVuc3VyZSB3ZSBjb3ZlciB0aGF0IHRvbywgc2luY2Ugd2UmIzM5O3JlIGhhbmRsaW5nIElQIGFkZHJlc3MgZmFtaWxpZXMuCgpPa2F5LCBhIHF1aWNrIGNoZWNrIG9uIHRoZSBkZXBlbmRlbmNpZXMuIGBORVRDT05TT0xFX0RZTkFNSUNgIGRlcGVuZHMgb24gYFNZU0ZTYCwgd2hpY2ggaXMgYWxtb3N0IGFsd2F5cyBlbmFibGVkLCBidXQgbGV0JiMzOTtzIG1ha2Ugc3VyZS4gQ29uZmlybWVkLiBXZSBhbHNvIG5lZWQgdG8gZW5hYmxlIGBDT05GSUdGU19GU2AsIHNpbmNlIGl0JiMzOTtzIHRyaXN0YXRlLiBBbmQgYElQVjZgIHNob3VsZCBiZSBlbmFibGVkLCBzaW5jZSBpdCYjMzk7cyBhIGJvb2xlYW4uCgpBbHJpZ2h0LCBJIHRoaW5rIEkgaGF2ZSBldmVyeXRoaW5nLiBUaW1lIHRvIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRDT05TT0xFJiMzNDssCiAgICAmIzM0O05FVENPTlNPTEVfRFlOQU1JQyYjMzQ7LAogICAgJiMzNDtDT05GSUdGU19GUyYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bG9jYWxfaXBfc3RvcmUmIzM0OywKICAgICYjMzQ7cmVtb3RlX2lwX3N0b3JlJiMzNDssCiAgICAmIzM0O2VuYWJsZWRfc3RvcmUmIzM0OywKICAgICYjMzQ7bmV0Y29uc19uZXRwb2xsX3NldHVwJiMzNDssCiAgICAmIzM0O25ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUmIzM0OywKICAgICYjMzQ7bmV0cG9sbF9zZW5kX3VkcCYjMzQ7LAogICAgJiMzNDtuZXRwb2xsX3BhcnNlX2lwX2FkZHImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG5ldGNvbnNvbGUgZHJpdmVyIHRvIHRyYWNrIHRoZSBJUCBhZGRyZXNzIGZhbWlseSAoQUZfSU5FVCwgQUZfSU5FVDYsIEFGX1VOU1BFQykgaW5kZXBlbmRlbnRseSBmb3IgbG9jYWwgYW5kIHJlbW90ZSBJUCBhZGRyZXNzZXMsIHJlcGxhY2luZyBhIHNpbmdsZSBgaXB2NmAgYm9vbGVhbiBmbGFnLiBUaGlzIGNoYW5nZXMgaG93IElQIGFkZHJlc3NlcyBhcmUgcGFyc2VkLCB2YWxpZGF0ZWQsIGFuZCB1c2VkIGR1cmluZyBuZXRjb25zb2xlIHNldHVwIGFuZCBtZXNzYWdlIHRyYW5zbWlzc2lvbi4gVGhlIG1vZGlmaWVkIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSB0aGUgbmV0Y29uc29sZSBjb25maWdmcyBpbnRlcmZhY2UgKHdoaWNoIGFsbG93cyBkeW5hbWljIHJlY29uZmlndXJhdGlvbiBvZiB0YXJnZXRzKSBhbmQgZHVyaW5nIG1vZHVsZSBpbml0aWFsaXphdGlvbiB2aWEga2VybmVsIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXJzLiBTaW5jZSB0aGlzIGFmZmVjdHMgY29yZSBrZXJuZWwgbG9nZ2luZyBmdW5jdGlvbmFsaXR5IGFuZCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGNvbmZpZ2ZzLCBpdCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRDT05TT0xFJiMzNDssCiAgICAmIzM0O05FVENPTlNPTEVfRFlOQU1JQyYjMzQ7LAogICAgJiMzNDtDT05GSUdGU19GUyYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bG9jYWxfaXBfc3RvcmUmIzM0OywKICAgICYjMzQ7cmVtb3RlX2lwX3N0b3JlJiMzNDssCiAgICAmIzM0O2VuYWJsZWRfc3RvcmUmIzM0OywKICAgICYjMzQ7bmV0Y29uc19uZXRwb2xsX3NldHVwJiMzNDssCiAgICAmIzM0O25ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUmIzM0OywKICAgICYjMzQ7bmV0cG9sbF9zZW5kX3VkcCYjMzQ7LAogICAgJiMzNDtuZXRwb2xsX3BhcnNlX2lwX2FkZHImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG5ldGNvbnNvbGUgZHJpdmVyIHRvIHRyYWNrIHRoZSBJUCBhZGRyZXNzIGZhbWlseSAoQUZfSU5FVCwgQUZfSU5FVDYsIEFGX1VOU1BFQykgaW5kZXBlbmRlbnRseSBmb3IgbG9jYWwgYW5kIHJlbW90ZSBJUCBhZGRyZXNzZXMsIHJlcGxhY2luZyBhIHNpbmdsZSBgaXB2NmAgYm9vbGVhbiBmbGFnLiBUaGlzIGNoYW5nZXMgaG93IElQIGFkZHJlc3NlcyBhcmUgcGFyc2VkLCB2YWxpZGF0ZWQsIGFuZCB1c2VkIGR1cmluZyBuZXRjb25zb2xlIHNldHVwIGFuZCBtZXNzYWdlIHRyYW5zbWlzc2lvbi4gVGhlIG1vZGlmaWVkIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSB0aGUgbmV0Y29uc29sZSBjb25maWdmcyBpbnRlcmZhY2UgKHdoaWNoIGFsbG93cyBkeW5hbWljIHJlY29uZmlndXJhdGlvbiBvZiB0YXJnZXRzKSBhbmQgZHVyaW5nIG1vZHVsZSBpbml0aWFsaXphdGlvbiB2aWEga2VybmVsIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXJzLiBTaW5jZSB0aGlzIGFmZmVjdHMgY29yZSBrZXJuZWwgbG9nZ2luZyBmdW5jdGlvbmFsaXR5IGFuZCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGNvbmZpZ2ZzLCBpdCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTo0MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjQwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBob3cgSVAgYWRkcmVzc2VzIGFyZSBzdG9yZWQgYW5kIHBhcnNlZCBpbiB0aGUgbmV0Y29uc29sZSBkcml2ZXIgYnkgcmVwbGFjaW5nIGEgYHVuaW9uIGluZXRfYWRkcmAgYW5kIGEgYm9vbGVhbiBgaXB2NmAgZmxhZyB3aXRoIGEgbmV3IGBzdHJ1Y3QgaW5ldF9hZGRyYCB0aGF0IGV4cGxpY2l0bHkgdHJhY2tzIHRoZSBhZGRyZXNzIGZhbWlseSAoYEFGX1VOU1BFQ2AsIGBBRl9JTkVUYCwgb3IgYEFGX0lORVQ2YCkuIFRoZSBgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0YCBjb250YWluaW5nIHRoZXNlIGFkZHJlc3NlcyBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqYCAod2hpY2ggemVyby1pbml0aWFsaXplcyB0aGUgbWVtb3J5KSwgZW5zdXJpbmcgdGhhdCB0aGUgbmV3IGBmYW1pbHlgIGZpZWxkIGRlZmF1bHRzIHRvIGBBRl9VTlNQRUNgIGFuZCB0aGUgSVAgYWRkcmVzc2VzIGFyZSB6ZXJvZWQuIFRoZSBJUCBhZGRyZXNzZXMgYXJlIG9ubHkgZXhwb3NlZCB0byB1c2Vyc3BhY2UgdmlhIGNvbmZpZ2ZzIGBzaG93YCBmdW5jdGlvbnMsIHdoaWNoIGZvcm1hdCB0aGVtIGFzIHN0cmluZ3MgdXNpbmcgYHN5c2ZzX2VtaXRgLCBwcmV2ZW50aW5nIGFueSBwb3RlbnRpYWwgbGVha2FnZSBvZiBwYWRkaW5nIGJ5dGVzLiBXaGVuIGNvbnN0cnVjdGluZyBuZXR3b3JrIHBhY2tldHMsIG9ubHkgdGhlIGV4YWN0IElQdjQgKDQgYnl0ZXMpIG9yIElQdjYgKDE2IGJ5dGVzKSBhZGRyZXNzIGZpZWxkcyBhcmUgY29waWVkIGludG8gdGhlIElQIGhlYWRlcnMsIGFnYWluIGF2b2lkaW5nIGFueSBwYWRkaW5nIGxlYWtzLiBUaGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBubyBzdHJ1Y3R1cmVzIGNvcGllZCBkaXJlY3RseSB0byB1c2Vyc3BhY2UsIGFuZCBubyBjb250cm9sIGZsb3cgY2hhbmdlcyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGJ1Z3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMGY2MTMwNWUxNmUyZmFkNGJmYWUxNWMwNmI1MDJjMmMyMDA2ZTlmOQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDEwIDE5OjM4OjIxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jIGIvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jCmluZGV4IDAzOTEzMzAyMzI4Y2MuLjgxMGRlZDZlNDhmMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMKQEAgLTE1MSw2ICYjNDM7MTUxLDE1IEBAIGVudW0gdGFyZ2V0X3N0YXRlIHsKIAlTVEFURV9ERUFDVElWQVRFRCwKIH07CiAKJiM0MztzdHJ1Y3QgaW5ldF9hZGRyIHsKJiM0MzsJLyogQWRkcmVzcyBmYW1pbHk6IEFGX1VOU1BFQyB3aGVuIHVuc2V0LCBlbHNlIEFGX0lORVQgb3IgQUZfSU5FVDYgKi8KJiM0MzsJdTgJCQlmYW1pbHk7CiYjNDM7CXVuaW9uIHsKJiM0MzsJCV9fYmUzMgkJaXA7CiYjNDM7CQlzdHJ1Y3QgaW42X2FkZHIJaW42OwomIzQzOwl9OwomIzQzO307CiYjNDM7CiAvKioKICAqIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAtIFJlcHJlc2VudHMgYSBjb25maWd1cmVkIG5ldGNvbnNvbGUgdGFyZ2V0LgogICogQGxpc3Q6CUxpbmtzIHRoaXMgdGFyZ2V0IGludG8gdGhlIHRhcmdldF9saXN0LgpAQCAtMTgxLDcgJiM0MzsxOTAsNiBAQCBlbnVtIHRhcmdldF9zdGF0ZSB7CiAgKgkJbG9jYWxfbWFjCShyZWFkLW9ubHkpCiAgKiBAbG9jYWxfaXA6CVNvdXJjZSBJUCBhZGRyZXNzIG9mIHRoZSB0YXJnZXQgKHJlYWQtd3JpdGUpLgogICogQHJlbW90ZV9pcDoJRGVzdGluYXRpb24gSVAgYWRkcmVzcyBvZiB0aGUgdGFyZ2V0IChyZWFkLXdyaXRlKS4KLSAqIEBpcHY2OglXaGV0aGVyIHRoZSB0YXJnZXQgYWRkcmVzc2VzIGFyZSBJUHY2IChyZWFkLXdyaXRlKS4KICAqIEBsb2NhbF9wb3J0OglTb3VyY2UgVURQIHBvcnQgb2YgdGhlIHRhcmdldCAocmVhZC13cml0ZSkuCiAgKiBAcmVtb3RlX3BvcnQ6IERlc3RpbmF0aW9uIFVEUCBwb3J0IG9mIHRoZSB0YXJnZXQgKHJlYWQtd3JpdGUpLgogICogQHJlbW90ZV9tYWM6CURlc3RpbmF0aW9uIGV0aGVybmV0IGFkZHJlc3Mgb2YgdGhlIHRhcmdldCAocmVhZC13cml0ZSkuCkBAIC0yMTIsOCAmIzQzOzIyMCw3IEBAIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCB7CiAJYm9vbAkJCWV4dGVuZGVkOwogCWJvb2wJCQlyZWxlYXNlOwogCXN0cnVjdCBuZXRwb2xsCQlucDsKLQl1bmlvbiBpbmV0X2FkZHIJCWxvY2FsX2lwLCByZW1vdGVfaXA7Ci0JYm9vbAkJCWlwdjY7CiYjNDM7CXN0cnVjdCBpbmV0X2FkZHIJbG9jYWxfaXAsIHJlbW90ZV9pcDsKIAl1MTYJCQlsb2NhbF9wb3J0LCByZW1vdGVfcG9ydDsKIAl1OAkJCXJlbW90ZV9tYWNbRVRIX0FMRU5dOwogCS8qIHByb3RlY3RlZCBieSB0YXJnZXRfbGlzdF9sb2NrOyAmIzQzOzEgZ2l2ZXMgc2NucHJpbnRmKCkgcm9vbSBmb3IgaXRzCkBAIC00MTUsNiAmIzQzOzQyMiw3IEBAIHN0YXRpYyBpbnQgbmV0Y29uc190YWtlX2lwdjYoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwKIAkJCQljb250aW51ZTsKIAkJCS8qIEdvdCB0aGUgSVAsIGxldCYjMzk7cyByZXR1cm4gKi8KIAkJCW50LSZndDtsb2NhbF9pcC5pbjYgPSBpZnAtJmd0O2FkZHI7CiYjNDM7CQkJbnQtJmd0O2xvY2FsX2lwLmZhbWlseSA9IEFGX0lORVQ2OwogCQkJZXJyID0gMDsKIAkJCWJyZWFrOwogCQl9CkBAIC00NTYsMjggJiM0Mzs0NjQsMTIgQEAgc3RhdGljIGludCBuZXRjb25zX3Rha2VfaXB2NChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LAogCX0KIAogCW50LSZndDtsb2NhbF9pcC5pcCA9IGlmYS0mZ3Q7aWZhX2xvY2FsOwomIzQzOwludC0mZ3Q7bG9jYWxfaXAuZmFtaWx5ID0gQUZfSU5FVDsKIAlucF9pbmZvKG5wLCAmIzM0O2xvY2FsIElQICVwSTRcbiYjMzQ7LCAmYW1wO250LSZndDtsb2NhbF9pcC5pcCk7CiAKIAlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIFRlc3Qgd2hldGhlciB0aGUgY2FsbGVyIGxlZnQgbnQtJmd0O2xvY2FsX2lwIHVuc2V0LCBzbyB0aGF0Ci0gKiBuZXRjb25zX25ldHBvbGxfc2V0dXAoKSBzaG91bGQgYXV0by1wb3B1bGF0ZSBpdCBmcm9tIHRoZSBlZ3Jlc3MgZGV2aWNlLgotICoKLSAqIG50LSZndDtsb2NhbF9pcCBpcyBhIHVuaW9uIG9mIF9fYmUzMiAoSVB2NCkgYW5kIHN0cnVjdCBpbjZfYWRkciAoSVB2NiksCi0gKiBzbyBhbiBJUHY2IGFkZHJlc3Mgd2hvc2UgZmlyc3QgNCBieXRlcyBhcmUgemVybyAoZS5nLiA6OjEsIDo6MiwKLSAqIElQdjQtbWFwcGVkIDo6ZmZmZjphLmIuYy5kKSBtdXN0IG5vdCBiZSB0ZXN0ZWQgdmlhIHRoZSBJUHY0IGFybSDigJQKLSAqIGRvaW5nIHNvIHdvdWxkIG1pc2NsYXNzaWZ5IGEgY2FsbGVyLXN1cHBsaWVkIGFkZHJlc3MgYXMgdW5zZXQgYW5kCi0gKiBzaWxlbnRseSBvdmVyd3JpdGUgaXQgd2l0aCB3aGF0ZXZlciBhZGRyZXNzIHRoZSBkZXZpY2UgZXhwb3Nlcy4KLSAqLwotc3RhdGljIGJvb2wgbmV0Y29uc19sb2NhbF9pcF91bnNldChjb25zdCBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KQotewotCWlmIChudC0mZ3Q7aXB2NikKLQkJcmV0dXJuIGlwdjZfYWRkcl9hbnkoJmFtcDtudC0mZ3Q7bG9jYWxfaXAuaW42KTsKLQlyZXR1cm4gIW50LSZndDtsb2NhbF9pcC5pcDsKLX0KLQogc3RhdGljIGludCBuZXRjb25zX25ldHBvbGxfc2V0dXAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCkKIHsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBjdXJyZW50LSZndDtuc3Byb3h5LSZndDtuZXRfbnM7CkBAIC00ODcsNiAmIzQzOzQ3OSwxNyBAQCBzdGF0aWMgaW50IG5ldGNvbnNfbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KQogCWJvb2wgaXBfb3ZlcndyaXR0ZW4gPSBmYWxzZTsKIAlpbnQgZXJyOwogCiYjNDM7CWlmIChudC0mZ3Q7cmVtb3RlX2lwLmZhbWlseSA9PSBBRl9VTlNQRUMpIHsKJiM0MzsJCW5wX2VycihucCwgJiMzNDtyZW1vdGUgSVAgYWRkcmVzcyBub3QgY29uZmlndXJlZCwgYWJvcnRpbmdcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRURFU1RBRERSUkVROwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChudC0mZ3Q7bG9jYWxfaXAuZmFtaWx5ICE9IEFGX1VOU1BFQyAmYW1wOyZhbXA7CiYjNDM7CSAgICBudC0mZ3Q7bG9jYWxfaXAuZmFtaWx5ICE9IG50LSZndDtyZW1vdGVfaXAuZmFtaWx5KSB7CiYjNDM7CQlucF9lcnIobnAsICYjMzQ7bG9jYWwgYW5kIHJlbW90ZSBJUCBhZGRyZXNzIGZhbWlsaWVzIGRpZmZlciwgYWJvcnRpbmdcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiAJcnRubF9sb2NrKCk7CiAJaWYgKG5wLSZndDtkZXZfbmFtZVswXSkKIAkJbmRldiA9IF9fZGV2X2dldF9ieV9uYW1lKG5ldCwgbnAtJmd0O2Rldl9uYW1lKTsKQEAgLTUyMywxNiAmIzQzOzUyNiwxMyBAQCBzdGF0aWMgaW50IG5ldGNvbnNfbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KQogCQlydG5sX2xvY2soKTsKIAl9CiAKLQlpZiAobmV0Y29uc19sb2NhbF9pcF91bnNldChudCkpIHsKLQkJaWYgKCFudC0mZ3Q7aXB2NikgewotCQkJZXJyID0gbmV0Y29uc190YWtlX2lwdjQobnQsIG5kZXYpOwotCQkJaWYgKGVycikKLQkJCQlnb3RvIHB1dDsKLQkJfSBlbHNlIHsKJiM0MzsJaWYgKG50LSZndDtsb2NhbF9pcC5mYW1pbHkgPT0gQUZfVU5TUEVDKSB7CiYjNDM7CQlpZiAobnQtJmd0O3JlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpCiAJCQllcnIgPSBuZXRjb25zX3Rha2VfaXB2NihudCwgbmRldik7Ci0JCQlpZiAoZXJyKQotCQkJCWdvdG8gcHV0OwotCQl9CiYjNDM7CQllbHNlCiYjNDM7CQkJZXJyID0gbmV0Y29uc190YWtlX2lwdjQobnQsIG5kZXYpOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlnb3RvIHB1dDsKIAkJaXBfb3ZlcndyaXR0ZW4gPSB0cnVlOwogCX0KIApAQCAtNzE0LDI0ICYjNDM7NzE0LDI4IEBAIHN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfcHJpbnRfYmFubmVyKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpCiAJc3RydWN0IG5ldHBvbGwgKm5wID0gJmFtcDtudC0mZ3Q7bnA7CiAKIAlucF9pbmZvKG5wLCAmIzM0O2xvY2FsIHBvcnQgJWRcbiYjMzQ7LCBudC0mZ3Q7bG9jYWxfcG9ydCk7Ci0JaWYgKG50LSZndDtpcHY2KQomIzQzOwlpZiAobnQtJmd0O2xvY2FsX2lwLmZhbWlseSA9PSBBRl9VTlNQRUMpCiYjNDM7CQlucF9pbmZvKG5wLCAmIzM0O2xvY2FsIElQIHVuc2V0XG4mIzM0Oyk7CiYjNDM7CWVsc2UgaWYgKG50LSZndDtsb2NhbF9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpCiAJCW5wX2luZm8obnAsICYjMzQ7bG9jYWwgSVB2NiBhZGRyZXNzICVwSTZjXG4mIzM0OywgJmFtcDtudC0mZ3Q7bG9jYWxfaXAuaW42KTsKIAllbHNlCiAJCW5wX2luZm8obnAsICYjMzQ7bG9jYWwgSVB2NCBhZGRyZXNzICVwSTRcbiYjMzQ7LCAmYW1wO250LSZndDtsb2NhbF9pcC5pcCk7CiAJbnBfaW5mbyhucCwgJiMzNDtpbnRlcmZhY2UgbmFtZSAmIzM5OyVzJiMzOTtcbiYjMzQ7LCBucC0mZ3Q7ZGV2X25hbWUpOwogCW5wX2luZm8obnAsICYjMzQ7bG9jYWwgZXRoZXJuZXQgYWRkcmVzcyAmIzM5OyVwTSYjMzk7XG4mIzM0OywgbnAtJmd0O2Rldl9tYWMpOwogCW5wX2luZm8obnAsICYjMzQ7cmVtb3RlIHBvcnQgJWRcbiYjMzQ7LCBudC0mZ3Q7cmVtb3RlX3BvcnQpOwotCWlmIChudC0mZ3Q7aXB2NikKJiM0MzsJaWYgKG50LSZndDtyZW1vdGVfaXAuZmFtaWx5ID09IEFGX1VOU1BFQykKJiM0MzsJCW5wX2luZm8obnAsICYjMzQ7cmVtb3RlIElQIHVuc2V0XG4mIzM0Oyk7CiYjNDM7CWVsc2UgaWYgKG50LSZndDtyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KQogCQlucF9pbmZvKG5wLCAmIzM0O3JlbW90ZSBJUHY2IGFkZHJlc3MgJXBJNmNcbiYjMzQ7LCAmYW1wO250LSZndDtyZW1vdGVfaXAuaW42KTsKIAllbHNlCiAJCW5wX2luZm8obnAsICYjMzQ7cmVtb3RlIElQdjQgYWRkcmVzcyAlcEk0XG4mIzM0OywgJmFtcDtudC0mZ3Q7cmVtb3RlX2lwLmlwKTsKIAlucF9pbmZvKG5wLCAmIzM0O3JlbW90ZSBldGhlcm5ldCBhZGRyZXNzICVwTVxuJiMzNDssIG50LSZndDtyZW1vdGVfbWFjKTsKIH0KIAotLyogUGFyc2UgdGhlIHN0cmluZyBhbmQgcG9wdWxhdGUgdGhlIGBpbmV0X2FkZHJgIHVuaW9uLiBSZXR1cm4gMCBpZiBJUHY0IGlzCi0gKiBwb3B1bGF0ZWQsIDEgaWYgSVB2NiBpcyBwb3B1bGF0ZWQsIGFuZCAtMSB1cG9uIGZhaWx1cmUuCiYjNDM7LyogUGFyc2UgdGhlIHN0cmluZyBhbmQgcG9wdWxhdGUgdGhlIGBpbmV0X2FkZHJgIHN0cnVjdC4gUmV0dXJuIDAgb24gc3VjY2VzcwomIzQzOyAqIGFuZCAtMSB1cG9uIGZhaWx1cmUuCiAgKi8KLXN0YXRpYyBpbnQgbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGNvbnN0IGNoYXIgKnN0ciwgdW5pb24gaW5ldF9hZGRyICphZGRyKQomIzQzO3N0YXRpYyBpbnQgbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGNvbnN0IGNoYXIgKnN0ciwgc3RydWN0IGluZXRfYWRkciAqYWRkcikKIHsKIAljb25zdCBjaGFyICplbmQgPSBOVUxMOwogCWludCBsZW47CkBAIC03NDMsMTQgJiM0Mzs3NDcsMTggQEAgc3RhdGljIGludCBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY29uc3QgY2hhciAqc3RyLCB1bmlvbiBpbmV0X2FkZHIgKmFkZHIpCiAJaWYgKHN0cltsZW4gLSAxXSA9PSAmIzM5O1xuJiMzOTspCiAJCWxlbiAtPSAxOwogCi0JaWYgKGluNF9wdG9uKHN0ciwgbGVuLCAodm9pZCAqKWFkZHIsIC0xLCAmYW1wO2VuZCkgJmd0OyAwICZhbXA7JmFtcDsKLQkgICAgKCFlbmQgfHwgKmVuZCA9PSAwIHx8ICplbmQgPT0gJiMzOTtcbiYjMzk7KSkKJiM0MzsJaWYgKGluNF9wdG9uKHN0ciwgbGVuLCAodm9pZCAqKSZhbXA7YWRkci0mZ3Q7aXAsIC0xLCAmYW1wO2VuZCkgJmd0OyAwICZhbXA7JmFtcDsKJiM0MzsJICAgICghZW5kIHx8ICplbmQgPT0gMCB8fCAqZW5kID09ICYjMzk7XG4mIzM5OykpIHsKJiM0MzsJCWFkZHItJmd0O2ZhbWlseSA9IEFGX0lORVQ7CiAJCXJldHVybiAwOwomIzQzOwl9CiAKIAlpZiAoSVNfRU5BQkxFRChDT05GSUdfSVBWNikgJmFtcDsmYW1wOwotCSAgICBpbjZfcHRvbihzdHIsIGxlbiwgKHZvaWQgKilhZGRyLCAtMSwgJmFtcDtlbmQpICZndDsgMCAmYW1wOyZhbXA7Ci0JICAgICghZW5kIHx8ICplbmQgPT0gMCB8fCAqZW5kID09ICYjMzk7XG4mIzM5OykpCi0JCXJldHVybiAxOwomIzQzOwkgICAgaW42X3B0b24oc3RyLCBsZW4sICh2b2lkICopJmFtcDthZGRyLSZndDtpbjYsIC0xLCAmYW1wO2VuZCkgJmd0OyAwICZhbXA7JmFtcDsKJiM0MzsJICAgICghZW5kIHx8ICplbmQgPT0gMCB8fCAqZW5kID09ICYjMzk7XG4mIzM5OykpIHsKJiM0MzsJCWFkZHItJmd0O2ZhbWlseSA9IEFGX0lORVQ2OwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KIAogCXJldHVybiAtMTsKIH0KQEAgLTg1NSwyMCAmIzQzOzg2MywyNCBAQCBzdGF0aWMgc3NpemVfdCBsb2NhbF9pcF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKQogewogCXN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7CiAKLQlpZiAobnQtJmd0O2lwdjYpCiYjNDM7CWlmIChudC0mZ3Q7bG9jYWxfaXAuZmFtaWx5ID09IEFGX1VOU1BFQykKJiM0MzsJCXJldHVybiBzeXNmc19lbWl0KGJ1ZiwgJiMzNDtcbiYjMzQ7KTsKJiM0MzsJaWYgKG50LSZndDtsb2NhbF9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpCiAJCXJldHVybiBzeXNmc19lbWl0KGJ1ZiwgJiMzNDslcEk2Y1xuJiMzNDssICZhbXA7bnQtJmd0O2xvY2FsX2lwLmluNik7CiAJZWxzZQotCQlyZXR1cm4gc3lzZnNfZW1pdChidWYsICYjMzQ7JXBJNFxuJiMzNDssICZhbXA7bnQtJmd0O2xvY2FsX2lwKTsKJiM0MzsJCXJldHVybiBzeXNmc19lbWl0KGJ1ZiwgJiMzNDslcEk0XG4mIzM0OywgJmFtcDtudC0mZ3Q7bG9jYWxfaXAuaXApOwogfQogCiBzdGF0aWMgc3NpemVfdCByZW1vdGVfaXBfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0pOwogCi0JaWYgKG50LSZndDtpcHY2KQomIzQzOwlpZiAobnQtJmd0O3JlbW90ZV9pcC5mYW1pbHkgPT0gQUZfVU5TUEVDKQomIzQzOwkJcmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCAmIzM0O1xuJiMzNDspOwomIzQzOwlpZiAobnQtJmd0O3JlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpCiAJCXJldHVybiBzeXNmc19lbWl0KGJ1ZiwgJiMzNDslcEk2Y1xuJiMzNDssICZhbXA7bnQtJmd0O3JlbW90ZV9pcC5pbjYpOwogCWVsc2UKLQkJcmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCAmIzM0OyVwSTRcbiYjMzQ7LCAmYW1wO250LSZndDtyZW1vdGVfaXApOwomIzQzOwkJcmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCAmIzM0OyVwSTRcbiYjMzQ7LCAmYW1wO250LSZndDtyZW1vdGVfaXAuaXApOwogfQogCiBzdGF0aWMgc3NpemVfdCBsb2NhbF9tYWNfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZikKQEAgLTEyMTMsNyAmIzQzOzEyMjUsNiBAQCBzdGF0aWMgc3NpemVfdCBsb2NhbF9pcF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZiwKIHsKIAlzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0pOwogCXNzaXplX3QgcmV0ID0gLUVJTlZBTDsKLQlpbnQgaXB2NjsKIAogCWR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF9sb2NrKCk7CiAJaWYgKG50LSZndDtzdGF0ZSA9PSBTVEFURV9FTkFCTEVEKSB7CkBAIC0xMjIyLDEwICYjNDM7MTIzMyw4IEBAIHN0YXRpYyBzc2l6ZV90IGxvY2FsX2lwX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLAogCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCi0JaXB2NiA9IG5ldHBvbGxfcGFyc2VfaXBfYWRkcihidWYsICZhbXA7bnQtJmd0O2xvY2FsX2lwKTsKLQlpZiAoaXB2NiA9PSAtMSkKJiM0MzsJaWYgKG5ldHBvbGxfcGFyc2VfaXBfYWRkcihidWYsICZhbXA7bnQtJmd0O2xvY2FsX2lwKSAmbHQ7IDApCiAJCWdvdG8gb3V0X3VubG9jazsKLQludC0mZ3Q7aXB2NiA9ICEhaXB2NjsKIAogCXJldCA9IGNvdW50Owogb3V0X3VubG9jazoKQEAgLTEyMzgsNyAmIzQzOzEyNDcsNiBAQCBzdGF0aWMgc3NpemVfdCByZW1vdGVfaXBfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsCiB7CiAJc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTsKIAlzc2l6ZV90IHJldCA9IC1FSU5WQUw7Ci0JaW50IGlwdjY7CiAKIAlkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXhfbG9jaygpOwogCWlmIChudC0mZ3Q7c3RhdGUgPT0gU1RBVEVfRU5BQkxFRCkgewpAQCAtMTI0NywxMCAmIzQzOzEyNTUsOCBAQCBzdGF0aWMgc3NpemVfdCByZW1vdGVfaXBfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsCiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKLQlpcHY2ID0gbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGJ1ZiwgJmFtcDtudC0mZ3Q7cmVtb3RlX2lwKTsKLQlpZiAoaXB2NiA9PSAtMSkKJiM0MzsJaWYgKG5ldHBvbGxfcGFyc2VfaXBfYWRkcihidWYsICZhbXA7bnQtJmd0O3JlbW90ZV9pcCkgJmx0OyAwKQogCQlnb3RvIG91dF91bmxvY2s7Ci0JbnQtJmd0O2lwdjYgPSAhIWlwdjY7CiAKIAlyZXQgPSBjb3VudDsKIG91dF91bmxvY2s6CkBAIC0yMDYxLDcgJiM0MzsyMDY3LDcgQEAgc3RhdGljIHZvaWQgbmV0cG9sbF91ZHBfY2hlY2tzdW0oc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwKIAogCS8qIGNoZWNrIG5lZWRzIHRvIGJlIHNldCwgc2luY2UgaXQgd2lsbCBiZSBjb25zdW1lZCBpbiBjc3VtX3BhcnRpYWwgKi8KIAl1ZHBoLSZndDtjaGVjayA9IDA7Ci0JaWYgKG50LSZndDtpcHY2KQomIzQzOwlpZiAobnQtJmd0O3JlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpCiAJCXVkcGgtJmd0O2NoZWNrID0gY3N1bV9pcHY2X21hZ2ljKCZhbXA7bnQtJmd0O2xvY2FsX2lwLmluNiwKIAkJCQkJICAgICAgJmFtcDtudC0mZ3Q7cmVtb3RlX2lwLmluNiwKIAkJCQkJICAgICAgdWRwX2xlbiwgSVBQUk9UT19VRFAsCkBAIC0yMTAyLDcgJiM0MzsyMTA4LDcgQEAgc3RhdGljIHZvaWQgcHVzaF9ldGgoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAlza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpOwogCWV0aGVyX2FkZHJfY29weShldGgtJmd0O2hfc291cmNlLCBucC0mZ3Q7ZGV2LSZndDtkZXZfYWRkcik7CiAJZXRoZXJfYWRkcl9jb3B5KGV0aC0mZ3Q7aF9kZXN0LCBudC0mZ3Q7cmVtb3RlX21hYyk7Ci0JaWYgKG50LSZndDtpcHY2KQomIzQzOwlpZiAobnQtJmd0O3JlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpCiAJCWV0aC0mZ3Q7aF9wcm90byA9IGh0b25zKEVUSF9QX0lQVjYpOwogCWVsc2UKIAkJZXRoLSZndDtoX3Byb3RvID0gaHRvbnMoRVRIX1BfSVApOwpAQCAtMjE3MSw3ICYjNDM7MjE3Nyw3IEBAIHN0YXRpYyBpbnQgbmV0cG9sbF9zZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csCiAJCVdBUk5fT05fT05DRSghaXJxc19kaXNhYmxlZCgpKTsKIAogCXVkcF9sZW4gPSBsZW4gJiM0Mzsgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpOwotCWlmIChudC0mZ3Q7aXB2NikKJiM0MzsJaWYgKG50LSZndDtyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KQogCQlpcF9sZW4gPSB1ZHBfbGVuICYjNDM7IHNpemVvZihzdHJ1Y3QgaXB2Nmhkcik7CiAJZWxzZQogCQlpcF9sZW4gPSB1ZHBfbGVuICYjNDM7IHNpemVvZihzdHJ1Y3QgaXBoZHIpOwpAQCAtMjE4Nyw3ICYjNDM7MjE5Myw3IEBAIHN0YXRpYyBpbnQgbmV0cG9sbF9zZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csCiAJc2tiX3B1dChza2IsIGxlbik7CiAKIAlwdXNoX3VkcChudCwgc2tiLCBsZW4pOwotCWlmIChudC0mZ3Q7aXB2NikKJiM0MzsJaWYgKG50LSZndDtyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KQogCQlwdXNoX2lwdjYobnQsIHNrYiwgbGVuKTsKIAllbHNlCiAJCXB1c2hfaXB2NChudCwgc2tiLCBsZW4pOwpAQCAtMjUwNywxMCAmIzQzOzI1MTMsOCBAQCBfX3JlbGVhc2VzKCZhbXA7dGFyZ2V0X2xpc3RfbG9jaykKIHN0YXRpYyBpbnQgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjaGFyICpvcHQpCiB7CiAJc3RydWN0IG5ldHBvbGwgKm5wID0gJmFtcDtudC0mZ3Q7bnA7Ci0JYm9vbCBpcHZlcnNpb25fc2V0ID0gZmFsc2U7CiAJY2hhciAqY3VyID0gb3B0OwogCWNoYXIgKmRlbGltOwotCWludCBpcHY2OwogCiAJaWYgKCpjdXIgIT0gJiMzOTtAJiMzOTspIHsKIAkJZGVsaW0gPSBzdHJjaHIoY3VyLCAmIzM5O0AmIzM5Oyk7CkBAIC0yNTI0LDE2ICYjNDM7MjUyOCwxMiBAQCBzdGF0aWMgaW50IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY2hhciAqb3B0KQogCWN1ciYjNDM7JiM0Mzs7CiAKIAlpZiAoKmN1ciAhPSAmIzM5Oy8mIzM5OykgewotCQlpcHZlcnNpb25fc2V0ID0gdHJ1ZTsKIAkJZGVsaW0gPSBzdHJjaHIoY3VyLCAmIzM5Oy8mIzM5Oyk7CiAJCWlmICghZGVsaW0pCiAJCQlnb3RvIHBhcnNlX2ZhaWxlZDsKIAkJKmRlbGltID0gMDsKLQkJaXB2NiA9IG5ldHBvbGxfcGFyc2VfaXBfYWRkcihjdXIsICZhbXA7bnQtJmd0O2xvY2FsX2lwKTsKLQkJaWYgKGlwdjYgJmx0OyAwKQomIzQzOwkJaWYgKG5ldHBvbGxfcGFyc2VfaXBfYWRkcihjdXIsICZhbXA7bnQtJmd0O2xvY2FsX2lwKSAmbHQ7IDApCiAJCQlnb3RvIHBhcnNlX2ZhaWxlZDsKLQkJZWxzZQotCQkJbnQtJmd0O2lwdjYgPSAoYm9vbClpcHY2OwogCQljdXIgPSBkZWxpbTsKIAl9CiAJY3VyJiM0MzsmIzQzOzsKQEAgLTI1NzUsMTMgJiM0MzsyNTc1LDExIEBAIHN0YXRpYyBpbnQgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjaGFyICpvcHQpCiAJaWYgKCFkZWxpbSkKIAkJZ290byBwYXJzZV9mYWlsZWQ7CiAJKmRlbGltID0gMDsKLQlpcHY2ID0gbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGN1ciwgJmFtcDtudC0mZ3Q7cmVtb3RlX2lwKTsKLQlpZiAoaXB2NiAmbHQ7IDApCiYjNDM7CWlmIChuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY3VyLCAmYW1wO250LSZndDtyZW1vdGVfaXApICZsdDsgMCkKIAkJZ290byBwYXJzZV9mYWlsZWQ7Ci0JZWxzZSBpZiAoaXB2ZXJzaW9uX3NldCAmYW1wOyZhbXA7IG50LSZndDtpcHY2ICE9IChib29sKWlwdjYpCiYjNDM7CWlmIChudC0mZ3Q7bG9jYWxfaXAuZmFtaWx5ICE9IEFGX1VOU1BFQyAmYW1wOyZhbXA7CiYjNDM7CSAgICBudC0mZ3Q7bG9jYWxfaXAuZmFtaWx5ICE9IG50LSZndDtyZW1vdGVfaXAuZmFtaWx5KQogCQlnb3RvIHBhcnNlX2ZhaWxlZDsKLQllbHNlCi0JCW50LSZndDtpcHY2ID0gKGJvb2wpaXB2NjsKIAljdXIgPSBkZWxpbSAmIzQzOyAxOwogCiAJaWYgKCpjdXIgIT0gMCkgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRwb2xsLmggYi9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaAppbmRleCAxYzZiMWVlYzVlZmQ2Li5lYzA4MjFhNWIwMmRiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaApAQCAtMTYsMTEgJiM0MzsxNiw2IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvaXAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC91ZHAuaCZndDsKIAotdW5pb24gaW5ldF9hZGRyIHsKLQlfX2JlMzIJCWlwOwotCXN0cnVjdCBpbjZfYWRkcglpbjY7Ci19OwotCiBzdHJ1Y3QgbmV0cG9sbCB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAluZXRkZXZpY2VfdHJhY2tlciBkZXZfdHJhY2tlcjsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0MjYKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVmYWN0b3JpbmcgTmV0Y29uc29sZSBmb3IgSVB2NiBGbGV4aWJpbGl0eSoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFpbWVkIGF0IGltcHJvdmluZyB0aGUgSVB2NiBzdXBwb3J0IHdpdGhpbiB0aGUgbmV0Y29uc29sZSBkcml2ZXIuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IGl0JiMzOTtzIGEgcHJldHR5IHRhcmdldGVkIHJlZmFjdG9yLCBmb2N1c2luZyBvbiBhIG1vcmUgZmxleGlibGUgd2F5IHRvIGhhbmRsZSBJUCBhZGRyZXNzZXMuIEl0IGxvb2tzIGxpa2UgdGhlIG1haW4gdGhydXN0IGlzIHRvIG1vdmUgYXdheSBmcm9tIHRoZSBzaW1wbGUgYGlwdjZgIGJvb2xlYW4gZmxhZyBhbmQgdGhlIGB1bmlvbiBpbmV0X2FkZHJgIOKAkyB3aGljaCBmZWVscyBhIGJpdCBsaW1pdGluZyDigJMgYW5kIGludG8gYSBtb3JlIHJvYnVzdCBgc3RydWN0IGluZXRfYWRkcmAuIFRoaXMgbmV3IHN0cnVjdHVyZSBjbGV2ZXJseSBidW5kbGVzIHRoZSBhZGRyZXNzIGZhbWlseSAoYHU4IGZhbWlseWApIHdpdGggdGhlIHVuaW9uIGNvbnRhaW5pbmcgdGhlIGFjdHVhbCBJUCBhZGRyZXNzZXMgKGJvdGggSVB2NCBhbmQgSVB2NikuCgpUaGUgaW1wbGljYXRpb25zIGFyZSBjbGVhcjogdGhlIGBpcHY2YCBmaWVsZCB3aXRoaW4gYHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldGAgaXMgYmVpbmcgcmV0aXJlZCwgYW5kIGFsbCB0aGUgcGFyc2luZyBhbmQgc2V0dXAgY29kZSBhcmUgYmVpbmcgdXBkYXRlZCB0byBsZXZlcmFnZSB0aGUgYGZhbWlseWAgZmllbGQgaW5zdGVhZC4gVGhhdOKAmXMgdGhlIHJpZ2h0IHdheSB0byBhcHByb2FjaCBpdC4gV2UmIzM5O3JlIGFsc28gc2VlaW5nIHRoZSBhZGRpdGlvbiBvZiBzb21lIGNydWNpYWwgY2hlY2tzIHRvIHZhbGlkYXRlIHRoYXQgYm90aCB0aGUgcmVtb3RlIElQIGlzIGRlZmluZWQgYW5kIHRoYXQgYm90aCB0aGUgbG9jYWwgYW5kIHJlbW90ZSBJUHMgYmVsb25nIHRvIHRoZSBzYW1lIGFkZHJlc3MgZmFtaWx5LiBNYWtlcyBzZW5zZSDigJMgY29uc2lzdGVuY3kgaXMga2V5LCBlc3BlY2lhbGx5IGluIG5ldHdvcmsgY29uZmlndXJhdGlvbnMuCgpTbywgdGhlIGBzdHJ1Y3QgaW5ldF9hZGRyYCBpcyBkaXJlY3RseSBlbWJlZGRlZCB3aXRoaW4gdGhlIGBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXRgIGl0c2VsZiwgYXMgdGhlIGBsb2NhbF9pcGAgYW5kIGByZW1vdGVfaXBgIG1lbWJlcnMuIE5vdywgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIHRoYXQgdGhlc2Ugc3RydWN0cyBhcmUgYmVpbmcgYWxsb2NhdGVkIHByb3Blcmx5LiBJ4oCZbGwgcXVpY2tseSBjaGVjayBob3cgYHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldGAgaXMgaW5zdGFudGlhdGVkLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgYWxsb2NfcGFyYW1fdGFyZ2V0YCBhbmQgYG1ha2VfbmV0Y29uc29sZV90YXJnZXRgIGZ1bmN0aW9ucy4gSnVzdCB3YW50IHRvIGNvbmZpcm0gdGhhdCB0aGVyZSBpc27igJl0IGFueSBvYnZpb3VzIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlLiBJJiMzOTtsbCBuZWVkIHRvIHJ1biBhIGBncmVwYCBmb3IgYGFsbG9jX3BhcmFtX3RhcmdldGAgYW5kIGBtYWtlX25ldGNvbnNvbGVfdGFyZ2V0YCB0byBjb25maXJtLiBJdCBpcyBwb3NzaWJsZSB0aGV5IHVzZSBga3phbGxvY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FsbG9jX3BhcmFtX3RhcmdldHxtYWtlX25ldGNvbnNvbGVfdGFyZ2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xNzE2PXN0YXRpYyBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKmZpbmRfY21kbGluZV90YXJnZXQoY29uc3QgY2hhciAqbmFtZSlcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTczNi1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNzM3OnN0YXRpYyBzdHJ1Y3QgY29uZmlnX2dyb3VwICptYWtlX25ldGNvbnNvbGVfdGFyZ2V0KHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE3MzgtXHRcdFx0XHRcdFx0ICAgY29uc3QgY2hhciAqbmFtZSlcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTgyMz1zdGF0aWMgY29uc3Qgc3RydWN0IGNvbmZpZ2ZzX2dyb3VwX29wZXJhdGlvbnMgbmV0Y29uc29sZV9zdWJzeXNfZ3JvdXBfb3BzID0ge1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE4MjQ6XHQubWFrZV9ncm91cFx0PSBtYWtlX25ldGNvbnNvbGVfdGFyZ2V0LFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE4MjUtXHQuZHJvcF9pdGVtXHQ9IGRyb3BfbmV0Y29uc29sZV90YXJnZXQsXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI1MTM9c3RhdGljIGludCBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNoYXIgKm9wdClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjYwMC0vKiBBbGxvY2F0ZSBuZXcgdGFyZ2V0IChmcm9tIGJvb3QvbW9kdWxlIHBhcmFtKSBhbmQgc2V0dXAgbmV0cG9sbCBmb3IgaXQgKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNjAxOnN0YXRpYyBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKmFsbG9jX3BhcmFtX3RhcmdldChjaGFyICp0YXJnZXRfY29uZmlnLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2MDItXHRcdFx0XHRcdFx0ICAgIGludCBjbWRsaW5lX2NvdW50KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yNjkzPXN0YXRpYyBpbnQgX19pbml0IGluaXRfbmV0Y29uc29sZSh2b2lkKVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNzA0LVx0XHR3aGlsZSAoKHRhcmdldF9jb25maWcgPSBzdHJzZXAoXHUwMDI2aW5wdXQsIFwmIzM0OztcJiMzNDspKSkge1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI3MDU6XHRcdFx0bnQgPSBhbGxvY19wYXJhbV90YXJnZXQodGFyZ2V0X2NvbmZpZywgY291bnQpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI3MDYtXHRcdFx0aWYgKElTX0VSUihudCkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzU0MwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBUYXJnZXQgQWxsb2NhdGlvbiBhbmQgTmV0Y29uc29sZSBDcmVhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IGhvdyB0aGVzZSB0YXJnZXRzIGFyZSBiZWluZyBzZXQgdXAuIEZpcnN0LCBJJiMzOTttIGdvaW5nIHRvIGRpZyBpbnRvIHRoZSBgYWxsb2NfcGFyYW1fdGFyZ2V0YCBpbXBsZW1lbnRhdGlvbi4gSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IGl0JiMzOTtzIGRlY2lkaW5nIHdoaWNoIHJlc291cmNlcyB0byBhbGxvY2F0ZSBhbmQgd2hhdCBwYXJhbWV0ZXJzIGl0JiMzOTtzIGNvbnNpZGVyaW5nLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBhbnkgcG90ZW50aWFsIGVkZ2UgY2FzZXMgb3Igb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMgdGhlcmUsIGdpdmVuIG15IGV4cGVyaWVuY2Ugd2l0aCBzaW1pbGFyIHJlc291cmNlIGFsbG9jYXRpb24gc2NoZW1lcy4gVGhlbiwgSeKAmWxsIGltbWVkaWF0ZWx5IGNvbnRyYXN0IHRoYXQgd2l0aCBhIHJldmlldyBvZiBgbWFrZV9uZXRjb25zb2xlX3RhcmdldGAuIEkmIzM5O20gY3VyaW91cyBob3cgaXRzIHNwZWNpZmljIGFwcHJvYWNoIHRvIG5ldHdvcmsgY29uc29sZSB0YXJnZXRzIGRpZmZlcnMuIFdoYXQgYXJlIGl0cyBkZXBlbmRlbmNpZXM/IFdoYXQgZXJyb3IgY29uZGl0aW9ucyBtaWdodCBhcmlzZT8gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2xldmVybmVzcywgYW5kIHBvdGVudGlhbCBpbmVmZmljaWVuY2llcy4gS25vd2luZyBib3RoIHRoZXNlIGltcGxlbWVudGF0aW9ucyB0aG9yb3VnaGx5IHdpbGwgZ2l2ZSBtZSBhIHNvbGlkIGJhc2UgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyB0YXJnZXRzIGluIGdlbmVyYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3phbGxvYy4qbmV0Y29uc29sZV90YXJnZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODExCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6CgoqKkNoZWNraW5nIGBudGAgQWxsb2NhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBmaXJzdCB0aGluZyBJJiMzOTttIHRoaW5raW5nIGlzLCBsZXQmIzM5O3MgcGlucG9pbnQgZXhhY3RseSBob3cgYG50YCBpcyBiZWluZyBhbGxvY2F0ZWQgaW4gdGhlIGZpcnN0IHBsYWNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgbGlmZWN5Y2xlLiBXaGVyZSBhbmQgd2hlbiBpcyB0aGlzIHZhcmlhYmxlIGJyb3VnaHQgaW50byBleGlzdGVuY2U/IElzIGl0IGEgc3RhdGljYWxseSBhbGxvY2F0ZWQgdmFyaWFibGUsIHBlcmhhcHMgYSBnbG9iYWwgb3Igd2l0aGluIGEgc3BlY2lmaWMgc2NvcGU/IE9yLCBpcyBpdCBkeW5hbWljYWxseSBhbGxvY2F0ZWQsIG1heWJlIHRocm91Z2ggYG1hbGxvY2Agb3IgYSBzaW1pbGFyIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9uPyBUaGUgYWxsb2NhdGlvbiBtZXRob2Qgd2lsbCBmdW5kYW1lbnRhbGx5IGluZmx1ZW5jZSBldmVyeXRoaW5nIHRoYXQgZm9sbG93cy4gSSBuZWVkIHRvIGtub3cgdGhpcyB0byB0cmFjayB0aGUgaW1wbGljYXRpb25zLiBUaGlzIGluZm9ybWF0aW9uIHdpbGwgaW5mb3JtIHNvIG11Y2ggYWJvdXQgaXRzIGxpZmV0aW1lLCBob3cgaXQmIzM5O3MgdXNlZCwgYW5kIHBvdGVudGlhbCBwcm9ibGVtcy4gS25vd2luZyB0aGUgYWxsb2NhdGlvbiB0eXBlIHdpbGwgZ2l2ZSBtZSBpbXBvcnRhbnQgY2x1ZXMgYWJvdXQgaXRzIGNoYXJhY3RlcmlzdGljcyBhbmQgY29uc3RyYWludHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t6YWxsb2MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTY1Nz1zdGF0aWMgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICphbGxvY19hbmRfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy02NjAtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NjYxOlx0bnQgPSBremFsbG9jX29iaigqbnQpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTY2Mi1cdGlmICghbnQpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTE2MDE9c3RhdGljIHN0cnVjdCBjb25maWdfaXRlbSAqdXNlcmRhdHVtX21ha2VfaXRlbShzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTYxNS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNjE2Olx0dWRtID0ga3phbGxvY19vYmooKnVkbSk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTYxNy1cdGlmICghdWRtKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MjIxCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWVtb3J5IEFsbG9jYXRpb24gYW5kIERhdGEgU3RydWN0dXJlcyoqCgpPa2F5LCBzbyBga3phbGxvY19vYmpgIGlzIGJlaW5nIHVzZWQgaGVyZSwgd2hpY2ggaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhlIGBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXRgIGlzIHplcm8taW5pdGlhbGl6ZWQuIEdvb2QsIGdvb2QuIFRoYXQgbWVhbnMgdGhlIGBpbmV0X2FkZHJgIGZpZWxkcyB3aXRoaW4gd2lsbCBzdGFydCBhdCB6ZXJvLCBzcGVjaWZpY2FsbHkgdGhlIGBmYW1pbHlgIGZpZWxkIHdpbGwgYmUgemVybywgY29ycmVzcG9uZGluZyB0byBgQUZfVU5TUEVDYC4KClRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIGBzdHJ1Y3QgaW5ldF9hZGRyYCwgd2hpY2ggaXMgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZDogYSBgdTggZmFtaWx5YCBhbmQgYSB1bmlvbiBmb3IgSVB2NCBhbmQgSVB2NiBhZGRyZXNzZXMuIFRoZSB1bmlvbiYjMzk7cyBzaXplIGlzLCBvZiBjb3Vyc2UsIDE2IGJ5dGVzLiBDb25zaWRlcmluZyB0aGUgcGFkZGluZywgdGhlIG92ZXJhbGwgc2l6ZSBvZiBgaW5ldF9hZGRyYCBsb29rcyBsaWtlIGl0JiMzOTtsbCBiZSAyMCBieXRlcy4gTm93LCB0aGUga2V5IHF1ZXN0aW9uIGFyaXNlczogaXMgdGhpcyBzdHJ1Y3QgZXZlciBjb3BpZWQgdG8gdXNlcnNwYWNlPyBUaGF0JiMzOTtzIHdoYXQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQuIEFueSBwb3RlbnRpYWwgZXhwb3N1cmUgdGhlcmUgaXMgd2hhdCBJIGhhdmUgdG8gYmUgbW9zdCBjb25jZXJuZWQgYWJvdXQuCgpMZXQmIzM5O3Mgc2VlLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYGxvY2FsX2lwX3Nob3dgIGFuZCBgcmVtb3RlX2lwX3Nob3dgLCBib3RoIG9mIHdoaWNoIHVzZSBgc3lzZnNfZW1pdGAuIE9rYXksIHRoYXQmIzM5O3Mgbm90IGEgZGlyZWN0IGNvcHk7IGl0JiMzOTtzIGp1c3QgZm9ybWF0dGluZyB0aGUgSVAgYWRkcmVzcyB0byBhIHN0cmluZy4gVGhhdCYjMzk7cyBhIHJlbGllZi4gQnV0IHRoYXQgZG9lc24mIzM5O3QgbWVhbiBpdCYjMzk7cyBlbnRpcmVseSBzYWZlLiBJIHNob3VsZCBjaGVjayBvdGhlciBwb3NzaWJsZSB1c2VzIG9mIGBzdHJ1Y3QgaW5ldF9hZGRyYC4gR290dGEgYmUgdGhvcm91Z2ggaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW5ldF9hZGRyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xNDg9ZW51bSB0YXJnZXRfc3RhdGUge1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNTMtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTU0OnN0cnVjdCBpbmV0X2FkZHIge1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE1NS1cdC8qIEFkZHJlc3MgZmFtaWx5OiBBRl9VTlNQRUMgd2hlbiB1bnNldCwgZWxzZSBBRl9JTkVUIG9yIEFGX0lORVQ2ICovXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIwND1zdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQge1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjItXHRzdHJ1Y3QgbmV0cG9sbFx0XHRucDtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMjM6XHRzdHJ1Y3QgaW5ldF9hZGRyXHRsb2NhbF9pcCwgcmVtb3RlX2lwO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyNC1cdHUxNlx0XHRcdGxvY2FsX3BvcnQsIHJlbW90ZV9wb3J0O1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz03MTI9c3RhdGljIHZvaWQgbmV0Y29uc29sZV9wcmludF9iYW5uZXIoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNzM0LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjczNTovKiBQYXJzZSB0aGUgc3RyaW5nIGFuZCBwb3B1bGF0ZSB0aGUgYGluZXRfYWRkcmAgc3RydWN0LiBSZXR1cm4gMCBvbiBzdWNjZXNzXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNzM2LSAqIGFuZCAtMSB1cG9uIGZhaWx1cmUuXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNzM3LSAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjczODpzdGF0aWMgaW50IG5ldHBvbGxfcGFyc2VfaXBfYWRkcihjb25zdCBjaGFyICpzdHIsIHN0cnVjdCBpbmV0X2FkZHIgKmFkZHIpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNzM5LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTE3OAoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludGVybmFsIFN0cnVjdHVyZSBDb25zb2xpZGF0aW9uIGluIE5ldGNvbnNvbGUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgbmV3IHN0cnVjdCBhbmQgaXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCDigJMgaXQmIzM5O3MganVzdCBiZWluZyB1c2VkICppbnRlcm5hbGx5KiB3aXRoaW4gYG5ldGNvbnNvbGUuY2AuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYSByZXBsYWNlbWVudCBmb3IgdGhhdCBvbGQgYHVuaW9uIGluZXRfYWRkcmAgdGhhdCB3YXMgZmxvYXRpbmcgYXJvdW5kIGluIGBpbmNsdWRlL2xpbnV4L25ldHBvbGwuaGAgYnV0IHdhcyBldmVudHVhbGx5IHJlbW92ZWQuIE15IGZpcnN0IHRob3VnaHQgaXMgJiMzNDt0aGF0JiMzOTtzIGNvbnZlbmllbnQsIGNsZWFucyB0aGluZ3MgdXAgYSBiaXQmIzM0Oy4KCk5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXMsIHdhcyB0aGF0IGB1bmlvbiBpbmV0X2FkZHJgIHRydWx5ICpvbmx5KiB1dGlsaXplZCB3aXRoaW4gYG5ldGNvbnNvbGUuY2A/IEl0JiMzOTtzIGVhc3kgdG8gYXNzdW1lLCBidXQgSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4gVGhlcmUmIzM5O3MgYWx3YXlzIHRoZSBjaGFuY2UgdGhhdCBzb21ldGhpbmcgZ290IG1pc3NlZCBkdXJpbmcgdGhlIHJlZmFjdG9yaW5nIG9yIHJlbW92YWwgcHJvY2VzcywgYW5kIHRoYXQmIzM5O3MgdGhlIGtpbmQgb2YgdGhpbmcgdGhhdCBjYW4gcXVpZXRseSBpbnRyb2R1Y2UgYnVncyBkb3duIHRoZSBsaW5lLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgY29kZWJhc2UgdG8gYmUgc3VyZSB3ZSBkaWRuJiMzOTt0IG9ycGhhbiBhbnkgZGVwZW5kZW5jaWVzLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBtYWtlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2luZXRfYWRkciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMjA5NyBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTE0OD1lbnVtIHRhcmdldF9zdGF0ZSB7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE1My1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNTQ6c3RydWN0IGluZXRfYWRkciB7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTU1LVx0LyogQWRkcmVzcyBmYW1pbHk6IEFGX1VOU1BFQyB3aGVuIHVuc2V0LCBlbHNlIEFGX0lORVQgb3IgQUZfSU5FVDYgKi9cbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjA0PXN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCB7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMi1cdHN0cnVjdCBuZXRwb2xsXHRcdG5wO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIyMzpcdHN0cnVjdCBpbmV0X2FkZHJcdGxvY2FsX2lwLCByZW1vdGVfaXA7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjI0LVx0dTE2XHRcdFx0bG9jYWxfcG9ydCwgcmVtb3RlX3BvcnQ7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTcxMj1zdGF0aWMgdm9pZCBuZXRjb25zb2xlX3ByaW50X2Jhbm5lcihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy03MzQtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NzM1Oi8qIFBhcnNlIHRoZSBzdHJpbmcgYW5kIHBvcHVsYXRlIHRoZSBgaW5ldF9hZGRyYCBzdHJ1Y3QuIFJldHVybiAwIG9uIHN1Y2Nlc3NcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy03MzYtICogYW5kIC0xIHVwb24gZmFpbHVyZS5cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy03MzctICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NzM4OnN0YXRpYyBpbnQgbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGNvbnN0IGNoYXIgKnN0ciwgc3RydWN0IGluZXRfYWRkciAqYWRkcilcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy03Mzkte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9zZWxmdGVzdC9hbGxvd2VkaXBzLmM9ODI9c3RydWN0IGhvcnJpYmxlX2FsbG93ZWRpcHNfbm9kZSB7XG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VsZnRlc3QvYWxsb3dlZGlwcy5jLTgzLVx0c3RydWN0IGhsaXN0X25vZGUgdGFibGU7XG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VsZnRlc3QvYWxsb3dlZGlwcy5jOjg0Olx0dW5pb24gbmZfaW5ldF9hZGRyIGlwO1xuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NlbGZ0ZXN0L2FsbG93ZWRpcHMuYzo4NTpcdHVuaW9uIG5mX2luZXRfYWRkciBtYXNrO1xuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NlbGZ0ZXN0L2FsbG93ZWRpcHMuYy04Ni1cdHU4IGlwX3ZlcnNpb247XG4tLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NlbGZ0ZXN0L2FsbG93ZWRpcHMuYz05NT1zdGF0aWMgX19pbml0IHZvaWQgaG9ycmlibGVfYWxsb3dlZGlwc19mcmVlKHN0cnVjdCBob3JyaWJsZV9hbGxvd2VkaXBzICp0YWJsZSlcbi0tXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VsZnRlc3QvYWxsb3dlZGlwcy5jLTEwNS1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9zZWxmdGVzdC9hbGxvd2VkaXBzLmM6MTA2OnN0YXRpYyBfX2luaXQgaW5saW5lIHVuaW9uIG5mX2luZXRfYWRkciBob3JyaWJsZV9jaWRyX3RvX21hc2sodTggY2lkcilcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9zZWxmdGVzdC9hbGxvd2VkaXBzLmMtMTA3LXtcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9zZWxmdGVzdC9hbGxvd2VkaXBzLmM6MTA4Olx0dW5pb24gbmZfaW5ldF9hZGRyIG1hc2s7XG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VsZnRlc3QvYWxsb3dlZGlwcy5jLTEwOS1cbi0tXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VsZnRlc3QvYWxsb3dlZGlwcy5jLTExNy1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9zZWxmdGVzdC9hbGxvd2VkaXBzLmM6MTE4OnN0YXRpYyBfX2luaXQgaW5saW5lIHU4IGhvcnJpYmxlX21hc2tfdG9fY2lkcih1bmlvbiBuZl9pbmV0X2FkZHIgc3VibmV0KVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NlbGZ0ZXN0L2FsbG93ZWRpcHMuYy0xMTkte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9zZWxmdGVzdC9hbGxvd2VkaXBzLmM9MTUzPWhvcnJpYmxlX2luc2VydF9vcmRlcmVkKHN0cnVjdCBob3JyaWJsZV9hbGxvd2VkaXBzICp0YWJsZSwgc3RydWN0IGhvcnJpYmxlX2FsbG93ZWRpcHNfbm9kZSAqbm9kZSlcbi0tXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VsZnRlc3QvYWxsb3dlZGlwcy5jLTE1OS1cdFx0aWYgKG90aGVyLVx1MDAzZWlwX3ZlcnNpb24gPT0gbm9kZS1cdTAwM2VpcF92ZXJzaW9uIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NlbGZ0ZXN0L2FsbG93ZWRpcHMuYzoxNjA6XHRcdCAgICAhbWVtY21wKFx1MDAyNm90aGVyLVx1MDAzZW1hc2ssIFx1MDAyNm5vZGUtXHUwMDNlbWFzaywgc2l6ZW9mKHVuaW9uIG5mX2luZXRfYWRkcikpIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NlbGZ0ZXN0L2FsbG93ZWRpcHMuYzoxNjE6XHRcdCAgICAhbWVtY21wKFx1MDAyNm90aGVyLVx1MDAzZWlwLCBcdTAwMjZub2RlLVx1MDAzZWlwLCBzaXplb2YodW5pb24gbmZfaW5ldF9hZGRyKSkpIHtcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9zZWxmdGVzdC9hbGxvd2VkaXBzLmMtMTYyLVx0XHRcdG90aGVyLVx1MDAzZXZhbHVlID0gbm9kZS1cdTAwM2V2YWx1ZTtcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L3JkbWEuYz0yMDAxPXN0YXRpYyB2b2lkIG52bWV0X3JkbWFfZGlzY19wb3J0X2FkZHIoc3RydWN0IG52bWV0X3JlcSAqcmVxLFxuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvcmRtYS5jLTIwMDYtXG5kcml2ZXJzL252bWUvdGFyZ2V0L3JkbWEuYzoyMDA3Olx0aWYgKGluZXRfYWRkcl9pc19hbnkoXHUwMDI2Y21faWQtXHUwMDNlcm91dGUuYWRkci5zcmNfYWRkcikpIHtcbmRyaXZlcnMvbnZtZS90YXJnZXQvcmRtYS5jLTIwMDgtXHRcdHN0cnVjdCBudm1ldF9yZG1hX3JzcCAqcnNwID1cbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jPTIyMDI9c3RhdGljIHZvaWQgbnZtZXRfdGNwX2Rpc2NfcG9ydF9hZGRyKHN0cnVjdCBudm1ldF9yZXEgKnJlcSxcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTIyMDYtXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jOjIyMDc6XHRpZiAoaW5ldF9hZGRyX2lzX2FueShcdTAwMjZwb3J0LVx1MDAzZWFkZHIpKSB7XG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTIyMDgtXHRcdHN0cnVjdCBudm1ldF90Y3BfY21kICpjbWQgPVxuLS1cbmRyaXZlcnMvdGFyZ2V0L2lzY3NpL2lzY3NpX3RhcmdldC5jPTMzMzY9aXNjc2l0X2J1aWxkX3NlbmR0YXJnZXRzX3Jlc3BvbnNlKHN0cnVjdCBpc2NzaXRfY21kICpjbWQsXG4tLVxuZHJpdmVycy90YXJnZXQvaXNjc2kvaXNjc2lfdGFyZ2V0LmMtMzQzOC1cbmRyaXZlcnMvdGFyZ2V0L2lzY3NpL2lzY3NpX3RhcmdldC5jOjM0Mzk6XHRcdFx0XHRpZiAoaW5ldF9hZGRyX2lzX2FueShcdTAwMjZucC1cdTAwM2VucF9zb2NrYWRkcikpXG5kcml2ZXJzL3RhcmdldC9pc2NzaS9pc2NzaV90YXJnZXQuYy0zNDQwLVx0XHRcdFx0XHRzb2NrYWRkciA9IFx1MDAyNmNvbm4tXHUwMDNlbG9jYWxfc29ja2FkZHI7XG4tLVxuZnMvc21iL3NlcnZlci9jb25uZWN0aW9uLmM9MzA9c3RhdGljIGludCBwcm9jX3Nob3dfY2xpZW50cyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG4tLVxuZnMvc21iL3NlcnZlci9jb25uZWN0aW9uLmMtNDUtI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5mcy9zbWIvc2VydmVyL2Nvbm5lY3Rpb24uYzo0NjpcdFx0aWYgKCFjb25uLVx1MDAzZWluZXRfYWRkcilcbmZzL3NtYi9zZXJ2ZXIvY29ubmVjdGlvbi5jLTQ3LVx0XHRcdHNlcV9wcmludGYobSwgXCYjMzQ7JS0yMHBJNmNcJiMzNDssIFx1MDAyNmNvbm4tXHUwMDNlaW5ldDZfYWRkcik7XG4tLVxuZnMvc21iL3NlcnZlci9jb25uZWN0aW9uLmMtNDktI2VuZGlmXG5mcy9zbWIvc2VydmVyL2Nvbm5lY3Rpb24uYzo1MDpcdFx0XHRzZXFfcHJpbnRmKG0sIFwmIzM0OyUtMjBwSTRcJiMzNDssIFx1MDAyNmNvbm4tXHUwMDNlaW5ldF9hZGRyKTtcbmZzL3NtYi9zZXJ2ZXIvY29ubmVjdGlvbi5jLTUxLVx0XHRzZXFfcHJpbnRmKG0sIFwmIzM0OyAgIDB4JS0xMHggJS0xMHUgJS0xMmQgJS0xMGQgJXB0VFxcblwmIzM0Oyxcbi0tXG5mcy9zbWIvc2VydmVyL2Nvbm5lY3Rpb24uaD00NT1zdHJ1Y3Qga3NtYmRfY29ubiB7XG4tLVxuZnMvc21iL3NlcnZlci9jb25uZWN0aW9uLmgtNTQtXHR1bmlvbiB7XG5mcy9zbWIvc2VydmVyL2Nvbm5lY3Rpb24uaDo1NTpcdFx0X19iZTMyXHRcdFx0aW5ldF9hZGRyO1xuZnMvc21iL3NlcnZlci9jb25uZWN0aW9uLmgtNTYtI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG4tLVxuZnMvc21iL3NlcnZlci9tZ210L3VzZXJfc2Vzc2lvbi5jPTgxPXN0YXRpYyBpbnQgc2hvd19wcm9jX3Nlc3Npb24oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuLS1cbmZzL3NtYi9zZXJ2ZXIvbWdtdC91c2VyX3Nlc3Npb24uYy05Ni0jaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbmZzL3NtYi9zZXJ2ZXIvbWdtdC91c2VyX3Nlc3Npb24uYzo5NzpcdFx0aWYgKGNoYW4tXHUwMDNlY29ubi1cdTAwM2VpbmV0X2FkZHIpXG5mcy9zbWIvc2VydmVyL21nbXQvdXNlcl9zZXNzaW9uLmMtOTgtXHRcdFx0c2VxX3ByaW50ZihtLCBcJiMzNDslLTIwc1xcdCVwSTRcXG5cJiMzNDssIFwmIzM0O2NsaWVudFwmIzM0OyxcbmZzL3NtYi9zZXJ2ZXIvbWdtdC91c2VyX3Nlc3Npb24uYzo5OTpcdFx0XHRcdFx0XHUwMDI2Y2hhbi1cdTAwM2Vjb25uLVx1MDAzZWluZXRfYWRkcik7XG5mcy9zbWIvc2VydmVyL21nbXQvdXNlcl9zZXNzaW9uLmMtMTAwLVx0XHRlbHNlXG4tLVxuZnMvc21iL3NlcnZlci9tZ210L3VzZXJfc2Vzc2lvbi5jLTEwNC1cdFx0c2VxX3ByaW50ZihtLCBcJiMzNDslLTIwc1xcdCVwSTRcXG5cJiMzNDssIFwmIzM0O2NsaWVudFwmIzM0OyxcbmZzL3NtYi9zZXJ2ZXIvbWdtdC91c2VyX3Nlc3Npb24uYzoxMDU6XHRcdFx0XHRcdTAwMjZjaGFuLVx1MDAzZWNvbm4tXHUwMDNlaW5ldF9hZGRyKTtcbmZzL3NtYi9zZXJ2ZXIvbWdtdC91c2VyX3Nlc3Npb24uYy0xMDYtI2VuZGlmXG4tLVxuZnMvc21iL3NlcnZlci9tZ210L3VzZXJfc2Vzc2lvbi5jPTIwMD1zdGF0aWMgaW50IHNob3dfcHJvY19zZXNzaW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG4tLVxuZnMvc21iL3NlcnZlci9tZ210L3VzZXJfc2Vzc2lvbi5jLTIxNy0jaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbmZzL3NtYi9zZXJ2ZXIvbWdtdC91c2VyX3Nlc3Npb24uYzoyMTg6XHRcdFx0aWYgKCFjaGFuLVx1MDAzZWNvbm4tXHUwMDNlaW5ldF9hZGRyKVxuZnMvc21iL3NlcnZlci9tZ210L3VzZXJfc2Vzc2lvbi5jLTIxOS1cdFx0XHRcdHNlcV9wcmludGYobSwgXCYjMzQ7ICUtNDBwSTZjXCYjMzQ7LCBcdTAwMjZjaGFuLVx1MDAzZWNvbm4tXHUwMDNlaW5ldDZfYWRkcik7XG4tLVxuZnMvc21iL3NlcnZlci9tZ210L3VzZXJfc2Vzc2lvbi5jLTIyMS0jZW5kaWZcbmZzL3NtYi9zZXJ2ZXIvbWdtdC91c2VyX3Nlc3Npb24uYzoyMjI6XHRcdFx0XHRzZXFfcHJpbnRmKG0sIFwmIzM0OyAlLTQwcEk0XCYjMzQ7LCBcdTAwMjZjaGFuLVx1MDAzZWNvbm4tXHUwMDNlaW5ldF9hZGRyKTtcbmZzL3NtYi9zZXJ2ZXIvbWdtdC91c2VyX3Nlc3Npb24uYy0yMjMtXHRcdFx0c2VxX3ByaW50ZihtLCBcJiMzNDsgJS0xNXMgJS0xMGxsdSAlLTEwc1xcblwmIzM0Oyxcbi0tXG5mcy9zbWIvc2VydmVyL3RyYW5zcG9ydF90Y3AuYz01OT1zdGF0aWMgc3RydWN0IHRjcF90cmFuc3BvcnQgKmFsbG9jX3RyYW5zcG9ydChzdHJ1Y3Qgc29ja2V0ICpjbGllbnRfc2spXG4tLVxuZnMvc21iL3NlcnZlci90cmFuc3BvcnRfdGNwLmMtNzktXHR9IGVsc2Uge1xuZnMvc21iL3NlcnZlci90cmFuc3BvcnRfdGNwLmM6ODA6XHRcdGNvbm4tXHUwMDNlaW5ldF9hZGRyID0gaW5ldF9zayhjbGllbnRfc2stXHUwMDNlc2spLVx1MDAzZWluZXRfZGFkZHI7XG5mcy9zbWIvc2VydmVyL3RyYW5zcG9ydF90Y3AuYy04MS1cdFx0Y29ubi1cdTAwM2VpbmV0X2hhc2ggPSBpcHY0X2FkZHJfaGFzaChpbmV0X3NrKGNsaWVudF9zay1cdTAwM2VzayktXHUwMDNlaW5ldF9kYWRkcik7XG4tLVxuZnMvc21iL3NlcnZlci90cmFuc3BvcnRfdGNwLmMtODMtI2Vsc2VcbmZzL3NtYi9zZXJ2ZXIvdHJhbnNwb3J0X3RjcC5jOjg0Olx0Y29ubi1cdTAwM2VpbmV0X2FkZHIgPSBpbmV0X3NrKGNsaWVudF9zay1cdTAwM2VzayktXHUwMDNlaW5ldF9kYWRkcjtcbmZzL3NtYi9zZXJ2ZXIvdHJhbnNwb3J0X3RjcC5jLTg1LVx0Y29ubi1cdTAwM2VpbmV0X2hhc2ggPSBpcHY0X2FkZHJfaGFzaChpbmV0X3NrKGNsaWVudF9zay1cdTAwM2VzayktXHUwMDNlaW5ldF9kYWRkcik7XG4tLVxuZnMvc21iL3NlcnZlci90cmFuc3BvcnRfdGNwLmM9MTc3PXN0YXRpYyBpbnQga3NtYmRfdGNwX25ld19jb25uZWN0aW9uKHN0cnVjdCBzb2NrZXQgKmNsaWVudF9zaylcbi0tXG5mcy9zbWIvc2VydmVyL3RyYW5zcG9ydF90Y3AuYy0xOTgtXHRcdFx0XHRLU01CRF9UUkFOUyh0KS1cdTAwM2Vjb25uLCBcJiMzNDtrc21iZDolcEk0XCYjMzQ7LFxuZnMvc21iL3NlcnZlci90cmFuc3BvcnRfdGNwLmM6MTk5Olx0XHRcdFx0XHUwMDI2S1NNQkRfVFJBTlModCktXHUwMDNlY29ubi1cdTAwM2VpbmV0X2FkZHIpO1xuZnMvc21iL3NlcnZlci90cmFuc3BvcnRfdGNwLmMtMjAwLSNlbHNlXG4tLVxuZnMvc21iL3NlcnZlci90cmFuc3BvcnRfdGNwLmMtMjAyLVx0XHRcdEtTTUJEX1RSQU5TKHQpLVx1MDAzZWNvbm4sIFwmIzM0O2tzbWJkOiVwSTRcJiMzNDssXG5mcy9zbWIvc2VydmVyL3RyYW5zcG9ydF90Y3AuYzoyMDM6XHRcdFx0XHUwMDI2S1NNQkRfVFJBTlModCktXHUwMDNlY29ubi1cdTAwM2VpbmV0X2FkZHIpO1xuZnMvc21iL3NlcnZlci90cmFuc3BvcnRfdGNwLmMtMjA0LSNlbmRpZlxuLS1cbmZzL3NtYi9zZXJ2ZXIvdHJhbnNwb3J0X3RjcC5jPTIxOT1zdGF0aWMgaW50IGtzbWJkX2t0aHJlYWRfZm4odm9pZCAqcClcbi0tXG5mcy9zbWIvc2VydmVyL3RyYW5zcG9ydF90Y3AuYy0yNjAtXHRcdFx0fSBlbHNlIGlmIChpbmV0X3NrKGNsaWVudF9zay1cdTAwM2VzayktXHUwMDNlaW5ldF9kYWRkciA9PVxuZnMvc21iL3NlcnZlci90cmFuc3BvcnRfdGNwLmM6MjYxOlx0XHRcdFx0IGNvbm4tXHUwMDNlaW5ldF9hZGRyKVxuZnMvc21iL3NlcnZlci90cmFuc3BvcnRfdGNwLmMtMjYyLVx0XHRcdFx0bWF4X2lwX2Nvbm5zJiM0MzsmIzQzOztcbi0tXG5mcy9zbWIvc2VydmVyL3RyYW5zcG9ydF90Y3AuYy0yNjQtXHRcdFx0aWYgKGluZXRfc2soY2xpZW50X3NrLVx1MDAzZXNrKS1cdTAwM2VpbmV0X2RhZGRyID09XG5mcy9zbWIvc2VydmVyL3RyYW5zcG9ydF90Y3AuYzoyNjU6XHRcdFx0ICAgIGNvbm4tXHUwMDNlaW5ldF9hZGRyKVxuZnMvc21iL3NlcnZlci90cmFuc3BvcnRfdGNwLmMtMjY2LVx0XHRcdFx0bWF4X2lwX2Nvbm5zJiM0MzsmIzQzOztcbi0tXG5pbmNsdWRlL2xpbnV4L2luZXQuaD01Nj1leHRlcm4gaW50IGluZXRfcHRvbl93aXRoX3Njb3BlKHN0cnVjdCBuZXQgKm5ldCwgdW5zaWduZWQgc2hvcnQgYWYsXG5pbmNsdWRlL2xpbnV4L2luZXQuaC01Ny1cdFx0Y29uc3QgY2hhciAqc3JjLCBjb25zdCBjaGFyICpwb3J0LCBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqYWRkcik7XG5pbmNsdWRlL2xpbnV4L2luZXQuaDo1ODpib29sIGluZXRfYWRkcl9pc19hbnkoc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKmFkZHIpO1xuaW5jbHVkZS9saW51eC9pbmV0LmgtNTktXG4tLVxuaW5jbHVkZS9saW51eC9pbmV0ZGV2aWNlLmg9MTgxPXN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldF9kZXZpY2UgKmlwX2Rldl9maW5kKHN0cnVjdCBuZXQgKm5ldCwgX19iZTMyIGFkZHIpXG4tLVxuaW5jbHVkZS9saW51eC9pbmV0ZGV2aWNlLmgtMTg1LVxuaW5jbHVkZS9saW51eC9pbmV0ZGV2aWNlLmg6MTg2OmludCBpbmV0X2FkZHJfb25saW5rKHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiwgX19iZTMyIGEsIF9fYmUzMiBiKTtcbmluY2x1ZGUvbGludXgvaW5ldGRldmljZS5oLTE4Ny1pbnQgZGV2aW5ldF9pb2N0bChzdHJ1Y3QgbmV0ICpuZXQsIHVuc2lnbmVkIGludCBjbWQsIHN0cnVjdCBpZnJlcSAqKTtcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci5oPTI2PU5GX0RST1BfUkVBU09OKHN0cnVjdCBza19idWZmICpza2IsIGVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbiwgdTMyIGVycilcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci5oLTM0LVxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIuaDozNTpzdGF0aWMgaW5saW5lIGludCBuZl9pbmV0X2FkZHJfY21wKGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciAqYTEsXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci5oOjM2Olx0XHRcdFx0ICAgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyICphMilcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyLmgtMzcte1xuLS1cbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyLmgtNTAtXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci5oOjUxOnN0YXRpYyBpbmxpbmUgdm9pZCBuZl9pbmV0X2FkZHJfbWFzayhjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgKmExLFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIuaDo1MjpcdFx0XHRcdCAgICAgdW5pb24gbmZfaW5ldF9hZGRyICpyZXN1bHQsXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci5oOjUzOlx0XHRcdFx0ICAgICBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgKm1hc2spXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci5oLTU0LXtcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaD0zMzM9ZXh0ZXJuIGludCBpcF9zZXRfZ2V0X2lwYWRkcjQoc3RydWN0IG5sYXR0ciAqbmxhLCAgX19iZTMyICppcGFkZHIpO1xuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0Lmg6MzM0OmV4dGVybiBpbnQgaXBfc2V0X2dldF9pcGFkZHI2KHN0cnVjdCBubGF0dHIgKm5sYSwgdW5pb24gbmZfaW5ldF9hZGRyICppcGFkZHIpO1xuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0LmgtMzM1LWV4dGVybiBzaXplX3QgaXBfc2V0X2VsZW1fbGVuKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaD01MjI9c3RhdGljIGlubGluZSB2b2lkXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaDo1MjM6bmZfaW5ldF9hZGRyX21hc2tfaW5wbGFjZSh1bmlvbiBuZl9pbmV0X2FkZHIgKmExLFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0Lmg6NTI0Olx0XHRcdCAgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyICptYXNrKVxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0LmgtNTI1LXtcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9wZnhsZW4uaC05LS8qIFByZWZpeGxlbiBtYXBzLCBieSBKYW4gRW5nZWxoYXJkdCAgKi9cbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L3BmeGxlbi5oOjEwOmV4dGVybiBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgaXBfc2V0X25ldG1hc2tfbWFwW107XG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9wZnhsZW4uaDoxMTpleHRlcm4gY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyIGlwX3NldF9ob3N0bWFza19tYXBbXTtcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L3BmeGxlbi5oLTEyLVxuLS1cbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L3BmeGxlbi5oPTQ1PXN0YXRpYyBpbmxpbmUgdm9pZFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvcGZ4bGVuLmg6NDY6aXA2X25ldG1hc2sodW5pb24gbmZfaW5ldF9hZGRyICppcCwgdTggcHJlZml4KVxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvcGZ4bGVuLmgtNDcte1xuLS1cbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzLmg9MzI9aW50IGdldF9oMjI1X2FkZHIoc3RydWN0IG5mX2Nvbm4gKmN0LCB1bnNpZ25lZCBjaGFyICpkYXRhLFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjMuaDozMzpcdFx0ICBUcmFuc3BvcnRBZGRyZXNzICp0YWRkciwgdW5pb24gbmZfaW5ldF9hZGRyICphZGRyLFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjMuaC0zNC1cdFx0ICBfX2JlMTYgKnBvcnQpO1xuLS1cbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzLmg9MzY9c3RydWN0IG5mY3RfaDMyM19uYXRfaG9va3Mge1xuLS1cbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzLmgtMzktXHRcdFx0ICAgICBIMjQ1X1RyYW5zcG9ydEFkZHJlc3MgKnRhZGRyLFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjMuaDo0MDpcdFx0XHQgICAgIHVuaW9uIG5mX2luZXRfYWRkciAqYWRkciwgX19iZTE2IHBvcnQpO1xuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjMuaC00MS1cdGludCAoKnNldF9oMjI1X2FkZHIpKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxuLS1cbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzLmgtNDMtXHRcdFx0ICAgICBUcmFuc3BvcnRBZGRyZXNzICp0YWRkcixcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzLmg6NDQ6XHRcdFx0ICAgICB1bmlvbiBuZl9pbmV0X2FkZHIgKmFkZHIsIF9fYmUxNiBwb3J0KTtcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzLmgtNDUtXHRpbnQgKCpzZXRfc2lnX2FkZHIpKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5oPTExMD1zdHJ1Y3QgbmZfbmF0X3NpcF9ob29rcyB7XG4tLVxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5oLTEzNi1cdFx0XHRcdCBlbnVtIHNkcF9oZWFkZXJfdHlwZXMgdGVybSxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuaDoxMzc6XHRcdFx0XHQgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyICphZGRyKTtcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuaC0xMzgtXG4tLVxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5oLTE1My1cdFx0XHRcdCAgICB1bnNpZ25lZCBpbnQgc2Rwb2ZmLFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5oOjE1NDpcdFx0XHRcdCAgICBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgKmFkZHIpO1xuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5oLTE1NS1cbi0tXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmgtMTY0LVx0XHRcdFx0ICB1bnNpZ25lZCBpbnQgbWVkaWFsZW4sXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmg6MTY1Olx0XHRcdFx0ICB1bmlvbiBuZl9pbmV0X2FkZHIgKnJ0cF9hZGRyKTtcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuaC0xNjYtfTtcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmg9MTY5PWludCBjdF9zaXBfcGFyc2VfcmVxdWVzdChjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsIGNvbnN0IGNoYXIgKmRwdHIsXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmgtMTcwLVx0XHRcdCB1bnNpZ25lZCBpbnQgZGF0YWxlbiwgdW5zaWduZWQgaW50ICptYXRjaG9mZixcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuaDoxNzE6XHRcdFx0IHVuc2lnbmVkIGludCAqbWF0Y2hsZW4sIHVuaW9uIG5mX2luZXRfYWRkciAqYWRkcixcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuaC0xNzItXHRcdFx0IF9fYmUxNiAqcG9ydCk7XG4tLVxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5oPTE3Nz1pbnQgY3Rfc2lwX3BhcnNlX2hlYWRlcl91cmkoY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LCBjb25zdCBjaGFyICpkcHRyLFxuLS1cbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuaC0xODAtXHRcdFx0ICAgIHVuc2lnbmVkIGludCAqbWF0Y2hvZmYsIHVuc2lnbmVkIGludCAqbWF0Y2hsZW4sXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmg6MTgxOlx0XHRcdCAgICB1bmlvbiBuZl9pbmV0X2FkZHIgKmFkZHIsIF9fYmUxNiAqcG9ydCk7XG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmgtMTgyLWludCBjdF9zaXBfcGFyc2VfYWRkcmVzc19wYXJhbShjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsIGNvbnN0IGNoYXIgKmRwdHIsXG4tLVxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5oLTE4NC1cdFx0XHQgICAgICAgY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgaW50ICptYXRjaG9mZixcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuaDoxODU6XHRcdFx0ICAgICAgIHVuc2lnbmVkIGludCAqbWF0Y2hsZW4sIHVuaW9uIG5mX2luZXRfYWRkciAqYWRkcixcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuaC0xODYtXHRcdFx0ICAgICAgIGJvb2wgZGVsaW0pO1xuLS1cbmluY2x1ZGUvbmV0L2luZXRfc29jay5oPTQzMz1zdGF0aWMgaW5saW5lIGJvb2wgaW5ldF9jYW5fbm9ubG9jYWxfYmluZChzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxuaW5jbHVkZS9uZXQvaW5ldF9zb2NrLmgtNDQwLVxuaW5jbHVkZS9uZXQvaW5ldF9zb2NrLmg6NDQxOnN0YXRpYyBpbmxpbmUgYm9vbCBpbmV0X2FkZHJfdmFsaWRfb3Jfbm9ubG9jYWwoc3RydWN0IG5ldCAqbmV0LFxuaW5jbHVkZS9uZXQvaW5ldF9zb2NrLmgtNDQyLVx0XHRcdFx0XHQgICAgICAgc3RydWN0IGluZXRfc29jayAqaW5ldCxcbi0tXG5pbmNsdWRlL25ldC9pcF92cy5oLTI0LSNpbmNsdWRlIFx1MDAzY25ldC9jaGVja3N1bS5oXHUwMDNlXG5pbmNsdWRlL25ldC9pcF92cy5oOjI1OiNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGZpbHRlci5oXHUwMDNlXHRcdC8qIGZvciB1bmlvbiBuZl9pbmV0X2FkZHIgKi9cbmluY2x1ZGUvbmV0L2lwX3ZzLmgtMjYtI2luY2x1ZGUgXHUwMDNjbGludXgvaXAuaFx1MDAzZVxuLS1cbmluY2x1ZGUvbmV0L2lwX3ZzLmg9NzA9c3RydWN0IGlwX3ZzX2lwaGRyIHtcbi0tXG5pbmNsdWRlL25ldC9pcF92cy5oLTc3LVx0X19zMzIgZmxhZ3M7XG5pbmNsdWRlL25ldC9pcF92cy5oOjc4Olx0dW5pb24gbmZfaW5ldF9hZGRyIHNhZGRyO1xuaW5jbHVkZS9uZXQvaXBfdnMuaDo3OTpcdHVuaW9uIG5mX2luZXRfYWRkciBkYWRkcjtcbmluY2x1ZGUvbmV0L2lwX3ZzLmgtODAtfTtcbi0tXG5pbmNsdWRlL25ldC9pcF92cy5oPTE2OD1pcF92c19pcGhfaWNtcChjb25zdCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaClcbi0tXG5pbmNsdWRlL25ldC9pcF92cy5oLTE3Mi1cbmluY2x1ZGUvbmV0L2lwX3ZzLmg6MTczOnN0YXRpYyBpbmxpbmUgdm9pZCBpcF92c19hZGRyX2NvcHkoaW50IGFmLCB1bmlvbiBuZl9pbmV0X2FkZHIgKmRzdCxcbmluY2x1ZGUvbmV0L2lwX3ZzLmg6MTc0Olx0XHRcdFx0ICAgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyICpzcmMpXG5pbmNsdWRlL25ldC9pcF92cy5oLTE3NS17XG4tLVxuaW5jbHVkZS9uZXQvaXBfdnMuaC0xODMtXG5pbmNsdWRlL25ldC9pcF92cy5oOjE4NDpzdGF0aWMgaW5saW5lIHZvaWQgaXBfdnNfYWRkcl9zZXQoaW50IGFmLCB1bmlvbiBuZl9pbmV0X2FkZHIgKmRzdCxcbmluY2x1ZGUvbmV0L2lwX3ZzLmg6MTg1Olx0XHRcdFx0ICBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgKnNyYylcbmluY2x1ZGUvbmV0L2lwX3ZzLmgtMTg2LXtcbi0tXG5pbmNsdWRlL25ldC9pcF92cy5oLTE5OC1cbmluY2x1ZGUvbmV0L2lwX3ZzLmg6MTk5OnN0YXRpYyBpbmxpbmUgaW50IGlwX3ZzX2FkZHJfZXF1YWwoaW50IGFmLCBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgKmEsXG5pbmNsdWRlL25ldC9pcF92cy5oOjIwMDpcdFx0XHRcdCAgIGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciAqYilcbmluY2x1ZGUvbmV0L2lwX3ZzLmgtMjAxLXtcbi0tXG5pbmNsdWRlL25ldC9pcF92cy5oPTIxND1zdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKmlwX3ZzX2RiZ19hZGRyKGludCBhZiwgY2hhciAqYnVmLCBzaXplX3QgYnVmX2xlbixcbmluY2x1ZGUvbmV0L2lwX3ZzLmg6MjE1Olx0XHRcdFx0XHQgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyICphZGRyLFxuaW5jbHVkZS9uZXQvaXBfdnMuaC0yMTYtXHRcdFx0XHRcdCBpbnQgKmlkeClcbi0tXG5pbmNsdWRlL25ldC9pcF92cy5oPTcwND11MzIgaXBfdnNfcmh0X2hhc2hfbGluZm8oc3RydWN0IGlwX3ZzX3JodCAqdCwgaW50IGFmLFxuaW5jbHVkZS9uZXQvaXBfdnMuaDo3MDU6XHRcdFx0IGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciAqYWRkciwgdTMyIHYxLCB1MzIgdjIpO1xuaW5jbHVkZS9uZXQvaXBfdnMuaC03MDYtXG4tLVxuaW5jbHVkZS9uZXQvaXBfdnMuaD03ODc9c3RydWN0IGlwX3ZzX2Nvbm5fcGFyYW0ge1xuaW5jbHVkZS9uZXQvaXBfdnMuaC03ODgtXHRzdHJ1Y3QgbmV0bnNfaXB2c1x0XHQqaXB2cztcbmluY2x1ZGUvbmV0L2lwX3ZzLmg6Nzg5Olx0Y29uc3QgdW5pb24gbmZfaW5ldF9hZGRyXHQqY2FkZHI7XG5pbmNsdWRlL25ldC9pcF92cy5oOjc5MDpcdGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkclx0KnZhZGRyO1xuaW5jbHVkZS9uZXQvaXBfdnMuaC03OTEtXHRfX2JlMTZcdFx0XHRcdGNwb3J0O1xuLS1cbmluY2x1ZGUvbmV0L2lwX3ZzLmg9ODA5PXN0cnVjdCBpcF92c19jb25uIHtcbi0tXG5pbmNsdWRlL25ldC9pcF92cy5oLTgzNC1cbmluY2x1ZGUvbmV0L2lwX3ZzLmg6ODM1Olx0dW5pb24gbmZfaW5ldF9hZGRyICAgICAgY2FkZHI7ICAgICAgICAgIC8qIGNsaWVudCBhZGRyZXNzICovXG5pbmNsdWRlL25ldC9pcF92cy5oOjgzNjpcdHVuaW9uIG5mX2luZXRfYWRkciAgICAgIHZhZGRyOyAgICAgICAgICAvKiB2aXJ0dWFsIGFkZHJlc3MgKi9cbmluY2x1ZGUvbmV0L2lwX3ZzLmgtODM3LVx0LyogOTYvMTI4ICovXG5pbmNsdWRlL25ldC9pcF92cy5oLTgzOC1cbmluY2x1ZGUvbmV0L2lwX3ZzLmg6ODM5Olx0dW5pb24gbmZfaW5ldF9hZGRyICAgICAgZGFkZHI7ICAgICAgICAgIC8qIGRlc3RpbmF0aW9uIGFkZHJlc3MgKi9cbmluY2x1ZGUvbmV0L2lwX3ZzLmgtODQwLVx0X191MzJcdFx0XHRmd21hcms7XHRcdC8qIEZpcmUgd2FsbCBtYXJrIGZyb20gc2tiICovXG4tLVxuaW5jbHVkZS9uZXQvaXBfdnMuaD04ODY9c3RydWN0IGlwX3ZzX3NlcnZpY2VfdXNlcl9rZXJuIHtcbi0tXG5pbmNsdWRlL25ldC9pcF92cy5oLTg4OS1cdHUxNlx0XHRcdHByb3RvY29sO1xuaW5jbHVkZS9uZXQvaXBfdnMuaDo4OTA6XHR1bmlvbiBuZl9pbmV0X2FkZHJcdGFkZHI7XHRcdC8qIHZpcnR1YWwgaXAgYWRkcmVzcyAqL1xuaW5jbHVkZS9uZXQvaXBfdnMuaC04OTEtXHRfX2JlMTZcdFx0XHRwb3J0O1xuLS1cbmluY2x1ZGUvbmV0L2lwX3ZzLmg9OTAzPXN0cnVjdCBpcF92c19kZXN0X3VzZXJfa2VybiB7XG5pbmNsdWRlL25ldC9pcF92cy5oLTkwNC1cdC8qIGRlc3RpbmF0aW9uIHNlcnZlciBhZGRyZXNzICovXG5pbmNsdWRlL25ldC9pcF92cy5oOjkwNTpcdHVuaW9uIG5mX2luZXRfYWRkclx0YWRkcjtcbmluY2x1ZGUvbmV0L2lwX3ZzLmgtOTA2LVx0X19iZTE2XHRcdFx0cG9ydDtcbi0tXG5pbmNsdWRlL25ldC9pcF92cy5oPTkyOT1zdHJ1Y3QgaXBfdnNfc2VydmljZSB7XG4tLVxuaW5jbHVkZS9uZXQvaXBfdnMuaC05MzQtXG5pbmNsdWRlL25ldC9pcF92cy5oOjkzNTpcdHVuaW9uIG5mX2luZXRfYWRkclx0YWRkcjtcdCAgLyogSVAgYWRkcmVzcyBmb3IgdmlydHVhbCBzZXJ2aWNlICovXG5pbmNsdWRlL25ldC9pcF92cy5oLTkzNi1cdF9fdTMyICAgICAgICAgICAgICAgICAgIGZ3bWFyazsgICAvKiBmaXJld2FsbCBtYXJrIG9mIHRoZSBzZXJ2aWNlICovXG4tLVxuaW5jbHVkZS9uZXQvaXBfdnMuaD05NjE9c3RydWN0IGlwX3ZzX2Rlc3RfZHN0IHtcbi0tXG5pbmNsdWRlL25ldC9pcF92cy5oLTk2My1cdHUzMlx0XHRcdGRzdF9jb29raWU7XG5pbmNsdWRlL25ldC9pcF92cy5oOjk2NDpcdHVuaW9uIG5mX2luZXRfYWRkclx0ZHN0X3NhZGRyO1xuaW5jbHVkZS9uZXQvaXBfdnMuaC05NjUtXHRzdHJ1Y3QgcmN1X2hlYWRcdFx0cmN1X2hlYWQ7XG4tLVxuaW5jbHVkZS9uZXQvaXBfdnMuaD05NzE9c3RydWN0IGlwX3ZzX2Rlc3Qge1xuLS1cbmluY2x1ZGUvbmV0L2lwX3ZzLmgtOTc2LVx0X19iZTE2XHRcdFx0cG9ydDtcdFx0LyogcG9ydCBudW1iZXIgb2YgdGhlIHNlcnZlciAqL1xuaW5jbHVkZS9uZXQvaXBfdnMuaDo5Nzc6XHR1bmlvbiBuZl9pbmV0X2FkZHJcdGFkZHI7XHRcdC8qIElQIGFkZHJlc3Mgb2YgdGhlIHNlcnZlciAqL1xuaW5jbHVkZS9uZXQvaXBfdnMuaC05NzgtXHR2b2xhdGlsZSB1bnNpZ25lZCBpbnRcdGZsYWdzO1x0XHQvKiBkZXN0IHN0YXR1cyBmbGFncyAqL1xuLS1cbmluY2x1ZGUvbmV0L2lwX3ZzLmgtMTAwNC1cdF9fYmUxNlx0XHRcdHZwb3J0O1x0XHQvKiB2aXJ0dWFsIHBvcnQgbnVtYmVyICovXG5pbmNsdWRlL25ldC9pcF92cy5oOjEwMDU6XHR1bmlvbiBuZl9pbmV0X2FkZHJcdHZhZGRyO1x0XHQvKiB2aXJ0dWFsIElQIGFkZHJlc3MgKi9cbmluY2x1ZGUvbmV0L2lwX3ZzLmgtMTAwNi1cdF9fdTMyXHRcdFx0dmZ3bWFyaztcdC8qIGZpcmV3YWxsIG1hcmsgb2Ygc2VydmljZSAqL1xuLS1cbmluY2x1ZGUvbmV0L2lwX3ZzLmg9MTEzOD1zdHJ1Y3QgaXB2c19zeW5jX2RhZW1vbl9jZmcge1xuaW5jbHVkZS9uZXQvaXBfdnMuaDoxMTM5Olx0dW5pb24gbmZfaW5ldF9hZGRyXHRtY2FzdF9ncm91cDtcbmluY2x1ZGUvbmV0L2lwX3ZzLmgtMTE0MC1cdGludFx0XHRcdHN5bmNpZDtcbi0tXG5pbmNsdWRlL25ldC9pcF92cy5oPTE2MzE9c3RhdGljIGlubGluZSB2b2lkIGlwX3ZzX2Nvbm5fZmlsbF9wYXJhbShzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgaW50IGFmLCBpbnQgcHJvdG9jb2wsXG5pbmNsdWRlL25ldC9pcF92cy5oOjE2MzI6XHRcdFx0XHRcdCBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgKmNhZGRyLFxuaW5jbHVkZS9uZXQvaXBfdnMuaC0xNjMzLVx0XHRcdFx0XHQgX19iZTE2IGNwb3J0LFxuaW5jbHVkZS9uZXQvaXBfdnMuaDoxNjM0Olx0XHRcdFx0XHQgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyICp2YWRkcixcbmluY2x1ZGUvbmV0L2lwX3ZzLmgtMTYzNS1cdFx0XHRcdFx0IF9fYmUxNiB2cG9ydCxcbi0tXG5pbmNsdWRlL25ldC9pcF92cy5oPTE2OTc9c3RydWN0IGlwX3ZzX2Nvbm4gKmlwX3ZzX2Nvbm5fbmV3KGNvbnN0IHN0cnVjdCBpcF92c19jb25uX3BhcmFtICpwLCBpbnQgZGVzdF9hZixcbmluY2x1ZGUvbmV0L2lwX3ZzLmg6MTY5ODpcdFx0XHRcdCAgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyICpkYWRkcixcbmluY2x1ZGUvbmV0L2lwX3ZzLmgtMTY5OS1cdFx0XHRcdCAgX19iZTE2IGRwb3J0LCB1bnNpZ25lZCBpbnQgZmxhZ3MsXG4tLVxuaW5jbHVkZS9uZXQvaXBfdnMuaD0xODY5PWlwX3ZzX3NlcnZpY2VfZmluZChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgaW50IGFmLCBfX3UzMiBmd21hcmssIF9fdTE2IHByb3RvY29sLFxuaW5jbHVkZS9uZXQvaXBfdnMuaDoxODcwOlx0XHQgIGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciAqdmFkZHIsIF9fYmUxNiB2cG9ydCk7XG5pbmNsdWRlL25ldC9pcF92cy5oLTE4NzEtXG5pbmNsdWRlL25ldC9pcF92cy5oPTE4NzI9Ym9vbCBpcF92c19oYXNfcmVhbF9zZXJ2aWNlKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBpbnQgYWYsIF9fdTE2IHByb3RvY29sLFxuaW5jbHVkZS9uZXQvaXBfdnMuaDoxODczOlx0XHRcdCAgICBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgKmRhZGRyLCBfX2JlMTYgZHBvcnQpO1xuaW5jbHVkZS9uZXQvaXBfdnMuaC0xODc0LVxuLS1cbmluY2x1ZGUvbmV0L2lwX3ZzLmg9MTg3Nj1pcF92c19maW5kX3JlYWxfc2VydmljZShzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgaW50IGFmLCBfX3UxNiBwcm90b2NvbCxcbmluY2x1ZGUvbmV0L2lwX3ZzLmg6MTg3NzpcdFx0XHRjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgKmRhZGRyLCBfX2JlMTYgZHBvcnQpO1xuaW5jbHVkZS9uZXQvaXBfdnMuaC0xODc4LXN0cnVjdCBpcF92c19kZXN0ICppcF92c19maW5kX3R1bm5lbChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgaW50IGFmLFxuaW5jbHVkZS9uZXQvaXBfdnMuaDoxODc5Olx0XHRcdFx0ICAgICBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgKmRhZGRyLFxuaW5jbHVkZS9uZXQvaXBfdnMuaC0xODgwLVx0XHRcdFx0ICAgICBfX2JlMTYgdHVuX3BvcnQpO1xuLS1cbmluY2x1ZGUvbmV0L2lwX3ZzLmg9MTg4OT1pcF92c19maW5kX2Rlc3Qoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGludCBzdmNfYWYsIGludCBkZXN0X2FmLFxuaW5jbHVkZS9uZXQvaXBfdnMuaDoxODkwOlx0XHRjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgKmRhZGRyLCBfX2JlMTYgZHBvcnQsXG5pbmNsdWRlL25ldC9pcF92cy5oOjE4OTE6XHRcdGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciAqdmFkZHIsIF9fYmUxNiB2cG9ydCxcbmluY2x1ZGUvbmV0L2lwX3ZzLmgtMTg5Mi1cdFx0X191MTYgcHJvdG9jb2wsIF9fdTMyIGZ3bWFyaywgX191MzIgZmxhZ3MpO1xuLS1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0Lmg9MTg9c3RydWN0IG5mX2Nvbm50cmFja19leHBlY3Qge1xuLS1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmgtNjQtI2lmIElTX0VOQUJMRUQoQ09ORklHX05GX05BVClcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0Lmg6NjU6XHR1bmlvbiBuZl9pbmV0X2FkZHIgc2F2ZWRfYWRkcjtcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmgtNjYtXHQvKiBUaGlzIGlzIHRoZSBvcmlnaW5hbCBwZXItcHJvdG8gcGFydCwgdXNlZCB0byBtYXAgdGhlXG4tLVxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuaD0xNTQ9dm9pZCBuZl9jdF9leHBlY3RfaW5pdChzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqLCB1bnNpZ25lZCBpbnQsIHVfaW50OF90LFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuaDoxNTU6XHRcdCAgICAgICBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgKixcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0Lmg6MTU2Olx0XHQgICAgICAgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyICosXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5oLTE1Ny1cdFx0ICAgICAgIHVfaW50OF90LCBjb25zdCBfX2JlMTYgKiwgY29uc3QgX19iZTE2ICopO1xuLS1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDRwcm90by5oPTc5PWludCBuZl9jb25udHJhY2tfaW5ldF9lcnJvcihzdHJ1Y3QgbmZfY29ubiAqdG1wbCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2w0cHJvdG8uaC04Mi1cdFx0XHQgICAgdTggbDRwcm90byxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDRwcm90by5oOjgzOlx0XHRcdCAgICB1bmlvbiBuZl9pbmV0X2FkZHIgKm91dGVyX2RhZGRyKTtcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDRwcm90by5oLTg0LVxuLS1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGUuaC0yNS1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGUuaDoyNjojZGVmaW5lIE5GX0NUX1RVUExFX0wzU0laRVx0QVJSQVlfU0laRSgoKHVuaW9uIG5mX2luZXRfYWRkciAqKU5VTEwpLVx1MDAzZWFsbClcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGUuaC0yNy1cbi0tXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3R1cGxlLmg9Mjk9c3RydWN0IG5mX2Nvbm50cmFja19tYW4ge1xuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190dXBsZS5oOjMwOlx0dW5pb24gbmZfaW5ldF9hZGRyIHUzO1xuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190dXBsZS5oLTMxLVx0dW5pb24gbmZfY29ubnRyYWNrX21hbl9wcm90byB1O1xuLS1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGUuaD0zNz1zdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlIHtcbi0tXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3R1cGxlLmgtNDEtXHRzdHJ1Y3Qge1xuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190dXBsZS5oOjQyOlx0XHR1bmlvbiBuZl9pbmV0X2FkZHIgdTM7XG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3R1cGxlLmgtNDMtXHRcdHVuaW9uIHtcbi0tXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3R1cGxlLmg9Nzg9c3RydWN0IG5mX2Nvbm50cmFja190dXBsZV9tYXNrIHtcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGUuaC03OS1cdHN0cnVjdCB7XG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3R1cGxlLmg6ODA6XHRcdHVuaW9uIG5mX2luZXRfYWRkciB1MztcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGUuaC04MS1cdFx0dW5pb24gbmZfY29ubnRyYWNrX21hbl9wcm90byB1O1xuLS1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGUuaD0xMjc9c3RhdGljIGlubGluZSBib29sIF9fbmZfY3RfdHVwbGVfc3JjX2VxdWFsKGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnQxLFxuLS1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGUuaC0xMjkte1xuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190dXBsZS5oOjEzMDpcdHJldHVybiAobmZfaW5ldF9hZGRyX2NtcChcdTAwMjZ0MS1cdTAwM2VzcmMudTMsIFx1MDAyNnQyLVx1MDAzZXNyYy51MykgXHUwMDI2XHUwMDI2XG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3R1cGxlLmgtMTMxLVx0XHR0MS1cdTAwM2VzcmMudS5hbGwgPT0gdDItXHUwMDNlc3JjLnUuYWxsIFx1MDAyNlx1MDAyNlxuLS1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGUuaD0xMzU9c3RhdGljIGlubGluZSBib29sIF9fbmZfY3RfdHVwbGVfZHN0X2VxdWFsKGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnQxLFxuLS1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGUuaC0xMzcte1xuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190dXBsZS5oOjEzODpcdHJldHVybiAobmZfaW5ldF9hZGRyX2NtcChcdTAwMjZ0MS1cdTAwM2Vkc3QudTMsIFx1MDAyNnQyLVx1MDAzZWRzdC51MykgXHUwMDI2XHUwMDI2XG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3R1cGxlLmgtMTM5LVx0XHR0MS1cdTAwM2Vkc3QudS5hbGwgPT0gdDItXHUwMDNlZHN0LnUuYWxsIFx1MDAyNlx1MDAyNlxuLS1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGUuaD0xNTE9bmZfY3RfdHVwbGVfbWFza19lcXVhbChjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlX21hc2sgKm0xLFxuLS1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGUuaC0xNTMte1xuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190dXBsZS5oOjE1NDpcdHJldHVybiAobmZfaW5ldF9hZGRyX2NtcChcdTAwMjZtMS1cdTAwM2VzcmMudTMsIFx1MDAyNm0yLVx1MDAzZXNyYy51MykgXHUwMDI2XHUwMDI2XG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3R1cGxlLmgtMTU1LVx0XHRtMS1cdTAwM2VzcmMudS5hbGwgPT0gbTItXHUwMDNlc3JjLnUuYWxsKTtcbi0tXG5pbmNsdWRlL25ldC9uZXRucy9pcHY0Lmg9NTU9c3RydWN0IG5ldG5zX2lwdjQge1xuLS1cbmluY2x1ZGUvbmV0L25ldG5zL2lwdjQuaC0yOTktXHRzaXBoYXNoX2tleV90XHRpcF9pZF9rZXk7XG5pbmNsdWRlL25ldC9uZXRucy9pcHY0Lmg6MzAwOlx0c3RydWN0IGhsaXN0X2hlYWRcdCppbmV0X2FkZHJfbHN0O1xuaW5jbHVkZS9uZXQvbmV0bnMvaXB2NC5oLTMwMS1cdHN0cnVjdCBkZWxheWVkX3dvcmtcdGFkZHJfY2hrX3dvcms7XG4tLVxuaW5jbHVkZS9uZXQvcm91dGUuaD0yNTE9dm9pZCBpcF9ydF9zZW5kX3JlZGlyZWN0KHN0cnVjdCBza19idWZmICpza2IpO1xuaW5jbHVkZS9uZXQvcm91dGUuaC0yNTItXG5pbmNsdWRlL25ldC9yb3V0ZS5oOjI1Mzp1bnNpZ25lZCBpbnQgaW5ldF9hZGRyX3R5cGUoc3RydWN0IG5ldCAqbmV0LCBfX2JlMzIgYWRkcik7XG5pbmNsdWRlL25ldC9yb3V0ZS5oOjI1NDp1bnNpZ25lZCBpbnQgaW5ldF9hZGRyX3R5cGVfdGFibGUoc3RydWN0IG5ldCAqbmV0LCBfX2JlMzIgYWRkciwgdTMyIHRiX2lkKTtcbmluY2x1ZGUvbmV0L3JvdXRlLmgtMjU1LXVuc2lnbmVkIGludCBpbmV0X2Rldl9hZGRyX3R5cGUoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuaW5jbHVkZS9uZXQvcm91dGUuaC0yNTYtXHRcdFx0XHRfX2JlMzIgYWRkcik7XG5pbmNsdWRlL25ldC9yb3V0ZS5oOjI1Nzp1bnNpZ25lZCBpbnQgaW5ldF9hZGRyX3R5cGVfZGV2X3RhYmxlKHN0cnVjdCBuZXQgKm5ldCxcbmluY2x1ZGUvbmV0L3JvdXRlLmgtMjU4LVx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyLmg9NTg9ZW51bSB7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci5oLTcxLVxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci5oOjcyOnVuaW9uIG5mX2luZXRfYWRkciB7XG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyLmgtNzMtXHRfX3UzMlx0XHRhbGxbNF07XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci9uZl9uYXQuaD0zOD1zdHJ1Y3QgbmZfbmF0X3JhbmdlIHtcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZfbmF0LmgtMzktXHR1bnNpZ25lZCBpbnRcdFx0XHRmbGFncztcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZfbmF0Lmg6NDA6XHR1bmlvbiBuZl9pbmV0X2FkZHJcdFx0bWluX2FkZHI7XG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mX25hdC5oOjQxOlx0dW5pb24gbmZfaW5ldF9hZGRyXHRcdG1heF9hZGRyO1xuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci9uZl9uYXQuaC00Mi1cdHVuaW9uIG5mX2Nvbm50cmFja19tYW5fcHJvdG9cdG1pbl9wcm90bztcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mX25hdC5oPTQ2PXN0cnVjdCBuZl9uYXRfcmFuZ2UyIHtcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZfbmF0LmgtNDctXHR1bnNpZ25lZCBpbnRcdFx0XHRmbGFncztcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZfbmF0Lmg6NDg6XHR1bmlvbiBuZl9pbmV0X2FkZHJcdFx0bWluX2FkZHI7XG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mX25hdC5oOjQ5Olx0dW5pb24gbmZfaW5ldF9hZGRyXHRcdG1heF9hZGRyO1xuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci9uZl9uYXQuaC01MC1cdHVuaW9uIG5mX2Nvbm50cmFja19tYW5fcHJvdG9cdG1pbl9wcm90bztcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X0hNQVJLLmg9NDA9c3RydWN0IHh0X2htYXJrX2luZm8ge1xuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci94dF9ITUFSSy5oOjQxOlx0dW5pb24gbmZfaW5ldF9hZGRyXHRzcmNfbWFzaztcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIveHRfSE1BUksuaDo0MjpcdHVuaW9uIG5mX2luZXRfYWRkclx0ZHN0X21hc2s7XG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X0hNQVJLLmgtNDMtXHR1bmlvbiBobWFya19wb3J0c1x0cG9ydF9tYXNrO1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIveHRfVEVFLmg9Nz1zdHJ1Y3QgeHRfdGVlX3RnaW5mbyB7XG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X1RFRS5oOjg6XHR1bmlvbiBuZl9pbmV0X2FkZHIgZ3c7XG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X1RFRS5oLTktXHRjaGFyIG9pZlsxNl07XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci94dF9UUFJPWFkuaD0xOD1zdHJ1Y3QgeHRfdHByb3h5X3RhcmdldF9pbmZvX3YxIHtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X1RQUk9YWS5oLTIwLVx0X191MzIgbWFya192YWx1ZTtcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIveHRfVFBST1hZLmg6MjE6XHR1bmlvbiBuZl9pbmV0X2FkZHIgbGFkZHI7XG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X1RQUk9YWS5oLTIyLVx0X19iZTE2IGxwb3J0O1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIveHRfY29ubmxpbWl0Lmg9MTU9c3RydWN0IHh0X2Nvbm5saW1pdF9pbmZvIHtcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIveHRfY29ubmxpbWl0LmgtMTYtXHR1bmlvbiB7XG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X2Nvbm5saW1pdC5oOjE3Olx0XHR1bmlvbiBuZl9pbmV0X2FkZHIgbWFzaztcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIveHRfY29ubmxpbWl0LmgtMTgtI2lmbmRlZiBfX0tFUk5FTF9fXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci94dF9jb25udHJhY2suaD0zOD1zdHJ1Y3QgeHRfY29ubnRyYWNrX210aW5mbzEge1xuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci94dF9jb25udHJhY2suaDozOTpcdHVuaW9uIG5mX2luZXRfYWRkciBvcmlnc3JjX2FkZHIsIG9yaWdzcmNfbWFzaztcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIveHRfY29ubnRyYWNrLmg6NDA6XHR1bmlvbiBuZl9pbmV0X2FkZHIgb3JpZ2RzdF9hZGRyLCBvcmlnZHN0X21hc2s7XG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X2Nvbm50cmFjay5oOjQxOlx0dW5pb24gbmZfaW5ldF9hZGRyIHJlcGxzcmNfYWRkciwgcmVwbHNyY19tYXNrO1xuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci94dF9jb25udHJhY2suaDo0MjpcdHVuaW9uIG5mX2luZXRfYWRkciByZXBsZHN0X2FkZHIsIHJlcGxkc3RfbWFzaztcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIveHRfY29ubnRyYWNrLmgtNDMtXHRfX3UzMiBleHBpcmVzX21pbiwgZXhwaXJlc19tYXg7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci94dF9jb25udHJhY2suaD01MT1zdHJ1Y3QgeHRfY29ubnRyYWNrX210aW5mbzIge1xuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci94dF9jb25udHJhY2suaDo1MjpcdHVuaW9uIG5mX2luZXRfYWRkciBvcmlnc3JjX2FkZHIsIG9yaWdzcmNfbWFzaztcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIveHRfY29ubnRyYWNrLmg6NTM6XHR1bmlvbiBuZl9pbmV0X2FkZHIgb3JpZ2RzdF9hZGRyLCBvcmlnZHN0X21hc2s7XG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X2Nvbm50cmFjay5oOjU0Olx0dW5pb24gbmZfaW5ldF9hZGRyIHJlcGxzcmNfYWRkciwgcmVwbHNyY19tYXNrO1xuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci94dF9jb25udHJhY2suaDo1NTpcdHVuaW9uIG5mX2luZXRfYWRkciByZXBsZHN0X2FkZHIsIHJlcGxkc3RfbWFzaztcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIveHRfY29ubnRyYWNrLmgtNTYtXHRfX3UzMiBleHBpcmVzX21pbiwgZXhwaXJlc19tYXg7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci94dF9jb25udHJhY2suaD02ND1zdHJ1Y3QgeHRfY29ubnRyYWNrX210aW5mbzMge1xuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci94dF9jb25udHJhY2suaDo2NTpcdHVuaW9uIG5mX2luZXRfYWRkciBvcmlnc3JjX2FkZHIsIG9yaWdzcmNfbWFzaztcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIveHRfY29ubnRyYWNrLmg6NjY6XHR1bmlvbiBuZl9pbmV0X2FkZHIgb3JpZ2RzdF9hZGRyLCBvcmlnZHN0X21hc2s7XG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X2Nvbm50cmFjay5oOjY3Olx0dW5pb24gbmZfaW5ldF9hZGRyIHJlcGxzcmNfYWRkciwgcmVwbHNyY19tYXNrO1xuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci94dF9jb25udHJhY2suaDo2ODpcdHVuaW9uIG5mX2luZXRfYWRkciByZXBsZHN0X2FkZHIsIHJlcGxkc3RfbWFzaztcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIveHRfY29ubnRyYWNrLmgtNjktXHRfX3UzMiBleHBpcmVzX21pbiwgZXhwaXJlc19tYXg7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci94dF9pcHJhbmdlLmg9MTU9c3RydWN0IHh0X2lwcmFuZ2VfbXRpbmZvIHtcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIveHRfaXByYW5nZS5oOjE2Olx0dW5pb24gbmZfaW5ldF9hZGRyIHNyY19taW4sIHNyY19tYXg7XG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X2lwcmFuZ2UuaDoxNzpcdHVuaW9uIG5mX2luZXRfYWRkciBkc3RfbWluLCBkc3RfbWF4O1xuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci94dF9pcHJhbmdlLmgtMTgtXHRfX3U4IGZsYWdzO1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIveHRfaXB2cy5oPTIwPXN0cnVjdCB4dF9pcHZzX210aW5mbyB7XG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X2lwdnMuaDoyMTpcdHVuaW9uIG5mX2luZXRfYWRkclx0dmFkZHIsIHZtYXNrO1xuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci94dF9pcHZzLmgtMjItXHRfX2JlMTZcdFx0XHR2cG9ydDtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X3BvbGljeS5oPTQwPXN0cnVjdCB4dF9wb2xpY3lfZWxlbSB7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci94dF9wb2xpY3kuaC00My1cdFx0c3RydWN0IHtcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIveHRfcG9saWN5Lmg6NDQ6XHRcdFx0dW5pb24gbmZfaW5ldF9hZGRyIHNhZGRyO1xuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci94dF9wb2xpY3kuaDo0NTpcdFx0XHR1bmlvbiBuZl9pbmV0X2FkZHIgc21hc2s7XG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X3BvbGljeS5oOjQ2Olx0XHRcdHVuaW9uIG5mX2luZXRfYWRkciBkYWRkcjtcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIveHRfcG9saWN5Lmg6NDc6XHRcdFx0dW5pb24gbmZfaW5ldF9hZGRyIGRtYXNrO1xuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci94dF9wb2xpY3kuaC00OC1cdFx0fTtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X3JlY2VudC5oPTM3PXN0cnVjdCB4dF9yZWNlbnRfbXRpbmZvX3YxIHtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X3JlY2VudC5oLTQzLVx0X191OCBzaWRlO1xuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci94dF9yZWNlbnQuaDo0NDpcdHVuaW9uIG5mX2luZXRfYWRkciBtYXNrO1xuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci94dF9yZWNlbnQuaC00NS19O1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X05QVC5oPTg9c3RydWN0IGlwNnRfbnB0X3RnaW5mbyB7XG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9OUFQuaDo5Olx0dW5pb24gbmZfaW5ldF9hZGRyXHRzcmNfcGZ4O1xuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfTlBULmg6MTA6XHR1bmlvbiBuZl9pbmV0X2FkZHJcdGRzdF9wZng7XG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9OUFQuaC0xMS1cdF9fdThcdFx0XHRzcmNfcGZ4X2xlbjtcbi0tXG5uZXQvY29yZS91dGlscy5jPTQwMT1FWFBPUlRfU1lNQk9MKGluZXRfcHRvbl93aXRoX3Njb3BlKTtcbm5ldC9jb3JlL3V0aWxzLmMtNDAyLVxubmV0L2NvcmUvdXRpbHMuYzo0MDM6Ym9vbCBpbmV0X2FkZHJfaXNfYW55KHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICphZGRyKVxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMTc5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzUyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBgbmV0Y29uc29sZWAgSVAgQWRkcmVzcyBIYW5kbGluZyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHJlZmFjdG9yaW5nIGhvdyBgbmV0Y29uc29sZWAgaGFuZGxlcyBJUCBhZGRyZXNzZXMuIFByZXZpb3VzbHksIHdlIHdlcmUgdXNpbmcgYSBgdW5pb24gaW5ldF9hZGRyYCBhbmQgYSBzZXBhcmF0ZSBib29sZWFuIGBpcHY2YC4gTm93LCB3ZSYjMzk7cmUgdXNpbmcgYSBgc3RydWN0IGluZXRfYWRkcmAgd2hpY2ggaW5jbHVkZXMgYSBmYW1pbHkgZmllbGQgYW5kIHRoZSB1bmlvbi4gSXQgbG9va3MgbGlrZSB0aGUgYHVuaW9uIGluZXRfYWRkcmAgZGVmaW5pdGlvbiBoYXMgYmVlbiBtb3ZlZCBmcm9tIHRoZSBoZWFkZXIgdG8gdGhlIHNvdXJjZSBmaWxlLCB3aGljaCBtYWtlcyBzZW5zZSB0byBlbmNhcHN1bGF0ZSB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscy4KCkkgc2VlIHRoZXkmIzM5O3ZlIHVwZGF0ZWQgdGhlIGNvbmZpZ2ZzIHNob3cgZnVuY3Rpb25zLCBgbG9jYWxfaXBfc2hvd2AgYW5kIGByZW1vdGVfaXBfc2hvd2AuIFRoZXkmIzM5O3JlIG5vdyBjaGVja2luZyB0aGUgYGZhbWlseWAgZmllbGQgb2YgdGhlIGBpbmV0X2FkZHJgIHRvIGRldGVybWluZSB0aGUgSVAgdmVyc2lvbiBhbmQgdXNpbmcgYCVwSTRgIG9yIGAlcEk2Y2AgaW4gYHN5c2ZzX2VtaXRgLiBUaGlzIHNlZW1zIHNhZmU7IG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWtzIGFyZSBwcmVzZW50IHNpbmNlIHRoZSBvdXRwdXQgaXMgZm9ybWF0dGVkIGFzIGEgc3RyaW5nLgoKTm93LCBsZXQmIzM5O3MgY29uc2lkZXIgYG5ldHBvbGxfc2VuZF91ZHBgLiBUaGlzIGlzIHdoZXJlIHRoZSBJUCBhZGRyZXNzZXMgYXJlIHVzZWQgdG8gY29uc3RydWN0IHRoZSBVRFAgcGFja2V0cy4gVGhlcmUgYXJlIGEgZmV3IGNoZWNrcyBsaWtlIGBudC0mZ3Q7cmVtb3RlX2lwLmZhbWlseSA9PSBBRl9JTkVUNmAgdG8gc2VsZWN0IHRoZSByaWdodCBjaGVja3N1bSBvciBwcm90b2NvbC4gSWYgYG50LSZndDtyZW1vdGVfaXAuZmFtaWx5YCBpcyBgQUZfVU5TUEVDYCwgaXQgZmFsbHMgYmFjayB0byBJUHY0LiBCdXQgYG5ldGNvbnNfbmV0cG9sbF9zZXR1cGAgY2hlY2tzIHRvIG1ha2Ugc3VyZSBgcmVtb3RlX2lwYCBoYXMgYmVlbiBjb25maWd1cmVkIHdpdGggYW4gYWRkcmVzcyBhbmQgZmFtaWx5LCBhbmQgdGhlIHJlbW90ZSBmYW1pbHkgbXVzdCBtYXRjaCB0aGUgbG9jYWwgSVAgYWRkcmVzcyBmYW1pbHkuIElmIGByZW1vdGVfaXAuZmFtaWx5YCBpcyBgQUZfVU5TUEVDYCB3aGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLCB0aGUgc2V0dXAgZmFpbHMsIHNvIGBuZXRwb2xsX3NlbmRfdWRwYCB3b24mIzM5O3QgYmUgY2FsbGVkLgoKVGhlIHBhcnNpbmcgZnVuY3Rpb24sIGBuZXRwb2xsX3BhcnNlX2lwX2FkZHJgLCBoYXMgYWxzbyBiZWVuIHVwZGF0ZWQgdG8gdXNlIHRoZSBuZXcgYGluZXRfYWRkcmAgc3RydWN0LiBJdCBwb3B1bGF0ZXMgYGFkZHItJmd0O2lwYCBvciBgYWRkci0mZ3Q7aW42YCBhbmQgc2V0cyBgYWRkci0mZ3Q7ZmFtaWx5YC4gSWYgaXQgZmFpbHMsIGl0IHJldHVybnMgLTEsIGFuZCBpdCYjMzk7cyB1cCB0byB0aGUgY2FsbGVyIHRvIGhhbmRsZSB0aGUgZXJyb3IuIEkgY2hlY2tlZCB0aGF0IGV2ZW4gaWYgcGFyc2luZyBmYWlscywgdGhlcmUmIzM5O3Mgbm8gd2F5IHRvIGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnkgc2luY2UgdGhlIGBpbmV0X2FkZHJgIGlzIHplcm8tYWxsb2NhdGVkLCBhbmQgdGhlIGZhbWlseSBpcyBwcm9wZXJseSBpbml0aWFsaXplZC4KCkNoZWNraW5nIGBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lYCBjb25maXJtcyB0aGF0IHRoZSBzdHJ1Y3R1cmUgaXMgYWx3YXlzIGZ1bGx5IGluaXRpYWxpemVkIHdoZW4gdXNlZC4gVGhlIGJvb3QgY29tbWFuZCBsaW5lIHBhcnNlciB1c2VzIGBremFsbG9jX29iamAsIHNvIGl0JiMzOTtzIGFsbCBnb29kLgoKVGhlIHBhdGNoIHNlZW1zIHdlbGwtcmVhc29uZWQgYW5kIHNlY3VyZS4gVGhlcmUmIzM5O3Mgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyB1c2VkIG9yIGxlYWtlZCBoZXJlLiBUaGUgc3RydWN0dXJlcyBhcmUgemVyby1hbGxvY2F0ZWQsIHRoZSBkYXRhIGlzIG5vdCBjb3BpZWQgdG8gdXNlcnNwYWNlIGluIGJpbmFyeSBmb3JtLCBhbmQgdGhlIElQIGFkZHJlc3MgZGF0YSBzZW50IG92ZXIgdGhlIG5ldHdvcmsgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgYnkgdGhlIHRpbWUgaXQgaXMgdXNlZCB0byBjb25zdHJ1Y3QgcGFja2V0cy4gVGhlIGZhbWlseSBmaWVsZCBpcyBhbHNvIHZlcmlmaWVkIHdpdGggY2hlY2tzIGJlZm9yZSB1c2luZyBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHVzaF9pcHY0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yMTAyPXN0YXRpYyB2b2lkIHB1c2hfZXRoKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxMTYtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjExNzpzdGF0aWMgdm9pZCBwdXNoX2lwdjQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTE4LVx0XHQgICAgICBpbnQgbGVuKVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yMTY5PXN0YXRpYyBpbnQgbmV0cG9sbF9zZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxOTgtXHRlbHNlXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjE5OTpcdFx0cHVzaF9pcHY0KG50LCBza2IsIGxlbik7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIwMC1cdHB1c2hfZXRoKG50LCBza2IpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTU2MQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBgcHVzaF9pcHY0YCBJbXBsZW1lbnRhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYHB1c2hfaXB2NGAgaW1wbGVtZW50YXRpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyBkb2luZyB3aGF0IEkgZXhwZWN0IGl0IHRvIGRvLCBhbmQgdGhhdCBpdCYjMzk7cyBoYW5kbGluZyB0aGUgZWRnZSBjYXNlcyBjb3JyZWN0bHkuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IHJldmlldyB0aGUgY29yZSBsb2dpYyDigJMgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIHVzZWQsIHRoZSBhbGdvcml0aG1zIGVtcGxveWVkIGZvciBwdXNoaW5nIHRoZSBJUHY0IHBhY2tldHMsIHBvdGVudGlhbCBtZW1vcnkgY29uc2lkZXJhdGlvbnMsIGFuZCBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgYm90dGxlbmVja3MuIEkgd2FudCB0byBsb29rIGZvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBlc3BlY2lhbGx5IGlmIHRoaXMgZnVuY3Rpb24gaXMgbXVsdGl0aHJlYWRlZC4gVGhlIGNvZGUgc2hvdWxkIGJlIGFkaGVyaW5nIHRvIHJlbGV2YW50IFJGQ3MuIEFsc28sIEkmIzM5O2xsIHBheSBhdHRlbnRpb24gdG8gYW55IGVycm9yIGhhbmRsaW5nOyBpcyBpdCByb2J1c3QsIGFuZCBhcmUgZXJyb3JzIGJlaW5nIHByb3BhZ2F0ZWQgYW5kIGxvZ2dlZCBhcHByb3ByaWF0ZWx5PyBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCBieSBza2V0Y2hpbmcgb3V0IGEgZmV3IHBvdGVudGlhbCB0ZXN0IHNjZW5hcmlvcywgaW5jbHVkaW5nIHZhbGlkIHBhY2tldHMsIG1hbGZvcm1lZCBwYWNrZXRzLCBhbmQgdGhvc2Ugd2l0aCB2YXJpb3VzIFRUTCB2YWx1ZXMuIE92ZXJhbGwsIEkgd2FudCB0byBjb25maXJtIHRoZSBlbGVnYW5jZSBvZiB0aGUgbG9naWMgYW5kIGl0cyBhZGhlcmVuY2UgdG8gYmVzdCBwcmFjdGljZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHVzaF9pcHY0LipcXHsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTgzMwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGlzIGZpZWxkIGFuZCByZWZsZWN0aW5nIG9uIGl0IGludGVybmFsbHk6CgoqKkJyZWFraW5nIERvd24gdGhlIGBwdXNoX2lwdjRgIFJvdXRpbmUqKgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gJiMzNDtSZWFkIGBwdXNoX2lwdjRgIHVzaW5nIHJlYWQtZmlsZS4mIzM0OyBFc3NlbnRpYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBkaWdnaW5nIGludG8gdGhlIGNvZGUuIFRoaXMgbGlrZWx5IG1lYW5zIEkmIzM5O20gdHJvdWJsZXNob290aW5nLCBvciBtYXliZSByZXZpZXdpbmcgc29tZSBleGlzdGluZyBpbmZyYXN0cnVjdHVyZS4gVGhlIGZ1bmN0aW9uIG5hbWUsIGBwdXNoX2lwdjRgLCBpbW1lZGlhdGVseSB0ZWxscyBtZSBpdCYjMzk7cyByZWxhdGVkIHRvIHB1c2hpbmcgb3IgY29uZmlndXJpbmcgSVB2NC1yZWxhdGVkIGRhdGEuIEkgbmVlZCB0aGUgYWN0dWFsIGNvZGUsIHRob3VnaC4gYHJlYWQtZmlsZWAgaXMgdGhlIHRvb2wgdG8gdXNlLiBJJiMzOTttIGdvaW5nIHRvIHB1bGwgdGhlIHNvdXJjZSBjb2RlIHRvIHN0YXJ0IHRoZSBkZWVwLWRpdmUuIEZyb20gdGhlcmUgSSYjMzk7bGwgc3RhcnQgYW5hbHl6aW5nIHRvIHNlZSB3aGF0IHRoZSBmdW5jdGlvbiBkb2VzLCBob3cgaXQgd29ya3MgYW5kIHdoZXJlIGl0IGlzIHVzZWQuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gbG9vayBhdCB0aGUgb3RoZXIgZnVuY3Rpb25zIHRoYXQgY2FsbCBpdCBhcyB3ZWxsIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxMTcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjExNzpcdHN0YXRpYyB2b2lkIHB1c2hfaXB2NChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuMjExODpcdFx0XHQgICAgICBpbnQgbGVuKVxuMjExOTpcdHtcbjIxMjA6XHRcdHN0YXRpYyBhdG9taWNfdCBpcF9pZGVudDtcbjIxMjE6XHRcdHN0cnVjdCBpcGhkciAqaXBoO1xuMjEyMjpcdFx0aW50IGlwX2xlbjtcbjIxMjM6XHRcbjIxMjQ6XHRcdGlwX2xlbiA9IGxlbiAmIzQzOyBzaXplb2Yoc3RydWN0IHVkcGhkcikgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBpcGhkcik7XG4yMTI1Olx0XG4yMTI2Olx0XHRza2JfcHVzaChza2IsIHNpemVvZihzdHJ1Y3QgaXBoZHIpKTtcbjIxMjc6XHRcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xuMjEyODpcdFx0aXBoID0gaXBfaGRyKHNrYik7XG4yMTI5Olx0XG4yMTMwOlx0XHQvKiBpcGgtXHUwMDNldmVyc2lvbiA9IDQ7IGlwaC1cdTAwM2VpaGwgPSA1OyAqL1xuMjEzMTpcdFx0Kih1bnNpZ25lZCBjaGFyICopaXBoID0gMHg0NTtcbjIxMzI6XHRcdGlwaC1cdTAwM2V0b3MgPSAwO1xuMjEzMzpcdFx0cHV0X3VuYWxpZ25lZChodG9ucyhpcF9sZW4pLCBcdTAwMjZpcGgtXHUwMDNldG90X2xlbik7XG4yMTM0Olx0XHRpcGgtXHUwMDNlaWQgPSBodG9ucyhhdG9taWNfaW5jX3JldHVybihcdTAwMjZpcF9pZGVudCkpO1xuMjEzNTpcdFx0aXBoLVx1MDAzZWZyYWdfb2ZmID0gMDtcbjIxMzY6XHRcdGlwaC1cdTAwM2V0dGwgPSA2NDtcbjIxMzc6XHRcdGlwaC1cdTAwM2Vwcm90b2NvbCA9IElQUFJPVE9fVURQO1xuMjEzODpcdFx0aXBoLVx1MDAzZWNoZWNrID0gMDtcbjIxMzk6XHRcdHB1dF91bmFsaWduZWQobnQtXHUwMDNlbG9jYWxfaXAuaXAsIFx1MDAyNmlwaC1cdTAwM2VzYWRkcik7XG4yMTQwOlx0XHRwdXRfdW5hbGlnbmVkKG50LVx1MDAzZXJlbW90ZV9pcC5pcCwgXHUwMDI2aXBoLVx1MDAzZWRhZGRyKTtcbjIxNDE6XHRcdGlwaC1cdTAwM2VjaGVjayA9IGlwX2Zhc3RfY3N1bSgodW5zaWduZWQgY2hhciAqKWlwaCwgaXBoLVx1MDAzZWlobCk7XG4yMTQyOlx0XHRza2ItXHUwMDNlcHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUCk7XG4yMTQzOlx0fVxuMjE0NDpcdFxuMjE0NTpcdHN0YXRpYyB2b2lkIHB1c2hfaXB2NihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuMjE0NjpcdFx0XHQgICAgICBpbnQgbGVuKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjYwOAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoaXMgY29kZSBzbmlwcGV0LCBleHByZXNzZWQgYXMgaWYgaXQmIzM5O3MgbXkgb3duIHRob3VnaHQgcHJvY2VzczoKCioqTXkgQW5hbHlzaXMgb2YgdGhlIElQIEFkZHJlc3MgSGFuZGxpbmcqKgoKUmlnaHQsIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGlzLiBUaGUgY29kZSBpcyBjbGVhcmx5IHVzaW5nIGBwdXRfdW5hbGlnbmVkKG50LSZndDtsb2NhbF9pcC5pcCwgJmFtcDtpcGgtJmd0O3NhZGRyKTtgLiBIbW0sIGl0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGlzbiYjMzk7dCBpdD8gSXQmIzM5O3MgZGlyZWN0bHkgY29weWluZyBieXRlcyBmcm9tIGBudC0mZ3Q7bG9jYWxfaXAuaXBgIHRvIHRoZSBzb3VyY2UgYWRkcmVzcyBmaWVsZCAoYGlwaC0mZ3Q7c2FkZHJgKSBvZiB0aGUgSVAgaGVhZGVyLiBUaGUgaW1wb3J0YW50IHBhcnQgaGVyZSBpcyB0aGUgbm90ZSBvbiAmIzM0O2V4YWN0bHkgNCBieXRlcy4mIzM0OyBUaGF0IG1lYW5zIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYW4gSVB2NCBhZGRyZXNzLiBUaGVyZSYjMzk7cyBubyBmYW5jeSBwYWRkaW5nIG9yIGFueXRoaW5nIGV4dHJhIGJlaW5nIGNvcGllZCBmcm9tIHRoZSBgc3RydWN0IGluZXRfYWRkcmAsIHdoaWNoIGlzIGdlbmVyYWxseSBnb29kIHByYWN0aWNlIHRvIGF2b2lkIHN1cnByaXNlcy4gVGhhdCYjMzk7cyBhIGNsZWFuIGFuZCBlZmZpY2llbnQgd2F5IHRvIGhhbmRsZSBpdC4KCkFuZCB0aGUgZmFjdCB0aGF0IHRoZSBzYW1lIHByaW5jaXBsZSBhcHBlYXJzIGluIGBwdXNoX2lwdjZgIGNvbmZpcm1zIG15IGluaXRpYWwgaHlwb3RoZXNpcy4gVGhlIGNvZGUgaXMgbGlrZWx5IGp1c3QgZ3JhYmJpbmcgdGhlIGJ5dGVzIGFuZCBjaHVja2luZyB0aGVtIGludG8gdGhlIElQIGhlYWRlciBmb3IgYm90aCBJUHY0IGFuZCBJUHY2LCBhc3N1bWluZyB0aGUgY29ycmVjdCBzdHJ1Y3R1cmUuIE1ha2VzIHNlbnNlLiBUaGlzIHN1Z2dlc3RzIHRoZXJlIG1pZ2h0IGJlIHNvbWUgdW5kZXJseWluZyBhc3N1bXB0aW9uIGFib3V0IHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGBpbmV0X2FkZHJgIG9yIG90aGVyIHN0cnVjdHMgaWYgdGhhdCBpcyBub3QgdGhlIGNhc2UuIE5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgcGFydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIxNDU6XHRzdGF0aWMgdm9pZCBwdXNoX2lwdjYoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbjIxNDY6XHRcdFx0ICAgICAgaW50IGxlbilcbjIxNDc6XHR7XG4yMTQ4Olx0XHRzdHJ1Y3QgaXB2NmhkciAqaXA2aDtcbjIxNDk6XHRcbjIxNTA6XHRcdHNrYl9wdXNoKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSk7XG4yMTUxOlx0XHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcbjIxNTI6XHRcdGlwNmggPSBpcHY2X2hkcihza2IpO1xuMjE1MzpcdFxuMjE1NDpcdFx0LyogaXA2aC1cdTAwM2V2ZXJzaW9uID0gNjsgaXA2aC1cdTAwM2Vwcmlvcml0eSA9IDA7ICovXG4yMTU1Olx0XHQqKHVuc2lnbmVkIGNoYXIgKilpcDZoID0gMHg2MDtcbjIxNTY6XHRcdGlwNmgtXHUwMDNlZmxvd19sYmxbMF0gPSAwO1xuMjE1NzpcdFx0aXA2aC1cdTAwM2VmbG93X2xibFsxXSA9IDA7XG4yMTU4Olx0XHRpcDZoLVx1MDAzZWZsb3dfbGJsWzJdID0gMDtcbjIxNTk6XHRcbjIxNjA6XHRcdGlwNmgtXHUwMDNlcGF5bG9hZF9sZW4gPSBodG9ucyhzaXplb2Yoc3RydWN0IHVkcGhkcikgJiM0MzsgbGVuKTtcbjIxNjE6XHRcdGlwNmgtXHUwMDNlbmV4dGhkciA9IElQUFJPVE9fVURQO1xuMjE2MjpcdFx0aXA2aC1cdTAwM2Vob3BfbGltaXQgPSAzMjtcbjIxNjM6XHRcdGlwNmgtXHUwMDNlc2FkZHIgPSBudC1cdTAwM2Vsb2NhbF9pcC5pbjY7XG4yMTY0Olx0XHRpcDZoLVx1MDAzZWRhZGRyID0gbnQtXHUwMDNlcmVtb3RlX2lwLmluNjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjczNTgKCQkJCQkJCW91dHB1dDogMjg2CgkJCQkJCQl0aG91Z2h0czogODEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFzc2Vzc21lbnQ6IE5vIE5lZWQgZm9yIERlZGljYXRlZCBGdXp6aW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgY29uY2VybiB3YXMsIGFzIGFsd2F5cywgYXJvdW5kIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcy4gV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBuZXR3b3JrIGNvbmZpZ3VyYXRpb24sIHNvIHRoYXQmIzM5O3MgYSBrZXkgYXJlYSB0byBzY3J1dGluaXplLgoKRmlyc3QsIEkgZXhhbWluZWQgdGhlIGNvcmUgY2hhbmdlOiBgaXA2aC0mZ3Q7c2FkZHIgPSBudC0mZ3Q7bG9jYWxfaXAuaW42O2AuIFRoaXMgY29waWVzIGV4YWN0bHkgYSBgc3RydWN0IGluNl9hZGRyYCwgd2hpY2ggaXMgMTYgYnl0ZXMuIFRoZXJlJiMzOTtzICpubyogcmlzayBvZiBwYWRkaW5nIGJ5dGVzIGZyb20gYSBwcmV2aW91cyBgc3RydWN0IGluZXRfYWRkcmAgYmVpbmcgY29waWVkIG92ZXIsIHNvIHRoYXTigJlzIGEgbm9uLWlzc3VlLgoKVGhlIHBhdGNoIGl0c2VsZiBpcyBhIHJlZmFjdG9yaW5nLCBzcGVjaWZpY2FsbHkgYWRkcmVzc2luZyBob3cgSVAgYWRkcmVzc2VzIGFyZSByZXByZXNlbnRlZCBpbiBgbmV0Y29uc29sZV90YXJnZXRgLiBJdCBpbnRyb2R1Y2VzIGEgYGZhbWlseWAgZmllbGQgdG8gZXhwbGljaXRseSB0cmFjayB0aGUgYWRkcmVzcyBmYW1pbHkgKElQdjQsIElQdjYsIG9yIHVuc2V0KSBpbnN0ZWFkIG9mIHRoZSBwcmV2aW91cyBhbWJpZ3VvdXMgYm9vbGVhbiBhbmQgemVyby1JUCBjaGVjay4gVGhpcyBhY3R1YWxseSAqZml4ZXMqIGEgYnVnIHdoZXJlIGEgc2VlbWluZ2x5IHZhbGlkIElQdjYgYWRkcmVzcyBjb3VsZCBiZSBtaXNpbnRlcnByZXRlZCBhcyB1bnNldCwgc2ltcGx5IGJlY2F1c2UgaXRzIGluaXRpYWwgYnl0ZXMgd2VyZSB6ZXJvLCB3aGljaCB3b3VsZCBoYXZlIGJlZW4gbWlzc2VkIGJ5IHRoZSBsZWdhY3kgbWV0aG9kLgoKSSB0aGVuIHRob3JvdWdobHkgcmV2aWV3ZWQgdGhlIGNvZGUgY2hhbmdlcy4gVGhlIG9yaWdpbmFsIGB1bmlvbiBpbmV0X2FkZHJgIGlzIGdvbmUgZnJvbSBgbmV0cG9sbC5oYCBhbmQgcmVwbGFjZWQgYnkgYSAqc3RydWN0KiB3aXRoIHRoZSBzYW1lIG5hbWUgd2hpY2ggY29udGFpbnMgdGhlIGBmYW1pbHlgIG1lbWJlciwgYW5kIGFuIGFub255bW91cyB1bmlvbiBvZiBgX19iZTMyYCBhbmQgYHN0cnVjdCBpbjZfYWRkcmAuIFRoaXMgaXMgYWRkZWQgaW4gYG5ldGNvbnNvbGUuY2AuIEFsbCBvdGhlciBjaGFuZ2VzIHNpbXBseSByZWZsZWN0IHRoZSB1c2Ugb2YgdGhpcyBuZXcgc3RydWN0IGFuZCBpdHMgYGZhbWlseWAgZmllbGQuCgpDcnVjaWFsbHksIHRoZXJlIGFyZSAqbm8qIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMgaW50cm9kdWNlZC4gVGhlIGBuZXRjb25zb2xlX3RhcmdldGAgaXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2Nfb2JqYCwgd2hpY2ggemVyby1pbml0aWFsaXplcyB0aGUgZW50aXJlIHN0cnVjdHVyZS4gVGhpcyBtZWFucyB0aGUgYGZhbWlseWAgZmllbGQgZGVmYXVsdHMgdG8gYDBgIChBRl9VTlNQRUMsIHdoaWNoIGlzIGNvcnJlY3QpLCBhbmQgdGhlIElQIGFkZHJlc3MgZmllbGRzIGFyZSB6ZXJvZWQgYXMgd2VsbC4gSWYgcGFyc2luZyB0aGUgYWRkcmVzcyBmYWlscywgdGhlIHRhcmdldCBpcyBub3QgZW5hYmxlZC4KCkkgYWxzbyBjaGVja2VkIGhvdyB0aGUgSVAgYWRkcmVzcyBpcyBleHBvc2VkLiBJdCYjMzk7cyBvbmx5IHRocm91Z2ggY29uZmlnZnMgYHNob3dgIGZ1bmN0aW9ucywgd2hpY2ggZm9ybWF0IGl0IGFzIGEgKnN0cmluZyogdXNpbmcgYHN5c2ZzX2VtaXRgLiBUaGlzIGNvbXBsZXRlbHkgZWxpbWluYXRlcyB0aGUgcG9zc2liaWxpdHkgb2YgbGVha2luZyBhbnkgaW50ZXJuYWwgcGFkZGluZyBvciB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2Vyc3BhY2UuIEZpbmFsbHksIHdoZW4gc2VuZGluZyBkYXRhLCB0aGUgY29kZSAqb25seSogY29waWVzIGVpdGhlciB0aGUgSVB2NCBvciBJUHY2IGFkZHJlc3MgKDQgb3IgMTYgYnl0ZXMgcmVzcGVjdGl2ZWx5KSBpbnRvIHRoZSBJUCBoZWFkZXIuIE5vIGV4dHJhIGluZm9ybWF0aW9uIGlzIGV4cG9zZWQuCgpJbiBzdW1tYXJ5LCB0aGVyZSYjMzk7cyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBkYXRhIGxlYWthZ2UsIG9yIGFueSBvdGhlciBraW5kIG9mIG1lbW9yeSBzYWZldHkgaXNzdWUgaGVyZS4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBwcm9ibGVtcy4gR2l2ZW4gdGhhdCwgS01TQU4gaXMgbm90IHJlcXVpcmVkLiBJJiMzOTtsbCBzZXQgYE5lZWRzS01TQU49ZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgaG93IElQIGFkZHJlc3NlcyBhcmUgc3RvcmVkIGFuZCBwYXJzZWQgaW4gdGhlIG5ldGNvbnNvbGUgZHJpdmVyIGJ5IHJlcGxhY2luZyBhIGB1bmlvbiBpbmV0X2FkZHJgIGFuZCBhIGJvb2xlYW4gYGlwdjZgIGZsYWcgd2l0aCBhIG5ldyBgc3RydWN0IGluZXRfYWRkcmAgdGhhdCBleHBsaWNpdGx5IHRyYWNrcyB0aGUgYWRkcmVzcyBmYW1pbHkgKGBBRl9VTlNQRUNgLCBgQUZfSU5FVGAsIG9yIGBBRl9JTkVUNmApLiBUaGUgYHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldGAgY29udGFpbmluZyB0aGVzZSBhZGRyZXNzZXMgaXMgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jX29iamAgKHdoaWNoIHplcm8taW5pdGlhbGl6ZXMgdGhlIG1lbW9yeSksIGVuc3VyaW5nIHRoYXQgdGhlIG5ldyBgZmFtaWx5YCBmaWVsZCBkZWZhdWx0cyB0byBgQUZfVU5TUEVDYCBhbmQgdGhlIElQIGFkZHJlc3NlcyBhcmUgemVyb2VkLiBUaGUgSVAgYWRkcmVzc2VzIGFyZSBvbmx5IGV4cG9zZWQgdG8gdXNlcnNwYWNlIHZpYSBjb25maWdmcyBgc2hvd2AgZnVuY3Rpb25zLCB3aGljaCBmb3JtYXQgdGhlbSBhcyBzdHJpbmdzIHVzaW5nIGBzeXNmc19lbWl0YCwgcHJldmVudGluZyBhbnkgcG90ZW50aWFsIGxlYWthZ2Ugb2YgcGFkZGluZyBieXRlcy4gV2hlbiBjb25zdHJ1Y3RpbmcgbmV0d29yayBwYWNrZXRzLCBvbmx5IHRoZSBleGFjdCBJUHY0ICg0IGJ5dGVzKSBvciBJUHY2ICgxNiBieXRlcykgYWRkcmVzcyBmaWVsZHMgYXJlIGNvcGllZCBpbnRvIHRoZSBJUCBoZWFkZXJzLCBhZ2FpbiBhdm9pZGluZyBhbnkgcGFkZGluZyBsZWFrcy4gVGhlcmUgYXJlIG5vIG5ldyBhbGxvY2F0aW9ucyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm8gc3RydWN0dXJlcyBjb3BpZWQgZGlyZWN0bHkgdG8gdXNlcnNwYWNlLCBhbmQgbm8gY29udHJvbCBmbG93IGNoYW5nZXMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBidWdzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgaG93IElQIGFkZHJlc3NlcyBhcmUgc3RvcmVkIGFuZCBwYXJzZWQgaW4gdGhlIG5ldGNvbnNvbGUgZHJpdmVyIGJ5IHJlcGxhY2luZyBhIGB1bmlvbiBpbmV0X2FkZHJgIGFuZCBhIGJvb2xlYW4gYGlwdjZgIGZsYWcgd2l0aCBhIG5ldyBgc3RydWN0IGluZXRfYWRkcmAgdGhhdCBleHBsaWNpdGx5IHRyYWNrcyB0aGUgYWRkcmVzcyBmYW1pbHkgKGBBRl9VTlNQRUNgLCBgQUZfSU5FVGAsIG9yIGBBRl9JTkVUNmApLiBUaGUgYHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldGAgY29udGFpbmluZyB0aGVzZSBhZGRyZXNzZXMgaXMgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jX29iamAgKHdoaWNoIHplcm8taW5pdGlhbGl6ZXMgdGhlIG1lbW9yeSksIGVuc3VyaW5nIHRoYXQgdGhlIG5ldyBgZmFtaWx5YCBmaWVsZCBkZWZhdWx0cyB0byBgQUZfVU5TUEVDYCBhbmQgdGhlIElQIGFkZHJlc3NlcyBhcmUgemVyb2VkLiBUaGUgSVAgYWRkcmVzc2VzIGFyZSBvbmx5IGV4cG9zZWQgdG8gdXNlcnNwYWNlIHZpYSBjb25maWdmcyBgc2hvd2AgZnVuY3Rpb25zLCB3aGljaCBmb3JtYXQgdGhlbSBhcyBzdHJpbmdzIHVzaW5nIGBzeXNmc19lbWl0YCwgcHJldmVudGluZyBhbnkgcG90ZW50aWFsIGxlYWthZ2Ugb2YgcGFkZGluZyBieXRlcy4gV2hlbiBjb25zdHJ1Y3RpbmcgbmV0d29yayBwYWNrZXRzLCBvbmx5IHRoZSBleGFjdCBJUHY0ICg0IGJ5dGVzKSBvciBJUHY2ICgxNiBieXRlcykgYWRkcmVzcyBmaWVsZHMgYXJlIGNvcGllZCBpbnRvIHRoZSBJUCBoZWFkZXJzLCBhZ2FpbiBhdm9pZGluZyBhbnkgcGFkZGluZyBsZWFrcy4gVGhlcmUgYXJlIG5vIG5ldyBhbGxvY2F0aW9ucyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm8gc3RydWN0dXJlcyBjb3BpZWQgZGlyZWN0bHkgdG8gdXNlcnNwYWNlLCBhbmQgbm8gY29udHJvbCBmbG93IGNoYW5nZXMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBidWdzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjM4OjIxLjkzMTE3NjM0N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNTUzMjY3ODE3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRDT05TT0xFXCIsXG4gICAgXCJORVRDT05TT0xFX0RZTkFNSUNcIixcbiAgICBcIkNPTkZJR0ZTX0ZTXCIsXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibG9jYWxfaXBfc3RvcmVcIixcbiAgICBcInJlbW90ZV9pcF9zdG9yZVwiLFxuICAgIFwiZW5hYmxlZF9zdG9yZVwiLFxuICAgIFwibmV0Y29uc19uZXRwb2xsX3NldHVwXCIsXG4gICAgXCJuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lXCIsXG4gICAgXCJuZXRwb2xsX3NlbmRfdWRwXCIsXG4gICAgXCJuZXRwb2xsX3BhcnNlX2lwX2FkZHJcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBob3cgSVAgYWRkcmVzc2VzIGFyZSBzdG9yZWQgYW5kIHBhcnNlZCBpbiB0aGUgbmV0Y29uc29sZSBkcml2ZXIgYnkgcmVwbGFjaW5nIGEgYHVuaW9uIGluZXRfYWRkcmAgYW5kIGEgYm9vbGVhbiBgaXB2NmAgZmxhZyB3aXRoIGEgbmV3IGBzdHJ1Y3QgaW5ldF9hZGRyYCB0aGF0IGV4cGxpY2l0bHkgdHJhY2tzIHRoZSBhZGRyZXNzIGZhbWlseSAoYEFGX1VOU1BFQ2AsIGBBRl9JTkVUYCwgb3IgYEFGX0lORVQ2YCkuIFRoZSBgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0YCBjb250YWluaW5nIHRoZXNlIGFkZHJlc3NlcyBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqYCAod2hpY2ggemVyby1pbml0aWFsaXplcyB0aGUgbWVtb3J5KSwgZW5zdXJpbmcgdGhhdCB0aGUgbmV3IGBmYW1pbHlgIGZpZWxkIGRlZmF1bHRzIHRvIGBBRl9VTlNQRUNgIGFuZCB0aGUgSVAgYWRkcmVzc2VzIGFyZSB6ZXJvZWQuIFRoZSBJUCBhZGRyZXNzZXMgYXJlIG9ubHkgZXhwb3NlZCB0byB1c2Vyc3BhY2UgdmlhIGNvbmZpZ2ZzIGBzaG93YCBmdW5jdGlvbnMsIHdoaWNoIGZvcm1hdCB0aGVtIGFzIHN0cmluZ3MgdXNpbmcgYHN5c2ZzX2VtaXRgLCBwcmV2ZW50aW5nIGFueSBwb3RlbnRpYWwgbGVha2FnZSBvZiBwYWRkaW5nIGJ5dGVzLiBXaGVuIGNvbnN0cnVjdGluZyBuZXR3b3JrIHBhY2tldHMsIG9ubHkgdGhlIGV4YWN0IElQdjQgKDQgYnl0ZXMpIG9yIElQdjYgKDE2IGJ5dGVzKSBhZGRyZXNzIGZpZWxkcyBhcmUgY29waWVkIGludG8gdGhlIElQIGhlYWRlcnMsIGFnYWluIGF2b2lkaW5nIGFueSBwYWRkaW5nIGxlYWtzLiBUaGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBubyBzdHJ1Y3R1cmVzIGNvcGllZCBkaXJlY3RseSB0byB1c2Vyc3BhY2UsIGFuZCBubyBjb250cm9sIGZsb3cgY2hhbmdlcyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGJ1Z3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbmV0Y29uc29sZSBkcml2ZXIgdG8gdHJhY2sgdGhlIElQIGFkZHJlc3MgZmFtaWx5IChBRl9JTkVULCBBRl9JTkVUNiwgQUZfVU5TUEVDKSBpbmRlcGVuZGVudGx5IGZvciBsb2NhbCBhbmQgcmVtb3RlIElQIGFkZHJlc3NlcywgcmVwbGFjaW5nIGEgc2luZ2xlIGBpcHY2YCBib29sZWFuIGZsYWcuIFRoaXMgY2hhbmdlcyBob3cgSVAgYWRkcmVzc2VzIGFyZSBwYXJzZWQsIHZhbGlkYXRlZCwgYW5kIHVzZWQgZHVyaW5nIG5ldGNvbnNvbGUgc2V0dXAgYW5kIG1lc3NhZ2UgdHJhbnNtaXNzaW9uLiBUaGUgbW9kaWZpZWQgY29kZSBpcyByZWFjaGFibGUgdmlhIHRoZSBuZXRjb25zb2xlIGNvbmZpZ2ZzIGludGVyZmFjZSAod2hpY2ggYWxsb3dzIGR5bmFtaWMgcmVjb25maWd1cmF0aW9uIG9mIHRhcmdldHMpIGFuZCBkdXJpbmcgbW9kdWxlIGluaXRpYWxpemF0aW9uIHZpYSBrZXJuZWwgY29tbWFuZCBsaW5lIHBhcmFtZXRlcnMuIFNpbmNlIHRoaXMgYWZmZWN0cyBjb3JlIGtlcm5lbCBsb2dnaW5nIGZ1bmN0aW9uYWxpdHkgYW5kIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgY29uZmlnZnMsIGl0IGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjM4OjIxLjkzMTE4MTc0N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYxNTU2OTYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMGY2MTMwNWUxNmUyZmFkNGJmYWUxNWMwNmI1MDJjMmMyMDA2ZTlmOVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAxMCAxOTozODoyMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMgYi9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcXG5pbmRleCAwMzkxMzMwMjMyOGNjLi44MTBkZWQ2ZTQ4ZjMyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1xcbisrKyBiL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1xcbkBAIC0xNTEsNiArMTUxLDE1IEBAIGVudW0gdGFyZ2V0X3N0YXRlIHtcXG4gXFx0U1RBVEVfREVBQ1RJVkFURUQsXFxuIH07XFxuIFxcbitzdHJ1Y3QgaW5ldF9hZGRyIHtcXG4rXFx0LyogQWRkcmVzcyBmYW1pbHk6IEFGX1VOU1BFQyB3aGVuIHVuc2V0LCBlbHNlIEFGX0lORVQgb3IgQUZfSU5FVDYgKi9cXG4rXFx0dThcXHRcXHRcXHRmYW1pbHk7XFxuK1xcdHVuaW9uIHtcXG4rXFx0XFx0X19iZTMyXFx0XFx0aXA7XFxuK1xcdFxcdHN0cnVjdCBpbjZfYWRkclxcdGluNjtcXG4rXFx0fTtcXG4rfTtcXG4rXFxuIC8qKlxcbiAgKiBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgLSBSZXByZXNlbnRzIGEgY29uZmlndXJlZCBuZXRjb25zb2xlIHRhcmdldC5cXG4gICogQGxpc3Q6XFx0TGlua3MgdGhpcyB0YXJnZXQgaW50byB0aGUgdGFyZ2V0X2xpc3QuXFxuQEAgLTE4MSw3ICsxOTAsNiBAQCBlbnVtIHRhcmdldF9zdGF0ZSB7XFxuICAqXFx0XFx0bG9jYWxfbWFjXFx0KHJlYWQtb25seSlcXG4gICogQGxvY2FsX2lwOlxcdFNvdXJjZSBJUCBhZGRyZXNzIG9mIHRoZSB0YXJnZXQgKHJlYWQtd3JpdGUpLlxcbiAgKiBAcmVtb3RlX2lwOlxcdERlc3RpbmF0aW9uIElQIGFkZHJlc3Mgb2YgdGhlIHRhcmdldCAocmVhZC13cml0ZSkuXFxuLSAqIEBpcHY2OlxcdFdoZXRoZXIgdGhlIHRhcmdldCBhZGRyZXNzZXMgYXJlIElQdjYgKHJlYWQtd3JpdGUpLlxcbiAgKiBAbG9jYWxfcG9ydDpcXHRTb3VyY2UgVURQIHBvcnQgb2YgdGhlIHRhcmdldCAocmVhZC13cml0ZSkuXFxuICAqIEByZW1vdGVfcG9ydDogRGVzdGluYXRpb24gVURQIHBvcnQgb2YgdGhlIHRhcmdldCAocmVhZC13cml0ZSkuXFxuICAqIEByZW1vdGVfbWFjOlxcdERlc3RpbmF0aW9uIGV0aGVybmV0IGFkZHJlc3Mgb2YgdGhlIHRhcmdldCAocmVhZC13cml0ZSkuXFxuQEAgLTIxMiw4ICsyMjAsNyBAQCBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQge1xcbiBcXHRib29sXFx0XFx0XFx0ZXh0ZW5kZWQ7XFxuIFxcdGJvb2xcXHRcXHRcXHRyZWxlYXNlO1xcbiBcXHRzdHJ1Y3QgbmV0cG9sbFxcdFxcdG5wO1xcbi1cXHR1bmlvbiBpbmV0X2FkZHJcXHRcXHRsb2NhbF9pcCwgcmVtb3RlX2lwO1xcbi1cXHRib29sXFx0XFx0XFx0aXB2NjtcXG4rXFx0c3RydWN0IGluZXRfYWRkclxcdGxvY2FsX2lwLCByZW1vdGVfaXA7XFxuIFxcdHUxNlxcdFxcdFxcdGxvY2FsX3BvcnQsIHJlbW90ZV9wb3J0O1xcbiBcXHR1OFxcdFxcdFxcdHJlbW90ZV9tYWNbRVRIX0FMRU5dO1xcbiBcXHQvKiBwcm90ZWN0ZWQgYnkgdGFyZ2V0X2xpc3RfbG9jazsgKzEgZ2l2ZXMgc2NucHJpbnRmKCkgcm9vbSBmb3IgaXRzXFxuQEAgLTQxNSw2ICs0MjIsNyBAQCBzdGF0aWMgaW50IG5ldGNvbnNfdGFrZV9pcHY2KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRcXHQvKiBHb3QgdGhlIElQLCBsZXQncyByZXR1cm4gKi9cXG4gXFx0XFx0XFx0bnQtXFx1MDAzZWxvY2FsX2lwLmluNiA9IGlmcC1cXHUwMDNlYWRkcjtcXG4rXFx0XFx0XFx0bnQtXFx1MDAzZWxvY2FsX2lwLmZhbWlseSA9IEFGX0lORVQ2O1xcbiBcXHRcXHRcXHRlcnIgPSAwO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0fVxcbkBAIC00NTYsMjggKzQ2NCwxMiBAQCBzdGF0aWMgaW50IG5ldGNvbnNfdGFrZV9pcHY0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXFxuIFxcdH1cXG4gXFxuIFxcdG50LVxcdTAwM2Vsb2NhbF9pcC5pcCA9IGlmYS1cXHUwMDNlaWZhX2xvY2FsO1xcbitcXHRudC1cXHUwMDNlbG9jYWxfaXAuZmFtaWx5ID0gQUZfSU5FVDtcXG4gXFx0bnBfaW5mbyhucCwgXFxcImxvY2FsIElQICVwSTRcXFxcblxcXCIsIFxcdTAwMjZudC1cXHUwMDNlbG9jYWxfaXAuaXApO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLS8qXFxuLSAqIFRlc3Qgd2hldGhlciB0aGUgY2FsbGVyIGxlZnQgbnQtXFx1MDAzZWxvY2FsX2lwIHVuc2V0LCBzbyB0aGF0XFxuLSAqIG5ldGNvbnNfbmV0cG9sbF9zZXR1cCgpIHNob3VsZCBhdXRvLXBvcHVsYXRlIGl0IGZyb20gdGhlIGVncmVzcyBkZXZpY2UuXFxuLSAqXFxuLSAqIG50LVxcdTAwM2Vsb2NhbF9pcCBpcyBhIHVuaW9uIG9mIF9fYmUzMiAoSVB2NCkgYW5kIHN0cnVjdCBpbjZfYWRkciAoSVB2NiksXFxuLSAqIHNvIGFuIElQdjYgYWRkcmVzcyB3aG9zZSBmaXJzdCA0IGJ5dGVzIGFyZSB6ZXJvIChlLmcuIDo6MSwgOjoyLFxcbi0gKiBJUHY0LW1hcHBlZCA6OmZmZmY6YS5iLmMuZCkgbXVzdCBub3QgYmUgdGVzdGVkIHZpYSB0aGUgSVB2NCBhcm0g4oCUXFxuLSAqIGRvaW5nIHNvIHdvdWxkIG1pc2NsYXNzaWZ5IGEgY2FsbGVyLXN1cHBsaWVkIGFkZHJlc3MgYXMgdW5zZXQgYW5kXFxuLSAqIHNpbGVudGx5IG92ZXJ3cml0ZSBpdCB3aXRoIHdoYXRldmVyIGFkZHJlc3MgdGhlIGRldmljZSBleHBvc2VzLlxcbi0gKi9cXG4tc3RhdGljIGJvb2wgbmV0Y29uc19sb2NhbF9pcF91bnNldChjb25zdCBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxcbi17XFxuLVxcdGlmIChudC1cXHUwMDNlaXB2NilcXG4tXFx0XFx0cmV0dXJuIGlwdjZfYWRkcl9hbnkoXFx1MDAyNm50LVxcdTAwM2Vsb2NhbF9pcC5pbjYpO1xcbi1cXHRyZXR1cm4gIW50LVxcdTAwM2Vsb2NhbF9pcC5pcDtcXG4tfVxcbi1cXG4gc3RhdGljIGludCBuZXRjb25zX25ldHBvbGxfc2V0dXAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcXG4ge1xcbiBcXHRzdHJ1Y3QgbmV0ICpuZXQgPSBjdXJyZW50LVxcdTAwM2Vuc3Byb3h5LVxcdTAwM2VuZXRfbnM7XFxuQEAgLTQ4Nyw2ICs0NzksMTcgQEAgc3RhdGljIGludCBuZXRjb25zX25ldHBvbGxfc2V0dXAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcXG4gXFx0Ym9vbCBpcF9vdmVyd3JpdHRlbiA9IGZhbHNlO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4rXFx0aWYgKG50LVxcdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX1VOU1BFQykge1xcbitcXHRcXHRucF9lcnIobnAsIFxcXCJyZW1vdGUgSVAgYWRkcmVzcyBub3QgY29uZmlndXJlZCwgYWJvcnRpbmdcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVERVNUQUREUlJFUTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKG50LVxcdTAwM2Vsb2NhbF9pcC5mYW1pbHkgIT0gQUZfVU5TUEVDIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBudC1cXHUwMDNlbG9jYWxfaXAuZmFtaWx5ICE9IG50LVxcdTAwM2VyZW1vdGVfaXAuZmFtaWx5KSB7XFxuK1xcdFxcdG5wX2VycihucCwgXFxcImxvY2FsIGFuZCByZW1vdGUgSVAgYWRkcmVzcyBmYW1pbGllcyBkaWZmZXIsIGFib3J0aW5nXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuIFxcdHJ0bmxfbG9jaygpO1xcbiBcXHRpZiAobnAtXFx1MDAzZWRldl9uYW1lWzBdKVxcbiBcXHRcXHRuZGV2ID0gX19kZXZfZ2V0X2J5X25hbWUobmV0LCBucC1cXHUwMDNlZGV2X25hbWUpO1xcbkBAIC01MjMsMTYgKzUyNiwxMyBAQCBzdGF0aWMgaW50IG5ldGNvbnNfbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxcbiBcXHRcXHRydG5sX2xvY2soKTtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKG5ldGNvbnNfbG9jYWxfaXBfdW5zZXQobnQpKSB7XFxuLVxcdFxcdGlmICghbnQtXFx1MDAzZWlwdjYpIHtcXG4tXFx0XFx0XFx0ZXJyID0gbmV0Y29uc190YWtlX2lwdjQobnQsIG5kZXYpO1xcbi1cXHRcXHRcXHRpZiAoZXJyKVxcbi1cXHRcXHRcXHRcXHRnb3RvIHB1dDtcXG4tXFx0XFx0fSBlbHNlIHtcXG4rXFx0aWYgKG50LVxcdTAwM2Vsb2NhbF9pcC5mYW1pbHkgPT0gQUZfVU5TUEVDKSB7XFxuK1xcdFxcdGlmIChudC1cXHUwMDNlcmVtb3RlX2lwLmZhbWlseSA9PSBBRl9JTkVUNilcXG4gXFx0XFx0XFx0ZXJyID0gbmV0Y29uc190YWtlX2lwdjYobnQsIG5kZXYpO1xcbi1cXHRcXHRcXHRpZiAoZXJyKVxcbi1cXHRcXHRcXHRcXHRnb3RvIHB1dDtcXG4tXFx0XFx0fVxcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdGVyciA9IG5ldGNvbnNfdGFrZV9pcHY0KG50LCBuZGV2KTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0Z290byBwdXQ7XFxuIFxcdFxcdGlwX292ZXJ3cml0dGVuID0gdHJ1ZTtcXG4gXFx0fVxcbiBcXG5AQCAtNzE0LDI0ICs3MTQsMjggQEAgc3RhdGljIHZvaWQgbmV0Y29uc29sZV9wcmludF9iYW5uZXIoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcXG4gXFx0c3RydWN0IG5ldHBvbGwgKm5wID0gXFx1MDAyNm50LVxcdTAwM2VucDtcXG4gXFxuIFxcdG5wX2luZm8obnAsIFxcXCJsb2NhbCBwb3J0ICVkXFxcXG5cXFwiLCBudC1cXHUwMDNlbG9jYWxfcG9ydCk7XFxuLVxcdGlmIChudC1cXHUwMDNlaXB2NilcXG4rXFx0aWYgKG50LVxcdTAwM2Vsb2NhbF9pcC5mYW1pbHkgPT0gQUZfVU5TUEVDKVxcbitcXHRcXHRucF9pbmZvKG5wLCBcXFwibG9jYWwgSVAgdW5zZXRcXFxcblxcXCIpO1xcbitcXHRlbHNlIGlmIChudC1cXHUwMDNlbG9jYWxfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxcbiBcXHRcXHRucF9pbmZvKG5wLCBcXFwibG9jYWwgSVB2NiBhZGRyZXNzICVwSTZjXFxcXG5cXFwiLCBcXHUwMDI2bnQtXFx1MDAzZWxvY2FsX2lwLmluNik7XFxuIFxcdGVsc2VcXG4gXFx0XFx0bnBfaW5mbyhucCwgXFxcImxvY2FsIElQdjQgYWRkcmVzcyAlcEk0XFxcXG5cXFwiLCBcXHUwMDI2bnQtXFx1MDAzZWxvY2FsX2lwLmlwKTtcXG4gXFx0bnBfaW5mbyhucCwgXFxcImludGVyZmFjZSBuYW1lICclcydcXFxcblxcXCIsIG5wLVxcdTAwM2VkZXZfbmFtZSk7XFxuIFxcdG5wX2luZm8obnAsIFxcXCJsb2NhbCBldGhlcm5ldCBhZGRyZXNzICclcE0nXFxcXG5cXFwiLCBucC1cXHUwMDNlZGV2X21hYyk7XFxuIFxcdG5wX2luZm8obnAsIFxcXCJyZW1vdGUgcG9ydCAlZFxcXFxuXFxcIiwgbnQtXFx1MDAzZXJlbW90ZV9wb3J0KTtcXG4tXFx0aWYgKG50LVxcdTAwM2VpcHY2KVxcbitcXHRpZiAobnQtXFx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfVU5TUEVDKVxcbitcXHRcXHRucF9pbmZvKG5wLCBcXFwicmVtb3RlIElQIHVuc2V0XFxcXG5cXFwiKTtcXG4rXFx0ZWxzZSBpZiAobnQtXFx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXFxuIFxcdFxcdG5wX2luZm8obnAsIFxcXCJyZW1vdGUgSVB2NiBhZGRyZXNzICVwSTZjXFxcXG5cXFwiLCBcXHUwMDI2bnQtXFx1MDAzZXJlbW90ZV9pcC5pbjYpO1xcbiBcXHRlbHNlXFxuIFxcdFxcdG5wX2luZm8obnAsIFxcXCJyZW1vdGUgSVB2NCBhZGRyZXNzICVwSTRcXFxcblxcXCIsIFxcdTAwMjZudC1cXHUwMDNlcmVtb3RlX2lwLmlwKTtcXG4gXFx0bnBfaW5mbyhucCwgXFxcInJlbW90ZSBldGhlcm5ldCBhZGRyZXNzICVwTVxcXFxuXFxcIiwgbnQtXFx1MDAzZXJlbW90ZV9tYWMpO1xcbiB9XFxuIFxcbi0vKiBQYXJzZSB0aGUgc3RyaW5nIGFuZCBwb3B1bGF0ZSB0aGUgYGluZXRfYWRkcmAgdW5pb24uIFJldHVybiAwIGlmIElQdjQgaXNcXG4tICogcG9wdWxhdGVkLCAxIGlmIElQdjYgaXMgcG9wdWxhdGVkLCBhbmQgLTEgdXBvbiBmYWlsdXJlLlxcbisvKiBQYXJzZSB0aGUgc3RyaW5nIGFuZCBwb3B1bGF0ZSB0aGUgYGluZXRfYWRkcmAgc3RydWN0LiBSZXR1cm4gMCBvbiBzdWNjZXNzXFxuKyAqIGFuZCAtMSB1cG9uIGZhaWx1cmUuXFxuICAqL1xcbi1zdGF0aWMgaW50IG5ldHBvbGxfcGFyc2VfaXBfYWRkcihjb25zdCBjaGFyICpzdHIsIHVuaW9uIGluZXRfYWRkciAqYWRkcilcXG4rc3RhdGljIGludCBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY29uc3QgY2hhciAqc3RyLCBzdHJ1Y3QgaW5ldF9hZGRyICphZGRyKVxcbiB7XFxuIFxcdGNvbnN0IGNoYXIgKmVuZCA9IE5VTEw7XFxuIFxcdGludCBsZW47XFxuQEAgLTc0MywxNCArNzQ3LDE4IEBAIHN0YXRpYyBpbnQgbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGNvbnN0IGNoYXIgKnN0ciwgdW5pb24gaW5ldF9hZGRyICphZGRyKVxcbiBcXHRpZiAoc3RyW2xlbiAtIDFdID09ICdcXFxcbicpXFxuIFxcdFxcdGxlbiAtPSAxO1xcbiBcXG4tXFx0aWYgKGluNF9wdG9uKHN0ciwgbGVuLCAodm9pZCAqKWFkZHIsIC0xLCBcXHUwMDI2ZW5kKSBcXHUwMDNlIDAgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgICghZW5kIHx8ICplbmQgPT0gMCB8fCAqZW5kID09ICdcXFxcbicpKVxcbitcXHRpZiAoaW40X3B0b24oc3RyLCBsZW4sICh2b2lkICopXFx1MDAyNmFkZHItXFx1MDAzZWlwLCAtMSwgXFx1MDAyNmVuZCkgXFx1MDAzZSAwIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAoIWVuZCB8fCAqZW5kID09IDAgfHwgKmVuZCA9PSAnXFxcXG4nKSkge1xcbitcXHRcXHRhZGRyLVxcdTAwM2VmYW1pbHkgPSBBRl9JTkVUO1xcbiBcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbiBcXG4gXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0lQVjYpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICBpbjZfcHRvbihzdHIsIGxlbiwgKHZvaWQgKilhZGRyLCAtMSwgXFx1MDAyNmVuZCkgXFx1MDAzZSAwIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICAoIWVuZCB8fCAqZW5kID09IDAgfHwgKmVuZCA9PSAnXFxcXG4nKSlcXG4tXFx0XFx0cmV0dXJuIDE7XFxuK1xcdCAgICBpbjZfcHRvbihzdHIsIGxlbiwgKHZvaWQgKilcXHUwMDI2YWRkci1cXHUwMDNlaW42LCAtMSwgXFx1MDAyNmVuZCkgXFx1MDAzZSAwIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAoIWVuZCB8fCAqZW5kID09IDAgfHwgKmVuZCA9PSAnXFxcXG4nKSkge1xcbitcXHRcXHRhZGRyLVxcdTAwM2VmYW1pbHkgPSBBRl9JTkVUNjtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4gXFxuIFxcdHJldHVybiAtMTtcXG4gfVxcbkBAIC04NTUsMjAgKzg2MywyNCBAQCBzdGF0aWMgc3NpemVfdCBsb2NhbF9pcF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxcbiB7XFxuIFxcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7XFxuIFxcbi1cXHRpZiAobnQtXFx1MDAzZWlwdjYpXFxuK1xcdGlmIChudC1cXHUwMDNlbG9jYWxfaXAuZmFtaWx5ID09IEFGX1VOU1BFQylcXG4rXFx0XFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiXFxcXG5cXFwiKTtcXG4rXFx0aWYgKG50LVxcdTAwM2Vsb2NhbF9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXFxuIFxcdFxcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXFxcIiVwSTZjXFxcXG5cXFwiLCBcXHUwMDI2bnQtXFx1MDAzZWxvY2FsX2lwLmluNik7XFxuIFxcdGVsc2VcXG4tXFx0XFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiJXBJNFxcXFxuXFxcIiwgXFx1MDAyNm50LVxcdTAwM2Vsb2NhbF9pcCk7XFxuK1xcdFxcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXFxcIiVwSTRcXFxcblxcXCIsIFxcdTAwMjZudC1cXHUwMDNlbG9jYWxfaXAuaXApO1xcbiB9XFxuIFxcbiBzdGF0aWMgc3NpemVfdCByZW1vdGVfaXBfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcXG4ge1xcbiBcXHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0pO1xcbiBcXG4tXFx0aWYgKG50LVxcdTAwM2VpcHY2KVxcbitcXHRpZiAobnQtXFx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfVU5TUEVDKVxcbitcXHRcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCJcXFxcblxcXCIpO1xcbitcXHRpZiAobnQtXFx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXFxuIFxcdFxcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXFxcIiVwSTZjXFxcXG5cXFwiLCBcXHUwMDI2bnQtXFx1MDAzZXJlbW90ZV9pcC5pbjYpO1xcbiBcXHRlbHNlXFxuLVxcdFxcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXFxcIiVwSTRcXFxcblxcXCIsIFxcdTAwMjZudC1cXHUwMDNlcmVtb3RlX2lwKTtcXG4rXFx0XFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiJXBJNFxcXFxuXFxcIiwgXFx1MDAyNm50LVxcdTAwM2VyZW1vdGVfaXAuaXApO1xcbiB9XFxuIFxcbiBzdGF0aWMgc3NpemVfdCBsb2NhbF9tYWNfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcXG5AQCAtMTIxMyw3ICsxMjI1LDYgQEAgc3RhdGljIHNzaXplX3QgbG9jYWxfaXBfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXFxuIHtcXG4gXFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcXG4gXFx0c3NpemVfdCByZXQgPSAtRUlOVkFMO1xcbi1cXHRpbnQgaXB2NjtcXG4gXFxuIFxcdGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF9sb2NrKCk7XFxuIFxcdGlmIChudC1cXHUwMDNlc3RhdGUgPT0gU1RBVEVfRU5BQkxFRCkge1xcbkBAIC0xMjIyLDEwICsxMjMzLDggQEAgc3RhdGljIHNzaXplX3QgbG9jYWxfaXBfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXFxuIFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gXFx0fVxcbiBcXG4tXFx0aXB2NiA9IG5ldHBvbGxfcGFyc2VfaXBfYWRkcihidWYsIFxcdTAwMjZudC1cXHUwMDNlbG9jYWxfaXApO1xcbi1cXHRpZiAoaXB2NiA9PSAtMSlcXG4rXFx0aWYgKG5ldHBvbGxfcGFyc2VfaXBfYWRkcihidWYsIFxcdTAwMjZudC1cXHUwMDNlbG9jYWxfaXApIFxcdTAwM2MgMClcXG4gXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbi1cXHRudC1cXHUwMDNlaXB2NiA9ICEhaXB2NjtcXG4gXFxuIFxcdHJldCA9IGNvdW50O1xcbiBvdXRfdW5sb2NrOlxcbkBAIC0xMjM4LDcgKzEyNDcsNiBAQCBzdGF0aWMgc3NpemVfdCByZW1vdGVfaXBfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXFxuIHtcXG4gXFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcXG4gXFx0c3NpemVfdCByZXQgPSAtRUlOVkFMO1xcbi1cXHRpbnQgaXB2NjtcXG4gXFxuIFxcdGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF9sb2NrKCk7XFxuIFxcdGlmIChudC1cXHUwMDNlc3RhdGUgPT0gU1RBVEVfRU5BQkxFRCkge1xcbkBAIC0xMjQ3LDEwICsxMjU1LDggQEAgc3RhdGljIHNzaXplX3QgcmVtb3RlX2lwX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxcbiBcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuIFxcdH1cXG4gXFxuLVxcdGlwdjYgPSBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoYnVmLCBcXHUwMDI2bnQtXFx1MDAzZXJlbW90ZV9pcCk7XFxuLVxcdGlmIChpcHY2ID09IC0xKVxcbitcXHRpZiAobmV0cG9sbF9wYXJzZV9pcF9hZGRyKGJ1ZiwgXFx1MDAyNm50LVxcdTAwM2VyZW1vdGVfaXApIFxcdTAwM2MgMClcXG4gXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbi1cXHRudC1cXHUwMDNlaXB2NiA9ICEhaXB2NjtcXG4gXFxuIFxcdHJldCA9IGNvdW50O1xcbiBvdXRfdW5sb2NrOlxcbkBAIC0yMDYxLDcgKzIwNjcsNyBAQCBzdGF0aWMgdm9pZCBuZXRwb2xsX3VkcF9jaGVja3N1bShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxcbiBcXG4gXFx0LyogY2hlY2sgbmVlZHMgdG8gYmUgc2V0LCBzaW5jZSBpdCB3aWxsIGJlIGNvbnN1bWVkIGluIGNzdW1fcGFydGlhbCAqL1xcbiBcXHR1ZHBoLVxcdTAwM2VjaGVjayA9IDA7XFxuLVxcdGlmIChudC1cXHUwMDNlaXB2NilcXG4rXFx0aWYgKG50LVxcdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxcbiBcXHRcXHR1ZHBoLVxcdTAwM2VjaGVjayA9IGNzdW1faXB2Nl9tYWdpYyhcXHUwMDI2bnQtXFx1MDAzZWxvY2FsX2lwLmluNixcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNm50LVxcdTAwM2VyZW1vdGVfaXAuaW42LFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgICB1ZHBfbGVuLCBJUFBST1RPX1VEUCxcXG5AQCAtMjEwMiw3ICsyMTA4LDcgQEAgc3RhdGljIHZvaWQgcHVzaF9ldGgoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcXG4gXFx0ZXRoZXJfYWRkcl9jb3B5KGV0aC1cXHUwMDNlaF9zb3VyY2UsIG5wLVxcdTAwM2VkZXYtXFx1MDAzZWRldl9hZGRyKTtcXG4gXFx0ZXRoZXJfYWRkcl9jb3B5KGV0aC1cXHUwMDNlaF9kZXN0LCBudC1cXHUwMDNlcmVtb3RlX21hYyk7XFxuLVxcdGlmIChudC1cXHUwMDNlaXB2NilcXG4rXFx0aWYgKG50LVxcdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxcbiBcXHRcXHRldGgtXFx1MDAzZWhfcHJvdG8gPSBodG9ucyhFVEhfUF9JUFY2KTtcXG4gXFx0ZWxzZVxcbiBcXHRcXHRldGgtXFx1MDAzZWhfcHJvdG8gPSBodG9ucyhFVEhfUF9JUCk7XFxuQEAgLTIxNzEsNyArMjE3Nyw3IEBAIHN0YXRpYyBpbnQgbmV0cG9sbF9zZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csXFxuIFxcdFxcdFdBUk5fT05fT05DRSghaXJxc19kaXNhYmxlZCgpKTtcXG4gXFxuIFxcdHVkcF9sZW4gPSBsZW4gKyBzaXplb2Yoc3RydWN0IHVkcGhkcik7XFxuLVxcdGlmIChudC1cXHUwMDNlaXB2NilcXG4rXFx0aWYgKG50LVxcdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxcbiBcXHRcXHRpcF9sZW4gPSB1ZHBfbGVuICsgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKTtcXG4gXFx0ZWxzZVxcbiBcXHRcXHRpcF9sZW4gPSB1ZHBfbGVuICsgc2l6ZW9mKHN0cnVjdCBpcGhkcik7XFxuQEAgLTIxODcsNyArMjE5Myw3IEBAIHN0YXRpYyBpbnQgbmV0cG9sbF9zZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csXFxuIFxcdHNrYl9wdXQoc2tiLCBsZW4pO1xcbiBcXG4gXFx0cHVzaF91ZHAobnQsIHNrYiwgbGVuKTtcXG4tXFx0aWYgKG50LVxcdTAwM2VpcHY2KVxcbitcXHRpZiAobnQtXFx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXFxuIFxcdFxcdHB1c2hfaXB2NihudCwgc2tiLCBsZW4pO1xcbiBcXHRlbHNlXFxuIFxcdFxcdHB1c2hfaXB2NChudCwgc2tiLCBsZW4pO1xcbkBAIC0yNTA3LDEwICsyNTEzLDggQEAgX19yZWxlYXNlcyhcXHUwMDI2dGFyZ2V0X2xpc3RfbG9jaylcXG4gc3RhdGljIGludCBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNoYXIgKm9wdClcXG4ge1xcbiBcXHRzdHJ1Y3QgbmV0cG9sbCAqbnAgPSBcXHUwMDI2bnQtXFx1MDAzZW5wO1xcbi1cXHRib29sIGlwdmVyc2lvbl9zZXQgPSBmYWxzZTtcXG4gXFx0Y2hhciAqY3VyID0gb3B0O1xcbiBcXHRjaGFyICpkZWxpbTtcXG4tXFx0aW50IGlwdjY7XFxuIFxcbiBcXHRpZiAoKmN1ciAhPSAnQCcpIHtcXG4gXFx0XFx0ZGVsaW0gPSBzdHJjaHIoY3VyLCAnQCcpO1xcbkBAIC0yNTI0LDE2ICsyNTI4LDEyIEBAIHN0YXRpYyBpbnQgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjaGFyICpvcHQpXFxuIFxcdGN1cisrO1xcbiBcXG4gXFx0aWYgKCpjdXIgIT0gJy8nKSB7XFxuLVxcdFxcdGlwdmVyc2lvbl9zZXQgPSB0cnVlO1xcbiBcXHRcXHRkZWxpbSA9IHN0cmNocihjdXIsICcvJyk7XFxuIFxcdFxcdGlmICghZGVsaW0pXFxuIFxcdFxcdFxcdGdvdG8gcGFyc2VfZmFpbGVkO1xcbiBcXHRcXHQqZGVsaW0gPSAwO1xcbi1cXHRcXHRpcHY2ID0gbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGN1ciwgXFx1MDAyNm50LVxcdTAwM2Vsb2NhbF9pcCk7XFxuLVxcdFxcdGlmIChpcHY2IFxcdTAwM2MgMClcXG4rXFx0XFx0aWYgKG5ldHBvbGxfcGFyc2VfaXBfYWRkcihjdXIsIFxcdTAwMjZudC1cXHUwMDNlbG9jYWxfaXApIFxcdTAwM2MgMClcXG4gXFx0XFx0XFx0Z290byBwYXJzZV9mYWlsZWQ7XFxuLVxcdFxcdGVsc2VcXG4tXFx0XFx0XFx0bnQtXFx1MDAzZWlwdjYgPSAoYm9vbClpcHY2O1xcbiBcXHRcXHRjdXIgPSBkZWxpbTtcXG4gXFx0fVxcbiBcXHRjdXIrKztcXG5AQCAtMjU3NSwxMyArMjU3NSwxMSBAQCBzdGF0aWMgaW50IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY2hhciAqb3B0KVxcbiBcXHRpZiAoIWRlbGltKVxcbiBcXHRcXHRnb3RvIHBhcnNlX2ZhaWxlZDtcXG4gXFx0KmRlbGltID0gMDtcXG4tXFx0aXB2NiA9IG5ldHBvbGxfcGFyc2VfaXBfYWRkcihjdXIsIFxcdTAwMjZudC1cXHUwMDNlcmVtb3RlX2lwKTtcXG4tXFx0aWYgKGlwdjYgXFx1MDAzYyAwKVxcbitcXHRpZiAobmV0cG9sbF9wYXJzZV9pcF9hZGRyKGN1ciwgXFx1MDAyNm50LVxcdTAwM2VyZW1vdGVfaXApIFxcdTAwM2MgMClcXG4gXFx0XFx0Z290byBwYXJzZV9mYWlsZWQ7XFxuLVxcdGVsc2UgaWYgKGlwdmVyc2lvbl9zZXQgXFx1MDAyNlxcdTAwMjYgbnQtXFx1MDAzZWlwdjYgIT0gKGJvb2wpaXB2NilcXG4rXFx0aWYgKG50LVxcdTAwM2Vsb2NhbF9pcC5mYW1pbHkgIT0gQUZfVU5TUEVDIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBudC1cXHUwMDNlbG9jYWxfaXAuZmFtaWx5ICE9IG50LVxcdTAwM2VyZW1vdGVfaXAuZmFtaWx5KVxcbiBcXHRcXHRnb3RvIHBhcnNlX2ZhaWxlZDtcXG4tXFx0ZWxzZVxcbi1cXHRcXHRudC1cXHUwMDNlaXB2NiA9IChib29sKWlwdjY7XFxuIFxcdGN1ciA9IGRlbGltICsgMTtcXG4gXFxuIFxcdGlmICgqY3VyICE9IDApIHtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRwb2xsLmggYi9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaFxcbmluZGV4IDFjNmIxZWVjNWVmZDYuLmVjMDgyMWE1YjAyZGIgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRwb2xsLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaFxcbkBAIC0xNiwxMSArMTYsNiBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VkcC5oXFx1MDAzZVxcbiBcXG4tdW5pb24gaW5ldF9hZGRyIHtcXG4tXFx0X19iZTMyXFx0XFx0aXA7XFxuLVxcdHN0cnVjdCBpbjZfYWRkclxcdGluNjtcXG4tfTtcXG4tXFxuIHN0cnVjdCBuZXRwb2xsIHtcXG4gXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcXG4gXFx0bmV0ZGV2aWNlX3RyYWNrZXIgZGV2X3RyYWNrZXI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjM4OjIyLjM5MzQxNzQ2OVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE1MDI5NTE5NjcwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRDT05TT0xFXCIsXG4gICAgXCJORVRDT05TT0xFX0RZTkFNSUNcIixcbiAgICBcIkNPTkZJR0ZTX0ZTXCIsXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibG9jYWxfaXBfc3RvcmVcIixcbiAgICBcInJlbW90ZV9pcF9zdG9yZVwiLFxuICAgIFwiZW5hYmxlZF9zdG9yZVwiLFxuICAgIFwibmV0Y29uc19uZXRwb2xsX3NldHVwXCIsXG4gICAgXCJuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lXCIsXG4gICAgXCJuZXRwb2xsX3NlbmRfdWRwXCIsXG4gICAgXCJuZXRwb2xsX3BhcnNlX2lwX2FkZHJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbmV0Y29uc29sZSBkcml2ZXIgdG8gdHJhY2sgdGhlIElQIGFkZHJlc3MgZmFtaWx5IChBRl9JTkVULCBBRl9JTkVUNiwgQUZfVU5TUEVDKSBpbmRlcGVuZGVudGx5IGZvciBsb2NhbCBhbmQgcmVtb3RlIElQIGFkZHJlc3NlcywgcmVwbGFjaW5nIGEgc2luZ2xlIGBpcHY2YCBib29sZWFuIGZsYWcuIFRoaXMgY2hhbmdlcyBob3cgSVAgYWRkcmVzc2VzIGFyZSBwYXJzZWQsIHZhbGlkYXRlZCwgYW5kIHVzZWQgZHVyaW5nIG5ldGNvbnNvbGUgc2V0dXAgYW5kIG1lc3NhZ2UgdHJhbnNtaXNzaW9uLiBUaGUgbW9kaWZpZWQgY29kZSBpcyByZWFjaGFibGUgdmlhIHRoZSBuZXRjb25zb2xlIGNvbmZpZ2ZzIGludGVyZmFjZSAod2hpY2ggYWxsb3dzIGR5bmFtaWMgcmVjb25maWd1cmF0aW9uIG9mIHRhcmdldHMpIGFuZCBkdXJpbmcgbW9kdWxlIGluaXRpYWxpemF0aW9uIHZpYSBrZXJuZWwgY29tbWFuZCBsaW5lIHBhcmFtZXRlcnMuIFNpbmNlIHRoaXMgYWZmZWN0cyBjb3JlIGtlcm5lbCBsb2dnaW5nIGZ1bmN0aW9uYWxpdHkgYW5kIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgY29uZmlnZnMsIGl0IGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDBmNjEzMDVlMTZlMmZhZDRiZmFlMTVjMDZiNTAyYzJjMjAwNmU5ZjlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxMCAxOTozODoyMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyBiL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1xuaW5kZXggMDM5MTMzMDIzMjhjYy4uODEwZGVkNmU0OGYzMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1xuKysrIGIvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXG5AQCAtMTUxLDYgKzE1MSwxNSBAQCBlbnVtIHRhcmdldF9zdGF0ZSB7XG4gXHRTVEFURV9ERUFDVElWQVRFRCxcbiB9O1xuIFxuK3N0cnVjdCBpbmV0X2FkZHIge1xuK1x0LyogQWRkcmVzcyBmYW1pbHk6IEFGX1VOU1BFQyB3aGVuIHVuc2V0LCBlbHNlIEFGX0lORVQgb3IgQUZfSU5FVDYgKi9cbitcdHU4XHRcdFx0ZmFtaWx5O1xuK1x0dW5pb24ge1xuK1x0XHRfX2JlMzJcdFx0aXA7XG4rXHRcdHN0cnVjdCBpbjZfYWRkclx0aW42O1xuK1x0fTtcbit9O1xuK1xuIC8qKlxuICAqIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAtIFJlcHJlc2VudHMgYSBjb25maWd1cmVkIG5ldGNvbnNvbGUgdGFyZ2V0LlxuICAqIEBsaXN0Olx0TGlua3MgdGhpcyB0YXJnZXQgaW50byB0aGUgdGFyZ2V0X2xpc3QuXG5AQCAtMTgxLDcgKzE5MCw2IEBAIGVudW0gdGFyZ2V0X3N0YXRlIHtcbiAgKlx0XHRsb2NhbF9tYWNcdChyZWFkLW9ubHkpXG4gICogQGxvY2FsX2lwOlx0U291cmNlIElQIGFkZHJlc3Mgb2YgdGhlIHRhcmdldCAocmVhZC13cml0ZSkuXG4gICogQHJlbW90ZV9pcDpcdERlc3RpbmF0aW9uIElQIGFkZHJlc3Mgb2YgdGhlIHRhcmdldCAocmVhZC13cml0ZSkuXG4tICogQGlwdjY6XHRXaGV0aGVyIHRoZSB0YXJnZXQgYWRkcmVzc2VzIGFyZSBJUHY2IChyZWFkLXdyaXRlKS5cbiAgKiBAbG9jYWxfcG9ydDpcdFNvdXJjZSBVRFAgcG9ydCBvZiB0aGUgdGFyZ2V0IChyZWFkLXdyaXRlKS5cbiAgKiBAcmVtb3RlX3BvcnQ6IERlc3RpbmF0aW9uIFVEUCBwb3J0IG9mIHRoZSB0YXJnZXQgKHJlYWQtd3JpdGUpLlxuICAqIEByZW1vdGVfbWFjOlx0RGVzdGluYXRpb24gZXRoZXJuZXQgYWRkcmVzcyBvZiB0aGUgdGFyZ2V0IChyZWFkLXdyaXRlKS5cbkBAIC0yMTIsOCArMjIwLDcgQEAgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0IHtcbiBcdGJvb2xcdFx0XHRleHRlbmRlZDtcbiBcdGJvb2xcdFx0XHRyZWxlYXNlO1xuIFx0c3RydWN0IG5ldHBvbGxcdFx0bnA7XG4tXHR1bmlvbiBpbmV0X2FkZHJcdFx0bG9jYWxfaXAsIHJlbW90ZV9pcDtcbi1cdGJvb2xcdFx0XHRpcHY2O1xuK1x0c3RydWN0IGluZXRfYWRkclx0bG9jYWxfaXAsIHJlbW90ZV9pcDtcbiBcdHUxNlx0XHRcdGxvY2FsX3BvcnQsIHJlbW90ZV9wb3J0O1xuIFx0dThcdFx0XHRyZW1vdGVfbWFjW0VUSF9BTEVOXTtcbiBcdC8qIHByb3RlY3RlZCBieSB0YXJnZXRfbGlzdF9sb2NrOyArMSBnaXZlcyBzY25wcmludGYoKSByb29tIGZvciBpdHNcbkBAIC00MTUsNiArNDIyLDcgQEAgc3RhdGljIGludCBuZXRjb25zX3Rha2VfaXB2NihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuIFx0XHRcdFx0Y29udGludWU7XG4gXHRcdFx0LyogR290IHRoZSBJUCwgbGV0J3MgcmV0dXJuICovXG4gXHRcdFx0bnQtXHUwMDNlbG9jYWxfaXAuaW42ID0gaWZwLVx1MDAzZWFkZHI7XG4rXHRcdFx0bnQtXHUwMDNlbG9jYWxfaXAuZmFtaWx5ID0gQUZfSU5FVDY7XG4gXHRcdFx0ZXJyID0gMDtcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuQEAgLTQ1NiwyOCArNDY0LDEyIEBAIHN0YXRpYyBpbnQgbmV0Y29uc190YWtlX2lwdjQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcbiBcdH1cbiBcbiBcdG50LVx1MDAzZWxvY2FsX2lwLmlwID0gaWZhLVx1MDAzZWlmYV9sb2NhbDtcbitcdG50LVx1MDAzZWxvY2FsX2lwLmZhbWlseSA9IEFGX0lORVQ7XG4gXHRucF9pbmZvKG5wLCBcImxvY2FsIElQICVwSTRcXG5cIiwgXHUwMDI2bnQtXHUwMDNlbG9jYWxfaXAuaXApO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLS8qXG4tICogVGVzdCB3aGV0aGVyIHRoZSBjYWxsZXIgbGVmdCBudC1cdTAwM2Vsb2NhbF9pcCB1bnNldCwgc28gdGhhdFxuLSAqIG5ldGNvbnNfbmV0cG9sbF9zZXR1cCgpIHNob3VsZCBhdXRvLXBvcHVsYXRlIGl0IGZyb20gdGhlIGVncmVzcyBkZXZpY2UuXG4tICpcbi0gKiBudC1cdTAwM2Vsb2NhbF9pcCBpcyBhIHVuaW9uIG9mIF9fYmUzMiAoSVB2NCkgYW5kIHN0cnVjdCBpbjZfYWRkciAoSVB2NiksXG4tICogc28gYW4gSVB2NiBhZGRyZXNzIHdob3NlIGZpcnN0IDQgYnl0ZXMgYXJlIHplcm8gKGUuZy4gOjoxLCA6OjIsXG4tICogSVB2NC1tYXBwZWQgOjpmZmZmOmEuYi5jLmQpIG11c3Qgbm90IGJlIHRlc3RlZCB2aWEgdGhlIElQdjQgYXJtIOKAlFxuLSAqIGRvaW5nIHNvIHdvdWxkIG1pc2NsYXNzaWZ5IGEgY2FsbGVyLXN1cHBsaWVkIGFkZHJlc3MgYXMgdW5zZXQgYW5kXG4tICogc2lsZW50bHkgb3ZlcndyaXRlIGl0IHdpdGggd2hhdGV2ZXIgYWRkcmVzcyB0aGUgZGV2aWNlIGV4cG9zZXMuXG4tICovXG4tc3RhdGljIGJvb2wgbmV0Y29uc19sb2NhbF9pcF91bnNldChjb25zdCBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuLXtcbi1cdGlmIChudC1cdTAwM2VpcHY2KVxuLVx0XHRyZXR1cm4gaXB2Nl9hZGRyX2FueShcdTAwMjZudC1cdTAwM2Vsb2NhbF9pcC5pbjYpO1xuLVx0cmV0dXJuICFudC1cdTAwM2Vsb2NhbF9pcC5pcDtcbi19XG4tXG4gc3RhdGljIGludCBuZXRjb25zX25ldHBvbGxfc2V0dXAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbiB7XG4gXHRzdHJ1Y3QgbmV0ICpuZXQgPSBjdXJyZW50LVx1MDAzZW5zcHJveHktXHUwMDNlbmV0X25zO1xuQEAgLTQ4Nyw2ICs0NzksMTcgQEAgc3RhdGljIGludCBuZXRjb25zX25ldHBvbGxfc2V0dXAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbiBcdGJvb2wgaXBfb3ZlcndyaXR0ZW4gPSBmYWxzZTtcbiBcdGludCBlcnI7XG4gXG4rXHRpZiAobnQtXHUwMDNlcmVtb3RlX2lwLmZhbWlseSA9PSBBRl9VTlNQRUMpIHtcbitcdFx0bnBfZXJyKG5wLCBcInJlbW90ZSBJUCBhZGRyZXNzIG5vdCBjb25maWd1cmVkLCBhYm9ydGluZ1xcblwiKTtcbitcdFx0cmV0dXJuIC1FREVTVEFERFJSRVE7XG4rXHR9XG4rXG4rXHRpZiAobnQtXHUwMDNlbG9jYWxfaXAuZmFtaWx5ICE9IEFGX1VOU1BFQyBcdTAwMjZcdTAwMjZcbitcdCAgICBudC1cdTAwM2Vsb2NhbF9pcC5mYW1pbHkgIT0gbnQtXHUwMDNlcmVtb3RlX2lwLmZhbWlseSkge1xuK1x0XHRucF9lcnIobnAsIFwibG9jYWwgYW5kIHJlbW90ZSBJUCBhZGRyZXNzIGZhbWlsaWVzIGRpZmZlciwgYWJvcnRpbmdcXG5cIik7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuIFx0cnRubF9sb2NrKCk7XG4gXHRpZiAobnAtXHUwMDNlZGV2X25hbWVbMF0pXG4gXHRcdG5kZXYgPSBfX2Rldl9nZXRfYnlfbmFtZShuZXQsIG5wLVx1MDAzZWRldl9uYW1lKTtcbkBAIC01MjMsMTYgKzUyNiwxMyBAQCBzdGF0aWMgaW50IG5ldGNvbnNfbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuIFx0XHRydG5sX2xvY2soKTtcbiBcdH1cbiBcbi1cdGlmIChuZXRjb25zX2xvY2FsX2lwX3Vuc2V0KG50KSkge1xuLVx0XHRpZiAoIW50LVx1MDAzZWlwdjYpIHtcbi1cdFx0XHRlcnIgPSBuZXRjb25zX3Rha2VfaXB2NChudCwgbmRldik7XG4tXHRcdFx0aWYgKGVycilcbi1cdFx0XHRcdGdvdG8gcHV0O1xuLVx0XHR9IGVsc2Uge1xuK1x0aWYgKG50LVx1MDAzZWxvY2FsX2lwLmZhbWlseSA9PSBBRl9VTlNQRUMpIHtcbitcdFx0aWYgKG50LVx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXG4gXHRcdFx0ZXJyID0gbmV0Y29uc190YWtlX2lwdjYobnQsIG5kZXYpO1xuLVx0XHRcdGlmIChlcnIpXG4tXHRcdFx0XHRnb3RvIHB1dDtcbi1cdFx0fVxuK1x0XHRlbHNlXG4rXHRcdFx0ZXJyID0gbmV0Y29uc190YWtlX2lwdjQobnQsIG5kZXYpO1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdGdvdG8gcHV0O1xuIFx0XHRpcF9vdmVyd3JpdHRlbiA9IHRydWU7XG4gXHR9XG4gXG5AQCAtNzE0LDI0ICs3MTQsMjggQEAgc3RhdGljIHZvaWQgbmV0Y29uc29sZV9wcmludF9iYW5uZXIoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbiBcdHN0cnVjdCBuZXRwb2xsICpucCA9IFx1MDAyNm50LVx1MDAzZW5wO1xuIFxuIFx0bnBfaW5mbyhucCwgXCJsb2NhbCBwb3J0ICVkXFxuXCIsIG50LVx1MDAzZWxvY2FsX3BvcnQpO1xuLVx0aWYgKG50LVx1MDAzZWlwdjYpXG4rXHRpZiAobnQtXHUwMDNlbG9jYWxfaXAuZmFtaWx5ID09IEFGX1VOU1BFQylcbitcdFx0bnBfaW5mbyhucCwgXCJsb2NhbCBJUCB1bnNldFxcblwiKTtcbitcdGVsc2UgaWYgKG50LVx1MDAzZWxvY2FsX2lwLmZhbWlseSA9PSBBRl9JTkVUNilcbiBcdFx0bnBfaW5mbyhucCwgXCJsb2NhbCBJUHY2IGFkZHJlc3MgJXBJNmNcXG5cIiwgXHUwMDI2bnQtXHUwMDNlbG9jYWxfaXAuaW42KTtcbiBcdGVsc2VcbiBcdFx0bnBfaW5mbyhucCwgXCJsb2NhbCBJUHY0IGFkZHJlc3MgJXBJNFxcblwiLCBcdTAwMjZudC1cdTAwM2Vsb2NhbF9pcC5pcCk7XG4gXHRucF9pbmZvKG5wLCBcImludGVyZmFjZSBuYW1lICclcydcXG5cIiwgbnAtXHUwMDNlZGV2X25hbWUpO1xuIFx0bnBfaW5mbyhucCwgXCJsb2NhbCBldGhlcm5ldCBhZGRyZXNzICclcE0nXFxuXCIsIG5wLVx1MDAzZWRldl9tYWMpO1xuIFx0bnBfaW5mbyhucCwgXCJyZW1vdGUgcG9ydCAlZFxcblwiLCBudC1cdTAwM2VyZW1vdGVfcG9ydCk7XG4tXHRpZiAobnQtXHUwMDNlaXB2NilcbitcdGlmIChudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX1VOU1BFQylcbitcdFx0bnBfaW5mbyhucCwgXCJyZW1vdGUgSVAgdW5zZXRcXG5cIik7XG4rXHRlbHNlIGlmIChudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxuIFx0XHRucF9pbmZvKG5wLCBcInJlbW90ZSBJUHY2IGFkZHJlc3MgJXBJNmNcXG5cIiwgXHUwMDI2bnQtXHUwMDNlcmVtb3RlX2lwLmluNik7XG4gXHRlbHNlXG4gXHRcdG5wX2luZm8obnAsIFwicmVtb3RlIElQdjQgYWRkcmVzcyAlcEk0XFxuXCIsIFx1MDAyNm50LVx1MDAzZXJlbW90ZV9pcC5pcCk7XG4gXHRucF9pbmZvKG5wLCBcInJlbW90ZSBldGhlcm5ldCBhZGRyZXNzICVwTVxcblwiLCBudC1cdTAwM2VyZW1vdGVfbWFjKTtcbiB9XG4gXG4tLyogUGFyc2UgdGhlIHN0cmluZyBhbmQgcG9wdWxhdGUgdGhlIGBpbmV0X2FkZHJgIHVuaW9uLiBSZXR1cm4gMCBpZiBJUHY0IGlzXG4tICogcG9wdWxhdGVkLCAxIGlmIElQdjYgaXMgcG9wdWxhdGVkLCBhbmQgLTEgdXBvbiBmYWlsdXJlLlxuKy8qIFBhcnNlIHRoZSBzdHJpbmcgYW5kIHBvcHVsYXRlIHRoZSBgaW5ldF9hZGRyYCBzdHJ1Y3QuIFJldHVybiAwIG9uIHN1Y2Nlc3NcbisgKiBhbmQgLTEgdXBvbiBmYWlsdXJlLlxuICAqL1xuLXN0YXRpYyBpbnQgbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGNvbnN0IGNoYXIgKnN0ciwgdW5pb24gaW5ldF9hZGRyICphZGRyKVxuK3N0YXRpYyBpbnQgbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGNvbnN0IGNoYXIgKnN0ciwgc3RydWN0IGluZXRfYWRkciAqYWRkcilcbiB7XG4gXHRjb25zdCBjaGFyICplbmQgPSBOVUxMO1xuIFx0aW50IGxlbjtcbkBAIC03NDMsMTQgKzc0NywxOCBAQCBzdGF0aWMgaW50IG5ldHBvbGxfcGFyc2VfaXBfYWRkcihjb25zdCBjaGFyICpzdHIsIHVuaW9uIGluZXRfYWRkciAqYWRkcilcbiBcdGlmIChzdHJbbGVuIC0gMV0gPT0gJ1xcbicpXG4gXHRcdGxlbiAtPSAxO1xuIFxuLVx0aWYgKGluNF9wdG9uKHN0ciwgbGVuLCAodm9pZCAqKWFkZHIsIC0xLCBcdTAwMjZlbmQpIFx1MDAzZSAwIFx1MDAyNlx1MDAyNlxuLVx0ICAgICghZW5kIHx8ICplbmQgPT0gMCB8fCAqZW5kID09ICdcXG4nKSlcbitcdGlmIChpbjRfcHRvbihzdHIsIGxlbiwgKHZvaWQgKilcdTAwMjZhZGRyLVx1MDAzZWlwLCAtMSwgXHUwMDI2ZW5kKSBcdTAwM2UgMCBcdTAwMjZcdTAwMjZcbitcdCAgICAoIWVuZCB8fCAqZW5kID09IDAgfHwgKmVuZCA9PSAnXFxuJykpIHtcbitcdFx0YWRkci1cdTAwM2VmYW1pbHkgPSBBRl9JTkVUO1xuIFx0XHRyZXR1cm4gMDtcbitcdH1cbiBcbiBcdGlmIChJU19FTkFCTEVEKENPTkZJR19JUFY2KSBcdTAwMjZcdTAwMjZcbi1cdCAgICBpbjZfcHRvbihzdHIsIGxlbiwgKHZvaWQgKilhZGRyLCAtMSwgXHUwMDI2ZW5kKSBcdTAwM2UgMCBcdTAwMjZcdTAwMjZcbi1cdCAgICAoIWVuZCB8fCAqZW5kID09IDAgfHwgKmVuZCA9PSAnXFxuJykpXG4tXHRcdHJldHVybiAxO1xuK1x0ICAgIGluNl9wdG9uKHN0ciwgbGVuLCAodm9pZCAqKVx1MDAyNmFkZHItXHUwMDNlaW42LCAtMSwgXHUwMDI2ZW5kKSBcdTAwM2UgMCBcdTAwMjZcdTAwMjZcbitcdCAgICAoIWVuZCB8fCAqZW5kID09IDAgfHwgKmVuZCA9PSAnXFxuJykpIHtcbitcdFx0YWRkci1cdTAwM2VmYW1pbHkgPSBBRl9JTkVUNjtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4gXG4gXHRyZXR1cm4gLTE7XG4gfVxuQEAgLTg1NSwyMCArODYzLDI0IEBAIHN0YXRpYyBzc2l6ZV90IGxvY2FsX2lwX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXG4ge1xuIFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcbiBcbi1cdGlmIChudC1cdTAwM2VpcHY2KVxuK1x0aWYgKG50LVx1MDAzZWxvY2FsX2lwLmZhbWlseSA9PSBBRl9VTlNQRUMpXG4rXHRcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCJcXG5cIik7XG4rXHRpZiAobnQtXHUwMDNlbG9jYWxfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxuIFx0XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwiJXBJNmNcXG5cIiwgXHUwMDI2bnQtXHUwMDNlbG9jYWxfaXAuaW42KTtcbiBcdGVsc2Vcbi1cdFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcIiVwSTRcXG5cIiwgXHUwMDI2bnQtXHUwMDNlbG9jYWxfaXApO1xuK1x0XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwiJXBJNFxcblwiLCBcdTAwMjZudC1cdTAwM2Vsb2NhbF9pcC5pcCk7XG4gfVxuIFxuIHN0YXRpYyBzc2l6ZV90IHJlbW90ZV9pcF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxuIHtcbiBcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7XG4gXG4tXHRpZiAobnQtXHUwMDNlaXB2NilcbitcdGlmIChudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX1VOU1BFQylcbitcdFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcIlxcblwiKTtcbitcdGlmIChudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxuIFx0XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwiJXBJNmNcXG5cIiwgXHUwMDI2bnQtXHUwMDNlcmVtb3RlX2lwLmluNik7XG4gXHRlbHNlXG4tXHRcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCIlcEk0XFxuXCIsIFx1MDAyNm50LVx1MDAzZXJlbW90ZV9pcCk7XG4rXHRcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCIlcEk0XFxuXCIsIFx1MDAyNm50LVx1MDAzZXJlbW90ZV9pcC5pcCk7XG4gfVxuIFxuIHN0YXRpYyBzc2l6ZV90IGxvY2FsX21hY19zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxuQEAgLTEyMTMsNyArMTIyNSw2IEBAIHN0YXRpYyBzc2l6ZV90IGxvY2FsX2lwX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxuIHtcbiBcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7XG4gXHRzc2l6ZV90IHJldCA9IC1FSU5WQUw7XG4tXHRpbnQgaXB2NjtcbiBcbiBcdGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF9sb2NrKCk7XG4gXHRpZiAobnQtXHUwMDNlc3RhdGUgPT0gU1RBVEVfRU5BQkxFRCkge1xuQEAgLTEyMjIsMTAgKzEyMzMsOCBAQCBzdGF0aWMgc3NpemVfdCBsb2NhbF9pcF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZixcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuIFxuLVx0aXB2NiA9IG5ldHBvbGxfcGFyc2VfaXBfYWRkcihidWYsIFx1MDAyNm50LVx1MDAzZWxvY2FsX2lwKTtcbi1cdGlmIChpcHY2ID09IC0xKVxuK1x0aWYgKG5ldHBvbGxfcGFyc2VfaXBfYWRkcihidWYsIFx1MDAyNm50LVx1MDAzZWxvY2FsX2lwKSBcdTAwM2MgMClcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuLVx0bnQtXHUwMDNlaXB2NiA9ICEhaXB2NjtcbiBcbiBcdHJldCA9IGNvdW50O1xuIG91dF91bmxvY2s6XG5AQCAtMTIzOCw3ICsxMjQ3LDYgQEAgc3RhdGljIHNzaXplX3QgcmVtb3RlX2lwX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxuIHtcbiBcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7XG4gXHRzc2l6ZV90IHJldCA9IC1FSU5WQUw7XG4tXHRpbnQgaXB2NjtcbiBcbiBcdGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF9sb2NrKCk7XG4gXHRpZiAobnQtXHUwMDNlc3RhdGUgPT0gU1RBVEVfRU5BQkxFRCkge1xuQEAgLTEyNDcsMTAgKzEyNTUsOCBAQCBzdGF0aWMgc3NpemVfdCByZW1vdGVfaXBfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdH1cbiBcbi1cdGlwdjYgPSBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoYnVmLCBcdTAwMjZudC1cdTAwM2VyZW1vdGVfaXApO1xuLVx0aWYgKGlwdjYgPT0gLTEpXG4rXHRpZiAobmV0cG9sbF9wYXJzZV9pcF9hZGRyKGJ1ZiwgXHUwMDI2bnQtXHUwMDNlcmVtb3RlX2lwKSBcdTAwM2MgMClcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuLVx0bnQtXHUwMDNlaXB2NiA9ICEhaXB2NjtcbiBcbiBcdHJldCA9IGNvdW50O1xuIG91dF91bmxvY2s6XG5AQCAtMjA2MSw3ICsyMDY3LDcgQEAgc3RhdGljIHZvaWQgbmV0cG9sbF91ZHBfY2hlY2tzdW0oc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcbiBcbiBcdC8qIGNoZWNrIG5lZWRzIHRvIGJlIHNldCwgc2luY2UgaXQgd2lsbCBiZSBjb25zdW1lZCBpbiBjc3VtX3BhcnRpYWwgKi9cbiBcdHVkcGgtXHUwMDNlY2hlY2sgPSAwO1xuLVx0aWYgKG50LVx1MDAzZWlwdjYpXG4rXHRpZiAobnQtXHUwMDNlcmVtb3RlX2lwLmZhbWlseSA9PSBBRl9JTkVUNilcbiBcdFx0dWRwaC1cdTAwM2VjaGVjayA9IGNzdW1faXB2Nl9tYWdpYyhcdTAwMjZudC1cdTAwM2Vsb2NhbF9pcC5pbjYsXG4gXHRcdFx0XHRcdCAgICAgIFx1MDAyNm50LVx1MDAzZXJlbW90ZV9pcC5pbjYsXG4gXHRcdFx0XHRcdCAgICAgIHVkcF9sZW4sIElQUFJPVE9fVURQLFxuQEAgLTIxMDIsNyArMjEwOCw3IEBAIHN0YXRpYyB2b2lkIHB1c2hfZXRoKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpO1xuIFx0ZXRoZXJfYWRkcl9jb3B5KGV0aC1cdTAwM2VoX3NvdXJjZSwgbnAtXHUwMDNlZGV2LVx1MDAzZWRldl9hZGRyKTtcbiBcdGV0aGVyX2FkZHJfY29weShldGgtXHUwMDNlaF9kZXN0LCBudC1cdTAwM2VyZW1vdGVfbWFjKTtcbi1cdGlmIChudC1cdTAwM2VpcHY2KVxuK1x0aWYgKG50LVx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXG4gXHRcdGV0aC1cdTAwM2VoX3Byb3RvID0gaHRvbnMoRVRIX1BfSVBWNik7XG4gXHRlbHNlXG4gXHRcdGV0aC1cdTAwM2VoX3Byb3RvID0gaHRvbnMoRVRIX1BfSVApO1xuQEAgLTIxNzEsNyArMjE3Nyw3IEBAIHN0YXRpYyBpbnQgbmV0cG9sbF9zZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csXG4gXHRcdFdBUk5fT05fT05DRSghaXJxc19kaXNhYmxlZCgpKTtcbiBcbiBcdHVkcF9sZW4gPSBsZW4gKyBzaXplb2Yoc3RydWN0IHVkcGhkcik7XG4tXHRpZiAobnQtXHUwMDNlaXB2NilcbitcdGlmIChudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxuIFx0XHRpcF9sZW4gPSB1ZHBfbGVuICsgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKTtcbiBcdGVsc2VcbiBcdFx0aXBfbGVuID0gdWRwX2xlbiArIHNpemVvZihzdHJ1Y3QgaXBoZHIpO1xuQEAgLTIxODcsNyArMjE5Myw3IEBAIHN0YXRpYyBpbnQgbmV0cG9sbF9zZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csXG4gXHRza2JfcHV0KHNrYiwgbGVuKTtcbiBcbiBcdHB1c2hfdWRwKG50LCBza2IsIGxlbik7XG4tXHRpZiAobnQtXHUwMDNlaXB2NilcbitcdGlmIChudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxuIFx0XHRwdXNoX2lwdjYobnQsIHNrYiwgbGVuKTtcbiBcdGVsc2VcbiBcdFx0cHVzaF9pcHY0KG50LCBza2IsIGxlbik7XG5AQCAtMjUwNywxMCArMjUxMyw4IEBAIF9fcmVsZWFzZXMoXHUwMDI2dGFyZ2V0X2xpc3RfbG9jaylcbiBzdGF0aWMgaW50IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY2hhciAqb3B0KVxuIHtcbiBcdHN0cnVjdCBuZXRwb2xsICpucCA9IFx1MDAyNm50LVx1MDAzZW5wO1xuLVx0Ym9vbCBpcHZlcnNpb25fc2V0ID0gZmFsc2U7XG4gXHRjaGFyICpjdXIgPSBvcHQ7XG4gXHRjaGFyICpkZWxpbTtcbi1cdGludCBpcHY2O1xuIFxuIFx0aWYgKCpjdXIgIT0gJ0AnKSB7XG4gXHRcdGRlbGltID0gc3RyY2hyKGN1ciwgJ0AnKTtcbkBAIC0yNTI0LDE2ICsyNTI4LDEyIEBAIHN0YXRpYyBpbnQgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjaGFyICpvcHQpXG4gXHRjdXIrKztcbiBcbiBcdGlmICgqY3VyICE9ICcvJykge1xuLVx0XHRpcHZlcnNpb25fc2V0ID0gdHJ1ZTtcbiBcdFx0ZGVsaW0gPSBzdHJjaHIoY3VyLCAnLycpO1xuIFx0XHRpZiAoIWRlbGltKVxuIFx0XHRcdGdvdG8gcGFyc2VfZmFpbGVkO1xuIFx0XHQqZGVsaW0gPSAwO1xuLVx0XHRpcHY2ID0gbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGN1ciwgXHUwMDI2bnQtXHUwMDNlbG9jYWxfaXApO1xuLVx0XHRpZiAoaXB2NiBcdTAwM2MgMClcbitcdFx0aWYgKG5ldHBvbGxfcGFyc2VfaXBfYWRkcihjdXIsIFx1MDAyNm50LVx1MDAzZWxvY2FsX2lwKSBcdTAwM2MgMClcbiBcdFx0XHRnb3RvIHBhcnNlX2ZhaWxlZDtcbi1cdFx0ZWxzZVxuLVx0XHRcdG50LVx1MDAzZWlwdjYgPSAoYm9vbClpcHY2O1xuIFx0XHRjdXIgPSBkZWxpbTtcbiBcdH1cbiBcdGN1cisrO1xuQEAgLTI1NzUsMTMgKzI1NzUsMTEgQEAgc3RhdGljIGludCBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNoYXIgKm9wdClcbiBcdGlmICghZGVsaW0pXG4gXHRcdGdvdG8gcGFyc2VfZmFpbGVkO1xuIFx0KmRlbGltID0gMDtcbi1cdGlwdjYgPSBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY3VyLCBcdTAwMjZudC1cdTAwM2VyZW1vdGVfaXApO1xuLVx0aWYgKGlwdjYgXHUwMDNjIDApXG4rXHRpZiAobmV0cG9sbF9wYXJzZV9pcF9hZGRyKGN1ciwgXHUwMDI2bnQtXHUwMDNlcmVtb3RlX2lwKSBcdTAwM2MgMClcbiBcdFx0Z290byBwYXJzZV9mYWlsZWQ7XG4tXHRlbHNlIGlmIChpcHZlcnNpb25fc2V0IFx1MDAyNlx1MDAyNiBudC1cdTAwM2VpcHY2ICE9IChib29sKWlwdjYpXG4rXHRpZiAobnQtXHUwMDNlbG9jYWxfaXAuZmFtaWx5ICE9IEFGX1VOU1BFQyBcdTAwMjZcdTAwMjZcbitcdCAgICBudC1cdTAwM2Vsb2NhbF9pcC5mYW1pbHkgIT0gbnQtXHUwMDNlcmVtb3RlX2lwLmZhbWlseSlcbiBcdFx0Z290byBwYXJzZV9mYWlsZWQ7XG4tXHRlbHNlXG4tXHRcdG50LVx1MDAzZWlwdjYgPSAoYm9vbClpcHY2O1xuIFx0Y3VyID0gZGVsaW0gKyAxO1xuIFxuIFx0aWYgKCpjdXIgIT0gMCkge1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0cG9sbC5oIGIvaW5jbHVkZS9saW51eC9uZXRwb2xsLmhcbmluZGV4IDFjNmIxZWVjNWVmZDYuLmVjMDgyMWE1YjAyZGIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaFxuKysrIGIvaW5jbHVkZS9saW51eC9uZXRwb2xsLmhcbkBAIC0xNiwxMSArMTYsNiBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91ZHAuaFx1MDAzZVxuIFxuLXVuaW9uIGluZXRfYWRkciB7XG4tXHRfX2JlMzJcdFx0aXA7XG4tXHRzdHJ1Y3QgaW42X2FkZHJcdGluNjtcbi19O1xuLVxuIHN0cnVjdCBuZXRwb2xsIHtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG4gXHRuZXRkZXZpY2VfdHJhY2tlciBkZXZfdHJhY2tlcjtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjM4OjIyLjM5MzQxODU5OFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY2MTA2OTczNjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZXRjb25zb2xlIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBgbmV0Y29uc29sZS5jYCBhbmQgYG5ldHBvbGwuaGAuIFRoZSBnaXN0IG9mIGl0IGlzIGEgcmVmYWN0b3Igb2YgaG93IElQIGFkZHJlc3NlcyBhbmQgdGhlaXIgZmFtaWxpZXMgYXJlIGhhbmRsZWQgd2l0aGluIG5ldGNvbnNvbGUuIFRoZXkndmUgeWFua2VkIHRoZSBgdW5pb24gaW5ldF9hZGRyYCBmcm9tIGBuZXRwb2xsLmhgIGFuZCBpbnRyb2R1Y2VkIGEgYHN0cnVjdCBpbmV0X2FkZHJgIGluIGBuZXRjb25zb2xlLmNgLCB3aGljaCBtYWtlcyBzZW5zZSBmb3IgYmV0dGVyIGVuY2Fwc3VsYXRpb24uIFRoZSBrZXkgYWRkaXRpb24gaXMgdGhlIGBmYW1pbHlgIGZpZWxkIHdpdGhpbiBgc3RydWN0IGluZXRfYWRkcmAgKEFGX1VOU1BFQywgQUZfSU5FVCwgQUZfSU5FVDYpLCBhbmQgaXQgbG9va3MgbGlrZSB0aGV5J3ZlIHJlcGxhY2VkIHRoYXQgYGlwdjZgIGJvb2xlYW4gZmxhZyBpbiBgbmV0Y29uc29sZV90YXJnZXRgIHdpdGggdGhlIGBmYW1pbHlgIGZpZWxkIGluIGJvdGggYGxvY2FsX2lwYCBhbmQgYHJlbW90ZV9pcGAuIFRoaXMgaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgc2hpZnQ7IGl0IGFsbG93cyBmb3IgaW5kZXBlbmRlbnQgZmFtaWx5IHRyYWNraW5nIGZvciBsb2NhbCBhbmQgcmVtb3RlIElQcywgYW5kIGl0IGxvb2tzIGxpa2UgdGhlcmUncyBzb21lIGNvbnNpc3RlbmN5IGNoZWNraW5nIGluIHRoZSBtaXggbm93LlxuXG5NeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgaXMgdGhpcyByZWFjaGFibGU/IEFuZCwgbW9yZSBpbXBvcnRhbnRseSwgaXMgaXQgZnV6emFibGU/IE5ldGNvbnNvbGUsIGFzIGEgY29yZSBrZXJuZWwgZmVhdHVyZSBmb3Igc2VuZGluZyBsb2dzIG92ZXIgVURQLCBpcyBjZXJ0YWlubHkgaW50ZXJlc3RpbmcgZnJvbSBhIHNlY3VyaXR5IHBlcnNwZWN0aXZlLiBJdCdzIGNvbmZpZ3VyZWQgZWl0aGVyIHZpYSBzeXNmcyAoY29uZmlnZnMpIG9yIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lLiBUaGUgZmFjdCB0aGF0IHN5c2ZzIGlzIHJvb3QtcmVhY2hhYmxlIGFuZCBzeXprYWxsZXIgY2FuIGludGVyYWN0IHdpdGggY29uZmlnZnMgaXMgYSBodWdlIHBsdXMuIFRoaXMgbWFrZXMgaXQgYSBncmVhdCB0YXJnZXQgaWYgdGhlcmUgYXJlIGJ1Z3MuXG5cblRoZSBjb2RlIGNoYW5nZXMgYXJlIHRvdWNoaW5nIHNldmVyYWwgaW1wb3J0YW50IGFyZWFzOiBgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZWAsIHRoZSBgKl9zdG9yZWAgZnVuY3Rpb25zIChzcGVjaWZpY2FsbHkgdGhlIG9uZXMgcmVsYXRlZCB0byBzZXR0aW5nIGxvY2FsIGFuZCByZW1vdGUgSVBzKSwgYG5ldGNvbnNfbmV0cG9sbF9zZXR1cGAsIGFuZCBgbmV0cG9sbF9zZW5kX3VkcGAuIFRoZXNlIGFyZSBhbGwgcHJpbWUgbG9jYXRpb25zIGZvciBidWdzLlxuXG5Ob3csIGxldCdzIHNlZSB3aGF0IHRoZSBjb25maWcgb3B0aW9ucyBhcmUgZm9yIG5ldGNvbnNvbGUuIEkgd2FudCB0byBjaGVjayBmb3IgdGhlIG9wdGlvbnMgYENPTkZJR19ORVRDT05TT0xFYCBhbmQgYENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUNgIChmb3IgY29uZmlnZnMgc3VwcG9ydCkgYXMgdGhleSBoYXZlIHRvIGJlIGVuYWJsZWQgdG8gZW5hYmxlIHRoZSBmZWF0dXJlcyB0aGF0IGFyZSBjaGFuZ2VkIGJ5IHRoZSBwYXRjaC4gSSdsbCB1c2UgYGdyZXBwZXJgIHRvIHNlYXJjaCBmb3IgdGhlbS4gVGhpcyB3aWxsIHRlbGwgbWUgaWYgdGhlIGFmZmVjdGVkIGNvZGUgcGF0aHMgYXJlIGFjdGl2ZSwgYW5kIGlmIHNvLCBob3cgYnJvYWRseSB1c2VkIHRoZXkgYXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDI5LCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzM0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6Mzg6MjkuMDA0MTE5NTM1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNDEwODE1NzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVENPTlNPTEVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZz0zMTg9Y29uZmlnIE1BQ1NFQ1xcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMjYtXFxuZHJpdmVycy9uZXQvS2NvbmZpZzozMjc6Y29uZmlnIE5FVENPTlNPTEVcXG5kcml2ZXJzL25ldC9LY29uZmlnLTMyOC1cXHR0cmlzdGF0ZSBcXFwiTmV0d29yayBjb25zb2xlIGxvZ2dpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctMzMzLVxcbmRyaXZlcnMvbmV0L0tjb25maWc6MzM0OmNvbmZpZyBORVRDT05TT0xFX0RZTkFNSUNcXG5kcml2ZXJzL25ldC9LY29uZmlnLTMzNS1cXHRib29sIFxcXCJEeW5hbWljIHJlY29uZmlndXJhdGlvbiBvZiBsb2dnaW5nIHRhcmdldHNcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTM0NC1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjM0NTpjb25maWcgTkVUQ09OU09MRV9FWFRFTkRFRF9MT0dcXG5kcml2ZXJzL25ldC9LY29uZmlnLTM0Ni1cXHRib29sIFxcXCJTZXQga2VybmVsIGV4dGVuZGVkIG1lc3NhZ2UgYnkgZGVmYXVsdFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctMzU0LVxcbmRyaXZlcnMvbmV0L0tjb25maWc6MzU1OmNvbmZpZyBORVRDT05TT0xFX1BSRVBFTkRfUkVMRUFTRVxcbmRyaXZlcnMvbmV0L0tjb25maWctMzU2LVxcdGJvb2wgXFxcIlByZXBlbmQga2VybmVsIHJlbGVhc2UgdmVyc2lvbiBpbiB0aGUgbWVzc2FnZSBieSBkZWZhdWx0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTozODozMS4wNDUyMDY3NDFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjAxNTM3Mzc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGlzIHRhc2s6XG5cbioqQW5hbHl6aW5nIE5FVENPTlNPTEUgRGVwZW5kZW5jaWVzIGluIEtjb25maWcqKlxuXG5BbHJpZ2h0LCB0aGUgb2JqZWN0aXZlIGlzIHByZXR0eSBjbGVhcjogZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzIGZvciBgTkVUQ09OU09MRWAuIE15IGZpcnN0IGluc3RpbmN0IGlzIGFsd2F5cyB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBUaGUgS2NvbmZpZyBmaWxlcyBhcmUgdGhlIGhlYXJ0IG9mIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHNvIHRoYXQncyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQuIFNwZWNpZmljYWxseSwgSSdsbCBnbyBzdHJhaWdodCB0byBgZHJpdmVycy9uZXQvS2NvbmZpZ2AuIFRoYXQncyB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIGJlZ2luIGxvb2tpbmcgZm9yIGBORVRDT05TT0xFYCBhbmQgdW5kZXJzdGFuZCB3aGF0IG5lZWRzIHRvIGJlIGVuYWJsZWQgb3IgaW4gcGxhY2UgZm9yIGl0IHRvIHdvcmsuIEkgZXhwZWN0IHRvIGZpbmQgc29tZSBgZGVwZW5kcyBvbmAgc3RhdGVtZW50cywgbWF5YmUgc29tZSBgc2VsZWN0YCBzdGF0ZW1lbnRzLCBhbmQgcGVyaGFwcyBldmVuIHNvbWUgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgbmV0d29yay1yZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBUaGlzIGluaXRpYWwgY2hlY2sgaW4gS2NvbmZpZyBzaG91bGQgdGVsbCBtZSB0aGUgcHJpbWFyeSBwcmVyZXF1aXNpdGVzIGJlZm9yZSBkaWdnaW5nIGRlZXBlciBpZiBuZWNlc3NhcnkuIEknbGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2Ugb3RoZXIgbmV0d29yayBkcml2ZXJzIHRoYXQgbWlnaHQgYmUgcmVxdWlyZWQsIHNwZWNpZmljIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb25zLCBvciBldmVuIG90aGVyIGtlcm5lbCBmZWF0dXJlcyB0aGF0IG5lZWQgdG8gYmUgYWN0aXZlLiBUaGlzIGlzIHRoZSBmaXJzdCBzdGVwIGluIHVuZGVyc3RhbmRpbmcgdGhlIGNvbXBsZXRlIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlIGZvciBgTkVUQ09OU09MRWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc0ODIsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTozODozNS4yNDY3NDY4N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTE3NzA3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUQ09OU09MRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L0tjb25maWc9MzE4PWNvbmZpZyBNQUNTRUNcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctMzI2LVxcbmRyaXZlcnMvbmV0L0tjb25maWc6MzI3OmNvbmZpZyBORVRDT05TT0xFXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMjgtXFx0dHJpc3RhdGUgXFxcIk5ldHdvcmsgY29uc29sZSBsb2dnaW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTMzMy1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjMzNDpjb25maWcgTkVUQ09OU09MRV9EWU5BTUlDXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMzUtXFx0Ym9vbCBcXFwiRHluYW1pYyByZWNvbmZpZ3VyYXRpb24gb2YgbG9nZ2luZyB0YXJnZXRzXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zNDQtXFxuZHJpdmVycy9uZXQvS2NvbmZpZzozNDU6Y29uZmlnIE5FVENPTlNPTEVfRVhURU5ERURfTE9HXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zNDYtXFx0Ym9vbCBcXFwiU2V0IGtlcm5lbCBleHRlbmRlZCBtZXNzYWdlIGJ5IGRlZmF1bHRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTM1NC1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjM1NTpjb25maWcgTkVUQ09OU09MRV9QUkVQRU5EX1JFTEVBU0VcXG5kcml2ZXJzL25ldC9LY29uZmlnLTM1Ni1cXHRib29sIFxcXCJQcmVwZW5kIGtlcm5lbCByZWxlYXNlIHZlcnNpb24gaW4gdGhlIG1lc3NhZ2UgYnkgZGVmYXVsdFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6Mzg6MzUuMjkxOTI3OTk1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE2MTgwODY0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnkgZm9yIGFuIGV4cGVydDpcblxuKipEaXZpbmcgaW50byB0aGUgTmV0d29yayBDb25maWd1cmF0aW9uKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgd2l0aCB0aGUgbmV0d29yayBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBkcml2ZXJzL25ldC9LY29uZmlnYCBmaWxlLiBJJ20gZm9jdXNpbmcgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDMyNyDigJMgdGhhdCdzIG9mdGVuIHdoZXJlIHRoZSBqdWljeSBiaXRzIGFyZSwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBjb3JlIG5ldHdvcmtpbmcgZmVhdHVyZXMgb3IgcGVyaGFwcyBhIHNwZWNpZmljIGRyaXZlciBJJ20gdHJ5aW5nIHRvIHVuZGVyc3RhbmQuIEknbSBleHBlY3RpbmcgdG8gZmluZCBlaXRoZXIgYSBoaWdoLWxldmVsIG92ZXJ2aWV3IG9mIGF2YWlsYWJsZSBuZXR3b3JrIGZlYXR1cmVzLCBwZXJoYXBzIHNvbWUgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgb3IgbWF5YmUgZXZlbiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBhIHBhcnRpY3VsYXIgbmV0d29yayBkcml2ZXIgb3IgdGVjaG5vbG9neS4gVGltZSB0byBjcmFjayBpdCBvcGVuIGFuZCBzZWUgd2hhdCByZXZlbGF0aW9ucyBsaW5lIDMyNyBob2xkcyEgTGV0J3Mgc2VlIHdoYXQgZ2VtcyB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzk5OSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjM4OjM4LjQ1MzczODgyNFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3OTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMzIwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzIwOlxcdFxcdHNlbGVjdCBDUllQVE9cXG4gMzIxOlxcdFxcdHNlbGVjdCBDUllQVE9fQUVTXFxuIDMyMjpcXHRcXHRzZWxlY3QgQ1JZUFRPX0dDTVxcbiAzMjM6XFx0XFx0c2VsZWN0IEdST19DRUxMU1xcbiAzMjQ6XFx0XFx0aGVscFxcbiAzMjU6XFx0XFx0ICAgTUFDc2VjIGlzIGFuIGVuY3J5cHRpb24gc3RhbmRhcmQgZm9yIEV0aGVybmV0LlxcbiAzMjY6XFx0XFxuIDMyNzpcXHRjb25maWcgTkVUQ09OU09MRVxcbiAzMjg6XFx0XFx0dHJpc3RhdGUgXFxcIk5ldHdvcmsgY29uc29sZSBsb2dnaW5nIHN1cHBvcnRcXFwiXFxuIDMyOTpcXHRcXHRkZXBlbmRzIG9uIFBSSU5US1xcbiAzMzA6XFx0XFx0aGVscFxcbiAzMzE6XFx0XFx0ICBJZiB5b3Ugd2FudCB0byBsb2cga2VybmVsIG1lc3NhZ2VzIG92ZXIgdGhlIG5ldHdvcmssIGVuYWJsZSB0aGlzLlxcbiAzMzI6XFx0XFx0ICBTZWUgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGNvbnNvbGUucnN0XFx1MDAzZSBmb3IgZGV0YWlscy5cXG4gMzMzOlxcdFxcbiAzMzQ6XFx0Y29uZmlnIE5FVENPTlNPTEVfRFlOQU1JQ1xcbiAzMzU6XFx0XFx0Ym9vbCBcXFwiRHluYW1pYyByZWNvbmZpZ3VyYXRpb24gb2YgbG9nZ2luZyB0YXJnZXRzXFxcIlxcbiAzMzY6XFx0XFx0ZGVwZW5kcyBvbiBORVRDT05TT0xFIFxcdTAwMjZcXHUwMDI2IFNZU0ZTIFxcdTAwMjZcXHUwMDI2IENPTkZJR0ZTX0ZTIFxcdTAwMjZcXHUwMDI2IFxcXFxcXG4gMzM3OlxcdFxcdFxcdFxcdCEoTkVUQ09OU09MRT15IFxcdTAwMjZcXHUwMDI2IENPTkZJR0ZTX0ZTPW0pXFxuIDMzODpcXHRcXHRzZWxlY3QgUFJJTlRLX0VYRUNVVElPTl9DVFhcXG4gMzM5OlxcdFxcdGhlbHBcXG4gMzQwOlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgYWJpbGl0eSB0byBkeW5hbWljYWxseSByZWNvbmZpZ3VyZSB0YXJnZXRcXG4gMzQxOlxcdFxcdCAgcGFyYW1ldGVycyAoaW50ZXJmYWNlLCBJUCBhZGRyZXNzZXMsIHBvcnQgbnVtYmVycywgTUFDIGFkZHJlc3NlcylcXG4gMzQyOlxcdFxcdCAgYXQgcnVudGltZSB0aHJvdWdoIGEgdXNlcnNwYWNlIGludGVyZmFjZSBleHBvcnRlZCB1c2luZyBjb25maWdmcy5cXG4gMzQzOlxcdFxcdCAgU2VlIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRjb25zb2xlLnJzdFxcdTAwM2UgZm9yIGRldGFpbHMuXFxuIDM0NDpcXHRcXG4gMzQ1OlxcdGNvbmZpZyBORVRDT05TT0xFX0VYVEVOREVEX0xPR1xcbiAzNDY6XFx0XFx0Ym9vbCBcXFwiU2V0IGtlcm5lbCBleHRlbmRlZCBtZXNzYWdlIGJ5IGRlZmF1bHRcXFwiXFxuIDM0NzpcXHRcXHRkZXBlbmRzIG9uIE5FVENPTlNPTEVcXG4gMzQ4OlxcdFxcdGRlZmF1bHQgblxcbiAzNDk6XFx0XFx0aGVscFxcbiAzNTA6XFx0XFx0ICBTZXQgZXh0ZW5kZWQgbG9nIHN1cHBvcnQgZm9yIG5ldGNvbnNvbGUgbWVzc2FnZS4gSWYgdGhpcyBvcHRpb24gaXNcXG4gMzUxOlxcdFxcdCAgc2V0LCBsb2cgbWVzc2FnZXMgYXJlIHRyYW5zbWl0dGVkIHdpdGggZXh0ZW5kZWQgbWV0YWRhdGEgaGVhZGVyIGluIGFcXG4gMzUyOlxcdFxcdCAgZm9ybWF0IHNpbWlsYXIgdG8gL2Rldi9rbXNnLiAgU2VlXFxuIDM1MzpcXHRcXHQgIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRjb25zb2xlLnJzdFxcdTAwM2UgZm9yIGRldGFpbHMuXFxuIDM1NDpcXHRcXG4gMzU1OlxcdGNvbmZpZyBORVRDT05TT0xFX1BSRVBFTkRfUkVMRUFTRVxcbiAzNTY6XFx0XFx0Ym9vbCBcXFwiUHJlcGVuZCBrZXJuZWwgcmVsZWFzZSB2ZXJzaW9uIGluIHRoZSBtZXNzYWdlIGJ5IGRlZmF1bHRcXFwiXFxuIDM1NzpcXHRcXHRkZXBlbmRzIG9uIE5FVENPTlNPTEVfRVhURU5ERURfTE9HXFxuIDM1ODpcXHRcXHRkZWZhdWx0IG5cXG4gMzU5OlxcdFxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6Mzg6MzguNDUzODI4MDMzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA0MTI0ODkyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIHRoZSBOZXRjb25zb2xlIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgYE5FVENPTlNPTEVgIGFuZCBgTkVUQ09OU09MRV9EWU5BTUlDYCBqdW1wIG91dCBhcyB0aGUga2V5IGNvbmZpZ3VyYXRpb25zLiBUaGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIHJldm9sdmUgYXJvdW5kIG1vZGlmaWNhdGlvbnMgdG8gSVAgYWRkcmVzcyBoYW5kbGluZyBhbmQgdmFsaWRhdGlvbiB3aXRoaW4gbmV0Y29uc29sZSwgc3BlY2lmaWNhbGx5IHRocm91Z2ggY2hhbmdlcyB0byBmdW5jdGlvbnMgbGlrZSBgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZWAsIGBsb2NhbF9pcF9zdG9yZWAsIGByZW1vdGVfaXBfc3RvcmVgLCBgbmV0Y29uc19uZXRwb2xsX3NldHVwYCwgYW5kIGBuZXRwb2xsX3NlbmRfdWRwYC4gSSBrbm93IHRoYXQgYGxvY2FsX2lwX3N0b3JlYCBhbmQgYHJlbW90ZV9pcF9zdG9yZWAgYXJlIHBhcnQgb2YgdGhlIGNvbmZpZ2ZzIGludGVyZmFjZSBmb3IgbmV0Y29uc29sZSwgd2hpY2ggaW1tZWRpYXRlbHkgc2NyZWFtcyBcImZ1enphYmxlXCIgZ2l2ZW4gU3l6a2FsbGVyJ3MgY2FwYWJpbGl0aWVzIHdpdGggY29uZmlnZnMuXG5cblRoZSBjaGFuZ2VzIGFwcGVhciBmdW5jdGlvbmFsLCBzbyB0aGlzIGlzIGFib3V0IG1vcmUgcm9idXN0IElQIHBhcnNpbmcgYW5kIHByb3BlciB0cmFja2luZyBvZiBJUCBmYW1pbGllcy4gRGVmaW5pdGVseSB3b3J0aCBhIGRlZXAgZnV6emluZyBkaXZlLlxuXG5NeSBtYWluIGZvY3VzIHJpZ2h0IG5vdyBpcyB0byBpZGVudGlmeSB0aGUgY3JpdGljYWwgc3ltYm9scyBmb3IgZnV6emluZy4gU28gZmFyLCBJJ20gdGhpbmtpbmc6IGBsb2NhbF9pcF9zdG9yZWAsIGByZW1vdGVfaXBfc3RvcmVgLCBgbmV0Y29uc19uZXRwb2xsX3NldHVwYCwgYW5kIGBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lYC4gVGhhdCBsYXN0IG9uZSBoYXMgbWUgdGhpbmtpbmcsIGNvdWxkIGl0IGJlIGNhbGxlZCBkdXJpbmcgbW9kdWxlIGxvYWQgb3Igd2hlbiBjcmVhdGluZyBjb25maWdmcyB0YXJnZXRzPyBJIG5lZWQgdG8gY2hlY2sgdGhlIGNhbGwgc2l0ZXMgZm9yIGBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lYCB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IGl0J3MgaW52b2tlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODgwOSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjM4OjQzLjQ5NTA3OTEyNFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMxMDIzNTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0Y29uc29sZV9wYXJzZXJfY21kbGluZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTEwMDE9c3RhdGljIHNzaXplX3QgZW5hYmxlZF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTA0OS1cXHRcXHQvKlxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMDUwOlxcdFxcdCAqIFNraXAgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZSgpIC0tIGFsbCB0aGUgYXR0cmlidXRlcyBhcmVcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTA1MS1cXHRcXHQgKiBhbHJlYWR5IGNvbmZpZ3VyZWQgdmlhIGNvbmZpZ2ZzLiBKdXN0IHByaW50IHRoZW0gb3V0Llxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI1MDg9X19yZWxlYXNlcyhcXHUwMDI2dGFyZ2V0X2xpc3RfbG9jaylcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNTEyLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNTEzOnN0YXRpYyBpbnQgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjaGFyICpvcHQpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI1MTQte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI2MDE9c3RhdGljIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqYWxsb2NfcGFyYW1fdGFyZ2V0KGNoYXIgKnRhcmdldF9jb25maWcsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjYyOC1cXHQvKiBQYXJzZSBwYXJhbWV0ZXJzIGFuZCBzZXR1cCBuZXRwb2xsICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI2Mjk6XFx0ZXJyID0gbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZShudCwgdGFyZ2V0X2NvbmZpZyk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2MzAtXFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6Mzg6NDMuNTM4MTg4MjJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA1NDU1OTY1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIEtlcm5lbCBWdWxuZXJhYmlsaXRpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gdHJhY2luZyB0aGUgcG90ZW50aWFsIGF0dGFjayBzdXJmYWNlIGhlcmUsIHNwZWNpZmljYWxseSBpbiByZWxhdGlvbiB0byBgbmV0Y29uc29sZWAuIEknbSBzZWVpbmcgdGhhdCBgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZWAgZ2V0cyBjYWxsZWQgdGhyb3VnaCBgYWxsb2NfcGFyYW1fdGFyZ2V0YCwgd2hpY2ggaXMgaXRzZWxmIGludm9rZWQgZHVyaW5nIG1vZHVsZSBpbml0aWFsaXphdGlvbiBvciBzb21ldGhpbmcgc2ltaWxhciwgbGlrZSBpbml0Y2FsbHMuIEFoLCB3YWl0LCBjb3JyZWN0aW9uIOKAkyBsb29raW5nIGNsb3NlciwgYGFsbG9jX3BhcmFtX3RhcmdldGAgaXMgYWN0dWFsbHkgY2FsbGVkIGZyb20gYG5ldGNvbnNvbGVfaW5pdGAuXG5cblRoZSBrZXkgdGhpbmcgaXMsIHNpbmNlIHN5emthbGxlciBpcyBhYmxlIHRvIGxvYWQgbW9kdWxlcywgb3IgbW9yZSBzdWJ0bHkgcGFzcyBtb2R1bGUgcGFyYW1ldGVycywgaXQgbWlnaHQgYmUgYWJsZSB0byB0cmlnZ2VyIHRoaXMgYG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmVgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIGNvbmZpZ2ZzIGNvdWxkIGJlIGFuIGVudHJ5IHBvaW50LiBIb3dldmVyLCBgbG9jYWxfaXBfc3RvcmVgIGFuZCBgcmVtb3RlX2lwX3N0b3JlYCAqYXJlKiBkZWZpbml0ZWx5IHJlYWNoYWJsZSB0aHJvdWdoIGNvbmZpZ2ZzOyB0aGF0J3MgZ29vZCB0byBrZWVwIGluIG1pbmQsIGFuZCB0byByZXZpZXcgdGhhdCBhdHRhY2sgcGF0aC5cblxuQnV0IGxldCdzIHNoaWZ0IGZvY3VzIHRvIGBuZXRjb25zX25ldHBvbGxfc2V0dXBgLiBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjYWxsIGdyYXBoIGZvciB0aGF0IGZ1bmN0aW9uLCBhbmQgc2VlIHdoZXJlIGVsc2UgaXQgaXMgY29ubmVjdGVkIHRvLiBJdCBjb3VsZCBiZSBhbiBpbnRlcmVzdGluZyBhcmVhIG9mIHN0dWR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjcyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjM4OjQ3LjU5Mjc1MDg1NVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ2NjY2MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0Y29uc19uZXRwb2xsX3NldHVwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9NDQ0PXN0YXRpYyBpbnQgbmV0Y29uc190YWtlX2lwdjQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy00NzItXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjQ3MzpzdGF0aWMgaW50IG5ldGNvbnNfbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy00NzQte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTU2Mz1zdGF0aWMgdm9pZCByZXN1bWVfdGFyZ2V0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNTcxLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo1NzI6XFx0aWYgKG5ldGNvbnNfbmV0cG9sbF9zZXR1cChudCkpIHtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNTczLVxcdFxcdC8qIG5ldHBvbGwgZmFpbHMgc2V0dXAgb25jZSwgZG8gbm90IHRyeSBhZ2Fpbi4gKi9cXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xMDAxPXN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEwNjItXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEwNjM6XFx0XFx0cmV0ID0gbmV0Y29uc19uZXRwb2xsX3NldHVwKG50KTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTA2NC1cXHRcXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjYwMT1zdGF0aWMgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICphbGxvY19wYXJhbV90YXJnZXQoY2hhciAqdGFyZ2V0X2NvbmZpZyxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjM5LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNjQwOlxcdGVyciA9IG5ldGNvbnNfbmV0cG9sbF9zZXR1cChudCk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2NDEtXFx0aWYgKGVycikge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTozODo0Ny42Mzc0MjI5M1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzY4NjI2NzkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBOZXR3b3JrIFBvbGxpbmcgU2V0dXAqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYG5ldGNvbnNfbmV0cG9sbF9zZXR1cGAgZnVuY3Rpb24sIHRyeWluZyB0byB1bmRlcnN0YW5kIGl0cyByb2xlLiBJdCBsb29rcyBsaWtlIGl0J3MgY2FsbGVkIGZyb20gYSBmZXcga2V5IHBsYWNlczogYGVuYWJsZWRfc3RvcmVgIHdpdGhpbiB0aGUgY29uZmlnZnMgZnJhbWV3b3JrLCBgcmVzdW1lX3RhcmdldGAsIGFuZCBgYWxsb2NfcGFyYW1fdGFyZ2V0YC4gR2l2ZW4gdGhpcyBkaXN0cmlidXRpb24sIGBlbmFibGVkX3N0b3JlYCBzZWVtcyBsaWtlIGEgcGFydGljdWxhcmx5IGdvb2Qgc3ltYm9sIHRvIHplcm8gaW4gb24sIGFsb25nIHdpdGggYGxvY2FsX2lwX3N0b3JlYCBhbmQgYHJlbW90ZV9pcF9zdG9yZWAsIGFzIHRoZXkncmUgY2xlYXJseSByZWxhdGVkLlxuXG5IbW0sIEknbSBhbHNvIHNlZWluZyBzb21lIG1vZGlmaWNhdGlvbnMgdG8gYG5ldHBvbGxfc2VuZF91ZHBgLiBUaGF0IGZ1bmN0aW9uIGlzLCBvZiBjb3Vyc2UsIGNyaXRpY2FsIGZvciBhY3R1YWxseSB0cmFuc21pdHRpbmcgbWVzc2FnZXMuIFNvLCBteSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBxdWlja2x5IGlkZW50aWZ5IGFsbCB0aGUgY2FsbGVycyBvZiBgbmV0cG9sbF9zZW5kX3VkcGAgdG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZSBvZiBpdHMgdXNhZ2UgY29udGV4dC4gR290dGEgdW5kZXJzdGFuZCBob3cgZGF0YSBmbG93cyBpbiBhbmQgb3V0IGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDYzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjM4OjUyLjAwNjA1MjAxMloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMxNjI2MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0cG9sbF9zZW5kX3VkcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIxNDU9c3RhdGljIHZvaWQgcHVzaF9pcHY2KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjE2OC1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjE2OTpzdGF0aWMgaW50IG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTcwLVxcdFxcdFxcdCAgICBpbnQgbGVuKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMDYtLyoqXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIyMDc6ICogc2VuZF91ZHAgLSBXcmFwcGVyIGZvciBuZXRwb2xsX3NlbmRfdWRwIHRoYXQgY291bnRzIGVycm9yc1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjA4LSAqIEBudDogdGFyZ2V0IHRvIHNlbmQgbWVzc2FnZSB0b1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMTEtICpcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjIxMjogKiBDYWxscyBuZXRwb2xsX3NlbmRfdWRwIGFuZCBjbGFzc2lmaWVzIHRoZSByZXR1cm4gdmFsdWUuIElmIGFuIGVycm9yXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMTMtICogb2NjdXJyZWQgaXQgaW5jcmVtZW50cyBzdGF0aXN0aWNzIGluIG50LVxcdTAwM2VzdGF0cyBhY2NvcmRpbmdseS5cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjIxNDogKiBPbmx5IGNhbGxzIG5ldHBvbGxfc2VuZF91ZHAgaWYgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQyBpcyBkaXNhYmxlZC5cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIxNS0gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjIxNj1zdGF0aWMgdm9pZCBzZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csIGludCBsZW4pXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMTcte1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMjE4OlxcdGludCByZXN1bHQgPSBuZXRwb2xsX3NlbmRfdWRwKG50LCBtc2csIGxlbik7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMTktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjM4OjUyLjA0OTIyMDIxN1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTAwOTc5Nzc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV0Y29uc29sZSBEYXRhIEZsb3cqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJJ20gc2VlaW5nLCB0aGUgYHNlbmRfdWRwYCBmdW5jdGlvbiBpcyBhdCB0aGUgY29yZSBvZiB0aGUgbmV0Y29uc29sZSBkYXRhIHRyYW5zbWlzc2lvbi4gSXQncyBjYWxsZWQgYnkgYHdyaXRlX2V4dF9tc2dgIGFuZCBgd3JpdGVfbXNnYCwgd2hpY2ggaW4gdHVybiBhcmUgaW52b2tlZCBieSBgbmV0Y29uc29sZV9leHRfZW1pdGAgYW5kIGBuZXRjb25zb2xlX2VtaXRgLiBUaGVzZSBsYXR0ZXIgZnVuY3Rpb25zIGFyZSByZWdpc3RlcmVkIGFzIGNvbnNvbGUgd3JpdGUgY2FsbGJhY2tzLCBtZWFuaW5nIHRoZXkncmUgdHJpZ2dlcmVkIHdoZW5ldmVyIHNvbWV0aGluZyBpcyB3cml0dGVuIHRvIHRoZSBrZXJuZWwgbG9nLCBiZSBpdCB0aHJvdWdoIGAvZGV2L2ttc2dgIG9yIGEgc2ltcGxlIGBwcmludGtgLiBUaGF0IG1ha2VzIHRoZSB3aG9sZSBzeXN0ZW0gYWNjZXNzaWJsZSBhbmQgc29tZXRoaW5nIHRvIGtlZXAgYW4gZXllIG9uLlxuXG5Ob3csIGxldCdzIHBpbnBvaW50IHRoZSBrZXkgcGxheWVycyBpbiB0aGlzIHByb2Nlc3MuIEknbSBmb2N1c2luZyBvbiB0aGUgZm9sbG93aW5nIHN5bWJvbHM6IGBsb2NhbF9pcF9zdG9yZWAsIGByZW1vdGVfaXBfc3RvcmVgLCBgZW5hYmxlZF9zdG9yZWAsIGBuZXRjb25zX25ldHBvbGxfc2V0dXBgLCBgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZWAsIGFuZCBgbmV0cG9sbF9zZW5kX3VkcGAuIFRoZXNlIGFyZSBsaWtlbHkgY3J1Y2lhbCBmb3IgY29uZmlndXJhdGlvbiwgbmV0d29yayBzZXR1cCwgYW5kIGFjdHVhbCB0cmFuc21pc3Npb24uXG5cbkZpbmFsbHksIGEga2V5IHF1ZXN0aW9uIGNvbWVzIHRvIG1pbmQ6IERvZXMgYE5FVENPTlNPTEVfRFlOQU1JQ2AgY29uZmlndXJhdGlvbiBuZWVkIHRvIGJlIGVuYWJsZWQgZm9yIGBsb2NhbF9pcF9zdG9yZWAgYW5kIGByZW1vdGVfaXBfc3RvcmVgIHRvIGZ1bmN0aW9uIGNvcnJlY3RseT8gVGhpcyBpcyBhbiBpbXBvcnRhbnQgcXVlc3Rpb24uIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBkZXBlbmRlbmN5OyB1bmRlcnN0YW5kaW5nIHRoYXQgd2lsbCBiZSB2ZXJ5IGltcG9ydGFudCBmb3IgdGhpcyBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMjEwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjM4OjU2LjU1MDIwMTg4NVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYwNDc5NTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibG9jYWxfaXBfc3RvcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xMjAxPXN0YXRpYyBzc2l6ZV90IHJlbW90ZV9wb3J0X3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMjIyLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMjIzOnN0YXRpYyBzc2l6ZV90IGxvY2FsX2lwX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMjI0LVxcdFxcdHNpemVfdCBjb3VudClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6Mzg6NTYuNTk2MjU0OFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDE1NzY1MjAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNvbmZpZ2ZzIEludmVzdGlnYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGVzZSBhcmUgZGVmaW5pdGVseSBjb25maWdmcyBjYWxsYmFja3MuIEFuZCwgSSByZWNhbGwsIHRob3NlIGFyZSBvbmx5IGNvbXBpbGVkIHdoZW4gYENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUNgIGlzIGVuYWJsZWQuIFRpbWUgdG8gZG91YmxlLWNoZWNrIGlmIGBORVRDT05TT0xFYCByZWxpZXMgb24gYW55dGhpbmcgZWxzZSB0aGF0IG1pZ2h0IG5lZWQgb3VyIGF0dGVudGlvbiBmb3IgZW5hYmxlbWVudC4gSXQgbG9va3MgbGlrZSBpdCBkZXBlbmRzIG9uIGBQUklOVEtgLCB3aGljaCwgaW4gcHJhY3RpY2UsIGlzIGFsbW9zdCBhbHdheXMgZW5hYmxlZC4gQWhhLCBgTkVUQ09OU09MRV9EWU5BTUlDYCBoYXMgaXRzIG93biBkZXBlbmRlbmNpZXM6IGBORVRDT05TT0xFIFx1MDAyNlx1MDAyNiBTWVNGUyBcdTAwMjZcdTAwMjYgQ09ORklHRlNfRlNgLiBSaWdodCwgc28gdG8gZ2V0IHRoaXMgd29ya2luZywgd2UnbGwgbmVlZCB0byBlbmFibGUgYENPTkZJR0ZTX0ZTYC4gTGV0J3MganVzdCBtYWtlIHN1cmUgdGhlcmUgYXJlbid0IGFueSBnb3RjaGFzIHdpdGggYENPTkZJR0ZTX0ZTYCBpdHNlbGYuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODIwLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjM5OjAwLjAxMjAyMjIxMloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgyMjEwNTI5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ09ORklHRlNfRlNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvY29uZmlnZnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL2NvbmZpZ2ZzL0tjb25maWc6Mjpjb25maWcgQ09ORklHRlNfRlNcXG5mcy9jb25maWdmcy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlVzZXJzcGFjZS1kcml2ZW4gY29uZmlndXJhdGlvbiBmaWxlc3lzdGVtXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTozOTowMS44MzQxMzU2NTFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgyOTAxMjg3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDb25maWd1cmluZyB0aGUgTmV0d29yayBDb25zb2xlIGFuZCBJUHY2IGZvciB0aGUgVXBkYXRlKipcblxuT2theSwgc28gd2UncmUgZGVhbGluZyB3aXRoIGEgYENPTkZJR0ZTX0ZTYCBpc3N1ZSBoZXJlLCBhbmQgaXQncyBhIHRyaXN0YXRlLiBHaXZlbiB0aGF0LCBJIG5lZWQgdG8gaW5jbHVkZSBgTkVUQ09OU09MRWAsIGBORVRDT05TT0xFX0RZTkFNSUNgLCBhbmQgYENPTkZJR0ZTX0ZTYCBpbiBgRW5hYmxlQ29uZmlnc2AuIFRoYXQgY292ZXJzIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgd2UgbmVlZC5cblxuTm93LCBsZXQncyBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxhdGVkIGNvbmZpZ3MgdGhhdCBtaWdodCBiZSB1c2VmdWwuIEFoLCBgTkVUQ09OU09MRV9FWFRFTkRFRF9MT0dgLiBOb3QgZXNzZW50aWFsLCBidXQgcHJvYmFibHkgYSBnb29kIGlkZWEgdG8gZW5hYmxlIGl0IGZvciBtb3JlIGluLWRlcHRoIGxvZ2dpbmcgZHVyaW5nIHRlc3RpbmcgYW5kIGRlYnVnZ2luZy5cblxuUmlnaHQsIHRoZSBwYXRjaCBzcGVjaWZpY2FsbHkgdG91Y2hlcyBJUHY2IGhhbmRsaW5nLCBzbyBgSVBWNmAgaXMgZGVmaW5pdGVseSBhIHJlcXVpcmVtZW50LiBMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhhdCBpbiBgbmV0L2lwdjYvS2NvbmZpZ2AgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcuIEdvdHRhIGJlIHRob3JvdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjE2NSwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTozOTowNS42NjMxNTY2MjlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NzE0MDA4NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQVjZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvS2NvbmZpZy01LVxcbm5ldC9pcHY2L0tjb25maWc6NjptZW51Y29uZmlnIElQVjZcXG5uZXQvaXB2Ni9LY29uZmlnLTctXFx0Ym9vbCBcXFwiVGhlIElQdjYgcHJvdG9jb2xcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnPTE5PWlmIElQVjZcXG5uZXQvaXB2Ni9LY29uZmlnLTIwLVxcbm5ldC9pcHY2L0tjb25maWc6MjE6Y29uZmlnIElQVjZfUk9VVEVSX1BSRUZcXG5uZXQvaXB2Ni9LY29uZmlnLTIyLVxcdGJvb2wgXFxcIklQdjY6IFJvdXRlciBQcmVmZXJlbmNlIChSRkMgNDE5MSkgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMzAtXFxubmV0L2lwdjYvS2NvbmZpZzozMTpjb25maWcgSVBWNl9ST1VURV9JTkZPXFxubmV0L2lwdjYvS2NvbmZpZy0zMi1cXHRib29sIFxcXCJJUHY2OiBSb3V0ZSBJbmZvcm1hdGlvbiAoUkZDIDQxOTEpIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTM4LVxcbm5ldC9pcHY2L0tjb25maWc6Mzk6Y29uZmlnIElQVjZfT1BUSU1JU1RJQ19EQURcXG5uZXQvaXB2Ni9LY29uZmlnLTQwLVxcdGJvb2wgXFxcIklQdjY6IEVuYWJsZSBSRkMgNDQyOSBPcHRpbWlzdGljIERBRFxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWc9MTAyPWNvbmZpZyBJTkVUNl9JUENPTVBcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMTExLVxcbm5ldC9pcHY2L0tjb25maWc6MTEyOmNvbmZpZyBJUFY2X01JUDZcXG5uZXQvaXB2Ni9LY29uZmlnLTExMy1cXHR0cmlzdGF0ZSBcXFwiSVB2NjogTW9iaWxpdHlcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTExOS1cXG5uZXQvaXB2Ni9LY29uZmlnOjEyMDpjb25maWcgSVBWNl9JTEFcXG5uZXQvaXB2Ni9LY29uZmlnLTEyMS1cXHR0cmlzdGF0ZSBcXFwiSVB2NjogSWRlbnRpZmllciBMb2NhdG9yIEFkZHJlc3NpbmcgKElMQSlcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnPTE0Nj1jb25maWcgSU5FVDZfVFVOTkVMXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTE0OS1cXG5uZXQvaXB2Ni9LY29uZmlnOjE1MDpjb25maWcgSVBWNl9WVElcXG5uZXQvaXB2Ni9LY29uZmlnLTE1MS1cXHR0cmlzdGF0ZSBcXFwiVmlydHVhbCAoc2VjdXJlKSBJUHY2OiB0dW5uZWxpbmdcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTE2MS1cXG5uZXQvaXB2Ni9LY29uZmlnOjE2Mjpjb25maWcgSVBWNl9TSVRcXG5uZXQvaXB2Ni9LY29uZmlnLTE2My1cXHR0cmlzdGF0ZSBcXFwiSVB2NjogSVB2Ni1pbi1JUHY0IHR1bm5lbCAoU0lUIGRyaXZlcilcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTE3Ni1cXG5uZXQvaXB2Ni9LY29uZmlnOjE3Nzpjb25maWcgSVBWNl9TSVRfNlJEXFxubmV0L2lwdjYvS2NvbmZpZy0xNzgtXFx0Ym9vbCBcXFwiSVB2NjogSVB2NiBSYXBpZCBEZXBsb3ltZW50ICg2UkQpXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0xOTUtXFxubmV0L2lwdjYvS2NvbmZpZzoxOTY6Y29uZmlnIElQVjZfTkRJU0NfTk9ERVRZUEVcXG5uZXQvaXB2Ni9LY29uZmlnLTE5Ny1cXHRib29sXFxubmV0L2lwdjYvS2NvbmZpZy0xOTgtXFxubmV0L2lwdjYvS2NvbmZpZzoxOTk6Y29uZmlnIElQVjZfVFVOTkVMXFxubmV0L2lwdjYvS2NvbmZpZy0yMDAtXFx0dHJpc3RhdGUgXFxcIklQdjY6IElQLWluLUlQdjYgdHVubmVsIChSRkMyNDczKVxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjA5LVxcbm5ldC9pcHY2L0tjb25maWc6MjEwOmNvbmZpZyBJUFY2X0dSRVxcbm5ldC9pcHY2L0tjb25maWctMjExLVxcdHRyaXN0YXRlIFxcXCJJUHY2OiBHUkUgdHVubmVsXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yMjctXFxubmV0L2lwdjYvS2NvbmZpZzoyMjg6Y29uZmlnIElQVjZfRk9VXFxubmV0L2lwdjYvS2NvbmZpZy0yMjktXFx0dHJpc3RhdGVcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjMxLVxcbm5ldC9pcHY2L0tjb25maWc6MjMyOmNvbmZpZyBJUFY2X0ZPVV9UVU5ORUxcXG5uZXQvaXB2Ni9LY29uZmlnLTIzMy1cXHR0cmlzdGF0ZVxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yMzYtXFxubmV0L2lwdjYvS2NvbmZpZzoyMzc6Y29uZmlnIElQVjZfTVVMVElQTEVfVEFCTEVTXFxubmV0L2lwdjYvS2NvbmZpZy0yMzgtXFx0Ym9vbCBcXFwiSVB2NjogTXVsdGlwbGUgUm91dGluZyBUYWJsZXNcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTI0Mi1cXG5uZXQvaXB2Ni9LY29uZmlnOjI0Mzpjb25maWcgSVBWNl9TVUJUUkVFU1xcbm5ldC9pcHY2L0tjb25maWctMjQ0LVxcdGJvb2wgXFxcIklQdjY6IHNvdXJjZSBhZGRyZXNzIGJhc2VkIHJvdXRpbmdcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTI1Ni1cXG5uZXQvaXB2Ni9LY29uZmlnOjI1Nzpjb25maWcgSVBWNl9NUk9VVEVcXG5uZXQvaXB2Ni9LY29uZmlnLTI1OC1cXHRib29sIFxcXCJJUHY2OiBtdWx0aWNhc3Qgcm91dGluZ1xcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjY0LVxcbm5ldC9pcHY2L0tjb25maWc6MjY1OmNvbmZpZyBJUFY2X01ST1VURV9NVUxUSVBMRV9UQUJMRVNcXG5uZXQvaXB2Ni9LY29uZmlnLTI2Ni1cXHRib29sIFxcXCJJUHY2OiBtdWx0aWNhc3QgcG9saWN5IHJvdXRpbmdcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTI3OC1cXG5uZXQvaXB2Ni9LY29uZmlnOjI3OTpjb25maWcgSVBWNl9QSU1TTV9WMlxcbm5ldC9pcHY2L0tjb25maWctMjgwLVxcdGJvb2wgXFxcIklQdjY6IFBJTS1TTSB2ZXJzaW9uIDIgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjg1LVxcbm5ldC9pcHY2L0tjb25maWc6Mjg2OmNvbmZpZyBJUFY2X1NFRzZfTFdUVU5ORUxcXG5uZXQvaXB2Ni9LY29uZmlnLTI4Ny1cXHRib29sIFxcXCJJUHY2OiBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIGVuY2Fwc3VsYXRpb24gc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjk5LVxcbm5ldC9pcHY2L0tjb25maWc6MzAwOmNvbmZpZyBJUFY2X1NFRzZfSE1BQ1xcbm5ldC9pcHY2L0tjb25maWctMzAxLVxcdGJvb2wgXFxcIklQdjY6IFNlZ21lbnQgUm91dGluZyBITUFDIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTMxMS1cXG5uZXQvaXB2Ni9LY29uZmlnOjMxMjpjb25maWcgSVBWNl9TRUc2X0JQRlxcbm5ldC9pcHY2L0tjb25maWctMzEzLVxcdGRlZl9ib29sIHlcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMzE2LVxcbm5ldC9pcHY2L0tjb25maWc6MzE3OmNvbmZpZyBJUFY2X1JQTF9MV1RVTk5FTFxcbm5ldC9pcHY2L0tjb25maWctMzE4LVxcdGJvb2wgXFxcIklQdjY6IFJQTCBTb3VyY2UgUm91dGluZyBIZWFkZXIgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMzI3LVxcbm5ldC9pcHY2L0tjb25maWc6MzI4OmNvbmZpZyBJUFY2X0lPQU02X0xXVFVOTkVMXFxubmV0L2lwdjYvS2NvbmZpZy0zMjktXFx0Ym9vbCBcXFwiSVB2NjogSU9BTSBQcmUtYWxsb2NhdGVkIFRyYWNlIGluc2VydGlvbiBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTozOTowNy4yMzQ1NzQ2MjRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkxMDM3NTcyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgTmV0d29yayBDb25zb2xlIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvbmZpZ3VyYXRpb24gYW5kIGBJUFY2YCBpcyBkZWZpbmVkIGFzIGEgYm9vbGVhbiB2YWx1ZS4gVGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLiBOb3csIEkgd2FudCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBMZXQncyBzZWUuLi4gSSd2ZSBnb3QgYE5FVENPTlNPTEVgLCBgTkVUQ09OU09MRV9EWU5BTUlDYCwgYENPTkZJR0ZTX0ZTYCwgYW5kIG9mIGNvdXJzZSwgYElQVjZgIGFnYWluLiBJJ20gZ29pbmcgdG8ga2VlcCB0aGVzZSBpbiBtaW5kIGFzIHBvdGVudGlhbGx5IHJlbGF0ZWQuXG5cbk15IGF0dGVudGlvbiBpcyBhbHNvIGRyYXduIHRvIHNvbWUgc3BlY2lmaWMgc3ltYm9sczogYGxvY2FsX2lwX3N0b3JlYCwgYHJlbW90ZV9pcF9zdG9yZWAsIGBlbmFibGVkX3N0b3JlYCwgYG5ldGNvbnNfbmV0cG9sbF9zZXR1cGAsIGBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lYCwgYW5kIGBuZXRwb2xsX3NlbmRfdWRwYC4gVGhlc2UgYXJlIGxpa2VseSBrZXkgZWxlbWVudHMgaW4gdGhlIG5ldHdvcmsgY29uc29sZSdzIG9wZXJhdGlvbi5cblxuQ3J1Y2lhbGx5LCBJIG5lZWQgdG8gbWFrZSBzdXJlIGBuZXRwb2xsX3NlbmRfdWRwYCBpc24ndCB1c2luZyB0aGUgc3RhdGljIGlubGluZSBvcHRpbWl6YXRpb24uIFRoYXQgY291bGQgaW1wYWN0IGl0cyBiZWhhdmlvciBhbmQgSSB3YW50IHRvIHJ1bGUgdGhhdCBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MDE3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjM5OjExLjE0NDk1MzAzNFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ1Njg5NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0cG9sbF9zZW5kX3VkcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIxNDU9c3RhdGljIHZvaWQgcHVzaF9pcHY2KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjE2OC1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjE2OTpzdGF0aWMgaW50IG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTcwLVxcdFxcdFxcdCAgICBpbnQgbGVuKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMDYtLyoqXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIyMDc6ICogc2VuZF91ZHAgLSBXcmFwcGVyIGZvciBuZXRwb2xsX3NlbmRfdWRwIHRoYXQgY291bnRzIGVycm9yc1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjA4LSAqIEBudDogdGFyZ2V0IHRvIHNlbmQgbWVzc2FnZSB0b1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMTEtICpcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjIxMjogKiBDYWxscyBuZXRwb2xsX3NlbmRfdWRwIGFuZCBjbGFzc2lmaWVzIHRoZSByZXR1cm4gdmFsdWUuIElmIGFuIGVycm9yXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMTMtICogb2NjdXJyZWQgaXQgaW5jcmVtZW50cyBzdGF0aXN0aWNzIGluIG50LVxcdTAwM2VzdGF0cyBhY2NvcmRpbmdseS5cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjIxNDogKiBPbmx5IGNhbGxzIG5ldHBvbGxfc2VuZF91ZHAgaWYgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQyBpcyBkaXNhYmxlZC5cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIxNS0gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjIxNj1zdGF0aWMgdm9pZCBzZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csIGludCBsZW4pXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMTcte1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMjE4OlxcdGludCByZXN1bHQgPSBuZXRwb2xsX3NlbmRfdWRwKG50LCBtc2csIGxlbik7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMTktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjM5OjExLjE4OTUzODI1OVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NjQyMzE1MTc5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgU3RhdGljIEZ1bmN0aW9ucyBpbiBOZXRjb25zb2xlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0aGUgZ3VpZGVsaW5lIGlzIHByZXR0eSBjbGVhcjogd2Ugd2FudCB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnkgcG9pbnRzIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuIFRoZSBnb2FsIGhlcmUgaXMgdG8gbWFpbnRhaW4gYSBjbGVhciBBUEkgYm91bmRhcnksIEkgdW5kZXJzdGFuZC4gSSBzZWUgYG5ldHBvbGxfc2VuZF91ZHBgIGFuZCB0aGF0IGltbWVkaWF0ZWx5IHBvcHMgb3V0IGFzIGEgcG90ZW50aWFsIGlzc3VlIGJlY2F1c2UgaXQncyBzdGF0aWMuIEJ1dCwgaXQncyBub3QgaW5saW5lLiBTbywgdGhhdCdzIGEgcG9pbnQgaW4gaXRzIGZhdm9yLCBhbHRob3VnaCBJIHN0aWxsIG5lZWQgdG8gY29uc2lkZXIgaXQncyB2aXNpYmlsaXR5LiBUaGVuIEkgc2NhbiBgbG9jYWxfaXBfc3RvcmVgIGFuZCBgcmVtb3RlX2lwX3N0b3JlYCwgYWxzbyBzdGF0aWMsIGJ1dCB0aGVpciB1c2UgYXMgZnVuY3Rpb24gcG9pbnRlcnMgd2l0aGluIGEgc3RydWN0IG1lYW5zIHRoZXkgYXJlIHVubGlrZWx5IHRvIGJlIGlubGluZWQgYW5kIHRoZSBjb21waWxlciB3b3VsZCBuZWVkIHRoZWlyIGFkZHJlc3MuIEdvb2QsIHRoYXTigJlzIGFub3RoZXIgb25lIHRoYXQgcHJvYmFibHkgd29u4oCZdCBjYXVzZSBpc3N1ZXMuXG5cbmBuZXRjb25zX25ldHBvbGxfc2V0dXBgIGlzIGFsc28gc3RhdGljLCBidXQgdGhlIHNoZWVyIHNpemUgb2YgdGhlIHRoaW5nIGFuZCBpdHMgbXVsdGlwbGUgY2FsbCBzaXRlcyBtZWFuIHRoZSBjb21waWxlciBwcm9iYWJseSAqd29uJ3QqIGlubGluZSBpdCwgYW5kIGl0J3MgbGVzcyBvZiBhIHByb2JsZW0uIE5vdywgSSdtIGdldHRpbmcgdG8gYG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmVgLiBJdCdzIHN0YXRpYyBhbmQgZ2V0cyBjYWxsZWQgZnJvbSBhIHN0YXRpYyBmdW5jdGlvbiBpdHNlbGYsIGBhbGxvY19wYXJhbV90YXJnZXRgLCB3aGljaCBpcyBhbHNvIHN0YXRpYywgYW5kIHRoYXQgZ2V0cyBjYWxsZWQgZnJvbSBgbmV0Y29uc29sZV9pbml0YC4gVGhpcyBpcyBhIHN0cmluZyBvZiBzdGF0aWMgY2FsbHMgYW5kIHRoYXQncyBjb25jZXJuaW5nLiBUaGF0IG9uZSBpcyBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgaW5saW5pbmcuXG5cblNvLCBJIG5lZWQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMgYXZhaWxhYmxlLCBsZXQncyBzZWUuLi4gb2ggd2FpdCBgbmV0Y29uc29sZV9pbml0YCwgdGhhdCBsb29rZWQgcHJvbWlzaW5nLCBidXQgbm9wZSwgaXQncyBgc3RhdGljIGludCBfX2luaXQgbmV0Y29uc29sZV9pbml0KHZvaWQpYC4gRGFtbi4gRm9yIGNvbmZpZ2ZzLCB0aGUgYF9zdG9yZWAgYW5kIGBfc2hvd2AgZnVuY3Rpb25zIGFyZSBzdGF0aWMsIGJ1dCB0aGVpciBhZGRyZXNzZXMgYXJlIGJlaW5nIHRha2VuIHNvIHRoZXkgc2hvdWxkbid0IGJlIGlubGluZWQuIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGFjdHVhbCBwdWJsaWMgQVBJIGZvciB0aGlzIHRoaW5nLiBJIHNob3VsZCBjaGVjayB0aGUgZnVuY3Rpb25zIHdpdGhpbiBgbmV0Y29uc29sZV90YXJnZXRfaXRlbV9vcHNgIG9yIHNpbWlsYXIgc3RydWN0dXJlcywgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgZXh0ZXJuYWxseSB2aXNpYmxlIEFQSS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ3OTcsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6NDA6MTcuNjEyNjkyMzFaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NjIzMTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxvY2FsX2lwX3N0b3JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTIwMT1zdGF0aWMgc3NpemVfdCByZW1vdGVfcG9ydF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTIyMi1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTIyMzpzdGF0aWMgc3NpemVfdCBsb2NhbF9pcF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZixcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTIyNC1cXHRcXHRzaXplX3QgY291bnQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjQwOjE3LjY1OTMyMTQ4NVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDE1Njk3OTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQsIGdlYXJlZCB0b3dhcmQgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk5hdmlnYXRpbmcgdGhlIENvZGViYXNlOiBUYXJnZXRlZCBFeHBsb3JhdGlvbioqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IHRoaXMgcGFydGljdWxhciBmdW5jdGlvbiBpcyBiZWluZyB1dGlsaXplZC4gSW5zdGVhZCBvZiBhIGJyb2FkIHN3ZWVwLCBJJ20gZ29pbmcgdG8gYWRvcHQgYSBtb3JlIGZvY3VzZWQgYXBwcm9hY2guIExldCdzIG5vdCBnZXQgbG9zdCBpbiB0aGUgd2VlZHMuIEknbGwgemVybyBpbiBvbiB0aGUgdmljaW5pdHkgb2YgbGluZSAxMjIzLiBUaGF0IHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIHN0YXJ0aW5nIHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgaXRzIHVzYWdlLiBJ4oCZbGwgbWFrZSBhIG5vdGUgb2YgdGhpcyBsaW5lIG51bWJlciBmb3IgcXVpY2sgcmVmZXJlbmNlIGFuZCB0byBtYWtlIHN1cmUgSSBkb24ndCBvdmVybG9vayBhbnkgcmVsYXRlZCBhcmVhcy4gSXQncyBhIHF1aWNrIGFuZCBlZmZpY2llbnQgd2F5IHRvIHN0YXJ0IGJ1aWxkaW5nIGEgbWVudGFsIG1hcCBvZiB0aGUgY2FsbCBzdGFjayB3aXRob3V0IGdldHRpbmcgYm9nZ2VkIGRvd24gaW4gaXJyZWxldmFudCBkZXRhaWxzLiBUaGlzIHRhcmdldGVkIHJlYWRpbmcgYWxsb3dzIGZvciBiZXR0ZXIgY29tcHJlaGVuc2lvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU2NjUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTo0MDoyMC42NzUwMjMzNTlaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMxNTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjIwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjIwOlxcdFxcdHJldHVybiByZXQ7XFxuMTIyMTpcXHR9XFxuMTIyMjpcXHRcXG4xMjIzOlxcdHN0YXRpYyBzc2l6ZV90IGxvY2FsX2lwX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxcbjEyMjQ6XFx0XFx0XFx0c2l6ZV90IGNvdW50KVxcbjEyMjU6XFx0e1xcbjEyMjY6XFx0XFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcXG4xMjI3OlxcdFxcdHNzaXplX3QgcmV0ID0gLUVJTlZBTDtcXG4xMjI4OlxcdFxcbjEyMjk6XFx0XFx0ZHluYW1pY19uZXRjb25zb2xlX211dGV4X2xvY2soKTtcXG4xMjMwOlxcdFxcdGlmIChudC1cXHUwMDNlc3RhdGUgPT0gU1RBVEVfRU5BQkxFRCkge1xcbjEyMzE6XFx0XFx0XFx0cHJfZXJyKFxcXCJ0YXJnZXQgKCVzKSBpcyBlbmFibGVkLCBkaXNhYmxlIHRvIHVwZGF0ZSBwYXJhbWV0ZXJzXFxcXG5cXFwiLFxcbjEyMzI6XFx0XFx0XFx0ICAgICAgIGNvbmZpZ19pdGVtX25hbWUoXFx1MDAyNm50LVxcdTAwM2Vncm91cC5jZ19pdGVtKSk7XFxuMTIzMzpcXHRcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuMTIzNDpcXHRcXHR9XFxuMTIzNTpcXHRcXG4xMjM2OlxcdFxcdGlmIChuZXRwb2xsX3BhcnNlX2lwX2FkZHIoYnVmLCBcXHUwMDI2bnQtXFx1MDAzZWxvY2FsX2lwKSBcXHUwMDNjIDApXFxuMTIzNzpcXHRcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuMTIzODpcXHRcXG4xMjM5OlxcdFxcdHJldCA9IGNvdW50O1xcbjEyNDA6XFx0b3V0X3VubG9jazpcXG4xMjQxOlxcdFxcdGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF91bmxvY2soKTtcXG4xMjQyOlxcdFxcdHJldHVybiByZXQ7XFxuMTI0MzpcXHR9XFxuMTI0NDpcXHRcXG4xMjQ1OlxcdHN0YXRpYyBzc2l6ZV90IHJlbW90ZV9pcF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZixcXG4xMjQ2OlxcdFxcdCAgICAgICBzaXplX3QgY291bnQpXFxuMTI0NzpcXHR7XFxuMTI0ODpcXHRcXHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0pO1xcbjEyNDk6XFx0XFx0c3NpemVfdCByZXQgPSAtRUlOVkFMO1xcbjEyNTA6XFx0XFxuMTI1MTpcXHRcXHRkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXhfbG9jaygpO1xcbjEyNTI6XFx0XFx0aWYgKG50LVxcdTAwM2VzdGF0ZSA9PSBTVEFURV9FTkFCTEVEKSB7XFxuMTI1MzpcXHRcXHRcXHRwcl9lcnIoXFxcInRhcmdldCAoJXMpIGlzIGVuYWJsZWQsIGRpc2FibGUgdG8gdXBkYXRlIHBhcmFtZXRlcnNcXFxcblxcXCIsXFxuMTI1NDpcXHRcXHRcXHQgICAgICAgY29uZmlnX2l0ZW1fbmFtZShcXHUwMDI2bnQtXFx1MDAzZWdyb3VwLmNnX2l0ZW0pKTtcXG4xMjU1OlxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4xMjU2OlxcdFxcdH1cXG4xMjU3OlxcdFxcbjEyNTg6XFx0XFx0aWYgKG5ldHBvbGxfcGFyc2VfaXBfYWRkcihidWYsIFxcdTAwMjZudC1cXHUwMDNlcmVtb3RlX2lwKSBcXHUwMDNjIDApXFxuMTI1OTpcXHRcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjQwOjIwLjY3NTE1NjQ0OVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDIxOTYzMjYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBJJ20gcmVhZHkgdG8gZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBhIHN1bW1hcnkgZnJvbSBhIGZpcnN0LXBlcnNvbiwgZXhwZXJ0IHBlcnNwZWN0aXZlOlxuXG4qKlBpbnBvaW50aW5nIHRoZSBTb3VyY2UqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGRvIGlzIGVzdGFibGlzaCB0aGUgY29udGV4dC4gVGhpcyBpcyBhYm91dCByZWdpc3RyYXRpb24sIHNvIHRoZSBjcml0aWNhbCBxdWVzdGlvbiBpcyAqd2hlcmUqIGFyZSB0aGVzZSB0aGluZ3MgcmVnaXN0ZXJlZD8gV2hhdCBzeXN0ZW1zLCBkYXRhYmFzZXMsIG9yIGp1cmlzZGljdGlvbnMgYXJlIHdlIHRhbGtpbmcgYWJvdXQ/IFRoZSBzcGVjaWZpY2l0eSBvZiB0aGUgcmVnaXN0cmF0aW9uIHByb2Nlc3MgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIG5leHQgc3RlcHMuIFdpdGhvdXQga25vd2luZyB0aGUgcmVnaXN0cmF0aW9uIGJvZHkgb3IgbWV0aG9kLCBhbnkgYW5hbHlzaXMgd291bGQgYmUgaW5jb21wbGV0ZS4gTGV0J3Mgc2VlIGlmIHRoYXQgZGV0YWlsIGlzIGFwcGFyZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjQ5NywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTo0MDoyMy42OTcxMjE3ODJaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NTMyMDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR0ZTX0FUVFJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xNTQyPXN0YXRpYyBzc2l6ZV90IHN5c2RhdGFfY3B1X25yX2VuYWJsZWRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE1NzQtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE1NzU6Q09ORklHRlNfQVRUUih1c2VyZGF0dW1fLCB2YWx1ZSk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE1NzY6Q09ORklHRlNfQVRUUihzeXNkYXRhXywgY3B1X25yX2VuYWJsZWQpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNTc3OkNPTkZJR0ZTX0FUVFIoc3lzZGF0YV8sIHRhc2tuYW1lX2VuYWJsZWQpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNTc4OkNPTkZJR0ZTX0FUVFIoc3lzZGF0YV8sIHJlbGVhc2VfZW5hYmxlZCk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE1Nzk6Q09ORklHRlNfQVRUUihzeXNkYXRhXywgbXNnaWRfZW5hYmxlZCk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE1ODAtXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTY1MT1zdGF0aWMgY29uc3Qgc3RydWN0IGNvbmZpZ19pdGVtX3R5cGUgdXNlcmRhdGFfdHlwZSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNjU3LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNjU4OkNPTkZJR0ZTX0FUVFIoLCBlbmFibGVkKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTY1OTpDT05GSUdGU19BVFRSKCwgZXh0ZW5kZWQpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNjYwOkNPTkZJR0ZTX0FUVFIoLCBkZXZfbmFtZSk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE2NjE6Q09ORklHRlNfQVRUUigsIGxvY2FsX3BvcnQpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNjYyOkNPTkZJR0ZTX0FUVFIoLCByZW1vdGVfcG9ydCk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE2NjM6Q09ORklHRlNfQVRUUigsIGxvY2FsX2lwKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTY2NDpDT05GSUdGU19BVFRSKCwgcmVtb3RlX2lwKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTY2NTpDT05GSUdGU19BVFRSX1JPKCwgbG9jYWxfbWFjKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTY2NjpDT05GSUdGU19BVFRSKCwgcmVtb3RlX21hYyk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE2Njc6Q09ORklHRlNfQVRUUigsIHJlbGVhc2UpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNjY4OkNPTkZJR0ZTX0FUVFJfUk8oLCB0cmFuc21pdF9lcnJvcnMpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNjY5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTo0MDoyMy43NDM2NTg2NTdaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMwMjU3OTI3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5ldGNvbnNvbGUgQ29kZSBQYXRoKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgbmV0Y29uc29sZSBjb2RlIGFuZCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNyaXRpY2FsIGV4ZWN1dGlvbiBwYXRoLiBJdCBsb29rcyBsaWtlIGBsb2NhbF9pcF9zdG9yZWAgYW5kIGByZW1vdGVfaXBfc3RvcmVgIGFyZSBkZWZpbml0ZWx5IGZ1bmN0aW9uIHBvaW50ZXJzIHV0aWxpemVkIGJ5IGBDT05GSUdGU19BVFRSYCwgYW5kIHRoZXkgYXJlbid0IGlubGluZWQsIHdoaWNoIGlzIGhlbHBmdWwuIGBlbmFibGVkX3N0b3JlYCBpcyBhbm90aGVyIG5vbi1pbmxpbmVkIGZ1bmN0aW9uIHRvIGtlZXAgYW4gZXllIG9uLiBJbnRlcmVzdGluZywgYG5ldGNvbnNfbmV0cG9sbF9zZXR1cGAgZ2V0cyBjYWxsZWQgZnJvbSB3aXRoaW4gYGVuYWJsZWRfc3RvcmVgLlxuXG5Ob3cgSSdtIGxvb2tpbmcgZnVydGhlciBkb3duIHRoZSBjYWxsIHN0YWNrLiBgbmV0cG9sbF9zZW5kX3VkcGAgaXMgc3RhdGljLCB3aGljaCBjYW4gc29tZXRpbWVzIGJlIGEgcmVkIGZsYWcsIGJ1dCBpdCBhcHBlYXJzIHRvIGJlIGEgc2l6ZWFibGUgZnVuY3Rpb24uIExldCdzIHNlZS4uLiBgbmV0cG9sbF9zZW5kX3VkcGAgZ2V0cyBjYWxsZWQgZnJvbSBgc2VuZF91ZHBgLiBPa2F5LCBgc2VuZF91ZHBgIHRoZW4gZmVlZHMgaW50byBgd3JpdGVfZXh0X21zZ2AgYW5kIGB3cml0ZV9tc2dgLiBBaGEhIFRoZXNlIHR3byBmdW5jdGlvbnMsIGB3cml0ZV9leHRfbXNnYCBhbmQgYHdyaXRlX21zZ2AsIGFyZSByZWdpc3RlcmVkIHdpdGhpbiBgc3RydWN0IGNvbnNvbGUgbmV0Y29uc29sZV9leHRgIGFuZCBgc3RydWN0IGNvbnNvbGUgbmV0Y29uc29sZWAsIHJlc3BlY3RpdmVseS4gVGhhdOKAmXMgdGhlIGtleS4gVGhpcyBtYWtlcyBgd3JpdGVfZXh0X21zZ2AgYW5kIGB3cml0ZV9tc2dgIGV4Y2VsbGVudCBjYW5kaWRhdGVzIGZvciBkZWVwZXIgaW5zcGVjdGlvbiBhbmQgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MTk3LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTczLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjQwOjI4LjA0NjI0MDE3NVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU4MDUyOTUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIndyaXRlX2V4dF9tc2dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTo0MDoyOC4wOTIwNTMxNjFaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI3NDU3MDkyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLiBNeSBmaXJzdCB0aG91Z2h0IGlzOlxuXG4qKkNoZWNraW5nIENvbnNvbGUgV3JpdGUgRnVuY3Rpb24gTm9tZW5jbGF0dXJlKipcblxuSG9sZCBvbiBhIHNlY29uZCwgYmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIHRoaXMgcHJvYmxlbSwgSSBzaG91bGQganVzdCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgZXhhY3QgbmFtZXMgb2YgdGhlIGNvbnNvbGUgd3JpdGUgZnVuY3Rpb25zLiBJJ3ZlIHVzZWQgdGhlbSBjb3VudGxlc3MgdGltZXMsIGJ1dCBpdCdzIGFsd2F5cyBnb29kIHRvIGhhdmUgYSBzcGVjaWZpYyBtZW1vcnkgdG8gcmVmZXIgdG8uIEkgZG9uJ3Qgd2FudCB0byBnZXQgdHJpcHBlZCB1cCBvbiBzb21ldGhpbmcgdHJpdmlhbCBsaWtlIGEgY2FwaXRhbGl6YXRpb24gaXNzdWUgb3IgYSBzbGlnaHRseSBkaWZmZXJlbnQgbmFtaW5nIGNvbnZlbnRpb24gdGhhdCBJJ20gdXNlZCB0by4gQmV0dGVyIHRvIGNvbmZpcm0gdGhlIHN5bnRheCBhbmQgYmUgY2VydGFpbiBvZiB0aGUgZm91bmRhdGlvbiBiZWZvcmUgYnVpbGRpbmcgYW55dGhpbmcgZnVydGhlciBvbiB0b3Agb2YgaXQuIExldCBtZSBqdXN0IGdsYW5jZSBhdCB0aGUgcmVsZXZhbnQgZG9jdW1lbnRhdGlvbiBvciBhbiBleGFtcGxlIHNuaXBwZXQuLi4geWVwLCBqdXN0IGEgcXVpY2sgcmVmcmVzaGVyIHRvIG1ha2Ugc3VyZSBJJ20gb24gdGhlIHJpZ2h0IHRyYWNrIG5hbWluZy13aXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzY4MSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjQwOjMxLjM2NjYyNjUxN1oiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU0MDc2MzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IGNvbnNvbGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xMTI9c3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpuZXRjb25zb2xlX3dxO1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTExNy0gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTE4OnN0YXRpYyBzdHJ1Y3QgY29uc29sZSBuZXRjb25zb2xlX2V4dCwgbmV0Y29uc29sZTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTE5LVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI0NTk9c3RhdGljIHZvaWQgbmV0Y29uc29sZV93cml0ZShzdHJ1Y3QgbmJjb25fd3JpdGVfY29udGV4dCAqd2N0eHQsIGJvb2wgZXh0ZW5kZWQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQ4Ni1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjQ4NzpzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3dyaXRlX2V4dChzdHJ1Y3QgY29uc29sZSAqY29uIF9fYWx3YXlzX3VudXNlZCxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQ4OC1cXHRcXHRcXHRcXHQgc3RydWN0IG5iY29uX3dyaXRlX2NvbnRleHQgKndjdHh0KVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0OTItXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI0OTM6c3RhdGljIHZvaWQgbmV0Y29uc29sZV93cml0ZV9iYXNpYyhzdHJ1Y3QgY29uc29sZSAqY29uIF9fYWx3YXlzX3VudXNlZCxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQ5NC1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmJjb25fd3JpdGVfY29udGV4dCAqd2N0eHQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQ5OC1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjQ5OTpzdGF0aWMgdm9pZCBuZXRjb25zb2xlX2RldmljZV9sb2NrKHN0cnVjdCBjb25zb2xlICpjb24gX19hbHdheXNfdW51c2VkLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNTAwLVxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgKmZsYWdzKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yNTAxPV9fYWNxdWlyZXMoXFx1MDAyNnRhcmdldF9saXN0X2xvY2spXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjUwNS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjUwNjpzdGF0aWMgdm9pZCBuZXRjb25zb2xlX2RldmljZV91bmxvY2soc3RydWN0IGNvbnNvbGUgKmNvbiBfX2Fsd2F5c191bnVzZWQsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI1MDctXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIGZsYWdzKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI2NjM9c3RhdGljIHZvaWQgZnJlZV9wYXJhbV90YXJnZXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjc0LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNjc1OnN0YXRpYyBzdHJ1Y3QgY29uc29sZSBuZXRjb25zb2xlX2V4dCA9IHtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjY3Ni1cXHQubmFtZSA9IFxcXCJuZXRjb25fZXh0XFxcIixcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjgzLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNjg0OnN0YXRpYyBzdHJ1Y3QgY29uc29sZSBuZXRjb25zb2xlID0ge1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjg1LVxcdC5uYW1lID0gXFxcIm5ldGNvblxcXCIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjQwOjMxLjQyMjA0MDU3MVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTA5MDM3MDUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipVbnBhY2tpbmcgTmV0Y29uc29sZSBXcml0ZSBGdW5jdGlvbnMqKlxuXG5SaWdodCwgc28gSSdtIGRpZ2dpbmcgaW50byBgbmV0Y29uc29sZV93cml0ZV9leHRgIGFuZCBgbmV0Y29uc29sZV93cml0ZV9iYXNpY2AuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgY2FsbCBzdGFjay4gSGFuZyBvbi4uLiBpc24ndCBgbmV0Y29uc29sZV93cml0ZWAgdGhlIGNvcmUgZnVuY3Rpb24gdGhhdCBldmVudHVhbGx5IGdldHMgZG93biB0byBgc2VuZF91ZHBgPyBMZXQncyBxdWlja2x5IHZlcmlmeSB0aGF0LiBHb3R0YSBtYWtlIHN1cmUgSSdtIHJlbWVtYmVyaW5nIHRoZSBjb250cm9sIGZsb3cgY29ycmVjdGx5IGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyIGRvd24gdGhpcyByYWJiaXQgaG9sZS4gSSByZWFsbHkgd2FudCB0byBlbnN1cmUgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2tzIGlzIHNvbGlkIGJlZm9yZSBJIHN0YXJ0IGxvb2tpbmcgYXQgdGhlIG1vcmUgY29tcGxleCBpbnRlcmFjdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NDk4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6NDA6MzQuOTMxMDc5OTkzWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzczMTMzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRjb25zb2xlX3dyaXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjQzOD1zdGF0aWMgdm9pZCBzZW5kX21zZ191ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0NTItLyoqXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI0NTM6ICogbmV0Y29uc29sZV93cml0ZSAtIEdlbmVyaWMgZnVuY3Rpb24gdG8gc2VuZCBhIG1zZyB0byBhbGwgdGFyZ2V0c1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDU0LSAqIEB3Y3R4dDogbmJjb24gd3JpdGUgY29udGV4dFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0NTgtICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI0NTk6c3RhdGljIHZvaWQgbmV0Y29uc29sZV93cml0ZShzdHJ1Y3QgbmJjb25fd3JpdGVfY29udGV4dCAqd2N0eHQsIGJvb2wgZXh0ZW5kZWQpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0NjAte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0ODYtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI0ODc6c3RhdGljIHZvaWQgbmV0Y29uc29sZV93cml0ZV9leHQoc3RydWN0IGNvbnNvbGUgKmNvbiBfX2Fsd2F5c191bnVzZWQsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0ODgtXFx0XFx0XFx0XFx0IHN0cnVjdCBuYmNvbl93cml0ZV9jb250ZXh0ICp3Y3R4dClcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQ4OS17XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI0OTA6XFx0bmV0Y29uc29sZV93cml0ZSh3Y3R4dCwgdHJ1ZSk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0OTEtfVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDkyLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNDkzOnN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfd3JpdGVfYmFzaWMoc3RydWN0IGNvbnNvbGUgKmNvbiBfX2Fsd2F5c191bnVzZWQsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0OTQtXFx0XFx0XFx0XFx0ICAgc3RydWN0IG5iY29uX3dyaXRlX2NvbnRleHQgKndjdHh0KVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDk1LXtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjQ5NjpcXHRuZXRjb25zb2xlX3dyaXRlKHdjdHh0LCBmYWxzZSk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0OTctfVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI2NzU9c3RhdGljIHN0cnVjdCBjb25zb2xlIG5ldGNvbnNvbGVfZXh0ID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2NzctXFx0LmZsYWdzID0gQ09OX0VOQUJMRUQgfCBDT05fRVhURU5ERUQgfCBDT05fTkJDT04gfCBDT05fTkJDT05fQVRPTUlDX1VOU0FGRSxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjY3ODpcXHQud3JpdGVfdGhyZWFkID0gbmV0Y29uc29sZV93cml0ZV9leHQsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI2Nzk6XFx0LndyaXRlX2F0b21pYyA9IG5ldGNvbnNvbGVfd3JpdGVfZXh0LFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjgwLVxcdC5kZXZpY2VfbG9jayA9IG5ldGNvbnNvbGVfZGV2aWNlX2xvY2ssXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjY4ND1zdGF0aWMgc3RydWN0IGNvbnNvbGUgbmV0Y29uc29sZSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjg2LVxcdC5mbGFncyA9IENPTl9FTkFCTEVEIHwgQ09OX05CQ09OIHwgQ09OX05CQ09OX0FUT01JQ19VTlNBRkUsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI2ODc6XFx0LndyaXRlX3RocmVhZCA9IG5ldGNvbnNvbGVfd3JpdGVfYmFzaWMsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI2ODg6XFx0LndyaXRlX2F0b21pYyA9IG5ldGNvbnNvbGVfd3JpdGVfYmFzaWMsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2ODktXFx0LmRldmljZV9sb2NrID0gbmV0Y29uc29sZV9kZXZpY2VfbG9jayxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6NDA6MzQuOTc0ODE3ODU5WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwODcyNjI1MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZXRjb25zb2xlIENvZGUgUGF0aCoqXG5cbk9rYXksIHNvIEknbSB0cmFjaW5nIHRoZSBleGVjdXRpb24gcGF0aCBoZXJlIGZvciB0aGlzIG5ldGNvbnNvbGUgZnVuY3Rpb25hbGl0eS4gVGhlIGluaXRpYWwgZW50cnkgcG9pbnRzIGFyZSBgbmV0Y29uc29sZV93cml0ZV9leHRgIGFuZCBgbmV0Y29uc29sZV93cml0ZV9iYXNpY2AsIGJ1dCB0aGV5IGJvdGggZnVubmVsIGRvd24gdG8gYG5ldGNvbnNvbGVfd3JpdGVgLiBUaGF0IHRoZW4gY2FsbHMgYHNlbmRfbXNnX3VkcGAsIHdoaWNoIGluIHR1cm4gY2FsbHMgYHNlbmRfdWRwYCBhbmQgZmluYWxseSwgYG5ldHBvbGxfc2VuZF91ZHBgLiBUaGlzIGBuZXRwb2xsX3NlbmRfdWRwYCBmdW5jdGlvbiBpcyB0aGUgb25lIHRoZSBwYXRjaCBpcyBtb2RpZnlpbmcuIFRoZXJlZm9yZSwgdGhhdCdzIHdoZXJlIEkgbmVlZCB0byBmb2N1cyBteSBhdHRlbnRpb24uIEl0IHNlZW1zIGxpa2UgYSBnb29kIGZvY3VzIHN5bWJvbC5cblxuTGV0IG1lIGp1c3QgcXVpY2tseSB2ZXJpZnkgaWYgYG5ldHBvbGxfc2VuZF91ZHBgIGlzIGFuIGlubGluZSBmdW5jdGlvbi4gQWgsIG5vLCBpdCdzIGRlZmluZWQgYXMgYHN0YXRpYyBpbnQgbmV0cG9sbF9zZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csIGludCBsZW4pYCwgc28gaXQncyBub3QgaW5saW5lZCwgd2hpY2ggc2ltcGxpZmllcyB0aGluZ3MgYSBiaXQuXG5cblRoZXJlZm9yZSwgbXkgY29yZSBmb2N1cyBzeW1ib2xzIGZvciBmdXJ0aGVyIGludmVzdGlnYXRpb24gYXJlOiBgbG9jYWxfaXBfc3RvcmVgLCBgcmVtb3RlX2lwX3N0b3JlYCwgYGVuYWJsZWRfc3RvcmVgLCBgbmV0Y29uc19uZXRwb2xsX3NldHVwYCwgYG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmVgIGFuZCBlc3BlY2lhbGx5LCBgbmV0cG9sbF9zZW5kX3VkcGAuXG5cbk5vdywgSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uczogYE5FVENPTlNPTEVgLCBgTkVUQ09OU09MRV9EWU5BTUlDYCwgYENPTkZJR0ZTX0ZTYCBhbmQgYElQVjZgLlxuXG5JIHNob3VsZCBwcm9iYWJseSBjb25maXJtIGluIHdoaWNoIGZpbGUgYG5ldHBvbGxfc2VuZF91ZHBgIGlzIGxvY2F0ZWQgLSBpcyBpdCBpbiBgZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jYCBvciBpbiBgbmV0L2NvcmUvbmV0cG9sbC5jYD8gV2FpdCBhIG1pbnV0ZSwgdGhlIHBhdGNoIGl0c2VsZiBpcyBtb2RpZnlpbmcgYG5ldHBvbGxfc2VuZF91ZHBgIHdpdGhpbiBgZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jYC4gUmlnaHQsIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGUgcGF0Y2ggbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTQ3NiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTo0MDo0MS4wNjIwODI2OFoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ3Mjg0NzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0cG9sbF9zZW5kX3VkcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIxNDU9c3RhdGljIHZvaWQgcHVzaF9pcHY2KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjE2OC1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjE2OTpzdGF0aWMgaW50IG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTcwLVxcdFxcdFxcdCAgICBpbnQgbGVuKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMDYtLyoqXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIyMDc6ICogc2VuZF91ZHAgLSBXcmFwcGVyIGZvciBuZXRwb2xsX3NlbmRfdWRwIHRoYXQgY291bnRzIGVycm9yc1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjA4LSAqIEBudDogdGFyZ2V0IHRvIHNlbmQgbWVzc2FnZSB0b1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMTEtICpcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjIxMjogKiBDYWxscyBuZXRwb2xsX3NlbmRfdWRwIGFuZCBjbGFzc2lmaWVzIHRoZSByZXR1cm4gdmFsdWUuIElmIGFuIGVycm9yXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMTMtICogb2NjdXJyZWQgaXQgaW5jcmVtZW50cyBzdGF0aXN0aWNzIGluIG50LVxcdTAwM2VzdGF0cyBhY2NvcmRpbmdseS5cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjIxNDogKiBPbmx5IGNhbGxzIG5ldHBvbGxfc2VuZF91ZHAgaWYgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQyBpcyBkaXNhYmxlZC5cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIxNS0gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjIxNj1zdGF0aWMgdm9pZCBzZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csIGludCBsZW4pXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMTcte1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMjE4OlxcdGludCByZXN1bHQgPSBuZXRwb2xsX3NlbmRfdWRwKG50LCBtc2csIGxlbik7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMTktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjQwOjQxLjEwNjgxNTU2NVoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDI4NzYwMzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipBbmFseXppbmcgS2VybmVsIE5ldHdvcmsgQ29uc29sZSBDaGFuZ2VzKipcblxuQWxyaWdodCwgc28gdGhlIGNsdWUgaXMgcG9pbnRpbmcgbWUgZGlyZWN0bHkgdG8gYGRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY2AuIFRoYXQncyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBuZXR3b3JrIGNvbnNvbGUgaW1wbGVtZW50YXRpb24uIEkgZmlndXJlZCBpdCB3b3VsZCBiZSBzb21ld2hlcmUgaW4gdGhlIG5ldHdvcmsgY29kZSwgYnV0IHRoaXMgY29uZmlybXMgdGhlIHNwZWNpZmljIGZpbGUuXG5cbldhaXQgYSBzZWNvbmQuLi4gdGhlIHBhdGNoIGlzbid0ICpqdXN0KiB0b3VjaGluZyBgbmV0Y29uc29sZS5jYC4gSXQncyBhbHNvIG1vZGlmeWluZyBgbmV0cG9sbF9wYXJzZV9pcF9hZGRyYC4gVGhhdCdzIGltcG9ydGFudC4gSSBuZWVkIHRvIGJlIGNhcmVmdWwgbm90IHRvIG1pc3MgYW55IGluZGlyZWN0IGRlcGVuZGVuY2llcyBvciBzaWRlIGVmZmVjdHMgcmVsYXRlZCB0byBJUCBhZGRyZXNzIHBhcnNpbmcgd2l0aGluIHRoaXMgY29udGV4dC4gSSdsbCBhZGQgYG5ldHBvbGxfcGFyc2VfaXBfYWRkcmAgdG8gbXkgbGlzdCBvZiBmb2N1cyBzeW1ib2xzLiBJdCdzIGEga2V5IHBhcnQgb2YgdGhlIHB1enpsZS4gSSBjYW4ndCBhZmZvcmQgdG8gb3Zlcmxvb2sgdGhhdCBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA2MTQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTo0MDo0NC41MzU1NzkyNjVaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MzI0ODE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldHBvbGxfcGFyc2VfaXBfYWRkclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTcxMj1zdGF0aWMgdm9pZCBuZXRjb25zb2xlX3ByaW50X2Jhbm5lcihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTczNy0gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NzM4OnN0YXRpYyBpbnQgbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGNvbnN0IGNoYXIgKnN0ciwgc3RydWN0IGluZXRfYWRkciAqYWRkcilcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNzM5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xMjIzPXN0YXRpYyBzc2l6ZV90IGxvY2FsX2lwX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEyMzUtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEyMzY6XFx0aWYgKG5ldHBvbGxfcGFyc2VfaXBfYWRkcihidWYsIFxcdTAwMjZudC1cXHUwMDNlbG9jYWxfaXApIFxcdTAwM2MgMClcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTIzNy1cXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTI0NT1zdGF0aWMgc3NpemVfdCByZW1vdGVfaXBfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTI1Ny1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTI1ODpcXHRpZiAobmV0cG9sbF9wYXJzZV9pcF9hZGRyKGJ1ZiwgXFx1MDAyNm50LVxcdTAwM2VyZW1vdGVfaXApIFxcdTAwM2MgMClcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTI1OS1cXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjUxMz1zdGF0aWMgaW50IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY2hhciAqb3B0KVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI1MzQtXFx0XFx0KmRlbGltID0gMDtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjUzNTpcXHRcXHRpZiAobmV0cG9sbF9wYXJzZV9pcF9hZGRyKGN1ciwgXFx1MDAyNm50LVxcdTAwM2Vsb2NhbF9pcCkgXFx1MDAzYyAwKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNTM2LVxcdFxcdFxcdGdvdG8gcGFyc2VfZmFpbGVkO1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI1NzctXFx0KmRlbGltID0gMDtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjU3ODpcXHRpZiAobmV0cG9sbF9wYXJzZV9pcF9hZGRyKGN1ciwgXFx1MDAyNm50LVxcdTAwM2VyZW1vdGVfaXApIFxcdTAwM2MgMClcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjU3OS1cXHRcXHRnb3RvIHBhcnNlX2ZhaWxlZDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6NDA6NDQuNTgxOTA4MzgxWiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgwMjg5MjgyMzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgUHJpb3JpdGl6YXRpb246IEFuYWx5emluZyBhIEtlcm5lbCBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kLCByaWdodCBvZmYgdGhlIGJhdCwgYG5ldHBvbGxfcGFyc2VfaXBfYWRkcmAganVtcHMgb3V0IGF0IG1lLiBJdCdzIHN0YXRpYywgd2hpY2ggaXMgdXN1YWxseSBhIHNpZ24gdGhhdCBpdOKAmXMgaXNvbGF0ZWQsIGJ1dCBpdCdzIGJlaW5nIGNhbGxlZCBmcm9tICptdWx0aXBsZSogbG9jYXRpb25zLiBUaGF0IG1ha2VzIGl0IGEgc29saWQgZm9jdXMgc3ltYm9sIGZvciBmdXp6aW5nLlxuXG5MZXQncyBicmVhayBkb3duIHRoZSBjaGFuZ2VzLiBUaGUgcGF0Y2ggaXMgcmVmaW5pbmcgaG93IGBuZXRjb25zb2xlYCBtYW5hZ2VzIElQIGFkZHJlc3MgZmFtaWxpZXMuIEluc3RlYWQgb2YganVzdCBhIHNpbmdsZSBgaXB2NmAgZmxhZywgaXQncyBub3cgdHJhY2tpbmcgdGhlIGFkZHJlc3MgZmFtaWx5IChBRl9JTkVULCBBRl9JTkVUNiwgb3IgQUZfVU5TUEVDKSBzZXBhcmF0ZWx5IGZvciBsb2NhbCBhbmQgcmVtb3RlIElQcy4gVGhpcyBpbXByb3ZlcyBJUCBhZGRyZXNzIHZhbGlkYXRpb24gYW5kIGhhbmRsaW5nIHdoaWNoIGlzIGFsd2F5cyBhIGdvb2QgdGhpbmcgdG8gc2VlIGluIG5ldHdvcmsgY29kZS5cblxuVGhlIGNoYW5nZXMgYXJlIHdpdGhpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIHNwZWNpZmljYWxseSB0aGUgYG5ldGNvbnNvbGVgIHN1YnN5c3RlbSwgd2hpY2ggaXMgZ29vZC4gV2UgY2FuIHRyaWdnZXIgdGhpcyB0aHJvdWdoIGBjb25maWdmc2Agb3Iga2VybmVsIGNvbW1hbmQtbGluZSBwYXJhbWV0ZXJzLCBpbmNyZWFzaW5nIHRoZSBvZGRzIG9mIGFjdHVhbGx5IGV4ZXJjaXNpbmcgdGhlIGNvZGUuIERlZmluaXRlbHkgd29ydGggZnV6emluZywgYmFzZWQgb24gdGhpcy5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIGtleSBzeW1ib2xzIEkgbmVlZCB0byB0YXJnZXQ6XG5cbiogICBgbG9jYWxfaXBfc3RvcmVgXG4qICAgYHJlbW90ZV9pcF9zdG9yZWBcbiogICBgZW5hYmxlZF9zdG9yZWBcbiogICBgbmV0Y29uc19uZXRwb2xsX3NldHVwYFxuKiAgIGBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lYFxuKiAgIGBuZXRwb2xsX3NlbmRfdWRwYFxuKiAgIEFuZCBvZiBjb3Vyc2UsIHRoYXQgY3J1Y2lhbCBgbmV0cG9sbF9wYXJzZV9pcF9hZGRyYFxuXG5XZSBhbHNvIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSByaWdodCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBzZXQgZm9yIHRoaXMuIFdlJ3JlIGxvb2tpbmcgYXQ6XG5cbiogICBgTkVUQ09OU09MRWAgLSBvYnZpb3VzbHksIHdlIHdhbnQgdGhhdC5cbiogICBgTkVUQ09OU09MRV9EWU5BTUlDYCAtIFdlIG5lZWQgdG8gYmUgY2FyZWZ1bCB3aXRoIHRoaXMgb25lLlxuKiAgIGBDT05GSUdGU19GU2AgLSBUaGlzIG9uZSBpcyBpbXBvcnRhbnQgdG8gY292ZXIuXG4qICAgYElQVjZgIC0gV2UgbmVlZCB0byBlbnN1cmUgd2UgY292ZXIgdGhhdCB0b28sIHNpbmNlIHdlJ3JlIGhhbmRsaW5nIElQIGFkZHJlc3MgZmFtaWxpZXMuXG5cbk9rYXksIGEgcXVpY2sgY2hlY2sgb24gdGhlIGRlcGVuZGVuY2llcy4gYE5FVENPTlNPTEVfRFlOQU1JQ2AgZGVwZW5kcyBvbiBgU1lTRlNgLCB3aGljaCBpcyBhbG1vc3QgYWx3YXlzIGVuYWJsZWQsIGJ1dCBsZXQncyBtYWtlIHN1cmUuIENvbmZpcm1lZC4gV2UgYWxzbyBuZWVkIHRvIGVuYWJsZSBgQ09ORklHRlNfRlNgLCBzaW5jZSBpdCdzIHRyaXN0YXRlLiBBbmQgYElQVjZgIHNob3VsZCBiZSBlbmFibGVkLCBzaW5jZSBpdCdzIGEgYm9vbGVhbi5cblxuQWxyaWdodCwgSSB0aGluayBJIGhhdmUgZXZlcnl0aGluZy4gVGltZSB0byBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTQzOSwiT3V0cHV0VG9rZW5zIjoyMzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6NDA6NTIuNjEwODM5MTE4WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc3NzE2NzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVENPTlNPTEVcIixcbiAgICBcIk5FVENPTlNPTEVfRFlOQU1JQ1wiLFxuICAgIFwiQ09ORklHRlNfRlNcIixcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJsb2NhbF9pcF9zdG9yZVwiLFxuICAgIFwicmVtb3RlX2lwX3N0b3JlXCIsXG4gICAgXCJlbmFibGVkX3N0b3JlXCIsXG4gICAgXCJuZXRjb25zX25ldHBvbGxfc2V0dXBcIixcbiAgICBcIm5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmVcIixcbiAgICBcIm5ldHBvbGxfc2VuZF91ZHBcIixcbiAgICBcIm5ldHBvbGxfcGFyc2VfaXBfYWRkclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBuZXRjb25zb2xlIGRyaXZlciB0byB0cmFjayB0aGUgSVAgYWRkcmVzcyBmYW1pbHkgKEFGX0lORVQsIEFGX0lORVQ2LCBBRl9VTlNQRUMpIGluZGVwZW5kZW50bHkgZm9yIGxvY2FsIGFuZCByZW1vdGUgSVAgYWRkcmVzc2VzLCByZXBsYWNpbmcgYSBzaW5nbGUgYGlwdjZgIGJvb2xlYW4gZmxhZy4gVGhpcyBjaGFuZ2VzIGhvdyBJUCBhZGRyZXNzZXMgYXJlIHBhcnNlZCwgdmFsaWRhdGVkLCBhbmQgdXNlZCBkdXJpbmcgbmV0Y29uc29sZSBzZXR1cCBhbmQgbWVzc2FnZSB0cmFuc21pc3Npb24uIFRoZSBtb2RpZmllZCBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgdGhlIG5ldGNvbnNvbGUgY29uZmlnZnMgaW50ZXJmYWNlICh3aGljaCBhbGxvd3MgZHluYW1pYyByZWNvbmZpZ3VyYXRpb24gb2YgdGFyZ2V0cykgYW5kIGR1cmluZyBtb2R1bGUgaW5pdGlhbGl6YXRpb24gdmlhIGtlcm5lbCBjb21tYW5kIGxpbmUgcGFyYW1ldGVycy4gU2luY2UgdGhpcyBhZmZlY3RzIGNvcmUga2VybmVsIGxvZ2dpbmcgZnVuY3Rpb25hbGl0eSBhbmQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBjb25maWdmcywgaXQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRDT05TT0xFXCIsXG4gICAgXCJORVRDT05TT0xFX0RZTkFNSUNcIixcbiAgICBcIkNPTkZJR0ZTX0ZTXCIsXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibG9jYWxfaXBfc3RvcmVcIixcbiAgICBcInJlbW90ZV9pcF9zdG9yZVwiLFxuICAgIFwiZW5hYmxlZF9zdG9yZVwiLFxuICAgIFwibmV0Y29uc19uZXRwb2xsX3NldHVwXCIsXG4gICAgXCJuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lXCIsXG4gICAgXCJuZXRwb2xsX3NlbmRfdWRwXCIsXG4gICAgXCJuZXRwb2xsX3BhcnNlX2lwX2FkZHJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbmV0Y29uc29sZSBkcml2ZXIgdG8gdHJhY2sgdGhlIElQIGFkZHJlc3MgZmFtaWx5IChBRl9JTkVULCBBRl9JTkVUNiwgQUZfVU5TUEVDKSBpbmRlcGVuZGVudGx5IGZvciBsb2NhbCBhbmQgcmVtb3RlIElQIGFkZHJlc3NlcywgcmVwbGFjaW5nIGEgc2luZ2xlIGBpcHY2YCBib29sZWFuIGZsYWcuIFRoaXMgY2hhbmdlcyBob3cgSVAgYWRkcmVzc2VzIGFyZSBwYXJzZWQsIHZhbGlkYXRlZCwgYW5kIHVzZWQgZHVyaW5nIG5ldGNvbnNvbGUgc2V0dXAgYW5kIG1lc3NhZ2UgdHJhbnNtaXNzaW9uLiBUaGUgbW9kaWZpZWQgY29kZSBpcyByZWFjaGFibGUgdmlhIHRoZSBuZXRjb25zb2xlIGNvbmZpZ2ZzIGludGVyZmFjZSAod2hpY2ggYWxsb3dzIGR5bmFtaWMgcmVjb25maWd1cmF0aW9uIG9mIHRhcmdldHMpIGFuZCBkdXJpbmcgbW9kdWxlIGluaXRpYWxpemF0aW9uIHZpYSBrZXJuZWwgY29tbWFuZCBsaW5lIHBhcmFtZXRlcnMuIFNpbmNlIHRoaXMgYWZmZWN0cyBjb3JlIGtlcm5lbCBsb2dnaW5nIGZ1bmN0aW9uYWxpdHkgYW5kIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgY29uZmlnZnMsIGl0IGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjQwOjUyLjY4ODYxOTA2WiIsIlNlcSI6NDEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDc3NTIyNTg3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjQwOjUyLjY4OTI1Njk2WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjc0Nzc0NTgzMjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgaG93IElQIGFkZHJlc3NlcyBhcmUgc3RvcmVkIGFuZCBwYXJzZWQgaW4gdGhlIG5ldGNvbnNvbGUgZHJpdmVyIGJ5IHJlcGxhY2luZyBhIGB1bmlvbiBpbmV0X2FkZHJgIGFuZCBhIGJvb2xlYW4gYGlwdjZgIGZsYWcgd2l0aCBhIG5ldyBgc3RydWN0IGluZXRfYWRkcmAgdGhhdCBleHBsaWNpdGx5IHRyYWNrcyB0aGUgYWRkcmVzcyBmYW1pbHkgKGBBRl9VTlNQRUNgLCBgQUZfSU5FVGAsIG9yIGBBRl9JTkVUNmApLiBUaGUgYHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldGAgY29udGFpbmluZyB0aGVzZSBhZGRyZXNzZXMgaXMgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jX29iamAgKHdoaWNoIHplcm8taW5pdGlhbGl6ZXMgdGhlIG1lbW9yeSksIGVuc3VyaW5nIHRoYXQgdGhlIG5ldyBgZmFtaWx5YCBmaWVsZCBkZWZhdWx0cyB0byBgQUZfVU5TUEVDYCBhbmQgdGhlIElQIGFkZHJlc3NlcyBhcmUgemVyb2VkLiBUaGUgSVAgYWRkcmVzc2VzIGFyZSBvbmx5IGV4cG9zZWQgdG8gdXNlcnNwYWNlIHZpYSBjb25maWdmcyBgc2hvd2AgZnVuY3Rpb25zLCB3aGljaCBmb3JtYXQgdGhlbSBhcyBzdHJpbmdzIHVzaW5nIGBzeXNmc19lbWl0YCwgcHJldmVudGluZyBhbnkgcG90ZW50aWFsIGxlYWthZ2Ugb2YgcGFkZGluZyBieXRlcy4gV2hlbiBjb25zdHJ1Y3RpbmcgbmV0d29yayBwYWNrZXRzLCBvbmx5IHRoZSBleGFjdCBJUHY0ICg0IGJ5dGVzKSBvciBJUHY2ICgxNiBieXRlcykgYWRkcmVzcyBmaWVsZHMgYXJlIGNvcGllZCBpbnRvIHRoZSBJUCBoZWFkZXJzLCBhZ2FpbiBhdm9pZGluZyBhbnkgcGFkZGluZyBsZWFrcy4gVGhlcmUgYXJlIG5vIG5ldyBhbGxvY2F0aW9ucyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm8gc3RydWN0dXJlcyBjb3BpZWQgZGlyZWN0bHkgdG8gdXNlcnNwYWNlLCBhbmQgbm8gY29udHJvbCBmbG93IGNoYW5nZXMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBidWdzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMGY2MTMwNWUxNmUyZmFkNGJmYWUxNWMwNmI1MDJjMmMyMDA2ZTlmOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDEwIDE5OjM4OjIxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jIGIvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXG5pbmRleCAwMzkxMzMwMjMyOGNjLi44MTBkZWQ2ZTQ4ZjMyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXG4rKysgYi9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcbkBAIC0xNTEsNiArMTUxLDE1IEBAIGVudW0gdGFyZ2V0X3N0YXRlIHtcbiBcdFNUQVRFX0RFQUNUSVZBVEVELFxuIH07XG4gXG4rc3RydWN0IGluZXRfYWRkciB7XG4rXHQvKiBBZGRyZXNzIGZhbWlseTogQUZfVU5TUEVDIHdoZW4gdW5zZXQsIGVsc2UgQUZfSU5FVCBvciBBRl9JTkVUNiAqL1xuK1x0dThcdFx0XHRmYW1pbHk7XG4rXHR1bmlvbiB7XG4rXHRcdF9fYmUzMlx0XHRpcDtcbitcdFx0c3RydWN0IGluNl9hZGRyXHRpbjY7XG4rXHR9O1xuK307XG4rXG4gLyoqXG4gICogc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0IC0gUmVwcmVzZW50cyBhIGNvbmZpZ3VyZWQgbmV0Y29uc29sZSB0YXJnZXQuXG4gICogQGxpc3Q6XHRMaW5rcyB0aGlzIHRhcmdldCBpbnRvIHRoZSB0YXJnZXRfbGlzdC5cbkBAIC0xODEsNyArMTkwLDYgQEAgZW51bSB0YXJnZXRfc3RhdGUge1xuICAqXHRcdGxvY2FsX21hY1x0KHJlYWQtb25seSlcbiAgKiBAbG9jYWxfaXA6XHRTb3VyY2UgSVAgYWRkcmVzcyBvZiB0aGUgdGFyZ2V0IChyZWFkLXdyaXRlKS5cbiAgKiBAcmVtb3RlX2lwOlx0RGVzdGluYXRpb24gSVAgYWRkcmVzcyBvZiB0aGUgdGFyZ2V0IChyZWFkLXdyaXRlKS5cbi0gKiBAaXB2NjpcdFdoZXRoZXIgdGhlIHRhcmdldCBhZGRyZXNzZXMgYXJlIElQdjYgKHJlYWQtd3JpdGUpLlxuICAqIEBsb2NhbF9wb3J0Olx0U291cmNlIFVEUCBwb3J0IG9mIHRoZSB0YXJnZXQgKHJlYWQtd3JpdGUpLlxuICAqIEByZW1vdGVfcG9ydDogRGVzdGluYXRpb24gVURQIHBvcnQgb2YgdGhlIHRhcmdldCAocmVhZC13cml0ZSkuXG4gICogQHJlbW90ZV9tYWM6XHREZXN0aW5hdGlvbiBldGhlcm5ldCBhZGRyZXNzIG9mIHRoZSB0YXJnZXQgKHJlYWQtd3JpdGUpLlxuQEAgLTIxMiw4ICsyMjAsNyBAQCBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQge1xuIFx0Ym9vbFx0XHRcdGV4dGVuZGVkO1xuIFx0Ym9vbFx0XHRcdHJlbGVhc2U7XG4gXHRzdHJ1Y3QgbmV0cG9sbFx0XHRucDtcbi1cdHVuaW9uIGluZXRfYWRkclx0XHRsb2NhbF9pcCwgcmVtb3RlX2lwO1xuLVx0Ym9vbFx0XHRcdGlwdjY7XG4rXHRzdHJ1Y3QgaW5ldF9hZGRyXHRsb2NhbF9pcCwgcmVtb3RlX2lwO1xuIFx0dTE2XHRcdFx0bG9jYWxfcG9ydCwgcmVtb3RlX3BvcnQ7XG4gXHR1OFx0XHRcdHJlbW90ZV9tYWNbRVRIX0FMRU5dO1xuIFx0LyogcHJvdGVjdGVkIGJ5IHRhcmdldF9saXN0X2xvY2s7ICsxIGdpdmVzIHNjbnByaW50ZigpIHJvb20gZm9yIGl0c1xuQEAgLTQxNSw2ICs0MjIsNyBAQCBzdGF0aWMgaW50IG5ldGNvbnNfdGFrZV9pcHY2KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHQvKiBHb3QgdGhlIElQLCBsZXQncyByZXR1cm4gKi9cbiBcdFx0XHRudC1cdTAwM2Vsb2NhbF9pcC5pbjYgPSBpZnAtXHUwMDNlYWRkcjtcbitcdFx0XHRudC1cdTAwM2Vsb2NhbF9pcC5mYW1pbHkgPSBBRl9JTkVUNjtcbiBcdFx0XHRlcnIgPSAwO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG5AQCAtNDU2LDI4ICs0NjQsMTIgQEAgc3RhdGljIGludCBuZXRjb25zX3Rha2VfaXB2NChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuIFx0fVxuIFxuIFx0bnQtXHUwMDNlbG9jYWxfaXAuaXAgPSBpZmEtXHUwMDNlaWZhX2xvY2FsO1xuK1x0bnQtXHUwMDNlbG9jYWxfaXAuZmFtaWx5ID0gQUZfSU5FVDtcbiBcdG5wX2luZm8obnAsIFwibG9jYWwgSVAgJXBJNFxcblwiLCBcdTAwMjZudC1cdTAwM2Vsb2NhbF9pcC5pcCk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tLypcbi0gKiBUZXN0IHdoZXRoZXIgdGhlIGNhbGxlciBsZWZ0IG50LVx1MDAzZWxvY2FsX2lwIHVuc2V0LCBzbyB0aGF0XG4tICogbmV0Y29uc19uZXRwb2xsX3NldHVwKCkgc2hvdWxkIGF1dG8tcG9wdWxhdGUgaXQgZnJvbSB0aGUgZWdyZXNzIGRldmljZS5cbi0gKlxuLSAqIG50LVx1MDAzZWxvY2FsX2lwIGlzIGEgdW5pb24gb2YgX19iZTMyIChJUHY0KSBhbmQgc3RydWN0IGluNl9hZGRyIChJUHY2KSxcbi0gKiBzbyBhbiBJUHY2IGFkZHJlc3Mgd2hvc2UgZmlyc3QgNCBieXRlcyBhcmUgemVybyAoZS5nLiA6OjEsIDo6Mixcbi0gKiBJUHY0LW1hcHBlZCA6OmZmZmY6YS5iLmMuZCkgbXVzdCBub3QgYmUgdGVzdGVkIHZpYSB0aGUgSVB2NCBhcm0g4oCUXG4tICogZG9pbmcgc28gd291bGQgbWlzY2xhc3NpZnkgYSBjYWxsZXItc3VwcGxpZWQgYWRkcmVzcyBhcyB1bnNldCBhbmRcbi0gKiBzaWxlbnRseSBvdmVyd3JpdGUgaXQgd2l0aCB3aGF0ZXZlciBhZGRyZXNzIHRoZSBkZXZpY2UgZXhwb3Nlcy5cbi0gKi9cbi1zdGF0aWMgYm9vbCBuZXRjb25zX2xvY2FsX2lwX3Vuc2V0KGNvbnN0IHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG4te1xuLVx0aWYgKG50LVx1MDAzZWlwdjYpXG4tXHRcdHJldHVybiBpcHY2X2FkZHJfYW55KFx1MDAyNm50LVx1MDAzZWxvY2FsX2lwLmluNik7XG4tXHRyZXR1cm4gIW50LVx1MDAzZWxvY2FsX2lwLmlwO1xuLX1cbi1cbiBzdGF0aWMgaW50IG5ldGNvbnNfbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuIHtcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IGN1cnJlbnQtXHUwMDNlbnNwcm94eS1cdTAwM2VuZXRfbnM7XG5AQCAtNDg3LDYgKzQ3OSwxNyBAQCBzdGF0aWMgaW50IG5ldGNvbnNfbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuIFx0Ym9vbCBpcF9vdmVyd3JpdHRlbiA9IGZhbHNlO1xuIFx0aW50IGVycjtcbiBcbitcdGlmIChudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX1VOU1BFQykge1xuK1x0XHRucF9lcnIobnAsIFwicmVtb3RlIElQIGFkZHJlc3Mgbm90IGNvbmZpZ3VyZWQsIGFib3J0aW5nXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVERVNUQUREUlJFUTtcbitcdH1cbitcbitcdGlmIChudC1cdTAwM2Vsb2NhbF9pcC5mYW1pbHkgIT0gQUZfVU5TUEVDIFx1MDAyNlx1MDAyNlxuK1x0ICAgIG50LVx1MDAzZWxvY2FsX2lwLmZhbWlseSAhPSBudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5KSB7XG4rXHRcdG5wX2VycihucCwgXCJsb2NhbCBhbmQgcmVtb3RlIElQIGFkZHJlc3MgZmFtaWxpZXMgZGlmZmVyLCBhYm9ydGluZ1xcblwiKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4gXHRydG5sX2xvY2soKTtcbiBcdGlmIChucC1cdTAwM2VkZXZfbmFtZVswXSlcbiBcdFx0bmRldiA9IF9fZGV2X2dldF9ieV9uYW1lKG5ldCwgbnAtXHUwMDNlZGV2X25hbWUpO1xuQEAgLTUyMywxNiArNTI2LDEzIEBAIHN0YXRpYyBpbnQgbmV0Y29uc19uZXRwb2xsX3NldHVwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG4gXHRcdHJ0bmxfbG9jaygpO1xuIFx0fVxuIFxuLVx0aWYgKG5ldGNvbnNfbG9jYWxfaXBfdW5zZXQobnQpKSB7XG4tXHRcdGlmICghbnQtXHUwMDNlaXB2Nikge1xuLVx0XHRcdGVyciA9IG5ldGNvbnNfdGFrZV9pcHY0KG50LCBuZGV2KTtcbi1cdFx0XHRpZiAoZXJyKVxuLVx0XHRcdFx0Z290byBwdXQ7XG4tXHRcdH0gZWxzZSB7XG4rXHRpZiAobnQtXHUwMDNlbG9jYWxfaXAuZmFtaWx5ID09IEFGX1VOU1BFQykge1xuK1x0XHRpZiAobnQtXHUwMDNlcmVtb3RlX2lwLmZhbWlseSA9PSBBRl9JTkVUNilcbiBcdFx0XHRlcnIgPSBuZXRjb25zX3Rha2VfaXB2NihudCwgbmRldik7XG4tXHRcdFx0aWYgKGVycilcbi1cdFx0XHRcdGdvdG8gcHV0O1xuLVx0XHR9XG4rXHRcdGVsc2VcbitcdFx0XHRlcnIgPSBuZXRjb25zX3Rha2VfaXB2NChudCwgbmRldik7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0Z290byBwdXQ7XG4gXHRcdGlwX292ZXJ3cml0dGVuID0gdHJ1ZTtcbiBcdH1cbiBcbkBAIC03MTQsMjQgKzcxNCwyOCBAQCBzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3ByaW50X2Jhbm5lcihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuIFx0c3RydWN0IG5ldHBvbGwgKm5wID0gXHUwMDI2bnQtXHUwMDNlbnA7XG4gXG4gXHRucF9pbmZvKG5wLCBcImxvY2FsIHBvcnQgJWRcXG5cIiwgbnQtXHUwMDNlbG9jYWxfcG9ydCk7XG4tXHRpZiAobnQtXHUwMDNlaXB2NilcbitcdGlmIChudC1cdTAwM2Vsb2NhbF9pcC5mYW1pbHkgPT0gQUZfVU5TUEVDKVxuK1x0XHRucF9pbmZvKG5wLCBcImxvY2FsIElQIHVuc2V0XFxuXCIpO1xuK1x0ZWxzZSBpZiAobnQtXHUwMDNlbG9jYWxfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxuIFx0XHRucF9pbmZvKG5wLCBcImxvY2FsIElQdjYgYWRkcmVzcyAlcEk2Y1xcblwiLCBcdTAwMjZudC1cdTAwM2Vsb2NhbF9pcC5pbjYpO1xuIFx0ZWxzZVxuIFx0XHRucF9pbmZvKG5wLCBcImxvY2FsIElQdjQgYWRkcmVzcyAlcEk0XFxuXCIsIFx1MDAyNm50LVx1MDAzZWxvY2FsX2lwLmlwKTtcbiBcdG5wX2luZm8obnAsIFwiaW50ZXJmYWNlIG5hbWUgJyVzJ1xcblwiLCBucC1cdTAwM2VkZXZfbmFtZSk7XG4gXHRucF9pbmZvKG5wLCBcImxvY2FsIGV0aGVybmV0IGFkZHJlc3MgJyVwTSdcXG5cIiwgbnAtXHUwMDNlZGV2X21hYyk7XG4gXHRucF9pbmZvKG5wLCBcInJlbW90ZSBwb3J0ICVkXFxuXCIsIG50LVx1MDAzZXJlbW90ZV9wb3J0KTtcbi1cdGlmIChudC1cdTAwM2VpcHY2KVxuK1x0aWYgKG50LVx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfVU5TUEVDKVxuK1x0XHRucF9pbmZvKG5wLCBcInJlbW90ZSBJUCB1bnNldFxcblwiKTtcbitcdGVsc2UgaWYgKG50LVx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXG4gXHRcdG5wX2luZm8obnAsIFwicmVtb3RlIElQdjYgYWRkcmVzcyAlcEk2Y1xcblwiLCBcdTAwMjZudC1cdTAwM2VyZW1vdGVfaXAuaW42KTtcbiBcdGVsc2VcbiBcdFx0bnBfaW5mbyhucCwgXCJyZW1vdGUgSVB2NCBhZGRyZXNzICVwSTRcXG5cIiwgXHUwMDI2bnQtXHUwMDNlcmVtb3RlX2lwLmlwKTtcbiBcdG5wX2luZm8obnAsIFwicmVtb3RlIGV0aGVybmV0IGFkZHJlc3MgJXBNXFxuXCIsIG50LVx1MDAzZXJlbW90ZV9tYWMpO1xuIH1cbiBcbi0vKiBQYXJzZSB0aGUgc3RyaW5nIGFuZCBwb3B1bGF0ZSB0aGUgYGluZXRfYWRkcmAgdW5pb24uIFJldHVybiAwIGlmIElQdjQgaXNcbi0gKiBwb3B1bGF0ZWQsIDEgaWYgSVB2NiBpcyBwb3B1bGF0ZWQsIGFuZCAtMSB1cG9uIGZhaWx1cmUuXG4rLyogUGFyc2UgdGhlIHN0cmluZyBhbmQgcG9wdWxhdGUgdGhlIGBpbmV0X2FkZHJgIHN0cnVjdC4gUmV0dXJuIDAgb24gc3VjY2Vzc1xuKyAqIGFuZCAtMSB1cG9uIGZhaWx1cmUuXG4gICovXG4tc3RhdGljIGludCBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY29uc3QgY2hhciAqc3RyLCB1bmlvbiBpbmV0X2FkZHIgKmFkZHIpXG4rc3RhdGljIGludCBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY29uc3QgY2hhciAqc3RyLCBzdHJ1Y3QgaW5ldF9hZGRyICphZGRyKVxuIHtcbiBcdGNvbnN0IGNoYXIgKmVuZCA9IE5VTEw7XG4gXHRpbnQgbGVuO1xuQEAgLTc0MywxNCArNzQ3LDE4IEBAIHN0YXRpYyBpbnQgbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGNvbnN0IGNoYXIgKnN0ciwgdW5pb24gaW5ldF9hZGRyICphZGRyKVxuIFx0aWYgKHN0cltsZW4gLSAxXSA9PSAnXFxuJylcbiBcdFx0bGVuIC09IDE7XG4gXG4tXHRpZiAoaW40X3B0b24oc3RyLCBsZW4sICh2b2lkICopYWRkciwgLTEsIFx1MDAyNmVuZCkgXHUwMDNlIDAgXHUwMDI2XHUwMDI2XG4tXHQgICAgKCFlbmQgfHwgKmVuZCA9PSAwIHx8ICplbmQgPT0gJ1xcbicpKVxuK1x0aWYgKGluNF9wdG9uKHN0ciwgbGVuLCAodm9pZCAqKVx1MDAyNmFkZHItXHUwMDNlaXAsIC0xLCBcdTAwMjZlbmQpIFx1MDAzZSAwIFx1MDAyNlx1MDAyNlxuK1x0ICAgICghZW5kIHx8ICplbmQgPT0gMCB8fCAqZW5kID09ICdcXG4nKSkge1xuK1x0XHRhZGRyLVx1MDAzZWZhbWlseSA9IEFGX0lORVQ7XG4gXHRcdHJldHVybiAwO1xuK1x0fVxuIFxuIFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0lQVjYpIFx1MDAyNlx1MDAyNlxuLVx0ICAgIGluNl9wdG9uKHN0ciwgbGVuLCAodm9pZCAqKWFkZHIsIC0xLCBcdTAwMjZlbmQpIFx1MDAzZSAwIFx1MDAyNlx1MDAyNlxuLVx0ICAgICghZW5kIHx8ICplbmQgPT0gMCB8fCAqZW5kID09ICdcXG4nKSlcbi1cdFx0cmV0dXJuIDE7XG4rXHQgICAgaW42X3B0b24oc3RyLCBsZW4sICh2b2lkICopXHUwMDI2YWRkci1cdTAwM2VpbjYsIC0xLCBcdTAwMjZlbmQpIFx1MDAzZSAwIFx1MDAyNlx1MDAyNlxuK1x0ICAgICghZW5kIHx8ICplbmQgPT0gMCB8fCAqZW5kID09ICdcXG4nKSkge1xuK1x0XHRhZGRyLVx1MDAzZWZhbWlseSA9IEFGX0lORVQ2O1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbiBcbiBcdHJldHVybiAtMTtcbiB9XG5AQCAtODU1LDIwICs4NjMsMjQgQEAgc3RhdGljIHNzaXplX3QgbG9jYWxfaXBfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcbiB7XG4gXHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0pO1xuIFxuLVx0aWYgKG50LVx1MDAzZWlwdjYpXG4rXHRpZiAobnQtXHUwMDNlbG9jYWxfaXAuZmFtaWx5ID09IEFGX1VOU1BFQylcbitcdFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcIlxcblwiKTtcbitcdGlmIChudC1cdTAwM2Vsb2NhbF9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXG4gXHRcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCIlcEk2Y1xcblwiLCBcdTAwMjZudC1cdTAwM2Vsb2NhbF9pcC5pbjYpO1xuIFx0ZWxzZVxuLVx0XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwiJXBJNFxcblwiLCBcdTAwMjZudC1cdTAwM2Vsb2NhbF9pcCk7XG4rXHRcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCIlcEk0XFxuXCIsIFx1MDAyNm50LVx1MDAzZWxvY2FsX2lwLmlwKTtcbiB9XG4gXG4gc3RhdGljIHNzaXplX3QgcmVtb3RlX2lwX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXG4ge1xuIFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcbiBcbi1cdGlmIChudC1cdTAwM2VpcHY2KVxuK1x0aWYgKG50LVx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfVU5TUEVDKVxuK1x0XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwiXFxuXCIpO1xuK1x0aWYgKG50LVx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXG4gXHRcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCIlcEk2Y1xcblwiLCBcdTAwMjZudC1cdTAwM2VyZW1vdGVfaXAuaW42KTtcbiBcdGVsc2Vcbi1cdFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcIiVwSTRcXG5cIiwgXHUwMDI2bnQtXHUwMDNlcmVtb3RlX2lwKTtcbitcdFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcIiVwSTRcXG5cIiwgXHUwMDI2bnQtXHUwMDNlcmVtb3RlX2lwLmlwKTtcbiB9XG4gXG4gc3RhdGljIHNzaXplX3QgbG9jYWxfbWFjX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXG5AQCAtMTIxMyw3ICsxMjI1LDYgQEAgc3RhdGljIHNzaXplX3QgbG9jYWxfaXBfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXG4ge1xuIFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcbiBcdHNzaXplX3QgcmV0ID0gLUVJTlZBTDtcbi1cdGludCBpcHY2O1xuIFxuIFx0ZHluYW1pY19uZXRjb25zb2xlX211dGV4X2xvY2soKTtcbiBcdGlmIChudC1cdTAwM2VzdGF0ZSA9PSBTVEFURV9FTkFCTEVEKSB7XG5AQCAtMTIyMiwxMCArMTIzMyw4IEBAIHN0YXRpYyBzc2l6ZV90IGxvY2FsX2lwX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG4gXG4tXHRpcHY2ID0gbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGJ1ZiwgXHUwMDI2bnQtXHUwMDNlbG9jYWxfaXApO1xuLVx0aWYgKGlwdjYgPT0gLTEpXG4rXHRpZiAobmV0cG9sbF9wYXJzZV9pcF9hZGRyKGJ1ZiwgXHUwMDI2bnQtXHUwMDNlbG9jYWxfaXApIFx1MDAzYyAwKVxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4tXHRudC1cdTAwM2VpcHY2ID0gISFpcHY2O1xuIFxuIFx0cmV0ID0gY291bnQ7XG4gb3V0X3VubG9jazpcbkBAIC0xMjM4LDcgKzEyNDcsNiBAQCBzdGF0aWMgc3NpemVfdCByZW1vdGVfaXBfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXG4ge1xuIFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcbiBcdHNzaXplX3QgcmV0ID0gLUVJTlZBTDtcbi1cdGludCBpcHY2O1xuIFxuIFx0ZHluYW1pY19uZXRjb25zb2xlX211dGV4X2xvY2soKTtcbiBcdGlmIChudC1cdTAwM2VzdGF0ZSA9PSBTVEFURV9FTkFCTEVEKSB7XG5AQCAtMTI0NywxMCArMTI1NSw4IEBAIHN0YXRpYyBzc2l6ZV90IHJlbW90ZV9pcF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZixcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuIFxuLVx0aXB2NiA9IG5ldHBvbGxfcGFyc2VfaXBfYWRkcihidWYsIFx1MDAyNm50LVx1MDAzZXJlbW90ZV9pcCk7XG4tXHRpZiAoaXB2NiA9PSAtMSlcbitcdGlmIChuZXRwb2xsX3BhcnNlX2lwX2FkZHIoYnVmLCBcdTAwMjZudC1cdTAwM2VyZW1vdGVfaXApIFx1MDAzYyAwKVxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4tXHRudC1cdTAwM2VpcHY2ID0gISFpcHY2O1xuIFxuIFx0cmV0ID0gY291bnQ7XG4gb3V0X3VubG9jazpcbkBAIC0yMDYxLDcgKzIwNjcsNyBAQCBzdGF0aWMgdm9pZCBuZXRwb2xsX3VkcF9jaGVja3N1bShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuIFxuIFx0LyogY2hlY2sgbmVlZHMgdG8gYmUgc2V0LCBzaW5jZSBpdCB3aWxsIGJlIGNvbnN1bWVkIGluIGNzdW1fcGFydGlhbCAqL1xuIFx0dWRwaC1cdTAwM2VjaGVjayA9IDA7XG4tXHRpZiAobnQtXHUwMDNlaXB2NilcbitcdGlmIChudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxuIFx0XHR1ZHBoLVx1MDAzZWNoZWNrID0gY3N1bV9pcHY2X21hZ2ljKFx1MDAyNm50LVx1MDAzZWxvY2FsX2lwLmluNixcbiBcdFx0XHRcdFx0ICAgICAgXHUwMDI2bnQtXHUwMDNlcmVtb3RlX2lwLmluNixcbiBcdFx0XHRcdFx0ICAgICAgdWRwX2xlbiwgSVBQUk9UT19VRFAsXG5AQCAtMjEwMiw3ICsyMTA4LDcgQEAgc3RhdGljIHZvaWQgcHVzaF9ldGgoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7XG4gXHRldGhlcl9hZGRyX2NvcHkoZXRoLVx1MDAzZWhfc291cmNlLCBucC1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIpO1xuIFx0ZXRoZXJfYWRkcl9jb3B5KGV0aC1cdTAwM2VoX2Rlc3QsIG50LVx1MDAzZXJlbW90ZV9tYWMpO1xuLVx0aWYgKG50LVx1MDAzZWlwdjYpXG4rXHRpZiAobnQtXHUwMDNlcmVtb3RlX2lwLmZhbWlseSA9PSBBRl9JTkVUNilcbiBcdFx0ZXRoLVx1MDAzZWhfcHJvdG8gPSBodG9ucyhFVEhfUF9JUFY2KTtcbiBcdGVsc2VcbiBcdFx0ZXRoLVx1MDAzZWhfcHJvdG8gPSBodG9ucyhFVEhfUF9JUCk7XG5AQCAtMjE3MSw3ICsyMTc3LDcgQEAgc3RhdGljIGludCBuZXRwb2xsX3NlbmRfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNvbnN0IGNoYXIgKm1zZyxcbiBcdFx0V0FSTl9PTl9PTkNFKCFpcnFzX2Rpc2FibGVkKCkpO1xuIFxuIFx0dWRwX2xlbiA9IGxlbiArIHNpemVvZihzdHJ1Y3QgdWRwaGRyKTtcbi1cdGlmIChudC1cdTAwM2VpcHY2KVxuK1x0aWYgKG50LVx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXG4gXHRcdGlwX2xlbiA9IHVkcF9sZW4gKyBzaXplb2Yoc3RydWN0IGlwdjZoZHIpO1xuIFx0ZWxzZVxuIFx0XHRpcF9sZW4gPSB1ZHBfbGVuICsgc2l6ZW9mKHN0cnVjdCBpcGhkcik7XG5AQCAtMjE4Nyw3ICsyMTkzLDcgQEAgc3RhdGljIGludCBuZXRwb2xsX3NlbmRfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNvbnN0IGNoYXIgKm1zZyxcbiBcdHNrYl9wdXQoc2tiLCBsZW4pO1xuIFxuIFx0cHVzaF91ZHAobnQsIHNrYiwgbGVuKTtcbi1cdGlmIChudC1cdTAwM2VpcHY2KVxuK1x0aWYgKG50LVx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXG4gXHRcdHB1c2hfaXB2NihudCwgc2tiLCBsZW4pO1xuIFx0ZWxzZVxuIFx0XHRwdXNoX2lwdjQobnQsIHNrYiwgbGVuKTtcbkBAIC0yNTA3LDEwICsyNTEzLDggQEAgX19yZWxlYXNlcyhcdTAwMjZ0YXJnZXRfbGlzdF9sb2NrKVxuIHN0YXRpYyBpbnQgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjaGFyICpvcHQpXG4ge1xuIFx0c3RydWN0IG5ldHBvbGwgKm5wID0gXHUwMDI2bnQtXHUwMDNlbnA7XG4tXHRib29sIGlwdmVyc2lvbl9zZXQgPSBmYWxzZTtcbiBcdGNoYXIgKmN1ciA9IG9wdDtcbiBcdGNoYXIgKmRlbGltO1xuLVx0aW50IGlwdjY7XG4gXG4gXHRpZiAoKmN1ciAhPSAnQCcpIHtcbiBcdFx0ZGVsaW0gPSBzdHJjaHIoY3VyLCAnQCcpO1xuQEAgLTI1MjQsMTYgKzI1MjgsMTIgQEAgc3RhdGljIGludCBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNoYXIgKm9wdClcbiBcdGN1cisrO1xuIFxuIFx0aWYgKCpjdXIgIT0gJy8nKSB7XG4tXHRcdGlwdmVyc2lvbl9zZXQgPSB0cnVlO1xuIFx0XHRkZWxpbSA9IHN0cmNocihjdXIsICcvJyk7XG4gXHRcdGlmICghZGVsaW0pXG4gXHRcdFx0Z290byBwYXJzZV9mYWlsZWQ7XG4gXHRcdCpkZWxpbSA9IDA7XG4tXHRcdGlwdjYgPSBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY3VyLCBcdTAwMjZudC1cdTAwM2Vsb2NhbF9pcCk7XG4tXHRcdGlmIChpcHY2IFx1MDAzYyAwKVxuK1x0XHRpZiAobmV0cG9sbF9wYXJzZV9pcF9hZGRyKGN1ciwgXHUwMDI2bnQtXHUwMDNlbG9jYWxfaXApIFx1MDAzYyAwKVxuIFx0XHRcdGdvdG8gcGFyc2VfZmFpbGVkO1xuLVx0XHRlbHNlXG4tXHRcdFx0bnQtXHUwMDNlaXB2NiA9IChib29sKWlwdjY7XG4gXHRcdGN1ciA9IGRlbGltO1xuIFx0fVxuIFx0Y3VyKys7XG5AQCAtMjU3NSwxMyArMjU3NSwxMSBAQCBzdGF0aWMgaW50IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY2hhciAqb3B0KVxuIFx0aWYgKCFkZWxpbSlcbiBcdFx0Z290byBwYXJzZV9mYWlsZWQ7XG4gXHQqZGVsaW0gPSAwO1xuLVx0aXB2NiA9IG5ldHBvbGxfcGFyc2VfaXBfYWRkcihjdXIsIFx1MDAyNm50LVx1MDAzZXJlbW90ZV9pcCk7XG4tXHRpZiAoaXB2NiBcdTAwM2MgMClcbitcdGlmIChuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY3VyLCBcdTAwMjZudC1cdTAwM2VyZW1vdGVfaXApIFx1MDAzYyAwKVxuIFx0XHRnb3RvIHBhcnNlX2ZhaWxlZDtcbi1cdGVsc2UgaWYgKGlwdmVyc2lvbl9zZXQgXHUwMDI2XHUwMDI2IG50LVx1MDAzZWlwdjYgIT0gKGJvb2wpaXB2NilcbitcdGlmIChudC1cdTAwM2Vsb2NhbF9pcC5mYW1pbHkgIT0gQUZfVU5TUEVDIFx1MDAyNlx1MDAyNlxuK1x0ICAgIG50LVx1MDAzZWxvY2FsX2lwLmZhbWlseSAhPSBudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5KVxuIFx0XHRnb3RvIHBhcnNlX2ZhaWxlZDtcbi1cdGVsc2Vcbi1cdFx0bnQtXHUwMDNlaXB2NiA9IChib29sKWlwdjY7XG4gXHRjdXIgPSBkZWxpbSArIDE7XG4gXG4gXHRpZiAoKmN1ciAhPSAwKSB7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRwb2xsLmggYi9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaFxuaW5kZXggMWM2YjFlZWM1ZWZkNi4uZWMwODIxYTViMDJkYiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbmV0cG9sbC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaFxuQEAgLTE2LDExICsxNiw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VkcC5oXHUwMDNlXG4gXG4tdW5pb24gaW5ldF9hZGRyIHtcbi1cdF9fYmUzMlx0XHRpcDtcbi1cdHN0cnVjdCBpbjZfYWRkclx0aW42O1xuLX07XG4tXG4gc3RydWN0IG5ldHBvbGwge1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcbiBcdG5ldGRldmljZV90cmFja2VyIGRldl90cmFja2VyO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6NDA6NTIuNjg5MjU3OFoiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODc4NDEzOTkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlZmFjdG9yaW5nIE5ldGNvbnNvbGUgZm9yIElQdjYgRmxleGliaWxpdHkqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFpbWVkIGF0IGltcHJvdmluZyB0aGUgSVB2NiBzdXBwb3J0IHdpdGhpbiB0aGUgbmV0Y29uc29sZSBkcml2ZXIuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IGl0J3MgYSBwcmV0dHkgdGFyZ2V0ZWQgcmVmYWN0b3IsIGZvY3VzaW5nIG9uIGEgbW9yZSBmbGV4aWJsZSB3YXkgdG8gaGFuZGxlIElQIGFkZHJlc3Nlcy4gSXQgbG9va3MgbGlrZSB0aGUgbWFpbiB0aHJ1c3QgaXMgdG8gbW92ZSBhd2F5IGZyb20gdGhlIHNpbXBsZSBgaXB2NmAgYm9vbGVhbiBmbGFnIGFuZCB0aGUgYHVuaW9uIGluZXRfYWRkcmAg4oCTIHdoaWNoIGZlZWxzIGEgYml0IGxpbWl0aW5nIOKAkyBhbmQgaW50byBhIG1vcmUgcm9idXN0IGBzdHJ1Y3QgaW5ldF9hZGRyYC4gVGhpcyBuZXcgc3RydWN0dXJlIGNsZXZlcmx5IGJ1bmRsZXMgdGhlIGFkZHJlc3MgZmFtaWx5IChgdTggZmFtaWx5YCkgd2l0aCB0aGUgdW5pb24gY29udGFpbmluZyB0aGUgYWN0dWFsIElQIGFkZHJlc3NlcyAoYm90aCBJUHY0IGFuZCBJUHY2KS5cblxuVGhlIGltcGxpY2F0aW9ucyBhcmUgY2xlYXI6IHRoZSBgaXB2NmAgZmllbGQgd2l0aGluIGBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXRgIGlzIGJlaW5nIHJldGlyZWQsIGFuZCBhbGwgdGhlIHBhcnNpbmcgYW5kIHNldHVwIGNvZGUgYXJlIGJlaW5nIHVwZGF0ZWQgdG8gbGV2ZXJhZ2UgdGhlIGBmYW1pbHlgIGZpZWxkIGluc3RlYWQuIFRoYXTigJlzIHRoZSByaWdodCB3YXkgdG8gYXBwcm9hY2ggaXQuIFdlJ3JlIGFsc28gc2VlaW5nIHRoZSBhZGRpdGlvbiBvZiBzb21lIGNydWNpYWwgY2hlY2tzIHRvIHZhbGlkYXRlIHRoYXQgYm90aCB0aGUgcmVtb3RlIElQIGlzIGRlZmluZWQgYW5kIHRoYXQgYm90aCB0aGUgbG9jYWwgYW5kIHJlbW90ZSBJUHMgYmVsb25nIHRvIHRoZSBzYW1lIGFkZHJlc3MgZmFtaWx5LiBNYWtlcyBzZW5zZSDigJMgY29uc2lzdGVuY3kgaXMga2V5LCBlc3BlY2lhbGx5IGluIG5ldHdvcmsgY29uZmlndXJhdGlvbnMuXG5cblNvLCB0aGUgYHN0cnVjdCBpbmV0X2FkZHJgIGlzIGRpcmVjdGx5IGVtYmVkZGVkIHdpdGhpbiB0aGUgYHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldGAgaXRzZWxmLCBhcyB0aGUgYGxvY2FsX2lwYCBhbmQgYHJlbW90ZV9pcGAgbWVtYmVycy4gTm93LCBsZXQncyBqdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXNlIHN0cnVjdHMgYXJlIGJlaW5nIGFsbG9jYXRlZCBwcm9wZXJseS4gSeKAmWxsIHF1aWNrbHkgY2hlY2sgaG93IGBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXRgIGlzIGluc3RhbnRpYXRlZCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYGFsbG9jX3BhcmFtX3RhcmdldGAgYW5kIGBtYWtlX25ldGNvbnNvbGVfdGFyZ2V0YCBmdW5jdGlvbnMuIEp1c3Qgd2FudCB0byBjb25maXJtIHRoYXQgdGhlcmUgaXNu4oCZdCBhbnkgb2J2aW91cyBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZS4gSSdsbCBuZWVkIHRvIHJ1biBhIGBncmVwYCBmb3IgYGFsbG9jX3BhcmFtX3RhcmdldGAgYW5kIGBtYWtlX25ldGNvbnNvbGVfdGFyZ2V0YCB0byBjb25maXJtLiBJdCBpcyBwb3NzaWJsZSB0aGV5IHVzZSBga3phbGxvY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0MjYsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTo0MDo1OC41Njc2NzUxNzNaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MTI0MzA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFsbG9jX3BhcmFtX3RhcmdldHxtYWtlX25ldGNvbnNvbGVfdGFyZ2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTcxNj1zdGF0aWMgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpmaW5kX2NtZGxpbmVfdGFyZ2V0KGNvbnN0IGNoYXIgKm5hbWUpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTczNi1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTczNzpzdGF0aWMgc3RydWN0IGNvbmZpZ19ncm91cCAqbWFrZV9uZXRjb25zb2xlX3RhcmdldChzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTczOC1cXHRcXHRcXHRcXHRcXHRcXHQgICBjb25zdCBjaGFyICpuYW1lKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTE4MjM9c3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdmc19ncm91cF9vcGVyYXRpb25zIG5ldGNvbnNvbGVfc3Vic3lzX2dyb3VwX29wcyA9IHtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTgyNDpcXHQubWFrZV9ncm91cFxcdD0gbWFrZV9uZXRjb25zb2xlX3RhcmdldCxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTgyNS1cXHQuZHJvcF9pdGVtXFx0PSBkcm9wX25ldGNvbnNvbGVfdGFyZ2V0LFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI1MTM9c3RhdGljIGludCBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNoYXIgKm9wdClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjAwLS8qIEFsbG9jYXRlIG5ldyB0YXJnZXQgKGZyb20gYm9vdC9tb2R1bGUgcGFyYW0pIGFuZCBzZXR1cCBuZXRwb2xsIGZvciBpdCAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNjAxOnN0YXRpYyBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKmFsbG9jX3BhcmFtX3RhcmdldChjaGFyICp0YXJnZXRfY29uZmlnLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjAyLVxcdFxcdFxcdFxcdFxcdFxcdCAgICBpbnQgY21kbGluZV9jb3VudClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yNjkzPXN0YXRpYyBpbnQgX19pbml0IGluaXRfbmV0Y29uc29sZSh2b2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI3MDQtXFx0XFx0d2hpbGUgKCh0YXJnZXRfY29uZmlnID0gc3Ryc2VwKFxcdTAwMjZpbnB1dCwgXFxcIjtcXFwiKSkpIHtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjcwNTpcXHRcXHRcXHRudCA9IGFsbG9jX3BhcmFtX3RhcmdldCh0YXJnZXRfY29uZmlnLCBjb3VudCk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI3MDYtXFx0XFx0XFx0aWYgKElTX0VSUihudCkpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6NDA6NTguNjEyODA2NTc5WiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMTUxNzMzNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIFRhcmdldCBBbGxvY2F0aW9uIGFuZCBOZXRjb25zb2xlIENyZWF0aW9uKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCBob3cgdGhlc2UgdGFyZ2V0cyBhcmUgYmVpbmcgc2V0IHVwLiBGaXJzdCwgSSdtIGdvaW5nIHRvIGRpZyBpbnRvIHRoZSBgYWxsb2NfcGFyYW1fdGFyZ2V0YCBpbXBsZW1lbnRhdGlvbi4gSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IGl0J3MgZGVjaWRpbmcgd2hpY2ggcmVzb3VyY2VzIHRvIGFsbG9jYXRlIGFuZCB3aGF0IHBhcmFtZXRlcnMgaXQncyBjb25zaWRlcmluZy4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBhbnkgcG90ZW50aWFsIGVkZ2UgY2FzZXMgb3Igb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMgdGhlcmUsIGdpdmVuIG15IGV4cGVyaWVuY2Ugd2l0aCBzaW1pbGFyIHJlc291cmNlIGFsbG9jYXRpb24gc2NoZW1lcy4gVGhlbiwgSeKAmWxsIGltbWVkaWF0ZWx5IGNvbnRyYXN0IHRoYXQgd2l0aCBhIHJldmlldyBvZiBgbWFrZV9uZXRjb25zb2xlX3RhcmdldGAuIEknbSBjdXJpb3VzIGhvdyBpdHMgc3BlY2lmaWMgYXBwcm9hY2ggdG8gbmV0d29yayBjb25zb2xlIHRhcmdldHMgZGlmZmVycy4gV2hhdCBhcmUgaXRzIGRlcGVuZGVuY2llcz8gV2hhdCBlcnJvciBjb25kaXRpb25zIG1pZ2h0IGFyaXNlPyBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNsZXZlcm5lc3MsIGFuZCBwb3RlbnRpYWwgaW5lZmZpY2llbmNpZXMuIEtub3dpbmcgYm90aCB0aGVzZSBpbXBsZW1lbnRhdGlvbnMgdGhvcm91Z2hseSB3aWxsIGdpdmUgbWUgYSBzb2xpZCBiYXNlIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgdGFyZ2V0cyBpbiBnZW5lcmFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTQzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6NDE6MDEuOTI3OTgzNTcxWiIsIlNlcSI6NDYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTU3ODQyNSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3phbGxvYy4qbmV0Y29uc29sZV90YXJnZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTo0MTowMS45NzM1NzIxNjZaIiwiU2VxIjo0NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzExNDk1ODI5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OlxuXG4qKkNoZWNraW5nIGBudGAgQWxsb2NhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBUaGUgZmlyc3QgdGhpbmcgSSdtIHRoaW5raW5nIGlzLCBsZXQncyBwaW5wb2ludCBleGFjdGx5IGhvdyBgbnRgIGlzIGJlaW5nIGFsbG9jYXRlZCBpbiB0aGUgZmlyc3QgcGxhY2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBsaWZlY3ljbGUuIFdoZXJlIGFuZCB3aGVuIGlzIHRoaXMgdmFyaWFibGUgYnJvdWdodCBpbnRvIGV4aXN0ZW5jZT8gSXMgaXQgYSBzdGF0aWNhbGx5IGFsbG9jYXRlZCB2YXJpYWJsZSwgcGVyaGFwcyBhIGdsb2JhbCBvciB3aXRoaW4gYSBzcGVjaWZpYyBzY29wZT8gT3IsIGlzIGl0IGR5bmFtaWNhbGx5IGFsbG9jYXRlZCwgbWF5YmUgdGhyb3VnaCBgbWFsbG9jYCBvciBhIHNpbWlsYXIgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb24/IFRoZSBhbGxvY2F0aW9uIG1ldGhvZCB3aWxsIGZ1bmRhbWVudGFsbHkgaW5mbHVlbmNlIGV2ZXJ5dGhpbmcgdGhhdCBmb2xsb3dzLiBJIG5lZWQgdG8ga25vdyB0aGlzIHRvIHRyYWNrIHRoZSBpbXBsaWNhdGlvbnMuIFRoaXMgaW5mb3JtYXRpb24gd2lsbCBpbmZvcm0gc28gbXVjaCBhYm91dCBpdHMgbGlmZXRpbWUsIGhvdyBpdCdzIHVzZWQsIGFuZCBwb3RlbnRpYWwgcHJvYmxlbXMuIEtub3dpbmcgdGhlIGFsbG9jYXRpb24gdHlwZSB3aWxsIGdpdmUgbWUgaW1wb3J0YW50IGNsdWVzIGFib3V0IGl0cyBjaGFyYWN0ZXJpc3RpY3MgYW5kIGNvbnN0cmFpbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODExLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6NDE6MDUuMDg4NTMyOTc5WiIsIlNlcSI6NDgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzA2NzYwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJremFsbG9jXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9NjU3PXN0YXRpYyBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKmFsbG9jX2FuZF9pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNjYwLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo2NjE6XFx0bnQgPSBremFsbG9jX29iaigqbnQpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy02NjItXFx0aWYgKCFudClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xNjAxPXN0YXRpYyBzdHJ1Y3QgY29uZmlnX2l0ZW0gKnVzZXJkYXR1bV9tYWtlX2l0ZW0oc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXAsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTYxNS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTYxNjpcXHR1ZG0gPSBremFsbG9jX29iaigqdWRtKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTYxNy1cXHRpZiAoIXVkbSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6NDE6MDUuMTMxNjA0Nzc1WiIsIlNlcSI6NDksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0NzI5ODk3MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgQWxsb2NhdGlvbiBhbmQgRGF0YSBTdHJ1Y3R1cmVzKipcblxuT2theSwgc28gYGt6YWxsb2Nfb2JqYCBpcyBiZWluZyB1c2VkIGhlcmUsIHdoaWNoIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoZSBgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0YCBpcyB6ZXJvLWluaXRpYWxpemVkLiBHb29kLCBnb29kLiBUaGF0IG1lYW5zIHRoZSBgaW5ldF9hZGRyYCBmaWVsZHMgd2l0aGluIHdpbGwgc3RhcnQgYXQgemVybywgc3BlY2lmaWNhbGx5IHRoZSBgZmFtaWx5YCBmaWVsZCB3aWxsIGJlIHplcm8sIGNvcnJlc3BvbmRpbmcgdG8gYEFGX1VOU1BFQ2AuXG5cblRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIGBzdHJ1Y3QgaW5ldF9hZGRyYCwgd2hpY2ggaXMgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZDogYSBgdTggZmFtaWx5YCBhbmQgYSB1bmlvbiBmb3IgSVB2NCBhbmQgSVB2NiBhZGRyZXNzZXMuIFRoZSB1bmlvbidzIHNpemUgaXMsIG9mIGNvdXJzZSwgMTYgYnl0ZXMuIENvbnNpZGVyaW5nIHRoZSBwYWRkaW5nLCB0aGUgb3ZlcmFsbCBzaXplIG9mIGBpbmV0X2FkZHJgIGxvb2tzIGxpa2UgaXQnbGwgYmUgMjAgYnl0ZXMuIE5vdywgdGhlIGtleSBxdWVzdGlvbiBhcmlzZXM6IGlzIHRoaXMgc3RydWN0IGV2ZXIgY29waWVkIHRvIHVzZXJzcGFjZT8gVGhhdCdzIHdoYXQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQuIEFueSBwb3RlbnRpYWwgZXhwb3N1cmUgdGhlcmUgaXMgd2hhdCBJIGhhdmUgdG8gYmUgbW9zdCBjb25jZXJuZWQgYWJvdXQuXG5cbkxldCdzIHNlZS4gVGhlIHBhdGNoIG1vZGlmaWVzIGBsb2NhbF9pcF9zaG93YCBhbmQgYHJlbW90ZV9pcF9zaG93YCwgYm90aCBvZiB3aGljaCB1c2UgYHN5c2ZzX2VtaXRgLiBPa2F5LCB0aGF0J3Mgbm90IGEgZGlyZWN0IGNvcHk7IGl0J3MganVzdCBmb3JtYXR0aW5nIHRoZSBJUCBhZGRyZXNzIHRvIGEgc3RyaW5nLiBUaGF0J3MgYSByZWxpZWYuIEJ1dCB0aGF0IGRvZXNuJ3QgbWVhbiBpdCdzIGVudGlyZWx5IHNhZmUuIEkgc2hvdWxkIGNoZWNrIG90aGVyIHBvc3NpYmxlIHVzZXMgb2YgYHN0cnVjdCBpbmV0X2FkZHJgLiBHb3R0YSBiZSB0aG9yb3VnaCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MjIxLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjQxOjEwLjYwNDU5ODIzWiIsIlNlcSI6NTAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDQ0NTgxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbmV0X2FkZHJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xNDg9ZW51bSB0YXJnZXRfc3RhdGUge1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE1My1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTU0OnN0cnVjdCBpbmV0X2FkZHIge1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNTUtXFx0LyogQWRkcmVzcyBmYW1pbHk6IEFGX1VOU1BFQyB3aGVuIHVuc2V0LCBlbHNlIEFGX0lORVQgb3IgQUZfSU5FVDYgKi9cXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yMDQ9c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0IHtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjItXFx0c3RydWN0IG5ldHBvbGxcXHRcXHRucDtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjIzOlxcdHN0cnVjdCBpbmV0X2FkZHJcXHRsb2NhbF9pcCwgcmVtb3RlX2lwO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjQtXFx0dTE2XFx0XFx0XFx0bG9jYWxfcG9ydCwgcmVtb3RlX3BvcnQ7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9NzEyPXN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfcHJpbnRfYmFubmVyKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNzM0LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo3MzU6LyogUGFyc2UgdGhlIHN0cmluZyBhbmQgcG9wdWxhdGUgdGhlIGBpbmV0X2FkZHJgIHN0cnVjdC4gUmV0dXJuIDAgb24gc3VjY2Vzc1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy03MzYtICogYW5kIC0xIHVwb24gZmFpbHVyZS5cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNzM3LSAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo3Mzg6c3RhdGljIGludCBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY29uc3QgY2hhciAqc3RyLCBzdHJ1Y3QgaW5ldF9hZGRyICphZGRyKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy03Mzkte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTo0MToxMC42NDkwNDkyMzZaIiwiU2VxIjo1MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU2MTQ0NzA1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnRlcm5hbCBTdHJ1Y3R1cmUgQ29uc29saWRhdGlvbiBpbiBOZXRjb25zb2xlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBuZXcgc3RydWN0IGFuZCBpdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIOKAkyBpdCdzIGp1c3QgYmVpbmcgdXNlZCAqaW50ZXJuYWxseSogd2l0aGluIGBuZXRjb25zb2xlLmNgLiBJdCBsb29rcyBsaWtlIGl0J3MgYSByZXBsYWNlbWVudCBmb3IgdGhhdCBvbGQgYHVuaW9uIGluZXRfYWRkcmAgdGhhdCB3YXMgZmxvYXRpbmcgYXJvdW5kIGluIGBpbmNsdWRlL2xpbnV4L25ldHBvbGwuaGAgYnV0IHdhcyBldmVudHVhbGx5IHJlbW92ZWQuIE15IGZpcnN0IHRob3VnaHQgaXMgXCJ0aGF0J3MgY29udmVuaWVudCwgY2xlYW5zIHRoaW5ncyB1cCBhIGJpdFwiLlxuXG5Ob3csIHRoZSByZWFsIHF1ZXN0aW9uIGlzLCB3YXMgdGhhdCBgdW5pb24gaW5ldF9hZGRyYCB0cnVseSAqb25seSogdXRpbGl6ZWQgd2l0aGluIGBuZXRjb25zb2xlLmNgPyBJdCdzIGVhc3kgdG8gYXNzdW1lLCBidXQgSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4gVGhlcmUncyBhbHdheXMgdGhlIGNoYW5jZSB0aGF0IHNvbWV0aGluZyBnb3QgbWlzc2VkIGR1cmluZyB0aGUgcmVmYWN0b3Jpbmcgb3IgcmVtb3ZhbCBwcm9jZXNzLCBhbmQgdGhhdCdzIHRoZSBraW5kIG9mIHRoaW5nIHRoYXQgY2FuIHF1aWV0bHkgaW50cm9kdWNlIGJ1Z3MgZG93biB0aGUgbGluZS4gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgY29kZWJhc2UgdG8gYmUgc3VyZSB3ZSBkaWRuJ3Qgb3JwaGFuIGFueSBkZXBlbmRlbmNpZXMuIExldCdzIGRpZyBpbiBhbmQgbWFrZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTc4LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6NDE6MTQuMjEwNDk5MTAyWiIsIlNlcSI6NTIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzU0MTg3MTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImluZXRfYWRkclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAyMDk3IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTQ4PWVudW0gdGFyZ2V0X3N0YXRlIHtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNTMtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE1NDpzdHJ1Y3QgaW5ldF9hZGRyIHtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTU1LVxcdC8qIEFkZHJlc3MgZmFtaWx5OiBBRl9VTlNQRUMgd2hlbiB1bnNldCwgZWxzZSBBRl9JTkVUIG9yIEFGX0lORVQ2ICovXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjA0PXN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCB7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIyLVxcdHN0cnVjdCBuZXRwb2xsXFx0XFx0bnA7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIyMzpcXHRzdHJ1Y3QgaW5ldF9hZGRyXFx0bG9jYWxfaXAsIHJlbW90ZV9pcDtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjI0LVxcdHUxNlxcdFxcdFxcdGxvY2FsX3BvcnQsIHJlbW90ZV9wb3J0O1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTcxMj1zdGF0aWMgdm9pZCBuZXRjb25zb2xlX3ByaW50X2Jhbm5lcihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTczNC1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NzM1Oi8qIFBhcnNlIHRoZSBzdHJpbmcgYW5kIHBvcHVsYXRlIHRoZSBgaW5ldF9hZGRyYCBzdHJ1Y3QuIFJldHVybiAwIG9uIHN1Y2Nlc3NcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNzM2LSAqIGFuZCAtMSB1cG9uIGZhaWx1cmUuXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTczNy0gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NzM4OnN0YXRpYyBpbnQgbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGNvbnN0IGNoYXIgKnN0ciwgc3RydWN0IGluZXRfYWRkciAqYWRkcilcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNzM5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9zZWxmdGVzdC9hbGxvd2VkaXBzLmM9ODI9c3RydWN0IGhvcnJpYmxlX2FsbG93ZWRpcHNfbm9kZSB7XFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NlbGZ0ZXN0L2FsbG93ZWRpcHMuYy04My1cXHRzdHJ1Y3QgaGxpc3Rfbm9kZSB0YWJsZTtcXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VsZnRlc3QvYWxsb3dlZGlwcy5jOjg0OlxcdHVuaW9uIG5mX2luZXRfYWRkciBpcDtcXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VsZnRlc3QvYWxsb3dlZGlwcy5jOjg1OlxcdHVuaW9uIG5mX2luZXRfYWRkciBtYXNrO1xcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9zZWxmdGVzdC9hbGxvd2VkaXBzLmMtODYtXFx0dTggaXBfdmVyc2lvbjtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9zZWxmdGVzdC9hbGxvd2VkaXBzLmM9OTU9c3RhdGljIF9faW5pdCB2b2lkIGhvcnJpYmxlX2FsbG93ZWRpcHNfZnJlZShzdHJ1Y3QgaG9ycmlibGVfYWxsb3dlZGlwcyAqdGFibGUpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VsZnRlc3QvYWxsb3dlZGlwcy5jLTEwNS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VsZnRlc3QvYWxsb3dlZGlwcy5jOjEwNjpzdGF0aWMgX19pbml0IGlubGluZSB1bmlvbiBuZl9pbmV0X2FkZHIgaG9ycmlibGVfY2lkcl90b19tYXNrKHU4IGNpZHIpXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NlbGZ0ZXN0L2FsbG93ZWRpcHMuYy0xMDcte1xcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9zZWxmdGVzdC9hbGxvd2VkaXBzLmM6MTA4OlxcdHVuaW9uIG5mX2luZXRfYWRkciBtYXNrO1xcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9zZWxmdGVzdC9hbGxvd2VkaXBzLmMtMTA5LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NlbGZ0ZXN0L2FsbG93ZWRpcHMuYy0xMTctXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NlbGZ0ZXN0L2FsbG93ZWRpcHMuYzoxMTg6c3RhdGljIF9faW5pdCBpbmxpbmUgdTggaG9ycmlibGVfbWFza190b19jaWRyKHVuaW9uIG5mX2luZXRfYWRkciBzdWJuZXQpXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NlbGZ0ZXN0L2FsbG93ZWRpcHMuYy0xMTkte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NlbGZ0ZXN0L2FsbG93ZWRpcHMuYz0xNTM9aG9ycmlibGVfaW5zZXJ0X29yZGVyZWQoc3RydWN0IGhvcnJpYmxlX2FsbG93ZWRpcHMgKnRhYmxlLCBzdHJ1Y3QgaG9ycmlibGVfYWxsb3dlZGlwc19ub2RlICpub2RlKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NlbGZ0ZXN0L2FsbG93ZWRpcHMuYy0xNTktXFx0XFx0aWYgKG90aGVyLVxcdTAwM2VpcF92ZXJzaW9uID09IG5vZGUtXFx1MDAzZWlwX3ZlcnNpb24gXFx1MDAyNlxcdTAwMjZcXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VsZnRlc3QvYWxsb3dlZGlwcy5jOjE2MDpcXHRcXHQgICAgIW1lbWNtcChcXHUwMDI2b3RoZXItXFx1MDAzZW1hc2ssIFxcdTAwMjZub2RlLVxcdTAwM2VtYXNrLCBzaXplb2YodW5pb24gbmZfaW5ldF9hZGRyKSkgXFx1MDAyNlxcdTAwMjZcXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VsZnRlc3QvYWxsb3dlZGlwcy5jOjE2MTpcXHRcXHQgICAgIW1lbWNtcChcXHUwMDI2b3RoZXItXFx1MDAzZWlwLCBcXHUwMDI2bm9kZS1cXHUwMDNlaXAsIHNpemVvZih1bmlvbiBuZl9pbmV0X2FkZHIpKSkge1xcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9zZWxmdGVzdC9hbGxvd2VkaXBzLmMtMTYyLVxcdFxcdFxcdG90aGVyLVxcdTAwM2V2YWx1ZSA9IG5vZGUtXFx1MDAzZXZhbHVlO1xcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC9yZG1hLmM9MjAwMT1zdGF0aWMgdm9pZCBudm1ldF9yZG1hX2Rpc2NfcG9ydF9hZGRyKHN0cnVjdCBudm1ldF9yZXEgKnJlcSxcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvcmRtYS5jLTIwMDYtXFxuZHJpdmVycy9udm1lL3RhcmdldC9yZG1hLmM6MjAwNzpcXHRpZiAoaW5ldF9hZGRyX2lzX2FueShcXHUwMDI2Y21faWQtXFx1MDAzZXJvdXRlLmFkZHIuc3JjX2FkZHIpKSB7XFxuZHJpdmVycy9udm1lL3RhcmdldC9yZG1hLmMtMjAwOC1cXHRcXHRzdHJ1Y3QgbnZtZXRfcmRtYV9yc3AgKnJzcCA9XFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jPTIyMDI9c3RhdGljIHZvaWQgbnZtZXRfdGNwX2Rpc2NfcG9ydF9hZGRyKHN0cnVjdCBudm1ldF9yZXEgKnJlcSxcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtMjIwNi1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jOjIyMDc6XFx0aWYgKGluZXRfYWRkcl9pc19hbnkoXFx1MDAyNnBvcnQtXFx1MDAzZWFkZHIpKSB7XFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy0yMjA4LVxcdFxcdHN0cnVjdCBudm1ldF90Y3BfY21kICpjbWQgPVxcbi0tXFxuZHJpdmVycy90YXJnZXQvaXNjc2kvaXNjc2lfdGFyZ2V0LmM9MzMzNj1pc2NzaXRfYnVpbGRfc2VuZHRhcmdldHNfcmVzcG9uc2Uoc3RydWN0IGlzY3NpdF9jbWQgKmNtZCxcXG4tLVxcbmRyaXZlcnMvdGFyZ2V0L2lzY3NpL2lzY3NpX3RhcmdldC5jLTM0MzgtXFxuZHJpdmVycy90YXJnZXQvaXNjc2kvaXNjc2lfdGFyZ2V0LmM6MzQzOTpcXHRcXHRcXHRcXHRpZiAoaW5ldF9hZGRyX2lzX2FueShcXHUwMDI2bnAtXFx1MDAzZW5wX3NvY2thZGRyKSlcXG5kcml2ZXJzL3RhcmdldC9pc2NzaS9pc2NzaV90YXJnZXQuYy0zNDQwLVxcdFxcdFxcdFxcdFxcdHNvY2thZGRyID0gXFx1MDAyNmNvbm4tXFx1MDAzZWxvY2FsX3NvY2thZGRyO1xcbi0tXFxuZnMvc21iL3NlcnZlci9jb25uZWN0aW9uLmM9MzA9c3RhdGljIGludCBwcm9jX3Nob3dfY2xpZW50cyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxuLS1cXG5mcy9zbWIvc2VydmVyL2Nvbm5lY3Rpb24uYy00NS0jaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5mcy9zbWIvc2VydmVyL2Nvbm5lY3Rpb24uYzo0NjpcXHRcXHRpZiAoIWNvbm4tXFx1MDAzZWluZXRfYWRkcilcXG5mcy9zbWIvc2VydmVyL2Nvbm5lY3Rpb24uYy00Ny1cXHRcXHRcXHRzZXFfcHJpbnRmKG0sIFxcXCIlLTIwcEk2Y1xcXCIsIFxcdTAwMjZjb25uLVxcdTAwM2VpbmV0Nl9hZGRyKTtcXG4tLVxcbmZzL3NtYi9zZXJ2ZXIvY29ubmVjdGlvbi5jLTQ5LSNlbmRpZlxcbmZzL3NtYi9zZXJ2ZXIvY29ubmVjdGlvbi5jOjUwOlxcdFxcdFxcdHNlcV9wcmludGYobSwgXFxcIiUtMjBwSTRcXFwiLCBcXHUwMDI2Y29ubi1cXHUwMDNlaW5ldF9hZGRyKTtcXG5mcy9zbWIvc2VydmVyL2Nvbm5lY3Rpb24uYy01MS1cXHRcXHRzZXFfcHJpbnRmKG0sIFxcXCIgICAweCUtMTB4ICUtMTB1ICUtMTJkICUtMTBkICVwdFRcXFxcblxcXCIsXFxuLS1cXG5mcy9zbWIvc2VydmVyL2Nvbm5lY3Rpb24uaD00NT1zdHJ1Y3Qga3NtYmRfY29ubiB7XFxuLS1cXG5mcy9zbWIvc2VydmVyL2Nvbm5lY3Rpb24uaC01NC1cXHR1bmlvbiB7XFxuZnMvc21iL3NlcnZlci9jb25uZWN0aW9uLmg6NTU6XFx0XFx0X19iZTMyXFx0XFx0XFx0aW5ldF9hZGRyO1xcbmZzL3NtYi9zZXJ2ZXIvY29ubmVjdGlvbi5oLTU2LSNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbi0tXFxuZnMvc21iL3NlcnZlci9tZ210L3VzZXJfc2Vzc2lvbi5jPTgxPXN0YXRpYyBpbnQgc2hvd19wcm9jX3Nlc3Npb24oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxcbi0tXFxuZnMvc21iL3NlcnZlci9tZ210L3VzZXJfc2Vzc2lvbi5jLTk2LSNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbmZzL3NtYi9zZXJ2ZXIvbWdtdC91c2VyX3Nlc3Npb24uYzo5NzpcXHRcXHRpZiAoY2hhbi1cXHUwMDNlY29ubi1cXHUwMDNlaW5ldF9hZGRyKVxcbmZzL3NtYi9zZXJ2ZXIvbWdtdC91c2VyX3Nlc3Npb24uYy05OC1cXHRcXHRcXHRzZXFfcHJpbnRmKG0sIFxcXCIlLTIwc1xcXFx0JXBJNFxcXFxuXFxcIiwgXFxcImNsaWVudFxcXCIsXFxuZnMvc21iL3NlcnZlci9tZ210L3VzZXJfc2Vzc2lvbi5jOjk5OlxcdFxcdFxcdFxcdFxcdFxcdTAwMjZjaGFuLVxcdTAwM2Vjb25uLVxcdTAwM2VpbmV0X2FkZHIpO1xcbmZzL3NtYi9zZXJ2ZXIvbWdtdC91c2VyX3Nlc3Npb24uYy0xMDAtXFx0XFx0ZWxzZVxcbi0tXFxuZnMvc21iL3NlcnZlci9tZ210L3VzZXJfc2Vzc2lvbi5jLTEwNC1cXHRcXHRzZXFfcHJpbnRmKG0sIFxcXCIlLTIwc1xcXFx0JXBJNFxcXFxuXFxcIiwgXFxcImNsaWVudFxcXCIsXFxuZnMvc21iL3NlcnZlci9tZ210L3VzZXJfc2Vzc2lvbi5jOjEwNTpcXHRcXHRcXHRcXHRcXHUwMDI2Y2hhbi1cXHUwMDNlY29ubi1cXHUwMDNlaW5ldF9hZGRyKTtcXG5mcy9zbWIvc2VydmVyL21nbXQvdXNlcl9zZXNzaW9uLmMtMTA2LSNlbmRpZlxcbi0tXFxuZnMvc21iL3NlcnZlci9tZ210L3VzZXJfc2Vzc2lvbi5jPTIwMD1zdGF0aWMgaW50IHNob3dfcHJvY19zZXNzaW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxuLS1cXG5mcy9zbWIvc2VydmVyL21nbXQvdXNlcl9zZXNzaW9uLmMtMjE3LSNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbmZzL3NtYi9zZXJ2ZXIvbWdtdC91c2VyX3Nlc3Npb24uYzoyMTg6XFx0XFx0XFx0aWYgKCFjaGFuLVxcdTAwM2Vjb25uLVxcdTAwM2VpbmV0X2FkZHIpXFxuZnMvc21iL3NlcnZlci9tZ210L3VzZXJfc2Vzc2lvbi5jLTIxOS1cXHRcXHRcXHRcXHRzZXFfcHJpbnRmKG0sIFxcXCIgJS00MHBJNmNcXFwiLCBcXHUwMDI2Y2hhbi1cXHUwMDNlY29ubi1cXHUwMDNlaW5ldDZfYWRkcik7XFxuLS1cXG5mcy9zbWIvc2VydmVyL21nbXQvdXNlcl9zZXNzaW9uLmMtMjIxLSNlbmRpZlxcbmZzL3NtYi9zZXJ2ZXIvbWdtdC91c2VyX3Nlc3Npb24uYzoyMjI6XFx0XFx0XFx0XFx0c2VxX3ByaW50ZihtLCBcXFwiICUtNDBwSTRcXFwiLCBcXHUwMDI2Y2hhbi1cXHUwMDNlY29ubi1cXHUwMDNlaW5ldF9hZGRyKTtcXG5mcy9zbWIvc2VydmVyL21nbXQvdXNlcl9zZXNzaW9uLmMtMjIzLVxcdFxcdFxcdHNlcV9wcmludGYobSwgXFxcIiAlLTE1cyAlLTEwbGx1ICUtMTBzXFxcXG5cXFwiLFxcbi0tXFxuZnMvc21iL3NlcnZlci90cmFuc3BvcnRfdGNwLmM9NTk9c3RhdGljIHN0cnVjdCB0Y3BfdHJhbnNwb3J0ICphbGxvY190cmFuc3BvcnQoc3RydWN0IHNvY2tldCAqY2xpZW50X3NrKVxcbi0tXFxuZnMvc21iL3NlcnZlci90cmFuc3BvcnRfdGNwLmMtNzktXFx0fSBlbHNlIHtcXG5mcy9zbWIvc2VydmVyL3RyYW5zcG9ydF90Y3AuYzo4MDpcXHRcXHRjb25uLVxcdTAwM2VpbmV0X2FkZHIgPSBpbmV0X3NrKGNsaWVudF9zay1cXHUwMDNlc2spLVxcdTAwM2VpbmV0X2RhZGRyO1xcbmZzL3NtYi9zZXJ2ZXIvdHJhbnNwb3J0X3RjcC5jLTgxLVxcdFxcdGNvbm4tXFx1MDAzZWluZXRfaGFzaCA9IGlwdjRfYWRkcl9oYXNoKGluZXRfc2soY2xpZW50X3NrLVxcdTAwM2VzayktXFx1MDAzZWluZXRfZGFkZHIpO1xcbi0tXFxuZnMvc21iL3NlcnZlci90cmFuc3BvcnRfdGNwLmMtODMtI2Vsc2VcXG5mcy9zbWIvc2VydmVyL3RyYW5zcG9ydF90Y3AuYzo4NDpcXHRjb25uLVxcdTAwM2VpbmV0X2FkZHIgPSBpbmV0X3NrKGNsaWVudF9zay1cXHUwMDNlc2spLVxcdTAwM2VpbmV0X2RhZGRyO1xcbmZzL3NtYi9zZXJ2ZXIvdHJhbnNwb3J0X3RjcC5jLTg1LVxcdGNvbm4tXFx1MDAzZWluZXRfaGFzaCA9IGlwdjRfYWRkcl9oYXNoKGluZXRfc2soY2xpZW50X3NrLVxcdTAwM2VzayktXFx1MDAzZWluZXRfZGFkZHIpO1xcbi0tXFxuZnMvc21iL3NlcnZlci90cmFuc3BvcnRfdGNwLmM9MTc3PXN0YXRpYyBpbnQga3NtYmRfdGNwX25ld19jb25uZWN0aW9uKHN0cnVjdCBzb2NrZXQgKmNsaWVudF9zaylcXG4tLVxcbmZzL3NtYi9zZXJ2ZXIvdHJhbnNwb3J0X3RjcC5jLTE5OC1cXHRcXHRcXHRcXHRLU01CRF9UUkFOUyh0KS1cXHUwMDNlY29ubiwgXFxcImtzbWJkOiVwSTRcXFwiLFxcbmZzL3NtYi9zZXJ2ZXIvdHJhbnNwb3J0X3RjcC5jOjE5OTpcXHRcXHRcXHRcXHRcXHUwMDI2S1NNQkRfVFJBTlModCktXFx1MDAzZWNvbm4tXFx1MDAzZWluZXRfYWRkcik7XFxuZnMvc21iL3NlcnZlci90cmFuc3BvcnRfdGNwLmMtMjAwLSNlbHNlXFxuLS1cXG5mcy9zbWIvc2VydmVyL3RyYW5zcG9ydF90Y3AuYy0yMDItXFx0XFx0XFx0S1NNQkRfVFJBTlModCktXFx1MDAzZWNvbm4sIFxcXCJrc21iZDolcEk0XFxcIixcXG5mcy9zbWIvc2VydmVyL3RyYW5zcG9ydF90Y3AuYzoyMDM6XFx0XFx0XFx0XFx1MDAyNktTTUJEX1RSQU5TKHQpLVxcdTAwM2Vjb25uLVxcdTAwM2VpbmV0X2FkZHIpO1xcbmZzL3NtYi9zZXJ2ZXIvdHJhbnNwb3J0X3RjcC5jLTIwNC0jZW5kaWZcXG4tLVxcbmZzL3NtYi9zZXJ2ZXIvdHJhbnNwb3J0X3RjcC5jPTIxOT1zdGF0aWMgaW50IGtzbWJkX2t0aHJlYWRfZm4odm9pZCAqcClcXG4tLVxcbmZzL3NtYi9zZXJ2ZXIvdHJhbnNwb3J0X3RjcC5jLTI2MC1cXHRcXHRcXHR9IGVsc2UgaWYgKGluZXRfc2soY2xpZW50X3NrLVxcdTAwM2VzayktXFx1MDAzZWluZXRfZGFkZHIgPT1cXG5mcy9zbWIvc2VydmVyL3RyYW5zcG9ydF90Y3AuYzoyNjE6XFx0XFx0XFx0XFx0IGNvbm4tXFx1MDAzZWluZXRfYWRkcilcXG5mcy9zbWIvc2VydmVyL3RyYW5zcG9ydF90Y3AuYy0yNjItXFx0XFx0XFx0XFx0bWF4X2lwX2Nvbm5zKys7XFxuLS1cXG5mcy9zbWIvc2VydmVyL3RyYW5zcG9ydF90Y3AuYy0yNjQtXFx0XFx0XFx0aWYgKGluZXRfc2soY2xpZW50X3NrLVxcdTAwM2VzayktXFx1MDAzZWluZXRfZGFkZHIgPT1cXG5mcy9zbWIvc2VydmVyL3RyYW5zcG9ydF90Y3AuYzoyNjU6XFx0XFx0XFx0ICAgIGNvbm4tXFx1MDAzZWluZXRfYWRkcilcXG5mcy9zbWIvc2VydmVyL3RyYW5zcG9ydF90Y3AuYy0yNjYtXFx0XFx0XFx0XFx0bWF4X2lwX2Nvbm5zKys7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2luZXQuaD01Nj1leHRlcm4gaW50IGluZXRfcHRvbl93aXRoX3Njb3BlKHN0cnVjdCBuZXQgKm5ldCwgdW5zaWduZWQgc2hvcnQgYWYsXFxuaW5jbHVkZS9saW51eC9pbmV0LmgtNTctXFx0XFx0Y29uc3QgY2hhciAqc3JjLCBjb25zdCBjaGFyICpwb3J0LCBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqYWRkcik7XFxuaW5jbHVkZS9saW51eC9pbmV0Lmg6NTg6Ym9vbCBpbmV0X2FkZHJfaXNfYW55KHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICphZGRyKTtcXG5pbmNsdWRlL2xpbnV4L2luZXQuaC01OS1cXG4tLVxcbmluY2x1ZGUvbGludXgvaW5ldGRldmljZS5oPTE4MT1zdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfZGV2aWNlICppcF9kZXZfZmluZChzdHJ1Y3QgbmV0ICpuZXQsIF9fYmUzMiBhZGRyKVxcbi0tXFxuaW5jbHVkZS9saW51eC9pbmV0ZGV2aWNlLmgtMTg1LVxcbmluY2x1ZGUvbGludXgvaW5ldGRldmljZS5oOjE4NjppbnQgaW5ldF9hZGRyX29ubGluayhzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYsIF9fYmUzMiBhLCBfX2JlMzIgYik7XFxuaW5jbHVkZS9saW51eC9pbmV0ZGV2aWNlLmgtMTg3LWludCBkZXZpbmV0X2lvY3RsKHN0cnVjdCBuZXQgKm5ldCwgdW5zaWduZWQgaW50IGNtZCwgc3RydWN0IGlmcmVxICopO1xcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIuaD0yNj1ORl9EUk9QX1JFQVNPTihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24sIHUzMiBlcnIpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci5oLTM0LVxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyLmg6MzU6c3RhdGljIGlubGluZSBpbnQgbmZfaW5ldF9hZGRyX2NtcChjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgKmExLFxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyLmg6MzY6XFx0XFx0XFx0XFx0ICAgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyICphMilcXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci5oLTM3LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyLmgtNTAtXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIuaDo1MTpzdGF0aWMgaW5saW5lIHZvaWQgbmZfaW5ldF9hZGRyX21hc2soY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyICphMSxcXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci5oOjUyOlxcdFxcdFxcdFxcdCAgICAgdW5pb24gbmZfaW5ldF9hZGRyICpyZXN1bHQsXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIuaDo1MzpcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciAqbWFzaylcXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci5oLTU0LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oPTMzMz1leHRlcm4gaW50IGlwX3NldF9nZXRfaXBhZGRyNChzdHJ1Y3QgbmxhdHRyICpubGEsICBfX2JlMzIgKmlwYWRkcik7XFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0Lmg6MzM0OmV4dGVybiBpbnQgaXBfc2V0X2dldF9pcGFkZHI2KHN0cnVjdCBubGF0dHIgKm5sYSwgdW5pb24gbmZfaW5ldF9hZGRyICppcGFkZHIpO1xcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oLTMzNS1leHRlcm4gc2l6ZV90IGlwX3NldF9lbGVtX2xlbihzdHJ1Y3QgaXBfc2V0ICpzZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaD01MjI9c3RhdGljIGlubGluZSB2b2lkXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0Lmg6NTIzOm5mX2luZXRfYWRkcl9tYXNrX2lucGxhY2UodW5pb24gbmZfaW5ldF9hZGRyICphMSxcXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaDo1MjQ6XFx0XFx0XFx0ICBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgKm1hc2spXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0LmgtNTI1LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L3BmeGxlbi5oLTktLyogUHJlZml4bGVuIG1hcHMsIGJ5IEphbiBFbmdlbGhhcmR0ICAqL1xcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L3BmeGxlbi5oOjEwOmV4dGVybiBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgaXBfc2V0X25ldG1hc2tfbWFwW107XFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvcGZ4bGVuLmg6MTE6ZXh0ZXJuIGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciBpcF9zZXRfaG9zdG1hc2tfbWFwW107XFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvcGZ4bGVuLmgtMTItXFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9wZnhsZW4uaD00NT1zdGF0aWMgaW5saW5lIHZvaWRcXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9wZnhsZW4uaDo0NjppcDZfbmV0bWFzayh1bmlvbiBuZl9pbmV0X2FkZHIgKmlwLCB1OCBwcmVmaXgpXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvcGZ4bGVuLmgtNDcte1xcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjMuaD0zMj1pbnQgZ2V0X2gyMjVfYWRkcihzdHJ1Y3QgbmZfY29ubiAqY3QsIHVuc2lnbmVkIGNoYXIgKmRhdGEsXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjMuaDozMzpcXHRcXHQgIFRyYW5zcG9ydEFkZHJlc3MgKnRhZGRyLCB1bmlvbiBuZl9pbmV0X2FkZHIgKmFkZHIsXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjMuaC0zNC1cXHRcXHQgIF9fYmUxNiAqcG9ydCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyMy5oPTM2PXN0cnVjdCBuZmN0X2gzMjNfbmF0X2hvb2tzIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzLmgtMzktXFx0XFx0XFx0ICAgICBIMjQ1X1RyYW5zcG9ydEFkZHJlc3MgKnRhZGRyLFxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzLmg6NDA6XFx0XFx0XFx0ICAgICB1bmlvbiBuZl9pbmV0X2FkZHIgKmFkZHIsIF9fYmUxNiBwb3J0KTtcXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyMy5oLTQxLVxcdGludCAoKnNldF9oMjI1X2FkZHIpKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjMuaC00My1cXHRcXHRcXHQgICAgIFRyYW5zcG9ydEFkZHJlc3MgKnRhZGRyLFxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzLmg6NDQ6XFx0XFx0XFx0ICAgICB1bmlvbiBuZl9pbmV0X2FkZHIgKmFkZHIsIF9fYmUxNiBwb3J0KTtcXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyMy5oLTQ1LVxcdGludCAoKnNldF9zaWdfYWRkcikoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuaD0xMTA9c3RydWN0IG5mX25hdF9zaXBfaG9va3Mge1xcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5oLTEzNi1cXHRcXHRcXHRcXHQgZW51bSBzZHBfaGVhZGVyX3R5cGVzIHRlcm0sXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5oOjEzNzpcXHRcXHRcXHRcXHQgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyICphZGRyKTtcXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmgtMTM4LVxcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5oLTE1My1cXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgaW50IHNkcG9mZixcXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmg6MTU0OlxcdFxcdFxcdFxcdCAgICBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgKmFkZHIpO1xcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuaC0xNTUtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmgtMTY0LVxcdFxcdFxcdFxcdCAgdW5zaWduZWQgaW50IG1lZGlhbGVuLFxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuaDoxNjU6XFx0XFx0XFx0XFx0ICB1bmlvbiBuZl9pbmV0X2FkZHIgKnJ0cF9hZGRyKTtcXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmgtMTY2LX07XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmg9MTY5PWludCBjdF9zaXBfcGFyc2VfcmVxdWVzdChjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsIGNvbnN0IGNoYXIgKmRwdHIsXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5oLTE3MC1cXHRcXHRcXHQgdW5zaWduZWQgaW50IGRhdGFsZW4sIHVuc2lnbmVkIGludCAqbWF0Y2hvZmYsXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5oOjE3MTpcXHRcXHRcXHQgdW5zaWduZWQgaW50ICptYXRjaGxlbiwgdW5pb24gbmZfaW5ldF9hZGRyICphZGRyLFxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuaC0xNzItXFx0XFx0XFx0IF9fYmUxNiAqcG9ydCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmg9MTc3PWludCBjdF9zaXBfcGFyc2VfaGVhZGVyX3VyaShjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsIGNvbnN0IGNoYXIgKmRwdHIsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmgtMTgwLVxcdFxcdFxcdCAgICB1bnNpZ25lZCBpbnQgKm1hdGNob2ZmLCB1bnNpZ25lZCBpbnQgKm1hdGNobGVuLFxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuaDoxODE6XFx0XFx0XFx0ICAgIHVuaW9uIG5mX2luZXRfYWRkciAqYWRkciwgX19iZTE2ICpwb3J0KTtcXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmgtMTgyLWludCBjdF9zaXBfcGFyc2VfYWRkcmVzc19wYXJhbShjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsIGNvbnN0IGNoYXIgKmRwdHIsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmgtMTg0LVxcdFxcdFxcdCAgICAgICBjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBpbnQgKm1hdGNob2ZmLFxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuaDoxODU6XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCAqbWF0Y2hsZW4sIHVuaW9uIG5mX2luZXRfYWRkciAqYWRkcixcXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmgtMTg2LVxcdFxcdFxcdCAgICAgICBib29sIGRlbGltKTtcXG4tLVxcbmluY2x1ZGUvbmV0L2luZXRfc29jay5oPTQzMz1zdGF0aWMgaW5saW5lIGJvb2wgaW5ldF9jYW5fbm9ubG9jYWxfYmluZChzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5pbmNsdWRlL25ldC9pbmV0X3NvY2suaC00NDAtXFxuaW5jbHVkZS9uZXQvaW5ldF9zb2NrLmg6NDQxOnN0YXRpYyBpbmxpbmUgYm9vbCBpbmV0X2FkZHJfdmFsaWRfb3Jfbm9ubG9jYWwoc3RydWN0IG5ldCAqbmV0LFxcbmluY2x1ZGUvbmV0L2luZXRfc29jay5oLTQ0Mi1cXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGluZXRfc29jayAqaW5ldCxcXG4tLVxcbmluY2x1ZGUvbmV0L2lwX3ZzLmgtMjQtI2luY2x1ZGUgXFx1MDAzY25ldC9jaGVja3N1bS5oXFx1MDAzZVxcbmluY2x1ZGUvbmV0L2lwX3ZzLmg6MjU6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGZpbHRlci5oXFx1MDAzZVxcdFxcdC8qIGZvciB1bmlvbiBuZl9pbmV0X2FkZHIgKi9cXG5pbmNsdWRlL25ldC9pcF92cy5oLTI2LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9pcC5oXFx1MDAzZVxcbi0tXFxuaW5jbHVkZS9uZXQvaXBfdnMuaD03MD1zdHJ1Y3QgaXBfdnNfaXBoZHIge1xcbi0tXFxuaW5jbHVkZS9uZXQvaXBfdnMuaC03Ny1cXHRfX3MzMiBmbGFncztcXG5pbmNsdWRlL25ldC9pcF92cy5oOjc4OlxcdHVuaW9uIG5mX2luZXRfYWRkciBzYWRkcjtcXG5pbmNsdWRlL25ldC9pcF92cy5oOjc5OlxcdHVuaW9uIG5mX2luZXRfYWRkciBkYWRkcjtcXG5pbmNsdWRlL25ldC9pcF92cy5oLTgwLX07XFxuLS1cXG5pbmNsdWRlL25ldC9pcF92cy5oPTE2OD1pcF92c19pcGhfaWNtcChjb25zdCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaClcXG4tLVxcbmluY2x1ZGUvbmV0L2lwX3ZzLmgtMTcyLVxcbmluY2x1ZGUvbmV0L2lwX3ZzLmg6MTczOnN0YXRpYyBpbmxpbmUgdm9pZCBpcF92c19hZGRyX2NvcHkoaW50IGFmLCB1bmlvbiBuZl9pbmV0X2FkZHIgKmRzdCxcXG5pbmNsdWRlL25ldC9pcF92cy5oOjE3NDpcXHRcXHRcXHRcXHQgICBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgKnNyYylcXG5pbmNsdWRlL25ldC9pcF92cy5oLTE3NS17XFxuLS1cXG5pbmNsdWRlL25ldC9pcF92cy5oLTE4My1cXG5pbmNsdWRlL25ldC9pcF92cy5oOjE4NDpzdGF0aWMgaW5saW5lIHZvaWQgaXBfdnNfYWRkcl9zZXQoaW50IGFmLCB1bmlvbiBuZl9pbmV0X2FkZHIgKmRzdCxcXG5pbmNsdWRlL25ldC9pcF92cy5oOjE4NTpcXHRcXHRcXHRcXHQgIGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciAqc3JjKVxcbmluY2x1ZGUvbmV0L2lwX3ZzLmgtMTg2LXtcXG4tLVxcbmluY2x1ZGUvbmV0L2lwX3ZzLmgtMTk4LVxcbmluY2x1ZGUvbmV0L2lwX3ZzLmg6MTk5OnN0YXRpYyBpbmxpbmUgaW50IGlwX3ZzX2FkZHJfZXF1YWwoaW50IGFmLCBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgKmEsXFxuaW5jbHVkZS9uZXQvaXBfdnMuaDoyMDA6XFx0XFx0XFx0XFx0ICAgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyICpiKVxcbmluY2x1ZGUvbmV0L2lwX3ZzLmgtMjAxLXtcXG4tLVxcbmluY2x1ZGUvbmV0L2lwX3ZzLmg9MjE0PXN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqaXBfdnNfZGJnX2FkZHIoaW50IGFmLCBjaGFyICpidWYsIHNpemVfdCBidWZfbGVuLFxcbmluY2x1ZGUvbmV0L2lwX3ZzLmg6MjE1OlxcdFxcdFxcdFxcdFxcdCBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgKmFkZHIsXFxuaW5jbHVkZS9uZXQvaXBfdnMuaC0yMTYtXFx0XFx0XFx0XFx0XFx0IGludCAqaWR4KVxcbi0tXFxuaW5jbHVkZS9uZXQvaXBfdnMuaD03MDQ9dTMyIGlwX3ZzX3JodF9oYXNoX2xpbmZvKHN0cnVjdCBpcF92c19yaHQgKnQsIGludCBhZixcXG5pbmNsdWRlL25ldC9pcF92cy5oOjcwNTpcXHRcXHRcXHQgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyICphZGRyLCB1MzIgdjEsIHUzMiB2Mik7XFxuaW5jbHVkZS9uZXQvaXBfdnMuaC03MDYtXFxuLS1cXG5pbmNsdWRlL25ldC9pcF92cy5oPTc4Nz1zdHJ1Y3QgaXBfdnNfY29ubl9wYXJhbSB7XFxuaW5jbHVkZS9uZXQvaXBfdnMuaC03ODgtXFx0c3RydWN0IG5ldG5zX2lwdnNcXHRcXHQqaXB2cztcXG5pbmNsdWRlL25ldC9pcF92cy5oOjc4OTpcXHRjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHJcXHQqY2FkZHI7XFxuaW5jbHVkZS9uZXQvaXBfdnMuaDo3OTA6XFx0Y29uc3QgdW5pb24gbmZfaW5ldF9hZGRyXFx0KnZhZGRyO1xcbmluY2x1ZGUvbmV0L2lwX3ZzLmgtNzkxLVxcdF9fYmUxNlxcdFxcdFxcdFxcdGNwb3J0O1xcbi0tXFxuaW5jbHVkZS9uZXQvaXBfdnMuaD04MDk9c3RydWN0IGlwX3ZzX2Nvbm4ge1xcbi0tXFxuaW5jbHVkZS9uZXQvaXBfdnMuaC04MzQtXFxuaW5jbHVkZS9uZXQvaXBfdnMuaDo4MzU6XFx0dW5pb24gbmZfaW5ldF9hZGRyICAgICAgY2FkZHI7ICAgICAgICAgIC8qIGNsaWVudCBhZGRyZXNzICovXFxuaW5jbHVkZS9uZXQvaXBfdnMuaDo4MzY6XFx0dW5pb24gbmZfaW5ldF9hZGRyICAgICAgdmFkZHI7ICAgICAgICAgIC8qIHZpcnR1YWwgYWRkcmVzcyAqL1xcbmluY2x1ZGUvbmV0L2lwX3ZzLmgtODM3LVxcdC8qIDk2LzEyOCAqL1xcbmluY2x1ZGUvbmV0L2lwX3ZzLmgtODM4LVxcbmluY2x1ZGUvbmV0L2lwX3ZzLmg6ODM5OlxcdHVuaW9uIG5mX2luZXRfYWRkciAgICAgIGRhZGRyOyAgICAgICAgICAvKiBkZXN0aW5hdGlvbiBhZGRyZXNzICovXFxuaW5jbHVkZS9uZXQvaXBfdnMuaC04NDAtXFx0X191MzJcXHRcXHRcXHRmd21hcms7XFx0XFx0LyogRmlyZSB3YWxsIG1hcmsgZnJvbSBza2IgKi9cXG4tLVxcbmluY2x1ZGUvbmV0L2lwX3ZzLmg9ODg2PXN0cnVjdCBpcF92c19zZXJ2aWNlX3VzZXJfa2VybiB7XFxuLS1cXG5pbmNsdWRlL25ldC9pcF92cy5oLTg4OS1cXHR1MTZcXHRcXHRcXHRwcm90b2NvbDtcXG5pbmNsdWRlL25ldC9pcF92cy5oOjg5MDpcXHR1bmlvbiBuZl9pbmV0X2FkZHJcXHRhZGRyO1xcdFxcdC8qIHZpcnR1YWwgaXAgYWRkcmVzcyAqL1xcbmluY2x1ZGUvbmV0L2lwX3ZzLmgtODkxLVxcdF9fYmUxNlxcdFxcdFxcdHBvcnQ7XFxuLS1cXG5pbmNsdWRlL25ldC9pcF92cy5oPTkwMz1zdHJ1Y3QgaXBfdnNfZGVzdF91c2VyX2tlcm4ge1xcbmluY2x1ZGUvbmV0L2lwX3ZzLmgtOTA0LVxcdC8qIGRlc3RpbmF0aW9uIHNlcnZlciBhZGRyZXNzICovXFxuaW5jbHVkZS9uZXQvaXBfdnMuaDo5MDU6XFx0dW5pb24gbmZfaW5ldF9hZGRyXFx0YWRkcjtcXG5pbmNsdWRlL25ldC9pcF92cy5oLTkwNi1cXHRfX2JlMTZcXHRcXHRcXHRwb3J0O1xcbi0tXFxuaW5jbHVkZS9uZXQvaXBfdnMuaD05Mjk9c3RydWN0IGlwX3ZzX3NlcnZpY2Uge1xcbi0tXFxuaW5jbHVkZS9uZXQvaXBfdnMuaC05MzQtXFxuaW5jbHVkZS9uZXQvaXBfdnMuaDo5MzU6XFx0dW5pb24gbmZfaW5ldF9hZGRyXFx0YWRkcjtcXHQgIC8qIElQIGFkZHJlc3MgZm9yIHZpcnR1YWwgc2VydmljZSAqL1xcbmluY2x1ZGUvbmV0L2lwX3ZzLmgtOTM2LVxcdF9fdTMyICAgICAgICAgICAgICAgICAgIGZ3bWFyazsgICAvKiBmaXJld2FsbCBtYXJrIG9mIHRoZSBzZXJ2aWNlICovXFxuLS1cXG5pbmNsdWRlL25ldC9pcF92cy5oPTk2MT1zdHJ1Y3QgaXBfdnNfZGVzdF9kc3Qge1xcbi0tXFxuaW5jbHVkZS9uZXQvaXBfdnMuaC05NjMtXFx0dTMyXFx0XFx0XFx0ZHN0X2Nvb2tpZTtcXG5pbmNsdWRlL25ldC9pcF92cy5oOjk2NDpcXHR1bmlvbiBuZl9pbmV0X2FkZHJcXHRkc3Rfc2FkZHI7XFxuaW5jbHVkZS9uZXQvaXBfdnMuaC05NjUtXFx0c3RydWN0IHJjdV9oZWFkXFx0XFx0cmN1X2hlYWQ7XFxuLS1cXG5pbmNsdWRlL25ldC9pcF92cy5oPTk3MT1zdHJ1Y3QgaXBfdnNfZGVzdCB7XFxuLS1cXG5pbmNsdWRlL25ldC9pcF92cy5oLTk3Ni1cXHRfX2JlMTZcXHRcXHRcXHRwb3J0O1xcdFxcdC8qIHBvcnQgbnVtYmVyIG9mIHRoZSBzZXJ2ZXIgKi9cXG5pbmNsdWRlL25ldC9pcF92cy5oOjk3NzpcXHR1bmlvbiBuZl9pbmV0X2FkZHJcXHRhZGRyO1xcdFxcdC8qIElQIGFkZHJlc3Mgb2YgdGhlIHNlcnZlciAqL1xcbmluY2x1ZGUvbmV0L2lwX3ZzLmgtOTc4LVxcdHZvbGF0aWxlIHVuc2lnbmVkIGludFxcdGZsYWdzO1xcdFxcdC8qIGRlc3Qgc3RhdHVzIGZsYWdzICovXFxuLS1cXG5pbmNsdWRlL25ldC9pcF92cy5oLTEwMDQtXFx0X19iZTE2XFx0XFx0XFx0dnBvcnQ7XFx0XFx0LyogdmlydHVhbCBwb3J0IG51bWJlciAqL1xcbmluY2x1ZGUvbmV0L2lwX3ZzLmg6MTAwNTpcXHR1bmlvbiBuZl9pbmV0X2FkZHJcXHR2YWRkcjtcXHRcXHQvKiB2aXJ0dWFsIElQIGFkZHJlc3MgKi9cXG5pbmNsdWRlL25ldC9pcF92cy5oLTEwMDYtXFx0X191MzJcXHRcXHRcXHR2ZndtYXJrO1xcdC8qIGZpcmV3YWxsIG1hcmsgb2Ygc2VydmljZSAqL1xcbi0tXFxuaW5jbHVkZS9uZXQvaXBfdnMuaD0xMTM4PXN0cnVjdCBpcHZzX3N5bmNfZGFlbW9uX2NmZyB7XFxuaW5jbHVkZS9uZXQvaXBfdnMuaDoxMTM5OlxcdHVuaW9uIG5mX2luZXRfYWRkclxcdG1jYXN0X2dyb3VwO1xcbmluY2x1ZGUvbmV0L2lwX3ZzLmgtMTE0MC1cXHRpbnRcXHRcXHRcXHRzeW5jaWQ7XFxuLS1cXG5pbmNsdWRlL25ldC9pcF92cy5oPTE2MzE9c3RhdGljIGlubGluZSB2b2lkIGlwX3ZzX2Nvbm5fZmlsbF9wYXJhbShzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgaW50IGFmLCBpbnQgcHJvdG9jb2wsXFxuaW5jbHVkZS9uZXQvaXBfdnMuaDoxNjMyOlxcdFxcdFxcdFxcdFxcdCBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgKmNhZGRyLFxcbmluY2x1ZGUvbmV0L2lwX3ZzLmgtMTYzMy1cXHRcXHRcXHRcXHRcXHQgX19iZTE2IGNwb3J0LFxcbmluY2x1ZGUvbmV0L2lwX3ZzLmg6MTYzNDpcXHRcXHRcXHRcXHRcXHQgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyICp2YWRkcixcXG5pbmNsdWRlL25ldC9pcF92cy5oLTE2MzUtXFx0XFx0XFx0XFx0XFx0IF9fYmUxNiB2cG9ydCxcXG4tLVxcbmluY2x1ZGUvbmV0L2lwX3ZzLmg9MTY5Nz1zdHJ1Y3QgaXBfdnNfY29ubiAqaXBfdnNfY29ubl9uZXcoY29uc3Qgc3RydWN0IGlwX3ZzX2Nvbm5fcGFyYW0gKnAsIGludCBkZXN0X2FmLFxcbmluY2x1ZGUvbmV0L2lwX3ZzLmg6MTY5ODpcXHRcXHRcXHRcXHQgIGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciAqZGFkZHIsXFxuaW5jbHVkZS9uZXQvaXBfdnMuaC0xNjk5LVxcdFxcdFxcdFxcdCAgX19iZTE2IGRwb3J0LCB1bnNpZ25lZCBpbnQgZmxhZ3MsXFxuLS1cXG5pbmNsdWRlL25ldC9pcF92cy5oPTE4Njk9aXBfdnNfc2VydmljZV9maW5kKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBpbnQgYWYsIF9fdTMyIGZ3bWFyaywgX191MTYgcHJvdG9jb2wsXFxuaW5jbHVkZS9uZXQvaXBfdnMuaDoxODcwOlxcdFxcdCAgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyICp2YWRkciwgX19iZTE2IHZwb3J0KTtcXG5pbmNsdWRlL25ldC9pcF92cy5oLTE4NzEtXFxuaW5jbHVkZS9uZXQvaXBfdnMuaD0xODcyPWJvb2wgaXBfdnNfaGFzX3JlYWxfc2VydmljZShzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgaW50IGFmLCBfX3UxNiBwcm90b2NvbCxcXG5pbmNsdWRlL25ldC9pcF92cy5oOjE4NzM6XFx0XFx0XFx0ICAgIGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciAqZGFkZHIsIF9fYmUxNiBkcG9ydCk7XFxuaW5jbHVkZS9uZXQvaXBfdnMuaC0xODc0LVxcbi0tXFxuaW5jbHVkZS9uZXQvaXBfdnMuaD0xODc2PWlwX3ZzX2ZpbmRfcmVhbF9zZXJ2aWNlKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBpbnQgYWYsIF9fdTE2IHByb3RvY29sLFxcbmluY2x1ZGUvbmV0L2lwX3ZzLmg6MTg3NzpcXHRcXHRcXHRjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgKmRhZGRyLCBfX2JlMTYgZHBvcnQpO1xcbmluY2x1ZGUvbmV0L2lwX3ZzLmgtMTg3OC1zdHJ1Y3QgaXBfdnNfZGVzdCAqaXBfdnNfZmluZF90dW5uZWwoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGludCBhZixcXG5pbmNsdWRlL25ldC9pcF92cy5oOjE4Nzk6XFx0XFx0XFx0XFx0ICAgICBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgKmRhZGRyLFxcbmluY2x1ZGUvbmV0L2lwX3ZzLmgtMTg4MC1cXHRcXHRcXHRcXHQgICAgIF9fYmUxNiB0dW5fcG9ydCk7XFxuLS1cXG5pbmNsdWRlL25ldC9pcF92cy5oPTE4ODk9aXBfdnNfZmluZF9kZXN0KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBpbnQgc3ZjX2FmLCBpbnQgZGVzdF9hZixcXG5pbmNsdWRlL25ldC9pcF92cy5oOjE4OTA6XFx0XFx0Y29uc3QgdW5pb24gbmZfaW5ldF9hZGRyICpkYWRkciwgX19iZTE2IGRwb3J0LFxcbmluY2x1ZGUvbmV0L2lwX3ZzLmg6MTg5MTpcXHRcXHRjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgKnZhZGRyLCBfX2JlMTYgdnBvcnQsXFxuaW5jbHVkZS9uZXQvaXBfdnMuaC0xODkyLVxcdFxcdF9fdTE2IHByb3RvY29sLCBfX3UzMiBmd21hcmssIF9fdTMyIGZsYWdzKTtcXG4tLVxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0Lmg9MTg9c3RydWN0IG5mX2Nvbm50cmFja19leHBlY3Qge1xcbi0tXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuaC02NC0jaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfTkFUKVxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0Lmg6NjU6XFx0dW5pb24gbmZfaW5ldF9hZGRyIHNhdmVkX2FkZHI7XFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuaC02Ni1cXHQvKiBUaGlzIGlzIHRoZSBvcmlnaW5hbCBwZXItcHJvdG8gcGFydCwgdXNlZCB0byBtYXAgdGhlXFxuLS1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5oPTE1ND12b2lkIG5mX2N0X2V4cGVjdF9pbml0KHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICosIHVuc2lnbmVkIGludCwgdV9pbnQ4X3QsXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuaDoxNTU6XFx0XFx0ICAgICAgIGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciAqLFxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0Lmg6MTU2OlxcdFxcdCAgICAgICBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgKixcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5oLTE1Ny1cXHRcXHQgICAgICAgdV9pbnQ4X3QsIGNvbnN0IF9fYmUxNiAqLCBjb25zdCBfX2JlMTYgKik7XFxuLS1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2w0cHJvdG8uaD03OT1pbnQgbmZfY29ubnRyYWNrX2luZXRfZXJyb3Ioc3RydWN0IG5mX2Nvbm4gKnRtcGwsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2w0cHJvdG8uaC04Mi1cXHRcXHRcXHQgICAgdTggbDRwcm90byxcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2w0cHJvdG8uaDo4MzpcXHRcXHRcXHQgICAgdW5pb24gbmZfaW5ldF9hZGRyICpvdXRlcl9kYWRkcik7XFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sNHByb3RvLmgtODQtXFxuLS1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3R1cGxlLmgtMjUtXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190dXBsZS5oOjI2OiNkZWZpbmUgTkZfQ1RfVFVQTEVfTDNTSVpFXFx0QVJSQVlfU0laRSgoKHVuaW9uIG5mX2luZXRfYWRkciAqKU5VTEwpLVxcdTAwM2VhbGwpXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190dXBsZS5oLTI3LVxcbi0tXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190dXBsZS5oPTI5PXN0cnVjdCBuZl9jb25udHJhY2tfbWFuIHtcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3R1cGxlLmg6MzA6XFx0dW5pb24gbmZfaW5ldF9hZGRyIHUzO1xcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGUuaC0zMS1cXHR1bmlvbiBuZl9jb25udHJhY2tfbWFuX3Byb3RvIHU7XFxuLS1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3R1cGxlLmg9Mzc9c3RydWN0IG5mX2Nvbm50cmFja190dXBsZSB7XFxuLS1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3R1cGxlLmgtNDEtXFx0c3RydWN0IHtcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3R1cGxlLmg6NDI6XFx0XFx0dW5pb24gbmZfaW5ldF9hZGRyIHUzO1xcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGUuaC00My1cXHRcXHR1bmlvbiB7XFxuLS1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3R1cGxlLmg9Nzg9c3RydWN0IG5mX2Nvbm50cmFja190dXBsZV9tYXNrIHtcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3R1cGxlLmgtNzktXFx0c3RydWN0IHtcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3R1cGxlLmg6ODA6XFx0XFx0dW5pb24gbmZfaW5ldF9hZGRyIHUzO1xcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGUuaC04MS1cXHRcXHR1bmlvbiBuZl9jb25udHJhY2tfbWFuX3Byb3RvIHU7XFxuLS1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3R1cGxlLmg9MTI3PXN0YXRpYyBpbmxpbmUgYm9vbCBfX25mX2N0X3R1cGxlX3NyY19lcXVhbChjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0MSxcXG4tLVxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGUuaC0xMjkte1xcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGUuaDoxMzA6XFx0cmV0dXJuIChuZl9pbmV0X2FkZHJfY21wKFxcdTAwMjZ0MS1cXHUwMDNlc3JjLnUzLCBcXHUwMDI2dDItXFx1MDAzZXNyYy51MykgXFx1MDAyNlxcdTAwMjZcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3R1cGxlLmgtMTMxLVxcdFxcdHQxLVxcdTAwM2VzcmMudS5hbGwgPT0gdDItXFx1MDAzZXNyYy51LmFsbCBcXHUwMDI2XFx1MDAyNlxcbi0tXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190dXBsZS5oPTEzNT1zdGF0aWMgaW5saW5lIGJvb2wgX19uZl9jdF90dXBsZV9kc3RfZXF1YWwoY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdDEsXFxuLS1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3R1cGxlLmgtMTM3LXtcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3R1cGxlLmg6MTM4OlxcdHJldHVybiAobmZfaW5ldF9hZGRyX2NtcChcXHUwMDI2dDEtXFx1MDAzZWRzdC51MywgXFx1MDAyNnQyLVxcdTAwM2Vkc3QudTMpIFxcdTAwMjZcXHUwMDI2XFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190dXBsZS5oLTEzOS1cXHRcXHR0MS1cXHUwMDNlZHN0LnUuYWxsID09IHQyLVxcdTAwM2Vkc3QudS5hbGwgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGUuaD0xNTE9bmZfY3RfdHVwbGVfbWFza19lcXVhbChjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlX21hc2sgKm0xLFxcbi0tXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190dXBsZS5oLTE1My17XFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190dXBsZS5oOjE1NDpcXHRyZXR1cm4gKG5mX2luZXRfYWRkcl9jbXAoXFx1MDAyNm0xLVxcdTAwM2VzcmMudTMsIFxcdTAwMjZtMi1cXHUwMDNlc3JjLnUzKSBcXHUwMDI2XFx1MDAyNlxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGUuaC0xNTUtXFx0XFx0bTEtXFx1MDAzZXNyYy51LmFsbCA9PSBtMi1cXHUwMDNlc3JjLnUuYWxsKTtcXG4tLVxcbmluY2x1ZGUvbmV0L25ldG5zL2lwdjQuaD01NT1zdHJ1Y3QgbmV0bnNfaXB2NCB7XFxuLS1cXG5pbmNsdWRlL25ldC9uZXRucy9pcHY0LmgtMjk5LVxcdHNpcGhhc2hfa2V5X3RcXHRpcF9pZF9rZXk7XFxuaW5jbHVkZS9uZXQvbmV0bnMvaXB2NC5oOjMwMDpcXHRzdHJ1Y3QgaGxpc3RfaGVhZFxcdCppbmV0X2FkZHJfbHN0O1xcbmluY2x1ZGUvbmV0L25ldG5zL2lwdjQuaC0zMDEtXFx0c3RydWN0IGRlbGF5ZWRfd29ya1xcdGFkZHJfY2hrX3dvcms7XFxuLS1cXG5pbmNsdWRlL25ldC9yb3V0ZS5oPTI1MT12b2lkIGlwX3J0X3NlbmRfcmVkaXJlY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuaW5jbHVkZS9uZXQvcm91dGUuaC0yNTItXFxuaW5jbHVkZS9uZXQvcm91dGUuaDoyNTM6dW5zaWduZWQgaW50IGluZXRfYWRkcl90eXBlKHN0cnVjdCBuZXQgKm5ldCwgX19iZTMyIGFkZHIpO1xcbmluY2x1ZGUvbmV0L3JvdXRlLmg6MjU0OnVuc2lnbmVkIGludCBpbmV0X2FkZHJfdHlwZV90YWJsZShzdHJ1Y3QgbmV0ICpuZXQsIF9fYmUzMiBhZGRyLCB1MzIgdGJfaWQpO1xcbmluY2x1ZGUvbmV0L3JvdXRlLmgtMjU1LXVuc2lnbmVkIGludCBpbmV0X2Rldl9hZGRyX3R5cGUoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbmluY2x1ZGUvbmV0L3JvdXRlLmgtMjU2LVxcdFxcdFxcdFxcdF9fYmUzMiBhZGRyKTtcXG5pbmNsdWRlL25ldC9yb3V0ZS5oOjI1Nzp1bnNpZ25lZCBpbnQgaW5ldF9hZGRyX3R5cGVfZGV2X3RhYmxlKHN0cnVjdCBuZXQgKm5ldCxcXG5pbmNsdWRlL25ldC9yb3V0ZS5oLTI1OC1cXHRcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci5oPTU4PWVudW0ge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci5oLTcxLVxcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIuaDo3Mjp1bmlvbiBuZl9pbmV0X2FkZHIge1xcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIuaC03My1cXHRfX3UzMlxcdFxcdGFsbFs0XTtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZfbmF0Lmg9Mzg9c3RydWN0IG5mX25hdF9yYW5nZSB7XFxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci9uZl9uYXQuaC0zOS1cXHR1bnNpZ25lZCBpbnRcXHRcXHRcXHRmbGFncztcXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mX25hdC5oOjQwOlxcdHVuaW9uIG5mX2luZXRfYWRkclxcdFxcdG1pbl9hZGRyO1xcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZfbmF0Lmg6NDE6XFx0dW5pb24gbmZfaW5ldF9hZGRyXFx0XFx0bWF4X2FkZHI7XFxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci9uZl9uYXQuaC00Mi1cXHR1bmlvbiBuZl9jb25udHJhY2tfbWFuX3Byb3RvXFx0bWluX3Byb3RvO1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci9uZl9uYXQuaD00Nj1zdHJ1Y3QgbmZfbmF0X3JhbmdlMiB7XFxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci9uZl9uYXQuaC00Ny1cXHR1bnNpZ25lZCBpbnRcXHRcXHRcXHRmbGFncztcXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mX25hdC5oOjQ4OlxcdHVuaW9uIG5mX2luZXRfYWRkclxcdFxcdG1pbl9hZGRyO1xcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZfbmF0Lmg6NDk6XFx0dW5pb24gbmZfaW5ldF9hZGRyXFx0XFx0bWF4X2FkZHI7XFxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci9uZl9uYXQuaC01MC1cXHR1bmlvbiBuZl9jb25udHJhY2tfbWFuX3Byb3RvXFx0bWluX3Byb3RvO1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci94dF9ITUFSSy5oPTQwPXN0cnVjdCB4dF9obWFya19pbmZvIHtcXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X0hNQVJLLmg6NDE6XFx0dW5pb24gbmZfaW5ldF9hZGRyXFx0c3JjX21hc2s7XFxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci94dF9ITUFSSy5oOjQyOlxcdHVuaW9uIG5mX2luZXRfYWRkclxcdGRzdF9tYXNrO1xcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIveHRfSE1BUksuaC00My1cXHR1bmlvbiBobWFya19wb3J0c1xcdHBvcnRfbWFzaztcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIveHRfVEVFLmg9Nz1zdHJ1Y3QgeHRfdGVlX3RnaW5mbyB7XFxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci94dF9URUUuaDo4OlxcdHVuaW9uIG5mX2luZXRfYWRkciBndztcXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X1RFRS5oLTktXFx0Y2hhciBvaWZbMTZdO1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci94dF9UUFJPWFkuaD0xOD1zdHJ1Y3QgeHRfdHByb3h5X3RhcmdldF9pbmZvX3YxIHtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIveHRfVFBST1hZLmgtMjAtXFx0X191MzIgbWFya192YWx1ZTtcXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X1RQUk9YWS5oOjIxOlxcdHVuaW9uIG5mX2luZXRfYWRkciBsYWRkcjtcXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X1RQUk9YWS5oLTIyLVxcdF9fYmUxNiBscG9ydDtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIveHRfY29ubmxpbWl0Lmg9MTU9c3RydWN0IHh0X2Nvbm5saW1pdF9pbmZvIHtcXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X2Nvbm5saW1pdC5oLTE2LVxcdHVuaW9uIHtcXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X2Nvbm5saW1pdC5oOjE3OlxcdFxcdHVuaW9uIG5mX2luZXRfYWRkciBtYXNrO1xcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIveHRfY29ubmxpbWl0LmgtMTgtI2lmbmRlZiBfX0tFUk5FTF9fXFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X2Nvbm50cmFjay5oPTM4PXN0cnVjdCB4dF9jb25udHJhY2tfbXRpbmZvMSB7XFxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci94dF9jb25udHJhY2suaDozOTpcXHR1bmlvbiBuZl9pbmV0X2FkZHIgb3JpZ3NyY19hZGRyLCBvcmlnc3JjX21hc2s7XFxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci94dF9jb25udHJhY2suaDo0MDpcXHR1bmlvbiBuZl9pbmV0X2FkZHIgb3JpZ2RzdF9hZGRyLCBvcmlnZHN0X21hc2s7XFxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci94dF9jb25udHJhY2suaDo0MTpcXHR1bmlvbiBuZl9pbmV0X2FkZHIgcmVwbHNyY19hZGRyLCByZXBsc3JjX21hc2s7XFxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci94dF9jb25udHJhY2suaDo0MjpcXHR1bmlvbiBuZl9pbmV0X2FkZHIgcmVwbGRzdF9hZGRyLCByZXBsZHN0X21hc2s7XFxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci94dF9jb25udHJhY2suaC00My1cXHRfX3UzMiBleHBpcmVzX21pbiwgZXhwaXJlc19tYXg7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X2Nvbm50cmFjay5oPTUxPXN0cnVjdCB4dF9jb25udHJhY2tfbXRpbmZvMiB7XFxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci94dF9jb25udHJhY2suaDo1MjpcXHR1bmlvbiBuZl9pbmV0X2FkZHIgb3JpZ3NyY19hZGRyLCBvcmlnc3JjX21hc2s7XFxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci94dF9jb25udHJhY2suaDo1MzpcXHR1bmlvbiBuZl9pbmV0X2FkZHIgb3JpZ2RzdF9hZGRyLCBvcmlnZHN0X21hc2s7XFxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci94dF9jb25udHJhY2suaDo1NDpcXHR1bmlvbiBuZl9pbmV0X2FkZHIgcmVwbHNyY19hZGRyLCByZXBsc3JjX21hc2s7XFxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci94dF9jb25udHJhY2suaDo1NTpcXHR1bmlvbiBuZl9pbmV0X2FkZHIgcmVwbGRzdF9hZGRyLCByZXBsZHN0X21hc2s7XFxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci94dF9jb25udHJhY2suaC01Ni1cXHRfX3UzMiBleHBpcmVzX21pbiwgZXhwaXJlc19tYXg7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X2Nvbm50cmFjay5oPTY0PXN0cnVjdCB4dF9jb25udHJhY2tfbXRpbmZvMyB7XFxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci94dF9jb25udHJhY2suaDo2NTpcXHR1bmlvbiBuZl9pbmV0X2FkZHIgb3JpZ3NyY19hZGRyLCBvcmlnc3JjX21hc2s7XFxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci94dF9jb25udHJhY2suaDo2NjpcXHR1bmlvbiBuZl9pbmV0X2FkZHIgb3JpZ2RzdF9hZGRyLCBvcmlnZHN0X21hc2s7XFxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci94dF9jb25udHJhY2suaDo2NzpcXHR1bmlvbiBuZl9pbmV0X2FkZHIgcmVwbHNyY19hZGRyLCByZXBsc3JjX21hc2s7XFxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci94dF9jb25udHJhY2suaDo2ODpcXHR1bmlvbiBuZl9pbmV0X2FkZHIgcmVwbGRzdF9hZGRyLCByZXBsZHN0X21hc2s7XFxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci94dF9jb25udHJhY2suaC02OS1cXHRfX3UzMiBleHBpcmVzX21pbiwgZXhwaXJlc19tYXg7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X2lwcmFuZ2UuaD0xNT1zdHJ1Y3QgeHRfaXByYW5nZV9tdGluZm8ge1xcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIveHRfaXByYW5nZS5oOjE2OlxcdHVuaW9uIG5mX2luZXRfYWRkciBzcmNfbWluLCBzcmNfbWF4O1xcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIveHRfaXByYW5nZS5oOjE3OlxcdHVuaW9uIG5mX2luZXRfYWRkciBkc3RfbWluLCBkc3RfbWF4O1xcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIveHRfaXByYW5nZS5oLTE4LVxcdF9fdTggZmxhZ3M7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X2lwdnMuaD0yMD1zdHJ1Y3QgeHRfaXB2c19tdGluZm8ge1xcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIveHRfaXB2cy5oOjIxOlxcdHVuaW9uIG5mX2luZXRfYWRkclxcdHZhZGRyLCB2bWFzaztcXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X2lwdnMuaC0yMi1cXHRfX2JlMTZcXHRcXHRcXHR2cG9ydDtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIveHRfcG9saWN5Lmg9NDA9c3RydWN0IHh0X3BvbGljeV9lbGVtIHtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIveHRfcG9saWN5LmgtNDMtXFx0XFx0c3RydWN0IHtcXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X3BvbGljeS5oOjQ0OlxcdFxcdFxcdHVuaW9uIG5mX2luZXRfYWRkciBzYWRkcjtcXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X3BvbGljeS5oOjQ1OlxcdFxcdFxcdHVuaW9uIG5mX2luZXRfYWRkciBzbWFzaztcXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X3BvbGljeS5oOjQ2OlxcdFxcdFxcdHVuaW9uIG5mX2luZXRfYWRkciBkYWRkcjtcXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X3BvbGljeS5oOjQ3OlxcdFxcdFxcdHVuaW9uIG5mX2luZXRfYWRkciBkbWFzaztcXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X3BvbGljeS5oLTQ4LVxcdFxcdH07XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X3JlY2VudC5oPTM3PXN0cnVjdCB4dF9yZWNlbnRfbXRpbmZvX3YxIHtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIveHRfcmVjZW50LmgtNDMtXFx0X191OCBzaWRlO1xcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIveHRfcmVjZW50Lmg6NDQ6XFx0dW5pb24gbmZfaW5ldF9hZGRyIG1hc2s7XFxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci94dF9yZWNlbnQuaC00NS19O1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfTlBULmg9OD1zdHJ1Y3QgaXA2dF9ucHRfdGdpbmZvIHtcXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9OUFQuaDo5OlxcdHVuaW9uIG5mX2luZXRfYWRkclxcdHNyY19wZng7XFxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfTlBULmg6MTA6XFx0dW5pb24gbmZfaW5ldF9hZGRyXFx0ZHN0X3BmeDtcXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9OUFQuaC0xMS1cXHRfX3U4XFx0XFx0XFx0c3JjX3BmeF9sZW47XFxuLS1cXG5uZXQvY29yZS91dGlscy5jPTQwMT1FWFBPUlRfU1lNQk9MKGluZXRfcHRvbl93aXRoX3Njb3BlKTtcXG5uZXQvY29yZS91dGlscy5jLTQwMi1cXG5uZXQvY29yZS91dGlscy5jOjQwMzpib29sIGluZXRfYWRkcl9pc19hbnkoc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKmFkZHIpXFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjQxOjE1Ljk2NDY5MTAzOFoiLCJTZXEiOjUzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODA4MzYxODYyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBgbmV0Y29uc29sZWAgSVAgQWRkcmVzcyBIYW5kbGluZyoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgcmVmYWN0b3JpbmcgaG93IGBuZXRjb25zb2xlYCBoYW5kbGVzIElQIGFkZHJlc3Nlcy4gUHJldmlvdXNseSwgd2Ugd2VyZSB1c2luZyBhIGB1bmlvbiBpbmV0X2FkZHJgIGFuZCBhIHNlcGFyYXRlIGJvb2xlYW4gYGlwdjZgLiBOb3csIHdlJ3JlIHVzaW5nIGEgYHN0cnVjdCBpbmV0X2FkZHJgIHdoaWNoIGluY2x1ZGVzIGEgZmFtaWx5IGZpZWxkIGFuZCB0aGUgdW5pb24uIEl0IGxvb2tzIGxpa2UgdGhlIGB1bmlvbiBpbmV0X2FkZHJgIGRlZmluaXRpb24gaGFzIGJlZW4gbW92ZWQgZnJvbSB0aGUgaGVhZGVyIHRvIHRoZSBzb3VyY2UgZmlsZSwgd2hpY2ggbWFrZXMgc2Vuc2UgdG8gZW5jYXBzdWxhdGUgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMuXG5cbkkgc2VlIHRoZXkndmUgdXBkYXRlZCB0aGUgY29uZmlnZnMgc2hvdyBmdW5jdGlvbnMsIGBsb2NhbF9pcF9zaG93YCBhbmQgYHJlbW90ZV9pcF9zaG93YC4gVGhleSdyZSBub3cgY2hlY2tpbmcgdGhlIGBmYW1pbHlgIGZpZWxkIG9mIHRoZSBgaW5ldF9hZGRyYCB0byBkZXRlcm1pbmUgdGhlIElQIHZlcnNpb24gYW5kIHVzaW5nIGAlcEk0YCBvciBgJXBJNmNgIGluIGBzeXNmc19lbWl0YC4gVGhpcyBzZWVtcyBzYWZlOyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrcyBhcmUgcHJlc2VudCBzaW5jZSB0aGUgb3V0cHV0IGlzIGZvcm1hdHRlZCBhcyBhIHN0cmluZy5cblxuTm93LCBsZXQncyBjb25zaWRlciBgbmV0cG9sbF9zZW5kX3VkcGAuIFRoaXMgaXMgd2hlcmUgdGhlIElQIGFkZHJlc3NlcyBhcmUgdXNlZCB0byBjb25zdHJ1Y3QgdGhlIFVEUCBwYWNrZXRzLiBUaGVyZSBhcmUgYSBmZXcgY2hlY2tzIGxpa2UgYG50LVx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDZgIHRvIHNlbGVjdCB0aGUgcmlnaHQgY2hlY2tzdW0gb3IgcHJvdG9jb2wuIElmIGBudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5YCBpcyBgQUZfVU5TUEVDYCwgaXQgZmFsbHMgYmFjayB0byBJUHY0LiBCdXQgYG5ldGNvbnNfbmV0cG9sbF9zZXR1cGAgY2hlY2tzIHRvIG1ha2Ugc3VyZSBgcmVtb3RlX2lwYCBoYXMgYmVlbiBjb25maWd1cmVkIHdpdGggYW4gYWRkcmVzcyBhbmQgZmFtaWx5LCBhbmQgdGhlIHJlbW90ZSBmYW1pbHkgbXVzdCBtYXRjaCB0aGUgbG9jYWwgSVAgYWRkcmVzcyBmYW1pbHkuIElmIGByZW1vdGVfaXAuZmFtaWx5YCBpcyBgQUZfVU5TUEVDYCB3aGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLCB0aGUgc2V0dXAgZmFpbHMsIHNvIGBuZXRwb2xsX3NlbmRfdWRwYCB3b24ndCBiZSBjYWxsZWQuXG5cblRoZSBwYXJzaW5nIGZ1bmN0aW9uLCBgbmV0cG9sbF9wYXJzZV9pcF9hZGRyYCwgaGFzIGFsc28gYmVlbiB1cGRhdGVkIHRvIHVzZSB0aGUgbmV3IGBpbmV0X2FkZHJgIHN0cnVjdC4gSXQgcG9wdWxhdGVzIGBhZGRyLVx1MDAzZWlwYCBvciBgYWRkci1cdTAwM2VpbjZgIGFuZCBzZXRzIGBhZGRyLVx1MDAzZWZhbWlseWAuIElmIGl0IGZhaWxzLCBpdCByZXR1cm5zIC0xLCBhbmQgaXQncyB1cCB0byB0aGUgY2FsbGVyIHRvIGhhbmRsZSB0aGUgZXJyb3IuIEkgY2hlY2tlZCB0aGF0IGV2ZW4gaWYgcGFyc2luZyBmYWlscywgdGhlcmUncyBubyB3YXkgdG8gbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeSBzaW5jZSB0aGUgYGluZXRfYWRkcmAgaXMgemVyby1hbGxvY2F0ZWQsIGFuZCB0aGUgZmFtaWx5IGlzIHByb3Blcmx5IGluaXRpYWxpemVkLlxuXG5DaGVja2luZyBgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZWAgY29uZmlybXMgdGhhdCB0aGUgc3RydWN0dXJlIGlzIGFsd2F5cyBmdWxseSBpbml0aWFsaXplZCB3aGVuIHVzZWQuIFRoZSBib290IGNvbW1hbmQgbGluZSBwYXJzZXIgdXNlcyBga3phbGxvY19vYmpgLCBzbyBpdCdzIGFsbCBnb29kLlxuXG5UaGUgcGF0Y2ggc2VlbXMgd2VsbC1yZWFzb25lZCBhbmQgc2VjdXJlLiBUaGVyZSdzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCBvciBsZWFrZWQgaGVyZS4gVGhlIHN0cnVjdHVyZXMgYXJlIHplcm8tYWxsb2NhdGVkLCB0aGUgZGF0YSBpcyBub3QgY29waWVkIHRvIHVzZXJzcGFjZSBpbiBiaW5hcnkgZm9ybSwgYW5kIHRoZSBJUCBhZGRyZXNzIGRhdGEgc2VudCBvdmVyIHRoZSBuZXR3b3JrIGlzIGZ1bGx5IGluaXRpYWxpemVkIGJ5IHRoZSB0aW1lIGl0IGlzIHVzZWQgdG8gY29uc3RydWN0IHBhY2tldHMuIFRoZSBmYW1pbHkgZmllbGQgaXMgYWxzbyB2ZXJpZmllZCB3aXRoIGNoZWNrcyBiZWZvcmUgdXNpbmcgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMTc5LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTo0MTo0NC4wNDgzMTIwMjJaIiwiU2VxIjo1NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1Nzc0ODA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInB1c2hfaXB2NFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIxMDI9c3RhdGljIHZvaWQgcHVzaF9ldGgoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTE2LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMTE3OnN0YXRpYyB2b2lkIHB1c2hfaXB2NChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTE4LVxcdFxcdCAgICAgIGludCBsZW4pXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjE2OT1zdGF0aWMgaW50IG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxOTgtXFx0ZWxzZVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMTk5OlxcdFxcdHB1c2hfaXB2NChudCwgc2tiLCBsZW4pO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjAwLVxcdHB1c2hfZXRoKG50LCBza2IpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTo0MTo0NC4wOTQwOTI3NDdaIiwiU2VxIjo1NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg4OTU5NzM1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIGBwdXNoX2lwdjRgIEltcGxlbWVudGF0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYHB1c2hfaXB2NGAgaW1wbGVtZW50YXRpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyBkb2luZyB3aGF0IEkgZXhwZWN0IGl0IHRvIGRvLCBhbmQgdGhhdCBpdCdzIGhhbmRsaW5nIHRoZSBlZGdlIGNhc2VzIGNvcnJlY3RseS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgcmV2aWV3IHRoZSBjb3JlIGxvZ2ljIOKAkyBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgdXNlZCwgdGhlIGFsZ29yaXRobXMgZW1wbG95ZWQgZm9yIHB1c2hpbmcgdGhlIElQdjQgcGFja2V0cywgcG90ZW50aWFsIG1lbW9yeSBjb25zaWRlcmF0aW9ucywgYW5kIGlmIHRoZXJlIGFyZSBhbnkgb2J2aW91cyBib3R0bGVuZWNrcy4gSSB3YW50IHRvIGxvb2sgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIGVzcGVjaWFsbHkgaWYgdGhpcyBmdW5jdGlvbiBpcyBtdWx0aXRocmVhZGVkLiBUaGUgY29kZSBzaG91bGQgYmUgYWRoZXJpbmcgdG8gcmVsZXZhbnQgUkZDcy4gQWxzbywgSSdsbCBwYXkgYXR0ZW50aW9uIHRvIGFueSBlcnJvciBoYW5kbGluZzsgaXMgaXQgcm9idXN0LCBhbmQgYXJlIGVycm9ycyBiZWluZyBwcm9wYWdhdGVkIGFuZCBsb2dnZWQgYXBwcm9wcmlhdGVseT8gSSdsbCBwcm9iYWJseSBzdGFydCBieSBza2V0Y2hpbmcgb3V0IGEgZmV3IHBvdGVudGlhbCB0ZXN0IHNjZW5hcmlvcywgaW5jbHVkaW5nIHZhbGlkIHBhY2tldHMsIG1hbGZvcm1lZCBwYWNrZXRzLCBhbmQgdGhvc2Ugd2l0aCB2YXJpb3VzIFRUTCB2YWx1ZXMuIE92ZXJhbGwsIEkgd2FudCB0byBjb25maXJtIHRoZSBlbGVnYW5jZSBvZiB0aGUgbG9naWMgYW5kIGl0cyBhZGhlcmVuY2UgdG8gYmVzdCBwcmFjdGljZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NTYxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6NDE6NDcuOTgzNjkyNDA5WiIsIlNlcSI6NTYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTk0MTk1NSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHVzaF9pcHY0LipcXFxce1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjQxOjQ4LjAyOTY0NzUxNFoiLCJTZXEiOjU3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzAxMjk0ODY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZCBhbmQgcmVmbGVjdGluZyBvbiBpdCBpbnRlcm5hbGx5OlxuXG4qKkJyZWFraW5nIERvd24gdGhlIGBwdXNoX2lwdjRgIFJvdXRpbmUqKlxuXG5SaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIFwiUmVhZCBgcHVzaF9pcHY0YCB1c2luZyByZWFkLWZpbGUuXCIgRXNzZW50aWFsbHksIEknbSB0aGlua2luZyBhYm91dCBkaWdnaW5nIGludG8gdGhlIGNvZGUuIFRoaXMgbGlrZWx5IG1lYW5zIEknbSB0cm91Ymxlc2hvb3RpbmcsIG9yIG1heWJlIHJldmlld2luZyBzb21lIGV4aXN0aW5nIGluZnJhc3RydWN0dXJlLiBUaGUgZnVuY3Rpb24gbmFtZSwgYHB1c2hfaXB2NGAsIGltbWVkaWF0ZWx5IHRlbGxzIG1lIGl0J3MgcmVsYXRlZCB0byBwdXNoaW5nIG9yIGNvbmZpZ3VyaW5nIElQdjQtcmVsYXRlZCBkYXRhLiBJIG5lZWQgdGhlIGFjdHVhbCBjb2RlLCB0aG91Z2guIGByZWFkLWZpbGVgIGlzIHRoZSB0b29sIHRvIHVzZS4gSSdtIGdvaW5nIHRvIHB1bGwgdGhlIHNvdXJjZSBjb2RlIHRvIHN0YXJ0IHRoZSBkZWVwLWRpdmUuIEZyb20gdGhlcmUgSSdsbCBzdGFydCBhbmFseXppbmcgdG8gc2VlIHdoYXQgdGhlIGZ1bmN0aW9uIGRvZXMsIGhvdyBpdCB3b3JrcyBhbmQgd2hlcmUgaXQgaXMgdXNlZC4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGxvb2sgYXQgdGhlIG90aGVyIGZ1bmN0aW9ucyB0aGF0IGNhbGwgaXQgYXMgd2VsbCFcblxuXG4iLCJJbnB1dFRva2VucyI6MjU4MzMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTo0MTo1MS4zMzA5NDU5ODhaIiwiU2VxIjo1OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI4ODAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTE3LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMTE3OlxcdHN0YXRpYyB2b2lkIHB1c2hfaXB2NChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbjIxMTg6XFx0XFx0XFx0ICAgICAgaW50IGxlbilcXG4yMTE5OlxcdHtcXG4yMTIwOlxcdFxcdHN0YXRpYyBhdG9taWNfdCBpcF9pZGVudDtcXG4yMTIxOlxcdFxcdHN0cnVjdCBpcGhkciAqaXBoO1xcbjIxMjI6XFx0XFx0aW50IGlwX2xlbjtcXG4yMTIzOlxcdFxcbjIxMjQ6XFx0XFx0aXBfbGVuID0gbGVuICsgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpICsgc2l6ZW9mKHN0cnVjdCBpcGhkcik7XFxuMjEyNTpcXHRcXG4yMTI2OlxcdFxcdHNrYl9wdXNoKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcGhkcikpO1xcbjIxMjc6XFx0XFx0c2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7XFxuMjEyODpcXHRcXHRpcGggPSBpcF9oZHIoc2tiKTtcXG4yMTI5OlxcdFxcbjIxMzA6XFx0XFx0LyogaXBoLVxcdTAwM2V2ZXJzaW9uID0gNDsgaXBoLVxcdTAwM2VpaGwgPSA1OyAqL1xcbjIxMzE6XFx0XFx0Kih1bnNpZ25lZCBjaGFyICopaXBoID0gMHg0NTtcXG4yMTMyOlxcdFxcdGlwaC1cXHUwMDNldG9zID0gMDtcXG4yMTMzOlxcdFxcdHB1dF91bmFsaWduZWQoaHRvbnMoaXBfbGVuKSwgXFx1MDAyNmlwaC1cXHUwMDNldG90X2xlbik7XFxuMjEzNDpcXHRcXHRpcGgtXFx1MDAzZWlkID0gaHRvbnMoYXRvbWljX2luY19yZXR1cm4oXFx1MDAyNmlwX2lkZW50KSk7XFxuMjEzNTpcXHRcXHRpcGgtXFx1MDAzZWZyYWdfb2ZmID0gMDtcXG4yMTM2OlxcdFxcdGlwaC1cXHUwMDNldHRsID0gNjQ7XFxuMjEzNzpcXHRcXHRpcGgtXFx1MDAzZXByb3RvY29sID0gSVBQUk9UT19VRFA7XFxuMjEzODpcXHRcXHRpcGgtXFx1MDAzZWNoZWNrID0gMDtcXG4yMTM5OlxcdFxcdHB1dF91bmFsaWduZWQobnQtXFx1MDAzZWxvY2FsX2lwLmlwLCBcXHUwMDI2aXBoLVxcdTAwM2VzYWRkcik7XFxuMjE0MDpcXHRcXHRwdXRfdW5hbGlnbmVkKG50LVxcdTAwM2VyZW1vdGVfaXAuaXAsIFxcdTAwMjZpcGgtXFx1MDAzZWRhZGRyKTtcXG4yMTQxOlxcdFxcdGlwaC1cXHUwMDNlY2hlY2sgPSBpcF9mYXN0X2NzdW0oKHVuc2lnbmVkIGNoYXIgKilpcGgsIGlwaC1cXHUwMDNlaWhsKTtcXG4yMTQyOlxcdFxcdHNrYi1cXHUwMDNlcHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUCk7XFxuMjE0MzpcXHR9XFxuMjE0NDpcXHRcXG4yMTQ1OlxcdHN0YXRpYyB2b2lkIHB1c2hfaXB2NihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbjIxNDY6XFx0XFx0XFx0ICAgICAgaW50IGxlbilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6NDE6NTEuMzMxMDc2NjU4WiIsIlNlcSI6NTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NTg3MTkzNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGlzIGNvZGUgc25pcHBldCwgZXhwcmVzc2VkIGFzIGlmIGl0J3MgbXkgb3duIHRob3VnaHQgcHJvY2VzczpcblxuKipNeSBBbmFseXNpcyBvZiB0aGUgSVAgQWRkcmVzcyBIYW5kbGluZyoqXG5cblJpZ2h0LCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGlzLiBUaGUgY29kZSBpcyBjbGVhcmx5IHVzaW5nIGBwdXRfdW5hbGlnbmVkKG50LVx1MDAzZWxvY2FsX2lwLmlwLCBcdTAwMjZpcGgtXHUwMDNlc2FkZHIpO2AuIEhtbSwgaXQncyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBpc24ndCBpdD8gSXQncyBkaXJlY3RseSBjb3B5aW5nIGJ5dGVzIGZyb20gYG50LVx1MDAzZWxvY2FsX2lwLmlwYCB0byB0aGUgc291cmNlIGFkZHJlc3MgZmllbGQgKGBpcGgtXHUwMDNlc2FkZHJgKSBvZiB0aGUgSVAgaGVhZGVyLiBUaGUgaW1wb3J0YW50IHBhcnQgaGVyZSBpcyB0aGUgbm90ZSBvbiBcImV4YWN0bHkgNCBieXRlcy5cIiBUaGF0IG1lYW5zIHdlJ3JlIGRlYWxpbmcgd2l0aCBhbiBJUHY0IGFkZHJlc3MuIFRoZXJlJ3Mgbm8gZmFuY3kgcGFkZGluZyBvciBhbnl0aGluZyBleHRyYSBiZWluZyBjb3BpZWQgZnJvbSB0aGUgYHN0cnVjdCBpbmV0X2FkZHJgLCB3aGljaCBpcyBnZW5lcmFsbHkgZ29vZCBwcmFjdGljZSB0byBhdm9pZCBzdXJwcmlzZXMuIFRoYXQncyBhIGNsZWFuIGFuZCBlZmZpY2llbnQgd2F5IHRvIGhhbmRsZSBpdC5cblxuQW5kIHRoZSBmYWN0IHRoYXQgdGhlIHNhbWUgcHJpbmNpcGxlIGFwcGVhcnMgaW4gYHB1c2hfaXB2NmAgY29uZmlybXMgbXkgaW5pdGlhbCBoeXBvdGhlc2lzLiBUaGUgY29kZSBpcyBsaWtlbHkganVzdCBncmFiYmluZyB0aGUgYnl0ZXMgYW5kIGNodWNraW5nIHRoZW0gaW50byB0aGUgSVAgaGVhZGVyIGZvciBib3RoIElQdjQgYW5kIElQdjYsIGFzc3VtaW5nIHRoZSBjb3JyZWN0IHN0cnVjdHVyZS4gTWFrZXMgc2Vuc2UuIFRoaXMgc3VnZ2VzdHMgdGhlcmUgbWlnaHQgYmUgc29tZSB1bmRlcmx5aW5nIGFzc3VtcHRpb24gYWJvdXQgdGhlIHN0cnVjdHVyZSBvZiB0aGUgYGluZXRfYWRkcmAgb3Igb3RoZXIgc3RydWN0cyBpZiB0aGF0IGlzIG5vdCB0aGUgY2FzZS4gTmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBwYXJ0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjYwOCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6NDE6NTUuMTg5Nzk4NDMzWiIsIlNlcSI6NjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExODcyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjE0NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjE0NTpcXHRzdGF0aWMgdm9pZCBwdXNoX2lwdjYoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4yMTQ2OlxcdFxcdFxcdCAgICAgIGludCBsZW4pXFxuMjE0NzpcXHR7XFxuMjE0ODpcXHRcXHRzdHJ1Y3QgaXB2NmhkciAqaXA2aDtcXG4yMTQ5OlxcdFxcbjIxNTA6XFx0XFx0c2tiX3B1c2goc2tiLCBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKTtcXG4yMTUxOlxcdFxcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xcbjIxNTI6XFx0XFx0aXA2aCA9IGlwdjZfaGRyKHNrYik7XFxuMjE1MzpcXHRcXG4yMTU0OlxcdFxcdC8qIGlwNmgtXFx1MDAzZXZlcnNpb24gPSA2OyBpcDZoLVxcdTAwM2Vwcmlvcml0eSA9IDA7ICovXFxuMjE1NTpcXHRcXHQqKHVuc2lnbmVkIGNoYXIgKilpcDZoID0gMHg2MDtcXG4yMTU2OlxcdFxcdGlwNmgtXFx1MDAzZWZsb3dfbGJsWzBdID0gMDtcXG4yMTU3OlxcdFxcdGlwNmgtXFx1MDAzZWZsb3dfbGJsWzFdID0gMDtcXG4yMTU4OlxcdFxcdGlwNmgtXFx1MDAzZWZsb3dfbGJsWzJdID0gMDtcXG4yMTU5OlxcdFxcbjIxNjA6XFx0XFx0aXA2aC1cXHUwMDNlcGF5bG9hZF9sZW4gPSBodG9ucyhzaXplb2Yoc3RydWN0IHVkcGhkcikgKyBsZW4pO1xcbjIxNjE6XFx0XFx0aXA2aC1cXHUwMDNlbmV4dGhkciA9IElQUFJPVE9fVURQO1xcbjIxNjI6XFx0XFx0aXA2aC1cXHUwMDNlaG9wX2xpbWl0ID0gMzI7XFxuMjE2MzpcXHRcXHRpcDZoLVxcdTAwM2VzYWRkciA9IG50LVxcdTAwM2Vsb2NhbF9pcC5pbjY7XFxuMjE2NDpcXHRcXHRpcDZoLVxcdTAwM2VkYWRkciA9IG50LVxcdTAwM2VyZW1vdGVfaXAuaW42O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTo0MTo1NS4xODk5MTg2ODNaIiwiU2VxIjo2MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIyNzM4OTk3NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogTm8gTmVlZCBmb3IgRGVkaWNhdGVkIEZ1enppbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgY29uY2VybiB3YXMsIGFzIGFsd2F5cywgYXJvdW5kIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcy4gV2UncmUgZGVhbGluZyB3aXRoIG5ldHdvcmsgY29uZmlndXJhdGlvbiwgc28gdGhhdCdzIGEga2V5IGFyZWEgdG8gc2NydXRpbml6ZS5cblxuRmlyc3QsIEkgZXhhbWluZWQgdGhlIGNvcmUgY2hhbmdlOiBgaXA2aC1cdTAwM2VzYWRkciA9IG50LVx1MDAzZWxvY2FsX2lwLmluNjtgLiBUaGlzIGNvcGllcyBleGFjdGx5IGEgYHN0cnVjdCBpbjZfYWRkcmAsIHdoaWNoIGlzIDE2IGJ5dGVzLiBUaGVyZSdzICpubyogcmlzayBvZiBwYWRkaW5nIGJ5dGVzIGZyb20gYSBwcmV2aW91cyBgc3RydWN0IGluZXRfYWRkcmAgYmVpbmcgY29waWVkIG92ZXIsIHNvIHRoYXTigJlzIGEgbm9uLWlzc3VlLlxuXG5UaGUgcGF0Y2ggaXRzZWxmIGlzIGEgcmVmYWN0b3JpbmcsIHNwZWNpZmljYWxseSBhZGRyZXNzaW5nIGhvdyBJUCBhZGRyZXNzZXMgYXJlIHJlcHJlc2VudGVkIGluIGBuZXRjb25zb2xlX3RhcmdldGAuIEl0IGludHJvZHVjZXMgYSBgZmFtaWx5YCBmaWVsZCB0byBleHBsaWNpdGx5IHRyYWNrIHRoZSBhZGRyZXNzIGZhbWlseSAoSVB2NCwgSVB2Niwgb3IgdW5zZXQpIGluc3RlYWQgb2YgdGhlIHByZXZpb3VzIGFtYmlndW91cyBib29sZWFuIGFuZCB6ZXJvLUlQIGNoZWNrLiBUaGlzIGFjdHVhbGx5ICpmaXhlcyogYSBidWcgd2hlcmUgYSBzZWVtaW5nbHkgdmFsaWQgSVB2NiBhZGRyZXNzIGNvdWxkIGJlIG1pc2ludGVycHJldGVkIGFzIHVuc2V0LCBzaW1wbHkgYmVjYXVzZSBpdHMgaW5pdGlhbCBieXRlcyB3ZXJlIHplcm8sIHdoaWNoIHdvdWxkIGhhdmUgYmVlbiBtaXNzZWQgYnkgdGhlIGxlZ2FjeSBtZXRob2QuXG5cbkkgdGhlbiB0aG9yb3VnaGx5IHJldmlld2VkIHRoZSBjb2RlIGNoYW5nZXMuIFRoZSBvcmlnaW5hbCBgdW5pb24gaW5ldF9hZGRyYCBpcyBnb25lIGZyb20gYG5ldHBvbGwuaGAgYW5kIHJlcGxhY2VkIGJ5IGEgKnN0cnVjdCogd2l0aCB0aGUgc2FtZSBuYW1lIHdoaWNoIGNvbnRhaW5zIHRoZSBgZmFtaWx5YCBtZW1iZXIsIGFuZCBhbiBhbm9ueW1vdXMgdW5pb24gb2YgYF9fYmUzMmAgYW5kIGBzdHJ1Y3QgaW42X2FkZHJgLiBUaGlzIGlzIGFkZGVkIGluIGBuZXRjb25zb2xlLmNgLiBBbGwgb3RoZXIgY2hhbmdlcyBzaW1wbHkgcmVmbGVjdCB0aGUgdXNlIG9mIHRoaXMgbmV3IHN0cnVjdCBhbmQgaXRzIGBmYW1pbHlgIGZpZWxkLlxuXG5DcnVjaWFsbHksIHRoZXJlIGFyZSAqbm8qIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMgaW50cm9kdWNlZC4gVGhlIGBuZXRjb25zb2xlX3RhcmdldGAgaXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2Nfb2JqYCwgd2hpY2ggemVyby1pbml0aWFsaXplcyB0aGUgZW50aXJlIHN0cnVjdHVyZS4gVGhpcyBtZWFucyB0aGUgYGZhbWlseWAgZmllbGQgZGVmYXVsdHMgdG8gYDBgIChBRl9VTlNQRUMsIHdoaWNoIGlzIGNvcnJlY3QpLCBhbmQgdGhlIElQIGFkZHJlc3MgZmllbGRzIGFyZSB6ZXJvZWQgYXMgd2VsbC4gSWYgcGFyc2luZyB0aGUgYWRkcmVzcyBmYWlscywgdGhlIHRhcmdldCBpcyBub3QgZW5hYmxlZC5cblxuSSBhbHNvIGNoZWNrZWQgaG93IHRoZSBJUCBhZGRyZXNzIGlzIGV4cG9zZWQuIEl0J3Mgb25seSB0aHJvdWdoIGNvbmZpZ2ZzIGBzaG93YCBmdW5jdGlvbnMsIHdoaWNoIGZvcm1hdCBpdCBhcyBhICpzdHJpbmcqIHVzaW5nIGBzeXNmc19lbWl0YC4gVGhpcyBjb21wbGV0ZWx5IGVsaW1pbmF0ZXMgdGhlIHBvc3NpYmlsaXR5IG9mIGxlYWtpbmcgYW55IGludGVybmFsIHBhZGRpbmcgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlcnNwYWNlLiBGaW5hbGx5LCB3aGVuIHNlbmRpbmcgZGF0YSwgdGhlIGNvZGUgKm9ubHkqIGNvcGllcyBlaXRoZXIgdGhlIElQdjQgb3IgSVB2NiBhZGRyZXNzICg0IG9yIDE2IGJ5dGVzIHJlc3BlY3RpdmVseSkgaW50byB0aGUgSVAgaGVhZGVyLiBObyBleHRyYSBpbmZvcm1hdGlvbiBpcyBleHBvc2VkLlxuXG5JbiBzdW1tYXJ5LCB0aGVyZSdzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIGRhdGEgbGVha2FnZSwgb3IgYW55IG90aGVyIGtpbmQgb2YgbWVtb3J5IHNhZmV0eSBpc3N1ZSBoZXJlLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIHByb2JsZW1zLiBHaXZlbiB0aGF0LCBLTVNBTiBpcyBub3QgcmVxdWlyZWQuIEknbGwgc2V0IGBOZWVkc0tNU0FOPWZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjczNTgsIk91dHB1dFRva2VucyI6Mjg2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODEyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6NDI6MDcuNDYzODIxMTU1WiIsIlNlcSI6NjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc2OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgaG93IElQIGFkZHJlc3NlcyBhcmUgc3RvcmVkIGFuZCBwYXJzZWQgaW4gdGhlIG5ldGNvbnNvbGUgZHJpdmVyIGJ5IHJlcGxhY2luZyBhIGB1bmlvbiBpbmV0X2FkZHJgIGFuZCBhIGJvb2xlYW4gYGlwdjZgIGZsYWcgd2l0aCBhIG5ldyBgc3RydWN0IGluZXRfYWRkcmAgdGhhdCBleHBsaWNpdGx5IHRyYWNrcyB0aGUgYWRkcmVzcyBmYW1pbHkgKGBBRl9VTlNQRUNgLCBgQUZfSU5FVGAsIG9yIGBBRl9JTkVUNmApLiBUaGUgYHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldGAgY29udGFpbmluZyB0aGVzZSBhZGRyZXNzZXMgaXMgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jX29iamAgKHdoaWNoIHplcm8taW5pdGlhbGl6ZXMgdGhlIG1lbW9yeSksIGVuc3VyaW5nIHRoYXQgdGhlIG5ldyBgZmFtaWx5YCBmaWVsZCBkZWZhdWx0cyB0byBgQUZfVU5TUEVDYCBhbmQgdGhlIElQIGFkZHJlc3NlcyBhcmUgemVyb2VkLiBUaGUgSVAgYWRkcmVzc2VzIGFyZSBvbmx5IGV4cG9zZWQgdG8gdXNlcnNwYWNlIHZpYSBjb25maWdmcyBgc2hvd2AgZnVuY3Rpb25zLCB3aGljaCBmb3JtYXQgdGhlbSBhcyBzdHJpbmdzIHVzaW5nIGBzeXNmc19lbWl0YCwgcHJldmVudGluZyBhbnkgcG90ZW50aWFsIGxlYWthZ2Ugb2YgcGFkZGluZyBieXRlcy4gV2hlbiBjb25zdHJ1Y3RpbmcgbmV0d29yayBwYWNrZXRzLCBvbmx5IHRoZSBleGFjdCBJUHY0ICg0IGJ5dGVzKSBvciBJUHY2ICgxNiBieXRlcykgYWRkcmVzcyBmaWVsZHMgYXJlIGNvcGllZCBpbnRvIHRoZSBJUCBoZWFkZXJzLCBhZ2FpbiBhdm9pZGluZyBhbnkgcGFkZGluZyBsZWFrcy4gVGhlcmUgYXJlIG5vIG5ldyBhbGxvY2F0aW9ucyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm8gc3RydWN0dXJlcyBjb3BpZWQgZGlyZWN0bHkgdG8gdXNlcnNwYWNlLCBhbmQgbm8gY29udHJvbCBmbG93IGNoYW5nZXMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBidWdzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIGhvdyBJUCBhZGRyZXNzZXMgYXJlIHN0b3JlZCBhbmQgcGFyc2VkIGluIHRoZSBuZXRjb25zb2xlIGRyaXZlciBieSByZXBsYWNpbmcgYSBgdW5pb24gaW5ldF9hZGRyYCBhbmQgYSBib29sZWFuIGBpcHY2YCBmbGFnIHdpdGggYSBuZXcgYHN0cnVjdCBpbmV0X2FkZHJgIHRoYXQgZXhwbGljaXRseSB0cmFja3MgdGhlIGFkZHJlc3MgZmFtaWx5IChgQUZfVU5TUEVDYCwgYEFGX0lORVRgLCBvciBgQUZfSU5FVDZgKS4gVGhlIGBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXRgIGNvbnRhaW5pbmcgdGhlc2UgYWRkcmVzc2VzIGlzIGFsbG9jYXRlZCB1c2luZyBga3phbGxvY19vYmpgICh3aGljaCB6ZXJvLWluaXRpYWxpemVzIHRoZSBtZW1vcnkpLCBlbnN1cmluZyB0aGF0IHRoZSBuZXcgYGZhbWlseWAgZmllbGQgZGVmYXVsdHMgdG8gYEFGX1VOU1BFQ2AgYW5kIHRoZSBJUCBhZGRyZXNzZXMgYXJlIHplcm9lZC4gVGhlIElQIGFkZHJlc3NlcyBhcmUgb25seSBleHBvc2VkIHRvIHVzZXJzcGFjZSB2aWEgY29uZmlnZnMgYHNob3dgIGZ1bmN0aW9ucywgd2hpY2ggZm9ybWF0IHRoZW0gYXMgc3RyaW5ncyB1c2luZyBgc3lzZnNfZW1pdGAsIHByZXZlbnRpbmcgYW55IHBvdGVudGlhbCBsZWFrYWdlIG9mIHBhZGRpbmcgYnl0ZXMuIFdoZW4gY29uc3RydWN0aW5nIG5ldHdvcmsgcGFja2V0cywgb25seSB0aGUgZXhhY3QgSVB2NCAoNCBieXRlcykgb3IgSVB2NiAoMTYgYnl0ZXMpIGFkZHJlc3MgZmllbGRzIGFyZSBjb3BpZWQgaW50byB0aGUgSVAgaGVhZGVycywgYWdhaW4gYXZvaWRpbmcgYW55IHBhZGRpbmcgbGVha3MuIFRoZXJlIGFyZSBubyBuZXcgYWxsb2NhdGlvbnMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vIHN0cnVjdHVyZXMgY29waWVkIGRpcmVjdGx5IHRvIHVzZXJzcGFjZSwgYW5kIG5vIGNvbnRyb2wgZmxvdyBjaGFuZ2VzIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgYnVncy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8tmz5[1] Phase: Succeeded StartedAt: 2026-08-10 19:42:18 +0000 UTC FinishedAt: 2026-08-10 19:42:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8tmz5[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-10 19:42:19 +0000 UTC FinishedAt: 2026-08-10 19:42:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8tmz5[2] Phase: Succeeded StartedAt: 2026-08-10 19:42:19 +0000 UTC FinishedAt: 2026-08-10 23:32:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8tmz5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["local_ip_store","remote_ip_store","enabled_store","netcons_netpoll_setup","netconsole_parser_cmdline","netpoll_send_udp","netpoll_parse_ip_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"2de36840-9b24-4e38-82af-be68dea8ef6c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-10 19:42:19 +0000 UTC FinishedAt: 2026-08-10 23:32:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["local_ip_store","remote_ip_store","enabled_store","netcons_netpoll_setup","netconsole_parser_cmdline","netpoll_send_udp","netpoll_parse_ip_addr"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"2de36840-9b24-4e38-82af-be68dea8ef6c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow8tmz5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["local_ip_store","remote_ip_store","enabled_store","netcons_netpoll_setup","netconsole_parser_cmdline","netpoll_send_udp","netpoll_parse_ip_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"2de36840-9b24-4e38-82af-be68dea8ef6c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-10 19:42:19 +0000 UTC FinishedAt: 2026-08-10 19:42:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8tmz5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["local_ip_store","remote_ip_store","enabled_store","netcons_netpoll_setup","netconsole_parser_cmdline","netpoll_send_udp","netpoll_parse_ip_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"2de36840-9b24-4e38-82af-be68dea8ef6c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-10 19:42:19 +0000 UTC FinishedAt: 2026-08-10 19:42:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8tmz5/series-workflow8tmz5-convert-artifact-3303102249/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8tmz5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["local_ip_store","remote_ip_store","enabled_store","netcons_netpoll_setup","netconsole_parser_cmdline","netpoll_send_udp","netpoll_parse_ip_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"2de36840-9b24-4e38-82af-be68dea8ef6c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-10 19:42:30 +0000 UTC FinishedAt: 2026-08-10 20:03:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8tmz5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["local_ip_store","remote_ip_store","enabled_store","netcons_netpoll_setup","netconsole_parser_cmdline","netpoll_send_udp","netpoll_parse_ip_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"2de36840-9b24-4e38-82af-be68dea8ef6c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-10 19:42:30 +0000 UTC FinishedAt: 2026-08-10 20:03:54 +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:*4e67cb0c-e2a9-4d0e-aec1-6941a020de1d,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-workflow8tmz5/series-workflow8tmz5-convert-artifact-3303102249/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": "bad659d7-6aa4-470b-9c3b-df35237e67e2", "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-workflow8tmz5/series-workflow8tmz5-build-action-3185033095/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8tmz5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["local_ip_store","remote_ip_store","enabled_store","netcons_netpoll_setup","netconsole_parser_cmdline","netpoll_send_udp","netpoll_parse_ip_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"2de36840-9b24-4e38-82af-be68dea8ef6c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-10 19:42:30 +0000 UTC FinishedAt: 2026-08-10 20:03:31 +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:*4e67cb0c-e2a9-4d0e-aec1-6941a020de1d,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-workflow8tmz5/series-workflow8tmz5-convert-artifact-3303102249/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": "bad659d7-6aa4-470b-9c3b-df35237e67e2", "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-workflow8tmz5/series-workflow8tmz5-build-action-3185033095/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8tmz5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["local_ip_store","remote_ip_store","enabled_store","netcons_netpoll_setup","netconsole_parser_cmdline","netpoll_send_udp","netpoll_parse_ip_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"2de36840-9b24-4e38-82af-be68dea8ef6c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-10 20:03:54 +0000 UTC FinishedAt: 2026-08-10 20:03:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8tmz5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["local_ip_store","remote_ip_store","enabled_store","netcons_netpoll_setup","netconsole_parser_cmdline","netpoll_send_udp","netpoll_parse_ip_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"2de36840-9b24-4e38-82af-be68dea8ef6c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-10 20:03:54 +0000 UTC FinishedAt: 2026-08-10 20:03:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8tmz5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["local_ip_store","remote_ip_store","enabled_store","netcons_netpoll_setup","netconsole_parser_cmdline","netpoll_send_udp","netpoll_parse_ip_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"2de36840-9b24-4e38-82af-be68dea8ef6c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-10 20:03:55 +0000 UTC FinishedAt: 2026-08-10 20:04:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8tmz5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["local_ip_store","remote_ip_store","enabled_store","netcons_netpoll_setup","netconsole_parser_cmdline","netpoll_send_udp","netpoll_parse_ip_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"2de36840-9b24-4e38-82af-be68dea8ef6c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-10 20:03:55 +0000 UTC FinishedAt: 2026-08-10 20:04:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"2de36840-9b24-4e38-82af-be68dea8ef6c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8tmz5/series-workflow8tmz5-convert-artifact-3339517116/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8tmz5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["local_ip_store","remote_ip_store","enabled_store","netcons_netpoll_setup","netconsole_parser_cmdline","netpoll_send_udp","netpoll_parse_ip_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"2de36840-9b24-4e38-82af-be68dea8ef6c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-10 20:04:07 +0000 UTC FinishedAt: 2026-08-10 20:06:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8tmz5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["local_ip_store","remote_ip_store","enabled_store","netcons_netpoll_setup","netconsole_parser_cmdline","netpoll_send_udp","netpoll_parse_ip_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"2de36840-9b24-4e38-82af-be68dea8ef6c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-10 20:04:07 +0000 UTC FinishedAt: 2026-08-10 20:06:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*bad659d7-6aa4-470b-9c3b-df35237e67e2,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-workflow8tmz5/series-workflow8tmz5-build-action-3185033095/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-workflow8tmz5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["local_ip_store","remote_ip_store","enabled_store","netcons_netpoll_setup","netconsole_parser_cmdline","netpoll_send_udp","netpoll_parse_ip_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"2de36840-9b24-4e38-82af-be68dea8ef6c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-10 20:06:27 +0000 UTC FinishedAt: 2026-08-10 20:06:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8tmz5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["local_ip_store","remote_ip_store","enabled_store","netcons_netpoll_setup","netconsole_parser_cmdline","netpoll_send_udp","netpoll_parse_ip_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"2de36840-9b24-4e38-82af-be68dea8ef6c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-10 20:06:27 +0000 UTC FinishedAt: 2026-08-10 20:06:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8tmz5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["local_ip_store","remote_ip_store","enabled_store","netcons_netpoll_setup","netconsole_parser_cmdline","netpoll_send_udp","netpoll_parse_ip_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"2de36840-9b24-4e38-82af-be68dea8ef6c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-10 20:06:27 +0000 UTC FinishedAt: 2026-08-10 20:27:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8tmz5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["local_ip_store","remote_ip_store","enabled_store","netcons_netpoll_setup","netconsole_parser_cmdline","netpoll_send_udp","netpoll_parse_ip_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"2de36840-9b24-4e38-82af-be68dea8ef6c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-10 20:06:27 +0000 UTC FinishedAt: 2026-08-10 20:27:42 +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:*4e67cb0c-e2a9-4d0e-aec1-6941a020de1d,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-workflow8tmz5/series-workflow8tmz5-convert-artifact-3339517116/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": "a9b0f173-5719-484b-840c-edf1461ba035", "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-workflow8tmz5/series-workflow8tmz5-build-action-2533410584/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8tmz5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["local_ip_store","remote_ip_store","enabled_store","netcons_netpoll_setup","netconsole_parser_cmdline","netpoll_send_udp","netpoll_parse_ip_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"2de36840-9b24-4e38-82af-be68dea8ef6c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-10 20:06:27 +0000 UTC FinishedAt: 2026-08-10 20:27:17 +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:*4e67cb0c-e2a9-4d0e-aec1-6941a020de1d,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-workflow8tmz5/series-workflow8tmz5-convert-artifact-3339517116/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": "a9b0f173-5719-484b-840c-edf1461ba035", "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-workflow8tmz5/series-workflow8tmz5-build-action-2533410584/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8tmz5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["local_ip_store","remote_ip_store","enabled_store","netcons_netpoll_setup","netconsole_parser_cmdline","netpoll_send_udp","netpoll_parse_ip_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"2de36840-9b24-4e38-82af-be68dea8ef6c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-10 20:27:42 +0000 UTC FinishedAt: 2026-08-10 20:27:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8tmz5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["local_ip_store","remote_ip_store","enabled_store","netcons_netpoll_setup","netconsole_parser_cmdline","netpoll_send_udp","netpoll_parse_ip_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"2de36840-9b24-4e38-82af-be68dea8ef6c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-10 20:27:42 +0000 UTC FinishedAt: 2026-08-10 20:27:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8tmz5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["local_ip_store","remote_ip_store","enabled_store","netcons_netpoll_setup","netconsole_parser_cmdline","netpoll_send_udp","netpoll_parse_ip_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"2de36840-9b24-4e38-82af-be68dea8ef6c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-10 20:27:42 +0000 UTC FinishedAt: 2026-08-10 20:30:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8tmz5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["local_ip_store","remote_ip_store","enabled_store","netcons_netpoll_setup","netconsole_parser_cmdline","netpoll_send_udp","netpoll_parse_ip_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"2de36840-9b24-4e38-82af-be68dea8ef6c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-10 20:27:42 +0000 UTC FinishedAt: 2026-08-10 20:29:49 +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:*a9b0f173-5719-484b-840c-edf1461ba035,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-workflow8tmz5/series-workflow8tmz5-build-action-2533410584/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-workflow8tmz5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["local_ip_store","remote_ip_store","enabled_store","netcons_netpoll_setup","netconsole_parser_cmdline","netpoll_send_udp","netpoll_parse_ip_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"2de36840-9b24-4e38-82af-be68dea8ef6c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-10 20:30:17 +0000 UTC FinishedAt: 2026-08-10 20:30:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8tmz5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["local_ip_store","remote_ip_store","enabled_store","netcons_netpoll_setup","netconsole_parser_cmdline","netpoll_send_udp","netpoll_parse_ip_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"2de36840-9b24-4e38-82af-be68dea8ef6c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-10 20:30:17 +0000 UTC FinishedAt: 2026-08-10 20:30:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8tmz5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["local_ip_store","remote_ip_store","enabled_store","netcons_netpoll_setup","netconsole_parser_cmdline","netpoll_send_udp","netpoll_parse_ip_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"2de36840-9b24-4e38-82af-be68dea8ef6c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-10 20:30:18 +0000 UTC FinishedAt: 2026-08-10 23:32:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8tmz5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["local_ip_store","remote_ip_store","enabled_store","netcons_netpoll_setup","netconsole_parser_cmdline","netpoll_send_udp","netpoll_parse_ip_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"2de36840-9b24-4e38-82af-be68dea8ef6c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-10 20:30:18 +0000 UTC FinishedAt: 2026-08-10 23:32:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["local_ip_store","remote_ip_store","enabled_store","netcons_netpoll_setup","netconsole_parser_cmdline","netpoll_send_udp","netpoll_parse_ip_addr"],"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:*bad659d7-6aa4-470b-9c3b-df35237e67e2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a9b0f173-5719-484b-840c-edf1461ba035,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-workflow8tmz5/series-workflow8tmz5-build-action-3185033095/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-workflow8tmz5/series-workflow8tmz5-build-action-2533410584/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow8tmz5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["local_ip_store","remote_ip_store","enabled_store","netcons_netpoll_setup","netconsole_parser_cmdline","netpoll_send_udp","netpoll_parse_ip_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"2de36840-9b24-4e38-82af-be68dea8ef6c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-10 20:30:18 +0000 UTC FinishedAt: 2026-08-10 20:30:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8tmz5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["local_ip_store","remote_ip_store","enabled_store","netcons_netpoll_setup","netconsole_parser_cmdline","netpoll_send_udp","netpoll_parse_ip_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"2de36840-9b24-4e38-82af-be68dea8ef6c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-10 20:30:18 +0000 UTC FinishedAt: 2026-08-10 20:30:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["local_ip_store","remote_ip_store","enabled_store","netcons_netpoll_setup","netconsole_parser_cmdline","netpoll_send_udp","netpoll_parse_ip_addr"],"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-workflow8tmz5/series-workflow8tmz5-convert-artifact-2773811077/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8tmz5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["local_ip_store","remote_ip_store","enabled_store","netcons_netpoll_setup","netconsole_parser_cmdline","netpoll_send_udp","netpoll_parse_ip_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"2de36840-9b24-4e38-82af-be68dea8ef6c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-10 20:30:19 +0000 UTC FinishedAt: 2026-08-10 20:30:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8tmz5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["local_ip_store","remote_ip_store","enabled_store","netcons_netpoll_setup","netconsole_parser_cmdline","netpoll_send_udp","netpoll_parse_ip_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"2de36840-9b24-4e38-82af-be68dea8ef6c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-10 20:30:50 +0000 UTC FinishedAt: 2026-08-10 23:32:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8tmz5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["local_ip_store","remote_ip_store","enabled_store","netcons_netpoll_setup","netconsole_parser_cmdline","netpoll_send_udp","netpoll_parse_ip_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"2de36840-9b24-4e38-82af-be68dea8ef6c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-10 20:30:50 +0000 UTC FinishedAt: 2026-08-10 23:31:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*bad659d7-6aa4-470b-9c3b-df35237e67e2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a9b0f173-5719-484b-840c-edf1461ba035,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-workflow8tmz5/series-workflow8tmz5-build-action-3185033095/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-workflow8tmz5/series-workflow8tmz5-build-action-2533410584/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-workflow8tmz5/series-workflow8tmz5-convert-artifact-2773811077/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,}