Name: series-workflowv8zcm Phase: Succeeded StartedAt: 2026-08-12 11:40:56 +0000 UTC FinishedAt: 2026-08-12 15:41:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv8zcm[0] Phase: Succeeded StartedAt: 2026-08-12 11:40:56 +0000 UTC FinishedAt: 2026-08-12 12:01:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv8zcm[0].run-triage Phase: Succeeded StartedAt: 2026-08-12 11:40:56 +0000 UTC FinishedAt: 2026-08-12 12:01:12 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "315f4bd234b3b8a3ed3a71fd4c53b110cf373720", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BRIDGE", "INET", "BRIDGE_IGMP_SNOOPING", "VLAN_8021Q", "BRIDGE_VLAN_FILTERING" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "315f4bd234b3b8a3ed3a71fd4c53b110cf373720", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BRIDGE", "INET", "BRIDGE_IGMP_SNOOPING", "VLAN_8021Q", "BRIDGE_VLAN_FILTERING" ], "series_id": "323bdf1f-2509-476c-93b7-2b9b6dff11f1" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "br_multicast_del_port", "br_multicast_disable_port", "br_multicast_enable_port", "br_multicast_toggle", "br_multicast_toggle_vlan_snooping", "br_multicast_toggle_one_vlan" ], "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+CgkJCTx0ZD4yMDI2LzA4LzEyIDExOjU4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JSSURHRSYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O0JSSURHRV9JR01QX1NOT09QSU5HJiMzNDssCiAgICAmIzM0O1ZMQU5fODAyMVEmIzM0OywKICAgICYjMzQ7QlJJREdFX1ZMQU5fRklMVEVSSU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnJfbXVsdGljYXN0X2RlbF9wb3J0JiMzNDssCiAgICAmIzM0O2JyX211bHRpY2FzdF9kaXNhYmxlX3BvcnQmIzM0OywKICAgICYjMzQ7YnJfbXVsdGljYXN0X2VuYWJsZV9wb3J0JiMzNDssCiAgICAmIzM0O2JyX211bHRpY2FzdF90b2dnbGUmIzM0OywKICAgICYjMzQ7YnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nJiMzNDssCiAgICAmIzM0O2JyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4mIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBsaXN0IGl0ZXJhdGlvbiBidWdzIGluIGBicl9tdWx0aWNhc3RfZGVsX3BvcnRgIGFuZCBgX19icl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0X2N0eGAgd2hlcmUgYGJyX211bHRpY2FzdF9maW5kX2RlbF9wZ2AgY291bGQgZGVsZXRlIHRoZSBuZXh0IGNhY2hlZCBub2RlIGluIGBobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlYCwgbGVhZGluZyB0byBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgbGlzdCBjb3JydXB0aW9uLiBUaGVzZSB0eXBlcyBvZiBtZW1vcnkgY29ycnVwdGlvbiBhbmQgdXNlLWFmdGVyLWZyZWUgYnVncyBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzLCBhbGxvY2F0aW9ucywgb3IgZGF0YSBzZW50IHRvIHVzZXIgc3BhY2UgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnksIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBicmlkZ2UgbXVsdGljYXN0IHBvcnQgZGVsZXRpb24gYW5kIGRpc2FibGluZyBsb2dpYyB3aGVyZSBgaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZWAgd2FzIHVzZWQgaW5jb3JyZWN0bHkuIGBicl9tdWx0aWNhc3RfZmluZF9kZWxfcGdgIGNhbiBkZWxldGUgbXVsdGlwbGUgZW50cmllcyBmcm9tIHRoZSBzYW1lIGxpc3QsIGxlYWRpbmcgdG8gbWlzc2VkIGVudHJpZXMgb3IgdXNlLWFmdGVyLWZyZWUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGJyaWRnZSBtdWx0aWNhc3QgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmsgYW5kIHN5c2ZzLCBhbmQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMTo1ODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGM2Yzc3MmQwOTI2YmE4Njk3NGM3ZDQ1ODQyODUyNjA4OTM4NDA5NDJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxMiAxMTo1ODo1MSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jIGIvbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuY1xuaW5kZXggMDBhYTliMjg3OWQ2ZS4uZTA3NzUwNTljYTBhOCAxMDA2NDRcbi0tLSBhL25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmNcbkBAIC0yMDY1LDEyICYjNDM7MjA2NSwxNyBAQCB2b2lkIGJyX211bHRpY2FzdF9kZWxfcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0KVxuIHtcbiBcdHN0cnVjdCBuZXRfYnJpZGdlICpiciA9IHBvcnQtXHUwMDNlYnI7XG4gXHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwICpwZztcbi1cdHN0cnVjdCBobGlzdF9ub2RlICpuO1xuIFxuLVx0LyogVGFrZSBjYXJlIG9mIHRoZSByZW1haW5pbmcgZ3JvdXBzLCBvbmx5IHBlcm0gb25lcyBzaG91bGQgYmUgbGVmdCAqL1xuJiM0MztcdC8qIFRha2UgY2FyZSBvZiB0aGUgcmVtYWluaW5nIGdyb3Vwcywgb25seSBwZXJtIG9uZXMgc2hvdWxkIGJlIGxlZnQuXG4mIzQzO1x0ICogRGVsZXRpbmcgb25lIGNhbiBkZWxldGUgb3RoZXJzIG9uIHRoaXMgc2FtZSBwb3J0LVx1MDAzZW1nbGlzdCwgc29cbiYjNDM7XHQgKiBhbHdheXMgcmVzdGFydCBmcm9tIHRoZSBoZWFkLlxuJiM0MztcdCAqL1xuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmJyLVx1MDAzZW11bHRpY2FzdF9sb2NrKTtcbi1cdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocGcsIG4sIFx1MDAyNnBvcnQtXHUwMDNlbWdsaXN0LCBtZ2xpc3QpXG4mIzQzO1x0d2hpbGUgKCFobGlzdF9lbXB0eShcdTAwMjZwb3J0LVx1MDAzZW1nbGlzdCkpIHtcbiYjNDM7XHRcdHBnID0gaGxpc3RfZW50cnkocG9ydC1cdTAwM2VtZ2xpc3QuZmlyc3QsXG4mIzQzO1x0XHRcdFx0IHN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAsIG1nbGlzdCk7XG4gXHRcdGJyX211bHRpY2FzdF9maW5kX2RlbF9wZyhiciwgcGcpO1xuJiM0MztcdH1cbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmJyLVx1MDAzZW11bHRpY2FzdF9sb2NrKTtcbiBcdGZsdXNoX3dvcmsoXHUwMDI2YnItXHUwMDNlbWNhc3RfZ2Nfd29yayk7XG4gXHRicl9tdWx0aWNhc3RfcG9ydF9jdHhfZGVpbml0KFx1MDAyNnBvcnQtXHUwMDNlbXVsdGljYXN0X2N0eCk7XG5AQCAtMjEyNiwxMSAmIzQzOzIxMzEsMjMgQEAgc3RhdGljIHZvaWQgX19icl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0X2N0eChzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdF9wb3J0ICpwbWN0eClcbiBcdHN0cnVjdCBobGlzdF9ub2RlICpuO1xuIFx0Ym9vbCBkZWwgPSBmYWxzZTtcbiBcbi1cdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocGcsIG4sIFx1MDAyNnBtY3R4LVx1MDAzZXBvcnQtXHUwMDNlbWdsaXN0LCBtZ2xpc3QpXG4tXHRcdGlmICghKHBnLVx1MDAzZWZsYWdzIFx1MDAyNiBNREJfUEdfRkxBR1NfUEVSTUFORU5UKSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgICghYnJfbXVsdGljYXN0X3BvcnRfY3R4X2lzX3ZsYW4ocG1jdHgpIHx8XG4tXHRcdCAgICAgcGctXHUwMDNla2V5LmFkZHIudmlkID09IHBtY3R4LVx1MDAzZXZsYW4tXHUwMDNldmlkKSlcbi1cdFx0XHRicl9tdWx0aWNhc3RfZmluZF9kZWxfcGcocG1jdHgtXHUwMDNlcG9ydC1cdTAwM2ViciwgcGcpO1xuJiM0MztcdC8qIGJyX211bHRpY2FzdF9maW5kX2RlbF9wZygpIGNhbiBkZWxldGUgZnVydGhlciBlbnRyaWVzIG9mIHRoaXMgc2FtZVxuJiM0MztcdCAqIHBvcnQtXHUwMDNlbWdsaXN0LCBzbyB0aGUgbm9kZSBsYXRjaGVkIGluIEBuIG1heSBiZSB1bmxpbmtlZCBieSB0aGUgbG9vcFxuJiM0MztcdCAqIGJvZHkuIFBvcnQgZ3JvdXBzIGFyZSBvbmx5IGZyZWVkIGJ5IHRoZSBHQyB3b3JrIHVuZGVyIG11bHRpY2FzdF9sb2NrLFxuJiM0MztcdCAqIHNvIEBuIGlzIHN0aWxsIHZhbGlkIGhlcmU7IGlmIGl0IGxlZnQgdGhlIGxpc3QsIHJlc3RhcnQuXG4mIzQzO1x0ICovXG4mIzQzO3Jlc3RhcnQ6XG4mIzQzO1x0aGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwZywgbiwgXHUwMDI2cG1jdHgtXHUwMDNlcG9ydC1cdTAwM2VtZ2xpc3QsIG1nbGlzdCkge1xuJiM0MztcdFx0aWYgKChwZy1cdTAwM2VmbGFncyBcdTAwMjYgTURCX1BHX0ZMQUdTX1BFUk1BTkVOVCkgfHxcbiYjNDM7XHRcdCAgICAoYnJfbXVsdGljYXN0X3BvcnRfY3R4X2lzX3ZsYW4ocG1jdHgpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgICBwZy1cdTAwM2VrZXkuYWRkci52aWQgIT0gcG1jdHgtXHUwMDNldmxhbi1cdTAwM2V2aWQpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRicl9tdWx0aWNhc3RfZmluZF9kZWxfcGcocG1jdHgtXHUwMDNlcG9ydC1cdTAwM2ViciwgcGcpO1xuJiM0MztcbiYjNDM7XHRcdGlmIChuIFx1MDAyNlx1MDAyNiBobGlzdF91bmhhc2hlZChuKSlcbiYjNDM7XHRcdFx0Z290byByZXN0YXJ0O1xuJiM0MztcdH1cbiBcbiBcdGRlbCB8PSBicl9pcDRfbXVsdGljYXN0X3Jwb3J0X2RlbChwbWN0eCk7XG4gXHR0aW1lcl9kZWxldGUoXHUwMDI2cG1jdHgtXHUwMDNlaXA0X21jX3JvdXRlcl90aW1lcik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTE6NTg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JSSURHRSYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O0JSSURHRV9JR01QX1NOT09QSU5HJiMzNDssCiAgICAmIzM0O1ZMQU5fODAyMVEmIzM0OywKICAgICYjMzQ7QlJJREdFX1ZMQU5fRklMVEVSSU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnJfbXVsdGljYXN0X2RlbF9wb3J0JiMzNDssCiAgICAmIzM0O2JyX211bHRpY2FzdF9kaXNhYmxlX3BvcnQmIzM0OywKICAgICYjMzQ7YnJfbXVsdGljYXN0X2VuYWJsZV9wb3J0JiMzNDssCiAgICAmIzM0O2JyX211bHRpY2FzdF90b2dnbGUmIzM0OywKICAgICYjMzQ7YnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nJiMzNDssCiAgICAmIzM0O2JyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYnJpZGdlIG11bHRpY2FzdCBwb3J0IGRlbGV0aW9uIGFuZCBkaXNhYmxpbmcgbG9naWMgd2hlcmUgYGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVgIHdhcyB1c2VkIGluY29ycmVjdGx5LiBgYnJfbXVsdGljYXN0X2ZpbmRfZGVsX3BnYCBjYW4gZGVsZXRlIG11bHRpcGxlIGVudHJpZXMgZnJvbSB0aGUgc2FtZSBsaXN0LCBsZWFkaW5nIHRvIG1pc3NlZCBlbnRyaWVzIG9yIHVzZS1hZnRlci1mcmVlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBicmlkZ2UgbXVsdGljYXN0IGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rIGFuZCBzeXNmcywgYW5kIGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjNmM3NzJkMDkyNmJhODY5NzRjN2Q0NTg0Mjg1MjYwODkzODQwOTQyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMTIgMTE6NTg6NTEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jIGIvbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYwppbmRleCAwMGFhOWIyODc5ZDZlLi5lMDc3NTA1OWNhMGE4IDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMKQEAgLTIwNjUsMTIgJiM0MzsyMDY1LDE3IEBAIHZvaWQgYnJfbXVsdGljYXN0X2RlbF9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpCiB7CiAJc3RydWN0IG5ldF9icmlkZ2UgKmJyID0gcG9ydC0mZ3Q7YnI7CiAJc3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cCAqcGc7Ci0Jc3RydWN0IGhsaXN0X25vZGUgKm47CiAKLQkvKiBUYWtlIGNhcmUgb2YgdGhlIHJlbWFpbmluZyBncm91cHMsIG9ubHkgcGVybSBvbmVzIHNob3VsZCBiZSBsZWZ0ICovCiYjNDM7CS8qIFRha2UgY2FyZSBvZiB0aGUgcmVtYWluaW5nIGdyb3Vwcywgb25seSBwZXJtIG9uZXMgc2hvdWxkIGJlIGxlZnQuCiYjNDM7CSAqIERlbGV0aW5nIG9uZSBjYW4gZGVsZXRlIG90aGVycyBvbiB0aGlzIHNhbWUgcG9ydC0mZ3Q7bWdsaXN0LCBzbwomIzQzOwkgKiBhbHdheXMgcmVzdGFydCBmcm9tIHRoZSBoZWFkLgomIzQzOwkgKi8KIAlzcGluX2xvY2tfYmgoJmFtcDtici0mZ3Q7bXVsdGljYXN0X2xvY2spOwotCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocGcsIG4sICZhbXA7cG9ydC0mZ3Q7bWdsaXN0LCBtZ2xpc3QpCiYjNDM7CXdoaWxlICghaGxpc3RfZW1wdHkoJmFtcDtwb3J0LSZndDttZ2xpc3QpKSB7CiYjNDM7CQlwZyA9IGhsaXN0X2VudHJ5KHBvcnQtJmd0O21nbGlzdC5maXJzdCwKJiM0MzsJCQkJIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAsIG1nbGlzdCk7CiAJCWJyX211bHRpY2FzdF9maW5kX2RlbF9wZyhiciwgcGcpOwomIzQzOwl9CiAJc3Bpbl91bmxvY2tfYmgoJmFtcDtici0mZ3Q7bXVsdGljYXN0X2xvY2spOwogCWZsdXNoX3dvcmsoJmFtcDtici0mZ3Q7bWNhc3RfZ2Nfd29yayk7CiAJYnJfbXVsdGljYXN0X3BvcnRfY3R4X2RlaW5pdCgmYW1wO3BvcnQtJmd0O211bHRpY2FzdF9jdHgpOwpAQCAtMjEyNiwxMSAmIzQzOzIxMzEsMjMgQEAgc3RhdGljIHZvaWQgX19icl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0X2N0eChzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdF9wb3J0ICpwbWN0eCkKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbjsKIAlib29sIGRlbCA9IGZhbHNlOwogCi0JaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwZywgbiwgJmFtcDtwbWN0eC0mZ3Q7cG9ydC0mZ3Q7bWdsaXN0LCBtZ2xpc3QpCi0JCWlmICghKHBnLSZndDtmbGFncyAmYW1wOyBNREJfUEdfRkxBR1NfUEVSTUFORU5UKSAmYW1wOyZhbXA7Ci0JCSAgICAoIWJyX211bHRpY2FzdF9wb3J0X2N0eF9pc192bGFuKHBtY3R4KSB8fAotCQkgICAgIHBnLSZndDtrZXkuYWRkci52aWQgPT0gcG1jdHgtJmd0O3ZsYW4tJmd0O3ZpZCkpCi0JCQlicl9tdWx0aWNhc3RfZmluZF9kZWxfcGcocG1jdHgtJmd0O3BvcnQtJmd0O2JyLCBwZyk7CiYjNDM7CS8qIGJyX211bHRpY2FzdF9maW5kX2RlbF9wZygpIGNhbiBkZWxldGUgZnVydGhlciBlbnRyaWVzIG9mIHRoaXMgc2FtZQomIzQzOwkgKiBwb3J0LSZndDttZ2xpc3QsIHNvIHRoZSBub2RlIGxhdGNoZWQgaW4gQG4gbWF5IGJlIHVubGlua2VkIGJ5IHRoZSBsb29wCiYjNDM7CSAqIGJvZHkuIFBvcnQgZ3JvdXBzIGFyZSBvbmx5IGZyZWVkIGJ5IHRoZSBHQyB3b3JrIHVuZGVyIG11bHRpY2FzdF9sb2NrLAomIzQzOwkgKiBzbyBAbiBpcyBzdGlsbCB2YWxpZCBoZXJlOyBpZiBpdCBsZWZ0IHRoZSBsaXN0LCByZXN0YXJ0LgomIzQzOwkgKi8KJiM0MztyZXN0YXJ0OgomIzQzOwlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBnLCBuLCAmYW1wO3BtY3R4LSZndDtwb3J0LSZndDttZ2xpc3QsIG1nbGlzdCkgewomIzQzOwkJaWYgKChwZy0mZ3Q7ZmxhZ3MgJmFtcDsgTURCX1BHX0ZMQUdTX1BFUk1BTkVOVCkgfHwKJiM0MzsJCSAgICAoYnJfbXVsdGljYXN0X3BvcnRfY3R4X2lzX3ZsYW4ocG1jdHgpICZhbXA7JmFtcDsKJiM0MzsJCSAgICAgcGctJmd0O2tleS5hZGRyLnZpZCAhPSBwbWN0eC0mZ3Q7dmxhbi0mZ3Q7dmlkKSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCWJyX211bHRpY2FzdF9maW5kX2RlbF9wZyhwbWN0eC0mZ3Q7cG9ydC0mZ3Q7YnIsIHBnKTsKJiM0MzsKJiM0MzsJCWlmIChuICZhbXA7JmFtcDsgaGxpc3RfdW5oYXNoZWQobikpCiYjNDM7CQkJZ290byByZXN0YXJ0OwomIzQzOwl9CiAKIAlkZWwgfD0gYnJfaXA0X211bHRpY2FzdF9ycG9ydF9kZWwocG1jdHgpOwogCXRpbWVyX2RlbGV0ZSgmYW1wO3BtY3R4LSZndDtpcDRfbWNfcm91dGVyX3RpbWVyKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTE6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY2MgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBCcmlkZ2UgTXVsdGljYXN0IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCBhIHBhdGNoIGhlcmUgdGhhdCYjMzk7cyBwb2tpbmcgYXQgYG5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmNgLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIHRvIGJlIG1vZGlmeWluZyBob3cgd2UgaGFuZGxlIG11bHRpY2FzdCBncm91cCBtZW1iZXJzaGlwIHdoZW4gZGVsZXRpbmcgb3IgZGlzYWJsaW5nIHBvcnRzIGluIGEgYnJpZGdlLiBUaGUgZnVuY3Rpb25zIGluIHF1ZXN0aW9uIGFyZSBgYnJfbXVsdGljYXN0X2RlbF9wb3J0YCBhbmQgYF9fYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydF9jdHhgLiBUaGUgY29yZSBvZiB0aGUgcHJvYmxlbSwgYXMgSSB1bmRlcnN0YW5kIGl0LCBsaWVzIHdpdGhpbiBgYnJfbXVsdGljYXN0X2ZpbmRfZGVsX3BnYC4gQXBwYXJlbnRseSwgdGhpcyBmdW5jdGlvbiBjYW4gaW5hZHZlcnRlbnRseSBkZWxldGUgZW50cmllcyBmcm9tIHRoZSBgcG9ydC0mZ3Q7bWdsaXN0YCB3aGlsZSB3ZSYjMzk7cmUgaXRlcmF0aW5nIHRocm91Z2ggaXQgdXNpbmcgYGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVgLiBUaGlzIGNvdWxkIGxlYWQgdG8gYSBjbGFzc2ljIGxpc3QgY29ycnVwdGlvbiBzY2VuYXJpbywgZWl0aGVyIGFjY2Vzc2luZyBmcmVlZCBtZW1vcnkgb3IgY29tcGxldGVseSBza2lwcGluZyBzb21lIGVudHJpZXMg4oCTIGJvdGggYmFkIG5ld3MuIFRoZSBwYXRjaCBwcm9wb3NlcyBlaXRoZXIgcmVzdGFydGluZyB0aGUgbG9vcCBvciwgYWx0ZXJuYXRpdmVseSwgc2ltcGx5IHVzaW5nIGEgYHdoaWxlYCBsb29wIHRvIG5hdmlnYXRlIHRoZSBsaXN0LCB3aGljaCBtYWtlcyBzZW5zZS4KClNvLCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIGZ1cnRoZXIuIGBicl9tdWx0aWNhc3RfZGVsX3BvcnRgIGdldHMgY2FsbGVkIHdoZW4gYSBicmlkZ2UgcG9ydCBnZXRzIGRlbGV0ZWQsIHdoaWNoIGlzIGEgZmFpcmx5IGNyaXRpY2FsIGV2ZW50LiBBbmQgYF9fYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydF9jdHhgIGlzIHRpZWQgdG8gZGlzYWJsaW5nIG11bHRpY2FzdCBvbiBhIHBvcnQg4oCTIHNvbWV0aGluZyB0aGF0IGhhcHBlbnMgYSBiaXQgbGVzcyBmcmVxdWVudGx5LCBidXQgaXMgc3RpbGwgcmVsZXZhbnQuCgpOb3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb246IGlzIHRoaXMgd29ydGggZnV6emluZz8gQWJzb2x1dGVseSwgd2l0aG91dCBhIGRvdWJ0ISBUaGlzIGlzIHJpZ2h0IGluIHRoZSBoZWFydCBvZiB0aGUgYnJpZGdlIG11bHRpY2FzdCBsb2dpYy4gQW55IGluc3RhYmlsaXR5IGhlcmUgY291bGQgbGVhZCB0byBzZXJpb3VzIG5ldHdvcmsgZGlzcnVwdGlvbiwgcGFydGljdWxhcmx5IGluIGVudmlyb25tZW50cyByZWx5aW5nIGhlYXZpbHkgb24gbXVsdGljYXN0LgoKTXkgbmV4dCBzdGVwIGlzIHRvIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgZ292ZXJuIGJyaWRnZSBtdWx0aWNhc3QuIEkmIzM5O20gdGhpbmtpbmcgYENPTkZJR19CUklER0VfSUdNUF9TTk9PUElOR2AgaXMgYSBsaWtlbHkgY2FuZGlkYXRlLCBidXQgSSBzaG91bGQgcHJvYmFibHkgY29uZmlybSB0aGF0IGJ5IGNoZWNraW5nIGBuZXQvYnJpZGdlL0tjb25maWdgIG9yIGV2ZW4gYG5ldC9icmlkZ2UvTWFrZWZpbGVgIHRvIG1ha2Ugc3VyZSBJIGhhdmUgdGhlIGNvbnRleHQgcmlnaHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTE6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnJfbXVsdGljYXN0Lm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYnJpZGdlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnJpZGdlL01ha2VmaWxlPTE5PW9iai0kKENPTkZJR19CUklER0VfTkVURklMVEVSKSAmIzQzOz0gYnJfbmV0ZmlsdGVyLm9cbm5ldC9icmlkZ2UvTWFrZWZpbGUtMjAtXG5uZXQvYnJpZGdlL01ha2VmaWxlOjIxOmJyaWRnZS0kKENPTkZJR19CUklER0VfSUdNUF9TTk9PUElORykgJiM0Mzs9IGJyX211bHRpY2FzdC5vIGJyX21kYi5vIGJyX211bHRpY2FzdF9laHQub1xubmV0L2JyaWRnZS9NYWtlZmlsZS0yMi1cbi0tXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jPTE2ND1zdGF0aWMgaW50IGJyX2Rldl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2JyaWRnZS9icl9kZXZpY2UuYy0xNzAtXHRicl9zdHBfZW5hYmxlX2JyaWRnZShicik7XG5uZXQvYnJpZGdlL2JyX2RldmljZS5jOjE3MTpcdGJyX211bHRpY2FzdF9vcGVuKGJyKTtcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtMTcyLVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9NDIyOT12b2lkIGJyX211bHRpY2FzdF9sZWF2ZV9zbm9vcGVycyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MjM0LVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0MjM1OnN0YXRpYyB2b2lkIF9fYnJfbXVsdGljYXN0X29wZW5fcXVlcnkoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MjM2LVx0XHRcdFx0ICAgICAgc3RydWN0IGJyaWRnZV9tY2FzdF9vd25fcXVlcnkgKnF1ZXJ5KVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDI0NS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDI0NjpzdGF0aWMgdm9pZCBfX2JyX211bHRpY2FzdF9vcGVuKHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0ICpicm1jdHgpXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQyNDcte1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0MjQ4Olx0X19icl9tdWx0aWNhc3Rfb3Blbl9xdWVyeShicm1jdHgtXHUwMDNlYnIsIFx1MDAyNmJybWN0eC1cdTAwM2VpcDRfb3duX3F1ZXJ5KTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDI0OS0jaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDI1MDpcdF9fYnJfbXVsdGljYXN0X29wZW5fcXVlcnkoYnJtY3R4LVx1MDAzZWJyLCBcdTAwMjZicm1jdHgtXHUwMDNlaXA2X293bl9xdWVyeSk7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQyNTEtI2VuZGlmXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MjUzLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0MjU0OnZvaWQgYnJfbXVsdGljYXN0X29wZW4oc3RydWN0IG5ldF9icmlkZ2UgKmJyKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MjU1LXtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQyNjktXHRcdFx0XHQgICAgIWJyX211bHRpY2FzdF9jdHhfdmxhbl9kaXNhYmxlZChicm1jdHgpKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0MjcwOlx0XHRcdFx0XHRfX2JyX211bHRpY2FzdF9vcGVuKFx1MDAyNnZsYW4tXHUwMDNlYnJfbWNhc3RfY3R4KTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDI3MS1cdFx0XHR9XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MjczLVx0fSBlbHNlIHtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDI3NDpcdFx0X19icl9tdWx0aWNhc3Rfb3BlbihcdTAwMjZici1cdTAwM2VtdWx0aWNhc3RfY3R4KTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDI3NS1cdH1cbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQzMTg9dm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzQxLVx0XHRpZiAob24pXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQzNDI6XHRcdFx0X19icl9tdWx0aWNhc3Rfb3BlbihcdTAwMjZ2bGFuLVx1MDAzZWJyX21jYXN0X2N0eCk7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzNDMtXHRcdGVsc2Vcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQzODM9aW50IGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIGJvb2wgb24sXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDA3LVx0ZWxzZVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0NDA4Olx0XHRfX2JyX211bHRpY2FzdF9vcGVuKFx1MDAyNmJyLVx1MDAzZW11bHRpY2FzdF9jdHgpO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDA5LVx0bGlzdF9mb3JfZWFjaF9lbnRyeShwLCBcdTAwMjZici1cdTAwM2Vwb3J0X2xpc3QsIGxpc3QpIHtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQ2MTA9c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X3N0YXJ0X3F1ZXJpZXIoc3RydWN0IG5ldF9icmlkZ2VfbWNhc3QgKmJybWN0eCxcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ2MTctXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQ2MTg6XHRfX2JyX211bHRpY2FzdF9vcGVuX3F1ZXJ5KGJybWN0eC1cdTAwM2ViciwgcXVlcnkpO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NjE5LVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9NDY4Mj1pbnQgYnJfbXVsdGljYXN0X3RvZ2dsZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHVuc2lnbmVkIGxvbmcgdmFsLFxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDcwNy1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDcwODpcdGJyX211bHRpY2FzdF9vcGVuKGJyKTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDcwOS1cdGJyX211bHRpY2FzdF9lbmFibGVfYWxsX3BvcnRzKGJyKTtcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD05ODI9dm9pZCBicl9tdWx0aWNhc3RfbGVhdmVfc25vb3BlcnMoc3RydWN0IG5ldF9icmlkZ2UgKmJyKTtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjk4Mzp2b2lkIGJyX211bHRpY2FzdF9vcGVuKHN0cnVjdCBuZXRfYnJpZGdlICpicik7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC05ODQtdm9pZCBicl9tdWx0aWNhc3Rfc3RvcChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpO1xuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTE0Mjk9c3RhdGljIGlubGluZSB2b2lkIGJyX211bHRpY2FzdF9sZWF2ZV9zbm9vcGVycyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTQzMi1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE0MzM6c3RhdGljIGlubGluZSB2b2lkIGJyX211bHRpY2FzdF9vcGVuKHN0cnVjdCBuZXRfYnJpZGdlICpicilcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE0MzQte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDExOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4MDcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyB0aGUgSUdNUCBTbm9vcGluZyBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHRoZSBjdXJyZW50IGNvbmZpZyBpcyBzZXQgdG8gYEJSSURHRV9JR01QX1NOT09QSU5HYCwgd2hpY2ggaW1tZWRpYXRlbHkgdHJpZ2dlcnMgc29tZSB0aG91Z2h0cy4gV2UmIzM5O3ZlIGdvdCBJR01QIHNub29waW5nIGVuYWJsZWQgb24gYSBicmlkZ2UuIE1ha2VzIHNlbnNlIGluIGEgbG90IG9mIHNjZW5hcmlvcywgYnV0IEkgbmVlZCB0byBxdWlja2x5IGVuc3VyZSB3ZSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55IGRlcGVuZGVuY2llcyBvciBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9ucy4gVGhlIG1vc3QgaW1wb3J0YW50IHRoaW5nIGhlcmUgaXMgdGhlIHByZXNlbmNlIG9mIGBCUklER0VgLiBJJiMzOTttIGFzc3VtaW5nIHRoYXQmIzM5O3MgbmVlZGVkIHRvIGV2ZW4gZ2V0IHN0YXJ0ZWQgd2l0aCBJR01QIHNub29waW5nIGluIGEgYnJpZGdlZCBlbnZpcm9ubWVudCwgYnV0IGFzc3VtcHRpb25zIGFyZSB0aGUgYmFuZSBvZiBzb2xpZCBjb25maWd1cmF0aW9ucyEgQmVzdCB0byBxdWlja2x5IHZlcmlmeS4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBgbmV0L2JyaWRnZS9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHRoZSBnby10byBwbGFjZSBmb3IgYWxsIHRoaW5ncyBicmlkZ2luZyBhbmQgY29uZmlndXJhdGlvbiByZWxhdGVkIGluIHRoZSBuZXR3b3JraW5nIHN1YnN5c3RlbS4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIGRlcGVuZGVuY2llcyBhcmUgZXhwbGljaXRseSBsYWlkIG91dCwgc28gdGhhdCYjMzk7cyB0aGUgZmFzdGVzdCB3YXkgdG8gZ2V0IGNsYXJpdHkgb24gd2hldGhlciB3ZSYjMzk7cmUgZ29vZCB0byBnbywgb3IgaWYgdGhlcmUmIzM5O3Mgc29tZXRoaW5nIGVsc2Ugd2UgbmVlZCB0byB0YWtlIGludG8gY29uc2lkZXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMTo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlJJREdFX0lHTVBfU05PT1BJTkcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYnJpZGdlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnJpZGdlL0tjb25maWc9Nj1jb25maWcgQlJJREdFXG4tLVxubmV0L2JyaWRnZS9LY29uZmlnLTM1LVxubmV0L2JyaWRnZS9LY29uZmlnOjM2OmNvbmZpZyBCUklER0VfSUdNUF9TTk9PUElOR1xubmV0L2JyaWRnZS9LY29uZmlnLTM3LVx0Ym9vbCBcJiMzNDtJR01QL01MRCBzbm9vcGluZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDExOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxODMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqS2NvbmZpZyBEZXBlbmRlbmN5IERlZXAgRGl2ZTogQlJJREdFX0lHTVBfU05PT1BJTkcqKgoKT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgYEJSSURHRV9JR01QX1NOT09QSU5HYCBpcyBjb25maWd1cmVkIHdpdGhpbiB0aGUgbmV0d29ya2luZyBzdGFjay4gTXkgaW5pdGlhbCB0YXJnZXQgaXMgYG5ldC9icmlkZ2UvS2NvbmZpZ2AuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgbG9va2luZyBmb3IgYW55IGRlcGVuZGVuY2llcyBvciBjb25kaXRpb25hbCBsb2dpYyByZWxhdGVkIHRvIHRoaXMgcGFydGljdWxhciBicmlkZ2luZyBmZWF0dXJlLiBJJiMzOTttIGFzc3VtaW5nIHRoYXQmIzM5O3Mgd2hlcmUgSSBjYW4gZmluZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBVbmRlcnN0YW5kaW5nIHRob3NlIGRlcGVuZGVuY2llcyBpcyBrZXkgYmVmb3JlIEkgZXZlbiBjb25zaWRlciBtYWtpbmcgYW55IG1vZGlmaWNhdGlvbnMgb3IgZW5oYW5jZW1lbnRzLiBJdCYjMzk7cyB0aGUgZm91bmRhdGlvbiBmb3IgYW55IGRlZXBlciBpbnZlc3RpZ2F0aW9uIGludG8gaXRzIGJlaGF2aW9yLCBwZXJmb3JtYW5jZSwgb3IgcG90ZW50aWFsIGlzc3Vlcy4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBLY29uZmlnIGZpbGUgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMTo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMzY6XHRjb25maWcgQlJJREdFX0lHTVBfU05PT1BJTkdcbiAgMzc6XHRcdGJvb2wgXCYjMzQ7SUdNUC9NTEQgc25vb3BpbmdcJiMzNDtcbiAgMzg6XHRcdGRlcGVuZHMgb24gQlJJREdFXG4gIDM5Olx0XHRkZXBlbmRzIG9uIElORVRcbiAgNDA6XHRcdGRlZmF1bHQgeVxuICA0MTpcdFx0aGVscFxuICA0MjpcdFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgdGhlbiB0aGUgRXRoZXJuZXQgYnJpZGdlIHdpbGwgYmUgYWJsZSBzZWxlY3RpdmVseVxuICA0MzpcdFx0ICBmb3J3YXJkIG11bHRpY2FzdCB0cmFmZmljIGJhc2VkIG9uIElHTVAvTUxEIHRyYWZmaWMgcmVjZWl2ZWQgZnJvbVxuICA0NDpcdFx0ICBlYWNoIHBvcnQuXG4gIDQ1Olx0XG4gIDQ2Olx0XHQgIFNheSBOIHRvIGV4Y2x1ZGUgdGhpcyBzdXBwb3J0IGFuZCByZWR1Y2UgdGhlIGJpbmFyeSBzaXplLlxuICA0NzpcdFxuICA0ODpcdFx0ICBJZiB1bnN1cmUsIHNheSBZLlxuICA0OTpcdFxuICA1MDpcdGNvbmZpZyBCUklER0VfVkxBTl9GSUxURVJJTkdcbiAgNTE6XHRcdGJvb2wgXCYjMzQ7VkxBTiBmaWx0ZXJpbmdcJiMzNDtcbiAgNTI6XHRcdGRlcGVuZHMgb24gQlJJREdFXG4gIDUzOlx0XHRkZXBlbmRzIG9uIFZMQU5fODAyMVFcbiAgNTQ6XHRcdGRlZmF1bHQgblxuICA1NTpcdFx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDExOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2NDcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBJIGRlbHZlIGludG8gdGhpcyBjb2RlOgoKKipBbmFseXppbmcgTXVsdGljYXN0IENvbnRyb2wgRmxvdyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IG11bHRpY2FzdCBpcyBoYW5kbGVkLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBicmlkZ2luZyBjb250ZXh0LiBUaGUga2V5IGlkZW50aWZpZXJzIGp1bXBpbmcgb3V0IGF0IG1lIGFyZSBgQlJJREdFYCwgYElORVRgLCBhbmQgYEJSSURHRV9JR01QX1NOT09QSU5HYC4gVGhlc2UgbGlrZWx5IHJlcHJlc2VudCBjb25maWd1cmF0aW9uIGZsYWdzIG9yIG1vZHVsZSBkZXNpZ25hdGlvbnMgcmVsYXRlZCB0byBicmlkZ2luZyBhbmQgSUdNUCBzbm9vcGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGludGVyYWN0LgoKTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBmdW5jdGlvbnMgYGJyX211bHRpY2FzdF9kZWxfcG9ydGAgYW5kIGBfX2JyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRfY3R4YC4gVGhlc2Ugc2VlbSB0byBiZSB0aGUgY3JpdGljYWwgcG9pbnRzIHdoZXJlIG11bHRpY2FzdCBmb3J3YXJkaW5nIG9uIGJyaWRnZSBwb3J0cyBpcyBtb2RpZmllZCwgcG90ZW50aWFsbHkgcmVtb3ZlZCBvciBkaXNhYmxlZC4gTXkgdGFzayBpcyB0byBkZXRlcm1pbmUgaWYgSSBjYW4gdHJhY2UgdGhlIGNvbnRyb2wgZmxvdyB0byB0aG9zZSBzcGVjaWZpYyBmdW5jdGlvbiBwb2ludHMsIGFuZCB3aGF0IEFQSSBlbnRyeXBvaW50cyBhcmUgYXZhaWxhYmxlIGZvciB0aG9zZSAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7LiBBcmUgdGhleSBkaXJlY3RseSBjYWxsZWQgZnJvbSBzb21ld2hlcmUsIG9yIGFyZSB0aGV5IHJlYWNoZWQgdGhyb3VnaCBzb21lIGNhbGxiYWNrIG9yIGluZGlyZWN0IG1ldGhvZD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGwgZ3JhcGhzIGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSBpbnZva2VkIHRvIGZ1bGx5IGdyYXNwIHRoZWlyIHB1cnBvc2UuIFRoaXMgaXMgd2hlcmUgSSYjMzk7bGwgbG9vayBmb3IgZW50cnkgcG9pbnRzIHRvIEZvY3VzU3ltYm9scy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTE6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnJfbXVsdGljYXN0X2RlbF9wb3J0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl9pZi5jPTMzND1zdGF0aWMgdm9pZCBkZWxfbmJwKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnApXG4tLVxubmV0L2JyaWRnZS9icl9pZi5jLTM2OS1cbm5ldC9icmlkZ2UvYnJfaWYuYzozNzA6XHRicl9tdWx0aWNhc3RfZGVsX3BvcnQocCk7XG5uZXQvYnJpZGdlL2JyX2lmLmMtMzcxLVxuLS1cbm5ldC9icmlkZ2UvYnJfaWYuYz01NjA9aW50IGJyX2FkZF9pZihzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2JyaWRnZS9icl9pZi5jLTU5OS1cdGlmIChlcnIpIHtcbm5ldC9icmlkZ2UvYnJfaWYuYzo2MDA6XHRcdGJyX211bHRpY2FzdF9kZWxfcG9ydChwKTtcbm5ldC9icmlkZ2UvYnJfaWYuYy02MDEtXHRcdG5ldGRldl9wdXQoZGV2LCBcdTAwMjZwLVx1MDAzZWRldl90cmFja2VyKTtcbi0tXG5uZXQvYnJpZGdlL2JyX2lmLmMtNzA5LWVycjI6XG5uZXQvYnJpZGdlL2JyX2lmLmM6NzEwOlx0YnJfbXVsdGljYXN0X2RlbF9wb3J0KHApO1xubmV0L2JyaWRnZS9icl9pZi5jLTcxMS1cdG5ldGRldl9wdXQoZGV2LCBcdTAwMjZwLVx1MDAzZWRldl90cmFja2VyKTtcbi0tXG5uZXQvYnJpZGdlL2JyX21kYi5jPTk4ND1zdGF0aWMgaW50IGJyX21kYl9hZGRfZ3JvdXBfc3Rhcl9nKGNvbnN0IHN0cnVjdCBicl9tZGJfY29uZmlnICpjZmcsXG4tLVxubmV0L2JyaWRnZS9icl9tZGIuYy0xMDM1LWVycl9kZWxfcG9ydF9ncm91cDpcbm5ldC9icmlkZ2UvYnJfbWRiLmM6MTAzNjpcdGJyX211bHRpY2FzdF9kZWxfcG9ydF9ncm91cChwKTtcbm5ldC9icmlkZ2UvYnJfbWRiLmMtMTAzNy1cdHJldHVybiBlcnI7XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0xMzk4PXN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAgKmJyX211bHRpY2FzdF9uZXdfcG9ydF9ncm91cChcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTE0NTYtXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjE0NTc6dm9pZCBicl9tdWx0aWNhc3RfZGVsX3BvcnRfZ3JvdXAoc3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cCAqcClcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMTQ1OC17XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0yMDQzPWludCBicl9tdWx0aWNhc3RfYWRkX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydClcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIwNjMtXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjIwNjQ6dm9pZCBicl9tdWx0aWNhc3RfZGVsX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydClcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjA2NS17XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9OTc2PWludCBicl9tdWx0aWNhc3RfYWRkX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCk7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDo5Nzc6dm9pZCBicl9tdWx0aWNhc3RfZGVsX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCk7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC05Nzgtdm9pZCBicl9tdWx0aWNhc3RfZW5hYmxlX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCk7XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTAwNz1icl9tdWx0aWNhc3RfbmV3X3BvcnRfZ3JvdXAoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCxcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xMDEyLVx0XHRcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTAxMzp2b2lkIGJyX211bHRpY2FzdF9kZWxfcG9ydF9ncm91cChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwICpwKTtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTEwMTQtaW50IGJyX21kYl9oYXNoX2luaXQoc3RydWN0IG5ldF9icmlkZ2UgKmJyKTtcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xNDA0PXN0YXRpYyBpbmxpbmUgaW50IGJyX211bHRpY2FzdF9hZGRfcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0KVxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE0MDgtXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxNDA5OnN0YXRpYyBpbmxpbmUgdm9pZCBicl9tdWx0aWNhc3RfZGVsX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydClcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE0MTAte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTY4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgSSBzZWUgaXQ6CgoqKkFuYWx5emluZyB0aGUgQnJpZGdlIE11bHRpY2FzdCBQb3J0IERlbGV0aW9uIEZsb3cqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBtdWx0aWNhc3QgcG9ydCBkZWxldGlvbiBpcyBoYW5kbGVkIHdpdGhpbiB0aGUgYnJpZGdlIGNvZGUuIGBicl9tdWx0aWNhc3RfZGVsX3BvcnRgIGFwcGVhcnMgdG8gYmUgdGhlIGNvcmUgZnVuY3Rpb24sIHRoZSBvbmUgdGhhdCBhY3R1YWxseSBkb2VzIHRoZSB3b3JrLiBJIHNlZSB0aGF0IGl0JiMzOTtzIGludm9rZWQgZnJvbSB0d28gcHJpbWFyeSBsb2NhdGlvbnM6IGBkZWxfbmJwYCBhbmQgYWxzbywgaW1wb3J0YW50bHksIHdpdGhpbiBgYnJfYWRkX2lmYCBkdXJpbmcgZXJyb3IgaGFuZGxpbmcuIGBkZWxfbmJwYCBtYWtlcyBwZXJmZWN0IHNlbnNlOyB0aGF0JiMzOTtzIHRoZSBuYXR1cmFsIGNhbGwgd2hlbiBhIGJyaWRnZSBwb3J0IGdldHMgcmVtb3ZlZCwgc2F5LCB2aWEgYGJyX2RlbF9pZmAuICBUaGF0IGFsbCB0cmFja3MuCgpUaGUgZXJyb3IgcGF0aCBpbiBgYnJfYWRkX2lmYCBpcyBzb21ldGhpbmcgdG8gdGhpbmsgYWJvdXQgdG9vLCBidXQgdGhlIG1haW4gcXVlc3Rpb24gdGhhdCBqdW1wZWQgb3V0IGF0IG1lIGltbWVkaWF0ZWx5IGlzOiB3aGF04oCZcyB0aGUgcmVsYXRpb25zaGlwIHRvIGBfX2JyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRfY3R4YD8gSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IGl0IGZpdHMgaW50byB0aGlzIHB1enpsZS4gSXMgdGhpcyBmdW5jdGlvbiBhIGxvd2VyLWxldmVsIGNvbXBhbmlvbiwgYSBoZWxwZXIsIGEgZGlmZmVyZW50IGFwcHJvYWNoIGVudGlyZWx5PyBJIG5lZWQgdG8gY2xhcmlmeSB0aGUgZmxvdyBvZiBob3cgbXVsdGljYXN0IGlzIGFjdHVhbGx5IGRpc2FibGVkLCBkb3duIHRvIHRoZSBncmFudWxhciBsZXZlbC4gVGhlIGNvbm5lY3Rpb24gYmV0d2VlbiBhbGwgb2YgdGhlc2UgZnVuY3Rpb25zIG5lZWRzIHRvIGJlIHRob3JvdWdobHkgdW5kZXJzdG9vZCB0byBlbnN1cmUgZWZmaWNpZW50IGFuZCBjb25zaXN0ZW50IHBvcnQgcmVtb3ZhbCBpbiBhbGwgc2NlbmFyaW9zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMTo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2JyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRfY3R4JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0yMTE0PXN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9lbmFibGVfcG9ydF9jdHgoc3RydWN0IG5ldF9icmlkZ2VfbWNhc3RfcG9ydCAqcG1jdHgpXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMTI3LVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoyMTI4OnN0YXRpYyB2b2lkIF9fYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydF9jdHgoc3RydWN0IG5ldF9icmlkZ2VfbWNhc3RfcG9ydCAqcG1jdHgpXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIxMjkte1xuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MjE2Mz1zdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0X2N0eChzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdF9wb3J0ICpwbWN0eClcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIxNzMtXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjIxNzQ6XHRfX2JyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRfY3R4KHBtY3R4KTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjE3NS1cdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmJyLVx1MDAzZW11bHRpY2FzdF9sb2NrKTtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQzMTg9dm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzU3LVx0XHRlbHNlXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQzNTg6XHRcdFx0X19icl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0X2N0eChcdTAwMjZ2bGFuLVx1MDAzZXBvcnRfbWNhc3RfY3R4KTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDM1OS1cdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2YnItXHUwMDNlbXVsdGljYXN0X2xvY2spO1xuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9NDY3MT1zdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfZGlzYWJsZV9hbGxfcG9ydHMoc3RydWN0IG5ldF9icmlkZ2UgKmJyKVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDY3OC1cdGxpc3RfZm9yX2VhY2hfZW50cnkocG9ydCwgXHUwMDI2YnItXHUwMDNlcG9ydF9saXN0LCBsaXN0KVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0Njc5Olx0XHRfX2JyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRfY3R4KFx1MDAyNnBvcnQtXHUwMDNlbXVsdGljYXN0X2N0eCk7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ2ODAtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODc0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBicmVha2Rvd24gb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipUcmFjaW5nIHRoZSBNdWx0aWNhc3QgRGlzYWJsZSBTZXF1ZW5jZSoqCgpPa2F5LCBzbyBJJiMzOTttIGludmVzdGlnYXRpbmcgdGhlIG11bHRpY2FzdCBkaXNhYmxlIGZ1bmN0aW9uYWxpdHkuIFRoZSBlbnRyeSBwb2ludCBhcHBlYXJzIHRvIGJlIGBicl9tdWx0aWNhc3RfZGlzYWJsZV9hbGxfcG9ydHNgLiBUaGF0IG1ha2VzIHNlbnNlOyBpdCYjMzk7cyBhIGRlc2NyaXB0aXZlIG5hbWUuIFRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgZnJvbSBgYnJfbXVsdGljYXN0X3RvZ2dsZWAgYWNjb3JkaW5nIHRvIHRoZSBwcm92aWRlZCBpbmZvcm1hdGlvbi4gQW5kIGBicl9tdWx0aWNhc3RfdG9nZ2xlYD8gSXQmIzM5O3MgdGhlIG9uZSBjYWxsZWQgYnkgZnVuY3Rpb25zIGxpa2UgYGJyX211bHRpY2FzdF9zZXRfaWdtcF9zbm9vcGluZ2AsIHdoaWNoIGlzIGV4YWN0bHkgdGhlIGtpbmQgb2Ygc2V0dGluZyBJJiMzOTtkIGV4cGVjdCB0byB0cmlnZ2VyIGEgbXVsdGljYXN0IHN0YXRlIGNoYW5nZS4KCkdpdmVuIHRoaXMgaW5pdGlhbCBvdmVydmlldywgbXkgbmV4dCBzdGVwIGlzIGNsZWFyLiBUbyByZWFsbHkgdW5kZXJzdGFuZCB0aGUgZmxvdywgSSBuZWVkIHRvIGRpdmUgaW50byBgYnJfbXVsdGljYXN0X3RvZ2dsZWAuIEkgbmVlZCB0byBzZWUgd2hhdCBjb25kaXRpb25zIHRyaWdnZXIgdGhlIGNhbGwgdG8gYGJyX211bHRpY2FzdF9kaXNhYmxlX2FsbF9wb3J0c2AsIGFuZCB3aGF0IG90aGVyIGFjdGlvbnMgYXJlIHBlcmZvcm1lZCB3aXRoaW4gdGhhdCBgdG9nZ2xlYCBmdW5jdGlvbi4gVGhpcyB3aWxsIGxldCBtZSByZWNvbnN0cnVjdCB0aGUgb3ZlcmFsbCBtdWx0aWNhc3QgZGlzYWJsZSBtZWNoYW5pc20gYW5kIHBpbnBvaW50IHRoZSBtb3N0IGltcGFjdGZ1bCBwYXJ0cyBvZiB0aGUgcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTE6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnJfbXVsdGljYXN0X3RvZ2dsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnIuYz0yOTQ9aW50IGJyX2Jvb2xvcHRfdG9nZ2xlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgZW51bSBicl9ib29sb3B0X2lkIG9wdCwgYm9vbCBvbixcbi0tXG5uZXQvYnJpZGdlL2JyLmMtMzAzLVx0Y2FzZSBCUl9CT09MT1BUX01DQVNUX1ZMQU5fU05PT1BJTkc6XG5uZXQvYnJpZGdlL2JyLmM6MzA0Olx0XHRlcnIgPSBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3BpbmcoYnIsIG9uLCBleHRhY2spO1xubmV0L2JyaWRnZS9ici5jLTMwNS1cdFx0YnJlYWs7XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0yMTYzPXN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRfY3R4KHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0X3BvcnQgKnBtY3R4KVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjE3Ny1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MjE3ODpzdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwgYm9vbCBvbilcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjE3OS17XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0yMjE2PXZvaWQgYnJfbXVsdGljYXN0X2VuYWJsZV9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIyMTcte1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoyMjE4Olx0YnJfbXVsdGljYXN0X3RvZ2dsZV9wb3J0KHBvcnQsIHRydWUpO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMjE5LX1cbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTIyMjE9dm9pZCBicl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIyMjIte1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoyMjIzOlx0YnJfbXVsdGljYXN0X3RvZ2dsZV9wb3J0KHBvcnQsIGZhbHNlKTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjIyNC19XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00MjkyPXZvaWQgYnJfbXVsdGljYXN0X3VwZGF0ZV92bGFuX21jYXN0X2N0eChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LCB1OCBzdGF0ZSlcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzMTctXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQzMTg6dm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzMTkte1xuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDM2Mi1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDM2MzpzdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbilcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDM2NC17XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00Mzc1LVx0XHRcdGNvbnRpbnVlO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0Mzc2Olx0XHRicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHZwb3J0LCBvbik7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzNzctXHR9XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00Mzc5LVx0aWYgKGJyX3ZsYW5faXNfYnJlbnRyeSh2bGFuKSlcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDM4MDpcdFx0YnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbih2bGFuLCBvbik7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzODEtfVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzgyLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0MzgzOmludCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3Bpbmcoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBib29sIG9uLFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00Mzg0LVx0XHRcdFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQxNi1cdGxpc3RfZm9yX2VhY2hfZW50cnkodmxhbiwgXHUwMDI2dmctXHUwMDNldmxhbl9saXN0LCB2bGlzdClcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDQxNzpcdFx0YnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuKHZsYW4sIG9uKTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQxOC1cbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MjEtXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQ0MjI6Ym9vbCBicl9tdWx0aWNhc3RfdG9nZ2xlX2dsb2JhbF92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MjMte1xuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQzMi1cdHZsYW4tXHUwMDNlcHJpdl9mbGFncyBePSBCUl9WTEZMQUdfR0xPQkFMX01DQVNUX0VOQUJMRUQ7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQ0MzM6XHRicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW4odmxhbiwgb24pO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDM0LVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9NDY3MT1zdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfZGlzYWJsZV9hbGxfcG9ydHMoc3RydWN0IG5ldF9icmlkZ2UgKmJyKVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDY4MS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDY4MjppbnQgYnJfbXVsdGljYXN0X3RvZ2dsZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHVuc2lnbmVkIGxvbmcgdmFsLFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NjgzLVx0XHRcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYz0xMjk1PXN0YXRpYyBpbnQgYnJfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqYnJkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXG4tLVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMTQ0OS1cbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jOjE0NTA6XHRcdGVyciA9IGJyX211bHRpY2FzdF90b2dnbGUoYnIsIG1jYXN0X3Nub29waW5nLCBleHRhY2spO1xubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMTQ1MS1cdFx0aWYgKGVycilcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD05OTI9aW50IGJyX211bHRpY2FzdF9zZXRfdmxhbl9yb3V0ZXIoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdiwgdTggbWNhc3Rfcm91dGVyKTtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjk5MzppbnQgYnJfbXVsdGljYXN0X3RvZ2dsZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHVuc2lnbmVkIGxvbmcgdmFsLFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtOTk0LVx0XHRcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTA2OT12b2lkIGJyX211bHRpY2FzdF91cGRhdGVfdmxhbl9tY2FzdF9jdHgoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdiwgdTggc3RhdGUpO1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTA3MDp2b2lkIGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbik7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxMDcxOmludCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3Bpbmcoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBib29sIG9uLFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTA3Mi1cdFx0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxMDczOmJvb2wgYnJfbXVsdGljYXN0X3RvZ2dsZV9nbG9iYWxfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCBib29sIG9uKTtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTEwNzQtXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTU0Nj1zdGF0aWMgaW5saW5lIHZvaWQgYnJfbXVsdGljYXN0X3VwZGF0ZV92bGFuX21jYXN0X2N0eChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LFxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE1NTAtXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxNTUxOnN0YXRpYyBpbmxpbmUgdm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNTUyLVx0XHRcdFx0XHRcdGJvb2wgb24pXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTU1NS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE1NTY6c3RhdGljIGlubGluZSBpbnQgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nKHN0cnVjdCBuZXRfYnJpZGdlICpicixcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE1NTctXHRcdFx0XHRcdFx0ICAgIGJvb2wgb24sXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTU2Mi1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE1NjM6c3RhdGljIGlubGluZSBib29sIGJyX211bHRpY2FzdF90b2dnbGVfZ2xvYmFsX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbixcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE1NjQtXHRcdFx0XHRcdFx0ICAgYm9vbCBvbilcbi0tXG5uZXQvYnJpZGdlL2JyX3N5c2ZzX2JyLmM9NDE2PXN0YXRpYyBzc2l6ZV90IG11bHRpY2FzdF9zbm9vcGluZ19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkLFxuLS1cbm5ldC9icmlkZ2UvYnJfc3lzZnNfYnIuYy00MTkte1xubmV0L2JyaWRnZS9icl9zeXNmc19ici5jOjQyMDpcdHJldHVybiBzdG9yZV9icmlkZ2VfcGFybShkLCBidWYsIGxlbiwgYnJfbXVsdGljYXN0X3RvZ2dsZSk7XG5uZXQvYnJpZGdlL2JyX3N5c2ZzX2JyLmMtNDIxLX1cbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz0yMDM9c3RhdGljIHZvaWQgYnJfdmxhbl9wdXRfbWFzdGVyKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKm1hc3RlcnYpXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtMjE0LVx0XHRfX3ZsYW5fZGVsX2xpc3QobWFzdGVydik7XG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzoyMTU6XHRcdGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4obWFzdGVydiwgZmFsc2UpO1xubmV0L2JyaWRnZS9icl92bGFuLmMtMjE2LVx0XHRicl9tdWx0aWNhc3RfY3R4X2RlaW5pdChcdTAwMjZtYXN0ZXJ2LVx1MDAzZWJyX21jYXN0X2N0eCk7XG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmM9MjYzPXN0YXRpYyBpbnQgX192bGFuX2FkZChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LCB1MTYgZmxhZ3MsXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtMzU4LVx0X192bGFuX2ZsYWdzX2NvbW1pdCh2LCBmbGFncyk7XG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzozNTk6XHRicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHYsIHRydWUpO1xubmV0L2JyaWRnZS9icl92bGFuLmMtMzYwLVxuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTM5MD1zdGF0aWMgaW50IF9fdmxhbl9kZWwoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdilcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy00MjctXHRcdG5icF92bGFuX3NldF92bGFuX2Rldl9zdGF0ZShwLCB2LVx1MDAzZXZpZCk7XG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzo0Mjg6XHRcdGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4odiwgZmFsc2UpO1xubmV0L2JyaWRnZS9icl92bGFuLmMtNDI5LVx0XHRicl9tdWx0aWNhc3RfcG9ydF9jdHhfZGVpbml0KFx1MDAyNnYtXHUwMDNlcG9ydF9tY2FzdF9jdHgpO1xuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTcxOT1zdGF0aWMgaW50IGJyX3ZsYW5fYWRkX2V4aXN0aW5nKHN0cnVjdCBuZXRfYnJpZGdlICpicixcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy03NjAtXHRcdCpjaGFuZ2VkID0gdHJ1ZTtcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjc2MTpcdFx0YnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbih2bGFuLCB0cnVlKTtcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTc2Mi1cdH1cbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz04OTQ9aW50IGJyX3ZsYW5fZmlsdGVyX3RvZ2dsZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHVuc2lnbmVkIGxvbmcgdmFsLFxuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTkyMC1cdFx0YnJfaW5mbyhiciwgXCYjMzQ7dmxhbiBmaWx0ZXJpbmcgZGlzYWJsZWQsIGF1dG9tYXRpY2FsbHkgZGlzYWJsaW5nIG11bHRpY2FzdCB2bGFuIHNub29waW5nXFxuXCYjMzQ7KTtcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjkyMTpcdFx0YnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nKGJyLCBmYWxzZSwgTlVMTCk7XG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy05MjItXHR9XG4tLVxubmV0L2JyaWRnZS9icl92bGFuX29wdGlvbnMuYz01NTA9c3RhdGljIGludCBicl92bGFuX3Byb2Nlc3NfZ2xvYmFsX29uZV9vcHRzKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlICpicixcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW5fb3B0aW9ucy5jLTU2NC1cdFx0bWNfc25vb3BpbmcgPSBubGFfZ2V0X3U4KHRiW0JSSURHRV9WTEFOREJfR09QVFNfTUNBU1RfU05PT1BJTkddKTtcbm5ldC9icmlkZ2UvYnJfdmxhbl9vcHRpb25zLmM6NTY1Olx0XHRpZiAoYnJfbXVsdGljYXN0X3RvZ2dsZV9nbG9iYWxfdmxhbih2LCAhIW1jX3Nub29waW5nKSlcbm5ldC9icmlkZ2UvYnJfdmxhbl9vcHRpb25zLmMtNTY2LVx0XHRcdCpjaGFuZ2VkID0gdHJ1ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTE6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExNzMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgQnJpZGdlIE11bHRpY2FzdCBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiB0cmFjaW5nIHRoZSBjYWxsIHBhdGhzIHJlbGF0ZWQgdG8gbXVsdGljYXN0IG1hbmFnZW1lbnQgaW4gdGhlIExpbnV4IGJyaWRnZSBjb2RlLiBJdCBsb29rcyBsaWtlIGBicl9tdWx0aWNhc3RfdG9nZ2xlYCBpcyB0cmlnZ2VyZWQgdGhyb3VnaCB0d28gbWFpbiBhdmVudWVzOiBzeXNmcyB2aWEgYG11bHRpY2FzdF9zbm9vcGluZ19zdG9yZWAgYW5kIG5ldGxpbmsgdXNpbmcgYGJyX2NoYW5nZWxpbmtgLiBTaW1pbGFybHksIGBicl9tdWx0aWNhc3RfZGVsX3BvcnRgIGdldHMgY2FsbGVkIHZpYSBgYnJfZGVsX2lmYCwgd2hpY2ggaXRzZWxmIGNhbiBiZSBpbnZva2VkIHRocm91Z2ggbmV0bGluayYjMzk7cyBgUlRNX0RFTExJTktgIG9yIHRoZSBpb2N0bCBgU0lPQ0JSREVMSUZgLiBUaGUga2V5IHRha2Vhd2F5IGhlcmUgaXMgdGhhdCBib3RoIG9mIHRoZXNlIGFyZSBkZWZpbml0ZWx5IGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UuIEZ1cnRoZXJtb3JlLCBzaW5jZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIG5ldHdvcmsgbmFtZXNwYWNlcywgZXZlbiB1bnByaXZpbGVnZWQgdXNlcnMgY2FuIHBvdGVudGlhbGx5IHJlYWNoIHRoZXNlIGZ1bmN0aW9ucy4KCk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGlkZW50aWZ5IHRoZSBjcnVjaWFsIGVudHJ5IHBvaW50cyB0aGF0IGFyZSB3b3J0aCBmb2N1c2luZyBvbiBmb3IgbW9yZSBpbiBkZXB0aCBhbmFseXNpcy4gYGJyX211bHRpY2FzdF9kZWxfcG9ydGAganVtcHMgb3V0IGFzIGEgZ29vZCBjYW5kaWRhdGUuIGBicl9tdWx0aWNhc3RfdG9nZ2xlYCwgYGJyX211bHRpY2FzdF9hZGRfcG9ydGAsIGFuZCBgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nYCBhbHNvIGFwcGVhciBwcm9taXNpbmcgZnJvbSB0aGlzIGZpcnN0IHBhc3MuCgpOb3csIGxldCYjMzk7cyBkaXZlIGludG8gYG5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmNgIHRvIGV4YW1pbmUgYGJyX211bHRpY2FzdF9kZWxfcG9ydGAgYW5kIGBicl9tdWx0aWNhc3RfdG9nZ2xlYC4gSGFuZyBvbi4uLiBgX19icl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0X2N0eGAgaXMgc3RhdGljLiBUaGF0IG1lYW5zIHdlIHNob3VsZCBwaXZvdCBvdXIgYXR0ZW50aW9uIHRvIHRoZSBub24tc3RhdGljIGNvdW50ZXJwYXJ0cyBzdWNoIGFzIGBicl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0YCwgYGJyX211bHRpY2FzdF90b2dnbGVfcG9ydGAsIG9yLCBhZ2FpbiwgYGJyX211bHRpY2FzdF90b2dnbGVgLiBJJiMzOTtsbCBzdGFydCBieSBmb2N1c2luZyBvbiBgYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDExOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyX211bHRpY2FzdF9kaXNhYmxlX3BvcnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYnJpZGdlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTIxMTQ9c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X2VuYWJsZV9wb3J0X2N0eChzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdF9wb3J0ICpwbWN0eClcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIxMjctXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjIxMjg6c3RhdGljIHZvaWQgX19icl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0X2N0eChzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdF9wb3J0ICpwbWN0eClcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjEyOS17XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMTYyLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoyMTYzOnN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRfY3R4KHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0X3BvcnQgKnBtY3R4KVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMTY0LXtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIxNzMtXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjIxNzQ6XHRfX2JyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRfY3R4KHBtY3R4KTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjE3NS1cdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmJyLVx1MDAzZW11bHRpY2FzdF9sb2NrKTtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTIxNzg9c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X3RvZ2dsZV9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsIGJvb2wgb24pXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMjAyLVx0XHRcdGVsc2Vcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MjIwMzpcdFx0XHRcdGJyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRfY3R4KHBtY3R4KTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjIwNC1cdFx0fVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjIxMi1cdGVsc2Vcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MjIxMzpcdFx0YnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydF9jdHgoXHUwMDI2cG9ydC1cdTAwM2VtdWx0aWNhc3RfY3R4KTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjIxNC19XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0yMjE2PXZvaWQgYnJfbXVsdGljYXN0X2VuYWJsZV9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMjIwLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoyMjIxOnZvaWQgYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0KVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMjIyLXtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQzMTg9dm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzU3LVx0XHRlbHNlXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQzNTg6XHRcdFx0X19icl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0X2N0eChcdTAwMjZ2bGFuLVx1MDAzZXBvcnRfbWNhc3RfY3R4KTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDM1OS1cdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2YnItXHUwMDNlbXVsdGljYXN0X2xvY2spO1xuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9NDM4Mz1pbnQgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgYm9vbCBvbixcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MTAtXHRcdGlmIChvbilcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDQxMTpcdFx0XHRicl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0X2N0eChcdTAwMjZwLVx1MDAzZW11bHRpY2FzdF9jdHgpO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDEyLVx0XHRlbHNlXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00NjcxPXN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9kaXNhYmxlX2FsbF9wb3J0cyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00Njc4LVx0bGlzdF9mb3JfZWFjaF9lbnRyeShwb3J0LCBcdTAwMjZici1cdTAwM2Vwb3J0X2xpc3QsIGxpc3QpXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQ2Nzk6XHRcdF9fYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydF9jdHgoXHUwMDI2cG9ydC1cdTAwM2VtdWx0aWNhc3RfY3R4KTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDY4MC19XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9OTc4PXZvaWQgYnJfbXVsdGljYXN0X2VuYWJsZV9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpO1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6OTc5OnZvaWQgYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0KTtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTk4MC12b2lkIGJyX211bHRpY2FzdF9pbml0KHN0cnVjdCBuZXRfYnJpZGdlICpicik7XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTQxMz1zdGF0aWMgaW5saW5lIHZvaWQgYnJfbXVsdGljYXN0X2VuYWJsZV9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTQxNi1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE0MTc6c3RhdGljIGlubGluZSB2b2lkIGJyX211bHRpY2FzdF9kaXNhYmxlX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydClcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE0MTgte1xuLS1cbm5ldC9icmlkZ2UvYnJfc3RwX2lmLmM9OTk9dm9pZCBicl9zdHBfZGlzYWJsZV9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnApXG4tLVxubmV0L2JyaWRnZS9icl9zdHBfaWYuYy0xMTctXHRcdGJyX2ZkYl9kZWxldGVfYnlfcG9ydChiciwgcCwgMCwgMCk7XG5uZXQvYnJpZGdlL2JyX3N0cF9pZi5jOjExODpcdGJyX211bHRpY2FzdF9kaXNhYmxlX3BvcnQocCk7XG5uZXQvYnJpZGdlL2JyX3N0cF9pZi5jLTExOS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTE6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMxNjgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBNdWx0aWNhc3QgU25vb3BpbmcgRnVuY3Rpb25hbGl0eSBpbiB0aGUgQnJpZGdlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIE15IHByaW1hcnkgZ29hbCBoZXJlIGlzIHRvIGlkZW50aWZ5IHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgcmVsYXRlZCB0byBtdWx0aWNhc3Qgc25vb3Bpbmcgd2l0aGluIHRoZSBicmlkZ2UgYW5kIHVuZGVyc3RhbmQgdGhlaXIgY2FsbCBncmFwaC4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgaW1wYWN0IG9mIHBvcnQgc3RhdGUgY2hhbmdlcyBhbmQgVkxBTiBpbnRlZ3JhdGlvbi4KCkZpcnN0LCBJIHNlZSB0aGF0IGBicl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0YCBpcyB0cmlnZ2VyZWQgYnkgYGJyX3N0cF9kaXNhYmxlX3BvcnRgLCB3aGljaCBpbiB0dXJuIGlzIGNhbGxlZCB3aGVuIGEgcG9ydCBnb2VzIGRvd24gb3IgaXMgcmVtb3ZlZC4gVGhhdCBtZWFucyBpdOKAmXMgYSBrZXkgcG9pbnQgdG8gc3RhcnQgd2l0aC4KCkkmIzM5O20gbW92aW5nIG9uIHRvIGBicl9tdWx0aWNhc3RfZGVsX3BvcnRgLiBUaGlzIGZ1bmN0aW9uIGxvb2tzIGltcG9ydGFudCBiZWNhdXNlIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGBkZWxfbmJwYCBhbmQgYW4gZXJyb3IgcGF0aCB3aXRoaW4gYGJyX2FkZF9pZmAuIFRoaXMgaW5kaWNhdGVzIGl0IGhhbmRsZXMgdGhlIHJlbW92YWwgb2YgYSBwb3J0IGFuZCBhc3NvY2lhdGVkIHJlc291cmNlcy4KCk5vdywgbGV0JiMzOTtzIGV4cGxvcmUgYGJyX211bHRpY2FzdF90b2dnbGVgLiBJIHNlZSB0aGF0IGl0JiMzOTtzIGNhbGxlZCBmcm9tIGBicl9jaGFuZ2VsaW5rYCBhbmQgYG11bHRpY2FzdF9zbm9vcGluZ19zdG9yZWAuIFRoaXMgZnVuY3Rpb24gY2xlYXJseSBtYW5hZ2VzIHRoZSBvdmVyYWxsIGVuYWJsaW5nL2Rpc2FibGluZyBvZiBzbm9vcGluZywgcHJvYmFibHkgaW4gcmVzcG9uc2UgdG8gbGluayBzdGF0ZSBjaGFuZ2VzIG9yIGNvbmZpZ3VyYXRpb24gY2hhbmdlcy4KCk5leHQsIEkgbmVlZCB0byBjaGVjayBgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nYCwgd2hpY2ggaXMgdHJpZ2dlcmVkIGJ5IGBicl9ib29sb3B0X3RvZ2dsZWAuIEl0IGxvb2tzIGxpa2UgaXQgaGFuZGxlcyB0aGUgdG9nZ2xpbmcgb2Ygc25vb3BpbmcgYXQgdGhlIFZMQU4gbGV2ZWwuCgpTaW1pbGFybHksIEkgc2hvdWxkIGNoZWNrIGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYCBzaW5jZSBpdCBpcyBjYWxsZWQgZnJvbSBgYnJfdmxhbl9hZGRfZXhpc3RpbmdgLCBgX192bGFuX2RlbGAsIGBfX3ZsYW5fYWRkYCwgYW5kIGBicl92bGFuX3B1dF9tYXN0ZXJgLiBUaGlzIGZ1bmN0aW9uIGxvb2tzIGVzc2VudGlhbCBmb3IgYWRkaW5nL3JlbW92aW5nIFZMQU5zIGFuZCB0aGVpciByZWxhdGlvbnNoaXBzIHdpdGggc25vb3BpbmcuCgpJIGFsc28gbmVlZCB0byBjaGVjayBgYnJfbXVsdGljYXN0X3RvZ2dsZV9nbG9iYWxfdmxhbmAgc2luY2UgaXQgaXMgY2FsbGVkIGZyb20gYGJyX3ZsYW5fcHJvY2Vzc19nbG9iYWxfb25lX29wdHNgLiBUaGlzIGlzIHJlbGF0ZWQgdG8gdGhlIGdsb2JhbCBjb25maWd1cmF0aW9uIG9mIHNub29waW5nIG9uIFZMQU5zLgoKVGhlIG5leHQgY3JpdGljYWwgZnVuY3Rpb24gc2VlbXMgdG8gYmUgYGJyX211bHRpY2FzdF9hZGRfcG9ydGAuIEl0JiMzOTtzIGNhbGxlZCBmcm9tIGBicl9hZGRfaWZgLCBzbyBpdCYjMzk7cyBpbnZvbHZlZCBpbiBhZGRpbmcgYSBwb3J0IHRvIHRoZSBicmlkZ2UuCgpBbHNvIGBicl9tdWx0aWNhc3RfZW5hYmxlX3BvcnRgLCB3aGljaCBpcyBjYWxsZWQgZnJvbSBgYnJfc3RwX2VuYWJsZV9wb3J0YC4KCmBicl9tdWx0aWNhc3RfZGVsX3BvcnRfZ3JvdXBgIGlzIHRyaWdnZXJlZCBmcm9tIGBicl9tZGJfYWRkX2dyb3VwX3N0YXJfZ2AsIHdoaWNoIGlzIHJlbGF0ZWQgdG8gcG9ydCBncm91cHMuIFdoaWxlIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYXJlbiYjMzk7dCBkaXJlY3RseSBsaW5rZWQgdG8gaXQsIHBvcnQgZ3JvdXBzIGFyZSBjbGVhcmx5IHJlbGF0ZWQgdG8gdGhpcyBhcmVhLgoKTG9va2luZyBjbG9zZWx5IGF0IHdoYXQgZnVuY3Rpb25zIGFyZSBiZWluZyBjaGFuZ2VkLCBJIHNlZSBgYnJfbXVsdGljYXN0X2RlbF9wb3J0YCBhbmQgYF9fYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydF9jdHhgLiBMZXQmIzM5O3MgdW5kZXJzdGFuZCBob3cgdGhlc2UgYXJlIGludGVyY29ubmVjdGVkLgoKYF9fYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydF9jdHhgIGlzIGNhbGxlZCBieSBgYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydF9jdHhgLCBgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbmAsIGFuZCBgYnJfbXVsdGljYXN0X2Rpc2FibGVfYWxsX3BvcnRzYC4gVGhpcyBwb2ludHMgdG8gaXRzIHJvbGUgaW4gYWN0dWFsbHkgZGlzYWJsaW5nIHRoZSBwb3J0IGNvbnRleHQsIHBvdGVudGlhbGx5IGFzIGEgaGVscGVyLgoKSSBzZWUgdGhhdCBgYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydF9jdHhgIGlzIGNhbGxlZCBmcm9tIGBicl9tdWx0aWNhc3RfdG9nZ2xlX3BvcnRgICh3aGljaCBpcyBpbiB0dXJuIGNhbGxlZCBmcm9tIGBicl9tdWx0aWNhc3RfZW5hYmxlX3BvcnRgIGFuZCBgYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydGApIGFuZCBhbHNvIGZyb20gYGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZ2AuIEl0IGhhbmRsZXMgcG9ydC1sZXZlbCBzbm9vcGluZyBjaGFuZ2VzLgoKVGhlbiBgYnJfbXVsdGljYXN0X2Rpc2FibGVfYWxsX3BvcnRzYCBpcyBjYWxsZWQgYnkgYGJyX211bHRpY2FzdF90b2dnbGVgLCBzdWdnZXN0aW5nIHRoYXQgdGhpcyBpcyBhIGdsb2JhbCBvcGVyYXRpb24uCgpUaGVyZWZvcmUsIHRoZSBrZXkgZW50cnkgcG9pbnRzIEkmIzM5O20gZm9jdXNpbmcgb24gYXJlOiBgYnJfbXVsdGljYXN0X2RlbF9wb3J0YCwgYGJyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRgLCBgYnJfbXVsdGljYXN0X3RvZ2dsZWAsIGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYCwgYW5kIGBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3BpbmdgLgoKTm93LCBJJiMzOTtsbCBjaGVjayB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgZXhwb3J0ZWQuIEdvb2QsIGBicl9tdWx0aWNhc3RfZGVsX3BvcnRgLCBgYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydGAsIGBicl9tdWx0aWNhc3RfdG9nZ2xlYCwgYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gLCBhbmQgYGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZ2AgYXJlIGFsbCBub24tc3RhdGljLiBUaGlzIGNvbmZpcm1zIHRoYXQgdGhlc2UgYXJlIHBhcnQgb2YgdGhlIHB1YmxpYyBBUEksIHdoaWNoIGlzIGNyaXRpY2FsLgoKRmluYWxseSwgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGFsbCB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQgdG8gc3VwcG9ydCB0aGVzZSBmdW5jdGlvbnMuIEkmIzM5O2xsIG5lZWQgYEJSSURHRWAsIGBJTkVUYCwgYW5kIGBCUklER0VfSUdNUF9TTk9PUElOR2AuIFNpbmNlIFZMQU4tcmVsYXRlZCBmdW5jdGlvbnMgYXJlIGluIHBsYXkgKGUuZy4sIGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYCwgYGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZ2AsIGFuZCBgCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTE6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYnJpZGdlL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDUwOlx0Y29uZmlnIEJSSURHRV9WTEFOX0ZJTFRFUklOR1xuICA1MTpcdFx0Ym9vbCBcJiMzNDtWTEFOIGZpbHRlcmluZ1wmIzM0O1xuICA1MjpcdFx0ZGVwZW5kcyBvbiBCUklER0VcbiAgNTM6XHRcdGRlcGVuZHMgb24gVkxBTl84MDIxUVxuICA1NDpcdFx0ZGVmYXVsdCBuXG4gIDU1Olx0XHRoZWxwXG4gIDU2Olx0XHQgIElmIHlvdSBzYXkgWSBoZXJlLCB0aGVuIHRoZSBFdGhlcm5ldCBicmlkZ2Ugd2lsbCBiZSBhYmxlIHNlbGVjdGl2ZWx5XG4gIDU3Olx0XHQgIHJlY2VpdmUgYW5kIGZvcndhcmQgdHJhZmZpYyBiYXNlZCBvbiBWTEFOIGluZm9ybWF0aW9uIGluIHRoZSBwYWNrZXRcbiAgNTg6XHRcdCAgYW55IFZMQU4gaW5mb3JtYXRpb24gY29uZmlndXJlZCBvbiB0aGUgYnJpZGdlIHBvcnQgb3IgYnJpZGdlIGRldmljZS5cbiAgNTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTE6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUzOTYKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkNvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzOiBBIFJlZmluZW1lbnQqKgoKUmlnaHQsIHNvIGBCUklER0VfVkxBTl9GSUxURVJJTkdgIGlzIGRlZmluaXRlbHkgY29udGluZ2VudCBvbiBib3RoIGBCUklER0VgIGFuZCBgVkxBTl84MDIxUWAuIE1ha2VzIHNlbnNlLCB3ZSBuZWVkIHRoZSBicmlkZ2luZyBmdW5jdGlvbmFsaXR5IGFuZCB0aGUgODAyLjFRIHRhZ2dpbmcgc3VwcG9ydC4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgYFZMQU5fODAyMVFgIGlzIGluY2x1ZGVkIGluIG15IGBFbmFibGVDb25maWdzYCBsaXN0LiBObyBicmFpbmVyIHRoZXJlLgoKTm93LCBsZXQmIzM5O3Mgc2VlIGFib3V0IGBCUklER0VfSUdNUF9TTk9PUElOR2AuIEkgc2VlbSB0byByZWNhbGwgaXQgZGVwZW5kaW5nIG9uIGBJTkVUYCwgc28gbGV0JiMzOTtzIGp1c3QgY29uZmlybSB0aGF0IGRlcGVuZGVuY3kuIFllcCwgdGhlcmUgaXQgaXMuIEdvb2QuIFNvLCBiYXNlZCBvbiB3aGF0IEkgc2VlIGhlcmUsIG15IGBFbmFibGVDb25maWdzYCBzaG91bGQgY29udGFpbiB0aGUgZm9sbG93aW5nOiBgQlJJREdFYCwgYElORVRgLCBgQlJJREdFX0lHTVBfU05PT1BJTkdgLCBgVkxBTl84MDIxUWAsIGFuZCBgQlJJREdFX1ZMQU5fRklMVEVSSU5HYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgY29yZSBjb21wb25lbnRzIEkgbmVlZCwgYWNjb3JkaW5nIHRvIHdoYXQmIzM5O3MgZGVmaW5lZCBoZXJlLgoKSnVzdCB0byBiZSBzYWZlLCBJIHNob3VsZCBxdWlja2x5IHZlcmlmeSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGRpcmVjdCBkZXBlbmRlbmNpZXMgdGhhdCBJIG1pZ2h0IGhhdmUgb3Zlcmxvb2tlZCBmb3IgYEJSSURHRWAgaXRzZWxmLiBXZSBkb24mIzM5O3Qgd2FudCBhbnkgdW5leHBlY3RlZCBzdXJwcmlzZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDExOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUklER0UkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9LY29uZmlnLTUtXG5uZXQvYnJpZGdlL0tjb25maWc6Njpjb25maWcgQlJJREdFXG5uZXQvYnJpZGdlL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0OzgwMi4xZCBFdGhlcm5ldCBCcmlkZ2luZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTg3OQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkV4YW1pbmluZyBCcmlkZ2UgRGVwZW5kZW5jaWVzIGluIEtjb25maWcqKgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGBCUklER0VgIGNvbmZpZ3VyYXRpb24gYW5kIGl0cyBkZXBlbmRlbmNpZXMgd2l0aGluIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtLiBUaGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBpcyBgbmV0L2JyaWRnZS9LY29uZmlnYC4gVGhpcyBmaWxlIHNob3VsZCBob2xkIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBicmlkZ2luZyBmdW5jdGlvbmFsaXR5IGFuZCwgY3J1Y2lhbGx5LCBzcGVjaWZ5IHdoYXQgb3RoZXIga2VybmVsIGZlYXR1cmVzIG9yIG1vZHVsZXMgYXJlIHJlcXVpcmVkIHRvIGJlIGVuYWJsZWQgb3IgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4gSSB3YW50IHRvIGNvbmZpcm0gbXkgYXNzdW1wdGlvbnMgYW5kIGVuc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnkga2V5IGRlcGVuZGVuY2llcyBiZWZvcmUgSSBtb3ZlIGZvcndhcmQgd2l0aCBteSBhbmFseXNpcy4gSXQmIzM5O3MgdGhlIHN0YW5kYXJkIHByYWN0aWNlIC0gYXZvaWQgd2FzdGluZyB0aW1lIGxhdGVyIGJlY2F1c2Ugb2Ygb3ZlcnNpZ2h0cyBlYXJsaWVyLiBUaGF0IGZpbGUgc2hvdWxkIHByb3ZpZGUgdGhlIGRlZmluaXRpdmUgc291cmNlIG9mIHRydXRoIGZvciB0aGUga2VybmVsJiMzOTtzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTE6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYnJpZGdlL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDY6XHRjb25maWcgQlJJREdFXG4gICA3Olx0XHR0cmlzdGF0ZSBcJiMzNDs4MDIuMWQgRXRoZXJuZXQgQnJpZGdpbmdcJiMzNDtcbiAgIDg6XHRcdHNlbGVjdCBMTENcbiAgIDk6XHRcdHNlbGVjdCBTVFBcbiAgMTA6XHRcdGhlbHBcbiAgMTE6XHRcdCAgSWYgeW91IHNheSBZIGhlcmUsIHRoZW4geW91ciBMaW51eCBib3ggd2lsbCBiZSBhYmxlIHRvIGFjdCBhcyBhblxuICAxMjpcdFx0ICBFdGhlcm5ldCBicmlkZ2UsIHdoaWNoIG1lYW5zIHRoYXQgdGhlIGRpZmZlcmVudCBFdGhlcm5ldCBzZWdtZW50cyBpdFxuICAxMzpcdFx0ICBpcyBjb25uZWN0ZWQgdG8gd2lsbCBhcHBlYXIgYXMgb25lIEV0aGVybmV0IHRvIHRoZSBwYXJ0aWNpcGFudHMuXG4gIDE0Olx0XHQgIFNldmVyYWwgc3VjaCBicmlkZ2VzIGNhbiB3b3JrIHRvZ2V0aGVyIHRvIGNyZWF0ZSBldmVuIGxhcmdlclxuICAxNTpcdFx0ICBuZXR3b3JrcyBvZiBFdGhlcm5ldHMgdXNpbmcgdGhlIElFRUUgODAyLjEgc3Bhbm5pbmcgdHJlZSBhbGdvcml0aG0uXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDExOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MjU2CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTMxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJyaWRnZSBNdWx0aWNhc3QgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoZSBkZXBlbmRlbmNpZXMuLi4gYEJSSURHRWAgaXMgdGhlIHJvb3QsIGJ1dCByZWxpZXMgaW1wbGljaXRseSBvbiBgTkVUYC4gYElORVRgIGFuZCBgVkxBTl84MDIxUWAgYXJlIHN0YW5kYXJkIGFuZCBleHBlY3RlZC4gQ3J1Y2lhbGx5LCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGhlcmUgYXJlIGBCUklER0VfSUdNUF9TTk9PUElOR2AgYW5kIGBCUklER0VfVkxBTl9GSUxURVJJTkdgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBmb2N1cyBuZWVkcyB0byBiZS4KCk5vdywgdGhpcyBwYXRjaC4uLiBpdCYjMzk7cyBhZGRyZXNzaW5nIGEgc3VidGxlIGNvbmN1cnJlbmN5IGlzc3VlIHdpdGhpbiB0aGUgYnJpZGdlJiMzOTtzIG11bHRpY2FzdCBoYW5kbGluZywgc3BlY2lmaWNhbGx5IHdoZW4gZGVsZXRpbmcgbXVsdGljYXN0IGdyb3VwcyBmcm9tIGEgcG9ydCYjMzk7cyBgbWdsaXN0YC4gVGhlIGNvcmUgcHJvYmxlbSBsaWVzIHdpdGhpbiB0aGUgYGJyX211bHRpY2FzdF9kZWxfcG9ydGAgYW5kIGBfX2JyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRfY3R4YCBmdW5jdGlvbnMuIFRoZSBgaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZWAgbWFjcm8sIHVzZWQgdG8gaXRlcmF0ZSB0aHJvdWdoIHRoZSBsaXN0IG9mIG11bHRpY2FzdCBncm91cHMsIGNhbiBnZXQgdHJpcHBlZCB1cCBpZiB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gYGJyX211bHRpY2FzdF9maW5kX2RlbF9wZ2AgcmVtb3ZlcyB0aGUgZW50cnkgaXQmIzM5O3MgY3VycmVudGx5IHByb2Nlc3NpbmcgKm9yKiBvdGhlciBlbnRyaWVzIG9uIHRoZSBsaXN0LiBUaGUgb3JpZ2luYWwgY29kZSYjMzk7cyBpdGVyYXRvciwgc3BlY2lmaWNhbGx5IHRoZSBgbmAgcG9pbnRlciBpbiB0aGUgYGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVgLCBjb3VsZCBiZWNvbWUgaW52YWxpZCBvciBzdGFsZSwgbGVhZGluZyB0byBwb3RlbnRpYWwgaXNzdWVzIGxpa2UgbWlzc2VkIGVudHJpZXMgZHVyaW5nIGl0ZXJhdGlvbiwgb3IgZXZlbiB1c2UtYWZ0ZXItZnJlZSwgdGhvdWdoIHRoZSBjb2RlIGNvbW1lbnQgaW5kaWNhdGVzIHRoYXQgcG9ydCBncm91cHMgYXJlIG9ubHkgZnJlZWQgYnkgdGhlIEdDIHdvcmsgdW5kZXIgYG11bHRpY2FzdF9sb2NrYCwgc28gaXQgaXMgbW9yZSBsaWtlbHkgdGhhdCBvbmx5IGVudHJpZXMgYXJlIG1pc3NlZC4gVGhlIHBhdGNoIGludHJvZHVjZXMgYSBgcmVzdGFydDpgIGxhYmVsIGFuZCB1c2VzIGEgYHdoaWxlYCBsb29wLCBhbG9uZyB3aXRoIGEgY2hlY2sgYWZ0ZXIgdGhlIGRlbGV0ZSwgdG8gaGFuZGxlIHRoZSBjYXNlIHdoZXJlIGFuIGVudHJ5IGlzIGRlbGV0ZWQgd2l0aGluIHRoZSBsb29wLiBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgaXRlcmF0aW9uIHJlc3RhcnRzIGZyb20gdGhlIGJlZ2lubmluZyBpZiBhIGdyb3VwIGlzIHJlbW92ZWQsIGFuZCBwcmV2ZW50cyB0aGUgc3RhbGUgcG9pbnRlciBwcm9ibGVtLgoKVGhpcyBpcyBhIGZ1bmN0aW9uYWwgZml4IHRvIGNvcmUgYnJpZGdlIG11bHRpY2FzdCBsb2dpYywgYW5kIHNvLCBpdCBuZWVkcyB0aG9yb3VnaCBmdXp6aW5nLgoKTXkgcHJpbWFyeSBmb2N1cyBoZXJlIGlzIGdvaW5nIHRvIGJlIHRob3NlIGZ1bmN0aW9uczogYGJyX211bHRpY2FzdF9kZWxfcG9ydGAgYW5kIGBfX2JyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRfY3R4YC4gQnV0LCB0byBiZSBjb21wcmVoZW5zaXZlLCBJIG5lZWQgdG8gaW5jbHVkZSB0aGUgZW50cnkgcG9pbnRzIGZvciB0aGVzZSwgcGFydGljdWxhcmx5IGBicl9tdWx0aWNhc3RfdG9nZ2xlYCwgYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gIGFuZCBgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nYCwgYnV0IGFsc28gYGJyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRgLiBOb3csIGlzIGBicl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0YCAqdGhlKiBiZXN0IGVudHJ5IHBvaW50IGZvciBgX19icl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0X2N0eGA/IExldCYjMzk7cyB0cmFjZSBpdC4gSXQgc2VlbXMgYF9fYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydF9jdHhgIGlzIGluZGVlZCBjYWxsZWQgdmlhIGBicl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0X2N0eGAsIHdoaWNoIGlzIHVsdGltYXRlbHkgY2FsbGVkIGJ5IGBicl9tdWx0aWNhc3RfdG9nZ2xlX3BvcnRgLiBCdXQsIGBicl9tdWx0aWNhc3RfdG9nZ2xlX3BvcnRgIGlzIGFsc28gY2FsbGVkIGJ5IGBicl9tdWx0aWNhc3RfZW5hYmxlX3BvcnRgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IGxvZ2ljIGJldHRlciAtIGRvZXMgYGJyX211bHRpY2FzdF9lbmFibGVfcG9ydGAgZGlzYWJsZSBmaXJzdD8gTm8sIGFjdHVhbGx5LCBgYnJfbXVsdGljYXN0X3RvZ2dsZV9wb3J0YCBpcyB0aGUgcmVhbCBjZW50cmFsIHBvaW50LCBhbmQgY2FuIGJlIGNhbGxlZCBlaXRoZXIgd2l0aCBgb25gIGFzIGZhbHNlLCB3aGljaCB3aWxsIGNhbGwgdGhlIGRpc2FibGUgcm91dGluZSwgKm9yKiBpZiBgb25gIGlzIHRydWUgYnV0IGBicl9tdWx0aWNhc3RfcG9ydF9jdHhfdmxhbl9kaXNhYmxlZGAgaXMgdHJ1ZS4uLiBJIG5lZWQgdG8gY2hlY2sgdGhlIGNhbGwgb2YgYGJyX211bHRpY2FzdF90b2dnbGVfcG9ydGAgbW9yZSBjbG9zZWx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMTo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticl9tdWx0aWNhc3RfdG9nZ2xlX3BvcnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYnJpZGdlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTIxNjM9c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydF9jdHgoc3RydWN0IG5ldF9icmlkZ2VfbWNhc3RfcG9ydCAqcG1jdHgpXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMTc3LVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoyMTc4OnN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF90b2dnbGVfcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LCBib29sIG9uKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMTc5LXtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTIyMTY9dm9pZCBicl9tdWx0aWNhc3RfZW5hYmxlX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydClcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjIxNy17XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjIyMTg6XHRicl9tdWx0aWNhc3RfdG9nZ2xlX3BvcnQocG9ydCwgdHJ1ZSk7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIyMTktfVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MjIyMT12b2lkIGJyX211bHRpY2FzdF9kaXNhYmxlX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydClcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjIyMi17XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjIyMjM6XHRicl9tdWx0aWNhc3RfdG9nZ2xlX3BvcnQocG9ydCwgZmFsc2UpO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMjI0LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTE6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg2NDkKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGNvZGUuCgoqKkFuYWx5emluZyBgYnJfbXVsdGljYXN0X3RvZ2dsZV9wb3J0YCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IHJpZ2h0IGludG8gaXQuIFRoZSBmdW5jdGlvbiBuYW1lLCBgYnJfbXVsdGljYXN0X3RvZ2dsZV9wb3J0YCwgaW1tZWRpYXRlbHkgdGVsbHMgbWUgaXQmIzM5O3MgZGVhbGluZyB3aXRoIG11bHRpY2FzdCB0cmFmZmljIG9uIGEgYnJpZGdlLCBzcGVjaWZpY2FsbHkgdG9nZ2xpbmcgYSBwb3J0JiMzOTtzIHBhcnRpY2lwYXRpb24uIEkgd2FudCB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyBqb2luaW5nIGFuZCBsZWF2aW5nIG11bHRpY2FzdCBncm91cHMsIHByb2JhYmx5IGludGVyYWN0aW5nIHdpdGggdGhlIHVuZGVybHlpbmcgSUdNUC9NTEQgbG9naWMgb3Igc2ltaWxhci4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgY29yZSBhY3Rpb25zOiBhcmUgd2UgYWRkaW5nIG9yIGRlbGV0aW5nIHRoZSBwb3J0IGZyb20gaW50ZXJuYWwgc3RydWN0dXJlcz8gV2hhdCBmbGFncyBvciBzdGF0ZSB2YXJpYWJsZXMgYXJlIGJlaW5nIG1hbmlwdWxhdGVkPyBJcyB0aGVyZSBhbnkgaW50ZXJhY3Rpb24gd2l0aCB0aGUgaGFyZHdhcmUgZm9yd2FyZGluZyB0YWJsZSBpbnZvbHZlZCwgYW5kIGlmIHNvLCBob3c/IEkgYWxzbyBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHBvdGVudGlhbCBlcnJvciBoYW5kbGluZyDigJMgYXJlIHRoZXJlIGNoZWNrcyBmb3IgaW52YWxpZCBwb3J0IG51bWJlcnMsIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzLCBvciBvdGhlciBjb21tb24gaXNzdWVzPyBGaW5hbGx5LCBJIG5lZWQgdG8gc2VlIHRoZSBjb250ZXh0IGluIHdoaWNoIGl0JiMzOTtzIGJlaW5nIGNhbGxlZCwgdG8gdHJ1bHkgdW5kZXJzdGFuZCB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgdGhpcyBkZXNpZ24uIElzIHRoaXMgY2FsbGVkIGFzIGEgZGlyZWN0IEFQSSBlbnRyeXBvaW50LCBvciBpcyBpdCB0cmlnZ2VyZWQgYnkgc29tZSBldmVudCwgc3VjaCBhcyBhIHVzZXItc3BhY2UgY29uZmlndXJhdGlvbiBjb21tYW5kIG9yIGEgaGFyZHdhcmUgY2hhbmdlPyBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHRvIGJlIGZhaXJseSBpbnZvbHZlZCwgZ2l2ZW4gdGhhdCBtdWx0aWNhc3Qgcm91dGluZyBhbmQgZm9yd2FyZGluZyBjYW4gYmUgY29tcGxleC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjE3OCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMTc4Olx0c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X3RvZ2dsZV9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsIGJvb2wgb24pXG4yMTc5Olx0e1xuMjE4MDpcdCNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkcpXG4yMTgxOlx0XHRpZiAoYnJfb3B0X2dldChwb3J0LVx1MDAzZWJyLCBCUk9QVF9NQ0FTVF9WTEFOX1NOT09QSU5HX0VOQUJMRUQpKSB7XG4yMTgyOlx0XHRcdHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnO1xuMjE4MzpcdFx0XHRzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuO1xuMjE4NDpcdFxuMjE4NTpcdFx0XHRyY3VfcmVhZF9sb2NrKCk7XG4yMTg2Olx0XHRcdHZnID0gbmJwX3ZsYW5fZ3JvdXBfcmN1KHBvcnQpO1xuMjE4NzpcdFx0XHRpZiAoIXZnKSB7XG4yMTg4Olx0XHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4yMTg5Olx0XHRcdFx0cmV0dXJuO1xuMjE5MDpcdFx0XHR9XG4yMTkxOlx0XG4yMTkyOlx0XHRcdC8qIGl0ZXJhdGUgZWFjaCB2bGFuLCB0b2dnbGUgdmxhbiBtdWx0aWNhc3QgY29udGV4dCAqL1xuMjE5MzpcdFx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh2bGFuLCBcdTAwMjZ2Zy1cdTAwM2V2bGFuX2xpc3QsIHZsaXN0KSB7XG4yMTk0Olx0XHRcdFx0c3RydWN0IG5ldF9icmlkZ2VfbWNhc3RfcG9ydCAqcG1jdHggPVxuMjE5NTpcdFx0XHRcdFx0XHRcdFx1MDAyNnZsYW4tXHUwMDNlcG9ydF9tY2FzdF9jdHg7XG4yMTk2Olx0XHRcdFx0dTggc3RhdGUgPSBicl92bGFuX2dldF9zdGF0ZSh2bGFuKTtcbjIxOTc6XHRcdFx0XHQvKiBlbmFibGUgdmxhbiBtdWx0aWNhc3QgY29udGV4dCB3aGVuIHN0YXRlIGlzXG4yMTk4Olx0XHRcdFx0ICogTEVBUk5JTkcgb3IgRk9SV0FSRElOR1xuMjE5OTpcdFx0XHRcdCAqL1xuMjIwMDpcdFx0XHRcdGlmIChvbiBcdTAwMjZcdTAwMjYgYnJfdmxhbl9zdGF0ZV9hbGxvd2VkKHN0YXRlLCB0cnVlKSlcbjIyMDE6XHRcdFx0XHRcdGJyX211bHRpY2FzdF9lbmFibGVfcG9ydF9jdHgocG1jdHgpO1xuMjIwMjpcdFx0XHRcdGVsc2VcbjIyMDM6XHRcdFx0XHRcdGJyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRfY3R4KHBtY3R4KTtcbjIyMDQ6XHRcdFx0fVxuMjIwNTpcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbjIyMDY6XHRcdFx0cmV0dXJuO1xuMjIwNzpcdFx0fVxuMjIwODpcdCNlbmRpZlxuMjIwOTpcdFx0LyogdG9nZ2xlIHBvcnQgbXVsdGljYXN0IGNvbnRleHQgd2hlbiB2bGFuIHNub29waW5nIGlzIGRpc2FibGVkICovXG4yMjEwOlx0XHRpZiAob24pXG4yMjExOlx0XHRcdGJyX211bHRpY2FzdF9lbmFibGVfcG9ydF9jdHgoXHUwMDI2cG9ydC1cdTAwM2VtdWx0aWNhc3RfY3R4KTtcbjIyMTI6XHRcdGVsc2VcbjIyMTM6XHRcdFx0YnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydF9jdHgoXHUwMDI2cG9ydC1cdTAwM2VtdWx0aWNhc3RfY3R4KTtcbjIyMTQ6XHR9XG4yMjE1Olx0XG4yMjE2Olx0dm9pZCBicl9tdWx0aWNhc3RfZW5hYmxlX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydClcbjIyMTc6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NjA0CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBNdWx0aWNhc3QgQ29udHJvbCBQYXRocyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBwcmltYXJ5IGNvbnRyb2wgcGF0aHMgZm9yIG1hbmFnaW5nIG11bHRpY2FzdCBiZWhhdmlvciBvbiBicmlkZ2UgcG9ydHMuIFRoaW5raW5nIHRoaXMgdGhyb3VnaCwgYGJyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRgIHNlZW1zIGxpa2UgYSBzb2xpZCBlbnRyeSBwb2ludCwgYW5kIHRoYXQgbWFrZXMgc2Vuc2Ug4oCTIGl0JiMzOTtzIHRoZSBuYXR1cmFsIHBsYWNlIHRvIHN0YXJ0IHdoZW4gZGlzYWJsaW5nLiBJIGFsc28gbmVlZCB0byB0aGluayBhYm91dCBob3cgZW5hYmxpbmcgaW50ZXJhY3RzIHdpdGggdGhpcywgYW5kIGBicl9tdWx0aWNhc3RfZW5hYmxlX3BvcnRgIGNhdGNoZXMgbXkgYXR0ZW50aW9uIGJlY2F1c2UgaXQgKmNhbiogY2FsbCBgYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydF9jdHhgIGlmIGBvbmAgaXMgdHJ1ZSBidXQgdGhlIFZMQU4gc3RhdGUgaXNuJiMzOTt0IHJpZ2h0LiBUaGF0JiMzOTtzIGNsZXZlcjsgaGFuZGxlcyB0aGUgY29uZGl0aW9uYWwgZGlzYWJsZSBuaWNlbHkuCgpUaGVyZWZvcmUsIHNpbmNlIHRoZXkmIzM5O3JlIHRpZ2h0bHkgY291cGxlZCBpbiB0aGF0IG1hbm5lciwgSSYjMzk7bGwgcHV0IGJvdGggYGJyX211bHRpY2FzdF9lbmFibGVfcG9ydGAgYW5kIGBicl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0YCBvbiBteSBsaXN0IG9mIHJlbGV2YW50IGZ1bmN0aW9ucywgZXNwZWNpYWxseSBiZWNhdXNlIG9uZSBsZXZlcmFnZXMgdGhlIG90aGVyLgoKVG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZSwgSSBzaG91bGQgYWxzbyB2ZXJpZnkgaG93IHRvZ2dsaW5nIFZMQU4gc25vb3BpbmcgaW1wYWN0cyBtdWx0aWNhc3QgY29udHJvbCwgc28gbGV0JiMzOTtzIHNoaWZ0IGdlYXJzIGFuZCBjaGVjayB0aGUgbG9naWMgd2l0aGluIGBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3BpbmdgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MzgzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQzODM6XHRpbnQgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgYm9vbCBvbixcbjQzODQ6XHRcdFx0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbjQzODU6XHR7XG40Mzg2Olx0XHRzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2ZztcbjQzODc6XHRcdHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW47XG40Mzg4Olx0XHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwO1xuNDM4OTpcdFxuNDM5MDpcdFx0aWYgKGJyX29wdF9nZXQoYnIsIEJST1BUX01DQVNUX1ZMQU5fU05PT1BJTkdfRU5BQkxFRCkgPT0gb24pXG40MzkxOlx0XHRcdHJldHVybiAwO1xuNDM5MjpcdFxuNDM5MzpcdFx0aWYgKG9uIFx1MDAyNlx1MDAyNiAhYnJfb3B0X2dldChiciwgQlJPUFRfVkxBTl9FTkFCTEVEKSkge1xuNDM5NDpcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDtDYW5ub3QgZW5hYmxlIG11bHRpY2FzdCB2bGFuIHNub29waW5nIHdpdGggdmxhbiBmaWx0ZXJpbmcgZGlzYWJsZWRcJiMzNDspO1xuNDM5NTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjQzOTY6XHRcdH1cbjQzOTc6XHRcbjQzOTg6XHRcdHZnID0gYnJfdmxhbl9ncm91cChicik7XG40Mzk5Olx0XHRpZiAoIXZnKVxuNDQwMDpcdFx0XHRyZXR1cm4gMDtcbjQ0MDE6XHRcbjQ0MDI6XHRcdGJyX29wdF90b2dnbGUoYnIsIEJST1BUX01DQVNUX1ZMQU5fU05PT1BJTkdfRU5BQkxFRCwgb24pO1xuNDQwMzpcdFxuNDQwNDpcdFx0LyogZGlzYWJsZS9lbmFibGUgbm9uLXZsYW4gbWNhc3QgY29udGV4dHMgYmFzZWQgb24gdmxhbiBzbm9vcGluZyAqL1xuNDQwNTpcdFx0aWYgKG9uKVxuNDQwNjpcdFx0XHRfX2JyX211bHRpY2FzdF9zdG9wKFx1MDAyNmJyLVx1MDAzZW11bHRpY2FzdF9jdHgpO1xuNDQwNzpcdFx0ZWxzZVxuNDQwODpcdFx0XHRfX2JyX211bHRpY2FzdF9vcGVuKFx1MDAyNmJyLVx1MDAzZW11bHRpY2FzdF9jdHgpO1xuNDQwOTpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShwLCBcdTAwMjZici1cdTAwM2Vwb3J0X2xpc3QsIGxpc3QpIHtcbjQ0MTA6XHRcdFx0aWYgKG9uKVxuNDQxMTpcdFx0XHRcdGJyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRfY3R4KFx1MDAyNnAtXHUwMDNlbXVsdGljYXN0X2N0eCk7XG40NDEyOlx0XHRcdGVsc2VcbjQ0MTM6XHRcdFx0XHRicl9tdWx0aWNhc3RfZW5hYmxlX3BvcnRfY3R4KFx1MDAyNnAtXHUwMDNlbXVsdGljYXN0X2N0eCk7XG40NDE0Olx0XHR9XG40NDE1Olx0XG40NDE2Olx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHZsYW4sIFx1MDAyNnZnLVx1MDAzZXZsYW5fbGlzdCwgdmxpc3QpXG40NDE3Olx0XHRcdGJyX211bHRpY2FzdF90b2dnbGVfdmxhbih2bGFuLCBvbik7XG40NDE4Olx0XG40NDE5Olx0XHRyZXR1cm4gMDtcbjQ0MjA6XHR9XG40NDIxOlx0XG40NDIyOlx0Ym9vbCBicl9tdWx0aWNhc3RfdG9nZ2xlX2dsb2JhbF92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNjY5CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gYXMgaWYgdGhleSB3ZXJlIG15IG93biBpbW1lZGlhdGUgcHJvY2Vzc2luZzoKCioqSW5pdGlhbCBBc3Nlc3NtZW50OiBNdWx0aWNhc3QgU25vb3BpbmcgVG9nZ2xlIEVudHJ5IFBvaW50KioKClJpZ2h0LCBgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nYCBzZWVtcyBsaWtlIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIGludmVzdGlnYXRpbmcgbXVsdGljYXN0IHNub29waW5nIGZ1bmN0aW9uYWxpdHkuIE15IGd1dCBmZWVsaW5nIGlzIHRoYXQgaXQmIzM5O3MgbGlrZWx5IHRoZSBrZXkgZnVuY3Rpb24gdGhhdCB0aWVzIHRvZ2V0aGVyIFZMQU4tc3BlY2lmaWMgc25vb3BpbmcgYmVoYXZpb3IuIEkmIzM5O20gYXNzdW1pbmcgaXQmIzM5O3MgcHJvYmFibHkgdGhlIHRvcC1sZXZlbCBpbnRlcmZhY2UgZm9yIGVuYWJsaW5nIG9yIGRpc2FibGluZyBzbm9vcGluZyB3aXRoaW4gYSBWTEFOIGNvbnRleHQuIEl0JiMzOTtzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgZGV0YWlscyBvZiB0aGUgaW1wbGVtZW50YXRpb24uCgpOb3csIGxldCYjMzk7cyBkcmlsbCBkb3duIGludG8gYGJyX211bHRpY2FzdF90b2dnbGVgLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgZm91bmRhdGlvbmFsIGxvZ2ljIHRoYXQgYGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZ2AgbGlrZWx5IGNhbGxzIG9yIGRlcGVuZHMgb24uIFVuZGVyc3RhbmRpbmcgaG93IHRoZSBjb3JlIG11bHRpY2FzdCBjb250cm9sIHdvcmtzIGlzIGNyaXRpY2FsIGJlZm9yZSBJIHRyeSB0byB1bmRlcnN0YW5kIHRoZSBWTEFOIHNwZWNpZmljIGFkYXB0YXRpb25zLiBUaGlzIHdpbGwgc2V0IHRoZSBzdGFnZSB0byBzZWUgaG93IGl0IG1pZ2h0IGJlIGFkYXB0ZWQgb3IgZXh0ZW5kZWQgZm9yIFZMQU4gaW50ZWdyYXRpb24uIExldCYjMzk7cyBzZWUgd2hhdCB0aGF0IGxvd2VyIGxldmVsIGZ1bmN0aW9uIGRvZXMuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDY4MiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0NjgyOlx0aW50IGJyX211bHRpY2FzdF90b2dnbGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1bnNpZ25lZCBsb25nIHZhbCxcbjQ2ODM6XHRcdFx0XHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG40Njg0Olx0e1xuNDY4NTpcdFx0Ym9vbCBjaGFuZ2Vfc25vb3BlcnMgPSBmYWxzZTtcbjQ2ODY6XHRcdGludCBlcnIgPSAwO1xuNDY4NzpcdFxuNDY4ODpcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmJyLVx1MDAzZW11bHRpY2FzdF9sb2NrKTtcbjQ2ODk6XHRcdGlmICghIWJyX29wdF9nZXQoYnIsIEJST1BUX01VTFRJQ0FTVF9FTkFCTEVEKSA9PSAhIXZhbClcbjQ2OTA6XHRcdFx0Z290byB1bmxvY2s7XG40NjkxOlx0XG40NjkyOlx0XHRlcnIgPSBicl9tY19kaXNhYmxlZF91cGRhdGUoYnItXHUwMDNlZGV2LCB2YWwsIGV4dGFjayk7XG40NjkzOlx0XHRpZiAoZXJyID09IC1FT1BOT1RTVVBQKVxuNDY5NDpcdFx0XHRlcnIgPSAwO1xuNDY5NTpcdFx0aWYgKGVycilcbjQ2OTY6XHRcdFx0Z290byB1bmxvY2s7XG40Njk3Olx0XG40Njk4Olx0XHRicl9vcHRfdG9nZ2xlKGJyLCBCUk9QVF9NVUxUSUNBU1RfRU5BQkxFRCwgISF2YWwpO1xuNDY5OTpcdFx0aWYgKCFicl9vcHRfZ2V0KGJyLCBCUk9QVF9NVUxUSUNBU1RfRU5BQkxFRCkpIHtcbjQ3MDA6XHRcdFx0Y2hhbmdlX3Nub29wZXJzID0gdHJ1ZTtcbjQ3MDE6XHRcdFx0YnJfbXVsdGljYXN0X2Rpc2FibGVfYWxsX3BvcnRzKGJyKTtcbjQ3MDI6XHRcdFx0Z290byB1bmxvY2s7XG40NzAzOlx0XHR9XG40NzA0Olx0XG40NzA1Olx0XHRpZiAoIW5ldGlmX3J1bm5pbmcoYnItXHUwMDNlZGV2KSlcbjQ3MDY6XHRcdFx0Z290byB1bmxvY2s7XG40NzA3Olx0XG40NzA4Olx0XHRicl9tdWx0aWNhc3Rfb3Blbihicik7XG40NzA5Olx0XHRicl9tdWx0aWNhc3RfZW5hYmxlX2FsbF9wb3J0cyhicik7XG40NzEwOlx0XG40NzExOlx0XHRjaGFuZ2Vfc25vb3BlcnMgPSB0cnVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTQzMQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb24sIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgTXVsdGljYXN0IE1hbmFnZW1lbnQgQ29kZSoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBtdWx0aWNhc3QgY29udHJvbCB3aXRoaW4gdGhlIGJyaWRnaW5nIGNvbXBvbmVudCwgYW5kIGBicl9tdWx0aWNhc3RfdG9nZ2xlYCBzZWVtcyBsaWtlIGEgbG9naWNhbCBpbml0aWFsIGVudHJ5IHBvaW50IHRvIGludmVzdGlnYXRlLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gd2hhdCB0aGUgcHJlY29uZGl0aW9ucyBhcmUgZm9yIGJlaW5nIGNhbGxlZCwgYnV0IGl0IGNlcnRhaW5seSBvZmZlcnMgYSB0b3AtbGV2ZWwgdmlldy4KCkkmIzM5O20gc3BlY2lmaWNhbGx5IGludGVyZXN0ZWQgaW4gaG93IHBvcnRzIGFyZSBhZGRlZCBhbmQgcmVtb3ZlZCBmcm9tIHRoZSBtdWx0aWNhc3QgZ3JvdXAgbWVtYmVyc2hpcC4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIGBicl9tdWx0aWNhc3RfZGVsX3BvcnRgLiBJdCYjMzk7cyBsaWtlbHkgdGhhdCBhIGNvbXBsZW1lbnQgdG8gdGhlICYjMzQ7dG9nZ2xlJiMzNDsgb3BlcmF0aW9uIGludm9sdmVzIHNwZWNpZmljYWxseSByZW1vdmluZyBhIHBvcnQsIG9yIGEgcmFuZ2Ugb2YgcG9ydHMsIGZyb20gdGhlIGZvcndhcmRpbmcgc3RhdGUgZm9yIG11bHRpY2FzdCB0cmFmZmljLiBMZXQmIzM5O3MgZGVsdmUgaW4gYW5kIHNlZSB0aGUgY29udHJvbCBmbG93Li4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwNjQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjA2NDpcdHZvaWQgYnJfbXVsdGljYXN0X2RlbF9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpXG4yMDY1Olx0e1xuMjA2NjpcdFx0c3RydWN0IG5ldF9icmlkZ2UgKmJyID0gcG9ydC1cdTAwM2VicjtcbjIwNjc6XHRcdHN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAgKnBnO1xuMjA2ODpcdFxuMjA2OTpcdFx0LyogVGFrZSBjYXJlIG9mIHRoZSByZW1haW5pbmcgZ3JvdXBzLCBvbmx5IHBlcm0gb25lcyBzaG91bGQgYmUgbGVmdC5cbjIwNzA6XHRcdCAqIERlbGV0aW5nIG9uZSBjYW4gZGVsZXRlIG90aGVycyBvbiB0aGlzIHNhbWUgcG9ydC1cdTAwM2VtZ2xpc3QsIHNvXG4yMDcxOlx0XHQgKiBhbHdheXMgcmVzdGFydCBmcm9tIHRoZSBoZWFkLlxuMjA3MjpcdFx0ICovXG4yMDczOlx0XHRzcGluX2xvY2tfYmgoXHUwMDI2YnItXHUwMDNlbXVsdGljYXN0X2xvY2spO1xuMjA3NDpcdFx0d2hpbGUgKCFobGlzdF9lbXB0eShcdTAwMjZwb3J0LVx1MDAzZW1nbGlzdCkpIHtcbjIwNzU6XHRcdFx0cGcgPSBobGlzdF9lbnRyeShwb3J0LVx1MDAzZW1nbGlzdC5maXJzdCxcbjIwNzY6XHRcdFx0XHRcdCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwLCBtZ2xpc3QpO1xuMjA3NzpcdFx0XHRicl9tdWx0aWNhc3RfZmluZF9kZWxfcGcoYnIsIHBnKTtcbjIwNzg6XHRcdH1cbjIwNzk6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmJyLVx1MDAzZW11bHRpY2FzdF9sb2NrKTtcbjIwODA6XHRcdGZsdXNoX3dvcmsoXHUwMDI2YnItXHUwMDNlbWNhc3RfZ2Nfd29yayk7XG4yMDgxOlx0XHRicl9tdWx0aWNhc3RfcG9ydF9jdHhfZGVpbml0KFx1MDAyNnBvcnQtXHUwMDNlbXVsdGljYXN0X2N0eCk7XG4yMDgyOlx0XHRmcmVlX3BlcmNwdShwb3J0LVx1MDAzZW1jYXN0X3N0YXRzKTtcbjIwODM6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMDI1CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNDA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlZmluaW5nIHRoZSBTY29wZSBmb3IgVGhpcyBNdWx0aWNhc3QgSW52ZXN0aWdhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHN0YXJ0aW5nIHdpdGggYGJyX211bHRpY2FzdF9kZWxfcG9ydGAgYXMgbXkgbWFpbiBwb2ludCBvZiBlbnRyeSwgdGhhdCBzZWVtcyBsaWtlIGEgZ29vZCBwbGFjZSB0byBiZWdpbiBkaXNzZWN0aW5nIHRoaXMuIE15IGluaXRpYWwgRm9jdXNTeW1ib2xzIGFyZTogYGJyX211bHRpY2FzdF9kZWxfcG9ydGAsIGBicl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0YCwgYGJyX211bHRpY2FzdF90b2dnbGVgLCBgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nYCwgYW5kIGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYC4gSG9sZCBvbiwgSSBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gIGlzIGNhbGxlZCBpbnRlcm5hbGx5IGJ5IGBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3BpbmdgIGFuZCBhbHNvIGBicl9tdWx0aWNhc3RfdG9nZ2xlX2dsb2JhbF92bGFuYCwgc28gSSBuZWVkIHRvIGluY2x1ZGUgaXQgaW4gbXkgbWVudGFsIG1vZGVsLgoKTm93LCBsZXQmIzM5O3Mgc2VlIGlmIHRoZSBwYXRjaCBpcyB0b3VjaGluZyBhbnl0aGluZyBiZXlvbmQgdGhlIG9idmlvdXMuIEkmIzM5O20gY2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBmdW5jdGlvbnMgdGhhdCBpbnRlcmFjdCB3aXRoIGBicl9tdWx0aWNhc3RfZmluZF9kZWxfcGdgIG9yIG1vZGlmeSBgbWdsaXN0YC4gRnJvbSB3aGF0IEkgY2FuIHRlbGwgdGhlIHBhdGNoIHJlYWxseSBvbmx5IGludGVyYWN0cyB3aXRoIGBicl9tdWx0aWNhc3RfZGVsX3BvcnRgIGFuZCBgX19icl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0X2N0eGAuIFNvIHRoZSBjdXJyZW50IHNldCBvZiBGb2N1c1N5bWJvbHMgc2hvdWxkIGJlIGFkZXF1YXRlLgoKV2FpdCwgSSBzaG91bGQgZG91YmxlIGNoZWNrIHRoYXQgYGJyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRgIGlzIHRoZSAqb25seSogY2FsbGVyIG9mIGBicl9tdWx0aWNhc3RfdG9nZ2xlX3BvcnRgLiBObywgYGJyX211bHRpY2FzdF9lbmFibGVfcG9ydGAgYWxzbyBjYWxscyBgYnJfbXVsdGljYXN0X3RvZ2dsZV9wb3J0YC4gT2theSwgcmlnaHQsIEkgbmVlZCB0byBpbmNsdWRlIHRoYXQgb25lIHRvby4gU28gbXkgZmluYWwsIHJldmlzZWQgRm9jdXNTeW1ib2xzIGFyZTogYGJyX211bHRpY2FzdF9kZWxfcG9ydGAsIGBicl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0YCwgYGJyX211bHRpY2FzdF9lbmFibGVfcG9ydGAsIGBicl9tdWx0aWNhc3RfdG9nZ2xlYCwgYGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZ2AsIGFuZCBgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbmAuIE5vdyBJJiMzOTtsbCBqdXN0IGNvbmZpcm0gaWYgYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gIGlzIHN0YXRpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00MjkyPXZvaWQgYnJfbXVsdGljYXN0X3VwZGF0ZV92bGFuX21jYXN0X2N0eChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LCB1OCBzdGF0ZSlcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzMTctXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQzMTg6dm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzMTkte1xuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTEwNjk9dm9pZCBicl9tdWx0aWNhc3RfdXBkYXRlX3ZsYW5fbWNhc3RfY3R4KHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYsIHU4IHN0YXRlKTtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjEwNzA6dm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pO1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTA3MS1pbnQgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgYm9vbCBvbixcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xNTQ2PXN0YXRpYyBpbmxpbmUgdm9pZCBicl9tdWx0aWNhc3RfdXBkYXRlX3ZsYW5fbWNhc3RfY3R4KHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYsXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTU1MC1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE1NTE6c3RhdGljIGlubGluZSB2b2lkIGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbixcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE1NTItXHRcdFx0XHRcdFx0Ym9vbCBvbilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMzMDYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBleHByZXNzZWQgYXMgdGhvdWdoIHRoZXNlIHdlcmUgbXkgb3duIHRob3VnaHRzOgoKKipBbmFseXppbmcgdGhlIFZhcmlhYmxlJiMzOTtzIE11dGFiaWxpdHkqKgoKUmlnaHQsIHNvIHRoZSBjb250ZXh0IGluZGljYXRlcyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHNvbWV0aGluZyB0aGF0IGlzbiYjMzk7dCBzdGF0aWMuIEdvb2QsIHRoYXTigJlzIGEgY2xlYXIgc3RhcnRpbmcgcG9pbnQuIE5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHBpbnBvaW50IGEgc3BlY2lmaWMgdmFyaWFibGUgdGhhdCYjMzk7cyBwb3RlbnRpYWxseSAqbm90KiBzdGF0aWMsIG5hbWVseSBgYnJfbXVsdGljYXN0X3RvZ2dsZV9nbG9iYWxfdmxhbmAuIFRoZSBhaW0gaXMgdG8gY29uZmlybSB3aGV0aGVyIG15IGluaXRpYWwgdW5kZXJzdGFuZGluZyBvZiBpdHMgbXV0YWJpbGl0eSBob2xkcyB0cnVlLiBUaGlzIGlzIHdoZXJlIEkmIzM5O2xsIGRpZyBkZWVwZXIuIEkgbmVlZCB0byBrbm93IGZvciBzdXJlIGlmIGl04oCZcyBzdWJqZWN0IHRvIGNoYW5nZS4gQSBxdWljayBjaGVjayBvZiBpdHMgZGVjbGFyYXRpb24gYW5kIHVzYWdlIHNob3VsZCBjb25maXJtIHRoYXQuIEl04oCZcyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgYW5kIGxpZmV0aW1lIG9mIHRoaXMgdmFyaWFibGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Jvb2wgYnJfbXVsdGljYXN0X3RvZ2dsZV9nbG9iYWxfdmxhbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9NDM4Mz1pbnQgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgYm9vbCBvbixcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MjEtXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQ0MjI6Ym9vbCBicl9tdWx0aWNhc3RfdG9nZ2xlX2dsb2JhbF92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MjMte1xuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTEwNzE9aW50IGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIGJvb2wgb24sXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xMDcyLVx0XHRcdFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjEwNzM6Ym9vbCBicl9tdWx0aWNhc3RfdG9nZ2xlX2dsb2JhbF92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pO1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTA3NC1cbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xNTU2PXN0YXRpYyBpbmxpbmUgaW50IGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTU2Mi1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE1NjM6c3RhdGljIGlubGluZSBib29sIGJyX211bHRpY2FzdF90b2dnbGVfZ2xvYmFsX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbixcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE1NjQtXHRcdFx0XHRcdFx0ICAgYm9vbCBvbilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM5MTcKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIFZhcmlhYmxlJiMzOTtzIE11dGFiaWxpdHkqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggc29tZXRoaW5nIHBvdGVudGlhbGx5IGR5bmFtaWMgaGVyZS4gTGV0JiMzOTtzIGRpZyBkZWVwZXIgYW5kIHZlcmlmeSB3aGV0aGVyIGBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3BpbmdgIGlzLCBpbiBmYWN0LCBzdGF0aWMuIFRoaXMgaXMgdGhlIGNyaXRpY2FsIHBpZWNlIG9mIGluZm9ybWF0aW9uLiBUaGUgcG90ZW50aWFsIGZvciB0aGUgdmFyaWFibGUgdG8gY2hhbmdlIGR5bmFtaWNhbGx5IGluZmx1ZW5jZXMgaG93IHRoZSBjb2RlIHdpbGwgYmVoYXZlLCBlc3BlY2lhbGx5IHdoZXJlIHRoaXMgdmFyaWFibGUgaXMgdXNlZC4gV2UgbmVlZCB0byBhc2NlcnRhaW4gdGhlIG11dGFiaWxpdHkgdG8gYXNzZXNzIGFueSBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzIG9yIHJhY2UgY29uZGl0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW50IGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9NDM2Mz1zdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbilcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzODItXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQzODM6aW50IGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIGJvb2wgb24sXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzODQtXHRcdFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTA3MD12b2lkIGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbik7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxMDcxOmludCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3Bpbmcoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBib29sIG9uLFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTA3Mi1cdFx0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTU1MT1zdGF0aWMgaW5saW5lIHZvaWQgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLFxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE1NTUtXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxNTU2OnN0YXRpYyBpbmxpbmUgaW50IGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNTU3LVx0XHRcdFx0XHRcdCAgICBib29sIG9uLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDQ5MAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipBc3Nlc3NpbmcgdGhlIER5bmFtaWMgTmF0dXJlIG9mIHRoZSBTaXR1YXRpb24qKgoKQWxyaWdodCwgdGhlIGluaXRpYWwgYXNzZXNzbWVudCBpcyBpbjogdGhlIHNpdHVhdGlvbiBpcyBkZWZpbml0aXZlbHkgKm5vdCogc3RhdGljLiBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIHNvbWV0aGluZyB0aGF0IGNoYW5nZXMsIHRoYXQgaGFzIGEgZHluYW1pYyBlbGVtZW50LiBOb3csIGdpdmVuIHRoYXQgdGhpcyBpcyB0aGUgY2FzZSwgdGhlIGNydWNpYWwgbmV4dCBzdGVwIGlzIHRvIG5haWwgZG93biB0aGUgc3BlY2lmaWNzIG9mIHRoaXMgZHluYW1pc20uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIHRoZSBuYXR1cmUgb2YgYGJyX211bHRpY2FzdF90b2dnbGVgLiBJcyB0aGF0IHZhcmlhYmxlIG9yIGZ1bmN0aW9uIHN0YXRpYz8gSXRzIHNjb3BlIGFuZCBiZWhhdmlvdXIgYXJlIG9idmlvdXNseSBjZW50cmFsIHRvIHRoZSBwcm9ibGVtLiBUaGUgcXVlc3Rpb24gb2Ygd2hldGhlciBpdCYjMzk7cyBzdGF0aWMgd2lsbCBndWlkZSBteSBmdXJ0aGVyIGludmVzdGlnYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCBicl9tdWx0aWNhc3RfdG9nZ2xlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00MzYzPXN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF90b2dnbGVfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCBib29sIG9uKVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDM4Mi1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDM4MzppbnQgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgYm9vbCBvbixcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDM4NC1cdFx0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQ2NzE9c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X2Rpc2FibGVfYWxsX3BvcnRzKHN0cnVjdCBuZXRfYnJpZGdlICpicilcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ2ODEtXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQ2ODI6aW50IGJyX211bHRpY2FzdF90b2dnbGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1bnNpZ25lZCBsb25nIHZhbCxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDY4My1cdFx0XHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9OTkyPWludCBicl9tdWx0aWNhc3Rfc2V0X3ZsYW5fcm91dGVyKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYsIHU4IG1jYXN0X3JvdXRlcik7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDo5OTM6aW50IGJyX211bHRpY2FzdF90b2dnbGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1bnNpZ25lZCBsb25nIHZhbCxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTk5NC1cdFx0XHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTEwNzA9dm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pO1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTA3MTppbnQgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgYm9vbCBvbixcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTEwNzItXHRcdFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTE1NTE9c3RhdGljIGlubGluZSB2b2lkIGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbixcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNTU1LVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTU1NjpzdGF0aWMgaW5saW5lIGludCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3Bpbmcoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTU1Ny1cdFx0XHRcdFx0XHQgICAgYm9vbCBvbixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUyOTgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6CgoqKkFzc2Vzc2luZyB0aGUgU3RhdGljIE5hdHVyZSBvZiBhIEZ1bmN0aW9uKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHNvbWV0aGluZyB0aGF0ICppc24mIzM5O3QqIHN0YXRpYy4gR29vZCB0byBjb25maXJtIHRoYXQgdXBmcm9udDsgaXQgaGVscHMgYXZvaWQganVtcGluZyB0byBjb25jbHVzaW9ucyBsYXRlci4gTm93LCBsZXQmIzM5O3MgemVybyBpbiBvbiBhIHNwZWNpZmljIGZ1bmN0aW9uOiBgYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydGAuIFRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzLCBpcyAqdGhpcyogcGFydGljdWxhciBmdW5jdGlvbiBkZWNsYXJlZCBhcyBzdGF0aWM/IEtub3dpbmcgaXRzIHNjb3BlIOKAkyB3aGV0aGVyIGl0JiMzOTtzIGxvY2FsIHRvIGEgY29tcGlsYXRpb24gdW5pdCBvciBnbG9iYWxseSBhY2Nlc3NpYmxlIOKAkyBpcyBmdW5kYW1lbnRhbCB0byB1bmRlcnN0YW5kaW5nIGl0cyBiZWhhdmlvciBhbmQgcG90ZW50aWFsIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0uIENoZWNraW5nIGl0cyBzdGF0aWMtbmVzcyByaWdodCBub3cgd2lsbCBzYXZlIGEgbG90IG9mIGRlYnVnZ2luZyB0aW1lIGRvd24gdGhlIHJvYWQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZvaWQgYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MjEyOD1zdGF0aWMgdm9pZCBfX2JyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRfY3R4KHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0X3BvcnQgKnBtY3R4KVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjE2Mi1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MjE2MzpzdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0X2N0eChzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdF9wb3J0ICpwbWN0eClcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjE2NC17XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0yMjE2PXZvaWQgYnJfbXVsdGljYXN0X2VuYWJsZV9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMjIwLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoyMjIxOnZvaWQgYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0KVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMjIyLXtcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD05Nzg9dm9pZCBicl9tdWx0aWNhc3RfZW5hYmxlX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCk7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDo5Nzk6dm9pZCBicl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpO1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtOTgwLXZvaWQgYnJfbXVsdGljYXN0X2luaXQoc3RydWN0IG5ldF9icmlkZ2UgKmJyKTtcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xNDEzPXN0YXRpYyBpbmxpbmUgdm9pZCBicl9tdWx0aWNhc3RfZW5hYmxlX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydClcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNDE2LVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTQxNzpzdGF0aWMgaW5saW5lIHZvaWQgYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0KVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTQxOC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1OTY3CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJcyBJdCBTdGF0aWMsIFJlYWxseT8gQSBRdWljayBWZXJpZmljYXRpb24qKgoKUmlnaHQsIHNvIHRoZSBzeXN0ZW0gaXMgZGVmaW5pdGVseSBiZWhhdmluZyBkeW5hbWljYWxseS4gTm8gc3VycHJpc2VzIHRoZXJlLiBCdXQgSSYjMzk7bSBmZWVsaW5nIGEgbmlnZ2xpbmcgY29uY2VybiBhYm91dCBhIHNwZWNpZmljIHZhcmlhYmxlIHdpdGhpbiB0aGF0IGR5bmFtaWMgc2V0dXAuIExldCYjMzk7cyBub3QgbWFrZSBhc3N1bXB0aW9ucy4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiDigJMgYSBxdWljayBtZW50YWwgY2hlY2suIFRoZSBjb3JlIG9mIG15IGNvbmNlcm4/IEkmIzM5O20gd29uZGVyaW5nIGlmIGBicl9tdWx0aWNhc3RfZW5hYmxlX3BvcnRgIGlzLCBieSBzb21lIGNoYW5jZSwgaW5jb3JyZWN0bHkgZGVmaW5lZCBhcyBhIHN0YXRpYyB2YXJpYWJsZS4gVGhhdCB3b3VsZCB0aHJvdyBhIHdyZW5jaCBpbnRvIHRoZSB3aG9sZSBwcm9jZXNzISBCZXR0ZXIgdG8gdmVyaWZ5LCBiZWNhdXNlIEkgd291bGQgZXhwZWN0IGl0IHRvIGJlIG5vbi1zdGF0aWMgZ2l2ZW4gdGhlIGJlaGF2aW9yIEkmIzM5O20gc2VlaW5nLCBidXQgeW91IGNhbiBuZXZlciBiZSB0b28gc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm9pZCBicl9tdWx0aWNhc3RfZW5hYmxlX3BvcnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYnJpZGdlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTIwOTQ9c3RhdGljIHZvaWQgX19icl9tdWx0aWNhc3RfZW5hYmxlX3BvcnRfY3R4KHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0X3BvcnQgKnBtY3R4KVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjExMy1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MjExNDpzdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfZW5hYmxlX3BvcnRfY3R4KHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0X3BvcnQgKnBtY3R4KVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMTE1LXtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTIxNzg9c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X3RvZ2dsZV9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsIGJvb2wgb24pXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMjE1LVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoyMjE2OnZvaWQgYnJfbXVsdGljYXN0X2VuYWJsZV9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIyMTcte1xuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTk3Nz12b2lkIGJyX211bHRpY2FzdF9kZWxfcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0KTtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjk3ODp2b2lkIGJyX211bHRpY2FzdF9lbmFibGVfcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0KTtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTk3OS12b2lkIGJyX211bHRpY2FzdF9kaXNhYmxlX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCk7XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTQwOT1zdGF0aWMgaW5saW5lIHZvaWQgYnJfbXVsdGljYXN0X2RlbF9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTQxMi1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE0MTM6c3RhdGljIGlubGluZSB2b2lkIGJyX211bHRpY2FzdF9lbmFibGVfcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0KVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTQxNC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2NjUyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGNyYWZ0ZWQgd2l0aCB0aGUgZXhwZWN0YXRpb24gdGhhdCBJJiMzOTttIGRpc2N1c3NpbmcgdGhpcyB3aXRoIGEgZmVsbG93IGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyB0aGUgU3RhdGljIE5hdHVyZSBvZiBgYnJfbXVsdGljYXN0X2RlbF9wb3J0YCoqCgpBbHJpZ2h0LCBJIHNlZSBpdCYjMzk7cyBkZWFsaW5nIHdpdGggc29tZXRoaW5nIGluaGVyZW50bHkgZHluYW1pYy4gTGV0JiMzOTtzIG1ha2UgYWJzb2x1dGVseSBzdXJlIGFib3V0IHRoaXM7IEkgd2FudCB0byBjb25maXJtIHdoZXRoZXIgYGJyX211bHRpY2FzdF9kZWxfcG9ydGAgaGFzIGEgc3RhdGljIGRlY2xhcmF0aW9uLiBXZSBuZWVkIHRvIGtub3cgaWYgaXQmIzM5O3Mgc3RhdGljIG9yIGlmIHdlIG5lZWQgdG8gYWNjb3VudCBmb3IgcG9zc2libGUgbW9kaWZpY2F0aW9ucy4gVGhpcyBoYXMgaW1wbGljYXRpb25zIGZvciBob3cgd2UgaW50ZXJhY3Qgd2l0aCBpdCBkb3duIHRoZSBsaW5lLiBXZSBuZWVkIHRvIGNvbnNpZGVyIGhvdyB0aGlzIGZ1bmN0aW9uJiMzOTtzIGNoYXJhY3RlcmlzdGljcyBtaWdodCBpbmZsdWVuY2Ugb3VyIGltcGxlbWVudGF0aW9uLiBTbywgbGV04oCZcyBnZXQgYSBkZWZpbml0aXZlIGFuc3dlciBvbiB0aGF0IHN0YXRpYyBrZXl3b3JkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2b2lkIGJyX211bHRpY2FzdF9kZWxfcG9ydCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MTM5OD1zdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwICpicl9tdWx0aWNhc3RfbmV3X3BvcnRfZ3JvdXAoXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0xNDU2LVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoxNDU3OnZvaWQgYnJfbXVsdGljYXN0X2RlbF9wb3J0X2dyb3VwKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAgKnApXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTE0NTgte1xuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MjA0Mz1pbnQgYnJfbXVsdGljYXN0X2FkZF9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMDYzLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoyMDY0OnZvaWQgYnJfbXVsdGljYXN0X2RlbF9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIwNjUte1xuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTk3Nj1pbnQgYnJfbXVsdGljYXN0X2FkZF9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpO1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6OTc3OnZvaWQgYnJfbXVsdGljYXN0X2RlbF9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpO1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtOTc4LXZvaWQgYnJfbXVsdGljYXN0X2VuYWJsZV9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpO1xuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTEwMDc9YnJfbXVsdGljYXN0X25ld19wb3J0X2dyb3VwKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTAxMi1cdFx0XHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjEwMTM6dm9pZCBicl9tdWx0aWNhc3RfZGVsX3BvcnRfZ3JvdXAoc3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cCAqcCk7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xMDE0LWludCBicl9tZGJfaGFzaF9pbml0KHN0cnVjdCBuZXRfYnJpZGdlICpicik7XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTQwND1zdGF0aWMgaW5saW5lIGludCBicl9tdWx0aWNhc3RfYWRkX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydClcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNDA4LVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTQwOTpzdGF0aWMgaW5saW5lIHZvaWQgYnJfbXVsdGljYXN0X2RlbF9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNDEwLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc0NTEKCQkJCQkJCW91dHB1dDogMjMzCgkJCQkJCQl0aG91Z2h0czogMjUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFByb3Bvc2VkIENvZGUgQ2hhbmdlKioKCk9rYXksIHNvIEkgc2VlIHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBzb21ldGhpbmcgaW4gdGhlIGJyaWRnZSBtdWx0aWNhc3QgcG9ydCBkZWxldGlvbiBhbmQgZGlzYWJsaW5nIHJvdXRpbmVzLiBJdCYjMzk7cyBkZWZpbml0ZWx5IG5vbi1zdGF0aWM7IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggZHluYW1pYyBkYXRhIHN0cnVjdHVyZXMgaGVyZS4gVGhlIGNvcmUgb2YgdGhlIHByb2JsZW0gc2VlbXMgdG8gYmUgYW4gaW1wcm9wZXIgdXNlIG9mIGBobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlYCBpbiBjb25qdW5jdGlvbiB3aXRoIGBicl9tdWx0aWNhc3RfZmluZF9kZWxfcGdgLCBsZWFkaW5nIHRvIHBvdGVudGlhbCBpc3N1ZXMgd2hlcmUgbXVsdGlwbGUgZW50cmllcyBtaWdodCBiZSByZW1vdmVkIHdpdGhpbiBhIHNpbmdsZSBsb29wIGl0ZXJhdGlvbi4gVGhpcyBjb3VsZCByZXN1bHQgaW4gbWlzc2VkIGVudHJpZXMgb3IsIHdvcnNlLCB1c2UtYWZ0ZXItZnJlZSBzaXR1YXRpb25zLiBBIGNsYXNzaWMgY29uY3VycmVuY3kgYnVnIGlmIHlvdSBkb24mIzM5O3QgaGFuZGxlIGl0IHJpZ2h0LgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIHRob3JvdWdobHkgdGVzdGVkLiBUaGUgbGlzdCBvZiByZWxldmFudCBgRm9jdXNTeW1ib2xzYCB0aGV5JiMzOTt2ZSBpZGVudGlmaWVkIOKAkyBgYnJfbXVsdGljYXN0X2RlbF9wb3J0YCwgYGJyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRgLCBldGMuIOKAkyBzZWVtcyBhcHByb3ByaWF0ZSwgYXMgZG8gdGhlIGBFbmFibGVDb25maWdzYDogYEJSSURHRWAsIGBJTkVUYCwgYEJSSURHRV9JR01QX1NOT09QSU5HYCwgYFZMQU5fODAyMVFgLCBhbmQgYEJSSURHRV9WTEFOX0ZJTFRFUklOR2AuIFRoZXNlIGNvdmVyIHRoZSBrZXkgYXJlYXMgd2hlcmUgdGhlIGlzc3VlIGlzIGxpa2VseSB0byBtYW5pZmVzdC4KCkdpdmVuIHRoYXQgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGJyaWRnZSBtdWx0aWNhc3QgbG9naWMgYW5kIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmsgYW5kIHN5c2ZzLCBpdCYjMzk7cyBhYnNvbHV0ZWx5IGNydWNpYWwgd2UgZnV6eiBpdC4gSSYjMzk7ZCBjb25zaWRlciBpdCBhIGhpZ2ggcHJpb3JpdHksIHRvIGJlIGhvbmVzdC4gVGhlIGltcGFjdCBjb3VsZCBiZSBzaWduaWZpY2FudCBpZiBtdWx0aWNhc3QgaXMgYnJva2VuIGluIHRoZSBicmlkZ2UuIExldCYjMzk7cyBtYWtlIHN1cmUgb3VyIGZ1enppbmcgYW5kIHRlc3RpbmcgaW5mcmFzdHJ1Y3R1cmUgaXMgc2V0IHVwIHRvIGFkZHJlc3MgdGhpcyBjaGFuZ2UgcHJvbXB0bHkuIEkmIzM5O2xsIG5lZWQgdG8gY2FsbCB0byBzZXQtcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JSSURHRSYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O0JSSURHRV9JR01QX1NOT09QSU5HJiMzNDssCiAgICAmIzM0O1ZMQU5fODAyMVEmIzM0OywKICAgICYjMzQ7QlJJREdFX1ZMQU5fRklMVEVSSU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnJfbXVsdGljYXN0X2RlbF9wb3J0JiMzNDssCiAgICAmIzM0O2JyX211bHRpY2FzdF9kaXNhYmxlX3BvcnQmIzM0OywKICAgICYjMzQ7YnJfbXVsdGljYXN0X2VuYWJsZV9wb3J0JiMzNDssCiAgICAmIzM0O2JyX211bHRpY2FzdF90b2dnbGUmIzM0OywKICAgICYjMzQ7YnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nJiMzNDssCiAgICAmIzM0O2JyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYnJpZGdlIG11bHRpY2FzdCBwb3J0IGRlbGV0aW9uIGFuZCBkaXNhYmxpbmcgbG9naWMgd2hlcmUgYGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVgIHdhcyB1c2VkIGluY29ycmVjdGx5LiBgYnJfbXVsdGljYXN0X2ZpbmRfZGVsX3BnYCBjYW4gZGVsZXRlIG11bHRpcGxlIGVudHJpZXMgZnJvbSB0aGUgc2FtZSBsaXN0LCBsZWFkaW5nIHRvIG1pc3NlZCBlbnRyaWVzIG9yIHVzZS1hZnRlci1mcmVlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBicmlkZ2UgbXVsdGljYXN0IGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rIGFuZCBzeXNmcywgYW5kIGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JSSURHRSYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O0JSSURHRV9JR01QX1NOT09QSU5HJiMzNDssCiAgICAmIzM0O1ZMQU5fODAyMVEmIzM0OywKICAgICYjMzQ7QlJJREdFX1ZMQU5fRklMVEVSSU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnJfbXVsdGljYXN0X2RlbF9wb3J0JiMzNDssCiAgICAmIzM0O2JyX211bHRpY2FzdF9kaXNhYmxlX3BvcnQmIzM0OywKICAgICYjMzQ7YnJfbXVsdGljYXN0X2VuYWJsZV9wb3J0JiMzNDssCiAgICAmIzM0O2JyX211bHRpY2FzdF90b2dnbGUmIzM0OywKICAgICYjMzQ7YnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nJiMzNDssCiAgICAmIzM0O2JyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYnJpZGdlIG11bHRpY2FzdCBwb3J0IGRlbGV0aW9uIGFuZCBkaXNhYmxpbmcgbG9naWMgd2hlcmUgYGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVgIHdhcyB1c2VkIGluY29ycmVjdGx5LiBgYnJfbXVsdGljYXN0X2ZpbmRfZGVsX3BnYCBjYW4gZGVsZXRlIG11bHRpcGxlIGVudHJpZXMgZnJvbSB0aGUgc2FtZSBsaXN0LCBsZWFkaW5nIHRvIG1pc3NlZCBlbnRyaWVzIG9yIHVzZS1hZnRlci1mcmVlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBicmlkZ2UgbXVsdGljYXN0IGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rIGFuZCBzeXNmcywgYW5kIGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjAwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6MDA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgbGlzdCBpdGVyYXRpb24gYnVncyBpbiBgYnJfbXVsdGljYXN0X2RlbF9wb3J0YCBhbmQgYF9fYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydF9jdHhgIHdoZXJlIGBicl9tdWx0aWNhc3RfZmluZF9kZWxfcGdgIGNvdWxkIGRlbGV0ZSB0aGUgbmV4dCBjYWNoZWQgbm9kZSBpbiBgaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZWAsIGxlYWRpbmcgdG8gcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIGxpc3QgY29ycnVwdGlvbi4gVGhlc2UgdHlwZXMgb2YgbWVtb3J5IGNvcnJ1cHRpb24gYW5kIHVzZS1hZnRlci1mcmVlIGJ1Z3MgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcywgYWxsb2NhdGlvbnMsIG9yIGRhdGEgc2VudCB0byB1c2VyIHNwYWNlIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzZjNzcyZDA5MjZiYTg2OTc0YzdkNDU4NDI4NTI2MDg5Mzg0MDk0MgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDEyIDExOjU4OjUxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYyBiL25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMKaW5kZXggMDBhYTliMjg3OWQ2ZS4uZTA3NzUwNTljYTBhOCAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jCkBAIC0yMDY1LDEyICYjNDM7MjA2NSwxNyBAQCB2b2lkIGJyX211bHRpY2FzdF9kZWxfcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0KQogewogCXN0cnVjdCBuZXRfYnJpZGdlICpiciA9IHBvcnQtJmd0O2JyOwogCXN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAgKnBnOwotCXN0cnVjdCBobGlzdF9ub2RlICpuOwogCi0JLyogVGFrZSBjYXJlIG9mIHRoZSByZW1haW5pbmcgZ3JvdXBzLCBvbmx5IHBlcm0gb25lcyBzaG91bGQgYmUgbGVmdCAqLwomIzQzOwkvKiBUYWtlIGNhcmUgb2YgdGhlIHJlbWFpbmluZyBncm91cHMsIG9ubHkgcGVybSBvbmVzIHNob3VsZCBiZSBsZWZ0LgomIzQzOwkgKiBEZWxldGluZyBvbmUgY2FuIGRlbGV0ZSBvdGhlcnMgb24gdGhpcyBzYW1lIHBvcnQtJmd0O21nbGlzdCwgc28KJiM0MzsJICogYWx3YXlzIHJlc3RhcnQgZnJvbSB0aGUgaGVhZC4KJiM0MzsJICovCiAJc3Bpbl9sb2NrX2JoKCZhbXA7YnItJmd0O211bHRpY2FzdF9sb2NrKTsKLQlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBnLCBuLCAmYW1wO3BvcnQtJmd0O21nbGlzdCwgbWdsaXN0KQomIzQzOwl3aGlsZSAoIWhsaXN0X2VtcHR5KCZhbXA7cG9ydC0mZ3Q7bWdsaXN0KSkgewomIzQzOwkJcGcgPSBobGlzdF9lbnRyeShwb3J0LSZndDttZ2xpc3QuZmlyc3QsCiYjNDM7CQkJCSBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwLCBtZ2xpc3QpOwogCQlicl9tdWx0aWNhc3RfZmluZF9kZWxfcGcoYnIsIHBnKTsKJiM0MzsJfQogCXNwaW5fdW5sb2NrX2JoKCZhbXA7YnItJmd0O211bHRpY2FzdF9sb2NrKTsKIAlmbHVzaF93b3JrKCZhbXA7YnItJmd0O21jYXN0X2djX3dvcmspOwogCWJyX211bHRpY2FzdF9wb3J0X2N0eF9kZWluaXQoJmFtcDtwb3J0LSZndDttdWx0aWNhc3RfY3R4KTsKQEAgLTIxMjYsMTEgJiM0MzsyMTMxLDIzIEBAIHN0YXRpYyB2b2lkIF9fYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydF9jdHgoc3RydWN0IG5ldF9icmlkZ2VfbWNhc3RfcG9ydCAqcG1jdHgpCiAJc3RydWN0IGhsaXN0X25vZGUgKm47CiAJYm9vbCBkZWwgPSBmYWxzZTsKIAotCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocGcsIG4sICZhbXA7cG1jdHgtJmd0O3BvcnQtJmd0O21nbGlzdCwgbWdsaXN0KQotCQlpZiAoIShwZy0mZ3Q7ZmxhZ3MgJmFtcDsgTURCX1BHX0ZMQUdTX1BFUk1BTkVOVCkgJmFtcDsmYW1wOwotCQkgICAgKCFicl9tdWx0aWNhc3RfcG9ydF9jdHhfaXNfdmxhbihwbWN0eCkgfHwKLQkJICAgICBwZy0mZ3Q7a2V5LmFkZHIudmlkID09IHBtY3R4LSZndDt2bGFuLSZndDt2aWQpKQotCQkJYnJfbXVsdGljYXN0X2ZpbmRfZGVsX3BnKHBtY3R4LSZndDtwb3J0LSZndDticiwgcGcpOwomIzQzOwkvKiBicl9tdWx0aWNhc3RfZmluZF9kZWxfcGcoKSBjYW4gZGVsZXRlIGZ1cnRoZXIgZW50cmllcyBvZiB0aGlzIHNhbWUKJiM0MzsJICogcG9ydC0mZ3Q7bWdsaXN0LCBzbyB0aGUgbm9kZSBsYXRjaGVkIGluIEBuIG1heSBiZSB1bmxpbmtlZCBieSB0aGUgbG9vcAomIzQzOwkgKiBib2R5LiBQb3J0IGdyb3VwcyBhcmUgb25seSBmcmVlZCBieSB0aGUgR0Mgd29yayB1bmRlciBtdWx0aWNhc3RfbG9jaywKJiM0MzsJICogc28gQG4gaXMgc3RpbGwgdmFsaWQgaGVyZTsgaWYgaXQgbGVmdCB0aGUgbGlzdCwgcmVzdGFydC4KJiM0MzsJICovCiYjNDM7cmVzdGFydDoKJiM0MzsJaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwZywgbiwgJmFtcDtwbWN0eC0mZ3Q7cG9ydC0mZ3Q7bWdsaXN0LCBtZ2xpc3QpIHsKJiM0MzsJCWlmICgocGctJmd0O2ZsYWdzICZhbXA7IE1EQl9QR19GTEFHU19QRVJNQU5FTlQpIHx8CiYjNDM7CQkgICAgKGJyX211bHRpY2FzdF9wb3J0X2N0eF9pc192bGFuKHBtY3R4KSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIHBnLSZndDtrZXkuYWRkci52aWQgIT0gcG1jdHgtJmd0O3ZsYW4tJmd0O3ZpZCkpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlicl9tdWx0aWNhc3RfZmluZF9kZWxfcGcocG1jdHgtJmd0O3BvcnQtJmd0O2JyLCBwZyk7CiYjNDM7CiYjNDM7CQlpZiAobiAmYW1wOyZhbXA7IGhsaXN0X3VuaGFzaGVkKG4pKQomIzQzOwkJCWdvdG8gcmVzdGFydDsKJiM0MzsJfQogCiAJZGVsIHw9IGJyX2lwNF9tdWx0aWNhc3RfcnBvcnRfZGVsKHBtY3R4KTsKIAl0aW1lcl9kZWxldGUoJmFtcDtwbWN0eC0mZ3Q7aXA0X21jX3JvdXRlcl90aW1lcik7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjU5CgkJCQkJCQlvdXRwdXQ6IDE1NwoJCQkJCQkJdGhvdWdodHM6IDcwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE11bHRpY2FzdCBCcmlkZ2UgUG9ydCBHcm91cCBEZWxldGlvbiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyB0aGUgbXVsdGljYXN0IGdyb3VwIGRlbGV0aW9uIGxvZ2ljIGluIHRoZSBicmlkZ2UgY29kZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgYnJfbXVsdGljYXN0X2RlbF9wb3J0YCBhbmQgYF9fYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydF9jdHhgIGluIGBuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jYC4gTXkgaW5pdGlhbCBzY2FuIHRlbGxzIG1lIHRoZXkmIzM5O3JlIG1vZGlmeWluZyBob3cgYHBvcnQtJmd0O21nbGlzdGAgaXMgdHJhdmVyc2VkIHdoZW4gZGVsZXRpbmcgcG9ydCBncm91cHMuIFRoZSBvbGQgbWV0aG9kIHVzZXMgYGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVgIHdoaWNoIGNhY2hlcyB0aGUgKm5leHQqIG5vZGUgaW4gdGhlIGxpc3QuIFRoZSBpc3N1ZSBpcyB0aGF0IHRoZSBmdW5jdGlvbiBgYnJfbXVsdGljYXN0X2ZpbmRfZGVsX3BnYCBjYW4gYWN0dWFsbHkgcmVtb3ZlICptdWx0aXBsZSogZW50cmllcyBmcm9tIGBwb3J0LSZndDttZ2xpc3RgIGF0IG9uY2UuCgpJbiB0aGUgZmlyc3QgY2FzZSAoYGJyX211bHRpY2FzdF9kZWxfcG9ydGApLCB0aGV5JiMzOTt2ZSByZXBsYWNlZCB0aGUgc2FmZSBpdGVyYXRvciB3aXRoIGEgYHdoaWxlYCBsb29wIHRoYXQgaXRlcmF0ZXMgdW50aWwgdGhlIGxpc3QgaXMgZW1wdHksIHBpY2tpbmcgdGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlIGxpc3QgYXQgZWFjaCBpdGVyYXRpb24uIFRoaXMgc2hvdWxkIHNvbHZlIHRoZSBwcm9ibGVtIGJlY2F1c2UgaWYgc29tZXRoaW5nIGlzIGRlbGV0ZWQsIHRoZSBuZXh0IGl0ZXJhdGlvbiBwaWNrcyBhIG5ldyBmaXJzdCBlbGVtZW50LCBhbmQgbm90IHRoZSBwcmV2aW91c2x5IGNhY2hlZCBuZXh0IGVsZW1lbnQgdGhhdCBjb3VsZCBoYXZlIGJlZW4gZGVsZXRlZC4KCkluIHRoZSBzZWNvbmQgY2FzZSAoYF9fYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydF9jdHhgKSwgdGhleSYjMzk7dmUgY2hhbmdlZCB0aGUgZXhpc3Rpbmcgc2FmZSBpdGVyYXRpb24gbG9vcCB3aXRoIHRoZSBhZGRpdGlvbiBvZiBhIGByZXN0YXJ0OmAgYW5kIGEgYGdvdG8gcmVzdGFydDtgLiBUaGlzIGFsc28gc29sdmVzIHRoZSBwcm9ibGVtLCBidXQgaW4gYSBkaWZmZXJlbnQgd2F5LiBJZiBhbiBlbGVtZW50IGdldHMgZGVsZXRlZCBkdXJpbmcgdGhlIGZpcnN0IGl0ZXJhdGlvbiBvZiB0aGUgc2FmZSBsb29wLCB0aGVuIHRoZSBuZXh0IG5vZGUgYG5gIGlzIHVuaGFzaGVkLCBhbmQgaW4gdGhpcyBjYXNlLCB0aGUgaXRlcmF0aW9uICpyZXN0YXJ0cyogdGhlIGxvb3AgZnJvbSB0aGUgYmVnaW5uaW5nLiBJdCBhbHNvIHNpbXBsaWZpZXMgdGhlIGNvbmRpdGlvbmFsIHRoYXQgY2hlY2tzIGZvciBwZXJtYW5lbnQgZmxhZ3MsIGFuZCB0aGUgVkxBTiBJRCBjaGVjay4KClRoZSBjb3JlIG9mIHRoZSBwcm9ibGVtIGhlcmUgaXMgYSBjbGFzc2ljIGxpc3QgaXRlcmF0aW9uIGJ1Zy4gQnkgZGVsZXRpbmcgZW50cmllcyAqZHVyaW5nKiBpdGVyYXRpb24gd2l0aCB0aGUgb2xkIG1ldGhvZCwgd2UgY2FuIGVuZCB1cCB3aXRoIGEgdXNlLWFmdGVyLWZyZWUsIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCBvciBzaW1wbHkgbWlzcyBkZWxldGlvbnMuIFRoZSBzYWZlIG1hY3JvIHdpbGwgY2FjaGUgdGhlIG5leHQgbm9kZSwgYnV0IGlmIHRoZSBjdXJyZW50IG5vZGUgYWxzbyBnZXRzIGRlbGV0ZWQsIHRoZSBjYWNoZWQgbmV4dCBub2RlIGlzIG5vIGxvbmdlciB2YWxpZC4gVGhlIG5ldyBhcHByb2FjaCBpcyBkZXNpZ25lZCB0byBwcmV2ZW50IHRoaXMgcmFjZSBjb25kaXRpb24uCgpOb3csIGFzIGFuIGV4cGVydCwgSSBuZWVkIHRvIGNvbnNpZGVyIHNlY3VyaXR5IGltcGxpY2F0aW9ucy4gQmFzZWQgb24gdGhpcyBhbmFseXNpcywgSSYjMzk7bSBjb25maWRlbnQgdGhpcyBpcyAqbm90KiByZWxhdGVkIHRvIEtNU0FOOyB0aGUgY29kZSBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIG9yIGZpZWxkcywgbm9yIGRvZXMgaXQgaGF2ZSBhbnkgYGNvcHlfdG9fdXNlcmAgb3IgYW55IG9mIHRoZSBvdGhlciBjb21tb24gS01TQU4gdHJpZ2dlcnMuIEtBU0FOIGlzIHRoZSByZWxldmFudCB0b29sIGhlcmUgdG8gY2F0Y2ggbGlzdCBjb3JydXB0aW9uIG9yIFVBRiwgYW5kIGl0IGlzIGxpa2VseSBlbmFibGVkIG9uIHRoZSBzeXN0ZW0uIFRoZXJlIGRvZXNuJiMzOTt0IGFwcGVhciB0byBiZSBhbnkgbWVtb3J5IHRoYXQmIzM5O3Mgbm90IGluaXRpYWxpemVkLCBzbyBJIGNhbiBzYWZlbHkgbWFyayBgTmVlZHNLTVNBTj1mYWxzZWAuIEl0IGxvb2tzIGxpa2UgdGhpcyBwYXRjaCBpcyBwdXJlbHkgZm9jdXNlZCBvbiBmaXhpbmcgYSBjb25jdXJyZW5jeS9pdGVyYXRpb24gYnVnLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBsaXN0IGl0ZXJhdGlvbiBidWdzIGluIGBicl9tdWx0aWNhc3RfZGVsX3BvcnRgIGFuZCBgX19icl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0X2N0eGAgd2hlcmUgYGJyX211bHRpY2FzdF9maW5kX2RlbF9wZ2AgY291bGQgZGVsZXRlIHRoZSBuZXh0IGNhY2hlZCBub2RlIGluIGBobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlYCwgbGVhZGluZyB0byBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgbGlzdCBjb3JydXB0aW9uLiBUaGVzZSB0eXBlcyBvZiBtZW1vcnkgY29ycnVwdGlvbiBhbmQgdXNlLWFmdGVyLWZyZWUgYnVncyBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzLCBhbGxvY2F0aW9ucywgb3IgZGF0YSBzZW50IHRvIHVzZXIgc3BhY2UgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnksIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgbGlzdCBpdGVyYXRpb24gYnVncyBpbiBgYnJfbXVsdGljYXN0X2RlbF9wb3J0YCBhbmQgYF9fYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydF9jdHhgIHdoZXJlIGBicl9tdWx0aWNhc3RfZmluZF9kZWxfcGdgIGNvdWxkIGRlbGV0ZSB0aGUgbmV4dCBjYWNoZWQgbm9kZSBpbiBgaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZWAsIGxlYWRpbmcgdG8gcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIGxpc3QgY29ycnVwdGlvbi4gVGhlc2UgdHlwZXMgb2YgbWVtb3J5IGNvcnJ1cHRpb24gYW5kIHVzZS1hZnRlci1mcmVlIGJ1Z3MgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcywgYWxsb2NhdGlvbnMsIG9yIGRhdGEgc2VudCB0byB1c2VyIHNwYWNlIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTE6NTg6NTIuNjQ5NDc1OTA5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI3OTQ2NTAxNDA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJSSURHRVwiLFxuICAgIFwiSU5FVFwiLFxuICAgIFwiQlJJREdFX0lHTVBfU05PT1BJTkdcIixcbiAgICBcIlZMQU5fODAyMVFcIixcbiAgICBcIkJSSURHRV9WTEFOX0ZJTFRFUklOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJyX211bHRpY2FzdF9kZWxfcG9ydFwiLFxuICAgIFwiYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydFwiLFxuICAgIFwiYnJfbXVsdGljYXN0X2VuYWJsZV9wb3J0XCIsXG4gICAgXCJicl9tdWx0aWNhc3RfdG9nZ2xlXCIsXG4gICAgXCJicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3BpbmdcIixcbiAgICBcImJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5cIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGxpc3QgaXRlcmF0aW9uIGJ1Z3MgaW4gYGJyX211bHRpY2FzdF9kZWxfcG9ydGAgYW5kIGBfX2JyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRfY3R4YCB3aGVyZSBgYnJfbXVsdGljYXN0X2ZpbmRfZGVsX3BnYCBjb3VsZCBkZWxldGUgdGhlIG5leHQgY2FjaGVkIG5vZGUgaW4gYGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVgLCBsZWFkaW5nIHRvIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBvciBsaXN0IGNvcnJ1cHRpb24uIFRoZXNlIHR5cGVzIG9mIG1lbW9yeSBjb3JydXB0aW9uIGFuZCB1c2UtYWZ0ZXItZnJlZSBidWdzIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zLCBvciBkYXRhIHNlbnQgdG8gdXNlciBzcGFjZSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYnJpZGdlIG11bHRpY2FzdCBwb3J0IGRlbGV0aW9uIGFuZCBkaXNhYmxpbmcgbG9naWMgd2hlcmUgYGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVgIHdhcyB1c2VkIGluY29ycmVjdGx5LiBgYnJfbXVsdGljYXN0X2ZpbmRfZGVsX3BnYCBjYW4gZGVsZXRlIG11bHRpcGxlIGVudHJpZXMgZnJvbSB0aGUgc2FtZSBsaXN0LCBsZWFkaW5nIHRvIG1pc3NlZCBlbnRyaWVzIG9yIHVzZS1hZnRlci1mcmVlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBicmlkZ2UgbXVsdGljYXN0IGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rIGFuZCBzeXNmcywgYW5kIGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDExOjU4OjUyLjY0OTQ4MjEyOVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg4OTc5OTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYzZjNzcyZDA5MjZiYTg2OTc0YzdkNDU4NDI4NTI2MDg5Mzg0MDk0MlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEF1ZyAxMiAxMTo1ODo1MSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jIGIvbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuY1xcbmluZGV4IDAwYWE5YjI4NzlkNmUuLmUwNzc1MDU5Y2EwYTggMTAwNjQ0XFxuLS0tIGEvbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuY1xcbisrKyBiL25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmNcXG5AQCAtMjA2NSwxMiArMjA2NSwxNyBAQCB2b2lkIGJyX211bHRpY2FzdF9kZWxfcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0KVxcbiB7XFxuIFxcdHN0cnVjdCBuZXRfYnJpZGdlICpiciA9IHBvcnQtXFx1MDAzZWJyO1xcbiBcXHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwICpwZztcXG4tXFx0c3RydWN0IGhsaXN0X25vZGUgKm47XFxuIFxcbi1cXHQvKiBUYWtlIGNhcmUgb2YgdGhlIHJlbWFpbmluZyBncm91cHMsIG9ubHkgcGVybSBvbmVzIHNob3VsZCBiZSBsZWZ0ICovXFxuK1xcdC8qIFRha2UgY2FyZSBvZiB0aGUgcmVtYWluaW5nIGdyb3Vwcywgb25seSBwZXJtIG9uZXMgc2hvdWxkIGJlIGxlZnQuXFxuK1xcdCAqIERlbGV0aW5nIG9uZSBjYW4gZGVsZXRlIG90aGVycyBvbiB0aGlzIHNhbWUgcG9ydC1cXHUwMDNlbWdsaXN0LCBzb1xcbitcXHQgKiBhbHdheXMgcmVzdGFydCBmcm9tIHRoZSBoZWFkLlxcbitcXHQgKi9cXG4gXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZici1cXHUwMDNlbXVsdGljYXN0X2xvY2spO1xcbi1cXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBnLCBuLCBcXHUwMDI2cG9ydC1cXHUwMDNlbWdsaXN0LCBtZ2xpc3QpXFxuK1xcdHdoaWxlICghaGxpc3RfZW1wdHkoXFx1MDAyNnBvcnQtXFx1MDAzZW1nbGlzdCkpIHtcXG4rXFx0XFx0cGcgPSBobGlzdF9lbnRyeShwb3J0LVxcdTAwM2VtZ2xpc3QuZmlyc3QsXFxuK1xcdFxcdFxcdFxcdCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwLCBtZ2xpc3QpO1xcbiBcXHRcXHRicl9tdWx0aWNhc3RfZmluZF9kZWxfcGcoYnIsIHBnKTtcXG4rXFx0fVxcbiBcXHRzcGluX3VubG9ja19iaChcXHUwMDI2YnItXFx1MDAzZW11bHRpY2FzdF9sb2NrKTtcXG4gXFx0Zmx1c2hfd29yayhcXHUwMDI2YnItXFx1MDAzZW1jYXN0X2djX3dvcmspO1xcbiBcXHRicl9tdWx0aWNhc3RfcG9ydF9jdHhfZGVpbml0KFxcdTAwMjZwb3J0LVxcdTAwM2VtdWx0aWNhc3RfY3R4KTtcXG5AQCAtMjEyNiwxMSArMjEzMSwyMyBAQCBzdGF0aWMgdm9pZCBfX2JyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRfY3R4KHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0X3BvcnQgKnBtY3R4KVxcbiBcXHRzdHJ1Y3QgaGxpc3Rfbm9kZSAqbjtcXG4gXFx0Ym9vbCBkZWwgPSBmYWxzZTtcXG4gXFxuLVxcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocGcsIG4sIFxcdTAwMjZwbWN0eC1cXHUwMDNlcG9ydC1cXHUwMDNlbWdsaXN0LCBtZ2xpc3QpXFxuLVxcdFxcdGlmICghKHBnLVxcdTAwM2VmbGFncyBcXHUwMDI2IE1EQl9QR19GTEFHU19QRVJNQU5FTlQpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdCAgICAoIWJyX211bHRpY2FzdF9wb3J0X2N0eF9pc192bGFuKHBtY3R4KSB8fFxcbi1cXHRcXHQgICAgIHBnLVxcdTAwM2VrZXkuYWRkci52aWQgPT0gcG1jdHgtXFx1MDAzZXZsYW4tXFx1MDAzZXZpZCkpXFxuLVxcdFxcdFxcdGJyX211bHRpY2FzdF9maW5kX2RlbF9wZyhwbWN0eC1cXHUwMDNlcG9ydC1cXHUwMDNlYnIsIHBnKTtcXG4rXFx0LyogYnJfbXVsdGljYXN0X2ZpbmRfZGVsX3BnKCkgY2FuIGRlbGV0ZSBmdXJ0aGVyIGVudHJpZXMgb2YgdGhpcyBzYW1lXFxuK1xcdCAqIHBvcnQtXFx1MDAzZW1nbGlzdCwgc28gdGhlIG5vZGUgbGF0Y2hlZCBpbiBAbiBtYXkgYmUgdW5saW5rZWQgYnkgdGhlIGxvb3BcXG4rXFx0ICogYm9keS4gUG9ydCBncm91cHMgYXJlIG9ubHkgZnJlZWQgYnkgdGhlIEdDIHdvcmsgdW5kZXIgbXVsdGljYXN0X2xvY2ssXFxuK1xcdCAqIHNvIEBuIGlzIHN0aWxsIHZhbGlkIGhlcmU7IGlmIGl0IGxlZnQgdGhlIGxpc3QsIHJlc3RhcnQuXFxuK1xcdCAqL1xcbityZXN0YXJ0OlxcbitcXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBnLCBuLCBcXHUwMDI2cG1jdHgtXFx1MDAzZXBvcnQtXFx1MDAzZW1nbGlzdCwgbWdsaXN0KSB7XFxuK1xcdFxcdGlmICgocGctXFx1MDAzZWZsYWdzIFxcdTAwMjYgTURCX1BHX0ZMQUdTX1BFUk1BTkVOVCkgfHxcXG4rXFx0XFx0ICAgIChicl9tdWx0aWNhc3RfcG9ydF9jdHhfaXNfdmxhbihwbWN0eCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgICBwZy1cXHUwMDNla2V5LmFkZHIudmlkICE9IHBtY3R4LVxcdTAwM2V2bGFuLVxcdTAwM2V2aWQpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdGJyX211bHRpY2FzdF9maW5kX2RlbF9wZyhwbWN0eC1cXHUwMDNlcG9ydC1cXHUwMDNlYnIsIHBnKTtcXG4rXFxuK1xcdFxcdGlmIChuIFxcdTAwMjZcXHUwMDI2IGhsaXN0X3VuaGFzaGVkKG4pKVxcbitcXHRcXHRcXHRnb3RvIHJlc3RhcnQ7XFxuK1xcdH1cXG4gXFxuIFxcdGRlbCB8PSBicl9pcDRfbXVsdGljYXN0X3Jwb3J0X2RlbChwbWN0eCk7XFxuIFxcdHRpbWVyX2RlbGV0ZShcXHUwMDI2cG1jdHgtXFx1MDAzZWlwNF9tY19yb3V0ZXJfdGltZXIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMTo1ODo1My4xMzkyMTExMjNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMTY4MDQyNzk3NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlJJREdFXCIsXG4gICAgXCJJTkVUXCIsXG4gICAgXCJCUklER0VfSUdNUF9TTk9PUElOR1wiLFxuICAgIFwiVkxBTl84MDIxUVwiLFxuICAgIFwiQlJJREdFX1ZMQU5fRklMVEVSSU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnJfbXVsdGljYXN0X2RlbF9wb3J0XCIsXG4gICAgXCJicl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0XCIsXG4gICAgXCJicl9tdWx0aWNhc3RfZW5hYmxlX3BvcnRcIixcbiAgICBcImJyX211bHRpY2FzdF90b2dnbGVcIixcbiAgICBcImJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZ1wiLFxuICAgIFwiYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGJyaWRnZSBtdWx0aWNhc3QgcG9ydCBkZWxldGlvbiBhbmQgZGlzYWJsaW5nIGxvZ2ljIHdoZXJlIGBobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlYCB3YXMgdXNlZCBpbmNvcnJlY3RseS4gYGJyX211bHRpY2FzdF9maW5kX2RlbF9wZ2AgY2FuIGRlbGV0ZSBtdWx0aXBsZSBlbnRyaWVzIGZyb20gdGhlIHNhbWUgbGlzdCwgbGVhZGluZyB0byBtaXNzZWQgZW50cmllcyBvciB1c2UtYWZ0ZXItZnJlZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgYnJpZGdlIG11bHRpY2FzdCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluayBhbmQgc3lzZnMsIGFuZCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjNmM3NzJkMDkyNmJhODY5NzRjN2Q0NTg0Mjg1MjYwODkzODQwOTQyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTIgMTE6NTg6NTEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jIGIvbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuY1xuaW5kZXggMDBhYTliMjg3OWQ2ZS4uZTA3NzUwNTljYTBhOCAxMDA2NDRcbi0tLSBhL25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmNcbisrKyBiL25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmNcbkBAIC0yMDY1LDEyICsyMDY1LDE3IEBAIHZvaWQgYnJfbXVsdGljYXN0X2RlbF9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpXG4ge1xuIFx0c3RydWN0IG5ldF9icmlkZ2UgKmJyID0gcG9ydC1cdTAwM2VicjtcbiBcdHN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAgKnBnO1xuLVx0c3RydWN0IGhsaXN0X25vZGUgKm47XG4gXG4tXHQvKiBUYWtlIGNhcmUgb2YgdGhlIHJlbWFpbmluZyBncm91cHMsIG9ubHkgcGVybSBvbmVzIHNob3VsZCBiZSBsZWZ0ICovXG4rXHQvKiBUYWtlIGNhcmUgb2YgdGhlIHJlbWFpbmluZyBncm91cHMsIG9ubHkgcGVybSBvbmVzIHNob3VsZCBiZSBsZWZ0LlxuK1x0ICogRGVsZXRpbmcgb25lIGNhbiBkZWxldGUgb3RoZXJzIG9uIHRoaXMgc2FtZSBwb3J0LVx1MDAzZW1nbGlzdCwgc29cbitcdCAqIGFsd2F5cyByZXN0YXJ0IGZyb20gdGhlIGhlYWQuXG4rXHQgKi9cbiBcdHNwaW5fbG9ja19iaChcdTAwMjZici1cdTAwM2VtdWx0aWNhc3RfbG9jayk7XG4tXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBnLCBuLCBcdTAwMjZwb3J0LVx1MDAzZW1nbGlzdCwgbWdsaXN0KVxuK1x0d2hpbGUgKCFobGlzdF9lbXB0eShcdTAwMjZwb3J0LVx1MDAzZW1nbGlzdCkpIHtcbitcdFx0cGcgPSBobGlzdF9lbnRyeShwb3J0LVx1MDAzZW1nbGlzdC5maXJzdCxcbitcdFx0XHRcdCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwLCBtZ2xpc3QpO1xuIFx0XHRicl9tdWx0aWNhc3RfZmluZF9kZWxfcGcoYnIsIHBnKTtcbitcdH1cbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmJyLVx1MDAzZW11bHRpY2FzdF9sb2NrKTtcbiBcdGZsdXNoX3dvcmsoXHUwMDI2YnItXHUwMDNlbWNhc3RfZ2Nfd29yayk7XG4gXHRicl9tdWx0aWNhc3RfcG9ydF9jdHhfZGVpbml0KFx1MDAyNnBvcnQtXHUwMDNlbXVsdGljYXN0X2N0eCk7XG5AQCAtMjEyNiwxMSArMjEzMSwyMyBAQCBzdGF0aWMgdm9pZCBfX2JyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRfY3R4KHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0X3BvcnQgKnBtY3R4KVxuIFx0c3RydWN0IGhsaXN0X25vZGUgKm47XG4gXHRib29sIGRlbCA9IGZhbHNlO1xuIFxuLVx0aGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwZywgbiwgXHUwMDI2cG1jdHgtXHUwMDNlcG9ydC1cdTAwM2VtZ2xpc3QsIG1nbGlzdClcbi1cdFx0aWYgKCEocGctXHUwMDNlZmxhZ3MgXHUwMDI2IE1EQl9QR19GTEFHU19QRVJNQU5FTlQpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgKCFicl9tdWx0aWNhc3RfcG9ydF9jdHhfaXNfdmxhbihwbWN0eCkgfHxcbi1cdFx0ICAgICBwZy1cdTAwM2VrZXkuYWRkci52aWQgPT0gcG1jdHgtXHUwMDNldmxhbi1cdTAwM2V2aWQpKVxuLVx0XHRcdGJyX211bHRpY2FzdF9maW5kX2RlbF9wZyhwbWN0eC1cdTAwM2Vwb3J0LVx1MDAzZWJyLCBwZyk7XG4rXHQvKiBicl9tdWx0aWNhc3RfZmluZF9kZWxfcGcoKSBjYW4gZGVsZXRlIGZ1cnRoZXIgZW50cmllcyBvZiB0aGlzIHNhbWVcbitcdCAqIHBvcnQtXHUwMDNlbWdsaXN0LCBzbyB0aGUgbm9kZSBsYXRjaGVkIGluIEBuIG1heSBiZSB1bmxpbmtlZCBieSB0aGUgbG9vcFxuK1x0ICogYm9keS4gUG9ydCBncm91cHMgYXJlIG9ubHkgZnJlZWQgYnkgdGhlIEdDIHdvcmsgdW5kZXIgbXVsdGljYXN0X2xvY2ssXG4rXHQgKiBzbyBAbiBpcyBzdGlsbCB2YWxpZCBoZXJlOyBpZiBpdCBsZWZ0IHRoZSBsaXN0LCByZXN0YXJ0LlxuK1x0ICovXG4rcmVzdGFydDpcbitcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocGcsIG4sIFx1MDAyNnBtY3R4LVx1MDAzZXBvcnQtXHUwMDNlbWdsaXN0LCBtZ2xpc3QpIHtcbitcdFx0aWYgKChwZy1cdTAwM2VmbGFncyBcdTAwMjYgTURCX1BHX0ZMQUdTX1BFUk1BTkVOVCkgfHxcbitcdFx0ICAgIChicl9tdWx0aWNhc3RfcG9ydF9jdHhfaXNfdmxhbihwbWN0eCkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAgcGctXHUwMDNla2V5LmFkZHIudmlkICE9IHBtY3R4LVx1MDAzZXZsYW4tXHUwMDNldmlkKSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0YnJfbXVsdGljYXN0X2ZpbmRfZGVsX3BnKHBtY3R4LVx1MDAzZXBvcnQtXHUwMDNlYnIsIHBnKTtcbitcbitcdFx0aWYgKG4gXHUwMDI2XHUwMDI2IGhsaXN0X3VuaGFzaGVkKG4pKVxuK1x0XHRcdGdvdG8gcmVzdGFydDtcbitcdH1cbiBcbiBcdGRlbCB8PSBicl9pcDRfbXVsdGljYXN0X3Jwb3J0X2RlbChwbWN0eCk7XG4gXHR0aW1lcl9kZWxldGUoXHUwMDI2cG1jdHgtXHUwMDNlaXA0X21jX3JvdXRlcl90aW1lcik7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMTo1ODo1My4xMzkyMTI2NTNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTc2ODA5OTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEJyaWRnZSBNdWx0aWNhc3QgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCBhIHBhdGNoIGhlcmUgdGhhdCdzIHBva2luZyBhdCBgbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuY2AuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgdG8gYmUgbW9kaWZ5aW5nIGhvdyB3ZSBoYW5kbGUgbXVsdGljYXN0IGdyb3VwIG1lbWJlcnNoaXAgd2hlbiBkZWxldGluZyBvciBkaXNhYmxpbmcgcG9ydHMgaW4gYSBicmlkZ2UuIFRoZSBmdW5jdGlvbnMgaW4gcXVlc3Rpb24gYXJlIGBicl9tdWx0aWNhc3RfZGVsX3BvcnRgIGFuZCBgX19icl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0X2N0eGAuIFRoZSBjb3JlIG9mIHRoZSBwcm9ibGVtLCBhcyBJIHVuZGVyc3RhbmQgaXQsIGxpZXMgd2l0aGluIGBicl9tdWx0aWNhc3RfZmluZF9kZWxfcGdgLiBBcHBhcmVudGx5LCB0aGlzIGZ1bmN0aW9uIGNhbiBpbmFkdmVydGVudGx5IGRlbGV0ZSBlbnRyaWVzIGZyb20gdGhlIGBwb3J0LVx1MDAzZW1nbGlzdGAgd2hpbGUgd2UncmUgaXRlcmF0aW5nIHRocm91Z2ggaXQgdXNpbmcgYGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVgLiBUaGlzIGNvdWxkIGxlYWQgdG8gYSBjbGFzc2ljIGxpc3QgY29ycnVwdGlvbiBzY2VuYXJpbywgZWl0aGVyIGFjY2Vzc2luZyBmcmVlZCBtZW1vcnkgb3IgY29tcGxldGVseSBza2lwcGluZyBzb21lIGVudHJpZXMg4oCTIGJvdGggYmFkIG5ld3MuIFRoZSBwYXRjaCBwcm9wb3NlcyBlaXRoZXIgcmVzdGFydGluZyB0aGUgbG9vcCBvciwgYWx0ZXJuYXRpdmVseSwgc2ltcGx5IHVzaW5nIGEgYHdoaWxlYCBsb29wIHRvIG5hdmlnYXRlIHRoZSBsaXN0LCB3aGljaCBtYWtlcyBzZW5zZS5cblxuU28sIGxldCdzIGJyZWFrIHRoaXMgZG93biBmdXJ0aGVyLiBgYnJfbXVsdGljYXN0X2RlbF9wb3J0YCBnZXRzIGNhbGxlZCB3aGVuIGEgYnJpZGdlIHBvcnQgZ2V0cyBkZWxldGVkLCB3aGljaCBpcyBhIGZhaXJseSBjcml0aWNhbCBldmVudC4gQW5kIGBfX2JyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRfY3R4YCBpcyB0aWVkIHRvIGRpc2FibGluZyBtdWx0aWNhc3Qgb24gYSBwb3J0IOKAkyBzb21ldGhpbmcgdGhhdCBoYXBwZW5zIGEgYml0IGxlc3MgZnJlcXVlbnRseSwgYnV0IGlzIHN0aWxsIHJlbGV2YW50LlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb246IGlzIHRoaXMgd29ydGggZnV6emluZz8gQWJzb2x1dGVseSwgd2l0aG91dCBhIGRvdWJ0ISBUaGlzIGlzIHJpZ2h0IGluIHRoZSBoZWFydCBvZiB0aGUgYnJpZGdlIG11bHRpY2FzdCBsb2dpYy4gQW55IGluc3RhYmlsaXR5IGhlcmUgY291bGQgbGVhZCB0byBzZXJpb3VzIG5ldHdvcmsgZGlzcnVwdGlvbiwgcGFydGljdWxhcmx5IGluIGVudmlyb25tZW50cyByZWx5aW5nIGhlYXZpbHkgb24gbXVsdGljYXN0LlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gbmFpbCBkb3duIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBnb3Zlcm4gYnJpZGdlIG11bHRpY2FzdC4gSSdtIHRoaW5raW5nIGBDT05GSUdfQlJJREdFX0lHTVBfU05PT1BJTkdgIGlzIGEgbGlrZWx5IGNhbmRpZGF0ZSwgYnV0IEkgc2hvdWxkIHByb2JhYmx5IGNvbmZpcm0gdGhhdCBieSBjaGVja2luZyBgbmV0L2JyaWRnZS9LY29uZmlnYCBvciBldmVuIGBuZXQvYnJpZGdlL01ha2VmaWxlYCB0byBtYWtlIHN1cmUgSSBoYXZlIHRoZSBjb250ZXh0IHJpZ2h0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjYyLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTE6NTg6NTguNzE2MDI0ODg4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NDg0NTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJyX211bHRpY2FzdC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9icmlkZ2UvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvTWFrZWZpbGU9MTk9b2JqLSQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpICs9IGJyX25ldGZpbHRlci5vXFxubmV0L2JyaWRnZS9NYWtlZmlsZS0yMC1cXG5uZXQvYnJpZGdlL01ha2VmaWxlOjIxOmJyaWRnZS0kKENPTkZJR19CUklER0VfSUdNUF9TTk9PUElORykgKz0gYnJfbXVsdGljYXN0Lm8gYnJfbWRiLm8gYnJfbXVsdGljYXN0X2VodC5vXFxubmV0L2JyaWRnZS9NYWtlZmlsZS0yMi1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmM9MTY0PXN0YXRpYyBpbnQgYnJfZGV2X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtMTcwLVxcdGJyX3N0cF9lbmFibGVfYnJpZGdlKGJyKTtcXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jOjE3MTpcXHRicl9tdWx0aWNhc3Rfb3Blbihicik7XFxubmV0L2JyaWRnZS9icl9kZXZpY2UuYy0xNzItXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQyMjk9dm9pZCBicl9tdWx0aWNhc3RfbGVhdmVfc25vb3BlcnMoc3RydWN0IG5ldF9icmlkZ2UgKmJyKVxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MjM0LVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDIzNTpzdGF0aWMgdm9pZCBfX2JyX211bHRpY2FzdF9vcGVuX3F1ZXJ5KHN0cnVjdCBuZXRfYnJpZGdlICpicixcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQyMzYtXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGJyaWRnZV9tY2FzdF9vd25fcXVlcnkgKnF1ZXJ5KVxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MjQ1LVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDI0NjpzdGF0aWMgdm9pZCBfX2JyX211bHRpY2FzdF9vcGVuKHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0ICpicm1jdHgpXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MjQ3LXtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQyNDg6XFx0X19icl9tdWx0aWNhc3Rfb3Blbl9xdWVyeShicm1jdHgtXFx1MDAzZWJyLCBcXHUwMDI2YnJtY3R4LVxcdTAwM2VpcDRfb3duX3F1ZXJ5KTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQyNDktI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0MjUwOlxcdF9fYnJfbXVsdGljYXN0X29wZW5fcXVlcnkoYnJtY3R4LVxcdTAwM2ViciwgXFx1MDAyNmJybWN0eC1cXHUwMDNlaXA2X293bl9xdWVyeSk7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MjUxLSNlbmRpZlxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MjUzLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDI1NDp2b2lkIGJyX211bHRpY2FzdF9vcGVuKHN0cnVjdCBuZXRfYnJpZGdlICpicilcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQyNTUte1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MjY5LVxcdFxcdFxcdFxcdCAgICAhYnJfbXVsdGljYXN0X2N0eF92bGFuX2Rpc2FibGVkKGJybWN0eCkpXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0MjcwOlxcdFxcdFxcdFxcdFxcdF9fYnJfbXVsdGljYXN0X29wZW4oXFx1MDAyNnZsYW4tXFx1MDAzZWJyX21jYXN0X2N0eCk7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MjcxLVxcdFxcdFxcdH1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDI3My1cXHR9IGVsc2Uge1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDI3NDpcXHRcXHRfX2JyX211bHRpY2FzdF9vcGVuKFxcdTAwMjZici1cXHUwMDNlbXVsdGljYXN0X2N0eCk7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00Mjc1LVxcdH1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9NDMxOD12b2lkIGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDM0MS1cXHRcXHRpZiAob24pXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0MzQyOlxcdFxcdFxcdF9fYnJfbXVsdGljYXN0X29wZW4oXFx1MDAyNnZsYW4tXFx1MDAzZWJyX21jYXN0X2N0eCk7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzQzLVxcdFxcdGVsc2VcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9NDM4Mz1pbnQgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgYm9vbCBvbixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQwNy1cXHRlbHNlXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0NDA4OlxcdFxcdF9fYnJfbXVsdGljYXN0X29wZW4oXFx1MDAyNmJyLVxcdTAwM2VtdWx0aWNhc3RfY3R4KTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MDktXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShwLCBcXHUwMDI2YnItXFx1MDAzZXBvcnRfbGlzdCwgbGlzdCkge1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00NjEwPXN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9zdGFydF9xdWVyaWVyKHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0ICpicm1jdHgsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ2MTctXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0NjE4OlxcdF9fYnJfbXVsdGljYXN0X29wZW5fcXVlcnkoYnJtY3R4LVxcdTAwM2ViciwgcXVlcnkpO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDYxOS1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9NDY4Mj1pbnQgYnJfbXVsdGljYXN0X3RvZ2dsZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHVuc2lnbmVkIGxvbmcgdmFsLFxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NzA3LVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDcwODpcXHRicl9tdWx0aWNhc3Rfb3Blbihicik7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NzA5LVxcdGJyX211bHRpY2FzdF9lbmFibGVfYWxsX3BvcnRzKGJyKTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTk4Mj12b2lkIGJyX211bHRpY2FzdF9sZWF2ZV9zbm9vcGVycyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpO1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjk4Mzp2b2lkIGJyX211bHRpY2FzdF9vcGVuKHN0cnVjdCBuZXRfYnJpZGdlICpicik7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtOTg0LXZvaWQgYnJfbXVsdGljYXN0X3N0b3Aoc3RydWN0IG5ldF9icmlkZ2UgKmJyKTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTE0Mjk9c3RhdGljIGlubGluZSB2b2lkIGJyX211bHRpY2FzdF9sZWF2ZV9zbm9vcGVycyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNDMyLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE0MzM6c3RhdGljIGlubGluZSB2b2lkIGJyX211bHRpY2FzdF9vcGVuKHN0cnVjdCBuZXRfYnJpZGdlICpicilcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNDM0LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTE6NTg6NTguNzYwNTE0NDM3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ2ODI0NTc3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgSUdNUCBTbm9vcGluZyBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgdGhlIGN1cnJlbnQgY29uZmlnIGlzIHNldCB0byBgQlJJREdFX0lHTVBfU05PT1BJTkdgLCB3aGljaCBpbW1lZGlhdGVseSB0cmlnZ2VycyBzb21lIHRob3VnaHRzLiBXZSd2ZSBnb3QgSUdNUCBzbm9vcGluZyBlbmFibGVkIG9uIGEgYnJpZGdlLiBNYWtlcyBzZW5zZSBpbiBhIGxvdCBvZiBzY2VuYXJpb3MsIGJ1dCBJIG5lZWQgdG8gcXVpY2tseSBlbnN1cmUgd2UgaGF2ZW4ndCBtaXNzZWQgYW55IGRlcGVuZGVuY2llcyBvciBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9ucy4gVGhlIG1vc3QgaW1wb3J0YW50IHRoaW5nIGhlcmUgaXMgdGhlIHByZXNlbmNlIG9mIGBCUklER0VgLiBJJ20gYXNzdW1pbmcgdGhhdCdzIG5lZWRlZCB0byBldmVuIGdldCBzdGFydGVkIHdpdGggSUdNUCBzbm9vcGluZyBpbiBhIGJyaWRnZWQgZW52aXJvbm1lbnQsIGJ1dCBhc3N1bXB0aW9ucyBhcmUgdGhlIGJhbmUgb2Ygc29saWQgY29uZmlndXJhdGlvbnMhIEJlc3QgdG8gcXVpY2tseSB2ZXJpZnkuIExldCdzIGRpZyBpbnRvIHRoZSBgbmV0L2JyaWRnZS9LY29uZmlnYCBmaWxlLiBUaGF0J3MgdGhlIGdvLXRvIHBsYWNlIGZvciBhbGwgdGhpbmdzIGJyaWRnaW5nIGFuZCBjb25maWd1cmF0aW9uIHJlbGF0ZWQgaW4gdGhlIG5ldHdvcmtpbmcgc3Vic3lzdGVtLiBUaGF0J3Mgd2hlcmUgYWxsIHRoZSBkZXBlbmRlbmNpZXMgYXJlIGV4cGxpY2l0bHkgbGFpZCBvdXQsIHNvIHRoYXQncyB0aGUgZmFzdGVzdCB3YXkgdG8gZ2V0IGNsYXJpdHkgb24gd2hldGhlciB3ZSdyZSBnb29kIHRvIGdvLCBvciBpZiB0aGVyZSdzIHNvbWV0aGluZyBlbHNlIHdlIG5lZWQgdG8gdGFrZSBpbnRvIGNvbnNpZGVyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4MDcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMTo1OTowMi4yMjg3NjI5MDhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc2OTkxOTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJSSURHRV9JR01QX1NOT09QSU5HXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9icmlkZ2UvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvS2NvbmZpZz02PWNvbmZpZyBCUklER0VcXG4tLVxcbm5ldC9icmlkZ2UvS2NvbmZpZy0zNS1cXG5uZXQvYnJpZGdlL0tjb25maWc6MzY6Y29uZmlnIEJSSURHRV9JR01QX1NOT09QSU5HXFxubmV0L2JyaWRnZS9LY29uZmlnLTM3LVxcdGJvb2wgXFxcIklHTVAvTUxEIHNub29waW5nXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMTo1OTowMi4yNzY0Njk3MjdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDY3NTU1NDU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqS2NvbmZpZyBEZXBlbmRlbmN5IERlZXAgRGl2ZTogQlJJREdFX0lHTVBfU05PT1BJTkcqKlxuXG5Pa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyBgQlJJREdFX0lHTVBfU05PT1BJTkdgIGlzIGNvbmZpZ3VyZWQgd2l0aGluIHRoZSBuZXR3b3JraW5nIHN0YWNrLiBNeSBpbml0aWFsIHRhcmdldCBpcyBgbmV0L2JyaWRnZS9LY29uZmlnYC4gVGhhdCdzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcgZm9yIGFueSBkZXBlbmRlbmNpZXMgb3IgY29uZGl0aW9uYWwgbG9naWMgcmVsYXRlZCB0byB0aGlzIHBhcnRpY3VsYXIgYnJpZGdpbmcgZmVhdHVyZS4gSSdtIGFzc3VtaW5nIHRoYXQncyB3aGVyZSBJIGNhbiBmaW5kIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFVuZGVyc3RhbmRpbmcgdGhvc2UgZGVwZW5kZW5jaWVzIGlzIGtleSBiZWZvcmUgSSBldmVuIGNvbnNpZGVyIG1ha2luZyBhbnkgbW9kaWZpY2F0aW9ucyBvciBlbmhhbmNlbWVudHMuIEl0J3MgdGhlIGZvdW5kYXRpb24gZm9yIGFueSBkZWVwZXIgaW52ZXN0aWdhdGlvbiBpbnRvIGl0cyBiZWhhdmlvciwgcGVyZm9ybWFuY2UsIG9yIHBvdGVudGlhbCBpc3N1ZXMuIExldCdzIHNlZSB3aGF0IHRoZSBLY29uZmlnIGZpbGUgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTE4MywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDExOjU5OjA1LjM0NDAyNzY3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTk3NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2JyaWRnZS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM2LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDM2OlxcdGNvbmZpZyBCUklER0VfSUdNUF9TTk9PUElOR1xcbiAgMzc6XFx0XFx0Ym9vbCBcXFwiSUdNUC9NTEQgc25vb3BpbmdcXFwiXFxuICAzODpcXHRcXHRkZXBlbmRzIG9uIEJSSURHRVxcbiAgMzk6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUXFxuICA0MDpcXHRcXHRkZWZhdWx0IHlcXG4gIDQxOlxcdFxcdGhlbHBcXG4gIDQyOlxcdFxcdCAgSWYgeW91IHNheSBZIGhlcmUsIHRoZW4gdGhlIEV0aGVybmV0IGJyaWRnZSB3aWxsIGJlIGFibGUgc2VsZWN0aXZlbHlcXG4gIDQzOlxcdFxcdCAgZm9yd2FyZCBtdWx0aWNhc3QgdHJhZmZpYyBiYXNlZCBvbiBJR01QL01MRCB0cmFmZmljIHJlY2VpdmVkIGZyb21cXG4gIDQ0OlxcdFxcdCAgZWFjaCBwb3J0LlxcbiAgNDU6XFx0XFxuICA0NjpcXHRcXHQgIFNheSBOIHRvIGV4Y2x1ZGUgdGhpcyBzdXBwb3J0IGFuZCByZWR1Y2UgdGhlIGJpbmFyeSBzaXplLlxcbiAgNDc6XFx0XFxuICA0ODpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IFkuXFxuICA0OTpcXHRcXG4gIDUwOlxcdGNvbmZpZyBCUklER0VfVkxBTl9GSUxURVJJTkdcXG4gIDUxOlxcdFxcdGJvb2wgXFxcIlZMQU4gZmlsdGVyaW5nXFxcIlxcbiAgNTI6XFx0XFx0ZGVwZW5kcyBvbiBCUklER0VcXG4gIDUzOlxcdFxcdGRlcGVuZHMgb24gVkxBTl84MDIxUVxcbiAgNTQ6XFx0XFx0ZGVmYXVsdCBuXFxuICA1NTpcXHRcXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDExOjU5OjA1LjM0NDEyOTYzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc5MjEyMjc1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIEkgZGVsdmUgaW50byB0aGlzIGNvZGU6XG5cbioqQW5hbHl6aW5nIE11bHRpY2FzdCBDb250cm9sIEZsb3cqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgbXVsdGljYXN0IGlzIGhhbmRsZWQsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGJyaWRnaW5nIGNvbnRleHQuIFRoZSBrZXkgaWRlbnRpZmllcnMganVtcGluZyBvdXQgYXQgbWUgYXJlIGBCUklER0VgLCBgSU5FVGAsIGFuZCBgQlJJREdFX0lHTVBfU05PT1BJTkdgLiBUaGVzZSBsaWtlbHkgcmVwcmVzZW50IGNvbmZpZ3VyYXRpb24gZmxhZ3Mgb3IgbW9kdWxlIGRlc2lnbmF0aW9ucyByZWxhdGVkIHRvIGJyaWRnaW5nIGFuZCBJR01QIHNub29waW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgaW50ZXJhY3QuXG5cbk15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgZnVuY3Rpb25zIGBicl9tdWx0aWNhc3RfZGVsX3BvcnRgIGFuZCBgX19icl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0X2N0eGAuIFRoZXNlIHNlZW0gdG8gYmUgdGhlIGNyaXRpY2FsIHBvaW50cyB3aGVyZSBtdWx0aWNhc3QgZm9yd2FyZGluZyBvbiBicmlkZ2UgcG9ydHMgaXMgbW9kaWZpZWQsIHBvdGVudGlhbGx5IHJlbW92ZWQgb3IgZGlzYWJsZWQuIE15IHRhc2sgaXMgdG8gZGV0ZXJtaW5lIGlmIEkgY2FuIHRyYWNlIHRoZSBjb250cm9sIGZsb3cgdG8gdGhvc2Ugc3BlY2lmaWMgZnVuY3Rpb24gcG9pbnRzLCBhbmQgd2hhdCBBUEkgZW50cnlwb2ludHMgYXJlIGF2YWlsYWJsZSBmb3IgdGhvc2UgXCJGb2N1c1N5bWJvbHNcIi4gQXJlIHRoZXkgZGlyZWN0bHkgY2FsbGVkIGZyb20gc29tZXdoZXJlLCBvciBhcmUgdGhleSByZWFjaGVkIHRocm91Z2ggc29tZSBjYWxsYmFjayBvciBpbmRpcmVjdCBtZXRob2Q/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGdyYXBocyBhbmQgaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgaW52b2tlZCB0byBmdWxseSBncmFzcCB0aGVpciBwdXJwb3NlLiBUaGlzIGlzIHdoZXJlIEknbGwgbG9vayBmb3IgZW50cnkgcG9pbnRzIHRvIEZvY3VzU3ltYm9scy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTY0NywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTE6NTk6MDkuMTM2MjU2MDcxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjQ4NDQyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicl9tdWx0aWNhc3RfZGVsX3BvcnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JyaWRnZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JyaWRnZS9icl9pZi5jPTMzND1zdGF0aWMgdm9pZCBkZWxfbmJwKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnApXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2lmLmMtMzY5LVxcbm5ldC9icmlkZ2UvYnJfaWYuYzozNzA6XFx0YnJfbXVsdGljYXN0X2RlbF9wb3J0KHApO1xcbm5ldC9icmlkZ2UvYnJfaWYuYy0zNzEtXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2lmLmM9NTYwPWludCBicl9hZGRfaWYoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2JyaWRnZS9icl9pZi5jLTU5OS1cXHRpZiAoZXJyKSB7XFxubmV0L2JyaWRnZS9icl9pZi5jOjYwMDpcXHRcXHRicl9tdWx0aWNhc3RfZGVsX3BvcnQocCk7XFxubmV0L2JyaWRnZS9icl9pZi5jLTYwMS1cXHRcXHRuZXRkZXZfcHV0KGRldiwgXFx1MDAyNnAtXFx1MDAzZWRldl90cmFja2VyKTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfaWYuYy03MDktZXJyMjpcXG5uZXQvYnJpZGdlL2JyX2lmLmM6NzEwOlxcdGJyX211bHRpY2FzdF9kZWxfcG9ydChwKTtcXG5uZXQvYnJpZGdlL2JyX2lmLmMtNzExLVxcdG5ldGRldl9wdXQoZGV2LCBcXHUwMDI2cC1cXHUwMDNlZGV2X3RyYWNrZXIpO1xcbi0tXFxubmV0L2JyaWRnZS9icl9tZGIuYz05ODQ9c3RhdGljIGludCBicl9tZGJfYWRkX2dyb3VwX3N0YXJfZyhjb25zdCBzdHJ1Y3QgYnJfbWRiX2NvbmZpZyAqY2ZnLFxcbi0tXFxubmV0L2JyaWRnZS9icl9tZGIuYy0xMDM1LWVycl9kZWxfcG9ydF9ncm91cDpcXG5uZXQvYnJpZGdlL2JyX21kYi5jOjEwMzY6XFx0YnJfbXVsdGljYXN0X2RlbF9wb3J0X2dyb3VwKHApO1xcbm5ldC9icmlkZ2UvYnJfbWRiLmMtMTAzNy1cXHRyZXR1cm4gZXJyO1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0xMzk4PXN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAgKmJyX211bHRpY2FzdF9uZXdfcG9ydF9ncm91cChcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMTQ1Ni1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjE0NTc6dm9pZCBicl9tdWx0aWNhc3RfZGVsX3BvcnRfZ3JvdXAoc3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cCAqcClcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTE0NTgte1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0yMDQzPWludCBicl9tdWx0aWNhc3RfYWRkX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydClcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjA2My1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjIwNjQ6dm9pZCBicl9tdWx0aWNhc3RfZGVsX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydClcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIwNjUte1xcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9OTc2PWludCBicl9tdWx0aWNhc3RfYWRkX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCk7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6OTc3OnZvaWQgYnJfbXVsdGljYXN0X2RlbF9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpO1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTk3OC12b2lkIGJyX211bHRpY2FzdF9lbmFibGVfcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0KTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTEwMDc9YnJfbXVsdGljYXN0X25ld19wb3J0X2dyb3VwKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xMDEyLVxcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjEwMTM6dm9pZCBicl9tdWx0aWNhc3RfZGVsX3BvcnRfZ3JvdXAoc3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cCAqcCk7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTAxNC1pbnQgYnJfbWRiX2hhc2hfaW5pdChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpO1xcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTQwND1zdGF0aWMgaW5saW5lIGludCBicl9tdWx0aWNhc3RfYWRkX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydClcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE0MDgtXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTQwOTpzdGF0aWMgaW5saW5lIHZvaWQgYnJfbXVsdGljYXN0X2RlbF9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTQxMC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDExOjU5OjA5LjE4Mjc0NjE5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MDAzNzMwNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBJIHNlZSBpdDpcblxuKipBbmFseXppbmcgdGhlIEJyaWRnZSBNdWx0aWNhc3QgUG9ydCBEZWxldGlvbiBGbG93KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IG11bHRpY2FzdCBwb3J0IGRlbGV0aW9uIGlzIGhhbmRsZWQgd2l0aGluIHRoZSBicmlkZ2UgY29kZS4gYGJyX211bHRpY2FzdF9kZWxfcG9ydGAgYXBwZWFycyB0byBiZSB0aGUgY29yZSBmdW5jdGlvbiwgdGhlIG9uZSB0aGF0IGFjdHVhbGx5IGRvZXMgdGhlIHdvcmsuIEkgc2VlIHRoYXQgaXQncyBpbnZva2VkIGZyb20gdHdvIHByaW1hcnkgbG9jYXRpb25zOiBgZGVsX25icGAgYW5kIGFsc28sIGltcG9ydGFudGx5LCB3aXRoaW4gYGJyX2FkZF9pZmAgZHVyaW5nIGVycm9yIGhhbmRsaW5nLiBgZGVsX25icGAgbWFrZXMgcGVyZmVjdCBzZW5zZTsgdGhhdCdzIHRoZSBuYXR1cmFsIGNhbGwgd2hlbiBhIGJyaWRnZSBwb3J0IGdldHMgcmVtb3ZlZCwgc2F5LCB2aWEgYGJyX2RlbF9pZmAuICBUaGF0IGFsbCB0cmFja3MuXG5cblRoZSBlcnJvciBwYXRoIGluIGBicl9hZGRfaWZgIGlzIHNvbWV0aGluZyB0byB0aGluayBhYm91dCB0b28sIGJ1dCB0aGUgbWFpbiBxdWVzdGlvbiB0aGF0IGp1bXBlZCBvdXQgYXQgbWUgaW1tZWRpYXRlbHkgaXM6IHdoYXTigJlzIHRoZSByZWxhdGlvbnNoaXAgdG8gYF9fYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydF9jdHhgPyBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgaXQgZml0cyBpbnRvIHRoaXMgcHV6emxlLiBJcyB0aGlzIGZ1bmN0aW9uIGEgbG93ZXItbGV2ZWwgY29tcGFuaW9uLCBhIGhlbHBlciwgYSBkaWZmZXJlbnQgYXBwcm9hY2ggZW50aXJlbHk/IEkgbmVlZCB0byBjbGFyaWZ5IHRoZSBmbG93IG9mIGhvdyBtdWx0aWNhc3QgaXMgYWN0dWFsbHkgZGlzYWJsZWQsIGRvd24gdG8gdGhlIGdyYW51bGFyIGxldmVsLiBUaGUgY29ubmVjdGlvbiBiZXR3ZWVuIGFsbCBvZiB0aGVzZSBmdW5jdGlvbnMgbmVlZHMgdG8gYmUgdGhvcm91Z2hseSB1bmRlcnN0b29kIHRvIGVuc3VyZSBlZmZpY2llbnQgYW5kIGNvbnNpc3RlbnQgcG9ydCByZW1vdmFsIGluIGFsbCBzY2VuYXJpb3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5NjgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMTo1OToxMy4wODMxMjI5ODdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2OTk1OTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydF9jdHhcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JyaWRnZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0yMTE0PXN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9lbmFibGVfcG9ydF9jdHgoc3RydWN0IG5ldF9icmlkZ2VfbWNhc3RfcG9ydCAqcG1jdHgpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIxMjctXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoyMTI4OnN0YXRpYyB2b2lkIF9fYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydF9jdHgoc3RydWN0IG5ldF9icmlkZ2VfbWNhc3RfcG9ydCAqcG1jdHgpXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMTI5LXtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MjE2Mz1zdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0X2N0eChzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdF9wb3J0ICpwbWN0eClcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjE3My1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjIxNzQ6XFx0X19icl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0X2N0eChwbWN0eCk7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMTc1LVxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZici1cXHUwMDNlbXVsdGljYXN0X2xvY2spO1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00MzE4PXZvaWQgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCBib29sIG9uKVxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzU3LVxcdFxcdGVsc2VcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQzNTg6XFx0XFx0XFx0X19icl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0X2N0eChcXHUwMDI2dmxhbi1cXHUwMDNlcG9ydF9tY2FzdF9jdHgpO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDM1OS1cXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2YnItXFx1MDAzZW11bHRpY2FzdF9sb2NrKTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9NDY3MT1zdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfZGlzYWJsZV9hbGxfcG9ydHMoc3RydWN0IG5ldF9icmlkZ2UgKmJyKVxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00Njc4LVxcdGxpc3RfZm9yX2VhY2hfZW50cnkocG9ydCwgXFx1MDAyNmJyLVxcdTAwM2Vwb3J0X2xpc3QsIGxpc3QpXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0Njc5OlxcdFxcdF9fYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydF9jdHgoXFx1MDAyNnBvcnQtXFx1MDAzZW11bHRpY2FzdF9jdHgpO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDY4MC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDExOjU5OjEzLjEzMDEyMzk3NloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTYxNDg3MzM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBicmVha2Rvd24gb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKlRyYWNpbmcgdGhlIE11bHRpY2FzdCBEaXNhYmxlIFNlcXVlbmNlKipcblxuT2theSwgc28gSSdtIGludmVzdGlnYXRpbmcgdGhlIG11bHRpY2FzdCBkaXNhYmxlIGZ1bmN0aW9uYWxpdHkuIFRoZSBlbnRyeSBwb2ludCBhcHBlYXJzIHRvIGJlIGBicl9tdWx0aWNhc3RfZGlzYWJsZV9hbGxfcG9ydHNgLiBUaGF0IG1ha2VzIHNlbnNlOyBpdCdzIGEgZGVzY3JpcHRpdmUgbmFtZS4gVGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBmcm9tIGBicl9tdWx0aWNhc3RfdG9nZ2xlYCBhY2NvcmRpbmcgdG8gdGhlIHByb3ZpZGVkIGluZm9ybWF0aW9uLiBBbmQgYGJyX211bHRpY2FzdF90b2dnbGVgPyBJdCdzIHRoZSBvbmUgY2FsbGVkIGJ5IGZ1bmN0aW9ucyBsaWtlIGBicl9tdWx0aWNhc3Rfc2V0X2lnbXBfc25vb3BpbmdgLCB3aGljaCBpcyBleGFjdGx5IHRoZSBraW5kIG9mIHNldHRpbmcgSSdkIGV4cGVjdCB0byB0cmlnZ2VyIGEgbXVsdGljYXN0IHN0YXRlIGNoYW5nZS5cblxuR2l2ZW4gdGhpcyBpbml0aWFsIG92ZXJ2aWV3LCBteSBuZXh0IHN0ZXAgaXMgY2xlYXIuIFRvIHJlYWxseSB1bmRlcnN0YW5kIHRoZSBmbG93LCBJIG5lZWQgdG8gZGl2ZSBpbnRvIGBicl9tdWx0aWNhc3RfdG9nZ2xlYC4gSSBuZWVkIHRvIHNlZSB3aGF0IGNvbmRpdGlvbnMgdHJpZ2dlciB0aGUgY2FsbCB0byBgYnJfbXVsdGljYXN0X2Rpc2FibGVfYWxsX3BvcnRzYCwgYW5kIHdoYXQgb3RoZXIgYWN0aW9ucyBhcmUgcGVyZm9ybWVkIHdpdGhpbiB0aGF0IGB0b2dnbGVgIGZ1bmN0aW9uLiBUaGlzIHdpbGwgbGV0IG1lIHJlY29uc3RydWN0IHRoZSBvdmVyYWxsIG11bHRpY2FzdCBkaXNhYmxlIG1lY2hhbmlzbSBhbmQgcGlucG9pbnQgdGhlIG1vc3QgaW1wYWN0ZnVsIHBhcnRzIG9mIHRoZSBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODc0LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTE6NTk6MTYuNjkxNjE0MTM0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjM4Mzg1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicl9tdWx0aWNhc3RfdG9nZ2xlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9icmlkZ2UvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvYnIuYz0yOTQ9aW50IGJyX2Jvb2xvcHRfdG9nZ2xlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgZW51bSBicl9ib29sb3B0X2lkIG9wdCwgYm9vbCBvbixcXG4tLVxcbm5ldC9icmlkZ2UvYnIuYy0zMDMtXFx0Y2FzZSBCUl9CT09MT1BUX01DQVNUX1ZMQU5fU05PT1BJTkc6XFxubmV0L2JyaWRnZS9ici5jOjMwNDpcXHRcXHRlcnIgPSBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3BpbmcoYnIsIG9uLCBleHRhY2spO1xcbm5ldC9icmlkZ2UvYnIuYy0zMDUtXFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTIxNjM9c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydF9jdHgoc3RydWN0IG5ldF9icmlkZ2VfbWNhc3RfcG9ydCAqcG1jdHgpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIxNzctXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoyMTc4OnN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF90b2dnbGVfcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LCBib29sIG9uKVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjE3OS17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTIyMTY9dm9pZCBicl9tdWx0aWNhc3RfZW5hYmxlX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydClcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIyMTcte1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MjIxODpcXHRicl9tdWx0aWNhc3RfdG9nZ2xlX3BvcnQocG9ydCwgdHJ1ZSk7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMjE5LX1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MjIyMT12b2lkIGJyX211bHRpY2FzdF9kaXNhYmxlX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydClcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIyMjIte1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MjIyMzpcXHRicl9tdWx0aWNhc3RfdG9nZ2xlX3BvcnQocG9ydCwgZmFsc2UpO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjIyNC19XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQyOTI9dm9pZCBicl9tdWx0aWNhc3RfdXBkYXRlX3ZsYW5fbWNhc3RfY3R4KHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYsIHU4IHN0YXRlKVxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzE3LVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDMxODp2b2lkIGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbilcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzMTkte1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzYyLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDM2MzpzdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbilcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzNjQte1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00Mzc1LVxcdFxcdFxcdGNvbnRpbnVlO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDM3NjpcXHRcXHRicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHZwb3J0LCBvbik7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00Mzc3LVxcdH1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDM3OS1cXHRpZiAoYnJfdmxhbl9pc19icmVudHJ5KHZsYW4pKVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDM4MDpcXHRcXHRicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHZsYW4sIG9uKTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzODEtfVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDM4Mi1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQzODM6aW50IGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIGJvb2wgb24sXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00Mzg0LVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQxNi1cXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHZsYW4sIFxcdTAwMjZ2Zy1cXHUwMDNldmxhbl9saXN0LCB2bGlzdClcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQ0MTc6XFx0XFx0YnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuKHZsYW4sIG9uKTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MTgtXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MjEtXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0NDIyOmJvb2wgYnJfbXVsdGljYXN0X3RvZ2dsZV9nbG9iYWxfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCBib29sIG9uKVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQyMy17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MzItXFx0dmxhbi1cXHUwMDNlcHJpdl9mbGFncyBePSBCUl9WTEZMQUdfR0xPQkFMX01DQVNUX0VOQUJMRUQ7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0NDMzOlxcdGJyX211bHRpY2FzdF90b2dnbGVfdmxhbih2bGFuLCBvbik7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDM0LVxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00NjcxPXN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9kaXNhYmxlX2FsbF9wb3J0cyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ2ODEtXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0NjgyOmludCBicl9tdWx0aWNhc3RfdG9nZ2xlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgdW5zaWduZWQgbG9uZyB2YWwsXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NjgzLVxcdFxcdFxcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jPTEyOTU9c3RhdGljIGludCBicl9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpicmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTE0NDktXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM6MTQ1MDpcXHRcXHRlcnIgPSBicl9tdWx0aWNhc3RfdG9nZ2xlKGJyLCBtY2FzdF9zbm9vcGluZywgZXh0YWNrKTtcXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy0xNDUxLVxcdFxcdGlmIChlcnIpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD05OTI9aW50IGJyX211bHRpY2FzdF9zZXRfdmxhbl9yb3V0ZXIoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdiwgdTggbWNhc3Rfcm91dGVyKTtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDo5OTM6aW50IGJyX211bHRpY2FzdF90b2dnbGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1bnNpZ25lZCBsb25nIHZhbCxcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC05OTQtXFx0XFx0XFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTEwNjk9dm9pZCBicl9tdWx0aWNhc3RfdXBkYXRlX3ZsYW5fbWNhc3RfY3R4KHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYsIHU4IHN0YXRlKTtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxMDcwOnZvaWQgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCBib29sIG9uKTtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxMDcxOmludCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3Bpbmcoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBib29sIG9uLFxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTEwNzItXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxMDczOmJvb2wgYnJfbXVsdGljYXN0X3RvZ2dsZV9nbG9iYWxfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCBib29sIG9uKTtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xMDc0LVxcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTU0Nj1zdGF0aWMgaW5saW5lIHZvaWQgYnJfbXVsdGljYXN0X3VwZGF0ZV92bGFuX21jYXN0X2N0eChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LFxcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTU1MC1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxNTUxOnN0YXRpYyBpbmxpbmUgdm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTU1Mi1cXHRcXHRcXHRcXHRcXHRcXHRib29sIG9uKVxcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTU1NS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxNTU2OnN0YXRpYyBpbmxpbmUgaW50IGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTU1Ny1cXHRcXHRcXHRcXHRcXHRcXHQgICAgYm9vbCBvbixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE1NjItXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTU2MzpzdGF0aWMgaW5saW5lIGJvb2wgYnJfbXVsdGljYXN0X3RvZ2dsZV9nbG9iYWxfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLFxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE1NjQtXFx0XFx0XFx0XFx0XFx0XFx0ICAgYm9vbCBvbilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfc3lzZnNfYnIuYz00MTY9c3RhdGljIHNzaXplX3QgbXVsdGljYXN0X3Nub29waW5nX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmQsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3N5c2ZzX2JyLmMtNDE5LXtcXG5uZXQvYnJpZGdlL2JyX3N5c2ZzX2JyLmM6NDIwOlxcdHJldHVybiBzdG9yZV9icmlkZ2VfcGFybShkLCBidWYsIGxlbiwgYnJfbXVsdGljYXN0X3RvZ2dsZSk7XFxubmV0L2JyaWRnZS9icl9zeXNmc19ici5jLTQyMS19XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz0yMDM9c3RhdGljIHZvaWQgYnJfdmxhbl9wdXRfbWFzdGVyKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKm1hc3RlcnYpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0yMTQtXFx0XFx0X192bGFuX2RlbF9saXN0KG1hc3RlcnYpO1xcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjIxNTpcXHRcXHRicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKG1hc3RlcnYsIGZhbHNlKTtcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0yMTYtXFx0XFx0YnJfbXVsdGljYXN0X2N0eF9kZWluaXQoXFx1MDAyNm1hc3RlcnYtXFx1MDAzZWJyX21jYXN0X2N0eCk7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz0yNjM9c3RhdGljIGludCBfX3ZsYW5fYWRkKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYsIHUxNiBmbGFncyxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTM1OC1cXHRfX3ZsYW5fZmxhZ3NfY29tbWl0KHYsIGZsYWdzKTtcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzozNTk6XFx0YnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbih2LCB0cnVlKTtcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0zNjAtXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz0zOTA9c3RhdGljIGludCBfX3ZsYW5fZGVsKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy00MjctXFx0XFx0bmJwX3ZsYW5fc2V0X3ZsYW5fZGV2X3N0YXRlKHAsIHYtXFx1MDAzZXZpZCk7XFxubmV0L2JyaWRnZS9icl92bGFuLmM6NDI4OlxcdFxcdGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4odiwgZmFsc2UpO1xcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTQyOS1cXHRcXHRicl9tdWx0aWNhc3RfcG9ydF9jdHhfZGVpbml0KFxcdTAwMjZ2LVxcdTAwM2Vwb3J0X21jYXN0X2N0eCk7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz03MTk9c3RhdGljIGludCBicl92bGFuX2FkZF9leGlzdGluZyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy03NjAtXFx0XFx0KmNoYW5nZWQgPSB0cnVlO1xcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjc2MTpcXHRcXHRicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHZsYW4sIHRydWUpO1xcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTc2Mi1cXHR9XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz04OTQ9aW50IGJyX3ZsYW5fZmlsdGVyX3RvZ2dsZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHVuc2lnbmVkIGxvbmcgdmFsLFxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmMtOTIwLVxcdFxcdGJyX2luZm8oYnIsIFxcXCJ2bGFuIGZpbHRlcmluZyBkaXNhYmxlZCwgYXV0b21hdGljYWxseSBkaXNhYmxpbmcgbXVsdGljYXN0IHZsYW4gc25vb3BpbmdcXFxcblxcXCIpO1xcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjkyMTpcXHRcXHRicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3BpbmcoYnIsIGZhbHNlLCBOVUxMKTtcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy05MjItXFx0fVxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuX29wdGlvbnMuYz01NTA9c3RhdGljIGludCBicl92bGFuX3Byb2Nlc3NfZ2xvYmFsX29uZV9vcHRzKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlICpicixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbl9vcHRpb25zLmMtNTY0LVxcdFxcdG1jX3Nub29waW5nID0gbmxhX2dldF91OCh0YltCUklER0VfVkxBTkRCX0dPUFRTX01DQVNUX1NOT09QSU5HXSk7XFxubmV0L2JyaWRnZS9icl92bGFuX29wdGlvbnMuYzo1NjU6XFx0XFx0aWYgKGJyX211bHRpY2FzdF90b2dnbGVfZ2xvYmFsX3ZsYW4odiwgISFtY19zbm9vcGluZykpXFxubmV0L2JyaWRnZS9icl92bGFuX29wdGlvbnMuYy01NjYtXFx0XFx0XFx0KmNoYW5nZWQgPSB0cnVlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMTo1OToxNi43MzgwMDM4NTNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjkwNDYwMDA1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBCcmlkZ2UgTXVsdGljYXN0IEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiB0cmFjaW5nIHRoZSBjYWxsIHBhdGhzIHJlbGF0ZWQgdG8gbXVsdGljYXN0IG1hbmFnZW1lbnQgaW4gdGhlIExpbnV4IGJyaWRnZSBjb2RlLiBJdCBsb29rcyBsaWtlIGBicl9tdWx0aWNhc3RfdG9nZ2xlYCBpcyB0cmlnZ2VyZWQgdGhyb3VnaCB0d28gbWFpbiBhdmVudWVzOiBzeXNmcyB2aWEgYG11bHRpY2FzdF9zbm9vcGluZ19zdG9yZWAgYW5kIG5ldGxpbmsgdXNpbmcgYGJyX2NoYW5nZWxpbmtgLiBTaW1pbGFybHksIGBicl9tdWx0aWNhc3RfZGVsX3BvcnRgIGdldHMgY2FsbGVkIHZpYSBgYnJfZGVsX2lmYCwgd2hpY2ggaXRzZWxmIGNhbiBiZSBpbnZva2VkIHRocm91Z2ggbmV0bGluaydzIGBSVE1fREVMTElOS2Agb3IgdGhlIGlvY3RsIGBTSU9DQlJERUxJRmAuIFRoZSBrZXkgdGFrZWF3YXkgaGVyZSBpcyB0aGF0IGJvdGggb2YgdGhlc2UgYXJlIGRlZmluaXRlbHkgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZS4gRnVydGhlcm1vcmUsIHNpbmNlIHdlJ3JlIGRlYWxpbmcgd2l0aCBuZXR3b3JrIG5hbWVzcGFjZXMsIGV2ZW4gdW5wcml2aWxlZ2VkIHVzZXJzIGNhbiBwb3RlbnRpYWxseSByZWFjaCB0aGVzZSBmdW5jdGlvbnMuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGlkZW50aWZ5IHRoZSBjcnVjaWFsIGVudHJ5IHBvaW50cyB0aGF0IGFyZSB3b3J0aCBmb2N1c2luZyBvbiBmb3IgbW9yZSBpbiBkZXB0aCBhbmFseXNpcy4gYGJyX211bHRpY2FzdF9kZWxfcG9ydGAganVtcHMgb3V0IGFzIGEgZ29vZCBjYW5kaWRhdGUuIGBicl9tdWx0aWNhc3RfdG9nZ2xlYCwgYGJyX211bHRpY2FzdF9hZGRfcG9ydGAsIGFuZCBgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nYCBhbHNvIGFwcGVhciBwcm9taXNpbmcgZnJvbSB0aGlzIGZpcnN0IHBhc3MuXG5cbk5vdywgbGV0J3MgZGl2ZSBpbnRvIGBuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jYCB0byBleGFtaW5lIGBicl9tdWx0aWNhc3RfZGVsX3BvcnRgIGFuZCBgYnJfbXVsdGljYXN0X3RvZ2dsZWAuIEhhbmcgb24uLi4gYF9fYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydF9jdHhgIGlzIHN0YXRpYy4gVGhhdCBtZWFucyB3ZSBzaG91bGQgcGl2b3Qgb3VyIGF0dGVudGlvbiB0byB0aGUgbm9uLXN0YXRpYyBjb3VudGVycGFydHMgc3VjaCBhcyBgYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydGAsIGBicl9tdWx0aWNhc3RfdG9nZ2xlX3BvcnRgLCBvciwgYWdhaW4sIGBicl9tdWx0aWNhc3RfdG9nZ2xlYC4gSSdsbCBzdGFydCBieSBmb2N1c2luZyBvbiBgYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMTczLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDExOjU5OjIzLjY0MjYwNjg3NloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYyMDMxNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYnJpZGdlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTIxMTQ9c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X2VuYWJsZV9wb3J0X2N0eChzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdF9wb3J0ICpwbWN0eClcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjEyNy1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjIxMjg6c3RhdGljIHZvaWQgX19icl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0X2N0eChzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdF9wb3J0ICpwbWN0eClcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIxMjkte1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMTYyLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MjE2MzpzdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0X2N0eChzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdF9wb3J0ICpwbWN0eClcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIxNjQte1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMTczLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MjE3NDpcXHRfX2JyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRfY3R4KHBtY3R4KTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIxNzUtXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmJyLVxcdTAwM2VtdWx0aWNhc3RfbG9jayk7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTIxNzg9c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X3RvZ2dsZV9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsIGJvb2wgb24pXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIyMDItXFx0XFx0XFx0ZWxzZVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MjIwMzpcXHRcXHRcXHRcXHRicl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0X2N0eChwbWN0eCk7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMjA0LVxcdFxcdH1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjIxMi1cXHRlbHNlXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoyMjEzOlxcdFxcdGJyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRfY3R4KFxcdTAwMjZwb3J0LVxcdTAwM2VtdWx0aWNhc3RfY3R4KTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIyMTQtfVxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0yMjE2PXZvaWQgYnJfbXVsdGljYXN0X2VuYWJsZV9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIyMjAtXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoyMjIxOnZvaWQgYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0KVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjIyMi17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQzMTg9dm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzNTctXFx0XFx0ZWxzZVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDM1ODpcXHRcXHRcXHRfX2JyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRfY3R4KFxcdTAwMjZ2bGFuLVxcdTAwM2Vwb3J0X21jYXN0X2N0eCk7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzU5LVxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZici1cXHUwMDNlbXVsdGljYXN0X2xvY2spO1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00MzgzPWludCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3Bpbmcoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBib29sIG9uLFxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDEwLVxcdFxcdGlmIChvbilcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQ0MTE6XFx0XFx0XFx0YnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydF9jdHgoXFx1MDAyNnAtXFx1MDAzZW11bHRpY2FzdF9jdHgpO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQxMi1cXHRcXHRlbHNlXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQ2NzE9c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X2Rpc2FibGVfYWxsX3BvcnRzKHN0cnVjdCBuZXRfYnJpZGdlICpicilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDY3OC1cXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcnQsIFxcdTAwMjZici1cXHUwMDNlcG9ydF9saXN0LCBsaXN0KVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDY3OTpcXHRcXHRfX2JyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRfY3R4KFxcdTAwMjZwb3J0LVxcdTAwM2VtdWx0aWNhc3RfY3R4KTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ2ODAtfVxcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9OTc4PXZvaWQgYnJfbXVsdGljYXN0X2VuYWJsZV9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpO1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjk3OTp2b2lkIGJyX211bHRpY2FzdF9kaXNhYmxlX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCk7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtOTgwLXZvaWQgYnJfbXVsdGljYXN0X2luaXQoc3RydWN0IG5ldF9icmlkZ2UgKmJyKTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTE0MTM9c3RhdGljIGlubGluZSB2b2lkIGJyX211bHRpY2FzdF9lbmFibGVfcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0KVxcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTQxNi1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxNDE3OnN0YXRpYyBpbmxpbmUgdm9pZCBicl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTQxOC17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3N0cF9pZi5jPTk5PXZvaWQgYnJfc3RwX2Rpc2FibGVfcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwKVxcbi0tXFxubmV0L2JyaWRnZS9icl9zdHBfaWYuYy0xMTctXFx0XFx0YnJfZmRiX2RlbGV0ZV9ieV9wb3J0KGJyLCBwLCAwLCAwKTtcXG5uZXQvYnJpZGdlL2JyX3N0cF9pZi5jOjExODpcXHRicl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0KHApO1xcbm5ldC9icmlkZ2UvYnJfc3RwX2lmLmMtMTE5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMTo1OToyMy42ODg4MTgwNDVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI5Mjc3NzAyODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE11bHRpY2FzdCBTbm9vcGluZyBGdW5jdGlvbmFsaXR5IGluIHRoZSBCcmlkZ2UqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIE15IHByaW1hcnkgZ29hbCBoZXJlIGlzIHRvIGlkZW50aWZ5IHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgcmVsYXRlZCB0byBtdWx0aWNhc3Qgc25vb3Bpbmcgd2l0aGluIHRoZSBicmlkZ2UgYW5kIHVuZGVyc3RhbmQgdGhlaXIgY2FsbCBncmFwaC4gSSdtIGZvY3VzaW5nIG9uIHRoZSBpbXBhY3Qgb2YgcG9ydCBzdGF0ZSBjaGFuZ2VzIGFuZCBWTEFOIGludGVncmF0aW9uLlxuXG5GaXJzdCwgSSBzZWUgdGhhdCBgYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydGAgaXMgdHJpZ2dlcmVkIGJ5IGBicl9zdHBfZGlzYWJsZV9wb3J0YCwgd2hpY2ggaW4gdHVybiBpcyBjYWxsZWQgd2hlbiBhIHBvcnQgZ29lcyBkb3duIG9yIGlzIHJlbW92ZWQuIFRoYXQgbWVhbnMgaXTigJlzIGEga2V5IHBvaW50IHRvIHN0YXJ0IHdpdGguXG5cbkknbSBtb3Zpbmcgb24gdG8gYGJyX211bHRpY2FzdF9kZWxfcG9ydGAuIFRoaXMgZnVuY3Rpb24gbG9va3MgaW1wb3J0YW50IGJlY2F1c2UgaXQncyBjYWxsZWQgZnJvbSBgZGVsX25icGAgYW5kIGFuIGVycm9yIHBhdGggd2l0aGluIGBicl9hZGRfaWZgLiBUaGlzIGluZGljYXRlcyBpdCBoYW5kbGVzIHRoZSByZW1vdmFsIG9mIGEgcG9ydCBhbmQgYXNzb2NpYXRlZCByZXNvdXJjZXMuXG5cbk5vdywgbGV0J3MgZXhwbG9yZSBgYnJfbXVsdGljYXN0X3RvZ2dsZWAuIEkgc2VlIHRoYXQgaXQncyBjYWxsZWQgZnJvbSBgYnJfY2hhbmdlbGlua2AgYW5kIGBtdWx0aWNhc3Rfc25vb3Bpbmdfc3RvcmVgLiBUaGlzIGZ1bmN0aW9uIGNsZWFybHkgbWFuYWdlcyB0aGUgb3ZlcmFsbCBlbmFibGluZy9kaXNhYmxpbmcgb2Ygc25vb3BpbmcsIHByb2JhYmx5IGluIHJlc3BvbnNlIHRvIGxpbmsgc3RhdGUgY2hhbmdlcyBvciBjb25maWd1cmF0aW9uIGNoYW5nZXMuXG5cbk5leHQsIEkgbmVlZCB0byBjaGVjayBgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nYCwgd2hpY2ggaXMgdHJpZ2dlcmVkIGJ5IGBicl9ib29sb3B0X3RvZ2dsZWAuIEl0IGxvb2tzIGxpa2UgaXQgaGFuZGxlcyB0aGUgdG9nZ2xpbmcgb2Ygc25vb3BpbmcgYXQgdGhlIFZMQU4gbGV2ZWwuXG5cblNpbWlsYXJseSwgSSBzaG91bGQgY2hlY2sgYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gIHNpbmNlIGl0IGlzIGNhbGxlZCBmcm9tIGBicl92bGFuX2FkZF9leGlzdGluZ2AsIGBfX3ZsYW5fZGVsYCwgYF9fdmxhbl9hZGRgLCBhbmQgYGJyX3ZsYW5fcHV0X21hc3RlcmAuIFRoaXMgZnVuY3Rpb24gbG9va3MgZXNzZW50aWFsIGZvciBhZGRpbmcvcmVtb3ZpbmcgVkxBTnMgYW5kIHRoZWlyIHJlbGF0aW9uc2hpcHMgd2l0aCBzbm9vcGluZy5cblxuSSBhbHNvIG5lZWQgdG8gY2hlY2sgYGJyX211bHRpY2FzdF90b2dnbGVfZ2xvYmFsX3ZsYW5gIHNpbmNlIGl0IGlzIGNhbGxlZCBmcm9tIGBicl92bGFuX3Byb2Nlc3NfZ2xvYmFsX29uZV9vcHRzYC4gVGhpcyBpcyByZWxhdGVkIHRvIHRoZSBnbG9iYWwgY29uZmlndXJhdGlvbiBvZiBzbm9vcGluZyBvbiBWTEFOcy5cblxuVGhlIG5leHQgY3JpdGljYWwgZnVuY3Rpb24gc2VlbXMgdG8gYmUgYGJyX211bHRpY2FzdF9hZGRfcG9ydGAuIEl0J3MgY2FsbGVkIGZyb20gYGJyX2FkZF9pZmAsIHNvIGl0J3MgaW52b2x2ZWQgaW4gYWRkaW5nIGEgcG9ydCB0byB0aGUgYnJpZGdlLlxuXG5BbHNvIGBicl9tdWx0aWNhc3RfZW5hYmxlX3BvcnRgLCB3aGljaCBpcyBjYWxsZWQgZnJvbSBgYnJfc3RwX2VuYWJsZV9wb3J0YC5cblxuYGJyX211bHRpY2FzdF9kZWxfcG9ydF9ncm91cGAgaXMgdHJpZ2dlcmVkIGZyb20gYGJyX21kYl9hZGRfZ3JvdXBfc3Rhcl9nYCwgd2hpY2ggaXMgcmVsYXRlZCB0byBwb3J0IGdyb3Vwcy4gV2hpbGUgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmVuJ3QgZGlyZWN0bHkgbGlua2VkIHRvIGl0LCBwb3J0IGdyb3VwcyBhcmUgY2xlYXJseSByZWxhdGVkIHRvIHRoaXMgYXJlYS5cblxuTG9va2luZyBjbG9zZWx5IGF0IHdoYXQgZnVuY3Rpb25zIGFyZSBiZWluZyBjaGFuZ2VkLCBJIHNlZSBgYnJfbXVsdGljYXN0X2RlbF9wb3J0YCBhbmQgYF9fYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydF9jdHhgLiBMZXQncyB1bmRlcnN0YW5kIGhvdyB0aGVzZSBhcmUgaW50ZXJjb25uZWN0ZWQuXG5cbmBfX2JyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRfY3R4YCBpcyBjYWxsZWQgYnkgYGJyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRfY3R4YCwgYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gLCBhbmQgYGJyX211bHRpY2FzdF9kaXNhYmxlX2FsbF9wb3J0c2AuIFRoaXMgcG9pbnRzIHRvIGl0cyByb2xlIGluIGFjdHVhbGx5IGRpc2FibGluZyB0aGUgcG9ydCBjb250ZXh0LCBwb3RlbnRpYWxseSBhcyBhIGhlbHBlci5cblxuSSBzZWUgdGhhdCBgYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydF9jdHhgIGlzIGNhbGxlZCBmcm9tIGBicl9tdWx0aWNhc3RfdG9nZ2xlX3BvcnRgICh3aGljaCBpcyBpbiB0dXJuIGNhbGxlZCBmcm9tIGBicl9tdWx0aWNhc3RfZW5hYmxlX3BvcnRgIGFuZCBgYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydGApIGFuZCBhbHNvIGZyb20gYGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZ2AuIEl0IGhhbmRsZXMgcG9ydC1sZXZlbCBzbm9vcGluZyBjaGFuZ2VzLlxuXG5UaGVuIGBicl9tdWx0aWNhc3RfZGlzYWJsZV9hbGxfcG9ydHNgIGlzIGNhbGxlZCBieSBgYnJfbXVsdGljYXN0X3RvZ2dsZWAsIHN1Z2dlc3RpbmcgdGhhdCB0aGlzIGlzIGEgZ2xvYmFsIG9wZXJhdGlvbi5cblxuVGhlcmVmb3JlLCB0aGUga2V5IGVudHJ5IHBvaW50cyBJJ20gZm9jdXNpbmcgb24gYXJlOiBgYnJfbXVsdGljYXN0X2RlbF9wb3J0YCwgYGJyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRgLCBgYnJfbXVsdGljYXN0X3RvZ2dsZWAsIGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYCwgYW5kIGBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3BpbmdgLlxuXG5Ob3csIEknbGwgY2hlY2sgdGhhdCB0aGVzZSBmdW5jdGlvbnMgYXJlIGV4cG9ydGVkLiBHb29kLCBgYnJfbXVsdGljYXN0X2RlbF9wb3J0YCwgYGJyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRgLCBgYnJfbXVsdGljYXN0X3RvZ2dsZWAsIGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYCwgYW5kIGBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3BpbmdgIGFyZSBhbGwgbm9uLXN0YXRpYy4gVGhpcyBjb25maXJtcyB0aGF0IHRoZXNlIGFyZSBwYXJ0IG9mIHRoZSBwdWJsaWMgQVBJLCB3aGljaCBpcyBjcml0aWNhbC5cblxuRmluYWxseSwgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGFsbCB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQgdG8gc3VwcG9ydCB0aGVzZSBmdW5jdGlvbnMuIEknbGwgbmVlZCBgQlJJREdFYCwgYElORVRgLCBhbmQgYEJSSURHRV9JR01QX1NOT09QSU5HYC4gU2luY2UgVkxBTi1yZWxhdGVkIGZ1bmN0aW9ucyBhcmUgaW4gcGxheSAoZS5nLiwgYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gLCBgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nYCwgYW5kIGBcblxuIiwiSW5wdXRUb2tlbnMiOjEzMTY4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMTo1OTozNi42MTY1OTE2MjlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA4NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2JyaWRnZS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUwLFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDUwOlxcdGNvbmZpZyBCUklER0VfVkxBTl9GSUxURVJJTkdcXG4gIDUxOlxcdFxcdGJvb2wgXFxcIlZMQU4gZmlsdGVyaW5nXFxcIlxcbiAgNTI6XFx0XFx0ZGVwZW5kcyBvbiBCUklER0VcXG4gIDUzOlxcdFxcdGRlcGVuZHMgb24gVkxBTl84MDIxUVxcbiAgNTQ6XFx0XFx0ZGVmYXVsdCBuXFxuICA1NTpcXHRcXHRoZWxwXFxuICA1NjpcXHRcXHQgIElmIHlvdSBzYXkgWSBoZXJlLCB0aGVuIHRoZSBFdGhlcm5ldCBicmlkZ2Ugd2lsbCBiZSBhYmxlIHNlbGVjdGl2ZWx5XFxuICA1NzpcXHRcXHQgIHJlY2VpdmUgYW5kIGZvcndhcmQgdHJhZmZpYyBiYXNlZCBvbiBWTEFOIGluZm9ybWF0aW9uIGluIHRoZSBwYWNrZXRcXG4gIDU4OlxcdFxcdCAgYW55IFZMQU4gaW5mb3JtYXRpb24gY29uZmlndXJlZCBvbiB0aGUgYnJpZGdlIHBvcnQgb3IgYnJpZGdlIGRldmljZS5cXG4gIDU5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMTo1OTozNi42MTY2NTQwODlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM0NjU1NjEzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkNvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzOiBBIFJlZmluZW1lbnQqKlxuXG5SaWdodCwgc28gYEJSSURHRV9WTEFOX0ZJTFRFUklOR2AgaXMgZGVmaW5pdGVseSBjb250aW5nZW50IG9uIGJvdGggYEJSSURHRWAgYW5kIGBWTEFOXzgwMjFRYC4gTWFrZXMgc2Vuc2UsIHdlIG5lZWQgdGhlIGJyaWRnaW5nIGZ1bmN0aW9uYWxpdHkgYW5kIHRoZSA4MDIuMVEgdGFnZ2luZyBzdXBwb3J0LiBUaGVyZWZvcmUsIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBgVkxBTl84MDIxUWAgaXMgaW5jbHVkZWQgaW4gbXkgYEVuYWJsZUNvbmZpZ3NgIGxpc3QuIE5vIGJyYWluZXIgdGhlcmUuXG5cbk5vdywgbGV0J3Mgc2VlIGFib3V0IGBCUklER0VfSUdNUF9TTk9PUElOR2AuIEkgc2VlbSB0byByZWNhbGwgaXQgZGVwZW5kaW5nIG9uIGBJTkVUYCwgc28gbGV0J3MganVzdCBjb25maXJtIHRoYXQgZGVwZW5kZW5jeS4gWWVwLCB0aGVyZSBpdCBpcy4gR29vZC4gU28sIGJhc2VkIG9uIHdoYXQgSSBzZWUgaGVyZSwgbXkgYEVuYWJsZUNvbmZpZ3NgIHNob3VsZCBjb250YWluIHRoZSBmb2xsb3dpbmc6IGBCUklER0VgLCBgSU5FVGAsIGBCUklER0VfSUdNUF9TTk9PUElOR2AsIGBWTEFOXzgwMjFRYCwgYW5kIGBCUklER0VfVkxBTl9GSUxURVJJTkdgLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBjb3JlIGNvbXBvbmVudHMgSSBuZWVkLCBhY2NvcmRpbmcgdG8gd2hhdCdzIGRlZmluZWQgaGVyZS5cblxuSnVzdCB0byBiZSBzYWZlLCBJIHNob3VsZCBxdWlja2x5IHZlcmlmeSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGRpcmVjdCBkZXBlbmRlbmNpZXMgdGhhdCBJIG1pZ2h0IGhhdmUgb3Zlcmxvb2tlZCBmb3IgYEJSSURHRWAgaXRzZWxmLiBXZSBkb24ndCB3YW50IGFueSB1bmV4cGVjdGVkIHN1cnByaXNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUzOTYsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMTo1OTo0MC45NjMyMTI3NTNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MDYyMzA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUklER0UkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9icmlkZ2UvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvS2NvbmZpZy01LVxcbm5ldC9icmlkZ2UvS2NvbmZpZzo2OmNvbmZpZyBCUklER0VcXG5uZXQvYnJpZGdlL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiODAyLjFkIEV0aGVybmV0IEJyaWRnaW5nXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMTo1OTo0MS4wMDkyODExNjFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM5MDQ1MjU0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRXhhbWluaW5nIEJyaWRnZSBEZXBlbmRlbmNpZXMgaW4gS2NvbmZpZyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBgQlJJREdFYCBjb25maWd1cmF0aW9uIGFuZCBpdHMgZGVwZW5kZW5jaWVzIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbS4gVGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgaXMgYG5ldC9icmlkZ2UvS2NvbmZpZ2AuIFRoaXMgZmlsZSBzaG91bGQgaG9sZCB0aGUgY29yZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgYnJpZGdpbmcgZnVuY3Rpb25hbGl0eSBhbmQsIGNydWNpYWxseSwgc3BlY2lmeSB3aGF0IG90aGVyIGtlcm5lbCBmZWF0dXJlcyBvciBtb2R1bGVzIGFyZSByZXF1aXJlZCB0byBiZSBlbmFibGVkIG9yIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuIEkgd2FudCB0byBjb25maXJtIG15IGFzc3VtcHRpb25zIGFuZCBlbnN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnkga2V5IGRlcGVuZGVuY2llcyBiZWZvcmUgSSBtb3ZlIGZvcndhcmQgd2l0aCBteSBhbmFseXNpcy4gSXQncyB0aGUgc3RhbmRhcmQgcHJhY3RpY2UgLSBhdm9pZCB3YXN0aW5nIHRpbWUgbGF0ZXIgYmVjYXVzZSBvZiBvdmVyc2lnaHRzIGVhcmxpZXIuIFRoYXQgZmlsZSBzaG91bGQgcHJvdmlkZSB0aGUgZGVmaW5pdGl2ZSBzb3VyY2Ugb2YgdHJ1dGggZm9yIHRoZSBrZXJuZWwncyBjb25maWd1cmF0aW9uIG9wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1ODc5LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTE6NTk6NDQuMzk5NzM2MDU1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxMTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9icmlkZ2UvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA2LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICA2OlxcdGNvbmZpZyBCUklER0VcXG4gICA3OlxcdFxcdHRyaXN0YXRlIFxcXCI4MDIuMWQgRXRoZXJuZXQgQnJpZGdpbmdcXFwiXFxuICAgODpcXHRcXHRzZWxlY3QgTExDXFxuICAgOTpcXHRcXHRzZWxlY3QgU1RQXFxuICAxMDpcXHRcXHRoZWxwXFxuICAxMTpcXHRcXHQgIElmIHlvdSBzYXkgWSBoZXJlLCB0aGVuIHlvdXIgTGludXggYm94IHdpbGwgYmUgYWJsZSB0byBhY3QgYXMgYW5cXG4gIDEyOlxcdFxcdCAgRXRoZXJuZXQgYnJpZGdlLCB3aGljaCBtZWFucyB0aGF0IHRoZSBkaWZmZXJlbnQgRXRoZXJuZXQgc2VnbWVudHMgaXRcXG4gIDEzOlxcdFxcdCAgaXMgY29ubmVjdGVkIHRvIHdpbGwgYXBwZWFyIGFzIG9uZSBFdGhlcm5ldCB0byB0aGUgcGFydGljaXBhbnRzLlxcbiAgMTQ6XFx0XFx0ICBTZXZlcmFsIHN1Y2ggYnJpZGdlcyBjYW4gd29yayB0b2dldGhlciB0byBjcmVhdGUgZXZlbiBsYXJnZXJcXG4gIDE1OlxcdFxcdCAgbmV0d29ya3Mgb2YgRXRoZXJuZXRzIHVzaW5nIHRoZSBJRUVFIDgwMi4xIHNwYW5uaW5nIHRyZWUgYWxnb3JpdGhtLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMTo1OTo0NC4zOTk4MTg0NTVaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTMzNTQyNzAxMTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCcmlkZ2UgTXVsdGljYXN0IFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgdGhlIGRlcGVuZGVuY2llcy4uLiBgQlJJREdFYCBpcyB0aGUgcm9vdCwgYnV0IHJlbGllcyBpbXBsaWNpdGx5IG9uIGBORVRgLiBgSU5FVGAgYW5kIGBWTEFOXzgwMjFRYCBhcmUgc3RhbmRhcmQgYW5kIGV4cGVjdGVkLiBDcnVjaWFsbHksIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgaGVyZSBhcmUgYEJSSURHRV9JR01QX1NOT09QSU5HYCBhbmQgYEJSSURHRV9WTEFOX0ZJTFRFUklOR2AuIFRoYXQncyB3aGVyZSB0aGUgZm9jdXMgbmVlZHMgdG8gYmUuXG5cbk5vdywgdGhpcyBwYXRjaC4uLiBpdCdzIGFkZHJlc3NpbmcgYSBzdWJ0bGUgY29uY3VycmVuY3kgaXNzdWUgd2l0aGluIHRoZSBicmlkZ2UncyBtdWx0aWNhc3QgaGFuZGxpbmcsIHNwZWNpZmljYWxseSB3aGVuIGRlbGV0aW5nIG11bHRpY2FzdCBncm91cHMgZnJvbSBhIHBvcnQncyBgbWdsaXN0YC4gVGhlIGNvcmUgcHJvYmxlbSBsaWVzIHdpdGhpbiB0aGUgYGJyX211bHRpY2FzdF9kZWxfcG9ydGAgYW5kIGBfX2JyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRfY3R4YCBmdW5jdGlvbnMuIFRoZSBgaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZWAgbWFjcm8sIHVzZWQgdG8gaXRlcmF0ZSB0aHJvdWdoIHRoZSBsaXN0IG9mIG11bHRpY2FzdCBncm91cHMsIGNhbiBnZXQgdHJpcHBlZCB1cCBpZiB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gYGJyX211bHRpY2FzdF9maW5kX2RlbF9wZ2AgcmVtb3ZlcyB0aGUgZW50cnkgaXQncyBjdXJyZW50bHkgcHJvY2Vzc2luZyAqb3IqIG90aGVyIGVudHJpZXMgb24gdGhlIGxpc3QuIFRoZSBvcmlnaW5hbCBjb2RlJ3MgaXRlcmF0b3IsIHNwZWNpZmljYWxseSB0aGUgYG5gIHBvaW50ZXIgaW4gdGhlIGBobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlYCwgY291bGQgYmVjb21lIGludmFsaWQgb3Igc3RhbGUsIGxlYWRpbmcgdG8gcG90ZW50aWFsIGlzc3VlcyBsaWtlIG1pc3NlZCBlbnRyaWVzIGR1cmluZyBpdGVyYXRpb24sIG9yIGV2ZW4gdXNlLWFmdGVyLWZyZWUsIHRob3VnaCB0aGUgY29kZSBjb21tZW50IGluZGljYXRlcyB0aGF0IHBvcnQgZ3JvdXBzIGFyZSBvbmx5IGZyZWVkIGJ5IHRoZSBHQyB3b3JrIHVuZGVyIGBtdWx0aWNhc3RfbG9ja2AsIHNvIGl0IGlzIG1vcmUgbGlrZWx5IHRoYXQgb25seSBlbnRyaWVzIGFyZSBtaXNzZWQuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgYHJlc3RhcnQ6YCBsYWJlbCBhbmQgdXNlcyBhIGB3aGlsZWAgbG9vcCwgYWxvbmcgd2l0aCBhIGNoZWNrIGFmdGVyIHRoZSBkZWxldGUsIHRvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSBhbiBlbnRyeSBpcyBkZWxldGVkIHdpdGhpbiB0aGUgbG9vcC4gVGhpcyBlbnN1cmVzIHRoYXQgdGhlIGl0ZXJhdGlvbiByZXN0YXJ0cyBmcm9tIHRoZSBiZWdpbm5pbmcgaWYgYSBncm91cCBpcyByZW1vdmVkLCBhbmQgcHJldmVudHMgdGhlIHN0YWxlIHBvaW50ZXIgcHJvYmxlbS5cblxuVGhpcyBpcyBhIGZ1bmN0aW9uYWwgZml4IHRvIGNvcmUgYnJpZGdlIG11bHRpY2FzdCBsb2dpYywgYW5kIHNvLCBpdCBuZWVkcyB0aG9yb3VnaCBmdXp6aW5nLlxuXG5NeSBwcmltYXJ5IGZvY3VzIGhlcmUgaXMgZ29pbmcgdG8gYmUgdGhvc2UgZnVuY3Rpb25zOiBgYnJfbXVsdGljYXN0X2RlbF9wb3J0YCBhbmQgYF9fYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydF9jdHhgLiBCdXQsIHRvIGJlIGNvbXByZWhlbnNpdmUsIEkgbmVlZCB0byBpbmNsdWRlIHRoZSBlbnRyeSBwb2ludHMgZm9yIHRoZXNlLCBwYXJ0aWN1bGFybHkgYGJyX211bHRpY2FzdF90b2dnbGVgLCBgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbmAgYW5kIGBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3BpbmdgLCBidXQgYWxzbyBgYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydGAuIE5vdywgaXMgYGJyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRgICp0aGUqIGJlc3QgZW50cnkgcG9pbnQgZm9yIGBfX2JyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRfY3R4YD8gTGV0J3MgdHJhY2UgaXQuIEl0IHNlZW1zIGBfX2JyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRfY3R4YCBpcyBpbmRlZWQgY2FsbGVkIHZpYSBgYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydF9jdHhgLCB3aGljaCBpcyB1bHRpbWF0ZWx5IGNhbGxlZCBieSBgYnJfbXVsdGljYXN0X3RvZ2dsZV9wb3J0YC4gQnV0LCBgYnJfbXVsdGljYXN0X3RvZ2dsZV9wb3J0YCBpcyBhbHNvIGNhbGxlZCBieSBgYnJfbXVsdGljYXN0X2VuYWJsZV9wb3J0YC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdCBsb2dpYyBiZXR0ZXIgLSBkb2VzIGBicl9tdWx0aWNhc3RfZW5hYmxlX3BvcnRgIGRpc2FibGUgZmlyc3Q/IE5vLCBhY3R1YWxseSwgYGJyX211bHRpY2FzdF90b2dnbGVfcG9ydGAgaXMgdGhlIHJlYWwgY2VudHJhbCBwb2ludCwgYW5kIGNhbiBiZSBjYWxsZWQgZWl0aGVyIHdpdGggYG9uYCBhcyBmYWxzZSwgd2hpY2ggd2lsbCBjYWxsIHRoZSBkaXNhYmxlIHJvdXRpbmUsICpvciogaWYgYG9uYCBpcyB0cnVlIGJ1dCBgYnJfbXVsdGljYXN0X3BvcnRfY3R4X3ZsYW5fZGlzYWJsZWRgIGlzIHRydWUuLi4gSSBuZWVkIHRvIGNoZWNrIHRoZSBjYWxsIG9mIGBicl9tdWx0aWNhc3RfdG9nZ2xlX3BvcnRgIG1vcmUgY2xvc2VseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYyNTYsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzExLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTE6NTk6NTcuNzU0MDkxODk2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjM4MzY4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicl9tdWx0aWNhc3RfdG9nZ2xlX3BvcnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JyaWRnZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0yMTYzPXN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRfY3R4KHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0X3BvcnQgKnBtY3R4KVxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMTc3LVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MjE3ODpzdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwgYm9vbCBvbilcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIxNzkte1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0yMjE2PXZvaWQgYnJfbXVsdGljYXN0X2VuYWJsZV9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMjE3LXtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjIyMTg6XFx0YnJfbXVsdGljYXN0X3RvZ2dsZV9wb3J0KHBvcnQsIHRydWUpO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjIxOS19XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTIyMjE9dm9pZCBicl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMjIyLXtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjIyMjM6XFx0YnJfbXVsdGljYXN0X3RvZ2dsZV9wb3J0KHBvcnQsIGZhbHNlKTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIyMjQtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMTo1OTo1Ny44MDA0ODE3OTRaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA5MDU2NzcxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgY29kZS5cblxuKipBbmFseXppbmcgYGJyX211bHRpY2FzdF90b2dnbGVfcG9ydGAqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgcmlnaHQgaW50byBpdC4gVGhlIGZ1bmN0aW9uIG5hbWUsIGBicl9tdWx0aWNhc3RfdG9nZ2xlX3BvcnRgLCBpbW1lZGlhdGVseSB0ZWxscyBtZSBpdCdzIGRlYWxpbmcgd2l0aCBtdWx0aWNhc3QgdHJhZmZpYyBvbiBhIGJyaWRnZSwgc3BlY2lmaWNhbGx5IHRvZ2dsaW5nIGEgcG9ydCdzIHBhcnRpY2lwYXRpb24uIEkgd2FudCB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyBqb2luaW5nIGFuZCBsZWF2aW5nIG11bHRpY2FzdCBncm91cHMsIHByb2JhYmx5IGludGVyYWN0aW5nIHdpdGggdGhlIHVuZGVybHlpbmcgSUdNUC9NTEQgbG9naWMgb3Igc2ltaWxhci4gSSdtIGxvb2tpbmcgZm9yIHRoZSBjb3JlIGFjdGlvbnM6IGFyZSB3ZSBhZGRpbmcgb3IgZGVsZXRpbmcgdGhlIHBvcnQgZnJvbSBpbnRlcm5hbCBzdHJ1Y3R1cmVzPyBXaGF0IGZsYWdzIG9yIHN0YXRlIHZhcmlhYmxlcyBhcmUgYmVpbmcgbWFuaXB1bGF0ZWQ/IElzIHRoZXJlIGFueSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBoYXJkd2FyZSBmb3J3YXJkaW5nIHRhYmxlIGludm9sdmVkLCBhbmQgaWYgc28sIGhvdz8gSSBhbHNvIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcG90ZW50aWFsIGVycm9yIGhhbmRsaW5nIOKAkyBhcmUgdGhlcmUgY2hlY2tzIGZvciBpbnZhbGlkIHBvcnQgbnVtYmVycywgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMsIG9yIG90aGVyIGNvbW1vbiBpc3N1ZXM/IEZpbmFsbHksIEkgbmVlZCB0byBzZWUgdGhlIGNvbnRleHQgaW4gd2hpY2ggaXQncyBiZWluZyBjYWxsZWQsIHRvIHRydWx5IHVuZGVyc3RhbmQgdGhlIGJpZ2dlciBwaWN0dXJlIG9mIHRoaXMgZGVzaWduLiBJcyB0aGlzIGNhbGxlZCBhcyBhIGRpcmVjdCBBUEkgZW50cnlwb2ludCwgb3IgaXMgaXQgdHJpZ2dlcmVkIGJ5IHNvbWUgZXZlbnQsIHN1Y2ggYXMgYSB1c2VyLXNwYWNlIGNvbmZpZ3VyYXRpb24gY29tbWFuZCBvciBhIGhhcmR3YXJlIGNoYW5nZT8gSSdtIGV4cGVjdGluZyB0aGlzIHRvIGJlIGZhaXJseSBpbnZvbHZlZCwgZ2l2ZW4gdGhhdCBtdWx0aWNhc3Qgcm91dGluZyBhbmQgZm9yd2FyZGluZyBjYW4gYmUgY29tcGxleC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg2NDksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjowMDowMS44OTEwNTI2NTZaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA4MzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjE3OCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjE3ODpcXHRzdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwgYm9vbCBvbilcXG4yMTc5OlxcdHtcXG4yMTgwOlxcdCNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkcpXFxuMjE4MTpcXHRcXHRpZiAoYnJfb3B0X2dldChwb3J0LVxcdTAwM2ViciwgQlJPUFRfTUNBU1RfVkxBTl9TTk9PUElOR19FTkFCTEVEKSkge1xcbjIxODI6XFx0XFx0XFx0c3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmc7XFxuMjE4MzpcXHRcXHRcXHRzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuO1xcbjIxODQ6XFx0XFxuMjE4NTpcXHRcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuMjE4NjpcXHRcXHRcXHR2ZyA9IG5icF92bGFuX2dyb3VwX3JjdShwb3J0KTtcXG4yMTg3OlxcdFxcdFxcdGlmICghdmcpIHtcXG4yMTg4OlxcdFxcdFxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbjIxODk6XFx0XFx0XFx0XFx0cmV0dXJuO1xcbjIxOTA6XFx0XFx0XFx0fVxcbjIxOTE6XFx0XFxuMjE5MjpcXHRcXHRcXHQvKiBpdGVyYXRlIGVhY2ggdmxhbiwgdG9nZ2xlIHZsYW4gbXVsdGljYXN0IGNvbnRleHQgKi9cXG4yMTkzOlxcdFxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHZsYW4sIFxcdTAwMjZ2Zy1cXHUwMDNldmxhbl9saXN0LCB2bGlzdCkge1xcbjIxOTQ6XFx0XFx0XFx0XFx0c3RydWN0IG5ldF9icmlkZ2VfbWNhc3RfcG9ydCAqcG1jdHggPVxcbjIxOTU6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx1MDAyNnZsYW4tXFx1MDAzZXBvcnRfbWNhc3RfY3R4O1xcbjIxOTY6XFx0XFx0XFx0XFx0dTggc3RhdGUgPSBicl92bGFuX2dldF9zdGF0ZSh2bGFuKTtcXG4yMTk3OlxcdFxcdFxcdFxcdC8qIGVuYWJsZSB2bGFuIG11bHRpY2FzdCBjb250ZXh0IHdoZW4gc3RhdGUgaXNcXG4yMTk4OlxcdFxcdFxcdFxcdCAqIExFQVJOSU5HIG9yIEZPUldBUkRJTkdcXG4yMTk5OlxcdFxcdFxcdFxcdCAqL1xcbjIyMDA6XFx0XFx0XFx0XFx0aWYgKG9uIFxcdTAwMjZcXHUwMDI2IGJyX3ZsYW5fc3RhdGVfYWxsb3dlZChzdGF0ZSwgdHJ1ZSkpXFxuMjIwMTpcXHRcXHRcXHRcXHRcXHRicl9tdWx0aWNhc3RfZW5hYmxlX3BvcnRfY3R4KHBtY3R4KTtcXG4yMjAyOlxcdFxcdFxcdFxcdGVsc2VcXG4yMjAzOlxcdFxcdFxcdFxcdFxcdGJyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRfY3R4KHBtY3R4KTtcXG4yMjA0OlxcdFxcdFxcdH1cXG4yMjA1OlxcdFxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbjIyMDY6XFx0XFx0XFx0cmV0dXJuO1xcbjIyMDc6XFx0XFx0fVxcbjIyMDg6XFx0I2VuZGlmXFxuMjIwOTpcXHRcXHQvKiB0b2dnbGUgcG9ydCBtdWx0aWNhc3QgY29udGV4dCB3aGVuIHZsYW4gc25vb3BpbmcgaXMgZGlzYWJsZWQgKi9cXG4yMjEwOlxcdFxcdGlmIChvbilcXG4yMjExOlxcdFxcdFxcdGJyX211bHRpY2FzdF9lbmFibGVfcG9ydF9jdHgoXFx1MDAyNnBvcnQtXFx1MDAzZW11bHRpY2FzdF9jdHgpO1xcbjIyMTI6XFx0XFx0ZWxzZVxcbjIyMTM6XFx0XFx0XFx0YnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydF9jdHgoXFx1MDAyNnBvcnQtXFx1MDAzZW11bHRpY2FzdF9jdHgpO1xcbjIyMTQ6XFx0fVxcbjIyMTU6XFx0XFxuMjIxNjpcXHR2b2lkIGJyX211bHRpY2FzdF9lbmFibGVfcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0KVxcbjIyMTc6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjowMDowMS44OTEyNjI3NjZaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDcwNzgzNjcxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTXVsdGljYXN0IENvbnRyb2wgUGF0aHMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBmb3IgdGhlIHByaW1hcnkgY29udHJvbCBwYXRocyBmb3IgbWFuYWdpbmcgbXVsdGljYXN0IGJlaGF2aW9yIG9uIGJyaWRnZSBwb3J0cy4gVGhpbmtpbmcgdGhpcyB0aHJvdWdoLCBgYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydGAgc2VlbXMgbGlrZSBhIHNvbGlkIGVudHJ5IHBvaW50LCBhbmQgdGhhdCBtYWtlcyBzZW5zZSDigJMgaXQncyB0aGUgbmF0dXJhbCBwbGFjZSB0byBzdGFydCB3aGVuIGRpc2FibGluZy4gSSBhbHNvIG5lZWQgdG8gdGhpbmsgYWJvdXQgaG93IGVuYWJsaW5nIGludGVyYWN0cyB3aXRoIHRoaXMsIGFuZCBgYnJfbXVsdGljYXN0X2VuYWJsZV9wb3J0YCBjYXRjaGVzIG15IGF0dGVudGlvbiBiZWNhdXNlIGl0ICpjYW4qIGNhbGwgYGJyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRfY3R4YCBpZiBgb25gIGlzIHRydWUgYnV0IHRoZSBWTEFOIHN0YXRlIGlzbid0IHJpZ2h0LiBUaGF0J3MgY2xldmVyOyBoYW5kbGVzIHRoZSBjb25kaXRpb25hbCBkaXNhYmxlIG5pY2VseS5cblxuVGhlcmVmb3JlLCBzaW5jZSB0aGV5J3JlIHRpZ2h0bHkgY291cGxlZCBpbiB0aGF0IG1hbm5lciwgSSdsbCBwdXQgYm90aCBgYnJfbXVsdGljYXN0X2VuYWJsZV9wb3J0YCBhbmQgYGJyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRgIG9uIG15IGxpc3Qgb2YgcmVsZXZhbnQgZnVuY3Rpb25zLCBlc3BlY2lhbGx5IGJlY2F1c2Ugb25lIGxldmVyYWdlcyB0aGUgb3RoZXIuXG5cblRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUsIEkgc2hvdWxkIGFsc28gdmVyaWZ5IGhvdyB0b2dnbGluZyBWTEFOIHNub29waW5nIGltcGFjdHMgbXVsdGljYXN0IGNvbnRyb2wsIHNvIGxldCdzIHNoaWZ0IGdlYXJzIGFuZCBjaGVjayB0aGUgbG9naWMgd2l0aGluIGBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3BpbmdgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTYwNCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjAwOjA2LjU5OTEwMjcyOFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTMwMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MzgzLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0MzgzOlxcdGludCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3Bpbmcoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBib29sIG9uLFxcbjQzODQ6XFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbjQzODU6XFx0e1xcbjQzODY6XFx0XFx0c3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmc7XFxuNDM4NzpcXHRcXHRzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuO1xcbjQzODg6XFx0XFx0c3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcDtcXG40Mzg5OlxcdFxcbjQzOTA6XFx0XFx0aWYgKGJyX29wdF9nZXQoYnIsIEJST1BUX01DQVNUX1ZMQU5fU05PT1BJTkdfRU5BQkxFRCkgPT0gb24pXFxuNDM5MTpcXHRcXHRcXHRyZXR1cm4gMDtcXG40MzkyOlxcdFxcbjQzOTM6XFx0XFx0aWYgKG9uIFxcdTAwMjZcXHUwMDI2ICFicl9vcHRfZ2V0KGJyLCBCUk9QVF9WTEFOX0VOQUJMRUQpKSB7XFxuNDM5NDpcXHRcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcXFwiQ2Fubm90IGVuYWJsZSBtdWx0aWNhc3QgdmxhbiBzbm9vcGluZyB3aXRoIHZsYW4gZmlsdGVyaW5nIGRpc2FibGVkXFxcIik7XFxuNDM5NTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG40Mzk2OlxcdFxcdH1cXG40Mzk3OlxcdFxcbjQzOTg6XFx0XFx0dmcgPSBicl92bGFuX2dyb3VwKGJyKTtcXG40Mzk5OlxcdFxcdGlmICghdmcpXFxuNDQwMDpcXHRcXHRcXHRyZXR1cm4gMDtcXG40NDAxOlxcdFxcbjQ0MDI6XFx0XFx0YnJfb3B0X3RvZ2dsZShiciwgQlJPUFRfTUNBU1RfVkxBTl9TTk9PUElOR19FTkFCTEVELCBvbik7XFxuNDQwMzpcXHRcXG40NDA0OlxcdFxcdC8qIGRpc2FibGUvZW5hYmxlIG5vbi12bGFuIG1jYXN0IGNvbnRleHRzIGJhc2VkIG9uIHZsYW4gc25vb3BpbmcgKi9cXG40NDA1OlxcdFxcdGlmIChvbilcXG40NDA2OlxcdFxcdFxcdF9fYnJfbXVsdGljYXN0X3N0b3AoXFx1MDAyNmJyLVxcdTAwM2VtdWx0aWNhc3RfY3R4KTtcXG40NDA3OlxcdFxcdGVsc2VcXG40NDA4OlxcdFxcdFxcdF9fYnJfbXVsdGljYXN0X29wZW4oXFx1MDAyNmJyLVxcdTAwM2VtdWx0aWNhc3RfY3R4KTtcXG40NDA5OlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkocCwgXFx1MDAyNmJyLVxcdTAwM2Vwb3J0X2xpc3QsIGxpc3QpIHtcXG40NDEwOlxcdFxcdFxcdGlmIChvbilcXG40NDExOlxcdFxcdFxcdFxcdGJyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRfY3R4KFxcdTAwMjZwLVxcdTAwM2VtdWx0aWNhc3RfY3R4KTtcXG40NDEyOlxcdFxcdFxcdGVsc2VcXG40NDEzOlxcdFxcdFxcdFxcdGJyX211bHRpY2FzdF9lbmFibGVfcG9ydF9jdHgoXFx1MDAyNnAtXFx1MDAzZW11bHRpY2FzdF9jdHgpO1xcbjQ0MTQ6XFx0XFx0fVxcbjQ0MTU6XFx0XFxuNDQxNjpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHZsYW4sIFxcdTAwMjZ2Zy1cXHUwMDNldmxhbl9saXN0LCB2bGlzdClcXG40NDE3OlxcdFxcdFxcdGJyX211bHRpY2FzdF90b2dnbGVfdmxhbih2bGFuLCBvbik7XFxuNDQxODpcXHRcXG40NDE5OlxcdFxcdHJldHVybiAwO1xcbjQ0MjA6XFx0fVxcbjQ0MjE6XFx0XFxuNDQyMjpcXHRib29sIGJyX211bHRpY2FzdF90b2dnbGVfZ2xvYmFsX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6MDA6MDYuNTk5MzE3NDI4WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MzEzMzA2NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBhcyBpZiB0aGV5IHdlcmUgbXkgb3duIGltbWVkaWF0ZSBwcm9jZXNzaW5nOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudDogTXVsdGljYXN0IFNub29waW5nIFRvZ2dsZSBFbnRyeSBQb2ludCoqXG5cblJpZ2h0LCBgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nYCBzZWVtcyBsaWtlIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIGludmVzdGlnYXRpbmcgbXVsdGljYXN0IHNub29waW5nIGZ1bmN0aW9uYWxpdHkuIE15IGd1dCBmZWVsaW5nIGlzIHRoYXQgaXQncyBsaWtlbHkgdGhlIGtleSBmdW5jdGlvbiB0aGF0IHRpZXMgdG9nZXRoZXIgVkxBTi1zcGVjaWZpYyBzbm9vcGluZyBiZWhhdmlvci4gSSdtIGFzc3VtaW5nIGl0J3MgcHJvYmFibHkgdGhlIHRvcC1sZXZlbCBpbnRlcmZhY2UgZm9yIGVuYWJsaW5nIG9yIGRpc2FibGluZyBzbm9vcGluZyB3aXRoaW4gYSBWTEFOIGNvbnRleHQuIEl0J3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoZSBpbXBsZW1lbnRhdGlvbi5cblxuTm93LCBsZXQncyBkcmlsbCBkb3duIGludG8gYGJyX211bHRpY2FzdF90b2dnbGVgLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgZm91bmRhdGlvbmFsIGxvZ2ljIHRoYXQgYGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZ2AgbGlrZWx5IGNhbGxzIG9yIGRlcGVuZHMgb24uIFVuZGVyc3RhbmRpbmcgaG93IHRoZSBjb3JlIG11bHRpY2FzdCBjb250cm9sIHdvcmtzIGlzIGNyaXRpY2FsIGJlZm9yZSBJIHRyeSB0byB1bmRlcnN0YW5kIHRoZSBWTEFOIHNwZWNpZmljIGFkYXB0YXRpb25zLiBUaGlzIHdpbGwgc2V0IHRoZSBzdGFnZSB0byBzZWUgaG93IGl0IG1pZ2h0IGJlIGFkYXB0ZWQgb3IgZXh0ZW5kZWQgZm9yIFZMQU4gaW50ZWdyYXRpb24uIExldCdzIHNlZSB3aGF0IHRoYXQgbG93ZXIgbGV2ZWwgZnVuY3Rpb24gZG9lcy4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDY2OSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6MDA6MTAuMjMwNjUwODk0WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyOTI3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ2ODIsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQ2ODI6XFx0aW50IGJyX211bHRpY2FzdF90b2dnbGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1bnNpZ25lZCBsb25nIHZhbCxcXG40NjgzOlxcdFxcdFxcdFxcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG40Njg0OlxcdHtcXG40Njg1OlxcdFxcdGJvb2wgY2hhbmdlX3Nub29wZXJzID0gZmFsc2U7XFxuNDY4NjpcXHRcXHRpbnQgZXJyID0gMDtcXG40Njg3OlxcdFxcbjQ2ODg6XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZici1cXHUwMDNlbXVsdGljYXN0X2xvY2spO1xcbjQ2ODk6XFx0XFx0aWYgKCEhYnJfb3B0X2dldChiciwgQlJPUFRfTVVMVElDQVNUX0VOQUJMRUQpID09ICEhdmFsKVxcbjQ2OTA6XFx0XFx0XFx0Z290byB1bmxvY2s7XFxuNDY5MTpcXHRcXG40NjkyOlxcdFxcdGVyciA9IGJyX21jX2Rpc2FibGVkX3VwZGF0ZShici1cXHUwMDNlZGV2LCB2YWwsIGV4dGFjayk7XFxuNDY5MzpcXHRcXHRpZiAoZXJyID09IC1FT1BOT1RTVVBQKVxcbjQ2OTQ6XFx0XFx0XFx0ZXJyID0gMDtcXG40Njk1OlxcdFxcdGlmIChlcnIpXFxuNDY5NjpcXHRcXHRcXHRnb3RvIHVubG9jaztcXG40Njk3OlxcdFxcbjQ2OTg6XFx0XFx0YnJfb3B0X3RvZ2dsZShiciwgQlJPUFRfTVVMVElDQVNUX0VOQUJMRUQsICEhdmFsKTtcXG40Njk5OlxcdFxcdGlmICghYnJfb3B0X2dldChiciwgQlJPUFRfTVVMVElDQVNUX0VOQUJMRUQpKSB7XFxuNDcwMDpcXHRcXHRcXHRjaGFuZ2Vfc25vb3BlcnMgPSB0cnVlO1xcbjQ3MDE6XFx0XFx0XFx0YnJfbXVsdGljYXN0X2Rpc2FibGVfYWxsX3BvcnRzKGJyKTtcXG40NzAyOlxcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbjQ3MDM6XFx0XFx0fVxcbjQ3MDQ6XFx0XFxuNDcwNTpcXHRcXHRpZiAoIW5ldGlmX3J1bm5pbmcoYnItXFx1MDAzZWRldikpXFxuNDcwNjpcXHRcXHRcXHRnb3RvIHVubG9jaztcXG40NzA3OlxcdFxcbjQ3MDg6XFx0XFx0YnJfbXVsdGljYXN0X29wZW4oYnIpO1xcbjQ3MDk6XFx0XFx0YnJfbXVsdGljYXN0X2VuYWJsZV9hbGxfcG9ydHMoYnIpO1xcbjQ3MTA6XFx0XFxuNDcxMTpcXHRcXHRjaGFuZ2Vfc25vb3BlcnMgPSB0cnVlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjowMDoxMC4yMzA5ODE5MDRaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMwMDQxMjg2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb24sIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBNdWx0aWNhc3QgTWFuYWdlbWVudCBDb2RlKipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCBtdWx0aWNhc3QgY29udHJvbCB3aXRoaW4gdGhlIGJyaWRnaW5nIGNvbXBvbmVudCwgYW5kIGBicl9tdWx0aWNhc3RfdG9nZ2xlYCBzZWVtcyBsaWtlIGEgbG9naWNhbCBpbml0aWFsIGVudHJ5IHBvaW50IHRvIGludmVzdGlnYXRlLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB3aGF0IHRoZSBwcmVjb25kaXRpb25zIGFyZSBmb3IgYmVpbmcgY2FsbGVkLCBidXQgaXQgY2VydGFpbmx5IG9mZmVycyBhIHRvcC1sZXZlbCB2aWV3LlxuXG5JJ20gc3BlY2lmaWNhbGx5IGludGVyZXN0ZWQgaW4gaG93IHBvcnRzIGFyZSBhZGRlZCBhbmQgcmVtb3ZlZCBmcm9tIHRoZSBtdWx0aWNhc3QgZ3JvdXAgbWVtYmVyc2hpcC4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIGBicl9tdWx0aWNhc3RfZGVsX3BvcnRgLiBJdCdzIGxpa2VseSB0aGF0IGEgY29tcGxlbWVudCB0byB0aGUgXCJ0b2dnbGVcIiBvcGVyYXRpb24gaW52b2x2ZXMgc3BlY2lmaWNhbGx5IHJlbW92aW5nIGEgcG9ydCwgb3IgYSByYW5nZSBvZiBwb3J0cywgZnJvbSB0aGUgZm9yd2FyZGluZyBzdGF0ZSBmb3IgbXVsdGljYXN0IHRyYWZmaWMuIExldCdzIGRlbHZlIGluIGFuZCBzZWUgdGhlIGNvbnRyb2wgZmxvdy4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTQzMSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6MDA6MTMuNTMxMzk2NzkxWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1OTAxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwNjQsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIwNjQ6XFx0dm9pZCBicl9tdWx0aWNhc3RfZGVsX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydClcXG4yMDY1OlxcdHtcXG4yMDY2OlxcdFxcdHN0cnVjdCBuZXRfYnJpZGdlICpiciA9IHBvcnQtXFx1MDAzZWJyO1xcbjIwNjc6XFx0XFx0c3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cCAqcGc7XFxuMjA2ODpcXHRcXG4yMDY5OlxcdFxcdC8qIFRha2UgY2FyZSBvZiB0aGUgcmVtYWluaW5nIGdyb3Vwcywgb25seSBwZXJtIG9uZXMgc2hvdWxkIGJlIGxlZnQuXFxuMjA3MDpcXHRcXHQgKiBEZWxldGluZyBvbmUgY2FuIGRlbGV0ZSBvdGhlcnMgb24gdGhpcyBzYW1lIHBvcnQtXFx1MDAzZW1nbGlzdCwgc29cXG4yMDcxOlxcdFxcdCAqIGFsd2F5cyByZXN0YXJ0IGZyb20gdGhlIGhlYWQuXFxuMjA3MjpcXHRcXHQgKi9cXG4yMDczOlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2YnItXFx1MDAzZW11bHRpY2FzdF9sb2NrKTtcXG4yMDc0OlxcdFxcdHdoaWxlICghaGxpc3RfZW1wdHkoXFx1MDAyNnBvcnQtXFx1MDAzZW1nbGlzdCkpIHtcXG4yMDc1OlxcdFxcdFxcdHBnID0gaGxpc3RfZW50cnkocG9ydC1cXHUwMDNlbWdsaXN0LmZpcnN0LFxcbjIwNzY6XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAsIG1nbGlzdCk7XFxuMjA3NzpcXHRcXHRcXHRicl9tdWx0aWNhc3RfZmluZF9kZWxfcGcoYnIsIHBnKTtcXG4yMDc4OlxcdFxcdH1cXG4yMDc5OlxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZici1cXHUwMDNlbXVsdGljYXN0X2xvY2spO1xcbjIwODA6XFx0XFx0Zmx1c2hfd29yayhcXHUwMDI2YnItXFx1MDAzZW1jYXN0X2djX3dvcmspO1xcbjIwODE6XFx0XFx0YnJfbXVsdGljYXN0X3BvcnRfY3R4X2RlaW5pdChcXHUwMDI2cG9ydC1cXHUwMDNlbXVsdGljYXN0X2N0eCk7XFxuMjA4MjpcXHRcXHRmcmVlX3BlcmNwdShwb3J0LVxcdTAwM2VtY2FzdF9zdGF0cyk7XFxuMjA4MzpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjAwOjEzLjUzMTg1Nzk5MVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODg1OTUwMTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlZmluaW5nIHRoZSBTY29wZSBmb3IgVGhpcyBNdWx0aWNhc3QgSW52ZXN0aWdhdGlvbioqXG5cbk9rYXksIHNvIEknbSBzdGFydGluZyB3aXRoIGBicl9tdWx0aWNhc3RfZGVsX3BvcnRgIGFzIG15IG1haW4gcG9pbnQgb2YgZW50cnksIHRoYXQgc2VlbXMgbGlrZSBhIGdvb2QgcGxhY2UgdG8gYmVnaW4gZGlzc2VjdGluZyB0aGlzLiBNeSBpbml0aWFsIEZvY3VzU3ltYm9scyBhcmU6IGBicl9tdWx0aWNhc3RfZGVsX3BvcnRgLCBgYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydGAsIGBicl9tdWx0aWNhc3RfdG9nZ2xlYCwgYGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZ2AsIGFuZCBgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbmAuIEhvbGQgb24sIEkgbmVlZCB0byByZW1lbWJlciB0aGF0IGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYCBpcyBjYWxsZWQgaW50ZXJuYWxseSBieSBgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nYCBhbmQgYWxzbyBgYnJfbXVsdGljYXN0X3RvZ2dsZV9nbG9iYWxfdmxhbmAsIHNvIEkgbmVlZCB0byBpbmNsdWRlIGl0IGluIG15IG1lbnRhbCBtb2RlbC5cblxuTm93LCBsZXQncyBzZWUgaWYgdGhlIHBhdGNoIGlzIHRvdWNoaW5nIGFueXRoaW5nIGJleW9uZCB0aGUgb2J2aW91cy4gSSdtIGNoZWNraW5nIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgZnVuY3Rpb25zIHRoYXQgaW50ZXJhY3Qgd2l0aCBgYnJfbXVsdGljYXN0X2ZpbmRfZGVsX3BnYCBvciBtb2RpZnkgYG1nbGlzdGAuIEZyb20gd2hhdCBJIGNhbiB0ZWxsIHRoZSBwYXRjaCByZWFsbHkgb25seSBpbnRlcmFjdHMgd2l0aCBgYnJfbXVsdGljYXN0X2RlbF9wb3J0YCBhbmQgYF9fYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydF9jdHhgLiBTbyB0aGUgY3VycmVudCBzZXQgb2YgRm9jdXNTeW1ib2xzIHNob3VsZCBiZSBhZGVxdWF0ZS5cblxuV2FpdCwgSSBzaG91bGQgZG91YmxlIGNoZWNrIHRoYXQgYGJyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRgIGlzIHRoZSAqb25seSogY2FsbGVyIG9mIGBicl9tdWx0aWNhc3RfdG9nZ2xlX3BvcnRgLiBObywgYGJyX211bHRpY2FzdF9lbmFibGVfcG9ydGAgYWxzbyBjYWxscyBgYnJfbXVsdGljYXN0X3RvZ2dsZV9wb3J0YC4gT2theSwgcmlnaHQsIEkgbmVlZCB0byBpbmNsdWRlIHRoYXQgb25lIHRvby4gU28gbXkgZmluYWwsIHJldmlzZWQgRm9jdXNTeW1ib2xzIGFyZTogYGJyX211bHRpY2FzdF9kZWxfcG9ydGAsIGBicl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0YCwgYGJyX211bHRpY2FzdF9lbmFibGVfcG9ydGAsIGBicl9tdWx0aWNhc3RfdG9nZ2xlYCwgYGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZ2AsIGFuZCBgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbmAuIE5vdyBJJ2xsIGp1c3QgY29uZmlybSBpZiBgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbmAgaXMgc3RhdGljLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjAyNSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjAwOjIwLjQxNzgxMTU4NVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY3NDI2OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9icmlkZ2UvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9NDI5Mj12b2lkIGJyX211bHRpY2FzdF91cGRhdGVfdmxhbl9tY2FzdF9jdHgoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdiwgdTggc3RhdGUpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzMTctXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0MzE4OnZvaWQgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCBib29sIG9uKVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDMxOS17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xMDY5PXZvaWQgYnJfbXVsdGljYXN0X3VwZGF0ZV92bGFuX21jYXN0X2N0eChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LCB1OCBzdGF0ZSk7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTA3MDp2b2lkIGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbik7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTA3MS1pbnQgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgYm9vbCBvbixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTE1NDY9c3RhdGljIGlubGluZSB2b2lkIGJyX211bHRpY2FzdF91cGRhdGVfdmxhbl9tY2FzdF9jdHgoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE1NTAtXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTU1MTpzdGF0aWMgaW5saW5lIHZvaWQgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLFxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE1NTItXFx0XFx0XFx0XFx0XFx0XFx0Ym9vbCBvbilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6MDA6MjAuNDY0NTYyMDEzWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NDgzMzE2NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBleHByZXNzZWQgYXMgdGhvdWdoIHRoZXNlIHdlcmUgbXkgb3duIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyB0aGUgVmFyaWFibGUncyBNdXRhYmlsaXR5KipcblxuUmlnaHQsIHNvIHRoZSBjb250ZXh0IGluZGljYXRlcyB3ZSdyZSBkZWFsaW5nIHdpdGggc29tZXRoaW5nIHRoYXQgaXNuJ3Qgc3RhdGljLiBHb29kLCB0aGF04oCZcyBhIGNsZWFyIHN0YXJ0aW5nIHBvaW50LiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBwaW5wb2ludCBhIHNwZWNpZmljIHZhcmlhYmxlIHRoYXQncyBwb3RlbnRpYWxseSAqbm90KiBzdGF0aWMsIG5hbWVseSBgYnJfbXVsdGljYXN0X3RvZ2dsZV9nbG9iYWxfdmxhbmAuIFRoZSBhaW0gaXMgdG8gY29uZmlybSB3aGV0aGVyIG15IGluaXRpYWwgdW5kZXJzdGFuZGluZyBvZiBpdHMgbXV0YWJpbGl0eSBob2xkcyB0cnVlLiBUaGlzIGlzIHdoZXJlIEknbGwgZGlnIGRlZXBlci4gSSBuZWVkIHRvIGtub3cgZm9yIHN1cmUgaWYgaXTigJlzIHN1YmplY3QgdG8gY2hhbmdlLiBBIHF1aWNrIGNoZWNrIG9mIGl0cyBkZWNsYXJhdGlvbiBhbmQgdXNhZ2Ugc2hvdWxkIGNvbmZpcm0gdGhhdC4gSXTigJlzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgbGlmZXRpbWUgb2YgdGhpcyB2YXJpYWJsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMzMDYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjowMDoyMy45MTI4OTY4NTVaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MzMyOTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJvb2wgYnJfbXVsdGljYXN0X3RvZ2dsZV9nbG9iYWxfdmxhblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYnJpZGdlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQzODM9aW50IGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIGJvb2wgb24sXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MjEtXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0NDIyOmJvb2wgYnJfbXVsdGljYXN0X3RvZ2dsZV9nbG9iYWxfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCBib29sIG9uKVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQyMy17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xMDcxPWludCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3Bpbmcoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBib29sIG9uLFxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTEwNzItXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxMDczOmJvb2wgYnJfbXVsdGljYXN0X3RvZ2dsZV9nbG9iYWxfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCBib29sIG9uKTtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xMDc0LVxcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTU1Nj1zdGF0aWMgaW5saW5lIGludCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3Bpbmcoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTU2Mi1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxNTYzOnN0YXRpYyBpbmxpbmUgYm9vbCBicl9tdWx0aWNhc3RfdG9nZ2xlX2dsb2JhbF92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTU2NC1cXHRcXHRcXHRcXHRcXHRcXHQgICBib29sIG9uKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjowMDoyMy45NTkyMzQ0MzNaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ3OTIzNzg5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBWYXJpYWJsZSdzIE11dGFiaWxpdHkqKlxuXG5SaWdodCwgc28gd2UncmUgZGVhbGluZyB3aXRoIHNvbWV0aGluZyBwb3RlbnRpYWxseSBkeW5hbWljIGhlcmUuIExldCdzIGRpZyBkZWVwZXIgYW5kIHZlcmlmeSB3aGV0aGVyIGBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3BpbmdgIGlzLCBpbiBmYWN0LCBzdGF0aWMuIFRoaXMgaXMgdGhlIGNyaXRpY2FsIHBpZWNlIG9mIGluZm9ybWF0aW9uLiBUaGUgcG90ZW50aWFsIGZvciB0aGUgdmFyaWFibGUgdG8gY2hhbmdlIGR5bmFtaWNhbGx5IGluZmx1ZW5jZXMgaG93IHRoZSBjb2RlIHdpbGwgYmVoYXZlLCBlc3BlY2lhbGx5IHdoZXJlIHRoaXMgdmFyaWFibGUgaXMgdXNlZC4gV2UgbmVlZCB0byBhc2NlcnRhaW4gdGhlIG11dGFiaWxpdHkgdG8gYXNzZXNzIGFueSBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzIG9yIHJhY2UgY29uZGl0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM5MTcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjowMDoyOC40Mzg0NzUxMDNaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NjczNTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImludCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3BpbmdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JyaWRnZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00MzYzPXN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF90b2dnbGVfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCBib29sIG9uKVxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzgyLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDM4MzppbnQgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgYm9vbCBvbixcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzODQtXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTA3MD12b2lkIGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbik7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTA3MTppbnQgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgYm9vbCBvbixcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xMDcyLVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xNTUxPXN0YXRpYyBpbmxpbmUgdm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNTU1LVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE1NTY6c3RhdGljIGlubGluZSBpbnQgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nKHN0cnVjdCBuZXRfYnJpZGdlICpicixcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNTU3LVxcdFxcdFxcdFxcdFxcdFxcdCAgICBib29sIG9uLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjowMDoyOC40ODYxNTM2MDJaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIzMjc4NzI5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQXNzZXNzaW5nIHRoZSBEeW5hbWljIE5hdHVyZSBvZiB0aGUgU2l0dWF0aW9uKipcblxuQWxyaWdodCwgdGhlIGluaXRpYWwgYXNzZXNzbWVudCBpcyBpbjogdGhlIHNpdHVhdGlvbiBpcyBkZWZpbml0aXZlbHkgKm5vdCogc3RhdGljLiBXZSdyZSBkZWFsaW5nIHdpdGggc29tZXRoaW5nIHRoYXQgY2hhbmdlcywgdGhhdCBoYXMgYSBkeW5hbWljIGVsZW1lbnQuIE5vdywgZ2l2ZW4gdGhhdCB0aGlzIGlzIHRoZSBjYXNlLCB0aGUgY3J1Y2lhbCBuZXh0IHN0ZXAgaXMgdG8gbmFpbCBkb3duIHRoZSBzcGVjaWZpY3Mgb2YgdGhpcyBkeW5hbWlzbS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIG5hdHVyZSBvZiBgYnJfbXVsdGljYXN0X3RvZ2dsZWAuIElzIHRoYXQgdmFyaWFibGUgb3IgZnVuY3Rpb24gc3RhdGljPyBJdHMgc2NvcGUgYW5kIGJlaGF2aW91ciBhcmUgb2J2aW91c2x5IGNlbnRyYWwgdG8gdGhlIHByb2JsZW0uIFRoZSBxdWVzdGlvbiBvZiB3aGV0aGVyIGl0J3Mgc3RhdGljIHdpbGwgZ3VpZGUgbXkgZnVydGhlciBpbnZlc3RpZ2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDQ5MCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjAwOjMxLjcxODk0NDMyWiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjA0NTYzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgYnJfbXVsdGljYXN0X3RvZ2dsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYnJpZGdlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQzNjM9c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzODItXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0MzgzOmludCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3Bpbmcoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBib29sIG9uLFxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDM4NC1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQ2NzE9c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X2Rpc2FibGVfYWxsX3BvcnRzKHN0cnVjdCBuZXRfYnJpZGdlICpicilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDY4MS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQ2ODI6aW50IGJyX211bHRpY2FzdF90b2dnbGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1bnNpZ25lZCBsb25nIHZhbCxcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ2ODMtXFx0XFx0XFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9OTkyPWludCBicl9tdWx0aWNhc3Rfc2V0X3ZsYW5fcm91dGVyKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYsIHU4IG1jYXN0X3JvdXRlcik7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6OTkzOmludCBicl9tdWx0aWNhc3RfdG9nZ2xlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgdW5zaWduZWQgbG9uZyB2YWwsXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtOTk0LVxcdFxcdFxcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xMDcwPXZvaWQgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCBib29sIG9uKTtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxMDcxOmludCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3Bpbmcoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBib29sIG9uLFxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTEwNzItXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTE1NTE9c3RhdGljIGlubGluZSB2b2lkIGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE1NTUtXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTU1NjpzdGF0aWMgaW5saW5lIGludCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3Bpbmcoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE1NTctXFx0XFx0XFx0XFx0XFx0XFx0ICAgIGJvb2wgb24sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjAwOjMxLjc2NDk5NTE0OVoiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDQ5ODI0MjIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOlxuXG4qKkFzc2Vzc2luZyB0aGUgU3RhdGljIE5hdHVyZSBvZiBhIEZ1bmN0aW9uKipcblxuUmlnaHQsIHNvIHdlJ3JlIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgdGhhdCAqaXNuJ3QqIHN0YXRpYy4gR29vZCB0byBjb25maXJtIHRoYXQgdXBmcm9udDsgaXQgaGVscHMgYXZvaWQganVtcGluZyB0byBjb25jbHVzaW9ucyBsYXRlci4gTm93LCBsZXQncyB6ZXJvIGluIG9uIGEgc3BlY2lmaWMgZnVuY3Rpb246IGBicl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0YC4gVGhlIGNydWNpYWwgcXVlc3Rpb24gaXMsIGlzICp0aGlzKiBwYXJ0aWN1bGFyIGZ1bmN0aW9uIGRlY2xhcmVkIGFzIHN0YXRpYz8gS25vd2luZyBpdHMgc2NvcGUg4oCTIHdoZXRoZXIgaXQncyBsb2NhbCB0byBhIGNvbXBpbGF0aW9uIHVuaXQgb3IgZ2xvYmFsbHkgYWNjZXNzaWJsZSDigJMgaXMgZnVuZGFtZW50YWwgdG8gdW5kZXJzdGFuZGluZyBpdHMgYmVoYXZpb3IgYW5kIHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtLiBDaGVja2luZyBpdHMgc3RhdGljLW5lc3MgcmlnaHQgbm93IHdpbGwgc2F2ZSBhIGxvdCBvZiBkZWJ1Z2dpbmcgdGltZSBkb3duIHRoZSByb2FkIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTI5OCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjAwOjM1LjgxNDgyMjcxMloiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY5MzM1NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm9pZCBicl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9icmlkZ2UvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MjEyOD1zdGF0aWMgdm9pZCBfX2JyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRfY3R4KHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0X3BvcnQgKnBtY3R4KVxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMTYyLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MjE2MzpzdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0X2N0eChzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdF9wb3J0ICpwbWN0eClcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIxNjQte1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0yMjE2PXZvaWQgYnJfbXVsdGljYXN0X2VuYWJsZV9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIyMjAtXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoyMjIxOnZvaWQgYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0KVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjIyMi17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD05Nzg9dm9pZCBicl9tdWx0aWNhc3RfZW5hYmxlX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCk7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6OTc5OnZvaWQgYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0KTtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC05ODAtdm9pZCBicl9tdWx0aWNhc3RfaW5pdChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpO1xcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTQxMz1zdGF0aWMgaW5saW5lIHZvaWQgYnJfbXVsdGljYXN0X2VuYWJsZV9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNDE2LVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE0MTc6c3RhdGljIGlubGluZSB2b2lkIGJyX211bHRpY2FzdF9kaXNhYmxlX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydClcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNDE4LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6MDA6MzUuODYxNzYxMDdaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA4NTM0MzkwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJcyBJdCBTdGF0aWMsIFJlYWxseT8gQSBRdWljayBWZXJpZmljYXRpb24qKlxuXG5SaWdodCwgc28gdGhlIHN5c3RlbSBpcyBkZWZpbml0ZWx5IGJlaGF2aW5nIGR5bmFtaWNhbGx5LiBObyBzdXJwcmlzZXMgdGhlcmUuIEJ1dCBJJ20gZmVlbGluZyBhIG5pZ2dsaW5nIGNvbmNlcm4gYWJvdXQgYSBzcGVjaWZpYyB2YXJpYWJsZSB3aXRoaW4gdGhhdCBkeW5hbWljIHNldHVwLiBMZXQncyBub3QgbWFrZSBhc3N1bXB0aW9ucy4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiDigJMgYSBxdWljayBtZW50YWwgY2hlY2suIFRoZSBjb3JlIG9mIG15IGNvbmNlcm4/IEknbSB3b25kZXJpbmcgaWYgYGJyX211bHRpY2FzdF9lbmFibGVfcG9ydGAgaXMsIGJ5IHNvbWUgY2hhbmNlLCBpbmNvcnJlY3RseSBkZWZpbmVkIGFzIGEgc3RhdGljIHZhcmlhYmxlLiBUaGF0IHdvdWxkIHRocm93IGEgd3JlbmNoIGludG8gdGhlIHdob2xlIHByb2Nlc3MhIEJldHRlciB0byB2ZXJpZnksIGJlY2F1c2UgSSB3b3VsZCBleHBlY3QgaXQgdG8gYmUgbm9uLXN0YXRpYyBnaXZlbiB0aGUgYmVoYXZpb3IgSSdtIHNlZWluZywgYnV0IHlvdSBjYW4gbmV2ZXIgYmUgdG9vIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1OTY3LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6MDA6MzkuOTQ3MTA3NDgyWiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzg2MzExOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2b2lkIGJyX211bHRpY2FzdF9lbmFibGVfcG9ydFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYnJpZGdlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTIwOTQ9c3RhdGljIHZvaWQgX19icl9tdWx0aWNhc3RfZW5hYmxlX3BvcnRfY3R4KHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0X3BvcnQgKnBtY3R4KVxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMTEzLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MjExNDpzdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfZW5hYmxlX3BvcnRfY3R4KHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0X3BvcnQgKnBtY3R4KVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjExNS17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTIxNzg9c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X3RvZ2dsZV9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsIGJvb2wgb24pXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIyMTUtXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoyMjE2OnZvaWQgYnJfbXVsdGljYXN0X2VuYWJsZV9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMjE3LXtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTk3Nz12b2lkIGJyX211bHRpY2FzdF9kZWxfcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0KTtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDo5Nzg6dm9pZCBicl9tdWx0aWNhc3RfZW5hYmxlX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCk7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtOTc5LXZvaWQgYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0KTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTE0MDk9c3RhdGljIGlubGluZSB2b2lkIGJyX211bHRpY2FzdF9kZWxfcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0KVxcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTQxMi1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxNDEzOnN0YXRpYyBpbmxpbmUgdm9pZCBicl9tdWx0aWNhc3RfZW5hYmxlX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydClcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNDE0LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6MDA6MzkuOTk0OTc0NjNaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzAwMjkwOTY4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjcmFmdGVkIHdpdGggdGhlIGV4cGVjdGF0aW9uIHRoYXQgSSdtIGRpc2N1c3NpbmcgdGhpcyB3aXRoIGEgZmVsbG93IGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBTdGF0aWMgTmF0dXJlIG9mIGBicl9tdWx0aWNhc3RfZGVsX3BvcnRgKipcblxuQWxyaWdodCwgSSBzZWUgaXQncyBkZWFsaW5nIHdpdGggc29tZXRoaW5nIGluaGVyZW50bHkgZHluYW1pYy4gTGV0J3MgbWFrZSBhYnNvbHV0ZWx5IHN1cmUgYWJvdXQgdGhpczsgSSB3YW50IHRvIGNvbmZpcm0gd2hldGhlciBgYnJfbXVsdGljYXN0X2RlbF9wb3J0YCBoYXMgYSBzdGF0aWMgZGVjbGFyYXRpb24uIFdlIG5lZWQgdG8ga25vdyBpZiBpdCdzIHN0YXRpYyBvciBpZiB3ZSBuZWVkIHRvIGFjY291bnQgZm9yIHBvc3NpYmxlIG1vZGlmaWNhdGlvbnMuIFRoaXMgaGFzIGltcGxpY2F0aW9ucyBmb3IgaG93IHdlIGludGVyYWN0IHdpdGggaXQgZG93biB0aGUgbGluZS4gV2UgbmVlZCB0byBjb25zaWRlciBob3cgdGhpcyBmdW5jdGlvbidzIGNoYXJhY3RlcmlzdGljcyBtaWdodCBpbmZsdWVuY2Ugb3VyIGltcGxlbWVudGF0aW9uLiBTbywgbGV04oCZcyBnZXQgYSBkZWZpbml0aXZlIGFuc3dlciBvbiB0aGF0IHN0YXRpYyBrZXl3b3JkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjY1MiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjAwOjQyLjk5Nzg4NjgyNloiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU3Mzg0MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm9pZCBicl9tdWx0aWNhc3RfZGVsX3BvcnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JyaWRnZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0xMzk4PXN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAgKmJyX211bHRpY2FzdF9uZXdfcG9ydF9ncm91cChcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMTQ1Ni1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjE0NTc6dm9pZCBicl9tdWx0aWNhc3RfZGVsX3BvcnRfZ3JvdXAoc3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cCAqcClcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTE0NTgte1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0yMDQzPWludCBicl9tdWx0aWNhc3RfYWRkX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydClcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjA2My1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjIwNjQ6dm9pZCBicl9tdWx0aWNhc3RfZGVsX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydClcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIwNjUte1xcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9OTc2PWludCBicl9tdWx0aWNhc3RfYWRkX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCk7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6OTc3OnZvaWQgYnJfbXVsdGljYXN0X2RlbF9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpO1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTk3OC12b2lkIGJyX211bHRpY2FzdF9lbmFibGVfcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0KTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTEwMDc9YnJfbXVsdGljYXN0X25ld19wb3J0X2dyb3VwKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xMDEyLVxcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjEwMTM6dm9pZCBicl9tdWx0aWNhc3RfZGVsX3BvcnRfZ3JvdXAoc3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cCAqcCk7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTAxNC1pbnQgYnJfbWRiX2hhc2hfaW5pdChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpO1xcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTQwND1zdGF0aWMgaW5saW5lIGludCBicl9tdWx0aWNhc3RfYWRkX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydClcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE0MDgtXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTQwOTpzdGF0aWMgaW5saW5lIHZvaWQgYnJfbXVsdGljYXN0X2RlbF9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTQxMC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjAwOjQzLjA0MzYyOTgzNVoiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODE5MDMyNDQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFByb3Bvc2VkIENvZGUgQ2hhbmdlKipcblxuT2theSwgc28gSSBzZWUgdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIHNvbWV0aGluZyBpbiB0aGUgYnJpZGdlIG11bHRpY2FzdCBwb3J0IGRlbGV0aW9uIGFuZCBkaXNhYmxpbmcgcm91dGluZXMuIEl0J3MgZGVmaW5pdGVseSBub24tc3RhdGljOyB3ZSdyZSBkZWFsaW5nIHdpdGggZHluYW1pYyBkYXRhIHN0cnVjdHVyZXMgaGVyZS4gVGhlIGNvcmUgb2YgdGhlIHByb2JsZW0gc2VlbXMgdG8gYmUgYW4gaW1wcm9wZXIgdXNlIG9mIGBobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlYCBpbiBjb25qdW5jdGlvbiB3aXRoIGBicl9tdWx0aWNhc3RfZmluZF9kZWxfcGdgLCBsZWFkaW5nIHRvIHBvdGVudGlhbCBpc3N1ZXMgd2hlcmUgbXVsdGlwbGUgZW50cmllcyBtaWdodCBiZSByZW1vdmVkIHdpdGhpbiBhIHNpbmdsZSBsb29wIGl0ZXJhdGlvbi4gVGhpcyBjb3VsZCByZXN1bHQgaW4gbWlzc2VkIGVudHJpZXMgb3IsIHdvcnNlLCB1c2UtYWZ0ZXItZnJlZSBzaXR1YXRpb25zLiBBIGNsYXNzaWMgY29uY3VycmVuY3kgYnVnIGlmIHlvdSBkb24ndCBoYW5kbGUgaXQgcmlnaHQuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBtYWtlIHN1cmUgdGhpcyBpcyB0aG9yb3VnaGx5IHRlc3RlZC4gVGhlIGxpc3Qgb2YgcmVsZXZhbnQgYEZvY3VzU3ltYm9sc2AgdGhleSd2ZSBpZGVudGlmaWVkIOKAkyBgYnJfbXVsdGljYXN0X2RlbF9wb3J0YCwgYGJyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRgLCBldGMuIOKAkyBzZWVtcyBhcHByb3ByaWF0ZSwgYXMgZG8gdGhlIGBFbmFibGVDb25maWdzYDogYEJSSURHRWAsIGBJTkVUYCwgYEJSSURHRV9JR01QX1NOT09QSU5HYCwgYFZMQU5fODAyMVFgLCBhbmQgYEJSSURHRV9WTEFOX0ZJTFRFUklOR2AuIFRoZXNlIGNvdmVyIHRoZSBrZXkgYXJlYXMgd2hlcmUgdGhlIGlzc3VlIGlzIGxpa2VseSB0byBtYW5pZmVzdC5cblxuR2l2ZW4gdGhhdCB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgYnJpZGdlIG11bHRpY2FzdCBsb2dpYyBhbmQgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluayBhbmQgc3lzZnMsIGl0J3MgYWJzb2x1dGVseSBjcnVjaWFsIHdlIGZ1enogaXQuIEknZCBjb25zaWRlciBpdCBhIGhpZ2ggcHJpb3JpdHksIHRvIGJlIGhvbmVzdC4gVGhlIGltcGFjdCBjb3VsZCBiZSBzaWduaWZpY2FudCBpZiBtdWx0aWNhc3QgaXMgYnJva2VuIGluIHRoZSBicmlkZ2UuIExldCdzIG1ha2Ugc3VyZSBvdXIgZnV6emluZyBhbmQgdGVzdGluZyBpbmZyYXN0cnVjdHVyZSBpcyBzZXQgdXAgdG8gYWRkcmVzcyB0aGlzIGNoYW5nZSBwcm9tcHRseS4gSSdsbCBuZWVkIHRvIGNhbGwgdG8gc2V0LXJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NDUxLCJPdXRwdXRUb2tlbnMiOjIzMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjowMDo0OS44NjI2NjQ3MzFaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDgyMjQyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlJJREdFXCIsXG4gICAgXCJJTkVUXCIsXG4gICAgXCJCUklER0VfSUdNUF9TTk9PUElOR1wiLFxuICAgIFwiVkxBTl84MDIxUVwiLFxuICAgIFwiQlJJREdFX1ZMQU5fRklMVEVSSU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnJfbXVsdGljYXN0X2RlbF9wb3J0XCIsXG4gICAgXCJicl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0XCIsXG4gICAgXCJicl9tdWx0aWNhc3RfZW5hYmxlX3BvcnRcIixcbiAgICBcImJyX211bHRpY2FzdF90b2dnbGVcIixcbiAgICBcImJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZ1wiLFxuICAgIFwiYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGJyaWRnZSBtdWx0aWNhc3QgcG9ydCBkZWxldGlvbiBhbmQgZGlzYWJsaW5nIGxvZ2ljIHdoZXJlIGBobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlYCB3YXMgdXNlZCBpbmNvcnJlY3RseS4gYGJyX211bHRpY2FzdF9maW5kX2RlbF9wZ2AgY2FuIGRlbGV0ZSBtdWx0aXBsZSBlbnRyaWVzIGZyb20gdGhlIHNhbWUgbGlzdCwgbGVhZGluZyB0byBtaXNzZWQgZW50cmllcyBvciB1c2UtYWZ0ZXItZnJlZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgYnJpZGdlIG11bHRpY2FzdCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluayBhbmQgc3lzZnMsIGFuZCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJSSURHRVwiLFxuICAgIFwiSU5FVFwiLFxuICAgIFwiQlJJREdFX0lHTVBfU05PT1BJTkdcIixcbiAgICBcIlZMQU5fODAyMVFcIixcbiAgICBcIkJSSURHRV9WTEFOX0ZJTFRFUklOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJyX211bHRpY2FzdF9kZWxfcG9ydFwiLFxuICAgIFwiYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydFwiLFxuICAgIFwiYnJfbXVsdGljYXN0X2VuYWJsZV9wb3J0XCIsXG4gICAgXCJicl9tdWx0aWNhc3RfdG9nZ2xlXCIsXG4gICAgXCJicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3BpbmdcIixcbiAgICBcImJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBicmlkZ2UgbXVsdGljYXN0IHBvcnQgZGVsZXRpb24gYW5kIGRpc2FibGluZyBsb2dpYyB3aGVyZSBgaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZWAgd2FzIHVzZWQgaW5jb3JyZWN0bHkuIGBicl9tdWx0aWNhc3RfZmluZF9kZWxfcGdgIGNhbiBkZWxldGUgbXVsdGlwbGUgZW50cmllcyBmcm9tIHRoZSBzYW1lIGxpc3QsIGxlYWRpbmcgdG8gbWlzc2VkIGVudHJpZXMgb3IgdXNlLWFmdGVyLWZyZWUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGJyaWRnZSBtdWx0aWNhc3QgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmsgYW5kIHN5c2ZzLCBhbmQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6MDA6NDkuOTQzNDk1Mzk4WiIsIlNlcSI6NDksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDY1MjQ3MTU0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjAwOjQ5Ljk0NDEzMDg3OFoiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMDY1MTgzMDc2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgbGlzdCBpdGVyYXRpb24gYnVncyBpbiBgYnJfbXVsdGljYXN0X2RlbF9wb3J0YCBhbmQgYF9fYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydF9jdHhgIHdoZXJlIGBicl9tdWx0aWNhc3RfZmluZF9kZWxfcGdgIGNvdWxkIGRlbGV0ZSB0aGUgbmV4dCBjYWNoZWQgbm9kZSBpbiBgaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZWAsIGxlYWRpbmcgdG8gcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIGxpc3QgY29ycnVwdGlvbi4gVGhlc2UgdHlwZXMgb2YgbWVtb3J5IGNvcnJ1cHRpb24gYW5kIHVzZS1hZnRlci1mcmVlIGJ1Z3MgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcywgYWxsb2NhdGlvbnMsIG9yIGRhdGEgc2VudCB0byB1c2VyIHNwYWNlIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjNmM3NzJkMDkyNmJhODY5NzRjN2Q0NTg0Mjg1MjYwODkzODQwOTQyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTIgMTE6NTg6NTEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jIGIvbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuY1xuaW5kZXggMDBhYTliMjg3OWQ2ZS4uZTA3NzUwNTljYTBhOCAxMDA2NDRcbi0tLSBhL25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmNcbisrKyBiL25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmNcbkBAIC0yMDY1LDEyICsyMDY1LDE3IEBAIHZvaWQgYnJfbXVsdGljYXN0X2RlbF9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpXG4ge1xuIFx0c3RydWN0IG5ldF9icmlkZ2UgKmJyID0gcG9ydC1cdTAwM2VicjtcbiBcdHN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAgKnBnO1xuLVx0c3RydWN0IGhsaXN0X25vZGUgKm47XG4gXG4tXHQvKiBUYWtlIGNhcmUgb2YgdGhlIHJlbWFpbmluZyBncm91cHMsIG9ubHkgcGVybSBvbmVzIHNob3VsZCBiZSBsZWZ0ICovXG4rXHQvKiBUYWtlIGNhcmUgb2YgdGhlIHJlbWFpbmluZyBncm91cHMsIG9ubHkgcGVybSBvbmVzIHNob3VsZCBiZSBsZWZ0LlxuK1x0ICogRGVsZXRpbmcgb25lIGNhbiBkZWxldGUgb3RoZXJzIG9uIHRoaXMgc2FtZSBwb3J0LVx1MDAzZW1nbGlzdCwgc29cbitcdCAqIGFsd2F5cyByZXN0YXJ0IGZyb20gdGhlIGhlYWQuXG4rXHQgKi9cbiBcdHNwaW5fbG9ja19iaChcdTAwMjZici1cdTAwM2VtdWx0aWNhc3RfbG9jayk7XG4tXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBnLCBuLCBcdTAwMjZwb3J0LVx1MDAzZW1nbGlzdCwgbWdsaXN0KVxuK1x0d2hpbGUgKCFobGlzdF9lbXB0eShcdTAwMjZwb3J0LVx1MDAzZW1nbGlzdCkpIHtcbitcdFx0cGcgPSBobGlzdF9lbnRyeShwb3J0LVx1MDAzZW1nbGlzdC5maXJzdCxcbitcdFx0XHRcdCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwLCBtZ2xpc3QpO1xuIFx0XHRicl9tdWx0aWNhc3RfZmluZF9kZWxfcGcoYnIsIHBnKTtcbitcdH1cbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmJyLVx1MDAzZW11bHRpY2FzdF9sb2NrKTtcbiBcdGZsdXNoX3dvcmsoXHUwMDI2YnItXHUwMDNlbWNhc3RfZ2Nfd29yayk7XG4gXHRicl9tdWx0aWNhc3RfcG9ydF9jdHhfZGVpbml0KFx1MDAyNnBvcnQtXHUwMDNlbXVsdGljYXN0X2N0eCk7XG5AQCAtMjEyNiwxMSArMjEzMSwyMyBAQCBzdGF0aWMgdm9pZCBfX2JyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRfY3R4KHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0X3BvcnQgKnBtY3R4KVxuIFx0c3RydWN0IGhsaXN0X25vZGUgKm47XG4gXHRib29sIGRlbCA9IGZhbHNlO1xuIFxuLVx0aGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwZywgbiwgXHUwMDI2cG1jdHgtXHUwMDNlcG9ydC1cdTAwM2VtZ2xpc3QsIG1nbGlzdClcbi1cdFx0aWYgKCEocGctXHUwMDNlZmxhZ3MgXHUwMDI2IE1EQl9QR19GTEFHU19QRVJNQU5FTlQpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgKCFicl9tdWx0aWNhc3RfcG9ydF9jdHhfaXNfdmxhbihwbWN0eCkgfHxcbi1cdFx0ICAgICBwZy1cdTAwM2VrZXkuYWRkci52aWQgPT0gcG1jdHgtXHUwMDNldmxhbi1cdTAwM2V2aWQpKVxuLVx0XHRcdGJyX211bHRpY2FzdF9maW5kX2RlbF9wZyhwbWN0eC1cdTAwM2Vwb3J0LVx1MDAzZWJyLCBwZyk7XG4rXHQvKiBicl9tdWx0aWNhc3RfZmluZF9kZWxfcGcoKSBjYW4gZGVsZXRlIGZ1cnRoZXIgZW50cmllcyBvZiB0aGlzIHNhbWVcbitcdCAqIHBvcnQtXHUwMDNlbWdsaXN0LCBzbyB0aGUgbm9kZSBsYXRjaGVkIGluIEBuIG1heSBiZSB1bmxpbmtlZCBieSB0aGUgbG9vcFxuK1x0ICogYm9keS4gUG9ydCBncm91cHMgYXJlIG9ubHkgZnJlZWQgYnkgdGhlIEdDIHdvcmsgdW5kZXIgbXVsdGljYXN0X2xvY2ssXG4rXHQgKiBzbyBAbiBpcyBzdGlsbCB2YWxpZCBoZXJlOyBpZiBpdCBsZWZ0IHRoZSBsaXN0LCByZXN0YXJ0LlxuK1x0ICovXG4rcmVzdGFydDpcbitcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocGcsIG4sIFx1MDAyNnBtY3R4LVx1MDAzZXBvcnQtXHUwMDNlbWdsaXN0LCBtZ2xpc3QpIHtcbitcdFx0aWYgKChwZy1cdTAwM2VmbGFncyBcdTAwMjYgTURCX1BHX0ZMQUdTX1BFUk1BTkVOVCkgfHxcbitcdFx0ICAgIChicl9tdWx0aWNhc3RfcG9ydF9jdHhfaXNfdmxhbihwbWN0eCkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAgcGctXHUwMDNla2V5LmFkZHIudmlkICE9IHBtY3R4LVx1MDAzZXZsYW4tXHUwMDNldmlkKSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0YnJfbXVsdGljYXN0X2ZpbmRfZGVsX3BnKHBtY3R4LVx1MDAzZXBvcnQtXHUwMDNlYnIsIHBnKTtcbitcbitcdFx0aWYgKG4gXHUwMDI2XHUwMDI2IGhsaXN0X3VuaGFzaGVkKG4pKVxuK1x0XHRcdGdvdG8gcmVzdGFydDtcbitcdH1cbiBcbiBcdGRlbCB8PSBicl9pcDRfbXVsdGljYXN0X3Jwb3J0X2RlbChwbWN0eCk7XG4gXHR0aW1lcl9kZWxldGUoXHUwMDI2cG1jdHgtXHUwMDNlaXA0X21jX3JvdXRlcl90aW1lcik7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjowMDo0OS45NDQxMzIzNThaIiwiU2VxIjo1MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA2NTE4MDA1NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNdWx0aWNhc3QgQnJpZGdlIFBvcnQgR3JvdXAgRGVsZXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIHRoZSBtdWx0aWNhc3QgZ3JvdXAgZGVsZXRpb24gbG9naWMgaW4gdGhlIGJyaWRnZSBjb2RlLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBicl9tdWx0aWNhc3RfZGVsX3BvcnRgIGFuZCBgX19icl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0X2N0eGAgaW4gYG5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmNgLiBNeSBpbml0aWFsIHNjYW4gdGVsbHMgbWUgdGhleSdyZSBtb2RpZnlpbmcgaG93IGBwb3J0LVx1MDAzZW1nbGlzdGAgaXMgdHJhdmVyc2VkIHdoZW4gZGVsZXRpbmcgcG9ydCBncm91cHMuIFRoZSBvbGQgbWV0aG9kIHVzZXMgYGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVgIHdoaWNoIGNhY2hlcyB0aGUgKm5leHQqIG5vZGUgaW4gdGhlIGxpc3QuIFRoZSBpc3N1ZSBpcyB0aGF0IHRoZSBmdW5jdGlvbiBgYnJfbXVsdGljYXN0X2ZpbmRfZGVsX3BnYCBjYW4gYWN0dWFsbHkgcmVtb3ZlICptdWx0aXBsZSogZW50cmllcyBmcm9tIGBwb3J0LVx1MDAzZW1nbGlzdGAgYXQgb25jZS5cblxuSW4gdGhlIGZpcnN0IGNhc2UgKGBicl9tdWx0aWNhc3RfZGVsX3BvcnRgKSwgdGhleSd2ZSByZXBsYWNlZCB0aGUgc2FmZSBpdGVyYXRvciB3aXRoIGEgYHdoaWxlYCBsb29wIHRoYXQgaXRlcmF0ZXMgdW50aWwgdGhlIGxpc3QgaXMgZW1wdHksIHBpY2tpbmcgdGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlIGxpc3QgYXQgZWFjaCBpdGVyYXRpb24uIFRoaXMgc2hvdWxkIHNvbHZlIHRoZSBwcm9ibGVtIGJlY2F1c2UgaWYgc29tZXRoaW5nIGlzIGRlbGV0ZWQsIHRoZSBuZXh0IGl0ZXJhdGlvbiBwaWNrcyBhIG5ldyBmaXJzdCBlbGVtZW50LCBhbmQgbm90IHRoZSBwcmV2aW91c2x5IGNhY2hlZCBuZXh0IGVsZW1lbnQgdGhhdCBjb3VsZCBoYXZlIGJlZW4gZGVsZXRlZC5cblxuSW4gdGhlIHNlY29uZCBjYXNlIChgX19icl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0X2N0eGApLCB0aGV5J3ZlIGNoYW5nZWQgdGhlIGV4aXN0aW5nIHNhZmUgaXRlcmF0aW9uIGxvb3Agd2l0aCB0aGUgYWRkaXRpb24gb2YgYSBgcmVzdGFydDpgIGFuZCBhIGBnb3RvIHJlc3RhcnQ7YC4gVGhpcyBhbHNvIHNvbHZlcyB0aGUgcHJvYmxlbSwgYnV0IGluIGEgZGlmZmVyZW50IHdheS4gSWYgYW4gZWxlbWVudCBnZXRzIGRlbGV0ZWQgZHVyaW5nIHRoZSBmaXJzdCBpdGVyYXRpb24gb2YgdGhlIHNhZmUgbG9vcCwgdGhlbiB0aGUgbmV4dCBub2RlIGBuYCBpcyB1bmhhc2hlZCwgYW5kIGluIHRoaXMgY2FzZSwgdGhlIGl0ZXJhdGlvbiAqcmVzdGFydHMqIHRoZSBsb29wIGZyb20gdGhlIGJlZ2lubmluZy4gSXQgYWxzbyBzaW1wbGlmaWVzIHRoZSBjb25kaXRpb25hbCB0aGF0IGNoZWNrcyBmb3IgcGVybWFuZW50IGZsYWdzLCBhbmQgdGhlIFZMQU4gSUQgY2hlY2suXG5cblRoZSBjb3JlIG9mIHRoZSBwcm9ibGVtIGhlcmUgaXMgYSBjbGFzc2ljIGxpc3QgaXRlcmF0aW9uIGJ1Zy4gQnkgZGVsZXRpbmcgZW50cmllcyAqZHVyaW5nKiBpdGVyYXRpb24gd2l0aCB0aGUgb2xkIG1ldGhvZCwgd2UgY2FuIGVuZCB1cCB3aXRoIGEgdXNlLWFmdGVyLWZyZWUsIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCBvciBzaW1wbHkgbWlzcyBkZWxldGlvbnMuIFRoZSBzYWZlIG1hY3JvIHdpbGwgY2FjaGUgdGhlIG5leHQgbm9kZSwgYnV0IGlmIHRoZSBjdXJyZW50IG5vZGUgYWxzbyBnZXRzIGRlbGV0ZWQsIHRoZSBjYWNoZWQgbmV4dCBub2RlIGlzIG5vIGxvbmdlciB2YWxpZC4gVGhlIG5ldyBhcHByb2FjaCBpcyBkZXNpZ25lZCB0byBwcmV2ZW50IHRoaXMgcmFjZSBjb25kaXRpb24uXG5cbk5vdywgYXMgYW4gZXhwZXJ0LCBJIG5lZWQgdG8gY29uc2lkZXIgc2VjdXJpdHkgaW1wbGljYXRpb25zLiBCYXNlZCBvbiB0aGlzIGFuYWx5c2lzLCBJJ20gY29uZmlkZW50IHRoaXMgaXMgKm5vdCogcmVsYXRlZCB0byBLTVNBTjsgdGhlIGNvZGUgZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIG9yIGZpZWxkcywgbm9yIGRvZXMgaXQgaGF2ZSBhbnkgYGNvcHlfdG9fdXNlcmAgb3IgYW55IG9mIHRoZSBvdGhlciBjb21tb24gS01TQU4gdHJpZ2dlcnMuIEtBU0FOIGlzIHRoZSByZWxldmFudCB0b29sIGhlcmUgdG8gY2F0Y2ggbGlzdCBjb3JydXB0aW9uIG9yIFVBRiwgYW5kIGl0IGlzIGxpa2VseSBlbmFibGVkIG9uIHRoZSBzeXN0ZW0uIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGFueSBtZW1vcnkgdGhhdCdzIG5vdCBpbml0aWFsaXplZCwgc28gSSBjYW4gc2FmZWx5IG1hcmsgYE5lZWRzS01TQU49ZmFsc2VgLiBJdCBsb29rcyBsaWtlIHRoaXMgcGF0Y2ggaXMgcHVyZWx5IGZvY3VzZWQgb24gZml4aW5nIGEgY29uY3VycmVuY3kvaXRlcmF0aW9uIGJ1Zy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY1OSwiT3V0cHV0VG9rZW5zIjoxNTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MDUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjowMTowMC41OTU5MzY5MDRaIiwiU2VxIjo1MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzE1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGxpc3QgaXRlcmF0aW9uIGJ1Z3MgaW4gYGJyX211bHRpY2FzdF9kZWxfcG9ydGAgYW5kIGBfX2JyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRfY3R4YCB3aGVyZSBgYnJfbXVsdGljYXN0X2ZpbmRfZGVsX3BnYCBjb3VsZCBkZWxldGUgdGhlIG5leHQgY2FjaGVkIG5vZGUgaW4gYGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVgLCBsZWFkaW5nIHRvIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBvciBsaXN0IGNvcnJ1cHRpb24uIFRoZXNlIHR5cGVzIG9mIG1lbW9yeSBjb3JydXB0aW9uIGFuZCB1c2UtYWZ0ZXItZnJlZSBidWdzIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zLCBvciBkYXRhIHNlbnQgdG8gdXNlciBzcGFjZSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgbGlzdCBpdGVyYXRpb24gYnVncyBpbiBgYnJfbXVsdGljYXN0X2RlbF9wb3J0YCBhbmQgYF9fYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydF9jdHhgIHdoZXJlIGBicl9tdWx0aWNhc3RfZmluZF9kZWxfcGdgIGNvdWxkIGRlbGV0ZSB0aGUgbmV4dCBjYWNoZWQgbm9kZSBpbiBgaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZWAsIGxlYWRpbmcgdG8gcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIGxpc3QgY29ycnVwdGlvbi4gVGhlc2UgdHlwZXMgb2YgbWVtb3J5IGNvcnJ1cHRpb24gYW5kIHVzZS1hZnRlci1mcmVlIGJ1Z3MgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcywgYWxsb2NhdGlvbnMsIG9yIGRhdGEgc2VudCB0byB1c2VyIHNwYWNlIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowv8zcm[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-12 11:40:56 +0000 UTC FinishedAt: 2026-08-12 12:01:02 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "315f4bd234b3b8a3ed3a71fd4c53b110cf373720", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BRIDGE", "INET", "BRIDGE_IGMP_SNOOPING", "VLAN_8021Q", "BRIDGE_VLAN_FILTERING" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "315f4bd234b3b8a3ed3a71fd4c53b110cf373720", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BRIDGE", "INET", "BRIDGE_IGMP_SNOOPING", "VLAN_8021Q", "BRIDGE_VLAN_FILTERING" ], "series_id": "323bdf1f-2509-476c-93b7-2b9b6dff11f1" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "br_multicast_del_port", "br_multicast_disable_port", "br_multicast_enable_port", "br_multicast_toggle", "br_multicast_toggle_vlan_snooping", "br_multicast_toggle_one_vlan" ], "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+CgkJCTx0ZD4yMDI2LzA4LzEyIDExOjU4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JSSURHRSYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O0JSSURHRV9JR01QX1NOT09QSU5HJiMzNDssCiAgICAmIzM0O1ZMQU5fODAyMVEmIzM0OywKICAgICYjMzQ7QlJJREdFX1ZMQU5fRklMVEVSSU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnJfbXVsdGljYXN0X2RlbF9wb3J0JiMzNDssCiAgICAmIzM0O2JyX211bHRpY2FzdF9kaXNhYmxlX3BvcnQmIzM0OywKICAgICYjMzQ7YnJfbXVsdGljYXN0X2VuYWJsZV9wb3J0JiMzNDssCiAgICAmIzM0O2JyX211bHRpY2FzdF90b2dnbGUmIzM0OywKICAgICYjMzQ7YnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nJiMzNDssCiAgICAmIzM0O2JyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4mIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBsaXN0IGl0ZXJhdGlvbiBidWdzIGluIGBicl9tdWx0aWNhc3RfZGVsX3BvcnRgIGFuZCBgX19icl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0X2N0eGAgd2hlcmUgYGJyX211bHRpY2FzdF9maW5kX2RlbF9wZ2AgY291bGQgZGVsZXRlIHRoZSBuZXh0IGNhY2hlZCBub2RlIGluIGBobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlYCwgbGVhZGluZyB0byBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgbGlzdCBjb3JydXB0aW9uLiBUaGVzZSB0eXBlcyBvZiBtZW1vcnkgY29ycnVwdGlvbiBhbmQgdXNlLWFmdGVyLWZyZWUgYnVncyBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzLCBhbGxvY2F0aW9ucywgb3IgZGF0YSBzZW50IHRvIHVzZXIgc3BhY2UgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnksIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBicmlkZ2UgbXVsdGljYXN0IHBvcnQgZGVsZXRpb24gYW5kIGRpc2FibGluZyBsb2dpYyB3aGVyZSBgaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZWAgd2FzIHVzZWQgaW5jb3JyZWN0bHkuIGBicl9tdWx0aWNhc3RfZmluZF9kZWxfcGdgIGNhbiBkZWxldGUgbXVsdGlwbGUgZW50cmllcyBmcm9tIHRoZSBzYW1lIGxpc3QsIGxlYWRpbmcgdG8gbWlzc2VkIGVudHJpZXMgb3IgdXNlLWFmdGVyLWZyZWUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGJyaWRnZSBtdWx0aWNhc3QgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmsgYW5kIHN5c2ZzLCBhbmQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMTo1ODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGM2Yzc3MmQwOTI2YmE4Njk3NGM3ZDQ1ODQyODUyNjA4OTM4NDA5NDJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxMiAxMTo1ODo1MSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jIGIvbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuY1xuaW5kZXggMDBhYTliMjg3OWQ2ZS4uZTA3NzUwNTljYTBhOCAxMDA2NDRcbi0tLSBhL25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmNcbkBAIC0yMDY1LDEyICYjNDM7MjA2NSwxNyBAQCB2b2lkIGJyX211bHRpY2FzdF9kZWxfcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0KVxuIHtcbiBcdHN0cnVjdCBuZXRfYnJpZGdlICpiciA9IHBvcnQtXHUwMDNlYnI7XG4gXHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwICpwZztcbi1cdHN0cnVjdCBobGlzdF9ub2RlICpuO1xuIFxuLVx0LyogVGFrZSBjYXJlIG9mIHRoZSByZW1haW5pbmcgZ3JvdXBzLCBvbmx5IHBlcm0gb25lcyBzaG91bGQgYmUgbGVmdCAqL1xuJiM0MztcdC8qIFRha2UgY2FyZSBvZiB0aGUgcmVtYWluaW5nIGdyb3Vwcywgb25seSBwZXJtIG9uZXMgc2hvdWxkIGJlIGxlZnQuXG4mIzQzO1x0ICogRGVsZXRpbmcgb25lIGNhbiBkZWxldGUgb3RoZXJzIG9uIHRoaXMgc2FtZSBwb3J0LVx1MDAzZW1nbGlzdCwgc29cbiYjNDM7XHQgKiBhbHdheXMgcmVzdGFydCBmcm9tIHRoZSBoZWFkLlxuJiM0MztcdCAqL1xuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmJyLVx1MDAzZW11bHRpY2FzdF9sb2NrKTtcbi1cdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocGcsIG4sIFx1MDAyNnBvcnQtXHUwMDNlbWdsaXN0LCBtZ2xpc3QpXG4mIzQzO1x0d2hpbGUgKCFobGlzdF9lbXB0eShcdTAwMjZwb3J0LVx1MDAzZW1nbGlzdCkpIHtcbiYjNDM7XHRcdHBnID0gaGxpc3RfZW50cnkocG9ydC1cdTAwM2VtZ2xpc3QuZmlyc3QsXG4mIzQzO1x0XHRcdFx0IHN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAsIG1nbGlzdCk7XG4gXHRcdGJyX211bHRpY2FzdF9maW5kX2RlbF9wZyhiciwgcGcpO1xuJiM0MztcdH1cbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmJyLVx1MDAzZW11bHRpY2FzdF9sb2NrKTtcbiBcdGZsdXNoX3dvcmsoXHUwMDI2YnItXHUwMDNlbWNhc3RfZ2Nfd29yayk7XG4gXHRicl9tdWx0aWNhc3RfcG9ydF9jdHhfZGVpbml0KFx1MDAyNnBvcnQtXHUwMDNlbXVsdGljYXN0X2N0eCk7XG5AQCAtMjEyNiwxMSAmIzQzOzIxMzEsMjMgQEAgc3RhdGljIHZvaWQgX19icl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0X2N0eChzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdF9wb3J0ICpwbWN0eClcbiBcdHN0cnVjdCBobGlzdF9ub2RlICpuO1xuIFx0Ym9vbCBkZWwgPSBmYWxzZTtcbiBcbi1cdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocGcsIG4sIFx1MDAyNnBtY3R4LVx1MDAzZXBvcnQtXHUwMDNlbWdsaXN0LCBtZ2xpc3QpXG4tXHRcdGlmICghKHBnLVx1MDAzZWZsYWdzIFx1MDAyNiBNREJfUEdfRkxBR1NfUEVSTUFORU5UKSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgICghYnJfbXVsdGljYXN0X3BvcnRfY3R4X2lzX3ZsYW4ocG1jdHgpIHx8XG4tXHRcdCAgICAgcGctXHUwMDNla2V5LmFkZHIudmlkID09IHBtY3R4LVx1MDAzZXZsYW4tXHUwMDNldmlkKSlcbi1cdFx0XHRicl9tdWx0aWNhc3RfZmluZF9kZWxfcGcocG1jdHgtXHUwMDNlcG9ydC1cdTAwM2ViciwgcGcpO1xuJiM0MztcdC8qIGJyX211bHRpY2FzdF9maW5kX2RlbF9wZygpIGNhbiBkZWxldGUgZnVydGhlciBlbnRyaWVzIG9mIHRoaXMgc2FtZVxuJiM0MztcdCAqIHBvcnQtXHUwMDNlbWdsaXN0LCBzbyB0aGUgbm9kZSBsYXRjaGVkIGluIEBuIG1heSBiZSB1bmxpbmtlZCBieSB0aGUgbG9vcFxuJiM0MztcdCAqIGJvZHkuIFBvcnQgZ3JvdXBzIGFyZSBvbmx5IGZyZWVkIGJ5IHRoZSBHQyB3b3JrIHVuZGVyIG11bHRpY2FzdF9sb2NrLFxuJiM0MztcdCAqIHNvIEBuIGlzIHN0aWxsIHZhbGlkIGhlcmU7IGlmIGl0IGxlZnQgdGhlIGxpc3QsIHJlc3RhcnQuXG4mIzQzO1x0ICovXG4mIzQzO3Jlc3RhcnQ6XG4mIzQzO1x0aGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwZywgbiwgXHUwMDI2cG1jdHgtXHUwMDNlcG9ydC1cdTAwM2VtZ2xpc3QsIG1nbGlzdCkge1xuJiM0MztcdFx0aWYgKChwZy1cdTAwM2VmbGFncyBcdTAwMjYgTURCX1BHX0ZMQUdTX1BFUk1BTkVOVCkgfHxcbiYjNDM7XHRcdCAgICAoYnJfbXVsdGljYXN0X3BvcnRfY3R4X2lzX3ZsYW4ocG1jdHgpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgICBwZy1cdTAwM2VrZXkuYWRkci52aWQgIT0gcG1jdHgtXHUwMDNldmxhbi1cdTAwM2V2aWQpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRicl9tdWx0aWNhc3RfZmluZF9kZWxfcGcocG1jdHgtXHUwMDNlcG9ydC1cdTAwM2ViciwgcGcpO1xuJiM0MztcbiYjNDM7XHRcdGlmIChuIFx1MDAyNlx1MDAyNiBobGlzdF91bmhhc2hlZChuKSlcbiYjNDM7XHRcdFx0Z290byByZXN0YXJ0O1xuJiM0MztcdH1cbiBcbiBcdGRlbCB8PSBicl9pcDRfbXVsdGljYXN0X3Jwb3J0X2RlbChwbWN0eCk7XG4gXHR0aW1lcl9kZWxldGUoXHUwMDI2cG1jdHgtXHUwMDNlaXA0X21jX3JvdXRlcl90aW1lcik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTE6NTg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JSSURHRSYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O0JSSURHRV9JR01QX1NOT09QSU5HJiMzNDssCiAgICAmIzM0O1ZMQU5fODAyMVEmIzM0OywKICAgICYjMzQ7QlJJREdFX1ZMQU5fRklMVEVSSU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnJfbXVsdGljYXN0X2RlbF9wb3J0JiMzNDssCiAgICAmIzM0O2JyX211bHRpY2FzdF9kaXNhYmxlX3BvcnQmIzM0OywKICAgICYjMzQ7YnJfbXVsdGljYXN0X2VuYWJsZV9wb3J0JiMzNDssCiAgICAmIzM0O2JyX211bHRpY2FzdF90b2dnbGUmIzM0OywKICAgICYjMzQ7YnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nJiMzNDssCiAgICAmIzM0O2JyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYnJpZGdlIG11bHRpY2FzdCBwb3J0IGRlbGV0aW9uIGFuZCBkaXNhYmxpbmcgbG9naWMgd2hlcmUgYGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVgIHdhcyB1c2VkIGluY29ycmVjdGx5LiBgYnJfbXVsdGljYXN0X2ZpbmRfZGVsX3BnYCBjYW4gZGVsZXRlIG11bHRpcGxlIGVudHJpZXMgZnJvbSB0aGUgc2FtZSBsaXN0LCBsZWFkaW5nIHRvIG1pc3NlZCBlbnRyaWVzIG9yIHVzZS1hZnRlci1mcmVlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBicmlkZ2UgbXVsdGljYXN0IGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rIGFuZCBzeXNmcywgYW5kIGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjNmM3NzJkMDkyNmJhODY5NzRjN2Q0NTg0Mjg1MjYwODkzODQwOTQyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMTIgMTE6NTg6NTEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jIGIvbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYwppbmRleCAwMGFhOWIyODc5ZDZlLi5lMDc3NTA1OWNhMGE4IDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMKQEAgLTIwNjUsMTIgJiM0MzsyMDY1LDE3IEBAIHZvaWQgYnJfbXVsdGljYXN0X2RlbF9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpCiB7CiAJc3RydWN0IG5ldF9icmlkZ2UgKmJyID0gcG9ydC0mZ3Q7YnI7CiAJc3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cCAqcGc7Ci0Jc3RydWN0IGhsaXN0X25vZGUgKm47CiAKLQkvKiBUYWtlIGNhcmUgb2YgdGhlIHJlbWFpbmluZyBncm91cHMsIG9ubHkgcGVybSBvbmVzIHNob3VsZCBiZSBsZWZ0ICovCiYjNDM7CS8qIFRha2UgY2FyZSBvZiB0aGUgcmVtYWluaW5nIGdyb3Vwcywgb25seSBwZXJtIG9uZXMgc2hvdWxkIGJlIGxlZnQuCiYjNDM7CSAqIERlbGV0aW5nIG9uZSBjYW4gZGVsZXRlIG90aGVycyBvbiB0aGlzIHNhbWUgcG9ydC0mZ3Q7bWdsaXN0LCBzbwomIzQzOwkgKiBhbHdheXMgcmVzdGFydCBmcm9tIHRoZSBoZWFkLgomIzQzOwkgKi8KIAlzcGluX2xvY2tfYmgoJmFtcDtici0mZ3Q7bXVsdGljYXN0X2xvY2spOwotCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocGcsIG4sICZhbXA7cG9ydC0mZ3Q7bWdsaXN0LCBtZ2xpc3QpCiYjNDM7CXdoaWxlICghaGxpc3RfZW1wdHkoJmFtcDtwb3J0LSZndDttZ2xpc3QpKSB7CiYjNDM7CQlwZyA9IGhsaXN0X2VudHJ5KHBvcnQtJmd0O21nbGlzdC5maXJzdCwKJiM0MzsJCQkJIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAsIG1nbGlzdCk7CiAJCWJyX211bHRpY2FzdF9maW5kX2RlbF9wZyhiciwgcGcpOwomIzQzOwl9CiAJc3Bpbl91bmxvY2tfYmgoJmFtcDtici0mZ3Q7bXVsdGljYXN0X2xvY2spOwogCWZsdXNoX3dvcmsoJmFtcDtici0mZ3Q7bWNhc3RfZ2Nfd29yayk7CiAJYnJfbXVsdGljYXN0X3BvcnRfY3R4X2RlaW5pdCgmYW1wO3BvcnQtJmd0O211bHRpY2FzdF9jdHgpOwpAQCAtMjEyNiwxMSAmIzQzOzIxMzEsMjMgQEAgc3RhdGljIHZvaWQgX19icl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0X2N0eChzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdF9wb3J0ICpwbWN0eCkKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbjsKIAlib29sIGRlbCA9IGZhbHNlOwogCi0JaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwZywgbiwgJmFtcDtwbWN0eC0mZ3Q7cG9ydC0mZ3Q7bWdsaXN0LCBtZ2xpc3QpCi0JCWlmICghKHBnLSZndDtmbGFncyAmYW1wOyBNREJfUEdfRkxBR1NfUEVSTUFORU5UKSAmYW1wOyZhbXA7Ci0JCSAgICAoIWJyX211bHRpY2FzdF9wb3J0X2N0eF9pc192bGFuKHBtY3R4KSB8fAotCQkgICAgIHBnLSZndDtrZXkuYWRkci52aWQgPT0gcG1jdHgtJmd0O3ZsYW4tJmd0O3ZpZCkpCi0JCQlicl9tdWx0aWNhc3RfZmluZF9kZWxfcGcocG1jdHgtJmd0O3BvcnQtJmd0O2JyLCBwZyk7CiYjNDM7CS8qIGJyX211bHRpY2FzdF9maW5kX2RlbF9wZygpIGNhbiBkZWxldGUgZnVydGhlciBlbnRyaWVzIG9mIHRoaXMgc2FtZQomIzQzOwkgKiBwb3J0LSZndDttZ2xpc3QsIHNvIHRoZSBub2RlIGxhdGNoZWQgaW4gQG4gbWF5IGJlIHVubGlua2VkIGJ5IHRoZSBsb29wCiYjNDM7CSAqIGJvZHkuIFBvcnQgZ3JvdXBzIGFyZSBvbmx5IGZyZWVkIGJ5IHRoZSBHQyB3b3JrIHVuZGVyIG11bHRpY2FzdF9sb2NrLAomIzQzOwkgKiBzbyBAbiBpcyBzdGlsbCB2YWxpZCBoZXJlOyBpZiBpdCBsZWZ0IHRoZSBsaXN0LCByZXN0YXJ0LgomIzQzOwkgKi8KJiM0MztyZXN0YXJ0OgomIzQzOwlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBnLCBuLCAmYW1wO3BtY3R4LSZndDtwb3J0LSZndDttZ2xpc3QsIG1nbGlzdCkgewomIzQzOwkJaWYgKChwZy0mZ3Q7ZmxhZ3MgJmFtcDsgTURCX1BHX0ZMQUdTX1BFUk1BTkVOVCkgfHwKJiM0MzsJCSAgICAoYnJfbXVsdGljYXN0X3BvcnRfY3R4X2lzX3ZsYW4ocG1jdHgpICZhbXA7JmFtcDsKJiM0MzsJCSAgICAgcGctJmd0O2tleS5hZGRyLnZpZCAhPSBwbWN0eC0mZ3Q7dmxhbi0mZ3Q7dmlkKSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCWJyX211bHRpY2FzdF9maW5kX2RlbF9wZyhwbWN0eC0mZ3Q7cG9ydC0mZ3Q7YnIsIHBnKTsKJiM0MzsKJiM0MzsJCWlmIChuICZhbXA7JmFtcDsgaGxpc3RfdW5oYXNoZWQobikpCiYjNDM7CQkJZ290byByZXN0YXJ0OwomIzQzOwl9CiAKIAlkZWwgfD0gYnJfaXA0X211bHRpY2FzdF9ycG9ydF9kZWwocG1jdHgpOwogCXRpbWVyX2RlbGV0ZSgmYW1wO3BtY3R4LSZndDtpcDRfbWNfcm91dGVyX3RpbWVyKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTE6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY2MgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBCcmlkZ2UgTXVsdGljYXN0IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCBhIHBhdGNoIGhlcmUgdGhhdCYjMzk7cyBwb2tpbmcgYXQgYG5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmNgLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIHRvIGJlIG1vZGlmeWluZyBob3cgd2UgaGFuZGxlIG11bHRpY2FzdCBncm91cCBtZW1iZXJzaGlwIHdoZW4gZGVsZXRpbmcgb3IgZGlzYWJsaW5nIHBvcnRzIGluIGEgYnJpZGdlLiBUaGUgZnVuY3Rpb25zIGluIHF1ZXN0aW9uIGFyZSBgYnJfbXVsdGljYXN0X2RlbF9wb3J0YCBhbmQgYF9fYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydF9jdHhgLiBUaGUgY29yZSBvZiB0aGUgcHJvYmxlbSwgYXMgSSB1bmRlcnN0YW5kIGl0LCBsaWVzIHdpdGhpbiBgYnJfbXVsdGljYXN0X2ZpbmRfZGVsX3BnYC4gQXBwYXJlbnRseSwgdGhpcyBmdW5jdGlvbiBjYW4gaW5hZHZlcnRlbnRseSBkZWxldGUgZW50cmllcyBmcm9tIHRoZSBgcG9ydC0mZ3Q7bWdsaXN0YCB3aGlsZSB3ZSYjMzk7cmUgaXRlcmF0aW5nIHRocm91Z2ggaXQgdXNpbmcgYGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVgLiBUaGlzIGNvdWxkIGxlYWQgdG8gYSBjbGFzc2ljIGxpc3QgY29ycnVwdGlvbiBzY2VuYXJpbywgZWl0aGVyIGFjY2Vzc2luZyBmcmVlZCBtZW1vcnkgb3IgY29tcGxldGVseSBza2lwcGluZyBzb21lIGVudHJpZXMg4oCTIGJvdGggYmFkIG5ld3MuIFRoZSBwYXRjaCBwcm9wb3NlcyBlaXRoZXIgcmVzdGFydGluZyB0aGUgbG9vcCBvciwgYWx0ZXJuYXRpdmVseSwgc2ltcGx5IHVzaW5nIGEgYHdoaWxlYCBsb29wIHRvIG5hdmlnYXRlIHRoZSBsaXN0LCB3aGljaCBtYWtlcyBzZW5zZS4KClNvLCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIGZ1cnRoZXIuIGBicl9tdWx0aWNhc3RfZGVsX3BvcnRgIGdldHMgY2FsbGVkIHdoZW4gYSBicmlkZ2UgcG9ydCBnZXRzIGRlbGV0ZWQsIHdoaWNoIGlzIGEgZmFpcmx5IGNyaXRpY2FsIGV2ZW50LiBBbmQgYF9fYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydF9jdHhgIGlzIHRpZWQgdG8gZGlzYWJsaW5nIG11bHRpY2FzdCBvbiBhIHBvcnQg4oCTIHNvbWV0aGluZyB0aGF0IGhhcHBlbnMgYSBiaXQgbGVzcyBmcmVxdWVudGx5LCBidXQgaXMgc3RpbGwgcmVsZXZhbnQuCgpOb3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb246IGlzIHRoaXMgd29ydGggZnV6emluZz8gQWJzb2x1dGVseSwgd2l0aG91dCBhIGRvdWJ0ISBUaGlzIGlzIHJpZ2h0IGluIHRoZSBoZWFydCBvZiB0aGUgYnJpZGdlIG11bHRpY2FzdCBsb2dpYy4gQW55IGluc3RhYmlsaXR5IGhlcmUgY291bGQgbGVhZCB0byBzZXJpb3VzIG5ldHdvcmsgZGlzcnVwdGlvbiwgcGFydGljdWxhcmx5IGluIGVudmlyb25tZW50cyByZWx5aW5nIGhlYXZpbHkgb24gbXVsdGljYXN0LgoKTXkgbmV4dCBzdGVwIGlzIHRvIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgZ292ZXJuIGJyaWRnZSBtdWx0aWNhc3QuIEkmIzM5O20gdGhpbmtpbmcgYENPTkZJR19CUklER0VfSUdNUF9TTk9PUElOR2AgaXMgYSBsaWtlbHkgY2FuZGlkYXRlLCBidXQgSSBzaG91bGQgcHJvYmFibHkgY29uZmlybSB0aGF0IGJ5IGNoZWNraW5nIGBuZXQvYnJpZGdlL0tjb25maWdgIG9yIGV2ZW4gYG5ldC9icmlkZ2UvTWFrZWZpbGVgIHRvIG1ha2Ugc3VyZSBJIGhhdmUgdGhlIGNvbnRleHQgcmlnaHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTE6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnJfbXVsdGljYXN0Lm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYnJpZGdlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnJpZGdlL01ha2VmaWxlPTE5PW9iai0kKENPTkZJR19CUklER0VfTkVURklMVEVSKSAmIzQzOz0gYnJfbmV0ZmlsdGVyLm9cbm5ldC9icmlkZ2UvTWFrZWZpbGUtMjAtXG5uZXQvYnJpZGdlL01ha2VmaWxlOjIxOmJyaWRnZS0kKENPTkZJR19CUklER0VfSUdNUF9TTk9PUElORykgJiM0Mzs9IGJyX211bHRpY2FzdC5vIGJyX21kYi5vIGJyX211bHRpY2FzdF9laHQub1xubmV0L2JyaWRnZS9NYWtlZmlsZS0yMi1cbi0tXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jPTE2ND1zdGF0aWMgaW50IGJyX2Rldl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2JyaWRnZS9icl9kZXZpY2UuYy0xNzAtXHRicl9zdHBfZW5hYmxlX2JyaWRnZShicik7XG5uZXQvYnJpZGdlL2JyX2RldmljZS5jOjE3MTpcdGJyX211bHRpY2FzdF9vcGVuKGJyKTtcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtMTcyLVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9NDIyOT12b2lkIGJyX211bHRpY2FzdF9sZWF2ZV9zbm9vcGVycyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MjM0LVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0MjM1OnN0YXRpYyB2b2lkIF9fYnJfbXVsdGljYXN0X29wZW5fcXVlcnkoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MjM2LVx0XHRcdFx0ICAgICAgc3RydWN0IGJyaWRnZV9tY2FzdF9vd25fcXVlcnkgKnF1ZXJ5KVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDI0NS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDI0NjpzdGF0aWMgdm9pZCBfX2JyX211bHRpY2FzdF9vcGVuKHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0ICpicm1jdHgpXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQyNDcte1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0MjQ4Olx0X19icl9tdWx0aWNhc3Rfb3Blbl9xdWVyeShicm1jdHgtXHUwMDNlYnIsIFx1MDAyNmJybWN0eC1cdTAwM2VpcDRfb3duX3F1ZXJ5KTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDI0OS0jaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDI1MDpcdF9fYnJfbXVsdGljYXN0X29wZW5fcXVlcnkoYnJtY3R4LVx1MDAzZWJyLCBcdTAwMjZicm1jdHgtXHUwMDNlaXA2X293bl9xdWVyeSk7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQyNTEtI2VuZGlmXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MjUzLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0MjU0OnZvaWQgYnJfbXVsdGljYXN0X29wZW4oc3RydWN0IG5ldF9icmlkZ2UgKmJyKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MjU1LXtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQyNjktXHRcdFx0XHQgICAgIWJyX211bHRpY2FzdF9jdHhfdmxhbl9kaXNhYmxlZChicm1jdHgpKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0MjcwOlx0XHRcdFx0XHRfX2JyX211bHRpY2FzdF9vcGVuKFx1MDAyNnZsYW4tXHUwMDNlYnJfbWNhc3RfY3R4KTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDI3MS1cdFx0XHR9XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MjczLVx0fSBlbHNlIHtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDI3NDpcdFx0X19icl9tdWx0aWNhc3Rfb3BlbihcdTAwMjZici1cdTAwM2VtdWx0aWNhc3RfY3R4KTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDI3NS1cdH1cbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQzMTg9dm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzQxLVx0XHRpZiAob24pXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQzNDI6XHRcdFx0X19icl9tdWx0aWNhc3Rfb3BlbihcdTAwMjZ2bGFuLVx1MDAzZWJyX21jYXN0X2N0eCk7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzNDMtXHRcdGVsc2Vcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQzODM9aW50IGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIGJvb2wgb24sXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDA3LVx0ZWxzZVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0NDA4Olx0XHRfX2JyX211bHRpY2FzdF9vcGVuKFx1MDAyNmJyLVx1MDAzZW11bHRpY2FzdF9jdHgpO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDA5LVx0bGlzdF9mb3JfZWFjaF9lbnRyeShwLCBcdTAwMjZici1cdTAwM2Vwb3J0X2xpc3QsIGxpc3QpIHtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQ2MTA9c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X3N0YXJ0X3F1ZXJpZXIoc3RydWN0IG5ldF9icmlkZ2VfbWNhc3QgKmJybWN0eCxcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ2MTctXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQ2MTg6XHRfX2JyX211bHRpY2FzdF9vcGVuX3F1ZXJ5KGJybWN0eC1cdTAwM2ViciwgcXVlcnkpO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NjE5LVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9NDY4Mj1pbnQgYnJfbXVsdGljYXN0X3RvZ2dsZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHVuc2lnbmVkIGxvbmcgdmFsLFxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDcwNy1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDcwODpcdGJyX211bHRpY2FzdF9vcGVuKGJyKTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDcwOS1cdGJyX211bHRpY2FzdF9lbmFibGVfYWxsX3BvcnRzKGJyKTtcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD05ODI9dm9pZCBicl9tdWx0aWNhc3RfbGVhdmVfc25vb3BlcnMoc3RydWN0IG5ldF9icmlkZ2UgKmJyKTtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjk4Mzp2b2lkIGJyX211bHRpY2FzdF9vcGVuKHN0cnVjdCBuZXRfYnJpZGdlICpicik7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC05ODQtdm9pZCBicl9tdWx0aWNhc3Rfc3RvcChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpO1xuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTE0Mjk9c3RhdGljIGlubGluZSB2b2lkIGJyX211bHRpY2FzdF9sZWF2ZV9zbm9vcGVycyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTQzMi1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE0MzM6c3RhdGljIGlubGluZSB2b2lkIGJyX211bHRpY2FzdF9vcGVuKHN0cnVjdCBuZXRfYnJpZGdlICpicilcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE0MzQte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDExOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4MDcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyB0aGUgSUdNUCBTbm9vcGluZyBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHRoZSBjdXJyZW50IGNvbmZpZyBpcyBzZXQgdG8gYEJSSURHRV9JR01QX1NOT09QSU5HYCwgd2hpY2ggaW1tZWRpYXRlbHkgdHJpZ2dlcnMgc29tZSB0aG91Z2h0cy4gV2UmIzM5O3ZlIGdvdCBJR01QIHNub29waW5nIGVuYWJsZWQgb24gYSBicmlkZ2UuIE1ha2VzIHNlbnNlIGluIGEgbG90IG9mIHNjZW5hcmlvcywgYnV0IEkgbmVlZCB0byBxdWlja2x5IGVuc3VyZSB3ZSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55IGRlcGVuZGVuY2llcyBvciBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9ucy4gVGhlIG1vc3QgaW1wb3J0YW50IHRoaW5nIGhlcmUgaXMgdGhlIHByZXNlbmNlIG9mIGBCUklER0VgLiBJJiMzOTttIGFzc3VtaW5nIHRoYXQmIzM5O3MgbmVlZGVkIHRvIGV2ZW4gZ2V0IHN0YXJ0ZWQgd2l0aCBJR01QIHNub29waW5nIGluIGEgYnJpZGdlZCBlbnZpcm9ubWVudCwgYnV0IGFzc3VtcHRpb25zIGFyZSB0aGUgYmFuZSBvZiBzb2xpZCBjb25maWd1cmF0aW9ucyEgQmVzdCB0byBxdWlja2x5IHZlcmlmeS4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBgbmV0L2JyaWRnZS9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHRoZSBnby10byBwbGFjZSBmb3IgYWxsIHRoaW5ncyBicmlkZ2luZyBhbmQgY29uZmlndXJhdGlvbiByZWxhdGVkIGluIHRoZSBuZXR3b3JraW5nIHN1YnN5c3RlbS4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIGRlcGVuZGVuY2llcyBhcmUgZXhwbGljaXRseSBsYWlkIG91dCwgc28gdGhhdCYjMzk7cyB0aGUgZmFzdGVzdCB3YXkgdG8gZ2V0IGNsYXJpdHkgb24gd2hldGhlciB3ZSYjMzk7cmUgZ29vZCB0byBnbywgb3IgaWYgdGhlcmUmIzM5O3Mgc29tZXRoaW5nIGVsc2Ugd2UgbmVlZCB0byB0YWtlIGludG8gY29uc2lkZXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMTo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlJJREdFX0lHTVBfU05PT1BJTkcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYnJpZGdlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnJpZGdlL0tjb25maWc9Nj1jb25maWcgQlJJREdFXG4tLVxubmV0L2JyaWRnZS9LY29uZmlnLTM1LVxubmV0L2JyaWRnZS9LY29uZmlnOjM2OmNvbmZpZyBCUklER0VfSUdNUF9TTk9PUElOR1xubmV0L2JyaWRnZS9LY29uZmlnLTM3LVx0Ym9vbCBcJiMzNDtJR01QL01MRCBzbm9vcGluZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDExOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxODMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqS2NvbmZpZyBEZXBlbmRlbmN5IERlZXAgRGl2ZTogQlJJREdFX0lHTVBfU05PT1BJTkcqKgoKT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgYEJSSURHRV9JR01QX1NOT09QSU5HYCBpcyBjb25maWd1cmVkIHdpdGhpbiB0aGUgbmV0d29ya2luZyBzdGFjay4gTXkgaW5pdGlhbCB0YXJnZXQgaXMgYG5ldC9icmlkZ2UvS2NvbmZpZ2AuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgbG9va2luZyBmb3IgYW55IGRlcGVuZGVuY2llcyBvciBjb25kaXRpb25hbCBsb2dpYyByZWxhdGVkIHRvIHRoaXMgcGFydGljdWxhciBicmlkZ2luZyBmZWF0dXJlLiBJJiMzOTttIGFzc3VtaW5nIHRoYXQmIzM5O3Mgd2hlcmUgSSBjYW4gZmluZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBVbmRlcnN0YW5kaW5nIHRob3NlIGRlcGVuZGVuY2llcyBpcyBrZXkgYmVmb3JlIEkgZXZlbiBjb25zaWRlciBtYWtpbmcgYW55IG1vZGlmaWNhdGlvbnMgb3IgZW5oYW5jZW1lbnRzLiBJdCYjMzk7cyB0aGUgZm91bmRhdGlvbiBmb3IgYW55IGRlZXBlciBpbnZlc3RpZ2F0aW9uIGludG8gaXRzIGJlaGF2aW9yLCBwZXJmb3JtYW5jZSwgb3IgcG90ZW50aWFsIGlzc3Vlcy4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBLY29uZmlnIGZpbGUgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMTo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMzY6XHRjb25maWcgQlJJREdFX0lHTVBfU05PT1BJTkdcbiAgMzc6XHRcdGJvb2wgXCYjMzQ7SUdNUC9NTEQgc25vb3BpbmdcJiMzNDtcbiAgMzg6XHRcdGRlcGVuZHMgb24gQlJJREdFXG4gIDM5Olx0XHRkZXBlbmRzIG9uIElORVRcbiAgNDA6XHRcdGRlZmF1bHQgeVxuICA0MTpcdFx0aGVscFxuICA0MjpcdFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgdGhlbiB0aGUgRXRoZXJuZXQgYnJpZGdlIHdpbGwgYmUgYWJsZSBzZWxlY3RpdmVseVxuICA0MzpcdFx0ICBmb3J3YXJkIG11bHRpY2FzdCB0cmFmZmljIGJhc2VkIG9uIElHTVAvTUxEIHRyYWZmaWMgcmVjZWl2ZWQgZnJvbVxuICA0NDpcdFx0ICBlYWNoIHBvcnQuXG4gIDQ1Olx0XG4gIDQ2Olx0XHQgIFNheSBOIHRvIGV4Y2x1ZGUgdGhpcyBzdXBwb3J0IGFuZCByZWR1Y2UgdGhlIGJpbmFyeSBzaXplLlxuICA0NzpcdFxuICA0ODpcdFx0ICBJZiB1bnN1cmUsIHNheSBZLlxuICA0OTpcdFxuICA1MDpcdGNvbmZpZyBCUklER0VfVkxBTl9GSUxURVJJTkdcbiAgNTE6XHRcdGJvb2wgXCYjMzQ7VkxBTiBmaWx0ZXJpbmdcJiMzNDtcbiAgNTI6XHRcdGRlcGVuZHMgb24gQlJJREdFXG4gIDUzOlx0XHRkZXBlbmRzIG9uIFZMQU5fODAyMVFcbiAgNTQ6XHRcdGRlZmF1bHQgblxuICA1NTpcdFx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDExOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2NDcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBJIGRlbHZlIGludG8gdGhpcyBjb2RlOgoKKipBbmFseXppbmcgTXVsdGljYXN0IENvbnRyb2wgRmxvdyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IG11bHRpY2FzdCBpcyBoYW5kbGVkLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBicmlkZ2luZyBjb250ZXh0LiBUaGUga2V5IGlkZW50aWZpZXJzIGp1bXBpbmcgb3V0IGF0IG1lIGFyZSBgQlJJREdFYCwgYElORVRgLCBhbmQgYEJSSURHRV9JR01QX1NOT09QSU5HYC4gVGhlc2UgbGlrZWx5IHJlcHJlc2VudCBjb25maWd1cmF0aW9uIGZsYWdzIG9yIG1vZHVsZSBkZXNpZ25hdGlvbnMgcmVsYXRlZCB0byBicmlkZ2luZyBhbmQgSUdNUCBzbm9vcGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGludGVyYWN0LgoKTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBmdW5jdGlvbnMgYGJyX211bHRpY2FzdF9kZWxfcG9ydGAgYW5kIGBfX2JyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRfY3R4YC4gVGhlc2Ugc2VlbSB0byBiZSB0aGUgY3JpdGljYWwgcG9pbnRzIHdoZXJlIG11bHRpY2FzdCBmb3J3YXJkaW5nIG9uIGJyaWRnZSBwb3J0cyBpcyBtb2RpZmllZCwgcG90ZW50aWFsbHkgcmVtb3ZlZCBvciBkaXNhYmxlZC4gTXkgdGFzayBpcyB0byBkZXRlcm1pbmUgaWYgSSBjYW4gdHJhY2UgdGhlIGNvbnRyb2wgZmxvdyB0byB0aG9zZSBzcGVjaWZpYyBmdW5jdGlvbiBwb2ludHMsIGFuZCB3aGF0IEFQSSBlbnRyeXBvaW50cyBhcmUgYXZhaWxhYmxlIGZvciB0aG9zZSAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7LiBBcmUgdGhleSBkaXJlY3RseSBjYWxsZWQgZnJvbSBzb21ld2hlcmUsIG9yIGFyZSB0aGV5IHJlYWNoZWQgdGhyb3VnaCBzb21lIGNhbGxiYWNrIG9yIGluZGlyZWN0IG1ldGhvZD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGwgZ3JhcGhzIGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSBpbnZva2VkIHRvIGZ1bGx5IGdyYXNwIHRoZWlyIHB1cnBvc2UuIFRoaXMgaXMgd2hlcmUgSSYjMzk7bGwgbG9vayBmb3IgZW50cnkgcG9pbnRzIHRvIEZvY3VzU3ltYm9scy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTE6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnJfbXVsdGljYXN0X2RlbF9wb3J0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl9pZi5jPTMzND1zdGF0aWMgdm9pZCBkZWxfbmJwKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnApXG4tLVxubmV0L2JyaWRnZS9icl9pZi5jLTM2OS1cbm5ldC9icmlkZ2UvYnJfaWYuYzozNzA6XHRicl9tdWx0aWNhc3RfZGVsX3BvcnQocCk7XG5uZXQvYnJpZGdlL2JyX2lmLmMtMzcxLVxuLS1cbm5ldC9icmlkZ2UvYnJfaWYuYz01NjA9aW50IGJyX2FkZF9pZihzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2JyaWRnZS9icl9pZi5jLTU5OS1cdGlmIChlcnIpIHtcbm5ldC9icmlkZ2UvYnJfaWYuYzo2MDA6XHRcdGJyX211bHRpY2FzdF9kZWxfcG9ydChwKTtcbm5ldC9icmlkZ2UvYnJfaWYuYy02MDEtXHRcdG5ldGRldl9wdXQoZGV2LCBcdTAwMjZwLVx1MDAzZWRldl90cmFja2VyKTtcbi0tXG5uZXQvYnJpZGdlL2JyX2lmLmMtNzA5LWVycjI6XG5uZXQvYnJpZGdlL2JyX2lmLmM6NzEwOlx0YnJfbXVsdGljYXN0X2RlbF9wb3J0KHApO1xubmV0L2JyaWRnZS9icl9pZi5jLTcxMS1cdG5ldGRldl9wdXQoZGV2LCBcdTAwMjZwLVx1MDAzZWRldl90cmFja2VyKTtcbi0tXG5uZXQvYnJpZGdlL2JyX21kYi5jPTk4ND1zdGF0aWMgaW50IGJyX21kYl9hZGRfZ3JvdXBfc3Rhcl9nKGNvbnN0IHN0cnVjdCBicl9tZGJfY29uZmlnICpjZmcsXG4tLVxubmV0L2JyaWRnZS9icl9tZGIuYy0xMDM1LWVycl9kZWxfcG9ydF9ncm91cDpcbm5ldC9icmlkZ2UvYnJfbWRiLmM6MTAzNjpcdGJyX211bHRpY2FzdF9kZWxfcG9ydF9ncm91cChwKTtcbm5ldC9icmlkZ2UvYnJfbWRiLmMtMTAzNy1cdHJldHVybiBlcnI7XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0xMzk4PXN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAgKmJyX211bHRpY2FzdF9uZXdfcG9ydF9ncm91cChcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTE0NTYtXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjE0NTc6dm9pZCBicl9tdWx0aWNhc3RfZGVsX3BvcnRfZ3JvdXAoc3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cCAqcClcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMTQ1OC17XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0yMDQzPWludCBicl9tdWx0aWNhc3RfYWRkX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydClcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIwNjMtXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjIwNjQ6dm9pZCBicl9tdWx0aWNhc3RfZGVsX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydClcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjA2NS17XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9OTc2PWludCBicl9tdWx0aWNhc3RfYWRkX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCk7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDo5Nzc6dm9pZCBicl9tdWx0aWNhc3RfZGVsX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCk7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC05Nzgtdm9pZCBicl9tdWx0aWNhc3RfZW5hYmxlX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCk7XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTAwNz1icl9tdWx0aWNhc3RfbmV3X3BvcnRfZ3JvdXAoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCxcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xMDEyLVx0XHRcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTAxMzp2b2lkIGJyX211bHRpY2FzdF9kZWxfcG9ydF9ncm91cChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwICpwKTtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTEwMTQtaW50IGJyX21kYl9oYXNoX2luaXQoc3RydWN0IG5ldF9icmlkZ2UgKmJyKTtcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xNDA0PXN0YXRpYyBpbmxpbmUgaW50IGJyX211bHRpY2FzdF9hZGRfcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0KVxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE0MDgtXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxNDA5OnN0YXRpYyBpbmxpbmUgdm9pZCBicl9tdWx0aWNhc3RfZGVsX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydClcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE0MTAte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTY4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgSSBzZWUgaXQ6CgoqKkFuYWx5emluZyB0aGUgQnJpZGdlIE11bHRpY2FzdCBQb3J0IERlbGV0aW9uIEZsb3cqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBtdWx0aWNhc3QgcG9ydCBkZWxldGlvbiBpcyBoYW5kbGVkIHdpdGhpbiB0aGUgYnJpZGdlIGNvZGUuIGBicl9tdWx0aWNhc3RfZGVsX3BvcnRgIGFwcGVhcnMgdG8gYmUgdGhlIGNvcmUgZnVuY3Rpb24sIHRoZSBvbmUgdGhhdCBhY3R1YWxseSBkb2VzIHRoZSB3b3JrLiBJIHNlZSB0aGF0IGl0JiMzOTtzIGludm9rZWQgZnJvbSB0d28gcHJpbWFyeSBsb2NhdGlvbnM6IGBkZWxfbmJwYCBhbmQgYWxzbywgaW1wb3J0YW50bHksIHdpdGhpbiBgYnJfYWRkX2lmYCBkdXJpbmcgZXJyb3IgaGFuZGxpbmcuIGBkZWxfbmJwYCBtYWtlcyBwZXJmZWN0IHNlbnNlOyB0aGF0JiMzOTtzIHRoZSBuYXR1cmFsIGNhbGwgd2hlbiBhIGJyaWRnZSBwb3J0IGdldHMgcmVtb3ZlZCwgc2F5LCB2aWEgYGJyX2RlbF9pZmAuICBUaGF0IGFsbCB0cmFja3MuCgpUaGUgZXJyb3IgcGF0aCBpbiBgYnJfYWRkX2lmYCBpcyBzb21ldGhpbmcgdG8gdGhpbmsgYWJvdXQgdG9vLCBidXQgdGhlIG1haW4gcXVlc3Rpb24gdGhhdCBqdW1wZWQgb3V0IGF0IG1lIGltbWVkaWF0ZWx5IGlzOiB3aGF04oCZcyB0aGUgcmVsYXRpb25zaGlwIHRvIGBfX2JyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRfY3R4YD8gSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IGl0IGZpdHMgaW50byB0aGlzIHB1enpsZS4gSXMgdGhpcyBmdW5jdGlvbiBhIGxvd2VyLWxldmVsIGNvbXBhbmlvbiwgYSBoZWxwZXIsIGEgZGlmZmVyZW50IGFwcHJvYWNoIGVudGlyZWx5PyBJIG5lZWQgdG8gY2xhcmlmeSB0aGUgZmxvdyBvZiBob3cgbXVsdGljYXN0IGlzIGFjdHVhbGx5IGRpc2FibGVkLCBkb3duIHRvIHRoZSBncmFudWxhciBsZXZlbC4gVGhlIGNvbm5lY3Rpb24gYmV0d2VlbiBhbGwgb2YgdGhlc2UgZnVuY3Rpb25zIG5lZWRzIHRvIGJlIHRob3JvdWdobHkgdW5kZXJzdG9vZCB0byBlbnN1cmUgZWZmaWNpZW50IGFuZCBjb25zaXN0ZW50IHBvcnQgcmVtb3ZhbCBpbiBhbGwgc2NlbmFyaW9zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMTo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2JyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRfY3R4JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0yMTE0PXN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9lbmFibGVfcG9ydF9jdHgoc3RydWN0IG5ldF9icmlkZ2VfbWNhc3RfcG9ydCAqcG1jdHgpXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMTI3LVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoyMTI4OnN0YXRpYyB2b2lkIF9fYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydF9jdHgoc3RydWN0IG5ldF9icmlkZ2VfbWNhc3RfcG9ydCAqcG1jdHgpXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIxMjkte1xuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MjE2Mz1zdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0X2N0eChzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdF9wb3J0ICpwbWN0eClcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIxNzMtXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjIxNzQ6XHRfX2JyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRfY3R4KHBtY3R4KTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjE3NS1cdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmJyLVx1MDAzZW11bHRpY2FzdF9sb2NrKTtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQzMTg9dm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzU3LVx0XHRlbHNlXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQzNTg6XHRcdFx0X19icl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0X2N0eChcdTAwMjZ2bGFuLVx1MDAzZXBvcnRfbWNhc3RfY3R4KTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDM1OS1cdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2YnItXHUwMDNlbXVsdGljYXN0X2xvY2spO1xuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9NDY3MT1zdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfZGlzYWJsZV9hbGxfcG9ydHMoc3RydWN0IG5ldF9icmlkZ2UgKmJyKVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDY3OC1cdGxpc3RfZm9yX2VhY2hfZW50cnkocG9ydCwgXHUwMDI2YnItXHUwMDNlcG9ydF9saXN0LCBsaXN0KVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0Njc5Olx0XHRfX2JyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRfY3R4KFx1MDAyNnBvcnQtXHUwMDNlbXVsdGljYXN0X2N0eCk7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ2ODAtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODc0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBicmVha2Rvd24gb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipUcmFjaW5nIHRoZSBNdWx0aWNhc3QgRGlzYWJsZSBTZXF1ZW5jZSoqCgpPa2F5LCBzbyBJJiMzOTttIGludmVzdGlnYXRpbmcgdGhlIG11bHRpY2FzdCBkaXNhYmxlIGZ1bmN0aW9uYWxpdHkuIFRoZSBlbnRyeSBwb2ludCBhcHBlYXJzIHRvIGJlIGBicl9tdWx0aWNhc3RfZGlzYWJsZV9hbGxfcG9ydHNgLiBUaGF0IG1ha2VzIHNlbnNlOyBpdCYjMzk7cyBhIGRlc2NyaXB0aXZlIG5hbWUuIFRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgZnJvbSBgYnJfbXVsdGljYXN0X3RvZ2dsZWAgYWNjb3JkaW5nIHRvIHRoZSBwcm92aWRlZCBpbmZvcm1hdGlvbi4gQW5kIGBicl9tdWx0aWNhc3RfdG9nZ2xlYD8gSXQmIzM5O3MgdGhlIG9uZSBjYWxsZWQgYnkgZnVuY3Rpb25zIGxpa2UgYGJyX211bHRpY2FzdF9zZXRfaWdtcF9zbm9vcGluZ2AsIHdoaWNoIGlzIGV4YWN0bHkgdGhlIGtpbmQgb2Ygc2V0dGluZyBJJiMzOTtkIGV4cGVjdCB0byB0cmlnZ2VyIGEgbXVsdGljYXN0IHN0YXRlIGNoYW5nZS4KCkdpdmVuIHRoaXMgaW5pdGlhbCBvdmVydmlldywgbXkgbmV4dCBzdGVwIGlzIGNsZWFyLiBUbyByZWFsbHkgdW5kZXJzdGFuZCB0aGUgZmxvdywgSSBuZWVkIHRvIGRpdmUgaW50byBgYnJfbXVsdGljYXN0X3RvZ2dsZWAuIEkgbmVlZCB0byBzZWUgd2hhdCBjb25kaXRpb25zIHRyaWdnZXIgdGhlIGNhbGwgdG8gYGJyX211bHRpY2FzdF9kaXNhYmxlX2FsbF9wb3J0c2AsIGFuZCB3aGF0IG90aGVyIGFjdGlvbnMgYXJlIHBlcmZvcm1lZCB3aXRoaW4gdGhhdCBgdG9nZ2xlYCBmdW5jdGlvbi4gVGhpcyB3aWxsIGxldCBtZSByZWNvbnN0cnVjdCB0aGUgb3ZlcmFsbCBtdWx0aWNhc3QgZGlzYWJsZSBtZWNoYW5pc20gYW5kIHBpbnBvaW50IHRoZSBtb3N0IGltcGFjdGZ1bCBwYXJ0cyBvZiB0aGUgcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTE6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnJfbXVsdGljYXN0X3RvZ2dsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnIuYz0yOTQ9aW50IGJyX2Jvb2xvcHRfdG9nZ2xlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgZW51bSBicl9ib29sb3B0X2lkIG9wdCwgYm9vbCBvbixcbi0tXG5uZXQvYnJpZGdlL2JyLmMtMzAzLVx0Y2FzZSBCUl9CT09MT1BUX01DQVNUX1ZMQU5fU05PT1BJTkc6XG5uZXQvYnJpZGdlL2JyLmM6MzA0Olx0XHRlcnIgPSBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3BpbmcoYnIsIG9uLCBleHRhY2spO1xubmV0L2JyaWRnZS9ici5jLTMwNS1cdFx0YnJlYWs7XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0yMTYzPXN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRfY3R4KHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0X3BvcnQgKnBtY3R4KVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjE3Ny1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MjE3ODpzdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwgYm9vbCBvbilcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjE3OS17XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0yMjE2PXZvaWQgYnJfbXVsdGljYXN0X2VuYWJsZV9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIyMTcte1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoyMjE4Olx0YnJfbXVsdGljYXN0X3RvZ2dsZV9wb3J0KHBvcnQsIHRydWUpO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMjE5LX1cbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTIyMjE9dm9pZCBicl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIyMjIte1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoyMjIzOlx0YnJfbXVsdGljYXN0X3RvZ2dsZV9wb3J0KHBvcnQsIGZhbHNlKTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjIyNC19XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00MjkyPXZvaWQgYnJfbXVsdGljYXN0X3VwZGF0ZV92bGFuX21jYXN0X2N0eChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LCB1OCBzdGF0ZSlcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzMTctXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQzMTg6dm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzMTkte1xuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDM2Mi1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDM2MzpzdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbilcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDM2NC17XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00Mzc1LVx0XHRcdGNvbnRpbnVlO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0Mzc2Olx0XHRicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHZwb3J0LCBvbik7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzNzctXHR9XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00Mzc5LVx0aWYgKGJyX3ZsYW5faXNfYnJlbnRyeSh2bGFuKSlcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDM4MDpcdFx0YnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbih2bGFuLCBvbik7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzODEtfVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzgyLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0MzgzOmludCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3Bpbmcoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBib29sIG9uLFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00Mzg0LVx0XHRcdFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQxNi1cdGxpc3RfZm9yX2VhY2hfZW50cnkodmxhbiwgXHUwMDI2dmctXHUwMDNldmxhbl9saXN0LCB2bGlzdClcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDQxNzpcdFx0YnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuKHZsYW4sIG9uKTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQxOC1cbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MjEtXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQ0MjI6Ym9vbCBicl9tdWx0aWNhc3RfdG9nZ2xlX2dsb2JhbF92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MjMte1xuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQzMi1cdHZsYW4tXHUwMDNlcHJpdl9mbGFncyBePSBCUl9WTEZMQUdfR0xPQkFMX01DQVNUX0VOQUJMRUQ7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQ0MzM6XHRicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW4odmxhbiwgb24pO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDM0LVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9NDY3MT1zdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfZGlzYWJsZV9hbGxfcG9ydHMoc3RydWN0IG5ldF9icmlkZ2UgKmJyKVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDY4MS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDY4MjppbnQgYnJfbXVsdGljYXN0X3RvZ2dsZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHVuc2lnbmVkIGxvbmcgdmFsLFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NjgzLVx0XHRcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYz0xMjk1PXN0YXRpYyBpbnQgYnJfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqYnJkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXG4tLVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMTQ0OS1cbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jOjE0NTA6XHRcdGVyciA9IGJyX211bHRpY2FzdF90b2dnbGUoYnIsIG1jYXN0X3Nub29waW5nLCBleHRhY2spO1xubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMTQ1MS1cdFx0aWYgKGVycilcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD05OTI9aW50IGJyX211bHRpY2FzdF9zZXRfdmxhbl9yb3V0ZXIoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdiwgdTggbWNhc3Rfcm91dGVyKTtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjk5MzppbnQgYnJfbXVsdGljYXN0X3RvZ2dsZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHVuc2lnbmVkIGxvbmcgdmFsLFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtOTk0LVx0XHRcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTA2OT12b2lkIGJyX211bHRpY2FzdF91cGRhdGVfdmxhbl9tY2FzdF9jdHgoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdiwgdTggc3RhdGUpO1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTA3MDp2b2lkIGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbik7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxMDcxOmludCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3Bpbmcoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBib29sIG9uLFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTA3Mi1cdFx0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxMDczOmJvb2wgYnJfbXVsdGljYXN0X3RvZ2dsZV9nbG9iYWxfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCBib29sIG9uKTtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTEwNzQtXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTU0Nj1zdGF0aWMgaW5saW5lIHZvaWQgYnJfbXVsdGljYXN0X3VwZGF0ZV92bGFuX21jYXN0X2N0eChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LFxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE1NTAtXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxNTUxOnN0YXRpYyBpbmxpbmUgdm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNTUyLVx0XHRcdFx0XHRcdGJvb2wgb24pXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTU1NS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE1NTY6c3RhdGljIGlubGluZSBpbnQgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nKHN0cnVjdCBuZXRfYnJpZGdlICpicixcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE1NTctXHRcdFx0XHRcdFx0ICAgIGJvb2wgb24sXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTU2Mi1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE1NjM6c3RhdGljIGlubGluZSBib29sIGJyX211bHRpY2FzdF90b2dnbGVfZ2xvYmFsX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbixcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE1NjQtXHRcdFx0XHRcdFx0ICAgYm9vbCBvbilcbi0tXG5uZXQvYnJpZGdlL2JyX3N5c2ZzX2JyLmM9NDE2PXN0YXRpYyBzc2l6ZV90IG11bHRpY2FzdF9zbm9vcGluZ19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkLFxuLS1cbm5ldC9icmlkZ2UvYnJfc3lzZnNfYnIuYy00MTkte1xubmV0L2JyaWRnZS9icl9zeXNmc19ici5jOjQyMDpcdHJldHVybiBzdG9yZV9icmlkZ2VfcGFybShkLCBidWYsIGxlbiwgYnJfbXVsdGljYXN0X3RvZ2dsZSk7XG5uZXQvYnJpZGdlL2JyX3N5c2ZzX2JyLmMtNDIxLX1cbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz0yMDM9c3RhdGljIHZvaWQgYnJfdmxhbl9wdXRfbWFzdGVyKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKm1hc3RlcnYpXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtMjE0LVx0XHRfX3ZsYW5fZGVsX2xpc3QobWFzdGVydik7XG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzoyMTU6XHRcdGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4obWFzdGVydiwgZmFsc2UpO1xubmV0L2JyaWRnZS9icl92bGFuLmMtMjE2LVx0XHRicl9tdWx0aWNhc3RfY3R4X2RlaW5pdChcdTAwMjZtYXN0ZXJ2LVx1MDAzZWJyX21jYXN0X2N0eCk7XG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmM9MjYzPXN0YXRpYyBpbnQgX192bGFuX2FkZChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LCB1MTYgZmxhZ3MsXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtMzU4LVx0X192bGFuX2ZsYWdzX2NvbW1pdCh2LCBmbGFncyk7XG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzozNTk6XHRicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHYsIHRydWUpO1xubmV0L2JyaWRnZS9icl92bGFuLmMtMzYwLVxuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTM5MD1zdGF0aWMgaW50IF9fdmxhbl9kZWwoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdilcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy00MjctXHRcdG5icF92bGFuX3NldF92bGFuX2Rldl9zdGF0ZShwLCB2LVx1MDAzZXZpZCk7XG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzo0Mjg6XHRcdGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4odiwgZmFsc2UpO1xubmV0L2JyaWRnZS9icl92bGFuLmMtNDI5LVx0XHRicl9tdWx0aWNhc3RfcG9ydF9jdHhfZGVpbml0KFx1MDAyNnYtXHUwMDNlcG9ydF9tY2FzdF9jdHgpO1xuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTcxOT1zdGF0aWMgaW50IGJyX3ZsYW5fYWRkX2V4aXN0aW5nKHN0cnVjdCBuZXRfYnJpZGdlICpicixcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy03NjAtXHRcdCpjaGFuZ2VkID0gdHJ1ZTtcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjc2MTpcdFx0YnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbih2bGFuLCB0cnVlKTtcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTc2Mi1cdH1cbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz04OTQ9aW50IGJyX3ZsYW5fZmlsdGVyX3RvZ2dsZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHVuc2lnbmVkIGxvbmcgdmFsLFxuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTkyMC1cdFx0YnJfaW5mbyhiciwgXCYjMzQ7dmxhbiBmaWx0ZXJpbmcgZGlzYWJsZWQsIGF1dG9tYXRpY2FsbHkgZGlzYWJsaW5nIG11bHRpY2FzdCB2bGFuIHNub29waW5nXFxuXCYjMzQ7KTtcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjkyMTpcdFx0YnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nKGJyLCBmYWxzZSwgTlVMTCk7XG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy05MjItXHR9XG4tLVxubmV0L2JyaWRnZS9icl92bGFuX29wdGlvbnMuYz01NTA9c3RhdGljIGludCBicl92bGFuX3Byb2Nlc3NfZ2xvYmFsX29uZV9vcHRzKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlICpicixcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW5fb3B0aW9ucy5jLTU2NC1cdFx0bWNfc25vb3BpbmcgPSBubGFfZ2V0X3U4KHRiW0JSSURHRV9WTEFOREJfR09QVFNfTUNBU1RfU05PT1BJTkddKTtcbm5ldC9icmlkZ2UvYnJfdmxhbl9vcHRpb25zLmM6NTY1Olx0XHRpZiAoYnJfbXVsdGljYXN0X3RvZ2dsZV9nbG9iYWxfdmxhbih2LCAhIW1jX3Nub29waW5nKSlcbm5ldC9icmlkZ2UvYnJfdmxhbl9vcHRpb25zLmMtNTY2LVx0XHRcdCpjaGFuZ2VkID0gdHJ1ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTE6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExNzMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgQnJpZGdlIE11bHRpY2FzdCBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiB0cmFjaW5nIHRoZSBjYWxsIHBhdGhzIHJlbGF0ZWQgdG8gbXVsdGljYXN0IG1hbmFnZW1lbnQgaW4gdGhlIExpbnV4IGJyaWRnZSBjb2RlLiBJdCBsb29rcyBsaWtlIGBicl9tdWx0aWNhc3RfdG9nZ2xlYCBpcyB0cmlnZ2VyZWQgdGhyb3VnaCB0d28gbWFpbiBhdmVudWVzOiBzeXNmcyB2aWEgYG11bHRpY2FzdF9zbm9vcGluZ19zdG9yZWAgYW5kIG5ldGxpbmsgdXNpbmcgYGJyX2NoYW5nZWxpbmtgLiBTaW1pbGFybHksIGBicl9tdWx0aWNhc3RfZGVsX3BvcnRgIGdldHMgY2FsbGVkIHZpYSBgYnJfZGVsX2lmYCwgd2hpY2ggaXRzZWxmIGNhbiBiZSBpbnZva2VkIHRocm91Z2ggbmV0bGluayYjMzk7cyBgUlRNX0RFTExJTktgIG9yIHRoZSBpb2N0bCBgU0lPQ0JSREVMSUZgLiBUaGUga2V5IHRha2Vhd2F5IGhlcmUgaXMgdGhhdCBib3RoIG9mIHRoZXNlIGFyZSBkZWZpbml0ZWx5IGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UuIEZ1cnRoZXJtb3JlLCBzaW5jZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIG5ldHdvcmsgbmFtZXNwYWNlcywgZXZlbiB1bnByaXZpbGVnZWQgdXNlcnMgY2FuIHBvdGVudGlhbGx5IHJlYWNoIHRoZXNlIGZ1bmN0aW9ucy4KCk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGlkZW50aWZ5IHRoZSBjcnVjaWFsIGVudHJ5IHBvaW50cyB0aGF0IGFyZSB3b3J0aCBmb2N1c2luZyBvbiBmb3IgbW9yZSBpbiBkZXB0aCBhbmFseXNpcy4gYGJyX211bHRpY2FzdF9kZWxfcG9ydGAganVtcHMgb3V0IGFzIGEgZ29vZCBjYW5kaWRhdGUuIGBicl9tdWx0aWNhc3RfdG9nZ2xlYCwgYGJyX211bHRpY2FzdF9hZGRfcG9ydGAsIGFuZCBgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nYCBhbHNvIGFwcGVhciBwcm9taXNpbmcgZnJvbSB0aGlzIGZpcnN0IHBhc3MuCgpOb3csIGxldCYjMzk7cyBkaXZlIGludG8gYG5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmNgIHRvIGV4YW1pbmUgYGJyX211bHRpY2FzdF9kZWxfcG9ydGAgYW5kIGBicl9tdWx0aWNhc3RfdG9nZ2xlYC4gSGFuZyBvbi4uLiBgX19icl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0X2N0eGAgaXMgc3RhdGljLiBUaGF0IG1lYW5zIHdlIHNob3VsZCBwaXZvdCBvdXIgYXR0ZW50aW9uIHRvIHRoZSBub24tc3RhdGljIGNvdW50ZXJwYXJ0cyBzdWNoIGFzIGBicl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0YCwgYGJyX211bHRpY2FzdF90b2dnbGVfcG9ydGAsIG9yLCBhZ2FpbiwgYGJyX211bHRpY2FzdF90b2dnbGVgLiBJJiMzOTtsbCBzdGFydCBieSBmb2N1c2luZyBvbiBgYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDExOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyX211bHRpY2FzdF9kaXNhYmxlX3BvcnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYnJpZGdlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTIxMTQ9c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X2VuYWJsZV9wb3J0X2N0eChzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdF9wb3J0ICpwbWN0eClcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIxMjctXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjIxMjg6c3RhdGljIHZvaWQgX19icl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0X2N0eChzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdF9wb3J0ICpwbWN0eClcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjEyOS17XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMTYyLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoyMTYzOnN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRfY3R4KHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0X3BvcnQgKnBtY3R4KVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMTY0LXtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIxNzMtXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjIxNzQ6XHRfX2JyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRfY3R4KHBtY3R4KTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjE3NS1cdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmJyLVx1MDAzZW11bHRpY2FzdF9sb2NrKTtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTIxNzg9c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X3RvZ2dsZV9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsIGJvb2wgb24pXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMjAyLVx0XHRcdGVsc2Vcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MjIwMzpcdFx0XHRcdGJyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRfY3R4KHBtY3R4KTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjIwNC1cdFx0fVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjIxMi1cdGVsc2Vcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MjIxMzpcdFx0YnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydF9jdHgoXHUwMDI2cG9ydC1cdTAwM2VtdWx0aWNhc3RfY3R4KTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjIxNC19XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0yMjE2PXZvaWQgYnJfbXVsdGljYXN0X2VuYWJsZV9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMjIwLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoyMjIxOnZvaWQgYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0KVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMjIyLXtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQzMTg9dm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzU3LVx0XHRlbHNlXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQzNTg6XHRcdFx0X19icl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0X2N0eChcdTAwMjZ2bGFuLVx1MDAzZXBvcnRfbWNhc3RfY3R4KTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDM1OS1cdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2YnItXHUwMDNlbXVsdGljYXN0X2xvY2spO1xuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9NDM4Mz1pbnQgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgYm9vbCBvbixcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MTAtXHRcdGlmIChvbilcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDQxMTpcdFx0XHRicl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0X2N0eChcdTAwMjZwLVx1MDAzZW11bHRpY2FzdF9jdHgpO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDEyLVx0XHRlbHNlXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00NjcxPXN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9kaXNhYmxlX2FsbF9wb3J0cyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00Njc4LVx0bGlzdF9mb3JfZWFjaF9lbnRyeShwb3J0LCBcdTAwMjZici1cdTAwM2Vwb3J0X2xpc3QsIGxpc3QpXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQ2Nzk6XHRcdF9fYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydF9jdHgoXHUwMDI2cG9ydC1cdTAwM2VtdWx0aWNhc3RfY3R4KTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDY4MC19XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9OTc4PXZvaWQgYnJfbXVsdGljYXN0X2VuYWJsZV9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpO1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6OTc5OnZvaWQgYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0KTtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTk4MC12b2lkIGJyX211bHRpY2FzdF9pbml0KHN0cnVjdCBuZXRfYnJpZGdlICpicik7XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTQxMz1zdGF0aWMgaW5saW5lIHZvaWQgYnJfbXVsdGljYXN0X2VuYWJsZV9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTQxNi1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE0MTc6c3RhdGljIGlubGluZSB2b2lkIGJyX211bHRpY2FzdF9kaXNhYmxlX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydClcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE0MTgte1xuLS1cbm5ldC9icmlkZ2UvYnJfc3RwX2lmLmM9OTk9dm9pZCBicl9zdHBfZGlzYWJsZV9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnApXG4tLVxubmV0L2JyaWRnZS9icl9zdHBfaWYuYy0xMTctXHRcdGJyX2ZkYl9kZWxldGVfYnlfcG9ydChiciwgcCwgMCwgMCk7XG5uZXQvYnJpZGdlL2JyX3N0cF9pZi5jOjExODpcdGJyX211bHRpY2FzdF9kaXNhYmxlX3BvcnQocCk7XG5uZXQvYnJpZGdlL2JyX3N0cF9pZi5jLTExOS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTE6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMxNjgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBNdWx0aWNhc3QgU25vb3BpbmcgRnVuY3Rpb25hbGl0eSBpbiB0aGUgQnJpZGdlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIE15IHByaW1hcnkgZ29hbCBoZXJlIGlzIHRvIGlkZW50aWZ5IHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgcmVsYXRlZCB0byBtdWx0aWNhc3Qgc25vb3Bpbmcgd2l0aGluIHRoZSBicmlkZ2UgYW5kIHVuZGVyc3RhbmQgdGhlaXIgY2FsbCBncmFwaC4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgaW1wYWN0IG9mIHBvcnQgc3RhdGUgY2hhbmdlcyBhbmQgVkxBTiBpbnRlZ3JhdGlvbi4KCkZpcnN0LCBJIHNlZSB0aGF0IGBicl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0YCBpcyB0cmlnZ2VyZWQgYnkgYGJyX3N0cF9kaXNhYmxlX3BvcnRgLCB3aGljaCBpbiB0dXJuIGlzIGNhbGxlZCB3aGVuIGEgcG9ydCBnb2VzIGRvd24gb3IgaXMgcmVtb3ZlZC4gVGhhdCBtZWFucyBpdOKAmXMgYSBrZXkgcG9pbnQgdG8gc3RhcnQgd2l0aC4KCkkmIzM5O20gbW92aW5nIG9uIHRvIGBicl9tdWx0aWNhc3RfZGVsX3BvcnRgLiBUaGlzIGZ1bmN0aW9uIGxvb2tzIGltcG9ydGFudCBiZWNhdXNlIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGBkZWxfbmJwYCBhbmQgYW4gZXJyb3IgcGF0aCB3aXRoaW4gYGJyX2FkZF9pZmAuIFRoaXMgaW5kaWNhdGVzIGl0IGhhbmRsZXMgdGhlIHJlbW92YWwgb2YgYSBwb3J0IGFuZCBhc3NvY2lhdGVkIHJlc291cmNlcy4KCk5vdywgbGV0JiMzOTtzIGV4cGxvcmUgYGJyX211bHRpY2FzdF90b2dnbGVgLiBJIHNlZSB0aGF0IGl0JiMzOTtzIGNhbGxlZCBmcm9tIGBicl9jaGFuZ2VsaW5rYCBhbmQgYG11bHRpY2FzdF9zbm9vcGluZ19zdG9yZWAuIFRoaXMgZnVuY3Rpb24gY2xlYXJseSBtYW5hZ2VzIHRoZSBvdmVyYWxsIGVuYWJsaW5nL2Rpc2FibGluZyBvZiBzbm9vcGluZywgcHJvYmFibHkgaW4gcmVzcG9uc2UgdG8gbGluayBzdGF0ZSBjaGFuZ2VzIG9yIGNvbmZpZ3VyYXRpb24gY2hhbmdlcy4KCk5leHQsIEkgbmVlZCB0byBjaGVjayBgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nYCwgd2hpY2ggaXMgdHJpZ2dlcmVkIGJ5IGBicl9ib29sb3B0X3RvZ2dsZWAuIEl0IGxvb2tzIGxpa2UgaXQgaGFuZGxlcyB0aGUgdG9nZ2xpbmcgb2Ygc25vb3BpbmcgYXQgdGhlIFZMQU4gbGV2ZWwuCgpTaW1pbGFybHksIEkgc2hvdWxkIGNoZWNrIGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYCBzaW5jZSBpdCBpcyBjYWxsZWQgZnJvbSBgYnJfdmxhbl9hZGRfZXhpc3RpbmdgLCBgX192bGFuX2RlbGAsIGBfX3ZsYW5fYWRkYCwgYW5kIGBicl92bGFuX3B1dF9tYXN0ZXJgLiBUaGlzIGZ1bmN0aW9uIGxvb2tzIGVzc2VudGlhbCBmb3IgYWRkaW5nL3JlbW92aW5nIFZMQU5zIGFuZCB0aGVpciByZWxhdGlvbnNoaXBzIHdpdGggc25vb3BpbmcuCgpJIGFsc28gbmVlZCB0byBjaGVjayBgYnJfbXVsdGljYXN0X3RvZ2dsZV9nbG9iYWxfdmxhbmAgc2luY2UgaXQgaXMgY2FsbGVkIGZyb20gYGJyX3ZsYW5fcHJvY2Vzc19nbG9iYWxfb25lX29wdHNgLiBUaGlzIGlzIHJlbGF0ZWQgdG8gdGhlIGdsb2JhbCBjb25maWd1cmF0aW9uIG9mIHNub29waW5nIG9uIFZMQU5zLgoKVGhlIG5leHQgY3JpdGljYWwgZnVuY3Rpb24gc2VlbXMgdG8gYmUgYGJyX211bHRpY2FzdF9hZGRfcG9ydGAuIEl0JiMzOTtzIGNhbGxlZCBmcm9tIGBicl9hZGRfaWZgLCBzbyBpdCYjMzk7cyBpbnZvbHZlZCBpbiBhZGRpbmcgYSBwb3J0IHRvIHRoZSBicmlkZ2UuCgpBbHNvIGBicl9tdWx0aWNhc3RfZW5hYmxlX3BvcnRgLCB3aGljaCBpcyBjYWxsZWQgZnJvbSBgYnJfc3RwX2VuYWJsZV9wb3J0YC4KCmBicl9tdWx0aWNhc3RfZGVsX3BvcnRfZ3JvdXBgIGlzIHRyaWdnZXJlZCBmcm9tIGBicl9tZGJfYWRkX2dyb3VwX3N0YXJfZ2AsIHdoaWNoIGlzIHJlbGF0ZWQgdG8gcG9ydCBncm91cHMuIFdoaWxlIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYXJlbiYjMzk7dCBkaXJlY3RseSBsaW5rZWQgdG8gaXQsIHBvcnQgZ3JvdXBzIGFyZSBjbGVhcmx5IHJlbGF0ZWQgdG8gdGhpcyBhcmVhLgoKTG9va2luZyBjbG9zZWx5IGF0IHdoYXQgZnVuY3Rpb25zIGFyZSBiZWluZyBjaGFuZ2VkLCBJIHNlZSBgYnJfbXVsdGljYXN0X2RlbF9wb3J0YCBhbmQgYF9fYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydF9jdHhgLiBMZXQmIzM5O3MgdW5kZXJzdGFuZCBob3cgdGhlc2UgYXJlIGludGVyY29ubmVjdGVkLgoKYF9fYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydF9jdHhgIGlzIGNhbGxlZCBieSBgYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydF9jdHhgLCBgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbmAsIGFuZCBgYnJfbXVsdGljYXN0X2Rpc2FibGVfYWxsX3BvcnRzYC4gVGhpcyBwb2ludHMgdG8gaXRzIHJvbGUgaW4gYWN0dWFsbHkgZGlzYWJsaW5nIHRoZSBwb3J0IGNvbnRleHQsIHBvdGVudGlhbGx5IGFzIGEgaGVscGVyLgoKSSBzZWUgdGhhdCBgYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydF9jdHhgIGlzIGNhbGxlZCBmcm9tIGBicl9tdWx0aWNhc3RfdG9nZ2xlX3BvcnRgICh3aGljaCBpcyBpbiB0dXJuIGNhbGxlZCBmcm9tIGBicl9tdWx0aWNhc3RfZW5hYmxlX3BvcnRgIGFuZCBgYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydGApIGFuZCBhbHNvIGZyb20gYGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZ2AuIEl0IGhhbmRsZXMgcG9ydC1sZXZlbCBzbm9vcGluZyBjaGFuZ2VzLgoKVGhlbiBgYnJfbXVsdGljYXN0X2Rpc2FibGVfYWxsX3BvcnRzYCBpcyBjYWxsZWQgYnkgYGJyX211bHRpY2FzdF90b2dnbGVgLCBzdWdnZXN0aW5nIHRoYXQgdGhpcyBpcyBhIGdsb2JhbCBvcGVyYXRpb24uCgpUaGVyZWZvcmUsIHRoZSBrZXkgZW50cnkgcG9pbnRzIEkmIzM5O20gZm9jdXNpbmcgb24gYXJlOiBgYnJfbXVsdGljYXN0X2RlbF9wb3J0YCwgYGJyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRgLCBgYnJfbXVsdGljYXN0X3RvZ2dsZWAsIGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYCwgYW5kIGBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3BpbmdgLgoKTm93LCBJJiMzOTtsbCBjaGVjayB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgZXhwb3J0ZWQuIEdvb2QsIGBicl9tdWx0aWNhc3RfZGVsX3BvcnRgLCBgYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydGAsIGBicl9tdWx0aWNhc3RfdG9nZ2xlYCwgYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gLCBhbmQgYGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZ2AgYXJlIGFsbCBub24tc3RhdGljLiBUaGlzIGNvbmZpcm1zIHRoYXQgdGhlc2UgYXJlIHBhcnQgb2YgdGhlIHB1YmxpYyBBUEksIHdoaWNoIGlzIGNyaXRpY2FsLgoKRmluYWxseSwgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGFsbCB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQgdG8gc3VwcG9ydCB0aGVzZSBmdW5jdGlvbnMuIEkmIzM5O2xsIG5lZWQgYEJSSURHRWAsIGBJTkVUYCwgYW5kIGBCUklER0VfSUdNUF9TTk9PUElOR2AuIFNpbmNlIFZMQU4tcmVsYXRlZCBmdW5jdGlvbnMgYXJlIGluIHBsYXkgKGUuZy4sIGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYCwgYGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZ2AsIGFuZCBgCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTE6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYnJpZGdlL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDUwOlx0Y29uZmlnIEJSSURHRV9WTEFOX0ZJTFRFUklOR1xuICA1MTpcdFx0Ym9vbCBcJiMzNDtWTEFOIGZpbHRlcmluZ1wmIzM0O1xuICA1MjpcdFx0ZGVwZW5kcyBvbiBCUklER0VcbiAgNTM6XHRcdGRlcGVuZHMgb24gVkxBTl84MDIxUVxuICA1NDpcdFx0ZGVmYXVsdCBuXG4gIDU1Olx0XHRoZWxwXG4gIDU2Olx0XHQgIElmIHlvdSBzYXkgWSBoZXJlLCB0aGVuIHRoZSBFdGhlcm5ldCBicmlkZ2Ugd2lsbCBiZSBhYmxlIHNlbGVjdGl2ZWx5XG4gIDU3Olx0XHQgIHJlY2VpdmUgYW5kIGZvcndhcmQgdHJhZmZpYyBiYXNlZCBvbiBWTEFOIGluZm9ybWF0aW9uIGluIHRoZSBwYWNrZXRcbiAgNTg6XHRcdCAgYW55IFZMQU4gaW5mb3JtYXRpb24gY29uZmlndXJlZCBvbiB0aGUgYnJpZGdlIHBvcnQgb3IgYnJpZGdlIGRldmljZS5cbiAgNTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTE6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUzOTYKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkNvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzOiBBIFJlZmluZW1lbnQqKgoKUmlnaHQsIHNvIGBCUklER0VfVkxBTl9GSUxURVJJTkdgIGlzIGRlZmluaXRlbHkgY29udGluZ2VudCBvbiBib3RoIGBCUklER0VgIGFuZCBgVkxBTl84MDIxUWAuIE1ha2VzIHNlbnNlLCB3ZSBuZWVkIHRoZSBicmlkZ2luZyBmdW5jdGlvbmFsaXR5IGFuZCB0aGUgODAyLjFRIHRhZ2dpbmcgc3VwcG9ydC4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgYFZMQU5fODAyMVFgIGlzIGluY2x1ZGVkIGluIG15IGBFbmFibGVDb25maWdzYCBsaXN0LiBObyBicmFpbmVyIHRoZXJlLgoKTm93LCBsZXQmIzM5O3Mgc2VlIGFib3V0IGBCUklER0VfSUdNUF9TTk9PUElOR2AuIEkgc2VlbSB0byByZWNhbGwgaXQgZGVwZW5kaW5nIG9uIGBJTkVUYCwgc28gbGV0JiMzOTtzIGp1c3QgY29uZmlybSB0aGF0IGRlcGVuZGVuY3kuIFllcCwgdGhlcmUgaXQgaXMuIEdvb2QuIFNvLCBiYXNlZCBvbiB3aGF0IEkgc2VlIGhlcmUsIG15IGBFbmFibGVDb25maWdzYCBzaG91bGQgY29udGFpbiB0aGUgZm9sbG93aW5nOiBgQlJJREdFYCwgYElORVRgLCBgQlJJREdFX0lHTVBfU05PT1BJTkdgLCBgVkxBTl84MDIxUWAsIGFuZCBgQlJJREdFX1ZMQU5fRklMVEVSSU5HYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgY29yZSBjb21wb25lbnRzIEkgbmVlZCwgYWNjb3JkaW5nIHRvIHdoYXQmIzM5O3MgZGVmaW5lZCBoZXJlLgoKSnVzdCB0byBiZSBzYWZlLCBJIHNob3VsZCBxdWlja2x5IHZlcmlmeSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGRpcmVjdCBkZXBlbmRlbmNpZXMgdGhhdCBJIG1pZ2h0IGhhdmUgb3Zlcmxvb2tlZCBmb3IgYEJSSURHRWAgaXRzZWxmLiBXZSBkb24mIzM5O3Qgd2FudCBhbnkgdW5leHBlY3RlZCBzdXJwcmlzZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDExOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUklER0UkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9LY29uZmlnLTUtXG5uZXQvYnJpZGdlL0tjb25maWc6Njpjb25maWcgQlJJREdFXG5uZXQvYnJpZGdlL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0OzgwMi4xZCBFdGhlcm5ldCBCcmlkZ2luZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTg3OQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkV4YW1pbmluZyBCcmlkZ2UgRGVwZW5kZW5jaWVzIGluIEtjb25maWcqKgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGBCUklER0VgIGNvbmZpZ3VyYXRpb24gYW5kIGl0cyBkZXBlbmRlbmNpZXMgd2l0aGluIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtLiBUaGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBpcyBgbmV0L2JyaWRnZS9LY29uZmlnYC4gVGhpcyBmaWxlIHNob3VsZCBob2xkIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBicmlkZ2luZyBmdW5jdGlvbmFsaXR5IGFuZCwgY3J1Y2lhbGx5LCBzcGVjaWZ5IHdoYXQgb3RoZXIga2VybmVsIGZlYXR1cmVzIG9yIG1vZHVsZXMgYXJlIHJlcXVpcmVkIHRvIGJlIGVuYWJsZWQgb3IgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4gSSB3YW50IHRvIGNvbmZpcm0gbXkgYXNzdW1wdGlvbnMgYW5kIGVuc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnkga2V5IGRlcGVuZGVuY2llcyBiZWZvcmUgSSBtb3ZlIGZvcndhcmQgd2l0aCBteSBhbmFseXNpcy4gSXQmIzM5O3MgdGhlIHN0YW5kYXJkIHByYWN0aWNlIC0gYXZvaWQgd2FzdGluZyB0aW1lIGxhdGVyIGJlY2F1c2Ugb2Ygb3ZlcnNpZ2h0cyBlYXJsaWVyLiBUaGF0IGZpbGUgc2hvdWxkIHByb3ZpZGUgdGhlIGRlZmluaXRpdmUgc291cmNlIG9mIHRydXRoIGZvciB0aGUga2VybmVsJiMzOTtzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTE6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYnJpZGdlL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDY6XHRjb25maWcgQlJJREdFXG4gICA3Olx0XHR0cmlzdGF0ZSBcJiMzNDs4MDIuMWQgRXRoZXJuZXQgQnJpZGdpbmdcJiMzNDtcbiAgIDg6XHRcdHNlbGVjdCBMTENcbiAgIDk6XHRcdHNlbGVjdCBTVFBcbiAgMTA6XHRcdGhlbHBcbiAgMTE6XHRcdCAgSWYgeW91IHNheSBZIGhlcmUsIHRoZW4geW91ciBMaW51eCBib3ggd2lsbCBiZSBhYmxlIHRvIGFjdCBhcyBhblxuICAxMjpcdFx0ICBFdGhlcm5ldCBicmlkZ2UsIHdoaWNoIG1lYW5zIHRoYXQgdGhlIGRpZmZlcmVudCBFdGhlcm5ldCBzZWdtZW50cyBpdFxuICAxMzpcdFx0ICBpcyBjb25uZWN0ZWQgdG8gd2lsbCBhcHBlYXIgYXMgb25lIEV0aGVybmV0IHRvIHRoZSBwYXJ0aWNpcGFudHMuXG4gIDE0Olx0XHQgIFNldmVyYWwgc3VjaCBicmlkZ2VzIGNhbiB3b3JrIHRvZ2V0aGVyIHRvIGNyZWF0ZSBldmVuIGxhcmdlclxuICAxNTpcdFx0ICBuZXR3b3JrcyBvZiBFdGhlcm5ldHMgdXNpbmcgdGhlIElFRUUgODAyLjEgc3Bhbm5pbmcgdHJlZSBhbGdvcml0aG0uXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDExOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MjU2CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTMxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJyaWRnZSBNdWx0aWNhc3QgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoZSBkZXBlbmRlbmNpZXMuLi4gYEJSSURHRWAgaXMgdGhlIHJvb3QsIGJ1dCByZWxpZXMgaW1wbGljaXRseSBvbiBgTkVUYC4gYElORVRgIGFuZCBgVkxBTl84MDIxUWAgYXJlIHN0YW5kYXJkIGFuZCBleHBlY3RlZC4gQ3J1Y2lhbGx5LCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGhlcmUgYXJlIGBCUklER0VfSUdNUF9TTk9PUElOR2AgYW5kIGBCUklER0VfVkxBTl9GSUxURVJJTkdgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBmb2N1cyBuZWVkcyB0byBiZS4KCk5vdywgdGhpcyBwYXRjaC4uLiBpdCYjMzk7cyBhZGRyZXNzaW5nIGEgc3VidGxlIGNvbmN1cnJlbmN5IGlzc3VlIHdpdGhpbiB0aGUgYnJpZGdlJiMzOTtzIG11bHRpY2FzdCBoYW5kbGluZywgc3BlY2lmaWNhbGx5IHdoZW4gZGVsZXRpbmcgbXVsdGljYXN0IGdyb3VwcyBmcm9tIGEgcG9ydCYjMzk7cyBgbWdsaXN0YC4gVGhlIGNvcmUgcHJvYmxlbSBsaWVzIHdpdGhpbiB0aGUgYGJyX211bHRpY2FzdF9kZWxfcG9ydGAgYW5kIGBfX2JyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRfY3R4YCBmdW5jdGlvbnMuIFRoZSBgaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZWAgbWFjcm8sIHVzZWQgdG8gaXRlcmF0ZSB0aHJvdWdoIHRoZSBsaXN0IG9mIG11bHRpY2FzdCBncm91cHMsIGNhbiBnZXQgdHJpcHBlZCB1cCBpZiB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gYGJyX211bHRpY2FzdF9maW5kX2RlbF9wZ2AgcmVtb3ZlcyB0aGUgZW50cnkgaXQmIzM5O3MgY3VycmVudGx5IHByb2Nlc3NpbmcgKm9yKiBvdGhlciBlbnRyaWVzIG9uIHRoZSBsaXN0LiBUaGUgb3JpZ2luYWwgY29kZSYjMzk7cyBpdGVyYXRvciwgc3BlY2lmaWNhbGx5IHRoZSBgbmAgcG9pbnRlciBpbiB0aGUgYGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVgLCBjb3VsZCBiZWNvbWUgaW52YWxpZCBvciBzdGFsZSwgbGVhZGluZyB0byBwb3RlbnRpYWwgaXNzdWVzIGxpa2UgbWlzc2VkIGVudHJpZXMgZHVyaW5nIGl0ZXJhdGlvbiwgb3IgZXZlbiB1c2UtYWZ0ZXItZnJlZSwgdGhvdWdoIHRoZSBjb2RlIGNvbW1lbnQgaW5kaWNhdGVzIHRoYXQgcG9ydCBncm91cHMgYXJlIG9ubHkgZnJlZWQgYnkgdGhlIEdDIHdvcmsgdW5kZXIgYG11bHRpY2FzdF9sb2NrYCwgc28gaXQgaXMgbW9yZSBsaWtlbHkgdGhhdCBvbmx5IGVudHJpZXMgYXJlIG1pc3NlZC4gVGhlIHBhdGNoIGludHJvZHVjZXMgYSBgcmVzdGFydDpgIGxhYmVsIGFuZCB1c2VzIGEgYHdoaWxlYCBsb29wLCBhbG9uZyB3aXRoIGEgY2hlY2sgYWZ0ZXIgdGhlIGRlbGV0ZSwgdG8gaGFuZGxlIHRoZSBjYXNlIHdoZXJlIGFuIGVudHJ5IGlzIGRlbGV0ZWQgd2l0aGluIHRoZSBsb29wLiBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgaXRlcmF0aW9uIHJlc3RhcnRzIGZyb20gdGhlIGJlZ2lubmluZyBpZiBhIGdyb3VwIGlzIHJlbW92ZWQsIGFuZCBwcmV2ZW50cyB0aGUgc3RhbGUgcG9pbnRlciBwcm9ibGVtLgoKVGhpcyBpcyBhIGZ1bmN0aW9uYWwgZml4IHRvIGNvcmUgYnJpZGdlIG11bHRpY2FzdCBsb2dpYywgYW5kIHNvLCBpdCBuZWVkcyB0aG9yb3VnaCBmdXp6aW5nLgoKTXkgcHJpbWFyeSBmb2N1cyBoZXJlIGlzIGdvaW5nIHRvIGJlIHRob3NlIGZ1bmN0aW9uczogYGJyX211bHRpY2FzdF9kZWxfcG9ydGAgYW5kIGBfX2JyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRfY3R4YC4gQnV0LCB0byBiZSBjb21wcmVoZW5zaXZlLCBJIG5lZWQgdG8gaW5jbHVkZSB0aGUgZW50cnkgcG9pbnRzIGZvciB0aGVzZSwgcGFydGljdWxhcmx5IGBicl9tdWx0aWNhc3RfdG9nZ2xlYCwgYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gIGFuZCBgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nYCwgYnV0IGFsc28gYGJyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRgLiBOb3csIGlzIGBicl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0YCAqdGhlKiBiZXN0IGVudHJ5IHBvaW50IGZvciBgX19icl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0X2N0eGA/IExldCYjMzk7cyB0cmFjZSBpdC4gSXQgc2VlbXMgYF9fYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydF9jdHhgIGlzIGluZGVlZCBjYWxsZWQgdmlhIGBicl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0X2N0eGAsIHdoaWNoIGlzIHVsdGltYXRlbHkgY2FsbGVkIGJ5IGBicl9tdWx0aWNhc3RfdG9nZ2xlX3BvcnRgLiBCdXQsIGBicl9tdWx0aWNhc3RfdG9nZ2xlX3BvcnRgIGlzIGFsc28gY2FsbGVkIGJ5IGBicl9tdWx0aWNhc3RfZW5hYmxlX3BvcnRgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IGxvZ2ljIGJldHRlciAtIGRvZXMgYGJyX211bHRpY2FzdF9lbmFibGVfcG9ydGAgZGlzYWJsZSBmaXJzdD8gTm8sIGFjdHVhbGx5LCBgYnJfbXVsdGljYXN0X3RvZ2dsZV9wb3J0YCBpcyB0aGUgcmVhbCBjZW50cmFsIHBvaW50LCBhbmQgY2FuIGJlIGNhbGxlZCBlaXRoZXIgd2l0aCBgb25gIGFzIGZhbHNlLCB3aGljaCB3aWxsIGNhbGwgdGhlIGRpc2FibGUgcm91dGluZSwgKm9yKiBpZiBgb25gIGlzIHRydWUgYnV0IGBicl9tdWx0aWNhc3RfcG9ydF9jdHhfdmxhbl9kaXNhYmxlZGAgaXMgdHJ1ZS4uLiBJIG5lZWQgdG8gY2hlY2sgdGhlIGNhbGwgb2YgYGJyX211bHRpY2FzdF90b2dnbGVfcG9ydGAgbW9yZSBjbG9zZWx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMTo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticl9tdWx0aWNhc3RfdG9nZ2xlX3BvcnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYnJpZGdlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTIxNjM9c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydF9jdHgoc3RydWN0IG5ldF9icmlkZ2VfbWNhc3RfcG9ydCAqcG1jdHgpXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMTc3LVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoyMTc4OnN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF90b2dnbGVfcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LCBib29sIG9uKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMTc5LXtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTIyMTY9dm9pZCBicl9tdWx0aWNhc3RfZW5hYmxlX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydClcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjIxNy17XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjIyMTg6XHRicl9tdWx0aWNhc3RfdG9nZ2xlX3BvcnQocG9ydCwgdHJ1ZSk7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIyMTktfVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MjIyMT12b2lkIGJyX211bHRpY2FzdF9kaXNhYmxlX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydClcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjIyMi17XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjIyMjM6XHRicl9tdWx0aWNhc3RfdG9nZ2xlX3BvcnQocG9ydCwgZmFsc2UpO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMjI0LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTE6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg2NDkKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGNvZGUuCgoqKkFuYWx5emluZyBgYnJfbXVsdGljYXN0X3RvZ2dsZV9wb3J0YCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IHJpZ2h0IGludG8gaXQuIFRoZSBmdW5jdGlvbiBuYW1lLCBgYnJfbXVsdGljYXN0X3RvZ2dsZV9wb3J0YCwgaW1tZWRpYXRlbHkgdGVsbHMgbWUgaXQmIzM5O3MgZGVhbGluZyB3aXRoIG11bHRpY2FzdCB0cmFmZmljIG9uIGEgYnJpZGdlLCBzcGVjaWZpY2FsbHkgdG9nZ2xpbmcgYSBwb3J0JiMzOTtzIHBhcnRpY2lwYXRpb24uIEkgd2FudCB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyBqb2luaW5nIGFuZCBsZWF2aW5nIG11bHRpY2FzdCBncm91cHMsIHByb2JhYmx5IGludGVyYWN0aW5nIHdpdGggdGhlIHVuZGVybHlpbmcgSUdNUC9NTEQgbG9naWMgb3Igc2ltaWxhci4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgY29yZSBhY3Rpb25zOiBhcmUgd2UgYWRkaW5nIG9yIGRlbGV0aW5nIHRoZSBwb3J0IGZyb20gaW50ZXJuYWwgc3RydWN0dXJlcz8gV2hhdCBmbGFncyBvciBzdGF0ZSB2YXJpYWJsZXMgYXJlIGJlaW5nIG1hbmlwdWxhdGVkPyBJcyB0aGVyZSBhbnkgaW50ZXJhY3Rpb24gd2l0aCB0aGUgaGFyZHdhcmUgZm9yd2FyZGluZyB0YWJsZSBpbnZvbHZlZCwgYW5kIGlmIHNvLCBob3c/IEkgYWxzbyBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHBvdGVudGlhbCBlcnJvciBoYW5kbGluZyDigJMgYXJlIHRoZXJlIGNoZWNrcyBmb3IgaW52YWxpZCBwb3J0IG51bWJlcnMsIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzLCBvciBvdGhlciBjb21tb24gaXNzdWVzPyBGaW5hbGx5LCBJIG5lZWQgdG8gc2VlIHRoZSBjb250ZXh0IGluIHdoaWNoIGl0JiMzOTtzIGJlaW5nIGNhbGxlZCwgdG8gdHJ1bHkgdW5kZXJzdGFuZCB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgdGhpcyBkZXNpZ24uIElzIHRoaXMgY2FsbGVkIGFzIGEgZGlyZWN0IEFQSSBlbnRyeXBvaW50LCBvciBpcyBpdCB0cmlnZ2VyZWQgYnkgc29tZSBldmVudCwgc3VjaCBhcyBhIHVzZXItc3BhY2UgY29uZmlndXJhdGlvbiBjb21tYW5kIG9yIGEgaGFyZHdhcmUgY2hhbmdlPyBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHRvIGJlIGZhaXJseSBpbnZvbHZlZCwgZ2l2ZW4gdGhhdCBtdWx0aWNhc3Qgcm91dGluZyBhbmQgZm9yd2FyZGluZyBjYW4gYmUgY29tcGxleC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjE3OCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMTc4Olx0c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X3RvZ2dsZV9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsIGJvb2wgb24pXG4yMTc5Olx0e1xuMjE4MDpcdCNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkcpXG4yMTgxOlx0XHRpZiAoYnJfb3B0X2dldChwb3J0LVx1MDAzZWJyLCBCUk9QVF9NQ0FTVF9WTEFOX1NOT09QSU5HX0VOQUJMRUQpKSB7XG4yMTgyOlx0XHRcdHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnO1xuMjE4MzpcdFx0XHRzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuO1xuMjE4NDpcdFxuMjE4NTpcdFx0XHRyY3VfcmVhZF9sb2NrKCk7XG4yMTg2Olx0XHRcdHZnID0gbmJwX3ZsYW5fZ3JvdXBfcmN1KHBvcnQpO1xuMjE4NzpcdFx0XHRpZiAoIXZnKSB7XG4yMTg4Olx0XHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4yMTg5Olx0XHRcdFx0cmV0dXJuO1xuMjE5MDpcdFx0XHR9XG4yMTkxOlx0XG4yMTkyOlx0XHRcdC8qIGl0ZXJhdGUgZWFjaCB2bGFuLCB0b2dnbGUgdmxhbiBtdWx0aWNhc3QgY29udGV4dCAqL1xuMjE5MzpcdFx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh2bGFuLCBcdTAwMjZ2Zy1cdTAwM2V2bGFuX2xpc3QsIHZsaXN0KSB7XG4yMTk0Olx0XHRcdFx0c3RydWN0IG5ldF9icmlkZ2VfbWNhc3RfcG9ydCAqcG1jdHggPVxuMjE5NTpcdFx0XHRcdFx0XHRcdFx1MDAyNnZsYW4tXHUwMDNlcG9ydF9tY2FzdF9jdHg7XG4yMTk2Olx0XHRcdFx0dTggc3RhdGUgPSBicl92bGFuX2dldF9zdGF0ZSh2bGFuKTtcbjIxOTc6XHRcdFx0XHQvKiBlbmFibGUgdmxhbiBtdWx0aWNhc3QgY29udGV4dCB3aGVuIHN0YXRlIGlzXG4yMTk4Olx0XHRcdFx0ICogTEVBUk5JTkcgb3IgRk9SV0FSRElOR1xuMjE5OTpcdFx0XHRcdCAqL1xuMjIwMDpcdFx0XHRcdGlmIChvbiBcdTAwMjZcdTAwMjYgYnJfdmxhbl9zdGF0ZV9hbGxvd2VkKHN0YXRlLCB0cnVlKSlcbjIyMDE6XHRcdFx0XHRcdGJyX211bHRpY2FzdF9lbmFibGVfcG9ydF9jdHgocG1jdHgpO1xuMjIwMjpcdFx0XHRcdGVsc2VcbjIyMDM6XHRcdFx0XHRcdGJyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRfY3R4KHBtY3R4KTtcbjIyMDQ6XHRcdFx0fVxuMjIwNTpcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbjIyMDY6XHRcdFx0cmV0dXJuO1xuMjIwNzpcdFx0fVxuMjIwODpcdCNlbmRpZlxuMjIwOTpcdFx0LyogdG9nZ2xlIHBvcnQgbXVsdGljYXN0IGNvbnRleHQgd2hlbiB2bGFuIHNub29waW5nIGlzIGRpc2FibGVkICovXG4yMjEwOlx0XHRpZiAob24pXG4yMjExOlx0XHRcdGJyX211bHRpY2FzdF9lbmFibGVfcG9ydF9jdHgoXHUwMDI2cG9ydC1cdTAwM2VtdWx0aWNhc3RfY3R4KTtcbjIyMTI6XHRcdGVsc2VcbjIyMTM6XHRcdFx0YnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydF9jdHgoXHUwMDI2cG9ydC1cdTAwM2VtdWx0aWNhc3RfY3R4KTtcbjIyMTQ6XHR9XG4yMjE1Olx0XG4yMjE2Olx0dm9pZCBicl9tdWx0aWNhc3RfZW5hYmxlX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydClcbjIyMTc6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NjA0CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBNdWx0aWNhc3QgQ29udHJvbCBQYXRocyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBwcmltYXJ5IGNvbnRyb2wgcGF0aHMgZm9yIG1hbmFnaW5nIG11bHRpY2FzdCBiZWhhdmlvciBvbiBicmlkZ2UgcG9ydHMuIFRoaW5raW5nIHRoaXMgdGhyb3VnaCwgYGJyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRgIHNlZW1zIGxpa2UgYSBzb2xpZCBlbnRyeSBwb2ludCwgYW5kIHRoYXQgbWFrZXMgc2Vuc2Ug4oCTIGl0JiMzOTtzIHRoZSBuYXR1cmFsIHBsYWNlIHRvIHN0YXJ0IHdoZW4gZGlzYWJsaW5nLiBJIGFsc28gbmVlZCB0byB0aGluayBhYm91dCBob3cgZW5hYmxpbmcgaW50ZXJhY3RzIHdpdGggdGhpcywgYW5kIGBicl9tdWx0aWNhc3RfZW5hYmxlX3BvcnRgIGNhdGNoZXMgbXkgYXR0ZW50aW9uIGJlY2F1c2UgaXQgKmNhbiogY2FsbCBgYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydF9jdHhgIGlmIGBvbmAgaXMgdHJ1ZSBidXQgdGhlIFZMQU4gc3RhdGUgaXNuJiMzOTt0IHJpZ2h0LiBUaGF0JiMzOTtzIGNsZXZlcjsgaGFuZGxlcyB0aGUgY29uZGl0aW9uYWwgZGlzYWJsZSBuaWNlbHkuCgpUaGVyZWZvcmUsIHNpbmNlIHRoZXkmIzM5O3JlIHRpZ2h0bHkgY291cGxlZCBpbiB0aGF0IG1hbm5lciwgSSYjMzk7bGwgcHV0IGJvdGggYGJyX211bHRpY2FzdF9lbmFibGVfcG9ydGAgYW5kIGBicl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0YCBvbiBteSBsaXN0IG9mIHJlbGV2YW50IGZ1bmN0aW9ucywgZXNwZWNpYWxseSBiZWNhdXNlIG9uZSBsZXZlcmFnZXMgdGhlIG90aGVyLgoKVG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZSwgSSBzaG91bGQgYWxzbyB2ZXJpZnkgaG93IHRvZ2dsaW5nIFZMQU4gc25vb3BpbmcgaW1wYWN0cyBtdWx0aWNhc3QgY29udHJvbCwgc28gbGV0JiMzOTtzIHNoaWZ0IGdlYXJzIGFuZCBjaGVjayB0aGUgbG9naWMgd2l0aGluIGBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3BpbmdgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MzgzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQzODM6XHRpbnQgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgYm9vbCBvbixcbjQzODQ6XHRcdFx0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbjQzODU6XHR7XG40Mzg2Olx0XHRzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2ZztcbjQzODc6XHRcdHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW47XG40Mzg4Olx0XHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwO1xuNDM4OTpcdFxuNDM5MDpcdFx0aWYgKGJyX29wdF9nZXQoYnIsIEJST1BUX01DQVNUX1ZMQU5fU05PT1BJTkdfRU5BQkxFRCkgPT0gb24pXG40MzkxOlx0XHRcdHJldHVybiAwO1xuNDM5MjpcdFxuNDM5MzpcdFx0aWYgKG9uIFx1MDAyNlx1MDAyNiAhYnJfb3B0X2dldChiciwgQlJPUFRfVkxBTl9FTkFCTEVEKSkge1xuNDM5NDpcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDtDYW5ub3QgZW5hYmxlIG11bHRpY2FzdCB2bGFuIHNub29waW5nIHdpdGggdmxhbiBmaWx0ZXJpbmcgZGlzYWJsZWRcJiMzNDspO1xuNDM5NTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjQzOTY6XHRcdH1cbjQzOTc6XHRcbjQzOTg6XHRcdHZnID0gYnJfdmxhbl9ncm91cChicik7XG40Mzk5Olx0XHRpZiAoIXZnKVxuNDQwMDpcdFx0XHRyZXR1cm4gMDtcbjQ0MDE6XHRcbjQ0MDI6XHRcdGJyX29wdF90b2dnbGUoYnIsIEJST1BUX01DQVNUX1ZMQU5fU05PT1BJTkdfRU5BQkxFRCwgb24pO1xuNDQwMzpcdFxuNDQwNDpcdFx0LyogZGlzYWJsZS9lbmFibGUgbm9uLXZsYW4gbWNhc3QgY29udGV4dHMgYmFzZWQgb24gdmxhbiBzbm9vcGluZyAqL1xuNDQwNTpcdFx0aWYgKG9uKVxuNDQwNjpcdFx0XHRfX2JyX211bHRpY2FzdF9zdG9wKFx1MDAyNmJyLVx1MDAzZW11bHRpY2FzdF9jdHgpO1xuNDQwNzpcdFx0ZWxzZVxuNDQwODpcdFx0XHRfX2JyX211bHRpY2FzdF9vcGVuKFx1MDAyNmJyLVx1MDAzZW11bHRpY2FzdF9jdHgpO1xuNDQwOTpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShwLCBcdTAwMjZici1cdTAwM2Vwb3J0X2xpc3QsIGxpc3QpIHtcbjQ0MTA6XHRcdFx0aWYgKG9uKVxuNDQxMTpcdFx0XHRcdGJyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRfY3R4KFx1MDAyNnAtXHUwMDNlbXVsdGljYXN0X2N0eCk7XG40NDEyOlx0XHRcdGVsc2VcbjQ0MTM6XHRcdFx0XHRicl9tdWx0aWNhc3RfZW5hYmxlX3BvcnRfY3R4KFx1MDAyNnAtXHUwMDNlbXVsdGljYXN0X2N0eCk7XG40NDE0Olx0XHR9XG40NDE1Olx0XG40NDE2Olx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHZsYW4sIFx1MDAyNnZnLVx1MDAzZXZsYW5fbGlzdCwgdmxpc3QpXG40NDE3Olx0XHRcdGJyX211bHRpY2FzdF90b2dnbGVfdmxhbih2bGFuLCBvbik7XG40NDE4Olx0XG40NDE5Olx0XHRyZXR1cm4gMDtcbjQ0MjA6XHR9XG40NDIxOlx0XG40NDIyOlx0Ym9vbCBicl9tdWx0aWNhc3RfdG9nZ2xlX2dsb2JhbF92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNjY5CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gYXMgaWYgdGhleSB3ZXJlIG15IG93biBpbW1lZGlhdGUgcHJvY2Vzc2luZzoKCioqSW5pdGlhbCBBc3Nlc3NtZW50OiBNdWx0aWNhc3QgU25vb3BpbmcgVG9nZ2xlIEVudHJ5IFBvaW50KioKClJpZ2h0LCBgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nYCBzZWVtcyBsaWtlIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIGludmVzdGlnYXRpbmcgbXVsdGljYXN0IHNub29waW5nIGZ1bmN0aW9uYWxpdHkuIE15IGd1dCBmZWVsaW5nIGlzIHRoYXQgaXQmIzM5O3MgbGlrZWx5IHRoZSBrZXkgZnVuY3Rpb24gdGhhdCB0aWVzIHRvZ2V0aGVyIFZMQU4tc3BlY2lmaWMgc25vb3BpbmcgYmVoYXZpb3IuIEkmIzM5O20gYXNzdW1pbmcgaXQmIzM5O3MgcHJvYmFibHkgdGhlIHRvcC1sZXZlbCBpbnRlcmZhY2UgZm9yIGVuYWJsaW5nIG9yIGRpc2FibGluZyBzbm9vcGluZyB3aXRoaW4gYSBWTEFOIGNvbnRleHQuIEl0JiMzOTtzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgZGV0YWlscyBvZiB0aGUgaW1wbGVtZW50YXRpb24uCgpOb3csIGxldCYjMzk7cyBkcmlsbCBkb3duIGludG8gYGJyX211bHRpY2FzdF90b2dnbGVgLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgZm91bmRhdGlvbmFsIGxvZ2ljIHRoYXQgYGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZ2AgbGlrZWx5IGNhbGxzIG9yIGRlcGVuZHMgb24uIFVuZGVyc3RhbmRpbmcgaG93IHRoZSBjb3JlIG11bHRpY2FzdCBjb250cm9sIHdvcmtzIGlzIGNyaXRpY2FsIGJlZm9yZSBJIHRyeSB0byB1bmRlcnN0YW5kIHRoZSBWTEFOIHNwZWNpZmljIGFkYXB0YXRpb25zLiBUaGlzIHdpbGwgc2V0IHRoZSBzdGFnZSB0byBzZWUgaG93IGl0IG1pZ2h0IGJlIGFkYXB0ZWQgb3IgZXh0ZW5kZWQgZm9yIFZMQU4gaW50ZWdyYXRpb24uIExldCYjMzk7cyBzZWUgd2hhdCB0aGF0IGxvd2VyIGxldmVsIGZ1bmN0aW9uIGRvZXMuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDY4MiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0NjgyOlx0aW50IGJyX211bHRpY2FzdF90b2dnbGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1bnNpZ25lZCBsb25nIHZhbCxcbjQ2ODM6XHRcdFx0XHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG40Njg0Olx0e1xuNDY4NTpcdFx0Ym9vbCBjaGFuZ2Vfc25vb3BlcnMgPSBmYWxzZTtcbjQ2ODY6XHRcdGludCBlcnIgPSAwO1xuNDY4NzpcdFxuNDY4ODpcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmJyLVx1MDAzZW11bHRpY2FzdF9sb2NrKTtcbjQ2ODk6XHRcdGlmICghIWJyX29wdF9nZXQoYnIsIEJST1BUX01VTFRJQ0FTVF9FTkFCTEVEKSA9PSAhIXZhbClcbjQ2OTA6XHRcdFx0Z290byB1bmxvY2s7XG40NjkxOlx0XG40NjkyOlx0XHRlcnIgPSBicl9tY19kaXNhYmxlZF91cGRhdGUoYnItXHUwMDNlZGV2LCB2YWwsIGV4dGFjayk7XG40NjkzOlx0XHRpZiAoZXJyID09IC1FT1BOT1RTVVBQKVxuNDY5NDpcdFx0XHRlcnIgPSAwO1xuNDY5NTpcdFx0aWYgKGVycilcbjQ2OTY6XHRcdFx0Z290byB1bmxvY2s7XG40Njk3Olx0XG40Njk4Olx0XHRicl9vcHRfdG9nZ2xlKGJyLCBCUk9QVF9NVUxUSUNBU1RfRU5BQkxFRCwgISF2YWwpO1xuNDY5OTpcdFx0aWYgKCFicl9vcHRfZ2V0KGJyLCBCUk9QVF9NVUxUSUNBU1RfRU5BQkxFRCkpIHtcbjQ3MDA6XHRcdFx0Y2hhbmdlX3Nub29wZXJzID0gdHJ1ZTtcbjQ3MDE6XHRcdFx0YnJfbXVsdGljYXN0X2Rpc2FibGVfYWxsX3BvcnRzKGJyKTtcbjQ3MDI6XHRcdFx0Z290byB1bmxvY2s7XG40NzAzOlx0XHR9XG40NzA0Olx0XG40NzA1Olx0XHRpZiAoIW5ldGlmX3J1bm5pbmcoYnItXHUwMDNlZGV2KSlcbjQ3MDY6XHRcdFx0Z290byB1bmxvY2s7XG40NzA3Olx0XG40NzA4Olx0XHRicl9tdWx0aWNhc3Rfb3Blbihicik7XG40NzA5Olx0XHRicl9tdWx0aWNhc3RfZW5hYmxlX2FsbF9wb3J0cyhicik7XG40NzEwOlx0XG40NzExOlx0XHRjaGFuZ2Vfc25vb3BlcnMgPSB0cnVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTQzMQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb24sIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgTXVsdGljYXN0IE1hbmFnZW1lbnQgQ29kZSoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBtdWx0aWNhc3QgY29udHJvbCB3aXRoaW4gdGhlIGJyaWRnaW5nIGNvbXBvbmVudCwgYW5kIGBicl9tdWx0aWNhc3RfdG9nZ2xlYCBzZWVtcyBsaWtlIGEgbG9naWNhbCBpbml0aWFsIGVudHJ5IHBvaW50IHRvIGludmVzdGlnYXRlLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gd2hhdCB0aGUgcHJlY29uZGl0aW9ucyBhcmUgZm9yIGJlaW5nIGNhbGxlZCwgYnV0IGl0IGNlcnRhaW5seSBvZmZlcnMgYSB0b3AtbGV2ZWwgdmlldy4KCkkmIzM5O20gc3BlY2lmaWNhbGx5IGludGVyZXN0ZWQgaW4gaG93IHBvcnRzIGFyZSBhZGRlZCBhbmQgcmVtb3ZlZCBmcm9tIHRoZSBtdWx0aWNhc3QgZ3JvdXAgbWVtYmVyc2hpcC4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIGBicl9tdWx0aWNhc3RfZGVsX3BvcnRgLiBJdCYjMzk7cyBsaWtlbHkgdGhhdCBhIGNvbXBsZW1lbnQgdG8gdGhlICYjMzQ7dG9nZ2xlJiMzNDsgb3BlcmF0aW9uIGludm9sdmVzIHNwZWNpZmljYWxseSByZW1vdmluZyBhIHBvcnQsIG9yIGEgcmFuZ2Ugb2YgcG9ydHMsIGZyb20gdGhlIGZvcndhcmRpbmcgc3RhdGUgZm9yIG11bHRpY2FzdCB0cmFmZmljLiBMZXQmIzM5O3MgZGVsdmUgaW4gYW5kIHNlZSB0aGUgY29udHJvbCBmbG93Li4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwNjQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjA2NDpcdHZvaWQgYnJfbXVsdGljYXN0X2RlbF9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpXG4yMDY1Olx0e1xuMjA2NjpcdFx0c3RydWN0IG5ldF9icmlkZ2UgKmJyID0gcG9ydC1cdTAwM2VicjtcbjIwNjc6XHRcdHN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAgKnBnO1xuMjA2ODpcdFxuMjA2OTpcdFx0LyogVGFrZSBjYXJlIG9mIHRoZSByZW1haW5pbmcgZ3JvdXBzLCBvbmx5IHBlcm0gb25lcyBzaG91bGQgYmUgbGVmdC5cbjIwNzA6XHRcdCAqIERlbGV0aW5nIG9uZSBjYW4gZGVsZXRlIG90aGVycyBvbiB0aGlzIHNhbWUgcG9ydC1cdTAwM2VtZ2xpc3QsIHNvXG4yMDcxOlx0XHQgKiBhbHdheXMgcmVzdGFydCBmcm9tIHRoZSBoZWFkLlxuMjA3MjpcdFx0ICovXG4yMDczOlx0XHRzcGluX2xvY2tfYmgoXHUwMDI2YnItXHUwMDNlbXVsdGljYXN0X2xvY2spO1xuMjA3NDpcdFx0d2hpbGUgKCFobGlzdF9lbXB0eShcdTAwMjZwb3J0LVx1MDAzZW1nbGlzdCkpIHtcbjIwNzU6XHRcdFx0cGcgPSBobGlzdF9lbnRyeShwb3J0LVx1MDAzZW1nbGlzdC5maXJzdCxcbjIwNzY6XHRcdFx0XHRcdCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwLCBtZ2xpc3QpO1xuMjA3NzpcdFx0XHRicl9tdWx0aWNhc3RfZmluZF9kZWxfcGcoYnIsIHBnKTtcbjIwNzg6XHRcdH1cbjIwNzk6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmJyLVx1MDAzZW11bHRpY2FzdF9sb2NrKTtcbjIwODA6XHRcdGZsdXNoX3dvcmsoXHUwMDI2YnItXHUwMDNlbWNhc3RfZ2Nfd29yayk7XG4yMDgxOlx0XHRicl9tdWx0aWNhc3RfcG9ydF9jdHhfZGVpbml0KFx1MDAyNnBvcnQtXHUwMDNlbXVsdGljYXN0X2N0eCk7XG4yMDgyOlx0XHRmcmVlX3BlcmNwdShwb3J0LVx1MDAzZW1jYXN0X3N0YXRzKTtcbjIwODM6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMDI1CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNDA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlZmluaW5nIHRoZSBTY29wZSBmb3IgVGhpcyBNdWx0aWNhc3QgSW52ZXN0aWdhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHN0YXJ0aW5nIHdpdGggYGJyX211bHRpY2FzdF9kZWxfcG9ydGAgYXMgbXkgbWFpbiBwb2ludCBvZiBlbnRyeSwgdGhhdCBzZWVtcyBsaWtlIGEgZ29vZCBwbGFjZSB0byBiZWdpbiBkaXNzZWN0aW5nIHRoaXMuIE15IGluaXRpYWwgRm9jdXNTeW1ib2xzIGFyZTogYGJyX211bHRpY2FzdF9kZWxfcG9ydGAsIGBicl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0YCwgYGJyX211bHRpY2FzdF90b2dnbGVgLCBgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nYCwgYW5kIGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYC4gSG9sZCBvbiwgSSBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gIGlzIGNhbGxlZCBpbnRlcm5hbGx5IGJ5IGBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3BpbmdgIGFuZCBhbHNvIGBicl9tdWx0aWNhc3RfdG9nZ2xlX2dsb2JhbF92bGFuYCwgc28gSSBuZWVkIHRvIGluY2x1ZGUgaXQgaW4gbXkgbWVudGFsIG1vZGVsLgoKTm93LCBsZXQmIzM5O3Mgc2VlIGlmIHRoZSBwYXRjaCBpcyB0b3VjaGluZyBhbnl0aGluZyBiZXlvbmQgdGhlIG9idmlvdXMuIEkmIzM5O20gY2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBmdW5jdGlvbnMgdGhhdCBpbnRlcmFjdCB3aXRoIGBicl9tdWx0aWNhc3RfZmluZF9kZWxfcGdgIG9yIG1vZGlmeSBgbWdsaXN0YC4gRnJvbSB3aGF0IEkgY2FuIHRlbGwgdGhlIHBhdGNoIHJlYWxseSBvbmx5IGludGVyYWN0cyB3aXRoIGBicl9tdWx0aWNhc3RfZGVsX3BvcnRgIGFuZCBgX19icl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0X2N0eGAuIFNvIHRoZSBjdXJyZW50IHNldCBvZiBGb2N1c1N5bWJvbHMgc2hvdWxkIGJlIGFkZXF1YXRlLgoKV2FpdCwgSSBzaG91bGQgZG91YmxlIGNoZWNrIHRoYXQgYGJyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRgIGlzIHRoZSAqb25seSogY2FsbGVyIG9mIGBicl9tdWx0aWNhc3RfdG9nZ2xlX3BvcnRgLiBObywgYGJyX211bHRpY2FzdF9lbmFibGVfcG9ydGAgYWxzbyBjYWxscyBgYnJfbXVsdGljYXN0X3RvZ2dsZV9wb3J0YC4gT2theSwgcmlnaHQsIEkgbmVlZCB0byBpbmNsdWRlIHRoYXQgb25lIHRvby4gU28gbXkgZmluYWwsIHJldmlzZWQgRm9jdXNTeW1ib2xzIGFyZTogYGJyX211bHRpY2FzdF9kZWxfcG9ydGAsIGBicl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0YCwgYGJyX211bHRpY2FzdF9lbmFibGVfcG9ydGAsIGBicl9tdWx0aWNhc3RfdG9nZ2xlYCwgYGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZ2AsIGFuZCBgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbmAuIE5vdyBJJiMzOTtsbCBqdXN0IGNvbmZpcm0gaWYgYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gIGlzIHN0YXRpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00MjkyPXZvaWQgYnJfbXVsdGljYXN0X3VwZGF0ZV92bGFuX21jYXN0X2N0eChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LCB1OCBzdGF0ZSlcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzMTctXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQzMTg6dm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzMTkte1xuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTEwNjk9dm9pZCBicl9tdWx0aWNhc3RfdXBkYXRlX3ZsYW5fbWNhc3RfY3R4KHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYsIHU4IHN0YXRlKTtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjEwNzA6dm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pO1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTA3MS1pbnQgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgYm9vbCBvbixcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xNTQ2PXN0YXRpYyBpbmxpbmUgdm9pZCBicl9tdWx0aWNhc3RfdXBkYXRlX3ZsYW5fbWNhc3RfY3R4KHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYsXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTU1MC1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE1NTE6c3RhdGljIGlubGluZSB2b2lkIGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbixcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE1NTItXHRcdFx0XHRcdFx0Ym9vbCBvbilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMzMDYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBleHByZXNzZWQgYXMgdGhvdWdoIHRoZXNlIHdlcmUgbXkgb3duIHRob3VnaHRzOgoKKipBbmFseXppbmcgdGhlIFZhcmlhYmxlJiMzOTtzIE11dGFiaWxpdHkqKgoKUmlnaHQsIHNvIHRoZSBjb250ZXh0IGluZGljYXRlcyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHNvbWV0aGluZyB0aGF0IGlzbiYjMzk7dCBzdGF0aWMuIEdvb2QsIHRoYXTigJlzIGEgY2xlYXIgc3RhcnRpbmcgcG9pbnQuIE5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHBpbnBvaW50IGEgc3BlY2lmaWMgdmFyaWFibGUgdGhhdCYjMzk7cyBwb3RlbnRpYWxseSAqbm90KiBzdGF0aWMsIG5hbWVseSBgYnJfbXVsdGljYXN0X3RvZ2dsZV9nbG9iYWxfdmxhbmAuIFRoZSBhaW0gaXMgdG8gY29uZmlybSB3aGV0aGVyIG15IGluaXRpYWwgdW5kZXJzdGFuZGluZyBvZiBpdHMgbXV0YWJpbGl0eSBob2xkcyB0cnVlLiBUaGlzIGlzIHdoZXJlIEkmIzM5O2xsIGRpZyBkZWVwZXIuIEkgbmVlZCB0byBrbm93IGZvciBzdXJlIGlmIGl04oCZcyBzdWJqZWN0IHRvIGNoYW5nZS4gQSBxdWljayBjaGVjayBvZiBpdHMgZGVjbGFyYXRpb24gYW5kIHVzYWdlIHNob3VsZCBjb25maXJtIHRoYXQuIEl04oCZcyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgYW5kIGxpZmV0aW1lIG9mIHRoaXMgdmFyaWFibGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Jvb2wgYnJfbXVsdGljYXN0X3RvZ2dsZV9nbG9iYWxfdmxhbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9NDM4Mz1pbnQgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgYm9vbCBvbixcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MjEtXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQ0MjI6Ym9vbCBicl9tdWx0aWNhc3RfdG9nZ2xlX2dsb2JhbF92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MjMte1xuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTEwNzE9aW50IGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIGJvb2wgb24sXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xMDcyLVx0XHRcdFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjEwNzM6Ym9vbCBicl9tdWx0aWNhc3RfdG9nZ2xlX2dsb2JhbF92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pO1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTA3NC1cbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xNTU2PXN0YXRpYyBpbmxpbmUgaW50IGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTU2Mi1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE1NjM6c3RhdGljIGlubGluZSBib29sIGJyX211bHRpY2FzdF90b2dnbGVfZ2xvYmFsX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbixcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE1NjQtXHRcdFx0XHRcdFx0ICAgYm9vbCBvbilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM5MTcKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIFZhcmlhYmxlJiMzOTtzIE11dGFiaWxpdHkqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggc29tZXRoaW5nIHBvdGVudGlhbGx5IGR5bmFtaWMgaGVyZS4gTGV0JiMzOTtzIGRpZyBkZWVwZXIgYW5kIHZlcmlmeSB3aGV0aGVyIGBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3BpbmdgIGlzLCBpbiBmYWN0LCBzdGF0aWMuIFRoaXMgaXMgdGhlIGNyaXRpY2FsIHBpZWNlIG9mIGluZm9ybWF0aW9uLiBUaGUgcG90ZW50aWFsIGZvciB0aGUgdmFyaWFibGUgdG8gY2hhbmdlIGR5bmFtaWNhbGx5IGluZmx1ZW5jZXMgaG93IHRoZSBjb2RlIHdpbGwgYmVoYXZlLCBlc3BlY2lhbGx5IHdoZXJlIHRoaXMgdmFyaWFibGUgaXMgdXNlZC4gV2UgbmVlZCB0byBhc2NlcnRhaW4gdGhlIG11dGFiaWxpdHkgdG8gYXNzZXNzIGFueSBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzIG9yIHJhY2UgY29uZGl0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW50IGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9NDM2Mz1zdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbilcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzODItXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQzODM6aW50IGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIGJvb2wgb24sXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzODQtXHRcdFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTA3MD12b2lkIGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbik7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxMDcxOmludCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3Bpbmcoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBib29sIG9uLFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTA3Mi1cdFx0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTU1MT1zdGF0aWMgaW5saW5lIHZvaWQgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLFxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE1NTUtXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxNTU2OnN0YXRpYyBpbmxpbmUgaW50IGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNTU3LVx0XHRcdFx0XHRcdCAgICBib29sIG9uLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDQ5MAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipBc3Nlc3NpbmcgdGhlIER5bmFtaWMgTmF0dXJlIG9mIHRoZSBTaXR1YXRpb24qKgoKQWxyaWdodCwgdGhlIGluaXRpYWwgYXNzZXNzbWVudCBpcyBpbjogdGhlIHNpdHVhdGlvbiBpcyBkZWZpbml0aXZlbHkgKm5vdCogc3RhdGljLiBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIHNvbWV0aGluZyB0aGF0IGNoYW5nZXMsIHRoYXQgaGFzIGEgZHluYW1pYyBlbGVtZW50LiBOb3csIGdpdmVuIHRoYXQgdGhpcyBpcyB0aGUgY2FzZSwgdGhlIGNydWNpYWwgbmV4dCBzdGVwIGlzIHRvIG5haWwgZG93biB0aGUgc3BlY2lmaWNzIG9mIHRoaXMgZHluYW1pc20uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIHRoZSBuYXR1cmUgb2YgYGJyX211bHRpY2FzdF90b2dnbGVgLiBJcyB0aGF0IHZhcmlhYmxlIG9yIGZ1bmN0aW9uIHN0YXRpYz8gSXRzIHNjb3BlIGFuZCBiZWhhdmlvdXIgYXJlIG9idmlvdXNseSBjZW50cmFsIHRvIHRoZSBwcm9ibGVtLiBUaGUgcXVlc3Rpb24gb2Ygd2hldGhlciBpdCYjMzk7cyBzdGF0aWMgd2lsbCBndWlkZSBteSBmdXJ0aGVyIGludmVzdGlnYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCBicl9tdWx0aWNhc3RfdG9nZ2xlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00MzYzPXN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF90b2dnbGVfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCBib29sIG9uKVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDM4Mi1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDM4MzppbnQgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgYm9vbCBvbixcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDM4NC1cdFx0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQ2NzE9c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X2Rpc2FibGVfYWxsX3BvcnRzKHN0cnVjdCBuZXRfYnJpZGdlICpicilcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ2ODEtXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQ2ODI6aW50IGJyX211bHRpY2FzdF90b2dnbGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1bnNpZ25lZCBsb25nIHZhbCxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDY4My1cdFx0XHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9OTkyPWludCBicl9tdWx0aWNhc3Rfc2V0X3ZsYW5fcm91dGVyKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYsIHU4IG1jYXN0X3JvdXRlcik7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDo5OTM6aW50IGJyX211bHRpY2FzdF90b2dnbGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1bnNpZ25lZCBsb25nIHZhbCxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTk5NC1cdFx0XHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTEwNzA9dm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pO1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTA3MTppbnQgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgYm9vbCBvbixcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTEwNzItXHRcdFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTE1NTE9c3RhdGljIGlubGluZSB2b2lkIGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbixcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNTU1LVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTU1NjpzdGF0aWMgaW5saW5lIGludCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3Bpbmcoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTU1Ny1cdFx0XHRcdFx0XHQgICAgYm9vbCBvbixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUyOTgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6CgoqKkFzc2Vzc2luZyB0aGUgU3RhdGljIE5hdHVyZSBvZiBhIEZ1bmN0aW9uKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHNvbWV0aGluZyB0aGF0ICppc24mIzM5O3QqIHN0YXRpYy4gR29vZCB0byBjb25maXJtIHRoYXQgdXBmcm9udDsgaXQgaGVscHMgYXZvaWQganVtcGluZyB0byBjb25jbHVzaW9ucyBsYXRlci4gTm93LCBsZXQmIzM5O3MgemVybyBpbiBvbiBhIHNwZWNpZmljIGZ1bmN0aW9uOiBgYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydGAuIFRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzLCBpcyAqdGhpcyogcGFydGljdWxhciBmdW5jdGlvbiBkZWNsYXJlZCBhcyBzdGF0aWM/IEtub3dpbmcgaXRzIHNjb3BlIOKAkyB3aGV0aGVyIGl0JiMzOTtzIGxvY2FsIHRvIGEgY29tcGlsYXRpb24gdW5pdCBvciBnbG9iYWxseSBhY2Nlc3NpYmxlIOKAkyBpcyBmdW5kYW1lbnRhbCB0byB1bmRlcnN0YW5kaW5nIGl0cyBiZWhhdmlvciBhbmQgcG90ZW50aWFsIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0uIENoZWNraW5nIGl0cyBzdGF0aWMtbmVzcyByaWdodCBub3cgd2lsbCBzYXZlIGEgbG90IG9mIGRlYnVnZ2luZyB0aW1lIGRvd24gdGhlIHJvYWQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZvaWQgYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MjEyOD1zdGF0aWMgdm9pZCBfX2JyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRfY3R4KHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0X3BvcnQgKnBtY3R4KVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjE2Mi1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MjE2MzpzdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0X2N0eChzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdF9wb3J0ICpwbWN0eClcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjE2NC17XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0yMjE2PXZvaWQgYnJfbXVsdGljYXN0X2VuYWJsZV9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMjIwLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoyMjIxOnZvaWQgYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0KVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMjIyLXtcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD05Nzg9dm9pZCBicl9tdWx0aWNhc3RfZW5hYmxlX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCk7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDo5Nzk6dm9pZCBicl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpO1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtOTgwLXZvaWQgYnJfbXVsdGljYXN0X2luaXQoc3RydWN0IG5ldF9icmlkZ2UgKmJyKTtcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xNDEzPXN0YXRpYyBpbmxpbmUgdm9pZCBicl9tdWx0aWNhc3RfZW5hYmxlX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydClcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNDE2LVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTQxNzpzdGF0aWMgaW5saW5lIHZvaWQgYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0KVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTQxOC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1OTY3CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJcyBJdCBTdGF0aWMsIFJlYWxseT8gQSBRdWljayBWZXJpZmljYXRpb24qKgoKUmlnaHQsIHNvIHRoZSBzeXN0ZW0gaXMgZGVmaW5pdGVseSBiZWhhdmluZyBkeW5hbWljYWxseS4gTm8gc3VycHJpc2VzIHRoZXJlLiBCdXQgSSYjMzk7bSBmZWVsaW5nIGEgbmlnZ2xpbmcgY29uY2VybiBhYm91dCBhIHNwZWNpZmljIHZhcmlhYmxlIHdpdGhpbiB0aGF0IGR5bmFtaWMgc2V0dXAuIExldCYjMzk7cyBub3QgbWFrZSBhc3N1bXB0aW9ucy4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiDigJMgYSBxdWljayBtZW50YWwgY2hlY2suIFRoZSBjb3JlIG9mIG15IGNvbmNlcm4/IEkmIzM5O20gd29uZGVyaW5nIGlmIGBicl9tdWx0aWNhc3RfZW5hYmxlX3BvcnRgIGlzLCBieSBzb21lIGNoYW5jZSwgaW5jb3JyZWN0bHkgZGVmaW5lZCBhcyBhIHN0YXRpYyB2YXJpYWJsZS4gVGhhdCB3b3VsZCB0aHJvdyBhIHdyZW5jaCBpbnRvIHRoZSB3aG9sZSBwcm9jZXNzISBCZXR0ZXIgdG8gdmVyaWZ5LCBiZWNhdXNlIEkgd291bGQgZXhwZWN0IGl0IHRvIGJlIG5vbi1zdGF0aWMgZ2l2ZW4gdGhlIGJlaGF2aW9yIEkmIzM5O20gc2VlaW5nLCBidXQgeW91IGNhbiBuZXZlciBiZSB0b28gc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm9pZCBicl9tdWx0aWNhc3RfZW5hYmxlX3BvcnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYnJpZGdlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTIwOTQ9c3RhdGljIHZvaWQgX19icl9tdWx0aWNhc3RfZW5hYmxlX3BvcnRfY3R4KHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0X3BvcnQgKnBtY3R4KVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjExMy1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MjExNDpzdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfZW5hYmxlX3BvcnRfY3R4KHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0X3BvcnQgKnBtY3R4KVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMTE1LXtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTIxNzg9c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X3RvZ2dsZV9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsIGJvb2wgb24pXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMjE1LVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoyMjE2OnZvaWQgYnJfbXVsdGljYXN0X2VuYWJsZV9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIyMTcte1xuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTk3Nz12b2lkIGJyX211bHRpY2FzdF9kZWxfcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0KTtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjk3ODp2b2lkIGJyX211bHRpY2FzdF9lbmFibGVfcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0KTtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTk3OS12b2lkIGJyX211bHRpY2FzdF9kaXNhYmxlX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCk7XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTQwOT1zdGF0aWMgaW5saW5lIHZvaWQgYnJfbXVsdGljYXN0X2RlbF9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTQxMi1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE0MTM6c3RhdGljIGlubGluZSB2b2lkIGJyX211bHRpY2FzdF9lbmFibGVfcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0KVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTQxNC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2NjUyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGNyYWZ0ZWQgd2l0aCB0aGUgZXhwZWN0YXRpb24gdGhhdCBJJiMzOTttIGRpc2N1c3NpbmcgdGhpcyB3aXRoIGEgZmVsbG93IGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyB0aGUgU3RhdGljIE5hdHVyZSBvZiBgYnJfbXVsdGljYXN0X2RlbF9wb3J0YCoqCgpBbHJpZ2h0LCBJIHNlZSBpdCYjMzk7cyBkZWFsaW5nIHdpdGggc29tZXRoaW5nIGluaGVyZW50bHkgZHluYW1pYy4gTGV0JiMzOTtzIG1ha2UgYWJzb2x1dGVseSBzdXJlIGFib3V0IHRoaXM7IEkgd2FudCB0byBjb25maXJtIHdoZXRoZXIgYGJyX211bHRpY2FzdF9kZWxfcG9ydGAgaGFzIGEgc3RhdGljIGRlY2xhcmF0aW9uLiBXZSBuZWVkIHRvIGtub3cgaWYgaXQmIzM5O3Mgc3RhdGljIG9yIGlmIHdlIG5lZWQgdG8gYWNjb3VudCBmb3IgcG9zc2libGUgbW9kaWZpY2F0aW9ucy4gVGhpcyBoYXMgaW1wbGljYXRpb25zIGZvciBob3cgd2UgaW50ZXJhY3Qgd2l0aCBpdCBkb3duIHRoZSBsaW5lLiBXZSBuZWVkIHRvIGNvbnNpZGVyIGhvdyB0aGlzIGZ1bmN0aW9uJiMzOTtzIGNoYXJhY3RlcmlzdGljcyBtaWdodCBpbmZsdWVuY2Ugb3VyIGltcGxlbWVudGF0aW9uLiBTbywgbGV04oCZcyBnZXQgYSBkZWZpbml0aXZlIGFuc3dlciBvbiB0aGF0IHN0YXRpYyBrZXl3b3JkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2b2lkIGJyX211bHRpY2FzdF9kZWxfcG9ydCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MTM5OD1zdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwICpicl9tdWx0aWNhc3RfbmV3X3BvcnRfZ3JvdXAoXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0xNDU2LVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoxNDU3OnZvaWQgYnJfbXVsdGljYXN0X2RlbF9wb3J0X2dyb3VwKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAgKnApXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTE0NTgte1xuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MjA0Mz1pbnQgYnJfbXVsdGljYXN0X2FkZF9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMDYzLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoyMDY0OnZvaWQgYnJfbXVsdGljYXN0X2RlbF9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIwNjUte1xuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTk3Nj1pbnQgYnJfbXVsdGljYXN0X2FkZF9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpO1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6OTc3OnZvaWQgYnJfbXVsdGljYXN0X2RlbF9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpO1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtOTc4LXZvaWQgYnJfbXVsdGljYXN0X2VuYWJsZV9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpO1xuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTEwMDc9YnJfbXVsdGljYXN0X25ld19wb3J0X2dyb3VwKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTAxMi1cdFx0XHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjEwMTM6dm9pZCBicl9tdWx0aWNhc3RfZGVsX3BvcnRfZ3JvdXAoc3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cCAqcCk7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xMDE0LWludCBicl9tZGJfaGFzaF9pbml0KHN0cnVjdCBuZXRfYnJpZGdlICpicik7XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTQwND1zdGF0aWMgaW5saW5lIGludCBicl9tdWx0aWNhc3RfYWRkX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydClcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNDA4LVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTQwOTpzdGF0aWMgaW5saW5lIHZvaWQgYnJfbXVsdGljYXN0X2RlbF9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNDEwLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc0NTEKCQkJCQkJCW91dHB1dDogMjMzCgkJCQkJCQl0aG91Z2h0czogMjUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFByb3Bvc2VkIENvZGUgQ2hhbmdlKioKCk9rYXksIHNvIEkgc2VlIHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBzb21ldGhpbmcgaW4gdGhlIGJyaWRnZSBtdWx0aWNhc3QgcG9ydCBkZWxldGlvbiBhbmQgZGlzYWJsaW5nIHJvdXRpbmVzLiBJdCYjMzk7cyBkZWZpbml0ZWx5IG5vbi1zdGF0aWM7IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggZHluYW1pYyBkYXRhIHN0cnVjdHVyZXMgaGVyZS4gVGhlIGNvcmUgb2YgdGhlIHByb2JsZW0gc2VlbXMgdG8gYmUgYW4gaW1wcm9wZXIgdXNlIG9mIGBobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlYCBpbiBjb25qdW5jdGlvbiB3aXRoIGBicl9tdWx0aWNhc3RfZmluZF9kZWxfcGdgLCBsZWFkaW5nIHRvIHBvdGVudGlhbCBpc3N1ZXMgd2hlcmUgbXVsdGlwbGUgZW50cmllcyBtaWdodCBiZSByZW1vdmVkIHdpdGhpbiBhIHNpbmdsZSBsb29wIGl0ZXJhdGlvbi4gVGhpcyBjb3VsZCByZXN1bHQgaW4gbWlzc2VkIGVudHJpZXMgb3IsIHdvcnNlLCB1c2UtYWZ0ZXItZnJlZSBzaXR1YXRpb25zLiBBIGNsYXNzaWMgY29uY3VycmVuY3kgYnVnIGlmIHlvdSBkb24mIzM5O3QgaGFuZGxlIGl0IHJpZ2h0LgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIHRob3JvdWdobHkgdGVzdGVkLiBUaGUgbGlzdCBvZiByZWxldmFudCBgRm9jdXNTeW1ib2xzYCB0aGV5JiMzOTt2ZSBpZGVudGlmaWVkIOKAkyBgYnJfbXVsdGljYXN0X2RlbF9wb3J0YCwgYGJyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRgLCBldGMuIOKAkyBzZWVtcyBhcHByb3ByaWF0ZSwgYXMgZG8gdGhlIGBFbmFibGVDb25maWdzYDogYEJSSURHRWAsIGBJTkVUYCwgYEJSSURHRV9JR01QX1NOT09QSU5HYCwgYFZMQU5fODAyMVFgLCBhbmQgYEJSSURHRV9WTEFOX0ZJTFRFUklOR2AuIFRoZXNlIGNvdmVyIHRoZSBrZXkgYXJlYXMgd2hlcmUgdGhlIGlzc3VlIGlzIGxpa2VseSB0byBtYW5pZmVzdC4KCkdpdmVuIHRoYXQgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGJyaWRnZSBtdWx0aWNhc3QgbG9naWMgYW5kIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmsgYW5kIHN5c2ZzLCBpdCYjMzk7cyBhYnNvbHV0ZWx5IGNydWNpYWwgd2UgZnV6eiBpdC4gSSYjMzk7ZCBjb25zaWRlciBpdCBhIGhpZ2ggcHJpb3JpdHksIHRvIGJlIGhvbmVzdC4gVGhlIGltcGFjdCBjb3VsZCBiZSBzaWduaWZpY2FudCBpZiBtdWx0aWNhc3QgaXMgYnJva2VuIGluIHRoZSBicmlkZ2UuIExldCYjMzk7cyBtYWtlIHN1cmUgb3VyIGZ1enppbmcgYW5kIHRlc3RpbmcgaW5mcmFzdHJ1Y3R1cmUgaXMgc2V0IHVwIHRvIGFkZHJlc3MgdGhpcyBjaGFuZ2UgcHJvbXB0bHkuIEkmIzM5O2xsIG5lZWQgdG8gY2FsbCB0byBzZXQtcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JSSURHRSYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O0JSSURHRV9JR01QX1NOT09QSU5HJiMzNDssCiAgICAmIzM0O1ZMQU5fODAyMVEmIzM0OywKICAgICYjMzQ7QlJJREdFX1ZMQU5fRklMVEVSSU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnJfbXVsdGljYXN0X2RlbF9wb3J0JiMzNDssCiAgICAmIzM0O2JyX211bHRpY2FzdF9kaXNhYmxlX3BvcnQmIzM0OywKICAgICYjMzQ7YnJfbXVsdGljYXN0X2VuYWJsZV9wb3J0JiMzNDssCiAgICAmIzM0O2JyX211bHRpY2FzdF90b2dnbGUmIzM0OywKICAgICYjMzQ7YnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nJiMzNDssCiAgICAmIzM0O2JyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYnJpZGdlIG11bHRpY2FzdCBwb3J0IGRlbGV0aW9uIGFuZCBkaXNhYmxpbmcgbG9naWMgd2hlcmUgYGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVgIHdhcyB1c2VkIGluY29ycmVjdGx5LiBgYnJfbXVsdGljYXN0X2ZpbmRfZGVsX3BnYCBjYW4gZGVsZXRlIG11bHRpcGxlIGVudHJpZXMgZnJvbSB0aGUgc2FtZSBsaXN0LCBsZWFkaW5nIHRvIG1pc3NlZCBlbnRyaWVzIG9yIHVzZS1hZnRlci1mcmVlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBicmlkZ2UgbXVsdGljYXN0IGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rIGFuZCBzeXNmcywgYW5kIGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JSSURHRSYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O0JSSURHRV9JR01QX1NOT09QSU5HJiMzNDssCiAgICAmIzM0O1ZMQU5fODAyMVEmIzM0OywKICAgICYjMzQ7QlJJREdFX1ZMQU5fRklMVEVSSU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnJfbXVsdGljYXN0X2RlbF9wb3J0JiMzNDssCiAgICAmIzM0O2JyX211bHRpY2FzdF9kaXNhYmxlX3BvcnQmIzM0OywKICAgICYjMzQ7YnJfbXVsdGljYXN0X2VuYWJsZV9wb3J0JiMzNDssCiAgICAmIzM0O2JyX211bHRpY2FzdF90b2dnbGUmIzM0OywKICAgICYjMzQ7YnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nJiMzNDssCiAgICAmIzM0O2JyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYnJpZGdlIG11bHRpY2FzdCBwb3J0IGRlbGV0aW9uIGFuZCBkaXNhYmxpbmcgbG9naWMgd2hlcmUgYGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVgIHdhcyB1c2VkIGluY29ycmVjdGx5LiBgYnJfbXVsdGljYXN0X2ZpbmRfZGVsX3BnYCBjYW4gZGVsZXRlIG11bHRpcGxlIGVudHJpZXMgZnJvbSB0aGUgc2FtZSBsaXN0LCBsZWFkaW5nIHRvIG1pc3NlZCBlbnRyaWVzIG9yIHVzZS1hZnRlci1mcmVlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBicmlkZ2UgbXVsdGljYXN0IGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rIGFuZCBzeXNmcywgYW5kIGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjAwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6MDA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgbGlzdCBpdGVyYXRpb24gYnVncyBpbiBgYnJfbXVsdGljYXN0X2RlbF9wb3J0YCBhbmQgYF9fYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydF9jdHhgIHdoZXJlIGBicl9tdWx0aWNhc3RfZmluZF9kZWxfcGdgIGNvdWxkIGRlbGV0ZSB0aGUgbmV4dCBjYWNoZWQgbm9kZSBpbiBgaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZWAsIGxlYWRpbmcgdG8gcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIGxpc3QgY29ycnVwdGlvbi4gVGhlc2UgdHlwZXMgb2YgbWVtb3J5IGNvcnJ1cHRpb24gYW5kIHVzZS1hZnRlci1mcmVlIGJ1Z3MgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcywgYWxsb2NhdGlvbnMsIG9yIGRhdGEgc2VudCB0byB1c2VyIHNwYWNlIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzZjNzcyZDA5MjZiYTg2OTc0YzdkNDU4NDI4NTI2MDg5Mzg0MDk0MgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDEyIDExOjU4OjUxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYyBiL25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMKaW5kZXggMDBhYTliMjg3OWQ2ZS4uZTA3NzUwNTljYTBhOCAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jCkBAIC0yMDY1LDEyICYjNDM7MjA2NSwxNyBAQCB2b2lkIGJyX211bHRpY2FzdF9kZWxfcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0KQogewogCXN0cnVjdCBuZXRfYnJpZGdlICpiciA9IHBvcnQtJmd0O2JyOwogCXN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAgKnBnOwotCXN0cnVjdCBobGlzdF9ub2RlICpuOwogCi0JLyogVGFrZSBjYXJlIG9mIHRoZSByZW1haW5pbmcgZ3JvdXBzLCBvbmx5IHBlcm0gb25lcyBzaG91bGQgYmUgbGVmdCAqLwomIzQzOwkvKiBUYWtlIGNhcmUgb2YgdGhlIHJlbWFpbmluZyBncm91cHMsIG9ubHkgcGVybSBvbmVzIHNob3VsZCBiZSBsZWZ0LgomIzQzOwkgKiBEZWxldGluZyBvbmUgY2FuIGRlbGV0ZSBvdGhlcnMgb24gdGhpcyBzYW1lIHBvcnQtJmd0O21nbGlzdCwgc28KJiM0MzsJICogYWx3YXlzIHJlc3RhcnQgZnJvbSB0aGUgaGVhZC4KJiM0MzsJICovCiAJc3Bpbl9sb2NrX2JoKCZhbXA7YnItJmd0O211bHRpY2FzdF9sb2NrKTsKLQlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBnLCBuLCAmYW1wO3BvcnQtJmd0O21nbGlzdCwgbWdsaXN0KQomIzQzOwl3aGlsZSAoIWhsaXN0X2VtcHR5KCZhbXA7cG9ydC0mZ3Q7bWdsaXN0KSkgewomIzQzOwkJcGcgPSBobGlzdF9lbnRyeShwb3J0LSZndDttZ2xpc3QuZmlyc3QsCiYjNDM7CQkJCSBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwLCBtZ2xpc3QpOwogCQlicl9tdWx0aWNhc3RfZmluZF9kZWxfcGcoYnIsIHBnKTsKJiM0MzsJfQogCXNwaW5fdW5sb2NrX2JoKCZhbXA7YnItJmd0O211bHRpY2FzdF9sb2NrKTsKIAlmbHVzaF93b3JrKCZhbXA7YnItJmd0O21jYXN0X2djX3dvcmspOwogCWJyX211bHRpY2FzdF9wb3J0X2N0eF9kZWluaXQoJmFtcDtwb3J0LSZndDttdWx0aWNhc3RfY3R4KTsKQEAgLTIxMjYsMTEgJiM0MzsyMTMxLDIzIEBAIHN0YXRpYyB2b2lkIF9fYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydF9jdHgoc3RydWN0IG5ldF9icmlkZ2VfbWNhc3RfcG9ydCAqcG1jdHgpCiAJc3RydWN0IGhsaXN0X25vZGUgKm47CiAJYm9vbCBkZWwgPSBmYWxzZTsKIAotCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocGcsIG4sICZhbXA7cG1jdHgtJmd0O3BvcnQtJmd0O21nbGlzdCwgbWdsaXN0KQotCQlpZiAoIShwZy0mZ3Q7ZmxhZ3MgJmFtcDsgTURCX1BHX0ZMQUdTX1BFUk1BTkVOVCkgJmFtcDsmYW1wOwotCQkgICAgKCFicl9tdWx0aWNhc3RfcG9ydF9jdHhfaXNfdmxhbihwbWN0eCkgfHwKLQkJICAgICBwZy0mZ3Q7a2V5LmFkZHIudmlkID09IHBtY3R4LSZndDt2bGFuLSZndDt2aWQpKQotCQkJYnJfbXVsdGljYXN0X2ZpbmRfZGVsX3BnKHBtY3R4LSZndDtwb3J0LSZndDticiwgcGcpOwomIzQzOwkvKiBicl9tdWx0aWNhc3RfZmluZF9kZWxfcGcoKSBjYW4gZGVsZXRlIGZ1cnRoZXIgZW50cmllcyBvZiB0aGlzIHNhbWUKJiM0MzsJICogcG9ydC0mZ3Q7bWdsaXN0LCBzbyB0aGUgbm9kZSBsYXRjaGVkIGluIEBuIG1heSBiZSB1bmxpbmtlZCBieSB0aGUgbG9vcAomIzQzOwkgKiBib2R5LiBQb3J0IGdyb3VwcyBhcmUgb25seSBmcmVlZCBieSB0aGUgR0Mgd29yayB1bmRlciBtdWx0aWNhc3RfbG9jaywKJiM0MzsJICogc28gQG4gaXMgc3RpbGwgdmFsaWQgaGVyZTsgaWYgaXQgbGVmdCB0aGUgbGlzdCwgcmVzdGFydC4KJiM0MzsJICovCiYjNDM7cmVzdGFydDoKJiM0MzsJaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwZywgbiwgJmFtcDtwbWN0eC0mZ3Q7cG9ydC0mZ3Q7bWdsaXN0LCBtZ2xpc3QpIHsKJiM0MzsJCWlmICgocGctJmd0O2ZsYWdzICZhbXA7IE1EQl9QR19GTEFHU19QRVJNQU5FTlQpIHx8CiYjNDM7CQkgICAgKGJyX211bHRpY2FzdF9wb3J0X2N0eF9pc192bGFuKHBtY3R4KSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIHBnLSZndDtrZXkuYWRkci52aWQgIT0gcG1jdHgtJmd0O3ZsYW4tJmd0O3ZpZCkpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlicl9tdWx0aWNhc3RfZmluZF9kZWxfcGcocG1jdHgtJmd0O3BvcnQtJmd0O2JyLCBwZyk7CiYjNDM7CiYjNDM7CQlpZiAobiAmYW1wOyZhbXA7IGhsaXN0X3VuaGFzaGVkKG4pKQomIzQzOwkJCWdvdG8gcmVzdGFydDsKJiM0MzsJfQogCiAJZGVsIHw9IGJyX2lwNF9tdWx0aWNhc3RfcnBvcnRfZGVsKHBtY3R4KTsKIAl0aW1lcl9kZWxldGUoJmFtcDtwbWN0eC0mZ3Q7aXA0X21jX3JvdXRlcl90aW1lcik7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjU5CgkJCQkJCQlvdXRwdXQ6IDE1NwoJCQkJCQkJdGhvdWdodHM6IDcwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE11bHRpY2FzdCBCcmlkZ2UgUG9ydCBHcm91cCBEZWxldGlvbiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyB0aGUgbXVsdGljYXN0IGdyb3VwIGRlbGV0aW9uIGxvZ2ljIGluIHRoZSBicmlkZ2UgY29kZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgYnJfbXVsdGljYXN0X2RlbF9wb3J0YCBhbmQgYF9fYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydF9jdHhgIGluIGBuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jYC4gTXkgaW5pdGlhbCBzY2FuIHRlbGxzIG1lIHRoZXkmIzM5O3JlIG1vZGlmeWluZyBob3cgYHBvcnQtJmd0O21nbGlzdGAgaXMgdHJhdmVyc2VkIHdoZW4gZGVsZXRpbmcgcG9ydCBncm91cHMuIFRoZSBvbGQgbWV0aG9kIHVzZXMgYGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVgIHdoaWNoIGNhY2hlcyB0aGUgKm5leHQqIG5vZGUgaW4gdGhlIGxpc3QuIFRoZSBpc3N1ZSBpcyB0aGF0IHRoZSBmdW5jdGlvbiBgYnJfbXVsdGljYXN0X2ZpbmRfZGVsX3BnYCBjYW4gYWN0dWFsbHkgcmVtb3ZlICptdWx0aXBsZSogZW50cmllcyBmcm9tIGBwb3J0LSZndDttZ2xpc3RgIGF0IG9uY2UuCgpJbiB0aGUgZmlyc3QgY2FzZSAoYGJyX211bHRpY2FzdF9kZWxfcG9ydGApLCB0aGV5JiMzOTt2ZSByZXBsYWNlZCB0aGUgc2FmZSBpdGVyYXRvciB3aXRoIGEgYHdoaWxlYCBsb29wIHRoYXQgaXRlcmF0ZXMgdW50aWwgdGhlIGxpc3QgaXMgZW1wdHksIHBpY2tpbmcgdGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlIGxpc3QgYXQgZWFjaCBpdGVyYXRpb24uIFRoaXMgc2hvdWxkIHNvbHZlIHRoZSBwcm9ibGVtIGJlY2F1c2UgaWYgc29tZXRoaW5nIGlzIGRlbGV0ZWQsIHRoZSBuZXh0IGl0ZXJhdGlvbiBwaWNrcyBhIG5ldyBmaXJzdCBlbGVtZW50LCBhbmQgbm90IHRoZSBwcmV2aW91c2x5IGNhY2hlZCBuZXh0IGVsZW1lbnQgdGhhdCBjb3VsZCBoYXZlIGJlZW4gZGVsZXRlZC4KCkluIHRoZSBzZWNvbmQgY2FzZSAoYF9fYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydF9jdHhgKSwgdGhleSYjMzk7dmUgY2hhbmdlZCB0aGUgZXhpc3Rpbmcgc2FmZSBpdGVyYXRpb24gbG9vcCB3aXRoIHRoZSBhZGRpdGlvbiBvZiBhIGByZXN0YXJ0OmAgYW5kIGEgYGdvdG8gcmVzdGFydDtgLiBUaGlzIGFsc28gc29sdmVzIHRoZSBwcm9ibGVtLCBidXQgaW4gYSBkaWZmZXJlbnQgd2F5LiBJZiBhbiBlbGVtZW50IGdldHMgZGVsZXRlZCBkdXJpbmcgdGhlIGZpcnN0IGl0ZXJhdGlvbiBvZiB0aGUgc2FmZSBsb29wLCB0aGVuIHRoZSBuZXh0IG5vZGUgYG5gIGlzIHVuaGFzaGVkLCBhbmQgaW4gdGhpcyBjYXNlLCB0aGUgaXRlcmF0aW9uICpyZXN0YXJ0cyogdGhlIGxvb3AgZnJvbSB0aGUgYmVnaW5uaW5nLiBJdCBhbHNvIHNpbXBsaWZpZXMgdGhlIGNvbmRpdGlvbmFsIHRoYXQgY2hlY2tzIGZvciBwZXJtYW5lbnQgZmxhZ3MsIGFuZCB0aGUgVkxBTiBJRCBjaGVjay4KClRoZSBjb3JlIG9mIHRoZSBwcm9ibGVtIGhlcmUgaXMgYSBjbGFzc2ljIGxpc3QgaXRlcmF0aW9uIGJ1Zy4gQnkgZGVsZXRpbmcgZW50cmllcyAqZHVyaW5nKiBpdGVyYXRpb24gd2l0aCB0aGUgb2xkIG1ldGhvZCwgd2UgY2FuIGVuZCB1cCB3aXRoIGEgdXNlLWFmdGVyLWZyZWUsIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCBvciBzaW1wbHkgbWlzcyBkZWxldGlvbnMuIFRoZSBzYWZlIG1hY3JvIHdpbGwgY2FjaGUgdGhlIG5leHQgbm9kZSwgYnV0IGlmIHRoZSBjdXJyZW50IG5vZGUgYWxzbyBnZXRzIGRlbGV0ZWQsIHRoZSBjYWNoZWQgbmV4dCBub2RlIGlzIG5vIGxvbmdlciB2YWxpZC4gVGhlIG5ldyBhcHByb2FjaCBpcyBkZXNpZ25lZCB0byBwcmV2ZW50IHRoaXMgcmFjZSBjb25kaXRpb24uCgpOb3csIGFzIGFuIGV4cGVydCwgSSBuZWVkIHRvIGNvbnNpZGVyIHNlY3VyaXR5IGltcGxpY2F0aW9ucy4gQmFzZWQgb24gdGhpcyBhbmFseXNpcywgSSYjMzk7bSBjb25maWRlbnQgdGhpcyBpcyAqbm90KiByZWxhdGVkIHRvIEtNU0FOOyB0aGUgY29kZSBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIG9yIGZpZWxkcywgbm9yIGRvZXMgaXQgaGF2ZSBhbnkgYGNvcHlfdG9fdXNlcmAgb3IgYW55IG9mIHRoZSBvdGhlciBjb21tb24gS01TQU4gdHJpZ2dlcnMuIEtBU0FOIGlzIHRoZSByZWxldmFudCB0b29sIGhlcmUgdG8gY2F0Y2ggbGlzdCBjb3JydXB0aW9uIG9yIFVBRiwgYW5kIGl0IGlzIGxpa2VseSBlbmFibGVkIG9uIHRoZSBzeXN0ZW0uIFRoZXJlIGRvZXNuJiMzOTt0IGFwcGVhciB0byBiZSBhbnkgbWVtb3J5IHRoYXQmIzM5O3Mgbm90IGluaXRpYWxpemVkLCBzbyBJIGNhbiBzYWZlbHkgbWFyayBgTmVlZHNLTVNBTj1mYWxzZWAuIEl0IGxvb2tzIGxpa2UgdGhpcyBwYXRjaCBpcyBwdXJlbHkgZm9jdXNlZCBvbiBmaXhpbmcgYSBjb25jdXJyZW5jeS9pdGVyYXRpb24gYnVnLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBsaXN0IGl0ZXJhdGlvbiBidWdzIGluIGBicl9tdWx0aWNhc3RfZGVsX3BvcnRgIGFuZCBgX19icl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0X2N0eGAgd2hlcmUgYGJyX211bHRpY2FzdF9maW5kX2RlbF9wZ2AgY291bGQgZGVsZXRlIHRoZSBuZXh0IGNhY2hlZCBub2RlIGluIGBobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlYCwgbGVhZGluZyB0byBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgbGlzdCBjb3JydXB0aW9uLiBUaGVzZSB0eXBlcyBvZiBtZW1vcnkgY29ycnVwdGlvbiBhbmQgdXNlLWFmdGVyLWZyZWUgYnVncyBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzLCBhbGxvY2F0aW9ucywgb3IgZGF0YSBzZW50IHRvIHVzZXIgc3BhY2UgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnksIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgbGlzdCBpdGVyYXRpb24gYnVncyBpbiBgYnJfbXVsdGljYXN0X2RlbF9wb3J0YCBhbmQgYF9fYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydF9jdHhgIHdoZXJlIGBicl9tdWx0aWNhc3RfZmluZF9kZWxfcGdgIGNvdWxkIGRlbGV0ZSB0aGUgbmV4dCBjYWNoZWQgbm9kZSBpbiBgaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZWAsIGxlYWRpbmcgdG8gcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIGxpc3QgY29ycnVwdGlvbi4gVGhlc2UgdHlwZXMgb2YgbWVtb3J5IGNvcnJ1cHRpb24gYW5kIHVzZS1hZnRlci1mcmVlIGJ1Z3MgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcywgYWxsb2NhdGlvbnMsIG9yIGRhdGEgc2VudCB0byB1c2VyIHNwYWNlIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTE6NTg6NTIuNjQ5NDc1OTA5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI3OTQ2NTAxNDA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJSSURHRVwiLFxuICAgIFwiSU5FVFwiLFxuICAgIFwiQlJJREdFX0lHTVBfU05PT1BJTkdcIixcbiAgICBcIlZMQU5fODAyMVFcIixcbiAgICBcIkJSSURHRV9WTEFOX0ZJTFRFUklOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJyX211bHRpY2FzdF9kZWxfcG9ydFwiLFxuICAgIFwiYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydFwiLFxuICAgIFwiYnJfbXVsdGljYXN0X2VuYWJsZV9wb3J0XCIsXG4gICAgXCJicl9tdWx0aWNhc3RfdG9nZ2xlXCIsXG4gICAgXCJicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3BpbmdcIixcbiAgICBcImJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5cIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGxpc3QgaXRlcmF0aW9uIGJ1Z3MgaW4gYGJyX211bHRpY2FzdF9kZWxfcG9ydGAgYW5kIGBfX2JyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRfY3R4YCB3aGVyZSBgYnJfbXVsdGljYXN0X2ZpbmRfZGVsX3BnYCBjb3VsZCBkZWxldGUgdGhlIG5leHQgY2FjaGVkIG5vZGUgaW4gYGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVgLCBsZWFkaW5nIHRvIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBvciBsaXN0IGNvcnJ1cHRpb24uIFRoZXNlIHR5cGVzIG9mIG1lbW9yeSBjb3JydXB0aW9uIGFuZCB1c2UtYWZ0ZXItZnJlZSBidWdzIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zLCBvciBkYXRhIHNlbnQgdG8gdXNlciBzcGFjZSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYnJpZGdlIG11bHRpY2FzdCBwb3J0IGRlbGV0aW9uIGFuZCBkaXNhYmxpbmcgbG9naWMgd2hlcmUgYGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVgIHdhcyB1c2VkIGluY29ycmVjdGx5LiBgYnJfbXVsdGljYXN0X2ZpbmRfZGVsX3BnYCBjYW4gZGVsZXRlIG11bHRpcGxlIGVudHJpZXMgZnJvbSB0aGUgc2FtZSBsaXN0LCBsZWFkaW5nIHRvIG1pc3NlZCBlbnRyaWVzIG9yIHVzZS1hZnRlci1mcmVlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBicmlkZ2UgbXVsdGljYXN0IGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rIGFuZCBzeXNmcywgYW5kIGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDExOjU4OjUyLjY0OTQ4MjEyOVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg4OTc5OTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYzZjNzcyZDA5MjZiYTg2OTc0YzdkNDU4NDI4NTI2MDg5Mzg0MDk0MlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEF1ZyAxMiAxMTo1ODo1MSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jIGIvbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuY1xcbmluZGV4IDAwYWE5YjI4NzlkNmUuLmUwNzc1MDU5Y2EwYTggMTAwNjQ0XFxuLS0tIGEvbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuY1xcbisrKyBiL25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmNcXG5AQCAtMjA2NSwxMiArMjA2NSwxNyBAQCB2b2lkIGJyX211bHRpY2FzdF9kZWxfcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0KVxcbiB7XFxuIFxcdHN0cnVjdCBuZXRfYnJpZGdlICpiciA9IHBvcnQtXFx1MDAzZWJyO1xcbiBcXHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwICpwZztcXG4tXFx0c3RydWN0IGhsaXN0X25vZGUgKm47XFxuIFxcbi1cXHQvKiBUYWtlIGNhcmUgb2YgdGhlIHJlbWFpbmluZyBncm91cHMsIG9ubHkgcGVybSBvbmVzIHNob3VsZCBiZSBsZWZ0ICovXFxuK1xcdC8qIFRha2UgY2FyZSBvZiB0aGUgcmVtYWluaW5nIGdyb3Vwcywgb25seSBwZXJtIG9uZXMgc2hvdWxkIGJlIGxlZnQuXFxuK1xcdCAqIERlbGV0aW5nIG9uZSBjYW4gZGVsZXRlIG90aGVycyBvbiB0aGlzIHNhbWUgcG9ydC1cXHUwMDNlbWdsaXN0LCBzb1xcbitcXHQgKiBhbHdheXMgcmVzdGFydCBmcm9tIHRoZSBoZWFkLlxcbitcXHQgKi9cXG4gXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZici1cXHUwMDNlbXVsdGljYXN0X2xvY2spO1xcbi1cXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBnLCBuLCBcXHUwMDI2cG9ydC1cXHUwMDNlbWdsaXN0LCBtZ2xpc3QpXFxuK1xcdHdoaWxlICghaGxpc3RfZW1wdHkoXFx1MDAyNnBvcnQtXFx1MDAzZW1nbGlzdCkpIHtcXG4rXFx0XFx0cGcgPSBobGlzdF9lbnRyeShwb3J0LVxcdTAwM2VtZ2xpc3QuZmlyc3QsXFxuK1xcdFxcdFxcdFxcdCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwLCBtZ2xpc3QpO1xcbiBcXHRcXHRicl9tdWx0aWNhc3RfZmluZF9kZWxfcGcoYnIsIHBnKTtcXG4rXFx0fVxcbiBcXHRzcGluX3VubG9ja19iaChcXHUwMDI2YnItXFx1MDAzZW11bHRpY2FzdF9sb2NrKTtcXG4gXFx0Zmx1c2hfd29yayhcXHUwMDI2YnItXFx1MDAzZW1jYXN0X2djX3dvcmspO1xcbiBcXHRicl9tdWx0aWNhc3RfcG9ydF9jdHhfZGVpbml0KFxcdTAwMjZwb3J0LVxcdTAwM2VtdWx0aWNhc3RfY3R4KTtcXG5AQCAtMjEyNiwxMSArMjEzMSwyMyBAQCBzdGF0aWMgdm9pZCBfX2JyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRfY3R4KHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0X3BvcnQgKnBtY3R4KVxcbiBcXHRzdHJ1Y3QgaGxpc3Rfbm9kZSAqbjtcXG4gXFx0Ym9vbCBkZWwgPSBmYWxzZTtcXG4gXFxuLVxcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocGcsIG4sIFxcdTAwMjZwbWN0eC1cXHUwMDNlcG9ydC1cXHUwMDNlbWdsaXN0LCBtZ2xpc3QpXFxuLVxcdFxcdGlmICghKHBnLVxcdTAwM2VmbGFncyBcXHUwMDI2IE1EQl9QR19GTEFHU19QRVJNQU5FTlQpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdCAgICAoIWJyX211bHRpY2FzdF9wb3J0X2N0eF9pc192bGFuKHBtY3R4KSB8fFxcbi1cXHRcXHQgICAgIHBnLVxcdTAwM2VrZXkuYWRkci52aWQgPT0gcG1jdHgtXFx1MDAzZXZsYW4tXFx1MDAzZXZpZCkpXFxuLVxcdFxcdFxcdGJyX211bHRpY2FzdF9maW5kX2RlbF9wZyhwbWN0eC1cXHUwMDNlcG9ydC1cXHUwMDNlYnIsIHBnKTtcXG4rXFx0LyogYnJfbXVsdGljYXN0X2ZpbmRfZGVsX3BnKCkgY2FuIGRlbGV0ZSBmdXJ0aGVyIGVudHJpZXMgb2YgdGhpcyBzYW1lXFxuK1xcdCAqIHBvcnQtXFx1MDAzZW1nbGlzdCwgc28gdGhlIG5vZGUgbGF0Y2hlZCBpbiBAbiBtYXkgYmUgdW5saW5rZWQgYnkgdGhlIGxvb3BcXG4rXFx0ICogYm9keS4gUG9ydCBncm91cHMgYXJlIG9ubHkgZnJlZWQgYnkgdGhlIEdDIHdvcmsgdW5kZXIgbXVsdGljYXN0X2xvY2ssXFxuK1xcdCAqIHNvIEBuIGlzIHN0aWxsIHZhbGlkIGhlcmU7IGlmIGl0IGxlZnQgdGhlIGxpc3QsIHJlc3RhcnQuXFxuK1xcdCAqL1xcbityZXN0YXJ0OlxcbitcXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBnLCBuLCBcXHUwMDI2cG1jdHgtXFx1MDAzZXBvcnQtXFx1MDAzZW1nbGlzdCwgbWdsaXN0KSB7XFxuK1xcdFxcdGlmICgocGctXFx1MDAzZWZsYWdzIFxcdTAwMjYgTURCX1BHX0ZMQUdTX1BFUk1BTkVOVCkgfHxcXG4rXFx0XFx0ICAgIChicl9tdWx0aWNhc3RfcG9ydF9jdHhfaXNfdmxhbihwbWN0eCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgICBwZy1cXHUwMDNla2V5LmFkZHIudmlkICE9IHBtY3R4LVxcdTAwM2V2bGFuLVxcdTAwM2V2aWQpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdGJyX211bHRpY2FzdF9maW5kX2RlbF9wZyhwbWN0eC1cXHUwMDNlcG9ydC1cXHUwMDNlYnIsIHBnKTtcXG4rXFxuK1xcdFxcdGlmIChuIFxcdTAwMjZcXHUwMDI2IGhsaXN0X3VuaGFzaGVkKG4pKVxcbitcXHRcXHRcXHRnb3RvIHJlc3RhcnQ7XFxuK1xcdH1cXG4gXFxuIFxcdGRlbCB8PSBicl9pcDRfbXVsdGljYXN0X3Jwb3J0X2RlbChwbWN0eCk7XFxuIFxcdHRpbWVyX2RlbGV0ZShcXHUwMDI2cG1jdHgtXFx1MDAzZWlwNF9tY19yb3V0ZXJfdGltZXIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMTo1ODo1My4xMzkyMTExMjNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMTY4MDQyNzk3NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlJJREdFXCIsXG4gICAgXCJJTkVUXCIsXG4gICAgXCJCUklER0VfSUdNUF9TTk9PUElOR1wiLFxuICAgIFwiVkxBTl84MDIxUVwiLFxuICAgIFwiQlJJREdFX1ZMQU5fRklMVEVSSU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnJfbXVsdGljYXN0X2RlbF9wb3J0XCIsXG4gICAgXCJicl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0XCIsXG4gICAgXCJicl9tdWx0aWNhc3RfZW5hYmxlX3BvcnRcIixcbiAgICBcImJyX211bHRpY2FzdF90b2dnbGVcIixcbiAgICBcImJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZ1wiLFxuICAgIFwiYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGJyaWRnZSBtdWx0aWNhc3QgcG9ydCBkZWxldGlvbiBhbmQgZGlzYWJsaW5nIGxvZ2ljIHdoZXJlIGBobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlYCB3YXMgdXNlZCBpbmNvcnJlY3RseS4gYGJyX211bHRpY2FzdF9maW5kX2RlbF9wZ2AgY2FuIGRlbGV0ZSBtdWx0aXBsZSBlbnRyaWVzIGZyb20gdGhlIHNhbWUgbGlzdCwgbGVhZGluZyB0byBtaXNzZWQgZW50cmllcyBvciB1c2UtYWZ0ZXItZnJlZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgYnJpZGdlIG11bHRpY2FzdCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluayBhbmQgc3lzZnMsIGFuZCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjNmM3NzJkMDkyNmJhODY5NzRjN2Q0NTg0Mjg1MjYwODkzODQwOTQyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTIgMTE6NTg6NTEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jIGIvbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuY1xuaW5kZXggMDBhYTliMjg3OWQ2ZS4uZTA3NzUwNTljYTBhOCAxMDA2NDRcbi0tLSBhL25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmNcbisrKyBiL25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmNcbkBAIC0yMDY1LDEyICsyMDY1LDE3IEBAIHZvaWQgYnJfbXVsdGljYXN0X2RlbF9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpXG4ge1xuIFx0c3RydWN0IG5ldF9icmlkZ2UgKmJyID0gcG9ydC1cdTAwM2VicjtcbiBcdHN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAgKnBnO1xuLVx0c3RydWN0IGhsaXN0X25vZGUgKm47XG4gXG4tXHQvKiBUYWtlIGNhcmUgb2YgdGhlIHJlbWFpbmluZyBncm91cHMsIG9ubHkgcGVybSBvbmVzIHNob3VsZCBiZSBsZWZ0ICovXG4rXHQvKiBUYWtlIGNhcmUgb2YgdGhlIHJlbWFpbmluZyBncm91cHMsIG9ubHkgcGVybSBvbmVzIHNob3VsZCBiZSBsZWZ0LlxuK1x0ICogRGVsZXRpbmcgb25lIGNhbiBkZWxldGUgb3RoZXJzIG9uIHRoaXMgc2FtZSBwb3J0LVx1MDAzZW1nbGlzdCwgc29cbitcdCAqIGFsd2F5cyByZXN0YXJ0IGZyb20gdGhlIGhlYWQuXG4rXHQgKi9cbiBcdHNwaW5fbG9ja19iaChcdTAwMjZici1cdTAwM2VtdWx0aWNhc3RfbG9jayk7XG4tXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBnLCBuLCBcdTAwMjZwb3J0LVx1MDAzZW1nbGlzdCwgbWdsaXN0KVxuK1x0d2hpbGUgKCFobGlzdF9lbXB0eShcdTAwMjZwb3J0LVx1MDAzZW1nbGlzdCkpIHtcbitcdFx0cGcgPSBobGlzdF9lbnRyeShwb3J0LVx1MDAzZW1nbGlzdC5maXJzdCxcbitcdFx0XHRcdCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwLCBtZ2xpc3QpO1xuIFx0XHRicl9tdWx0aWNhc3RfZmluZF9kZWxfcGcoYnIsIHBnKTtcbitcdH1cbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmJyLVx1MDAzZW11bHRpY2FzdF9sb2NrKTtcbiBcdGZsdXNoX3dvcmsoXHUwMDI2YnItXHUwMDNlbWNhc3RfZ2Nfd29yayk7XG4gXHRicl9tdWx0aWNhc3RfcG9ydF9jdHhfZGVpbml0KFx1MDAyNnBvcnQtXHUwMDNlbXVsdGljYXN0X2N0eCk7XG5AQCAtMjEyNiwxMSArMjEzMSwyMyBAQCBzdGF0aWMgdm9pZCBfX2JyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRfY3R4KHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0X3BvcnQgKnBtY3R4KVxuIFx0c3RydWN0IGhsaXN0X25vZGUgKm47XG4gXHRib29sIGRlbCA9IGZhbHNlO1xuIFxuLVx0aGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwZywgbiwgXHUwMDI2cG1jdHgtXHUwMDNlcG9ydC1cdTAwM2VtZ2xpc3QsIG1nbGlzdClcbi1cdFx0aWYgKCEocGctXHUwMDNlZmxhZ3MgXHUwMDI2IE1EQl9QR19GTEFHU19QRVJNQU5FTlQpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgKCFicl9tdWx0aWNhc3RfcG9ydF9jdHhfaXNfdmxhbihwbWN0eCkgfHxcbi1cdFx0ICAgICBwZy1cdTAwM2VrZXkuYWRkci52aWQgPT0gcG1jdHgtXHUwMDNldmxhbi1cdTAwM2V2aWQpKVxuLVx0XHRcdGJyX211bHRpY2FzdF9maW5kX2RlbF9wZyhwbWN0eC1cdTAwM2Vwb3J0LVx1MDAzZWJyLCBwZyk7XG4rXHQvKiBicl9tdWx0aWNhc3RfZmluZF9kZWxfcGcoKSBjYW4gZGVsZXRlIGZ1cnRoZXIgZW50cmllcyBvZiB0aGlzIHNhbWVcbitcdCAqIHBvcnQtXHUwMDNlbWdsaXN0LCBzbyB0aGUgbm9kZSBsYXRjaGVkIGluIEBuIG1heSBiZSB1bmxpbmtlZCBieSB0aGUgbG9vcFxuK1x0ICogYm9keS4gUG9ydCBncm91cHMgYXJlIG9ubHkgZnJlZWQgYnkgdGhlIEdDIHdvcmsgdW5kZXIgbXVsdGljYXN0X2xvY2ssXG4rXHQgKiBzbyBAbiBpcyBzdGlsbCB2YWxpZCBoZXJlOyBpZiBpdCBsZWZ0IHRoZSBsaXN0LCByZXN0YXJ0LlxuK1x0ICovXG4rcmVzdGFydDpcbitcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocGcsIG4sIFx1MDAyNnBtY3R4LVx1MDAzZXBvcnQtXHUwMDNlbWdsaXN0LCBtZ2xpc3QpIHtcbitcdFx0aWYgKChwZy1cdTAwM2VmbGFncyBcdTAwMjYgTURCX1BHX0ZMQUdTX1BFUk1BTkVOVCkgfHxcbitcdFx0ICAgIChicl9tdWx0aWNhc3RfcG9ydF9jdHhfaXNfdmxhbihwbWN0eCkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAgcGctXHUwMDNla2V5LmFkZHIudmlkICE9IHBtY3R4LVx1MDAzZXZsYW4tXHUwMDNldmlkKSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0YnJfbXVsdGljYXN0X2ZpbmRfZGVsX3BnKHBtY3R4LVx1MDAzZXBvcnQtXHUwMDNlYnIsIHBnKTtcbitcbitcdFx0aWYgKG4gXHUwMDI2XHUwMDI2IGhsaXN0X3VuaGFzaGVkKG4pKVxuK1x0XHRcdGdvdG8gcmVzdGFydDtcbitcdH1cbiBcbiBcdGRlbCB8PSBicl9pcDRfbXVsdGljYXN0X3Jwb3J0X2RlbChwbWN0eCk7XG4gXHR0aW1lcl9kZWxldGUoXHUwMDI2cG1jdHgtXHUwMDNlaXA0X21jX3JvdXRlcl90aW1lcik7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMTo1ODo1My4xMzkyMTI2NTNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTc2ODA5OTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEJyaWRnZSBNdWx0aWNhc3QgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCBhIHBhdGNoIGhlcmUgdGhhdCdzIHBva2luZyBhdCBgbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuY2AuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgdG8gYmUgbW9kaWZ5aW5nIGhvdyB3ZSBoYW5kbGUgbXVsdGljYXN0IGdyb3VwIG1lbWJlcnNoaXAgd2hlbiBkZWxldGluZyBvciBkaXNhYmxpbmcgcG9ydHMgaW4gYSBicmlkZ2UuIFRoZSBmdW5jdGlvbnMgaW4gcXVlc3Rpb24gYXJlIGBicl9tdWx0aWNhc3RfZGVsX3BvcnRgIGFuZCBgX19icl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0X2N0eGAuIFRoZSBjb3JlIG9mIHRoZSBwcm9ibGVtLCBhcyBJIHVuZGVyc3RhbmQgaXQsIGxpZXMgd2l0aGluIGBicl9tdWx0aWNhc3RfZmluZF9kZWxfcGdgLiBBcHBhcmVudGx5LCB0aGlzIGZ1bmN0aW9uIGNhbiBpbmFkdmVydGVudGx5IGRlbGV0ZSBlbnRyaWVzIGZyb20gdGhlIGBwb3J0LVx1MDAzZW1nbGlzdGAgd2hpbGUgd2UncmUgaXRlcmF0aW5nIHRocm91Z2ggaXQgdXNpbmcgYGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVgLiBUaGlzIGNvdWxkIGxlYWQgdG8gYSBjbGFzc2ljIGxpc3QgY29ycnVwdGlvbiBzY2VuYXJpbywgZWl0aGVyIGFjY2Vzc2luZyBmcmVlZCBtZW1vcnkgb3IgY29tcGxldGVseSBza2lwcGluZyBzb21lIGVudHJpZXMg4oCTIGJvdGggYmFkIG5ld3MuIFRoZSBwYXRjaCBwcm9wb3NlcyBlaXRoZXIgcmVzdGFydGluZyB0aGUgbG9vcCBvciwgYWx0ZXJuYXRpdmVseSwgc2ltcGx5IHVzaW5nIGEgYHdoaWxlYCBsb29wIHRvIG5hdmlnYXRlIHRoZSBsaXN0LCB3aGljaCBtYWtlcyBzZW5zZS5cblxuU28sIGxldCdzIGJyZWFrIHRoaXMgZG93biBmdXJ0aGVyLiBgYnJfbXVsdGljYXN0X2RlbF9wb3J0YCBnZXRzIGNhbGxlZCB3aGVuIGEgYnJpZGdlIHBvcnQgZ2V0cyBkZWxldGVkLCB3aGljaCBpcyBhIGZhaXJseSBjcml0aWNhbCBldmVudC4gQW5kIGBfX2JyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRfY3R4YCBpcyB0aWVkIHRvIGRpc2FibGluZyBtdWx0aWNhc3Qgb24gYSBwb3J0IOKAkyBzb21ldGhpbmcgdGhhdCBoYXBwZW5zIGEgYml0IGxlc3MgZnJlcXVlbnRseSwgYnV0IGlzIHN0aWxsIHJlbGV2YW50LlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb246IGlzIHRoaXMgd29ydGggZnV6emluZz8gQWJzb2x1dGVseSwgd2l0aG91dCBhIGRvdWJ0ISBUaGlzIGlzIHJpZ2h0IGluIHRoZSBoZWFydCBvZiB0aGUgYnJpZGdlIG11bHRpY2FzdCBsb2dpYy4gQW55IGluc3RhYmlsaXR5IGhlcmUgY291bGQgbGVhZCB0byBzZXJpb3VzIG5ldHdvcmsgZGlzcnVwdGlvbiwgcGFydGljdWxhcmx5IGluIGVudmlyb25tZW50cyByZWx5aW5nIGhlYXZpbHkgb24gbXVsdGljYXN0LlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gbmFpbCBkb3duIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBnb3Zlcm4gYnJpZGdlIG11bHRpY2FzdC4gSSdtIHRoaW5raW5nIGBDT05GSUdfQlJJREdFX0lHTVBfU05PT1BJTkdgIGlzIGEgbGlrZWx5IGNhbmRpZGF0ZSwgYnV0IEkgc2hvdWxkIHByb2JhYmx5IGNvbmZpcm0gdGhhdCBieSBjaGVja2luZyBgbmV0L2JyaWRnZS9LY29uZmlnYCBvciBldmVuIGBuZXQvYnJpZGdlL01ha2VmaWxlYCB0byBtYWtlIHN1cmUgSSBoYXZlIHRoZSBjb250ZXh0IHJpZ2h0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjYyLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTE6NTg6NTguNzE2MDI0ODg4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NDg0NTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJyX211bHRpY2FzdC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9icmlkZ2UvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvTWFrZWZpbGU9MTk9b2JqLSQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpICs9IGJyX25ldGZpbHRlci5vXFxubmV0L2JyaWRnZS9NYWtlZmlsZS0yMC1cXG5uZXQvYnJpZGdlL01ha2VmaWxlOjIxOmJyaWRnZS0kKENPTkZJR19CUklER0VfSUdNUF9TTk9PUElORykgKz0gYnJfbXVsdGljYXN0Lm8gYnJfbWRiLm8gYnJfbXVsdGljYXN0X2VodC5vXFxubmV0L2JyaWRnZS9NYWtlZmlsZS0yMi1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmM9MTY0PXN0YXRpYyBpbnQgYnJfZGV2X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtMTcwLVxcdGJyX3N0cF9lbmFibGVfYnJpZGdlKGJyKTtcXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jOjE3MTpcXHRicl9tdWx0aWNhc3Rfb3Blbihicik7XFxubmV0L2JyaWRnZS9icl9kZXZpY2UuYy0xNzItXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQyMjk9dm9pZCBicl9tdWx0aWNhc3RfbGVhdmVfc25vb3BlcnMoc3RydWN0IG5ldF9icmlkZ2UgKmJyKVxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MjM0LVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDIzNTpzdGF0aWMgdm9pZCBfX2JyX211bHRpY2FzdF9vcGVuX3F1ZXJ5KHN0cnVjdCBuZXRfYnJpZGdlICpicixcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQyMzYtXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGJyaWRnZV9tY2FzdF9vd25fcXVlcnkgKnF1ZXJ5KVxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MjQ1LVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDI0NjpzdGF0aWMgdm9pZCBfX2JyX211bHRpY2FzdF9vcGVuKHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0ICpicm1jdHgpXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MjQ3LXtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQyNDg6XFx0X19icl9tdWx0aWNhc3Rfb3Blbl9xdWVyeShicm1jdHgtXFx1MDAzZWJyLCBcXHUwMDI2YnJtY3R4LVxcdTAwM2VpcDRfb3duX3F1ZXJ5KTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQyNDktI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0MjUwOlxcdF9fYnJfbXVsdGljYXN0X29wZW5fcXVlcnkoYnJtY3R4LVxcdTAwM2ViciwgXFx1MDAyNmJybWN0eC1cXHUwMDNlaXA2X293bl9xdWVyeSk7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MjUxLSNlbmRpZlxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MjUzLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDI1NDp2b2lkIGJyX211bHRpY2FzdF9vcGVuKHN0cnVjdCBuZXRfYnJpZGdlICpicilcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQyNTUte1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MjY5LVxcdFxcdFxcdFxcdCAgICAhYnJfbXVsdGljYXN0X2N0eF92bGFuX2Rpc2FibGVkKGJybWN0eCkpXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0MjcwOlxcdFxcdFxcdFxcdFxcdF9fYnJfbXVsdGljYXN0X29wZW4oXFx1MDAyNnZsYW4tXFx1MDAzZWJyX21jYXN0X2N0eCk7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MjcxLVxcdFxcdFxcdH1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDI3My1cXHR9IGVsc2Uge1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDI3NDpcXHRcXHRfX2JyX211bHRpY2FzdF9vcGVuKFxcdTAwMjZici1cXHUwMDNlbXVsdGljYXN0X2N0eCk7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00Mjc1LVxcdH1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9NDMxOD12b2lkIGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDM0MS1cXHRcXHRpZiAob24pXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0MzQyOlxcdFxcdFxcdF9fYnJfbXVsdGljYXN0X29wZW4oXFx1MDAyNnZsYW4tXFx1MDAzZWJyX21jYXN0X2N0eCk7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzQzLVxcdFxcdGVsc2VcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9NDM4Mz1pbnQgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgYm9vbCBvbixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQwNy1cXHRlbHNlXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0NDA4OlxcdFxcdF9fYnJfbXVsdGljYXN0X29wZW4oXFx1MDAyNmJyLVxcdTAwM2VtdWx0aWNhc3RfY3R4KTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MDktXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShwLCBcXHUwMDI2YnItXFx1MDAzZXBvcnRfbGlzdCwgbGlzdCkge1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00NjEwPXN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9zdGFydF9xdWVyaWVyKHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0ICpicm1jdHgsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ2MTctXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0NjE4OlxcdF9fYnJfbXVsdGljYXN0X29wZW5fcXVlcnkoYnJtY3R4LVxcdTAwM2ViciwgcXVlcnkpO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDYxOS1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9NDY4Mj1pbnQgYnJfbXVsdGljYXN0X3RvZ2dsZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHVuc2lnbmVkIGxvbmcgdmFsLFxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NzA3LVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDcwODpcXHRicl9tdWx0aWNhc3Rfb3Blbihicik7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NzA5LVxcdGJyX211bHRpY2FzdF9lbmFibGVfYWxsX3BvcnRzKGJyKTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTk4Mj12b2lkIGJyX211bHRpY2FzdF9sZWF2ZV9zbm9vcGVycyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpO1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjk4Mzp2b2lkIGJyX211bHRpY2FzdF9vcGVuKHN0cnVjdCBuZXRfYnJpZGdlICpicik7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtOTg0LXZvaWQgYnJfbXVsdGljYXN0X3N0b3Aoc3RydWN0IG5ldF9icmlkZ2UgKmJyKTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTE0Mjk9c3RhdGljIGlubGluZSB2b2lkIGJyX211bHRpY2FzdF9sZWF2ZV9zbm9vcGVycyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNDMyLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE0MzM6c3RhdGljIGlubGluZSB2b2lkIGJyX211bHRpY2FzdF9vcGVuKHN0cnVjdCBuZXRfYnJpZGdlICpicilcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNDM0LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTE6NTg6NTguNzYwNTE0NDM3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ2ODI0NTc3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgSUdNUCBTbm9vcGluZyBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgdGhlIGN1cnJlbnQgY29uZmlnIGlzIHNldCB0byBgQlJJREdFX0lHTVBfU05PT1BJTkdgLCB3aGljaCBpbW1lZGlhdGVseSB0cmlnZ2VycyBzb21lIHRob3VnaHRzLiBXZSd2ZSBnb3QgSUdNUCBzbm9vcGluZyBlbmFibGVkIG9uIGEgYnJpZGdlLiBNYWtlcyBzZW5zZSBpbiBhIGxvdCBvZiBzY2VuYXJpb3MsIGJ1dCBJIG5lZWQgdG8gcXVpY2tseSBlbnN1cmUgd2UgaGF2ZW4ndCBtaXNzZWQgYW55IGRlcGVuZGVuY2llcyBvciBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9ucy4gVGhlIG1vc3QgaW1wb3J0YW50IHRoaW5nIGhlcmUgaXMgdGhlIHByZXNlbmNlIG9mIGBCUklER0VgLiBJJ20gYXNzdW1pbmcgdGhhdCdzIG5lZWRlZCB0byBldmVuIGdldCBzdGFydGVkIHdpdGggSUdNUCBzbm9vcGluZyBpbiBhIGJyaWRnZWQgZW52aXJvbm1lbnQsIGJ1dCBhc3N1bXB0aW9ucyBhcmUgdGhlIGJhbmUgb2Ygc29saWQgY29uZmlndXJhdGlvbnMhIEJlc3QgdG8gcXVpY2tseSB2ZXJpZnkuIExldCdzIGRpZyBpbnRvIHRoZSBgbmV0L2JyaWRnZS9LY29uZmlnYCBmaWxlLiBUaGF0J3MgdGhlIGdvLXRvIHBsYWNlIGZvciBhbGwgdGhpbmdzIGJyaWRnaW5nIGFuZCBjb25maWd1cmF0aW9uIHJlbGF0ZWQgaW4gdGhlIG5ldHdvcmtpbmcgc3Vic3lzdGVtLiBUaGF0J3Mgd2hlcmUgYWxsIHRoZSBkZXBlbmRlbmNpZXMgYXJlIGV4cGxpY2l0bHkgbGFpZCBvdXQsIHNvIHRoYXQncyB0aGUgZmFzdGVzdCB3YXkgdG8gZ2V0IGNsYXJpdHkgb24gd2hldGhlciB3ZSdyZSBnb29kIHRvIGdvLCBvciBpZiB0aGVyZSdzIHNvbWV0aGluZyBlbHNlIHdlIG5lZWQgdG8gdGFrZSBpbnRvIGNvbnNpZGVyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4MDcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMTo1OTowMi4yMjg3NjI5MDhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc2OTkxOTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJSSURHRV9JR01QX1NOT09QSU5HXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9icmlkZ2UvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvS2NvbmZpZz02PWNvbmZpZyBCUklER0VcXG4tLVxcbm5ldC9icmlkZ2UvS2NvbmZpZy0zNS1cXG5uZXQvYnJpZGdlL0tjb25maWc6MzY6Y29uZmlnIEJSSURHRV9JR01QX1NOT09QSU5HXFxubmV0L2JyaWRnZS9LY29uZmlnLTM3LVxcdGJvb2wgXFxcIklHTVAvTUxEIHNub29waW5nXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMTo1OTowMi4yNzY0Njk3MjdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDY3NTU1NDU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqS2NvbmZpZyBEZXBlbmRlbmN5IERlZXAgRGl2ZTogQlJJREdFX0lHTVBfU05PT1BJTkcqKlxuXG5Pa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyBgQlJJREdFX0lHTVBfU05PT1BJTkdgIGlzIGNvbmZpZ3VyZWQgd2l0aGluIHRoZSBuZXR3b3JraW5nIHN0YWNrLiBNeSBpbml0aWFsIHRhcmdldCBpcyBgbmV0L2JyaWRnZS9LY29uZmlnYC4gVGhhdCdzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcgZm9yIGFueSBkZXBlbmRlbmNpZXMgb3IgY29uZGl0aW9uYWwgbG9naWMgcmVsYXRlZCB0byB0aGlzIHBhcnRpY3VsYXIgYnJpZGdpbmcgZmVhdHVyZS4gSSdtIGFzc3VtaW5nIHRoYXQncyB3aGVyZSBJIGNhbiBmaW5kIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFVuZGVyc3RhbmRpbmcgdGhvc2UgZGVwZW5kZW5jaWVzIGlzIGtleSBiZWZvcmUgSSBldmVuIGNvbnNpZGVyIG1ha2luZyBhbnkgbW9kaWZpY2F0aW9ucyBvciBlbmhhbmNlbWVudHMuIEl0J3MgdGhlIGZvdW5kYXRpb24gZm9yIGFueSBkZWVwZXIgaW52ZXN0aWdhdGlvbiBpbnRvIGl0cyBiZWhhdmlvciwgcGVyZm9ybWFuY2UsIG9yIHBvdGVudGlhbCBpc3N1ZXMuIExldCdzIHNlZSB3aGF0IHRoZSBLY29uZmlnIGZpbGUgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTE4MywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDExOjU5OjA1LjM0NDAyNzY3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTk3NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2JyaWRnZS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM2LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDM2OlxcdGNvbmZpZyBCUklER0VfSUdNUF9TTk9PUElOR1xcbiAgMzc6XFx0XFx0Ym9vbCBcXFwiSUdNUC9NTEQgc25vb3BpbmdcXFwiXFxuICAzODpcXHRcXHRkZXBlbmRzIG9uIEJSSURHRVxcbiAgMzk6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUXFxuICA0MDpcXHRcXHRkZWZhdWx0IHlcXG4gIDQxOlxcdFxcdGhlbHBcXG4gIDQyOlxcdFxcdCAgSWYgeW91IHNheSBZIGhlcmUsIHRoZW4gdGhlIEV0aGVybmV0IGJyaWRnZSB3aWxsIGJlIGFibGUgc2VsZWN0aXZlbHlcXG4gIDQzOlxcdFxcdCAgZm9yd2FyZCBtdWx0aWNhc3QgdHJhZmZpYyBiYXNlZCBvbiBJR01QL01MRCB0cmFmZmljIHJlY2VpdmVkIGZyb21cXG4gIDQ0OlxcdFxcdCAgZWFjaCBwb3J0LlxcbiAgNDU6XFx0XFxuICA0NjpcXHRcXHQgIFNheSBOIHRvIGV4Y2x1ZGUgdGhpcyBzdXBwb3J0IGFuZCByZWR1Y2UgdGhlIGJpbmFyeSBzaXplLlxcbiAgNDc6XFx0XFxuICA0ODpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IFkuXFxuICA0OTpcXHRcXG4gIDUwOlxcdGNvbmZpZyBCUklER0VfVkxBTl9GSUxURVJJTkdcXG4gIDUxOlxcdFxcdGJvb2wgXFxcIlZMQU4gZmlsdGVyaW5nXFxcIlxcbiAgNTI6XFx0XFx0ZGVwZW5kcyBvbiBCUklER0VcXG4gIDUzOlxcdFxcdGRlcGVuZHMgb24gVkxBTl84MDIxUVxcbiAgNTQ6XFx0XFx0ZGVmYXVsdCBuXFxuICA1NTpcXHRcXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDExOjU5OjA1LjM0NDEyOTYzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc5MjEyMjc1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIEkgZGVsdmUgaW50byB0aGlzIGNvZGU6XG5cbioqQW5hbHl6aW5nIE11bHRpY2FzdCBDb250cm9sIEZsb3cqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgbXVsdGljYXN0IGlzIGhhbmRsZWQsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGJyaWRnaW5nIGNvbnRleHQuIFRoZSBrZXkgaWRlbnRpZmllcnMganVtcGluZyBvdXQgYXQgbWUgYXJlIGBCUklER0VgLCBgSU5FVGAsIGFuZCBgQlJJREdFX0lHTVBfU05PT1BJTkdgLiBUaGVzZSBsaWtlbHkgcmVwcmVzZW50IGNvbmZpZ3VyYXRpb24gZmxhZ3Mgb3IgbW9kdWxlIGRlc2lnbmF0aW9ucyByZWxhdGVkIHRvIGJyaWRnaW5nIGFuZCBJR01QIHNub29waW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgaW50ZXJhY3QuXG5cbk15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgZnVuY3Rpb25zIGBicl9tdWx0aWNhc3RfZGVsX3BvcnRgIGFuZCBgX19icl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0X2N0eGAuIFRoZXNlIHNlZW0gdG8gYmUgdGhlIGNyaXRpY2FsIHBvaW50cyB3aGVyZSBtdWx0aWNhc3QgZm9yd2FyZGluZyBvbiBicmlkZ2UgcG9ydHMgaXMgbW9kaWZpZWQsIHBvdGVudGlhbGx5IHJlbW92ZWQgb3IgZGlzYWJsZWQuIE15IHRhc2sgaXMgdG8gZGV0ZXJtaW5lIGlmIEkgY2FuIHRyYWNlIHRoZSBjb250cm9sIGZsb3cgdG8gdGhvc2Ugc3BlY2lmaWMgZnVuY3Rpb24gcG9pbnRzLCBhbmQgd2hhdCBBUEkgZW50cnlwb2ludHMgYXJlIGF2YWlsYWJsZSBmb3IgdGhvc2UgXCJGb2N1c1N5bWJvbHNcIi4gQXJlIHRoZXkgZGlyZWN0bHkgY2FsbGVkIGZyb20gc29tZXdoZXJlLCBvciBhcmUgdGhleSByZWFjaGVkIHRocm91Z2ggc29tZSBjYWxsYmFjayBvciBpbmRpcmVjdCBtZXRob2Q/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGdyYXBocyBhbmQgaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgaW52b2tlZCB0byBmdWxseSBncmFzcCB0aGVpciBwdXJwb3NlLiBUaGlzIGlzIHdoZXJlIEknbGwgbG9vayBmb3IgZW50cnkgcG9pbnRzIHRvIEZvY3VzU3ltYm9scy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTY0NywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTE6NTk6MDkuMTM2MjU2MDcxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjQ4NDQyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicl9tdWx0aWNhc3RfZGVsX3BvcnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JyaWRnZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JyaWRnZS9icl9pZi5jPTMzND1zdGF0aWMgdm9pZCBkZWxfbmJwKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnApXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2lmLmMtMzY5LVxcbm5ldC9icmlkZ2UvYnJfaWYuYzozNzA6XFx0YnJfbXVsdGljYXN0X2RlbF9wb3J0KHApO1xcbm5ldC9icmlkZ2UvYnJfaWYuYy0zNzEtXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2lmLmM9NTYwPWludCBicl9hZGRfaWYoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2JyaWRnZS9icl9pZi5jLTU5OS1cXHRpZiAoZXJyKSB7XFxubmV0L2JyaWRnZS9icl9pZi5jOjYwMDpcXHRcXHRicl9tdWx0aWNhc3RfZGVsX3BvcnQocCk7XFxubmV0L2JyaWRnZS9icl9pZi5jLTYwMS1cXHRcXHRuZXRkZXZfcHV0KGRldiwgXFx1MDAyNnAtXFx1MDAzZWRldl90cmFja2VyKTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfaWYuYy03MDktZXJyMjpcXG5uZXQvYnJpZGdlL2JyX2lmLmM6NzEwOlxcdGJyX211bHRpY2FzdF9kZWxfcG9ydChwKTtcXG5uZXQvYnJpZGdlL2JyX2lmLmMtNzExLVxcdG5ldGRldl9wdXQoZGV2LCBcXHUwMDI2cC1cXHUwMDNlZGV2X3RyYWNrZXIpO1xcbi0tXFxubmV0L2JyaWRnZS9icl9tZGIuYz05ODQ9c3RhdGljIGludCBicl9tZGJfYWRkX2dyb3VwX3N0YXJfZyhjb25zdCBzdHJ1Y3QgYnJfbWRiX2NvbmZpZyAqY2ZnLFxcbi0tXFxubmV0L2JyaWRnZS9icl9tZGIuYy0xMDM1LWVycl9kZWxfcG9ydF9ncm91cDpcXG5uZXQvYnJpZGdlL2JyX21kYi5jOjEwMzY6XFx0YnJfbXVsdGljYXN0X2RlbF9wb3J0X2dyb3VwKHApO1xcbm5ldC9icmlkZ2UvYnJfbWRiLmMtMTAzNy1cXHRyZXR1cm4gZXJyO1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0xMzk4PXN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAgKmJyX211bHRpY2FzdF9uZXdfcG9ydF9ncm91cChcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMTQ1Ni1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjE0NTc6dm9pZCBicl9tdWx0aWNhc3RfZGVsX3BvcnRfZ3JvdXAoc3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cCAqcClcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTE0NTgte1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0yMDQzPWludCBicl9tdWx0aWNhc3RfYWRkX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydClcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjA2My1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjIwNjQ6dm9pZCBicl9tdWx0aWNhc3RfZGVsX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydClcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIwNjUte1xcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9OTc2PWludCBicl9tdWx0aWNhc3RfYWRkX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCk7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6OTc3OnZvaWQgYnJfbXVsdGljYXN0X2RlbF9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpO1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTk3OC12b2lkIGJyX211bHRpY2FzdF9lbmFibGVfcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0KTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTEwMDc9YnJfbXVsdGljYXN0X25ld19wb3J0X2dyb3VwKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xMDEyLVxcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjEwMTM6dm9pZCBicl9tdWx0aWNhc3RfZGVsX3BvcnRfZ3JvdXAoc3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cCAqcCk7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTAxNC1pbnQgYnJfbWRiX2hhc2hfaW5pdChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpO1xcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTQwND1zdGF0aWMgaW5saW5lIGludCBicl9tdWx0aWNhc3RfYWRkX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydClcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE0MDgtXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTQwOTpzdGF0aWMgaW5saW5lIHZvaWQgYnJfbXVsdGljYXN0X2RlbF9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTQxMC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDExOjU5OjA5LjE4Mjc0NjE5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MDAzNzMwNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBJIHNlZSBpdDpcblxuKipBbmFseXppbmcgdGhlIEJyaWRnZSBNdWx0aWNhc3QgUG9ydCBEZWxldGlvbiBGbG93KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IG11bHRpY2FzdCBwb3J0IGRlbGV0aW9uIGlzIGhhbmRsZWQgd2l0aGluIHRoZSBicmlkZ2UgY29kZS4gYGJyX211bHRpY2FzdF9kZWxfcG9ydGAgYXBwZWFycyB0byBiZSB0aGUgY29yZSBmdW5jdGlvbiwgdGhlIG9uZSB0aGF0IGFjdHVhbGx5IGRvZXMgdGhlIHdvcmsuIEkgc2VlIHRoYXQgaXQncyBpbnZva2VkIGZyb20gdHdvIHByaW1hcnkgbG9jYXRpb25zOiBgZGVsX25icGAgYW5kIGFsc28sIGltcG9ydGFudGx5LCB3aXRoaW4gYGJyX2FkZF9pZmAgZHVyaW5nIGVycm9yIGhhbmRsaW5nLiBgZGVsX25icGAgbWFrZXMgcGVyZmVjdCBzZW5zZTsgdGhhdCdzIHRoZSBuYXR1cmFsIGNhbGwgd2hlbiBhIGJyaWRnZSBwb3J0IGdldHMgcmVtb3ZlZCwgc2F5LCB2aWEgYGJyX2RlbF9pZmAuICBUaGF0IGFsbCB0cmFja3MuXG5cblRoZSBlcnJvciBwYXRoIGluIGBicl9hZGRfaWZgIGlzIHNvbWV0aGluZyB0byB0aGluayBhYm91dCB0b28sIGJ1dCB0aGUgbWFpbiBxdWVzdGlvbiB0aGF0IGp1bXBlZCBvdXQgYXQgbWUgaW1tZWRpYXRlbHkgaXM6IHdoYXTigJlzIHRoZSByZWxhdGlvbnNoaXAgdG8gYF9fYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydF9jdHhgPyBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgaXQgZml0cyBpbnRvIHRoaXMgcHV6emxlLiBJcyB0aGlzIGZ1bmN0aW9uIGEgbG93ZXItbGV2ZWwgY29tcGFuaW9uLCBhIGhlbHBlciwgYSBkaWZmZXJlbnQgYXBwcm9hY2ggZW50aXJlbHk/IEkgbmVlZCB0byBjbGFyaWZ5IHRoZSBmbG93IG9mIGhvdyBtdWx0aWNhc3QgaXMgYWN0dWFsbHkgZGlzYWJsZWQsIGRvd24gdG8gdGhlIGdyYW51bGFyIGxldmVsLiBUaGUgY29ubmVjdGlvbiBiZXR3ZWVuIGFsbCBvZiB0aGVzZSBmdW5jdGlvbnMgbmVlZHMgdG8gYmUgdGhvcm91Z2hseSB1bmRlcnN0b29kIHRvIGVuc3VyZSBlZmZpY2llbnQgYW5kIGNvbnNpc3RlbnQgcG9ydCByZW1vdmFsIGluIGFsbCBzY2VuYXJpb3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5NjgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMTo1OToxMy4wODMxMjI5ODdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2OTk1OTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydF9jdHhcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JyaWRnZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0yMTE0PXN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9lbmFibGVfcG9ydF9jdHgoc3RydWN0IG5ldF9icmlkZ2VfbWNhc3RfcG9ydCAqcG1jdHgpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIxMjctXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoyMTI4OnN0YXRpYyB2b2lkIF9fYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydF9jdHgoc3RydWN0IG5ldF9icmlkZ2VfbWNhc3RfcG9ydCAqcG1jdHgpXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMTI5LXtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MjE2Mz1zdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0X2N0eChzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdF9wb3J0ICpwbWN0eClcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjE3My1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjIxNzQ6XFx0X19icl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0X2N0eChwbWN0eCk7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMTc1LVxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZici1cXHUwMDNlbXVsdGljYXN0X2xvY2spO1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00MzE4PXZvaWQgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCBib29sIG9uKVxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzU3LVxcdFxcdGVsc2VcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQzNTg6XFx0XFx0XFx0X19icl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0X2N0eChcXHUwMDI2dmxhbi1cXHUwMDNlcG9ydF9tY2FzdF9jdHgpO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDM1OS1cXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2YnItXFx1MDAzZW11bHRpY2FzdF9sb2NrKTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9NDY3MT1zdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfZGlzYWJsZV9hbGxfcG9ydHMoc3RydWN0IG5ldF9icmlkZ2UgKmJyKVxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00Njc4LVxcdGxpc3RfZm9yX2VhY2hfZW50cnkocG9ydCwgXFx1MDAyNmJyLVxcdTAwM2Vwb3J0X2xpc3QsIGxpc3QpXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0Njc5OlxcdFxcdF9fYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydF9jdHgoXFx1MDAyNnBvcnQtXFx1MDAzZW11bHRpY2FzdF9jdHgpO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDY4MC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDExOjU5OjEzLjEzMDEyMzk3NloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTYxNDg3MzM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBicmVha2Rvd24gb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKlRyYWNpbmcgdGhlIE11bHRpY2FzdCBEaXNhYmxlIFNlcXVlbmNlKipcblxuT2theSwgc28gSSdtIGludmVzdGlnYXRpbmcgdGhlIG11bHRpY2FzdCBkaXNhYmxlIGZ1bmN0aW9uYWxpdHkuIFRoZSBlbnRyeSBwb2ludCBhcHBlYXJzIHRvIGJlIGBicl9tdWx0aWNhc3RfZGlzYWJsZV9hbGxfcG9ydHNgLiBUaGF0IG1ha2VzIHNlbnNlOyBpdCdzIGEgZGVzY3JpcHRpdmUgbmFtZS4gVGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBmcm9tIGBicl9tdWx0aWNhc3RfdG9nZ2xlYCBhY2NvcmRpbmcgdG8gdGhlIHByb3ZpZGVkIGluZm9ybWF0aW9uLiBBbmQgYGJyX211bHRpY2FzdF90b2dnbGVgPyBJdCdzIHRoZSBvbmUgY2FsbGVkIGJ5IGZ1bmN0aW9ucyBsaWtlIGBicl9tdWx0aWNhc3Rfc2V0X2lnbXBfc25vb3BpbmdgLCB3aGljaCBpcyBleGFjdGx5IHRoZSBraW5kIG9mIHNldHRpbmcgSSdkIGV4cGVjdCB0byB0cmlnZ2VyIGEgbXVsdGljYXN0IHN0YXRlIGNoYW5nZS5cblxuR2l2ZW4gdGhpcyBpbml0aWFsIG92ZXJ2aWV3LCBteSBuZXh0IHN0ZXAgaXMgY2xlYXIuIFRvIHJlYWxseSB1bmRlcnN0YW5kIHRoZSBmbG93LCBJIG5lZWQgdG8gZGl2ZSBpbnRvIGBicl9tdWx0aWNhc3RfdG9nZ2xlYC4gSSBuZWVkIHRvIHNlZSB3aGF0IGNvbmRpdGlvbnMgdHJpZ2dlciB0aGUgY2FsbCB0byBgYnJfbXVsdGljYXN0X2Rpc2FibGVfYWxsX3BvcnRzYCwgYW5kIHdoYXQgb3RoZXIgYWN0aW9ucyBhcmUgcGVyZm9ybWVkIHdpdGhpbiB0aGF0IGB0b2dnbGVgIGZ1bmN0aW9uLiBUaGlzIHdpbGwgbGV0IG1lIHJlY29uc3RydWN0IHRoZSBvdmVyYWxsIG11bHRpY2FzdCBkaXNhYmxlIG1lY2hhbmlzbSBhbmQgcGlucG9pbnQgdGhlIG1vc3QgaW1wYWN0ZnVsIHBhcnRzIG9mIHRoZSBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODc0LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTE6NTk6MTYuNjkxNjE0MTM0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjM4Mzg1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicl9tdWx0aWNhc3RfdG9nZ2xlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9icmlkZ2UvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvYnIuYz0yOTQ9aW50IGJyX2Jvb2xvcHRfdG9nZ2xlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgZW51bSBicl9ib29sb3B0X2lkIG9wdCwgYm9vbCBvbixcXG4tLVxcbm5ldC9icmlkZ2UvYnIuYy0zMDMtXFx0Y2FzZSBCUl9CT09MT1BUX01DQVNUX1ZMQU5fU05PT1BJTkc6XFxubmV0L2JyaWRnZS9ici5jOjMwNDpcXHRcXHRlcnIgPSBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3BpbmcoYnIsIG9uLCBleHRhY2spO1xcbm5ldC9icmlkZ2UvYnIuYy0zMDUtXFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTIxNjM9c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydF9jdHgoc3RydWN0IG5ldF9icmlkZ2VfbWNhc3RfcG9ydCAqcG1jdHgpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIxNzctXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoyMTc4OnN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF90b2dnbGVfcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LCBib29sIG9uKVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjE3OS17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTIyMTY9dm9pZCBicl9tdWx0aWNhc3RfZW5hYmxlX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydClcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIyMTcte1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MjIxODpcXHRicl9tdWx0aWNhc3RfdG9nZ2xlX3BvcnQocG9ydCwgdHJ1ZSk7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMjE5LX1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MjIyMT12b2lkIGJyX211bHRpY2FzdF9kaXNhYmxlX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydClcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIyMjIte1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MjIyMzpcXHRicl9tdWx0aWNhc3RfdG9nZ2xlX3BvcnQocG9ydCwgZmFsc2UpO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjIyNC19XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQyOTI9dm9pZCBicl9tdWx0aWNhc3RfdXBkYXRlX3ZsYW5fbWNhc3RfY3R4KHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYsIHU4IHN0YXRlKVxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzE3LVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDMxODp2b2lkIGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbilcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzMTkte1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzYyLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDM2MzpzdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbilcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzNjQte1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00Mzc1LVxcdFxcdFxcdGNvbnRpbnVlO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDM3NjpcXHRcXHRicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHZwb3J0LCBvbik7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00Mzc3LVxcdH1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDM3OS1cXHRpZiAoYnJfdmxhbl9pc19icmVudHJ5KHZsYW4pKVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDM4MDpcXHRcXHRicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHZsYW4sIG9uKTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzODEtfVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDM4Mi1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQzODM6aW50IGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIGJvb2wgb24sXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00Mzg0LVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQxNi1cXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHZsYW4sIFxcdTAwMjZ2Zy1cXHUwMDNldmxhbl9saXN0LCB2bGlzdClcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQ0MTc6XFx0XFx0YnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuKHZsYW4sIG9uKTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MTgtXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MjEtXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0NDIyOmJvb2wgYnJfbXVsdGljYXN0X3RvZ2dsZV9nbG9iYWxfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCBib29sIG9uKVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQyMy17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MzItXFx0dmxhbi1cXHUwMDNlcHJpdl9mbGFncyBePSBCUl9WTEZMQUdfR0xPQkFMX01DQVNUX0VOQUJMRUQ7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0NDMzOlxcdGJyX211bHRpY2FzdF90b2dnbGVfdmxhbih2bGFuLCBvbik7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDM0LVxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00NjcxPXN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9kaXNhYmxlX2FsbF9wb3J0cyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ2ODEtXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0NjgyOmludCBicl9tdWx0aWNhc3RfdG9nZ2xlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgdW5zaWduZWQgbG9uZyB2YWwsXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NjgzLVxcdFxcdFxcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jPTEyOTU9c3RhdGljIGludCBicl9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpicmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTE0NDktXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM6MTQ1MDpcXHRcXHRlcnIgPSBicl9tdWx0aWNhc3RfdG9nZ2xlKGJyLCBtY2FzdF9zbm9vcGluZywgZXh0YWNrKTtcXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy0xNDUxLVxcdFxcdGlmIChlcnIpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD05OTI9aW50IGJyX211bHRpY2FzdF9zZXRfdmxhbl9yb3V0ZXIoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdiwgdTggbWNhc3Rfcm91dGVyKTtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDo5OTM6aW50IGJyX211bHRpY2FzdF90b2dnbGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1bnNpZ25lZCBsb25nIHZhbCxcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC05OTQtXFx0XFx0XFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTEwNjk9dm9pZCBicl9tdWx0aWNhc3RfdXBkYXRlX3ZsYW5fbWNhc3RfY3R4KHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYsIHU4IHN0YXRlKTtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxMDcwOnZvaWQgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCBib29sIG9uKTtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxMDcxOmludCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3Bpbmcoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBib29sIG9uLFxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTEwNzItXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxMDczOmJvb2wgYnJfbXVsdGljYXN0X3RvZ2dsZV9nbG9iYWxfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCBib29sIG9uKTtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xMDc0LVxcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTU0Nj1zdGF0aWMgaW5saW5lIHZvaWQgYnJfbXVsdGljYXN0X3VwZGF0ZV92bGFuX21jYXN0X2N0eChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LFxcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTU1MC1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxNTUxOnN0YXRpYyBpbmxpbmUgdm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTU1Mi1cXHRcXHRcXHRcXHRcXHRcXHRib29sIG9uKVxcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTU1NS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxNTU2OnN0YXRpYyBpbmxpbmUgaW50IGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTU1Ny1cXHRcXHRcXHRcXHRcXHRcXHQgICAgYm9vbCBvbixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE1NjItXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTU2MzpzdGF0aWMgaW5saW5lIGJvb2wgYnJfbXVsdGljYXN0X3RvZ2dsZV9nbG9iYWxfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLFxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE1NjQtXFx0XFx0XFx0XFx0XFx0XFx0ICAgYm9vbCBvbilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfc3lzZnNfYnIuYz00MTY9c3RhdGljIHNzaXplX3QgbXVsdGljYXN0X3Nub29waW5nX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmQsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3N5c2ZzX2JyLmMtNDE5LXtcXG5uZXQvYnJpZGdlL2JyX3N5c2ZzX2JyLmM6NDIwOlxcdHJldHVybiBzdG9yZV9icmlkZ2VfcGFybShkLCBidWYsIGxlbiwgYnJfbXVsdGljYXN0X3RvZ2dsZSk7XFxubmV0L2JyaWRnZS9icl9zeXNmc19ici5jLTQyMS19XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz0yMDM9c3RhdGljIHZvaWQgYnJfdmxhbl9wdXRfbWFzdGVyKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKm1hc3RlcnYpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0yMTQtXFx0XFx0X192bGFuX2RlbF9saXN0KG1hc3RlcnYpO1xcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjIxNTpcXHRcXHRicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKG1hc3RlcnYsIGZhbHNlKTtcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0yMTYtXFx0XFx0YnJfbXVsdGljYXN0X2N0eF9kZWluaXQoXFx1MDAyNm1hc3RlcnYtXFx1MDAzZWJyX21jYXN0X2N0eCk7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz0yNjM9c3RhdGljIGludCBfX3ZsYW5fYWRkKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYsIHUxNiBmbGFncyxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTM1OC1cXHRfX3ZsYW5fZmxhZ3NfY29tbWl0KHYsIGZsYWdzKTtcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzozNTk6XFx0YnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbih2LCB0cnVlKTtcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0zNjAtXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz0zOTA9c3RhdGljIGludCBfX3ZsYW5fZGVsKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy00MjctXFx0XFx0bmJwX3ZsYW5fc2V0X3ZsYW5fZGV2X3N0YXRlKHAsIHYtXFx1MDAzZXZpZCk7XFxubmV0L2JyaWRnZS9icl92bGFuLmM6NDI4OlxcdFxcdGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4odiwgZmFsc2UpO1xcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTQyOS1cXHRcXHRicl9tdWx0aWNhc3RfcG9ydF9jdHhfZGVpbml0KFxcdTAwMjZ2LVxcdTAwM2Vwb3J0X21jYXN0X2N0eCk7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz03MTk9c3RhdGljIGludCBicl92bGFuX2FkZF9leGlzdGluZyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy03NjAtXFx0XFx0KmNoYW5nZWQgPSB0cnVlO1xcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjc2MTpcXHRcXHRicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHZsYW4sIHRydWUpO1xcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTc2Mi1cXHR9XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz04OTQ9aW50IGJyX3ZsYW5fZmlsdGVyX3RvZ2dsZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHVuc2lnbmVkIGxvbmcgdmFsLFxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmMtOTIwLVxcdFxcdGJyX2luZm8oYnIsIFxcXCJ2bGFuIGZpbHRlcmluZyBkaXNhYmxlZCwgYXV0b21hdGljYWxseSBkaXNhYmxpbmcgbXVsdGljYXN0IHZsYW4gc25vb3BpbmdcXFxcblxcXCIpO1xcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjkyMTpcXHRcXHRicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3BpbmcoYnIsIGZhbHNlLCBOVUxMKTtcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy05MjItXFx0fVxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuX29wdGlvbnMuYz01NTA9c3RhdGljIGludCBicl92bGFuX3Byb2Nlc3NfZ2xvYmFsX29uZV9vcHRzKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlICpicixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbl9vcHRpb25zLmMtNTY0LVxcdFxcdG1jX3Nub29waW5nID0gbmxhX2dldF91OCh0YltCUklER0VfVkxBTkRCX0dPUFRTX01DQVNUX1NOT09QSU5HXSk7XFxubmV0L2JyaWRnZS9icl92bGFuX29wdGlvbnMuYzo1NjU6XFx0XFx0aWYgKGJyX211bHRpY2FzdF90b2dnbGVfZ2xvYmFsX3ZsYW4odiwgISFtY19zbm9vcGluZykpXFxubmV0L2JyaWRnZS9icl92bGFuX29wdGlvbnMuYy01NjYtXFx0XFx0XFx0KmNoYW5nZWQgPSB0cnVlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMTo1OToxNi43MzgwMDM4NTNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjkwNDYwMDA1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBCcmlkZ2UgTXVsdGljYXN0IEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiB0cmFjaW5nIHRoZSBjYWxsIHBhdGhzIHJlbGF0ZWQgdG8gbXVsdGljYXN0IG1hbmFnZW1lbnQgaW4gdGhlIExpbnV4IGJyaWRnZSBjb2RlLiBJdCBsb29rcyBsaWtlIGBicl9tdWx0aWNhc3RfdG9nZ2xlYCBpcyB0cmlnZ2VyZWQgdGhyb3VnaCB0d28gbWFpbiBhdmVudWVzOiBzeXNmcyB2aWEgYG11bHRpY2FzdF9zbm9vcGluZ19zdG9yZWAgYW5kIG5ldGxpbmsgdXNpbmcgYGJyX2NoYW5nZWxpbmtgLiBTaW1pbGFybHksIGBicl9tdWx0aWNhc3RfZGVsX3BvcnRgIGdldHMgY2FsbGVkIHZpYSBgYnJfZGVsX2lmYCwgd2hpY2ggaXRzZWxmIGNhbiBiZSBpbnZva2VkIHRocm91Z2ggbmV0bGluaydzIGBSVE1fREVMTElOS2Agb3IgdGhlIGlvY3RsIGBTSU9DQlJERUxJRmAuIFRoZSBrZXkgdGFrZWF3YXkgaGVyZSBpcyB0aGF0IGJvdGggb2YgdGhlc2UgYXJlIGRlZmluaXRlbHkgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZS4gRnVydGhlcm1vcmUsIHNpbmNlIHdlJ3JlIGRlYWxpbmcgd2l0aCBuZXR3b3JrIG5hbWVzcGFjZXMsIGV2ZW4gdW5wcml2aWxlZ2VkIHVzZXJzIGNhbiBwb3RlbnRpYWxseSByZWFjaCB0aGVzZSBmdW5jdGlvbnMuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGlkZW50aWZ5IHRoZSBjcnVjaWFsIGVudHJ5IHBvaW50cyB0aGF0IGFyZSB3b3J0aCBmb2N1c2luZyBvbiBmb3IgbW9yZSBpbiBkZXB0aCBhbmFseXNpcy4gYGJyX211bHRpY2FzdF9kZWxfcG9ydGAganVtcHMgb3V0IGFzIGEgZ29vZCBjYW5kaWRhdGUuIGBicl9tdWx0aWNhc3RfdG9nZ2xlYCwgYGJyX211bHRpY2FzdF9hZGRfcG9ydGAsIGFuZCBgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nYCBhbHNvIGFwcGVhciBwcm9taXNpbmcgZnJvbSB0aGlzIGZpcnN0IHBhc3MuXG5cbk5vdywgbGV0J3MgZGl2ZSBpbnRvIGBuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jYCB0byBleGFtaW5lIGBicl9tdWx0aWNhc3RfZGVsX3BvcnRgIGFuZCBgYnJfbXVsdGljYXN0X3RvZ2dsZWAuIEhhbmcgb24uLi4gYF9fYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydF9jdHhgIGlzIHN0YXRpYy4gVGhhdCBtZWFucyB3ZSBzaG91bGQgcGl2b3Qgb3VyIGF0dGVudGlvbiB0byB0aGUgbm9uLXN0YXRpYyBjb3VudGVycGFydHMgc3VjaCBhcyBgYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydGAsIGBicl9tdWx0aWNhc3RfdG9nZ2xlX3BvcnRgLCBvciwgYWdhaW4sIGBicl9tdWx0aWNhc3RfdG9nZ2xlYC4gSSdsbCBzdGFydCBieSBmb2N1c2luZyBvbiBgYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMTczLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDExOjU5OjIzLjY0MjYwNjg3NloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYyMDMxNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYnJpZGdlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTIxMTQ9c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X2VuYWJsZV9wb3J0X2N0eChzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdF9wb3J0ICpwbWN0eClcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjEyNy1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjIxMjg6c3RhdGljIHZvaWQgX19icl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0X2N0eChzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdF9wb3J0ICpwbWN0eClcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIxMjkte1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMTYyLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MjE2MzpzdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0X2N0eChzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdF9wb3J0ICpwbWN0eClcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIxNjQte1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMTczLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MjE3NDpcXHRfX2JyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRfY3R4KHBtY3R4KTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIxNzUtXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmJyLVxcdTAwM2VtdWx0aWNhc3RfbG9jayk7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTIxNzg9c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X3RvZ2dsZV9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsIGJvb2wgb24pXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIyMDItXFx0XFx0XFx0ZWxzZVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MjIwMzpcXHRcXHRcXHRcXHRicl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0X2N0eChwbWN0eCk7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMjA0LVxcdFxcdH1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjIxMi1cXHRlbHNlXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoyMjEzOlxcdFxcdGJyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRfY3R4KFxcdTAwMjZwb3J0LVxcdTAwM2VtdWx0aWNhc3RfY3R4KTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIyMTQtfVxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0yMjE2PXZvaWQgYnJfbXVsdGljYXN0X2VuYWJsZV9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIyMjAtXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoyMjIxOnZvaWQgYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0KVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjIyMi17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQzMTg9dm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzNTctXFx0XFx0ZWxzZVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDM1ODpcXHRcXHRcXHRfX2JyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRfY3R4KFxcdTAwMjZ2bGFuLVxcdTAwM2Vwb3J0X21jYXN0X2N0eCk7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzU5LVxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZici1cXHUwMDNlbXVsdGljYXN0X2xvY2spO1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00MzgzPWludCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3Bpbmcoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBib29sIG9uLFxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDEwLVxcdFxcdGlmIChvbilcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQ0MTE6XFx0XFx0XFx0YnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydF9jdHgoXFx1MDAyNnAtXFx1MDAzZW11bHRpY2FzdF9jdHgpO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQxMi1cXHRcXHRlbHNlXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQ2NzE9c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X2Rpc2FibGVfYWxsX3BvcnRzKHN0cnVjdCBuZXRfYnJpZGdlICpicilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDY3OC1cXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcnQsIFxcdTAwMjZici1cXHUwMDNlcG9ydF9saXN0LCBsaXN0KVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDY3OTpcXHRcXHRfX2JyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRfY3R4KFxcdTAwMjZwb3J0LVxcdTAwM2VtdWx0aWNhc3RfY3R4KTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ2ODAtfVxcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9OTc4PXZvaWQgYnJfbXVsdGljYXN0X2VuYWJsZV9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpO1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjk3OTp2b2lkIGJyX211bHRpY2FzdF9kaXNhYmxlX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCk7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtOTgwLXZvaWQgYnJfbXVsdGljYXN0X2luaXQoc3RydWN0IG5ldF9icmlkZ2UgKmJyKTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTE0MTM9c3RhdGljIGlubGluZSB2b2lkIGJyX211bHRpY2FzdF9lbmFibGVfcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0KVxcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTQxNi1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxNDE3OnN0YXRpYyBpbmxpbmUgdm9pZCBicl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTQxOC17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3N0cF9pZi5jPTk5PXZvaWQgYnJfc3RwX2Rpc2FibGVfcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwKVxcbi0tXFxubmV0L2JyaWRnZS9icl9zdHBfaWYuYy0xMTctXFx0XFx0YnJfZmRiX2RlbGV0ZV9ieV9wb3J0KGJyLCBwLCAwLCAwKTtcXG5uZXQvYnJpZGdlL2JyX3N0cF9pZi5jOjExODpcXHRicl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0KHApO1xcbm5ldC9icmlkZ2UvYnJfc3RwX2lmLmMtMTE5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMTo1OToyMy42ODg4MTgwNDVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI5Mjc3NzAyODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE11bHRpY2FzdCBTbm9vcGluZyBGdW5jdGlvbmFsaXR5IGluIHRoZSBCcmlkZ2UqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIE15IHByaW1hcnkgZ29hbCBoZXJlIGlzIHRvIGlkZW50aWZ5IHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgcmVsYXRlZCB0byBtdWx0aWNhc3Qgc25vb3Bpbmcgd2l0aGluIHRoZSBicmlkZ2UgYW5kIHVuZGVyc3RhbmQgdGhlaXIgY2FsbCBncmFwaC4gSSdtIGZvY3VzaW5nIG9uIHRoZSBpbXBhY3Qgb2YgcG9ydCBzdGF0ZSBjaGFuZ2VzIGFuZCBWTEFOIGludGVncmF0aW9uLlxuXG5GaXJzdCwgSSBzZWUgdGhhdCBgYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydGAgaXMgdHJpZ2dlcmVkIGJ5IGBicl9zdHBfZGlzYWJsZV9wb3J0YCwgd2hpY2ggaW4gdHVybiBpcyBjYWxsZWQgd2hlbiBhIHBvcnQgZ29lcyBkb3duIG9yIGlzIHJlbW92ZWQuIFRoYXQgbWVhbnMgaXTigJlzIGEga2V5IHBvaW50IHRvIHN0YXJ0IHdpdGguXG5cbkknbSBtb3Zpbmcgb24gdG8gYGJyX211bHRpY2FzdF9kZWxfcG9ydGAuIFRoaXMgZnVuY3Rpb24gbG9va3MgaW1wb3J0YW50IGJlY2F1c2UgaXQncyBjYWxsZWQgZnJvbSBgZGVsX25icGAgYW5kIGFuIGVycm9yIHBhdGggd2l0aGluIGBicl9hZGRfaWZgLiBUaGlzIGluZGljYXRlcyBpdCBoYW5kbGVzIHRoZSByZW1vdmFsIG9mIGEgcG9ydCBhbmQgYXNzb2NpYXRlZCByZXNvdXJjZXMuXG5cbk5vdywgbGV0J3MgZXhwbG9yZSBgYnJfbXVsdGljYXN0X3RvZ2dsZWAuIEkgc2VlIHRoYXQgaXQncyBjYWxsZWQgZnJvbSBgYnJfY2hhbmdlbGlua2AgYW5kIGBtdWx0aWNhc3Rfc25vb3Bpbmdfc3RvcmVgLiBUaGlzIGZ1bmN0aW9uIGNsZWFybHkgbWFuYWdlcyB0aGUgb3ZlcmFsbCBlbmFibGluZy9kaXNhYmxpbmcgb2Ygc25vb3BpbmcsIHByb2JhYmx5IGluIHJlc3BvbnNlIHRvIGxpbmsgc3RhdGUgY2hhbmdlcyBvciBjb25maWd1cmF0aW9uIGNoYW5nZXMuXG5cbk5leHQsIEkgbmVlZCB0byBjaGVjayBgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nYCwgd2hpY2ggaXMgdHJpZ2dlcmVkIGJ5IGBicl9ib29sb3B0X3RvZ2dsZWAuIEl0IGxvb2tzIGxpa2UgaXQgaGFuZGxlcyB0aGUgdG9nZ2xpbmcgb2Ygc25vb3BpbmcgYXQgdGhlIFZMQU4gbGV2ZWwuXG5cblNpbWlsYXJseSwgSSBzaG91bGQgY2hlY2sgYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gIHNpbmNlIGl0IGlzIGNhbGxlZCBmcm9tIGBicl92bGFuX2FkZF9leGlzdGluZ2AsIGBfX3ZsYW5fZGVsYCwgYF9fdmxhbl9hZGRgLCBhbmQgYGJyX3ZsYW5fcHV0X21hc3RlcmAuIFRoaXMgZnVuY3Rpb24gbG9va3MgZXNzZW50aWFsIGZvciBhZGRpbmcvcmVtb3ZpbmcgVkxBTnMgYW5kIHRoZWlyIHJlbGF0aW9uc2hpcHMgd2l0aCBzbm9vcGluZy5cblxuSSBhbHNvIG5lZWQgdG8gY2hlY2sgYGJyX211bHRpY2FzdF90b2dnbGVfZ2xvYmFsX3ZsYW5gIHNpbmNlIGl0IGlzIGNhbGxlZCBmcm9tIGBicl92bGFuX3Byb2Nlc3NfZ2xvYmFsX29uZV9vcHRzYC4gVGhpcyBpcyByZWxhdGVkIHRvIHRoZSBnbG9iYWwgY29uZmlndXJhdGlvbiBvZiBzbm9vcGluZyBvbiBWTEFOcy5cblxuVGhlIG5leHQgY3JpdGljYWwgZnVuY3Rpb24gc2VlbXMgdG8gYmUgYGJyX211bHRpY2FzdF9hZGRfcG9ydGAuIEl0J3MgY2FsbGVkIGZyb20gYGJyX2FkZF9pZmAsIHNvIGl0J3MgaW52b2x2ZWQgaW4gYWRkaW5nIGEgcG9ydCB0byB0aGUgYnJpZGdlLlxuXG5BbHNvIGBicl9tdWx0aWNhc3RfZW5hYmxlX3BvcnRgLCB3aGljaCBpcyBjYWxsZWQgZnJvbSBgYnJfc3RwX2VuYWJsZV9wb3J0YC5cblxuYGJyX211bHRpY2FzdF9kZWxfcG9ydF9ncm91cGAgaXMgdHJpZ2dlcmVkIGZyb20gYGJyX21kYl9hZGRfZ3JvdXBfc3Rhcl9nYCwgd2hpY2ggaXMgcmVsYXRlZCB0byBwb3J0IGdyb3Vwcy4gV2hpbGUgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmVuJ3QgZGlyZWN0bHkgbGlua2VkIHRvIGl0LCBwb3J0IGdyb3VwcyBhcmUgY2xlYXJseSByZWxhdGVkIHRvIHRoaXMgYXJlYS5cblxuTG9va2luZyBjbG9zZWx5IGF0IHdoYXQgZnVuY3Rpb25zIGFyZSBiZWluZyBjaGFuZ2VkLCBJIHNlZSBgYnJfbXVsdGljYXN0X2RlbF9wb3J0YCBhbmQgYF9fYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydF9jdHhgLiBMZXQncyB1bmRlcnN0YW5kIGhvdyB0aGVzZSBhcmUgaW50ZXJjb25uZWN0ZWQuXG5cbmBfX2JyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRfY3R4YCBpcyBjYWxsZWQgYnkgYGJyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRfY3R4YCwgYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gLCBhbmQgYGJyX211bHRpY2FzdF9kaXNhYmxlX2FsbF9wb3J0c2AuIFRoaXMgcG9pbnRzIHRvIGl0cyByb2xlIGluIGFjdHVhbGx5IGRpc2FibGluZyB0aGUgcG9ydCBjb250ZXh0LCBwb3RlbnRpYWxseSBhcyBhIGhlbHBlci5cblxuSSBzZWUgdGhhdCBgYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydF9jdHhgIGlzIGNhbGxlZCBmcm9tIGBicl9tdWx0aWNhc3RfdG9nZ2xlX3BvcnRgICh3aGljaCBpcyBpbiB0dXJuIGNhbGxlZCBmcm9tIGBicl9tdWx0aWNhc3RfZW5hYmxlX3BvcnRgIGFuZCBgYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydGApIGFuZCBhbHNvIGZyb20gYGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZ2AuIEl0IGhhbmRsZXMgcG9ydC1sZXZlbCBzbm9vcGluZyBjaGFuZ2VzLlxuXG5UaGVuIGBicl9tdWx0aWNhc3RfZGlzYWJsZV9hbGxfcG9ydHNgIGlzIGNhbGxlZCBieSBgYnJfbXVsdGljYXN0X3RvZ2dsZWAsIHN1Z2dlc3RpbmcgdGhhdCB0aGlzIGlzIGEgZ2xvYmFsIG9wZXJhdGlvbi5cblxuVGhlcmVmb3JlLCB0aGUga2V5IGVudHJ5IHBvaW50cyBJJ20gZm9jdXNpbmcgb24gYXJlOiBgYnJfbXVsdGljYXN0X2RlbF9wb3J0YCwgYGJyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRgLCBgYnJfbXVsdGljYXN0X3RvZ2dsZWAsIGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYCwgYW5kIGBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3BpbmdgLlxuXG5Ob3csIEknbGwgY2hlY2sgdGhhdCB0aGVzZSBmdW5jdGlvbnMgYXJlIGV4cG9ydGVkLiBHb29kLCBgYnJfbXVsdGljYXN0X2RlbF9wb3J0YCwgYGJyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRgLCBgYnJfbXVsdGljYXN0X3RvZ2dsZWAsIGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYCwgYW5kIGBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3BpbmdgIGFyZSBhbGwgbm9uLXN0YXRpYy4gVGhpcyBjb25maXJtcyB0aGF0IHRoZXNlIGFyZSBwYXJ0IG9mIHRoZSBwdWJsaWMgQVBJLCB3aGljaCBpcyBjcml0aWNhbC5cblxuRmluYWxseSwgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGFsbCB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQgdG8gc3VwcG9ydCB0aGVzZSBmdW5jdGlvbnMuIEknbGwgbmVlZCBgQlJJREdFYCwgYElORVRgLCBhbmQgYEJSSURHRV9JR01QX1NOT09QSU5HYC4gU2luY2UgVkxBTi1yZWxhdGVkIGZ1bmN0aW9ucyBhcmUgaW4gcGxheSAoZS5nLiwgYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gLCBgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nYCwgYW5kIGBcblxuIiwiSW5wdXRUb2tlbnMiOjEzMTY4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMTo1OTozNi42MTY1OTE2MjlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA4NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2JyaWRnZS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUwLFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDUwOlxcdGNvbmZpZyBCUklER0VfVkxBTl9GSUxURVJJTkdcXG4gIDUxOlxcdFxcdGJvb2wgXFxcIlZMQU4gZmlsdGVyaW5nXFxcIlxcbiAgNTI6XFx0XFx0ZGVwZW5kcyBvbiBCUklER0VcXG4gIDUzOlxcdFxcdGRlcGVuZHMgb24gVkxBTl84MDIxUVxcbiAgNTQ6XFx0XFx0ZGVmYXVsdCBuXFxuICA1NTpcXHRcXHRoZWxwXFxuICA1NjpcXHRcXHQgIElmIHlvdSBzYXkgWSBoZXJlLCB0aGVuIHRoZSBFdGhlcm5ldCBicmlkZ2Ugd2lsbCBiZSBhYmxlIHNlbGVjdGl2ZWx5XFxuICA1NzpcXHRcXHQgIHJlY2VpdmUgYW5kIGZvcndhcmQgdHJhZmZpYyBiYXNlZCBvbiBWTEFOIGluZm9ybWF0aW9uIGluIHRoZSBwYWNrZXRcXG4gIDU4OlxcdFxcdCAgYW55IFZMQU4gaW5mb3JtYXRpb24gY29uZmlndXJlZCBvbiB0aGUgYnJpZGdlIHBvcnQgb3IgYnJpZGdlIGRldmljZS5cXG4gIDU5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMTo1OTozNi42MTY2NTQwODlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM0NjU1NjEzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkNvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzOiBBIFJlZmluZW1lbnQqKlxuXG5SaWdodCwgc28gYEJSSURHRV9WTEFOX0ZJTFRFUklOR2AgaXMgZGVmaW5pdGVseSBjb250aW5nZW50IG9uIGJvdGggYEJSSURHRWAgYW5kIGBWTEFOXzgwMjFRYC4gTWFrZXMgc2Vuc2UsIHdlIG5lZWQgdGhlIGJyaWRnaW5nIGZ1bmN0aW9uYWxpdHkgYW5kIHRoZSA4MDIuMVEgdGFnZ2luZyBzdXBwb3J0LiBUaGVyZWZvcmUsIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBgVkxBTl84MDIxUWAgaXMgaW5jbHVkZWQgaW4gbXkgYEVuYWJsZUNvbmZpZ3NgIGxpc3QuIE5vIGJyYWluZXIgdGhlcmUuXG5cbk5vdywgbGV0J3Mgc2VlIGFib3V0IGBCUklER0VfSUdNUF9TTk9PUElOR2AuIEkgc2VlbSB0byByZWNhbGwgaXQgZGVwZW5kaW5nIG9uIGBJTkVUYCwgc28gbGV0J3MganVzdCBjb25maXJtIHRoYXQgZGVwZW5kZW5jeS4gWWVwLCB0aGVyZSBpdCBpcy4gR29vZC4gU28sIGJhc2VkIG9uIHdoYXQgSSBzZWUgaGVyZSwgbXkgYEVuYWJsZUNvbmZpZ3NgIHNob3VsZCBjb250YWluIHRoZSBmb2xsb3dpbmc6IGBCUklER0VgLCBgSU5FVGAsIGBCUklER0VfSUdNUF9TTk9PUElOR2AsIGBWTEFOXzgwMjFRYCwgYW5kIGBCUklER0VfVkxBTl9GSUxURVJJTkdgLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBjb3JlIGNvbXBvbmVudHMgSSBuZWVkLCBhY2NvcmRpbmcgdG8gd2hhdCdzIGRlZmluZWQgaGVyZS5cblxuSnVzdCB0byBiZSBzYWZlLCBJIHNob3VsZCBxdWlja2x5IHZlcmlmeSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGRpcmVjdCBkZXBlbmRlbmNpZXMgdGhhdCBJIG1pZ2h0IGhhdmUgb3Zlcmxvb2tlZCBmb3IgYEJSSURHRWAgaXRzZWxmLiBXZSBkb24ndCB3YW50IGFueSB1bmV4cGVjdGVkIHN1cnByaXNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUzOTYsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMTo1OTo0MC45NjMyMTI3NTNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MDYyMzA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUklER0UkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9icmlkZ2UvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvS2NvbmZpZy01LVxcbm5ldC9icmlkZ2UvS2NvbmZpZzo2OmNvbmZpZyBCUklER0VcXG5uZXQvYnJpZGdlL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiODAyLjFkIEV0aGVybmV0IEJyaWRnaW5nXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMTo1OTo0MS4wMDkyODExNjFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM5MDQ1MjU0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRXhhbWluaW5nIEJyaWRnZSBEZXBlbmRlbmNpZXMgaW4gS2NvbmZpZyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBgQlJJREdFYCBjb25maWd1cmF0aW9uIGFuZCBpdHMgZGVwZW5kZW5jaWVzIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbS4gVGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgaXMgYG5ldC9icmlkZ2UvS2NvbmZpZ2AuIFRoaXMgZmlsZSBzaG91bGQgaG9sZCB0aGUgY29yZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgYnJpZGdpbmcgZnVuY3Rpb25hbGl0eSBhbmQsIGNydWNpYWxseSwgc3BlY2lmeSB3aGF0IG90aGVyIGtlcm5lbCBmZWF0dXJlcyBvciBtb2R1bGVzIGFyZSByZXF1aXJlZCB0byBiZSBlbmFibGVkIG9yIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuIEkgd2FudCB0byBjb25maXJtIG15IGFzc3VtcHRpb25zIGFuZCBlbnN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnkga2V5IGRlcGVuZGVuY2llcyBiZWZvcmUgSSBtb3ZlIGZvcndhcmQgd2l0aCBteSBhbmFseXNpcy4gSXQncyB0aGUgc3RhbmRhcmQgcHJhY3RpY2UgLSBhdm9pZCB3YXN0aW5nIHRpbWUgbGF0ZXIgYmVjYXVzZSBvZiBvdmVyc2lnaHRzIGVhcmxpZXIuIFRoYXQgZmlsZSBzaG91bGQgcHJvdmlkZSB0aGUgZGVmaW5pdGl2ZSBzb3VyY2Ugb2YgdHJ1dGggZm9yIHRoZSBrZXJuZWwncyBjb25maWd1cmF0aW9uIG9wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1ODc5LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTE6NTk6NDQuMzk5NzM2MDU1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxMTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9icmlkZ2UvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA2LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICA2OlxcdGNvbmZpZyBCUklER0VcXG4gICA3OlxcdFxcdHRyaXN0YXRlIFxcXCI4MDIuMWQgRXRoZXJuZXQgQnJpZGdpbmdcXFwiXFxuICAgODpcXHRcXHRzZWxlY3QgTExDXFxuICAgOTpcXHRcXHRzZWxlY3QgU1RQXFxuICAxMDpcXHRcXHRoZWxwXFxuICAxMTpcXHRcXHQgIElmIHlvdSBzYXkgWSBoZXJlLCB0aGVuIHlvdXIgTGludXggYm94IHdpbGwgYmUgYWJsZSB0byBhY3QgYXMgYW5cXG4gIDEyOlxcdFxcdCAgRXRoZXJuZXQgYnJpZGdlLCB3aGljaCBtZWFucyB0aGF0IHRoZSBkaWZmZXJlbnQgRXRoZXJuZXQgc2VnbWVudHMgaXRcXG4gIDEzOlxcdFxcdCAgaXMgY29ubmVjdGVkIHRvIHdpbGwgYXBwZWFyIGFzIG9uZSBFdGhlcm5ldCB0byB0aGUgcGFydGljaXBhbnRzLlxcbiAgMTQ6XFx0XFx0ICBTZXZlcmFsIHN1Y2ggYnJpZGdlcyBjYW4gd29yayB0b2dldGhlciB0byBjcmVhdGUgZXZlbiBsYXJnZXJcXG4gIDE1OlxcdFxcdCAgbmV0d29ya3Mgb2YgRXRoZXJuZXRzIHVzaW5nIHRoZSBJRUVFIDgwMi4xIHNwYW5uaW5nIHRyZWUgYWxnb3JpdGhtLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMTo1OTo0NC4zOTk4MTg0NTVaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTMzNTQyNzAxMTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCcmlkZ2UgTXVsdGljYXN0IFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgdGhlIGRlcGVuZGVuY2llcy4uLiBgQlJJREdFYCBpcyB0aGUgcm9vdCwgYnV0IHJlbGllcyBpbXBsaWNpdGx5IG9uIGBORVRgLiBgSU5FVGAgYW5kIGBWTEFOXzgwMjFRYCBhcmUgc3RhbmRhcmQgYW5kIGV4cGVjdGVkLiBDcnVjaWFsbHksIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgaGVyZSBhcmUgYEJSSURHRV9JR01QX1NOT09QSU5HYCBhbmQgYEJSSURHRV9WTEFOX0ZJTFRFUklOR2AuIFRoYXQncyB3aGVyZSB0aGUgZm9jdXMgbmVlZHMgdG8gYmUuXG5cbk5vdywgdGhpcyBwYXRjaC4uLiBpdCdzIGFkZHJlc3NpbmcgYSBzdWJ0bGUgY29uY3VycmVuY3kgaXNzdWUgd2l0aGluIHRoZSBicmlkZ2UncyBtdWx0aWNhc3QgaGFuZGxpbmcsIHNwZWNpZmljYWxseSB3aGVuIGRlbGV0aW5nIG11bHRpY2FzdCBncm91cHMgZnJvbSBhIHBvcnQncyBgbWdsaXN0YC4gVGhlIGNvcmUgcHJvYmxlbSBsaWVzIHdpdGhpbiB0aGUgYGJyX211bHRpY2FzdF9kZWxfcG9ydGAgYW5kIGBfX2JyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRfY3R4YCBmdW5jdGlvbnMuIFRoZSBgaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZWAgbWFjcm8sIHVzZWQgdG8gaXRlcmF0ZSB0aHJvdWdoIHRoZSBsaXN0IG9mIG11bHRpY2FzdCBncm91cHMsIGNhbiBnZXQgdHJpcHBlZCB1cCBpZiB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gYGJyX211bHRpY2FzdF9maW5kX2RlbF9wZ2AgcmVtb3ZlcyB0aGUgZW50cnkgaXQncyBjdXJyZW50bHkgcHJvY2Vzc2luZyAqb3IqIG90aGVyIGVudHJpZXMgb24gdGhlIGxpc3QuIFRoZSBvcmlnaW5hbCBjb2RlJ3MgaXRlcmF0b3IsIHNwZWNpZmljYWxseSB0aGUgYG5gIHBvaW50ZXIgaW4gdGhlIGBobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlYCwgY291bGQgYmVjb21lIGludmFsaWQgb3Igc3RhbGUsIGxlYWRpbmcgdG8gcG90ZW50aWFsIGlzc3VlcyBsaWtlIG1pc3NlZCBlbnRyaWVzIGR1cmluZyBpdGVyYXRpb24sIG9yIGV2ZW4gdXNlLWFmdGVyLWZyZWUsIHRob3VnaCB0aGUgY29kZSBjb21tZW50IGluZGljYXRlcyB0aGF0IHBvcnQgZ3JvdXBzIGFyZSBvbmx5IGZyZWVkIGJ5IHRoZSBHQyB3b3JrIHVuZGVyIGBtdWx0aWNhc3RfbG9ja2AsIHNvIGl0IGlzIG1vcmUgbGlrZWx5IHRoYXQgb25seSBlbnRyaWVzIGFyZSBtaXNzZWQuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgYHJlc3RhcnQ6YCBsYWJlbCBhbmQgdXNlcyBhIGB3aGlsZWAgbG9vcCwgYWxvbmcgd2l0aCBhIGNoZWNrIGFmdGVyIHRoZSBkZWxldGUsIHRvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSBhbiBlbnRyeSBpcyBkZWxldGVkIHdpdGhpbiB0aGUgbG9vcC4gVGhpcyBlbnN1cmVzIHRoYXQgdGhlIGl0ZXJhdGlvbiByZXN0YXJ0cyBmcm9tIHRoZSBiZWdpbm5pbmcgaWYgYSBncm91cCBpcyByZW1vdmVkLCBhbmQgcHJldmVudHMgdGhlIHN0YWxlIHBvaW50ZXIgcHJvYmxlbS5cblxuVGhpcyBpcyBhIGZ1bmN0aW9uYWwgZml4IHRvIGNvcmUgYnJpZGdlIG11bHRpY2FzdCBsb2dpYywgYW5kIHNvLCBpdCBuZWVkcyB0aG9yb3VnaCBmdXp6aW5nLlxuXG5NeSBwcmltYXJ5IGZvY3VzIGhlcmUgaXMgZ29pbmcgdG8gYmUgdGhvc2UgZnVuY3Rpb25zOiBgYnJfbXVsdGljYXN0X2RlbF9wb3J0YCBhbmQgYF9fYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydF9jdHhgLiBCdXQsIHRvIGJlIGNvbXByZWhlbnNpdmUsIEkgbmVlZCB0byBpbmNsdWRlIHRoZSBlbnRyeSBwb2ludHMgZm9yIHRoZXNlLCBwYXJ0aWN1bGFybHkgYGJyX211bHRpY2FzdF90b2dnbGVgLCBgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbmAgYW5kIGBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3BpbmdgLCBidXQgYWxzbyBgYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydGAuIE5vdywgaXMgYGJyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRgICp0aGUqIGJlc3QgZW50cnkgcG9pbnQgZm9yIGBfX2JyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRfY3R4YD8gTGV0J3MgdHJhY2UgaXQuIEl0IHNlZW1zIGBfX2JyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRfY3R4YCBpcyBpbmRlZWQgY2FsbGVkIHZpYSBgYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydF9jdHhgLCB3aGljaCBpcyB1bHRpbWF0ZWx5IGNhbGxlZCBieSBgYnJfbXVsdGljYXN0X3RvZ2dsZV9wb3J0YC4gQnV0LCBgYnJfbXVsdGljYXN0X3RvZ2dsZV9wb3J0YCBpcyBhbHNvIGNhbGxlZCBieSBgYnJfbXVsdGljYXN0X2VuYWJsZV9wb3J0YC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdCBsb2dpYyBiZXR0ZXIgLSBkb2VzIGBicl9tdWx0aWNhc3RfZW5hYmxlX3BvcnRgIGRpc2FibGUgZmlyc3Q/IE5vLCBhY3R1YWxseSwgYGJyX211bHRpY2FzdF90b2dnbGVfcG9ydGAgaXMgdGhlIHJlYWwgY2VudHJhbCBwb2ludCwgYW5kIGNhbiBiZSBjYWxsZWQgZWl0aGVyIHdpdGggYG9uYCBhcyBmYWxzZSwgd2hpY2ggd2lsbCBjYWxsIHRoZSBkaXNhYmxlIHJvdXRpbmUsICpvciogaWYgYG9uYCBpcyB0cnVlIGJ1dCBgYnJfbXVsdGljYXN0X3BvcnRfY3R4X3ZsYW5fZGlzYWJsZWRgIGlzIHRydWUuLi4gSSBuZWVkIHRvIGNoZWNrIHRoZSBjYWxsIG9mIGBicl9tdWx0aWNhc3RfdG9nZ2xlX3BvcnRgIG1vcmUgY2xvc2VseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYyNTYsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzExLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTE6NTk6NTcuNzU0MDkxODk2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjM4MzY4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicl9tdWx0aWNhc3RfdG9nZ2xlX3BvcnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JyaWRnZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0yMTYzPXN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRfY3R4KHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0X3BvcnQgKnBtY3R4KVxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMTc3LVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MjE3ODpzdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwgYm9vbCBvbilcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIxNzkte1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0yMjE2PXZvaWQgYnJfbXVsdGljYXN0X2VuYWJsZV9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMjE3LXtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjIyMTg6XFx0YnJfbXVsdGljYXN0X3RvZ2dsZV9wb3J0KHBvcnQsIHRydWUpO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjIxOS19XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTIyMjE9dm9pZCBicl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMjIyLXtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjIyMjM6XFx0YnJfbXVsdGljYXN0X3RvZ2dsZV9wb3J0KHBvcnQsIGZhbHNlKTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIyMjQtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMTo1OTo1Ny44MDA0ODE3OTRaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA5MDU2NzcxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgY29kZS5cblxuKipBbmFseXppbmcgYGJyX211bHRpY2FzdF90b2dnbGVfcG9ydGAqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgcmlnaHQgaW50byBpdC4gVGhlIGZ1bmN0aW9uIG5hbWUsIGBicl9tdWx0aWNhc3RfdG9nZ2xlX3BvcnRgLCBpbW1lZGlhdGVseSB0ZWxscyBtZSBpdCdzIGRlYWxpbmcgd2l0aCBtdWx0aWNhc3QgdHJhZmZpYyBvbiBhIGJyaWRnZSwgc3BlY2lmaWNhbGx5IHRvZ2dsaW5nIGEgcG9ydCdzIHBhcnRpY2lwYXRpb24uIEkgd2FudCB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyBqb2luaW5nIGFuZCBsZWF2aW5nIG11bHRpY2FzdCBncm91cHMsIHByb2JhYmx5IGludGVyYWN0aW5nIHdpdGggdGhlIHVuZGVybHlpbmcgSUdNUC9NTEQgbG9naWMgb3Igc2ltaWxhci4gSSdtIGxvb2tpbmcgZm9yIHRoZSBjb3JlIGFjdGlvbnM6IGFyZSB3ZSBhZGRpbmcgb3IgZGVsZXRpbmcgdGhlIHBvcnQgZnJvbSBpbnRlcm5hbCBzdHJ1Y3R1cmVzPyBXaGF0IGZsYWdzIG9yIHN0YXRlIHZhcmlhYmxlcyBhcmUgYmVpbmcgbWFuaXB1bGF0ZWQ/IElzIHRoZXJlIGFueSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBoYXJkd2FyZSBmb3J3YXJkaW5nIHRhYmxlIGludm9sdmVkLCBhbmQgaWYgc28sIGhvdz8gSSBhbHNvIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcG90ZW50aWFsIGVycm9yIGhhbmRsaW5nIOKAkyBhcmUgdGhlcmUgY2hlY2tzIGZvciBpbnZhbGlkIHBvcnQgbnVtYmVycywgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMsIG9yIG90aGVyIGNvbW1vbiBpc3N1ZXM/IEZpbmFsbHksIEkgbmVlZCB0byBzZWUgdGhlIGNvbnRleHQgaW4gd2hpY2ggaXQncyBiZWluZyBjYWxsZWQsIHRvIHRydWx5IHVuZGVyc3RhbmQgdGhlIGJpZ2dlciBwaWN0dXJlIG9mIHRoaXMgZGVzaWduLiBJcyB0aGlzIGNhbGxlZCBhcyBhIGRpcmVjdCBBUEkgZW50cnlwb2ludCwgb3IgaXMgaXQgdHJpZ2dlcmVkIGJ5IHNvbWUgZXZlbnQsIHN1Y2ggYXMgYSB1c2VyLXNwYWNlIGNvbmZpZ3VyYXRpb24gY29tbWFuZCBvciBhIGhhcmR3YXJlIGNoYW5nZT8gSSdtIGV4cGVjdGluZyB0aGlzIHRvIGJlIGZhaXJseSBpbnZvbHZlZCwgZ2l2ZW4gdGhhdCBtdWx0aWNhc3Qgcm91dGluZyBhbmQgZm9yd2FyZGluZyBjYW4gYmUgY29tcGxleC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg2NDksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjowMDowMS44OTEwNTI2NTZaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA4MzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjE3OCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjE3ODpcXHRzdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwgYm9vbCBvbilcXG4yMTc5OlxcdHtcXG4yMTgwOlxcdCNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkcpXFxuMjE4MTpcXHRcXHRpZiAoYnJfb3B0X2dldChwb3J0LVxcdTAwM2ViciwgQlJPUFRfTUNBU1RfVkxBTl9TTk9PUElOR19FTkFCTEVEKSkge1xcbjIxODI6XFx0XFx0XFx0c3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmc7XFxuMjE4MzpcXHRcXHRcXHRzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuO1xcbjIxODQ6XFx0XFxuMjE4NTpcXHRcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuMjE4NjpcXHRcXHRcXHR2ZyA9IG5icF92bGFuX2dyb3VwX3JjdShwb3J0KTtcXG4yMTg3OlxcdFxcdFxcdGlmICghdmcpIHtcXG4yMTg4OlxcdFxcdFxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbjIxODk6XFx0XFx0XFx0XFx0cmV0dXJuO1xcbjIxOTA6XFx0XFx0XFx0fVxcbjIxOTE6XFx0XFxuMjE5MjpcXHRcXHRcXHQvKiBpdGVyYXRlIGVhY2ggdmxhbiwgdG9nZ2xlIHZsYW4gbXVsdGljYXN0IGNvbnRleHQgKi9cXG4yMTkzOlxcdFxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHZsYW4sIFxcdTAwMjZ2Zy1cXHUwMDNldmxhbl9saXN0LCB2bGlzdCkge1xcbjIxOTQ6XFx0XFx0XFx0XFx0c3RydWN0IG5ldF9icmlkZ2VfbWNhc3RfcG9ydCAqcG1jdHggPVxcbjIxOTU6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx1MDAyNnZsYW4tXFx1MDAzZXBvcnRfbWNhc3RfY3R4O1xcbjIxOTY6XFx0XFx0XFx0XFx0dTggc3RhdGUgPSBicl92bGFuX2dldF9zdGF0ZSh2bGFuKTtcXG4yMTk3OlxcdFxcdFxcdFxcdC8qIGVuYWJsZSB2bGFuIG11bHRpY2FzdCBjb250ZXh0IHdoZW4gc3RhdGUgaXNcXG4yMTk4OlxcdFxcdFxcdFxcdCAqIExFQVJOSU5HIG9yIEZPUldBUkRJTkdcXG4yMTk5OlxcdFxcdFxcdFxcdCAqL1xcbjIyMDA6XFx0XFx0XFx0XFx0aWYgKG9uIFxcdTAwMjZcXHUwMDI2IGJyX3ZsYW5fc3RhdGVfYWxsb3dlZChzdGF0ZSwgdHJ1ZSkpXFxuMjIwMTpcXHRcXHRcXHRcXHRcXHRicl9tdWx0aWNhc3RfZW5hYmxlX3BvcnRfY3R4KHBtY3R4KTtcXG4yMjAyOlxcdFxcdFxcdFxcdGVsc2VcXG4yMjAzOlxcdFxcdFxcdFxcdFxcdGJyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRfY3R4KHBtY3R4KTtcXG4yMjA0OlxcdFxcdFxcdH1cXG4yMjA1OlxcdFxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbjIyMDY6XFx0XFx0XFx0cmV0dXJuO1xcbjIyMDc6XFx0XFx0fVxcbjIyMDg6XFx0I2VuZGlmXFxuMjIwOTpcXHRcXHQvKiB0b2dnbGUgcG9ydCBtdWx0aWNhc3QgY29udGV4dCB3aGVuIHZsYW4gc25vb3BpbmcgaXMgZGlzYWJsZWQgKi9cXG4yMjEwOlxcdFxcdGlmIChvbilcXG4yMjExOlxcdFxcdFxcdGJyX211bHRpY2FzdF9lbmFibGVfcG9ydF9jdHgoXFx1MDAyNnBvcnQtXFx1MDAzZW11bHRpY2FzdF9jdHgpO1xcbjIyMTI6XFx0XFx0ZWxzZVxcbjIyMTM6XFx0XFx0XFx0YnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydF9jdHgoXFx1MDAyNnBvcnQtXFx1MDAzZW11bHRpY2FzdF9jdHgpO1xcbjIyMTQ6XFx0fVxcbjIyMTU6XFx0XFxuMjIxNjpcXHR2b2lkIGJyX211bHRpY2FzdF9lbmFibGVfcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0KVxcbjIyMTc6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjowMDowMS44OTEyNjI3NjZaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDcwNzgzNjcxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTXVsdGljYXN0IENvbnRyb2wgUGF0aHMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBmb3IgdGhlIHByaW1hcnkgY29udHJvbCBwYXRocyBmb3IgbWFuYWdpbmcgbXVsdGljYXN0IGJlaGF2aW9yIG9uIGJyaWRnZSBwb3J0cy4gVGhpbmtpbmcgdGhpcyB0aHJvdWdoLCBgYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydGAgc2VlbXMgbGlrZSBhIHNvbGlkIGVudHJ5IHBvaW50LCBhbmQgdGhhdCBtYWtlcyBzZW5zZSDigJMgaXQncyB0aGUgbmF0dXJhbCBwbGFjZSB0byBzdGFydCB3aGVuIGRpc2FibGluZy4gSSBhbHNvIG5lZWQgdG8gdGhpbmsgYWJvdXQgaG93IGVuYWJsaW5nIGludGVyYWN0cyB3aXRoIHRoaXMsIGFuZCBgYnJfbXVsdGljYXN0X2VuYWJsZV9wb3J0YCBjYXRjaGVzIG15IGF0dGVudGlvbiBiZWNhdXNlIGl0ICpjYW4qIGNhbGwgYGJyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRfY3R4YCBpZiBgb25gIGlzIHRydWUgYnV0IHRoZSBWTEFOIHN0YXRlIGlzbid0IHJpZ2h0LiBUaGF0J3MgY2xldmVyOyBoYW5kbGVzIHRoZSBjb25kaXRpb25hbCBkaXNhYmxlIG5pY2VseS5cblxuVGhlcmVmb3JlLCBzaW5jZSB0aGV5J3JlIHRpZ2h0bHkgY291cGxlZCBpbiB0aGF0IG1hbm5lciwgSSdsbCBwdXQgYm90aCBgYnJfbXVsdGljYXN0X2VuYWJsZV9wb3J0YCBhbmQgYGJyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRgIG9uIG15IGxpc3Qgb2YgcmVsZXZhbnQgZnVuY3Rpb25zLCBlc3BlY2lhbGx5IGJlY2F1c2Ugb25lIGxldmVyYWdlcyB0aGUgb3RoZXIuXG5cblRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUsIEkgc2hvdWxkIGFsc28gdmVyaWZ5IGhvdyB0b2dnbGluZyBWTEFOIHNub29waW5nIGltcGFjdHMgbXVsdGljYXN0IGNvbnRyb2wsIHNvIGxldCdzIHNoaWZ0IGdlYXJzIGFuZCBjaGVjayB0aGUgbG9naWMgd2l0aGluIGBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3BpbmdgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTYwNCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjAwOjA2LjU5OTEwMjcyOFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTMwMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MzgzLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0MzgzOlxcdGludCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3Bpbmcoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBib29sIG9uLFxcbjQzODQ6XFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbjQzODU6XFx0e1xcbjQzODY6XFx0XFx0c3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmc7XFxuNDM4NzpcXHRcXHRzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuO1xcbjQzODg6XFx0XFx0c3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcDtcXG40Mzg5OlxcdFxcbjQzOTA6XFx0XFx0aWYgKGJyX29wdF9nZXQoYnIsIEJST1BUX01DQVNUX1ZMQU5fU05PT1BJTkdfRU5BQkxFRCkgPT0gb24pXFxuNDM5MTpcXHRcXHRcXHRyZXR1cm4gMDtcXG40MzkyOlxcdFxcbjQzOTM6XFx0XFx0aWYgKG9uIFxcdTAwMjZcXHUwMDI2ICFicl9vcHRfZ2V0KGJyLCBCUk9QVF9WTEFOX0VOQUJMRUQpKSB7XFxuNDM5NDpcXHRcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcXFwiQ2Fubm90IGVuYWJsZSBtdWx0aWNhc3QgdmxhbiBzbm9vcGluZyB3aXRoIHZsYW4gZmlsdGVyaW5nIGRpc2FibGVkXFxcIik7XFxuNDM5NTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG40Mzk2OlxcdFxcdH1cXG40Mzk3OlxcdFxcbjQzOTg6XFx0XFx0dmcgPSBicl92bGFuX2dyb3VwKGJyKTtcXG40Mzk5OlxcdFxcdGlmICghdmcpXFxuNDQwMDpcXHRcXHRcXHRyZXR1cm4gMDtcXG40NDAxOlxcdFxcbjQ0MDI6XFx0XFx0YnJfb3B0X3RvZ2dsZShiciwgQlJPUFRfTUNBU1RfVkxBTl9TTk9PUElOR19FTkFCTEVELCBvbik7XFxuNDQwMzpcXHRcXG40NDA0OlxcdFxcdC8qIGRpc2FibGUvZW5hYmxlIG5vbi12bGFuIG1jYXN0IGNvbnRleHRzIGJhc2VkIG9uIHZsYW4gc25vb3BpbmcgKi9cXG40NDA1OlxcdFxcdGlmIChvbilcXG40NDA2OlxcdFxcdFxcdF9fYnJfbXVsdGljYXN0X3N0b3AoXFx1MDAyNmJyLVxcdTAwM2VtdWx0aWNhc3RfY3R4KTtcXG40NDA3OlxcdFxcdGVsc2VcXG40NDA4OlxcdFxcdFxcdF9fYnJfbXVsdGljYXN0X29wZW4oXFx1MDAyNmJyLVxcdTAwM2VtdWx0aWNhc3RfY3R4KTtcXG40NDA5OlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkocCwgXFx1MDAyNmJyLVxcdTAwM2Vwb3J0X2xpc3QsIGxpc3QpIHtcXG40NDEwOlxcdFxcdFxcdGlmIChvbilcXG40NDExOlxcdFxcdFxcdFxcdGJyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRfY3R4KFxcdTAwMjZwLVxcdTAwM2VtdWx0aWNhc3RfY3R4KTtcXG40NDEyOlxcdFxcdFxcdGVsc2VcXG40NDEzOlxcdFxcdFxcdFxcdGJyX211bHRpY2FzdF9lbmFibGVfcG9ydF9jdHgoXFx1MDAyNnAtXFx1MDAzZW11bHRpY2FzdF9jdHgpO1xcbjQ0MTQ6XFx0XFx0fVxcbjQ0MTU6XFx0XFxuNDQxNjpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHZsYW4sIFxcdTAwMjZ2Zy1cXHUwMDNldmxhbl9saXN0LCB2bGlzdClcXG40NDE3OlxcdFxcdFxcdGJyX211bHRpY2FzdF90b2dnbGVfdmxhbih2bGFuLCBvbik7XFxuNDQxODpcXHRcXG40NDE5OlxcdFxcdHJldHVybiAwO1xcbjQ0MjA6XFx0fVxcbjQ0MjE6XFx0XFxuNDQyMjpcXHRib29sIGJyX211bHRpY2FzdF90b2dnbGVfZ2xvYmFsX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6MDA6MDYuNTk5MzE3NDI4WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MzEzMzA2NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBhcyBpZiB0aGV5IHdlcmUgbXkgb3duIGltbWVkaWF0ZSBwcm9jZXNzaW5nOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudDogTXVsdGljYXN0IFNub29waW5nIFRvZ2dsZSBFbnRyeSBQb2ludCoqXG5cblJpZ2h0LCBgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nYCBzZWVtcyBsaWtlIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIGludmVzdGlnYXRpbmcgbXVsdGljYXN0IHNub29waW5nIGZ1bmN0aW9uYWxpdHkuIE15IGd1dCBmZWVsaW5nIGlzIHRoYXQgaXQncyBsaWtlbHkgdGhlIGtleSBmdW5jdGlvbiB0aGF0IHRpZXMgdG9nZXRoZXIgVkxBTi1zcGVjaWZpYyBzbm9vcGluZyBiZWhhdmlvci4gSSdtIGFzc3VtaW5nIGl0J3MgcHJvYmFibHkgdGhlIHRvcC1sZXZlbCBpbnRlcmZhY2UgZm9yIGVuYWJsaW5nIG9yIGRpc2FibGluZyBzbm9vcGluZyB3aXRoaW4gYSBWTEFOIGNvbnRleHQuIEl0J3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoZSBpbXBsZW1lbnRhdGlvbi5cblxuTm93LCBsZXQncyBkcmlsbCBkb3duIGludG8gYGJyX211bHRpY2FzdF90b2dnbGVgLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgZm91bmRhdGlvbmFsIGxvZ2ljIHRoYXQgYGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZ2AgbGlrZWx5IGNhbGxzIG9yIGRlcGVuZHMgb24uIFVuZGVyc3RhbmRpbmcgaG93IHRoZSBjb3JlIG11bHRpY2FzdCBjb250cm9sIHdvcmtzIGlzIGNyaXRpY2FsIGJlZm9yZSBJIHRyeSB0byB1bmRlcnN0YW5kIHRoZSBWTEFOIHNwZWNpZmljIGFkYXB0YXRpb25zLiBUaGlzIHdpbGwgc2V0IHRoZSBzdGFnZSB0byBzZWUgaG93IGl0IG1pZ2h0IGJlIGFkYXB0ZWQgb3IgZXh0ZW5kZWQgZm9yIFZMQU4gaW50ZWdyYXRpb24uIExldCdzIHNlZSB3aGF0IHRoYXQgbG93ZXIgbGV2ZWwgZnVuY3Rpb24gZG9lcy4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDY2OSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6MDA6MTAuMjMwNjUwODk0WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyOTI3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ2ODIsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQ2ODI6XFx0aW50IGJyX211bHRpY2FzdF90b2dnbGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1bnNpZ25lZCBsb25nIHZhbCxcXG40NjgzOlxcdFxcdFxcdFxcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG40Njg0OlxcdHtcXG40Njg1OlxcdFxcdGJvb2wgY2hhbmdlX3Nub29wZXJzID0gZmFsc2U7XFxuNDY4NjpcXHRcXHRpbnQgZXJyID0gMDtcXG40Njg3OlxcdFxcbjQ2ODg6XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZici1cXHUwMDNlbXVsdGljYXN0X2xvY2spO1xcbjQ2ODk6XFx0XFx0aWYgKCEhYnJfb3B0X2dldChiciwgQlJPUFRfTVVMVElDQVNUX0VOQUJMRUQpID09ICEhdmFsKVxcbjQ2OTA6XFx0XFx0XFx0Z290byB1bmxvY2s7XFxuNDY5MTpcXHRcXG40NjkyOlxcdFxcdGVyciA9IGJyX21jX2Rpc2FibGVkX3VwZGF0ZShici1cXHUwMDNlZGV2LCB2YWwsIGV4dGFjayk7XFxuNDY5MzpcXHRcXHRpZiAoZXJyID09IC1FT1BOT1RTVVBQKVxcbjQ2OTQ6XFx0XFx0XFx0ZXJyID0gMDtcXG40Njk1OlxcdFxcdGlmIChlcnIpXFxuNDY5NjpcXHRcXHRcXHRnb3RvIHVubG9jaztcXG40Njk3OlxcdFxcbjQ2OTg6XFx0XFx0YnJfb3B0X3RvZ2dsZShiciwgQlJPUFRfTVVMVElDQVNUX0VOQUJMRUQsICEhdmFsKTtcXG40Njk5OlxcdFxcdGlmICghYnJfb3B0X2dldChiciwgQlJPUFRfTVVMVElDQVNUX0VOQUJMRUQpKSB7XFxuNDcwMDpcXHRcXHRcXHRjaGFuZ2Vfc25vb3BlcnMgPSB0cnVlO1xcbjQ3MDE6XFx0XFx0XFx0YnJfbXVsdGljYXN0X2Rpc2FibGVfYWxsX3BvcnRzKGJyKTtcXG40NzAyOlxcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbjQ3MDM6XFx0XFx0fVxcbjQ3MDQ6XFx0XFxuNDcwNTpcXHRcXHRpZiAoIW5ldGlmX3J1bm5pbmcoYnItXFx1MDAzZWRldikpXFxuNDcwNjpcXHRcXHRcXHRnb3RvIHVubG9jaztcXG40NzA3OlxcdFxcbjQ3MDg6XFx0XFx0YnJfbXVsdGljYXN0X29wZW4oYnIpO1xcbjQ3MDk6XFx0XFx0YnJfbXVsdGljYXN0X2VuYWJsZV9hbGxfcG9ydHMoYnIpO1xcbjQ3MTA6XFx0XFxuNDcxMTpcXHRcXHRjaGFuZ2Vfc25vb3BlcnMgPSB0cnVlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjowMDoxMC4yMzA5ODE5MDRaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMwMDQxMjg2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb24sIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBNdWx0aWNhc3QgTWFuYWdlbWVudCBDb2RlKipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCBtdWx0aWNhc3QgY29udHJvbCB3aXRoaW4gdGhlIGJyaWRnaW5nIGNvbXBvbmVudCwgYW5kIGBicl9tdWx0aWNhc3RfdG9nZ2xlYCBzZWVtcyBsaWtlIGEgbG9naWNhbCBpbml0aWFsIGVudHJ5IHBvaW50IHRvIGludmVzdGlnYXRlLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB3aGF0IHRoZSBwcmVjb25kaXRpb25zIGFyZSBmb3IgYmVpbmcgY2FsbGVkLCBidXQgaXQgY2VydGFpbmx5IG9mZmVycyBhIHRvcC1sZXZlbCB2aWV3LlxuXG5JJ20gc3BlY2lmaWNhbGx5IGludGVyZXN0ZWQgaW4gaG93IHBvcnRzIGFyZSBhZGRlZCBhbmQgcmVtb3ZlZCBmcm9tIHRoZSBtdWx0aWNhc3QgZ3JvdXAgbWVtYmVyc2hpcC4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIGBicl9tdWx0aWNhc3RfZGVsX3BvcnRgLiBJdCdzIGxpa2VseSB0aGF0IGEgY29tcGxlbWVudCB0byB0aGUgXCJ0b2dnbGVcIiBvcGVyYXRpb24gaW52b2x2ZXMgc3BlY2lmaWNhbGx5IHJlbW92aW5nIGEgcG9ydCwgb3IgYSByYW5nZSBvZiBwb3J0cywgZnJvbSB0aGUgZm9yd2FyZGluZyBzdGF0ZSBmb3IgbXVsdGljYXN0IHRyYWZmaWMuIExldCdzIGRlbHZlIGluIGFuZCBzZWUgdGhlIGNvbnRyb2wgZmxvdy4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTQzMSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6MDA6MTMuNTMxMzk2NzkxWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1OTAxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwNjQsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIwNjQ6XFx0dm9pZCBicl9tdWx0aWNhc3RfZGVsX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydClcXG4yMDY1OlxcdHtcXG4yMDY2OlxcdFxcdHN0cnVjdCBuZXRfYnJpZGdlICpiciA9IHBvcnQtXFx1MDAzZWJyO1xcbjIwNjc6XFx0XFx0c3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cCAqcGc7XFxuMjA2ODpcXHRcXG4yMDY5OlxcdFxcdC8qIFRha2UgY2FyZSBvZiB0aGUgcmVtYWluaW5nIGdyb3Vwcywgb25seSBwZXJtIG9uZXMgc2hvdWxkIGJlIGxlZnQuXFxuMjA3MDpcXHRcXHQgKiBEZWxldGluZyBvbmUgY2FuIGRlbGV0ZSBvdGhlcnMgb24gdGhpcyBzYW1lIHBvcnQtXFx1MDAzZW1nbGlzdCwgc29cXG4yMDcxOlxcdFxcdCAqIGFsd2F5cyByZXN0YXJ0IGZyb20gdGhlIGhlYWQuXFxuMjA3MjpcXHRcXHQgKi9cXG4yMDczOlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2YnItXFx1MDAzZW11bHRpY2FzdF9sb2NrKTtcXG4yMDc0OlxcdFxcdHdoaWxlICghaGxpc3RfZW1wdHkoXFx1MDAyNnBvcnQtXFx1MDAzZW1nbGlzdCkpIHtcXG4yMDc1OlxcdFxcdFxcdHBnID0gaGxpc3RfZW50cnkocG9ydC1cXHUwMDNlbWdsaXN0LmZpcnN0LFxcbjIwNzY6XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAsIG1nbGlzdCk7XFxuMjA3NzpcXHRcXHRcXHRicl9tdWx0aWNhc3RfZmluZF9kZWxfcGcoYnIsIHBnKTtcXG4yMDc4OlxcdFxcdH1cXG4yMDc5OlxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZici1cXHUwMDNlbXVsdGljYXN0X2xvY2spO1xcbjIwODA6XFx0XFx0Zmx1c2hfd29yayhcXHUwMDI2YnItXFx1MDAzZW1jYXN0X2djX3dvcmspO1xcbjIwODE6XFx0XFx0YnJfbXVsdGljYXN0X3BvcnRfY3R4X2RlaW5pdChcXHUwMDI2cG9ydC1cXHUwMDNlbXVsdGljYXN0X2N0eCk7XFxuMjA4MjpcXHRcXHRmcmVlX3BlcmNwdShwb3J0LVxcdTAwM2VtY2FzdF9zdGF0cyk7XFxuMjA4MzpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjAwOjEzLjUzMTg1Nzk5MVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODg1OTUwMTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlZmluaW5nIHRoZSBTY29wZSBmb3IgVGhpcyBNdWx0aWNhc3QgSW52ZXN0aWdhdGlvbioqXG5cbk9rYXksIHNvIEknbSBzdGFydGluZyB3aXRoIGBicl9tdWx0aWNhc3RfZGVsX3BvcnRgIGFzIG15IG1haW4gcG9pbnQgb2YgZW50cnksIHRoYXQgc2VlbXMgbGlrZSBhIGdvb2QgcGxhY2UgdG8gYmVnaW4gZGlzc2VjdGluZyB0aGlzLiBNeSBpbml0aWFsIEZvY3VzU3ltYm9scyBhcmU6IGBicl9tdWx0aWNhc3RfZGVsX3BvcnRgLCBgYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydGAsIGBicl9tdWx0aWNhc3RfdG9nZ2xlYCwgYGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZ2AsIGFuZCBgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbmAuIEhvbGQgb24sIEkgbmVlZCB0byByZW1lbWJlciB0aGF0IGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYCBpcyBjYWxsZWQgaW50ZXJuYWxseSBieSBgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nYCBhbmQgYWxzbyBgYnJfbXVsdGljYXN0X3RvZ2dsZV9nbG9iYWxfdmxhbmAsIHNvIEkgbmVlZCB0byBpbmNsdWRlIGl0IGluIG15IG1lbnRhbCBtb2RlbC5cblxuTm93LCBsZXQncyBzZWUgaWYgdGhlIHBhdGNoIGlzIHRvdWNoaW5nIGFueXRoaW5nIGJleW9uZCB0aGUgb2J2aW91cy4gSSdtIGNoZWNraW5nIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgZnVuY3Rpb25zIHRoYXQgaW50ZXJhY3Qgd2l0aCBgYnJfbXVsdGljYXN0X2ZpbmRfZGVsX3BnYCBvciBtb2RpZnkgYG1nbGlzdGAuIEZyb20gd2hhdCBJIGNhbiB0ZWxsIHRoZSBwYXRjaCByZWFsbHkgb25seSBpbnRlcmFjdHMgd2l0aCBgYnJfbXVsdGljYXN0X2RlbF9wb3J0YCBhbmQgYF9fYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydF9jdHhgLiBTbyB0aGUgY3VycmVudCBzZXQgb2YgRm9jdXNTeW1ib2xzIHNob3VsZCBiZSBhZGVxdWF0ZS5cblxuV2FpdCwgSSBzaG91bGQgZG91YmxlIGNoZWNrIHRoYXQgYGJyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRgIGlzIHRoZSAqb25seSogY2FsbGVyIG9mIGBicl9tdWx0aWNhc3RfdG9nZ2xlX3BvcnRgLiBObywgYGJyX211bHRpY2FzdF9lbmFibGVfcG9ydGAgYWxzbyBjYWxscyBgYnJfbXVsdGljYXN0X3RvZ2dsZV9wb3J0YC4gT2theSwgcmlnaHQsIEkgbmVlZCB0byBpbmNsdWRlIHRoYXQgb25lIHRvby4gU28gbXkgZmluYWwsIHJldmlzZWQgRm9jdXNTeW1ib2xzIGFyZTogYGJyX211bHRpY2FzdF9kZWxfcG9ydGAsIGBicl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0YCwgYGJyX211bHRpY2FzdF9lbmFibGVfcG9ydGAsIGBicl9tdWx0aWNhc3RfdG9nZ2xlYCwgYGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZ2AsIGFuZCBgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbmAuIE5vdyBJJ2xsIGp1c3QgY29uZmlybSBpZiBgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbmAgaXMgc3RhdGljLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjAyNSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjAwOjIwLjQxNzgxMTU4NVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY3NDI2OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9icmlkZ2UvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9NDI5Mj12b2lkIGJyX211bHRpY2FzdF91cGRhdGVfdmxhbl9tY2FzdF9jdHgoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdiwgdTggc3RhdGUpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzMTctXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0MzE4OnZvaWQgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCBib29sIG9uKVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDMxOS17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xMDY5PXZvaWQgYnJfbXVsdGljYXN0X3VwZGF0ZV92bGFuX21jYXN0X2N0eChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LCB1OCBzdGF0ZSk7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTA3MDp2b2lkIGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbik7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTA3MS1pbnQgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgYm9vbCBvbixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTE1NDY9c3RhdGljIGlubGluZSB2b2lkIGJyX211bHRpY2FzdF91cGRhdGVfdmxhbl9tY2FzdF9jdHgoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE1NTAtXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTU1MTpzdGF0aWMgaW5saW5lIHZvaWQgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLFxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE1NTItXFx0XFx0XFx0XFx0XFx0XFx0Ym9vbCBvbilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6MDA6MjAuNDY0NTYyMDEzWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NDgzMzE2NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBleHByZXNzZWQgYXMgdGhvdWdoIHRoZXNlIHdlcmUgbXkgb3duIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyB0aGUgVmFyaWFibGUncyBNdXRhYmlsaXR5KipcblxuUmlnaHQsIHNvIHRoZSBjb250ZXh0IGluZGljYXRlcyB3ZSdyZSBkZWFsaW5nIHdpdGggc29tZXRoaW5nIHRoYXQgaXNuJ3Qgc3RhdGljLiBHb29kLCB0aGF04oCZcyBhIGNsZWFyIHN0YXJ0aW5nIHBvaW50LiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBwaW5wb2ludCBhIHNwZWNpZmljIHZhcmlhYmxlIHRoYXQncyBwb3RlbnRpYWxseSAqbm90KiBzdGF0aWMsIG5hbWVseSBgYnJfbXVsdGljYXN0X3RvZ2dsZV9nbG9iYWxfdmxhbmAuIFRoZSBhaW0gaXMgdG8gY29uZmlybSB3aGV0aGVyIG15IGluaXRpYWwgdW5kZXJzdGFuZGluZyBvZiBpdHMgbXV0YWJpbGl0eSBob2xkcyB0cnVlLiBUaGlzIGlzIHdoZXJlIEknbGwgZGlnIGRlZXBlci4gSSBuZWVkIHRvIGtub3cgZm9yIHN1cmUgaWYgaXTigJlzIHN1YmplY3QgdG8gY2hhbmdlLiBBIHF1aWNrIGNoZWNrIG9mIGl0cyBkZWNsYXJhdGlvbiBhbmQgdXNhZ2Ugc2hvdWxkIGNvbmZpcm0gdGhhdC4gSXTigJlzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgbGlmZXRpbWUgb2YgdGhpcyB2YXJpYWJsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMzMDYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjowMDoyMy45MTI4OTY4NTVaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MzMyOTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJvb2wgYnJfbXVsdGljYXN0X3RvZ2dsZV9nbG9iYWxfdmxhblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYnJpZGdlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQzODM9aW50IGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIGJvb2wgb24sXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MjEtXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0NDIyOmJvb2wgYnJfbXVsdGljYXN0X3RvZ2dsZV9nbG9iYWxfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCBib29sIG9uKVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQyMy17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xMDcxPWludCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3Bpbmcoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBib29sIG9uLFxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTEwNzItXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxMDczOmJvb2wgYnJfbXVsdGljYXN0X3RvZ2dsZV9nbG9iYWxfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCBib29sIG9uKTtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xMDc0LVxcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTU1Nj1zdGF0aWMgaW5saW5lIGludCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3Bpbmcoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTU2Mi1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxNTYzOnN0YXRpYyBpbmxpbmUgYm9vbCBicl9tdWx0aWNhc3RfdG9nZ2xlX2dsb2JhbF92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTU2NC1cXHRcXHRcXHRcXHRcXHRcXHQgICBib29sIG9uKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjowMDoyMy45NTkyMzQ0MzNaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ3OTIzNzg5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBWYXJpYWJsZSdzIE11dGFiaWxpdHkqKlxuXG5SaWdodCwgc28gd2UncmUgZGVhbGluZyB3aXRoIHNvbWV0aGluZyBwb3RlbnRpYWxseSBkeW5hbWljIGhlcmUuIExldCdzIGRpZyBkZWVwZXIgYW5kIHZlcmlmeSB3aGV0aGVyIGBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3BpbmdgIGlzLCBpbiBmYWN0LCBzdGF0aWMuIFRoaXMgaXMgdGhlIGNyaXRpY2FsIHBpZWNlIG9mIGluZm9ybWF0aW9uLiBUaGUgcG90ZW50aWFsIGZvciB0aGUgdmFyaWFibGUgdG8gY2hhbmdlIGR5bmFtaWNhbGx5IGluZmx1ZW5jZXMgaG93IHRoZSBjb2RlIHdpbGwgYmVoYXZlLCBlc3BlY2lhbGx5IHdoZXJlIHRoaXMgdmFyaWFibGUgaXMgdXNlZC4gV2UgbmVlZCB0byBhc2NlcnRhaW4gdGhlIG11dGFiaWxpdHkgdG8gYXNzZXNzIGFueSBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzIG9yIHJhY2UgY29uZGl0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM5MTcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjowMDoyOC40Mzg0NzUxMDNaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NjczNTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImludCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3BpbmdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JyaWRnZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00MzYzPXN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF90b2dnbGVfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCBib29sIG9uKVxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzgyLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDM4MzppbnQgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgYm9vbCBvbixcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzODQtXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTA3MD12b2lkIGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbik7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTA3MTppbnQgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgYm9vbCBvbixcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xMDcyLVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xNTUxPXN0YXRpYyBpbmxpbmUgdm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNTU1LVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE1NTY6c3RhdGljIGlubGluZSBpbnQgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nKHN0cnVjdCBuZXRfYnJpZGdlICpicixcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNTU3LVxcdFxcdFxcdFxcdFxcdFxcdCAgICBib29sIG9uLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjowMDoyOC40ODYxNTM2MDJaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIzMjc4NzI5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQXNzZXNzaW5nIHRoZSBEeW5hbWljIE5hdHVyZSBvZiB0aGUgU2l0dWF0aW9uKipcblxuQWxyaWdodCwgdGhlIGluaXRpYWwgYXNzZXNzbWVudCBpcyBpbjogdGhlIHNpdHVhdGlvbiBpcyBkZWZpbml0aXZlbHkgKm5vdCogc3RhdGljLiBXZSdyZSBkZWFsaW5nIHdpdGggc29tZXRoaW5nIHRoYXQgY2hhbmdlcywgdGhhdCBoYXMgYSBkeW5hbWljIGVsZW1lbnQuIE5vdywgZ2l2ZW4gdGhhdCB0aGlzIGlzIHRoZSBjYXNlLCB0aGUgY3J1Y2lhbCBuZXh0IHN0ZXAgaXMgdG8gbmFpbCBkb3duIHRoZSBzcGVjaWZpY3Mgb2YgdGhpcyBkeW5hbWlzbS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIG5hdHVyZSBvZiBgYnJfbXVsdGljYXN0X3RvZ2dsZWAuIElzIHRoYXQgdmFyaWFibGUgb3IgZnVuY3Rpb24gc3RhdGljPyBJdHMgc2NvcGUgYW5kIGJlaGF2aW91ciBhcmUgb2J2aW91c2x5IGNlbnRyYWwgdG8gdGhlIHByb2JsZW0uIFRoZSBxdWVzdGlvbiBvZiB3aGV0aGVyIGl0J3Mgc3RhdGljIHdpbGwgZ3VpZGUgbXkgZnVydGhlciBpbnZlc3RpZ2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDQ5MCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjAwOjMxLjcxODk0NDMyWiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjA0NTYzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgYnJfbXVsdGljYXN0X3RvZ2dsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYnJpZGdlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQzNjM9c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzODItXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0MzgzOmludCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3Bpbmcoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBib29sIG9uLFxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDM4NC1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQ2NzE9c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X2Rpc2FibGVfYWxsX3BvcnRzKHN0cnVjdCBuZXRfYnJpZGdlICpicilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDY4MS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQ2ODI6aW50IGJyX211bHRpY2FzdF90b2dnbGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1bnNpZ25lZCBsb25nIHZhbCxcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ2ODMtXFx0XFx0XFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9OTkyPWludCBicl9tdWx0aWNhc3Rfc2V0X3ZsYW5fcm91dGVyKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYsIHU4IG1jYXN0X3JvdXRlcik7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6OTkzOmludCBicl9tdWx0aWNhc3RfdG9nZ2xlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgdW5zaWduZWQgbG9uZyB2YWwsXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtOTk0LVxcdFxcdFxcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xMDcwPXZvaWQgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCBib29sIG9uKTtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxMDcxOmludCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3Bpbmcoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBib29sIG9uLFxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTEwNzItXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTE1NTE9c3RhdGljIGlubGluZSB2b2lkIGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE1NTUtXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTU1NjpzdGF0aWMgaW5saW5lIGludCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3Bpbmcoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE1NTctXFx0XFx0XFx0XFx0XFx0XFx0ICAgIGJvb2wgb24sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjAwOjMxLjc2NDk5NTE0OVoiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDQ5ODI0MjIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOlxuXG4qKkFzc2Vzc2luZyB0aGUgU3RhdGljIE5hdHVyZSBvZiBhIEZ1bmN0aW9uKipcblxuUmlnaHQsIHNvIHdlJ3JlIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgdGhhdCAqaXNuJ3QqIHN0YXRpYy4gR29vZCB0byBjb25maXJtIHRoYXQgdXBmcm9udDsgaXQgaGVscHMgYXZvaWQganVtcGluZyB0byBjb25jbHVzaW9ucyBsYXRlci4gTm93LCBsZXQncyB6ZXJvIGluIG9uIGEgc3BlY2lmaWMgZnVuY3Rpb246IGBicl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0YC4gVGhlIGNydWNpYWwgcXVlc3Rpb24gaXMsIGlzICp0aGlzKiBwYXJ0aWN1bGFyIGZ1bmN0aW9uIGRlY2xhcmVkIGFzIHN0YXRpYz8gS25vd2luZyBpdHMgc2NvcGUg4oCTIHdoZXRoZXIgaXQncyBsb2NhbCB0byBhIGNvbXBpbGF0aW9uIHVuaXQgb3IgZ2xvYmFsbHkgYWNjZXNzaWJsZSDigJMgaXMgZnVuZGFtZW50YWwgdG8gdW5kZXJzdGFuZGluZyBpdHMgYmVoYXZpb3IgYW5kIHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtLiBDaGVja2luZyBpdHMgc3RhdGljLW5lc3MgcmlnaHQgbm93IHdpbGwgc2F2ZSBhIGxvdCBvZiBkZWJ1Z2dpbmcgdGltZSBkb3duIHRoZSByb2FkIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTI5OCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjAwOjM1LjgxNDgyMjcxMloiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY5MzM1NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm9pZCBicl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9icmlkZ2UvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MjEyOD1zdGF0aWMgdm9pZCBfX2JyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRfY3R4KHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0X3BvcnQgKnBtY3R4KVxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMTYyLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MjE2MzpzdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0X2N0eChzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdF9wb3J0ICpwbWN0eClcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIxNjQte1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0yMjE2PXZvaWQgYnJfbXVsdGljYXN0X2VuYWJsZV9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIyMjAtXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoyMjIxOnZvaWQgYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0KVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjIyMi17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD05Nzg9dm9pZCBicl9tdWx0aWNhc3RfZW5hYmxlX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCk7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6OTc5OnZvaWQgYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0KTtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC05ODAtdm9pZCBicl9tdWx0aWNhc3RfaW5pdChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpO1xcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTQxMz1zdGF0aWMgaW5saW5lIHZvaWQgYnJfbXVsdGljYXN0X2VuYWJsZV9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNDE2LVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE0MTc6c3RhdGljIGlubGluZSB2b2lkIGJyX211bHRpY2FzdF9kaXNhYmxlX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydClcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNDE4LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6MDA6MzUuODYxNzYxMDdaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA4NTM0MzkwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJcyBJdCBTdGF0aWMsIFJlYWxseT8gQSBRdWljayBWZXJpZmljYXRpb24qKlxuXG5SaWdodCwgc28gdGhlIHN5c3RlbSBpcyBkZWZpbml0ZWx5IGJlaGF2aW5nIGR5bmFtaWNhbGx5LiBObyBzdXJwcmlzZXMgdGhlcmUuIEJ1dCBJJ20gZmVlbGluZyBhIG5pZ2dsaW5nIGNvbmNlcm4gYWJvdXQgYSBzcGVjaWZpYyB2YXJpYWJsZSB3aXRoaW4gdGhhdCBkeW5hbWljIHNldHVwLiBMZXQncyBub3QgbWFrZSBhc3N1bXB0aW9ucy4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiDigJMgYSBxdWljayBtZW50YWwgY2hlY2suIFRoZSBjb3JlIG9mIG15IGNvbmNlcm4/IEknbSB3b25kZXJpbmcgaWYgYGJyX211bHRpY2FzdF9lbmFibGVfcG9ydGAgaXMsIGJ5IHNvbWUgY2hhbmNlLCBpbmNvcnJlY3RseSBkZWZpbmVkIGFzIGEgc3RhdGljIHZhcmlhYmxlLiBUaGF0IHdvdWxkIHRocm93IGEgd3JlbmNoIGludG8gdGhlIHdob2xlIHByb2Nlc3MhIEJldHRlciB0byB2ZXJpZnksIGJlY2F1c2UgSSB3b3VsZCBleHBlY3QgaXQgdG8gYmUgbm9uLXN0YXRpYyBnaXZlbiB0aGUgYmVoYXZpb3IgSSdtIHNlZWluZywgYnV0IHlvdSBjYW4gbmV2ZXIgYmUgdG9vIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1OTY3LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6MDA6MzkuOTQ3MTA3NDgyWiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzg2MzExOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2b2lkIGJyX211bHRpY2FzdF9lbmFibGVfcG9ydFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYnJpZGdlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTIwOTQ9c3RhdGljIHZvaWQgX19icl9tdWx0aWNhc3RfZW5hYmxlX3BvcnRfY3R4KHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0X3BvcnQgKnBtY3R4KVxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMTEzLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MjExNDpzdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfZW5hYmxlX3BvcnRfY3R4KHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0X3BvcnQgKnBtY3R4KVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjExNS17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTIxNzg9c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X3RvZ2dsZV9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsIGJvb2wgb24pXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIyMTUtXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoyMjE2OnZvaWQgYnJfbXVsdGljYXN0X2VuYWJsZV9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMjE3LXtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTk3Nz12b2lkIGJyX211bHRpY2FzdF9kZWxfcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0KTtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDo5Nzg6dm9pZCBicl9tdWx0aWNhc3RfZW5hYmxlX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCk7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtOTc5LXZvaWQgYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0KTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTE0MDk9c3RhdGljIGlubGluZSB2b2lkIGJyX211bHRpY2FzdF9kZWxfcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0KVxcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTQxMi1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxNDEzOnN0YXRpYyBpbmxpbmUgdm9pZCBicl9tdWx0aWNhc3RfZW5hYmxlX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydClcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNDE0LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6MDA6MzkuOTk0OTc0NjNaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzAwMjkwOTY4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjcmFmdGVkIHdpdGggdGhlIGV4cGVjdGF0aW9uIHRoYXQgSSdtIGRpc2N1c3NpbmcgdGhpcyB3aXRoIGEgZmVsbG93IGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBTdGF0aWMgTmF0dXJlIG9mIGBicl9tdWx0aWNhc3RfZGVsX3BvcnRgKipcblxuQWxyaWdodCwgSSBzZWUgaXQncyBkZWFsaW5nIHdpdGggc29tZXRoaW5nIGluaGVyZW50bHkgZHluYW1pYy4gTGV0J3MgbWFrZSBhYnNvbHV0ZWx5IHN1cmUgYWJvdXQgdGhpczsgSSB3YW50IHRvIGNvbmZpcm0gd2hldGhlciBgYnJfbXVsdGljYXN0X2RlbF9wb3J0YCBoYXMgYSBzdGF0aWMgZGVjbGFyYXRpb24uIFdlIG5lZWQgdG8ga25vdyBpZiBpdCdzIHN0YXRpYyBvciBpZiB3ZSBuZWVkIHRvIGFjY291bnQgZm9yIHBvc3NpYmxlIG1vZGlmaWNhdGlvbnMuIFRoaXMgaGFzIGltcGxpY2F0aW9ucyBmb3IgaG93IHdlIGludGVyYWN0IHdpdGggaXQgZG93biB0aGUgbGluZS4gV2UgbmVlZCB0byBjb25zaWRlciBob3cgdGhpcyBmdW5jdGlvbidzIGNoYXJhY3RlcmlzdGljcyBtaWdodCBpbmZsdWVuY2Ugb3VyIGltcGxlbWVudGF0aW9uLiBTbywgbGV04oCZcyBnZXQgYSBkZWZpbml0aXZlIGFuc3dlciBvbiB0aGF0IHN0YXRpYyBrZXl3b3JkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjY1MiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjAwOjQyLjk5Nzg4NjgyNloiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU3Mzg0MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm9pZCBicl9tdWx0aWNhc3RfZGVsX3BvcnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JyaWRnZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0xMzk4PXN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAgKmJyX211bHRpY2FzdF9uZXdfcG9ydF9ncm91cChcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMTQ1Ni1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjE0NTc6dm9pZCBicl9tdWx0aWNhc3RfZGVsX3BvcnRfZ3JvdXAoc3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cCAqcClcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTE0NTgte1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0yMDQzPWludCBicl9tdWx0aWNhc3RfYWRkX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydClcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjA2My1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjIwNjQ6dm9pZCBicl9tdWx0aWNhc3RfZGVsX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydClcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIwNjUte1xcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9OTc2PWludCBicl9tdWx0aWNhc3RfYWRkX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCk7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6OTc3OnZvaWQgYnJfbXVsdGljYXN0X2RlbF9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpO1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTk3OC12b2lkIGJyX211bHRpY2FzdF9lbmFibGVfcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0KTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTEwMDc9YnJfbXVsdGljYXN0X25ld19wb3J0X2dyb3VwKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xMDEyLVxcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjEwMTM6dm9pZCBicl9tdWx0aWNhc3RfZGVsX3BvcnRfZ3JvdXAoc3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cCAqcCk7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTAxNC1pbnQgYnJfbWRiX2hhc2hfaW5pdChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpO1xcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTQwND1zdGF0aWMgaW5saW5lIGludCBicl9tdWx0aWNhc3RfYWRkX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydClcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE0MDgtXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTQwOTpzdGF0aWMgaW5saW5lIHZvaWQgYnJfbXVsdGljYXN0X2RlbF9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTQxMC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjAwOjQzLjA0MzYyOTgzNVoiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODE5MDMyNDQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFByb3Bvc2VkIENvZGUgQ2hhbmdlKipcblxuT2theSwgc28gSSBzZWUgdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIHNvbWV0aGluZyBpbiB0aGUgYnJpZGdlIG11bHRpY2FzdCBwb3J0IGRlbGV0aW9uIGFuZCBkaXNhYmxpbmcgcm91dGluZXMuIEl0J3MgZGVmaW5pdGVseSBub24tc3RhdGljOyB3ZSdyZSBkZWFsaW5nIHdpdGggZHluYW1pYyBkYXRhIHN0cnVjdHVyZXMgaGVyZS4gVGhlIGNvcmUgb2YgdGhlIHByb2JsZW0gc2VlbXMgdG8gYmUgYW4gaW1wcm9wZXIgdXNlIG9mIGBobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlYCBpbiBjb25qdW5jdGlvbiB3aXRoIGBicl9tdWx0aWNhc3RfZmluZF9kZWxfcGdgLCBsZWFkaW5nIHRvIHBvdGVudGlhbCBpc3N1ZXMgd2hlcmUgbXVsdGlwbGUgZW50cmllcyBtaWdodCBiZSByZW1vdmVkIHdpdGhpbiBhIHNpbmdsZSBsb29wIGl0ZXJhdGlvbi4gVGhpcyBjb3VsZCByZXN1bHQgaW4gbWlzc2VkIGVudHJpZXMgb3IsIHdvcnNlLCB1c2UtYWZ0ZXItZnJlZSBzaXR1YXRpb25zLiBBIGNsYXNzaWMgY29uY3VycmVuY3kgYnVnIGlmIHlvdSBkb24ndCBoYW5kbGUgaXQgcmlnaHQuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBtYWtlIHN1cmUgdGhpcyBpcyB0aG9yb3VnaGx5IHRlc3RlZC4gVGhlIGxpc3Qgb2YgcmVsZXZhbnQgYEZvY3VzU3ltYm9sc2AgdGhleSd2ZSBpZGVudGlmaWVkIOKAkyBgYnJfbXVsdGljYXN0X2RlbF9wb3J0YCwgYGJyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRgLCBldGMuIOKAkyBzZWVtcyBhcHByb3ByaWF0ZSwgYXMgZG8gdGhlIGBFbmFibGVDb25maWdzYDogYEJSSURHRWAsIGBJTkVUYCwgYEJSSURHRV9JR01QX1NOT09QSU5HYCwgYFZMQU5fODAyMVFgLCBhbmQgYEJSSURHRV9WTEFOX0ZJTFRFUklOR2AuIFRoZXNlIGNvdmVyIHRoZSBrZXkgYXJlYXMgd2hlcmUgdGhlIGlzc3VlIGlzIGxpa2VseSB0byBtYW5pZmVzdC5cblxuR2l2ZW4gdGhhdCB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgYnJpZGdlIG11bHRpY2FzdCBsb2dpYyBhbmQgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluayBhbmQgc3lzZnMsIGl0J3MgYWJzb2x1dGVseSBjcnVjaWFsIHdlIGZ1enogaXQuIEknZCBjb25zaWRlciBpdCBhIGhpZ2ggcHJpb3JpdHksIHRvIGJlIGhvbmVzdC4gVGhlIGltcGFjdCBjb3VsZCBiZSBzaWduaWZpY2FudCBpZiBtdWx0aWNhc3QgaXMgYnJva2VuIGluIHRoZSBicmlkZ2UuIExldCdzIG1ha2Ugc3VyZSBvdXIgZnV6emluZyBhbmQgdGVzdGluZyBpbmZyYXN0cnVjdHVyZSBpcyBzZXQgdXAgdG8gYWRkcmVzcyB0aGlzIGNoYW5nZSBwcm9tcHRseS4gSSdsbCBuZWVkIHRvIGNhbGwgdG8gc2V0LXJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NDUxLCJPdXRwdXRUb2tlbnMiOjIzMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjowMDo0OS44NjI2NjQ3MzFaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDgyMjQyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlJJREdFXCIsXG4gICAgXCJJTkVUXCIsXG4gICAgXCJCUklER0VfSUdNUF9TTk9PUElOR1wiLFxuICAgIFwiVkxBTl84MDIxUVwiLFxuICAgIFwiQlJJREdFX1ZMQU5fRklMVEVSSU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnJfbXVsdGljYXN0X2RlbF9wb3J0XCIsXG4gICAgXCJicl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0XCIsXG4gICAgXCJicl9tdWx0aWNhc3RfZW5hYmxlX3BvcnRcIixcbiAgICBcImJyX211bHRpY2FzdF90b2dnbGVcIixcbiAgICBcImJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZ1wiLFxuICAgIFwiYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGJyaWRnZSBtdWx0aWNhc3QgcG9ydCBkZWxldGlvbiBhbmQgZGlzYWJsaW5nIGxvZ2ljIHdoZXJlIGBobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlYCB3YXMgdXNlZCBpbmNvcnJlY3RseS4gYGJyX211bHRpY2FzdF9maW5kX2RlbF9wZ2AgY2FuIGRlbGV0ZSBtdWx0aXBsZSBlbnRyaWVzIGZyb20gdGhlIHNhbWUgbGlzdCwgbGVhZGluZyB0byBtaXNzZWQgZW50cmllcyBvciB1c2UtYWZ0ZXItZnJlZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgYnJpZGdlIG11bHRpY2FzdCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluayBhbmQgc3lzZnMsIGFuZCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJSSURHRVwiLFxuICAgIFwiSU5FVFwiLFxuICAgIFwiQlJJREdFX0lHTVBfU05PT1BJTkdcIixcbiAgICBcIlZMQU5fODAyMVFcIixcbiAgICBcIkJSSURHRV9WTEFOX0ZJTFRFUklOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJyX211bHRpY2FzdF9kZWxfcG9ydFwiLFxuICAgIFwiYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydFwiLFxuICAgIFwiYnJfbXVsdGljYXN0X2VuYWJsZV9wb3J0XCIsXG4gICAgXCJicl9tdWx0aWNhc3RfdG9nZ2xlXCIsXG4gICAgXCJicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3BpbmdcIixcbiAgICBcImJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBicmlkZ2UgbXVsdGljYXN0IHBvcnQgZGVsZXRpb24gYW5kIGRpc2FibGluZyBsb2dpYyB3aGVyZSBgaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZWAgd2FzIHVzZWQgaW5jb3JyZWN0bHkuIGBicl9tdWx0aWNhc3RfZmluZF9kZWxfcGdgIGNhbiBkZWxldGUgbXVsdGlwbGUgZW50cmllcyBmcm9tIHRoZSBzYW1lIGxpc3QsIGxlYWRpbmcgdG8gbWlzc2VkIGVudHJpZXMgb3IgdXNlLWFmdGVyLWZyZWUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGJyaWRnZSBtdWx0aWNhc3QgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmsgYW5kIHN5c2ZzLCBhbmQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6MDA6NDkuOTQzNDk1Mzk4WiIsIlNlcSI6NDksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDY1MjQ3MTU0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjAwOjQ5Ljk0NDEzMDg3OFoiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMDY1MTgzMDc2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgbGlzdCBpdGVyYXRpb24gYnVncyBpbiBgYnJfbXVsdGljYXN0X2RlbF9wb3J0YCBhbmQgYF9fYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydF9jdHhgIHdoZXJlIGBicl9tdWx0aWNhc3RfZmluZF9kZWxfcGdgIGNvdWxkIGRlbGV0ZSB0aGUgbmV4dCBjYWNoZWQgbm9kZSBpbiBgaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZWAsIGxlYWRpbmcgdG8gcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIGxpc3QgY29ycnVwdGlvbi4gVGhlc2UgdHlwZXMgb2YgbWVtb3J5IGNvcnJ1cHRpb24gYW5kIHVzZS1hZnRlci1mcmVlIGJ1Z3MgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcywgYWxsb2NhdGlvbnMsIG9yIGRhdGEgc2VudCB0byB1c2VyIHNwYWNlIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjNmM3NzJkMDkyNmJhODY5NzRjN2Q0NTg0Mjg1MjYwODkzODQwOTQyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTIgMTE6NTg6NTEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jIGIvbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuY1xuaW5kZXggMDBhYTliMjg3OWQ2ZS4uZTA3NzUwNTljYTBhOCAxMDA2NDRcbi0tLSBhL25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmNcbisrKyBiL25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmNcbkBAIC0yMDY1LDEyICsyMDY1LDE3IEBAIHZvaWQgYnJfbXVsdGljYXN0X2RlbF9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpXG4ge1xuIFx0c3RydWN0IG5ldF9icmlkZ2UgKmJyID0gcG9ydC1cdTAwM2VicjtcbiBcdHN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAgKnBnO1xuLVx0c3RydWN0IGhsaXN0X25vZGUgKm47XG4gXG4tXHQvKiBUYWtlIGNhcmUgb2YgdGhlIHJlbWFpbmluZyBncm91cHMsIG9ubHkgcGVybSBvbmVzIHNob3VsZCBiZSBsZWZ0ICovXG4rXHQvKiBUYWtlIGNhcmUgb2YgdGhlIHJlbWFpbmluZyBncm91cHMsIG9ubHkgcGVybSBvbmVzIHNob3VsZCBiZSBsZWZ0LlxuK1x0ICogRGVsZXRpbmcgb25lIGNhbiBkZWxldGUgb3RoZXJzIG9uIHRoaXMgc2FtZSBwb3J0LVx1MDAzZW1nbGlzdCwgc29cbitcdCAqIGFsd2F5cyByZXN0YXJ0IGZyb20gdGhlIGhlYWQuXG4rXHQgKi9cbiBcdHNwaW5fbG9ja19iaChcdTAwMjZici1cdTAwM2VtdWx0aWNhc3RfbG9jayk7XG4tXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBnLCBuLCBcdTAwMjZwb3J0LVx1MDAzZW1nbGlzdCwgbWdsaXN0KVxuK1x0d2hpbGUgKCFobGlzdF9lbXB0eShcdTAwMjZwb3J0LVx1MDAzZW1nbGlzdCkpIHtcbitcdFx0cGcgPSBobGlzdF9lbnRyeShwb3J0LVx1MDAzZW1nbGlzdC5maXJzdCxcbitcdFx0XHRcdCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwLCBtZ2xpc3QpO1xuIFx0XHRicl9tdWx0aWNhc3RfZmluZF9kZWxfcGcoYnIsIHBnKTtcbitcdH1cbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmJyLVx1MDAzZW11bHRpY2FzdF9sb2NrKTtcbiBcdGZsdXNoX3dvcmsoXHUwMDI2YnItXHUwMDNlbWNhc3RfZ2Nfd29yayk7XG4gXHRicl9tdWx0aWNhc3RfcG9ydF9jdHhfZGVpbml0KFx1MDAyNnBvcnQtXHUwMDNlbXVsdGljYXN0X2N0eCk7XG5AQCAtMjEyNiwxMSArMjEzMSwyMyBAQCBzdGF0aWMgdm9pZCBfX2JyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRfY3R4KHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0X3BvcnQgKnBtY3R4KVxuIFx0c3RydWN0IGhsaXN0X25vZGUgKm47XG4gXHRib29sIGRlbCA9IGZhbHNlO1xuIFxuLVx0aGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwZywgbiwgXHUwMDI2cG1jdHgtXHUwMDNlcG9ydC1cdTAwM2VtZ2xpc3QsIG1nbGlzdClcbi1cdFx0aWYgKCEocGctXHUwMDNlZmxhZ3MgXHUwMDI2IE1EQl9QR19GTEFHU19QRVJNQU5FTlQpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgKCFicl9tdWx0aWNhc3RfcG9ydF9jdHhfaXNfdmxhbihwbWN0eCkgfHxcbi1cdFx0ICAgICBwZy1cdTAwM2VrZXkuYWRkci52aWQgPT0gcG1jdHgtXHUwMDNldmxhbi1cdTAwM2V2aWQpKVxuLVx0XHRcdGJyX211bHRpY2FzdF9maW5kX2RlbF9wZyhwbWN0eC1cdTAwM2Vwb3J0LVx1MDAzZWJyLCBwZyk7XG4rXHQvKiBicl9tdWx0aWNhc3RfZmluZF9kZWxfcGcoKSBjYW4gZGVsZXRlIGZ1cnRoZXIgZW50cmllcyBvZiB0aGlzIHNhbWVcbitcdCAqIHBvcnQtXHUwMDNlbWdsaXN0LCBzbyB0aGUgbm9kZSBsYXRjaGVkIGluIEBuIG1heSBiZSB1bmxpbmtlZCBieSB0aGUgbG9vcFxuK1x0ICogYm9keS4gUG9ydCBncm91cHMgYXJlIG9ubHkgZnJlZWQgYnkgdGhlIEdDIHdvcmsgdW5kZXIgbXVsdGljYXN0X2xvY2ssXG4rXHQgKiBzbyBAbiBpcyBzdGlsbCB2YWxpZCBoZXJlOyBpZiBpdCBsZWZ0IHRoZSBsaXN0LCByZXN0YXJ0LlxuK1x0ICovXG4rcmVzdGFydDpcbitcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocGcsIG4sIFx1MDAyNnBtY3R4LVx1MDAzZXBvcnQtXHUwMDNlbWdsaXN0LCBtZ2xpc3QpIHtcbitcdFx0aWYgKChwZy1cdTAwM2VmbGFncyBcdTAwMjYgTURCX1BHX0ZMQUdTX1BFUk1BTkVOVCkgfHxcbitcdFx0ICAgIChicl9tdWx0aWNhc3RfcG9ydF9jdHhfaXNfdmxhbihwbWN0eCkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAgcGctXHUwMDNla2V5LmFkZHIudmlkICE9IHBtY3R4LVx1MDAzZXZsYW4tXHUwMDNldmlkKSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0YnJfbXVsdGljYXN0X2ZpbmRfZGVsX3BnKHBtY3R4LVx1MDAzZXBvcnQtXHUwMDNlYnIsIHBnKTtcbitcbitcdFx0aWYgKG4gXHUwMDI2XHUwMDI2IGhsaXN0X3VuaGFzaGVkKG4pKVxuK1x0XHRcdGdvdG8gcmVzdGFydDtcbitcdH1cbiBcbiBcdGRlbCB8PSBicl9pcDRfbXVsdGljYXN0X3Jwb3J0X2RlbChwbWN0eCk7XG4gXHR0aW1lcl9kZWxldGUoXHUwMDI2cG1jdHgtXHUwMDNlaXA0X21jX3JvdXRlcl90aW1lcik7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjowMDo0OS45NDQxMzIzNThaIiwiU2VxIjo1MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA2NTE4MDA1NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNdWx0aWNhc3QgQnJpZGdlIFBvcnQgR3JvdXAgRGVsZXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIHRoZSBtdWx0aWNhc3QgZ3JvdXAgZGVsZXRpb24gbG9naWMgaW4gdGhlIGJyaWRnZSBjb2RlLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBicl9tdWx0aWNhc3RfZGVsX3BvcnRgIGFuZCBgX19icl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0X2N0eGAgaW4gYG5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmNgLiBNeSBpbml0aWFsIHNjYW4gdGVsbHMgbWUgdGhleSdyZSBtb2RpZnlpbmcgaG93IGBwb3J0LVx1MDAzZW1nbGlzdGAgaXMgdHJhdmVyc2VkIHdoZW4gZGVsZXRpbmcgcG9ydCBncm91cHMuIFRoZSBvbGQgbWV0aG9kIHVzZXMgYGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVgIHdoaWNoIGNhY2hlcyB0aGUgKm5leHQqIG5vZGUgaW4gdGhlIGxpc3QuIFRoZSBpc3N1ZSBpcyB0aGF0IHRoZSBmdW5jdGlvbiBgYnJfbXVsdGljYXN0X2ZpbmRfZGVsX3BnYCBjYW4gYWN0dWFsbHkgcmVtb3ZlICptdWx0aXBsZSogZW50cmllcyBmcm9tIGBwb3J0LVx1MDAzZW1nbGlzdGAgYXQgb25jZS5cblxuSW4gdGhlIGZpcnN0IGNhc2UgKGBicl9tdWx0aWNhc3RfZGVsX3BvcnRgKSwgdGhleSd2ZSByZXBsYWNlZCB0aGUgc2FmZSBpdGVyYXRvciB3aXRoIGEgYHdoaWxlYCBsb29wIHRoYXQgaXRlcmF0ZXMgdW50aWwgdGhlIGxpc3QgaXMgZW1wdHksIHBpY2tpbmcgdGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlIGxpc3QgYXQgZWFjaCBpdGVyYXRpb24uIFRoaXMgc2hvdWxkIHNvbHZlIHRoZSBwcm9ibGVtIGJlY2F1c2UgaWYgc29tZXRoaW5nIGlzIGRlbGV0ZWQsIHRoZSBuZXh0IGl0ZXJhdGlvbiBwaWNrcyBhIG5ldyBmaXJzdCBlbGVtZW50LCBhbmQgbm90IHRoZSBwcmV2aW91c2x5IGNhY2hlZCBuZXh0IGVsZW1lbnQgdGhhdCBjb3VsZCBoYXZlIGJlZW4gZGVsZXRlZC5cblxuSW4gdGhlIHNlY29uZCBjYXNlIChgX19icl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0X2N0eGApLCB0aGV5J3ZlIGNoYW5nZWQgdGhlIGV4aXN0aW5nIHNhZmUgaXRlcmF0aW9uIGxvb3Agd2l0aCB0aGUgYWRkaXRpb24gb2YgYSBgcmVzdGFydDpgIGFuZCBhIGBnb3RvIHJlc3RhcnQ7YC4gVGhpcyBhbHNvIHNvbHZlcyB0aGUgcHJvYmxlbSwgYnV0IGluIGEgZGlmZmVyZW50IHdheS4gSWYgYW4gZWxlbWVudCBnZXRzIGRlbGV0ZWQgZHVyaW5nIHRoZSBmaXJzdCBpdGVyYXRpb24gb2YgdGhlIHNhZmUgbG9vcCwgdGhlbiB0aGUgbmV4dCBub2RlIGBuYCBpcyB1bmhhc2hlZCwgYW5kIGluIHRoaXMgY2FzZSwgdGhlIGl0ZXJhdGlvbiAqcmVzdGFydHMqIHRoZSBsb29wIGZyb20gdGhlIGJlZ2lubmluZy4gSXQgYWxzbyBzaW1wbGlmaWVzIHRoZSBjb25kaXRpb25hbCB0aGF0IGNoZWNrcyBmb3IgcGVybWFuZW50IGZsYWdzLCBhbmQgdGhlIFZMQU4gSUQgY2hlY2suXG5cblRoZSBjb3JlIG9mIHRoZSBwcm9ibGVtIGhlcmUgaXMgYSBjbGFzc2ljIGxpc3QgaXRlcmF0aW9uIGJ1Zy4gQnkgZGVsZXRpbmcgZW50cmllcyAqZHVyaW5nKiBpdGVyYXRpb24gd2l0aCB0aGUgb2xkIG1ldGhvZCwgd2UgY2FuIGVuZCB1cCB3aXRoIGEgdXNlLWFmdGVyLWZyZWUsIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCBvciBzaW1wbHkgbWlzcyBkZWxldGlvbnMuIFRoZSBzYWZlIG1hY3JvIHdpbGwgY2FjaGUgdGhlIG5leHQgbm9kZSwgYnV0IGlmIHRoZSBjdXJyZW50IG5vZGUgYWxzbyBnZXRzIGRlbGV0ZWQsIHRoZSBjYWNoZWQgbmV4dCBub2RlIGlzIG5vIGxvbmdlciB2YWxpZC4gVGhlIG5ldyBhcHByb2FjaCBpcyBkZXNpZ25lZCB0byBwcmV2ZW50IHRoaXMgcmFjZSBjb25kaXRpb24uXG5cbk5vdywgYXMgYW4gZXhwZXJ0LCBJIG5lZWQgdG8gY29uc2lkZXIgc2VjdXJpdHkgaW1wbGljYXRpb25zLiBCYXNlZCBvbiB0aGlzIGFuYWx5c2lzLCBJJ20gY29uZmlkZW50IHRoaXMgaXMgKm5vdCogcmVsYXRlZCB0byBLTVNBTjsgdGhlIGNvZGUgZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIG9yIGZpZWxkcywgbm9yIGRvZXMgaXQgaGF2ZSBhbnkgYGNvcHlfdG9fdXNlcmAgb3IgYW55IG9mIHRoZSBvdGhlciBjb21tb24gS01TQU4gdHJpZ2dlcnMuIEtBU0FOIGlzIHRoZSByZWxldmFudCB0b29sIGhlcmUgdG8gY2F0Y2ggbGlzdCBjb3JydXB0aW9uIG9yIFVBRiwgYW5kIGl0IGlzIGxpa2VseSBlbmFibGVkIG9uIHRoZSBzeXN0ZW0uIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGFueSBtZW1vcnkgdGhhdCdzIG5vdCBpbml0aWFsaXplZCwgc28gSSBjYW4gc2FmZWx5IG1hcmsgYE5lZWRzS01TQU49ZmFsc2VgLiBJdCBsb29rcyBsaWtlIHRoaXMgcGF0Y2ggaXMgcHVyZWx5IGZvY3VzZWQgb24gZml4aW5nIGEgY29uY3VycmVuY3kvaXRlcmF0aW9uIGJ1Zy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY1OSwiT3V0cHV0VG9rZW5zIjoxNTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MDUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjowMTowMC41OTU5MzY5MDRaIiwiU2VxIjo1MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzE1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGxpc3QgaXRlcmF0aW9uIGJ1Z3MgaW4gYGJyX211bHRpY2FzdF9kZWxfcG9ydGAgYW5kIGBfX2JyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRfY3R4YCB3aGVyZSBgYnJfbXVsdGljYXN0X2ZpbmRfZGVsX3BnYCBjb3VsZCBkZWxldGUgdGhlIG5leHQgY2FjaGVkIG5vZGUgaW4gYGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVgLCBsZWFkaW5nIHRvIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBvciBsaXN0IGNvcnJ1cHRpb24uIFRoZXNlIHR5cGVzIG9mIG1lbW9yeSBjb3JydXB0aW9uIGFuZCB1c2UtYWZ0ZXItZnJlZSBidWdzIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zLCBvciBkYXRhIHNlbnQgdG8gdXNlciBzcGFjZSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgbGlzdCBpdGVyYXRpb24gYnVncyBpbiBgYnJfbXVsdGljYXN0X2RlbF9wb3J0YCBhbmQgYF9fYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydF9jdHhgIHdoZXJlIGBicl9tdWx0aWNhc3RfZmluZF9kZWxfcGdgIGNvdWxkIGRlbGV0ZSB0aGUgbmV4dCBjYWNoZWQgbm9kZSBpbiBgaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZWAsIGxlYWRpbmcgdG8gcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIGxpc3QgY29ycnVwdGlvbi4gVGhlc2UgdHlwZXMgb2YgbWVtb3J5IGNvcnJ1cHRpb24gYW5kIHVzZS1hZnRlci1mcmVlIGJ1Z3MgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcywgYWxsb2NhdGlvbnMsIG9yIGRhdGEgc2VudCB0byB1c2VyIHNwYWNlIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowv8zcm[1] Phase: Succeeded StartedAt: 2026-08-12 12:01:12 +0000 UTC FinishedAt: 2026-08-12 12:01:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv8zcm[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-12 12:01:12 +0000 UTC FinishedAt: 2026-08-12 12:01:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv8zcm[2] Phase: Succeeded StartedAt: 2026-08-12 12:01:12 +0000 UTC FinishedAt: 2026-08-12 15:41:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv8zcm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","BRIDGE_IGMP_SNOOPING","VLAN_8021Q","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_del_port","br_multicast_disable_port","br_multicast_enable_port","br_multicast_toggle","br_multicast_toggle_vlan_snooping","br_multicast_toggle_one_vlan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","BRIDGE_IGMP_SNOOPING","VLAN_8021Q","BRIDGE_VLAN_FILTERING"],"series_id":"323bdf1f-2509-476c-93b7-2b9b6dff11f1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-12 12:01:12 +0000 UTC FinishedAt: 2026-08-12 15:41:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","BRIDGE_IGMP_SNOOPING","VLAN_8021Q","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_del_port","br_multicast_disable_port","br_multicast_enable_port","br_multicast_toggle","br_multicast_toggle_vlan_snooping","br_multicast_toggle_one_vlan"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","BRIDGE_IGMP_SNOOPING","VLAN_8021Q","BRIDGE_VLAN_FILTERING"],"series_id":"323bdf1f-2509-476c-93b7-2b9b6dff11f1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowv8zcm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","BRIDGE_IGMP_SNOOPING","VLAN_8021Q","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_del_port","br_multicast_disable_port","br_multicast_enable_port","br_multicast_toggle","br_multicast_toggle_vlan_snooping","br_multicast_toggle_one_vlan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","BRIDGE_IGMP_SNOOPING","VLAN_8021Q","BRIDGE_VLAN_FILTERING"],"series_id":"323bdf1f-2509-476c-93b7-2b9b6dff11f1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-12 12:01:12 +0000 UTC FinishedAt: 2026-08-12 12:01:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv8zcm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","BRIDGE_IGMP_SNOOPING","VLAN_8021Q","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_del_port","br_multicast_disable_port","br_multicast_enable_port","br_multicast_toggle","br_multicast_toggle_vlan_snooping","br_multicast_toggle_one_vlan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","BRIDGE_IGMP_SNOOPING","VLAN_8021Q","BRIDGE_VLAN_FILTERING"],"series_id":"323bdf1f-2509-476c-93b7-2b9b6dff11f1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-12 12:01:12 +0000 UTC FinishedAt: 2026-08-12 12:01:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","BRIDGE_IGMP_SNOOPING","VLAN_8021Q","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowv8zcm/series-workflowv8zcm-convert-artifact-830887984/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv8zcm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","BRIDGE_IGMP_SNOOPING","VLAN_8021Q","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_del_port","br_multicast_disable_port","br_multicast_enable_port","br_multicast_toggle","br_multicast_toggle_vlan_snooping","br_multicast_toggle_one_vlan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","BRIDGE_IGMP_SNOOPING","VLAN_8021Q","BRIDGE_VLAN_FILTERING"],"series_id":"323bdf1f-2509-476c-93b7-2b9b6dff11f1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-12 12:01:22 +0000 UTC FinishedAt: 2026-08-12 12:17:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv8zcm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","BRIDGE_IGMP_SNOOPING","VLAN_8021Q","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_del_port","br_multicast_disable_port","br_multicast_enable_port","br_multicast_toggle","br_multicast_toggle_vlan_snooping","br_multicast_toggle_one_vlan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","BRIDGE_IGMP_SNOOPING","VLAN_8021Q","BRIDGE_VLAN_FILTERING"],"series_id":"323bdf1f-2509-476c-93b7-2b9b6dff11f1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-12 12:01:22 +0000 UTC FinishedAt: 2026-08-12 12:17:51 +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:*1847da1b-61e9-4d16-9c86-44dde4d4cac1,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-workflowv8zcm/series-workflowv8zcm-convert-artifact-830887984/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": "272d8d9d-d08c-4207-bdd4-8063d28d0a10", "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-workflowv8zcm/series-workflowv8zcm-build-action-3255190838/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv8zcm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","BRIDGE_IGMP_SNOOPING","VLAN_8021Q","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_del_port","br_multicast_disable_port","br_multicast_enable_port","br_multicast_toggle","br_multicast_toggle_vlan_snooping","br_multicast_toggle_one_vlan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","BRIDGE_IGMP_SNOOPING","VLAN_8021Q","BRIDGE_VLAN_FILTERING"],"series_id":"323bdf1f-2509-476c-93b7-2b9b6dff11f1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-12 12:01:22 +0000 UTC FinishedAt: 2026-08-12 12:17:41 +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:*1847da1b-61e9-4d16-9c86-44dde4d4cac1,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-workflowv8zcm/series-workflowv8zcm-convert-artifact-830887984/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": "272d8d9d-d08c-4207-bdd4-8063d28d0a10", "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-workflowv8zcm/series-workflowv8zcm-build-action-3255190838/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv8zcm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","BRIDGE_IGMP_SNOOPING","VLAN_8021Q","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_del_port","br_multicast_disable_port","br_multicast_enable_port","br_multicast_toggle","br_multicast_toggle_vlan_snooping","br_multicast_toggle_one_vlan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","BRIDGE_IGMP_SNOOPING","VLAN_8021Q","BRIDGE_VLAN_FILTERING"],"series_id":"323bdf1f-2509-476c-93b7-2b9b6dff11f1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-12 12:17:51 +0000 UTC FinishedAt: 2026-08-12 12:17:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv8zcm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","BRIDGE_IGMP_SNOOPING","VLAN_8021Q","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_del_port","br_multicast_disable_port","br_multicast_enable_port","br_multicast_toggle","br_multicast_toggle_vlan_snooping","br_multicast_toggle_one_vlan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","BRIDGE_IGMP_SNOOPING","VLAN_8021Q","BRIDGE_VLAN_FILTERING"],"series_id":"323bdf1f-2509-476c-93b7-2b9b6dff11f1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-12 12:17:51 +0000 UTC FinishedAt: 2026-08-12 12:17:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv8zcm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","BRIDGE_IGMP_SNOOPING","VLAN_8021Q","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_del_port","br_multicast_disable_port","br_multicast_enable_port","br_multicast_toggle","br_multicast_toggle_vlan_snooping","br_multicast_toggle_one_vlan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","BRIDGE_IGMP_SNOOPING","VLAN_8021Q","BRIDGE_VLAN_FILTERING"],"series_id":"323bdf1f-2509-476c-93b7-2b9b6dff11f1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-12 12:17:51 +0000 UTC FinishedAt: 2026-08-12 12:18:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv8zcm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","BRIDGE_IGMP_SNOOPING","VLAN_8021Q","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_del_port","br_multicast_disable_port","br_multicast_enable_port","br_multicast_toggle","br_multicast_toggle_vlan_snooping","br_multicast_toggle_one_vlan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","BRIDGE_IGMP_SNOOPING","VLAN_8021Q","BRIDGE_VLAN_FILTERING"],"series_id":"323bdf1f-2509-476c-93b7-2b9b6dff11f1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-12 12:17:51 +0000 UTC FinishedAt: 2026-08-12 12:17:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","BRIDGE_IGMP_SNOOPING","VLAN_8021Q","BRIDGE_VLAN_FILTERING"],"series_id":"323bdf1f-2509-476c-93b7-2b9b6dff11f1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowv8zcm/series-workflowv8zcm-convert-artifact-1116987159/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv8zcm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","BRIDGE_IGMP_SNOOPING","VLAN_8021Q","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_del_port","br_multicast_disable_port","br_multicast_enable_port","br_multicast_toggle","br_multicast_toggle_vlan_snooping","br_multicast_toggle_one_vlan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","BRIDGE_IGMP_SNOOPING","VLAN_8021Q","BRIDGE_VLAN_FILTERING"],"series_id":"323bdf1f-2509-476c-93b7-2b9b6dff11f1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-12 12:18:01 +0000 UTC FinishedAt: 2026-08-12 12:20:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv8zcm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","BRIDGE_IGMP_SNOOPING","VLAN_8021Q","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_del_port","br_multicast_disable_port","br_multicast_enable_port","br_multicast_toggle","br_multicast_toggle_vlan_snooping","br_multicast_toggle_one_vlan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","BRIDGE_IGMP_SNOOPING","VLAN_8021Q","BRIDGE_VLAN_FILTERING"],"series_id":"323bdf1f-2509-476c-93b7-2b9b6dff11f1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-12 12:18:01 +0000 UTC FinishedAt: 2026-08-12 12:20:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*272d8d9d-d08c-4207-bdd4-8063d28d0a10,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-workflowv8zcm/series-workflowv8zcm-build-action-3255190838/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-workflowv8zcm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","BRIDGE_IGMP_SNOOPING","VLAN_8021Q","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_del_port","br_multicast_disable_port","br_multicast_enable_port","br_multicast_toggle","br_multicast_toggle_vlan_snooping","br_multicast_toggle_one_vlan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","BRIDGE_IGMP_SNOOPING","VLAN_8021Q","BRIDGE_VLAN_FILTERING"],"series_id":"323bdf1f-2509-476c-93b7-2b9b6dff11f1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-12 12:20:16 +0000 UTC FinishedAt: 2026-08-12 12:20:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv8zcm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","BRIDGE_IGMP_SNOOPING","VLAN_8021Q","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_del_port","br_multicast_disable_port","br_multicast_enable_port","br_multicast_toggle","br_multicast_toggle_vlan_snooping","br_multicast_toggle_one_vlan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","BRIDGE_IGMP_SNOOPING","VLAN_8021Q","BRIDGE_VLAN_FILTERING"],"series_id":"323bdf1f-2509-476c-93b7-2b9b6dff11f1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-12 12:20:16 +0000 UTC FinishedAt: 2026-08-12 12:20:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv8zcm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","BRIDGE_IGMP_SNOOPING","VLAN_8021Q","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_del_port","br_multicast_disable_port","br_multicast_enable_port","br_multicast_toggle","br_multicast_toggle_vlan_snooping","br_multicast_toggle_one_vlan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","BRIDGE_IGMP_SNOOPING","VLAN_8021Q","BRIDGE_VLAN_FILTERING"],"series_id":"323bdf1f-2509-476c-93b7-2b9b6dff11f1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-12 12:20:16 +0000 UTC FinishedAt: 2026-08-12 12:37:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv8zcm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","BRIDGE_IGMP_SNOOPING","VLAN_8021Q","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_del_port","br_multicast_disable_port","br_multicast_enable_port","br_multicast_toggle","br_multicast_toggle_vlan_snooping","br_multicast_toggle_one_vlan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","BRIDGE_IGMP_SNOOPING","VLAN_8021Q","BRIDGE_VLAN_FILTERING"],"series_id":"323bdf1f-2509-476c-93b7-2b9b6dff11f1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-12 12:20:16 +0000 UTC FinishedAt: 2026-08-12 12:37:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*1847da1b-61e9-4d16-9c86-44dde4d4cac1,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-workflowv8zcm/series-workflowv8zcm-convert-artifact-1116987159/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": "07cf4c7b-8867-40a4-b3e2-477fa829cc3a", "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-workflowv8zcm/series-workflowv8zcm-build-action-2457802075/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv8zcm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","BRIDGE_IGMP_SNOOPING","VLAN_8021Q","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_del_port","br_multicast_disable_port","br_multicast_enable_port","br_multicast_toggle","br_multicast_toggle_vlan_snooping","br_multicast_toggle_one_vlan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","BRIDGE_IGMP_SNOOPING","VLAN_8021Q","BRIDGE_VLAN_FILTERING"],"series_id":"323bdf1f-2509-476c-93b7-2b9b6dff11f1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-12 12:20:16 +0000 UTC FinishedAt: 2026-08-12 12:37:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*1847da1b-61e9-4d16-9c86-44dde4d4cac1,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-workflowv8zcm/series-workflowv8zcm-convert-artifact-1116987159/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": "07cf4c7b-8867-40a4-b3e2-477fa829cc3a", "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-workflowv8zcm/series-workflowv8zcm-build-action-2457802075/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv8zcm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","BRIDGE_IGMP_SNOOPING","VLAN_8021Q","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_del_port","br_multicast_disable_port","br_multicast_enable_port","br_multicast_toggle","br_multicast_toggle_vlan_snooping","br_multicast_toggle_one_vlan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","BRIDGE_IGMP_SNOOPING","VLAN_8021Q","BRIDGE_VLAN_FILTERING"],"series_id":"323bdf1f-2509-476c-93b7-2b9b6dff11f1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-12 12:37:16 +0000 UTC FinishedAt: 2026-08-12 12:37:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv8zcm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","BRIDGE_IGMP_SNOOPING","VLAN_8021Q","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_del_port","br_multicast_disable_port","br_multicast_enable_port","br_multicast_toggle","br_multicast_toggle_vlan_snooping","br_multicast_toggle_one_vlan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","BRIDGE_IGMP_SNOOPING","VLAN_8021Q","BRIDGE_VLAN_FILTERING"],"series_id":"323bdf1f-2509-476c-93b7-2b9b6dff11f1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-12 12:37:16 +0000 UTC FinishedAt: 2026-08-12 12:37:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv8zcm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","BRIDGE_IGMP_SNOOPING","VLAN_8021Q","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_del_port","br_multicast_disable_port","br_multicast_enable_port","br_multicast_toggle","br_multicast_toggle_vlan_snooping","br_multicast_toggle_one_vlan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","BRIDGE_IGMP_SNOOPING","VLAN_8021Q","BRIDGE_VLAN_FILTERING"],"series_id":"323bdf1f-2509-476c-93b7-2b9b6dff11f1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-12 12:37:16 +0000 UTC FinishedAt: 2026-08-12 12:39:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv8zcm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","BRIDGE_IGMP_SNOOPING","VLAN_8021Q","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_del_port","br_multicast_disable_port","br_multicast_enable_port","br_multicast_toggle","br_multicast_toggle_vlan_snooping","br_multicast_toggle_one_vlan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","BRIDGE_IGMP_SNOOPING","VLAN_8021Q","BRIDGE_VLAN_FILTERING"],"series_id":"323bdf1f-2509-476c-93b7-2b9b6dff11f1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-12 12:37:16 +0000 UTC FinishedAt: 2026-08-12 12:39:22 +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:*07cf4c7b-8867-40a4-b3e2-477fa829cc3a,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-workflowv8zcm/series-workflowv8zcm-build-action-2457802075/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-workflowv8zcm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","BRIDGE_IGMP_SNOOPING","VLAN_8021Q","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_del_port","br_multicast_disable_port","br_multicast_enable_port","br_multicast_toggle","br_multicast_toggle_vlan_snooping","br_multicast_toggle_one_vlan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","BRIDGE_IGMP_SNOOPING","VLAN_8021Q","BRIDGE_VLAN_FILTERING"],"series_id":"323bdf1f-2509-476c-93b7-2b9b6dff11f1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-12 12:39:32 +0000 UTC FinishedAt: 2026-08-12 15:41:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv8zcm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","BRIDGE_IGMP_SNOOPING","VLAN_8021Q","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_del_port","br_multicast_disable_port","br_multicast_enable_port","br_multicast_toggle","br_multicast_toggle_vlan_snooping","br_multicast_toggle_one_vlan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","BRIDGE_IGMP_SNOOPING","VLAN_8021Q","BRIDGE_VLAN_FILTERING"],"series_id":"323bdf1f-2509-476c-93b7-2b9b6dff11f1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-12 12:39:32 +0000 UTC FinishedAt: 2026-08-12 15:41:09 +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":["br_multicast_del_port","br_multicast_disable_port","br_multicast_enable_port","br_multicast_toggle","br_multicast_toggle_vlan_snooping","br_multicast_toggle_one_vlan"],"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:*272d8d9d-d08c-4207-bdd4-8063d28d0a10,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*07cf4c7b-8867-40a4-b3e2-477fa829cc3a,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-workflowv8zcm/series-workflowv8zcm-build-action-3255190838/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-workflowv8zcm/series-workflowv8zcm-build-action-2457802075/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowv8zcm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","BRIDGE_IGMP_SNOOPING","VLAN_8021Q","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_del_port","br_multicast_disable_port","br_multicast_enable_port","br_multicast_toggle","br_multicast_toggle_vlan_snooping","br_multicast_toggle_one_vlan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","BRIDGE_IGMP_SNOOPING","VLAN_8021Q","BRIDGE_VLAN_FILTERING"],"series_id":"323bdf1f-2509-476c-93b7-2b9b6dff11f1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-12 12:39:32 +0000 UTC FinishedAt: 2026-08-12 12:39:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv8zcm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","BRIDGE_IGMP_SNOOPING","VLAN_8021Q","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_del_port","br_multicast_disable_port","br_multicast_enable_port","br_multicast_toggle","br_multicast_toggle_vlan_snooping","br_multicast_toggle_one_vlan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","BRIDGE_IGMP_SNOOPING","VLAN_8021Q","BRIDGE_VLAN_FILTERING"],"series_id":"323bdf1f-2509-476c-93b7-2b9b6dff11f1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-12 12:39:32 +0000 UTC FinishedAt: 2026-08-12 12:39:36 +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":["br_multicast_del_port","br_multicast_disable_port","br_multicast_enable_port","br_multicast_toggle","br_multicast_toggle_vlan_snooping","br_multicast_toggle_one_vlan"],"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-workflowv8zcm/series-workflowv8zcm-convert-artifact-3093253072/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv8zcm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","BRIDGE_IGMP_SNOOPING","VLAN_8021Q","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_del_port","br_multicast_disable_port","br_multicast_enable_port","br_multicast_toggle","br_multicast_toggle_vlan_snooping","br_multicast_toggle_one_vlan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","BRIDGE_IGMP_SNOOPING","VLAN_8021Q","BRIDGE_VLAN_FILTERING"],"series_id":"323bdf1f-2509-476c-93b7-2b9b6dff11f1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-12 12:39:32 +0000 UTC FinishedAt: 2026-08-12 12:39:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv8zcm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","BRIDGE_IGMP_SNOOPING","VLAN_8021Q","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_del_port","br_multicast_disable_port","br_multicast_enable_port","br_multicast_toggle","br_multicast_toggle_vlan_snooping","br_multicast_toggle_one_vlan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","BRIDGE_IGMP_SNOOPING","VLAN_8021Q","BRIDGE_VLAN_FILTERING"],"series_id":"323bdf1f-2509-476c-93b7-2b9b6dff11f1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-12 12:39:32 +0000 UTC FinishedAt: 2026-08-12 12:39:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv8zcm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","BRIDGE_IGMP_SNOOPING","VLAN_8021Q","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_del_port","br_multicast_disable_port","br_multicast_enable_port","br_multicast_toggle","br_multicast_toggle_vlan_snooping","br_multicast_toggle_one_vlan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","BRIDGE_IGMP_SNOOPING","VLAN_8021Q","BRIDGE_VLAN_FILTERING"],"series_id":"323bdf1f-2509-476c-93b7-2b9b6dff11f1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-12 12:39:32 +0000 UTC FinishedAt: 2026-08-12 12:39:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv8zcm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","BRIDGE_IGMP_SNOOPING","VLAN_8021Q","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_del_port","br_multicast_disable_port","br_multicast_enable_port","br_multicast_toggle","br_multicast_toggle_vlan_snooping","br_multicast_toggle_one_vlan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","BRIDGE_IGMP_SNOOPING","VLAN_8021Q","BRIDGE_VLAN_FILTERING"],"series_id":"323bdf1f-2509-476c-93b7-2b9b6dff11f1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-12 12:39:42 +0000 UTC FinishedAt: 2026-08-12 15:41:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv8zcm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","BRIDGE_IGMP_SNOOPING","VLAN_8021Q","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_del_port","br_multicast_disable_port","br_multicast_enable_port","br_multicast_toggle","br_multicast_toggle_vlan_snooping","br_multicast_toggle_one_vlan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"315f4bd234b3b8a3ed3a71fd4c53b110cf373720","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","BRIDGE_IGMP_SNOOPING","VLAN_8021Q","BRIDGE_VLAN_FILTERING"],"series_id":"323bdf1f-2509-476c-93b7-2b9b6dff11f1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-12 12:39:42 +0000 UTC FinishedAt: 2026-08-12 15:40:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*272d8d9d-d08c-4207-bdd4-8063d28d0a10,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*07cf4c7b-8867-40a4-b3e2-477fa829cc3a,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-workflowv8zcm/series-workflowv8zcm-build-action-3255190838/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-workflowv8zcm/series-workflowv8zcm-build-action-2457802075/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-workflowv8zcm/series-workflowv8zcm-convert-artifact-3093253072/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,}